From ca5418e2c92e8d245c50e785038ea53e6a7fb262 Mon Sep 17 00:00:00 2001 From: Shllokkk Date: Thu, 6 Aug 2026 00:33:24 +0530 Subject: [PATCH] fix: keep asset repair downtime in sync with entered dates (cherry picked from commit 4406bb906890f7b431aba66c074ad82231f5ba8b) --- .../doctype/asset_repair/asset_repair.js | 45 ++++++++++++------- .../doctype/asset_repair/asset_repair.py | 8 ++++ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.js b/erpnext/assets/doctype/asset_repair/asset_repair.js index 2920ff7e381..8e36b6d0be9 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.js +++ b/erpnext/assets/doctype/asset_repair/asset_repair.js @@ -116,24 +116,39 @@ frappe.ui.form.on("Asset Repair", { }, repair_status: (frm) => { - if (frm.doc.completion_date && frm.doc.repair_status == "Completed") { - frappe.call({ - method: "erpnext.assets.doctype.asset_repair.asset_repair.get_downtime", - args: { - failure_date: frm.doc.failure_date, - completion_date: frm.doc.completion_date, - }, - callback: function (r) { - if (r.message) { - frm.set_value("downtime", r.message + " Hrs"); - } - }, - }); - } - if (frm.doc.repair_status == "Completed" && !frm.doc.completion_date) { frm.set_value("completion_date", frappe.datetime.now_datetime()); } + + frm.events.set_downtime(frm); + }, + + failure_date: (frm) => { + frm.events.set_downtime(frm); + }, + + completion_date: (frm) => { + frm.events.set_downtime(frm); + }, + + set_downtime: (frm) => { + if (frm.doc.repair_status != "Completed" || !frm.doc.failure_date || !frm.doc.completion_date) { + frm.set_value("downtime", null); + return; + } + + frappe.call({ + method: "erpnext.assets.doctype.asset_repair.asset_repair.get_downtime", + args: { + failure_date: frm.doc.failure_date, + completion_date: frm.doc.completion_date, + }, + callback: function (r) { + if (r.message) { + frm.set_value("downtime", r.message + " Hrs"); + } + }, + }); }, stock_items_on_form_rendered() { diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py index 4fc8981d200..a96c204382f 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/asset_repair.py @@ -68,6 +68,7 @@ class AssetRepair(AccountsController): self.calculate_repair_cost() self.calculate_total_repair_cost() self.check_repair_status() + self.set_downtime() def validate_asset(self): if self.asset_doc.status in ("Sold", "Scrapped"): @@ -239,6 +240,13 @@ class AssetRepair(AccountsController): if self.repair_status == "Pending" and self.docstatus == 1: frappe.throw(_("Please update Repair Status.")) + def set_downtime(self): + # keep downtime in sync with the entered dates, regardless of edit order + if self.repair_status == "Completed" and self.failure_date and self.completion_date: + self.downtime = f"{get_downtime(self.failure_date, self.completion_date)} Hrs" + else: + self.downtime = None + def update_asset_value(self): total_repair_cost = self.total_repair_cost if self.docstatus == 1 else -1 * self.total_repair_cost