From f35b19eac3db13bb7a29ea8d6b2cbb0f03de1001 Mon Sep 17 00:00:00 2001 From: anandbaburajan Date: Thu, 24 Nov 2022 15:33:21 +0530 Subject: [PATCH] chore: renaming functions and variables again, and continuing refactoring AssetValueAdjustment --- erpnext/assets/doctype/asset/asset.py | 33 ++++---- erpnext/assets/doctype/asset/depreciation.py | 10 +-- erpnext/assets/doctype/asset/test_asset.py | 16 ++-- .../asset_depreciation_schedule.py | 76 ++++++++++--------- .../doctype/asset_repair/asset_repair.py | 12 ++- .../asset_value_adjustment.py | 34 ++++++--- 6 files changed, 99 insertions(+), 82 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index e3e8a132c72..39557849ec5 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -29,11 +29,12 @@ from erpnext.assets.doctype.asset.depreciation import ( ) from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( - cancel_asset_depreciation_schedules, - convert_draft_asset_depreciation_schedules_into_active, - get_asset_depreciation_schedule, - make_draft_asset_depreciation_schedules, - update_draft_asset_depreciation_schedules, + cancel_asset_depr_schedules, + convert_draft_asset_depr_schedules_into_active, + get_asset_depr_schedule, + get_depr_schedule_from_asset_depr_schedule_of_asset, + make_draft_asset_depr_schedules, + update_draft_asset_depr_schedules, ) from erpnext.controllers.accounts_controller import AccountsController @@ -47,7 +48,7 @@ class Asset(AccountsController): self.set_missing_values() if not self.split_from: self.prepare_depreciation_data() - update_draft_asset_depreciation_schedules(self) + update_draft_asset_depr_schedules(self) self.validate_gross_and_purchase_amount() self.validate_expected_value_after_useful_life() @@ -59,13 +60,13 @@ class Asset(AccountsController): self.make_asset_movement() if not self.booked_fixed_asset and self.validate_make_gl_entry(): self.make_gl_entries() - convert_draft_asset_depreciation_schedules_into_active(self) + convert_draft_asset_depr_schedules_into_active(self) def on_cancel(self): self.validate_cancellation() self.cancel_movement_entries() self.delete_depreciation_entries() - cancel_asset_depreciation_schedules(self) + cancel_asset_depr_schedules(self) self.set_status() self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") make_reverse_gl_entries(voucher_type="Asset", voucher_no=self.name) @@ -73,7 +74,7 @@ class Asset(AccountsController): def after_insert(self): if not self.split_from: - make_draft_asset_depreciation_schedules(self) + make_draft_asset_depr_schedules(self) def validate_asset_and_reference(self): if self.purchase_invoice or self.purchase_receipt: @@ -246,7 +247,7 @@ class Asset(AccountsController): return value_after_depreciation def get_from_date(self, finance_book): - asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book) + asset_depr_schedule = get_asset_depr_schedule(self.name, finance_book) if not asset_depr_schedule: return self.available_for_use_date @@ -357,18 +358,16 @@ class Asset(AccountsController): return depreciation_amount_for_last_row def get_depreciation_amount_for_first_row(self, finance_book): - asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book) - - asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule) - - return asset_depr_schedule_doc.get("depreciation_schedule")[0].depreciation_amount + return get_depr_schedule_from_asset_depr_schedule_of_asset(self.name, finance_book)[ + 0 + ].depreciation_amount def get_value_after_depreciation(self, idx): return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation) def validate_expected_value_after_useful_life(self): for row in self.get("finance_books"): - asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book) + asset_depr_schedule = get_asset_depr_schedule(self.name, row.finance_book) if not asset_depr_schedule: return @@ -426,7 +425,7 @@ class Asset(AccountsController): def delete_depreciation_entries(self): for row in self.get("finance_books"): - asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book) + asset_depr_schedule = get_asset_depr_schedule(self.name, row.finance_book) if not asset_depr_schedule: return diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py index 664838dee67..39ebc8d6647 100644 --- a/erpnext/assets/doctype/asset/depreciation.py +++ b/erpnext/assets/doctype/asset/depreciation.py @@ -11,7 +11,7 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( ) from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( - get_temp_asset_depreciation_schedule_doc, + get_temp_asset_depr_schedule_doc, ) @@ -514,13 +514,13 @@ def get_value_after_depreciation_on_disposal_date(asset, disposal_date, finance_ row = asset_doc.finance_books[idx - 1] - temp_asset_depreciation_schedule = get_temp_asset_depreciation_schedule_doc( + temp_asset_depreciation_schedule = get_temp_asset_depr_schedule_doc( asset_doc, row, getdate(disposal_date) ) - depr_schedule = temp_asset_depreciation_schedule.get("depreciation_schedule") - - accumulated_depr_amount = depr_schedule[-1].accumulated_depreciation_amount + accumulated_depr_amount = temp_asset_depreciation_schedule.get("depreciation_schedule")[ + -1 + ].accumulated_depreciation_amount return flt( flt(asset_doc.gross_purchase_amount) - accumulated_depr_amount, diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py index e25d890ad06..5ef81238af3 100644 --- a/erpnext/assets/doctype/asset/test_asset.py +++ b/erpnext/assets/doctype/asset/test_asset.py @@ -882,7 +882,7 @@ class TestDepreciationBasics(AssetSetup): """Tests if get_depreciation_amount() returns the right value.""" from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( - get_depreciation_amount + get_depreciation_amount, ) asset = create_asset(item_code="Macbook Pro", available_for_use_date="2019-12-31") @@ -902,8 +902,8 @@ class TestDepreciationBasics(AssetSetup): depreciation_amount = get_depreciation_amount(asset, 100000, asset.finance_books[0]) self.assertEqual(depreciation_amount, 30000) - def test_make_depreciation_schedule(self): - """Tests if make_depreciation_schedule() returns the right values.""" + def test_make_depr_schedule(self): + """Tests if make_depr_schedule() returns the right values.""" asset = create_asset( item_code="Macbook Pro", @@ -1194,8 +1194,8 @@ class TestDepreciationBasics(AssetSetup): depr_expense_account.parent_account = "Expenses - _TC" depr_expense_account.save() - def test_clear_depreciation_schedule(self): - """Tests if clear_depreciation_schedule() works as expected.""" + def test_clear_depr_schedule(self): + """Tests if clear_depr_schedule() works as expected.""" asset = create_asset( item_code="Macbook Pro", @@ -1211,11 +1211,11 @@ class TestDepreciationBasics(AssetSetup): post_depreciation_entries(date="2021-06-01") asset.load_from_db() - asset.clear_depreciation_schedule() + asset.clear_depr_schedule() self.assertEqual(len(asset.schedules), 1) - def test_clear_depreciation_schedule_for_multiple_finance_books(self): + def test_clear_depr_schedule_for_multiple_finance_books(self): asset = create_asset(item_code="Macbook Pro", available_for_use_date="2019-12-31", do_not_save=1) asset.calculate_depreciation = 1 @@ -1254,7 +1254,7 @@ class TestDepreciationBasics(AssetSetup): post_depreciation_entries(date="2020-04-01") asset.load_from_db() - asset.clear_depreciation_schedule() + asset.clear_depr_schedule() self.assertEqual(len(asset.schedules), 6) 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 144b94dfbca..43f7b4adf79 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py @@ -20,46 +20,44 @@ class AssetDepreciationSchedule(Document): pass -def make_draft_asset_depreciation_schedules(asset_doc, date_of_disposal=None, date_of_return=None): +def make_draft_asset_depr_schedules(asset_doc, date_of_disposal=None, date_of_return=None): for row in asset_doc.get("finance_books"): asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule") - prepare_draft_asset_depreciation_schedule_data( + prepare_draft_asset_depr_schedule_data( asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return ) asset_depr_schedule_doc.insert() -def update_draft_asset_depreciation_schedules( - asset_doc, date_of_disposal=None, date_of_return=None -): +def update_draft_asset_depr_schedules(asset_doc, date_of_disposal=None, date_of_return=None): for row in asset_doc.get("finance_books"): - asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book) + asset_depr_schedule = get_asset_depr_schedule(asset_doc.name, row.finance_book) if not asset_depr_schedule: return asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule) - prepare_draft_asset_depreciation_schedule_data( + prepare_draft_asset_depr_schedule_data( asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return ) asset_depr_schedule_doc.save() -def prepare_draft_asset_depreciation_schedule_data( +def prepare_draft_asset_depr_schedule_data( asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return ): - set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset_doc.name, row) - make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal) + set_draft_asset_depr_schedule_details(asset_depr_schedule_doc, asset_doc.name, row) + make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal) set_accumulated_depreciation( asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return ) -def set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset, row): +def set_draft_asset_depr_schedule_details(asset_depr_schedule_doc, asset, row): asset_depr_schedule_doc.asset = asset asset_depr_schedule_doc.finance_book = row.finance_book asset_depr_schedule_doc.depreciation_method = row.depreciation_method @@ -70,9 +68,9 @@ def set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset asset_depr_schedule_doc.status = "Draft" -def convert_draft_asset_depreciation_schedules_into_active(asset_doc): +def convert_draft_asset_depr_schedules_into_active(asset_doc): for row in asset_doc.get("finance_books"): - asset_depr_schedule_name = get_asset_depreciation_schedule(asset_doc.name, row.finance_book) + asset_depr_schedule_name = get_asset_depr_schedule(asset_doc.name, row.finance_book) if not asset_depr_schedule_name: return @@ -84,48 +82,48 @@ def convert_draft_asset_depreciation_schedules_into_active(asset_doc): asset_depr_schedule.submit() -def make_new_active_asset_depreciation_schedules_and_cancel_old_ones( +def make_new_active_asset_depr_schedules_and_cancel_current_ones( asset_doc, date_of_disposal=None, date_of_return=None, notes=None ): for row in asset_doc.get("finance_books"): - old_asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book) + current_asset_depr_schedule = get_asset_depr_schedule(asset_doc.name, row.finance_book) - if not old_asset_depr_schedule: + if not current_asset_depr_schedule: return - old_asset_depr_schedule_doc = frappe.get_doc( - "Asset Depreciation Schedule", old_asset_depr_schedule + current_asset_depr_schedule_doc = frappe.get_doc( + "Asset Depreciation Schedule", current_asset_depr_schedule ) - asset_depr_schedule_doc = frappe.copy_doc(old_asset_depr_schedule_doc, ignore_no_copy=False) + new_asset_depr_schedule_doc = frappe.copy_doc( + current_asset_depr_schedule_doc, ignore_no_copy=False + ) - old_asset_depr_schedule.cancel() + current_asset_depr_schedule_doc.cancel() - make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal) + make_depr_schedule(new_asset_depr_schedule_doc, asset_doc, row, date_of_disposal) set_accumulated_depreciation( - asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return + new_asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return ) - asset_depr_schedule_doc.notes = notes + new_asset_depr_schedule_doc.notes = notes - asset_depr_schedule_doc.submit() + new_asset_depr_schedule_doc.submit() -def get_temp_asset_depreciation_schedule_doc( - asset_doc, row, date_of_disposal=None, date_of_return=None -): +def get_temp_asset_depr_schedule_doc(asset_doc, row, date_of_disposal=None, date_of_return=None): asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule") - prepare_draft_asset_depreciation_schedule_data( + prepare_draft_asset_depr_schedule_data( asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return ) return asset_depr_schedule_doc -def cancel_asset_depreciation_schedules(asset_doc): +def cancel_asset_depr_schedules(asset_doc): for row in asset_doc.get("finance_books"): - asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book) + asset_depr_schedule = get_asset_depr_schedule(asset_doc.name, row.finance_book) if not asset_depr_schedule: return @@ -135,7 +133,7 @@ def cancel_asset_depreciation_schedules(asset_doc): asset_depr_schedule_doc.cancel() -def get_asset_depreciation_schedule(asset, finance_book): +def get_asset_depr_schedule(asset, finance_book): return frappe.db.get_value( doctype="Asset Depreciation Schedule", filters=[ @@ -146,7 +144,13 @@ def get_asset_depreciation_schedule(asset, finance_book): ) -def make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal): +def get_depr_schedule_from_asset_depr_schedule_of_asset(asset, finance_book): + asset_depr_schedule = get_asset_depr_schedule(asset, finance_book) + asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule) + return asset_depr_schedule_doc.get("depreciation_schedule") + + +def make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal): if row.depreciation_method != "Manual" and not asset_depr_schedule_doc.get( "depreciation_schedule" ): @@ -155,12 +159,12 @@ def make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_ if not asset_doc.available_for_use_date: return - start = clear_depreciation_schedule(asset_depr_schedule_doc) + start = clear_depr_schedule(asset_depr_schedule_doc) - _make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal) + _make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal) -def clear_depreciation_schedule(asset_depr_schedule_doc): +def clear_depr_schedule(asset_depr_schedule_doc): start = [] num_of_depreciations_completed = 0 depr_schedule = [] @@ -189,7 +193,7 @@ def clear_depreciation_schedule(asset_depr_schedule_doc): return start -def _make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal): +def _make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal): asset_doc.validate_asset_finance_books(row) value_after_depreciation = asset_doc._get_value_after_depreciation(row) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py index ca6225f94ea..962e7fb58d9 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.py +++ b/erpnext/assets/doctype/asset_repair/asset_repair.py @@ -9,7 +9,7 @@ import erpnext from erpnext.accounts.general_ledger import make_gl_entries from erpnext.assets.doctype.asset.asset import get_asset_account from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( - get_asset_depreciation_schedule, + get_depr_schedule_from_asset_depr_schedule_of_asset, ) from erpnext.controllers.accounts_controller import AccountsController @@ -282,11 +282,10 @@ class AssetRepair(AccountsController): asset.number_of_depreciations_booked ) - asset_depr_schedule = get_asset_depreciation_schedule(asset.name, row.finance_book) - depr_schedule = asset_depr_schedule.get("depreciation_schedule") + depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(asset.name, row.finance_book) # the Schedule Date in the final row of the old Depreciation Schedule - last_schedule_date = asset_depr_schedule[len(asset_depr_schedule) - 1].schedule_date + last_schedule_date = depr_schedule[len(depr_schedule) - 1].schedule_date # the Schedule Date in the final row of the new Depreciation Schedule asset.to_date = add_months(last_schedule_date, extra_months) @@ -316,11 +315,10 @@ class AssetRepair(AccountsController): asset.number_of_depreciations_booked ) - asset_depr_schedule = get_asset_depreciation_schedule(asset.name, row.finance_book) - depr_schedule = asset_depr_schedule.get("depreciation_schedule") + depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(asset.name, row.finance_book) # the Schedule Date in the final row of the modified Depreciation Schedule - last_schedule_date = asset_depr_schedule[len(asset_depr_schedule) - 1].schedule_date + last_schedule_date = depr_schedule[len(depr_schedule) - 1].schedule_date # the Schedule Date in the final row of the original Depreciation Schedule asset.to_date = add_months(last_schedule_date, -extra_months) 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 e61c8f7e835..bba61e646e1 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,16 @@ 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 date_diff, flt, formatdate, getdate from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( get_checks_for_pl_and_bs_accounts, ) from erpnext.assets.doctype.asset.depreciation import get_depreciation_accounts from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( - get_asset_depreciation_schedule, + get_asset_depr_schedule, get_depreciation_amount, + set_accumulated_depreciation, ) @@ -115,8 +116,17 @@ class AssetValueAdjustment(Document): for d in asset.finance_books: d.value_after_depreciation = asset_value - asset_depr_schedule = get_asset_depreciation_schedule(asset.name, d.finance_book) - depr_schedule = asset_depr_schedule.get("depreciation_schedule") + current_asset_depr_schedule = get_asset_depr_schedule(asset.name, d.finance_book) + + current_asset_depr_schedule_doc = frappe.get_doc( + "Asset Depreciation Schedule", current_asset_depr_schedule + ) + + new_asset_depr_schedule_doc = frappe.copy_doc( + current_asset_depr_schedule_doc, ignore_no_copy=False + ) + + depr_schedule = new_asset_depr_schedule_doc.get("depreciation_schedule") if d.depreciation_method in ("Straight Line", "Manual"): end_date = max(s.schedule_date for s in depr_schedule) @@ -128,7 +138,7 @@ class AssetValueAdjustment(Document): value_after_depreciation = d.value_after_depreciation for data in depr_schedule: - if cint(data.finance_book_id) == d.idx and not data.journal_entry: + if 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 @@ -142,10 +152,16 @@ class AssetValueAdjustment(Document): 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() + set_accumulated_depreciation(new_asset_depr_schedule_doc, asset, d, ignore_booked_entry=True) + for asset_data in depr_schedule: + if not asset_data.journal_entry: + asset_data.db_update() + + current_asset_depr_schedule_doc.cancel() + + new_asset_depr_schedule_doc.notes = "Asset value adjustment" + + new_asset_depr_schedule_doc.submit() @frappe.whitelist()