+
    >i;              	          R t ^ RIHtHtHt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HtHt ]! R	R
.R7      t]P3                  R]],          R7      ]! ^ ^ R7      ]! ^d^RR7      RRR]! ]4      3R R ll4       t]P3                  R]],          R7      ]! ]4      3R R ll4       t]P3                  R]R7      ]! ]4      3R R ll4       t]P;                  R]^R7      ]! ]4      3R R ll4       t]P?                  R]R7      ]! ]4      3R R ll4       t ]P?                  R]R7      ]! ]4      3R  R! ll4       t!]PE                  R^R"7      ]! ]4      3R# R$ ll4       t#]P;                  R%]R7      ]! ]4      3R& R' ll4       t$]P;                  R(4      ]! ]4      3R) R* ll4       t%R# )+z(
Routes API pour la gestion des projets
)	APIRouterDependsHTTPExceptionQuerySession)func)ListOptional)datetime)get_db)ProjetNiveauPiece)ProjetCreateProjetUpdateProjetResponsez/api/projetsProjets)prefixtags/)response_model)gei  )r   leNc                    V ^8  d   QhR\         R\         R\        \        ,          R\        \         ,          R\        \        ,          R\        /# )   skiplimitstatutactif	recherchedb)intr
   strr   )formats   "dC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\app\routes\projets.py__annotate__r&      sP      
 SM C=	
 } 	    c                    VP                  \        4      pV'       d#   VP                  \        P                  V8H  4      pVe#   VP                  \        P                  V8H  4      pV'       d   VP                  \        P
                  P                  RV R24      \        P                  P                  RV R24      ,          \        P                  P                  RV R24      ,          4      pVP                  \        P                  P                  4       4      P                  V 4      P                  V4      P                  4       pV# )N%)queryr   filterr   r   nomilikenumero_affaireville_chantierorder_bydate_creationdescoffsetr   all)r   r   r   r   r    r!   r*   projetss   &&&&&&  r%   lire_projetsr6      s     HHVEV]]f45V\\U23ZZ)A./""((1YKq)9:<""((1YKq)9:<

 nnV116689@@FLLUSWWYGNr'   z/archives/listec                $    V ^8  d   QhR\         /# )r   r!   r   )r$   s   "r%   r&   r&   )   s      g r'   c                    V P                  \        4      P                  \        P                  R8H  4      P	                  \        P
                  P                  4       4      P                  4       pV# )u'   
Récupère tous les projets archivés
archive)r*   r   r+   r   r0   date_archivager2   r4   )r!   r5   s   & r%   lire_archivesr;   (   sR    
 hhv%%"hv$$))+,SSU  Nr'   z/{projet_id}c                0    V ^8  d   QhR\         R\        /# r   	projet_idr!   r"   r   )r$   s   "r%   r&   r&   4   s      3 G r'   c                     VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R RR7      hV# )     Projet non trouvéstatus_codedetail)r*   r   r+   idfirstr   )r>   r!   projets   && r%   lire_projetrI   3   sC    XXf$$VYY)%;<BBDF4HIIMr'   )r   rD   c                0    V ^8  d   QhR\         R\        /# )r   rH   r!   )r   r   )r$   s   "r%   r&   r&   <   s       7 r'   c                 \   VP                  \        4      P                  \        P                  V P                  8H  4      P	                  4       '       d   \        R RR7      h\        R/ V P                  4       B pVP                  V4       VP                  4        VP                  V4       V# )i  u"   Ce numéro d'affaire existe déjàrC    )
r*   r   r+   r.   rG   r   
model_dumpaddcommitrefresh)rH   r!   	db_projets   && r%   creer_projetrR   ;   s    	xxv448M8MMNTTVV4XYY-**,-IFF9IIKJJyr'   c                <    V ^8  d   QhR\         R\        R\        /# )r   r>   projet_updater!   )r"   r   r   )r$   s   "r%   r&   r&   G   s&       	r'   c                 f   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                  4        VP                  V4       V# )rA   rB   rC   T)exclude_unset)r*   r   r+   rF   rG   r   rM   itemssetattrrO   rP   )r>   rT   r!   rQ   update_datafieldvalues   &&&    r%   modifier_projetr\   F   s      ''		Y(>?EEGI4HII***>K#))+	%( ,IIKJJyr'   z/{projet_id}/archiverc                0    V ^8  d   QhR\         R\        /# r=   r?   )r$   s   "r%   r&   r&   X   s      s  r'   c                H   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      hRVn        ^ Vn        \        P                  ! 4       Vn
        VP                  4        VP                  V4       V# )z!
Archive un projet (soft delete)
rA   rB   rC   r9   )r*   r   r+   rF   rG   r   r   r   r   nowr:   rO   rP   r>   r!   rQ   s   && r%   archiver_projetra   W   sx    
  ''		Y(>?EEGI4HII IIO'||~IIIKJJyr'   )rD   c                0    V ^8  d   QhR\         R\        /# r=   r?   )r$   s   "r%   r&   r&   h   s     	 	 	 	r'   c                    VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      hVP                  V4       VP                  4        R# )u%   
Suppression définitive d'un projet
rA   rB   rC   N)r*   r   r+   rF   rG   r   deleterO   r`   s   && r%   supprimer_projetre   g   sX    
  ''		Y(>?EEGI4HIIIIiIIKr'   z/{projet_id}/restaurerc                0    V ^8  d   QhR\         R\        /# r=   r?   )r$   s   "r%   r&   r&   u   s        r'   c                   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RRR7      h^Vn        RVn        VP                  4        VP                  V4       V# )u   
Restaure un projet archivé
rA   rB   rC   en_cours)
r*   r   r+   rF   rG   r   r   r   rO   rP   r`   s   && r%   restaurer_projetri   t   sj    
  ''		Y(>?EEGI4HIIIO!IIIKJJyr'   z/{projet_id}/recalculerc                0    V ^8  d   QhR\         R\        /# 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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#                  V4       RVR	VR
V/# )z 
Recalcule les totaux du projet
rA   rB   rC   c              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   )convoi_exceptionnelro   s   & r%   rr   rs      s     71&&rt   TFrn   nb_transportsrv   )r*   r   r+   rF   rG   r   r   r>   r4   sumanymaxr"   rn   rw   rv   rO   rP   )r>   r!   rQ   piecesrn   convoirw   s   &&     r%   recalculer_projetr}      s    
  ''		Y(>?EEGI4HIIXXe_##EOOy$@AEEGF4V44KS77SSS777F5@1_C3{R/01!M'+$*!IIKJJy{v r'   )&__doc__fastapir   r   r   r   sqlalchemy.ormr   
sqlalchemyr   typingr	   r
   r   app.databaser   app.models.projetr   r   r   app.schemas.projetr   r   r   routergetr6   r;   rI   postrR   putr\   ra   rd   re   ri   r}   rL   r'   r%   <module>r      s   = < "  !   3 3 I I	.	{	; C^ 45aAsqT* #&/ 6. d>.BC '  D N>:.5fo  ; SSA5<V_  B N>: &/ ;  #NC29&/  D ~3/3:6? 	 0	 %nE3:6?  F &'4;FO  (r'   