chore: allow manually submitting and cancelling asset depr schedule
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index d69777a..f592a43 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -289,7 +289,7 @@
for row in asset.get("finance_books"):
depr_schedule = get_draft_or_active_depr_schedule(asset.name, row.finance_book)
- for s in depr_schedule:
+ for s in depr_schedule or []:
if s.journal_entry == self.name:
s.db_set("journal_entry", None)
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index b9274b1..c2bfb12 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -395,7 +395,7 @@
for row in self.get("finance_books"):
depr_schedule = get_draft_or_active_depr_schedule(self.name, row.finance_book)
- for d in depr_schedule:
+ for d in depr_schedule or []:
if d.journal_entry:
frappe.get_doc("Journal Entry", d.journal_entry).cancel()
d.db_set("journal_entry", None)
@@ -903,6 +903,7 @@
)
new_asset_depr_schedule_doc.notes = notes
+ current_asset_depr_schedule_doc.flags.should_not_cancel_depreciation_entries = True
current_asset_depr_schedule_doc.cancel()
new_asset_depr_schedule_doc.submit()
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json
index f6f594c..af09cda 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.json
@@ -65,8 +65,7 @@
"fieldname": "finance_book",
"fieldtype": "Link",
"label": "Finance Book",
- "options": "Finance Book",
- "read_only": 1
+ "options": "Finance Book"
},
{
"fieldname": "depreciation_method",
@@ -115,7 +114,8 @@
{
"fieldname": "notes",
"fieldtype": "Small Text",
- "label": "Notes"
+ "label": "Notes",
+ "read_only": 1
},
{
"fieldname": "status",
@@ -133,7 +133,6 @@
"read_only": 1
},
{
- "default": "0",
"fieldname": "expected_value_after_useful_life",
"fieldtype": "Currency",
"label": "Expected Value After Useful Life",
@@ -157,11 +156,10 @@
"read_only": 1
}
],
- "in_create": 1,
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
- "modified": "2022-12-26 20:32:43.342271",
+ "modified": "2023-01-02 15:38:30.766779",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Depreciation Schedule",
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
index 7a35013..2076976 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -18,6 +18,12 @@
class AssetDepreciationSchedule(Document):
+ def before_save(self):
+ if not self.finance_book_id:
+ self.prepare_draft_asset_depr_schedule_data_from_asset_name_and_fb_name(
+ self.asset, self.finance_book
+ )
+
def validate(self):
self.validate_another_asset_depr_schedule_does_not_exist()
@@ -45,9 +51,33 @@
def on_submit(self):
self.db_set("status", "Active")
+ def before_cancel(self):
+ if not self.flags.should_not_cancel_depreciation_entries:
+ self.cancel_depreciation_entries()
+
+ def cancel_depreciation_entries(self):
+ for d in self.get("depreciation_schedule"):
+ if d.journal_entry:
+ frappe.get_doc("Journal Entry", d.journal_entry).cancel()
+
def on_cancel(self):
self.db_set("status", "Cancelled")
+ def prepare_draft_asset_depr_schedule_data_from_asset_name_and_fb_name(self, asset_name, fb_name):
+ asset_doc = frappe.get_doc("Asset", asset_name)
+
+ finance_book_filter = ["finance_book", "is", "not set"]
+ if fb_name:
+ finance_book_filter = ["finance_book", "=", fb_name]
+
+ asset_finance_book_name = frappe.db.get_value(
+ doctype="Asset Finance Book",
+ filters=[["parent", "=", asset_name], finance_book_filter],
+ )
+ asset_finance_book_doc = frappe.get_doc("Asset Finance Book", asset_finance_book_name)
+
+ prepare_draft_asset_depr_schedule_data(self, asset_doc, asset_finance_book_doc)
+
def make_draft_asset_depr_schedules_if_not_present(asset_doc):
for row in asset_doc.get("finance_books"):
@@ -138,7 +168,8 @@
if not asset_depr_schedule_doc:
continue
- asset_depr_schedule_doc.cancel()
+ if asset_depr_schedule_doc.status == "Active":
+ asset_depr_schedule_doc.cancel()
def make_new_active_asset_depr_schedules_and_cancel_current_ones(
@@ -163,6 +194,7 @@
new_asset_depr_schedule_doc.notes = notes
+ current_asset_depr_schedule_doc.flags.should_not_cancel_depreciation_entries = True
current_asset_depr_schedule_doc.cancel()
new_asset_depr_schedule_doc.submit()
diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
index 90ecfec..fe4b7f9 100644
--- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
+++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
@@ -124,6 +124,7 @@
new_asset_depr_schedule_doc.status = "Draft"
new_asset_depr_schedule_doc.docstatus = 0
+ current_asset_depr_schedule_doc.flags.should_not_cancel_depreciation_entries = True
current_asset_depr_schedule_doc.cancel()
notes = _(