U
     qh                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_checklistc                       sl   e Zd ZdZejjdddg Zd fdd	Zdd	 fd
d
Ze	dd Z
e	dd Ze	dddZ  ZS )CmfChecklistTcreate_subtaskcreate_subtasksupdate_status_of_all_itemsNc              	      sX   t  j|| j|d|}tjjdd| gdgdD ] }|j||j||jd|jd}q2|S )N)nameparentr	   =r   )filterfieldsZOPEN)r	   r   
cache_tasktextstatusorderno)supercopyr   modelsCmfChecklistItemlistr   r   )selfr	   argskwargsZchecklist_copyitemZ	item_copy	__class__ ./cmf/models/cmf_checklist.pyr      s    zCmfChecklist.copyF)TEXKOM_db_deletec                   s   |  ddddddg tjj| dD ]}|j|d|i| q$| jjpHd	| j_| jjrh| j j| j8  _| jjprd	| j_| jjr| j j| j	8  _| jj
d
d t j|d|i|S )Nchecklist_items_countchecklist_items_done_countr	   zparent.checklistszparent.checklists_items_countz"parent.checklists_items_done_count)r	   r   r   TZ	only_data)Zload_fieldsr   r   r   deleter	   Zchecklists_items_countr   Zchecklists_items_done_countr    saver   )r   r   r   r   r   r   r   r   r"      s"    zCmfChecklist.deletec                 O   s   t |tr$tjjddgdd|gd}|jr6|j dnd}tjj|j||j	| d|j
 d	d
}tjj|d d}|ji d ||_|jdd |jS )u#   Создание подзадачиr   r   idz==r   r   z<br><br> uA   (Создано из пункта чек-листа задачи ))r	   parent_taskr   r   )r$   )Zchanged_fieldsTr!   )
isinstancestrr   r   getr   ZCmfTaskZcreate_dummy_taskr	   r   codeZsave_dummy_taskZconverted_to_taskr#   r$   )clschecklist_itemr(   r   r   r   Zsubtaskr   r   r   r   /   s    

zCmfChecklist.create_subtaskc                 O   sX   t jjddddgdd|gd}g }|D ],}|tj||jd d	|_|jd
d q&|S )u   
        Массовое создание подзадач
        :param checklist_items_ids: список id пунктов чек-листа
        :return: список ИД созданных подзадач
        r   r   zcache_task.parentzcache_task.coder$   INr%   )r.   r(   DONETr!   )	r   r   r   appendr   r   r   r   r#   )r-   Zchecklist_items_idsr   r   itemsresr   r   r   r   r   C   s    zCmfChecklist.create_subtasksr0   c                 O   s.   t jjddd|gdd|pg ggd|id dS )u#  
        Массовое обновление статусов у экземпляров CmfChecklistItem, принадлежащих чек-листу

        :param checklist_id: ИД чек-листа, у которого будут обновляться статусы пунктов
        :param new_status: Статус, применяемый к пунктам чек-листа
        :param ignored_statuses: Список статусов, которые следует игнорировать при обновлении.
        ZANDr	   r
   r   zNOT IN)r   valuesN)r   r   Zbulk_update)r-   Zchecklist_idZ
new_statusZignored_statusesr   r   r   r   r   r   T   s    	z'CmfChecklist.update_status_of_all_items)N)r0   N)__name__
__module____qualname__Z	api_allowr   r   Zapi_methodsr   r"   classmethodr   r   r   __classcell__r   r   r   r   r      s   

r   N)Zcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s   