fix: manual depr schedule
This commit is contained in:
parent
e26c6dc76b
commit
dd74839eba
@ -43,9 +43,9 @@ erpnext.asset.set_accumulated_depreciation = function(frm) {
|
|||||||
if(frm.doc.depreciation_method != "Manual") return;
|
if(frm.doc.depreciation_method != "Manual") return;
|
||||||
|
|
||||||
var accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
|
var accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
|
||||||
$.each(frm.doc.schedules || [], function(i, row) {
|
|
||||||
|
$.each(frm.doc.depreciation_schedule || [], function(i, row) {
|
||||||
accumulated_depreciation += flt(row.depreciation_amount);
|
accumulated_depreciation += flt(row.depreciation_amount);
|
||||||
frappe.model.set_value(row.doctype, row.name,
|
frappe.model.set_value(row.doctype, row.name, "accumulated_depreciation_amount", accumulated_depreciation);
|
||||||
"accumulated_depreciation_amount", accumulated_depreciation);
|
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
"asset",
|
"asset",
|
||||||
"naming_series",
|
"naming_series",
|
||||||
"column_break_2",
|
"column_break_2",
|
||||||
|
"gross_purchase_amount",
|
||||||
"opening_accumulated_depreciation",
|
"opening_accumulated_depreciation",
|
||||||
|
"number_of_depreciations_booked",
|
||||||
"finance_book",
|
"finance_book",
|
||||||
"finance_book_id",
|
"finance_book_id",
|
||||||
"depreciation_details_section",
|
"depreciation_details_section",
|
||||||
@ -148,18 +150,36 @@
|
|||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "opening_accumulated_depreciation",
|
|
||||||
"fieldname": "opening_accumulated_depreciation",
|
"fieldname": "opening_accumulated_depreciation",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
|
"hidden": 1,
|
||||||
"label": "Opening Accumulated Depreciation",
|
"label": "Opening Accumulated Depreciation",
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "gross_purchase_amount",
|
||||||
|
"fieldtype": "Currency",
|
||||||
|
"hidden": 1,
|
||||||
|
"label": "Gross Purchase Amount",
|
||||||
|
"options": "Company:company:default_currency",
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "number_of_depreciations_booked",
|
||||||
|
"fieldtype": "Int",
|
||||||
|
"hidden": 1,
|
||||||
|
"label": "Number of Depreciations Booked",
|
||||||
|
"print_hide": 1,
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2023-01-16 21:08:21.421260",
|
"modified": "2023-02-26 16:37:23.734806",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Depreciation Schedule",
|
"name": "Asset Depreciation Schedule",
|
||||||
|
@ -4,7 +4,15 @@
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import add_days, add_months, cint, flt, get_last_day, is_last_day_of_the_month
|
from frappe.utils import (
|
||||||
|
add_days,
|
||||||
|
add_months,
|
||||||
|
cint,
|
||||||
|
flt,
|
||||||
|
get_last_day,
|
||||||
|
getdate,
|
||||||
|
is_last_day_of_the_month,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AssetDepreciationSchedule(Document):
|
class AssetDepreciationSchedule(Document):
|
||||||
@ -83,15 +91,58 @@ class AssetDepreciationSchedule(Document):
|
|||||||
date_of_return=None,
|
date_of_return=None,
|
||||||
update_asset_finance_book_row=True,
|
update_asset_finance_book_row=True,
|
||||||
):
|
):
|
||||||
|
have_asset_details_been_modified = self.have_asset_details_been_modified(asset_doc)
|
||||||
|
not_manual_depr_or_have_manual_depr_details_been_modified = (
|
||||||
|
self.not_manual_depr_or_have_manual_depr_details_been_modified(row)
|
||||||
|
)
|
||||||
|
|
||||||
self.set_draft_asset_depr_schedule_details(asset_doc, row)
|
self.set_draft_asset_depr_schedule_details(asset_doc, row)
|
||||||
self.make_depr_schedule(asset_doc, row, date_of_disposal, update_asset_finance_book_row)
|
|
||||||
self.set_accumulated_depreciation(row, date_of_disposal, date_of_return)
|
if self.should_prepare_depreciation_schedule(
|
||||||
|
have_asset_details_been_modified, not_manual_depr_or_have_manual_depr_details_been_modified
|
||||||
|
):
|
||||||
|
self.make_depr_schedule(asset_doc, row, date_of_disposal, update_asset_finance_book_row)
|
||||||
|
self.set_accumulated_depreciation(row, date_of_disposal, date_of_return)
|
||||||
|
|
||||||
|
def have_asset_details_been_modified(self, asset_doc):
|
||||||
|
return (
|
||||||
|
asset_doc.gross_purchase_amount != self.gross_purchase_amount
|
||||||
|
or asset_doc.opening_accumulated_depreciation != self.opening_accumulated_depreciation
|
||||||
|
or asset_doc.number_of_depreciations_booked != self.number_of_depreciations_booked
|
||||||
|
)
|
||||||
|
|
||||||
|
def not_manual_depr_or_have_manual_depr_details_been_modified(self, row):
|
||||||
|
return (
|
||||||
|
self.depreciation_method != "Manual"
|
||||||
|
or row.total_number_of_depreciations != self.total_number_of_depreciations
|
||||||
|
or row.frequency_of_depreciation != self.frequency_of_depreciation
|
||||||
|
or getdate(row.depreciation_start_date) != self.get("depreciation_schedule")[0].schedule_date
|
||||||
|
or row.expected_value_after_useful_life != self.expected_value_after_useful_life
|
||||||
|
)
|
||||||
|
|
||||||
|
def should_prepare_depreciation_schedule(
|
||||||
|
self, have_asset_details_been_modified, not_manual_depr_or_have_manual_depr_details_been_modified
|
||||||
|
):
|
||||||
|
if not self.get("depreciation_schedule"):
|
||||||
|
return True
|
||||||
|
|
||||||
|
old_asset_depr_schedule_doc = self.get_doc_before_save()
|
||||||
|
|
||||||
|
if self.docstatus != 0 and not old_asset_depr_schedule_doc:
|
||||||
|
return True
|
||||||
|
|
||||||
|
if have_asset_details_been_modified or not_manual_depr_or_have_manual_depr_details_been_modified:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def set_draft_asset_depr_schedule_details(self, asset_doc, row):
|
def set_draft_asset_depr_schedule_details(self, asset_doc, row):
|
||||||
self.asset = asset_doc.name
|
self.asset = asset_doc.name
|
||||||
self.finance_book = row.finance_book
|
self.finance_book = row.finance_book
|
||||||
self.finance_book_id = row.idx
|
self.finance_book_id = row.idx
|
||||||
self.opening_accumulated_depreciation = asset_doc.opening_accumulated_depreciation
|
self.opening_accumulated_depreciation = asset_doc.opening_accumulated_depreciation
|
||||||
|
self.number_of_depreciations_booked = asset_doc.number_of_depreciations_booked
|
||||||
|
self.gross_purchase_amount = asset_doc.gross_purchase_amount
|
||||||
self.depreciation_method = row.depreciation_method
|
self.depreciation_method = row.depreciation_method
|
||||||
self.total_number_of_depreciations = row.total_number_of_depreciations
|
self.total_number_of_depreciations = row.total_number_of_depreciations
|
||||||
self.frequency_of_depreciation = row.frequency_of_depreciation
|
self.frequency_of_depreciation = row.frequency_of_depreciation
|
||||||
@ -102,7 +153,7 @@ class AssetDepreciationSchedule(Document):
|
|||||||
def make_depr_schedule(
|
def make_depr_schedule(
|
||||||
self, asset_doc, row, date_of_disposal, update_asset_finance_book_row=True
|
self, asset_doc, row, date_of_disposal, update_asset_finance_book_row=True
|
||||||
):
|
):
|
||||||
if row.depreciation_method != "Manual" and not self.get("depreciation_schedule"):
|
if not self.get("depreciation_schedule"):
|
||||||
self.depreciation_schedule = []
|
self.depreciation_schedule = []
|
||||||
|
|
||||||
if not asset_doc.available_for_use_date:
|
if not asset_doc.available_for_use_date:
|
||||||
@ -293,7 +344,9 @@ class AssetDepreciationSchedule(Document):
|
|||||||
ignore_booked_entry=False,
|
ignore_booked_entry=False,
|
||||||
):
|
):
|
||||||
straight_line_idx = [
|
straight_line_idx = [
|
||||||
d.idx for d in self.get("depreciation_schedule") if d.depreciation_method == "Straight Line"
|
d.idx
|
||||||
|
for d in self.get("depreciation_schedule")
|
||||||
|
if d.depreciation_method == "Straight Line" or d.depreciation_method == "Manual"
|
||||||
]
|
]
|
||||||
|
|
||||||
accumulated_depreciation = flt(self.opening_accumulated_depreciation)
|
accumulated_depreciation = flt(self.opening_accumulated_depreciation)
|
||||||
|
@ -27,7 +27,13 @@ def get_details_of_draft_or_submitted_depreciable_assets():
|
|||||||
|
|
||||||
records = (
|
records = (
|
||||||
frappe.qb.from_(asset)
|
frappe.qb.from_(asset)
|
||||||
.select(asset.name, asset.opening_accumulated_depreciation, asset.docstatus)
|
.select(
|
||||||
|
asset.name,
|
||||||
|
asset.opening_accumulated_depreciation,
|
||||||
|
asset.gross_purchase_amount,
|
||||||
|
asset.number_of_depreciations_booked,
|
||||||
|
asset.docstatus,
|
||||||
|
)
|
||||||
.where(asset.calculate_depreciation == 1)
|
.where(asset.calculate_depreciation == 1)
|
||||||
.where(asset.docstatus < 2)
|
.where(asset.docstatus < 2)
|
||||||
).run(as_dict=True)
|
).run(as_dict=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user