
    Di                         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
 G d dej                        Zy)    )models)User)RegexValidatorc                       e Zd ZdZ ej
                  eej                  d      Z ej                  dddd      Z
 ej                  dd	
      Z edd      Z ej                  egddd      Z ej                  d      Z ej"                  d      Z ej                  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j,                  dddd      Z ej4                  dd       Z ej4                  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 )+Memberz9
    Model representing a Trust Member (Family Head)
    member_profile	on_deleterelated_name   Tz	Member ID)
max_lengthuniqueblankverbose_name   zMember Namer   r   z^\d{10}$z'Phone number must be exactly 10 digits.)regexmessage
   zPhone Number)
validatorsr   r   r   Date of Birthr   AddresszFather's NamezMother's Name)r   r   nullr   zSpouse's Name   g     @zAnnual Tax Amount)
max_digitsdecimal_placesdefaultr   g        zAmount Paidz
Amount DuezActive Member)r   r   zPassword Reset Requiredz&Set to True when admin resets password)r   r   	help_textauto_now_addauto_nowc                       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Metar%   ,   s    8%-r.   r0   c                 :    | j                    d| j                   dS )Nz ())r&   phoneselfs    r/   __str__zMember.__str__1   s    ))Btzzl!,,r.   c                    | j                   stt        j                  j                  d      j	                         }|r8|j                   r,	 t        |j                   j                  d      d         dz   }nd}d|d| _         ddl	m
}  |t        | j                               |t        | j                              z
  | _        t        | @  |i | y# t        t        f$ r d}Y pw xY w)	z>Auto-generate member_id and calculate amount due before savingz-id-   zKT-04dr   )DecimalN)	member_idr   objectsorder_byfirstintsplit
IndexError
ValueErrordecimalr;   str
annual_taxamount_paid
amount_duesupersave)r5   argskwargslastnumr;   	__class__s         r/   rJ   zMember.save4   s    ~~>>**51779Ddnn2237:;a?C "3s)_DN#!#doo"67'#dFVFVBW:XXd%f% #J/ Cs   
*C C('C(c                 D    | j                   dk  ry| j                  dkD  ryy)zReturn payment statusr   PaidPartialPending)rH   rG   r4   s    r/   payment_statuszMember.payment_statusE   s'     ??a!r.   )&r(   r)   r*   __doc__r   OneToOneFieldr   CASCADEuser	CharFieldr<   r&   r   phone_regexr3   	DateFielddate_of_birth	TextFieldaddressfather_namemother_namespouse_nameDecimalFieldrF   rG   rH   BooleanField	is_activepassword_reset_requiredDateTimeField
created_at
updated_atr0   r6   rJ   propertyrT   __classcell__)rO   s   @r/   r   r      s     6M]^D !  Bt4VabI 6sGD 9K F"T`noE$F$$/BMfI6G #&""cPK"&""cDWfgK"&""cDWfgK %$$1hexyJ%&%%AtbopK$$$1damnJ $##DOI1f11$Mf  s[  \ &%%48J%%%t4J. .
-&"  r.   r   c                   4   e Zd ZdZddgZ ej                  eej                  d      Z	 ej                  dd      Z ej                  d	
      Z ej                  ded      Z ej                  d      Z ej                  d      Z G d d      Zd Zy)Childz1
    Model representing children of a member
    )Malerm   )Femalern   childrenr	   r   z
Child Namer   r   r   r   Gender)r   choicesr   Tr    r"   c                       e Zd ZdgZdZdZy)
Child.Metar\   rl   ChildrenNr'   r-   r.   r/   r0   rs   a   s    #$(r.   r0   c                 N    | j                    d| j                  j                    dS )Nz (Child of r2   )r&   memberr4   s    r/   r6   zChild.__str__f   s$    ))K(8(8'9;;r.   N)r(   r)   r*   rU   GENDER_CHOICESr   
ForeignKeyr   rW   rv   rY   r&   r[   r\   genderrf   rg   rh   r0   r6   r-   r.   r/   rl   rl   P   s     	N
 VvjYF6sFD$F$$/BMV^RZ[F%%%48J%%%t4J) )
<r.   rl   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   r    r"   c                       e Zd ZdgZy)Announcement.Metaz-dateNr(   r)   r*   r+   r-   r.   r/   r0   r   s   s	    9r.   r0   c                     | j                   S Ntitler4   s    r/   r6   zAnnouncement.__str__v       zzr.   N)r(   r)   r*   rU   r   rY   r   r]   descriptionr[   daterc   rd   rf   rg   rh   r0   r6   r-   r.   r/   r{   r{   j   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   T r   r   r   r   r   r~   r    r"   c                       e Zd ZdgZy)
Event.Metar   Nr   r-   r.   r/   r0   r      	    8r.   r0   c                     | j                   S r   r   r4   s    r/   r6   zEvent.__str__   r   r.   N)r(   r)   r*   rU   r   rY   r   r[   r   timelocationr]   r   rc   rd   rf   rg   rh   r0   r6   r-   r.   r/   r   r   z   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~   r    r"   c                       e Zd ZdgZy)Meeting.Metar   Nr   r-   r.   r/   r0   r      r   r.   r0   c                     | j                   S r   r   r4   s    r/   r6   zMeeting.__str__   r   r.   N)r(   r)   r*   rU   r   rY   r   r[   r   r   r]   agendarc   rd   rf   rg   rh   r0   r6   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   N)	django.dbr   django.contrib.auth.modelsr   django.core.validatorsr   Modelr   rl   r{   r   r   r-   r.   r/   <module>r      sa     + 1HV\\ HV<FLL <46<<  FLL $fll r.   