U
    Sc7                     @   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 fddZ fddZeejdddddd Z fddZedd Zd d! fd"d#
Zd d$ 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   sL   | j js| js| jrd S | jjr*| jr*d S | jdkr<d| _n| j | _d S )N)list.agile_sprintZkanban)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)   C   s    z CmfList.simple_perm_allow_fieldsc                    sH  |    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r| jdkr| jr| jjdsd| jpd | _| jr2| jdkr2tjjdd| _|   t j||}| jjr^ttjj | jjsr| j jr| jD ]D}d|_d|j!_| js| j sd |_d |_ |j|ddi| qx| jr| jjr| jr| jD ]"}| j|_|j|ddi| q| j"jrD| j"rD| jD ](}d |_#|$  |%  |j|| q|S )Nzlist-changes-Zperson_code)Zevent_personsc                 S   s   g | ]
}|j qS r   )
class_name).0ir   r   r   
<listcomp>J   s     z CmfList.save.<locals>.<listcomp>T)r   r(   	cmf_ownerZcmf_owner_assistantsactivityfieldsZbusiness)coder   ZSprintzSprint 1z
list.pfeedzpfeed.base:defaultnotifyF)&_process_auto_favoritecmf_emit_eventidgZcurrent_personr2   valuevaluesr   get_projectload_fieldsr/   r%   r   modelsZCmfActivityr   r   r    r   
startswithZCmfLogicTypeZdefault_task_logic_typer   r   r   r(   r   Zcmf_deferred_taskr   recalculate_cacheZplan_start_dateZplan_end_datelistsr   workflowZsave_prepareZ_calc_workflow)r   r
   r   r   taskmemberr   r   r   r   F   sV    $






zCmfList.savec                 K   s~   | j dgd tjj|dgd}|s8td| ddd t| jjD ]}| j| |j	| qD|
  | 
  |   | S )Nr(   r0   r7   r1   u:   Целевой список для объединения u    не существуетT)abort)r<   r=   r   r   r   listr(   r9   removeappendr   delete)r   target_list_idr   target_listrB   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   r9   )Zchildroot_parentr   r   rO      s    

z(CmfList.get_project.<locals>.root_parent)r%   r9   r   r   rN   r   r;      s    zCmfList.get_projectc                    s<   | j   | j D ]}|j|  |jdd qt j||S )NFr4   )r(   r   r@   rG   r   r   rI   )r   r
   r   mr   r   r   rI      s
    

zCmfList.deletec                    s"   t  j|fdd| j di|S )NZmsg_urlz/project/List/z/kanban)r   create_eventr2   )r   Zevent_personr   r   r   r   rR      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(   r0      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   rF   lenr(   rT   r8   debugr7   r   r9   r6   )_kwargsr	   Ztotal_countZ
calc_countr   Z
real_countZ
event_datar   r   r   r?      s     

 zCmfList.recalculate_cachec                    sB   t t jf |}| j r:| j s:|| jjf | t|S r   )setr   all_relation_personsr   r   Z	executorsupdaterF   )r   r   Zpersonsr   r   r   r\      s    zCmfList.all_relation_personsc                 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_typeZpfeedZcmf_created_at)r1   filterorder_bycache_status_typez!=CLOSEDtext)r^   r_   r1   )r=   rM   r   r   rF   r7   )r	   Zdefault_parentZdefault_pfeedr   r   r   r   
pfeed_list   s2    


  zCmfList.pfeed_listN)rJ   c                   s   |  dddg d }|d k	r4tjj|ddddgd}| jj D ]8}|jdkrPq@|r`|j	| |j
|  |jd	d
 q@g | _t j|d|i|S )Nzmembers.cache_status_typezmembers.listsfavorite_forZkanban_status_columnszkanban_status_columns.statuszkanban_status_columns.work_listrD   ra   FrP   rJ   )r<   r=   r   r   r(   r9   copyr`   r@   rH   rG   r   rd   r   archive)r   rJ   r
   r   rK   rC   r   r   r   rf      s     
zCmfList.archive)
field_namec                   sx   |r^|dkrd S |   }|r^|dg | dg |j| jfD ]}| j|jjd|d q@d S t j|d|i| d S )Nr(   r.   u   Уведомление)Z	person_idr   r   rb   )Z_node_parentr<   r.   Z_place_notifyr7   r9   r   all_place_notify)r   rb   rg   r
   r   Zprojectpersonr   r   r   rh      s    zCmfList.all_place_notifyc                 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$   rd   )r(   r   r&   r.   r9   r<   addZresponsible
person_varr   rd   rH   rG   )r   resultrB   ri   rk   r   r   r   r5     s    



zCmfList._process_auto_favoritec                 C   s(   |  dg | jjdd| _|   dS )u-   
        Запуск спринта
        rA   ZIN_PROGRESS)Zstatus_typeN)r<   rA   Zget_default_statusstatusr   r   r   r   r   do_start'  s    zCmfList.do_startc                 C   s   d| j  d| j d| j S )NrW   )Z	ui_moduler!   r2   r   r   r   r   href/  s    zCmfList.href)__name__
__module____qualname__classmethodr   r   r   r#   r'   r)   r   rL   r;   rI   rR   staticmethodZ
celery_apprB   r?   r\   rc   rf   rh   r5   rn   propertyro   __classcell__r   r   r   r   r      s0   E
r   N)Zcmf.includeZmodules.project.fieldsr   Zcommon.models.cmf_active_entityr   r   r   r   r   r   <module>   s   