Commonify get_asset_category_account and get_fixed_asset_account method
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index e7fdd64..d2c4193 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -205,9 +205,10 @@
 		var row = locals[cdt][cdn];
 		if(row.asset) {
 			frappe.call({
-				method: "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.get_fixed_asset_account",
+				method: "erpnext.assets.doctype.asset_category.asset_category.get_asset_category_account",
 				args: {
 					"asset": row.asset,
+					"fieldname": "fixed_asset_account",
 					"account": row.expense_account
 				},
 				callback: function(r, rt) {
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index fd0054a..3e375e5 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -19,7 +19,7 @@
 from frappe.model.mapper import get_mapped_doc
 from erpnext.accounts.doctype.sales_invoice.sales_invoice import validate_inter_company_party, update_linked_invoice,\
 	unlink_inter_company_invoice
-from erpnext.assets.doctype.asset_category.asset_category import get_cwip_account
+from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 
 form_grid_templates = {
 	"items": "templates/form_grid/item_grid.html"
@@ -442,7 +442,9 @@
 								if asset_rbnb_currency == self.company_currency else asset_amount)
 						}))
 					else:
-						cwip_account = get_cwip_account(item.item_code, self.company) or asset_accounts[2]
+						cwip_account = get_asset_category_account(item.asset,
+							'capital_work_in_progress_account') or asset_accounts[2]
+
 						cwip_account_currency = get_account_currency(cwip_account)
 						gl_entries.append(self.get_gl_dict({
 							"account": cwip_account,
@@ -735,20 +737,6 @@
 	return make_return_doc("Purchase Invoice", source_name, target_doc)
 
 @frappe.whitelist()
-def get_fixed_asset_account(asset, account=None):
-	if account:
-		if frappe.db.get_value("Account", account, "account_type") != "Fixed Asset":
-			account=None
-
-	if not account:
-		asset_category, company = frappe.db.get_value("Asset", asset, ["asset_category", "company"])
-
-		account = frappe.db.get_value("Asset Category Account",
-			filters={"parent": asset_category, "company_name": company}, fieldname="fixed_asset_account")
-
-	return account
-
-@frappe.whitelist()
 def make_stock_entry(source_name, target_doc=None):
 	doc = get_mapped_doc("Purchase Invoice", source_name, {
 		"Purchase Invoice": {
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index adcc986..ef6e376 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -7,7 +7,7 @@
 from frappe import _
 from frappe.utils import flt, add_months, cint, nowdate, getdate, today, date_diff
 from frappe.model.document import Document
-from erpnext.accounts.doctype.purchase_invoice.purchase_invoice import get_fixed_asset_account
+from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 from erpnext.assets.doctype.asset.depreciation \
 	import get_disposal_account_and_cost_center, get_depreciation_accounts
 
@@ -287,7 +287,7 @@
 		"item_code": item_code,
 		"is_fixed_asset": 1,
 		"asset": asset,
-		"expense_account": get_fixed_asset_account(asset),
+		"expense_account": get_asset_category_account(asset, 'fixed_asset_account'),
 		"qty": 1,
 		"price_list_rate": gross_purchase_amount,
 		"rate": gross_purchase_amount
diff --git a/erpnext/assets/doctype/asset_category/asset_category.py b/erpnext/assets/doctype/asset_category/asset_category.py
index 4ffd20b..d1dd8ed 100644
--- a/erpnext/assets/doctype/asset_category/asset_category.py
+++ b/erpnext/assets/doctype/asset_category/asset_category.py
@@ -14,9 +14,16 @@
 			if cint(self.get(field))<1:
 				frappe.throw(_("{0} must be greater than 0").format(self.meta.get_label(field)), frappe.MandatoryError)
 
-def get_cwip_account(item_code, company):
-	asset_category = frappe.db.get_value('Item', item_code, 'asset_category')
-	cwip_account = frappe.db.get_value('Asset Category Account',
-		{'parent': asset_category, 'company_name': company}, 'capital_work_in_progress_account')
+@frappe.whitelist()
+def get_asset_category_account(asset, fieldname, account=None):
+	if account:
+		if frappe.db.get_value("Account", account, "account_type") != "Fixed Asset":
+			account=None
 
-	return cwip_account or None
\ No newline at end of file
+	if not account:
+		asset_category, company = frappe.db.get_value("Asset", asset, ["asset_category", "company"])
+
+		account = frappe.db.get_value("Asset Category Account",
+			filters={"parent": asset_category, "company_name": company}, fieldname=fieldname)
+
+	return account
\ No newline at end of file
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index a1bc6d7..80bec0e 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -505,11 +505,15 @@
 					self.make_asset_movement(d)
 
 	def make_asset(self, row):
+		item_data = frappe.db.get_value('Item',
+			row.item_code, ['asset_naming_series', 'asset_category'], as_dict=1)
+
 		asset = frappe.get_doc({
 			'doctype': 'Asset',
 			'item_code': row.item_code,
 			'asset_name': row.item_name,
-			'naming_series': frappe.db.get_value('Item', row.item_code, 'asset_naming_series') or 'AST',
+			'naming_series': item_data.get('asset_naming_series') or 'AST',
+			'asset_category': item_data.get('asset_category'),
 			'warehouse': row.warehouse,
 			'company': self.company,
 			'purchase_date': self.posting_date,
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index ab86c76..573f7ed 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -13,7 +13,7 @@
 from erpnext.accounts.utils import get_account_currency
 from frappe.desk.notifications import clear_doctype_notifications
 from erpnext.buying.utils import check_for_closed_status
-from erpnext.assets.doctype.asset_category.asset_category import get_cwip_account
+from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 
 form_grid_templates = {
 	"items": "templates/form_grid/item_grid.html"
@@ -259,7 +259,8 @@
 					"asset_received_but_not_billed"])
 
 				# CWIP entry
-				cwip_account = get_cwip_account(d.item_code, self.company) or asset_accounts[0]
+				cwip_account = get_asset_category_account(d.asset,
+					'capital_work_in_progress_account') or asset_accounts[0]
 
 				asset_amount = flt(d.net_amount) + flt(d.item_tax_amount/self.conversion_rate)
 				base_asset_amount = flt(d.base_net_amount + d.item_tax_amount)