
    -njz@                        d dl mZ d dlmZ ddlmZmZmZmZm	Z	m
Z
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 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 G d dej                        Z G d  d!ej                        Zy")#    )serializers)User   )MemberAnnouncementEventMeeting	TaxMaster	MemberTaxTransaction)Decimalc                   $    e Zd ZdZ G d d      Zy)ChildSerializerz8Serializer for Child model (now backed by Member schema)c                       e Zd ZeZg dZy)ChildSerializer.Meta)idnamename_tadate_of_birthgendermarital_statusN__name__
__module____qualname__r   modelfields     =/var/www/kalinger_portal/trust-backend/members/serializers.pyMetar   
   s    Wr   r!   N)r   r   r   __doc__r!   r   r   r    r   r      s    BX Xr   r   c                   J    e Zd Z ej                  ddd      Z G d d      Zy)TaxMasterSerializerzaccount_head.nameTN)source	read_onlydefaultc                       e Zd ZeZdZy)TaxMasterSerializer.Meta__all__N)r   r   r   r
   r   r   r   r   r    r!   r)          r   r!   )r   r   r   r   	CharFieldaccount_head_namer!   r   r   r    r$   r$      s&    ---5HTXbfg r   r$   c                       e Zd Z ej                  dd      Z ej                  dddd      Z ej                         Z	 G d d	      Z
y
)MemberTaxSerializerztax.nameTr%   r&   ztax.base_amount
      )r%   r&   
max_digitsdecimal_placesc                       e Zd ZeZdZy)MemberTaxSerializer.Metar*   N)r   r   r   r   r   r   r   r   r    r!   r6      r+   r   r!   N)r   r   r   r   r,   tax_nameDecimalFieldbase_amountReadOnlyFieldpayment_statusr!   r   r   r    r/   r/      sK    ${$$J$GH*+**2Ct`bstuK.[..0N r   r/   c                        e Zd Z G d d      Zy)TransactionSerializerc                       e Zd ZeZdZy)TransactionSerializer.Metar*   N)r   r   r   r   r   r   r   r   r    r!   r?      s    r   r!   Nr   r   r   r!   r   r   r    r=   r=      s     r   r=   c                   *   e Zd ZdZ eddd      Z edd      Z edd      Z	 e
j                         Z e
j                         Z e
j                         Z e
j                         Z e
j                   dd      Z G d d	      Zd
 Zd Zd Zd Zy)MemberSerializerzSerializer for Member modelchildren_setTr%   manyr&   rE   r&   zuser.usernamer0   c                        e Zd ZeZg dZg dZy)MemberSerializer.Meta)$r   	member_idreference_idusernamer   r   phoner   address
address_taaddress_cityaddress_city_tafatherfather_namefather_name_tamother_namemother_name_taspouse_namespouse_name_ta
annual_taxamount_paid
amount_duer;   	tax_countold_balance	is_active
is_expiredis_family_headpassword_reset_requiredpending_updateprofile_update_statuschildrentaxestransactions
created_at
updated_at)rI   rZ   r`   rf   rg   N)r   r   r   r   r   r   read_only_fieldsr   r   r    r!   rH   /   s    
 nr   r!   c                     t        |dd       }|r0|j                         r t        d |j                         D              S |j                  S )Nrd   c              3   4   K   | ]  }|j                     y wNrZ   .0taxs     r    	<genexpr>z2MemberSerializer.get_amount_due.<locals>.<genexpr>D        =#s~~=   getattrexistssumallrZ   selfobjrd   s      r    get_amount_duezMemberSerializer.get_amount_dueA   <    Wd+U\\^====~~r   c                     t        |dd       }|r0|j                         r t        d |j                         D              S |j                  S )Nrd   c              3   4   K   | ]  }|j                     y wrk   	total_taxrm   s     r    rp   z2MemberSerializer.get_annual_tax.<locals>.<genexpr>J        <s}}<rr   rt   ru   rv   rw   rX   rx   s      r    get_annual_taxzMemberSerializer.get_annual_taxG   <    Wd+U\\^<		<<<~~r   c                     t        |dd       }|r0|j                         r t        d |j                         D              S |j                  S )Nrd   c              3   4   K   | ]  }|j                     y wrk   rY   rm   s     r    rp   z3MemberSerializer.get_amount_paid.<locals>.<genexpr>P        >3s>rr   rt   ru   rv   rw   rY   rx   s      r    get_amount_paidz MemberSerializer.get_amount_paidM   <    Wd+U\\^>%))+>>>r   c                 `    | j                  |      }| j                  |      }|dk  ry|dkD  ryyNr   PaidPartialPendingr{   r   ry   rz   duepaids       r    get_payment_statusz#MemberSerializer.get_payment_statusS   9    !!#&##C(!8AXr   N)r   r   r   r"   r   rc   r/   rd   r=   re   r   SerializerMethodFieldrZ   rX   rY   r;   r,   rK   r!   r{   r   r   r   r   r   r    rB   rB   $   s    %n44PHTT:E(ddCL2224J2224J3+335K6[668N${$$OtLHn n$r   rB   c                   r    e Zd ZdZ edd      Z ej                  ddddd      Z G d d      Z	d	 Z
d
 Zy)MemberCreateSerializerz2Serializer for creating a new member with childrenTFrE   required   )
write_onlyr   
min_lengthallow_blank
allow_nullc                       e Zd ZeZg dZy)MemberCreateSerializer.Meta)r   r   rL   passwordr   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r[   r\   rJ   rc   Nr   r   r   r    r!   r   b   s    
r   r!   c                    |syddl }|j                         j                  dd      }|j                  d      r|dd }n$|j                  d      rt	        |      dk(  r|d	d }|j                  d
|      st        j                  d      t        j                  j                  |      j                         rt        j                  d      |S )z1Normalize phone to 10 digits and check uniquenessNr     +91   91   r2   z^\d{10}$z'Phone number must be exactly 10 digits.)rL   z/A member with this phone number already exists.)restripreplace
startswithlenmatchr   ValidationErrorr   objectsfilterru   )ry   valuer   s      r    validate_phonez%MemberCreateSerializer.validate_phonen   s    %%c2.E"!"IEd#E
b(8!"IExxU+--.WXX>>  u -446--._``r   c                 *   |j                  dg       }|j                  dd      }d|d<   d|d<   d|d<   t        j                  j                  di |}|rA|j                  r5|j                  j                  |       |j                  j                          |D ]x  }t        j                  j                  ||d	   |j                  d
d      |d   |j                  d      |j                  dd      |j                  |j                  dddddd       z |S )z,Create member with user account and childrenrc   r   NTr_   r]   Fr^   r   r   r   r   r   r   	Unmarried        rQ   r   r   r   r   r   rM   rN   r_   r]   r^   rL   userrX   r   )
popr   r   creater   set_passwordsavegetrM   rN   )ry   validated_datachildren_datar   member
child_datas         r    r   zMemberCreateSerializer.create   s   &**:r:!%%j$7 ,0'(&*{#',|$ &&88 KK$$X.KK ( 	JNN!!'"y"5(9!~~h/)~~.>L!,,$  " 	$ r   N)r   r   r   r"   r   rc   r   r,   r   r!   r   r   r   r   r    r   r   ]   sB    <D59H${$$uQR`dquvH

 

$%r   r   c                   >    e Zd ZdZ edd      Z G d d      Zd Zy)	MemberUpdateSerializerz*Serializer for updating member informationTFr   c                       e Zd ZeZg dZy)MemberUpdateSerializer.Meta)r   r   r   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r[   r\   rJ   r]   r^   r_   ra   rb   rc   Nr   r   r   r    r!   r          

r   r!   c                 4   |j                  dd       }| j                  j                  d      }|xr= |j                  xr/ |j                  j                  xs t        |j                  dd      }d}|r@|j                  r4	 |j                  j                  }|j                  dk(  xr |j                  }|s|rSd |_
        d|_        |j                         D ]  \  }}	t        |||	        |j                          ||j                  j!                         D 
ci c]  }
|
j"                  |
 }}
g }|D ]  }|j                  d      }|r||v r||   }|j                  d|j$                        |_        |j                  d	|j&                        |_        |j                  d
|j(                        |_        |j                  d|j*                        |_        |j                  d|j,                        |_        |j.                  |_        |j0                  |_        |j                          |j3                  |j"                         t4        j6                  j9                  ||d   |j                  d	d      |d
   |j                  d      |j                  dd      |j.                  |j0                  dddd d d      }|j3                  |j"                          |j                         D ]  \  }}||vs|j;                           |S i }|j                         D ]a  \  }}|dk(  r|r|j"                  |d<   t=        |d      r|j?                  d      ||<   >tA        |tB              rtE        |      ||<   ]|||<   c g }|]|D ]X  }i }|j                         D ]0  \  }}|d
k(  r!t=        |d      r|j?                  d      ||<   ,|||<   2 |j3                  |       Z ||d|_
        d|_        |j                          |S # t        $ r Y ^w xY wc c}
w )Nrc   requestis_superuserF
ACCOUNTANTNoner   r   r   r   r   r   r   r   Tr   r   rQ   strftimez%Y-%m-%d)r   rc   r   )#r   contextr   r   is_staffrt   staff_profileroler]   	Exceptionra   rb   itemssetattrr   rC   rw   r   r   r   r   r   r   rM   rN   appendr   r   r   deletehasattrr   
isinstancer   float)ry   instancer   r   r   r   is_accountantprofileattrr   cexisting_childrenupdated_ids
child_itemchild_idchild	new_childserializable_fieldskeyvalserializable_childrenc_dictckcvs                           r    updatezMemberUpdateSerializer.update   s   &**:t<,,""9-ww||w1F1F1v'RYR^R^`npuJvw||!,,44 ' < RARAR }&*H#-3H*  .335 /e$./MMO (6>6K6K6O6O6Q$RQTT1W$R!$R "/ 9J)~~d3HH0A$A 1( ;%/^^FEJJ%G
(2y%--(P.8nn_eNaNa.b+'1~~h'M/9~~>NPUPdPd/e,(0(8(8+3+>+>(

#**5884$*NN$9$9#+!+F!3$.NN9b$A*4_*E#->>(#;+5>>:JK+X$,$4$4'/':':+0&*',"&!%'+ %: %	  $**9<<8=9@ (9'>'>'@ 'OHe{2'D ; #%*002 3S(?s47FF'1S*-/2||J/G',W-/4Sz',/2',3 %'!(* 9EF"'++- ,B0WR5L)+Z)@F2J)+F2J	,
 *0089 .1'H# .7H*MMOi   %Ss    3P P	PPN)r   r   r   r"   r   rc   r!   r   r   r   r    r   r      s!    4D59H
 
_r   r   c                      e Zd ZdZ ej
                         Z ej
                         Z eddd      Z	 e
dd      Z ej
                         Z ej
                         Z ej
                         Z G d d      Zd Zd	 Zd
 Zd Zd Zy)MemberListSerializerz*Simplified serializer for member list viewrC   TrD   rF   c                       e Zd ZeZg dZy)MemberListSerializer.Meta)!r   rI   rJ   r   r   rL   rX   r[   r\   r   rM   rN   rO   rP   rY   rZ   r;   rQ   rR   rS   rT   rU   rV   rW   ra   rb   rc   children_countrd   r]   r^   r_   r`   Nr   r   r   r    r!   r   &  r   r   r!   c                 6    |j                   j                         S rk   )rC   count)ry   rz   s     r    get_children_countz'MemberListSerializer.get_children_count4  s    %%''r   c                     t        |dd       }|r0|j                         r t        d |j                         D              S |j                  S )Nrd   c              3   4   K   | ]  }|j                     y wrk   rl   rm   s     r    rp   z6MemberListSerializer.get_amount_due.<locals>.<genexpr>:  rq   rr   rs   rx   s      r    r{   z#MemberListSerializer.get_amount_due7  r|   r   c                     t        |dd       }|r0|j                         r t        d |j                         D              S |j                  S )Nrd   c              3   4   K   | ]  }|j                     y wrk   r   rm   s     r    rp   z6MemberListSerializer.get_annual_tax.<locals>.<genexpr>@  r   rr   r   rx   s      r    r   z#MemberListSerializer.get_annual_tax=  r   r   c                     t        |dd       }|r0|j                         r t        d |j                         D              S |j                  S )Nrd   c              3   4   K   | ]  }|j                     y wrk   r   rm   s     r    rp   z7MemberListSerializer.get_amount_paid.<locals>.<genexpr>F  r   rr   r   rx   s      r    r   z$MemberListSerializer.get_amount_paidC  r   r   c                 `    | j                  |      }| j                  |      }|dk  ry|dkD  ryyr   r   r   s       r    r   z'MemberListSerializer.get_payment_statusI  r   r   N)r   r   r   r"   r   r   r;   r   r   rc   r/   rd   rZ   rX   rY   r!   r   r{   r   r   r   r   r   r    r   r     s    46[668N6[668Nn44PHTT:E2224J2224J3+335K
 
(r   r   c                   d    e Zd ZdZ ej
                  d      Z ej
                  dd      Zd Zy)UserLoginSerializerzSerializer for user loginTr   r   r   c                     |j                         j                  dd      }|j                  d      r|dd }|S |j                  d      rt        |      dk(  r|dd }|S )	zNormalize phone to 10 digitsr   r   r   r   Nr   r   r2   )r   r   r   r   ry   r   s     r    r   z"UserLoginSerializer.validate_phoneX  se    %%c2.E"!"IE  d#E
b(8!"IEr   N)	r   r   r   r"   r   r,   rL   r   r   r   r   r    r   r   S  s0    #!K!!40E${$$dtDHr   r   c                   b    e Zd ZdZ ej
                  dd      Z ej
                  ddd      Zy)PasswordChangeSerializerz Serializer for changing passwordTr   r   )r   r   r   N)r   r   r   r"   r   r,   old_passwordnew_passwordr   r   r    r  r  b  s0    *(;(($4HL(;(($4TUVLr   r  c                   <    e Zd ZdZ ej
                  d      Zd Zy)AdminPasswordResetSerializerzGSerializer for admin to reset member password to default (phone number)Tr   c                     	 t         j                  j                  |       |S # t         j                  $ r t	        j
                  d      w xY w)zValidate that member exists)r   zMember not found)r   r   r   DoesNotExistr   r   r  s     r    validate_member_idz/AdminPasswordResetSerializer.validate_member_idl  sO    	BNN%(  "" 	B--.@AA	Bs	    $ )AN)r   r   r   r"   r   IntegerFieldrI   r  r   r   r    r  r  h  s    Q((($7Ir   r  c                        e Zd Z G d d      Zy)AnnouncementSerializerc                       e Zd ZeZg dZy)AnnouncementSerializer.Meta)r   titledescriptiondater]   rf   rg   N)r   r   r   r   r   r   r   r   r    r!   r  v  s    `r   r!   Nr@   r   r   r    r  r  u  s    a ar   r  c                        e Zd Z G d d      Zy)EventSerializerc                       e Zd ZeZg dZy)EventSerializer.Meta)	r   r  r  timelocationr  r]   rf   rg   N)r   r   r   r   r   r   r   r   r    r!   r  |  s    tr   r!   Nr@   r   r   r    r  r  {  s    u ur   r  c                        e Zd Z G d d      Zy)MeetingSerializerc                       e Zd ZeZg dZy)MeetingSerializer.Meta)r   r  r  r  agendar]   rf   rg   N)r   r   r   r	   r   r   r   r   r    r!   r    s    cr   r!   Nr@   r   r   r    r  r    s    d dr   r  N)rest_frameworkr   django.contrib.auth.modelsr   modelsr   r   r   r	   r
   r   r   decimalr   ModelSerializerr   r$   r/   r=   rB   r   r   r   
Serializerr   r  r  r  r  r  r   r   r    <module>r%     s%   & + [ [ [ Xk11 X+55 +55 K77 6{22 6rH[88 HVq[88 qh4;66 4n+00 W{55 W
;#9#9 
a[88 auk11 ud33 dr   