Merge pull request #1368 from akhileshdarjee/default-tax

Default tax for customer and supplier
This commit is contained in:
Nabin Hait 2014-01-31 02:40:51 -08:00
commit c3211ab394
47 changed files with 533 additions and 514 deletions

View File

@ -5,7 +5,7 @@ from __future__ import unicode_literals
import webnotes
from webnotes.utils import flt, fmt_money, cstr, cint
from webnotes import msgprint, _
from webnotes import msgprint, throw, _
get_value = webnotes.conn.get_value
@ -43,7 +43,7 @@ class DocType:
msgprint(_("Please enter Master Name once the account is created."))
elif not webnotes.conn.exists(self.doc.master_type or self.doc.account_type,
self.doc.master_name):
webnotes.throw(_("Invalid Master Name"))
throw(_("Invalid Master Name"))
def validate_parent(self):
"""Fetch Parent Details and validation for account not to be created under ledger"""
@ -51,14 +51,19 @@ class DocType:
par = webnotes.conn.sql("""select name, group_or_ledger, is_pl_account, debit_or_credit
from tabAccount where name =%s""", self.doc.parent_account)
if not par:
msgprint("Parent account does not exists", raise_exception=1)
throw(_("Parent account does not exists"))
elif par[0][0] == self.doc.name:
msgprint("You can not assign itself as parent account", raise_exception=1)
throw(_("You can not assign itself as parent account"))
elif par[0][1] != 'Group':
msgprint("Parent account can not be a ledger", raise_exception=1)
throw(_("Parent account can not be a ledger"))
elif self.doc.debit_or_credit and par[0][3] != self.doc.debit_or_credit:
msgprint("You can not move a %s account under %s account" %
(self.doc.debit_or_credit, par[0][3]), raise_exception=1)
throw("{msg} {debit_or_credit} {under} {account} {acc}".format(**{
"msg": _("You cannot move a"),
"debit_or_credit": self.doc.debit_or_credit,
"under": _("account under"),
"account": par[0][3],
"acc": _("account")
}))
if not self.doc.is_pl_account:
self.doc.is_pl_account = par[0][2]
@ -70,22 +75,25 @@ class DocType:
if webnotes.conn.sql("""select count(*) from tabAccount where
company=%s and ifnull(parent_account,'')='' and docstatus != 2""",
self.doc.company)[0][0] > 4:
webnotes.msgprint("One company cannot have more than 4 root Accounts",
raise_exception=1)
throw(_("One company cannot have more than 4 root Accounts"))
def validate_duplicate_account(self):
if self.doc.fields.get('__islocal') or not self.doc.name:
company_abbr = webnotes.conn.get_value("Company", self.doc.company, "abbr")
if webnotes.conn.sql("""select name from tabAccount where name=%s""",
(self.doc.account_name + " - " + company_abbr)):
msgprint("Account Name: %s already exists, please rename"
% self.doc.account_name, raise_exception=1)
throw("{name}: {acc_name} {exist}, {rename}".format(**{
"name": _("Account Name"),
"acc_name": self.doc.account_name,
"exist": _("already exists"),
"rename": _("please rename")
}))
def validate_root_details(self):
#does not exists parent
if webnotes.conn.exists("Account", self.doc.name):
if not webnotes.conn.get_value("Account", self.doc.name, "parent_account"):
webnotes.msgprint("Root cannot be edited.", raise_exception=1)
throw(_("Root cannot be edited."))
def validate_frozen_accounts_modifier(self):
old_value = webnotes.conn.get_value("Account", self.doc.name, "freeze_account")
@ -94,15 +102,18 @@ class DocType:
'frozen_accounts_modifier')
if not frozen_accounts_modifier or \
frozen_accounts_modifier not in webnotes.user.get_roles():
webnotes.throw(_("You are not authorized to set Frozen value"))
throw(_("You are not authorized to set Frozen value"))
def convert_group_to_ledger(self):
if self.check_if_child_exists():
msgprint("Account: %s has existing child. You can not convert this account to ledger" %
(self.doc.name), raise_exception=1)
throw("{acc}: {account_name} {child}. {msg}".format(**{
"acc": _("Account"),
"account_name": self.doc.name,
"child": _("has existing child"),
"msg": _("You can not convert this account to ledger")
}))
elif self.check_gle_exists():
msgprint("Account with existing transaction can not be converted to ledger.",
raise_exception=1)
throw(_("Account with existing transaction can not be converted to ledger."))
else:
self.doc.group_or_ledger = 'Ledger'
self.doc.save()
@ -110,11 +121,9 @@ class DocType:
def convert_ledger_to_group(self):
if self.check_gle_exists():
msgprint("Account with existing transaction can not be converted to group.",
raise_exception=1)
throw(_("Account with existing transaction can not be converted to group."))
elif self.doc.master_type or self.doc.account_type:
msgprint("Cannot covert to Group because Master Type or Account Type is selected.",
raise_exception=1)
throw(_("Cannot covert to Group because Master Type or Account Type is selected."))
else:
self.doc.group_or_ledger = 'Group'
self.doc.save()
@ -130,9 +139,9 @@ class DocType:
def validate_mandatory(self):
if not self.doc.debit_or_credit:
msgprint("Debit or Credit field is mandatory", raise_exception=1)
throw(_("Debit or Credit field is mandatory"))
if not self.doc.is_pl_account:
msgprint("Is PL Account field is mandatory", raise_exception=1)
throw(_("Is PL Account field is mandatory"))
def validate_warehouse_account(self):
if not cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")):
@ -146,11 +155,11 @@ class DocType:
if self.doc.master_name:
self.validate_warehouse(self.doc.master_name)
else:
webnotes.throw(_("Master Name is mandatory if account type is Warehouse"))
throw(_("Master Name is mandatory if account type is Warehouse"))
def validate_warehouse(self, warehouse):
if webnotes.conn.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
webnotes.throw(_("Stock transactions exist against warehouse ") + warehouse +
throw(_("Stock transactions exist against warehouse ") + warehouse +
_(" .You can not assign / modify / remove Master Name"))
def update_nsm_model(self):
@ -183,22 +192,21 @@ class DocType:
# If outstanding greater than credit limit and not authorized person raise exception
if credit_limit > 0 and flt(total_outstanding) > credit_limit \
and not self.get_authorized_user():
msgprint("""Total Outstanding amount (%s) for <b>%s</b> can not be \
throw("""Total Outstanding amount (%s) for <b>%s</b> can not be \
greater than credit limit (%s). To change your credit limit settings, \
please update in the <b>%s</b> master""" % (fmt_money(total_outstanding),
self.doc.name, fmt_money(credit_limit), credit_limit_from), raise_exception=1)
self.doc.name, fmt_money(credit_limit), credit_limit_from))
def validate_trash(self):
"""checks gl entries and if child exists"""
if not self.doc.parent_account:
msgprint("Root account can not be deleted", raise_exception=1)
throw(_("Root account can not be deleted"))
if self.check_gle_exists():
msgprint("""Account with existing transaction (Sales Invoice / Purchase Invoice / \
Journal Voucher) can not be deleted""", raise_exception=1)
throw("""Account with existing transaction (Sales Invoice / Purchase Invoice / \
Journal Voucher) can not be deleted""")
if self.check_if_child_exists():
msgprint("Child account exists for this account. You can not delete this account.",
raise_exception=1)
throw(_("Child account exists for this account. You can not delete this account."))
def on_trash(self):
self.validate_trash()
@ -212,13 +220,13 @@ class DocType:
# Validate properties before merging
if merge:
if not webnotes.conn.exists("Account", new):
webnotes.throw(_("Account ") + new +_(" does not exists"))
throw(_("Account ") + new +_(" does not exists"))
val = list(webnotes.conn.get_value("Account", new_account,
["group_or_ledger", "debit_or_credit", "is_pl_account"]))
if val != [self.doc.group_or_ledger, self.doc.debit_or_credit, self.doc.is_pl_account]:
webnotes.throw(_("""Merging is only possible if following \
throw(_("""Merging is only possible if following \
properties are same in both records.
Group or Ledger, Debit or Credit, Is PL Account"""))

View File

@ -56,7 +56,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.cscript.parent_cost_center = function(doc, cdt, cdn) {
if(!doc.company){
alert(wn._('Please enter company name first'));
msgprint(wn._('Please enter company name first'));
}
}

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-24 12:15:51",
"docstatus": 0,
"modified": "2014-01-15 16:23:58",
"modified": "2014-01-29 13:08:24",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -22,6 +22,8 @@
"permlevel": 0
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"email": 1,
"name": "__common__",
@ -191,9 +193,9 @@
},
{
"doctype": "DocField",
"fieldname": "charge",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Charge",
"label": "Taxes and Charges",
"oldfieldname": "charge",
"oldfieldtype": "Link",
"options": "Sales Taxes and Charges Master",

View File

@ -3,7 +3,7 @@
cur_frm.cscript.tname = "Purchase Invoice Item";
cur_frm.cscript.fname = "entries";
cur_frm.cscript.other_fname = "purchase_tax_details";
cur_frm.cscript.other_fname = "other_charges";
wn.provide("erpnext.accounts");
{% include 'buying/doctype/purchase_common/purchase_common.js' %};

View File

@ -322,7 +322,7 @@ class DocType(BuyingController):
# tax table gl entries
valuation_tax = {}
for tax in self.doclist.get({"parentfield": "purchase_tax_details"}):
for tax in self.doclist.get({"parentfield": "other_charges"}):
if tax.category in ("Total", "Valuation and Total") and flt(tax.tax_amount):
gl_entries.append(
self.get_gl_dict({

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-21 16:16:39",
"docstatus": 0,
"modified": "2014-01-20 17:49:04",
"modified": "2014-01-29 15:26:54",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -324,16 +324,16 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "purchase_other_charges",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Tax Master",
"label": "Taxes and Charges",
"oldfieldname": "purchase_other_charges",
"oldfieldtype": "Link",
"options": "Purchase Taxes and Charges Master",
@ -342,7 +342,7 @@
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"oldfieldname": "purchase_tax_details",
@ -352,9 +352,9 @@
},
{
"doctype": "DocField",
"fieldname": "tax_calculation",
"fieldname": "other_charges_calculation",
"fieldtype": "HTML",
"label": "Tax Calculation",
"label": "Taxes and Charges Calculation",
"oldfieldtype": "HTML",
"print_hide": 1,
"read_only": 0

View File

@ -130,7 +130,7 @@ class TestPurchaseInvoice(unittest.TestCase):
["_Test Account Discount - _TC", 168.03, 1512.30],
]
for i, tax in enumerate(wrapper.doclist.get({"parentfield": "purchase_tax_details"})):
for i, tax in enumerate(wrapper.doclist.get({"parentfield": "other_charges"})):
self.assertEqual(tax.account_head, expected_values[i][0])
self.assertEqual(tax.tax_amount, expected_values[i][1])
self.assertEqual(tax.total, expected_values[i][2])
@ -165,7 +165,7 @@ class TestPurchaseInvoice(unittest.TestCase):
["_Test Account Discount - _TC", 168.03, 1512.30],
]
for i, tax in enumerate(wrapper.doclist.get({"parentfield": "purchase_tax_details"})):
for i, tax in enumerate(wrapper.doclist.get({"parentfield": "other_charges"})):
self.assertEqual(tax.account_head, expected_values[i][0])
self.assertEqual(tax.tax_amount, expected_values[i][1])
self.assertEqual(tax.total, expected_values[i][2])
@ -258,7 +258,7 @@ test_records = [
# taxes
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "Actual",
"account_head": "_Test Account Shipping Charges - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -269,7 +269,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Net Total",
"account_head": "_Test Account Customs Duty - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -280,7 +280,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Net Total",
"account_head": "_Test Account Excise Duty - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -291,7 +291,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account Education Cess - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -303,7 +303,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Previous Row Amount",
"account_head": "_Test Account S&H Education Cess - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -315,7 +315,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Previous Row Total",
"account_head": "_Test Account CST - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -327,7 +327,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Net Total",
"account_head": "_Test Account VAT - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -338,7 +338,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "On Previous Row Total",
"account_head": "_Test Account Discount - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -380,7 +380,7 @@ test_records = [
# taxes
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "Actual",
"account_head": "_Test Account Shipping Charges - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -391,7 +391,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "Actual",
"account_head": "_Test Account VAT - _TC",
"cost_center": "_Test Cost Center - _TC",
@ -402,7 +402,7 @@ test_records = [
},
{
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"charge_type": "Actual",
"account_head": "_Test Account Customs Duty - _TC",
"cost_center": "_Test Cost Center - _TC",

View File

@ -1,15 +1,8 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
//
//--------- ONLOAD -------------
{% include "public/js/controllers/accounts.js" %}
cur_frm.cscript.onload = function(doc, cdt, cdn) {
}
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
}
@ -27,7 +20,7 @@ cur_frm.pformat.in_words_import = function(doc) {
return '';
}
cur_frm.pformat.purchase_tax_details= function(doc){
cur_frm.pformat.other_charges= function(doc) {
//function to make row of table
var make_row = function(title, val, bold) {
@ -35,7 +28,7 @@ cur_frm.pformat.purchase_tax_details= function(doc){
return '<tr><td style="width:50%;">' + (bold?bstart:'') + title + (bold?bend:'') + '</td>'
+ '<td style="width:25%;text-align:right;"></td>'
+ '<td style="width:25%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
+'</tr>'
+ '</tr>';
}
function convert_rate(val) {
@ -48,7 +41,7 @@ cur_frm.pformat.purchase_tax_details= function(doc){
return doc_field.print_hide;
}
var cl = getchildren('Purchase Taxes and Charges',doc.name,'purchase_tax_details');
var cl = getchildren('Purchase Taxes and Charges', doc.name, 'other_charges');
// outer table
var out='<div><table class="noborder" style="width:100%">\
@ -56,9 +49,8 @@ cur_frm.pformat.purchase_tax_details= function(doc){
// main table
out +='<table class="noborder" style="width:100%">';
if(!print_hide('net_total_import')) {
if(!print_hide('net_total_import'))
out += make_row('Net Total', doc.net_total_import, 1);
}
// add rows
if(cl.length){
@ -66,50 +58,53 @@ cur_frm.pformat.purchase_tax_details= function(doc){
out += make_row(cl[i].description, convert_rate(cl[i].tax_amount), 0);
}
}
// grand total
if(!print_hide('grand_total_import')) {
if(!print_hide('grand_total_import'))
out += make_row('Grand Total', doc.grand_total_import, 1);
}
if(doc.in_words_import && !print_hide('in_words_import')) {
out += '</table></td></tr>';
out += '<tr><td colspan = "2">';
out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
out += '<td style="width:50%;">' + doc.in_words_import + '</td></tr>';
}
out +='</table></td></tr></table></div>';
return out;
}
cur_frm.cscript.add_deduct_tax = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.category && d.add_deduct_tax) {
alert(wn._("Please select Category first"));
msgprint(wn._("Please select Category first"));
d.add_deduct_tax = '';
}
else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
console.log([d.category, d.add_deduct_tax]);
msgprint(wn._("You cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
d.add_deduct_tax = '';
}
}
cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.category && d.charge_type) {
alert(wn._("Please select Category first"));
msgprint(wn._("Please select Category first"));
d.charge_type = '';
}
else if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')) {
alert(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
msgprint(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
d.charge_type = '';
}
else if((d.category == 'Valuation' || d.category == 'Valuation and Total') && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')) {
alert(wn._("You cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for valuation. You can select only 'Total' option for previous row amount or previous row total"))
msgprint(wn._("You cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for valuation. You can select only 'Total' option for previous row amount or previous row total"));
d.charge_type = '';
}
validated = false;
refresh_field('charge_type',d.name,'purchase_tax_details');
refresh_field('charge_type', d.name, 'other_charges');
cur_frm.cscript.row_id(doc, cdt, cdn);
cur_frm.cscript.rate(doc, cdt, cdn);
@ -119,25 +114,26 @@ cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
cur_frm.cscript.row_id = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.row_id) {
alert(wn._("Please select Charge Type first"));
msgprint(wn._("Please select Charge Type first"));
d.row_id = '';
}
else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
alert(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
msgprint(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
d.row_id = '';
}
else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
if(d.row_id >= d.idx){
alert(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
msgprint(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
d.row_id = '';
}
}
validated = false;
refresh_field('row_id',d.name,'purchase_tax_details');
refresh_field('row_id', d.name, 'other_charges');
}
cur_frm.set_query("account_head", "purchase_tax_details", function(doc) {
cur_frm.set_query("account_head", "other_charges", function(doc) {
return {
query: "erpnext.controllers.queries.tax_account_query",
filters: {
@ -148,7 +144,7 @@ cur_frm.set_query("account_head", "purchase_tax_details", function(doc) {
}
});
cur_frm.fields_dict['purchase_tax_details'].grid.get_field("cost_center").get_query = function(doc) {
cur_frm.fields_dict['other_charges'].grid.get_field("cost_center").get_query = function(doc) {
return {
filters: {
'company': doc.company,
@ -159,24 +155,27 @@ cur_frm.fields_dict['purchase_tax_details'].grid.get_field("cost_center").get_qu
cur_frm.cscript.rate = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.rate) {
alert(wn._("Please select Charge Type first"));
msgprint(wn._("Please select Charge Type first"));
d.rate = '';
}
validated = false;
refresh_field('rate',d.name,'purchase_tax_details');
refresh_field('rate', d.name, 'other_charges');
}
cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.tax_amount) {
alert(wn._("Please select Charge Type first"));
msgprint(wn._("Please select Charge Type first"));
d.tax_amount = '';
}
else if(d.charge_type && d.tax_amount) {
alert(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
msgprint(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
d.tax_amount = '';
}
validated = false;
refresh_field('tax_amount',d.name,'purchase_tax_details');
refresh_field('tax_amount', d.name, 'other_charges');
}

View File

@ -2,7 +2,7 @@
{
"creation": "2013-01-10 16:34:08",
"docstatus": 0,
"modified": "2014-01-28 12:28:56",
"modified": "2014-01-29 12:26:38",
"modified_by": "Administrator",
"owner": "wasim@webnotestech.com"
},
@ -71,7 +71,7 @@
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"oldfieldname": "purchase_tax_details",

View File

@ -194,7 +194,7 @@ class DocType(SellingController):
self.doc.customer = pos.customer
self.set_customer_defaults()
for fieldname in ('territory', 'naming_series', 'currency', 'charge', 'letter_head', 'tc_name',
for fieldname in ('territory', 'naming_series', 'currency', 'taxes_and_charges', 'letter_head', 'tc_name',
'selling_price_list', 'company', 'select_print_heading', 'cash_bank_account'):
if (not for_validate) or (for_validate and not self.doc.fields.get(fieldname)):
self.doc.fields[fieldname] = pos.get(fieldname)
@ -214,8 +214,8 @@ class DocType(SellingController):
self.doc.terms = webnotes.conn.get_value("Terms and Conditions", self.doc.tc_name, "terms")
# fetch charges
if self.doc.charge and not len(self.doclist.get({"parentfield": "other_charges"})):
self.set_taxes("other_charges", "charge")
if self.doc.taxes_and_charges and not len(self.doclist.get({"parentfield": "other_charges"})):
self.set_taxes("other_charges", "taxes_and_charges")
def get_customer_account(self):
"""Get Account Head to which amount needs to be Debited based on Customer"""

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-24 19:29:05",
"docstatus": 0,
"modified": "2014-01-20 17:49:20",
"modified": "2014-01-28 18:43:10",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -376,9 +376,9 @@
},
{
"doctype": "DocField",
"fieldname": "charge",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Tax Master",
"label": "Taxes and Charges",
"oldfieldname": "charge",
"oldfieldtype": "Link",
"options": "Sales Taxes and Charges Master",
@ -1231,6 +1231,7 @@
"write": 1
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"role": "Customer"

View File

@ -1,8 +1,6 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
//--------- ONLOAD -------------
{% include "public/js/controllers/accounts.js" %}
cur_frm.cscript.onload = function(doc, cdt, cdn) {
@ -41,7 +39,7 @@ cur_frm.pformat.other_charges= function(doc){
var bstart = '<b>'; var bend = '</b>';
return '<tr><td style="width:50%;">' + (bold?bstart:'') + title + (bold?bend:'') + '</td>'
+ '<td style="width:50%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
+'</tr>'
+ '</tr>';
}
function convert_rate(val) {
@ -78,24 +76,21 @@ cur_frm.pformat.other_charges= function(doc){
}
// Discount Amount
if(!print_hide('discount_amount') && doc.discount_amount) {
if(!print_hide('discount_amount') && doc.discount_amount)
out += make_row('Discount Amount', convert_rate(doc.discount_amount), 0);
}
// grand total
if(!print_hide('grand_total_export')) {
if(!print_hide('grand_total_export'))
out += make_row('Grand Total', doc.grand_total_export, 1);
}
if(!print_hide('rounded_total_export')) {
if(!print_hide('rounded_total_export'))
out += make_row('Rounded Total', doc.rounded_total_export, 1);
}
if(doc.in_words_export && !print_hide('in_words_export')) {
out +='</table></td></tr>';
out += '<tr><td colspan = "2">';
out += '<table><tr><td style="width:25%;"><b>In Words</b></td>'
out += '<td style="width:50%;">' + doc.in_words_export + '</td></tr>'
out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
out += '<td style="width:50%;">' + doc.in_words_export + '</td></tr>';
}
out += '</table></td></tr></table></div>';
}
@ -105,7 +100,7 @@ cur_frm.pformat.other_charges= function(doc){
cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')) {
alert(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
msgprint(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
d.charge_type = '';
}
validated = false;
@ -118,16 +113,16 @@ cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
cur_frm.cscript.row_id = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.row_id) {
alert(wn._("Please select Charge Type first"));
msgprint(wn._("Please select Charge Type first"));
d.row_id = '';
}
else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
alert(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
msgprint(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
d.row_id = '';
}
else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
if(d.row_id >= d.idx){
alert(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
msgprint(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
d.row_id = '';
}
}
@ -158,7 +153,7 @@ cur_frm.fields_dict['other_charges'].grid.get_field("cost_center").get_query = f
cur_frm.cscript.rate = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.rate) {
alert(wn._("Please select Charge Type first"));
msgprint(wn._("Please select Charge Type first"));
d.rate = '';
}
validated = false;
@ -168,11 +163,11 @@ cur_frm.cscript.rate = function(doc, cdt, cdn) {
cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
var d = locals[cdt][cdn];
if(!d.charge_type && d.tax_amount) {
alert(wn._("Please select Charge Type first"));
msgprint(wn._("Please select Charge Type first"));
d.tax_amount = '';
}
else if(d.charge_type && d.tax_amount) {
alert(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
msgprint(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
d.tax_amount = '';
}
validated = false;

View File

@ -6,7 +6,7 @@ from __future__ import unicode_literals
import webnotes
from webnotes.utils import nowdate, cstr, flt, now, getdate, add_months
from webnotes.model.doc import addchild
from webnotes import msgprint, _
from webnotes import msgprint, throw, _
from webnotes.utils import formatdate
from erpnext.utilities import build_filter_conditions
@ -41,12 +41,12 @@ def get_fiscal_years(date=None, fiscal_year=None, label="Date", verbose=1):
def validate_fiscal_year(date, fiscal_year, label="Date"):
years = [f[0] for f in get_fiscal_years(date, label=label)]
if fiscal_year not in years:
webnotes.msgprint(("%(label)s '%(posting_date)s': " + _("not within Fiscal Year") + \
throw(("%(label)s '%(posting_date)s': " + _("not within Fiscal Year") + \
": '%(fiscal_year)s'") % {
"label": label,
"posting_date": formatdate(date),
"fiscal_year": fiscal_year
}, raise_exception=1)
})
@webnotes.whitelist()
def get_balance_on(account=None, date=None):
@ -169,8 +169,7 @@ def check_if_jv_modified(args):
and t1.docstatus=1 and t2.%(dr_or_cr)s = %(unadjusted_amt)s""" % args)
if not ret:
msgprint(_("""Payment Entry has been modified after you pulled it.
Please pull it again."""), raise_exception=1)
throw(_("""Payment Entry has been modified after you pulled it. Please pull it again."""))
def update_against_doc(d, jv_obj):
"""
@ -247,9 +246,9 @@ def get_company_default(company, fieldname):
value = webnotes.conn.get_value("Company", company, fieldname)
if not value:
msgprint(_("Please mention default value for '") +
throw(_("Please mention default value for '") +
_(webnotes.get_doctype("company").get_label(fieldname) +
_("' in Company: ") + company), raise_exception=True)
_("' in Company: ") + company))
return value
@ -318,11 +317,11 @@ def validate_expense_against_budget(args):
if action_for:
actual_expense = get_actual_expense(args)
if actual_expense > budget_amount:
webnotes.msgprint(action_for + _(" budget ") + cstr(budget_amount) +
throw(action_for + _(" budget ") + cstr(budget_amount) +
_(" for account ") + args.account + _(" against cost center ") +
args.cost_center + _(" will exceed by ") +
cstr(actual_expense - budget_amount) + _(" after this transaction.")
, raise_exception=BudgetError if action=="Stop" else False)
, exc=BudgetError if action=="Stop" else False)
def get_allocated_budget(distribution_id, posting_date, fiscal_year, yearly_budget):
if distribution_id:

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -62,14 +62,13 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
},
supplier: function() {
var me = this;
if(this.frm.doc.supplier || this.frm.doc.credit_to) {
if(!this.frm.doc.company) {
this.frm.set_value("supplier", null);
msgprint(wn._("Please specify Company"));
} else {
var me = this;
var buying_price_list = this.frm.doc.buying_price_list;
return this.frm.call({
doc: this.frm.doc,
method: "set_supplier_defaults",
@ -77,6 +76,8 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
callback: function(r) {
if(!r.exc) {
if(me.frm.doc.buying_price_list !== buying_price_list) me.buying_price_list();
if (me.frm.doc.taxes_and_charges)
me.frm.script_manager.trigger("taxes_and_charges")
}
}
});
@ -241,21 +242,6 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
}
},
purchase_other_charges: function() {
var me = this;
if(this.frm.doc.purchase_other_charges) {
return this.frm.call({
doc: this.frm.doc,
method: "get_purchase_tax_details",
callback: function(r) {
if(!r.exc) {
me.calculate_taxes_and_totals();
}
}
});
}
},
calculate_taxes_and_totals: function() {
this._super();
this.calculate_total_advance("Purchase Invoice", "advance_allocation_details");
@ -398,13 +384,6 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
}
},
show_item_wise_taxes: function() {
if(this.frm.fields_dict.tax_calculation) {
$(this.get_item_wise_taxes_html())
.appendTo($(this.frm.fields_dict.tax_calculation.wrapper).empty());
}
},
change_form_labels: function(company_currency) {
var me = this;
var field_label_map = {};

View File

@ -5,7 +5,7 @@ wn.provide("erpnext.buying");
cur_frm.cscript.tname = "Purchase Order Item";
cur_frm.cscript.fname = "po_details";
cur_frm.cscript.other_fname = "purchase_tax_details";
cur_frm.cscript.other_fname = "other_charges";
{% include 'buying/doctype/purchase_common/purchase_common.js' %};
{% include 'accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js' %}

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-21 16:16:39",
"docstatus": 0,
"modified": "2014-01-20 17:49:08",
"modified": "2014-01-29 15:26:21",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -299,7 +299,7 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money",
"print_hide": 0
@ -307,9 +307,9 @@
{
"description": "If you have created a standard template in Purchase Taxes and Charges Master, select one and click on the button below.",
"doctype": "DocField",
"fieldname": "purchase_other_charges",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Tax Master",
"label": "Taxes and Charges",
"no_copy": 0,
"oldfieldname": "purchase_other_charges",
"oldfieldtype": "Link",
@ -318,7 +318,7 @@
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"no_copy": 0,
@ -328,9 +328,9 @@
},
{
"doctype": "DocField",
"fieldname": "tax_calculation",
"fieldname": "other_charges_calculation",
"fieldtype": "HTML",
"label": "Tax Calculation",
"label": "Taxes and Charges Calculation",
"no_copy": 1,
"oldfieldtype": "HTML",
"print_hide": 1
@ -699,6 +699,7 @@
"write": 1
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"role": "Supplier"

View File

@ -2,7 +2,7 @@
{
"creation": "2013-01-10 16:34:11",
"docstatus": 0,
"modified": "2014-01-20 17:49:29",
"modified": "2014-01-28 19:05:55",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -157,6 +157,14 @@
"reqd": 1,
"search_index": 0
},
{
"doctype": "DocField",
"fieldname": "default_currency",
"fieldtype": "Link",
"label": "Default Currency",
"no_copy": 1,
"options": "Currency"
},
{
"doctype": "DocField",
"fieldname": "default_price_list",
@ -166,11 +174,10 @@
},
{
"doctype": "DocField",
"fieldname": "default_currency",
"fieldname": "default_taxes_and_charges",
"fieldtype": "Link",
"label": "Default Currency",
"no_copy": 1,
"options": "Currency"
"label": "Taxes and Charges",
"options": "Purchase Taxes and Charges Master"
},
{
"doctype": "DocField",

View File

@ -4,7 +4,7 @@
// define defaults for purchase common
cur_frm.cscript.tname = "Supplier Quotation Item";
cur_frm.cscript.fname = "quotation_items";
cur_frm.cscript.other_fname = "purchase_tax_details";
cur_frm.cscript.other_fname = "other_charges";
// attach required files
{% include 'buying/doctype/purchase_common/purchase_common.js' %};

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-21 16:16:45",
"docstatus": 0,
"modified": "2014-01-20 17:49:29",
"modified": "2014-01-29 15:25:52",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -290,16 +290,16 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money"
},
{
"description": "If you have created a standard template in Purchase Taxes and Charges Master, select one and click on the button below.",
"doctype": "DocField",
"fieldname": "purchase_other_charges",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Purchase Taxes and Charges",
"label": "Taxes and Charges",
"no_copy": 1,
"oldfieldname": "purchase_other_charges",
"oldfieldtype": "Link",
@ -308,7 +308,7 @@
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"no_copy": 0,
@ -318,9 +318,9 @@
},
{
"doctype": "DocField",
"fieldname": "tax_calculation",
"fieldname": "other_charges_calculation",
"fieldtype": "HTML",
"label": "Tax Calculation",
"label": "Taxes and Charges Calculation",
"no_copy": 1,
"oldfieldtype": "HTML",
"print_hide": 1

View File

@ -131,6 +131,10 @@ class AccountsController(TransactionBase):
self.doclist.append(tax)
def get_other_charges(self):
self.doclist = self.doc.clear_table(self.doclist, "other_charges")
self.set_taxes("other_charges", "taxes_and_charges")
def calculate_taxes_and_totals(self):
self.discount_amount_applied = False
self._calculate_taxes_and_totals()

View File

@ -38,7 +38,7 @@ class BuyingController(StockController):
self.set_missing_item_details(get_item_details)
if self.doc.fields.get("__islocal"):
self.set_taxes("purchase_tax_details", "purchase_other_charges")
self.set_taxes("other_charges", "taxes_and_charges")
def set_supplier_from_item_default(self):
if self.meta.get_field("supplier") and not self.doc.supplier:
@ -57,14 +57,10 @@ class BuyingController(StockController):
for w in warehouses:
validate_warehouse_company(w, self.doc.company)
def get_purchase_tax_details(self):
self.doclist = self.doc.clear_table(self.doclist, "purchase_tax_details")
self.set_taxes("purchase_tax_details", "purchase_other_charges")
def validate_stock_or_nonstock_items(self):
if not self.get_stock_items():
tax_for_valuation = [d.account_head for d in
self.doclist.get({"parentfield": "purchase_tax_details"})
self.doclist.get({"parentfield": "other_charges"})
if d.category in ["Valuation", "Valuation and Total"]]
if tax_for_valuation:
webnotes.msgprint(_("""Tax Category can not be 'Valuation' or 'Valuation and Total' as all items are non-stock items"""), raise_exception=1)
@ -79,7 +75,7 @@ class BuyingController(StockController):
self.doc.currency)
def calculate_taxes_and_totals(self):
self.other_fname = "purchase_tax_details"
self.other_fname = "other_charges"
super(BuyingController, self).calculate_taxes_and_totals()
self.calculate_total_advance("Purchase Invoice", "advance_allocation_details")
@ -203,7 +199,7 @@ class BuyingController(StockController):
last_stock_item_idx = d.idx
total_valuation_amount = sum([flt(d.tax_amount) for d in
self.doclist.get({"parentfield": "purchase_tax_details"})
self.doclist.get({"parentfield": "other_charges"})
if d.category in ["Valuation", "Valuation and Total"]])

View File

@ -30,7 +30,7 @@ class SellingController(StockController):
self.set_missing_lead_customer_details()
self.set_price_list_and_item_details()
if self.doc.fields.get("__islocal"):
self.set_taxes("other_charges", "charge")
self.set_taxes("other_charges", "taxes_and_charges")
def set_missing_lead_customer_details(self):
if self.doc.customer:
@ -50,10 +50,6 @@ class SellingController(StockController):
self.set_price_list_currency("Selling")
self.set_missing_item_details(get_item_details)
def get_other_charges(self):
self.doclist = self.doc.clear_table(self.doclist, "other_charges")
self.set_taxes("other_charges", "charge")
def apply_shipping_rule(self):
if self.doc.shipping_rule:
shipping_rule = webnotes.bean("Shipping Rule", self.doc.shipping_rule)

View File

@ -2,20 +2,18 @@
// License: GNU General Public License v3. See license.txt
cur_frm.cscript.onload = function(doc, dt, dn){
if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
if(!doc.leave_transaction_type) set_multiple(dt,dn,{leave_transaction_type:'Allocation'});
if(!doc.posting_date)
set_multiple(dt, dn, {posting_date: get_today()});
if(!doc.leave_transaction_type)
set_multiple(dt, dn, {leave_transaction_type: 'Allocation'});
}
// Validation For To Date
// ================================================================================================
cur_frm.cscript.to_date = function(doc, cdt, cdn) {
return $c('runserverobj', args={'method':'to_date_validation','docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
function(r, rt) {
var doc = locals[cdt][cdn];
if (r.message) {
alert(wn._("To date cannot be before from date"));
msgprint(wn._("To date cannot be before from date"));
doc.to_date = '';
refresh_field('to_date');
}
@ -23,8 +21,6 @@ cur_frm.cscript.to_date = function(doc, cdt, cdn) {
);
}
// Allocation Type
// ================================================================================================
cur_frm.cscript.allocation_type = function (doc, cdt, cdn){
doc.no_of_days = '';
refresh_field('no_of_days');

View File

@ -3,20 +3,17 @@ erpnext.patches.4_0.update_user_properties
erpnext.patches.4_0.move_warehouse_user_to_restrictions
erpnext.patches.4_0.new_permissions
erpnext.patches.4_0.update_incharge_name_to_sales_person_in_maintenance_schedule
execute:webnotes.reload_doc('accounts', 'doctype', 'sales_invoice') # 2014-01-03
execute:webnotes.reload_doc('selling', 'doctype', 'sales_order') # 2014-01-03
execute:webnotes.reload_doc('selling', 'doctype', 'quotation') # 2014-01-03
execute:webnotes.reload_doc('stock', 'doctype', 'delivery_note') # 2014-01-03
execute:webnotes.reload_doc('accounts', 'Print Format', 'POS Invoice') # 2014-01-03
execute:webnotes.reload_doc('accounts', 'Print Format', 'Sales Invoice Classic') # 2014-01-03
execute:webnotes.reload_doc('accounts', 'Print Format', 'Sales Invoice Modern') # 2014-01-03
execute:webnotes.reload_doc('accounts', 'Print Format', 'Sales Invoice Spartan') # 2014-01-03
execute:webnotes.reload_doc('selling', 'Print Format', 'Quotation Classic') # 2014-01-03
execute:webnotes.reload_doc('selling', 'Print Format', 'Quotation Modern') # 2014-01-03
execute:webnotes.reload_doc('selling', 'Print Format', 'Quotation Spartan') # 2014-01-03
execute:webnotes.reload_doc('selling', 'Print Format', 'Sales Order Classic') # 2014-01-03
execute:webnotes.reload_doc('selling', 'Print Format', 'Sales Order Modern') # 2014-01-03
execute:webnotes.reload_doc('selling', 'Print Format', 'Sales Order Spartan') # 2014-01-03
execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Classic') # 2014-01-03
execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Modern') # 2014-01-03
execute:webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Spartan') # 2014-01-03
execute:webnotes.reload_doc('accounts', 'doctype', 'sales_invoice') # 2014-01-29
execute:webnotes.reload_doc('selling', 'doctype', 'sales_order') # 2014-01-29
execute:webnotes.reload_doc('selling', 'doctype', 'quotation') # 2014-01-29
execute:webnotes.reload_doc('stock', 'doctype', 'delivery_note') # 2014-01-29
erpnext.patches.4_0.reload_sales_print_format
execute:webnotes.reload_doc('accounts', 'doctype', 'purchase_invoice') # 2014-01-29
execute:webnotes.reload_doc('buying', 'doctype', 'purchase_order') # 2014-01-29
execute:webnotes.reload_doc('buying', 'doctype', 'supplier_quotation') # 2014-01-29
execute:webnotes.reload_doc('stock', 'doctype', 'purchase_receipt') # 2014-01-29
erpnext.patches.4_0.reload_purchase_print_format
execute:webnotes.reload_doc('accounts', 'doctype', 'pos_setting') # 2014-01-29
execute:webnotes.reload_doc('selling', 'doctype', 'customer') # 2014-01-29
execute:webnotes.reload_doc('buying', 'doctype', 'supplier') # 2014-01-29
erpnext.patches.4_0.map_charge_to_taxes_and_charges

View File

@ -0,0 +1,20 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
def execute():
# udpate sales cycle
webnotes.conn.sql("""update `tabSales Invoice` set taxes_and_charges=charge""")
webnotes.conn.sql("""update `tabSales Order` set taxes_and_charges=charge""")
webnotes.conn.sql("""update `tabQuotation` set taxes_and_charges=charge""")
webnotes.conn.sql("""update `tabDelivery Note` set taxes_and_charges=charge""")
# udpate purchase cycle
webnotes.conn.sql("""update `tabPurchase Invoice` set taxes_and_charges=purchase_other_charges""")
webnotes.conn.sql("""update `tabPurchase Order` set taxes_and_charges=purchase_other_charges""")
webnotes.conn.sql("""update `tabSupplier Quotation` set taxes_and_charges=purchase_other_charges""")
webnotes.conn.sql("""update `tabPurchase Receipt` set taxes_and_charges=purchase_other_charges""")
webnotes.conn.sql("""update `tabPurchase Taxes and Charges` set parentfield='other_charges'""")

View File

@ -0,0 +1,10 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
def execute():
webnotes.reload_doc('buying', 'Print Format', 'Purchase Order Classic')
webnotes.reload_doc('buying', 'Print Format', 'Purchase Order Modern')
webnotes.reload_doc('buying', 'Print Format', 'Purchase Order Spartan')

View File

@ -0,0 +1,20 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import webnotes
def execute():
webnotes.reload_doc('accounts', 'Print Format', 'POS Invoice')
webnotes.reload_doc('accounts', 'Print Format', 'Sales Invoice Classic')
webnotes.reload_doc('accounts', 'Print Format', 'Sales Invoice Modern')
webnotes.reload_doc('accounts', 'Print Format', 'Sales Invoice Spartan')
webnotes.reload_doc('selling', 'Print Format', 'Quotation Classic')
webnotes.reload_doc('selling', 'Print Format', 'Quotation Modern')
webnotes.reload_doc('selling', 'Print Format', 'Quotation Spartan')
webnotes.reload_doc('selling', 'Print Format', 'Sales Order Classic')
webnotes.reload_doc('selling', 'Print Format', 'Sales Order Modern')
webnotes.reload_doc('selling', 'Print Format', 'Sales Order Spartan')
webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Classic')
webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Modern')
webnotes.reload_doc('stock', 'Print Format', 'Delivery Note Spartan')

View File

@ -33,7 +33,7 @@ $.extend(erpnext.queries, {
},
task: function() {
return { query: "projects.utils.query_task" };
return { query: "erpnext.projects.utils.query_task" };
},
customer_filter: function(doc) {

View File

@ -708,4 +708,26 @@ erpnext.TransactionController = erpnext.stock.StockController.extend({
});
}
},
taxes_and_charges: function() {
var me = this;
if(this.frm.doc.taxes_and_charges) {
return this.frm.call({
doc: this.frm.doc,
method: "get_other_charges",
callback: function(r) {
if(!r.exc) {
me.calculate_taxes_and_totals();
}
}
});
}
},
show_item_wise_taxes: function() {
if(this.frm.fields_dict.other_charges_calculation) {
$(this.get_item_wise_taxes_html())
.appendTo($(this.frm.fields_dict.other_charges_calculation.wrapper).empty());
}
},
});

View File

@ -2,7 +2,7 @@
{
"creation": "2013-06-11 14:26:44",
"docstatus": 0,
"modified": "2014-01-20 17:48:32",
"modified": "2014-01-28 19:06:18",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -26,6 +26,7 @@
"parenttype": "DocType"
},
{
"cancel": 0,
"doctype": "DocPerm",
"name": "__common__",
"parent": "Customer",
@ -252,6 +253,14 @@
"options": "Price List",
"permlevel": 0
},
{
"doctype": "DocField",
"fieldname": "default_taxes_and_charges",
"fieldtype": "Link",
"label": "Taxes and Charges",
"options": "Sales Taxes and Charges Master",
"permlevel": 0
},
{
"doctype": "DocField",
"fieldname": "credit_days",
@ -343,7 +352,6 @@
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 0,
"doctype": "DocPerm",
@ -363,7 +371,6 @@
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"doctype": "DocPerm",

View File

@ -373,17 +373,17 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money",
"read_only": 0
},
{
"doctype": "DocField",
"fieldname": "charge",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"hidden": 0,
"label": "Tax Master",
"label": "Taxes and Charges",
"oldfieldname": "charge",
"oldfieldtype": "Link",
"options": "Sales Taxes and Charges Master",

View File

@ -2,7 +2,7 @@
{
"creation": "2013-06-18 12:39:59",
"docstatus": 0,
"modified": "2014-01-20 17:49:23",
"modified": "2014-01-28 18:47:42",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -398,16 +398,16 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money",
"print_hide": 0
},
{
"doctype": "DocField",
"fieldname": "charge",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Tax Master",
"label": "Taxes and Charges",
"oldfieldname": "charge",
"oldfieldtype": "Link",
"options": "Sales Taxes and Charges Master",
@ -928,11 +928,13 @@
"write": 1
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"role": "Accounts User"
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"role": "Customer"

View File

@ -35,8 +35,8 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
});
if(this.frm.fields_dict.charge) {
this.frm.set_query("charge", function() {
if(this.frm.fields_dict.taxes_and_charges) {
this.frm.set_query("taxes_and_charges", function() {
return {
filters: [
['Sales Taxes and Charges Master', 'company', '=', me.frm.doc.company],
@ -80,7 +80,7 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
if(item.warehouse) filters["warehouse"] = item.warehouse
return {
query : "controllers.queries.get_batch_no",
query : "erpnext.controllers.queries.get_batch_no",
filters: filters
}
}
@ -119,6 +119,8 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
(me.frm.doc.selling_price_list !== selling_price_list) ?
me.selling_price_list() :
me.price_list_currency();
if (me.frm.doc.taxes_and_charges)
me.frm.script_manager.trigger("taxes_and_charges")
}
}
});
@ -511,28 +513,6 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
this.frm.doc.in_words = this.frm.doc.in_words_export = "";
},
show_item_wise_taxes: function() {
if(this.frm.fields_dict.other_charges_calculation) {
$(this.get_item_wise_taxes_html())
.appendTo($(this.frm.fields_dict.other_charges_calculation.wrapper).empty());
}
},
charge: function() {
var me = this;
if(this.frm.doc.charge) {
return this.frm.call({
doc: this.frm.doc,
method: "get_other_charges",
callback: function(r) {
if(!r.exc) {
me.calculate_taxes_and_totals();
}
}
});
}
},
shipping_rule: function() {
var me = this;
if(this.frm.doc.shipping_rule) {

View File

@ -1,20 +0,0 @@
[
{
"owner": "Administrator",
"docstatus": 0,
"creation": "2010-08-08 17:09:34",
"modified_by": "Administrator",
"modified": "2011-10-19 14:18:26"
},
{
"name": "__common__",
"module": "Stock",
"standard": "Yes",
"html": "<html>\n<head>\n<!--Other charges function-->\n<script>\n var make_row = function(title,val,bold){\n var bstart = '<b>'; var bend = '</b>';\n return '<tr><td style=\"width:50%\">'+(bold?bstart:'')+title+(bold?bend:'')+'</td>'\n +'<td style=\"width:20%;text-align:right\">'+doc.currency+'</td>'\n +'<td style=\"width:30%;text-align:right\">'+(val?val:'0.00')+'</td>'\n +'</tr>'\n }\n\n function get_other_charges(){\n var out ='';\n out += '<div><table class=\"noborder\" style=\"width:100%\">';\n out += make_row('Total Amount',fmt_money(convert_rate(doc.total_amount)),1)\n +make_row('Grand Total',fmt_money(convert_rate(doc.grand_total)),1);\n out += '</table></div>';\n return out;\n }\n\n function get_buying_costs(){\n var out ='';\n if(doc.buying_cost_transport || doc.buying_cost_taxes || doc.buying_cost_other){\n out += '<div><table class=\"noborder\" style=\"width:100%\">'\n + '<tr><td style=\"width:100%\"><b>'+'Buying Cost Details'+'</b></td></tr>';\n if(doc.buying_cost_transport){ out += make_row('Transport Cost',fmt_money(convert_rate(doc.buying_cost_transport)),0)}\n if(doc.buying_cost_taxes){ out += make_row('Taxes',fmt_money(convert_rate(doc.buying_cost_taxes)),0)}\n if(doc.buying_cost_other){ out += make_row('Other Cost',fmt_money(convert_rate(doc.buying_cost_other)),0)}\n out += '</table></div>';\n }\n return out;\n }\n\nfunction get_letter_head() {\n\t// add letter head\n\tvar cp = locals['Control Panel']['Control Panel'];\n\tif(doc.letter_head)\n\t\tvar lh= cstr(_p.letter_heads[doc.letter_head]);\n\telse if(cp.letter_head)\n\t\tvar lh= cp.letter_head;\n\telse \n\t\tvar lh= '';\n\t\t\n\treturn lh;\n}\n\n \n function convert_rate(val){\n var new_val = flt(val)/flt(doc.conversion_rate);\n return new_val;\n }\n \n function get_transport_details(){\n var out = '';\n if(doc.transporter_name || doc.lr_no || doc.lr_date){\n out += '<div><table class=\"noborder\" style=\"width:40%\">'\n +'<tr><td style=\"width:80%\"><b>' + 'Transporter Details'+'</b></td><td style=\"width:20%\"></td></tr>'\n\n if(doc.transporter_name){ out += '<tr><td style=\"width:40%\">' + 'Transporter Name'+'</td><td style=\"width:60%\">'+doc.transporter_name+'</td></tr>'}\n if(doc.lr_no){ out += '<tr><td style=\"width:40%\">' + 'LR No'+'</td><td style=\"width:60%\">'+doc.lr_no+'</td></tr>'}\n if(doc.lr_date){ out += '<tr><td style=\"width:40%\">' + 'LR Date'+'</td><td style=\"width:60%\">'+doc.lr_date+'</td></tr>'}\n out += '</table></div>'\n }\n return out;\n }\n\n</script>\n</head>\n<body>\n<div style=\"border:1px solid black;padding:15px\">\n<!--header-->\n<div><script>get_letter_head()</script></div>\n<div style=\"border-bottom: 1px solid; padding-bottom: 5px;\">\n <div><br><b>Purchase Receipt: <script>doc.name</script></b></div>\n <div>Date: <script>date.str_to_user(doc.transaction_date)</script></div>\n</div>\n\n<div style=\"padding-top:15px\">\n<div><script>doc.supplier</script></div>\n<div><br><script>replace_newlines(doc.address_display)</script></div>\n</div>\n\n<div>\n<br>\n <script>\n var t = print_table('Purchase Receipt', doc.name, 'purchase_receipt_details', 'Purchase Receipt Item', ['SR', 'item_code','description','received_qty','qty','rejected_qty','po_rate','amount','billed_qty'], ['Sr', 'Item Code', 'Description','Received Quantity','Accepted Qty','Rejected Qty','Rate','Amount','Billed Qty'], ['4%','12%', '24%', '10%','10%','10%','10%','10%','10%'])\n if(t.appendChild) {\n // single\n out = t.innerHTML;\n } \n else {//multiple\n out = ''\n for(var i=0;i<t.length;i++) {\n if(i!=t.length-1){\n out += '<div style:\"padding-top:5px;\"></div>' + t[i].innerHTML +'<div style=\"page-break-after:always\"></div>';\n }\n else out += '<div style:\"padding-top:5px;\"></div>' + t[i].innerHTML;\n }\n }\n out;\n </script>\n\n</div>\n\n<!--Other charges table-->\n<div>\n<table style=\"width:100%\">\n <tr><td style=\"width:40%\"><script>get_buying_costs()</script></td>\n <td style=\"width:20%\"></td><td style=\"width:40%\"><script>get_other_charges()</script></td></tr>\n</table>\n</div>\n<div><script>get_transport_details()</script></div>\n<div><br>Payment Terms</div>\n<div><br><script>replace_newlines(doc.payment_terms)</script></div>\n<div><br>For NCSCI</div>\n<div><br><br>(Authorised Signatory)</div>\n</div></body>\n</html>",
"doctype": "Print Format"
},
{
"name": "Purchase Receipt Format",
"doctype": "Print Format"
}
]

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-24 19:29:09",
"docstatus": 0,
"modified": "2014-01-20 17:48:35",
"modified": "2014-01-28 18:51:42",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -402,7 +402,7 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money",
"read_only": 0
@ -410,9 +410,9 @@
{
"description": "If you have created a standard template in Sales Taxes and Charges Master, select one and click on the button below.",
"doctype": "DocField",
"fieldname": "charge",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Tax Master",
"label": "Taxes and Charges",
"oldfieldname": "charge",
"oldfieldtype": "Link",
"options": "Sales Taxes and Charges Master",
@ -1071,6 +1071,7 @@
"write": 0
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"role": "Customer"

View File

@ -34,12 +34,13 @@ cur_frm.cscript.edit_prices_button = function() {
}
cur_frm.cscript.item_code = function(doc) {
if(!doc.item_name) cur_frm.set_value("item_name", doc.item_code);
if(!doc.description) cur_frm.set_value("description", doc.item_code);
if(!doc.item_name)
cur_frm.set_value("item_name", doc.item_code);
if(!doc.description)
cur_frm.set_value("description", doc.item_code);
}
cur_frm.fields_dict['default_bom'].get_query = function(doc) {
//var d = locals[this.doctype][this.docname];
return {
filters: {
'item': doc.item_code,
@ -106,8 +107,6 @@ cur_frm.cscript.tax_type = function(doc, cdt, cdn){
return get_server_fields('get_tax_rate', d.tax_type, 'item_tax', doc, cdt, cdn, 1);
}
//get query select item group
cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
return {
filters: [
@ -116,10 +115,6 @@ cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
}
}
// for description from attachment
// takes the first attachment and creates
// a table with both image and attachment in HTML
// in the "alternate_description" field
cur_frm.cscript.add_image = function(doc, dt, dn) {
if(!doc.image) {
msgprint(wn._('Please select an "Image" first'));
@ -133,12 +128,11 @@ cur_frm.cscript.add_image = function(doc, dt, dn) {
refresh_field('description_html');
}
// Quotation to validation - either customer or lead mandatory
cur_frm.cscript.weight_to_validate = function(doc, cdt, cdn){
if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom)
{
alert(wn._('Weight is mentioned,\nPlease mention "Weight UOM" too'));
if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom) {
msgprint(wn._('Weight is mentioned,\nPlease mention "Weight UOM" too'));
validated = 0;
}
}
@ -147,13 +141,13 @@ cur_frm.cscript.validate = function(doc,cdt,cdn){
cur_frm.cscript.weight_to_validate(doc, cdt, cdn);
}
cur_frm.fields_dict.item_customer_details.grid.get_field("customer_name").get_query =
function(doc,cdt,cdn) {
return{ query: "erpnext.controllers.queries.customer_query" } }
cur_frm.fields_dict.item_customer_details.grid.get_field("customer_name").get_query = function(doc, cdt, cdn) {
return { query: "erpnext.controllers.queries.customer_query" }
}
cur_frm.fields_dict.item_supplier_details.grid.get_field("supplier").get_query =
function(doc,cdt,cdn) {
return{ query: "erpnext.controllers.queries.supplier_query" } }
cur_frm.fields_dict.item_supplier_details.grid.get_field("supplier").get_query = function(doc, cdt, cdn) {
return { query: "erpnext.controllers.queries.supplier_query" }
}
cur_frm.cscript.copy_from_item_group = function(doc) {
wn.model.with_doc("Item Group", doc.item_group, function() {
@ -172,9 +166,9 @@ cur_frm.cscript.copy_from_item_group = function(doc) {
cur_frm.cscript.image = function() {
refresh_field("image_view");
if(!cur_frm.doc.description_html) {
if(!cur_frm.doc.description_html)
cur_frm.cscript.add_image(cur_frm.doc);
} else {
else {
msgprint(wn._("You may need to update: ") +
wn.meta.get_docfield(cur_frm.doc.doctype, "description_html").label);
}

View File

@ -39,13 +39,13 @@ class DocType:
for pr in purchase_receipts:
pr_bean = webnotes.bean('Purchase Receipt', pr)
idx = max([d.idx for d in pr_bean.doclist.get({"parentfield": "purchase_tax_details"})])
idx = max([d.idx for d in pr_bean.doclist.get({"parentfield": "other_charges"})])
for lc in self.doclist.get({"parentfield": "landed_cost_details"}):
amt = flt(lc.amount) * flt(pr_bean.doc.net_total)/ flt(total_amt)
matched_row = pr_bean.doclist.get({
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"category": "Valuation",
"add_deduct_tax": "Add",
"charge_type": "Actual",
@ -53,7 +53,7 @@ class DocType:
})
if not matched_row: # add if not exists
ch = addchild(pr_bean.doc, 'purchase_tax_details', 'Purchase Taxes and Charges')
ch = addchild(pr_bean.doc, 'other_charges', 'Purchase Taxes and Charges')
ch.category = 'Valuation'
ch.add_deduct_tax = 'Add'
ch.charge_type = 'Actual'

View File

@ -3,7 +3,7 @@
cur_frm.cscript.tname = "Purchase Receipt Item";
cur_frm.cscript.fname = "purchase_receipt_details";
cur_frm.cscript.other_fname = "purchase_tax_details";
cur_frm.cscript.other_fname = "other_charges";
{% include 'buying/doctype/purchase_common/purchase_common.js' %};
{% include 'accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js' %}
@ -120,7 +120,8 @@ cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) {
cur_frm.cscript.new_contact = function() {
tn = wn.model.make_new_doc_and_get_name('Contact');
locals['Contact'][tn].is_supplier = 1;
if(doc.supplier) locals['Contact'][tn].supplier = doc.supplier;
if(doc.supplier)
locals['Contact'][tn].supplier = doc.supplier;
loaddoc('Contact', tn);
}
@ -139,16 +140,13 @@ cur_frm.fields_dict['purchase_receipt_details'].grid.get_field('batch_no').get_q
filters: {'item': d.item_code}
}
}
else{
alert(wn._("Please enter Item Code."));
}
else
msgprint(wn._("Please enter Item Code."));
}
cur_frm.cscript.select_print_heading = function(doc, cdt, cdn) {
if(doc.select_print_heading){
// print heading
if(doc.select_print_heading)
cur_frm.pformat.print_heading = doc.select_print_heading;
}
else
cur_frm.pformat.print_heading = "Purchase Receipt";
}
@ -170,7 +168,6 @@ cur_frm.fields_dict.purchase_receipt_details.grid.get_field("qa_no").get_query =
}
cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
if(cint(wn.boot.notification_settings.purchase_receipt)) {
if(cint(wn.boot.notification_settings.purchase_receipt))
cur_frm.email_doc(wn.boot.notification_settings.purchase_receipt_message);
}
}

View File

@ -2,7 +2,7 @@
{
"creation": "2013-05-21 16:16:39",
"docstatus": 0,
"modified": "2014-01-20 17:49:12",
"modified": "2014-01-29 15:25:14",
"modified_by": "Administrator",
"owner": "Administrator"
},
@ -329,16 +329,16 @@
"doctype": "DocField",
"fieldname": "taxes",
"fieldtype": "Section Break",
"label": "Taxes",
"label": "Taxes and Charges",
"oldfieldtype": "Section Break",
"options": "icon-money"
},
{
"description": "If you have created a standard template in Purchase Taxes and Charges Master, select one and click on the button below.",
"doctype": "DocField",
"fieldname": "purchase_other_charges",
"fieldname": "taxes_and_charges",
"fieldtype": "Link",
"label": "Purchase Taxes and Charges",
"label": "Taxes and Charges",
"oldfieldname": "purchase_other_charges",
"oldfieldtype": "Link",
"options": "Purchase Taxes and Charges Master",
@ -346,7 +346,7 @@
},
{
"doctype": "DocField",
"fieldname": "purchase_tax_details",
"fieldname": "other_charges",
"fieldtype": "Table",
"label": "Purchase Taxes and Charges",
"oldfieldname": "purchase_tax_details",
@ -355,9 +355,9 @@
},
{
"doctype": "DocField",
"fieldname": "tax_calculation",
"fieldname": "other_charges_calculation",
"fieldtype": "HTML",
"label": "Tax Calculation",
"label": "Taxes and Charges Calculation",
"oldfieldtype": "HTML",
"print_hide": 1
},
@ -836,6 +836,7 @@
"write": 1
},
{
"cancel": 0,
"delete": 0,
"doctype": "DocPerm",
"role": "Supplier"

View File

@ -184,7 +184,7 @@ test_records = [
"charge_type": "Actual",
"description": "Shipping Charges",
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"rate": 100.0,
"tax_amount": 100.0,
},
@ -195,7 +195,7 @@ test_records = [
"charge_type": "Actual",
"description": "VAT",
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"rate": 120.0,
"tax_amount": 120.0,
},
@ -206,7 +206,7 @@ test_records = [
"charge_type": "Actual",
"description": "Customs Duty",
"doctype": "Purchase Taxes and Charges",
"parentfield": "purchase_tax_details",
"parentfield": "other_charges",
"rate": 150.0,
"tax_amount": 150.0,
},

View File

@ -288,7 +288,6 @@ cur_frm.cscript.purchase_receipt_no = function(doc, cdt, cdn) {
cur_frm.cscript.supplier = function(doc, cdt, cdn) {
if(doc.supplier)
return get_server_fields('get_supp_addr', '', '', doc, cdt, cdn, 1);
}
cur_frm.fields_dict['production_order'].get_query = function(doc) {
@ -371,7 +370,7 @@ cur_frm.cscript.validate = function(doc, cdt, cdn) {
cur_frm.cscript.validate_items = function(doc) {
cl = getchildren('Stock Entry Detail', doc.name, 'mtn_details');
if (!cl.length) {
alert(wn._("Item table can not be blank"));
msgprint(wn._("Item table can not be blank"));
validated = false;
}
}

View File

@ -483,7 +483,7 @@ class TestStockEntry(unittest.TestCase):
d.expense_head = "_Test Account Cost for Goods Sold - _TC"
d.cost_center = "_Test Cost Center - _TC"
for d in pi.doclist.get({"parentfield": "purchase_tax_details"}):
for d in pi.doclist.get({"parentfield": "other_charges"}):
d.cost_center = "_Test Cost Center - _TC"
pi.run_method("calculate_taxes_and_totals")
@ -585,7 +585,7 @@ class TestStockEntry(unittest.TestCase):
for d in pi.doclist.get({"parentfield": "entries"}):
d.expense_head = "_Test Account Cost for Goods Sold - _TC"
d.cost_center = "_Test Cost Center - _TC"
for d in pi.doclist.get({"parentfield": "purchase_tax_details"}):
for d in pi.doclist.get({"parentfield": "other_charges"}):
d.cost_center = "_Test Cost Center - _TC"
pi.run_method("calculate_taxes_and_totals")

View File

@ -11,11 +11,10 @@
<script>
$("#footer-subscribe-button").click(function() {
if($("#footer-subscribe-email").val()) {
$("#footer-subscribe-email").attr('disabled', true);
$("#footer-subscribe-button").html("Sending...")
.attr("disabled", true);
if($("#footer-subscribe-email").val()) {
erpnext.send_message({
subject:"Subscribe me",
sender: $("#footer-subscribe-email").val(),
@ -32,5 +31,7 @@
}
});
}
else
wn.msgprint(wn._("Please enter email address"))
});
</script>

View File

@ -64,7 +64,7 @@ class TransactionBase(StatusUpdater):
out[f] = customer.fields.get(f)
# fields prepended with default in Customer doctype
for f in ['sales_partner', 'commission_rate', 'currency', 'price_list']:
for f in ['sales_partner', 'commission_rate', 'currency', 'price_list', 'taxes_and_charges']:
if customer.fields.get("default_" + f):
out[f] = customer.fields.get("default_" + f)
@ -129,6 +129,11 @@ class TransactionBase(StatusUpdater):
if supplier.default_currency:
out["currency"] = supplier.default_currency
# fields prepended with default in Customer doctype
for f in ['currency', 'taxes_and_charges']:
if supplier.fields.get("default_" + f):
out[f] = supplier.fields.get("default_" + f)
out["buying_price_list"] = self.get_user_default_price_list("buying_price_list") or \
supplier.default_price_list or self.doc.buying_price_list