B
    bJ#              	   @   s  d dl 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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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j0Z1dS )"    N)	FilterSet)gettext_lazy)mixinsserializers)status)Response)	force_str)PUNCH_STATES)viewsets)TransactionTerminalWorkCode)	ManualLog)models_choices)get_func_key)stamp2datetime)APPCustomizeResponseModelMixinc               @   s   e Zd ZG dd dZdS )ManuallogListSerializerc               @   s   e Zd ZeZdZdS )zManuallogListSerializer.Meta__all__N)__name__
__module____qualname__r   modelfields r   r   FG:\easytimepro\master/mysite/mobile\api_rest\views\view_manuall_log.pyMeta   s   r   N)r   r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd Zdd ZdS )ManualLogCategoryViewc             C   s4   |j }|j}td |d}dd |D }t|tjdS )N)key
company_idc             S   s   g | ]}|d  |d dqS )r      )codenamer   ).0Zchoicer   r   r   
<listcomp>%   s    z.ManualLogCategoryView.list.<locals>.<listcomp>)r   )userr   r   r   r   ZHTTP_200_OK)selfrequestempr   choicesdatar   r   r   list!   s
    zManualLogCategoryView.listN)r   r   r   r*   r   r   r   r   r       s   r   c               @   s8   e Zd Ze ZejdddZdd ZG dd dZdS )	ManuallogCreateSerializerTF)
allow_nullrequiredc             C   sH   |d }t |}|tj kr<dtd}td|gi||d< |S )N
punch_timez{0}Zmanual_log_time_greater_nowmessage
check_time)r   datetimeZnowformat_r   ValidationError)r%   attrsr.   r0   r/   r   r   r   validate-   s    z"ManuallogCreateSerializer.validatec               @   s   e Zd ZeZdZdS )zManuallogCreateSerializer.Meta)r.   apply_reasonpunch_state	work_codeN)r   r   r   r   r   r   r   r   r   r   r   6   s   r   N)	r   r   r   r   	CharFieldr.   r9   r6   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 )ManualLogApproveSerializerFT)r-   r,   c             C   s4   |d }|t jt jfkr0td}td|gi|S )Napprove_statusZ!param_approve_status_out_of_ranger/   )r   ZAUDIT_SUCCESSREFUSEr3   r   r4   )r%   r5   r<   r/   r   r   r   r6   ?   s
    z#ManualLogApproveSerializer.validateN)	r   r   r   r   ZIntegerFieldr<   r:   Zremarkr6   r   r   r   r   r;   ;   s   r;   c               @   s\   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Z	ejd	dZ
G d
d dZdS )EmployeeManualLogFilteraudit_statusexact)
field_nameZlookup_exprZpunch_time__dateZgteZlteZemployee__emp_code)rA   Zemployee__first_namec               @   s"   e Zd ZeZdddddddgZdS )	zEmployeeManualLogFilter.Metaemployeepunch_time_gtepunch_time_lter8   r?   emp_code
first_nameN)r   r   r   r   r   r   r   r   r   r   r   N   s   r   N)r   r   r   django_filtersZ
CharFilterr?   Z
DateFilterrC   rD   rE   rF   r   r   r   r   r   r>   G   s   r>   c               @   s&   e Zd ZeZej Ze	Z
dd ZdS )ManualLogViewc             C   s   | j jj}tjj|d}|S )N)company)r&   r$   r   r   objectsfilter)r%   r   querysetr   r   r   get_queryset[   s    
zManualLogView.get_querysetN)r   r   r   r   serializer_classr   rJ   allrL   r>   filter_classrM   r   r   r   r   rH   T   s   
rH   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 )EmployeeManualLogView)Zretriever*   createZapprovec             C   s   | j jj}tjj|d}|S )N)rI   )r&   r$   r   r   rJ   rK   )r%   r   rL   r   r   r   rM   p   s    
z"EmployeeManualLogView.get_querysetc             C   s   | j | jd S )N)serializer_class_dictgetaction)r%   r   r   r   get_serializer_classu   s    z*EmployeeManualLogView.get_serializer_classc             O   s   ddl m} |d|jj}| jjj}|jj||d	d}t
jj|dd}| |}| |}	|	d k	r| j|	dd	}
| |
jS | j|dd	}
t|
jS )
Nr   )EmployeeZemployee_pk)idr   rX   )employee_idz-apply_timeT)Zmany)Zmysite.personnel.modelsrW   rT   r$   Zpkr&   r   rJ   rK   valuesr   Zorder_byZfilter_querysetZpaginate_querysetget_serializerZget_paginated_responser)   r   )r%   r&   argskwargsrW   r'   r   Zemp_idrL   Zpage
serializerr   r   r   r*   x   s    


zEmployeeManualLogView.listc       	      O   sj   | j |jd}|jdd | ||j}t|tr6|S | |}| |j}|j}||d< t|t	j
|dS )N)r)   T)Zraise_exceptionrX   )r   headers)r[   r)   Zis_validmanuallog_apply_checkZvalidated_data
isinstancer   perform_createZget_success_headersr   ZHTTP_201_CREATED)	r%   r&   r\   r]   r^   datasZobj_idr_   resultr   r   r   rR      s    

zEmployeeManualLogView.createc             C   sT   t  }|d |_|d |_|dd|_|d |_|dd|_d|_|  |j	S )NrY   r0   r7    r8   r9   r   )
r   rY   r.   rT   r7   r8   r9   r?   ZsaverX   )r%   rc   objr   r   r   rb      s    


z$EmployeeManualLogView.perform_createc       	      C   s   |d }| d}|j}tjj|j|djtjtj	gd}|
 rddtd}td|gitjdS tjj||d	
 rdtd}td|gitjdS |rtjj|d
}|r|d j|d< ntd}td|gitjdS |j|d< |S )Nr0   r9   )rY   r.   )Zaudit_status__inz{0}Zmanual_log_repeatr/   )r   )r'   r.   )rX   r   Z!app_manuallog_work_code_not_foundrY   )rT   r$   r   rJ   rK   rX   Zexcluder   r=   ZCANCEL_AUDIT_SUCCESSexistsr2   r3   r   r   ZHTTP_406_NOT_ACCEPTABLEr   r   r    )	r%   r&   rc   r0   r9   r'   Ztmp_logZdescribeZwcsr   r   r   r`      s&    

z+EmployeeManualLogView.manuallog_apply_checkN)r   r   r   r>   rP   r   r+   r;   rS   r   r   rM   rV   r*   rR   rb   r`   r   r   r   r   rQ   a   s   rQ   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je	ddZeje	ddd	d
Zdd Zdd ZG dd dZdS )EmployeeTeamManualLogSerializerzemployee.emp_code)sourcezemployee.first_nameZstaff_manualLog_punchState)labelworkflow_current_state_nameZapproval_field_approvalStatusZget_audit_status_displayT)rj   ri   r,   c             C   s   |j jsdS dj|j jjdS )Nre   z/files/{path})path)rB   photor2   r!   )r%   rf   r   r   r   	get_photo   s    z)EmployeeTeamManualLogSerializer.get_photoc             C   s.   x&t D ]}|d |jkrt|d S qW |jS )Nr   r   )r	   r8   r   )r%   rf   sr   r   r   get_punch_state_name   s    
z4EmployeeTeamManualLogSerializer.get_punch_state_namec               @   s   e Zd ZeZdZdS )z$EmployeeTeamManualLogSerializer.Metar   N)r   r   r   r   r   r   r   r   r   r   r      s   r   N)r   r   r   r   r:   rE   r!   ZSerializerMethodFieldrm   r3   Zpunch_state_nameZReadOnlyFieldZlast_approverrk   Zaudit_status_stringrn   rp   r   r   r   r   r   rh      s   

rh   c               @   s    e Zd ZeZeZeZdd Z	dS )EmployeeTeamManualLogViewsc             C   s   | j jj}tjj|d}|S )N)rI   )r&   r$   r   r   rJ   rK   )r%   r   rL   r   r   r   rM      s    
z'EmployeeTeamManualLogViews.get_querysetN)
r   r   r   rh   rN   r>   rP   r   r   rM   r   r   r   r   rq      s   rq   )2r1   rG   Zdjango_filters.rest_frameworkr   Zdjango.utils.translationr   r3   Zrest_frameworkr   r   r   Zrest_framework.responser   Zdjango.utils.encodingr   Zmysite.att.models_choicesr	   Zmysite.mobile.api_restr
   Zmysite.iclock.modelsr   r   Zmysite.att.modelsr   Z
mysite.attr   Zmysite.att.att_paramr   Zmysite.mobile.utilsr   Z(mysite.mobile.api_rest.app_customize_mixr   ZModelSerializerr   ZGenericViewSetr   r+   Z
Serializerr;   r>   ZNotificationMixinrH   ZListModelMixinZCreateModelMixinZRetrieveModelMixinZApproveFlowMixinrQ   rh   ZGenericApprovalListViewrq   r   r   r   r   <module>   s@   	N