feat(pos): mpesa related fixes & additions (#24306)

* fix: switching of mode of payments

* feat: transaction limit for mpesa integration

* feat: resend payment request if one fails

* feat: make new request only for failed ones

* fix: invalid amount for mpesa request

* fix: payment successful message not shown

* fix: url and business shortcode for live env

* fix: duplicate items validation for pos invoices

* fix: pos closing entry queued status

* fix: peroid end date for amended pos closing
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 6abfe04..c61b67b 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -446,9 +446,13 @@
 		check_list, chk_dupl_itm = [], []
 		if cint(frappe.db.get_single_value("Selling Settings", "allow_multiple_items")):
 			return
+		if self.doctype == "Sales Invoice" and self.is_consolidated:
+			return
+		if self.doctype == "POS Invoice":
+			return
 
 		for d in self.get('items'):
-			if self.doctype in ["POS Invoice","Sales Invoice"]:
+			if self.doctype == "Sales Invoice":
 				stock_items = [d.item_code, d.description, d.warehouse, d.sales_order or d.delivery_note, d.batch_no or '']
 				non_stock_items = [d.item_code, d.description, d.sales_order or d.delivery_note]
 			elif self.doctype == "Delivery Note":