B
    b:+              	   @   s  d dl mZm Z mZmZ d dlZd dlmZ d dlmZ	 d dl
mZ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 d dlmZ G dd dejZG dd dejZG dd dejZG dd deZG dd deej ej!Z"G dd deej#ej$ej%ej!ej&Z'G dd dejZ(G dd deej)Z*G dd dejZ+G d d! d!eZ,G d"d# d#eej#ej!Z-G d$d% d%ejZ.G d&d' d'eej#ej!Z/dS )(    )datedatetimetime	timedeltaN)	FilterSet)gettext_lazy)mixinsserializers)status)Response)viewsets)ChangeSchedule)models_choices)TimeInterval)PayloadBase)APPCustomizeResponseModelMixinc               @   s   e Zd ZG dd dZdS )ChangeScheduleListSerializerc               @   s   e Zd ZeZdZdS )z!ChangeScheduleListSerializer.Meta__all__N)__name__
__module____qualname__r   modelfields r   r   CG:\easytimepro\master/mysite/mobile\api_rest\views\view_schedule.pyMeta   s   r   N)r   r   r   r   r   r   r   r   r      s   r   c               @   s*   e Zd Ze ZejdddZdd ZdS )ChangeScheduleApproveSerializerFT)required
allow_nullc             C   s.   |d }|t jt jfkr*td}t||S )Napprove_statusZ!param_approve_status_out_of_range)r   AUDIT_SUCCESSZREFUSE_r	   ZValidationError)selfZattrsr   messager   r   r   validate   s
    
z(ChangeScheduleApproveSerializer.validateN)	r   r   r   r	   ZIntegerFieldr   	CharFieldremarkr$   r   r   r   r   r      s   r   c               @   s2   e Zd Ze ZejdddZe Ze Z	dS )ChangeScheduleCreateSerializerFT)r   r   N)
r   r   r   r	   Z	DateFieldatt_dater%   previous_shiftadjust_shiftr&   r   r   r   r   r'   '   s   r'   c               @   sN   e Zd ZejdddZejdddZejddZejddZ	G dd	 d	Z
d
S )ChangeScheduleFilterr(   gte)
field_namelookup_exprlteZemployee__emp_code)r-   Zemployee__first_namec               @   s    e Zd ZeZddddddgZdS )zChangeScheduleFilter.Metaemployeeatt_date_gteatt_date_lteaudit_statusemp_code
first_nameN)r   r   r   r   r   r   r   r   r   r   r   4   s   r   N)r   r   r   django_filters
DateFilterr1   r2   Z
CharFilterr4   r5   r   r   r   r   r   r+   .   s
   r+   c               @   s&   e Zd ZeZej Ze	Z
dd ZdS )ScheduleViewc             C   s   | j jj}tjj|d}|S )N)company)requestuser
company_idr   objectsfilter)r"   r<   querysetr   r   r   get_queryset@   s    
zScheduleView.get_querysetN)r   r   r   r   serializer_classr   r=   allr?   r+   filter_classr@   r   r   r   r   r8   9   s   
r8   c               @   sR   e Zd ZeZeeeedZe	Z
dd Zdd Zdd Zdd	 Zd
d Zdd ZdS )EmployeeChangeScheduleView)ZretrievelistcreateZapprovec             C   s   | j jj}tjj|d}|S )N)r9   )r:   r;   r<   r   r=   r>   )r"   r<   r?   r   r   r   r@   U   s    
z'EmployeeChangeScheduleView.get_querysetc             C   s   | j | jd S )N)serializer_class_dictgetaction)r"   r   r   r   get_serializer_classZ   s    z/EmployeeChangeScheduleView.get_serializer_classc             C   sB  i }|d }|d }| dd}|d }|j}tjj|d}	|	s\td}
td|
gitjd	S t	jj||j
d
}|r|d j}|tjtjgkrdtdd|i }
td|
gitjd	S t|	d jdd}|t|	d jd d }|j
|d< ||d< t||d< ||d< ||d< t||	d j|d< t|| |d< |S )Nr(   r*   r)    r&   )pkZadjust_shift_not_foundr#   )r
   )r(   r0   r   z{0}z4mobile_scheduleApply_employeeScheduleOverlap_%(emp)sempz%H:%M:%S<   )Zhoursemployee_idZprevious_timeintervalZtimeinterval_idZapply_reasonZ
start_timeZend_time)rH   r;   r   r=   r>   r!   r   r
   ZHTTP_406_NOT_ACCEPTABLEr   idr3   r   r    ZAPPLICATIONformatr   strptimein_timestrftimer   durationstrZcombiner   )r"   r:   datasZ	obj_valuer(   r*   r)   r&   ZapplierZ	currentlyZdescribetmpr3   Zdtime_conversionZdtime_conversion1r   r   r   change_schadule_apply_check]   s6    

z6EmployeeChangeScheduleView.change_schadule_apply_checkc             O   s^   | j |jd}|jdd | ||j}t|tr6|S | | | |j}t|jt	j
|dS )N)dataT)Zraise_exception)r
   headers)get_serializerrZ   Zis_validrY   Zvalidated_data
isinstancer   perform_createZget_success_headersr
   ZHTTP_201_CREATED)r"   r:   argskwargs
serializerrW   r[   r   r   r   rF   z   s    

z!EmployeeChangeScheduleView.createc             C   s   t f |  d S )N)r   Zsave)r"   rW   r   r   r   r^      s    z)EmployeeChangeScheduleView.perform_createc       	      O   s~   | d|jj}| jjj}tjj||dd}| 	|}| 
|}|d k	rf| j|dd}| |jS | j|dd}t|jS )NZemployee_pk)rO   r<   z-apply_timeT)many)rH   r;   rL   r:   r<   r   r=   r>   order_byfilter_querysetpaginate_querysetr\   get_paginated_responserZ   r   )	r"   r:   r_   r`   rM   r<   r?   pagera   r   r   r   rE      s    


zEmployeeChangeScheduleView.listN)r   r   r   r+   rC   r   r'   r   rG   r   r   r@   rJ   rY   rF   r^   rE   r   r   r   r   rD   F   s   
rD   c               @   sr   e Zd ZejddZejddZe ZejddZ	e
 Ze
 ZejeddddZd	d
 ZG dd dZdS ) EmployeeChangeScheduleSerializerzemployee.emp_code)sourcezemployee.first_nameztimeinterval.aliasZapproval_field_approvalStatusZget_audit_status_displayT)labelri   r   c             C   s   |j jsdS dj|j jjdS )NrK   z/files/{path})path)r0   photorQ   name)r"   objr   r   r   	get_photo   s    z*EmployeeChangeScheduleSerializer.get_photoc               @   s   e Zd ZeZdZdS )z%EmployeeChangeScheduleSerializer.Metar   N)r   r   r   r   r   r   r   r   r   r   r      s   r   N)r   r   r   r	   r%   r4   rm   ZSerializerMethodFieldrl   Zadjust_timeintervalZReadOnlyFieldZlast_approverZworkflow_current_state_namer!   Zaudit_status_stringro   r   r   r   r   r   rh      s   

rh   c               @   s   e Zd ZeZeZeZdS )EmployeeChangeScheduleViewsN)	r   r   r   rh   rA   r+   rC   r   r   r   r   r   r   rp      s   rp   c               @   sb   e Zd ZejddddZejddddZejddddZejddddZe Z	G dd	 d	Z
d
S )!EmployeeScheduleSummarySerializerztimetable.aliasTrK   )ri   r   defaultzovertime.normal_ot_displayzovertime.weekend_ot_displayzovertime.holiday_ot_displayc               @   s   e Zd ZeZdZdS )z&EmployeeScheduleSummarySerializer.Meta)rM   r(   table_aliasZcheck_inZ	check_outZclock_inZ	clock_outZlateZearly_leaveZabsentZleave	normal_ot
weekend_ot
holiday_otr
   N)r   r   r   r   r   r   r   r   r   r   r      s   r   N)r   r   r   r	   r%   rs   rt   ru   rv   r
   r   r   r   r   r   rq      s   rq   c               @   s6   e Zd ZejdddZejdddZG dd dZdS )EmployeeScheduleSummaryFilterr(   r,   )r-   r.   r/   c               @   s   e Zd ZeZddgZdS )z"EmployeeScheduleSummaryFilter.Meta
start_dateend_dateN)r   r   r   r   r   r   r   r   r   r   r      s   r   N)r   r   r   r6   r7   rx   ry   r   r   r   r   r   rw      s   rw   c               @   s,   e Zd ZeZeZdd Zdd Zdd Z	dS )EmployeeScheduleSummaryViewc             C   s   t jj| jjjdd}|S )N)Zemp__company_idr(   )r   r=   r>   r:   r;   r<   rc   )r"   r?   r   r   r   r@      s    z(EmployeeScheduleSummaryView.get_querysetc             C   s   ddl m} ddlm}m}m}m} i }|||d|dd|d|dd|d|d	d|d|d
d|d|dd|d|dd|d|dd|d|dd|d|dd	| d|d< |jf |}|S )Nr   )GroupContact)Value	TextFieldWhenCase   ZWO)Zday_offthen      HZHD)Zhalf_dayr   L)Z	leave__gtr   A)Z
absent__gtr   ZLT)Zlate__gtr   ZEL)Zearly_leave__gtr   P)Zduty_worked__gtr   )Zoutput_fieldr
   )Z(mysite.mobile.api_rest.views.view_reportr{   Zdjango.db.modelsr|   r}   r~   r   Zannotate)r"   r?   r{   r|   r}   r~   r   valuesr   r   r   annotate_queryset   s&    
z-EmployeeScheduleSummaryView.annotate_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)rb   )rd   r@   r   re   r\   rf   rZ   r   )r"   r:   r_   r`   r?   rg   ra   r   r   r   rE      s    

z EmployeeScheduleSummaryView.listN)
r   r   r   rq   rA   rw   rC   r@   r   rE   r   r   r   r   rz      s
   rz   c               @   s   e Zd ZG dd dZdS )EmployeeShiftSerializerc               @   s   e Zd ZeZdZdS )zEmployeeShiftSerializer.Meta)rP   aliasrS   rU   N)r   r   r   r   r   r   r   r   r   r   r      s   r   N)r   r   r   r   r   r   r   r   r      s   r   c                   s*   e Zd ZeZej Z fddZ	  Z
S )EmployeeShiftViewc                s$   t t|  }|j| jjjd}|S )N)r<   )superr   r@   r>   r:   r;   r<   )r"   r?   )	__class__r   r   r@      s    zEmployeeShiftView.get_queryset)r   r   r   r   rA   r   r=   rB   r?   r@   __classcell__r   r   )r   r   r      s   
r   )0r   r   r   r   r6   Zdjango_filters.rest_frameworkr   Zdjango.utils.translationr   r!   Zrest_frameworkr   r	   r
   Zrest_framework.responser   Zmysite.mobile.api_restr   Zmysite.att.modelsr   Z
mysite.attr   r   r   Z(mysite.mobile.api_rest.app_customize_mixr   ZModelSerializerr   Z
Serializerr   r'   r+   ZNotificationMixinZGenericViewSetr8   ZListModelMixinZCreateModelMixinZRetrieveModelMixinZApproveFlowMixinrD   rh   ZGenericApprovalListViewrp   rq   rw   rz   r   r   r   r   r   r   <module>   s@   I	*