fix: Make Depreciation Entry posting more flexible
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index ca10b1d..6591654 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -57,8 +57,10 @@
je.finance_book = d.finance_book
je.remark = "Depreciation Entry against {0} worth {1}".format(asset_name, d.depreciation_amount)
+ credit_account, debit_account = get_credit_and_debit_accounts(accumulated_depreciation_account, depreciation_expense_account)
+
credit_entry = {
- "account": accumulated_depreciation_account,
+ "account": credit_account,
"credit_in_account_currency": d.depreciation_amount,
"reference_type": "Asset",
"reference_name": asset.name,
@@ -66,7 +68,7 @@
}
debit_entry = {
- "account": depreciation_expense_account,
+ "account": debit_account,
"debit_in_account_currency": d.depreciation_amount,
"reference_type": "Asset",
"reference_name": asset.name,
@@ -132,6 +134,30 @@
return fixed_asset_account, accumulated_depreciation_account, depreciation_expense_account
+def get_credit_and_debit_accounts(accumulated_depreciation_account, depreciation_expense_account):
+ if is_income_or_expense_account(depreciation_expense_account) == "Expense":
+ credit_account = accumulated_depreciation_account
+ debit_account = depreciation_expense_account
+ else:
+ credit_account = depreciation_expense_account
+ debit_account = accumulated_depreciation_account
+
+ return credit_account, debit_account
+
+def is_income_or_expense_account(account):
+ from frappe.utils.nestedset import get_ancestors_of
+
+ ancestors = get_ancestors_of("Account", account)
+ if ancestors:
+ root_account = ancestors[-1].split(' - ')[0]
+
+ if root_account == "Expenses":
+ return "Expense"
+ elif root_account == "Income":
+ return "Income"
+
+ frappe.throw(_("Depreciation Expense Account should be an Income or Expense Account."))
+
@frappe.whitelist()
def scrap_asset(asset_name):
asset = frappe.get_doc("Asset", asset_name)