mirror of
https://github.com/frappe/erpnext.git
synced 2026-03-16 13:32:13 +00:00
feat: work in progress status for asset (#45066)
* feat: work in progress status for asset
* fix: test case correction
* fix(patch): added patch to update status of assets
* fix: updated tests
(cherry picked from commit 6850019649)
# Conflicts:
# erpnext/assets/doctype/asset/asset.json
# erpnext/patches.txt
This commit is contained in:
@@ -378,7 +378,7 @@
|
|||||||
"in_standard_filter": 1,
|
"in_standard_filter": 1,
|
||||||
"label": "Status",
|
"label": "Status",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"options": "Draft\nSubmitted\nPartially Depreciated\nFully Depreciated\nSold\nScrapped\nIn Maintenance\nOut of Order\nIssue\nReceipt\nCapitalized\nDecapitalized",
|
"options": "Draft\nSubmitted\nPartially Depreciated\nFully Depreciated\nSold\nScrapped\nIn Maintenance\nOut of Order\nIssue\nReceipt\nCapitalized\nDecapitalized\nWork In Progress",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -595,7 +595,11 @@
|
|||||||
"link_fieldname": "target_asset"
|
"link_fieldname": "target_asset"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
<<<<<<< HEAD
|
||||||
"modified": "2024-08-26 23:28:29.095139",
|
"modified": "2024-08-26 23:28:29.095139",
|
||||||
|
=======
|
||||||
|
"modified": "2024-12-26 14:23:20.968882",
|
||||||
|
>>>>>>> 6850019649 (feat: work in progress status for asset (#45066))
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset",
|
"name": "Asset",
|
||||||
|
|||||||
@@ -112,6 +112,7 @@ class Asset(AccountsController):
|
|||||||
"Receipt",
|
"Receipt",
|
||||||
"Capitalized",
|
"Capitalized",
|
||||||
"Decapitalized",
|
"Decapitalized",
|
||||||
|
"Work In Progress",
|
||||||
]
|
]
|
||||||
supplier: DF.Link | None
|
supplier: DF.Link | None
|
||||||
total_asset_cost: DF.Currency
|
total_asset_cost: DF.Currency
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
frappe.listview_settings["Asset"] = {
|
frappe.listview_settings["Asset"] = {
|
||||||
add_fields: ["status"],
|
add_fields: ["status", "docstatus"],
|
||||||
|
has_indicator_for_draft: 1,
|
||||||
get_indicator: function (doc) {
|
get_indicator: function (doc) {
|
||||||
if (doc.status === "Fully Depreciated") {
|
if (doc.status === "Fully Depreciated") {
|
||||||
return [__("Fully Depreciated"), "green", "status,=,Fully Depreciated"];
|
return [__("Fully Depreciated"), "green", "status,=,Fully Depreciated"];
|
||||||
@@ -7,6 +8,8 @@ frappe.listview_settings["Asset"] = {
|
|||||||
return [__("Partially Depreciated"), "grey", "status,=,Partially Depreciated"];
|
return [__("Partially Depreciated"), "grey", "status,=,Partially Depreciated"];
|
||||||
} else if (doc.status === "Sold") {
|
} else if (doc.status === "Sold") {
|
||||||
return [__("Sold"), "green", "status,=,Sold"];
|
return [__("Sold"), "green", "status,=,Sold"];
|
||||||
|
} else if (doc.status === "Work In Progress") {
|
||||||
|
return [__("Work In Progress"), "orange", "status,=,Work In Progress"];
|
||||||
} else if (["Capitalized", "Decapitalized"].includes(doc.status)) {
|
} else if (["Capitalized", "Decapitalized"].includes(doc.status)) {
|
||||||
return [__(doc.status), "grey", "status,=," + doc.status];
|
return [__(doc.status), "grey", "status,=," + doc.status];
|
||||||
} else if (doc.status === "Scrapped") {
|
} else if (doc.status === "Scrapped") {
|
||||||
@@ -21,7 +24,7 @@ frappe.listview_settings["Asset"] = {
|
|||||||
return [__("Receipt"), "green", "status,=,Receipt"];
|
return [__("Receipt"), "green", "status,=,Receipt"];
|
||||||
} else if (doc.status === "Submitted") {
|
} else if (doc.status === "Submitted") {
|
||||||
return [__("Submitted"), "blue", "status,=,Submitted"];
|
return [__("Submitted"), "blue", "status,=,Submitted"];
|
||||||
} else if (doc.status === "Draft") {
|
} else if (doc.status === "Draft" || doc.docstatus === 0) {
|
||||||
return [__("Draft"), "red", "status,=,Draft"];
|
return [__("Draft"), "red", "status,=,Draft"];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1725,6 +1725,10 @@ def create_asset(**args):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if asset.is_composite_asset:
|
||||||
|
asset.gross_purchase_amount = 0
|
||||||
|
asset.purchase_amount = 0
|
||||||
|
|
||||||
if not args.do_not_save:
|
if not args.do_not_save:
|
||||||
try:
|
try:
|
||||||
asset.insert(ignore_if_duplicate=True)
|
asset.insert(ignore_if_duplicate=True)
|
||||||
|
|||||||
@@ -638,6 +638,7 @@ class AssetCapitalization(StockController):
|
|||||||
self.target_fixed_asset_account = get_asset_category_account(
|
self.target_fixed_asset_account = get_asset_category_account(
|
||||||
"fixed_asset_account", item=self.target_item_code, company=asset_doc.company
|
"fixed_asset_account", item=self.target_item_code, company=asset_doc.company
|
||||||
)
|
)
|
||||||
|
asset_doc.set_status("Work In Progress")
|
||||||
|
|
||||||
add_asset_activity(
|
add_asset_activity(
|
||||||
asset_doc.name,
|
asset_doc.name,
|
||||||
@@ -662,8 +663,9 @@ class AssetCapitalization(StockController):
|
|||||||
total_target_asset_value = flt(self.total_value, self.precision("total_value"))
|
total_target_asset_value = flt(self.total_value, self.precision("total_value"))
|
||||||
|
|
||||||
asset_doc = frappe.get_doc("Asset", self.target_asset)
|
asset_doc = frappe.get_doc("Asset", self.target_asset)
|
||||||
asset_doc.gross_purchase_amount = total_target_asset_value
|
asset_doc.gross_purchase_amount += total_target_asset_value
|
||||||
asset_doc.purchase_amount = total_target_asset_value
|
asset_doc.purchase_amount += total_target_asset_value
|
||||||
|
asset_doc.set_status("Work In Progress")
|
||||||
asset_doc.flags.ignore_validate = True
|
asset_doc.flags.ignore_validate = True
|
||||||
asset_doc.save()
|
asset_doc.save()
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ class TestAssetCapitalization(unittest.TestCase):
|
|||||||
target_asset = frappe.get_doc("Asset", asset_capitalization.target_asset)
|
target_asset = frappe.get_doc("Asset", asset_capitalization.target_asset)
|
||||||
self.assertEqual(target_asset.gross_purchase_amount, total_amount)
|
self.assertEqual(target_asset.gross_purchase_amount, total_amount)
|
||||||
self.assertEqual(target_asset.purchase_amount, total_amount)
|
self.assertEqual(target_asset.purchase_amount, total_amount)
|
||||||
|
self.assertEqual(target_asset.status, "Work In Progress")
|
||||||
|
|
||||||
# Test Consumed Asset values
|
# Test Consumed Asset values
|
||||||
self.assertEqual(consumed_asset.db_get("status"), "Capitalized")
|
self.assertEqual(consumed_asset.db_get("status"), "Capitalized")
|
||||||
@@ -270,6 +271,7 @@ class TestAssetCapitalization(unittest.TestCase):
|
|||||||
target_asset = frappe.get_doc("Asset", asset_capitalization.target_asset)
|
target_asset = frappe.get_doc("Asset", asset_capitalization.target_asset)
|
||||||
self.assertEqual(target_asset.gross_purchase_amount, total_amount)
|
self.assertEqual(target_asset.gross_purchase_amount, total_amount)
|
||||||
self.assertEqual(target_asset.purchase_amount, total_amount)
|
self.assertEqual(target_asset.purchase_amount, total_amount)
|
||||||
|
self.assertEqual(target_asset.status, "Work In Progress")
|
||||||
|
|
||||||
# Test General Ledger Entries
|
# Test General Ledger Entries
|
||||||
expected_gle = {
|
expected_gle = {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from frappe.utils import (
|
|||||||
flt,
|
flt,
|
||||||
get_first_day,
|
get_first_day,
|
||||||
get_last_day,
|
get_last_day,
|
||||||
|
get_link_to_form,
|
||||||
getdate,
|
getdate,
|
||||||
is_last_day_of_the_month,
|
is_last_day_of_the_month,
|
||||||
month_diff,
|
month_diff,
|
||||||
@@ -1062,7 +1063,7 @@ def make_new_active_asset_depr_schedules_and_cancel_current_ones(
|
|||||||
if not current_asset_depr_schedule_doc:
|
if not current_asset_depr_schedule_doc:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Asset Depreciation Schedule not found for Asset {0} and Finance Book {1}").format(
|
_("Asset Depreciation Schedule not found for Asset {0} and Finance Book {1}").format(
|
||||||
asset_doc.name, row.finance_book
|
get_link_to_form("Asset", asset_doc.name), row.finance_book
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1108,7 +1109,7 @@ def get_temp_asset_depr_schedule_doc(
|
|||||||
if not current_asset_depr_schedule_doc:
|
if not current_asset_depr_schedule_doc:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Asset Depreciation Schedule not found for Asset {0} and Finance Book {1}").format(
|
_("Asset Depreciation Schedule not found for Asset {0} and Finance Book {1}").format(
|
||||||
asset_doc.name, row.finance_book
|
get_link_to_form("Asset", asset_doc.name), row.finance_book
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -386,3 +386,8 @@ erpnext.patches.v14_0.update_stock_uom_in_work_order_item
|
|||||||
erpnext.patches.v15_0.set_is_exchange_gain_loss_in_payment_entry_deductions
|
erpnext.patches.v15_0.set_is_exchange_gain_loss_in_payment_entry_deductions
|
||||||
erpnext.patches.v15_0.enable_allow_existing_serial_no
|
erpnext.patches.v15_0.enable_allow_existing_serial_no
|
||||||
erpnext.patches.v15_0.update_cc_in_process_statement_of_accounts
|
erpnext.patches.v15_0.update_cc_in_process_statement_of_accounts
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
erpnext.patches.v15_0.refactor_closing_stock_balance #5
|
||||||
|
erpnext.patches.v15_0.update_asset_status_to_work_in_progress
|
||||||
|
>>>>>>> 6850019649 (feat: work in progress status for asset (#45066))
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
Asset = frappe.qb.DocType("Asset")
|
||||||
|
query = (
|
||||||
|
frappe.qb.update(Asset)
|
||||||
|
.set(Asset.status, "Work In Progress")
|
||||||
|
.where((Asset.docstatus == 0) & (Asset.is_composite_asset == 1))
|
||||||
|
)
|
||||||
|
query.run()
|
||||||
Reference in New Issue
Block a user