fix: opening_accumulated_depreciation and precision in charts
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 4ed99f7..a61e8de 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -209,62 +209,62 @@
return
}
- var x_intervals = [frm.doc.purchase_date];
+ var x_intervals = [frappe.format(frm.doc.purchase_date, { fieldtype: 'Date' })];
var asset_values = [frm.doc.gross_purchase_amount];
- var last_depreciation_date = frm.doc.purchase_date;
- if(frm.doc.opening_accumulated_depreciation) {
- last_depreciation_date = frappe.datetime.add_months(frm.doc.next_depreciation_date,
- -1*frm.doc.frequency_of_depreciation);
-
- x_intervals.push(last_depreciation_date);
- asset_values.push(flt(frm.doc.gross_purchase_amount) -
- flt(frm.doc.opening_accumulated_depreciation));
- }
if(frm.doc.calculate_depreciation) {
- if (frm.doc.finance_books.length == 1) {
- let depr_schedule = (await frappe.call(
- "erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule.get_depr_schedule",
- {
- asset_name: frm.doc.name,
- status: frm.doc.docstatus ? "Active" : "Draft",
- finance_book: frm.doc.finance_books[0].finance_book || null
- }
- )).message;
-
- $.each(depr_schedule || [], function(i, v) {
- x_intervals.push(v.schedule_date);
- var asset_value = flt(frm.doc.gross_purchase_amount) - flt(v.accumulated_depreciation_amount);
- if(v.journal_entry) {
- last_depreciation_date = v.schedule_date;
- asset_values.push(asset_value);
- } else {
- if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
- asset_values.push(null);
- } else {
- asset_values.push(asset_value)
- }
- }
- });
+ if(frm.doc.opening_accumulated_depreciation) {
+ var depreciation_date = frappe.datetime.add_months(
+ frm.doc.finance_books[0].depreciation_start_date,
+ -1 * frm.doc.finance_books[0].frequency_of_depreciation
+ );
+ x_intervals.push(frappe.format(depreciation_date, { fieldtype: 'Date' }));
+ asset_values.push(flt(frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation, precision('gross_purchase_amount')));
}
+
+ let depr_schedule = (await frappe.call(
+ "erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule.get_depr_schedule",
+ {
+ asset_name: frm.doc.name,
+ status: frm.doc.docstatus ? "Active" : "Draft",
+ finance_book: frm.doc.finance_books[0].finance_book || null
+ }
+ )).message;
+
+ $.each(depr_schedule || [], function(i, v) {
+ x_intervals.push(frappe.format(v.schedule_date, { fieldtype: 'Date' }));
+ var asset_value = flt(frm.doc.gross_purchase_amount - v.accumulated_depreciation_amount, precision('gross_purchase_amount'));
+ if(v.journal_entry) {
+ asset_values.push(asset_value);
+ } else {
+ if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
+ asset_values.push(null);
+ } else {
+ asset_values.push(asset_value)
+ }
+ }
+ });
} else {
+ if(frm.doc.opening_accumulated_depreciation) {
+ x_intervals.push(frappe.format(frm.doc.creation.split(" ")[0], { fieldtype: 'Date' }));
+ asset_values.push(flt(frm.doc.gross_purchase_amount - frm.doc.opening_accumulated_depreciation, precision('gross_purchase_amount')));
+ }
+
let depr_entries = (await frappe.call({
method: "get_manual_depreciation_entries",
doc: frm.doc,
})).message;
$.each(depr_entries || [], function(i, v) {
- x_intervals.push(v.posting_date);
- last_depreciation_date = v.posting_date;
+ x_intervals.push(frappe.format(v.posting_date, { fieldtype: 'Date' }));
let last_asset_value = asset_values[asset_values.length - 1]
asset_values.push(last_asset_value - v.value);
});
}
if(in_list(["Scrapped", "Sold"], frm.doc.status)) {
- x_intervals.push(frm.doc.disposal_date);
+ x_intervals.push(frappe.format(frm.doc.disposal_date, { fieldtype: 'Date' }));
asset_values.push(0);
- last_depreciation_date = frm.doc.disposal_date;
}
frm.dashboard.render_graph({
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 4f1caca..e00f3a5 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -429,25 +429,16 @@
def get_value_after_depreciation(self, finance_book=None):
if not self.calculate_depreciation:
- return self.value_after_depreciation
+ return flt(self.value_after_depreciation, self.precision("gross_purchase_amount"))
if not finance_book:
- return self.get("finance_books")[0].value_after_depreciation
+ return flt(
+ self.get("finance_books")[0].value_after_depreciation, self.precision("gross_purchase_amount")
+ )
for row in self.get("finance_books"):
if finance_book == row.finance_book:
- return row.value_after_depreciation
-
- def _get_value_after_depreciation_for_making_schedule(self, fb_row):
- # value_after_depreciation - current Asset value
- if self.docstatus == 1 and fb_row.value_after_depreciation:
- value_after_depreciation = flt(fb_row.value_after_depreciation)
- else:
- value_after_depreciation = flt(self.gross_purchase_amount) - flt(
- self.opening_accumulated_depreciation
- )
-
- return value_after_depreciation
+ return flt(row.value_after_depreciation, self.precision("gross_purchase_amount"))
def get_default_finance_book_idx(self):
if not self.get("default_finance_book") and self.company:
diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
index 7615fbc..6f02662 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -134,7 +134,7 @@
):
asset_doc.validate_asset_finance_books(row)
- value_after_depreciation = asset_doc._get_value_after_depreciation_for_making_schedule(row)
+ value_after_depreciation = _get_value_after_depreciation_for_making_schedule(asset_doc, row)
row.value_after_depreciation = value_after_depreciation
if update_asset_finance_book_row:
@@ -325,6 +325,17 @@
)
+def _get_value_after_depreciation_for_making_schedule(asset_doc, fb_row):
+ if asset_doc.docstatus == 1 and fb_row.value_after_depreciation:
+ value_after_depreciation = flt(fb_row.value_after_depreciation)
+ else:
+ value_after_depreciation = flt(asset_doc.gross_purchase_amount) - flt(
+ asset_doc.opening_accumulated_depreciation
+ )
+
+ return value_after_depreciation
+
+
def make_draft_asset_depr_schedules_if_not_present(asset_doc):
for row in asset_doc.get("finance_books"):
draft_asset_depr_schedule_name = get_asset_depr_schedule_name(
diff --git a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py
index cead72e..51a6a86 100644
--- a/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py
+++ b/erpnext/assets/report/fixed_asset_register/fixed_asset_register.py
@@ -5,7 +5,7 @@
import frappe
from frappe import _
from frappe.query_builder.functions import Sum
-from frappe.utils import cstr, formatdate, getdate
+from frappe.utils import cstr, flt, formatdate, getdate
from erpnext.accounts.report.financial_statements import (
get_fiscal_year_data,
@@ -102,13 +102,9 @@
]
assets_record = frappe.db.get_all("Asset", filters=conditions, fields=fields)
- finance_book_filter = ("is", "not set")
- if filters.finance_book:
- finance_book_filter = ("=", filters.finance_book)
-
assets_linked_to_fb = frappe.db.get_all(
doctype="Asset Finance Book",
- filters={"finance_book": finance_book_filter},
+ filters={"finance_book": filters.finance_book or ("is", "not set")},
pluck="parent",
)
@@ -194,7 +190,7 @@
else:
depr_amount = get_manual_depreciation_amount_of_asset(asset, filters)
- return depr_amount
+ return flt(depr_amount, 2)
def get_finance_book_value_map(filters):