Ë
    „«ôi�©  ã                   óª  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZmZ ddlmZ ddlmZ  ej&                  e«      ZddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%  e
«       Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z, eddg«       eeg«      d„ «       «       Z- edg«       eeg«      d„ «       «       Z. edg«       eeg«      d„ «       «       Z/ edg«       eeg«      d„ «       «       Z0de1dz  fd„Z2 eddg«       eeg«      d„ «       «       Z3 eddg«       eeg«      de1fd„«       «       Z4 edg«       eeg«      de1fd „«       «       Z5 edg«       eeg«      d!„ «       «       Z6 edg«       eeg«      d"„ «       «       Z7 edg«       eeg«      d#e1fd$„«       «       Z8 edg«       eeg«      d#e1fd%„«       «       Z9 edg«       eeg«      d#e1fd&„«       «       Z: edg«       eeg«      d#e1fd'„«       «       Z; edg«       eeg«      d#e1fd(„«       «       Z< edg«       eeg«      d#e1fd)„«       «       Z= edg«       eeg«      d#e1fd*„«       «       Z> edg«       eeg«      d#e1fd+„«       «       Z? edg«       eeg«      d,„ «       «       Z@d-e$fd.„ZA ed¬/«      d0„ «       ZB edg«       eeg«      d1„ «       «       ZCy)2u5  
Mail entrant â€” API views pour la configuration IMAP, les sources et l'inbox.

Routes:
  GET/PUT    /tenant/mail/imap/            â†’ config IMAP (singleton par tenant)
  POST       /tenant/mail/imap/test/       â†’ tester la connexion IMAP
  POST       /tenant/mail/imap/poll/       â†’ dÃ©clencher un poll immÃ©diat
  GET        /tenant/mail/imap/status/     â†’ statut du service de polling (heartbeat)
  GET/POST   /tenant/mail/sources/         â†’ lister / crÃ©er une source
  PATCH/DEL  /tenant/mail/sources/<id>/    â†’ modifier / supprimer
  POST       /tenant/mail/sources/<id>/toggle/   â†’ activer/dÃ©sactiver
  GET        /tenant/mail/inbox/           â†’ liste mails interceptÃ©s
  GET        /tenant/mail/inbox/<id>/      â†’ dÃ©tail + piÃ¨ces jointes
  POST       /tenant/mail/inbox/<id>/dispatch/   â†’ dispatcher au responsable pays
  POST       /tenant/mail/inbox/<id>/reject/     â†’ rejeter
  POST       /tenant/mail/inbox/<id>/restore/    â†’ remettre en attente
  GET        /tenant/mail/country-managers/      â†’ liste des responsables pays du tenant
é    N)Úget_user_model)ÚFileResponseÚHttp404ÚStreamingHttpResponse)Útimezone)Ú	condition©Ústatus)Úapi_viewÚpermission_classes)ÚIsAuthenticated)ÚResponse)Ú
MembershipÚRoleÚMailInboxConfigÚ
MailSourceÚIncomingMailÚMailAttachmentc                 ó  — t         j                  j                  | t         j                  j                  ¬«      j                  d«      j                  d«      }|j                  d¬«      j                  «       xs |j                  «       S )N©Úuserr
   ÚtenantÚrolesT)Úis_owner)r   ÚobjectsÚfilterÚStatusÚACTIVEÚselect_relatedÚprefetch_relatedÚfirst)r   Úqss     ú//var/www/html/acx/accounts/views_mail_config.pyÚ_get_active_membershipr$   4   sh   € ä×Ñ×!Ñ! t´J×4EÑ4E×4LÑ4LÐ!ÓMß	‰˜Ó	!ß	Ñ	˜'Ó	"ð ð
 �9‰9˜dˆ9Ó#×)Ñ)Ó+Ò9¨r¯x©x«zÐ9ó    c                 óº   — | sy| j                   ryt        | j                  j                  dd¬«      «      }t        j
                  |v xs t        j                  |v S )NFTÚid)Úflat)r   Úsetr   Úvalues_listr   ÚADMINÚAPPROVER)Ú
membershipÚrole_idss     r#   Ú_is_tenant_adminr/   =   sQ   € ÙØØ×ÒØÜ�:×#Ñ#×/Ñ/°¸4Ð/Ó@ÓA€HÜ�J‰J˜(Ð"ÒB¬¯©¸Ð(AÐBr%   c                 ó  — | j                   | j                  | j                  | j                  t	        | j
                  «      | j                  | j                  | j                  | j                  | j                  | j                  dœS )N)r'   Ú	imap_hostÚ	imap_portÚ	imap_userÚimap_password_setÚuse_sslÚmailboxÚ	is_activeÚlast_polled_atÚ
last_errorÚ
updated_at)r'   r1   r2   r3   ÚboolÚimap_passwordr5   r6   r7   r8   r9   r:   )Úcfgs    r#   Ú_imap_config_payloadr>   F   sb   € à�f‰fØ—]‘]Ø—]‘]Ø—]‘]Ü! #×"3Ñ"3Ó4Ø—;‘;Ø—;‘;Ø—]‘]Ø×,Ñ,Ø—n‘nØ—n‘nñð r%   c           	      ó¸   — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  dœS )N©r'   Úclient_nameÚemail_or_domainÚ	is_domainÚnotesr7   Ú
created_atr:   r@   )Úsrcs    r#   Ú_source_payloadrG   V   sF   € à�f‰fØ—‘Ø×.Ñ.Ø—]‘]Ø—‘Ø—]‘]Ø—n‘nØ—n‘nñ	ð 	r%   c                 óô  — | j                   | j                  | j                  | j                  | j                  | j
                  | j                  rT| j                  | j                  r| j                  j                  nd| j                  r| j                  j                  nddœnd | j                  r"| j                  t        | j                  «      dœnd | j                  | j                  j                  «       dœ
S )NÚ )r'   rA   rB   ©r'   Úname)
r'   Ú
from_emailÚ	from_nameÚsubjectÚreceived_atr
   Úmail_sourceÚassigned_toÚassigned_countryÚattachments_count)r'   rL   rM   rN   rO   r
   Úmail_source_idrP   rA   rB   Úassigned_to_idÚstrrQ   rR   ÚattachmentsÚcount)Úmails    r#   Ú_mail_list_payloadrZ   c   sÕ   € à�g‰gØ—o‘oØ—^‘^Ø—<‘<Ø×'Ñ'Ø—+‘+ð
 × Ò ð ×%Ñ%Ø;?×;KÒ;K˜4×+Ñ+×7Ò7ÐQSØCG×CSÒCS˜t×/Ñ/×?Ò?ÐY[ò
ð '+ð × Ò ð ×%Ñ%Ü˜×(Ñ(Ó)ò
ð '+Ø ×1Ñ1Ø!×-Ñ-×3Ñ3Ó5ñ#ð r%   c                 ó–  — t        | «      }|j                  | j                  | j                  | j                  | j
                  | j                  r"| j                  t        | j                  «      dœnd | j                  | j                  r"| j                  t        | j                  «      dœnd | j                  | j                  j                  «       D �cg c]c  }|j                  |j                   |j"                  |j$                  |j&                  r|j&                  j(                  nd d|j                  › d�dœ‘Œe c}dœ	«       |S c c}w )NrJ   z/tenant/mail/attachments/z
/download/)r'   ÚfilenameÚcontent_typeÚsizeÚurlÚdownload_url)	Ú	body_textÚ	body_htmlÚdispatch_noteÚdispatched_atÚdispatched_byÚaccepted_atÚaccepted_byÚcaserW   )rZ   Úupdatera   rb   rc   rd   Údispatched_by_idrV   re   rf   Úaccepted_by_idrg   Úcase_idrW   Úallr'   r\   r]   r^   Úfiler_   )rY   ÚpayloadÚas      r#   Ú_mail_detail_payloadrq   y   s  € Ü  Ó&€GØ‡N�NØ—^‘^Ø—^‘^Ø×+Ñ+Ø×+Ñ+ð ×"Ò"ð ×'Ñ'Ü˜×*Ñ*Ó+ò
ð )-Ø×'Ñ'ð × Ò ð ×%Ñ%Ü˜×(Ñ(Ó)ò
ð '+Ø—‘ð ×%Ñ%×)Ñ)Ó+ö

ð ð —d‘dØŸJ™JØ !§¡ØŸ™Ø%&§V¢V�q—v‘v—z’z°Ø";¸A¿D¹D¸6ÀÐ Lóò

ñô ð6 €Nùò

s   ÃA(EÚGETÚPUTc                 óš  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S |j                  }| j                  dk(  r5	 t        j                  j                  |¬«      }t        t        |«      «      S | j                  xs i }t        j                  j                  |¬«      \  }}|j                  d«      xs dj                  «       |_        t#        |j                  d	«      xs d
«      |_        |j                  d«      xs dj                  «       |_        t)        |j                  dd«      «      |_        |j                  d«      xs dj                  «       xs d|_        t)        |j                  dd«      «      |_        d|v r|d   r
|d   |_        |j                   r|j&                  st        ddid¬«      S |j3                  «        t        t        |«      «      S # t        j                  $ r t        d «      cY S w xY w)NÚdetailúNo active tenant.r	   úNot allowed.rr   ©r   r1   rI   r2   éá  r3   r5   Tr6   ÚINBOXr7   r<   z#imap_host et imap_user sont requis.é�  )r$   r   r   r   r
   ÚHTTP_403_FORBIDDENr/   Úmethodr   r   Úgetr>   ÚDoesNotExistÚdataÚget_or_createÚstripr1   Úintr2   r3   r;   r5   r6   r7   r<   Úsave)ÚrequestÚactor_mr   r=   r€   Ú_s         r#   Úmail_imap_configrˆ   �   sä  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUà�^‰^€Fà‡~�~˜Òð	"Ü!×)Ñ)×-Ñ-°VÐ-Ó<ˆCÜÔ0°Ó5Ó6Ð6ð
 �<‰<Ò˜2€DÜ×$Ñ$×2Ñ2¸&Ð2ÓA�F€Cˆà—X‘X˜kÓ*Ò0¨b×7Ñ7Ó9€C„MÜ˜Ÿ™ Ó-Ò4°Ó5€C„MØ—X‘X˜kÓ*Ò0¨b×7Ñ7Ó9€C„MÜ�t—x‘x 	¨4Ó0Ó1€C„KØ—8‘8˜IÓ&Ò1¨'×8Ñ8Ó:ÒE¸g€C„KÜ˜Ÿ™ +¨tÓ4Ó5€C„Mà˜$Ñ 4¨Ò#8Ø  Ñ1ˆÔà�=Š= §¢Ü˜Ð#HÐIÐRUÔVÐVà‡H�H„JÜÔ(¨Ó-Ó.Ð.øô+ ×+Ñ+ò 	"Ü˜D“>Ò!ð	"ús   Â3H) È)I
É	I
ÚPOSTc                 ór  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S | j                  xs i }|j                  d«      xs dj                  «       }t        |j                  d«      xs d«      }|j                  d	«      xs dj                  «       }|j                  d
«      xs d}t        |j                  dd«      «      }|j                  d«      xs dj                  «       }|r|r|st        ddid¬«      S |s7	 t        j                  j                  |j                  ¬«      }	|	j                  }	 |rt!        j"                  ||«      }
nt!        j$                  ||«      }
|
j'                  ||«       |
j)                  |d¬«      \  }}|dk(  r|d   rt        |d   «      nd}|
j+                  «        t        dd|› d|› d�dœ«      S # t        j                  $ r Y Œ¬w xY w# t         j$                  j,                  $ r}t        dd|› �dœd¬«      cY d}~S d}~wt.        j0                  $ r t        dddœd¬«      cY S t2        $ r#}t        dt5        |«      dœd¬«      cY d}~S d}~ww xY w)z6Teste la connexion IMAP avec les identifiants fournis.ru   rv   r	   rw   r1   rI   r2   ry   r3   r<   r5   Tr6   rz   u*   HÃ´te, utilisateur et mot de passe requis.r{   rx   )ÚreadonlyÚOKr   u   Connexion rÃ©ussie. z message(s) dans ú.©ÚsuccessÚmessageFzErreur IMAP : Nu   HÃ´te IMAP introuvable.)r$   r   r   r   r
   r|   r/   r€   r~   r‚   rƒ   r;   r   r   r<   r   ÚimaplibÚ	IMAP4_SSLÚIMAP4ÚloginÚselectÚlogoutÚerrorÚsocketÚgaierrorÚ	ExceptionrV   )r…   r†   r€   ÚhostÚportr   Úpasswordr5   r6   r=   ÚimapÚstatus_codeÚ	data_respÚ	msg_countÚes                  r#   Úmail_imap_testr£   Ä   su  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUà�<‰<Ò˜2€DØ�H‰H�[Ó!Ò' R×.Ñ.Ó0€DÜˆt�x‰x˜Ó$Ò+¨Ó,€DØ�H‰H�[Ó!Ò' R×.Ñ.Ó0€DØ�x‰x˜Ó(Ò.¨B€HÜ�4—8‘8˜I tÓ,Ó-€GØ�x‰x˜	Ó"Ò- g×4Ñ4Ó6€Gá‘t¡8Ü˜Ð#OÐPÐY\Ô]Ð]ñ ð	Ü!×)Ñ)×-Ñ-°W·^±^Ð-ÓDˆCØ×(Ñ(ˆHðKÙÜ×$Ñ$ T¨4Ó0‰Dä—=‘=  tÓ,ˆDØ�
‰
�4˜Ô"Ø!%§¡¨W¸t Ó!DÑˆ�YØ)4¸Ò)<ÀÈ1Â”C˜	 !™Ô%ÐSTˆ	Ø�‰ŒÜØØ-¨i¨[Ð8IÈ'ÈÐRSÐTñ
ó ð 	øô ×+Ñ+ò 	Ùð	ûô  �=‰=×Ñò YÜ E¸ÀqÀcÐ6JÑKÐTWÔXÕXûÜ�?‰?ò ^Ü EÐ6OÑPÐY\Ô]Ò]Üò KÜ E´c¸!³fÑ=ÀcÔJÕJûðKúsI   Å6H Å?BH. ÈH+È*H+È.J6ÉI#ÉJ6É#&J6ÊJ6ÊJ1Ê+J6Ê1J6c                 ót  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S 	 t        j                  j                  |j                  d¬«      }d	d
lm} 	  |d|j                  ¬«       |j                  «        t        d|j                  |j                   dœ«      S # t        j                  $ r t        ddid¬«      cY S w xY w# t"        $ r#}t        dt%        |«      dœd¬«      cY d}~S d}~ww xY w)u9   DÃ©clenche un poll IMAP immÃ©diat pour le tenant courant.ru   rv   r	   rw   T)r   r7   z!Aucune configuration IMAP active.é”  r   )Úcall_commandÚ	poll_mail)Ú	tenant_id)r�   r8   r9   FrŽ   iô  N)r$   r   r   r   r
   r|   r/   r   r   r~   r   Údjango.core.managementr¦   r¨   Úrefresh_from_dbr8   r9   rš   rV   )r…   r†   r=   r¦   r¢   s        r#   Úmail_imap_pollr«   ö   s  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUðUÜ×%Ñ%×)Ñ)°·±È4Ð)ÓPˆõ 4ð	KÙ�[¨C¯M©MÕ:Ø×ÑÔÜØØ!×0Ñ0ØŸ.™.ñ
ó ð 	øô ×'Ñ'ò UÜ˜Ð#FÐGÐPSÔTÒTðUûô ò KÜ E´c¸!³fÑ=ÀcÔJÕJûðKús1   Á*+C# ÂAD Ã#"DÄDÄ	D7ÄD2Ä,D7Ä2D7c                 óä  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S 	 t        j                  j                  |j                  ¬«      }|j                  s:t        ddd|j                  |j                  t        |j                  «      d
dœ«      S t        |j                  «      }|€d}d}nG|j                  rd}|j                  dd }d|› �}n$|dk  r	d}d|› d�}n|dk  r	d}d|› d�}nd}d|› d�}t        |||j                  |j                  |j                  |d
dœ«      S # t        j                  $ r t        ddddd	dd
dœ«      cY S w xY w)u³  
    Retourne l'Ã©tat du service de polling pour ce tenant.

    health:
      "unconfigured" â€” aucune config IMAP
      "inactive"     â€” config prÃ©sente mais is_active=False (arrÃªtÃ© par le tenant)
      "healthy"      â€” dernier passage < 10 min
      "delayed"      â€” dernier passage entre 10 et 20 min (1â€“2 cycles manquÃ©s)
      "stale"        â€” dernier passage > 20 min ou jamais (cron potentiellement arrÃªtÃ©)
    ru   rv   r	   rx   Úunconfiguredu   Non configurÃ©FNrI   é   )ÚhealthÚhealth_labelr7   Úlast_runr9   Úminutes_since_last_runÚcron_interval_minutesÚinactiveu   ArrÃªtÃ©ÚstalezEn attente du premier passager—   éP   u   Erreur IMAP â€” é
   Úhealthyu!   Actif â€” dernier passage il y a z miné   Údelayedu%   En retard â€” dernier passage il y a u#   Inactif â€” dernier passage il y a )r$   r   r   r   r
   r|   r   r   r~   r   r7   r8   r9   Ú_minutes_ago)r…   r†   r=   Úminutesr¯   ÚlabelÚ	short_errs          r#   Úmail_cron_statusr¿     sŸ  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZðÜ×%Ñ%×)Ñ)°·±Ð)Ó@ˆð �=Š=ÜØ Ø&ØØ×*Ñ*ØŸ.™.Ü&2°3×3EÑ3EÓ&FØ%&ñ
ó ð 	ô ˜3×-Ñ-Ó.€Gà€ØˆØ/‰Ø	�ŠØˆØ—N‘N 3 BÐ'ˆ	Ø" 9 +Ð.‰Ø	�2ŠØˆØ3°G°9¸DÐA‰Ø	�2ŠØˆØ7¸°yÀÐE‰àˆØ5°g°Y¸dÐCˆäØØØ—]‘]Ø×&Ñ&Ø—n‘nØ")Ø!"ñó ð øôS ×'Ñ'ò 	ÜØ$Ø,ØØØØ&*Ø%&ñ
ó ò 	ð	ús   Á*E Å&E/Å.E/Úreturnc                 ón   — | sy t        j                  «       | z
  }t        |j                  «       dz  «      S )Né<   )r   Únowrƒ   Útotal_seconds)ÚdtÚdeltas     r#   r»   r»   Y  s1   € ÙØÜ�L‰L‹N˜RÑ€EÜˆu×"Ñ"Ó$¨Ñ*Ó+Ð+r%   c                 óà  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S |j                  }| j                  dk(  rBt        j                  j                  |¬«      }t        |D �cg c]  }t        |«      ‘Œ c}«      S t        |«      st        ddit        j
                  ¬«      S | j                  xs i }|j                  d«      xs dj                  «       j                  «       }|st        dd	id
¬«      S t        j                  j                  ||¬«      j!                  «       rt        ddid
¬«      S t        j                  j#                  ||j                  d«      xs dj                  «       ||j                  d«      xs dj                  «       t%        |j                  dd«      «      ¬«      }t        t        |«      d¬«      S c c}w )Nru   rv   r	   rr   rx   rw   rB   rI   zemail_or_domain est requis.r{   ©r   rB   u*   Cette source existe dÃ©jÃ  pour ce tenant.rA   rD   r7   T)r   rA   rB   rD   r7   éÉ   )r$   r   r   r   r
   r|   r}   r   r   r   rG   r/   r€   r~   r‚   ÚlowerÚexistsÚcreater;   )r…   r†   r   ÚsourcesÚsr€   rB   rF   s           r#   Úmail_sourcesrÏ   d  sž  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZà�^‰^€Fà‡~�~˜ÒÜ×$Ñ$×+Ñ+°6Ð+Ó:ˆÜ°WÖ=°œ¨Õ+Ò=Ó>Ð>ä˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUà�<‰<Ò˜2€DØ—x‘xÐ 1Ó2Ò8°b×?Ñ?ÓA×GÑGÓI€OÙÜ˜Ð#@ÐAÈ#ÔNÐNä×Ñ× Ñ ¨ÀÐ ÓP×WÑWÔYÜ˜Ð#OÐPÐY\Ô]Ð]ä
×
Ñ
×
#Ñ
#ØØ—X‘X˜mÓ,Ò2°×9Ñ9Ó;Ø'Ø�x‰x˜Ó Ò& B×-Ñ-Ó/Ü�t—x‘x ¨TÓ2Ó3ð $ó €Cô ”O CÓ(°Ô5Ð5ùò) >s   ÂG+ÚPATCHÚDELETEÚ	source_idc                 óø  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S 	 t        j                  j                  ||j                  ¬«      }| j                  dk(  r|j                  «        t        d	¬«      S | j                  xs i }d
|v r|d
   xs dj                  «       |_        d|v r…|d   xs dj                  «       j!                  «       }|r^||j"                  k7  rOt        j                  j%                  |j                  |¬«      j'                  «       rt        ddid¬«      S ||_        d|v r|d   xs dj                  «       |_        d|v rt+        |d   «      |_        |j/                  «        t        t1        |«      «      S # t        j                  $ r t        ddid¬«      cY S w xY w)Nru   rv   r	   rw   ©r'   r   úSource introuvable.r¥   rÑ   éÌ   rA   rI   rB   rÈ   u   Cette source existe dÃ©jÃ .r{   rD   r7   )r$   r   r   r   r
   r|   r/   r   r   r~   r   r}   Údeleter€   r‚   rA   rÊ   rB   r   rË   rD   r;   r7   r„   rG   )r…   rÒ   r†   rF   r€   Únew_vals         r#   Úmail_source_detailrÙ   †  sÆ  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUðGÜ× Ñ ×$Ñ$¨	¸'¿.¹.Ð$ÓIˆð ‡~�~˜Ò!Ø�
‰
ŒÜ˜sÔ#Ð#à�<‰<Ò˜2€DØ˜ÑØ Ñ.Ò4°"×;Ñ;Ó=ˆŒØ˜DÑ ØÐ)Ñ*Ò0¨b×7Ñ7Ó9×?Ñ?ÓAˆÙ�w #×"5Ñ"5Ò5Ü×!Ñ!×(Ñ(°·±ÐPWÐ(ÓX×_Ñ_ÔaÜ Ð+HÐ IÐRUÔVÐVØ")ˆCÔØ�$�Ø˜'‘]Ò( b×/Ñ/Ó1ˆŒ	Ø�dÑÜ˜T +Ñ.Ó/ˆŒØ‡H�H„JÜ”O CÓ(Ó)Ð)øô+ ×"Ñ"ò GÜ˜Ð#8Ð9À#ÔFÒFðGús   Á*+G Ç"G9Ç8G9c                 óæ  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S 	 t        j                  j                  ||j                  ¬«      }|j                   |_        |j                  «        t        t        |«      «      S # t        j                  $ r t        ddid¬«      cY S w xY w)Nru   rv   r	   rw   rÔ   rÕ   r¥   )r$   r   r   r   r
   r|   r/   r   r   r~   r   r7   r„   rG   )r…   rÒ   r†   rF   s       r#   Úmail_source_togglerÛ   ©  sÎ   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUðGÜ× Ñ ×$Ñ$¨	¸'¿.¹.Ð$ÓIˆð Ÿ™Ð%€C„MØ‡H�H„JÜ”O CÓ(Ó)Ð)øô ×"Ñ"ò GÜ˜Ð#8Ð9À#ÔFÒFðGús   Á*+C Ã"C0Ã/C0c                 ó  — t        | j                  «      }|r|j                  st        ddid¬«      S t        j
                  j                  |j                  ¬«      }t        |«      s|j                  | j                  ¬«      }t        |j                  d¬«      j                  «       |j                  d¬«      j                  «       |j                  d	¬«      j                  «       |j                  d
¬«      j                  «       dœ«      S )uL   Retourne uniquement les compteurs â€” endpoint lÃ©ger pour le badge sidebar.ru   rv   é“  r	   rx   ©rQ   ÚpendingÚ
dispatchedÚ	processedÚrejected)rß   rà   rá   râ   )	r$   r   r   r   r   r   r   r/   rX   )r…   r†   Úbase_qss      r#   Úmail_inbox_statsrä   À  sÕ   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7ÀÔDÐDä×"Ñ"×)Ñ)°·±Ð)Ó@€GÜ˜GÔ$Ø—.‘.¨W¯\©\�.Ó:ˆäØ—n‘n¨I�nÓ6×<Ñ<Ó>Ø—n‘n¨L�nÓ9×?Ñ?ÓAØ—n‘n¨K�nÓ8×>Ñ>Ó@Ø—n‘n¨J�nÓ7×=Ñ=Ó?ñ	ó ð r%   c                 óÆ  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      }t        j                  j                  |j                  ¬«      }|r#|j                  ddd«      j                  d«      }n<|j                  | j                  ¬	«      j                  ddd«      j                  d«      }| j                  j                  d
«      }|r|j                  |¬«      }| j                  j                  d«      xs dj                  «       }|r8|j                  |¬«      |j                  |¬«      z  |j                  |¬«      z  }| j                  j                  d«      }|r|j                  |¬«      }t        dt!        | j                  j                  dd«      «      «      }d}	|j#                  «       }
|j%                  d«      |dz
  |	z  ||	z   }|r�|j#                  «       |j                  d¬«      j#                  «       |j                  d¬«      j#                  «       |j                  d¬«      j#                  «       |j                  d¬«      j#                  «       dœ}nª|j                  | j                  ¬	«      }|j#                  «       |j                  d¬«      j#                  «       |j                  d¬«      j#                  «       |j                  d¬«      j#                  «       |j                  d¬«      j#                  «       dœ}t        |
||	||D �cg c]  }t'        |«      ‘Œ c}|dœ«      S c c}w )Nru   rv   r	   rx   rP   rQ   re   rW   rÞ   r
   ÚsearchrI   )Úsubject__icontains)Úfrom_email__icontains)Úfrom_name__icontainsÚcountry)rR   é   Úpager¹   z-received_atrß   rà   rá   râ   )Útotalrß   rà   rá   râ   )rX   rì   Ú	page_sizeÚis_adminÚresultsÚstats)r$   r   r   r   r
   r|   r/   r   r   r   r   r    rr   r~   r‚   Úmaxrƒ   rX   Úorder_byrZ   )r…   r†   rï   rã   r"   Ústatus_filterræ   rê   rì   rî   rí   Úmailsrñ   Úmy_qsÚms                  r#   Ú
mail_inboxrø   Ø  sá  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZä Ó(€Hä×"Ñ"×)Ñ)°·±Ð)Ó@€Gáà×#Ñ# M°=À/ÓR×cÑcÐdqÓr‰ð �N‰N w§|¡|ˆNÓ4ß‰^˜M¨=¸/ÓJßÑ˜mÓ,ð 	ð —K‘K—O‘O HÓ-€MÙØ�Y‰Y˜mˆYÓ,ˆà�k‰k�o‰o˜hÓ'Ò-¨2×4Ñ4Ó6€FÙØ�Y‰YØ%ð ó 
à�I‰I¨FˆIÓ3ñ4à68·i±iÐU[°iÓ6\ñ]ˆð �k‰k�o‰o˜iÓ(€GÙØ�Y‰Y¨ˆYÓ0ˆô ˆq”#�g—k‘k—o‘o f¨aÓ0Ó1Ó2€DØ€IØ�H‰H‹J€EØ�K‰K˜Ó'¨°©°YÑ(>ÀÀyÑ@PÐQ€Eáà!Ÿ-™-›/Ø!Ÿ.™.°	˜.Ó:×@Ñ@ÓBØ!Ÿ.™.°˜.Ó=×CÑCÓEØ!Ÿ.™.°˜.Ó<×BÑBÓDØ!Ÿ.™.°
˜.Ó;×AÑAÓCñ
‰ð —‘¨7¯<©<�Ó8ˆàŸ+™+›-ØŸ,™,¨i˜,Ó8×>Ñ>Ó@ØŸ,™,¨l˜,Ó;×AÑAÓCØŸ,™,¨k˜,Ó:×@Ñ@ÓBØŸ,™,¨j˜,Ó9×?Ñ?ÓAñ
ˆô ØØØØØ38Ö9¨aÔ& qÕ)Ò9Øñó ð ùò
 :s   ÍMÚmail_idc                 ó”  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S 	 t        j                  j                  dddd«      j                  d«      j                  ||j                  ¬	«      }t        t        |«      «      S # t        j                  $ r t        dd
id¬«      cY S w xY w)Nru   rv   r	   rP   rQ   re   rh   rW   rÔ   úMail introuvable.r¥   )r$   r   r   r   r
   r|   r   r   r   r    r~   r   rq   ©r…   rù   r†   rY   s       r#   Úmail_inbox_detailrý     s´   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZðEä× Ñ ß‰^˜M¨=¸/È6ÓRßÑ˜mÓ,ß‰S�G G§N¡NˆSÓ3ð	 	ô Ô(¨Ó.Ó/Ð/øô ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEús   ÁAB" Â""CÃCc                 óF  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S 	 t        j                  j                  dd«      j                  ||j                  ¬«      }| j                  xs i }|j                  d
«      }|j                  d«      xs dj                  «       j                  «       dd }|j                  d«      xs dj                  «       }|st        ddid¬«      S 	 t        j                  j                  d«      j!                  d«      j                  |j                  |t        j"                  j$                  ¬«      }|j                  |_        ||_        ||_        | j                  |_        t/        j0                  «       |_        t        j"                  j4                  |_        |j7                  «        t9        j:                  t<        ||j                  fd¬«      j?                  «        t        tA        |«      «      S # t        j                  $ r t        ddid	¬«      cY S w xY w# t        j                  $ r t        ddid	¬«      cY S w xY w)u*   Dispatcher un mail Ã  un responsable pays.ru   rv   r	   rw   rP   rQ   rÔ   rû   r¥   rU   rR   rI   Né   rc   úassigned_to_id est requis.r{   r   r   ©r   Úuser_idr
   z'Responsable introuvable dans ce tenant.T©ÚtargetÚargsÚdaemon)!r$   r   r   r   r
   r|   r/   r   r   r   r~   r   r€   r‚   Úupperr   r    r   r   rQ   rR   rc   re   r   rÃ   rd   Ú
DISPATCHEDr„   Ú	threadingÚThreadÚ_notify_dispatchÚstartrq   )	r…   rù   r†   rY   r€   rU   rR   rc   Ú
assignee_ms	            r#   Úmail_dispatchr  2  s@  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUðEÜ×#Ñ#×2Ñ2°=À-ÓP×TÑTØ˜wŸ~™~ð Uó 
ˆð �<‰<Ò˜2€DØ—X‘XÐ.Ó/€NØŸ™Ð!3Ó4Ò:¸×AÑAÓC×IÑIÓKÈBÈQÐOÐØ—X‘X˜oÓ.Ò4°"×;Ñ;Ó=€MáÜ˜Ð#?Ð@ÈÔMÐMð[Ü×'Ñ'×6Ñ6°vÓ>×OÑOÐPWÓX×\Ñ\Ø—>‘>¨>Ä*×BSÑBS×BZÑBZð ]ó 
ˆ
ð "—‘€DÔØ,€DÔØ&€DÔØ Ÿ™€DÔÜ!Ÿ™›€DÔÜ×%Ñ%×0Ñ0€D„KØ‡I�I„Kô ×ÑÜ t¨Z¯_©_Ð&=Àdôç�e„gäÔ(¨Ó.Ó/Ð/øôA ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEûô  ×"Ñ"ò [Ü˜Ð#LÐMÐVYÔZÒZð[ús%   Á*;I Ä/A"I; É"I8É7I8É;"J ÊJ c                 ó  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S 	 t        j                  j                  ||j                  ¬«      }t        j                  j                  |_        |j                  dd	g¬
«       t        t        |«      «      S # t        j                  $ r t        ddid¬«      cY S w xY w)Nru   rv   r	   rw   rÔ   rû   r¥   r
   r:   ©Úupdate_fields)r$   r   r   r   r
   r|   r/   r   r   r~   r   r   ÚREJECTEDr„   rZ   rü   s       r#   Úmail_rejectr  c  sÞ   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUðEÜ×#Ñ#×'Ñ'¨7¸7¿>¹>Ð'ÓJˆô ×%Ñ%×.Ñ.€D„KØ‡I�I˜X |Ð4€IÔ5ÜÔ& tÓ,Ó-Ð-øô ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEús   Á*+C Ã"DÄ Dc                 óF  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        |«      st        ddit        j
                  ¬«      S 	 t        j                  j                  ||j                  ¬«      }t        j                  j                  |_        d |_        d|_        d |_        d |_        d|_        |j%                  «        t        t'        |«      «      S # t        j                  $ r t        ddid¬«      cY S w xY w)	Nru   rv   r	   rw   rÔ   rû   r¥   rI   )r$   r   r   r   r
   r|   r/   r   r   r~   r   r   ÚPENDINGrQ   rR   rd   re   rc   r„   rZ   rü   s       r#   Úmail_restorer  v  sü   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZÜ˜GÔ$Ü˜ >Ð2¼6×;TÑ;TÔUÐUðEÜ×#Ñ#×'Ñ'¨7¸7¿>¹>Ð'ÓJˆô ×%Ñ%×-Ñ-€D„KØ€DÔØ€DÔØ€DÔØ€DÔØ€DÔØ‡I�I„KÜÔ& tÓ,Ó-Ð-øô ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEús   Á*+C; Ã;"D ÄD c                 ó:  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S 	 t        j                  j                  ||j                  ¬«      }t        |«      }|j                  | j                  j                  k(  }|s|st        ddid¬«      S t        j                  j                  |_        |j                  d	d
g¬«       t        t!        |«      «      S # t        j                  $ r t        ddid¬«      cY S w xY w)Nru   rv   r	   rÔ   rû   r¥   rw   rÝ   r
   r:   r  )r$   r   r   r   r
   r|   r   r   r~   r   r/   rU   r'   r   Ú	PROCESSEDr„   rZ   ©r…   rù   r†   rY   rï   Úis_assignees         r#   Úmail_mark_processedr  Ž  s÷   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZðEÜ×#Ñ#×'Ñ'¨7¸7¿>¹>Ð'ÓJˆô
   Ó(€HØ×%Ñ%¨¯©¯©Ñ8€KÙ™KÜ˜ >Ð2¸3Ô?Ð?ä×%Ñ%×/Ñ/€D„KØ‡I�I˜X |Ð4€IÔ5ÜÔ& tÓ,Ó-Ð-øô ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEús   Á+C5 Ã5"DÄDc                 óî  — t        | j                  «      }|r|j                  st        ddid¬«      S t	        |«      st        ddid¬«      S 	 t
        j                  j                  d«      j                  ||j                  ¬«      }| j                  j                  d
«      xs dj                  «       }| j                  |_        d|_        | j                  |_        t        j                   «       |_        ||_        d|_        d|_        t
        j*                  j,                  |_        |j1                  «        t        t3        |«      «      S # t
        j                  $ r t        ddid	¬«      cY S w xY w)u(   Admin se dispatche le mail Ã  lui-mÃªme.ru   rv   rÝ   r	   u   RÃ©servÃ© aux admins.rP   rÔ   rû   r¥   rc   rI   N)r$   r   r   r   r/   r   r   r   r~   r   r€   r‚   rQ   rR   re   r   rÃ   rd   rc   rf   rg   r   r  r
   r„   rq   )r…   rù   r†   rY   rc   s        r#   Úmail_self_dispatchr  ¥  s?  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7ÀÔDÐDÜ˜GÔ$Ü˜Ð#:Ð;ÀCÔHÐHðEÜ×#Ñ#×2Ñ2°=ÓA×EÑEÈÐY`×YgÑYgÐEÓhˆð —\‘\×%Ñ% oÓ6Ò<¸"×CÑCÓE€Mà—|‘|€DÔØ€DÔØ Ÿ™€DÔÜ!Ÿ™›€DÔØ&€DÔØ€DÔØ€DÔÜ×%Ñ%×0Ñ0€D„KØ‡I�I„KäÔ(¨Ó.Ó/Ð/øô ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEús   Á:E Å"E4Å3E4c                 óú  — t        | j                  «      }|r|j                  st        ddid¬«      S 	 t        j
                  j                  dddd«      j                  d	«      j                  ||j                  ¬
«      }|j                  t        j                  j                  k7  rt        ddid¬«      S t        |«      }|j                  | j                  j                  k(  }|s|st        ddid¬«      S |j                   s>t#        j$                  «       |_        | j                  |_        |j)                  g d¢¬«       t        t+        |«      «      S # t        j                  $ r t        ddid¬«      cY S w xY w)u9   Le responsable dÃ©signÃ© accepte formellement le dossier.ru   rv   rÝ   r	   rP   rQ   re   rg   rW   rÔ   rû   r¥   u'   Ce mail n'est pas en statut dispatchÃ©.r{   u'   Vous n'Ãªtes pas l'assignÃ© de ce mail.)rf   rg   r:   r  )r$   r   r   r   r   r   r   r    r~   r   r
   r   r  r/   rU   r'   rf   r   rÃ   rg   r„   rq   r  s         r#   Úmail_acceptr  Ã  sJ  € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7ÀÔDÐDðEÜ×#Ñ#×2Ñ2Ø˜=¨/¸=ó
ç
Ñ
˜=Ó
)¯#©#°ÀÇÁ¨#Ó*Pð 	ð ‡{�{”l×)Ñ)×4Ñ4Ò4Ü˜Ð#LÐMÐVYÔZÐZä Ó(€HØ×%Ñ%¨¯©¯©Ñ8€KÙ™KÜ˜Ð#LÐMÐVYÔZÐZà×ÒÜ#Ÿ<™<›>ˆÔØ"Ÿ<™<ˆÔØ�	‰	Ò Lˆ	ÔMäÔ(¨Ó.Ó/Ð/øô! ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEús   ´AE Å"E:Å9E:c                 óä  — t        | j                  «      }|r|j                  st        ddid¬«      S 	 t        j
                  j                  dd«      j                  ||j                  ¬«      }t        |«      }|j                  | j                  j                  k(  }|s|st        dd
id¬«      S | j                  xs i }|j                  d«      }|j                  d«      xs dj                  «       }|st        ddid¬«      S 	 t        j
                  j                  d«      j                  |j                  |t        j                  j                   ¬«      }	|	j                  |_        | j                  |_        t'        j(                  «       |_        ||_        d|_        d|_        t        j                  j2                  |_        |j7                  «        t9        j:                  t<        ||	j                  fd¬«      j?                  «        t        tA        |«      «      S # t        j                  $ r t        ddid	¬«      cY S w xY w# t        j                  $ r t        ddid	¬«      cY S w xY w)u?   Le responsable dÃ©signÃ© rÃ©affecte le dossier Ã  un collÃ¨gue.ru   rv   rÝ   r	   rP   rQ   rÔ   rû   r¥   u2   Vous n'Ãªtes pas autorisÃ© Ã  rÃ©affecter ce mail.rU   rc   rI   r   r{   r   r  z"Membre introuvable dans ce tenant.NTr  )!r$   r   r   r   r   r   r   r~   r   r/   rU   r'   r€   r‚   r   r   r   rQ   re   r   rÃ   rd   rc   rf   rg   r  r
   r„   r	  r
  r  r  rq   )
r…   rù   r†   rY   rï   r  r€   Únew_assignee_idrc   Únew_ms
             r#   Úmail_reassignr#  â  s   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7ÀÔDÐDðEÜ×#Ñ#×2Ñ2°=À-ÓP×TÑTØ˜wŸ~™~ð Uó 
ˆô   Ó(€HØ×%Ñ%¨¯©¯©Ñ8€KÙ™KÜ˜Ð#WÐXÐadÔeÐeà�<‰<Ò˜2€DØ—h‘hÐ/Ó0€OØ—X‘X˜oÓ.Ò4°"×;Ñ;Ó=€MáÜ˜Ð#?Ð@ÈÔMÐMðVÜ×"Ñ"×1Ñ1°&Ó9×=Ñ=Ø—>‘>¨?Ä:×CTÑCT×C[ÑC[ð >ó 
ˆð —z‘z€DÔØ Ÿ™€DÔÜ!Ÿ™›€DÔØ&€DÔØ€DÔØ€DÔÜ×%Ñ%×0Ñ0€D„KØ‡I�I„Kä×ÑÜ t¨U¯Z©ZÐ&8Àôç�e„gäÔ(¨Ó.Ó/Ð/øôG ×$Ñ$ò EÜ˜Ð#6Ð7ÀÔDÒDðEûô& ×"Ñ"ò VÜ˜Ð#GÐHÐQTÔUÒUðVús$   ´;H" ÄAI
 È""IÉIÉ
"I/É.I/c                 óF  — t        | j                  «      }|r|j                  st        ddit        j
                  ¬«      S t        j                  j                  |j                  t        j                  j                  t        j                  ¬«      j                  d«      j                  «       }|D �cg c]X  }|j                  j                  |j                  j                   t#        |j                  «      |j                  j$                  dœ‘ŒZ }}t        |«      S c c}w )Nru   rv   r	   )r   r
   Ú	roles__idr   )r'   ÚusernameÚ	full_nameÚemail)r$   r   r   r   r
   r|   r   r   r   r   r   r   ÚCOUNTRY_MANAGERr   Údistinctr'   r&  rV   r(  )r…   r†   Úmembershipsr÷   Úresults        r#   Úmail_country_managersr-    sç   € ô % W§\¡\Ó2€GÙ˜'Ÿ.š.Ü˜Ð#6Ð7Ä×@YÑ@YÔZÐZô 	×Ñ×!Ñ!Ø—>‘>Ü×$Ñ$×+Ñ+Ü×*Ñ*ð 	"ó 	
÷
 
‰˜Ó	ß	‰‹ð ð" öð ð —&‘&—)‘)ØŸ™Ÿ™Ü˜QŸV™V›Ø—V‘V—\‘\ó		
ð€Fð ô �FÓÐùòs   Â4ADrY   c                 ó„  — ddl m} ddlm} |j                  s!t
        j                  d|j                  «       y |j                  xs |j                  }d| j                  d d › �}| j                  xs d}| j                  xs dj                  «       d d	 }t        | j                  xs d«      d	kD  r|d
z  }| j                  rd| j                  › d�nd}t        |dd«      }	|	› d�}
d|› d| j                   xs | j"                  › d| j"                  › d| j                  › d|› d| j$                  j'                  d«      › d|› d|› d|
› d�}| j                  rd| j                  › d�nd}|rd|› d�nd}d|› d| j                   xs | j"                  › d| j                   rd | j"                  z   d!z   nd› d"| j                  xs d#› d$|› d%| j$                  j'                  d«      › d&|› d'|› d(|
› d)�}t
        j)                  d*|j                  |j*                  |j,                  «       	  ||||j.                  |j                  g¬+«      }|j1                  |d,«       |j3                  d-¬.«       t
        j)                  d/|j                  «       y # t4        $ r+}t
        j7                  d0|j                  |«       Y d }~y d }~ww xY w)1Nr   )ÚEmailMultiAlternatives)Úsettingsz5_notify_dispatch: assignee %s has no email, skipping.u#   [ACX] Demande client assignÃ©e â€” r¶   u   â€”rI   i,  u   â€¦z
    Note de dispatch : Ú
ÚFRONTEND_BASE_URLzhttps://acx-acremac.netz/fr/mail-inboxzBonjour uM   ,

Un dossier client vous a Ã©tÃ© assignÃ© sur la plateforme ACX.

De      : z <z>
Objet   : z
Pays    : u   
ReÃ§u le : u   %d/%m/%Y Ã  %H:%Mu   
AperÃ§u :
zB

Connectez-vous pour consulter et prendre en charge ce dossier :
u)   

Cordialement,
L'Ã©quipe ACX â€” ACREMACz¹<tr><td style="padding:10px 0 0"><div style="background:#fffbeb;border-left:3px solid #f59e0b;border-radius:4px;padding:10px 14px;font-size:13px;color:#92400e;"><strong>Note :</strong> z</div></td></tr>uB  <tr><td style="padding:14px 0 0"><p style="margin:0 0 6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:#94a3b8;">AperÃ§u</p><div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;padding:12px 14px;font-size:13px;color:#475569;line-height:1.6;white-space:pre-wrap;">au  <!DOCTYPE html>
<html lang="fr">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
<body style="margin:0;padding:0;background:#f1f5f9;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
  <table width="100%" cellpadding="0" cellspacing="0" style="background:#f1f5f9;padding:32px 16px;">
    <tr><td align="center">
      <table width="600" cellpadding="0" cellspacing="0" style="max-width:600px;width:100%;">

        <!-- Logo / header -->
        <tr><td style="background:linear-gradient(135deg,#1e1b4b 0%,#312e81 100%);border-radius:12px 12px 0 0;padding:28px 32px;">
          <table width="100%" cellpadding="0" cellspacing="0"><tr>
            <td><span style="font-size:22px;font-weight:800;color:#fff;letter-spacing:-.5px;">ACX</span>
              <span style="font-size:13px;color:#a5b4fc;margin-left:8px;">ACREMAC</span></td>
            <td align="right"><span style="background:rgba(255,255,255,.15);color:#c7d2fe;
              font-size:11px;font-weight:600;padding:4px 10px;border-radius:20px;">Nouvelle demande</span></td>
          </tr></table>
        </td></tr>

        <!-- Body -->
        <tr><td style="background:#fff;padding:32px;border-left:1px solid #e2e8f0;border-right:1px solid #e2e8f0;">
          <p style="margin:0 0 20px;font-size:16px;color:#1e293b;">
            Bonjour <strong>uL  </strong>,
          </p>
          <p style="margin:0 0 24px;font-size:14px;color:#475569;line-height:1.6;">
            Un dossier client vous a Ã©tÃ© assignÃ© sur la plateforme <strong>ACX</strong>.
            Veuillez en prendre connaissance et y donner suite dans les meilleurs dÃ©lais.
          </p>

          <!-- Fiche mail -->
          <table width="100%" cellpadding="0" cellspacing="0"
            style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:0;">
            <tr><td style="padding:16px 20px;">
              <table width="100%" cellpadding="0" cellspacing="0">
                <tr>
                  <td style="padding:4px 0;font-size:12px;color:#94a3b8;width:90px;">ExpÃ©diteur</td>
                  <td style="padding:4px 0;font-size:13px;color:#1e293b;font-weight:600;">
                    z
                    z@<br><span style="font-weight:400;color:#64748b;font-size:12px;">z</span>zã
                  </td>
                </tr>
                <tr>
                  <td style="padding:4px 0;font-size:12px;color:#94a3b8;">Objet</td>
                  <td style="padding:4px 0;font-size:13px;color:#1e293b;">z(Sans objet)zÏ</td>
                </tr>
                <tr>
                  <td style="padding:4px 0;font-size:12px;color:#94a3b8;">Pays</td>
                  <td style="padding:4px 0;font-size:13px;color:#1e293b;">uè   </td>
                </tr>
                <tr>
                  <td style="padding:4px 0;font-size:12px;color:#94a3b8;">ReÃ§u le</td>
                  <td style="padding:4px 0;font-size:13px;color:#1e293b;">
                    z¼
                  </td>
                </tr>
              </table>
            </td></tr>
          </table>

          <table width="100%" cellpadding="0" cellspacing="0">
            z
            z¿
          </table>

          <!-- CTA -->
          <table width="100%" cellpadding="0" cellspacing="0" style="margin-top:28px;">
            <tr><td align="center">
              <a href="u‚  " target="_blank"
                style="display:inline-block;background:linear-gradient(135deg,#1e1b4b 0%,#4f46e5 100%);
                color:#fff;text-decoration:none;font-size:14px;font-weight:700;
                padding:14px 32px;border-radius:8px;letter-spacing:.02em;">
                Ouvrir le dossier â†’
              </a>
            </td></tr>
          </table>
        </td></tr>

        <!-- Footer -->
        <tr><td style="background:#f8fafc;border:1px solid #e2e8f0;border-top:none;
          border-radius:0 0 12px 12px;padding:20px 32px;text-align:center;">
          <p style="margin:0;font-size:11px;color:#94a3b8;line-height:1.6;">
            Cet email a Ã©tÃ© envoyÃ© automatiquement par la plateforme ACX â€” ACREMAC.<br>
            Ne pas rÃ©pondre directement Ã  cet email.
          </p>
        </td></tr>

      </table>
    </td></tr>
  </table>
</body>
</html>z)_notify_dispatch: sending to %s via %s:%s)rN   ÚbodyrL   Útoz	text/htmlF)Úfail_silentlyz/_notify_dispatch: email sent successfully to %su3   _notify_dispatch: failed to send email to %s â€” %s)Údjango.core.mailr/  Údjango.confr0  r(  ÚloggerÚwarningr&  Ú
first_namerN   rR   ra   r‚   Úlenrc   ÚgetattrrM   rL   rO   ÚstrftimeÚinfoÚ
EMAIL_HOSTÚ
EMAIL_PORTÚDEFAULT_FROM_EMAILÚattach_alternativeÚsendrš   r—   )rY   Úassigneer/  Údj_settingsr:  Úsubject_lineÚcountry_labelÚbody_excerptÚ
note_blockÚfrontend_urlÚ	inbox_urlÚ	text_bodyÚ	note_htmlÚexcerpt_htmlÚ	html_bodyÚmsgÚexcs                    r#   r  r  9  sQ  € Ý7Ý3à�>Š>Ü�‰ÐNÐPX×PaÑPaÔbØà×$Ñ$Ò9¨×(9Ñ(9€JØ8¸¿¹ÀcÀrÐ9JÐ8KÐL€LØ×)Ñ)Ò2¨U€MØ—N‘NÒ( b×/Ñ/Ó1°$°3Ð7€LÜ
ˆ4�>‰>Ò˜RÓ  3Ò&Ø˜ÑˆØGK×GYÒGYÐ,¨T×-?Ñ-?Ð,@ÀÑCÐ_a€Jä˜;Ð(;Ð=VÓW€LØ�. Ð/€Ið �:�,ð à—^‘^Ò6 t§¡Ð7°r¸$¿/¹/Ð9Jð KØ—\‘\�Nð #Ø"�Oð $Ø×&Ñ&×/Ñ/Ð0CÓDÐEÀRØˆ,ð Ø"�^ð $LØLUÈ;ð W3ð		4ð ð$ 
×	Ò	ð#à#'×#5Ñ#5Ð"6Ð6Fñ	Hð "$ð	 ñ 
ðOð P\Ènð ]ñ	ð
 ð ðð* (˜Lð )ð —^‘^Ò6 t§¡Ð7ð 8Ø{÷  |Jò  |JÐXÐ[_×[jÑ[jÑjÐmvÒvð  PRð  Sð SKð
 LPÏ<É<ÒKiÐ[iÐJjð kKð LYÈ/ð Zð
 ×%Ñ%×.Ñ.Ð/BÓCÐDð Eð ˆKð ØˆNð ð "�{ð #ðEY€Iôv ‡K�KØ3Ø�‰˜×.Ñ.°×0FÑ0FôðaÙ$Ø ØØ"×5Ñ5Ø—‘Ðô	
ˆð 	×Ñ˜y¨+Ô6Ø�‰˜uˆÔ%Ü�‰ÐEÀxÇ~Á~ÕVøÜò aÜ�‰ÐJÈHÏNÉNÐ\_×`Ñ`ûðaús   È%A%J Ê	J?Ê!J:Ê:J?)Ú	etag_funcc                 óŠ  ‡
‡‡— ddl m} ddlm} ddlm} | j                  j                  dd«      }	  ||«      }|j                  j                  d«      }t        «       j                  j                  |d¬	«      Št        j                  j                  ‰t        j                  j                  ¬«      j!                  d«      j#                  «       }|r|j$                  s
 |dd¬«      S |j$                  Št'        |«      Š
ˆ
ˆˆfd„}t)         |«       d¬«      }	d|	d<   d|	d<   d|	d<   |	S # |t        f$ r  |d
d¬«      cY S w xY w)u  
    Server-Sent Events : pousse un Ã©vÃ©nement JSON dÃ¨s que le compteur 'pending'
    change pour ce tenant/utilisateur. L'authentification se fait via le token
    JWT passÃ© en query param (?token=...) car EventSource ne supporte pas
    les headers personnalisÃ©s.
    r   )ÚUntypedToken)Ú
TokenError)ÚHttpResponseÚtokenrI   r  T)r'   r7   ÚUnauthorizedi‘  r	   r   r   Ú	ForbiddenrÝ   c               3   óŽ  •K  — d} d}	 	 t         j                  j                  ‰¬«      }‰s|j                  ‰¬«      }|j                  d¬«      j                  «       }|| k7  r"|} t	        j
                  d|dœ«      }d	|› d
�–— |dz  }|dz  dk(  rd–— t        j                  d«       Œ£# t        $ r Y y t        $ r Y y w xY w­w)Néÿÿÿÿr   rx   rÞ   rß   r	   ri   )Útyperß   zdata: z

rë   rÿ   z: ping

r·   )
r   r   r   rX   ÚjsonÚdumpsÚtimeÚsleepÚGeneratorExitrš   )Úlast_pendingÚ
tick_countrã   rß   ro   rï   r   r   s        €€€r#   Úevent_streamzmail_sse.<locals>.event_streamõ  sØ   øè ø€ ØˆØˆ
ØðÜ&×.Ñ.×5Ñ5¸VÐ5ÓD�ÙØ%Ÿn™n¸˜nÓ>�GØ!Ÿ.™.°	˜.Ó:×@Ñ@ÓB�à˜lÒ*Ø#*�LÜ"Ÿj™j°(ÀwÑ)OÓP�GØ" 7 )¨4Ð0Ò0ð ˜a‘�
Ø ‘> QÒ&Ø&Ò&ä—
‘
˜2”ð# øô$ !ò ÙÜò Ùðüs5   ƒCŠB!B, Â+CÂ,	CÂ5CÂ7CÂ?CÃCÃCztext/event-stream©r]   zno-cachezCache-ControlÚnozX-Accel-Bufferingz
keep-aliveÚ
Connection)Úrest_framework_simplejwt.tokensrT  Ú#rest_framework_simplejwt.exceptionsrU  Údjango.httprV  rr   r~   ro   r   r   rš   r   r   r   r   r   r!   r   r/   r   )r…   rT  rU  rV  Ú	token_strÚ	validatedr  r-   rd  Úresponserï   r   r   s             @@@r#   Úmail_ssern  Ø  s3  ú€ õ =Ý>Ý(à—‘—‘ ¨Ó,€Ið8Ù  Ó+ˆ	Ø×#Ñ#×'Ñ'¨	Ó2ˆÜÓ×'Ñ'×+Ñ+¨wÀ$Ð+ÓGˆô ×#Ñ#×*Ñ*Øœ*×+Ñ+×2Ñ2ð +ó ç�n�XÓŸu™u›wð ñ ˜Z×.Ò.Ù˜K°Ô4Ð4à×Ñ€FÜ 
Ó+€Höô4 %¡\£^ÐBUÔV€HØ *€Hˆ_ÑØ$(€HÐ Ñ!Ø)€Hˆ\ÑØ€OøðU œ	Ð"ò 8Ù˜N°3Ô7Ò7ð8ús   ³AD* Ä*EÅEc                 ó  — t         j                  j                  | j                  t         j                  j
                  ¬«      j                  d«      j                  «       }|st        ddid¬«      S 	 t        j                  j                  d«      j                  |¬«      }|j                  j                  |j                  k7  rt        ddid¬«      S |j                  r|j                  j                   st        dd	id
¬«      S 	 |j                  j#                  d«      }t)        j*                  |j,                  xs |j                  j                   «      \  }}|xs d}t/        ||¬«      }|j,                  xs3 t0        j2                  j5                  |j                  j                   «      j7                  dd«      }d|› d�|d<   |S # t        j                  $ r t        ‚w xY w# t$        t&        f$ r t        ddid
¬«      cY S w xY w)u‚   
    Sert la piÃ¨ce jointe uniquement si l'utilisateur appartient au mÃªme tenant
    que le mail auquel elle est rattachÃ©e.
    r   r   ru   u   AccÃ¨s refusÃ©.rÝ   r	   Úmail__tenant)r'   zFichier introuvable.r¥   Úrbz#Fichier introuvable sur le serveur.zapplication/octet-streamre  ú"rI   zattachment; filename="zContent-Disposition)r   r   r   r   r   r   r   r!   r   r   r~   r   r   rY   r¨   rn   rK   ÚopenÚFileNotFoundErrorÚOSErrorÚ	mimetypesÚ
guess_typer\   r   ÚosÚpathÚbasenameÚreplace)	r…   Úattachment_idr†   ÚattÚfile_handler]   r‡   rm  r\   s	            r#   Úmail_attachment_downloadr    sÁ  € ô × Ñ ×'Ñ'Ø�\‰\¤*×"3Ñ"3×":Ñ":ð (ó ç�n�XÓŸu™u›wð ñ Ü˜Ð#4Ð5¸cÔBÐBðÜ×$Ñ$×3Ñ3°NÓC×GÑGÈ=ÐGÓYˆð ‡x�x×Ñ˜W×.Ñ.Ò.Ü˜Ð#4Ð5¸cÔBÐBà�8Š8˜3Ÿ8™8Ÿ=š=Ü˜Ð#9Ð:À3ÔGÐGðWØ—h‘h—m‘m DÓ)ˆô  ×*Ñ*¨3¯<©<Ò+H¸3¿8¹8¿=¹=ÓI�O€L�!ØÒ=Ð#=€Lä˜K°lÔC€HØ—‘Ò?¤§¡× 0Ñ 0°·±·±Ó ?×HÑHÈÈbÓQ€HØ(>¸x¸jÈÐ&J€HÐ"Ñ#Ø€Oøô) ×&Ñ&ò Üˆðûô œwÐ'ò WÜ˜Ð#HÐIÐRUÔVÒVðWús   Á3/G
 ÄG' Ç
G$Ç'HÈH)DÚ__doc__r‘   r]  Úloggingrv  rx  r˜   r	  r_  Údjango.contrib.authr   rj  r   r   r   Údjango.utilsr   Údjango.views.decorators.httpr   Ú	getLoggerÚ__name__r8  Úrest_frameworkr
   Úrest_framework.decoratorsr   r   Úrest_framework.permissionsr   Úrest_framework.responser   Úaccounts.modelsr   r   r   r   r   r   ÚUserr$   r/   r>   rG   rZ   rq   rˆ   r£   r«   r¿   rƒ   r»   rÏ   rÙ   rÛ   rä   rø   rý   r  r  r  r  r  r  r#  r-  r  rn  r  © r%   r#   ú<module>rŽ     sN  ðñó& Û Û Û Û 	Û Û Û å .ß DÑ DÝ !Ý 2à	ˆ×	Ñ	˜8Ó	$€Ý !ß BÝ 6Ý ,÷÷ ñ
 Ó€ò:òCòò 
òò,ñH 
ˆ5�%ˆ.ÓÙ�_Ð%Ó&ñ"/ó 'ó ð"/ñJ 
ˆ6ˆ(ÓÙ�_Ð%Ó&ñ-Kó 'ó ð-Kñ` 
ˆ6ˆ(ÓÙ�_Ð%Ó&ñKó 'ó ðKñ4 
ˆ5ˆ'ÓÙ�_Ð%Ó&ñBó 'ó ðBðJ,˜˜d™
ó ,ñ 
ˆ5�&ˆ/ÓÙ�_Ð%Ó&ñ6ó 'ó ð6ñ@ 
ˆ7�HÐ
ÓÙ�_Ð%Ó&ð*¨3ò *ó 'ó ð*ñB 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð*¨3ò *ó 'ó ð*ñ* 
ˆ5ˆ'ÓÙ�_Ð%Ó&ñó 'ó ðñ, 
ˆ5ˆ'ÓÙ�_Ð%Ó&ñAó 'ó ðAñH 
ˆ5ˆ'ÓÙ�_Ð%Ó&ð0¨ò 0ó 'ó ð0ñ$ 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð,0 Cò ,0ó 'ó ð,0ñ^ 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð. #ò .ó 'ó ð.ñ" 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð. 3ò .ó 'ó ð.ñ, 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð.¨#ò .ó 'ó ð.ñ* 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð0¨ò 0ó 'ó ð0ñ8 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð0 #ò 0ó 'ó ð0ñ: 
ˆ6ˆ(ÓÙ�_Ð%Ó&ð-0 Cò -0ó 'ó ð-0ñh 
ˆ5ˆ'ÓÙ�_Ð%Ó&ñó 'ó ðð>Za˜<ó Zañ~ �TÔñ:ó ð:ñ~ 
ˆ5ˆ'ÓÙ�_Ð%Ó&ñ!ó 'ó ñ!r%   