Ë
    
.Úi8  ã                  óô   — 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  G d„ dej                  «      Z G d	„ d
ej                  «      Z G d„ dej                  «      Z G d„ dej                  «      Zy)é    )Úannotations)ÚDecimal)Úsettings)Úmodels)ÚQ)Útimezonec                  ó6  ‡ — e Zd ZdZ G d„ dej
                  «      Z ej                  dej                  d¬«      Z	 ej                  d¬«      Z ej                  d	ej                  ej                  ¬
«      Z ej                  dd¬«      Z ej                   d¬«      Z ej$                  dd¬«      Z ej                  ej*                  ej,                  ddd¬«      Z ej0                  d¬«      Z ej0                  d¬«      Z G d„ d«      Zˆ fd„Zdd„Zˆ xZS )ÚTreasuryAccountuC  
    Compte de trÃ©sorerie minimaliste (banque / caisse / mobile money) par tenant.
    Sert Ã  journaliser les entrÃ©es/sorties rÃ©elles qui transitent par ACX.

    âš ï¸� Ce n'est pas un plan comptable complet : uniquement trÃ©sorerie (entrÃ©es/sorties),
    alignÃ© sur une approche iMX "transactionnel / dossier".
    c                  ó   — e Zd ZdZdZdZdZy)úTreasuryAccount.Type)ÚbankÚBanque)ÚcashÚCaisse)Úmobile_moneyzMobile Money©ÚotherÚAutreN)Ú__name__Ú
__module__Ú__qualname__ÚBANKÚCASHÚMOBILE_MONEYÚOTHER© ó    ú//var/www/html/acx/treasury_management/models.pyÚTyper      s   „ ØˆØˆØ5ˆØ ‰r   r   útenancy.TenantÚtreasury_accounts©Ú	on_deleteÚrelated_nameéx   )Ú
max_lengthé   ©r&   ÚchoicesÚdefaulté   ÚXAF©r&   r*   F©r*   T)ÚblankÚnullÚcreated_treasury_accounts©r#   r0   r/   r$   ©Úauto_now_add©Úauto_nowc                  óR   — e Zd ZddgZ ej
                  ddg ed¬«      d¬«      gZy	)
úTreasuryAccount.Metaz-is_defaultÚnameÚtenantÚcurrencyT©Ú
is_defaultÚ*uniq_default_treasury_account_per_currency©ÚfieldsÚ	conditionr9   N©r   r   r   Úorderingr   ÚUniqueConstraintr   Úconstraintsr   r   r   ÚMetar8   +   s8   „ Ø! 6Ð*ˆð $ˆF×#Ñ#Ø  *Ð-Ù tÔ,ØAôð
‰r   rF   c                óþ   •— t        ‰| �  |i |¤Ž | j                  rat        j                  j                  | j                  | j                  d¬«      j                  | j                  ¬«      j                  d¬«       y y )NT)r:   r;   r=   )ÚpkFr<   )ÚsuperÚsaver=   r
   ÚobjectsÚfilterr:   r;   ÚexcluderH   Úupdate)ÚselfÚargsÚkwargsÚ	__class__s      €r   rJ   zTreasuryAccount.save6   ss   ø€ Ü‰‰�dÐ%˜fÒ%à�?Š?Ü×#Ñ#×*Ñ*°$·+±+ÈÏÉÐbfÐ*Óg×oÑoÐsw×szÑszÐoÓ{÷  Cñ  CØ ð Cõ ð r   c                ó:   — | j                   › d| j                  › d�S )Nú (ú))r9   r:   ©rO   s    r   Ú__str__zTreasuryAccount.__str__>   s   € Ø—)‘)�˜B˜tŸ{™{˜m¨1Ð-Ð-r   ©ÚreturnÚstr)r   r   r   Ú__doc__r   ÚTextChoicesr   Ú
ForeignKeyÚCASCADEr:   Ú	CharFieldr9   r)   r   Útyper;   ÚBooleanFieldr=   Ú	JSONFieldÚmetadatar   ÚAUTH_USER_MODELÚSET_NULLÚ
created_byÚDateTimeFieldÚ
created_atÚ
updated_atrF   rJ   rW   Ú__classcell__)rR   s   @r   r
   r
      s  ø„ ñô!ˆv×!Ñ!ô !ð ˆV×ÑÐ/¸6¿>¹>ÐXkÔl€Fàˆ6×Ñ sÔ+€DØˆ6×Ñ r°4·<±<ÈÏÉÔS€DØˆv×Ñ¨1°eÔ<€HØ$�×$Ñ$¨UÔ3€Jð  ˆv×Ñ d°Ô6€Hà"�×"Ñ"Ø× Ñ ¨F¯O©OÀ$ÈdÐa|ô€Jð &�×%Ñ%°4Ô8€JØ%�×%Ñ%¨tÔ4€J÷	
ñ 	
ô÷.r   r
   c                  óÈ  — e Zd ZdZ G d„ dej
                  «      Z G d„ dej
                  «      Z G d„ dej
                  «      Z ej                  dej                  d	¬
«      Z ej                  eej                  d¬
«      Z ej                  dej                   ¬«      Z ej                  dej                   ej$                  ¬«      Z ej(                  dd ed«      ¬«      Z ej                  dd¬«      Z ej0                  ej4                  ¬«      Z ej                  ddd¬«      Z ej                  ddd¬«      Z ej                  dej                  ddd	¬«      Z ej                  dej                  ddd	¬«      Z ej                  d ej                  ddd	¬«      Z  ej                  d!ej                  ddd	¬«      Z! ej                  d"ej                   ejD                  ¬«      Z# ej                  ddd¬#«      Z$ ejJ                  dd¬$«      Z& ej                  e'jP                  ejR                  ddd%¬«      Z* ej0                  d¬&«      Z+ G d'„ d(«      Z,d+d)„Z-y*),ÚTreasuryMovementuL  
    Journal minimaliste des entrÃ©es/sorties.
    - IN  : encaissement (argent entre sur un compte ACX)
    - OUT : dÃ©caissement (reversement client, remboursement, sortie)

    Source:
    - payment: entrÃ©e liÃ©e Ã  un Payment recouvrement
    - remittance: sortie liÃ©e Ã  une remise client
    - manual: ajustement manuel
    c                  ó   — e Zd ZdZdZy)úTreasuryMovement.Direction)Úinu   EntrÃ©e)ÚoutÚSortieN)r   r   r   ÚINÚOUTr   r   r   Ú	Directionrn   N   s   „ ØˆØ‰r   rt   c                  ó   — e Zd ZdZdZdZy)úTreasuryMovement.Status)Úpendingz
En attente)Ú	confirmedu	   ConfirmÃ©©Ú	cancelledu   AnnulÃ©N)r   r   r   ÚPENDINGÚ	CONFIRMEDÚ	CANCELLEDr   r   r   ÚStatusrv   R   s   „ Ø)ˆØ,ˆ	Ø*‰	r   r~   c                  ó   — e Zd ZdZdZdZdZy)úTreasuryMovement.Source)ÚpaymentÚPaiement)Ú
remittancezReversement client)ÚmanualÚManuelr   N)r   r   r   ÚPAYMENTÚ
REMITTANCEÚMANUALr   r   r   r   ÚSourcer€   W   s   „ Ø'ˆØ7ˆ
Ø#ˆØ ‰r   r‰   r    Útreasury_movementsr"   Ú	movementsé
   )r&   r)   é   r(   é   é   ú0.00©Ú
max_digitsÚdecimal_placesr*   r+   r,   r-   r.   éÿ   TÚ ©r&   r/   r*   r%   úcustomers.Customerr2   ú%collections_management.CollectionCaseúcollections_management.Paymentz#treasury_management.RemittanceBatchr'   )r&   r/   r0   ©r/   r*   Úcreated_treasury_movementsr3   c                  óR   — e Zd ZddgZ ej
                  ddg ed¬«      d¬«      gZy	)
úTreasuryMovement.Metaz-value_dateú-idr:   Ú
source_keyF)Úsource_key__isnullÚuniq_treasury_source_keyr?   NrB   r   r   r   rF   r�   }   s:   „ Ø! 5Ð)ˆà#ˆF×#Ñ#¨H°lÐ+CÉqÐdiÔOjð  rLô  Mð
‰r   rF   c           
     óˆ   — | j                   › d| j                  › d| j                  › d| j                  › d| j                  › d�
S )Nú rT   rU   )r:   Ú	directionÚamountr;   ÚaccountrV   s    r   rW   zTreasuryMovement.__str__ƒ   s@   € Ø—+‘+�˜a §¡Ð/¨q°·±°¸Q¸t¿}¹}¸oÈRÐPT×P\ÑP\È~Ð]^Ð_Ð_r   NrX   ).r   r   r   r[   r   r\   rt   r~   r‰   r]   r^   r:   r
   ÚPROTECTr¦   r_   r)   r¤   r|   ÚstatusÚDecimalFieldr   r¥   r;   rg   r   ÚnowÚ
value_dateÚlabelÚ	referenceÚcustomerÚcaser�   rƒ   rˆ   ÚsourcerŸ   Ú	TextFieldÚnotesr   rd   re   rf   rh   rF   rW   r   r   r   rl   rl   B   sc  „ ñ	ô�F×&Ñ&ô ô+�×#Ñ#ô +ô
!�×#Ñ#ô !ð ˆV×ÑÐ/¸6¿>¹>ÐXlÔm€Fàˆf×Ñ ¸6¿>¹>ÐXcÔd€GØ �× Ñ ¨B¸	×8IÑ8IÔJ€IØˆV×Ñ¨°V·^±^ÈV×M]ÑM]Ô^€Fà ˆV× Ñ ¨B¸qÉ'ÐRXË/ÔZ€FØˆv×Ñ¨1°eÔ<€Hà%�×%Ñ%¨h¯l©lÔ;€JàˆF×Ñ¨°4ÀÔD€EØ �× Ñ ¨C°tÀRÔH€Ið !ˆv× Ñ Ð!5ÀÇÁÐVZÐbfð  vJô  K€HØˆ6×ÑÐDÐPV×P^ÑP^ÐeiÐquð  EYô  Z€DØˆf×ÑÐ @ÈFÏNÉNÐaeÐmqð  AUô  V€GØ"�×"Ñ"Ð#HÐTZ×TbÑTbÐimÐuyð  I]ô  ^€JàˆV×Ñ¨°V·^±^ÈVÏ]É]Ô[€Fð "�×!Ñ!¨S¸À4ÔH€JàˆF×Ñ 4°Ô4€Eà"�×"Ñ"Ø× Ñ ¨F¯O©OÀ$ÈdÐa}ô€Jð &�×%Ñ%°4Ô8€J÷
ñ 
ô`r   rl   c                  óÜ  — e Zd ZdZ G d„ dej
                  «      Z ej                  dej                  d¬«      Z	 ej                  dej                  d¬«      Z ej                  eej                  d¬«      Z ej                  dd	¬
«      Z ej                   dd ed«      ¬«      Z ej                  dej&                  ej(                  ¬«      Z ej                  ddd¬«      Z ej.                  dd¬«      Z ej2                  dd¬«      Z ej                  ej8                  ej:                  ddd¬«      Z ej2                  d¬«      Z ej2                  d¬«      Z  G d„ d«      Z!dd„Z"y) ÚRemittanceBatchuÅ   
    Reversement client (remise) : dÃ©caissement vers un Customer.
    Minimaliste mais pro :
    - statut (draft/validated/paid/cancelled)
    - total
    - rÃ©fÃ©rence de paiement / virement
    c                  ó   — e Zd ZdZdZdZdZy)úRemittanceBatch.Status)ÚdraftÚ	Brouillon)Ú	validatedu   ValidÃ©)Úpaidu   PayÃ©ry   N)r   r   r   ÚDRAFTÚ	VALIDATEDÚPAIDr}   r   r   r   r~   r¶   �   s   „ Ø$ˆØ*ˆ	ØˆØ*‰	r   r~   r    Úremittancesr"   r—   r+   r,   r-   rŽ   r�   r�   r‘   r'   r(   r%   Tr•   r–   rš   )r0   r/   Úcreated_remittancesr2   r3   r5   c                  ó   — e Zd ZdgZy)úRemittanceBatch.Metarž   N)r   r   r   rC   r   r   r   rF   rÁ   ª   s	   „ Ø�7‰r   rF   c                ón   — d| j                   › d| j                  › d| j                  › d| j                  › �S )NzRemittance r£   )Úidr®   Úamount_totalr;   rV   s    r   rW   zRemittanceBatch.__str__­   s4   € Ø˜TŸW™W˜I Q t§}¡} o°Q°t×7HÑ7HÐ6IÈÈ4Ï=É=È/ÐZÐZr   NrX   )#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²   rg   Úpaid_atr   rd   re   rf   rh   ri   rF   rW   r   r   r   r´   r´   ‡   sY  „ ñô+�×#Ñ#ô +ð ˆV×ÑÐ/¸6¿>¹>ÐXeÔf€FØ ˆv× Ñ Ð!5ÀÇÁÐ^kÔl€Hàˆf×Ñ ¸6¿>¹>ÐXeÔf€Gàˆv×Ñ¨1°eÔ<€HØ&�6×&Ñ&°"ÀQÑPWÐX^ÓP_Ô`€LàˆV×Ñ¨°V·^±^ÈVÏ\É\ÔZ€FØ �× Ñ ¨C°tÀRÔH€IØˆF×Ñ 4°Ô4€Eà"ˆf×"Ñ"¨°DÔ9€Gà"�×"Ñ"Ø× Ñ ¨F¯O©OÀ$ÈdÐavô€Jð &�×%Ñ%°4Ô8€JØ%�×%Ñ%¨tÔ4€J÷ñ ô[r   r´   c                  óf  — e Zd Z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
 ed«      ¬«      Z ej                  dd¬«      Z ej"                  d¬«      Z G d„ d«      Zy)ÚRemittanceLineu–   
    Ligne de remise (optionnelle mais utile) : rattache la remise aux paiements.
    Permet d'Ã©viter de "reverser deux fois" le mÃªme paiement.
    Úlinesr"   r™   Úremittance_linesr˜   Tr2   rŽ   r�   r�   r‘   r•   rš   r3   c                  ó:   — e Zd Z ej                  ddgd¬«      gZy)úRemittanceLine.Metarƒ   r�   Úuniq_remittance_payment)r@   r9   N)r   r   r   r   rD   rE   r   r   r   rF   rË   À   s!   „ à#ˆF×#Ñ#¨L¸)Ð+DÐKdÔeð
‰r   rF   N)r   r   r   r[   r   r]   r´   r^   rƒ   r§   r�   r¯   r©   r   r¥   r±   r²   rg   rh   rF   r   r   r   rÇ   rÇ   ±   s·   „ ñð
 #�×"Ñ" ?¸f¿n¹nÐ[bÔc€JØˆf×ÑÐ @ÈFÏNÉNÐi{Ô|€GØˆ6×ÑÐDÐPV×P^ÑP^ÐeiÐquð  EWô  X€Dà ˆV× Ñ ¨B¸qÉ'ÐRXË/ÔZ€FØˆF×Ñ 4°Ô4€Eà%�×%Ñ%°4Ô8€J÷
ò 
r   rÇ   N)Ú
__future__r   Údecimalr   Údjango.confr   Ú	django.dbr   Údjango.db.modelsr   Údjango.utilsr   ÚModelr
   rl   r´   rÇ   r   r   r   ú<module>rÔ      sb   ðõ #å Ý  Ý Ý Ý !ô3.�f—l‘lô 3.ôlB`�v—|‘|ô B`ôJ'[�f—l‘lô '[ôT
�V—\‘\õ 
r   