From 2f2d3de3068e90fff7463448c901826551c49772 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 11 Jul 2022 17:42:15 +0530 Subject: [PATCH 1/2] fix: update SO's percentage billed on credit note Credit Note created from Sales Return will update precentage billed in Sales Order accordingly (cherry picked from commit 04c10192423ae0f4f746413a261d5709d1a21983) --- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 499377d4263..bbbaa67c8e9 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -414,7 +414,7 @@ }, { "default": "0", - "depends_on": "eval: doc.is_return && doc.return_against", + "depends_on": "eval: doc.is_return", "fieldname": "update_billed_amount_in_sales_order", "fieldtype": "Check", "hide_days": 1, @@ -2046,7 +2046,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2022-06-16 16:22:44.870575", + "modified": "2022-07-11 17:43:56.435382", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", From ef9b25cf08ac3193909f0f78c08b21dd34d8e974 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 12 Jul 2022 13:17:01 +0530 Subject: [PATCH 2/2] test: SO percentage billed when cr_note made against delivery return (cherry picked from commit 243f66fcd398ec899c388e8c9511419b98967406) --- .../doctype/sales_order/test_sales_order.py | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index 81545fac14f..8bb25d4538c 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -1548,6 +1548,65 @@ class TestSalesOrder(FrappeTestCase): so.load_from_db() self.assertEqual(so.billing_status, "Fully Billed") + def test_so_billing_status_with_crnote_against_sales_return(self): + """ + | Step | Document creation | | + |------+--------------------------------------+-------------------------------| + | 1 | SO -> DN -> SI | SO Fully Billed and Completed | + | 2 | DN -> Sales Return(Partial) | SO 50% Delivered, 100% billed | + | 3 | Sales Return(Partial) -> Credit Note | SO 50% Delivered, 50% billed | + + """ + from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice + + so = make_sales_order(uom="Nos", do_not_save=1) + so.save() + so.submit() + + self.assertEqual(so.billing_status, "Not Billed") + + dn1 = make_delivery_note(so.name) + dn1.taxes_and_charges = "" + dn1.taxes.clear() + dn1.save().submit() + + si = create_sales_invoice(qty=10, do_not_save=1) + si.items[0].sales_order = so.name + si.items[0].so_detail = so.items[0].name + si.items[0].delivery_note = dn1.name + si.items[0].dn_detail = dn1.items[0].name + si.save() + si.submit() + + so.reload() + self.assertEqual(so.billing_status, "Fully Billed") + self.assertEqual(so.status, "Completed") + + from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note + + dn1.reload() + dn_ret = create_delivery_note(is_return=1, return_against=dn1.name, qty=-5, do_not_submit=True) + dn_ret.items[0].against_sales_order = so.name + dn_ret.items[0].so_detail = so.items[0].name + dn_ret.submit() + + so.reload() + self.assertEqual(so.per_billed, 100) + self.assertEqual(so.per_delivered, 50) + + cr_note = create_sales_invoice(is_return=1, qty=-1, do_not_submit=True) + cr_note.items[0].qty = -5 + cr_note.items[0].sales_order = so.name + cr_note.items[0].so_detail = so.items[0].name + cr_note.items[0].delivery_note = dn_ret.name + cr_note.items[0].dn_detail = dn_ret.items[0].name + cr_note.update_billed_amount_in_sales_order = True + cr_note.submit() + + so.reload() + self.assertEqual(so.per_billed, 50) + self.assertEqual(so.per_delivered, 50) + def test_so_back_updated_from_wo_via_mr(self): "SO -> MR (Manufacture) -> WO. Test if WO Qty is updated in SO." from erpnext.manufacturing.doctype.work_order.work_order import (