fix: Depreciate Asset before generating GL Entries on sale (#30759)

This commit is contained in:
Ganga Manoj
2022-06-08 09:35:43 +05:30
committed by GitHub
parent e69bff0caa
commit dfbfe403e9
2 changed files with 21 additions and 17 deletions

View File

@@ -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(

View File

@@ -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):