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