feat(Asset): Modify depreciation schedule
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 350220b..f837c5e 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -171,15 +171,23 @@
d.precision("rate_of_depreciation"))
def make_depreciation_schedule(self):
- if 'Manual' not in [d.depreciation_method for d in self.finance_books]:
+ if 'Manual' not in [d.depreciation_method for d in self.finance_books] and not self.schedules:
self.schedules = []
- if self.get("schedules") or not self.available_for_use_date:
+ if not self.available_for_use_date:
return
for d in self.get('finance_books'):
self.validate_asset_finance_books(d)
+ start = 0
+ for n in range (len(self.schedules)):
+ if not self.schedules[n].journal_entry:
+ print("*"*100)
+ del self.schedules[n:]
+ start = n
+ break
+
value_after_depreciation = (flt(self.gross_purchase_amount) -
flt(self.opening_accumulated_depreciation))
@@ -192,9 +200,9 @@
if has_pro_rata:
number_of_pending_depreciations += 1
-
+
skip_row = False
- for n in range(number_of_pending_depreciations):
+ for n in range(start, number_of_pending_depreciations):
# If depreciation is already completed (for double declining balance)
if skip_row: continue
@@ -350,11 +358,12 @@
if d.finance_book_id not in finance_books:
accumulated_depreciation = flt(self.opening_accumulated_depreciation)
value_after_depreciation = flt(self.get_value_after_depreciation(d.finance_book_id))
- finance_books.append(d.finance_book_id)
+ finance_books.append(int(d.finance_book_id))
depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
value_after_depreciation -= flt(depreciation_amount)
+ # for the last row, if depreciation method = Straight Line
if straight_line_idx and i == max(straight_line_idx) - 1:
book = self.get('finance_books')[cint(d.finance_book_id) - 1]
depreciation_amount += flt(value_after_depreciation -
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.js b/erpnext/assets/doctype/asset_repair/asset_repair.js
index 9d06cae..3328e66 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.js
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.js
@@ -28,7 +28,8 @@
refresh: function(frm) {
frm.toggle_display(['completion_date', 'repair_status', 'accounting_details', 'accounting_dimensions_section'], !(frm.doc.__islocal));
- frm.toggle_display(['stock_consumption_details_section', 'total_repair_cost'], frm.doc.stock_consumption)
+ frm.toggle_display(['stock_consumption_details_section', 'total_repair_cost'], frm.doc.stock_consumption);
+ frm.toggle_display('asset_depreciation_details_section', frm.doc.capitalize_repair_cost);
if (frm.doc.docstatus) {
frm.add_custom_button("View General Ledger", function() {
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index 74d3114..95abbd3 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -48,6 +48,7 @@
if self.capitalize_repair_cost:
self.check_for_purchase_invoice()
self.make_gl_entries()
+ self.modify_depreciation_schedule()
def check_repair_status(self):
if self.repair_status == "Pending":
@@ -140,8 +141,16 @@
for account in asset_category.accounts:
if account.company_name == company:
return account.fixed_asset_account
+
+ def modify_depreciation_schedule(self):
+ if self.increase_in_asset_life:
+ asset = frappe.get_doc('Asset', self.asset)
+ asset.flags.ignore_validate_update_after_submit = True
+ for row in asset.finance_books:
+ row.total_number_of_depreciations += self.increase_in_asset_life/row.frequency_of_depreciation
+ asset.prepare_depreciation_data()
+ asset.save()
-
@frappe.whitelist()
def get_downtime(failure_date, completion_date):
downtime = time_diff_in_hours(completion_date, failure_date)