Merge pull request #15516 from shreyashah115/product-page

Fetch Item Group's name and image on website
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 635a8c2..5d504b9 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -16,7 +16,7 @@
 		if frappe.local.flags.ignore_on_update:
 			return
 		else:
-			super().on_update()
+			super(Account, self).on_update()
 
 	def onload(self):
 		frozen_accounts_modifier = frappe.db.get_value("Accounts Settings", "Accounts Settings",
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 9215e5f..b0795ca 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -23,7 +23,6 @@
 				}
 			}
 		});
-
 		frm.set_query("party_type", function() {
 			return{
 				"filters": {
@@ -31,7 +30,17 @@
 				}
 			}
 		});
-
+		frm.set_query("contact_person", function() {
+			if (frm.doc.party) {
+				return {
+					query: 'frappe.contacts.doctype.contact.contact.contact_query',
+					filters: {
+						link_doctype: frm.doc.party_type,
+						link_name: frm.doc.party
+					}
+				};
+			}
+		});
 		frm.set_query("paid_to", function() {
 			var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ?
 				["Bank", "Cash"] : [frappe.boot.party_account_types[frm.doc.party_type]];
@@ -114,6 +123,11 @@
 		frm.events.set_dynamic_labels(frm);
 	},
 
+	contact_person: function(frm) {
+		frm.set_value("contact_email", "");
+		erpnext.utils.get_contact_details(frm);
+	},
+
 	hide_unhide_fields: function(frm) {
 		var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
 
@@ -146,7 +160,7 @@
 		frm.toggle_display("set_exchange_gain_loss",
 			(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount &&
 				((frm.doc.paid_from_account_currency != company_currency ||
-					frm.doc.paid_to_account_currency != company_currency) && 
+					frm.doc.paid_to_account_currency != company_currency) &&
 					frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency)));
 
 		frm.refresh_fields();
@@ -208,7 +222,7 @@
 			});
 		} else {
 			if(frm.doc.party) {
-				frm.events.party(frm);	
+				frm.events.party(frm);
 			}
 
 			if(frm.doc.mode_of_payment) {
@@ -230,13 +244,16 @@
 	},
 
 	party: function(frm) {
+		if (frm.doc.contact_email || frm.doc.contact_person) {
+			frm.set_value("contact_email", "");
+			frm.set_value("contact_person", "");
+		}
 		if(frm.doc.payment_type && frm.doc.party_type && frm.doc.party) {
 			if(!frm.doc.posting_date) {
 				frappe.msgprint(__("Please select Posting Date before selecting Party"))
 				frm.set_value("party", "");
 				return ;
 			}
-			
 			frm.set_party_account_based_on_party = true;
 
 			return frappe.call({
@@ -302,7 +319,7 @@
 							frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
 						}
 						frm.set_value("received_amount", frm.doc.paid_amount);
-						
+
 					} else {
 						frm.events.received_amount(frm);
 					}
@@ -350,7 +367,7 @@
 						]);
 					}
 				}
-			});			
+			});
 		}
 	},
 
@@ -402,7 +419,7 @@
 			}
 		})
 	},
-	
+
 	posting_date: function(frm) {
 		frm.events.paid_from_account_currency(frm);
 	},
@@ -415,7 +432,7 @@
 				frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
 				frm.set_value("base_received_amount", frm.doc.base_paid_amount);
 			}
-			
+
 			frm.events.set_unallocated_amount(frm);
 		}
 
@@ -425,17 +442,17 @@
 
 	target_exchange_rate: function(frm) {
 		frm.set_paid_amount_based_on_received_amount = true;
-		
+
 		if (frm.doc.received_amount) {
 			frm.set_value("base_received_amount",
 				flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate));
-				
-			if(!frm.doc.source_exchange_rate && 
+
+			if(!frm.doc.source_exchange_rate &&
 					(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
 				frm.set_value("source_exchange_rate", frm.doc.target_exchange_rate);
 				frm.set_value("base_paid_amount", frm.doc.base_received_amount);
 			}
-			
+
 			frm.events.set_unallocated_amount(frm);
 		}
 		frm.set_paid_amount_based_on_received_amount = false;
@@ -468,14 +485,14 @@
 			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount);
 		else
 			frm.events.set_unallocated_amount(frm);
-		
+
 		frm.set_paid_amount_based_on_received_amount = false;
 	},
-	
+
 	reset_received_amount: function(frm) {
 		if(!frm.set_paid_amount_based_on_received_amount &&
 				(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency)) {
-			
+
 			frm.set_value("received_amount", frm.doc.paid_amount);
 
 			if(frm.doc.source_exchange_rate) {
@@ -483,7 +500,7 @@
 			}
 			frm.set_value("base_received_amount", frm.doc.base_paid_amount);
 		}
-		
+
 		if(frm.doc.payment_type == "Receive")
 			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount);
 		else
@@ -549,7 +566,7 @@
 						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
 						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")  ||
 						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Employee") ||
-						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Student") 
+						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Student")
 					) {
 						if(total_positive_outstanding > total_negative_outstanding)
 							frm.set_value("paid_amount",
@@ -694,7 +711,7 @@
 		frm.set_value("unallocated_amount", unallocated_amount);
 		frm.trigger("set_difference_amount");
 	},
-	
+
 	set_difference_amount: function(frm) {
 		var difference_amount = 0;
 		var base_unallocated_amount = flt(frm.doc.unallocated_amount) *
@@ -753,7 +770,7 @@
 				frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
 				return false;
 			}
-			
+
 			if(frm.doc.party_type=="Employee" &&
 				!in_list(["Expense Claim", "Journal Entry"], row.reference_doctype)
 			) {
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json
index 679c97f..bc9062b 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.json
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json
@@ -383,6 +383,40 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "depends_on": "party", 
+   "fieldname": "contact_person", 
+   "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": "Contact", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Contact", 
+   "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
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "column_break_11", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -446,6 +480,40 @@
    "allow_in_quick_entry": 0, 
    "allow_on_submit": 0, 
    "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "depends_on": "contact_person", 
+   "fieldname": "contact_email", 
+   "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": "Email", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Email", 
+   "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
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
    "collapsible": 1, 
    "columns": 0, 
    "fieldname": "payment_accounts_section", 
@@ -1972,7 +2040,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-09-11 15:44:28.647566", 
+ "modified": "2018-09-25 14:38:48.312629", 
  "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 6a361a4..aec3d1b 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -299,12 +299,12 @@
 			if self.payment_type == "Receive" \
 				and self.base_total_allocated_amount < self.base_received_amount + total_deductions \
 				and self.total_allocated_amount < self.paid_amount + (total_deductions / self.source_exchange_rate):
-					self.unallocated_amount = (self.base_received_amount + total_deductions - 
+					self.unallocated_amount = (self.base_received_amount + total_deductions -
 						self.base_total_allocated_amount) / self.source_exchange_rate
 			elif self.payment_type == "Pay" \
 				and self.base_total_allocated_amount < (self.base_paid_amount - total_deductions) \
 				and self.total_allocated_amount < self.received_amount + (total_deductions / self.target_exchange_rate):
-					self.unallocated_amount = (self.base_paid_amount - (total_deductions + 
+					self.unallocated_amount = (self.base_paid_amount - (total_deductions +
 						self.base_total_allocated_amount)) / self.target_exchange_rate
 
 	def set_difference_amount(self):
@@ -790,7 +790,6 @@
 @frappe.whitelist()
 def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount=None):
 	doc = frappe.get_doc(dt, dn)
-
 	if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) > 0:
 		frappe.throw(_("Can only make payment against unbilled {0}").format(dt))
 
@@ -877,7 +876,8 @@
 	pe.mode_of_payment = doc.get("mode_of_payment")
 	pe.party_type = party_type
 	pe.party = doc.get(scrub(party_type))
-
+	pe.contact_person = doc.get("contact_person")
+	pe.contact_email = doc.get("contact_email")
 	pe.ensure_supplier_is_not_blocked()
 
 	pe.paid_from = party_account if payment_type=="Receive" else bank.account
diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py
index d517a56..b6d4875 100644
--- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py
+++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py
@@ -268,8 +268,7 @@
 	return all_companies, companies
 
 def get_subsidiary_companies(company):
-	lft, rgt = frappe.get_cached_value('Company', 
-		company,  ["lft", "rgt"])
+	lft, rgt = frappe.db.get_value('Company', company,  ["lft", "rgt"])
 
 	return frappe.db.sql_list("""select name from `tabCompany`
 		where lft >= {0} and rgt <= {1} order by lft, rgt""".format(lft, rgt))
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index 660f78c..d9ffced 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -237,6 +237,16 @@
 				},
 				{
 					"type": "report",
+					"name": "GSTR-1",
+					"is_query_report": True
+				},
+				{
+					"type": "report",
+					"name": "GSTR-2",
+					"is_query_report": True
+				},
+				{
+					"type": "report",
 					"name": "GST Sales Register",
 					"is_query_report": True
 				},
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 3671481..86fecdc 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -661,7 +661,7 @@
 		if self.doctype == 'Purchase Invoice' and not self.get('update_stock'):
 			return
 
-		frappe.db.sql("delete from `tabAsset Movement` where reference_name=%s and docstatus = 0", self.name)
+		frappe.db.sql("delete from `tabAsset Movement` where reference_name=%s", self.name)
 		frappe.db.sql("delete from `tabSerial No` where purchase_document_no=%s", self.name)
 
 	def validate_schedule_date(self):
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index a11f63f..def1170 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -12,7 +12,7 @@
 source_link = "https://github.com/frappe/erpnext"
 
 develop_version = '11.x.x-develop'
-staging_version = '11.0.3'
+staging_version = '11.0.3-beta.2'
 
 error_report_email = "support@erpnext.com"
 
diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json
index 914dda2..f9d83a4 100644
--- a/erpnext/hr/doctype/leave_application/leave_application.json
+++ b/erpnext/hr/doctype/leave_application/leave_application.json
@@ -658,6 +658,39 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "salary_slip", 
+   "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": "Salary Slip", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Salary Slip", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 1, 
+   "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
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "sb10", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -916,7 +949,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 3, 
- "modified": "2018-08-21 14:44:42.766422", 
+ "modified": "2018-09-21 15:53:11.935416", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Leave Application", 
diff --git a/erpnext/hr/doctype/salary_component/salary_component.json b/erpnext/hr/doctype/salary_component/salary_component.json
index 4221916..f7ce08c 100644
--- a/erpnext/hr/doctype/salary_component/salary_component.json
+++ b/erpnext/hr/doctype/salary_component/salary_component.json
@@ -770,7 +770,7 @@
    "collapsible": 1, 
    "collapsible_depends_on": "", 
    "columns": 0, 
-   "depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1 && doc.is_additional_component != 1", 
+   "depends_on": "eval:doc.is_flexible_benefit != 1 && doc.variable_based_on_taxable_salary != 1", 
    "fieldname": "condition_and_formula", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -835,7 +835,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "default": "1", 
+   "default": "", 
    "fieldname": "amount_based_on_formula", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -1003,7 +1003,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-07-02 16:55:44.467519", 
+ "modified": "2018-09-20 16:44:58.876044", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Component", 
@@ -1056,5 +1056,6 @@
  "sort_field": "modified", 
  "sort_order": "DESC", 
  "track_changes": 0, 
- "track_seen": 0
+ "track_seen": 0, 
+ "track_views": 0
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_detail/salary_detail.json b/erpnext/hr/doctype/salary_detail/salary_detail.json
index ebec32b..bc9812c 100644
--- a/erpnext/hr/doctype/salary_detail/salary_detail.json
+++ b/erpnext/hr/doctype/salary_detail/salary_detail.json
@@ -385,7 +385,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "default": "1", 
+   "default": "0", 
    "depends_on": "eval:doc.parenttype=='Salary Structure'", 
    "fetch_from": "", 
    "fieldname": "amount_based_on_formula", 
@@ -692,7 +692,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2018-07-04 16:28:32.314907", 
+ "modified": "2018-09-20 16:59:33.622652", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Detail", 
@@ -706,5 +706,6 @@
  "sort_field": "modified", 
  "sort_order": "DESC", 
  "track_changes": 0, 
- "track_seen": 0
+ "track_seen": 0, 
+ "track_views": 0
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 2c2e4d4..85e372d 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -384,8 +384,8 @@
 				and t2.is_lwp = 1
 				and t1.docstatus = 1
 				and t1.employee = %(employee)s
-				and CASE WHEN t2.include_holiday != 1 THEN %(dt)s not in ('{0}') and %(dt)s between from_date and to_date
-				WHEN t2.include_holiday THEN %(dt)s between from_date and to_date
+				and CASE WHEN t2.include_holiday != 1 THEN %(dt)s not in ('{0}') and %(dt)s between from_date and to_date and ifnull(t1.salary_slip, '') = ''
+				WHEN t2.include_holiday THEN %(dt)s between from_date and to_date and ifnull(t1.salary_slip, '') = ''
 				END
 				""".format(holidays), {"employee": self.employee, "dt": dt})
 			if leave:
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index 144022b..73ab67d 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -323,11 +323,12 @@
 def get_salary_component_account(sal_comp):
 	company = erpnext.get_default_company()
 	sal_comp = frappe.get_doc("Salary Component", sal_comp)
-	sal_comp.append("accounts", {
-		"company": company,
-		"default_account": create_account(company)
-	})
-	sal_comp.save()
+	if not sal_comp.get("accounts"):
+		sal_comp.append("accounts", {
+			"company": company,
+			"default_account": create_account(company)
+		})
+		sal_comp.save()
 
 def create_account(company):
 	salary_account = frappe.db.get_value("Account", "Salary - " + frappe.get_cached_value('Company',  company,  'abbr'))
@@ -347,7 +348,8 @@
 				"abbr":'BS',
 				"condition": 'base > 10000',
 				"formula": 'base*.5',
-				"type": "Earning"
+				"type": "Earning",
+				"amount_based_on_formula": 1
 			},
 			{
 				"salary_component": 'HRA',
@@ -360,7 +362,8 @@
 				"abbr":'SA',
 				"condition": 'H < 10000',
 				"formula": 'BS*.5',
-				"type": "Earning"
+				"type": "Earning",
+				"amount_based_on_formula": 1
 			},
 			{
 				"salary_component": "Leave Encashment",
@@ -401,7 +404,8 @@
 					"abbr":'BS',
 					"condition": 'base < 10000',
 					"formula": 'base*.2',
-					"type": "Earning"
+					"type": "Earning",
+					"amount_based_on_formula": 1
 				})
 	return data
 
@@ -412,13 +416,15 @@
 					"abbr":'PT',
 					"condition": 'base > 10000',
 					"formula": 'base*.1',
-					"type": "Deduction"
+					"type": "Deduction",
+					"amount_based_on_formula": 1
 				},
 				{
 					"salary_component": 'TDS',
 					"abbr":'T',
 					"formula": 'base*.1',
-					"type": "Deduction"
+					"type": "Deduction",
+					"amount_based_on_formula": 1
 				}
 			]
 	if not test_tax:
@@ -427,7 +433,8 @@
 			"abbr":'T',
 			"condition": 'employment_type=="Intern"',
 			"formula": 'base*.1',
-			"type": "Deduction"
+			"type": "Deduction",
+			"amount_based_on_formula": 1
 		})
 	if setup or test_tax:
 		make_salary_component(data, test_tax)
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index 6b190db..a36d820 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -18,14 +18,21 @@
 		self.validate_max_benefits_with_flexi()
 
 	def set_missing_values(self):
-		fields = ["depends_on_lwp", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"]
+		overwritten_fields = ["depends_on_lwp", "variable_based_on_taxable_salary", "is_tax_applicable", "is_flexible_benefit"]
+		overwritten_fields_if_missing = ["amount_based_on_formula", "formula", "amount"]
 		for table in ["earnings", "deductions"]:
 			for d in self.get(table):
-				component_default_value = frappe.db.get_value("Salary Component", str(d.salary_component), fields, as_dict=1)
+				component_default_value = frappe.db.get_value("Salary Component", str(d.salary_component),
+					overwritten_fields + overwritten_fields_if_missing, as_dict=1)
 				if component_default_value:
-					for fieldname, value in iteritems(component_default_value):
+					for fieldname in overwritten_fields:
+						value = component_default_value.get(fieldname)
 						if d.get(fieldname) != value:
-							d[fieldname] = value		
+							d.set(fieldname, value)
+
+					if not (d.get("amount") or d.get("formula")):
+						for fieldname in overwritten_fields_if_missing:
+							d.set(fieldname, component_default_value.get(fieldname))
 
 	def validate_amount(self):
 		if flt(self.net_pay) < 0 and self.salary_slip_based_on_timesheet:
diff --git a/erpnext/patches/v11_0/create_department_records_for_each_company.py b/erpnext/patches/v11_0/create_department_records_for_each_company.py
index c03cf98..eb48eed 100644
--- a/erpnext/patches/v11_0/create_department_records_for_each_company.py
+++ b/erpnext/patches/v11_0/create_department_records_for_each_company.py
@@ -18,7 +18,7 @@
 
 	for department in departments:
 		# skip root node
-		if department.name == _("All Departments"):
+		if _(department.name) == _("All Departments"):
 			continue
 
 		# for each company, create a copy of the doc
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index b7b186a..c431df4 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -264,7 +264,7 @@
 		{
 			row.incentives = flt(
 					row.allocated_amount * row.commission_rate / 100.0,
-					precision("incentives", sales_person));
+					precision("incentives", row));
 		}
 	},
 
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 1a94c04..eb817e1 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -379,7 +379,7 @@
 
 	def calculate_rate_and_amount(self, force=False,
 			update_finished_item_rate=True, raise_error_if_no_rate=True):
-		self.set_basic_rate(force, update_finished_item_rate)
+		self.set_basic_rate(force, update_finished_item_rate, raise_error_if_no_rate)
 		self.distribute_additional_costs()
 		self.update_valuation_rate()
 		self.set_total_incoming_outgoing_value()
diff --git a/erpnext/stock/report/item_prices/item_prices.js b/erpnext/stock/report/item_prices/item_prices.js
index 272f83e..77bca44 100644
--- a/erpnext/stock/report/item_prices/item_prices.js
+++ b/erpnext/stock/report/item_prices/item_prices.js
@@ -3,6 +3,15 @@
 
 frappe.query_reports["Item Prices"] = {
 	"filters": [
-
+		{
+			"fieldname": "items",
+			"label": __("Items Filter"),
+			"fieldtype": "Select",
+			"options": "Enabled Items only\nDisabled Items only\nAll Items",
+			"default": "Enabled Items only",
+			"on_change": function(query_report) {
+				query_report.trigger_refresh();
+			}
+		}
 	]
 }
diff --git a/erpnext/stock/report/item_prices/item_prices.py b/erpnext/stock/report/item_prices/item_prices.py
index 0375d8f..aa3ed92 100644
--- a/erpnext/stock/report/item_prices/item_prices.py
+++ b/erpnext/stock/report/item_prices/item_prices.py
@@ -10,7 +10,8 @@
 	if not filters: filters = {}
 
 	columns = get_columns(filters)
-	item_map = get_item_details()
+	conditions = get_condition(filters)
+	item_map = get_item_details(conditions)
 	pl = get_price_list()
 	last_purchase_rate = get_last_purchase_rate()
 	bom_rate = get_item_bom_rate()
@@ -41,14 +42,14 @@
 
 	return columns
 
-def get_item_details():
+def get_item_details(conditions):
 	"""returns all items details"""
 
 	item_map = {}
 
 	for i in frappe.db.sql("""select name, item_group, item_name, description,
-		brand, stock_uom from tabItem
-		order by item_code, item_group""", as_dict=1):
+		brand, stock_uom from tabItem %s
+		order by item_code, item_group""" % (conditions), as_dict=1):
 			item_map.setdefault(i.name, i)
 
 	return item_map
@@ -133,3 +134,15 @@
 			item_val_rate_map.setdefault(d.item_code, d.val_rate)
 
 	return item_val_rate_map
+
+def get_condition(filters):
+	"""Get Filter Items"""
+
+	if filters.get("items") == "Enabled Items only":
+		conditions = " where disabled=0 "
+	elif filters.get("items") == "Disabled Items only":
+		conditions = " where disabled=1 "
+	else:
+		conditions = ""
+
+	return conditions