B
    HDb
                 @   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mZmZmZm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eZG dd dejZdS )    )filters)status)viewsets)permissions)Response)DjangoFilterBackend)get_api_company_id)DefaultSchemaDefaultPaginationBaseBaseExportModelMixinBaseActionModelMixinIsOpenAPIPermissionc               @   s   e Zd ZdS )DefaultPaginationN)__name__
__module____qualname__ r   r   9G:\easytimepro\master/mysite/personnel\api\utils_class.pyr      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   s8   |  |  }|jdr$| |}| j|dd}|jS )NZpageT)Zmany)Zfilter_querysetZget_querysetZquery_paramsgetZpaginate_querysetZget_serializerdata)selfrequestZqueryset
serializerr   r   r   get_export_data   s
    
z ExportModelMixin.get_export_dataN)r   r   r   __doc__r   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__in )modelZobjectsfilteriddelete	Exceptionappend)r   Z
object_idsZ
error_listobjZobj_idZ	error_msgr   r   r   action_delete(   s    zActionModelMixin.action_deleteN)r   r   r   r   r%   r   r   r   r   r   "   s   r   c               @   sB   e Zd ZdZe ZejefZ	e
ZeejejfZdd Zdd ZdS )UtilGenericViewSetNc             C   s   t | jj|jd< |  dS )z+if model not have company_id, need overrideZ
company_idN)r   r   userZvalidated_dataZsave)r   r   r   r   r   perform_create@   s    z!UtilGenericViewSet.perform_createc          
   O   sT   |   }y| | W n0 tk
rF } ztd|itjdS d }~X Y nX ttjdS )NZdetail)r   )Z
get_objectZperform_destroyr"   r   r   ZHTTP_400_BAD_REQUESTZHTTP_204_NO_CONTENT)r   r   argskwargsinstanceer   r   r   destroyE   s     zUtilGenericViewSet.destroy)r   r   r   r   r	   schemar   ZIsAuthenticatedr   Zpermission_classesr   pagination_classr   r   SearchFilterOrderingFilterfilter_backendsr(   r-   r   r   r   r   r&   4   s   r&   c               @   s$   e Zd Ze ZeZeej	ej
fZdS )SimpleViewSetN)r   r   r   r	   r.   r   r/   r   r   r0   r1   r2   r   r   r   r   r3   O   s
   r3   N)Zrest_frameworkr   r   r   r   Zrest_framework.responser   Zdjango_filters.rest_frameworkr   Zmysite.api.utilsr   Zmysite.api.utils_classr	   r
   r   r   r   r   r   r   ZGenericViewSetr&   r3   r   r   r   r   <module>   s   