U
    yb$h'                     @   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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   sn  di i}|rd g d|d< i }|  dddg | jD ]2}|jD ]}|jj||jj< q>ddi|d |j< q4t| jj	j}|r|t|g}|r| jj	j|g|d d	< d
}t
jst
jrd}tjjddg|dD ]}	|	jr|	jjsq|	jjj|krq|sFtjjd|	jdd|	j|	jd
|	jd
d	}
|
sF|r|d d |	j|	jjjg q|d ||	jjj  d  d7  < q|S )Ncolumns)filterdenieddebugz-kanban_board_columns.mapped_status_codes.codezkanban_filter.bqlZ
limit_daystotalr   r   FTz	status.--zstatus.status_code.code)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      )load_fieldskanban_board_columnsmapped_status_codesidvaluer   Zjsonloadskanban_filterZbqlgZdisable_permissionsZacl_admin_modemodelsr   Zsliststatusstatus_codeZCmfAccessListZcheck_accessZperm_effective_acl_idZ	parent_idZ%perm_security_level_allowed_ids_cacheappend)r	   r   ZdbgresZstatus_code_to_columncolZst_codeZlist_filterZskip_perm_checktaccessr
   r
   r   r      sX     


   $zCmfKanbanBoard.get_countersz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INzstatus.code=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   U   s    
z(CmfKanbanBoard.close_simple_board_periodc                    sN  | j r@t 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 ]\}t }| |_||j |_|j|_|r||j |_n|g|_|	|j |_|j|| qt j||S )*Nz6 nonezboard.kanban  i  i  i  )Zbacklogopenin_progressr0   u   Канбан BacklogTZkanban_backlogc                 S   s   i | ]\}}||d  qS )r9   r
   ).0r%   ordernor
   r
   r   
<dictcomp>   s      z'CmfKanbanBoard.save.<locals>.<dictcomp>zworkflow.coder/   ztask.kanban:defaultcolorr"   )r   r   c                 S   s   i | ]}|j |jqS r
   r   r?   r<   sr
   r
   r   r>      s      c                 S   s   g | ]
}|j qS r
   r"   rA   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
   r@   rA   r
   r
   r   r>      s      c                 S   s   g | ]
}|j qS r
   rC   rA   r
   r
   r   rD      s     )r:   r;   r0   ZLIKEztask.sdesk_%status_typez#60b1bbz#3f82d8z#e36b51z#23a055)r:   r;   	in_reviewr0   r   r.   r:   r;   rF   r0   r1   )r   superr4   parentr   r    ZCmfTaskFilterZft_projectsr#   Zswimlane_typer2   ZCmfKanbanBoardColumnr=   r   systemsys_typeitemsZ	CmfStatusr5   rE   r   lowerr"   ZCmfStatusCoder   r   r?   )r	   Zis_scaffold_kanban_boardr7   r8   r   r   Zorderno_dictcolumnZstatusesZcolorsZstatus_codesZsdesk_statusesr!   rE   r"   	__class__r
   r   r4   q   s    
zCmfKanbanBoard.saver+   c                   s   t  j|ddi|S )Nr,   F)rG   delete)r	   r,   r7   r8   rN   r
   r   rP      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   rQ   rR   is_dummyr   zkanban_board_columns.sys_typez(kanban_board_columns.mapped_status_codes)r   rJ   rH   r   )rG   copyr   r   r   rJ   r   r#   )	r	   r   rQ   rR   rS   r8   r$   r%   Znew_colrN   r
   r   rT      s    
zCmfKanbanBoard.copy)NF)F)FFN)__name__
__module____qualname__r   r   Zapi_methodspropertyr   r   strr   r4   rP   boolrT   __classcell__r
   r
   rN   r   r      s   

Ehr   )Zcmf.includeZdatetimeZmodules.project.fieldsr   r   r
   r
   r
   r   <module>   s   