
    Nph                     D    d dl  d dlmZ  G d dej                        Zy)    )*)cmf_checklistc                        e Zd ZdZej
                  j                  g dz   Zd
 fd	Zdd fd
Ze	d        Z
e	d        Ze	dd	       Z xZS )CmfChecklistT)create_subtaskcreate_subtasksupdate_status_of_all_itemsc           	          t        |   || j                  |d|}t        j                  j                  dd| gdg      D ]7  }|j                  ||j                  ||j                  d|j                        }9 |S )N)nameparentr   =r   )filterfieldsOPEN)r   r   
cache_tasktextstatusorderno)supercopyr   modelsCmfChecklistItemlistr   r   )selfr   argskwargschecklist_copyitem	item_copy	__class__s          &./modules/task/models/cmf_checklist.pyr   zCmfChecklist.copy   s    d499VUfU++0038MWZV[0\ 	,D		99!'99#"ll " ,I	,     F)TEXKOM_db_deletec                   | j                  g d       t        j                  j                  |       D ]  } |j                  |d|i|  | j
                  j                  xs d| j
                  _        | j
                  j                  r)| j
                  xj                  | j                  z  c_        | j
                  j                  xs d| j
                  _        | j
                  j                  r)| j
                  xj                  | j                  z  c_        | j
                  j                  d       t        |   |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	only_data)load_fieldsr   r   r   deleter   checklists_items_countr%   checklists_items_done_countr&   saver   )r   r#   r   r   r   r    s        r!   r*   zCmfChecklist.delete   s     	 ++000= 	LDDKKK0@KFK	L -1KK,N,N,SRS);;--KK..$2L2LL.26++2Y2Y2^]^/;;22KK33t7V7VV34(w~tQ6FQ&QQr"   c           	         t        |t              r&t        j                  j	                  ddgdd|g      }|j
                  r|j
                   dnd}t        j                  j                  |j                  ||j                  | d|j                   d	
      }t        j                  j	                  |d         }|j                  i        ||_        |j                  d       |j                  S )u#   Создание подзадачиr   r   idz==r   r   z<br><br> uA   (Создано из пункта чек-листа задачи ))r   parent_taskr   r   )r/   )changed_fieldsTr'   )
isinstancestrr   r   getr   CmfTaskcreate_dummy_taskr   r   codesave_dummy_taskconverted_to_taskr-   r/   )clschecklist_itemr3   r   r   r   subtasks          r!   r   zCmfChecklist.create_subtask/   s    nc*#4488@PAEt^@\ 9 ^N 4B3F3F.%%&h/B..22+:L:L?J8F8K8K;?&  AB  CN  CS  CS  BT  TU  9V 3 4
 ..$$$6r2+2(d+zzr"   c                     t         j                  j                  g ddd|g      }g }|D ]K  }|j                  t        j                  ||j                               d|_        |j                  d       M |S )	u   
        Массовое создание подзадач
        :param checklist_items_ids: список id пунктов чек-листа
        :return: список ИД созданных подзадач
        )r   r   zcache_task.parentzcache_task.coder/   INr0   )r>   r3   DONETr'   )	r   r   r   appendr   r   r   r   r-   )r=   checklist_items_idsr   r   itemsresr   s          r!   r   zCmfChecklist.create_subtasksC   s     '',,4r594AT4U - W 	&DJJ|22$TXTcTc2de DKIII%	&
 
r"   c                 d    t         j                  j                  ddd|gdd|xs g ggd|i       y)u#  
        Массовое обновление статусов у экземпляров CmfChecklistItem, принадлежащих чек-листу

        :param checklist_id: ИД чек-листа, у которого будут обновляться статусы пунктов
        :param new_status: Статус, применяемый к пунктам чек-листа
        :param ignored_statuses: Список статусов, которые следует игнорировать при обновлении.
        ANDr   r   r   zNOT IN)r   valuesN)r   r   bulk_update)r=   checklist_id
new_statusignored_statusesr   r   s         r!   r	   z'CmfChecklist.update_status_of_all_itemsT   sI     	++sL1x)9)?R@ j) 	, 	
r"   )N)rB   N)__name__
__module____qualname__	api_allowr   r   api_methodsr   r*   classmethodr   r   r	   __classcell__)r    s   @r!   r   r      so    I,,88 < K
 .3 R,  &    
 
r"   r   N)cmf.includemodules.task.fieldsr   r    r"   r!   <module>rX      s     -^
=-- ^
r"   