+
    di%                     h   R t ^ RIHtHtHtHt ^ RIHt ^ RIH	t	H
t
 ^ RIHt ^ RIHtHt ^ RIHtHtHt ^ RIt]! RR	.R
7      t]P-                  R]	],          R7      R]! ]4      3R R ll4       t]P-                  R]R7      ]! ]4      3R R ll4       t]P3                  R]^R7      ]! ]4      3R R ll4       t]P7                  R]R7      ]! ]4      3R R ll4       t]P;                  R^R7      ]! ]4      3R R ll4       t]P3                  R]^R7      ]! ]4      3R R ll4       tR R lt R# ) u/   
Routes API pour la gestion des pièces béton
)	APIRouterDependsHTTPExceptionQuery)Session)ListOptional)get_db)PieceProjet)PieceCreatePieceUpdatePieceResponseNz/api/piecesu   Pièces)prefixtagsz/projet/{projet_id})response_modelc                R    V ^8  d   QhR\         R\        \         ,          R\        /# )   	projet_id	niveau_iddb)intr   r   )formats   "cC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\app\routes\pieces.py__annotate__r      s*      } 	    c                   VP                  \        4      P                  \        P                  V 8H  4      pV'       d#   VP                  \        P                  V8H  4      pVP                  \        P                  4      P                  4       pV# )uN   
Récupère toutes les pièces d'un projet (avec filtre optionnel par niveau)
)queryr
   filterr   r   order_bydate_creationall)r   r   r   r   piecess   &&&  r   lire_pieces_projetr#      sa     HHUO""5??i#?@EU__	9:^^E//0446FMr   z/{piece_id}c                0    V ^8  d   QhR\         R\        /# r   piece_idr   r   r   )r   s   "r   r   r   "   s       ' r   c                    VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      hV# )u.   
Récupère une pièce spécifique par son ID
     Pièce non trouvéestatus_codedetail)r   r
   r   idfirstr   )r&   r   pieces   && r   
lire_piecer1   !   sD    
 HHUO""588x#78>>@E4IJJLr   /)r   r,   c                0    V ^8  d   QhR\         R\        /# )r   r0   r   )r   r   )r   s   "r   r   r   -   s      {  r   c                    \        R/ V P                  4       B pVP                  4        VP                  V4       VP	                  4        VP                  V4       \        VP                  V4       V# )u   
Crée une nouvelle pièce
 )r
   
model_dumpcalculer_volumesaddcommitrefresh_recalculer_projetr   )r0   r   db_pieces   && r   creer_piecer=   ,   s`     *u'')*H FF8IIKJJx x))2.Or   c                <    V ^8  d   QhR\         R\        R\        /# )r   r&   piece_updater   )r   r   r   )r   s   "r   r   r   B   s&       	r   c                   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      hVP                  RR7      pVP                  4        F  w  rV\        W5V4       K  	  VP                  R4      R8X  d   RVn
        VP                  4        VP                  4        VP                  V4       \        VP                  V4       V# )	u   
Modifie une pièce existante
r)   r*   r+   T)exclude_unsetstatut_realisation
en_attenteN)r   r
   r   r.   r/   r   r6   itemssetattrgetdate_fabrication_reeller7   r9   r:   r;   r   )r&   r?   r   r<   update_datafieldvalues   &&&    r   modifier_piecerK   A   s     xx%%ehh(&:;AACH4IJJ )))=K#))+' , +,<+/( IIKJJx x))2.Or   )r,   c                0    V ^8  d   QhR\         R\        /# r%   r'   )r   s   "r   r   r   d   s      c w r   c                &   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      hVP                  pVP                  V4       VP                  4        \        W14       R# )u   
Supprime une pièce
r)   r*   r+   N)
r   r
   r   r.   r/   r   r   deleter9   r;   )r&   r   r<   r   s   &&  r   supprimer_piecerO   c   sl    
 xx%%ehh(&:;AACH4IJJ""IIIhIIK y%r   z/{piece_id}/dupliquerc                0    V ^8  d   QhR\         R\        /# r%   r'   )r   s   "r   r   r   w   s     - -c -w -r   c                   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      h/ RVP                  bRVP                  bRVP                  R,           bRVP                  bR	VP                  bR
VP                  bRVP                  bRVP                  bRVP                  bRVP                  bRVP                   bRVP"                  bRVP$                  bRVP&                  bRVP(                  bRVP*                  bRVP,                  bRVP.                  RVP0                  RVP2                  RVP4                  RVP6                  RVP8                  /Cp\        R/ VB pVP;                  4        VP=                  V4       VP?                  4        VPA                  V4       \C        VP                  V4       V# )u   
Duplique une pièce existante
r)   r*   r+   r   r   	referencez-COPIE
type_piecequantitetype_coulage	epaisseurlargeurlongueurajustement_volume
type_betontype_armature	poids_cfaconfig_treillisbecquet_typebecquet_longueurbecquet_autoconfig_startconfig_insertsconfig_menuiserieconvoi_exceptionnelprix_unitaire_htnotesr5   )"r   r
   r   r.   r/   r   r   r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   r7   r8   r9   r:   r;   )r&   r   piece_originale
piece_datar<   s   &&   r   dupliquer_pieceri   v   s   
 hhuo,,UXX-ABHHJO4IJJ_.._.. 	_..9 	o00	
 	O,, 	44 	_.. 	?** 	O,, 	_>> 	o00 	66 	_.. 	?:: 	44  	O<<!" 	44#$ 	44/88_>>BBO<<&&/J4 "z"HFF8IIKJJx x))2.Or   c                0    V ^8  d   QhR\         R\        /# )r   r   r   r'   )r   s   "r   r   r      s     , ,# ,7 ,r   c                   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   R# VP                  \
        4      P                  \
        P                  V 8H  4      P                  4       p\        R V 4       4      p\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      pV^ 8  d   \        ^\        V^,          4      4      M^ pWBn        Wbn        WRn        VP                  4        VP                   R8X  d   ^ RIHp V! W4       R# R# )u   
Fonction interne pour recalculer les totaux d'un projet.
Si le projet est validé, recalcule aussi les réservations de stock.
Nc              3   8   "   T F  qP                   x  K  	  R # 5iN)poids_total.0ps   & r   	<genexpr>%_recalculer_projet.<locals>.<genexpr>   s     4VmmV   c              3   8   "   T F  qP                   x  K  	  R # 5irm   )rd   ro   s   & r   rr   rs      s     71&&rt   TFvalide)verifier_et_notifier)r   r   r   r.   r/   r
   r   r!   sumanymaxr   rn   nb_transportsrd   r9   statutapp.routes.consommationrw   )r   r   projetr"   rn   convoir{   rw   s   &&      r   r;   r;      s    
 XXf$$VYY)%;<BBDFXXe_##EOOy$@AEEGF4V44KS77SSS777F5@1_C3{R/01!M$(!'IIK }} @Y+ !r   )!__doc__fastapir   r   r   r   sqlalchemy.ormr   typingr   r   app.databaser	   app.models.projetr
   r   app.schemas.piecer   r   r   mathrouterrF   r#   r1   postr=   putrK   rN   rO   ri   r;   r5   r   r   <module>r      sB   = < " !  + E E 	-yk	: !$}2EF  $&/ G" M-8,3FO  9 SC@29&/  A( M-8 &/ 9B }#.18  /$ $]PST18 - U-`,r   