B
    xb&                 @   s   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 d dlmZ d dlmZ G dd deZeejeddd Zeejeddd ZdS )    )models)Q)signals)receiver)timezone)	force_str)gettext_lazy)AdminRuntimeWarning)db_const)OVERTIME_TYPEAUDIT_SUCCESSREFUSECANCEL_AUDIT_SUCCESS)Employee)AbstractExceptionc                   s  e Zd ZejeedejdZej	edde
dZeedZeedZejedejd	d	d
ZejedejddZejedejd	d	d
Zejedd	d	ddZej	edd	d	ddZejeddd	d	ddZejedejd	d	ddZ fddZede_e eZ!dd Z"ede"_ fddZ# fddZ$dd Z%dd  Z&d!d" Z'd#d$ Z(d%d& Z)ed'e)_d(d) Z*ed*e*_d+d, Z+ed-e+_d.d/ Z,ed0e,_d1d2 Z-ed3e-_G d4d5 d5Z.  Z/S )6OvertimeZovertime_field_employee)verbose_nameZ	on_deleteZovertime_field_overtimeType   )defaultchoicesZovertime_field_startTimeZovertime_field_endTimeZovertime_field_applyReasonT)
max_lengthnullblankZovertime_field_applyTimeF)r   editableZovertime_field_approvalReasonZovertime_field_approvalTime)r   r   r   Zovertime_field_approvalLevelZovertime_field_approverd   )r   r   r   r   c                s   t t| j}|s| jS |S d S )N)superr   last_approverapprover)selfZlastApprover)	__class__ 9G:\easytimepro\master/mysite/att\models\model_overtime.pyget_last_approver'   s    zOvertime.get_last_approverc             C   s$   | j }| jtkr | jr| jn|}|S )N)audit_reasonaudit_statusr   Zrevoke_reason)r   r#   r    r    r!   get_audit_reason1   s    
zOvertime.get_audit_reasonc                s  ddl m} d}| j| jkr&td}nj| jjrP| jj| j krPtd| j }n@| jrt	j
j| jd}| jtkr~|jttfks|jtkrtd}t	j
j| jdt| jd	t| jd
B j| jdttdttdB }|rtd| j }|rt|tt	| j|| d S )Nr   )settings Z"leave_time_invalid_range_start_endZ!leave_time_invalid_range_hiredate)pkZovertime_approve_audit)employee)Zstart_time__gt)Zend_time__lt)r$   Zovertime_time_overlap)Zdjango.confr&   end_time
start_time_r)   Z	hire_datedater(   r   objectsgetr$   r   r   r   filterZexcluder   r	   r   save)r   argskwargsr&   messageobjtmp)r   r    r!   r1   9   s&    

$zOvertime.savec                sH   t | dr6| jj }x|D ]}|  qW | j  tt|   d S )Nworkflowinstance)hasattrr7   Znodeinstance_setalldeleter   r   )r   Zinstance_nodesZnode)r   r    r!   r:   N   s    


zOvertime.deletec             C   s   | j S )N)r+   )r   r    r    r!   get_start_dateW   s    zOvertime.get_start_datec             C   s   | j S )N)r*   )r   r    r    r!   get_end_dateZ   s    zOvertime.get_end_datec             C   s   | j S )N)overtime_type)r   r    r    r!   get_category]   s    zOvertime.get_categoryc             C   s   dd t D }|| j S )Nc             S   s   i | ]}|d  |d qS )r   r   r    ).0ir    r    r!   
<dictcomp>a   s   z-Overtime.get_sub_category.<locals>.<dictcomp>)r   r=   )r   Zovertime_typesr    r    r!   get_sub_category`   s    zOvertime.get_sub_categoryc             C   s   | j }|jS )N)r)   Zemp_code)r   empr    r    r!   get_emp_codef   s    zOvertime.get_emp_codeZemp_field_employeeCodec             C   s   | j }|jS )N)r)   Z
first_name)r   rC   r    r    r!   get_emp_first_namel   s    zOvertime.get_emp_first_nameZemp_field_firstNamec             C   s   | j }|jS )N)r)   	last_name)r   rC   r    r    r!   get_emp_last_namer   s    zOvertime.get_emp_last_nameZemp_field_lastNamec             C   s   | j }|jS )N)r)   Zposition)r   rC   r    r    r!   get_emp_jobx   s    zOvertime.get_emp_jobZemployee_field_positionc             C   s   | j }|jS )N)r)   Z
department)r   rC   r    r    r!   get_emp_dept~   s    zOvertime.get_emp_deptZemployee_field_departmentc               @   s(   e Zd ZdgZejZedZeZ	dZ
dS )zOvertime.MetaidZatt_model_overtime)r:   ZchangeviewN)__name__
__module____qualname__Zorderingr
   Z	APP_LABELZ	app_labelr,   r   Zverbose_name_pluralZdefault_permissionsr    r    r    r!   Meta   s
   rO   )0rL   rM   rN   r   Z
ForeignKeyr   r,   ZCASCADEr)   ZSmallIntegerFieldr   r=   ZDateTimeFieldr+   r*   Z	TextFieldr
   ZMAX_APPLY_REASONZapply_reasonr   Znow
apply_timeZMAX_AUDIT_REASONr#   Z
audit_timeZapproval_levelZ	CharFieldZaudit_user_idZMAX_APPROVER_NAMEr   r"   Zshort_descriptionpropertyr   r%   r1   r:   r;   r<   r>   rB   rD   rE   rG   rH   rI   rO   __classcell__r    r    )r   r!   r      sJ   

	




r   )senderc          	   K   s  | dd }|rddlm} ddlm}m}m} |j|j	}	ddl
m}
 |j}|rddlm} | |j|	|j	 |
j|d|j||j|jd n4|
j|d|j||j|jd t|d	r|j}|j}|r|r|tkr||||j|	|j	 |
j|d|j||j|j|d
 np|tkrR||||j|	|j	 |
j|d|j||j|j|d
 n2||||j|	|j	 |
j|d|j||j|j|d
 |jttgkrddlm} |j}|j}|j|jg||d |jd dS d S )Ninstancer   )ContentType)approve_by_adminreject_by_adminrevoke_by_admin)prepare_mobile_notifications)WorkflowInstanceBuilderZovertime)	applicantapproval_status_approve_user)r[   r\   Znode_approver)!auto_calculation_approved_records)request
company_idT)r/   Z"django.contrib.contenttypes.modelsrU   Zmysite.workflow.viewsrV   rW   rX   r.   Zget_for_modelrJ   Zmysite.mobile.tasksrY   rP   Z'mysite.workflow.models.workflow_builderrZ   Zbuild_workflow_instance_forr)   delayr$   r8   r]   r   r   mysite.att.tasksr^   r+   r*   employee_idr`   )signalrS   Zcreatedr3   rT   rU   rV   rW   rX   ZctrY   Zcommit_timerZ   Zapprover_auth_userZapprove_audit_statusr^   d1d2r    r    r!   save_signal_receiver   sV    




rg   c             K   sh   ddl m} |jj|jd}|r(|  |jtkrdddlm	} |j
}|j}|j|jg||d |jd d S )Nr   )AppNotification)source)r^   )r_   r`   )Z'mysite.mobile.models.model_notificationrh   r.   r0   rJ   r:   r$   r   rb   r^   r+   r*   ra   rc   r`   )rS   rT   r3   rh   Zdelete_notificationsr^   re   rf   r    r    r!   delete_employee   s    
rj   N) Z	django.dbr   Zdjango.db.modelsr   r   Zdjango.dispatch.dispatcherr   Zdjango.utilsr   Zdjango.utils.encodingr   Zdjango.utils.translationr   r,   Zmysite.admin.exceptionsr	   Z
mysite.attr
   Zmysite.att.models_choicesr   r   r   r   Z&mysite.personnel.models.model_employeer   Z&mysite.workflow.models.exception_modelr   r   Z	post_saverg   Zpost_deleterj   r    r    r    r!   <module>   s   w1