From dfbfe403e97778ae425d611ad4942bbf724fbd96 Mon Sep 17 00:00:00 2001 From: Ganga Manoj Date: Wed, 8 Jun 2022 09:35:43 +0530 Subject: [PATCH] fix: Depreciate Asset before generating GL Entries on sale (#30759) --- .../doctype/sales_invoice/sales_invoice.py | 16 ++++++++------ erpnext/assets/doctype/asset/test_asset.py | 22 ++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index e39822e4036..954a8207780 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -1113,24 +1113,24 @@ class SalesInvoice(SellingController): asset = self.get_asset(item) if self.is_return: + if asset.calculate_depreciation: + self.reverse_depreciation_entry_made_after_sale(asset) + self.reset_depreciation_schedule(asset) + fixed_asset_gl_entries = get_gl_entries_on_asset_regain( asset, item.base_net_amount, item.finance_book ) asset.db_set("disposal_date", None) - if asset.calculate_depreciation: - self.reverse_depreciation_entry_made_after_sale(asset) - self.reset_depreciation_schedule(asset) - else: + if asset.calculate_depreciation: + self.depreciate_asset(asset) + fixed_asset_gl_entries = get_gl_entries_on_asset_disposal( asset, item.base_net_amount, item.finance_book ) asset.db_set("disposal_date", self.posting_date) - if asset.calculate_depreciation: - self.depreciate_asset(asset) - for gle in fixed_asset_gl_entries: gle["against"] = self.customer gl_entries.append(self.get_gl_dict(gle, item=item)) @@ -1198,6 +1198,7 @@ class SalesInvoice(SellingController): asset.save() make_depreciation_entry(asset.name, self.posting_date) + asset.load_from_db() def reset_depreciation_schedule(self, asset): asset.flags.ignore_validate_update_after_submit = True @@ -1207,6 +1208,7 @@ class SalesInvoice(SellingController): self.modify_depreciation_schedule_for_asset_repairs(asset) asset.save() + asset.load_from_db() def modify_depreciation_schedule_for_asset_repairs(self, asset): asset_repairs = frappe.get_all( diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py index 79455bb1b4e..25929a744af 100644 --- a/erpnext/assets/doctype/asset/test_asset.py +++ b/erpnext/assets/doctype/asset/test_asset.py @@ -193,31 +193,31 @@ class TestAsset(AssetSetup): def test_gle_made_by_asset_sale(self): asset = create_asset( calculate_depreciation=1, - available_for_use_date="2020-06-06", - purchase_date="2020-01-01", + available_for_use_date="2021-06-06", + purchase_date="2021-01-01", expected_value_after_useful_life=10000, total_number_of_depreciations=3, frequency_of_depreciation=10, - depreciation_start_date="2020-12-31", + depreciation_start_date="2021-12-31", submit=1, ) - post_depreciation_entries(date="2021-01-01") + post_depreciation_entries(date="2022-01-01") si = make_sales_invoice(asset=asset.name, item_code="Macbook Pro", company="_Test Company") si.customer = "_Test Customer" - si.due_date = nowdate() - si.get("items")[0].rate = 25000 - si.insert() + si.posting_date = getdate("2022-04-22") + si.due_date = getdate("2022-04-22") + si.get("items")[0].rate = 75000 si.submit() self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold") expected_gle = ( - ("_Test Accumulated Depreciations - _TC", 20490.2, 0.0), + ("_Test Accumulated Depreciations - _TC", 36082.31, 0.0), ("_Test Fixed Asset - _TC", 0.0, 100000.0), - ("_Test Gain/Loss on Asset Disposal - _TC", 54509.8, 0.0), - ("Debtors - _TC", 25000.0, 0.0), + ("_Test Gain/Loss on Asset Disposal - _TC", 0.0, 11082.31), + ("Debtors - _TC", 75000.0, 0.0), ) gle = frappe.db.sql( @@ -229,7 +229,9 @@ class TestAsset(AssetSetup): self.assertEqual(gle, expected_gle) + si.load_from_db() si.cancel() + self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Partially Depreciated") def test_expense_head(self):