+
    jif%                     n   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HtHt ^ RIHt ^ R	IHt ]! R
R.R7      t]P/                  R4      ]! ]4      3R R ll4       t]P3                  R4      ]! ]4      3R R ll4       t]P/                  R4      ]! ]4      3R R ll4       tR# )u6   
Routes FastAPI pour le récapitulatif de saisie Xbat
)	APIRouterDependsHTTPException)Session)List)datetime)get_db)	RecapXbat)ProjetNiveauPiece)Article) calculer_consommation_par_niveauz/api/recap-xbat
recap_xbat)prefixtagsz/projet/{projet_id}c                0    V ^8  d   QhR\         R\        /#    	projet_iddbintr   )formats   "gC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\app\routes\recap_xbat.py__annotate__r      s     k k k k    c                 
   ^ RI Hp ^ RIHp 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       pVP	                  \        4      P                  4       pV Uu/ uF  qwP                  VbK  	  pp. p	V EF  p
VP	                  \        4      P                  \        P                  V
P                  8H  \        P                   R8H  4      P                  4       p/ pV F@  pV! W4      pVP#                  4        F!  w  ppVP%                  V^ 4      V,           W&   K#  	  KB  	  / pVP#                  4        F_  w  ppVP%                  V4      pV'       g   K!  V! V4      pVP&                  ;'       g    ^ ^d,          pV! V^V,           ,          4      VV&   Ka  	  ^ RIHp VP	                  V4      P                  VP                  V 8H  VP                  V
P                  8H  VP,                  ^ 8  4      P                  4       p/ pV FF  pVP%                  VP.                  ^ 4      \1        VP,                  4      ,           VVP.                  &   KH  	  VP	                  \2        4      P                  \2        P                  V 8H  \2        P                  V
P                  8H  4      P                  4       pV Uu/ uF  pVP.                  VbK  	  pp\5        \7        VP9                  4       4      \7        VP9                  4       4      ,           4      p. pV EF  pVP%                  V4      pV'       g   K  VP%                  V^ 4      pVP%                  V^ 4      p VP%                  V4      p!V!'       d   V!P:                  M^ p"V!'       d   V!P<                  MVP>                  ;'       g    ^ p#VV ,           p$\A        ^ V$V",
          4      p%VPC                  RVRVPD                  R	VPF                  R
VPH                  RV$RV"RV%RV#R\K        V%V#,          ^4      R\K        V"V#,          ^4      RV%^ 8H  /4       EK  	  V'       g   EK  V	PC                  RV
P                  RV
PL                  R\O        VR R7      /4       EK  	  V	 U&U'u. uF  p&V&R,           F  p'V'NK  	  K  	  p(p&p'\        ;QJ d    R V( 4       F  '       d   K   RM	  RM! R V( 4       4      ;'       d    \Q        V(4      ^ 8  p)RV RVPL                  RV	RV)/# u upi u upi u up'p&i )    "calculer_consommation_piece_exacteceil  Projet introuvable	fabriqueeMouvementStock
article_idcodedesignationunite
qte_totale
qte_saisieqte_attenteprix_unitairetotal_ht_attentetotal_ht_saisientierement_saisi	niveau_id
niveau_nomlignesc                     V R ,          # )r*    )xs   &r   <lambda>"get_recap_projet.<locals>.<lambda>s   s	    q7Gr   )keyc              3   2   "   T F  qR ,          x  K  	  R# 5i)r2   Nr7   ).0ls   & r   	<genexpr>#get_recap_projet.<locals>.<genexpr>w   s     C]*++]s   FTr   
projet_nomniveaux
tout_saisi))app.routes.consommationr    mathr"   queryr
   filteridfirstr   r   r   allr   r   r3   statut_realisationitemsget
taux_perteapp.models.articler'   quantiter(   absr	   setlistkeysquantite_saisier/   prix_achat_htmaxappendr)   r*   r+   roundnomsortedlen)*r   r   r    r"   projetrB   articlesaarticles_mapresultat_niveauxniveaupiecesconso_niveaupiececonsoart_idqteqtes_fabriqueesqte_decimalearticleqte_arrondietauxr'   sorties_stocksorties_stock_mapsrecap_validesr	recap_maptous_articlesr5   qte_fabriqueeqte_sortie_stockrecapqte_saisie_manueller/   r,   r.   nr>   toutes_lignesrC   s*   &&                                        r   get_recap_projetr{      s   JXXf$$VYY)%;<BBDFC!566hhv%%f&6&6)&CDHHJGxx $$&H%-.XDD!GXL.%''OOvyy($$3
 #% 	
 E6uGE${{}'3'7'7'BS'H$  -  $0$6$6$8 FL"&&v.Gw#L1**//a36*.|q4x/H*I' %9 	6077$$	1$$		1##a'
 #%	 	
 A.?.C.CALLRS.TWZ[\[e[eWf.fall+  +229,699,
 #% 	 /<<mQ\\1_m	< %%'("'')*+

 #F"&&v.G+//:M044VQ?MM&)E;@%"7"7a38E//w?T?T?Y?YXYM ')99Ja.A!ABKMMfw22j1{"E+*Eq$I %(;m(KQ"O#[A%5 ! $< 6##VYYfjj&-GH% _ j !1F 01!H++QQ+Q 0MFC]CC]CC^^MHZ]^H^J 	Yfjj#j	 y /T =^ Gs   U$!U)(U.z/projet/{projet_id}/validerc                R    V ^8  d   QhR\         R\        \        ,          R\        /# )r   r   r5   r   )r   r   dictr   )r   s   "r   r   r      s*     L Lc L4: L7 Lr   c           
         ^ RI Hp ^ RIHp ^ RIHp VP                  \        4      P                  \        P                  V 8H  4      P                  4       pV'       g   \        RR4      hVP                  \        4      P                  4       pV Uu/ uF  qP                  VbK  	  p	pV EF  p
V
P                  R4      pV
P                  R4      pV
P                  R^ 4      pVP                  \        4      P                  \        P                   V8H  \        P"                  R	8H  4      P                  4       p/ pV FB  pV! VV4      pVP%                  4        F"  w  ppVP                  V^ 4      V,           VV&   K$  	  KD  	  V	P                  V4      pV'       g   K  ^ pW9   dD   W,          pV! V4      pVP&                  ;'       g    ^ ^d,          pV! V^V,           ,          4      pVP                  V4      P                  VP(                  V 8H  VP                   V8H  VP*                  V8H  VP,                  ^ 8  4      P                  4       p\/        R
 V 4       4      pVV,           pVP                  \0        4      P                  \0        P(                  V 8H  \0        P*                  V8H  \0        P                   V8H  4      P                  4       pV'       g3   \1        V VVV^ VR7      pVP3                  V4       VP5                  4        VVn        VVn        VVn        \<        P>                  ! 4       PA                  4       Vn!        EK  	  VPE                  4        RR/# u upi )r   r   r&   r!   r#   r$   r(   r3   r/   r%   c              3   L   "   T F  p\        VP                  4      x  K  	  R # 5i)N)rQ   rP   )r=   rp   s   & r   r?   !valider_saisie.<locals>.<genexpr>   s     @1s1::s   "$)r   r(   r3   quantite_totalerU   r/   okT)#rD   r    rO   r'   rE   r"   rF   r
   rG   rH   rI   r   r   rJ   rM   r   r3   rK   rL   rN   r   r(   rP   sumr	   addflushrU   r   r/   r   utcnow	isoformatdate_derniere_saisiecommit)r   r5   r   r    r'   r"   r]   r^   r_   r`   lignerg   r3   r/   rc   rd   re   rf   aidrh   rk   ru   rj   rl   rm   sortiesrv   r,   rw   s   &&&                          r   valider_saisier      s   J1XXf$$VYY)%;<BBDFC!566xx $$&H%-.XDD!GXL.<(IIk*			/15 %''OOy($$3
 #% 	 E6uhGE!KKMS$0$4$4S!$<s$BS! * 
 ""6*!'/L-L&&++!s2D T!:;M ((>*11$$	1$$	1%%/##a'	

 #% 	 @@@"%55
 #**9,  F*9,
 %'	 	 #!# * !+E FF5MHHJ !+ *+%-__%6%@%@%B"{ ~ IIK$<E /s   Mz!/projet/{projet_id}/peut-archiverc                0    V ^8  d   QhR\         R\        /# r   r   )r   s   "r   r   r      s     (# (#S (#g (#r   c                   ^ RI Hp ^ RIHp VP	                  \
        4      P                  \
        P                  V 8H  4      P                  4       pVP	                  \        4      P                  4       pV Uu/ uF  qfP                  VbK  	  ppV EF  pVP	                  \        4      P                  \        P                  VP                  8H  \        P                  R8H  4      P                  4       p	/ p
V	 F?  pV! W4      pVP                  4        F   w  rV
P                  V^ 4      V,           W&   K"  	  KA  	  V
P                  4        EF   w  rVP                  V4      pV'       g   K!  V! V4      pVP                   ;'       g    ^ ^d,          pV! V^V,           ,          4      pVP	                  \"        4      P                  \"        P                  V 8H  \"        P$                  V8H  \"        P                  VP                  8H  4      P'                  4       pV'       d   VP(                  M^ pVV8  g   K  RRRVP*                   R2/u u # 	  EK  	  RR/# u upi )	uD   
Vérifie si toutes les lignes du récapitulatif ont été saisies.
r   r!   r%   peut_archiverFraisonu    non entièrement saisiT)rD   r    rE   r"   rF   r   rG   r   rJ   r   rH   r   r3   rK   rL   rM   rN   r	   r(   rI   rU   r*   )r   r   r    r"   rB   r^   r_   r`   rb   rc   rd   re   rf   rg   rh   rj   rk   rl   rm   r,   rw   r-   s   &&                    r   r   r      s   
 Khhv%%f&6&6)&CDHHJGxx $$&H%-.XDD!GXL.%''OOvyy($$3
 #% 	 E6uGE${{}'3'7'7'BS'H$  - 
 %1$6$6$8 F"&&v.G-L&&++!s2Dla$h78JHHY'..##y0$$.##vyy0 eg	  38..QJJ&'W=P=P<QQh:ijj! %9 : T""? /s   7IN)__doc__fastapir   r   r   sqlalchemy.ormr   typingr   r   app.databaser   app.models.recap_xbatr	   app.models.projetr
   r   r   rO   r   rD   r   routerrM   r{   postr   r   r7   r   r   <module>r      s    6 5 "    + 3 3 & D	+<.	A !"3:6? k #k\ *+ELV_ L ,L^ /007 (# 1(#r   