feat(Asset Capitalization): Accounting Fields

This commit is contained in:
Saif Ur Rehman 2021-09-08 16:36:07 +05:00
parent 6c748966e7
commit 702b5c32c1
6 changed files with 166 additions and 35 deletions

View File

@ -148,6 +148,10 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
this.calculate_totals();
}
target_qty() {
this.calculate_totals();
}
rate() {
this.calculate_totals();
}
@ -156,26 +160,29 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
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 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
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 @@ erpnext.assets.AssetCapitalization = class AssetCapitalization extends erpnext.s
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 @@ 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 = 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();
}
};

View File

@ -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",

View File

@ -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.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 @@ class AssetCapitalization(AccountsController):
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 @@ class AssetCapitalization(AccountsController):
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 @@ class AssetCapitalization(AccountsController):
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 @@ class AssetCapitalization(AccountsController):
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 @@ def get_target_item_details(item_code=None):
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 @@ def get_target_item_details(item_code=None):
@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 @@ def get_target_asset_details(asset=None):
# 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 @@ 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
# 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 @@ def get_consumed_asset_details(args, get_asset_value=True):
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

View File

@ -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",

View File

@ -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",

View File

@ -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",