From a1eab1db74b93f018b41911706885c499aaae9a5 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Sun, 29 Jun 2025 22:46:39 +0530 Subject: [PATCH 1/4] fix: validate asset before repair (cherry picked from commit c6baa34812765b1db365842ec24803c86b37f5b7) # Conflicts: # erpnext/assets/doctype/asset_repair/asset_repair.json --- .../assets/doctype/asset_repair/asset_repair.json | 12 +++++++++++- erpnext/assets/doctype/asset_repair/asset_repair.py | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.json b/erpnext/assets/doctype/asset_repair/asset_repair.json index c98f5a8d7f4..5d7ce569fbb 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.json +++ b/erpnext/assets/doctype/asset_repair/asset_repair.json @@ -138,6 +138,7 @@ "fieldtype": "Link", "in_list_view": 1, "label": "Asset", + "link_filters": "[[\"Asset\",\"status\",\"not in\",[\"Work In Progress\",\"Capitalized\",\"Fully Depreciated\",\"Sold\",\"Scrapped\",null]]]", "options": "Asset", "reqd": 1 }, @@ -248,7 +249,11 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2024-06-13 16:14:14.398356", +======= + "modified": "2025-06-29 22:30:00.589597", +>>>>>>> c6baa34812 (fix: validate asset before repair) "modified_by": "Administrator", "module": "Assets", "name": "Asset Repair", @@ -286,10 +291,15 @@ "write": 1 } ], +<<<<<<< HEAD "sort_field": "modified", +======= + "row_format": "Dynamic", + "sort_field": "creation", +>>>>>>> c6baa34812 (fix: validate asset before repair) "sort_order": "DESC", "states": [], "title_field": "asset_name", "track_changes": 1, "track_seen": 1 -} \ No newline at end of file +} diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py index 3938ae06b50..9fbcb0a7d50 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/asset_repair.py @@ -53,6 +53,7 @@ class AssetRepair(AccountsController): def validate(self): self.asset_doc = frappe.get_doc("Asset", self.asset) + self.validate_asset() self.validate_dates() self.update_status() @@ -60,6 +61,14 @@ class AssetRepair(AccountsController): self.set_stock_items_cost() self.calculate_total_repair_cost() + def validate_asset(self): + if self.asset_doc.status in ("Sold", "Fully Depreciated", "Scrapped"): + frappe.throw( + _("Asset {0} is in {1} status and cannot be repaired.").format( + get_link_to_form("Asset", self.asset), self.asset_doc.status + ) + ) + def validate_dates(self): if self.completion_date and (self.failure_date > self.completion_date): frappe.throw( From 6f24c02121916a651c21a221a94d13158ab4b71b Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Mon, 30 Jun 2025 00:29:23 +0530 Subject: [PATCH 2/4] test: asset status validation (cherry picked from commit cfe04a2aafd3be9aa2b4afefac58d7f50f64aa30) # Conflicts: # erpnext/assets/doctype/asset_repair/test_asset_repair.py --- .../doctype/asset_repair/test_asset_repair.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/erpnext/assets/doctype/asset_repair/test_asset_repair.py b/erpnext/assets/doctype/asset_repair/test_asset_repair.py index 44d08869a63..427525225d4 100644 --- a/erpnext/assets/doctype/asset_repair/test_asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/test_asset_repair.py @@ -4,11 +4,17 @@ import unittest import frappe +<<<<<<< HEAD from frappe.utils import flt, nowdate, nowtime, today +======= +from frappe.tests import IntegrationTestCase +from frappe.utils import add_months, flt, get_first_day, nowdate, nowtime, today +>>>>>>> cfe04a2aaf (test: asset status validation) from erpnext.assets.doctype.asset.asset import ( get_asset_account, get_asset_value_after_depreciation, + make_sales_invoice, ) from erpnext.assets.doctype.asset.test_asset import ( create_asset, @@ -33,6 +39,33 @@ class TestAssetRepair(unittest.TestCase): create_item("_Test Stock Item") frappe.db.sql("delete from `tabTax Rule`") + def test_asset_status(self): + date = nowdate() + purchase_date = add_months(get_first_day(date), -2) + + asset = create_asset( + calculate_depreciation=1, + available_for_use_date=purchase_date, + purchase_date=purchase_date, + expected_value_after_useful_life=10000, + total_number_of_depreciations=10, + frequency_of_depreciation=1, + submit=1, + ) + + si = make_sales_invoice(asset=asset.name, item_code="Macbook Pro", company="_Test Company") + si.customer = "_Test Customer" + si.due_date = date + si.get("items")[0].rate = 25000 + si.insert() + si.submit() + + asset.reload() + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold") + asset_repair = frappe.new_doc("Asset Repair") + asset_repair.update({"company": "_Test Company", "asset": asset.name, "asset_name": asset.asset_name}) + self.assertRaises(frappe.ValidationError, asset_repair.save) + def test_update_status(self): asset = create_asset(submit=1) initial_status = asset.status From f31b0085027f8aa524125490899c54893305c7ed Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Mon, 30 Jun 2025 01:03:49 +0530 Subject: [PATCH 3/4] chore: resolved conflicts --- erpnext/assets/doctype/asset_repair/asset_repair.json | 9 --------- 1 file changed, 9 deletions(-) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.json b/erpnext/assets/doctype/asset_repair/asset_repair.json index 5d7ce569fbb..a28afa280de 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.json +++ b/erpnext/assets/doctype/asset_repair/asset_repair.json @@ -249,11 +249,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2024-06-13 16:14:14.398356", -======= "modified": "2025-06-29 22:30:00.589597", ->>>>>>> c6baa34812 (fix: validate asset before repair) "modified_by": "Administrator", "module": "Assets", "name": "Asset Repair", @@ -291,12 +287,7 @@ "write": 1 } ], -<<<<<<< HEAD "sort_field": "modified", -======= - "row_format": "Dynamic", - "sort_field": "creation", ->>>>>>> c6baa34812 (fix: validate asset before repair) "sort_order": "DESC", "states": [], "title_field": "asset_name", From 2b37287b1954b71b0a0a13fbb7362c6a250c6485 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Mon, 30 Jun 2025 01:04:54 +0530 Subject: [PATCH 4/4] chore: resolved conflicts --- erpnext/assets/doctype/asset_repair/test_asset_repair.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/erpnext/assets/doctype/asset_repair/test_asset_repair.py b/erpnext/assets/doctype/asset_repair/test_asset_repair.py index 427525225d4..5c0a18baccb 100644 --- a/erpnext/assets/doctype/asset_repair/test_asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/test_asset_repair.py @@ -4,12 +4,7 @@ import unittest import frappe -<<<<<<< HEAD -from frappe.utils import flt, nowdate, nowtime, today -======= -from frappe.tests import IntegrationTestCase from frappe.utils import add_months, flt, get_first_day, nowdate, nowtime, today ->>>>>>> cfe04a2aaf (test: asset status validation) from erpnext.assets.doctype.asset.asset import ( get_asset_account,