B
    b*0                 @   s  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mZ d dl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m Z  d dl!m"Z"m#Z# G dd deZ$e%eG dd dej&Z'G dd deZ(dS )    N)Q)	ModelForm)gettext_lazy)ModelChoiceField)LeaveCategory)adminconfig)AddLeaveLeaveApproveLeaveRevokeLeaveImport)Leave)Employee)forms)ActionHandleError)
ImportData)db_const)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc                   s   e Zd ZejedddZeedej	
 dZejeddZejeddejd	Zejed
dddZejedddZ fddZG dd dZ  ZS )LeaveChangeFormZleave_field_employeeT)labelZdisabledZleave_field_leaveCategory)r   ZquerysetZstaff_leave_when)r   Zstaff_leave_leaveType)r   requiredchoicesZstaff_leave_dailyquantityg      ?)r   r   initialleave_field_applyReasonF)r   r   c                sD   t t| j|| d| jd jjd< | jjr@t| jj	| jd _
d S )NTempreadonly)superr   __init__fieldsZwidgetZattrsinstanceZpkstremployeer   )selfargskwargs)	__class__ 5G:\easytimepro\master/mysite/att\admin\leave_admin.pyr   #   s    zLeaveChangeForm.__init__c               @   s   e Zd ZeZdZdS )zLeaveChangeForm.Meta)category
start_timeapply_reasonN)__name__
__module____qualname__r   Zmodelr    r(   r(   r(   r)   Meta)   s   r0   )r-   r.   r/   r   Z	CharField_r   r   r   objectsget_querysetr*   ZDateTimeFieldr+   ZChoiceFieldr   ZLEAVE_PAYMENT_TYPEleave_payment_typeZ
FloatFielddaysZ	TextFieldr,   r   r0   __classcell__r(   r(   )r'   r)   r      s   
r   c                   sT   e Zd ZdZejd ZeZe	e
egZdZdd Zdd Z fdd	Zd
d Z  ZS )
LeaveAdmin)Zget_emp_codeZget_emp_first_nameZget_emp_last_nameZget_emp_deptZget_emp_jobr*   r+   end_timer5   r4   r,   Z
apply_timeaudit_statusZget_audit_reasonZ
audit_timeZlast_approver)r*   r+   r8   r9   r4   )z-idc             C   s   dS )NFr(   )r$   requestr(   r(   r)   has_add_permission9   s    zLeaveAdmin.has_add_permissionc             C   s2   |j }|dkrd}n|dkr"d}n|dkr.d}|S )N   zFull Day   z
First Half   zSecond Half)day_type)r$   objr5   r?   r(   r(   r)   get_day_type?   s    zLeaveAdmin.get_day_typec       	         s   |j j}|j j}|j j}|j j}tt| |j|d}|j j	s|
 r^|j| dd}|
 rtjj| d}|j|d}|
 r|j| d}tt|d}|dkr|ttd	td d	B ttd	B }|S )
N)Zemployee__company_id)Zemployee__department__inr#   )Zarea__in)Zemployee__in)Zemployee__position__in
resign_emp0)Zemployee__status)usercurrent_companyZget_auth_deptZget_auth_areaZget_auth_posr   r7   r3   filterZis_superuserexistsallZselect_relatedr   r2   r"   r   getr   r   r   )	r$   r:   
company_idZ	auth_deptZ	auth_areaZauth_posZqsZemp_list_by_arearB   )r'   r(   r)   r3   I   s&     zLeaveAdmin.get_querysetc             C   s<   t |d| jj| jjd}|  |j}|r8td|d S )Nimport_data)req
input_name	app_label
model_name;)ImportLeaveDataZoptsrN   rO   Zexe_import_data
error_infor   join)r$   r:   Z
obj_importZ	ret_errorr(   r(   r)   
dataimport`   s    zLeaveAdmin.dataimport)r-   r.   r/   Zlist_displayr   ZEMPLOYEE_LIST_FILTERZlist_filterr   Zformr	   r
   r   ZactionsZorderingr;   rA   r3   rT   r6   r(   r(   )r'   r)   r7   .   s   


r7   c                   s.   e Zd Zd	 fdd	Zdd Zdd Z  ZS )
rQ   rK   Nc                sv   t t| |||| || _|jj| _dtd dtd dtd dtd g| _d | _	d | _
d | _d | _d | _d S )Nz%semp_field_employeeCodeleave_field_startTimeleave_field_endTimeleaveCategory)r   rQ   r   r:   rD   rE   rJ   r1   Zmust_fieldsemployee_indexstart_time_indexend_time_indexcategory_indexapply_reason_index)r$   rL   rM   rN   rO   )r'   r(   r)   r   j   s    



zImportLeaveData.__init__c             C   s  ddl m} ddlm} t| j}xt| jD ]\}}|dtd krN|| _	q.|dtd krf|| _
q.|dtd kr~|| _q.|dtd kr|| _q.|dtd	 kr|| _q.|dtd
 kr.|| _q.W i }|jj| jddd}x |D ]}|d ||d  < qW xt| jD ] \}	}
|	d7 }	d } } } } }}| j	d k	rT|
| j	 }| j
d k	r|
| j
 }y|d}W n   y`t|tdkrt|dkrtj|d}n,t|dkrtj|d}ntj|d}W n$   | jtd|	  wY nX Y nX | jd k	r|
| j }y|d}W n   y`t|tdkrt|dkrjtj|d}n,t|dkrtj|d}ntj|d}W n$   | jtd|	  wY nX Y nX | jd k	r|
| j }| jd k	r|
| j }|s| jtdd|	i  n,|jj|| jd}|s<| jtd|	  |sV| jtd|	  |sp| jtd|	  ||kr| jtd|	  |r| |kr||  }n| jtd|	  n| jtd|	  | js||
| j	< ||
| j
< ||
| j< ||
| j< ||
| j< qW dS ) Nr   )r   )r   z%srU   rV   rW   rX   r   Zleave_field_approvalRemark)rJ   Zcategory_nameidr<    z%Y-%m-%d %H:%M:%Sabc   
   z%Y-%m-%dz@Data format error on number %s row, yyyy-MM-dd HH:MM:SS requiredz7error_data_on_row(%(index)s)_the_employee_code_is_emptyindex)emp_coderJ   z"Employee no exist on number %s rowz'Start time is required on number %s rowz%End time is required on number %s rowz6End time must be more than Start time on number %s rowzKLeave type no exist on number %s row, please add in software before import.z'leave type is required on number %s rowT)mysite.att.modelsr   Zmysite.personnel.modelsr   lenrecords	enumerateheadr1   rY   rZ   r[   r\   r]   remarksr2   rF   rJ   Zvalues_listlowerstrftimetypedatetimestrptimerR   append)r$   r   r   _lenihZ
leave_dictZleave_typeslrc   elemZpinstartendleavereasonrj   Z_startZ_endempsr(   r(   r)   before_insert~   s    












zImportLeaveData.before_insertc                s  t | j}t | j}i }d}xv| jD ]j}tj }|d7 }i }xt|D ]}x*| j D ]\}	}
|
|kr\|| ||	< q\W || jkrL||  | j	|}| j
| }|jrʇ fdd|jD }|r|d  |j}| | }|||< qLW | ||}tjj|| j | jd}|d |d< d|d< yLtjj|d d	t|d
 dt|d dB }|sjtf |}|  W q& tk
r } zW d d }~X Y q&X q&W d S )Nr   r<   c                s    g | ]}|d   kr|d qS )r<   r   r(   ).0e)	tmp_valuer(   r)   
<listcomp>   s    z/ImportLeaveData.insert_data.<locals>.<listcomp>)rd   rJ   r#   r=   r9   )r#   r8   )Zstart_time__gtr+   )Zend_time__lt)rf   rg   ri   rn   nowrangeZcalculate_fields_indexitemsZvalid_head_indexsrc   Zvalid_model_fieldsr   ZattnameZget_db_valueZprocess_rowr   r2   rF   rY   rJ   r   Zexcluder   Zsave	Exception)r$   rq   Z
count_headZcalculate_dictcountrr   Zrow_fields_selectrc   kvZf_indexZ	tmp_fieldZtvkeyvalueZrow_datarz   tmprx   r}   r(   )r~   r)   insert_data   sF    





zImportLeaveData.insert_data)rK   NN)r-   r.   r/   r   r{   r   r6   r(   r(   )r'   r)   rQ   i   s   brQ   ))rn   Zdjango.db.modelsr   Zdjango.formsr   Zdjango.utils.translationr   r1   r   Z%mysite.att.models.model_leavecategoryr   mysiter   r   Zmysite.att.actionsr	   r
   r   r   re   r   Z&mysite.personnel.models.model_employeer   Zmysite.adminr   Zmysite.admin.actionr   Zmysite.personnel.import_datar   Z
mysite.attr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   registerZZKModelAdminr7   rQ   r(   r(   r(   r)   <module>   s(   
: