B
    Y£®cØ  ã               @   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Zd dlmZmZ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 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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA d dl&m'Z' ejB Ce'jDd¡ZEd ZFdZGdZHd ZIG d!d"„ d"ejƒZJG d#d$„ d$ejƒZKG d%d&„ d&ejƒZLG d'd(„ d(ejƒZMG d)d*„ d*ejƒZNG d+d,„ d,e>ƒZOG d-d.„ d.e?ƒZPG d/d0„ d0e@ƒZQG d1d2„ d2ejRePeQƒZSG d3d4„ d4e?ƒZTG d5d6„ d6ejReTƒZUG d7d8„ d8eVƒZWG d9d:„ d:e*ƒZXdS );é    N)ÚOrderedDict)Úgroupby)Ú
itemgetter)ÚQÚFÚSumÚ
FloatField)Úloader)ÚHttpResponse)Úfilters)Ústatus)Úviewsets)Úpermissions)Úserializers)ÚResponse)Úaction)ÚDjangoFilterBackend)Úgettext_lazy)Úsettings)ÚJsonResponse)Ú	FilterSet)Ú	HTMLToPDF)Úget_system_setting)ÚSystemSetting)Úget_real_company_logo_name)Úvalue_format)ÚPayloadBase)ÚSTATUS_VALIDÚSTATUS_RESIGN_PENDING)Ú
C_ATT_RULE)ÚDefaultSchemaÚDefaultPaginationBaseÚBaseExportModelMixinÚBaseActionModelMixinÚIsOpenAPIPermissionZreportsé   é   é   c                   s<   e Zd ZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚIntegerFormatFieldz
    IntegerFormatField
    Nc                sp   d|kr|  d¡| _nds"tdƒ‚d|kr8|  d¡| _nd| _d|krT|  d¡| _nd| _tt| ƒjf |Ž d S )NÚ
format_keyFz0IntegerFormatField missing a kwargs `format_key`Údurationr   Úwork_day)Úpopr)   ÚAssertionErrorr*   r+   Úsuperr(   Ú__init__)ÚselfÚkwargs)Ú	__class__© ú3G:\easytimepro\master/mysite/att\api\utils_class.pyr/   :   s    zIntegerFormatField.__init__c                s2   |  dd¡| _|  dd¡| _d| _tt| ƒ |¡S )NÚsum_work_dayr   Úsum_durationT)Úgetr+   r*   Úsummary_type_reportr.   r(   Úget_attribute)r0   Úinstance)r2   r3   r4   r9   I   s    z IntegerFormatField.get_attributec                s8   t t| ƒ |¡}|dkrdS t|| j| j| j| jƒS d S )Nr   Ú )r.   r(   Úto_representationr   r)   r*   r+   r8   )r0   ÚobjÚrow_data)r2   r3   r4   r<   O   s    z$IntegerFormatField.to_representation)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   r/   r9   r<   Ú__classcell__r3   r3   )r2   r4   r(   4   s
   r(   c                   s<   e Zd ZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚIntegerFormatCountFieldz!
    IntegerFormatCountField
    Nc                sp   d|kr|  d¡| _nds"tdƒ‚d|kr8|  d¡| _nd| _d|krT|  d¡| _nd| _tt| ƒjf |Ž d S )Nr)   Fz5IntegerFormatCountField missing a kwargs `format_key`r*   r   r+   )r,   r)   r-   r*   r+   r.   rD   r/   )r0   r1   )r2   r3   r4   r/   ]   s    z IntegerFormatCountField.__init__c                s@   |  dd¡| _|  dd¡| _|  dd¡| _d| _tt| ƒ |¡S )Nr5   r   r6   Úsum_duty_durationT)r7   r+   r*   Úduty_durationr8   r.   rD   r9   )r0   r:   )r2   r3   r4   r9   l   s
    z%IntegerFormatCountField.get_attributec                s8   t t| ƒ |¡}|dkrdS t|| j| j| j| jƒS d S )Nr   r;   )r.   rD   r<   r   r)   rF   r+   r8   )r0   r=   r>   )r2   r3   r4   r<   s   s    z)IntegerFormatCountField.to_representation)	r?   r@   rA   rB   r)   r/   r9   r<   rC   r3   r3   )r2   r4   rD   W   s
   rD   c                   s<   e Zd ZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚIntegerFormatLeaveFieldz
    IntegerFormatField
    Nc                sp   d|kr|  d¡| _nds"tdƒ‚d|kr8|  d¡| _nd| _d|krT|  d¡| _nd| _tt| ƒjf |Ž d S )NÚformat_indexFz2IntegerFormatField missing a kwargs `format_index`r*   r   r+   )r,   rH   r-   r*   r+   r.   rG   r/   )r0   r1   )r2   r3   r4   r/      s    z IntegerFormatLeaveField.__init__c                s2   |  dd¡| _|  dd¡| _d| _tt| ƒ |¡S )Nr5   r   r6   T)r7   r+   r*   r8   r.   rG   r9   )r0   r:   )r2   r3   r4   r9      s    z%IntegerFormatLeaveField.get_attributec                s6   t t| ƒ |¡}|dkrdS t|d| j| j| jƒS d S )Nr   r;   Úleave)r.   rG   r<   r   r*   r+   r8   )r0   r=   r>   )r2   r3   r4   r<   –   s    z)IntegerFormatLeaveField.to_representation)	r?   r@   rA   rB   r)   r/   r9   r<   rC   r3   r3   )r2   r4   rG   {   s
   rG   c                   s<   e Zd ZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚIntegerFormatLeaveSummaryFieldz
    IntegerFormatField
    Nc                sŒ   d|kr|  d¡| _nds"tdƒ‚d|kr8|  d¡| _nd| _d|krT|  d¡| _nd| _d|krp|  d¡| _nd | _tt| ƒjf |Ž d S )NrH   Fz2IntegerFormatField missing a kwargs `format_index`r*   r   r+   Úleave_summary_dict)	r,   rH   r-   r*   r+   rK   r.   rJ   r/   )r0   r1   )r2   r3   r4   r/   ­   s    z'IntegerFormatLeaveSummaryField.__init__c                s2   |  dd¡| _|  dd¡| _d| _tt| ƒ |¡S )Nr5   r   r6   T)r7   r+   r*   r8   r.   rJ   r9   )r0   r:   )r2   r3   r4   r9   Á   s    z,IntegerFormatLeaveSummaryField.get_attributec                sŠ   yt |ƒ}W n tk
r$   d}Y nX tt| ƒ |¡}d}| jrh| j |d ¡}|rh| dj| jdd¡}|spdS t	|d| j
| j| jƒS d S )Nr   zsum_leave{index})Úindexr;   rI   )ÚintÚ	Exceptionr.   rJ   r<   rK   r7   ÚformatrH   r   r*   r+   r8   )r0   r=   ÚvalueÚresultÚsummaryÚemp_summary)r2   r3   r4   r<   Ç   s    
z0IntegerFormatLeaveSummaryField.to_representation)	r?   r@   rA   rB   r)   r/   r9   r<   rC   r3   r3   )r2   r4   rJ   §   s
   rJ   c                   s<   e Zd ZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	Ú#IntegerFormatLeaveCountSummaryFieldz-
    IntegerFormatLeaveCountSummaryField
    Nc                sŒ   d|kr|  d¡| _nds"tdƒ‚d|kr8|  d¡| _nd| _d|krT|  d¡| _nd| _d|krp|  d¡| _nd | _tt| ƒjf |Ž d S )NrH   FzCIntegerFormatLeaveCountSummaryField missing a kwargs `format_index`r*   r   r+   rK   )	r,   rH   r-   r*   r+   rK   r.   rT   r/   )r0   r1   )r2   r3   r4   r/   ß   s    z,IntegerFormatLeaveCountSummaryField.__init__c                s@   |  dd¡| _|  dd¡| _|  dd¡| _d| _tt| ƒ |¡S )Nr5   r   r6   rE   T)r7   r+   r*   rE   r8   r.   rT   r9   )r0   r:   )r2   r3   r4   r9   ó   s
    z1IntegerFormatLeaveCountSummaryField.get_attributec                sŠ   yt |ƒ}W n tk
r$   d}Y nX tt| ƒ |¡}d}| jrh| j |d ¡}|rh| dj| jdd¡}|spdS t	|d| j
| j| jƒS d S )Nr   zsum_leave{index})rL   r;   rI   )rM   rN   r.   rT   r<   rK   r7   rO   rH   r   rE   r+   r8   )r0   r=   rP   rQ   rR   rS   )r2   r3   r4   r<   ú   s    
z5IntegerFormatLeaveCountSummaryField.to_representation)	r?   r@   rA   rB   r)   r/   r9   r<   rC   r3   r3   )r2   r4   rT   Ù   s
   rT   c               @   s   e Zd ZdS )ÚDefaultPaginationN)r?   r@   rA   r3   r3   r3   r4   rU     s   rU   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 )NÚpageT)Úmany)Úfilter_querysetÚget_querysetÚquery_paramsr7   Úpaginate_querysetÚget_serializerÚdata)r0   ÚrequestÚquerysetÚ
serializerr3   r3   r4   Úget_export_data  s
    
z ExportModelMixin.get_export_dataN)r?   r@   rA   rB   rb   r3   r3   r3   r4   rV     s   rV   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ÚobjectsÚfilterÚidÚdeleterN   Úappend)r0   Z
object_idsZ
error_listr=   Zobj_idZ	error_msgr3   r3   r4   Úaction_delete$  s    zActionModelMixin.action_deleteN)r?   r@   rA   rB   rj   r3   r3   r3   r4   rc     s   rc   c               @   s:   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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 )NÚdetail)r   )Z
get_objectZperform_destroyrN   r   r   ZHTTP_400_BAD_REQUESTZHTTP_204_NO_CONTENT)r0   r_   Úargsr1   r:   Úer3   r3   r4   Údestroy<  s     zUtilGenericViewSet.destroy)r?   r@   rA   rd   r    Úschemar   ZIsAuthenticatedr$   Zpermission_classesrU   Úpagination_classr   r   ÚSearchFilterÚOrderingFilterÚfilter_backendsro   r3   r3   r3   r4   rk   0  s   rk   c               @   sÔ   e Zd ZdZdZdZdZdZdZdZ	dZ
dZg Zdd„ Zdd„ Zdd	„ Zd(d
d„Zd)dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd*dd„Zd+dd„Zd,dd„Zd d!„ Zd"d#„ Zed$gdd%d&d'„ ƒZdS )-ÚExportReportMixinNr;   Fc          	   C   s    | j s
d S d }| j dkr(d| _d| _d}| j dkrBd| _d| _d}| j d	kr\d
| _d| _d}|rœ| jrœx4| jD ]*}y| j |¡ W qn tk
r–   Y qnX qnW |S )NÚ1)	Úemp_codeÚ
first_nameÚ	last_nameZ	nick_nameÚgenderÚ	dept_codeÚ	dept_nameÚposition_codeÚposition_namez†Employee Name: {first_name} {last_name}, Employee ID: {emp_code}, Gender: {gender}, Department: {dept_name}, Position: {position_name}rw   Ú2)r{   r|   z#Department: {dept_name} {dept_code}r{   Ú3)Úatt_datez
{att_date}r   )Úgroup_byÚgroup_fieldsÚgroup_titleÚexport_headersÚremoverN   )r0   Úgroup_by_fieldÚxr3   r3   r4   Úget_group_by_fieldX  s.    




z$ExportReportMixin.get_group_by_fieldc             C   s<  | j dkr| j }|dkr|S ytd| jjjƒ}W n    td| jjjjjƒ}Y nX |d kr^i }| j dkr~| d¡}|dkr~|S | j	dkr| j	}n
| d¡}dd	„ |D ƒ}t
ttt|Ž ƒƒ}d
| }d}xdD ]}	||	k rÌ|	}P qÌW 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r4|d S |d S )NZDefault)ÚA0ÚA1ÚA2ÚA3ÚA4ÚA5ZB0ZB1ZB2ZB3ZB4ZB5Úpdf_report_settingÚAutoz	page-size)ÚPortraitÚ	LandscapeÚorientationc             S   s   g | ]}d d„ |D ƒ‘qS )c             S   s   g | ]}t t|ƒƒ‘qS r3   )ÚlenÚstr)Ú.0Úitemr3   r3   r4   ú
<listcomp>‹  s   z>ExportReportMixin.get_page_size.<locals>.<listcomp>.<listcomp>r3   )r—   Úliner3   r3   r4   r™   ‹  s   z3ExportReportMixin.get_page_size.<locals>.<listcomp>g      @r   )é”   éÒ   i)  i¤  iR  iI  i¥  r   rŽ   r   rŒ   r‹   rŠ   r“   r%   )Úpdf_page_sizer   r_   ÚuserÚcurrent_companyÚ
departmentÚcompanyrg   r7   r”   ÚsumÚmapÚmaxÚzip)r0   Ú	data_listÚ	page_sizer   r”   ÚwcellsZmax_lenZstr_sizeZpdf_sizeÚiZpage_size_dictr3   r3   r4   Úget_page_sizet  sF    





zExportReportMixin.get_page_sizec             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 )
Nr   Úcompany_settingÚcompany_namer;   r‘   r’   ÚClassic)z	page-sizezfooter-leftzfooter-rightr”   zreport-stylezreport-style)r   r_   rž   rŸ   r    r¡   rg   r7   )r0   r   rŸ   r«   r¬   Úreport_styler3   r3   r4   Úget_export_style£  s     


z"ExportReportMixin.get_export_stylec             C   sL   xF|D ]>}y| j  d¡}W n   d}Y nX |rd||  d ||< qW |S )z"only use for att report pdf reportr   Nz<span class="att_date">z</span>)r…   rL   )r0   Údatasr…   Ú
extra_datar^   Úatt_date_indexr3   r3   r4   Úupdate_data_listµ  s    

z"ExportReportMixin.update_data_listc             C   s¬   x¦|D ]ž}x˜t |ƒD ]Œ\}}y| j d¡}W n   d}Y nX |r`t|tƒr`d||  d ||< |dkrt|tƒr„| d|d ¡ qt|ƒ}| dd¡ |||< qW qW |S )	z"only use for att report pdf reportr   Nz<span class="att_date">z</span>r{   r   r%   r;   )Ú	enumerater…   rL   Ú
isinstanceÚlistÚinsert)r0   r°   r‡   r±   r^   r©   Úvr²   r3   r3   r4   Úupdate_group_data_listÁ  s    


z(ExportReportMixin.update_group_data_listc             C   s   |S )Nr3   )r0   r°   r3   r3   r4   Úupdate_datas_before_exportÖ  s    z,ExportReportMixin.update_datas_before_exportc             C   s   |S )Nr3   )r0   r…   r‡   r3   r3   r4   Úupdate_header_before_exportÙ  s    z-ExportReportMixin.update_header_before_exportc             C   s   |S )Nr3   )r0   Úheadersr3   r3   r4   Úupdate_export_headersÜ  s    z'ExportReportMixin.update_export_headersc             C   s   |dkr|  dd¡ |S )Nr{   r   zNo.)r·   )r0   r¼   r‡   r3   r3   r4   Úupdate_group_export_headersß  s    z-ExportReportMixin.update_group_export_headersc       	      C   sV   t  t  t   ¡ ¡¡ dd¡ d¡}dd„ |D ƒ}|\}}}}}dj|||||d}|S )Nú ú-c             S   s   g | ]}|r|‘qS r3   r3   )r—   Úlr3   r3   r4   r™   ç  s    z7ExportReportMixin.get_generate_date.<locals>.<listcomp>z{t1} {t2} {t3} {t5} {t4})Út1Út2Út3Út5Út4)ÚtimeÚasctimeÚ	localtimeÚreplaceÚsplitrO   )	r0   Z
local_timeZtime_lsrÂ   rÃ   rÄ   rÆ   rÅ   Zresult_timer3   r3   r4   Úget_generate_dateå  s
    "z#ExportReportMixin.get_generate_datec                sä  ˆ  |¡}ˆ ¡ }ˆ ˆ|¡‰ˆ ˆ¡}g }x$|D ]‰ | ‡ fdd„ˆD ƒ¡ q2W i }ˆjj dˆ ¡ ¡}||d< ||d< ||d< ˆj	|d< ˆj
|d< ˆ ¡ |d	< ˆ ¡ \|d
< }|dkrþtj ˆj	d¡}	tj ˆj
d¡}
tj |	d¡|d< tj |
d¡|d< |rôg }g }y|jt|ƒd W n   |jtdƒd Y nX xt|t|ƒdD ]\}}dd„ |D ƒ}dd„ |d  ¡ D ƒ}ˆjjf |Ž}g }| |¡ | ‡fdd„|D ƒ¡ | |¡ ˆjpÈg }tˆƒ |¡}‡fdd„|D ƒˆ_ˆjrRtt|Ž ƒ}dd„ tdt|ƒƒD ƒ}tt‡fdd„||ƒƒ}|s:qRdt dƒ |d< | t!|ƒ¡ qRW ˆ "|||¡}ˆ #|d |¡|d< ||d< ||d< ˆj$|d< t dƒt dƒt dƒt d ƒt d!ƒg}|d |krÐd"}n|dkrÞd#nd$}t% &|¡ '|¡}n˜ˆ (|ˆ|¡}ˆ )|d ¡|d< ||d< t dƒt dƒt dƒt d ƒt d!ƒg}|d |krRd%}n*|d t d&ƒkrjd'}n|dkrxd(nd)}t% &|¡ '|¡}| |¡ ˆ *|¡}t+j, -t.t/ d*¡¡}d+|t/ d,¡d-œ }t+j, -||¡}ˆ 0|||¡S ).Nc                s*   g | ]"}ˆ   |¡d krdn
ˆ   |d¡‘qS )Nr;   )r7   )r—   Úkey)r^   r3   r4   r™   ô  s   z3ExportReportMixin.export_to_pdf.<locals>.<listcomp>ÚfilenameÚtitler¼   r°   ÚstartÚendZ
print_dater¬   r­   z%Y-%m-%dz%B %d %Y)rÍ   r{   c             S   s   g | ]}|‘qS r3   r3   )r—   r©   r3   r3   r4   r™     s    c             S   s"   i | ]\}}|d krdn||“qS )Nr;   r3   )r—   Úkr¸   r3   r3   r4   ú
<dictcomp>  s    z3ExportReportMixin.export_to_pdf.<locals>.<dictcomp>r   c                s   g | ]‰ ‡ fd d„ˆD ƒ‘qS )c                s*   g | ]"}ˆ   |¡d krdn
ˆ   |d¡‘qS )Nr;   )r7   )r—   rÍ   )r˜   r3   r4   r™     s   z>ExportReportMixin.export_to_pdf.<locals>.<listcomp>.<listcomp>r3   )r—   )r…   )r˜   r4   r™     s   c                s   g | ]}ˆ   |¡‘qS r3   )rL   )r—   Úh)r…   r3   r4   r™     s    c             S   s   g | ]}|‘qS r3   r3   )r—   r©   r3   r3   r4   r™     s    c                s   ˆ   ˆ j¡| |ƒS )N)Ú
data_countÚstatics_fields_index)r©   rˆ   )r0   r3   r4   Ú<lambda>  ó    z1ExportReportMixin.export_to_pdf.<locals>.<lambda>z%sÚ report_exportColumnTitle_staticsZgroup_titlesÚ	page_wiseÚmenu_att_face_maskReportÚmenu_att_body_temperatureReportÚmanu_group_att_tdmdReportÚ#menu_att_total_temp_detectionReportÚmenu_att_dept_wiseReportzbase_pdf_tdmd_wise_report.htmlz!base_pdf_classic_wise_report.htmlzbase_pdf_wise_report.htmlz base_pdf_clasic_tdmd_report.htmlÚunregistered_users_reportz'declaimer_unregistered_user_report.htmlzbase_pdf_classic_report.htmlzbase_pdf_report.htmlz%Y%mz%(report_name)s %(stamp)s.pdfz%d-%m-%Y %I.%M.%S %p)Zreport_nameZstamp)1rº   r‰   r»   Úget_headers_translationri   r_   ZGETr7   Úget_file_titleÚ
start_dateÚend_daterÌ   r¯   ÚdatetimeÚstrptimeÚstrftimeÚsortr   r   Úitemsr„   rO   ÚextendÚsummary_fieldsÚsetÚintersectionrÖ   r¶   r¥   Úranger•   r£   Ú_Útupler¹   r¾   rÚ   r	   Zget_templateZrenderr³   r½   rª   ÚosÚpathÚjoinÚEXPORT_ROOTrÇ   Ú
render_pdf)r0   r…   r°   r‡   Útranslated_headersr¦   ÚcontextrÏ   r®   Z
start_datarä   Z
group_listZgroup_title_listrÍ   ré   Z_itemsÚtitle_formatr„   Z
group_datarë   Ú_summary_fieldsÚlist_xÚlist_iÚsummary_colsZ	tdmd_listZ	html_fileÚhtmlr§   Zexport_pathrÎ   Ú	file_pathr3   )r^   r…   r0   r4   Úexport_to_pdfì  s¢    













zExportReportMixin.export_to_pdfc             C   s(  t j  ¡ }y| jjj}W n   | jjjjj}Y nX td|ƒ}|d krPd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< t|||d}| ¡ S )Nr   z[page]/[toPage]ÚTime)zfooter-leftzfooter-rightz	page-sizer”   zfooter-leftzfooter-rightzGenerated On: %sz%s %sz%Y-%m-%d)z[page]/[toPage]ZAuthorr   zAuthor+Time)r’   r“   r;   )Zextra_options)rå   Únowr_   rž   rŸ   r    r¡   rg   r   r7   rÌ   rç   r”   Z
set_headerr   Zreturn_response)r0   rý   rþ   Z
_page_sizeZdt_nowrŸ   r   r§   r”   Zfooter_leftZfooter_rightZoption_dictÚoptionsZ	htmltopdfr3   r3   r4   rõ   H  sB    







zExportReportMixin.render_pdfc             C   sv  yddl m} W n   ddlm} Y nX |ƒ }t |¡}|  ¡ }| jpJg }tj 	¡ }	|rHt
ƒ }
x(|D ] }dd„ | ¡ D ƒ}|
 |¡ qhW y|jt|ƒd W n   |jtdƒd Y nX | jr,xBtt|t|ƒƒƒD ],\}\}}dd	„ |D ƒ}|  |||||¡ qÚW |sF| j|||||	 d
¡d n| j|||||	 d
¡d n| j|||||	 d
¡d | ¡  | ¡ }|S )Nr   )ÚStringIO)ÚBytesIOc             S   s"   i | ]\}}|d krdn||“qS )NÚNoner3   )r—   rÍ   rP   r3   r3   r4   rÓ   †  s    z3ExportReportMixin._get_xls_data.<locals>.<dictcomp>)rÍ   r{   c             S   s   g | ]}|‘qS r3   r3   )r—   r˜   r3   r3   r4   r™   Ž  s    z3ExportReportMixin._get_xls_data.<locals>.<listcomp>z%Y%m%d)Úsheet_itemsÚ
sheet_name)Z	cStringIOr  Úior  Ú
xlsxwriterZWorkbookr‰   r…   rå   r  r¶   ré   ri   rè   r   rÚ   r´   r   Ú_create_xls_sheetrç   ÚcloseÚgetvalue)r0   r_   r…   r°   Ú	file_namer  Zfile_bufferÚworkbookr‡   r  r^   Z	each_dictZnew_dictrL   r  Zsheet_items_iterr  Zxls_datar3   r3   r4   Ú_get_xls_datax  s@    



 zExportReportMixin._get_xls_datac       K   
      sÐ  yt jjd|jjd}W n$   t jjd|jjjjd}Y nX d}d}d}	|rŠt 	|d j
¡}
|
 dd¡}	t|
 d|¡ƒ}t|
 d|¡ƒ}ˆ ˆ ¡}t|ƒ}|d }| d	d
ddddddœ¡}d}| d	|dddœ¡}| |¡}djˆ ¡ d}| ¡ dk r$i }xˆ D ]}d||< qW | |¡ g }x2t|ƒD ]&\}‰‡fdd„ˆ D ƒ}| |¡ q2W g }x |D ]}| t|ƒd ¡ qfW | |¡ tttt|Ž ƒƒ}x(t|ƒD ]\}}| ||d |¡ q¨W t|ƒ}|t|ƒ }|tdƒtdƒtdƒtdƒtdƒgkr | |d dttdƒƒ¡ nR|tdƒkrJ| |d dttdƒƒ¡ n(|tdƒkrr| |d dttd ƒƒ¡ d}yt|jjƒ}W n   t|jjjjƒ}Y nX |rÒtj  !|¡rÒyòt"j# $|d!¡}d"|j%d  i} |d#krô| &d||| ¡ n`|d$krDd}!x|D ]}|!|7 }!qW | d" d%|!  d$ | d"< | &d||| ¡ n| &dd|| ¡ |j%d d& dkr||j%d d& d pˆ|j%d d& }"|t|"ƒ7 }|d$kr¨|d8 }W n& t'k
rÐ   dd l(}#|# )¡  Y nX t|ƒ}|rh|	rh||kröd'}$nd}$|dkr
d}%n"|d$kr(d}%||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œ¡}&|dkrª| +t|ƒd||¡ |d7 }n | *|dt|ƒ|||¡ |d7 }d*d+„ |d  ,¡ D ƒ}yˆj-jf |Ž}'W nl t.k
r^   d |d,<  |d-<  |d.<  |d/<  |d0<  |d1<  |d2<  |d3< |d4< ˆj-jf |Ž}'Y nX ˆ /¡ \}(})|)d5kr4| d	d6ddddd7œ¡}*t0j0 1ˆj2d8¡}+t0j0 1ˆj3d8¡},d9td:ƒ t0j0 4|+d;¡t0j0 4|,d;¡d<œ }-| *t|ƒdt|ƒ||-|*¡ |d7 }|dkrht|'ƒ}.| d	d6ddddd=œ¡}/d>|( }0d?ˆ 5¡  }-|0d@|.  |- }1| +t|ƒd|1|/¡ |d7 }n| d	d6ddddd=œ¡}/d>|( }-|d$ }2| *t|ƒdt|ƒ|2|-|/¡ | d	d6d)ddddAœ¡}3d?ˆ 5¡  }-| *t|ƒ|2d t|ƒ||-|3¡ |d7 }| d	d6|dddBœ¡}4| *t|ƒdt|ƒ|d|4¡ |d7 }n†ˆj6rº| d	d6|ddddCœ¡}*d9td:ƒ ˆj2ˆj3d<œ }-|dkr–| +t|ƒd|-|*¡ |d7 }n$| *t|ƒdt|ƒ||-|*¡ |d7 }|'r<| d	d6|dddBœ¡}4|' 7dD¡}5xZ|5D ]R}6|dkr| +t|ƒd|6|4¡ |d7 }n$| *t|ƒdt|ƒ||6|4¡ |d7 }qæW x<t|ƒD ]0\}7}8| +||7t|8ƒ|¡ | |7|7||7 ¡ qFW |d7 }ˆj8pŒg }9t9ˆ ƒ :|9¡}:‡ fdEd„|:D ƒˆ_;g };ˆ <¡ }<|d  |<¡}=d}>t|ƒ}?dF}@xRt|ƒD ]D\}A‰‡fdGd„ˆ D ƒ}B|; |B¡ ˆj6r
ˆ |<¡}C|Ad |?k	r0d}@|=|Ckr
ˆj6	rèˆj;	rè|>dk	r\|>d8 }>ttdHd„ |;|>|A… D ƒŽ ƒ}DdId„ t=dt|DƒƒD ƒ}Ett‡fdJdK„|E|Dƒƒ}Fd9tdLƒ |Fd< | >dMt||A d ƒ |F|¡ |d7 }|Ad }>|@s
|C}=| *||A d||A |d|4¡ |d7 }| *||A d||A |d|4¡ |d7 }dNd+„ ˆ ,¡ D ƒ}ˆj-jf |Ž}G|G 7dD¡}5xZ|5D ]R}6|dk
r–| +||A d|6|4¡ |d7 }n$| *||A d||A ||6|4¡ |d7 }
qjW x@t|ƒD ]4\}7}8| +||A |7t|8ƒ|¡ | |7|7||7 ¡ 
qÊW |d7 }x\t|BƒD ]P\}H}I|Is&d}I| +||A |H|I|¡ | |H|H||H ¡ ˆj?|||H||A|IdO qW |@ræˆj6ræˆj;ræ|>dkrŽ|A}Jn|>d8 }>|A}JttdPd„ |;|>|Jd … D ƒŽ ƒ}DdQd„ t=dt|DƒƒD ƒ}Ett‡fdRdK„|E|Dƒƒ}Fd9tdLƒ |Fd< |d7 }| >dMt||A d ƒ |F|¡ |Ad }>qæW d}>ˆj6rÌˆj;rÌ|d$7 }ttdSd„ |;|>d … D ƒŽ ƒ}DdTd„ t=dt|Dƒd ƒD ƒ}Ett‡fdUdK„|E|Dƒƒ}Fd9tdLƒ |Fd< | >dMt||A d$ ƒ |F|¡ d S )VNr«   )ÚnameÚ
company_idr   r;   r¬   Zname_posZlogo_posr%   ZArialZ16ÚcenterZvbottomT)Ú	font_nameÚ	font_sizeÚalignÚvalignZboldÚleftÚrightr  )r  r  r  Zborderz{title})rÏ   c          	      s*   g | ]"}t ttˆ  |d ¡ƒƒdƒd ‘qS )r;   é   r%   )r¤   r•   r–   r7   )r—   rÍ   )rš   r3   r4   r™   Ì  s    z7ExportReportMixin._create_xls_sheet.<locals>.<listcomp>rÛ   rÜ   rÝ   rÞ   rß   é   Zatt_tmd_report_desclaimerrà   r  Z%disclaimer_unregistered_users_reportsZmenu_att_abnormalReportZatt_abnormal_report_noteÚrZx_offsetr'   r&   gî|?5^º@é   ÚtopZvcenterr  c             S   s"   i | ]\}}|d krdn||“qS )Nr;   r3   )r—   rÒ   r¸   r3   r3   r4   rÓ   (  s    z7ExportReportMixin._create_xls_sheet.<locals>.<dictcomp>r|   r{   r   rx   ry   rw   r}   r~   rz   r­   Z12)r  r  r  r  r  r  z%Y-%m-%dz%sz&reportExport_dateRange_%(from)s_%(to)sz%B %d %Y)ÚfromÚto)r  r  r  r  Úbottomr  z	Company: zGenerated On: r¿   )r  r  r  r  r   r  )r  r  r  r  r  )r  r  r  r  r  r  z
c                s   g | ]}ˆ   |¡‘qS r3   )rL   )r—   rÔ   )r…   r3   r4   r™   ¡  s    Fc                s,   g | ]$}t ˆ  |¡d krdnˆ  |¡ƒ‘qS )Nr;   )r–   r7   )r—   rÍ   )Úrow_data_dictr3   r4   r™   ª  s   c             S   s   g | ]}|‘qS r3   r3   )r—   r^   r3   r3   r4   r™   ¸  s    c             S   s   g | ]}|‘qS r3   r3   )r—   r©   r3   r3   r4   r™   ¹  s    c                s   ˆ   ˆ j¡| |ƒS )N)rÕ   rÖ   )r©   rˆ   )r0   r3   r4   r×   º  rØ   z5ExportReportMixin._create_xls_sheet.<locals>.<lambda>rÙ   ÚAc             S   s"   i | ]\}}|d krdn||“qS )Nr;   r3   )r—   rÒ   r¸   r3   r3   r4   rÓ   Ì  s    )Ú	worksheetrö   Ú	col_indexÚ	row_indexÚrow_index_temÚcol_datac             S   s   g | ]}|‘qS r3   r3   )r—   r^   r3   r3   r4   r™   ì  s    c             S   s   g | ]}|‘qS r3   r3   )r—   r©   r3   r3   r4   r™   í  s    c                s   ˆ   ˆ j¡| |ƒS )N)rÕ   rÖ   )r©   rˆ   )r0   r3   r4   r×   î  rØ   c             S   s   g | ]}|‘qS r3   r3   )r—   r^   r3   r3   r4   r™   ø  s    c             S   s   g | ]}|‘qS r3   r3   )r—   r©   r3   r3   r4   r™   ù  s    c                s   ˆ   ˆ j¡| |ƒS )N)rÕ   rÖ   )r©   rˆ   )r0   r3   r4   r×   ú  rØ   )@r   re   rf   rž   rŸ   r    r¡   rg   ÚjsonÚloadsrP   r7   rM   rá   r•   Z
add_formatZadd_worksheetrO   râ   Ú__len__ri   r´   r¶   r£   r¤   r¥   Z
set_columnrï   Zwrite_stringr–   r   rñ   rò   ÚexistsÚPILZImageÚopenÚsizeZinsert_imagerN   Ú	tracebackÚ	print_excZmerge_rangeÚwriteré   r„   ÚKeyErrorr¯   rå   ræ   rã   rä   rç   rÌ   r‚   rË   rë   rì   rí   rÖ   r‰   rî   Z	write_rowÚxls_update_extra_data)Kr0   r_   r  r…   r  r  r«   Zcompany_displayZlogo_displayr¬   Zcompany_paramsrö   Zhead_lenZmax_row_indexrø   ZsideZxcell_formatr#  rÏ   ÚdrÒ   r¨   r©   ZwcellÚheaderZwcsrˆ   ÚrowZrowsr%  Zreal_company_logo_nameZimager  Zcoloum_sizeZrsr/  r  r  Zcompany_formatr„   Zclassic_company_namer®   Zdate_formatrã   rä   Zdate_stringZgroup_title_lenZclassic_company_name_formatZcompany_stringZcompany_name_and_generated_dateZcompany_name_max_row_indexZgenerate_date_formatZhead_formatZtitlesÚtrL   rP   rë   rù   Ztotal_row_datar‡   Zgroup_by_dataZstart_indexZsheet_items_lenZ	last_itemr&  r>   Z	temp_datarú   rû   rü   Ztemp_group_titler$  r'  Ztemp_row_index_temr3   )r…   rš   r!  r0   r4   r
    sX   










6









H




























"

z#ExportReportMixin._create_xls_sheetc             C   s   dS )z#use for update the data when insertNr3   )r0   r#  rö   r$  r%  r&  r'  r3   r3   r4   r3  ÿ  s    z'ExportReportMixin.xls_update_extra_datac             C   s   |   |  ¡ ¡S )N)rY   rZ   )r0   r3   r3   r4   Úget_export_queryset  s    z%ExportReportMixin.get_export_querysetr7   )Úmethodsrl   c             C   sø  |j  dd ¡}|j  dd¡ d¡| _|j  dd ¡| _|j  dd¡| _|j  dd¡| _|j  d	d¡| _|j  d
d¡| _|j  dd¡| _	|j  dd¡}|| _
|  ¡ }|d k	rÂ|  |¡}| j|dd}n| j|dd}dd„ }|| |jƒ}t|ƒrø|d  ¡ ng }	g }
x0| jD ]&}||	ks"|| jkr|
 |¡ qW |	r>|
| _d| jkrV| j d¡ d| jkrn| j d¡ |dkrŠ|  | j|j¡}nj|dkr¨|  || j|j¡}nL|dkrÄ|  | j|j¡}n0|dkrà|  | j|j¡}nttdgƒtjd}|S )NrW   r…   r;   ú,Zexport_stylerÚ   Frã   rä   zpdf-page-sizer”   Úexport_typeT)rX   c             S   sp   g }xft t|ƒƒD ]V}|| }| d¡}|d k	rt|ƒtkrF| d¡}d |¡}| d|i¡ | |¡ qW |S )NZ	punch_setz, )	rî   r•   r7   Útyper–   rË   ró   Úupdateri   )r0   Úserializer_datar^   ZinxZ	data_dictZval_dataZst_datar3   r3   r4   Úvalidate_time_data  s    


z4ExportReportMixin.export.<locals>.validate_time_datar   zMap Viewz	Text ViewZcsvZxlsZtxtZpdf)r;  zInvalid file format)r   )r[   r7   rË   r…   r‚   rÚ   rã   rä   r   r”   Úfile_formatr8  r\   r]   r^   r•   ÚkeysÚexport_headers_prori   r†   Zexport_to_csvZexport_to_xlsZexport_to_txtrÿ   r   r   r   ZHTTP_403_FORBIDDEN)r0   r_   rW   r@  r`   Z	page_datara   r?  r>  Zdata_fieldsZheaders_listr5  Zresponser3   r3   r4   Úexport  sL    




zExportReportMixin.export)N)N)N)N)N)r?   r@   rA   r‚   rƒ   r„   rë   r@  rÚ   rã   rä   r…   rB  r‰   rª   r¯   r³   r¹   rº   r»   r½   r¾   rÌ   rÿ   rõ   r  r
  r3  r8  r   rC  r3   r3   r3   r4   ru   F  s:   /

\
0
%
  dru   c               @   s(   e Zd ZdZeƒ ZeZee	j
e	jfZdS )ÚReportUtilGenericViewSetN)r?   r@   rA   rd   r    rp   rU   rq   r   r   rr   rs   rt   r3   r3   r3   r4   rD  D  s   rD  c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚWorkDayRelatedFieldsUpdateUtilc             C   s@   y| j jj}W n   | j jjjj}Y nX t |¡ dd¡}|S )NÚwork_day_related_displayr   )r_   rž   rŸ   r    r¡   rg   r   r7   )r0   r  rF  r3   r3   r4   Úget_work_day_displayN  s    z3WorkDayRelatedFieldsUpdateUtil.get_work_day_displayc             C   s  t ƒ }|  ¡ }y| jjj}W n   | jjjjj}Y nX t 	|¡d }x.| 
¡ D ]"\}}t|d ƒtkrP| |¡ qPW |tkrtdƒ}tdƒ}	nd}tdƒ}	x`| jd j 
¡ D ]L\}
}t|dd	ƒ}||kr®|j}tt|| jd
 jƒ| |	 tƒ d||< q®W |S )z“
        if work_day_related_display set 1, means need cal work day for fields for every timetable
        :param values:
        :return:
        ré   Zunitr+   r*   g      ð?Zwhole_day_durationr¶   r)   Nr   )Zoutput_field)rì   rG  r_   rž   rŸ   r    r¡   rg   r   r7   ré   rM   ÚWORK_DAY_UNITÚaddÚ WORK_DAY_DISPLAY_BY_EVERY_RECORDr   Zserializer_dictZ_declared_fieldsÚgetattrÚsourcer   Zsource_expressionsr  r   )r0   ÚvaluesZwork_fieldsZwork_day_displayr  ré   rÒ   r¸   Zcal_work_dayZcal_durationZfieldZparamsr)   Zsum_kr3   r3   r4   Úupdate_fields_for_workdayW  s,    
z8WorkDayRelatedFieldsUpdateUtil.update_fields_for_workdayN)r?   r@   rA   rG  rN  r3   r3   r3   r4   rE  M  s   	rE  c                   s¾   e Zd ZejddZejddZejddZejddZe	j
r\ejdddZejdd	dZnejddd
Zejdd	d
Zdd„ Zdd„ Zdd„ Zdd„ Ze‡ fdd„ƒZG dd„ dƒZ‡  ZS )ÚReportGenericFilterÚemployee_filter)ÚmethodÚdepartment_filterÚarea_filterÚposition_filterr   Zgte)Z
field_nameÚlookup_exprZlte)r  rU  c             C   sZ   |rt |ƒdkr|S | d¡}ydd„ |D ƒ}W n tk
rH   g }Y nX |j|d}|S )Nz-1r:  c             S   s   g | ]}|rt |ƒ‘qS r3   )r–   )r—   r©   r3   r3   r4   r™   ‡  s    z7ReportGenericFilter.employee_filter.<locals>.<listcomp>)Z
emp_id__in)r–   rË   Ú
ValueErrorrf   )r0   r`   r  rP   Úobjsr3   r3   r4   rP  ‚  s    

z#ReportGenericFilter.employee_filterc             C   sÔ   |rt |ƒdkr|S | d¡}ydd„ |D ƒ}W n tk
rH   g }Y nX |j|d}ddlm} | jjjsx| jjj	}n| jjj
jj}| |¡ t | |¡ d¡ƒ}|d	krÐ| ttd
td d
B ttd
B ¡}|S )Nz-1r:  c             S   s   g | ]}|rt |ƒ‘qS r3   )rM   )r—   r©   r3   r3   r4   r™   ’  s    z9ReportGenericFilter.department_filter.<locals>.<listcomp>)Zemp__department_id__inr   )r   Ú
resign_empÚ0)Úemp__status)r–   rË   rV  rf   Úmysite.att.global_cacher   r_   rž   Úis_employeerŸ   r    r¡   rg   Úaction_initr7   r   r   r   )r0   r`   r  rP   rW  r   r  rX  r3   r3   r4   rR    s$    



 z%ReportGenericFilter.department_filterc             C   sÔ   ddl m} |rt|ƒdkr |S | d¡}ydd„ |D ƒ}W n tk
rT   g }Y nX |j|d}| jjjsx| jjj	}n| jjj
jj}| |¡ t| |¡ d¡ƒ}|d	krÐ| ttd
td d
B ttd
B ¡}|S )Nr   )r   z-1r:  c             S   s   g | ]}|rt |ƒ‘qS r3   )rM   )r—   r©   r3   r3   r4   r™   ¨  s    z3ReportGenericFilter.area_filter.<locals>.<listcomp>)Zemp__area__id__inrX  rY  )rZ  )r[  r   r–   rË   rV  rf   r_   rž   r\  rŸ   r    r¡   rg   r]  r7   r   r   r   )r0   r`   r  rP   r   rW  r  rX  r3   r3   r4   rS  ¢  s$    



 zReportGenericFilter.area_filterc             C   sÔ   ddl m} |rt|ƒdkr |S | d¡}ydd„ |D ƒ}W n tk
rT   g }Y nX |j|d}| jjjsx| jjj	}n| jjj
jj}| |¡ t| |¡ d¡ƒ}|d	krÐ| ttd
td d
B ttd
B ¡}|S )Nr   )r   z-1r:  c             S   s   g | ]}|rt |ƒ‘qS r3   )rM   )r—   r©   r3   r3   r4   r™   ½  s    z7ReportGenericFilter.position_filter.<locals>.<listcomp>)Zemp__position__id__inrX  rY  )rZ  )r[  r   r–   rË   rV  rf   r_   rž   r\  rŸ   r    r¡   rg   r]  r7   r   r   r   )r0   r`   r  rP   r   rW  r  rX  r3   r3   r4   rT  ·  s$    



 z#ReportGenericFilter.position_filterc                s€   t t| ƒj}| j d¡pd}| j d¡p*d}| j d¡p:d}| j d¡pJd}|dkrt|dkrt|dkrt|dkrt| ¡ S |jddS )	NÚ	employeesz-1ÚdepartmentsÚareasÚ	positionséÿÿÿÿT)Zemp__isnull)r.   rO  Úqsr^   r7   ZnoneZexclude)r0   r`   r^  r_  r`  ra  )r2   r3   r4   rc  Ì  s     zReportGenericFilter.qsc               @   s    e Zd ZeZddddddgZdS )zReportGenericFilter.Metar^  r_  r`  ra  rã   rä   N)r?   r@   rA   r   rd   Zfieldsr3   r3   r3   r4   ÚMeta×  s   rd  )r?   r@   rA   Údjango_filtersZ
CharFilterr^  r_  r`  ra  ÚsixZPY3Z
DateFilterrã   rä   rP  rR  rS  rT  Úpropertyrc  rd  rC   r3   r3   )r2   r4   rO  v  s   rO  )Yrf  rñ   rÇ   rå   r(  r,  r	  Úcollectionsr   Ú	itertoolsr   Úoperatorr   re  Zdjango.db.modelsr   r   r   r   Zdjango.templater	   Zdjango.http.responser
   Zrest_frameworkr   r   r   r   r   Zrest_framework.responser   Zrest_framework.decoratorsr   Zdjango_filters.rest_frameworkr   Zdjango.utils.translationr   rï   Zdjango.confr   Zdjango.httpr   r   Zmysite.tools.html_to_pdfr   Zmysite.utilsr   Zmysite.base.models.sys_settingr   Zmysite.base.utilsr   Zmysite.att.utilsr   Zmysite.att.modelsr   Zmysite.admin.modelsr   r   r[  r   Zmysite.api.utils_classr    r!   r"   r#   r$   rò   ró   ZADDITION_FILE_ROOTrô   Z WORK_DAY_DISPLAY_BY_TOTAL_RECORDrJ  ZWORK_DAY_DISPLAY_BY_AUTO_CALrH  r(   rD   rG   rJ   rT   rU   rV   rc   ZGenericViewSetrk   ru   rD  ÚobjectrE  rO  r3   r3   r3   r4   Ú<module>   sz   #$,23      	)