U
    h3                     @   s2   d dl T d dlZd dlmZ G dd dejZdS )    )*N)cmf_kanban_boardc                       s   e Zd Zejjddg Zedd ZdddZd	d
 Z	e
dddddZd fdd	Zdd fdd
Zde
eed fddZ  ZS )CmfKanbanBoardget_countersclose_simple_board_periodc                 C   s   | j  d| j d| j S )N/)Z	ui_moduleZui_namecode)self r
   ,./modules/project/models/cmf_kanban_board.pyhref   s    zCmfKanbanBoard.hrefNFc                 C   sV  i i d}|rd g d|d< i }ddddg}d| j kr@|d	 | | | jD ]2}|jD ]}|jj||jj< qZd
di|d |j< qPt	| j
jj}|r|t	|g}|r| j
jj|g|d d< d}	tjstjrd}	ddddddg}
d| j ksd| j kr|
d d| j kr|
d d| j kr0|
d d| j krF|
d tjj|
|dD ]}|jrV|jjspqV|jj|krqV|	stjjd|jd d!|j|jd|jdd"	}|s|rV|d d# |j|jjg qV|d ||jj  d
  d$7  < | j rVd%| j krV| |}||d& kr6d
di|d& |< |d& | d
  d$7  < qV|S )'N)columns	swimlanes)filterdenieddebugz-kanban_board_columns.mapped_status_codes.codezkanban_bql_filter.bqlZ
limit_daysswimlane_type
logic_typeswimlane_by_logic_typetotalr   r   r   FTz--perm_effective_acl_id	parent_id%perm_security_level_allowed_ids_cachez	status.--status.code	userstoryzparent_task.logic_type.--assigneezresponsible.--epiczepic.--projectz
project.--)fieldsr   readCmfTaskname)	Zaccess_levelZinitial_acl_keyZobject_modelZobject_fieldZ	object_idZobject_parent_idis_newZperm_security_level_allowed_idsZraise_errorr      Znoner   )r   appendload_fieldskanban_board_columnsmapped_status_codesidvaluer   Zjsonloadskanban_bql_filterZbqlgZdisable_permissionsZacl_admin_modemodelsr    ZsliststatusZCmfAccessListZcheck_accessr   r   r   get_task_swimlane_aggreg_key)r	   r   ZdbgresZstatus_code_to_columnZkanban_fieldscolZst_codeZlist_filterZskip_perm_checkZtask_fieldstaccessZtask_swimlane_aggregate_keyr
   r
   r   r      sz    









    
zCmfKanbanBoard.get_countersc                    s   d| j ko j}d| j ko j}d| j ko. j}d| j ko> j}d| j kof joft fdd| jD }|sp|rx jjS |r jjS |r jjS |r jjS dS )	Nr   r   r   r   r   c                 3   s   | ]} j jj|jkV  qd S )N)parent_taskr   r(   ).0ltr2   r
   r   	<genexpr>   s     z>CmfKanbanBoard.get_task_swimlane_aggreg_key.<locals>.<genexpr>Zunset)r   r4   Zresponsibler   r   anyr   r(   )r	   r2   Zaggreg_by_userstoryZaggreg_by_assigneeZaggreg_by_epicZaggreg_by_projectZaggreg_by_logic_typer
   r7   r   r/   {   s     z+CmfKanbanBoard.get_task_swimlane_aggreg_keyzdatetime.datetime)r!   period_start
period_endc           	      O   s   | j  dkrtddd tj|| dd}|jdd tjjd	d
| ggdddgdd|gdd|ggd}|D ](}|j	|  |j
| |jdd qj|S )N)z	list.basez
list.boarduV   Периоды можно закрывать только у Простой доскиT)abortZkanban)r!   Ztree_parentZui_view_formFnotifylistsINr   =closedZstatus_closed_atz>=z<=r   )logic_prefixloadZ	cmf_alertr-   ZCmfListsaver    listr?   remover$   )	r	   r!   r:   r;   argskwargsZclosed_period_tasksZclosed_tasksZtaskr
   r
   r   r      s    
z(CmfKanbanBoard.close_simple_board_periodc                    sd  | j rVt j|| | jrF| jsFt }|j| j |  || _d| _	i }| j
dkrddddd}|rt }| |_d|_d|_d	|_d
|_|j|| dd | D }tjjdddgddgd}dd |D }	dd |D }
n|r| j
dkrtjjdddgddgd}dd |D }	dd |D }
dddd}g g g d}tjjdddgddgd}|D ]<}|jj }||krf|j|| krf|| |j qfn8ddd d!d"}	ddddd"}tjjd#d$d%d&d'd(ggd)}
|
D ]r}||jp ||jd*}t }| |_||_|j|_|r2||j |_n|g|_|	|j |_|j|| qt j||S )+Nz6 nonezboard.kanban  i  i  i  )Zbacklogopenin_progressrB   u   Канбан BacklogTZkanban_backlogc                 S   s   i | ]\}}||d  qS )rK   r
   )r5   r1   ordernor
   r
   r   
<dictcomp>   s      z'CmfKanbanBoard.save.<locals>.<dictcomp>zworkflow.coderA   ztask.kanban:defaultcolorstatus_code)r   r   c                 S   s   i | ]}|j |jqS r
   r   rP   r5   sr
   r
   r   rO      s      c                 S   s   g | ]
}|j qS r
   rQ   rS   r
   r
   r   
<listcomp>   s     z'CmfKanbanBoard.save.<locals>.<listcomp>zboard.sd_kanbanztask.sdesk_kanban:defaultc                 S   s   i | ]}|j |jqS r
   rR   rS   r
   r
   r   rO      s      c                 S   s   g | ]
}|j qS r
   rU   rS   r
   r
   r   rV      s     )rL   rM   rB   ZLIKEztask.sdesk_%status_typez#60b1bbz#3f82d8z#e36b51z#23a055)rL   rM   	in_reviewrB   r   r@   rL   rM   rX   rB   rC   i  )r"   superrF   parentr+   r-   ZCmfBqlFilterZft_projectsr$   r   rD   ZCmfKanbanBoardColumnrN   r!   systemsys_typeitemsZ	CmfStatusrG   rW   r)   lowerrQ   ZCmfStatusCodegetr   r'   rP   )r	   Zis_scaffold_kanban_boardrI   rJ   r+   r'   Zorderno_dictcolumnZstatusesZcolorsZstatus_codesZsdesk_statusesr.   rW   rQ   rN   	__class__r
   r   rF      s    
zCmfKanbanBoard.saver=   c                   s   t  j|ddi|S )Nr>   F)rY   delete)r	   r>   rI   rJ   ra   r
   r   rc     s    zCmfKanbanBoard.delete)r!   copy_attachmentscopy_allc           	         s`   t  jf ||||d|}| dddg | jD ](}|j|j|j||jd}|j| q2|S )N)r!   rd   re   is_dummyr&   zkanban_board_columns.sys_typez(kanban_board_columns.mapped_status_codes)r!   r\   rZ   r'   )rY   copyr%   r&   r!   r\   r'   r$   )	r	   r!   rd   re   rf   rJ   r0   r1   Znew_colra   r
   r   rg     s    
zCmfKanbanBoard.copy)NF)F)FFN)__name__
__module____qualname__r   r   Zapi_methodspropertyr   r   r/   strr   rF   rc   boolrg   __classcell__r
   r
   ra   r   r      s   

iir   )Zcmf.includeZdatetimeZmodules.project.fieldsr   r   r
   r
   r
   r   <module>   s   