
    EKic3                     L    d dl  d dlZd dlmZ  G d dej                        Zy)    )*N)cmf_kanban_boardc                        e Zd Zej                  j
                  ddgz   Zed        ZddZd Z	de
dd	d
d	fdZd fd	Zdd fd
Zdde
dedef fdZ xZS )CmfKanbanBoardget_countersclose_simple_board_periodc                 R    | j                    d| j                   d| j                   S )N/)	ui_moduleui_namecode)selfs    ,./modules/project/models/cmf_kanban_board.pyhrefzCmfKanbanBoard.href   s&    ..!4<<.$))==    Fc                    i i d}|rd g d|d<   i }g d}d| j                   v r|j                  d       | j                  |       | j                  D ]T  }|j                  D ]/  }|j
                  j                  ||j                  j                  <   1 ddi|d	   |j
                  <   V t        j                  | j                  j                  j                        }|r|t        j                  |      g}|r(| j                  j                  j                  |g|d   d
<   d}	t        j                  st        j                  rd}	g d}
d| j                   v sd| j                   v r|
j                  d       d| j                   v r|
j                  d       d| j                   v r|
j                  d       d| j                   v r|
j                  d       t        j                   j#                  |
|      D ]J  }|j$                  r|j$                  j                  s'|j$                  j                  |vr@|	st        j&                  j)                  d|j*                  dd|j
                  |j,                  d|j.                  d	      }|s:|r7|d   d   j                  |j
                  |j$                  j                  g       |d	   ||j$                  j                        dxx   dz  cc<   | j                   sd| j                   vs| j1                  |      }||d   vr
ddi|d   |<   |d   |   dxx   dz  cc<   M |S )N)columns	swimlanes)filterdenieddebug)z-kanban_board_columns.mapped_status_codes.codezkanban_bql_filter.bql
limit_daysswimlane_type
logic_typeswimlane_by_logic_typetotalr   r   r   FT)z--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)	access_levelinitial_acl_keyobject_modelobject_field	object_idobject_parent_idis_newperm_security_level_allowed_idsraise_errorr      noner   )r   appendload_fieldskanban_board_columnsmapped_status_codesidvaluer   jsonloadskanban_bql_filterbqlgdisable_permissionsacl_admin_modemodelsr'   sliststatusCmfAccessListcheck_accessr   r   r   get_task_swimlane_aggreg_key)r   r   dbgresstatus_code_to_columnkanban_fieldscolst_codelist_filterskip_perm_checktask_fieldstaccesstask_swimlane_aggregate_keys                 r   r   zCmfKanbanBoard.get_counters   s     

 CL !# B4---  !9:',, 	2C22 I<?FFLL%gll&8&89I&-q\C	N366"	2
 jj!7!7!;!;!@!@A&

6(:;K&*&<&<&@&@&E&Ev%NCL"  A$4$4"O H$,,,@R@R0R:;+++/0T'''y)***|,%%[%M 	LA88188==xx}}$99"--::!'9P9P!*ddQ[[ 454[4[ % ;  GX.55qttQXX]]6KL	N0?@IQNI!!&D4F4F*F.2.O.OPQ.R+2c+6FFELaLC$%@AK !<=gF!KF;	L> 
r   c                 "   d| j                   v xr j                  }d| j                   v xr j                  }d| j                   v xr j                  }d| j                   v xr j                  }d| j                   v xr, j                  xr t        fd| j                  D              }|s|rj                  j                  S |rj                  j                  S |rj                  j                  S |rj                  j                  S y)Nr!   r"   r#   r$   r   c              3   x   K   | ]1  }j                   j                  j                  |j                  k(   3 y w)N)parent_taskr   r8   ).0ltrP   s     r   	<genexpr>z>CmfKanbanBoard.get_task_swimlane_aggreg_key.<locals>.<genexpr>   s*     [((++ruu4[s   7:unset)r   rU   responsibler#   r$   anyr   r8   )r   rP   aggreg_by_userstoryaggreg_by_assigneeaggreg_by_epicaggreg_by_projectaggreg_by_logic_types    `     r   rF   z+CmfKanbanBoard.get_task_swimlane_aggreg_key{   s    )T-?-??QAMM'4+=+==O!--4#5#55@!&&%););;I		+t/A/AA  \amm  \[t?Z?Z[[ 	 "6==###==###669999<<r   r(   period_startzdatetime.datetime
period_endc                    | j                   j                         dvrt        dd       t        j	                  || d      }|j                  d       t        j                  j                  d	d
| ggg ddd|gdd|gg      }|D ]J  }|j                  j                  |        |j                  j                  |       |j                  d       L |S )N)z	list.basez
list.boarduV   Периоды можно закрывать только у Простой доскиT)abortkanban)r(   tree_parentui_view_formFnotifylistsIN)r    =closedstatus_closed_atz>=z<=r   )logic_prefixload	cmf_alertrA   CmfListsaver'   listrj   remover4   )	r   r(   ra   rb   argskwargsclosed_period_tasksclosed_taskstasks	            r   r   z(CmfKanbanBoard.close_simple_board_period   s     !!#+FFnvz{$nn$DW_n`   . ~~**dTF#*|4z2	3
*  ! 	$DJJd#JJ12IIUI#	$
 #"r   c                 (   | j                   r\t        |   |i | | j                  r\| j                  sPt
        j                         }|j                  j                  | j                         |j                          || _        d| _	        i }| j                  dk(  rddddd}|rot
        j                         }| |_        d|_        d|_        d	|_        d
|_         |j                  |i | |j!                         D 	ci c]  \  }}	||	dz    }}}	t
        j"                  j%                  g dddg      }
|
D ci c]  }|j&                  |j(                   }}|
D cg c]  }|j*                   }}n9|r| j                  dk(  rt
        j"                  j%                  g dddg      }
|
D ci c]  }|j&                  |j(                   }}|
D cg c]  }|j*                   }}dddd}g g g d}t
        j"                  j%                  g dddg      }|D ][  }|j,                  j.                  j1                         }||v s,|j*                  ||   vs>||   j                  |j*                         ] n3ddddd}ddddd}t
        j2                  j%                  ddg dg      }|D ]  }|j5                  |j&                        xs |j5                  |j,                  d      }	t
        j                         }| |_        |	|_        |j                  |_        |r||j&                     |_        n|g|_        ||j&                     |_         |j                  |i |  t        |   |i |S c c}	}w c c}w c c}w c c}w c c}w )Nz6 nonezboard.kanbani  i  i  i  )backlogopenin_progressrm   u   Канбан BacklogTkanban_backlog)workflow.coderl   ztask.kanban:defaultcolorstatus_code)r   r%   zboard.sd_kanban)r   rl   ztask.sdesk_kanban:default)r~   r   rm   )r   LIKEztask.sdesk_%status_typez#60b1bbz#3f82d8z#e36b51z#23a055)r~   r   	in_reviewrm   r   rk   ro   i  )r/   superrt   parentr<   rA   CmfBqlFilterft_projectsr4   r   rp   CmfKanbanBoardColumnordernor(   systemsys_typeitems	CmfStatusru   r   r   r   r   r9   lowerCmfStatusCodegetr7   )r   is_scaffold_kanban_boardrw   rx   r<   r7   orderno_dictcolumnrK   r   statusesscolorsstatus_codessdesk_statusesrC   r   r   	__class__s                     r   rt   zCmfKanbanBoard.save   s   ;;GL$)&){{4#9#9$*$7$7$9!!--44T[[A!&&():&!)D"$  N2# #'"	  ,#88:F$(FM%)FN"8FK$(FM&6FOFKK00 MYL^L^L`#aLCC4$7#aL#a!++00H#]3 1 
 4<<a!&&!''/<<7?@!@@)d.?.?CT.T!++00N#]3 1  4<<a!&&!''/<<7?@!@@ !#'"  #% '#
 "(!1!1!6!6D)=9 "7 "
 - TF"("4"4":":"@"@"BK"&99f>P>PXklwXx>x+K8??@R@RST &#,!*'	 !#'!%"	   &3388"D*XY  9  
  , -&**;+;+;<o@P@PQ\QhQhjn@o446 $!()..&1D[EUEU1VF.2=F.%k&6&67T,V,- w|T,V,,Q $b =@ =@s   M:?N #N5N
Nrh   c                &    t        |   |ddi|S )Nri   F)r   delete)r   ri   rw   rx   r   s       r   r   zCmfKanbanBoard.delete  s    w~t<E<V<<r   copy_attachmentscopy_allc                     t        |   d||||d|}| j                  g d       | j                  D ]5  }|j                  |j                  |j
                  ||j                         7 |S )N)r(   r   r   is_dummy)r6   zkanban_board_columns.sys_typez(kanban_board_columns.mapped_status_codes)r(   r   r   r7    )r   copyr5   r6   r(   r   r7   )	r   r(   r   r   r   rx   rH   rK   r   s	           r   r   zCmfKanbanBoard.copy  s    glx7GRZemxqwx 
 	
 ,, 	CHHXX$'$;$;	  	 
r   )NF)F)FFN)__name__
__module____qualname__r   r   api_methodspropertyr   r   rF   strr   rt   r   boolr   __classcell__)r   s   @r   r   r      s    "11=='A
 
K
 > >gR&## *# (	#8g-R $) =    r   r   )cmf.includedatetimemodules.project.fieldsr   r   r   r   r   <module>r      s#      3^%44 ^r   