+
    "ji!                        ^ RI HtHtHt ^ RIHt ^ RI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 ]! R	R
.R7      t ! R R]4      t ! R R]4      t ! R R]4      t]P1                  R4      ]! ]	4      3R R ll4       t]P1                  R4      ]! ]	4      3R R ll4       t]P7                  R^R7      ]! ]	4      3R R ll4       t]P;                  R4      ]! ]	4      3R R ll4       t]P?                  R4      ]! ]	4      3R R ll4       t R R  lt!]P1                  R!4      ]! ]	4      3R" R# ll4       t"]P1                  R$4      ]! ]	4      3R% R& ll4       t#]P7                  R'4      ]! ]	4      3R( R) ll4       t$]P1                  R*4      ]! ]	4      3R+ R, ll4       t%]P;                  R-4      ]! ]	4      3R. R/ ll4       t&R0# )1    )	APIRouterDependsHTTPExceptionSession)text)get_db)FournisseurMailType)	BaseModel)OptionalList)quotez/api/fournisseursfournisseurs)prefixtagsc                   L   a  ] tR t^t o RtRtRtRtRtRt	Rt
RtV 3R ltRtV tR# )FournisseurCreateNc                  < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   S[S[ ,          ;R	&   # )
   raison_socialeemail	telephoneadressecode_postalvillecontact_nomcontact_postenotes)strr   )format__classdict__s   "iC:\Users\petid\OneDrive\Desktop\Maestro\MAESTRO CLAUDE\MAESTRO\maestro-backend\app\routes\fournisseurs.py__annotate__FournisseurCreate.__annotate__   s      C=  }#  c]!	 
 #%  C=  #%  C='  C=      )__name__
__module____qualname____firstlineno__r   r   r   r   r   r   r   r   __annotate_func____static_attributes____classdictcell__r"   s   @r#   r   r      s4     E#I!G!%KE!%K#'ME  r&   r   c                   0   a  ] tR t^t o RtV 3R ltRtV tR# )FournisseurUpdateNc                6   < V ^8  d   Qh/ S[ S[,          ;R&   # )r   r   r   r    )r!   r"   s   "r#   r$   FournisseurUpdate.__annotate__   s     SM( r&   r'   )r(   r)   r*   r+   r   r,   r-   r.   r/   s   @r#   r1   r1      s     $(N  r&   r1   c                   4   a  ] tR t^t o RtRtV 3R ltRtV tR# )MailTypeUpdateNc                R   < V ^8  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   # )r   objetcorpsr3   )r!   r"   s   "r#   r$   MailTypeUpdate.__annotate__   s#     C= C= r&   r'   )	r(   r)   r*   r+   r8   r9   r,   r-   r.   r/   s   @r#   r6   r6      s     EE  r&   r6   /c                $    V ^8  d   QhR\         /# r   dbr   )r!   s   "r#   r$   r$   %   s     + + +r&   c                     V P                  \        4      P                  \        P                  4      P	                  4       pV Uu. uF  p\        V4      NK  	  up# u upi )N)queryr
   order_byr   all_fmt)r>   r   fs   &  r#   get_fournisseursrE   $   sF    88K(11+2L2LMQQSL)*\DG\***s   Az/{fournisseur_id}c                0    V ^8  d   QhR\         R\        /# r   fournisseur_idr>   intr   )r!   s   "r#   r$   r$   +   s      C W r&   c                     VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      h\        V4      # )     Fournisseur non trouvé)r@   r
   filteridfirstr   rC   rH   r>   rD   s   && r#   get_fournisseurrR   *   sG    
$$[^^~%EFLLNAC!:;;7Nr&   )status_codec                0    V ^8  d   QhR\         R\        /# r   datar>   )r   r   )r!   s   "r#   r$   r$   3   s      . G r&   c                     \        R/ V P                  4       B pVP                  V4       VP                  4        VP	                  V4       \        V4      # )Nr'   )r
   dictaddcommitrefreshrC   )rV   r>   rD   s   && r#   create_fournisseurr\   2   s=    "diik"AFF1IIIKJJqM7Nr&   c                <    V ^8  d   QhR\         R\        R\        /# )r   rH   rV   r>   )rJ   r1   r   )r!   s   "r#   r$   r$   <   s"      s 2C  r&   c                 r   VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      hVP                  RR7      P                  4        F  w  rE\        W4V4       K  	  VP                  4        VP                  V4       \        V4      # )rL   rM   T)exclude_none)r@   r
   rN   rO   rP   r   rX   itemssetattrrZ   r[   rC   )rH   rV   r>   rD   kvs   &&&   r#   update_fournisseurrd   ;   s    
$$[^^~%EFLLNAC!:;;		t	,224a 5IIKJJqM7Nr&   c                0    V ^8  d   QhR\         R\        /# rG   rI   )r!   s   "r#   r$   r$   H   s      s  r&   c                     VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        R R4      hVP                  V4       VP                  4        RR/# )rL   rM   okT)r@   r
   rN   rO   rP   r   deleterZ   rQ   s   && r#   delete_fournisseurri   G   s\    
$$[^^~%EFLLNAC!:;;IIaLIIK$<r&   c                $    V ^8  d   QhR\         /# )r   rD   )r
   )r!   s   "r#   r$   r$   Q   s      K r&   c                     R V P                   RV P                  RV P                  RV P                  RV P                  RV P
                  RV P                  RV P                  RV P                  R	V P                  /
# 
rO   r   r   r   r   r   r   r   r   r   rl   )rD   s   &r#   rC   rC   Q   sh    add!**Q[[199q}}q}} r&   z/{fournisseur_id}/articlesc                0    V ^8  d   QhR\         R\        /# rG   rI   )r!   s   "r#   r$   r$   c   s      S g r&   c                   VP                  \        R4      RV /4      P                  4       pV Uu. uF  pRV^ ,          RV^,          RV^,          RV^,          RV^,          RV^,          R	V^,          R
V^,          RV^,          RV^	,          RV^,          ;'       g    ^ V^,          ;'       g    ^ 8*  /NK  	  up# u upi )uM   Retourne les articles liés à ce fournisseur (1 ou 2) avec leur statut stocka  
        SELECT
            a.id, a.code, a.designation, a.unite, a.prix_achat_ht,
            a.stock_actuel, a.seuil_alerte, a.statut,
            CASE WHEN a.fournisseur_1_id = :fid THEN 1 ELSE 2 END as rang,
            CASE WHEN a.fournisseur_1_id = :fid THEN a.ref_fournisseur_1 ELSE a.ref_fournisseur_2 END as ref_fourn
        FROM articles a
        WHERE a.fournisseur_1_id = :fid OR a.fournisseur_2_id = :fid
        ORDER BY a.designation
    fidrO   codedesignationuniteprix_achat_htstock_actuelseuil_alertestatutrang_fournisseurref_fournisseur	en_alerteexecuter   fetchallrH   r>   rowsrs   &&  r#   get_articles_fournisseurr   b   s     ::d 	 		 .
!	# $,8: 	2  A !A$AaD1Q4QqTQqTAaDAaDad!qt!A$))!13	
   s   A/B? B?2
B?z!/{fournisseur_id}/articles-alertec                0    V ^8  d   QhR\         R\        /# rG   rI   )r!   s   "r#   r$   r$      s        r&   c                P   VP                  \        R4      RV /4      P                  4       pV Uu. uFj  pRV^ ,          RV^,          RV^,          RV^,          RV^,          RV^,          ;'       g    ^ R	V^,          ;'       g    ^ R
V^,          RV^,          /	NKl  	  up# u upi )zERetourne uniquement les articles en rupture ou sous le seuil d'alertea<  
        SELECT
            a.id, a.code, a.designation, a.unite, a.prix_achat_ht,
            a.stock_actuel, a.seuil_alerte,
            CASE WHEN a.fournisseur_1_id = :fid THEN a.ref_fournisseur_1 ELSE a.ref_fournisseur_2 END as ref_fourn,
            CASE WHEN a.fournisseur_1_id = :fid THEN a.delai_livraison_1 ELSE a.delai_livraison_2 END as delai
        FROM articles a
        WHERE (a.fournisseur_1_id = :fid OR a.fournisseur_2_id = :fid)
          AND (a.stock_actuel IS NULL OR a.stock_actuel <= COALESCE(a.seuil_alerte, 0))
        ORDER BY a.designation
    ro   rO   rp   rq   rr   rs   rt   ru   rx   delai_livraisonrz   r}   s   &&  r#   get_articles_alerter      s     ::d 
 
	 .
!
# $,8: 	0  A !A$AaD1Q4QqTQqTAaDIIAAaDIIAqtqt
	
   s   AB#3B#B#z/{fournisseur_id}/generer-mailc                R    V ^8  d   QhR\         R\        \        ,          R\        /# )r   rH   articlesr>   )rJ   r   rX   r   )r!   s   "r#   r$   r$      s*     * **4j* 	*r&   c           
         VP                  \        4      P                  \        P                  V 8H  4      P	                  4       pV'       g   \        RR4      hVP                  '       g   \        RR4      hVP                  \        4      P                  \        P                  ^8H  4      P	                  4       pV'       d   VP                  MRpV'       d   VP                  MRp VP                  \        R4      4      P                  4       pV'       d
   V^ ,          MRp. p	T Fp  p
T
P                  R	4      '       d   R
T
R	,           R2MRpT
P                  R^4      pT
P                  RR4      pT	P                  RT
R,           T RT RT 24       Kr  	  RP                  T	4      pTP!                  RT4      P!                  RT4      pRTP                   R\#        T4       R\#        T4       2pRTRTP                  RTRT/#    Rp L; i)u;   Génère un mailto: avec la liste des articles à commanderrL   rM   i  zCe fournisseur n'a pas d'emailCommande de fournituresz0Bonjour,

{articles}

Cordialement,
{entreprise}z2SELECT raison_sociale FROM entreprise WHERE id = 1 rx   u    (Réf. )quantiterr   z- rq   z :  
z
{articles}z{entreprise}zmailto:z	?subject=z&body=mailtor   r8   r9   )r@   r
   rN   rO   rP   r   r   r   r8   r9   r{   r   fetchonegetappendjoinreplacer   )rH   r   r>   rD   	mail_typer8   corps_templateentnom_entrepriselignes_articlesarefqterr   bloc_articlesr9   r   s   &&&              r#   generer_mailr      s    	$$[^^~%EFLLNAC!:;;777C!ABB "))(++*:;AACI(IOO.GE(1Y__7nNjjRST]]_#&QB
 O45EE:K4L4L,-.a0RTeeJ"gr"Am$4#5cU#cU!E7KL	  IIo.M""<?GGXfgEqwwiyufU5\NKF 	&	 !s   &;H Hz/mail-type/getc                $    V ^8  d   QhR\         /# r=   r   )r!   s   "r#   r$   r$      s     2 2g 2r&   c                     V P                  \        4      P                  \        P                  ^8H  4      P	                  4       pV'       g   RRRR/# RVP
                  RVP                  /# )   r8   r   r9   r   )r@   r   rN   rO   rP   r8   r9   )r>   mts   & r#   get_mail_typer      sW    	(		"	"8;;!#3	4	:	:	<B2GR@@RXXw11r&   z/mail-type/updatec                0    V ^8  d   QhR\         R\        /# rU   )r6   r   )r!   s   "r#   r$   r$      s     
 
> 
w 
r&   c                 v   VP                  \        4      P                  \        P                  ^8H  4      P	                  4       pV'       g   \        ^R7      pVP                  V4       V P                  e   V P                  Vn        V P                  e   V P                  Vn        VP                  4        RR/# )r   )rO   rg   T)	r@   r   rN   rO   rP   rY   r8   r9   rZ   )rV   r>   r   s   && r#   update_mail_typer      s    	(		"	"8;;!#3	4	:	:	<B^
r
zz::zz::IIK$<r&   N)'fastapir   r   r   sqlalchemy.ormr   
sqlalchemyr   app.databaser	   app.models.fournisseurr
   r   pydanticr   typingr   r   urllib.parser   routerr   r1   r6   r   rE   rR   postr\   putrd   rh   ri   rC   r   r   r   r   r   r'   r&   r#   <module>r      s   5 5 "   8  ! 	-^4D	E
	 	 	 )) ) Y   C#*6? + +
  7>v  ! Sc">Efo  #  SZ[aSb  ! "#:A&/  $" ()@G  *B /0;B6?  1@ -. &/* /*^  ' 2 2  9@ 
 !
r&   