diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 973df73a13e..c0d53b52dde 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -1223,7 +1223,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= pe.set_gain_or_loss(account_details={ 'account': frappe.get_cached_value('Company', pe.company, "default_discount_account"), 'cost_center': pe.cost_center or frappe.get_cached_value('Company', pe.company, "cost_center"), - 'amount': discount_amount * -1 if payment_type == "Pay" else 1 + 'amount': discount_amount * (-1 if payment_type == "Pay" else 1) }) pe.set_difference_amount() diff --git a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py index 772fc1a2521..4641d6b5ffa 100644 --- a/erpnext/accounts/doctype/payment_entry/test_payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/test_payment_entry.py @@ -193,6 +193,34 @@ class TestPaymentEntry(unittest.TestCase): self.assertEqual(si.payment_schedule[0].paid_amount, 200.0) self.assertEqual(si.payment_schedule[1].paid_amount, 36.0) + def test_payment_entry_against_payment_terms_with_discount(self): + si = create_sales_invoice(do_not_save=1, qty=1, rate=200) + create_payment_terms_template_with_discount() + si.payment_terms_template = 'Test Discount Template' + + frappe.db.set_value('Company', si.company, 'default_discount_account', 'Write Off - _TC') + + si.append('taxes', { + "charge_type": "On Net Total", + "account_head": "_Test Account Service Tax - _TC", + "cost_center": "_Test Cost Center - _TC", + "description": "Service Tax", + "rate": 18 + }) + si.save() + + si.submit() + + pe = get_payment_entry("Sales Invoice", si.name, bank_account="_Test Cash - _TC") + pe.submit() + si.load_from_db() + + self.assertEqual(pe.references[0].payment_term, '30 Credit Days with 10% Discount') + self.assertEqual(si.payment_schedule[0].payment_amount, 236.0) + self.assertEqual(si.payment_schedule[0].paid_amount, 212.40) + self.assertEqual(si.payment_schedule[0].outstanding, 0) + self.assertEqual(si.payment_schedule[0].discounted_amount, 23.6) + def test_payment_against_purchase_invoice_to_check_status(self): pi = make_purchase_invoice(supplier="_Test Supplier USD", debit_to="_Test Payable USD - _TC", @@ -591,6 +619,26 @@ def create_payment_terms_template(): }] }).insert() +def create_payment_terms_template_with_discount(): + + create_payment_term('30 Credit Days with 10% Discount') + + if not frappe.db.exists('Payment Terms Template', 'Test Discount Template'): + payment_term_template = frappe.get_doc({ + 'doctype': 'Payment Terms Template', + 'template_name': 'Test Discount Template', + 'allocate_payment_based_on_payment_terms': 1, + 'terms': [{ + 'doctype': 'Payment Terms Template Detail', + 'payment_term': '30 Credit Days with 10% Discount', + 'invoice_portion': 100, + 'credit_days_based_on': 'Day(s) after invoice date', + 'credit_days': 2, + 'discount': 10, + 'discount_validity_based_on': 'Day(s) after invoice date', + 'discount_validity': 1 + }] + }).insert() def create_payment_term(name): if not frappe.db.exists('Payment Term', name): diff --git a/erpnext/accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json b/erpnext/accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json index daf4c98b9d3..20b3dca6aae 100644 --- a/erpnext/accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json +++ b/erpnext/accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json @@ -52,6 +52,7 @@ { "columns": 2, "fetch_from": "payment_term.due_date_based_on", + "fetch_if_empty": 1, "fieldname": "due_date_based_on", "fieldtype": "Select", "in_list_view": 1, @@ -100,6 +101,7 @@ { "default": "Percentage", "fetch_from": "payment_term.discount_type", + "fetch_if_empty": 1, "fieldname": "discount_type", "fieldtype": "Select", "label": "Discount Type", @@ -107,6 +109,7 @@ }, { "fetch_from": "payment_term.discount", + "fetch_if_empty": 1, "fieldname": "discount", "fieldtype": "Float", "label": "Discount" @@ -119,6 +122,7 @@ "default": "Day(s) after invoice date", "depends_on": "discount", "fetch_from": "payment_term.discount_validity_based_on", + "fetch_if_empty": 1, "fieldname": "discount_validity_based_on", "fieldtype": "Select", "label": "Discount Validity Based On", @@ -133,6 +137,7 @@ { "depends_on": "discount", "fetch_from": "payment_term.discount_validity", + "fetch_if_empty": 1, "fieldname": "discount_validity", "fieldtype": "Int", "label": "Discount Validity", @@ -146,7 +151,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2021-02-24 11:32:39.134870", + "modified": "2021-02-24 11:56:12.410807", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Terms Template Detail",