U
    Wd~                     @   sf  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dGd#d$ZdHd%d&ZdId'd(ZdJd)d*Zd+d, ZdKd-d.Z d/d0 Z!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,dS )Lu   
!!! Делаем идемпотентные инициализации:
    можно запускать много раз на Рабочей БД с ожидаемым результатом.
    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Z	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   s2   ddl m}  | jjdds.| jdddd  d S )Nr   r   globalr   u#   Глобальные правилаT)r   r   r   )r   r   ZCmfAccessListr   r   r   r   r   r   init_acl:   s    r)   c                  C   s0   ddl m} m} | j s,| j|jd  d S Nr   r   r   )r   )r   r   r   ZCmfGlobalSettingsr   r    r   r+   r   r   r   init_global_settings?   s    
r,   c                  C   s0   ddl m} m} | j s,| j|jd  d S r*   )r   r   r   ZCmfGlobalVarr   r    r   r+   r   r   r   init_global_varE   s    
r-   c               	   C   sx  ddl m}  tj }| j }|sH| jdddd||dd}|jdd |t_t	| | j
jd	d
dgd}|s| j
dddddd  | j
jd	d
dgd}|s| j
dddddd  | j
jd	d
dgd}|s| j
ddddd  | j
jd	d
dgd}|s| j
ddddd  | j
jd	d
dgd}|sD| j
ddddd  | j
jd	d
dgd}|st| j
ddddd  d S )Nr   r   z.CmfPerson:00000000-0000-0000-0000-000000000001Tu   СистемаuK   Это не реальный человек, это сама система)idr   r   textcmf_created_atZcmf_modified_atr#   r   r   ==ZAdminsfilterz3CmfPersonGroup:00000000-0000-0000-0000-000000000013u   Администраторы)r.   r   r   r/   r   Usersz3CmfPersonGroup:00000000-0000-0000-0000-000000000028u   ПользователиZSupportu1   Техническая поддержка Evateam)r   r   r/   r   ZGuestuJ   Зарегистрированные пользователи (гости)Z	ShareLinku-   Группа доступа по ссылкеZServiceDeskClientu*   Группа клиентов Service Desk)r   r   datetimenowr   r    r   r   Z_current_personr!   r$   r   )r   r6   r    Zadmins_groupZusers_groupZsupport_grpgrpr   r   r   init_system_usersK   st    

	  


 
 
 r8   c            	      C   s  ddl m} m}m} |  dtjd< 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   | 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}|"  | j*dddd d}|"  | j+|d|j,d }|"  | j)d!d"d#dd$}|"  | j-|d|j,d }|"  | 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   r<   r   mainu   Общий чатr4   )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})r>   r   Zext_urlr   ).r   r   r9   r:   Zflushdbosenvironr8   r)   r,   r-   r   ZdpZcommitgetcwdr   print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init_calendarscaffold_ui_formZCmfUnitr   ZCmfCurrencyZCmfChatGroupr$   Z
user_groupZ	executorsr%   Z	CmfPluginZCmfListZCmfPluginMailBoxr   ZCmfPluginSMSGate)	r   r9   r:   ZchatZuser_grprA   r?   Zmail_boxZsms_gater   r   r   init_system_data   s    




 rV   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=oldcodeTr0   r3   include_deletedorder_byr   status_typer/   r   )r   r   r   CmfStatusCoder   r   r   r^   r   r/   r   )r   dataZall_stZst_datastr   r   r   rJ      s(     


rJ   c                  C   s   ddl m}  t d }|D ]j}|d }|d }|d }| jjdd|ggdd	}|sZ|  }||_||_d|_|jdd
 t	||d qd S )Nr   r   workflowr   r   statusesr1   Tr3   r\   r   )rb   
status_key)
r   r   r   CmfWorkflowr   r   r   r   r   create_status)r   Zworkflow_data_listZworkflow_datar   r   rc   rb   r   r   r   rK      s$    
rK   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
activitiesrW   r   r1   rZ   Tr0   r[   r   r   )
r   r   r   itemsCmfActivityr   r   r   r   r   )r   r`   r   Zactivity_dataactivityr   r   r   rG     s"    
   
rG   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   r1   Tr0   r[   r   Zdemoclosedr   )
r   r   r   Z
CmfLicenser   r   r   statusZonboarding_statusr   )r   r`   Zall_licenseZlicense_datark   r   r   r   rF     s      

rF   Fc              	   C   sX  ddl m} t }|d }|D ]2}|jjddd|d gdd|dggd	d
gd}|sf| r^q| }|d |_|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 |_|jd	d d|kr|jjdd|d ggd}||_|jd	d qd S )Nr   r   
logic_typerW   r   rX   rY   oldnameTr0   r[   r   Fobj_code_prefixui_color#3f82d8r   aliasrj   r   cmf_model_namer   default_workflowr2   )r   r   r   CmfLogicTyper   r   r   rp   rq   r   rs   loadvaluelistextendsetri   Zfilter_activityrt   r   rf   ru   )only_updater   r`   Zall_ltZlt_dataltwfr   r   r   rL   +  sJ    
 





rL   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   rY   Tr2   )ZsoftdevZservicedeskz:defaultr   u   Системная r   rj   )
r   r   r   _create_scheme_wf_from_jsonri   ry   r   r   r.   rx   )r|   r   r`   Zall_swsw_dataZbase_scheme_wf_datarj   r   r   r   r   rM   R  s    
rM   c                 C   s   ddl m} |jjddd| d gdd| d ggddgd	}|sN|rFd S | }| d |_| d |_| d
 |_| d |_| d |_| d |_	| d |_
| d |_| d |_| d |_| d |_| d |_| d |_d|_|jdd | drt|| d  d S )Nr   r   rW   r   rY   r   Tr0   r[   default_task_workflowdefault_list_workflowdefault_epic_workflowdefault_subproject_workflowdefault_release_workflowdefault_sprint_workflowdefault_document_workflowdefault_subtask_workflowdefault_task_logic_typedefault_subtask_logic_typerj   r   rules)r   r   ZCmfSchemeWfr   r   r   r   r   r   r   r   r   r   r   r   r   rj   r   r   _create_scheme_wf_rules)r   r|   r   swr   r   r   r   e  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   rb   r   Zlogic_typesr   r1   target_workflowrn   r2   rt   )r   r   rn   rt   Tr   )r   r   rf   r   rv   ZCmfSchemeWfRuler   )
r   r   r|   r   Zruler~   rn   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   r1   Tr0   r[   r   single_choiceFr   )	r   r   r   CmfTagCategoryr   r   r   r   r   )r   r`   Zall_tag_categoriesZcat_datacatr   r   r   rH     s      

rH   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   tagsrW   r   rX   rY   ro   Tr0   r[   rs   )r\   r]   c                 S   s   g | ]}|  qS r   )casefold).0xr   r   r   
<listcomp>  s     z!scaffold_tags.<locals>.<listcomp>colorrr   r   r   )r   rj   r   )Znochecksyname)r   r   r   ZCmfTagr   ry   r   r   rx   rs   r   r   r   r   r   rz   r{   ri   rj   )
r|   r   r`   Zall_tagsZtag_datatagr   Zaltr   r   r   r   rI     s^    
 




rI   c              	   C   s  ddl m} i }g }t }|d | d }d}| D ]f\}}|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 |
_	|dd|
_
|d|
_||
_|d|
_| |
_d| jjkrd
|
_nd|
_|d dr*d
|
_t|
j|
jj|
j|
j|
j |
  |
jd
d |
||
j< |d }r6|D ]&}||d|
|d| d qvq6|D ]}||d |d< qd| jjkrt| d S )Nr   r   rc     r   r   rb   r1   status_codeTr0   r[   )r3   Zfieldsr/   r   z#666
next_alarm	card_namez.systemFZsd_r   transitionsr   to)r   fromr   rb   ztask.sd_)r   r   r   rh   r_   r   Z	CmfStatusordernor   r/   r   r   r   r   rb   r   rx   r   
startswithZallow_empty_transitionrE   r^   Z_calc_status_coder   r%   create_transitions)rb   re   r   rc   r   r`   Zstatuses_dataZorder_noZstatus_datar   rm   Ztransitions_list
transitionr   r   r   rg     sx     
	
rg   c              	   C   s   ddl m} | D ]}|jjdd|djggdd|dgd	d|d	ggd
dgd}|s|jj|d|dg|d|d	d q|d|_|jd
d qd S )Nr   r   status_fromINr   	status_tor1   r   rb   Tr0   r[   r   )r   r   r   rb   r   )r   r   ZCmfTransr   r.   Zcreater   r   )r   r   r   Ztransr   r   r   r   0  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   rO   F  s>    



rO   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   r1   Trd   zadd obj relation_type r   out_type_namein_type_nameZ	type_auto)r   r   r   ZCmfRelationTyper   rE   r   r   r   r   Zchoice_typer   r   )r   Zrelation_type_datadata_objr   r   r   r   rN   q  s    





rN   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.agiler2   u   Фильтры)r   r@   )r   r@   tree_parentu   Фильтр 1u   Фильтр 2)r   u   Отчеты)r   r@   r   report_typeN)r   r   ZCmfTaskReportr   choicesZ
CmfProjectry   Z	CmfFolderr   r   ZCmfTaskFilterr%   r   rx   )r   r   Z	filter_ltZprojectsZprojectZfilter_folderZfoundedZaddedfiltersfitemZ
new_filterZreport_folderZreportsZreportZ
new_reportr   r   r   rP     sd    
  

rP   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 ]r} jjdd|d gdd}|sVtd|d     }|d |_|d	 |_|d
 |_|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}|sN j||d}|dd }|shg |_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   r1   Trd   z!add obj CmfProjectPermPermission r   categoryr/   Zproject_perm_schemezadd obj CmfProjectPermScheme r   r   project_permissionr   )r@   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   rE   r   r   r   r/   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_dataZschemeZscheme_rule_dataZscheme_ruler   r   r   r   rR     sZ    










rR   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   r1   Trd   zadd obj CmfProjectRole r   r   r/   r   )
r   r   r   r   r   rE   r   r/   r   r   )r   Zproject_roles_datar   Zroler   r   r   rQ     s    


rQ   c                  C   s   ddl m}  t d }|D ]`}|d }|d }|d }| jjdd|gd}|sV|  }||_||_||_d	|_|j	d	d
 qd S )Nr   r   ui_formr   r   ui_form_jsonr1   r2   Tr   )
r   r   r   Z	CmfUiFormr   r   r   r   r   r   )r   Zui_form_listZui_form_itemr   r   r   r   r   r   r   rU     s    
rU   c                  C   sR   ddl m}  | jjdddgd}|s0| jdd}d|_d|_d	|_|jd	d
 d S )Nr   r   r   r1   zfulltime:defaultr2   r   u   24/7 календарьTr   )r   r   CmfCalendarr   r   r   r   r   )r   Zfulltime_calr   r   r   rS   +  s    rS   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   rT   5  s    rT   )F)F)F)F)F)-__doc__r5   r	   rB   copyr   Zyamlr   Zflaskr   Zcmfr   Z
CMF_FOLDERr   r   r!   r"   r'   r)   r,   r-   r8   rV   rJ   rK   rG   rF   rL   rM   r   r   rH   rI   rg   r   rO   rN   rP   r   r   rR   rQ   rU   rS   rT   r   r   r   r   <module>   sP   4`
'

 

/K+E7
