B
    Gb|                 @   s   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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 ZG dd dejZG dd dejZeeG dd dej Z!dS )    )gettext_lazy)settings)admin)TransactionTerminal)forms)Employee
Department)get_current_company_id)ValidationError)Q)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc             C   s<   dd l }|j| jd }dg}| |kr8ttdd S )Nr      z.datZunsupported_file_extension)ospathsplitextnamelowerr   _)valuer   extZvalid_extensions r   >G:\easytimepro\master/mysite/iclock\admin\transaction_admin.pyvalidate_file_extension   s
    r   c               @   s&   e Zd ZejededegdZdS )USBDataUploadFormupload_filez'<br>Please_make_sure_to_upload_dat_file)labelZ	help_textZ
validatorsN)__name__
__module____qualname__r   Z	FileFieldr   r   r   r   r   r   r   r      s   r   c               @   s0   e Zd ZedZedZedZeZdd Z	dS )USBDataUploadZusb_data_uploadc             O   s  dd l }dd l}ddlm}m} | jjd}t }|j	
dd }	tjj|	|d}
|
sdttd|jtjd}|j|s|| |j||j	}yld|j	 krdd	lm} | }||}|d
}n| }||d}|| |  W d Q R X W nj tk
rp } zJy,| }t|d}|| W d Q R X W n   ttdY nX W d d }~X Y nX tjr||j	 n|  d S )Nr   )save_transaction_from_file2dbtransaction_from_file2dbr   r   )sn
company_idZdevice_not_foundZusb_dataZencrypt)decryption_usbzutf-8wbwZread_file_failed) r   codecsZmysite.iclock.tasksr#   r$   requestZFILESgetr
   r   splitr   Zobjectsfilter	Exceptionr   r   joinr   ZADDITION_FILE_ROOTexistsmakedirsr   Zmysite.zkauthr'   readencodeopenwritecloseZACTIVE_CELERYZdelay)selfargskwargsr   r*   r#   r$   fr&   r%   ZdevZstore_folderZ
store_filer'   ZtsZtfer   r   r   action#   s@    

$zUSBDataUpload.actionN)
r   r    r!   r   Zverbose_nameshort_descriptionZhelp_txtr   Zaction_formr=   r   r   r   r   r"      s
   r"   c                   s   e Zd ZdZefZdZdZdZdZ	dd Z
ede
_d	d
 Zede_dd Zede_dd Zede_dd Zede_dd Zede_dd Zede_de_dd Zede_de_dd  Zd(d"d#Zd)d$d%Z fd&d'Z  ZS )*TransactionAdmin)emp_codeemployee_nameemployee_last_nameemployee_departmentemployee_positiontransaction_punch_datetransaction_punch_timepunch_stateverify_type	work_codegps_location	longitudelatitude
area_aliasterminal_snterminal_aliasupload_timeactual_temperature	mask_flagpunch_time_of_epoch)r@   Zemp__first_nameZemp__last_nameZemp__department__dept_nameZemp__position__position_name
punch_timerG   rH   rJ   rK   rL   rM   rI   rN   rO   rP   )
rB   rD   rI   rJ   rH   rK   rL   temperaturerR   rS   )rE   rF   rN   rP   )z-punch_timec             C   s<   |j }ddlm} ddlm} ddlm} |||jj}|S )Nr   )temperature_update)get_software_type_without_load)EASYWDMS)	rU   mysite.att.utilsrV   Zmysite.admin.utilsrW   Zmysite.admin.constrX   empr&   )r8   objZcelsiusrV   rW   rX   Ztemperature_based_on_unitr   r   r   rQ   n   s    z#TransactionAdmin.actual_temperatureZtransaction_column_actual_tempc             C   s   |j jS )N)rZ   Z
first_name)r8   r[   r   r   r   rA   {   s    zTransactionAdmin.employee_nameZtransaction_column_employeeNamec             C   s   t |j dd S )N.r   )strrT   Z	timestampr-   )r8   r[   r   r   r   rS      s    z$TransactionAdmin.punch_time_of_epochrS   c             C   s   |j jS )N)rZ   	last_name)r8   r[   r   r   r   rB      s    z#TransactionAdmin.employee_last_nameZ#transaction_column_employeeLastNamec             C   s
   |j jjS )N)rZ   Z
departmentZ	dept_name)r8   r[   r   r   r   rC      s    z$TransactionAdmin.employee_departmentZ%transaction_column_employeeDepartmentc             C   s
   |j jjS )N)rZ   ZpositionZposition_name)r8   r[   r   r   r   rD      s    z"TransactionAdmin.employee_positionZ#transaction_column_employeePositionc             C   s   |j dS )Nz%Y-%m-%d)rT   strftime)r8   r[   r   r   r   rE      s    z'TransactionAdmin.transaction_punch_daterE   rT   c             C   s   |j dS )Nz%H:%M:%S)rT   r_   )r8   r[   r   r   r   rF      s    z'TransactionAdmin.transaction_punch_timerF   c             C   s   dS )NFr   )r8   r+   r   r   r   has_add_permission   s    z#TransactionAdmin.has_add_permissionNc             C   s   dS )NFr   )r8   r+   r[   r   r   r   has_change_permission   s    z&TransactionAdmin.has_change_permissionc             C   s   dS )NFr   )r8   r+   r[   r   r   r   has_delete_permission   s    z&TransactionAdmin.has_delete_permissionc                s   |j j}tt| |j|d}|j js|j j}|j j}|j j	}|
 rX|j| d}|
 rt|j| d }|
 r|j| d}tt|d}|dkr|ttdtd dB ttdB }|dd	}|S )
N)r&   )Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__statusrZ   Zemp__department)userZcurrent_companysuperr?   get_querysetr.   Zis_superuserZget_auth_deptZget_auth_areaZget_auth_posr1   allZdistinctr]   r   r,   r   r   r   Zselect_related)r8   r+   r&   ZqsZ	auth_deptZ	auth_areaZauth_posrc   )	__class__r   r   rg      s$     zTransactionAdmin.get_queryset)N)N)r   r    r!   Zlist_displayr"   ZactionsZlist_filterZhidden_fieldsZsort_fieldsZorderingrQ   r   r>   rA   rS   rB   rC   rD   rE   Zadmin_order_fieldrF   r`   ra   rb   rg   __classcell__r   r   )ri   r   r?   ]   s8   









r?   N)"Zdjango.utils.translationr   r   Zdjango.confr   mysiter   Zmysite.iclock.modelsr   r   Zmysite.adminr   Zmysite.personnel.modelsr   r	   rY   r
   Zdjango.core.exceptionsr   Zdjango.db.modelsr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   ZZKActionFormr   ZZKModelActionr"   registerZZKModelAdminr?   r   r   r   r   <module>   s   @