+
    |i2                     D   R t ^ RI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 ^ RIHt ^ RIHtHtHt ^ R	IHtHt ^ R
IHt ^ RIHt ]! RR.R7      tR R ltR R ltR R ltR&R lt]PA                  R4      ]! ]4      3R R ll4       t!]PE                  R4      ]! ]4      3R R ll4       t#]PI                  R4      ]! ]4      3R R ll4       t%]PE                  R 4      ]! ]4      3R! R" ll4       t&]PA                  R#4      ]! ]4      3R$ R% ll4       t'R# )'uS   
Calcul de consommation des articles par projet
Gestion des réservations de stock
)	APIRouterDependsHTTPException)Session)func)List)ceil)datetime)get_db)ProjetNiveauPiece)ArticleMouvementStock)Notification)ReservationStockz/api/consommationconsommation)prefixtagsc                $    V ^8  d   QhR\         /#    returndict)formats   "iC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\app\routes\consommation.py__annotate__r      s     R R4 R    c                  a / pV P                   '       d   V P                  '       d    \        V P                   4      o\        V3R lV 4       R4      pV'       dq   VP                  '       d_   V P                  V P
                  ,          VP                  ,          pVP                  VP                  ^ 4      V,           W#P                  &   MAV'       d:   VP                  VP                  ^ 4      V P
                  ,           W#P                  &   V P                  '       EdY   \        V P                  \        4      '       Ed8   V P                  P                  R4      oV P                  P                  R^ 4      pS'       d    \        V3R lV 4       R4      pV'       dw   VP                  '       de   V'       d]   V^d,          V P
                  ,          pWcP                  ,          pVP                  VP                  ^ 4      V,           W#P                  &   McV'       d\   V P                  P                  R^ 4      pVP                  VP                  ^ 4      WpP
                  ,          ,           W#P                  &   V P                  '       Ed   \        V P                  \        4      '       Ed   RV P                  9   d   V P                  R,           F  pVP                  R4      oVP                  R^ 4      p	S'       g   K0  V	'       g   K:   \        V3R	 lV 4       R4      pV'       dD   WP
                  ,          pVP                  VP                  ^ 4      V,           W#P                  &   K  K  	  MV P                  P                  R4      oV P                  P                  R^ 4      p	V P                  P                  R
^4      p
S'       dp   V	'       dh    \        V3R lV 4       R4      pV'       dI   W,          V P
                  ,          pVP                  VP                  ^ 4      V,           W#P                  &   V P                  '       Ed:   \        V P                  \        4      '       Ed   V P                  P                  R4      oV P                  P                  R^ 4      pS'       d   V'       d    \        V3R lV 4       R4      pV'       dp   VP                  '       d^   V^d,          V P
                  ,          pWcP                  ,          pVP                  VP                  ^ 4      V,           W#P                  &   V# V'       d:   VP                  VP                  ^ 4      V P
                  ,           W#P                  &   V# V#   \        \        3 d     ELi ; i  \        \        3 d     EL=i ; i  \        \        3 d     EK  i ; i  \        \        3 d     ELi ; i  \        \        3 d     T# i ; i)uh   
Calcule la consommation exacte en décimales pour une pièce.
Retourne {article_id: quantite_decimale}
c              3   L   <"   T F  qP                   S8X  g   K  Vx  K  	  R # 5iNid.0aart_ids   & r   	<genexpr>5calculer_consommation_piece_exacte.<locals>.<genexpr>    s     Bx!446>AAx   $
$N
article_idtotal_mlc              3   ^   <"   T F"  qP                   \        S4      8X  g   K  Vx  K$  	  R # 5ir!   r#   intr$   s   & r   r(   r)   /         K8atts6{7J8   -
-	nb_boitesnappesnb_panneauxc              3   ^   <"   T F"  qP                   \        S4      8X  g   K  Vx  K$  	  R # 5ir!   r.   r$   s   & r   r(   r)   C   s      'S8atts6{?R8r1   couchesc              3   ^   <"   T F"  qP                   \        S4      8X  g   K  Vx  K$  	  R # 5ir!   r.   r$   s   & r   r(   r)   P   s      #Ox!443v;;NAAxr1   quantite_mlc              3   ^   <"   T F"  qP                   \        S4      8X  g   K  Vx  K$  	  R # 5ir!   r.   r$   s   & r   r(   r)   ]   r0   r1   )becquet_typebecquet_longueurr/   nextlongueur_unitairequantitegetr#   
ValueError	TypeErrorconfig_start
isinstancer   config_treillisconfig_inserts)piecearticlesr   articleqter,   total_cmnbnapper4   r6   r8   r'   s   &&          @r   "calculer_consommation_piece_exacterM      s   
 L e444		++,FBxBDIG7444-->'B[B[[+7+;+;GJJ+JS+PZZ(+7+;+;GJJ+JU^^+[ZZ(
 j););TBB##''5%%))*a8
K8KTRw888X'#~>H"%>%>>C/;/?/?

A/NQT/TL,++//Q?B/;/?/?

A/NRTWeWeRe/fL,
 E,A,A4!H!Hu,,,..x88<0#iiq96kk"&'S8'SUY"Z""-">C7C7G7G

TU7VY\7\L4 # 9 **..|<F//33M1EK++//	1=G+"#Ox#OQUVG)3ennD3?3C3CGJJPQ3RUX3XZZ0
 
5+?+? F F%%)),7**..}a@k	K8KTRw888*S05>>AH"%>%>>C/;/?/?

A/NQT/TL,  /;/?/?

A/NQVQ_Q_/_L, <C I& 		" 	*   '	2  #I.   	* s   AV	 .AV	 V	 9V	 /V! 1V! 9AV! V! AV! AV9A&W 7/W* 'AW* W* 9W* 	VV!V65V69WWW'&W'*W?>W?c                0    V ^8  d   QhR\         R\        /# )r   	projet_idr   )r/   r   )r   s   "r   r   r   j   s       D r   c                v   ^ RI Hp VP                  \        4      P	                  4       pV Uu/ uF  qDP
                  VbK  	  ppVP                  V4      P                  VP                  V 8H  4      P	                  4       p/ pV EF+  pVP                  \        4      P                  \        P                  VP
                  8H  4      P	                  4       p	/ p
V	 FB  p\        W4      pVP                  4        F   w  rV
P                  V^ 4      V,           W&   K"  	  KD  	  V
P                  4        F|  w  rVP                  V4      pV'       g   K   \        V4      pVP                  ;'       g    ^ ^d,          p\        V^V,           ,          4      pVP                  V^ 4      V,           W}&   K~  	  EK.  	  V# u upi )u   
Calcule la consommation totale par niveau puis arrondit au supérieur.
Applique le taux de perte après arrondi.
Retourne {article_id: quantite_finale}
)r   )app.models.projetr   queryr   allr#   filterrO   r   	niveau_idrM   itemsr?   r   
taux_perte)rO   dbr   rG   r&   articles_mapniveauxconsommation_totaleniveaupiecesconso_niveaurF   consor'   rI   qte_decimalerH   qte_arrondietaux
qte_finales   &&                  r    calculer_consommation_par_niveaurd   j   ss    )xx $$&H%-.XDD!GXL.hhv%%f&6&6)&CDHHJG%''699(DEIIKE6uGE${{}'3'7'7'BS'H$  - 
 %1$6$6$8 F"&&v.Gw#L1**//a36!,!d(";<
.A.E.Efa.PS].]#+ %9   ) /s   F6c                $    V ^8  d   QhR\         /# r   r   )r   s   "r   r   r      s     ` `D `r   c                |    \        W4      P                  4        UUu/ uF  w  r#V\        V4      bK  	  upp# u uppi )u>   Compatibilité avec imputer_stock_piece — arrondi immédiat.)rM   rV   r   )rF   rG   kvs   &&  r   calculer_consommation_pieceri      s4    #Ee#V#\#\#^_#^41AtAwJ#^___s   8Nc                    VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   ^ # VP                  \
        P                  ! \        P                  4      4      P                  \        P                  V 8H  4      pV'       d#   VP                  \        P                  V8g  4      pVP                  4       ;'       g    ^ pVP                  V,
          # )    )rR   r   rT   r#   firstr   sumr   r>   r+   rO   scalarstock_actuel)r+   rX   exclure_projet_idrH   rR   total_reserves   &&&   r   get_stock_disponiblerr      s    hhw&&wzzZ'?@FFHGHHTXX.7789v&11Z?@ 
-77;LLMLLN''aM-//r   z/projet/{projet_id}c                0    V ^8  d   QhR\         R\        /# r   rO   rX   r/   r   )r   s   "r   r   r      s        s    r   c                 (  a
 VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      hVP                  \        4      P                  4       p\        W4      p. pVP                  4        F  w  o
p\        V
3R lV 4       R4      pV'       g   K&  \        S
WR7      p\        ^ V4      p	VP                  RS
RVP                  RVP                  RVP                   R	VR
VP"                  RVP"                  V,
          RV	RW8  R\        ^ Wh,
          4      /
4       K  	  RT RVP$                  RTR\&        ;QJ d    R V 4       F  '       g   K   R/# 	  R/# ! R V 4       4      /# )  Projet introuvablec              3   L   <"   T F  qP                   S8X  g   K  Vx  K  	  R # 5ir!   r"   r$   s   & r   r(   *get_consommation_projet.<locals>.<genexpr>        >8attv~8r*   Nrp   r+   codedesignationuniteqte_necessairestock_physiquestock_reservestock_disponible	suffisantmanquerO   
projet_nomrG   alertec              3   <   "   T F  qR ,          '       * x  K  	  R# 5i)r   N )r%   r&   s   & r   r(   rz      s     ;(QK.(((s   TF)rR   r   rT   r#   rl   r   r   rS   rd   rV   r<   rr   maxappendr}   r~   r   ro   nomany)rO   rX   projetrG   r[   resultatr   rH   stock_dispostock_dispo_afficher'   s   &&        @r   get_consommation_projetr      sy   XXf$$VYY)%;<BBDFC!566xx $$&H:9IH"5";";"=>8>E7.vrWK"%a"5OOfw22 . '"6"6!5!5!C"$7[:#a!=>  #>& 	YfjjH##;(;##	  	  ;(;;	 r   z(/projet/{projet_id}/verifier-et-notifierc                0    V ^8  d   QhR\         R\        /# rt   ru   )r   s   "r   r   r      s     (K (KC (KW (Kr   c                 \  a VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      hVP                  \        4      P                  \        P                  V 8H  4      P                  4        \        W4      pVP                  \        4      P                  4       p. pVP                  4        EF.  w  op\        V3R lV 4       R4      pV'       g   K'  \        SWR7      p\        SV V\        P                   ! 4       P#                  4       R7      p	VP%                  V	4       W8  g   K}  Wh,
          p
\'        RRRVP(                   2R	VP*                   R
V RVP,                   RV RVP,                   RVP.                   RVP.                  V,
           RV
 RVP,                   R2V RR7      pVP%                  V4       VP1                  VP(                  4       EK1  	  VP3                  4        R\5        V4      RV/# )rw   rx   c              3   L   <"   T F  qP                   S8X  g   K  Vx  K  	  R # 5ir!   r"   r$   s   & r   r(   'verifier_et_notifier.<locals>.<genexpr>   r{   r*   Nr|   )r+   rO   r>   date_creationalerte_stocketudeszStock insuffisant - zProjet z
 : besoin  z, disponible z (physique z
, reserve z
), manque .F)typemoduletitremessagerO   lualertes_creeesarticles_en_alerte)rR   r   rT   r#   rl   r   r   rO   deleterd   r   rS   rV   r<   rr   r	   utcnow	isoformataddr   r~   r   r   ro   r   commitlen)rO   rX   r   r[   rG   alertesr   rH   r   reservationr   notifr'   s   &&          @r   verifier_et_notifierr      sO   XXf$$VYY)%;<BBDFC!566HH%%&6&@&@I&MNUUW:9Ixx $$&HG"5";";"=>8>E*62S&#"//+557	
 	{'#1F #,W-@-@,AB!&**Z7GqWdepdqqrsz  tA  tA  sB  BM  NU  Nb  Nb  Mc  cm  nu  nB  nB  EP  nP  mQ  Q[  \b  [c  cd  el  er  er  ds  st  u#E FF5MNN7../5 #>8 IIKc'l,@'JJr   z /projet/{projet_id}/reservationsc                0    V ^8  d   QhR\         R\        /# rt   ru   )r   s   "r   r   r      s      C W r   c                     VP                  \        4      P                  \        P                  V 8H  4      P	                  4        VP                  4        R R/# )okT)rR   r   rT   rO   r   r   )rO   rX   s   &&r   liberer_reservationsr      sB    HH%%&6&@&@I&MNUUWIIK$<r   z/piece/{piece_id}/imputer-stockc                0    V ^8  d   QhR\         R\        /# )r   piece_idrX   ru   )r   s   "r   r   r      s     /I /I# /I7 /Ir   c           
      Z   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      hVP                  \        4      P                  4       p\        W#4      p. pVP                  4        EF  w  rgVP                  \        4      P                  \        P                  V8H  4      P	                  4       pV'       g   KS  \        ^ VP                  V,
          4      Vn        VP                  ^ 8X  d	   RVn        M;VP                  ^ 8  d$   VP                  VP                  8:  d	   RVn        MRVn        \        VV) RRVP                   RVP                    2RVP                   2R7      p	VP#                  V	4       VP                  \$        4      P                  \$        P&                  V8H  \$        P                   VP                   8H  4      P                  4       p
V
'       dN   V
^ ,          p\        ^ VP(                  V,
          4      Vn        VP(                  ^ 8X  d   VP+                  V4       VP-                  R	VP.                  R
VRVP                  /4       EK  	  VP1                  4        RVR\3        V4      /# )rw   zPiece introuvablestock_faibleactiffabricationzPiece z
 - Projet z)Imputation automatique fabrication piece )r+   r>   type_mouvement	referencecommentairerH   qte_imputeestock_restantimputationsnb_articles)rR   r   rT   r#   rl   r   r   rS   ri   rV   r   ro   statutseuil_alerter   r   rO   r   r   r+   r>   r   r   r~   r   r   )r   rX   rF   rG   r   r   r'   rI   rH   	mouvementreservationsrs   &&          r   imputer_stock_piecer      s   HHUO""588x#78>>@EC!455xx $$&H.u?LK#))+((7#**7::+?@FFH7#&q'*>*>*D#EG ##q(!/%%)g.B.BgFZFZ.Z!/!(&!,"5??"3:eoo=NOGGXYI FF988$45$f%5%@%@F%J%5%?%?5??%RT!ce   O AJJ$45
::?IIaL7..s!5!5  ? ,J IIK;s;7GHHr   z"/article/{article_id}/stock-resumec                0    V ^8  d   QhR\         R\        /# )r   r+   rX   ru   )r   s   "r   r   r   %  s       ' r   c                    VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      hVP                  \        P                  ! \        P                  4      4      P                  \        P                  V 8H  4      P                  4       ;'       g    ^ pRV RVP                  RVR\        ^ VP                  V,
          4      /# )rw   zArticle introuvabler+   r   r   r   )rR   r   rT   r#   rl   r   r   rm   r   r>   r+   rn   ro   r   )r+   rX   rH   rq   s   &&  r   get_stock_resume_articler   $  s    hhw&&wzzZ'?@FFHGC!677HHTXX&6&?&?@Av.99ZGHvx% %#$ 
 	j'..C7#7#7-#GH	 r   r!   )(__doc__fastapir   r   r   sqlalchemy.ormr   
sqlalchemyr   typingr   mathr   r	   app.databaser
   rQ   r   r   r   app.models.articler   r   app.models.notificationr   app.models.reservationr   routerrM   rd   ri   rr   r?   r   postr   r   r   r   r   r   r   r   <module>r      s   6 5 "      3 3 6 0 3	-^4D	ERj>`
	0 !":A&/   # F 787>v (K 9(KV 127>v  3 ./5<V_ /I 0/Id 01<CFO  2r   