
    -nje4                    v   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	 er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 G d dej                        Z G d dej                        Z G d dej                        Zy)    )annotations)TYPE_CHECKING)models)User)RegexValidator)QuerySetc                  8    e Zd ZU dZ ej
                  eej                  ddd      Z ej                  dddd      Z
 ej                  ddd	d
      Z ej                  ddd      Z ej                  dg ddd      Z ej                  dd      Z ej                  ddd	d      Z edd      Z ej                  egddddd      Z ej(                  ddd      Z ej,                  d      Z ej,                  dd	d       Z ej                  d!dd	d"      Z ej                  d!dd	d#      Z ej6                  d$ej                  ddd%      Z ej                  dddd&'      Z ej                  dddd	d()      Z ej                  dddd*'      Z ej                  ddd	d+      Z  ej                  dddd,'      Z! ej                  ddd	d-      Z" ejF                  dd.d/d01      Z$ ejF                  dd.d2d31      Z% ejF                  dd.d2d41      Z& ejN                  d5d67      Z( ejF                  dd.d2d81      Z) ejT                  d9d:7      Z+ ejT                  dd;7      Z, ejT                  d9d<7      Z- ejT                  dd=d>?      Z.d@dAgZ/dBdCgZ0 ej                  de/dddDE      Z1 ej                  de0dFdG      Z2 ejf                  dH      Z4 ejf                  dI      Z5e6rdJe7d%<    G dK dL      Z8dM Z9 fdNZ:e;dO        Z< xZ=S )PMemberz9
    Model representing a Trust Member (Family Head)
    Tmember_profile)	on_deletenullblankrelated_name   z	Member ID)
max_lengthuniquer   verbose_name    zReference ID)r   r   defaultr   zPending Profile Update)r   r   r   ))Noner   )Pendingr   )Approvedr   r   zProfile Update Status)r   choicesr   r      zMember Namer   r   zMember Name (Tamil)z^\d{10}$z'Phone number must be exactly 10 digits.)regexmessage
   zPhone Number)
validatorsr   r   r   r   r   zDate of BirthAddress)r   zAddress (Tamil))r   r   r   d   zCity / TownzCity / Town (Tamil)selfchildren_setzFather's Name)r   r   r   r   zFather's Name (Tamil))r   r   r   r   r   zMother's NamezMother's Name (Tamil)zSpouse's NamezSpouse's Name (Tamil)   g     @zAnnual Tax Amount
max_digitsdecimal_placesr   r           Amount Paid
Amount Dueg      ?z	Tax Count)r   r   zLast year Balance Tax AmountFzFamily HeadzActive MemberzDeceased / ExpiredzPassword Reset Requiredz&Set to True when admin resets password)r   r   	help_text)Maler-   )Femaler.   )	Unmarriedr/   )Marriedr0   Gender)r   r   r   r   r   r/   zMarital Statusauto_now_addauto_nowzmodels.Manager[Member]c                      e Zd ZdgZdZdZy)Member.MetanamezTrust MemberzTrust MembersN)__name__
__module____qualname__orderingr   verbose_name_plural     8/var/www/kalinger_portal/trust-backend/members/models.pyMetar7   V   s    8%-r?   rA   c                :    | j                    d| j                   dS )Nz ())r8   phoner#   s    r@   __str__zMember.__str__[   s    ))Btzzl!,,r?   c                   | j                   du }d}d}|sC	 t        j                  j                  | j                         }|j                  }|j
                  }| j                  r6| j                  j                  | _	        | j                  j                  | _        | j
                  red| _        d| _        | j                  }|r'd| _        t        | <  |i | |j!                          nt        | <  |i | |s|sddlm}  ||        y| j&                  s{d}	t        j                  j)                  d      j+                  d	d
      D ]7  }
	 |
j-                  d      }t/        |      dkD  rt1        |d         }||	kD  r|}	9 d|	dz   d| _        ddlm}  |t=        | j>                               |t=        | j@                              z
  | _!        t        | <  |i | | j                  r|sddlm"}  ||        y| j                  s|rddlm#}  ||        yyy# t        j                  $ r Y w xY w# t2        t4        t6        f$ r Y w xY w)zRAuto-generate member_id, calculate amount due and handle status/succession updatesNF)pk   )trigger_successionr   r   )	member_idrK   T)flat-zSRA-04dDecimal)provision_credentials)revoke_credentials)$rH   r
   objectsgetis_family_head
is_expiredDoesNotExistfatherr8   father_namename_tafather_name_ta	is_activeusersupersavedeleteutilsrJ   rK   excludevalues_listsplitlenint
ValueError	TypeError
IndexErrordecimalrP   str
annual_taxamount_paid
amount_duerQ   rR   )r#   argskwargsis_newold_is_family_headold_is_expiredorigr]   rJ   max_numm_idpartsnumrP   rQ   rR   	__class__s                   r@   r_   zMember.save^   s'   D"~~))TWW)5%)%8%8"!%
 ;;#{{//D"&++"5"5D ??"DN"'D 99D 	d-f-d-f- "&5"4( ~~G...<HH[_H`  JJsOE5zA~!%(m=&)G  $Wq[##67DN#!#doo"67'#dFVFVBW:XXd%f% '94!$'$$);1t$ *<$k && P #Iz: s$   AH  4H: H76H7:IIc                D    | j                   dk  ry| j                  dkD  ryy)zReturn payment statusr   PaidPartialr   rn   rm   rE   s    r@   payment_statuszMember.payment_status   s'     ??a!r?   )>r9   r:   r;   __doc__r   OneToOneFieldr   SET_NULLr]   	CharFieldrK   reference_id	JSONFieldpending_updateprofile_update_statusr8   rZ   r   phone_regexrD   	DateFielddate_of_birth	TextFieldaddress
address_taaddress_cityaddress_city_ta
ForeignKeyrX   rY   r[   mother_namemother_name_taspouse_namespouse_name_taDecimalFieldrl   rm   rn   
FloatField	tax_countold_balanceBooleanFieldrU   r\   rV   password_reset_requiredGENDER_CHOICESMARITAL_STATUS_CHOICESgendermarital_statusDateTimeField
created_at
updated_atr   __annotations__rA   rF   r_   propertyr~   __classcell__ry   s   @r@   r
   r
   
   s     6dRVeuvD !  Bt4VabI $6##rrXfgL &V%%4tJbcN,F,,  EI  SY  h  @ 6sGDf#T2TijG 9K F"TX\dh  xF  GE$F$$$dYMfI6G!!!bGXYJ#6##s$YfgL&f&&#T2\qrO VvtSWftuF"&""cDWfgK%V%%DtUWf}~N"&""cDWfgK%V%%D"[rsN"&""cDWfgK%V%%D"[rsN %$$1hexyJ%&%%AtbopK$$$1damnJ!!!#KHI%&%%At  cA  BK )V((]SN###DOI$$$UAUVJ1f11$Mf  s[  \ 	N
 	# V^4VZiqrF%V%%=S]h  xH  IN &%%48J%%%t4J ,,. .
-B%H  r?   r
   c                     e Zd ZdZ ej
                  d      Z ej                         Z ej                         Z
 ej                  d      Z ej                  d      Z ej                  d      Z G d d	      Zd
 Zy)Announcementz$Trust announcements managed by admin,  r   Tr   r2   r4   c                      e Zd ZdgZy)Announcement.Metaz-dateNr9   r:   r;   r<   r>   r?   r@   rA   r      s	    9r?   rA   c                    | j                   S NtitlerE   s    r@   rF   zAnnouncement.__str__       zzr?   N)r9   r:   r;   r   r   r   r   r   descriptionr   dater   r\   r   r   r   rA   rF   r>   r?   r@   r   r      s|    .F,E"&""$K6D###D1I%%%48J%%%t4J r?   r   c                  `   e Zd ZdZ ej
                  d      Z ej                         Z ej
                  ddd      Z	 ej
                  ddd      Z
 ej                  dd      Z ej                  d	      Z ej                  d
      Z ej                  d      Z G d d      Zd Zy)Eventz Upcoming events managed by adminr   r   2   Tr   r   r   r   r   r   r   r2   r4   c                      e Zd ZdgZy)
Event.Metar   Nr   r>   r?   r@   rA   r      	    8r?   rA   c                    | j                   S r   r   rE   s    r@   rF   zEvent.__str__   r   r?   N)r9   r:   r;   r   r   r   r   r   r   timelocationr   r   r   r\   r   r   r   rA   rF   r>   r?   r@   r   r      s    *F,E6D6rrBDv3dBGH"&""r:K###D1I%%%48J%%%t4J r?   r   c                  6   e Zd ZdZ ej
                  d      Z ej                         Z ej
                  ddd      Z	 ej                  dd      Z ej                  d	      Z ej                  d
      Z ej                  d      Z G d d      Zd Zy)MeetingzMeetings managed by adminr   r   r   Tr   r   r   r   r2   r4   c                      e Zd ZdgZy)Meeting.Metar   Nr   r>   r?   r@   rA   r      r   r?   rA   c                    | j                   S r   r   rE   s    r@   rF   zMeeting.__str__   r   r?   N)r9   r:   r;   r   r   r   r   r   r   r   r   agendar   r\   r   r   r   rA   rF   r>   r?   r@   r   r      s    #F,E6D6rrBDVD"5F###D1I%%%48J%%%t4J r?   r   c                     e Zd ZdZ ej
                  dd      Z ej                  dd      Z ej                  dd	d
      Z
 ej                  d      Z ej                  dej                  dddd      Z ej
                  dddgd      Z ej"                  dd      Z ej&                  d      Z ej&                  d      Z G d d      Zd Zy)	TaxMasterzAdmin defined tax eventsr   zTax Namer   Tr   r   r   r%   zBase Tax Amount per Countr'   r(   r   r   zaccounting.AccountHead
tax_eventszLinked Account Head)r   r   r   r   r   r   )Openr   )	Generatedr   r   r   r   r   )r   r   r2   r4   c                      e Zd ZdgZy)TaxMaster.Meta-created_atNr   r>   r?   r@   rA   r      	    !?r?   rA   c                :    | j                    d| j                   dS )Nz (Base: rC   )r8   base_amountrE   s    r@   rF   zTaxMaster.__str__   s     ))HT%5%5$6a88r?   N)r9   r:   r;   r   r   r   r8   r   r   r   r   r   r\   r   r   account_headstatusr   generated_dater   r   r   rA   rF   r>   r?   r@   r   r      s    "6sDD"&""r:K%&%%ATopK###D1I$6$$ FOOL*L
 V6FHb5cmstF%V%%4t<N%%%48J%%%t4J# #9r?   r   c                      e Zd 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	ddd      Z ej                  d	dd      Z ej                   d      Z ej                   d      Z G d d      Zd Z fdZed        Z xZS )	MemberTaxz/Tax generated for a member based on a TaxMastertaxesr   r   member_taxes   r%   zCalculated Tax Countr   r   zTotal Tax Amountr)   r*   r&   r+   Tr2   r4   c                      e Zd ZdZdgZy)MemberTax.Meta)membertaxr   N)r9   r:   r;   unique_togetherr<   r>   r?   r@   rA   r     s    +!?r?   rA   c                `    | j                   j                   d| j                  j                   S )Nz - )r   r8   r   rE   s    r@   rF   zMemberTax.__str__  s&    ++""#3txx}}o66r?   c                    ddl m}  |t        | j                               |t        | j                              z
  | _        t        |   |i | y )Nr   rO   )rj   rP   rk   	total_taxrm   rn   r^   r_   )r#   ro   rp   rP   ry   s       r@   r_   zMemberTax.save  sA    #!#dnn"56TEUEUAV9WWd%f%r?   c                D    | j                   dk  ry| j                  dkD  ryy)Nr   r{   r|   r   r}   rE   s    r@   r~   zMemberTax.payment_status  s%    ??a!r?   )r9   r:   r;   r   r   r   r
   CASCADEr   r   r   r   r   r   rm   rn   r   r   r   rA   rF   r_   r   r~   r   r   s   @r@   r   r      s    9VvgVF
&

In
]C###qQghI###r!RdeI%&%%AtbopK$$$1S_`J%%%48J%%%t4J# #7&
  r?   r   c                      e Zd ZdZddgZ ej                  eej                  d      Z	 ej                  e
ej                  ddd      Z ej                  dd	
      Z ej                  ded      Z ej                  ddd      Z ej"                  d      Z ej&                  dd      Z ej*                  d      Z G d d      Zd Z fdZ xZS )TransactionzPayments made by members)Paymentr   )Refundr   transactionsr   T)r   r   r   r   r   r%   )r'   r(   r   r   r   r"   )r   r   r   r2   r   r   c                      e Zd ZdgZy)Transaction.Metar   Nr   r>   r?   r@   rA   r   +  r   r?   rA   c                f    | j                    d| j                   d| j                  j                   S )Nz of z by )transaction_typeamountr   r8   rE   s    r@   rF   zTransaction.__str__.  s/    ''(T[[Mdkk>N>N=OPPr?   c                    | j                   s7dd l}d|j                         j                  d d j	                          | _         t        |   |i | y )Nr   zRCPT-   )receipt_numberuuiduuid4hexupperr^   r_   )r#   ro   rp   r   ry   s       r@   r_   zTransaction.save1  sL    ""$)$**,*:*:2A*>*D*D*F)G"HDd%f%r?   )r9   r:   r;   r   TRANSACTION_TYPESr   r   r
   r   r   r   
member_taxr   r   r   r   r   r   payment_dater   notesr   r   rA   rF   r_   r   r   s   @r@   r   r     s    "
 Vvn]F"""9Ucjnvz{J V  BqAF'v''2?PZcd%V%%TNN#6##6LF44E%%%48J# #Q& &r?   r   N)
__future__r   typingr   	django.dbr   django.contrib.auth.modelsr   django.core.validatorsr   django.db.modelsr   Modelr
   r   r   r   r   r   r   r>   r?   r@   <module>r     s    "    + 1)`V\\ `H6<<  FLL $fll "9 9. D&&,, &r?   