
    Di                        d dl mZ d dlmZ ddlmZmZmZmZ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y)    )serializers)User   )MemberChildAnnouncementEventMeetingc                   $    e Zd ZdZ G d d      Zy)ChildSerializerzSerializer for Child modelc                       e Zd ZeZg dZy)ChildSerializer.Meta)idnamedate_of_birthgenderN)__name__
__module____qualname__r   modelfields     =/var/www/kalinger_portal/trust-backend/members/serializers.pyMetar   	   s    :r   r   Nr   r   r   __doc__r   r   r   r   r   r      s    $; ;r   r   c                       e Zd ZdZ edd      Z ej                         Z ej                  dd      Z
 G d d      Zy)	MemberSerializerzSerializer for Member modelTmany	read_onlyzuser.username)sourcer"   c                        e Zd ZeZg dZg dZy)MemberSerializer.Meta)r   	member_idusernamer   phoner   addressfather_namemother_namespouse_name
annual_taxamount_paid
amount_duepayment_status	is_activepassword_reset_requiredchildren
created_at
updated_at)r&   r/   r2   r4   r5   N)r   r   r   r   r   r   read_only_fieldsr   r   r   r   r%      s    
 nr   r   N)r   r   r   r   r   r3   r   ReadOnlyFieldr0   	CharFieldr'   r   r   r   r   r   r      sA    %DD9H.[..0N${$$OtLHn nr   r   c                   n    e Zd ZdZ edd      Z ej                  ddd      Z G d d      Z	d	 Z
d
 Zy)MemberCreateSerializerz2Serializer for creating a new member with childrenTF)r!   required   )
write_onlyr;   
min_lengthc                       e Zd ZeZg dZy)MemberCreateSerializer.Meta)
r   r(   passwordr   r)   r*   r+   r,   r-   r3   Nr   r   r   r   r   r   r   r   r   r   r@   $       
r   r   c                    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 uniquenessr   N  +91   91      z^\d{10}$z'Phone number must be exactly 10 digits.)r'   z/A member with this phone number already exists.)restripreplace
startswithlenmatchr   ValidationErrorr   objectsfilterexists)selfvaluerL   s      r   validate_phonez%MemberCreateSerializer.validate_phone,   s    %%c2.E"!"IEd#E
b(8!"IE xxU+--.WXX<<.557--._``r   c                 &   |j                  dg       }|j                  d      }t        j                  j                  |d   |      }t	        j                  j
                  dd|i|}|D ]#  }t        j                  j
                  dd|i| % |S )z,Create member with user account and childrenr3   rA   r(   )r'   rA   usermemberr   )popr   rS   create_userr   creater   )rV   validated_datachildren_datarA   rZ   r[   
child_datas          r   r^   zMemberCreateSerializer.create?   s    &**:r:!%%j1 ||''#G, ( 
 &&CDCNC ( 	>JMM  ==*=	> r   N)r   r   r   r   r   r3   r   r8   rA   r   rX   r^   r   r   r   r:   r:      s<    <D59H${$$tPQRH
 
&r   r:   c                   $    e Zd ZdZ G d d      Zy)MemberUpdateSerializerz*Serializer for updating member informationc                       e Zd ZeZg dZy)MemberUpdateSerializer.Meta)r   r   r)   r*   r+   r,   r-   r1   NrB   r   r   r   r   re   W   rC   r   r   Nr   r   r   r   rc   rc   T   s    4
 
r   rc   c                       e Zd ZdZ ej
                         Z ej                         Z e	dd      Z
 G d d      Zd Zy)MemberListSerializerz*Simplified serializer for member list viewTr    c                       e Zd ZeZg dZy)MemberListSerializer.Meta)r   r&   r   r(   r-   r.   r/   r0   r*   r+   r,   r3   children_countr1   r2   NrB   r   r   r   r   ri   f   s    
r   r   c                 6    |j                   j                         S )N)r3   count)rV   objs     r   get_children_countz'MemberListSerializer.get_children_counto   s    ||!!##r   N)r   r   r   r   r   r7   r0   SerializerMethodFieldrj   r   r3   r   rn   r   r   r   rg   rg   `   s@    4.[..0N6[668NDD9H
 
$r   rg   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 digitsrE   rF   rG   rH   NrI   rJ   rK   )rM   rN   rO   rP   rV   rW   s     r   rX   z"UserLoginSerializer.validate_phonex   se    %%c2.E"!"IE  d#E
b(8!"IEr   N)	r   r   r   r   r   r8   r(   rA   rX   r   r   r   rq   rq   s   s0    #!K!!40E${$$dtDHr   rq   c                   b    e Zd ZdZ ej
                  dd      Z ej
                  ddd      Zy)PasswordChangeSerializerz Serializer for changing passwordTrs   r<   )r;   r=   r>   N)r   r   r   r   r   r8   old_passwordnew_passwordr   r   r   rw   rw      s0    *(;(($4HL(;(($4TUVLr   rw   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)Trr   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   rS   getDoesNotExistr   rR   ru   s     r   validate_member_idz/AdminPasswordResetSerializer.validate_member_id   sO    	BNN%(  "" 	B--.@AA	Bs	    $ )AN)r   r   r   r   r   IntegerFieldr&   r   r   r   r   r{   r{      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dater1   r4   r5   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    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   r1   r4   r5   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   agendar1   r4   r5   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
   ModelSerializerr   r   r:   rc   rg   
Serializerrq   rw   r{   r   r   r   r   r   r   <module>r      s    & + ? ?;k11 ;n{22 n"2[88 2j	
[88 	
$;66 $&+00 W{55 W
;#9#9 
a[88 auk11 ud33 dr   