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mZ d dlmZ d dlmZ G d	d
 d
Zdd ZeeG dd dejZdS )    )print_function)gettext_lazy)admin)widgets)fields)WorkflowEngineCreationFormWorkflowEngineChangeForm)WorkflowEngine)get_current_company_idc               @   s   e Zd ZdZg fddZdS )WorkflowEngineValidatora  Proof

    ConditionA Mean that DateRange A Completely After DateRange B
                                |---- DateRange A ------|
        |---Date Range B -----|
    ConditionB Mean that DateRange A is Completely Before DateRange B
        |---- DateRange A ----|
                                |---Date Range B ----|
    Overlap exists if Neither A Nor B is true
    A <=> StartA > EndB     B <=> EndA < StartB
    Not (A Or B) <=>  Not A And Not B  <=> (StartA <= EndB)  and  (EndA >= StartB)
    c          	   C   s   ddl m} ddlm} t }|rBtjj|j|j	|j
|d|d}n$tjj|j|j	|j
|j|jd|d}|jrz|j|jd}| r|tdtdd S )	Nr   )Q)WorkflowOverlapingNotAllowed)start_date__lteend_date__gtecontent_typeZemployee__indel_flag
company_id)r   r   r   applicant_positiondepartmentsr   r   )pkZ2there_is_already_a_workflow_for_this_time_intervalZoverlaping_range_date_error)django.db.modelsr   9mysite.workflow.exceptions.workflow_validation_exceptionsr   r
   r	   Zobjectsfilterend_date
start_dater   r   r   r   Zexcludeexists_)selfnew_workflow_engineZ	employeesr   r   r   Zoverlap_query_set r   CG:\easytimepro\master/mysite/workflow\admin\workflowengine_admin.pyvalidate_workflow_overlapping    s,    
z5WorkflowEngineValidator.validate_workflow_overlappingN)__name__
__module____qualname____doc__r!   r   r   r   r    r      s   r   c             C   sn   ddl m}m}m}m}m} ddlm} ddlm	} g }||||||f}	x |	D ]}
||
}|
|j qNW |S )Nr   )LeaveOvertime	ManualLogTrainingChangeSchedule)Reimbursement)get_content_type_for_model)Zmysite.att.modelsr&   r'   r(   r)   r*   Zmysite.payroll.modelsr+   Zdjango.contrib.admin.optionsr,   appendr   )Zplaceholderr&   r'   r(   r)   r*   r+   r,   Zcontent_idsZ
while_listZa_modelZctr   r   r    content_type_whitelist:   s    
r.   c                   sl   e Zd ZeZeZdZdZdZ	e
ZejdejiiZ fddZdd Zed	e_d
d Zd fdd	Z  ZS )WorkflowEngineAdmin)workflow_codeworkflow_namer   r   r   get_employeer   r   )r0   r1   r   r   r   )r0   r1   r   Z!applicant_position__position_nameZdepartments__dept_nameZwidgetc                s<   t t| |}ddlm} ||ddj|jjd}|S )Nr   )r   )r   )r   )superr/   get_querysetr   r   r   userZcurrent_company)r   requestZqsr   )	__class__r   r    r4   Z   s    z WorkflowEngineAdmin.get_querysetc             C   sz   |j  ddd}g }xJ|D ]B}|d r:||d  q|d rR||d  q||d  qW |rrd|S dS d S )	NZ
first_name	last_nameZemp_coder         , )employeeallZvalues_listr-   join)r   objZempsZ	name_listnamer   r   r    r2   `   s    

z WorkflowEngineAdmin.get_employeeZworkflowEngine_field_employeec          
   C   s   ddl m} ddlm} |jjd kr4|jddd}n|jdd}yt ||j	d  W n, |k
r } z||j
W d d }~X Y nX |jdd d S )	Nr   )r   )AdminRuntimeWarningFT)commitZ	read_only)rC   r=   )r   r   Zmysite.admin.exceptionsrB   instanceidZsaver   r!   Zcleaned_dataerrors)r   Z
model_formr   rB   r   er   r   r    check_domain_rulesq   s    z&WorkflowEngineAdmin.check_domain_rulesNc                s6   i }|dkr| j |d< || tt| j||f|S )zB
        Use special form during workflow engine creation
        Nform)add_formupdater3   r/   get_form)r   r6   r@   kwargsdefaults)r7   r   r    rL      s
    

zWorkflowEngineAdmin.get_form)N)r"   r#   r$   r   rJ   r   rI   Zlist_displayZsort_fieldsZlist_filterr.   Zdisplay_for_content_typer   ZEmployeeManyToManyFieldr   ZEmployeeManyToManyWidgetZformfield_overridesr4   r2   r   Zshort_descriptionrH   rL   __classcell__r   r   )r7   r    r/   G   s   
r/   N)Z
__future__r   Zdjango.utils.translationr   r   mysiter   Zmysite.personnelr   Zmysite.workflowr   Zmysite.workflow.formsr   r   Zmysite.workflow.modelsr	   Zmysite.att.utilsr
   r   r.   registerZZKModelAdminr/   r   r   r   r    <module>   s   (