feat(Asset Repair): Modify depreciation schedule when increase_in_asset_life is not a multiple of frequency_of_depreciation

This commit is contained in:
GangaManoj 2021-05-21 23:40:36 +05:30
parent 4277877883
commit 4b543de329
3 changed files with 41 additions and 6 deletions

View File

@ -54,6 +54,8 @@
"next_depreciation_date",
"section_break_14",
"schedules",
"to_date",
"edit_dates",
"insurance_details",
"policy_number",
"insurer",
@ -487,6 +489,18 @@
"fieldtype": "Currency",
"label": "Asset Value",
"read_only": 1
},
{
"fieldname": "to_date",
"fieldtype": "Date",
"hidden": 1,
"label": "To Date"
},
{
"fieldname": "edit_dates",
"fieldtype": "Data",
"hidden": 1,
"label": "Edit Dates"
}
],
"idx": 72,
@ -509,7 +523,7 @@
"link_fieldname": "asset"
}
],
"modified": "2021-05-11 23:47:15.831720",
"modified": "2021-05-21 12:05:29.424083",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset",

View File

@ -228,11 +228,12 @@ class Asset(AccountsController):
# For last row
elif has_pro_rata and n == cint(number_of_pending_depreciations) - 1:
to_date = add_months(self.available_for_use_date,
n * cint(d.frequency_of_depreciation))
if not self.edit_dates:
self.to_date = add_months(self.available_for_use_date,
n * cint(d.frequency_of_depreciation))
depreciation_amount, days, months = get_pro_rata_amt(d,
depreciation_amount, schedule_date, to_date)
depreciation_amount, schedule_date, self.to_date)
monthly_schedule_date = add_months(schedule_date, 1)

View File

@ -5,9 +5,8 @@
from __future__ import unicode_literals
import frappe
from frappe import _
from frappe.utils import time_diff_in_hours, getdate
from frappe.utils import time_diff_in_hours, getdate, add_days, date_diff, add_months, flt, cint
from frappe.model.document import Document
from frappe.utils import flt
from erpnext.accounts.general_ledger import make_gl_entries
class AssetRepair(Document):
@ -148,8 +147,29 @@ class AssetRepair(Document):
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.edit_dates = ""
extra_months = self.increase_in_asset_life % row.frequency_of_depreciation
if extra_months != 0:
self.calculate_last_schedule_date(asset, row, extra_months)
# fix depreciation amount
asset.prepare_depreciation_data()
asset.save()
# to help modify depreciation schedule when increase_in_asset_life is not a multiple of frequency_of_depreciation
def calculate_last_schedule_date(self, asset, row, extra_months):
asset.edit_dates = "Don't Edit"
number_of_pending_depreciations = cint(row.total_number_of_depreciations) - \
cint(asset.number_of_depreciations_booked)
last_schedule_date = asset.schedules[len(asset.schedules)-1].schedule_date
asset.to_date = add_months(last_schedule_date, extra_months)
schedule_date = add_months(row.depreciation_start_date,
number_of_pending_depreciations * cint(row.frequency_of_depreciation))
if asset.to_date > schedule_date:
row.total_number_of_depreciations += 1
@frappe.whitelist()
def get_downtime(failure_date, completion_date):