U
    2$h                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_checklistc                       sf   e Zd ZdZejjdddg Zd fdd	Z 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.copyc                    s   |  ddddddg tjj| dD ]}|  q$| jjp<d| j_| jjr\| j j| j8  _| jjpfd| j_| jjr| j j| j	8  _| jj
d	d
 t j||S )Nchecklist_items_countchecklist_items_done_countr	   zparent.checklistszparent.checklists_items_countz"parent.checklists_items_done_count)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!      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_subtasksr/   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)r/   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   