Ë
    ]¾øiâ@  ã                   ó6  — 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 d d
lmZ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 m!Z!m"Z"m#Z#m$Z$  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+y)é    )Úsettings)Úget_user_model)Ú	send_mail)Útransaction)ÚProtectedError)ÚAPIView)ÚModelViewSet)Úaction)ÚIsAuthenticated)ÚPermissionDeniedÚValidationError)ÚResponse©Ústatus)Úget_active_tenant_for_useré   )ÚCustomerÚCustomerMembershipÚCreditor)ÚCustomerSerializerÚCustomerMembershipSerializerÚ"CustomerMembershipUpdateSerializerÚCustomerPortalMeSerializerÚCreditorSerializerÚlengthÚreturnc                 óZ   ‡‡— dd l ŠdŠdj                  ˆˆfd„t        | «      D «       «      S )Nr   Ú6abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789Ú c              3   ó@   •K  — | ]  }‰j                  ‰«      –— Œ y ­w©N)Úchoice)Ú.0Ú_ÚalphabetÚsecretss     €€ú$/var/www/html/acx/customers/views.pyú	<genexpr>z*_generate_temp_password.<locals>.<genexpr>!   s   øè ø€ ÒC°�7—>‘> (×+ÑCùs   ƒ)r&   ÚjoinÚrange)r   r%   r&   s    @@r'   Ú_generate_temp_passwordr+      s$   ù€ ãØG€HØ�7‰7ÔC´U¸6³]ÔCÓCÐCó    c                   óê   — e Zd ZeZegZd„ Zd„ Zd„ Z	 e
ddgd¬«      dd	„«       Z e
dd
dgd¬«      dd„«       Z e
dddgd¬«      dd„«       Z e
ddgd¬«      dd„«       Z e
ddgd¬«      dd„«       Zy)ÚCustomerViewSetc                 óÀ   — t        | j                  j                  «      }|st        j                  j                  «       S t        j                  j                  |¬«      S )N©Útenant)r   ÚrequestÚuserr   ÚobjectsÚnoneÚfilter)Úselfr1   s     r'   Úget_querysetzCustomerViewSet.get_queryset(   sH   € Ü+¨D¯L©L×,=Ñ,=Ó>ˆÙÜ×#Ñ#×(Ñ(Ó*Ð*Ü×Ñ×&Ñ&¨fÐ&Ó5Ð5r,   c                 óª   — t        | j                  j                  «      }|st        d«      ‚|j	                  || j                  j                  ¬«       y ©NzNo active tenant.)r1   Ú
created_by©r   r2   r3   r   Úsave©r7   Ú
serializerr1   s      r'   Úperform_createzCustomerViewSet.perform_create.   ó?   € Ü+¨D¯L©L×,=Ñ,=Ó>ˆÙÜ"Ð#6Ó7Ð7Ø�‰˜v°$·,±,×2CÑ2CˆÕDr,   c                 ó$  — | j                  «       }	 |j                  «        t        t        j                  ¬«      S # t
        $ rJ t        |d«      r|j                  j                  «       nd}t        d|ddœt        j                  ¬«      cY S w xY w)Nr   Úcasesr   uQ   Ce client possÃ¨de des dossiers liÃ©s et ne peut pas Ãªtre supprimÃ© directement.Ú	protected)ÚdetailÚcases_countÚcode)
Ú
get_objectÚdeleter   r   ÚHTTP_204_NO_CONTENTr   ÚhasattrrC   ÚcountÚHTTP_409_CONFLICT)r7   r2   ÚargsÚkwargsÚcustomerrF   s         r'   ÚdestroyzCustomerViewSet.destroy4   s…   € Ø—?‘?Ó$ˆð	Ø�O‰OÔÜ¤6×#=Ñ#=Ô>Ð>øÜò 	ä*1°(¸GÔ*D�—‘×$Ñ$Ô&È!ð ô àqØ#.Ø'ñô
 ×/Ñ/ôò ð		ús   ’)< ¼ABÂBTÚDELETEzforce-delete)rE   ÚmethodsÚurl_pathNc                 óØ  — | j                  «       }t        j                  «       5  d}t        |d«      rB|j                  j                  «       }|j                  j                  «       j                  «        t        |d«      r(|j                  j                  «       j                  «        |j                  «        ddd«       t        ddœt        j                  ¬«      S # 1 sw Y   Œ'xY w)uF   Suppression forcÃ©e : supprime tous les dossiers liÃ©s puis le client.r   rC   Ú	cases_cusNu'   Client et tous ses dossiers supprimÃ©s.)rE   Úcases_deletedr   )rH   r   ÚatomicrK   rC   rL   ÚallrI   rV   r   r   ÚHTTP_200_OK)r7   r2   ÚpkrP   rW   s        r'   Úforce_deletezCustomerViewSet.force_deleteF   s»   € ð —?‘?Ó$ˆÜ×ÑÓ!ñ 	àˆMÜ�x Ô)Ø (§¡× 4Ñ 4Ó 6�Ø—‘×"Ñ"Ó$×+Ñ+Ô-Ü�x Ô-Ø×"Ñ"×&Ñ&Ó(×/Ñ/Ô1Ø�O‰OÔ÷	ô Ø@ÐS`ÑaÜ×%Ñ%ô
ð 	
÷	ð 	ús   ¥BC Ã C)ÚGETÚPOSTÚmembershipsc                 óÐ  — | j                  «       }|j                  dk(  rX|j                  j                  d«      j	                  «       j                  d«      }t        t        |d¬«      j                  «      S t        |j                  d|i¬«      }|j                  d¬«       |j                  d   }t        |d	«      r|j                  st        dd
i«      ‚t        j                  «       5  t         j"                  j%                  |||j                  j'                  dt         j(                  j*                  «      |j                  j'                  dt         j,                  j.                  «      |j                  j'                  dd«      dœ¬«      \  }}|s‘|j                  j'                  d|j0                  «      |_        |j                  j'                  d|j2                  «      |_        |j                  j'                  d|j4                  «      |_        |j7                  «        d d d «       t        t        «      j                  t2        j8                  ¬«      S # 1 sw Y   Œ7xY w)Nr]   r3   ú-idT)Úmanyr2   )ÚdataÚcontext©Úraise_exceptionÚ	is_activezUser is inactive.Úroler   Úis_primary_contactF©rh   r   ri   ©rP   r3   Údefaultsr   )rH   Úmethodr_   Úselect_relatedrY   Úorder_byr   r   rc   Úis_validÚvalidated_datarK   rg   r   r   rX   r   r4   Úget_or_createÚgetÚRoleÚVIEWERÚStatusÚACTIVErh   r   ri   r=   ÚHTTP_201_CREATED)	r7   r2   r[   rP   ÚqsÚserr3   ÚobjÚcreateds	            r'   r_   zCustomerViewSet.membershipsY   sê  € à!Ÿ_™_Ó.ˆà�>‰>˜UÒ"Ø×%Ñ%×4Ñ4°VÓ<×@Ñ@ÓB×KÑKÈEÓRˆBÜÔ8¸À$ÔG×LÑLÓMÐMä*°·±ÀyÐRYÐFZÔ[ˆØ�‰ TˆÔ*à×!Ñ! &Ñ)ˆÜ�4˜Ô%¨d¯nªnÜ! 6Ð+>Ð"?Ó@Ð@ä×ÑÓ!ñ 	Ü-×5Ñ5×CÑCØ!Øà×.Ñ.×2Ñ2°6Ô;M×;RÑ;R×;YÑ;YÓZØ!×0Ñ0×4Ñ4°XÔ?Q×?XÑ?X×?_Ñ?_Ó`Ø*-×*<Ñ*<×*@Ñ*@ÐAUÐW\Ó*]ñð Dó ‰LˆC�ñ Ø×-Ñ-×1Ñ1°&¸#¿(¹(ÓC�”Ø ×/Ñ/×3Ñ3°H¸c¿j¹jÓI�”
Ø),×);Ñ);×)?Ñ)?Ð@TÐVY×VlÑVlÓ)m�Ô&Ø—‘”
÷	ô  Ô4°SÓ9×>Ñ>Äv×G^ÑG^Ô_Ð_÷!	ð 	ús   Ã+D;IÉI%ÚPATCHz"memberships/(?P<membership_id>\d+)c                 óÈ  — | j                  «       }	 |j                  j                  d«      j                  |¬«      }|j                  dk(  r*|j                  «        t        t        j                  ¬«      S t        |j                  dd|i¬	«      }|j                  d¬
«       |j                  }t!        j"                  «       5  d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        |j)                  «        |j*                  }i }	d|v r_|d   }
t,        j.                  j1                  |j2                  ¬«      j5                  |
¬«      j7                  «       rt9        ddi«      ‚|
|	d<   d|v r_|d   }t,        j.                  j1                  |j2                  ¬«      j5                  |¬«      j7                  «       rt9        ddi«      ‚||	d<   d|v r|d   |	d<   d|v r|d   |	d<   d|v rt;        |d«      r|d   |	d<   d|v rt;        |d«      r|d   |	d<   d|v r|d   |	d<   |	r5|	j=                  «       D ]  \  }}t?        |||«       Œ |j)                  «        d d d «       |jA                  «        t        tC        |«      j                  t        jD                  ¬«      S # t        j
                  $ r  t        ddit        j                  ¬«      cY S w xY w# 1 sw Y   Œ}xY w)Nr3   ©ÚidrE   ú
Not found.r   rR   Tr2   )rc   Úpartialrd   re   rh   r   ri   Úemail©Úemail__iexactzThis email is already used.Úusername)Úusername__iexactzThis username is already used.Ú
first_nameÚ	last_nameÚ	telephoneÚdepartementrg   )#rH   r_   rn   rs   r   ÚDoesNotExistr   r   ÚHTTP_404_NOT_FOUNDrm   rI   rJ   r   rc   rp   rq   r   rX   rh   ri   r=   r3   ÚUserr4   Úexcluder€   r6   Úexistsr   rK   ÚitemsÚsetattrÚrefresh_from_dbr   rZ   )r7   r2   r[   Úmembership_idrP   Úmrz   rc   ÚuÚuser_updatesÚ	new_emailÚnew_usernameÚkÚvs                 r'   Úmembership_detailz!CustomerViewSet.membership_detail{   sÙ  € à!Ÿ_™_Ó.ˆð	XØ×$Ñ$×3Ñ3°FÓ;×?Ñ?À=Ð?ÓQˆAð �>‰>˜XÒ%Ø�H‰HŒJÜ¤6×#=Ñ#=Ô>Ð>ä0°g·l±lÈDÐ[dÐfmÐZnÔoˆØ�‰ TˆÔ*Ø×!Ñ!ˆä×ÑÓ!ñ *	à˜‰~Ø˜f™�”Ø˜4ÑØ ™>�”Ø# tÑ+Ø'+Ð,@Ñ'A�Ô$Ø�F‰FŒHð —‘ˆAØˆLà˜$‰Ø  ™M�	Ü—<‘<×'Ñ'¨1¯4©4Ð'Ó0×7Ñ7ÀiÐ7ÓP×WÑWÔYÜ)¨7Ð4QÐ*RÓSÐSØ(1�˜WÑ%à˜TÑ!Ø# JÑ/�Ü—<‘<×'Ñ'¨1¯4©4Ð'Ó0×7Ñ7ÈÐ7ÓV×]Ñ]Ô_Ü)¨:Ð7WÐ*XÓYÐYØ+7�˜ZÑ(à˜tÑ#Ø-1°,Ñ-?�˜\Ñ*Ø˜dÑ"Ø,0°Ñ,=�˜[Ñ)à˜dÑ"¤w¨q°+Ô'>Ø,0°Ñ,=�˜[Ñ)Ø Ñ$¬°°MÔ)BØ.2°=Ñ.A�˜]Ñ+à˜dÑ"Ø,0°Ñ,=�˜[Ñ)áØ(×.Ñ.Ó0ò %‘D�A�qÜ˜A˜q !Õ$ð%à—‘”÷U*	ðX 	
×ÑÔÜÔ4°QÓ7×<Ñ<ÄV×EWÑEWÔXÐXøôq "×.Ñ.ò 	XÜ˜X |Ð4¼V×=VÑ=VÔWÒWð	Xú÷*	ð *	ús   ’+J" ÃFKÊ"0KËKËK!z1memberships/(?P<membership_id>\d+)/reset-passwordc                 ó’  — | j                  «       }	 |j                  j                  d«      j                  |¬«      }|j                  }|j                  st        ddi«      ‚t        d«      }t        j                  «       5  |j                  |«       d	|_        |j#                  d
dg¬«       d d d «       t%        t&        dd «      xs d}d}	d|j(                  xs |j*                  xs d› d�j-                  «       dd|j.                  › �d|rd|› �ndd|j                  › �d|› �dddddg}
dj1                  |
«      }t3        |	|t%        t&        dd «      |j                  gd¬«       t        d|dœt        j4                  ¬«      S # t        j
                  $ r  t        ddit        j                  ¬«      cY S w xY w# 1 sw Y   �ŒxY w) Nr3   r   rE   r�   r   rƒ   zUser has no email.é   TÚpasswordÚmust_change_password©Úupdate_fieldsÚ FRONTEND_CLIENT_PORTAL_LOGIN_URLr   z+ACX - Nouveau mot de passe (Portail Client)zBonjour ú,uC   Votre mot de passe a Ã©tÃ© rÃ©initialisÃ© pour le Portail Client : zURL de connexion : u$   URL de connexion : (non configurÃ©e)zIdentifiant : zMot de passe temporaire : u3   Veuillez modifier ce mot de passe aprÃ¨s connexion.zCordialement,ÚACXÚ
ÚDEFAULT_FROM_EMAILF)ÚsubjectÚmessageÚ
from_emailÚrecipient_listÚfail_silentlyzPassword reset. Email sent.)rE   Útemporary_password)rH   r_   rn   rs   r   rŒ   r   r   r�   r3   rƒ   r   r+   r   rX   Úset_passwordr    r=   Úgetattrr   rˆ   r†   ÚstripÚnamer)   r   rZ   )r7   r2   r[   r”   rP   r•   r–   Útemp_passwordÚ	login_urlr¨   ÚlinesÚbodys               r'   Úmembership_reset_passwordz)CustomerViewSet.membership_reset_password¼   sÚ  € à!Ÿ_™_Ó.ˆð	XØ×$Ñ$×3Ñ3°FÓ;×?Ñ?À=Ð?ÓQˆAð �F‰FˆØ�wŠwÜ! 7Ð,@Ð"AÓBÐBä/°Ó3ˆä×ÑÓ!ñ 	GØ�N‰N˜=Ô)Ø%)ˆAÔ"Ø�F‰F *Ð.DÐ!EˆFÔF÷	Gô œHÐ&HÈ$ÓOÒUÐSUˆ	à?ˆà�q—|‘|Ò7 q§z¡zÒ7°RÐ8¸Ð:×@Ñ@ÓBØØQÐRZ×R_ÑR_ÐQ`ÐaØÙ1:Ð! ) Ñ-Ð@fØ˜QŸW™W˜IÐ&Ø(¨¨Ð8ØØAØØØð
ˆð �y‰y˜ÓˆäØØÜœxÐ)=¸tÓDØŸG™G˜9Øõ	
ô à7Ø&3ñô ×%Ñ%ô
ð 	
øôW "×.Ñ.ò 	XÜ˜X |Ð4¼V×=VÑ=VÔWÒWð	Xú÷	Gñ 	Gús   ’+F Â-F<Æ0F9Æ8F9Æ<Gzportal/primary-userc           	      ó^  — | j                  «       }|j                  }|j                  d«      xs dj                  «       j	                  «       }|st        ddi«      ‚|j                  d«      xs dj                  «       }|j                  d«      xs dj                  «       }|j                  d«      xs dj                  «       }|j                  d«      xs dj                  «       }	|j                  d«      xs dj                  «       }
d	}t        j                  «       5  t        j                  j                  |¬
«      j                  «       }d}|€pt        d«      }t        ||
xs |||d¬«      }t        |d«      r||_        t        |d«      r|	|_        |j!                  |«       d|_        |j%                  «        d}ndd}d|fd|ffD ]  \  }}|sŒ	t'        |||«       d}Œ t        |d«      r|r	||_        d}t        |d«      r|	r	|	|_        d}|r|j%                  «        t(        j                  j+                  ||t(        j,                  j.                  t(        j0                  j2                  ddœ¬«      \  }}|sUt(        j,                  j.                  |_        t(        j0                  j2                  |_        d|_        |j%                  «        d|_        |j%                  dg¬«       d	d	d	«       d|dœ}|r||d<   t=        |t6        j>                  ¬«      S # 1 sw Y   Œ1xY w)uµ   
        Active le portail pour ce client et crÃ©e (ou retrouve) l'utilisateur principal.
        Retourne le mot de passe temporaire si l'utilisateur vient d'Ãªtre crÃ©Ã©.
        rƒ   r   zEmail obligatoire.rˆ   r‰   rŠ   r‹   r†   Nr„   Frž   T)rƒ   r†   rˆ   r‰   rg   rj   rk   Úportal_enabledr¡   )r¸   Úuser_createdÚ
user_emailr­   r   ) rH   rc   rs   r°   Úlowerr   r   rX   rŽ   r4   r6   Úfirstr+   rK   rŠ   r‹   r®   r    r=   r’   r   rr   rt   ÚOWNERrv   rw   rh   r   ri   r¸   r   rZ   )r7   r2   r[   rP   rc   rƒ   rˆ   r‰   rŠ   r‹   r†   r²   r3   Úcreated_userÚupdatedÚattrÚvalÚ
membershipr$   Úresps                       r'   Úportal_primary_userz#CustomerViewSet.portal_primary_user÷   sû  € ð "Ÿ_™_Ó.ˆà�|‰|ˆØ—‘˜'Ó"Ò( b×/Ñ/Ó1×7Ñ7Ó9ˆÙÜ! 7Ð,@Ð"AÓBÐBà—h‘h˜|Ó,Ò2°×9Ñ9Ó;ˆ
Ø—h‘h˜{Ó+Ò2°×9Ñ9Ó;ˆ	Ø—h‘h˜{Ó+Ò2°×9Ñ9Ó;ˆ	Ø—h‘h˜}Ó-Ò2°×9Ñ9Ó;ˆØ—h‘h˜zÓ*Ò2°×9Ñ9Ó;ˆàˆä×ÑÓ!ñ 8	<ä—<‘<×&Ñ&°UÐ&Ó;×AÑAÓCˆDØ ˆLØˆ|Ü 7¸Ó ;�ÜØØ%Ò.¨Ø)Ø'Ø"ô�ô ˜4 Ô-Ø%.�D”NÜ˜4 Ô/Ø'2�DÔ$Ø×!Ñ! -Ô0Ø,0�Ô)Ø—	‘	”Ø#‘ð  �Ø#/°Ð"<¸{ÈIÐ>VÐ!Wò '‘I�D˜#ÚÜ  d¨CÔ0Ø"&™ð'ô ˜4 Ô-±)Ø%.�D”NØ"�GÜ˜4 Ô/±KØ'2�DÔ$Ø"�GÙØ—I‘I”Kô /×6Ñ6×DÑDØ!Øä.×3Ñ3×9Ñ9Ü0×7Ñ7×>Ñ>Ø*.ñð Eó ‰MˆJ˜ñ ä"4×"9Ñ"9×"?Ñ"?�
”Ü$6×$=Ñ$=×$DÑ$D�
Ô!Ø04�
Ô-Ø—‘Ô!ð '+ˆHÔ#Ø�M‰MÐ)9Ð(:ˆMÔ;÷q8	<ðv #Ø(Øñ
ˆñ
 Ø)6ˆDÐ%Ñ&ä˜¤V×%7Ñ%7Ô8Ð8÷E8	<ð 8	<ús   Ä"B5L#ÇDL#Ì#L,r!   )NN)Ú__name__Ú
__module__Ú__qualname__r   Úserializer_classr   Úpermission_classesr8   r@   rQ   r
   r\   r_   rœ   r¶   rÄ   © r,   r'   r.   r.   $   sÒ   „ Ø)ÐØ)Ð*Ðò6òEòñ$ �4 ( °nÔEò
ó Fð
ñ$ �4 %¨ ¸=ÔIò`ó Jð`ñB �4 '¨8Ð!4Ð?dÔeò=Yó fð=Yñ@ �4 & Ð4hÔiò6
ó jð6
ñt �4 & Ð4IÔJòV9ó KñV9r,   r.   c                   ó,   — e Zd ZdZeZegZd„ Zd„ Z	d„ Z
y)ÚCreditorViewSetu¼   
    CRUD des crÃ©anciers du tenant.
    Un crÃ©ancier est l'entitÃ© rÃ©ellement due par le dÃ©biteur.
    Il peut Ãªtre rattachÃ© Ã  un client (client FK) ou exister indÃ©pendamment.
    c                 ó@  — t        | j                  j                  «      }|st        j                  j                  «       S t        j                  j                  |¬«      }| j                  j                  j                  d«      }|dv r|j                  |dk(  ¬«      }|S )Nr0   rg   )ÚtrueÚfalserÎ   )rg   )	r   r2   r3   r   r4   r5   r6   Úquery_paramsrs   )r7   r1   ry   rg   s       r'   r8   zCreditorViewSet.get_querysetZ  s„   € Ü+¨D¯L©L×,=Ñ,=Ó>ˆÙÜ×#Ñ#×(Ñ(Ó*Ð*Ü×Ñ×$Ñ$¨FÐ$Ó3ˆØ—L‘L×-Ñ-×1Ñ1°+Ó>ˆ	ØÐ)Ñ)Ø—‘ i°6Ñ&9�Ó;ˆBØˆ	r,   c                 óª   — t        | j                  j                  «      }|st        d«      ‚|j	                  || j                  j                  ¬«       y r:   r<   r>   s      r'   r@   zCreditorViewSet.perform_created  rA   r,   c                 óÒ   — | j                  «       }	 |j                  «        t        t        j                  ¬«      S # t
        $ r! t        dddœt        j                  ¬«      cY S w xY w)Nr   uF   Ce crÃ©ancier est liÃ© Ã  des dossiers et ne peut pas Ãªtre supprimÃ©.rD   )rE   rG   )rH   rI   r   r   rJ   r   rM   )r7   r2   rN   rO   Úcreditors        r'   rQ   zCreditorViewSet.destroyj  s`   € Ø—?‘?Ó$ˆð
	Ø�O‰OÔÜ¤6×#=Ñ#=Ô>Ð>øÜò 	ÜàfØ'ñô ×/Ñ/ôò ð	ús   ’)< ¼'A&Á%A&N)rÅ   rÆ   rÇ   Ú__doc__r   rÈ   r   rÉ   r8   r@   rQ   rÊ   r,   r'   rÌ   rÌ   Q  s(   „ ñð
 *ÐØ)Ð*ÐòòEór,   rÌ   c                   ó   — e Zd ZegZd„ Zy)ÚCustomerPortalMeViewc                 ó˜  — |j                   }t        j                  j                  ddd«      j	                  |¬«      j                  d«      j                  «       }t        |«       |st        ddit        j                  ¬«      S |j                  }|st        dd	it        j                  ¬«      S t        |d
«      r)|j                  st        ddit        j                  ¬«      S t        |d«      r+|j                  dv rt        ddit        j                  ¬«      S t        |«      j                  }t        |t        j                   ¬«      S )NrP   r3   Úcustomer__tenant)r3   ra   rE   z,No active customer membership for this user.r   z"Customer not found for membership.r¸   zCustomer portal is not enabled.r   )Ú	suspendedÚdisabledzAccount is suspended.)r3   r   r4   rn   r6   ro   r¼   Úprintr   r   ÚHTTP_403_FORBIDDENrP   rK   r¸   r   rc   rZ   )r7   r2   r3   rÂ   rP   rc   s         r'   rs   zCustomerPortalMeView.get|  s3  € Ø�|‰|ˆô ×&Ñ&ß‰^˜J¨Ð0BÓCß‰V˜ˆVÓß‰X�e‹_ß‰U‹Wð 	ô 	ˆjÔáÜØÐIÐJÜ×0Ñ0ôð ð
 ×&Ñ&ˆÙÜØÐ?Ð@Ü×0Ñ0ôð ô �8Ð-Ô.°x×7NÒ7NÜØÐ<Ð=Ü×0Ñ0ôð ô �:˜xÔ(¨Z×->Ñ->ÐB[Ñ-[ÜØÐ2Ð3Ü×0Ñ0ôð ô
 *¨*Ó5×:Ñ:ˆÜ˜¤V×%7Ñ%7Ô8Ð8r,   N)rÅ   rÆ   rÇ   r   rÉ   rs   rÊ   r,   r'   rÖ   rÖ   y  s   „ Ø)Ð*Ðó*9r,   rÖ   N)rž   ),Údjango.confr   Údjango.contrib.authr   Údjango.core.mailr   Ú	django.dbr   Údjango.db.modelsr   Úrest_framework.viewsr   Úrest_framework.viewsetsr	   Úrest_framework.decoratorsr
   Úrest_framework.permissionsr   Úrest_framework.exceptionsr   r   Úrest_framework.responser   Úrest_frameworkr   Úaccounts.tenant_contextr   Úmodelsr   r   r   Úserializersr   r   r   r   r   rŽ   ÚintÚstrr+   r.   rÌ   rÖ   rÊ   r,   r'   ú<module>rî      s„   ðå  Ý .Ý &Ý !Ý +Ý (å 0Ý ,Ý 6ß GÝ ,Ý !å >ß :Ñ :÷õ ñ Ó€ñD Cð D°ó Dôj9�lô j9ôZ	%�lô %ôP-9˜7õ -9r,   