chore: renaming some functions and variables, and partially refactoring AssetValueAdjustment

This commit is contained in:
anandbaburajan 2022-11-24 13:02:48 +05:30
parent 76f28de7eb
commit 7db66b0916
4 changed files with 96 additions and 78 deletions

View File

@ -29,6 +29,7 @@ from erpnext.assets.doctype.asset.depreciation import (
) )
from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
cancel_asset_depreciation_schedules,
convert_draft_asset_depreciation_schedules_into_active, convert_draft_asset_depreciation_schedules_into_active,
get_asset_depreciation_schedule, get_asset_depreciation_schedule,
make_draft_asset_depreciation_schedules, make_draft_asset_depreciation_schedules,
@ -64,6 +65,7 @@ class Asset(AccountsController):
self.validate_cancellation() self.validate_cancellation()
self.cancel_movement_entries() self.cancel_movement_entries()
self.delete_depreciation_entries() self.delete_depreciation_entries()
cancel_asset_depreciation_schedules(self)
self.set_status() self.set_status()
self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry") self.ignore_linked_doctypes = ("GL Entry", "Stock Ledger Entry")
make_reverse_gl_entries(voucher_type="Asset", voucher_no=self.name) make_reverse_gl_entries(voucher_type="Asset", voucher_no=self.name)
@ -244,14 +246,14 @@ class Asset(AccountsController):
return value_after_depreciation return value_after_depreciation
def get_from_date(self, finance_book): def get_from_date(self, finance_book):
asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, finance_book) asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book)
if not asset_depr_schedule_name: if not asset_depr_schedule:
return self.available_for_use_date return self.available_for_use_date
asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
return asset_depr_schedule.get("depreciation_schedule")[-1].schedule_date return asset_depr_schedule_doc.get("depreciation_schedule")[-1].schedule_date
# if it returns True, depreciation_amount will not be equal for the first and last rows # if it returns True, depreciation_amount will not be equal for the first and last rows
def check_is_pro_rata(self, row): def check_is_pro_rata(self, row):
@ -355,26 +357,26 @@ class Asset(AccountsController):
return depreciation_amount_for_last_row return depreciation_amount_for_last_row
def get_depreciation_amount_for_first_row(self, finance_book): def get_depreciation_amount_for_first_row(self, finance_book):
asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, finance_book) asset_depr_schedule = get_asset_depreciation_schedule(self.name, finance_book)
asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
return asset_depr_schedule.get("depreciation_schedule")[0].depreciation_amount return asset_depr_schedule_doc.get("depreciation_schedule")[0].depreciation_amount
def get_value_after_depreciation(self, idx): def get_value_after_depreciation(self, idx):
return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation) return flt(self.get("finance_books")[cint(idx) - 1].value_after_depreciation)
def validate_expected_value_after_useful_life(self): def validate_expected_value_after_useful_life(self):
for row in self.get("finance_books"): for row in self.get("finance_books"):
asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, row.finance_book) asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book)
if not asset_depr_schedule_name: if not asset_depr_schedule:
return return
asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
accumulated_depreciation_after_full_schedule = [ accumulated_depreciation_after_full_schedule = [
d.accumulated_depreciation_amount for d in asset_depr_schedule.get("depreciation_schedule") d.accumulated_depreciation_amount for d in asset_depr_schedule_doc.get("depreciation_schedule")
] ]
if accumulated_depreciation_after_full_schedule: if accumulated_depreciation_after_full_schedule:
@ -424,14 +426,14 @@ class Asset(AccountsController):
def delete_depreciation_entries(self): def delete_depreciation_entries(self):
for row in self.get("finance_books"): for row in self.get("finance_books"):
asset_depr_schedule_name = get_asset_depreciation_schedule(self.name, row.finance_book) asset_depr_schedule = get_asset_depreciation_schedule(self.name, row.finance_book)
if not asset_depr_schedule_name: if not asset_depr_schedule:
return return
asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
for d in asset_depr_schedule.get("depreciation_schedule"): for d in asset_depr_schedule_doc.get("depreciation_schedule"):
if d.journal_entry: if d.journal_entry:
frappe.get_doc("Journal Entry", d.journal_entry).cancel() frappe.get_doc("Journal Entry", d.journal_entry).cancel()
d.db_set("journal_entry", None) d.db_set("journal_entry", None)

View File

@ -11,7 +11,7 @@ from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
) )
from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry from erpnext.accounts.doctype.journal_entry.journal_entry import make_reverse_journal_entry
from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import ( from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
make_temp_asset_depreciation_schedule, get_temp_asset_depreciation_schedule_doc,
) )
@ -514,7 +514,7 @@ def get_value_after_depreciation_on_disposal_date(asset, disposal_date, finance_
row = asset_doc.finance_books[idx - 1] row = asset_doc.finance_books[idx - 1]
temp_asset_depreciation_schedule = make_temp_asset_depreciation_schedule( temp_asset_depreciation_schedule = get_temp_asset_depreciation_schedule_doc(
asset_doc, row, getdate(disposal_date) asset_doc, row, getdate(disposal_date)
) )

View File

@ -22,52 +22,52 @@ class AssetDepreciationSchedule(Document):
def make_draft_asset_depreciation_schedules(asset_doc, date_of_disposal=None, date_of_return=None): def make_draft_asset_depreciation_schedules(asset_doc, date_of_disposal=None, date_of_return=None):
for row in asset_doc.get("finance_books"): for row in asset_doc.get("finance_books"):
asset_depr_schedule = frappe.new_doc("Asset Depreciation Schedule") asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
prepare_draft_asset_depreciation_schedule_data( prepare_draft_asset_depreciation_schedule_data(
asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
) )
asset_depr_schedule.insert() asset_depr_schedule_doc.insert()
def update_draft_asset_depreciation_schedules( def update_draft_asset_depreciation_schedules(
asset_doc, date_of_disposal=None, date_of_return=None asset_doc, date_of_disposal=None, date_of_return=None
): ):
for row in asset_doc.get("finance_books"): for row in asset_doc.get("finance_books"):
asset_depr_schedule_name = get_asset_depreciation_schedule(asset_doc.name, row.finance_book) asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
if not asset_depr_schedule_name: if not asset_depr_schedule:
return return
asset_depr_schedule = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name) asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
prepare_draft_asset_depreciation_schedule_data( prepare_draft_asset_depreciation_schedule_data(
asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
) )
asset_depr_schedule.save() asset_depr_schedule_doc.save()
def prepare_draft_asset_depreciation_schedule_data( def prepare_draft_asset_depreciation_schedule_data(
asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
): ):
set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset_doc.name, row) set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset_doc.name, row)
make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal) make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
set_accumulated_depreciation( set_accumulated_depreciation(
asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
) )
def set_draft_asset_depreciation_schedule_details(asset_depr_schedule, asset, row): def set_draft_asset_depreciation_schedule_details(asset_depr_schedule_doc, asset, row):
asset_depr_schedule.asset = asset asset_depr_schedule_doc.asset = asset
asset_depr_schedule.finance_book = row.finance_book asset_depr_schedule_doc.finance_book = row.finance_book
asset_depr_schedule.depreciation_method = row.depreciation_method asset_depr_schedule_doc.depreciation_method = row.depreciation_method
asset_depr_schedule.total_number_of_depreciations = row.total_number_of_depreciations asset_depr_schedule_doc.total_number_of_depreciations = row.total_number_of_depreciations
asset_depr_schedule.frequency_of_depreciation = row.frequency_of_depreciation asset_depr_schedule_doc.frequency_of_depreciation = row.frequency_of_depreciation
asset_depr_schedule.rate_of_depreciation = row.rate_of_depreciation asset_depr_schedule_doc.rate_of_depreciation = row.rate_of_depreciation
asset_depr_schedule.expected_value_after_useful_life = row.expected_value_after_useful_life asset_depr_schedule_doc.expected_value_after_useful_life = row.expected_value_after_useful_life
asset_depr_schedule.status = "Draft" asset_depr_schedule_doc.status = "Draft"
def convert_draft_asset_depreciation_schedules_into_active(asset_doc): def convert_draft_asset_depreciation_schedules_into_active(asset_doc):
@ -84,41 +84,55 @@ def convert_draft_asset_depreciation_schedules_into_active(asset_doc):
asset_depr_schedule.submit() asset_depr_schedule.submit()
def make_new_active_asset_depreciation_schedules_from_existing( def make_new_active_asset_depreciation_schedules_and_cancel_old_ones(
asset_doc, date_of_disposal=None, date_of_return=None, notes=None asset_doc, date_of_disposal=None, date_of_return=None, notes=None
): ):
for row in asset_doc.get("finance_books"): for row in asset_doc.get("finance_books"):
old_asset_depr_schedule_name = get_asset_depreciation_schedule(asset_doc.name, row.finance_book) old_asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
if not old_asset_depr_schedule_name: if not old_asset_depr_schedule:
return return
old_asset_depr_schedule = frappe.get_doc( old_asset_depr_schedule_doc = frappe.get_doc(
"Asset Depreciation Schedule", old_asset_depr_schedule_name "Asset Depreciation Schedule", old_asset_depr_schedule
) )
asset_depr_schedule = frappe.copy_doc(old_asset_depr_schedule, ignore_no_copy=False) asset_depr_schedule_doc = frappe.copy_doc(old_asset_depr_schedule_doc, ignore_no_copy=False)
make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal) old_asset_depr_schedule.cancel()
make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal)
set_accumulated_depreciation( set_accumulated_depreciation(
asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
) )
asset_depr_schedule.notes = notes asset_depr_schedule_doc.notes = notes
asset_depr_schedule.submit() asset_depr_schedule_doc.submit()
def make_temp_asset_depreciation_schedule( def get_temp_asset_depreciation_schedule_doc(
asset_doc, row, date_of_disposal=None, date_of_return=None asset_doc, row, date_of_disposal=None, date_of_return=None
): ):
asset_depr_schedule = frappe.new_doc("Asset Depreciation Schedule") asset_depr_schedule_doc = frappe.new_doc("Asset Depreciation Schedule")
prepare_draft_asset_depreciation_schedule_data( prepare_draft_asset_depreciation_schedule_data(
asset_depr_schedule, asset_doc, row, date_of_disposal, date_of_return asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
) )
return asset_depr_schedule return asset_depr_schedule_doc
def cancel_asset_depreciation_schedules(asset_doc):
for row in asset_doc.get("finance_books"):
asset_depr_schedule = get_asset_depreciation_schedule(asset_doc.name, row.finance_book)
if not asset_depr_schedule:
return
asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule)
asset_depr_schedule_doc.cancel()
def get_asset_depreciation_schedule(asset, finance_book): def get_asset_depreciation_schedule(asset, finance_book):
@ -132,24 +146,26 @@ def get_asset_depreciation_schedule(asset, finance_book):
) )
def make_depreciation_schedule(asset_depr_schedule, asset_doc, row, date_of_disposal): def make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal):
if row.depreciation_method != "Manual" and not asset_depr_schedule.get("depreciation_schedule"): if row.depreciation_method != "Manual" and not asset_depr_schedule_doc.get(
asset_depr_schedule.depreciation_schedule = [] "depreciation_schedule"
):
asset_depr_schedule_doc.depreciation_schedule = []
if not asset_doc.available_for_use_date: if not asset_doc.available_for_use_date:
return return
start = clear_depreciation_schedule(asset_depr_schedule) start = clear_depreciation_schedule(asset_depr_schedule_doc)
_make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date_of_disposal) _make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal)
def clear_depreciation_schedule(asset_depr_schedule): def clear_depreciation_schedule(asset_depr_schedule_doc):
start = [] start = []
num_of_depreciations_completed = 0 num_of_depreciations_completed = 0
depr_schedule = [] depr_schedule = []
for schedule in asset_depr_schedule.get("depreciation_schedule"): for schedule in asset_depr_schedule_doc.get("depreciation_schedule"):
if len(start) != 0: if len(start) != 0:
break break
@ -168,12 +184,12 @@ def clear_depreciation_schedule(asset_depr_schedule):
if start == []: if start == []:
start = [0] start = [0]
else: else:
asset_depr_schedule.depreciation_schedule = depr_schedule asset_depr_schedule_doc.depreciation_schedule = depr_schedule
return start return start
def _make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date_of_disposal): def _make_depreciation_schedule(asset_depr_schedule_doc, asset_doc, row, start, date_of_disposal):
asset_doc.validate_asset_finance_books(row) asset_doc.validate_asset_finance_books(row)
value_after_depreciation = asset_doc._get_value_after_depreciation(row) value_after_depreciation = asset_doc._get_value_after_depreciation(row)
@ -216,7 +232,7 @@ def _make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date
if depreciation_amount > 0: if depreciation_amount > 0:
add_depr_schedule_row( add_depr_schedule_row(
asset_depr_schedule, asset_depr_schedule_doc,
date_of_disposal, date_of_disposal,
depreciation_amount, depreciation_amount,
row.depreciation_method, row.depreciation_method,
@ -282,7 +298,7 @@ def _make_depreciation_schedule(asset_depr_schedule, asset_doc, row, start, date
if depreciation_amount > 0: if depreciation_amount > 0:
add_depr_schedule_row( add_depr_schedule_row(
asset_depr_schedule, asset_depr_schedule_doc,
schedule_date, schedule_date,
depreciation_amount, depreciation_amount,
row.depreciation_method, row.depreciation_method,
@ -312,14 +328,14 @@ def get_depreciation_amount(asset_doc, depreciable_value, row):
def add_depr_schedule_row( def add_depr_schedule_row(
asset_depr_schedule, asset_depr_schedule_doc,
schedule_date, schedule_date,
depreciation_amount, depreciation_amount,
depreciation_method, depreciation_method,
finance_book, finance_book,
finance_book_id, finance_book_id,
): ):
asset_depr_schedule.append( asset_depr_schedule_doc.append(
"depreciation_schedule", "depreciation_schedule",
{ {
"schedule_date": schedule_date, "schedule_date": schedule_date,
@ -332,7 +348,7 @@ def add_depr_schedule_row(
def set_accumulated_depreciation( def set_accumulated_depreciation(
asset_depr_schedule, asset_depr_schedule_doc,
asset_doc, asset_doc,
row, row,
date_of_disposal=None, date_of_disposal=None,
@ -341,12 +357,12 @@ def set_accumulated_depreciation(
): ):
straight_line_idx = [ straight_line_idx = [
d.idx d.idx
for d in asset_depr_schedule.get("depreciation_schedule") for d in asset_depr_schedule_doc.get("depreciation_schedule")
if d.depreciation_method == "Straight Line" if d.depreciation_method == "Straight Line"
] ]
finance_books = [] finance_books = []
for i, d in enumerate(asset_depr_schedule.get("depreciation_schedule")): for i, d in enumerate(asset_depr_schedule_doc.get("depreciation_schedule")):
if ignore_booked_entry and d.journal_entry: if ignore_booked_entry and d.journal_entry:
continue continue

View File

@ -10,10 +10,11 @@ from frappe.utils import cint, date_diff, flt, formatdate, getdate
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_checks_for_pl_and_bs_accounts, get_checks_for_pl_and_bs_accounts,
) )
from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
get_depreciation_amount
)
from erpnext.assets.doctype.asset.depreciation import get_depreciation_accounts from erpnext.assets.doctype.asset.depreciation import get_depreciation_accounts
from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
get_asset_depreciation_schedule,
get_depreciation_amount,
)
class AssetValueAdjustment(Document): class AssetValueAdjustment(Document):
@ -114,20 +115,19 @@ class AssetValueAdjustment(Document):
for d in asset.finance_books: for d in asset.finance_books:
d.value_after_depreciation = asset_value d.value_after_depreciation = asset_value
asset_depr_schedule = get_asset_depreciation_schedule(asset.name, d.finance_book)
depr_schedule = asset_depr_schedule.get("depreciation_schedule")
if d.depreciation_method in ("Straight Line", "Manual"): if d.depreciation_method in ("Straight Line", "Manual"):
end_date = max(s.schedule_date for s in asset.schedules if cint(s.finance_book_id) == d.idx) end_date = max(s.schedule_date for s in depr_schedule)
total_days = date_diff(end_date, self.date) total_days = date_diff(end_date, self.date)
rate_per_day = flt(d.value_after_depreciation) / flt(total_days) rate_per_day = flt(d.value_after_depreciation) / flt(total_days)
from_date = self.date from_date = self.date
else: else:
no_of_depreciations = len( no_of_depreciations = len([s.name for s in depr_schedule if not s.journal_entry])
[
s.name for s in asset.schedules if (cint(s.finance_book_id) == d.idx and not s.journal_entry)
]
)
value_after_depreciation = d.value_after_depreciation value_after_depreciation = d.value_after_depreciation
for data in asset.schedules: for data in depr_schedule:
if cint(data.finance_book_id) == d.idx and not data.journal_entry: if cint(data.finance_book_id) == d.idx and not data.journal_entry:
if d.depreciation_method in ("Straight Line", "Manual"): if d.depreciation_method in ("Straight Line", "Manual"):
days = date_diff(data.schedule_date, from_date) days = date_diff(data.schedule_date, from_date)