From 4e7db71cf54a7239229722112c8ebf4152b640b8 Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Sat, 19 Aug 2023 23:41:10 +0530 Subject: [PATCH 1/7] fix: incorrect schedule in asset value adjustment --- erpnext/assets/doctype/asset/asset.py | 94 +++++++++++++++---- .../asset_value_adjustment.py | 88 ++++++++--------- 2 files changed, 120 insertions(+), 62 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index f4a1e3cc190c..8438b01d01c7 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -81,18 +81,27 @@ def validate_asset_and_reference(self): _("Purchase Invoice cannot be made against an existing asset {0}").format(self.name) ) - def prepare_depreciation_data(self, date_of_disposal=None, date_of_return=None): + def prepare_depreciation_data( + self, + date_of_disposal=None, + date_of_return=None, + value_after_depreciation=0, + ignore_booked_entry=False, + ): if self.calculate_depreciation: self.value_after_depreciation = 0 self.set_depreciation_rate() if self.should_prepare_depreciation_schedule(): - self.make_depreciation_schedule(date_of_disposal) - self.set_accumulated_depreciation(date_of_disposal, date_of_return) + self.make_depreciation_schedule(date_of_disposal, value_after_depreciation) + self.set_accumulated_depreciation(date_of_disposal, date_of_return, ignore_booked_entry) else: self.finance_books = [] - self.value_after_depreciation = flt(self.gross_purchase_amount) - flt( - self.opening_accumulated_depreciation - ) + if value_after_depreciation: + self.value_after_depreciation = value_after_depreciation + else: + self.value_after_depreciation = flt(self.gross_purchase_amount) - flt( + self.opening_accumulated_depreciation + ) def should_prepare_depreciation_schedule(self): if not self.get("schedules"): @@ -285,7 +294,7 @@ def set_depreciation_rate(self): self.get_depreciation_rate(d, on_validate=True), d.precision("rate_of_depreciation") ) - def make_depreciation_schedule(self, date_of_disposal): + def make_depreciation_schedule(self, date_of_disposal, value_after_depreciation=0): if not self.get("schedules"): self.schedules = [] @@ -295,24 +304,30 @@ def make_depreciation_schedule(self, date_of_disposal): start = self.clear_depreciation_schedule() for finance_book in self.get("finance_books"): - self._make_depreciation_schedule(finance_book, start, date_of_disposal) + self._make_depreciation_schedule( + finance_book, start, date_of_disposal, value_after_depreciation + ) if len(self.get("finance_books")) > 1 and any(start): self.sort_depreciation_schedule() - def _make_depreciation_schedule(self, finance_book, start, date_of_disposal): + def _make_depreciation_schedule( + self, finance_book, start, date_of_disposal, value_after_depreciation=0 + ): self.validate_asset_finance_books(finance_book) - value_after_depreciation = self._get_value_after_depreciation_for_making_schedule(finance_book) + if not value_after_depreciation: + value_after_depreciation = self._get_value_after_depreciation_for_making_schedule(finance_book) + finance_book.value_after_depreciation = value_after_depreciation - number_of_pending_depreciations = cint(finance_book.total_number_of_depreciations) - cint( + final_number_of_depreciations = cint(finance_book.total_number_of_depreciations) - cint( self.number_of_depreciations_booked ) has_pro_rata = self.check_is_pro_rata(finance_book) if has_pro_rata: - number_of_pending_depreciations += 1 + final_number_of_depreciations += 1 has_wdv_or_dd_non_yearly_pro_rata = False if ( @@ -328,7 +343,9 @@ def _make_depreciation_schedule(self, finance_book, start, date_of_disposal): depreciation_amount = 0 - for n in range(start[finance_book.idx - 1], number_of_pending_depreciations): + number_of_pending_depreciations = final_number_of_depreciations - start[finance_book.idx - 1] + + for n in range(start[finance_book.idx - 1], final_number_of_depreciations): # If depreciation is already completed (for double declining balance) if skip_row: continue @@ -345,10 +362,11 @@ def _make_depreciation_schedule(self, finance_book, start, date_of_disposal): n, prev_depreciation_amount, has_wdv_or_dd_non_yearly_pro_rata, + number_of_pending_depreciations, ) if not has_pro_rata or ( - n < (cint(number_of_pending_depreciations) - 1) or number_of_pending_depreciations == 2 + n < (cint(final_number_of_depreciations) - 1) or final_number_of_depreciations == 2 ): schedule_date = add_months( finance_book.depreciation_start_date, n * cint(finance_book.frequency_of_depreciation) @@ -416,7 +434,7 @@ def _make_depreciation_schedule(self, finance_book, start, date_of_disposal): ) # For last row - elif has_pro_rata and n == cint(number_of_pending_depreciations) - 1: + elif has_pro_rata and n == cint(final_number_of_depreciations) - 1: 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 self.to_date = add_months( @@ -447,7 +465,7 @@ def _make_depreciation_schedule(self, finance_book, start, date_of_disposal): # Adjust depreciation amount in the last period based on the expected value after useful life if finance_book.expected_value_after_useful_life and ( ( - n == cint(number_of_pending_depreciations) - 1 + n == cint(final_number_of_depreciations) - 1 and value_after_depreciation != finance_book.expected_value_after_useful_life ) or value_after_depreciation < finance_book.expected_value_after_useful_life @@ -690,7 +708,10 @@ def set_accumulated_depreciation( if s.finance_book_id == d.finance_book_id and (s.depreciation_method == "Straight Line" or s.depreciation_method == "Manual") ] - accumulated_depreciation = flt(self.opening_accumulated_depreciation) + if i > 0 and self.flags.decrease_in_asset_value_due_to_value_adjustment: + accumulated_depreciation = self.get("schedules")[i - 1].accumulated_depreciation_amount + else: + accumulated_depreciation = flt(self.opening_accumulated_depreciation) value_after_depreciation = flt( self.get("finance_books")[cint(d.finance_book_id) - 1].value_after_depreciation ) @@ -1296,11 +1317,14 @@ def get_depreciation_amount( schedule_idx=0, prev_depreciation_amount=0, has_wdv_or_dd_non_yearly_pro_rata=False, + number_of_pending_depreciations=0, ): frappe.flags.company = asset.company if fb_row.depreciation_method in ("Straight Line", "Manual"): - return get_straight_line_or_manual_depr_amount(asset, fb_row, schedule_idx) + return get_straight_line_or_manual_depr_amount( + asset, fb_row, schedule_idx, number_of_pending_depreciations + ) else: rate_of_depreciation = get_updated_rate_of_depreciation_for_wdv_and_dd( asset, depreciable_value, fb_row @@ -1320,7 +1344,9 @@ def get_updated_rate_of_depreciation_for_wdv_and_dd(asset, depreciable_value, fb return fb_row.rate_of_depreciation -def get_straight_line_or_manual_depr_amount(asset, row, schedule_idx): +def get_straight_line_or_manual_depr_amount( + asset, row, schedule_idx, number_of_pending_depreciations +): # if the Depreciation Schedule is being modified after Asset Repair due to increase in asset life and value if asset.flags.increase_in_asset_life: return (flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life)) / ( @@ -1331,6 +1357,36 @@ def get_straight_line_or_manual_depr_amount(asset, row, schedule_idx): return (flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life)) / flt( row.total_number_of_depreciations ) + # if the Depreciation Schedule is being modified after Asset Value Adjustment due to decrease in asset value + elif asset.flags.decrease_in_asset_value_due_to_value_adjustment: + if row.daily_depreciation: + daily_depr_amount = ( + flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) + ) / date_diff( + add_months( + row.depreciation_start_date, + flt(row.total_number_of_depreciations - asset.number_of_depreciations_booked) + * row.frequency_of_depreciation, + ), + add_months( + row.depreciation_start_date, + flt( + row.total_number_of_depreciations + - asset.number_of_depreciations_booked + - number_of_pending_depreciations + ) + * row.frequency_of_depreciation, + ), + ) + to_date = add_months(row.depreciation_start_date, schedule_idx * row.frequency_of_depreciation) + from_date = add_months( + row.depreciation_start_date, (schedule_idx - 1) * row.frequency_of_depreciation + ) + return daily_depr_amount * date_diff(to_date, from_date) + else: + return ( + flt(row.value_after_depreciation) - flt(row.expected_value_after_useful_life) + ) / number_of_pending_depreciations # if the Depreciation Schedule is being prepared for the first time else: if row.daily_depreciation: 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 9928b2f5f383..de8d47b7aee7 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -5,15 +5,12 @@ import frappe from frappe import _ from frappe.model.document import Document -from frappe.utils import cint, date_diff, flt, formatdate, getdate +from frappe.utils import flt, formatdate, getdate from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( get_checks_for_pl_and_bs_accounts, ) -from erpnext.assets.doctype.asset.asset import ( - get_asset_value_after_depreciation, - get_depreciation_amount, -) +from erpnext.assets.doctype.asset.asset import get_asset_value_after_depreciation from erpnext.assets.doctype.asset.depreciation import get_depreciation_accounts @@ -108,42 +105,47 @@ def make_depreciation_entry(self): def reschedule_depreciations(self, asset_value): asset = frappe.get_doc("Asset", self.asset) - country = frappe.get_value("Company", self.company, "country") - - for d in asset.finance_books: - d.value_after_depreciation = asset_value - - if d.depreciation_method in ("Straight Line", "Manual"): - end_date = max(s.schedule_date for s in asset.schedules if cint(s.finance_book_id) == d.idx) - total_days = date_diff(end_date, self.date) - rate_per_day = flt(d.value_after_depreciation - d.expected_value_after_useful_life) / flt( - total_days - ) - from_date = self.date - else: - no_of_depreciations = len( - [ - s.name for s in asset.schedules if (cint(s.finance_book_id) == d.idx and not s.journal_entry) - ] - ) - value_after_depreciation = d.value_after_depreciation - for data in asset.schedules: - if cint(data.finance_book_id) == d.idx and not data.journal_entry: - if d.depreciation_method in ("Straight Line", "Manual"): - days = date_diff(data.schedule_date, from_date) - depreciation_amount = days * rate_per_day - from_date = data.schedule_date - else: - depreciation_amount = get_depreciation_amount(asset, value_after_depreciation, d) - - if depreciation_amount: - value_after_depreciation -= flt(depreciation_amount) - data.depreciation_amount = depreciation_amount - - d.db_update() - - asset.set_accumulated_depreciation(ignore_booked_entry=True) - for asset_data in asset.schedules: - if not asset_data.journal_entry: - asset_data.db_update() + asset.flags.decrease_in_asset_value_due_to_value_adjustment = True + + asset.prepare_depreciation_data(value_after_depreciation=asset_value, ignore_booked_entry=True) + asset.flags.ignore_validate_update_after_submit = True + asset.save() + + # for d in asset.finance_books: + # d.value_after_depreciation = asset_value + + # if d.depreciation_method in ("Straight Line", "Manual"): + # end_date = max(s.schedule_date for s in asset.schedules if cint(s.finance_book_id) == d.idx) + # total_days = date_diff(end_date, self.date) + # rate_per_day = flt(d.value_after_depreciation - d.expected_value_after_useful_life) / flt( + # total_days + # ) + # from_date = self.date + # else: + # no_of_depreciations = len( + # [ + # s.name for s in asset.schedules if (cint(s.finance_book_id) == d.idx and not s.journal_entry) + # ] + # ) + + # value_after_depreciation = d.value_after_depreciation + # for data in asset.schedules: + # if cint(data.finance_book_id) == d.idx and not data.journal_entry: + # if d.depreciation_method in ("Straight Line", "Manual"): + # days = date_diff(data.schedule_date, from_date) + # depreciation_amount = days * rate_per_day + # from_date = data.schedule_date + # else: + # depreciation_amount = get_depreciation_amount(asset, value_after_depreciation, d) + + # if depreciation_amount: + # value_after_depreciation -= flt(depreciation_amount) + # data.depreciation_amount = depreciation_amount + + # d.db_update() + + # asset.set_accumulated_depreciation(ignore_booked_entry=True) + # for asset_data in asset.schedules: + # if not asset_data.journal_entry: + # asset_data.db_update() From 4d9e3d0f2481b6a64e8755db9b5e55ee8ed474e3 Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Sat, 19 Aug 2023 23:43:27 +0530 Subject: [PATCH 2/7] chore: remove unnecessary commented code --- .../asset_value_adjustment.py | 38 ------------------- 1 file changed, 38 deletions(-) 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 de8d47b7aee7..8b860245be4d 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -111,41 +111,3 @@ def reschedule_depreciations(self, asset_value): asset.prepare_depreciation_data(value_after_depreciation=asset_value, ignore_booked_entry=True) asset.flags.ignore_validate_update_after_submit = True asset.save() - - # for d in asset.finance_books: - # d.value_after_depreciation = asset_value - - # if d.depreciation_method in ("Straight Line", "Manual"): - # end_date = max(s.schedule_date for s in asset.schedules if cint(s.finance_book_id) == d.idx) - # total_days = date_diff(end_date, self.date) - # rate_per_day = flt(d.value_after_depreciation - d.expected_value_after_useful_life) / flt( - # total_days - # ) - # from_date = self.date - # else: - # no_of_depreciations = len( - # [ - # s.name for s in asset.schedules if (cint(s.finance_book_id) == d.idx and not s.journal_entry) - # ] - # ) - - # value_after_depreciation = d.value_after_depreciation - # for data in asset.schedules: - # if cint(data.finance_book_id) == d.idx and not data.journal_entry: - # if d.depreciation_method in ("Straight Line", "Manual"): - # days = date_diff(data.schedule_date, from_date) - # depreciation_amount = days * rate_per_day - # from_date = data.schedule_date - # else: - # depreciation_amount = get_depreciation_amount(asset, value_after_depreciation, d) - - # if depreciation_amount: - # value_after_depreciation -= flt(depreciation_amount) - # data.depreciation_amount = depreciation_amount - - # d.db_update() - - # asset.set_accumulated_depreciation(ignore_booked_entry=True) - # for asset_data in asset.schedules: - # if not asset_data.journal_entry: - # asset_data.db_update() From 295843377b31dd7cec6ef75df82ec161c158b02d Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Mon, 21 Aug 2023 14:53:14 +0530 Subject: [PATCH 3/7] test: check schedules in test --- .../asset_value_adjustment.py | 4 ++++ .../test_asset_value_adjustment.py | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) 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 8b860245be4d..e2daa16dc1b4 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -68,12 +68,16 @@ def make_depreciation_entry(self): "account": accumulated_depreciation_account, "credit_in_account_currency": self.difference_amount, "cost_center": depreciation_cost_center or self.cost_center, + "reference_type": "Asset", + "reference_name": asset.name, } debit_entry = { "account": depreciation_expense_account, "debit_in_account_currency": self.difference_amount, "cost_center": depreciation_cost_center or self.cost_center, + "reference_type": "Asset", + "reference_name": asset.name, } accounting_dimensions = get_checks_for_pl_and_bs_accounts() diff --git a/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py index b2aa3958080b..d90f6c6ef0bc 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py @@ -4,7 +4,7 @@ import unittest import frappe -from frappe.utils import add_days, get_last_day, nowdate +from frappe.utils import add_days, cstr, get_last_day, nowdate from erpnext.assets.doctype.asset.asset import get_asset_value_after_depreciation from erpnext.assets.doctype.asset.test_asset import create_asset_data @@ -91,6 +91,20 @@ def test_asset_depreciation_value_adjustment(self): self.assertSequenceEqual(gle, expected_gle) + expected_schedules = [ + ["2023-08-31", 1203.73, 1203.73], + ["2024-06-30", 33266.67, 34470.4], + ["2025-04-30", 33266.67, 67737.07], + ["2026-02-21", 32062.93, 99800.0], + ] + + schedules = [ + [cstr(d.schedule_date), d.depreciation_amount, d.accumulated_depreciation_amount] + for d in asset_doc.get("schedules") + ] + + self.assertEqual(schedules, expected_schedules) + def make_asset_value_adjustment(**args): args = frappe._dict(args) From 088f4596dd395fb5a1f00ba4ad125585bc65d17d Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Mon, 21 Aug 2023 15:17:02 +0530 Subject: [PATCH 4/7] test: improving the test --- .../test_asset_value_adjustment.py | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py index d90f6c6ef0bc..977a9b3714be 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/test_asset_value_adjustment.py @@ -4,9 +4,10 @@ import unittest import frappe -from frappe.utils import add_days, cstr, get_last_day, nowdate +from frappe.utils import add_days, cstr, get_last_day, getdate, nowdate from erpnext.assets.doctype.asset.asset import get_asset_value_after_depreciation +from erpnext.assets.doctype.asset.depreciation import post_depreciation_entries from erpnext.assets.doctype.asset.test_asset import create_asset_data from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt @@ -46,40 +47,44 @@ def test_current_asset_value(self): def test_asset_depreciation_value_adjustment(self): pr = make_purchase_receipt( - item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location" + item_code="Macbook Pro", qty=1, rate=120000.0, location="Test Location" ) asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name") asset_doc = frappe.get_doc("Asset", asset_name) asset_doc.calculate_depreciation = 1 - month_end_date = get_last_day(nowdate()) - purchase_date = nowdate() if nowdate() != month_end_date else add_days(nowdate(), -15) - - asset_doc.available_for_use_date = purchase_date - asset_doc.purchase_date = purchase_date + asset_doc.available_for_use_date = "2023-01-15" + asset_doc.purchase_date = "2023-01-15" asset_doc.calculate_depreciation = 1 asset_doc.append( "finance_books", { "expected_value_after_useful_life": 200, "depreciation_method": "Straight Line", - "total_number_of_depreciations": 3, - "frequency_of_depreciation": 10, - "depreciation_start_date": month_end_date, + "total_number_of_depreciations": 12, + "frequency_of_depreciation": 1, + "depreciation_start_date": "2023-01-31", }, ) asset_doc.submit() + post_depreciation_entries(getdate("2023-08-21")) + current_value = get_asset_value_after_depreciation(asset_doc.name) adj_doc = make_asset_value_adjustment( - asset=asset_doc.name, current_asset_value=current_value, new_asset_value=50000.0 + asset=asset_doc.name, + current_asset_value=current_value, + new_asset_value=50000.0, + date="2023-08-21", ) adj_doc.submit() + asset_doc.reload() + expected_gle = ( - ("_Test Accumulated Depreciations - _TC", 0.0, 50000.0), - ("_Test Depreciations - _TC", 50000.0, 0.0), + ("_Test Accumulated Depreciations - _TC", 0.0, 4625.29), + ("_Test Depreciations - _TC", 4625.29, 0.0), ) gle = frappe.db.sql( @@ -92,10 +97,19 @@ def test_asset_depreciation_value_adjustment(self): self.assertSequenceEqual(gle, expected_gle) expected_schedules = [ - ["2023-08-31", 1203.73, 1203.73], - ["2024-06-30", 33266.67, 34470.4], - ["2025-04-30", 33266.67, 67737.07], - ["2026-02-21", 32062.93, 99800.0], + ["2023-01-31", 5474.73, 5474.73], + ["2023-02-28", 9983.33, 15458.06], + ["2023-03-31", 9983.33, 25441.39], + ["2023-04-30", 9983.33, 35424.72], + ["2023-05-31", 9983.33, 45408.05], + ["2023-06-30", 9983.33, 55391.38], + ["2023-07-31", 9983.33, 65374.71], + ["2023-08-31", 8300.0, 73674.71], + ["2023-09-30", 8300.0, 81974.71], + ["2023-10-31", 8300.0, 90274.71], + ["2023-11-30", 8300.0, 98574.71], + ["2023-12-31", 8300.0, 106874.71], + ["2024-01-15", 8300.0, 115174.71], ] schedules = [ From 9085211bd103f1b85fa847fe65c4fa074f3a5cab Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Mon, 21 Aug 2023 17:42:37 +0530 Subject: [PATCH 5/7] chore: better function name --- .../asset_value_adjustment/asset_value_adjustment.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 e2daa16dc1b4..29e7a9bdfd6c 100644 --- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py +++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py @@ -22,10 +22,10 @@ def validate(self): def on_submit(self): self.make_depreciation_entry() - self.reschedule_depreciations(self.new_asset_value) + self.update_asset(self.new_asset_value) def on_cancel(self): - self.reschedule_depreciations(self.current_asset_value) + self.update_asset(self.current_asset_value) def validate_date(self): asset_purchase_date = frappe.db.get_value("Asset", self.asset, "purchase_date") @@ -107,7 +107,7 @@ def make_depreciation_entry(self): self.db_set("journal_entry", je.name) - def reschedule_depreciations(self, asset_value): + def update_asset(self, asset_value): asset = frappe.get_doc("Asset", self.asset) asset.flags.decrease_in_asset_value_due_to_value_adjustment = True From d98b43c3c0c56b3b0e2a2d57f6bec80651233c0b Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Mon, 21 Aug 2023 19:00:33 +0530 Subject: [PATCH 6/7] chore: use None instead of 0 for default value after depr --- erpnext/assets/doctype/asset/asset.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 8438b01d01c7..be09283e31ba 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -85,7 +85,7 @@ def prepare_depreciation_data( self, date_of_disposal=None, date_of_return=None, - value_after_depreciation=0, + value_after_depreciation=None, ignore_booked_entry=False, ): if self.calculate_depreciation: @@ -291,10 +291,10 @@ def make_asset_movement(self): def set_depreciation_rate(self): for d in self.get("finance_books"): d.rate_of_depreciation = flt( - self.get_depreciation_rate(d, on_validate=True), d.precision("rate_of_depreciation") + self.get_depreciation_rate(d, on_validate=True), d.precisionc("rate_of_depreciation") ) - def make_depreciation_schedule(self, date_of_disposal, value_after_depreciation=0): + def make_depreciation_schedule(self, date_of_disposal, value_after_depreciation=None): if not self.get("schedules"): self.schedules = [] @@ -312,7 +312,7 @@ def make_depreciation_schedule(self, date_of_disposal, value_after_depreciation= self.sort_depreciation_schedule() def _make_depreciation_schedule( - self, finance_book, start, date_of_disposal, value_after_depreciation=0 + self, finance_book, start, date_of_disposal, value_after_depreciation=None ): self.validate_asset_finance_books(finance_book) From dbe8c757d5fdf096a97a9d4ccaeae665af5436de Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Mon, 21 Aug 2023 19:01:15 +0530 Subject: [PATCH 7/7] chore: typo --- erpnext/assets/doctype/asset/asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index be09283e31ba..34d5430210c5 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -291,7 +291,7 @@ def make_asset_movement(self): def set_depreciation_rate(self): for d in self.get("finance_books"): d.rate_of_depreciation = flt( - self.get_depreciation_rate(d, on_validate=True), d.precisionc("rate_of_depreciation") + self.get_depreciation_rate(d, on_validate=True), d.precision("rate_of_depreciation") ) def make_depreciation_schedule(self, date_of_disposal, value_after_depreciation=None):