U
    pct                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dl	T d dl
mZ d dlmZ d dlmZ d dlmZ G d	d
 d
ejeZdS )    NPathBeautifulSoup)*)cmf_hashlib)CmfPluginConvertMixin)cmf_document)CmfActiveEntityc                       s  e Zd Zddddddddddd	d
ddddddddddddd	dddddddddddddd	ddddddddddddd d!dd"dddd#d$d%d	d&d'dd(ddd)dddd*d+d,d	d-d.dd/d0d1d0d2d3Zd4d5 Zeeed6d7d8Zdd:d;Zd<d= Z	d>d? Z
 fd@dAZ fdBdCZdDdE ZdFdG ZdHdIdJdKZdHdLdMdNZd9d9dO fdPdQ
ZdRdS Z fdTdUZ fdVdWZdHdXdYdZZ fd[d\Z fd]d^Zd_d` Zdadb Zdcdd ZddedfZdgdh Zdidj ZeeedkdldmZeeedkdndoZeeedkdpdqZ eeedkdrdsZ!eeeedtdudvZ"e#eeedwdxdyZ$dzd{ Z%e&d|d} Z'dddZ(e&dd Z)e*j+j,e*j+j-ddddZ.d fdd	Z/  Z0S )CmfDocumentu
   ВажноZ0pxz0 0 512 512ZpreserveZ20)xyviewBox	xml:spacewidthheightzrgb(216, 64, 64)a  M256,512c141.385,0,256-114.615,256-256S397.385,0,256,0S0,114.615,0,256C0.153,397.322,114.678,511.847,256,512z    M234.667,128c0-11.782,9.551-21.333,21.333-21.333c11.782,0,21.333,9.551,21.333,21.333v170.667   c0,11.782-9.551,21.333-21.333,21.333c-11.782,0-21.333-9.551-21.333-21.333V128z M256,384c11.782,0,21.333,9.551,21.333,21.333   s-9.551,21.333-21.333,21.333c-11.782,0-21.333-9.551-21.333-21.333S244.218,384,256,384z)filldzpanel-alarmzrgb(255, 235, 230))tooltipsvgsvg_path	classNamecoloru   Ошибкаz0 0 208.891 208.891)r   r   r   r   r   r   zM0,170l65.555-65.555L0,38.891L38.891,0l65.555,65.555L170,0l38.891,38.891l-65.555,65.555L208.891,170L170,208.891  l-65.555-65.555l-65.555,65.555L0,170zzpanel-erroru   Предупреждениеz0 0 554.2 554.199)r   r   r   r   r   r   zrgb(255 153 32)a!  M538.5,386.199L356.5,70.8c-16.4-28.4-46.7-45.9-79.501-45.9c-32.8,0-63.1,17.5-79.5,45.9L12.3,391.6   c-16.4,28.4-16.4,63.4,0,91.8C28.7,511.8,59,529.3,91.8,529.3H462.2c0.101,0,0.2,0,0.2,0c50.7,0,91.8-41.101,91.8-91.8   C554.2,418.5,548.4,400.8,538.5,386.199z M316.3,416.899c0,21.7-16.7,38.3-39.2,38.3s-39.2-16.6-39.2-38.3V416   c0-21.601,16.7-38.301,39.2-38.301S316.3,394.3,316.3,416V416.899z M317.2,158.7L297.8,328.1c-1.3,12.2-9.4,19.8-20.7,19.8   s-19.4-7.7-20.7-19.8L237,158.6c-1.3-13.1,5.801-23,18-23H299.1C311.3,135.7,318.5,145.6,317.2,158.7zzpanel-warningz#FFFAE6u   Заметкаz	0 0 24 24zLayer 1)r   r   r   z	data-namea  m19 3.022c0-.008 0-.014 0-.022v-2a1 1 0 0 0 -2 0v1.1a5 5 0 0 0 -1-.1h-1v-1a1 1 0 0 0 -2 0v1h-2v-1a1 1 0 0 0 -2 0v1h-1a5 5 0 0 0 -1 .1v-1.1a1 1 0 0 0 -2 0v2 .022a4.979 4.979 0 0 0 -2 3.978v12a5.006 5.006 0 0 0 5 5h8a5.006 5.006 0 0 0 5-5v-12a4.979 4.979 0 0 0 -2-3.978zm-7 13.978h-4a1 1 0 0 1 0-2h4a1 1 0 0 1 0 2zm4-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zm0-4h-8a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2zz#5243aa)r   r   z
panel-notezrgb(234, 230, 255)u   Информация)r   r   r   zrgb(1,82,204)zM12,24A12,12,0,1,0,0,12,12.013,12.013,0,0,0,12,24ZM12,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12,5Zm-1,5h1a2,2,0,0,1,2,2v6a1,1,0,0,1-2,0V12H11a1,1,0,0,1,0-2Zz
panel-infozrgb(222, 235, 255)u   Готовоz0 0 1000 1000)r   r   r   r   r   r   z#01875aa9  M500,990c270.6,0,490-219.4,490-490S770.6,10,500,10S10,229.4,10,500S229.4,990,500,990z M483.7,678c-0.4,0.4-0.7,0.8-1.1,1.2c-19.1,19.1-50.2,19.1-69.3,0L239.9,505.9c-19.1-19.1-19.1-50.1,0-69.3c19.1-19.1,50.2-19.1,69.3,0l138.7,138.7L695,328.1c19.1-19.1,50.2-19.1,69.3,0c19.1,19.1,19.1,50.2,0,69.3L483.7,678L483.7,678zzpanel-successzrgb(227, 252, 239)u   Без иконки zpanel-hidden)r   r   r   r   )alarmerrorwarningnoteinfosuccessZhiddenc              	   O   st   t |tjstj|}t|j}t|j\}}t|jd}| 	|
 |j|| _W 5 Q R X |   |   | S )uX   
        Импортирование Word документа в систему
        rb)
isinstancemodelsZCmfAttachmentgetr   full_path_file	mimetypesZ
guess_typeopenZobj_to_htmlreadsuffix
text_draftsave
do_approve)selfZattachargskwargsZfile_objZmimetypeencodingf r1   (./modules/project/models/cmf_document.pyimport_mswordO   s    
 zCmfDocument.import_msword)namereturnc                 C   s   t d| }d}t| t| t|d  }||krd}t| ddkrX| dd }t|d }| d |dt|     d	t| d
 } |r|  d| } t	
d| d| d|   | S )Nu   [А-Яа-я]      r   .r      -   u0   Слишком длинное название. z > u   . Меняем на )refindalllensplitmathZfloorstripr   Zshort_str_encgdebug)r4   Z
rus_simbolZos_max_lengthZfile_name_lengthextZslice_lengthr1   r1   r2   _get_filename]   s    .zCmfDocument._get_filenameFc                    s    fdd rj jnj j}|d kr0dn|}jsB|d }|} rXjjnjj}|rv| d| S  rjjnjj}|r| d| S  rjjnjj}|rƈ| d| S td rdnd dj	 d	 d S )
Nc                    s>  t | tjr|  S t | tjr6| j dkr6|  S t | tjrX| j	 rXd| j
 S d| jkr| j   rx| jjn| jj}|r r| jjn| jj}|}| d| S d| jkr
| j   r| jjn| jj}|r
 r| jjn| jj}| d| S td rdnd d	| j d
j d | d S )Nhomez/Users/tree_parent/parentCan not calc old r   zdocument path for parent z of -: empty tree_parent, location_path and parent)r!   r"   
CmfProjectZproject_dirZ	CmfFolderZsys_typeloadZhome_dir	CmfPersonZ
user_localZloginfieldsrH   oldnewr4   rF   rJ   
ValueErrorid)nodeZtree_parent_r4   Zparent_rR   parent_pathr,   r1   r2   rX   q   s2    



$  z.CmfDocument._get_rfile_id.<locals>.parent_pathr   z.htmlrI   rK   rL   zdocument path for rM   )
r4   rR   rS   is_externalrF   rH   location_pathrJ   rT   rU   )r,   rR   r4   filenamerH   rZ   rJ   r1   rW   r2   _get_rfile_idn   s(    
 zCmfDocument._get_rfile_idc                 C   s   d S Nr1   r,   r1   r1   r2   _calc_parent   s    zCmfDocument._calc_parentc                 C   s   | j js| jr| jjsd S | j js(| jsr| j rH| j dg |  | _n*| jrdt| jjtjrdd | _| jsr| j	| _| jjr| jjdddgd | dg | j
rt| j
}|dkr|  }|D ]*}|jj| jjkrq| j|_|jdd	 qd S )
NrJ   	cmf_ownerZcmf_owner_assistantsZactivityrQ   
tree_nodesr   T)	only_data)rH   
is_changedrJ   load_fieldsZ_node_parentr!   valuer"   rN   r`   rb   r?   Zget_tree_nodes_recursiverU   r*   )r,   ZnlenZ	node_listrV   r1   r1   r2   Z__calc_parent   s4    
zCmfDocument.__calc_parentc                    s   t   ddg S )NrJ   rH   )supersave_preload_fieldsr^   	__class__r1   r2   rh      s    zCmfDocument.save_preload_fieldsc                    s   t   ddg S )Nr)   approved)rg   simple_perm_allow_fieldsr^   ri   r1   r2   rl      s    z$CmfDocument.simple_perm_allow_fieldsc                 C   s$   | j r| j jjdkrd S |   d S )NrN   )rJ   rf   
class_nameZ_check_simple_permr^   r1   r1   r2   check_simple_perm   s    zCmfDocument.check_simple_permc                 C   s   ddl m }m} |   td tjjd| dgdgd}|rn|j|j	d|j
j  d	 d
k rn|}| j|_ntj| jd| d}|  td | jrtd |   td d| _dS )uG   
        Сохраняем черновик в историю
        r   )datetimetimezonezHISTORY STARTFz-cmf_modified_atcmf_modified_at)rk   rJ   order_byrQ   )Ztz<      )textrk   rJ   zHISTORY ENDzCREATE APPROVE TASK STARTzCREATE APPROVE TASK ENDN)ro   rp   _process_text_draftrC   rD   r"   CmfDocumentHistoryr#   ZnowZutcrq   rf   Ztotal_secondsr)   ru   r*   need_approveZ_create_approve_taskrk   )r,   ro   rp   Zprev_historyhistoryr1   r1   r2   _process_draft_is_changed   s    
&



z%CmfDocument._process_draft_is_changedN)doc_versionc             	   O   s  |  dddddg | jrtj| jkr| jrptd tjj| | jj	j
d| t| jt| jdd	 td
 tj|  krtd td| jj ddd d S tjjdd| gddgdgd}|s| jsd S d|_|  |j| _| jj
}| j| _|   d| _|   t| j D ]}|  | j| q| jrptj| jkrptjj| | jj	j
d| || jj
d | j|ddd| d S )Nru   r)   rx   cmf_versionr`   zOWNERS PLACE NOTIFY STARTu8   Необходимо утвердить документ   obj	person_idr4   msgpriorityzOWNERS PLACE NOTIFY ENDu   Руководитель проекта не может Выпускать чужой документ, но Вы можете установить себя Владельцем и Выпуститьuj   Данный документ может выпустить только владелец                 u   ,                 ему отправлено уведомление об утверждении черновика. Документ сохранен как черновик.FabortrJ   ==rk   z-cmf_version)filterrQ   rr   Tu9   Выпущены изменения в документе)r   r   r4   r   r   )depthrc   )re   rx   rC   Zcurrent_personr`   rD   r"   	CmfNotifyplace_notifyrU   rf   Z	html_diffstrru   r)   Z
get_owners	cmf_alertr4   rw   r#   rk   r*   r|   signZ_delete_approve_tasklistZperson_viewsrO   deleteremove)r,   r{   r-   r.   ry   text_oldviewr1   r1   r2   r+      s\    

  
zCmfDocument.do_approve)history_versionc                O   s   |  dg tjjdd| jgdd|ggdgd}|s@tddd	 | jrb|j| _| j	|d
di|S |j| _| j	|d
di|}|
  |S dS )u   
        Восстанавливаем документ из DocumentHistory
        Принимаем cmf_version CmfDocumentHistory, который является версией draft или approved документа
        rx   	parent_idr   r|   ru   )r   rQ   u$   Не найдена DocumentHistory!Tr   r   r   N)re   r"   rw   r#   rU   r   rx   ru   r)   r*   r+   )r,   r   r-   r.   Zdoc_historyresr1   r1   r2   restore_version6  s    zCmfDocument.restore_version)	overwrite
no_versionc             	      s  |    | jjrtddd | jjr0tddd |rDtddd d S | jjrT|   | jstj	j
j }|  }||}|jr|j}|r|| jkrtjj|r|rtd| d|  d| j d	 n2td
| d| d|   td| j ddd |j}	|j| _|	j| _|	jdddd | jsZ|jsZ| jdd}
||
}|jrZ|| |jdddd | js|| jjr|  | j || |j!| jj"pddd | jj"|_|#d| j$ |#d| j$  t% j&||S )NuV   Нельзя менять approved напрямую, используйте do_approveTr   us   Нельзя менять текст напрямую, используйте text_draft вместе с do_approveuH   Метод устарел! Используйте update_inline_commentszOverwrite file for document z by ()u@   Файл с таким именем уже существует z, u!   Документ с именем u^    уже существует на этом уровне. Выберите другое имя.)is_direxist_okparents)rR   Fr   )backupZdocument_is_externalZdocument_is_internal)'_CmfDocument__calc_parentrk   rd   r   ru   r)   rz   Zcmf_deletedr"   CmfRFiledpdata_driverget_rdr\   	get_rfileexists
meta_tuuidrU   cmfrQ   ZCmfTUUIDZget_obj_by_tuuid_strrC   rD   r4   rJ   Z	file_pathrZ   ZcreateZis_newrenamer   _handle_mention_taskZ
write_textrf   Zmeta_set_flagrY   rg   r*   )r,   r   r   r-   r.   rdiskrfile_idrfiletuuidZrfile_parentZold_rfile_idZ	old_rfileri   r1   r2   r*   V  sV    
"


zCmfDocument.savec                 C   s   d S r]   r1   r^   r1   r1   r2   _calc_approved  s    zCmfDocument._calc_approvedc                    s   t  j|fd| ji|S )NZmsg_url)rg   create_eventhref)r,   Zevent_personr.   ri   r1   r2   r     s    zCmfDocument.create_eventc                    sd   | j ddddgd tjjj }|  }||}|jrV|j	}|rN|| j
krV|  t j||S )NrY   rJ   rH   rZ   ra   )re   r"   r   r   r   r   r\   r   r   r   rU   r   rg   )r,   r-   r.   r   r   r   r   ri   r1   r2   r     s    
zCmfDocument.delete)r5   c                 C   s4   | j ddgd | jr"| j|gkr0d| _|   dS )u    Убираем метку дерева у документа удалении узлов, при перемещении узлов rb   tree_node_is_branchra   FN)re   rb   r   r*   )r,   Zchildr1   r1   r2   tree_child_delete  s    zCmfDocument.tree_child_deletec                    s    |dkrdS t  j|f||S )N)ru   r)   rk   )rg   _get_field_log_level)r,   Z
field_namer-   r.   ri   r1   r2   r     s    z CmfDocument._get_field_log_levelc                    s.   t t| j|| | jjsd S | jr*d| _d S )NT)rg   r   _process_publicZ	is_publicrd   rx   r,   r-   r.   ri   r1   r2   r     s
    zCmfDocument._process_publicc                 O   s0   t jjdd| jgdddgddd ggdgdgd	S )
Nr   r   rk   TZapproved_versionz!=z-approved_versionru   )r   rr   rQ   )r"   rw   sgetrU   r   r1   r1   r2   get_approved_version  s    z CmfDocument.get_approved_versionc                 C   s   t tjjdd| jgdS )NZtree_parent_idr   )r   )boolr"   r   countrU   r^   r1   r1   r2   has_tree_nodes_hook  s    zCmfDocument.has_tree_nodes_hookc                 O   s|   ddl m} || jjpdd}t }|jdddidD ]}||d	  q6g | _|D ]"}tj	j
|d
}|rT| j| qTdS )un   
        Парсит документ, вытаскивает упомнинания на таски
        r   r   r   html.parserazdata-mention-typeZtaskattrszdata-object-idrU   N)bs4r   ru   rf   setfind_alladdZmention_tasksr"   ZCmfTaskr#   append)r,   r-   r.   r   Zbs_textZnew_taskitemZtskr1   r1   r2   r     s    z CmfDocument._handle_mention_taskc              	   C   s   d}d}|r.|j jr|j j}|j jrZ|j j}n,| jjs:d S | jjrJ| jj}| jjrZ| jj}t| |}t| |}|| D ]f}|jdkr|j	 
 D ] }tjj| |jj| jddd qq~|jdkr~tjj| |jj| jddd q~d S )Nr   ZCmfPersonGroupu/   Вас упомянули в документеr}   r~   rP   u,   Вас упомянули документе)ru   rR   rS   r)   rd   r   Z
parse_textrm   Z
rg_membersrO   
all_nestedr"   r   r   rU   rf   r4   )r,   Zcommentr   Ztext_newZobjs_oldZobjs_newr   Zpersonr1   r1   r2   handle_mention_persons  sB    



z"CmfDocument.handle_mention_personsc                 C   sH   | j d j|d< | j d j|d< | jf |}| j|d |  |jjS )u   Создание документа из шаблона
        :param self: Шаблон документа
        :param params: Параметры для шаблона
        :return: Идентификатор нового документа
        ru   rk   )rJ   )rQ   defaultZcreate_from_templateZcopy_attachmentsr+   rU   rf   )r,   paramsZnew_docr1   r1   r2   create_doc_from_template  s    z$CmfDocument.create_doc_from_templatec                 O   s   dd l }dd l}ddlm} ddlm} | dg |  }|tj	| }t
| jdd  d}	| d|	 }
|
 d	}d
| |	 }| jstddd |j|dd}| jD ]}||j||j q|  |||
 |S )Nr   r   )basenameattachments:r}   z.ziprI   Z_tmpfilesuP   Отсутствуют вложенные файлы для скачиванияTr   w)mode)zipfileshutilpathlibr   Zos.pathr   re   Zget_files_dirZconfigZ
UPLOAD_DIRr   rU   r@   r   r   ZipFilewriter$   closemove)r,   r-   r.   r   r   r   r   Zfile_dirZobj_dirzip_filenameZzip_file_pathZzip_file_path_tmpZreturn_pathZarcr   r1   r1   r2   download_all_attachment  s&    

z#CmfDocument.download_all_attachment)ru   r5   c                 C   s   d}d}t | d}|jtd| ddD ]b}|d dr@q,|j|d dd	 d
}|d |||d< d|d< |szq,|d dd	 |d< q,t|S )u=   
        Конверитуем оглавление
        #z#mcetoc_r   ^z.+)r   r   r}   Nr   TZcmf_convertedrU   )r   r   r=   compile
startswithfindreplacer   )ru   Zold_idZnew_idsouplinkZid_bodyr1   r1   r2   _convert_title-  s    
zCmfDocument._convert_titlec                 C   s`   t | d}|jddidD ]<}|jdddid}|d}|rD|jpH|j|_|| qt|S )uU   
        Конвертиуем тэги экранирования кода
        r   classcoder   prezlanguage-markup)r   r   new_tagr   contentsreplace_withr   )ru   r   tagr   Ztag_contentr1   r1   r2   _convert_codeA  s    

zCmfDocument._convert_codec                 C   s  t ddd}t| d}|jdtdidD ]}d|jd krFd	}nJd
|jd krZd}n6d|jd krnd}n"d|jd krd}ntd| |jdtdid}|||||j q.tt |d}|jdddidD ]$}|jddid}|d|||j qt |S )N)
panel_typec           	      S   s   |j dd| ddd}|j ddddd}|| |j dtjj|  d d}|| |j d	tjj|  d
 d}|| |j ddddd}|| ||_|| d S )Ndivzak-editor-panelfalse)r   zdata-panel-typecontentEditabler   zak-editor-panel__icon)r   r   r   pathr   zak-editor-panel__contenttrue)r   r   r"   r   
ICONS_DATAr   r   )	r   r   Zdoc_soupr   Z	panel_tagZpanel_tag_iconZsvg_tagZsvg_path_tagZpanel_tag_contentr1   r1   r2   _convert_macro_panelP  s$    






z?CmfDocument._convert_macro_panels.<locals>._convert_macro_panelr   r   z^confluence-information-macro$r   z!confluence-information-macro-noter   z(confluence-information-macro-informationr   z confluence-information-macro-tipr   z$confluence-information-macro-warningr   uO   Неизвестный тег для преобразования панели z.+bodyr   ZpanelZpanelContentr   )	r   r   r   r=   r   r   CmfErrorr   r   )ru   r   r   r   r   Zcontentr1   r1   r2   _convert_macro_panelsN  s&    
z!CmfDocument._convert_macro_panelsc           	      C   s   t | d}|jddidD ]}|jdddid}|jdddid}|jddd	id}|d
 || || |jddid}| j|j7  _|jddid}|jdddid}| j|j7  _|| || qt|S )Nr   r   zexpand-containerr   r   spoilerzspoiler-togglespanzspoiler-icon_zexpand-control-textzexpand-contentzspoiler-text)r   r   r   r   r   r   r   r   )	ru   r   r   r   Zspoiler_toggleZspoiler_iconZtag_control_textZtag_control_contentZspoiler_textr1   r1   r2   _convert_expanderw  s     




zCmfDocument._convert_expander)ru   r   r5   c                 C   sZ   t | d}|jddidD ]6}|jd|ddd}|d}|| || qt|S )	u   
        Конвертируем тег Отображение дочерних из Confluence в наш
        fixme удалить когда добавят поддежку тега из Confluence
        r   r   zchildpages-macror   r   r   )zdata-children-docsZcontenteditableul)r   r   r   r   r   r   )ru   r   r   r   Zdata_children_docsr   r1   r1   r2   _convert_childpages  s    



zCmfDocument._convert_childpages)ru   	object_idr5   c                 C   s   i }t t jdt jd|D ]:}t| }| }d| d}|||}|||< q| 	|}| 
|}| |}| |}| ||}|D ]}|||| }q|S )uG   
        Конвертируем модули из Confluence
        z(<svg\b[^<>]*>[\s\S]*?<\/svg>))flagsz	<div id="z"></div>)r=   r>   r   DOTALLhashlibmd5encodeZ	hexdigestr   r   r   r   r   r   )clsru   r   Zsvg_replacer   r   Zmd5sumkeyr1   r1   r2   confluence_convert  s    




zCmfDocument.confluence_convertc                 C   s&   | j jsd S | | j j| jj| _ d S r]   )r)   rd   r  rf   rU   r^   r1   r1   r2   rv     s    zCmfDocument._process_text_draftc                 C   s8   |  ddg d}t| jjtjs&d}d| d| j S )Nr   rJ   ZprojectZdeskrI   z
/Document/)re   r!   rJ   rf   r"   rN   r   )r,   Z
base_placer1   r1   r2   r     s
    zCmfDocument.href   Уведомлениеc                 O   s   d S r]   r1   )r,   ru   Znotify_namer-   r.   r1   r1   r2   all_place_notify  s    zCmfDocument.all_place_notifyc              
   C   s   | j r | j}| j}| j}| j}n | jj}| jj}| jj}| jj}| j}zptjj	|||||ddt
jdrlW dS tjj	|||||ddt
jdrW dS tjj	|||||ddt
jdrW dS W n< tjjk
r } zt
d|  W Y dS d}~X Y nX dS )u   
        Если любой из WEB-доступов открыт - возвращаем True
        Хак для быстрого отображения, что документ доступен из WEB
        r'   F)initial_acl_keyZobject_modelZobject_owner_idr   Zobject_parent_idZaccess_levelZraise_errorZchecking_personTz$DEV: _is_web_public ACL load Error: N)Zsimple_objectZperm_effective_acl_idr   cmf_owner_idrU   rf   rm   r"   ZCmfAccessListZcheck_accessrC   Zanonymous_userZsharelink_anonymous_userZtest_guest_userr   Z
base_errorr   rD   )r,   r  Zobj_parent_idr  Zself_idrm   er1   r1   r2   _is_web_public  s`    	         
zCmfDocument._is_web_publicu   Доступен из WEBT)ZcaptionZvirtualreadonlyc              
      s   |  ddddddddg tt jf d	|i|}| jrF|| j t| jjt	rj| jjrj|| jj | j
j|d
}|st| jjt	r| jj
j|d
}|| | jj|d
}|st| jjt	r| jjj|d
}|| t|S )N	executors
spectatorsr`   cmf_owner_assistantzparent.executorszparent.spectatorszparent.cmf_ownerzparent.cmf_owner_assistantrQ   ra   )re   r   rg   all_relation_personsr  r   r!   rJ   rf   r
   r  r   updater  r   )r,   rQ   r.   r   r  r  ri   r1   r2   r    s0          

z CmfDocument.all_relation_persons)F)N)r  )N)1__name__
__module____qualname__r   r3   staticmethodr   rF   r\   r_   r   rh   rl   rn   rz   r+   r   r*   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr  rv   propertyr   r  r	  r   rQ   ZFieldZCmfBoolZis_web_publicr  __classcell__r1   r1   ri   r2   r      s   


    

		>
7&? =	
$(


7	r   )r   rA   r%   r   r   r   r   Z
cmf.fieldsr   Zcmf.includeZcmf.utilr   Z&common.models.cmf_plugin_convert_mixinr   Zmodules.project.fieldsr	   Zcommon.models.cmf_active_entityr
   r   r1   r1   r1   r2   <module>   s   