fix(test): case if write off is calculated as negative amount

(cherry picked from commit c2b83a0283)
This commit is contained in:
Saqib Ansari
2022-02-08 17:07:51 +05:30
committed by mergify-bot
parent 96034c4396
commit e2d8fce3c5
3 changed files with 9 additions and 9 deletions

View File

@@ -96,7 +96,6 @@ class POSInvoiceMergeLog(Document):
pos_invoice_grand_total = sum(d.grand_total for d in data) pos_invoice_grand_total = sum(d.grand_total for d in data)
if abs(pos_invoice_grand_total - invoice.grand_total) < 1: if abs(pos_invoice_grand_total - invoice.grand_total) < 1:
invoice.write_off_amount += -1 * (pos_invoice_grand_total - invoice.grand_total) invoice.write_off_amount += -1 * (pos_invoice_grand_total - invoice.grand_total)
invoice.save() invoice.save()

View File

@@ -154,10 +154,10 @@ class TestPOSInvoiceMergeLog(unittest.TestCase):
def test_consolidation_round_off_error_1(self): def test_consolidation_round_off_error_1(self):
''' '''
Test case for bug: Test round off error in consolidated invoice creation if POS Invoice has inclusive tax
Round off error in consolidated invoice creation if POS Invoice has inclusive tax
''' '''
frappe.db.sql("delete from `tabPOS Invoice`") frappe.db.sql("delete from `tabPOS Invoice`")
allow_negative_stock = frappe.db.get_value('Stock Settings', None, 'allow_negative_stock')
frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 1) frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 1)
try: try:
@@ -206,13 +206,14 @@ class TestPOSInvoiceMergeLog(unittest.TestCase):
frappe.set_user("Administrator") frappe.set_user("Administrator")
frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Profile`")
frappe.db.sql("delete from `tabPOS Invoice`") frappe.db.sql("delete from `tabPOS Invoice`")
frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 0) frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', allow_negative_stock)
def test_consolidation_round_off_error_2(self): def test_consolidation_round_off_error_2(self):
''' '''
Test the same case as above but with an Unpaid POS Invoice Test the same case as above but with an Unpaid POS Invoice
''' '''
frappe.db.sql("delete from `tabPOS Invoice`") frappe.db.sql("delete from `tabPOS Invoice`")
allow_negative_stock = frappe.db.get_value('Stock Settings', None, 'allow_negative_stock')
frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 1) frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 1)
try: try:
@@ -262,10 +263,10 @@ class TestPOSInvoiceMergeLog(unittest.TestCase):
inv.load_from_db() inv.load_from_db()
consolidated_invoice = frappe.get_doc('Sales Invoice', inv.consolidated_invoice) consolidated_invoice = frappe.get_doc('Sales Invoice', inv.consolidated_invoice)
self.assertEqual(consolidated_invoice.outstanding_amount, 800) self.assertEqual(consolidated_invoice.outstanding_amount, 800)
self.assertEqual(consolidated_invoice.status, 'Unpaid') self.assertNotEqual(consolidated_invoice.status, 'Paid')
finally: finally:
frappe.set_user("Administrator") frappe.set_user("Administrator")
frappe.db.sql("delete from `tabPOS Profile`") frappe.db.sql("delete from `tabPOS Profile`")
frappe.db.sql("delete from `tabPOS Invoice`") frappe.db.sql("delete from `tabPOS Invoice`")
frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 0) frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', allow_negative_stock)

View File

@@ -649,12 +649,12 @@ class calculate_taxes_and_totals(object):
def calculate_change_amount(self): def calculate_change_amount(self):
self.doc.change_amount = 0.0 self.doc.change_amount = 0.0
self.doc.base_change_amount = 0.0 self.doc.base_change_amount = 0.0
grand_total = self.doc.rounded_total or self.doc.grand_total
base_grand_total = self.doc.base_rounded_total or self.doc.base_grand_total
if self.doc.doctype == "Sales Invoice" \ if self.doc.doctype == "Sales Invoice" \
and self.doc.paid_amount > self.doc.grand_total and not self.doc.is_return \ and self.doc.paid_amount > grand_total and not self.doc.is_return \
and any(d.type == "Cash" for d in self.doc.payments): and any(d.type == "Cash" for d in self.doc.payments):
grand_total = self.doc.rounded_total or self.doc.grand_total
base_grand_total = self.doc.base_rounded_total or self.doc.base_grand_total
self.doc.change_amount = flt(self.doc.paid_amount - grand_total + self.doc.change_amount = flt(self.doc.paid_amount - grand_total +
self.doc.write_off_amount, self.doc.precision("change_amount")) self.doc.write_off_amount, self.doc.precision("change_amount"))