+
    `Øj=}  ã                   óô   € ^ RI t ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
Ht ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHtHtHtHtHtHtHtHt ^ RIHtHtHt ^ RI H!t!H"t" ^ RI#H$t$H%t%H&t& R t' ! R R4      t(R# )é    N)ÚdatetimeÚtimezone)ÚDecimal)Údefaultdict©ÚAsyncSession)ÚselectÚfunc)Úselectinload)ÚHTTPException)ÚChassisMasterÚVehicleModelMaster)ÚRmInventoryÚRmMasterÚStationMasterÚRmConsumptionLogÚRmVendorMappingÚVendorMasterÚRmPurchaseOrderÚ
RmPoDetail)ÚRmPurchaseRequestÚRmPurchaseRequestDetailÚChassisBomSnapshot)ÚDealerOrderVehicleÚDealerOrderVehicleFeature)ÚProductMasterÚ	BomMasterÚSpecialFeatureBomc                  óJ   € \         P                  ! \        P                  4      # ©N)r   Únowr   Úutc© ó    ÚH/var/www/html/audi_dev/backend/app/modules/procurement/engine_service.pyÚ<lambda>r&      s   € ”(—,’,œxŸ|™|Ô,r$   c                   óØ   a € ] tR t^t o V 3R lR ltV 3R lR ltR tR tR tV 3R lR	 lt	V 3R
 lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRV 3R lR lltRtV tR# )ÚProcurementEngineServicec                ó    <€ V ^8„  d   QhRS[ /# )é   Údbr   )ÚformatÚ__classdict__s   "€r%   Ú__annotate__Ú%ProcurementEngineService.__annotate__   s   ø€ ÷ ñ ™<ñ r$   c                ó   € Wn         R # r    ©r+   )Úselfr+   s   &&r%   Ú__init__Ú!ProcurementEngineService.__init__   s   € ØŽr$   c                óD   <€ V ^8„  d   QhRS[ S[P                  ,          /# )r*   Úchassis_ids)ÚlistÚuuidÚUUID)r,   r-   s   "€r%   r.   r/      s   ø€ ÷ ñ ©t±D·I±I­ñ r$   c              ƒ  óJ  "  € V Fr  pV P                   P                  \        V4      G Rj  x€L
 pV'       g   \        RR4      hVP                  '       g   \        RRVP
                   R24      hRVn        Kt  	  V P                   P                  4       G Rj  x€L
  R#  Ls L5i)z+Move chassis to PROCUREMENT_PENDING status.Né”  úChassis not foundé�  zChassis z3 has no Sales Order. Cannot proceed to procurement.ÚPROCUREMENT_PENDING)r+   Úgetr   r   Údealer_order_vehicle_idÚ
chassis_noÚprocurement_statusÚflush)r2   r6   Ú
chassis_idÚchassiss   &&  r%   Úmove_to_checkÚ&ProcurementEngineService.move_to_check   s‰   é € ã%ˆJØ ŸG™GŸK™K¬°zÓB×BˆGßÜ# CÐ)<Ó=Ð=Ø×2×2Ð2Ü# C¨8°G×4FÑ4FÐ3GÐGzÐ){Ó|Ð|à)>ˆGÖ&ñ &ð �g‰g�m‰m‹o×Òñ Cñ 	ùs-   ‚)B#«B¬B#¸B#ÁAB#ÂB!ÂB#Â!B#c              ƒ  ó”  "  € \        \        4      P                  \        P                  P	                  . RO4      4      P                  \        \        P                  4      P                  \        P                  4      \        \        P                  4      P                  \        P                  4      \        \        P                  4      P                  \        P                  4      \        \        P                  4      4      pV P                  P                  V4      G Rj  x€L
 pVP                  4       P                  4       #  L"5i)z>Get chassis that are waiting for procurement check or on hold.N)r>   ÚSHORTAGE_HOLDÚAWAITING_INBOUND_PO)r	   r   ÚwhererB   Úin_Úoptionsr   Údealer_order_vehicler   ÚmodelÚ	body_typeÚsegmentr+   ÚexecuteÚscalarsÚall©r2   ÚstmtÚresults   &  r%   Ú	get_queueÚ"ProcurementEngineService.get_queue"   sÚ   é € ô ”=Ó!ß‰U”=×3Ñ3×7Ñ7Ò8wÓxÓyß‰WÜœ]×?Ñ?Ó@×MÑMÔN`×NfÑNfÓgÜœ]×?Ñ?Ó@×MÑMÔN`×NjÑNjÓkÜœ]×?Ñ?Ó@×MÑMÔN`×NhÑNhÓiÜœ]×0Ñ0Ó1ó	ð 	ð —w‘w—‘ tÓ,×,ˆØ�~‰~Ó×#Ñ#Ó%Ð%ñ -ùs   ‚D!EÄ#EÄ$#Ec              ƒ  óœ  "  € \        \        4      P                  \        P                  R8H  \        P                  R8H  4      P                  \        \        P                  4      P                  \        P                  4      \        \        P                  4      P                  \        P                  4      \        \        P                  4      P                  \        P                  4      \        \        P                  4      4      pV P                  P                  V4      G Rj  x€L
 pVP                  4       P                  4       #  L"5i)zHGet chassis that have been confirmed but NOT yet inducted to production.ÚPROCUREMENT_CHECKEDÚ
CHASSIS_INN©r	   r   rK   rB   Útracking_statusrM   r   rN   r   rO   rP   rQ   r+   rR   rS   rT   rU   s   &  r%   Úget_confirmed_queueÚ,ProcurementEngineService.get_confirmed_queue1   sç   é € ô ”=Ó!ß‰UÜ×0Ñ0Ð4IÑIÜ×-Ñ-°Ñ=ó÷ ‰WÜœ]×?Ñ?Ó@×MÑMÔN`×NfÑNfÓgÜœ]×?Ñ?Ó@×MÑMÔN`×NjÑNjÓkÜœ]×?Ñ?Ó@×MÑMÔN`×NhÑNhÓiÜœ]×0Ñ0Ó1ó	ð 	ð —w‘w—‘ tÓ,×,ˆØ�~‰~Ó×#Ñ#Ó%Ð%ñ -ùó   ‚D%EÄ'E
Ä(#Ec              ƒ  óœ  "  € \        \        4      P                  \        P                  R8H  \        P                  R8H  4      P                  \        \        P                  4      P                  \        P                  4      \        \        P                  4      P                  \        P                  4      \        \        P                  4      P                  \        P                  4      \        \        P                  4      4      pV P                  P                  V4      G Rj  x€L
 pVP                  4       P                  4       #  L"5i)zAGet chassis that are confirmed and currently in production (WIP).r[   ÚWIPNr]   rU   s   &  r%   Úget_backflush_queueÚ,ProcurementEngineService.get_backflush_queueC   sç   é € ô ”=Ó!ß‰UÜ×0Ñ0Ð4IÑIÜ×-Ñ-°Ñ6ó÷ ‰WÜœ]×?Ñ?Ó@×MÑMÔN`×NfÑNfÓgÜœ]×?Ñ?Ó@×MÑMÔN`×NjÑNjÓkÜœ]×?Ñ?Ó@×MÑMÔN`×NhÑNhÓiÜœ]×0Ñ0Ó1ó	ð 	ð —w‘w—‘ tÓ,×,ˆØ�~‰~Ó×#Ñ#Ó%Ð%ñ -ùra   c                ó4   <€ V ^8„  d   QhRS[ P                  /# ©r*   rD   ©r8   r9   )r,   r-   s   "€r%   r.   r/   U   s   ø€ ÷ 
ñ 
±·	±	ñ 
r$   c              ƒ  óð  "  € V P                   P                  \        V4      G Rj  x€L
 p\        \        \
        \        4      P                  \
        \        P                  \
        P                  8H  4      P                  \        \
        P                  \        P                  8H  4      P                  \        P                  V8H  4      pV P                   P                  V4      G Rj  x€L
 p. pVP                  4        F¼  w  rgpTP                  RVP                  RVP                   RVP"                  R\%        VP&                  4      R\%        VP(                  4      R\%        VP*                  4      RVP,                  ;'       g    R	R
V'       d   VP.                  MRRV'       d   VP0                  MR/	4       K¾  	  R\3        V4      RV'       d   VP4                  RV/# \3        V4      RV/#  ELÊ EL5i)zAGet the confirmed BOM snapshot for a chassis, grouped by station.NÚrm_idÚrm_nameÚrm_codeÚquantityÚreserved_qtyÚconsumed_qtyÚcategoryúBase BOMÚstation_nameÚ
UnassignedÚsequence_noiç  rD   rA   Ú	bom_items)r+   r?   r   r	   r   r   r   Újoinrj   Ú	outerjoinÚ
station_idrK   rD   rR   rT   ÚappendÚnameÚpart_noÚfloatrm   rn   ro   rp   rr   rt   ÚstrrA   )	r2   rD   rE   rV   rW   ÚitemsÚsnapshotÚrmÚstations	   &&       r%   Úget_chassis_bomÚ(ProcurementEngineService.get_chassis_bomU   s‰  é € àŸ™Ÿ™¤M°:Ó>×>ˆäÔ(¬(´MÓB×GÑGÜÔ(×.Ñ.´(·.±.Ñ@ó
ç
‰)Üœ8×.Ñ.´-×2JÑ2JÑJó
ç
‰%Ô"×-Ñ-°Ñ;Ó
<ð	 	ð —w‘w—‘ tÓ,×,ˆØˆØ%+§Z¡Z¦\Ñ!ˆH˜'Ø�L‰LØ˜Ÿ™Ø˜2Ÿ7™7Ø˜2Ÿ:™:ØœE (×"3Ñ"3Ó4Ø¤ h×&;Ñ&;Ó <Ø¤ h×&;Ñ&;Ó <Ø˜H×-Ñ-×;Ð;°Ø¿ × 4Ò 4À\Ø·g˜w×2Ò2À3ð
ö 
ñ &2ð œ#˜j›/Ø·˜'×,Ñ,Ø˜ð
ð 	
ä=@À»_Ø˜ð
ð 	
ò/ ?ò -ùs0   ‚$G6¦G0§CG6Ã(G3Ã)B(G6ÆG6Æ(A	G6Ç3G6c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r*   Úrm_idsÚreturn)r7   Údict)r,   r-   s   "€r%   r.   r/   t   s   ø€ ÷ 
ñ 
±dð 
¹tñ 
r$   c              ƒ  ór  "  € V'       g   / # \        \        P                  \        P                  ! \        P
                  4      P                  R4      \        P                  ! \        P                  4      P                  R4      \        P                  ! \        P                  4      P                  R4      4      P                  \        P                  P                  V4      4      P                  \        P                  4      pV P                  P                  V4      G Rj  x€L
 pVP                  4        Uu/ uFm  pVP                  RVP                  ;'       g    \!        R4      RVP"                  ;'       g    \!        R4      RVP$                  ;'       g    \!        R4      /bKo  	  up#  LŒu upi 5i)	zv
BUG-02 FIX: Aggregate inventory across ALL stores per RM.
Returns { rm_id: (total_current_qty, total_reserved_qty) }
Útotal_currentÚtotal_reservedÚtotal_in_transitNÚcurrent_qtyÚ0rn   Úin_transit_qty)r	   r   rj   r
   ÚsumrŒ   Úlabelrn   rŽ   rK   rL   Úgroup_byr+   rR   rT   r‰   r   rŠ   r‹   )r2   r…   Úagg_stmtÚresÚrows   &&   r%   Ú_get_aggregated_inventoryÚ2ProcurementEngineService._get_aggregated_inventoryt   sK  é € ÷
 ØˆIäÜ×!Ñ!Ü—’œ×0Ñ0Ó1×7Ñ7¸ÓHÜ—’œ×1Ñ1Ó2×8Ñ8Ð9IÓJÜ—’œ×3Ñ3Ó4×:Ñ:Ð;MÓNó	÷ ‰U”;×$Ñ$×(Ñ(¨Ó0Ó1ß‰X”k×'Ñ'Ó(ð 	ð —G‘G—O‘O HÓ-×-ˆð —w‘w”yó
ñ !�ð �I‰IØ˜s×0Ñ0×@Ð@´G¸C³LØ × 2Ñ 2× BÐ B´g¸c³lØ  #×"6Ñ"6×"FÐ"F¼'À#»,ðò ñ
 !ñ
ð 	
ñ .ùò
ùs6   ‚D!F7Ä#F0Ä$F7Ä:#F2ÅF2Å=F2ÆF2Æ-F7Æ2F7c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r*   rj   rh   )r,   r-   s   "€r%   r.   r/   �   s   ø€ ÷ ,ñ ,±D·I±Iñ ,r$   c              ƒ  ó  "  € \        \        4      P                  \        P                  V8H  4      P	                  4       P                  ^4      pV P                  P                  V4      G Rj  x€L
 pVP                  4       #  L5i)zPGet the first inventory row for an RM to use for locking/modifying reserved_qty.N)	r	   r   rK   rj   Úwith_for_updateÚlimitr+   rR   Úscalar_one_or_none)r2   rj   Úinv_stmtÚinv_ress   &&  r%   Ú_get_first_inventory_rowÚ1ProcurementEngineService._get_first_inventory_row�   sc   é € äœ+Ó&×,Ñ,¬[×->Ñ->À%Ñ-GÓH×XÑXÓZ×`Ñ`ÐabÓcˆØŸ™Ÿ™¨Ó1×1ˆØ×)Ñ)Ó+Ð+ñ 2ùs   ‚A+BÁ-BÁ.Bc                ó4   <€ V ^8„  d   QhRS[ P                  /# rg   rh   )r,   r-   s   "€r%   r.   r/   •   s   ø€ ÷ O
ñ O
©t¯y©yñ O
r$   c              ƒ  óP!  "  € V P                   P                  \        V4      G Rj  x€L
 pV'       d   VP                  '       g   \	        RR4      hV P                   P                  \
        VP                  4      G Rj  x€L
 pV'       g   \	        RR4      h^ RIHpHp V P                   P                  \        VP                  4      G Rj  x€L
 pVP                  '       d.   V P                   P                  WCP                  4      G Rj  x€L
 MRpVP                  '       d.   V P                   P                  WSP                  4      G Rj  x€L
 MRp/ p	V'       Edu   \        \        4      P                  \        P                   P#                  RVP$                   R24      4      p
V'       d=   V
P                  \        P                   P#                  RVP                    R24      4      p
V'       d=   V
P                  \        P                   P#                  RVP                    R24      4      p
V P                   P'                  V
4      G Rj  x€L
 pVP)                  4       P+                  4       pV'       gI   \	        RRV'       d   VP                   MR	 R
V'       d   VP                   MR	 R
VP$                   R24      h\        \,        4      P                  \,        P.                  VP.                  8H  4      P1                  \3        \,        P4                  4      4      pV P                   P'                  V4      G Rj  x€L
 pVP)                  4       P+                  4       pV'       g   \	        RRVP                    R24      hVP4                   F@  pVP6                  R3pV	P                  V\9        R4      4      VP:                  ,           V	V&   KB  	  \        \<        4      P                  \<        P>                  VP>                  8H  4      pV P                   P'                  V4      G Rj  x€L
 pVP)                  4       PA                  4       pV EFƒ  pVPB                  '       Edy   ^ RIH"pH#p V P                   P                  VVPB                  4      G Rj  x€L
 pVPH                  '       d/   V P                   P                  VVPH                  4      G Rj  x€L
 MRpV'       d   \K        VR\K        VRR4      4      MRpV'       d   RV RVPL                   R2MRp\        \N        4      P                  \N        PP                  VPB                  8H  4      pV P                   P'                  V4      G Rj  x€L
 pVP)                  4       PA                  4        F@  pVP6                  V3pV	P                  V\9        R4      4      VP:                  ,           V	V&   KB  	  EK�  \K        VRR4      '       g   EK¥  ^ RIH#pH"p VPH                  '       d/   V P                   P                  VVPH                  4      G Rj  x€L
 MRpV'       d   \K        VR\K        VRR4      4      MRpRV 2pV P                   P'                  \        VPP                  4      P                  VPH                  VPH                  8H  4      P                  VPL                  PS                  . R8O4      4      4      G Rj  x€L
 P)                  4       PA                  4       pV'       g   EKÃ  \        \N        4      P                  \N        PP                  PS                  V4      4      pV P                   P'                  V4      G Rj  x€L
 pVP)                  4       PA                  4        F@  pVP6                  V3pV	P                  V\9        R4      4      VP:                  ,           V	V&   KB  	  EK†  	  V	'       g-   RVPT                  RVPV                  RVPV                  R. RRR R!/# . p \Y        \[        V	P]                  4        U!u. uF  p!V!^ ,          NK  	  up!4      4      p"V"'       Eds   \        \^        4      P                  \^        P6                  PS                  V"4      4      p#V P                   P'                  V#4      G Rj  x€L
 p$V$P)                  4       PA                  4        U%u/ uF  p%V%P6                  V%bK  	  p&p%V Pa                  V"4      G Rj  x€L
 p'V&Pc                  4        U%u0 uF#  p%V%Pd                  '       g   K  V%Pd                  kK%  	  p(p%/ p)V('       d—   \        \f        4      P                  \f        Pd                  PS                  V(4      4      p*V P                   P'                  V*4      G Rj  x€L
 p+V+P)                  4       PA                  4        U,u/ uF  p,V,Pd                  V,bK  	  p)p,\        \h        P6                  \j        P                   Pm                  R"4      \h        Pn                  \h        Pp                  \r        Pt                  4      Pw                  \r        \r        Px                  \h        Px                  8H  4      Pw                  \j        \j        Pz                  \r        Pz                  8H  4      P                  \h        P6                  PS                  V"4      \h        P|                  R#8g  4      P                  \r        P€                  Pƒ                  4       4      p-V P                   P'                  V-4      G Rj  x€L
 p.V.PA                  4       p/\…        \8        4      p0\…        \8        4      p1/ p2/ p3V/ EFU  p4T0V4P6                  ;;,          V4Pn                  ;'       g    \9        R4      ,          uu&   \‡        \9        R4      V4Pp                  ;'       g    \9        R4      V4Pn                  ;'       g    \9        R4      ,
          4      p5V1V4P6                  ;;,          V5,          uu&   V4P6                  V29  d,   V4Pˆ                  '       d   V4Pˆ                  V2V4P6                  &   V4Pt                  '       g   EK  V4P6                  V39  g&   V4Pt                  V3V4P6                  ,          8  g   EK<  V4Pt                  V3V4P6                  &   EKX  	  \        \Š        P6                  \j        P                   4      Pw                  \j        \j        Pz                  \Š        Pz                  8H  4      P                  \Š        P6                  PS                  V"4      \Š        PŒ                  R8H  4      p6V P                   P'                  V64      G Rj  x€L
 p7V7PA                  4        F  w  p8p9V8V29  g   K  V9V2V8&   K  	  V	P�                  4        EF	  w  w  p:p;p<V&P                  V:4      p%V%'       g   K%  V'P                  V:/ 4      p=V%Pd                  '       d   V)P                  V%Pd                  4      MRp>V=P                  R$\9        R4      4      p?V=P                  R%\9        R4      4      p@V=P                  R&\9        R4      4      pA\‡        \9        R4      V?V@,
          4      pBT<pC\‡        \9        R4      VCVB,
          4      pD\‘        V1P                  V:\9        R4      4      4      ;'       g    \‘        XA4      pE\‘        V0P                  V:\9        R4      4      4      pFV2P                  V:R'4      pGV3P                  V:4      pHT P“                  R(T:R)V%P                   R*V%P”                  R+V>'       d   V>P–                  MR,R-V%P˜                  ;'       g    R.R/\‘        XC4      R0\‘        XB4      R1\‘        XD4      R"XGR2XFR3XER4XH'       d   XHP›                  4       MRR5V;/4       EK  	  \œ        ;QJ d    R6 V  4       F  '       g   K   RM	  R!M! R6 V  4       4      pI\œ        ;QJ d    R7 V  4       F  '       g   K   RM	  R!M! R7 V  4       4      pJRVPT                  RVPV                  RVPV                  RV RXI'       * R VJ/#  EL3 ELÞ EL“ ELW EL EL EL. ELE ELÛ ELž EL E
LD E	L˜ E	Lu up!i  ELáu up%i  EL˜u up%i  ELûu up,i  ELu EL.5i)9zDSimulate the BOM check against available stock based on Sales Order.Nr;   z Chassis or Sales Order not foundzDealer Order Vehicle not found)ÚBodyTypeMasterÚCustomerSegmentMasterÚ%r=   zNo Product Match found for zN/Az - z. Update ProductMaster.zNo BOM defined for product z. Update BOM Master.rq   r�   )ÚSpecialFeatureOptionMasterÚSpecialFeatureMasterÚfeature_namerz   ÚFeaturez	Feature: z (Ú)zSpecial FeatureÚ
bool_value)r¦   r¥   rD   Úchassis_numberrA   ru   Úcan_proceedTÚhas_covered_shortagesFÚsupplier_nameÚ	CANCELLEDrŒ   rn   rŽ   u   â€”rj   rk   rl   rr   rs   Úunit_of_measureÚNOSÚrequired_qtyÚavailable_qtyÚshortage_qtyÚreceived_rm_qtyÚpending_po_qtyÚexpected_delivery_daterp   c              3   óp   "  € T F,  pVR ,          ^ 8„  ;'       d    VR,          VR ,          8  x € K.  	  R# 5i©r´   r¶   Nr#   ©Ú.0Úitems   & r%   Ú	<genexpr>Ú:ProcurementEngineService.simulate_check.<locals>.<genexpr>T  s<   é € ð 
á"�ð �Õ  1Ñ$×VÐV¨Ð.>Õ)?À$À~ÕBVÑ)VÔVÛ"ùó   ‚6š6c              3   óp   "  € T F,  pVR ,          ^ 8„  ;'       d    VR,          VR ,          8¬  x € K.  	  R# 5ir¹   r#   rº   s   & r%   r½   r¾   X  s<   é € ð 
á"�ð �Õ  1Ñ$×WÐW¨Ð.>Õ)?À4ÈÕCWÑ)WÔWÛ"ùr¿   )ÚRequiredÚYesÚTrueÚ1)Or+   r?   r   r@   r   r   Úapp.models.dealer_modelsr¢   r£   r   Úmodel_idÚbody_type_idÚ
segment_idr	   r   rK   rz   ÚilikeÚmodel_numberrR   rS   Úfirstr   Ú
product_idrM   r   Údetailsrj   r   rm   r   Úorder_vehicle_idrT   Úfeature_option_idr¥   r¦   Ú
feature_idÚgetattrÚoption_valuer   Ú	option_idrL   rD   rA   r7   ÚsetÚkeysr   r•   Úvaluesrx   r   r   r   r�   Úreceived_qtyÚ	order_qtyr   r·   rv   Úpo_idÚ	vendor_idÚline_statusÚorder_byÚ
created_atÚdescr   Úmaxr®   r   Ú	is_activer~   r|   ry   r{   rr   Úunit_of_measurementÚ	isoformatÚany)Kr2   rD   rE   Údovr¢   r£   rO   rP   rQ   ÚconsolidatedÚ	prod_stmtÚprod_resÚproductÚbom_stmtÚbom_resÚbase_bomÚdetÚkeyÚ	feat_stmtÚfeat_resÚfeaturesÚfeatr¥   r¦   ÚoptionÚfeature_masterr§   Úcat_nameÚsf_stmtÚsf_resÚsfÚopt_idsÚ
simulationÚkr…   Úrm_stmtÚrm_resr€   ÚrmsÚinventoriesÚstation_idsÚstationsÚst_stmtÚst_resÚstÚpo_stmtÚpo_resÚpo_rowsÚrm_po_receiptsÚrm_pending_poÚrm_po_suppliersÚrm_delivery_datesr”   Úopen_qtyÚmap_stmtÚmap_resÚrm_id_mÚv_namerj   rp   r²   Úinvr�   ÚcurrentÚreservedÚ
in_transitÚ	availableÚrequiredÚshortageÚ
pending_por×   r®   Úexp_dateÚhas_uncoveredÚhas_coveredsK   &&                                                                         r%   Úsimulate_checkÚ'ProcurementEngineService.simulate_check•   sû  é € àŸ™Ÿ™¤M°:Ó>×>ˆß˜g×=×=Ð=Ü Ð%GÓHÐHà—G‘G—K‘KÔ 2°G×4SÑ4SÓT×TˆßÜ Ð%EÓFÐFçRØ—g‘g—k‘kÔ"4°c·l±lÓC×CˆØKN×K[×K[ÐK[˜$Ÿ'™'Ÿ+™+ n×6FÑ6FÓG×GÐGÐaeˆ	ØNQÏnÏnÈn˜Ÿ™Ÿ™Ð$9¿>¹>ÓJ×JÐJÐbfˆð ˆ÷ ˆ5Üœ}Ó-×3Ñ3´M×4FÑ4F×4LÑ4LÈqÐQV×QcÑQcÐPdÐdeÐMfÓ4gÓhˆIßØ%ŸO™O¬M×,>Ñ,>×,DÑ,DÀqÈÏÉÐHXÐXYÐEZÓ,[Ó\�	ßØ%ŸO™O¬M×,>Ñ,>×,DÑ,DÀqÈÏÉÈÐVWÐEXÓ,YÓZ�	Ø!ŸW™WŸ_™_¨YÓ7×7ˆHØ×&Ñ&Ó(×.Ñ.Ó0ˆGçÜ# CÐ+F×YbÀyÇ~Â~ÐhmÐFnÐnq÷  CJÐry×r~Òr~ð  PUð  rVð  VYð  Z_÷  Zlñ  Zlð  Ymð  mDð  *Eó  Fð  FäœiÓ(×.Ñ.¬y×/CÑ/CÀw×GYÑGYÑ/YÓZ×bÑbÔcoÔpy÷  qBñ  qBó  dCó  DˆHØ ŸG™GŸO™O¨HÓ5×5ˆGØ—‘Ó(×.Ñ.Ó0ˆHßÜ# CÐ+FÀwÇ|Á|ÀnÐThÐ)iÓjÐjØ×'Ô'�Ø—y‘y *Ð-�Ø$0×$4Ñ$4°S¼'À#»,Ó$GÈ#Ï,É,Õ$V�˜SÓ!ñ (ô
 Ô4Ó5×;Ñ;Ô<U×<fÑ<fÐjm×j~Ñj~Ñ<~Óˆ	ØŸ™Ÿ™¨Ó3×3ˆØ×#Ñ#Ó%×)Ñ)Ó+ˆäˆDØ×%×%Ñ%çeØ#Ÿw™wŸ{™{Ð+EÀt×G]ÑG]Ó^×^�Ø]a×]l×]lÐ]l t§w¡w§{¡{Ð3GÈÏÉÓ'Y×!YÐ!YÐrv�÷ wEœw ~°~ÄwÈ~Ð_eÐgpÓGqÔrð  KT�ßQW˜Y | n°B°v×7JÑ7JÐ6KÈ1ÑMÐ]n�ä Ô!2Ó3×9Ñ9Ô:K×:UÑ:UÐY]×YoÑYoÑ:oÓp�Ø#Ÿw™wŸ™¨wÓ7×7�Ø Ÿ.™.Ó*×.Ñ.Ö0�BØŸ8™8 XÐ.�CØ(4×(8Ñ(8¸¼gÀc»lÓ(KÈbÏkÉkÕ(Y�L Ó%ô 1ô ˜˜|¨T×2Õ2çeØ]a×]l×]lÐ]l t§w¡w§{¡{Ð3GÈÏÉÓ'Y×!YÐ!YÐrv�÷ Mœw ~°~ÄwÈ~Ð_eÐgxÓGyÔzð  Sd�Ø& | nÐ5�à!%§¡§¡ÜÐ5×?Ñ?Ó@ß‘UÐ5×@Ñ@ÀDÇOÁOÑSÓTß‘UÐ5×BÑB×FÑFÒGgÓhÓió"÷ ÷ ‘7“9ŸS™S›Uð	 ÷
 ’7Ü$Ô%6Ó7×=Ñ=Ô>O×>YÑ>Y×>]Ñ>]Ð^eÓ>fÓg�GØ#'§7¡7§?¡?°7Ó#;×;�FØ$Ÿn™nÓ.×2Ñ2Ö4˜Ø!Ÿx™x¨Ð2˜Ø,8×,<Ñ,<¸SÄ'È#Ã,Ó,OÐRT×R]ÑR]Õ,]˜ SÓ)ô 5ñ; ÷B à˜g×0Ñ0Ø  '×"4Ñ"4Ø˜g×0Ñ0Ø˜RØ˜tØ'¨ðð ð ˆ
Ü”c¨×):Ñ):Ô)<Ó=Ñ)< A˜1˜QŸ4˜4Ñ)<Ñ=Ó>Ó?ˆçˆ6äœXÓ&×,Ñ,¬X¯^©^×-?Ñ-?ÀÓ-GÓHˆGØŸ7™7Ÿ?™?¨7Ó3×3ˆFØ*0¯.©.Ó*:×*>Ñ*>Ô*@ÓAÑ*@ B�2—8‘8˜R’<Ñ*@ˆCÐAð !%× >Ñ >¸vÓ F×FˆKð 47·:±:´<ÓQ±<¨RÀ2Ç=Å=œ=˜2Ÿ=œ=±<ˆKÐQØˆHßÜ ¤Ó/×5Ñ5´m×6NÑ6N×6RÑ6RÐS^Ó6_Ó`�Ø#Ÿw™wŸ™¨wÓ7×7�Ø8>¿¹Ó8H×8LÑ8LÔ8NÓOÑ8N°"˜BŸM™M¨2Ò-Ñ8N�ÐOô Ü×$Ñ$Ü ×%Ñ%×+Ñ+¨OÓ<Ü×+Ñ+Ü×(Ñ(Ü#×:Ñ:ó÷ ‘”o¤×'<Ñ'<Ä
×@PÑ@PÑ'PÓQß‘”l¤L×$:Ñ$:¼o×>WÑ>WÑ$WÓXß‘Ü×$Ñ$×(Ñ(¨Ó0Ü×*Ñ*¨kÑ9ó÷ ‘œ/×4Ñ4×9Ñ9Ó;Ó<ð ð   Ÿ7™7Ÿ?™?¨7Ó3×3ˆFØ—j‘j“lˆGä(¬Ó1ˆNÜ'¬Ó0ˆMØ ˆOØ "Ðä�Ø˜sŸy™y×)¨S×-=Ñ-=×-MÐ-MÄÈÃÕMÓ)Üœw s›|¨c¯m©m×.KÐ.K¼wÀs»|ÐPS×P`ÑP`×PpÐPpÔdkÐloÓdpÕ-qÓr�Ø˜cŸi™i×(¨HÕ4Ó(Ø—9‘9 OÔ3¸×8I×8IÐ8IØ14×1BÑ1B�O C§I¡IÑ.Ø×-×-Ó-Ø—y‘yÐ(9Ô9¸S×=WÑ=WÐZkÐlo×luÑluÕZv×=vØ7:×7QÑ7QÐ)¨#¯)©)Ô4ñ ô ”×,Ñ,¬l×.?Ñ.?Ó@ß‘”l¤L×$:Ñ$:¼o×>WÑ>WÑ$WÓXß‘”×,Ñ,×0Ñ0°Ó8¼/×:SÑ:SÐW[Ñ:[Ó\ð ð
 !ŸG™GŸO™O¨HÓ5×5ˆGØ#*§;¡;¦=‘�˜Ø /Ö1Ø/5�O GÓ,ñ $1ð 4@×3EÑ3E×3GÑ/Ñ!�˜ <Ø—W‘W˜U“^�ßÙà!—o‘o e¨RÓ0�Ø9;¿¿¸˜(Ÿ,™, r§}¡}Ô5ÈD�àŸ'™' -´¸³Ó>�ØŸ7™7 >´7¸3³<Ó@�Ø ŸW™WÐ%5´w¸s³|ÓD�
Ü¤¨£¨g¸Õ.@ÓA�	Ø'�Üœw s›|¨X¸	Õ-AÓB�ô # =×#4Ñ#4°U¼GÀC»LÓ#IÓJ×_Ð_ÌeÐT^ÓN_�
Ü$ ^×%7Ñ%7¸¼wÀs»|Ó%LÓM�Ø /× 3Ñ 3°E¸5Ó A�Ø,×0Ñ0°Ó7�à×!Ñ!Ø˜UØ˜rŸw™wØ˜rŸz™zØ"¿G G×$8Ò$8ÈØ% r×'=Ñ'=×'FÐ'FÀØ"¤E¨(£OØ#¤U¨9Ó%5Ø"¤E¨(£OØ# ]Ø% |Ø$ jØ,Çh¨h×.@Ñ.@Ô.BÐTXØ ð#÷ ñ+ 4H÷J ›ñ 
á"ó
ŸŸšñ 
á"ó
ó 
ˆ÷ “cñ 
á"ó
—c—c’cñ 
á"ó
ó 
ˆð ˜'×,Ñ,Ø˜g×0Ñ0Ø˜'×,Ñ,Ø˜Ø˜}Ô,Ø# [ð
ð 	
òM ?ò Uò
 DÚGÚJò 8ò 6ò 4ò _Ú!Yò
 8ò "Zòò <ùò  >ò
 4ùÚAò Gùò Rò 8ùÚOò& 4ò0 6ùsÓ  ‚$AB&¦AA§AB&³AB&Á9AB&Á>AAÁ?AB&ÂAAB&ÃAAÃAB&Ã#(AB&ÄAA"ÄAB&Ä$(AB&ÅAA%ÅAB&ÅBAB&Ç3AAB&ÉAA(É)AB&É8%AB&ÊBAB&Ì=AA+Ì>)AB&Í(CAB&Ð)AA.Ð*A,AB&ÒAA1ÒAB&Ò-)AB&ÓAA4ÓAB&Ó%!AB&ÔA,AB&Õ3AA7Õ4A9AB&×3AB&Ø)AB&Ø6AA:Ø7AB&ÙB AB&Û%AA=Û&%AB&ÜAAB&Ý*AB Ý+A2AB&ßA
AB&à(ABà:AB&áAAB&â'ABâ($AB&ãABã"AB&ã8ABã9AB&äABä(ABä8A%AB&æABæ$AB&çABçEAB&ì+AB ì,A"AB&î6AB&ïAB&ï$AAB&ð<(AB&ñ*0AB&ò CAB&õ5AB#õ6AB&öA!AB&÷;E4AB&ý0AAB&ÿAB&ÿAB&ÿ?AB&Á@AAB&ÁAAB&ÁAAB&ÁA"AB&ÁA%AB&ÁA(AB&ÁA+AB&ÁA.AB&ÁA1AB&ÁA4AB&ÁA7AB&ÁA:AB&ÁA=AB&ÁB AB&ÁBAB&ÁBAB&ÁBAB&ÁBAB&ÁB#AB&c                óT   <€ V ^8„  d   QhRS[ P                  RS[RS[ P                  /# )r*   rD   Ú	final_bomÚuser_id)r8   r9   r7   )r,   r-   s   "€r%   r.   r/   f  s2   ø€ ÷ Eñ E±D·I±Ið EÉ$ð EÑY]×YbÑYbñ Er$   c           
   ƒ  óN  "  € V P                   P                  \        V4      G Rj  x€L
 pV'       g   \        RR4      hV P                   P	                  \        \        4      P                  \        P                  V8H  4      4      G Rj  x€L
 pVP                  4       P                  4        Uu/ uF  qfP                  VbK  	  ppRpRp	. p
\        4       pV EF1  pVP                  pVP                  V4       \        \        VP                   4      4      p\        \"        4      P                  \"        P                  V8H  4      P%                  \"        P&                  P)                  4       4      P+                  4       pV P                   P	                  V4      G Rj  x€L
 pVP                  4       P                  4       pV'       gé   ^ RIHp V P                   P	                  \        \"        P0                  4      P3                  ^4      4      G Rj  x€L
 pVP5                  4       ;'       g    \6        P8                  ! R4      p\#        VV\        R4      \        R4      \        R4      R7      pV P                   P                  V4       V P                   P;                  4       G Rj  x€L
  V.pVP                  V4      pV'       d   VP<                  M
\        R4      pVV8”  dÈ   VV,
          pTpV Fµ  pV\        R4      8:  d    EMG\?        \        R4      VP&                  ;'       g    \        R4      VP<                  ;'       g    \        R4      ,
          4      p\A        VV4      pVP<                  ;'       g    \        R4      V,           Vn        VV,          pVV,          pK·  	  M£VV8  d›   VV,
          pTp\C        VR	 R
R7       F{  pV\        R4      8:  d    Mm\A        TVP<                  ;'       g    \        R4      4      pVP<                  ;'       g    \        R4      V,
          Vn        VV,          pVV,          pK}  	  MTp\?        \        R4      VV,
          4      p\E        R V 4       4      p V'       d   VVn#        VVn        M4\        VVVV\        R4      R7      pV P                   P                  V4       V\        R4      8”  g   EK  V V8¼  d   R
p	EK  R
pV
PI                  RVR\K        V4      /4       EK4  	  \        VPM                  4       4      V,
          p!V! EF!  pW},          pVP<                  '       dá   VP<                  ^ 8”  dÐ   \        \"        4      P                  \"        P                  V8H  4      P+                  4       P3                  ^4      pV P                   P	                  V4      G Rj  x€L
 pVP5                  4       pV'       dI   \?        \        R4      VP<                  ;'       g    \        R4      VP<                  ,
          4      Vn        V P                   PO                  V4      G Rj  x€L
  EK$  	  V'       d	   RVn(        MV	'       d	   RVn(        MRVn(        V
'       EdM   V
 U"u. uF  p"V"R,          NK  	  p#p"\        VPR                  4      p$\        \T        4      P                  \T        P                  PW                  V#4      4      P                  \T        PX                  R
8H  4      p%V P                   P	                  V%4      G Rj  x€L
 p&V&P                  4       P                  4       p'\[        \\        4      p(V' F/  p)V(V)P                  ,          PI                  V)P^                  4       K1  	  \[        \\        4      p*V
 Fg  p+V+R,          pV(P                  V. 4      p,\a        V,4      ^8X  d"   V*V,^ ,          ,          PI                  V+4       KO  V*R,          PI                  V+4       Ki  	  V*Pc                  4        EF®  w  p-p.\        \d        4      Pg                  \i        \d        Pj                  4      4      p/V-'       d6   V/P                  \d        Pl                  R8H  \d        P^                  V-8H  4      p/M4V/P                  \d        Pl                  R8H  \d        P^                  R8H  4      p/V/P%                  \d        Pn                  P)                  4       4      P3                  ^4      p/V P                   P	                  V/4      G Rj  x€L
 p0V0P5                  4       p1V1'       * p2V2'       d�   \e        R\6        Pp                  ! 4       Pr                  R,          Pu                  4        2VV-R7      p1V P                   P                  V14       V P                   P;                  4       G Rj  x€L
  V2'       g(   V1Pj                   U3u/ uF  p3V3P                  V3bK  	  up3M/ p4V. FÌ  p+V+R,          p\        \        V+R,          4      4      p5VV49   dj   V4V,          p6V6;Pv                  V5,          un;        V6Px                  '       g   . V6n<        V$V6Px                  9  d   V6Px                  V$.,           V6n<        K•  K—  \{        V1P|                  VV5V$.R7      p6V P                   P                  V64       KÎ  	  EK±  	  V P                   P;                  4       G Rj  x€L
  R#  E
LÐ E
Lou upi  E	Ld ELò EL_ ELA ELÁu up"i  ELé ELò ELVu up3i  L35i)uå   Confirm reservation, save snapshot, handle shortages and indents.

FLAW-01 FIX: db.commit() is now called in the route, not here.
FLAW-03 FIX: Re-confirm uses delta logic â€” adjusts existing snapshot instead of delete+recreate.
Nr;   r<   F)ÚStoreMasterz$00000000-0000-0000-0000-000000000001r�   )rj   Ústore_idrŒ   rn   rŽ   c                 ó@   € V P                   ;'       g    \        R 4      # )r�   )rn   r   )Úxs   &r%   r&   Ú>ProcurementEngineService.confirm_reservation.<locals>.<lambda>©  s   € ¸Q¿^¹^×=[Ð=[ÌwÐWZË|Ð=[r$   T)rí   Úreversec              3   ó^   "  € T F#  qP                   ;'       g    \        R 4      x € K%  	  R# 5i)r�   N)rŽ   r   )r»   r  s   & r%   r½   Ú?ProcurementEngineService.confirm_reservation.<locals>.<genexpr>´  s#   é € ÐWÉ;ÀC×/Ñ/×?Ð?´7¸3³<Ô?Ë;ùs   ‚-™-)rD   rj   rm   rn   ro   rj   r´   rI   rJ   r[   ÚPENDINGúPR-ºNé   N©Úrequest_numberÚrequested_byrÚ   )Ú
request_idrj   r´   Úaffected_chassis)?r+   r?   r   r   rR   r	   r   rK   rD   rS   rT   rj   rÔ   Úaddr   r}   Úqtyr   rÜ   rŒ   rÞ   r™   Úapp.models.rm_modelsr!  r"  rš   r›   r8   r9   rC   rn   rß   ÚminÚsortedr�   rm   ry   r|   rÕ   ÚdeleterB   rA   r   rL   rà   r   r7   rÚ   Úlenr~   r   rM   r   rÍ   ÚstatusrÝ   Úuuid4ÚhexÚupperr´   r1  r   r0  )7r2   rD   r  r  rE   Úold_snap_resÚsnapÚexisting_mapÚhas_shortageÚhas_covered_shortageÚshortages_to_indentÚ
new_rm_idsr¼   rj   Únew_qtyrœ   r�   rþ   r!  Údefault_store_resÚdefault_store_idÚ	inventoryÚold_snapÚalready_reservedÚdeltarŠ   r  r  Úreserving_nowÚreleaseÚcan_releaser  r  Úremoved_rm_idsÚsÚrm_ids_with_shortagerA   r  r  ÚmappingsÚ
rm_vendorsÚmÚvendor_groupsÚshortÚv_listrÚ   Úgroup_shortagesrV   Úpr_resÚindentÚis_newÚdÚexisting_detailsr3  Údetails7   &&&&                                                   r%   Úconfirm_reservationÚ,ProcurementEngineService.confirm_reservationf  sÛ  é € ð Ÿ™Ÿ™¤M°:Ó>×>ˆßÜ Ð%8Ó9Ð9ð "ŸW™WŸ_™_ÜÔ%Ó&×,Ñ,Ô-?×-JÑ-JÈjÑ-XÓYó
÷ 
ˆð 6B×5IÑ5IÓ5K×5OÑ5OÔ5QÓRÑ5Q¨TŸ
™
 DÒ(Ñ5QˆÐRàˆØ$ÐØ ÐÜ“Uˆ
ô ˆDØ—J‘JˆEØ�N‰N˜5Ô!Üœc $§(¡(›mÓ,ˆGô œkÓ*×0Ñ0´×1BÑ1BÀeÑ1KÓL×UÑUÔVa×VmÑVm×VrÑVrÓVtÓu÷  Fñ  Fó  HˆHØ ŸG™GŸO™O¨HÓ5×5ˆGØ!Ÿ/™/Ó+×/Ñ/Ó1ˆKçå<Ø*.¯'©'¯/©/¼&Ä×AUÑAUÓ:V×:\Ñ:\Ð]^Ó:_Ó*`×$`Ð!Ø#4×#GÑ#GÓ#I×#~Ð#~ÌTÏYÊYÐW}ÓM~Ð Ü'ØØ-Ü '¨£Ü!(¨£Ü#*¨3£<ô�	ð —‘—‘˜IÔ&Ø—g‘g—m‘m“o×%Ð%Ø(˜k�à#×'Ñ'¨Ó.ˆHß8@˜x×4Ò4ÄgÈcÃlÐàÐ)Ô)àÐ"2Õ2�Ø!1�Û&�CØ¤¨£Ô,ÚÜ #¤G¨C£L°3·?±?×3RÐ3RÄgÈcÃlÐWZ×WgÑWg×WwÐWwÔkrÐsvÓkwÕ2xÓ y�IÜ$'¨¨yÓ$9�MØ(+×(8Ñ(8×(HÐ(H¼GÀC»LÈMÕ'Y�CÔ$Ø" mÕ3�NØ˜]Õ*’Eò 'ð Ð+Ô+à*¨WÕ4�Ø!1�Ü! +Ñ3[Ðei×j�CØ¤'¨#£,Ô.ÙÜ"% g¨s×/?Ñ/?×/OÐ/OÄ7È3Ã<Ó"P�KØ(+×(8Ñ(8×(HÐ(H¼GÀC»LÈKÕ'W�CÔ$Ø" kÕ1�NØ˜{Õ*’Gò kð "2�äœ7 3›<¨°>Õ)AÓBˆHÜÑWÉ;ÓWÓWˆJ÷ Ø$+�Ô!Ø(6�Õ%ä)Ø)ØØ$Ø!/Ü!(¨£ô�ð —‘—‘˜DÔ!àœ' #›,×&Ø Ô)Ø+/Ó(à#'�LØ'×.Ñ.Ø Ø&¬¨h«ð0÷ ñ[ ôf ˜\×.Ñ.Ó0Ó1°JÕ>ˆÜ#ˆEØ#Õ*ˆHØ×$×$Ð$¨×)>Ñ)>ÀÔ)BÜ!¤+Ó.×4Ñ4´[×5FÑ5FÈ%Ñ5OÓP×`Ñ`Ób×hÑhÐijÓk�Ø $§¡§¡°Ó 9×9�Ø#×6Ñ6Ó8�	ßÜ-0´¸³À	×@VÑ@V×@fÐ@fÔZaÐbeÓZfÐjr×jÑjÕ?ó  .A�IÔ*Ø—'‘'—.‘. Ó*×*Ó*ñ $÷ Ø)8ˆGÕ&ß!Ø)>ˆGÕ&à)>ˆGÔ&÷ ÐÙ8KÓ#LÑ8K°1 A g§J JÑ8KÐ Ð#LÜ˜W×/Ñ/Ó0ˆJô ”Ó'ß‘”×,Ñ,×0Ñ0Ð1EÓFÓGß‘”×0Ñ0°DÑ8Ó9ð ð
 !ŸG™GŸO™O¨HÓ5×5ˆGØ—‘Ó(×,Ñ,Ó.ˆHä$¤TÓ*ˆJÛ�Ø˜1Ÿ7™7Õ#×*Ñ*¨1¯;©;Ö7ñ ô (¬Ó-ˆMÛ,�Ø˜g��Ø#Ÿ™¨¨rÓ2�Ü�v“; !Ô#Ø! &¨¥)Õ,×3Ñ3°EÖ:à! $Õ'×.Ñ.¨uÖ5ñ -ð /<×.AÑ.A×.CÑ*�	˜?ÜÔ/Ó0×8Ñ8¼ÔFW×F_ÑF_Ó9`Óa�çØŸ:™:Ô&7×&>Ñ&>À)Ñ&KÔM^×MhÑMhÐluÑMuÓv‘DàŸ:™:Ô&7×&>Ñ&>À)Ñ&KÔM^×MhÑMhÐlpÑMpÓq�Dà—}‘}Ô%6×%AÑ%A×%FÑ%FÓ%HÓI×OÑOÐPQÓR�Ø#Ÿw™wŸ™¨tÓ4×4�Ø×2Ñ2Ó4�à#œ�ßÜ.Ø),¬T¯ZªZ«\×-=Ñ-=¸bÕ-A×-GÑ-GÓ-IÐ,JÐ'KØ%,Ø"+ô�Fð
 —G‘G—K‘K Ô'ØŸ'™'Ÿ-™-›/×)Ð)çOU¸¿ºÓ#G¹°1 A§G¡G¨Q¢J¹Ò#GÐ[]Ð ã,�EØ! '�N�EÜ!¤# e¨NÕ&;Ó"<Ó=�CàÐ 0Ô0Ø!1°%Õ!8˜Ø×+Ò+¨sÕ2Õ+Ø%×6×6Ð6Ø68˜FÔ3à%¨V×-DÑ-DÔDØ6<×6MÑ6MÐQ[ÐP\Õ6\˜FÖ3ñ Eô "9Ø'-×'8Ñ'8Ø"'Ø),Ø.8¨\ô	"˜ð Ÿ™Ÿ™ FÖ+ô' -ñ1 /DðZ �g‰g�m‰m‹o×Òò ?ò

ùò Sò 6ò %aò &òB :ò +ùò $Mò 6ò2 5ò *ùâ#Gñ. 	ùs`  ‚$l%¦k6§l%³Al%Â
k9Â$l%Â/k<ÃCl%ÆlÆ)l%ÇA
l%ÈlÈl%È.A:l%Ê(lÊ)l%Ë	A"l%Ì,l%Í
4l%Í?A=l%Ï="l%Ð B7l%ÓC,l%×	l
×
l%×&!l%ØAl%ÙlÙl%Ùl%Ù.l%Úl%Ú
lÚBl%Ü,lÜ-G9l%ä&lä'"l%å
A;l%çlçl%çl%ç lç6A(l%éBl%ë/l#ë0l%ë9l%ë<l%ìl%ìl%ì
l%ìl%ìl%ìl%ìl%ìl%c                ó‚   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  /# )r*   r0  Ú	detail_idrÚ   r  rh   )r,   r-   s   "€r%   r.   r/   -  sJ   ø€ ÷ :ñ :¹4¿9¹9ð :ÑQU×QZÑQZð :Ñgk×gpÑgpð :Ñ{÷  |Eñ  |Eñ :r$   c              ƒ  ój	  aa"  € \        \        4      P                  \        \        P                  4      4      P                  \        P                  V8H  4      pV P                  P                  V4      G R j  x€L
 pVP                  4       pV'       g   \        RR4      h\        V3R lVP                   4       R 4      oS'       g   \        RR4      h\        \        4      P                  \        \        P                  4      4      P                  \        P                  R8H  \        P                  V8H  4      P                  \        P                  P!                  4       4      P#                  ^4      pV P                  P                  V4      G R j  x€L
 p	V	P                  4       p
V
'       * pV'       d�   \        R\$        P&                  ! 4       P(                  R,          P+                  4        2VVR7      p
V P                  P-                  V
4       V P                  P/                  4       G R j  x€L
  V'       d   . MV
P                  p\        V3R	 lV 4       R 4      pV'       dì   V;P0                  SP0                  ,          un        SP2                  '       dg   VP2                  '       g   . Vn        SP2                   Uu. uF  qîVP2                  9  g   K  VNK  	  ppV'       d   VP2                  V,           Vn        V P                  P5                  S4      G R j  x€L
  SVP                  9   d   VP                  P7                  S4       M\SVP                  9   d   VP                  P7                  S4       V
P                  f   . V
n        V
P                  P9                  S4       V P                  P/                  4       G R j  x€L
  \        \:        4      P                  \:        P                  V8H  4      pV P                  P                  V4      G R j  x€L
 p\=        VP?                  4       PA                  4       4      ^ 8X  d$   V P                  P5                  V4      G R j  x€L
  V P                  P/                  4       G R j  x€L
  R #  EL" EL	 ELmu upi  ELƒ LÚ LŠ L= L5i)
Nr;   zOriginal PR not foundc              3   óL   <"  € T F  qP                   S8X  g   K  Vx € K  	  R # 5ir    )Úrequest_detail_id)r»   r[  ra  s   & €r%   r½   ÚFProcurementEngineService.assign_vendor_to_pr_detail.<locals>.<genexpr>5  s   øé € ÐV¡/˜Q×5HÑ5HÈIÑ5U—q’q£/ùs   ƒ$š
$zPR Detail not foundr)  r*  r+  r-  c              3   ó`   <"  € T F#  qP                   SP                   8X  g   K  Vx € K%  	  R # 5ir    )rj   )r»   r[  r]  s   & €r%   r½   re  K  s    øé € Ð&\±.¨QÇGÁGÈvÏ|É|ÑD[§q¢q³.ùs   ƒ.¤
.)!r	   r   rM   r   rÍ   rK   r0  r+   rR   r›   r   Únextr9  rÚ   rÜ   rÝ   rÞ   rš   r8   r:  r;  r<  r2  rC   r´   r1  r7  Úremovery   r   r8  rS   rT   )r2   r0  ra  rÚ   r  rV   rX  Úorig_prÚv_stmtÚv_resÚ	vendor_prrZ  Úvendor_detailsÚexisting_vendor_detailÚcÚnew_cÚ
count_stmtÚc_resr]  s   &&f&&             @r%   Úassign_vendor_to_pr_detailÚ3ProcurementEngineService.assign_vendor_to_pr_detail-  sv  ùé € ÜÔ'Ó(×0Ñ0´Ô>O×>WÑ>WÓ1XÓY×_Ñ_Ô`q×`|Ñ`|ð  AKñ  aKó  LˆØ—w‘w—‘ tÓ,×,ˆØ×+Ñ+Ó-ˆçÜ Ð%<Ó=Ð=äÔV '§/¢/ÓVÐX\Ó]ˆßÜ Ð%:Ó;Ð;äÔ)Ó*×2Ñ2´<Ô@Q×@YÑ@YÓ3ZÓ[×aÑaÜ×$Ñ$¨	Ñ1Ü×'Ñ'¨9Ñ4ó
÷ ‰(Ô$×/Ñ/×4Ñ4Ó6Ó
7¿¹¸a»ð 	ð —g‘g—o‘o fÓ-×-ˆØ×,Ñ,Ó.ˆ	à”ˆßÜ)Ø!$¤T§Z¢Z£\×%5Ñ%5°bÕ%9×%?Ñ%?Ó%AÐ$BÐCØ$Ø#ôˆIð
 �G‰G�K‰K˜	Ô"Ø—'‘'—-‘-“/×!Ð!ç%™¨9×+<Ñ+<ˆÜ!%Ô&\±.Ó&\Ð^bÓ!cÐç!Ø"×/Ò/°6×3FÑ3FÕFÕ/Ø×&×&Ð&Ø-×>×>Ð>Ø>@Ð*Ô;Ø$*×$;Ò$;ÓpÑ$;˜qÐH^×HoÑHoÑ?oŸ˜Ñ$;�ÐpßØ>T×>eÑ>eÐhmÕ>mÐ*Ô;Ø—'‘'—.‘. Ó(×(Ð(Ø˜Ÿ™Ô(Ø—‘×&Ñ& vÔ.øà˜Ÿ™Ô(Ø—‘×&Ñ& vÔ.à× Ñ Ò(Ø$&�	Ô!Ø×Ñ×$Ñ$ VÔ,à�g‰g�m‰m‹o×ÐäÔ3Ó4×:Ñ:Ô;R×;]Ñ;]ÐakÑ;kÓlˆ
Ø—g‘g—o‘o jÓ1×1ˆÜˆu�}‰}‹×"Ñ"Ó$Ó%¨Ô*Ø—'‘'—.‘. Ó)×)Ð)à�g‰g�m‰m‹o×Òòq -ò .ò "ùò qò )ñ 	ñ 2á)áùsÇ   „A4R3Á8RÁ9R3ÂC?R3ÆRÆ"R3Æ8A;R3È3R È4R3É A R3Ê!R3Ê3R3ËR#ËR#Ë%A R3Ì%R(Ì&B*R3ÏR+ÏAR3Ð"R-Ð#AR3Ñ1R/Ñ2!R3ÒR1ÒR3ÒR3Ò R3Ò#R3Ò+R3Ò-R3Ò/R3Ò1R3Nc                óŽ   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[ P                  RS[ P                  RS[/# )r*   rD   rj   r3  r  rx   rp   )r8   r9   r   r}   )r,   r-   s   "€r%   r.   r/   i  s[   ø€ ÷ 1?ñ 1?©t¯y©yð 1?ÁÇÁð 1?ÑQXð 1?Ñcg×clÑclð 1?Ñz~÷  {Dñ  {Dð 1?ñ  WZñ 1?r$   c           
   ƒ  ó¤  "  € V P                   P                  \        V4      G Rj  x€L
 pV'       g   \        RR4      hV P	                  V.4      G Rj  x€L
 pVP                  V/ 4      p	\        \        R4      V	P                  R\        R4      4      V	P                  R\        R4      4      ,
          4      p
W£8  d%   \        RR\        V
4       R	\        V4       24      h\        \        4      P                  \        P                  V8H  4      P                  4       P                  ^4      pV P                   P                  V4      G Rj  x€L
 pVP                  4       pV'       g   \        RR
4      hV;P                   V,          un        \#        VVP$                  VR\'        4       P)                  4       RVP*                   2RR7      pV P                   P-                  V4       \/        VVVVVVR7      pV P                   P-                  V4       V P                   P1                  4       G Rj  x€L
  RRR\        V4      /#  EL  ELõ Lþ L5i)z1Issue ad-hoc raw material to a confirmed chassis.Nr;   r<   r�   rŒ   rn   r=   z0Insufficient stock for ad-hoc issue. Available: z, Requested: z+No inventory record found for this materialÚMANUALzAd-hoc issue for chassis zAd-hoc RM request)rj   r"  Úqty_usedÚconsumption_typeÚconsumed_dateÚdescriptionÚremarks)rD   rj   rm   rn   ro   rx   r9  ÚsuccessÚ
issued_qty)r+   r?   r   r   r•   rß   r   r|   r	   r   rK   rj   r™   rš   rR   r›   rŒ   r   r"  Únow_utcÚdaterA   r2  r   rC   )r2   rD   rj   r3  r  rx   rp   rE   Úinv_aggÚaggr  rœ   r�   rG  Úlogr>  s   &&&&&&&         r%   Úissue_adhoc_rmÚ'ProcurementEngineService.issue_adhoc_rmi  s  é € àŸ™Ÿ™¤M°:Ó>×>ˆßÜ Ð%8Ó9Ð9ð ×6Ñ6¸°wÓ?×?ˆØ�k‰k˜% Ó$ˆÜœ › c§g¡g¨m¼WÀS»\Ó&JÈSÏWÉWÐUcÔelÐmpÓeqÓMrÕ&rÓsˆ	àŒ?Ü Ð'WÔX]Ð^gÓXhÐWiÐivÔw|ð  ~Aó  xBð  wCð  &Dó  Eð  Eô œ+Ó&×,Ñ,¬[×->Ñ->À%Ñ-GÓH×XÑXÓZ×`Ñ`ÐabÓcˆØŸ™Ÿ™¨Ó1×1ˆØ×.Ñ.Ó0ˆ	çÜ Ð%RÓSÐSð 	×Ò Õ$Õô ØØ×'Ñ'ØØ%Ü!›)Ÿ.™.Ó*Ø3°G×4FÑ4FÐ3GÐHØ'ô
ˆð 	�‰�‰�CÔô "Ø!ØØØØØ!ô
ˆð 	�‰�‰�DÔà�g‰g�m‰m‹o×ÐØ˜) \´5¸³:Ð>Ð>ò_ ?ò
 @ñ 2ñ@ 	ùsR   ‚$I¦I§I³!IÁI	ÁC8IÅIÅIÅ*CIÈ2IÈ3IÉ	IÉIÉIr1   )NzAd-hoc)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r3   rF   rX   r_   rd   r‚   r•   rž   r  r^  rs  r„  Ú__static_attributes__Ú__classdictcell__)r-   s   @r%   r(   r(      sz   ø‡ € ÷ð ÷ð ò&ò&ò$&÷$
ð 
÷>
ð 
÷6,ð ,÷O
ð O
÷bEð E÷N:ð :÷x1?÷ 1?ð 1?r$   r(   ))r8   r   r   Údecimalr   Úcollectionsr   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr	   r
   Úsqlalchemy.ormr   Úfastapir   Úapp.models.yard_modelsr   r   r4  r   r   r   r   r   r   r   r   Úapp.models.procurement_modelsr   r   r   rÅ   r   r   Úapp.models.bom_modelsr   r   r   r  r(   r#   r$   r%   Ú<module>r•     sR   ðÛ ß 'Ý Ý #Ý /ß #Ý 'Ý !ß D÷ T÷  Tó  Tß hÑ hß Rß MÑ Má
,€÷I
?ó I
?r$   