feat(Asset Capitalization): Accounting Fields
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
index 9276d00..b42634a 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
@@ -148,6 +148,10 @@
this.calculate_totals();
}
+ target_qty() {
+ this.calculate_totals();
+ }
+
rate() {
this.calculate_totals();
}
@@ -156,26 +160,29 @@
var me = this;
if (me.frm.doc.company) {
- frappe.call({
- method: "frappe.client.get_value",
- args: {
- doctype: "Company",
- filters: {"name": me.frm.doc.company},
- fieldname: "cost_center"
- },
- callback: function (r) {
- if (r.message) {
- $.each(me.frm.doc.service_items || [], function (i, d) {
- frappe.model.set_value(d.doctype, d.name, "cost_center", r.message.cost_center);
- });
- }
- }
+ frappe.model.set_value(me.frm.doc.doctype, me.frm.doc.name, "cost_center", null);
+ $.each(me.frm.doc.stock_items || [], function (i, d) {
+ frappe.model.set_value(d.doctype, d.name, "cost_center", null);
+ });
+ $.each(me.frm.doc.asset_items || [], function (i, d) {
+ frappe.model.set_value(d.doctype, d.name, "cost_center", null);
+ });
+ $.each(me.frm.doc.service_items || [], function (i, d) {
+ frappe.model.set_value(d.doctype, d.name, "cost_center", null);
});
}
erpnext.accounts.dimensions.update_dimension(me.frm, me.frm.doctype);
}
+ stock_items_add(doc, cdt, cdn) {
+ erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'stock_items');
+ }
+
+ asset_items_add(doc, cdt, cdn) {
+ erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'asset_items');
+ }
+
serivce_items_add(doc, cdt, cdn) {
erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'service_items');
}
@@ -189,6 +196,7 @@
child: me.frm.doc,
args: {
item_code: me.frm.doc.target_item_code,
+ company: me.frm.doc.company,
},
callback: function (r) {
if (!r.exc) {
@@ -207,7 +215,8 @@
method: "erpnext.assets.doctype.asset_capitalization.asset_capitalization.get_target_asset_details",
child: me.frm.doc,
args: {
- asset: me.frm.doc.target_asset
+ asset: me.frm.doc.target_asset,
+ company: me.frm.doc.company,
},
callback: function (r) {
if (!r.exc) {
@@ -381,6 +390,10 @@
me.frm.doc.total_value = me.frm.doc.stock_items_total + me.frm.doc.asset_items_total + me.frm.doc.service_items_total;
me.frm.doc.total_value = flt(me.frm.doc.total_value, precision('total_value'));
+ me.frm.doc.target_qty = flt(me.frm.doc.target_qty, precision('target_qty'));
+ me.frm.doc.target_incoming_rate = me.frm.doc.target_qty ? me.frm.doc.total_value / flt(me.frm.doc.target_qty)
+ : me.frm.doc.total_value;
+
me.frm.refresh_fields();
}
};
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json
index b697c20..0582b1e 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json
@@ -41,7 +41,13 @@
"service_items",
"service_items_total",
"totals_section",
- "total_value"
+ "total_value",
+ "column_break_36",
+ "target_incoming_rate",
+ "accounting_dimensions_section",
+ "cost_center",
+ "dimension_col_break",
+ "target_fixed_asset_account"
],
"fields": [
{
@@ -289,12 +295,45 @@
"label": "Total Value",
"options": "Company:company:default_currency",
"read_only": 1
+ },
+ {
+ "fieldname": "column_break_36",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "target_incoming_rate",
+ "fieldtype": "Currency",
+ "label": "Target Incoming Rate",
+ "options": "Company:company:default_currency"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "accounting_dimensions_section",
+ "fieldtype": "Section Break",
+ "label": "Accounting Dimensions"
+ },
+ {
+ "fieldname": "cost_center",
+ "fieldtype": "Link",
+ "label": "Cost Center",
+ "options": "Cost Center"
+ },
+ {
+ "fieldname": "dimension_col_break",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "target_fixed_asset_account",
+ "fieldtype": "Link",
+ "label": "Target Fixed Asset Account",
+ "options": "Account",
+ "read_only": 1
}
],
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
- "modified": "2021-09-06 17:18:31.881006",
+ "modified": "2021-09-08 15:58:40.417579",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Capitalization",
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
index 586710a..64f1388 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
@@ -11,13 +11,14 @@
from erpnext.setup.doctype.brand.brand import get_brand_defaults
from erpnext.stock.utils import get_incoming_rate
from erpnext.stock.stock_ledger import get_previous_sle
+from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
from erpnext.assets.doctype.asset_value_adjustment.asset_value_adjustment import get_current_asset_value
from six import string_types
import json
force_fields = ['target_item_name', 'target_asset_name', 'item_name', 'asset_name',
'target_is_fixed_asset', 'target_has_serial_no', 'target_has_batch_no',
- 'target_stock_uom', 'stock_uom']
+ 'target_stock_uom', 'stock_uom', 'target_fixed_asset_account', 'fixed_asset_account']
class AssetCapitalization(AccountsController):
@@ -42,7 +43,7 @@
self.title = self.target_asset_name or self.target_item_name or self.target_item_code
def set_missing_values(self, for_validate=False):
- target_item_details = get_target_item_details(self.target_item_code)
+ target_item_details = get_target_item_details(self.target_item_code, self.company)
for k, v in target_item_details.items():
if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
self.set(k, v)
@@ -51,7 +52,7 @@
if not self.target_is_fixed_asset:
self.target_asset = None
- target_asset_details = get_target_asset_details(self.target_asset)
+ target_asset_details = get_target_asset_details(self.target_asset, self.company)
for k, v in target_asset_details.items():
if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
self.set(k, v)
@@ -95,6 +96,8 @@
if target_item.is_fixed_asset:
self.target_qty = 1
+ if flt(self.target_qty) <= 0:
+ frappe.throw(_("Target Qty must be a positive number"))
if not target_item.is_stock_item:
self.target_warehouse = None
@@ -233,9 +236,12 @@
self.total_value = self.stock_items_total + self.asset_items_total + self.service_items_total
self.total_value = flt(self.total_value, self.precision('total_value'))
+ self.target_qty = flt(self.target_qty, self.precision('target_qty'))
+ self.target_incoming_rate = self.total_value / self.target_qty
+
@frappe.whitelist()
-def get_target_item_details(item_code=None):
+def get_target_item_details(item_code=None, company=None):
out = frappe._dict()
# Get Item Details
@@ -261,6 +267,13 @@
if not out.target_has_serial_no:
out.target_serial_no = ""
+ # Cost Center
+ item_defaults = get_item_defaults(item.name, company)
+ item_group_defaults = get_item_group_defaults(item.name, company)
+ brand_defaults = get_brand_defaults(item.name, company)
+ out.cost_center = get_default_cost_center(frappe._dict({'item_code': item.name, 'company': company}),
+ item_defaults, item_group_defaults, brand_defaults)
+
# Set Entry Type
if not item_code:
out.entry_type = ""
@@ -273,7 +286,7 @@
@frappe.whitelist()
-def get_target_asset_details(asset=None):
+def get_target_asset_details(asset=None, company=None):
out = frappe._dict()
# Get Asset Details
@@ -289,6 +302,12 @@
# Set Asset Details
out.asset_name = asset_details.asset_name
+ if asset_details.item_code:
+ out.target_fixed_asset_account = get_asset_category_account('fixed_asset_account', item=asset_details.item_code,
+ company=company)
+ else:
+ out.target_fixed_asset_account = None
+
return out
@@ -313,6 +332,12 @@
out.warehouse = get_item_warehouse(item, args, overwrite_warehouse=True) if item else None
+ # Cost Center
+ item_defaults = get_item_defaults(item.name, args.company)
+ item_group_defaults = get_item_group_defaults(item.name, args.company)
+ brand_defaults = get_brand_defaults(item.name, args.company)
+ out.cost_center = get_default_cost_center(args, item_defaults, item_group_defaults, brand_defaults)
+
if get_valuation_rate:
if args.item_code and out.warehouse:
incoming_rate_args = frappe._dict({
@@ -373,6 +398,21 @@
else:
out.asset_value = 0
+ # Account
+ if asset_details.item_code:
+ out.fixed_asset_account = get_asset_category_account('fixed_asset_account', item=asset_details.item_code,
+ company=args.company)
+ else:
+ out.fixed_asset_account = None
+
+ # Cost Center
+ if asset_details.item_code:
+ item = frappe.get_cached_doc("Item", asset_details.item_code)
+ item_defaults = get_item_defaults(item.name, args.company)
+ item_group_defaults = get_item_group_defaults(item.name, args.company)
+ brand_defaults = get_brand_defaults(item.name, args.company)
+ out.cost_center = get_default_cost_center(args, item_defaults, item_group_defaults, brand_defaults)
+
return out
diff --git a/erpnext/assets/doctype/asset_capitalization_asset_item/asset_capitalization_asset_item.json b/erpnext/assets/doctype/asset_capitalization_asset_item/asset_capitalization_asset_item.json
index a004033..93ec336 100644
--- a/erpnext/assets/doctype/asset_capitalization_asset_item/asset_capitalization_asset_item.json
+++ b/erpnext/assets/doctype/asset_capitalization_asset_item/asset_capitalization_asset_item.json
@@ -12,7 +12,11 @@
"item_name",
"section_break_6",
"asset_value",
- "column_break_9"
+ "column_break_9",
+ "accounting_dimensions_section",
+ "fixed_asset_account",
+ "dimension_col_break",
+ "cost_center"
],
"fields": [
{
@@ -68,12 +72,35 @@
{
"fieldname": "column_break_9",
"fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "fixed_asset_account",
+ "fieldtype": "Link",
+ "label": "Fixed Asset Account",
+ "options": "Account",
+ "read_only": 1
+ },
+ {
+ "fieldname": "cost_center",
+ "fieldtype": "Link",
+ "label": "Cost Center",
+ "options": "Cost Center"
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "accounting_dimensions_section",
+ "fieldtype": "Section Break",
+ "label": "Accounting Dimensions"
+ },
+ {
+ "fieldname": "dimension_col_break",
+ "fieldtype": "Column Break"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2021-09-06 13:46:04.892863",
+ "modified": "2021-09-08 15:54:24.885547",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Capitalization Asset Item",
diff --git a/erpnext/assets/doctype/asset_capitalization_service_item/asset_capitalization_service_item.json b/erpnext/assets/doctype/asset_capitalization_service_item/asset_capitalization_service_item.json
index 2d3584d..0ae1c14 100644
--- a/erpnext/assets/doctype/asset_capitalization_service_item/asset_capitalization_service_item.json
+++ b/erpnext/assets/doctype/asset_capitalization_service_item/asset_capitalization_service_item.json
@@ -17,8 +17,7 @@
"amount",
"accounting_dimensions_section",
"cost_center",
- "dimension_col_break",
- "project"
+ "dimension_col_break"
],
"fields": [
{
@@ -106,18 +105,12 @@
{
"fieldname": "dimension_col_break",
"fieldtype": "Column Break"
- },
- {
- "fieldname": "project",
- "fieldtype": "Link",
- "label": "Project",
- "options": "Project"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2021-09-06 14:06:34.768152",
+ "modified": "2021-09-08 15:52:08.598100",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Capitalization Service Item",
diff --git a/erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json b/erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json
index 19c4558..14eb0f6 100644
--- a/erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json
+++ b/erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json
@@ -19,7 +19,10 @@
"batch_and_serial_no_section",
"batch_no",
"column_break_13",
- "serial_no"
+ "serial_no",
+ "accounting_dimensions_section",
+ "cost_center",
+ "dimension_col_break"
],
"fields": [
{
@@ -120,12 +123,28 @@
"label": "Actual Qty in Warehouse",
"no_copy": 1,
"read_only": 1
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "accounting_dimensions_section",
+ "fieldtype": "Section Break",
+ "label": "Accounting Dimensions"
+ },
+ {
+ "fieldname": "cost_center",
+ "fieldtype": "Link",
+ "label": "Cost Center",
+ "options": "Cost Center"
+ },
+ {
+ "fieldname": "dimension_col_break",
+ "fieldtype": "Column Break"
}
],
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2021-09-06 13:46:13.579140",
+ "modified": "2021-09-08 15:56:20.230548",
"modified_by": "Administrator",
"module": "Assets",
"name": "Asset Capitalization Stock Item",