
     ho                     D    d dl  d dlmZ  G d dej                        Zy)    )*)cmf_checklist_itemc                        e Zd ZdZej
                  j                  g dz   Z fdZ fdZe	dd       Z
e	d        Ze	d        Z xZS )	CmfChecklistItemT)$create_checklist_items_from_templatecopy_items_to_checklistcreate_checklist_itemc                 0   | j                  g d       | j                  rH| j                  j                  xs d| j                  _        | j                  xj                  dz  c_        | j                  j
                  rn| j                  dv r`| j                  j                  dvrH| j                  j                  xs d| j                  _        | j                  xj                  dz  c_        | j                  j                  d       t        |    |i |S )N)status
cache_taskz!cache_task.checklists_items_countz&cache_task.checklists_items_done_countr      )DONECANCELT	only_data)
load_fieldsis_newr   checklists_items_countr   
is_changedoldchecklists_items_done_countsavesuper)selfargskwargs	__class__s      +./modules/task/models/cmf_checklist_item.pyr   zCmfChecklistItem.save   s      	 ;;59__5[5[5`_`DOO2OO22a72;;!!{{00T[[__L^5^>Boo>i>i>nmn;;;q@;t,w|T,V,,    c                 F    | j                  ddg       t        | 	         S )Nparentzparent.sl_owner_lock)r   r   _check_sl_owner_lock)r   r   s    r   r"   z%CmfChecklistItem._check_sl_owner_lock!   s%    ($:;<w+--r   c                     t         j                         }||_        ||_        ||_        ||_        ||_        ||_        |j                          |j                  S )u:  
        Создаёт пункт чек-листа и сохраняет его.

        :param checklist: Чек-лист, к которому относится пункт.
        :param task: Задача, связанная с чек-листом.
        :param name: Название пункта.
        :param text: Текст пункта.
        :param orderno: Порядковый номер пункта.
        :param status: Статус пункта (по умолчанию 'OPEN').
        :return: ID созданного пункта.
        )
modelsr   nametextr!   r   r   ordernor   id)cls	checklisttaskr%   r&   r'   r   checklist_items           r   r	   z&CmfChecklistItem.create_checklist_item%   sZ      002"" )$(! &!(   r   c                    t         j                  j                  dd|gdg      }t         j                  j                  dd|g      }t         j                  j                  dd|gdg      }g }t        |      D ]I  \  }	}
| j                  ||j                  |
j                  |
j                  |	      }|j                  |       K |S )uf  
        Создаём пункты чек-листа (CmfChecklistItem) из шаблона чек-листа (CmfChecklistTemplate)
        :param checklist_id: id чек-листа
        :param checklist_template_id: id шаблона чек-листа
        :return: множество id созданных пунктов чек-листа
        r(   =r!   filterfields)r0   r&   )r$   CmfChecklistgetCmfChecklistTemplateCmfChecklistTemplateItemlist	enumerater	   r!   r%   r&   append)r)   checklist_idchecklist_template_idr   r   r*   templatechecklist_template_itemsitemsindexitemitem_ids               r   r   z5CmfChecklistItem.create_checklist_items_from_template=   s     ''++D#|3LV^U_+`	..224F[:\2]#)#B#B#G#GPXZ]_gOhPVx $H $Y $%=> 	"KE4//	9;K;KTYYX\XaXachiGLL!	" r   c           	         t         j                  j                  dgdd|g      }t         j                  j                  dgdd|g      }t         j                  j	                  dd|gg d      }t         j                  j	                  dgdd|gdg	      }|r|d
   j
                  nd
}|j                  }	|	j                  j                          g }
|D ]c  }| j                  ||j                  |j                  |j                  |dz         }|
j                  |       |	xj                  dz  c_        |dz  }e |	j                  d       |
S )u  
        Копирование пунктов чек-листа в другой чек-лист

        :param source_checklist_id: id чек-листа, из которого копируем пункты
        :param target_checklist_id: id чек-листа, в который копируем пункты
        :return: множество id созданных пунктов чек-листа
        r!   r(   r.   )r1   r0   )r%   r&   r'   r/   r'   z-orderno)r1   r0   order_byr   r   Tr   )r$   r2   r3   r   r6   r'   r!   r   loadr	   r%   r&   r8   r   )r)   source_checklist_idtarget_checklist_idr   r   source_checklisttarget_checklistchecklist_itemslast_ordernoparent_taskresultr?   r@   s                r   r   z(CmfChecklistItem.copy_items_to_checklistQ   sf    "..228*dTWYlMm2n!..228*TSVXkLl2m 1166xN^>_>Y 7 [ ..33I;;CSJZ:[=GL 4 J 3?|A..A&--**//1# 		D//0@1A1H1H15151=1A	2G MM'"..!3.AL		 	4(r   )OPEN)__name__
__module____qualname__	api_allowr   r   api_methodsr   r"   classmethodr	   r   r   __classcell__)r   s   @r   r   r      sj    I$55AA E K-(. ! !.  &    r   r   N)cmf.includemodules.task.fieldsr   r    r   r   <module>rW      s      2m):: mr   