From 4187e60b07d5eb06d7cc7990e70ab88044c0c070 Mon Sep 17 00:00:00 2001 From: Rehan Ansari Date: Sun, 10 Aug 2025 00:40:52 +0530 Subject: [PATCH 1/2] fix: add validation for draft PR/PI in Asset (cherry picked from commit 4cf481cca8ca00aa25eee1dff99ab0ec20e266b8) --- erpnext/assets/doctype/asset/asset.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 79e266d14c2..6726748a008 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -128,6 +128,7 @@ class Asset(AccountsController): self.validate_item() self.validate_cost_center() self.set_missing_values() + self.validate_linked_purchase_docs() self.validate_gross_and_purchase_amount() self.validate_finance_books() @@ -409,6 +410,21 @@ class Asset(AccountsController): if self.available_for_use_date and getdate(self.available_for_use_date) < getdate(self.purchase_date): frappe.throw(_("Available-for-use Date should be after purchase date")) + def validate_linked_purchase_docs(self): + for doctype_field, doctype_name in [ + ("purchase_receipt", "Purchase Receipt"), + ("purchase_invoice", "Purchase Invoice"), + ]: + linked_doc = getattr(self, doctype_field, None) + if linked_doc: + docstatus = frappe.db.get_value(doctype_name, linked_doc, "docstatus") + if docstatus == 0: + frappe.throw( + _("{0} is still in Draft. Please submit it before saving the Asset.").format( + get_link_to_form(doctype_name, linked_doc) + ) + ) + def validate_gross_and_purchase_amount(self): if self.is_existing_asset: return From 9c5dacd97793f47d5b8a7f9362ba0d38baff3111 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Wed, 13 Aug 2025 16:38:30 +0530 Subject: [PATCH 2/2] refactor: validate linked purchase docs before field usage (cherry picked from commit 4a48b1371546d531b8180d2cb2bf8378456475e5) --- erpnext/assets/doctype/asset/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 6726748a008..2741a881f8d 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -122,13 +122,13 @@ class Asset(AccountsController): def validate(self): self.validate_category() self.validate_precision() + self.validate_linked_purchase_docs() self.set_purchase_doc_row_item() self.validate_asset_values() self.validate_asset_and_reference() self.validate_item() self.validate_cost_center() self.set_missing_values() - self.validate_linked_purchase_docs() self.validate_gross_and_purchase_amount() self.validate_finance_books()