
    xxi                         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 d dlmZ d dlmZmZ d d	lmZmZ  e       Z G d
 dej*                        Zy)    )serializers)timezone)transaction)get_user_model)PhoneUniquenessService)generate_secure_password)UserProfile)UserCompanyRoleRole)set_active_companysync_companiesc                       e Zd Z ej                         Z ej                   ej                         d      Z ej                  dg       Z	 G d d      Z
d Zd Zej                  d	        Zy
)CreateUserSerializerF)childrequiredT)r   
validatorsc                       e Zd ZeZg dZy)CreateUserSerializer.Meta)emailprofilecompany_rolesN)__name__
__module____qualname__Usermodelfields     I/var/www/html/dp2/backend_v2.1/server/apps/core/serializers/createuser.pyMetar      s    
r   r!   c                    |j                         j                         }t        j                  j	                  |      j                         }|r5| j                  j                  dg       }|st        j                  ddi      |S )Nr   r   r   z>User with this email already exists. Specify a company to add.)
lowerstripr   objectsfilterfirstinitial_datagetr   ValidationError)selfvalueexisting_userr   s       r    validate_emailz#CreateUserSerializer.validate_email#   s{    ##%++%+8>>@ --11/2FM !11 93   r   c                    |j                  di       }|j                  d      }|j                  d      }|rVt        j                  j                  |      j	                         }	 t        j                  ||r|j                  nd        |S |S # t        $ r'}t        j                  ddt        |      ii      d }~ww xY w)Nr   phone_numberr   r#   )exclude_user_id)r*   r   r&   r'   r(   r   assert_uniqueid
ValueErrorr   r+   str)r,   attrsprofile_datar1   r   r.   es          r    validatezCreateUserSerializer.validate0   s    yyB/#''7		'" LL//e/<BBDM
&44 8EM$4$44 u  !11&A 3  s   &%B 	B?"B::B?c                    |j                  d      }t        j                  j                  |      j	                         }|j                  dg       }|r|st        j                  ddi      |j                  di       }|j                  dd       }|j                  dd       }|j                  dd       }|j                  d	      }	|sZt        d
      }
|
|d<   t        j                  j                  di |}|
|_
        t        j                  j                  |||||	       g }|D ]G  }d|vsd|vrt        j                  ddi      t        j                  j                  |d   |d         j	                         }|s$t        j                  dd|d    d|d    di      t        j                  j                  ||d   |d   ||t!        j"                         dddd||j$                  |	| j&                  j                  d      r| j&                  d   j(                  nd d      \  }}|s/t        j                  dd|j*                  j$                   di      |j-                  |       J t/        |       t1        ||       |S )Nr   r#   r   zECompany roles are required when adding an existing user to a company.r   
first_name	last_namer1   image   password)userr<   r=   r1   r>   
company_idrole_idzCompany and Role are required)r4   rB   zRole with id z does not exist in company .TFrequest)rC   r<   r=   
invited_at	is_active
is_defaultis_owneris_availablephonedesignationr>   
created_by)rA   rB   defaultszUser is already a member of r   )r*   r   r&   r'   r(   popr   r+   r   create_user_generated_passwordr	   creater   r
   get_or_creater   nownamecontextrA   companyappendr   r   )r,   validated_datar   rA   r   r8   r<   r=   r1   r>   generated_passwordmembershipsrolerole_object
membershipcreateds                   r    rR   zCreateUserSerializer.createF   s   ""7+||"""/557&**?B?-- "N/  
 &)))R8!%%lD9
 $$[$7	#''=  )!9"!=);N:&<<++=n=D'9D$&&%#) '  !D4'9D+@!11#%D3   ,,--	?- .  eg  !11#}T)_4E F1L)*!&-3   #2"9"9"G"G-"9o!+ )!) $!&$#'("-"2"2!  <<++I6 Y/44!' #H #J6 !11#'CJDVDVD[D[C\\]%^3   z*c "f 	t4-r   N)r   r   r   r   	DictFieldr   	ListFieldr   
EmailFieldr   r!   r/   r:   r   atomicrR   r   r   r    r   r      s~    #k##%G)K))#k##%M #K""E

 
, X Xr   r   N)rest_frameworkr   django.utilsr   	django.dbr   django.contrib.authr   apps.core.servicesr   apps.core.utilsr   apps.userprofile.modelsr	   apps.permissions.modelsr
   r   apps.permissions.servicesr   r   r   ModelSerializerr   r   r   r    <module>rn      s>    & ! ! . 5 4 / 9 H O;66 Or   