U
    Vcr2                     @   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 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  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                    s   t   dddddg S )Nz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| 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rn| jdkr6tjjd| jd}|r| j| | jr | jjdsnd| jp,d | _n8| jdkrn| jrZ| jjdsnd| jpfd | _| jr| jdkrt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rZ| jjrZ| jrZ| jD ]"}| j|_|j|ddi| q6| j%jr| j%r| jD ](}d |_&|'  |(  |j|| qr|S )Nzlist-changes-Zperson_code)Zevent_personsc                 S   s   g | ]
}|j qS r   )
class_name).0ir   r   r   
<listcomp>!   s     z CmfList.save.<locals>.<listcomp>T)
is_changedmembers	cmf_ownerZcmf_owner_assistantactivityfieldsZbusiness)codezlist.agile_epic)system	parent_idZEpiczEpic 1zlist.agile_sprintZSprintzSprint z
list.pfeedzpfeed.base:defaultnotifyF))_process_auto_favoritecmf_emit_eventidgZcurrent_personr#   valuevaluesparentget_projectload_fieldsr    r   r   modelsZCmfActivityr   Zis_newZlogic_prefixZ
CmfRoadmapr%   Zroadmapsappendname
startswithZCmfLogicTypeZdefault_task_logic_typer   saver   r   Zcmf_deferred_taskr   recalculate_cacheZplan_start_dateZplan_end_datelistsr   ZworkflowZsave_prepareZ_calc_workflow)r   r
   r   Zdefault_roadmapr   taskmemberr   r   r   r5      s`    $






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   r!   r*   r"   u:   Целевой список для объединения u    не существуетT)abort)r0   r1   r   r   Z	cmf_alertlistr   r,   remover2   r5   delete)r   target_list_idr   target_listr8   r   r   r   
move_tasksi   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   rD   y   s    

z(CmfList.get_project.<locals>.root_parent)r   r,   r   r   rC   r   r/   v   s    zCmfList.get_projectc                    s<   | j   | j D ]}|j|  |jdd qt j||S )NFr'   )r   r   r7   r=   r5   r   r>   )r   r
   r   mr   r   r   r>      s
    

zCmfList.deletec                    s"   t  j|fdd| j di|S )NZmsg_urlz/project/List/z/kanban)r   create_eventr#   )r   Zevent_personr   r   r   r   rG      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   r!      zUpdate cache_members_count z ->  T)Z	only_data)Znode_idZelements_countztree-node-count-changes-ztree-node-count-changeszRecalculate /z lists caches)r1   r   r<   lenr   rI   r+   debugr*   r5   r,   r)   )_kwargsr	   Ztotal_countZ
calc_countr   Z
real_countZ
event_datar   r   r   r6      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updater<   )r   r   Zpersonsr   r   r   rQ      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.   r%   z==Z	list_typeZpfeedZcmf_created_at)r"   filterorder_bycache_status_typez!=closedtext)rS   rT   r"   )r1   rB   r   r   r<   r*   )r	   Zdefault_parentZdefault_pfeedr   r   r   r   
pfeed_list   s2    


  zCmfList.pfeed_listN)r?   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_listr:   rV   FrE   r?   )r0   r1   r   r   r   r,   copyrU   r7   r2   r=   r5   rY   r   archive)r   r?   r
   r   r@   r9   r   r   r   r[      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_idr3   msgrW   )Z_node_parentr0   r   Z_place_notifyr*   r,   r   all_place_notify)r   rW   r\   r
   r   Zprojectpersonr   r   r   r^      s    zCmfList.all_place_notifyc                 C   s   | j js| jjsdS | jjh}| j D ]}||jj q$| j  |D ]F}|rF|j	  |j	D ],}| jrv| j
| q^| jjr^| j| q^qFdS )up   
        Всем участникам задач добавляем список в избранное
        N)r   r   r   r   r,   addZresponsiblerY   r   
person_varr2   r=   )r   resultr8   r_   ra   r   r   r   r(      s    




zCmfList._process_auto_favorite)__name__
__module____qualname__classmethodr   r   r   r5   rA   r/   r>   rG   staticmethodZ
celery_appr8   r6   rQ   rX   r[   r^   r(   __classcell__r   r   r   r   r      s$   L
r   N)Zcmf.includeZmodules.project.fieldsr   Zcommon.models.cmf_active_entityr   r   r   r   r   r   <module>   s   