Ë
    ]øiB  ã                   óÒ  — 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ed	ed
efd„Z edd«      Z edd«      Z edd«      ZdZdZ G d„ de	j*                  «      Z G d„ de	j.                  «      Z G d„ de	j.                  «      Z G d„ de	j.                  «      Z G d„ de	j.                  «      Z G d„ de«      Z G d „ d!e«      Z G d"„ d#e«      Z G d$„ d%e	j.                  «      Z G d&„ d'e«      Z  G d(„ d)e	j.                  «      Z! G d*„ d+e	j.                  «      Z" G d,„ d-e	j.                  «      Z#d.ed
efd/„Z$ G d0„ d1e«      Z% G d2„ d3e«      Z&d4„ Z' G d5„ d6«      Z(y7)8é    )ÚDecimal)Úapps)Úsettings)ÚMinValueValidator)Úmodels)Útimezone)ÚValidationErrorÚsetting_nameÚdefaultÚreturnc                 ó$   — t        t        | |«      S ©N)Úgetattrr   )r
   r   s     ú2/var/www/html/acx/collections_management/models.pyÚget_model_refr      s   € Ü”8˜\¨7Ó3Ð3ó    ÚACX_TENANT_MODELztenancy.TenantÚACX_PORTFOLIO_MODELzportfolios.PortfolioÚACX_DEBTOR_MODELzdebtors.Debtorzcustomers.Customerzcustomers.Creditorc                   ón   — e Zd Z ej                  dd¬«      Z ej                  d¬«      Z G d„ d«      Zy)ÚTimeStampedModelT)Úauto_now_addÚdb_index)Úauto_nowc                   ó   — e Zd ZdZy)úTimeStampedModel.MetaTN)Ú__name__Ú
__module__Ú__qualname__Úabstract© r   r   ÚMetar      s   „ Ø‰r   r"   N)r   r   r   r   ÚDateTimeFieldÚ
created_atÚ
updated_atr"   r!   r   r   r   r      s2   „ Ø%�×%Ñ%°4À$ÔG€JØ%�×%Ñ%¨tÔ4€J÷ò r   r   c                   ó4   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)ÚCollectionCaseStatus)ÚnewÚNew)Ú	in_reviewz	In review)Ú
preventiveÚ
Preventive)ÚamicableÚAmicable)Ú	pre_legalz	Pre-legal)ÚlegalÚLegal)ÚdisputedÚDisputed)ÚsettledÚSettled)ÚclosedÚClosed)Ú	write_offz	Write-offN)r   r   r   ÚNEWÚ	IN_REVIEWÚ
PREVENTIVEÚAMICABLEÚ	PRE_LEGALÚLEGALÚDISPUTEDÚSETTLEDÚCLOSEDÚ	WRITE_OFFr!   r   r   r'   r'       s4   „ Ø
€CØ(€IØ+€JØ%€HØ(€IØ€EØ%€HØ"€GØ€FØ(�Ir   r'   c                   ó   — e Zd ZdZdZdZy)ÚCollectionPriority)ÚlowÚLow)ÚmediumÚMedium)ÚhighÚHighN)r   r   r   ÚLOWÚMEDIUMÚHIGHr!   r   r   rD   rD   -   s   „ Ø
€CØ€FØ�Dr   rD   c                   ó0   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)ÚCollectionActionType)ÚcallÚCall)ÚsmsÚSMS)ÚemailÚEmail)ÚvisitÚVisit)ÚletterÚLetter)ÚnegotiationÚNegotiation)ÚnoticezFormal notice)ÚlawyerzTransfer to lawyer©ÚotherÚOtherN)r   r   r   ÚCALLrS   ÚEMAILÚVISITÚLETTERÚNEGOTIATIONÚNOTICEÚLAWYERÚOTHERr!   r   r   rO   rO   3   s/   „ Ø€DØ
€CØ€EØ€EØ€FØ.€KØ&€FØ+€FØ�Er   rO   c                   ó4   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)ÚCollectionActionOutcome)ÚreachedÚReached)Únot_reachedzNot reached)ÚpromisezPayment promise)ÚrefusedÚRefused)Úwrong_numberzWrong number)ÚrescheduledÚRescheduled)Úpartial_paymentzPartial payment)Úfull_paymentzFull payment)ÚdisputeÚDisputer^   N)r   r   r   ÚREACHEDÚNOT_REACHEDÚPROMISEÚREFUSEDÚWRONG_NUMBERÚRESCHEDULEDÚPARTIAL_PAYMENTÚFULL_PAYMENTÚDISPUTErh   r!   r   r   rj   rj   ?   s4   „ Ø"€GØ.€KØ*€GØ"€GØ1€LØ.€KØ:€OØ1€LØ"€GØ�Er   rj   c                   ó\  — e Zd ZdZ ej
                  eej                  d¬«      Z ej                  dd¬«      Z
 ej
                  eej                  ddd¬«      Z ej
                  eej                  ddd	¬«      Z ej
                  eej"                  ddd¬
«      Z ej
                  eej"                  ddd¬
«      Z ej                  dej,                  ej.                  d¬«      Z ej                  dej,                  ej4                  d¬«      Z ej
                  ej:                  ej                  ddd¬«      Z ej>                  dd e d«       e!d«      g¬«      Z" ej>                  dd e d«       e!d«      g¬«      Z# ej>                  dd e d«       e!d«      g¬«      Z$ ej>                  dd e d«       e!d«      g¬«      Z% ej>                  dd e d«       e!d«      g¬«      Z& ejN                  ddd¬«      Z( ej                  de)j,                  dd¬«      Z* ejN                  ddd¬«      Z+ ejX                  dd¬«      Z- ej
                  ej:                  ej                  dd¬«      Z. G d„ d«      Z/e0d„ «       Z1e0de fd„«       Z2e0de fd„«       Z3e0de4fd „«       Z5de6fd!„Z7y")#ÚCollectionCaseu4   
    Dossier de recouvrement (unitÃ© centrale).
    Úcollection_cases©Ú	on_deleteÚrelated_nameé    T)Ú
max_lengthr   Úclient_collection_cases)r…   ÚnullÚblankr†   Úcreditor_collection_cases)r…   r†   rŠ   r‹   é   ©rˆ   Úchoicesr   r   é
   Úassigned_collection_casesé   é   z0.00r   )Ú
max_digitsÚdecimal_placesr   Ú
validators©rŠ   r‹   r   ©rˆ   r�   rŠ   r‹   Ú ©r‹   r   Úcreated_collection_cases©r…   rŠ   r†   c                   ód   — e Zd ZdZ ej
                  g d¢¬«       ej
                  ddg¬«      gZy)úCollectionCase.Meta))ÚtenantÚ	reference)rŸ   ÚstatusÚpriority©ÚfieldsrŸ   Únext_action_dateN)r   r   r   Úunique_togetherr   ÚIndexÚindexesr!   r   r   r"   rž   ©   s1   „ Ø4ˆàˆF�L‰LÒ @ÔAØˆF�L‰L Ð+=Ð >Ô?ð
‰r   r"   c                 óJ   — | j                   r| j                  S | j                  S )u9   Retourne le crÃ©ancier explicite ou Ã  dÃ©faut le client.)Úcreditor_idÚcreditorÚcustomer©Úselfs    r   Úeffective_creditorz!CollectionCase.effective_creditor°   s   € ð !%× 0Ò 0ˆt�}‰}ÐC°d·m±mÐCr   r   c                 óh   — | j                   | j                  z   | j                  z   | j                  z   S r   )Úprincipal_amountÚinterest_amountÚpenalty_amountÚfees_amountr­   s    r   Ú	total_duezCollectionCase.total_dueµ   s0   € à×$Ñ$ t×';Ñ';Ñ;¸d×>QÑ>QÑQÐTX×TdÑTdÑdÐdr   c                 ó4   — | j                   | j                  z
  S r   )rµ   Útotal_paid_amountr­   s    r   ÚbalancezCollectionCase.balance¹   s   € à�~‰~ × 6Ñ 6Ñ6Ð6r   c                 ó^   — | j                   sy| j                   t        j                  «       k  S )NF)r¥   r   Ú	localdater­   s    r   Ú
is_overduezCollectionCase.is_overdue½   s(   € à×$Ò$ØØ×$Ñ$¤x×'9Ñ'9Ó';Ñ;Ð;r   c                 ó:   — | j                   › d| j                  › d�S )Nz (ú))r    r¡   r­   s    r   Ú__str__zCollectionCase.__str__Ã   s   € Ø—.‘.Ð!  D§K¡K =°Ð2Ð2r   N)8r   r   r   Ú__doc__r   Ú
ForeignKeyÚTENANT_MODELÚCASCADErŸ   Ú	CharFieldr    ÚCUSTOMER_MODELÚSET_NULLr¬   ÚCREDITOR_MODELr«   ÚPORTFOLIO_MODELÚPROTECTÚ	portfolioÚDEBTOR_MODELÚdebtorr'   r�   r9   r¡   rD   rL   r¢   r   ÚAUTH_USER_MODELÚassigned_toÚDecimalFieldr   r   r±   r²   r³   r´   r·   Ú	DateFieldÚdue_daterO   Únext_action_typer¥   Ú	TextFieldÚnotesÚ
created_byr"   Úpropertyr¯   rµ   r¸   Úboolr»   Ústrr¾   r!   r   r   r‚   r‚   L   s?  „ ñð ˆV×Ñ˜|°v·~±~ÐTfÔg€FØ �× Ñ ¨B¸Ô>€Ið !ˆv× Ñ ØØ—/‘/ØØØ.ô€Hð !ˆv× Ñ ØØ—/‘/ØØØ0ô€Hð "�×!Ñ!ØØ—.‘.Ø'ØØô€Ið ˆV×ÑØØ—.‘.Ø'ØØô€Fð ˆV×ÑØØ$×,Ñ,Ø$×(Ñ(Øô	€Fð  ˆv×ÑØØ"×*Ñ*Ø"×)Ñ)Øô	€Hð $�&×#Ñ#Ø× Ñ Ø—/‘/ØØØ0ô€Kð +�v×*Ñ*Ø a±¸³ÑN_Ð`aÓNbÐMcôÐð *�f×)Ñ)Ø a±¸³ÑN_Ð`aÓNbÐMcô€Oð )�V×(Ñ(Ø a±¸³ÑN_Ð`aÓNbÐMcô€Nð &�&×%Ñ%Ø a±¸³ÑN_Ð`aÓNbÐMcô€Kð ,˜×+Ñ+Ø a±¸³ÑN_Ð`aÓNbÐMcôÐð  ˆv×Ñ T°ÀÔE€Hà'�v×'Ñ'°2Ð?S×?[Ñ?[ÐbfÐnrÔsÐØ'�v×'Ñ'¨T¸ÈÔMÐàˆF×Ñ 4°Ô4€Eà"�×"Ñ"Ø× Ñ Ø—/‘/ØØ/ô	€J÷
ñ 
ð ñDó ðDð ðe˜7ò eó ðeð ð7˜ò 7ó ð7ð ð<˜Dò <ó ð<ð
3˜ô 3r   r‚   c                   ór  — e Zd Z ej                  eej                  d¬«      Z ej                  eej                  d¬«      Z	 ej                  dej                  d¬«      Z ej                  dej                  ddd¬«      Z ej                  ddd	¬
«      Z ej"                  dd	¬«      Z ej&                  ej*                  d¬«      Z ej                  dej                  dd¬«      Z ej0                  dd¬«      Z ej                  ej6                  ej8                  dd¬«      Z G d„ d«      Zdefd„Z y)ÚCollectionActionÚcollection_actionsr„   Úactionsr�   T)rˆ   r�   r   )rˆ   r�   rŠ   r‹   r   éð   r™   ©rˆ   r‹   r   rš   ©r   r   r˜   )rŠ   r‹   Úcreated_collection_actionsrœ   c                   ó`   — e Zd Z ej                  g d¢¬«       ej                  ddg¬«      gZy)úCollectionAction.Meta)rŸ   ÚcaseÚaction_dater£   rŸ   Úaction_typeN©r   r   r   r   r§   r¨   r!   r   r   r"   rá   Þ   s+   „ àˆF�L‰LÒ AÔBØˆF�L‰L ¨=Ð 9Ô:ð
‰r   r"   r   c                 óL   — | j                   j                  › d| j                  › �S )Nú - )râ   r    rä   r­   s    r   r¾   zCollectionAction.__str__ä   s%   € Ø—)‘)×%Ñ%Ð& c¨$×*:Ñ*:Ð);Ð<Ð<r   N)!r   r   r   r   rÀ   rÁ   rÂ   rŸ   r‚   râ   rÃ   rO   r�   rä   rj   ÚoutcomeÚsummaryrÒ   Údetailsr#   r   Únowrã   rÑ   rÏ   r¥   r   rÌ   rÅ   rÔ   r"   r×   r¾   r!   r   r   rÙ   rÙ   Ç   s3  „ ØˆV×Ñ˜|°v·~±~ÐThÔi€FØˆ6×Ñ˜^°v·~±~ÐT]Ô^€Dà"�&×"Ñ"¨bÐ:N×:VÑ:VÐaeÔf€KØˆf×Ñ¨"Ð6M×6UÑ6UÐ\`ÐhlÐw{Ô|€Gàˆf×Ñ¨#°TÀ2ÔF€GØˆf×Ñ T°2Ô6€Gà&�&×&Ñ&¨x¯|©|ÀdÔK€Kð (�v×'Ñ'°2Ð?S×?[Ñ?[ÐbfÐnrÔsÐØ'�v×'Ñ'¨T¸Ô>Ðà"�×"Ñ"Ø× Ñ Ø—/‘/ØØ1ô	€J÷
ñ 
ð=˜ô =r   rÙ   c                   ó¦  — e Zd Z ej                  eej                  d¬«      Z ej                  eej                  d¬«      Z	 ej                  dd ed«      g¬«      Z ej                  d¬	«      Z ej                  d
g d¢dd¬«      Z ej"                  dd¬«      Z ej                  ej(                  ej*                  dd¬«      Z G d„ d«      Zy)ÚPaymentPromiseÚpayment_promisesr„   Úpromisesr’   r“   r   ©r”   r•   r–   T)r   r�   ))ÚpendingÚPending)ÚkeptÚKept)ÚbrokenÚBroken)Ú	cancelledÚ	Cancelledrñ   rŽ   r™   rš   Úcreated_payment_promisesrœ   c                   ó8   — e Zd Z ej                  g d¢¬«      gZy)úPaymentPromise.Meta)rŸ   r¡   Úpromised_dater£   Nrå   r!   r   r   r"   rû     s   „ Ø�6—<‘<Ò'LÔMÐN‰r   r"   N)r   r   r   r   rÀ   rÁ   rÂ   rŸ   r‚   râ   rÎ   r   ÚamountrÏ   rü   rÃ   r¡   rÒ   rÓ   r   rÌ   rÅ   rÔ   r"   r!   r   r   rí   rí   è   sÖ   „ ØˆV×Ñ˜|°v·~±~ÐTfÔg€FØˆ6×Ñ˜^°v·~±~ÐT^Ô_€Dà ˆV× Ñ ¨B¸qÑN_Ð`aÓNbÐMcÔd€FØ$�F×$Ñ$¨dÔ3€MàˆV×ÑØò
ð Øô
€Fð ˆF×Ñ 4°Ô4€Eà"�×"Ñ"Ø× Ñ Ø—/‘/ØØ/ô	€J÷Oò Or   rí   c                   ó   — e Zd ZdZdZdZy)ÚPaymentReceivedByu&   Qui a rÃ©ellement encaissÃ© l'argent ?)ÚacxzEncaissement ACX)Úcustomer_directzPaiement direct chez le clientN)r   r   r   r¿   ÚACXÚCUSTOMER_DIRECTr!   r   r   rÿ   rÿ     s   „ Ù0à
#€CØI�Or   rÿ   c                   ó|  — e Zd Z ej                  eej                  d¬«      Z ej                  eej                  d¬«      Z	 ej                  dd ed«      g¬«      Z ej                  ej                  d¬«      Z ej"                  d	g d
¢d¬«      Z ej"                  ddd¬«      Z ej(                  dd¬«      Z ej"                  dej.                  ej0                  d¬«      Z ej                  dej4                  dddd¬«      Z ej                  ej:                  ej<                  dd¬«      Z G d„ d«      Z y)ÚPaymentÚpaymentsr„   r’   r“   r   rð   TrÞ   é   ))ÚcashÚCash)Úbank_transferzBank transfer)Úmobile_moneyzMobile money)ÚchequeÚCheque)ÚcardÚCardr^   r_   ©rˆ   r�   r   é@   r™   rÝ   rš   r�   rŽ   z#treasury_management.TreasuryAccountÚcollection_paymentsu6   Compte de trÃ©sorerie ACX utilisÃ© si received_by=acx.©r…   rŠ   r‹   r†   Ú	help_textÚcreated_paymentsrœ   c                   ó°   — e Zd Z ej                  ddg¬«       ej                  ddg¬«       ej                  ddg¬«       ej                  ddg¬«      gZy)úPayment.MetarŸ   Úpaid_atr£   ÚmethodÚreceived_byÚtreasury_accountNrå   r!   r   r   r"   r  ?  sV   „ àˆF�L‰L ¨9Ð 5Ô6ØˆF�L‰L ¨8Ð 4Ô5ØˆF�L‰L ¨=Ð 9Ô:ØˆF�L‰L Ð+=Ð >Ô?ð	
‰r   r"   N)!r   r   r   r   rÀ   rÁ   rÂ   rŸ   r‚   râ   rÎ   r   rý   r#   r   rë   r  rÃ   r  r    rÒ   rÓ   rÿ   r�   r  r  rÈ   r  r   rÌ   rÅ   rÔ   r"   r!   r   r   r  r    sF  „ ØˆV×Ñ˜|°v·~±~ÐT^Ô_€FØˆ6×Ñ˜^°v·~±~ÐT^Ô_€Dà ˆV× Ñ ¨B¸qÑN_Ð`aÓNbÐMcÔd€FØ"ˆf×"Ñ"¨8¯<©<À$ÔG€GàˆV×ÑØò
ð ô€Fð !�× Ñ ¨B°dÀBÔG€IØˆF×Ñ 4°Ô4€Eð #�&×"Ñ"ØØ!×)Ñ)Ø!×%Ñ%Øô	€Kð )�v×(Ñ(Ø-Ø—.‘.ØØØ*ØJôÐð #�×"Ñ"Ø× Ñ Ø—/‘/ØØ'ô	€J÷
ò 
r   r  c                   ó   — e Zd ZdZdZdZy)ÚCollectionEmailSource)r   r  )ÚoutlookÚOutlookr^   N)r   r   r   r  ÚOUTLOOKrh   r!   r   r   r  r  N  s   „ Ø
€CØ"€GØ�Er   r  c                   ó   — e Zd ZdZdZy)ÚCollectionEmailDirection)ÚoutboundÚOutbound)ÚinboundÚInboundN)r   r   r   ÚOUTBOUNDÚINBOUNDr!   r   r   r"  r"  T  s   „ Ø%€HØ"�Gr   r"  c                   ó    — e Zd ZdZdZdZdZdZy)ÚCollectionEmailStatus)ÚdraftÚDraft)ÚqueuedÚQueued)ÚsentÚSent)ÚfailedÚFailed)ÚreceivedÚReceivedN)r   r   r   ÚDRAFTÚQUEUEDÚSENTÚFAILEDÚRECEIVEDr!   r   r   r*  r*  Y  s   „ Ø€EØ€FØ€DØ€FØ%�Hr   r*  Úfilenamec                 ó@   — d| j                   › d| j                  › d|› �S )Nzcollection_emails/ú/)Ú	tenant_idÚcase_id)Úinstancer:  s     r   Ú_collection_email_upload_tor@  a  s)   € à × 2Ñ 2Ð3°1°X×5EÑ5EÐ4FÀaÈÀzÐRÐRr   c                   ó¢  — e Zd ZdZ ej
                  eej                  d¬«      Z ej
                  e	ej                  d¬«      Z
 ej
                  eej                  dddd¬«      Z ej                  d	ej                   ej"                  ¬
«      Z ej                  d	ej                   ej(                  ¬
«      Z ej                  d	ej                   ej.                  d¬«      Z ej                  ddd¬«      Z ej4                  dd¬«      Z ej4                  dd¬«      Z ej4                  dd¬«      Z ej                  ddd¬«      Z ej>                  dd¬«      Z  ej>                  dd¬«      Z! ej>                  dd¬«      Z" ej                  ddd¬«      Z# ej                  ddd¬«      Z$ ej                  ddd¬«      Z% ejL                  ddd¬«      Z' ej>                  dd¬«      Z( ejR                  e*dd¬«      Z+ ej4                  e,d¬«      Z- ej
                  e.j^                  ej                  dd¬«      Z0 G d„ d«      Z1de2fd„Z3y)ÚCollectionEmailu°   
    Email liÃ© Ã  un dossier de recouvrement.
    - source=acx: envoyÃ© depuis ACX
    - source=outlook: preuve attachÃ©e (fichier .eml) d'un email envoyÃ© depuis Outlook
    Úcollection_emailsr„   ÚemailsTÚemail_evidencesu'   Action timeline associÃ©e (type=email).r  r�   r  rŽ   éÿ   r™   rÝ   )r‹   rŠ   rš   r  r—   )Ú	upload_torŠ   r‹   )r   r‹   Úcreated_collection_emailsrœ   c                   óˆ   — e Zd Z ej                  g d¢¬«       ej                  ddg¬«       ej                  ddg¬«      gZy)úCollectionEmail.Meta)rŸ   râ   r$   r£   rŸ   r¡   ÚsourceNrå   r!   r   r   r"   rJ  ›  s>   „ àˆF�L‰LÒ @ÔAØˆF�L‰L ¨8Ð 4Ô5ØˆF�L‰L ¨8Ð 4Ô5ð
‰r   r"   r   c                 óT   — | j                   j                  › d| j                  xs d› �S )Nrç   z(email))râ   r    Úsubjectr­   s    r   r¾   zCollectionEmail.__str__¢  s(   € Ø—)‘)×%Ñ%Ð& c¨$¯,©,Ò*C¸)Ð)DÐEÐEr   N)4r   r   r   r¿   r   rÀ   rÁ   rÂ   rŸ   r‚   râ   rÙ   rÅ   ÚactionrÃ   r  r�   r  rK  r"  r'  Ú	directionr*  r5  r¡   Úfrom_addressÚ	JSONFieldÚtoÚccÚbccrM  rÒ   Ú	body_textÚ	body_htmlrÓ   ÚproviderÚprovider_message_idÚ
message_idr#   Úsent_atÚerror_messageÚ	FileFieldr@  Úraw_emlÚdictÚmetar   rÌ   rÔ   r"   r×   r¾   r!   r   r   rB  rB  f  sk  „ ñð
 ˆV×Ñ˜|°v·~±~ÐTgÔh€FØˆ6×Ñ˜^°v·~±~ÐT\Ô]€DØˆV×ÑØØ—/‘/ØØØ&Ø;ô€Fð ˆV×Ñ¨Ð5J×5RÑ5RÐ\q×\uÑ\uÔv€FØ �× Ñ ¨BÐ8P×8XÑ8XÐbz÷  cDñ  cDô  E€IØˆV×Ñ¨Ð5J×5RÑ5RÐ\q×\wÑ\wð  CGô  H€Fà#�6×#Ñ#¨s¸$ÈÔK€LØ	ˆ×	Ñ	 ¨4Ô	0€BØ	ˆ×	Ñ	 ¨4Ô	0€BØ
ˆ&×
Ñ
 ¨DÔ
1€Càˆf×Ñ¨#°TÀ2ÔF€GØ �× Ñ  t°RÔ8€IØ �× Ñ  t°RÔ8€Ið ˆF×Ñ 4°Ô4€Eàˆv×Ñ¨2°TÀ2ÔF€HØ*˜&×*Ñ*°cÀÈrÔRÐð "�×!Ñ!¨S¸ÀbÔI€Jà"ˆf×"Ñ"¨°DÀ4ÔH€GØ$�F×$Ñ$¨4¸Ô<€Màˆf×ÑÐ)DÈ4ÐW[Ô\€Gàˆ6×Ñ D°Ô5€Dà"�×"Ñ"Ø× Ñ Ø—/‘/ØØ0ô	€J÷
ñ 
ðF˜ô Fr   rB  c                   ó�  — e Zd Z ej                  eej                  d¬«      Z ej                  eej                  d¬«      Z	 ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  d	¬
«      Z ej                  e¬«      Z ej                  ej&                  ej(                  dd¬«      Z G d„ d«      Zy)ÚCollectionEmailAttachmentÚcollection_email_attachmentsr„   ÚattachmentsrF  Tr™   rÝ   é   r   )r   )rG  Ú$created_collection_email_attachmentsrœ   c                   ó8   — e Zd Z ej                  g d¢¬«      gZy)úCollectionEmailAttachment.Meta)rŸ   rT   r$   r£   Nrå   r!   r   r   r"   rg  ·  s   „ àˆF�L‰LÒ AÔBð
‰r   r"   N)r   r   r   r   rÀ   rÁ   rÂ   rŸ   rB  rT   rÃ   r:  Úcontent_typeÚPositiveIntegerFieldÚsizer\  r@  Úfiler   rÌ   rÅ   rÔ   r"   r!   r   r   ra  ra  ¦  s»   „ ØˆV×Ñ˜|°v·~±~ÐTrÔs€FØˆF×Ñ˜o¸¿¹ÐVcÔd€Eàˆv×Ñ¨3°dÀBÔG€HØ#�6×#Ñ#¨s¸$ÈÔK€LØ&ˆ6×&Ñ&¨qÔ1€Dàˆ6×ÑÐ&AÔB€Dà"�×"Ñ"Ø× Ñ Ø—/‘/ØØ;ô	€J÷
ò 
r   ra  c                 óš  — t        | dd «      }|r|S t        | dd «      }|r|j                  sy d }dD ]  }	 t        j                  |d«      }|r nŒ |sy 	 |j
                  j                  d«      j                  |d¬«      j                  d«      j                  «       }|r|j                  S d S # t        $ r Y Œˆw xY w# t        $ r Y y w xY w)NrŸ   Úuser)ÚaccountsÚtenancyÚ
MembershipÚactive)rm  r¡   z-id)r   Úis_authenticatedr   Ú	get_modelÚ	ExceptionÚobjectsÚselect_relatedÚfilterÚorder_byÚfirstrŸ   )ÚrequestrŸ   rm  rp  Ú	app_labelÚms         r   Úget_active_tenantr}  À  sé   € ä�W˜h¨Ó-€FÙØˆô �7˜F DÓ)€DÙ�t×,Ò,Øð €JØ,ò ˆ	ð	ÜŸ™¨	°<Ó@ˆJÙÙð ðñ Øð
à×Ñß‰^˜HÓ%ß‰V˜ hˆVÓ/ß‰X�e‹_ß‰U‹Wð 	
ñ ˆq�x‰xÐ& $Ð&øô ò 	Ùð	ûô ò Ùðús*   ¶B/ÁAB> Â-B> Â/	B;Â:B;Â>	C
Ã	C
c                   ó(   ‡ — e Zd ZdZd„ Zˆ fd„Zˆ xZS )ÚTenantScopedViewSetMixinzO
    Force le scope tenant pour list/retrieve + impose tenant pour create.
    c                 óN   — t        | j                  «      }|st        ddi«      ‚|S )NrŸ   z(Tenant context missing for this request.)r}  rz  r	   )r®   rŸ   s     r   Ú
get_tenantz#TenantScopedViewSetMixin.get_tenanté  s)   € Ü" 4§<¡<Ó0ˆÙÜ! 8Ð-WÐ"XÓYÐYØˆr   c                 ó„   •— t         ‰| �  «       }	 |j                  | j                  «       ¬«      S # t        $ r |cY S w xY w)N)rŸ   )ÚsuperÚget_querysetrw  r�  rt  )r®   ÚqsÚ	__class__s     €r   r„  z%TenantScopedViewSetMixin.get_querysetï  sA   ø€ Ü‰WÑ!Ó#ˆð	Ø—9‘9 D§O¡OÓ$5�9Ó6Ð6øÜò 	ØŠIð	ús   ‘1 ±?¾?)r   r   r   r¿   r�  r„  Ú__classcell__)r†  s   @r   r  r  å  s   ø„ ñò÷ð r   r  N))Údecimalr   Údjango.appsr   Údjango.confr   Údjango.core.validatorsr   Ú	django.dbr   Údjango.utilsr   Úrest_framework.exceptionsr	   r×   r   rÁ   rÇ   rÊ   rÄ   rÆ   ÚModelr   ÚTextChoicesr'   rD   rO   rj   r‚   rÙ   rí   rÿ   r  r  r"  r*  r@  rB  ra  r}  r  r!   r   r   ú<module>r‘     s�  ðõ å Ý  Ý 4Ý Ý !Ý 5ð4 ð 4¨cð 4°có 4ñ Ð/Ð1AÓB€ÙÐ 5Ð7MÓN€ÙÐ/Ð1AÓB€Ø%€Ø%€ô�v—|‘|ô ô
)˜6×-Ñ-ô 
)ô˜×+Ñ+ô ô	˜6×-Ñ-ô 	ô
˜f×0Ñ0ô 
ôx3Ð%ô x3ôv=Ð'ô =ôBOÐ%ô Oô@J˜×*Ñ*ô Jô6
Ðô 6
ô~˜F×.Ñ.ô ô#˜v×1Ñ1ô #ô
&˜F×.Ñ.ô &ðS°Cð S¸Có Sô
=FÐ&ô =Fô@
Ð 0ô 
ò4"÷Jò r   