chore: fix some bugs, refactor some functions, add proper notes
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 85ed784..f470fe6 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -1190,8 +1190,11 @@
else:
if asset.calculate_depreciation:
notes = _(
- "This schedule was created when the Asset {0} was sold through Sales Invoice {1}."
- ).format(asset.name, self.get("name"))
+ "This schedule was created when Asset {0} was sold through Sales Invoice {1}."
+ ).format(
+ get_link_to_form(asset.doctype, asset.name),
+ get_link_to_form(self.doctype, self.get("name")),
+ )
depreciate_asset(asset, self.posting_date, notes)
fixed_asset_gl_entries = get_gl_entries_on_asset_disposal(
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 0b37b89..a9fed1c 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -14,6 +14,7 @@
flt,
get_datetime,
get_last_day,
+ get_link_to_form,
getdate,
is_last_day_of_the_month,
month_diff,
@@ -31,9 +32,10 @@
from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_schedule import (
cancel_asset_depr_schedules,
convert_draft_asset_depr_schedules_into_active,
+ get_asset_depr_schedule_doc_of_asset,
get_depr_schedule_from_asset_depr_schedule_of_asset,
make_draft_asset_depr_schedules,
- make_new_active_asset_depr_schedules_and_cancel_current_ones,
+ set_draft_asset_depr_schedule_details,
update_draft_asset_depr_schedules,
)
from erpnext.controllers.accounts_controller import AccountsController
@@ -48,7 +50,6 @@
self.set_missing_values()
if not self.split_from:
self.prepare_depreciation_data()
- update_draft_asset_depr_schedules(self)
self.validate_gross_and_purchase_amount()
self.validate_expected_value_after_useful_life()
@@ -97,6 +98,7 @@
if self.calculate_depreciation:
self.value_after_depreciation = 0
self.set_depreciation_rate()
+ update_draft_asset_depr_schedules(self)
else:
self.finance_books = []
self.value_after_depreciation = flt(self.gross_purchase_amount) - flt(
@@ -858,12 +860,12 @@
remaining_qty = asset.asset_quantity - split_qty
new_asset = create_new_asset_after_split(asset, split_qty)
- update_existing_asset(asset, remaining_qty)
+ update_existing_asset(asset, remaining_qty, new_asset.name)
return new_asset
-def update_existing_asset(asset, remaining_qty):
+def update_existing_asset(asset, remaining_qty, new_asset_name):
remaining_gross_purchase_amount = flt(
(asset.gross_purchase_amount * remaining_qty) / asset.asset_quantity
)
@@ -898,18 +900,31 @@
expected_value_after_useful_life,
)
- accumulated_depreciation = 0
- depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(asset.name, row.finance_book)
+ current_asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(
+ asset.name, row.finance_book
+ )
+ new_asset_depr_schedule_doc = frappe.copy_doc(current_asset_depr_schedule_doc)
- for term in depr_schedule:
+ set_draft_asset_depr_schedule_details(new_asset_depr_schedule_doc, asset, row)
+
+ accumulated_depreciation = 0
+
+ for term in new_asset_depr_schedule_doc.get("depreciation_schedule"):
depreciation_amount = flt((term.depreciation_amount * remaining_qty) / asset.asset_quantity)
- frappe.db.set_value(
- "Depreciation Schedule", term.name, "depreciation_amount", depreciation_amount
- )
+ term.depreciation_amount = depreciation_amount
accumulated_depreciation += depreciation_amount
- frappe.db.set_value(
- "Depreciation Schedule", term.name, "accumulated_depreciation_amount", accumulated_depreciation
- )
+ term.accumulated_depreciation_amount = accumulated_depreciation
+
+ notes = _(
+ "This schedule was created when Asset {0} was updated after being split into new Asset {1}."
+ ).format(
+ get_link_to_form(asset.doctype, asset.name), get_link_to_form(asset.doctype, new_asset_name)
+ )
+ new_asset_depr_schedule_doc.notes = notes
+
+ current_asset_depr_schedule_doc.cancel()
+
+ new_asset_depr_schedule_doc.submit()
def create_new_asset_after_split(asset, split_qty):
@@ -932,33 +947,42 @@
(row.expected_value_after_useful_life * split_qty) / asset.asset_quantity
)
- new_asset.submit()
+ current_asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(
+ asset.name, row.finance_book
+ )
+ new_asset_depr_schedule_doc = frappe.copy_doc(current_asset_depr_schedule_doc)
- make_new_active_asset_depr_schedules_and_cancel_current_ones(
- new_asset, "create_new_asset_after_split TODO", submit=False
- )
+ set_draft_asset_depr_schedule_details(new_asset_depr_schedule_doc, new_asset, row)
- for row in new_asset.get("finance_books"):
accumulated_depreciation = 0
- depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(
- new_asset.name, row.finance_book
- )
-
- for term in depr_schedule:
+ for term in new_asset_depr_schedule_doc.get("depreciation_schedule"):
depreciation_amount = flt((term.depreciation_amount * split_qty) / asset.asset_quantity)
term.depreciation_amount = depreciation_amount
accumulated_depreciation += depreciation_amount
term.accumulated_depreciation_amount = accumulated_depreciation
+ notes = _("This schedule was created when new Asset {0} was split from Asset {1}.").format(
+ get_link_to_form(new_asset.doctype, new_asset.name), get_link_to_form(asset.doctype, asset.name)
+ )
+ new_asset_depr_schedule_doc.notes = notes
+
+ new_asset_depr_schedule_doc.insert()
+
+ new_asset.submit()
+ new_asset.set_status()
+
+ for row in new_asset.get("finance_books"):
+ depr_schedule = get_depr_schedule_from_asset_depr_schedule_of_asset(
+ new_asset.name, row.finance_book
+ )
+ for term in depr_schedule:
# Update references in JV
if term.journal_entry:
add_reference_in_jv_on_split(
term.journal_entry, new_asset.name, asset.name, term.depreciation_amount
)
- new_asset.set_status()
-
return new_asset
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index 22c65fd..b7d5511 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -4,7 +4,7 @@
import frappe
from frappe import _
-from frappe.utils import add_months, cint, flt, getdate, nowdate, today
+from frappe.utils import add_months, cint, flt, get_link_to_form, getdate, nowdate, today
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_checks_for_pl_and_bs_accounts,
@@ -238,8 +238,8 @@
je.submit()
notes = _(
- "This schedule was created when the Asset {0} was scrapped through Journal Entry {1}."
- ).format(asset.name, je.name)
+ "This schedule was created when Asset {0} was scrapped through Journal Entry {1}."
+ ).format(get_link_to_form(asset.doctype, asset.name), get_link_to_form(je.doctype, je.name))
depreciate_asset(asset, date, notes)
frappe.db.set_value("Asset", asset_name, "disposal_date", date)
@@ -291,9 +291,10 @@
if repair.increase_in_asset_life:
asset_repair = frappe.get_doc("Asset Repair", repair.name)
asset_repair.modify_depreciation_schedule()
- notes = _(
- "This schedule was created when the Asset {0} went through the Asset Repair {1}."
- ).format(asset.name, repair.name)
+ notes = _("This schedule was created when Asset {0} went through Asset Repair {1}.").format(
+ get_link_to_form(asset.doctype, asset.name),
+ get_link_to_form(asset_repair.doctype, asset_repair.name),
+ )
make_new_active_asset_depr_schedules_and_cancel_current_ones(asset, notes)
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
index 96c01a5..26bac86 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
@@ -7,7 +7,7 @@
# import erpnext
from frappe import _
-from frappe.utils import cint, flt
+from frappe.utils import cint, flt, get_link_to_form
from six import string_types
import erpnext
@@ -431,8 +431,10 @@
if asset.calculate_depreciation:
notes = _(
- "This schedule was created when the Asset {0} was consumed through Asset Capitalization {1}."
- ).format(asset.name, self.get("name"))
+ "This schedule was created when Asset {0} was consumed when Asset Capitalization {1} was submitted."
+ ).format(
+ get_link_to_form(asset.doctype, asset.name), get_link_to_form(self.doctype, self.get("name"))
+ )
depreciate_asset(asset, self.posting_date, notes)
asset.reload()
@@ -519,8 +521,10 @@
asset_doc.purchase_date = self.posting_date
asset_doc.gross_purchase_amount = total_target_asset_value
asset_doc.purchase_receipt_amount = total_target_asset_value
- notes = _("This schedule was created when the Asset Capitalization {0} was submitted.").format(
- self.name
+ notes = _(
+ "This schedule was created when target Asset {0} was updated when Asset Capitalization {1} was submitted."
+ ).format(
+ get_link_to_form(asset_doc.doctype, asset_doc.name), get_link_to_form(self.doctype, self.name)
)
make_new_active_asset_depr_schedules_and_cancel_current_ones(asset_doc, notes)
elif self.docstatus == 2:
@@ -532,8 +536,10 @@
if asset.calculate_depreciation:
reverse_depreciation_entry_made_after_disposal(asset, self.posting_date)
notes = _(
- "This schedule was created when the Asset Capitalization {0} was cancelled."
- ).format(self.name)
+ "This schedule was created when Asset {0} was restored when Asset Capitalization {1} was cancelled."
+ ).format(
+ get_link_to_form(asset.doctype, asset.name), get_link_to_form(self.doctype, self.name)
+ )
reset_depreciation_schedule(asset, self.posting_date, notes)
def get_asset(self, item):
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 9f4047d..61e8ba2 100644
--- a/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
+++ b/erpnext/assets/doctype/asset_depreciation_schedule/asset_depreciation_schedule.py
@@ -33,12 +33,7 @@
def update_draft_asset_depr_schedules(asset_doc, date_of_disposal=None, date_of_return=None):
for row in asset_doc.get("finance_books"):
- asset_depr_schedule_name = get_asset_depr_schedule_name(asset_doc.name, row.finance_book)
-
- if not asset_depr_schedule_name:
- return
-
- asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+ asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(asset_doc.name, row.finance_book)
prepare_draft_asset_depr_schedule_data(
asset_depr_schedule_doc, asset_doc, row, date_of_disposal, date_of_return
@@ -72,12 +67,7 @@
def convert_draft_asset_depr_schedules_into_active(asset_doc):
for row in asset_doc.get("finance_books"):
- asset_depr_schedule_name = get_asset_depr_schedule_name(asset_doc.name, row.finance_book)
-
- if not asset_depr_schedule_name:
- return
-
- asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+ asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(asset_doc.name, row.finance_book)
asset_depr_schedule_doc.status = "Active"
@@ -85,16 +75,11 @@
def make_new_active_asset_depr_schedules_and_cancel_current_ones(
- asset_doc, notes, submit=True, date_of_disposal=None, date_of_return=None
+ asset_doc, notes, date_of_disposal=None, date_of_return=None
):
for row in asset_doc.get("finance_books"):
- current_asset_depr_schedule_name = get_asset_depr_schedule_name(asset_doc.name, row.finance_book)
-
- if not current_asset_depr_schedule_name:
- return
-
- current_asset_depr_schedule_doc = frappe.get_doc(
- "Asset Depreciation Schedule", current_asset_depr_schedule_name
+ current_asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(
+ asset_doc.name, row.finance_book
)
new_asset_depr_schedule_doc = frappe.copy_doc(current_asset_depr_schedule_doc)
@@ -106,10 +91,7 @@
current_asset_depr_schedule_doc.cancel()
- new_asset_depr_schedule_doc.insert()
-
- if submit:
- new_asset_depr_schedule_doc.submit()
+ new_asset_depr_schedule_doc.submit()
def get_temp_asset_depr_schedule_doc(asset_doc, row, date_of_disposal=None, date_of_return=None):
@@ -124,12 +106,9 @@
def cancel_asset_depr_schedules(asset_doc):
for row in asset_doc.get("finance_books"):
- asset_depr_schedule_name = get_asset_depr_schedule_name(asset_doc.name, row.finance_book)
+ asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(asset_doc.name, row.finance_book)
- if not asset_depr_schedule_name:
- return
-
- asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
+ asset_depr_schedule_doc.status = "Cancelled"
asset_depr_schedule_doc.cancel()
@@ -151,6 +130,12 @@
@frappe.whitelist()
def get_depr_schedule_from_asset_depr_schedule_of_asset(asset_name, finance_book):
+ asset_depr_schedule_doc = get_asset_depr_schedule_doc_of_asset(asset_name, finance_book)
+
+ return asset_depr_schedule_doc.get("depreciation_schedule")
+
+
+def get_asset_depr_schedule_doc_of_asset(asset_name, finance_book):
asset_depr_schedule_name = get_asset_depr_schedule_name(asset_name, finance_book)
if not asset_depr_schedule_name:
@@ -158,7 +143,7 @@
asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
- return asset_depr_schedule_doc.get("depreciation_schedule")
+ return asset_depr_schedule_doc
def make_depr_schedule(asset_depr_schedule_doc, asset_doc, row, date_of_disposal):
diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.py b/erpnext/assets/doctype/asset_repair/asset_repair.py
index d3f74b0..31fd0f6 100644
--- a/erpnext/assets/doctype/asset_repair/asset_repair.py
+++ b/erpnext/assets/doctype/asset_repair/asset_repair.py
@@ -3,7 +3,7 @@
import frappe
from frappe import _
-from frappe.utils import add_months, cint, flt, getdate, time_diff_in_hours
+from frappe.utils import add_months, cint, flt, get_link_to_form, getdate, time_diff_in_hours
import erpnext
from erpnext.accounts.general_ledger import make_gl_entries
@@ -55,10 +55,11 @@
and self.increase_in_asset_life
):
self.modify_depreciation_schedule()
- notes = _("This schedule was created when the Asset Repair {0} was submitted.").format(
- self.name
- )
- make_new_active_asset_depr_schedules_and_cancel_current_ones(self.asset_doc, notes)
+
+ notes = _("This schedule was created when Asset Repair {0} was submitted.").format(
+ get_link_to_form(self.doctype, self.name)
+ )
+ make_new_active_asset_depr_schedules_and_cancel_current_ones(self.asset_doc, notes)
def before_cancel(self):
self.asset_doc = frappe.get_doc("Asset", self.asset)
@@ -76,10 +77,11 @@
and self.increase_in_asset_life
):
self.revert_depreciation_schedule_on_cancellation()
- notes = _("This schedule was created when the Asset Repair {0} was cancelled.").format(
- self.name
- )
- make_new_active_asset_depr_schedules_and_cancel_current_ones(self.asset_doc, notes)
+
+ notes = _("This schedule was created when Asset Repair {0} was cancelled.").format(
+ get_link_to_form(self.doctype, self.name)
+ )
+ make_new_active_asset_depr_schedules_and_cancel_current_ones(self.asset_doc, notes)
def check_repair_status(self):
if self.repair_status == "Pending":