B
    gcv                 @   s6  d dl Z d dlZd dlZd dlZd dlmZ eedrRejd  dkrRd dlm	Z
 n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 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/m0Z0 d dl1m"Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dl?mAZA d dlBmCZC d dlDmEZEmFZF d dlGmHZH d d l$mIZI d d!lJmKZKmLZL d dlmZ d dlMZMG d"d# d#eZNG d$d% d%e+ZOePe-eN dS )&    N)settingsDJANGO_VERSION   )re_path)url)cache)CountQ)gettext_lazy)Http404)ActionTuple)STATUS_VALID)ZKModelAdmin)zk_site)fields)widgets)forms)actions)	APP_LABEL)
ImportData)Employee)faceRegsaveFacePhoto)FPListFilterFaceListFilterFVListFilterPalmListFilterVlFaceListFilter)Resign)AdminRuntimeWarning)get_software_type_without_load)EASYWDMS)INTELLIGENTTIME)time_it)flush_cache_datahandle_uploaded_photo)Transaction)	cache_key)loop_bulk_create
store_pathc                   s  e Zd ZdZdZdZe d ekr6edddZ	ee	 ZdZ
e d ekr\edd	dZe
e Z
eeeefZd
ddiiZdZdZdZdZdZddddddZejZejZejdej iej!dej"iej#dej$iej%dej&iej'de(j)ie*j+de,j-iiZ.g Z/e d ekrVe0e1de2j3e2j4fe0e1de2j5e2j6e2j7e2j8e2j9fe0e1de2j:e2j;e2j<ffZ=npe0e1de2j3e2j>e2j4fe0e1de2j5e2j6e2j7e2j8e2j?e2j@e2j9fe0e1de2jAe2jBfe0e1de2j:e2j;e2j<ffZ=dX fdd	ZCdY fd d!	ZDd"d# ZEd$d% ZFe1d&eF_Gd'd( ZHe1d)eH_Gd*d+ ZIe1d,eI_Gd-d. ZJe1d/eJ_Gd0d1 ZKe1d2eK_Gd3d4 ZLe1d5eL_Gd6d7 ZMe1d8eM_Gd9d: ZNe1d;eN_Gd<d= ZOe1d>eO_Gd?d@ ZPe1dAeP_GdBdC ZQe1dDeQ_GdEdF ZRe1dGeR_GdHdI ZSe1dJeS_GdKdL ZTe1dMeT_GdNdO ZUeVdPdQ ZWdRdS ZXdTdU ZYdVdW ZZ  Z[S )ZEmployeeAdminz"
    Admin Class for Employee
    F)idemp_code
first_namenickname	last_namecard_no	hire_date
department	dept_codepositionposition_codegenderemaildev_privilegeemployee_areaemployee_area_codefingerprintfacepalmvl_faceupdate_timeemployee_flow_rolelocationapp_status_iconapp_punch_status_iconenable_outdoor_management_iconwhatsapp_status_iconsms_status_iconsoftware_typer         )r,   r-   Zdepartment__dept_codeZdepartment__dept_nameZposition__position_codeZarea__area_codeZarea__area_namer7   mobiler1   r0   r8   r6   Zflow_role__role_nameZlocation__location_code
app_statusapp_punch_status
enable_smsenable_whatsappenable_outdoor_management   __all__widthZ150)r,   r-   r/   r0   r6   )r,    )r.   r/   r3   r1   r4   rA   r6   r7   rE   rF   r0   r:   )Zemployee_coder-   r2   r4   r0   rK   rL   rO   rN   rM   )rB   rC   rD   rE   rF   ZwidgetZop_menu_group_importZop_menu_group_adjustmentZop_menu_group_moreZop_menu_group_appNc                s6   i }|dkr| j |d< || tt| j||f|S )z7
        Use special form during user creation
        Nform)add_formupdatesuperr*   get_form)selfrequestobjkwargsdefaults)	__class__ >G:\easytimepro\master/mysite/personnel\admin\employee_admin.pyrX      s
    

zEmployeeAdmin.get_formc                sH   ddl m} | }d|d i}|d kr*i }|| tt| |||S )Nr   )get_software_typesoftware_title)mysite.admin.utilsra   rV   rW   r*   add_view)rY   rZ   form_urlextra_contextra   software_infor]   )r^   r_   r`   rd      s    
zEmployeeAdmin.add_viewc             C   sb   ddl m} ddlm} |jd|jdd }|rX| }d|d i}| j||d|dS t d S )Nr   )ra   )EASYTIMEPROZobj_idrb   rS   )re   rf   )	rc   ra   mysite.admin.constrh   POSTgetZGETZ_changeform_viewr   )rY   rZ   ra   rh   Z_idrg   r]   r_   r_   r`   	edit_view   s    zEmployeeAdmin.edit_viewc             C   s:   ddl m} ddlm} |jdd|ji  }|d||jS )Nr   )r   )format_htmlzimg/icons/enable%(state)s.gifstatez<img src="{}" alt="{}" />)django.confr   django.utils.htmlrm   	MEDIA_URLrK   )rY   r[   r   rm   icon_urlr_   r_   r`   rB      s    zEmployeeAdmin.app_status_iconZemp_field_appStatusc             C   s:   ddl m} ddlm} |jdd|ji  }|d||jS )Nr   )r   )rm   zimg/icons/enable%(state)s.gifrn   z<img src="{}" alt="{}" />)ro   r   rp   rm   rq   rL   )rY   r[   r   rm   rr   r_   r_   r`   rC      s    z#EmployeeAdmin.app_punch_status_iconZemp_field_appPunchStatusc             C   s:   ddl m} ddlm} |jdd|ji  }|d||jS )Nr   )r   )rm   zimg/icons/enable%(state)s.gifrn   z<img src="{}" alt="{}" />)ro   r   rp   rm   rq   rO   )rY   r[   r   rm   rr   r_   r_   r`   rD      s    z,EmployeeAdmin.enable_outdoor_management_iconZ!emp_field_enableOutdoormanagementc             C   sD   ddl m} ddlm} |jr"dnd}|jdd|i  }|d||S )Nr   )r   )rm   rI   zimg/icons/enable%(state)s.gifrn   z<img src="{}" alt="{}" />)ro   r   rp   rm   rN   rq   )rY   r[   r   rm   Zwhats_statusrr   r_   r_   r`   rE      s
    z"EmployeeAdmin.whatsapp_status_iconZemp_whatsapp_statusc             C   sD   ddl m} ddlm} |jr"dnd}|jdd|i  }|d||S )Nr   )r   )rm   rI   zimg/icons/enable%(state)s.gifrn   z<img src="{}" alt="{}" />)ro   r   rp   rm   rM   rq   )rY   r[   r   rm   Z
sms_statusrr   r_   r_   r`   rF      s
    zEmployeeAdmin.sms_status_iconZemp_sms_statusc             C   s>   |j jdddtd}|r:ddd |D }|S dS )	NrI   )bio_type	major_verr+   ,c             S   s   g | ]}d | qS )z	Ver %s:%sr_   ).0bior_   r_   r`   
<listcomp>   s    z-EmployeeAdmin.fingerprint.<locals>.<listcomp>-)biodata_setfiltervalues_listannotater   join)rY   r[   biosoutputr_   r_   r`   r;      s
    zEmployeeAdmin.fingerprintZemp_field_fingerprintc             C   s>   |j jdddtd}|r:ddd |D }|S dS )	Nr   )rs   rt   r+   ru   c             S   s   g | ]}d | qS )z	Ver %s:%sr_   )rv   rw   r_   r_   r`   rx     s    z&EmployeeAdmin.face.<locals>.<listcomp>ry   )rz   r{   r|   r}   r   r~   )rY   r[   r   r   r_   r_   r`   r<     s
    zEmployeeAdmin.faceZemp_field_facec             C   s>   |j jdddtd}|r:ddd |D }|S dS )	N   )rs   rt   r+   ru   c             S   s   g | ]}d | qS )z	Ver %s:%sr_   )rv   rw   r_   r_   r`   rx     s    z&EmployeeAdmin.palm.<locals>.<listcomp>ry   )rz   r{   r|   r}   r   r~   )rY   r[   r   r   r_   r_   r`   r=     s
    zEmployeeAdmin.palmZemp_field_palmc             C   s   |j jdd }|sR|jjdddtd}|rddd	 |D }|S nntj	t
d
dj|jj| d}tj	|r|S |jjdddtd}|rddd	 |D }|S |pdS )N)rI      )Zapproval_state__in	   )rs   rt   r+   ru   c             S   s   g | ]}d | qS )z	Ver %s:%sr_   )rv   rw   r_   r_   r`   rx     s    z)EmployeeAdmin.vl_face.<locals>.<listcomp>Zbiophotoz{company_id}/{pin}.jpg)
company_idpinc             S   s   g | ]}d | qS )z	Ver %s:%sr_   )rv   rw   r_   r_   r`   rx   #  s    ry   )Zbiophoto_setr{   countrz   r|   r}   r   r~   ospathr)   formatZcompanyZhex_idr   isfile)rY   r[   r   r   Zfp_multi_companyr_   r_   r`   r>     s    $zEmployeeAdmin.vl_faceZemp_field_vlFacec             C   s&   |j  }|sdS ddd |D S )NrS   ru   c             S   s   g | ]
}|j qS r_   )	area_name)rv   ir_   r_   r`   rx   /  s    z/EmployeeAdmin.employee_area.<locals>.<listcomp>)areaallr~   )rY   r[   areasr_   r_   r`   r9   +  s    
zEmployeeAdmin.employee_areaZemp_field_areac             C   s   d dd |j D S )Nru   c             S   s   g | ]
}|j qS r_   )	area_code)rv   r   r_   r_   r`   rx   4  s    z4EmployeeAdmin.employee_area_code.<locals>.<listcomp>)r~   r   r   )rY   r[   r_   r_   r`   r:   3  s    z EmployeeAdmin.employee_area_codearea_field_codec             C   s&   |j  }|sdS ddd |D S )NrS   ru   c             S   s   g | ]
}|j qS r_   )Z	role_name)rv   r   r_   r_   r`   rx   <  s    z4EmployeeAdmin.employee_flow_role.<locals>.<listcomp>)Z	flow_roler   r~   )rY   r[   Zrolesr_   r_   r`   r@   8  s    
z EmployeeAdmin.employee_flow_roleZemp_field_role_namec             C   s   |j jS )N)r2   r3   )rY   r[   r_   r_   r`   r3   @  s    zEmployeeAdmin.dept_codedepartment_field_codec             C   s   |j jS )N)r4   r5   )rY   r[   r_   r_   r`   r5   E  s    zEmployeeAdmin.position_codeposition_field_codec             C   s(   t dtdt dt dtdt dg}|S )Nz
^facereg/$z
%s_facereg)viewnamez^saveFacePhoto/z%s_savePhoto)r   r   r   r   )rY   Zurlpatternsr_   r_   r`   get_addition_urlsJ  s    zEmployeeAdmin.get_addition_urlsc             C   sF   t || jj| jjd}|  |j}|rBddlm} |d|d S )N)req	app_label
model_namer   )ActionHandleError;)	ImportEmployeeDataZoptsr   r   Zexe_import_data
error_infomysite.admin.actionr   r~   )rY   rZ   Z
obj_importZ	ret_errorr   r_   r_   r`   
dataimportQ  s    zEmployeeAdmin.dataimportc             C   s   ddl m} tjj|jjd}|ddd}|jj	s|jj
 }|jj }|jj }|rl|j|d}|r|j|d }|r|j|d	}|ttd
td d
B  }|S )Nr   )
Department)r   r2   r4   r   )Zdepartment__in)Zarea__in)Zposition__in)status)Z(mysite.personnel.models.model_departmentr   r   objectsr{   usercurrent_companyZselect_relatedZprefetch_relatedZis_superuserZget_auth_deptr   Zget_auth_areaZget_auth_posZdistinctr	   r   )rY   rZ   r   ZqsZ	auth_deptZ	auth_areaZauth_posr_   r_   r`   get_queryset[  s    zEmployeeAdmin.get_querysetc             C   s*   |j dd}|s&|jdr&|| |S )z
        Given a ModelForm return an unsaved instance. ``change`` is True if
        the object is being changed, and False if it's being added.
        F)ZcommitZcertification)saverj   rk   Zsave_certification)rY   rZ   rT   Zchangeer_   r_   r`   	save_formn  s    
zEmployeeAdmin.save_formc             C   sZ   ddl m} |jdd}|jdd}|dks8|dkrV|jdd }|sV|tdd S )	Nr   )r   rN   rS   rM   TruerJ   zMobile no. does not exist.)mysite.admin.exceptionsr   datark   _)rY   Z
model_formr   rN   rM   rJ   r_   r_   r`   check_domain_rulesx  s    z EmployeeAdmin.check_domain_rules)N)rS   N)\__name__
__module____qualname____doc__Zshow_full_result_countZlist_displayr    r!   sliceZWDMS_LIST_FIELDZlist_filterZWDMS_FILTER_FIELDr   r   r   r   Zcalculated_filterZlist_display_paramsZsort_fieldsZorderingZpk_orderingZhidden_fieldsZimport_fieldsZexport_fields_dictr   ZEmployeeFormrU   ZEmployeeChangeFormrT   r   ZDepartmentForeignKeyr   ZDepartmentRadioSelectZPositionForeignKeyZPositionRadioSelectZLocationForeignKeyZLocationRadioSelectZAreaManyToManyFieldZAreaSelectMultipleZWorkflowRoleManyToManyFieldworkflow_widgetsZWorkflowRoleMultipleWidgetadmin_fieldsZPasswordFieldadmin_widgetsZZKPasswordInputZformfield_overridesZfingers_paramsr   r   psnl_actionsZImportEmployeeZImportPhotoZAdjustDepartmentZPositionTransferZ
AdjustAreaZCopyAreaZResignationZResynchronizeDeviceZReUploadFromDeviceZDeleteBiometricTemplatesZaction_setsZImportDocumentZLocationTransferZPassProbationZ	EnableAppZ
DisableApprX   rd   rl   rB   Zshort_descriptionrC   rD   rE   rF   r;   r<   r=   r>   r9   r:   r@   r3   r5   r   r#   r   r   r   r   __classcell__r_   r_   )r^   r`   r*   3   s   

	















r*   c                   s   e Zd Zd+ fdd	Zdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z  ZS ),r   import_dataNc       	   	      s~  ddl m} |j}tj}|d|}|r0|| tt| |||| d | _	|jj
| _td| j	 tj d dtd dtd dtd	 dtd
 dtd dtd dtd g| _dtd dtd dtd g| _t | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _ d | _!d | _"d| _#d| _$g | _%g | _&g | _'dj(d|jj)|jj
d| _*d S )Nr   )activateZlanguagezemp_import_%s   z%semp_field_employeeCoder   department_field_namer   position_field_nameemp_field_cardNumberr   emp_field_firstNamez*import_check_{model_name}_{user_id}_{code}z*import_check_{model_name}_{user_id}_{name}z.progressbar_{process_type}_{user}_{company_id}Z
import_emp)Zprocess_typer   r   )+django.utils.translationr   r   r   ZLANGUAGE_CODEZget_preferencesrW   r   __init__stampr   r   r   setdatetimenowr   Zcalculate_fields_verboseZmust_fields
exist_pinsePineName	eLastNamedCodedNamepCodepNamecardr   birthdayr1   r6   r7   rJ   ssnimport_cache_check_key_by_codeimport_cache_check_key_by_nameadd_emp_payrolladd_empemp_map_arear   r+   progress_key)	rY   r   Z
input_namer   r   r   ZprofileZdefault_language_codeZlng)r^   r_   r`   r     sP    

$

zImportEmployeeData.__init__c       .      C   s  ddl m} dd tjj| jjjdddD }t	 }t	 }t
| j}x|tt
| jD ]h}| j| }|dtd	 kr|| _|dtd
 kr|| _|dtd kr|| _|dtd kr|| _|dtd kr|| _|dtd kr|| _|dtd kr|| _|dtd kr|| _|dtd kr6|| _|dtd krN|| _|dtd krf|| _|dtd kr~|| _|dtd kr|| _|dtd kr|| _|dtd krZ|| _qZW 
x t| jD 
]\}}|d7 }d }	 }
 } } } } } } } } } } }}| jd k	r6|| j }	| jd k	rL|| j }
| jd k	rb|| j }| jd k	rx|| j }| jd k	r|| j }| jd k	r|| j }| jd k	r|| j }| jd k	r|| j }| jd k	r|| j }| jd k	r|| j }| jd k	r|| j }| jd k	r(|| j }| jd k	r|| j  }|dkrNn||kr| j rtjj|dj!|	| j"d# }ntjj|d# }|r| j$%tdj&||d n
|'| n| j$%tdj&||d | jd k	r|| j }|dkrn||krn| j r.tjj|dj!|	| j"d# }ntjj|d# }|rb| j$%td j&||d! n
|'| n| j$%td"j&||d! | jd k	r|| j }tjj|	| j"d}| j s|	r|rt(td#t) d$ t*kr|s| j$%td%d&|i  |s| j$%td'd&|i  |	s<| j$%td(d&|i  nt
|	|j+krj| j$%td)||j+d*  nht
|	 , dkr| j$%d+td,d&|i td	td-f  n&t-.d.|	s| j$%td/d&|i  |r|/ s| j$%td0d&|i  |r"|/ s"| j$%td1d&|i  |
s@| j$%td2d&|i  |s^| j$%td3d&|i  |
rt
|
|j0kr| j$%td4||j0d*  |rt
||j1kr| j$%td5||j1d*  |s| j$%td6d&|i  |rt
t2||j3kr| j$%td7||j3d*  |rHt
||j4krH| j$%td8||j4d*  |r~t
t2||j5kr~| j$%td9||j5d*  |rt
||j6kr| j$%td:||j6d*  |rt
t2||j7kr| j$%td;||j7d*  |r>||kr6|| |	kr>| j$%td,d&|i d< td=j&|| d>  n|	||< |rtt
t2||j8krt| j$%td?||j8d*  |rt
t2||j9kr| j$%td@||j9d*  n,|rt-.dA|s| j$%tdBd&|i  |	rt
t2||j:k	r| j$%tdC||j:d*  | jd k		rf|	rfyt;j;<|dD}||| j< W n(   | j$%tdEd&|i  wY nX |	rt;j;<|dD}|= t;j=> k	r| j$%tdFd&|i  | jd k		r|	ryt;j;<|dD}||| j< W n(   | j$%tdGd&|i  wY nX | jrtdH}tdI}|| j }|
r<|d ? 
r<t(dJy0tdH@ }tdI@ }|| j @ || j< W n$ tAk

r } zW d d }~X Y nX || j 
r|| j ||fk
r| j$%tdK|tdHtdIdL  n6|| j |k
rdM|| j< n|| j |krdN|| j< |rtd |,dO}x|D ]} | ,dP}!d  }"}#t
|!dkrf|!d }"|!d pb|"}#nt
|!dkr||!d }"|"rt
|"|jBkr| j$%tdQ||jBd*  |#r*t
|#|jCkr*| j$%tdR||jCd*  q*W qW | j st
|dSkrtD|}tD }$dS}%x0tdt
||%D ]}&|$%||&|&|%   q&W x|$D ]@}'tjj|'dT}(|(# rL|(E })| j$%dU&|)jF|)j P qLW n8tjj|dT}*|*# r|*E })| j$%dU&|)jF|)j t
|dSkrhtD|}tD }+dS},x0tdt
||,D ]}&|+%||&|&|,   qW x|+D ]@}'tjj|'dV}-|-# r"|-E })| j$%dW&|)jF|)j P q"W n8tjj|dV}-|-# r|-E })| j$%dW&|)jF|)j dXS )YNr   )db_constc             S   s   i | ]}|d  |d qS )r   rI   r_   )rv   r   r_   r_   r`   
<dictcomp>  s    z4ImportEmployeeData.before_insert.<locals>.<dictcomp>)r   r,   r0   z%sr   r   Zemp_field_lastNamer   r   r   r   r   r   Zemp_field_birthdayZemp_field_hireDateZemp_field_genderZemp_field_mobileZemp_field_emailZemp_field_SSNrI   rS   )r7   )r,   r   z5error_data_on_row(%(index)s)_the_email_already_exists)indexr7   z3error_data_on_row(%(index)s)_the_email_is_duplicate)rJ   z6error_data_on_row(%(index)s)_the_mobile_already_exists)r   rJ   z4error_data_on_row(%(index)s)_the_mobile_is_duplicateZ*employee_with_the_same_code_already_existsrG   z/error_data_on_row(%(index)s)_the_email_is_emptyr   z0error_data_on_row(%(index)s)_the_mobile_is_emptyz7error_data_on_row(%(index)s)_the_employee_code_is_emptyzNerror_data_on_row(%(index)s)_the_length_of_employee_code_maximum_is_%(length)s)r   lengthz
%s, %s: %szerror_data_on_row(%(index)s)Z-this_field_can_not_include_space_tab_or_enterz^[a-zA-Z0-9_]*$z:error_data_on_row(%(index)s)please_enter_valid_employee_idz<error_data_on_row(%(index)s)please_enter_valid_aadhar_numberz:error_data_on_row(%(index)s)please_enter_valid_card_numberz3error_data_on_row(%(index)s)the_first_name_is_emptyz-error_data_on_row(%(index)s)the_area_is_emptyzEerror_data_on_row(%(index)s)maximum_length_of_first_name_is%(length)szDerror_data_on_row(%(index)s)maximum_length_of_last_name_is%(length)sz5error_data_on_row(%(index)s)_department_code_is_emptyzPerror_data_on_row(%(index)s)_the_length_of_department_code_maximum_is_%(length)szPerror_data_on_row(%(index)s)_the_length_of_department_name_maximum_is_%(length)szNerror_data_on_row(%(index)s)_the_length_of_position_code_maximum_is_%(length)szNerror_data_on_row(%(index)s)_the_length_of_position_name_maximum_is_%(length)szJerror_data_on_row(%(index)s)_the_length_of_card_name_maximum_is_%(length)sz, z&employeeSave_error_duplicateCard_{emp})empzGerror_data_on_row(%(index)s)_the_length_of_mobile_maximum_is_%(length)szFerror_data_on_row(%(index)s)_the_length_of_email_maximum_is_%(length)sz^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$z>error_data_on_row(%(index)s)_the_format_of_email_type_is_wrongzDerror_data_on_row(%(index)s)_the_length_of_ssn_maximum_is_%(length)sz%Y-%m-%dzGerror_data_on_row(%(index)s)format_of_birthday_should_be_in(yyyy-mm-dd)z@error_data_on_row(%(index)s)please_enter_the_valid_date_of_birthzNerror_data_on_row(%(index)s)format_of_Date_of_joining_should_be_in(yyyy-mm-dd)Zemployee_genderOption_maleZemployee_genderOption_femaleZ)please_make_sure_gender_is_case_sensitivezEerror_data_on_row(%(index)s)_the_format_should_be_%(male)s/%(female)s)r   ZmaleZfemaleMFru   :zJerror_data_on_row(%(index)s)_the_length_of_area_code_maximum_is_%(length)szJerror_data_on_row(%(index)s)_the_length_of_area_name_maximum_is_%(length)si  )Z	email__inz{} exists duplicate email {}.)Z
mobile__inz{} exists duplicate mobile {}.T)Gmysite.personnelr   r   r   r{   rZ   r   r   r|   r   lenrecordsrangeheadr   r   r   r   r   r   r   r   r   r   r   r1   r6   rJ   r7   r   	enumeratestripneed_update_old_recordZexcluder   existsr   appendr   addr   r    r"   ZMAX_EMP_PINsplitrematchisdigitZMAX_EMP_FIRST_NAMEZMAX_EMP_LAST_NAMEstrZMAX_DEPARTMENT_CODEZMAX_DEPARTMENT_NAMEZMAX_POSITION_CODEZMAX_POSITION_NAMEZMAX_EMP_CARD_NOZMAX_EMP_MOBILEZMAX_EMP_EMAILZMAX_EMP_UIDr   strptimedatetodayislowerlower	ExceptionZMAX_AREA_CODEZMAX_AREA_NAMElistfirstr,   ).rY   r   Z	card_dictZ
mobile_setZ	email_set_lenr   r   elemr   r   r   r   r   r   r   r   r   r   r1   rJ   r7   r   r6   Zcheck_emailZcheck_mobileZ
check_epinZ	_birthdayZ
_hire_dateZ
male_lowerZfemale_lowerr   a	code_nameaCodeaNameZ
email_setsZmax_email_set_sizer   Zlimited_email_setZexist_emailsr   Zexist_emailZmobile_setsZmax_mobile_set_sizeZexist_mobiler_   r_   r`   before_insert  s.   



8
























 










z ImportEmployeeData.before_insertc                s  ddl m} ddlm} dd l}t| j}|jj| j	j
jdd}tdd |D }|| _| j}t| j}i }	xt| jD ] \}
}|| j }i }t| jd || jks|r~xt|D ]}x*| j D ]\}}||kr|| |	|< qW || jkr||  | j|}| j| }|jrJ d	kr(q fd
d|jD }|rJ|d  t||js|j}| | }|||< qW |  ||	 q~W | !  d S )Nr   )r   )models)r   r,   c             S   s   g | ]}|d  qS )r   r_   )rv   r   r_   r_   r`   rx     s    z2ImportEmployeeData.data_insert.<locals>.<listcomp>rI   )rS   NNonec                s    g | ]}|d   kr|d qS )rI   r   r_   )rv   r   )	tmp_valuer_   r`   rx     s    )"mysite.personnel.modelsr   Z	django.dbr   jsonr   r   all_objectsr{   rZ   r   r   r|   r   r   r   r   r   r   r   r   r   Zcalculate_fields_indexitemsZvalid_head_indexsr   Zvalid_model_fieldschoices
isinstanceZ
ForeignKeyZattnameZget_db_valueprocess_rowoperate_add_datas)rY   r   r   r  r   Z
exist_datar   	overwriteZhead_lencalculate_dictr   r[   r   Zobj_datar   kvZf_indexZ	tmp_fieldZtvkeyvaluer_   )r   r`   data_insert  sF    





zImportEmployeeData.data_insertc             C   s$   x| j D ]}t| t| qW d S )N)r   r$   r%   )rY   r   r_   r_   r`   emp_post_save  s    z ImportEmployeeData.emp_post_savec             C   s2   x,| j D ]"}ttjtj|j|jf | qW d S )N)	r   r   r   r'   Z TERMINAL_EMPLOYEE_CODE_CACHE_KEYr   ZUNITr,   r   )rY   r   r_   r_   r`   emp_pre_save  s    zImportEmployeeData.emp_pre_savec       	      C   s   ddl m} |   t| jtdd tt	| j
 t| jtdd |   t| jd d}d}t| j}|d d	 }x^| jD ]T\}}}|r| || n|s| | |d	7 }||krd}|d	7 }t| j| qW t| jd
 t|| j d S )Nr   )EmpPayrollProfiler         r   
   P   rI   Z   )mysite.payroll.modelsr  r  r   r   r   randomZrandintr(   r   r   r  r   r   process_areaprocess_default_arear   )	rY   r  Zprogress_numZ	init_itemZarea_lenitemr[   r   r   r_   r_   r`   r  "  s.    

z$ImportEmployeeData.operate_add_datasc             C   s   |j j}| jjj}| jjj}| jj|||d}t	|d }|s|dkrX|j
j||d}n2|dkrr|j
j||d}n|dkr|j
j||d}t||d |S )	N)r   user_idcoder2   )r3   r   r4   )r5   r   r   )r   r   x   )_metar   rZ   r   r+   r   r   r   r   rk   r   r{   r   )rY   class_modelr  r   r  r   r'   r[   r_   r_   r`   get_related_datas_by_code@  s    

z,ImportEmployeeData.get_related_datas_by_codec             C   s   |j j}| jjj}| jjj}| jj|||d}t	|d }|d kr|dkr\|j
j||d}n2|dkrv|j
j||d}n|dkr|j
j||d}t||d |S )	N)r   r  r   r2   )	dept_namer   r4   )position_namer   r   )r   r   r  )r   r   rZ   r   r+   r   r   r   r   rk   r   r{   r   )rY   r!  r   r   r  r   r'   r[   r_   r_   r`   get_related_data_by_nameP  s    

z+ImportEmployeeData.get_related_data_by_namec             C   s2   |j j}| jjj}| jj|||d}t| d S )N)r   r  r  )	r   r   rZ   r   r+   r   r   r   delete)rY   r!  r  r   r  r'   r_   r_   r`   delete_relate_data_cache`  s    
z+ImportEmployeeData.delete_relate_data_cachec       
   	   C   s
  | j }d }|r| ||}n|r,| ||}|rf|d }|rd|rd|j|krd||_|  | || n|sg }xF|jj| jj	j
dD ].}y|t|j W q tk
r   Y qX qW |  |r|d d pd}	n|}	| }|	|_|pt|	|_| jj	j
|_|  |S )Nr   )r   rI   )r   r"  r%  r#  r   r'  r   r{   rZ   r   r   r   intr3   r   sortr   r   )
rY   r!  r  r   r	  objsr[   	number_idZdept_objobj_coder_   r_   r`   department_validf  s8    
z#ImportEmployeeData.department_validc       
      C   s  | j }d }|r| ||}n|r,| ||}|rf|d }|r|r|j|kr||_|  | || n|sg }x>|jj| jj	j
dD ]&}y|t|j W q   Y qX qW |  |r|d d pd}	n|}	| }|	|_|pt|	|_| jj	j
|_|  |S )Nr   )r   r(  rI   )r   r"  r%  r$  r   r'  r   r{   rZ   r   r   r   r)  r5   r*  r   r   )
rY   r!  r  r   r	  r+  r[   r,  Zposition_objr-  r_   r_   r`   position_valid  s8    
z!ImportEmployeeData.position_validc             C   s  ddl m} | j}d }|r(| ||}n|r8| ||}|rv|d }|rt|rt|j|krt||_|jdd | || n|s|jj	| j
jjdd}g }x.|D ]&}y|t|j W q   Y qX qW |  |d }	|	d }
n|}
| }|
|_|pt|
|_| j
jj|_|jdd	 |S )
Nr   )AreaT)Zforce_update)r   r   r(  rI   )Zforce_insert)Z"mysite.personnel.models.model_arear0  r   r"  r%  r   r   r'  r   r{   rZ   r   r   Zorder_byr   r)  r   r*  r   r   )rY   r  r   r0  r	  r   r[   r,  r   Zlast_area_areaidZareaidr_   r_   r`   
area_valid  s>    


zImportEmployeeData.area_validc             C   s4   |j  }|s0| dd }|g|_ d|_|  d S )N1rS   )r   r   r1  OverTimer   )rY   r   r   Zdefault_arear_   r_   r`   r    s    
z'ImportEmployeeData.process_default_areac       
      C   s   g }t d |d}xj|D ]b}|d}d  }}t|dkrR|d }|d pN|}nt|dkrf|d }| ||}	||	 qW |j| d|_|  d S )Nru   r   rI   r   rS   )	r{   r   r   r1  r   r   r   r3  r   )
rY   r   r   Zdb_areasr   r   r   r   r   Zdb_arear_   r_   r`   r    s    

zImportEmployeeData.process_areac       $   
   C   sX  ddl m} ddlm}m} ddlm} dtd }dtd }dtd }	dtd	 }
dtd
 }dtd }||	 }||}||	d}||
d}||d}||d}|d rt
j
|d d |d< |d t
j krdtd }| j| t|| ||||d< t }t|d|d|dg}|sT|rf| ||||d< y|jj|| jjjd}d}|r|d }t|j|j|jd g}d}x.| D ]\}}t||| qW n
|f |}t|_t jd| jjj ddd |s(t
j
! |_"| j#| | j$%| n$|| r>t
j
! |_"d|_&|'  | j(|||f |j)j|d}|* s| }||_+| j,| ddl-m.} ddl/m0} ddl1m2} |j3r| } | j)j4|j5d d  |j5|j6|j7|j|j5d d  |j8|j9d!}!|j:|!_;||!d |!'  nd S W n4 t<k
rR }" zdd l=}#|#>  W d d }"~"X Y nX d S )"Nr   )r   )r   Position)r  z%sr   r   r   r   r   r   rS   r1   z%Y-%m-%dZ0date_of_joining_should_be_less_than_current_dater2   r-   r0   r8   r4   )r,   r   FTZdata_sync_started_rI      )timeout)employee)get_user_model)create_admin_membership)r      )Zusernamer7   Zpasswordr+   r-   r.   rJ   r   )?&mysite.personnel.models.model_employeer   r  r   r4  r  r  r   rk   r   r   r   r   r   r   r   r   r.  r   r/  r  r{   rZ   r   r   r-   r0   r8   r  setattrr   r   r   r   r?   r   r   r   Z	enroll_snr   r   r   r   r7  r   Zdjango.contrib.authr8  Zmysite.accounts.urlsr9  ro   r   ZCLOUD_VERSIONZcloud_create_userr7   Zself_passwordr+   rJ   r   r,   Zemp_pinr   	traceback	print_exc)$rY   Zrow_datar
  r   r   r4  r  ZePinKeyZdCodeKeyZpCodeKeyZdNameKeyZpNameKeyZareaKeyr   r   r   r   r   r   messageZ
old_recordZ
new_recordr+  r   r[   r  r  Z
payroll_qsZemp_payrollr8  r9  r   Z
class_userZuser_objr   r=  r_   r_   r`   r    s    

 





zImportEmployeeData.process_rowc             C   s   |    dS )u(   
        sqlserver 数据插入
        N)r  )rY   r_   r_   r`   sqlserver_insert5  s    z#ImportEmployeeData.sqlserver_insertc             C   s   |    dS )u$   
        mysql 数据插入
        N)r  )rY   r_   r_   r`   mysql_insert;  s    zImportEmployeeData.mysql_insertc             C   s   |    dS )u%   
        oracle 数据插入
        N)r  )rY   r_   r_   r`   oracle_insertA  s    z ImportEmployeeData.oracle_insertc             C   s   |    dS )u)   
        postgresql 数据插入
        N)r  )rY   r_   r_   r`   postgresql_insertG  s    z$ImportEmployeeData.postgresql_insertc             C   s$   t d| j  t | jdd d S )Nzemp_import_%sd   <   )r   r&  r   r   r   )rY   r_   r_   r`   after_insertM  s    zImportEmployeeData.after_insert)r   NN)r   r   r   r   r   r  r  r  r  r"  r%  r'  r.  r/  r1  r  r  r  r@  rA  rB  rC  rF  r   r_   r_   )r^   r`   r     s,   0  9%  #Sr   )Qr   r   r  r  ro   r   hasattrr   Zdjango.urlsr   r   Zdjango.conf.urlsZdjango.core.cacher   Zdjango.db.modelsr   r	   r   r
   r   Zdjango.httpr   r   r   Zmysite.admin.modelsr   Zmysite.admin.kernelr   Zmysite.admin.sitesr   Zmysite.adminr   r   Zmysite.admin.formsr   r   r   r   r   r   Zmysite.personnel.db_constr   Zmysite.personnel.import_datar   r  r   Zmysite.personnel.viewsr   r   Zmysite.workflowr   Zmysite.personnel.admin.filtersr   r   r   r   r   Z$mysite.personnel.models.model_resignr   r   r   rc   r    ri   r!   r"   Zmysite.admin.helpersr#   r;  r$   r%   Zmysite.iclock.modelsr&   r'   Zmysite.utilsr(   r)   r   r*   r   registerr_   r_   r_   r`   <module>   sd     R     T