
    
/iR                        d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlT d dlZd	Z G d
 dej        j        j                  ZddlmZ dS )    N)copyfields)person)desc)func)relativedelta)*zLST-filter_is_nonec                       e Zd ZdZg dZdgZdZej        j	        j
        j        g dz   Zej        j	        j
        j        dz   Z G d dej        j	        j
        j                  Z G d d	ej        j                  Zej                            ej        j        d
dd          Zej                            ej        j        dddd          Zej                            ej        j        dddd          Zej                            ej        j        dddd          Zej                            ej        j        dddd          Zej                            ej        j        dddd          Z G d dej        j	        j
        j                  Z G d dej        j	        j
        j                  Zej                            ej        j        ddgdd          Z G d dej        j                  Zej                            ej        j        dg dddg d d!          Z ej                            ej        j        d"g dddg d d!          Z!ej                            ej        j"        d#d$          Z#ej                            ej        j        dd%d&d'd&dd(d)gd*	  	        Z$ej                            ej        j%        d+d,gd-.          Z&ej                            ej        j        d/dgd0          Z'ej                            ej        j(        d1d2d3d4d5d6d7d8d9ddd:;          Z)ej                            ej        j*        d<d=d>d?d@dAdBC          Z+ej                            ej        j,        dDdEdFG          Z-ej                            ej        j.        dHdEdI          Z/ej                            ej        j        dJdK          Z0ej                            ej        j        dLdK          Z1ej                            ej        j        dMN          Z2ej                            ej        j        dON          Z3ej                            ej        j        dPN          Z4ej                            ej        j*        dQdRdSdTdUdVdWdXC          Z5ej                            ej        j        dYdZ          Z6ej                            ej        j"        dd[d\dddd]^          Z7ej                            ej        j        d_dg d`a          Z8ej                            ej        j"        d[dbdcdddgde          Z9ej                            ej        j        dfdgddh          Z:ej                            ej        j"        diddj          Z;ej                            ej        j*        dkdldmdndodpd]dddq          Z<ej                            ej        j        drdsd'ddt          Z= ej        ej>        duddvdw          Z? G dx dyej        j"                  Z@ej                            ej        jA        dzd-d{|          ZB fd}ZCeDd~             ZEddZFddZGd ZHd ZId ZJd ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZTd ZUd ZVd ZWd ZX	 	 d fd	ZYeZdd            Z[eZd fd	            Z\eZ	 	 d fd	            Z]eZd fd	            Z^eZ	 	 	 	 	 	 	 d  fd	            Z_eZ	 d fd	            Z`eDd             Zaeajb        d             Zad Zcd Zdd Zed Zfd Zg fdZh fdZid Zjd Zkd Zld Zmd Znd Zo fdZp fdZq fdZr fdZs fdZtd Zud Zvd ZwddddexfdZyd Zzd Z{d Z|d Z}d Z~ddEd fd
Zd Zd Z fdZeZdd fd
            ZeZdd fd
            Zd ZeZ fdÄ            ZdddddĜdededef fdǄZej                            ej        j*        dddddddddΜϦ          Zej                            ej        j*        dddddddddd՜Ϧ          Zej                            ej        j*        dddddddddd՜Ϧ          Zej                            ej        j*        dddddddddd՜Ϧ          Zej                            ej        jA        ddd-ڦ          Zdۄ Zd!d܄Zd݄ Zej                            ej        j        dddd          Zd Zd Zd Z fdZd Z fdZd fd	Zd Ze                    e                    ej                            ej        dd          g          ej                  Ze edddgdd          dd                        Zd ZddefdZd"dZd!dZ fdZ fdZdEddef fdZ fdZededefd            Zd ZeZd             Z fdZeZd#d             ZeZd$defd            Zd Zed             Zd Ze ed          d	                         Zd%dZeZd             ZeZdddddddd            ZeZdedefd            ZeZ	 d& fd	            ZÐd Ze eddgdd          d'dedefd                        Zň fdZeZdedexfd            Zǈ xZS ((  CmfActiveEntityT)codenamestatus	cmf_ownerresponsiblepriority
alarm_datetags	executors
spectators
no_controlwaiting_formarktime_estimateplan_start_dateplan_end_dateperiod_intervalperiod_next_datedeadlineparentcompanyz-orderno)archivedisable_aclmacros_page_tree_gettask_transition_runpublish_for_invitedarchive_restoresend_sharelinkset_user_rate)CmfAttachmentc                        e Zd Z fdZ xZS )CmfActiveEntity.logic_typec                    t                                          |           | j        r]| j        rX| j        rS| j        j                                         | j        j                            d          d         | j        _        d S d S d S d S )N:r   )super
_set_valueinstancevaluer   logic_prefixload	partitionselfr2   	__class__s     $./common/models/cmf_active_entity.pyr0   z%CmfActiveEntity.logic_type._set_valueA   s    GGu%%%} S: S$) SM.33555151J1J31O1OPQ1RDM...	S SS S S S    )__name__
__module____qualname__r0   __classcell__r8   s   @r9   
logic_typer,   @   sA        	S 	S 	S 	S 	S 	S 	S 	S 	Sr:   r@   c                   @     e Zd ZdZdZddgZdZdZ fdZ fdZ	 xZ
S )CmfActiveEntity.statusu   СтатусTworkflow_ididc                     t                                          |           | j        r| r| j        pd | j        _        d S d S N)r/   r0   r1   status_typecache_status_typer6   s     r9   r0   z!CmfActiveEntity.status._set_valueQ   sO    GGu%%%} T262K4;K2St///T Tr:   c                    t          |t                    rJ| j        rC| j        j                                        r%| j        j                            |d          x}r|S t                                          |          S )NF)rH   raise_error)
isinstancestrr1   workflowr4   get_default_statusr/   cast)r7   r2   r   r8   s      r9   rP   zCmfActiveEntity.status.castV   sx    %%% "$- "DM<R<W<W<Y<Y "!]3FFSXfkFlll6 "!M77<<&&&r:   )r;   r<   r=   captionnullableoptions_list_params	log_levelfullsearch_indexr0   rP   r>   r?   s   @r9   r   rB   I   sv         ,d3		T 	T 	T 	T 	T
	' 	' 	' 	' 	' 	' 	' 	' 	'r:   r   u"   Дата смены статусаF)rQ   visibleno_aclu"   Дата начала работы)rQ   readonlyrV   rW   u(   Дата окончания работыu(   Дата на подтверждениеu   Дата закрытияu   Контрагент
CmfCompany)rQ   modellinkablerU   c                       e Zd ZdZdS )CmfActiveEntity.nameu   НазваниеN)r;   r<   r=   rQ    r:   r9   r   r]   n   s        $r:   r   c                       e Zd ZdS )CmfActiveEntity.codeN)r;   r<   r=   r^   r:   r9   r   r`   r   s        r:   r   u   Постановщик	CmfPerson)rQ   modelsr[   rU   c                   *    e Zd ZdZdgZdZdgZdZdZdS )CmfActiveEntity.responsibleu   Исполнительra   T	parent_idN)	r;   r<   r=   rQ   rb   r[   rS   options_list_query_allrU   r^   r:   r9   r   rd      s5        **m!%r:   r   u   Соисполнители)
CmfProject
CmfOrgUnitCmfPersonGroupra   CmfRole)zCmfProject.executorszCmfOrgUnit.tree_nodeszCmfPersonGroup.rg_memberszCmfRole.person)rQ   rb   leftr[   nested_fieldsnested_fields_is_edge_parentu   Наблюдателиu!   Без подтверждения)rQ   defaultu   ТэгиCmfTagmembersactivity_idre   )rightrQ   rZ   backrefwidgetr[   rS   rU   u   Вложенияr*   r    )rQ   rb   rs   u   Ждем ответа)rQ   rb   r[   u   Приоритетu   Минимальныйu   Низкийu   Обычныйu   Высокийu   Критичныйu   Блокирующий)rE   r            0CmfPriority)rQ   choicesrn   rR   rU   rt   u   Оценка12345)r|   r}   r~   r   r   )rQ   r{   u!   Оценка полезностиr      )rQ   minmaxu6   Количество оценок полезности)rQ   rn   rR   u   Будильник)rQ   indexu   Крайний срокu&   Плановая дата начала)rQ   u.   Плановая дата завершенияu   Дата повторенияu%   Интервал повторенияu   Ежедневноu   Раз в 2 дняu   Еженедельноu   Ежемесячноu   Ежеквартальноu   Ежегодно)r|   r}   73090365u   Склонирован из)rQ   rX   CmfBoolu   Шаблонalways)rV   idgetrQ   rX   rn   r   	load_modeu!   Родительская нода)rg   	CmfFolderCmfActiveEntityFilterCmfDocumentCmfTaskCmfComponentCmfAssetSchemeCmfRegistry)rQ   rR   rb   u   Сделаноu!   Значение чекбоксаrI   )rt   rQ   commentvirtualrequired_fieldsrV   u   Вид деятельностиCmfActivity)rQ   rZ   rR   r[   u!   Задача просрочена)rQ   rV   rn   u   Кеш: Тип статусаu   Открытu   В работеu+   Подтверждение закрытияu   Закрыто)OPENIN_PROGRESS	IN_REVIEWCLOSED)rQ   r{   r   rV   r   rW   u!   Настройка статусаCmfStatusOpt)rQ   rZ   rs   rV   rW   u   кэш полейlazy)rQ   rV   r   rW   c                   $    e Zd ZdZdZdZdZd ZdS )CmfActiveEntity.approvedu1   Согласовано руководителемTFc                 h   g }| r|                     d           n|                     d           t          j        j                                        }|r|                     |j        j                   |                     t          j        j        j        pd           d                    |          S )Nu   Согласовано.u&   Отмена согласования.  )appendgcurrent_personprimary_roler4   r   r2   join)r7   	msg_partsroles      r9   	html_diffz"CmfActiveEntity.approved.html_diff5  s    I K  !:;;;;  !IJJJ#05577D 2  111Q-28>B???88I&&&r:   N)r;   r<   r=   rQ   r   rR   rn   r   r^   r:   r9   approvedr   /  s7        E	' 	' 	' 	' 	'r:   r   u   ПодписчикиCmfFollower)rQ   rs   rZ   c                     t                      j        |g|R i |}|dk    r|S |dk    r| j        j        rdS |dk    rdS |dk    r| j        j        rdS |dk    r| j        j        rdS t          j        j        | j	        k    r'd}| j
        | j	        k    rd}| j        dk    rd}|rdS dS | j        r| j        t          j        j        k    rdS |d	k    r| j        rdS dS dS )
Nrw   r   rE   r   TFr   rv   r   )r/   _get_field_log_levelr   
is_changedr   r   r   r   rD   cmf_owner_idcmf_modified_by_idrI   responsible_idr   )r7   
field_nameargskwargsrT   silent_owner_changesr8   s         r9   r   z$CmfActiveEntity._get_field_log_levelE  sH    1EGG0MdMMMfMM	>> &&4+;+F&2&&1 DI$81 D$8$C1 $"333#'  &$*;;;',$%66',$# qq " 	d&9Q=M=P&P&P1 %% r qqr:   c                     | j         j        S rG   )notify_valuer7   s    r9   _notifyzCmfActiveEntity._notify  s    {!!r:   r   c                 l    | j                                                             |          }|| _        | S rG   )rN   r4   rO   r   )r7   rH   r   r   r   s        r9   set_default_statusz"CmfActiveEntity.set_default_status  s/    ##%%88EEr:   Nc                 `   d}d}t           j                            dd| gddt          j        j        ggdg          }|s-t                               | |t          j        j                  }n||_        |                                 t           j                            dd| gdg          }|r>t          d	 |D                       }t          |          }||z  }t          |d
          }nd}t          |d
          }|| _        || _        |                                  | j        | j        dS )Ng        r   r    ==r   user_ratingfilterr   )r    r   r   c              3   $   K   | ]}|j         V  d S rG   )r   ).0ratings     r9   	<genexpr>z0CmfActiveEntity.set_user_rate.<locals>.<genexpr>  s%      HHfv1HHHHHHr:   rw   rv   )r   user_rating_count)rb   CmfUserRatinggetr   r   rD   r   saveslistsumlenroundr   )r7   rater   r   current_user_ratingratingstotal_ratings          r9   r)   zCmfActiveEntity.set_user_rate  sa   $266$PT?UXceiklk{k~W  ?A  KX  JY6  Z  Z" 	3"("6"6dPT`a`p`s"6"t"t.2+  """&,,XtT4JTaSb,cc 	)HHHHHHHL #G&)::KQ//KK !a..K&!2		+!%!7
 
 	
r:   c                 l    t           j                            dd| g          D ]} |j        |i | d S Nr    r   )r   )rb   
CmfCommentlistdelete)r7   r   r   r   s       r9   _delete_commentsz CmfActiveEntity._delete_comments  sP    (--hd5K-LL 	, 	,GGND+F++++	, 	,r:   c                 l    t           j                            dd| g          D ]} |j        |i | d S r   )rb   r*   r   r   )r7   r   r   attachs       r9   _delete_attachmentsz#CmfActiveEntity._delete_attachments  sP    *//$7M/NN 	+ 	+FFM4*6****	+ 	+r:   c                 t   | j         }|                    d          d                                         }|                     |d|                    dd                    }t          |d          r|j        j        rd|v r|d= |                                D ]\  }}||j	        v rt          |||            d|_        | |_        d|j        _        |                                 | j        rn| j        j        rb| j        j        r| j        | j        z
  }n| j        | j        z
  }t(          j                            t(          j        j        	          |z   |_        | j        r@| j        j        r4t(          j                            t(          j        j        	          |_        |                    d
           |S )uC   
        Создание задачи по шаблону
        |rE   Tis_dummyN)r   copy_allr   listsFtz	only_data)r   splitstripr   r   hasattrr   r2   itemsr   setattris_templatecloned_fromr   r   r   r   is_not_nullr   cmf_created_atdatetimenowtimezoneutc)r7   r   new_obj_namer1   attrr2   deadline_deltas          r9   create_from_templatez$CmfActiveEntity.create_from_template  s   " y#))#..r288::99,

S]_cHdHd9ee8W%% 	 (.*> 	 7fCTCTw!<<>> 	/ 	/KD%x&&$...$# +/' 	a 9 	a* E!%!@!%1D!D ( 1 5 59J9N 5 O OR` `H  	Q ; 	Q!)!2!6!6(:K:O!6!P!P8%%% r:   c                     d S rG   r^   r   s    r9   _calc_wf_simple_logicz%CmfActiveEntity._calc_wf_simple_logic      r:   c                     | j         j        s| j        j        s	| j        rdS | j        j        r	| j        rdS | j         p| j        | _        dS )u   
        Вычисляем человека от которого требуются действия по задаче
        :return:
        N)r   r   r   r   r   s    r9   _calc_waiting_forz!CmfActiveEntity._calc_waiting_for  sj     '	~(	 #	
 F & 	4+; 	F+=t~r:   c                     dS )u   
        Общая функция вычисления диапазона плана и будильника
        :return:
        Nr^   r   s    r9   
_calc_planzCmfActiveEntity._calc_plan  s	    
 	r:   c                 n   | j         j        sd S | j         rNt          | j         j        t          j                  r*t                              | j                  j	        | _
        nQ| j         rCt          | j         j        t                    r$| j         j	                                        | _
        nd | _
        d S rG   )r    r   rL   r2   rb   rg   APPget_cache_projectre   r3   parent_logic_prefixr   r4   r   s    r9   _calc_parent_logic_prefixz)CmfActiveEntity._calc_parent_logic_prefix  s    {% 	F; 	,:dk&79JKK 	,'*'<'<T^'L'L'YD$$[ 	,Z(9?KK 	,'+{'?'D'D'F'FD$$'+D$r:   c                    | j         j        s| j        s| j        j        sd S | j         s'| j        s | j         j        rt	          d|  d           | j        j        r | j         j        s|                                  | j         r'| j                            | j                   | _         d S | j                                        | _         d S )NuQ   Невозможно назначить пустой статус объекту Tabort)r   )r   r   is_newrN   	cmf_alert
is_definedsave_preparerO   r   s    r9   _calc_statuszCmfActiveEntity._calc_status  s    K"	{	
 }'	 F{ 	~4; 	~4;3I 	~pjnppx|}}}}
 =# 	 DK,B 	  ; 	=-::$+:NNDKKK-::<<DKKKr:   c                 x   | j         j        s	| j        sd S |                     g d           | j                                         | j        j        r5| j        j        dvr'| j        j        dv r| j	                                         | j        dk    r | j
        s| j
                                         | j        dvr| j
        rd | _
        | j        dk    r | j        s| j                                         | j        dvr| j        rd | _        | j        dk    r"| j        s| j                                         d S d S d S )N)status_closed_atstatus_review_atstatus_in_progress_start)r   r   r   r   r   )r   r   r  load_fieldsstatus_modified_atset_nowrI   oldnewstatus_in_progress_endr  r  r  r   s    r9   _calc_status_timestampsz'CmfActiveEntity._calc_status_timestamps+  sv   K"	{	 F
 	]]]^^^ 	''))) "- 	2&*2III&*.EEE'//111 !X--d6K-!))+++!)@@@TEZ@$(D! ![009N0!))+++!)@@@TEZ@$(D! !]224;X2)1133333 3222r:   c                     | j         j        s| j        j        r| j        rd S | j         sd S | j        s/| j                                         |                                  d S d S rG   )r   r   r   r  _cacl_next_periodr   s    r9   _calc_periodiczCmfActiveEntity._calc_periodicR  s     +	%0	9=9N	 F# 	F$ 	%!))+++""$$$$$	% 	%r:   c                 h   t           j                             t           j        j                  }| j        |k    rt          | j        j                  dk     r\t          j        t          | j        j                            }| j        j        |z   | _        | j	        r| j	        j        |z   | _	        nft          t          t          | j        j                  dz                      }| j        j        |z   | _        | j	        r| j	        j        |z   | _	        | j                                         d S )N   days)months)r   r   r   r   r   intr   r2   	timedeltar   r	   r   r  )r7   cur_date
shift_daysshift_monthss       r9   r  z!CmfActiveEntity._cacl_next_periodb  s   $(():)>?? H,, 4'-..33%/S9M9S5T5TUUU
(,(=(Cj(P%= E$(M$7*$DDM,CD<P<V8W8WZ\8\4]4]^^^(,(=(Cl(R%= G$(M$7,$FDM!!!!!r:   c                 `    | j         j        sd S | j         j        rt          dd           d S d S )NuE   Задача не может быть без постановщикаTr  )r   r   is_nullr  r   s    r9   _calc_ownerzCmfActiveEntity._calc_ownerv  sI    ~( 	F>! 	k]eijjjjjj	k 	kr:   c                     g d}| j         r	dg dg dg}|dd| j        gg}t          j                            |g d          D ]}|                    |            dS )	u\   
        Запуск триггеров для create или save
        :return:
        )cache_action=r   OR)r&  r'  create	cmf_modelr'  )json_filterjson_entry_pointjson_action	func_name	json_datar   N)r  
class_namerb   
CmfTriggerr   check)r7   _filtertriggers      r9   _exec_triggerzCmfActiveEntity._exec_trigger}  s    
 0//; 	]:::<[<[<[\G[#t?@(--W Fo Fo Fo- p p 	  	 G MM$	  	 r:   c                     | j         j        r\| j         rW|                                 }|rC|| j        k    r:|                    g d           || _        |                                  d S d S d S d S d S )N)r   cmf_owner_assistantsactivity
project_id)tree_parentr   _node_parentr    r  r  )r7   r    s     r9   _calc_parentzCmfActiveEntity._calc_parent  s    & 	$4+; 	$&&((F $&DK//""#b#b#bccc$!!#####	$ 	$ 	$ 	$$ $//r:   c                    | j         j        r| j        r| j         r| j         j        dk     r| j        j        dk    st
          j        | j        k    rr| j         r0| j         j        | j        j        t          j
        d          z   k    r=d}| j        t
          j        k    r|dz  }n|dz  }t          |d	           d S d S d S d S d S d S )
Nr   i     )hoursu`   Нельзя передвигать будильник дальше крайнего срока.uz    Обратитесь к постановщику для разрешения на сдвиг крайнего срока.uB    Сдвиньте крайний срок если уверены.Tr  )r   r   r   ager   r   r   r   r2   r   r  r  )r7   msgs     r9   _check_alarm_date_validz'CmfActiveEntity._check_alarm_date_valid  s   O&	'	' _		' )-(;a(?(?$(722a6F$.6X6X_ 7Y(,(=ATW_WipqWrWrWrAr(s(s
 uC~!111  T  T[[c&&&&&&#	' 	' 	' 	' )@(?6X6X(s(sr:   c                 x   |                      g d           t          j         G d d                      } |            }| j        r| j        j                            d          rt                              | j                  }||_        d|j	         |_
        |j        j        |_        |j        j        |_        |j        j        |_        |j        j        |_        |j        j        |_        |j        j        |_        |j        j        |_        |j        j        |_        | j        r| j        j        r| j        |_        d| j        j	         |_
        | j        j        j        |_        | j        j        j        |_        | j        j        j        |_        | j        j        j        |_        | j        j        j        |_        | j        j        j        |_        | j        j        j        |_        | j        j        j        |_        | j        r,| j        j        j        |_        | j        j        j        |_        |S )N)workflow.enable_sl_controlworkflow.sl_deadline_shiftworkflow.sl_only_owner_approveworkflow.sl_deny_no_approve2workflow.sl_allow_executor_change_nofatal_deadlineworkflow.sl_task_need_approve!workflow.sl_task_only_owner_closez workflow.sl_readonly_closed_task5workflow.sl_deny_closing_task_before_closing_subtasks.   workflow.sl_сlose_task_after_closing_subtasksz7workflow.sl_deny_closing_task_before_closing_checklistsc                       e Zd ZU dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed<   dZeed	<   dZeed
<   dZeed<   dZdZdS );CmfActiveEntity._get_sl_options.<locals>.SimpleLogicOptionsNsl_deadline_shiftsl_only_owner_approvesl_deny_no_approve)sl_allow_executor_change_nofatal_deadlinesl_task_need_approvesl_task_only_owner_closesl_readonly_closed_task,sl_deny_closing_task_before_closing_subtasks%   sl_сlose_task_after_closing_subtasks.sl_deny_closing_task_before_closing_checklists)r;   r<   r=   rO  r  __annotations__rP  boolrQ  rR  rS  rT  rU  rV  rW  rX  sl_controllersl_controller_strr^   r:   r9   SimpleLogicOptionsrN    s         %)s)))*.!4...'++++>B5tBBB)- $----1$d111-1#T111AE8$EEE:>14>>>CG:DGGG M $r:   r]  CmfProject:u   Проект: u   Бизнес-процесс: )r  dataclasses	dataclassre   r2   
startswithr   r   r[  r   r\  rO  rP  rQ  rR  rS  rT  rU  rX  rN   enable_sl_controlrV  rW  )r7   r]  optionsprojects       r9   _get_sl_optionszCmfActiveEntity._get_sl_options  s/    	 
 
 
 	 	 	* 
		% 	% 	% 	% 	% 	% 	% 
		%  %$&&> 	Bdn2==mLL 	B++DN;;G$+G!(G(G(GG%(/(A(GG%,3,I,OG))0)C)IG&@G@q@wG=+2+G+MG(/6/O/UG,.5.M.SG+ELE{  FBGB= 
	HT]< 
	H$(MG!(\HZ(\(\G%(,(G(MG%,0M,O,UG))-)I)OG&@D@w@}G=+/=+M+SG(/3}/U/[G,.2m.S.YG+EI]  FB  FHGB= 	vCG=C}  DDG@<@M<o<uG9r:   c                 ^   | j         j        sd S | j        rd S | j        r| j         r| j        j        dk    r| j         j        r| j         j        t          j        j        	                                k     rf| 
                                j        pd}| j         t          j        |          z
  | _        | j        j        dk    r| j                                         | j        t           j        k    rt           j        t           j        k    r| j        j        r|                     | j        | j        dt           j        j         d| j         j         d| j         j         d| j         d| j        j         dt          j        	                    t          j        j        	          d
           d S d S d S d S )Nr   r  r   u^    сдвинул крайний срок задачи<br>
                Было:&nbsp;&nbsp;u)   <br>
                Стало:<b>&nbsp;z1<b><br>
                <a target="_blank" href="z">z</a>
                r   rw   )r   r   rA  r   r   )r   r   r  r   r@  r  cmfr   CmfDateTimer   re  rO  r   r  r  r   r   r   system_person
user_local_place_notifyr   r  hrefr2   r   r   )r7   shifts     r9   _calc_deadlinezCmfActiveEntity._calc_deadline  s   M$	 F; 	F ? 	*t} 	*1Dq1H1HT]M^1Hcgcpctwz  xB  xN  xR  xR  xT  xT  dT  dT ((**<AE"mh.@e.L.L.LLDO"Q&&'')))>Q---!2Bao2U2UZ^ZhZs2U ~Y!*/  &*m&7 %)]%6  +/)  8<y  
 $,00H4E4I0JJ  
 
 
 
 
 .-2U2U2U2Ur:   c                 ,   |                      g d           t           t                      j        dd|i|          }| j        r7|r| j                             |           |                    | j                   | j        r7|r| j                             |           |                    | j                   | j                            |          }d}| j	        r4| j	        j
        j        dk    rt                              | j                  }|r|s|r|j                            |          }|                    |           | j                            |          }	|r|	s|r|j                            |          }	|                    |	           |rA|r?|j        r8|r|j                             |           |                    |j        g           t%                      }
|D ]$}||j        |k    r|
                    |           %|
S )u   
        Получение списка конечных пользователей затронутых обьектом
        )cmf_owner.user_localwaiting_for.user_localresponsible.user_localzspectators.user_localzexecutors.user_localcmf_author.user_localparent.cmf_owner.user_localr   r   Nrg   r^   )r  setr/   all_relation_personsr   addr   r   
all_nestedr    r2   r0  r   r   re   updater   r   r   rj  r   )r7   r   rj  with_parent_ownerinherit_executorsr   resultr   parent_projectr   retur8   s               r9   rv  z$CmfActiveEntity.all_relation_persons  si   
 	 R R R 	S 	S 	S 1UWW1JJJ6JJKK 	) < ,,F,;;;JJt'((( 	) < ,,F,;;;JJt'(((N--V-<<	; 	C4;,7<GG 224>BBN  	KY 	K> 	K&0;;6;JJIi   _//v/>>
 	MZ 	MN 	M'2==V=LLJj!!! 	: :.": : H",888GGG~78999
 ff 	 	A!Q\Z%?%?

1
r:   c           	          |sg }|sdg}t          j        j        d	|                    dd           |                    dd           |d|d|}rfd|D             }|r||d         |d                  }|S )
Norderno	object_idrC   T)obj_idrC   r   closed_lastorder_byc                     g | ]=}|j         	                                |j         j                                        v ;|>S r^   )r   lowerr2   )r   r   searchs     r9   
<listcomp>z7CmfActiveEntity.status_options_list.<locals>.<listcomp>W  sE    kkkfv{kv||~~QWQ\QbQhQhQjQj?j?j6?j?j?jr:   r   rv   r^   )rb   CmfWorkflowget_status_listr   )clsobject_fieldsr   r  slicer  r   r~  s        `  r9   status_options_listz#CmfActiveEntity.status_options_listE  s      	F 	#!{H 0 
::k400%))->>
 
 
 
  	lkkkkkkkC 	)eAhuQx'(C
r:   c                     |g }|o|                     d          }|o|                     d          }|dg ddd|gggdg ddd|gggd	d
| j        gg} t                      j        |f||d|S )Nlogic_type_idr9  r(  )ft_logic_typesr   Nr  IN)ft_projectsr   Nr  ft_modelr   )r  r   )r   r0  r/   field_options_list)r  relation_field_namer  r   r   ft_logic_type_idft_project_idr8   s          r9   resolution_options_listz'CmfActiveEntity.resolution_options_list\  s    >F(O]->->-O-O%I-*;*;L*I*I6669I4RbQc8de444}d]O6\]tS^4 *uww)*=t]cittmstttr:   c                    |sg }|sdg}|sg }|g dg}|o|                     d          }|                     dd           }	|r|s|	s|dd|gg} |j        d            |j        d            t                      j        |f||||d|S )	Nr   )r3   r   zlist.releasere   r  r'  sys_typer    )r  r   r   r  )r   r   r/   r  )r  r  r  r   r   r  filter_by_projectr   re   r  r8   s             r9   releases_options_listz%CmfActiveEntity.releases_options_listl  s      	F 	 xH 	F@@@A!Dm&7&7&D&D	Hd++ 	=+ 	=6 	={C;<F 	j!!!h)uww)y/<VTZemy yqwy y 	yr:   c                     |sg }|rEt           j                            |dg          }d }|r|j        r|j        j        }|ddd|gg dgg} t                      j        |f||d|S )Nzproject.security_level_schemerD   r   r(  r    r   )systemr   T)r   r  )rb   r   r   rd  security_level_schemer/   r  )r  r  r   r  r   taskr  r8   s          r9    perm_security_level_options_listz0CmfActiveEntity.perm_security_level_options_list  s     	F 	g>%%<[;\%]]D$(! K K(,(J%th6K%LNdNdNdefF)uww)*=lfXalleklllr:   c           
         |sg }|sg }|si }|s8| j                             |          }	|	st          d| d|            |	j        }|o|                    d          }
|
r|
                    d          rmt          j                            |
g d          }|rG|r|j        r=i }|j        j        s-t          j	        
                    |j        j        d|d	          }|j        rq|j        j        j        |vr t                      ||j        j        j        <   ||j        j        j                                     |j        j        j        j                   |j        D ]K}|j        |vrt                      ||j        <   ||j                                     |j        j                   L|D ]4}|                    |g           d
d|                    |g           gg||<   5|dk    r>g dg dg}|                    d          r|                    dg           |g|d<   n||d<   d|vr |j        d            t)                      j        | j        j        f||||||d|S )Nu   Не найдено поле     в классе re   rg   )project_typer   r   filter_responsibler7  r  r   T)child_models
return_setrD   r  r   )rj  r   T)does_not_workr   Fra   roles)r  all_optionsmodels_listmodels_filtersr   r   )r   r   
ValueErrorrb   ra  rg   r  r   r#  RelationCacheget_children_dictrD   r2   r   r0  ru  rw  r7  
setdefaultr   r/   r  r   )r  r  r  r   r   r  r  r  r   fieldre   rd  children_dict	assistant
model_nameresp_filterr8   s                   r9   %options_list_for_responsibility_rolesz5CmfActiveEntity.options_list_for_responsibility_roles  s!     	F 	F 	 N 	'JNN#677E n !lAT!l!lgj!l!lmmm,K!Dm&7&7&D&D	 	I--l;; 	I'++y 4L  4L  4L , M MG I Iw/I I "(0 b %+$8$J$J
(+K\` %K %b %bM $ l(.9NNLOEEg&7&=&HI!'"3"9"DEII'J[JaJdJjkkk!(!= P PI +=@@>Aeei&:;!)"67;;IL<NOOOO"- I IJ&11*bAAt]%6%6z2%F%FG2IN:..
 -// +**...K !!+.. :/=/A/A+r/R/RT_.`{++.9{+&  FM'""")uww)O&46CQ\#N&4 4 -34 4 	4r:   c           
         |sg }|sg }ddh}|                     d          }	|dk    s||v r|	r | j        d3||||||d|S |dk    r | j        d3||||d|S |dk    r | j        |f||||d|S |d	k    r|sd
g}dg|}| j        dv r| j        dk    rd}
| j        dk    rd}
| j        dk    rd}
d}|o|                     dd          }|o|                     dd          }|r#t
          j                             ||
g          }n9|r7t                              |d|
 g          }t          |d          r|j
        }|r%t          ||
          r|ddt          ||
          gg}|dd| j        gg}|rd|v r|dd d|d         gg d!gg}n|d"v r |j        d#           nj|d$k    rK|o|                     d          }|r|dg d%dd&|ggg}|o|                     d          }|r|dg d'd(d&|ggg}n|d)k    r | j        |f||||d|S |                    d*          r{| j                             |          }|st!          d+| d,|  | |          |j        d-k    r=|j        d.k    r2d}d/|v r|d/         }|d/= |                     d0d1          r|g}n|d/d|gg} t'                      j        |f|||||d2|S )4u  
        FIXME:
          потом мы сделаем эту штуку через
          глубокий поиск общую кэш-таблицу и все будет хорошо
        osv: а зачем это и так все кешируется дважды
        todo возможно надо вынести responsible status tag и тд в CmfTag и тп но не факт
        r   r   filter_by_project_participantsr   )r  r   r  r   r  r  r   )r  r   r   r  perm_security_levelr@   r  filter_activity_id)r   r   CmfListr   strict_document_logic_typer   strict_task_logic_typer  strict_list_logic_typeNscheme_wf_idre   r  z
scheme_wf.r   	scheme_wfrD   r  cmf_model_namer'  rq   r(  filter_activity)r  r'  N)r   r   r   r  r   )rq   r   Nr   )filter_projectr   Nr  
resolutioncf_u   Не нашел поле r  TCmfCascadeChoicechoice_parent_idr  F)r  r  r   r   r  r^   )r   r  r  r  r0  rb   CmfSchemeWfcmfutilget_obj_by_idr   r  getattrr   r  ra  r   r  customrt   r/   r  )r  r  r  r   r  r   r  r   project_participiants_fieldsr  lt_field_namer  r  re   r    rq   custom_fieldr  r8   s                     r9   r  z"CmfActiveEntity.field_options_list  s     	F 	F(3\'B$)/4T)U)U&  =00$(DDDIgD<3< C+F-fx$7C C <BC C C !H,,*3* h+F6T\h h`fh h h $9997378K h+F6T\h h`fh h h L00 '%;,8x8H ~!FFF>]22$@M>Y..$<M>Y..$<M 	,X1B1B>SW1X1X)Rm.?.?T.R.R	 5 & 2 6 6,P] 6 _ _II 5$229FbS`FbFbEc2ddFv{33 5$*$4	 WM!B!B W$tT79m3T3T&UVF /cnEFF s-!?!? ,c=3OPRpRpRp#r s
 !$NNNFM'"""" F**'LM,=,=m,L,LK ]666k8Z[] &H-*;*;K*H*HI a999<LdT];^_a !L00.3./B h+F6T\h h`fh h h ))%00 	S:>>*=>>L D !h=P!h!hcf!h!hjm  pC  D  D  D"d**|/BFX/X/X#' %//'-.@'A$12::mU33 S$XFF$'93@P&QRF *uww)H0>m6HH H@FH H 	Hr:   c                     | j         dk    S )Nr   )rI   r   s    r9   _is_checkedzCmfActiveEntity._is_checkedJ  s    %11r:   c                 D   |                      ddg           |du r3| j                                                            d          | _        d S |du r3| j                                                            d          | _        d S t          d| j        j                   )Nr   rN   Tr   Fr   u:   Некорректное значение для поля )r  rN   r4   rO   r   CmfValidationError
is_checkedrQ   )r7   r2   s     r9   r  zCmfActiveEntity._is_checkedN  s    ':.///D==-,,..AA(KKDKKKe^^-,,..AA&IIDKKK$fT_Mdff  r:   c                     dS )u   
        Отправляем во фронт события для реалтайм обновления
        :return:
        Nr^   r   s    r9   
emit_eventzCmfActiveEntity.emit_event[  s	    
 	r:   c                 F   | j         rd S d }| j        ryd| j        j        v rk| j        j                            d          r%t                              | j                  j         }n'| j                            dg           | j        j         }| j         s	|r|| _         | j         sMt          j
        j         r<t          j
        j                             dg           t          j
        j         | _         | j         s*t          j                            ddgd          | _         d S d S )	Nr8  r^  z
activity.*r
   r   businessT)r   r   cache_inmemory)r8  r    r   re   r2   ra  r   r   r  r   r   r4   rb   r   r   )r7   parent_activitys     r9   _calc_activityzCmfActiveEntity._calc_activityb  s   = 	F; 	7:);;;~#..}== 7"%"7"7"G"G"P''777"&+"6} 	, 	,+DM} 	6!1!: 	6%**3%*888,5DM} 	g".22
C5ae2ffDMMM	g 	gr:   c                 *   | j         s2| j        j        s&| j        j        s| j        j        s| j        j        sd S | j         s| j        j        r-| j        j        s | j        j        j        s| j        j        dk    ret          j	        
                                }|j        dk    r|                    ddd          | _        ni|                    ddd          | _        nK| j                                         | xj        t          j        | j        j        j                  z  c_        d S t          j        sA| j        j        r.| j         s'| j        j        r| j        j        rt)          d           d | _        | j        r;| j        s4| j        j        rt)          d           | j                                         | j        sB| j        j        dvr4| j        j        rt)          d           | j                                         | j         s| j        j        rx| j        j        rl| j        j        j        d	k    rW| j        j        j        d	k    rB| j        r"| j                                        | j        k    r| j                                         | j        d
k    r0| j        r)| j        j        dk     r| j                                         | j        j        r7| j        j        dk    r)t          j        s| j                                         d S d S d S d S )Nr   r>  )hourminutesecond)secondsu   Будильник сброшен т.к. у этого бизнес-процесса в статусе будильник не заданu   Будильник установлен. Задача с крайним сроком не может быть без будильника.)r   r   uW   Будильник установлен тк задача уже выполняетсяr   r   )r  r   r   r   r   rN   
next_alarmr#  r   current_userget_current_datetimer  replacer  r   r  r2   import_moder  r   r  rH   r  r   rI   r@  )r7   current_times     r9   _calc_alarm_datez CmfActiveEntity._calc_alarm_dateu  sN    	?-	 ;)	 =+		
 =+	 FK 	+4=3 	+T_=W 	+;)1 +;)Q.. $%>#F#F#H#HL#(1,,*6*>*>AaXY*>*Z*Z*6*>*>AaXY*>*Z*Z O++---OOx'9$+BXB^'_'_'__OO} +}/ o oH[ o`d`t`| o!  #n  o  o  o&*DO= 	& 	&) h  g  h  h  hO##%%%  	&4;#:BT#T#T) ustttO##%%% 		*&		* 		* +v55+v55 ? *do&9&9&;&;do&M&M''))) !X--$/-doFY\]F]F]O##%%% ?% 	*$/*=*A*A= *'')))))	* 	**A*A* *r:   c                 "    | j         rd| _        d S )NT)r  r   r   s    r9   _calc_approvedzCmfActiveEntity._calc_approved  s    ; 	! DMr:   c                     d S rG   r^   r   s    r9   
_calc_namezCmfActiveEntity._calc_name  r   r:   c                 h   | j         r| j        j        s| j        j        sd S | j         s"t	                                                       d S | j         r| j                             d          rd S |                                  d| j         j        	                    d          d          }|| _         d S )NzA--rw   )
r   r@   r   rd  r/   
_calc_codera  get_code_prefixr2   
rpartition)r7   r   r8   s     r9   r  zCmfActiveEntity._calc_code  s    		 )	 |&		 F y 	GG   F
 9 	--d33 	F&&((OO49?+E+Ec+J+J1+MOO
 			r:   c                     | j         r"| j         j                                        }|r|S t          t          |                                           S rG   )r@   obj_code_prefixr4   r/   r   r  )r7   code_prefixr8   s     r9   r  zCmfActiveEntity.get_code_prefix  sO     ? 	#/9>>@@K #""_d++;;===r:   c                    |                      g d          }d | j        D             |d<   d | j        D             |d<   d |d<   | j        r| j                             g d          |d<   d |d<   | j        r| j                             g d	          |d<   d |d
<   | j        r| j                             g d          |d
<   d |d<   | j        r| j                             g d          |d<   d |d<   | j        r| j                             g d          |d<   d |d<   | j        r| j                             g d          |d<   |S )N)
rD   r   r   textr   r   r   r   r   cmf_modified_atc                 <    g | ]}|                     g d           S rD   r   r   loginto_jsonr   is     r9   r  z9CmfActiveEntity.get_cache_fields_json.<locals>.<listcomp>  s+    ___1AII&E&E&EFF___r:   r   c                 <    g | ]}|                     g d           S r  r  r   s     r9   r  z9CmfActiveEntity.get_cache_fields_json.<locals>.<listcomp>  s+    aaaAQYY'F'F'FGGaaar:   r   r   )rD   r   r   r  colorrH   	card_namer    )rD   r   r   
cmf_authorr  r   r   r   )	r  r   r   r   r    r  r   r   r   )r7   r~  s     r9   get_cache_fields_jsonz%CmfActiveEntity.get_cache_fields_json  s   ll 
 
 
   `_PTP^___K baQUQ`aaaL H; 	u K//0s0s0sttCMH; 	H K//0F0F0FGGCM L? 	Y $ 7 78W8W8W X XCK> 	W#~556U6U6UVVC!M 	[!%!1!9!9:Y:Y:Y!Z!ZC!M 	[!%!1!9!9:Y:Y:Y!Z!ZC
r:   c                    | j         j        s| j        s| j        j        sd S | j         r| j        r	| j        rd S | j         j        r	| j         rd S | j         s!| j                            |           | _         d S | j        j        rY| j        j        rM| j        j                            ddg           | j        j                            |           }|| j         k    rd S | j                            |           | _         d S )Ndefault_task_logic_typedefault_subtask_logic_type)r@   r   r  r  r   calc_logic_typer  r  )r7   old_default_logic_types     r9   _calc_logic_typez CmfActiveEntity._calc_logic_type  s   O&	{	 ~(	
 F ? 	t{ 	t/? 	F?% 	$/ 	F 	"n<<TBBDOF >$ 	); 	N**,EGc+deee%)^%7%G%G%M%M"%88.88>>r:   c                     | j         j        s!| j        j        s| j        j        s	| j        sd S | j        j        r	| j        rd S t
          j                            |           | _        d S rG   )r    r   r8  r  r  rb   r  calc_schemer   s    r9   _calc_scheme_wfzCmfActiveEntity._calc_scheme_wf5  sw    K"	}'	 ~(	 {		 F>$ 	 	F  +77==r:   c                     | j         j        s!| j        j        s| j        j        s	| j        rd S | j        j        r	| j        rd S | j                             |           | _        d S rG   )r  r   r@   r8  rN   calc_workflowr   s    r9   _calc_workflowzCmfActiveEntity._calc_workflowD  sx    N%	)	 }'	 =		 F =# 	 	F 44T::r:   c                     d S rG   r^   r   s    r9   _calc_default_workflowz&CmfActiveEntity._calc_default_workflowU      r:   c                     d S rG   r^   r   s    r9   _calc_responsiblez!CmfActiveEntity._calc_responsibleX  r  r:   c                     t                                                      p/| j        j        p#| j        j        p| j        j        p| j        j        S rG   )r/   _acl_subjects_is_changedr   r   r   r   r   r7   r8   s    r9   r  z(CmfActiveEntity._acl_subjects_is_changed[  sV    ww//11 J~(J,0O,FJ*J.2.>.I	Jr:   c                     t                                                      }|                    | j                   | j        r|                    | j                   | j        r|                    | j                   |S rG   )r/   _acl_subjects_list_level_writeextendr   r   r   r   r7   r|  r8   s     r9   r  z.CmfActiveEntity._acl_subjects_list_level_write`  sq    7799dn%%% 	,MM$*+++ 	,MM$*+++r:   c                 |    t                                                      }|                    | j                   |S rG   )r/   _acl_subjects_list_level_readr  r   r  s     r9   r   z-CmfActiveEntity._acl_subjects_list_level_readj  s1    6688do&&&r:   c                 N    t                                                      g dz   S )N)3r9  r   rN   r3   zparent.cmf_ownerr  r  zstatus.ordernozstatus.workflowr   r   r   cache_status_optr8  
cmf_importcmf_modified_bysharelink_hashzlogic_type.coder  r   r  r   r  rD  rE  rF  rG  rH  rI  rJ  rK  rL  zworkflow.save_eval_codeui_view_formr  z,perm_security_level.access_task_fields_cacher   r   r   r  r  r  r   r   r  r   rp  rq  rr  rs  rt  )r/   save_preload_fieldsr  s    r9   r'  z#CmfActiveEntity.save_preload_fieldsp  s/    ww**,, .0
 .0
 .0
 .
 .	
r:   c                 N    t                                                      ddgz   S )Nr&  task_filters)r/   project_perm_allow_fieldsr  s    r9   r*  z)CmfActiveEntity.project_perm_allow_fields  s+    ww0022	6
 
 	
r:   c                      t          d          )NuG   Не используется! Оставлено для истории)'	Exceptionr  osenvironr   r    r2   r0  disable_simple_permvaluessimple_perm_allow_fieldsra  endswithr   r   r#  r   re  rR  r   check_owner_permsru  rv  ry  
get_ownersr   r   r   r   r   r   r   sortedmapr   r   rb   CmfAccessListcheck_admin_mode)r7   need_owners_checkr  
sl_optionsneed_reluser_checkall_relation_userrA  otherss           r9   _check_simple_permz"CmfActiveEntity._check_simple_perm  s    abbbr:   c                     |                                   |                                  |                                  |                                  |                                  |                                  d S rG   )r  r  r  r  r	  r  r7   r   r   s      r9   _save_templatezCmfActiveEntity._save_template
  sr    r:   c                     | j         j        sd S | j        s(| j        j        r| j        j        | j        j        k    rd S | j                            | | j         j        | j         j                   d S rG   )r   r   r  rN   r  r  run_transitionr2   r   s    r9   _exec_transitionz CmfActiveEntity._exec_transition  sp    {% 	F { 	t}7 	DM<MQUQ^Qb<b<bF$$T4;?DK<MNNNNNr:   )comment_appendchanged_fieldsrF  c                P   |                                 D ]H\  }}t          | j                            |          t          j                  st          | ||           I|                     d           |r0t                              ||                                            d S d S )NT)is_task_transition_run)r  r    )	r   
issubclassr   r   
CmfBackrefr   r   rb   r   )r7   rE  rF  _args_kwargskeyvals          r9   r%   z#CmfActiveEntity.task_transition_run   s    &,,.. 	( 	(HCdkooc22F4EFF (c3'''			... 	#    dfffff		 	r:   c                 b    | j         r| j        r | j                                        | _         d S d S rG   )r&  r  ui_namer  r   s    r9   _calc_ui_view_formz"CmfActiveEntity._calc_ui_view_form/  s>       	5DK 	5 $ 2 2 4 4D	5 	5r:   c                 *	   |                                   t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  |                                  t                              d           |                                  t                              d           | 	                                 t                              d           | 
                                 t                              d           |                                  t                              d	           |                                  t                              d
           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           d S )N_calc_owner end_calc_parent end_calc_activity end_calc_scheme_wf end_calc_periodic end_calc_logic_type end_calc_tree_parent end_calc_perm_security_level end_calc_workflow end_calc_default_workflow end_calc_status endz_calc_status_history end_calc_status_timestamps endz_calc_plan end_calc_approved end_calc_deadline end_calc_alarm_date end_calc_wf_simple_logic end_calc_waiting_for end_check_alarm_date_valid endz_calc_name end_calc_parent_logic_prefix end_calc_sharelink_hash end_calc_ui_view_form end/_calc_perm_security_level_allowed_ids_cache end)r$  r   debugr<  r  r  r  r  r  _calc_tree_parent_calc_perm_security_levelr  r  r	  _calc_status_historyr  r   r  rn  r  r   r   rB  r  r  _calc_sharelink_hashrQ  +_calc_perm_security_level_allowed_ids_cache)r7   rL  s     r9   recalc_fieldszCmfActiveEntity.recalc_fields5  s   	!"""	"###	$%%%	%&&&   	$%%%	&'''   	'(((&&(((	/000	$%%%##%%%	,---	"###!!###	*+++$$&&&	-...	 !!!	$%%%	$%%%	&'''""$$$	+,,,   	'((($$&&&	-...	 !!!&&(((	/000!!###	*+++!!!	()))88:::	ABBBBBr:   c                     d S rG   r^   r   s    r9   do_status_is_changedz$CmfActiveEntity.do_status_is_changed  r  r:   c                    | j         j        sd S | j         j        r,| j        | j         j        k    rt	          d| j                   t                                          5  t          	                    | | j         j
        | j         j        | j                            | | j         j
        | j         j                                                             d d d            d S # 1 swxY w Y   d S )Nz1cache_status_type != status.status_type obj_id = )objfrom_status	to_status
transition)r   r   rI   rH   r,  rD   r  r#   rb   CmfStatusHistoryr  r  rN   calc_transitionr   r   s    r9   rl  z$CmfActiveEntity._calc_status_history  s6   {% 	F ;! 	_%)@@@ ]TXT[ ] ]^^^  "" 	i 	i##dko=88t{PTP[P_`` $ b bbfbfbhbhbh	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	i 	is    A3C  C$'C$c                 z   |                      |           }|d         }|r'|                     |                                           |D ]q}||                             d          s||         d         d         dk    r7t	          | |          }|j        s#t          | |||         d         d                    rd S )N	ui_fieldsrn   r2   _NONE_)_build_ui_formr  keysr   r  r   r   )r7   ui_form_jsonrz  conf_field_name	cur_fields        r9   _calc_default_fieldz#CmfActiveEntity._calc_default_field  s     **400 -	 	/Y^^--...( 	_ 	_O_-11)<< ))4W=IIo66I' _oy/I)/TU\/]^^^	_ 	_r:   )rH  depthc          
         | j         r|                                  | j         r-| j        dk    r"| j        s t	                      j        |d|i|S | j        j        r| j         s|st          j	        
                    dd| j        j        j        ggdd| j        j        gg dgd	          }|s5t          j	        
                    g d
dd| j        j        gg dgd	          }|r@t          d| j         d|j         d| j        j        j         d| j        j         d           | j        j        r|                                  | j        rD | j        |i |  t	                      j        |d|i|}t$                              d           |S  | j        di | |                                  t$                              d           |                                  t$                              d           t          j                            |            t$                              d            t	                      j        |d|i|}t$                              d           t          j                            |            |S )Nr   r  status_fromr  	status_tor'  )trans_form_showr'  TT)r   r  )r  r'  Nzmust_transition_run r   r  zsuper().save endzhandle_mention_persons endz_calc_resolution end)rs  zdo_calc_statistics endr^   )r  r  r0  r   r/   r   r   r   rb   CmfTransr   r  rD   r  r  rq  r   rA  r   ri  ro  handle_mention_persons_calc_resolutionCmfStatdo_calc_statistics
CmfLicensecheck_license)r7   rH  r  r   r   transr~  r8   s          r9   r   zCmfActiveEntity.save  s   ; 	'$$&&&; 	>4?i77	7577<=U=f===;! 	y$+ 	y>T 	yO''"D4;?+=*>? #t{7222 #' (  E  ++222$c4;?;666 '+ ,    y kkk58kkdkoFXkk[_[f[ikkswxxxx;! 	(%%'''  	D0000%'',<E<V<<CGG&''' J$$V$$$##%%%	,---	&'''))d)333	()))egglD8888	"### 	''--- 
r:   c                 &   t          j                     | _        t                              d| j         d           | j        r| j        sGd}| j        rd}t          | d          r	| j        rd}t          j
                            | |d           d S d S )Nzsave start ()ry  r)  r   before_save)time_CmfActiveEntity__start_tsr   ri  rD   r  r   r   r   rb   CmfAutomationCrudTrigger	crud_hook)r7   r   crud_actions      r9   before_save_hookz CmfActiveEntity.before_save_hook  s    )++	)tw)))*** 		X 0 		X #K{ '&tZ(( 'T] '&+55dKWWWWW		X 		Xr:   c                 <   |                                   t                              d           t          j        re| j        r^| j        j        rRt          | j        j        j        t                      t                                 t                              d           |                                  t                              d           | j        r| j        sd }| j        j        r| j        j        }t           j                            | | j        rdndd           | j        j        r|| j        k    r| j        | _        t                              d           t                              d| j         d	t+          j                    | j        z
  d
           d S )Nz_exec_transition endz_exec_bzpython endz_exec_trigger endr)  ry  
after_savez_CmfAutomationCrudTrigger endz
save end (z): z.3f)rD  r   ri  configBZPYTHON_ENABLEDrN   save_eval_codeexecr2   globalslocalsr5  r  r   r   r  rb   r  r  r   rD   r  r  )r7   r   hack_before_responsibles      r9   before_save_data_hookz%CmfActiveEntity.before_save_data_hook  sz   	&'''" 	.} .!= .T]17FHHMMM,---	#$$$  	5 0 	5
 '+#* A*.*:*@'+55d<aHHYacoppp * 4/F$JZ/Z/Z#'#3 GG3444	LTWLLt)FLLLMMMMMr:   c                 z    |                                  | _        t                                                       d S rG   )r  cache_fieldsr/   _update_cache_fieldsr  s    r9   r  z$CmfActiveEntity._update_cache_fields  s3     6688$$&&&&&r:   )include_templatesc                f    |s|                     dd            t                      j        |i |S Nr   F)r  r/   r   r  r  r   r   r8   s       r9   r   zCmfActiveEntity.list"  s<      	4mU333uww|T,V,,,r:   c                f    |s|                     dd            t                      j        |i |S r  )r  r/   r   r  s       r9   r   zCmfActiveEntity.slist(  s<      	4mU333uww}d-f---r:   c                    |                      | j        dg d          D ]}t          |j        d          5 }t                              ||j        |j                  }|                    |	                                           |
                                 ddd           n# 1 swxY w Y   |                    ||           |
                    d           dS )	uD    Копирование вложений для CmfTask, CmfDocumentF)url_previewurl_preview_imgurlembedded)r  simpler   rb)r    r   r  NTr   )attach_listrD   openfull_path_filerb   r*   r   r  upload_filereadr   _replace_attachment)r7   r    
attachmentfilenew_attachments        r9   copy_attachmentsz CmfActiveEntity.copy_attachments.  s/    **$'%2f2f2f + h h 
	C 
	CJj/66 &$!'!5!5!#'0 "6 " "
 **499;;777##%%%& & & & & & & & & & & & & & & &&z>BBBB 	d#####s   A#B&&B*	-B*	c                    d|j         _        |j        dk    r|j        |_        d|_        n|                                 t                                          |          }t          j	        
                    |           |S )NTdummy)r@   r   r   rD   r   r  r/   _post_copy_hookrb   r  r  )r  obj_copyr~  r8   s      r9   r  zCmfActiveEntity._post_copy_hookA  sv     *.&=G##$KHM $H!!!gg%%h//''111
r:   )r  r   r   r   r  r   c                    |rd}g d}d | j         D             }	|	r|                    |	           |                     |           |rd} t                      j        d||d|}
|r|                     |
           |
S )u  Копирование

        Args:
            name (str): Новое имя
            copy_attachments (bool): Копировать вложения
            copy_relations (bool): Копировать связи
            copy_subtasks (bool): Копировать подзадачи

        Returns:
            CmfActiveEntity: Скопированный елемент

        T)z**zattachments.urlr   zattachments.url_previewzattachments.url_preview_imgproject.logic_prefixc                 <    g | ]}|                     d           |S )r  )ra  )r   r  s     r9   r  z(CmfActiveEntity.copy.<locals>.<listcomp>`  s+    OOOuu7G7G7N7NOUOOOr:   r  )r   r   r^   )r   r  r  r/   r   r  )r7   r   r  r   r   r   r   r   fields_for_load	cf_fieldsr  r8   s              r9   r   zCmfActiveEntity.copyN  s      	$#$ $ $ POOOO	 	.""9---))) 	D577<?T???? 	,!!(+++r:   u   ACL Праваrn   u   Нетu   ACL Полныеu   ACL Только чтениеu   ACL Приватные)rn   fullrX   private)rV   rQ   rn   rR   r{   u-   WEB Авторизованный доступu   Доступ запрещёнu2   Могут только просматриватьuE   Могут просматривать и комментироватьu   Полный доступ)rn   denyrX   r   r  u#   WEB Анонимный доступu"   WEB Доступ по ссылкеu8   Персональные политики доступаCmfPermPublishPolicy)rQ   rZ   rs   c                     |                                   |                                  d| _        |                     d           |                     d           d S )NTforcer   )r  _load_perm_fieldsperm_has_acl_calc_perm_aclr   r7   perm_publish_policys     r9    perm_publish_policy_changed_hookz0CmfActiveEntity.perm_publish_policy_changed_hook  s_        $'''		D	!!!!!r:   c                    | j         j        s|sd S | j         j        dk    r|sd S | j        sKdd l}dd l|j        |j        z   d                    fdt          d          D                       | _        t                                          D ]x}|                    dd| j        j        gg dgg d	
          D ]K}t                              d|            |                    d           |                    d           Lyd S )Nrn   r   r   c              3   B   K   | ]}                               V  d S rG   )choice)r   _alphabetsecretss     r9   r   z7CmfActiveEntity._calc_sharelink_hash.<locals>.<genexpr>  s/      )U)Uq'..*B*B)U)U)U)U)U)Ur:   r>  tree_parent_idr'  )r%  r'  N)rD   perm_policy_sharelinkr%  r   z#_calc_sharelink_hash child update: Tr  r   )r  r   r  r%  stringr  ascii_lettersdigitsr   ranger   iter_subclassesr   rD   r2   r   ri  rm  r   )r7   r  r  	model_clschildr  r  s        @@r9   rm  z$CmfActiveEntity._calc_sharelink_hash  sY   )4 	U 	F%)Y66u6 F" 	VMMMNNN+fm;H"$'')U)U)U)U)UERSHH)U)U)U"U"UD )88:: 	+ 	+INN,<c47=+QSpSpSp*q*[*[*[ # ] ]+ + EeEEFFF***666

T
****+	+ 	+r:   c                 <    d| _         |                                  dS )u&   Метод сброса sharelink_hashN)r%  rm  r   s    r9   do_erase_sharelink_hashz'CmfActiveEntity.do_erase_sharelink_hash  s$     #!!#####r:   CmfStr32zShareLink hash)rt   rQ   r   rV   c                 0   | j         dk    rdS t                              d| j                  }t          j                                        }|j                            |           | j         dk    rd|_        n| j         dk    r@d|_        t                              d| j        d|gd	g
          	                                 n=| j         dk    rd|_        n*t                              d| j          d           d|_        |	                                 dS )uG   Наполняем ACL правилами для ShareLink группыrn   Nauto)r  r    rX   r  r   writecommentsr  r    access_levelsubjectsr  r  z%WARN! Unknown perm_policy_sharelink: z. Set deny policyr  )r  rb   CmfAccessRuleperm_aclri   sharelink_groupr  r   r  r   r   ri  )r7   acl_rule_sharelinkr  s      r9   _acl_scaffold_sharelink_rulesz-CmfActiveEntity._acl_scaffold_sharelink_rules  s5   %22F#11DM 2 3 3 /??AA#**?;;;%33.4++'944.4+  }$)*)l !   dffff'611.4++GGe8Reeeg g g.4+!!!!!r:   c                    | j                             ddg           | j         D ]d}|j        s|j        dk    r<t                              d| j        |j        gd                                           R|j        dk    r<t                              d| j        |j        gd                                           |j        d	k    rzt                              d| j        |j        gd                                           t                              d| j        d
g|j        gd                                           |j        dk    r;t                              d| j        |j        gd                                           fd S )Nsubjectpublish_policyr   r  r  r  r    r  r  rX   r  r   r  r  )r  r    r  r  r  r  )perm_publish_policiesr4   r  r  rb   r  r  r   r  s     r9   _acl_scaffold_subjects_rulesz,CmfActiveEntity._acl_scaffold_subjects_rules  s   "''	;K/L'MMM#'#= 	X 	X&. "1V;;$$#DM19: % Q QQUQUQWQWQWQW$3zAA$$#DM19: % Q QQUQUQWQWQWQW$3y@@$$#DM19: % Q QQUQUQWQWQW$$#DM*19: % R RRVRVRXRXRXRX$3v==$$#DM19: % Q QQUQUQWQWQW+	X 	Xr:   c                    | j         dk    r| j        dk    rdS t                              d| j        d          }t          j                            d          }|j                            |           | j         dk    rd	|_	        ne| j         d
k    r@d	|_	        t                              d| j        d|gdg          
                                 n| j         dk    rd|_	        nd|_	        |
                                 t                              d| j        d          }t          j                                        }|j                            |           | j        dk    rd	|_	        ne| j        d
k    r@d	|_	        t                              d| j        d|gdg          
                                 n| j        dk    rd|_	        nd|_	        |
                                 dS )uZ   Наполняем ACL правилами для публикации документовrn   Nr  SETMEBUG)r  r    r  zanonymous@evateam.ru)r  rX   r  r   r  r  r  r  r  )perm_policy_anonymousperm_policy_guestrb   r  r  ra   r   r  r   r  r   ri   guest_group)r7   acl_rule_anonymousanonymous_personacl_rule_guestguest_person_groups        r9   _acl_scaffold_public_rulesz*CmfActiveEntity._acl_scaffold_public_rules  s   %22&)33 F
 $11DM
 2 L L!+//6L/MM#**+;<<<%33.4++'944.4+  }$*+)l !   dffff'611.4++.4+!!!  --DM
 . L L#2>>@@&&'9:::!Z//*0N''#y00*0N'  }$,-)l !   dffff#v--*1N''*0N'r:   c                    |                                   |                                  |                                  |                     g d           | j        dk    rTt
                              d| j        t
          j        	                                gd          
                                 n| j        dk    rt          t          |                                                     }|r5t
                              d| j        |d          
                                 t
                              d| j        t
          j        	                                gd          
                                 n(| j        dk    rt          t          |                                                     }|r5t
                              d| j        |d          
                                 t          t          |                                                     }|r5t
                              d| j        |d          
                                 t
                              d| j        t
          j        	                                gd	          
                                 t                                                       d
S )u   Наполним свой acl автоматическими правилами в зависимости от политики)r7  r   r   r  r  r  rX   	denyWriter  r  r  N)r  r  r  r  perm_policyrb   r  r  ri   
user_groupr   r   ru  r  r   r/   _acl_scaffold)r7   writer_listreader_listr8   s      r9   r  zCmfActiveEntity._acl_scaffold<  s   ))+++'')))**,,,LLLMMMv%%   /::<<=F ! T TTXTXTZTZTZTZ++s4#F#F#H#HIIJJK F$$#DM(v % ? ??Ctvvv   /::<<=K ! Y YY]Y]Y_Y_Y_Y_**s4#F#F#H#HIIJJK F$$#DM(v % ? ??Ctvvvs4#E#E#G#GHHIIK F$$#DM(v % ? ??Ctvvv   /::<<=F ! T TTXTXTZTZTZr:   c                 4    |                      g d           d S )N)r  r  z
perm_acl.*perm_inheritperm_parentperm_inherit_acl_idperm_effective_acl_idr  r  r  r  r  r  )r  r   s    r9   r  z!CmfActiveEntity._load_perm_fields`  s;     P P P 	Q 	Q 	Q 	Q 	Qr:   c                     t                                                       | j        j        s| j        j        sd S |                                  | j        r| j        dk    rd| _        d S d S d S )Nrn   T)r/   _calc_perm_has_aclr  r   r  r  r  s    r9   r  z"CmfActiveEntity._calc_perm_has_aclh  s    ""$$$' 	t/?/J 	F    	% 0I = = !%D	% 	% = =r:   c                    |sj| j         j        s^| j        j        sR| j        j        sF| j        j        s:| j        j        s.| j        j        s"| j        j        s|                                 sd S | 	                                 | j        dk    s| j        dk    s| j        dk    r| j         sd| _         t                                          d          S )Nrn   Tr  )r  r   r	  r  r   r  r  r  r  r  r/   r  )r7   r  r8   s     r9   r  zCmfActiveEntity._calc_perm_acls  s    
	$/
	 +6
	 #.	
	
 >,
	 -8
	 )4
	 -8
	 0022
	 F   %22%22)Y66$ )$(!ww%%D%111r:   c                    | j         j        rd S | j        j        rJ|                     dg           t	          | j        d          r| j        j         r| j        j         | _         d S | j        dk    rU| j        rP| j        j        rFt          	                    | j                  j
        }| j         s|r|j        r|j        | _         d S d S d S d S d S d S d S )Nzperm_parent.perm_security_levelr  r   )r  r   r  r  r   r0  r9  rd  r   r   r  default_task_security_level)r7   r  s     r9   rk  z)CmfActiveEntity._calc_perm_security_level  s    #. 	 F& 	?@AAAt')>?? DDTDh +/+;+O( ?i'' 4<#: (+(=(=do(N(N(d%/ --I 0E/`D,F ('        r:   common	templates)loader
autoescapeemailsr  u2   Отправка доступа по ссылке )	only_onceonly_once_argsdescriptionshow_bg_progressbarc                    t                               |g d          }t          d           |                                 }t          j                                        }t          j        	                    d          }d|j
         d}| D ]X}|                    |t          j        |          }	t                              d	||	           |                    ||	|
           Yd S )N)r  r%  r    r   T)full_urlzsend_sharelink.htmluD   Вам предоставлен доступ к документу "")sharelink_urlr  rs  z%s
%s)r  )r  r  app_base_href_sharelink_hrefrb   CmfPluginMailBoxget_local_mailboxr   
_jinja_envget_templater   renderr   r  logginginfosend_message)
r  r  rL  rs  r  mail_boxmessage_templater  emailmessages
             r9   _send_sharelink_emailsz&CmfActiveEntity._send_sharelink_emails  s    
 ##F3h3h3h#ii($777P9L9L9N9NPP*<<>>*5BBCXYYdY\Yaddd 	C 	CE&--MXYXflo-ppGLL7G444!!%'!BBBB	C 	Cr:   c                     | j         ri| j        rI| j        j        }d| j        v r,| j         d| j                            dd          d          }n| j        }n	| j        }d}d| d| d| j          S dS )	uA  
        Дубль алгоритма расчёта sharelink url из CmfPublicService фронта.
        https://crm.ts.local/share/test-troshin/DOC-011919?hash=oJFRy4g9#dokument1-2-3-4-5

        let projectCode = obj.code.str;
        let publicCode = '';
        if (obj.parent && obj.parent.value) {
          projectCode =  obj.parent.value.code.str;
          // Хак когда нет префикса в коде документа
          // DEV-1624979687
          if (! obj.code.str.includes('-')){
             publicCode = obj.code.str;
          } else {
            publicCode = `${obj.code_prefix}-${obj.code.str.split('-')[1]}`;
          }
        }
        const queryParams = {
          hash: obj.sharelink_hash ? obj.sharelink_hash.value : null
        };
        const res: TreeRouterLink = {commands: [`/share/${projectCode}/${publicCode}`],
          extras: {queryParams, fragment: obj.getFragment()}};
        this.shareLink$.next(`${cmfUrl}${this.router.createUrlTree(res.commands, res.extras).toString()}`);

        :return: sharelink url
        r  rv   rE   r   zshare//z?hash=N)r%  r    r   r  r   )r7   project_codeobj_public_codes      r9   r  zCmfActiveEntity._sharelink_href  s    4  
	X{ %#{/$)##)-)9&Y&YDIOOCQR<S<STV<W&Y&YOO&*iOO#y"$WLWW?WW$BUWWW
	X 
	Xr:   c                    |                      dg           | j        dk    rd| _        |                                  t                              d|| j                   t          | j        |t          | j                  d           d S )Nr  r   rn   rX   z&CmfActiveEntity.send_sharelink(%s, %s))r  r  )r   )	r  r  r   r$  r%  rD   schedule_deferred_jobr+  rM   )r7   r  rL  s      r9   r(   zCmfActiveEntity.send_sharelink  s    !8 9:::%22)3D&IIKKK=vtwOOO'6SQUQX\\0Z0Z	\ 	\ 	\ 	\ 	\ 	\r:   c                    t                      }ddg}|dk    rt          d| dd           |                    d          sd	S |d
k    r8|                     g d           | j        r|                    | j                   |dk    ri|                     g d           | j        rK|r/|                    | j                            |                     n|                    | j                   |dk    ri|                     g d           | j	        rK|r/|                    | j	                            |                     n|                    | j	                   |dk    r8|                     g d           | j
        r|                    | j
                   |dk    r8|                     g d           | j        r|                    | j                   |dk    rG| j        r@t                              | j                  }|j
        r|                    |j
                   |dk    rG| j        r@t                              | j                  }|j        r|                    |j                   |dk    r| j        rt                              | j                  }t                      }|j
        r|                    |j
                   |j        r|                    |j                   |j        r.|                    |j                            |                     |j	        r.|                    |j	                            |                     |                    t          |                     |dk    r8|                     g d           | j        r|                    | j                   |dk    r8|                     g d           | j        r|                    | j                   |dk    rt)          | d          r8|                     g d           | j        r|                    | j                   t)          | d          rB|                     d d!g           | j        D ]#}|j        r|                    |j                   $|d"k    rt.          j        gS |d#k    r'|                    |                                            |d$k    r)|                    |                     |                     |d%k    rt)          | d&          r|                     g d'           t                      }| j        j        r3|                    | j        j                            |                     | j        j        ry| j        j        D ]l}	|	j        r.|                    |	j                            |                     |	j        r.|                    |	j                            |                     m|                    t          |                     g }
|D ]}|j        j                             d          r9|
                    | !                    |j        j         |d(z   |)                     Z|j"        rbt)          |d          r|j#        rz|
                    |           |
S )*u?  
        Получение значение по шаблонным объектам.

        Возвращает список (в том числе пустой), если передан шаблонный объект
            или None, если объект не является шаблонным
        cmf_deletedr  
   un   Зацикливание рекурсии в раскрытии var-пользователя: extract_var_obj(r  Tr  zvar:Nzvar:responsible)r   responsible.cmf_deletedresponsible.does_not_workzvar:executors)r   executors.cmf_deletedexecutors.does_not_workr   zvar:spectators)r   spectators.cmf_deletedspectators.does_not_workz	var:owner)r   cmf_owner.cmf_deletedcmf_owner.does_not_workzvar:owner_assistants)r7  z cmf_owner_assistants.cmf_deletedz"cmf_owner_assistants.does_not_workzvar:project_ownerzvar:project_owner_assistantszvar:project_usersz
var:author)r  cmf_author.cmf_deletedcmf_author.does_not_workzvar:waiting_for)r   waiting_for.cmf_deletedwaiting_for.does_not_workzvar:component_ownerdefault_owner)rA  zdefault_owner.cmf_deletedzdefault_owner.does_not_work
componentsz$components.default_owner.cmf_deletedz&components.default_owner.does_not_workzvar:current_userzvar:followerszvar:all_related_userszvar:approversr   )zstatus.master_approverszstatus.approve_groupszstatus.approve_groups.approversz&status.approve_groups.master_approversrv   )	recursionall_nested_persons)$r   r  ra  r  r   r   r   r  rx  r   r   r7  r9  r   r   ru  rw  ry  r  r   r   rA  rB  r   r  get_all_followersrv  r   master_approversapprove_groups	approversr   r2   extract_var_objr3  r  )r7   obj_coderC  rD  	var_usersr   rd  res	componentagres_var_usersvar_users               r9   rI  zCmfActiveEntity.extract_var_obj  s    FF	1r>>  S  HP  S  S  S  [_  `  `  `  `""6** 	4(((dddeee 3  !1222&&^^^___~ 5% 5$$T^%>%>f%>%M%MNNNN$$T^444'''aaabbb 6% 6$$T_%?%?v%?%N%NOOOO$$T_555{""^^^___~ 1  000---  A  A  A( <  !:;;;*** 8//@@$ 8$$W%6777555 C//@@/ C$$W%ABBB*** ,//@@ee$ /GGG-.../ =JJw;<<<$ LJJw0;;6;JJKKK% MJJw1<<F<KKLLL  c+++|##aaabbb 2  111(((dddeee 3  !1222,,,t_-- 9  !n!n!nooo% 9$$T%7888t\** B  "HJr!sttt!% B BI . B!(()@AAA)))N##&&T3355666...T66f6EEFFF&&tX&& ,    "c  "c  "c  d  d  dee;/ WJJt{;FFfFUUVVV;- V"k8 V V< OJJr|'>'>f'>'M'MNNN. VJJr':'E'EV'E'T'TUUU  c+++ ! 		+ 		+H}"--f55 $$T%9%9(-:MYbcdYdM_ &: &a &a b b b# x11 h6L   ****r:   c                    | j         j        s|s| j        j        s| j        j        s| j        j        s| j        j        s| j        j        sy| j        j        sm| j        j        sa| j	        j        sU| j
        sNd}| j        rAt          j                            | j                  j        }|r|D ]}| |         j        rd} n|sd S t                               d           | j        s*| j        rd | _        t                               d           d S t'                      }t'                      }t          j                            | j                  }|j        D ]}|j        r|                     |j        j                  }	|	G|j        r |                    |j        j                   nk|                    |j        j                   nK|	D ]H}
|j        r |                    |
j        j                   )|                    |
j        j                   I|j        r|                     |j                   |j        D ]}| |         st?          tA          | |                   tB          j"                  rR| |         D ]H}|j        r |                    |j        j                   )|                    |j        j                   I|j        r&|                    | |         j        j                   |                    | |         j        j                   ݐd |v sd |v rtG          dd           tI          |          tI          |          d| _        t                               d           d S )NFTz1_calc_perm_security_level_allowed_ids_cache startrh  uf   DEV: _calc_perm_security_level_allowed_ids_cache None должны отфильтровываться!r  )r  rX   )%r  r   r   r7  r  r   rd  r   r   r   r  perm_security_level_idrb   CmfSecurityLevelget_cache_security_levelaccess_task_fields_cacher   ri  %perm_security_level_allowed_ids_cacheru  security_level_rulesaccess_memberrI  r   access_readonlyrw  access_member_idr2   rD   access_task_fieldsr  rI  typer   
CmfM2MBaser  r   )r7   r  custom_changedrU  r  allowed_idsallowed_ids_readonlyr  ruleextracted_membersextracted_memberr   rs  s                r9   rn  z;CmfActiveEntity._calc_perm_security_level_allowed_ids_cacheg	  s    $/		 ~(	 (3		
 )	 *	 |&	 ~(	 )	 *	 {	 #N* "+1+B+[+[\`\w+x+x  ,R(+ "(@ " "-8 "-1N!E" " 	CDDD* 	9 B=A:GGEFFFFee"uu$5NNtOjkk'< 	G 	GD! G$($8$89K9P$Q$Q!$,+ E,001F1LMMMM#(=(CDDDD,= G G(/ G0445E5H5NOOOO'OO,<,?,EFFFF& G  !8999"&"9 G GJ
+ ! !$tJ'7"8"8&:KLL 
G#'
#3 > >C#3 > 4 8 8 F F F F + = = = =	>  / G044T*5E5H5NOOOO'OOD,<,?,EFFFF ;$*>">">  HL  M  M  M  M>B;>O>OBFG[B\B\6^ 6^2	ABBBBBr:   c                 ~    |                                   d| _        t                                                       d S )Nrn   )r  r  r/   r#   )r7   rL  r8   s     r9   r#   zCmfActiveEntity.disable_acl	  s9       $r:   c                      t                      j        di | t          j        j        j                            dgdd| g          D ]} | j        |fi | d S )Nr
   r    r'  )r   r   r^   )r/   _direct_children_deleterg  includerb   r*   r   _delete_child_object)r7   r   r  r8   s      r9   rf  z'CmfActiveEntity._direct_children_delete	  s~    ''11&111+,:??uV^`ceiUj?kk 	< 	<J%D%j;;F;;;;	< 	<r:   rC  returnc          	         	
 |dk    rt          dd                                g d            t                      j        di |} j        D ]s}|j        dk    r$|j        |v r|                    |j                   1|dk    r|                    |j                   R|j	        r|                    |j                   t j
        r1|                     j
                            |dz   	                    } j        j        	 j        j        
 j        j         j        j         j         j        j        	 t)          	
 fd
|D                       }n# t*          $ r t)                      }Y nw xY w|S )Nr  u@   DEV: зацикливание рекурсии get_all_followersTr  )r   r;  r<  r   r?  r@  r   r5  r6  r   r9  r:  r   r7  r8  r  r=  r>  zfollowers.personzfollowers.person.cmf_deletedzfollowers.person.does_not_workzfollowers.notify_volumezfollowers.follow_childrenr:  offr   rv   ri  c                 f    g | ]-}t           j                            d d|
  
        +|.S )r  F)
initial_acl_keyobject_modelobject_owner_idr  object_parent_idr  rK   object_instancechecking_personperm_security_level_allowed_ids)rb   r7  check_access)	r   rs  r0  r   rn  obj_parent_idrV  r7   self_ids	     r9   r  z5CmfActiveEntity.get_all_followers.<locals>.<listcomp>	  sk     	\ 	\ 	\'44$3!+\%!'U$($'4Y 5 [ [	\	\ 	\ 	\r:   r^   )r  r  r/   rE  	followersnotify_volumer   removerw  follow_childrenr:  unionr
  r2   re   r   rD   r0  rV  r  ru  CmfACLNotInitializedError)r7   rC  r   r   rL  followerrx  r0  r   rn  rv  rV  rw  r8   s   `      @@@@@@r9   rE  z!CmfActiveEntity.get_all_followers	  s   r>>X`deeee a a a 	b 	b 	b (egg'11&11 		) 		)H%..?c))JJx///A~~(((() )((( 	Y))D,>>UV>WWXXC4:,(.'-_
040Z0^-	 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\"	\ 	\ 	\ 	] 	]II ) 	 	 	 III	 s   !E) )FFc                    |                      | j                   |                    d| j        r| j        j        j        pd            |                    d| j        r| j        j        j        pd            |                    d| j        j        pd           |                    d| j        j                   d|vr'd	                    d | j
        D                       |d<    t                      j        d	i |S )
Nobj_logic_type_codeobj_activity_codeobj_status_typer   obj_user_ratingobj_tagsr   c                 :    g | ]}t          |j        pd           S )r   )rM   r   )r   ts     r9   r  z5CmfActiveEntity.full_search_index.<locals>.<listcomp>	  s&    *P*P*P3qv|+<+<*P*P*Pr:   r^   )r  full_search_preload_fieldsr  r@   r   r2   r8  rI   r   r   r   r/   full_search_index)r7   r   r8   s     r9   r  z!CmfActiveEntity.full_search_index	  s    8999/1_T_EYE_1gcghhh-t}/YASAY/a]abbb+T-C-I-SVTTT+T-=-CDDDV##!$*P*Pdi*P*P*P!Q!QF:(uww(226222r:   r  c                    t                               dt           j                  }t                               dt           j                  }|                    |           r|                    |           sg S t	          j        | d          }g }|                    d           D ]>}t                              |j	        d                   }|r|
                    |           ?|S )Ndata-mention-type)flagszdata-object-idlxmlc                 ,    |                      d          S )Nr  )has_attr)tags    r9   <lambda>z,CmfActiveEntity.parse_text.<locals>.<lambda>	
  s    3<<8K+L+L r:   )recompileIr  bs4BeautifulSoupfind_allr  r  attrsr   )r  re1re2bsr|  r  rs  s          r9   
parse_textzCmfActiveEntity.parse_text 
  s    jj-RTj::jj*"$j77

4   	SZZ%5%5 	ItV,,;;LLMM 	# 	#C''	2B(CDDC #c"""r:   c                    | j         j        sd S t                      }t                      }| j         j        r,t          |                     | j         j                            }| j         j        r,t          |                     | j         j                            }||z
  D ]-}|j        dv r"t          j        	                    | d|           .d S )N)ri   ra   rj   mention)event_person)
r  r   ru  r  r  r  r0  rb   CmfEventdo_event)r7   objs_oldobjs_newrs  s       r9   r  z&CmfActiveEntity.handle_mention_persons
  s    y# 	F55559= 	;4??49=99::H9= 	;4??49=99::Hh& 	L 	LC~!KKK((ys(KKK	L 	Lr:   c                    g d}| j         |vrt          dd           g d}g d}t                              | j                                       |d |D                       t
          j        rUj        t
          j        j        k    r;t
          	                    d	 d
t
          j                    t          dd          fd|D             d         r,d         
                    |           fd|D             d<   S )N)r   rg   r   ue   Попытка выполнить public_parent_ui_get к недозволенному объектуTr  )r   r   public_html_schemedocument_header_textdocument_footer_texttree_text_overflow)header_background_colorheader_text_colorcontent_background_colorcontent_text_colorfooter_background_colorfooter_text_colorsidebar_background_colorsidebar_text_colorfooter_text	custom_js
custom_cssheader_htmlfooter_htmlc                     g | ]}d | S )zparent.r^   )r   fs     r9   r  z8CmfActiveEntity.public_parent_ui_get.<locals>.<listcomp>,
  s#    RyRyRyefS`]^S`S`RyRyRyr:   r  uX   В public_get share api попытались запросить чужой объект z != u8   Нет прав public_get (ошибка доступа)c                 <    i | ]}|t          j        |          S r^   )r  r    )r   r  r  s     r9   
<dictcomp>z8CmfActiveEntity.public_parent_ui_get.<locals>.<dictcomp>5
  s'    CCCqq'%,**CCCr:   r  c                 >    i | ]}|t          d          |          S )r  )r  )r   r  r~  s     r9   r  z8CmfActiveEntity.public_parent_ui_get.<locals>.<dictcomp>9
  s,    (i(i(iVWGC8L4Mq,Q,Q(i(i(ir:   )r0  r  r  get_model_by_namer   r   sharelink_access_requestrD   sharelink_access_objri  r  )r  child_idallowed_objectsallowed_fieldsscheme_fieldsr  r~  s        @@r9   public_parent_ui_getz$CmfActiveEntity.public_parent_ui_get
  s   FFF~00}  FJ  K  K  K  K F  F  Fa a a ))#.99==RyRyjxRyRyRy=zz% 	hx11444  Wsx  W  W~  U  W  W  X  X  X Zbfgggg DCCCNCCC#$ 	j$%11-@@@(i(i(i(i[h(i(i(iC$% 
r:   c                 J   |                                   t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  |                                  t                              d           |                                  t                              d           | 	                                 t                              d           | 
                                 t                              d           |                                  t                              d	           |                                  t                              d
           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d           |                                  t                              d            t3                      j        |i | d S )NrS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  )r$  r   ri  r<  r  r  r  r  r  rj  rk  r  r  r	  r  r  rn  r  r   r   rB  r  rm  rQ  rn  r/   _save_import)r7   r   r   r8   s      r9   r  zCmfActiveEntity._save_import>
  se   	!"""	"###	$%%%	%&&&   	$%%%	&'''   	'(((&&(((	/000	$%%%##%%%	,---	"###$$&&&	-...	$%%%	$%%%	&'''""$$$	+,,,   	'((($$&&&	-...&&(((	/000!!###	*+++!!!	()))88:::	ABBBd-f-----r:   c                 H   ddl m} g }g d}|r |j        d           t                              |d|          }||S |j        D ]8}	t          |	d          r|	j        |	j        dv r|                    |	           9|	                     ||pd	          |
           |S )Nr   )
attrgetter)
tree_nodesztree_nodes.tree_node_is_branchztree_nodes.ordernoztree_nodes.cmf_created_atztree_nodes.cmf_modified_atztree_nodes.sys_typeztree_nodes.textT)r  r   r  )r   r   r  )rM  reverse)
operatorr  r   r  r  r  r   r  r0  sort)
r  node_idr  sort_byinclude_contentr  	node_listr   rs  nodes
             r9   _macros_page_tree_node_listz+CmfActiveEntity._macros_page_tree_node_list
  s    ''''''	G G G  	-FM+,,,##GD+1 $ 3 3 ;N 	' 	'DtZ(( T]-F">>>  &&&::g&:;;WMMMr:   rv   r  c                     |                      ||||          }|dz  }|dk    r0|D ]-}|j        r$|                     |j        ||||          |_        .|S )N)r  r  r  rv   r   )r  r  r  r  r  )r  tree_node_is_branchr$   rD   r  )r  r  r  r  r  r  r  r  s           r9   r$   z$CmfActiveEntity.macros_page_tree_get
  s    33GWV]o~3	
199! B B+ B&)&>&>twV[GNX_  rA '? 'B 'BDO r:   c                 R    |                      | j        j        ||          | _        d S rG   )_replace_attach_urlr  r2   )r7   r   
new_attachs      r9   r  z#CmfActiveEntity._replace_attachment
  s#    ,,TY_fjQQ			r:   c                 .   ddl m} | |                     |j        j        |j        j                  } |j        j        | v r+|                     |j        j        |j        j                  } n^|                    |j        j                  | v r=|                     |                    |j        j                  |j        j                  } |j        r9|j        j        | v r+|                     |j        j        |j        j                  } ne|j        r^|                    |j        j                  | v r=|                     |                    |j        j                  |j        j                  } |j        r9|j        j        | v r+|                     |j        j        |j        j                  } ne|j        r^|                    |j        j                  | v r=|                     |                    |j        j                  |j        j                  } | S )Nr   )parse)	urllibr  r  rD   r2   r  quoter  r  )r  r   r  r  s       r9   r  z#CmfActiveEntity._replace_attach_url
  s    	!     <<	1DEEDz4''||FJ$4jn6JKKVZ-..$66||EKK
0@$A$A:>CWXX! Bf&8&>$&F&F||F$6$<j>T>Z[[# BF4F4L(M(MQU(U(U||EKK0B0H$I$I$.$:$@B B % F&*@*F$*N*N||F$:$@*B\Bbcc' FEKK8N8T,U,UY],],]||EKK0F0L$M$M$.$>$DF F r:   c                    | j         r| j        j        g|d<   | j        rt	          j        j        | dg|R i | d S t          | d          r| j        j	        rt	          j        j        | dg|R i | | j
        j	        r| j
        dk    r,| j
        j        dk    rt	          j        j        | dg|R i | n| j
        dk    r,| j
        j        dk    rt	          j        j        | dg|R i | nx| j
        dk    r,| j
        j        dk    rt	          j        j        | d	g|R i | nA| j
        dk    r6| j
        dk    r+| j
        j        dk    rt	          j        j        | d
g|R i | t          | d          r| j        j	        st          | d          r'| j        j	        rt	          j        j        | dg|R i | | j        j	        rt	          j        j        | dg|R i | t          | d          r'| j        j	        rt	          j        j        | dg|R i | t          | d          rCt          | d          r3| j        j	        s| j        j	        rt	          j        j        | dg|R i | t	          j        j        | dg|R i | d S )Nfilter_memberscreatedr   changed_statusr   closedreopenedr   work_startedwork_stoppedr   r   assignedmovedresult_textresolvedr  r  sharedupdated)r   r   r2   r  rb   r  r  r   r   r   rI   r  r   r   r    r  r  r  r@  s      r9   _do_event_savezCmfActiveEntity._do_event_save
  sL    	?&*&7&=%>F#$; 	GO$T9FtFFFvFFFFFtX&& X4;+A X(/?Q$QQQ&QQQ)4 X-99d>T>X\d>d>d0xQ$QQQ&QQQQ/8;;@V@Z^f@f@f0zSDSSSFSSSS/=@@TE[E_cpEpEp0~WWWWPVWWWW/=@@TE[_gEgEg $ 6 :m K K 0~WWWWPVWWW}-- L$2B2M Lk22L7;~7PL(zKDKKKFKKK{% I(wHHHHHHHt]++ L0@0K L(zKDKKKFKKK677 JGDJ]<^<^ J3>JBFBXBcJ(xI$III&IIIO$T9FtFFFvFFFFFr:   zBaseModel:custom_field_sync)channelc                    dd l }t                              d|                                 d|             ddlm} t          t                    | d                  }t                              d| d                      ||          }t                              d           |                                 t                              d	|                                            d S )
Nr   zN====================================custom_field_sync_update_models START PID=z data=)CmfCustomClassr  uS   custom_field_sync_update_models: создаем CmfCustomClass для модели )r  uL   custom_field_sync_update_models: вызываем reload_models_and_fields()zL====================================custom_field_sync_update_models END PID=)	r-  r   ri  getpidcmf.models.base_modelr  varsrb   reload_models_and_fields)datar   r-  r  r  custom_classs         r9   custom_field_sync_update_modelsz/CmfActiveEntity.custom_field_sync_update_models
  s     					zacajajalalzztxzz{{{888888LL&6!78		~fjk{f|~~%~	:::	^___--///	l_a_h_h_j_jllmmmmmr:   ry  c           	      x   t           j        r&| j        r| j        j                            d          sd S t           j        t           j        j        j        dg|| j        j        |                     d          t           j        | j        j        d}t          d|d          ||d         |d         g           d S )	Nr^  project_notifyT)r   )initiatorSessionTabIdinitiatorCurrentPersonactioninitiatorActioninitiatorObjIdinitiatorObjChangedFieldsu   initiatorСomponentId	projectIdzproject_notify-r  )roomevent_persons)
r   session_tab_idre   r2   ra  r   rD   r}  component_idcmf_emit_event)r7   initiator_actionevents      r9   r  zCmfActiveEntity.project_notify
  s    		 $//>>	
 F%&%5&'&6&9&?'(/"gm)-d)C)C%&^-	
 	
 	={);==u5Q\K]nst  oA  nB  	C  	C  	C  	C  	C  	Cr:   c                     dS )u   
        Экран по умолчанию если нет никаких правил и схем экранов

        Returns:
            CmfUiForm: системный экран по умолчанию
        Nr^   r   s    r9   _get_default_ui_formz$CmfActiveEntity._get_default_ui_form  s	     tr:   inline_save)tmp_objr   create_forminclude_deletedis_public_formui_form_modec                   |                     d| j                                                  }	|}
|s | j        |g ddd|}|r	|j        rd}
|                     |||	|          }|rd}t          |pddg          }|                    d	           |                    d
           |                    d           |                    d           |                    d           |r\|                     dg           }|D ]C}|                                D ],}t          |t                    r|                    |           -D|                     |          }|D ]b}|t          j        v rt          j                            |           |dz   t          j        v r"t          j                            |dz              c | j        ||d|
d|}|r|j        rd|j         |_        ||_        |d         |_        |d         |_        ||_        |j        s<t-          t.          d          r't.          j                            ||d                   }|S )ux   
        fields - список мета-правил для указания какие поля грузить
        r&  )r@   r8  zproject.ui_form_schemezproject.cust_field_conf_schemer  r3  r   T)r   r  )r  tmp_is_public_formtmp_ui_view_formr  button_saver    rd  r3  r@   r3   r  r8  ui_group_fields_idr  )full_fields_loadmapperr  zDELETED r   r   CmfAutomationUiForm)cmf_ui_form)r   rP  r  sgetr3  r|  ru  rw  r0  rL   r   ry  _build_load_planr   api_hack_fieldsrz  _getr   r~  ui_form_nameui_form_coder	  r   rb   r  ui_get_hook)r  r  r   r  r  r  r	  r   r   r  tmp_include_deletedr~  
fields_setgroups
group_datarN  r  _field_namer~  s                      r9   ui_getzCmfActiveEntity.ui_get  s    "::nck6G6G6I6IJJ- 	<ch$W $W $W,0< < 5;< <G  	'w* 	'"&))'n-; * H H 	)(L8Hi#899
}%%%|$$$~&&&{###z""" 	/!%%&7<<F$ / /
%,,.. / /C!#t,, /"))#.../ //
;;% 	< 	<Ka///!((5555 A$555!((U):;;; ch/?bu  A  Ay  A  A 		c 10ch00+C+F3C+F3C+C? cwv7L'M'M c0<<Sl[`Na<bb
r:   
ui_form_idc                     ddl m}  || j        d                   }t          j                            |          }|D ]}d}t          |          D ]}|d         |d         k    rd}|d         D ]s}|                    d          sd|v r|d                             |           8d	|v r|d	                             |           X|d
                             |           t n|s|                    |           |S )Nr   )deepcopyr  Fr   Tr   r  col2col1)r   r#  ui_formrb   	CmfUiFormget_ui_group_fieldsra  r   )	r  r!  r#  rL  r  groupfound	cur_groupr   s	            r9   _get_ui_group_fieldsz$CmfActiveEntity._get_ui_group_fieldsQ  sI   !!!!!! hs{#4566!55jAA 	" 	"EE!#YY  	=If$555 E&+Ho A A
)44U;; %$#y00%h/66zBBBB#y00%f-44Z@@@@%f-44Z@@@@E 6  "

5!!!
r:   c                 r   d }|j         dk    r-t                              t          |j                            }n5|r3|j        r,t                              t          |j                            }|s|r|r|j        r|s| j                                        }ddg}d }|rdddg dgg dg}g d	}d
d| j         gddd|j	        j        ggg dgddd|j
        r|j
        j        nd gg dgdd|gdd|gdd|j        j        gg}	|r|	                    |           t          j                            g d|	d          }
|D ]}|
D ]}|j        |k    r	|j        } n|r n |s|                                 }d }t          |j	        j                  }d}|r9t          |j	        j                  }|j        rt          |j        j                  }|j        ot          |j                  }t          j        }|rmt          |j                  }|rW|rU||v rQ|j        rJ|||         v r@||         |         }||v r.|||         v r$|||         |         v r||         |         |         }|s|rt+                      }|j        |d<   |j        |d<   |j        |d<   |                     |          |d<   t          j                            |j                  |d<   |r;|r8t          j                            ||||          \  }|d<   |D ]J}||d         vrt+                      |d         |<   |d         |                             ||                    Kt          |j                  }|                    |          st+                      ||<   ||                             |          st+                      ||         |<   ||         |         }||vrt+                      ||<   |||         vrt+                      ||         |<   |||         |         |<   |S n"t=                                          |          S |S ) Nrg   ry  rn   r(  crud_choicer  )rn   ry  r)  )r.  r   N)r)  ry  rn   Nr  r   logic_types)r/  r'  Nr8  r'  )r8  r'  Nr  r&  ui_form_scheme)ztarget.ui_form_jsonr.  r/  T)r   r   r  Noner   r   r  )r!  r  rz  cust_field_config)r  ) r0  r   r   rM   rD   r9  r0  rP  r  r@   r8  r   rb   CmfUiFormSchemeRuler   r.  targetr  cust_field_conf_schemerq   cache_cust_field_config_schemedictr   r   r,  r'  ui_fields_jsonCmfCustFieldConfSchemery  r   r/   r|  )r  r  r  r  r  r&  tmp_projectcrud_choice_ordercrud_choice_filterr3  ui_form_scheme_rule_listr.  ui_form_scheme_ruler~  r  	scheme_idproject_logic_typerq   r6  r!  conf_scheme_cacherz  ui_field_namer8   s                          r9   r|  zCmfActiveEntity._build_ui_formo  s    --//GJ@@KK 	I+ 	I//G4F0G0GHHK  ,	5 &; &;+E &' ;'*{'8'8':':$%-y$9!%)" N*.FeFeFe0f)D)D)D*F&(M(M(M%%tS^<&w/A/D.EF222 #SAQ*['*:*=*=W[\///	 &s,>?#S*:;%sK,F,IJL" & 7NN#5666+1+E+K+KPPP"#' ,L ,) ,)( $5  K/G " "+.:kII&9&@G!E J    52244G.122	 	G!$[%;%>!?!?1 G B EFF	)Fc'2E.F.F),)K& 	iWZJ i; i:9W+W+W5 i)GefpGq:q:q(Fz(RS\(]%$(999kM^_lMm>m>m  sE  IZ  [h  Ii  ju  Iv  sv  sv'8'G'TUg'h "	? !?#vv'.|V$'.|V$&-jU#252J2JV`2J2a2a./,2,<,K,KGJ,W,W[) ({ (CIC`CoCopy]j]h]oDq Dq@I|,?@ *3 b b([0IIIGKvvL5mD$[1-@GG	R_H`aaaa "%WZJ9==jII LEIVV6zB9*EII)TT WPTPVPV6zB9M(Fz(RS\(]%(,===;?66)-8&*;M*JJJHL)-8EXd%m4[ABTU''ww--g->>>r:   c                    | j         j        r| j         j        dk    r| j        sdg ddd| j        gggdg ddd| j        gggdg dd	d| j        gggg d
g}g d}t          j        	                    ||dg          }|r|j
        r	|| _        d S t          j        	                    d          | _        d S d S d | _        d S d S )Nr   r(  )r  r'  Nr  r  )r  r'  Nr  )r  r'  Nr  )
is_defaultr'  T)rD  r  r  r  rD  )r   r   r  T)r  )rI   r   r  r  r@   r9  r0  rb   CmfResolutionr   rD  )r7   r   r   rL  s       r9   r  z CmfActiveEntity._calc_resolution  s+   !, 	'%)X55 P $&C&C&CFVX\_c_n^oEpq $&@&@&@=RVY]YhXiBjk $&=&=&=
DSWSbRc?de888	F WVVF .22&[gZh2iiC Ps~ P*-*0*>*B*B$*B*O*OP P #'!	' 	'r:   r  u2   Регистрация для публикацииpublish_specc                    t                               d| |           d |D             }t          j                            ||           t
                              |           }|D ]}|d         }|d         }t          j                            |          }	|	s/t                               d|           t          d| d	           ct          
                    ||	|
                                           dS )u  
        Зарегистрировать недостающих пользователей из publish_spec и опубликовать для них объект object_id
        :param object_id: id объекта для публикации
        :param publish_spec: [{email: str, publish_policy: str}, ...]
        :param guest: только гостевой доступ
        :param _kwargs:
        :return:
        uZ   publish_for_invited(): Выполняем публикацию объекта %s для %sc                     g | ]
}|d          S r)  r^   )r   specs     r9   r  z7CmfActiveEntity.publish_for_invited.<locals>.<listcomp>   s    999D$w-999r:   )guestr)  r  rI  zUpublish_for_invited(): Person for email %s is absent, publish policy is not created, uB   Не удалось пригласить пользователя u;   , публикация для него не создана.)r    r  r  N)r$  r%  rb   ra   register_personsr  r  r   warningr  r  r   )
r  rF  rK  rL  r  rs  rJ  r)  r  r   s
             r9   r&   z#CmfActiveEntity.publish_for_invited  s?    	qs|  K  	L  	L  	L99L999))&)>>> ##I..  	j 	jDME!"23N%)))66F kmrt t t   b_d  b  b  b  c  c  c''sFSa'bbggiiii	j 	jr:   c                 H     t                      j        |i |}| |_        |S rG   )r/   cloner   )r7   r   r   rL  r8   s       r9   rO  zCmfActiveEntity.clone  s)    eggmT,V,,
r:   	subgroupsc                 D   |D ]} | |d         |d         |d         |d                   }t           j                            |          |d<   |d                             |          |d<   t           j                            |d         j        j                  |d<   |S )	Nr9  r  rq   )rd  r    r@   r8  r  rN   )rC   status_list)rb   r  r  r  r  r  rD   r2   )r  rP  subgroupr  s       r9   group_changes_statusesz&CmfActiveEntity.group_changes_statuses  s    ! 	t 	tHc(<"8!),!7%-o%>#+M#:< < <G &,%7%C%CG%L%LH[!#+K#8#F#Fw#O#OHZ &,&8&H&HU]^hUiUlUr&H&s&sH]##r:   )r   rG   )NTTF)NNNNN)NN)NNNNNFN)F)r   F)FNF)Nrv   FNF)ry  )FNFN)NNT)r;   r<   r=   abstractfields_orderordering	api_allowr  r   cmf_active_entityr   api_methodsessential_child_modelsr@   rg  	CmfStatusr   Fieldrh  r  r  r  r  r  CmfRelationr!   r   r   CmfGenericRelationr   r   CmfGenericM2Mr   r   r   r   r   CmfGenericBackrefattachmentsr   CmfChoiceIntr   	CmfChoicer   
CmfNumericr   CmfIntr   r   r   r   r   r   r   r   r   r:  r  r8  
is_penaltyrI   r"  CmfObjectJsonr  r   rJ  rx  r   propertyr   r   r)   r   r   r   r   r   r   r  r	  r  r  r  r$  r5  r<  rB  re  rn  rv  classmethodr  r  r  r  r  r  r  setterr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r'  r*  r>  rA  rD  r7  r%   rQ  ro  rq  rl  r  r   r  r  r  r   r   r  r  rM   rZ  r   r  r  r  r  r  r  rm  r  r  r%  r  r  r  r  r  r  r  rk  jinja2EnvironmentFileSystemLoaderr-  pathr   r  PROJECT_DIRr   select_jinja_autoescaper!  staticmethodcmf_deferred_jobr+  r  r(   rI  rn  r#   rf  ru  rE  r  r  r  r  r  r  r  r$   r  r  r  on_server_eventr  r  r  r   r,  r|  r  r&   rO  rT  r>   r?   s   @r9   r   r      s       H  L. |HI-1AM 	Q
 	Q
 	Q
 	
K 	'7NQdd S S S S SV]4DO S S S' ' ' ' '% ' ' '& ))
(LV[dh * j j  #z//
(LW[ejsw  0  y  y Z--
(R]akpy} .  z''
(R]akpy} (  z''
(Cd\ajn ( p p
 jsz5?U]itx  LP  Q  QG% % % % %v}.>C % % %    v}.>C   
 
  
%(} !  I         cj3       
  
 ,UUUvvv%) !  I !!
 (UUUvvv%) "  J !!#*"4>akp!qqJ:
 jZclt  @E*K84  Q QD
 *""
$" 	 #  K *""
%'}	 #  K z
$.NGW\l  rF  Kc  d  d   	 	H :
#CcBB   D
 *""
z2	 #  K 
((
H	 )   !!#*"8BV^b!ccJz
 6@YaeffHj&&
(P '  O J$$
(X %  M z''
(G (   j&&
7%%)(.%
 
 '  O *""3:#@Jgrv"wwK*""
 # 

 

K *""
%3	
 	
 	
	 #  K !!
 3,- "  J z
1    H !!
$GQV`e "  J 
((
/",F&	
 
 Ed ) 	D 	D z''
3d ( $ $  6< 4>Q[`lr{  A  A  AL' ' ' ' 'CJ& ' ' '( 
  !6@V`hp} ~~I9 9 9 9 9v " " X"   

 
 
 
6, , ,+ + +; ; ;z  > > >$  
 
 
= = =2%4 %4 %4N% % % " " "(k k k     $ $ $' ' '(G G GR  B TX/41 1 1 1 1 1f    [, u u u u u [u ]a"y y y y y [y, 
m 
m 
m 
m 
m [
m   E4 E4 E4 E4 E4 [E4N rvoH oH oH oH oH [oHb 2 2 X2 	 	 	  g g g&A* A* A*F        6> > > > >+ + +Z ?  ?  ?D> > >; ; ;"    J J J J J
        /
 /
 /
 /
 /
v
 
 
 
 
UC UC UCn  O O O :>VZ   t    5 5 5LC LC LC\  i i i_ _ _$ 26Q D D D D D D DLX X XN N ND' ' ' ' '
 +/ - - - - - - [-
 ,0 . . . . . . [.
$ $ $& 
 
 
 
 [
 ?DV[fjqu    t t      J *""
e5Eych&7/	
 
 #  K 
((
e5dnw3L^/!
 !
 )    J,,
e5Zdm3L^/!
 !
 -    J,,
e5Ycl3L^/!
 !
 -    J,,
J$	 -  " " "+ + + +,$ $ $ Z%%
   &  N" " "<X X X27 7 7r"  "  "  "  " HQ Q Q	% 	% 	% 	% 	%2 2 2 2 2 20  D ##&&V5GS^(_(_'`aa. $  J
 (';H^bd d dC C Cd d \C$X $X $XL\ \T \ \ \ \s s s sjOC OC OC OCb    
< < < < < 23 . . . . . . . . .`3 3 3 3 3      \L L L   [>F. F. F. F. F.P    [6 
 
s 
 
 
 [
R R R   \4G G GB _:;;;	n 	n <; \	nC C C C&   [ #'%$U6 6 6 6 [6p c d    [: dhm m m m m [m^' ' '& }H^bd d dj js j j j jd d \j:    
 	d 	t 	 	 	 [	 	 	 	 	r:   r   rw   )deploy_jobs)r   r  r   r_  r  rg  r   modulesr   
sqlalchemyr   sqlalchemy.sqlr   dateutil.relativedeltar	   cmf.includecommon.fields.cmf_active_entityr  not_in_any_listsrY  r   r   ru  r  r^   r:   r9   <module>r}     s               



                         0 0 0 0 0 0     & & & &' K0 K0 K0 K0 K0fm5E K0 K0 K0^`         r:   