Merge pull request #1838 from nabinhait/v4-hotfix

Multiple fixes
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 0f11af4..348543e 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -732,7 +732,7 @@
 
 	frappe.sendmail(recipients + [frappe.db.get_value("User", owner, "email")],
 		subject="[Urgent] Error while creating recurring invoice for %s" % inv,
-		message = frappe.get_template("template/emails/recurring_invoice_failed.html").render({
+		message = frappe.get_template("templates/emails/recurring_invoice_failed.html").render({
 			"name": inv,
 			"customer": customer
 		}))
diff --git a/erpnext/accounts/page/financial_analytics/financial_analytics.js b/erpnext/accounts/page/financial_analytics/financial_analytics.js
index 4574390..2da9381 100644
--- a/erpnext/accounts/page/financial_analytics/financial_analytics.js
+++ b/erpnext/accounts/page/financial_analytics/financial_analytics.js
@@ -232,7 +232,7 @@
 				indent: 0,
 				opening: 0,
 				checked: false,
-				report_type: me.pl_or_bs,
+				report_type: me.pl_or_bs=="Balance Sheet"? "Balance Sheet" : "Profit and Loss",
 			};
 			me.item_by_name[net_profit.name] = net_profit;
 
@@ -244,7 +244,7 @@
 
 			$.each(me.data, function(i, ac) {
 				if(!ac.parent_account && me.apply_filter(ac, "company") &&
-						ac.report_type==me.pl_or_bs) {
+						ac.report_type==net_profit.report_type) {
 					$.each(me.columns, function(i, col) {
 						if(col.formatter==me.currency_formatter && col.balance_type=="Dr") {
 							var bal = net_profit[col.date+"_dr"] -
diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json
index 5489d33..c894bb8 100644
--- a/erpnext/projects/doctype/project/project.json
+++ b/erpnext/projects/doctype/project/project.json
@@ -1,6 +1,7 @@
 {
  "allow_attach": 1, 
  "allow_import": 1, 
+ "allow_rename": 1, 
  "autoname": "field:project_name", 
  "creation": "2013-03-07 11:55:07", 
  "docstatus": 0, 
@@ -258,7 +259,7 @@
  "icon": "icon-puzzle-piece", 
  "idx": 1, 
  "max_attachments": 4, 
- "modified": "2014-05-27 03:49:15.252736", 
+ "modified": "2014-06-24 12:44:19.530707", 
  "modified_by": "Administrator", 
  "module": "Projects", 
  "name": "Project", 
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 63ffb36..2021490 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -481,7 +481,27 @@
 
 	set_dynamic_labels: function() {
 		this._super();
-		set_sales_bom_help(this.frm.doc);
+		this.set_sales_bom_help(this.frm.doc);
+	},
+
+	set_sales_bom_help: function(doc) {
+		if(!cur_frm.fields_dict.packing_list) return;
+		if ((doc.packing_details || []).length) {
+			$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
+
+			if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+				help_msg = "<div class='alert alert-warning'>" +
+					__("For 'Sales BOM' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Sales BOM' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.")+
+				"</div>";
+				frappe.meta.get_docfield(doc.doctype, 'sales_bom_help', doc.name).options = help_msg;
+			}
+		} else {
+			$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
+			if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+				frappe.meta.get_docfield(doc.doctype, 'sales_bom_help', doc.name).options = '';
+			}
+		}
+		refresh_field('sales_bom_help');
 	},
 
 	change_form_labels: function(company_currency) {
@@ -574,26 +594,5 @@
 			var df = frappe.meta.get_docfield(fname[0], fname[1], me.frm.doc.name);
 			if(df) df.label = label;
 		});
-	},
-});
-
-// Help for Sales BOM items
-var set_sales_bom_help = function(doc) {
-	if(!cur_frm.fields_dict.packing_list) return;
-	if ((doc.packing_details || []).length) {
-		$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
-
-		if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
-			help_msg = "<div class='alert alert-warning'>" +
-				__("For 'Sales BOM' items, warehouse, serial no and batch no will be considered from the 'Packing List' table. If warehouse and batch no are same for all packing items for any 'Sales BOM' item, those values can be entered in the main item table, values will be copied to 'Packing List' table.")+
-			"</div>";
-			frappe.meta.get_docfield(doc.doctype, 'sales_bom_help', doc.name).options = help_msg;
-		}
-	} else {
-		$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
-		if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
-			frappe.meta.get_docfield(doc.doctype, 'sales_bom_help', doc.name).options = '';
-		}
 	}
-	refresh_field('sales_bom_help');
-}
+});
diff --git a/erpnext/setup/doctype/contact_control/contact_control.js b/erpnext/setup/doctype/contact_control/contact_control.js
index 6b6878f..b053541 100755
--- a/erpnext/setup/doctype/contact_control/contact_control.js
+++ b/erpnext/setup/doctype/contact_control/contact_control.js
@@ -139,19 +139,10 @@
 	var go_ahead = confirm(__("Delete {0} {1}?", [doctype, name]));
 	if (!go_ahead) return;
 
-	return frappe.call({
-		method: 'frappe.model.delete_doc',
-		args: {
-			dt: doctype,
-			dn: name
-		},
-		callback: function(r) {
-			//console.log(r);
-			if (!r.exc) {
-				// run the correct list
-				var list_name = doctype.toLowerCase() + '_list';
-				cur_frm[list_name].run();
-			}
+	frappe.model.delete_doc(doctype, name, function(r) {
+		if (!r.exc) {
+			var list_name = doctype.toLowerCase() + '_list';
+			cur_frm[list_name].run();
 		}
 	});
 }
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 297542b..125a293 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -220,8 +220,8 @@
 			# get incoming rate
 			if not d.bom_no:
 				if not flt(d.incoming_rate) or d.s_warehouse or self.purpose == "Sales Return":
-					incoming_rate = self.get_incoming_rate(args)
-					if flt(incoming_rate) > 0:
+					incoming_rate = flt(self.get_incoming_rate(args), self.precision("incoming_rate", d))
+					if incoming_rate > 0:
 						d.incoming_rate = incoming_rate
 
 				d.amount = flt(d.transfer_qty) * flt(d.incoming_rate)