
    ti                         d dl mZ ddlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ  e       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   )
PermissionRoleUserCompanyRole)Company)UserProfile)get_user_modelc                        e Zd Z G d d      Zy)PermissionSerializerc                        e Zd ZeZg dZddgZy)PermissionSerializer.Meta)idnamecodename	is_active
created_at
updated_atr   r   N)__name__
__module____qualname__r   modelfieldsread_only_fields     E/var/www/html/dp2/backend_v2.1/server/apps/permissions/serializers.pyMetar   
   s    T(,7r   r   Nr   r   r   r   r   r   r   r   r   	   s    8 8r   r   c                        e Zd Z G d d      Zy)UserProfileSerializerc                       e Zd ZeZg dZy)UserProfileSerializer.Meta)
first_name	last_namephone_numberN)r   r   r   r	   r   r   r   r   r   r   r#      s    <r   r   Nr   r   r   r   r!   r!      s    = =r   r!   c                   2    e Zd Z ed      Z G d d      Zy)UserSerializerF)requiredc                       e Zd ZeZg dZy)UserSerializer.Meta)r   profileemailN)r   r   r   Userr   r   r   r   r   r   r+      s    +r   r   N)r   r   r   r!   r,   r   r   r   r   r(   r(      s    #U3G, ,r   r(   c                      e Zd Z edd      Z ej                         Z ej                  dde	j                  j                         dd      Z ej                  dd      Z ej                         Z G d d	      Zd
 Zd Zd Zd Zy)RoleSerializerT)many	read_onlyFpermissions)r1   
write_onlyquerysetr)   sourcezcompany.name)r6   r2   c                        e Zd ZeZg dZg dZy)RoleSerializer.Meta)r   r   descriptioncompanycompany_namepermission_idsr   users_countr   r   usersr3   )r:   r=   r   r   N)r   r   r   r   r   r   r   r   r   r   r   r8   *   s    
 Rr   r   c                 `    t         j                  j                  |d      j                         S )z6Count the number of active users assigned to this roleT)roler   )r   objectsfiltercount)selfobjs     r   get_users_countzRoleSerializer.get_users_count2   s/    &&-- . 
 %'	r   c                     t         j                  j                  |      j                  d      }|D cg c]  }|j                   }}t        |d      j                  S c c}w )z&Return all users assigned to this role)r@   userT)r1   )r   rA   rB   select_relatedrH   r(   data)rD   rE   assignmentsar>   s        r   	get_userszRoleSerializer.get_users9   sV    %--44#4>MMfU!,-A-e$/444 .s   A c                 v   | j                   j                  d      }|r|j                  rs|j                  j                  d      }|r	 t        j
                  j                  |d      }t        j
                  j                  ||d      }| j                  r&|j                  | j                  j                        }|j                         r&t        j                  d| d|j                   d	      	 |S |j                  j                   rt        j
                  j                  ||j                  j                   d      }| j                  r&|j                  | j                  j                        }|j                         rt        j                  d| d
      |S # t        j                  $ r Y |S w xY w)z(Validate unique role name within companyrequestr:   T)r   r   )r   r:   r   )r   zRole with name 'z' already exists in company ''z'' already exists in your active company)contextgetrH   rJ   r   rA   r   rB   instanceexcluder   existsr   ValidationErrorr   DoesNotExistactive_company)rD   valuerO   
company_idr:   existing_roles         r   validate_namezRoleSerializer.validate_name?   s   ,,""9-w|| )))4J%oo11Z41PG$(LL$7$7" '"& %8 %M }}(5(=(=AQAQ(=(R$++-)99.ug5RSZS_S_R``ab  .. # ,, $ 3 3#LL77" !4 ! ==$1$9$9T]]=M=M$9$NM '')%55*5'1XY  ' ++ $ 's   
B+F! !F87F8c                 4   | j                   j                  d      }|r|j                  r|j                  j                  r|S |j                  j	                         r|S |j                  j                  d      r|S |j                  j                  r|j                  j                  rqt        j                  j                  d|j                  j                        j                         }|D ])  }||vst        j                  d|j                   d       |S )zBValidate that user can only assign permissions they have access torO   create_rolesT)r   roles__companyzPermission 'z"' is not available in your company)rQ   rR   rH   is_superuseris_company_adminhas_company_permissionrX   r@   r   rA   rB   distinctr   rV   r   )rD   rY   rO   company_permissions
permissions        r   validate_permission_idsz&RoleSerializer.validate_permission_idsl   s    ,,""9-w||||(( ||,,. ||22>B ||**w||/@/@&0&8&8&?&?"#*<<#>#> '@ ' (* $ #(J!)<<)99*:??*;;]^  #( r   N)r   r   r   r   r3   r   SerializerMethodFieldr>   PrimaryKeyRelatedFieldr   rA   allr<   	CharFieldr;   r=   r   rF   rM   r\   rf   r   r   r   r0   r0      s    &DDAK-K--/E7[77##'')N );(($OL3+335KR R5+Zr   r0   N)rest_frameworkr   modelsr   r   r   apps.companies.modelsr   apps.userprofile.modelsr	   django.contrib.authr
   r.   ModelSerializerr   r!   r(   r0   r   r   r   <module>rq      si    & 5 5 ) / .8;66 8=K77 =,[00 ,n[00 nr   