
    h,                     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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                    di i}|rd g d|d<   i }|                      g 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	}t          j                            g d
|          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<   |S )Ncolumns)filterdenieddebug)z-kanban_board_columns.mapped_status_codes.codezkanban_bql_filter.bql
limit_daystotalr   r   FT)z--perm_effective_acl_id	parent_id%perm_security_level_allowed_ids_cachez	status.--status.code)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      )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   append)r   r   dbgresstatus_code_to_columncolst_codelist_filterskip_perm_checktaccesss              r   r   zCmfKanbanBoard.get_counters   sK     r
  	 CL !#qqqrrr, 	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 %% .K .K .KS^ & ` ` 	O 	O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I
r   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_alertr7   CmfListsaver   listrO   remover<   )	r   r    rF   rG   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_progressrR   u   Канбан BacklogTkanban_backlogc                      i | ]\  }}||d z   S )rb    ).0r@   ordernos      r   
<dictcomp>z'CmfKanbanBoard.save.<locals>.<dictcomp>   s"    #a#a#aLCC4#a#a#ar   )workflow.coderQ   ztask.kanban:defaultcolorstatus_code)r   r   c                 (    i | ]}|j         |j        S rh   r   rm   ri   ss     r   rk   z'CmfKanbanBoard.save.<locals>.<dictcomp>       <<<a!&!'<<<r   c                     g | ]	}|j         
S rh   rn   rq   s     r   
<listcomp>z'CmfKanbanBoard.save.<locals>.<listcomp>       @@@!@@@r   zboard.sd_kanban)rl   rQ   ztask.sdesk_kanban:defaultc                 (    i | ]}|j         |j        S rh   rp   rq   s     r   rk   z'CmfKanbanBoard.save.<locals>.<dictcomp>   rs   r   c                     g | ]	}|j         
S rh   ru   rq   s     r   rv   z'CmfKanbanBoard.save.<locals>.<listcomp>   rw   r   )rd   re   rR   )rl   LIKEztask.sdesk_%status_typez#60b1bbz#3f82d8z#e36b51z#23a055)rd   re   	in_reviewrR   r   rP   rT   i  )r'   superrY   parentr2   r7   CmfBqlFilterft_projectsr<   swimlane_typerU   CmfKanbanBoardColumnrj   r    systemsys_typeitems	CmfStatusrZ   r{   r/   lowerrn   CmfStatusCodegetr   r-   rm   )r   is_scaffold_kanban_boardr\   r]   r2   r-   orderno_dictcolumnstatusescolorsstatus_codessdesk_statusesr9   r{   rn   rj   	__class__s                   r   rY   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   rM   c                :     t                      j        |ddi|S )NrN   F)r}   delete)r   rN   r\   r]   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)r,   zkanban_board_columns.sys_typez(kanban_board_columns.mapped_status_codes)r    r   r~   r-   rh   )r}   copyr+   r,   r    r   r-   r<   )
r   r    r   r   r   r]   r>   r@   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   strr   rY   r   boolr   __classcell__)r   s   @r   r   r      s$       "1='A
 
K
 > > X>K K K KZ## *# (	# # # #8g- g- g- g- g- g-R $) = = = = = = =             r   r   )cmf.includedatetimemodules.project.fieldsr   r   rh   r   r   <module>r      sn         3 3 3 3 3 3n n n n n%4 n n n n nr   