[fix] Unable to create an asset due to rounding issue
diff --git a/erpnext/accounts/doctype/asset/asset.py b/erpnext/accounts/doctype/asset/asset.py
index aa2768b..070461e 100644
--- a/erpnext/accounts/doctype/asset/asset.py
+++ b/erpnext/accounts/doctype/asset/asset.py
@@ -114,8 +114,17 @@
def set_accumulated_depreciation(self):
accumulated_depreciation = flt(self.opening_accumulated_depreciation)
- for d in self.get("schedules"):
- accumulated_depreciation += flt(d.depreciation_amount, d.precision("depreciation_amount"))
+ value_after_depreciation = flt(self.value_after_depreciation)
+ for i, d in enumerate(self.get("schedules")):
+ depreciation_amount = flt(d.depreciation_amount, d.precision("depreciation_amount"))
+ value_after_depreciation -= flt(depreciation_amount)
+
+ if i==len(self.get("schedules"))-1 and self.depreciation_method == "Straight Line":
+ depreciation_amount += flt(value_after_depreciation - flt(self.expected_value_after_useful_life),
+ d.precision("depreciation_amount"))
+
+ d.depreciation_amount = depreciation_amount
+ accumulated_depreciation += d.depreciation_amount
d.accumulated_depreciation_amount = flt(accumulated_depreciation, d.precision("accumulated_depreciation_amount"))
def get_depreciation_amount(self, depreciable_value):
diff --git a/erpnext/accounts/doctype/asset/test_asset.py b/erpnext/accounts/doctype/asset/test_asset.py
index 000bc5c..a45cdce 100644
--- a/erpnext/accounts/doctype/asset/test_asset.py
+++ b/erpnext/accounts/doctype/asset/test_asset.py
@@ -5,7 +5,7 @@
import frappe
import unittest
-from frappe.utils import cstr, nowdate, getdate
+from frappe.utils import cstr, nowdate, getdate, flt
from erpnext.accounts.doctype.asset.depreciation import post_depreciation_entries, scrap_asset, restore_asset
from erpnext.accounts.doctype.asset.asset import make_sales_invoice, make_purchase_invoice
@@ -243,6 +243,23 @@
self.assertEqual(frappe.db.get_value("Asset", "Macbook Pro 1", "status"), "Partially Depreciated")
+ def test_asset_expected_value_after_useful_life(self):
+ asset = frappe.get_doc("Asset", "Macbook Pro 1")
+ asset.depreciation_method = "Straight Line"
+ asset.is_existing_asset = 1
+ asset.total_number_of_depreciations = 400
+ asset.gross_purchase_amount = 16866177.00
+ asset.expected_value_after_useful_life = 500000
+ asset.save()
+
+ accumulated_depreciation_after_full_schedule = \
+ max([d.accumulated_depreciation_amount for d in asset.get("schedules")])
+
+ asset_value_after_full_schedule = (flt(asset.gross_purchase_amount) -
+ flt(accumulated_depreciation_after_full_schedule))
+
+ self.assertTrue(asset.expected_value_after_useful_life >= asset_value_after_full_schedule)
+
def tearDown(self):
asset = frappe.get_doc("Asset", "Macbook Pro 1")