o
    Ih#                     @   sd   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	 G dd dej
ZG d	d
 d
ej
ZdS )    )serializers   )User)make_password)UserSettings)EmployeeTypec                   @   sb   e Zd Ze ZejdddZe ZejdddZej	dddZ
ejdddZG dd	 d	Zd
S )UserReadSerializerFTrequiredallow_blanksettings.supervisor_code)source	read_onlysettings.is_accesssettings.user_type.codec                   @      e Zd ZeZg dZdgZdS )zUserReadSerializer.Meta)idemployee_no	firstname
middlenamelastnameemail	user_typesupervisor_code	is_accesshire_start_datehire_end_dater   N__name__
__module____qualname__r   modelfieldsread_only_fields r$   r$   5C:\Users\Denis\Desktop\TimeStamps\user\serializers.pyMeta       
r&   N)r   r   r    r   	CharFieldr   r   r   r   BooleanFieldr   r   r&   r$   r$   r$   r%   r      s    r   c                   @   s   e Zd Ze ZejddZejdddZejddZ	ejddZ
ejdddZejdddZejdddZejddd	ZG d
d dZdd Zdd Zdd Zdd Zdd Zdd ZdS )UserSerializerF)r
   Tr	   r   )r   r
   r   r   )
write_onlyr
   c                   @   r   )zUserSerializer.Meta)r   r   namer   r   r   r   passwordr   r   r   r   r   r   Nr   r$   r$   r$   r%   r&       r'   r&   c                 C   s0   |j g}|jr||j ||j d|S )N )r   r   appendr   join)selfobj
name_partsr$   r$   r%   get_name&   s
   
zUserSerializer.get_namec                 C   sZ   t | dd }|rtjj|dj|jd rtd|S tjj|d r+td|S )Ninstance)r   )r   z&A user with this email already exists.)	getattrr   objectsfilterexcluder   existsr   ValidationError)r1   valuer5   r$   r$   r%   validate_email-   s   

zUserSerializer.validate_emailc                 C   s8   | j r| j r| j j|krtjj|d rtd|S )N)r   z0A user with this employee number already exists.)r5   r   r   r7   r8   r:   r   r;   )r1   r<   r$   r$   r%   validate_employee_no:   s   
z#UserSerializer.validate_employee_noc                 C   sB   d|v rd|d v r|d d }t |tr| dk|d d< |S )Nsettingsr   true)
isinstancestrlower)r1   datar   r$   r$   r%   validateA   s
   
zUserSerializer.validatec              	   C   s  i }d|v r/| d}t|dtr|di dn|d}|d|dd|d}n| dd | dd| dd d}d|v rMt|d |d< d	|v r| d	 }t|d
krv|d |d< |d |d< d|dd  |d< n)t|dkr|d |d< d|d< |d |d< n|r|d nd|d< d|d< d|d< | dd  tj	j
di |}|drztj	j|d d}||d< W n tjy   tdd|d  iw tj	j
dd|i| |S )Nr?   r   coder   r   Fr   r   r   r-   r,      r   r   r   r   r.      r    rF   Invalid employee type code: userr$   )poprA   getdictr   splitlenr0   r   r7   creater   DoesNotExistr   r;   r   )r1   validated_datasettings_datar?   user_type_coder3   rM   employee_typer$   r$   r%   rS   I   sL   
,




zUserSerializer.createc           
   	   C   s  i }d|v r.| d}t|dtr|di dn|d}|d|d|d}n| dd | dd | dd d}d|v rLt|d |d< d|v r| d }t|d	kru|d
 |d< |d |d< d|dd  |d< n,t|dkr|d
 |d< d|d< |d |d< n|r|d
 n|j|d< |j	|d< |j
|d< | dd  | D ]
\}}t||| q|  |r|j}d|v rztjj|d d}	|	|d< W n tjy   tdd|d  iw | D ]
\}}t||| q|  |S )Nr?   r   rF   r   r   rG   r-   r,   rH   r   r   r   r   r.   rI   r   rJ   rK   rL   )rN   rA   rO   rP   r   rQ   rR   r0   r   r   r   itemssetattrsaver?   r   r7   rT   r   r;   )
r1   r5   rU   rV   r?   rW   r3   attrr<   rX   r$   r$   r%   update   sX   
,




zUserSerializer.updateN)r   r   r    r   SerializerMethodFieldr,   r(   r   r   r   r   r   r)   r   r   r-   r&   r4   r=   r>   rE   rS   r]   r$   r$   r$   r%   r*      s"    8r*   N)rest_frameworkr   modelsr   django.contrib.auth.hashersr   ZuserSettings.modelsr   employeetypes.modelsr   ModelSerializerr   r*   r$   r$   r$   r%   <module>   s    