
    fi3                     H    d dl T d dlZd dlmZ  G d dej                  ZdS )    )*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                 4    | 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<==$)===    NFc                    i i d}|rd g d|d<   i }g d}d| j         v r|                    d           |                     |           | j        D ]7}|j        D ]}|j        j        ||j        j        <   ddi|d	         |j        <   8t          	                    | j
        j        j                  }|r|t          	                    |          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|
                    d           d| j         v r|
                    d           d| j         v r|
                    d           d| j         v r|
                    d           t          j                            |
|          D ]}|j        r|j        j        s|j        j        |vr&|	sst          j                            d|j        dd|j        |j        d|j        d	  	        }|s5|r2|d         d                             |j        |j        j        g           |d	         ||j        j                          dxx         dz  cc<   | j         rQd| j         vrH|                     |          }||d         vrddi|d         |<   |d         |         dxx         dz  cc<   !|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  B  B4---  !9:::''', 	2 	2C2 I I<?FL%gl&899&-q\C	N36""jj!7!;!@AA 	<&

6(:(:;K 	O&*&<&@&Ev%NCL"  	#A$4 	#"O H  H  H$,,,@R0R0R:;;;+++/000T'''y)))***|,,,%%[%MM 	L 	LA8 18= x}$999" -::!'9P!*dQ[ 454[ % ;     MGX.55qtQX]6KLLL	N0?@IIIQNIII! L&D4F*F*F.2.O.OPQ.R.R+2c+6FFFELaLC$%@AK !<=gFFF!KFFF
r   c                 \   d| j         v oj        }d| j         v oj        }d| j         v oj        }d| j         v oj        }d| j         v o&j        ot          fd| j        D                       }|s|rj        j        S |rj        j        S |rj        j        S |rj        j        S dS )Nr!   r"   r#   r$   r   c              3   L   K   | ]}j         j        j        |j        k    V  d S )N)parent_taskr   r8   ).0ltrP   s     r   	<genexpr>z>CmfKanbanBoard.get_task_swimlane_aggreg_key.<locals>.<genexpr>   s2      [[(+ru4[[[[[[r   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-??QAM'4+==O!-4#55@!&%);;I	+t/AA  \am  \[[[[t?Z[[[[[ 	  	$"6 	$=## 	$=## 	69 	 9<wr   r(   period_startzdatetime.datetime
period_endc                    | j                                         dvrt          dd           t                              || d          }|                    d           t          j                            d	d
| ggg ddd|gdd|gg          }|D ]L}|j        	                    |            |j        
                    |           |                    d           M|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Fnvz{{{{$nn$DW_n``   ... ~**dTF#***|4z2	3
*   ! 	$ 	$DJd###J1222IIUI####""r   c                    | j         r t                      j        |i | | j        rZ| j        sSt
                                          }|j                            | j                   |                                 || _        d| _	        i }| j
        dk    rddddd}|rgt
                                          }| |_        d|_        d|_        d	|_        d
|_         |j        |i | d |                                D             }t
          j                            g dddg          }d |D             }	d |D             }
n|r| j
        dk    rt
          j                            g dddg          }d |D             }	d |D             }
dddd}g g g d}t
          j                            g dddg          }|D ]S}|j        j                                        }||v r/|j        ||         vr ||                             |j                   Tn3ddddd}	ddddd}t
          j                            ddg dg           }
|
D ]}|                    |j                  p|                    |j        d!          }t
                                          }| |_        ||_        |j        |_        |r||j                 |_        n|g|_        |	|j                 |_         |j        |i |  t                      j        |i |S )"Nz6 nonezboard.kanban  i  i  i  )backlogopenin_progressrm   u   Канбан BacklogTkanban_backlogc                      i | ]\  }}||d z   S )r}    )rV   rK   ordernos      r   
<dictcomp>z'CmfKanbanBoard.save.<locals>.<dictcomp>   s"    #a#a#aLCC4#a#a#ar   )workflow.coderl   ztask.kanban:defaultcolorstatus_code)r   r%   c                 (    i | ]}|j         |j        S r   r   r   rV   ss     r   r   z'CmfKanbanBoard.save.<locals>.<dictcomp>       <<<a!&!'<<<r   c                     g | ]	}|j         
S r   r   r   s     r   
<listcomp>z'CmfKanbanBoard.save.<locals>.<listcomp>       @@@!@@@r   zboard.sd_kanban)r   rl   ztask.sdesk_kanban:defaultc                 (    i | ]}|j         |j        S r   r   r   s     r   r   z'CmfKanbanBoard.save.<locals>.<dictcomp>   r   r   c                     g | ]	}|j         
S r   r   r   s     r   r   z'CmfKanbanBoard.save.<locals>.<listcomp>   r   r   )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   CmfKanbanBoardColumnr   r(   systemsys_typeitems	CmfStatusru   r   r9   lowerr   CmfStatusCodegetr   r7   r   )r   is_scaffold_kanban_boardrw   rx   r<   r7   orderno_dictcolumnstatusescolorsstatus_codessdesk_statusesrC   r   r   r   	__class__s                   r   rt   zCmfKanbanBoard.save   s   ; d	-EGGL$)&))){ ;4#9 ;$*$7$7$9$9!!-44T[AAA!&&((():&!)D"$ N22# #'"	    , b#88::F$(FM%)FN"8FK$(FM&6FOFK0000 $b#aLL^L^L`L`#a#a#aL!+00HHH#]3 1  
 =<8<<<@@x@@@) /d.?CT.T.T!+00NNN#]3 1   =<8<<<@@x@@@ !#'"    #% ' '#
 "(!1!6!6DDD)=9 "7 " "
 - T TF"("4":"@"@"B"BK"&999f>PXklwXx>x>x+K8??@RSSST &#,!*'	  !#'!%"	     &388"D*X*X*XY  9    
  , - -&**;+;<<o@P@PQ\Qhjn@o@o4466 $!().& ?1D[EU1VF..2=F.%k&67T,V,,,,uww|T,V,,,r   rh   c                :     t                      j        |ddi|S )Nri   F)r   delete)r   ri   rw   rx   r   s       r   r   zCmfKanbanBoard.delete  s#    uww~t<E<V<<<r   copy_attachmentscopy_allc                 
    t                      j        d||||d|}|                     g d           | j        D ]D}|                    |j        |j        ||j                  }|j                            |           E|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   )r   copyr5   r6   r(   r   r7   r4   )
r   r(   r   r   r   rx   rH   rK   new_colr   s
            r   r   zCmfKanbanBoard.copy  s    egglx7GRZemxxqwxx 
 
 
 	 	 	
 , 	5 	5ChhCH(+&)363J  L LG $++G4444
r   )NF)F)FFN)__name__
__module____qualname__r   r   api_methodspropertyr   r   rF   strr   rt   r   boolr   __classcell__)r   s   @r   r   r      s3       "1='A
 
K
 > > X>g g g gR  &## *# (	# # # #8g- g- g- g- g- g-R $) = = = = = = =             r   r   )cmf.includedatetimemodules.project.fieldsr   r   r   r   r   <module>r      sn         3 3 3 3 3 3] ] ] ] ]%4 ] ] ] ] ]r   