Merge pull request #12914 from achillesrasquinha/company-logo

Added Company Logo to DocType
diff --git a/.gitignore b/.gitignore
index 0d39ab2..d641ced 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,6 @@
 *.egg-info
 dist/
 erpnext/docs/current
+*.swp
+*.swo
+*~
diff --git a/.swp b/.swp
deleted file mode 100644
index 5a492bd..0000000
--- a/.swp
+++ /dev/null
Binary files differ
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 32f1e01..6c8d7c8 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
 from erpnext.hooks import regional_overrides
 from frappe.utils import getdate
 
-__version__ = '10.0.21'
+__version__ = '10.0.22'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index de0b6f5..26cc598 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -8,6 +8,10 @@
 	setup: function(doc) {
 		this.setup_posting_date_time_check();
 		this._super(doc);
+
+		// formatter for material request item
+		this.frm.set_indicator_formatter('item_code',
+			function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
 	},
 	onload: function() {
 		this._super();
@@ -20,10 +24,6 @@
 		} else {
 			this.frm.set_value("disable_rounded_total", cint(frappe.sys_defaults.disable_rounded_total));
 		}
-
-		// formatter for material request item
-		this.frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
 	},
 
 	refresh: function(doc) {
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 65bd07e..29beda0 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -410,6 +410,21 @@
 			group by pref.reference_name""", party_type, as_dict=1):
 			pdc_details.setdefault(pdc.invoice_no, pdc)
 
+	for pdc in frappe.db.sql("""
+		select
+			jea.reference_name as invoice_no, jea.party, jea.party_type,
+			max(je.cheque_date) as pdc_date, sum(ifnull(je.total_amount,0)) as pdc_amount,
+			GROUP_CONCAT(je.cheque_no SEPARATOR ', ') as pdc_ref
+		from
+			`tabJournal Entry` as je inner join `tabJournal Entry Account` as jea
+		on
+			(jea.parent = je.name)
+		where
+			je.docstatus = 0 and je.cheque_date > je.posting_date
+			and jea.party_type = %s
+			group by jea.reference_name""", party_type, as_dict=1):
+			pdc_details.setdefault(pdc.invoice_no, pdc)
+
 	return pdc_details
 
 def get_dn_details(party_type):
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 51cec69..d500081 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -12,7 +12,7 @@
 			'Purchase Invoice': 'Invoice',
 			'Stock Entry': 'Material to Supplier'
 		}
-		
+
 		frm.set_query("reserve_warehouse", "supplied_items", function() {
 			return {
 				filters: {
@@ -21,6 +21,9 @@
 				}
 			}
 		});
+
+		frm.set_indicator_formatter('item_code',
+			function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
 	},
 
 	onload: function(frm) {
@@ -34,9 +37,6 @@
 			frm.toggle_display('get_last_purchase_rate',
 				frm.doc.__onload.disable_fetch_last_purchase_rate);
 		}
-
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.qty<=doc.received_qty) ? "green" : "orange" })
 	},
 });
 
diff --git a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
index a3a1414..e7a704a 100644
--- a/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
+++ b/erpnext/buying/doctype/supplier_scorecard/supplier_scorecard.js
@@ -4,14 +4,14 @@
 /* global frappe, refresh_field */
 
 frappe.ui.form.on("Supplier Scorecard", {
-
-	onload: function(frm) {
-
+	setup: function(frm) {
 		if (frm.doc.indicator_color !== "")	{
 			frm.set_indicator_formatter("status", function(doc) {
 				return doc.indicator_color.toLowerCase();
 			});
 		}
+	},
+	onload: function(frm) {
 		if (frm.doc.__unsaved == 1)	{
 			loadAllCriteria(frm);
 			loadAllStandings(frm);
diff --git a/erpnext/config/education.py b/erpnext/config/education.py
index 08846a2..e4e77f3 100644
--- a/erpnext/config/education.py
+++ b/erpnext/config/education.py
@@ -21,18 +21,7 @@
 				{
 					"type": "doctype",
 					"name": "Student Group"
-				},
-				{
-					"type": "doctype",
-					"name": "Student Group Creation Tool"
-				},
-				{
-					"type": "report",
-					"is_query_report": True,
-					"name": "Student and Guardian Contact Details",
-					"doctype": "Program Enrollment"
 				}
-
 			]
 		},
 		{
@@ -50,10 +39,6 @@
 				{
 					"type": "doctype",
 					"name": "Program Enrollment"
-				},
-				{
-					"type": "doctype",
-					"name": "Program Enrollment Tool"
 				}
 			]
 		},
@@ -69,10 +54,6 @@
 					"name": "Student Leave Application"
 				},
 				{
-					"type": "doctype",
-					"name": "Student Attendance Tool"
-				},
-				{
 					"type": "report",
 					"is_query_report": True,
 					"name": "Absent Student Report",
@@ -84,21 +65,26 @@
 					"name": "Student Batch-Wise Attendance",
 					"doctype": "Student Attendance"
 				},
-				{
-					"type": "report",
-					"is_query_report": True,
-					"name": "Student Monthly Attendance Sheet",
-					"doctype": "Student Attendance"
-				}
 			]
 		},
 		{
-			"label": _("Schedule"),
+			"label": _("Tools"),
 			"items": [
 				{
 					"type": "doctype",
-					"name": "Course Schedule",
-					"route": "List/Course Schedule/Calendar"
+					"name": "Student Attendance Tool"
+				},
+				{
+					"type": "doctype",
+					"name": "Assessment Result Tool"
+				},
+				{
+					"type": "doctype",
+					"name": "Student Group Creation Tool"
+				},
+				{
+					"type": "doctype",
+					"name": "Program Enrollment Tool"
 				},
 				{
 					"type": "doctype",
@@ -125,15 +111,12 @@
 				{
 					"type": "doctype",
 					"name": "Assessment Criteria"
-				},
-				{
-					"type": "doctype",
-					"name": "Assessment Criteria Group"
-				},
-				{
-					"type": "doctype",
-					"name": "Assessment Result Tool"
-				},
+				}
+			]
+		},
+		{
+			"label": _("Assessment Reports"),
+			"items": [
 				{
 					"type": "report",
 					"is_query_report": True,
@@ -143,10 +126,15 @@
 				{
 					"type": "report",
 					"is_query_report": True,
+					"name": "Final Assessment Grades",
+					"doctype": "Assessment Result"
+				},
+				{
+					"type": "report",
+					"is_query_report": True,
 					"name": "Assessment Plan Status",
 					"doctype": "Assessment Plan"
 				},
-
 			]
 		},
 		{
@@ -167,17 +155,25 @@
 				{
 					"type": "doctype",
 					"name": "Fee Category"
-				},
-				{
-					"type": "report",
-					"name": "Student Fee Collection",
-					"doctype": "Fees",
-					"is_query_report": True
 				}
 			]
 		},
 		{
-			"label": _("Setup"),
+			"label": _("Schedule"),
+			"items": [
+				{
+					"type": "doctype",
+					"name": "Course Schedule",
+					"route": "List/Course Schedule/Calendar"
+				},
+				{
+					"type": "doctype",
+					"name": "Course Scheduling Tool"
+				}
+			]
+		},
+		{
+			"label": _("Masters"),
 			"items": [
 				{
 					"type": "doctype",
@@ -194,7 +190,12 @@
 				{
 					"type": "doctype",
 					"name": "Room"
-				},
+				}
+			]
+		},
+		{
+			"label": _("Setup"),
+			"items": [
 				{
 					"type": "doctype",
 					"name": "Student Category"
@@ -221,4 +222,27 @@
 				}
 			]
 		},
+		{
+			"label": _("Other Reports"),
+			"items": [
+				{
+					"type": "report",
+					"is_query_report": True,
+					"name": "Student and Guardian Contact Details",
+					"doctype": "Program Enrollment"
+				},
+				{
+					"type": "report",
+					"is_query_report": True,
+					"name": "Student Monthly Attendance Sheet",
+					"doctype": "Student Attendance"
+				},
+				{
+					"type": "report",
+					"name": "Student Fee Collection",
+					"doctype": "Fees",
+					"is_query_report": True
+				}
+			]
+		}
 	]
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index a64e76f..6b18b82 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -150,13 +150,16 @@
 		if not frappe.db.get_single_value("Selling Settings", "validate_selling_price"):
 			return
 
+		if hasattr(self, "is_return") and self.is_return:
+			return
+
 		for it in self.get("items"):
 			if not it.item_code:
 				continue
 
 			last_purchase_rate, is_stock_item = frappe.db.get_value("Item", it.item_code, ["last_purchase_rate", "is_stock_item"])
 			last_purchase_rate_in_sales_uom = last_purchase_rate / (it.conversion_factor or 1)
-			if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom) and not self.is_return:
+			if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom):
 				throw_message(it.item_name, last_purchase_rate_in_sales_uom, "last purchase rate")
 
 			last_valuation_rate = frappe.db.sql("""
@@ -166,7 +169,7 @@
 				""", (it.item_code, it.warehouse))
 			if last_valuation_rate:
 				last_valuation_rate_in_sales_uom = last_valuation_rate[0][0] / (it.conversion_factor or 1)
-				if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom) and not self.is_return:
+				if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom):
 					throw_message(it.name, last_valuation_rate_in_sales_uom, "valuation rate")
 
 
diff --git a/erpnext/demo/data/drug_list.json b/erpnext/demo/data/drug_list.json
index 51b029c..f34ca57 100644
--- a/erpnext/demo/data/drug_list.json
+++ b/erpnext/demo/data/drug_list.json
@@ -65,7 +65,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -151,7 +150,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -237,7 +235,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -323,7 +320,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -409,7 +405,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -495,7 +490,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -581,7 +575,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -667,7 +660,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -753,7 +745,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -839,7 +830,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -925,7 +915,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1011,7 +1000,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1097,7 +1085,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1183,7 +1170,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1269,7 +1255,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1355,7 +1340,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1441,7 +1425,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1527,7 +1510,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1613,7 +1595,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1699,7 +1680,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1785,7 +1765,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1871,7 +1850,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -1957,7 +1935,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2043,7 +2020,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2129,7 +2105,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2215,7 +2190,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2301,7 +2275,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2387,7 +2360,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2473,7 +2445,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2559,7 +2530,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2645,7 +2615,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2731,7 +2700,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2817,7 +2785,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2903,7 +2870,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -2989,7 +2955,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3075,7 +3040,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3161,7 +3125,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3247,7 +3210,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3333,7 +3295,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3419,7 +3380,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3505,7 +3465,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3591,7 +3550,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3677,7 +3635,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3763,7 +3720,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3849,7 +3805,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -3935,7 +3890,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4021,7 +3975,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4107,7 +4060,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4193,7 +4145,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4279,7 +4230,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4365,7 +4315,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4451,7 +4400,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4537,7 +4485,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4623,7 +4570,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4709,7 +4655,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4795,7 +4740,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4881,7 +4825,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -4967,7 +4910,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -5053,7 +4995,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -5139,7 +5080,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -5225,7 +5165,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -5311,7 +5250,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
@@ -5397,7 +5335,6 @@
   "taxes": [],
   "thumbnail": null,
   "tolerance": 0.0,
-  "total_projected_qty": 0.0,
   "uoms": [
    {
     "conversion_factor": 1.0,
diff --git a/erpnext/docs/user/manual/en/accounts/journal-entry.md b/erpnext/docs/user/manual/en/accounts/journal-entry.md
index 8c9ee4a..c967b34 100644
--- a/erpnext/docs/user/manual/en/accounts/journal-entry.md
+++ b/erpnext/docs/user/manual/en/accounts/journal-entry.md
@@ -7,7 +7,7 @@
 
 To create a Journal Entry go to:
 
-> Accounts > Documents > Journal Entry > New
+> Accounts > Company and Accounts > Journal Entry > New
 
 <img class="screenshot" alt="Journal Entry" src="{{docs_base_url}}/assets/img/accounts/journal-entry.png">
 
diff --git a/erpnext/docs/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item.md b/erpnext/docs/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item.md
index c309903..3f9a8c9 100644
--- a/erpnext/docs/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item.md
+++ b/erpnext/docs/user/manual/en/setting-up/stock-reconciliation-for-non-serialized-item.md
@@ -13,7 +13,7 @@
 
 Non Serialized items are generally fast moving and low value item, hence doesn't need tracking for each unit. Items like screw, cotton waste, other consumables, stationary products can be categorized as non-serialized.
 
-> Stock Reconciliation option is available for the non serialized Items only. For serialized and batch items, you should create Material Receipt entry in Stock Entry form.
+> Stock Reconciliation option is available for the non serialized Items only. For serialized and batch items, you should create Material Receipt (to increase stock) or Material Issue (to decrease stock) via Stock Entry.
 
 ### Opening Stocks
 
diff --git a/erpnext/education/doctype/fees/fees.json b/erpnext/education/doctype/fees/fees.json
index c4e1f82..971197c 100644
--- a/erpnext/education/doctype/fees/fees.json
+++ b/erpnext/education/doctype/fees/fees.json
@@ -4,7 +4,7 @@
  "allow_import": 1, 
  "allow_rename": 0, 
  "autoname": "naming_series:", 
- "beta": 1, 
+ "beta": 0, 
  "creation": "2015-09-22 16:57:22.143710", 
  "custom": 0, 
  "docstatus": 0, 
@@ -1276,7 +1276,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2017-12-06 05:55:10.502567", 
+ "modified": "2018-02-08 02:12:34.185245", 
  "modified_by": "Administrator", 
  "module": "Education", 
  "name": "Fees", 
diff --git a/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.json b/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.json
index e153f8c..61976b4 100644
--- a/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.json
+++ b/erpnext/education/report/course_wise_assessment_report/course_wise_assessment_report.json
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 0, 
  "is_standard": "Yes", 
- "modified": "2017-11-10 19:41:46.641227", 
+ "modified": "2018-02-08 15:11:24.904628", 
  "modified_by": "Administrator", 
  "module": "Education", 
  "name": "Course wise Assessment Report", 
@@ -17,7 +17,10 @@
  "report_type": "Script Report", 
  "roles": [
   {
-   "role": "Academics User"
+   "role": "Instructor"
+  }, 
+  {
+   "role": "Education Manager"
   }
  ]
 }
\ No newline at end of file
diff --git a/erpnext/education/report/final_assessment_grades/final_assessment_grades.json b/erpnext/education/report/final_assessment_grades/final_assessment_grades.json
index 1efbb6e..e748efa 100644
--- a/erpnext/education/report/final_assessment_grades/final_assessment_grades.json
+++ b/erpnext/education/report/final_assessment_grades/final_assessment_grades.json
@@ -8,7 +8,7 @@
  "idx": 0, 
  "is_standard": "Yes", 
  "letter_head": "Shishuvan Secondary School", 
- "modified": "2018-01-22 17:04:43.412054", 
+ "modified": "2018-02-08 15:11:35.339434", 
  "modified_by": "Administrator", 
  "module": "Education", 
  "name": "Final Assessment Grades", 
@@ -16,5 +16,12 @@
  "ref_doctype": "Assessment Result", 
  "report_name": "Final Assessment Grades", 
  "report_type": "Script Report", 
- "roles": []
+ "roles": [
+  {
+   "role": "Instructor"
+  }, 
+  {
+   "role": "Education Manager"
+  }
+ ]
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.py b/erpnext/hr/doctype/employee_loan/employee_loan.py
index dadd769..1751835 100644
--- a/erpnext/hr/doctype/employee_loan/employee_loan.py
+++ b/erpnext/hr/doctype/employee_loan/employee_loan.py
@@ -135,7 +135,7 @@
 		return employee_loan.as_dict()
 
 @frappe.whitelist()
-def make_jv_entry(employee_loan, company, employee_loan_account, employee, loan_amount, payment_account):
+def make_jv_entry(employee_loan, company, employee_loan_account, employee, loan_amount, payment_account=None):
 	journal_entry = frappe.new_doc('Journal Entry')
 	journal_entry.voucher_type = 'Bank Entry'
 	journal_entry.user_remark = _('Against Employee Loan: {0}').format(employee_loan)
diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.py b/erpnext/hr/doctype/payroll_entry/payroll_entry.py
index 77cece3..2a5b467 100644
--- a/erpnext/hr/doctype/payroll_entry/payroll_entry.py
+++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.py
@@ -252,7 +252,7 @@
 			journal_entry.user_remark = _('Accural Journal Entry for salaries from {0} to {1}')\
 				.format(self.start_date, self.end_date)
 			journal_entry.company = self.company
-			journal_entry.posting_date = nowdate()
+			journal_entry.posting_date = self.posting_date
 
 			accounts = []
 			payable_amount = 0
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index 8a86668..bba3e1e 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -79,6 +79,10 @@
 				]
 			}
 		});
+
+		// formatter for production order operation
+		frm.set_indicator_formatter('operation',
+			function(doc) { return (frm.doc.qty==doc.completed_qty) ? "green" : "orange" });
 	},
 	
 	onload: function(frm) {
@@ -94,10 +98,6 @@
 			});
 			erpnext.production_order.set_default_warehouse(frm);
 		}
-
-		// formatter for production order operation
-		frm.set_indicator_formatter('operation',
-			function(doc) { return (frm.doc.qty==doc.completed_qty) ? "green" : "orange" });
 	},
 
 	refresh: function(frm) {
diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.py b/erpnext/manufacturing/doctype/production_order/test_production_order.py
index 002f03b..7612461 100644
--- a/erpnext/manufacturing/doctype/production_order/test_production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/test_production_order.py
@@ -10,7 +10,6 @@
 from erpnext.manufacturing.doctype.production_order.production_order \
 	import make_stock_entry, ItemHasVariantError, stop_unstop
 from erpnext.stock.doctype.stock_entry import test_stock_entry
-from erpnext.stock.doctype.item.test_item import get_total_projected_qty
 from erpnext.stock.utils import get_bin
 from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
 
@@ -81,7 +80,7 @@
 		prod_order.set_production_order_operations()
 		prod_order.insert()
 		prod_order.submit()
-		
+
 		d = prod_order.operations[0]
 		d.completed_qty = flt(d.completed_qty)
 
@@ -89,7 +88,7 @@
 		time_sheet_doc = frappe.get_doc('Timesheet', name)
 		self.assertEqual(prod_order.company, time_sheet_doc.company)
 		time_sheet_doc.submit()
-		
+
 
 		self.assertEqual(prod_order.name, time_sheet_doc.production_order)
 		self.assertEqual((prod_order.qty - d.completed_qty),
@@ -108,7 +107,7 @@
 
 		self.assertEqual(prod_order.operations[0].actual_operation_time, 60)
 		self.assertEqual(prod_order.operations[0].actual_operating_cost, 6000)
-		
+
 		time_sheet_doc1 = make_timesheet(prod_order.name, prod_order.company)
 		self.assertEqual(len(time_sheet_doc1.get('time_logs')), 0)
 
@@ -176,28 +175,6 @@
 		self.assertEqual(self.bin1_at_start.projected_qty,
 			cint(bin1_on_cancel.projected_qty))
 
-	def test_projected_qty_for_production_and_sales_order(self):
-		before_production_order = get_bin(self.item, self.warehouse)
-		before_production_order.update_reserved_qty_for_production()
-
-		self.pro_order = make_prod_order_test_record(item="_Test FG Item", qty=2,
-			source_warehouse=self.warehouse)
-
-		after_production_order = get_bin(self.item, self.warehouse)
-
-		sales_order = make_sales_order(item = self.item, qty = 2)
-		after_sales_order = get_bin(self.item, self.warehouse)
-
-		self.assertEqual(cint(before_production_order.reserved_qty_for_production) + 2,
-			cint(after_sales_order.reserved_qty_for_production))
-		self.assertEqual(cint(before_production_order.projected_qty),
-			cint(after_sales_order.projected_qty) + 2)
-
-		total_projected_qty = get_total_projected_qty(self.item)
-
-		item_doc = frappe.get_doc('Item', self.item)
-		self.assertEqual(total_projected_qty,  item_doc.total_projected_qty)
-
 	def test_reserved_qty_for_production_on_stock_entry(self):
 		test_stock_entry.make_stock_entry(item_code="_Test Item",
 			target= self.warehouse, qty=100, basic_rate=100)
@@ -230,7 +207,7 @@
 			cint(bin1_on_start_production.reserved_qty_for_production))
 		self.assertEqual(cint(bin1_on_end_production.projected_qty),
 			cint(bin1_on_end_production.projected_qty))
-			
+
 	def test_reserved_qty_for_stopped_production(self):
 		test_stock_entry.make_stock_entry(item_code="_Test Item",
 			target= self.warehouse, qty=100, basic_rate=100)
@@ -238,18 +215,18 @@
 			target= self.warehouse, qty=100, basic_rate=100)
 
 		# 	0 0 0
-		
+
 		self.test_reserved_qty_for_production_submit()
-		
+
 		#2 0 -2
 
 		s = frappe.get_doc(make_stock_entry(self.pro_order.name,
 			"Material Transfer for Manufacture", 1))
 
 		s.submit()
-		
+
 		#1 -1 0
-		
+
 		bin1_on_start_production = get_bin(self.item, self.warehouse)
 
 		# reserved_qty_for_producion updated
@@ -259,10 +236,10 @@
 		# projected qty will now be 2 less (becuase of item movement)
 		self.assertEqual(cint(self.bin1_at_start.projected_qty),
 			cint(bin1_on_start_production.projected_qty) + 2)
-			
+
 		# STOP
 		stop_unstop(self.pro_order.name, "Stopped")
-		
+
 		bin1_on_stop_production = get_bin(self.item, self.warehouse)
 
 		# no change in reserved / projected
diff --git a/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py b/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
index 97af20a..20ee814 100644
--- a/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
+++ b/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
@@ -7,22 +7,10 @@
 
 def execute():
 	repost_bin_qty()
-	repost_item_projected_qty()
 
 def repost_bin_qty():
-	for bin in frappe.db.sql(""" select name from `tabBin` 
+	for bin in frappe.db.sql(""" select name from `tabBin`
 		where (actual_qty + ordered_qty + indented_qty + planned_qty- reserved_qty - reserved_qty_for_production) != projected_qty """, as_dict=1):
 		bin_doc = frappe.get_doc('Bin', bin.name)
 		bin_doc.set_projected_qty()
 		bin_doc.db_set("projected_qty", bin_doc.projected_qty, update_modified = False)
-
-def repost_item_projected_qty():
-	for data in frappe.db.sql(""" select 
-			`tabBin`.item_code as item_code,
-			sum(`tabBin`.projected_qty) as projected_qty, 
-			`tabItem`.total_projected_qty as total_projected_qty 
-		from 
-			`tabBin`, `tabItem` 
-		where `tabBin`.item_code = `tabItem`.name 
-		group by `tabBin`.item_code having projected_qty <>  total_projected_qty """, as_dict=1):
-		update_item_projected_qty(data.item_code)
diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py
index 8d339b9..3d94b5c 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.py
+++ b/erpnext/projects/doctype/timesheet/timesheet.py
@@ -156,14 +156,18 @@
 			(self.production_order, operation_id), as_dict=1)[0]
 
 	def update_task_and_project(self):
+		tasks, projects = [], []
+
 		for data in self.time_logs:
-			if data.task:
+			if data.task and data.task not in tasks:
 				task = frappe.get_doc("Task", data.task)
 				task.update_time_and_costing()
 				task.save()
+				tasks.append(data.task)
 
-			elif data.project:
+			elif data.project and data.project not in projects:
 				frappe.get_doc("Project", data.project).update_project()
+				projects.append(data.project)
 
 	def validate_dates(self):
 		for data in self.time_logs:
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 8ae91a4..e8c3262 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -704,7 +704,7 @@
 		}
 
 		if(!this.in_apply_price_list) {
-			this.apply_price_list();
+			this.apply_price_list(null, true);
 		}
 	},
 
@@ -776,7 +776,8 @@
 		this.frm.toggle_reqd("plc_conversion_rate",
 			!!(this.frm.doc.price_list_name && this.frm.doc.price_list_currency));
 
-		if(this.frm.doc_currency!==this.frm.doc.currency) {
+		if(this.frm.doc_currency!==this.frm.doc.currency
+			|| this.frm.doc_currency!==this.frm.doc.price_list_currency) {
 			// reset names only when the currency is different
 
 			var company_currency = this.get_company_currency();
@@ -1056,7 +1057,13 @@
 		if(!price_list_rate_changed) me.calculate_taxes_and_totals();
 	},
 
-	apply_price_list: function(item) {
+	apply_price_list: function(item, reset_plc_conversion) {
+		// We need to reset plc_conversion_rate sometimes because the call to
+		// `erpnext.stock.get_item_details.apply_price_list` is sensitive to its value
+		if (!reset_plc_conversion) {
+			this.frm.set_value("plc_conversion_rate", "");
+		}
+
 		var me = this;
 		var args = this._get_args(item);
 		if (!((args.items && args.items.length) || args.price_list)) {
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index a6133c8..a9eb7db 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -13,6 +13,10 @@
 			'Project': 'Project'
 		}
 		frm.add_fetch('customer', 'tax_id', 'tax_id');
+
+		// formatter for material request item
+		frm.set_indicator_formatter('item_code',
+			function(doc) { return (doc.stock_qty<=doc.delivered_qty) ? "green" : "orange" })
 	},
 	onload: function(frm) {
 		erpnext.queries.setup_queries(frm, "Warehouse", function() {
@@ -28,10 +32,6 @@
 			}
 		});
 
-		// formatter for material request item
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.stock_qty<=doc.delivered_qty) ? "green" : "orange" })
-
 		erpnext.queries.setup_warehouse_query(frm);
 	},
 
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index f829961..5e5c50d 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -5,7 +5,6 @@
 from frappe.utils import flt, add_days
 import frappe.permissions
 import unittest
-from erpnext.stock.doctype.item.test_item import get_total_projected_qty
 from erpnext.selling.doctype.sales_order.sales_order \
 	import make_material_request, make_delivery_note, make_sales_invoice, WarehouseRequired
 from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
@@ -155,17 +154,9 @@
 		dn = create_dn_against_so(so.name, 15)
 		self.assertEqual(get_reserved_qty(), existing_reserved_qty)
 
-		total_projected_qty = get_total_projected_qty('_Test Item')
-		item_doc_before_cancel = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc_before_cancel.total_projected_qty)
-
 		dn.cancel()
 		self.assertEqual(get_reserved_qty(), existing_reserved_qty + 10)
 
-		total_projected_qty = get_total_projected_qty('_Test Item')
-		item_doc_after_cancel = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc_after_cancel.total_projected_qty)
-
 	def test_reserved_qty_for_over_delivery_via_sales_invoice(self):
 		make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100)
 
@@ -183,10 +174,6 @@
 		si.insert()
 		si.submit()
 
-		total_projected_qty = get_total_projected_qty('_Test Item')
-		item_doc = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc.total_projected_qty)
-
 		self.assertEqual(get_reserved_qty(), existing_reserved_qty)
 
 		so.load_from_db()
@@ -195,9 +182,6 @@
 
 		si.cancel()
 		self.assertEqual(get_reserved_qty(), existing_reserved_qty + 10)
-		total_projected_qty = get_total_projected_qty('_Test Item')
-		item_doc = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc.total_projected_qty)
 
 		so.load_from_db()
 		self.assertEqual(so.get("items")[0].delivered_qty, 0)
@@ -229,10 +213,6 @@
 		self.assertEqual(get_reserved_qty("_Test Item"), existing_reserved_qty_item1)
 		self.assertEqual(get_reserved_qty("_Test Item Home Desktop 100"), existing_reserved_qty_item2)
 
-		total_projected_qty = get_total_projected_qty('_Test Item')
-		item_doc = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc.total_projected_qty)
-
 		# unclose so
 		so.load_from_db()
 		so.update_status('Draft')
@@ -269,10 +249,6 @@
 
 		dn = create_dn_against_so(so.name, 15)
 
-		total_projected_qty = get_total_projected_qty('_Test Item')
-		item_doc = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc.total_projected_qty)
-
 		self.assertEqual(get_reserved_qty("_Test Item"), existing_reserved_qty_item1)
 		self.assertEqual(get_reserved_qty("_Test Item Home Desktop 100"),
 			existing_reserved_qty_item2)
@@ -495,13 +471,6 @@
 
 		self.assertEquals(abs(flt(reserved_qty)), existing_reserved_qty_for_dn_item)
 
-	def test_total_projected_qty_against_sales_order(self):
-		so = make_sales_order(item = '_Test Item')
-		total_projected_qty = get_total_projected_qty('_Test Item')
-
-		item_doc = frappe.get_doc('Item', '_Test Item')
-		self.assertEqual(total_projected_qty,  item_doc.total_projected_qty)
-
 	def test_reserved_qty_for_closing_so(self):
 		bin = frappe.get_all("Bin", filters={"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
 			fields=["reserved_qty"])
@@ -567,12 +536,12 @@
 			"item_list": [{
 				"item_code": "_Test FG Item",
 				"qty": 10,
-				"rate":100	
+				"rate":100
 			},
 			{
 				"item_code": "_Test FG Item",
 				"qty": 20,
-				"rate":200	
+				"rate":200
 			}]
 		})
 
@@ -589,7 +558,7 @@
 			})
 			so_item_name[item.get("sales_order_item")]= item.get("pending_qty")
 		make_production_orders(json.dumps({"items":po_items}), so.name, so.company)
-		
+
 		# Check if Production Orders were raised
 		for item in so_item_name:
 			po_qty = frappe.db.sql("select sum(qty) from `tabProduction Order` where sales_order=%s and sales_order_item=%s", (so.name, item))
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 5ca2618..aa5b3ba 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -118,6 +118,7 @@
 
 	selling_price_list: function() {
 		this.apply_price_list();
+		this.set_dynamic_labels();
 	},
 
 	price_list_rate: function(doc, cdt, cdn) {
diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py
index b8fce6e..690ccf0 100644
--- a/erpnext/startup/notifications.py
+++ b/erpnext/startup/notifications.py
@@ -11,7 +11,6 @@
 			"Warranty Claim": {"status": "Open"},
 			"Task": {"status": ("in", ("Open", "Overdue"))},
 			"Project": {"status": "Open"},
-			"Item": {"total_projected_qty": ("<", 0)},
 			"Lead": {"status": "Open"},
 			"Contact": {"status": "Open"},
 			"Opportunity": {"status": "Open"},
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index fd34423..430d9fb 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -15,9 +15,6 @@
 		self.validate_mandatory()
 		self.set_projected_qty()
 
-	def on_update(self):
-		update_item_projected_qty(self.item_code)
-
 	def validate_mandatory(self):
 		qf = ['actual_qty', 'reserved_qty', 'ordered_qty', 'indented_qty']
 		for f in qf:
@@ -130,11 +127,5 @@
 		self.set_projected_qty()
 		self.db_set('projected_qty', self.projected_qty)
 
-def update_item_projected_qty(item_code):
-	'''Set total_projected_qty in Item as sum of projected qty in all warehouses'''
-	frappe.db.sql('''update tabItem set
-		total_projected_qty = ifnull((select sum(projected_qty) from tabBin where item_code=%s), 0)
-		where name=%s''', (item_code, item_code))
-
 def on_doctype_update():
 	frappe.db.add_index("Bin", ["item_code", "warehouse"])
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 104eeb8..ea705cb 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -110,7 +110,7 @@
 		const stock_exists = (frm.doc.__onload
 			&& frm.doc.__onload.stock_exists) ? 1 : 0;
 
-		['has_serial_no', 'has_batch_no'].forEach((fieldname) => {
+		['is_stock_item', 'has_serial_no', 'has_batch_no'].forEach((fieldname) => {
 			frm.set_df_property(fieldname, 'read_only', stock_exists);
 		});
 	},
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index f334973..04f9df3 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -178,6 +178,35 @@
    "bold": 0,
    "collapsible": 0,
    "columns": 0,
+   "fieldname": "barcode",
+   "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": "Barcode",
+   "length": 0,
+   "no_copy": 1,
+   "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
+  },
+  {
+   "allow_bulk_edit": 0,
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "columns": 0,
    "description": "",
    "fieldname": "item_group",
    "fieldtype": "Link",
@@ -357,7 +386,7 @@
    "report_hide": 0,
    "reqd": 0,
    "search_index": 0,
-   "set_only_once": 1,
+   "set_only_once": 0,
    "unique": 0
   },
   {
diff --git a/erpnext/stock/doctype/item/item_list.js b/erpnext/stock/doctype/item/item_list.js
index db53ae9..534b341 100644
--- a/erpnext/stock/doctype/item/item_list.js
+++ b/erpnext/stock/doctype/item/item_list.js
@@ -1,6 +1,6 @@
 frappe.listview_settings['Item'] = {
 	add_fields: ["item_name", "stock_uom", "item_group", "image", "variant_of",
-		"has_variants", "end_of_life", "disabled", "total_projected_qty"],
+		"has_variants", "end_of_life", "disabled"],
 	filters: [["disabled", "=", "0"]],
 
 	get_indicator: function(doc) {
@@ -8,8 +8,6 @@
 			return [__("Disabled"), "grey", "disabled,=,Yes"];
 		} else if (doc.end_of_life && doc.end_of_life < frappe.datetime.get_today()) {
 			return [__("Expired"), "grey", "end_of_life,<,Today"];
-		} else if(doc.total_projected_qty < 0) {
-			return [__("Shortage"), "red", "total_projected_qty,<,0"];
 		} else if (doc.has_variants) {
 			return [__("Template"), "orange", "has_variants,=,Yes"];
 		} else if (doc.variant_of) {
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index fb3182e..7241be3 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -128,7 +128,7 @@
 
 	def test_copy_fields_from_template_to_variants(self):
 		frappe.delete_doc_if_exists("Item", "_Test Variant Item-XL", force=1)
-		
+
 		fields = [{'field_name': 'item_group'}, {'field_name': 'is_stock_item'}]
 		allow_fields = [d.get('field_name') for d in fields]
 		set_item_variant_settings(fields)
@@ -292,12 +292,6 @@
 		variant.item_name = "_Test Variant Item-S"
 		variant.save()
 
-def get_total_projected_qty(item):
-	total_qty = frappe.db.sql(""" select sum(projected_qty) as projected_qty from tabBin
-		where item_code = %(item)s""", {'item': item}, as_dict=1)
-
-	return total_qty[0].projected_qty if total_qty else 0.0
-
 test_records = frappe.get_test_records('Item')
 
 def create_item(item_code, is_stock_item=None):
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index ed0597c..709c2c7 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -12,6 +12,10 @@
 			'Supplier Quotation': 'Supplier Quotation',
 			'Production Order': 'Production Order'
 		}
+
+		// formatter for material request item
+		frm.set_indicator_formatter('item_code',
+			function(doc) { return (doc.qty<=doc.ordered_qty) ? "green" : "orange" })
 	},
 	onload: function(frm) {
 		// add item, if previous view was item
@@ -19,11 +23,6 @@
 
 		//set schedule_date
 		set_schedule_date(frm);
-
-		// formatter for material request item
-		frm.set_indicator_formatter('item_code',
-			function(doc) { return (doc.qty<=doc.ordered_qty) ? "green" : "orange" }),
-
 		frm.fields_dict["items"].grid.get_field("warehouse").get_query = function(doc, cdt, cdn){
 			return{
 				filters: {'company': doc.company}
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 3b5b4d3..5a884ad 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -10,6 +10,7 @@
 from erpnext.setup.utils import get_exchange_rate
 from frappe.model.meta import get_field_precision
 from erpnext.stock.doctype.batch.batch import get_batch_no
+from erpnext import get_company_currency
 
 from six import string_types
 
@@ -473,8 +474,8 @@
 @frappe.whitelist()
 def get_bin_details(item_code, warehouse):
 	return frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse},
-			["projected_qty", "actual_qty", "ordered_qty"], as_dict=True) \
-			or {"projected_qty": 0, "actual_qty": 0, "ordered_qty": 0}
+			["projected_qty", "actual_qty"], as_dict=True) \
+			or {"projected_qty": 0, "actual_qty": 0}
 
 @frappe.whitelist()
 def get_serial_no_details(item_code, warehouse, stock_qty, serial_no):
@@ -591,11 +592,12 @@
 	price_list_currency = get_price_list_currency(args.price_list)
 	price_list_uom_dependant = get_price_list_uom_dependant(args.price_list)
 	plc_conversion_rate = args.plc_conversion_rate
+	company_currency = get_company_currency(args.company)
 
 	if (not plc_conversion_rate) or (price_list_currency and args.price_list_currency \
 		and price_list_currency != args.price_list_currency):
 			# cksgb 19/09/2016: added args.transaction_date as posting_date argument for get_exchange_rate
-			plc_conversion_rate = get_exchange_rate(price_list_currency, args.currency,
+			plc_conversion_rate = get_exchange_rate(price_list_currency, company_currency,
 				args.transaction_date) or plc_conversion_rate
 
 	return frappe._dict({
diff --git a/erpnext/stock/report/item_variant_details/item_variant_details.py b/erpnext/stock/report/item_variant_details/item_variant_details.py
index 67b6b5f..f1488f8 100644
--- a/erpnext/stock/report/item_variant_details/item_variant_details.py
+++ b/erpnext/stock/report/item_variant_details/item_variant_details.py
@@ -17,7 +17,7 @@
 
 	variant_results = frappe.db.sql("""select name from `tabItem`
 		where variant_of = %s""", item, as_dict=1)
-	variants = ",".join(['"' + variant['name'] + '"' for variant in variant_results])
+	variants = ",".join(['"' + frappe.db.escape(variant['name']) + '"' for variant in variant_results])
 
 	order_count_map = get_open_sales_orders_map(variants)
 	stock_details_map = get_stock_details_map(variants)