Fixed merge conflict
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index f07e9f2..d78f9f7 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__ = '9.2.23'
+__version__ = '9.2.24'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 9c75257..496f412 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -409,7 +409,7 @@
 		}
 
 		// Make read only if Accounts Settings doesn't allow stale rates
-		frm.set_df_property("source_exchange_rate", "read_only", erpnext.stale_rate_allowed());
+		frm.set_df_property("source_exchange_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
 	},
 
 	target_exchange_rate: function(frm) {
@@ -430,7 +430,7 @@
 		frm.set_paid_amount_based_on_received_amount = false;
 
 		// Make read only if Accounts Settings doesn't allow stale rates
-		frm.set_df_property("target_exchange_rate", "read_only", erpnext.stale_rate_allowed());
+		frm.set_df_property("target_exchange_rate", "read_only", erpnext.stale_rate_allowed() ? 0 : 1);
 	},
 
 	paid_amount: function(frm) {
diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
index a01cc0f..a0e56de 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
@@ -7,12 +7,14 @@
 			"label": __("From Date"),
 			"fieldtype": "Date",
 			"default": frappe.datetime.get_today(),
+			"reqd": 1,
 			"width": "80"
 		},
 		{
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
+			"reqd": 1,
 			"default": frappe.datetime.get_today()
 		},
 		{
diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
index b46f1be..3fcc1d3 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
@@ -37,11 +37,11 @@
 
 def get_conditions(filters):
 	conditions = ""
-	if filters.get("company"): conditions += " a.company=%(company)s"
+	if filters.get("from_date"): conditions += "a.posting_date >= %(from_date)s"
+	if filters.get("to_date"): conditions += " and a.posting_date <= %(to_date)s"
+	if filters.get("company"): conditions += " and a.company=%(company)s"
 	if filters.get("customer"): conditions += " and a.customer = %(customer)s"
 	if filters.get("owner"): conditions += " and a.owner = %(owner)s"
-	if filters.get("from_date"): conditions += " and a.posting_date >= %(from_date)s"
-	if filters.get("to_date"): conditions += " and a.posting_date <= %(to_date)s"
 	if filters.get("is_pos"): conditions += " and a.is_pos = %(is_pos)s"
 	return conditions
 
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 41670e0..1e723b1 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -522,6 +522,7 @@
 	# Did not use qty_consumed_per_unit in the query, as it leads to rounding loss
 	query = """select
 				bom_item.item_code,
+				bom_item.idx,
 				item.item_name,
 				sum(bom_item.stock_qty/ifnull(bom.quantity, 1)) * %(qty)s as qty,
 				item.description,
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 5e1bd8b..75d5ce9 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -171,7 +171,10 @@
 erpnext.utils.get_shipping_address = function(frm, callback){
 	frappe.call({
 		method: "frappe.contacts.doctype.address.address.get_shipping_address",
-		args: {company: frm.doc.company},
+		args: {
+			company: frm.doc.company,
+			address: frm.doc.shipping_address
+		},
 		callback: function(r){
 			if(r.message){
 				frm.set_value("shipping_address", r.message[0]) //Address title or name
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 a058fdf..386e18d 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -1081,7 +1081,7 @@
 			}
 			curr_row += all_items[i];
 
-			if(i == all_items.length - 1 && all_items.length % 4 !== 0) {
+			if(i == all_items.length - 1) {
 				row_items.push(curr_row);
 			}
 		}
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 8eb2bd2..6a6c667 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -50,6 +50,9 @@
 		self.validate_with_material_request()
 		self.validate_batch()
 
+		if not self.from_bom:
+			self.fg_completed_qty = 0.0
+
 		if self._action == 'submit':
 			self.make_batches('t_warehouse')
 		else:
@@ -372,6 +375,7 @@
 		if self.purpose == "Subcontract" and self.purchase_order:
 			purchase_order = frappe.get_doc("Purchase Order", self.purchase_order)
 			for se_item in self.items:
+				precision = cint(frappe.db.get_default("float_precision")) or 3
 				total_allowed = sum([flt(d.required_qty) for d in purchase_order.supplied_items \
 					if d.rm_item_code == se_item.item_code])
 				if not total_allowed:
@@ -385,7 +389,7 @@
 						and `tabStock Entry Detail`.parent = `tabStock Entry`.name""",
 							(self.purchase_order, se_item.item_code))[0][0]
 
-				if total_supplied > total_allowed:
+				if flt(total_supplied, precision) > flt(total_allowed, precision):
 					frappe.throw(_("Row {0}# Item {1} cannot be transferred more than {2} against Purchase Order {3}")
 						.format(se_item.idx, se_item.item_code, total_allowed, self.purchase_order))
 
@@ -793,6 +797,9 @@
 			se_child.expense_account = item_dict[d].get("expense_account") or expense_account
 			se_child.cost_center = item_dict[d].get("cost_center") or cost_center
 
+			if item_dict[d].get("idx"):
+				se_child.idx = item_dict[d].get("idx")
+
 			if se_child.s_warehouse==None:
 				se_child.s_warehouse = self.from_warehouse
 			if se_child.t_warehouse==None: