
    Nh                     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  G d dej                        Zy	)
    )serializers)UserProfileSerializer)User)UserProfile)Company)UserCompanyRoleRolec                        e Zd ZdZ ej
                   ej                         ddd      Z ej                  d      Z	 G d d      Z
d	 Z fd
Zd Z xZS )SuperAdminUserUpdateSerializerz<Simple serializer for super admin to update user and profileFTz%List of company IDs to assign user to)childrequired
write_only	help_text)	read_onlyc                   6    e Zd ZeZg dZddiddiddiddidZy)#SuperAdminUserUpdateSerializer.Meta)emailusername	user_type	is_activeprofile_datacompany_idsr   F)r   r   r   r   N)__name__
__module____qualname__r   modelfieldsextra_kwargs     U/var/www/html/dp2/backend_v2.1/server/apps/core/serializers/updateuserbysuperadmin.pyMetar      s3    _ %(#U+$e,$e,	
r    r"   c                     	 |j                   }|rt        |      j                  S 	 y# t        j                  $ r Y yw xY w)z Return profile data for responseN)profiler   datar   DoesNotExist)selfobjr$   s      r!   get_profile_dataz/SuperAdminUserUpdateSerializer.get_profile_data   sK    	kkG,W5:::   '' 		s   "' ==c                    i }g d}|D ]  }d| d}||v s||   ||<    || _         |j                         }|D ]  }d| d}||v s||=  g }g }|j                         D ]  }	|	j                  d      s|	j	                  d      s'||	   }
t        |
t              r,t        |
      dkD  r|j                  t        |
d                n|j                  t        |
             |j                  |	        |D ]  }	||	=  i }|j                         D ]1  \  }	}
t        |
t              rt        |
      dkD  r	|
d   ||	<   -|
||	<   3 |r||d<   t        | 1  |      S )zDOverride to handle profile[field_name] and company_ids[index] format)
first_name	last_namephone_numberimagezprofile[]zcompany_ids[r   r   )_profile_datacopykeys
startswithendswith
isinstancelistlenappendintitemssuperto_internal_value)r'   r%   r   profile_fieldsfieldprofile_key	data_copycompany_ids_listkeys_to_removekeyvalue	data_dict	__class__s               r!   r<   z0SuperAdminUserUpdateSerializer.to_internal_value)   s{    M#E$UG1-Kd"&*;&7U# $
 *IIK	#E$UG1-Ki'k* $
 >>#C~~n-#,,s2C!#eT*s5zA~$++CaM:$++CJ7%%c* $ "C# " 	#//+JC%&3u:>!&q	#!&	#	 , '7Im$w(33r    c                     t        | di       }|j                  dd       }|6g }|j                         }| j                  d   j                  j
                  set        | j                  d   j                  j                  j                  dd            }|D cg c]	  }||vs| }}|D cg c]	  }||v s| }}|rt        j                  j                  |d      }	t        j                  j                  |      }
t        |
j                  d	d            }t        |      |z
  }|t        |      z
  }|rx|D ]s  }t        j                  j                  |
      }t        j                  j                  d|      j!                         }t        j                  j#                  |||       u |r/t        j                  j                  ||      j%                          |j                  j                  |	       |j&                  r?|j&                  j(                  |vr'|	j+                         r|	j!                         nd |_        |r|d| d|_        |j/                         D ]  \  }}t1        |||        |j3                          |rtt4        j                  j7                  |      \  }}t9        ||d      }|j;                         r|j3                          |S t=        j>                  d|j@                  i      |S c c}w c c}w )Nr0   r   requestidT)flat)id__inr   )user
company_id)rI   Advisor)name__iexactcompany)rL   rP   role)rL   company_id__inzKYou can only assign users to companies you belong to. Invalid company IDs: )invalid_company_idsmessage)r%   partialr$   )!getattrpopr1   contextrL   is_superuserr6   	companiesvalues_listr   objectsfilterr   setgetr	   firstcreatedeleteactive_companyrI   exists_company_warningsr:   setattrsaver   get_or_creater   is_validr   ValidationErrorerrors)r'   instancevalidated_datar   r   rS   valid_company_idsadmin_company_idscidrZ   existing_rolesexisting_company_idsnew_company_idsremoved_company_idsrM   rP   rQ   attrrD   r$   createdprofile_serializers                         r!   updatez%SuperAdminUserUpdateSerializer.updateW   s   t_b9$((=""$ + 0 0 2<<	*//<<$(i)@)E)E)O)O)[)[\`gk)[)l$m!6A&bksSPaEask#&b4?$\KS3J[C[SK!$\ #OO22:KW[2\	!0!8!8!?!?X!?!N'*>+E+ElY]+E+^'_$"%&7"8;O"O&:SAR=S&S#"&5
")//"5"5"5"D#||22	SZ2[aac'//66!)$+!% 7  '6 '#++22Qd2elln""&&y1**x/F/F/I/IQb/bCLCSCSCUioo.?[_H+ #+>!l  nA  mB   C.*
 *//1KD%HdE* 2*22@@h@OGW!6w\[_!`!**,"'')  "119>P>W>W2XYYg 'c$\s   	L#L-	L7L)r   r   r   __doc__r   	ListFieldIntegerFieldr   SerializerMethodFieldr   r"   r)   r<   rx   __classcell__)rF   s   @r!   r   r   
   s]    F'+''&k&&(9	K 5;44tDL
 
,4\=r    r   N)rest_frameworkr   apps.userprofile.serializersr   apps.core.models.userr   apps.userprofile.modelsr   apps.companies.modelsr   apps.permissions.modelsr   r	   ModelSerializerr   r   r    r!   <module>r      s+    & > & / ) 9J[%@%@ Jr    