B
    c1                 @   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 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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' G dd deZ(eej)e(ddd Z*dd Z+dd Z,eej-e(ddd Z.dS )    N)models)Q)signals)receiver)timezone)	force_str)gettext_lazy)AdminRuntimeWarning)db_const)PUNCH_STATESAUDIT_SUCCESSREFUSECANCEL_AUDIT_SUCCESSAPPLICATION)Employee)AbstractException)AttSchedule)AttShift)TimeInterval)date)Leave)has_schedulec                   s  e Zd ZejeedejdZe	edZ
ejededZejedddd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#_ e! fddZ$dd Z%dd Z& 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d0e._ d1d2 Z/ed3e/_ d4d5 Z0ed6e0_ d7d8 Z1ed9e1_ G d:d; d;Z2G d<d= d=Z3  Z4S )>	ManualLogZmanualLog_field_employee)verbose_nameZ	on_deleteZmanualLog_field_punchTimeZmanualLog_field_punchState)choicesZmanualLog_field_workCode   T)
max_lengthnullblankZmanualLog_field_applyReasonZmanualLog_field_applyTimeF)defaulteditableZmanualLog_field_approvalRemarkZmanualLog_field_approvalTime)r   r   r    ZmanualLog_field_approvalLevelZmanualLog_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__ :G:\easytimepro\master/mysite/att\models\model_manuallog.pyget_last_approver.   s    zManualLog.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_reason8   s    
zManualLog.get_audit_reasonc                s   t t| j}|S )N)r"   r   Znode_auditing)r%   Zauditing)r&   r'   r(   is_auditing@   s    zManualLog.is_auditingc             C   s   | j dkrt|  d S )N   )r+   save_to_transaction)r%   r'   r'   r(   after_approvedE   s    
zManualLog.after_approvedc             C   s   t |  d S )N)delete_from_transaction)r%   r'   r'   r(   after_revokedI   s    zManualLog.after_revokedc                s@  d}t jj| j| j| jdd }| jtj kr<td}n|rJtd}n| jj	rt| jj	| j
 krttd| j }nt| j| jstd| j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| jd
ttdttdB j| jd}|rtd| j }|r*t|tt| j|| d S )N    )employeeZstart_time__lteZend_time__gteZ	days__gteZmanual_log_time_greater_nowZ'emp_has_leave_cannot_apply_manual_PunchZ!leave_time_invalid_range_hiredateZno_employee_schedule)pkZmanuallog_approve_audit)r5   
punch_time)r+   Zmanual_log_repeat)r   objectsfilterr5   r7   existsdatetimenow_Z	hire_dater   r   
first_namer6   r   getr+   r   r   r   Zexcluder   r	   r"   save)r%   argskwargsmessageZ
leave_dateobjtmp)r&   r'   r(   r@   L   s.    


 zManualLog.savec                s   t | dr6| jj }x|D ]}|  qW | j  | jrz| jtkrzddlm	} |j
j| jj| jj| jd}|rz|  tt|   d S )Nworkflowinstancer   )Transaction)emp_code
company_idr7   )hasattrrF   Znodeinstance_setalldeleter6   r+   r   mysite.iclock.modelsrG   r8   r9   r5   rH   rI   r7   r"   r   )r%   Zinstance_nodesZnoderG   Ztransactions)r&   r'   r(   rL   k   s    



zManualLog.deletec             C   s   | j S )N)r7   )r%   r'   r'   r(   get_start_datez   s    zManualLog.get_start_datec             C   s   dS )Nr3   r'   )r%   r'   r'   r(   get_end_date}   s    zManualLog.get_end_datec             C   s   dS )Nr3   r'   )r%   r'   r'   r(   get_cagegory   s    zManualLog.get_cagegoryc             C   s   | j S )N)punch_state)r%   r'   r'   r(   get_sub_category   s    zManualLog.get_sub_categoryc             C   s   | j }|jS )N)r5   rH   )r%   empr'   r'   r(   get_emp_code   s    zManualLog.get_emp_codeZemp_field_employeeCodec             C   s   | j }|jS )N)r5   r>   )r%   rS   r'   r'   r(   get_emp_first_name   s    zManualLog.get_emp_first_nameZemp_field_firstNamec             C   s   | j }|jS )N)r5   	last_name)r%   rS   r'   r'   r(   get_emp_last_name   s    zManualLog.get_emp_last_nameZemp_field_lastNamec             C   s   | j }|jS )N)r5   Zposition)r%   rS   r'   r'   r(   get_emp_job   s    zManualLog.get_emp_jobZemployee_field_positionc             C   s   | j }|jS )N)r5   Z
department)r%   rS   r'   r'   r(   get_emp_dept   s    zManualLog.get_emp_deptZemployee_field_departmentc               @   s   e Zd ZdS )zManualLog.AdminN)__name__
__module____qualname__r'   r'   r'   r(   Admin   s   r]   c               @   s(   e Zd ZdgZejZedZeZ	dZ
dS )zManualLog.MetaidZatt_model_manualLog)rL   ZchangeviewN)rZ   r[   r\   Zorderingr
   Z	APP_LABELZ	app_labelr=   r   Zverbose_name_pluralZdefault_permissionsr'   r'   r'   r(   Meta   s
   r`   )5rZ   r[   r\   r   Z
ForeignKeyr   r=   ZCASCADEr5   ZDateTimeFieldr7   ZIntegerFieldr   rQ   Z	CharField	work_codeZ	TextFieldr
   ZMAX_APPLY_REASONZapply_reasonr   r<   
apply_timeZMAX_AUDIT_REASONr*   Z
audit_timeZSmallIntegerFieldZapproval_levelZaudit_user_idZMAX_APPROVER_NAMEr$   r)   Zshort_descriptionpropertyr#   r,   r-   r0   r2   r@   rL   rN   rO   rP   rR   rT   rU   rW   rX   rY   r]   r`   __classcell__r'   r'   )r&   r(   r      sR   







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 |std	 n|	j|d|j|
|j|jd t|d
r|j}t|j}|r|r|tkr0||||j||j t| |	j|d|j|
|j|j|d nx|tkrv||||j||j t| |	j|d|j|
|j|j|d n2||||j||j |	j|d|j|
|j|j|d dS d S )Ninstancer   )ContentType)approve_by_adminreject_by_adminrevoke_by_admin)prepare_mobile_notifications)WorkflowInstanceBuilderZ	manuallog)	applicantapproval_statusz%Workflow not found for this exception_approve_user)rm   rn   Znode_approverT)r?   Z"django.contrib.contenttypes.modelsrg   Zmysite.workflow.viewsrh   ri   rj   Zmysite.mobile.tasksrk   rb   r8   Zget_for_modelr^   Z'mysite.workflow.models.workflow_builderrl   Zbuild_workflow_instance_forr5   Zdelayr+   printrJ   ro   intr   r/   r   r1   )signalre   ZcreatedrB   rf   rg   rh   ri   rj   rk   Zcommit_timeZctrl   resultZengineZapprover_auth_userZapprove_audit_statusr'   r'   r(   save_signal_receiver   sR    




rt   c             C   s6   ddl m} |jj| j| jdd }|r2|  d S )Nr   )rG   r.   )rS   r7   source)rM   rG   r8   r9   r5   r7   firstrL   )rf   rG   Ztransr'   r'   r(   r1      s    r1   c             C   sd   ddl m} | }| j|_| jj|_| j|_| j|_| j|_tj	 |_
d|_| jj|_|  d S )Nr   )rG   r.   )rM   rG   r5   rS   rH   r7   rQ   ra   r;   r<   Zupload_timeru   rI   r@   )rf   rG   tr'   r'   r(   r/      s    

r/   c             K   s,   ddl m} |jj|jd}|r(|  d S )Nr   )AppNotification)ru   )Z'mysite.mobile.models.model_notificationrx   r8   r9   r^   rL   )re   rf   rB   rx   Zdelete_notificationsr'   r'   r(   delete_employee   s    ry   )/r;   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   r   Z&mysite.personnel.models.model_employeer   Z&mysite.workflow.models.exception_modelr   Z#mysite.att.models.model_attscheduler   Z mysite.att.models.model_attshiftr   Z$mysite.att.models.model_timeintervalr   r   Zmysite.att.models.model_leaver   Zmysite.att.utilsr   r   Z	post_savert   r1   r/   Zpost_deletery   r'   r'   r'   r(   <module>   s0    6