B
    ÒîbÌ  ã               @   sz  d dl Z d dl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 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 d dlmZmZ d dl m!Z! d dl"m#Z# dZ$e j% &e#j'e$¡Z(e j% )e(¡s"ye  *e(¡ W n   Y nX G dd„ deƒ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-ƒZ0dS )é    N)ÚOrderedDict)ÚJsonResponse)Úfilters)Ústatus)Úviewsets)Úpermissions)ÚResponse)ÚDjangoFilterBackend)Úgettext_lazy)Úlabel_for_field)Úaction)ÚHttpResponse)ÚDefaultSchemaÚDefaultPaginationBaseÚBaseActionModelMixinÚBaseExportModelMixinÚIsOpenAPIPermission)Úreport_dictÚother_field_dict)Úserializers)ÚsettingsZreportsc               @   s   e Zd ZdS )ÚDefaultPaginationN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú7G:\easytimepro\master/mysite/payroll\api\utils_class.pyr   #   s   r   c               @   s*   e Zd Zdd„ Zedgdddd„ ƒZdS )	ÚReportExportMixinc             C   s6   |   |  ¡ ¡}d|jkr"|  |¡}| j|dd}|jS )NZ	page_sizeT)Úmany)Úfilter_querysetÚget_querysetÚdataÚpaginate_querysetÚget_serializer)ÚselfÚrequestÚquerysetÚ
serializerr   r   r   Úget_export_data)   s
    

z!ReportExportMixin.get_export_dataZpostF)ÚmethodsÚdetailc             C   sÒ  |   |¡}|stdddœƒS t|ƒr0|d  ¡ ng }|j dd¡}|j dd¡}|j dd¡| _|j d	d¡| _yZ|r‚| d
¡}nt	| dƒr”| j
}n|}g }x&|D ]}||kr¢||kr¢| |¡ q¢W |}W n( tk
rò   dg}tt|ƒtjdS X |dkrdg}tt|ƒtjdS tj tt d¡¡}	tj |	¡sBt |	¡ |dkr\|  |||	¡}
nV|dkrx|  ||||	¡}
n:|dkr’|  |||	¡}
n |dkr®|  ||||	¡}
nd}
tddtjtt d¡|
f iƒS )Néÿÿÿÿzno datas)ÚcodeÚmsgr   Úexport_headersÚ Úexport_typezpdf-page-sizeÚorientationú,)r.   zexport_headers error)r   )ÚcsvÚtxtÚxlsÚpdf)r0   z0export_type required and must in csv txt xls pdfz%Y%mr3   r5   r4   r6   r*   z
%s%s/%s/%s) r(   r   ÚlenÚkeysr!   ÚgetZpdf_page_sizer1   ÚsplitÚhasattrr.   ÚappendÚ	Exceptionr   r   r   ZHTTP_400_BAD_REQUESTÚosÚpathÚjoinÚEXPORT_ROOTÚtimeÚstrftimeÚisdirÚmkdirZsave_csv_fileZsave_xls_fileZsave_txt_fileZsave_pdf_filer   ZFILE_URLÚEXPORT_FOLDER)r$   r%   ZdatasZdata_fieldsr.   r0   Znew_export_headersÚheaderZmsg_listZexport_pathÚ	file_namer   r   r   Úexport0   sT    








zReportExportMixin.exportN)r   r   r   r(   r   rI   r   r   r   r   r   '   s   r   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚExportModelMixinzQ
      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)r;   Úget_serializer_classZ
get_fieldsÚitemsÚlabelr   rK   r   r9   ÚbasenameÚstrr   Ú_r<   )
r$   r.   Ztranslated_headersZ_classZfieldsZverbose_namesÚnameZfieldrG   Ztemp_headerr   r   r   Úget_headers_translationl   s,    




z(ExportModelMixin.get_headers_translationc             C   s8   |   |  ¡ ¡}|j d¡r$|  |¡}| j|dd}|jS )NZpageT)r   )r   r    Zquery_paramsr9   r"   r#   r!   )r$   r%   r&   r'   r   r   r   r(      s
    
z ExportModelMixin.get_export_dataN)r   r   r   Ú__doc__rT   r(   r   r   r   r   rJ   f   s   !rJ   c               @   s   e Zd ZdZdd„ ZdS )ÚActionModelMixinzZ
      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/   )rK   ZobjectsÚfilterrL   Údeleter=   r<   )r$   Z
object_idsZ
error_listÚobjZobj_idZ	error_msgr   r   r   Úaction_delete›   s    zActionModelMixin.action_deleteN)r   r   r   rU   rZ   r   r   r   r   rV   •   s   rV   c               @   sF   e Zd ZdZeƒ ZejefZ	e
ZeejejfZi Zdd„ Zdd„ ZdS )ÚUtilGenericViewSetNc             C   s   | j  | jtj¡S )N)Úserializer_dictr9   r   r   ZNoneSerializer)r$   r   r   r   rM   µ   s    z'UtilGenericViewSet.get_serializer_classc          
   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_destoryr=   r   r   ZHTTP_404_NOT_FOUNDZHTTP_204_NO_CONTENT)r$   r%   ÚargsÚkwargsÚinstanceÚer   r   r   Údestroy¹   s     zUtilGenericViewSet.destroy)r   r   r   rK   r   Zschemar   ZIsAuthenticatedr   Zpermission_classesr   Zpagination_classr	   r   ZSearchFilterZOrderingFilterZfilter_backendsr\   rM   ra   r   r   r   r   r[   §   s   r[   )1r>   rB   Úcollectionsr   Zdjango.httpr   Zrest_frameworkr   r   r   r   Zrest_framework.responser   Zdjango_filters.rest_frameworkr	   Zdjango.utils.translationr
   rR   Zdjango.contrib.admin.utilsr   Zrest_framework.decoratorsr   r   Zmysite.api.utils_classr   r   r   r   r   Zmysite.api.report_export_dictr   r   Zmysite.payroll.apir   Úmysiter   rF   r?   r@   ZADDITION_FILE_ROOTrA   rD   rE   r   r   rJ   rV   ZGenericViewSetr[   r   r   r   r   Ú<module>   s<   ?/