U
    =[h                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_testplanc                       s   e Zd Zejjddg Zdd Z fddZddd	d
Ze	e
dddddd Zed fdd	Zed fdd	Z  ZS )CmfTestplanrunZsetupc                 C   s$   | j r
d S tjjdddgd| _ d S )Nztestplan.base:defaultTZsave_eval_code)codeZcache_inmemoryfields)ZworkflowmodelsZCmfWorkflowget)self r   (./modules/evatest/models/cmf_testplan.py_calc_workflow   s    zCmfTestplan._calc_workflowc                    s(   | j jrtjjddd| _ t j||S )NTr   )systemsys_type)Ztree_parentZis_nullr   ZCmfRegistryr	   supersave)r
   argskwargs	__class__r   r   r      s    zCmfTestplan.saveN)	testcyclec                O   sB   ddl m} |d t| j| jj|r*|jnd tjjjdd d S )Nr   )	cmf_alertup   Обработка может занять несколько минут, ожидайте оповещения.)testplan_idtestcycle_idnotify_person_id)r   )Zcmf.appr   Zschedule_deferred_job_run_jobidvaluegZcurrent_person)r
   r   r   r   r   r   r   r   r      s    zCmfTestplan.run    Запуск тест-плана   T)descriptionpriorityZshow_bg_progressbarc                    st   d fdd	 t jj| dgd}|sFt jd|j |d}|  d S  ||  t jj|dd	|j d
ddd d S )Nr   c           
         s   t jj| ddddgd}|r,t jj|d}n|}t jjdd|gdd	gd
D ]Z}t j|||j|jd}|  |j	D ]}|j
||d qr|j}	d} | |j|	|d  qJdS )u/  Копируем структуру плана тестирования

            Args:
                parent_folder (CmfTestcycle, CmfTestplanTestcaseFolder): родительский узел
                depth (int, optional): уровень копирования. Defaults to 0.
            Ztest_configurationstestplanZdefault_responsibler   r   )r   ztree_parent_folder.id==ztestplan_testcases.testcaseorderno)filterr   )parenttree_parent_foldernamer&   )r   Ztestcycle_testcase_folderN   )r   CmfTestcycler	   ZCmfTestcycleTestcaseFolderZCmfTestplanTestcaseFolderlistr*   r&   r   Ztestplan_testcasesr   r   )
r   Zparent_folder_idZtree_parent_folder_iddepthr   r)   Zplan_testcase_folderZ
run_folderZtestplan_testcaseZrun_folder_id	copy_treer   r   r0   !   s<      
  
z'CmfTestplan._run_job.<locals>.copy_treer*   r$   u   Прогон )r*   r#   r   u   Тест-план «u    » успешно запущенTr+   )Zpersonr*   msgZforce_notify_current_personr"   )Nr   )r   r   r	   r,   r*   r   Z	CmfNotifyZplace_notify)r   r   r   _args_kwargsr#   r   r   r/   r   r      s"    #

zCmfTestplan._run_jobc                    sB   |dkr$| j |f||||d|S t j|f||||d|S )Nreleaseobject_fieldsr'   r   order_by)releases_options_listr   field_options_list)clsrelation_field_namer6   r'   r   r7   r   r   r   r   r9   V   s       zCmfTestplan.field_options_listc           
         s   |sg }|sdg}|sg }|dddgg}|o4| d}| dd }	|r\|sN|	s\|dd|gg}|d |d	 t j|f||||d
|S )Nr*   Zlogic_prefixr%   zlist.release	parent_idsearch=r   r(   r5   )r	   appendr   r9   )
r:   r;   r6   r'   r   r7   Zfilter_by_projectr   r<   r=   r   r   r   r8   _   s.    

   z!CmfTestplan.releases_options_list)NNNN)NNNNN)__name__
__module____qualname__r   r   Zapi_methodsr   r   r   staticmethodZcmf_deferred_jobr   classmethodr9   r8   __classcell__r   r   r   r   r      s(   6               r   N)Zcmf.includeZmodules.evatest.fieldsr   r   r   r   r   r   <module>   s   