From 1928a394c911c21d3227f7919cdf8f65197a295e Mon Sep 17 00:00:00 2001 From: Rehan Ansari Date: Tue, 4 Nov 2025 23:34:27 +0530 Subject: [PATCH] fix: validate purchase invoice status and resolve related issues --- erpnext/assets/doctype/asset/asset.json | 5 ++--- erpnext/assets/doctype/asset/asset.py | 1 + erpnext/assets/doctype/asset_repair/asset_repair.json | 4 ++-- erpnext/assets/doctype/asset_repair/asset_repair.py | 10 ++++++++++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index a87e7d63b1a..af4d8f281e2 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -340,7 +340,6 @@ "label": "Maintenance Required" }, { - "allow_on_submit": 1, "default": "Draft", "fieldname": "status", "fieldtype": "Select", @@ -348,7 +347,7 @@ "in_standard_filter": 1, "label": "Status", "no_copy": 1, - "options": "Draft\nSubmitted\nPartially Depreciated\nFully Depreciated\nSold\nScrapped\nIn Maintenance\nOut of Order\nIssue\nReceipt\nCapitalized\nWork In Progress", + "options": "Draft\nSubmitted\nCancelled\nPartially Depreciated\nFully Depreciated\nSold\nScrapped\nIn Maintenance\nOut of Order\nIssue\nReceipt\nCapitalized\nWork In Progress", "read_only": 1 }, { @@ -601,7 +600,7 @@ "link_fieldname": "target_asset" } ], - "modified": "2025-05-23 00:53:54.249309", + "modified": "2025-11-04 22:39:00.817405", "modified_by": "Administrator", "module": "Assets", "name": "Asset", diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 96f49a0e1cb..629b794940a 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -100,6 +100,7 @@ class Asset(AccountsController): status: DF.Literal[ "Draft", "Submitted", + "Cancelled", "Partially Depreciated", "Fully Depreciated", "Sold", diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.json b/erpnext/assets/doctype/asset_repair/asset_repair.json index 8f693cce6b0..d95e3e630a3 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.json +++ b/erpnext/assets/doctype/asset_repair/asset_repair.json @@ -128,7 +128,7 @@ "fieldtype": "Link", "in_list_view": 1, "label": "Asset", - "link_filters": "[[\"Asset\",\"status\",\"not in\",[\"Work In Progress\",\"Capitalized\",\"Fully Depreciated\",\"Sold\",\"Scrapped\",null]]]", + "link_filters": "[[\"Asset\",\"status\",\"not in\",[\"Work In Progress\",\"Capitalized\",\"Fully Depreciated\",\"Sold\",\"Scrapped\",\"Cancelled\",null]]]", "options": "Asset", "reqd": 1 }, @@ -261,7 +261,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2025-07-18 15:59:53.981224", + "modified": "2025-11-04 23:06:43.644846", "modified_by": "Administrator", "module": "Assets", "name": "Asset Repair", diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py index 1614fd05c43..dc74da28db4 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/asset_repair.py @@ -82,11 +82,21 @@ class AssetRepair(AccountsController): def validate_purchase_invoices(self): for d in self.invoices: + self.validate_purchase_invoice_status(d.purchase_invoice) invoice_items = self.get_invoice_items(d.purchase_invoice) self.validate_service_purchase_invoice(d.purchase_invoice, invoice_items) self.validate_expense_account(d, invoice_items) self.validate_purchase_invoice_repair_cost(d, invoice_items) + def validate_purchase_invoice_status(self, purchase_invoice): + docstatus = frappe.db.get_value("Purchase Invoice", purchase_invoice, "docstatus") + if docstatus == 0: + frappe.throw( + _("{0} is still in Draft. Please submit it before saving the Asset Repair.").format( + get_link_to_form("Purchase Invoice", purchase_invoice) + ) + ) + def get_invoice_items(self, pi): invoice_items = frappe.get_all( "Purchase Invoice Item",