Merge pull request #18104 from rohitwaghchaure/incorrect_value_of_accumualated_depreciation_in_the_sales_invoice_develop
fix: incorrect value booked in the accumulated depreciation account on sell of the asset
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index e166fa2..d6cf5d8 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -768,7 +768,14 @@
if item.is_fixed_asset:
asset = frappe.get_doc("Asset", item.asset)
- fixed_asset_gl_entries = get_gl_entries_on_asset_disposal(asset, item.base_net_amount)
+ if (len(asset.finance_books) > 1 and not item.finance_book
+ and asset.finance_books[0].finance_book):
+ frappe.throw(_("Select finance book for the item {0} at row {1}")
+ .format(item.item_code, item.idx))
+
+ fixed_asset_gl_entries = get_gl_entries_on_asset_disposal(asset,
+ item.base_net_amount, item.finance_book)
+
for gle in fixed_asset_gl_entries:
gle["against"] = self.customer
gl_entries.append(self.get_gl_dict(gle))
diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
index d7eb8ed..465df27 100644
--- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
+++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
@@ -57,6 +57,7 @@
"income_account",
"is_fixed_asset",
"asset",
+ "finance_book",
"col_break4",
"expense_account",
"deferred_revenue",
@@ -770,11 +771,18 @@
{
"fieldname": "dimension_col_break",
"fieldtype": "Column Break"
+ },
+ {
+ "depends_on": "asset",
+ "fieldname": "finance_book",
+ "fieldtype": "Link",
+ "label": "Finance Book",
+ "options": "Finance Book"
}
],
"idx": 1,
"istable": 1,
- "modified": "2019-05-25 22:05:59.971263",
+ "modified": "2019-06-28 17:30:12.156086",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice Item",
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index 797075b..61108ec 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -36,7 +36,7 @@
fixed_asset_account, accumulated_depreciation_account, depreciation_expense_account = \
get_depreciation_accounts(asset)
- depreciation_cost_center, depreciation_series = frappe.get_cached_value('Company', asset.company,
+ depreciation_cost_center, depreciation_series = frappe.get_cached_value('Company', asset.company,
["depreciation_cost_center", "series_for_depreciation_entry"])
depreciation_cost_center = asset.cost_center or depreciation_cost_center
@@ -70,7 +70,7 @@
je.submit()
d.db_set("journal_entry", je.name)
-
+
idx = cint(d.finance_book_id)
finance_books = asset.get('finance_books')[idx - 1]
finance_books.value_after_depreciation -= d.depreciation_amount
@@ -88,15 +88,15 @@
fieldname = ['fixed_asset_account', 'accumulated_depreciation_account',
'depreciation_expense_account'], as_dict=1)
- if accounts:
+ if accounts:
fixed_asset_account = accounts.fixed_asset_account
accumulated_depreciation_account = accounts.accumulated_depreciation_account
depreciation_expense_account = accounts.depreciation_expense_account
-
+
if not accumulated_depreciation_account or not depreciation_expense_account:
- accounts = frappe.get_cached_value('Company', asset.company,
+ accounts = frappe.get_cached_value('Company', asset.company,
["accumulated_depreciation_account", "depreciation_expense_account"])
-
+
if not accumulated_depreciation_account:
accumulated_depreciation_account = accounts[0]
if not depreciation_expense_account:
@@ -135,11 +135,11 @@
je.flags.ignore_permissions = True
je.submit()
-
+
frappe.db.set_value("Asset", asset_name, "disposal_date", today())
frappe.db.set_value("Asset", asset_name, "journal_entry_for_scrap", je.name)
asset.set_status("Scrapped")
-
+
frappe.msgprint(_("Asset scrapped via Journal Entry {0}").format(je.name))
@frappe.whitelist()
@@ -147,21 +147,29 @@
asset = frappe.get_doc("Asset", asset_name)
je = asset.journal_entry_for_scrap
-
+
asset.db_set("disposal_date", None)
asset.db_set("journal_entry_for_scrap", None)
-
+
frappe.get_doc("Journal Entry", je).cancel()
asset.set_status()
@frappe.whitelist()
-def get_gl_entries_on_asset_disposal(asset, selling_amount=0):
+def get_gl_entries_on_asset_disposal(asset, selling_amount=0, finance_book=None):
fixed_asset_account, accumulated_depr_account, depr_expense_account = get_depreciation_accounts(asset)
disposal_account, depreciation_cost_center = get_disposal_account_and_cost_center(asset.company)
depreciation_cost_center = asset.cost_center or depreciation_cost_center
- accumulated_depr_amount = flt(asset.gross_purchase_amount) - flt(asset.value_after_depreciation)
+ idx = 1
+ if finance_book:
+ for d in asset.finance_books:
+ if d.finance_book == finance_book:
+ idx = d.idx
+ break
+
+ value_after_depreciation = asset.finance_books[idx - 1].value_after_depreciation
+ accumulated_depr_amount = flt(asset.gross_purchase_amount) - flt(value_after_depreciation)
gl_entries = [
{
@@ -176,7 +184,7 @@
}
]
- profit_amount = flt(selling_amount) - flt(asset.value_after_depreciation)
+ profit_amount = flt(selling_amount) - flt(value_after_depreciation)
if profit_amount:
debit_or_credit = "debit" if profit_amount < 0 else "credit"
gl_entries.append({
@@ -190,7 +198,7 @@
@frappe.whitelist()
def get_disposal_account_and_cost_center(company):
- disposal_account, depreciation_cost_center = frappe.get_cached_value('Company', company,
+ disposal_account, depreciation_cost_center = frappe.get_cached_value('Company', company,
["disposal_account", "depreciation_cost_center"])
if not disposal_account:
diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py
index ef85ffa..fceccfb 100644
--- a/erpnext/assets/doctype/asset/test_asset.py
+++ b/erpnext/assets/doctype/asset/test_asset.py
@@ -366,8 +366,9 @@
self.assertTrue(asset.journal_entry_for_scrap)
expected_gle = (
- ("_Test Accumulated Depreciations - _TC", 100000.0, 0.0),
- ("_Test Fixed Asset - _TC", 0.0, 100000.0)
+ ("_Test Accumulated Depreciations - _TC", 147.54, 0.0),
+ ("_Test Fixed Asset - _TC", 0.0, 100000.0),
+ ("_Test Gain/Loss on Asset Disposal - _TC", 99852.46, 0.0)
)
gle = frappe.db.sql("""select account, debit, credit from `tabGL Entry`
@@ -411,9 +412,9 @@
self.assertEqual(frappe.db.get_value("Asset", asset.name, "status"), "Sold")
expected_gle = (
- ("_Test Accumulated Depreciations - _TC", 100000.0, 0.0),
+ ("_Test Accumulated Depreciations - _TC", 23051.47, 0.0),
("_Test Fixed Asset - _TC", 0.0, 100000.0),
- ("_Test Gain/Loss on Asset Disposal - _TC", 0, 25000.0),
+ ("_Test Gain/Loss on Asset Disposal - _TC", 51948.53, 0.0),
("Debtors - _TC", 25000.0, 0.0)
)