Ë
    
.ÚiµR  ã                   ó–  — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlm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«       Zd„ Z G d„ de	«      Z G d„ de	«      Zd$dedefd„Z G d„ de	«      Z G d„ de	«      Z  G d„ de	«      Z!d dl"m#Z#m$Z$ d dlm%Z%m&Z&  G d„ de	«      Z' G d„ de	«      Z(d d lm%Z%m)Z)  G d!„ d"e	«      Z*y#)%é    )Úsettings)Úget_user_model)Ú	send_mail)Útransaction)ÚAPIView)ÚIsAuthenticated)ÚResponse©Ústatus)ÚPermissionDeniedÚNotFoundÚValidationError)ÚCustomerMembership)ÚDebtorc                 óÌ  — t         j                  j                  ddd«      j                  | j                  ¬«      j                  d«      j                  «       }|st        d«      ‚|j                  }|st        d«      ‚t        |d«      r|j                  st        d	«      ‚t        |d
«      r|j                  dv rt        d«      ‚t        |dd«      }|st        d«      ‚|||fS )uˆ   
    Contexte Client Portal basÃ© sur CustomerMembership (comme CustomerPortalMeView).
    Retourne: (membership, customer, tenant)
    ÚcustomerÚuserÚcustomer__tenant)r   ú-idz,No active customer membership for this user.z"Customer not found for membership.Úportal_enabledzCustomer portal is not enabled.r   )Ú	suspendedÚdisabledzAccount is suspended.ÚtenantNz"No tenant found for this customer.)r   ÚobjectsÚselect_relatedÚfilterr   Úorder_byÚfirstr   r   Úhasattrr   r   Úgetattr)ÚrequestÚ
membershipr   r   s       ú0/var/www/html/acx/cases/views_customer_portal.pyÚ_cp_contextr$      sÝ   € ô 	×"Ñ"ß	‰˜
 FÐ,>Ó	?ß	‰�W—\‘\ˆÓ	"ß	‰�%‹ß	‰‹ð ñ ÜÐMÓNÐNà×"Ñ"€HÙÜÐCÓDÐDô ˆxÐ)Ô*°8×3JÒ3JÜÐ@ÓAÐAô ˆz˜8Ô$¨×):Ñ):Ð>WÑ)WÜÐ6Ó7Ð7ä�X˜x¨Ó.€FÙÜÐCÓDÐDà�x Ð'Ð'ó    c                   ó"   — e Zd ZdZegZd„ Zd„ Zy)ÚCustomerPortalDebtorsViewzM
    GET /customer-portal/debtors/?q=
    POST /customer-portal/debtors/
    c                 óp  — t        |«      \  }}}t        j                  j                  |d|¬«      }|j                  j                  d«      xs dj                  «       }|r|j                  |¬«      }|j                  d«      }|D �cg c]‰  }|j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  dœ‘Œ‹ }}t)        |t*        j,                  ¬«      S c c}w )	NÚcustomer_portal)r   Úcreated_viaÚsource_customerÚqÚ )Úfull_name__icontainsÚ	full_name©ÚidÚtyper/   Únational_idÚtax_idÚphoneÚemailÚaddressÚcityÚcountryÚmetadataÚ
created_atr
   )r$   r   r   r   Úquery_paramsÚgetÚstripr   r1   r2   r/   r3   r4   r5   r6   r7   r8   r9   r:   r;   r	   r   ÚHTTP_200_OK)	Úselfr!   Ú_r   r   Úqsr,   ÚdÚdatas	            r#   r=   zCustomerPortalDebtorsView.get;   s  € Ü)¨'Ó2Ñˆˆ8�Vä�^‰^×"Ñ"ØØ)Ø$ð #ó 
ˆð ×!Ñ!×%Ñ% cÓ*Ò0¨b×7Ñ7Ó9ˆÙØ—‘°�Ó2ˆBà�[‰[˜Ó%ˆð" ö
ð ð —d‘dØŸ™ØŸ[™[Ø Ÿ}™}ØŸ(™(ØŸ™ØŸ™ØŸ9™9ØŸ™ØŸ9™9ØŸJ™JØŸl™lóð
ˆð 
ô" ˜¤V×%7Ñ%7Ô8Ð8ùò#
s   ÂBD3c                 ó¸  — t        |«      \  }}}|j                  xs i }|j                  d«      xs dj                  «       }|st	        ddi«      ‚|j                  d«      xs d}|dvrt	        ddi«      ‚t
        j                  j                  ||||j                  d«      xs d |j                  d	«      xs d |j                  d
«      xs d |j                  d«      xs d |j                  d«      xs d |j                  d«      xs d |j                  d«      xs d |j                  d«      xs d d|¬«      }t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  dœt*        j,                  ¬«      S )Nr/   r-   úThis field is required.r2   Ú
individual©rG   ÚcompanyúInvalid type.r3   r4   r5   r6   r7   r8   r9   r:   r)   )r   r2   r/   r3   r4   r5   r6   r7   r8   r9   r:   r*   r+   r0   r
   )r$   rD   r=   r>   r   r   r   Úcreater	   r1   r2   r/   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   ÚHTTP_201_CREATED)	r@   r!   rA   r   r   Úpayloadr/   Údebtor_typerC   s	            r#   ÚpostzCustomerPortalDebtorsView.post]   s   € Ü)¨'Ó2Ñˆˆ8�VØ—,‘,Ò$ "ˆà—[‘[ Ó-Ò3°×:Ñ:Ó<ˆ	ÙÜ! ;Ð0IÐ"JÓKÐKà—k‘k &Ó)Ò9¨\ˆØÐ7Ñ7Ü! 6¨?Ð";Ó<Ð<ä�N‰N×!Ñ!ØØØØ Ÿ™ ]Ó3Ò;°tØ—K‘K Ó)Ò1¨TØ—;‘;˜wÓ'Ò/¨4Ø—;‘;˜wÓ'Ò/¨4Ø—[‘[ Ó+Ò3¨tØ—+‘+˜fÓ%Ò-¨Ø—[‘[ Ó+Ò3¨tØ—k‘k *Ó-Ò5°Ø)Ø$ð "ó 
ˆô  à—d‘dØŸ™ØŸ[™[Ø Ÿ}™}ØŸ(™(ØŸ™ØŸ™ØŸ9™9ØŸ™ØŸ9™9ØŸJ™JØŸl™lñô ×*Ñ*ô
ð 	
r%   N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpermission_classesr=   rO   © r%   r#   r'   r'   4   s   „ ñð *Ð*Ðò 9óD,
r%   r'   c                   ó:   — e Zd ZdZegZdefd„Zdefd„Zdefd„Z	y)ÚCustomerPortalDebtorDetailViewzX
    PATCH /customer-portal/debtors/<id>/
    DELETE /customer-portal/debtors/<id>/
    Ú	debtor_idc                 ó    — t        |«      \  }}}t        j                  j                  ||d|¬«      j	                  «       }|st        d«      ‚|S )Nr)   )r1   r   r*   r+   zDebtor not found.)r$   r   r   r   r   r   )r@   r!   rY   rA   r   r   rC   s          r#   Ú_get_objectz*CustomerPortalDebtorDetailView._get_object“   sZ   € Ü)¨'Ó2Ñˆˆ8�VÜ�N‰N×!Ñ!ØØØ)Ø$ð	 "ó 
÷
 ‰%‹'ð 	
ñ ÜÐ.Ó/Ð/Øˆr%   c                 óŠ  — | j                  ||«      }|j                  xs i }dD ]'  }||v sŒt        |||j                  |«      xs d «       Œ) |j                  xs dj                  «       st        ddi«      ‚|j                  dvrt        ddi«      ‚|j                  «        t        |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  dœt(        j*                  ¬	«      S )
N)
r2   r/   r3   r4   r5   r6   r7   r8   r9   r:   r-   r/   rF   rH   r2   rJ   r0   r
   )r[   rD   Úsetattrr=   r/   r>   r   r2   Úsaver	   r1   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r?   )r@   r!   rY   rC   rM   Úfs         r#   Úpatchz$CustomerPortalDebtorDetailView.patchŸ   s  € Ø×Ñ˜W iÓ0ˆØ—,‘,Ò$ "ˆð |ò 	6ˆAØ�GŠ|Ü˜˜1˜gŸk™k¨!›nÒ4°Õ5ð	6ð —‘Ò!˜r×(Ñ(Ô*Ü! ;Ð0IÐ"JÓKÐKà�6‰6Ð2Ñ2Ü! 6¨?Ð";Ó<Ð<à	�‰Œäà—d‘dØŸ™ØŸ[™[Ø Ÿ}™}ØŸ(™(ØŸ™ØŸ™ØŸ9™9ØŸ™ØŸ9™9ØŸJ™JØŸl™lñô ×%Ñ%ô
ð 	
r%   c                 óz   — | j                  ||«      }|j                  «        t        t        j                  ¬«      S ©Nr
   )r[   Údeleter	   r   ÚHTTP_204_NO_CONTENT)r@   r!   rY   rC   s       r#   rc   z%CustomerPortalDebtorDetailView.deleteÂ   s.   € Ø×Ñ˜W iÓ0ˆØ	�‰Œ
Üœv×9Ñ9Ô:Ð:r%   N)
rQ   rR   rS   rT   r   rU   Úintr[   r`   rc   rV   r%   r#   rX   rX   Œ   s7   „ ñð *Ð*Ðð
¨có 
ð!
¨ó !
ðF;¨ô ;r%   rX   ÚlengthÚreturnc                 óZ   ‡‡— dd l ŠdŠdj                  ˆˆfd„t        | «      D «       «      S )Nr   Ú6abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789r-   c              3   ó@   •K  — | ]  }‰j                  ‰«      –— Œ y ­w)N)Úchoice)Ú.0rA   ÚalphabetÚsecretss     €€r#   ú	<genexpr>z*_generate_temp_password.<locals>.<genexpr>Ë   s   øè ø€ ÒC°�7—>‘> (×+ÑCùs   ƒ)rn   ÚjoinÚrange)rf   rm   rn   s    @@r#   Ú_generate_temp_passwordrr   È   s$   ù€ ÛØG€HØ�7‰7ÔC´U¸6³]ÔCÓCÐCr%   c                   ó"   — e Zd ZdZegZd„ Zd„ Zy)ÚCustomerPortalUsersViewu®   
    GET /customer-portal/users/         -> liste des users du customer courant
    POST /customer-portal/users/        -> crÃ©e un user + membership du customer courant
    c                 óÐ  — t        |«      \  }}}|j                  j                  d«      j                  «       j	                  d«      }g }|D ]~  }|j
                  }|j                  |j                  |j                  t        |dd «      t        |dd «      t        |dd «      t        |dd «      t        |dd «      t        |dd	«      d
œ«       Œ€ t        |t        j                  ¬«      S )Nr   r   Ú
first_nameÚ	last_namer6   Úroler   Úis_primary_contactF©r1   Úusernamerv   rw   r6   rx   r   ry   r
   )r$   Úmembershipsr   Úallr   r   Úappendr1   r{   r    r	   r   r?   ©r@   r!   rA   r   rB   rD   ÚmÚus           r#   r=   zCustomerPortalUsersView.getÕ   sÖ   € Ü$ WÓ-‰ˆˆ8�QØ×!Ñ!×0Ñ0°Ó8×<Ñ<Ó>×GÑGÈÓNˆàˆØò 	ˆAØ—‘ˆAØ�K‰KØ—d‘dØŸJ™JÜ% a¨°tÓ<Ü$ Q¨°TÓ:Ü   G¨TÓ2Ü  6¨4Ó0Ü! ! X¨tÓ4Ü&-¨aÐ1EÀuÓ&Mñ	õ 	ð	ô ˜¤V×%7Ñ%7Ô8Ð8r%   c                 ó  — t        |«      \  }}}t        |dd «      dvrt        d«      ‚|j                  xs i }|j	                  d«      xs dj                  «       }|j	                  d«      xs dj                  «       xs d }|j	                  d«      xs dj                  «       xs d}|j	                  d«      xs dj                  «       xs d}	|j	                  d«      xs d	}
|st        dd
i«      ‚t        j                  j                  |¬«      j                  «       rt        ddi«      ‚|r;t        j                  j                  |¬«      j                  «       rt        ddi«      ‚t        d«      }t        j                  «       5  t        j                  j                  ||xs d||	d¬«      }|j                  |«       d|_        |j#                  ddg¬«       t$        j                  j                  |||
dd¬«      }d d d «       |rut        t&        dd«      xs d}d}d|xs |› d�dd|j(                  › �d|rd|› �ndd|› �d |› �dd!dd"g}t+        |d#j-                  |«      t        t&        d$d «      |gd¬%«       t/        j0                  |j2                  |j4                  |j6                  |j8                  xs d j:                  |j<                  |j>                  |s|nd d&œ	t<        j@                  ¬'«      S # 1 sw Y   ŒýxY w)(Nrx   ©ÚownerÚmanagerúNot allowed.r{   r-   r6   rv   rw   ÚviewerrF   )Úusername__iexactzThis username is already used.)Úemail__iexactzThis email is already used.é   T)r{   r6   rv   rw   Ú	is_activeÚpasswordÚmust_change_password©Úupdate_fieldsÚactiveF)r   r   rx   r   ry   Ú FRONTEND_CLIENT_PORTAL_LOGIN_URLzACX - Client Portal accesszHello ú,z.You have been added to the Client Portal for: zLogin URL: zLogin URL: (not configured)z
Username: zTemporary password: z-Please change your password after logging in.ÚACXÚ
ÚDEFAULT_FROM_EMAIL)ÚsubjectÚmessageÚ
from_emailÚrecipient_listÚfail_silently)	r1   r{   rv   rw   r6   rx   r   ry   Útemporary_passwordr
   )!r$   r    r   rD   r=   r>   r   ÚUserr   r   Úexistsrr   r   ÚatomicrK   Úset_passwordr�   r^   r   r   Únamer   rp   r	   r1   r{   rv   rw   r6   rx   r   ry   rL   )r@   r!   Úactor_membershipr   rA   rM   r{   r6   rv   rw   rx   Útemp_passwordr�   r€   Ú	login_urlr–   Úliness                    r#   rO   zCustomerPortalUsersView.posté   s  € Ü(3°GÓ(<Ñ%Ð˜( Aô Ð# V¨TÓ2Ð:NÑNÜ" >Ó2Ð2à—,‘,Ò$ "ˆØ—K‘K 
Ó+Ò1¨r×8Ñ8Ó:ˆØ—‘˜WÓ%Ò+¨×2Ñ2Ó4Ò<¸ˆØ—k‘k ,Ó/Ò5°2×<Ñ<Ó>ÒDÀ"ˆ
Ø—[‘[ Ó-Ò3°×:Ñ:Ó<ÒBÀˆ	Ø�{‰{˜6Ó"Ò. hˆáÜ! :Ð/HÐ"IÓJÐJä�<‰<×Ñ°ÐÓ9×@Ñ@ÔBÜ! :Ð/OÐ"PÓQÐQá”T—\‘\×(Ñ(°uÐ(Ó=×DÑDÔFÜ! 7Ð,IÐ"JÓKÐKä/°Ó3ˆä×ÑÓ!ñ 	Ü—‘×#Ñ#Ø!Ø’k˜rØ%Ø#Øð $ó ˆAð �N‰N˜=Ô)Ø%)ˆAÔ"Ø�F‰F *Ð.DÐ!EˆFÔFô #×*Ñ*×1Ñ1Ø!ØØØØ#(ð 2ó ˆA÷	ñ. Ü¤Ð*LÈbÓQÒWÐUWˆIØ2ˆGà˜Ò/ xÐ0°Ð2ØØ@ÀÇÁÀÐPØÙ-6�+˜i˜[Ñ)Ð<YØ˜X˜JÐ'Ø& } oÐ6ØØ?ØØðˆEô ØØŸ	™	 %Ó(Ü"¤8Ð-AÀ4ÓHØ %˜wØ#õô à—d‘dØŸJ™JØŸl™lØŸ[™[ØŸ™š DØŸ™ØŸ(™(Ø&'×&:Ñ&:á;@¡mÀdñô ×*Ñ*ô
ð 	
÷_	ð 	ús   ÆA9LÌLNrP   rV   r%   r#   rt   rt   Î   s   „ ñð *Ð*Ðò9ó(V
r%   rt   c                   ó"   — e Zd ZdZegZdefd„Zy)ÚCustomerPortalUserUpdateViewut   
    PATCH /customer-portal/users/<user_id>/
    -> update role/status/is_active pour un user du mÃªme customer
    Úuser_idc                 óx  — t        |«      \  }}}t        |dd «      dvrt        d«      ‚|j                  j	                  d«      j                  |¬«      j                  «       }|st        d«      ‚|j                  xs i }d|v r$|j                  d«      xs |j                  |_
        d|v r$|j                  d«      xs |j                  |_        d|v rt        |j                  d«      «      |_        |j                  «        |j                  }d	|v r2t        |j                  d	«      «      |_        |j                  d	g¬
«       t#        |j$                  |j&                  t        |dd «      t        |dd «      t        |dd «      |j                  |j                  |j                  dœt        j(                  ¬«      S )Nrx   rƒ   r†   r   )r§   z!User not found for this customer.r   ry   r‹   rŽ   rv   rw   r6   rz   r
   )r$   r    r   r|   r   r   r   r   rD   r=   rx   r   Úboolry   r^   r   r‹   r	   r1   r{   r?   )	r@   r!   r§   r¡   r   rA   r€   rM   r�   s	            r#   r`   z"CustomerPortalUserUpdateView.patchI  s„  € Ü(3°GÓ(<Ñ%Ð˜( AäÐ# V¨TÓ2Ð:NÑNÜ" >Ó2Ð2à× Ñ ×/Ñ/°Ó7×>Ñ>ÀwÐ>ÓO×UÑUÓWˆÙÜÐ>Ó?Ð?à—,‘,Ò$ "ˆð �WÑØ—[‘[ Ó(Ò2¨A¯F©FˆAŒFØ�wÑØ—{‘{ 8Ó,Ò8°·±ˆAŒHØ 7Ñ*Ü#'¨¯©Ð4HÓ(IÓ#JˆAÔ à	�‰Œà�F‰Fˆà˜'Ñ!Ü˜wŸ{™{¨;Ó7Ó8ˆAŒKØ�F‰F + ˆFÔ/äà—d‘dØŸJ™JÜ% a¨°tÓ<Ü$ Q¨°TÓ:Ü   G¨TÓ2ØŸ™ØŸ(™(Ø&'×&:Ñ&:ñ	ô ×%Ñ%ô
ð 	
r%   N)rQ   rR   rS   rT   r   rU   re   r`   rV   r%   r#   r¦   r¦   B  s   „ ñð *Ð*Ðð(
 cô (
r%   r¦   c                   ó   — e Zd ZdZegZd„ Zy)ÚCustomerPortalAssigneesViewz}
    GET /customer-portal/assignees/
    -> liste des users actifs du customer courant (pour l'assignation des dossiers)
    c                 ó  — t        |«      \  }}}|j                  j                  d«      j                  «       j	                  d«      }g }|D ]œ  }|j
                  }t        |dd «      dk7  rŒ t        |d«      r|j                  sŒ9|j                  |j                  |j                  t        |dd «      t        |dd «      t        |dd «      t        |d	d «      t        |dd «      d
œ«       Œž t        |t        j                  ¬«      S )Nr   Úuser__usernamer   r�   r‹   rv   rw   r6   rx   )r1   r{   rv   rw   r6   rx   r   r
   )r$   r|   r   r}   r   r   r    r   r‹   r~   r1   r{   r	   r   r?   r   s           r#   r=   zCustomerPortalAssigneesView.get{  sñ   € Ü$ WÓ-‰ˆˆ8�Qà×!Ñ!×0Ñ0°Ó8×<Ñ<Ó>×GÑGÐHXÓYˆàˆØò 	ˆAØ—‘ˆAä�q˜( DÓ)¨XÒ5ØÜ�q˜+Ô&¨q¯{ª{Øà�K‰KØ—d‘dØŸJ™JÜ% a¨°tÓ<Ü$ Q¨°TÓ:Ü   G¨TÓ2Ü  6¨4Ó0Ü! ! X¨tÓ4ñõ ð	ô$ ˜¤V×%7Ñ%7Ô8Ð8r%   N)rQ   rR   rS   rT   r   rU   r=   rV   r%   r#   r«   r«   t  s   „ ñð *Ð*Ðó9r%   r«   )ÚMultiPartParserÚ
FormParser)ÚCaseÚCaseDocumentc                   óB   — e Zd ZdZegZeegZde	fd„Z
de	fd„Zde	fd„Zy)ÚCustomerPortalCaseDocumentsViewz™
    GET  /customer-portal/cases/<case_id>/documents/  -> liste docs
    POST /customer-portal/cases/<case_id>/documents/  -> upload doc (multipart)
    Úcase_idc                 ó¢   — t        |«      \  }}}t        j                  j                  |||¬«      j	                  «       }|st        d«      ‚||fS ©N©r1   r   r   úCase not found.©r$   r°   r   r   r   r   )r@   r!   r´   r"   r   r   Úcs          r#   Ú	_get_casez)CustomerPortalCaseDocumentsView._get_case¢  sP   € Ü'2°7Ó';Ñ$ˆ
�H˜fÜ�L‰L×Ñ 7°6ÀHÐÓM×SÑSÓUˆÙÜÐ,Ó-Ð-Ø�(ˆ{Ðr%   c                 óÞ  — | j                  ||«      \  }}t        j                  j                  ||¬«      j	                  d«      }g }|D ]‡  }|j                  |j                  |j                  |j                  |j                  r|j                  j                  nd |j                  |j                  rt        |j                  dd «      nd dœ«       Œ‰ t        |t        j                   ¬«      S )N)Úcaser   r   r{   ©r1   ÚtitleÚdoc_typeÚfiler;   Úuploaded_byr
   )r»   r±   r   r   r   r~   r1   r¿   rÀ   rÁ   Úurlr;   rÂ   r    r	   r   r?   )r@   r!   r´   r½   r   rB   rD   rC   s           r#   r=   z#CustomerPortalCaseDocumentsView.get©  s¿   € ØŸ™¨°Ó9‰ˆˆhä×!Ñ!×(Ñ(¨d¸XÐ(ÓF×OÑOÐPUÓVˆØˆØò 	ˆAØ�K‰KØ—d‘dØŸ™ØŸJ™JØ&'§f¢f˜Ÿ™Ÿ
š
°$ØŸl™lØKLÏ=Ê=œw q§}¡}°jÀ$ÔGÐ^bñõ ð	ô ˜¤V×%7Ñ%7Ô8Ð8r%   c                 óÐ  — | j                  ||«      \  }}|j                  j                  d«      xs dj                  «       }|j                  j                  d«      xs d}|j                  j                  d«      }|st        ddi«      ‚|st        ddi«      ‚t        j                  j                  |||j                  |||¬«      }t        |j                  |j                  |j                  |j                  r%|j                  |j                  j                   «      nd |j"                  |j$                  rt'        |j$                  d	d «      nd d
œt(        j*                  ¬«      S )Nr¿   r-   rÀ   ÚotherrÁ   rF   zFile is required.)r   r½   rÂ   r¿   rÀ   rÁ   r{   r¾   r
   )r»   rD   r=   r>   ÚFILESr   r±   r   rK   r   r	   r1   r¿   rÀ   rÁ   Úbuild_absolute_urirÃ   r;   rÂ   r    r   rL   )	r@   r!   r´   r½   r   r¿   rÀ   r_   rC   s	            r#   rO   z$CustomerPortalCaseDocumentsView.post¹  s0  € ØŸ™¨°Ó9‰ˆˆhà—‘×!Ñ! 'Ó*Ò0¨b×7Ñ7Ó9ˆØ—<‘<×#Ñ# JÓ/Ò:°7ˆØ�M‰M×Ñ˜fÓ%ˆáÜ! 7Ð,EÐ"FÓGÐGÙÜ! 6Ð+>Ð"?Ó@Ð@ä× Ñ ×'Ñ'ØØØŸ™ØØØð (ó 
ˆô à—d‘dØŸ™ØŸJ™JØBCÇ&Â&˜×2Ñ2°1·6±6·:±:Ô>ÈdØŸl™lØKLÏ=Ê=œw q§}¡}°jÀ$ÔGÐ^bñô ×*Ñ*ô

ð 
	
r%   N)rQ   rR   rS   rT   r   rU   r®   r¯   Úparser_classesre   r»   r=   rO   rV   r%   r#   r³   r³   š  s@   „ ñð *Ð*ÐØ% zÐ2€Nð¨#ó ð9 Có 9ð 
 Sô 
r%   r³   c                   óN   — e Zd ZdZegZeegZde	de	fd„Z
de	de	fd„Zde	de	fd„Zy)Ú$CustomerPortalCaseDocumentDetailViewzá
    PATCH  /customer-portal/cases/<case_id>/documents/<doc_id>/
      - multipart/form-data
      - fields optionnels: title, doc_type, file (remplacement)
    DELETE /customer-portal/cases/<case_id>/documents/<doc_id>/
    r´   Údoc_idc                 ó  — t        |«      \  }}}t        j                  j                  |||¬«      j	                  «       }|st        d«      ‚t        j                  j                  |||¬«      j	                  «       }|st        d«      ‚|||fS )Nr·   r¸   )r1   r½   r   zDocument not found.)r$   r°   r   r   r   r   r±   )	r@   r!   r´   rË   r"   r   r   r½   Údocs	            r#   Ú_get_case_and_docz6CustomerPortalCaseDocumentDetailView._get_case_and_docæ  sˆ   € ä'2°7Ó';Ñ$ˆ
�H˜fä�|‰|×"Ñ" g°fÀxÐ"ÓP×VÑVÓXˆÙÜÐ,Ó-Ð-ä×"Ñ"×)Ñ)¨V¸$ÈÐ)ÓR×XÑXÓZˆÙÜÐ0Ó1Ð1à�X˜sÐ"Ð"r%   c                 óØ  — | j                  |||«      \  }}}|j                  j                  d«      }|j                  j                  d«      }|j                  j                  d«      }	|€|€|	€t	        ddi«      ‚|�*|xs dj                  «       }|st	        ddi«      ‚||_        |�|xs d|_        |	�|	|_        |j                  «        t        |j                  |j                  |j                  |j                  r%|j                  |j                  j                  «      nd |j                  |j                  rt!        |j                  d	d «      nd d
œt"        j$                  ¬«      S )Nr¿   rÀ   rÁ   ÚdetailzNo fields provided.r-   rF   rÅ   r{   r¾   r
   )rÎ   rD   r=   rÆ   r   r>   r¿   rÀ   rÁ   r^   r	   r1   rÇ   rÃ   r;   rÂ   r    r   r?   )
r@   r!   r´   rË   r½   r   rÍ   r¿   rÀ   r_   s
             r#   r`   z*CustomerPortalCaseDocumentDetailView.patchô  sE  € Ø"×4Ñ4°W¸gÀvÓNÑˆˆh˜à—‘× Ñ  Ó)ˆØ—<‘<×#Ñ# JÓ/ˆØ�M‰M×Ñ˜fÓ%ˆð ˆ=˜XÐ-°!°)Ü! 8Ð-BÐ"CÓDÐDàÐØ’[˜b×'Ñ'Ó)ˆEÙÜ% wÐ0IÐ&JÓKÐKØˆCŒIàÐØ$Ò/¨ˆCŒLàˆ=àˆCŒHà�‰Œ
äà—f‘fØŸ™ØŸL™LØDGÇHÂH˜×2Ñ2°3·8±8·<±<Ô@ÐRVØ!Ÿn™nØMPÏ_Ê_œw s§¡¸
ÀDÔIÐbfñô ×%Ñ%ô

ð 
	
r%   c                 ó„   — | j                  |||«      \  }}}|j                  «        t        t        j                  ¬«      S rb   )rÎ   rc   r	   r   rd   )r@   r!   r´   rË   r½   r   rÍ   s          r#   rc   z+CustomerPortalCaseDocumentDetailView.delete  s7   € Ø"×4Ñ4°W¸gÀvÓNÑˆˆh˜Ø�
‰
ŒÜœv×9Ñ9Ô:Ð:r%   N)rQ   rR   rS   rT   r   rU   r®   r¯   rÈ   re   rÎ   r`   rc   rV   r%   r#   rÊ   rÊ   Ü  sV   „ ñð *Ð*ÐØ% zÐ2€Nð#°#ð #¸só #ð$
 cð $
°3ó $
ðL; sð ;°Cô ;r%   rÊ   )r°   ÚCaseNotec                   ó^   — e Zd ZdZegZdefd„Zdedefd„Z	de
fd„Zdedefd	„Zdedefd
„Zy)Ú CustomerPortalCaseNoteDetailViewz
    PATCH  /customer-portal/cases/<case_id>/notes/<note_id>/
    DELETE /customer-portal/cases/<case_id>/notes/<note_id>/
    r´   c                 ó¦   — t        |«      \  }}}t        j                  j                  |||¬«      j	                  «       }|st        d«      ‚||||fS r¶   r¹   )r@   r!   r´   r"   r   r   r½   s          r#   r»   z*CustomerPortalCaseNoteDetailView._get_case(  sU   € Ü'2°7Ó';Ñ$ˆ
�H˜fÜ�|‰|×"Ñ" g°fÀxÐ"ÓP×VÑVÓXˆÙÜÐ,Ó-Ð-Ø˜8 V¨TÐ1Ð1r%   r½   Únote_idc                 óœ   — t         j                  j                  d«      j                  ||¬«      j	                  «       }|st        d«      ‚|S )NÚauthor)r1   r½   zNote not found.)rÒ   r   r   r   r   r   )r@   r½   rÖ   Únotes       r#   Ú	_get_notez*CustomerPortalCaseNoteDetailView._get_note/  sF   € Ü×Ñ×.Ñ.¨xÓ8×?Ñ?À7ÐQUÐ?ÓV×\Ñ\Ó^ˆÙÜÐ,Ó-Ð-Øˆr%   rÙ   c                 óX   — |j                   |j                  k(  ryt        |dd «      }|dv S )NTrx   rƒ   )Ú	author_idr1   r    )r@   r"   rÙ   r   rx   s        r#   Ú_can_managez,CustomerPortalCaseNoteDetailView._can_manage5  s/   € à�>‰>˜TŸW™WÒ$Øä�z 6¨4Ó0ˆØÐ+Ð+Ð+r%   c                 ó,  — | j                  ||«      \  }}}}| j                  ||«      }| j                  |||j                  «      st	        d«      ‚|j
                  j                  d«      xs dj                  «       }	|	st        ddi«      ‚|	|_	        |j                  dg¬«       t        |j                  |j                  |j                  j                  «       |j                  r|j                  j                   nd dœt"        j$                  ¬«      S )Nr†   Úbodyr-   rF   rŽ   )r1   rß   r;   Úauthor_usernamer
   )r»   rÚ   rÝ   r   r   rD   r=   r>   r   rß   r^   r	   r1   r;   Ú	isoformatrØ   r{   r   r?   )
r@   r!   r´   rÖ   r"   r   r   r½   rÙ   rß   s
             r#   r`   z&CustomerPortalCaseNoteDetailView.patch=  sé   € Ø-1¯^©^¸GÀWÓ-MÑ*ˆ
�H˜f dØ�~‰~˜d GÓ,ˆà×Ñ 
¨D°'·,±,Ô?Ü" >Ó2Ð2à—‘× Ñ  Ó(Ò.¨B×5Ñ5Ó7ˆÙÜ! 6Ð+DÐ"EÓFÐFàˆŒ	Ø�	‰	  ˆ	Ô)äà—g‘gØŸ	™	Ø"Ÿo™o×7Ñ7Ó9Ø;?¿;º; 4§;¡;×#7Ò#7ÈDñ	ô ×%Ñ%ô
ð 	
r%   c                 óø   — | j                  ||«      \  }}}}| j                  ||«      }| j                  |||j                  «      st	        d«      ‚|j                  «        t        t        j                  ¬«      S )Nr†   r
   )	r»   rÚ   rÝ   r   r   rc   r	   r   rd   )	r@   r!   r´   rÖ   r"   r   r   r½   rÙ   s	            r#   rc   z'CustomerPortalCaseNoteDetailView.deleteU  sf   € Ø-1¯^©^¸GÀWÓ-MÑ*ˆ
�H˜f dØ�~‰~˜d GÓ,ˆà×Ñ 
¨D°'·,±,Ô?Ü" >Ó2Ð2à�‰ŒÜœv×9Ñ9Ô:Ð:r%   N)rQ   rR   rS   rT   r   rU   re   r»   r°   rÚ   rÒ   rÝ   r`   rc   rV   r%   r#   rÔ   rÔ   !  sc   „ ñð *Ð*Ðð2¨#ó 2ð˜dð ¨Só ð,¨Hó ,ð
 cð 
°Có 
ð0; sð ;°Sô ;r%   rÔ   N)rŠ   )+Údjango.confr   Údjango.contrib.authr   Údjango.core.mailr   Ú	django.dbr   Úrest_framework.viewsr   Úrest_framework.permissionsr   Úrest_framework.responser	   Úrest_frameworkr   Úrest_framework.exceptionsr   r   r   Úcustomers.modelsr   Úcases.modelsr   rœ   r$   r'   rX   re   Ústrrr   rt   r¦   r«   Úrest_framework.parsersr®   r¯   r°   r±   r³   rÊ   rÒ   rÔ   rV   r%   r#   ú<module>rð      sÇ   ðå  Ý .Ý &Ý !Ý (Ý 6Ý ,Ý !ß QÑ Qå /Ý áÓ€ò(ôDU
 ô U
ôp9; Wô 9;ñxD Cð D°ó Dôq
˜gô q
ôh/
 7ô /
ôd9 'ô 9÷D ?ß +ô>
 gô >
ôDA;¨7ô A;÷F (ô<; wõ <;r%   