B
    ?b&                 @   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 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)gettext_lazy)TrainingCategory)AdminRuntimeWarning)db_const)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	edej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$G d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d.e,_d/d0 Z-ed1e-_G d2d3 d3Z.d4d5 Z/  Z0S )6TrainingZtraining_field_employee)verbose_nameZ	on_deleteZtraining_field_trainingCategoryZtraining_field_startTimeZtraining_field_endTimeZtraining_field_applyReasonT)
max_lengthnullblankZtraining_field_applyTimeF)defaulteditableZtraining_field_approvalRemarkZtraining_field_approvalTime)r   r   r   Ztraining_field_approvalLevelZtraining_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_training.pyget_last_approver&   s    zTraining.get_last_approverc             C   s"   | j }| jtkr| j}|r|}|S )N)audit_reasonaudit_statusr   revoke_reason)r   r    r"   r   r   r   get_audit_reason0   s    
zTraining.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_rangeZ!leave_time_invalid_range_hiredate)pkZtraining_approve_audit)employee)Zstart_time__gt)Zend_time__lt)r!   Ztraining_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   r/   :   s&    

$zTraining.savec                sH   t | dr6| jj }x|D ]}|  qW | j  tt|   d S )Nworkflowinstance)hasattrr5   Znodeinstance_setalldeleter   r   )r   Zinstance_nodesZnode)r   r   r   r8   P   s    


zTraining.deletec               @   s   e Zd ZdS )zTraining.AdminN)__name__
__module____qualname__r   r   r   r   AdminY   s   r<   c             C   s   | j S )N)r)   )r   r   r   r   get_start_date\   s    zTraining.get_start_datec             C   s   | j S )N)r(   )r   r   r   r   get_end_date_   s    zTraining.get_end_datec             C   s   | j S )N)category)r   r   r   r   get_categoryb   s    zTraining.get_categoryc             C   s   | j }|jS )N)r'   Zemp_code)r   empr   r   r   get_emp_codee   s    zTraining.get_emp_codeZemp_field_employeeCodec             C   s   | j }|jS )N)r'   Z
first_name)r   rA   r   r   r   get_emp_first_namek   s    zTraining.get_emp_first_nameZemp_field_firstNamec             C   s   | j }|jS )N)r'   	last_name)r   rA   r   r   r   get_emp_last_nameq   s    zTraining.get_emp_last_nameZemp_field_lastNamec             C   s   | j }|jS )N)r'   Zposition)r   rA   r   r   r   get_emp_jobw   s    zTraining.get_emp_jobZemployee_field_positionc             C   s   | j }|jS )N)r'   Z
department)r   rA   r   r   r   get_emp_dept}   s    zTraining.get_emp_deptZemployee_field_departmentc               @   s$   e Zd ZdgZejZedZeZ	dS )zTraining.MetaidZatt_model_trainingN)
r9   r:   r;   Zorderingr
   Z	APP_LABELZ	app_labelr*   r   Zverbose_name_pluralr   r   r   r   Meta   s   rI   c             C   s   | j jS )N)r?   Zcategory_name)r   r   r   r   get_sub_category   s    zTraining.get_sub_category)1r9   r:   r;   r   Z
ForeignKeyr   r*   ZCASCADEr'   r   r?   ZDateTimeFieldr)   r(   Z	TextFieldr
   ZMAX_APPLY_REASONZapply_reasonr   Znow
apply_timeZMAX_AUDIT_REASONr    Z
audit_timeZSmallIntegerFieldZapproval_levelZ	CharFieldZaudit_user_idZMAX_APPROVER_NAMEr   r   Zshort_descriptionpropertyr   r#   r/   r8   r<   r=   r>   r@   rB   rC   rE   rF   rG   rI   rJ   __classcell__r   r   )r   r   r      sJ   




	




r   )senderc          	   K   s  | dd }|rddlm} ddlm}m}m} ddlm}	 |j	}
|j
|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training)	applicantapproval_status_approve_user)rV   rW   Znode_approver)!auto_calculation_approved_records)request
company_idT)r-   Z"django.contrib.contenttypes.modelsrP   Zmysite.workflow.viewsrQ   rR   rS   Zmysite.mobile.tasksrT   rK   r,   Zget_for_modelrH   Z'mysite.workflow.models.workflow_builderrU   Zbuild_workflow_instance_forr'   delayr!   r6   rX   r   r   mysite.att.tasksrY   r)   r(   employee_idr[   )signalrN   Zcreatedr1   rO   rP   rQ   rR   rS   rT   Zcommit_timeZctrU   Zapprover_auth_userZapprove_audit_statusrY   d1d2r   r   r   save_signal_receiver   sV    




rb   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)rY   )rZ   r[   )Z'mysite.mobile.models.model_notificationrc   r,   r.   rH   r8   r!   r   r]   rY   r)   r(   r\   r^   r[   )rN   rO   r1   rc   Zdelete_notificationsrY   r`   ra   r   r   r   delete_employee   s    
re   N)Z	django.dbr   Zdjango.db.modelsr   r   Zdjango.dispatch.dispatcherr   Zdjango.utilsr   Zdjango.utils.translationr   r*   Z(mysite.att.models.model_trainingcategoryr   Zmysite.admin.exceptionsr	   Z
mysite.attr
   Zmysite.att.models_choicesr   r   r   Z&mysite.personnel.models.model_employeer   Z&mysite.workflow.models.exception_modelr   r   Z	post_saverb   Zpost_deletere   r   r   r   r   <module>   s   x1