From 13cb53fa899104ee519c13fe4289e9ea0baf0581 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 12:39:45 +0530 Subject: [PATCH 1/6] fix: update received qty in MR on purchase invoice submit with update stock --- .../purchase_invoice/purchase_invoice.py | 13 ++++++++++ .../purchase_invoice_item.json | 26 ++++++++++++++++++- .../purchase_invoice_item.py | 2 ++ .../doctype/purchase_order/purchase_order.py | 2 ++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 07b13ae8a1e..3b1755fe12a 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -684,6 +684,19 @@ class PurchaseInvoice(BuyingController): where name=`tabPurchase Invoice Item`.parent and update_stock = 1)""", } ) + self.status_updater.append( + { + "source_dt": "Purchase Invoice Item", + "target_dt": "Material Request Item", + "join_field": "material_request_item", + "target_field": "received_qty", + "target_parent_dt": "Material Request", + "target_parent_field": "per_received", + "target_ref_field": "stock_qty", + "source_field": "stock_qty", + "percent_join_field": "material_request", + } + ) if cint(self.is_return): self.status_updater.append( { diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index d0cef850642..ff9269fbf2d 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -105,6 +105,8 @@ "purchase_receipt", "pr_detail", "sales_invoice_item", + "material_request", + "material_request_item", "item_weight_details", "weight_per_unit", "total_weight", @@ -934,12 +936,34 @@ { "fieldname": "column_break_vbbb", "fieldtype": "Column Break" + }, + { + "fieldname": "material_request", + "fieldtype": "Link", + "label": "Material Request", + "no_copy": 1, + "options": "Material Request", + "print_hide": 1, + "read_only": 1, + "search_index": 1 + }, + { + "fieldname": "material_request_item", + "fieldtype": "Data", + "hidden": 1, + "label": "Material Request Item", + "no_copy": 1, + "oldfieldname": "pr_detail", + "oldfieldtype": "Data", + "print_hide": 1, + "read_only": 1, + "search_index": 1 } ], "idx": 1, "istable": 1, "links": [], - "modified": "2024-03-27 13:10:24.204495", + "modified": "2024-06-14 11:57:07.171700", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py index ccbc34749d7..baeece4815c 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py @@ -52,6 +52,8 @@ class PurchaseInvoiceItem(Document): manufacturer_part_no: DF.Data | None margin_rate_or_amount: DF.Float margin_type: DF.Literal["", "Percentage", "Amount"] + material_request: DF.Link | None + material_request_item: DF.Data | None net_amount: DF.Currency net_rate: DF.Currency page_break: DF.Check diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 97f35d8dd9b..e7404038aab 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -798,6 +798,8 @@ def get_mapped_purchase_invoice(source_name, target_doc=None, ignore_permissions "field_map": { "name": "po_detail", "parent": "purchase_order", + "material_request": "material_request", + "material_request_item": "material_request_item", "wip_composite_asset": "wip_composite_asset", }, "postprocess": update_item, From ebb0cef601e29cdaca3b5698d624bafbc6a8afcc Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:44:26 +0530 Subject: [PATCH 2/6] fix: add test case for update received qty in MR --- .../purchase_invoice/test_purchase_invoice.py | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 6f7ab21e261..d7ffbd216f3 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -31,6 +31,8 @@ from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle ) from erpnext.stock.doctype.stock_entry.test_stock_entry import get_qty_after_transaction from erpnext.stock.tests.test_utils import StockTestMixin +from erpnext.stock.doctype.material_request.test_material_request import make_material_request +from erpnext.stock.doctype.material_request.material_request import make_purchase_order test_dependencies = ["Item", "Cost Center", "Payment Term", "Payment Terms Template"] test_ignore = ["Serial No"] @@ -82,6 +84,32 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): # teardown pi.delete() + def test_update_received_qty_in_material_request(self): + from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice + """ + Test if the received_qty in Material Request is updated correctly when + a Purchase Invoice with update_stock=True is submitted. + """ + mr = make_material_request(item_code="_Test Item", qty=10) + mr.save() + mr.submit() + frappe.db.commit() + po = make_purchase_order(mr.name) + po.supplier = "_Test Supplier" + po.save() + po.submit() + + # Create a Purchase Invoice with update_stock=True + pi = make_purchase_invoice(po.name) + pi.update_stock = True + pi.insert() + pi.submit() + frappe.db.commit() + + # Check if the received quantity is updated in Material Request + mr.reload() + self.assertEqual(mr.items[0].received_qty, 10) + def test_gl_entries_without_perpetual_inventory(self): frappe.db.set_value("Company", "_Test Company", "round_off_account", "Round Off - _TC") pi = frappe.copy_doc(test_records[0]) From cff105015901af0f5b18497e8110ae394d49f1c6 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:46:23 +0530 Subject: [PATCH 3/6] fix: add test case for update received qty in MR --- .../accounts/doctype/purchase_invoice/test_purchase_invoice.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index d7ffbd216f3..f0054abb46c 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -93,7 +93,6 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): mr = make_material_request(item_code="_Test Item", qty=10) mr.save() mr.submit() - frappe.db.commit() po = make_purchase_order(mr.name) po.supplier = "_Test Supplier" po.save() @@ -104,7 +103,6 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): pi.update_stock = True pi.insert() pi.submit() - frappe.db.commit() # Check if the received quantity is updated in Material Request mr.reload() From 62e4e88f1d60cdd6865b77df41a0bba9c0a4f8eb Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:47:30 +0530 Subject: [PATCH 4/6] fix: add test case for update received qty in MR --- .../doctype/purchase_invoice/test_purchase_invoice.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index f0054abb46c..687fe40a98f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -17,6 +17,8 @@ from erpnext.controllers.buying_controller import QtyMismatchError from erpnext.exceptions import InvalidCurrency from erpnext.projects.doctype.project.test_project import make_project from erpnext.stock.doctype.item.test_item import create_item +from erpnext.stock.doctype.material_request.test_material_request import make_material_request +from erpnext.stock.doctype.material_request.material_request import make_purchase_order from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( make_purchase_invoice as create_purchase_invoice_from_receipt, ) @@ -31,8 +33,6 @@ from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle ) from erpnext.stock.doctype.stock_entry.test_stock_entry import get_qty_after_transaction from erpnext.stock.tests.test_utils import StockTestMixin -from erpnext.stock.doctype.material_request.test_material_request import make_material_request -from erpnext.stock.doctype.material_request.material_request import make_purchase_order test_dependencies = ["Item", "Cost Center", "Payment Term", "Payment Terms Template"] test_ignore = ["Serial No"] From 73f22ba9a00eeffc444a23fb9b0fa80c05741e24 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:50:04 +0530 Subject: [PATCH 5/6] fix: add test case for update received qty in MR - import sorter --- .../accounts/doctype/purchase_invoice/test_purchase_invoice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 687fe40a98f..9e1e6eefc1a 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -17,8 +17,8 @@ from erpnext.controllers.buying_controller import QtyMismatchError from erpnext.exceptions import InvalidCurrency from erpnext.projects.doctype.project.test_project import make_project from erpnext.stock.doctype.item.test_item import create_item -from erpnext.stock.doctype.material_request.test_material_request import make_material_request from erpnext.stock.doctype.material_request.material_request import make_purchase_order +from erpnext.stock.doctype.material_request.test_material_request import make_material_request from erpnext.stock.doctype.purchase_receipt.purchase_receipt import ( make_purchase_invoice as create_purchase_invoice_from_receipt, ) From 77959596db8a2002e54224e6ad1bf1a5fc9f7e6c Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:50:49 +0530 Subject: [PATCH 6/6] fix: add test case for update received qty in MR - import sorter --- .../accounts/doctype/purchase_invoice/test_purchase_invoice.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 9e1e6eefc1a..5f9b637512f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -86,6 +86,7 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin): def test_update_received_qty_in_material_request(self): from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice + """ Test if the received_qty in Material Request is updated correctly when a Purchase Invoice with update_stock=True is submitted.