Merge pull request #3685 from nabinhait/fix6

[fix] Fetch debit/credit from reference journal entry
diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js
index d9a611e..4e870fa 100644
--- a/erpnext/projects/doctype/task/task.js
+++ b/erpnext/projects/doctype/task/task.js
@@ -5,42 +5,59 @@
 
 cur_frm.add_fetch("project", "company", "company");
 
-erpnext.projects.Task = frappe.ui.form.Controller.extend({
-	setup: function() {
-		this.frm.fields_dict.project.get_query = function() {
+frappe.ui.form.on("Task", {
+	refresh: function(frm) {
+		var doc = frm.doc;
+		if(!doc.__islocal) {
+			if(frappe.model.can_read("Time Log")) {
+				frm.add_custom_button(__("Time Logs"), function() {
+					frappe.route_options = {"project": doc.project, "task": doc.name}
+					frappe.set_route("List", "Time Log");
+				}, "icon-list", true);
+			}
+			if(frappe.model.can_read("Expense Claim")) {
+				frm.add_custom_button(__("Expense Claims"), function() {
+					frappe.route_options = {"project": doc.project, "task": doc.name}
+					frappe.set_route("List", "Expense Claim");
+				}, "icon-list", true);
+			}
+
+			if(frm.perm[0].write) {
+				if(frm.doc.status==="Open") {
+					frm.add_custom_button("Close", function() {
+						frm.set_value("status", "Closed");
+						frm.save();
+					});
+				} else {
+					frm.add_custom_button("Reopen", function() {
+						frm.set_value("status", "Open");
+						frm.save();
+					});
+				}
+			}
+		}
+	},
+
+	setup: function(frm) {
+		frm.fields_dict.project.get_query = function() {
 			return {
 				query: "erpnext.projects.doctype.task.task.get_project"
 			}
 		};
 	},
 
-	project: function() {
-		if(this.frm.doc.project) {
-			return get_server_fields('get_project_details', '','', this.frm.doc, this.frm.doc.doctype, 
-				this.frm.doc.name, 1);
+	project: function(frm) {
+		if(frm.doc.project) {
+			return get_server_fields('get_project_details', '','', frm.doc, frm.doc.doctype,
+				frm.doc.name, 1);
 		}
 	},
 
-	validate: function() {
-		this.frm.doc.project && frappe.model.remove_from_locals("Project",
-			this.frm.doc.project);
+	validate: function(frm) {
+		frm.doc.project && frappe.model.remove_from_locals("Project",
+			frm.doc.project);
 	},
-	
-	refresh: function(doc) {
-		if(!doc.__islocal) {
-			cur_frm.add_custom_button(__("Time Logs"), function() {
-				frappe.route_options = {"project": doc.project, "task": doc.name}
-				frappe.set_route("List", "Time Log");
-			}, "icon-list", true);
-			cur_frm.add_custom_button(__("Expense Claims"), function() {
-				frappe.route_options = {"project": doc.project, "task": doc.name}
-				frappe.set_route("List", "Expense Claim");
-			}, "icon-list", true);
-		}
-	}
+
 });
 
 cur_frm.add_fetch('task', 'subject', 'subject');
-
-cur_frm.cscript = new erpnext.projects.Task({frm: cur_frm});
-
diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css
index b5f2a2d..3c286b1 100644
--- a/erpnext/public/css/erpnext.css
+++ b/erpnext/public/css/erpnext.css
@@ -96,3 +96,8 @@
 .pos .tax-table {
   margin-bottom: 10px;
 }
+.erpnext-icon {
+  width: 24px;
+  margin-right: 0px;
+  margin-top: -3px;
+}
diff --git a/erpnext/public/images/erp-icon.svg b/erpnext/public/images/erp-icon.svg
new file mode 100644
index 0000000..b4e2a24
--- /dev/null
+++ b/erpnext/public/images/erp-icon.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>

+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->

+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"

+	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">

+<g>

+	<path fill="#7574FF" d="M512,448c0,35.2-28.8,64-64,64H64c-35.2,0-64-28.8-64-64V64C0,28.8,28.8,0,64,0h384c35.2,0,64,28.8,64,64

+		V448z"/>

+</g>

+<g>

+	<path fill="#FFFFFF" d="M150.483,371.684V141.15c0-15.167,9.534-25.133,23.833-25.133h162.5c13.866,0,20.8,6.933,20.8,18.633v2.6

+		c0,12.133-6.934,18.633-20.8,18.633h-141.7v78.434h109.634c14.3,0,20.8,6.066,20.8,17.767v1.3c0,12.133-6.934,18.633-20.8,18.633

+		H195.117v84.934h144.3c13.867,0,20.367,6.066,20.367,17.767v2.167c0,12.566-6.5,19.5-20.367,19.5h-165.1

+		C160.017,396.384,150.483,386.851,150.483,371.684z"/>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+<g>

+</g>

+</svg>

diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js
index 6264019..af06b33 100644
--- a/erpnext/public/js/conf.js
+++ b/erpnext/public/js/conf.js
@@ -11,7 +11,7 @@
 		href="https://discuss.erpnext.com">Feedback</a></p>'
 
 
-	$('.navbar-home').html('ERPNext');
+	$('.navbar-home').html('<img class="erpnext-icon" src="/assets/erpnext/images/erp-icon.svg" />');
 
 	$('[data-link="docs"]').attr("href", "https://manual.erpnext.com")
 });
diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less
index 830902a..3f839ee 100644
--- a/erpnext/public/less/erpnext.less
+++ b/erpnext/public/less/erpnext.less
@@ -120,3 +120,8 @@
 	margin-bottom: 10px;
 }
 
+.erpnext-icon {
+	width: 24px;
+	margin-right: 0px;
+	margin-top: -3px;
+}
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 7f0b386..fcdae4d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -46,7 +46,6 @@
 
 			} else {
 				// un-stop
-				cur_frm.dashboard.set_headline_alert(__("Stopped"), "alert-danger", "icon-stop");
 				cur_frm.add_custom_button(__('Unstop'), cur_frm.cscript['Unstop Sales Order'], "icon-check");
 			}
 		}
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index ff027d7..010f5ea 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -57,7 +57,12 @@
 	def validate_item(self):
 		item_det = frappe.db.sql("""select name, has_batch_no, docstatus,
 			is_stock_item, has_variants, stock_uom
-			from tabItem where name=%s""", self.item_code, as_dict=True)[0]
+			from tabItem where name=%s""", self.item_code, as_dict=True)
+
+		if not item_det:
+			frappe.throw(_("Item {0} not found").format(self.item_code))
+
+		item_det = item_det[0]
 
 		if item_det.is_stock_item != 'Yes':
 			frappe.throw(_("Item {0} must be a stock Item").format(self.item_code))
@@ -97,7 +102,7 @@
 	def scrub_posting_time(self):
 		if not self.posting_time or self.posting_time == '00:0':
 			self.posting_time = '00:00'
-			
+
 	def validate_batch(self):
 		if self.batch_no and self.voucher_type != "Stock Entry":
 			expiry_date = frappe.db.get_value("Batch", self.batch_no, "expiry_date")