B
    b               	   @   sh  d dl Z d dlm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 d dlmZ G dd deej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-dS )!    N)	FilterSet)gettext_lazy)Q)mixinsserializers)status)Response)	force_str)viewsets)Overtime)models_choices)stamp2datetime)OVERTIME_TYPE)APPCustomizeResponseModelMixinc               @   s   e Zd Zdd ZdS )OvertimeCategoryViewc             C   sP   dd tdddd tdddd tddg}d	|i}t|tjd
S )N   z{0}Zovertime_option_normalOvertime)codename   Zovertime_option_weekendOvertime   Zovertime_option_holidayOvertimechoices)r   )format_r   r   ZHTTP_200_OK)selfrequestr   Zresponse r   CG:\easytimepro\master/mysite/mobile\api_rest\views\view_overtime.pylist   s
    zOvertimeCategoryView.listN)__name__
__module____qualname__r   r   r   r   r   r      s   r   c               @   s   e Zd ZG dd dZdS )OvertimeListSerializerc               @   s   e Zd ZeZdZdS )zOvertimeListSerializer.Meta__all__N)r   r   r    r   modelfieldsr   r   r   r   Meta$   s   r%   N)r   r   r    r%   r   r   r   r   r!   #   s   r!   c               @   s2   e Zd Ze Ze Zdd ZG dd dZdS )OvertimeCreateSerializerc             C   sT   |d }|d }t |}t |}||kr@dtd}t|||d< ||d< |S )Nstartendz{0}z%end time can not less then start time
start_timeend_time)r   r   r   r   ValidationError)r   attrsr'   r(   r)   r*   messager   r   r   validate-   s    
z!OvertimeCreateSerializer.validatec               @   s   e Zd ZeZdZdS )zOvertimeCreateSerializer.Meta)r'   r(   overtime_typeapply_reasonN)r   r   r    r   r#   r$   r   r   r   r   r%   9   s   r%   N)	r   r   r    r   	CharFieldr'   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 )OvertimeApproveSerializerFT)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   ZAUDIT_SUCCESSREFUSEr   r   r+   )r   r,   r5   r-   r   r   r   r.   B   s
    
z"OvertimeApproveSerializer.validateN)	r   r   r    r   ZIntegerFieldr5   r1   Zremarkr.   r   r   r   r   r2   >   s   r2   c               @   sj   e Z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ej	ddZ
ej	ddZG d	d
 d
ZdS )EmployeeOvertimeFilterZstart_time__dateZgte)
field_nameZlookup_exprZlteZend_time__dateZemployee__emp_code)r8   Zemployee__first_namec            	   @   s&   e Zd ZeZddddddddd	g	Zd
S )zEmployeeOvertimeFilter.Metaemployeer/   start_time_gtestart_time_lteend_time_gteend_time_lteaudit_statusemp_code
first_nameN)r   r   r    r   r#   r$   r   r   r   r   r%   R   s   r%   N)r   r   r    django_filtersZ
DateFilterr:   r;   r<   r=   Z
CharFilterr?   r@   r%   r   r   r   r   r7   J   s   r7   c               @   s&   e Zd ZeZej Ze	Z
dd ZdS )OvertimeViewc             C   s   | j jj}tjj|d}|S )N)company)r   user
company_idr   objectsfilter)r   rE   querysetr   r   r   get_queryset_   s    
zOvertimeView.get_querysetN)r   r   r    r!   serializer_classr   rF   allrH   r7   filter_classrI   r   r   r   r   rB   X   s   
rB   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 )EmployeeOvertimeView)Zretriever   createZapprovec             C   s   | j jj}tjj|d}|S )N)rC   )r   rD   rE   r   rF   rG   )r   rE   rH   r   r   r   rI   t   s    
z!EmployeeOvertimeView.get_querysetc             C   s   | j | jd S )N)serializer_class_dictgetaction)r   r   r   r   get_serializer_classy   s    z)EmployeeOvertimeView.get_serializer_classc       	      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)employee_idrE   z-apply_timeT)Zmany)rP   rD   Zpkr   rE   r   rF   rG   Zorder_byZfilter_querysetZpaginate_querysetget_serializerZget_paginated_responsedatar   )	r   r   argskwargsZemprE   rH   Zpage
serializerr   r   r   r   |   s    


zEmployeeOvertimeView.listc       	      O   sj   | j |jd}|jdd | ||j}t|tr6|S | |}| |j}|j}||d< t|t	j
|dS )N)rU   T)Zraise_exceptionid)r   headers)rT   rU   Zis_validovertime_apply_checkZvalidated_data
isinstancer   perform_createZget_success_headersr   ZHTTP_201_CREATED)	r   r   rV   rW   rX   datasZobj_idrZ   resultr   r   r   rN      s    

zEmployeeOvertimeView.createc             C   s   t f |}|  |jS )N)r   ZsaverY   )r   r^   objr   r   r   r]      s    
z#EmployeeOvertimeView.perform_createc       
      C   s   i }|d }|d }|j }tjtjg}tjj|tjdt|dt|dB j|d}|rd	t
d| }	td	|	gitjd
S |j|d< |d |d< |d |d< |dd|d< |dd|d< |S )Nr)   r*   )rS   r>   )Zstart_time__gt)Zend_time__lt)Zaudit_status__inz{0}Zovertime_time_overlapr-   )r   rS   r/   r   r0    )rD   r   ZCANCEL_AUDIT_SUCCESSr6   r   rF   rG   Zexcluder   r   r   r   r   ZHTTP_406_NOT_ACCEPTABLErY   rP   )
r   r   r^   Z	obj_datasr)   r*   ZapplierZselect_statusZobj_tmpZdescriber   r   r   r[      s     
z)EmployeeOvertimeView.overtime_apply_checkN)r   r   r    r7   rL   r!   r&   r2   rO   r   r#   rI   rR   r   rN   r]   r[   r   r   r   r   rM   e   s   rM   c               @   s~   e Zd ZejddZejddZe Zeje	ddZ
e Ze Zeje	dddd	Zd
d Zdd ZG dd dZdS )EmployeeTeamOvertimeSerializerzemployee.emp_code)sourcezemployee.first_nameZstaff_overtime_overtimeType)labelZapproval_field_approvalStatusZget_audit_status_displayT)rd   rc   r4   c             C   s   |j jsdS dj|j jjdS )Nra   z/files/{path})path)r9   photor   r   )r   r`   r   r   r   	get_photo   s    z(EmployeeTeamOvertimeSerializer.get_photoc             C   s.   x&t D ]}|d |jkrt|d S qW |jS )Nr   r   )r   r/   r	   )r   r`   sr   r   r   get_overtime_type_name   s    
z5EmployeeTeamOvertimeSerializer.get_overtime_type_namec               @   s   e Zd ZeZdZdS )z#EmployeeTeamOvertimeSerializer.Metar"   N)r   r   r    r   r#   r$   r   r   r   r   r%      s   r%   N)r   r   r    r   r1   r?   r   ZSerializerMethodFieldrf   r   Zovertime_type_nameZReadOnlyFieldZlast_approverZworkflow_current_state_nameZaudit_status_stringrg   ri   r%   r   r   r   r   rb      s   

rb   c               @   s   e Zd ZeZeZeZdZ	dS )EmployeeTeamOvertimeViewsTN)
r   r   r    rb   rJ   r7   rL   r   r#   Zteam_member_typer   r   r   r   rj      s   rj   ).rA   Zdjango_filters.rest_frameworkr   Zdjango.utils.translationr   r   Zdjango.db.modelsr   Zrest_frameworkr   r   r   Zrest_framework.responser   Zdjango.utils.encodingr	   Zmysite.mobile.api_restr
   Zmysite.att.modelsr   Z
mysite.attr   Zmysite.mobile.utilsr   Zmysite.att.models_choicesr   Z(mysite.mobile.api_rest.app_customize_mixr   ZGenericViewSetr   ZModelSerializerr!   r&   Z
Serializerr2   r7   ZNotificationMixinrB   ZListModelMixinZCreateModelMixinZRetrieveModelMixinZApproveFlowMixinrM   rb   ZGenericApprovalListViewrj   r   r   r   r   <module>   s<   B