U
    &d:                     @   s6   d dl T d dlmZ d dlmZ G dd dejZdS )    )*)cmf_list)CmfActiveEntityc                       s   e Zd Ze fddZdd Zdd Zdd Z fd	d
Z fddZ	 fddZ
dd Zdd Zdd fdd
Z fddZeejdddddd Zedd Zd d!d"d#Z fd$d%Zd&d' Zd(d) Zed*d+ Z  ZS ),CmfListc                    s   t  j||}|S N)superget)clsargskwargsres	__class__ $./modules/project/models/cmf_list.pyr      s    zCmfList.getc                 C   s   | j r
d S | jj  | _ d S r   )default_task_workflowZ	scheme_wfloadselfr   r   r   _calc_default_workflow   s    zCmfList._calc_default_workflowc                 C   s   | j jsd S | jsd S | j s6d | j_| jjdd d S d| j }| jj  | jj}|r~d|_ |jdd d|j d| }| | j_| jjdd t| d S )NTZ	only_datau`   Все новые задачи проекта будут добавляться в список FuW   Сбросили галочку Список по умолчанию у спринта z. )Zis_default_list
is_changedparentZdefault_listsavenamer   	cmf_alert)r   msgZcurrent_default_listr   r   r   _calc_is_default_list   s$    zCmfList._calc_is_default_listc                 C   s^   | j js| js| jrd S | jjr*| jr*d S | jdkr<d| _n| jdkrNd| _n| j | _d S )N)list.agile_sprintZkanban
list.pfeedpfeed)Z
logic_typer   is_newZui_view_formlogic_prefixui_namelowerr   r   r   r   _calc_ui_view_form2   s    

zCmfList._calc_ui_view_formc                    s   t   dddddg S )Nmembers.responsiblezmembers.cmf_ownertree_parentr   auto_favorite)r   save_preload_fieldsr   r   r   r   r)   @   s    zCmfList.save_preload_fieldsc                    s   t   dg S )Nmembers)r   simple_perm_allow_fieldsr   r   r   r   r+   E   s    z CmfList.simple_perm_allow_fieldsc                    s  |    td| j dtjjjitjgd dd | jddD dgkrLd S | jsv| 	 | _| jrv| jj
d	d
dgd | js| jr| jj r| jj| _| js| jr| jj r| jj| _| jstjjdd| _| jrJ| jdkrJ| jr| jj
dgd | jr| jjs| jpd | _n,| jr6| jjdsJd| jpBd | _| jrn| jdkrntjjdd| _|   t j||}| jjrttjj | j js| j!jr| jD ]D}d|_d|j"_| j s| j!sd |_ d |_!|j|ddi| q| jr>| jjr>| jr>| jD ]"}| j|_|j|ddi| q| j#jr| j#r| jD ](}d |_$|%  |&  |j|| qV|S )Nzlist-changes-Zperson_code)Zevent_personsc                 S   s   g | ]
}|j qS r   )
class_name).0ir   r   r   
<listcomp>L   s     z CmfList.save.<locals>.<listcomp>T)r   r*   	cmf_ownerZcmf_owner_assistantsactivityfieldsZbusiness)coder   add_object_type1ZSprintzSprint r   zpfeed.base:defaultnotifyF)'_process_auto_favoritecmf_emit_eventidgZcurrent_personr4   valuevaluesr   get_projectload_fieldsr1   r'   r   modelsZCmfActivityr   r!   r"   r5   r   
startswithZCmfLogicTypeZdefault_task_logic_typer   r   r   r*   r   Zcmf_deferred_taskr   recalculate_cacheplan_start_dateplan_end_datelistsr   workflowZsave_prepareZ_calc_workflow)r   r
   r   r   taskmemberr   r   r   r   H   s^    $






zCmfList.savec                 K   s   | j dgd tjj|dddgd}|s<td| ddd	 t| jjD ]}| j| |j	| qH|
  | 
  |   | S )
Nr*   r2   rC   rD   r:   r3   u:   Целевой список для объединения u    не существуетTabort)r?   r@   r   r   r   listr*   r<   removeappendr   delete)r   target_list_idr   target_listrG   r   r   r   
move_tasks   s    zCmfList.move_tasksc                    s    fdd  | j jS )Nc                    s0   | sd S | j dkr| S | j   | jjS d S )N
CmfProject)r,   r'   r   r<   )Zchildroot_parentr   r   rU      s    

z(CmfList.get_project.<locals>.root_parent)r'   r<   r   r   rT   r   r>      s    zCmfList.get_projectF)TEXKOM_db_deletec                   s\   | j j|dgd t| j D ](}|j|  |jdd | j | qt j|d|i|S )NrE   )Zinclude_deletedr3   Fr7   rV   )r*   r   rL   rE   rM   r   r   rO   )r   rV   r
   r   mr   r   r   rO      s    zCmfList.deletec                    s"   t  j|fdd| j di|S )NZmsg_urlz/project/List/z/kanban)r   create_eventr4   )r   Zevent_personr   r   r   r   rY      s    zCmfList.create_eventT<   )Z	only_onceZsoft_time_limitZsystem_taskc               	   K   s   t j}d}d}|jddgdD ]}|d7 }t|j}|j|kr|d7 }td|j d| d|j  ||_|j	d	d
 |jj
|jj
d}td|j | td| qtd| d| d |S )uI   Актуализация кеша кол-ва задач в списке.r   cache_members_countr*   r2      zUpdate cache_members_count z ->  Tr   )Znode_idZelements_countztree-node-count-changes-ztree-node-count-changeszRecalculate /z lists caches)r@   r   rL   lenr*   r[   r;   debugr:   r   r<   r9   )_kwargsr	   Ztotal_countZ
calc_countr   Z
real_countZ
event_datar   r   r   rB      s     

 zCmfList.recalculate_cachec                 C   s   t jjdd}g }|rpt jjdgdd|jgdddggdgd	}t jjdddgd
ddgdd|jggdgdgd}n&t jjdddgd
ddggdgdgd}||S )NT)Z
is_defaultr   Z	parent_idz==Z	list_typer    Zcmf_created_at)r3   filterorder_bycache_status_typez!=CLOSEDtext)rb   rc   r3   )r@   rS   r   r   rL   r:   )r	   Zdefault_parentZdefault_pfeedr   r   r   r   
pfeed_list   s2    


  zCmfList.pfeed_listN)rP   c                O   s   | j dkrtddd | dddg g | _| jjdd	| _| j d
| _|   | ddg d }|d k	rt	j
j|ddddgd}| jD ]N}|j dkr|j|  |jdd q|r||jkr|j| |jdd q|S )NIN_PROGRESSuL   Завершить можно только запущенный СпринтTrJ   r   rF   favorite_forre   Zstatus_typeu    (Закрыто)members.cache_status_typezmembers.listsZkanban_status_columnszkanban_status_columns.statuszkanban_status_columns.work_listrI   FrW   )rd   r   r?   ri   rF   get_default_statusstatusr   r   r@   r   r   r*   Zclosed_listsrN   rE   )r   rP   r
   r   rQ   rH   r   r   r   sprint_complete   s.    



zCmfList.sprint_completec                    s   |  ddddg | jdkr| jdks2tddd	 td
d | jD ]@}d}|jD ]}|| krP|jsPd} qlqP|rBd|_|jdd qBt	 j
|| | S )Nr"   rk   zmembers.lists.cmf_archivedrd   r   re   uT   Можно архивировать только завершенный спринтTrJ   c                 S   s
   | j dkS )Nre   )rd   )tr   r   r   <lambda>      z!CmfList.archive.<locals>.<lambda>Fr   )r?   r"   rd   r   rb   r*   rE   Zcmf_archivedr   r   archive)r   r
   r   rG   Z
do_archiveZlstr   r   r   rr     s    


zCmfList.archivec                 C   s   | j js| jjsdS | jjh}| ddg | j D ]}||jj q2|D ]F}|rJ|j	  |jD ],}| jrz| j
| qb| jjrb| j
| qbqJdS )up   
        Всем участникам задач добавляем список в избранное
        Nr&   ri   )r*   r   r(   r0   r<   r?   addZresponsible
person_varr   ri   rN   rM   )r   resultrG   Zpersonrt   r   r   r   r8     s    



zCmfList._process_auto_favoritec                 C   s(   |  dg | jjdd| _|   dS )u-   
        Запуск спринта
        rF   rh   rj   N)r?   rF   rl   rm   r   r   r   r   r   do_start5  s    zCmfList.do_startc                 C   s   d| j  d| j d| j S )Nr^   )Z	ui_moduler#   r4   r   r   r   r   href=  s    zCmfList.href)__name__
__module____qualname__classmethodr   r   r   r%   r)   r+   r   rR   r>   rO   rY   staticmethodZ
celery_apprG   rB   rg   rn   rr   r8   rv   propertyrw   __classcell__r   r   r   r   r      s.   I
r   N)Zcmf.includeZmodules.project.fieldsr   Zcommon.models.cmf_active_entityr   r   r   r   r   r   <module>   s   