U
    _gf                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_checklist_itemc                       sd   e Zd ZdZejjdddg Z fddZ fddZe	dd
dZ
e	dd Ze	dd Z  ZS )CmfChecklistItemT$create_checklist_items_from_templatecopy_items_to_checklistcreate_checklist_itemc                    s   |  ddddg | jr8| jjp"d| j_| j jd7  _| jjrv| jdkrv| jjdkrv| jjp`d| j_| j jd7  _| jjdd	 t	 j||S )
Nstatus
cache_taskz!cache_task.checklists_items_countz&cache_task.checklists_items_done_countr      )ZDONEZCANCELTZ	only_data)
load_fieldsZis_newr	   checklists_items_countr   Z
is_changedoldZchecklists_items_done_countsavesuper)selfargskwargs	__class__ "./cmf/models/cmf_checklist_item.pyr      s    zCmfChecklistItem.savec                    s   |  ddg t  S )Nparentzparent.sl_owner_lock)r   r   _check_sl_owner_lock)r   r   r   r   r   !   s    z%CmfChecklistItem._check_sl_owner_lockOPENc                 C   s:   t  }||_||_||_||_||_||_|  |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	checklistZtaskr   r   r   r   Zchecklist_itemr   r   r   r   %   s    z&CmfChecklistItem.create_checklist_itemc                 O   s   t jjdd|gdgd}t jjdd|gd}t jjdd|gdgd}g }t|D ]*\}	}
| ||j|
j	|
j
|	}|| qP|S )uf  
        Создаём пункты чек-листа (CmfChecklistItem) из шаблона чек-листа (CmfChecklistTemplate)
        :param checklist_id: id чек-листа
        :param checklist_template_id: id шаблона чек-листа
        :return: множество id созданных пунктов чек-листа
        r   =r   filterfields)r$   r   )r   CmfChecklistgetZCmfChecklistTemplateZCmfChecklistTemplateItemlist	enumerater   r   r   r   append)r    Zchecklist_idZchecklist_template_idr   r   r!   templateZchecklist_template_itemsitemsindexitemitem_idr   r   r   r   =   s    z5CmfChecklistItem.create_checklist_items_from_templatec              	   O   s   t jjdgdd|gd}t jjdgdd|gd}t jjdd|gdddgd}t jjdgdd|gd	gd
}|rv|d jnd}|j}	|	j  g }
|D ]@}| 	||j|j
|j|d }|
| |	 jd7  _|d7 }q|	jdd |
S )u  
        Копирование пунктов чек-листа в другой чек-лист

        :param source_checklist_id: id чек-листа, из которого копируем пункты
        :param target_checklist_id: id чек-листа, в который копируем пункты
        :return: множество id созданных пунктов чек-листа
        r   r   r"   )r%   r$   r   r   r   r#   z-orderno)r%   r$   Zorder_byr   r
   Tr   )r   r&   r'   r   r(   r   r   r   loadr   r   r   r*   r   )r    Zsource_checklist_idZtarget_checklist_idr   r   Zsource_checklistZtarget_checklistZchecklist_itemsZlast_ordernoZparent_taskresultr.   r/   r   r   r   r   Q   s2    	



z(CmfChecklistItem.copy_items_to_checklist)r   )__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   