B
    b$                 @   s>  d dl Z d dlZ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mZ d dlmZmZmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ G dd deZ,e-eG dd deZ.dS )    N)	ModelForm)forms)ModelChoiceField)settings)admin)ZKModelAdmin)Reimbursement)gettext_lazy)
Department)AllowanceTypePurposeType)AddReimbursementActionReimbursementApproveReimbursementRevoke)Employee)fieldswidgets)db_const)AdminRuntimeWarning)data_pre_check)get_current_company_idc                   s  e Zd ZejedddZejedddZe	e
j edddZe	ej edddZejed	d
Zejedd
ZejeddeddZejedejddZejej edejddZejddZejddZ ejddZ! fddZ" fddZ#  Z$S )ReimbursementChangeFormZleave_field_employeeT)labelZdisabledZReimbursement_field_amount)r   requiredZpayroll_model_allowancetype)querysetr   r   Zpayroll_model_purposetypeZReimbursement_field_start_date)r   ZReimbursement_field_end_dateZReimbursement_field_file-reimbursement_receipt_file_format_constraints)r   r   Z	help_textZReimbursement_field_remarkF)r   Z
max_lengthr   Z!payroll_model_additional_employee)r   r   widgetr   )r   c                s   t t|  }t| |S )N)superr   cleanr   )selfZcleand_data)	__class__ AG:\easytimepro\master/mysite/payroll\admin\reimbursement_admin.pyr   -   s    zReimbursementChangeForm.cleanc                s   t t| j|| t }tjj|d }|r>dd |D }ng }|| jd _	t
jj|d }|rtdd |D }ng }|| jd _	d| jd jjd	< | jjrt| jj| jd _| jj| jd
 _| jj| jd _d S )N)Zcompanyc             S   s   g | ]}|d  |d fqS )idZallowance_namer!   ).0ptr!   r!   r"   
<listcomp>7   s    z4ReimbursementChangeForm.__init__.<locals>.<listcomp>allowance_typec             S   s   g | ]}|d  |d fqS )r#   Zpurpose_namer!   )r$   r%   r!   r!   r"   r&   =   s    purpose_typeTempreadonlyform_idrmb_file)r   r   __init__r   r   objectsfiltervaluesr   choicesr   r   ZattrsinstanceZpkstrZemployee_idinitialr#   r,   )r   argskwargsZ
company_idr'   r(   )r    r!   r"   r-   2   s"    z ReimbursementChangeForm.__init__)%__name__
__module____qualname__r   Z	CharField_r)   Z
FloatField
rmb_amountr   r   r.   allr'   r   r(   ZDateTimeFieldrmb_start_datermb_end_dateZ	FileFieldr,   Z	TextFieldcZMAX_LENTH_REMARK
rmb_remarkdjango_formsZModelMultipleChoiceFieldr   r   ZEmployeeSelectMultipleadditional_employeer+   delete_filesold_delete_filesr   r-   __classcell__r!   r!   )r    r"   r      s$   
r   c                   sB   e Zd ZdZdZeeegZe	Z
 fddZdd Zdd Z  ZS )	ReimbursementAdmin)r#   Zemp_codeZ
first_name	last_nameZ
departmentr'   r(   r;   r,   r=   r>   r@   audit_statusZget_audit_reasonZ
audit_timeZlast_approver
apply_time)Zemployee__emp_codeZemployee__first_nameZemployee__last_namer;   Z(workflow_abstractException__audit_statusc                sv   |j j}|j j}tt| |j|j jd}|j jsr|	 rL|j|
 d}|	 rrtjj|
 d}|j|d}|S )N)Zemployee__company_id)Zemployee__department__in)Zarea__in)Zemployee__in)userZget_auth_deptZget_auth_arear   rF   get_querysetr/   Zcurrent_companyZis_superuserexistsr<   r   r.   )r   requestZ	auth_deptZ	auth_areaZqsZemp_list_by_area)r    r!   r"   rK   S   s    zReimbursementAdmin.get_querysetc             C   s   dS )NFr!   )r   rM   r!   r!   r"   has_add_permissionb   s    z%ReimbursementAdmin.has_add_permissionc          
      s  |j d}tjj|d}tjj|jd}|d jd}|d j	j
dkrVttd|}|jd}	yht|j dd }
xNtt|
D ]>}d	|
| kr|
| d	d
 }n|
| dd
 }||
|< qW W n   g }
Y nX tj}t|
dkrt|t|
kr t|	dkr ttddt|d jd d |d j|j}xN|
D ]F}|| d | }yt| W n   Y nX ||krN|| qNW yt|j dd }W n   g }Y nX dddddddg}t|	dkrdt|d jd d |d j|j}|| }tj|s*t| x|	D ]}|j}|dd}||krRn|d}|d
 }|  }||krttd|!  |"| d d# fddtdD }|d#| }|$ }|"| t%|d | d}|&| W d Q R X q0W t|dkrttd|d |_'t(|j d|_)t*jj|j dd}|d |_+t,jj|j d d}|d |_-|j d!|_.|j d"|_/|j d#|_0d#||_|1  d S )$Nr)   )r#   r   /   Zconfirm_not_modify_auditedr,   rD   \Zreceipt_file_validationz{0}/{1}/{2}
   rC   ZjpgZjpegZpngZbmpZpdfZdocxZxlsx  .r   Z>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890c             3   s   | ]}t  V  qd S )N)randomZchoice)r$   x)charsr!   r"   	<genexpr>   s    z0ReimbursementAdmin.save_model.<locals>.<genexpr>wbrB   r(   r'   r=   r>   r;   )2ZPOSTgetr   r.   r/   r   r#   r,   splitZworkflow_abstractExceptionrH   r   r:   ZFILESZgetlistjsonloadsrangelenrsplitr   ZREIMBURSEMENT_FILE_ROOTformatr3   rI   osremovepathrL   makedirsnamereplacelowerpopappendjoinreadopenwriteZemployeedumpsrB   r   r(   r   r'   r=   r>   r;   Zsave)r   rM   objformZchanger)   Zreimbursementold_fileZfiles_namesZ	rmb_filesZold_deleted_filesrX   Zold_deleted_newfileZ	file_rootZ	path_infoZdel_fileZ	emp_filesZdeleted_filesZfiles_format	file_pathZ	new_files	file_nameZ	name_listZf_formatZ	randomstrZ	file_datafr(   r'   r!   )rY   r"   
save_modele   s    
 (


(









zReimbursementAdmin.save_model)r7   r8   r9   Zlist_displayZlist_filterr   r   r   Zactionsr   rs   rK   rN   rx   rE   r!   r!   )r    r"   rF   H   s   
rF   )/rd   r^   shutiltimerW   Zdjango.formsr   Zmysite.adminr   r   ZdjangorA   Zdjango.confr   mysiter   Zmysite.admin.kernelr   Zmysite.payroll.modelsr   Zdjango.utils.translationr	   r:   Zmysite.personnel.modelsr
   r   r   Zmysite.payroll.formsr   r   r   r   Zmysite.personnelr   r   Zmysite.payrollr   r?   Zmysite.admin.exceptionsr   Z(mysite.payroll.forms.reimbursement_formsr   Zmysite.att.utilsr   r   registerrF   r!   r!   r!   r"   <module>   s2   -