fix: allow fully depreciated existing assets (copy #36378) (#36379)
* fix: allow fully depreciated existing assets
(cherry picked from commit 9489cba275525a93d92c00f62569888a219a8912)
# Conflicts:
# erpnext/assets/doctype/asset/asset.json
# erpnext/assets/doctype/asset/depreciation.py
* chore: fix conflicts in asset.json
* chore: fix conflicts in depreciation.py
---------
Co-authored-by: anandbaburajan <anandbaburajan@gmail.com>
diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json
index 698fc78..2eb5f3d 100644
--- a/erpnext/assets/doctype/asset/asset.json
+++ b/erpnext/assets/doctype/asset/asset.json
@@ -43,6 +43,7 @@
"column_break_33",
"opening_accumulated_depreciation",
"number_of_depreciations_booked",
+ "is_fully_depreciated",
"section_break_36",
"finance_books",
"section_break_33",
@@ -205,6 +206,7 @@
"fieldname": "disposal_date",
"fieldtype": "Date",
"label": "Disposal Date",
+ "no_copy": 1,
"read_only": 1
},
{
@@ -244,19 +246,17 @@
"label": "Is Existing Asset"
},
{
- "depends_on": "is_existing_asset",
+ "depends_on": "eval:(doc.is_existing_asset)",
"fieldname": "opening_accumulated_depreciation",
"fieldtype": "Currency",
"label": "Opening Accumulated Depreciation",
- "no_copy": 1,
"options": "Company:company:default_currency"
},
{
- "depends_on": "eval:(doc.is_existing_asset && doc.opening_accumulated_depreciation)",
+ "depends_on": "eval:(doc.is_existing_asset)",
"fieldname": "number_of_depreciations_booked",
"fieldtype": "Int",
- "label": "Number of Depreciations Booked",
- "no_copy": 1
+ "label": "Number of Depreciations Booked"
},
{
"collapsible": 1,
@@ -500,6 +500,13 @@
"fieldtype": "HTML",
"hidden": 1,
"label": "Depreciation Schedule View"
+ },
+ {
+ "default": "0",
+ "depends_on": "eval:(doc.is_existing_asset)",
+ "fieldname": "is_fully_depreciated",
+ "fieldtype": "Check",
+ "label": "Is Fully Depreciated"
}
],
"idx": 72,
@@ -533,7 +540,7 @@
"table_fieldname": "accounts"
}
],
- "modified": "2023-07-26 13:33:36.821534",
+ "modified": "2023-07-28 15:47:01.137996",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset",
@@ -577,4 +584,4 @@
"states": [],
"title_field": "asset_name",
"track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 5d35808..9efa18b 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -194,8 +194,11 @@
if not self.calculate_depreciation:
return
- elif not self.finance_books:
- frappe.throw(_("Enter depreciation details"))
+ else:
+ if not self.finance_books:
+ frappe.throw(_("Enter depreciation details"))
+ if self.is_fully_depreciated:
+ frappe.throw(_("Depreciation cannot be calculated for fully depreciated assets"))
if self.is_existing_asset:
return
@@ -276,7 +279,7 @@
depreciable_amount = flt(self.gross_purchase_amount) - flt(row.expected_value_after_useful_life)
if flt(self.opening_accumulated_depreciation) > depreciable_amount:
frappe.throw(
- _("Opening Accumulated Depreciation must be less than equal to {0}").format(
+ _("Opening Accumulated Depreciation must be less than or equal to {0}").format(
depreciable_amount
)
)
@@ -412,7 +415,9 @@
expected_value_after_useful_life = self.finance_books[idx].expected_value_after_useful_life
value_after_depreciation = self.finance_books[idx].value_after_depreciation
- if flt(value_after_depreciation) <= expected_value_after_useful_life:
+ if (
+ flt(value_after_depreciation) <= expected_value_after_useful_life or self.is_fully_depreciated
+ ):
status = "Fully Depreciated"
elif flt(value_after_depreciation) < flt(self.gross_purchase_amount):
status = "Partially Depreciated"
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index e1431ea..a311bc6 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -398,6 +398,15 @@
reverse_journal_entry = make_reverse_journal_entry(schedule.journal_entry)
reverse_journal_entry.posting_date = nowdate()
+
+ for account in reverse_journal_entry.accounts:
+ account.update(
+ {
+ "reference_type": "Asset",
+ "reference_name": asset.name,
+ }
+ )
+
frappe.flags.is_reverse_depr_entry = True
reverse_journal_entry.submit()