
    vg9                        d dl Z d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ d dl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" G d dej.                        Z# G d dej.                        Z$ G d  d!ej.                        Z%y)"    N)ValidationError)serializers)Company
DepartmentEmployeeShiftEmployeeShiftDayEmployeeShiftScheduleJobPositionJobRoleRotatingShiftRotatingShiftAssignRotatingWorkTypeRotatingWorkTypeAssignShiftRequestWorkTypeWorkTypeRequest)horilla_middlewaresc                        e Zd Z G d d      Zy)CompanySerializerc                       e Zd ZeZdZy)CompanySerializer.Meta__all__N)__name__
__module____qualname__r   modelfields     @/var/www/horilla/horilla_api/api_serializers/base/serializers.pyMetar          r   r!   Nr   r   r   r!   r   r   r    r   r           r   r   c                        e Zd Z G d d      Zy)JobPositionSerializerc                       e Zd ZeZdZy)JobPositionSerializer.Metar   N)r   r   r   r
   r   r   r   r   r    r!   r(       s    r   r!   Nr#   r   r   r    r&   r&      r$   r   r&   c                        e Zd Z G d d      Zy)JobRoleSerializerc                       e Zd ZeZdZy)JobRoleSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r,   &   r"   r   r!   Nr#   r   r   r    r*   r*   %   r$   r   r*   c                   &    e Zd Z G d d      Zd Zy)DepartmentSerializerc                       e Zd ZeZdZy)DepartmentSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r0   ,   s    r   r!   c                     |j                  dg       }t        di |}|j                          |j                  j	                  |       |S )N
company_idr   )popr   saver2   set)selfvalidated_data
comapny_idobjs       r    createzDepartmentSerializer.create0   sA    #''b9
*>*
:&
r   N)r   r   r   r!   r:   r   r   r    r.   r.   +   s     r   r.   c                   >     e Zd Z G d d      Zd Z fdZd Z xZS )WorkTypeSerializerc                       e Zd ZeZdZy)WorkTypeSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r>   :   s    r   r!   c                     t        di |}	 |j                          |S # t        $ r}t        j                  |      d }~ww xY wNr   )r   cleanDjangoValidationErrorr   r   r6   attrsinstancees       r    validatezWorkTypeSerializer.validate>   sH    $e$	1NN
 	 % 	1--a00	1    	A=Ac                 "    t         |   |      S Nsuperr:   r6   r7   	__class__s     r    r:   zWorkTypeSerializer.createK       w~n--r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   itemssetattrrA   r4   r6   rE   r7   attrvalues        r    updatezWorkTypeSerializer.updateN   B    )//1 	+KD%HdE*	+r   r   r   r   r!   rG   r:   rW   __classcell__rN   s   @r    r<   r<   8   s     .r   r<   c                   >     e Zd Z G d d      Zd Z fdZd Z xZS )RotatingWorkTypeSerializerc                       e Zd ZeZdZy)RotatingWorkTypeSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r_   W        r   r!   c                     t        di |}	 |j                          |S # t        $ r}t        j                  |      d }~ww xY wr@   )r   rA   rB   r   r   rC   s       r    rG   z#RotatingWorkTypeSerializer.validate[   sH    #,e,	1NN
 	 % 	1--a00	1rH   c                 "    t         |   |      S rJ   rK   rM   s     r    r:   z!RotatingWorkTypeSerializer.createh   rO   r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   rQ   rT   s        r    rW   z!RotatingWorkTypeSerializer.updatek   rX   r   rY   r[   s   @r    r]   r]   V        .r   r]   c                        e Zd Z ej                  d      Z ej                  d      Z ej                  d      Z G d d      Zd Z	d Z
d Zd Z fd	Zd
 Z xZS ) RotatingWorkTypeAssignSerializerT	read_onlyc                       e Zd ZeZdZy)%RotatingWorkTypeAssignSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   rj   x   s    &r   r!   c                 8    |j                   }|r|j                  S y rJ   )current_work_type	work_type)r6   rE   rl   s      r    get_current_work_type_namez;RotatingWorkTypeAssignSerializer.get_current_work_type_name|   s     $66$...r   c                 8    |j                   }|r|j                  S y rJ   )next_work_typerm   )r6   rE   rp   s      r    get_next_work_type_namez8RotatingWorkTypeAssignSerializer.get_next_work_type_name   s    !00!+++r   c                 8    |j                   }|r|j                  S y rJ   )rotating_work_type_idname)r6   rE   rs   s      r    get_rotating_work_type_namez<RotatingWorkTypeAssignSerializer.get_rotating_work_type_name   s      ( > > (---r   c                     | j                   r|S t        di |}	 |j                          |S # t        $ r}t	        j
                  |      d }~ww xY wr@   )rE   r   rA   rB   r   r   rC   s       r    rG   z)RotatingWorkTypeAssignSerializer.validate   sT    ==L)2E2	1NN  % 	1--a00	1s   - 	AAAc                 "    t         |   |      S rJ   rK   rM   s     r    r:   z'RotatingWorkTypeAssignSerializer.create   rO   r   c                 p    |j                         D ]  \  }}t        |||        |j                          |S rJ   )rR   rS   r4   rT   s        r    rW   z'RotatingWorkTypeAssignSerializer.update   s8    )//1 	+KD%HdE*	+r   )r   r   r   r   SerializerMethodFieldrotating_work_type_namecurrent_work_type_namenext_work_type_namer!   rn   rq   ru   rG   r:   rW   rZ   r[   s   @r    rf   rf   s   sd    ?k??$O>[>>N;+;;dK .r   rf   c                        e Zd Z G d d      Zy)EmployeeShiftDaySerializerc                       e Zd ZeZdZy)EmployeeShiftDaySerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r      r`   r   r!   Nr#   r   r   r    r~   r~      r$   r   r~   c                   >     e Zd Z G d d      Zd Z fdZd Z xZS )EmployeeShiftSerializerc                       e Zd ZeZdZy)EmployeeShiftSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r          r   r!   c                     t        di |}	 |j                          |S # t        $ r}t        j                  |      d }~ww xY wr@   )r   rA   rB   r   r   rC   s       r    rG   z EmployeeShiftSerializer.validate   H     )5)	1NN
 	 % 	1--a00	1rH   c                 "    t         |   |      S rJ   rK   rM   s     r    r:   zEmployeeShiftSerializer.create   rO   r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   rQ   rT   s        r    rW   zEmployeeShiftSerializer.update   rX   r   rY   r[   s   @r    r   r      rd   r   r   c                        e Zd Z G d d      Zy)EmployeeShiftScheduleSerializerc                       e Zd ZeZdZy)$EmployeeShiftScheduleSerializer.Metar   N)r   r   r   r	   r   r   r   r   r    r!   r      s    %r   r!   Nr#   r   r   r    r   r      r$   r   r   c                   >     e Zd Z G d d      Zd Z fdZd Z xZS )RotatingShiftSerializerc                       e Zd ZeZdZy)RotatingShiftSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r      r   r   r!   c                     t        di |}	 |j                          |S # t        $ r}t        j                  |      d }~ww xY wr@   )r   rA   rB   r   r   rC   s       r    rG   z RotatingShiftSerializer.validate   r   rH   c                 "    t         |   |      S rJ   rK   rM   s     r    r:   zRotatingShiftSerializer.create   rO   r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   rQ   rT   s        r    rW   zRotatingShiftSerializer.update   rX   r   rY   r[   s   @r    r   r      rd   r   r   c                        e Zd Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z	 G d d      Z
d Z fdZ fdZd Zd	 Zd
 Zd Z xZS )RotatingShiftAssignSerializerTrg   c                       e Zd ZeZdZy)"RotatingShiftAssignSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r      s    #r   r!   c                     t        di |}	 |j                          |S # t        $ r}t        j                  |      d }~ww xY wr@   )r   rA   rB   r   r   rC   s       r    rG   z&RotatingShiftAssignSerializer.validate   sH    &//	1NN
 	 % 	1--a00	1rH   c                 "    t         |   |      S rJ   rK   rM   s     r    r:   z$RotatingShiftAssignSerializer.create  rO   r   c                    t         |   |      }|j                  dk(  rd|j                   d|d<   |S |j                  dk(  rd|j                   |d<   |S |j                  dk(  r|j
                  dk(  rd	|j
                   d
|d<   |S |j
                  dk(  rd	|j
                   d|d<   |S |j
                  dk(  rd	|j
                   d|d<   |S |j
                  dk(  rd|d<   |S d	|j
                   d|d<   |S )NafterzRotate after z daysrotateweeklyzWeekly every monthly1zRotate every zst day of month2znd day of month3zrd day of monthlastzRotate every last day of monthzth day of month)rL   to_representationbased_onrotate_after_dayrotate_every_weekendrotate_every)r6   rE   representationrN   s      r    r   z/RotatingShiftAssignSerializer.to_representation  si   28<')6x7P7P6QQV'WN8$. - (*)6x7T7T6U'VN8$* ) )+$$+#H$9$9#:/J x($  &&#-#H$9$9#:/J x(  &&#-#H$9$9#:/J x(  &&&0+Kx(  $H$9$9#:/J x( r   c                 8    |j                   }|r|j                  S y rJ   )rotating_shift_idrt   )r6   rE   r   s      r    get_rotating_shift_namez5RotatingShiftAssignSerializer.get_rotating_shift_name%  s     $66$)))r   c                 8    |j                   }|r|j                  S y rJ   )
next_shiftemployee_shift)r6   rE   r   s      r    get_next_shift_namez1RotatingShiftAssignSerializer.get_next_shift_name,  s    ((
,,,r   c                 8    |j                   }|r|j                  S y rJ   )current_shiftr   )r6   rE   r   s      r    get_current_shift_namez4RotatingShiftAssignSerializer.get_current_shift_name3  s     .. ///r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   rQ   rT   s        r    rW   z$RotatingShiftAssignSerializer.update:  rX   r   )r   r   r   r   ry   current_shift_namenext_shift_namerotating_shift_name	CharFieldr   r!   rG   r:   r   r   r   r   rW   rZ   r[   s   @r    r   r      sz    :::TJ7k77$GO;+;;dK"[""T2F .:r   r   c                        e Zd Z ej                  dd      Z ej                  dd      Z ej                  dd      Z ej                  d      Z	 G d d      Z
d	 Z fd
Zd Zd Z xZS )WorkTypeRequestSerializeremployee_id.employee_first_nameTsourcerh   employee_id.employee_last_namezwork_type_id.work_typerg   c                       e Zd ZeZdZy)WorkTypeRequestSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r   N  s    r   r!   c                 P   t        t        j                  dd       }|j                  dd       }|r^|j                  j
                  sH|rF|t        j                  j                         j                         k  rt        j                  ddi      |j                  dd       }|r||k  rt        j                  ddi      | j                  r1| j                  j                         rt        j                  ddi      |j                  dd	      s|st        j                  dd
i      |S )Nrequestrequested_datez,Date must be greater than or equal to today.requested_tillz5End date must be greater than or equal to start date.errorz;A work type request already exists during this time period.is_permanent_work_typeFz!Requested till field is required.)getattrr   _thread_localsgetuseris_superuserdatetimetodaydater   r   rE   is_any_work_type_request_exists)r6   rD   r   r   r   s        r    rG   z"WorkTypeRequestSerializer.validateR  s   -<<iN#3T:7<<44.83D3D3J3J3L3Q3Q3S"S!11%'UV 
 #3T:n~=--$O  ==T]]JJL--WX 
 yy159!!11%(KM  r   c                 "    t         |   |      S rJ   rK   rM   s     r    r:   z WorkTypeRequestSerializer.createx  rO   r   c                 8    |j                   }|r|j                  S y rJ   )previous_work_type_idrm   )r6   rE   previous_work_types      r    get_previous_work_type_namez5WorkTypeRequestSerializer.get_previous_work_type_name{  s     %;;%///r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   rQ   rT   s        r    rW   z WorkTypeRequestSerializer.update  rX   r   )r   r   r   r   r   employee_first_nameemployee_last_namework_type_namery   previous_work_type_namer!   rG   r:   r   rW   rZ   r[   s   @r    r   r   B  s    /+//0D /../4 +[**'4N @k??$O $L.r   r   c                        e Zd Z ej                  dd      Z ej                  dd      Z ej                  d      Z ej                  d      Z	d Z
d Zd Z fd	Zd
 Z G d d      Z xZS )ShiftRequestSerializerr   Tr   r   rg   c                 8    |j                   }|r|j                  S y rJ   )previous_shift_idr   )r6   rE   r   s      r    get_previous_shift_namez.ShiftRequestSerializer.get_previous_shift_name  s     $66$333r   c                 8    |j                   }|r|j                  S y rJ   )shift_idr   )r6   rE   r   s      r    get_shift_namez%ShiftRequestSerializer.get_shift_name  s    $$***r   c                     t        di |}	 |j                          |S # t        $ r}t        j                  |      d }~ww xY wr@   )r   rA   rB   r   r   rC   s       r    rG   zShiftRequestSerializer.validate  sH    (%(	1NN
 	 % 	1--a00	1rH   c                 "    t         |   |      S rJ   rK   rM   s     r    r:   zShiftRequestSerializer.create  rO   r   c                     |j                         D ]  \  }}t        |||        |j                          |j                          |S rJ   rQ   rT   s        r    rW   zShiftRequestSerializer.update  rX   r   c                       e Zd ZeZdZy)ShiftRequestSerializer.Metar   N)r   r   r   r   r   r   r   r   r    r!   r     s    r   r!   )r   r   r   r   r   r   r   ry   
shift_nameprevious_shift_namer   r   rG   r:   rW   r!   rZ   r[   s   @r    r   r     s    /+//0D /../4 322TBJ;+;;dK. r   r   )&r   django.core.exceptionsr   rB   rest_frameworkr   base.modelsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   horillar   ModelSerializerr   r&   r*   r.   r<   r]   rf   r~   r   r   r   r   r   r   r   r   r    <module>r      s*    K &     (33 K77 33 
;66 
44 <!<!< :2{'B'B 2j!<!< k99 :k&A&A k99 :QK$?$? QhE ; ; EP1[88 1r   