From 82b0a5b6a9aea952f7982b8e72a31bd4a481fcde Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sat, 1 Feb 2025 00:35:12 +0530 Subject: [PATCH] fix: consider process_loss_qty in work order --- .../doctype/job_card/job_card.py | 4 ++- .../doctype/job_card/test_job_card.py | 1 + .../doctype/work_order/work_order.js | 25 ++++++++++++++----- .../doctype/work_order/work_order.py | 4 ++- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index ca2905848eb..a0172af499e 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -1040,7 +1040,9 @@ class JobCard(Document): if self.time_logs: self.status = "Work In Progress" - if self.docstatus == 1 and (self.for_quantity <= self.total_completed_qty or not self.items): + if self.docstatus == 1 and ( + self.for_quantity <= (self.total_completed_qty + self.process_loss_qty) or not self.items + ): self.status = "Completed" if self.is_paused: diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index bde05482e2a..d4b4d20aca7 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -433,6 +433,7 @@ class TestJobCard(FrappeTestCase): self.assertEqual(jc.status, status) jc = frappe.new_doc("Job Card") + jc.process_loss_qty = 0 jc.for_quantity = 2 jc.transferred_qty = 1 jc.total_completed_qty = 0 diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index 597b1794005..fff01123898 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -402,11 +402,14 @@ frappe.ui.form.on("Work Order", { } message = title; // pending qty - if(!frm.doc.skip_transfer){ - var pending_complete = frm.doc.material_transferred_for_manufacturing - frm.doc.produced_qty; - if(pending_complete) { - var width = ((pending_complete / frm.doc.qty * 100) - added_min); - title = __('{0} items in progress', [pending_complete]); + if (!frm.doc.skip_transfer) { + var pending_complete = + frm.doc.material_transferred_for_manufacturing - + frm.doc.produced_qty - + frm.doc.process_loss_qty; + if (pending_complete) { + var width = (pending_complete / frm.doc.qty) * 100 - added_min; + title = __("{0} items in progress", [pending_complete]); bars.push({ 'title': title, 'width': (width > 100 ? "99.5" : width) + '%', @@ -415,7 +418,17 @@ frappe.ui.form.on("Work Order", { message = message + '. ' + title; } } - frm.dashboard.add_progress(__('Status'), bars, message); + if (frm.doc.process_loss_qty) { + var process_loss_width = (frm.doc.process_loss_qty / frm.doc.qty) * 100; + title = __("{0} items lost during process.", [frm.doc.process_loss_qty]); + bars.push({ + title: title, + width: process_loss_width + "%", + progress_class: "progress-bar-danger", + }); + message = message + ". " + title; + } + frm.dashboard.add_progress(__("Status"), bars, message); }, show_progress_for_operations: function(frm) { diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 9921fd6d154..0bb555bcfe0 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -1514,7 +1514,9 @@ def close_work_order(work_order, status): work_order = frappe.get_doc("Work Order", work_order) if work_order.get("operations"): job_cards = frappe.get_list( - "Job Card", filters={"work_order": work_order.name, "status": "Work In Progress"}, pluck="name" + "Job Card", + filters={"work_order": work_order.name, "status": "Work In Progress", "docstatus": 1}, + pluck="name", ) if job_cards: -- GitLab