B
    bU<              !   @   s  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Zddd	d
ddddddddddddddddZdddddd d!d"d#d$d%d&d'Zd dd	dddddddddddddd(Zd d#d$d%d&d)Zd*d+d*d+d,d-d.d/d*d0	Zd1d2d3d1d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zdid_d`Zdadb Zdcdd Zdedf ZdjdgdhZdS )k    N)csrf_exempt)gettext_lazy)send_one_mail_with_attachments)file_upload)ReportParamz%Y-%m-%dz%Y/%m/%dz%Y.%m.%dz%d/%m/%Yz%d-%m-%Yz%m/%d/%Yz%m-%d-%Yz%y-%m-%dz%y/%m/%dz%d/%m/%yz%y.%m.%dz%Y%m%dz%Y%d%mz%m%d%Yz%d%m%Yz%y%m%dz%y%d%mz%m%d%yz%d%m%y)12345678910111213141516171819z%H:%Mz%I:%Mz%H:%M %pz%I:%M %pz%H:%M:%Sz%I:%M:%Sz%H:%M:%S %pz%I:%M:%S %pz%H%Mz%I%Mz%H%M%Sz%I%M%S)r   r   r	   r
   r   r   r   r   r   r   r   r   )0r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   Zcheck_inZ	check_outZ	break_outZbreak_inZovertime_inZovertime_out)	IOr   r   r   r	   r
   r   Z255ZPasswordZFingerprintzEmployee IDZCardzFingerprint/PasswordzFingerprint/CardzPassword/CardzEmployee ID&FingerprintzFingerprint&PasswordzFingerprint&CardzPassword&CardzFingerprint&Password&Cardz Employee ID&Fingerprint&Passwordz Fingerprint & Card & Employee IDZFacezFace&FingerprintzFace&Passwordz	Face&CardzFace&Fingerprint&CardzFace&Fingerprint&PasswordzFinger VeinzFinger Vein&PasswordzFinger Vein&CardzFinger Vein&Password&CardZPalmz	Palm&Cardz	Palm&FacezPalm&FingerprintzPalm&Fingerprint&FaceZGPSZOther) r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z20Z21Z22Z23Z24Z25Z26Z27Z28Z29Z101Z200c             C   s   |rt |S dS d S )N )str)rvalparams
company_id r#   2G:\easytimepro\master/mysite/iclock\auto_export.pydata_string   s    r%   c             C   s6   |st |dkr.tt |}|r&|S t |S dS d S )Nr   r   )r   VERIFY_TYPE_MAPget)r   r    r!   r"   verify_typer#   r#   r$   format_verify   s    r)   c             C   s\   ddl m} |jt|d ||d}|tt|dt| dt|i}|d S )Nr   )
C_ATT_RULE)r"   	func_keyskeyname)Zmysite.att.global_cacher*   Zaction_initr   r'   PUNCH_STATE_MAP)r   r    r!   r"   r*   r+   Z	punch_valr#   r#   r$   format_punch   s
    (r/   c             C   s<   |r4| t|d  }| t|d  }|d | S dS d S )N
short_date
short_time r   )strftime
SHORT_DATE
SHORT_TIME)r   r    r!   r"   val_dateval_timer#   r#   r$   format_date   s
    r8   c             C   s"   |r| t|d  }|S dS d S )Nr0   r   )r3   r4   )r   r    r!   r"   r6   r#   r#   r$   format_short_date   s    r9   c             C   s"   |r| t|d  }|S dS d S )Nr1   r   )r3   r5   )r   r    r!   r"   r7   r#   r#   r$   format_short_time   s    r:   c             C   sJ   |rBt |dd}|r<|t|kr<|t| d }|| S |S ndS d S )NZ	pin_digitr   r   r   )intr'   len)r   r    r!   r"   Zmin_len_emp_codeZ	zero_headr#   r#   r$   format_emp_code   s    r=   c                s  dd l }ddlm} tjdd }|d}|||}ddddd	d
dddddddd
d
ddd  fdd|D }	t	d |	}	 fdd|D }
g }|	rt
tttttd|d krĈd }|dkr|jj	| |jdd}n|jj	| |jdd
}dd r0t	d d d}|j	|d }d!r\t	d d! d}|j	|d"}|j|	 }|rx6|D ]. fd#dt|
D }|| qrW |S )$Nr   )Transactiondata_templatez{\w+}Zemp_codeZemp__first_nameZemp__last_nameZemp__department__dept_codeZemp__department__dept_nameZ
punch_timer(   Zpunch_stateZ	work_codeZemp__card_noZterminal__area__area_nameZterminal__aliasZterminal_snZtemperatureZ	mask_flag)z
{emp_code}z{first_name}z{last_name}z{dept_code}z{dept_name}z{punch_time}z{verify_type}z{punch_state}z{work_code}z{card_number}z{area_name}z{terminal_alias}z{terminal_sn}z{date}z{time}z{temperature}z{mask_flag}c                s   g | ]}  |d qS )N)r'   ).0item)db_keysr#   r$   
<listcomp>   s    z$get_transactions.<locals>.<listcomp>c                s   g | ]}  |d r|qS )N)r'   )r@   rA   )rB   r#   r$   rC      s    )z{verify_type}z{punch_time}z
{emp_code}z{date}z{time}z{punch_state}query_fieldr   )Zupload_time__gtZupload_time__lteemp__company_idZupload_time)Zpunch_time__gtZpunch_time__lterE   Zdepartments,)Zemp__department_id__inareas)Zterminal__area_id__inc                s0   g | ](\}} |t |  jqS r#   )r'   r%   r"   )r@   iZdb_f)rB   optionr!   r   transr#   r$   rC      s    )reZmysite.iclock.modelsr>   jsonloadsr!   r'   compilefindallfilterr)   r8   r=   r9   r:   r/   objectsr"   Zorder_bysplitvalues	enumerateappend)startendrI   rD   rK   r>   r?   _parammZexport_listZexport_keyspayloadZquerysetZdeptsrG   tmpr#   )rB   rI   r!   r   rJ   r$   get_transactions   sl    





r\   c             C   s  dd l }t|j}dd l}||}d}||}| }	|	d |		  |	
d |	
d |d }
|d}|||
}t| } dd	 t| D }tttt| }xLt| D ]@\}}x6t|D ]*\}}|||||	 |||||  qW qW |  d S )
Nr   r>   ZArialcenterZvcenterr?   z{\w+}c             S   s   g | ]\}}d d |D qS )c             S   s   g | ]}t t|d d qS )      )maxr<   )r@   rA   r#   r#   r$   rC   /  s    z-generate_execl.<locals>.<listcomp>.<listcomp>r#   )r@   rH   liner#   r#   r$   rC   /  s   z"generate_execl.<locals>.<listcomp>)rK   rL   rM   r!   
xlsxwriterZWorkbookZadd_worksheetZ
add_formatZset_font_nameZ
set_borderZ	set_alignrN   rO   listrT   mapr`   zipwriteZ
set_columnclose)data	file_pathrI   rK   r!   rb   wbZ
sheet_nameZwsZcell_formatr?   rX   rY   ZwcellsZwcs	row_indexrowZ	col_indexcolr#   r#   r$   generate_execl   s.    %





rn   c          	   C   s   dd l }t|j}|d }|d}|||}|rg }xdt| D ]X\}	}
|}x$t|D ]\}}|||
| }qZW |dddddd	}|| qDW d
	|}ndd | D }d	|}t
|d}|| |  W d Q R X d S )Nr   r?   z{\w+}z\t	z\rz\n
r   c             S   s   g | ]}d  |qS )ro   )join)r@   rl   r#   r#   r$   rC   I  s    z generate_csv.<locals>.<listcomp>z
w)rK   rL   rM   r!   rN   rO   rT   replacerU   rr   openrf   rg   )rh   ri   rI   rK   r!   r?   rX   rY   rowsrk   rl   row_datarH   v	full_datawfr#   r#   r$   generate_csv9  s&    


r{   c          	   C   s   dd l }t|j}|d }|d}|||}|rg }xdt| D ]X\}	}
|}x$t|D ]\}}|||
| }qZW |dddddd	}|| qDW d
	|}ndd | D }d	|}t
|d}|| |  W d Q R X d S )Nr   r?   z{\w+}z\tro   z\rrp   z\nrq   r   c             S   s   g | ]}d  |qS )ro   )rr   )r@   rl   r#   r#   r$   rC   `  s    z generate_txt.<locals>.<listcomp>z
rs   )rK   rL   rM   r!   rN   rO   rT   rt   rU   rr   ru   rf   rg   )rh   ri   rI   rK   r!   r?   rX   rY   rv   rk   rl   rw   rH   rx   ry   rz   r#   r#   r$   generate_txtP  s&    


r|   c       $   
   C   s<  ddl m} ddlm} ddlm} ddlm}	 ddlm	}
 t
||||}t||
rbt|j}n|}|dd }|dd	}|d
d }|dd}|dd}|dd }d}d}|ddkr|}n4|rtj|	 |}n|s|rtj|	 d}ndS tj|st| tt|dd p*d }tt|dd pDd }|r\| |}nd}|rr| |}nd}d|d ||}ytj|dj||d}|dkrt||| n.|d	krt||| n|dkrt||| tj|rv|rHddlm }m!} | }||j" dddd }t#dd|g|g|j"d! || |rf|d"krft$|||d# d$jt%|d%}W n0 t&k
r }  zd}t| }W d d } ~ X Y nX yT|s|j'j(|d&) }!|!s|j') }!d'}"||!|"||j*t|||| d(+  W n4 t&k
r2 }  zdd l,}#|#-  W d d } ~ X Y nX t%|S ))Nr   )get_content_type_for_model)AdminLog)MyUser)tempDir)AutoExportTaskZexport_pathexport_formatZcsvZexport_email
ftp_serverftp_path/user_idr   :Zauto_export	file_dater   	file_timez	{0}{1}{2}Zfile_prefixz{file}.{format})fileformat)ZxlsZxlsxZtxt)get_current_company_idset_current_company_idzauto export filezauto exportzAuto export)ZcontentfromZsubject)Zattachmentsr"   z
----------)Zftp_idri   r   zExport: {total})total)idzAuto Export)useractionZcontent_type_idZtargets_reprdescriptionaction_statusZop_time).Zdjango.contrib.admin.optionsr}   Zmysite.base.modelsr~   Zmysite.accounts.modelsr   Zmysite.utilsr   Zmysite.base.models.auto_exportr   r\   
isinstancerL   rM   r!   r'   findospathrr   existsmakedirs	FILE_DATEr   	FILE_TIMEr3   r   rn   r{   r|   isfileZmysite.base.threadlocalsr   r   r"   r   r   r<   	ExceptionrQ   rP   firstZpkZsave	traceback	print_exc)$Zdt_nowrV   rW   ZtaskrD   Zrequestr}   r~   r   r   r   rZ   r!   r   r   Zemailr   r   r   r   r   Z	save_pathr   r   Z_date_timefilenameri   r   r   Ztemp_current_company_idZbodyer   r   r   r#   r#   r$   transaction_auto_exportg  s    







r   )N)NN) r   rL   Zdjango.views.decorators.csrfr   Zdjango.utils.translationr   _Zmysite.admin.services.emailr   Zmysite.base.ftp_utilsr   Z#mysite.att.models.model_reportparamr   Zautoexport_schedr4   r5   r   r   r.   r&   r%   r)   r/   r8   r9   r:   r=   r\   rn   r{   r|   r   r#   r#   r#   r$   <module>   s   	
>@