U
    ,'Yh'                    @   s  d Z 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m	Z	 e	j
 dZdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zdjd$d%Zdkd&d'Zdld(d)Zdmd*d+Zd,d- Zdnd.d/Zd0d1 Z d2d3 Z!d4d5d6d7Z"d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(dDdE Z)dFdG Z*dHdI Z+dJdK Z,dLdM Z-dNdO Z.dPdQ Z/dRdS Z0dTdU Z1dVdW Z2dXdY Z3dZd[ Z4d\d] Z5d^d_ Z6d`da Z7dbdc Z8ddde Z9dfdg Z:dhdi Z;dS )ou   
!!! Делаем идемпотентные инициализации:
    можно запускать много раз на Рабочей БД с ожидаемым результатом.
    N)Any)g)configz/contrib/system_data.jsonc               
   C   s.   t t} t|  W  5 Q R  S Q R X d S N)openSYSTEM_DATA_PATHjsonloadsread)fd r   ./cmf/system_data.pyget_data   s    
r   c              	   C   sB   ddl m} |jjdd}|r"|S |jdddd| | | djddS )	Nr   modelszanonymous@evateam.rucodeZ	anonymousTloginnamer   system	cmf_owner
cmf_authorcmf_modified_by	only_data)cmf.includer   	CmfPersongetsave)system_personr   Zanonr   r   r   create_anonymous_user   s         r!   c              	   C   s,   ddl m} |jdddd| | | djddS )Nr   r   zsharelink-anonymous@evateam.ruzsharelink-anonymousTr   r   )r   r   r   r   )r    r   r   r   r   create_sharelink_anonymous_user!   s         r"   c              
   C   sL   ddl m} |jdddd| | | dd}|j }|j| |jdd |S )	Nr   r   ztest-guest@evateam.ruz
test-guestTF)r   r   r   r   r   r   r   
user_localr   )r   r   r   CmfPersonGroupZguest_groupZrg_member_ofappendr   )r    r   personZguest_person_groupr   r   r   create_test_guest_user)   s         
r'   c                  C   s6   ddl m}  | jjdds2| jddddjdd	 d S )
Nr   r   globalr   u#   Глобальные правилаTr   r   r   Fnotify)r   r   ZCmfAccessListr   r   r   r   r   r   init_acl8   s    r,   c                  C   s6   ddl m} m} | j s2| jd|jdjdd d S )Nr   r   r   z6CmfGlobalSettings:00000000-0000-0000-0000-000000000001)idr   Fr*   )r   r   r   CmfGlobalSettingsr   r    r   r-   r   r   r   init_global_settings>   s    
 r0   c                  C   s0   ddl m} m} | j s,| j|jd  d S )Nr   r-   )r   )r   r   r   ZCmfGlobalVarr   r    r   r-   r   r   r   init_global_varF   s    
r1   c                  C   s  ddl m}  tj }| j }|sJ| jdddd||dd}|jddd	 |t_t	| | j
jd
ddgd}|s| j
ddddddjdd | j
jd
ddgd}|s| j
ddddddjdd | j
jd
ddgd}|s| j
dddddjdd}| j
jd
ddgd}|s&| j
dddddjdd}| j
jd
ddgd}|sZ| j
dddddjdd}|j  ||jkr|j| |jdd | j
jd
ddgd}|s| j
dddddjdd | j
jd
ddgd}	|	s| j
dd d ddjdd | j
jd
dd!gd}
|
s$| j
dd"d"d!djdd | j
jd
dd#gd}
|
sX| j
dd$d$d#djdd | j
jd
dd%gd}
|
s| j
dd&d&d%djdd | j
jd'dd(}
|
s| j
d'dd)d*jdd | j
jd+dd(}
|
s| j
d+dd,d*jdd | j
jd-dd(}
|
s<| j
d-dd.d*}
|
jdd | j
jd
ddgd|
_|
jdd | j
jd/dd(}
|
s| j
d/dd0d*}
|
jdd | j
jd
ddgd|
_|
jdd d1d2d3gd4d5d6gd7d8d9gd:d;d<gd=d>d gd?d@dAgdBdCdDgdEdFdGgdHdIdJgdKdLdMgdNdOdPgdQdRdSgdTdUdVgdWdXd gdYdZd gfD ]~\}}}| jjd
d|gd}|sJ|rJ| jjd
d|gd}|s\| j|d[}||_d|_d|_||_d\|_|jddd	 qd S )]Nr   r   z.CmfPerson:00000000-0000-0000-0000-000000000001Tu   СистемаuK   Это не реальный человек, это сама система)r.   r   r   textcmf_created_atZcmf_modified_atr#   F)r   r+   r   ==ZAdminsfilterz3CmfPersonGroup:00000000-0000-0000-0000-000000000013u   Администраторы)r.   r   r   r2   r   r*   Usersz3CmfPersonGroup:00000000-0000-0000-0000-000000000028u   ПользователиZProjectCreatorsu#   Создатели проектов)r   r   r2   r   ZProjectAdminsu-   Администраторы проектовZContactAdminsu9   Редакторы Компаний и Контактовr   ZIBAdminsu5   Администраторы безопасностиZSupportu1   Техническая поддержка EvateamZGuestuJ   Зарегистрированные пользователи (гости)Z	ShareLinku-   Группа доступа по ссылкеZServiceDeskClientu*   Группа клиентов Service DeskZAllowInvite)r   r   up   Группа которой разрешено приглашать пользователей в систему)r   r   r   ZCuratorsu   КураторыZSuAvailableuv   Группа которой разрешено переключаться на других пользователейZ	SuExcludeuZ   Пользователи на которых запрещено переключатьсяvar:responsibleu   var:ИсполнительvarResponsiblevar:executorsu   var:СоисполнителиvarExecutorsvar:spectatorsu   var:НаблюдателиvarSpectators	var:owneru   var:ВладелецvarOwnerzvar:owner_assistantsu-   var:Заместители владельцаzvar:project_owneru#   var:Владелец проектаZvarProjectOwnerzvar:project_owner_assistantsu<   var:Заместители владельца проектаZvarProjectOwnerAssistantsz
var:authoru   var:АвторZ	varAuthorvar:waiting_foru   var:Ждем ответаvarWaitingForzvar:component_owneru1   var:Руководитель компонентаZvarComponentOwnerzvar:current_useru+   var:Текущий пользовательZvarCurrentUserzvar:all_related_usersu6   var:Все связанные пользователиZvarAllRelatedUserszvar:followersu   var:Подпискиzvar:followerzvar:project_usersu,   var:Все участники проектаzvar:approversu   var:Утверждающиеr   uM   Шаблонный пользователь для автоматизации)r   r   datetimenowr   r    r   r   Z_current_personr!   r$   r   Z
rg_membersloadr%   listr   Z
cmf_hiddenr   r   r2   )r   rC   r    Zadmins_groupZusers_groupZproject_creators_groupZproject_admin_groupZcontact_admin_groupZib_admins_groupZsupport_grpgrpZvar_user_codeZvar_user_nameZvar_user_old_codeuserr   r   r   init_system_usersL   s:   

	  	
   rH   c                  C   s\   ddl m}  t }|d }|D ]8}| jj|d dd}|s| j|d d}|jdd qd S )	Nr   r   Zclient_jobsr   Tr   include_deletedr   r   )r   r   r   ZCmfClientJobr   r   )r   dataZall_cjZcj_dataZcjr   r   r   init_client_jobs   s    rM   c                  C   s\   ddl m}  t }|d }|D ]8}| jj|d dd}|s| j|d d}|jdd qd S )	Nr   r   Zbusiness_sectorsr   TrI   rK   r   )r   r   r   ZCmfBusinessSectorr   r   )r   rL   Zall_bsZbs_databsr   r   r   init_business_sectors   s    rO   c            	      C   s*  ddl m} m}m} |  dtjd< t  t  t	  t
  t  t  | jj  t dkrtjdstdt  d td	 d S t  t  t  t  t  t  t  t  t  t  t  t  t  t   t!  t"  t#  t$  t%  t&  t'  t(  t)  t*  t+  t,  | j-d
ddddd.  | j/ddddddd.  | j0dddd}| j12 }|j34| |.  | j5dddddd}|.  | j6dddd d}|.  | j7|d|j8d }|.  | j5d!d"d#dd$}|.  | j9|d|j8d }|.  t:  t;  | jj  d S )%Nr   )r   	CMF_CACHEcmfutil1ZNO_CACHEz/opt/eva-appZ
run_pytestz"Only CRM need a system data init, z	 skipped.z3If you thing it's wrong contact skype://carbon.olegz,CmfUnit:00000000-0000-0000-0000-000000000029Tu
   Штукиu   штZ796)r.   r   r   
short_namer   z0CmfCurrency:00000000-0000-0000-0000-000000000030u
   рублиu   рубZ643)r.   r   r   rS   r   mainu   Общий чатr7   r   r   r   Zmailu,   Локальный почтовый ящикzsmtp-sender.local.evacrm.ru:25F)typer   Zext_smtpr   Z
verify_sslfilter_is_noneu   Без списка)r   r   r   parent)pluginr   r   Zsmsgateu"   Локальный СМС шлюзzZhttp://smsgate.carbonsoft.ru/?login=000-000-000-000-001&pass=empty&tel={phone}&text={text})rV   r   Zext_urlr   )<r   r   rP   rQ   ZflushdbosenvironrH   r,   r0   r1   rM   rO   r   dpcommitgetcwdr   printscaffold_email_templatesscaffold_event_typescaffold_project_notify_schemescaffold_activitiesscaffold_tag_categoryscaffold_tagsscaffold_status_codesscaffold_workflowscaffold_logic_typescaffold_scheme_wfscaffold_relation_typescaffold_menu_tree_itemscaffold_filter_report_folderscaffold_project_rolescaffold_project_permscaffold_calendarscaffold_ui_formscaffold_security_levelsscaffold_task_filtersscaffold_html_schemesscaffold_assetsscaffold_task_resolution"scaffold_cust_field_config_schemesscaffold_maillistsscaffold_evagitscaffold_evagit_rolesZCmfUnitr   ZCmfCurrencyZCmfChatGroupr$   Z
user_groupZ	executorsr%   Z	CmfPluginZCmfListZCmfPluginMailBoxr   ZCmfPluginSMSGateinit_synonymsscaffold_company_portal)	r   rP   rQ   ZchatZuser_grprY   rW   Zmail_boxZsms_gater   r   r   init_system_data   s    




 r|   c               	   C   s   ddl m}  t }|d }t }|D ]}|d |ksBtd| ||d  | jjddd|d gdd|d	ggd
dgd}|s|  }|d |_|d |_	|d |_
d
|_|dd |_|jd
d q$d S )Nr   r   Zstatus_codesr   u0   Ошибка уникальности по code ORILIKE=oldcodeTr3   r6   rJ   order_byr   status_typer2   r   )r   r   r   rE   AssertionErrorr%   CmfStatusCoder   r   r   r   r   r2   r   )r   rL   Zall_stZ	processedZst_datastr   r   r   rf   x  s.     


rf   c                  C   s   ddl m}  t d }|D ]}|d }|d }|d }| jjdd|ggdd	}|rTq|  }||_||_|d
d|_|dd|_d|_	d|_
|jdd t||d qd S )Nr   r   workflowr   r   statusesr4   Tr6   rJ   publish_approved_onlyFpublish_by_owner_onlyr   )r   
status_key)r   r   r   CmfWorkflowr   r   r   r   r   Zsl_allow_quick_closing_tasksr   r   create_status)r   Zworkflow_data_listZworkflow_datar   r   r   r   r   r   r   rg     s,    
rg   c               	   C   s   ddl m}  t d }| D ]d\}}| jjddd|gdd|d ggdd	gd
}|s`|  }|d |_||_d|_|j	dd qd S )Nr   r   Z
activitiesr}   r   r4   r   Tr3   r   r   r   )
r   r   r   itemsCmfActivityr   r   r   r   r   )r   rL   r   Zactivity_dataactivityr   r   r   rc     s"    
   
rc   Fc                 C   s<  ddl m} t }|d }|D ]}|jjdd|d gddgd}|rHq|sT| }|d	 |_d|_|d
d |_|dd|_d|kr|d |_	|dr|j
  |j
jst |j
_|j
j|d  tt|j
|_
|jj|d d|_|d |_d|kr$|jjdd|d ggd}||_nd |_|jdd qd S )Nr   r   
logic_typer   r   Tr3   r   r   obj_code_prefixui_color#3f82d8aliasr   r   cmf_model_namedefault_workflowr5   r   )r   r   r   CmfLogicTyper   r   r   r   r   r   r   rD   valuerE   extendsetr   Zfilter_activityr   r   r   r   )only_updater   rL   Zall_ltZlt_dataltwfr   r   r   rh     sD    
 






rh   c                 C   s   ddl m} t }|d }|D ]}t|| d q|d d }|jjdddgdD ]L}|jd	kr`qP|j d
}||d< d|j |d< |jj	|d< t|| d qPd S )Nr   r   	scheme_wf)r   r   r   Tr5   )ZsoftdevZservicedesk:defaultr   u   Системная r   r   )
r   r   r   _create_scheme_wf_from_jsonr   rE   r   r   r.   r   )r   r   rL   Zall_swsw_dataZbase_scheme_wf_datar   r   r   r   r   ri     s    
ri   c                 C   s  ddl m} |jjdddgddd| d gd	d| d	 gggdd
gd}|rLd S | }| d	 |_| d |_| d |_| d |_| d |_| d |_	| d |_
| d |_| d |_| d |_| d |_| d |_| d |_| d |_d|_|jdd | drt|| d  d S )Nr   r   r   r4   Tr}   r   r   r   r3   r   default_task_workflowdefault_list_workflowdefault_epic_workflowdefault_subproject_workflowdefault_release_workflowdefault_sprint_workflowdefault_document_workflowdefault_document_approve_wfdefault_subtask_workflowdefault_task_logic_typedefault_subtask_logic_typer   r   rules)r   r   ZCmfSchemeWfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _create_scheme_wf_rules)r   r   r   swr   r   r   r     s>     













r   c           
      C   s   ddl m} |D ]}|jj|d d}|d D ]f}|jj|d}|jjdd| gdd|gd	d|ggd
}|s.| |||d d}	|jf |	}|jdd q.qd S )Nr   r   r   r   logic_typesr   r4   target_workflowr   r5   r   )r   r   r   r   Tr   )r   r   r   r   r   ZCmfSchemeWfRuler   )
r   r   r   r   ruler   r   r   Zscheme_wf_rule	rule_dictr   r   r   r     s&    r   c                  C   s   ddl m}  t }|d }|D ]d}| jjdd|d gddgd}|sL|  }|d |_d	|krh|d	 |_|d
d|_|jdd qd S )Nr   r   tag_categoryr   r4   Tr3   r   r   single_choiceFr   )	r   r   r   CmfTagCategoryr   r   r   r   r   )r   rL   Zall_tag_categoriesZcat_datacatr   r   r   rd   5  s      

rd   c           
   	   C   s  ddl m} t }|d }|D ]}|jjddd|d gdd|dggd	d
gd}|s|dr|dd k	r|jjd	d
gd}|dD ]P}|r q|D ]>}| |jj ks|j	r| dd |j	D kr|} qqq|s| rq| }|d |_|dd|_
d|kr|d |_d }	|drX|jj|d d}	|	sX|j|d d }	|	|_|dr|j	js~t |j	_|j	j|d  tt|j	|_	|jj|d d|_|jd	d qd S )Nr   r   tagsr}   r   r~   r   ZoldnameTr3   r   r   )rJ   r   c                 S   s   g | ]}|  qS r   )casefold).0xr   r   r   
<listcomp>Z  s     z!scaffold_tags.<locals>.<listcomp>colorr   r   r   rK   r   r   )Znochecksyname)r   r   r   ZCmfTagr   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   )
r   r   rL   Zall_tagsZtag_datatagr   Zaltr   r   r   r   re   H  s^    
 




re   c                 C   s  ddl m} i }i }t }|d | d }d|d | krJ|d | d }d}| D ]\}}|d7 }|jj|d d}	|	std|d  |jjd	d
| gdd
|	ggddgd}
|
s|jjdd
|	gd	d
d ggd	gd}
|
s| }
|d }r||
_n||
_|	|
_	|d |
_
|dd|
_|d|
_|d|
_||
_|d|
_| |
_d| jjkrfd|
_nd|
_|dd|
_t|
j|
jj|
j|
j|
j	 |
  |
jdd |
jr<|dd}|jj|d|
d}|s| }||_||_d|_|
|_|dg D ]&}|jj|d}|r|j| qd|_|jdd d |
i||
j< qVg }| D ]n\}}g }|d!D ]}||| d   qn|||d"|||d# d  | |d$d|d%d& qX|rt |}|d' }r|j!D ].}|jr||j d  }
||
_"|
jdd q|d( }rb|j!D ].}|jr2||j d  }
||
_#|
jdd q2|d) }r|j!D ]&}||j d  }
||
_$|
jdd qxd S )*Nr   r   r   transitions  r   r   u(   Не найден код статуса r   r4   status_codeTr3   r   )r6   fieldsordernor2   r   z#666
next_alarmneed_approve	card_namez.systemFallow_empty_transitionr   Zag_required_signsZcustom)required_signsr   rX      Zag_approvers_codesstatusfrom
trans_typetotrans_sdesk_portal_allowtransition_filters)r   r   r   r   r   r   r   trans_approvedtrans_rejectedtrans_updated)%r   r   r   r   r   r   r   Z	CmfStatusr   r   r2   r   r   r   r   r   r   r   r   r   r   r_   r   Z_calc_status_coder   ZCmfApproveGroupr   Zmin_approversrX   r   Z	approversr%   create_transitionsstatus_fromr   r   r   )r   r   r   r   Ztransitions_datarL   Zstatuses_dataZorder_noZstatus_datar   r   Zdata_order_nor   Zapp_grZapprover_codeZapproverr   Z	trans_keyZ
trans_dataZstatuses_listr   Zcreated_transitionstransitemr   r   r   r   w  s     
	




r   c              	   C   s   ddl m} i }| D ]}|jjdd|dgdd|dgd	d|d	ggd
dgd}|sb| }|d|_|d|_|d|_|d	|_d
|_|j	d
d |d}|r|D ]}|j
|d	|d qt| |||d< q|S )Nr   r   r   INr   	status_tor4   r   r   Tr3   r   r   r   r   )r   
transitionr   )r   r   ZCmfTransr   r   r   r   r   r   r   updatecreate_transition_filters)r   r   resultr   r   Ztrans_filters_datatrans_filterr   r   r   r     s:     
r   zlist[dict[str, Any]])transition_filters_datac              	   C   s   ddl m} | D ]v}|jjdd|dgdd|dgdd|dggdd}|sZ| }|d|_|d|_|d|_|  qd S )	Nr   r   r   r   r   r   Tr   )r   r   ZCmfTransFilterr   r   r   r   r   )r   r   Ztrans_filter_datar   r   r   r   r      s    	r   c                  C   s  ddl m}  | jjdd}|s*| jdd}| j}d|_|j d|_|j |_	|j
 |_|j d|_d|_d|_|jp||j|_|  | jjd	d}|s| jd	d}| j}d|_|j d|_|j |_	|j
 |_|j d|_d|_d|_|jp|j|_|  dS )
uj   
    Создаёт в MenuTreeItem пункты меню дерева
    Идемпотентная
    r   r   z
MNU-000001r   r   z:ClassNzCmfSaleMenuGroup:Classz
MNU-000002)r   r   ZCmfMenuTreeItemr   Z
CmfCompanyr   
class_nameZ	obj_id_idZui_nameZobj_ui_nameZ	ui_moduleZob_ui_moduleZobj_codeZ
obj_parentZtree_parent_idZverbose_name_pluralZverbose_namer   r   r   )r   ZcompanyZcompany_classr&   Zperson_classr   r   r   rk   5  s>    



rk   c                  C   s   ddl m}  t d }|D ]|}| jjdd|d gdd}|sVtd|d   |  }|d |_|d	 |_|d
 |_|d |_	|d |_
d|_|  qd S )Nr   r   relation_typer   r4   Tr   zadd obj relation_type r   out_type_namein_type_nameZ	type_auto)r   r   r   ZCmfRelationTyper   r_   r   r   r   r   Zchoice_typer   r   )r   Zrelation_type_datadata_objr   r   r   r   rj   `  s    





rj   c                  C   sX  ddl m}  | jjj}ddddgg}| jj|d}|D ]}| jjd|d	}|sh| jd||d
}|	  g }ddg}| j
j|d}|D ]}	||	jj q|D ]$}
|
|kr| j
|
||d
}|	  q| jjd|d	}|s| jd||d
}|	  g }| jj|d}|D ]}||j q|D ]2}
||
 |kr| j||
 |||
d}|	  qq6dS )u   
    Добавляет во все проекты с logic_type = ['project.base', 'project.agile']
    папки: Фильтры, Отчеты
    r   r   Zlogic_prefixr   zproject.basezproject.agiler5   u   Фильтрыr   rX   )r   rX   tree_parentu   Фильтр 1u   Фильтр 2)r   u   Отчеты)r   rX   r   report_typeN)r   r   ZCmfTaskReportr   choices
CmfProjectrE   	CmfFolderr   r   CmfBqlFilterr%   r   r   )r   r   Z	filter_ltZprojectsprojectZfilter_folderZfoundedZaddedfiltersfr   Z
new_filterZreport_folderZreportsZreportZ
new_reportr   r   r   rl   r  sd    
  

rl   c                   C   s   d S r   r   r   r   r   r   scaffold_task_filter  s    r   c                   C   s   d S r   r   r   r   r   r   scaffold_task_report  s    r   c            	   	      s  ddl m  t d } d}| D ]} jjdd|d gdd}|sZtd	|d     }|d |_|d
 |_|d |_|d |_	||_
|d7 }d|_|jdd qt d }|D ] } jjdd|d gdd}|std|d     }|d |_|d
 |_|d |_	|d |_
d|_|jdd |d D ]~} jj|d dgd} jj||d}|rxtd| d q2|s j||d}|dd }|sg |_n f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|_|j
|_
d|_|  q2qt d } | D ]} jjdd|d gddgd+} j  D ]} jj||dstd,| d-| d.|j!  d/|krDt"d0|d
  d1|d/ } j||d}|dd }|stg |_n fd2d|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|_|j
|_
|  qqd S )3Nr   r   Zproject_perm_permissionr   r   r4   Tr   z!add obj CmfProjectPermPermission r   categoryr2   r   Zproject_perm_schemezadd obj CmfProjectPermScheme r   r   project_permission)r   r   )rX   r   u   Правила uu    уже существуют и могут быть изменены пользователем, не трогаем.access_project_rolec                    s   g | ]} j j|d qS r   CmfProjectRoler   r   ir   r   r   r     s     z)scaffold_project_perm.<locals>.<listcomp>access_local_userFaccess_sdesk_clientaccess_owneraccess_owner_assistantaccess_authoraccess_project_owneraccess_responsibleaccess_anonymousaccess_guestaccess_sharelink_anonymousaccess_executorsaccess_spectatorsaccess_project_owner_assistantaccess_project_spectatorsaccess_project_executorsaccess_list_owner)r6   rJ   r   u-   Создаем проектное право u    в схеме  Zupdate_default_rulesu'   Для проектного права u    нужно добавить значения по-умолчанию, применяемые при обновлении к существующим схемам.c                    s   g | ]} j j|d qS r   r   r   r   r   r   r     s     )#r   r   r   ZCmfProjectPermPermissionr   r_   r   r   r   r2   r   r   r   ZCmfProjectPermSchemeZCmfProjectPermSchemeRuler   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  rE   r.   	Exception)	Zproject_perm_permission_datar   r   ZpermZproject_perm_scheme_dataschemeZscheme_rule_dataZscheme_ruler   r   r   r   rn     s    













rn   c                  C   s   ddl m}  t d }|D ]j}| jjdd|d gdd}|s^td|d   | j|d d	}|d
 |_|d |_d|_|j	dd qd S )Nr   r   Zproject_rolesr   r4   Tr   zadd obj CmfProjectRole r   r   r2   r   )
r   r   r   r   r   r_   r   r2   r   r   )r   Zproject_roles_datar   roler   r   r   rm   +  s    


rm   c               	   C   sN  ddl m}  t d }|D ]&}|d }|d }|d }|d }| jjdd|gd	}|s|  }||_||_||_d
|_|j	d
d |dt
 }|d D ]}	| jj|	d |d
d}
|
s
| j|	d |d
|	dd}
|	dr|	d |
_|	dr|	d |
_|
	  |	d D ]*}dd|gdd|
gg}|drX|dd }|dd|g n|dd|g | jj|d
ds|dr| j|dd d|dd idd}n| j|d}|
|_||_||	dg k|_||	dg k|_|d r| jj|d}||_||i d!r4||i d!|_|	  qqqt  d S )"Nr   r   ui_formr   r   r   ui_form_jsonr4   r5   Tr   	ui_fieldsZui_group_fields)r   rX   r   rV   )r   rX   r   rV   actionparamsr   rX   ui_form_groupzlink::r   linkr   )r   r  rV   rK   Zhidden_fieldsZhide_empty_fieldsZcf_ZrequiredChanged)r   r   r   	CmfUiFormr   r   r   r   r   r   dictZCmfUiFormGroupr  r  
startswithsplitr%   ZCmfUiFormFieldsgetr  rX   ZhiddenZ
hide_emptyZCmfCustField
cust_fieldZrequired_change_scaffold_ui_form_scheme)r   Zui_form_listZui_form_itemr   r   r   r  r  r  Zui_groupr  Z
field_nameZ_filterZui_form_fieldr  r   r   r   rp   ;  sl    

 


rp   c                  C   s   ddl m}  t d }|D ]x}| jj|d d}|s| j|d |d dd}|  |d	 D ]4}| jj|d
 d}| j|||d |d d  q\qd S )Nr   r   ui_form_schemer   r   r   TrU   r   r  r   r   )r  targetr   r   )r   r   r   ZCmfUiFormSchemer   r   r  ZCmfUiFormSchemeRule)r   Zui_form_scheme_listZui_form_scheme_dictr  r   r   r   r   r   r  w  s    
 r  c               
   C   sP  ddl m } m}m} ddlm} |   j}t d }|D ]}|j	j
dd|d gd}|std|d   |j	|d d	}|
d
d|_|d |_|d |_t| |  |_d|_|jdd |d }|jj
dd|d gd}	|	std|d  d|d   |j|d d	}	||	_|d |	_|d |	_d|	_g }
|d d}|d  D ] \}}d}t|
dg D ]\}}|
dd }|
dd }d}|r|r| |d}| |d}|dd| kr||dd7 }||  d }| }| }|d  d| d| d|||t||d d}|
| ||7 }qzd | }t|	| d!|d  t|	| d"| q\|	jdd |
D ]}|jj
dd|d gd}|std#|d  d$|d   |j|d d	}|	|_|d% |_|d |_|d |_ |d& |_!|d' |_"|jdd q|	|_#|jdd |j$r<|j%d(d) q<d S )*Nr   )rB   	timedeltatimer   calendarr   r4   r5   zAdd calendar r   
is_defaultFr   Tr   default_workweekzAdd default workweek z for calendar r  Zweekdays	intervals	from_timeto_timez%H:%M   )Zhours<   z.workz	.intervalr   rV   )r   day_weekr'  r(  interval_minutesinterval_typedayZ_typeZ_intervals_total_minuteszAdd work interval z for default workweek r+  r,  r-     )Z
back_years)&rB   r!  r"  r   r   rC   Z
astimezoneZtzinfor   CmfCalendarr   r_   r$  r   r   intZ	utcoffsetZtotal_secondstimezoner   r   ZCmfCalendarWorkWeekrX   r  r   	enumeratestrptimer%   setattrZCmfCalendarWorkWeekIntervalr+  r'  r(  r,  r-  r%  Zis_newZrecalc_calendar)rB   r!  r"  r   ZtzZcalendar_datar#  Zsystem_calendarZworkweek_dataZworkweekr&  Zworkweek_codeZweekday_numZday_dataZintervals_total_minutesr   intervalr'  r(  r,  Zinterval_datar.  Zwork_intervalr   r   r   ro     s    












ro   c                  C   s&   ddl m}  | jdddjdd d S )Nr   r   u#   Пример 9-5 календарьF)r   r   Tr   )r   r   r0  r   r   r   r   r   init_calendar  s    r7  c                  C   s  ddl m}  | jjdddgd}|s0| jdd}d|_d	|_|jd	d
 | jj|dd}|sj| j|dd}d	|_d|_|jd	d
 dD ]\}}| jj|d| dd}|s| jj|d| dd}|s| j|d| dd}| j	j|d}|s| j	j|d}||_
d| d|_|dkrd	nd|_|jd	d
 q| jj|dd}|sV| j|dd}d	|_d|_|jd	d
 dD ]\}}| jj|d| dd}|s| jj|d| dd}|s| j|d| dd}| j	j|d}|s| j	j|d}||_
d| d|_d|_|jd	d
 qrd S )Nr   r   r   r4   system:defaultr5   r   u*   Системная по умолчаниюTr   zsystem-readonly:defaultrX   r   u   Только чтение)r?   r>   r;   r:   r9   r8   rA   r@   )r=   r<   zsystem-readonly-r   r=   Fzsystem-private:defaultu   Приватный)r:  r;  r<  r=  zsystem-private-)r   r   ZCmfSecurityLevelSchemer   r   r   r   ZCmfSecurityLevelZCmfSecurityLevelRuler   access_memberr   Zaccess_readonly)r   r  levelZuser_code_old	user_coder   r>  r   r   r   rq     sb    

rq   c                  C   s   ddl m}  t d }|D ]l}| jjdd|d gdd}|sVtd|d   |  }|d |_|d	 |_|d
 |_d|_	|j
dd qdS )u+   
    Добавляет события
    r   r   
event_typer   r4   Tr   zAdd obj CmfEventType r   r2   r   N)r   r   r   CmfEventTyper   r_   r   r   r2   r   r   )r   Zevent_type_datarA  Zeventr   r   r   ra   '  s    



ra   c                  C   st  ddl m}  t d }| jjdd}|D ]D}| jjdd|d gdd	}|sftd
|d   |  }|d |_|d |_|d |_	d|_
|jdd |d D ]}| jj|d d}| jj||d d}|rq|s| j||d d}|dg D ]V}| jj|d }	r|j|	 q| jj|d }
r8|j|
 qtd| qd|_
|d |_||_||_|  qq(dS )u   
    Добавляет стандартную схему уведомлений. Клиенты могут ее редактировать!
    r   r   Zproject_notify_schemer8  r   r   r4   Tr   zAdd obj CmfProjectNotifyScheme r   r2   r   r   rA  r9  membersz/scaffold_project_notify_scheme Unknown member: 
model_typeN)r   r   r   CmfEmailTemplater   ZCmfProjectNotifySchemer_   r   r   r2   r   r   rB  ZCmfProjectNotifySchemeRuler   Znotify_membersr%   r$   r  rD  rA  Zemail_template)r   Zproject_notify_scheme_dataZdefault_templateobj_datar  Z	rule_datarA  r   r@  r&   Zperson_groupr   r   r   rb   =  sN    





rb   c                  C   sz  ddl m}  dd l}| jjddddgdddggdrLtd	| j   d S d}dd
gddgfD ]\}}td|  d}td| dddd}|j|dd|jd}g }|D ]}	|	d }
|	d }|rt	|}nd }|	d }|
| j |
||||| jjjd |d dkr8| jjj || | jj  g }|d7 }q|rj| jjj || | jj  W 5 Q R X q`d S )Nr   r   r}   Z	dict_namer   Z	ru_commonZru_itr5   u8   Error! Словарь синонимов не пуст: i'  r   u"   Загружаем словарь a  INSERT INTO cmf_synonym (
                    id, cmf_created_at, cmf_modified_at, cmf_deleted, cmf_archived, system,
                    stat_usage, stat_search, name, text, dict_name, stat_lang_usage, orderno,
                    import_original, is_favorite, has_tree_nodes, tree_node_is_branch,
                    tree_hidden, perm_public, perm_has_acl, perm_inherit, perm_encrypt, sl_owner_lock, full_search_type
                ) VALUES (
                    :id, now(), now(), FALSE, FALSE, TRUE, 0, 0, :word, :syns, :dictinary,
                    :word_stat, :orderno, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
                    FALSE, FALSE, FALSE, :full_search_type
                );z/opt/eva-app/patch/cmf_synonym_z.dictr )newline;")Z	delimiterZ	quotecharZquotingr      )r.   wordsyns	dictinary	word_statr   full_search_type)r   r   csvZ
CmfSynonymr   r_   r   readerZQUOTE_MINIMALfloatr%   Zgen_idrQ  defaultr\   Zdata_driverZSessionZexecuter]   )r   rR  r   rO  r   ZsqlZcsvfilerS  valuesrowrM  rP  rN  r   r   r   rz   t  sN     
 

rz   c                  C   s   ddl m}  t d }|D ]b}| jjdd|d gdd}|sL| j|d d}|d	 |_|d
 |_|d |_d|_|j	dd qdS )u   
    Добавляет системные фильтры задач. Их нельзя редактировать и удалять.
    r   r   Ztask_filterr   r4   Tr   r   r   Zubql2bqlr   N)
r   r   r   r   r   r   ZubqlrX  r   r   )r   Ztask_filter_scheme_datarF  Ztask_fitlerr   r   r   rr     s    



rr   c                  C   s   ddl m}  t d }|D ]}| jjdd|d gdd}|sL| j|d d}|d	 |_|d
 |_|d |_|d |_|d |_	|d |_
|d |_d|_|jdd q| jjdgd}|d s| jjdd}||_|  dS )uS   
    Создает HTML схему по-умолчанию для servicedesk
    r   r   html_schemer   r4   Tr   r   r   sd_namesd_reference_headsd_task_button
home_titlecontent_background_colorcontent_text_colorr   sd_html_scheme)r   Zsd_default_schemeN)r   r   r   ZCmfHtmlSchemer   r   rZ  r[  r\  r]  r^  r_  r   r   r/   r`  )r   Zhtml_scheme_datarF  rY  Zglobal_settingsZ	sd_customr   r   r   rs     s(    







rs   c            	   	   C   s6  ddl m}  t d }|D ]}| jj|d d}|sZ| j|d |d dd}|jdd	 |d
 D ]}| jj|d d d}|s| j|d d |d d dd}|jdd	 | jj||d}|s| j||dd}|jdd	 |d dg D ]@}| jj|d |dd}|s| j|d |d |d |d  qqbqd S )Nr   r   Zcust_field_conf_schemer   r   r   TrU   r   r   cust_field_confr)   )rX   ra  )rX   ra  r   r   )r   rX   rJ   captionplaceholder)r   rb  rc  rX   )	r   r   r   ZCmfCustFieldConfSchemer   r   ZCmfCustFieldConfZCmfCustFieldConfSchemeRuleZCmfCustFieldConfField)	r   Zcust_field_config_schemesr  Zcust_field_config_schemer   Zcust_field_configr   ZfieldZ
field_confr   r   r   rv     s<    


 rv   c                  C   s:  ddl m}  t d }|D ]}| jj|d d}|sT| j|d |d d}|  |d |_|d |_|jd	d
 | j	j|dd}| j	j|dd}| j	j|dd}|d D ]}| j
j|d |d}|s| 
 }||_||_|d |_|  d|kr|d D ]>}	| jj|	d ||d}
|
s2| j|	d ||d}
|
   qq|d D ]v}| j
j|d |d}|sx| j|d |d}d|kr| jj|d |d|_n||_| jj|d d|_|  qH|d D ]j}| jj|d d}|s| j|d}|d |_| jj|d |dg|_| jj|d |d|_|  qqd S )Nr   r   asset_schemesasset_code_prefix)re  r   )re  r   r   Tr   Zassets)rX   sys_typeasset_typesZ	locationsZasset_type_catsr   )r   rX   asset_type_catZ
asset_cats	asset_catr   r   rK   )rX   
asset_type)r   r   r   ZCmfAssetSchemer   Z_scaffold_assetsr   r   r   r   ZCmfAssetTypeCatrX   r   ZCmfAssetTypeZCmfAssetCatr   Zdefault_logic_typeZCmfAssetrg  ri  )r   rd  Zasset_schemer  Zassets_folderZasset_types_folderZlocations_folderZtype_catrh  Zobj_typerj  Za_catri  Z
asset_jsonZassetr   r   r   rt     sh    




 
 

rt   c                  C   s   ddl m}  | jjdddgdddggddr0d S t d	 }|D ]J}|  }|d |_|d
 |_|d |_|d |_|d |_	|j
dd q>d S )Nr   r   r   r   Tr   Zdoner   resolutionsr   r2   r$  r   )r   r   ZCmfResolutionr   r   r   r   r2   r   r$  r   )r   rk  Z
resolutionZnew_resolutionr   r   r   ru   ?  s     





ru   c                  C   sd   ddl m}  t d }|D ]D}| jj|d d}|sD| j|d d}|d |_|jdddd	 qd S )
Nr   r   
mail_listsr   r   rV   TF)r   emitr+   )r   r   r   ZCmfEmailListr   rV   r   )r   rl  Z	mail_listZnew_mail_listr   r   r   rw   O  s    

rw   c               	   C   s~   ddl m}  tjtjd}t|}| }W 5 Q R X | j	j
dd}|sV| j	dd}d|_d|_||_d|_|jdd	 d S )
Nr   r   z$cmf/templates/mail_notification.htmlr8  r   Tu   По умолчаниюz+[{{project_name}}] ({{code}}) {{msg_title}}r   )r   r   rZ   pathjoinr   PROJECT_DIRr   r
   rE  r   r   r   Ztmplt_body_htmlZtmplt_subjectr   )r   rn  r   Z
body_tmpltZdefault_email_templater   r   r   r`   Z  s    
r`   c               	   C   st   ddl m}  | jdddddd}|  tjtjd	}t	|}|
 }W 5 Q R X ||j_|j  |j  d S )
Nr   r   u   Портал компанииzproject.wiki:defaultsectionZWPCT)r   r   Zproject_typeZtask_code_prefixr$  z#cmf/templates/company_homepage.html)r   r   r   r   rZ   rn  ro  r   rp  r   r
   Zdescr_documentZ
text_draftZ
do_publish)r   r   rn  r   Zhomepager   r   r   r{   l  s    

r{   c                  C   s   ddl m}  | jjddd}|s4| jdddd }| jj|ddd	}|sb| j||dddd
 }| jjdddd}|s| jdddtjd }d S )Nr   r   Zapp_gitT)rf  r   u   Репозитории)r   rf  r   ZCmfEvagitGroup)r   rV   r   )r   rX   r   rV   r   Zevagit_sync)r   	hook_typer   )r   rr  r   Z
token_user)	r   r   r   r   r   ZCmfRegistryZ
CmfWebhookr   Zsystem_user)r   Zevagit_root_folderZevagit_reposZwebhookr   r   r   rx     s*    
rx   c                  C   sZ   ddl m}  t d }|D ]:}| jjdd|d gdd}|s| jf ddi| }qd S )	Nr   r   Zevagit_rolesr   r4   Tr   r   )r   r   r   ZCmfEvagitRoler   r   )r   Z
roles_dataZ	role_datar  r   r   r   ry     s    
ry   )F)F)F)F)F)<__doc__rB   r   rZ   typingr   Zflaskr   Zcmfr   Z
CMF_FOLDERr   r   r!   r"   r'   r,   r0   r1   rH   rM   rO   r|   rf   rg   rc   rh   ri   r   r   rd   re   r   r   r   rk   rj   rl   r   r   rn   rm   rp   r  ro   r7  rq   ra   rb   rz   rr   rs   rv   rt   ru   rw   r`   r{   rx   ry   r   r   r   r   <module>   st     
)

"

/ "+El<YA7<B