From 84f260e1d8ca943a1b1afbed1391734bed157b41 Mon Sep 17 00:00:00 2001 From: Maharshi Patel Date: Wed, 13 Jul 2022 01:39:36 +0530 Subject: [PATCH 1/7] fix: (india) (e-invoice) CN / DN with 0 qty Qty 0 is allowed when creating Credit or Debit Note this caused ZeroDivisionError during unit_rate calculation. fixed the issue by adding required conditionals. --- erpnext/regional/india/e_invoice/utils.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py index d4a2e026453..a2b8dd4e61d 100644 --- a/erpnext/regional/india/e_invoice/utils.py +++ b/erpnext/regional/india/e_invoice/utils.py @@ -276,7 +276,19 @@ def get_item_list(invoice): if invoice.get("apply_discount_on"): item.discount_amount = item.base_amount - item.base_net_amount - item.unit_rate = abs(item.taxable_value - item.discount_amount) / item.qty + if invoice.get("is_return") or invoice.get("is_debit_note"): + item.unit_rate = abs(item.taxable_value - item.discount_amount) / ( + 1 if (item.qty == 0) else item.qty + ) + else: + try: + item.unit_rate = abs(item.taxable_value - item.discount_amount) / item.qty + except ZeroDivisionError: + # This will never run but added as safety measure + frappe.throw( + title="Error: Qty is Zero", + msg="Quantity can't be zero unless it's Credit/Debit Note.", + ) item.gross_amount = abs(item.taxable_value) + item.discount_amount item.taxable_value = abs(item.taxable_value) From 1f4d4346752424c4b344cfebfe6042485c03da65 Mon Sep 17 00:00:00 2001 From: Maharshi Patel Date: Fri, 15 Jul 2022 16:03:42 +0530 Subject: [PATCH 2/7] fix: (india) (e-invoice) discount calculation I have added fixes for discount in e-inovice. --- erpnext/regional/india/e_invoice/utils.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py index a2b8dd4e61d..569c4e7d142 100644 --- a/erpnext/regional/india/e_invoice/utils.py +++ b/erpnext/regional/india/e_invoice/utils.py @@ -273,21 +273,26 @@ def get_item_list(invoice): item.qty = abs(item.qty) - if invoice.get("apply_discount_on"): - item.discount_amount = item.base_amount - item.base_net_amount + if invoice.get("apply_discount_on") and (invoice.get("base_discount_amount") > 0.00): + # TODO: need to handle case when tax included in basic rate is checked. + item.discount_amount = (item.discount_amount * item.qty) + ( + item.base_amount - item.base_net_amount + ) + else: + item.discount_amount = item.discount_amount * item.qty if invoice.get("is_return") or invoice.get("is_debit_note"): - item.unit_rate = abs(item.taxable_value - item.discount_amount) / ( + item.unit_rate = abs(item.taxable_value + item.discount_amount) / ( 1 if (item.qty == 0) else item.qty ) else: try: - item.unit_rate = abs(item.taxable_value - item.discount_amount) / item.qty + item.unit_rate = abs(item.taxable_value + item.discount_amount) / item.qty except ZeroDivisionError: # This will never run but added as safety measure frappe.throw( - title="Error: Qty is Zero", - msg="Quantity can't be zero unless it's Credit/Debit Note.", + title=_("Error: Qty is Zero"), + msg=_("Quantity can't be zero unless it's Credit/Debit Note."), ) item.gross_amount = abs(item.taxable_value) + item.discount_amount From 844758a27cb5436e30ef07d6e2ceee88fad8b6c2 Mon Sep 17 00:00:00 2001 From: Maharshi Patel Date: Fri, 15 Jul 2022 16:54:10 +0530 Subject: [PATCH 3/7] fix: (india)(einvoice) discount for CN DN --- erpnext/regional/india/e_invoice/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py index 569c4e7d142..d9add99a7a7 100644 --- a/erpnext/regional/india/e_invoice/utils.py +++ b/erpnext/regional/india/e_invoice/utils.py @@ -273,16 +273,16 @@ def get_item_list(invoice): item.qty = abs(item.qty) - if invoice.get("apply_discount_on") and (invoice.get("base_discount_amount") > 0.00): + if invoice.get("apply_discount_on") and (abs(invoice.get("base_discount_amount")) > 0.00): # TODO: need to handle case when tax included in basic rate is checked. item.discount_amount = (item.discount_amount * item.qty) + ( - item.base_amount - item.base_net_amount + abs(item.base_amount) - abs(item.base_net_amount) ) else: item.discount_amount = item.discount_amount * item.qty if invoice.get("is_return") or invoice.get("is_debit_note"): - item.unit_rate = abs(item.taxable_value + item.discount_amount) / ( + item.unit_rate = (abs(item.taxable_value) + item.discount_amount) / ( 1 if (item.qty == 0) else item.qty ) else: From 0d6beed546ad9db8af94c0374c6f9dd4d51a4803 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sat, 16 Jul 2022 14:06:01 +0530 Subject: [PATCH 4/7] test: Update test case --- .../sales_invoice/test_sales_invoice.py | 6 +++--- .../e_invoice_settings.json | 21 ++++++++++++++++++- erpnext/regional/india/e_invoice/utils.py | 2 +- .../doctype/item_price/test_item_price.py | 7 +++++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 2ff1b34e35e..0c75fcc9352 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -2626,15 +2626,15 @@ class TestSalesInvoice(unittest.TestCase): # Normal Itemized Discount si = get_sales_invoice_for_e_invoice() si.apply_discount_on = "" - si.items[0].discount_amount = 4000 - si.items[1].discount_amount = 300 + si.items[0].discount_amount = 2 + si.items[1].discount_amount = 5 si.save() einvoice = make_einvoice(si) validate_totals(einvoice) self.assertEqual(einvoice["ItemList"][0]["Discount"], 4000) - self.assertEqual(einvoice["ItemList"][1]["Discount"], 300) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 2100) self.assertEqual(einvoice["ValDtls"]["Discount"], 0) # Invoice Discount on net total diff --git a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json index 16b29633010..0d224c7a20b 100644 --- a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json +++ b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json @@ -9,6 +9,9 @@ "section_break_2", "sandbox_mode", "applicable_from", + "column_break_4", + "dont_show_discounts_in_e_invoice", + "section_break_7", "credentials", "advanced_settings_section", "client_id", @@ -80,12 +83,28 @@ { "fieldname": "column_break_8", "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_4", + "fieldtype": "Column Break" + }, + { + "default": "0", + "description": "Enabling this will directly report net rates in e-Invoice post discounts", + "fieldname": "dont_show_discounts_in_e_invoice", + "fieldtype": "Check", + "label": "Don't show discounts in e-Invoice" + }, + { + "fieldname": "section_break_7", + "fieldtype": "Section Break", + "hide_border": 1 } ], "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2021-11-16 19:50:28.029517", + "modified": "2022-07-16 09:45:23.862046", "modified_by": "Administrator", "module": "Regional", "name": "E Invoice Settings", diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py index d9add99a7a7..4e9687f31e8 100644 --- a/erpnext/regional/india/e_invoice/utils.py +++ b/erpnext/regional/india/e_invoice/utils.py @@ -273,7 +273,7 @@ def get_item_list(invoice): item.qty = abs(item.qty) - if invoice.get("apply_discount_on") and (abs(invoice.get("base_discount_amount")) > 0.00): + if invoice.get("apply_discount_on") and (abs(invoice.get("base_discount_amount") or 0.0) > 0.0): # TODO: need to handle case when tax included in basic rate is checked. item.discount_amount = (item.discount_amount * item.qty) + ( abs(item.base_amount) - abs(item.base_net_amount) diff --git a/erpnext/stock/doctype/item_price/test_item_price.py b/erpnext/stock/doctype/item_price/test_item_price.py index 30d933e247d..aeaf9125121 100644 --- a/erpnext/stock/doctype/item_price/test_item_price.py +++ b/erpnext/stock/doctype/item_price/test_item_price.py @@ -163,5 +163,12 @@ class TestItemPrice(FrappeTestCase): self.assertEqual(price, 21) +def make_item_price(item_code, price_list, price_list_rate): + item_price = frappe.new_doc("Item Price") + item_price.price_list = price_list + item_price.item_code = item_code + item_price.price_list_rate = price_list_rate + item_price.insert() + return item_price test_records = frappe.get_test_records("Item Price") From 2066e5a53a12a05e3216258a2797f3f023faaa52 Mon Sep 17 00:00:00 2001 From: Maharshi Patel Date: Sun, 17 Jul 2022 15:08:40 +0530 Subject: [PATCH 5/7] discount settings for e-invoice added and test cases --- .../sales_invoice/test_sales_invoice.py | 165 +++++++++++++++++- .../e_invoice_settings.json | 4 +- erpnext/regional/india/e_invoice/utils.py | 50 ++++-- 3 files changed, 194 insertions(+), 25 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 0c75fcc9352..98dd30c7fbe 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -2626,8 +2626,13 @@ class TestSalesInvoice(unittest.TestCase): # Normal Itemized Discount si = get_sales_invoice_for_e_invoice() si.apply_discount_on = "" - si.items[0].discount_amount = 2 + si.items[0].price_list_rate = 12 + si.items[0].discount_percentage = 16.6666666667 + si.items[0].rate = 10 + + si.items[1].price_list_rate = 15 si.items[1].discount_amount = 5 + si.items[1].rate = 10 si.save() einvoice = make_einvoice(si) @@ -2635,8 +2640,15 @@ class TestSalesInvoice(unittest.TestCase): self.assertEqual(einvoice["ItemList"][0]["Discount"], 4000) self.assertEqual(einvoice["ItemList"][1]["Discount"], 2100) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 222) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 5555) self.assertEqual(einvoice["ValDtls"]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 12) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 15) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 20) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 10) + # Invoice Discount on net total si = get_sales_invoice_for_e_invoice() si.apply_discount_on = "Net Total" @@ -2646,10 +2658,17 @@ class TestSalesInvoice(unittest.TestCase): einvoice = make_einvoice(si) validate_totals(einvoice) - self.assertEqual(einvoice["ItemList"][0]["Discount"], 316.83) - self.assertEqual(einvoice["ItemList"][1]["Discount"], 83.17) + self.assertEqual(einvoice["ItemList"][0]["Discount"], 253.61) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 66.57) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 243.11) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 5613.71) self.assertEqual(einvoice["ValDtls"]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 12) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 15) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 20) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 10) + # Invoice Discount on grand total (Itemized Discount) si = get_sales_invoice_for_e_invoice() si.apply_discount_on = "Grand Total" @@ -2659,10 +2678,17 @@ class TestSalesInvoice(unittest.TestCase): einvoice = make_einvoice(si) validate_totals(einvoice) - self.assertEqual(einvoice["ItemList"][0]["Discount"], 268.5) - self.assertEqual(einvoice["ItemList"][1]["Discount"], 70.48) + self.assertEqual(einvoice["ItemList"][0]["Discount"], 214.93) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 56.42) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 239.89) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 5604.75) self.assertEqual(einvoice["ValDtls"]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 12) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 15) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 20) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 10) + # Invoice Discount on grand total (Cash/Non-Trade Discount) si = get_sales_invoice_for_e_invoice() si.apply_discount_on = "Grand Total" @@ -2675,8 +2701,107 @@ class TestSalesInvoice(unittest.TestCase): self.assertEqual(einvoice["ItemList"][0]["Discount"], 0) self.assertEqual(einvoice["ItemList"][1]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 222.0) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 5555.0) self.assertEqual(einvoice["ValDtls"]["Discount"], 400) + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 12) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 15) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 20) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 10) + + def test_einvoice_without_discounts(self): + from erpnext.regional.india.e_invoice.utils import make_einvoice, validate_totals + + frappe.db.set_single_value("E Invoice Settings", "dont_show_discounts_in_e_invoice", True) + + # Normal Itemized Discount + si = get_sales_invoice_for_e_invoice() + si.apply_discount_on = "" + si.items[0].price_list_rate = 12 + si.items[0].discount_percentage = 16.6666666667 + si.items[0].rate = 10 + + si.items[1].price_list_rate = 15 + si.items[1].discount_amount = 5 + si.items[1].rate = 10 + si.save() + + einvoice = make_einvoice(si) + validate_totals(einvoice) + + self.assertEqual(einvoice["ItemList"][0]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 0) + self.assertEqual(einvoice["ValDtls"]["Discount"], 0) + + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 10) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 10) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 18) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 5) + + # Invoice Discount on net total + si = get_sales_invoice_for_e_invoice() + si.apply_discount_on = "Net Total" + si.discount_amount = 400 + si.save() + + einvoice = make_einvoice(si) + validate_totals(einvoice) + + self.assertEqual(einvoice["ItemList"][0]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 0) + self.assertEqual(einvoice["ValDtls"]["Discount"], 0) + + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 11.87) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 14.84) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 17.81) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 4.95) + + # Invoice Discount on grand total (Itemized Discount) + si = get_sales_invoice_for_e_invoice() + si.apply_discount_on = "Grand Total" + si.discount_amount = 400 + si.save() + + einvoice = make_einvoice(si) + validate_totals(einvoice) + + self.assertEqual(einvoice["ItemList"][0]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 0) + self.assertEqual(einvoice["ValDtls"]["Discount"], 0) + + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 11.89) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 14.87) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 17.84) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 4.96) + + # Invoice Discount on grand total (Cash/Non-Trade Discount) + si = get_sales_invoice_for_e_invoice() + si.apply_discount_on = "Grand Total" + si.is_cash_or_non_trade_discount = 1 + si.discount_amount = 400 + si.save() + + einvoice = make_einvoice(si) + validate_totals(einvoice) + + self.assertEqual(einvoice["ItemList"][0]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][1]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][2]["Discount"], 0) + self.assertEqual(einvoice["ItemList"][3]["Discount"], 0) + self.assertEqual(einvoice["ValDtls"]["Discount"], 400) + + self.assertEqual(einvoice["ItemList"][0]["UnitPrice"], 12) + self.assertEqual(einvoice["ItemList"][1]["UnitPrice"], 15) + self.assertEqual(einvoice["ItemList"][2]["UnitPrice"], 18) + self.assertEqual(einvoice["ItemList"][3]["UnitPrice"], 5) + def test_item_tax_net_range(self): item = create_item("T Shirt") @@ -3276,6 +3401,36 @@ def get_sales_invoice_for_e_invoice(): }, ) + si.append( + "items", + { + "item_code": "_Test Item", + "uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + "qty": 111, + "price_list_rate": 20, + "discount_percentage": 10, + "income_account": "Sales - _TC", + "expense_account": "Cost of Goods Sold - _TC", + "cost_center": "_Test Cost Center - _TC", + }, + ) + + si.append( + "items", + { + "item_code": "_Test Item 2", + "uom": "Nos", + "warehouse": "_Test Warehouse - _TC", + "qty": 1111, + "price_list_rate": 10, + "rate": 5, + "income_account": "Sales - _TC", + "expense_account": "Cost of Goods Sold - _TC", + "cost_center": "_Test Cost Center - _TC", + }, + ) + return si diff --git a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json index 0d224c7a20b..14fad403213 100644 --- a/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json +++ b/erpnext/regional/doctype/e_invoice_settings/e_invoice_settings.json @@ -89,7 +89,7 @@ "fieldtype": "Column Break" }, { - "default": "0", + "default": "1", "description": "Enabling this will directly report net rates in e-Invoice post discounts", "fieldname": "dont_show_discounts_in_e_invoice", "fieldtype": "Check", @@ -104,7 +104,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2022-07-16 09:45:23.862046", + "modified": "2022-07-17 14:57:50.783517", "modified_by": "Administrator", "module": "Regional", "name": "E Invoice Settings", diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py index 4e9687f31e8..b0f837b51e7 100644 --- a/erpnext/regional/india/e_invoice/utils.py +++ b/erpnext/regional/india/e_invoice/utils.py @@ -273,27 +273,41 @@ def get_item_list(invoice): item.qty = abs(item.qty) - if invoice.get("apply_discount_on") and (abs(invoice.get("base_discount_amount") or 0.0) > 0.0): - # TODO: need to handle case when tax included in basic rate is checked. - item.discount_amount = (item.discount_amount * item.qty) + ( - abs(item.base_amount) - abs(item.base_net_amount) - ) - else: - item.discount_amount = item.discount_amount * item.qty + hide_discount_in_einvoice = cint( + frappe.db.get_single_value("E Invoice Settings", "dont_show_discounts_in_e_invoice") + ) + + if hide_discount_in_einvoice: + if flt(item.qty) != 0.0: + item.unit_rate = abs(item.taxable_value / item.qty) + else: + item.unit_rate = abs(item.taxable_value) + item.gross_amount = abs(item.taxable_value) + item.taxable_value = abs(item.taxable_value) + item.discount_amount = 0 - if invoice.get("is_return") or invoice.get("is_debit_note"): - item.unit_rate = (abs(item.taxable_value) + item.discount_amount) / ( - 1 if (item.qty == 0) else item.qty - ) else: - try: - item.unit_rate = abs(item.taxable_value + item.discount_amount) / item.qty - except ZeroDivisionError: - # This will never run but added as safety measure - frappe.throw( - title=_("Error: Qty is Zero"), - msg=_("Quantity can't be zero unless it's Credit/Debit Note."), + if invoice.get("apply_discount_on") and (abs(invoice.get("base_discount_amount") or 0.0) > 0.0): + # TODO: need to handle case when tax included in basic rate is checked. + item.discount_amount = (item.discount_amount * item.qty) + ( + abs(item.base_amount) - abs(item.base_net_amount) ) + else: + item.discount_amount = item.discount_amount * item.qty + + if invoice.get("is_return") or invoice.get("is_debit_note"): + item.unit_rate = (abs(item.taxable_value) + item.discount_amount) / ( + 1 if (item.qty == 0) else item.qty + ) + else: + try: + item.unit_rate = abs(item.taxable_value + item.discount_amount) / item.qty + except ZeroDivisionError: + # This will never run but added as safety measure + frappe.throw( + title=_("Error: Qty is Zero"), + msg=_("Quantity can't be zero unless it's Credit/Debit Note."), + ) item.gross_amount = abs(item.taxable_value) + item.discount_amount item.taxable_value = abs(item.taxable_value) From 9a3c84663fdbbfdad8a4a256f50211a23e8f896a Mon Sep 17 00:00:00 2001 From: Maharshi Patel Date: Sun, 17 Jul 2022 15:22:37 +0530 Subject: [PATCH 6/7] fix: linter --- erpnext/stock/doctype/item_price/test_item_price.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/stock/doctype/item_price/test_item_price.py b/erpnext/stock/doctype/item_price/test_item_price.py index aeaf9125121..d3988743f6d 100644 --- a/erpnext/stock/doctype/item_price/test_item_price.py +++ b/erpnext/stock/doctype/item_price/test_item_price.py @@ -163,6 +163,7 @@ class TestItemPrice(FrappeTestCase): self.assertEqual(price, 21) + def make_item_price(item_code, price_list, price_list_rate): item_price = frappe.new_doc("Item Price") item_price.price_list = price_list @@ -171,4 +172,5 @@ def make_item_price(item_code, price_list, price_list_rate): item_price.insert() return item_price + test_records = frappe.get_test_records("Item Price") From 9631ffd215de8a23bbeb8e25ce8ba8e7262f2877 Mon Sep 17 00:00:00 2001 From: Maharshi Patel Date: Sun, 17 Jul 2022 15:40:55 +0530 Subject: [PATCH 7/7] fix: test change setting to run test with correct use case. --- erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 98dd30c7fbe..0a5172eaba6 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -2623,6 +2623,8 @@ class TestSalesInvoice(unittest.TestCase): def test_einvoice_discounts(self): from erpnext.regional.india.e_invoice.utils import make_einvoice, validate_totals + frappe.db.set_single_value("E Invoice Settings", "dont_show_discounts_in_e_invoice", False) + # Normal Itemized Discount si = get_sales_invoice_for_e_invoice() si.apply_discount_on = ""