B
    ýÔ?cˆ’  ã               @   s  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
 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 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/m0Z0 d dl1m2Z2 d dl3Z3d dl4Z4dZ5dd„ Z6dd„ Z7eG dd „ d eeƒƒZ8ee
j9e8d!d"d#„ ƒZ:ee
j;e8d!d$d%„ ƒZ<ee
j=e8d!d&d'„ ƒZ>ee
j;e8d!d(d)„ ƒZ?ee
j@e8jAjBd!d*d+„ ƒZCd,d-„ ZDd.d/„ ZEd0d1„ ZFdS )2é    N)Úsettings)Úcache)Úmodels)Úsignals)Úreceiver)ÚJsonResponse)Útimezone)Úgettext_lazy)ÚRegexValidator)Úpython_2_unicode_compatible)ÚAdminRuntimeWarning)Ú	BaseModel)ÚAbstractCloud)Údb_const)ÚDepartmentForeignKeyÚPositionForeignKeyÚAreaManyToManyFieldÚWorkflowRoleManyToManyFieldÚLocationForeignKey)ÚArea)ÚCertification)Ú
Department)ÚPosition)ÚLocation)Ú	customSql)ÚWorkflowRole)Úfields)ÚMyUserzMpbkdf2_sha256$36000$Gj09deAAUqW7$ih9vyun8PPwxvbG1+bhxB0TIQF+2IUfdhiDUf0AS0o4=c              C   sL   t tdƒrt ¡ } n4dtttt ¡ d ƒƒƒdd … tt ¡ d ƒf } | S )NÚCLOUD_VERSIONz%s%si@B é   iè  )	Úgetattrr   ÚuuidZuuid1ÚstrÚintÚroundÚtimeÚrandom)Z
uuid_value© r'   ú?G:\easytimepro\master/mysite/personnel\models\model_employee.pyÚzk_uuid*   s    

4r)   c             C   sd   dd l }dd l}| jj}y&| dtjj dj|| j	d ¡ W n t
k
rR   Y nX dj|| j	dS )Nr   Ú z"/photo/{company_hex_id}/{file}.jpg)Úcompany_hex_idÚfilez!photo/{company_hex_id}/{file}.jpg)ÚosÚurllibÚcompanyÚhex_idÚunlinkr   ÚPHOTO_STORAGEÚlocationÚformatÚemp_codeÚ	Exception)ÚselfÚfilenamer-   r.   r+   r'   r'   r(   Úupload_path_handler2   s    r9   c                   sf  e Zd ZedƒZedƒZedƒZedƒZedƒZe	j
deddd	Ze	j
ed
ƒdejegdZe	j
edƒejdddZe	j
edƒejdddZe	j
edƒejdddZe	j
edƒejddegdZe	j
edƒejddegdZe	j
edƒejddegdZeeedƒdde	jdZ e!e"edƒdde	jdZ#e$e%edƒdde	jdZ&dZ'e	j(edƒde'dddZ)e	j*edƒe+ej,ddddZ-e.e/ed ƒdd!Z0e1j2ed"ƒe3ej4ddd#Z5e	j
ed$ƒej6ddegdZ7e	j8ed%ƒdddej9d&Z:e	j
ed'ƒej;ddegdZ<e	j
ed(ƒej=dddZ>e	j
ed)ƒej?dddZ@e	j
ed*ƒejAejBdddd+ZCe	jDed,ƒdddd-ZEe	j
ed.ƒejFdddd/ZGe	j
ed0ƒejHdddegd1ZIe	j
ed2ƒejJdddegd1ZKe	j
ed3ƒejLdddegd1ZMe	j
ed4ƒegejNdddd5ZOe	j
ed6ƒejPdddegd1ZQe	j
ed7ƒejRdddegd1ZSe	j
ed8ƒejTdddd/ZUe	j
ed9ƒejVdddZWe	j
ed:ƒejXdddegd1ZYe	jZed;ƒddde[j\d<Z]e	jDed=ƒdddd-Z^e	j8ed>ƒddddej_d?Z`e	j
ed@ƒejadddegd1Zbe	jcedAƒdejdddBZee	j8edCƒejfdddDZge	jcedEƒdejdddFZhe	jcedGƒdejddddHZie	jcedIƒdejddddHZje	jcedJƒdejdddFZke	jcedKƒdejdddFZle	jcedLƒdejdddFZme	jcedMƒdejdddFZne	jcedNƒdddOZoe	j8edPƒdddddQZpeqerdRedSƒdd!Zse	j8edTƒdddddUZte	juevedVƒddWdXZwe	j(edYƒdddejxdZZye	j(ed[ƒddd\ejzdZZ{e	j(ed]ƒddd\ej|dZZ}e	j~ed^ƒejdddd/Z€e	jced_ƒdejdddFZe	jced`ƒdejdddFZ‚e	jcedaƒdejdddFZƒe	jZedbƒdddcZ„e	jceddƒdddOZ…dZ†dZ‡e	j
dedddZˆe	j8ddddfZ‰dgdh„ ZŠdidj„ Z‹d¨‡ fdldm„	ZŒdndo„ Zdpdq„ ZŽdrds„ Zedtdu„ ƒZ‘d©‡ fdvdw„	Z’dxdy„ Z“dzd{„ Z”d|d}„ Z•d~d„ Z–dªd€d„Z—d‚dƒ„ Z˜d«d„d…„Z™ešd†d‡„ ƒZ›ešd¬dˆd‰„ƒZœešdŠd‹„ ƒZdŒd„ ZžG dŽd„ dƒZŸdd‘„ Z d’d“„ Z¡ed”d•„ ƒZ¢d–d—„ Z£ed˜d™„ ƒZ¤d­dšd›„Z¥dœd„ Z¦dždŸ„ Z§d d¡„ Z¨d¢d£„ Z©d¤d¥„ Zªd¦d§„ Z«‡  Z¬S )®ÚEmployeez^[0-9a-zA-Z_]*$z^[0-9]*$zO^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$z?^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$z^[a-zA-Z]*$é$   TF)Ú
max_lengthÚdefaultZprimary_keyÚeditableZemp_field_employeeCode)Úblankr<   Ú
validatorsZemp_field_firstName)r<   Únullr?   Zemp_field_lastNameZemp_field_localizedNameZemp_field_passport_number)r<   rA   r?   r@   Z#emp_field_driver_license_automobile)r<   r?   rA   r@   Z#emp_field_driver_license_motorcycleZemployee_field_department)Úverbose_namer?   rA   Z	on_deleteZemployee_field_positionZemployee_field_location))r   ZDisable)é   ZEnableZemp_field_outdoor_managementr   )r=   Úchoicesr?   rA   Zemp_field_photoéÈ   )Z	upload_toZstorager?   rA   r<   Zemp_field_area)rB   r?   Zemp_field_selfPassword)r=   r<   rA   r?   Zemp_field_devicePasswordZemp_field_devicePrivilege)r=   rA   r?   rD   Zemp_field_cardNumberZemp_field_accessGroupZemp_field_accessTimezoneZemp_field_gender)r<   rD   r?   rA   r>   Zemp_field_birthday)rA   r?   r>   Zemp_field_address)r<   rA   r?   r>   Zemp_field_postcode)r<   rA   r?   r>   r@   Zemp_field_officeTelZemp_field_contactTelZemp_field_mobile)r@   r<   rA   r?   r>   Zemp_field_nationalZemp_field_religionZemp_field_titleZemp_field_enrollSNZemp_field_SSNZemp_field_updateTime)rA   r?   r>   r=   Zemp_field_hireDateZemp_field_verifyMode)rA   r?   r>   r=   rD   Zemp_field_cityZemp_field_isAdmin)r=   rD   r?   Zemp_field_type)rD   rA   r?   Zemp_field_enableAtt)r=   rD   r>   Zemp_field_enablePayroll)r=   rD   r>   r?   Zemp_field_enableOvertimeZemp_field_enableHolidayZemp_field_enableWhatsappZemp_field_whatsapp_exceptionZemp_field_whatsapp_punchÚdeleted)r=   r>   Úreserved)rA   r=   r?   r>   Ú	flow_roleZemp_field_workflowRoleÚdel_tag)r=   rA   r?   r>   Zemployee_certificationÚEmployeeCertification)rB   r?   ÚthroughZemp_field_appStatus)rA   r?   r=   rD   Zemp_field_appPunchStatusrC   Zemp_field_appRoleZemp_field_emailZemp_field_enable_smsZemp_field_sms_exceptionZemp_field_sms_punchZemp_field_lastLogin)rA   r?   Zemp_field_isActiveé   )r=   rA   r?   c             C   s   dj | j| jpddS )Nz{emp_code} {name}r*   )r5   Úname)r4   r5   Ú
first_name)r7   r'   r'   r(   Ú__str__È   s    zEmployee.__str__c             C   s   |   ¡ S )N)rO   )r7   r'   r'   r(   Ú__unicode__Ë   s    zEmployee.__unicode__Nc                s>  ddl m} ddlm} t| j ¡  ¡ ƒdkrDtddt	dƒigiƒ‚| j
rf| j
tj ¡ krftt	dƒƒ‚| jr¬tjj| jd	j| j| jd
 ¡ }|r¬tt	dƒj| j| jdƒ‚| jr¾| j ¡ | _| jrtjj| jd	j| j| jd ¡ }|rtt	dƒj| j| jdƒ‚| jrNtjj| jd	j| jd ¡ }	|	rNtt	dƒj| j| jdƒ‚tjsž| jrætjj| jd	j| jd ¡ }
|
rætt	dƒj| j| jdƒ‚nH| jræ|ƒ jj| jd	j| jd ¡ }|rætt	dƒj| j| jdƒ‚tj}tjrœ| jj}tjj| jdj| jd	  ¡ d |kr4tdt	dƒ ƒ‚| j!r@dnd| _!tj"}| jj#}|s`tj$}tjjd| jdj| jd	  ¡ | j! |krœtdt	dƒ ƒ‚| j
rÒt%| j
tjƒrÒ| j
j&dk rÒtdt	dƒ ƒ‚t't| ƒ (||||¡ tj)r
ddl*m+} |j, -| j¡ t. /dtj0| j1f ¡ t. /d tj0| j| j2f ¡ d S )!Nr   )Úget_user_model)ÚResignrC   r5   ÚmessageZ-this_field_can_not_include_space_tab_or_enterZ0date_of_joining_should_be_less_than_current_date)Úid)r/   Ússnz0employeeSave_error_{emp_name}_duplicateSSN_{ssn})Úemp_namerU   )Úcard_nor/   z2employeeSave_error_{emp_name}_duplicateCard_{card})rV   Zcard)Úmobilez6employeeSave_error_{emp_name}_duplicateMobile_{mobile})rV   rX   )Úemailz4employeeSave_error_{emp_name}_duplicateEmail_{email})rV   rY   )Zemail__exact)r/   z%sZ'login_authorize_license_employee_exceed)Ú
app_statusr/   Z"login_authorize_license_app_exceedil  ZemployeeSave_error_invalidDate)Útasksz%s_iclock_emp_%sz%s_iclock_emp_PIN_%s_company_%s)3Údjango.contrib.authrQ   Z$mysite.personnel.models.model_resignrR   Úlenr5   ÚstripÚsplitr   Ú_Ú	hire_dateÚdatetimeÚdateZtodayrU   r:   ÚobjectsÚexcludeÚpkÚfilterr/   Úexistsr4   rN   rW   ÚfirstrX   r   r   rY   ZAUTHORIZED_EMPLOYEEÚmax_employees_limitÚcountrZ   ZAUTHORIZED_APPZmax_mobile_applications_limitZ%DEFAULT_MAX_MOBILE_APPLICATIONS_LIMITÚ
isinstanceZyearÚsuperÚsaveZTHAILANDÚmysite.personnelr[   Zbackup_user_photoÚdelayr   ÚdeleteÚUNITrT   Ú
company_id)r7   Zforce_insertZforce_updateÚusingÚupdate_fieldsrQ   rR   Zssn_empZcard_keeperZmobile_keeperZemail_keeperZemail_checkrj   Zmax_mobile_application_limitr[   )Ú	__class__r'   r(   rn   Î   st    "



 
zEmployee.savec                sŽ   ddl m} yb|ƒ ‰ | j ¡  d¡jddd}td ‡ fdd„|D ƒƒ}d |¡}t|ƒd	krl|d d	… d
 }|S    dd l	}| 
¡  dS d S )Nr   )Úget_area_cacherT   T)Zflatc                s   g | ]}ˆ   |d ¡‘qS )r*   )Úget)Ú.0Úe)Úm_dictr'   r(   ú
<listcomp>  s    z(Employee.get_attarea.<locals>.<listcomp>ú,é2   z....r*   )Z"mysite.personnel.models.model_arearw   ÚareaÚallZonlyZvalues_listrg   Újoinr]   Ú	tracebackÚ	print_exc)r7   rw   Zarea_idsZareasZm_retr‚   r'   )r{   r(   Úget_attarea  s    
zEmployee.get_attareac             C   s   ddl m} || jƒS )Nr   )Ú	devicePIN)Úmysite.personnel.utilsr…   r5   )r7   r…   r'   r'   r(   Úpin   s    zEmployee.pinc             C   s   |   ¡ }|S )N)r‡   )r7   r‡   r'   r'   r(   Ú	cache_pin$  s    zEmployee.cache_pinc             C   s    | j }| jrd| j | jf }|S )Nz%s.%s)rN   Ú	last_name)r7   Zsnamer'   r'   r(   rM   )  s    zEmployee.namec                s°   ddl m}m} | jj}|jj| j|d |jj| j|d |  	¡  |  
¡  d| _|  d¡ |  ¡  t dtj| jf ¡ t |jtj| j| jf ¡ tt| ƒj||f|ž|ŽS )Nr   )r[   Ú	cache_key)rs   rC   Úuserz%s_iclock_emp_%s)ro   r[   rŠ   r/   r0   Zremove_user_photorp   r5   Zremove_user_biophotoÚdelete_db_templateÚdelete_db_facerI   Údelete_emp_devÚdelete_flow_roler   rq   r   rr   rT   Ú TERMINAL_EMPLOYEE_CODE_CACHE_KEYrs   rm   r:   )r7   rt   Zkeep_parentsÚargsÚkwargsr[   rŠ   rs   )rv   r'   r(   rq   0  s    
zEmployee.deletec             C   s(   | j  ¡ }| ¡  | j ¡ }| ¡  d S )N)Zworkflowinstance_setr€   rq   Znodeinstance_set)r7   ZworkflowinstanceZnodeinstancer'   r'   r(   r   A  s    

zEmployee.delete_flow_rolec             C   s   | j jdd}| ¡  d S )NrC   )Úbio_type)Úbiodata_setrg   rq   )r7   Úbiodatar'   r'   r(   rŒ   H  s    zEmployee.delete_db_templatec             C   s   | j jdd}| ¡  d S )Né	   )r“   )r”   rg   rq   )r7   r•   r'   r'   r(   Údelete_db_vlfaceL  s    zEmployee.delete_db_vlfacec             C   s   | j jdd}| ¡  d S )Né   )r“   )r”   rg   rq   )r7   r•   r'   r'   r(   r   P  s    zEmployee.delete_db_facec             C   s*   |r| j j|d}n
| j  ¡ }| ¡  d S )N)Zbio_type__in)r”   rg   r€   rq   )r7   Ú	bio_typesr•   r'   r'   r(   Údelete_db_biodataT  s    
zEmployee.delete_db_biodatac             C   sÞ   dd l }ddlm} y |dƒ}d | j¡}|j |j ||¡¡rT| |j ||¡¡ dj| j	j
| jd}|j |j ||¡¡r’| |j ||¡¡ ddlm} |jj| jd ¡  W n$ tk
rØ   dd l}| ¡  Y nX d S )	Nr   )Úget_or_create_folderZbiophotozdefault_{0}.jpgz{company}/{code}.jpg)r/   Úcode)ÚBioPhoto)Úemployee)r-   Úmysite.utilsr›   r4   r5   ÚpathÚisfiler   Úremover/   r0   Úmysite.iclock.modelsr   rd   rg   rT   rq   r6   r‚   rƒ   )r7   r-   r›   ZbpZbio_picr   r‚   r'   r'   r(   Údelete_biophoto[  s     zEmployee.delete_biophotoc             C   sà   ddl m} ddlm} ddlm} |jj| j 	¡ dj
dddgd	}t|ttfƒsZ|f}x€|D ]x}||jƒ}y6|j}|r‚|jjr„w`x|D ]}	|||  ¡ |	ƒ qŠW W q` tk
rÖ }
 zdd l}| ¡  W d d }
~
X Y q`X q`W d S )
Nr   )ÚTerminal)Ú	getDevice)Úzk_delete_data)Zarea__iné   é   é   )Zproduct_type__in)r£   r¥   Zmysite.iclock.utilsr¦   Zmysite.core.zkcmdprocr§   rd   rg   r   r€   re   rl   ÚlistÚsetÚsnÚ
is_defaultr‡   r6   r‚   rƒ   )r7   r™   r¥   r¦   r§   ZdevsZdevZdevicer   r“   rz   r‚   r'   r'   r(   rŽ   m  s"    "


zEmployee.delete_emp_devc             C   sl   ddl m} | r| dkrd S t |jtj| f ¡}|r:|S tjj	| d 
¡ }|rht |jtj| f |¡ |S )Nr   )rŠ   Ú0)r5   )ro   rŠ   r   rx   r   r   rr   r:   Úall_objectsrg   ri   r¬   )rœ   rŠ   Ú
cached_empÚempr'   r'   r(   Úget_emp_via_code€  s    zEmployee.get_emp_via_codec          
   C   s€  ddl m} ddlm}m}m} ddlm} | r8| dkr<d S t 	|j
tj| |f ¡}	|	rà|	jrˆ|	jdkrˆddt|	jƒ d  }
t|
ƒ nX|rÜy,|	j |j¡ t |j
tj| |f |	¡ W n" tk
rÚ } zW d d }~X Y nX |	S tjj| |d	 ¡ }|rB| |jkr
|S d
|_|r$|j |j¡ t |j
tj| |f |¡ |S |s\ttdd| i ƒƒ‚yæy(|jdkrpd S |j}|s„||ƒ}W n4 tk
rº } zdd l}| ¡  d S d }~X Y nX tƒ }| |_||ƒ|_||ƒ|_ d|_!d |_"d|_d|_#|j$|_%| &d¡ ||_'t(j( )¡ |_*| +¡  |j |¡ |ƒ }||_,| +¡  |S  tk
rz } zdd l}| ¡  |‚W d d }~X Y nX d S )Nr   )rŠ   )Úget_default_areaÚget_default_departmentÚget_default_position)ÚEmpPayrollProfiler¯   rC   z4update personnel_employee set reserved=0 where id=%sú")r5   rs   Fz*the_code_%(code)s_of_employee_is_not_foundrœ   )r¨   r©   rª   r*   TZ123456)-ro   rŠ   r†   r´   rµ   r¶   Zmysite.payroll.modelsr·   r   rx   r   r   rr   rG   r"   rT   r   r   Úaddr¬   r6   r:   r°   rg   ri   r5   ÚIsNewEmpr`   Úproduct_typer‚   rƒ   Ú
departmentÚpositionrN   Úverify_moderI   r­   Ú	enroll_snÚset_passwordrs   rb   ÚnowÚupdate_timern   rž   )rœ   Zterminalrs   ZemployeeofdevicerŠ   r´   rµ   r¶   r·   r±   Úsqlrz   r²   r   r‚   Zemp_payrollr'   r'   r(   ÚobjByPIN  s|    




zEmployee.objByPINc          
   C   sÚ   | dks| dk rd S t  dtj| f ¡}|rR|jrN|jdkrNd|  }t|ƒ n|S ytjj| d}W n2 tk
r– } zt	d| |ƒ d }W d d }~X Y nX |rÖd|_
t  dtj|jf |¡ t  d	tj|j|jf |¡ |S )
N)r   r¯   Nr   z%s_iclock_emp_%srC   z4update personnel_employee set reserved=0 where id=%s)rT   z
objByID===Fz%s_iclock_emp_PIN_%s_company_%s)r   rx   r   rr   rG   r   r:   rd   r6   Úprintrº   r¬   rT   r5   rs   )rT   r²   rÃ   Úurz   r'   r'   r(   ÚobjByIDÕ  s$    
zEmployee.objByIDc          
   C   sº   |sRy| j  ¡  |  ¡  W n2 tk
rL } ztdd|i ƒ‚W d d }~X Y nX dS y,| t ¡r|| j  ¡  | j  |¡ |  ¡  W n2 tk
r° } ztdd|i ƒ‚W d d }~X Y nX dS d S )Nz#clear_workflowrole_fail:%(message)srS   Tz&add_workflowrole_exception:%(message)s)r   Úclearrn   r6   r`   rl   r¹   )r7   ZWorkflowRolesrz   r'   r'   r(   Úadjust_workflowroleì  s    
"

"zEmployee.adjust_workflowrolec               @   s2   e Zd ZdgZejZedƒZeZ	dZ
dddgZdS )zEmployee.Metar5   Zmodel_employee))r5   r/   r/   r¼   N)Ú__name__Ú
__module__Ú__qualname__Zorderingr   Z	APP_LABELÚ	app_labelr`   rB   Zverbose_name_pluralZunique_togetherZindex_togetherr'   r'   r'   r(   ÚMetaÿ  s   rÎ   c             C   sf   |d rb|d }t |ƒ d¡}ddddg}y| t |d  ¡ ƒ¡ W n tk
r`   t tdƒƒS X d	S )
NÚphotoÚ.ZjpgZgifZpngZbmprC   Zinvalid_picture_formatT)r"   r_   ÚindexÚlowerr6   r`   )r7   Zcleaned_dataÚfZf_formatÚformat_listr'   r'   r(   Úset_employee_photo  s    zEmployee.set_employee_photoc          
   C   s‚  ddl m} ddlm} |jd r~dd l}|j dd¡rF|jd }n
|jd }| |¡}|jj	| j
d}|rv| ¡  yÜxÖ|D ]°}d|kr~ytjj|d d}	|	j}
W n tk
r¼   w~Y nX |ƒ }|d	 rà|d	 d
krà|d	 nd |_|d  ¡ dkrúdnd|_|
|_|d r|d nd|_| j
|_| ¡  q~W ||| dddd tddiƒS W n*   ||| ddt| ƒd tdddœƒS d S )Nr   )rJ   )Úlog_operationÚcertificationÚcertification_listr*   )Úemployee_id)Z	cert_nameÚ	expire_onú-Úemail_alertZYESTFÚbeforeZset_certificationZdonerž   )Zmodelrœ   rC   ZfailedéÿÿÿÿÚerror)rœ   Úmsg)Úmysite.personnel.modelsrJ   Úmysite.admin.utilsrÖ   ZPOSTÚjsonrx   Úloadsrd   rg   rT   rq   r   rf   r6   rÚ   ÚupperrÜ   Úcertification_idrÝ   rÙ   rn   r   r"   )r7   ZrequestrJ   rÖ   rã   Zcertification_datarØ   Zemployee_objZcertification_list_ir×   ræ   Zcertification_objr'   r'   r(   Úsave_certification  sH    



zEmployee.save_certificationc             C   s   dS )zE
        Return a boolean of whether the user was anonymous.
        Fr'   )r7   r'   r'   r(   Úis_anonymous<  s    zEmployee.is_anonymousc             C   s   | j r| j p| jp| jpdS )Nr*   )rN   r‰   Únickname)r7   r'   r'   r(   Úget_nameC  s    zEmployee.get_namec             C   s   dS )NTr'   )r7   r'   r'   r(   Úis_authenticatedF  s    zEmployee.is_authenticatedc             C   s   dS )NTr'   )r7   ZpermÚobjr'   r'   r(   Úhas_permJ  s    zEmployee.has_permc             C   s   dS )NTr'   )r7   Úmoduler'   r'   r(   Úhas_module_permsM  s    zEmployee.has_module_permsc             C   s   dS )NTr'   )r7   rÍ   Z
model_namer'   r'   r(   Úhas_model_op_permsP  s    zEmployee.has_model_op_permsc                s&   ddl m} ‡ fdd„}||ˆ j|ƒS )z~
        Return a boolean of whether the raw_password was correct. Handles
        hashing formats behind the scenes.
        r   )Úcheck_passwordc                s"   ˆ   | ¡ d ˆ _ˆ jdgd d S )NÚself_password)ru   )rÀ   Ú	_passwordrn   )Úraw_password)r7   r'   r(   ÚsetterZ  s    
z'Employee.check_password.<locals>.setter)Údjango.contrib.auth.hashersrñ   rò   )r7   rô   rñ   rõ   r'   )r7   r(   rñ   S  s    zEmployee.check_passwordc             C   s    ddl m} ||ƒ| _|| _d S )Nr   )Úmake_password)rö   r÷   rò   ró   )r7   rô   r÷   r'   r'   r(   rÀ   b  s    
zEmployee.set_passwordc             C   s
   || _ d S )N)Údevice_password)r7   rô   r'   r'   r(   Úset_devicepasswordg  s    zEmployee.set_devicepasswordc             C   s   | j S )N)r5   )r7   r'   r'   r(   Úget_usernamej  s    zEmployee.get_username)FFNN)NF)N)N)NNN)N)­rÊ   rË   rÌ   r
   ZalphanumericZnumericZmobile_numberZoffice_numberZonlyCharactersr   Z	CharFieldr)   rT   r`   r   ZMAX_EMP_PINr5   ZMAX_EMP_FIRST_NAMErN   ZMAX_EMP_LAST_NAMEr‰   ZMAX_EMP_NICK_NAMEré   ZMAX_EMP_PASSPORTZpassportZ!MAX_EMP_DRIVER_LICENSE_AUTOMOBILEZdriver_license_automobileZ!MAX_EMP_DRIVER_LICENSE_MOTORCYCLEZdriver_license_motorcycler   r   ZCASCADEr¼   r   r   r½   r   r   r3   ZenableBooleansZSmallIntegerFieldZenable_outdoor_managementZ
ImageFieldr9   r2   rÏ   r   r   r   r   ZPasswordFieldÚEMP_DEFAULT_PASSWORDZMAX_EMP_PWDrò   ZMAX_EMP_DEV_PWDrø   ZIntegerFieldZPRIV_CHOICESZdev_privilegeZMAX_EMP_CARD_NOrW   ZMAX_EMP_ACC_GROUPZ	acc_groupZMAX_EMP_ACC_TIMEZONEZacc_timezoneZMAX_EMP_GENDERZCHOICE_GENDERZgenderZ	DateFieldZbirthdayZMAX_EMP_ADDRESSZaddressZMAX_EMP_POSTCODEZpostcodeZMAX_EMP_OFFICE_TELZ
office_telZMAX_EMP_CONTACT_TELZcontact_telZMAX_EMP_MOBILErX   ZMAX_EMP_NATIONALZnationalZMAX_EMP_RELIGIONZreligionZMAX_EMP_TITLEÚtitleZMAX_EMP_ENROLL_SNr¿   ZMAX_EMP_SSNrU   ZDateTimeFieldr   rÁ   rÂ   ra   ZVERIFICATIONr¾   ZMAX_EMP_CITYZcityZBooleanFieldZBOOLEANSZis_adminZEMPTYPE_CHOICESZemp_typeZ
enable_attZenable_payrollZenable_overtimeZenable_holidayZenable_whatsappZwhatsapp_exceptionZwhatsapp_punchrF   rG   r   r   rH   rI   ZManyToManyFieldr   r×   Z
APP_STATUSrZ   ZAPP_PUNCH_STATUSZapp_punch_statusZAPP_ROLEZapp_roleZ
EmailFieldZMAX_EMP_EMAILrY   Z
enable_smsZsms_exceptionZ	sms_punchZ
last_loginZ	is_activeZis_staffZis_employeeZotpZverified_employeerO   rP   rn   r„   r‡   rˆ   ÚpropertyrM   rq   r   rŒ   r—   r   rš   r¤   rŽ   Ústaticmethodr³   rÄ   rÇ   rÉ   rÎ   rÕ   rç   rè   rê   rë   rí   rï   rð   rñ   rÀ   rù   rú   Ú__classcell__r'   r'   )rv   r(   r:   @   s>  

















C

G)
r:   )Úsenderc             K   s.   ddl m} t |jtj|j|jf |¡ d S )Nr   )rŠ   )	ro   rŠ   r   r¬   r   r   rr   r5   rs   )r   ÚinstanceÚrawr’   rŠ   r'   r'   r(   Úrefresh_cache_datan  s    r  c             K   s&   t |ƒ t|ƒ t| |||f|Ž d S )N)Úflush_cache_dataÚhandle_uploaded_photoÚcreate_or_update_user)r   r  Úcreatedr  r’   r'   r'   r(   Úpost_save_receiverv  s    r  c             K   sr   ddl m} ddlm} |jrjtjj|jd 	¡ }|rdtjj
|jd}|jj|dd ¡  | ¡  qnd S nd S d S )Nr   )Ú
Membership)r   )rT   )r‹   Zrole)Zmysite.base.modelsr	  Údjango.confr   r   r   rd   rg   rT   rh   rx   rq   )r   r  r’   r	  r   Z
user_existr‹   r'   r'   r(   Údelete_user}  s    
r  c          
   K   sæ   ddl m} ddlm}m} |ƒ }|d |kr2dS yŒddlm}m} |jr¼|j	j
|jd}	|	 ¡ rfdS tj ¡ }
|j}|
jdd	d
}|j}	|j	jd|jdd}||||	|jd}| ¡  dS W n" tk
rà } zW d d }~X Y nX d S )Nr   )Úget_software_type)ÚEASYWDMSÚEASYTIMEPROZsoftware_typeT)ÚAttScheduleÚAttShift)rÙ   r©   é   )ZmonthZdayzGeneral Shift)Úaliasrs   r®   )Z
start_dateZend_daterÙ   Zshift_id)râ   r  Zmysite.admin.constr  r  Zmysite.att.modelsr  r  rT   rd   rg   rh   rb   rÁ   Zcreate_timeÚreplacerx   rs   rn   r6   )r   r  r’   r  r  r  Z	type_dictr  r  rÙ   Zto_dayÚstartÚendZAttShift_idÚdatarz   r'   r'   r(   ÚaddautoscheduleŽ  s2     

r  c       	      K   sn   ddl m} |sd S |dkr*| ||¡ n@|dkrjtj ¡ |_d|_| ¡  t|j	ƒ}d| }t
 |d¡ d S )Nr   )Úremove_employee_form_areaZpost_removeZpost_addr*   Zemp_change_flag_rC   )Zmysite.personnel.tasksr  rp   rb   rÁ   rÂ   r¿   rn   r"   rs   r   r¬   )	r   r  ÚactionÚreverseZpk_setr’   r  rs   Zemp_change_keyr'   r'   r(   Úemployee_area_migrate­  s    
r  c             C   sF   ddl m} t |jtj| jf | ¡ t |j	tj| j
| jf ¡ d S )Nr   )rŠ   )ro   rŠ   r   r¬   ZTERMINAL_EMPLOYEE_ID_CACHE_KEYr   rr   rf   rq   r   r5   rs   )r  rŠ   r'   r'   r(   r  ½  s    r  c             C   sŠ   dd l }ddlm}m} | jr†tj ¡ | _d| _| jj	}|j	 
|¡sHd S |j	 |¡dkrf|||dƒ nd S |j	 |¡dkr†|||dƒ d S )Nr   )Úresize_by_pixelÚresize_by_sizer*   i @  i , é   )r-   Zmysite.tools.image_utilsr  r  rÏ   rb   rÁ   rÂ   r¿   r    rh   Úgetsize)r  r-   r  r  Z
photo_pathr'   r'   r(   r  Ä  s    r  c          
   K   sú   ddl m} ddlm} ddlm} |jrò|rŒ|ƒ }|jj|j	d d… |j	|j
|j|j|j	d d… |j|jd}	|j|	_||	dƒ |	 ¡  qötjj|jd ¡ }
|
rìtjj|jd}	|jrÊ|jd d… |	_|j	|	_	|j|	_|j
|	_|	 ¡  qöd S nd S d S )Nr   )rQ   )Úcreate_admin_membership)r   é   )ZusernamerY   ÚpasswordrT   rN   ré   rX   Zcurrent_company)rT   )r\   rQ   Zmysite.accounts.urlsr   r
  r   r   rd   Zcloud_create_userrY   rò   rT   rN   rX   rs   r5   Zemp_pinrn   r   rg   rh   rx   ré   r"  )r   r  r  r  r’   rQ   r   r   Z
class_userZuser_objZuser_obj_existsr'   r'   r(   r  Ö  s:    



r  )Grb   r!   Zsixr
  r   Zdjango.core.cacher   Z	django.dbr   Zdjango.db.modelsr   Zdjango.dispatch.dispatcherr   Zdjango.httpr   Zdjango.utilsr   Zdjango.utils.translationr	   r`   Zdjango.core.validatorsr
   r   Zmysite.admin.exceptionsr   Zmysite.admin.modelsr   Z!mysite.admin.abstract_cloud_modelr   ro   r   Zmysite.personnel.fieldsr   r   r   r   r   rá   r   r   r   r   r   rŸ   r   Zmysite.workflow.modelsr   Zmysite.adminr   Zmysite.accounts.modelsr   r%   r&   rû   r)   r9   r:   Zpre_saver  Z	post_saver  Zpost_deleter  r  Zm2m_changedr   rK   r  r  r  r  r'   r'   r'   r(   Ú<module>   sZ   
    1