
    bh]I                        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          Z G d dej        j                  Zej                            ej        j        dg dddg d !          Z ej                            ej        j        d"g dddg 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          Z'ej                            ej        j(        d0d1d2d3d4d5d6d7d8ddd9:          Z)ej                            ej        j*        d;d<d=d>d?d@dAB          Z+ej                            ej        j,        dCdDdEF          Z-ej                            ej        j.        dGdDdH          Z/ej                            ej        j        dIdJ          Z0ej                            ej        j        dKdJ          Z1ej                            ej        j        dLM          Z2ej                            ej        j        dNM          Z3ej                            ej        j        dOM          Z4ej                            ej        j*        dPdQdRdSdTdUdVdWB          Z5ej                            ej        j        dXdY          Z6ej                            ej        j"        ddZd[dddd\]          Z7ej                            ej        j        d^dg d_`          Z8ej                            ej        j"        dZdadbddcgdd          Z9ej                            ej        j        dedfddg          Z:ej                            ej        j"        dhddi          Z;ej                            ej        j*        djdkdldmdndod\dddp          Z<ej                            ej        j        dqdrd'dds          Z= ej        ej>        dtddudv          Z? G dw dxej        j"                  Z@ej                            ej        jA        dyd-dz{          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 ZXd ZY	 	 d fd	ZZe[dd            Z\e[d fd	            Z]e[	 	 d fd	            Z^e[d fd	            Z_e[	 	 	 	 	 	 	 d  fd	            Z`e[	 d fd	            ZaeDd             Zbebjc        d             Zbd Zdd Zed Zfd Zgd Zh fdZi fdZjd Zkd Zld Zmd Znd Zod Zp fdZq fdZr fdZs fdZt fdZud Zvd Zwd ZxddddeyfdZzd Z{d Z|d Z}d Z~d ZddDd fd
Zd Zd Z fdZe[dd fd
            Ze[dd fd
            Zd Ze[ 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                    Ze edddgdd          dd                        Zd ZddefdZd"dZd!dZ fdZ fdZdDddef fdZ fdZededefd            Zd Ze[d             Z fdZe[d#d             Ze[d$defd            Zd Zed             Zd Ze ed          d	                         Zd%dZe[d             Ze[dddddddd            Ze[dedefd            Ze[	 d& fd	            Zd Ze eddgdd          d'dedefd                        ZĈ fdZe[dedeyf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ZdZdZdZdS )CmfActiveEntity.codeu   КодTN)r;   r<   r=   rQ   uniqueindexrX   r^   r:   r9   r   r`   r   s"        r:   r   u   Постановщик	CmfPerson)rQ   modelsr[   c                   *    e Zd ZdZdgZdZdgZdZdZdS )CmfActiveEntity.responsibleu   Исполнительrc   T	parent_idN)	r;   r<   r=   rQ   rd   r[   rS   options_list_query_allrU   r^   r:   r9   r   rf      s5        **m!%r:   r   u   Соисполнители)
CmfProject
CmfOrgUnitCmfPersonGrouprc   CmfRole)zCmfProject.executorszCmfOrgUnit.tree_nodeszCmfPersonGroup.rg_memberszCmfRole.person)rQ   rd   leftr[   nested_fieldsu   Наблюдателиu!   Без подтверждения)rQ   defaultu   ТэгиCmfTagmembersactivity_idrg   )rightrQ   rZ   backrefwidgetr[   rS   rU   u   Вложенияr*   r    )rQ   rd   rt   u   Ждем ответаu   Приоритетu   Минимальныйu   Низкийu   Обычныйu   Высокийu   Критичныйu   Блокирующий)rE   r            0CmfPriority)rQ   choicesro   rR   rU   ru   u   Оценка12345)r}   r~   r   r   r   )rQ   r|   u!   Оценка полезностиr      )rQ   minmaxu6   Количество оценок полезности)rQ   ro   rR   u   Будильник)rQ   rb   u   Крайний срок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   ro   rb   	load_modeu!   Родительская нода)ri   	CmfFolderCmfActiveEntityFilterCmfDocumentCmfTaskCmfComponentCmfAssetSchemeCmfRegistry)rQ   rR   rd   u   Сделаноu!   Значение чекбоксаrI   )ru   rQ   commentvirtualrequired_fieldsrV   u   Вид деятельностиCmfActivity)rQ   rZ   rR   r[   u!   Задача просрочена)rQ   rV   ro   u   Кеш: Тип статусаu   Открытu   В работеu+   Подтверждение закрытияu   Закрыто)OPENIN_PROGRESS	IN_REVIEWCLOSED)rQ   r|   r   rV   rb   rW   u!   Настройка статусаCmfStatusOpt)rQ   rZ   rt   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_diff4  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   rb   rR   ro   r   r^   r:   r9   approvedr   .  s7        E	' 	' 	' 	' 	'r:   r   u   ПодписчикиCmfFollower)rQ   rt   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        |                                 v r7d}| j	        j
        |                                 vrd}| j        dk    rd}|rdS dS | j        r| j        t          j        k    rdS |d	k    r| j        rdS dS dS )
Nrx   r   rE   r   TFr   rw   r   )r/   _get_field_log_levelr   
is_changedr   r   r   r   
get_ownerscmf_modified_byr2   rI   r   )r7   
field_nameargskwargsrT   silent_owner_changesr8   s         r9   r   z$CmfActiveEntity._get_field_log_levelD  sS    1EGG0MdMMMfMM	>> &&4+;+F&2&&1 DI$81 D$8$C1 t0000#'  #)1B1BBB',$%66',$# qq  	4#3q7G#G#G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:   rx   rw   )r   user_rating_count)rd   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   )rd   
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   )rd   r*   r   r   )r7   r   r   attachs       r9   _delete_attachmentsz#CmfActiveEntity._delete_attachments  sP    *//$7M/NN 	+ 	+FFM4*6****	+ 	+r:   c                    | j         }|                     |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   
        Создание задачи по шаблону
        Tis_dummyN)r   copy_allr   listsFtz	only_data)r   r   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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                     | j         j        sd S | j         rCt          | j         j        t                    r$| j         j                                        | _        nd | _        d S rG   )r    r   rL   r2   r   r3   r4   parent_logic_prefixr   s    r9   _calc_parent_logic_prefixz)CmfActiveEntity._calc_parent_logic_prefix  s]    {% 	F; 	,:dk&7II 	,'+{'?'D'D'F'FD$$'+D$r:   c                 >   | j         j        sD| j         j        s8| j         j        | j        k    s#| j         j        | j        k    s| j        j        sd S | j         r'| j                            | j                   | _         d S | j                                        | _         d S )N)r   )r   r   is_nullrH   rI   rN   rO   r   s    r9   _calc_statuszCmfActiveEntity._calc_status  s    K"	{"	 {&$*@@@{#t}44}' 5 F ; 	=-::$+:NNDKKK-::<<DKKKr:   c                 P   | j         j        s| j         j        | j        k    r| j                                         | j         j        | _        | j        j        r| j        j        dvr'| j        j        dv r| j                                         | j        dk    r | j	        s| j	                                         | j        dvrd | _
        d | _        | j        dk    r| j
                                         | j        dk    r| j                                         d S d S d S | j        dk    r"| j        s| j                                         d S | j        dk    r"| j
        s| j
                                         d S | j        dk    r"| j	        s| j	                                         d S d S d S )N)r   r   r   r   r   )r   r   rH   rI   status_modified_atset_nowoldnewstatus_in_progress_endstatus_in_progress_startstatus_review_atstatus_closed_atr   s    r9   _calc_status_timestampsz'CmfActiveEntity._calc_status_timestamps  s   ;! 	4T[%<@V%V%V#++---%)[%<D"%0 4.2:QQQ 26:QQQ/77999)]::4C`:5==???)1HHH,0D),0D))[88)11333)X55)11333334 4 65 #x//8M/!))+++++#{224;P2!))+++++#}44T=Z4)1133333 5444r:   c                     | j         sd S | j        s/| j                                         |                                  d S d S rG   )r   r   r  _cacl_next_periodr   s    r9   _calc_periodiczCmfActiveEntity._calc_periodic:  sT    # 	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_periodD  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   Задача не может быть без постановщикаTabort)r   r   r   	cmf_alertr   s    r9   _calc_ownerzCmfActiveEntity._calc_ownerX  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)is_new
class_namerd   
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    load_fieldssave_prepare)r7   r    s     r9   _calc_parentzCmfActiveEntity._calc_parentm  s    & 	$4+; 	$&&((F $&DK//""#b#b#bccc$!!#####	$ 	$ 	$ 	$$ $//r:   c                 8   | j         j        r| j        r| j         r| j         j        dk     r| j        j        dk    st
          j        | j        k    rj| j         r0| j         j        | j        j        t          j
        d          z   k    r3d}| j        t
          j        k    r|dz  }n|dz  }t          |d	           | j         j        rN| j        d
k    rEt
          j        |                                 vr'| j         j        dk     rt          dd	           d S d S d S d S d S )Nr   i     )hoursu`   Нельзя передвигать будильник дальше крайнего срока.uz    Обратитесь к постановщику для разрешения на сдвиг крайнего срока.uB    Сдвиньте крайний срок если уверены.Tr  rx   u   Нельзя сдвигать будильник блокирующей задачи вперед.Возьмите в работу или обратитесь к постановщику.)r   r   r   ager   r   r   r   r2   r   r  r  r   r   )r7   msgs     r9   _check_alarm_date_validz'CmfActiveEntity._check_alarm_date_validv  sl   O&	'	' _		' )-(;a(?(?$(722a6F$.6X6X_ 7Y(,(=ATW_WipqWrWrWrAr(s(s
 uC~!111  T  T[[c&&&& O&		"" (9(999 #a'' ry}     		 		""99 ('r:   c                    |                      g d           t          j         G d d                      } |            }| j        r| j        j        j        dk    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        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)parent.sl_deadline_shiftparent.sl_only_owner_approveparent.sl_deny_no_approve0parent.sl_allow_executor_change_nofatal_deadlineparent.sl_task_need_approveparent.sl_task_only_owner_closezparent.sl_readonly_closed_task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_subtasksz5parent.sl_deny_closing_task_before_closing_checklistsz7workflow.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=   rN  r  __annotations__rO  boolrP  rQ  rR  rS  rT  rU  rV  rW  sl_controllersl_controller_strr^   r:   r9   SimpleLogicOptionsrM    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\  ri   u   Проект: u   Бизнес-процесс: )r3  dataclasses	dataclassr    r2   r'  rZ  r   r[  rN  rO  rP  rQ  rR  rS  rT  rW  rN   enable_sl_controlrU  rV  )r7   r\  optionss      r9   _get_sl_optionszCmfActiveEntity._get_sl_options  s&    	 
 
 
 	 	 	* 
		% 	% 	% 	% 	% 	% 	% 
		%  %$&&; 
	F4;,7<GG$(KG!(K9I(K(KG%(,(E(KG%,0K,M,SG))-)G)MG&@D@u@{G=+/;+K+QG(/3{/S/YG,.2k.Q.WG+EI[E  FF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   rx   )r   r   r:  r   r   )r   r   r&  r   r9  r  cmfr   CmfDateTimer   ra  rN  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                 H    t           j                            ||            d S )N)	person_idobj)rd   	CmfNotifyclose_open_notifies)r7   rl  r   r   s       r9   _clear_notifyzCmfActiveEntity._clear_notify  s$    ,,yd,KKKKKr:   c                 t   |                      g d           t           t                      j        dd|i|          }| j        r5| j                             |           |                    | j                   | j        r5| j                             |           |                    | j                   | j                            |          }|r>|s<| j	        r5| j	        j
        j        dk    r | j	        j                            |          }|                    |           | j                            |          }|r>|s<| j	        r5| j	        j
        j        dk    r | j	        j                            |          }|                    |           |rh| j	        ra| j	        j
        j        dk    rL| j	        j        r@| j	        j                             |           |                    | j	        j        g           t                      }	|D ]$}
||
j        |k    r|	                    |
           %|	S )u   
        Получение списка конечных пользователей затронутых обьектом
        )zcmf_owner.user_localzwaiting_for.user_localzresponsible.user_localzspectators.user_localzexecutors.user_localzcmf_author.user_localparent.cmf_owner.user_localr   r   ri   Nr^   )r3  setr/   all_relation_personsr   addr   r   
all_nestedr    r2   r'  updater   r   r   rf  r   )r7   r   rf  with_parent_ownerinherit_executorsr   resultr   r   retur8   s              r9   rt  z$CmfActiveEntity.all_relation_persons  s_   
 	 R R R 	S 	S 	S 1UWW1JJJ6JJKK 	)(((777JJt'((( 	)(((777JJt'(((N--V-<<	 	HY 	H4; 	H4;CTC_coCoCo-888GGIi   _//v/>>
 	JZ 	JDK 	JDKDUD`dpDpDp/::&:IIJj!!! 	7{ 7t{0;|KKPTP[PeK%111@@@t{45666
 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>>  sE    kkkfv{kv||~~QWQ\QbQhQhQjQj?j?j6?j?j?jr:   r   rw   r^   )rd   CmfWorkflowget_status_listr   )clsobject_fieldsr   r  slicer  r   r{  s        `  r9   status_options_listz#CmfActiveEntity.status_options_list,  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_idr0  r  )ft_logic_typesr   Nr  IN)ft_projectsr   Nr  ft_modelr   )r  r   )r   r'  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_listC  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.releaserg   r  r  sys_typer    )r  r   r   r  )r   r   r/   r  )r  r  r  r   r   r  filter_by_projectr   rg   r  r8   s             r9   releases_options_listz%CmfActiveEntity.releases_options_listS  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  )rd   r   r   projectsecurity_level_schemer/   r  )r  r  r   r  r   taskr  r8   s          r9    perm_security_level_options_listz0CmfActiveEntity.perm_security_level_options_listj  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}|                    d          r|                    dg           |g|d<   n||d<   d|vr |j        d            t)                      j        | j        j        f||||||d|S )Nu   Не найдено поле     в классе rg   ri   )project_typer   r   filter_responsibler.  r  r   T)child_models
return_setrD   r  r   )rf  r   Trc   roles)r  all_optionsmodels_listmodels_filtersr   r   )r   r   
ValueErrorrd   
startswithri   r  r   r   RelationCacheget_children_dictrD   r2   r   r'  rs  ru  r.  
setdefaultr   r/   r  r   )r  r  r  r   r   r  r  r  r   fieldrg   r  children_dict	assistant
model_nameresp_filterr8   s                   r9   %options_list_for_responsibility_rolesz5CmfActiveEntity.options_list_for_responsibility_rolesw  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:..
 -//444K!!+.. :/=/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_idrg   r  z
scheme_wf.r   	scheme_wfrD   r  cmf_model_namer  rr   r  filter_activity)r  r  N)r   r   r   r  r   )rr   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  r'  rd   CmfSchemeWfcmfutilget_obj_by_idr   r  getattrr   r  r  r   r  customru   r/   r  )r  r  r  r   r  r   r  r   project_participiants_fieldsr  lt_field_namer  r  rg   r    rr   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_checked.  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:   Некорректное значение для поля )r3  rN   r4   rO   r   CmfValidationError
is_checkedrQ   )r7   r2   s     r9   r  zCmfActiveEntity._is_checked2  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                    | j         rd S d }| j        r5d| j        j        v r'| 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 )Nr/  z
activity.*r
   r   businessT)r   r   cache_inmemory)
r/  r    r   r3  r   r   r4   rd   r   r   )r7   parent_activitys     r9   _calc_activityzCmfActiveEntity._calc_activityF  s    = 	F; 	3:);;;K##\N333"k2O} 	, 	,+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   r7  )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   r9  )r7   current_times     r9   _calc_alarm_datez CmfActiveEntity._calc_alarm_dateV  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--rx   )
r   r@   r   r  r/   
_calc_coder  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                 p   | j         r| j        j        sd S | j         j        r	| j         rd S | j         s!| j                            |           | _         d S | j        j        r8| j        j        r,| j        j                            |           }|| j         k    rd S | j                            |           | _         d S rG   )r@   r  r   calc_logic_typer  )r7   old_default_logic_types     r9   _calc_logic_typez CmfActiveEntity._calc_logic_type  s    	~(	 F?% 	$/ 	F 	"n<<TBBDOF >$ 	); 	%)^%7%G%G%M%M"%88.88>>r:   c                     | j         j        s| j        j        s	| j        rd S | j        j        r	| j        rd S t          j                            |           | _        d S rG   )r    r   r/  r  rd   r  calc_schemer   s    r9   _calc_scheme_wfzCmfActiveEntity._calc_scheme_wf  sh    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@   r/  rN   calc_workflowr   s    r9   _calc_workflowzCmfActiveEntity._calc_workflow  sx    N%	)	 }'	 =		 F =# 	 	F 44T::r:   c                     d S rG   r^   r   s    r9   _calc_default_workflowz&CmfActiveEntity._calc_default_workflow.      r:   c                     d S rG   r^   r   s    r9   _calc_responsiblez!CmfActiveEntity._calc_responsible1  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_changed4  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   rz  r8   s     r9   r  z.CmfActiveEntity._acl_subjects_list_level_write9  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_readC  s1    6688do&&&r:   c                 N    t                                                      g dz   S )N)7r   r   r   rN   r3   parent.cmf_ownerparent.cmf_owner_assistantszparent.activityr  r   r  zstatus.ordernozstatus.workflowr   r   r   cache_status_optr/  
cmf_importr   sharelink_hashzlogic_type.coder  r   r  r   r  project.logic_prefixr=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  ui_view_formr  z,perm_security_level.access_task_fields_cacher   r   r   r  r  r  r   r   r  )r/   save_preload_fieldsr  s    r9   r%  z#CmfActiveEntity.save_preload_fieldsI  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_fieldsz  s+    ww0022	6
 
 	
r:   c                      t          d          )NuG   Не используется! Оставлено для истории)'	Exceptionr&  osenvironr   r    r2   r'  disable_simple_permvaluessimple_perm_allow_fieldsr  endswithr   r   r   r   ra  rQ  r   check_owner_permsrs  rt  rw  r   r   r   r   r   r   r   r   sortedmapr   r   rd   CmfAccessListcheck_admin_mode)r7   need_owners_checkr  
sl_optionsneed_reluser_checkall_relation_userr:  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_fieldsrC  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   rd   r   )r7   rB  rC  _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   debugr5  r  r  r  r  r  _calc_tree_parent_calc_perm_security_levelr  r  r   _calc_status_historyr  r   r  rj  r  r   r   r;  r  r   _calc_sharelink_hashrN  +_calc_perm_security_level_allowed_ids_cache)r7   rI  s     r9   recalc_fieldszCmfActiveEntity.recalc_fields  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_changedR  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 = )rm  from_status	to_status
transition)r   r   rI   rH   r*  rD   r  r#   rd   CmfStatusHistoryr  r  rN   calc_transitionr   r   s    r9   ri  z$CmfActiveEntity._calc_status_historyU  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                    | j         r| j                             g d           |                     |           }|d         D ]}|d         |                             d          s$|d         |         d         d         dk    rCt	          | |          }|j        s)t          | ||d         |         d         d                    d S )N)ui_form_schemer3   cust_field_conf_scheme	ui_fieldsro   r2   _NONE_)r  r3  _build_ui_formr   r  r   r   )r7   ui_form_jsonconf_field_name	cur_fields       r9   _calc_default_fieldz#CmfActiveEntity._calc_default_fieldd  s    < 	cL$$%a%a%abbb**400+K8 	o 	oO,_=AA)LL K(9)DWMQYYYo66I' oo|K/H/YZc/del/mnnn	o 	or:   )rE  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          j                            |             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 end)rm  r^   )r&  r~  r'  r   r/   r   r   r   rd   CmfTransr   r  rD   r  r  rn  r   r>  r   rf  rl  handle_mention_persons_calc_resolutionCmfStatdo_calc_statistics
CmfLicensecheck_license)r7   rE  r  r   r   transr{  r8   s          r9   r   zCmfActiveEntity.saver  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 ()rw  r  r   before_save)time_CmfActiveEntity__start_tsr   rf  rD   r&  r   r   r   rd   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        rw| j        rp| 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  rw  
after_savez_CmfAutomationCrudTrigger endz
save end (z): z.3f)rA  r   rf  configBZPYTHON_ENABLEDrN   save_eval_coder4   execr2   globalslocalsr,  r&  r   r   
is_definedrd   r  r  r   rD   r  r  )r7   r   hack_before_responsibles      r9   before_save_data_hookz%CmfActiveEntity.before_save_data_hook  s   	&'''" 	.} .!=!B!B!D!D .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_filerd   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_hookrd   r  r  )r  obj_copyr{  r8   s      r9   r  zCmfActiveEntity._post_copy_hook
  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_imgr#  c                 <    g | ]}|                     d           |S )r  )r  )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  r3  r/   r   r  )r7   r   r  r   r   r   r   r   fields_for_load	cf_fieldsr  r8   s              r9   r   zCmfActiveEntity.copy  s      	$#$ $ $ POOOO	 	.""9---))) 	D577<?T???? 	,!!(+++r:   u   ACL Праваro   u   Нетu   ACL Полныеu   ACL Только чтениеu   ACL Приватные)ro   fullrX   private)rV   rQ   ro   rR   r|   u-   WEB Авторизованный доступu   Доступ запрещёнu2   Могут только просматриватьuE   Могут просматривать и комментироватьu   Полный доступ)ro   denyrX   r   r  u#   WEB Анонимный доступu"   WEB Доступ по ссылкеu8   Персональные политики доступаCmfPermPublishPolicy)rQ   rZ   rt   c                     |                                   |                                  d| _        |                     d           |                     d           d S )NTforcer   )r4  _load_perm_fieldsperm_has_acl_calc_perm_aclr   r7   perm_publish_policys     r9    perm_publish_policy_changed_hookz0CmfActiveEntity.perm_publish_policy_changed_hooki  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 )Nro   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:   r7  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   rf  rj  r   )r7   r  r  	model_clschildr  r  s        @@r9   rj  z$CmfActiveEntity._calc_sharelink_hashq  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"  rj  r   s    r9   do_erase_sharelink_hashz'CmfActiveEntity.do_erase_sharelink_hash  s$     #!!#####r:   CmfStr32zShareLink hash)ru   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 группыro   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  rd   CmfAccessRuleperm_aclrk   sharelink_groupr  r   r  r   r   rf  )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  rd   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 правилами для публикации документовro   Nr  SETMEBUG)r  r    r  zanonymous@evateam.ru)r  rX   r  r   r  r  r  r  r  )perm_policy_anonymousperm_policy_guestrd   r  r  rc   r   r  r   r  r   rk   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                    |                                   |                                  |                                  |                     dg           | 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 автоматическими правилами в зависимости от политикиr.  r  r  r  rX   	denyWriter  r  r  N)r  r  r  r3  perm_policyrd   r  r  rk   
user_groupr   r   rs  r  r  r/   _acl_scaffold)r7   writer_listreader_listr8   s      r9   r   zCmfActiveEntity._acl_scaffold  s}   ))+++'')))**,,,01222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  )r3  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 )Nro   T)r/   _calc_perm_has_aclr  r   r  r  r  s    r9   r	  z"CmfActiveEntity._calc_perm_has_acl1  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 )Nro   Tr  )r  r   r  r  r   r  r  r  r  r  r/   r  )r7   r  r8   s     r9   r  zCmfActiveEntity._calc_perm_acl<  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    re| j        r`| j        j        rV|                     dg           | j         s;| j        j        r1| j        j        j        r"| j        j        j        | _         d S d S d S d S d S d S d S )Nzperm_parent.perm_security_levelr  r   z9project.security_level_scheme.default_task_security_level)	r  r   r  r3  r   r'  r  r  default_task_security_levelr   s    r9   rh  z)CmfActiveEntity._calc_perm_security_levelT  s+    #. 	 F& 	?@AAAt')>?? DDTDh +/+;+O( ?i''|  7   "]!^___/ ::V 04|/Q/mD,F ('        r:   common	templates)loader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  rm  z%s
%s)r  )r  r  app_base_href_sharelink_hrefrd   CmfPluginMailBoxget_local_mailboxr   
_jinja_envget_templater   renderr   r  logginginfosend_message)
r  r  rI  rm  r  mail_boxmessage_templater  emailmessages
             r9   _send_sharelink_emailsz&CmfActiveEntity._send_sharelink_emailsx  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  rw   rE   r   zshare//z?hash=N)r"  r    r   r  split)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   ro   rX   z&CmfActiveEntity.send_sharelink(%s, %s))r  r  )r   )	r3  r  r   r   r!  rD   schedule_deferred_jobr'  rM   )r7   r  rI  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    rI|                     g d           | j        r+| j        j
        r|                    | j        j
                   |dk    rI|                     g d           | j        r+| j        j        r|                    | j        j                   |dk    r9|                     g d           | j        r| j        j        j        dk    rt                      }| j        j
        r|                    | j        j
                   | j        j        r|                    | j        j                   | j        j        r3|                    | j        j                            |                     | j        j	        r3|                    | j        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|                     g d$           | 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_deleteddoes_not_work
   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)r.  z cmf_owner_assistants.cmf_deletedz"cmf_owner_assistants.does_not_workzvar:project_owner)r  parent.cmf_owner.cmf_deletedparent.cmf_owner.does_not_workrr  zvar:project_owner_assistants)r  'parent.cmf_owner_assistants.cmf_deleted)parent.cmf_owner_assistants.does_not_workzvar:project_users)r  r;  r<  r  r=  r>  zparent.executorszparent.spectatorsri   z
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)rC  zdefault_owner.cmf_deletedzdefault_owner.does_not_work
components)zcomponent.default_ownerz#component.default_owner.cmf_deletedz%component.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_approversrw   )	recursionall_nested_persons)#r   r  r  r3  r   r   r   r  rv  r   r   r.  r    r2   r'  rs  ru  rw  r  r   r   rC  rD  r   r  get_all_followersrt  r   master_approversapprove_groups	approversr   extract_var_objr0  r1  )r7   obj_coderE  rF  	var_usersr   res	componentagres_var_usersvar_users              r9   rK  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( <  !:;;;*** _ _ _ ` ` `{ 8t{4 8  !6777555 K K K L L L{ Ct{? C  !ABBB*** G G G H H H
 { 
,t{0;|KKee;( 3GGDK1222;3 AJJt{?@@@;( PJJt{4??v?NNOOO;) QJJt{5@@@OOPPP  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   "K "K "K L L L!% 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        sz| j        j        sn| j        j        sb| j        j        sV| j        j        sJ| j	        j        s>| j
        s7d}| j         r*| j         j        r| j         j        D ]}| |         j        rd}|sd S t                              d           | j         s*| j        rd | _        t                              d           d S t                      }t                      }|                     g d           | 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t7          t9          | |	                   t:          j                  rR| |	         D ]H}
|j        r |                    |
j        j                   )|                    |
j        j                   I|j        r&|                    | |	         j        j                   |                    | |	         j        j                   ݐd |v sd |v rt?          dd           tA          |          tA          |          d| _        t                              d           d S )	NFTz1_calc_perm_security_level_allowed_ids_cache startre  )z;perm_security_level.security_level_rules.access_member.codez;perm_security_level.security_level_rules.access_task_fieldsz8perm_security_level.security_level_rules.access_readonlyzproject.cmf_ownerzproject.cmf_owner_assistantsuf   DEV: _calc_perm_security_level_allowed_ids_cache None должны отфильтровываться!r  )r  rX   )!r  r   r   r.  r  r   r  r   r   r   r&  access_task_fields_cacher   rf  %perm_security_level_allowed_ids_cachers  r3  security_level_rulesaccess_memberrK  r   access_readonlyru  access_member_idr2   rD   access_task_fieldsrF  typer   
CmfM2MBaser  r   )r7   r  custom_changedr  allowed_idsallowed_ids_readonlyruleextracted_membersextracted_memberr   rm  s              r9   rk  z;CmfActiveEntity._calc_perm_security_level_allowed_ids_cache2	  s    $/		 ~(	 (3		
 )	 *	 |&	 ~(	 )	 *	 {	 #N' .D,D,] .$($<$U . .LL)4 .)-! 	CDDD' 	9 B=A:GGEFFFFee"uu : : : 	; 	; 	; ,A 	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 )Nro   )r  r  r/   r#   )r7   rI  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_deleterc  includerd   r*   r   _delete_child_object)r7   r   r  r8   s      r9   re  z'CmfActiveEntity._direct_children_delete	  s~    ''11&111+,:??uV^`ceiUj?kk 	< 	<J%D%j;;F;;;;	< 	<r:   rE  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   r9  r:  r   rA  rB  r   r3  r4  r   r7  r8  r   r5  r6  r  r?  r@  zfollowers.personzfollowers.person.cmf_deletedzfollowers.person.does_not_workzfollowers.notify_volumezfollowers.follow_childrenr1  offr   rw   rh  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)rd   r4  check_access)	r   rm  r'  cmf_owner_idrm  obj_parent_idrU  r7   self_ids	     r9   r  z5CmfActiveEntity.get_all_followers.<locals>.<listcomp>	  sk     	\ 	\ 	\'44$3!+\%!'U$($'4Y 5 [ [	\	\ 	\ 	\r:   r^   )r  r3  r/   rG  	followersnotify_volumer   removeru  follow_childrenr1  unionr  r2   rg   ru  rD   r'  rU  r  rs  CmfACLNotInitializedError)r7   rE  r   r   rN  followerrx  r'  ru  rm  rv  rU  rw  r8   s   `      @@@@@@r9   rG  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^   )r3  full_search_fieldsr  r@   r   r2   r/  rI   r   r   r   r/   full_search_index)r7   r   r8   s     r9   r  z!CmfActiveEntity.full_search_index	  s    0111/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bsrz  r  rm  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)rk   rc   mention)event_person)
r  r   rs  r  r  r  r'  rd   CmfEventdo_event)r7   objs_oldobjs_newrm  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~!@@@((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   ri   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> 
  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>
  s,    (i(i(iVWGC8L4Mq,Q,Q(i(i(ir:   )r'  r  r  get_model_by_namer   r   sharelink_access_requestrD   sharelink_access_objrf  r3  )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 )NrP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  )r  r   rf  r5  r  r  r  r  r  rg  rh  r  r  r   r  r  rj  r  r   r   r;  r   rj  rN  rk  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~  )rJ  reverse)
operatorr  r   r  r  r  r   r  r'  sort)
r  node_idr  sort_byinclude_contentr  	node_listr   rm  nodes
             r9   _macros_page_tree_node_listz+CmfActiveEntity._macros_page_tree_node_listQ
  s    ''''''	G G G  	-FM+,,,##GD+1 $ 3 3 ;N 	' 	'DtZ(( T]-F">>>  &&&::g&:;;WMMMr:   rw   r  c                     |                      ||||          }|dz  }|dk    r0|D ]-}|j        r$|                     |j        ||||          |_        .|S )N)r  r  r  rw   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_getm
  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_attachmentz
  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   ru  r2   r&  rd   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                     t                               d           ddlm} t	          t
                    | d                  } ||          }|                                 t                               d           d S )NzI====================================custom_field_sync_update_models STARTr   )CmfCustomClassr  )r  zG====================================custom_field_sync_update_models END)r   rf  cmf.models.base_modelr  varsrd   reload_models_and_fields)datar   r  r  custom_classs        r9   custom_field_sync_update_modelsz/CmfActiveEntity.custom_field_sync_update_models
  s|     	
[\\\888888LL&6!78	%~	:::--///	YZZZZZr:   rw  c           	      n   t           j        r| j        r| j        j        j        dk    sd S t           j        t           j        j        j        dg|| j        j        |                     d          t           j        | j        j        j        d}t          d|d          ||d         |d         g           d S )	Nri   project_notifyT)r   )initiatorSessionTabIdinitiatorCurrentPersonactioninitiatorActioninitiatorObjIdinitiatorObjChangedFieldsu   initiatorСomponentId	projectIdzproject_notify-r  )roomevent_persons)
r   session_tab_idr    r2   r'  r   rD   keys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@   r/  zproject.ui_form_schemezproject.cust_field_conf_schemer#  r0  r   T)r   r  )r  tmp_is_public_formtmp_ui_view_formr  button_saver    r  r0  r@   r3   r  r/  ui_group_fields_idr  )full_fields_loadmapperr  zDELETED r   r   CmfAutomationUiForm)cmf_ui_form)r   rM  r  sgetr0  rz  rs  ru  r.  rL   r   rw  _build_load_planr   api_hack_fieldsrz  _getr   r{  ui_form_nameui_form_coder	  r   rd   r  ui_get_hook)r  r  r   r  r  r  r	  r   r   r  tmp_include_deletedr{  
fields_setgroups
group_datarK  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_formrd   	CmfUiFormget_ui_group_fieldsr  r   )	r  r!  r#  rN  r  groupfound	cur_groupr   s	            r9   _get_ui_group_fieldsz$CmfActiveEntity._get_ui_group_fields  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 ) Nri   rw  ro   r  crud_choicer  )ro   rw  r  )r.  r   N)r  rw  ro   Nr  r   logic_types)r/  r  Nr/  r  )r/  r  Nr  r$  rv  )ztarget.ui_form_jsonr.  r/  T)r   r   r  Noner   r   r  )r!  r  rx  cust_field_config)r  ) r'  APPget_cache_projectrM   rD   r0  rv  rM  r  r@   r/  r   rd   CmfUiFormSchemeRuler   r.  targetr  rw  rr   cache_cust_field_config_schemedictr   r   r,  r'  ui_fields_jsonCmfCustFieldConfSchemerw  r   r/   rz  )r  r  r  r  r  r&  tmp_projectcrud_choice_ordercrud_choice_filterr*  ui_form_scheme_rule_listr.  ui_form_scheme_ruler{  r  	scheme_idproject_logic_typerr   r6  r!  conf_scheme_cacherx  ui_field_namer8   s                          r9   rz  zCmfActiveEntity._build_ui_form6  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@   r0  r'  rd   CmfResolutionr   rD  )r7   r   r   rN  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!  rd   rc   register_personsr  r  r   warningr  r  r   )
r  rF  rK  rI  r  rm  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   rN  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 )	Nr0  r  rr   )r  r    r@   r/  r  rN   )rC   status_list)rd   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)Nrw   FNF)rw  )FNFN)NNT)r;   r<   r=   abstractfields_orderordering	api_allowr  r   cmf_active_entityr   api_methodsessential_child_modelsr@   rc  	CmfStatusr   Fieldrd  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   r1  r  r/  
is_penaltyrI   r   CmfObjectJsonr  r   rG  rx  r   propertyr   r   r)   r   r   r   r   r   r   r   r   r  r  r
  r  r,  r5  r;  ra  rj  rp  rt  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;  r>  rA  r7  r%   rN  rl  rn  ri  r~  r   r  r  r  r   r   r  r  rM   rY  r   r  r  r  r  r  r  rj  r  r  r"  r  r  r  r   r  r	  r  rh  jinja2EnvironmentFileSystemLoaderr+  pathr   r  PROJECT_DIRr  staticmethodcmf_deferred_jobr'  r  r(   rK  rk  r#   re  rs  rG  r  r  r  r  r  r  r  r$   r  r  r  on_server_eventr  r  r  r   r,  rz  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8 8 8 8 8t " " X"   

 
 
 
6, , ,+ + +8 8 8t  > > >$    = = = 4 4 4>% % %" " "(k k k     $ $ $  >F F FP  BL L L TX/4) ) ) ) ) )V    [, u u u u u [u ]a"y y y y y [y, 
m 
m 
m 
m 
m [
m   B4 B4 B4 B4 B4 [B4H 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? ? ?6> > >; ; ;"    J J J J J
        %
 %
 %
 %
 %
b
 
 
 
 
UC UC UCn  O O O :>VZ   t    5 5 5LC LC LC\  i i io o o 26Q B B B B B B BH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  B ##&&V5GS^(_(_'`aa $ c cJ (';H^bd d dC C Cd d \C$X $X $XL\ \T \ \ \ \x x x xt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 _:;;;[ [ <; \[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   rx   )deploy_jobs)r   r  r   r]  r  rc  r   modulesr   
sqlalchemyr   sqlalchemy.sqlr   dateutil.relativedeltar	   cmf.includecommon.fields.cmf_active_entityr  not_in_any_listsrY  r   r   rt  r  r^   r:   r9   <module>r|     s               



                         0 0 0 0 0 0     & & & &' R/ R/ R/ R/ R/fm5E R/ R/ R/l^         r:   