U
    /el                     @   s  d Z ddlZddlZddlZddlm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d$d% ZdWd'd(ZdXd)d*ZdYd+d,ZdZd-d.Z d/d0 Z!d[d1d2Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIdJ Z.dKdL Z/dMdN Z0dOdP Z1dQdR Z2dSdT Z3dUdV Z4dS )\u   
!!! Делаем идемпотентные инициализации:
    можно запускать много раз на Рабочей БД с ожидаемым результатом.
    N)deepcopy)tqdm)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_acl:   s    r,   c                  C   s4   ddl m} m} | j s0| j|jdjdd d S )Nr   r   r   r   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_varE   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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#}|s$| j
d"dd$d%jdd d&d'd(gd)d*d+gd,d-d.gd/d0d1gd2d3d gd4d5d6gd7d8d9gd:d;d<gd=d>d?gd@dAdBgdCdDdEgdFdGdHgdIdJdKgdLdMd gdNdOd gfD ]~\}	}
}| jjd
d|	gd}|s|r| jjd
d|gd}|s| j|	dP}|	|_d|_d|_|
|_dQ|_|jddd	 qd S )RNr   r   z.CmfPerson:00000000-0000-0000-0000-000000000001Tu   СистемаuK   Это не реальный человек, это сама система)idr   r   textcmf_created_atZcmf_modified_atr$   F)r   r+   r   ==ZAdminsfilterz3CmfPersonGroup:00000000-0000-0000-0000-000000000013u   Администраторы)r2   r   r   r3   r   r*   Usersz3CmfPersonGroup:00000000-0000-0000-0000-000000000028u   ПользователиZProjectAdminsu-   Администраторы проектов)r   r   r3   r   ZIBAdminsu5   Администраторы безопасностиZSupportu1   Техническая поддержка EvateamZGuestuJ   Зарегистрированные пользователи (гости)Z	ShareLinku-   Группа доступа по ссылкеZServiceDeskClientu*   Группа клиентов Service DeskZAllowInvite)r   r   up   Группа которой разрешено приглашать пользователей в систему)r   r   r   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   r   Z
cmf_hiddenr   r   r3   )r   rD   r!   Zadmins_groupZusers_groupZproject_admin_groupZib_admins_groupZsupport_grpgrpZvar_user_codeZvar_user_nameZvar_user_old_codeuserr   r   r   init_system_usersK   s    

	     rG   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    rL   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   TrH   rJ   r   )r   r   r   ZCmfBusinessSectorr   r    )r   rK   Zall_bsZbs_databsr   r   r   init_business_sectors   s    rN   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&  | j'd
ddddd(  | j)ddddddd(  | j*dddd}| j+, }|j-.| |(  | j/dddddd}|(  | j0dddd d}|(  | j1|d|j2d }|(  | j/d!d"d#dd$}|(  | j3|d|j2d }|(  t4  | 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)r2   r   r   
short_namer   z0CmfCurrency:00000000-0000-0000-0000-000000000030u
   рублиu   рубZ643)r2   r   r   rR   r   mainu   Общий чатr8   )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})rT   r   Zext_urlr   )5r   r   rO   rP   ZflushdbosenvironrG   r,   r0   r1   rL   rN   r   dpcommitgetcwdr   printscaffold_event_typescaffold_project_notify_schemescaffold_license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_schemesZCmfUnitr    ZCmfCurrencyZCmfChatGroupr%   Z
user_groupZ	executorsr&   Z	CmfPluginZCmfListZCmfPluginMailBoxr   ZCmfPluginSMSGateinit_synonyms)	r   rO   rP   ZchatZuser_grprW   rU   Zmail_boxZsms_gater   r   r   init_system_data   s    
	



 rs   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 |_|d |_|d |_d	|_|dd |_	|j
d	d qd S )Nr   r   Zstatus_codesORr   ILIKE=oldcodeTr4   r7   rI   order_byr   status_typer3   r   )r   r   r   CmfStatusCoder   r   r   rz   r   r3   r    )r   rK   Zall_stZst_datastr   r   r   rd   9  s(     


rd   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   statusesr5   Tr7   rI   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   re   N  s,    
re   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
activitiesrt   r   r5   rw   Tr4   rx   r   r   )
r   r   r   itemsCmfActivityr   r   r   r   r    )r   rK   r   Zactivity_dataactivityr   r   r   ra   g  s"    
   
ra   c                  C   s~   ddl m}  t }|d }|D ]Z}| jjdd|d gddgd}|sL|  }|d	 |_|d |_d
|_d|_|j	dd qd S )Nr   r   licenser   r5   Tr4   rx   r   Zdemoclosedr   )
r   r   r   Z
CmfLicenser   r   r   statusZonboarding_statusr    )r   rK   Zall_licenseZlicense_datar   r   r   r   r`   w  s      

r`   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   rv   Tr4   rx   r   obj_code_prefixui_color#3f82d8aliasr   r   cmf_model_namedefault_workflowr6   r   )r   r   r   CmfLogicTyper   r   r   r   r   r   r   loadvaluelistextendsetr   Zfilter_activityr   r   r   r    )only_updater   rK   Zall_ltZlt_dataltwfr   r   r   rf     sD    
 






rf   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   rv   Tr6   )ZsoftdevZservicedesk:defaultr   u   Системная r   r   )
r   r   r   _create_scheme_wf_from_jsonr   r   r   r   r2   r   )r   r   rK   Zall_swsw_dataZbase_scheme_wf_datar   r   r   r   r   rg     s    
rg   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   r5   Trt   r   rv   r   r4   rx   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   Zlogic_typesr   r5   target_workflowr   r6   r   )r   r   r   r   Tr   )r   r   r   r   r   ZCmfSchemeWfRuler    )
r   r   r   r   ruler   r   r   Zscheme_wf_ruleZ	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   r5   Tr4   rx   r   single_choiceFr   )	r   r   r   CmfTagCategoryr   r   r   r   r    )r   rK   Zall_tag_categoriesZcat_datacatr   r   r   rb     s      

rb   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   tagsrt   r   ru   rv   ZoldnameTr4   rx   r   )rI   ry   c                 S   s   g | ]}|  qS r   )casefold).0xr   r   r   
<listcomp>+  s     z!scaffold_tags.<locals>.<listcomp>colorr   r   r   rJ   r   r   )Znochecksyname)r   r   r   ZCmfTagr   r   r   r   r   r   r   r   r   r    r   r   r   r   r   )
r   r   rK   Zall_tagsZtag_datatagr   Zaltr   r   r   r   rc     s^    
 




rc   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}	|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rPd|
_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| qd|_|jdd d|
i||
j< qVg }| D ]f\}}g }|d D ]}||| d  qX|||d!|||d" d | |d#dd$ qB|rt|}|d% }r|j D ].}|jr||j d }
||
_!|
jdd q|d& }rD|j D ].}|jr||j d }
||
_"|
jdd q|d' }r|j D ]&}||j d }
||
_#|
jdd qZd S )(Nr   r   r~   transitions  r   r   r}   r5   status_codeTr4   rx   )r7   fieldsordernor3   r   z#666
next_alarmneed_approve	card_namez.systemFallow_empty_transitionr   Zag_required_signsZcustom)required_signsr   rV      Zag_approvers_codesr   from
trans_typetotrans_sdesk_portal_allow)r   r   r   r   r}   r   trans_approvedtrans_rejectedtrans_updated)$r   r   r   r   r{   r   Z	CmfStatusr   r   r3   r   r   r   r   r   r}   r   r   r   r   r]   rz   Z_calc_status_coder    ZCmfApproveGroupr   Zmin_approversrV   r   Z	approversr&   create_transitionsstatus_fromr   r   r   )r}   r   r   r~   Ztransitions_datarK   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   H  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< q|S )Nr   r   r   INr   	status_tor5   r   r}   Tr4   rx   r   r   r   )
r   r   ZCmfTransr   r   r   r   r}   r   r    )r   r   resultZ
transitionr   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   ri     s>    



ri   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   r5   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   rh     s    





rh   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.agiler6   u   Фильтры)r   rV   )r   rV   tree_parentu   Фильтр 1u   Фильтр 2)r   u   Отчеты)r   rV   r   report_typeN)r   r   ZCmfTaskReportr   choicesZ
CmfProjectr   Z	CmfFolderr   r    CmfTaskFilterr&   r   r   )r   r   Z	filter_ltZprojectsZprojectZfilter_folderZfoundedZaddedfiltersfr   Z
new_filterZreport_folderZreportsZreportZ
new_reportr   r   r   rj   #  sd    
  

rj   c                   C   s   d S r   r   r   r   r   r   scaffold_task_filterh  s    r   c                   C   s   d S r   r   r   r   r   r   scaffold_task_reportl  s    r   c                     s$  ddl m  t d } | D ]v} jjdd|d gdd}|sVtd|d     }|d |_|d	 |_|d
 |_|d |_	d|_
|jdd qt d }|D ]|} jjdd|d gdd}|std|d     }|d |_|d	 |_|d |_	d|_
|jdd |d D ]} jj|d d} jj||d}|sR j||d}|dd }|slg |_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|_
|  qqd S )!Nr   r   Zproject_perm_permissionr   r5   Tr   z!add obj CmfProjectPermPermission r   categoryr3   r   Zproject_perm_schemezadd obj CmfProjectPermScheme r   project_permissionr   )rV   r   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)r   r   r   ZCmfProjectPermPermissionr   r]   r   r   r   r3   r   r    ZCmfProjectPermSchemeZCmfProjectPermSchemeRuler   r   r   r   r   r   r   r   r   r   r   )Zproject_perm_permission_datar   ZpermZproject_perm_scheme_dataschemeZscheme_rule_dataZscheme_ruler   r   r   r   rl   p  sZ    









rl   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   r5   Tr   zadd obj CmfProjectRole r   r   r3   r   )
r   r   r   r   r   r]   r   r3   r   r    )r   Zproject_roles_datar   Zroler   r   r   rk     s    


rk   c                  C   s   ddl m}  t d }|D ]n}|d }|d }|d }|d }| jjdd|gd	}|s^|  }||_||_||_||_d
|_	|j
d
d qd S )Nr   r   ui_formr   r   r   ui_form_jsonr5   r6   Tr   )r   r   r   Z	CmfUiFormr   r   r   r   r   r   r    )r   Zui_form_listZui_form_itemr   r   r   r   r   r   r   r   rn     s     
rn   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   )rC   	timedeltatimer   calendarr   r5   r6   zAdd calendar r   
is_defaultFr   Tr   default_workweekzAdd default workweek z for calendar :Zweekdays	intervals	from_timeto_timez%H:%M   )Zhours<   z.workz	.intervalr   rT   )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)&rC   r   r   r   r   rD   Z
astimezoneZtzinfor   CmfCalendarr   r]   r   r   r   intZ	utcoffsetZtotal_secondstimezoner   r    ZCmfCalendarWorkWeekrV   splitr   	enumeratestrptimer&   setattrZCmfCalendarWorkWeekIntervalr   r   r   r   r   r   Zis_newZrecalc_calendar)rC   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   rm     s    












rm   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   r  r    r   r   r   r   init_calendar&  s    r  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   r5   zsystem:defaultr6   r   u*   Системная по умолчаниюTr   zsystem-readonly:defaultrV   r   u   Только чтение)r@   r?   r<   r;   r:   r9   rB   rA   )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   ro   .  sb    

ro   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   r5   Tr   zAdd obj CmfEventType r   r3   r   N)r   r   r   CmfEventTyper   r]   r   r   r3   r   r    )r   Zevent_type_datar  Zeventr   r   r   r^   o  s    



r^   c            
      C   s`  ddl m}  t d }|D ]>}| jjdd|d gdd}|sXt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 }	r*|j|	 qtd| qd|_	|d |_||_|
  qqdS )u   
    Добавляет стандартную схему уведомлений. Клиенты могут ее редактировать!
    r   r   Zproject_notify_schemer   r5   Tr   zAdd obj CmfProjectNotifyScheme r   r3   r   r   r  r   r  membersz/scaffold_project_notify_scheme Unknown member: 
model_typeN)r   r   r   ZCmfProjectNotifySchemer   r]   r   r   r3   r   r    r  ZCmfProjectNotifySchemeRuler   Znotify_membersr&   r%   	Exceptionr  r  )
r   Zproject_notify_scheme_dataobj_datar   Z	rule_datar  r   r  r'   Zperson_groupr   r   r   r_     sJ    





r_   c                  C   sv  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|  td| dddd}|j|dd|jd}g }|D ]}|d }	|d }
|
rt	|
}
nd }
|d }|
| j |	|||
|d |d dkr0d}| jjj || | jj  g }|d7 }q|rfd}| jjj || | jj  W 5 Q R X q`d S )Nr   r   rt   Z	dict_namerv   Z	ru_commonZru_itr6   u8   Error! Словарь синонимов не пуст: i'  r   u"   Загружаем словарь z/opt/eva-app/patch/cmf_synonym_z.dictr )newline;")Z	delimiterZ	quotecharZquotingr      )r2   wordsyns	dictinary	word_statr   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)
                     VALUES (:id, now(), now(), FALSE, FALSE, TRUE, 0, 0, :word, :syns, :dictinary, :word_stat, :orderno)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)
                 VALUES (:id, now(), now(), FALSE, FALSE, TRUE, 0, 0, :word, :syns, :dictinary, :word_stat, :orderno))r   r   csvZ
CmfSynonymr   r]   r   readerZQUOTE_MINIMALfloatr&   Zgen_idrZ   Zdata_driverZSessionZexecuter[   )r   r$  r   r"  r   Zcsvfiler%  valuesrowr   r#  r!  Zsqlr   r   r   rr     sN      

rr   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   r5   Tr   r   r   ubql2bqlr   N)
r   r   r   r   r   r   r)  r*  r   r    )r   Ztask_filter_scheme_datar  Ztask_fitlerr   r   r   rp     s    



rp   c                  C   s   ddl m}  t d }|D ]v}| jjdd|d gdd}|sL| j|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   r5   Tr   r   r   sd_name
home_titlecontent_background_colorcontent_text_colorr   sd_html_scheme)r   Zsd_default_schemeN)r   r   r   ZCmfHtmlSchemer   r   r,  r-  r.  r/  r   r    r/   r0  )r   Zhtml_scheme_datar  r+  Zglobal_settingsZ	sd_customr   r   r   rq     s$    





rq   )F)F)F)F)F)5__doc__rC   r	   rX   copyr   Zyamlr   Zflaskr   Zcmfr   Z
CMF_FOLDERr   r   r"   r#   r(   r,   r0   r1   rG   rL   rN   rs   rd   re   ra   r`   rf   rg   r   r   rb   rc   r   r   ri   rh   rj   r   r   rl   rk   rn   rm   r  ro   r^   r_   rr   rp   rq   r   r   r   r   <module>   sb   cq
)

"

/ +E7YA43