B
    bl              
   @   s  d dl Z d dlZd dlZd dlZd dlZ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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$ 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l0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl4m6Z6 d dl4m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlAmFZFmGZG d d lHmIZI ejJKeBd!ZLejJKeBd"ZMejJKeMd#ZNe"e ejOd$d:d&d'ZPG d(d) d)e3ZQdddd*dd+e/e1jRe1jSdf
d,d-ZTG d.d/ d/e;ZUG d0d1 d1eVZWG d2d3 d3e7jXZYG d4d5 d5e+ZZG d6d7 d7eVZ[G d8d9 d9eVZ\dS );    N)groupby)
itemgetter)OrderedDict)gettext_lazyactivate)loader)HttpResponse)settings)includeurl)InvalidPage)translation)	post_save)receiver)Token)get_docs_viewget_schemajs_view)NotFound)PageNumberPagination)Response)SchemaGenerator)api_settings)APIView)status)compat)permissions)action)
AutoSchemaViewInspector)	HTMLToPDF)get_system_setting)ADDITION_FILE_ROOT)report_dict
title_dict)SHOW_ALL_API_DOCSENABLE_IsOpenAPIPermission)get_real_company_logo_nameZreportszcompany_logo/zcompany_logo.jpg)senderFc             K   s   |rt jj|d d S )N)user)r   Zobjectscreate)r'   instanceZcreatedkwargs r,   /G:\easytimepro\master/mysite/api\utils_class.pycreate_auth_token2   s    r.   c               @   s   e Zd Zdd ZdS )APIDocsc             C   s  ddl m} ||}dj|| d}trd|d fd|d fd	|d
 fd|d fd|d fd|d fd|d fd|d fd|d fd|d fd|d fd|d fd|d fd|d  fd!|d" fd#|d$ fg}n6d%|d fd|d fd	|d
 fd|d fd|d fg}t|}t|S )&Nr   )get_http_schemaz{scheme}://{host})schemeZhostZapi_auth_docsz
/api/docs/Zpersonnel_api_rootz/personnel/api/Zpersonnel_api_docsz/api/personnel_docs/Ziclock_api_rootz/iclock/api/Ziclock_api_docsz/api/iclock_docs/Zatt_api_rootz	/att/api/Zatt_api_docsz/api/att_docs/Zworkflow_api_rootz/workflow/api/Zworkflow_api_docsz/api/workflow_docs/Zstaff_api_rootz/staff/api/Zstaff_api_docsz/api/staff_docs/Zpayroll_api_rootz/payroll/api/Zpayroll_api_docsz/api/payroll_docs/Zcloud_api_v1_internal_rootz/cloud/api/v1/internal/Zcloud_api_v1_external_rootz/cloud/api/v1/external/Zcloud_api_docsz/api/cloud_docs/Zapi_api_docs)mysite.base.utilsr0   formatZget_hostr$   r   r   )selfrequestr0   r1   Zbase_urlZurl_listZreturn_datar,   r,   r-   get:   s6    


















zAPIDocs.getN)__name__
__module____qualname__r6   r,   r,   r,   r-   r/   8   s   r/   Tzapi-docsc
             C   sb   t | |||||||	|d	}
t| |||||||d}td|
ddtd|ddg}t|dft|d	S )
N)	titledescription
schema_urlpublicpatternsgenerator_classauthentication_classesrenderer_classespermission_classes)r:   r;   r<   r=   r>   r?   r@   rB   z^$z
docs-index)namez^schema.js$z	schema-jszapi-docs)	namespace)r   r   r   r
   str)r:   r;   r<   r=   r>   rD   r?   r@   rB   rA   Z	docs_viewZschema_js_viewZurlsr,   r,   r-   my_include_docs_urls`   s,    rF   c               @   s   e Zd ZdZdd ZdS )MyAutoSchemaz
    about api auto docs
    c          
   C   s   |  ||s$|dd dkr ng S |dd dkr:g S g }x"| jjD ]}|| | j7 }qHW |dd dkr|tjjdddtjj	dd	d
dddg7 }|tjjdddtjj	dd	d
dddg7 }|S )z
        rewrite get_filter_fields return fields
            add: export filter fields
            delete: end with {id} url params
        /exportz{id}export_typeTZqueryzexport type: csv, xls, txt)r;   rE    )rC   requiredlocationZschematypeZexampler;   export_headersFzheaders split with ',')
Z_allows_filterssplitviewZfilter_backendsZget_schema_fieldsr   ZcoreapiZFieldZ
coreschemaString)r4   pathmethodfieldsZfilter_backendr,   r,   r-   get_filter_fields   s:    zMyAutoSchema.get_filter_fieldsN)r7   r8   r9   __doc__rW   r,   r,   r,   r-   rG      s   rG   c               @   s   e Zd Zdd ZdS )DefaultSchemac             C   s&   t }t|tstd| }||_|S )NzMyAutoSchema Error)rG   
issubclassr   AssertionErrorrR   )r4   r*   ownerZinspector_classZ	inspectorr,   r,   r-   __get__   s    zDefaultSchema.__get__N)r7   r8   r9   r]   r,   r,   r,   r-   rY      s   rY   c               @   s   e Zd ZdZdd ZdS )IsOpenAPIPermissionuD  
    对于不同身份验证信息的权限控制, 控制某些接口只能内部base_auth和session_auth, 阻止使用api token登录。
    For the permission control of different authentication information, some interfaces
    can only control internal base_auth and session_auth, and prevent login using api token.
    c             C   s   t r|jrdS dS dS d S )NFT)r%   Zauth)r4   r5   rR   r,   r,   r-   has_permission   s    z"IsOpenAPIPermission.has_permissionN)r7   r8   r9   rX   r_   r,   r,   r,   r-   r^      s   r^   c               @   s.   e Zd ZdZdZdZdZd
ddZdd	 ZdS )DefaultPaginationBase
   	page_sizepagei?B Nc       	   
   C   s.  |  |}|sdS |j| jd}|sN| ||}|d| _|| _t| jS | ||}|| jkrj|j	}t
|tsyt|}W n tk
r   tdY nX ||jkr|j	}y||| _W n@ tk
r } z"| jj|t|d}t|W dd}~X Y nX |j	dkr| jdk	rd| _|| _t| jS )z
        Paginate a queryset if required, either returning a
        page object, or `None` if pagination is not configured for this view.
        N   zInvalid Page.)page_numbermessageT)get_page_sizequery_paramsr6   page_query_paramZdjango_paginator_classrc   r5   listZlast_page_stringsZ	num_pages
isinstanceint
ValueErrorr   Z
page_ranger   Zinvalid_page_messager3   sixZ	text_typetemplateZdisplay_page_controls)	r4   querysetr5   rR   rb   re   	paginatorexcmsgr,   r,   r-   paginate_queryset   s:    




z'DefaultPaginationBase.paginate_querysetc          	   C   sR   ddl m} ttd| jjjfd|| j|  fd|| j| 	 fddd|fgS )	Nr   )convert_url_schemacountnextZprevious)rs   rL   )coder   data)
r2   ru   r   r   rc   rq   rv   r5   Zget_next_linkZget_previous_link)r4   ry   ru   r,   r,   r-   get_paginated_response  s    z,DefaultPaginationBase.get_paginated_response)N)	r7   r8   r9   rb   Zpage_size_query_paramri   Zmax_page_sizert   rz   r,   r,   r,   r-   r`      s   
*r`   c               @   s   e Zd ZdZedd Zdd Zdd Zdd	 Ze	d
gdddd Z
dd Zd5ddZd6ddZd7ddZd8ddZd9ddZd:ddZdd Zd;d d!Zd<d"d#Zd=d$d%Zd>d&d'Zd(d) Zd?d+d,Zd@d-d.ZdAd/d0Zd1d2 Zd3d4 ZdS )BBaseExportModelMixinzM
    Define Export Operations to List.
    It base to List Get Operation
    c                s    fdd}|S )Nc                s$  | krdS dd  ydd |D }dt |p0d S  tk
r } zydd |D }dt |pbd S  tk
r } zyV fdd|D }t |}|rtt|d	 d
}t|d	 d
}d||f S dS  tk
 r } zt| dS d }~X Y nX W d d }~X Y nX W d d }~X Y nX d S )NrL   c             S   s"   |  d\}}t|d t| S )N:<   )rQ   rl   )valZhoursZminutesr,   r,   r-   
time_count  s    zEBaseExportModelMixin.data_count.<locals>.data_sum.<locals>.time_countc             S   s   g | ]}t |pd qS )r   )rl   ).0xr,   r,   r-   
<listcomp>#  s    zEBaseExportModelMixin.data_count.<locals>.data_sum.<locals>.<listcomp>z%sc             S   s   g | ]}t |pd qS )g        )float)r   r   r,   r,   r-   r   (  s    c                s   g | ]} |pd qS )z00:00r,   )r   r   )r   r,   r-   r   ,  s    r}      z%s:%s)sum	ExceptionrE   rl   zfillprint)iitemsry   eZsum_valhm)total_fields_index)r   r-   data_sum  s,    z1BaseExportModelMixin.data_count.<locals>.data_sumr,   )r   r   r,   )r   r-   
data_count  s    zBaseExportModelMixin.data_countc             C   s   |S )Nr,   )r4   headersr,   r,   r-   update_export_headers9  s    z*BaseExportModelMixin.update_export_headersc       	      C   s@  g }t | drdd | jjjD }|  j}|dd | D  x|D ]f}||krJt | j|rJt| j|}t |dr|j||< qJt	|t
rJt |drJt |jdrJ|jj||< qJW nt| jrt| j }ni }t | dr|| j xR|D ]J}||rt||}nt|}|dkr.|d	kr.d}|| qW |S )
Nmodelc             S   s   i | ]}|j |jqS r,   )verbose_namerC   )r   fieldr,   r,   r-   
<dictcomp>?  s    z@BaseExportModelMixin.get_headers_translation.<locals>.<dictcomp>c             S   s   i | ]\}}|j r|j |qS r,   )label)r   rC   r   r,   r,   r-   r   D  s    short_descriptionfgetextra_headers_translation_dictidZID)hasattrr   _metarV   get_serializerupdater   getattrr   rk   propertyr   r"   r6   basenamer   rE   append)	r4   rP   translated_headersZverbose_namesrV   rC   attrheaderZtemp_headerr,   r,   r-   get_headers_translation<  s8    









z,BaseExportModelMixin.get_headers_translationc             C   s6   |  |  }d|jkr"| |}| j|dd}|jS )Nrb   T)Zmany)Zfilter_querysetZget_querysetrh   rt   r   ry   )r4   r5   rp   
serializerr,   r,   r-   get_export_datah  s
    

z$BaseExportModelMixin.get_export_datar6   F)methodsdetailc       
      C   s  |  |}t|r|d  ng }|jdd}|jdd}|jdd| _|jdd| _yz|rp|d}nt| dr| j	}n|}y|
d W n   Y nX g }x&|D ]}||kr||kr|| qW |r|}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 r<tt|}|dkrT| ||}	nT|dkrn| |||}	n:|dkr| ||}	n"|dkr| |||}	ntd}	|	S )Nr   rP   rL   rK   zpdf-page-sizeorientation,)rP   zexport_headers error)r   )csvtxtxlspdf)rK   z0export_type required and must in csv txt xls pdfr   r   r   r   z#export_type must in csv txt xls pdf)r   lenkeysrh   r6   pdf_page_sizer   rQ   r   rP   remover   r   r   r   r   HTTP_400_BAD_REQUESTr   get_language_bidirj   reversedexport_to_csvexport_to_xlsexport_to_txtexport_to_pdfr   )
r4   r5   datasZdata_fieldsrP   rK   Znew_export_headersr   Zmsg_listresponser,   r,   r-   rJ   o  sR    








zBaseExportModelMixin.exportc             C   s6   t | dr"| jjjr"t| jjjS tt| j| jS )Nr   )r   r   r   r   rE   r#   r6   r   )r4   r,   r,   r-   get_file_title  s    "z#BaseExportModelMixin.get_file_titleNc                s   |  |}| |}t|ts6d|  tdd }tdd}|t	j
 d| |d< tj|dd	}|| | x$|D ] | fd
d|D  q|W |S )Nz%(report_name)s_%(stamp)sz%Y%m%d%H%M%S)report_namestampztext/csv;charset=UTF-8)content_typezattachment;filename=%s.csvzContent-Dispositionexcel)dialectc                s   g | ]}  |d qS )rL   )r6   )r   key)ry   r,   r-   r     s    z6BaseExportModelMixin.export_to_csv.<locals>.<listcomp>)update_datas_before_exportr   rk   rE   r   timestrftimer   writecodecsBOM_UTF8r   writerwriterowr   )r4   rP   r   	file_nametranslation_headersr   r   r,   )ry   r-   r     s    




z"BaseExportModelMixin.export_to_csvc       
   	      s   ddl m} t|ts.d|  tdd }|d||f }t|ddJ}t	j
|d	d
}	|	| | x$|D ] |	 fdd|D  qrW W d Q R X |S )Nr   )	smart_strz%(report_name)s_%(stamp)s.csvz%Y%m%d%H%M%S)r   r   z%s/%swbzutf-8r   )r   c                s   g | ]}  |d qS )rL   )r6   )r   r   )ry   r,   r-   r     s    z6BaseExportModelMixin.save_csv_file.<locals>.<listcomp>)django.utils.encodingr   rk   rE   r   r   r   r   openr   r   r   r   )
r4   rP   r   export_pathr   r   r   export_filefr   r,   )ry   r-   save_csv_file  s    

&z"BaseExportModelMixin.save_csv_filec             C   s  dd l }yddlm} W n   ddlm} Y nX |jdd}|jdd}| }	||	}
|dkr|jt	| j
| d |dkrxltt|t	| j
| D ]:\}\}}g }x|D ]}|| qW | ||
||| qW n| j||
||d	d
 n| j||
||d	d
 |
  |	 }|S )Nr   )StringIO)BytesIOexport_stylerL   Z	page_wise)r   ZonZreport)sheet_items
sheet_name)
xlsxwriterZ	cStringIOr   ior   ry   r6   ZWorkbooksortr   ZEXPORT_STYLE_DICT	enumerater   r   _create_xls_sheetclosegetvalue)r4   r5   rP   r   r   r   r   r   Zexport_per_pageZfile_bufferworkbookindexr   Zsheet_items_iterr   r   xls_datar,   r,   r-   _get_xls_data  s.    
"
z"BaseExportModelMixin._get_xls_datac       7         s  dd l }ddlm} d}|jr`|jdd}	|jdd}
|jdd}d|	|
}|dkr`d	}ytd
|jj}W n   td
|jj	j
j}Y nX d}d}d}|r|}|dd}t|d|}t|d|}|}t|}|d }|ddddd	d	d	d}d}t rd}|d|ddd}||} }|jdd }|rV|}| dk ri }x|D ]}d||< qnW || g }xXt|D ]L\}}g } x2|D ]*}!| ttt||!ddd  qW ||  qW g } x |D ]}"| t|"d  qW ||  tttt| }#x(t|#D ]\}}$|||d |$ q4W d}%yt|jj}&W n   t|jj	j
j}&Y nX |rtj !|&ryt"j#$|&d}'d|'j%d  i}(|dkr|&d||&|( n`|dkr&d})x|#D ]}|)|7 })qW |(d d|)  d |(d< |&d||&|( n|&dd|&|( |'j%d d dkr^|'j%d d d pj|'j%d d }*|%|*7 }%|%dkr|%d8 }%W n& t'k
r   dd l(}+|+)  Y nX |r>|r>||krd},nd},|dkrd}-n"|dkrd}-||krd },nd}-|dd|-|,d	d	d	d}.|*ddt|%|||. |%d7 }%n|dddd d	d	d	d}.t|%}%|*|%d|%||| |%d7 }%|r|*|%d|%||| |%d7 }%x8t|D ],\}/}0|+|%|/|0| ||/|/|#|/  qW |%d7 }%t,d!sg _-fd"d#t|D _.g }1xzt|D ]n\}2  fd$d#|D }3|1|3 xFt|3D ]:\}4}5|5sXd}5|+|%|2 |4|5| ||4|4|#|4  qFW qW |rttfd%d&ttd'd# |1D  }6t rd(t/d) |6d*< nd(t/d) |6d< |0d+t|%|2 d  |6| d S ),Nr   )SystemSettingF
start_daterL   end_dater   zDate: From {0} To {1}Tcompany_settingcompany_nameZname_posZlogo_posrd   ZArialZ16centerZvbottom)	font_nameZ	font_sizealignvalignZboldleftrightr   r   )r   r   r   Zborderfilename   rZx_offset   r   g|?5^@   topZvcenternot_statics_fieldc                s2   g | ]*\}}| j kr|d s|ds|qS )Zin_timeZout_time)r   
startswith)r   r   value)r4   r,   r-   r     s    

z:BaseExportModelMixin._create_xls_sheet.<locals>.<listcomp>c                s,   g | ]$}t  |d krdn |qS )NrL   )rE   r6   )r   r   )row_data_dictr,   r-   r     s   c                s      j| |S )N)r   statics_fields_index)r   r   )r4   r,   r-   <lambda>      z8BaseExportModelMixin._create_xls_sheet.<locals>.<lambda>c             S   s   g | ]}|qS r,   r,   )r   ry   r,   r,   r-   r     s    z%sZTotalA)1jsonZmysite.base.models.sys_settingr   ry   r6   r3   r    r(   current_company
departmentcompanyr   rl   r   r   Z
add_formatr   r   Zadd_worksheetr   GET__len__r   r   maxrE   rj   mapzipZ
set_columnr&   osrT   existsPILZImager   sizeZinsert_imager   	traceback	print_excZmerge_ranger   r   r   r   _Z	write_row)7r4   r5   r   rP   r   r   r  r   Zneed_other_headr   r   r   Zdate_stringr   Zcompany_displayZlogo_displayr   Zcompany_paramsr   Zhead_lenZmax_row_indexZtitle_formatZsideZxcell_formatZ	worksheetr:   request_file_namedkwcellsr   lineZwcellr   r   Zwcsr   Z	row_indexZreal_company_logo_nameZimageoptionsZcoloum_sizeZrsr  r   r   Zcompany_formatr   r   Ztotal_row_dataZrow_index_temZrow_dataZ	col_indexZcol_dataZsummary_colsr,   )r   r4   r-   r     s(   







*




6










z&BaseExportModelMixin._create_xls_sheetc             C   s   |j dd }|r&d|tdd }| |}| |}| j|||d d}t|tsnd| 	 tdd }t
dd}d| |d	< || |S )
Nr   z%(report_name)s_%(stamp)sz%Y%m%d%H%M%S)r   r   )r   zAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet)r   zattachment;filename=%s.xlsxzContent-Disposition)r  r6   r   r   r   r   r   rk   rE   r   r   r   )r4   r5   rP   r   r   r  r   r   r,   r,   r-   r     s    




z"BaseExportModelMixin.export_to_xlsc       
   	   C   st   ddl m} | j|||d d}t|ts@d|  tdd }|d||f }t|d}	|		| W d Q R X |S )	Nr   )r   )r   z%(report_name)s_%(stamp)s.xlsxz%Y%m%d%H%M%S)r   r   z%s/%sr   )
r   r   r   rk   rE   r   r   r   r   r   )
r4   r5   rP   r   r   r   r   r   r   r   r,   r,   r-   save_xls_file  s    
z"BaseExportModelMixin.save_xls_filec             C   s   |S )Nr,   )r4   r   r,   r,   r-   r     s    z/BaseExportModelMixin.update_datas_before_exportc       	         s   |  |}| |}t|ts4|  tdd  }tdd}d| |d< d}d}| |}|	|
||  x2|D ]* |
 fd	d
|D }|	||  qvW |S )Nz%Y-%m-%d-%H-%M-%S_rJ   z
text/plain)r   zattachment;filename=%s.txtzContent-Dispositionr   z
c                s,   g | ]$}t  |d krdn |qS )NrL   )rE   r6   )r   r   )ry   r,   r-   r     s   z6BaseExportModelMixin.export_to_txt.<locals>.<listcomp>)r   r   rk   rE   r   r   r   r   r   r   join)	r4   rP   r   r   r   
split_charline_endr   row_strr,   )ry   r-   r     s     







z"BaseExportModelMixin.export_to_txtc          	      s   ddl m} t|ts.d|  tdd }|d||f }d}d}	t|d	X}
| |}|
	|
||	  x2|D ]* |
 fd
d|D }|
	||	  qvW W d Q R X |S )Nr   )r   z%(report_name)s_%(stamp)s.txtz%Y%m%d%H%M%S)r   r   z%s/%sr   z
wc                s,   g | ]$}t  |d krdn |qS )NrL   )rE   r6   )r   r   )ry   r,   r-   r     s   z6BaseExportModelMixin.save_txt_file.<locals>.<listcomp>)r   r   rk   rE   r   r   r   r   r   r   r  )r4   rP   r   r   r   r   r   r   r  r  r   r   r  r,   )ry   r-   save_txt_file  s     




z"BaseExportModelMixin.save_txt_filec             C   s   | j |||||ddS )Nfile)pdf_type)get_pdf)r4   r5   rP   r   r   r   r,   r,   r-   save_pdf_file  s    z"BaseExportModelMixin.save_pdf_filec             C   s   |  |||||S )N)r!  )r4   r5   rP   r   r   r   r,   r,   r-   r     s    z"BaseExportModelMixin.export_to_pdfc             C   s   yt d| jjj}| jjj}W n.   t d| jjjjj}| jjjjj}Y nX t d|}y|d}W n   d}Y nX |d krdddddd}|d	}||fS )
Npdf_report_settingr   r   rL   AutoPortraitClassic)z	page-sizezfooter-leftzfooter-rightr   zreport-stylezreport-style)r    r5   r(   r  r  r  r   r6   )r4   r#  r  r   r   report_styler,   r,   r-   get_export_style  s     


z%BaseExportModelMixin.get_export_styler   c             C   s  |  ||}ttt |d< |  \|d< }|dkr@dnd}	t|	|}
y|jj	}W n   |jj
jj}Y nX |d |d  | |d |}| j||d}|stjttd	}|sd
|  tdd }tj||}t|
||d}|dkr| S |  |S d S )NZ
print_dater   r&  zbase_pdf_classic_tmp.htmlzbase_pdf_tmp.htmlr   r   )
_page_size
company_idz%Y%mz%(report_name)s_%(stamp)s.pdfz%Y%m%d%H%M%S)r   r   )Zextra_optionsr   )get_pdftpl_contextr   asctime	localtimer(  r   get_templaterenderr(   r  r  r  r   r   rg   get_pdf_optionsr  rT   r  EXPORT_ROOTr   r   r   Zreturn_responseZsave)r4   r5   rP   r   r   r   r   contextr'  Z	html_filehtmlr  rb   r  	file_pathZ	htmltopdfr,   r,   r-   r!    s.    
zBaseExportModelMixin.get_pdfc                sX   |  |}g }x$|D ] | fdd|D  qW i }|  |d< ||d< ||d< |S )Nc                s*   g | ]"}  |d krdn
  |dqS )NrL   )r6   )r   r   )ry   r,   r-   r     s   z;BaseExportModelMixin.get_pdftpl_context.<locals>.<listcomp>r:   r   r   )r   r   r   )r4   rP   r   r   r   	data_listr2  r,   )ry   r-   r+    s    

z'BaseExportModelMixin.get_pdftpl_contextc             C   s   t j  }td|}|d kr&ddd}|d}|d}|d}|d}d| jj|d	d
| jj|d	f d}	| jdkr| j}i }
|r||
d< |r||
d< |r|	|d|
d< |r|	|d|
d< | |
| |r||
d< |
S )Nr#  rL   )zfooter-leftzfooter-rightz	page-sizer   zfooter-leftzfooter-rightz[page]/[toPage]z%Y-%m-%dz%s %s)z[page]/[toPage]ZAuthorZTimezAuthor+Time)r%  	Landscape)	datetimeZnowr    r6   r5   r(   r   r   
set_header)r4   r)  r*  Zdt_nowr#  rb   r   Zfooter_leftZfooter_rightZoption_dictr  r,   r,   r-   r0  #  s8    






z$BaseExportModelMixin.get_pdf_optionsc       	   	   C   s   t d|}|rtjtd}t|d }tj||}tj|sLt| t	d
|}t|ddd}|| W d Q R X ||d< d S )Nr   zpdf_header/zpdf_header.htmlr  utf8)encodingzheader-html)r    r  rT   r  r!   rE   r  makedirsr   r.  r/  r   r   )	r4   r  r*  r   Zpdf_header_pathZlogo_html_nameZ	logo_htmlr3  r   r,   r,   r-   r8  J  s    

zBaseExportModelMixin.set_headerc             C   s  | j dkr| j }|dkr|S td|}|d kr2i }| j dkrR|d}|dkrR|S | jdkrd| j}n
|d}dd	 |D }tttt| }d
| }d}	xdD ]}
||
k r|
}	P qW ddgddgddgddgddgddgddgd}||	ddg}|dkr|d S |d S )NZDefault)A0A1A2A3A4A5ZB0ZB1ZB2ZB3ZB4ZB5r#  r$  z	page-size)r%  r6  r   c             S   s   g | ]}d d |D qS )c             S   s   g | ]}t t|qS r,   )r   rE   )r   itemr,   r,   r-   r   k  s   zABaseExportModelMixin.get_page_size.<locals>.<listcomp>.<listcomp>r,   )r   r  r,   r,   r-   r   k  s   z6BaseExportModelMixin.get_page_size.<locals>.<listcomp>g      @r   )      i)  i  iR  iI  i  rA  r@  r?  r>  r=  r<  r6  rd   )r   r    r6   r   r   r	  r  r
  )r4   r5  r*  rb   r#  r   r  Zmax_lenZstr_sizeZpdf_sizer   Zpage_size_dictr,   r,   r-   rg   W  s@    






z"BaseExportModelMixin.get_page_size)NN)NN)N)N)N)N)N)NN)NN)NN)NNr   )N)NN)r7   r8   r9   rX   staticmethodr   r   r   r   r   rJ   r   r   r   r   r   r   r  r   r   r  r"  r   r(  r!  r+  r0  r8  rg   r,   r,   r,   r-   r{     s2   #,9



 4








'r{   c               @   s&   e Zd ZdZedgdddd ZdS )BaseActionModelMixinzV
    Define Action Operations to Bulk Objects.
    It base to List Post Operation
    ZpostF)r   r   c       
      C   s   | j |jd}|jdd |j}|dg }|dd}|sRddi}t|tjd	S d
}t| d| }|r||\}	}t	|	dkrd}|sd|d
|	f }nd}d| }|rtd|itjd	S tddt|t|f iS d S )N)ry   T)Zraise_exception
object_idsaction_typerL   r   zcan not find action.)r   Fz	action_%sr   z%s error:%s.r   zcan not find action_%s.zSuccess. %s:%s)r   ry   Zis_validvalidated_datar6   r   r   r   r   r   r  rE   )
r4   r5   r   rI  rG  rH  Z	error_msgZ
error_flagZaction_funcZ
error_listr,   r,   r-   r     s.    zBaseActionModelMixin.actionN)r7   r8   r9   rX   r   r,   r,   r,   r-   rF    s   rF  )NF)]r   r7  r  rn   Z	PIL.Imager  r   r   	itertoolsr   operatorr   collectionsr   Zdjango.utils.translationr   r  r   Zdjango.templater   Zdjango.httpr   Zdjango.confr	   Zdjango.conf.urlsr
   r   Zdjango.core.paginatorr   Zdjango.utilsr   Zdjango.db.models.signalsr   Zdjango.dispatchr   Zrest_framework.authtoken.modelsr   Zrest_framework.documentationr   r   Zrest_framework.exceptionsr   Zrest_framework.paginationr   Zrest_framework.responser   Zrest_framework.schemasr   Zrest_framework.settingsr   Zrest_framework.viewsr   Zrest_frameworkr   r   r   Zrest_framework.decoratorsr   Z!rest_framework.schemas.inspectorsr   r   Zmysite.tools.html_to_pdfr   Zmysite.utilsr    Zmysite.settingsr!   Zmysite.api.report_export_dictr"   r#   r$   r%   r2   r&   rT   r  r1  ZCOMPANY_LOGO_PATHZCOMPANY_LOGO_NAMEZAUTH_USER_MODELr.   r/   ZDEFAULT_AUTHENTICATION_CLASSESZDEFAULT_PERMISSION_CLASSESrF   rG   objectrY   ZBasePermissionr^   r`   r{   rF  r,   r,   r,   r-   <module>   st   )2=    x