B
    .c                 @   sl  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Zdd ZG dd de
jZG dd dejZ G dd de
jZ!G dd dejZ"G dd de
jZ#G dd dejZ$G dd de
jZ%G dd  d ejZ&G d!d" d"e
jZ'G d#d$ d$ejZ(d%d& Z)G d'd( d(e
jZ*G d)d* d*e
jZ+G d+d, d,e
jZ,G d-d. d.ejZ-G d/d0 d0e
jZ.G d1d2 d2e
jZ/G d3d4 d4ejZ0G d5d6 d6e
jZ1G d7d8 d8ejZ2G d9d: d:e
jZ3G d;d< d<ejZ4G d=d> d>e
jZ5G d?d@ d@ejZ6G dAdB dBe
jZ7G dCdD dDejZ8G dEdF dFe
jZ9G dGdH dHejZ:G dIdJ dJe
jZ;dK\Z<Z=G dLdM dMejZ>G dNdO dOe
jZ?G dPdQ dQe
jZ@G dRdS dSe
jZAG dTdU dUejZBG dVdW dWe
jZCG dXdY dYejZDG dZd[ d[e
jZEG d\d] d]ejZFG d^d_ d_e
jZGdS )`    )gettext_lazy)settings)ValidationError)cache)admin)forms)db_const)Area)AreaRadioSelect)AdminRuntimeWarning)Employee)get_current_company_id)tempFileNc             C   s8   ddl m} |d| jdr4| js4ttd| jd S )Nr   )get_comm_settingZenable_registration)
company_idz{} is not Registration Device)Zmysite.iclock.comm.utilsr   r   Zis_registrationr   _formatalias)objr    r   ?G:\easytimepro\master/mysite/iclock\actions\terminal_actions.pycheck_is_register_device   s    r   c               @   s<   e Zd ZdZdZedZedZedZedZ	dd Z
d	S )
TerminalRebootz
    Reboot terminal
    TZterminal_op_rebootZterminal_op_rebootDescriptionZterminal_op_rebootHelpZ,are_you_sure_to_reboot_the_selected_terminalc             O   s.   ddl m} | jr*x| jD ]}|| qW d S )Nr   )rebootDevice)mysite.core.zkcmdprocr   objects)selfargskwargsr   r   r   r   r   action%   s    zTerminalReboot.actionN)__name__
__module____qualname____doc__batch_selectr   verbose_nameshort_descriptionhelp_txtconfirmationr   r   r   r   r   r      s   r   c               @   sL   e Zd ZejeddddedfdedffdZejedd	d
ddZdS )TerminalReUploadDataFormZreUploadData_field_employeeT   dataRange_option_allr   dataRange_option_specified)labelrequiredinitialchoicesZreUploadData_field_employeeCodeF )r-   r.   Zempty_valuedisabledN)	r    r!   r"   r   ChoiceFieldr   empZ	TextFieldemp_coder   r   r   r   r)   ,   s
   
r)   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalReUploadDatazL
    Re upload terminal data(user information/photo/biometric template)
    TZterminal_action_reUploadDataZ'terminal_action_reUploadDataDescriptionZ#terminal_action_reUploadDataHelpTxtc       
      C   s   ddl m} ddlm} ddlm} |dkr<|dkr<tdx| jD ]}t| qDW | jrxb| jD ]X}|r|t	|r||| qbt
d |d}x,|D ]$}d	j|| d
}	||j|	 qW qbW d S )Nr   )saveCmd)reloadDataCmd)
format_pin0r1   zPlease enter Employee ID,zDATA QUERY USERINFO PIN={pin})pin)mysite.utilsr7   r   r8   mysite.personnel.utilsr9   r   r   r   intfiltersplitr   strippk)
r   r4   r5   r7   r8   r9   r   Zpinsr<   cmdr   r   r   r   @   s    

zTerminalReUploadData.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r)   action_formr   r   r   r   r   r6   5   s   r6   c               @   s   e Zd ZejedddZdS )ReUploadDataPerUserFormZ"reUploadDataPerUser_field_employeeF)r-   r.   N)r    r!   r"   r   ZEmployeeManyToManyFieldr   r4   r   r   r   r   rF   U   s   rF   c               @   s4   e Zd ZdZedZedZedZeZ	dd Z
dS )TerminalReUploadDataPerUserzL
    Re upload terminal data(user information/photo/biometric template)
    Z#terminal_action_reUploadDataPerUserZ.terminal_action_reUploadDataPerUserDescriptionZ*terminal_action_reUploadDataPerUserHelpTxtc       	      O   sv   ddl m} ddlm} | jrr| jjd}|s4d S x<| jD ]2}|jj|d	 }x|D ]}|j
||d qXW q<W d S )Nr   )r   )upload_employeeemployee)Zid__in)device)mysite.personnel.modelsr   mysite.iclock.tasksrH   r   requestPOSTZgetlistr@   alldelay)	r   r   r   r   rH   empsr   Z	employeesr4   r   r   r   r   b   s    
z"TerminalReUploadDataPerUser.actionN)r    r!   r"   r#   r   r%   r&   r'   rF   rE   r   r   r   r   r   rG   Y   s   rG   c               @   s^   e Zd ZejeddddedfdedffdZejedd	dd
Zejedd	dd
Z	dS )ReUploadTransactionFormZreUploadData_field_transactionTr*   r+   r   r,   )r-   r.   r/   r0   Z"reUploadTransaction_form_startTimeF)r-   r.   r2   Z reUploadTransaction_form_endTimeN)
r    r!   r"   r   r3   r   transactionDateTimeField
start_timeend_timer   r   r   r   rR   o   s
   
rR   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalReUploadTransactionz)
    Re upload terminal transaction.
    TZterminal_op_reUploadTransactionZ*terminal_op_reUploadTransactionDescriptionZ#terminal_op_reUploadTransactionHelpc       	      C   s   dd l }ddlm} ddlm} t|dkrT|r4|s@ttd||krTttd| jr|rt|rxX| jD ]}|| qnW n@|s|j 	 
d}|rd||}x| jD ]}||j| qW d S )Nr   )r7   )reloadLogDataCmdZ%terminal_re_upload_dateRangeMandatoryZ1terminal_re_upload_error_endTimeLessThanStartTimez%Y-%m-%d %H:%M:%Sz+DATA QUERY ATTLOG StartTime={0}	EndTime={1})datetimer=   r7   r   rX   r?   r   r   r   nowstrftimer   rC   )	r   rS   rU   rV   rY   r7   rX   r   rD   r   r   r   r      s$    z"TerminalReUploadTransaction.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   rR   rE   r   r   r   r   r   rW   x   s   rW   c               @   sx   e Zd ZejedddZejedddZejedddZejedddZ	ejedddZ
ejedddZd	S )
ReloadDataFormZreloadData_field_employeeF)r-   r.   ZreloadData_field_employeePhotoZreloadData_field_fingerprintZreloadData_field_faceZreloadData_field_palmZreloadData_field_fingerVeinN)r    r!   r"   r   BooleanFieldr   r4   	emp_photobio_fpbio_facebio_palmbio_fvr   r   r   r   r\      s   r\   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalReloadDataz#
    Sync the data to terminal
    TZterminal_op_reloadDataZ!terminal_op_reloadDataDescriptionZterminal_op_reloadDataHelpc             C   s.  ddl m} ddlm} ddlm}	 ddlm}
 ddlm	} | j
r*tt|}tt|}tt|}tt|}tt|}tt|}|}g }|j
 }|s(|r|d |r|d |d	 |r|d
 |r|d |s(|r(d|jj|	jjdttt|d }|j|gd}tj}x| j
D ]}|j|jgd}t|dk r\d}tjdkrtdtj d dtj dd|j t|f f  |rt!"d|j  }|rĐq6t!j#d|j  ddd |j$||fd ||||||d n(|
|j }|||fd ||||||d q6W d S )Nr   )zk_set_user_data)r   )BioData)	getDevice)upload_data2devicer*      	         a  
                        %(emp_table)s.id in (
                            select %(bio_table)s.employee_id
                            from %(bio_table)s
                            where %(bio_table)s.bio_type in (%(params)s)
                        )
                    r;   )Z	emp_tableZ	bio_tableZparams)where)Zarea__ind   ztasks_%s.txtz%Y%mz%s %sz%Y%m%d%H%M%Sz%s data-sync employee count=%szsync_data_to_device_%siX  )timeout)ZcmdTime	is_fingeris_faceis_picis_pvis_fvis_biophoto)%r   rd   rK   r   mysite.iclock.modelsre   mysite.iclock.utilsrf   rL   rg   r   r?   boolrO   appendZ_metaZdb_tablejoinlistmapstrextrar   ZACTIVE_CELERYr@   ZarealenDEBUGr   rY   rZ   r[   snr   getsetrP   )r   r4   r^   r_   r`   ra   rb   rd   r   re   rf   rg   Zis_empro   rp   rr   rs   rq   rt   Z	bio_typesZ	query_setZ	extra_sqlZis_asyncr   rQ   Z
is_syncingdevr   r   r   r      sb    





 (

zTerminalReloadData.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r\   rE   r   r   r   r   r   rc      s   rc   c                   sR   e Zd ZejedddZejedddZejedddZ	 fddZ
  ZS )DeleteTransactionFormZ"clearAttendanceData_form_startTimeF)r-   r.   Z clearAttendanceData_form_endTimeZ!clearAttendanceData_form_clearAllc                s   t t|  }t| |S )N)superr   cleandata_pre_check)r   cleaned_data)	__class__r   r   r      s    zDeleteTransactionForm.clean)r    r!   r"   r   rT   r   rU   rV   r]   	clear_allr   __classcell__r   r   )r   r   r      s   r   c             C   s|   |  dd}|  dd}|  dd}|r@|r@||kr@ttd|rX|sL|rXttdt|t||ffsxttdd S )NrU   r1   rV   r   Z<terminal_clear_attendanceData_error_endTimeLessThanStartTimeZ>terminal_clear_attendanceData_error_clearAllRangeDateMandatoryZ;terminal_clear_attendanceData_error_chooseClearAllRangeDate)r   r   r   anyrO   )r   startendclearr   r   r   r      s    r   c               @   sX   e Zd ZdZdZedZedZedZe	j
r2dndZe	j
r@dndZed	Zd
d ZdS )TerminalClearDataz!
    Clear terminal all data
    TZterminal_op_clearDataZ terminal_op_clearDataDescriptionZterminal_op_clearDataHelp   r*   FZ7are_you_sure_to_clear_all_the_data_in_selected_terminalc             C   s.   ddl m} | jr*x| jD ]}|| qW d S )Nr   )clearDevData)r   r   r   )r   r   r   r   r   r   r     s    zTerminalClearData.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r   ZTHAILANDZconfirmation_timesZaction_confirm_passwordr(   r   r   r   r   r   r     s   r   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalClearAttendanceDataz$
    Clear terminal transaction
    TZterminal_op_clearAttendanceDataZ*terminal_op_clearAttendanceDataDescriptionZ#terminal_op_clearAttendanceDataHelpc             C   s8   ddl m} | jr4d}x| jD ]}||||| qW d S )Nr   )zk_delete_log_dataz	CLEAR LOG)r   r   r   )r   rU   rV   r   r   rD   r   r   r   r   r   &  s
    z"TerminalClearAttendanceData.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r   rE   r   r   r   r   r   r     s   r   c               @   s<   e Zd ZdZdZedZedZedZedZ	dd Z
d	S )
TerminalReadInformationz;
    Get terminal information by sending INFO command.
    TZterminal_op_readInformationZ&terminal_op_readInformationDescriptionZterminal_op_readInformationHelpZ7are_you_sure_to_read_information_from_selected_terminalc             O   s0   ddl m} | jr,x| jD ]}||d qW d S )Nr   )appendDevCmdINFO)r   r   r   )r   r   r   r   r   r   r   r   r   >  s    zTerminalReadInformation.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r(   r   r   r   r   r   r   4  s   r   c               @   sB   e Zd ZejedddZejedddZejedddZ	dS )DeleteCaptureFormrU   F)r-   r.   rV   r   N)
r    r!   r"   r   rT   r   rU   rV   r]   r   r   r   r   r   r   E  s   r   c               @   s<   e Zd ZdZdZedZedZedZedZ	dd Z
d	S )
TerminalDeleteCapturez+
    Clear terminal attendance capture
    TZterminal_op_deleteCaptureZ$terminal_op_deleteCaptureDescriptionZterminal_op_deleteCaptureHelpZ6are_you_sure_to_clear_the_capture_of_selected_terminalc             C   s4   ddl m} | jr0x| jD ]}||d d d qW d S )Nr   )zk_delete_photo_datar*   )r   r   r   )r   r   r   r   r   r   r   V  s    zTerminalDeleteCapture.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r(   r   r   r   r   r   r   K  s   r   c               @   s<   e Zd ZdZdZedZedZedZedZ	dd Z
d	S )
TerminalClearAllz+
    Clear terminal attendance capture
    TZterminal_op_clearAllZterminal_op_clearAllHelpTxtZterminal_op_clearAllDescriptionZ terminal_op_clearAllConfirmationc             C   s4   ddl m} | jr0d}x| jD ]}||| qW d S )Nr   )r   z
CLEAR DATA)r   r   r   )r   r   rD   r   r   r   r   r   g  s
    zTerminalClearAll.actionN)r    r!   r"   r#   r$   r   r%   r'   r&   r(   r   r   r   r   r   r   ]  s   r   c               @   s(   e Zd ZejeddddeddZdS )DuplicatePunchPeriodFormduplicate_punch_periodr*   r   i  zminutes/seconds)r-   r/   	min_value	max_value	help_textN)r    r!   r"   r   IntegerFieldr   r   r   r   r   r   r   o  s   r   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalDuplicatePunchPeriodz
    TZ terminal_op_duplicatePunchPeriodZ+terminal_op_duplicatePunchPeriodDescriptionZ$terminal_op_duplicatePunchPeriodHelpc             C   s>   ddl m} | jr:dd|}x| jD ]}||j| q&W d S )Nr   )r7   zSET OPTION {0}={1}Z
AlarmReRec)r=   r7   r   r   rC   )r   r   r7   rD   r   r   r   r   r   }  s
    z#TerminalDuplicatePunchPeriod.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r   rE   r   r   r   r   r   r   t  s   r   c            
   @   sR   e Zd Zejedddedfdedfdedfded	fd
edffdZdS )CaptureFormZterminal_capturerh   r   Zcapture_no_photor*   Zcapture_take_photo_no_saveZcapture_verify_photo_and_saver   Z$capture_verify_successfully_and_save   Zcapture_verify_failed_and_save)r-   r/   r0   N)r    r!   r"   r   r3   r   capturer   r   r   r   r     s   r   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalCapturez
    TZterminal_op_captureSettingZ%terminal_op_captureSettingDescriptionZterminal_op_captureSettingHelpc             C   s>   ddl m} | jr:dd|}x| jD ]}||j| q&W dS )zY
        AttPhotoFunOn, CapturePic: 0~2
        :param capture:
        :return:
        r   )r7   zSET OPTION {0}={1}Z
CapturePicN)r=   r7   r   r   rC   )r   r   r7   rD   r   r   r   r   r     s
    zTerminalCapture.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r   rE   r   r   r   r   r   r     s   r   c               @   s4   e Zd ZejedddedfdedffdZdS )CaptureUploadFormZterminal_captureUploadr*   r   ZcaptureUpload_disabledZcaptureUpload_enabled)r-   r/   r0   N)r    r!   r"   r   r3   r   uploadr   r   r   r   r     s   r   c               @   s8   e Zd ZdZdZedZedZedZe	Z
dd ZdS )	TerminalCaptureUploadz
    TZterminal_op_captureUploadZ$terminal_op_captureUploadDescriptionZterminal_op_captureUploadHelpc             C   s>   ddl m} | jr:dd|}x| jD ]}||j| q&W dS )z2
        :param capture:
        :return:
        r   )r7   zSET OPTION {0}={1}ZUploadPhotoN)r=   r7   r   r   rC   )r   r   r7   rD   r   r   r   r   r     s
    zTerminalCaptureUpload.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r   rE   r   r   r   r   r   r     s   r   c               @   s   e Zd ZejedddZdS )TerminalUpgradeFirmwareFormZupgradeFirmware_upgradeFilez<br/>emfw.cfg)r-   r   N)r    r!   r"   r   Z	FileFieldr   upgrade_filer   r   r   r   r     s   r   c               @   sF   e Zd ZdZdZedZedZedZe	Z
edddZdd	 Zd
S )TerminalUpgradeFirmwarez
    TZterminal_op_upgradeFirmwareZ&terminal_op_upgradeFirmwareDescriptionZ"terminal_op_upgradeFirmwareHelpTxtc       	      C   s   dd l }dd l}|ry8t| ddd }| }|ddd}W d Q R X W q tk
r   t| ddd }| }|ddd}W d Q R X Y qX nt| d}| }W d Q R X | }|| |	 }|
| j}||fS )	Nr   rutf8)encoding
z
zlatin-1rb)hashlibosopenreadreplaceencode	Exceptionmd5updateZ	hexdigeststatst_size)		file_pathbase64_changer   r   fbuffhash_md5r   sizer   r   r   r     s$     $
z TerminalUpgradeFirmware.hash_md5c          
   C   s  ddl }ddl}ddlm} ddlm} ddlm} ddlm	} |j
|jd}|j
|sf|| | jjd }| }	t| d	 }
|j}|d
dd dkr|dx6| jD ]*}||j}|j
|dj|
|jd}|j
|s|| |j
||}t|d}||	 W dQ R X |drdjdj|
|j|dd}t|dr|jdkr| j|dd\}}djdj|
|j|dd}dj|||d}n4| j|dd\}}|dkr|d d!j|||d}||j|dd" qW dS )#z7
        :param upgrade_file:
        :return:
        r   N)r   )r7   )r   )rf   fwr   i  .r*   )Zcfgz
Wrong filez{stamp}/{sn})stampr   zwb+z.cfgzfile/fw/{path}z{stamp}/{sn}/{file})r   r   file)pathSubcontractingUpgradeFunOn1F)r   zfiles/fw/{path}zDUPGRADE checksum={md5},url={url},size={size},supportsubcontracting=1)r   urlr   Ti @ z:The current pushcomm does not support upgrading large filez,UPGRADE checksum={md5},url={url},size={size})notify)r   timedjango.confr   r=   r7   mysite.admin.exceptionsr   rv   rf   r   ry   ZADDITION_FILE_ROOTexistsmakedirsrM   ZFILESr   r?   namersplitr   r   r   r   writeendswithhasattrr   r   rC   )r   r   r   r   r   r7   r   rf   Zupgrade_pathr   r   	file_namerJ   r   Z
stamp_pathr   r   r   r   r   rD   r   r   r   r     sH    




zTerminalUpgradeFirmware.actionN)T)r    r!   r"   r#   r$   r   r%   r&   r'   r   rE   staticmethodr   r   r   r   r   r   r     s   r   c               @   s0   e Zd ZejedddZejedddZdS )TransactionCorrectionUploadFormZ"action_transactionCorrection_startT)r-   r.   Z action_transactionCorrection_endN)r    r!   r"   r   rT   r   r   r   r   r   r   r   r     s   r   c               @   s4   e Zd ZdZedZedZedZeZ	dd Z
dS )TerminalTransactionCorrectionTZ!terminal_op_transactionCorrectionZ,terminal_op_transactionCorrectionDescriptionZ(terminal_op_transactionCorrectionHelpTxtc             C   s6   ddl m} | jr2x| jD ]}|j||| qW d S )Nr   )tasks)mysite.iclockr   r   Ztransaction_correctionrP   )r   r   r   r   r   r   r   r   r     s    z$TerminalTransactionCorrection.actionN)r    r!   r"   r$   r   r%   r&   r'   r   rE   r   r   r   r   r   r     s   r   c               @   s   e Zd ZejedddZdS )TerminalPullFileFormZaction_pullFile_filePathT)r-   r.   N)r    r!   r"   r   	CharFieldr   r   r   r   r   r   r   "  s   r   c               @   s>   e Zd ZdZdZedZedZedZe	Z
ejZdd ZdS )	TerminalPullFilez$
    Pull the file from device.
    TZterminal_op_pullFileZterminal_op_pullFileDescriptionZterminal_op_pullFileHelpTxtc             C   s4   ddl m} | jr0x| jD ]}|j|| qW d S )Nr   )r   )r   r   r   Zget_terminal_filerP   )r   r   r   r   r   r   r   r   1  s    zTerminalPullFile.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   r   rE   r   r   Zvisibler   r   r   r   r   r   &  s   r   )r   r*   c               @   s(  e Zd ZejeddddZejedeeedfe	edffdZ
ejed	ej d
Zejeddd
Zejedej d
Zejeddd
Zejedej jdedfdedfdedfdedfdedfdedfdedfdedfd ed!fd"ed#fd$ed%fd&ed'ffdZejed(dded)fded*fded+fded,fded-ffdZejed.dd/ed0fded1fded2fded3fded4fded5fded6ffdZejeddd
Zejed7ej jdedfdedfdedfdedfdedfdedfdedfdedfd ed!fd"ed#fd$ed%fd&ed'ffdZejed8dded)fded*fded+fded,fded-ffdZejed9dd/ed0fded1fded2fded3fded4fded5fded6ffdZejeddd
Zd:S );TerminalDaylightSavingTimeFormz(terminal.fields.enableDaylightSavingTimeTF)r-   r/   r.   z&terminal.fields.daylightSavingTimeModezterminal.DLSTModeOpts.datetimezterminal.DLSTModeOpts.weekday)r-   r/   r0   z+terminal.fields.daylightSavingTimeStartDate)r-   r/   z'terminal.fields.daylightSavingTimeStartz04:00:00z)terminal.fields.daylightSavingTimeEndDatez%terminal.fields.daylightSavingTimeEndz,terminal.fields.daylightSavingTimeStartMonthr*   ztime.months.januaryrh   ztime.months.februaryr   ztime.months.marchr   ztime.months.aprilrj   ztime.months.may   ztime.months.june   ztime.months.julyrk   ztime.months.augustri   ztime.months.september
   ztime.months.october   ztime.months.november   ztime.months.decemberz+terminal.fields.daylightSavingTimeStartWeekr   2345z.terminal.fields.daylightSavingTimeStartWeekdayr   Zweekday_option_sundayZweekday_option_mondayZweekday_option_tuesdayZweekday_option_wednesdayZweekday_option_thursdayZweekday_option_fridayZweekday_option_saturdayz*terminal.fields.daylightSavingTimeEndMonthz)terminal.fields.daylightSavingTimeEndWeekz,terminal.fields.daylightSavingTimeEndWeekdayN)r    r!   r"   r   r]   r   func_onr3   	DATE_TIME
MONTH_WEEK	dlst_modeZ	DateFieldrY   rZ   
start_dateZ	TimeFieldrU   end_daterV   monthstart_month
start_weekstart_weekdayr   	end_monthend_weekend_weekdayr   r   r   r   r   r   ;  sF   

&:&:r   c               @   s4   e Zd ZedZedZedZeZdZ	dd Z
dS )TerminalDaylightSavingTimez#terminal.actions.daylightSavingTimez/terminal.actions.daylightSavingTime.descriptionz+terminal.actions.daylightSavingTime.helpTxtTc             O   sD  ddl m} ddlm} | js4t }|jj|d| _| jj}t	|d }|t
tfkrXd S tddt	|d g}|d r|dd	|d  |t
kr.|d
 |d  }	}
|d |d  }}|
jd> |
jd> B |	jd> B |	jB }|jd> |jd> B |jd> B |jB }|dd| |dd| n|dd|d  |dd|d  |dd|d  |dd|d j |dd|d j |dd|d  |dd|d  |dd |d!  |dd"|d# j |dd$|d# j x,| jD ]"}x|D ]}||j| q$W qW d S )%Nr   )r7   )Terminal)r   r   zSET OPTION {0}={1}ZDaylightSavingTimeOnr   ZDLSTModerU   r   rV   r         rk   ZDaylightSavingTimeZStandardTimeZWeekOfMonth1r   ZWeekOfMonth2r   ZWeekOfMonth3r   ZWeekOfMonth4r   ZWeekOfMonth5ZWeekOfMonth6r   ZWeekOfMonth7r   ZWeekOfMonth8r   ZWeekOfMonth9r   ZWeekOfMonth10)r=   r7   ru   r   r   r   r@   Z
valid_formr   r?   r   r   rz   r   rx   r   ZdayZhourZminuterC   )r   r   r   r7   r   r   dataZdaylight_modeZcmdsrU   r   rV   r   Z_startZ_endr   rD   r   r   r   r   p  sB    

$$
z!TerminalDaylightSavingTime.actionN)r    r!   r"   r   r%   r&   r'   r   rE   r$   r   r   r   r   r   r   i  s   r   c               @   s8   e Zd ZdZedZedZedZedZdd Z	dS )	TerminalClearCommandTterminal_op_clearCommand#terminal_op_clearCommandDescriptionterminal_op_clearCommandHelpTxt$terminal_op_clearCommandConfirmationc             O   s(   | j r$x| j D ]}|j   qW d S )N)r   Zterminalcommand_setrO   delete)r   r   r   r   r   r   r   r     s    zTerminalClearCommand.actionN)
r    r!   r"   r$   r   r%   r&   r'   r(   r   r   r   r   r   r     s   r   c               @   s8   e Zd ZdZedZedZedZedZdd Z	dS )	TerminalCmdClearCommandFr   r   r   r   c             O   s(   ddl m} |jj| jjjd  d S )Nr   )TerminalCommand)Zterminal__company_id)ru   r  r   r@   rM   usercurrent_companyr  )r   r   r   r  r   r   r   r     s    zTerminalCmdClearCommand.actionN)
r    r!   r"   r$   r   r%   r&   r'   r(   r   r   r   r   r   r    s   r  c               @   s   e Zd ZejeddedfdedffdddZejed	dd
Zejeddedfdedfdedfdedfdedfdedfdedfdedfdedfdedff
dddZ	dS ) TerminalEnrollRemotelyFormZenrollRemotely_field_bioTyper   Z"enrollRemotely_bioType_fingerprintr   ZenrollRemotely_bioType_facer*   T)r-   r0   r/   r.   ZenrollRemotely_field_empCode)r-   r.   ZenrollRemotely_field_fingerr   Z$enrollRemotely_finger_leftHandLittleZ"enrollRemotely_finger_leftHandRingrh   Z$enrollRemotely_finger_leftHandMiddler   Z"enrollRemotely_finger_leftHandForer   Z#enrollRemotely_finger_leftHandThumbrj   Z$enrollRemotely_finger_rightHandThumbr   Z#enrollRemotely_finger_rightHandForer   Z%enrollRemotely_finger_rightHandMiddlerk   Z#enrollRemotely_finger_rightHandRingri   Z%enrollRemotely_finger_rightHandLittleN)
r    r!   r"   r   r3   r   bio_typer   r5   fingerr   r   r   r   r    s   



r  c               @   s<   e Zd ZdZdZedZedZedZdZ	e
Zdd ZdS )	TerminalEnrollRemotelyz#
    Enroll biometric remotely
    TZterminal_op_enrollRemotelyZ%terminal_op_enrollRemotelyDescriptionZ!terminal_op_enrollRemotelyHelpTxtc          	   C   s   ddl m} ddlm} | jrd }|dkr0d}n|dkr>d}n|dkrJd	}|sRd S t }tjj||d
jddd}||krt	dx8| jD ].}	|j
||||dddd}
||	j|
dd qW d S )Nr   )r7   )	devicePINr:   z!ENROLL_MF PIN={pin}	RETRY={retry}r   z@ENROLL_FP PIN={pin}	FID={fp}	RETRY={retry}	OVERWRITE={overwrite})r   68z?ENROLL_FP PIN={pin}	FID=111	RETRY={retry}	OVERWRITE={overwrite})r5   r   r5   T)Zflatz Please enter a valid Employee Idr1   r   r*   )r  r<   fpZcardZretryZ	overwrite)r   )r=   r7   r>   r
  r   r   r   r@   Zvalues_listr   r   rC   )r   r  r5   r  r7   r
  rD   r   rI   r   Z_cmdr   r   r   r     s(    zTerminalEnrollRemotely.actionN)r    r!   r"   r#   r$   r   r%   r&   r'   Zunique_object_requiredr  rE   r   r   r   r   r   r	    s   r	  c                   sb   e Zd ZejedejdZejedej	dZ
ejedej e ddZ fddZ  ZS )	TerminalNewAreaFormZarea_field_code)r-   Z
max_lengthZarea_field_nameZarea_field_parentAreaF)r-   ZquerysetZwidgetr.   c                s   t t| j|| yVddlm} | }tjj|j	d
d }|rft|jrft|jd | jd _W n tk
r|   Y nX d S )Nr   )threadlocals)r   idr*   	area_code)r   r  __init__Zmysite.baser  Zget_current_userr	   r   r@   r  Zorder_byZlastr?   r  Zfieldsr/   r   )r   r   r   r  r  r   )r   r   r   r    s    zTerminalNewAreaForm.__init__)r    r!   r"   r   r   r   r   ZMAX_AREA_CODEr  ZMAX_AREA_NAME	area_nameZModelChoiceFieldr	   r   Zget_querysetr
   superiorr  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 )TerminalNewAreaZterminal_op_newAreaZterminal_op_newAreaDescriptionZterminal_op_newAreaHelpTxtc             O   sl   |  | jj}| rh|j}tjj|d | jjj	d
 rFttdt|d |d |d djdd d S )	Nr  )r  r   Z'terminalNewArea_error_duplicateAreaCoder  r  )r  r  Zparent_areaT)Zforce_insert)rE   rM   rN   is_validr   r	   r   r@   r  r  countr   r   Zsave)r   r   r   formr   r   r   r   r     s    zTerminalNewArea.actionN)
r    r!   r"   r   r%   r&   r'   r  rE   r   r   r   r   r   r    s
   r  c               @   s(   e Zd ZejeddddeddZdS )TerminalLoopDelTransactionFormZterminal_field_numberReducer   i  Z#terminal_field_numberReduceHelpText)r-   r/   r   r   r   N)r    r!   r"   r   r   r   number_reducer   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 )TerminalLoopDelTransactionZterminal_op_loopDelTransactionZ)terminal_op_loopDelTransactionDescriptionZ%terminal_op_loopDelTransactionHelpTxtc             O   s\   ddl m} | | jj}| rX|j}dd|dd}x| j	D ]}||j
| qDW d S )Nr   )r7   zSET OPTION {0}={1}ZLoopDeleteLogr  )r=   r7   rE   rM   rN   r  r   r   r   r   rC   )r   r   r   r7   r  r   rD   r   r   r   r   r     s    z!TerminalLoopDelTransaction.actionN)
r    r!   r"   r   r%   r&   r'   r  rE   r   r   r   r   r   r  
  s
   r  )HZdjango.utils.translationr   r   r   r   Zdjango.formsr   Zdjango.core.cacher   mysiter   Zmysite.adminr   Zmysite.personnelr   rK   r	   Zmysite.personnel.widgetsr
   r   r   Z&mysite.personnel.models.model_employeer   Zmysite.att.utilsr   r=   r   rY   r   ZZKModelActionr   ZZKActionFormr)   r6   rF   rG   rR   rW   r\   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r   r   r   r   <module>   sl   	 	"
LP.-#