From bb0695a8833ed16b3e7e0a5fd1511c419b6274e2 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 13 Jan 2025 17:04:15 +0530 Subject: [PATCH 1/4] fix: Skip WIP Warehouse transfer (cherry picked from commit bbb5f8056b01f181d3644faed4c1ae2f1da029ee) --- erpnext/manufacturing/doctype/work_order/work_order.js | 7 +++++++ erpnext/manufacturing/doctype/work_order/work_order.py | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index 6da3d803358..9f1726b4d6b 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -544,6 +544,13 @@ frappe.ui.form.on("Work Order", { erpnext.work_order.calculate_cost(frm.doc); erpnext.work_order.calculate_total_cost(frm); }, + + skip_transfer: function (frm) { + if (frm.doc.skip_transfer && !frm.doc.from_wip_warehouse) { + frm.set_value("wip_warehouse", null); + frm.refresh_field("wip_warehouse"); + } + }, }); frappe.ui.form.on("Work Order Item", { diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 9af3403ffa3..d303411b81f 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -152,6 +152,7 @@ class WorkOrder(Document): self.validate_sales_order() self.set_default_warehouse() self.validate_warehouse_belongs_to_company() + self.check_wip_warehouse_skip() self.calculate_operating_cost() self.validate_qty() self.validate_transfer_against() @@ -251,6 +252,10 @@ class WorkOrder(Document): if not self.fg_warehouse: self.fg_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_fg_warehouse") + def check_wip_warehouse_skip(self): + if self.skip_transfer and not self.from_wip_warehouse: + self.wip_warehouse = None + def validate_warehouse_belongs_to_company(self): warehouses = [self.fg_warehouse, self.wip_warehouse] for d in self.get("required_items"): From 8ba42cfbf09fec58f4ac360ecfb8e9cce36933c9 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 14 Jan 2025 16:27:49 +0530 Subject: [PATCH 2/4] fix: tests (cherry picked from commit 09d26a835fa7b34402e9767f50dc8cb7b51bf1fa) --- .../doctype/production_plan/test_production_plan.py | 8 ++++---- .../doctype/work_order/test_work_order.py | 10 +++++++++- erpnext/manufacturing/doctype/work_order/work_order.py | 6 +++++- .../selling/doctype/sales_order/test_sales_order.py | 4 ++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py index 71d9b59c677..c7228823bed 100644 --- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py @@ -744,9 +744,9 @@ class TestProductionPlan(FrappeTestCase): """ from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record - make_stock_entry(item_code="_Test Item", target="Work In Progress - _TC", qty=2, basic_rate=100) + make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=2, basic_rate=100) make_stock_entry( - item_code="_Test Item Home Desktop 100", target="Work In Progress - _TC", qty=4, basic_rate=100 + item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC", qty=4, basic_rate=100 ) item = "_Test FG Item" @@ -794,10 +794,10 @@ class TestProductionPlan(FrappeTestCase): from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record make_stock_entry( - item_code="Raw Material Item 1", target="Work In Progress - _TC", qty=2, basic_rate=100 + item_code="Raw Material Item 1", target="_Test Warehouse - _TC", qty=2, basic_rate=100 ) make_stock_entry( - item_code="Raw Material Item 2", target="Work In Progress - _TC", qty=2, basic_rate=100 + item_code="Raw Material Item 2", target="_Test Warehouse - _TC", qty=2, basic_rate=100 ) pln = create_production_plan(item_code="Test Production Item 1", skip_getting_mr_items=True) diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index 86a03e7919c..9834fc93a64 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -714,7 +714,12 @@ class TestWorkOrder(FrappeTestCase): self.assertEqual(row.item_code, fg_item) work_order = make_wo_order_test_record( - item=fg_item, skip_transfer=True, planned_start_date=now(), qty=30, do_not_save=True + item=fg_item, + skip_transfer=True, + planned_start_date=now(), + qty=30, + do_not_save=True, + source_warehouse="_Test Warehouse - _TC", ) work_order.batch_size = 10 work_order.insert() @@ -931,11 +936,13 @@ class TestWorkOrder(FrappeTestCase): wip_warehouse=wip_warehouse, qty=qty, skip_transfer=1, + source_warehouse=wip_warehouse, stock_uom=fg_item_non_whole.stock_uom, ) se = frappe.get_doc(make_stock_entry(wo.name, "Material Transfer for Manufacture", qty)) se.get("items")[0].s_warehouse = "Stores - _TC" + se.get("items")[0].t_warehouse = wip_warehouse se.insert() se.submit() @@ -2045,6 +2052,7 @@ class TestWorkOrder(FrappeTestCase): bom_no=bom_doc.name, qty=1, skip_transfer=1, + source_warehouse="_Test Warehouse - _TC", ) job_cards = frappe.get_all("Job Card", filters={"work_order": wo.name}) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index d303411b81f..8a324cf7acb 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -1426,7 +1426,11 @@ def make_stock_entry(work_order_id, purpose, qty=None, target_warehouse=None): stock_entry.to_warehouse = wip_warehouse stock_entry.project = work_order.project else: - stock_entry.from_warehouse = wip_warehouse + stock_entry.from_warehouse = ( + work_order.source_warehouse + if work_order.skip_transfer and not work_order.from_wip_warehouse + else wip_warehouse + ) stock_entry.to_warehouse = work_order.fg_warehouse stock_entry.project = work_order.project diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index 244a6b1ddad..47d42b0a9d5 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -1687,13 +1687,13 @@ class TestSalesOrder(AccountsTestMixin, FrappeTestCase): wo.submit() make_stock_entry( item_code="_Test Item", - target="Work In Progress - _TC", + target="_Test Warehouse - _TC", qty=4, basic_rate=100, # Stock RM ) make_stock_entry( item_code="_Test Item Home Desktop 100", # Stock RM - target="Work In Progress - _TC", + target="_Test Warehouse - _TC", qty=4, basic_rate=100, ) From 4e1d4005d9da724139900710d3de411b35e138ec Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 15 Jan 2025 13:49:11 +0530 Subject: [PATCH 3/4] test: Added new test to check wip skip (cherry picked from commit 6edb454eeaec19d2b83455cd01d3b102e58a1290) --- .../doctype/work_order/test_work_order.py | 31 +++++++++++++++++++ .../doctype/work_order/work_order.js | 7 ----- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index 9834fc93a64..9f18763acf3 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -2459,6 +2459,37 @@ class TestWorkOrder(FrappeTestCase): frappe.db.set_single_value("Manufacturing Settings", "validate_components_quantities_per_bom", 0) + def test_wip_skip(self): + wo = make_wo_order_test_record( + item="_Test FG Item", + qty=10, + source_warehouse="_Test Warehouse - _TC", + wip_warehouse="Stores - _TC", + ) + manufacture_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 10)) + self.assertEqual(manufacture_entry.items[0].s_warehouse, "Stores - _TC") + + wo = make_wo_order_test_record( + item="_Test FG Item", + qty=10, + source_warehouse="_Test Warehouse - _TC", + wip_warehouse="Stores - _TC", + skip_transfer=1, + ) + manufacture_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 10)) + self.assertEqual(manufacture_entry.items[0].s_warehouse, "_Test Warehouse - _TC") + + wo = make_wo_order_test_record( + item="_Test FG Item", + qty=10, + source_warehouse="_Test Warehouse - _TC", + wip_warehouse="Stores - _TC", + skip_transfer=1, + from_wip_warehouse=1, + ) + manufacture_entry = frappe.get_doc(make_stock_entry(wo.name, "Manufacture", 10)) + self.assertEqual(manufacture_entry.items[0].s_warehouse, "Stores - _TC") + def make_operation(**kwargs): kwargs = frappe._dict(kwargs) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index 9f1726b4d6b..6da3d803358 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -544,13 +544,6 @@ frappe.ui.form.on("Work Order", { erpnext.work_order.calculate_cost(frm.doc); erpnext.work_order.calculate_total_cost(frm); }, - - skip_transfer: function (frm) { - if (frm.doc.skip_transfer && !frm.doc.from_wip_warehouse) { - frm.set_value("wip_warehouse", null); - frm.refresh_field("wip_warehouse"); - } - }, }); frappe.ui.form.on("Work Order Item", { From f5667f56e41a023b5e9b9e6ed26570314e2bc907 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 15 Jan 2025 16:20:17 +0530 Subject: [PATCH 4/4] fix: test case --- .../doctype/job_card/test_job_card.py | 1 + .../doctype/work_order/test_work_order.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index b0644b4e8d2..d6d3775111d 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -522,6 +522,7 @@ class TestJobCard(FrappeTestCase): production_item=item_code, bom_no=bom_doc.name, skip_transfer=1, + from_wip_warehouse=1, wip_warehouse=warehouse, source_warehouse=warehouse, ) diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index 9f18763acf3..307981f4294 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -1014,7 +1014,12 @@ class TestWorkOrder(FrappeTestCase): bom.submit() wo_order = make_wo_order_test_record( - item=item, company=company, planned_start_date=now(), qty=20, skip_transfer=1 + item=item, + company=company, + planned_start_date=now(), + qty=20, + skip_transfer=1, + from_wip_warehouse=1, ) job_card = frappe.db.get_value("Job Card", {"work_order": wo_order.name}, "name") update_job_card(job_card) @@ -1026,7 +1031,12 @@ class TestWorkOrder(FrappeTestCase): # Partial Job Card 1 with qty 10 wo_order = make_wo_order_test_record( - item=item, company=company, planned_start_date=add_days(now(), 60), qty=20, skip_transfer=1 + item=item, + company=company, + planned_start_date=add_days(now(), 60), + qty=20, + skip_transfer=1, + from_wip_warehouse=1, ) job_card = frappe.db.get_value("Job Card", {"work_order": wo_order.name}, "name") update_job_card(job_card, 10, 1) @@ -2052,6 +2062,7 @@ class TestWorkOrder(FrappeTestCase): bom_no=bom_doc.name, qty=1, skip_transfer=1, + from_wip_warehouse=1, source_warehouse="_Test Warehouse - _TC", )