mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 08:54:45 +00:00
fix: Create Depreciation Schedules properly for existing Assets
(cherry picked from commit 5c3d4caeda)
# Conflicts:
# erpnext/assets/doctype/asset/asset.py
This commit is contained in:
@@ -193,8 +193,7 @@ class Asset(AccountsController):
|
|||||||
|
|
||||||
# value_after_depreciation - current Asset value
|
# value_after_depreciation - current Asset value
|
||||||
if self.docstatus == 1 and d.value_after_depreciation:
|
if self.docstatus == 1 and d.value_after_depreciation:
|
||||||
value_after_depreciation = (flt(d.value_after_depreciation) -
|
value_after_depreciation = flt(d.value_after_depreciation)
|
||||||
flt(self.opening_accumulated_depreciation))
|
|
||||||
else:
|
else:
|
||||||
value_after_depreciation = (flt(self.gross_purchase_amount) -
|
value_after_depreciation = (flt(self.gross_purchase_amount) -
|
||||||
flt(self.opening_accumulated_depreciation))
|
flt(self.opening_accumulated_depreciation))
|
||||||
@@ -240,7 +239,7 @@ class Asset(AccountsController):
|
|||||||
break
|
break
|
||||||
|
|
||||||
# For first row
|
# For first row
|
||||||
if has_pro_rata and n==0:
|
if has_pro_rata and not self.opening_accumulated_depreciation and n==0:
|
||||||
depreciation_amount, days, months = self.get_pro_rata_amt(d, depreciation_amount,
|
depreciation_amount, days, months = self.get_pro_rata_amt(d, depreciation_amount,
|
||||||
self.available_for_use_date, d.depreciation_start_date)
|
self.available_for_use_date, d.depreciation_start_date)
|
||||||
|
|
||||||
@@ -253,7 +252,7 @@ class Asset(AccountsController):
|
|||||||
if not self.flags.increase_in_asset_life:
|
if not self.flags.increase_in_asset_life:
|
||||||
# In case of increase_in_asset_life, the self.to_date is already set on asset_repair submission
|
# In case of increase_in_asset_life, the self.to_date is already set on asset_repair submission
|
||||||
self.to_date = add_months(self.available_for_use_date,
|
self.to_date = add_months(self.available_for_use_date,
|
||||||
n * cint(d.frequency_of_depreciation))
|
(n + self.number_of_depreciations_booked) * cint(d.frequency_of_depreciation))
|
||||||
|
|
||||||
depreciation_amount, days, months = self.get_pro_rata_amt(d,
|
depreciation_amount, days, months = self.get_pro_rata_amt(d,
|
||||||
depreciation_amount, schedule_date, self.to_date)
|
depreciation_amount, schedule_date, self.to_date)
|
||||||
@@ -395,7 +394,33 @@ class Asset(AccountsController):
|
|||||||
frappe.throw(_("Depreciation Row {0}: Next Depreciation Date cannot be before Available-for-use Date")
|
frappe.throw(_("Depreciation Row {0}: Next Depreciation Date cannot be before Available-for-use Date")
|
||||||
.format(row.idx))
|
.format(row.idx))
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
def set_accumulated_depreciation(self, date_of_sale=None, ignore_booked_entry = False):
|
def set_accumulated_depreciation(self, date_of_sale=None, ignore_booked_entry = False):
|
||||||
|
=======
|
||||||
|
# to ensure that final accumulated depreciation amount is accurate
|
||||||
|
def get_adjusted_depreciation_amount(self, depreciation_amount_without_pro_rata, depreciation_amount_for_last_row, finance_book):
|
||||||
|
if not self.opening_accumulated_depreciation:
|
||||||
|
depreciation_amount_for_first_row = self.get_depreciation_amount_for_first_row(finance_book)
|
||||||
|
|
||||||
|
if depreciation_amount_for_first_row + depreciation_amount_for_last_row != depreciation_amount_without_pro_rata:
|
||||||
|
depreciation_amount_for_last_row = depreciation_amount_without_pro_rata - depreciation_amount_for_first_row
|
||||||
|
|
||||||
|
return depreciation_amount_for_last_row
|
||||||
|
|
||||||
|
def get_depreciation_amount_for_first_row(self, finance_book):
|
||||||
|
if self.has_only_one_finance_book():
|
||||||
|
return self.schedules[0].depreciation_amount
|
||||||
|
else:
|
||||||
|
for schedule in self.schedules:
|
||||||
|
if schedule.finance_book == finance_book:
|
||||||
|
return schedule.depreciation_amount
|
||||||
|
|
||||||
|
def has_only_one_finance_book(self):
|
||||||
|
if len(self.finance_books) == 1:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def set_accumulated_depreciation(self, date_of_sale=None, date_of_return=None, ignore_booked_entry = False):
|
||||||
|
>>>>>>> 5c3d4caeda (fix: Create Depreciation Schedules properly for existing Assets)
|
||||||
straight_line_idx = [d.idx for d in self.get("schedules") if d.depreciation_method == 'Straight Line']
|
straight_line_idx = [d.idx for d in self.get("schedules") if d.depreciation_method == 'Straight Line']
|
||||||
finance_books = []
|
finance_books = []
|
||||||
|
|
||||||
@@ -826,12 +851,16 @@ def get_total_days(date, frequency):
|
|||||||
|
|
||||||
@erpnext.allow_regional
|
@erpnext.allow_regional
|
||||||
def get_depreciation_amount(asset, depreciable_value, row):
|
def get_depreciation_amount(asset, depreciable_value, row):
|
||||||
depreciation_left = flt(row.total_number_of_depreciations) - flt(asset.number_of_depreciations_booked)
|
depreciation_left = flt(row.total_number_of_depreciations)
|
||||||
|
|
||||||
if row.depreciation_method in ("Straight Line", "Manual"):
|
if row.depreciation_method in ("Straight Line", "Manual"):
|
||||||
# if the Depreciation Schedule is being prepared for the first time
|
# if the Depreciation Schedule is being prepared for the first time
|
||||||
if not asset.flags.increase_in_asset_life:
|
if not asset.flags.increase_in_asset_life:
|
||||||
|
<<<<<<< HEAD
|
||||||
depreciation_amount = (flt(row.value_after_depreciation) -
|
depreciation_amount = (flt(row.value_after_depreciation) -
|
||||||
|
=======
|
||||||
|
depreciation_amount = (flt(asset.gross_purchase_amount) -
|
||||||
|
>>>>>>> 5c3d4caeda (fix: Create Depreciation Schedules properly for existing Assets)
|
||||||
flt(row.expected_value_after_useful_life)) / depreciation_left
|
flt(row.expected_value_after_useful_life)) / depreciation_left
|
||||||
|
|
||||||
# if the Depreciation Schedule is being modified after Asset Repair
|
# if the Depreciation Schedule is being modified after Asset Repair
|
||||||
|
|||||||
Reference in New Issue
Block a user