B
    b%                 @   s   d dl 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 d dlmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lmZ G dd deZG dd deZdd ZdS )    N)ContentType)	ModelFormHiddenInputModelChoiceFieldValidationError)gettext_lazy)forms)widgets)
DepartmentPosition)WorkflowEngineWorkflowNode)AdminRuntimeWarning)get_current_company_idc                   s  e Zd ZejedddZejedddZejeddZ	ejeddZ
ejedd	d
Zeej edd	ejdZeejjddddddgdeddZejeded	dZejej edd	ejdZG dd dZ fddZ fddZdd  Zd$ fd"d#	Z   Z!S )%WorkflowEngineCreationFormworkflowEngine_field_code2   )label
max_lengthworkflowEngine_field_nameworkflowEngine_field_startDate)r   workflowEngine_field_endDateworkflowEngine_field_employeeF)r   required workflowEngine_field_departments)querysetr   r   widgetleaveovertime	manuallogtrainingchangeschedulereimbursement)	model__in workflowEngine_field_contentType)r   r   workflow_node)r   r   r   &workflowEngine_field_applicantPositionc               @   s   e Zd ZeZdZdS )zWorkflowEngineCreationForm.Meta)
start_dateend_dateworkflow_codeworkflow_namecontent_typeemployeeapplicant_positiondepartmentsN)__name__
__module____qualname__r   modelfields r4   r4   EG:\easytimepro\master/mysite/workflow\forms\workflow_builder_forms.pyMeta%   s   r6   c                s   t t| j|| d S )N)superr   __init__)selfargskwargs)	__class__r4   r5   r8   +   s    z#WorkflowEngineCreationForm.__init__c                s^   t t|  }d}x.| D ]"\}}|| r|| dkrd}P qW |rRttdt| |S )NT FZplease_fill_required_fields)r7   r   cleanitemsr   _
data_check)r9   cleaned_dataZ
form_emptykeyvalue)r<   r4   r5   r>   .   s    z WorkflowEngineCreationForm.cleanc       	      C   s   dd l }td | jd}|s$d S ||}|jdd d d}x|D ]}t|tsXqH|dd }|dd }|r|r| rt	t
d	|d
7 }tjj|j|drt	t
dt||j|j||d  qHW d S )Nr   zsaving nodes methodr%   c             S   s   |  ddS )N	node_coder   )get)kr4   r4   r5   <lambda>A       z7WorkflowEngineCreationForm.save_nodes.<locals>.<lambda>)rC   rE   	node_name0workflow_node_and_workflow_node_name_is_required   )workflow_enginerE   workflow_node_is_unique)order_idrM   workflow_engine_namerE   rJ   )jsonprintrB   rF   loadssort
isinstancedictisspacer   r@   r   objectsfilteridr*   save)	r9   workflowrQ   Z
nodes_jsonnodesrO   nodecodenamer4   r4   r5   
save_nodes:   s(    


z%WorkflowEngineCreationForm.save_nodesTc                sD   t t| jdd}td |ddr*|S |r@|  | | |S )NF)commitzsave engineZ	read_only)r7   r   r[   rR   popra   )r9   rb   r;   engine)r<   r4   r5   r[   Q   s    
zWorkflowEngineCreationForm.save)T)"r/   r0   r1   r   	CharFieldr@   r)   r*   	DateFieldr'   r(   WorkflowNodeManyToManyFieldr,   r   r
   rX   allr	   DepartmentRadioSelectr.   r   rY   r+   r   r%   r   PositionRadioSelectr-   r6   r8   r>   ra   r[   __classcell__r4   r4   )r<   r5   r      s&   
r   c                   s  e Zd ZejedddZejedddZejeddZ	ejeddZ
ejedd	d
Zeej edd	ejdZeejjddddddgdeddZejededZejej edd	ejdZG dd dZ fddZ fddZdd  Zd$ fd"d#	Z   Z!S )%WorkflowEngineChangeFormr   r   )r   r   r   r   )r   r   r   F)r   r   r   )r   r   r   r   r   r   r   r    r!   r"   )r#   r$   )r   r   Zworkflow_model_workflowNode)r   r   r&   c               @   s   e Zd ZeZdZdS )zWorkflowEngineChangeForm.Meta)r'   r(   r)   r*   r+   r,   r-   r.   N)r/   r0   r1   r   r2   r3   r4   r4   r4   r5   r6   n   s   r6   c                sh   t t| j|| | jd}g | _| jrdtjj	| jj
dddd}t|| _tt||_d S )Nr%   )rM   rO   rE   rJ   )r7   rl   r8   r3   rF   initial_nodesinstancer   rX   rY   rZ   Zorder_byvalueslistrQ   dumpsinitial)r9   r:   r;   fr]   )r<   r4   r5   r8   t   s    
z!WorkflowEngineChangeForm.__init__c                sZ   t t|  }t }|d}tjj||dj| j	j
d }|rNttdt| |S )Nr)   )r)   
company_id)rZ   Zduplicate_workflow_code)r7   rl   r>   r   rF   r   rX   rY   Zexcludern   rZ   existsr   r@   rA   )r9   rB   rt   r)   )r<   r4   r5   r>   ~   s    
zWorkflowEngineChangeForm.cleanc       
      C   sD  dd l }|| jd}|s*ttdd}dd |D }|jdd d | j|kr&tj	j
|jd	}x8|D ]0}|j }|rd|_d
|_|  qn|  qnW x|D ]x}	|d7 }|	d r|	d r|	d  rttdtj	j
|j|	d drttdt||j|j|	d |	d d  qW ntj	j
|jd	j|jd d S )Nr   r%   workflow_node_is_requiredc             S   s*   g | ]"}|r| d d| dddqS )rE   NrJ   )rE   rJ   )rF   ).0r^   r4   r4   r5   
<listcomp>   s   z7WorkflowEngineChangeForm.save_nodes.<locals>.<listcomp>c             S   s   |  ddS )NrE   r   )rF   )rG   r4   r4   r5   rH      rI   z5WorkflowEngineChangeForm.save_nodes.<locals>.<lambda>)rC   )rM   r=   rL   rE   rJ   rK   )rM   rE   rN   )rO   rM   rP   rE   rJ   )rP   )rQ   rS   rB   rF   r   r@   rT   rm   r   rX   rY   rZ   Znodeinstance_setrh   rM   rP   r[   deleterW   r*   update)
r9   r\   rQ   r]   rO   Zsorted_nodesZworkflownode_oldZworkflownode_old_iZworkflownode_old_nodeinstancer^   r4   r4   r5   ra      s6    




z#WorkflowEngineChangeForm.save_nodesTc                sZ   t t| jdd}|j }|  }tjj|j	d}|rV|||d || | 
| |S )NF)rb   )rZ   r,   )r7   rl   r[   r,   rh   r>   r   rX   rF   rZ   ra   )r9   rb   rd   Zcurrent_dataZupdated_dataZ
engine_obj)r<   r4   r5   r[      s    

zWorkflowEngineChangeForm.save)T)"r/   r0   r1   r   re   r@   r)   r*   rf   r'   r(   rg   r,   r   r
   rX   rh   r	   ri   r.   r   rY   r+   r   r%   r   rj   r-   r6   r8   r>   ra   r[   rk   r4   r4   )r<   r5   rl   ^   s&   

 rl   c             C   s   |  d}|sttdt|}|s4ttd|jdd d xL|D ]D}t|tsZqJ| dd }| dd }|dks|dkrJttd	qJW d S )
Nr%   rv   c             S   s   | d S )NrE   r4   )rG   r4   r4   r5   rH      rI   zdata_check.<locals>.<lambda>)rC   rE   rJ   r=   rK   )rF   r   r@   rQ   rS   rT   rU   rV   )datar%   r]   r^   r_   r`   r4   r4   r5   rA      s    



rA   )rQ   Z"django.contrib.contenttypes.modelsr   Zdjango.formsr   r   r   r   Zdjango.utils.translationr   r@   Zmysite.adminr   Zmysite.personnelr	   Zmysite.personnel.modelsr
   r   Zmysite.workflow.modelsr   r   Zmysite.admin.exceptionsr   Zmysite.att.utilsr   r   rl   rA   r4   r4   r4   r5   <module>   s   JV