U
    |zhI                     @   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 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 S )Nztestplan.base:default)code)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)descriptionZ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   fields)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   r.   !   s<      
  
z'CmfTestplan._run_job.<locals>.copy_treer(   r!   u   Прогон )r(   r    r   u   Тест-план «u    » успешно запущенTr)   )Zpersonr(   msgZforce_notify_current_personpriority)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_namer5   r%   r"   r6   r   r   r
   r   r8   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&   r4   )r   appendr   r8   )
r9   r:   r5   r%   r"   r6   Zfilter_by_projectr   r;   r<   r   r
   r   r7   _   s.    

   z!CmfTestplan.releases_options_list)NNNN)NNNNN)__name__
__module____qualname__r   r   Zapi_methodsr   r   r   staticmethodZcmf_deferred_jobr   classmethodr8   r7   __classcell__r
   r
   r   r   r      s(   
6               r   N)Zcmf.includeZmodules.evatest.fieldsr   r   r
   r
   r
   r   <module>   s   