test: Add test for einvoice discounts
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 448ec54..c2e82fb 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -2731,6 +2731,63 @@
einvoice = make_einvoice(si)
validate_totals(einvoice)
+ def test_einvoice_discounts(self):
+ from erpnext.regional.india.e_invoice.utils import make_einvoice, validate_totals
+
+ # 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.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["ValDtls"]["Discount"], 0)
+
+ # 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"], 316.83)
+ self.assertEqual(einvoice["ItemList"][1]["Discount"], 83.17)
+ self.assertEqual(einvoice["ValDtls"]["Discount"], 0)
+
+ # 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"], 268.5)
+ self.assertEqual(einvoice["ItemList"][1]["Discount"], 70.48)
+ self.assertEqual(einvoice["ValDtls"]["Discount"], 0)
+
+ # 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["ValDtls"]["Discount"], 400)
+
def test_item_tax_net_range(self):
item = create_item("T Shirt")
diff --git a/erpnext/regional/india/e_invoice/utils.py b/erpnext/regional/india/e_invoice/utils.py
index 44ba635..fb2779b 100644
--- a/erpnext/regional/india/e_invoice/utils.py
+++ b/erpnext/regional/india/e_invoice/utils.py
@@ -274,10 +274,6 @@
if invoice.get("apply_discount_on"):
item.discount_amount = item.base_amount - item.base_net_amount
- elif item.discount_amount > 0:
- item.discount_amount = item.discount_amount
- else:
- item.discount_amount = 0
item.unit_rate = abs(item.taxable_value - item.discount_amount) / item.qty
@@ -361,7 +357,7 @@
and invoice.discount_amount
and invoice.get("is_cash_or_non_trade_discount")
):
- invoice_value_details.invoice_discount_amt = invoice.base_discount_amount
+ invoice_value_details.invoice_discount_amt = invoice.discount_amount
else:
invoice_value_details.invoice_discount_amt = 0