Fixed merge conflict
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index a16794b..e852de2 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.23'
+__version__ = '10.1.0'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 913aa6e..3f7c9d9 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -59,16 +59,21 @@
 		if self.difference_amount:
 			frappe.throw(_("Difference Amount must be zero"))
 		self.make_gl_entries()
+		self.update_outstanding_amounts()
 		self.update_advance_paid()
 		self.update_expense_claim()
 
 	def on_cancel(self):
 		self.setup_party_account_field()
 		self.make_gl_entries(cancel=1)
+		self.update_outstanding_amounts()
 		self.update_advance_paid()
 		self.update_expense_claim()
 		self.delink_advance_entry_references()
 
+	def update_outstanding_amounts(self):
+		self.set_missing_ref_details(force=True)
+
 	def validate_duplicate_entry(self):
 		reference_names = []
 		for d in self.get("references"):
@@ -130,14 +135,14 @@
 
 		self.set_missing_ref_details()
 
-	def set_missing_ref_details(self):
+	def set_missing_ref_details(self, force=False):
 		for d in self.get("references"):
 			if d.allocated_amount:
 				ref_details = get_reference_details(d.reference_doctype,
 					d.reference_name, self.party_account_currency)
 
 				for field, value in ref_details.items():
-					if not d.get(field):
+					if not d.get(field) or force:
 						d.set(field, value)
 
 	def validate_payment_type(self):
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index ebd9439..0901046 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -3,9 +3,26 @@
 
 frappe.provide("erpnext.accounts");
 
+frappe.ui.form.on("Payment Reconciliation Payment", {
+	invoice_number: function(frm, cdt, cdn) {
+		var row = locals[cdt][cdn];
+		if(row.invoice_number) {
+			var parts = row.invoice_number.split(' | ');
+			var invoice_type = parts[0];
+			var invoice_number = parts[1];
+
+			var invoice_amount = frm.doc.invoices.filter(function(d) {
+				return d.invoice_type === invoice_type && d.invoice_number === invoice_number;
+			})[0].outstanding_amount;
+
+			frappe.model.set_value(cdt, cdn, "allocated_amount", Math.min(invoice_amount, row.amount));
+		}
+	}
+});
+
 erpnext.accounts.PaymentReconciliationController = frappe.ui.form.Controller.extend({
 	onload: function() {
-		var me = this
+		var me = this;
 		this.frm.set_query("party_type", function() {
 			return{
 				query: "erpnext.setup.doctype.party_type.party_type.get_party_type"
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index 5910a24..3c87fe5 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -55,6 +55,7 @@
 					THEN 1=1
 					ELSE {bank_account_condition}
 				END)
+			order by t1.posting_date
 			""".format(**{
 				"dr_or_cr": dr_or_cr,
 				"bank_account_condition": bank_account_condition,
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.py b/erpnext/accounts/doctype/pos_profile/pos_profile.py
index 0bce49c..20a90f4 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.py
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.py
@@ -32,7 +32,7 @@
 					.format(res[0][0], row.user), raise_exception=1)
 			elif not row.default and not res:
 				msgprint(_("User {0} doesn't have any default POS Profile. Check Default at Row {1} for this User.")
-					.format(row.user, row.idx), raise_exception=1)
+					.format(row.user, row.idx))
 
 	def validate_all_link_fields(self):
 		accounts = {"Account": [self.income_account,
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 754fc6b..93c2206 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -106,6 +106,10 @@
 	on_submit: function(doc, dt, dn) {
 		var me = this;
 
+		if (frappe.get_route()[0] != 'Sales Invoice') {
+			return
+		}
+
 		$.each(doc["items"], function(i, row) {
 			if(row.delivery_note) frappe.model.clear_doc("Delivery Note", row.delivery_note)
 		})
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
index 8917c9f..a39b831 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
@@ -50,10 +50,12 @@
 		row += [
 			d.customer_group, d.debit_to, ", ".join(mode_of_payments.get(d.parent, [])),
 			d.territory, d.project, d.company, d.sales_order,
-			delivery_note, d.income_account, d.cost_center, d.stock_qty, d.stock_uom,
-			d.base_net_rate, d.base_net_amount
+			delivery_note, d.income_account, d.cost_center, d.stock_qty, d.stock_uom
 		]
 
+		row += [d.base_net_rate/d.stock_qty, d.base_net_amount] \
+			if d.stock_uom != d.uom else [d.base_net_rate, d.base_net_amount]
+
 		total_tax = 0
 		for tax in tax_columns:
 			item_tax = itemised_tax.get(d.name, {}).get(tax, {})
@@ -131,7 +133,7 @@
 			`tabSales Invoice Item`.stock_uom, `tabSales Invoice Item`.base_net_rate,
 			`tabSales Invoice Item`.base_net_amount, `tabSales Invoice`.customer_name,
 			`tabSales Invoice`.customer_group, `tabSales Invoice Item`.so_detail,
-			`tabSales Invoice`.update_stock {0}
+			`tabSales Invoice`.update_stock, `tabSales Invoice Item`.uom {0}
 		from `tabSales Invoice`, `tabSales Invoice Item`
 		where `tabSales Invoice`.name = `tabSales Invoice Item`.parent
 			and `tabSales Invoice`.docstatus = 1 %s %s
diff --git a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.json b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.json
index f167d06..dfae780 100644
--- a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.json
+++ b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-13 18:46:55", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:16:25.027061", 
+ "modified": "2018-02-21 01:28:31.261299", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Purchase Invoice Trends", 
diff --git a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.json b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.json
index d7837e3..7437550 100644
--- a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.json
+++ b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-13 18:44:21", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:15:12.885723", 
+ "modified": "2018-02-21 01:28:03.622485", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Sales Invoice Trends", 
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json
index eae8241..21629f9 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.json
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.json
@@ -3101,6 +3101,37 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "collapsible_depends_on": "supplied_items", 
+   "columns": 0, 
+   "fieldname": "raw_material_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": "Raw Materials Supplied", 
+   "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, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "columns": 0, 
    "depends_on": "eval:doc.is_subcontracted", 
    "fieldname": "supplied_items_section", 
@@ -3324,7 +3355,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-01-11 14:39:36.869688", 
+ "modified": "2018-02-17 11:00:05.037716", 
  "modified_by": "Administrator", 
  "module": "Buying", 
  "name": "Purchase Order", 
diff --git a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.json b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.json
index aabb5b6..ca58c4e 100644
--- a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.json
+++ b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-13 18:45:01", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:16:13.121638", 
+ "modified": "2018-02-21 01:28:37.416562", 
  "modified_by": "Administrator", 
  "module": "Buying", 
  "name": "Purchase Order Trends", 
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 1425160..1720b1a 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -883,6 +883,7 @@
 				t1.name = t2.parent and t1.{0} = %s and t1.payment_type = %s
 				and t1.party_type = %s and t1.party = %s and t1.docstatus = 1
 				and t2.reference_doctype = %s {1}
+			order by t1.posting_date
 		""".format(party_account_field, reference_condition),
 		[party_account, payment_type, party_type, party, order_doctype] + order_list, as_dict=1)
 
@@ -894,6 +895,7 @@
 				where
 					{0} = %s and party_type = %s and party = %s and payment_type = %s
 					and docstatus = 1 and unallocated_amount > 0
+				order by posting_date
 			""".format(party_account_field), (party_account, party_type, party, payment_type), as_dict=1)
 
 	return list(payment_entries_against_order) + list(unallocated_payment_entries)
diff --git a/erpnext/docs/user/manual/en/accounts/pricing-rule.md b/erpnext/docs/user/manual/en/accounts/pricing-rule.md
index ad68b0f..c4a3eb9 100644
--- a/erpnext/docs/user/manual/en/accounts/pricing-rule.md
+++ b/erpnext/docs/user/manual/en/accounts/pricing-rule.md
@@ -52,7 +52,6 @@
 Rate or Discount specified in the Pricing Rule will be applied only if above applicability rules are matched with values in the transaction. Rate mentioned in Pricing Rule will be given priority over item's Price List rate.
 
 <img alt="Applicable Rate" class="screenshot" src="/docs/assets/img/articles/pricing-rule-price.png">
->>>>>>> Renamed price to rate in pricing rule
 
 #### 2.2 Discount Percentage
 
diff --git a/erpnext/healthcare/page/medical_record/medical_record.css b/erpnext/healthcare/page/medical_record/medical_record.css
index e76df0f..70014da 100644
--- a/erpnext/healthcare/page/medical_record/medical_record.css
+++ b/erpnext/healthcare/page/medical_record/medical_record.css
@@ -14,6 +14,10 @@
 	margin-bottom: -4px;
 }
 
+.medical_record-row > * {
+	z-index: -999;
+}
+
 .date-indicator {
     background:none;
     font-size:12px;
@@ -48,7 +52,6 @@
 .medical_record-date {
 	padding: 15px;
 	padding-right: 0px;
-	z-index: 1;
 }
 
 #page-medical_record .plot-wrapper {
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index f7f1720..a2f7e56 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -11,7 +11,7 @@
 app_license = "GNU General Public License (v3)"
 source_link = "https://github.com/frappe/erpnext"
 
-develop_version = '9.x.x-develop'
+develop_version = '10.x.x-develop'
 
 error_report_email = "support@erpnext.com"
 
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.py b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
index 50b8e01..5980753 100644
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.py
+++ b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
@@ -10,9 +10,7 @@
 from erpnext.utilities.product import get_price, get_qty_in_stock
 from six import string_types
 
-# hub_url = "http://erpnext.hub:8000"
-hub_url = "https://hub.erpnext.org"
-# hub_url = "http://192.168.29.145:3000"
+hub_url = "https://hubmarket.org"
 
 class HubSetupError(frappe.ValidationError): pass
 
@@ -102,4 +100,4 @@
 @frappe.whitelist()
 def sync():
 	hub_settings = frappe.get_doc('Hub Settings')
-	hub_settings.sync()
\ No newline at end of file
+	hub_settings.sync()
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 8fa6517..953b4bc 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -202,6 +202,14 @@
 		if not from_child_bom:
 			frappe.msgprint(_("Cost Updated"))
 
+	def update_parent_cost(self):
+		if self.total_cost:
+			cost = self.total_cost / self.quantity
+
+			frappe.db.sql("""update `tabBOM Item` set rate=%s, amount=stock_qty*%s
+				where bom_no = %s and docstatus < 2 and parenttype='BOM'""",
+				(cost, cost, self.name))
+
 	def get_bom_unitcost(self, bom_no):
 		bom = frappe.db.sql("""select name, base_total_cost/quantity as unit_cost from `tabBOM`
 			where is_active = 1 and name = %s""", bom_no, as_dict=1)
diff --git a/erpnext/manufacturing/doctype/bom/bom_tree.js b/erpnext/manufacturing/doctype/bom/bom_tree.js
index 6cbd7a2..4ec9bef 100644
--- a/erpnext/manufacturing/doctype/bom/bom_tree.js
+++ b/erpnext/manufacturing/doctype/bom/bom_tree.js
@@ -13,6 +13,7 @@
 	disable_add_node: true,
 	root_label: "BOM", //fieldname from filters
 	get_tree_root: false,
+	show_expand_all: false,
 	get_label: function(node) {
 		if(node.data.qty) {
 			return node.data.qty + " x " + node.data.item_code;
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 3b6c3a1..ec948eb 100644
--- a/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
+++ b/erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.py
@@ -13,11 +13,14 @@
 	def replace_bom(self):
 		self.validate_bom()
 		self.update_new_bom()
-		bom_list = self.get_parent_boms()
+		bom_list = self.get_parent_boms(self.new_bom)
 		updated_bom = []
 		for bom in bom_list:
 			bom_obj = frappe.get_doc("BOM", bom)
 			updated_bom = bom_obj.update_cost_and_exploded_items(updated_bom)
+			bom_obj.calculate_cost()
+			bom_obj.update_parent_cost()
+			bom_obj.db_update()
 
 		frappe.msgprint(_("BOM replaced"))
 
@@ -38,10 +41,18 @@
 			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):
-		return [d[0] for d in frappe.db.sql("""select distinct parent
-			from `tabBOM Item` where ifnull(bom_no, '') = %s and docstatus < 2 and parenttype='BOM'""",
-			self.new_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 ifnull(bom_no, '') = %s and docstatus < 2 and parenttype='BOM'""", bom)
+
+		for d in data:
+			bom_list.append(d[0])
+			self.get_parent_boms(d[0], bom_list)
+
+		return bom_list
 
 @frappe.whitelist()
 def enqueue_update_cost():
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index c4e3949..bbba837 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -504,4 +504,4 @@
 erpnext.patches.v10_0.migrate_daily_work_summary_settings_to_daily_work_summary_group
 erpnext.patches.v10_0.add_default_cash_flow_mappers
 erpnext.patches.v11_0.make_quality_inspection_template
-erpnext.patches.v10_0.update_territory_and_customer_group
+erpnext.patches.v10_0.update_territory_and_customer_group
\ No newline at end of file
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index c1b020b..f00b84f 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -92,7 +92,7 @@
 				item.amount = flt(item.rate * item.qty, precision("amount", item));
 				item.net_amount = item.amount;
 				item.item_tax_amount = 0.0;
-				item.total_weight = flt(item.weight_per_unit * item.qty);
+				item.total_weight = flt(item.weight_per_unit * item.stock_qty);
 
 				me.set_in_company_currency(item, ["price_list_rate", "rate", "amount", "net_rate", "net_amount"]);
 			});
diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py
index 8dc3bb1..e66f142 100644
--- a/erpnext/regional/report/gstr_1/gstr_1.py
+++ b/erpnext/regional/report/gstr_1/gstr_1.py
@@ -121,7 +121,6 @@
 			conditions += """ and SUBSTR(place_of_supply, 1, 2) != SUBSTR(company_gstin, 1, 2)
 				and grand_total > {0} and is_return != 1 and customer in ('{1}')""".\
 					format(flt(b2c_limit), "', '".join([frappe.db.escape(c.name) for c in customers]))
-
 		elif self.filters.get("type_of_business") ==  "B2C Small":
 			conditions += """ and (
 				SUBSTR(place_of_supply, 1, 2) = SUBSTR(company_gstin, 1, 2)
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index 72250c2..fccebd4 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -258,17 +258,22 @@
 		if (field == 'qty' && value < 0) {
 			frappe.msgprint(__("Quantity must be positive"));
 			value = item.qty;
+		} else {
+			item[field] = value;
+			if (field == "serial_no" && value) {
+				let serial_nos = value.split("\n");
+				item["qty"] = serial_nos.filter(d => {
+					return d!=="";
+				}).length;
+			}
 		}
 
-		if (field) {
-			return frappe.model.set_value(item.doctype, item.name, field, value)
-				.then(() => this.frm.script_manager.trigger('qty', item.doctype, item.name))
-				.then(() => {
-					if (field === 'qty' && item.qty === 0) {
-						frappe.model.clear_doc(item.doctype, item.name);
-					}
-				})
-		}
+		return this.frm.script_manager.trigger('qty', item.doctype, item.name)
+			.then(() => {
+				if (field === 'qty' && item.qty === 0) {
+					frappe.model.clear_doc(item.doctype, item.name);
+				}
+			})
 
 		return Promise.resolve();
 	}
@@ -285,24 +290,13 @@
 	}
 
 	submit_sales_invoice() {
-		var is_saved = 0;
-		if(!this.frm.doc.__islocal){
-			is_saved = 1;
-		}
-		frappe.confirm(__("Permanently Submit {0}?", [this.frm.doc.name]), () => {
-			frappe.call({
-				method: 'erpnext.selling.page.point_of_sale.point_of_sale.submit_invoice',
-				freeze: true,
-				args: {
-					doc: this.frm.doc,
-					is_saved: is_saved
-				}
-			}).then(r => {
-				if(r.message) {
-					this.frm.doc = r.message;
+		this.frm.savesubmit()
+			.then((r) => {
+				if (r && r.doc) {
+					this.frm.doc.docstatus = r.doc.docstatus;
 					frappe.show_alert({
 						indicator: 'green',
-						message: __(`Sales invoice ${r.message.name} created succesfully`)
+						message: __(`Sales invoice ${r.doc.name} created succesfully`)
 					});
 
 					this.toggle_editing();
@@ -310,21 +304,22 @@
 					this.set_primary_action_in_modal();
 				}
 			});
-		});
 	}
 
 	set_primary_action_in_modal() {
-		this.frm.msgbox = frappe.msgprint(
-			`<a class="btn btn-primary" onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">
-				${__('Print')}</a>
-			<a class="btn btn-default">
-				${__('New')}</a>`
-		);
+		if (!this.frm.msgbox) {
+			this.frm.msgbox = frappe.msgprint(
+				`<a class="btn btn-primary" onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">
+					${__('Print')}</a>
+				<a class="btn btn-default">
+					${__('New')}</a>`
+			);
 
-		$(this.frm.msgbox.body).find('.btn-default').on('click', () => {
-			this.frm.msgbox.hide();
-			this.make_new_invoice();
-		})
+			$(this.frm.msgbox.body).find('.btn-default').on('click', () => {
+				this.frm.msgbox.hide();
+				this.make_new_invoice();
+			})
+		}
 	}
 
 	change_pos_profile() {
@@ -493,11 +488,6 @@
 		//
 		// }).addClass('visible-xs');
 
-		this.page.add_menu_item(__("Form View"), function () {
-			frappe.model.sync(me.frm.doc);
-			frappe.set_route("Form", me.frm.doc.doctype, me.frm.doc.name);
-		});
-
 		this.page.add_menu_item(__("POS Profile"), function () {
 			frappe.set_route('List', 'POS Profile');
 		});
@@ -606,6 +596,7 @@
 		this.$taxes_and_totals.html(this.get_taxes_and_totals());
 		this.numpad && this.numpad.reset_value();
 		this.customer_field.set_value("");
+		this.frm.msgbox = "";
 
 		this.$discount_amount.find('input:text').val('');
 		this.wrapper.find('.grand-total-value').text(
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.py b/erpnext/selling/page/point_of_sale/point_of_sale.py
index bbfb5ad..fe13432 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.py
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.py
@@ -90,23 +90,6 @@
 
 	return '%%%s%%'%(frappe.db.escape(item_code)), condition
 
-@frappe.whitelist()
-def submit_invoice(doc,is_saved):
-	if isinstance(doc, string_types):
-		args = json.loads(doc)
-
-	if(cint(is_saved) == 1):
-		doc = frappe.get_doc('Sales Invoice',args["name"])
-	else:
-		doc = frappe.new_doc('Sales Invoice')
-
-	doc.update(args)
-	doc.run_method("set_missing_values")
-	doc.run_method("calculate_taxes_and_totals")
-	doc.submit()
-
-	return doc
-
 def get_item_group_condition(pos_profile):
 	cond = "and 1=1"
 	item_groups = get_item_groups(pos_profile)
diff --git a/erpnext/selling/report/quotation_trends/quotation_trends.json b/erpnext/selling/report/quotation_trends/quotation_trends.json
index 0dae26b..5587cc6 100644
--- a/erpnext/selling/report/quotation_trends/quotation_trends.json
+++ b/erpnext/selling/report/quotation_trends/quotation_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-07 16:01:16", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:15:33.967044", 
+ "modified": "2018-02-21 01:28:14.928929", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Quotation Trends", 
diff --git a/erpnext/selling/report/sales_order_trends/sales_order_trends.json b/erpnext/selling/report/sales_order_trends/sales_order_trends.json
index 1ae8957..9dfc7d0 100644
--- a/erpnext/selling/report/sales_order_trends/sales_order_trends.json
+++ b/erpnext/selling/report/sales_order_trends/sales_order_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-13 18:43:30", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:15:01.634392", 
+ "modified": "2018-02-20 08:05:46.191588", 
  "modified_by": "Administrator", 
  "module": "Selling", 
  "name": "Sales Order Trends", 
diff --git a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
index 558a9af..025e740 100644
--- a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
+++ b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.py
@@ -13,10 +13,8 @@
 	entries = get_entries(filters)
 	item_details = get_item_details()
 	data = []
-	total_contribution_amount = 0
-	for d in entries:
-		total_contribution_amount += flt(d.contribution_amt)
 
+	for d in entries:
 		data.append([
 			d.name, d.customer, d.territory, d.posting_date, d.item_code,
 			item_details.get(d.item_code, {}).get("item_group"), item_details.get(d.item_code, {}).get("brand"),
@@ -25,8 +23,6 @@
 
 	if data:
 		total_row = [""]*len(data[0])
-		total_row[0] = _("Total")
-		total_row[-1] = total_contribution_amount
 		data.append(total_row)
 
 	return columns, data
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.py b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
index 7599cd2..45de5e7 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.py
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.py
@@ -163,9 +163,9 @@
 
 		if delivery_stop_info.delivery_notes:
 			delivery_notes = (delivery_stop_info.delivery_notes).split(",")
+			default_print_format = frappe.get_meta('Delivery Note').default_print_format
 			attachments = []
 			for delivery_note in delivery_notes:
-				default_print_format = frappe.get_value('Delivery Note', delivery_note, 'default_print_format')
 				attachments.append(
 					frappe.attach_print('Delivery Note',
 	 					 delivery_note,
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
index f51652c..d36b6cf 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py
@@ -109,9 +109,9 @@
 			# set valuation amount in pr item
 			doc.update_valuation_rate("items")
 
-			# save will update landed_cost_voucher_amount and voucher_amount in PR,
-			# as those fields are allowed to edit after submit
-			doc.save()
+			# db_update will update and save landed_cost_voucher_amount and voucher_amount in PR
+			for item in doc.get("items"):
+				item.db_update()
 
 			# update latest valuation rate in serial no
 			self.update_rate_in_serial_no(doc)
diff --git a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.json b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.json
index 29aeab1..fe133e9 100644
--- a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.json
+++ b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-13 18:42:11", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:18:32.793637", 
+ "modified": "2018-02-21 01:28:47.049042", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Delivery Note Trends", 
diff --git a/erpnext/stock/report/item_balance/__init__.py b/erpnext/stock/report/item_balance/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/stock/report/item_balance/__init__.py
diff --git a/erpnext/stock/report/item_balance/item_balance.json b/erpnext/stock/report/item_balance/item_balance.json
new file mode 100644
index 0000000..af58fb2
--- /dev/null
+++ b/erpnext/stock/report/item_balance/item_balance.json
@@ -0,0 +1,30 @@
+{
+ "add_total_row": 0, 
+ "apply_user_permissions": 1, 
+ "creation": "2018-02-17 19:52:16.370979", 
+ "disabled": 0, 
+ "docstatus": 0, 
+ "doctype": "Report", 
+ "idx": 0, 
+ "is_standard": "Yes", 
+ "modified": "2018-02-19 12:03:53.902167", 
+ "modified_by": "Administrator", 
+ "module": "Stock", 
+ "name": "Item Balance (Simple)", 
+ "owner": "Administrator", 
+ "query": "select a.item_code as \"Item:Link/Item:120\",\n\t  a.item_name as \"Item Name::150\",\n\t  a.item_group as \"Item Group:Link/Item Group:120\",\n\t  a.brand as \"Brand:Link/Brand:120\",\n\t  a.description as \"Description::150\",\n\t  b.warehouse as \"Warehouse:Link/Warehouse:120\",\n\t  b.actual_qty as \"Balance Qty:Float:140\"\n from `tabItem` a left join `tabBin` b\n ON a.item_code = b.item_code", 
+ "ref_doctype": "Bin", 
+ "report_name": "Item Balance (Simple)", 
+ "report_type": "Query Report", 
+ "roles": [
+  {
+   "role": "Sales User"
+  }, 
+  {
+   "role": "Purchase User"
+  }, 
+  {
+   "role": "Stock User"
+  }
+ ]
+}
diff --git a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.json b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.json
index 3a09b43..696f816 100644
--- a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.json
+++ b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.json
@@ -1,5 +1,5 @@
 {
- "add_total_row": 0, 
+ "add_total_row": 1, 
  "apply_user_permissions": 1, 
  "creation": "2013-06-13 18:45:44", 
  "disabled": 0, 
@@ -7,7 +7,7 @@
  "doctype": "Report", 
  "idx": 3, 
  "is_standard": "Yes", 
- "modified": "2017-02-24 20:16:00.211762", 
+ "modified": "2018-02-21 01:28:22.682161", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Purchase Receipt Trends", 
diff --git a/erpnext/templates/emails/reorder_item.html b/erpnext/templates/emails/reorder_item.html
index c4039e3..c1aa897 100644
--- a/erpnext/templates/emails/reorder_item.html
+++ b/erpnext/templates/emails/reorder_item.html
@@ -7,8 +7,9 @@
 			<tr>
 				<th style="border: 1px solid #d1d8dd; width: 35%; text-align: left; padding: 5px;">{{ _("Item") }}</th>
 				<th style="border: 1px solid #d1d8dd; width: 35%; text-align: left; padding: 5px;">{{ _("Warehouse") }}</th>
-				<th style="border: 1px solid #d1d8dd; width: 20%; text-align: right; padding: 5px;">{{ _("Quantity") }}</th>
+				<th style="border: 1px solid #d1d8dd; width: 10%; text-align: right; padding: 5px;">{{ _("Quantity") }}</th>
 				<th style="border: 1px solid #d1d8dd; width: 10%; text-align: left; padding: 5px;">{{ _("UOM") }}</th>
+				<th style="border: 1px solid #d1d8dd; width: 10%; text-align: left; padding: 5px;">{{ _("Balance Qty") }}</th>
 			</tr>
 		</thead>
 		<tbody>
@@ -21,6 +22,7 @@
 				<td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ item.warehouse }}</td>
 				<td style="border: 1px solid #d1d8dd; text-align: right; padding: 5px;">{{ item.qty }}</td>
 				<td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ item.uom }}</td>
+				<td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ item.balance_qty }}</td>
 			</tr>
 			{%- endfor %}
 		</tbody>
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.js b/erpnext/utilities/doctype/rename_tool/rename_tool.js
index 77d2ba3..7823055 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.js
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.js
@@ -13,6 +13,9 @@
 	},
 	refresh: function(frm) {
 		frm.disable_save();
+		if (!frm.doc.file_to_rename) {
+			frm.get_field("rename_log").$wrapper.html("");
+		}
 		frm.page.set_primary_action(__("Rename"), function() {
 			frm.get_field("rename_log").$wrapper.html("<p>Renaming...</p>");
 			frappe.call({
diff --git a/erpnext/utilities/page/leaderboard/leaderboard.js b/erpnext/utilities/page/leaderboard/leaderboard.js
index 7e70f76..746ac79 100644
--- a/erpnext/utilities/page/leaderboard/leaderboard.js
+++ b/erpnext/utilities/page/leaderboard/leaderboard.js
@@ -17,14 +17,15 @@
 		this.$sidebar_list = this.page.sidebar.find('ul');
 
 		// const list of doctypes
-		this.doctypes = ["Customer", "Item", "Supplier", "Sales Partner"];
+		this.doctypes = ["Customer", "Item", "Supplier", "Sales Partner","Sales Person"];
 		this.timespans = ["Week", "Month", "Quarter", "Year"];
-		this.desc_fields = ["total_amount", "total_request", "annual_billing", "commission_rate"];
 		this.filters = {
-			"Customer": ["total_amount", "total_item_purchased"],
-			"Item": ["total_request", "total_purchase", "avg_price"],
-			"Supplier": ["annual_billing", "total_unpaid"],
-			"Sales Partner": ["commission_rate", "target_qty", "target_amount"],
+			"Customer": ["total_sales_amount", "total_qty_sold", "outstanding_amount", ],
+			"Item": ["total_sales_amount", "total_qty_sold", "total_purchase_amount",
+				"total_qty_purchased", "available_stock_qty", "available_stock_value"],
+			"Supplier": ["total_purchase_amount", "total_qty_purchased", "outstanding_amount"],
+			"Sales Partner": ["total_sales_amount", "total_commision"],
+			"Sales Person": ["total_sales_amount"],
 		};
 
 		// for saving current selected filters
@@ -58,14 +59,24 @@
 			this.get_sidebar_item(doctype).appendTo(this.$sidebar_list);
 		});
 
+		this.company_select = this.page.add_field({
+			fieldname: 'company',
+			label: __('Company'),
+			fieldtype:'Link',
+			options:'Company',
+			default:frappe.defaults.get_default('company'),
+			reqd: 1,
+			change: function() {
+				me.options.selected_company = this.value;
+				me.make_request($container);
+			}
+		});
 		this.timespan_select = this.page.add_select(__("Timespan"),
 			this.timespans.map(d => {
 				return {"label": __(d), value: d }
 			})
 		);
 
-		// this.timespan_select.val(this.timespans[1]);
-
 		this.type_select = this.page.add_select(__("Type"),
 			me.options.selected_filter.map(d => {
 				return {"label": __(frappe.model.unscrub(d)), value: d }
@@ -76,6 +87,7 @@
 			let $li = $(this);
 			let doctype = $li.find('span').html();
 
+			me.options.selected_company = frappe.defaults.get_default('company');
 			me.options.selected_doctype = doctype;
 			me.options.selected_filter = me.filters[doctype];
 			me.options.selected_filter_item = me.filters[doctype][0];
@@ -114,16 +126,18 @@
 		});
 	},
 
-	get_leaderboard: function (notify, $container, start=0) {
+	get_leaderboard: function (notify, $container) {
 		var me = this;
-
+		if(!me.options.selected_company) {
+			frappe.throw(__("Please select Company"));
+		}
 		frappe.call({
 			method: "erpnext.utilities.page.leaderboard.leaderboard.get_leaderboard",
 			args: {
 				doctype: me.options.selected_doctype,
 				timespan: me.options.selected_timespan,
+				company: me.options.selected_company,
 				field: me.options.selected_filter_item,
-				start: start
 			},
 			callback: function (r) {
 				let results = r.message || [];
@@ -256,28 +270,27 @@
 
 	get_item_html: function (item) {
 		var me = this;
-		const _selected_filter = me.options.selected_filter
-			.map(i => frappe.model.unscrub(i));
-		const fields = ['name', me.options.selected_filter_item];
+		const company = me.options.selected_company;
+		const currency = frappe.get_doc(":Company", company).default_currency;
+		const fields = ['name','value'];
 
 		const html =
 			`<div class="list-item">
 				${
-			fields.map(filter => {
-					const col = frappe.model.unscrub(filter);
-					let val = item[filter];
-					if (col === "Modified") {
-						val = comment_when(val);
+			fields.map(col => {
+					let val = item[col];
+					if(col=="name") {
+						var formatted_value = `<a class="grey list-id ellipsis" 
+							href="#Form/${me.options.selected_doctype}/${item["name"]}"> ${val} </a>`
+					} else {
+						var formatted_value = `<span class="text-muted ellipsis">
+							${(me.options.selected_filter_item.indexOf('qty') == -1) ? format_currency(val, currency) : val}</span>`
 					}
+
 					return (
 						`<div class="list-item_content ellipsis list-item__content--flex-2
-							${(col !== "Name" && col !== "Modified") ? "hidden-xs" : ""}
-							${(col && _selected_filter.indexOf(col) !== -1) ? "text-right" : ""}">
-							${
-								col === "Name"
-									? `<a class="grey list-id ellipsis" href="${item["href"]}"> ${val} </a>`
-									: `<span class="text-muted ellipsis"> ${val}</span>`
-							}
+							${(col == "value") ? "text-right" : ""}">
+							${formatted_value}
 						</div>`);
 					}).join("")
 				}
diff --git a/erpnext/utilities/page/leaderboard/leaderboard.py b/erpnext/utilities/page/leaderboard/leaderboard.py
index 58d480e..87cf2a4 100644
--- a/erpnext/utilities/page/leaderboard/leaderboard.py
+++ b/erpnext/utilities/page/leaderboard/leaderboard.py
@@ -3,148 +3,141 @@
 
 from __future__ import unicode_literals, print_function
 import frappe
-import json
-from operator import itemgetter
-from frappe.utils import add_to_date, fmt_money
-from erpnext.accounts.party import get_dashboard_info
-from erpnext.accounts.utils import get_currency_precision
+from frappe.utils import add_to_date
 
 @frappe.whitelist()
-def get_leaderboard(doctype, timespan, field, start=0):
+def get_leaderboard(doctype, timespan, company, field):
 	"""return top 10 items for that doctype based on conditions"""
-
-	filters = {"modified":(">=", get_date_from_string(timespan))}
-	items = []
+	from_date = get_from_date(timespan)
+	records = []
 	if doctype == "Customer":
-		items = get_all_customers(doctype, filters, [], field)
+		records = get_all_customers(from_date, company, field)
 	elif  doctype == "Item":
-		items = get_all_items(doctype, filters, [], field)
+		records = get_all_items(from_date, company, field)
 	elif  doctype == "Supplier":
-		items = get_all_suppliers(doctype, filters, [], field)
+		records = get_all_suppliers(from_date, company, field)
 	elif  doctype == "Sales Partner":
-		items = get_all_sales_partner(doctype, filters, [], field)
+		records = get_all_sales_partner(from_date, company, field)
+	elif doctype == "Sales Person":
+		records = get_all_sales_person(from_date, company)
 
-	if len(items) > 0:
-		return items
-	return []
+	return records
 
-def get_all_customers(doctype, filters, items, field, start=0, limit=20):
-	"""return all customers"""
+def get_all_customers(from_date, company, field):
+	if field == "outstanding_amount":
+		return frappe.db.sql("""
+			select customer as name, sum(outstanding_amount) as value
+			FROM `tabSales Invoice`
+			where docstatus = 1 and posting_date >= %s and company = %s
+			group by customer
+			order by value DESC
+			limit 20
+		""", (from_date, company), as_dict=1)
+	else:
+		if field == "total_sales_amount":
+			select_field = "sum(so_item.base_net_amount)"
+		elif field == "total_qty_sold":
+			select_field = "sum(so_item.stock_qty)"
 
-	x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit)
+		return frappe.db.sql("""
+			select so.customer as name, {0} as value
+			FROM `tabSales Order` as so JOIN `tabSales Order Item` as so_item
+				ON so.name = so_item.parent
+			where so.docstatus = 1 and so.transaction_date >= %s and so.company = %s
+			group by so.customer
+			order by value DESC
+			limit 20
+		""".format(select_field), (from_date, company), as_dict=1)
 
-	for val in x:
-		y = dict(frappe.db.sql('''select name, grand_total from `tabSales Invoice`\
-			where customer = %s and docstatus != 2''', (val.name)))
-		invoice_list = y.keys()
-		if len(invoice_list) > 0:
-			item_count = frappe.db.sql('''select count(name) from `tabSales Invoice Item` where parent in (%s)''' % ", ".join(
-				['%s'] * len(invoice_list)), tuple(invoice_list))
+def get_all_items(from_date, company, field):
+	if field in ("available_stock_qty", "available_stock_value"):
+		return frappe.db.sql("""
+			select item_code as name, {0} as value
+			from tabBin
+			group by item_code
+			order by value desc
+			limit 20
+		""".format("sum(actual_qty)" if field=="available_stock_qty" else "sum(stock_value)"), as_dict=1)
+	else:
+		if field == "total_sales_amount":
+			select_field = "sum(order_item.base_net_amount)"
+			select_doctype = "Sales Order"
+		elif field == "total_purchase_amount":
+			select_field = "sum(order_item.base_net_amount)"
+			select_doctype = "Purchase Order"
+		elif field == "total_qty_sold":
+			select_field = "sum(order_item.stock_qty)"
+			select_doctype = "Sales Order"
+		elif field == "total_qty_purchased":
+			select_field = "sum(order_item.stock_qty)"
+			select_doctype = "Purchase Order"
 
-			value = 0
-			if(field=="total_amount"):
-				value = sum(y.values())
-			elif(field=="total_item_purchased"):
-				value = sum(destructure_tuple_of_tuples(item_count))
+		return frappe.db.sql("""
+			select order_item.item_code as name, {0} as value
+			from `tab{1}` sales_order join `tab{1} Item` as order_item
+				on sales_order.name = order_item.parent
+			where sales_order.docstatus = 1
+				and sales_order.company = %s and sales_order.transaction_date >= %s
+			group by order_item.item_code
+			order by value desc
+			limit 20
+		""".format(select_field, select_doctype), (company, from_date), as_dict=1)
 
-			item_obj = {"name": val.name,
-				"total_amount": get_formatted_value(sum(y.values())),
-				"total_item_purchased": sum(destructure_tuple_of_tuples(item_count)),
-				"href":"#Form/Customer/" + val.name,
-				"value": value}
-			items.append(item_obj)
+def get_all_suppliers(from_date, company, field):
+	if field == "outstanding_amount":
+		return frappe.db.sql("""
+			select supplier as name, sum(outstanding_amount) as value
+			FROM `tabPurchase Invoice`
+			where docstatus = 1 and posting_date >= %s and company = %s
+			group by supplier
+			order by value DESC
+			limit 20""", (from_date, company), as_dict=1)
+	else:
+		if field == "total_purchase_amount":
+			select_field = "sum(purchase_order_item.base_net_amount)"
+		elif field == "total_qty_purchased":
+			select_field = "sum(purchase_order_item.stock_qty)"
 
-	items.sort(key=lambda k: k['value'], reverse=True)
-	return items
+		return frappe.db.sql("""
+			select purchase_order.supplier as name, {0} as value
+			FROM `tabPurchase Order` as purchase_order LEFT JOIN `tabPurchase Order Item`
+				as purchase_order_item ON purchase_order.name = purchase_order_item.parent
+			where purchase_order.docstatus = 1 and  purchase_order.modified >= %s
+				and  purchase_order.company = %s
+			group by purchase_order.supplier
+			order by value DESC
+			limit 20""".format(select_field), (from_date, company), as_dict=1)
 
-def get_all_items(doctype, filters, items, field, start=0, limit=20):
-	"""return all items"""
+def get_all_sales_partner(from_date, company, field):
+	if field == "total_sales_amount":
+		select_field = "sum(base_net_total)"
+	elif field == "total_commission":
+		select_field = "sum(total_commission)"
 
-	x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit)
-	for val in x:
-		data = frappe.db.sql('''select item_code from `tabMaterial Request Item` where item_code = %s''', (val.name), as_list=1)
-		requests = destructure_tuple_of_tuples(data)
-		data = frappe.db.sql('''select price_list_rate from `tabItem Price` where item_code = %s''', (val.name), as_list=1)
-		avg_price = get_avg(destructure_tuple_of_tuples(data))
-		data = frappe.db.sql('''select item_code from `tabPurchase Invoice Item` where item_code = %s''', (val.name), as_list=1)
-		purchases = destructure_tuple_of_tuples(data)
+	return frappe.db.sql("""
+		select sales_partner as name, {0} as value
+		from `tabSales Order`
+	 	where ifnull(sales_partner, '') != '' and docstatus = 1
+			and transaction_date >= %s and company = %s
+	 	group by sales_partner
+	 	order by value DESC
+	 	limit 20
+	""".format(select_field), (from_date, company), as_dict=1)
 
-		value = 0
-		if(field=="total_request"):
-			value = len(requests)
-		elif(field=="total_purchase"):
-			value = len(purchases)
-		elif(field=="avg_price"):
-			value=avg_price
-		item_obj = {"name": val.name,
-			"total_request":len(requests),
-			"total_purchase": len(purchases),
-			"avg_price": get_formatted_value(avg_price),
-			"href":"#Form/Item/" + val.name,
-			"value": value}
-		items.append(item_obj)
+def get_all_sales_person(from_date, company):
+	return frappe.db.sql("""
+		select sales_team.sales_person as name, sum(sales_order.base_net_total) as value
+		from `tabSales Order` as sales_order join `tabSales Team` as sales_team
+			on sales_order.name = sales_team.parent and sales_team.parenttype = 'Sales Order'
+	 	where sales_order.docstatus = 1
+			and sales_order.transaction_date >= %s
+			and sales_order.company = %s
+	 	group by sales_team.sales_person
+	 	order by value DESC
+	 	limit 20
+	""", (from_date, company), as_dict=1)
 
-	items.sort(key=lambda k: k['value'], reverse=True)
-	return items
-
-def get_all_suppliers(doctype, filters, items, field, start=0, limit=20):
-	"""return all suppliers"""
-
-	x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit)
-
-	for val in x:
-
-		info = get_dashboard_info(doctype, val.name)
-		value = 0
-		if(field=="annual_billing"):
-			value = info["billing_this_year"]
-		elif(field=="total_unpaid"):
-			value = abs(info["total_unpaid"])
-
-		item_obj = {"name": val.name,
-			"annual_billing":  get_formatted_value(info["billing_this_year"]),
-			"total_unpaid": get_formatted_value(abs(info["total_unpaid"])),
-			"href":"#Form/Supplier/" + val.name,
-			"value": value}
-		items.append(item_obj)
-
-	items.sort(key=lambda k: k['value'], reverse=True)
-	return items
-
-def get_all_sales_partner(doctype, filters, items, field, start=0, limit=20):
-	"""return all sales partner"""
-
-	x = frappe.get_list(doctype, fields=["name", "commission_rate", "modified"], filters=filters, limit_start=start, limit_page_length=limit)
-	for val in x:
-		y = frappe.db.sql('''select target_qty, target_amount from `tabTarget Detail` where parent = %s''', (val.name), as_dict=1)
-		target_qty = sum([f["target_qty"] for f in y])
-		target_amount = sum([f["target_amount"] for f in y])
-
-		value = 0
-		if(field=="commission_rate"):
-			value = val.commission_rate
-		elif(field=="target_qty"):
-			value = target_qty
-		elif(field=="target_amount"):
-			value = target_qty
-
-		item_obj = {"name": val.name,
-			"commission_rate": get_formatted_value(val.commission_rate, False),
-			"target_qty": target_qty,
-			"target_amount": get_formatted_value(target_qty),
-			"href":"#Form/Sales Partner/" + val.name,
-			"value": value}
-		items.append(item_obj)
-
-	items.sort(key=lambda k: k['value'], reverse=True)
-	return items
-
-
-def destructure_tuple_of_tuples(tup_of_tup):
-	"""return tuple(tuples) as list"""
-	return [y for x in tup_of_tup for y in x]
-
-def get_date_from_string(seleted_timespan):
+def get_from_date(seleted_timespan):
 	"""return string for ex:this week as date:string"""
 	days = months = years = 0
 	if "month" == seleted_timespan.lower():
@@ -156,24 +149,5 @@
 	else:
 		days = -7
 
-	return add_to_date(None, years=years, months=months, days=days, as_string=True, as_datetime=True)
-
-def get_filter_list(selected_filter):
-	"""return list of keys"""
-	return map((lambda y : y["field"]), filter(lambda x : not (x["field"] == "name" or x["field"] == "modified"), selected_filter))
-
-def get_avg(items):
-	"""return avg of list items"""
-	length = len(items)
-	if length > 0:
-		return sum(items) / length
-	return 0
-
-def get_formatted_value(value, add_symbol=True):
-	"""return formatted value"""
-	if not add_symbol:
-		return '{:.{pre}f}'.format(value, pre=(get_currency_precision() or 2))
-	currency_precision = get_currency_precision() or 2
-	company = frappe.db.get_default("company")
-	currency = frappe.get_doc("Company", company).default_currency or frappe.boot.sysdefaults.currency
-	return fmt_money(value, currency_precision, currency)
+	return add_to_date(None, years=years, months=months, days=days,
+		as_string=True, as_datetime=True)
\ No newline at end of file
diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py
index 3873213..cdb0e14 100644
--- a/erpnext/utilities/user_progress.py
+++ b/erpnext/utilities/user_progress.py
@@ -45,7 +45,7 @@
 			help=_("Set a sales goal you'd like to achieve for your company."),
 			fields=[
 				{"fieldtype":"Currency", "fieldname":"monthly_sales_target",
-					"label":_("Monthly Sales Target (" + currency + ")")},
+					"label":_("Monthly Sales Target (" + currency + ")"), "reqd":1},
 			],
 			submit_method="erpnext.utilities.user_progress_utils.set_sales_target",
 			done_state_title=_("Go to " + company),