B
    ,D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 d d	lmZ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dS )é    )Úlabel_for_field)Úcache)ÚDjangoFilterBackend)Úfilters)Ústatus)Úviewsets)Úpermissions)ÚResponse)Úreport_dictÚother_field_dict)ÚDefaultSchemaÚDefaultPaginationBaseÚBaseExportModelMixinÚBaseActionModelMixinÚIsOpenAPIPermissionc               @   s   e Zd ZdS )ÚDefaultPaginationN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú3G:\easytimepro\master/mysite/acc\api\utils_class.pyr      s   r   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚExportModelMixinzM
    Define Export Operations to List.
    It base to List Get Operation
    c       
      C   sâ   g }t | dƒr^|  ¡ }|ƒ  ¡ }i }xT| ¡ D ]*\}}|jrH|j||< q.t|| jƒ||< q.W nt | j	¡rvt| j	 }ni }xb|D ]Z}| |¡ržt
| |¡ƒ}	n&t |¡r¸t
t |¡ƒ}	nt
t|ƒƒ}	|dkrÐd}	| |	¡ q€W |S )NÚmodelÚid)ÚhasattrZget_serializer_classZ
get_fieldsÚitemsÚlabelr   r   r
   ÚgetÚbasenameÚstrr   Ú_Úappend)
ÚselfZexport_headersZtranslated_headersZ_classZfieldsZverbose_namesÚnameZfieldÚheaderZtemp_headerr   r   r   Úget_headers_translation   s,    




z(ExportModelMixin.get_headers_translationc             C   s   |j j}d |¡}d |¡}d |¡}d |¡}d |¡}|  |  ¡ ¡}| jdkr`t |d¡}	nd| jdkrxt |d¡}	nL| jd	krt |d¡}	n4| jd
kr¨t |d¡}	n| jdkrÀt |d¡}	nd}	|j d¡rÜ|  	|¡}n|	rì|j
|	d}| j|dd}
|
jS )Nzcurrent_timezone_area_{0}zcurrent_holiday_area_{0}zcurrent_group_area_{0}zcurrent_combination_area_{0}zcurrent_privilege_area_{0}Zacctimezonesé   ZaccholidaysZ
accgroupssZacccombinationsZaccprivilegesr   Zpage)Zarea__pkT)Zmany)ÚuserÚcurrent_companyÚformatZfilter_querysetZget_querysetr   r   r   Zquery_paramsZpaginate_querysetÚfilterZget_serializerÚdata)r"   Úrequestr(   Zcurrent_timezone_area_keyZcurrent_holiday_area_keyZcurrent_group_area_keyZcurrent_combination_area_keyZcurrent_privilege_area_keyZquerysetZcurrent_areaZ
serializerr   r   r   Úget_export_data=   s0    









z ExportModelMixin.get_export_dataN)r   r   r   Ú__doc__r%   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Ú )r   Zobjectsr*   r   ÚdeleteÚ	Exceptionr!   )r"   Z
object_idsZ
error_listÚobjZobj_idZ	error_msgr   r   r   Úaction_deleteb   s    zActionModelMixin.action_deleteN)r   r   r   r.   r4   r   r   r   r   r/   \   s   r/   c               @   s:   e Zd ZdZeƒ ZeZej	e
fZeejejfZdd„ ZdS )ÚUtilGenericViewSetNc          
   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_destroyr2   r	   r   ZHTTP_400_BAD_REQUESTZHTTP_204_NO_CONTENT)r"   r,   ÚargsÚkwargsÚinstanceÚer   r   r   Údestroyz   s     zUtilGenericViewSet.destroy)r   r   r   r   r   Zschemar   Zpagination_classr   ZIsAuthenticatedr   Zpermission_classesr   r   ZSearchFilterZOrderingFilterZfilter_backendsr:   r   r   r   r   r5   n   s   r5   N)Zdjango.contrib.admin.utilsr   Zdjango.core.cacher   Zdjango_filters.rest_frameworkr   Zrest_frameworkr   r   r   r   Zrest_framework.responser	   Zmysite.api.report_export_dictr
   r   Zmysite.api.utils_classr   r   r   r   r   r   r   r/   ZGenericViewSetr5   r   r   r   r   Ú<module>   s   F