@@ -166,29 +166,46 @@ def validate_items(self):
166166 _ ("Row {0}: Item {1} must be a subcontracted item." ).format (item .idx , item .item_name )
167167 )
168168
169- if self .doctype != "Subcontracting Receipt" and item .qty > flt (
170- get_pending_subcontracted_quantity (
171- self .doctype ,
172- self .purchase_order if self .doctype == "Subcontracting Order" else self .sales_order ,
173- ).get (
174- item .purchase_order_item
175- if self .doctype == "Subcontracting Order"
176- else item .sales_order_item
177- )
178- / item .subcontracting_conversion_factor ,
179- frappe .get_precision (
169+ if self .doctype != "Subcontracting Receipt" :
170+ order_item_doctype = (
180171 "Purchase Order Item"
181172 if self .doctype == "Subcontracting Order"
182- else "Sales Order Item" ,
183- "qty" ,
184- ),
185- ):
186- frappe .throw (
187- _ (
188- "Row {0}: Item {1}'s quantity cannot be higher than the available quantity."
189- ).format (item .idx , item .item_name )
173+ else "Sales Order Item"
174+ )
175+
176+ order_name = (
177+ self .purchase_order if self .doctype == "Subcontracting Order" else self .sales_order
178+ )
179+ order_item_field = frappe .scrub (order_item_doctype )
180+
181+ if not item .get (order_item_field ):
182+ frappe .throw (
183+ _ ("Row {0}: Item {1} must be linked to a {2}." ).format (
184+ item .idx , item .item_name , order_item_doctype
185+ )
186+ )
187+
188+ pending_qty = flt (
189+ flt (
190+ get_pending_subcontracted_quantity (
191+ order_item_doctype ,
192+ order_name ,
193+ ).get (item .get (order_item_field ))
194+ )
195+ / item .subcontracting_conversion_factor ,
196+ frappe .get_precision (
197+ order_item_doctype ,
198+ "qty" ,
199+ ),
190200 )
191201
202+ if item .qty > pending_qty :
203+ frappe .throw (
204+ _ (
205+ "Row {0}: Item {1}'s quantity cannot be higher than the available quantity."
206+ ).format (item .idx , item .item_name )
207+ )
208+
192209 if self .doctype != "Subcontracting Inward Order" :
193210 item .amount = item .qty * item .rate
194211
@@ -1333,9 +1350,7 @@ def get_item_details(items):
13331350
13341351
13351352def get_pending_subcontracted_quantity (doctype , name ):
1336- table = frappe .qb .DocType (
1337- "Purchase Order Item" if doctype == "Subcontracting Order" else "Sales Order Item"
1338- )
1353+ table = frappe .qb .DocType (doctype )
13391354 query = (
13401355 frappe .qb .from_ (table )
13411356 .select (table .name , table .stock_qty , table .subcontracted_qty )
0 commit comments