Cleanup and fixes of payment terms feature
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 929e1cd..36ff0ac 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -505,12 +505,10 @@
company_currency = frappe.db.get_value("Company", args.get("company"), "default_currency")
# Get negative outstanding sales /purchase invoices
- total_field = "base_grand_total" if party_account_currency == company_currency else "grand_total"
-
negative_outstanding_invoices = []
- if (args.get("party_type") != "Student"):
+ if args.get("party_type") not in ["Student", "Employee"]:
negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"),
- args.get("party"), args.get("party_account"), total_field)
+ args.get("party"), args.get("party_account"), party_account_currency, company_currency)
# Get positive outstanding sales /purchase invoices/ Fees
outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"),
@@ -580,28 +578,34 @@
return order_list
-def get_negative_outstanding_invoices(party_type, party, party_account, total_field):
- if party_type != "Employee":
- voucher_type = "Sales Invoice" if party_type == "Customer" else "Purchase Invoice"
- return frappe.db.sql("""
- select
- "{voucher_type}" as voucher_type, name as voucher_no,
- {total_field} as invoice_amount, outstanding_amount, posting_date,
- due_date, conversion_rate as exchange_rate
- from
- `tab{voucher_type}`
- where
- {party_type} = %s and {party_account} = %s and docstatus = 1 and outstanding_amount < 0
- order by
- posting_date, name
- """.format(**{
- "total_field": total_field,
- "voucher_type": voucher_type,
- "party_type": scrub(party_type),
- "party_account": "debit_to" if party_type == "Customer" else "credit_to"
- }), (party, party_account), as_dict=True)
+def get_negative_outstanding_invoices(party_type, party, party_account, party_account_currency, company_currency):
+ voucher_type = "Sales Invoice" if party_type == "Customer" else "Purchase Invoice"
+ if party_account_currency == company_currency:
+ grand_total_field = "base_grand_total"
+ rounded_total_field = "base_rounded_total"
else:
- return []
+ grand_total_field = "grand_total"
+ rounded_total_field = "rounded_total"
+
+ return frappe.db.sql("""
+ select
+ "{voucher_type}" as voucher_type, name as voucher_no,
+ if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) as invoice_amount,
+ outstanding_amount, posting_date,
+ due_date, conversion_rate as exchange_rate
+ from
+ `tab{voucher_type}`
+ where
+ {party_type} = %s and {party_account} = %s and docstatus = 1 and outstanding_amount < 0
+ order by
+ posting_date, name
+ """.format(**{
+ "rounded_total_field": rounded_total_field,
+ "grand_total_field": grand_total_field,
+ "voucher_type": voucher_type,
+ "party_type": scrub(party_type),
+ "party_account": "debit_to" if party_type == "Customer" else "credit_to"
+ }), (party, party_account), as_dict=True)
@frappe.whitelist()
def get_party_details(company, party_type, party, date):
@@ -721,7 +725,10 @@
if party_amount:
grand_total = outstanding_amount = party_amount
elif dt in ("Sales Invoice", "Purchase Invoice"):
- grand_total = doc.base_grand_total if party_account_currency == doc.company_currency else doc.grand_total
+ if party_account_currency == doc.company_currency:
+ grand_total = doc.base_rounded_total or doc.base_grand_total
+ else:
+ grand_total = doc.rounded_total or doc.grand_total
outstanding_amount = doc.outstanding_amount
elif dt in ("Expense Claim"):
grand_total = doc.total_sanctioned_amount
@@ -730,8 +737,10 @@
grand_total = doc.grand_total
outstanding_amount = doc.outstanding_amount
else:
- total_field = "base_grand_total" if party_account_currency == doc.company_currency else "grand_total"
- grand_total = flt(doc.get(total_field))
+ if party_account_currency == doc.company_currency:
+ grand_total = flt(doc.get("base_rounded_total") or doc.base_grand_total)
+ else:
+ grand_total = flt(doc.get("rounded_total") or doc.grand_total)
outstanding_amount = grand_total - flt(doc.advance_paid)
# bank or cash
diff --git a/erpnext/accounts/doctype/payment_schedule/payment_schedule.json b/erpnext/accounts/doctype/payment_schedule/payment_schedule.json
index b068f21..b34f894 100644
--- a/erpnext/accounts/doctype/payment_schedule/payment_schedule.json
+++ b/erpnext/accounts/doctype/payment_schedule/payment_schedule.json
@@ -93,7 +93,7 @@
"label": "Due Date",
"length": 0,
"no_copy": 0,
- "options": "payment_term.due_date",
+ "options": "",
"permlevel": 0,
"precision": "",
"print_hide": 0,
@@ -129,7 +129,7 @@
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
- "read_only": 1,
+ "read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
@@ -179,7 +179,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2017-09-26 05:13:54.187475",
+ "modified": "2017-11-21 19:23:08.490659",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Schedule",
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 22a2535..a829896 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -255,6 +255,7 @@
self.assertEqual(pi.outstanding_amount, 1212.30)
pi.disable_rounded_total = 0
+ pi.get("payment_schedule")[0].payment_amount = 1512.0
pi.save()
self.assertEqual(pi.outstanding_amount, 1212.0)
@@ -279,7 +280,7 @@
jv.submit()
pi = frappe.copy_doc(test_records[0])
-
+ pi.disable_rounded_total = 1
pi.append("advances", {
"reference_type": "Journal Entry",
"reference_name": jv.name,
@@ -290,9 +291,10 @@
})
pi.insert()
- pi.update(
- {"payment_schedule": get_payment_terms("_Test Payment Term Template", pi.posting_date, pi.grand_total)}
- )
+ pi.update({
+ "payment_schedule": get_payment_terms("_Test Payment Term Template",
+ pi.posting_date, pi.grand_total)
+ })
pi.save()
pi.submit()
@@ -619,7 +621,7 @@
"invoice_portion": 40.00
})
pi.append("payment_schedule", {
- "due_date": add_days(nowdate(), 45),
+ "due_date": add_days(nowdate(), 25),
"payment_amount": 150,
"invoice_portion": 60.00
})
@@ -634,7 +636,7 @@
expected_gl_entries = sorted([
[pi.credit_to, 0.0, 100.0, add_days(nowdate(), 15)],
- [pi.credit_to, 0.0, 150.0, add_days(nowdate(), 45)],
+ [pi.credit_to, 0.0, 150.0, add_days(nowdate(), 25)],
["_Test Account Cost for Goods Sold - _TC", 250.0, 0.0, None]
])
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index f00e60e..2c85172 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -64,7 +64,7 @@
si.insert()
self.assertTrue(si.payment_schedule)
- self.assertEqual(si.payment_schedule[0].due_date, si.due_date)
+ self.assertEqual(getdate(si.payment_schedule[0].due_date), getdate(si.due_date))
def test_sales_invoice_calculation_base_currency(self):
si = frappe.copy_doc(test_records[2])
diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index 5af63eb..7bccfe8 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -320,7 +320,8 @@
msgprint(_("Note: Due / Reference Date exceeds allowed customer credit days by {0} day(s)")
.format(date_diff(due_date, default_due_date)))
else:
- frappe.throw(_("Due / Reference Date cannot be after {0}").format(formatdate(default_due_date)))
+ frappe.throw(_("Due / Reference Date cannot be after {0}")
+ .format(formatdate(default_due_date)))
@frappe.whitelist()
def set_taxes(party, party_type, posting_date, company, customer_group=None, supplier_type=None,
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index a352e4c..fa8e356 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -26,9 +26,12 @@
return self.__company_currency
def onload(self):
- self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')
+ self.get("__onload").make_payment_via_journal_entry \
+ = frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')
+
if self.is_new():
- relevant_docs = ("Quotation", "Purchase Order", "Sales Order", "Purchase Invoice", "Purchase Order")
+ relevant_docs = ("Quotation", "Purchase Order", "Sales Order",
+ "Purchase Invoice", "Sales Invoice")
if self.doctype in relevant_docs:
self.set_payment_schedule()
@@ -59,21 +62,18 @@
self.validate_paid_amount()
def validate_invoice_documents_schedule(self):
- if self.get("payment_schedule"):
- self.set_due_date()
- self.validate_payment_schedule()
- else:
- self.set_payment_schedule()
- self.set_due_date()
+ self.validate_payment_schedule_dates()
+ self.set_due_date()
+ self.validate_invoice_portion()
+ self.set_payment_schedule()
+ self.validate_payment_schedule_amount()
self.validate_due_date()
self.validate_advance_entries()
def validate_non_invoice_documents_schedule(self):
- if self.get("payment_schedule"):
- self.validate_invoice_portion()
- self.validate_payment_schedule_amount()
- else:
- self.set_payment_schedule()
+ self.validate_invoice_portion()
+ self.set_payment_schedule()
+ self.validate_payment_schedule_amount()
def validate_all_documents_schedule(self):
if self.doctype in ("Sales Invoice", "Purchase Invoice") and not self.is_return:
@@ -628,22 +628,24 @@
posting_date = self.get("posting_date") or self.get("transaction_date")
date = self.get("due_date")
due_date = date or posting_date
+ grand_total = self.get("rounded_total") or self.grand_total
- if self.get("payment_terms_template") and not self.get("payment_schedule"):
- data = get_payment_terms(self.payment_terms_template, posting_date, self.grand_total)
- for item in data:
- self.append("payment_schedule", item)
- elif not self.get("payment_schedule"):
- data = dict(due_date=due_date, invoice_portion=100, payment_amount=self.grand_total)
- self.append("payment_schedule", data)
+ if not self.get("payment_schedule"):
+ if self.get("payment_terms_template"):
+ data = get_payment_terms(self.payment_terms_template, posting_date, grand_total)
+ for item in data:
+ self.append("payment_schedule", item)
+ else:
+ data = dict(due_date=due_date, invoice_portion=100, payment_amount=grand_total)
+ self.append("payment_schedule", data)
+ else:
+ for d in self.get("payment_schedule"):
+ d.payment_amount = grand_total * flt(d.invoice_portion) / 100
def set_due_date(self):
- self.due_date = max([d.due_date for d in self.get("payment_schedule")])
-
- def validate_payment_schedule(self):
- self.validate_payment_schedule_dates()
- self.validate_invoice_portion()
- self.validate_payment_schedule_amount()
+ due_dates = [d.due_date for d in self.get("payment_schedule") if d.due_date]
+ if due_dates:
+ self.due_date = max(due_dates)
def validate_payment_schedule_dates(self):
dates = []
@@ -661,24 +663,27 @@
if li:
duplicates = '<br>' + '<br>'.join(li)
- frappe.throw(_("Rows with duplicate due dates in other rows were found: {list}").format(list=duplicates))
-
+ frappe.throw(_("Rows with duplicate due dates in other rows were found: {list}")
+ .format(list=duplicates))
def validate_payment_schedule_amount(self):
- total = 0
- for d in self.get("payment_schedule"):
- total += flt(d.payment_amount)
+ if self.get("payment_schedule"):
+ total = 0
+ for d in self.get("payment_schedule"):
+ total += flt(d.payment_amount)
- if total != self.grand_total:
- frappe.throw(_("Total Payment Amount in Payment Schedule must be equal to Grand Total"))
+ grand_total = self.get("rounded_total") or self.grand_total
+ if total != grand_total:
+ frappe.throw(_("Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total"))
def validate_invoice_portion(self):
- total_portion = 0
- for term in self.payment_schedule:
- total_portion += flt(term.get('invoice_portion', 0))
+ if self.get("payment_schedule"):
+ total_portion = 0
+ for term in self.payment_schedule:
+ total_portion += flt(term.get('invoice_portion', 0))
- if flt(total_portion, 2) != 100.00:
- frappe.msgprint(_('Combined invoice portion must equal 100%'), raise_exception=1, indicator='red')
+ if flt(total_portion, 2) != 100.00:
+ frappe.throw(_('Combined invoice portion must equal 100%'), indicator='red')
def is_rounded_total_disabled(self):
if self.meta.get_field("disable_rounded_total"):
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 923b25d..04dfe9f 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -460,12 +460,8 @@
erpnext.patches.v9_0.set_pos_profile_name
erpnext.patches.v9_0.remove_non_existing_warehouse_from_stock_settings
execute:frappe.delete_doc_if_exists("DocType", "Program Fee")
-erpnext.patches.v8_10.add_due_date_to_gle
erpnext.patches.v8_10.update_gl_due_date_for_pi_and_si
-erpnext.patches.v8_10.add_payment_terms_field_to_supplier
erpnext.patches.v8_10.change_default_customer_credit_days
-erpnext.patches.v8_10.add_payment_terms_field_to_supplier_type
-erpnext.patches.v8_10.change_default_supplier_type_credit_days
erpnext.patches.v9_0.update_employee_loan_details
erpnext.patches.v9_2.delete_healthcare_domain_default_items
erpnext.patches.v9_1.create_issue_opportunity_type
diff --git a/erpnext/patches/v8_10/add_due_date_to_gle.py b/erpnext/patches/v8_10/add_due_date_to_gle.py
deleted file mode 100644
index ec5e003..0000000
--- a/erpnext/patches/v8_10/add_due_date_to_gle.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- if not frappe.db.has_column("GL Entry", "due_date"):
- frappe.db.sql("ALTER TABLE `tabGL Entry` ADD COLUMN `due_date` DATE NULL")
diff --git a/erpnext/patches/v8_10/add_payment_terms_field_to_supplier.py b/erpnext/patches/v8_10/add_payment_terms_field_to_supplier.py
deleted file mode 100644
index b507b2a..0000000
--- a/erpnext/patches/v8_10/add_payment_terms_field_to_supplier.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- if not frappe.db.has_column("Customer", "payment_terms"):
- frappe.db.sql("ALTER TABLE `tabCustomer` ADD COLUMN `payment_terms` VARCHAR(140) NULL")
- if not frappe.db.has_column("Supplier", "payment_terms"):
- frappe.db.sql("ALTER TABLE `tabSupplier` ADD COLUMN `payment_terms` VARCHAR(140) NULL")
diff --git a/erpnext/patches/v8_10/add_payment_terms_field_to_supplier_type.py b/erpnext/patches/v8_10/add_payment_terms_field_to_supplier_type.py
deleted file mode 100644
index 78b8943..0000000
--- a/erpnext/patches/v8_10/add_payment_terms_field_to_supplier_type.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- if not frappe.db.has_column("Supplier Type", "payment_terms"):
- frappe.db.sql("ALTER TABLE `tabSupplier Type` ADD COLUMN `payment_terms` VARCHAR(140) NULL")
diff --git a/erpnext/patches/v8_10/change_default_customer_credit_days.py b/erpnext/patches/v8_10/change_default_customer_credit_days.py
index 9008a43..d2bc3ec 100644
--- a/erpnext/patches/v8_10/change_default_customer_credit_days.py
+++ b/erpnext/patches/v8_10/change_default_customer_credit_days.py
@@ -3,67 +3,49 @@
def execute():
+ frappe.reload_doc("selling", "doctype", "customer")
+ frappe.reload_doc("buying", "doctype", "supplier")
+ frappe.reload_doc("setup", "doctype", "supplier_type")
frappe.reload_doc("accounts", "doctype", "payment_term")
frappe.reload_doc("accounts", "doctype", "payment_terms_template_detail")
frappe.reload_doc("accounts", "doctype", "payment_terms_template")
payment_terms = []
- customers = []
- suppliers = []
- credit_days = frappe.db.sql(
- "SELECT DISTINCT `credit_days`, `credit_days_based_on`, `customer_name` from "
- "`tabCustomer` where credit_days_based_on='Fixed Days' or "
- "credit_days_based_on='Last Day of the Next Month'")
+ records = []
+ for doctype in ("Customer", "Supplier", "Supplier Type"):
+ credit_days = frappe.db.sql("""
+ SELECT DISTINCT `credit_days`, `credit_days_based_on`, `name`
+ from `tab{0}`
+ where
+ (credit_days_based_on='Fixed Days' and credit_days is not null)
+ or credit_days_based_on='Last Day of the Next Month'
+ """.format(doctype))
- credit_records = ((record[0], record[1], record[2]) for record in credit_days)
- for days, based_on, customer_name in credit_records:
- payment_term = make_payment_term(days, based_on)
- template = make_template(payment_term)
- payment_terms.append('WHEN `customer_name`="%s" THEN "%s"' % (customer_name, template.template_name))
- customers.append(customer_name)
+ credit_records = ((record[0], record[1], record[2]) for record in credit_days)
+ for days, based_on, party_name in credit_records:
+ if based_on == "Fixed Days":
+ pyt_template_name = 'Default Payment Term - N{0}'.format(days)
+ else:
+ pyt_template_name = 'Default Payment Term - EO2M'
- begin_query_str = "UPDATE `tabCustomer` SET `payment_terms` = CASE "
- value_query_str = " ".join(payment_terms)
- cond_query_str = " ELSE `payment_terms` END WHERE "
+ if not frappe.db.exists("Payment Terms Template", pyt_template_name):
+ payment_term = make_payment_term(days, based_on)
+ template = make_template(payment_term)
+ else:
+ template = frappe.get_doc("Payment Terms Template", pyt_template_name)
- if customers:
- frappe.db.sql(
- begin_query_str + value_query_str + cond_query_str + '`customer_name` IN %s',
- (customers,)
- )
+ payment_terms.append('WHEN `name`="%s" THEN "%s"' % (party_name, template.template_name))
+ records.append(party_name)
- # reset
- payment_terms = []
- credit_days = frappe.db.sql(
- "SELECT DISTINCT `credit_days`, `credit_days_based_on`, `supplier_name` from "
- "`tabSupplier` where credit_days_based_on='Fixed Days' or "
- "credit_days_based_on='Last Day of the Next Month'")
+ begin_query_str = "UPDATE `tab{0}` SET `payment_terms` = CASE ".format(doctype)
+ value_query_str = " ".join(payment_terms)
+ cond_query_str = " ELSE `payment_terms` END WHERE "
- credit_records = ((record[0], record[1], record[2]) for record in credit_days)
- for days, based_on, supplier_name in credit_records:
- if based_on == "Fixed Days":
- pyt_template_name = 'Default Payment Term - N{0}'.format(days)
- else:
- pyt_template_name = 'Default Payment Term - EO2M'
-
- if not frappe.db.exists("Payment Term Template", pyt_template_name):
- payment_term = make_payment_term(days, based_on)
- template = make_template(payment_term)
- else:
- template = frappe.get_doc("Payment Term Template", pyt_template_name)
-
- payment_terms.append('WHEN `supplier_name`="%s" THEN "%s"' % (supplier_name, template.template_name))
- suppliers.append(supplier_name)
-
- begin_query_str = "UPDATE `tabSupplier` SET `payment_terms` = CASE "
- value_query_str = " ".join(payment_terms)
- cond_query_str = " ELSE `payment_terms` END WHERE "
-
- if suppliers:
- frappe.db.sql(
- begin_query_str + value_query_str + cond_query_str + '`supplier_name` IN %s',
- (suppliers,)
- )
+ if records:
+ frappe.db.sql(
+ begin_query_str + value_query_str + cond_query_str + '`name` IN %s',
+ (records,)
+ )
def make_template(payment_term):
diff --git a/erpnext/patches/v8_10/change_default_supplier_type_credit_days.py b/erpnext/patches/v8_10/change_default_supplier_type_credit_days.py
deleted file mode 100644
index 448bdbe..0000000
--- a/erpnext/patches/v8_10/change_default_supplier_type_credit_days.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import frappe
-from erpnext.patches.v8_10.change_default_customer_credit_days import make_payment_term, make_template
-
-
-def execute():
- payment_terms = []
- supplier_types = []
-
- credit_days = frappe.db.sql(
- "SELECT DISTINCT `credit_days`, `credit_days_based_on`, `supplier_type` from "
- "`tabSupplier Type` where credit_days_based_on='Fixed Days' or "
- "credit_days_based_on='Last Day of the Next Month'")
-
- records = ((record[0], record[1], record[2]) for record in credit_days)
-
- for days, based_on, supplier_type in records:
- if based_on == "Fixed Days":
- pyt_term_name = 'N{0}'.format(days)
- else:
- pyt_term_name = 'EO2M'
-
- if not frappe.db.exists("Payment Term", pyt_term_name):
- payment_term = make_payment_term(days, based_on)
- make_template(payment_term)
- else:
- payment_term = frappe.get_doc("Payment Term", pyt_term_name)
-
- payment_terms.append('WHEN `supplier_type`="%s" THEN "%s"' % (supplier_type, payment_term.payment_term_name))
- supplier_types.append(supplier_type)
-
- begin_query_str = "UPDATE `tabSupplier Type` SET `payment_terms` = CASE "
- value_query_str = " ".join(payment_terms)
- cond_query_str = " ELSE `payment_terms` END WHERE "
-
- if supplier_types:
- frappe.db.sql(
- begin_query_str + value_query_str + cond_query_str + '`supplier_type` IN %s',
- (supplier_types,)
- )
diff --git a/erpnext/patches/v8_10/update_gl_due_date_for_pi_and_si.py b/erpnext/patches/v8_10/update_gl_due_date_for_pi_and_si.py
index f54ff80..8596e66 100644
--- a/erpnext/patches/v8_10/update_gl_due_date_for_pi_and_si.py
+++ b/erpnext/patches/v8_10/update_gl_due_date_for_pi_and_si.py
@@ -6,6 +6,8 @@
def execute():
+ frappe.reload_doc("accounts", "doctype", "gl_entry")
+
kwargs = get_query_kwargs()
for kwarg in kwargs:
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index b70e467..91aafc9 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -1153,7 +1153,7 @@
args: {
terms_template: this.frm.doc.payment_terms_template,
posting_date: this.frm.doc.posting_date || this.frm.doc.transaction_date,
- grand_total: this.frm.doc.grand_total
+ grand_total: this.frm.doc.rounded_total || this.frm.doc.grand_total
},
callback: function(r) {
if(r.message && !r.exc) {
@@ -1172,7 +1172,7 @@
args: {
term: row.payment_term,
posting_date: this.frm.doc.posting_date || this.frm.doc.transaction_date,
- grand_total: this.frm.doc.grand_total
+ grand_total: this.frm.doc.rounded_total || this.frm.doc.grand_total
},
callback: function(r) {
if(r.message && !r.exc) {