+
    `Øjé@  ã                   óf  € ^ RI HtHtHtHtHt ^ RI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Ht ^ R
IHt ^ RIHt ^ RIHtHt ^RI H!t! ]! 4       t"]"PG                  R]]!PH                  ,          R7      ]! ]4      ]! ]! RR4      4      3R R ll4       t%]"PG                  R]!PH                  R7      ]! ]4      ]! ]! RR4      4      3R R ll4       t&]"PO                  R]!PH                  ]PP                  R7      ]! ]4      ]! ]! RR4      4      3R R ll4       t)]"PU                  R]!PH                  R7      ]! ]4      ]! ]! RR4      4      3R R ll4       t+]"PG                  R]]!PX                  ,          R7      ]! ^ ^ R7      ]! R ^R!R"7      ]! R#4      ]! ]4      ]! ]! RR4      4      3R$ R% ll4       t-^ R&IH.t. ^ R'I/H0t0 ^ R(IHt R) R* lt1]"PG                  R+]]!Pd                  ,          R7      ]! R#4      ]! ]4      ]! ]! RR4      4      3R, R- ll4       t3]"PO                  R+]!Pd                  ]PP                  R7      ]! ]4      ]! ]! RR4      4      3R. R/ ll4       t4]"PU                  R0]!Pd                  R7      ]! ]4      ]! ]! RR4      4      3R1 R2 ll4       t5]"Pm                  R0]Pn                  R37      ]! ]4      ]! ]! RR44      4      3R5 R6 ll4       t8]"PG                  R7]!Pr                  R7      ]! ]4      ]! ]! RR4      4      3R8 R9 ll4       t:]"PO                  R]!Pr                  ]PP                  R7      ]! ]4      ]! ]! RR4      4      3R: R; ll4       t;]"PU                  R7]!Pr                  R7      ]! ]4      ]! ]! RR4      4      3R< R= ll4       t<R## )>é    )Ú	APIRouterÚDependsÚHTTPExceptionÚQueryÚstatus)Úfunc)ÚAsyncSession)Úselect)Úselectinload)ÚListÚOptional)ÚUUID)Úget_db)Ú	BomMasterÚ	BomDetailÚProductMaster)Úrequire_permission)Ú
LoginUsers)ÚRmMasterÚMaterialTypeMaster)Úschemasz	/products)Úresponse_modelÚBOMÚviewc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚdbÚcurrent_user)r	   r   )Úformats   "Ú8/var/www/html/audi_dev/backend/app/modules/bom/routes.pyÚ__annotate__r!      s   € ÷ "ñ "œLð "Ì*ñ "ó    c              ƒ   óÐ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 pVP                  4       P                  4       #  L"5i©N)Úexecuter
   r   Úorder_byÚnameÚscalarsÚall)r   r   Úresults   && r    Úlist_productsr+      sH   é € à—:‘:œf¤]Ó3×<Ñ<¼]×=OÑ=OÓPÓQ×Q€FØ�>‰>Ó×ÑÓ!Ð!ñ Rùs   ‚?A&ÁA$Á#A&z/products/{product_id}c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Ú
product_idr   r   ©r   r	   r   )r   s   "r    r!   r!      s"   € ÷ ñ ¤$ð ¬Lð ÔZdñ r"   c              ƒ   óx   "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hV#  L5i)Né”  úProduct not found©Ústatus_codeÚdetail)Úgetr   r   )r-   r   r   Úproducts   &&& r    Úget_productr7      s3   é € à—F‘Fœ=¨*Ó5×5€GßÜ¨Ð4GÔHÐHØ€Nñ 6ùs   ‚:œ8�:©:)r   r3   Úcreatec                óP   € V ^8„  d   QhR\         P                  R\        R\        /# ©r   Úpayloadr   r   )r   ÚProductCreater	   r   )r   s   "r    r!   r!   !   s(   € ÷ 
ñ 
¤'×"7Ñ"7ð 
¼\ð 
Ôkuñ 
r"   c              ƒ   óú  "  € V P                   '       d„   \        \        4      P                  \        P                   V P                   8H  4      pVP	                  V4      G R j  x€L
 pVP                  4       P                  4       '       d   \        RRR7      h\        R/ V P                  4       B pVP                  V4       VP                  4       G R j  x€L
  VP                  V4      G R j  x€L
  V#  L’ L! L
5i)Né�  zProduct code already existsr2   © )Úproduct_coder
   r   Úwherer%   r(   Úfirstr   Ú
model_dumpÚaddÚcommitÚrefresh)r;   r   r   ÚstmtÚexistingr6   s   &&&   r    Úcreate_productrI       sÂ   é € à××ÐÜ”mÓ$×*Ñ*¬=×+EÑ+EÈ×I]ÑI]Ñ+]Ó^ˆØŸ™ DÓ)×)ˆØ×ÑÓ×#Ñ#×%Ò%Ü¨CÐ8UÔVÐVÜÑ3˜g×0Ñ0Ó2Ñ3€GØ‡F�Fˆ7„OØ
�)‰)‹+×ÐØ
�*‰*�WÓ
×ÐØ€Nñ *ñ
 Ùùs=   ‚A C;Á"C5Á#'C;ÂA
C;ÃC7ÃC;Ã.C9Ã/C;Ã7C;Ã9C;Úeditc                ó\   € V ^8„  d   QhR\         R\        P                  R\        R\        /# )r   r-   r;   r   r   )r   r   ÚProductUpdater	   r   )r   s   "r    r!   r!   .   s3   € ÷ 	ñ 	¤Tð 	´G×4IÑ4Ið 	Ì|ð 	ô  ~Hñ 	r"   c              ƒ   óP  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  RR7      pVP	                  4        F  w  rg\        WFV4       K  	  VP                  4       G R j  x€L
  VP                  V4      G R j  x€L
  V#  Lƒ L! L
5i)Nr0   r1   r2   T)Úexclude_unset)r5   r   r   rC   ÚitemsÚsetattrrE   rF   )r-   r;   r   r   r6   Úupdate_dataÚkeyÚvalues   &&&&    r    Úupdate_productrT   -   sŽ   é € à—F‘Fœ=¨*Ó5×5€GßÜ¨Ð4GÔHÐHØ×$Ñ$°4Ð$Ó8€KØ!×'Ñ'Ö)‰
ˆÜ�˜eÖ$ñ *à
�)‰)‹+×ÐØ
�*‰*�WÓ
×ÐØ€Nñ 6ñ Ùùs9   ‚B&œB �B&©AB&Â B"ÂB&ÂB$ÂB&Â"B&Â$B&Ú/)Úgei'  i † )rV   ÚleNc          
      ój   € V ^8„  d   QhR\         R\         R\        \        ,          R\        R\        /# )r   ÚskipÚlimitÚsearchr   r   )Úintr   Ústrr	   r   )r   s   "r    r!   r!   <   s>   € ÷ +#ñ +#Ü
ð+#äð+#ô ”S�Mð+#ô 	ð	+#ô
 ñ+#r"   c              ƒ  ó†  "  € \        \        P                  \        P                  ! \        P
                  4      P                  R4      4      P                  \        P                  4      P                  4       p\        \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \         P"                  P                  R4      \         P$                  P                  R4      \        P&                  ! VP(                  P*                  ^ 4      P                  R4      4
      P-                  \         \        P                  \         P                  8H  RR7      P/                  V\        P                  VP(                  P                  8H  4      P1                  \        P                  4      pV'       d[   VP3                  \        P                  P5                  RV R24      \         P"                  P5                  RV R24      ,          4      pVP7                  V 4      P9                  V4      pVP;                  V4      G Rj  x€L
 P=                  4       P?                  4       pV Uu. uF  p\A        V4      NK  	  up#  L;u upi 5i)zœ
Fast lean list: returns BOM headers + product name + component count only.
Does NOT load 33k detail rows - those are loaded on the individual detail page.
Úcomponent_countÚproduct_namer@   T)ÚisouterÚ%N)!r
   r   Úbom_idr   ÚcountÚbom_detail_idÚlabelÚgroup_byÚsubqueryr   r-   Ú
bom_numberÚdescriptionÚ	is_activeÚ
created_atÚ
updated_atr   r'   r@   ÚcoalesceÚcr_   ÚjoinÚ	outerjoinr&   rA   ÚilikeÚoffsetrZ   r%   Úmappingsr)   Údict)	rY   rZ   r[   r   r   Úcount_sqrG   ÚrowsÚrs	   &&&&&    r    Ú	list_bomsry   ;   sì  é € ô 	Œy×Ñ¤§¢¬I×,CÑ,CÓ!D×!JÑ!JÐK\Ó!]Ó^ß	‰”)×"Ñ"Ó	#ß	‰‹ð ô 	Ü×ÑÜ× Ñ Ü× Ñ Ü×!Ñ!Ü×ÑÜ× Ñ Ü× Ñ Ü×Ñ×$Ñ$ ^Ó4Ü×&Ñ&×,Ñ,¨^Ó<Ü�MŠM˜(Ÿ*™*×4Ñ4°aÓ8×>Ñ>Ð?PÓQó	
÷ 
‰ŒmœY×1Ñ1´]×5MÑ5MÑMÐW[ˆÓ	\ß	‰�8œY×-Ñ-°·±×1BÑ1BÑBÓ	Cß	‰”)×&Ñ&Ó	'ð 	÷$ Ø�z‰zÜ× Ñ ×&Ñ&¨¨6¨(°! }Ó5Ü×Ñ×$Ñ$ q¨¨° ]Ó3õ4ó
ˆð
 �;‰;�tÓ×"Ñ" 5Ó)€DØ—*‘*˜TÓ"×"×,Ñ,Ó.×2Ñ2Ó4€DÙ!Ó"™T˜ŒD�ŽG™TÑ"Ð"ñ #ùÚ"ùs$   ‚I<KÉ>J:É?$KÊ#J<Ê7KÊ<K)ÚSpecialFeatureBom)ÚIntegrityError)r   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r   r   Úreturn)r	   Úlistru   )r   s   "r    r!   r!   p   s   € ÷ ñ ¤ð ¼dÄ4½jñ r"   c              ‡  óä  "  € \        \        \        P                  P	                  R4      \        P
                  P	                  R4      \        P                  P	                  R4      4      P                  \        \        P                  \        P                  8H  4      P                  ! V!  P                  \        P
                  4      pV P                  V4      G Rj  x€L
 P                  4       pV UUUUu. uFb  w  rErgRVP                  RVP                  RVP                  RVP                  R	VP                   R
VP"                  RVP$                  RVRVRV/
NKd  	  upppp#  L‡u uppppi 5i)zKFeature BOM lines with the part number, name and unit of each raw material.Úrm_nameÚ
rm_part_noÚrm_uomNÚidÚ	option_idÚrm_idÚquantityÚuomrl   rm   )r
   rz   r   r'   rf   Úpart_noÚunit_of_measurementrp   r…   rA   r&   r%   r)   rƒ   r„   r†   r‡   rl   rm   )r   Ú
conditionsrG   rw   Úmr€   r�   r‚   s   &*      r    Ú_feature_bom_rowsrŒ   p   s6  é € ô 	ÜÜ�M‰M×Ñ 	Ó*Ü×Ñ×"Ñ" <Ó0Ü×(Ñ(×.Ñ.¨xÓ8ó		
÷ 
‰ŒhÔ)×/Ñ/´8·>±>ÑAÓ	Bß	‰ð	ð ñ	÷ 
‰”(×"Ñ"Ó	#ð 	ð —*‘*˜TÓ"×"×'Ñ'Ó)€Dñ /3öñ /3Ñ*ˆA˜
ð �!—$‘$Ø˜Ÿ™Ø�Q—W‘WØ˜Ÿ
™
Ø�1—5‘5Ø˜!Ÿ,™,Ø˜!Ÿ,™,Ø�wØ˜*Ø�fó	
ñ /3ôð ñ #ùõùs%   ‚CE0ÃE&ÃE0Ã8A(E(
Å E0Å(E0z/feature-bomsc                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# )r   r„   r   r   )r   r   r	   r   )r   s   "r    r!   r!   �   s*   € ÷ 4ñ 4Üœ�~ð4äð4ô ñ4r"   c              ƒ  ót   "  € V '       d   \         P                  V 8H  .M. p\        V.VO5!  G Rj  x€L
 #  L5i)zVRaw materials added by feature options. A feature option's parts apply to every model.N)rz   r„   rŒ   )r„   r   r   rŠ   s   &&& r    Úlist_feature_bomsr�   �   s7   é € ÷ @IÔ#×-Ñ-°Ñ:Ñ;Èb€JÜ" 2Ð3¨
Ó3×3Ð3Ñ3ùs   ‚/8±6²8c                óP   € V ^8„  d   QhR\         P                  R\        R\        /# r:   )r   ÚSpecialFeatureBomCreater	   r   )r   s   "r    r!   r!   ›   s1   € ÷ Pñ P¤g×&EÑ&Eð PÌ<ð Pô  zDñ Pr"   c              ƒ   óª  "  € \        V P                  V P                  V P                  V P                  R 7      pVP                  V4        VP                  4       G Rj  x€L
  \        T\         P                  TP                  8H  4      G Rj  x€L
 ^ ,          #  L:  \         d(    TP                  4       G Rj  x€L 
  \        RRR7      hi ; i LB5i))r„   r…   r†   r‡   Nr>   z7This material is already mapped to this feature option.r2   )rz   r„   r…   r†   r‡   rD   rE   r{   Úrollbackr   rŒ   rƒ   )r;   r   r   Úmappings   &&& r    Úcreate_feature_bomr•   š   s±   é € äØ×#Ñ#Ø�m‰mØ×!Ñ!Ø�K‰Kô	€Gð ‡F�Fˆ7„OðoØ�i‰i‹k×Ðô $ BÔ(9×(<Ñ(<ÀÇ
Á
Ñ(JÓK×KÈQÕOÐOñ	 	øÜô oØ�k‰k‹m×ÑÜ¨Ð4mÔnÐnðoúñ LùsH   ‚A	CÁB ÁBÁ B Á$*CÂCÂCÂB ÂCÂ:B=Â;CÃCz/feature-boms/{mapping_id}c                ó\   € V ^8„  d   QhR\         R\        P                  R\        R\        /# )r   Ú
mapping_idr;   r   r   )r   r   ÚSpecialFeatureBomUpdater	   r   )r   s   "r    r!   r!   ¬   s:   € ÷ Pñ P¬ð P¼×8WÑ8Wð PÔ]ið Pô  LVñ Pr"   c              ƒ   óì  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  e   VP                  Vn        VP                  e   VP                  Vn         VP                  4       G R j  x€L
  \        T\        P                  T 8H  4      G R j  x€L
 ^ ,          #  Lœ L2  \         d(    TP                  4       G R j  x€L 
  \        RRR7      hi ; i LD5i)Nr0   úMapping not foundr2   r>   z%This update causes a duplicate entry.)
r5   rz   r   r†   r‡   rE   r{   r“   rŒ   rƒ   )r—   r;   r   r   r”   s   &&&& r    Úupdate_feature_bomr›   «   sÏ   é € à—F‘FÔ,¨jÓ9×9€GßÜ¨Ð4GÔHÐHà×ÑÒ#Ø"×+Ñ+ˆÔØ‡{�{ÒØ—k‘kˆŒð]Ø�i‰i‹k×Ðô $ BÔ(9×(<Ñ(<À
Ñ(JÓK×KÈQÕOÐOñ :ñ 	øÜô ]Ø�k‰k‹m×ÑÜ¨Ð4[Ô\Ð\ð]úñ LùsW   ‚C4œB9�C4©AC4Á5B= ÂB;Â	B= Â C4Â-C2Â.C4Â;B= Â=C/ÃCÃC/Ã/C4)r3   Údeletec                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   r—   r   r   r.   )r   s   "r    r!   r!   ¾   s"   € ÷ ñ ¬ð ´<ð Ôakñ r"   c              ƒ   óâ   "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RRR7      hVP                  V4      G R j  x€L
  VP	                  4       G R j  x€L
  R #  LL L  L
5i)Nr0   rš   r2   )r5   rz   r   rœ   rE   )r—   r   r   r”   s   &&& r    Údelete_feature_bomrŸ   ½   sX   é € à—F‘FÔ,¨jÓ9×9€GßÜ¨Ð4GÔHÐHØ
�)‰)�GÓ
×ÐØ
�)‰)‹+×Òñ	 :ñ Ùùs8   ‚A/œA)�A/©!A/Á
A+ÁA/Á"A-Á#A/Á+A/Á-A/z	/{bom_id}c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   rc   r   r   r.   )r   s   "r    r!   r!   È   s'   € ÷ Dñ Dœ$ð D¤Lð DÔR\ñ Dr"   c              ƒ   ó6	  "  € \        \        4      P                  \        P                  V 8H  4      P	                  \        \        P                  4      \        \        P                  4      4      pVP                  V4      G R j  x€L
 pVP                  4       P                  4       pV'       g   \        RRR7      hVP                   Uu. uF  qfP                  NK  	  pp/ pV'       EdÀ   ^ RIHp	Hp
 \        \         \"        P$                  P'                  R4      4      P)                  \"        \         P*                  \"        P,                  8H  4      P                  \         P                  P/                  V4      4      pVP                  V4      G R j  x€L
 pVP1                  4        F  w  rÞRVRVR. /W�P                  &   K  	  \        V	P                  V
P$                  4      P3                  W©P4                  V
P4                  8H  4      P                  V	P                  P/                  V4      4      P                  V	P6                  R	8H  4      pVP                  V4      G R j  x€L
 pVP1                  4        F.  w  ppVV9   g   K  VV,          R,          P9                  V4       K0  	  R
VP                  RVP:                  RVP<                  RVP>                  RVP6                  RVP@                  RVPB                  RVP                  '       d   VP                  P$                  MR RVP                  '       d   VP                  PD                  MR R. /
pVP                   EF"  pVPG                  VP                  4      pV'       d
   VR,          MR pV'       d
   VR,          MR pV'       d(   VR,          '       d   RP3                  VR,          4      MRpVR,          P9                  RVPH                  R
VP                  RVP                  RVPJ                  RVPL                  ;'       g    V'       d   VPN                  MR RV'       d   VP$                  MRRV'       d   VPP                  MR RT;'       g    RRV/	4       EK%  	  V#  ELu upi  EL  EL35i)Nr0   úBOM not foundr2   )ÚRmVendorMappingÚVendorMasterÚmaterial_type_nameÚrmÚmat_typeÚ	suppliersTrc   r-   ri   rj   rk   rl   rm   r`   r@   Údetailsú, u   â€”re   r…   r†   r‡   r€   ÚUnknownr�   Úmaterial_typeÚsupplier_name))r
   r   rA   rc   Úoptionsr   r6   r©   r%   r(   rB   r   r…   Úapp.models.rm_modelsr£   r¤   r   r   r'   rf   rq   Úmaterial_type_idrƒ   Úin_r)   rp   Ú	vendor_idrk   Úappendr-   ri   rj   rl   rm   r@   r5   re   r†   r‡   r‰   rˆ   )rc   r   r   rG   r*   ÚbomÚdÚrm_idsÚrm_mapr£   r¤   Úrm_stmtÚrm_resr¦   Úmat_type_nameÚvendor_stmtÚ
vendor_resr…   Úvendor_nameÚbom_dictÚrm_datar§   r¨   s   &&&                    r    Úget_bomrÀ   Ç   ss  é € ä”)Ó×"Ñ"¤9×#3Ñ#3°vÑ#=Ó>×FÑFÜ”Y×&Ñ&Ó'Ü”Y×&Ñ&Ó'ó€Dð —:‘:˜dÓ#×#€FØ
�.‰.Ó
×
 Ñ
 Ó
"€CçÜ¨°OÔDÐDà"Ÿ{š{Ó+™{˜!�gŒg™{€FÐ+Ø€Fß€vßFô ”8Ô/×4Ñ4×:Ñ:Ð;OÓPÓQß‰YÔ)¬8×+DÑ+DÔHZ×H]ÑH]Ñ+]Ó^ß‰U”8—>‘>×%Ñ% fÓ-Ó.ð 	ð
 —z‘z 'Ó*×*ˆØ!'§¡¦ÑˆBØ $ b¨*°mÀ[ÐRTÐUˆF—8‘8Óñ ".ô
 �?×(Ñ(¨,×*;Ñ*;Ó<ß‰T�,× 9Ñ 9¸\×=SÑ=SÑ SÓTß‰U�?×(Ñ(×,Ñ,¨VÓ4Ó5ß‰U�?×,Ñ,°Ñ4Ó5ð	 	ð Ÿ:™: kÓ2×2ˆ
Ø",§.¡.Ö"2ÑˆE�;Ø˜ŽØ�u•˜kÕ*×1Ñ1°+Ö>ñ #3ð
 	�#—*‘*Ø�c—n‘nØ�c—n‘nØ�s—‘Ø�S—]‘]Ø�c—n‘nØ�c—n‘nØ¨C¯K¯K¨K˜Ÿ™×(Ò(¸TØ°C·K·K°K˜Ÿ™×0Ò0ÀTØ�2ð€Hð �[�[ˆØ—*‘*˜QŸW™WÓ%ˆß%ˆW�TŽ]¨4ˆß*1�7˜:Ö&°tˆß7>À7È;×CWÔCW�D—I‘I˜g kÕ2Ô3Ð]bˆ	à�Õ×"Ñ"Ø˜QŸ_™_Ø�a—h‘hØ�Q—W‘WØ˜Ÿ
™
Ø�1—5‘5×DÐD·r˜R×3Ò3¸tØ§"�r—w’w¨)Ø¯˜"Ÿ*š*°Ø˜X×2Ð2¨Ø˜Yð
$
÷ 
	ñ ð$ €Oò $ùò ,ò +ò 3ùs�   ‚BRÂRÂ)RÂ/RÃ
RÃB5RÆRÆCRÉ#RÉ$RÊB	RÌ)RÌ;A RÎRÎ/RÎ>A/RÐ.RÐ7RÑRÑ#RÑ:RÒRÒRc                óP   € V ^8„  d   QhR\         P                  R\        R\        /# r:   )r   Ú	BomCreater	   r   )r   s   "r    r!   r!     s(   € ÷ 6)ñ 6)œg×/Ñ/ð 6)´\ð 6)Ôcmñ 6)r"   c              ƒ   óD  "  € VP                  \        V P                  4      G R j  x€L
 pV'       g   \        RRR7      h\	        \
        4      P                  \
        P                  V P                  8H  4      pVP                  V4      G R j  x€L
 pVP                  4       P                  4       '       d   \        RRR7      hV P                  '       Ed5   V P                   Uu0 uF  qfP                  kK  	  pp\	        \        P                  4      P                  \        P                  P                  V4      4      pVP                  V4      G R j  x€L
 p	\        V	P                  4       P!                  4       4      p
Wz,
          pV'       d)   RP#                  R V 4       4      p\        RRV 2R7      hV P                   Uu. uF  qfP                  NK  	  pp\%        V4      \%        \        V4      4      8w  d   \        RRR7      hV P&                  '       dx   ^ R	IHp V! \
        4      P                  \
        P                  V P                  8H  \
        P&                  R
8H  4      P-                  RR7      pVP                  V4      G R j  x€L
  \        V P                  V P                  V P.                  V P&                  R7      pVP1                  V4       VP3                  4       G R j  x€L
  V P                   FK  p\5        VP6                  VP                  VP8                  VP:                  R7      pVP1                  V4       KM  	  VP=                  4       G R j  x€L
  \?        VP6                  V4      G R j  x€L
 #  EL^ ELúu upi  EL<u upi  EL	 L« L: L5i)Nr>   r1   r2   úBOM number already existsrª   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir$   ©r]   ©Ú.0Úrids   & r    Ú	<genexpr>Úcreate_bom.<locals>.<genexpr>!  s   é € Ð#G¹°¤C¨§H H»ùó   ‚úInvalid Raw Material ID(s): ú7Duplicate raw materials are not allowed in the same BOM©ÚupdateTF©rk   )r-   ri   rj   rk   ©rc   r…   r†   r‡   ) r5   r   r-   r   r
   r   rA   ri   r%   r(   rB   r©   r…   r   r±   Úsetr)   rp   Úlenrk   Ú
sqlalchemyrÐ   Úvaluesrj   rD   Úflushr   rc   r†   r‡   rE   rÀ   )r;   r   r   r6   rG   rH   rµ   r¶   r¸   Ú	rm_resultÚexisting_rm_idsÚmissing_rm_idsÚmissing_strÚrm_ids_listrÐ   Údeactivate_stmtr´   r4   s   &&&               r    Ú
create_bomrÞ     s¼  é € à—F‘Fœ=¨'×*<Ñ*<Ó=×=€GßÜ¨Ð4GÔHÐHä”)Ó×"Ñ"¤9×#7Ñ#7¸7×;MÑ;MÑ#MÓN€DØ—Z‘Z Ó%×%€HØ×ÑÓ×Ñ×!Ò!Ü¨Ð4OÔPÐPð ‡‡�Ø#*§?¢?Ó3¡?˜a—'”'¡?ˆÐ3ÜœŸ™Ó(×.Ñ.¬x¯~©~×/AÑ/AÀ&Ó/IÓJˆØŸ*™* WÓ-×-ˆ	Ü˜i×/Ñ/Ó1×5Ñ5Ó7Ó8ˆØÕ1ˆßØŸ)™)Ñ#G¹Ó#GÓGˆKÜ¨CÐ:VÐWbÐVcÐ8dÔeÐeð )0¯ªÓ8© 1—w”w©ˆÐ8Üˆ{Óœs¤3 {Ó#3Ó4Ô4Ü¨CÐ8qÔrÐrà××ÐÝ%á”9Óß‰U”9×'Ñ'¨7×+=Ñ+=Ñ=¼y×?RÑ?RÐVZÑ?ZÓ[ß‰V˜eˆVÓ$ð 	ð
 �j‰j˜Ó)×)Ð)ä
Ø×%Ñ%Ø×%Ñ%Ø×'Ñ'Ø×#Ñ#ô	€Cð ‡F�Fˆ3„KØ
�(‰(‹*×Ðà�_Œ_ˆÜØ—:‘:Ø—'‘'Ø—Z‘ZØ—‘ô	
ˆð 	�‰ˆvŽñ ð �)‰)‹+×ÐÜ˜Ÿ™ RÓ(×(Ð(òk >ò
 &ùò 4â-ùò 9ò 	*ñ ñ Ù(ùs±   ‚$N ¦N§N ³AN ÂNÂ'N Â6N ÃN Ã$N
Ã8AN ÅNÅA1N ÇNÇAN ÈA2N ÊNÊAN Ë.NË/A2N Í!NÍ"N Í?NÎ N ÎN Î
N ÎN ÎN ÎN ÎN c                ó\   € V ^8„  d   QhR\         R\        P                  R\        R\        /# )r   rc   r;   r   r   )r   r   Ú	BomUpdater	   r   )r   s   "r    r!   r!   H  s5   € ÷ @%ñ @%œTð @%¬G×,=Ñ,=ð @%Ä<ð @%Ôq{ñ @%r"   c              ƒ   ó*	  "  € \        \        4      P                  \        P                  V 8H  4      P	                  \        \        P                  4      4      pVP                  V4      G R j  x€L
 pVP                  4       P                  4       pV'       g   \        RRR7      hVP                  e°   VP                  VP                  8w  d•   \        \        4      P                  \        P                  VP                  8H  4      pVP                  V4      G R j  x€L
 pVP                  4       P                  4       '       d   \        RRR7      hVP                  Vn        VP                  e   VP                  Vn        VP                  e­   VP                  Vn        VP                  '       dŠ   ^ RIHp	 V	! \        4      P                  \        P                   VP                   8H  \        P                  R8H  \        P                  V 8g  4      P#                  RR	7      p
VP                  V
4      G R j  x€L
  VP                  Ee   VP                  '       Ed5   VP                   Uu0 uF  q»P$                  kK  	  pp\        \&        P$                  4      P                  \&        P$                  P)                  V4      4      pVP                  V4      G R j  x€L
 p\+        VP                  4       P-                  4       4      pWÏ,
          pV'       d)   R
P/                  R V 4       4      p\        RRV 2R7      hVP                   Uu. uF  q»P$                  NK  	  pp\1        V4      \1        \+        V4      4      8w  d   \        RRR7      hVP                   F  pVP3                  V4      G R j  x€L
  K  	  VP                  P5                  4        VP                   Ff  p\7        VP                  VP$                  VP8                  VP:                  R7      pVP=                  V4       VP                  P?                  V4       Kh  	  VPA                  4       G R j  x€L
  \C        W4      G R j  x€L
 #  EL EL` ELHu upi  EL¬u upi  LÙ L/ L5i)Nr0   r¢   r2   r>   rÄ   rÏ   TFrÑ   rª   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir$   rÆ   rÇ   s   & r    rÊ   Úupdate_bom.<locals>.<genexpr>q  s   é € Ð'K¹N°S¬¨C¯¨»NùrÌ   rÍ   rÎ   rÒ   )"r
   r   rA   rc   r®   r   r©   r%   r(   rB   r   ri   rj   rk   rÕ   rÐ   r-   rÖ   r…   r   r±   rÓ   r)   rp   rÔ   rœ   Úclearr   r†   r‡   rD   r³   rE   rÀ   )rc   r;   r   r   rG   r*   r´   Ú
stmt_checkrH   rÐ   rÝ   rµ   r¶   r¸   rØ   rÙ   rÚ   rÛ   rÜ   r4   s   &&&&                r    Ú
update_bomræ   G  se  é € ä”)Ó×"Ñ"¤9×#3Ñ#3°vÑ#=Ó>×FÑFÄ|ÔT]×TeÑTeÓGfÓg€DØ—:‘:˜dÓ#×#€FØ
�.‰.Ó
×
 Ñ
 Ó
"€CçÜ¨°OÔDÐDà×ÑÒ%¨'×*<Ñ*<ÀÇÁÔ*NÜœIÓ&×,Ñ,¬Y×-AÑ-AÀW×EWÑEWÑ-WÓXˆ
ØŸ™ JÓ/×/ˆØ×ÑÓ×#Ñ#×%Ò%Ü¨CÐ8SÔTÐTØ ×+Ñ+ˆŒà×ÑÒ&Ø!×-Ñ-ˆŒØ×ÑÒ$Ø×)Ñ)ˆŒØ××ÐÝ)á”yÓ!ß‘Ü×(Ñ(¨C¯N©NÑ:Ü×'Ñ'¨4Ñ/Ü×$Ñ$¨Ñ.ó÷
 ‘ %�Ó(ð ð —*‘*˜_Ó-×-Ð-à‡�Ó"à�?�?‰?Ø'.§¢Ó7¡ !—g”g¡ˆFÐ7ÜœXŸ^™^Ó,×2Ñ2´8·>±>×3EÑ3EÀfÓ3MÓNˆGØ Ÿj™j¨Ó1×1ˆIÜ! )×"3Ñ"3Ó"5×"9Ñ"9Ó";Ó<ˆOØ#Õ5ˆNßØ"Ÿi™iÑ'K¹NÓ'KÓK�Ü#°Ð>ZÐ[fÐZgÐ<hÔiÐið -4¯OªOÓ<©O qŸ7œ7©OˆKÐ<Ü�;Ó¤3¤s¨;Ó'7Ó#8Ô8Ü#°Ð<uÔvÐvà—”ˆAØ—)‘)˜A“,×Òñ à�‰×ÑÔà—”ˆAÜØ—z‘zØ—g‘gØŸ™Ø—E‘Eô	ˆFð �F‰F�6ŒNØ�K‰K×Ñ˜vÖ&ñ !ð �)‰)‹+×ÐÜ˜Ó$×$Ð$ò} $ò 0ò( .ùò
 8â1ùò =ñ
 ñ Ù$ùsµ   ‚A*RÁ,Q7Á-)RÂBRÄQ:Ä'RÅA-RÆ1BRÈ5Q=È6%RÉRÉ*R É>ARËRËA1RÍRÍARÎ3RÎ4B+RÑRÑ RÑ2RÑ3RÑ:RÑ=RÒ RÒRÒRÒR)=Úfastapir   r   r   r   r   rÕ   r   Úsqlalchemy.ext.asyncior	   Úsqlalchemy.futurer
   Úsqlalchemy.ormr   Útypingr   r   Úuuidr   Úapp.core.databaser   Úapp.models.bom_modelsr   r   r   Úapp.core.securityr   Úapp.models.core_modelsr   r¯   r   r   Ú r   Úrouterr5   ÚProductResponser+   r7   ÚpostÚHTTP_201_CREATEDrI   ÚputrT   ÚBomListResponsery   rz   Úsqlalchemy.excr{   rŒ   ÚSpecialFeatureBomResponser�   r•   r›   rœ   ÚHTTP_204_NO_CONTENTrŸ   ÚBomResponserÀ   rÞ   ræ   r?   r"   r    Ú<module>rü      su  ðß DÕ DÝ Ý /Ý $Ý 'ß !Ý å $ß EÑ EÝ 0Ý -ß =Ý á	‹€ð ‡�ˆK¨¨W×-DÑ-DÕ(E€ÓFÙ+2°6«?ÑW^Ñ_qÐrwÐyó  `Aó  XBö "ó Gð"ð ‡�Ð$°W×5LÑ5L€ÓMÙ;BÀ6»?Ñgnñ  pBð  CHð  JPó  pQó  hRö ó Nðð ‡�ˆ[¨×)@Ñ)@Èf×NeÑNe€ÓfÙLSÐTZËOÑxñ  ASð  TYð  [có  Adó  yeö 
ó gð
ð ‡�Ð$°W×5LÑ5L€ÓMÙ^eÐflÓ^mñ  KRñ  Seð  fkð  msó  Stó  Kuö 	ó Nð	ð ‡�ˆC  W×%<Ñ%<Õ =€Ó>á�a˜A”Ù�u  vÔ.Ù! $›KÙ˜v“Ù&Ñ'9¸%ÀÓ'HÓIö+#ó ?ð+#õ` 4Ý )Ý õð> ‡�ˆO¨D°×1RÑ1RÕ,S€ÓTá % d£Ù˜v“Ù&Ñ'9¸%ÀÓ'HÓIö4ó Uð4ð ‡�ˆ_¨W×-NÑ-NÐ\b×\sÑ\s€ÓtÙZaÐbhÓZiñ  GNñ  Oað  bgð  iqó  Oró  Gsö Pó uðPð  ‡�Ð(¸×9ZÑ9Z€Ó[ÙlsÐtzÓl{ñ  Y`ñ  asð  tyð  {Aó  aBó  YCö Pó \ðPð" ‡�Ð+¸×9SÑ9S€ÓTÙBIÈ&Ã/Ñnuñ  wIð  JOð  QYó  wZó  o[ö ó Uðð ‡�ˆK¨×(;Ñ(;€Ó<Ù3:¸6³?Ñ_fÑgyÐzð  BHó  hIó  `Jö Dó =ðDðL ‡�ˆS ×!4Ñ!4À&×BYÑBY€ÓZÙDKÈFÃOÑpwñ  yKð  LQð  S[ó  y\ó  q]ö 6)ó [ð6)ðp ‡�ˆK¨×(;Ñ(;€Ó<ÙRYÐZ`ÓRañ  Fñ  GYð  Z_ð  agó  Ghó  iö @%ó =ò@%r"   