Merge pull request #36590 from ruthra-kumar/disallow_multiple_so_if_blocked_in_settings
fix: disallow mulitple SO with same Purchase Order No if not enabled in Settings
This commit is contained in:
		
						commit
						713880aef0
					
				| @ -108,18 +108,26 @@ class SalesOrder(SellingController): | ||||
| 				and customer = %s", | ||||
| 				(self.po_no, self.name, self.customer), | ||||
| 			) | ||||
| 			if ( | ||||
| 				so | ||||
| 				and so[0][0] | ||||
| 				and not cint( | ||||
| 			if so and so[0][0]: | ||||
| 				if cint( | ||||
| 					frappe.db.get_single_value("Selling Settings", "allow_against_multiple_purchase_orders") | ||||
| 				) | ||||
| 			): | ||||
| 				frappe.msgprint( | ||||
| 					_("Warning: Sales Order {0} already exists against Customer's Purchase Order {1}").format( | ||||
| 						so[0][0], self.po_no | ||||
| 				): | ||||
| 					frappe.msgprint( | ||||
| 						_("Warning: Sales Order {0} already exists against Customer's Purchase Order {1}").format( | ||||
| 							frappe.bold(so[0][0]), frappe.bold(self.po_no) | ||||
| 						) | ||||
| 					) | ||||
| 				else: | ||||
| 					frappe.throw( | ||||
| 						_( | ||||
| 							"Sales Order {0} already exists against Customer's Purchase Order {1}. To allow multiple Sales Orders, Enable {2} in {3}" | ||||
| 						).format( | ||||
| 							frappe.bold(so[0][0]), | ||||
| 							frappe.bold(self.po_no), | ||||
| 							frappe.bold(_("'Allow Multiple Sales Orders Against a Customer's Purchase Order'")), | ||||
| 							get_link_to_form("Selling Settings", "Selling Settings"), | ||||
| 						) | ||||
| 					) | ||||
| 				) | ||||
| 
 | ||||
| 	def validate_for_items(self): | ||||
| 		for d in self.get("items"): | ||||
|  | ||||
| @ -2055,7 +2055,7 @@ def make_sales_order(**args): | ||||
| 	so.company = args.company or "_Test Company" | ||||
| 	so.customer = args.customer or "_Test Customer" | ||||
| 	so.currency = args.currency or "INR" | ||||
| 	so.po_no = args.po_no or "12345" | ||||
| 	so.po_no = args.po_no or "" | ||||
| 	if args.selling_price_list: | ||||
| 		so.selling_price_list = args.selling_price_list | ||||
| 
 | ||||
|  | ||||
| @ -703,7 +703,7 @@ class TestDeliveryNote(FrappeTestCase): | ||||
| 
 | ||||
| 	def test_dn_billing_status_case1(self): | ||||
| 		# SO -> DN -> SI | ||||
| 		so = make_sales_order() | ||||
| 		so = make_sales_order(po_no="12345") | ||||
| 		dn = create_dn_against_so(so.name, delivered_qty=2) | ||||
| 
 | ||||
| 		self.assertEqual(dn.status, "To Bill") | ||||
| @ -730,7 +730,7 @@ class TestDeliveryNote(FrappeTestCase): | ||||
| 			make_sales_invoice, | ||||
| 		) | ||||
| 
 | ||||
| 		so = make_sales_order() | ||||
| 		so = make_sales_order(po_no="12345") | ||||
| 
 | ||||
| 		si = make_sales_invoice(so.name) | ||||
| 		si.get("items")[0].qty = 5 | ||||
| @ -774,7 +774,7 @@ class TestDeliveryNote(FrappeTestCase): | ||||
| 
 | ||||
| 		frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) | ||||
| 
 | ||||
| 		so = make_sales_order() | ||||
| 		so = make_sales_order(po_no="12345") | ||||
| 
 | ||||
| 		dn1 = make_delivery_note(so.name) | ||||
| 		dn1.get("items")[0].qty = 2 | ||||
| @ -820,7 +820,7 @@ class TestDeliveryNote(FrappeTestCase): | ||||
| 		from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_delivery_note | ||||
| 		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice | ||||
| 
 | ||||
| 		so = make_sales_order() | ||||
| 		so = make_sales_order(po_no="12345") | ||||
| 
 | ||||
| 		si = make_sales_invoice(so.name) | ||||
| 		si.submit() | ||||
| @ -1227,6 +1227,7 @@ class TestDeliveryNote(FrappeTestCase): | ||||
| 		self.assertEqual(get_reserved_qty(item, warehouse), 0 if dont_reserve_qty else qty_to_reserve) | ||||
| 
 | ||||
| 	def tearDown(self): | ||||
| 		frappe.db.rollback() | ||||
| 		frappe.db.set_single_value("Selling Settings", "dont_reserve_sales_order_qty_on_sales_return", 0) | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user