From 4551b4b63820852fd23b76fe98defb46f52d8039 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 12:39:45 +0530 Subject: [PATCH 1/7] fix: update received qty in MR on purchase invoice submit with update stock (cherry picked from commit 13cb53fa899104ee519c13fe4289e9ea0baf0581) # Conflicts: # erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json --- .../purchase_invoice/purchase_invoice.py | 13 +++++++++ .../purchase_invoice_item.json | 28 +++++++++++++++++++ .../purchase_invoice_item.py | 2 ++ .../doctype/purchase_order/purchase_order.py | 2 ++ 4 files changed, 45 insertions(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index df54a63b6613..fba60cef632a 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -683,6 +683,19 @@ def update_status_updater_args(self): 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 66df76a3af0c..d783478a2ccc 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,38 @@ { "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": [], +<<<<<<< HEAD "modified": "2024-03-19 19:09:47.210965", +======= + "modified": "2024-06-14 11:57:07.171700", +>>>>>>> 13cb53fa89 (fix: update received qty in MR on purchase invoice submit with update stock) "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 ccbc34749d75..baeece4815c6 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 d1f19841ac55..a280724193dc 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -794,6 +794,8 @@ def update_item(obj, target, source_parent): "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 125d97a182e2e8feebf1bbfc64d9b81234034507 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:44:26 +0530 Subject: [PATCH 2/7] fix: add test case for update received qty in MR (cherry picked from commit ebb0cef601e29cdaca3b5698d624bafbc6a8afcc) --- .../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 3ea88f195d83..8abb089f56ac 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.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"] @@ -72,6 +74,32 @@ def test_purchase_invoice_received_qty(self): # 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 aaee02835b4104bfc79771a877d1da1b7b3f1543 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:46:23 +0530 Subject: [PATCH 3/7] fix: add test case for update received qty in MR (cherry picked from commit cff105015901af0f5b18497e8110ae394d49f1c6) --- .../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 8abb089f56ac..cd3eda99b07b 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -83,7 +83,6 @@ def test_update_received_qty_in_material_request(self): 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() @@ -94,7 +93,6 @@ def test_update_received_qty_in_material_request(self): pi.update_stock = True pi.insert() pi.submit() - frappe.db.commit() # Check if the received quantity is updated in Material Request mr.reload() From 858058c9e1ba457af9a10db041756ad91f7c53ab Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:47:30 +0530 Subject: [PATCH 4/7] fix: add test case for update received qty in MR (cherry picked from commit 62e4e88f1d60cdd6865b77df41a0bba9c0a4f8eb) --- .../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 cd3eda99b07b..179d580298e3 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.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.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 21596c6c23a66e6bcf976b368082c1384b831ccf Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:50:04 +0530 Subject: [PATCH 5/7] fix: add test case for update received qty in MR - import sorter (cherry picked from commit 73f22ba9a00eeffc444a23fb9b0fa80c05741e24) --- .../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 179d580298e3..a7e30e2eb9e9 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.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 084658e8ff6c5decea94baf7babda52603301223 Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Fri, 14 Jun 2024 16:50:49 +0530 Subject: [PATCH 6/7] fix: add test case for update received qty in MR - import sorter (cherry picked from commit 77959596db8a2002e54224e6ad1bf1a5fc9f7e6c) --- .../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 a7e30e2eb9e9..3c3b081fa2f1 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -76,6 +76,7 @@ def test_purchase_invoice_received_qty(self): 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. From 7e9f6aee58459b6894678e999ba5d373d1b2c14b Mon Sep 17 00:00:00 2001 From: "Nihantra C. Patel" <141945075+Nihantra-Patel@users.noreply.github.com> Date: Mon, 17 Jun 2024 11:39:42 +0530 Subject: [PATCH 7/7] fix: update received qty in MR on purchase invoice submit with update stock --- .../purchase_invoice_item/purchase_invoice_item.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 d783478a2ccc..1d7b0c2f4616 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -963,11 +963,7 @@ "idx": 1, "istable": 1, "links": [], -<<<<<<< HEAD - "modified": "2024-03-19 19:09:47.210965", -======= "modified": "2024-06-14 11:57:07.171700", ->>>>>>> 13cb53fa89 (fix: update received qty in MR on purchase invoice submit with update stock) "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", @@ -977,4 +973,4 @@ "sort_field": "modified", "sort_order": "DESC", "states": [] -} \ No newline at end of file +}