mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-18 17:15:04 +00:00
fix: Depreciate Asset before generating GL Entries on sale (#30759)
This commit is contained in:
@@ -1113,24 +1113,24 @@ class SalesInvoice(SellingController):
|
|||||||
asset = self.get_asset(item)
|
asset = self.get_asset(item)
|
||||||
|
|
||||||
if self.is_return:
|
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(
|
fixed_asset_gl_entries = get_gl_entries_on_asset_regain(
|
||||||
asset, item.base_net_amount, item.finance_book
|
asset, item.base_net_amount, item.finance_book
|
||||||
)
|
)
|
||||||
asset.db_set("disposal_date", None)
|
asset.db_set("disposal_date", None)
|
||||||
|
|
||||||
if asset.calculate_depreciation:
|
|
||||||
self.reverse_depreciation_entry_made_after_sale(asset)
|
|
||||||
self.reset_depreciation_schedule(asset)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
if asset.calculate_depreciation:
|
||||||
|
self.depreciate_asset(asset)
|
||||||
|
|
||||||
fixed_asset_gl_entries = get_gl_entries_on_asset_disposal(
|
fixed_asset_gl_entries = get_gl_entries_on_asset_disposal(
|
||||||
asset, item.base_net_amount, item.finance_book
|
asset, item.base_net_amount, item.finance_book
|
||||||
)
|
)
|
||||||
asset.db_set("disposal_date", self.posting_date)
|
asset.db_set("disposal_date", self.posting_date)
|
||||||
|
|
||||||
if asset.calculate_depreciation:
|
|
||||||
self.depreciate_asset(asset)
|
|
||||||
|
|
||||||
for gle in fixed_asset_gl_entries:
|
for gle in fixed_asset_gl_entries:
|
||||||
gle["against"] = self.customer
|
gle["against"] = self.customer
|
||||||
gl_entries.append(self.get_gl_dict(gle, item=item))
|
gl_entries.append(self.get_gl_dict(gle, item=item))
|
||||||
@@ -1198,6 +1198,7 @@ class SalesInvoice(SellingController):
|
|||||||
asset.save()
|
asset.save()
|
||||||
|
|
||||||
make_depreciation_entry(asset.name, self.posting_date)
|
make_depreciation_entry(asset.name, self.posting_date)
|
||||||
|
asset.load_from_db()
|
||||||
|
|
||||||
def reset_depreciation_schedule(self, asset):
|
def reset_depreciation_schedule(self, asset):
|
||||||
asset.flags.ignore_validate_update_after_submit = True
|
asset.flags.ignore_validate_update_after_submit = True
|
||||||
@@ -1207,6 +1208,7 @@ class SalesInvoice(SellingController):
|
|||||||
|
|
||||||
self.modify_depreciation_schedule_for_asset_repairs(asset)
|
self.modify_depreciation_schedule_for_asset_repairs(asset)
|
||||||
asset.save()
|
asset.save()
|
||||||
|
asset.load_from_db()
|
||||||
|
|
||||||
def modify_depreciation_schedule_for_asset_repairs(self, asset):
|
def modify_depreciation_schedule_for_asset_repairs(self, asset):
|
||||||
asset_repairs = frappe.get_all(
|
asset_repairs = frappe.get_all(
|
||||||
|
|||||||
@@ -193,31 +193,31 @@ class TestAsset(AssetSetup):
|
|||||||
def test_gle_made_by_asset_sale(self):
|
def test_gle_made_by_asset_sale(self):
|
||||||
asset = create_asset(
|
asset = create_asset(
|
||||||
calculate_depreciation=1,
|
calculate_depreciation=1,
|
||||||
available_for_use_date="2020-06-06",
|
available_for_use_date="2021-06-06",
|
||||||
purchase_date="2020-01-01",
|
purchase_date="2021-01-01",
|
||||||
expected_value_after_useful_life=10000,
|
expected_value_after_useful_life=10000,
|
||||||
total_number_of_depreciations=3,
|
total_number_of_depreciations=3,
|
||||||
frequency_of_depreciation=10,
|
frequency_of_depreciation=10,
|
||||||
depreciation_start_date="2020-12-31",
|
depreciation_start_date="2021-12-31",
|
||||||
submit=1,
|
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 = make_sales_invoice(asset=asset.name, item_code="Macbook Pro", company="_Test Company")
|
||||||
si.customer = "_Test Customer"
|
si.customer = "_Test Customer"
|
||||||
si.due_date = nowdate()
|
si.posting_date = getdate("2022-04-22")
|
||||||
si.get("items")[0].rate = 25000
|
si.due_date = getdate("2022-04-22")
|
||||||
si.insert()
|
si.get("items")[0].rate = 75000
|
||||||
si.submit()
|
si.submit()
|
||||||
|
|
||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold")
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold")
|
||||||
|
|
||||||
expected_gle = (
|
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 Fixed Asset - _TC", 0.0, 100000.0),
|
||||||
("_Test Gain/Loss on Asset Disposal - _TC", 54509.8, 0.0),
|
("_Test Gain/Loss on Asset Disposal - _TC", 0.0, 11082.31),
|
||||||
("Debtors - _TC", 25000.0, 0.0),
|
("Debtors - _TC", 75000.0, 0.0),
|
||||||
)
|
)
|
||||||
|
|
||||||
gle = frappe.db.sql(
|
gle = frappe.db.sql(
|
||||||
@@ -229,7 +229,9 @@ class TestAsset(AssetSetup):
|
|||||||
|
|
||||||
self.assertEqual(gle, expected_gle)
|
self.assertEqual(gle, expected_gle)
|
||||||
|
|
||||||
|
si.load_from_db()
|
||||||
si.cancel()
|
si.cancel()
|
||||||
|
|
||||||
self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Partially Depreciated")
|
self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Partially Depreciated")
|
||||||
|
|
||||||
def test_expense_head(self):
|
def test_expense_head(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user