
    oh                     @    d dl T d dlmZ  G d dej                  ZdS )    )*)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_itemsNc           	           t                      j        || j        |d|}t          j                            dd| gdg          D ],}|                    ||j        ||j        d|j                  }-|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          ./cmf/models/cmf_checklist.pyr   zCmfChecklist.copy   s    %d49VUUfUU+0038MWZV[0\\ 	, 	,D		9!'9#"l " , ,II     F)TEXKOM_db_deletec                   |                      g d           t          j                            |           D ]} |j        |d|i| | j        j        pd| j        _        | j        j        r| j        xj        | j        z  c_        | j        j        pd| j        _        | j        j        r| j        xj        | j	        z  c_        | j        
                    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	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 	LDDKK0@KFKKKK,0K,N,SRS);- 	MK..$2LL..26+2Y2^]^/;2 	WK33t7VV334(((uww~tQ6FQ&QQQr"   c           	         t          |t                    r&t          j                            ddgdd|g          }|j        r
|j         dnd}t          j                            |j        ||j	        | d|j
         d	
          }t          j                            |d                   }|                    i            ||_        |                    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88@PAEt^@\ 9 ^ ^N 4B3FN.%////B.22+:L?J8F8K;?  9V  9V  CN  CS  9V  9V  9V 3 4 4
 .$$$66r222+2(d+++zr"   c                    t           j                            g ddd|g          }g }|D ]S}|                    t                              ||j                             d|_        |                    d           T|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     ',,4r4r4r594AT4U - W W 	& 	&DJJ|22$TXTc2ddeee DKIII%%%%
r"   rB   c                 b    t           j                            ddd|gdd|pg ggd|i           dS )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   sZ     	++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      s        I,8 < < < K
 
 
 
 
 
 .3 R R R R R R R,   [&   [  
 
 
 [
 
 
 
 
r"   r   N)cmf.include
cmf.fieldsr   r    r"   r!   <module>rX      sd        $ $ $ $ $ $^
 ^
 ^
 ^
 ^
=- ^
 ^
 ^
 ^
 ^
r"   