From 0a70be5b993895dcc888c7418bbd675224554d2b Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 28 Oct 2024 17:21:06 +0530 Subject: [PATCH] fix: work order finish button not showing (#43875) --- .../doctype/job_card/job_card.js | 42 +++++++++++++++++++ .../doctype/job_card/job_card.py | 20 ++++----- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/erpnext/manufacturing/doctype/job_card/job_card.js b/erpnext/manufacturing/doctype/job_card/job_card.js index 2de5d9dad11..770872093cb 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.js +++ b/erpnext/manufacturing/doctype/job_card/job_card.js @@ -210,6 +210,48 @@ frappe.ui.form.on("Job Card", { } }, + complete_job_card(frm) { + let fields = [ + { + fieldtype: "Float", + label: __("Completed Quantity"), + fieldname: "qty", + reqd: 1, + default: frm.doc.for_quantity - frm.doc.manufactured_qty, + }, + { + fieldtype: "Datetime", + label: __("End Time"), + fieldname: "end_time", + default: frappe.datetime.now_datetime(), + }, + ]; + + frappe.prompt( + fields, + (data) => { + if (data.qty <= 0) { + frappe.throw(__("Quantity should be greater than 0")); + } + + frm.call({ + method: "complete_job_card", + doc: frm.doc, + args: { + qty: data.qty, + end_time: data.end_time, + }, + callback: function (r) { + frm.reload_doc(); + }, + }); + }, + __("Enter Value"), + __("Update"), + __("Set Finished Good Quantity") + ); + }, + make_subcontracting_po(frm) { if (frm.doc.docstatus === 1 && frm.doc.for_quantity > frm.doc.manufactured_qty) { frm.add_custom_button(__("Make Subcontracting PO"), () => { diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index 3fcabc47853..910229033c1 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -991,22 +991,16 @@ class JobCard(Document): qty = 0.0 if doc.transfer_material_against == "Job Card" and not doc.skip_transfer: - completed = True + min_qty = [] for d in doc.operations: - if d.status != "Completed": - completed = False + if d.completed_qty: + min_qty.append(d.completed_qty) + else: + min_qty = [] break - if completed: - job_cards = frappe.get_all( - "Job Card", - filters={"work_order": self.work_order, "docstatus": ("!=", 2)}, - fields="sum(transferred_qty) as qty", - group_by="operation_id", - ) - - if job_cards: - qty = min(d.qty for d in job_cards) + if min_qty: + qty = min(min_qty) doc.db_set("material_transferred_for_manufacturing", qty)