patch: set default for add taxes from item tax template
diff --git a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py
index bc07b6d..716bef3 100644
--- a/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py
+++ b/erpnext/accounts/dashboard_chart_source/account_balance_timeline/account_balance_timeline.py
@@ -3,6 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe, json
+from frappe import _
 from frappe.utils import add_to_date, date_diff, getdate, nowdate, get_last_day, formatdate
 from erpnext.accounts.report.general_ledger.general_ledger import execute
 from frappe.core.page.dashboard.dashboard import cache_source, get_from_date_from_timespan
@@ -18,12 +19,20 @@
 	else:
 		chart = frappe._dict(frappe.parse_json(chart))
 	timespan = chart.timespan
+
+	if chart.timespan == 'Select Date Range':
+		from_date = chart.from_date
+		to_date = chart.to_date
+
 	timegrain = chart.time_interval
 	filters = frappe.parse_json(chart.filters_json)
 
 	account = filters.get("account")
 	company = filters.get("company")
 
+	if not account and chart:
+		frappe.throw(_("Account is not set for the dashboard chart {0}").format(chart))
+
 	if not to_date:
 		to_date = nowdate()
 	if not from_date:
diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py
index 32485a3..62a8f05 100644
--- a/erpnext/accounts/deferred_revenue.py
+++ b/erpnext/accounts/deferred_revenue.py
@@ -174,6 +174,8 @@
 	# GL Entry for crediting the amount in the deferred expense
 	from erpnext.accounts.general_ledger import make_gl_entries
 
+	if amount == 0: return
+
 	gl_entries = []
 	gl_entries.append(
 		doc.get_gl_dict({
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 7cca8d2..cccced8 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -117,7 +117,7 @@
 
 			if not parent_acc_name_map: return
 
-			self.create_account_for_child_company(parent_acc_name_map, descendants)
+			self.create_account_for_child_company(parent_acc_name_map, descendants, parent_acc_name)
 
 	def validate_group_or_ledger(self):
 		if self.get("__islocal"):
@@ -159,7 +159,7 @@
 			if frappe.db.get_value("GL Entry", {"account": self.name}):
 				frappe.throw(_("Currency can not be changed after making entries using some other currency"))
 
-	def create_account_for_child_company(self, parent_acc_name_map, descendants):
+	def create_account_for_child_company(self, parent_acc_name_map, descendants, parent_acc_name):
 		for company in descendants:
 			if not parent_acc_name_map.get(company):
 				frappe.throw(_("While creating account for child Company {0}, parent account {1} not found. Please create the parent account in corresponding COA")
diff --git a/erpnext/accounts/doctype/account/test_account.py b/erpnext/accounts/doctype/account/test_account.py
index 4ee5573..dc23b2b 100644
--- a/erpnext/accounts/doctype/account/test_account.py
+++ b/erpnext/accounts/doctype/account/test_account.py
@@ -160,7 +160,7 @@
 		["_Test Payable USD", "Current Liabilities", 0, "Payable", "USD"]
 	]
 
-	for company, abbr in [["_Test Company", "_TC"], ["_Test Company 1", "_TC1"]]:
+	for company, abbr in [["_Test Company", "_TC"], ["_Test Company 1", "_TC1"], ["_Test Company with perpetual inventory", "TCP1"]]:
 		test_objects = make_test_objects("Account", [{
 				"doctype": "Account",
 				"account_name": account_name,
diff --git a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
index af51fc5..522ed4f 100644
--- a/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
+++ b/erpnext/accounts/doctype/accounting_dimension/accounting_dimension.py
@@ -24,6 +24,11 @@
 			msg = _("Not allowed to create accounting dimension for {0}").format(self.document_type)
 			frappe.throw(msg)
 
+		exists = frappe.db.get_value("Accounting Dimension", {'document_type': self.document_type}, ['name'])
+
+		if exists and self.is_new():
+			frappe.throw("Document Type already used as a dimension")
+
 	def after_insert(self):
 		if frappe.flags.in_test:
 			make_dimension_in_accounting_doctypes(doc=self)
@@ -60,7 +65,8 @@
 			"label": doc.label,
 			"fieldtype": "Link",
 			"options": doc.document_type,
-			"insert_after": insert_after_field
+			"insert_after": insert_after_field,
+			"owner": "Administrator"
 		}
 
 		if doctype == "Budget":
diff --git a/erpnext/accounts/doctype/coupon_code/coupon_code.js b/erpnext/accounts/doctype/coupon_code/coupon_code.js
index 0bf097f..da3a9f8 100644
--- a/erpnext/accounts/doctype/coupon_code/coupon_code.js
+++ b/erpnext/accounts/doctype/coupon_code/coupon_code.js
@@ -2,6 +2,15 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on('Coupon Code', {
+	setup: function(frm) {
+		frm.set_query("pricing_rule", function() {
+			return {
+				filters: [
+					["Pricing Rule","coupon_code_based", "=", "1"]
+				]
+			};
+		});
+	},
 	coupon_name:function(frm){
 		if (frm.doc.__islocal===1) {
 			frm.trigger("make_coupon_code");
diff --git a/erpnext/accounts/doctype/coupon_code/coupon_code.json b/erpnext/accounts/doctype/coupon_code/coupon_code.json
index fafc635..7dc5e9d 100644
--- a/erpnext/accounts/doctype/coupon_code/coupon_code.json
+++ b/erpnext/accounts/doctype/coupon_code/coupon_code.json
@@ -24,6 +24,7 @@
  ],
  "fields": [
   {
+   "description": "e.g. \"Summer Holiday 2019 Offer 20\"",
    "fieldname": "coupon_name",
    "fieldtype": "Data",
    "label": "Coupon Name",
@@ -50,7 +51,7 @@
    "fieldtype": "Column Break"
   },
   {
-   "description": "To be used to get discount",
+   "description": "unique e.g. SAVE20  To be used to get discount",
    "fieldname": "coupon_code",
    "fieldtype": "Data",
    "label": "Coupon Code",
@@ -62,12 +63,13 @@
    "fieldname": "pricing_rule",
    "fieldtype": "Link",
    "label": "Pricing Rule",
-   "options": "Pricing Rule"
+   "options": "Pricing Rule",
+   "reqd": 1
   },
   {
    "fieldname": "uses",
    "fieldtype": "Section Break",
-   "label": "Uses"
+   "label": "Validity and Usage"
   },
   {
    "fieldname": "valid_from",
@@ -113,7 +115,7 @@
    "read_only": 1
   }
  ],
- "modified": "2019-10-15 14:12:22.686986",
+ "modified": "2019-10-19 14:48:14.602481",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Coupon Code",
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index 11d847d..221e3a7 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -570,7 +570,7 @@
 				},
 				{fieldtype: "Date", fieldname: "posting_date", label: __("Date"), reqd: 1,
 					default: frm.doc.posting_date},
-				{fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark"), reqd: 1},
+				{fieldtype: "Small Text", fieldname: "user_remark", label: __("User Remark")},
 				{fieldtype: "Select", fieldname: "naming_series", label: __("Series"), reqd: 1,
 					options: naming_series_options, default: naming_series_default},
 			]
diff --git a/erpnext/accounts/doctype/loyalty_program/test_loyalty_program.py b/erpnext/accounts/doctype/loyalty_program/test_loyalty_program.py
index 4a7406e..341884c 100644
--- a/erpnext/accounts/doctype/loyalty_program/test_loyalty_program.py
+++ b/erpnext/accounts/doctype/loyalty_program/test_loyalty_program.py
@@ -8,10 +8,12 @@
 from frappe.utils import today, cint, flt, getdate
 from erpnext.accounts.doctype.loyalty_program.loyalty_program import get_loyalty_program_details_with_points
 from erpnext.accounts.party import get_dashboard_info
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 class TestLoyaltyProgram(unittest.TestCase):
 	@classmethod
 	def setUpClass(self):
+		set_perpetual_inventory(0)
 		# create relevant item, customer, loyalty program, etc
 		create_records()
 
diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py
index ce8aba7..54464e7 100644
--- a/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py
+++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py
@@ -32,8 +32,10 @@
 				})
 				invoices_summary.update({company: _summary})
 
-				paid_amount.append(invoice.paid_amount)
-				outstanding_amount.append(invoice.outstanding_amount)
+				if invoice.paid_amount:
+					paid_amount.append(invoice.paid_amount)
+				if invoice.outstanding_amount:
+					outstanding_amount.append(invoice.outstanding_amount)
 
 			if paid_amount or outstanding_amount:
 				max_count.update({
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json
index a85eccd..acfc660 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.json
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json
@@ -62,6 +62,7 @@
   "dimension_col_break",
   "cost_center",
   "section_break_12",
+  "status",
   "remarks",
   "column_break_16",
   "letter_head",
@@ -563,10 +564,18 @@
   {
    "fieldname": "dimension_col_break",
    "fieldtype": "Column Break"
+  },
+  {
+   "default": "Draft",
+   "fieldname": "status",
+   "fieldtype": "Select",
+   "label": "Status",
+   "options": "\nDraft\nSubmitted\nCancelled",
+   "read_only": 1
   }
  ],
  "is_submittable": 1,
- "modified": "2019-05-27 15:53:21.108857",
+ "modified": "2019-11-06 12:59:43.151721",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Payment Entry",
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 89aaffb..bf7e833 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -61,6 +61,7 @@
 		self.validate_duplicate_entry()
 		self.validate_allocated_amount()
 		self.ensure_supplier_is_not_blocked()
+		self.set_status()
 
 	def on_submit(self):
 		self.setup_party_account_field()
@@ -70,6 +71,7 @@
 		self.update_outstanding_amounts()
 		self.update_advance_paid()
 		self.update_expense_claim()
+		self.set_status()
 
 
 	def on_cancel(self):
@@ -79,6 +81,7 @@
 		self.update_advance_paid()
 		self.update_expense_claim()
 		self.delink_advance_entry_references()
+		self.set_status()
 
 	def update_outstanding_amounts(self):
 		self.set_missing_ref_details(force=True)
@@ -275,6 +278,14 @@
 						frappe.throw(_("Against Journal Entry {0} does not have any unmatched {1} entry")
 							.format(d.reference_name, dr_or_cr))
 
+	def set_status(self):
+		if self.docstatus == 2:
+			self.status = 'Cancelled'
+		elif self.docstatus == 1:
+			self.status = 'Submitted'
+		else:
+			self.status = 'Draft'
+
 	def set_amounts(self):
 		self.set_amounts_in_company_currency()
 		self.set_total_allocated_amount()
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index 4665d75..d85344e 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -90,7 +90,8 @@
 			FROM `tab{doc}`, `tabGL Entry`
 			WHERE
 				(`tab{doc}`.name = `tabGL Entry`.against_voucher or `tab{doc}`.name = `tabGL Entry`.voucher_no)
-				and `tab{doc}`.is_return = 1 and `tabGL Entry`.against_voucher_type = %(voucher_type)s
+				and `tab{doc}`.is_return = 1 and `tab{doc}`.return_against IS NULL
+				and `tabGL Entry`.against_voucher_type = %(voucher_type)s
 				and `tab{doc}`.docstatus = 1 and `tabGL Entry`.party = %(party)s
 				and `tabGL Entry`.party_type = %(party_type)s and `tabGL Entry`.account = %(account)s
 			GROUP BY `tab{doc}`.name
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 4ea9b1c..9c1a9ec 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -25,6 +25,7 @@
 	unlink_inter_company_doc
 from erpnext.accounts.doctype.tax_withholding_category.tax_withholding_category import get_party_tax_withholding_details
 from erpnext.accounts.deferred_revenue import validate_service_stop_date
+from erpnext.stock.doctype.purchase_receipt.purchase_receipt import get_item_account_wise_additional_cost
 
 form_grid_templates = {
 	"items": "templates/form_grid/item_grid.html"
@@ -436,6 +437,8 @@
 		if self.update_stock and self.auto_accounting_for_stock:
 			warehouse_account = get_warehouse_account_map(self.company)
 
+		landed_cost_entries = get_item_account_wise_additional_cost(self.name)
+
 		voucher_wise_stock_value = {}
 		if self.update_stock:
 			for d in frappe.get_all('Stock Ledger Entry',
@@ -463,15 +466,16 @@
 					)
 
 					# Amount added through landed-cost-voucher
-					if flt(item.landed_cost_voucher_amount):
-						gl_entries.append(self.get_gl_dict({
-							"account": expenses_included_in_valuation,
-							"against": item.expense_account,
-							"cost_center": item.cost_center,
-							"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
-							"credit": flt(item.landed_cost_voucher_amount),
-							"project": item.project
-						}, item=item))
+					if landed_cost_entries:
+						for account, amount in iteritems(landed_cost_entries[(item.item_code, item.name)]):
+							gl_entries.append(self.get_gl_dict({
+								"account": account,
+								"against": item.expense_account,
+								"cost_center": item.cost_center,
+								"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
+								"credit": flt(amount),
+								"project": item.project
+							}, item=item))
 
 					# sub-contracting warehouse
 					if flt(item.rm_supp_cost):
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
index 4e76a8d..800ed92 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js
@@ -6,8 +6,8 @@
 	add_fields: ["supplier", "supplier_name", "base_grand_total", "outstanding_amount", "due_date", "company",
 		"currency", "is_return", "release_date", "on_hold"],
 	get_indicator: function(doc) {
-		if(flt(doc.outstanding_amount) < 0 && doc.docstatus == 1) {
-			return [__("Debit Note Issued"), "darkgrey", "outstanding_amount,<,0"]
+		if( (flt(doc.outstanding_amount) <= 0) && doc.docstatus == 1 &&  doc.status == 'Debit Note Issued') {
+			return [__("Debit Note Issued"), "darkgrey", "outstanding_amount,<=,0"];
 		} else if(flt(doc.outstanding_amount) > 0 && doc.docstatus==1) {
 			if(cint(doc.on_hold) && !doc.release_date) {
 				return [__("On Hold"), "darkgrey"];
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 6deee38..b2ad4f4 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -10,7 +10,7 @@
 from frappe.utils import cint, flt, today, nowdate, add_days
 import frappe.defaults
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory, \
-	test_records as pr_test_records
+	test_records as pr_test_records, make_purchase_receipt, get_taxes
 from erpnext.controllers.accounts_controller import get_payment_terms
 from erpnext.exceptions import InvalidCurrency
 from erpnext.stock.doctype.stock_entry.test_stock_entry import get_qty_after_transaction
@@ -57,16 +57,11 @@
 			self.assertEqual([d.debit, d.credit], expected_gl_entries.get(d.account))
 
 	def test_gl_entries_with_perpetual_inventory(self):
-		pi = frappe.copy_doc(test_records[1])
-		set_perpetual_inventory(1, pi.company)
+		pi = make_purchase_invoice(company="_Test Company with perpetual inventory", supplier_warehouse="Work In Progress - TCP1", warehouse= "Stores - TCP1", cost_center = "Main - TCP1", expense_account ="_Test Account Cost for Goods Sold - TCP1", get_taxes_and_charges=True, qty=10)
 		self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pi.company)), 1)
-		pi.insert()
-		pi.submit()
 
 		self.check_gle_for_pi(pi.name)
 
-		set_perpetual_inventory(0, pi.company)
-
 	def test_terms_added_after_save(self):
 		pi = frappe.copy_doc(test_records[1])
 		pi.insert()
@@ -196,21 +191,21 @@
 		self.assertEqual(pi.on_hold, 0)
 
 	def test_gl_entries_with_perpetual_inventory_against_pr(self):
-		pr = frappe.copy_doc(pr_test_records[0])
-		set_perpetual_inventory(1, pr.company)
-		self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1)
-		pr.submit()
 
-		pi = frappe.copy_doc(test_records[1])
-		for d in pi.get("items"):
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", supplier_warehouse="Work In Progress - TCP1", warehouse= "Stores - TCP1", cost_center = "Main - TCP1", get_taxes_and_charges=True,)
+
+		self.assertTrue(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1)
+
+		pi = make_purchase_invoice(company="_Test Company with perpetual inventory", supplier_warehouse="Work In Progress - TCP1", warehouse= "Stores - TCP1", cost_center = "Main - TCP1", expense_account ="_Test Account Cost for Goods Sold - TCP1", get_taxes_and_charges=True, qty=10,do_not_save= "True")
+
+		for d in pi.items:
 			d.purchase_receipt = pr.name
+
 		pi.insert()
 		pi.submit()
 
 		self.check_gle_for_pi(pi.name)
 
-		set_perpetual_inventory(0, pr.company)
-
 	def check_gle_for_pi(self, pi):
 		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
@@ -218,10 +213,10 @@
 		self.assertTrue(gl_entries)
 
 		expected_values = dict((d[0], d) for d in [
-			["_Test Payable - _TC", 0, 720],
-			["Stock Received But Not Billed - _TC", 500.0, 0],
-			["_Test Account Shipping Charges - _TC", 100.0, 0],
-			["_Test Account VAT - _TC", 120.0, 0],
+			["Creditors - TCP1", 0, 720],
+			["Stock Received But Not Billed - TCP1", 500.0, 0],
+			["_Test Account Shipping Charges - TCP1", 100.0, 0],
+			["_Test Account VAT - TCP1", 120.0, 0],
 		])
 
 		for i, gle in enumerate(gl_entries):
@@ -524,10 +519,9 @@
 		self.assertFalse(gle)
 
 	def test_purchase_invoice_update_stock_gl_entry_with_perpetual_inventory(self):
-		set_perpetual_inventory()
 
 		pi = make_purchase_invoice(update_stock=1, posting_date=frappe.utils.nowdate(),
-			posting_time=frappe.utils.nowtime())
+			posting_time=frappe.utils.nowtime(), cash_bank_account="Cash - TCP1", company="_Test Company with perpetual inventory", supplier_warehouse="Work In Progress - TCP1", warehouse= "Stores - TCP1", cost_center = "Main - TCP1", expense_account ="_Test Account Cost for Goods Sold - TCP1")
 
 		gl_entries = frappe.db.sql("""select account, account_currency, debit, credit,
 			debit_in_account_currency, credit_in_account_currency
@@ -548,9 +542,9 @@
 			self.assertEqual(expected_gl_entries[gle.account][2], gle.credit)
 
 	def test_purchase_invoice_for_is_paid_and_update_stock_gl_entry_with_perpetual_inventory(self):
-		set_perpetual_inventory()
+
 		pi = make_purchase_invoice(update_stock=1, posting_date=frappe.utils.nowdate(),
-			posting_time=frappe.utils.nowtime(), cash_bank_account="Cash - _TC", is_paid=1)
+			posting_time=frappe.utils.nowtime(), cash_bank_account="Cash - TCP1", is_paid=1, company="_Test Company with perpetual inventory", supplier_warehouse="Work In Progress - TCP1", warehouse= "Stores - TCP1", cost_center = "Main - TCP1", expense_account ="_Test Account Cost for Goods Sold - TCP1")
 
 		gl_entries = frappe.db.sql("""select account, account_currency, sum(debit) as debit,
 				sum(credit) as credit, debit_in_account_currency, credit_in_account_currency
@@ -563,7 +557,7 @@
 		expected_gl_entries = dict((d[0], d) for d in [
 			[pi.credit_to, 250.0, 250.0],
 			[stock_in_hand_account, 250.0, 0.0],
-			["Cash - _TC", 0.0, 250.0]
+			["Cash - TCP1", 0.0, 250.0]
 		])
 
 		for i, gle in enumerate(gl_entries):
@@ -630,6 +624,7 @@
 		self.assertEqual(pi.get("items")[0].rm_supp_cost, flt(rm_supp_cost, 2))
 
 	def test_rejected_serial_no(self):
+		set_perpetual_inventory(0)
 		pi = make_purchase_invoice(item_code="_Test Serialized Item With Series", received_qty=2, qty=1,
 			rejected_qty=1, rate=500, update_stock=1,
 			rejected_warehouse = "_Test Rejected Warehouse - _TC")
@@ -881,7 +876,7 @@
 	pi.is_return = args.is_return
 	pi.return_against = args.return_against
 	pi.is_subcontracted = args.is_subcontracted or "No"
-	pi.supplier_warehouse = "_Test Warehouse 1 - _TC"
+	pi.supplier_warehouse = args.supplier_warehouse or "_Test Warehouse 1 - _TC"
 
 	pi.append("items", {
 		"item_code": args.item or args.item_code or "_Test Item",
@@ -890,14 +885,21 @@
 		"received_qty": args.received_qty or 0,
 		"rejected_qty": args.rejected_qty or 0,
 		"rate": args.rate or 50,
+		'expense_account': args.expense_account or '_Test Account Cost for Goods Sold - _TC',
 		"conversion_factor": 1.0,
 		"serial_no": args.serial_no,
 		"stock_uom": "_Test UOM",
-		"cost_center": "_Test Cost Center - _TC",
+		"cost_center": args.cost_center or "_Test Cost Center - _TC",
 		"project": args.project,
 		"rejected_warehouse": args.rejected_warehouse or "",
 		"rejected_serial_no": args.rejected_serial_no or ""
 	})
+
+	if args.get_taxes_and_charges:
+		taxes = get_taxes()
+		for tax in taxes:
+			pi.append("taxes", tax)
+
 	if not args.do_not_save:
 		pi.insert()
 		if not args.do_not_submit:
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 7d4fc63..ed45b2c 100755
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -402,14 +402,21 @@
 	for docs in doc_list:
 		for name, doc in iteritems(docs):
 			if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
-				validate_records(doc)
-				si_doc = frappe.new_doc('Sales Invoice')
-				si_doc.offline_pos_name = name
-				si_doc.update(doc)
-				si_doc.set_posting_time = 1
-				si_doc.customer = get_customer_id(doc)
-				si_doc.due_date = doc.get('posting_date')
-				name_list = submit_invoice(si_doc, name, doc, name_list)
+				if isinstance(doc, dict):
+					validate_records(doc)
+					si_doc = frappe.new_doc('Sales Invoice')
+					si_doc.offline_pos_name = name
+					si_doc.update(doc)
+					si_doc.set_posting_time = 1
+					si_doc.customer = get_customer_id(doc)
+					si_doc.due_date = doc.get('posting_date')
+					name_list = submit_invoice(si_doc, name, doc, name_list)
+				else:
+					doc.due_date = doc.get('posting_date')
+					doc.customer = get_customer_id(doc)
+					doc.set_posting_time = 1
+					doc.offline_pos_name = name
+					name_list = submit_invoice(doc, name, doc, name_list)
 			else:
 				name_list.append(name)
 
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index e1256a7..0ebca8b 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -686,7 +686,6 @@
 
 	def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False):
 		auto_accounting_for_stock = erpnext.is_perpetual_inventory_enabled(self.company)
-
 		if not gl_entries:
 			gl_entries = self.get_gl_entries()
 
@@ -1231,7 +1230,8 @@
 					self.status = "Unpaid and Discounted"
 				elif flt(self.outstanding_amount) > 0 and getdate(self.due_date) >= getdate(nowdate()):
 					self.status = "Unpaid"
-				elif flt(self.outstanding_amount) < 0 and self.is_return==0 and frappe.db.get_value('Sales Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1}):
+				#Check if outstanding amount is 0 due to credit note issued against invoice
+				elif flt(self.outstanding_amount) <= 0 and self.is_return == 0 and frappe.db.get_value('Sales Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1}):
 					self.status = "Credit Note Issued"
 				elif self.is_return == 1:
 					self.status = "Return"
diff --git a/erpnext/accounts/doctype/sales_invoice/test_records.json b/erpnext/accounts/doctype/sales_invoice/test_records.json
index 9c8de7d..ebe6e3d 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_records.json
+++ b/erpnext/accounts/doctype/sales_invoice/test_records.json
@@ -68,8 +68,6 @@
   "selling_price_list": "_Test Price List",
   "territory": "_Test Territory"
  },
- 
- 
  {
   "company": "_Test Company",
   "conversion_rate": 1.0,
@@ -276,7 +274,6 @@
 	  "uom": "_Test UOM 1",
 	  "conversion_factor": 1,
     "stock_uom": "_Test UOM 1"
-	
    },
    {
     "cost_center": "_Test Cost Center - _TC",
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 4f253b6..530bd89 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -20,6 +20,9 @@
 from six import iteritems
 from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_inter_company_transaction
 from erpnext.regional.india.utils import get_ewb_data
+from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
+from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
 
 class TestSalesInvoice(unittest.TestCase):
 	def make(self):
@@ -550,7 +553,6 @@
 		si.get("taxes")[6].tax_amount = 2
 
 		si.insert()
-		print(si.name)
 
 		expected_values = [
 			{
@@ -679,56 +681,67 @@
 		self.assertFalse(gle)
 
 	def test_pos_gl_entry_with_perpetual_inventory(self):
-		set_perpetual_inventory()
 		make_pos_profile()
 
-		self._insert_purchase_receipt()
-		pos = copy.deepcopy(test_records[1])
-		pos["is_pos"] = 1
-		pos["update_stock"] = 1
-		pos["payments"] = [{'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 300},
-							{'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 300}]
+		pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",supplier_warehouse= "Work In Progress - TCP1", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
+
+		pos = create_sales_invoice(company= "_Test Company with perpetual inventory", debit_to="Debtors - TCP1", item_code= "_Test FG Item", warehouse="Stores - TCP1", income_account = "Sales - TCP1", expense_account = "Cost of Goods Sold - TCP1", cost_center = "Main - TCP1", do_not_save=True)
+
+		pos.is_pos = 1
+		pos.update_stock = 1
+
+		pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 50})
+		pos.append("payments", {'mode_of_payment': 'Cash', 'account': 'Cash - TCP1', 'amount': 50})
+
+		taxes = get_taxes_and_charges()
+		pos.taxes = []
+		for tax in taxes:
+			pos.append("taxes", tax)
 
 		si = frappe.copy_doc(pos)
 		si.insert()
 		si.submit()
+		self.assertEqual(si.paid_amount, 100.0)
 
-		self.assertEqual(si.paid_amount, 600.0)
-
-		self.pos_gl_entry(si, pos, 300)
+		self.pos_gl_entry(si, pos, 50)
 
 	def test_pos_change_amount(self):
-		set_perpetual_inventory()
 		make_pos_profile()
 
-		self._insert_purchase_receipt()
-		pos = copy.deepcopy(test_records[1])
-		pos["is_pos"] = 1
-		pos["update_stock"] = 1
-		pos["payments"] = [{'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 300},
-							{'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 340}]
+		pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",supplier_warehouse= "Work In Progress - TCP1", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
 
-		si = frappe.copy_doc(pos)
-		si.change_amount = 5.0
-		si.insert()
-		si.submit()
+		pos = create_sales_invoice(company= "_Test Company with perpetual inventory", debit_to="Debtors - TCP1", item_code= "_Test FG Item", warehouse="Stores - TCP1", income_account = "Sales - TCP1", expense_account = "Cost of Goods Sold - TCP1", cost_center = "Main - TCP1", do_not_save=True)
 
-		self.assertEqual(si.grand_total, 630.0)
-		self.assertEqual(si.write_off_amount, -5)
+		pos.is_pos = 1
+		pos.update_stock = 1
+
+		pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 50})
+		pos.append("payments", {'mode_of_payment': 'Cash', 'account': 'Cash - TCP1', 'amount': 60})
+
+		pos.change_amount = 5.0
+		pos.insert()
+		pos.submit()
+
+		self.assertEqual(pos.grand_total, 100.0)
+		self.assertEqual(pos.write_off_amount, -5)
 
 	def test_make_pos_invoice(self):
 		from erpnext.accounts.doctype.sales_invoice.pos import make_invoice
 
-		set_perpetual_inventory()
-
 		make_pos_profile()
-		self._insert_purchase_receipt()
+		pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",supplier_warehouse= "Work In Progress - TCP1", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
+		pos = create_sales_invoice(company= "_Test Company with perpetual inventory", debit_to="Debtors - TCP1", item_code= "_Test FG Item", warehouse="Stores - TCP1", income_account = "Sales - TCP1", expense_account = "Cost of Goods Sold - TCP1", cost_center = "Main - TCP1", do_not_save=True)
 
-		pos = copy.deepcopy(test_records[1])
-		pos["is_pos"] = 1
-		pos["update_stock"] = 1
-		pos["payments"] = [{'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - _TC', 'amount': 300},
-							{'mode_of_payment': 'Cash', 'account': 'Cash - _TC', 'amount': 330}]
+		pos.is_pos = 1
+		pos.update_stock = 1
+
+		pos.append("payments", {'mode_of_payment': 'Bank Draft', 'account': '_Test Bank - TCP1', 'amount': 50})
+		pos.append("payments", {'mode_of_payment': 'Cash', 'account': 'Cash - TCP1', 'amount': 50})
+
+		taxes = get_taxes_and_charges()
+		pos.taxes = []
+		for tax in taxes:
+			pos.append("taxes", tax)
 
 		invoice_data = [{'09052016142': pos}]
 		si = make_invoice(invoice_data).get('invoice')
@@ -736,16 +749,15 @@
 
 		sales_invoice = frappe.get_all('Sales Invoice', fields =["*"], filters = {'offline_pos_name': '09052016142', 'docstatus': 1})
 		si = frappe.get_doc('Sales Invoice', sales_invoice[0].name)
-		self.assertEqual(si.grand_total, 630.0)
 
-		self.pos_gl_entry(si, pos, 330)
+		self.assertEqual(si.grand_total, 100)
+
+		self.pos_gl_entry(si, pos, 50)
 
 	def test_make_pos_invoice_in_draft(self):
 		from erpnext.accounts.doctype.sales_invoice.pos import make_invoice
 		from erpnext.stock.doctype.item.test_item import make_item
 
-		set_perpetual_inventory()
-
 		allow_negative_stock = frappe.db.get_single_value('Stock Settings', 'allow_negative_stock')
 		if allow_negative_stock:
 			frappe.db.set_value('Stock Settings', None, 'allow_negative_stock', 0)
@@ -789,7 +801,7 @@
 			si.name, as_dict=1)[0]
 		self.assertTrue(sle)
 		self.assertEqual([sle.item_code, sle.warehouse, sle.actual_qty],
-			["_Test Item", "_Test Warehouse - _TC", -1.0])
+			['_Test FG Item', 'Stores - TCP1', -1.0])
 
 		# check gl entries
 		gl_entries = frappe.db.sql("""select account, debit, credit
@@ -797,19 +809,19 @@
 			order by account asc, debit asc, credit asc""", si.name, as_dict=1)
 		self.assertTrue(gl_entries)
 
-		stock_in_hand = get_inventory_account('_Test Company')
-
+		stock_in_hand = get_inventory_account('_Test Company with perpetual inventory')
 		expected_gl_entries = sorted([
-			[si.debit_to, 630.0, 0.0],
-			[pos["items"][0]["income_account"], 0.0, 500.0],
-			[pos["taxes"][0]["account_head"], 0.0, 80.0],
-			[pos["taxes"][1]["account_head"], 0.0, 50.0],
+			[si.debit_to, 100.0, 0.0],
+			[pos.items[0].income_account, 0.0, 89.09],
+			['Round Off - TCP1', 0.0, 0.01],
+			[pos.taxes[0].account_head, 0.0, 10.69],
+			[pos.taxes[1].account_head, 0.0, 0.21],
 			[stock_in_hand, 0.0, abs(sle.stock_value_difference)],
-			[pos["items"][0]["expense_account"], abs(sle.stock_value_difference), 0.0],
-			[si.debit_to, 0.0, 300.0],
+			[pos.items[0].expense_account, abs(sle.stock_value_difference), 0.0],
+			[si.debit_to, 0.0, 50.0],
 			[si.debit_to, 0.0, cash_amount],
-			["_Test Bank - _TC", 300.0, 0.0],
-			["Cash - _TC", cash_amount, 0.0]
+			["_Test Bank - TCP1", 50, 0.0],
+			["Cash - TCP1", cash_amount, 0.0]
 		])
 
 		for i, gle in enumerate(sorted(gl_entries, key=lambda gle: gle.account)):
@@ -823,9 +835,9 @@
 
 		self.assertFalse(gle)
 
-		set_perpetual_inventory(0)
 
 		frappe.db.sql("delete from `tabPOS Profile`")
+		si.delete()
 
 	def test_pos_si_without_payment(self):
 		set_perpetual_inventory()
@@ -1008,7 +1020,6 @@
 		"""
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item
 		from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
-		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 
 		se = make_serialized_item()
@@ -1023,14 +1034,17 @@
 		self.assertEqual(si.get("items")[0].serial_no, dn.get("items")[0].serial_no)
 
 	def test_return_sales_invoice(self):
-		set_perpetual_inventory()
-		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, basic_rate=100)
+		make_stock_entry(item_code="_Test Item", target="Stores - TCP1", qty=50, basic_rate=100)
 
-		actual_qty_0 = get_qty_after_transaction()
+		actual_qty_0 = get_qty_after_transaction(item_code = "_Test Item", warehouse = "Stores - TCP1")
 
-		si = create_sales_invoice(qty=5, rate=500, update_stock=1)
+		si = create_sales_invoice(qty = 5, rate=500, update_stock=1, company= "_Test Company with perpetual inventory", debit_to="Debtors - TCP1", item_code= "_Test Item", warehouse="Stores - TCP1", income_account = "Sales - TCP1", expense_account = "Cost of Goods Sold - TCP1", cost_center = "Main - TCP1")
 
-		actual_qty_1 = get_qty_after_transaction()
+
+		actual_qty_1 = get_qty_after_transaction(item_code = "_Test Item", warehouse = "Stores - TCP1")
+
+		frappe.db.commit()
+
 		self.assertEqual(actual_qty_0 - 5, actual_qty_1)
 
 		# outgoing_rate
@@ -1038,10 +1052,9 @@
 			"voucher_no": si.name}, "stock_value_difference") / 5
 
 		# return entry
-		si1 = create_sales_invoice(is_return=1, return_against=si.name, qty=-2, rate=500, update_stock=1)
+		si1 = create_sales_invoice(is_return=1, return_against=si.name, qty=-2, rate=500, update_stock=1, company= "_Test Company with perpetual inventory", debit_to="Debtors - TCP1", item_code= "_Test Item", warehouse="Stores - TCP1", income_account = "Sales - TCP1", expense_account = "Cost of Goods Sold - TCP1", cost_center = "Main - TCP1")
 
-		actual_qty_2 = get_qty_after_transaction()
-
+		actual_qty_2 = get_qty_after_transaction(item_code = "_Test Item", warehouse = "Stores - TCP1")
 		self.assertEqual(actual_qty_1 + 2, actual_qty_2)
 
 		incoming_rate, stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
@@ -1049,7 +1062,7 @@
 			["incoming_rate", "stock_value_difference"])
 
 		self.assertEqual(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
-		stock_in_hand_account = get_inventory_account('_Test Company', si1.items[0].warehouse)
+		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory', si1.items[0].warehouse)
 
 		# Check gl entry
 		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice",
@@ -1058,7 +1071,7 @@
 		self.assertEqual(gle_warehouse_amount, stock_value_difference)
 
 		party_credited = frappe.db.get_value("GL Entry", {"voucher_type": "Sales Invoice",
-			"voucher_no": si1.name, "account": "Debtors - _TC", "party": "_Test Customer"}, "credit")
+			"voucher_no": si1.name, "account": "Debtors - TCP1", "party": "_Test Customer"}, "credit")
 
 		self.assertEqual(party_credited, 1000)
 
@@ -1066,7 +1079,6 @@
 		self.assertFalse(si1.outstanding_amount)
 		self.assertEqual(frappe.db.get_value("Sales Invoice", si.name, "outstanding_amount"), 1500)
 
-		set_perpetual_inventory(0)
 
 	def test_discount_on_net_total(self):
 		si = frappe.copy_doc(test_records[2])
@@ -1524,6 +1536,8 @@
 		self.assertEqual(si.total_taxes_and_charges, 577.05)
 		self.assertEqual(si.grand_total, 1827.05)
 
+
+
 	def test_create_invoice_without_terms(self):
 		si = create_sales_invoice(do_not_save=1)
 		self.assertFalse(si.get('payment_schedule'))
@@ -1930,4 +1944,29 @@
 	if against_voucher_type == 'Purchase Invoice':
 		bal = bal * -1
 
-	return bal
\ No newline at end of file
+	return bal
+
+def get_taxes_and_charges():
+	return [{
+	"account_head": "_Test Account Excise Duty - TCP1",
+	"charge_type": "On Net Total",
+	"cost_center": "Main - TCP1",
+	"description": "Excise Duty",
+	"doctype": "Sales Taxes and Charges",
+	"idx": 1,
+	"included_in_print_rate": 1,
+	"parentfield": "taxes",
+	"rate": 12
+	},
+	{
+	"account_head": "_Test Account Education Cess - TCP1",
+	"charge_type": "On Previous Row Amount",
+	"cost_center": "Main - TCP1",
+	"description": "Education Cess",
+	"doctype": "Sales Taxes and Charges",
+	"idx": 2,
+	"included_in_print_rate": 1,
+	"parentfield": "taxes",
+	"rate": 2,
+	"row_id": 1
+   }]
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.js b/erpnext/accounts/doctype/share_transfer/share_transfer.js
index 364ca6f..1cad4df 100644
--- a/erpnext/accounts/doctype/share_transfer/share_transfer.js
+++ b/erpnext/accounts/doctype/share_transfer/share_transfer.js
@@ -21,6 +21,8 @@
 				erpnext.share_transfer.make_jv(frm);
 			});
 		}
+
+		frm.toggle_reqd("asset_account", frm.doc.transfer_type != "Transfer");
 	},
 	no_of_shares: (frm) => {
 		if (frm.doc.rate != undefined || frm.doc.rate != null){
@@ -56,6 +58,10 @@
 				};
 			});
 		}
+	},
+
+	transfer_type: function(frm) {
+		frm.toggle_reqd("asset_account", frm.doc.transfer_type != "Transfer");
 	}
 });
 
diff --git a/erpnext/accounts/doctype/share_transfer/share_transfer.json b/erpnext/accounts/doctype/share_transfer/share_transfer.json
index 24c4569..f17bf04 100644
--- a/erpnext/accounts/doctype/share_transfer/share_transfer.json
+++ b/erpnext/accounts/doctype/share_transfer/share_transfer.json
@@ -1,881 +1,239 @@
 {
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "autoname": "ACC-SHT-.YYYY.-.#####", 
- "beta": 0, 
- "creation": "2017-12-25 17:18:03.143726", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
+ "autoname": "ACC-SHT-.YYYY.-.#####",
+ "creation": "2017-12-25 17:18:03.143726",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "transfer_type",
+  "column_break_1",
+  "date",
+  "section_break_1",
+  "from_shareholder",
+  "from_folio_no",
+  "column_break_3",
+  "to_shareholder",
+  "to_folio_no",
+  "section_break_10",
+  "equity_or_liability_account",
+  "column_break_12",
+  "asset_account",
+  "section_break_4",
+  "share_type",
+  "from_no",
+  "rate",
+  "column_break_8",
+  "no_of_shares",
+  "to_no",
+  "amount",
+  "section_break_11",
+  "company",
+  "section_break_6",
+  "remarks",
+  "amended_from"
+ ],
  "fields": [
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "transfer_type", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Transfer Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "\nIssue\nPurchase\nTransfer", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "transfer_type",
+   "fieldtype": "Select",
+   "in_list_view": 1,
+   "label": "Transfer Type",
+   "options": "\nIssue\nPurchase\nTransfer",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_1", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "column_break_1",
+   "fieldtype": "Column Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "date", 
-   "fieldtype": "Date", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Date", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "date",
+   "fieldtype": "Date",
+   "label": "Date",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_1", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "section_break_1",
+   "fieldtype": "Section Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.transfer_type != 'Issue'", 
-   "fieldname": "from_shareholder", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "From Shareholder", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Shareholder", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "depends_on": "eval:doc.transfer_type != 'Issue'",
+   "fieldname": "from_shareholder",
+   "fieldtype": "Link",
+   "label": "From Shareholder",
+   "options": "Shareholder"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.transfer_type != 'Issue'", 
-   "fetch_from": "from_shareholder.folio_no", 
-   "fieldname": "from_folio_no", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "From Folio No", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "depends_on": "eval:doc.transfer_type != 'Issue'",
+   "fetch_from": "from_shareholder.folio_no",
+   "fieldname": "from_folio_no",
+   "fieldtype": "Data",
+   "label": "From Folio No"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.company", 
-   "fieldname": "equity_or_liability_account", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Equity/Liability Account", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Account", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "depends_on": "eval:doc.company",
+   "fieldname": "equity_or_liability_account",
+   "fieldtype": "Link",
+   "label": "Equity/Liability Account",
+   "options": "Account",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:(doc.transfer_type != 'Transfer') && (doc.company)", 
-   "fieldname": "asset_account", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Asset Account", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Account", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "depends_on": "eval:(doc.transfer_type != 'Transfer') && (doc.company)",
+   "fieldname": "asset_account",
+   "fieldtype": "Link",
+   "label": "Asset Account",
+   "options": "Account"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "column_break_3",
+   "fieldtype": "Column Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.transfer_type != 'Purchase'", 
-   "fieldname": "to_shareholder", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "To Shareholder", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Shareholder", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "depends_on": "eval:doc.transfer_type != 'Purchase'",
+   "fieldname": "to_shareholder",
+   "fieldtype": "Link",
+   "label": "To Shareholder",
+   "options": "Shareholder"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "eval:doc.transfer_type != 'Purchase'", 
-   "fetch_from": "to_shareholder.folio_no", 
-   "fieldname": "to_folio_no", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "To Folio No", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "depends_on": "eval:doc.transfer_type != 'Purchase'",
+   "fetch_from": "to_shareholder.folio_no",
+   "fieldname": "to_folio_no",
+   "fieldtype": "Data",
+   "label": "To Folio No"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_4", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "section_break_4",
+   "fieldtype": "Section Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "share_type", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Share Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Share Type", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "share_type",
+   "fieldtype": "Link",
+   "label": "Share Type",
+   "options": "Share Type",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "(including)", 
-   "fieldname": "from_no", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "From No", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "description": "(including)",
+   "fieldname": "from_no",
+   "fieldtype": "Int",
+   "label": "From No",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "rate", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Rate", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "rate",
+   "fieldtype": "Currency",
+   "label": "Rate",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_8", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "column_break_8",
+   "fieldtype": "Column Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "no_of_shares", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "No of Shares", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "no_of_shares",
+   "fieldtype": "Int",
+   "label": "No of Shares",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "description": "(including)", 
-   "fieldname": "to_no", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "To No", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "description": "(including)",
+   "fieldname": "to_no",
+   "fieldtype": "Int",
+   "label": "To No",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "amount",
+   "fieldtype": "Currency",
+   "label": "Amount",
+   "read_only": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_11", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "section_break_11",
+   "fieldtype": "Section Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "company", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Company", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "company",
+   "fieldtype": "Link",
+   "label": "Company",
+   "options": "Company",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "section_break_6", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "section_break_6",
+   "fieldtype": "Section Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "remarks", 
-   "fieldtype": "Long Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Remarks", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "remarks",
+   "fieldtype": "Long Text",
+   "label": "Remarks"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amended_from", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Amended From", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "Share Transfer", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
+   "fieldname": "amended_from",
+   "fieldtype": "Link",
+   "label": "Amended From",
+   "no_copy": 1,
+   "options": "Share Transfer",
+   "print_hide": 1,
+   "read_only": 1
+  },
+  {
+   "fieldname": "section_break_10",
+   "fieldtype": "Section Break"
+  },
+  {
+   "fieldname": "column_break_12",
+   "fieldtype": "Column Break"
   }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 1, 
- "issingle": 0, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2018-09-18 14:14:46.233568", 
- "modified_by": "Administrator", 
- "module": "Accounts", 
- "name": "Share Transfer", 
- "name_case": "", 
- "owner": "Administrator", 
+ ],
+ "is_submittable": 1,
+ "modified": "2019-11-07 13:31:17.999744",
+ "modified_by": "Administrator",
+ "module": "Accounts",
+ "name": "Share Transfer",
+ "owner": "Administrator",
  "permissions": [
   {
-   "amend": 1, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "System Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 1, 
+   "amend": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "System Manager",
+   "share": 1,
+   "submit": 1,
    "write": 1
-  }, 
+  },
   {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Accounts User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Accounts User",
+   "share": 1,
    "write": 1
-  }, 
+  },
   {
-   "amend": 0, 
-   "cancel": 0, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Accounts Manager", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Accounts Manager",
+   "share": 1,
    "write": 1
   }
- ], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0, 
- "track_views": 0
+ ],
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
index 582ecb2..abc6ab8 100644
--- a/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
+++ b/erpnext/accounts/doctype/shipping_rule/test_shipping_rule.py
@@ -14,13 +14,13 @@
 		shipping_rule.name = test_records[0].get('name')
 		shipping_rule.get("conditions")[0].from_value = 101
 		self.assertRaises(FromGreaterThanToError, shipping_rule.insert)
-		
+
 	def test_many_zero_to_values(self):
 		shipping_rule = frappe.copy_doc(test_records[0])
 		shipping_rule.name = test_records[0].get('name')
 		shipping_rule.get("conditions")[0].to_value = 0
 		self.assertRaises(ManyBlankToValuesError, shipping_rule.insert)
-		
+
 	def test_overlapping_conditions(self):
 		for range_a, range_b in [
 			((50, 150), (0, 100)),
@@ -38,6 +38,10 @@
 			self.assertRaises(OverlappingConditionError, shipping_rule.insert)
 
 def create_shipping_rule(shipping_rule_type, shipping_rule_name):
+
+	if frappe.db.exists("Shipping Rule", shipping_rule_name):
+		return frappe.get_doc("Shipping Rule", shipping_rule_name)
+
 	sr = frappe.new_doc("Shipping Rule")
 	sr.account =  "_Test Account Shipping Charges - _TC"
 	sr.calculate_based_on =  "Net Total"
@@ -70,4 +74,4 @@
 		})
 	sr.insert(ignore_permissions=True)
 	sr.submit()
-	return sr			
+	return sr
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 5c9e93d..43d9ad6 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -3,8 +3,9 @@
 
 from __future__ import unicode_literals
 import frappe, erpnext
-from frappe.utils import flt, cstr, cint
+from frappe.utils import flt, cstr, cint, comma_and
 from frappe import _
+from erpnext.accounts.utils import get_stock_and_account_balance
 from frappe.model.meta import get_field_precision
 from erpnext.accounts.doctype.budget.budget import validate_expense_against_budget
 from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
@@ -12,6 +13,7 @@
 
 class ClosedAccountingPeriod(frappe.ValidationError): pass
 class StockAccountInvalidTransaction(frappe.ValidationError): pass
+class StockValueAndAccountBalanceOutOfSync(frappe.ValidationError): pass
 
 def make_gl_entries(gl_map, cancel=False, adv_adj=False, merge_entries=True, update_outstanding='Yes', from_repost=False):
 	if gl_map:
@@ -115,11 +117,9 @@
 
 def save_entries(gl_map, adv_adj, update_outstanding, from_repost=False):
 	if not from_repost:
-		validate_account_for_perpetual_inventory(gl_map)
 		validate_cwip_accounts(gl_map)
 
 	round_off_debit_credit(gl_map)
-
 	for entry in gl_map:
 		make_entry(entry, adv_adj, update_outstanding, from_repost)
 
@@ -127,6 +127,10 @@
 		if not from_repost:
 			validate_expense_against_budget(entry)
 
+	if not from_repost:
+		validate_account_for_perpetual_inventory(gl_map)
+
+
 def make_entry(args, adv_adj, update_outstanding, from_repost=False):
 	args.update({"doctype": "GL Entry"})
 	gle = frappe.get_doc(args)
@@ -137,15 +141,31 @@
 	gle.submit()
 
 def validate_account_for_perpetual_inventory(gl_map):
-	if cint(erpnext.is_perpetual_inventory_enabled(gl_map[0].company)) \
-		and gl_map[0].voucher_type=="Journal Entry":
-			aii_accounts = [d[0] for d in frappe.db.sql("""select name from tabAccount
-				where account_type = 'Stock' and is_group=0""")]
+	if cint(erpnext.is_perpetual_inventory_enabled(gl_map[0].company)):
+		account_list = [gl_entries.account for gl_entries in gl_map]
 
-			for entry in gl_map:
-				if entry.account in aii_accounts:
+		aii_accounts = [d.name for d in frappe.get_all("Account",
+			filters={'account_type': 'Stock', 'is_group': 0, 'company': gl_map[0].company})]
+
+		for account in account_list:
+			if account not in aii_accounts:
+				continue
+
+			account_bal, stock_bal, warehouse_list = get_stock_and_account_balance(account,
+				gl_map[0].posting_date, gl_map[0].company)
+
+			if gl_map[0].voucher_type=="Journal Entry":
+				# In case of Journal Entry, there are no corresponding SL entries,
+				# hence deducting currency amount
+				account_bal -= flt(gl_map[0].debit) - flt(gl_map[0].credit)
+				if account_bal == stock_bal:
 					frappe.throw(_("Account: {0} can only be updated via Stock Transactions")
-						.format(entry.account), StockAccountInvalidTransaction)
+						.format(account), StockAccountInvalidTransaction)
+
+			elif account_bal != stock_bal:
+				frappe.throw(_("Account Balance ({0}) and Stock Value ({1}) is out of sync for account {2} and linked warehouse ({3}). Please create adjustment Journal Entry for amount {4}.")
+					.format(account_bal, stock_bal, account, comma_and(warehouse_list), stock_bal - account_bal),
+					StockValueAndAccountBalanceOutOfSync)
 
 def validate_cwip_accounts(gl_map):
 	if not cint(frappe.db.get_value("Asset Settings", None, "disable_cwip_accounting")) \
diff --git a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js
index 6eafa0d..854b973 100644
--- a/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js
+++ b/erpnext/accounts/page/bank_reconciliation/bank_reconciliation.js
@@ -139,15 +139,11 @@
 	}
 
 	make() {
-		const me = this;
-		frappe.upload.make({
-			args: {
-				method: 'erpnext.accounts.doctype.bank_transaction.bank_transaction_upload.upload_bank_statement',
-				allow_multiple: 0
-			},
-			no_socketio: true,
-			sample_url: "e.g. http://example.com/somefile.csv",
-			callback: function(attachment, r) {
+		const me = this;	
+		new frappe.ui.FileUploader({
+			method: 'erpnext.accounts.doctype.bank_transaction.bank_transaction_upload.upload_bank_statement',
+			allow_multiple: 0,
+			on_success: function(attachment, r) {
 				if (!r.exc && r.message) {
 					me.data = r.message;
 					me.setup_transactions_dom();
@@ -575,4 +571,4 @@
 		}
 
 	}
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
index 228be18..9b4dda2 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
@@ -79,13 +79,20 @@
 			"options": "Customer",
 			on_change: () => {
 				var customer = frappe.query_report.get_filter_value('customer');
+				var company = frappe.query_report.get_filter_value('company');
 				if (customer) {
-					frappe.db.get_value('Customer', customer, ["tax_id", "customer_name", "credit_limit", "payment_terms"], function(value) {
+					frappe.db.get_value('Customer', customer, ["tax_id", "customer_name", "payment_terms"], function(value) {
 						frappe.query_report.set_filter_value('tax_id', value["tax_id"]);
 						frappe.query_report.set_filter_value('customer_name', value["customer_name"]);
-						frappe.query_report.set_filter_value('credit_limit', value["credit_limit"]);
 						frappe.query_report.set_filter_value('payment_terms', value["payment_terms"]);
 					});
+
+					frappe.db.get_value('Customer Credit Limit', {'parent': customer, 'company': company}, 
+						["credit_limit"], function(value) {
+						if (value) {
+							frappe.query_report.set_filter_value('credit_limit', value["credit_limit"]);
+						}
+					}, "Customer");
 				} else {
 					frappe.query_report.set_filter_value('tax_id', "");
 					frappe.query_report.set_filter_value('customer_name', "");
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
index 10e977a..faeee0f 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.py
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -76,8 +76,7 @@
 	accumulate_values_into_parents(accounts, accounts_by_name)
 
 	data = prepare_data(accounts, filters, total_row, parent_children_map, company_currency)
-	data = filter_out_zero_value_rows(data, parent_children_map,
-		show_zero_values=filters.get("show_zero_values"))
+	data = filter_out_zero_value_rows(data, parent_children_map, show_zero_values=filters.get("show_zero_values"))
 
 	return data
 
@@ -187,33 +186,11 @@
 
 		d["closing_debit"] = d["opening_debit"] + d["debit"]
 		d["closing_credit"] = d["opening_credit"] + d["credit"]
-		total_row["debit"] += d["debit"]
-		total_row["credit"] += d["credit"]
 
-		if d["root_type"] == "Asset" or d["root_type"] == "Equity" or d["root_type"] == "Expense":
-			d["opening_debit"] -= d["opening_credit"]
-			d["closing_debit"] -= d["closing_credit"]
+		prepare_opening_closing(d)
 
-			# For opening
-			check_opening_closing_has_negative_value(d, "opening_debit", "opening_credit")
-
-			# For closing
-			check_opening_closing_has_negative_value(d, "closing_debit", "closing_credit")
-
-		if d["root_type"] == "Liability" or d["root_type"] == "Income":
-			d["opening_credit"] -= d["opening_debit"]
-			d["closing_credit"] -= d["closing_debit"]
-
-			# For opening
-			check_opening_closing_has_negative_value(d, "opening_credit", "opening_debit")
-
-			# For closing
-			check_opening_closing_has_negative_value(d, "closing_credit", "closing_debit")
-
-		total_row["opening_debit"] += d["opening_debit"]
-		total_row["closing_debit"] += d["closing_debit"]
-		total_row["opening_credit"] += d["opening_credit"]
-		total_row["closing_credit"] += d["closing_credit"]
+		for field in value_fields:
+			total_row[field] += d[field]
 
 	return total_row
 
@@ -227,6 +204,10 @@
 	data = []
 
 	for d in accounts:
+		# Prepare opening closing for group account
+		if parent_children_map.get(d.account):
+			prepare_opening_closing(d)
+
 		has_value = False
 		row = {
 			"account": d.name,
@@ -313,11 +294,16 @@
 		}
 	]
 
-def check_opening_closing_has_negative_value(d, dr_or_cr, switch_to_column):
-	# If opening debit has negetive value then move it to opening credit and vice versa.
+def prepare_opening_closing(row):
+	dr_or_cr = "debit" if row["root_type"] in ["Asset", "Equity", "Expense"] else "credit"
+	reverse_dr_or_cr = "credit" if dr_or_cr == "debit" else "debit"
 
-	if d[dr_or_cr] < 0:
-		d[switch_to_column] = abs(d[dr_or_cr])
-		d[dr_or_cr] = 0.0
-	else:
-		d[switch_to_column] = 0.0
+	for col_type in ["opening", "closing"]:
+		valid_col = col_type + "_" + dr_or_cr
+		reverse_col = col_type + "_" + reverse_dr_or_cr
+		row[valid_col] -= row[reverse_col]
+		if row[valid_col] < 0:
+			row[reverse_col] = abs(row[valid_col])
+			row[valid_col] = 0.0
+		else:
+			row[reverse_col] = 0.0
\ No newline at end of file
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index ac69fd3..382a89b 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -13,6 +13,10 @@
 # imported to enable erpnext.accounts.utils.get_account_currency
 from erpnext.accounts.doctype.account.account import get_account_currency
 
+from erpnext.stock.utils import get_stock_value_on
+from erpnext.stock import get_warehouse_account_map
+
+
 class FiscalYearError(frappe.ValidationError): pass
 
 @frappe.whitelist()
@@ -560,23 +564,23 @@
 				(dr_or_cr, dr_or_cr, '%s', '%s', '%s', dr_or_cr),
 				(d.diff, d.voucher_type, d.voucher_no))
 
-def get_stock_and_account_difference(account_list=None, posting_date=None, company=None):
-	from erpnext.stock.utils import get_stock_value_on
-	from erpnext.stock import get_warehouse_account_map
-
+def get_stock_and_account_balance(account=None, posting_date=None, company=None):
 	if not posting_date: posting_date = nowdate()
 
-	difference = {}
 	warehouse_account = get_warehouse_account_map(company)
 
-	for warehouse, account_data in iteritems(warehouse_account):
-		if account_data.get('account') in account_list:
-			account_balance = get_balance_on(account_data.get('account'), posting_date, in_account_currency=False)
-			stock_value = get_stock_value_on(warehouse, posting_date)
-			if abs(flt(stock_value) - flt(account_balance)) > 0.005:
-				difference.setdefault(account_data.get('account'), flt(stock_value) - flt(account_balance))
+	account_balance = get_balance_on(account, posting_date, in_account_currency=False)
 
-	return difference
+	related_warehouses = [wh for wh, wh_details in warehouse_account.items()
+		if wh_details.account == account and not wh_details.is_group]
+
+	total_stock_value = 0.0
+	for warehouse in related_warehouses:
+		value = get_stock_value_on(warehouse, posting_date)
+		total_stock_value += value
+
+	precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
+	return flt(account_balance, precision), flt(total_stock_value, precision), related_warehouses
 
 def get_currency_precision():
 	precision = cint(frappe.db.get_default("currency_precision"))
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 320a618..9415228 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1172,6 +1172,7 @@
 def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, child_docname="items"):
 	data = json.loads(trans_items)
 
+	sales_doctypes = ['Sales Order', 'Sales Invoice', 'Delivery Note', 'Quotation']
 	parent = frappe.get_doc(parent_doctype, parent_doctype_name)
 
 	for d in data:
@@ -1192,8 +1193,9 @@
 			frappe.throw(_("Cannot set quantity less than received quantity"))
 
 		child_item.qty = flt(d.get("qty"))
+		precision = child_item.precision("rate") or 2
 
-		if flt(child_item.billed_amt) > (flt(d.get("rate")) * flt(d.get("qty"))):
+		if flt(child_item.billed_amt, precision) > flt(flt(d.get("rate")) * flt(d.get("qty")), precision):
 			frappe.throw(_("Row #{0}: Cannot set Rate if amount is greater than billed amount for Item {1}.")
 						 .format(child_item.idx, child_item.item_code))
 		else:
@@ -1204,18 +1206,22 @@
 				#  if rate is greater than price_list_rate, set margin
 				#  or set discount
 				child_item.discount_percentage = 0
-				child_item.margin_type = "Amount"
-				child_item.margin_rate_or_amount = flt(child_item.rate - child_item.price_list_rate,
-					child_item.precision("margin_rate_or_amount"))
-				child_item.rate_with_margin = child_item.rate
+
+				if parent_doctype in sales_doctypes:
+					child_item.margin_type = "Amount"
+					child_item.margin_rate_or_amount = flt(child_item.rate - child_item.price_list_rate,
+						child_item.precision("margin_rate_or_amount"))
+					child_item.rate_with_margin = child_item.rate
 			else:
 				child_item.discount_percentage = flt((1 - flt(child_item.rate) / flt(child_item.price_list_rate)) * 100.0,
 					child_item.precision("discount_percentage"))
 				child_item.discount_amount = flt(
 					child_item.price_list_rate) - flt(child_item.rate)
-				child_item.margin_type = ""
-				child_item.margin_rate_or_amount = 0
-				child_item.rate_with_margin = 0
+
+				if parent_doctype in sales_doctypes:
+					child_item.margin_type = ""
+					child_item.margin_rate_or_amount = 0
+					child_item.rate_with_margin = 0
 
 		child_item.flags.ignore_validate_update_after_submit = True
 		if new_child_flag:
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index 2f6b59f..a9e50ba 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -152,6 +152,20 @@
 def item_query(doctype, txt, searchfield, start, page_len, filters, as_dict=False):
 	conditions = []
 
+	#Get searchfields from meta and use in Item Link field query
+	meta = frappe.get_meta("Item", cached=True)
+	searchfields = meta.get_search_fields()
+
+	if "description" in searchfields:
+		searchfields.remove("description")
+
+	columns = [field for field in searchfields if not field in ["name", "item_group", "description"]]
+	columns = ", ".join(columns)
+
+	searchfields = searchfields + [field for field in[searchfield or "name", "item_code", "item_group", "item_name"]
+		if not field in searchfields]
+	searchfields = " or ".join([field + " like %(txt)s" for field in searchfields])
+
 	description_cond = ''
 	if frappe.db.count('Item', cache=True) < 50000:
 		# scan description only if items are less than 50000
@@ -162,17 +176,14 @@
 			concat(substr(tabItem.item_name, 1, 40), "..."), item_name) as item_name,
 		tabItem.item_group,
 		if(length(tabItem.description) > 40, \
-			concat(substr(tabItem.description, 1, 40), "..."), description) as decription
+			concat(substr(tabItem.description, 1, 40), "..."), description) as description,
+		{columns}
 		from tabItem
 		where tabItem.docstatus < 2
 			and tabItem.has_variants=0
 			and tabItem.disabled=0
 			and (tabItem.end_of_life > %(today)s or ifnull(tabItem.end_of_life, '0000-00-00')='0000-00-00')
-			and (tabItem.`{key}` LIKE %(txt)s
-				or tabItem.item_code LIKE %(txt)s
-				or tabItem.item_group LIKE %(txt)s
-				or tabItem.item_name LIKE %(txt)s
-				or tabItem.item_code IN (select parent from `tabItem Barcode` where barcode LIKE %(txt)s)
+			and ({scond} or tabItem.item_code IN (select parent from `tabItem Barcode` where barcode LIKE %(txt)s)
 				{description_cond})
 			{fcond} {mcond}
 		order by
@@ -182,6 +193,8 @@
 			name, item_name
 		limit %(start)s, %(page_len)s """.format(
 			key=searchfield,
+			columns=columns,
+			scond=searchfields,
 			fcond=get_filters_cond(doctype, filters, conditions).replace('%', '%%'),
 			mcond=get_match_cond(doctype).replace('%', '%%'),
 			description_cond = description_cond),
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 9d1389c..2b2c27b 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -49,7 +49,8 @@
 		["Submitted", "eval:self.docstatus==1"],
 		["Paid", "eval:self.outstanding_amount==0 and self.docstatus==1"],
 		["Return", "eval:self.is_return==1 and self.docstatus==1"],
-		["Debit Note Issued", "eval:self.outstanding_amount < 0 and self.docstatus==1"],
+		["Debit Note Issued",
+		 "eval:self.outstanding_amount <= 0 and self.docstatus==1 and self.is_return==0 and get_value('Purchase Invoice', {'is_return': 1, 'return_against': self.name, 'docstatus': 1})"],
 		["Unpaid", "eval:self.outstanding_amount > 0 and getdate(self.due_date) >= getdate(nowdate()) and self.docstatus==1"],
 		["Overdue", "eval:self.outstanding_amount > 0 and getdate(self.due_date) < getdate(nowdate()) and self.docstatus==1"],
 		["Cancelled", "eval:self.docstatus==2"],
@@ -118,7 +119,6 @@
 
 		if self.doctype in status_map:
 			_status = self.status
-
 			if status and update:
 				self.db_set("status", status)
 
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 2d87a98..542073e 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -207,41 +207,6 @@
 						reference_doctype=self.doctype,
 						reference_name=self.name)).insert().name
 
-	def make_adjustment_entry(self, expected_gle, voucher_obj):
-		from erpnext.accounts.utils import get_stock_and_account_difference
-		account_list = [d.account for d in expected_gle]
-		acc_diff = get_stock_and_account_difference(account_list,
-			expected_gle[0].posting_date, self.company)
-
-		cost_center = self.get_company_default("cost_center")
-		stock_adjustment_account = self.get_company_default("stock_adjustment_account")
-
-		gl_entries = []
-		for account, diff in acc_diff.items():
-			if diff:
-				gl_entries.append([
-					# stock in hand account
-					voucher_obj.get_gl_dict({
-						"account": account,
-						"against": stock_adjustment_account,
-						"debit": diff,
-						"remarks": "Adjustment Accounting Entry for Stock",
-					}),
-
-					# account against stock in hand
-					voucher_obj.get_gl_dict({
-						"account": stock_adjustment_account,
-						"against": account,
-						"credit": diff,
-						"cost_center": cost_center or None,
-						"remarks": "Adjustment Accounting Entry for Stock",
-					}),
-				])
-
-		if gl_entries:
-			from erpnext.accounts.general_ledger import make_gl_entries
-			make_gl_entries(gl_entries)
-
 	def check_expense_account(self, item):
 		if not item.get("expense_account"):
 			frappe.throw(_("Expense or Difference account is mandatory for Item {0} as it impacts overall stock value").format(item.item_code))
diff --git a/erpnext/education/doctype/education_settings/education_settings.json b/erpnext/education/doctype/education_settings/education_settings.json
index 32b5fb8..967a030 100644
--- a/erpnext/education/doctype/education_settings/education_settings.json
+++ b/erpnext/education/doctype/education_settings/education_settings.json
@@ -11,6 +11,7 @@
   "validate_batch",
   "validate_course",
   "academic_term_reqd",
+  "user_creation_skip",
   "section_break_7",
   "instructor_created_by",
   "web_academy_settings_section",
@@ -91,6 +92,13 @@
    "fieldname": "enable_lms",
    "fieldtype": "Check",
    "label": "Enable LMS"
+  },
+  {
+   "default": "0",
+   "description": "By default, a new User is created for every new Student. If enabled, no new User will be created when a new Student is created.",
+   "fieldname": "user_creation_skip",
+   "fieldtype": "Check",
+   "label": "Skip User creation for new Student"
   }
  ],
  "issingle": 1,
@@ -133,4 +141,4 @@
  "sort_field": "modified",
  "sort_order": "DESC",
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/education/doctype/student/student.js b/erpnext/education/doctype/student/student.js
index 2c933e2..b6e741c 100644
--- a/erpnext/education/doctype/student/student.js
+++ b/erpnext/education/doctype/student/student.js
@@ -27,3 +27,16 @@
 		}
 	}
 });
+
+frappe.ui.form.on('Student Guardian', {
+	guardians_add: function(frm){
+		frm.fields_dict['guardians'].grid.get_field('guardian').get_query = function(doc){
+			var guardian_list = [];
+			if(!doc.__islocal) guardian_list.push(doc.guardian);
+			$.each(doc.guardians, function(idx, val){
+				if (val.guardian) guardian_list.push(val.guardian);
+			});
+			return { filters: [['Guardian', 'name', 'not in', guardian_list]] };
+		};
+	}
+});
diff --git a/erpnext/education/doctype/student/student.py b/erpnext/education/doctype/student/student.py
index 705c6e4..9af5e22 100644
--- a/erpnext/education/doctype/student/student.py
+++ b/erpnext/education/doctype/student/student.py
@@ -40,7 +40,8 @@
 			frappe.throw(_("Student {0} exist against student applicant {1}").format(student[0][0], self.student_applicant))
 
 	def after_insert(self):
-		self.create_student_user()
+		if not frappe.get_single('Education Settings').user_creation_skip:
+			self.create_student_user()
 
 	def create_student_user(self):
 		"""Create a website user for student creation if not already exists"""
diff --git a/erpnext/erpnext_integrations/connectors/woocommerce_connection.py b/erpnext/erpnext_integrations/connectors/woocommerce_connection.py
index 0b6ea8c..28c2ab9 100644
--- a/erpnext/erpnext_integrations/connectors/woocommerce_connection.py
+++ b/erpnext/erpnext_integrations/connectors/woocommerce_connection.py
@@ -1,10 +1,8 @@
 
 from __future__ import unicode_literals
 import frappe, base64, hashlib, hmac, json
-import datetime
 from frappe import _
 
-
 def verify_request():
 	woocommerce_settings = frappe.get_doc("Woocommerce Settings")
 	sig = base64.b64encode(
@@ -30,191 +28,149 @@
 		frappe.log_error(error_message, "WooCommerce Error")
 		raise
 
-
 def _order(*args, **kwargs):
 	woocommerce_settings = frappe.get_doc("Woocommerce Settings")
 	if frappe.flags.woocomm_test_order_data:
-		fd = frappe.flags.woocomm_test_order_data
+		order = frappe.flags.woocomm_test_order_data
 		event = "created"
 
 	elif frappe.request and frappe.request.data:
 		verify_request()
-		fd = json.loads(frappe.request.data)
+		try:
+			order = json.loads(frappe.request.data)
+		except ValueError:
+			#woocommerce returns 'webhook_id=value' for the first request which is not JSON
+			order = frappe.request.data
 		event = frappe.get_request_header("X-Wc-Webhook-Event")
 
 	else:
 		return "success"
 
 	if event == "created":
-		raw_billing_data = fd.get("billing")
-		customer_woo_com_email = raw_billing_data.get("email")
-
-		if frappe.get_value("Customer",{"woocommerce_email": customer_woo_com_email}):
-			# Edit
-			link_customer_and_address(raw_billing_data,1)
-		else:
-			# Create
-			link_customer_and_address(raw_billing_data,0)
-
-
-		items_list = fd.get("line_items")
-		for item in items_list:
-
-			item_woo_com_id = item.get("product_id")
-
-			if frappe.get_value("Item",{"woocommerce_id": item_woo_com_id}):
-				#Edit
-				link_item(item,1)
-			else:
-				link_item(item,0)
-
-
+		raw_billing_data = order.get("billing")
 		customer_name = raw_billing_data.get("first_name") + " " + raw_billing_data.get("last_name")
+		link_customer_and_address(raw_billing_data, customer_name)
+		link_items(order.get("line_items"), woocommerce_settings)
+		create_sales_order(order, woocommerce_settings, customer_name)
 
-		new_sales_order = frappe.new_doc("Sales Order")
-		new_sales_order.customer = customer_name
-
-		created_date = fd.get("date_created").split("T")
-		new_sales_order.transaction_date = created_date[0]
-
-		new_sales_order.po_no = fd.get("id")
-		new_sales_order.woocommerce_id = fd.get("id")
-		new_sales_order.naming_series = woocommerce_settings.sales_order_series or "SO-WOO-"
-
-		placed_order_date = created_date[0]
-		raw_date = datetime.datetime.strptime(placed_order_date, "%Y-%m-%d")
-		raw_delivery_date = frappe.utils.add_to_date(raw_date,days = 7)
-		order_delivery_date_str = raw_delivery_date.strftime('%Y-%m-%d')
-		order_delivery_date = str(order_delivery_date_str)
-
-		new_sales_order.delivery_date = order_delivery_date
-		default_set_company = frappe.get_doc("Global Defaults")
-		company = raw_billing_data.get("company") or default_set_company.default_company
-		found_company = frappe.get_doc("Company",{"name":company})
-		company_abbr = found_company.abbr
-
-		new_sales_order.company = company
-
-		for item in items_list:
-			woocomm_item_id = item.get("product_id")
-			found_item = frappe.get_doc("Item",{"woocommerce_id": woocomm_item_id})
-
-			ordered_items_tax = item.get("total_tax")
-
-			new_sales_order.append("items",{
-				"item_code": found_item.item_code,
-				"item_name": found_item.item_name,
-				"description": found_item.item_name,
-				"delivery_date":order_delivery_date,
-				"uom": woocommerce_settings.uom or _("Nos"),
-				"qty": item.get("quantity"),
-				"rate": item.get("price"),
-				"warehouse": woocommerce_settings.warehouse or "Stores" + " - " + company_abbr
-				})
-
-			add_tax_details(new_sales_order,ordered_items_tax,"Ordered Item tax",0)
-
-		# shipping_details = fd.get("shipping_lines") # used for detailed order
-		shipping_total = fd.get("shipping_total")
-		shipping_tax = fd.get("shipping_tax")
-
-		add_tax_details(new_sales_order,shipping_tax,"Shipping Tax",1)
-		add_tax_details(new_sales_order,shipping_total,"Shipping Total",1)
-
-		new_sales_order.submit()
-
-		frappe.db.commit()
-
-def link_customer_and_address(raw_billing_data,customer_status):
-
-	if customer_status == 0:
-		# create
+def link_customer_and_address(raw_billing_data, customer_name):
+	customer_woo_com_email = raw_billing_data.get("email")
+	customer_exists = frappe.get_value("Customer", {"woocommerce_email": customer_woo_com_email})
+	if not customer_exists:
+		# Create Customer
 		customer = frappe.new_doc("Customer")
-		address = frappe.new_doc("Address")
-
-	if customer_status == 1:
-		# Edit
-		customer_woo_com_email = raw_billing_data.get("email")
-		customer = frappe.get_doc("Customer",{"woocommerce_email": customer_woo_com_email})
+	else:
+		# Edit Customer
+		customer = frappe.get_doc("Customer", {"woocommerce_email": customer_woo_com_email})
 		old_name = customer.customer_name
 
-	full_name = str(raw_billing_data.get("first_name"))+ " "+str(raw_billing_data.get("last_name"))
-	customer.customer_name = full_name
-	customer.woocommerce_email = str(raw_billing_data.get("email"))
-	customer.save()
-	frappe.db.commit()
+	customer.customer_name = customer_name
+	customer.woocommerce_email = customer_woo_com_email
+	customer.flags.ignore_mandatory = True
+	customer.save() 
 
-	if customer_status == 1:
-		frappe.rename_doc("Customer", old_name, full_name)
-		address = frappe.get_doc("Address",{"woocommerce_email":customer_woo_com_email})
-		customer = frappe.get_doc("Customer",{"woocommerce_email": customer_woo_com_email})
+	if customer_exists:
+		frappe.rename_doc("Customer", old_name, customer_name)
+		address = frappe.get_doc("Address", {"woocommerce_email": customer_woo_com_email})
+	else:
+		address = frappe.new_doc("Address")
 
 	address.address_line1 = raw_billing_data.get("address_1", "Not Provided")
 	address.address_line2 = raw_billing_data.get("address_2", "Not Provided")
 	address.city = raw_billing_data.get("city", "Not Provided")
-	address.woocommerce_email = str(raw_billing_data.get("email"))
-	address.address_type = "Shipping"
-	address.country = frappe.get_value("Country", filters={"code":raw_billing_data.get("country", "IN").lower()})
-	address.state =  raw_billing_data.get("state")
-	address.pincode =  str(raw_billing_data.get("postcode"))
-	address.phone = str(raw_billing_data.get("phone"))
-	address.email_id = str(raw_billing_data.get("email"))
-
+	address.woocommerce_email = customer_woo_com_email
+	address.address_type = "Billing"
+	address.country = frappe.get_value("Country", {"code": raw_billing_data.get("country", "IN").lower()})
+	address.state = raw_billing_data.get("state")
+	address.pincode = raw_billing_data.get("postcode")
+	address.phone = raw_billing_data.get("phone")
+	address.email_id = customer_woo_com_email
 	address.append("links", {
 		"link_doctype": "Customer",
 		"link_name": customer.customer_name
 	})
+	address.flags.ignore_mandatory = True
+	address = address.save()
 
-	address.save()
-	frappe.db.commit()
-
-	if customer_status == 1:
-
-		address = frappe.get_doc("Address",{"woocommerce_email":customer_woo_com_email})
+	if customer_exists:
 		old_address_title = address.name
-		new_address_title = customer.customer_name+"-billing"
+		new_address_title = customer.customer_name + "-billing"
 		address.address_title = customer.customer_name
 		address.save()
 
-		frappe.rename_doc("Address",old_address_title,new_address_title)
+		frappe.rename_doc("Address", old_address_title, new_address_title)
 
-	frappe.db.commit()
-
-def link_item(item_data,item_status):
-	woocommerce_settings = frappe.get_doc("Woocommerce Settings")
-
-	if item_status == 0:
-		#Create Item
-		item = frappe.new_doc("Item")
-
-	if item_status == 1:
-		#Edit Item
+def link_items(items_list, woocommerce_settings):
+	for item_data in items_list:
 		item_woo_com_id = item_data.get("product_id")
-		item = frappe.get_doc("Item",{"woocommerce_id": item_woo_com_id})
 
-	item.item_name = str(item_data.get("name"))
-	item.item_code = "woocommerce - " + str(item_data.get("product_id"))
-	item.woocommerce_id = str(item_data.get("product_id"))
-	item.item_group = _("WooCommerce Products")
-	item.stock_uom = woocommerce_settings.uom or _("Nos")
-	item.save()
+		if frappe.get_value("Item", {"woocommerce_id": item_woo_com_id}):
+			#Edit Item
+			item = frappe.get_doc("Item", {"woocommerce_id": item_woo_com_id})
+		else:
+			#Create Item
+			item = frappe.new_doc("Item")
+	
+		item.item_name = item_data.get("name")
+		item.item_code = _("woocommerce - {0}").format(item_data.get("product_id"))
+		item.woocommerce_id = item_data.get("product_id")
+		item.item_group = _("WooCommerce Products")
+		item.stock_uom = woocommerce_settings.uom or _("Nos")
+		item.flags.ignore_mandatory = True
+		item.save()
+
+def create_sales_order(order, woocommerce_settings, customer_name):	
+	new_sales_order = frappe.new_doc("Sales Order")
+	new_sales_order.customer = customer_name
+
+	new_sales_order.po_no = new_sales_order.woocommerce_id = order.get("id")
+	new_sales_order.naming_series = woocommerce_settings.sales_order_series or "SO-WOO-"
+
+	created_date = order.get("date_created").split("T")
+	new_sales_order.transaction_date = created_date[0]
+	delivery_after = woocommerce_settings.delivery_after_days or 7
+	new_sales_order.delivery_date = frappe.utils.add_days(created_date[0], delivery_after)
+
+	new_sales_order.company = woocommerce_settings.company
+
+	set_items_in_sales_order(new_sales_order, woocommerce_settings, order)
+	new_sales_order.flags.ignore_mandatory = True
+	new_sales_order.insert()
+	new_sales_order.submit()
+
 	frappe.db.commit()
 
-def add_tax_details(sales_order,price,desc,status):
+def set_items_in_sales_order(new_sales_order, woocommerce_settings, order):
+	company_abbr = frappe.db.get_value('Company', woocommerce_settings.company, 'abbr')
 
-	woocommerce_settings = frappe.get_doc("Woocommerce Settings")
+	for item in order.get("line_items"):
+		woocomm_item_id = item.get("product_id")
+		found_item = frappe.get_doc("Item", {"woocommerce_id": woocomm_item_id})
 
-	if status == 0:
-		# Product taxes
-		account_head_type = woocommerce_settings.tax_account
+		ordered_items_tax = item.get("total_tax")
 
-	if status == 1:
-		# Shipping taxes
-		account_head_type = woocommerce_settings.f_n_f_account
+		new_sales_order.append("items",{
+			"item_code": found_item.item_code,
+			"item_name": found_item.item_name,
+			"description": found_item.item_name,
+			"delivery_date": new_sales_order.delivery_date,
+			"uom": woocommerce_settings.uom or _("Nos"),
+			"qty": item.get("quantity"),
+			"rate": item.get("price"),
+			"warehouse": woocommerce_settings.warehouse or _("Stores - {0}").format(company_abbr)
+			})
 
-	sales_order.append("taxes",{
-							"charge_type":"Actual",
-							"account_head": account_head_type,
-							"tax_amount": price,
-							"description": desc
-							})
+		add_tax_details(new_sales_order, ordered_items_tax, "Ordered Item tax", woocommerce_settings.tax_account)
+
+	# shipping_details = order.get("shipping_lines") # used for detailed order
+
+	add_tax_details(new_sales_order, order.get("shipping_tax"), "Shipping Tax", woocommerce_settings.f_n_f_account)
+	add_tax_details(new_sales_order, order.get("shipping_total"), "Shipping Total", woocommerce_settings.f_n_f_account)
+			
+def add_tax_details(sales_order, price, desc, tax_account_head):
+	sales_order.append("taxes", {
+		"charge_type":"Actual",
+		"account_head": tax_account_head,
+		"tax_amount": price,
+		"description": desc
+	})
diff --git a/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py b/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py
index 7d3f572..a2b6af9 100644
--- a/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py
+++ b/erpnext/erpnext_integrations/doctype/shopify_log/shopify_log.py
@@ -39,7 +39,7 @@
 	if hasattr(exception, 'message'):
 		message = exception.message
 	elif hasattr(exception, '__str__'):
-		message = e.__str__()
+		message = exception.__str__()
 	else:
 		message = "Something went wrong while syncing"
 	return message
diff --git a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
index a4332b1..0cad0cc 100644
--- a/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
+++ b/erpnext/erpnext_integrations/doctype/shopify_settings/shopify_settings.py
@@ -43,7 +43,7 @@
 				d.raise_for_status()
 				self.update_webhook_table(method, d.json())
 			except Exception as e:
-				make_shopify_log(status="Warning", message=e, exception=False)
+				make_shopify_log(status="Warning", exception=e, rollback=True)
 
 	def unregister_webhooks(self):
 		session = get_request_session()
diff --git a/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.json b/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.json
index dd3c24d..956ae09 100644
--- a/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.json
+++ b/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.json
@@ -1,694 +1,175 @@
 {
- "allow_copy": 0,
- "allow_events_in_timeline": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "beta": 0,
  "creation": "2018-02-12 15:10:05.495713",
- "custom": 0,
- "docstatus": 0,
  "doctype": "DocType",
- "document_type": "",
  "editable_grid": 1,
  "engine": "InnoDB",
+ "field_order": [
+  "enable_sync",
+  "sb_00",
+  "woocommerce_server_url",
+  "secret",
+  "cb_00",
+  "api_consumer_key",
+  "api_consumer_secret",
+  "sb_accounting_details",
+  "tax_account",
+  "column_break_10",
+  "f_n_f_account",
+  "defaults_section",
+  "creation_user",
+  "warehouse",
+  "sales_order_series",
+  "column_break_14",
+  "company",
+  "delivery_after_days",
+  "uom",
+  "endpoints",
+  "endpoint"
+ ],
  "fields": [
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
+   "default": "0",
    "fieldname": "enable_sync",
    "fieldtype": "Check",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Enable Sync",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "Enable Sync"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "sb_00",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "fieldtype": "Section Break"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "woocommerce_server_url",
    "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
    "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Woocommerce Server URL",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "Woocommerce Server URL"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "secret",
    "fieldtype": "Code",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "Secret",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 1,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "read_only": 1
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "cb_00",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "fieldtype": "Column Break"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "api_consumer_key",
    "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
    "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "API consumer key",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "API consumer key"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "api_consumer_secret",
    "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
    "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "API consumer secret",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "API consumer secret"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "sb_accounting_details",
    "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Accounting Details",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "Accounting Details"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "tax_account",
    "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "Tax Account",
-   "length": 0,
-   "no_copy": 0,
    "options": "Account",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "reqd": 1
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "column_break_10",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "fieldtype": "Column Break"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "f_n_f_account",
    "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "Freight and Forwarding Account",
-   "length": 0,
-   "no_copy": 0,
    "options": "Account",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "reqd": 1
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "defaults_section",
    "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Defaults",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "Defaults"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
    "description": "The user that will be used to create Customers, Items and Sales Orders. This user should have the relevant permissions.",
-   "fetch_if_empty": 0,
    "fieldname": "creation_user",
    "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "Creation User",
-   "length": 0,
-   "no_copy": 0,
    "options": "User",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "reqd": 1
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "description": "This warehouse will be used to create Sale Orders. The fallback warehouse is \"Stores\".",
-   "fetch_if_empty": 0,
+   "description": "This warehouse will be used to create Sales Orders. The fallback warehouse is \"Stores\".",
    "fieldname": "warehouse",
    "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "Warehouse",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Warehouse",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "options": "Warehouse"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "column_break_14",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "fieldtype": "Column Break"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
    "description": "The fallback series is \"SO-WOO-\".",
-   "fetch_if_empty": 0,
    "fieldname": "sales_order_series",
    "fieldtype": "Select",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Sales Order Series",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "Sales Order Series"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
    "description": "This is the default UOM used for items and Sales orders. The fallback UOM is \"Nos\".",
-   "fetch_if_empty": 0,
    "fieldname": "uom",
    "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "UOM",
-   "length": 0,
-   "no_copy": 0,
-   "options": "UOM",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "options": "UOM"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "endpoints",
    "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Endpoints",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "label": "Endpoints"
   },
   {
-   "allow_bulk_edit": 0,
-   "allow_in_quick_entry": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fetch_if_empty": 0,
    "fieldname": "endpoint",
    "fieldtype": "Code",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
    "label": "Endpoint",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 1,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "translatable": 0,
-   "unique": 0
+   "read_only": 1
+  },
+  {
+   "description": "This company will be used to create Sales Orders.",
+   "fieldname": "company",
+   "fieldtype": "Link",
+   "label": "Company",
+   "options": "Company",
+   "reqd": 1
+  },
+  {
+   "description": "This is the default offset (days) for the Delivery Date in Sales Orders. The fallback offset is 7 days from the order placement date.",
+   "fieldname": "delivery_after_days",
+   "fieldtype": "Int",
+   "label": "Delivery After (Days)"
   }
  ],
- "has_web_view": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "in_create": 0,
- "is_submittable": 0,
  "issingle": 1,
- "istable": 0,
- "max_attachments": 0,
- "menu_index": 0,
- "modified": "2019-04-08 17:04:16.720696",
+ "modified": "2019-11-04 00:45:21.232096",
  "modified_by": "Administrator",
  "module": "ERPNext Integrations",
  "name": "Woocommerce Settings",
- "name_case": "",
  "owner": "Administrator",
  "permissions": [
   {
-   "amend": 0,
-   "cancel": 0,
    "create": 1,
-   "delete": 0,
    "email": 1,
-   "export": 0,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
    "print": 1,
    "read": 1,
-   "report": 0,
    "role": "System Manager",
-   "set_user_permissions": 0,
    "share": 1,
-   "submit": 0,
    "write": 1
   }
  ],
  "quick_entry": 1,
- "read_only": 0,
- "show_name_in_global_search": 0,
  "sort_field": "modified",
  "sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0,
- "track_views": 0
+ "track_changes": 1
 }
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.py b/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.py
index 055684d..bd072f4 100644
--- a/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.py
+++ b/erpnext/erpnext_integrations/doctype/woocommerce_settings/woocommerce_settings.py
@@ -8,6 +8,7 @@
 from frappe.utils.nestedset import get_root_of
 from frappe.model.document import Document
 from six.moves.urllib.parse import urlparse
+from frappe.custom.doctype.custom_field.custom_field import create_custom_field
 
 class WoocommerceSettings(Document):
 	def validate(self):
@@ -17,75 +18,21 @@
 
 	def create_delete_custom_fields(self):
 		if self.enable_sync:
+			custom_fields = {}
 			# create
-			create_custom_field_id_and_check_status = False
-			create_custom_field_email_check = False
-			names = ["Customer-woocommerce_id","Sales Order-woocommerce_id","Item-woocommerce_id","Address-woocommerce_id"]
-			names_check_box = ["Customer-woocommerce_check","Sales Order-woocommerce_check","Item-woocommerce_check","Address-woocommerce_check"]
-			email_names = ["Customer-woocommerce_email","Address-woocommerce_email"]
+			for doctype in ["Customer", "Sales Order", "Item", "Address"]:
+				df = dict(fieldname='woocommerce_id', label='Woocommerce ID', fieldtype='Data', read_only=1, print_hide=1)
+				create_custom_field(doctype, df)
 
-			for i in zip(names,names_check_box):
-
-				if not frappe.get_value("Custom Field",{"name":i[0]}) or not frappe.get_value("Custom Field",{"name":i[1]}):
-					create_custom_field_id_and_check_status = True
-					break
-
-
-			if create_custom_field_id_and_check_status:
-				names = ["Customer","Sales Order","Item","Address"]
-				for name in names:
-					custom = frappe.new_doc("Custom Field")
-					custom.dt = name
-					custom.label = "woocommerce_id"
-					custom.read_only = 1
-					custom.save()
-
-					custom = frappe.new_doc("Custom Field")
-					custom.dt = name
-					custom.label = "woocommerce_check"
-					custom.fieldtype = "Check"
-					custom.read_only = 1
-					custom.save()
-
-			for i in email_names:
-
-				if not frappe.get_value("Custom Field",{"name":i}):
-					create_custom_field_email_check = True
-					break;
-
-			if create_custom_field_email_check:
-				names = ["Customer","Address"]
-				for name in names:
-					custom = frappe.new_doc("Custom Field")
-					custom.dt = name
-					custom.label = "woocommerce_email"
-					custom.read_only = 1
-					custom.save()
-
-			if not frappe.get_value("Item Group",{"name": _("WooCommerce Products")}):
+			for doctype in ["Customer", "Address"]:
+				df = dict(fieldname='woocommerce_email', label='Woocommerce Email', fieldtype='Data', read_only=1, print_hide=1)
+				create_custom_field(doctype, df)
+			
+			if not frappe.get_value("Item Group", {"name": _("WooCommerce Products")}):
 				item_group = frappe.new_doc("Item Group")
 				item_group.item_group_name = _("WooCommerce Products")
 				item_group.parent_item_group = get_root_of("Item Group")
-				item_group.save()
-
-
-		elif not self.enable_sync:
-			# delete
-			names = ["Customer-woocommerce_id","Sales Order-woocommerce_id","Item-woocommerce_id","Address-woocommerce_id"]
-			names_check_box = ["Customer-woocommerce_check","Sales Order-woocommerce_check","Item-woocommerce_check","Address-woocommerce_check"]
-			email_names = ["Customer-woocommerce_email","Address-woocommerce_email"]
-			for name in names:
-				frappe.delete_doc("Custom Field",name)
-
-			for name in names_check_box:
-				frappe.delete_doc("Custom Field",name)
-
-			for name in email_names:
-				frappe.delete_doc("Custom Field",name)
-
-			frappe.delete_doc("Item Group", _("WooCommerce Products"))
-
-		frappe.db.commit()
+				item_group.insert()
 
 	def validate_settings(self):
 		if self.enable_sync:
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 5c61874..9e74bfd 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -235,17 +235,16 @@
 	("Sales Taxes and Charges Template", 'Price List'): {
 		"on_update": "erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings.validate_cart_settings"
 	},
-
 	"Website Settings": {
 		"validate": "erpnext.portal.doctype.products_settings.products_settings.home_page_is_products"
 	},
 	"Sales Invoice": {
-		"on_submit": ["erpnext.regional.france.utils.create_transaction_log", "erpnext.regional.italy.utils.sales_invoice_on_submit"],
+		"on_submit": ["erpnext.regional.create_transaction_log", "erpnext.regional.italy.utils.sales_invoice_on_submit"],
 		"on_cancel": "erpnext.regional.italy.utils.sales_invoice_on_cancel",
 		"on_trash": "erpnext.regional.check_deletion_permission"
 	},
 	"Payment Entry": {
-		"on_submit": ["erpnext.regional.france.utils.create_transaction_log", "erpnext.accounts.doctype.payment_request.payment_request.make_status_as_paid"],
+		"on_submit": ["erpnext.regional.create_transaction_log", "erpnext.accounts.doctype.payment_request.payment_request.make_status_as_paid"],
 		"on_trash": "erpnext.regional.check_deletion_permission"
 	},
 	'Address': {
@@ -283,7 +282,6 @@
 	],
 	"daily": [
 		"erpnext.stock.reorder_item.reorder_item",
-		"erpnext.setup.doctype.email_digest.email_digest.send",
 		"erpnext.support.doctype.issue.issue.auto_close_tickets",
 		"erpnext.crm.doctype.opportunity.opportunity.auto_close_opportunity",
 		"erpnext.controllers.accounts_controller.update_invoice_status",
@@ -306,6 +304,7 @@
 		"erpnext.crm.doctype.email_campaign.email_campaign.set_email_campaign_status"
 	],
 	"daily_long": [
+		"erpnext.setup.doctype.email_digest.email_digest.send",
 		"erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.update_latest_price_in_all_boms",
 		"erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry.process_expired_allocation",
 		"erpnext.hr.utils.generate_leave_encashment"
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim_list.js b/erpnext/hr/doctype/expense_claim/expense_claim_list.js
index 0e25e66..6195ad4 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim_list.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim_list.js
@@ -2,11 +2,11 @@
 	add_fields: ["total_claimed_amount", "docstatus"],
 	get_indicator: function(doc) {
 		if(doc.status == "Paid") {
-			return [__("Paid"), "green", "status,=,'Paid'"];
+			return [__("Paid"), "green", "status,=,Paid"];
 		}else if(doc.status == "Unpaid") {
-			return [__("Unpaid"), "orange"];
+			return [__("Unpaid"), "orange", "status,=,Unpaid"];
 		} else if(doc.status == "Rejected") {
-			return [__("Rejected"), "grey"];
+			return [__("Rejected"), "grey", "status,=,Rejected"];
 		}
 	}
 };
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 97de40f..e1e5e80 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -125,7 +125,7 @@
 				status = "Half Day" if date == self.half_day_date else "On Leave"
 
 				attendance_name = frappe.db.exists('Attendance', dict(employee = self.employee,
-					attenance_date = date, docstatus = ('!=', 2)))
+					attendance_date = date, docstatus = ('!=', 2)))
 
 				if attendance_name:
 					# update existing attendance, change absent to on leave
@@ -503,14 +503,17 @@
 
 def get_pending_leaves_for_period(employee, leave_type, from_date, to_date):
 	''' Returns leaves that are pending approval '''
-	return frappe.db.get_value("Leave Application",
+	leaves = frappe.get_all("Leave Application",
 		filters={
 			"employee": employee,
 			"leave_type": leave_type,
-			"from_date": ("<=", from_date),
-			"to_date": (">=", to_date),
 			"status": "Open"
-		}, fieldname=['SUM(total_leave_days)']) or flt(0)
+		},
+		or_filters={
+			"from_date": ["between", (from_date, to_date)],
+			"to_date": ["between", (from_date, to_date)]
+		}, fields=['SUM(total_leave_days) as leaves'])[0]
+	return leaves['leaves'] if leaves['leaves'] else 0.0
 
 def get_remaining_leaves(allocation, leaves_taken, date, expiry):
 	''' Returns minimum leaves remaining after comparing with remaining days for allocation expiry '''
diff --git a/erpnext/hr/doctype/leave_application/leave_application_dashboard.py b/erpnext/hr/doctype/leave_application/leave_application_dashboard.py
index 8075b7b..c1d6a66 100644
--- a/erpnext/hr/doctype/leave_application/leave_application_dashboard.py
+++ b/erpnext/hr/doctype/leave_application/leave_application_dashboard.py
@@ -5,6 +5,12 @@
 
 def get_data():
 	return {
+		'fieldname': 'leave_application',
+		'transactions': [
+			{
+				'items': ['Attendance']
+			}
+		],
         'reports': [
 			{
                 'label': _('Reports'),
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index ad141a5..38ae808 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -72,7 +72,7 @@
 		application.to_date = "2013-01-05"
 		return application
 
-	def test_attendance_creation(self):
+	def test_overwrite_attendance(self):
 		'''check attendance is automatically created on leave approval'''
 		make_allocation_record()
 		application = self.get_application(_test_records[0])
@@ -82,7 +82,8 @@
 		application.insert()
 		application.submit()
 
-		attendance = frappe.get_all('Attendance', ['name', 'status', 'attendance_date'], dict(leave_application = application.name))
+		attendance = frappe.get_all('Attendance', ['name', 'status', 'attendance_date'],
+			dict(attendance_date=('between', ['2018-01-01', '2018-01-03']), docstatus=("!=", 2)))
 
 		# attendance created for all 3 days
 		self.assertEqual(len(attendance), 3)
@@ -95,20 +96,6 @@
 		for d in ('2018-01-01', '2018-01-02', '2018-01-03'):
 			self.assertTrue(getdate(d) in dates)
 
-	def test_overwrite_attendance(self):
-		# employee marked as absent
-		doc = frappe.new_doc("Attendance")
-		doc.employee = '_T-Employee-00001'
-		doc.attendance_date = '2018-01-01'
-		doc.company = '_Test Company'
-		doc.status = 'Absent'
-		doc.flags.ignore_validate = True
-		doc.insert(ignore_permissions=True)
-		doc.submit()
-
-		# now check if the status has been updated
-		self.test_attendance_creation()
-
 	def test_block_list(self):
 		self._clear_roles()
 
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 27a51c3..46be4fe 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -5,7 +5,7 @@
 import frappe, erpnext
 import datetime, math
 
-from frappe.utils import add_days, cint, cstr, flt, getdate, rounded, date_diff, money_in_words, getdate
+from frappe.utils import add_days, cint, cstr, flt, getdate, rounded, date_diff, money_in_words
 from frappe.model.naming import make_autoname
 
 from frappe import msgprint, _
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js
index d56320a..dd34ef2 100755
--- a/erpnext/hr/doctype/salary_structure/salary_structure.js
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.js
@@ -46,10 +46,12 @@
 		frm.trigger("toggle_fields");
 		frm.fields_dict['earnings'].grid.set_column_disp("default_amount", false);
 		frm.fields_dict['deductions'].grid.set_column_disp("default_amount", false);
-
-		frm.add_custom_button(__("Preview Salary Slip"), function() {
-			frm.trigger('preview_salary_slip');
-		});
+		
+		if(frm.doc.docstatus === 1) {
+			frm.add_custom_button(__("Preview Salary Slip"), function() {
+				frm.trigger('preview_salary_slip');
+			});
+		}
 
 		if(frm.doc.docstatus==1) {
 			frm.add_custom_button(__("Assign Salary Structure"), function() {
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index f7d712d..0e1a74f 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -169,5 +169,10 @@
 @frappe.whitelist()
 def get_employees(salary_structure):
 	employees = frappe.get_list('Salary Structure Assignment',
-		filters={'salary_structure': salary_structure}, fields=['employee'])
+		filters={'salary_structure': salary_structure, 'docstatus': 1}, fields=['employee'])
+	
+	if not employees:
+		frappe.throw(_("There's no Employee with Salary Structure: {0}. \
+			Assign {1} to an Employee to preview Salary Slip").format(salary_structure, salary_structure))
+
 	return list(set([d.employee for d in employees]))
diff --git a/erpnext/hr/doctype/staffing_plan/staffing_plan.py b/erpnext/hr/doctype/staffing_plan/staffing_plan.py
index e6afbcc..595bcaa 100644
--- a/erpnext/hr/doctype/staffing_plan/staffing_plan.py
+++ b/erpnext/hr/doctype/staffing_plan/staffing_plan.py
@@ -7,6 +7,7 @@
 from frappe.model.document import Document
 from frappe import _
 from frappe.utils import getdate, nowdate, cint, flt
+from frappe.utils.nestedset import get_descendants_of
 
 class SubsidiaryCompanyError(frappe.ValidationError): pass
 class ParentCompanyError(frappe.ValidationError): pass
@@ -131,7 +132,8 @@
 		return False
 
 	employee_counts = {}
-	company_set = get_company_set(company)
+	company_set = get_descendants_of('Company', company)
+	company_set.append(company)
 
 	employee_counts["employee_count"] = frappe.db.get_value("Employee",
 		filters={
@@ -167,14 +169,4 @@
 				designation, from_date, to_date)
 
 	# Only a single staffing plan can be active for a designation on given date
-	return staffing_plan if staffing_plan else None
-
-def get_company_set(company):
-	return frappe.db.sql_list("""
-		SELECT
-			name
-		FROM `tabCompany`
-		WHERE
-			parent_company=%(company)s
-			OR name=%(company)s
-	""", (dict(company=company)))
\ No newline at end of file
+	return staffing_plan if staffing_plan else None
\ No newline at end of file
diff --git a/erpnext/hr/report/department_analytics/department_analytics.js b/erpnext/hr/report/department_analytics/department_analytics.js
index a0b6fc7..29fedcd 100644
--- a/erpnext/hr/report/department_analytics/department_analytics.js
+++ b/erpnext/hr/report/department_analytics/department_analytics.js
@@ -2,4 +2,14 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Department Analytics"] = {
+	"filters": [
+		{
+			"fieldname":"company",
+			"label": __("Company"),
+			"fieldtype": "Link",
+			"options": "Company",
+			"default": frappe.defaults.get_user_default("Company"),
+			"reqd": 1
+		},
+	]
 };
\ No newline at end of file
diff --git a/erpnext/hr/report/department_analytics/department_analytics.py b/erpnext/hr/report/department_analytics/department_analytics.py
index c4a9030..b28eac4 100644
--- a/erpnext/hr/report/department_analytics/department_analytics.py
+++ b/erpnext/hr/report/department_analytics/department_analytics.py
@@ -7,6 +7,10 @@
 
 def execute(filters=None):
 	if not filters: filters = {}
+
+	if not filters["company"]:
+		frappe.throw(_('{0} is mandatory').format(_('Company')))
+
 	columns = get_columns()
 	employees = get_employees(filters)
 	departments_result = get_department(filters)
@@ -28,6 +32,9 @@
 	conditions = ""
 	if filters.get("department"): conditions += " and department = '%s'" % \
 		filters["department"].replace("'", "\\'")
+	
+	if filters.get("company"): conditions += " and company = '%s'" % \
+		filters["company"].replace("'", "\\'")
 	return conditions
 
 def get_employees(filters):
@@ -37,7 +44,7 @@
 	gender, company from `tabEmployee` where status = 'Active' %s""" % conditions, as_list=1)
 
 def get_department(filters):
-	return frappe.db.sql("""select name from `tabDepartment`""" , as_list=1)
+	return frappe.db.sql("""select name from `tabDepartment` where company = %s""", (filters["company"]), as_list=1)
 	
 def get_chart_data(departments,employees):
 	if not departments:
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
index 15a5da0..777de02 100644
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
+++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
@@ -75,7 +75,7 @@
 			
 			leave_approvers = department_approver_map.get(employee.department_name, []).append(employee.leave_approver)
 
-			if (len(leave_approvers) and user in leave_approvers) or (user in ["Administrator", employee.user_id]) \
+			if (leave_approvers and len(leave_approvers) and user in leave_approvers) or (user in ["Administrator", employee.user_id]) \
 				or ("HR Manager" in frappe.get_roles(user)):
 				row = frappe._dict({
 					'employee': employee.name,
@@ -111,10 +111,10 @@
 def get_department_leave_approver_map(department=None):
 	conditions=''
 	if department:
-		conditions='and department_name = %(department)s or parent_department = %(department)s'%{'department': department}
+		conditions="and (department_name = '%(department)s' or parent_department = '%(department)s')"%{'department': department}
 
 	# get current department and all its child
-	department_list = frappe.db.sql_list(''' SELECT name FROM `tabDepartment` WHERE disabled=0 {0}'''.format(conditions)) #nosec
+	department_list = frappe.db.sql_list(""" SELECT name FROM `tabDepartment` WHERE disabled=0 {0}""".format(conditions)) #nosec
 
 	# retrieve approvers list from current department and from its subsequent child departments
 	approver_list = frappe.get_all('Department Approver', filters={
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
index ce95db3..e940b60 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
@@ -20,6 +20,12 @@
 			frm.set_value({transaction_date: frappe.datetime.get_today()});
 		}
 	},
+	refresh: function(frm) {
+		setTimeout(() => {
+			frm.toggle_display('generate_schedule', !(frm.is_new()));
+			frm.toggle_display('schedule', !(frm.is_new()));
+		},10);
+	},
 	customer: function(frm) {
 		erpnext.utils.get_party_details(frm)
 	},
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
index 3a64e1a..94d85f7 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
@@ -150,7 +150,7 @@
 			elif not d.no_of_visits:
 				throw(_("Please mention no of visits required"))
 			elif not d.sales_person:
-				throw(_("Please select Incharge Person's name"))
+				throw(_("Please select a Sales Person for item: {0}".format(d.item_name)))
 
 			if getdate(d.start_date) >= getdate(d.end_date):
 				throw(_("Start date should be less than end date for Item {0}").format(d.item_code))
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 225ae29..db79d7f 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -39,9 +39,11 @@
 			names = [d[-1][1:] for d in filter(lambda x: len(x) > 1 and x[-1], names)]
 
 			# split by (-) if cancelled
-			names = [cint(name.split('-')[-1]) for name in names]
-
-			idx = max(names) + 1
+			if names:
+				names = [cint(name.split('-')[-1]) for name in names]
+				idx = max(names) + 1
+			else:
+				idx = 1
 		else:
 			idx = 1
 
@@ -290,7 +292,8 @@
 		return valuation_rate
 
 	def manage_default_bom(self):
-		""" Uncheck others if current one is selected as default,
+		""" Uncheck others if current one is selected as default or
+			check the current one as default if it the only bom for the selected item,
 			update default bom in item master
 		"""
 		if self.is_default and self.is_active:
@@ -299,6 +302,9 @@
 			item = frappe.get_doc("Item", self.item)
 			if item.default_bom != self.name:
 				frappe.db.set_value('Item', self.item, 'default_bom', self.name)
+		elif not frappe.db.exists(dict(doctype='BOM', docstatus=1, item=self.item, is_default=1)) \
+			and self.is_active:
+			frappe.db.set(self, "is_default", 1)
 		else:
 			frappe.db.set(self, "is_default", 0)
 			item = frappe.get_doc("Item", self.item)
@@ -414,8 +420,12 @@
 
 	def traverse_tree(self, bom_list=None):
 		def _get_children(bom_no):
-			return frappe.db.sql_list("""select bom_no from `tabBOM Item`
-				where parent = %s and ifnull(bom_no, '') != '' and parenttype='BOM'""", bom_no)
+			children = frappe.cache().hget('bom_children', bom_no)
+			if children is None:
+				children = frappe.db.sql_list("""SELECT `bom_no` FROM `tabBOM Item`
+					WHERE `parent`=%s AND `bom_no`!='' AND `parenttype`='BOM'""", bom_no)
+				frappe.cache().hset('bom_children', bom_no, children)
+			return children
 
 		count = 0
 		if not bom_list:
@@ -528,12 +538,24 @@
 	def get_child_exploded_items(self, bom_no, stock_qty):
 		""" Add all items from Flat BOM of child BOM"""
 		# Did not use qty_consumed_per_unit in the query, as it leads to rounding loss
-		child_fb_items = frappe.db.sql("""select bom_item.item_code, bom_item.item_name,
-			bom_item.description, bom_item.source_warehouse, bom_item.operation,
-			bom_item.stock_uom, bom_item.stock_qty, bom_item.rate, bom_item.include_item_in_manufacturing,
-			bom_item.stock_qty / ifnull(bom.quantity, 1) as qty_consumed_per_unit
-			from `tabBOM Explosion Item` bom_item, tabBOM bom
-			where bom_item.parent = bom.name and bom.name = %s and bom.docstatus = 1""", bom_no, as_dict = 1)
+		child_fb_items = frappe.db.sql("""
+			SELECT
+				bom_item.item_code,
+				bom_item.item_name,
+				bom_item.description,
+				bom_item.source_warehouse,
+				bom_item.operation,
+				bom_item.stock_uom,
+				bom_item.stock_qty,
+				bom_item.rate,
+				bom_item.include_item_in_manufacturing,
+				bom_item.stock_qty / ifnull(bom.quantity, 1) AS qty_consumed_per_unit
+			FROM `tabBOM Explosion Item` bom_item, tabBOM bom
+			WHERE
+				bom_item.parent = bom.name
+				AND bom.name = %s
+				AND bom.docstatus = 1
+		""", bom_no, as_dict = 1)
 
 		for d in child_fb_items:
 			self.add_to_cur_exploded_items(frappe._dict({
@@ -754,6 +776,8 @@
 	# Add non stock items cost in the additional cost
 	bom = frappe.get_doc('BOM', work_order.bom_no)
 	table = 'exploded_items' if work_order.get('use_multi_level_bom') else 'items'
+	expenses_included_in_valuation = frappe.get_cached_value("Company", work_order.company,
+		"expenses_included_in_valuation")
 
 	items = {}
 	for d in bom.get(table):
@@ -764,6 +788,7 @@
 
 	for name in non_stock_items:
 		stock_entry.append('additional_costs', {
+			'expense_account': expenses_included_in_valuation,
 			'description': name[0],
 			'amount': items.get(name[0])
 		})
diff --git a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
index 87b8f67..2ca4d16 100644
--- a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
+++ b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
@@ -14,23 +14,23 @@
 	def replace_bom(self):
 		self.validate_bom()
 		self.update_new_bom()
+		frappe.cache().delete_key('bom_children')
 		bom_list = self.get_parent_boms(self.new_bom)
 		updated_bom = []
 
 		for bom in bom_list:
 			try:
-				bom_obj = frappe.get_doc("BOM", bom)
-				bom_obj.load_doc_before_save()
-				updated_bom = bom_obj.update_cost_and_exploded_items(updated_bom)
+				bom_obj = frappe.get_cached_doc('BOM', bom)
+				# this is only used for versioning and we do not want
+				# to make separate db calls by using load_doc_before_save
+				# which proves to be expensive while doing bulk replace
+				bom_obj._doc_before_save = bom_obj.as_dict()
 				bom_obj.calculate_cost()
 				bom_obj.update_parent_cost()
 				bom_obj.db_update()
-				if (getattr(bom_obj.meta, 'track_changes', False) and not bom_obj.flags.ignore_version):
+				if bom_obj.meta.get('track_changes') and not bom_obj.flags.ignore_version:
 					bom_obj.save_version()
-
-				frappe.db.commit()
 			except Exception:
-				frappe.db.rollback()
 				frappe.log_error(frappe.get_traceback())
 
 	def validate_bom(self):
@@ -42,22 +42,22 @@
 				frappe.throw(_("The selected BOMs are not for the same item"))
 
 	def update_new_bom(self):
-		new_bom_unitcost = frappe.db.sql("""select total_cost/quantity
-			from `tabBOM` where name = %s""", self.new_bom)
+		new_bom_unitcost = frappe.db.sql("""SELECT `total_cost`/`quantity`
+			FROM `tabBOM` WHERE name = %s""", self.new_bom)
 		new_bom_unitcost = flt(new_bom_unitcost[0][0]) if new_bom_unitcost else 0
 
 		frappe.db.sql("""update `tabBOM Item` set bom_no=%s,
 			rate=%s, amount=stock_qty*%s where bom_no = %s and docstatus < 2 and parenttype='BOM'""",
 			(self.new_bom, new_bom_unitcost, new_bom_unitcost, self.current_bom))
 
-	def get_parent_boms(self, bom, bom_list=None):
-		if not bom_list:
-			bom_list = []
-
-		data = frappe.db.sql(""" select distinct parent from `tabBOM Item`
-			where bom_no = %s and docstatus < 2 and parenttype='BOM'""", bom)
+	def get_parent_boms(self, bom, bom_list=[]):
+		data = frappe.db.sql("""SELECT DISTINCT parent FROM `tabBOM Item`
+			WHERE bom_no = %s AND docstatus < 2 AND parenttype='BOM'""", bom)
 
 		for d in data:
+			if self.new_bom == d[0]:
+				frappe.throw(_("BOM recursion: {0} cannot be child of {1}").format(bom, self.new_bom))
+
 			bom_list.append(d[0])
 			self.get_parent_boms(d[0], bom_list)
 
diff --git a/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json b/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
index 39d59f0..f27197d 100644
--- a/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
+++ b/erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json
@@ -1,443 +1,135 @@
 {
- "allow_copy": 0, 
- "allow_events_in_timeline": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2017-12-01 12:12:55.048691", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
+ "creation": "2017-12-01 12:12:55.048691",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "item_code",
+  "item_name",
+  "warehouse",
+  "material_request_type",
+  "column_break_4",
+  "quantity",
+  "uom",
+  "projected_qty",
+  "actual_qty",
+  "item_details",
+  "description",
+  "min_order_qty",
+  "section_break_8",
+  "sales_order",
+  "requested_qty"
+ ],
  "fields": [
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "item_code", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Item Code", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Item", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "item_code",
+   "fieldtype": "Link",
+   "in_list_view": 1,
+   "label": "Item Code",
+   "options": "Item",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "item_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Item Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "item_name",
+   "fieldtype": "Data",
+   "label": "Item Name"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "warehouse", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 1, 
-   "label": "Warehouse", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Warehouse", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "warehouse",
+   "fieldtype": "Link",
+   "in_list_view": 1,
+   "in_standard_filter": 1,
+   "label": "Warehouse",
+   "options": "Warehouse",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "material_request_type", 
-   "fieldtype": "Select", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Material Request Type", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "\nPurchase\nMaterial Transfer\nMaterial Issue\nManufacture\nCustomer Provided", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "material_request_type",
+   "fieldtype": "Select",
+   "label": "Material Request Type",
+   "options": "\nPurchase\nMaterial Transfer\nMaterial Issue\nManufacture\nCustomer Provided"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "column_break_4", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "column_break_4",
+   "fieldtype": "Column Break"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "quantity", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Required Quantity", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "quantity",
+   "fieldtype": "Float",
+   "in_list_view": 1,
+   "label": "Required Quantity",
+   "no_copy": 1,
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "projected_qty", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Projected Qty", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "projected_qty",
+   "fieldtype": "Float",
+   "in_list_view": 1,
+   "label": "Projected Qty",
+   "read_only": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "collapsible_depends_on": "", 
-   "columns": 0, 
-   "depends_on": "", 
-   "fetch_if_empty": 0, 
-   "fieldname": "actual_qty", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Actual Qty", 
-   "length": 0, 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "actual_qty",
+   "fieldtype": "Float",
+   "in_list_view": 1,
+   "label": "Actual Qty",
+   "no_copy": 1,
+   "read_only": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "min_order_qty", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Minimum Order Quantity", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "min_order_qty",
+   "fieldtype": "Float",
+   "in_list_view": 1,
+   "label": "Minimum Order Quantity",
+   "read_only": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 1, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "section_break_8", 
-   "fieldtype": "Section Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Reference", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "collapsible": 1,
+   "fieldname": "section_break_8",
+   "fieldtype": "Section Break",
+   "label": "Reference"
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fetch_if_empty": 0, 
-   "fieldname": "sales_order", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Sales Order", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Sales Order", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "sales_order",
+   "fieldtype": "Link",
+   "label": "Sales Order",
+   "options": "Sales Order",
+   "read_only": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_in_quick_entry": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "depends_on": "", 
-   "fetch_if_empty": 0, 
-   "fieldname": "requested_qty", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Requested Qty", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "translatable": 0, 
-   "unique": 0
+   "fieldname": "requested_qty",
+   "fieldtype": "Float",
+   "label": "Requested Qty",
+   "read_only": 1
+  },
+  {
+   "collapsible": 1,
+   "fieldname": "item_details",
+   "fieldtype": "Section Break",
+   "label": "Item Description"
+  },
+  {
+   "fieldname": "description",
+   "fieldtype": "Text Editor",
+   "label": "Description"
+  },
+  {
+   "fieldname": "uom",
+   "fieldtype": "Link",
+   "label": "UOM",
+   "options": "UOM",
+   "read_only": 1
   }
- ], 
- "has_web_view": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2019-04-08 18:15:26.849602", 
- "modified_by": "Administrator", 
- "module": "Manufacturing", 
- "name": "Material Request Plan Item", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0, 
- "track_views": 0
+ ],
+ "istable": 1,
+ "modified": "2019-11-08 15:15:43.979360",
+ "modified_by": "Administrator",
+ "module": "Manufacturing",
+ "name": "Material Request Plan Item",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 1,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
 }
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.js b/erpnext/manufacturing/doctype/production_plan/production_plan.js
index 2aeea58..5198937 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.js
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.js
@@ -103,7 +103,7 @@
 								${__('Reserved Qty for Production: Raw materials quantity to make manufacturing items.')}
 							</li>
 							<li>
-								${__('Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.')}
+								${__('Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.')}
 							</li>
 						</ul>
 					</div>
@@ -182,8 +182,8 @@
 	},
 
 	get_items_for_mr: function(frm) {
-		const set_fields = ['actual_qty', 'item_code',
-			'item_name', 'min_order_qty', 'quantity', 'sales_order', 'warehouse', 'projected_qty', 'material_request_type'];
+		const set_fields = ['actual_qty', 'item_code','item_name', 'description', 'uom', 
+			'min_order_qty', 'quantity', 'sales_order', 'warehouse', 'projected_qty', 'material_request_type'];
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.production_plan.production_plan.get_items_for_material_requests",
 			freeze: true,
@@ -233,7 +233,7 @@
 
 		if (item_wise_qty) {
 			for (var key in item_wise_qty) {
-				title += __('Item {0}: {1} qty produced, ', [key, item_wise_qty[key]]);
+				title += __('Item {0}: {1} qty produced. ', [key, item_wise_qty[key]]);
 			}
 		}
 
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py
index 4dc98e7..0f49f73 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py
@@ -528,6 +528,7 @@
 		required_qty = ceil(required_qty)
 
 	if required_qty > 0:
+		print(row)
 		return {
 			'item_code': row.item_code,
 			'item_name': row.item_name,
@@ -540,7 +541,9 @@
 			'projected_qty': bin_dict.get("projected_qty", 0),
 			'min_order_qty': row['min_order_qty'],
 			'material_request_type': row.get("default_material_request_type"),
-			'sales_order': sales_order
+			'sales_order': sales_order,
+			'description': row.get("description"),
+			'uom': row.get("purchase_uom") or row.get("stock_uom")
 		}
 
 def get_sales_orders(self):
@@ -622,7 +625,7 @@
 	for data in po_items:
 		planned_qty = data.get('required_qty') or data.get('planned_qty')
 		ignore_existing_ordered_qty = data.get('ignore_existing_ordered_qty') or ignore_existing_ordered_qty
-		warehouse = data.get("warehouse") or warehouse
+		warehouse = warehouse or data.get("warehouse")
 
 		item_details = {}
 		if data.get("bom") or data.get("bom_no"):
diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
index f70c9cc..4479641 100644
--- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
@@ -11,9 +11,11 @@
 from erpnext.stock.doctype.stock_reconciliation.test_stock_reconciliation import create_stock_reconciliation
 from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
 from erpnext.manufacturing.doctype.production_plan.production_plan import get_items_for_material_requests
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 class TestProductionPlan(unittest.TestCase):
 	def setUp(self):
+		set_perpetual_inventory(0)
 		for item in ['Test Production Item 1', 'Subassembly Item 1',
 			'Raw Material Item 1', 'Raw Material Item 2']:
 			create_item(item, valuation_rate=100)
diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py
index d710e57..ea2e7a9 100644
--- a/erpnext/manufacturing/doctype/work_order/test_work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py
@@ -17,11 +17,11 @@
 
 class TestWorkOrder(unittest.TestCase):
 	def setUp(self):
+		set_perpetual_inventory(0)
 		self.warehouse = '_Test Warehouse 2 - _TC'
 		self.item = '_Test Item'
 
 	def check_planned_qty(self):
-		set_perpetual_inventory(0)
 
 		planned0 = frappe.db.get_value("Bin", {"item_code": "_Test FG Item",
 			"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty") or 0
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js
index 1789a1f..cdbce33 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order.js
@@ -342,7 +342,7 @@
 	},
 
 	project: function(frm) {
-		if(!erpnext.in_production_item_onchange) {
+		if(!erpnext.in_production_item_onchange && !frm.doc.bom_no) {
 			frm.trigger("production_item");
 		}
 	},
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index b57548e..ae4d9be 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -645,7 +645,8 @@
 		stock_entry.to_warehouse = work_order.fg_warehouse
 		stock_entry.project = work_order.project
 		if purpose=="Manufacture":
-			additional_costs = get_additional_costs(work_order, fg_qty=stock_entry.fg_completed_qty)
+			additional_costs = get_additional_costs(work_order, fg_qty=stock_entry.fg_completed_qty,
+				company=work_order.company)
 			stock_entry.set("additional_costs", additional_costs)
 
 	stock_entry.set_stock_entry_type()
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 94736e0..aeb12f5 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -640,5 +640,8 @@
 erpnext.patches.v12_0.set_produced_qty_field_in_sales_order_for_work_order
 erpnext.patches.v12_0.generate_leave_ledger_entries
 erpnext.patches.v12_0.set_default_shopify_app_type
+erpnext.patches.v12_0.set_expense_account_in_landed_cost_voucher_taxes
 erpnext.patches.v12_0.replace_accounting_with_accounts_in_home_settings
-execute:frappe.db.set_value("Accounts Settings", None, "add_taxes_from_item_tax_template", 1) #setting default tax template enable
\ No newline at end of file
+erpnext.patches.v12_0.set_payment_entry_status
+erpnext.patches.v12_0.update_owner_fields_in_acc_dimension_custom_fields
+erpnext.patches.v12_0.set_default_for_add_taxes_from_item_tax_template
\ No newline at end of file
diff --git a/erpnext/patches/v11_0/update_delivery_trip_status.py b/erpnext/patches/v11_0/update_delivery_trip_status.py
index 64b3063..42f017e 100755
--- a/erpnext/patches/v11_0/update_delivery_trip_status.py
+++ b/erpnext/patches/v11_0/update_delivery_trip_status.py
@@ -1,27 +1,28 @@
-# Copyright (c) 2017, Frappe and Contributors

-# License: GNU General Public License v3. See license.txt

-

-from __future__ import unicode_literals

-import frappe

-

-def execute():

-	frappe.reload_doc('stock', 'doctype', 'delivery_trip')

-	frappe.reload_doc('stock', 'doctype', 'delivery_stop', force=True)

-

-	for trip in frappe.get_all("Delivery Trip"):

-		trip_doc = frappe.get_doc("Delivery Trip", trip.name)

-

-		status = {

-			0: "Draft",

-			1: "Scheduled",

-			2: "Cancelled"

-		}[trip_doc.docstatus]

-

-		if trip_doc.docstatus == 1:

-			visited_stops = [stop.visited for stop in trip_doc.delivery_stops]

-			if all(visited_stops):

-				status = "Completed"

-			elif any(visited_stops):

-				status = "In Transit"

-

-		frappe.db.set_value("Delivery Trip", trip.name, "status", status, update_modified=False)

+# Copyright (c) 2017, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+	frappe.reload_doc('setup', 'doctype', 'global_defaults', force=True)
+	frappe.reload_doc('stock', 'doctype', 'delivery_trip')
+	frappe.reload_doc('stock', 'doctype', 'delivery_stop', force=True)
+
+	for trip in frappe.get_all("Delivery Trip"):
+		trip_doc = frappe.get_doc("Delivery Trip", trip.name)
+
+		status = {
+			0: "Draft",
+			1: "Scheduled",
+			2: "Cancelled"
+		}[trip_doc.docstatus]
+
+		if trip_doc.docstatus == 1:
+			visited_stops = [stop.visited for stop in trip_doc.delivery_stops]
+			if all(visited_stops):
+				status = "Completed"
+			elif any(visited_stops):
+				status = "In Transit"
+
+		frappe.db.set_value("Delivery Trip", trip.name, "status", status, update_modified=False)
diff --git a/erpnext/patches/v12_0/set_default_for_add_taxes_from_item_tax_template.py b/erpnext/patches/v12_0/set_default_for_add_taxes_from_item_tax_template.py
new file mode 100644
index 0000000..06ee798
--- /dev/null
+++ b/erpnext/patches/v12_0/set_default_for_add_taxes_from_item_tax_template.py
@@ -0,0 +1,5 @@
+import frappe
+
+def execute():
+	frappe.db.set_value("Accounts Settings", None, "add_taxes_from_item_tax_template", 1)
+	frappe.db.set_default("add_taxes_from_item_tax_template", 1)
\ No newline at end of file
diff --git a/erpnext/patches/v12_0/set_expense_account_in_landed_cost_voucher_taxes.py b/erpnext/patches/v12_0/set_expense_account_in_landed_cost_voucher_taxes.py
new file mode 100644
index 0000000..a996a69
--- /dev/null
+++ b/erpnext/patches/v12_0/set_expense_account_in_landed_cost_voucher_taxes.py
@@ -0,0 +1,33 @@
+from __future__ import unicode_literals
+import frappe
+from six import iteritems
+
+def execute():
+	frappe.reload_doctype('Landed Cost Taxes and Charges')
+
+	company_account_map = frappe._dict(frappe.db.sql("""
+		SELECT name, expenses_included_in_valuation from `tabCompany`
+	"""))
+
+	for company, account in iteritems(company_account_map):
+		frappe.db.sql("""
+			UPDATE
+				`tabLanded Cost Taxes and Charges` t, `tabLanded Cost Voucher` l
+			SET
+				t.expense_account = %s
+			WHERE
+				l.docstatus = 1
+				AND l.company = %s
+				AND t.parent = l.name
+		""", (account, company))
+
+		frappe.db.sql("""
+			UPDATE
+				`tabLanded Cost Taxes and Charges` t, `tabStock Entry` s
+			SET
+				t.expense_account = %s
+			WHERE
+				s.docstatus = 1
+				AND s.company = %s
+				AND t.parent = s.name
+		""", (account, company))
\ No newline at end of file
diff --git a/erpnext/patches/v12_0/set_payment_entry_status.py b/erpnext/patches/v12_0/set_payment_entry_status.py
new file mode 100644
index 0000000..fafbec6
--- /dev/null
+++ b/erpnext/patches/v12_0/set_payment_entry_status.py
@@ -0,0 +1,9 @@
+import frappe
+
+def execute():
+	frappe.reload_doctype("Payment Entry")
+	frappe.db.sql("""update `tabPayment Entry` set status = CASE
+		WHEN docstatus = 1 THEN 'Submitted'
+		WHEN docstatus = 2 THEN 'Cancelled'
+		ELSE 'Draft'
+		END;""")
\ No newline at end of file
diff --git a/erpnext/patches/v12_0/update_owner_fields_in_acc_dimension_custom_fields.py b/erpnext/patches/v12_0/update_owner_fields_in_acc_dimension_custom_fields.py
new file mode 100644
index 0000000..e4dcecd
--- /dev/null
+++ b/erpnext/patches/v12_0/update_owner_fields_in_acc_dimension_custom_fields.py
@@ -0,0 +1,17 @@
+from __future__ import unicode_literals
+import frappe
+from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_doctypes_with_dimensions
+
+def execute():
+	accounting_dimensions = frappe.db.sql("""select fieldname from
+		`tabAccounting Dimension`""", as_dict=1)
+
+	doclist = get_doctypes_with_dimensions()
+
+	for dimension in accounting_dimensions:
+		frappe.db.sql("""
+			UPDATE `tabCustom Field`
+			SET owner = 'Administrator'
+			WHERE fieldname = %s
+			AND dt IN (%s)""" %			#nosec
+			('%s', ', '.join(['%s']* len(doclist))), tuple([dimension.fieldname] + doclist))
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index beba2bb..4a03a58 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -11,12 +11,15 @@
 					// add a new row and set the project
 					let time_log = frappe.model.get_new_doc('Timesheet Detail');
 					time_log.project = frm.doc.name;
+					time_log.parent = new_doc.name;
+					time_log.parentfield = 'time_logs';
+					time_log.parenttype = 'Timesheet';
 					new_doc.time_logs = [time_log];
 
 					frappe.ui.form.make_quick_entry(doctype, null, null, new_doc);
 				});
 			},
-		}
+		};
 	},
 	onload: function (frm) {
 		var so = frappe.meta.get_docfield("Project", "sales_order");
@@ -25,15 +28,15 @@
 			return {
 				"customer": frm.doc.customer,
 				"project_name": frm.doc.name
-			}
-		}
+			};
+		};
 
 		frm.set_query('customer', 'erpnext.controllers.queries.customer_query');
 
 		frm.set_query("user", "users", function () {
 			return {
 				query: "erpnext.projects.doctype.project.project.get_users_for_project"
-			}
+			};
 		});
 
 		// sales order
@@ -48,7 +51,7 @@
 
 			return {
 				filters: filters
-			}
+			};
 		});
 
 		if (frappe.model.can_read("Task")) {
@@ -82,6 +85,10 @@
 
 	set_buttons: function(frm) {
 		if (!frm.is_new()) {
+			frm.add_custom_button(__('Duplicate Project with Tasks'), () => {
+				frm.events.create_duplicate(frm);
+			});
+
 			frm.add_custom_button(__('Completed'), () => {
 				frm.events.set_status(frm, 'Completed');
 			}, __('Set Status'));
@@ -92,6 +99,22 @@
 		}
 	},
 
+	create_duplicate: function(frm) {
+		return new Promise(resolve => {
+			frappe.prompt('Project Name', (data) => {
+				frappe.xcall('erpnext.projects.doctype.project.project.create_duplicate_project',
+					{
+						prev_doc: frm.doc,
+						project_name: data.value
+					}).then(() => {
+					frappe.set_route('Form', "Project", data.value);
+					frappe.show_alert(__("Duplicate project has been created"));
+				});
+				resolve();
+			});
+		});
+	},
+
 	set_status: function(frm, status) {
 		frappe.confirm(__('Set Project and all Tasks to status {0}?', [status.bold()]), () => {
 			frappe.xcall('erpnext.projects.doctype.project.project.set_project_status',
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 783bcf3..bf6e21a 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -323,6 +323,37 @@
 	if get_time(nowtime()) >= get_time(time):
 		return True
 
+
+@frappe.whitelist()
+def create_duplicate_project(prev_doc, project_name):
+	''' Create duplicate project based on the old project '''
+	import json
+	prev_doc = json.loads(prev_doc)
+
+	if project_name == prev_doc.get('name'):
+		frappe.throw(_("Use a name that is different from previous project name"))
+
+	# change the copied doc name to new project name
+	project = frappe.copy_doc(prev_doc)
+	project.name = project_name
+	project.project_template = ''
+	project.project_name = project_name
+	project.insert()
+
+	# fetch all the task linked with the old project
+	task_list = frappe.get_all("Task", filters={
+		'project': prev_doc.get('name')
+	}, fields=['name'])
+
+	# Create duplicate task for all the task
+	for task in task_list:
+		task = frappe.get_doc('Task', task)
+		new_task = frappe.copy_doc(task)
+		new_task.project = project.name
+		new_task.insert()
+
+	project.db_set('project_template', prev_doc.get('project_template'))
+
 def get_projects_for_collect_progress(frequency, fields):
 	fields.extend(["name"])
 
diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py
index 9ee2927..bc88250 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.py
+++ b/erpnext/projects/doctype/timesheet/timesheet.py
@@ -353,17 +353,35 @@
 def get_timesheets_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by="modified"):
 	user = frappe.session.user
 	# find customer name from contact.
-	customer = frappe.db.sql('''SELECT dl.link_name FROM `tabContact` AS c inner join \
-		`tabDynamic Link` AS dl ON c.first_name=dl.link_name WHERE c.email_id=%s''',user)
+	customer = ''
+	timesheets = []
+
+	contact = frappe.db.exists('Contact', {'user': user})
+	if contact:
+		# find customer
+		contact = frappe.get_doc('Contact', contact)
+		customer = contact.get_link_for('Customer')
 
 	if customer:
-		# find list of Sales Invoice for made for customer.
-		sales_invoice = frappe.db.sql('''SELECT name FROM `tabSales Invoice` WHERE customer = %s''',customer)
+		sales_invoices = [d.name for d in frappe.get_all('Sales Invoice', filters={'customer': customer})] or [None]
+		projects = [d.name for d in frappe.get_all('Project', filters={'customer': customer})]
 		# Return timesheet related data to web portal.
-		return frappe. db.sql('''SELECT ts.name, tsd.activity_type, ts.status, ts.total_billable_hours, \
-			tsd.sales_invoice, tsd.project  FROM `tabTimesheet` AS ts inner join `tabTimesheet Detail` \
-			AS tsd ON tsd.parent = ts.name where tsd.sales_invoice IN %s order by\
-			end_date asc limit {0} , {1}'''.format(limit_start, limit_page_length), [sales_invoice], as_dict = True)
+		timesheets = frappe.db.sql('''
+			SELECT
+				ts.name, tsd.activity_type, ts.status, ts.total_billable_hours,
+				COALESCE(ts.sales_invoice, tsd.sales_invoice) AS sales_invoice, tsd.project
+			FROM `tabTimesheet` ts, `tabTimesheet Detail` tsd
+			WHERE tsd.parent = ts.name AND
+				(
+					ts.sales_invoice IN %(sales_invoices)s OR
+					tsd.sales_invoice IN %(sales_invoices)s OR
+					tsd.project IN %(projects)s
+				)
+			ORDER BY `end_date` ASC
+			LIMIT {0}, {1}
+		'''.format(limit_start, limit_page_length), dict(sales_invoices=sales_invoices, projects=projects), as_dict=True) #nosec
+
+	return timesheets
 
 def get_list_context(context=None):
 	return {
diff --git a/erpnext/regional/__init__.py b/erpnext/regional/__init__.py
index 7388ea0..630d5fa 100644
--- a/erpnext/regional/__init__.py
+++ b/erpnext/regional/__init__.py
@@ -10,3 +10,21 @@
 	region = get_region(doc.company)
 	if region in ["Nepal", "France"] and doc.docstatus != 0:
 		frappe.throw(_("Deletion is not permitted for country {0}".format(region)))
+
+def create_transaction_log(doc, method):
+	"""
+	Appends the transaction to a chain of hashed logs for legal resons.
+	Called on submit of Sales Invoice and Payment Entry.
+	"""
+	region = get_region()
+	if region not in ["France", "Germany"]:
+		return
+
+	data = str(doc.as_dict())
+
+	frappe.get_doc({
+		"doctype": "Transaction Log",
+		"reference_doctype": doc.doctype,
+		"document_name": doc.name,
+		"data": data
+	}).insert(ignore_permissions=True)
diff --git a/erpnext/regional/france/utils.py b/erpnext/regional/france/utils.py
index e4b72f6..424615d 100644
--- a/erpnext/regional/france/utils.py
+++ b/erpnext/regional/france/utils.py
@@ -3,22 +3,6 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe import _
-from erpnext import get_region
-
-def create_transaction_log(doc, method):
-	region = get_region()
-	if region not in ["France"]:
-		return
-	else:
-		data = str(doc.as_dict())
-
-		frappe.get_doc({
-			"doctype": "Transaction Log",
-			"reference_doctype": doc.doctype,
-			"document_name": doc.name,
-			"data": data
-		}).insert(ignore_permissions=True)
 
 # don't remove this function it is used in tests
 def test_method():
diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py
index 0bc277f..aae0779 100644
--- a/erpnext/regional/india/utils.py
+++ b/erpnext/regional/india/utils.py
@@ -72,8 +72,8 @@
 		total += digit
 		factor = 2 if factor == 1 else 1
 	if gstin[-1] != code_point_chars[((mod - (total % mod)) % mod)]:
-		frappe.throw(_("Invalid {0}! The check digit validation has failed. " +
-			"Please ensure you've typed the {0} correctly.".format(label)))
+		frappe.throw(_("""Invalid {0}! The check digit validation has failed.
+			Please ensure you've typed the {0} correctly.""".format(label)))
 
 def get_itemised_tax_breakup_header(item_doctype, tax_accounts):
 	if frappe.get_meta(item_doctype).has_field('gst_hsn_code'):
diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py
index 922619c..090616b 100644
--- a/erpnext/regional/report/gstr_1/gstr_1.py
+++ b/erpnext/regional/report/gstr_1/gstr_1.py
@@ -116,7 +116,7 @@
 		taxable_value = 0
 		for item_code, net_amount in self.invoice_items.get(invoice).items():
 				if item_code in items:
-					if self.item_tax_rate.get(invoice) and tax_rate in self.item_tax_rate.get(invoice, {}).get(item_code):
+					if self.item_tax_rate.get(invoice) and tax_rate in self.item_tax_rate.get(invoice, {}).get(item_code, []):
 						taxable_value += abs(net_amount)
 					elif not self.item_tax_rate.get(invoice):
 						taxable_value += abs(net_amount)
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index a2b8544..85e8143 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -150,7 +150,7 @@
 
 					// delivery note
 					if(flt(doc.per_delivered, 6) < 100 && ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1 && allow_delivery) {
-						this.frm.add_custom_button(__('Delivery'), () => this.make_delivery_note_based_on_delivery_date(), __('Create'));
+						this.frm.add_custom_button(__('Delivery Note'), () => this.make_delivery_note_based_on_delivery_date(), __('Create'));
 						this.frm.add_custom_button(__('Work Order'), () => this.make_work_order(), __('Create'));
 					}
 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index ccc48e1..0a19fad 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -31,8 +31,8 @@
   "contact_phone",
   "contact_mobile",
   "contact_email",
-  "company_address_display",
   "company_address",
+  "company_address_display",
   "col_break46",
   "shipping_address_name",
   "shipping_address",
@@ -342,12 +342,13 @@
   {
    "fieldname": "company_address_display",
    "fieldtype": "Small Text",
+   "label": "Company Address",
    "read_only": 1
   },
   {
    "fieldname": "company_address",
    "fieldtype": "Link",
-   "label": "Company Address",
+   "label": "Company Address Name",
    "options": "Address"
   },
   {
@@ -1193,7 +1194,7 @@
  "icon": "fa fa-file-text",
  "idx": 105,
  "is_submittable": 1,
- "modified": "2019-10-22 14:26:42.767189",
+ "modified": "2019-10-23 14:26:42.767189",
  "modified_by": "Administrator",
  "module": "Selling",
  "name": "Sales Order",
diff --git a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js
new file mode 100644
index 0000000..ee806a7
--- /dev/null
+++ b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+/* eslint-disable */
+
+frappe.query_reports["Item-wise Sales History"] = {
+	"filters": [
+		{
+			fieldname:"company",
+			label: __("Company"),
+			fieldtype: "Link",
+			options: "Company",
+			default: frappe.defaults.get_user_default("Company"),
+			reqd: 1
+		},
+		{
+			fieldname:"item_group",
+			label: __("Item Group"),
+			fieldtype: "Link",
+			options: "Item Group"
+		},
+		{
+			fieldname:"from_date",
+			label: __("From Date"),
+			fieldtype: "Date",
+		},
+		{
+			fieldname:"to_date",
+			label: __("To Date"),
+			fieldtype: "Date",
+		},
+
+	]
+};
\ No newline at end of file
diff --git a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.json b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.json
index 88e6f27..a6dda28 100644
--- a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.json
+++ b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.json
@@ -1,34 +1,34 @@
 {
- "add_total_row": 1, 
- "creation": "2013-05-23 17:42:24", 
- "disabled": 0, 
- "docstatus": 0, 
- "doctype": "Report", 
- "idx": 3, 
- "is_standard": "Yes", 
- "modified": "2019-01-03 22:52:41.519890", 
- "modified_by": "Administrator", 
- "module": "Selling", 
- "name": "Item-wise Sales History", 
- "owner": "Administrator", 
- "prepared_report": 0, 
- "query": "select\n    so_item.item_code as \"Item Code:Link/Item:120\",\n\tso_item.item_name as \"Item Name::120\",\n        so_item.item_group as \"Item Group:Link/Item Group:120\",\n\tso_item.description as \"Description::150\",\n\tso_item.qty as \"Qty:Data:100\",\n\tso_item.uom as \"UOM:Link/UOM:80\",\n\tso_item.base_rate as \"Rate:Currency:120\",\n\tso_item.base_amount as \"Amount:Currency:120\",\n\tso.name as \"Sales Order:Link/Sales Order:120\",\n\tso.transaction_date as \"Transaction Date:Date:140\",\n\tso.customer as \"Customer:Link/Customer:130\",\n        cu.customer_name as \"Customer Name::150\",\n\tcu.customer_group as \"Customer Group:Link/Customer Group:130\",\n\tso.territory as \"Territory:Link/Territory:130\",\n    \tso.project as \"Project:Link/Project:130\",\n\tifnull(so_item.delivered_qty, 0) as \"Delivered Qty:Float:120\",\n\tifnull(so_item.billed_amt, 0) as \"Billed Amount:Currency:120\",\n\tso.company as \"Company:Link/Company:\"\nfrom\n\t`tabSales Order` so, `tabSales Order Item` so_item, `tabCustomer` cu\nwhere\n\tso.name = so_item.parent and so.customer=cu.name\n\tand so.docstatus = 1\norder by so.name desc", 
- "ref_doctype": "Sales Order", 
- "report_name": "Item-wise Sales History", 
- "report_type": "Query Report", 
+ "add_total_row": 1,
+ "creation": "2013-05-23 17:42:24",
+ "disable_prepared_report": 0,
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "idx": 3,
+ "is_standard": "Yes",
+ "modified": "2019-11-04 16:28:14.608904",
+ "modified_by": "Administrator",
+ "module": "Selling",
+ "name": "Item-wise Sales History",
+ "owner": "Administrator",
+ "prepared_report": 0,
+ "ref_doctype": "Sales Order",
+ "report_name": "Item-wise Sales History",
+ "report_type": "Script Report",
  "roles": [
   {
    "role": "Sales User"
-  }, 
+  },
   {
    "role": "Sales Manager"
-  }, 
+  },
   {
    "role": "Maintenance User"
-  }, 
+  },
   {
    "role": "Accounts User"
-  }, 
+  },
   {
    "role": "Stock User"
   }
diff --git a/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py
new file mode 100644
index 0000000..226c34f
--- /dev/null
+++ b/erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py
@@ -0,0 +1,214 @@
+# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+from frappe.utils import flt
+from frappe.utils.nestedset import get_descendants_of
+
+def execute(filters=None):
+	filters = frappe._dict(filters or {})
+	columns = get_columns(filters)
+	data = get_data(filters)
+	return columns, data
+
+def get_columns(filters):
+	return [
+		{
+			"label": _("Item Code"),
+			"fieldtype": "Link",
+			"fieldname": "item_code",
+			"options": "Item",
+			"width": 120
+		},
+		{
+			"label": _("Item Name"),
+			"fieldtype": "Data",
+			"fieldname": "item_name",
+			"width": 140
+		},
+		{
+			"label": _("Item Group"),
+			"fieldtype": "Link",
+			"fieldname": "item_group",
+			"options": "Item Group",
+			"width": 120
+		},
+		{
+			"label": _("Description"),
+			"fieldtype": "Data",
+			"fieldname": "description",
+			"width": 150
+		},
+		{
+			"label": _("Quantity"),
+			"fieldtype": "Float",
+			"fieldname": "quantity",
+			"width": 150
+		},
+		{
+			"label": _("UOM"),
+			"fieldtype": "Link",
+			"fieldname": "uom",
+			"options": "UOM",
+			"width": 100
+		},
+		{
+			"label": _("Rate"),
+			"fieldname": "rate",
+			"options": "Currency",
+			"width": 120
+		},
+		{
+			"label": _("Amount"),
+			"fieldname": "amount",
+			"options": "Currency",
+			"width": 120
+		},
+		{
+			"label": _("Sales Order"),
+			"fieldtype": "Link",
+			"fieldname": "sales_order",
+			"options": "Sales Order",
+			"width": 100
+		},
+		{
+			"label": _("Transaction Date"),
+			"fieldtype": "Date",
+			"fieldname": "transaction_date",
+			"width": 90
+		},
+		{
+			"label": _("Customer"),
+			"fieldtype": "Link",
+			"fieldname": "customer",
+			"options": "Customer",
+			"width": 100
+		},
+		{
+			"label": _("Customer Name"),
+			"fieldtype": "Data",
+			"fieldname": "customer_name",
+			"width": 140
+		},
+		{
+			"label": _("Customer Group"),
+			"fieldtype": "Link",
+			"fieldname": "customer_group",
+			"options": "customer Group",
+			"width": 120
+		},
+		{
+			"label": _("Territory"),
+			"fieldtype": "Link",
+			"fieldname": "territory",
+			"options": "Territory",
+			"width": 100
+		},
+		{
+			"label": _("Project"),
+			"fieldtype": "Link",
+			"fieldname": "project",
+			"options": "Project",
+			"width": 100
+		},
+		{
+			"label": _("Delivered Quantity"),
+			"fieldtype": "Float",
+			"fieldname": "delivered_quantity",
+			"width": 150
+		},
+		{
+			"label": _("Billed Amount"),
+			"fieldname": "rate",
+			"options": "billed_amount",
+			"width": 120
+		},
+		{
+			"label": _("Company"),
+			"fieldtype": "Link",
+			"fieldname": "company",
+			"options": "Company",
+			"width": 100
+		}
+	]
+
+def get_data(filters):
+
+	data = []
+
+	company_list = get_descendants_of("Company", filters.get("company"))
+	company_list.append(filters.get("company"))
+
+	customer_details = get_customer_details()
+	sales_order_records = get_sales_order_details(company_list, filters)
+
+	for record in sales_order_records:
+		customer_record = customer_details.get(record.customer)
+		row = {
+			"item_code": record.item_code,
+			"item_name": record.item_name,
+			"item_group": record.item_group,
+			"description": record.description,
+			"quantity": record.qty,
+			"uom": record.uom,
+			"rate": record.base_rate,
+			"amount": record.base_amount,
+			"sales_order": record.name,
+			"transaction_date": record.transaction_date,
+			"customer": record.customer,
+			"customer_name": customer_record.customer_name,
+			"customer_group": customer_record.customer_group,
+			"territory": record.territory,
+			"project": record.project,
+			"delivered_quantity": flt(record.delivered_qty),
+			"billed_amount": flt(record.billed_amt),
+			"company": record.company
+		}
+		data.append(row)
+
+	return data
+
+def get_conditions(filters):
+	conditions = ''
+	if filters.get('item_group'):
+		conditions += "AND so_item.item_group = %s" %frappe.db.escape(filters.item_group)
+
+	if filters.get('from_date'):
+		conditions += "AND so.transaction_date >= '%s'" %filters.from_date
+
+	if filters.get('to_date'):
+		conditions += "AND so.transaction_date <= '%s'" %filters.to_date
+
+	return conditions
+
+def get_customer_details():
+	details = frappe.get_all('Customer',
+		fields=['name', 'customer_name', "customer_group"])
+	customer_details = {}
+	for d in details:
+		customer_details.setdefault(d.name, frappe._dict({
+			"customer_name": d.customer_name,
+			"customer_group": d.customer_group
+		}))
+	return customer_details
+
+def get_sales_order_details(company_list, filters):
+	conditions = get_conditions(filters)
+	return frappe.db.sql("""
+		SELECT
+			so_item.item_code, so_item.item_name, so_item.item_group,
+			so_item.description, so_item.qty, so_item.uom,
+			so_item.base_rate, so_item.base_amount, so.name,
+			so.transaction_date, so.customer, so.territory,
+			so.project, so_item.delivered_qty,
+			so_item.billed_amt, so.company
+		FROM
+			`tabSales Order` so, `tabSales Order Item` so_item
+		WHERE
+			so.name = so_item.parent
+			AND so.company in (%s)
+			AND so.docstatus = 1
+			{0}
+	""".format(conditions), company_list, as_dict=1) #nosec
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index e69a6aad..04e8a83 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -33,6 +33,10 @@
 		return exists
 
 	def validate(self):
+		self.update_default_account = False
+		if self.is_new():
+			self.update_default_account = True
+
 		self.validate_abbr()
 		self.validate_default_accounts()
 		self.validate_currency()
@@ -203,8 +207,8 @@
 				"default_expense_account": "Cost of Goods Sold"
 			})
 
-		for default_account in default_accounts:
-			if self.is_new() or frappe.flags.in_test or frappe.flags.in_demo:
+		if self.update_default_account:
+			for default_account in default_accounts:
 				self._set_default_account(default_account, default_accounts.get(default_account))
 
 		if not self.default_income_account:
diff --git a/erpnext/setup/doctype/company/test_company.py b/erpnext/setup/doctype/company/test_company.py
index 8debef5..8d9c23a 100644
--- a/erpnext/setup/doctype/company/test_company.py
+++ b/erpnext/setup/doctype/company/test_company.py
@@ -22,7 +22,7 @@
 		company.create_chart_of_accounts_based_on = "Existing Company"
 		company.existing_company = "_Test Company"
 		company.save()
-		
+
 		expected_results = {
 			"Debtors - CFEC": {
 				"account_type": "Receivable",
@@ -37,7 +37,7 @@
 				"parent_account": "Cash In Hand - CFEC"
 			}
 		}
-		
+
 		for account, acc_property in expected_results.items():
 			acc = frappe.get_doc("Account", account)
 			for prop, val in acc_property.items():
@@ -50,14 +50,14 @@
 		countries = ["India", "Brazil", "United Arab Emirates", "Canada", "Germany", "France",
 			"Guatemala", "Indonesia", "Italy", "Mexico", "Nicaragua", "Netherlands", "Singapore",
 			"Brazil", "Argentina", "Hungary", "Taiwan"]
-		
+
 		for country in countries:
 			templates = get_charts_for_country(country)
 			if len(templates) != 1 and "Standard" in templates:
 				templates.remove("Standard")
-			
+
 			self.assertTrue(templates)
-			
+
 			for template in templates:
 				try:
 					company = frappe.new_doc("Company")
@@ -67,11 +67,11 @@
 					company.create_chart_of_accounts_based_on = "Standard Template"
 					company.chart_of_accounts = template
 					company.save()
-				
-					account_types = ["Cost of Goods Sold", "Depreciation", 
-						"Expenses Included In Valuation", "Fixed Asset", "Payable", "Receivable", 
+
+					account_types = ["Cost of Goods Sold", "Depreciation",
+						"Expenses Included In Valuation", "Fixed Asset", "Payable", "Receivable",
 						"Stock Adjustment", "Stock Received But Not Billed", "Bank", "Cash", "Stock"]
-				
+
 					for account_type in account_types:
 						filters = {
 							"company": template,
diff --git a/erpnext/setup/doctype/company/test_records.json b/erpnext/setup/doctype/company/test_records.json
index 58d8b5c..2130241 100644
--- a/erpnext/setup/doctype/company/test_records.json
+++ b/erpnext/setup/doctype/company/test_records.json
@@ -62,5 +62,16 @@
 		"domain": "Manufacturing",
 		"chart_of_accounts": "Standard",
 		"default_holiday_list": "_Test Holiday List"
+	},
+	{
+		"abbr": "TCP1",
+		"company_name": "_Test Company with perpetual inventory",
+		"country": "India",
+		"default_currency": "INR",
+		"doctype": "Company",
+		"domain": "Manufacturing",
+		"chart_of_accounts": "Standard",
+		"enable_perpetual_inventory": 1,
+		"default_holiday_list": "_Test Holiday List"
 	}
 ]
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index a4c10cf..1236ade 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -11,6 +11,7 @@
 from frappe.utils.nestedset import get_root_of
 from erpnext.accounts.utils import get_account_name
 from erpnext.utilities.product import get_qty_in_stock
+from frappe.contacts.doctype.contact.contact import get_contact_name
 
 
 class WebsitePriceListMissingError(frappe.ValidationError):
@@ -371,7 +372,7 @@
 	if not user:
 		user = frappe.session.user
 
-	contact_name = frappe.db.get_value("Contact", {"email_id": user})
+	contact_name = get_contact_name(user)
 	party = None
 
 	if contact_name:
@@ -417,7 +418,7 @@
 		contact = frappe.new_doc("Contact")
 		contact.update({
 			"first_name": fullname,
-			"email_id": user
+			"email_ids": [{"email_id": user, "is_primary": 1}]
 		})
 		contact.append('links', dict(link_doctype='Customer', link_name=customer.name))
 		contact.flags.ignore_mandatory = True
@@ -504,7 +505,7 @@
 	if shipping_rules:
 		rule_label_map = frappe.db.get_values("Shipping Rule", shipping_rules, "label")
 		# we need this in sorted order as per the position of the rule in the settings page
-		return [[rule, rule_label_map.get(rule)] for rule in shipping_rules]
+		return [[rule, rule] for rule in shipping_rules]
 
 def get_shipping_rules(quotation=None, cart_settings=None):
 	if not quotation:
@@ -562,4 +563,4 @@
 			frappe.throw(_("Please enter valid coupon code !!"))
 	else:
 		frappe.throw(_("Please enter coupon code !!"))
-	return quotation
\ No newline at end of file
+	return quotation
diff --git a/erpnext/stock/__init__.py b/erpnext/stock/__init__.py
index 32a03e7..a4d4cbd 100644
--- a/erpnext/stock/__init__.py
+++ b/erpnext/stock/__init__.py
@@ -21,7 +21,7 @@
 			filters['company'] = company
 
 		for d in frappe.get_all('Warehouse',
-			fields = ["name", "account", "parent_warehouse", "company"],
+			fields = ["name", "account", "parent_warehouse", "company", "is_group"],
 			filters = filters,
 			order_by="lft, rgt"):
 			if not d.account:
diff --git a/erpnext/stock/doctype/batch/test_batch.py b/erpnext/stock/doctype/batch/test_batch.py
index 56b4607..32445a6 100644
--- a/erpnext/stock/doctype/batch/test_batch.py
+++ b/erpnext/stock/doctype/batch/test_batch.py
@@ -8,10 +8,13 @@
 
 from erpnext.stock.doctype.batch.batch import get_batch_qty, UnableToSelectBatchError, get_batch_no
 from frappe.utils import cint
-
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 class TestBatch(unittest.TestCase):
 
+	def setUp(self):
+		set_perpetual_inventory(0)
+
 	def test_item_has_batch_enabled(self):
 		self.assertRaises(ValidationError, frappe.get_doc({
 			"doctype": "Batch",
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note_list.js b/erpnext/stock/doctype/delivery_note/delivery_note_list.js
index 6fc51ec..0ae7c37 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note_list.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note_list.js
@@ -6,9 +6,9 @@
 			return [__("Return"), "darkgrey", "is_return,=,Yes"];
 		} else if (doc.status === "Closed") {
 			return [__("Closed"), "green", "status,=,Closed"];
-		} else if (doc.grand_total !== 0 && flt(doc.per_billed, 2) < 100) {
+		} else if (flt(doc.per_billed, 2) < 100) {
 			return [__("To Bill"), "orange", "per_billed,<,100"];
-		} else if (doc.grand_total === 0 || flt(doc.per_billed, 2) == 100) {
+		} else if (flt(doc.per_billed, 2) == 100) {
 			return [__("Completed"), "green", "per_billed,=,100"];
 		}
 	},
diff --git a/erpnext/stock/doctype/delivery_note/test_delivery_note.py b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
index 91b6f4c..dc92c5c 100644
--- a/erpnext/stock/doctype/delivery_note/test_delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/test_delivery_note.py
@@ -20,18 +20,11 @@
 	import create_stock_reconciliation, set_valuation_method
 from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order, create_dn_against_so
 from erpnext.accounts.doctype.account.test_account import get_inventory_account, create_account
+from erpnext.stock.doctype.warehouse.test_warehouse import get_warehouse
 
 class TestDeliveryNote(unittest.TestCase):
-	def tearDown(self):
-		target_warehouse = "_Test Warehouse 1 - _TC"
-		company = "_Test Company"
-		if not frappe.db.exists("Account", target_warehouse):
-			parent_account = frappe.db.get_value('Account',
-				{'company': company, 'is_group':1, 'account_type': 'Stock'},'name')
-
-			account = create_account(account_name="_Test Warehouse 1", \
-				account_type="Stock", parent_account= parent_account, company=company)
-			frappe.db.set_value('Warehouse', target_warehouse, 'account', account)
+	def setUp(self):
+		set_perpetual_inventory(0)
 
 	def test_over_billing_against_dn(self):
 		frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
@@ -68,17 +61,16 @@
 		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
 
 	def test_delivery_note_gl_entry(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
 		set_valuation_method("_Test Item", "FIFO")
 
-		make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)
+		make_stock_entry(target="Stores - TCP1", qty=5, basic_rate=100)
 
-		stock_in_hand_account = get_inventory_account('_Test Company')
+		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory')
 		prev_bal = get_balance_on(stock_in_hand_account)
 
-		dn = create_delivery_note()
+		dn = create_delivery_note(company='_Test Company with perpetual inventory', warehouse='Stores - TCP1', cost_center = 'Main - TCP1', expense_account = "Cost of Goods Sold - TCP1")
 
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
@@ -88,7 +80,7 @@
 
 		expected_values = {
 			stock_in_hand_account: [0.0, stock_value_difference],
-			"Cost of Goods Sold - _TC": [stock_value_difference, 0.0]
+			"Cost of Goods Sold - TCP1": [stock_value_difference, 0.0]
 		}
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))
@@ -98,7 +90,7 @@
 		self.assertEqual(bal, prev_bal - stock_value_difference)
 
 		# back dated incoming entry
-		make_stock_entry(posting_date=add_days(nowdate(), -2), target="_Test Warehouse - _TC",
+		make_stock_entry(posting_date=add_days(nowdate(), -2), target="Stores - TCP1",
 			qty=5, basic_rate=100)
 
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
@@ -109,27 +101,25 @@
 
 		expected_values = {
 			stock_in_hand_account: [0.0, stock_value_difference],
-			"Cost of Goods Sold - _TC": [stock_value_difference, 0.0]
+			"Cost of Goods Sold - TCP1": [stock_value_difference, 0.0]
 		}
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))
 
 		dn.cancel()
 		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
-		set_perpetual_inventory(0, company)
 
 	def test_delivery_note_gl_entry_packing_item(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
-		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=10, basic_rate=100)
+		make_stock_entry(item_code="_Test Item", target="Stores - TCP1", qty=10, basic_rate=100)
 		make_stock_entry(item_code="_Test Item Home Desktop 100",
-			target="_Test Warehouse - _TC", qty=10, basic_rate=100)
+			target="Stores - TCP1", qty=10, basic_rate=100)
 
-		stock_in_hand_account = get_inventory_account('_Test Company')
+		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory')
 		prev_bal = get_balance_on(stock_in_hand_account)
 
-		dn = create_delivery_note(item_code="_Test Product Bundle Item")
+		dn = create_delivery_note(item_code="_Test Product Bundle Item", company='_Test Company with perpetual inventory', warehouse='Stores - TCP1', cost_center = 'Main - TCP1', expense_account = "Cost of Goods Sold - TCP1")
 
 		stock_value_diff_rm1 = abs(frappe.db.get_value("Stock Ledger Entry",
 			{"voucher_type": "Delivery Note", "voucher_no": dn.name, "item_code": "_Test Item"},
@@ -146,7 +136,7 @@
 
 		expected_values = {
 			stock_in_hand_account: [0.0, stock_value_diff],
-			"Cost of Goods Sold - _TC": [stock_value_diff, 0.0]
+			"Cost of Goods Sold - TCP1": [stock_value_diff, 0.0]
 		}
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))
@@ -158,8 +148,6 @@
 		dn.cancel()
 		self.assertFalse(get_gl_entries("Delivery Note", dn.name))
 
-		set_perpetual_inventory(0, company)
-
 	def test_serialized(self):
 		se = make_serialized_item()
 		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]
@@ -218,16 +206,16 @@
 			self.assertEqual(cstr(serial_no.get(field)), value)
 
 	def test_sales_return_for_non_bundled_items(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
-		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, basic_rate=100)
+		make_stock_entry(item_code="_Test Item", target="Stores - TCP1", qty=50, basic_rate=100)
 
-		actual_qty_0 = get_qty_after_transaction()
+		actual_qty_0 = get_qty_after_transaction(warehouse="Stores - TCP1")
 
-		dn = create_delivery_note(qty=5, rate=500)
+		dn = create_delivery_note(qty=5, rate=500, warehouse="Stores - TCP1", company=company,
+			expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")
 
-		actual_qty_1 = get_qty_after_transaction()
+		actual_qty_1 = get_qty_after_transaction(warehouse="Stores - TCP1")
 		self.assertEqual(actual_qty_0 - 5, actual_qty_1)
 
 		# outgoing_rate
@@ -235,9 +223,10 @@
 			"voucher_no": dn.name}, "stock_value_difference") / 5
 
 		# return entry
-		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-2, rate=500)
+		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-2, rate=500,
+			company=company, warehouse="Stores - TCP1", expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")
 
-		actual_qty_2 = get_qty_after_transaction()
+		actual_qty_2 = get_qty_after_transaction(warehouse="Stores - TCP1")
 
 		self.assertEqual(actual_qty_1 + 2, actual_qty_2)
 
@@ -246,27 +235,29 @@
 			["incoming_rate", "stock_value_difference"])
 
 		self.assertEqual(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
-		stock_in_hand_account = get_inventory_account('_Test Company', dn1.items[0].warehouse)
+		stock_in_hand_account = get_inventory_account(company, dn1.items[0].warehouse)
 
 		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
 			"voucher_no": dn1.name, "account": stock_in_hand_account}, "debit")
 
 		self.assertEqual(gle_warehouse_amount, stock_value_difference)
 
-		set_perpetual_inventory(0, company)
-
 	def test_return_single_item_from_bundled_items(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
-		create_stock_reconciliation(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, rate=100)
-		create_stock_reconciliation(item_code="_Test Item Home Desktop 100", target="_Test Warehouse - _TC",
-			qty=50, rate=100)
+		create_stock_reconciliation(item_code="_Test Item",
+			warehouse="Stores - TCP1", qty=50, rate=100,
+			company=company, expense_account = "Stock Adjustment - TCP1")
+		create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
+			warehouse="Stores - TCP1", qty=50, rate=100,
+			company=company, expense_account = "Stock Adjustment - TCP1")
 
-		dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500)
+		dn = create_delivery_note(item_code="_Test Product Bundle Item", qty=5, rate=500,
+			company=company, warehouse="Stores - TCP1",
+			expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")
 
 		# Qty after delivery
-		actual_qty_1 = get_qty_after_transaction()
+		actual_qty_1 = get_qty_after_transaction(warehouse="Stores - TCP1")
 		self.assertEqual(actual_qty_1,  25)
 
 		# outgoing_rate
@@ -274,10 +265,12 @@
 			"voucher_no": dn.name, "item_code": "_Test Item"}, "stock_value_difference") / 25
 
 		# return 'test item' from packed items
-		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-10, rate=500)
+		dn1 = create_delivery_note(is_return=1, return_against=dn.name, qty=-10, rate=500,
+			company=company, warehouse="Stores - TCP1",
+			expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")
 
 		# qty after return
-		actual_qty_2 = get_qty_after_transaction()
+		actual_qty_2 = get_qty_after_transaction(warehouse="Stores - TCP1")
 		self.assertEqual(actual_qty_2, 35)
 
 		# Check incoming rate for return entry
@@ -286,7 +279,7 @@
 			["incoming_rate", "stock_value_difference"])
 
 		self.assertEqual(flt(incoming_rate, 3), abs(flt(outgoing_rate, 3)))
-		stock_in_hand_account = get_inventory_account('_Test Company', dn1.items[0].warehouse)
+		stock_in_hand_account = get_inventory_account(company, dn1.items[0].warehouse)
 
 		# Check gl entry for warehouse
 		gle_warehouse_amount = frappe.db.get_value("GL Entry", {"voucher_type": "Delivery Note",
@@ -294,33 +287,33 @@
 
 		self.assertEqual(gle_warehouse_amount, stock_value_difference)
 
-		set_perpetual_inventory(0, company)
 
 	def test_return_entire_bundled_items(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
 		create_stock_reconciliation(item_code="_Test Item",
-			target="_Test Warehouse - _TC", qty=50, rate=100)
+			warehouse="Stores - TCP1", qty=50, rate=100,
+			company=company, expense_account = "Stock Adjustment - TCP1")
 		create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
-			target="_Test Warehouse - _TC", qty=50, rate=100)
+			warehouse="Stores - TCP1", qty=50, rate=100,
+			company=company, expense_account = "Stock Adjustment - TCP1")
 
-		actual_qty = get_qty_after_transaction()
+		actual_qty = get_qty_after_transaction(warehouse="Stores - TCP1")
 		self.assertEqual(actual_qty, 50)
 
 		dn = create_delivery_note(item_code="_Test Product Bundle Item",
-			qty=5, rate=500)
+			qty=5, rate=500, company=company, warehouse="Stores - TCP1", expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")
 
 		# qty after return
-		actual_qty = get_qty_after_transaction()
+		actual_qty = get_qty_after_transaction(warehouse="Stores - TCP1")
 		self.assertEqual(actual_qty, 25)
 
 		#  return bundled item
 		dn1 = create_delivery_note(item_code='_Test Product Bundle Item', is_return=1,
-			return_against=dn.name, qty=-2, rate=500)
+			return_against=dn.name, qty=-2, rate=500, company=company, warehouse="Stores - TCP1", expense_account="Cost of Goods Sold - TCP1", cost_center="Main - TCP1")
 
 		# qty after return
-		actual_qty = get_qty_after_transaction()
+		actual_qty = get_qty_after_transaction(warehouse="Stores - TCP1")
 		self.assertEqual(actual_qty, 35)
 
 		# Check incoming rate for return entry
@@ -337,8 +330,6 @@
 
 		self.assertEqual(gle_warehouse_amount, 1400)
 
-		set_perpetual_inventory(0, company)
-
 	def test_return_for_serialized_items(self):
 		se = make_serialized_item()
 		serial_no = get_serial_nos(se.get("items")[0].serial_no)[0]
@@ -375,56 +366,44 @@
 		})
 
 	def test_delivery_of_bundled_items_to_target_warehouse(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
 		set_valuation_method("_Test Item", "FIFO")
 		set_valuation_method("_Test Item Home Desktop 100", "FIFO")
 
-		for warehouse in ("_Test Warehouse - _TC", "_Test Warehouse 1 - _TC"):
-			create_stock_reconciliation(item_code="_Test Item", target=warehouse,
-				qty=100, rate=100)
-			create_stock_reconciliation(item_code="_Test Item Home Desktop 100",
-				target=warehouse, qty=100, rate=100)
+		target_warehouse=get_warehouse(company=company, abbr="TCP1",
+			warehouse_name="_Test Customer Warehouse").name
 
-		opening_qty_test_warehouse_1 = get_qty_after_transaction(warehouse="_Test Warehouse 1 - _TC")
+		for warehouse in ("Stores - TCP1", target_warehouse):
+			create_stock_reconciliation(item_code="_Test Item", warehouse=warehouse, company = company,
+				expense_account = "Stock Adjustment - TCP1", qty=500, rate=100)
+			create_stock_reconciliation(item_code="_Test Item Home Desktop 100", company = company,
+				expense_account = "Stock Adjustment - TCP1", warehouse=warehouse, qty=500, rate=100)
+
 		dn = create_delivery_note(item_code="_Test Product Bundle Item",
-			qty=5, rate=500, target_warehouse="_Test Warehouse 1 - _TC", do_not_submit=True)
+			company='_Test Company with perpetual inventory', cost_center = 'Main - TCP1',
+			expense_account = "Cost of Goods Sold - TCP1", do_not_submit=True, qty=5, rate=500,
+			warehouse="Stores - TCP1", target_warehouse=target_warehouse)
 
 		dn.submit()
 
 		# qty after delivery
-		actual_qty = get_qty_after_transaction(warehouse="_Test Warehouse - _TC")
-		self.assertEqual(actual_qty, 75)
+		actual_qty_at_source = get_qty_after_transaction(warehouse="Stores - TCP1")
+		self.assertEqual(actual_qty_at_source, 475)
 
-		actual_qty = get_qty_after_transaction(warehouse="_Test Warehouse 1 - _TC")
-		self.assertEqual(actual_qty, opening_qty_test_warehouse_1 + 25)
+		actual_qty_at_target = get_qty_after_transaction(warehouse=target_warehouse)
+		self.assertEqual(actual_qty_at_target, 525)
 
-		# stock value diff for source warehouse
-		# for "_Test Item"
+		# stock value diff for source warehouse for "_Test Item"
 		stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
 			{"voucher_type": "Delivery Note", "voucher_no": dn.name,
-				"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
+				"item_code": "_Test Item", "warehouse": "Stores - TCP1"},
 			"stock_value_difference")
 
 		# stock value diff for target warehouse
 		stock_value_difference1 = frappe.db.get_value("Stock Ledger Entry",
 			{"voucher_type": "Delivery Note", "voucher_no": dn.name,
-				"item_code": "_Test Item", "warehouse": "_Test Warehouse 1 - _TC"},
-			"stock_value_difference")
-
-		self.assertEqual(abs(stock_value_difference), stock_value_difference1)
-
-		# for "_Test Item Home Desktop 100"
-		stock_value_difference = frappe.db.get_value("Stock Ledger Entry",
-			{"voucher_type": "Delivery Note", "voucher_no": dn.name,
-				"item_code": "_Test Item Home Desktop 100", "warehouse": "_Test Warehouse - _TC"},
-			"stock_value_difference")
-
-		# stock value diff for target warehouse
-		stock_value_difference1 = frappe.db.get_value("Stock Ledger Entry",
-			{"voucher_type": "Delivery Note", "voucher_no": dn.name,
-				"item_code": "_Test Item Home Desktop 100", "warehouse": "_Test Warehouse 1 - _TC"},
+				"item_code": "_Test Item", "warehouse": target_warehouse},
 			"stock_value_difference")
 
 		self.assertEqual(abs(stock_value_difference), stock_value_difference1)
@@ -435,21 +414,20 @@
 
 		stock_value_difference = abs(frappe.db.sql("""select sum(stock_value_difference)
 			from `tabStock Ledger Entry` where voucher_type='Delivery Note' and voucher_no=%s
-			and warehouse='_Test Warehouse - _TC'""", dn.name)[0][0])
+			and warehouse='Stores - TCP1'""", dn.name)[0][0])
 
 		expected_values = {
-			"Stock In Hand - _TC": [0.0, stock_value_difference],
-			"_Test Warehouse 1 - _TC": [stock_value_difference, 0.0]
+			"Stock In Hand - TCP1": [0.0, stock_value_difference],
+			target_warehouse: [stock_value_difference, 0.0]
 		}
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual([gle.debit, gle.credit], expected_values.get(gle.account))
 
-		set_perpetual_inventory(0, company)
-
 	def test_closed_delivery_note(self):
 		from erpnext.stock.doctype.delivery_note.delivery_note import update_delivery_note_status
 
-		dn = create_delivery_note(do_not_submit=True)
+		dn = create_delivery_note(company='_Test Company with perpetual inventory', warehouse='Stores - TCP1', cost_center = 'Main - TCP1', expense_account = "Cost of Goods Sold - TCP1", do_not_submit=True)
+
 		dn.submit()
 
 		update_delivery_note_status(dn.name, "Closed")
@@ -574,24 +552,23 @@
 		accounts_settings = frappe.get_doc('Accounts Settings', 'Accounts Settings')
 		accounts_settings.allow_cost_center_in_entry_of_bs_account = 1
 		accounts_settings.save()
-		cost_center = "_Test Cost Center for BS Account - _TC"
-		create_cost_center(cost_center_name="_Test Cost Center for BS Account", company="_Test Company")
+		cost_center = "_Test Cost Center for BS Account - TCP1"
+		create_cost_center(cost_center_name="_Test Cost Center for BS Account", company="_Test Company with perpetual inventory")
 
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
 		set_valuation_method("_Test Item", "FIFO")
 
-		make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)
+		make_stock_entry(target="Stores - TCP1", qty=5, basic_rate=100)
 
-		stock_in_hand_account = get_inventory_account('_Test Company')
-		dn = create_delivery_note(cost_center=cost_center)
+		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory')
+		dn = create_delivery_note(company='_Test Company with perpetual inventory', warehouse='Stores - TCP1',  expense_account = "Cost of Goods Sold - TCP1", cost_center=cost_center)
 
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
 		self.assertTrue(gl_entries)
 
 		expected_values = {
-			"Cost of Goods Sold - _TC": {
+			"Cost of Goods Sold - TCP1": {
 				"cost_center": cost_center
 			},
 			stock_in_hand_account: {
@@ -600,8 +577,6 @@
 		}
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)
-
-		set_perpetual_inventory(0, company)
 		accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
 		accounts_settings.save()
 
@@ -609,23 +584,22 @@
 		accounts_settings = frappe.get_doc('Accounts Settings', 'Accounts Settings')
 		accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
 		accounts_settings.save()
-		cost_center = "_Test Cost Center - _TC"
+		cost_center = "Main - TCP1"
 
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
 		set_valuation_method("_Test Item", "FIFO")
 
-		make_stock_entry(target="_Test Warehouse - _TC", qty=5, basic_rate=100)
+		make_stock_entry(target="Stores - TCP1", qty=5, basic_rate=100)
 
-		stock_in_hand_account = get_inventory_account('_Test Company')
-		dn = create_delivery_note()
+		stock_in_hand_account = get_inventory_account('_Test Company with perpetual inventory')
+		dn = create_delivery_note(company='_Test Company with perpetual inventory', warehouse='Stores - TCP1', cost_center = 'Main - TCP1', expense_account = "Cost of Goods Sold - TCP1")
 
 		gl_entries = get_gl_entries("Delivery Note", dn.name)
 
 		self.assertTrue(gl_entries)
 		expected_values = {
-			"Cost of Goods Sold - _TC": {
+			"Cost of Goods Sold - TCP1": {
 				"cost_center": cost_center
 			},
 			stock_in_hand_account: {
@@ -635,8 +609,6 @@
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)
 
-		set_perpetual_inventory(0, company)
-
 	def test_make_sales_invoice_from_dn_for_returned_qty(self):
 		from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
 		from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
@@ -702,7 +674,7 @@
 		"rate": args.rate or 100,
 		"conversion_factor": 1.0,
 		"allow_zero_valuation_rate": args.allow_zero_valuation_rate or 1,
-		"expense_account": "Cost of Goods Sold - _TC",
+		"expense_account": args.expense_account or "Cost of Goods Sold - _TC",
 		"cost_center": args.cost_center or "_Test Cost Center - _TC",
 		"serial_no": args.serial_no,
 		"target_warehouse": args.target_warehouse
diff --git a/erpnext/stock/doctype/item_alternative/test_item_alternative.py b/erpnext/stock/doctype/item_alternative/test_item_alternative.py
index d5700fe..f045e4f 100644
--- a/erpnext/stock/doctype/item_alternative/test_item_alternative.py
+++ b/erpnext/stock/doctype/item_alternative/test_item_alternative.py
@@ -12,9 +12,11 @@
 from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record
 from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt, make_rm_stock_entry
 import unittest
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 class TestItemAlternative(unittest.TestCase):
 	def setUp(self):
+		set_perpetual_inventory(0)
 		make_items()
 
 	def test_alternative_item_for_subcontract_rm(self):
diff --git a/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
index 1aaf73f..0cc243d 100644
--- a/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
+++ b/erpnext/stock/doctype/landed_cost_taxes_and_charges/landed_cost_taxes_and_charges.json
@@ -1,129 +1,51 @@
 {
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2014-07-11 11:51:00.453717", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
+ "creation": "2014-07-11 11:51:00.453717",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "expense_account",
+  "description",
+  "col_break3",
+  "amount"
+ ],
  "fields": [
   {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "description", 
-   "fieldtype": "Small Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Description", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "description",
+   "fieldtype": "Small Text",
+   "in_list_view": 1,
+   "label": "Description",
+   "reqd": 1
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "col_break3", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
+   "fieldname": "col_break3",
+   "fieldtype": "Column Break",
    "width": "50%"
-  }, 
+  },
   {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Company:company:default_currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
+   "fieldname": "amount",
+   "fieldtype": "Currency",
+   "in_list_view": 1,
+   "label": "Amount",
+   "options": "Company:company:default_currency",
+   "reqd": 1
+  },
+  {
+   "fieldname": "expense_account",
+   "fieldtype": "Link",
+   "in_list_view": 1,
+   "label": "Expense Account",
+   "options": "Account",
+   "reqd": 1
   }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2017-11-15 19:27:59.542487", 
- "modified_by": "Administrator", 
- "module": "Stock", 
- "name": "Landed Cost Taxes and Charges", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
+ ],
+ "istable": 1,
+ "modified": "2019-09-30 18:28:32.070655",
+ "modified_by": "Administrator",
+ "module": "Stock",
+ "name": "Landed Cost Taxes and Charges",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC"
 }
\ No newline at end of file
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
index edc3444..c9a3fd9 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
@@ -30,6 +30,16 @@
 		this.frm.add_fetch("receipt_document", "posting_date", "posting_date");
 		this.frm.add_fetch("receipt_document", "base_grand_total", "grand_total");
 
+		this.frm.set_query("expense_account", "taxes", function() {
+			return {
+				query: "erpnext.controllers.queries.tax_account_query",
+				filters: {
+					"account_type": ["Tax", "Chargeable", "Income Account", "Expenses Included In Valuation", "Expenses Included In Asset Valuation"],
+					"company": me.frm.doc.company
+				}
+			};
+		});
+
 	},
 
 	refresh: function(frm) {
@@ -38,7 +48,7 @@
 			<table class="table table-bordered" style="background-color: #f9f9f9;">
 				<tr><td>
 					<h4>
-						<i class="fa fa-hand-right"></i> 
+						<i class="fa fa-hand-right"></i>
 						${__("Notes")}:
 					</h4>
 					<ul>
@@ -96,7 +106,7 @@
 		var me = this;
 
 		if(this.frm.doc.taxes.length) {
-			
+
 			var total_item_cost = 0.0;
 			var based_on = this.frm.doc.distribute_charges_based_on.toLowerCase();
 			$.each(this.frm.doc.items || [], function(i, d) {
@@ -105,7 +115,7 @@
 
 			var total_charges = 0.0;
 			$.each(this.frm.doc.items || [], function(i, item) {
-				item.applicable_charges = flt(item[based_on]) * flt(me.frm.doc.total_taxes_and_charges) / flt(total_item_cost)			
+				item.applicable_charges = flt(item[based_on]) * flt(me.frm.doc.total_taxes_and_charges) / flt(total_item_cost)
 				item.applicable_charges = flt(item.applicable_charges, precision("applicable_charges", item))
 				total_charges += item.applicable_charges
 			});
diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
index c32f028..fe5d3ed 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py
@@ -14,15 +14,15 @@
 class TestLandedCostVoucher(unittest.TestCase):
 	def test_landed_cost_voucher(self):
 		frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
-		set_perpetual_inventory(1)
-		pr = frappe.copy_doc(pr_test_records[0])
-		pr.submit()
+
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1", get_multiple_items = True, get_taxes_and_charges = True)
+
 
 		last_sle = frappe.db.get_value("Stock Ledger Entry", {
 				"voucher_type": pr.doctype,
 				"voucher_no": pr.name,
 				"item_code": "_Test Item",
-				"warehouse": "_Test Warehouse - _TC"
+				"warehouse": "Stores - TCP1"
 			},
 			fieldname=["qty_after_transaction", "stock_value"], as_dict=1)
 
@@ -35,7 +35,7 @@
 				"voucher_type": pr.doctype,
 				"voucher_no": pr.name,
 				"item_code": "_Test Item",
-				"warehouse": "_Test Warehouse - _TC"
+				"warehouse": "Stores - TCP1"
 			},
 			fieldname=["qty_after_transaction", "stock_value"], as_dict=1)
 
@@ -48,55 +48,56 @@
 		self.assertTrue(gl_entries)
 
 		stock_in_hand_account = get_inventory_account(pr.company, pr.get("items")[0].warehouse)
-		fixed_asset_account = get_inventory_account(pr.company, pr.get("items")[1].warehouse)  
+		fixed_asset_account = get_inventory_account(pr.company, pr.get("items")[1].warehouse)
 
 		if stock_in_hand_account == fixed_asset_account:
 			expected_values = {
 				stock_in_hand_account: [800.0, 0.0],
-				"Stock Received But Not Billed - _TC": [0.0, 500.0],
-				"Expenses Included In Valuation - _TC": [0.0, 300.0]
+				"Stock Received But Not Billed - TCP1": [0.0, 500.0],
+				"Expenses Included In Valuation - TCP1": [0.0, 300.0]
 			}
-			
+
 		else:
 			expected_values = {
 				stock_in_hand_account: [400.0, 0.0],
 				fixed_asset_account: [400.0, 0.0],
-				"Stock Received But Not Billed - _TC": [0.0, 500.0],
-				"Expenses Included In Valuation - _TC": [0.0, 300.0]
+				"Stock Received But Not Billed - TCP1": [0.0, 500.0],
+				"Expenses Included In Valuation - TCP1": [0.0, 300.0]
 			}
 
 		for gle in gl_entries:
 			self.assertEqual(expected_values[gle.account][0], gle.debit)
 			self.assertEqual(expected_values[gle.account][1], gle.credit)
 
-		set_perpetual_inventory(0)
-		
+
 	def test_landed_cost_voucher_against_purchase_invoice(self):
-		set_perpetual_inventory(1)
-		
+
 		pi = make_purchase_invoice(update_stock=1, posting_date=frappe.utils.nowdate(),
-			posting_time=frappe.utils.nowtime())
+			posting_time=frappe.utils.nowtime(), cash_bank_account="Cash - TCP1",
+			company="_Test Company with perpetual inventory", supplier_warehouse="Work In Progress - TCP1",
+			warehouse= "Stores - TCP1", cost_center = "Main - TCP1",
+			expense_account ="_Test Account Cost for Goods Sold - TCP1")
 
 		last_sle = frappe.db.get_value("Stock Ledger Entry", {
 				"voucher_type": pi.doctype,
 				"voucher_no": pi.name,
 				"item_code": "_Test Item",
-				"warehouse": "_Test Warehouse - _TC"
+				"warehouse": "Stores - TCP1"
 			},
 			fieldname=["qty_after_transaction", "stock_value"], as_dict=1)
 
 		submit_landed_cost_voucher("Purchase Invoice", pi.name)
-		
-		pi_lc_value = frappe.db.get_value("Purchase Invoice Item", {"parent": pi.name}, 
+
+		pi_lc_value = frappe.db.get_value("Purchase Invoice Item", {"parent": pi.name},
 			"landed_cost_voucher_amount")
-			
+
 		self.assertEqual(pi_lc_value, 50.0)
 
 		last_sle_after_landed_cost = frappe.db.get_value("Stock Ledger Entry", {
 				"voucher_type": pi.doctype,
 				"voucher_no": pi.name,
 				"item_code": "_Test Item",
-				"warehouse": "_Test Warehouse - _TC"
+				"warehouse": "Stores - TCP1"
 			},
 			fieldname=["qty_after_transaction", "stock_value"], as_dict=1)
 
@@ -111,21 +112,21 @@
 
 		expected_values = {
 			stock_in_hand_account: [300.0, 0.0],
-			"Creditors - _TC": [0.0, 250.0],
-			"Expenses Included In Valuation - _TC": [0.0, 50.0]
+			"Creditors - TCP1": [0.0, 250.0],
+			"Expenses Included In Valuation - TCP1": [0.0, 50.0]
 		}
 
 		for gle in gl_entries:
 			self.assertEqual(expected_values[gle.account][0], gle.debit)
 			self.assertEqual(expected_values[gle.account][1], gle.credit)
 
-		set_perpetual_inventory(0)
-		
-	def test_landed_cost_voucher_for_serialized_item(self):
-		set_perpetual_inventory(1)
-		frappe.db.sql("delete from `tabSerial No` where name in ('SN001', 'SN002', 'SN003', 'SN004', 'SN005')")
 
-		pr = frappe.copy_doc(pr_test_records[0])
+	def test_landed_cost_voucher_for_serialized_item(self):
+		frappe.db.sql("delete from `tabSerial No` where name in ('SN001', 'SN002', 'SN003', 'SN004', 'SN005')")
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1",
+		supplier_warehouse = "Work in Progress - TCP1", get_multiple_items = True,
+		get_taxes_and_charges = True, do_not_submit = True)
+
 		pr.items[0].item_code = "_Test Serialized Item"
 		pr.items[0].serial_no = "SN001\nSN002\nSN003\nSN004\nSN005"
 		pr.submit()
@@ -138,39 +139,36 @@
 			["warehouse", "purchase_rate"], as_dict=1)
 
 		self.assertEqual(serial_no.purchase_rate - serial_no_rate, 5.0)
-		self.assertEqual(serial_no.warehouse, "_Test Warehouse - _TC")
+		self.assertEqual(serial_no.warehouse, "Stores - TCP1")
 
-		set_perpetual_inventory(0)
 
 	def test_landed_cost_voucher_for_odd_numbers (self):
-		set_perpetual_inventory(1)
 
-		pr = make_purchase_receipt(do_not_save=True)
-		pr.items[0].cost_center = "_Test Company - _TC"
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1", do_not_save=True)
+		pr.items[0].cost_center = "Main - TCP1"
 		for x in range(2):
 			pr.append("items", {
 				"item_code": "_Test Item",
-				"warehouse": "_Test Warehouse - _TC",
-				"cost_center": "_Test Company - _TC",
+				"warehouse": "Stores - TCP1",
+				"cost_center": "Main - TCP1",
 				"qty": 5,
 				"rate": 50
 			})
 		pr.submit()
 
 		lcv = submit_landed_cost_voucher("Purchase Receipt", pr.name, 123.22)
-		
+
 		self.assertEqual(lcv.items[0].applicable_charges, 41.07)
-		self.assertEqual(lcv.items[2].applicable_charges, 41.08)		
-		
-		set_perpetual_inventory(0)
+		self.assertEqual(lcv.items[2].applicable_charges, 41.08)
+
 
 def submit_landed_cost_voucher(receipt_document_type, receipt_document, charges=50):
 	ref_doc = frappe.get_doc(receipt_document_type, receipt_document)
-	
+
 	lcv = frappe.new_doc("Landed Cost Voucher")
 	lcv.company = "_Test Company"
 	lcv.distribute_charges_based_on = 'Amount'
-	
+
 	lcv.set("purchase_receipts", [{
 		"receipt_document_type": receipt_document_type,
 		"receipt_document": receipt_document,
@@ -178,21 +176,21 @@
 		"posting_date": ref_doc.posting_date,
 		"grand_total": ref_doc.base_grand_total
 	}])
-	
+
 	lcv.set("taxes", [{
 		"description": "Insurance Charges",
-		"account": "_Test Account Insurance Charges - _TC",
+		"expense_account": "Expenses Included In Valuation - TCP1",
 		"amount": charges
 	}])
 
 	lcv.insert()
-	
+
 	distribute_landed_cost_on_items(lcv)
-	
+
 	lcv.submit()
 
 	return lcv
-		
+
 def distribute_landed_cost_on_items(lcv):
 	based_on = lcv.distribute_charges_based_on.lower()
 	total = sum([flt(d.get(based_on)) for d in lcv.get("items")])
diff --git a/erpnext/stock/doctype/pick_list/pick_list.js b/erpnext/stock/doctype/pick_list/pick_list.js
index 3f66743..2789711 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.js
+++ b/erpnext/stock/doctype/pick_list/pick_list.js
@@ -173,8 +173,10 @@
 });
 
 function get_item_details(item_code, uom=null) {
-	return frappe.xcall('erpnext.stock.doctype.pick_list.pick_list.get_item_details', {
-		item_code,
-		uom
-	});
+	if (item_code) {
+		return frappe.xcall('erpnext.stock.doctype.pick_list.pick_list.get_item_details', {
+			item_code,
+			uom
+		});
+	}
 }
\ No newline at end of file
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index fae4de3..3362d4b 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -195,6 +195,7 @@
 		from erpnext.accounts.general_ledger import process_gl_map
 
 		stock_rbnb = self.get_company_default("stock_received_but_not_billed")
+		landed_cost_entries = get_item_account_wise_additional_cost(self.name)
 		expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
 
 		gl_entries = []
@@ -233,15 +234,16 @@
 					negative_expense_to_be_booked += flt(d.item_tax_amount)
 
 					# Amount added through landed-cost-voucher
-					if flt(d.landed_cost_voucher_amount):
-						gl_entries.append(self.get_gl_dict({
-							"account": expenses_included_in_valuation,
-							"against": warehouse_account[d.warehouse]["account"],
-							"cost_center": d.cost_center,
-							"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
-							"credit": flt(d.landed_cost_voucher_amount),
-							"project": d.project
-						}, item=d))
+					if landed_cost_entries:
+						for account, amount in iteritems(landed_cost_entries[(d.item_code, d.name)]):
+							gl_entries.append(self.get_gl_dict({
+								"account": account,
+								"against": warehouse_account[d.warehouse]["account"],
+								"cost_center": d.cost_center,
+								"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
+								"credit": flt(amount),
+								"project": d.project
+							}, item=d))
 
 					# sub-contracting warehouse
 					if flt(d.rm_supp_cost) and warehouse_account.get(self.supplier_warehouse):
@@ -584,3 +586,30 @@
 	}, target_doc, set_missing_values)
 
 	return doclist
+
+def get_item_account_wise_additional_cost(purchase_document):
+	landed_cost_voucher = frappe.get_value("Landed Cost Purchase Receipt",
+		{"receipt_document": purchase_document}, "parent")
+
+	if not landed_cost_voucher:
+		return
+
+	total_item_cost = 0
+	item_account_wise_cost = {}
+	landed_cost_voucher_doc = frappe.get_doc("Landed Cost Voucher", landed_cost_voucher)
+	based_on_field = frappe.scrub(landed_cost_voucher_doc.distribute_charges_based_on)
+
+	for item in landed_cost_voucher_doc.items:
+		if item.receipt_document == purchase_document:
+			total_item_cost += item.get(based_on_field)
+
+	for item in landed_cost_voucher_doc.items:
+		if item.receipt_document == purchase_document:
+			for account in landed_cost_voucher_doc.taxes:
+				item_account_wise_cost.setdefault((item.item_code, item.purchase_receipt_item), {})
+				item_account_wise_cost[(item.item_code, item.purchase_receipt_item)].setdefault(account.expense_account, 0.0)
+				item_account_wise_cost[(item.item_code, item.purchase_receipt_item)][account.expense_account] += \
+					account.amount * item.get(based_on_field) / total_item_cost
+
+	return item_account_wise_cost
+
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index ab9311b..e9ddf9d 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -14,6 +14,7 @@
 from six import iteritems
 class TestPurchaseReceipt(unittest.TestCase):
 	def setUp(self):
+		set_perpetual_inventory(0)
 		frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
 
 	def test_make_purchase_invoice(self):
@@ -32,7 +33,6 @@
 
 	def test_purchase_receipt_no_gl_entry(self):
 		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(0, company)
 
 		existing_bin_stock_value = frappe.db.get_value("Bin", {"item_code": "_Test Item",
 			"warehouse": "_Test Warehouse - _TC"}, "stock_value")
@@ -52,33 +52,29 @@
 		self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
 
 	def test_purchase_receipt_gl_entry(self):
-		pr = frappe.copy_doc(test_records[0])
-		set_perpetual_inventory(1, pr.company)
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1", get_multiple_items = True, get_taxes_and_charges = True)
 		self.assertEqual(cint(erpnext.is_perpetual_inventory_enabled(pr.company)), 1)
-		pr.insert()
-		pr.submit()
 
 		gl_entries = get_gl_entries("Purchase Receipt", pr.name)
 
 		self.assertTrue(gl_entries)
 
-		stock_in_hand_account = get_inventory_account(pr.company, pr.get("items")[0].warehouse)
-		fixed_asset_account = get_inventory_account(pr.company, pr.get("items")[1].warehouse)
+		stock_in_hand_account = get_inventory_account(pr.company, pr.items[0].warehouse)
+		fixed_asset_account = get_inventory_account(pr.company, pr.items[1].warehouse)
 
 		if stock_in_hand_account == fixed_asset_account:
 			expected_values = {
 				stock_in_hand_account: [750.0, 0.0],
-				"Stock Received But Not Billed - _TC": [0.0, 500.0],
-				"Expenses Included In Valuation - _TC": [0.0, 250.0]
+				"Stock Received But Not Billed - TCP1": [0.0, 500.0],
+				"Expenses Included In Valuation - TCP1": [0.0, 250.0]
 			}
 		else:
 			expected_values = {
 				stock_in_hand_account: [375.0, 0.0],
 				fixed_asset_account: [375.0, 0.0],
-				"Stock Received But Not Billed - _TC": [0.0, 500.0],
-				"Expenses Included In Valuation - _TC": [0.0, 250.0]
+				"Stock Received But Not Billed - TCP1": [0.0, 500.0],
+				"Expenses Included In Valuation - TCP1": [0.0, 250.0]
 			}
-
 		for gle in gl_entries:
 			self.assertEqual(expected_values[gle.account][0], gle.debit)
 			self.assertEqual(expected_values[gle.account][1], gle.credit)
@@ -86,8 +82,6 @@
 		pr.cancel()
 		self.assertFalse(get_gl_entries("Purchase Receipt", pr.name))
 
-		set_perpetual_inventory(0, pr.company)
-
 	def test_subcontracting(self):
 		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
 
@@ -132,11 +126,10 @@
 				pr.get("items")[0].rejected_warehouse)
 
 	def test_purchase_return(self):
-		set_perpetual_inventory()
 
-		pr = make_purchase_receipt()
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1")
 
-		return_pr = make_purchase_receipt(is_return=1, return_against=pr.name, qty=-2)
+		return_pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1", is_return=1, return_against=pr.name, qty=-2)
 
 		# check sle
 		outgoing_rate = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Purchase Receipt",
@@ -153,28 +146,28 @@
 
 		expected_values = {
 			stock_in_hand_account: [0.0, 100.0],
-			"Stock Received But Not Billed - _TC": [100.0, 0.0],
+			"Stock Received But Not Billed - TCP1": [100.0, 0.0],
 		}
 
 		for gle in gl_entries:
 			self.assertEqual(expected_values[gle.account][0], gle.debit)
 			self.assertEqual(expected_values[gle.account][1], gle.credit)
 
-		set_perpetual_inventory(0)
 
 	def test_purchase_return_for_rejected_qty(self):
-		set_perpetual_inventory()
+		from erpnext.stock.doctype.warehouse.test_warehouse import get_warehouse
 
-		pr = make_purchase_receipt(received_qty=4, qty=2)
+		rejected_warehouse=get_warehouse(company = "_Test Company with perpetual inventory", abbr = " - TCP1", warehouse_name = "_Test Rejected Warehouse").name
+		print(rejected_warehouse)
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1", received_qty=4, qty=2, rejected_warehouse=rejected_warehouse)
 
-		return_pr = make_purchase_receipt(is_return=1, return_against=pr.name, received_qty = -4, qty=-2)
+		return_pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1", is_return=1, return_against=pr.name, received_qty = -4, qty=-2, rejected_warehouse=rejected_warehouse)
 
 		actual_qty = frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Purchase Receipt",
 			"voucher_no": return_pr.name, 'warehouse': return_pr.items[0].rejected_warehouse}, "actual_qty")
 
 		self.assertEqual(actual_qty, -2)
 
-		set_perpetual_inventory(0)
 
 	def test_purchase_return_for_serialized_items(self):
 		def _check_serial_no_values(serial_no, field_values):
@@ -337,7 +330,6 @@
 		pr.cancel()
 		serial_nos = frappe.get_all('Serial No', {'asset': asset}, 'name') or []
 		self.assertEquals(len(serial_nos), 0)
-		#frappe.db.sql("delete from `tabLocation")
 		frappe.db.sql("delete from `tabAsset`")
 
 	def test_purchase_receipt_for_enable_allow_cost_center_in_entry_of_bs_account(self):
@@ -345,8 +337,8 @@
 		accounts_settings = frappe.get_doc('Accounts Settings', 'Accounts Settings')
 		accounts_settings.allow_cost_center_in_entry_of_bs_account = 1
 		accounts_settings.save()
-		cost_center = "_Test Cost Center for BS Account - _TC"
-		create_cost_center(cost_center_name="_Test Cost Center for BS Account", company="_Test Company")
+		cost_center = "_Test Cost Center for BS Account - TCP1"
+		create_cost_center(cost_center_name="_Test Cost Center for BS Account", company="_Test Company with perpetual inventory")
 
 		if not frappe.db.exists('Location', 'Test Location'):
 			frappe.get_doc({
@@ -354,8 +346,7 @@
 				'location_name': 'Test Location'
 			}).insert()
 
-		set_perpetual_inventory(1, "_Test Company")
-		pr = make_purchase_receipt(cost_center=cost_center)
+		pr = make_purchase_receipt(cost_center=cost_center, company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1")
 
 		stock_in_hand_account = get_inventory_account(pr.company, pr.get("items")[0].warehouse)
 		gl_entries = get_gl_entries("Purchase Receipt", pr.name)
@@ -363,7 +354,7 @@
 		self.assertTrue(gl_entries)
 
 		expected_values = {
-			"Stock Received But Not Billed - _TC": {
+			"Stock Received But Not Billed - TCP1": {
 				"cost_center": cost_center
 			},
 			stock_in_hand_account: {
@@ -373,7 +364,6 @@
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)
 
-		set_perpetual_inventory(0, pr.company)
 		accounts_settings.allow_cost_center_in_entry_of_bs_account = 0
 		accounts_settings.save()
 
@@ -387,9 +377,7 @@
 				'doctype': 'Location',
 				'location_name': 'Test Location'
 			}).insert()
-
-		set_perpetual_inventory(1, "_Test Company")
-		pr = make_purchase_receipt()
+		pr = make_purchase_receipt(company="_Test Company with perpetual inventory", warehouse = "Stores - TCP1", supplier_warehouse = "Work in Progress - TCP1")
 
 		stock_in_hand_account = get_inventory_account(pr.company, pr.get("items")[0].warehouse)
 		gl_entries = get_gl_entries("Purchase Receipt", pr.name)
@@ -397,7 +385,7 @@
 		self.assertTrue(gl_entries)
 
 		expected_values = {
-			"Stock Received But Not Billed - _TC": {
+			"Stock Received But Not Billed - TCP1": {
 				"cost_center": None
 			},
 			stock_in_hand_account: {
@@ -407,8 +395,6 @@
 		for i, gle in enumerate(gl_entries):
 			self.assertEqual(expected_values[gle.account]["cost_center"], gle.cost_center)
 
-		set_perpetual_inventory(0, pr.company)
-
 	def test_make_purchase_invoice_from_pr_for_returned_qty(self):
 		from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order, create_pr_against_po
 
@@ -452,6 +438,78 @@
 		from `tabGL Entry` where voucher_type=%s and voucher_no=%s
 		order by account desc""", (voucher_type, voucher_no), as_dict=1)
 
+def get_taxes(**args):
+
+	args = frappe._dict(args)
+
+	return [{'account_head': '_Test Account Shipping Charges - TCP1',
+			'add_deduct_tax': 'Add',
+			'category': 'Valuation and Total',
+			'charge_type': 'Actual',
+			'cost_center': args.cost_center or 'Main - TCP1',
+			'description': 'Shipping Charges',
+			'doctype': 'Purchase Taxes and Charges',
+			'parentfield': 'taxes',
+			'rate': 100.0,
+			'tax_amount': 100.0},
+		{'account_head': '_Test Account VAT - TCP1',
+			'add_deduct_tax': 'Add',
+			'category': 'Total',
+			'charge_type': 'Actual',
+			'cost_center': args.cost_center or 'Main - TCP1',
+			'description': 'VAT',
+			'doctype': 'Purchase Taxes and Charges',
+			'parentfield': 'taxes',
+			'rate': 120.0,
+			'tax_amount': 120.0},
+		{'account_head': '_Test Account Customs Duty - TCP1',
+			'add_deduct_tax': 'Add',
+			'category': 'Valuation',
+			'charge_type': 'Actual',
+			'cost_center': args.cost_center or 'Main - TCP1',
+			'description': 'Customs Duty',
+			'doctype': 'Purchase Taxes and Charges',
+			'parentfield': 'taxes',
+			'rate': 150.0,
+			'tax_amount': 150.0}]
+
+def get_items(**args):
+	args = frappe._dict(args)
+	return [{
+	"base_amount": 250.0,
+	"conversion_factor": 1.0,
+	"description": "_Test Item",
+	"doctype": "Purchase Receipt Item",
+	"item_code": "_Test Item",
+	"item_name": "_Test Item",
+	"parentfield": "items",
+	"qty": 5.0,
+	"rate": 50.0,
+	"received_qty": 5.0,
+	"rejected_qty": 0.0,
+	"stock_uom": "_Test UOM",
+	"uom": "_Test UOM",
+	"warehouse": args.warehouse or "_Test Warehouse - _TC",
+	"cost_center": args.cost_center or "Main - _TC"
+	},
+	{
+	"base_amount": 250.0,
+	"conversion_factor": 1.0,
+	"description": "_Test Item Home Desktop 100",
+	"doctype": "Purchase Receipt Item",
+	"item_code": "_Test Item Home Desktop 100",
+	"item_name": "_Test Item Home Desktop 100",
+	"parentfield": "items",
+	"qty": 5.0,
+	"rate": 50.0,
+	"received_qty": 5.0,
+	"rejected_qty": 0.0,
+	"stock_uom": "_Test UOM",
+	"uom": "_Test UOM",
+	"warehouse": args.warehouse or "_Test Warehouse 1 - _TC",
+	"cost_center": args.cost_center or "Main - _TC"
+	}]
+
 def make_purchase_receipt(**args):
 	if not frappe.db.exists('Location', 'Test Location'):
 		frappe.get_doc({
@@ -468,7 +526,7 @@
 	pr.company = args.company or "_Test Company"
 	pr.supplier = args.supplier or "_Test Supplier"
 	pr.is_subcontracted = args.is_subcontracted or "No"
-	pr.supplier_warehouse = "_Test Warehouse 1 - _TC"
+	pr.supplier_warehouse = args.supplier_warehouse or "_Test Warehouse 1 - _TC"
 	pr.currency = args.currency or "INR"
 	pr.is_return = args.is_return
 	pr.return_against = args.return_against
@@ -492,6 +550,16 @@
 		"asset_location": args.location or "Test Location"
 	})
 
+	if args.get_multiple_items:
+		pr.items = []
+		for item in get_items(warehouse= args.warehouse, cost_center = args.cost_center or frappe.get_cached_value('Company', pr.company, 'cost_center')):
+			pr.append("items", item)
+
+
+	if args.get_taxes_and_charges:
+		for tax in get_taxes():
+			pr.append("taxes", tax)
+
 	if not args.do_not_save:
 		pr.insert()
 		if not args.do_not_submit:
diff --git a/erpnext/stock/doctype/purchase_receipt/test_records.json b/erpnext/stock/doctype/purchase_receipt/test_records.json
index 7c20991..e7ea9af 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_records.json
+++ b/erpnext/stock/doctype/purchase_receipt/test_records.json
@@ -83,39 +83,5 @@
    }
   ],
   "supplier": "_Test Supplier"
- },
-
-
- {
-  "buying_price_list": "_Test Price List",
-  "company": "_Test Company",
-  "conversion_rate": 1.0,
-  "currency": "INR",
-  "doctype": "Purchase Receipt",
-  "base_grand_total": 5000.0,
-  "is_subcontracted": "Yes",
-  "base_net_total": 5000.0,
-  "posting_date": "2013-02-12",
-  "items": [
-   {
-    "base_amount": 5000.0,
-    "conversion_factor": 1.0,
-    "description": "_Test FG Item",
-    "doctype": "Purchase Receipt Item",
-    "item_code": "_Test FG Item",
-    "item_name": "_Test FG Item",
-    "parentfield": "items",
-    "qty": 10.0,
-    "rate": 500.0,
-    "received_qty": 10.0,
-    "rejected_qty": 0.0,
-    "stock_uom": "_Test UOM",
-    "uom": "_Test UOM",
-    "warehouse": "_Test Warehouse - _TC",
-	"cost_center": "Main - _TC"
-   }
-  ],
-  "supplier": "_Test Supplier",
-  "supplier_warehouse": "_Test Warehouse - _TC"
  }
 ]
\ No newline at end of file
diff --git a/erpnext/stock/doctype/serial_no/serial_no_list.js b/erpnext/stock/doctype/serial_no/serial_no_list.js
new file mode 100644
index 0000000..5b1e312
--- /dev/null
+++ b/erpnext/stock/doctype/serial_no/serial_no_list.js
@@ -0,0 +1,14 @@
+frappe.listview_settings['Serial No'] = {
+	add_fields: ["is_cancelled", "item_code", "warehouse", "warranty_expiry_date", "delivery_document_type"],
+	get_indicator: (doc) => {
+		if (doc.is_cancelled) {
+			return [__("Cancelled"), "red", "is_cancelled,=,Yes"];
+		} else if (doc.delivery_document_type) {
+			return [__("Delivered"), "green", "delivery_document_type,is,set|is_cancelled,=,No"];
+		} else if (doc.warranty_expiry_date && frappe.datetime.get_diff(doc.warranty_expiry_date, frappe.datetime.nowdate()) <= 0) {
+			return [__("Expired"), "red", "warranty_expiry_date,not in,|warranty_expiry_date,<=,Today|delivery_document_type,is,not set|is_cancelled,=,No"];
+		} else {
+			return [__("Active"), "green", "delivery_document_type,is,not set|is_cancelled,=,No"];
+		}
+	}
+};
diff --git a/erpnext/stock/doctype/serial_no/test_serial_no.py b/erpnext/stock/doctype/serial_no/test_serial_no.py
index ed70790..ab06107 100644
--- a/erpnext/stock/doctype/serial_no/test_serial_no.py
+++ b/erpnext/stock/doctype/serial_no/test_serial_no.py
@@ -12,6 +12,7 @@
 from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
 from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
 from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
+from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
 test_dependencies = ["Item"]
 test_records = frappe.get_test_records('Serial No')
@@ -37,6 +38,8 @@
 		self.assertTrue(SerialNoCannotCannotChangeError, sr.save)
 
 	def test_inter_company_transfer(self):
+		set_perpetual_inventory(0, "_Test Company 1")
+		set_perpetual_inventory(0)
 		se = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
 		serial_nos = get_serial_nos(se.get("items")[0].serial_no)
 
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 0b02302..6e78b98 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -68,6 +68,16 @@
 			}
 		});
 
+		frm.set_query("expense_account", "additional_costs", function() {
+			return {
+				query: "erpnext.controllers.queries.tax_account_query",
+				filters: {
+					"account_type": ["Tax", "Chargeable", "Income Account", "Expenses Included In Valuation", "Expenses Included In Asset Valuation"],
+					"company": frm.doc.company
+				}
+			};
+		});
+
 		frm.add_fetch("bom_no", "inspection_required", "inspection_required");
 	},
 
@@ -727,7 +737,8 @@
 		return frappe.call({
 			method: "erpnext.stock.doctype.stock_entry.stock_entry.get_work_order_details",
 			args: {
-				work_order: me.frm.doc.work_order
+				work_order: me.frm.doc.work_order,
+				company: me.frm.doc.company
 			},
 			callback: function(r) {
 				if (!r.exc) {
@@ -743,6 +754,8 @@
 						if (me.frm.doc.purpose == "Manufacture") {
 							if (!me.frm.doc.to_warehouse) me.frm.set_value("to_warehouse", r.message["fg_warehouse"]);
 							if (r.message["additional_costs"].length) {
+								me.frm.clear_table("additional_costs");
+
 								$.each(r.message["additional_costs"], function(i, row) {
 									me.frm.add_child("additional_costs", row);
 								})
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 55e02a4..26693d2 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -644,28 +644,37 @@
 		self.make_sl_entries(sl_entries, self.amended_from and 'Yes' or 'No')
 
 	def get_gl_entries(self, warehouse_account):
-		expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation")
-
 		gl_entries = super(StockEntry, self).get_gl_entries(warehouse_account)
 
-		for d in self.get("items"):
-			additional_cost = flt(d.additional_cost, d.precision("additional_cost"))
-			if additional_cost:
-				gl_entries.append(self.get_gl_dict({
-					"account": expenses_included_in_valuation,
-					"against": d.expense_account,
-					"cost_center": d.cost_center,
-					"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
-					"credit": additional_cost
-				}, item=d))
+		total_basic_amount = sum([flt(t.basic_amount) for t in self.get("items") if t.t_warehouse])
+		item_account_wise_additional_cost = {}
 
-				gl_entries.append(self.get_gl_dict({
-					"account": d.expense_account,
-					"against": expenses_included_in_valuation,
-					"cost_center": d.cost_center,
-					"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
-					"credit": -1 * additional_cost # put it as negative credit instead of debit purposefully
-				}, item=d))
+		for t in self.get("additional_costs"):
+			for d in self.get("items"):
+				if d.t_warehouse:
+					item_account_wise_additional_cost.setdefault((d.item_code, d.name), {})
+					item_account_wise_additional_cost[(d.item_code, d.name)].setdefault(t.expense_account, 0.0)
+					item_account_wise_additional_cost[(d.item_code, d.name)][t.expense_account] += \
+						(t.amount * d.basic_amount) / total_basic_amount
+
+		if item_account_wise_additional_cost:
+			for d in self.get("items"):
+				for account, amount in iteritems(item_account_wise_additional_cost.get((d.item_code, d.name), {})):
+					gl_entries.append(self.get_gl_dict({
+						"account": account,
+						"against": d.expense_account,
+						"cost_center": d.cost_center,
+						"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
+						"credit": amount
+					}, item=d))
+
+					gl_entries.append(self.get_gl_dict({
+						"account": d.expense_account,
+						"against": account,
+						"cost_center": d.cost_center,
+						"remarks": self.get("remarks") or _("Accounting Entry for Stock"),
+						"credit": -1 * amount # put it as negative credit instead of debit purposefully
+					}, item=d))
 
 		return gl_entries
 
@@ -1349,7 +1358,7 @@
 	return doclist
 
 @frappe.whitelist()
-def get_work_order_details(work_order):
+def get_work_order_details(work_order, company):
 	work_order = frappe.get_doc("Work Order", work_order)
 	pending_qty_to_produce = flt(work_order.qty) - flt(work_order.produced_qty)
 
@@ -1360,14 +1369,17 @@
 		"wip_warehouse": work_order.wip_warehouse,
 		"fg_warehouse": work_order.fg_warehouse,
 		"fg_completed_qty": pending_qty_to_produce,
-		"additional_costs": get_additional_costs(work_order, fg_qty=pending_qty_to_produce)
+		"additional_costs": get_additional_costs(work_order, fg_qty=pending_qty_to_produce, company=company)
 	}
 
-def get_additional_costs(work_order=None, bom_no=None, fg_qty=None):
+def get_additional_costs(work_order=None, bom_no=None, fg_qty=None, company=None):
 	additional_costs = []
 	operating_cost_per_unit = get_operating_cost_per_unit(work_order, bom_no)
+	expenses_included_in_valuation = frappe.get_cached_value("Company", company, "expenses_included_in_valuation")
+
 	if operating_cost_per_unit:
 		additional_costs.append({
+			"expense_account": expenses_included_in_valuation,
 			"description": "Operating Cost as per Work Order / BOM",
 			"amount": operating_cost_per_unit * flt(fg_qty)
 		})
@@ -1377,6 +1389,7 @@
 			flt(work_order.additional_operating_cost) / flt(work_order.qty)
 
 		additional_costs.append({
+			"expense_account": expenses_included_in_valuation,
 			"description": "Additional Operating Cost",
 			"amount": additional_operating_cost_per_unit * flt(fg_qty)
 		})
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 3fa815d..eddab5d 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -16,7 +16,6 @@
 from erpnext.accounts.doctype.account.test_account import get_inventory_account
 from erpnext.stock.doctype.stock_entry.stock_entry import move_sample_to_retention_warehouse, make_stock_in_entry
 from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import OpeningEntryAccountError
-
 from six import iteritems
 
 def get_sle(**args):
@@ -132,20 +131,19 @@
 		self.assertTrue(item_code in items)
 
 	def test_material_receipt_gl_entry(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
-		mr = make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC",
-			qty=50, basic_rate=100, expense_account="Stock Adjustment - _TC")
+		mr = make_stock_entry(item_code="_Test Item", target="Stores - TCP1", company= company,
+			qty=50, basic_rate=100, expense_account="Stock Adjustment - TCP1")
 
 		stock_in_hand_account = get_inventory_account(mr.company, mr.get("items")[0].t_warehouse)
 		self.check_stock_ledger_entries("Stock Entry", mr.name,
-			[["_Test Item", "_Test Warehouse - _TC", 50.0]])
+			[["_Test Item", "Stores - TCP1", 50.0]])
 
 		self.check_gl_entries("Stock Entry", mr.name,
 			sorted([
 				[stock_in_hand_account, 5000.0, 0.0],
-				["Stock Adjustment - _TC", 0.0, 5000.0]
+				["Stock Adjustment - TCP1", 0.0, 5000.0]
 			])
 		)
 
@@ -158,29 +156,26 @@
 			where voucher_type='Stock Entry' and voucher_no=%s""", mr.name))
 
 	def test_material_issue_gl_entry(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
+		make_stock_entry(item_code="_Test Item", target="Stores - TCP1", company= company,
+			qty=50, basic_rate=100, expense_account="Stock Adjustment - TCP1")
 
-		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC",
-			qty=50, basic_rate=100, expense_account="Stock Adjustment - _TC")
-
-		mi = make_stock_entry(item_code="_Test Item", source="_Test Warehouse - _TC",
-			qty=40, expense_account="Stock Adjustment - _TC")
+		mi = make_stock_entry(item_code="_Test Item", source="Stores - TCP1", company=company,
+			qty=40, expense_account="Stock Adjustment - TCP1")
 
 		self.check_stock_ledger_entries("Stock Entry", mi.name,
-			[["_Test Item", "_Test Warehouse - _TC", -40.0]])
+			[["_Test Item", "Stores - TCP1", -40.0]])
 
-		stock_in_hand_account = get_inventory_account(mi.company, "_Test Warehouse - _TC")
+		stock_in_hand_account = get_inventory_account(mi.company, "Stores - TCP1")
 		stock_value_diff = abs(frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Stock Entry",
 			"voucher_no": mi.name}, "stock_value_difference"))
 
 		self.check_gl_entries("Stock Entry", mi.name,
 			sorted([
 				[stock_in_hand_account, 0.0, stock_value_diff],
-				["Stock Adjustment - _TC", stock_value_diff, 0.0]
+				["Stock Adjustment - TCP1", stock_value_diff, 0.0]
 			])
 		)
-
 		mi.cancel()
 
 		self.assertFalse(frappe.db.sql("""select name from `tabStock Ledger Entry`
@@ -190,16 +185,15 @@
 			where voucher_type='Stock Entry' and voucher_no=%s""", mi.name))
 
 	def test_material_transfer_gl_entry(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
 		create_stock_reconciliation(qty=100, rate=100)
 
-		mtn = make_stock_entry(item_code="_Test Item", source="_Test Warehouse - _TC",
-			target="_Test Warehouse 1 - _TC", qty=45)
+		mtn = make_stock_entry(item_code="_Test Item", source="Stores - TCP1",
+			target="Finished Goods - TCP1", qty=45)
 
 		self.check_stock_ledger_entries("Stock Entry", mtn.name,
-			[["_Test Item", "_Test Warehouse - _TC", -45.0], ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]])
+			[["_Test Item", "Stores - TCP1", -45.0], ["_Test Item", "Finished Goods - TCP1", 45.0]])
 
 		stock_in_hand_account = get_inventory_account(mtn.company, mtn.get("items")[0].s_warehouse)
 
@@ -212,7 +206,7 @@
 
 		else:
 			stock_value_diff = abs(frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Stock Entry",
-				"voucher_no": mtn.name, "warehouse": "_Test Warehouse - _TC"}, "stock_value_difference"))
+				"voucher_no": mtn.name, "warehouse": "Stores - TCP1"}, "stock_value_difference"))
 
 			self.check_gl_entries("Stock Entry", mtn.name,
 				sorted([
@@ -255,21 +249,32 @@
 		set_perpetual_inventory(0, repack.company)
 
 	def test_repack_with_additional_costs(self):
-		company = frappe.db.get_value('Warehouse', '_Test Warehouse - _TC', 'company')
-		set_perpetual_inventory(1, company)
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 
-		make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC", qty=50, basic_rate=100)
-		repack = frappe.copy_doc(test_records[3])
+		make_stock_entry(item_code="_Test Item", target="Stores - TCP1", company= company,
+			qty=50, basic_rate=100, expense_account="Stock Adjustment - TCP1")
+
+
+		repack = make_stock_entry(company = company, purpose="Repack", do_not_save=True)
 		repack.posting_date = nowdate()
 		repack.posting_time = nowtime()
 
+		expenses_included_in_valuation = frappe.get_value("Company", company, "expenses_included_in_valuation")
+
+		items = get_multiple_items()
+		repack.items = []
+		for item in items:
+			repack.append("items", item)
+
 		repack.set("additional_costs", [
 			{
-				"description": "Actual Oerating Cost",
+				"expense_account": expenses_included_in_valuation,
+				"description": "Actual Operating Cost",
 				"amount": 1000
 			},
 			{
-				"description": "additional operating costs",
+				"expense_account": expenses_included_in_valuation,
+				"description": "Additional Operating Cost",
 				"amount": 200
 			},
 		])
@@ -292,13 +297,12 @@
 		self.check_gl_entries("Stock Entry", repack.name,
 			sorted([
 				[stock_in_hand_account, 1200, 0.0],
-				["Expenses Included In Valuation - _TC", 0.0, 1200.0]
+				["Expenses Included In Valuation - TCP1", 0.0, 1200.0]
 			])
 		)
-		set_perpetual_inventory(0, repack.company)
 
 	def check_stock_ledger_entries(self, voucher_type, voucher_no, expected_sle):
-		expected_sle.sort(key=lambda x: x[0])
+		expected_sle.sort(key=lambda x: x[1])
 
 		# check stock ledger entries
 		sle = frappe.db.sql("""select item_code, warehouse, actual_qty
@@ -306,7 +310,7 @@
 			and voucher_no = %s order by item_code, warehouse, actual_qty""",
 			(voucher_type, voucher_no), as_list=1)
 		self.assertTrue(sle)
-		sle.sort(key=lambda x: x[0])
+		sle.sort(key=lambda x: x[1])
 
 		for i, sle in enumerate(sle):
 			self.assertEqual(expected_sle[i][0], sle[0])
@@ -773,14 +777,12 @@
 		self.assertEqual(doc.per_transferred, 100)
 
 	def test_gle_for_opening_stock_entry(self):
-		set_perpetual_inventory(1)
-
-		mr = make_stock_entry(item_code="_Test Item", target="_Test Warehouse - _TC",
-			qty=50, basic_rate=100, expense_account="Stock Adjustment - _TC", is_opening="Yes", do_not_save=True)
+		mr = make_stock_entry(item_code="_Test Item", target="Stores - TCP1", company="_Test Company with perpetual inventory",qty=50, basic_rate=100, expense_account="Stock Adjustment - TCP1", is_opening="Yes", do_not_save=True)
 
 		self.assertRaises(OpeningEntryAccountError, mr.save)
 
-		mr.items[0].expense_account = "Temporary Opening - _TC"
+		mr.items[0].expense_account = "Temporary Opening - TCP1"
+
 		mr.save()
 		mr.submit()
 
@@ -805,14 +807,42 @@
 
 def get_qty_after_transaction(**args):
 	args = frappe._dict(args)
-
 	last_sle = get_previous_sle({
 		"item_code": args.item_code or "_Test Item",
 		"warehouse": args.warehouse or "_Test Warehouse - _TC",
 		"posting_date": args.posting_date or nowdate(),
 		"posting_time": args.posting_time or nowtime()
 	})
-
 	return flt(last_sle.get("qty_after_transaction"))
 
+def get_multiple_items():
+	return [
+			{
+				"conversion_factor": 1.0,
+				"cost_center": "Main - TCP1",
+				"doctype": "Stock Entry Detail",
+				"expense_account": "Stock Adjustment - TCP1",
+				"basic_rate": 100,
+				"item_code": "_Test Item",
+				"qty": 50.0,
+				"s_warehouse": "Stores - TCP1",
+				"stock_uom": "_Test UOM",
+				"transfer_qty": 50.0,
+				"uom": "_Test UOM"
+			},
+			{
+				"conversion_factor": 1.0,
+				"cost_center": "Main - TCP1",
+				"doctype": "Stock Entry Detail",
+				"expense_account": "Stock Adjustment - TCP1",
+				"basic_rate": 5000,
+				"item_code": "_Test Item Home Desktop 100",
+				"qty": 1,
+				"stock_uom": "_Test UOM",
+				"t_warehouse": "Stores - TCP1",
+				"transfer_qty": 1,
+				"uom": "_Test UOM"
+			}
+		]
+
 test_records = frappe.get_test_records('Stock Entry')
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index cd05929..e6d7e3f 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -7,7 +7,7 @@
 from __future__ import unicode_literals
 import frappe, unittest
 from frappe.utils import flt, nowdate, nowtime
-from erpnext.accounts.utils import get_stock_and_account_difference
+from erpnext.accounts.utils import get_stock_and_account_balance
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 from erpnext.stock.stock_ledger import get_previous_sle, update_entries_after
 from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import EmptyStockReconciliationItemsError, get_items
@@ -21,7 +21,6 @@
 	def setUpClass(self):
 		create_batch_or_serial_no_items()
 		frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
-		insert_existing_sle()
 
 	def test_reco_for_fifo(self):
 		self._test_reco_sle_gle("FIFO")
@@ -30,7 +29,8 @@
 		self._test_reco_sle_gle("Moving Average")
 
 	def _test_reco_sle_gle(self, valuation_method):
-		set_perpetual_inventory()
+		insert_existing_sle(warehouse='Stores - TCP1')
+		company = frappe.db.get_value('Warehouse', 'Stores - TCP1', 'company')
 		# [[qty, valuation_rate, posting_date,
 		#		posting_time, expected_stock_value, bin_qty, bin_valuation]]
 		input_data = [
@@ -46,14 +46,15 @@
 
 			last_sle = get_previous_sle({
 				"item_code": "_Test Item",
-				"warehouse": "_Test Warehouse - _TC",
+				"warehouse": "Stores - TCP1",
 				"posting_date": d[2],
 				"posting_time": d[3]
 			})
 
 			# submit stock reconciliation
 			stock_reco = create_stock_reconciliation(qty=d[0], rate=d[1],
-				posting_date=d[2], posting_time=d[3])
+				posting_date=d[2], posting_time=d[3], warehouse="Stores - TCP1",
+				company=company, expense_account = "Stock Adjustment - TCP1")
 
 			# check stock value
 			sle = frappe.db.sql("""select * from `tabStock Ledger Entry`
@@ -73,17 +74,18 @@
 				# no gl entries
 				self.assertTrue(frappe.db.get_value("Stock Ledger Entry",
 					{"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name}))
-				self.assertFalse(get_stock_and_account_difference(["_Test Account Stock In Hand - _TC"]))
 
-			stock_reco.cancel()
+				acc_bal, stock_bal, wh_list = get_stock_and_account_balance("Stock In Hand - TCP1",
+					stock_reco.posting_date, stock_reco.company)
+				self.assertEqual(acc_bal, stock_bal)
 
-			self.assertFalse(frappe.db.get_value("Stock Ledger Entry",
-				{"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name}))
+				stock_reco.cancel()
 
-			self.assertFalse(frappe.db.get_value("GL Entry",
-				{"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name}))
+				self.assertFalse(frappe.db.get_value("Stock Ledger Entry",
+					{"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name}))
 
-			set_perpetual_inventory(0)
+				self.assertFalse(frappe.db.get_value("GL Entry",
+					{"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name}))
 
 	def test_get_items(self):
 		create_warehouse("_Test Warehouse Group 1", {"is_group": 1})
@@ -203,17 +205,17 @@
 			stock_doc.cancel()
 
 
-def insert_existing_sle():
+def insert_existing_sle(warehouse):
 	from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
 
 	make_stock_entry(posting_date="2012-12-15", posting_time="02:00", item_code="_Test Item",
-		target="_Test Warehouse - _TC", qty=10, basic_rate=700)
+		target=warehouse, qty=10, basic_rate=700)
 
 	make_stock_entry(posting_date="2012-12-25", posting_time="03:00", item_code="_Test Item",
-		source="_Test Warehouse - _TC", qty=15)
+		source=warehouse, qty=15)
 
 	make_stock_entry(posting_date="2013-01-05", posting_time="07:00", item_code="_Test Item",
-		target="_Test Warehouse - _TC", qty=15, basic_rate=1200)
+		target=warehouse, qty=15, basic_rate=1200)
 
 def create_batch_or_serial_no_items():
 	create_warehouse("_Test Warehouse for Stock Reco1",
@@ -244,7 +246,10 @@
 	sr.company = args.company or "_Test Company"
 	sr.expense_account = args.expense_account or \
 		("Stock Adjustment - _TC" if frappe.get_all("Stock Ledger Entry") else "Temporary Opening - _TC")
-	sr.cost_center = args.cost_center or "_Test Cost Center - _TC"
+	sr.cost_center = args.cost_center \
+		or frappe.get_cached_value("Company", sr.company, "cost_center") \
+		or "_Test Cost Center - _TC"
+
 	sr.append("items", {
 		"item_code": args.item_code or "_Test Item",
 		"warehouse": args.warehouse or "_Test Warehouse - _TC",
diff --git a/erpnext/stock/doctype/warehouse/test_records.json b/erpnext/stock/doctype/warehouse/test_records.json
index 014cf3e..e128558 100644
--- a/erpnext/stock/doctype/warehouse/test_records.json
+++ b/erpnext/stock/doctype/warehouse/test_records.json
@@ -1,42 +1,36 @@
 [
  {
   "company": "_Test Company",
-  "create_account_under": "Stock Assets - _TC",
   "doctype": "Warehouse",
   "warehouse_name": "_Test Warehouse",
   "is_group": 0
  },
  {
   "company": "_Test Company",
-  "create_account_under": "Stock Assets - _TC",
   "doctype": "Warehouse",
   "warehouse_name": "_Test Scrap Warehouse",
   "is_group": 0
  },
  {
   "company": "_Test Company",
-  "create_account_under": "Fixed Assets - _TC",
   "doctype": "Warehouse",
   "warehouse_name": "_Test Warehouse 1",
   "is_group": 0
  },
  {
   "company": "_Test Company",
-  "create_account_under": "Fixed Assets - _TC",
   "doctype": "Warehouse",
   "warehouse_name": "_Test Warehouse 2",
   "is_group": 0
  },
  {
   "company": "_Test Company",
-  "create_account_under": "Stock Assets - _TC",
   "doctype": "Warehouse",
   "warehouse_name": "_Test Rejected Warehouse",
   "is_group": 0
  },
  {
   "company": "_Test Company 1",
-  "create_account_under": "Stock Assets - _TC1",
   "doctype": "Warehouse",
   "warehouse_name": "_Test Warehouse 2",
   "is_group": 0
diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.py b/erpnext/stock/doctype/warehouse/test_warehouse.py
index dc39e10..121222d 100644
--- a/erpnext/stock/doctype/warehouse/test_warehouse.py
+++ b/erpnext/stock/doctype/warehouse/test_warehouse.py
@@ -101,8 +101,7 @@
 		w.warehouse_name = warehouse_name
 		w.parent_warehouse = "_Test Warehouse Group - _TC"
 		w.company = company
-		make_account_for_warehouse(warehouse_name, w)
-		w.account = warehouse_id
+		w.account = get_warehouse_account(warehouse_name, company)
 		if properties:
 			w.update(properties)
 		w.save()
@@ -110,9 +109,40 @@
 	else:
 		return warehouse_id
 
-def make_account_for_warehouse(warehouse_name, warehouse_obj):
-	if not frappe.db.exists("Account", warehouse_name + " - _TC"):
-		parent_account = frappe.db.get_value('Account',
-			{'company': warehouse_obj.company, 'is_group':1, 'account_type': 'Stock'},'name')
-		account = create_account(account_name=warehouse_name, \
-				account_type="Stock", parent_account= parent_account, company=warehouse_obj.company)
\ No newline at end of file
+def get_warehouse(**args):
+	args = frappe._dict(args)
+	if(frappe.db.exists("Warehouse", args.warehouse_name + " - " + args.abbr)):
+		return frappe.get_doc("Warehouse", args.warehouse_name + " - " + args.abbr)
+	else:
+		w = frappe.get_doc({
+		"company": args.company or "_Test Company",
+		"doctype": "Warehouse",
+		"warehouse_name": args.warehouse_name,
+		"is_group": 0,
+		"account": get_warehouse_account(args.warehouse_name, args.company, args.abbr)
+		})
+		w.insert()
+		return w
+
+def get_warehouse_account(warehouse_name, company, company_abbr=None):
+	if not company_abbr:
+		company_abbr = frappe.get_cached_value("Company", company, 'abbr')
+
+	if not frappe.db.exists("Account", warehouse_name + " - " + company_abbr):
+		return create_account(
+			account_name=warehouse_name,
+			parent_account=get_group_stock_account(company, company_abbr),
+			account_type='Stock',
+			company=company)
+	else:
+		return warehouse_name + " - " + company_abbr
+
+
+def get_group_stock_account(company, company_abbr=None):
+	group_stock_account = frappe.db.get_value("Account",
+		filters={'account_type': 'Stock', 'is_group': 1, 'company': company}, fieldname='name')
+	if not group_stock_account:
+		if not company_abbr:
+			company_abbr = frappe.get_cached_value("Company", company, 'abbr')
+		group_stock_account = "Current Assets - " + company_abbr
+	return group_stock_account
\ No newline at end of file
diff --git a/erpnext/stock/report/item_price_stock/item_price_stock.py b/erpnext/stock/report/item_price_stock/item_price_stock.py
index e539aff..5296211 100644
--- a/erpnext/stock/report/item_price_stock/item_price_stock.py
+++ b/erpnext/stock/report/item_price_stock/item_price_stock.py
@@ -89,7 +89,7 @@
 		{conditions}"""
 		.format(conditions=conditions), filters, as_dict=1)
 
-	price_list_names = list(set([frappe.db.escape(item.price_list_name) for item in item_results]))
+	price_list_names = list(set([item.price_list_name for item in item_results]))
 
 	buying_price_map = get_price_map(price_list_names, buying=1)
 	selling_price_map = get_price_map(price_list_names, selling=1)
@@ -129,17 +129,15 @@
 
 	rate_key = "Buying Rate" if buying else "Selling Rate"
 	price_list_key = "Buying Price List" if buying else "Selling Price List"
-	price_list_condition = " and buying=1" if buying else " and selling=1"
 
-	pricing_details = frappe.db.sql("""
-		select
-			name,price_list,price_list_rate
-		from
-			`tabItem Price`
-		where
-			name in ({price_list_names}) {price_list_condition}
-		""".format(price_list_names=', '.join(['%s']*len(price_list_names)),
-	price_list_condition=price_list_condition), price_list_names, as_dict=1)
+	filters = {"name": ("in", price_list_names)}
+	if buying:
+		filters["buying"] = 1
+	else:
+		filters["selling"] = 1
+
+	pricing_details = frappe.get_all("Item Price",
+		fields = ["name", "price_list", "price_list_rate"], filters=filters)
 
 	for d in pricing_details:
 		name = d["name"]
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py
index 5bdbca2..db7f6ad 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.py
@@ -19,10 +19,26 @@
 	if opening_row:
 		data.append(opening_row)
 
+	actual_qty = stock_value = 0
+
 	for sle in sl_entries:
 		item_detail = item_details[sle.item_code]
 
 		sle.update(item_detail)
+
+		if filters.get("batch_no"):
+			actual_qty += sle.actual_qty
+			stock_value += sle.stock_value_difference
+
+			if sle.voucher_type == 'Stock Reconciliation':
+				actual_qty = sle.qty_after_transaction
+				stock_value = sle.stock_value
+
+			sle.update({
+				"qty_after_transaction": actual_qty,
+				"stock_value": stock_value
+			})
+
 		data.append(sle)
 
 		if include_uom:
@@ -67,7 +83,7 @@
 
 	return frappe.db.sql("""select concat_ws(" ", posting_date, posting_time) as date,
 			item_code, warehouse, actual_qty, qty_after_transaction, incoming_rate, valuation_rate,
-			stock_value, voucher_type, voucher_no, batch_no, serial_no, company, project
+			stock_value, voucher_type, voucher_no, batch_no, serial_no, company, project, stock_value_difference
 		from `tabStock Ledger Entry` sle
 		where company = %(company)s and
 			posting_date between %(from_date)s and %(to_date)s
diff --git a/erpnext/support/doctype/issue_priority/issue_priority.py b/erpnext/support/doctype/issue_priority/issue_priority.py
index cecaaaa..7c8925e 100644
--- a/erpnext/support/doctype/issue_priority/issue_priority.py
+++ b/erpnext/support/doctype/issue_priority/issue_priority.py
@@ -8,7 +8,4 @@
 from frappe.model.document import Document
 
 class IssuePriority(Document):
-
-	def validate(self):
-		if frappe.db.exists("Issue Priority", {"name": self.name}):
-			frappe.throw(_("Issue Priority Already Exists"))
+	pass
\ No newline at end of file
diff --git a/erpnext/templates/includes/timesheet/timesheet_row.html b/erpnext/templates/includes/timesheet/timesheet_row.html
index e9cfcda..4852f59 100644
--- a/erpnext/templates/includes/timesheet/timesheet_row.html
+++ b/erpnext/templates/includes/timesheet/timesheet_row.html
@@ -1,13 +1,14 @@
-<div class="web-list-item">
-	<a href="/timesheets?name={{ doc.name | urlencode }}" class="no-decoration">
-		<div class="row">
-			<div class="col-xs-3">
-				<span class="indicator {{ "red" if doc.status=="Cancelled" else "green" if doc.status=="Billed" else "blue" if doc.status=="Submitted" else "darkgrey" }}">{{ doc.name }}</span>
-			</div>
-			<div class="col-xs-3"> Billable Hours: {{ doc.total_billable_hours}} </div>
-			<div class="col-xs-2"> {{ _(doc.sales_invoice) }} </div>
-			<div class="col-xs-2"> {{ _(doc.project) }} </div>
-			<div class="col-xs-2"> {{ _(doc.activity_type) }} </div>
+<div class="web-list-item transaction-list-item">
+	<div class="row">
+		<div class="col-xs-3">
+			<span class='indicator {{ "red" if doc.status=="Cancelled" else "green" if doc.status=="Billed" else "blue" if doc.status=="Submitted" else "darkgrey" }} small'>
+				{{ doc.name }}
+			</span>
 		</div>
-	</a>
+		<div class="col-xs-2 small"> {{ doc.total_billable_hours }} </div>
+		<div class="col-xs-2 small"> {{ doc.project or '' }} </div>
+		<div class="col-xs-2 small"> {{ doc.sales_invoice or '' }} </div>
+		<div class="col-xs-2 small"> {{ _(doc.activity_type) }} </div>
+	</div>
+	<!-- <a href="/timesheets?name={{ doc.name | urlencode }}" class="transaction-item-link">Link</a> -->
 </div>
diff --git a/erpnext/tests/test_woocommerce.py b/erpnext/tests/test_woocommerce.py
index fc850d5..ce0f47d 100644
--- a/erpnext/tests/test_woocommerce.py
+++ b/erpnext/tests/test_woocommerce.py
@@ -18,6 +18,7 @@
 			woo_settings.api_consumer_key = "ck_fd43ff5756a6abafd95fadb6677100ce95a758a1"
 			woo_settings.api_consumer_secret = "cs_94360a1ad7bef7fa420a40cf284f7b3e0788454e"
 			woo_settings.enable_sync = 1
+			woo_settings.company = "Woocommerce"
 			woo_settings.tax_account = "Sales Expenses - W"
 			woo_settings.f_n_f_account = "Expenses - W"
 			woo_settings.creation_user = "Administrator"
diff --git a/erpnext/translations/af.csv b/erpnext/translations/af.csv
index f74448e..3cb2e8d 100644
--- a/erpnext/translations/af.csv
+++ b/erpnext/translations/af.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Voorbehou Aantal: Hoeveelheid te koop bestel, maar nie afgelewer nie."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Herstel, as die gekose adres geredigeer word na die stoor"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Voorbehou Aantal vir Onderkontrakte: Hoeveelheid grondstowwe om onderverpakte items te maak.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Voorbehou Aantal vir Onderkontrakte: Hoeveelheid grondstowwe om onderverpakte items te maak.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Item Variant {0} bestaan reeds met dieselfde eienskappe
 DocType: Item,Hub Publishing Details,Hub Publishing Details
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Oopmaak&#39;
diff --git a/erpnext/translations/am.csv b/erpnext/translations/am.csv
index 6b2e47b..1d07f51 100644
--- a/erpnext/translations/am.csv
+++ b/erpnext/translations/am.csv
@@ -1560,7 +1560,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",የተያዙ ጫፎች ብዛት ለሽያጭ የታዘዘ ፣ ግን አልደረሰም ፡፡
 DocType: Drug Prescription,Interval UOM,የጊዜ ክፍተት UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",የተመረጠው አድራሻ ከተቀመጠ በኋላ ማስተካከያ ከተደረገበት አይምረጡ
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,የተያዙ ዕቃዎች ለንዑስ-ኮንትራክተር-ንዑስ-ንዑስ ንጥል ነገሮችን ለመስራት ጥሬ ዕቃዎች ብዛት።
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,የተያዙ ዕቃዎች ለንዑስ-ኮንትራክተር-ንዑስ-ንዑስ ንጥል ነገሮችን ለመስራት ጥሬ ዕቃዎች ብዛት።
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,ንጥል ተለዋጭ {0} ቀድሞውኑ ተመሳሳይ ባሕርያት ጋር አለ
 DocType: Item,Hub Publishing Details,ሃቢ የህትመት ዝርዝሮች
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;በመክፈት ላይ&#39;
diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv
index 05ccdbf..b20bf97 100644
--- a/erpnext/translations/ar.csv
+++ b/erpnext/translations/ar.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",الكمية المحجوزة : الكمية المطلوبة لل بيع، ولكن لم يتم تسليمها .
 DocType: Drug Prescription,Interval UOM,الفاصل الزمني أوم
 DocType: Customer,"Reselect, if the chosen address is edited after save",إعادة تحديد، إذا تم تحرير عنوان المختار بعد حفظ
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,الكمية المحجوزة للعقد من الباطن: كمية المواد الخام لصنع سلع من الباطن.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,الكمية المحجوزة للعقد من الباطن: كمية المواد الخام لصنع سلع من الباطن.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,متغير الصنف {0} موجود بالفعل مع نفس الخصائص
 DocType: Item,Hub Publishing Details,هاب تفاصيل النشر
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','افتتاحي'
diff --git a/erpnext/translations/bg.csv b/erpnext/translations/bg.csv
index 9da1eb3..fbb2b0f 100644
--- a/erpnext/translations/bg.csv
+++ b/erpnext/translations/bg.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Количество, запазено: Количество, поръчано за продажба, но не е доставено."
 DocType: Drug Prescription,Interval UOM,Интервал (мерна единица)
 DocType: Customer,"Reselect, if the chosen address is edited after save","Преименувайте отново, ако избраният адрес се редактира след запазване"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,"Количество, запазено за подизпълнение: Количество суровини за изработване на извадени продукти."
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,"Количество, запазено за подизпълнение: Количество суровини за изработване на извадени продукти."
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Позиция Variant {0} вече съществува с едни и същи атрибути
 DocType: Item,Hub Publishing Details,Подробна информация за издателя
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',"""Начален баланс"""
diff --git a/erpnext/translations/bn.csv b/erpnext/translations/bn.csv
index 67ef377..26a3c33 100644
--- a/erpnext/translations/bn.csv
+++ b/erpnext/translations/bn.csv
@@ -1544,7 +1544,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","সংরক্ষিত পরিমাণ: পরিমাণ বিক্রয়ের জন্য অর্ডার করা হয়েছে, তবে বিতরণ করা হয়নি।"
 DocType: Drug Prescription,Interval UOM,অন্তর্বর্তী UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",সংরক্ষণ করার পরে যদি নির্বাচিত ঠিকানাটি সম্পাদনা করা হয় তবে নির্বাচন বাতিল করুন
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,সাবকন্ট্রাক্টের জন্য সংরক্ষিত পরিমাণ: উপকোট্রাক্ট আইটেমগুলি তৈরি করতে কাঁচামাল পরিমাণ।
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,সাবকন্ট্রাক্টের জন্য সংরক্ষিত পরিমাণ: উপকোট্রাক্ট আইটেমগুলি তৈরি করতে কাঁচামাল পরিমাণ।
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,আইটেম ভেরিয়েন্ট {0} ইতিমধ্যে একই বৈশিষ্ট্যাবলী সঙ্গে বিদ্যমান
 DocType: Item,Hub Publishing Details,হাব প্রকাশনা বিবরণ
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',' শুরু'
diff --git a/erpnext/translations/bs.csv b/erpnext/translations/bs.csv
index fe7d8c8..aa148cb 100644
--- a/erpnext/translations/bs.csv
+++ b/erpnext/translations/bs.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Rezervirano Količina : Količina naručiti za prodaju , ali nije dostavljena ."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Ponovo odaberite, ako je izabrana adresa uređena nakon čuvanja"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Količina rezervisanog za podugovor: Količina sirovina za izradu predmeta koji se oduzimaju.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Količina rezervisanog za podugovor: Količina sirovina za izradu predmeta koji se oduzimaju.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Stavka Variant {0} već postoji s istim atributima
 DocType: Item,Hub Publishing Details,Detalji izdavanja stanice
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Otvaranje&#39;
diff --git a/erpnext/translations/ca.csv b/erpnext/translations/ca.csv
index da6edd5..fd11fe6 100644
--- a/erpnext/translations/ca.csv
+++ b/erpnext/translations/ca.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reservats Quantitat: Quantitat va ordenar a la venda, però no entregat."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Torneu a seleccionar, si l&#39;adreça escollida s&#39;edita després de desar-la"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Quantitat reservada per al subcontracte: quantitat de matèries primeres per fabricar articles subcontractats.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Quantitat reservada per al subcontracte: quantitat de matèries primeres per fabricar articles subcontractats.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Article Variant {0} ja existeix amb els mateixos atributs
 DocType: Item,Hub Publishing Details,Detalls de publicació del Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Obertura&#39;
diff --git a/erpnext/translations/cs.csv b/erpnext/translations/cs.csv
index 6859665..43dd383 100644
--- a/erpnext/translations/cs.csv
+++ b/erpnext/translations/cs.csv
@@ -1580,7 +1580,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserved Množství: Množství objednal k prodeji, ale není doručena."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Znovu vyberte, pokud je zvolená adresa po uložení upravena"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Vyhrazeno Množství pro subdodávky: Množství surovin pro výrobu subdodávek.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Vyhrazeno Množství pro subdodávky: Množství surovin pro výrobu subdodávek.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Bod Variant {0} již existuje se stejnými vlastnostmi
 DocType: Item,Hub Publishing Details,Podrobnosti o publikování Hubu
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',"""Otevírací"""
diff --git a/erpnext/translations/da.csv b/erpnext/translations/da.csv
index 1f185f1..0120e3c 100644
--- a/erpnext/translations/da.csv
+++ b/erpnext/translations/da.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserveret antal: Mængde bestilt til salg, men ikke leveret."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Vælg igen, hvis den valgte adresse redigeres efter gem"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Reserveret antal til underentreprise: Råvaremængde til fremstilling af underleverede genstande.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Reserveret antal til underentreprise: Råvaremængde til fremstilling af underleverede genstande.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Item Variant {0} findes allerede med samme attributter
 DocType: Item,Hub Publishing Details,Hub Publishing Detaljer
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Åbner'
diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv
index 5239468..2e25a12 100644
--- a/erpnext/translations/de.csv
+++ b/erpnext/translations/de.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reservierte Menge: Für den Verkauf bestellte Menge, aber noch nicht geliefert."
 DocType: Drug Prescription,Interval UOM,Intervall UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Wählen Sie erneut, wenn die gewählte Adresse nach dem Speichern bearbeitet wird"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Reservierte Menge für Lohnbearbeiter: Rohstoffmenge für Lohnbearbeiter.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Reservierte Menge für Lohnbearbeiter: Rohstoffmenge für Lohnbearbeiter.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Artikelvariante {0} mit denselben Attributen existiert bereits
 DocType: Item,Hub Publishing Details,Hub-Veröffentlichungsdetails
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',"""Eröffnung"""
diff --git a/erpnext/translations/el.csv b/erpnext/translations/el.csv
index faac064..3e641e1 100644
--- a/erpnext/translations/el.csv
+++ b/erpnext/translations/el.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",Δεσμευμένη ποσότητα : ποσότητα που παραγγέλθηκε για πώληση αλλά δεν παραδόθηκε.
 DocType: Drug Prescription,Interval UOM,Διαστήματα UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Επαναφέρετε την επιλογή, εάν η επιλεγμένη διεύθυνση επεξεργαστεί μετά την αποθήκευση"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Προβλεπόμενη ποσότητα για υπεργολαβία: Ποσότητα πρώτων υλών για την πραγματοποίηση υποκλάδων.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Προβλεπόμενη ποσότητα για υπεργολαβία: Ποσότητα πρώτων υλών για την πραγματοποίηση υποκλάδων.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Θέση Παραλλαγή {0} υπάρχει ήδη με ίδια χαρακτηριστικά
 DocType: Item,Hub Publishing Details,Στοιχεία δημοσίευσης Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',«Άνοιγμα»
diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv
index 18fd8c8..6e12892 100644
--- a/erpnext/translations/es.csv
+++ b/erpnext/translations/es.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Cantidad Reservada: Cantidad a pedir a la venta , pero no entregado."
 DocType: Drug Prescription,Interval UOM,Intervalo UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Vuelva a seleccionar, si la dirección elegida se edita después de guardar"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Cantidad reservada para subcontrato: Cantidad de materias primas para hacer artículos subcotractados.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Cantidad reservada para subcontrato: Cantidad de materias primas para hacer artículos subcotractados.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Artículo Variant {0} ya existe con los mismos atributos
 DocType: Item,Hub Publishing Details,Detalle de Publicación del Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Apertura&#39;
diff --git a/erpnext/translations/et.csv b/erpnext/translations/et.csv
index 7b87342..bd042b8 100644
--- a/erpnext/translations/et.csv
+++ b/erpnext/translations/et.csv
@@ -1558,7 +1558,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserveeritud kogus: Müügiks tellitud kogus, kuid tarnimata."
 DocType: Drug Prescription,Interval UOM,Intervall UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Kui valite valitud aadressi pärast salvestamist, vali uuesti"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Allhankelepingu jaoks reserveeritud kogus: Tooraine kogus alamhangete jaoks.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Allhankelepingu jaoks reserveeritud kogus: Tooraine kogus alamhangete jaoks.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Punkt Variant {0} on juba olemas sama atribuute
 DocType: Item,Hub Publishing Details,Hubi avaldamise üksikasjad
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Avamine&quot;
diff --git a/erpnext/translations/fa.csv b/erpnext/translations/fa.csv
index ffd013e..f9fd427 100644
--- a/erpnext/translations/fa.csv
+++ b/erpnext/translations/fa.csv
@@ -1544,7 +1544,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",Qty رزرو شده: مقدار سفارش برای فروش سفارش داده می شود ، اما تحویل داده نمی شود.
 DocType: Drug Prescription,Interval UOM,فاصله UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",در صورتی که آدرس انتخاب شده پس از ذخیره ویرایش، مجددا انتخاب کنید
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qty رزرو شده برای قراردادهای فرعی: مقدار مواد اولیه برای ساخت وسایل فرعی.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qty رزرو شده برای قراردادهای فرعی: مقدار مواد اولیه برای ساخت وسایل فرعی.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,مورد متغیر {0} در حال حاضر با ویژگی های همان وجود دارد
 DocType: Item,Hub Publishing Details,جزئیات انتشار هاب
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;افتتاح&#39;
diff --git a/erpnext/translations/fi.csv b/erpnext/translations/fi.csv
index c028c30..1b56db2 100644
--- a/erpnext/translations/fi.csv
+++ b/erpnext/translations/fi.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Varattu määrä: Myytävänä oleva määrä, mutta ei toimitettu."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Vahvista valinta uudelleen, jos valittua osoitetta muokataan tallennuksen jälkeen"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Varattu määrä alihankintasopimuksille: Raaka-aineiden määrä alihankittujen tuotteiden valmistamiseksi.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Varattu määrä alihankintasopimuksille: Raaka-aineiden määrä alihankittujen tuotteiden valmistamiseksi.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Tuote Variant {0} on jo olemassa samoja ominaisuuksia
 DocType: Item,Hub Publishing Details,Hub-julkaisutiedot
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Avattu'
diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv
index 67e9885..874bfb0 100644
--- a/erpnext/translations/fr.csv
+++ b/erpnext/translations/fr.csv
@@ -1583,7 +1583,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Réservés Quantité: Quantité de commande pour la vente , mais pas livré ."
 DocType: Drug Prescription,Interval UOM,UDM d'Intervalle
 DocType: Customer,"Reselect, if the chosen address is edited after save","Re-sélectionner, si l'adresse choisie est éditée après l'enregistrement"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qté réservée aux sous-traitants: quantité de matières premières permettant de fabriquer des articles sous-traités.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qté réservée aux sous-traitants: quantité de matières premières permettant de fabriquer des articles sous-traités.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,La Variante de l'Article {0} existe déjà avec les mêmes caractéristiques
 DocType: Item,Hub Publishing Details,Détails Publiés sur le Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Ouverture'
diff --git a/erpnext/translations/gu.csv b/erpnext/translations/gu.csv
index eb35e24..ffc0c4f 100644
--- a/erpnext/translations/gu.csv
+++ b/erpnext/translations/gu.csv
@@ -1543,7 +1543,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","રિઝર્વેટેડ ક્વોટી: વેચવા માટેનો જથ્થો આપ્યો, પરંતુ પહોંચાડ્યો નહીં."
 DocType: Drug Prescription,Interval UOM,અંતરાલ UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","રીસલેક્ટ કરો, જો સાચવેલા સરનામાંને સેવ કર્યા પછી સંપાદિત કરવામાં આવે છે"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,સબકોન્ટ્રેક્ટ માટે અનામત પ્રમાણ: સબકોટ્રેક્ટ વસ્તુઓ બનાવવા માટે કાચા માલનો જથ્થો.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,સબકોન્ટ્રેક્ટ માટે અનામત પ્રમાણ: સબકોટ્રેક્ટ વસ્તુઓ બનાવવા માટે કાચા માલનો જથ્થો.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,વસ્તુ વેરિએન્ટ {0} પહેલાથી જ લક્ષણો સાથે હાજર
 DocType: Item,Hub Publishing Details,હબ પબ્લિશિંગ વિગતો
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','શરૂઆત'
diff --git a/erpnext/translations/hi.csv b/erpnext/translations/hi.csv
index 9b5fc41..d745155 100644
--- a/erpnext/translations/hi.csv
+++ b/erpnext/translations/hi.csv
@@ -1578,7 +1578,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","सुरक्षित मात्रा: मात्रा बिक्री के लिए आदेश दिया है , लेकिन नहीं पहुंचा."
 DocType: Drug Prescription,Interval UOM,अंतराल UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","अचयनित करें, अगर सहेजे जाने के बाद चुना हुआ पता संपादित किया गया है"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,सब-कॉन्ट्रैक्ट के लिए आरक्षित मात्रा: कच्चे माल की मात्रा उप-निर्मित आइटम बनाने के लिए।
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,सब-कॉन्ट्रैक्ट के लिए आरक्षित मात्रा: कच्चे माल की मात्रा उप-निर्मित आइटम बनाने के लिए।
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,मद संस्करण {0} पहले से ही एक ही गुण के साथ मौजूद है
 DocType: Item,Hub Publishing Details,हब प्रकाशन विवरण
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;उद्घाटन&#39;
diff --git a/erpnext/translations/hr.csv b/erpnext/translations/hr.csv
index d49b79a..1e9d77a 100644
--- a/erpnext/translations/hr.csv
+++ b/erpnext/translations/hr.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Rezervirano Količina : Količina naručiti za prodaju , ali nije dostavljena ."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",Ponovno odaberite ako je odabrana adresa uređena nakon spremanja
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Količina rezerviranog za podugovor: Količina sirovina za izradu poduhvata.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Količina rezerviranog za podugovor: Količina sirovina za izradu poduhvata.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Stavka Varijanta {0} već postoji s istim atributima
 DocType: Item,Hub Publishing Details,Pojedinosti objavljivanja središta
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Otvaranje &#39;
diff --git a/erpnext/translations/hu.csv b/erpnext/translations/hu.csv
index bd8a6f3..25ee33b 100644
--- a/erpnext/translations/hu.csv
+++ b/erpnext/translations/hu.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserved Mennyiség: Rendelhető mennyiség eladó, de nem teljesített."
 DocType: Drug Prescription,Interval UOM,Intervallum mértékegysége
 DocType: Customer,"Reselect, if the chosen address is edited after save","Újra válassza ki, ha a kiválasztott cím szerkesztésre került a mentés után"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Fenntartott mennyiség az alvállalkozók számára: Nyersanyag-mennyiség az alhúzásokhoz.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Fenntartott mennyiség az alvállalkozók számára: Nyersanyag-mennyiség az alhúzásokhoz.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Tétel variáció {0} már létezik azonos Jellemzővel
 DocType: Item,Hub Publishing Details,Hub közzétételének részletei
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',"""Nyitás"""
diff --git a/erpnext/translations/id.csv b/erpnext/translations/id.csv
index a49187f..127cc57 100644
--- a/erpnext/translations/id.csv
+++ b/erpnext/translations/id.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserved Qty: Jumlah memerintahkan untuk dijual, tapi tidak disampaikan."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Pilih ulang, jika alamat yang dipilih diedit setelah simpan"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Jumlah Pesanan untuk Sub-kontrak: Kuantitas bahan baku untuk membuat barang-barang yang disubsidi.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Jumlah Pesanan untuk Sub-kontrak: Kuantitas bahan baku untuk membuat barang-barang yang disubsidi.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Item Varian {0} sudah ada dengan atribut yang sama
 DocType: Item,Hub Publishing Details,Rincian Hub Publishing
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Awal'
diff --git a/erpnext/translations/is.csv b/erpnext/translations/is.csv
index 8403157..5e13baf 100644
--- a/erpnext/translations/is.csv
+++ b/erpnext/translations/is.csv
@@ -1562,7 +1562,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Frátekið magn: Magn pantað til sölu, en ekki afhent."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Veldu aftur, ef valið heimilisfang er breytt eftir að vista"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Frátekið magn fyrir undirverktaka: Magn hráefna til að búa til undirverktaka hluti.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Frátekið magn fyrir undirverktaka: Magn hráefna til að búa til undirverktaka hluti.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Liður Variant {0} er þegar til staðar með sömu eiginleika
 DocType: Item,Hub Publishing Details,Hub Publishing Upplýsingar
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Opening&#39;
diff --git a/erpnext/translations/it.csv b/erpnext/translations/it.csv
index 5d3f12a..5d38b99 100644
--- a/erpnext/translations/it.csv
+++ b/erpnext/translations/it.csv
@@ -1581,7 +1581,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Riservato Quantità : quantità ordinata in vendita , ma non consegnati ."
 DocType: Drug Prescription,Interval UOM,Intervallo UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Riseleziona, se l&#39;indirizzo scelto viene modificato dopo il salvataggio"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qtà riservata per conto lavoro: quantità di materie prime per la produzione di articoli in conto lavoro.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qtà riservata per conto lavoro: quantità di materie prime per la produzione di articoli in conto lavoro.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Prodotto Modello {0} esiste già con gli stessi attributi
 DocType: Item,Hub Publishing Details,Dettagli di pubblicazione Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Apertura'
diff --git a/erpnext/translations/ja.csv b/erpnext/translations/ja.csv
index 166d4ef..8e72050 100644
--- a/erpnext/translations/ja.csv
+++ b/erpnext/translations/ja.csv
@@ -1589,7 +1589,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",予約数量:販売用に数量が注文されていますが、納品されていません。
 DocType: Drug Prescription,Interval UOM,インターバル単位
 DocType: Customer,"Reselect, if the chosen address is edited after save",選択したアドレスが保存後に編集された場合は、再選択します。
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,外注の予約数量:外注品目を作成するための原料数量。
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,外注の予約数量:外注品目を作成するための原料数量。
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,アイテムバリエーション{0}は既に同じ属性で存在しています
 DocType: Item,Hub Publishing Details,ハブ公開の詳細
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',「オープニング」
diff --git a/erpnext/translations/km.csv b/erpnext/translations/km.csv
index 812f6ba..fefd314 100644
--- a/erpnext/translations/km.csv
+++ b/erpnext/translations/km.csv
@@ -1553,7 +1553,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",Qty បានបម្រុងទុក: បរិមាណបានបញ្ជាទិញសម្រាប់លក់ប៉ុន្តែមិនបានប្រគល់ឱ្យទេ។
 DocType: Drug Prescription,Interval UOM,ចន្លោះពេលវេលា UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",ជ្រើសរើសបើអាសយដ្ឋានដែលបានជ្រើសត្រូវបានកែសម្រួលបន្ទាប់ពីរក្សាទុក
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qty ដែលបានបម្រុងទុកសម្រាប់កិច្ចសន្យារង: បរិមាណវត្ថុធាតុដើមដើម្បីធ្វើឱ្យវត្ថុរង។
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qty ដែលបានបម្រុងទុកសម្រាប់កិច្ចសន្យារង: បរិមាណវត្ថុធាតុដើមដើម្បីធ្វើឱ្យវត្ថុរង។
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,ធាតុវ៉ារ្យង់ {0} រួចហើយដែលមានគុណលក្ខណៈដូចគ្នា
 DocType: Item,Hub Publishing Details,ពត៌មានលម្អិតការបោះពុម្ព
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;ការបើក&quot;
diff --git a/erpnext/translations/kn.csv b/erpnext/translations/kn.csv
index 471bd74..1673c16 100644
--- a/erpnext/translations/kn.csv
+++ b/erpnext/translations/kn.csv
@@ -1572,7 +1572,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ ಪ್ರಮಾಣ: ಪ್ರಮಾಣ ಮಾರಾಟ ಆದೇಶ , ಆದರೆ ಈಡೇರಿಸಿಲ್ಲ ."
 DocType: Drug Prescription,Interval UOM,ಮಧ್ಯಂತರ UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","ಆಯ್ಕೆ ಮಾಡಿದ ವಿಳಾಸವನ್ನು ಉಳಿಸಿದ ನಂತರ ಸಂಪಾದಿಸಿದ್ದರೆ, ಆಯ್ಕೆ ರದ್ದುಮಾಡಿ"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,ಉಪಗುತ್ತಿಗೆಗಾಗಿ ಕ್ಯೂಟಿ ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ: ಉಪಕೋಟ್ರಾಕ್ಟ್ ವಸ್ತುಗಳನ್ನು ತಯಾರಿಸಲು ಕಚ್ಚಾ ವಸ್ತುಗಳ ಪ್ರಮಾಣ.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,ಉಪಗುತ್ತಿಗೆಗಾಗಿ ಕ್ಯೂಟಿ ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ: ಉಪಕೋಟ್ರಾಕ್ಟ್ ವಸ್ತುಗಳನ್ನು ತಯಾರಿಸಲು ಕಚ್ಚಾ ವಸ್ತುಗಳ ಪ್ರಮಾಣ.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,ಐಟಂ ಭಿನ್ನ {0} ಈಗಾಗಲೇ ಅದೇ ಲಕ್ಷಣಗಳು ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ
 DocType: Item,Hub Publishing Details,ಹಬ್ ಪಬ್ಲಿಷಿಂಗ್ ವಿವರಗಳು
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',ಉದ್ಘಾಟಿಸುತ್ತಿರುವುದು
diff --git a/erpnext/translations/ko.csv b/erpnext/translations/ko.csv
index ab079ea..91d8198 100644
--- a/erpnext/translations/ko.csv
+++ b/erpnext/translations/ko.csv
@@ -1594,7 +1594,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","예약 수량 : 수량 판매를 위해 주문,하지만 배달되지 않습니다."
 DocType: Drug Prescription,Interval UOM,간격 UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",저장 후 선택한 주소를 다시 선택한 경우 다시 선택하십시오.
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,외주 용 예약 수량 : 추심 품목을 만들기위한 원자재 수량.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,외주 용 예약 수량 : 추심 품목을 만들기위한 원자재 수량.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,항목 변형 {0} 이미 동일한 속성을 가진 존재
 DocType: Item,Hub Publishing Details,허브 출판 세부 정보
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;열기&#39;
diff --git a/erpnext/translations/ku.csv b/erpnext/translations/ku.csv
index af961b1..8e2d989 100644
--- a/erpnext/translations/ku.csv
+++ b/erpnext/translations/ku.csv
@@ -1551,7 +1551,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Qty Reserve: Quantity ferman da firotanê, lê nehatiye radest kirin."
 DocType: Drug Prescription,Interval UOM,UOM Interfer
 DocType: Customer,"Reselect, if the chosen address is edited after save","Hilbijêre, eger navnîşana bijartî piştî tomarkirinê hate guherandin"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qiyama Reserve ji bo Nekokkêşanê: Kêmasiya madeyên xav ji bo çêkirina tiştên subcotracted.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qiyama Reserve ji bo Nekokkêşanê: Kêmasiya madeyên xav ji bo çêkirina tiştên subcontracted.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Babetê Variant {0} ji xwe bi taybetmendiyên xwe heman heye
 DocType: Item,Hub Publishing Details,Agahdariyên Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Dergeh&#39;
diff --git a/erpnext/translations/lo.csv b/erpnext/translations/lo.csv
index e7349a4..6343c61 100644
--- a/erpnext/translations/lo.csv
+++ b/erpnext/translations/lo.csv
@@ -1576,7 +1576,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Qty ທີ່ສະຫງວນໄວ້: ຈຳ ນວນທີ່ສັ່ງຊື້, ແຕ່ບໍ່ໄດ້ສົ່ງ."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","ແກ້ໄຂ, ຖ້າຫາກວ່າທີ່ຢູ່ທີ່ເລືອກໄດ້ຖືກແກ້ໄຂຫຼັງຈາກທີ່ບັນທຶກ"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qty ທີ່ສະຫງວນໄວ້ ສຳ ລັບສັນຍາຍ່ອຍ: ປະລິມານວັດຖຸດິບເພື່ອຜະລິດສິນຄ້າຍ່ອຍ.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qty ທີ່ສະຫງວນໄວ້ ສຳ ລັບສັນຍາຍ່ອຍ: ປະລິມານວັດຖຸດິບເພື່ອຜະລິດສິນຄ້າຍ່ອຍ.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,ລາຍການ Variant {0} ມີຢູ່ແລ້ວກັບຄຸນລັກສະນະດຽວກັນ
 DocType: Item,Hub Publishing Details,Hub Publishing Details
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;ເປີດ &#39;
diff --git a/erpnext/translations/lt.csv b/erpnext/translations/lt.csv
index a9805ee..2576ccf 100644
--- a/erpnext/translations/lt.csv
+++ b/erpnext/translations/lt.csv
@@ -1575,7 +1575,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Rezervuotas kiekis: Parduodamas kiekis, bet nepristatytas."
 DocType: Drug Prescription,Interval UOM,Intervalas UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Iš naujo pažymėkite, jei pasirinktas adresas yra redaguotas po įrašymo"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,"Subrangos užsakytas kiekis: Žaliavų kiekis, iš kurio gaminami subtraktoriai."
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,"Subrangos užsakytas kiekis: Žaliavų kiekis, iš kurio gaminami subtraktoriai."
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Prekė variantas {0} jau egzistuoja su tais pačiais atributais
 DocType: Item,Hub Publishing Details,Hub Publishing duomenys
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Atidarymas&quot;
diff --git a/erpnext/translations/lv.csv b/erpnext/translations/lv.csv
index 12348de..dfc0076 100644
--- a/erpnext/translations/lv.csv
+++ b/erpnext/translations/lv.csv
@@ -1572,7 +1572,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserved Daudzums: pasūtīts pārdod daudzums, bet nav sniegusi."
 DocType: Drug Prescription,Interval UOM,Intervāls UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Atkārtoti atlasiet, ja pēc saglabāšanas izvēlētā adrese tiek rediģēta"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,"Rezervētais daudzums apakšlīgumam: Izejvielu daudzums, lai izgatavotu apakšsavilkumus."
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,"Rezervētais daudzums apakšlīgumam: Izejvielu daudzums, lai izgatavotu apakšsavilkumus."
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Postenis Variant {0} jau eksistē ar tiem pašiem atribūtiem
 DocType: Item,Hub Publishing Details,Hub Publicēšanas informācija
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Atklāšana&quot;
diff --git a/erpnext/translations/mk.csv b/erpnext/translations/mk.csv
index 51f2726..7101b25 100644
--- a/erpnext/translations/mk.csv
+++ b/erpnext/translations/mk.csv
@@ -1563,7 +1563,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Резервирана количина: Количина нарачана за продажба, но не е доставена."
 DocType: Drug Prescription,Interval UOM,Интервал UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Ресетирај, ако избраната адреса е изменета по зачувување"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Резервирана количина за подизведувач: Количина на суровини за да се направат супструктивни производи.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Резервирана количина за подизведувач: Количина на суровини за да се направат супструктивни производи.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Ставка Варијанта {0} веќе постои со истите атрибути
 DocType: Item,Hub Publishing Details,Детали за објавување на центар
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Отворање&#39;
diff --git a/erpnext/translations/ml.csv b/erpnext/translations/ml.csv
index 33db47f..495dca4 100644
--- a/erpnext/translations/ml.csv
+++ b/erpnext/translations/ml.csv
@@ -1544,7 +1544,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","റിസർവ്വ് ചെയ്ത ക്യൂട്ടി: അളവ് വിൽപ്പനയ്ക്ക് ഓർഡർ ചെയ്തു, പക്ഷേ വിതരണം ചെയ്തിട്ടില്ല."
 DocType: Drug Prescription,Interval UOM,ഇടവേള UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","തിരഞ്ഞെടുത്തതിനുശേഷം തിരഞ്ഞെടുത്ത വിലാസം എഡിറ്റുചെയ്തിട്ടുണ്ടെങ്കിൽ, തിരഞ്ഞെടുപ്പ് മാറ്റുക"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,സബ് കോൺ‌ട്രാക്റ്റിനായി റിസർവ്വ് ചെയ്‌ത ക്യൂട്ടി: സബ്‌കോട്രാക്റ്റ് ഇനങ്ങൾ‌ നിർമ്മിക്കുന്നതിനുള്ള അസംസ്കൃത വസ്തുക്കളുടെ അളവ്.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,സബ് കോൺ‌ട്രാക്റ്റിനായി റിസർവ്വ് ചെയ്‌ത ക്യൂട്ടി: സബ്‌കോട്രാക്റ്റ് ഇനങ്ങൾ‌ നിർമ്മിക്കുന്നതിനുള്ള അസംസ്കൃത വസ്തുക്കളുടെ അളവ്.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,ഇനം വേരിയന്റ് {0} ഇതിനകം അതേ ആട്രിബ്യൂട്ടുകളുമുള്ള നിലവിലുണ്ട്
 DocType: Item,Hub Publishing Details,ഹബ് പബ്ലിഷിംഗ് വിശദാംശങ്ങൾ
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;തുറക്കുന്നു&#39;
diff --git a/erpnext/translations/mr.csv b/erpnext/translations/mr.csv
index 36df911..8ad9738 100644
--- a/erpnext/translations/mr.csv
+++ b/erpnext/translations/mr.csv
@@ -1557,7 +1557,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","आरक्षित मात्रा: विक्रीचे आदेश दिले, पण दिले नाहीत."
 DocType: Drug Prescription,Interval UOM,मध्यांतर UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","निवड रद्द केलेला पत्ता जतन केल्यानंतर संपादित केले असल्यास, निवड रद्द करा"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,सब कॉन्ट्रॅक्टसाठी राखीव क्वाटीटी: सबकोट्रेक्ट केलेल्या वस्तू तयार करण्यासाठी कच्च्या मालाचे प्रमाण.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,सब कॉन्ट्रॅक्टसाठी राखीव क्वाटीटी: सबकोट्रेक्ट केलेल्या वस्तू तयार करण्यासाठी कच्च्या मालाचे प्रमाण.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,आयटम व्हेरियंट {0} आधीच समान गुणधर्म अस्तित्वात आहे
 DocType: Item,Hub Publishing Details,हब प्रकाशन तपशील
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;उघडणे&#39;
diff --git a/erpnext/translations/ms.csv b/erpnext/translations/ms.csv
index 0db0aa9..e69a6aa3 100644
--- a/erpnext/translations/ms.csv
+++ b/erpnext/translations/ms.csv
@@ -1576,7 +1576,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Dicadangkan Qty: Kuantiti yang dipesan untuk dijual, tetapi tidak dihantar."
 DocType: Drug Prescription,Interval UOM,Selang UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Pilih semula, jika alamat yang dipilih disunting selepas menyimpan"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Dicadangkan Qty untuk Subkontrak: Kuantiti bahan mentah untuk membuat item subcotracted.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Dicadangkan Qty untuk Subkontrak: Kuantiti bahan mentah untuk membuat item subcontracted.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Perkara Variant {0} telah wujud dengan sifat-sifat yang sama
 DocType: Item,Hub Publishing Details,Butiran Penerbitan Hab
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Pembukaan&#39;
diff --git a/erpnext/translations/my.csv b/erpnext/translations/my.csv
index 1b4f97e..cdb2a5e 100644
--- a/erpnext/translations/my.csv
+++ b/erpnext/translations/my.csv
@@ -1576,7 +1576,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",ချုပ်ထိန်းထားသည်အရည်အတွက်: QUANTITY ရောင်းရန်အမိန့်ထုတ်ပေမယ့်လက်သို့အပ်ဘူး။
 DocType: Drug Prescription,Interval UOM,ကြားကာလ UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Reselect, ရွေးကောက်တော်မူသောလိပ်စာမှတပါးပြီးနောက် edited လျှင်"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Subcontract အဘို့အချုပ်ထိန်းထားသည်အရည်အတွက်: subcotracted ပစ္စည်းများလုပ်ကုန်ကြမ်းအရေအတွက်။
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Subcontract အဘို့အချုပ်ထိန်းထားသည်အရည်အတွက်: subcontracted ပစ္စည်းများလုပ်ကုန်ကြမ်းအရေအတွက်။
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,item Variant {0} ပြီးသားအတူတူ Attribute တွေနှင့်အတူတည်ရှိမှု့
 DocType: Item,Hub Publishing Details,hub ထုတ်ဝေရေးအသေးစိတ်
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;&#39; ဖွင့်ပွဲ &#39;&#39;
diff --git a/erpnext/translations/nl.csv b/erpnext/translations/nl.csv
index c14507c..0f62213 100644
--- a/erpnext/translations/nl.csv
+++ b/erpnext/translations/nl.csv
@@ -1591,7 +1591,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Gereserveerde Hoeveelheid: Aantal toegewezen aan verkoop, maar nog niet geleverd."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Selecteer opnieuw, als het gekozen adres is bewerkt na opslaan"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Gereserveerde hoeveelheid voor onderaanneming: hoeveelheid grondstoffen voor het maken van artikelen die zijn ondergetrokken.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Gereserveerde hoeveelheid voor onderaanneming: hoeveelheid grondstoffen voor het maken van artikelen die zijn ondergetrokken.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Artikel Variant {0} bestaat al met dezelfde kenmerken
 DocType: Item,Hub Publishing Details,Hub publicatie details
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Opening&#39;
diff --git a/erpnext/translations/no.csv b/erpnext/translations/no.csv
index 0995304..89c4dc1 100644
--- a/erpnext/translations/no.csv
+++ b/erpnext/translations/no.csv
@@ -1576,7 +1576,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reservert antall: Antall bestilt for salg, men ikke levert."
 DocType: Drug Prescription,Interval UOM,Intervall UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",Velg hvis den valgte adressen redigeres etter lagre
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Reservert antall for underleveranser: Råvaremengde for å lage underleverandørvarer.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Reservert antall for underleveranser: Råvaremengde for å lage underleverandørvarer.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Sak Variant {0} finnes allerede med samme attributtene
 DocType: Item,Hub Publishing Details,Hub Publishing Detaljer
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Opening&quot;
diff --git a/erpnext/translations/pl.csv b/erpnext/translations/pl.csv
index 97dc1fb..4eff151 100644
--- a/erpnext/translations/pl.csv
+++ b/erpnext/translations/pl.csv
@@ -1595,7 +1595,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",
 DocType: Drug Prescription,Interval UOM,Interwał UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Ponownie wybierz, jeśli wybrany adres jest edytowany po zapisaniu"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Zarezerwowana ilość na zlecenie podwykonawstwa: ilość surowców do produkcji artykułów objętych subkontraktami.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Zarezerwowana ilość na zlecenie podwykonawstwa: ilość surowców do produkcji artykułów objętych subkontraktami.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Pozycja Wersja {0} istnieje już z samymi atrybutami
 DocType: Item,Hub Publishing Details,Szczegóły publikacji wydawnictwa Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Otwarcie&quot;
diff --git a/erpnext/translations/ps.csv b/erpnext/translations/ps.csv
index 5b0bc31..faeaed9 100644
--- a/erpnext/translations/ps.csv
+++ b/erpnext/translations/ps.csv
@@ -1550,7 +1550,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",خوندي مقدار: مقدار د پلور لپاره امر کړی ، مګر تحویلی شوی نه دی.
 DocType: Drug Prescription,Interval UOM,د UOM منځګړیتوب
 DocType: Customer,"Reselect, if the chosen address is edited after save",بې ځایه کړئ، که چیرې غوره شوي پتې د خوندي کولو وروسته سمبال شي
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,د فرعي تړون لپاره خوندي مقدار: د فرعي محصولاتو جوړولو لپاره د خامو موادو مقدار.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,د فرعي تړون لپاره خوندي مقدار: د فرعي محصولاتو جوړولو لپاره د خامو موادو مقدار.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,د قالب variant {0} لا د همدې صفتونو شتون لري
 DocType: Item,Hub Publishing Details,د هوب د خپرولو توضیحات
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;پرانیستل&#39;
diff --git a/erpnext/translations/pt.csv b/erpnext/translations/pt.csv
index afb38be..60c6f95 100644
--- a/erpnext/translations/pt.csv
+++ b/erpnext/translations/pt.csv
@@ -1589,7 +1589,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Gereserveerd Aantal : Aantal besteld te koop , maar niet geleverd ."
 DocType: Drug Prescription,Interval UOM,UOM Intervalo
 DocType: Customer,"Reselect, if the chosen address is edited after save","Reseleccione, se o endereço escolhido for editado após salvar"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qtd reservada para subcontratação: quantidade de matérias-primas para fazer itens subcotados.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qtd reservada para subcontratação: quantidade de matérias-primas para fazer itens subcotados.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,A Variante do Item {0} já existe com mesmos atributos
 DocType: Item,Hub Publishing Details,Detalhes da publicação do hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Abertura'
diff --git a/erpnext/translations/ro.csv b/erpnext/translations/ro.csv
index bfa5f57..1678cba 100644
--- a/erpnext/translations/ro.csv
+++ b/erpnext/translations/ro.csv
@@ -1594,7 +1594,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Rezervate Cantitate: Cantitatea comandat de vânzare, dar nu livrat."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",Resetați dacă adresa editată este editată după salvare
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Cantitate rezervată pentru subcontract: cantitate de materii prime pentru a face obiecte subcontractate.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Cantitate rezervată pentru subcontract: cantitate de materii prime pentru a face obiecte subcontractate.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Postul Varianta {0} există deja cu aceleași atribute
 DocType: Item,Hub Publishing Details,Detalii privind publicarea Hubului
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Deschiderea&quot;
diff --git a/erpnext/translations/ru.csv b/erpnext/translations/ru.csv
index 3d40fa5..d9f4340 100644
--- a/erpnext/translations/ru.csv
+++ b/erpnext/translations/ru.csv
@@ -1594,7 +1594,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Защищены Кол-во: Количество приказал на продажу, но не поставлены."
 DocType: Drug Prescription,Interval UOM,Интервал UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Повторно выберите, если выбранный адрес отредактирован после сохранения"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Зарезервированное кол-во для субконтракта: количество сырья для изготовления субподрядных изделий.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Зарезервированное кол-во для субконтракта: количество сырья для изготовления субподрядных изделий.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Модификация продукта {0} с этими атрибутами уже существует
 DocType: Item,Hub Publishing Details,Сведения о публикации концентратора
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',«Открывается»
diff --git a/erpnext/translations/si.csv b/erpnext/translations/si.csv
index 25da9a8..1ff3715 100644
--- a/erpnext/translations/si.csv
+++ b/erpnext/translations/si.csv
@@ -1546,7 +1546,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",වෙන් කර ඇති Qty: ප්‍රමාණය විකිණීමට ඇණවුම් කළ නමුත් ලබා නොදේ.
 DocType: Drug Prescription,Interval UOM,UOM හි වේගය
 DocType: Customer,"Reselect, if the chosen address is edited after save","තෝරාගත් පසු, තෝරාගත් ලිපිනය සුරැකීමෙන් අනතුරුව සංස්කරණය කරනු ලැබේ"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,උප කොන්ත්‍රාත්තු සඳහා වෙන් කර ඇති Qty: උප කොන්ත්‍රාත් අයිතම සෑදීම සඳහා අමුද්‍රව්‍ය ප්‍රමාණය.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,උප කොන්ත්‍රාත්තු සඳහා වෙන් කර ඇති Qty: උප කොන්ත්‍රාත් අයිතම සෑදීම සඳහා අමුද්‍රව්‍ය ප්‍රමාණය.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,අයිතමය ප්රභේද්යයක් {0} දැනටමත් එම ලක්ෂණ සහිත පවතී
 DocType: Item,Hub Publishing Details,තොරතුරු මධ්යස්ථානය තොරතුරු විස්තර
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;විවෘත&#39;
diff --git a/erpnext/translations/sk.csv b/erpnext/translations/sk.csv
index cb6990b..6c26ccc 100644
--- a/erpnext/translations/sk.csv
+++ b/erpnext/translations/sk.csv
@@ -1592,7 +1592,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserved Množství: Množství objednal k prodeji, ale není doručena."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Znovu zvoľte, ak je zvolená adresa upravená po uložení"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Vyhradené množstvo pre subdodávky: Množstvo surovín na výrobu subdodávateľských položiek.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Vyhradené množstvo pre subdodávky: Množstvo surovín na výrobu subdodávateľských položiek.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Variant Položky {0} už existuje s rovnakými vlastnosťami
 DocType: Item,Hub Publishing Details,Podrobnosti o publikovaní Hubu
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',"""Otváranie"""
diff --git a/erpnext/translations/sl.csv b/erpnext/translations/sl.csv
index 9bfbe13..25389d3 100644
--- a/erpnext/translations/sl.csv
+++ b/erpnext/translations/sl.csv
@@ -1575,7 +1575,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Količina rezervirana: Količina, naročena za prodajo, vendar ni dobavljena."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Ponovno izberite, če je izbrani naslov urejen po shranjevanju"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Količina za naročila podizvajalcev: Količina surovin za izdelavo odvzetih predmetov.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Količina za naročila podizvajalcev: Količina surovin za izdelavo odvzetih predmetov.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Postavka Variant {0} že obstaja z enakimi atributi
 DocType: Item,Hub Publishing Details,Podrobnosti o objavi vozlišča
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Odpiranje&quot;
diff --git a/erpnext/translations/sq.csv b/erpnext/translations/sq.csv
index ee7b96e..b9e5278 100644
--- a/erpnext/translations/sq.csv
+++ b/erpnext/translations/sq.csv
@@ -1556,7 +1556,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Sasia e rezervuar: Sasia e porositur për shitje, por nuk dorëzohet."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Reselect, nëse adresa e zgjedhur është redaktuar pas ruajtjes"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Sasia e rezervuar për nënkontrakt: Sasia e lëndëve të para për të bërë sende nënkontraktuese.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Sasia e rezervuar për nënkontrakt: Sasia e lëndëve të para për të bërë sende nënkontraktuese.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Item Varianti {0} tashmë ekziston me atributet e njëjta
 DocType: Item,Hub Publishing Details,Detajet e botimit të Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Hapja&quot;
diff --git a/erpnext/translations/sr.csv b/erpnext/translations/sr.csv
index bd2ca7d..56d5637 100644
--- a/erpnext/translations/sr.csv
+++ b/erpnext/translations/sr.csv
@@ -1593,7 +1593,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Резервисано Кол : Количина наредио за продају , али не испоручује ."
 DocType: Drug Prescription,Interval UOM,Интервал УОМ
 DocType: Customer,"Reselect, if the chosen address is edited after save","Поново изабери, ако је одабрана адреса уређена након чувања"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Количина резервисаног за подуговор: Количине сировина за израду предмета за подухват.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Количина резервисаног за подуговор: Количине сировина за израду предмета за подухват.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Тачка Варијанта {0} већ постоји са истим атрибутима
 DocType: Item,Hub Publishing Details,Детаљи издавања станице
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Отварање&#39;
diff --git a/erpnext/translations/sv.csv b/erpnext/translations/sv.csv
index 8d81f25..f32f72e 100644
--- a/erpnext/translations/sv.csv
+++ b/erpnext/translations/sv.csv
@@ -1573,7 +1573,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Reserverad antal: Antal som beställts för försäljning, men inte levererat."
 DocType: Drug Prescription,Interval UOM,Intervall UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",Återmarkera om den valda adressen redigeras efter spara
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Reserverad kvantitet för underleverantör: Råvarukvantitet för att tillverka underleverantörer.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Reserverad kvantitet för underleverantör: Råvarukvantitet för att tillverka underleverantörer.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Punkt Variant {0} finns redan med samma attribut
 DocType: Item,Hub Publishing Details,Hub Publishing Detaljer
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Öppna&quot;
diff --git a/erpnext/translations/sw.csv b/erpnext/translations/sw.csv
index cfe805f..9641dfc 100644
--- a/erpnext/translations/sw.csv
+++ b/erpnext/translations/sw.csv
@@ -1560,7 +1560,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Qty iliyohifadhiwa: Wingi imeamuru kuuzwa, lakini haijafikishwa."
 DocType: Drug Prescription,Interval UOM,Muda wa UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Pitia tena, ikiwa anwani iliyochaguliwa imebadilishwa baada ya kuokoa"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qty iliyohifadhiwa kwa Subcontract: Wingi wa malighafi kutengeneza vitu visivyotengwa.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qty iliyohifadhiwa kwa Subcontract: Wingi wa malighafi kutengeneza vitu visivyotengwa.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Tofauti ya kipengee {0} tayari ipo na sifa sawa
 DocType: Item,Hub Publishing Details,Maelezo ya Uchapishaji wa Hub
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Kufungua&#39;
diff --git a/erpnext/translations/ta.csv b/erpnext/translations/ta.csv
index 34c430a..bde61f1 100644
--- a/erpnext/translations/ta.csv
+++ b/erpnext/translations/ta.csv
@@ -1565,7 +1565,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","பாதுகாக்கப்பட்டவை அளவு: அளவு விற்பனை உத்தரவிட்டார் , ஆனால் கொடுத்தது இல்லை ."
 DocType: Drug Prescription,Interval UOM,இடைவெளி UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","தேர்ந்தெடுக்கப்பட்ட முகவரி சேமிக்கப்பட்ட பிறகு திருத்தப்பட்டால், தேர்வுநீக்கம் செய்யவும்"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,துணை ஒப்பந்தத்திற்கான ஒதுக்கப்பட்ட Qty: துணை ஒப்பந்தம் செய்யப்பட்ட பொருட்களை உருவாக்க மூலப்பொருட்களின் அளவு.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,துணை ஒப்பந்தத்திற்கான ஒதுக்கப்பட்ட Qty: துணை ஒப்பந்தம் செய்யப்பட்ட பொருட்களை உருவாக்க மூலப்பொருட்களின் அளவு.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,பொருள் மாற்று {0} ஏற்கனவே அதே பண்புகளை கொண்ட உள்ளது
 DocType: Item,Hub Publishing Details,ஹப் பப்ளிஷிங் விவரங்கள்
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;திறந்து&#39;
diff --git a/erpnext/translations/te.csv b/erpnext/translations/te.csv
index b0a8ade..14b40bf 100644
--- a/erpnext/translations/te.csv
+++ b/erpnext/translations/te.csv
@@ -1545,7 +1545,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","రిజర్వు చేయబడిన Qty: పరిమాణం అమ్మకానికి ఆర్డర్ చేయబడింది, కానీ పంపిణీ చేయబడలేదు."
 DocType: Drug Prescription,Interval UOM,విరామం UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","ఎంపిక చేసిన చిరునామా సేవ్ అయిన తర్వాత సవరించబడితే, ఎంపికను తీసివేయండి"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,సబ్ కాంట్రాక్ట్ కోసం రిజర్వు చేయబడిన క్యూటి: సబ్‌కట్రాక్టెడ్ వస్తువులను తయారు చేయడానికి ముడి పదార్థాల పరిమాణం.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,సబ్ కాంట్రాక్ట్ కోసం రిజర్వు చేయబడిన క్యూటి: సబ్‌కట్రాక్టెడ్ వస్తువులను తయారు చేయడానికి ముడి పదార్థాల పరిమాణం.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,అంశం వేరియంట్ {0} ఇప్పటికే అదే గుణ ఉంది
 DocType: Item,Hub Publishing Details,హబ్ ప్రచురణ వివరాలు
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;ప్రారంభిస్తున్నాడు&#39;
diff --git a/erpnext/translations/th.csv b/erpnext/translations/th.csv
index 3b32053..ec2e77d 100644
--- a/erpnext/translations/th.csv
+++ b/erpnext/translations/th.csv
@@ -1595,7 +1595,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",ลิขสิทธิ์ จำนวน: จำนวน ที่สั่งซื้อ สำหรับการขาย แต่ ไม่ได้ส่ง
 DocType: Drug Prescription,Interval UOM,ช่วง UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",เลือกใหม่ถ้าที่อยู่ที่เลือกถูกแก้ไขหลังจากบันทึกแล้ว
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,ปริมาณที่สงวนไว้สำหรับการรับเหมาช่วง: ปริมาณวัตถุดิบเพื่อทำรายการย่อย
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,ปริมาณที่สงวนไว้สำหรับการรับเหมาช่วง: ปริมาณวัตถุดิบเพื่อทำรายการย่อย
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,รายการตัวแปร {0} อยู่แล้วที่มีลักษณะเดียวกัน
 DocType: Item,Hub Publishing Details,รายละเอียด Hub Publishing
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','กำลังเปิด'
diff --git a/erpnext/translations/tr.csv b/erpnext/translations/tr.csv
index 7a5cc76..a35f38c 100644
--- a/erpnext/translations/tr.csv
+++ b/erpnext/translations/tr.csv
@@ -1724,7 +1724,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Ayrılan Miktar: Satış için sipariş edilen, ancak teslim edilmeyen miktar."
 DocType: Drug Prescription,Interval UOM,Aralık UOM&#39;sı
 DocType: Customer,"Reselect, if the chosen address is edited after save",Seçilen adres kaydedildikten sonra değiştirilirse yeniden seç
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Ayrılmış Taşeron Miktarı: Taşeron ürün yapmak için hammadde miktarı.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Ayrılmış Taşeron Miktarı: Taşeron ürün yapmak için hammadde miktarı.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Öğe Variant {0} zaten aynı özelliklere sahip bulunmaktadır
 DocType: Item,Hub Publishing Details,Hub Yayınlama Ayrıntıları
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&#39;Açılış&#39;
diff --git a/erpnext/translations/uk.csv b/erpnext/translations/uk.csv
index 7e1eb60..d7f415f 100644
--- a/erpnext/translations/uk.csv
+++ b/erpnext/translations/uk.csv
@@ -1574,7 +1574,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Кількість зарезервованих: кількість замовлена на продаж, але не доставлена."
 DocType: Drug Prescription,Interval UOM,Інтервал УОМ
 DocType: Customer,"Reselect, if the chosen address is edited after save","Змініть вибір, якщо обрана адреса буде відредагована після збереження"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,"Кількість зарезервованих для субпідряду: кількість сировини для виготовлення предметів, що віднімаються на підряд."
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,"Кількість зарезервованих для субпідряду: кількість сировини для виготовлення предметів, що віднімаються на підряд."
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Вже існує варіант позиції {0} з такими атрибутами
 DocType: Item,Hub Publishing Details,Публікація концентратора
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',"""Відкривається"""
diff --git a/erpnext/translations/ur.csv b/erpnext/translations/ur.csv
index 5187789..208fa87 100644
--- a/erpnext/translations/ur.csv
+++ b/erpnext/translations/ur.csv
@@ -1548,7 +1548,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",محفوظ مقدار: مقدار فروخت کے لئے آرڈر کی گئی ، لیکن فراہم نہیں کی گئی۔
 DocType: Drug Prescription,Interval UOM,انٹرا UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",منتخب کرنے کے بعد، منتخب کردہ ایڈریس کو بچانے کے بعد میں ترمیم کیا جاتا ہے
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,ذیلی معاہدے کے لئے محفوظ مقدار: سب کوٹریکٹ اشیاء بنانے کے لئے خام مال کی مقدار۔
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,ذیلی معاہدے کے لئے محفوظ مقدار: سب کوٹریکٹ اشیاء بنانے کے لئے خام مال کی مقدار۔
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,آئٹم مختلف {0} پہلے ہی صفات کے ساتھ موجود
 DocType: Item,Hub Publishing Details,ہب پبلشنگ کی تفصیلات
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',افتتاحی'
diff --git a/erpnext/translations/uz.csv b/erpnext/translations/uz.csv
index bee2f95..e3b0b63 100644
--- a/erpnext/translations/uz.csv
+++ b/erpnext/translations/uz.csv
@@ -1558,7 +1558,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Savdo zahirasi: Sotish uchun buyurtma berilgan, ammo etkazib berilmagan."
 DocType: Drug Prescription,Interval UOM,Intervalli UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Tanlangan manzil saqlashdan so&#39;ng tahrirlangan taqdirda, qayta belgilanadi"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Subtrudrat uchun ajratilgan Qty: subkartralangan buyumlarni tayyorlash uchun xom ashyo miqdori.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Subtrudrat uchun ajratilgan Qty: subkartralangan buyumlarni tayyorlash uchun xom ashyo miqdori.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Mavzu Variant {0} allaqachon bir xil atributlarga ega
 DocType: Item,Hub Publishing Details,Hub nashriyot tafsilotlari
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',&quot;Ochilish&quot;
diff --git a/erpnext/translations/vi.csv b/erpnext/translations/vi.csv
index ccaa0de..b6eb3d6 100644
--- a/erpnext/translations/vi.csv
+++ b/erpnext/translations/vi.csv
@@ -1575,7 +1575,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.","Dành Số lượng: Số lượng đặt hàng để bán, nhưng không chuyển giao."
 DocType: Drug Prescription,Interval UOM,Interval UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save","Chọn lại, nếu địa chỉ đã chọn được chỉnh sửa sau khi lưu"
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,Qty dành riêng cho hợp đồng thầu phụ: Số lượng nguyên liệu thô để làm các mặt hàng được thu nhỏ.
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,Qty dành riêng cho hợp đồng thầu phụ: Số lượng nguyên liệu thô để làm các mặt hàng được thu nhỏ.
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,Biến thể mẫu hàng {0} đã tồn tại với cùng một thuộc tính
 DocType: Item,Hub Publishing Details,Chi tiết Xuất bản Trung tâm
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening','Đang mở'
diff --git a/erpnext/translations/zh.csv b/erpnext/translations/zh.csv
index 93c5e2d..1c7985f 100644
--- a/erpnext/translations/zh.csv
+++ b/erpnext/translations/zh.csv
@@ -1585,7 +1585,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",版权所有数量:订购数量出售,但未交付。
 DocType: Drug Prescription,Interval UOM,间隔UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",重新选择,如果所选地址在保存后被编辑
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,分包合同的保留数量:制作分项目的原材料数量。
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,分包合同的保留数量:制作分项目的原材料数量。
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,项目变体{0}已经具有相同属性的存在
 DocType: Item,Hub Publishing Details,集线器发布细节
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',“打开”
diff --git a/erpnext/translations/zh_tw.csv b/erpnext/translations/zh_tw.csv
index 7fb0b22..7f83dfb 100644
--- a/erpnext/translations/zh_tw.csv
+++ b/erpnext/translations/zh_tw.csv
@@ -1450,7 +1450,7 @@
 apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,"Reserved Qty: Quantity ordered for sale, but not delivered.",保留數量:訂購數量待出售,但尚未交付。
 DocType: Drug Prescription,Interval UOM,間隔UOM
 DocType: Customer,"Reselect, if the chosen address is edited after save",重新選擇,如果所選地址在保存後被編輯
-apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcotracted items.,分包合同的保留數量:製作分項目的原材料數量。
+apps/erpnext/erpnext/manufacturing/doctype/production_plan/production_plan.js,Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items.,分包合同的保留數量:製作分項目的原材料數量。
 apps/erpnext/erpnext/stock/doctype/item/item.js,Item Variant {0} already exists with same attributes,項目變種{0}已經具有相同屬性的存在
 DocType: Item,Hub Publishing Details,Hub發布細節
 apps/erpnext/erpnext/stock/report/stock_ledger/stock_ledger.py,'Opening',“開放”