
    gSiT                        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 d dlZd	Z G d
 dej                  j&                  j(                        ZddlmZ y)    N)copyfields)person)desc)func)relativedelta)*zLST-filter_is_nonec                   4    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                  j#                  ej                  j$                  d
dd      Zej                  j#                  ej                  j$                  dddd      Zej                  j#                  ej                  j$                  dddd      Zej                  j#                  ej                  j$                  dddd      Zej                  j#                  ej                  j$                  dddd      Zej                  j#                  ej                  j0                  dddd      Z G d dej                  j                  j                  j4                        Z G d dej                  j                  j                  j6                        Zej                  j#                  ej                  j8                  ddgddd      Z G d dej                  j8                        Zej                  j#                  ej                  j>                  dg d ddg d!dd"#      Z ej                  j#                  ej                  j>                  d$g d ddg d!dd"#      Z!ej                  j#                  ej                  jD                  d%d&      Z#ej                  j#                  ej                  j>                  dd'd(d)d(dd*d+gd,	      Z$ej                  j#                  ej                  jJ                  d-d.gd/0      Z&ej                  j#                  ej                  j8                  d1dgdd2      Z'ej                  j#                  ej                  jP                  d3d4d5d6d7d8d9d:d;ddd<=      Z)ej                  j#                  ej                  jT                  d>d?d@dAdBdCdDE      Z+ej                  j#                  ej                  jX                  dFdGdHI      Z-ej                  j#                  ej                  j\                  dJdGdK      Z/ej                  j#                  ej                  j$                  dLdM      Z0ej                  j#                  ej                  j$                  dNdM      Z1ej                  j#                  ej                  j$                  dOP      Z2ej                  j#                  ej                  j$                  dQP      Z3ej                  j#                  ej                  j$                  dRP      Z4ej                  j#                  ej                  jT                  dSdTdUdVdWdXdYdZE      Z5ej                  j#                  ej                  j8                  d[d\      Z6ej                  j#                  ej                  jD                  dd]d^dddd_`      Z7ej                  j#                  ej                  j8                  dadg dbc      Z8ej                  j#                  ej                  jD                  d]dddeddfgdg      Z9ej                  j#                  ej                  j0                  dhdiddj      Z:ej                  j#                  ej                  jD                  dkddl      Z;ej                  j#                  ej                  jT                  dmdndodpdqdrd_ddds      Z<ej                  j#                  ej                  j0                  dtdud)ddv      Z= ej"                  ej|                  dwddxdy      Z? G dz d{ej                  jD                        Z@ej                  j#                  ej                  j                  d|d/d}~      ZB fdZCeDd        ZEddZFddZGd ZHd ZId ZJd ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZTd ZUd ZVd ZWd ZX	 	 d fd	ZYeZdd       Z[eZd fd	       Z\eZ	 	 d fd	       Z]eZd fd	       Z^eZ	 	 	 	 	 	 	 d  fd	       Z_eZ	 d fd	       Z`eDd        Zaeaj                  d        Zad Zcd Zdd Zed Zfd Zg fdZh fdZid Zjd Zkd Zld Zmd Znd Zo fdZp fdZq fdZr fdZs fdZtd Zud Zvd ZwddddexfdZyd Zzd Z{d Z|d Z}d Z~ddGd fd
Zd Zd Z fdZeZdd fd
       ZeZdd fd
       ZdÄ ZeZ fdĄ       ZdddddŜdededef fdȄZej                  j#                  ej                  jT                  dddddddddϜЫ      Zej                  j#                  ej                  jT                  dddddddddd֜Ы      Zej                  j#                  ej                  jT                  dddddddddd֜Ы      Zej                  j#                  ej                  jT                  dddddddddd֜Ы      Zej                  j#                  ej                  j                  ddd/۫      Zd܄ Zd!d݄Zdބ Zej                  j#                  ej                  j$                  dddd      Zd Zd Zd Z fdZd Z fdZd fd	Zd Zej;                  ej=                  ej@                  jC                  ejF                  dd      g      ejJ                        Ze edddgdd      dd              Zd ZddefdZd"dZd!dZd Z fdZ fdZdGddef fdZ fdZededefd       Zd ZeZd         Z fdZeZd#d       ZeZd$defd       Zd Zed        Zd Ze ed	      d
               Zd%dZeZd        ZeZdddddddd       ZeZdedefd       ZeZ	 d& fd	       ZĐd Ze eddgdd      d'dedefd              Zƈ fdZeZdedexfd       ZȈ xZS ((  CmfActiveEntityT)codenamestatus	cmf_ownerresponsiblepriority
alarm_datetags	executors
spectators
no_controlwaiting_formarktime_estimateplan_start_dateplan_end_dateperiod_intervalperiod_next_datedeadlineparentcompanyz-orderno)archivedisable_aclmacros_page_tree_gettask_transition_runpublish_for_invitedarchive_restoresend_sharelinkset_user_rate)CmfAttachmentc                        e Zd Z fdZ xZS )CmfActiveEntity.logic_typec                 (   t         |   |       | j                  rv| j                  ri| j                  r\| j                  j
                  j                          | j                  j                  j                  d      d   | j                  _        y y y y )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   sk    Gu%}}::$))MM..335151J1J31OPQ1RDMM. #,:     )__name__
__module____qualname__r0   __classcell__r8   s   @r9   
logic_typer,   @   s    	S 	Sr:   r@   c                   <     e Zd ZdZdZddgZdZ fdZ fdZ xZ	S )CmfActiveEntity.statusu   СтатусTworkflow_ididc                     t         |   |       | j                  r$| xr | j                  xs d | j                  _        y y N)r/   r0   r1   status_typecache_status_typer6   s     r9   r0   z!CmfActiveEntity.status._set_valueP   s8    Gu%}}262K4;K;K2St/ r:   c                     t        |t              r[| j                  rO| j                  j                  j	                         r+| j                  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.castU   sc    %%$--DMM<R<R<W<W<Y!]]33FFSXfkFll6l!M7<&&r:   )
r;   r<   r=   captionnullableoptions_list_params	log_levelr0   rP   r>   r?   s   @r9   r   rB   I   s-     ,d3		T
	' 	'r:   r   u"   Дата смены статусаF)rQ   visibleno_aclu"   Дата начала работы)rQ   readonlyrU   rV   u(   Дата окончания работыu(   Дата на подтверждениеu   Дата закрытияu   Контрагент
CmfCompany)rQ   modellinkablefullsearch_indexc                       e Zd ZdZy)CmfActiveEntity.nameu   НазваниеN)r;   r<   r=   rQ    r:   r9   r   r]   m   s    $r:   r   c                       e Zd Zy)CmfActiveEntity.codeN)r;   r<   r=   r^   r:   r9   r   r`   q   s    r:   r   u   Постановщик	CmfPersonCmfPersonWidget)rQ   modelsrZ   r[   widgetc                   ,    e Zd ZdZdgZdZdgZdZdZdZ	y)CmfActiveEntity.responsibleu   Исполнительra   T	parent_idrb   N)
r;   r<   r=   rQ   rc   rZ   rS   options_list_query_allr[   rd   r^   r:   r9   r   rf      s,    **m!%"r:   r   u   Соисполнители)
CmfProject
CmfOrgUnitCmfPersonGroupra   CmfRole)zCmfProject.executorszCmfOrgUnit.tree_nodeszCmfPersonGroup.rg_memberszCmfRole.personCmfPersonMultiSelect)rQ   rc   leftrZ   nested_fieldsnested_fields_is_edge_parentrd   u   Наблюдателиu!   Без подтверждения)rQ   defaultu   ТэгиCmfTagmembersactivity_idrg   )rightrQ   rY   backrefrd   rZ   rS   r[   u   Вложенияr*   r    )rQ   rc   rv   u   Ждем ответа)rQ   rc   rZ   rd   u   Приоритетu   Минимальныйu   Низкийu   Обычныйu   Высокийu   Критичныйu   Блокирующий)rE   r            0CmfPriority)rQ   choicesrq   rR   r[   rd   u   Оценка12345)r~   r   r   r   r   )rQ   r}   u!   Оценка полезностиr      )rQ   minmaxu6   Количество оценок полезности)rQ   rq   rR   u   Будильник)rQ   indexu   Крайний срокu&   Плановая дата начала)rQ   u.   Плановая дата завершенияu   Дата повторенияu%   Интервал повторенияu   Ежедневноu   Раз в 2 дняu   Еженедельноu   Ежемесячноu   Ежеквартальноu   Ежегодно)r~   r   73090365u   Склонирован из)rQ   rW   CmfBoolu   Шаблонalways)rU   idgetrQ   rW   rq   r   	load_modeu!   Родительская нода)ri   	CmfFolderCmfActiveEntityFilterCmfDocumentCmfTaskCmfComponentCmfAssetSchemeCmfRegistry)rQ   rR   rc   u   Сделаноu!   Значение чекбоксаrI   )rd   rQ   commentvirtualrequired_fieldsrU   u   Вид деятельностиCmfActivity)rQ   rY   rR   rZ   u!   Задача просрочена)rQ   rU   rq   u   Кеш: Тип статусаu   Открытu   В работеu+   Подтверждение закрытияu   Закрыто)OPENIN_PROGRESS	IN_REVIEWCLOSED)rQ   r}   r   rU   r   rV   u!   Настройка статусаCmfStatusOpt)rQ   rY   rv   rU   rV   u   кэш полейlazy)rQ   rU   r   rV   c                   "    e Zd ZdZdZdZdZd Zy)CmfActiveEntity.approvedu1   Согласовано руководителемTFc                 ~   g }| r|j                  d       n|j                  d       t        j                  j                  j	                         }|r%|j                  |j
                  j                         |j                  t        j                  j
                  j                  xs d       dj                  |      S )Nu   Согласовано.u&   Отмена согласования.  )appendgcurrent_personprimary_roler4   r   r2   join)r7   	msg_partsroles      r9   	html_diffz"CmfActiveEntity.approved.html_diff9  s    I  !:;  !IJ##00557D  1Q--2288>B?88I&&r:   N)r;   r<   r=   rQ   r   rR   rq   r   r^   r:   r9   approvedr   3  s    E	'r:   r   u   ПодписчикиCmfFollower)rQ   rv   rY   c                 .   t        |   |g|i |}|dk7  r|S |dk(  r| j                  j                  ry|dk(  ry|dk(  r| j                  j                  ry|dk(  r| j
                  j                  ryt        j                  j                  | j                  k(  r2d}| j                  | j                  k7  rd}| j                  dk(  rd}|ryy| j                  r'| j                  t        j                  j                  k7  ry|d	k(  r| j                  ryyy)
Nry   r   rE   r   TFr   rx   r   )r/   _get_field_log_levelr   
is_changedr   r   r   r   rD   cmf_owner_idcmf_modified_by_idrI   responsible_idr   )r7   
field_nameargskwargsrT   silent_owner_changesr8   s         r9   r   z$CmfActiveEntity._get_field_log_levelI  s#    G0MdMfM	> &4+;+;+F+F& DII$8$8 D$8$8$C$C $"3"33#'  &&$*;*;;',$%%6',$# ""d&9&9Q=M=M=P=P&P % r:   c                 .    | j                   j                  S rG   )notify_valuer7   s    r9   _notifyzCmfActiveEntity._notify  s    {{!!!r:   c                 f    | j                   j                         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r:   Nc                 X   d}d}t         j                  j                  dd| gddt        j                  j
                  ggdg      }|s1t         j                  | |t        j                  j
                        }n||_        |j                          t         j                  j                  dd| gdg      }|r/t        d	 |D              }t        |      }||z  }t        |d
      }nd}t        |d
      }|| _        || _        | j                          | j                  | j                  dS )Ng        r   r    ==r   user_ratingfilterr   )r    r   r   c              3   4   K   | ]  }|j                     y wrG   )r   ).0ratings     r9   	<genexpr>z0CmfActiveEntity.set_user_rate.<locals>.<genexpr>  s     Hfv11Hs   ry   rx   )r   user_rating_count)rc   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  s<   $2266$PT?UXceiklk{k{k~k~W  ?A  KX  JY6  Z""("6"6dPT`a`p`p`s`s"6"t.2+  "&&,,XtT4JTaSb,cHHHL #G&)::KQ/K !a.K&!2		++!%!7!7
 	
r:   c                 x    t         j                  j                  dd| g      D ]  } |j                  |i |  y Nr    r   )r   )rc   
CmfCommentlistdelete)r7   r   r   r   s       r9   _delete_commentsz CmfActiveEntity._delete_comments  s?    ((--hd5K-L 	,GGNND+F+	,r:   c                 x    t         j                  j                  dd| g      D ]  } |j                  |i |  y r   )rc   r*   r   r   )r7   r   r   attachs       r9   _delete_attachmentsz#CmfActiveEntity._delete_attachments  s?    **//$7M/N 	+FFMM4*6*	+r:   c           	         | j                   }|j                  d      d   j                         }| j                  |dd|j	                  dd            }t        |d      r|j                  j                  rd|v r|d= |j                         D ]!  \  }}||j                  v st        |||       # d|_        | |_        d|j                  _        |j                          | j                  r| j                   j"                  r| j$                  j"                  r| j                   | j$                  z
  }n| j                   | j&                  z
  }t(        j(                  j+                  t(        j,                  j.                  	      |z   |_        | j                  rS| j$                  j"                  r=t(        j(                  j+                  t(        j,                  j.                  	      |_        |j                  d
       |S )uC   
        Создание задачи по шаблону
        |rE   FTis_dummyN)r   copy_subtaskscopy_allr   liststz	only_data)r   splitstripr   r   hasattrr   r2   itemsr   setattris_templatecloned_fromr   r   r   r   is_not_nullr   cmf_created_atdatetimenowtimezoneutc)r7   r   new_obj_namer1   attrr2   deadline_deltas          r9   create_from_templatez$CmfActiveEntity.create_from_template  s   " yy#))#.r288:99,ed]c]g]ghrtx]y9z8W%(..*>*>7fCTw!<<> 	/KD%x&$.	/  %# +/' 9 9**!%!@!%1D1D!D ( 1 1 5 59J9J9N9N 5 OR` `H  ; ;!)!2!2!6!6(:K:K:O:O!6!P8% r:   c                      y rG   r^   r   s    r9   _calc_wf_simple_logicz%CmfActiveEntity._calc_wf_simple_logic      r:   c                     | j                   j                  s#| j                  j                  s| j                  ry| j                  j                  r| j                  ry| j                   xs | j                  | _        y)u   
        Вычисляем человека от которого требуются действия по задаче
        :return:
        N)r   r   r   r   r   s    r9   _calc_waiting_forz!CmfActiveEntity._calc_waiting_for  s_     ''~~((## &&4+;+;++=t~~r:   c                      y)u   
        Общая функция вычисления диапазона плана и будильника
        :return:
        Nr^   r   s    r9   
_calc_planzCmfActiveEntity._calc_plan  s    
 	r:   c                    | j                   j                  sy | j                   r]t        | j                   j                  t        j
                        r/t        j                  | j                        j                  | _
        y | j                   rNt        | j                   j                  t              r*| j                   j                  j                         | _
        y d | _
        y rG   )r    r   rL   r2   rc   ri   APPget_cache_projectrg   r3   parent_logic_prefixr   r4   r   s    r9   _calc_parent_logic_prefixz)CmfActiveEntity._calc_parent_logic_prefix
  s    {{%%;;:dkk&7&79J9JK'*'<'<T^^'L'Y'YD$
 		 [[Z(9(9?K'+{{'?'?'D'D'FD$ 	 (,D$r:   c                    | j                   j                  s#| j                  s| j                  j                  sy | j                   s2| j                  s&| j                   j                  rt	        d|  d       | j                  j                  r&| j                   j
                  s| j                          | j                   rzt        | d      rB| j                  r6| j                  j                  r | j                  j                         | _         y | j                  j                  | j                         | _         y | j                  r | j                  j                         | _         y | j                  j                         | _         y )NuQ   Невозможно назначить пустой статус объекту Tabortr   )r   )r   r   is_newrN   	cmf_alert
is_definedsave_preparer   r   get_create_statusrO   r   s    r9   _calc_statuszCmfActiveEntity._calc_status  s   KK""{{ }}''{{4;;4;;3I3Iijniopx|}
 ==##DKK,B,B ;;tZ(T]]t}}?W?W"mm==?"mm>>dkk>R{{"mm==?"mm>>@r:   c                 *   | j                   j                  s| j                  sy | j                  g d       | j                  j                          | j                  j                  rJ| j                  j                  dvr2| j                  j                  dv r| j                  j                          | j                  dk(  r&| j                  s| j                  j                          | j                  dvr| j                  rd | _
        | j                  dk(  r&| j                  s| j                  j                          | j                  dvr| j                  rd | _        | j                  dk(  r(| j                  s| j                  j                          y y y )N)status_closed_atstatus_review_atstatus_in_progress_start)r   r   r   r   r   )r   r   r  load_fieldsstatus_modified_atset_nowrI   oldnewstatus_in_progress_endr  r  r  r   s    r9   _calc_status_timestampsz'CmfActiveEntity._calc_status_timestamps5  sP   KK""{{
 	]^ 	'') ""--&&**2II&&**.EE''//1 !!X-d6K6K!!))+!!)@@TEZEZ$(D! !![09N9N!!))+!!)@@TEZEZ$(D! !!]24;X;X))113 <Y2r:   c                     | j                   j                  s#| j                  j                  r| j                  ry | j                   sy | j                  s+| j                  j                          | j	                          y y rG   )r   r   r   r  _cacl_next_periodr   s    r9   _calc_periodiczCmfActiveEntity._calc_periodic\  sc      ++%%009N9N##$$!!))+""$ %r:   c                    t         j                   j                  t         j                  j                        }| j                  |k  rt        | j                  j                        dk  r|t        j                  t        | j                  j                              }| j                  j                  |z   | _        | j                  r| j                  j                  |z   | _	        n}t        t        t        | j                  j                        dz              }| j                  j                  |z   | _        | j                  r| j                  j                  |z   | _	        | j                  j                          y )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_periodl  s   $$(():):)>)>?  H, 4''--.3%//S9M9M9S9S5TU
(,(=(=(C(Cj(P%==$(MM$7$7*$DDM,CD<P<P<V<V8WZ\8\4]^(,(=(=(C(Cl(R%==$(MM$7$7,$FDM!r:   c                 z    | j                   j                  sy | j                   j                  rt        dd       y y )NuE   Задача не может быть без постановщикаTr  )r   r   is_nullr	  r   s    r9   _calc_ownerzCmfActiveEntity._calc_owner  s0    ~~((>>!!]eij "r:   c                     g d}| j                   r	dg dg dg}|dd| j                  gg}t        j                  j	                  |g d      D ]  }|j                  |         y)	u\   
        Запуск триггеров для create или save
        :return:
        )cache_action=r   OR)r*  r+  create	cmf_modelr+  )json_filterjson_entry_pointjson_action	func_name	json_datar   N)r  
class_namerc   
CmfTriggerr   check)r7   _filtertriggers      r9   _exec_triggerzCmfActiveEntity._exec_trigger  sn    
 0;;:<[\G[#t?@((--W Fo- p 	 G MM$	 r:   c                     | j                   j                  r[| j                   rN| j                         }|r;|| j                  k7  r+|j	                  g d       || _        | j                          y y y y y )N)r   cmf_owner_assistantsactivity
project_id)tree_parentr   _node_parentr    r  r  )r7   r    s     r9   _calc_parentzCmfActiveEntity._calc_parent  sf    &&4+;+;&&(F&DKK/""#bc$!!# 0v ,<&r:   c                 b   | j                   j                  r| j                  r| j                   r| j                   j                  dk  rf| j                   rD| j                   j                  | j                  j                  t        j                  d      z   kD  rd}|dz  }t        |d       y y y y y )Nr      )hoursu`   Нельзя передвигать будильник дальше крайнего срока.uB    Сдвиньте крайний срок если уверены.Tr  )r   r   r   ager2   r   r"  r	  )r7   msgs     r9   _check_alarm_date_validz'CmfActiveEntity._check_alarm_date_valid  s    OO&&__(;(;a(?__(=(=ATATW_WiWipqWrAr(s
 uCWWCc& )t )@  'r:   c                    g d}t         j                  j                  | j                  j                  |d      }t
        j                   G d d             } |       }| j                  r8| j                  j                  j                  d      rt        j                  | j                        }||_        d|j                   |_        |j                  j                  |_        |j                   j                  |_        |j"                  j                  |_        |j$                  j                  |_        |j&                  j                  |_        |j(                  j                  |_        |j*                  j                  |_        |j,                  j                  |_        |r|j.                  r||_        d|j                   |_        |j                  j                  |_        |j                   j                  |_        |j"                  j                  |_        |j$                  j                  |_        |j&                  j                  |_        |j(                  j                  |_        |j*                  j                  |_        |j,                  j                  |_        |r6|j0                  j                  |_        |j2                  j                  |_        |S )	N)enable_sl_control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_checklistsT)rD   r   cache_inmemoryc                       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y);CmfActiveEntity._get_sl_options.<locals>.SimpleLogicOptionsNrI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  )r;   r<   r=   rI  r!  __annotations__rJ  boolrK  rL  rM  rN  rO  rP  %   sl_сlose_task_after_closing_subtasksrR  sl_controllersl_controller_strr^   r:   r9   SimpleLogicOptionsrU    s{    %)s)*.!4.'++>B5tB)- $--1$d1,0#T0AE8$E:>14>CG:DG M $r:   r[  CmfProject:u   Проект: u   Бизнес-процесс: )rc   CmfWorkflowr   rN   rD   dataclasses	dataclassrg   r2   
startswithr  r  rY  r   rZ  rI  rJ  rK  rL  rM  rN  rO  rR  rH  rP  rX  )r7   r   rN   r[  optionsprojects         r9   _get_sl_optionszCmfActiveEntity._get_sl_options  sM    %%))T]]-=-=f]a)b				% 	% 
	% %&>>dnn22==mL++DNN;G$+G!*8(GG%(/(A(A(G(GG%,3,I,I,O,OG))0)C)C)I)IG&@G@q@q@w@wG=+2+G+G+M+MG(/6/O/O/U/UG,.5.M.M.S.SG+ELE{E{  FB  FBGB22$,G!*G(WG%(0(B(B(H(HG%,4,J,J,P,PG))1)D)D)J)JG&@H@r@r@x@xG=+3+H+H+N+NG(/7/P/P/V/VG,.6.N.N.T.TG+EME|E|  FC  FCGBCKCxCxC~C~G@<D<j<j<p<pG9r:   c                    | j                   j                  sy | j                  ry | j                  r| j                   r| j                  j                  dkD  r| j                   j
                  r| j                   j
                  t        j                  j                  j                         k  ry| j                         j                  xs d}| j                   t        j                  |      z
  | _        | j                  j                  dkD  r| j                  j                          | j                  t         j"                  k7  rt         j"                  t         j$                  k7  r| j                  j&                  r| j)                  | j                  | j*                  dt         j"                  j*                   d| j                   j
                   d| j                   j,                   d| j.                   d| j*                  j0                   dt        j                  j                  t        j2                  j4                  	      d
       y y y y )Nr   r  r   u^    сдвинул крайний срок задачи<br>
                Было:&nbsp;&nbsp;u)   <br>
                Стало:<b>&nbsp;z1<b><br>
                <a target="_blank" href="z">z</a>
                r   ry   )r   r   rE  r   r   )r   r   r  r   rD  r  cmfr   CmfDateTimer   rc  rI  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   MM$$;; ??t}}1D1Dq1HT]]M^M^cgcpcpctctwz  xB  xB  xN  xN  xR  xR  xT  dT ((*<<AE"mmh.@.@e.LLDO""Q&'')>>Q---!2B2Baoo2UZ^ZhZhZsZs ~~YY!**//0 1&&*mm&7&7%8 9%%)]]%6%6$7 8**.))Btyy6G H
 $,,00H4E4E4I4I0J  
 [t2U-r:   c                 N   | j                  g d       t        t        |   dd|i|      }| j                  r9|r| j                  j                  |       |j                  | j                         | j                  r9|r| j                  j                  |       |j                  | j                         | j                  j                  |      }d}| j                  rB| j                  j                  j                  dk(  rt        j                  | j                        }|r |s|r|j                  j                  |      }|j                  |       | j                   j                  |      }	|r |	s|r|j                   j                  |      }	|j                  |	       |rH|rF|j"                  r:|r|j"                  j                  |       |j                  |j"                  g       t%               }
|D ]%  }||j&                  |k(  s|
j)                  |       ' |
S )u   
        Получение списка конечных пользователей затронутых обьектом
        )cmf_owner.user_localwaiting_for.user_localresponsible.user_localzspectators.user_localzexecutors.user_localcmf_author.user_localparent.cmf_owner.user_localr   r   Nri   r^   )r  setr/   all_relation_personsr   addr   r   
all_nestedr    r2   r4  r  r  rg   updater   r   r   rh  r   )r7   r   rh  with_parent_ownerinherit_executorsr   resultr   parent_projectr   retur8   s               r9   rt  z$CmfActiveEntity.all_relation_persons  s   
 	 R 	S UW1JJ6JK  ,,F,;JJt''(  ,,F,;JJt''(NN--V-<	;;4;;,,77<G 224>>BN Y>&00;;6;JIi __//v/>
ZN'22==V=LJj!.":":",,888G~7789
 f 	A!Q\\Z%?

1	 
r:   c           	      l   |sg }|sdg}t        j                  j                  d|j                  dd       |j                  dd       |d|d|}|rQ|D cg c]F  }|j                  s|j                         |j                  j                  j                         v sE|H }}|r||d   |d    }|S c c}w )	Norderno	object_idrC   T)obj_idrC   r   closed_lastorder_byr   rx   r^   )rc   r]  get_status_listr   r   lowerr2   )	clsobject_fieldsr   r  slicesearchr   r|  r   s	            r9   status_options_listz#CmfActiveEntity.status_options_listD  s     F!{H  00 
::k40%))->
 
 (+kfv{{v||~QWQ\Q\QbQbQhQhQj?j6kCkeAhuQx(C
 ls   B1'4B1B1c                     |g }|r|j                  d      nd }|r|j                  d      nd }|dg ddd|gggdg ddd|gggd	d
| j                  gg}t        |   |f||d|S )Nlogic_type_idr=  r,  )ft_logic_typesr   Nr  IN)ft_projectsr   Nr  ft_modelr   )r  r   )r   r4  r/   field_options_list)r  relation_field_namer  r   r   ft_logic_type_idft_project_idr8   s          r9   resolution_options_listz'CmfActiveEntity.resolution_options_list[  s    >FAN=,,_=TX;H)),7d7:JDScRd9ef4}d]O6\]tS^^4
 w)*=t]citmsttr:   c                    |sg }|sdg}|sg }|g dg}|xr |j                  d      }|j                  dd       }	|r|s|	s|dd|gg} |j                  d        |j                  d       t        
|   |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_listk  s     FxHF@A!Dm&7&7&D	Hd++6{C;<F 	j!hw)y/<VTZemyqwy 	yr:   c                     |sg }|rTt         j                  j                  |dg      }d }|r"|j                  r|j                  j                  }|ddd|gg dgg}t        |   |f||d|S )Nzproject.security_level_schemerD   r   r,  r    r   )systemr   T)r   r  )rc   r   r   rb  security_level_schemer/   r  )r  r  r   r  r   taskr  r8   s          r9    perm_security_level_options_listz0CmfActiveEntity.perm_security_level_options_list  s    F>>%%<[;\%]D$(!(,(J(J%th6K%LNdefFw)*=lfXalekllr:   c           
         |sg }|sg }|si }|s:| j                   j                  |      }	|	st        d| d|        |	j                  }|xr |j                  d      }
|
r|
j	                  d      rt        j
                  j                  |
g d      }|r|r|j                  ri }|j                  j                  s7t        j                  j                  |j                  j                  d|d	      }|j                  r|j                  j                  j                  |vr+t               ||j                  j                  j                  <   ||j                  j                  j                     j!                  |j                  j                  j                  j                         |j"                  D ]Y  }|j                  |vrt               ||j                  <   ||j                     j!                  |j                  j                         [ |D ],  }|j%                  |g       d
d|j                  |g       gg||<   . |dk(  r6g dg dg}|j                  d      r|j                  dg       |g|d<   n||d<   d|vr |j&                  d       t)        | T  | j,                  j                  f||||||d|S )Nu   Не найдено поле     в классе rg   ri   )project_typer   r   filter_responsibler;  r  r   T)child_models
return_setrD   r  r   )rh  r   T)does_not_workr   Fra   roles)r  all_optionsmodels_listmodels_filtersr   r   )r   r   
ValueErrorrc   r`  ri   r  r   r'  RelationCacheget_children_dictrD   r2   r   r4  rs  ru  r;  
setdefaultr   r/   r  r   )r  r  r  r   r   r  r  r  r   fieldrg   rb  children_dict	assistant
model_nameresp_filterr8   s                   r9   %options_list_for_responsibility_rolesz5CmfActiveEntity.options_list_for_responsibility_roles  s    FFNJJNN#67E #@AT@UUfgjfk!lmm,,K!Dm&7&7&D	--l;''++y 4L , MGw/I/I "((00 %+$8$8$J$J

((+K\` %K %bM $$((..99NLOEg&7&7&=&=&H&HI!'"3"3"9"9"D"DEII'J[J[JaJaJdJdJjJjk!(!=!= PI ++=@>Aei&:&:;!)"6"67;;ILL<N<NOP #. IJ&11*bAt]%6%6z2%FG2IN:.I -/ +.K !!+./=/A/A+r/RT_.`{+.9{+& FMM'"w)OO&&46CQ\#N&4 -34 	4r:   c           
      v   |sg }|sg }ddh}|j                  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}|xr |j                  dd      }|xr |j                  dd      }|r#t
        j                  j                  |
g      }n5|r3t        j                  |d
 g      }t        |d      r|j                  }|rt        |
      r|ddt        ||
      gg}|dd| j                  gg}|rd|v r|dd d|d   gg d!gg}n|d"v r |j                  d#       ni|d$k(  rG|xr |j                  d      }|r|dg d%dd&|ggg}|xr |j                  d      }|r*|dg d'd(d&|ggg}n|d)k(  r | j                  |f||||d|S |j                  d*      ry| j                  j                  |      }|st!        d+| d,|  | |      |j"                  d-k(  r:|j$                  d.k(  r+d}d/|v r|d/   }|d/= |j                  d0d1      r|g}n|d/d|gg}t'        | P  |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+  rt   r,  filter_activity)r  r+  N)r   r   r   r  r   )rt   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  r4  rc   CmfSchemeWfcmfutilget_obj_by_idr   r  getattrr   r  r`  r   r  customrd   r/   r  )r  r  r  r   r  r   r  r   project_participiants_fieldsr  lt_field_namer  r  rg   r    rt   custom_fieldr  r8   s                     r9   r  z"CmfActiveEntity.field_options_list  s
    FF(3\'B$)/4T)U&  =0$(DDIg<3<< C+F-fx$7C <BC C !H,*3** h+F6T\h`fh h $9973778K h+F6T\h`fh h L0%;,8x8H ~~!FF>>]2$@M>>Y.$<M>>Y.$<M 	,X1B1B>SW1X)Rm.?.?T.R	 & 2 2 6 6,P] 6 _I$229
S`RaFbEc2dFv{3$*$4$4	M!B$tT79m3T&UVF /cnnEFF-!? ,c=3OPRp#r s
 !$NNFMM'" F*'LM,=,=m,LK6k8Z[] &H-*;*;K*HI9<LdT];^_a !L0.3../B h+F6T\h`fh h ))%0::>>*=>L #<=P<QQbcfbg!hjm  pC  D  D""d*|/B/BFX/X#' %/'-.@'A$12::mU3$XF$'93@P&QRF w)H0>m6HH@FH 	Hr:   c                      | j                   dk(  S )Nr   )rI   r   s    r9   _is_checkedzCmfActiveEntity._is_checkedI  s    %%11r:   c                 8   | j                  ddg       |du r/| j                  j                         j                  d      | _        y |du r/| j                  j                         j                  d      | _        y t        d| j                  j                         )Nr   rN   Tr   Fr   u:   Некорректное значение для поля )r  rN   r4   rO   r   CmfValidationError
is_checkedrQ   )r7   r2   s     r9   r  zCmfActiveEntity._is_checkedM  s    ':./D=--,,.AA(KDKe^--,,.AA&IDK$LT__MdMdLef r:   c                      y)u   
        Отправляем во фронт события для реалтайм обновления
        :return:
        Nr^   r   s    r9   
emit_eventzCmfActiveEntity.emit_eventZ  s    
 	r:   c                    | j                   ry d }| j                  rd| j                  j                  v r| j                  j                  j                  d      r*t        j                  | j                        j                   }n2| j                  j                  dg       | j                  j                   }| j                   s	|r|| _         | j                   sdt        j                  j                   rJt        j                  j                   j                  dg       t        j                  j                   | _         | j                   s)t        j                  j                  ddgd      | _         y y )	Nr<  r\  z
activity.*r
   r   businessT)r   r   rS  )r<  r    r   rg   r2   r`  r  r  r  r   r   r4   rc   r   r   )r7   parent_activitys     r9   _calc_activityzCmfActiveEntity._calc_activitya  s   ==;;:););;~~##..}="%"7"7"G"P"P''7"&++"6"6}}+DM}}!1!1!:!:%%**3%*8,,55DM}}"..22
C5ae2fDM r:   c                 l   | j                   sY| j                  j                  sC| j                  j                  s-| j                  j                  s| j
                  j                  sy | j                   s| j
                  j                  r| j                  j                  sl| j                  j                  j                  s| j                  j                  dk(  rat        j                  j                         }|j                  dkD  r|j                  ddd      | _        y |j                  ddd      | _        y | j                  j                          | xj                  t        j                  | j                  j                  j                         z  c_        y t        j"                  s`| j
                  j                  rC| j                   s7| j                  j$                  r!| j&                  j                  rt)        d       d | _        | j                  rS| j                  sG| j                  j                  r| j                   st)        d       | j                  j                          | j                  sI| j*                  dvr;| j                  j                  rt)        d       | j                  j                          | j                   s| j                  j                  r| j                  j$                  r| j                  j$                  j,                  d	k7  rp| j                  j.                  j,                  d	k(  rM| j                  r'| j                  j1                         | j                  kD  r| j                  j                          | j*                  d
k(  r?| j                  r3| j                  j2                  dk  r| j                  j                          | j                  j                  rF| j                  j2                  dkD  r,t        j"                  s| j                  j                          y y y y )Nr   rB  )hourminutesecond)secondsu   Будильник сброшен т.к. у этого бизнес-процесса в статусе будильник не заданus   Нельзя сбросить будильник, так как у задачи стоит крайний срок.)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	  rI   rH   r  r   rD  )r7   current_times     r9   _calc_alarm_datez CmfActiveEntity._calc_alarm_datet  s    ??--;;))==++==++KK4==33T__=W=W;;))11;;))Q. $%>>#F#F#HL#((1,*6*>*>AaXY*>*Z  +7*>*>AaXY*>*Z
  OO++-OOx'9'9$++BXBXB^B^'__O}}}}//H[H[`d`t`t`|`|!  #n  o&*DO==))$++  P  QOO##% 4#9#9AS#S))stOO##% &&++v5++v5 ??doo&9&9&;doo&M'') !!X-$//dooFYFY\]F]OO##% ??%%$//*=*=*A=='') ! +B%r:   c                 *    | j                   rd| _        y )NT)r  r   r   s    r9   _calc_approvedzCmfActiveEntity._calc_approved  s    ;; DMr:   c                      y rG   r^   r   s    r9   
_calc_namezCmfActiveEntity._calc_name  r   r:   c                    | j                   r-| j                  j                  s| j                  j                  sy | j                   st        |           y | j                   r| j                   j                  d      ry | j                          d| j                   j                  j                  d      d    }|| _         y )NzA--ry   )
r   r@   r   rb  r/   
_calc_coder`  get_code_prefixr2   
rpartition)r7   r   r8   s     r9   r  zCmfActiveEntity._calc_code  s    		))||&& yyG 
 99--d3&&()499??+E+Ec+J1+M*NO
 	r:   c                     | j                   r(| j                   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  s=     ??//99>>@K""_d;==r:   c                 D   | j                  g d      }| j                  D cg c]  }|j                  g d       c}|d<   | j                  D cg c]  }|j                  g d       c}|d<   d |d<   | j                  r | j                  j                  g d      |d<   d |d<   | j                  r | j                  j                  g d      |d<   d |d	<   | j
                  r | j
                  j                  g d      |d	<   d |d
<   | j                  r | j                  j                  g d      |d
<   d |d<   | j                  r | j                  j                  g d      |d<   d |d<   | j                  r | j                  j                  g d      |d<   |S c c}w c c}w )N)
rD   r   r   textr   r   r   r   r   cmf_modified_at)rD   r   r   loginr   r   r   )rD   r   r   r  colorrH   	card_namer    )rD   r   r   
cmf_authorr   r   r   )	to_jsonr   r   r   r    r  r   r   r   )r7   r|  is      r9   get_cache_fields_jsonz%CmfActiveEntity.get_cache_fields_json  s   ll 
  QUP^P^_1AII&EF_K RVQ`Q`aAQYY'FGaL H;; KK//0stCMH;; KK//0FGCM L?? $ 7 78W XCK>>#~~556UVC!M!%!1!1!9!9:Y!ZC!M!%!1!1!9!9:Y!ZC
; ` bs   FFc                    | j                   j                  s#| j                  s| j                  j                  sy | j                   r| j                  r| j                  ry | j                   j                  r| j                   ry | j                   s!| j                  j                  |       | _         y | j                  j                  rr| j                  j                  r\| j                  j                  j                  ddg       | j                  j                  j                  |       }|| j                   k7  ry | j                  j                  |       | _         y )Ndefault_task_logic_typedefault_subtask_logic_type)r@   r   r  r  r   calc_logic_typer  r  )r7   old_default_logic_types     r9   _calc_logic_typez CmfActiveEntity._calc_logic_type  s    OO&&{{~~(( ??t{{t/?/???%%$//"nn<<TBDO >>$$););NN**,EGc+de%)^^%7%7%G%G%M"%8..88>r:   c                 0   | j                   j                  s9| j                  j                  s#| j                  j                  s| j                  sy | j                  j                  r| j                  ry t
        j                  j                  |       | _        y rG   )r    r   r<  r  r  rc   r  calc_schemer   s    r9   _calc_scheme_wfzCmfActiveEntity._calc_scheme_wf4  sc    KK""}}''~~(({{>>$$  ++77=r:   c                 (   | j                   j                  s9| j                  j                  s#| j                  j                  s| j                  ry | j                  j                  r| j                  ry | j                   j                  |       | _        y rG   )r  r   r@   r<  rN   calc_workflowr   s    r9   _calc_workflowzCmfActiveEntity._calc_workflowC  sc    NN%%))}}''== ==## 44T:r:   c                      y rG   r^   r   s    r9   _calc_default_workflowz&CmfActiveEntity._calc_default_workflowT      r:   c                      y rG   r^   r   s    r9   _calc_responsiblez!CmfActiveEntity._calc_responsibleW  r	  r:   c                     t         |          xs^ | j                  j                  xsF | j                  j                  xs. | j
                  j                  xs | j                  j                  S rG   )r/   _acl_subjects_is_changedr   r   r   r   r   r7   r8   s    r9   r  z(CmfActiveEntity._acl_subjects_is_changedZ  sd    w/1 J~~((J,0OO,F,FJ**J.2.>.>.I.I	Jr:   c                     t         |          }|j                  | j                         | j                  r|j                  | j                         | j                  r|j                  | 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_write_  s[    79dnn%MM$**+MM$**+r:   c                 Z    t         |          }|j                  | j                         |S rG   )r/   _acl_subjects_list_level_readr  r   r  s     r9   r  z-CmfActiveEntity._acl_subjects_list_level_readi  s%    68doo&r:   c                 *    t         |          g dz   S )N)3r=  r   rN   r3   zparent.cmf_ownerr  r  zstatus.ordernozstatus.workflowr   r   r   cache_status_optr<  
cmf_importcmf_modified_bysharelink_hashzlogic_type.coder  r   r  r   r  zworkflow.enable_sl_controlzworkflow.sl_deadline_shiftzworkflow.sl_only_owner_approvezworkflow.sl_deny_no_approvez2workflow.sl_allow_executor_change_nofatal_deadlinezworkflow.sl_task_need_approvez!workflow.sl_task_only_owner_closez5workflow.sl_deny_closing_task_before_closing_subtasksu.   workflow.sl_сlose_task_after_closing_subtaskszworkflow.save_eval_codeui_view_formr  z,perm_security_level.access_task_fields_cacher   r   r   r  r  r  r   r   r  r  rn  ro  rp  rq  rr  )r/   save_preload_fieldsr  s    r9   r  z#CmfActiveEntity.save_preload_fieldso  s    w*, .0
 .
 .	
r:   c                 *    t         |          ddgz   S )Nr  task_filters)r/   project_perm_allow_fieldsr  s    r9   r  z)CmfActiveEntity.project_perm_allow_fields  s#    w02	6
 
 	
r:   c                     t        d      )NuG   Не используется! Оставлено для истории)'	Exceptionr  osenvironr   r    r2   r4  disable_simple_permvaluessimple_perm_allow_fieldsr`  endswithr   r   r'  r   rc  rL  r   check_owner_permsrs  rt  rw  
get_ownersr   r   r   r   r   r   r   sortedmapr   r   rc   CmfAccessListcheck_admin_mode)r7   need_owners_checkr  
sl_optionsneed_reluser_checkall_relation_userrE  otherss           r9   _check_simple_permz"CmfActiveEntity._check_simple_perm  s    abbr:   c                     | j                          | j                          | j                          | j                          | j	                          | j                          y rG   )r  r  r   r  r  r  r7   r   r   s      r9   _save_templatezCmfActiveEntity._save_template	  sH    r:   c                    | j                   j                  sGt        | d      r"| j                  j                  r| j                  rt        | d      s| j                  sy | j                  sD| j
                  j                  r.| j
                  j                  | j
                  j                  k7  ry | j
                  j                  | | j                   j                  | j                   j                         y )Nr   )
r   r   r   r   r  rN   r  r  run_transitionr2   r   s    r9   _exec_transitionz CmfActiveEntity._exec_transition  s    
 {{%%T:.4==3K3KTXTaTa z2t{{ {{t}}77DMM<M<MQUQ^Q^QbQb<b$$T4;;??DKK<M<MNr:   )comment_appendchanged_fieldsr:  c                *   |j                         D ]F  \  }}t        | j                  j                  |      t        j                        r:t        | ||       H | j                  d       |r&t        j                  ||       j                          y y )NT)is_task_transition_run)r  r    )	r   
issubclassr   r   
CmfBackrefr   r   rc   r   )r7   r9  r:  _args_kwargskeyvals          r9   r%   z#CmfActiveEntity.task_transition_run%  s    &,,. 	(HCdkkooc2F4E4EFc3'	( 				.#   df	 r:   c                 t    | j                   r| j                  r | j                  j                         | _         y y rG   )r  r  ui_namer  r   s    r9   _calc_ui_view_formz"CmfActiveEntity._calc_ui_view_form4  s-       DKK $ 2 2 4D %0r:   c                    | j                          t        j                  d       | j                          t        j                  d       | j	                          t        j                  d       | j                          t        j                  d       | j                          | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d	       | j                          t        j                  d
       | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d       | j!                          t        j                  d       | j#                          t        j                  d       | j%                          t        j                  d       | j'                          t        j                  d       | j)                          t        j                  d       | j+                          t        j                  d       | j-                          t        j                  d       | j/                          t        j                  d       | j1                          t        j                  d       | j3                          t        j                  d       | j5                          t        j                  d       | j7                          t        j                  d       | j9                          t        j                  d       y )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 endz_calc_perm_policy end)r(  r   debugr@  r  r  r  r  r   _calc_tree_parent_calc_perm_security_levelr  r  r  _calc_status_historyr  r   r  rl  r  r   r   rF  r  r  _calc_sharelink_hashrE  +_calc_perm_security_level_allowed_ids_cache_calc_perm_policy)r7   r@  s     r9   recalc_fieldszCmfActiveEntity.recalc_fields:  s   	!"	"#	$%	%& 	$%	&' 	'(&&(	/0	$%##%	,-	"#!!#	*+$$&	-.	 !	$%	$%	&'""$	+, 	'($$&	-.	 !&&(	/0!!#	*+!	()88:	AB 	'(r:   c                      y rG   r^   r   s    r9   do_status_is_changedz$CmfActiveEntity.do_status_is_changed  r	  r:   c                 b   | j                   j                  sy | j                   j                  r;| j                  | j                   j                  k7  rt	        d| j
                         t        j                         5  | j                  j                  | | j                   j                  | j                   j                        }|r|d   }nd }t        j                  | | j                   j                  | j                   j                  |      j                          d d d        y # 1 sw Y   y xY w)Nz1cache_status_type != status.status_type obj_id = rE   )objfrom_status	to_status
transition)r   r   rI   rH   r   rD   r  r#   rN   calc_transitionr  r  rc   CmfStatusHistoryr   )r7   transitionstranss      r9   r`  z$CmfActiveEntity._calc_status_history  s    {{%% ;;!!%%)@)@@"STXT[T[S\ ]^^  " 	k--77dkkoot{{_K#B##dkkoo]b $ ddhdhdj	k 	k 	ks   =BD%%D.c                 &   | j                  |       }|d   }|r| j                  |j                                |D ]U  }||   j                  d      s||   d   d   dk(  r't	        | |      }|j
                  r@t        | |||   d   d          W y )N	ui_fieldsrq   r2   _NONE_)_build_ui_formr  keysr   r  r   r   )r7   ui_form_jsonrq  conf_field_name	cur_fields        r9   _calc_default_fieldz#CmfActiveEntity._calc_default_field  s     **40 -	Y^^-.( 	_O_-11)<))4W=Io6I''oy/I)/TU\/]^	_r:   )r<  depthc          
         | j                   r| j                          | j                   r,| j                  dk(  r| j                  st	        |   |d|i|S | j                  j                  r| j                   s|st        j                  j                  dd| j                  j                  j                  ggdd| j                  j                  gg dgd	      }|s?t        j                  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                          | j                   r: | j"                  |i | t	        |   |d|i|}t$        j'                  d       |S  | j(                  di | | j+                          t$        j'                  d       | j-                          t$        j'                  d       t        j.                  j1                  |        t$        j'                  d       t	        |   |d|i|}t$        j'                  d       t        j2                  j5                  |        |S )Nr   ry  status_fromr  	status_tor+  )trans_form_showr+  TT)r   rS  )r{  r+  Nzmust_transition_run r   r  zsuper().save endzhandle_mention_persons endz_calc_resolution end)rh  zdo_calc_statistics endr^   )r  rx  r4  r   r/   r   r   r   rc   CmfTransr   r  rD   r  r	  rf  r   r5  r   r]  rd  handle_mention_persons_calc_resolutionCmfStatdo_calc_statistics
CmfLicensecheck_license)r7   r<  ry  r   r   ro  r|  r8   s          r9   r   zCmfActiveEntity.save  sP   ;;$$&;;4??i7		7<=U=f==;;!!$++>TOO''"D4;;??+=+=*>? #t{{72 #' ( E ++2$c4;;??;6 '+ ,   0	588*AdkkooFXFXEYYZ[_[f[f[i[iZjkswx;;!!%%' D00',<E<V<CGG&' J$V$##%	,-	&'))d)3	()glD888	"# 	''- 
r:   c                 D   t        j                          | _        t        j                  d| j                   d       | j
                  r| j                  sLd}| j
                  rd}t        | d      r| j                  rd}t        j                  j                  | |d       y y )Nzsave start ()rw  r-  r   before_save)time_CmfActiveEntity__start_tsr   r]  rD   r  r   r   r   rc   CmfAutomationCrudTrigger	crud_hook)r7   r   crud_actions      r9   before_save_hookz CmfActiveEntity.before_save_hook  s|    ))+	,twwiq)* 0 0 #K{{&tZ(T]]&++55dKW !1r:   c                    | j                          t        j                  d       t        j                  rr| j
                  rf| j
                  j                  rPt        | j
                  j                  j                  t               t                      t        j                  d       | j                          t        j                  d       | j                  r| j                  sd }| j                  j                  r| j                  j                  }t         j"                  j%                  | | j                  rdndd       | j                  j                  r || j                  k7  r| j                  | _        t        j                  d       t        j                  d| j(                   d	t+        j*                         | j,                  z
  d
       y )Nz_exec_transition endz_exec_bzpython endz_exec_trigger endr-  rw  
after_savez_CmfAutomationCrudTrigger endz
save end (z): z.3f)r8  r   r]  configBZPYTHON_ENABLEDrN   save_eval_codeexecr2   globalslocalsr9  r  r   r   r
  rc   r  r  r   rD   r  r  )r7   r   hack_before_responsibles      r9   before_save_data_hookz%CmfActiveEntity.before_save_data_hook  sB   	&'""}}!=!=T]]1177FHM,-	#$  0 0
 '+#***.*:*:*@*@'++55dHYacop **/F$JZJZ/Z#'#3#3 GG34	*TWWISt)Fs(KLMr:   c                 L    | j                         | _        t        |           y rG   )r  cache_fieldsr/   _update_cache_fieldsr  s    r9   r  z$CmfActiveEntity._update_cache_fields*  s     668$&r:   )include_templatesc                J    |s|j                  dd       t        |   |i |S Nr   F)r  r/   r   r  r  r   r   r8   s       r9   r   zCmfActiveEntity.list/  s*     mU3w|T,V,,r:   c                J    |s|j                  dd       t        |   |i |S r  )r  r/   r   r  s       r9   r   zCmfActiveEntity.slist5  s*     mU3w}d-f--r:   c                    | j                  | j                  dg d      D ]  }t        j                  ||j                  |j
                        }|j                         }|rCt        |j                         d      5 }|j                  |j                                ddd       nt        d|        |j                          |j                  ||        |j                  d	       y# 1 sw Y   @xY w)
uD    Копирование вложений для CmfTask, CmfDocumentF)url_previewurl_preview_imgurlembedded)r  simpler   )r    r   r  rbNu8   Отсутствует файл для вложения Tr   )attach_listrD   rc   r*   r   r  	get_rfileopentmp_readonly_pathupload_filereadr	  r   _replace_attachment)r7   r    
attachmentnew_attachmentrfilefiles         r9   copy_attachmentsz CmfActiveEntity.copy_attachments;  s     **$''%2f + h 	CJ#11!#'00 2 N
 ((*E%113T: <d"..tyy{;< < TU_T`ab!&&z>B	C& 	d#< <s   < C**C3	c                     d|j                   _        |j                  dk(  r|j                  |_        d|_        n|j                          t        |   |      }t        j                  j                  |       |S )NTdummy)r@   r   r   rD   r   r  r/   _post_copy_hookrc   r  r  )r  obj_copyr|  r8   s      r9   r  zCmfActiveEntity._post_copy_hookS  sf     *.&==G#$KKHM $H!g%h/''1
r:   )r  r   r   r   r  r   c                   |rd}g d}| j                   D 	cg c]  }	|	j                  d      s|	 }
}	|
r|j                  |
       | j                  |       |rd}t	        |   d||d|}|r| j                  |       |S c c}	w )u  Копирование

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

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

        T)z**zattachments.urlr   zattachments.url_previewzattachments.url_preview_imgproject.logic_prefixr  r  )r   r   r^   )r   r`  r  r  r/   r   r  )r7   r   r  r   r   r   r   r   fields_for_loadr  	cf_fieldsr  r8   s               r9   r   zCmfActiveEntity.copy`  s     #$ )-Ouu7G7G7NUO	O""9-)D7<?T??!!(+ Ps
   BBu   ACL Праваrq   u   Нетu   ACL Полныеu   ACL Только чтениеu   ACL Приватные)rq   fullrW   private)rU   rQ   rq   rR   r}   u-   WEB Авторизованный доступu   Доступ запрещёнu2   Могут только просматриватьuE   Могут просматривать и комментироватьu   Полный доступ)rq   denyrW   r   r  u#   WEB Анонимный доступu"   WEB Доступ по ссылкеu8   Персональные политики доступаCmfPermPublishPolicy)rQ   rY   rv   c                     | j                          | j                          d| _        | j                  d       | j	                  d       y )NTforcer   )r  _load_perm_fieldsperm_has_acl_calc_perm_aclr   r7   perm_publish_policys     r9    perm_publish_policy_changed_hookz0CmfActiveEntity.perm_publish_policy_changed_hook  sA      $'		D	!r:   c                 2   | j                   j                  s|sy | j                   j                  dk(  r|sy | j                  sJdd l}dd l|j                  |j                  z   dj                  fdt        d      D              | _        t        j                         D ]s  }|j                  dd| j                  j                  gg dgg d	
      D ]>  }t        j!                  d|        |j#                  d       |j%                  d       @ u y )Nrq   r   r   c              3   @   K   | ]  }j                          y wrG   )choice)r   _alphabetsecretss     r9   r   z7CmfActiveEntity._calc_sharelink_hash.<locals>.<genexpr>  s     )Uq'..*B)Us   rB  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   r]  ra  r   )r7   r  r  	model_clschildr  r  s        @@r9   ra  z$CmfActiveEntity._calc_sharelink_hash  s    ))44U%%))Y6u ""++fmm;H"$'')UERSH)U"UD )88: 	+INN,<c477==+QSp*q*[ # ]+ =eWEF***6

T
*+	+r:   c                 2    d| _         | j                          y)u&   Метод сброса sharelink_hashN)r  ra  r   s    r9   do_erase_sharelink_hashz'CmfActiveEntity.do_erase_sharelink_hash  s     #!!#r:   CmfStr32zShareLink hash)rd   rQ   r   rU   c                 >   | j                   dk(  ryt        j                  d| j                        }t        j                  j                         }|j                  j                  |       | j                   dk(  rd|_        n| j                   dk(  r<d|_        t        j                  d| j                  d|gd	g
      j                          nA| j                   dk(  rd|_        n*t        j                  d| j                    d       d|_        |j                          y)uG   Наполняем ACL правилами для ShareLink группыrq   Nauto)r  r    rW   r  r   writecommentsr  r    access_levelsubjectsr  r  z%WARN! Unknown perm_policy_sharelink: z. Set deny policyr  )r  rc   CmfAccessRuleperm_aclrk   sharelink_groupr  r   r  r   r   r]  )r7   acl_rule_sharelinkr  s      r9   _acl_scaffold_sharelink_rulesz-CmfActiveEntity._acl_scaffold_sharelink_rules  s	   %%2#11DMM 2 3 //??A##**?;%%3.4+''94.4+  }}$)*)l !  df''61.4+GG78R8R7SSdeg.4+!r:   c                 `   | j                   j                  ddg       | j                   D ]  }|j                  s|j                  dk(  r=t        j                  d| j                  |j                  gd      j                          ]|j                  dk(  r=t        j                  d| j                  |j                  gd      j                          |j                  d	k(  r|t        j                  d| j                  |j                  gd      j                          t        j                  d| j                  d
g|j                  gd      j                          4|j                  dk(  sEt        j                  d| j                  |j                  gd      j                           y )Nsubjectpublish_policyr   r  r  r  r    r  r  rW   r  r   r  r  )r  r    r  r  r  r  )perm_publish_policiesr4   r  r  rc   r  r  r   r  s     r9   _acl_scaffold_subjects_rulesz,CmfActiveEntity._acl_scaffold_subjects_rules  s   ""''	;K/L'M#'#=#= 	X&.."11V;$$#DMM199: % QQUQUQW$33zA$$#DMM199: % QQUQUQW$33y@$$#DMM199: % QQUQUQW$$#DMM*199: % RRVRVRX$33v=$$#DMM199: % QQUQUQW+	Xr:   c                    | j                   dk(  r| j                  dk(  ryt        j                  d| j                  d      }t        j
                  j                  d      }|j                  j                  |       | j                   dk(  rd	|_	        ni| j                   d
k(  r<d	|_	        t        j                  d| j                  d|gdg      j                          n| j                   dk(  rd|_	        nd|_	        |j                          t        j                  d| j                  d      }t        j                  j                         }|j                  j                  |       | j                  dk(  rd	|_	        ni| j                  d
k(  r<d	|_	        t        j                  d| j                  d|gdg      j                          n| j                  dk(  rd|_	        nd|_	        |j                          y)uZ   Наполняем ACL правилами для публикации документовrq   Nr  SETMEBUG)r  r    r  zanonymous@evateam.ru)r  rW   r  r   r  r  r  r  r  )perm_policy_anonymousperm_policy_guestrc   r  r  ra   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&&)3 
 $11DMM
 2 L!++//6L/M##**+;<%%3.4+''94.4+  }}$*+)l !  df''61.4+.4+!  --DMM
 . L#22>>@&&'9:!!Z/*0N'##y0*0N'  }}$,-)l !  df##v-*1N'*0N'r:   c                    | j                          | j                          | j                          | j                  g d       | j                  dk(  rPt
        j                  d| j                  t
        j                  j                         gd      j                          n| j                  dk(  rt        t        | j                                     }|r1t
        j                  d| j                  |d      j                          t
        j                  d| j                  t
        j                  j                         gd      j                          n| j                  dk(  rt        t        | j                                     }|r1t
        j                  d| j                  |d      j                          t        t        | j                                     }|r1t
        j                  d| j                  |d      j                          t
        j                  d| j                  t
        j                  j                         gd	      j                          t        | A          y
)u   Наполним свой acl автоматическими правилами в зависимости от политики)r;  r   r   r  r  r  rW   	denyWriter  r  r  N)r  r  r  r  perm_policyrc   r  r  rk   
user_groupr   r   rs  r  r  r/   _acl_scaffold)r7   writer_listreader_listr8   s      r9   r  zCmfActiveEntity._acl_scaffoldN  s   ))+'')**,LMv%   //::<=F ! TTXTXTZ+s4#F#F#HIJK$$#DMM(v % ??Ctv   //::<=K ! YY]Y]Y_*s4#F#F#HIJK$$#DMM(v % ??Ctvs4#E#E#GHIK$$#DMM(v % ??Ctv   //::<=F ! TTXTXTZr:   c                 *    | j                  g d       y )N)r  r  z
perm_acl.*perm_inheritperm_parentperm_inherit_acl_idperm_effective_acl_idr  r  r  r  r  r  )r  r   s    r9   r  z!CmfActiveEntity._load_perm_fieldsr  s     P 	Qr:   c                     t         |           | j                  j                  s| j                  j                  sy | j                          | j                  r| j                  dk7  rd| _        y y y )Nrq   T)r/   _calc_perm_has_aclr  r   r  r  r  s    r9   r  z"CmfActiveEntity._calc_perm_has_aclz  sb    "$''t/?/?/J/J  0 0I = !%D !>r:   c                    |s| j                   j                  s| j                  j                  s| j                  j                  si| j                  j                  sS| j
                  j                  s=| j                  j                  s'| j                  j                  s| j                         sy | j                          | j
                  dk7  s| j                  dk7  s| j                  dk7  r| j                   sd| _         t        | -  d      S )Nrq   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6##..>>,,--88))44--88002 %%2%%2))Y6$$$(!w%D%11r:   c                 (   | j                   j                  ry | j                  j                  rZ| j                  dg       t	        | j                  d      r2| j                  j                   r| j                  j                   | _         y | j
                  dk(  r|| j                  ro| j                  j                  rXt        j                  | j                        j                  }| j                   s"|r|j                  r|j                  | _         y y y y y y y )Nzperm_parent.perm_security_levelr  r   )r  r   r  r  r   r4  r=  rb  r  r  r  default_task_security_level)r7   r  s     r9   r_  z)CmfActiveEntity._calc_perm_security_level  s     ##.. &&?@At'')>?DDTDTDhDh+/+;+;+O+O( ??i'4<<#:#:(+(=(=doo(N(d(d%//--II/D/`/`D, J . 0 $; (r:   common	templates)loader
autoescapeemailsr  u2   Отправка доступа по ссылке )	only_onceonly_once_argsdescriptionshow_bg_progressbarc                    t         j                  |g d      }t        d       |j                          }t        j
                  j                         }t        j                  j                  d      }d|j                   d}| D ]O  }|j                  |t        j                  |      }	t        j                  d	||	       |j!                  ||	|
       Q y )N)r  r  r    r   T)full_urlzsend_sharelink.htmluD   Вам предоставлен доступ к документу "")sharelink_urlr  rh  z%s
%s)r  )r  r  app_base_href_sharelink_hrefrc   CmfPluginMailBoxget_local_mailboxr   
_jinja_envget_templater   renderr   r  logginginfosend_message)
r  r  r@  rh  r  mail_boxmessage_templater  emailmessages
             r9   _send_sharelink_emailsz&CmfActiveEntity._send_sharelink_emails  s    
 ##F3h#i($789L9L9N8OP**<<>*55BBCXYXY\YaYaXbbcd 	CE&--MXYXfXflo-pGLL7G4!!%'!B	Cr:   c                 :   | j                   r| j                  r`| j                  j                  }d| j                  v r/| j                   d| j                  j	                  dd      d    }n| j                  }n| j                  }d}d| d| d| j                    S y)	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  rx   rE   r   zshare//z?hash=N)r  r    r   r  r   )r7   project_codeobj_public_codes      r9   r  zCmfActiveEntity._sharelink_href  s    4 {{#{{//$))#)-)9)9(:!DIIOOCQR<STV<W;X&YO&*iiO#yy"$L>?*;6$BUBUAVWW r:   c                    | j                  dg       | j                  dk(  rd| _        | j                          t        j	                  d|| j
                         t        | j                  |t        | j
                        d       y )Nr  r   rq   rW   z&CmfActiveEntity.send_sharelink(%s, %s))r  r  )r   )	r  r  r   r  r  rD   schedule_deferred_jobr"  rM   )r7   r  r@  s      r9   r(   zCmfActiveEntity.send_sharelink  so    !8 9:%%2)3D&IIK=vtwwO''6SQUQXQX\0Z	\r:   c                    t               }ddg}|dkD  rt        d| dd       |j                  d      sy	|d
k(  r:| j                  g d       | j                  r|j                  | j                         |dk(  rh| j                  g d       | j                  rI|r,|j                  | j                  j                  |             n|j                  | j                         |dk(  rh| j                  g d       | j                  rI|r,|j                  | j                  j                  |             n|j                  | j                         |dk(  r:| j                  g d       | j                  r|j                  | j                         |dk(  r:| j                  g d       | j                  r|j                  | j                         |dk(  rR| j                  rFt        j                  | j                        }|j                  r|j                  |j                         |dk(  rR| j                  rFt        j                  | j                        }|j                  r|j                  |j                         |dk(  r| j                  rt        j                  | j                        }t               }|j                  r|j!                  |j                         |j                  r|j#                  |j                         |j                  r+|j#                  |j                  j                  |             |j                  r+|j#                  |j                  j                  |             |j                  t        |             |dk(  r:| j                  g d       | j$                  r|j                  | j$                         |dk(  r:| j                  g d       | j&                  r|j                  | j&                         |dk(  rt)        | d      r:| j                  g d       | j*                  r|j                  | j*                         t)        | d      rL| j                  d d!g       | j,                  D ]*  }|j*                  s|j                  |j*                         , |d"k(  rt.        j0                  gS |d#k(  r|j                  | j3                                |d$k(  r!|j                  | j5                  |             |d%k(  r/t)        | d&      r"| j                  g d'       t               }| j6                  j8                  r5|j#                  | j6                  j8                  j                  |             | j6                  j:                  r| j6                  j:                  D ]q  }	|	j<                  r+|j#                  |	j<                  j                  |             |	j8                  sG|j#                  |	j8                  j                  |             s |j                  t        |             g }
|D ]  }|j>                  j@                  j                  d      r;|
j                  | jC                  |j>                  j@                  |d(z   |)             c|jD                  rpt)        |d      r|jF                  r|
j                  |        |
S )*u?  
        Получение значение по шаблонным объектам.

        Возвращает список (в том числе пустой), если передан шаблонный объект
            или None, если объект не является шаблонным
        cmf_deletedr  
   un   Зацикливание рекурсии в раскрытии var-пользователя: extract_var_obj(r  Tr  zvar:Nzvar:responsible)r   responsible.cmf_deletedresponsible.does_not_workzvar:executors)r   executors.cmf_deletedexecutors.does_not_workr   zvar:spectators)r   spectators.cmf_deletedspectators.does_not_workz	var:owner)r   cmf_owner.cmf_deletedcmf_owner.does_not_workzvar:owner_assistants)r;  z cmf_owner_assistants.cmf_deletedz"cmf_owner_assistants.does_not_workzvar:project_ownerzvar:project_owner_assistantszvar:project_usersz
var:author)r  cmf_author.cmf_deletedcmf_author.does_not_workzvar:waiting_for)r   waiting_for.cmf_deletedwaiting_for.does_not_workzvar:component_ownerdefault_owner)r8  zdefault_owner.cmf_deletedzdefault_owner.does_not_work
componentsz$components.default_owner.cmf_deletedz&components.default_owner.does_not_workzvar:current_userzvar:followerszvar:all_related_userszvar:approversr   )zstatus.master_approverszstatus.approve_groupszstatus.approve_groups.approversz&status.approve_groups.master_approversrx   )	recursionall_nested_persons)$r   r	  r`  r  r   r   r   r  rv  r   r   r;  r=  r  r  rs  ru  rw  r  r   r   r8  r9  r   r  get_all_followersrt  r   master_approversapprove_groups	approversr   r2   extract_var_objr*  r  )r7   obj_coder:  r;  	var_usersr   rb  res	componentagres_var_usersvar_users               r9   r@  zCmfActiveEntity.extract_var_obj	  s    F	1r>  G  HP  GQ  QR  S  [_  `""6*((de  !1!12&^_~~%$$T^^%>%>f%>%MN$$T^^4''ab%$$T__%?%?v%?%NO$$T__5{"^_~~  0--  A((  !:!:;**//@$$$$W%6%6755//@//$$W%A%AB**//@e$$GGG--.//JJw;;<$$JJw00;;6;JK%%JJw11<<F<KL  c+|#ab  1((de  !1!12,,t_-  !no%%$$T%7%78t\*  "HJr!st!% BI ..!(()@)@AB ))NN##&T3356..T66f6EF&tX&    "c  de;;//JJt{{;;FFfFUV;;--"kk88 V<<JJr||'>'>f'>'MN..JJr':':'E'EV'E'TU	V
   c+ ! 		+H}}""--f5$$T%9%9(--:M:MYbcdYdM_ &: &a b##x1h6L6L  *		+ r:   c                 L   | j                   j                  s |s| j                  j                  s| j                  j                  s| j                  j                  s| j
                  j                  s| j                  j                  s| j                  j                  s| j                  j                  s| j                  j                  sl| j                  s`d}| j                  rOt        j                  j                  | j                        j                  }|r|D ]  }| |   j                  sd} n |sy t         j#                  d       | j                  s)| j$                  rd | _        t         j#                  d       y t'               }t'               }t        j                  j                  | j                        }|j(                  D ]  }|j*                  r| j-                  |j*                  j.                        }	|	X|j0                  r&|j3                  |j4                  j6                         n|j3                  |j4                  j6                         n^|	D ]Y  }
|j0                  r&|j3                  |
j8                  j6                         5|j3                  |
j8                  j6                         [ |j:                  s| j=                  |j:                         |j:                  D ]  }| |   s	t?        tA        | |         tB        jD                        rb| |   D ]Y  }|j0                  r&|j3                  |j8                  j6                         5|j3                  |j8                  j6                         [ |j0                  r)|j3                  | |   j8                  j6                         |j3                  | |   j8                  j6                           d |v sd |v rtG        dd       tI        |      tI        |      d| _        t         j#                  d       y )NFTz1_calc_perm_security_level_allowed_ids_cache startr\  uf   DEV: _calc_perm_security_level_allowed_ids_cache None должны отфильтровываться!r  )r  rW   )%r  r   r   r;  r  r   rb  r   r   r   r  perm_security_level_idrc   CmfSecurityLevelget_cache_security_levelaccess_task_fields_cacher   r]  %perm_security_level_allowed_ids_cachers  security_level_rulesaccess_memberr@  r   access_readonlyru  access_member_idr2   rD   access_task_fieldsr  r=  typer   
CmfM2MBaser	  r   )r7   r  custom_changedrL  r  allowed_idsallowed_ids_readonlyr  ruleextracted_membersextracted_memberr   rh  s                r9   rb  z;CmfActiveEntity._calc_perm_security_level_allowed_ids_cachey	  s]    $$//~~((((33))**||&&~~(())**{{ #N**+1+B+B+[+[\`\w\w+x  ,R  ,R(+(@ "-88-1N!" "	CD**99=A:GGEFe"u$55NNtOjOjk'<< 	GD!!$($8$89K9K9P9P$Q!$,++,001F1F1L1LM#(=(=(C(CD,= G(//0445E5H5H5N5NO'OO,<,?,?,E,EF	G
 &&  !8!89"&"9"9 GJ
+ !$tJ'7"8&:K:KL#'
#3 >C#33 4 8 8 F + =	>  //044T*5E5H5H5N5NO'OOD,<,?,?,E,EFG!	GB ;$*>">~  HL  M>B;>OBFG[B\6^2	ABr:   c                      y rG   r^   r   s    r9   rc  z!CmfActiveEntity._calc_perm_policy	  r	  r:   c                 P    | j                          d| _        t        |           y )Nrq   )r  r  r/   r#   )r7   r@  r8   s     r9   r#   zCmfActiveEntity.disable_acl	  s"     $r:   c                     t        |   di | t        j                  j                  j
                  j                  dgdd| g      D ]  } | j                  |fi |  y )Nr
   r    r+  )r   r   r^   )r/   _direct_children_deletere  includerc   r*   r   _delete_child_object)r7   r   r  r8   s      r9   r^  z'CmfActiveEntity._direct_children_delete	  sc    '1&1++,,::??uV^`ceiUj?k 	<J%D%%j;F;	<r:   r:  returnc                   |dkD  rt        dd       | j                  g d       t        |   di |}| j                  D ]  }|j
                  dk(  r*|j                  |v r|j                  |j                         <|dk(  r|j                  |j                         ]|j                  sj|j                  |j                          | j                  r.|j                  | j                  j                  |dz   	            }| j                  j                  }| j                  j                  }| j                  j                  }| j                   j                  }	| j"                  }
| j$                  j&                  }	 t)        |D cg c]-  }t*        j,                  j/                  ||
||	|d
d| ||
      r|/ c}      }|S c c}w # t0        $ r t)               }Y |S w xY w)Nr  u@   DEV: зацикливание рекурсии get_all_followersTr  )r   r2  r3  r   r6  r7  r   r,  r-  r   r0  r1  r   r.  r/  r  r4  r5  zfollowers.personzfollowers.person.cmf_deletedzfollowers.person.does_not_workzfollowers.notify_volumezfollowers.follow_childrenr>  offr   rx   ra  r  F)
initial_acl_keyobject_modelobject_owner_idr  object_parent_idr  rK   object_instancechecking_personperm_security_level_allowed_idsr^   )r	  r  r/   r<  	followersnotify_volumer   removeru  follow_childrenr>  unionr  r2   rg   r   rD   r4  rM  r  rs  rc   r+  check_accessCmfACLNotInitializedError)r7   r:  r   r   rC  followerre  obj_parent_idr   self_idr4  rM  rh  rl  r8   s                 r9   r<  z!CmfActiveEntity.get_all_followers	  s   r>X`de a 	b g'1&1 		)H%%.??c)JJx/A~())(		) ))D,,>>UV>WXC44::,,((..''--__
040Z0Z0^0^-	"	\''44$3!+\%!'U$($'4Y 5 [ 	\ 	]I 	\ ) 	 I		s$   >	G 2G9G G GGc           	         | j                  | j                         |j                  d| j                  xr  | j                  j                  j
                  xs d        |j                  d| j                  xr  | j                  j                  j
                  xs d        |j                  d| j                  j
                  xs d       |j                  d| j                  j
                         d|vrCdj                  | j                  D cg c]  }t        |j                  xs d       c}      |d<   t        | 8  d	i |S c c}w )
Nobj_logic_type_codeobj_activity_codeobj_status_typer   obj_user_ratingobj_tagsr   r   r^   )r  full_search_preload_fieldsr  r@   r   r2   r<  rI   r   r   r   rM   r   r/   full_search_index)r7   r   tr8   s      r9   r}  z!CmfActiveEntity.full_search_index

  s   889/1_T__EYEYE_E_1gcgh-t}}/YASASAYAY/a]ab+T-C-C-I-I-SVT+T-=-=-C-CDV#!$dii*P3qvv|+<*P!QF:w(2622 +Qs    Er  c                    t         j                  dt         j                        }t         j                  dt         j                        }|j                  |       r|j                  |       sg S t	        j
                  | d      }g }|j                  d       D ]8  }t        j                  |j                  d         }|s(|j                  |       : |S )Ndata-mention-type)flagszdata-object-idlxmlc                 $    | j                  d      S )Nr  )has_attr)tags    r9   <lambda>z,CmfActiveEntity.parse_text.<locals>.<lambda> 
  s    3<<8K+L r:   )recompileIr  bs4BeautifulSoupfind_allr  r  attrsr   )r  re1re2bsrz  r  rh  s          r9   
parse_textzCmfActiveEntity.parse_text
  s    jj-RTTj:jj*"$$j7

4 SZZ%5ItV,;;LM 	#C''		2B(CDCc"	# r:   c                    | j                   j                  sy t               }t               }| j                   j                  r.t        | j	                  | j                   j                              }| j                   j
                  r.t        | j	                  | j                   j
                              }||z
  D ]3  }|j                  dv st        j                  j                  | d|       5 y )N)rk   ra   rl   mention)event_person)
r  r   rs  r  r  r  r4  rc   CmfEventdo_event)r7   objs_oldobjs_newrh  s       r9   r  z&CmfActiveEntity.handle_mention_persons&
  s    yy##5599==4??499==9:H99==4??499==9:Hh& 	LC~~!KK((ys(K	Lr:   c                    g d}| j                   |vrt        dd       g d}g d}t        j                  | j                         j	                  ||D cg c]  }d| 	 c}      }t
        j                  r]|j                  t
        j                  j                  k7  r6t
        j                  d	| d
t
        j                          t        dd      |D ci c]  }|t        |j                  |       }}|d   r5|d   j                  |       |D ci c]  }|t        |d   |       c}|d<   |S c c}w c c}w c c}w )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_htmlzparent.r  uX   В public_get share api попытались запросить чужой объект z != u8   Нет прав public_get (ошибка доступа)r  )r4  r	  r  get_model_by_namer   r   sharelink_access_requestrD   sharelink_access_objr]  r  r    r  )r  child_idallowed_objectsallowed_fieldsscheme_fieldsfr  r|  s           r9   public_parent_ui_getz$CmfActiveEntity.public_parent_ui_get5
  s`   F~~0}  FJ  K Fa ))#..9==jxRyefU\]^\_S`Ry=z%%xx111444rsxryy}~  U  U  ~V  W  X Zbfgg 5CCqq'%,,**CC#$$%11-@[h(iVWGC8L4Mq,Q)Q(iC$% 
! Sz D )js   D6
D;E c                    | j                          t        j                  d       | j                          t        j                  d       | j	                          t        j                  d       | j                          t        j                  d       | j                          | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d	       | j                          t        j                  d
       | j                          t        j                  d       | j                          t        j                  d       | j                          t        j                  d       | j!                          t        j                  d       | j#                          t        j                  d       | j%                          t        j                  d       | j'                          t        j                  d       | j)                          t        j                  d       | j+                          t        j                  d       | j-                          t        j                  d       | j/                          t        j                  d       | j1                          t        j                  d       t3        | h  |i | y )NrG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  )r(  r   r]  r@  r  r  r  r  r   r^  r_  r  r  r  r  r  rl  r  r   r   rF  r  ra  rE  rb  r/   _save_import)r7   r   r   r8   s      r9   r  zCmfActiveEntity._save_importU
  sG   	!"	"#	$%	%& 	$%	&' 	'(&&(	/0	$%##%	,-	"#$$&	-.	$%	$%	&'""$	+, 	'($$&	-.&&(	/0!!#	*+!	()88:	ABd-f-r:   c                 L   ddl m} g }g d}|r |j                  d       t        j	                  |d|      }||S |j
                  D ];  }	t        |	d      r|	j                  |	j                  dv s+|j                  |	       = |j                   ||xs 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  )rA  reverse)
operatorr  r   r  r  r  r   r  r4  sort)
r  node_idr  sort_byinclude_contentr  	node_listr   rh  nodes
             r9   _macros_page_tree_node_listz+CmfActiveEntity._macros_page_tree_node_list
  s    '	G FMM+,##GD+1 $ 3 ;NN 	'DtZ(T]]-F">>  &		' 	:g&:;WMr:   ry  c                     | j                  ||||      }|dz  }|dkD  r9|D ]4  }|j                  s| j                  |j                  ||||      |_        6 |S )N)r  r  r  rx   r   )r  ry  r  r  r  )r  tree_node_is_branchr$   rD   r  )r  r  ry  r  r  r  r  r  s           r9   r$   z$CmfActiveEntity.macros_page_tree_get
  s}    33GWV]o~3	
19! B++&)&>&>twwV[GNX_  rA '? 'BDOB
 r:   c                 \    | j                  | j                  j                  ||      | _        y rG   )_replace_attach_urlr  r2   )r7   r   
new_attachs      r9   r  z#CmfActiveEntity._replace_attachment
  s     ,,TYY__fjQ	r:   c                    ddl m} | | j                  |j                  j                  |j                  j                        } |j
                  j                  | v r;| j                  |j
                  j                  |j
                  j                        } np|j                  |j
                  j                        | v rI| j                  |j                  |j
                  j                        |j
                  j                        } |j                  rS|j                  j                  | v r;| j                  |j                  j                  |j                  j                        } n||j                  rp|j                  |j                  j                        | v rI| j                  |j                  |j                  j                        |j                  j                        } |j                  rT|j                  j                  | v r<| j                  |j                  j                  |j                  j                        } | S |j                  rp|j                  |j                  j                        | v rI| j                  |j                  |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    	!<<		1D1DEDzz4'||FJJ$4$4jnn6J6JKVZZ--.$6||EKK

0@0@$A:>>CWCWX!!f&8&8&>&>$&F||F$6$6$<$<j>T>T>Z>Z[##F4F4F4L4L(MQU(U||EKK0B0B0H0H$I$.$:$:$@$@B %%&*@*@*F*F$*N||F$:$:$@$@*B\B\BbBbc
 	 ''EKK8N8N8T8T,UY],]||EKK0F0F0L0L$M$.$>$>$D$DF r:   c                    | j                   r| j                  j                  g|d<   | j                  r%t	        j
                  j                  | dg|i | y t        | d      r| j                  j                  r}t	        j
                  j                  | dg|i | | j                  j                  rB| j                  dk(  r>| j                  j                  dk7  r%t	        j
                  j                  | dg|i | n| j                  dk7  r>| j                  j                  dk(  r%t	        j
                  j                  | dg|i | n| j                  dk(  r>| j                  j                  dk7  r%t	        j
                  j                  | d	g|i | n[| j                  dk7  rL| j                  dk7  r=| j                  j                  dk(  r$t	        j
                  j                  | d
g|i | t        | d      r| j                  j                  s"t        | d      r:| j                  j                  r$t	        j
                  j                  | dg|i | | j                  j                  r$t	        j
                  j                  | dg|i | t        | d      r:| j                  j                  r$t	        j
                  j                  | dg|i | t        | d      r\t        | d      rP| j                   j                  s| j"                  j                  r$t	        j
                  j                  | dg|i | t	        j
                  j                  | dg|i | y )Nfilter_memberscreatedr   changed_statusr   closedreopenedr   work_startedwork_stoppedr   r   assignedmovedresult_textresolvedr  r  sharedupdated)r   r   r2   r  rc   r  r  r   r   r   rI   r  r   r   r    r  r  r  r4  s      r9   _do_event_savezCmfActiveEntity._do_event_save
  s   &*&7&7&=&=%>F#$;;OO$$T9FtFvFtX&4;;+A+A((/?Q$Q&Q))44--9d>T>T>X>X\d>d00xQ$Q&Q//8;@V@V@Z@Z^f@f00zSDSFS//=@TE[E[E_E_cpEp00~WWPVW//=@TE[E[_gEg $ 6 6 : :m K 00~WWPVW}-$2B2B2M2Mk2t~~7P7P((zKDKFK{{%%((wHHHt]+0@0@0K0K((zKDKFK67GDJ]<^33>>$BXBXBcBc((xI$I&IOO$$T9FtFvFr:   zBaseModel:custom_field_sync)channelc                 r   dd l }t        j                  d|j                          d|         ddlm} t        t              | d      }t        j                  d| d            ||      }t        j                  d       |j                          t        j                  d	|j                                 y )
Nr   zN====================================custom_field_sync_update_models START PID=z data=)CmfCustomClassr  uS   custom_field_sync_update_models: создаем CmfCustomClass для модели )r  uL   custom_field_sync_update_models: вызываем reload_models_and_fields()zL====================================custom_field_sync_update_models END PID=)	r!  r   r]  getpidcmf.models.base_modelr  varsrc   reload_models_and_fields)datar   r!  r  r  custom_classs         r9   custom_field_sync_update_modelsz/CmfActiveEntity.custom_field_sync_update_models  s     		`acajajal`mmstxsyz{8L&6!78		efjk{f|e}~%	:	^_--/	^_a_h_h_j^klmr:   c           	         t         j                  r1| j                  r%| j                  j                  j	                  d      sy t         j                  t         j
                  j                  j                  dg|| j                  j                  | j                  d      t         j                  | j                  j                  d}t        d|d    ||d   |d   g       y )	Nr\  project_notifyT)r   )initiatorSessionTabIdinitiatorCurrentPersonactioninitiatorActioninitiatorObjIdinitiatorObjChangedFieldsu   initiatorСomponentId	projectIdzproject_notify-r  )roomevent_persons)
r   session_tab_idrg   r2   r`  r   rD   rt  component_idcmf_emit_event)r7   initiator_actionevents      r9   r  zCmfActiveEntity.project_notify  s    $$//>%&%5%5&'&6&6&9&9&?&?'(/"ggmm)-d)C%&^^--	
 	{);(<=u5Q\K]nst  oA  nB  	Cr:   c                      y)u   
        Экран по умолчанию если нет никаких правил и схем экранов

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

5!%	"& 
r:   c                 f   d }|j                   dk(  r)t        j                  t        |j                              }n6|r4|j
                  r(t        j                  t        |j
                              }|s8|r#|r |j                  r|s| j                  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|	j                  |       t        j                  j                  g d|	d      }
|D ]*  }|
D ]  }|j                  |k(  s|j                   } n |s* n |s| j#                         }d }t        |j                  j                        }d}|rJt        |j                  j                        }|j$                  rt        |j$                  j                        }|j&                  xr t        |j&                        }t        j(                  }|rXt        |j                        }|rA|r?||v r;|j$                  r/|||   v r(||   |   }||v r|||   v r||   |   v r||   |   |   }|s|rrt+               }|j,                  |d<   |j.                  |d<   |j                  |d<   | j1                        |d<   t        j2                  j5                  |j                        |d<   |r|rt        j6                  j5                  |||      \  }|d<   |D ]3  }||d   vrt+               |d   |<   |d   |   j9                  ||          5 t        |j                        }|j;                  |      st+               ||<   ||   j;                  |      st+               ||   |<   ||   |   }||vrt+               ||<   |||   vrt+               ||   |<   |||   |   |<   |S |S t<        | }  |      S |S ) Nri   rw  rq   r,  crud_choicer  )rq   rw  r-  )r   r   N)r-  rw  rq   Nr  r   logic_types)r!  r+  Nr<  r+  )r<  r+  Nr  r  ui_form_scheme)ztarget.ui_form_jsonr   r!  T)r   r   rS  Noner   r   r  )r  r   rq  cust_field_config)r  ) r4  r  r  rM   rD   r=  r"  rD  r  r@   r<  r   rc   CmfUiFormSchemeRuler   r   targetr  cust_field_conf_schemert   cache_cust_field_config_schemedictr   r   r  r  ui_fields_jsonCmfCustFieldConfSchemerw  r   r/   rs  )r  r  r  r  r  r  tmp_projectcrud_choice_ordercrud_choice_filterr7  ui_form_scheme_rule_listr   ui_form_scheme_ruleru  r  	scheme_idproject_logic_typert   r(  r  conf_scheme_cacherq  ui_field_namer8   s                          r9   rs  zCmfActiveEntity._build_ui_form  s    -//GJJ@K++//G4F4F0GHK ;;+E+E''*{{'8'8':$%-y$9!%)"*.Fe0f)D*F&(M%%tS^^<&w/A/A/D/D.EF2 #SAQAQ'*:*:*=*=W[\/	 &s,>?#S*:;%sK,F,F,I,IJL" &NN#56+1+E+E+K+KP"#' ,L ,)( $5 K/G "+.::kI&9&@&@G!"  224G..112	!$[%;%;%>%>!?11 B B E EF	))Fc'2E2E.F),)K)K&WZZJ;:9W+W55)GefpGq:q(Fz(RS\(]%$(99kM^_lMm>m  sE  IZ  [h  Ii  ju  Iv  sv'8'G'TUg'h#v'.||V$'.||V$&-jjU#252J2JV`2J2a./,2,<,<,K,KGJJ,W[){CIC`C`CoCopy]j]h]oDq@I|,?@ *3 b([0IIGKvL5mD$[1-@GG	R_H`a	b "%WZZJ9==jIEIV6zB9*EII)TPTPV6zB9M(Fz(RS\(]%(,==;?6)-8&*;M*JJHL)-8EXd%m4[ABTU''  w-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                  j                  ||dg      }|r|j                  r|| _        y t        j                  j                  d      | _        y y d | _        y y )Nr   r,  )r  r+  Nr  r  )r  r+  Nr  )r  r+  Nr  )
is_defaultr+  T)r6  r  r  r  r6  )r   r   r  T)r  )rI   r   r  r  r@   r=  r4  rc   CmfResolutionr   r6  )r7   r   r   rC  s       r9   r  z CmfActiveEntity._calc_resolution  s    !!,,%%))X5 $&CFVX\_c_n_n^oEpq $&@=RVY]YhYhXiBjk $&=
DSWSbSbRc?de8	F WF ..22&[gZh2iCs~~*-*0*>*>*B*B$*B*O ' #'! -r:   r  u2   Регистрация для публикацииpublish_specc                    t         j                  d| |       |D cg c]  }|d   	 }}t        j                  j	                  ||       t
        j                  |       }|D ]z  }|d   }|d   }t        j                  j                  |      }	|	s&t         j                  d|       t        d| d       Ut        j                  ||	|	      j                          | y
c c}w )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 для %sr   )guestr  )r   zUpublish_for_invited(): Person for email %s is absent, publish policy is not created, uB   Не удалось пригласить пользователя u;   , публикация для него не создана.)r    r  r  N)r  r  rc   ra   register_personsr  r  r   warningr	  r  r   )
r  r8  r:  r@  specr  rh  r   r  r   s
             r9   r&   z#CmfActiveEntity.publish_for_invited	  s     	qs|  K  	L,89D$w-99))&)> ##I.  	jDME!"23N%%)))6Fkmrt ^_d^e  fa  b  c''sFSa'bggi	j :s   C c                 4    t        |   |i |}| |_        |S rG   )r/   cloner   )r7   r   r   rC  r8   s       r9   r?  zCmfActiveEntity.clone*  s"    gmT,V,
r:   	subgroupsc                 *   |D ]  } | |d   |d   |d   |d         }t         j                  j                  |      |d<   |d   j                  |      |d<   t         j                  j                  |d   j                  j                        |d<    |S )	Nr=  r  rt   )rb  r    r@   r<  r  rN   )rC   status_list)rc   r  r  r  r]  r  rD   r2   )r  r@  subgroupr  s       r9   group_changes_statusesz&CmfActiveEntity.group_changes_statuses/  s    ! 	tH(<"8!),!7%-o%>#+M#:<G &,%7%7%C%CG%LH[!#+K#8#F#Fw#OHZ &,&8&8&H&HU]^hUiUlUlUrUr&H&sH]#	t r:   )r   rG   )NTTF)NNNNN)NN)NNNNNFN)F)r   F)FNF)Nrx   FNF)rw  )FNFN)NNT)r;   r<   r=   abstractfields_orderordering	api_allowr  r   cmf_active_entityr   api_methodsessential_child_modelsr@   re  	CmfStatusr   Fieldrf  r  r  r  r  r  CmfRelationr!   r   r   CmfGenericRelationr   r   CmfGenericM2Mr   r   r   r   r   CmfGenericBackrefattachmentsr   CmfChoiceIntr   	CmfChoicer   
CmfNumericr   CmfIntr   r   r   r   r   r   r   r   r   r>  r  r<  
is_penaltyrI   r  CmfObjectJsonr  r   r>  rl  r   propertyr   r   r)   r   r   r   r   r   r   r  r  r  r  r  r(  r9  r@  rF  rc  rl  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  r2  r5  r8  r)  r%   rE  rd  rf  r`  rx  r   r  r  r  r   r   r  r  rM   rW  r   r  r  r  r  r  r  ra  r  r  r  r  r  r  r  r  r  r  r_  jinja2EnvironmentFileSystemLoaderr!  pathr   r  PROJECT_DIRr  select_jinja_autoescaper  staticmethodcmf_deferred_jobr"  r  r(   r@  rb  rc  r#   r^  rs  r<  r}  r  r  r  r  r  r!  r$   r  r  r  on_server_eventr  r  r  r  r  rs  r  r&   r?  rD  r>   r?   s   @r9   r   r      s   HL. |HI--11AAMM 	Q
 	
K 	''77NNQdd SV]]44DDOO S'%% '$ ))

(LV[dh * j  #zz//

(LW[ejsw  0  y ZZ--

(R]akpy} . zz''

(R]akpy} ( zz''

(Cd\ajn ( p
 jjszz55?U]itx  LP  QG%v}}..>>CC %v}}..>>CC 
 

  

%%(}  ! I#cjj33 # 

  

  ,Uv%)% ! 	I !!

  (Uv%)% " 	J !!#**"4"4>akp!qJ::

  jZclt  @E*K84  QD
 **""

$$" 	 # K **""

%%'}  # K zz

$.NGW\l  rF  Kc  d   	H ::

#CcB  D
 **""
zz2	 # K 

((

H	 )  !!#**"8"8BV^b!cJzz

 6 6@YaefHjj&&

(P ' O JJ$$

(X % M zz''

(G (  jj&&

7%%)(.%
 ' O **""3::#@#@Jgrv"wK**""

 # 

K **""

%%3	
	 # K !!

 3,- " J zz

1   H !!

$GQV`e " J 

((

/",F&	
 Ed ) 	D zz''

3d ( $  6<< 4 4>Q[`lr{  AL'CJJ&& '( 

  !6!6@V`hp} ~I9v " "

6,+;z>$
A>%4N% "(k $'AFB TX/41f  , u u ]a"y y, 
m 
m   E4 E4N rvoH oHb 2 2 	 	g&A*F6>+Z ?D>;"J
/
v
UCnO& :>VZ t 5O)bk(_$ 26Q DLXND'
 +/ - -
 ,0 . .
$0 
 
 ?DV[fjqu  t t J **""

e5Eych&7/	
 # K 

((

e5dnw3L^/!
 )   JJ,,

e5Zdm3L^/!
 -   JJ,,

e5Ycl3L^/!
 -   JJ,,

J$	 - "+,$ ZZ%%

   & N"<X27r" HQ	%20D ##&&V5G5GS^(_'`a.. $ J
 (';H^bdCd C$XL\T \sjOCd
< 23 . .`3    L  >F.P  6 
s 
 
R  4GB :;	n < 	nC&   #'%$U6 6p c d  : dhm m^'& }H^bdjs j jd j:
 	d 	t 	 	r:   r   ry   )deploy_jobs)r   r  r   r^  r  re  r   modulesr   
sqlalchemyr   sqlalchemy.sqlr   dateutil.relativedeltar	   cmf.includecommon.fields.cmf_active_entityr  not_in_any_listsrI  r   r   re  r  r^   r:   r9   <module>rm     sT        
     0  &' b0fmm55EE b0La  r:   