B
    eb!                 @   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mZ d d
lmZ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jjddd ZdS )    )ContentType)models)signals)receiver)gettext_lazy)AdminRuntimeWarning)AbstractCloud)DepartmentForeignKey)
DepartmentPosition)NODE_PENDINGNODE_APPROVED)EmployeeManyToManyFieldc            	       sZ  e Zd ZejeddddidZejedddZeded	d
dZ	e
eeddd
ejdZeedZeedZejedddZejeedd
ddejdZejedddZejedddedfdedfdedfdedffd Zejdd
d
dd!Zejeed"dd
ejdZd#d$ Zd, fd&d'	Zd- fd(d)	ZG d*d+ d+Z  ZS ).WorkflowEngineZworkflowEngine_field_code2   uniquez+WorkFlow with this Flow Code already Exists)
max_lengthZerror_messagesZworkflowEngine_field_name)r   zpersonnel.EmployeeZworkflowEngine_field_employeeT)verbose_nameblankZ workflowEngine_field_departmentsF)r   r   null	on_deleteZworkflowEngine_field_startDateZworkflowEngine_field_endDateZ workflowEngine_field_descriptionZ workflowEngine_field_contentType )r   r   r   defaultr   ZworkflowEngine_field_typer   )r   ZworkflowEngine_field_informType   Z$workflowEngine_informTypeOption_noneZ%workflowEngine_informTypeOption_email   Z%workflowEngine_informTypeOption_alert   z+workflowEngine_informTypeOption_email&alert)r   choices)r   r   r   ZeditableZ&workflowEngine_field_applicantPositionc             C   s   d | j| jS )Nz{0} {1})formatworkflow_codeworkflow_name)self r!   ?G:\easytimepro\master/mysite/workflow\models\workflow_engine.py__str__,   s    zWorkflowEngine.__str__Nc	                s  ddl m}	 ddl m}
 ddlm} ddlm} tjj	| j
| jd}tjj	| j| jd}|rx|d j| jkrxttd|r|d j| jkrttd	| j}| j}||k rtd
}|rt|| jr|r|g kr| j j	|djddd}|jj	t|drttd|jj	t|ds(d }|r|rt|t|jj	|d }|	t}x|D ]}||  d7  < q\W dd | D }|jj	| j jdddd}d}x2|
t||  D ]\}}|dkrd}P qW | j j	|djddd}|jj	t|dsd}|r|d |jkr,d}nV|d |jkrBd}n@|d |jkrXd}n*|d |j
krnd}n|d |jkrd}|rttdtt| |||| d S )Nr   )defaultdict)Counter)Employee)NodeInstance)Zworkflow_name__exact
company_id)Zworkflow_code__exactr(   Zworkflow_code_already_existsZworkflow_name_already_existsZ"workflow_engine_time_invalid_range)Zemployee__inidT)Zflat)stateZworkflow_instance_id__inthe_workflow_is_already_used)r*   Z"workflow_instance__workflow_engine)Zid__inr   c             S   s   g | ]\}}|d kr|qS )r   r!   ).0kvr!   r!   r"   
<listcomp>Q   s    z'WorkflowEngine.save.<locals>.<listcomp>Zemployee_idFr   
start_dateend_dater   r   content_type)collectionsr$   r%   Z&mysite.personnel.models.model_employeer&   mysite.workflow.modelsr'   r   objectsfilterr   r(   r   Zpkr   _r0   r1   r)   workflowinstance_setallZvalues_listr   listintitemsr2   supersave)r    Zcurrent_dataZchanged_dataZupdated_dataZ
engine_objZforce_insertZforce_updateusingZupdate_fieldsr$   r%   r&   r'   Z	work_nameZ	work_coder0   r1   messageZbulk_delete_or_add_empZmerged_emp_dataZ	obj_countiZremoved_or_added_dataZwork_flow_dataZis_errorr-   r.   Zapproval_check_instance_id)	__class__r!   r"   r>   /   st    





zWorkflowEngine.savec                sd   ddl m} | jjddr&ttd|jj| jd}x|D ]}|  q<W t	t
| j||d d S )Nr   )WorkflowNoder   )Zexception__audit_statusr+   )Zworkflow_engine)r?   keep_parents)r4   rC   r8   r6   r   r7   r5   r)   deleter=   r   )r    r?   rD   rC   Zworkflownode_oldZworkflownode_old_i)rB   r!   r"   rE   p   s    

zWorkflowEngine.deletec               @   s   e Zd ZdZedZdZdS )zWorkflowEngine.MetaZworkflowZworkflow_model_workflowEngine))r   ZcompanyN)__name__
__module____qualname__Z	app_labelr7   r   Zunique_togetherr!   r!   r!   r"   Metaz   s   rI   )NNNNFFNN)NF) rF   rG   rH   r   Z	CharFieldr7   r   r   r   employeer	   r
   ZCASCADEdepartmentsZ	DateFieldr0   r1   descriptionZ
ForeignKeyr   r2   ZSmallIntegerFieldworkflow_typeZinform_typeZdel_flagr   applicant_positionr#   r>   rE   rI   __classcell__r!   r!   )rB   r"   r      s0   

 @
r   )senderc             K   sf   | dd }|rb|j dkr&d|_n<|jd k	rJ|jd k	rBd|_qbd|_n|jd k	r\d|_nd|_d S )Ninstancer      r   r   r   )getrJ   countrM   rK   rN   )signalrP   kwargsrQ   r!   r!   r"   save_signal_receiver   s    


rW   c             K   s2   | dd }|r.t|d dkr.d|_|  d S )NrQ   Zpk_setr   rR   )rS   lenrM   r>   )rP   rV   rQ   r!   r!   r"    save_m2m_changed_signal_receiver   s
    rY   N) Z"django.contrib.contenttypes.modelsr   Z	django.dbr   Zdjango.db.modelsr   Zdjango.dispatch.dispatcherr   Zdjango.utils.translationr   r7   Zmysite.admin.exceptionsr   Z!mysite.admin.abstract_cloud_modelr   Zmysite.personnel.fieldsr	   Zmysite.personnel.modelsr
   r   Zmysite.workflow.models_choicesr   r   Zmysite.workflow.fieldsr   r   Z	post_saverW   Zm2m_changedrJ   ZthroughrY   r!   r!   r!   r"   <module>   s   j