feat(Asset Capitalization): Accounting Fields
This commit is contained in:
@@ -148,6 +148,10 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
|
|||||||
this.calculate_totals();
|
this.calculate_totals();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target_qty() {
|
||||||
|
this.calculate_totals();
|
||||||
|
}
|
||||||
|
|
||||||
rate() {
|
rate() {
|
||||||
this.calculate_totals();
|
this.calculate_totals();
|
||||||
}
|
}
|
||||||
@@ -156,26 +160,29 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
|
|||||||
var me = this;
|
var me = this;
|
||||||
|
|
||||||
if (me.frm.doc.company) {
|
if (me.frm.doc.company) {
|
||||||
frappe.call({
|
frappe.model.set_value(me.frm.doc.doctype, me.frm.doc.name, "cost_center", null);
|
||||||
method: "frappe.client.get_value",
|
$.each(me.frm.doc.stock_items || [], function (i, d) {
|
||||||
args: {
|
frappe.model.set_value(d.doctype, d.name, "cost_center", null);
|
||||||
doctype: "Company",
|
});
|
||||||
filters: {"name": me.frm.doc.company},
|
$.each(me.frm.doc.asset_items || [], function (i, d) {
|
||||||
fieldname: "cost_center"
|
frappe.model.set_value(d.doctype, d.name, "cost_center", null);
|
||||||
},
|
});
|
||||||
callback: function (r) {
|
$.each(me.frm.doc.service_items || [], function (i, d) {
|
||||||
if (r.message) {
|
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", r.message.cost_center);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
erpnext.accounts.dimensions.update_dimension(me.frm, me.frm.doctype);
|
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) {
|
serivce_items_add(doc, cdt, cdn) {
|
||||||
erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'service_items');
|
erpnext.accounts.dimensions.copy_dimension_from_first_row(this.frm, cdt, cdn, 'service_items');
|
||||||
}
|
}
|
||||||
@@ -189,6 +196,7 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
|
|||||||
child: me.frm.doc,
|
child: me.frm.doc,
|
||||||
args: {
|
args: {
|
||||||
item_code: me.frm.doc.target_item_code,
|
item_code: me.frm.doc.target_item_code,
|
||||||
|
company: me.frm.doc.company,
|
||||||
},
|
},
|
||||||
callback: function (r) {
|
callback: function (r) {
|
||||||
if (!r.exc) {
|
if (!r.exc) {
|
||||||
@@ -207,7 +215,8 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
|
|||||||
method: "erpnext.assets.doctype.asset_capitalization.asset_capitalization.get_target_asset_details",
|
method: "erpnext.assets.doctype.asset_capitalization.asset_capitalization.get_target_asset_details",
|
||||||
child: me.frm.doc,
|
child: me.frm.doc,
|
||||||
args: {
|
args: {
|
||||||
asset: me.frm.doc.target_asset
|
asset: me.frm.doc.target_asset,
|
||||||
|
company: me.frm.doc.company,
|
||||||
},
|
},
|
||||||
callback: function (r) {
|
callback: function (r) {
|
||||||
if (!r.exc) {
|
if (!r.exc) {
|
||||||
@@ -381,6 +390,10 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
|
|||||||
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 = 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.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();
|
me.frm.refresh_fields();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -41,7 +41,13 @@
|
|||||||
"service_items",
|
"service_items",
|
||||||
"service_items_total",
|
"service_items_total",
|
||||||
"totals_section",
|
"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": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -289,12 +295,45 @@
|
|||||||
"label": "Total Value",
|
"label": "Total Value",
|
||||||
"options": "Company:company:default_currency",
|
"options": "Company:company:default_currency",
|
||||||
"read_only": 1
|
"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,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-09-06 17:18:31.881006",
|
"modified": "2021-09-08 15:58:40.417579",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Capitalization",
|
"name": "Asset Capitalization",
|
||||||
|
|||||||
@@ -11,13 +11,14 @@ from erpnext.setup.doctype.item_group.item_group import get_item_group_defaults
|
|||||||
from erpnext.setup.doctype.brand.brand import get_brand_defaults
|
from erpnext.setup.doctype.brand.brand import get_brand_defaults
|
||||||
from erpnext.stock.utils import get_incoming_rate
|
from erpnext.stock.utils import get_incoming_rate
|
||||||
from erpnext.stock.stock_ledger import get_previous_sle
|
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 erpnext.assets.doctype.asset_value_adjustment.asset_value_adjustment import get_current_asset_value
|
||||||
from six import string_types
|
from six import string_types
|
||||||
import json
|
import json
|
||||||
|
|
||||||
force_fields = ['target_item_name', 'target_asset_name', 'item_name', 'asset_name',
|
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_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):
|
class AssetCapitalization(AccountsController):
|
||||||
@@ -42,7 +43,7 @@ class AssetCapitalization(AccountsController):
|
|||||||
self.title = self.target_asset_name or self.target_item_name or self.target_item_code
|
self.title = self.target_asset_name or self.target_item_name or self.target_item_code
|
||||||
|
|
||||||
def set_missing_values(self, for_validate=False):
|
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():
|
for k, v in target_item_details.items():
|
||||||
if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
|
if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
|
||||||
self.set(k, v)
|
self.set(k, v)
|
||||||
@@ -51,7 +52,7 @@ class AssetCapitalization(AccountsController):
|
|||||||
if not self.target_is_fixed_asset:
|
if not self.target_is_fixed_asset:
|
||||||
self.target_asset = None
|
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():
|
for k, v in target_asset_details.items():
|
||||||
if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
|
if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
|
||||||
self.set(k, v)
|
self.set(k, v)
|
||||||
@@ -95,6 +96,8 @@ class AssetCapitalization(AccountsController):
|
|||||||
|
|
||||||
if target_item.is_fixed_asset:
|
if target_item.is_fixed_asset:
|
||||||
self.target_qty = 1
|
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:
|
if not target_item.is_stock_item:
|
||||||
self.target_warehouse = None
|
self.target_warehouse = None
|
||||||
@@ -233,9 +236,12 @@ class AssetCapitalization(AccountsController):
|
|||||||
self.total_value = self.stock_items_total + self.asset_items_total + self.service_items_total
|
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.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()
|
@frappe.whitelist()
|
||||||
def get_target_item_details(item_code=None):
|
def get_target_item_details(item_code=None, company=None):
|
||||||
out = frappe._dict()
|
out = frappe._dict()
|
||||||
|
|
||||||
# Get Item Details
|
# Get Item Details
|
||||||
@@ -261,6 +267,13 @@ def get_target_item_details(item_code=None):
|
|||||||
if not out.target_has_serial_no:
|
if not out.target_has_serial_no:
|
||||||
out.target_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
|
# Set Entry Type
|
||||||
if not item_code:
|
if not item_code:
|
||||||
out.entry_type = ""
|
out.entry_type = ""
|
||||||
@@ -273,7 +286,7 @@ def get_target_item_details(item_code=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_target_asset_details(asset=None):
|
def get_target_asset_details(asset=None, company=None):
|
||||||
out = frappe._dict()
|
out = frappe._dict()
|
||||||
|
|
||||||
# Get Asset Details
|
# Get Asset Details
|
||||||
@@ -289,6 +302,12 @@ def get_target_asset_details(asset=None):
|
|||||||
# Set Asset Details
|
# Set Asset Details
|
||||||
out.asset_name = asset_details.asset_name
|
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
|
return out
|
||||||
|
|
||||||
|
|
||||||
@@ -313,6 +332,12 @@ def get_consumed_stock_item_details(args, get_valuation_rate=True):
|
|||||||
|
|
||||||
out.warehouse = get_item_warehouse(item, args, overwrite_warehouse=True) if item else None
|
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 get_valuation_rate:
|
||||||
if args.item_code and out.warehouse:
|
if args.item_code and out.warehouse:
|
||||||
incoming_rate_args = frappe._dict({
|
incoming_rate_args = frappe._dict({
|
||||||
@@ -373,6 +398,21 @@ def get_consumed_asset_details(args, get_asset_value=True):
|
|||||||
else:
|
else:
|
||||||
out.asset_value = 0
|
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
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,11 @@
|
|||||||
"item_name",
|
"item_name",
|
||||||
"section_break_6",
|
"section_break_6",
|
||||||
"asset_value",
|
"asset_value",
|
||||||
"column_break_9"
|
"column_break_9",
|
||||||
|
"accounting_dimensions_section",
|
||||||
|
"fixed_asset_account",
|
||||||
|
"dimension_col_break",
|
||||||
|
"cost_center"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -68,12 +72,35 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "column_break_9",
|
"fieldname": "column_break_9",
|
||||||
"fieldtype": "Column Break"
|
"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,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-09-06 13:46:04.892863",
|
"modified": "2021-09-08 15:54:24.885547",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Capitalization Asset Item",
|
"name": "Asset Capitalization Asset Item",
|
||||||
|
|||||||
@@ -17,8 +17,7 @@
|
|||||||
"amount",
|
"amount",
|
||||||
"accounting_dimensions_section",
|
"accounting_dimensions_section",
|
||||||
"cost_center",
|
"cost_center",
|
||||||
"dimension_col_break",
|
"dimension_col_break"
|
||||||
"project"
|
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -106,18 +105,12 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "dimension_col_break",
|
"fieldname": "dimension_col_break",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Project",
|
|
||||||
"options": "Project"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-09-06 14:06:34.768152",
|
"modified": "2021-09-08 15:52:08.598100",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Capitalization Service Item",
|
"name": "Asset Capitalization Service Item",
|
||||||
|
|||||||
@@ -19,7 +19,10 @@
|
|||||||
"batch_and_serial_no_section",
|
"batch_and_serial_no_section",
|
||||||
"batch_no",
|
"batch_no",
|
||||||
"column_break_13",
|
"column_break_13",
|
||||||
"serial_no"
|
"serial_no",
|
||||||
|
"accounting_dimensions_section",
|
||||||
|
"cost_center",
|
||||||
|
"dimension_col_break"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@@ -120,12 +123,28 @@
|
|||||||
"label": "Actual Qty in Warehouse",
|
"label": "Actual Qty in Warehouse",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"read_only": 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,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-09-06 13:46:13.579140",
|
"modified": "2021-09-08 15:56:20.230548",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Capitalization Stock Item",
|
"name": "Asset Capitalization Stock Item",
|
||||||
|
|||||||
Reference in New Issue
Block a user