+
    `Øj‡   ã                   óØ  € ^ RI HtHt ^ RIHt ^ RIHtHt ^ RIt^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHtHtHtHtHtHt ]! ]! ]! R
R4      4      .R7      t]P7                  R4      ]! ]
4      3R R ll4       t]P7                  R4      ]! ]
4      3R R ll4       t]P7                  R4      ]! ]
4      3R R ll4       t]P7                  R4      ]! ]
4      3R R ll4       tR# )é    )Ú	APIRouterÚDepends©ÚAsyncSession)ÚselectÚfuncN)Úget_db)Úrequire_permission)ÚVehicleModelMaster)ÚProductMasterÚ	BomMasterÚSpecialFeatureBom)ÚSpecialFeatureOptionMasterÚSpecialFeatureMasterÚModelBodyTypeMapÚModelSegmentMapÚCustomerSegmentMasterÚBodyTypeMasterÚBOMÚview)Údependenciesz
/dashboardc                ó$   € V ^8„  d   QhR\         /# ©é   Údbr   )Úformats   "ÚT/var/www/html/audi_dev/backend/app/modules/production_masters/bom_analysis_routes.pyÚ__annotate__r      s   € ÷ Mñ M¤ñ Mó    c              ƒ   ób  "  € \        \        P                  \        P                  P                  R 4      \        P                  P                  R4      \        P                  \        P                  ! \        P                  4      P                  R4      4      P                  \        \        P                  \        P                  8H  4      P                  \        \        P                   \        P                   8H  4      P                  \"        \"        P                  \        P                  8H  4      P                  \        \        P$                  \"        P$                  8H  4      P'                  \        \        P(                  \        P*                  ! \        P,                  ! \        P.                  ! \        P0                  ! \        P                  4      RR4      4      R\        P,                  ! \        P.                  ! \        P0                  ! \        P                  4      RR4      4      R\        P,                  ! \        P.                  ! \        P0                  ! \        P                  4      RR4      4      4      8H  4      P'                  \        \        P                  \        P                  8H  4      P3                  \        P                  \        P                   \        P$                  \        P                  4      pV P5                  V4      G Rj  x€L
 pVP7                  4       p\9        V4      pV Uu. uFd  qUP:                  ^ 8X  g   K  RVP                  R VP<                  RVP>                  RVP                  '       d   \A        VP                  4      MR/NKf  	  pp\        \B        PD                  \B        PF                  \H        PJ                  \        P                  ! \L        PN                  4      P                  R	4      4      P                  \H        \H        PP                  \B        PP                  8H  4      P'                  \L        \L        PD                  \B        PD                  8H  4      PS                  \        PT                  ! \        P0                  ! \B        PF                  4      4      R
8g  4      P3                  \B        PD                  \H        PP                  4      pV P5                  V4      G Rj  x€L
 pVP7                  4       p	\9        V	4      p
V	 Uu. uFD  qUPV                  ^ 8X  g   K  R\A        VPD                  4      RVPF                  RVPJ                  /NKF  	  ppRRVRV\9        V4      ,
          RV
RV
\9        V4      ,
          /RRVRV//#  EL‰u upi  L©u upi 5i)Úbody_type_nameÚsegment_nameÚ	bom_countÚ Ú_Ú___NÚmodel_numberÚ
product_idÚmapped_countúnot requiredÚ	option_idÚoption_valueÚfeature_nameÚkpisÚtotal_base_modelsÚconfigured_base_modelsÚtotal_feature_optionsÚconfigured_feature_optionsÚaction_requiredÚmissing_base_bomsÚmissing_feature_boms),r   r   r'   r   ÚnameÚlabelr   r   r(   r   Úcountr   Úbom_idÚjoinr   Úmodel_idÚbody_type_idr   Ú
segment_idÚ	outerjoinÚproduct_codeÚconcatÚupperÚreplaceÚtrimÚgroup_byÚexecuteÚallÚlenr#   r!   r"   Ústrr   r+   r,   r   r-   r   ÚidÚ
feature_idÚwhereÚlowerr)   )r   Ú
base_queryÚbase_resultÚbase_modelsr/   Úrr4   Úfeature_queryÚfeature_resultÚfeature_optionsr1   r5   s   &           r   Úget_bom_dashboardrT      sf  é € ô
 Ü×'Ñ'Ü×Ñ×!Ñ!Ð"2Ó3Ü×"Ñ"×(Ñ(¨Ó8Ü× Ñ Ü�
Š
”9×#Ñ#Ó$×*Ñ*¨;Ó7ó÷ �dÜÔ*×3Ñ3Ô7I×7RÑ7RÑRóç
�dÜœ×3Ñ3Ô7G×7TÑ7TÑTóç
�dÜœ×1Ñ1Ô5G×5PÑ5PÑPóç
�dÜÔ4×?Ñ?Ä?×C]ÑC]Ñ]óç�iÜ”}×1Ñ1´T·[²[Ü�JŠJ”t—|’|¤D§I¢I¬n×.AÑ.AÓ$BÀCÈÓMÓNØÜ�JŠJ”t—|’|¤D§I¢IÔ.C×.HÑ.HÓ$IÈ3ÐPSÓTÓUØÜ�JŠJ”t—|’|¤D§I¢IÔ.@×.MÑ.MÓ$NÐPSÐUXÓYÓZó6
ñ 
ó÷ �iÜ”9×'Ñ'¬=×+CÑ+CÑCóç�hÜ×#Ñ#¤^×%@Ñ%@ÔBW×BbÑBbÔdq×d|Ñd|óð1 ð8 Ÿ
™
 :Ó.×.€KØ—/‘/Ó#€Kä˜KÓ(Ðñ óáˆA§¡¨qÑ 0ô 	hˆ˜Ÿ™Ð)9¸1×;KÑ;KÈ^Ð]^×]kÑ]kÐmyð  QR÷  Q]÷  Q]ð  Q]Ô{~ð  @A÷  @Lñ  @Lô  |Mð  cgó  	hÙð ð ô Ü"×,Ñ,Ü"×/Ñ/Ü×)Ñ)Ü�
Š
Ô$×'Ñ'Ó(×.Ñ.¨~Ó>ó	÷
 �dÜÔ2×=Ñ=ÔA[×AfÑAfÑfóç�iÜÔ,×6Ñ6Ô:T×:^Ñ:^Ñ^óç�eÜ�
Š
”4—9’9Ô7×DÑDÓEÓFÈ.ÑXóç�hÜ"×,Ñ,Ô.B×.MÑ.Móð ð Ÿ:™: mÓ4×4€NØ$×(Ñ(Ó*€Oä Ó0Ðñ !óá ˆA§N¡N°aÑ$7ô 	hˆ”c˜!Ÿ+™+Ó&¨¸¿¹ÈÐXY×XfÑXfÓgÙ ð ð ð 	ØÐ!2Ø$Ð&7¼#Ð>OÓ:PÕ&PØ#Ð%:Ø(Ð*?Ä#ÐFZÓB[Õ*[ð	
ð 	ØÐ!2Ø"Ð$8ð
ðð òE /ùòñ* 5ùòùsU   ‚LV/ÌV Ì#V/Ì;V#Í6V#Î	V#Î%EV/Ó>V(Ó?#V/Ô"V*Ô93V*Õ,5V/Ö#V/Ö*V/z/base-modelsc                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r   r   _   s   € ÷ 1ñ 1¤,ñ 1r   c              ƒ   óJ  "  € \        \        P                  \        P                  \        P                  \        P
                  \        P                  \        P                  P                  R 4      \        P                  \        P                  P                  R4      \        P                  \        P                  \        P                   4      P#                  \$        \$        P                  \        P                  8H  4      P#                  \        \        P                  \$        P                  8H  4      P#                  \&        \&        P                  \        P                  8H  4      P#                  \        \        P                  \&        P                  8H  4      P)                  \        \        P*                  \,        P.                  ! \,        P0                  ! \,        P2                  ! \,        P4                  ! \        P                  4      RR4      4      R\,        P0                  ! \,        P2                  ! \,        P4                  ! \        P                  4      RR4      4      R\,        P0                  ! \,        P2                  ! \,        P4                  ! \        P                  4      RR4      4      4      8H  4      P)                  \        \        P                  \        P                  8H  4      P7                  \        P                  \        P                  \        P                  4      pV P9                  V4      G Rj  x€L
 pVP;                  4       p. pV FÃ  pTP=                  R\?        VP                  4      RVP                  R VP@                  RVPB                  RVP                  R	VP
                  R
VP                  '       d   \?        VP                  4      MRRVP                  '       d   \?        VP                  4      MRRVP                   /	4       KÅ  	  V#  Lá5i)r!   r"   r$   r%   r&   Nr;   r'   Ú	image_urlÚ	is_activer(   r9   Ú
bom_number)"r   r   r;   r'   rW   rX   r   r<   r6   r7   r   r=   r   r(   r   r9   rY   r:   r   r   r>   r?   r   r@   rA   rB   rC   Úorder_byrE   rF   ÚappendrH   r!   r"   )r   rM   ÚresultÚrowsÚresponserP   s   &     r   Úget_bom_base_modelsr_   ^   s¾  é € äÜ×#Ñ#Ü×'Ñ'Ü×$Ñ$Ü×$Ñ$Ü×#Ñ#Ü×Ñ×!Ñ!Ð"2Ó3Ü×(Ñ(Ü×"Ñ"×(Ñ(¨Ó8Ü× Ñ Ü×ÑÜ×Ñó÷ �dÜÔ*×3Ñ3Ô7I×7RÑ7RÑRóç
�dÜœ×3Ñ3Ô7G×7TÑ7TÑTóç
�dÜœ×1Ñ1Ô5G×5PÑ5PÑPóç
�dÜÔ4×?Ñ?Ä?×C]ÑC]Ñ]óç�iÜ”}×1Ñ1´T·[²[Ü�JŠJ”t—|’|¤D§I¢I¬n×.AÑ.AÓ$BÀCÈÓMÓNØÜ�JŠJ”t—|’|¤D§I¢IÔ.C×.HÑ.HÓ$IÈ3ÐPSÓTÓUØÜ�JŠJ”t—|’|¤D§I¢IÔ.@×.MÑ.MÓ$NÐPSÐUXÓYÓZó6
ñ 
ó÷ �iÜ”9×'Ñ'¬=×+CÑ+CÑCóç�hÔ!×.Ñ.´×0CÑ0CÔEZ×E_ÑE_Ó`ð= ð@ —:‘:˜jÓ)×)€FØ�:‰:‹<€Dà€HÛˆØ�‰Øœ˜AŸJ™J›Ø˜AŸN™NØ˜a×.Ñ.Ø˜AŸN™NØ˜Ÿ™Ø˜Ÿ™Ø¨q¯|¯|¨|œ#˜aŸl™lÔ+ÀØ q§x§x x”c˜!Ÿ(™(”m°TØ˜!Ÿ,™,ð

ö 
	ñ ð €Oñ! *ùs   ‚L=P#Ì?P!Í B2P#Ï3/P#z/feature-versions/{option_id}c                óD   € V ^8„  d   QhR\         P                  R\        /# )r   r+   r   )ÚuuidÚUUIDr   )r   s   "r   r   r   “   s   € ÷ ñ ¬$¯)©)ð ¼ñ r   c              ƒ  ó(  "  € VP                  \        \        P                  ! \        P
                  4      4      P                  \        P                  V 8H  4      4      G Rj  x€L
 P                  4       pV'       g   . # RRRRRRRRRRR	R
RV/.#  L-5i)zRFeature BOMs are global: an option has one parts list that applies to every model.Nr;   r<   r=   r'   z
All Modelsr!   zAll Body Typesr"   zAll SegmentsÚrm_count)	rE   r   r   r8   r   rI   rK   r+   Ú
scalar_one)r+   r   rd   s   && r   Úget_feature_versionsrf   ’   s–   é € ð —j‘jÜŒt�zŠzÔ+×.Ñ.Ó/Ó0×6Ñ6Ô7H×7RÑ7RÐV_Ñ7_Ó`ó÷ ç�zƒ|ð ÷ Øˆ	à�DØ˜Ø�dØ˜ØÐ*Ø˜Ø�Hðð ð ñùs   ‚A BÁ"BÁ#BÁ=Bz	/featuresc                ó$   € V ^8„  d   QhR\         /# r   r   )r   s   "r   r   r   ¦   s   € ÷ "ñ "œ|ñ "r   c              ƒ  ó  "  € \        \        P                  \        P                  ! \        P
                  4      P                  R4      4      P                  \        P                  4      P                  4       p\        \        P                  \        P                  \        P                  \        P                  \        P                  ! VP                  P                   ^ 4      P                  R4      4      P#                  \        \        P                  \        P                  8H  4      P%                  WP                  P                  \        P                  8H  4      P'                  \        P(                  ! \        P*                  ! \        P                  4      4      R8g  4      P-                  \        P                  \        P                  4      pV P/                  V4      G Rj  x€L
 pVP1                  4       p. pV Fx  pTP3                  R\5        VP                  4      RVP                  R\5        VP                  4      RVP                  RVP                   '       d   ^M^ RVP                   /4       Kz  	  V#  L–5i)	zCEvery feature option with the number of raw materials mapped to it.Útotal_rm_countr*   Nr+   r,   rJ   r-   Úversion_count)r   r   r+   r   r8   rI   r7   rD   Úsubqueryr   r,   r   rJ   r-   ÚcoalesceÚcri   r:   r>   rK   rL   rC   rZ   rE   rF   r[   rH   )r   rk   Úqueryr\   r]   r^   rP   s   &      r   Úget_bom_featuresro   ¥   sÍ  é € ô Ü×#Ñ#Ü�
Š
Ô$×'Ñ'Ó(×.Ñ.Ð/?Ó@ó÷ �hÔ ×*Ñ*Ó+¯H©H«Jð ô
 Ü"×,Ñ,Ü"×/Ñ/Ü×'Ñ'Ü×)Ñ)Ü�Š�h—j‘j×/Ñ/°Ó3×9Ñ9Ð:JÓKó÷ �dÜÔ2×=Ñ=ÔA[×AfÑAfÑfóç�iØ—*‘*×&Ñ&Ô*D×*NÑ*NÑNóç�eÜ�
Š
”4—9’9Ô7×DÑDÓEÓFÈ.ÑXóç�hÔ#×0Ñ0Ô2L×2YÑ2YÓZð 
ð —:‘:˜eÓ$×$€FØ�:‰:‹<€Dà€HÛˆØ�‰Øœ˜QŸ[™[Ó)Ø˜AŸN™NØœ#˜aŸl™lÓ+Ø˜AŸN™NØ !×"2×"2Ð"2™Q¸Ø˜a×.Ñ.ð
ö 	ñ ð €Oñ %ùs   ‚G%J Ç'I>Ç(BJ ) Úfastapir   r   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   r   ra   Úapp.core.databaser	   Úapp.core.securityr
   Úapp.models.yard_modelsr   Úapp.models.bom_modelsr   r   r   Úapp.models.dealer_modelsr   r   r   r   r   r   ÚrouterÚgetrT   r_   rf   ro   © r   r   Ú<module>r{      sÚ   ðß &Ý /ß #Û å $Ý 0Ý 5ß MÑ M÷ `÷  `á	¡Ñ);¸EÀ6Ó)JÓ!KÐ LÔ	M€à‡�ˆLÓÙ/6°v«ö Mó ðMð^ ‡�ˆNÓÙ18¸³ö 1ó ð1ðf ‡�Ð+Ó,ÙHOÐPVËö ó -ðð$ ‡�ˆKÓÙ.5°f«oö "ó ò"r   