B
    eb3                 @   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 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-e#e!j.e+ddd Z/dS )    N)models)timezone)now)gettext_lazy)Employee)AllowanceType)PurposeType)Resign)SalaryStructure)AdminRuntimeWarning)PUNCH_STATESAUDIT_SUCCESSREFUSECANCEL_AUDIT_SUCCESSAPPLICATION)db_const)signals)receiver)AbstractException)AbstractCloud)ALL_AUDIT_STATUS)NodeInstancec                   sb  e Zd ZejeeddddejdZeje	dddejdZ
ejedddddZejeeddddejdZejeed	dddejdZeed
ZejededZejededZejedejdddZejedejd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%ejede&jddZ'e(dd Z)ede)j*_+e(dd Z,ed e,j*_+e(d!d" Z-ed#e-j*_+e(d$d% Z.ed&e.j*_+e(d'd( Z/ed)e/j*_+e(d*d+ Z0ed,e0j*_+e(d-d. Z1d/d0 Z2ede2_+e( fd1d2Z3 fd3d4Z4 fd5d6Z5G d7d8 d8Z6  Z7S )9ReimbursementZmodel_employeeT)verbose_namenullblankeditable	on_deleteF)r   r   r   r   Z!payroll_model_additional_employee)r   r   r   r   Zpayroll_model_allowancetypeZpayroll_model_purposetypeZReimbursement_field_amountZReimbursement_field_start_date)defaultZReimbursement_field_end_dateZReimbursement_field_file)
max_lengthr   r   ZReimbursement_field_remarkZ"reimbursement_field_approvalRemark)r   r   r   Z reimbursement_field_approvalTime)r   r   r   Z!reimbursement_field_approvalLevelZreimbursement_field_approverd   )r   r   r   r   Zreimbursement_field_applyTime)r   r   c             C   s   | j jS )N)employeeemp_code)self r$   BG:\easytimepro\master/mysite/payroll\models\model_reimbursement.pyr"   ;   s    zReimbursement.emp_codeZemp_field_employeeCodec             C   s   | j jS )N)r!   
first_name)r#   r$   r$   r%   r&   A   s    zReimbursement.first_nameZemp_field_firstNamec             C   s   | j jS )N)r!   	last_name)r#   r$   r$   r%   r'   G   s    zReimbursement.last_nameZemp_field_lastNamec             C   s
   | j jjS )N)r!   
departmentZ	dept_name)r#   r$   r$   r%   r(   M   s    zReimbursement.departmentZemployee_field_departmentc             C   sD   t | jjdkrdS t | jjdkr(dS t | jjdkr<dS dS d S )N   ZPending   ZApproved   ZRejectedZRevoke)intworkflow_abstractExceptionaudit_status)r#   r$   r$   r%   r.   S   s    zReimbursement.audit_statusZapproval_field_approvalStatusc             C   s   | j }|r| j S | jjS d S )N)approverr-   last_approver)r#   ZApproverr$   r$   r%   r0   `   s    zReimbursement.last_approverZapproval_field_last_approverc             C   s   | j jS )N)r-   workflow_current_state_name)r#   r$   r$   r%   r1   i   s    z)Reimbursement.workflow_current_state_namec             C   sN   | j }| jjtkr&| jjr"| jjn|}|sJtjj| jjd}|rJ|d j	}|S )N)Zworkflow_instance_idr   )
audit_reasonr-   r.   r   revoke_reasonr   objectsfilteridZremark)r#   r2   ZNodeIns_audit_reasonr$   r$   r%   get_audit_reasonm   s    
zReimbursement.get_audit_reasonc                s   t t| j}|S )N)superr   Znode_auditing)r#   Zauditing)	__class__r$   r%   is_auditingy   s    zReimbursement.is_auditingc                st  t jj| jd }tjt| jd	 }tjt| j
d	 }tjj| jd }d}| jrtjj| jd}| jjtkr|jjttfks|jjtkrtd}ntj }	|	| _|rt||rtjj| jd}
x&|
D ]}|j}||k rttdqW |rDt jj| jd}|j}||kr.ttd||krDttd| jr^tt| jd	| _tt| j|| d S )
N)employee_idz%Y-%m-%d %H:%M:%S)r!    )pkZreimbursement_approve_auditZ4start_date_cannot_be_less_than_salary_effective_dateZ>post_Resign_date_you_cannot_add_reimbursement_for_the_employeer*   )r	   r4   r5   r!   existsdatetimestrptimestrrmb_start_datedatermb_end_dater
   r=   r   getr-   r.   r   r   r   _r   creater   effective_dateZreport_generation_end_date
rmb_amountroundfloatr8   save)r#   argskwargsZemp_resign_existsZrmb_time_strZrmb_endtime_strZsalary_structure_datamessageobjZabstract_objrH   ZeachZeffective_date_strZresign_tempZresign_date)r9   r$   r%   rL   ~   s<    




zReimbursement.savec                s   yF| j jrD| j jj }x|D ]}|  qW tjj| j jd  W n   Y nX ddl	m
} | j}| j}| j}|j||| tt|   d S )N)r6   r   )tasks)r-   ZworkflowinstanceZnodeinstance_setalldeleter   r4   r5   r6   mysite.payrollrQ   r;   
apply_timeZremove_receipt_filesdelayr8   r   )r#   Zinstance_nodesZnoderQ   rP   r!   Zrmb_date)r9   r$   r%   rS      s    
zReimbursement.deletec               @   s    e Zd ZdZedZeZdZdS )zReimbursement.MetaZpayrollZpayroll_model_Reimbursement)rS   ZchangeviewN)__name__
__module____qualname__Z	app_labelrF   r   Zverbose_name_pluralZdefault_permissionsr$   r$   r$   r%   Meta   s   r[   )8rX   rY   rZ   r   Z
ForeignKeyr   rF   ZCASCADEr!   r   r-   Z	TextFieldZadditional_employeer   Zallowance_typer   Zpurpose_typeZ
FloatFieldrI   ZDateTimeFieldr   rB   rD   Z	CharFieldcZMAX_FILE_NMAEZrmb_fileZMAX_LENTH_REMARKZ
rmb_remarkr   ZMAX_AUDIT_REASONr2   Z
audit_timeZSmallIntegerFieldZapproval_levelZaudit_user_idZMAX_APPROVER_NAMEr/   r   rU   propertyr"   fgetZshort_descriptionr&   r'   r(   r.   r0   r1   r7   r:   rL   rS   r[   __classcell__r$   r$   )r9   r%   r      sb   




!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\}}|	j|d|j|
|j|jd |std	 nF|	j|d|j|
|j|jd t|d
r|j}t|jj}|r|r|tkrDtj
j|jdj|d ||||j||j |	j|d|j|
|j|j|d n|tkrtj
j|jdj||jjd ||||j||j |	j|d|j|
|j|j|d nJtj
j|jdj|d ||||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reimbursement)	applicantapproval_statusz%Workflow not found for this exception_approve_user)r6   )r.   )rh   ri   Znode_approver)r.   r3   T)rE   Z"django.contrib.contenttypes.modelsrb   Zmysite.workflow.viewsrc   rd   re   Zmysite.mobile.tasksrf   rU   r4   Zget_for_modelr6   Z'mysite.workflow.models.workflow_builderrg   Zbuild_workflow_instance_forr!   r-   rV   r.   printhasattrrj   r,   r   r   r5   Zworkflow_abstractException_idupdater   r3   )signalr`   ZcreatedrN   ra   rb   rc   rd   re   rf   Zcommit_timeZctrg   resultZengineZapprover_auth_userZapprove_audit_statusr$   r$   r%   save_signal_receiver   sX    



rp   c             K   s,   ddl m} |jj|jd}|r(|  d S )Nr   )AppNotification)source)Z'mysite.mobile.models.model_notificationrq   r4   r5   r6   rS   )r`   ra   rN   rq   Zdelete_notificationsr$   r$   r%   delete_employee   s    rs   )0r?   Z	django.dbr   Zdjango.utilsr   Zdjango.utils.timezoner   Zdjango.utils.translationr   rF   Z&mysite.personnel.models.model_employeer   Z)mysite.payroll.models.model_allowancetyper   Z'mysite.payroll.models.model_purposetyper   Z$mysite.personnel.models.model_resignr	   Z,mysite.payroll.models.model_salary_structurer
   Zmysite.admin.exceptionsr   Zmysite.att.models_choicesr   r   r   r   r   rT   r   r\   Z
mysite.attZdjango.db.modelsr   Zdjango.dispatch.dispatcherr   Z&mysite.workflow.models.exception_modelr   Z!mysite.admin.abstract_cloud_modelr   r   Zmysite.workflow.modelsr   r   Z	post_saverp   Zpost_deleters   r$   r$   r$   r%   <module>   s.    1