B
    Ib9!                 @   s   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 d d
lmZmZmZmZ d dlmZmZ dd ZG dd deZG dd deZG dd deZG dd dejeZdS )    )DjangoFilterBackend)viewsets)filters)status)Response)action)authentication)staff_authentication)gettext_lazy)DefaultSchemaDefaultPaginationBaseBaseExportModelMixinBaseActionModelMixin)NodeInstanceWorkflowNodec             C   sb   ddl m} t|}xH| D ]@}y,|d}|rHt|trH|j|| d W q   wY qX qW | S )Nr   )ALL_AUDIT_STATUSaudit_status)r   )Zmysite.att.models_choicesr   dictget
isinstanceintupdate)datar   Z
all_statusdZd_status r   5G:\easytimepro\master/mysite/staff\api\utils_class.pyconvert_word   s    

r   c               @   s   e Zd ZdS )DefaultPaginationN)__name__
__module____qualname__r   r   r   r   r      s   r   c               @   s   e Zd ZdZdd ZdS )ExportModelMixinzM
    Define Export Operations to List.
    It base to List Get Operation
    c             C   s   y^|j dd}|dkr(| j|dd}n4|dkr@| j|dd}n| |  }|j|jd}W n0 tk
r   | |  }|j|jd}Y nX d|j kr| 	|}| j
|dd	}t|jS )
Nexport_list requestT)export_flagZapprove)employeeZ	page_size)many)Zquery_paramsr   request_listapprove_listfilter_querysetget_querysetfilteruser	Exceptionpaginate_querysetget_serializerr   r   )selfr$   r"   queryset
serializerr   r   r   get_export_data)   s    

z ExportModelMixin.get_export_dataN)r   r   r    __doc__r4   r   r   r   r   r!   #   s   r!   c               @   s   e Zd ZdZdd ZdS )ActionModelMixinzV
    Define Action Operations to Bulk Objects.
    It base to List Post Operation
    c          	   C   s\   g }xJ| j jj|dD ]6}|j}y|  W q tk
rJ   || Y qX qW d}||fS )N)Zid__inr#   )modelobjectsr,   iddeleter.   append)r1   Z
object_idsZ
error_listobjZobj_idZ	error_msgr   r   r   action_deleteC   s    zActionModelMixin.action_deleteN)r   r   r    r5   r=   r   r   r   r   r6   =   s   r6   c                   s   e Zd ZdZe ZeZee	j
e	jfZejejejejfZdd Z fddZ fddZedgd	d
dddZedgd	d
dddZ  ZS )UtilGenericViewSetNc          
   O   s|   | j |jd}|jdd y| | W n4 tk
r\ } ztdt|itjdS d }~X Y nX | 	|j}t|jtj
|dS )N)r   T)Zraise_exceptiondetail)r   )r   headers)r0   r   Zis_validZperform_creater.   r   strr   HTTP_400_BAD_REQUESTZget_success_headersZHTTP_201_CREATED)r1   r$   argskwargsr3   er@   r   r   r   create^   s    $zUtilGenericViewSet.createc          
      sR   yt t| j|f||S  tk
rL } ztdt|itjdS d }~X Y nX d S )Nr?   )r   )superr>   r   r.   r   rA   r   rB   )r1   r$   rC   rD   rE   )	__class__r   r   r   i   s    zUtilGenericViewSet.updatec                s<   |   }|jdkr"tddiddS tt| j| |f||S )N)      r?   z(Records cannot be modified by the audit.i  )r   )Z
get_objectr   r   rG   r>   destroy)r1   r$   rC   rD   r<   )rH   r   r   rK   o   s    
zUtilGenericViewSet.destroyr   F)methodsr?   c             O   sl   |  |  }|j|jd}|dkr(|S | |}|d k	rT| j|dd}| |jS | j|dd}t|jS )N)r&   T)r'   )	r*   r+   r,   r-   r/   r0   get_paginated_responser   r   )r1   r$   r%   rC   rD   r2   pager3   r   r   r   r(   u   s    
zUtilGenericViewSet.request_listc             O   s
  |j j}|j j}yzddlm} ddlm} ddlm}	 ddl	m
}
 ddlm} ddlm}m} ddlm} dd	lm} dd
lm} dd l}t|j j }dddddd}|jd j}|| }|jd|}|
jj|j|d}|jj|j|dddd}dd |D }|jj|dd||d B |||jdd}|jj|||d}|  | ! }|||jddd d!||jddd d!B }W n( t"k
r   | j#jj$|j d"}Y nX |dkr|S | %|}|d k	r| j&|dd#}| '|j(S | j&|dd#}t)|j(S )$Nr   )Q)WorkflowRole)r   )WorkflowEngine)WorkflowInstance)rP   r   )AbstractException)ContentType)NODE_PENDINGZleaveZovertimeZ	manuallogZtrainingZchangeschedule)ZleavesZ	overtimesZmanual_logsZ	trainingsZchangeschedulesviewZatt)content_type
company_id)rW   Zworkflow_engine__inr9   Zexception_idc             S   s   g | ]}|d  qS )r   r   ).0ir   r   r   
<listcomp>   s    z3UtilGenericViewSet.approve_list.<locals>.<listcomp>   )Zis_next_node)state)node_engine__approver__inZ*workflow_instance__exception__audit_statusZ0workflow_instance__workflow_engine__content_typeorder)Zapprover_employee_idr^   Zworkflow_instance_id__inT)Zflat)Z9abstractexception_ptr__workflowinstance__nodeinstance__in)r&   )r'   )*r-   r9   rX   Zdjango.db.modelsrO   Z$mysite.workflow.models.workflow_rolerP   Z$mysite.workflow.models.workflow_noder   Z&mysite.workflow.models.workflow_enginerQ   Z(mysite.workflow.models.workflow_instancerR   mysite.workflow.modelsr   Z&mysite.workflow.models.exception_modelrS   Z"django.contrib.contenttypes.modelsrT   Zmysite.workflow.models_choicesrU   astlistZ	flow_roleallZparser_contextbasenamer8   Zget_by_natural_keyr,   Zvalues_listZorder_byr*   r+   r.   r7   Zexcluder/   r0   rM   r   r   )r1   r$   r%   rC   rD   r-   Zuser_companyrO   rP   r   rQ   rR   r   rS   rT   rU   ra   ZrolesZmodel_namesZrequest_model_nameZ
model_namerW   Zworkflow_engineZworkflow_instanceZworkflow_instance_idsZnode_instance_pendingZnode_instance_processedr2   rN   r3   r   r   r   r)      sl    





zUtilGenericViewSet.approve_list)F)F)r   r   r    r7   r   Zschemar   Zpagination_classr   r   ZSearchFilterZOrderingFilterZfilter_backendsr	   ZStaffJSONWebTokenAuthenticationZStaffTokenAuthenticationr   ZBasicAuthenticationZStaffSessionAuthenticationZauthentication_classesrF   r   rK   r   r(   r)   __classcell__r   r   )rH   r   r>   O   s"   r>   N)Zdjango_filters.rest_frameworkr   Zrest_frameworkr   r   r   Zrest_framework.responser   Zrest_framework.decoratorsr   r   Zmysite.staff.apir	   Zdjango.utils.translationr
   _Zmysite.api.utils_classr   r   r   r   r`   r   r   r   r   r!   r6   ZGenericViewSetr>   r   r   r   r   <module>   s    