
    *`mh'                       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 Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd:dZd:dZd:dZd:dZd Zd:dZd Z d Z!d;d Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;dS )<u   
!!! Делаем идемпотентные инициализации:
    можно запускать много раз на Рабочей БД с ожидаемым результатом.
    N)Any)g)configz/contrib/system_data.jsonc                      t          t                    5 } t          j        |                                           cd d d            S # 1 swxY w Y   d S N)openSYSTEM_DATA_PATHjsonloadsread)fds    ./cmf/system_data.pyget_datar      s    			 %2z"''))$$% % % % % % % % % % % % % % % % % %s   &AAAc           	          ddl m} |j                            d          }|r|S |                    dddd| | |                               d          S )	Nr   modelszanonymous@evateam.rucode	anonymousTloginnamer   system	cmf_owner
cmf_authorcmf_modified_by	only_data)cmf.includer   	CmfPersongetsave)system_personr   anons      r   create_anonymous_userr%      s{    """"""%;<<D $;=S}Xe    dTd    c           	      n    ddl m} |                    dddd| | |                               d          S )Nr   r   zsharelink-anonymous@evateam.ruzsharelink-anonymousTr   r   )r   r   r    r"   )r#   r   s     r   create_sharelink_anonymous_userr(   !   sU    """""".5JQq}Xe    dTdr&   c           
          ddl m} |                    dddd| | | d          }|j                                        }|j                            |           |                    d           |S )	Nr   r   ztest-guest@evateam.ruz
test-guestTF)r   r   r   r   r   r   r   
user_localr   )r   r   r    CmfPersonGroupguest_grouprg_member_ofappendr"   )r#   r   personguest_person_groups       r   create_test_guest_userr1   )   s     #"""""%L?V}Xe   F
  .::<<
1222
KK$KMr&   c                      ddl m}  | j                            d          s.|                     ddd                              d	           d S d S )
Nr   r   globalr   u#   Глобальные правилаTr   r   r   Fnotify)r   r   CmfAccessListr!   r"   r   s    r   init_aclr8   8   sr    """"""###22 x(1V_cddiiqviwwwwwx xr&   c                      ddl m} m} | j                                        s2|                     d|j                                      d           d S d S )Nr   r   r   z6CmfGlobalSettings:00000000-0000-0000-0000-000000000001)idr   Fr5   )r   r   r   CmfGlobalSettingsr!   r#   r"   r:   s     r   init_global_settingsr=   >   s|    %%%%%%%%#'')) w  GSTSb 	! 	d 	ddhdhpudhdvdvdvdvdvw wr&   c                      ddl m} m} | j                                        s/|                     |j                                                   d S d S )Nr   r:   )r   )r   r   r   CmfGlobalVarr!   r#   r"   r:   s     r   init_global_varr@   F   sf    %%%%%%%%""$$ >ao66;;=====> >r&   c                     ddl m}  t          j                                        }| j                                        }|s3|                     dddd||d          }|                    dd	           |t          _        t          |           | j
                            g d
          }|s.| 
                    ddddd                              d           | j
                            g d          }|s.| 
                    ddddd                              d           | j
                            g d          }|s-| 
                    dddd                              d          }| j
                            g d          }|s-| 
                    dddd                              d          }| j
                            g d          }|s-| 
                    dddd                              d          }|j                                         ||j        vr0|j                            |           |                    d           | j
                            g d           }|s-| 
                    dd!d!d"                              d           | j
                            g d#          }	|	s-| 
                    dd$d$d%                              d           | j
                            g d&          }
|
s-| 
                    dd'd'd(                              d           | j
                            g d)          }
|
s-| 
                    dd*d*d+                              d           | j
                            g d,          }
|
s-| 
                    dd-d-d.                              d           | j
                            d/d0          }
|
s,| 
                    d/dd12                              d           | j
                            d3d0          }
|
s,| 
                    d3dd42                              d           | j
                            d5d0          }
|
sf| 
                    d5dd62          }
|
                    d           | j
                            g d
          |
_        |
                    d           | j
                            d7d0          }
|
sf| 
                    d7dd82          }
|
                    d           | j
                            g d
          |
_        |
                    d           g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGfD ]\  }}}| j                            dHdI|g          }|s |r| j                            dHdI|g          }|s|                     |J          }||_        d|_        d|_        ||_        dK|_        |                    dd	           d S )LNr   r   z.CmfPerson:00000000-0000-0000-0000-000000000001Tu   СистемаuK   Это не реальный человек, это сама система)r;   r   r   textcmf_created_atcmf_modified_atr*   F)r   r6   )r   ==Adminsfilterz3CmfPersonGroup:00000000-0000-0000-0000-000000000013rF   u   Администраторы)r;   r   r   rB   r   r5   )r   rE   Usersz3CmfPersonGroup:00000000-0000-0000-0000-000000000028u   ПользователиrI   )r   rE   ProjectCreatorsu#   Создатели проектовrJ   )r   r   rB   r   )r   rE   ProjectAdminsu-   Администраторы проектовrK   )r   rE   ContactAdminsu9   Редакторы Компаний и КонтактовrL   r   )r   rE   IBAdminsu5   Администраторы безопасностиrM   )r   rE   Supportu1   Техническая поддержка EvateamrN   )r   rE   GuestuJ   Зарегистрированные пользователи (гости)rO   )r   rE   	ShareLinku-   Группа доступа по ссылкеrP   )r   rE   ServiceDeskClientu*   Группа клиентов Service DeskrQ   AllowInvite)r   r   up   Группа которой разрешено приглашать пользователей в систему)r   r   r   Curatorsu   КураторыSuAvailableuv   Группа которой разрешено переключаться на других пользователей	SuExcludeuZ   Пользователи на которых запрещено переключаться)var:responsibleu   var:ИсполнительvarResponsible)var:executorsu   var:СоисполнителиvarExecutors)var:spectatorsu   var:НаблюдателиvarSpectators)	var:owneru   var:ВладелецvarOwner)zvar:owner_assistantsu-   var:Заместители владельцаN)zvar:project_owneru#   var:Владелец проектаvarProjectOwner)zvar:project_owner_assistantsu<   var:Заместители владельца проектаvarProjectOwnerAssistants)z
var:authoru   var:Автор	varAuthor)var:waiting_foru   var:Ждем ответаvarWaitingFor)zvar:component_owneru1   var:Руководитель компонентаvarComponentOwner)zvar:current_useru+   var:Текущий пользовательvarCurrentUser)zvar:all_related_usersu6   var:Все связанные пользователиvarAllRelatedUsers)zvar:followersu   var:Подпискиzvar:follower)zvar:project_usersu,   var:Все участники проектаN)zvar:approversu   var:УтверждающиеNr   rE   r   uM   Шаблонный пользователь для автоматизации)r   r   datetimenowr    r#   r"   r   _current_personr%   r+   r!   
rg_membersloadr.   listr   
cmf_hiddenr   r   rB   )r   rg   r#   admins_groupusers_groupproject_creators_groupproject_admin_groupcontact_admin_groupib_admins_groupsupport_grpgrpvar_user_codevar_user_namevar_user_old_codeusers                  r   init_system_usersry   L   sB   """"""




!
!C$2244M 
9((?!^ ) 
 
 	T%888%A-((((,,4L4L4L,MML t!V_c#+2PW_ 	 	a 	aaeaemraeasasas'++3J3J3J+KKK D++ 	 	
 	
 $e$


#266>_>_>_6``! !'!6!666"	 "7 "
 "

 $e$

 	 !/33;Z;Z;Z3[[ $33@@ 	 4 
 

 $e$

 	 !/33;Z;Z;Z3[[ $33LL 	 4 
 

 $e$

 	 "'')))%8%CCC&--.DEEE  4 000+//7Q7Q7Q/RRO BT0g#Z#- 	 	/ 	//3t5t/A/A/A'++3L3L3L+MMK DD	 	 	
 	

 $e$





#
#+B+B+B
#
C
CC RT0|#ov} 	 	 	 @D  @D  LQ  @D  @R  @R  @R


#
#+F+F+F
#
G
GC yT0_#RYd 	 	f 	ffjfjrwfjfxfxfx


#
#+N+N+N
#
O
OC ~T0\#OVi 	 	k 	kkokow|kok}k}k}


#
#t
#
D
DC K=  Ew  	x  	x  	}  	}  EJ  	}  	K  	K  	K


#
#D
#
A
AC h:dASTTYYafYggg


#
#t
#
D
DC ##t  KC#  D  D.33;S;S;S3TT 

#
#T
#
B
BC ##T  Ie#  f  f.33;S;S;S3TT
 	LKKKKKIII999WWWWWW 	F  	F  	F555IIIiii]]]qqqAAASSS???> 0 09'8" ##FD-+H#II 	R) 	R#''>O/P'QQD 	8###77D!	!	c			D	////70 0r&   c                      ddl m}  t                      }|d         }|D ]X}| j                            |d         d          }|s2|                     |d                   }|                    d           Yd S )	Nr   r   client_jobsr   Tr   include_deletedr   r   )r   r   r   CmfClientJobr!   r"   )r   dataall_cjcj_datacjs        r   init_client_jobsr      s    """"""::D- F $ $ $$'&/4$PP 	$$$'&/$::BGGdG###
Fr&   c                      ddl m}  t                      }|d         }|D ]X}| j                            |d         d          }|s2|                     |d                   }|                    d           Yd S )	Nr   r   business_sectorsr   Tr|   r~   r   )r   r   r   CmfBusinessSectorr!   r"   )r   r   all_bsbs_databss        r   init_business_sectorsr      s    """"""::D$%F $ $%))wvPT)UU 	$))wv)??BGGdG###
Fr&   c                     ddl m} m}m} |                                 dt
          j        d<   t                       t                       t                       t                       t                       t                       | j        j                                         t          j                    dk    rTt
          j                            d          s5t%          dt          j                     d           t%          d	           d S t'                       t)                       t+                       t-                       t/                       t1                       t3                       t5                       t7                       t9                       t;                       t=                       t?                       tA                       tC                       tE                       tG                       tI                       tK                       tM                       tO                       tQ                       tS                       tU                       tW                       tY                       | -                    d
dddd          .                                 | /                    dddddd          .                                 | 0                    ddd          }| j1        2                                }|j3        4                    |           |.                                 | 5                    ddddd          }|.                                 | 6                    dddd           }|.                                 | 7                    |d|j8                   }|.                                 | 5                    d!d"d#d$          }|.                                 | 9                    |d|j8                   }|.                                 tu                       tw                       | j        j                                         d S )%Nr   )r   	CMF_CACHEcmfutil1NO_CACHEz/opt/eva-app
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   шт796)r;   r   r   
short_namer   z0CmfCurrency:00000000-0000-0000-0000-000000000030u
   рублиu   руб643)r;   r   r   r   r   mainu   Общий чатrI   r   r   r   mailu,   Локальный почтовый ящикzsmtp-sender.local.evacrm.ru:25F)typer   ext_smtpr   
verify_sslfilter_is_noneu   Без списка)r   r   r   parent)pluginr   r   smsgateu"   Локальный СМС шлюзzZhttp://smsgate.carbonsoft.ru/?login=000-000-000-000-001&pass=empty&tel={phone}&text={text})r   r   ext_urlr   )<r   r   r   r   flushdbosenvironry   r8   r=   r@   r   r   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_rolesCmfUnitr"   CmfCurrencyCmfChatGroupr+   
user_group	executorsr.   	CmfPluginCmfListCmfPluginMailBoxr   CmfPluginSMSGateinit_synonymsscaffold_company_portal)	r   r   r   chatuser_grpr   r   mail_boxsms_gates	            r   init_system_datar      s-   6666666666 BJzJJJ
   	y{{n$$RZ^^L-I-I$I29;;IIIJJJCDDD  "$$$ OOO  !###          '(((   NN9    dfff
=    dfff$7gdSSD$//11HN(###IIKKK60^  jJ%)e  = =F
KKMMM ^^46FMbko^ppN&&fT&TTHMMOOO93W 'C%)  + +F KKMMM&&fT&TTHMMOOO OOO
     r&   c            
      2   ddl m}  t                      }|d         }t                      }|D ]}|d         |vsJ d|             |                    |d                    | j                            ddd|d         gdd|                    d	          ggd
dg          }|s|                                 }|d         |_        |d         |_        |d         |_	        d
|_
        |                    dd           |_        |                    d
           d S )Nr   r   status_codesr   u0   Ошибка уникальности по code ORILIKE=oldcodeTrC   rH   r}   order_byr   status_typerB   r   )r   r   r   rk   r.   CmfStatusCoder!   r   r   r   r   rB   r"   )r   r   all_st	processedst_datasts         r   r   r   x  sF   """"""::D.!FI    vi///1mdk1m1m///)))!%%dWgfo.S'++i001.
  +;*<	 & > >
  	(%%''B&/&/ /	++fd++
$
Fr&   c                     ddl m}  t                      d         }|D ]}|d         }|d         }|d         }| j                            dd|ggd	          }|r=|                                 }||_        ||_        |                    d
d          |_        |                    dd          |_        d|_	        d|_
        |                    d           t          ||           d S )Nr   r   workflowr   r   statusesrE   TrH   r}   publish_approved_onlyFpublish_by_owner_onlyr   )r   
status_key)r   r   r   CmfWorkflowr!   r   r   r   r   sl_allow_quick_closing_tasksr   r"   create_status)r   workflow_data_listworkflow_datar   r   r   r   s          r   r   r     s"   """"""!J/+ > >V$V$ ,%))T4 2
 * ! !  	%%'')6):):;RTY)Z)Z&)6):):;RTY)Z)Z&04-%%%xH=====%> >r&   c            
      r   ddl m}  t                      d         }|                                D ]\  }}| j                            ddd|gdd|                    d           ggdd	g
          }|s|                                 }|d         |_        ||_        d|_        |	                    d           d S )Nr   r   
activitiesr   r   rE   r   TrC   r   r   r   )
r   r   r   itemsCmfActivityr!   r   r   r   r"   )r   r   r   activity_dataactivitys        r   r   r     s    """"""::l#D#zz|| 	& 	&m%))64&-:K:KI:V:V7X(Y2
+;*< * > >  	,))++H%f-%%%%	& 	&r&   Fc                    ddl m} t                      }|d         }|D ]}|j                            dd|d         gddg          }|r-|s|                                }|d	         |_        d|_        |                    d
d           |_        |                    dd          |_        d|v r|d         |_	        |                    d          r|j
                                         |j
        j        st                      |j
        _        |j
        j                            |d                    t          t          |j
                            |_
        |j                            |d                   |_        |d         |_        d|v r-|j                            dd|d         gg          }||_        nd |_        |                    d           d S )Nr   r   
logic_typer   r   TrC   r   r   obj_code_prefixui_color#3f82d8aliasr   r   cmf_model_namedefault_workflowrG   r   )r   r   r   CmfLogicTyper!   r   r   r   r   r   r   rj   valuerk   extendsetr   filter_activityr   r   r   r"   )only_updater   r   all_ltlt_dataltwfs          r   r   r     s   """"""::D,F !  !  $$VS'&/,J+;*< % > > 	  	' $$&&B&/	$[[):DAAkk*i88WfoBG;;w 	+HMMOOO8> (!%HN!!''"2333CMM**BH#/339L3MM#$45((#''g&89:0'  B #%B"&B
$
Fr&   c                 R   ddl m} t                      }|d         }|D ]}t          ||            |d         d         }|j                            g d          D ]H}|j        dv r|j         d}||d	<   d
|j         |d<   |j        j	        |d<   t          ||            Id S )Nr   r   	scheme_wf)r   r   r   TrG   )softdevservicedesk:defaultr   u   Системная r   r   )
r   r   r   _create_scheme_wf_from_jsonr   rk   r   r   r;   r   )r   r   r   all_swsw_database_scheme_wf_datar   r   s           r   r   r     s    """"""::D+F F F#GEEEEE {+A.&++3H3H3H+II R R=666-)))&*F#&KHM&K&KF#*2+*;J'#$7[QQQQQ
Fr&   c           	         ddl m} |j                            g dddd| d         gdd| d         gggdd	g
          }|rd S |                                }| d         |_        | d         |_        | d         |_        | d         |_        | d         |_        | d         |_	        | d         |_
        | d         |_        | d         |_        | d         |_        | d         |_        | d         |_        | d         |_        | d         |_        d|_        |                    d           |                     d          rt)          || d                    d S d S )Nr   r   )r   rE   Tr   r   r   r   TrC   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   CmfSchemeWfr!   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r"   _create_scheme_wf_rules)r  r   r   sws       r   r	  r	    s   """"""				(>(>(>)--3S'&/,J-3S'&/,J)*(+
 (8'9 
  
; 
;B 
 					BfoBGfoBG&'>?B&'>?B&'>?B%,-J%KB"")*D"EB!()B!CB#*+F#GB %,-J%KB"")*D"EB!()B!CB$+,H$IB!*%BKBIGGdG{{7 6GG$4555556 6r&   c           	      \   ddl m} |D ]}|j                            |d                   }|d         D ]v}|j                            |          }|j                            dd| gdd|gd	d|gg
          }|s0| |||d         d}	 |j        di |	}|                    d           wd S )Nr   r   r   r   logic_typesr  rE   target_workflowr   rG   r   )r  r  r   r   Tr    )r   r   r   r!   r   CmfSchemeWfRuler"   )
r  r  r   r   ruler  r   r  scheme_wf_rule	rule_dicts
             r   r  r    s   """""" 4 4##j)9#::}- 	4 	4J$((j(99B#377 $	2&b1!4, 8  N " 4!*')"$&*+;&<	 	 "8!7!D!D)!D!D##d#333'	44 4r&   c                  `   ddl m}  t                      }|d         }|D ]}| j                            dd|d         gddg          }|s|                                 }|d         |_        d	|v r|d	         |_        |                    d
d          |_        |                    d           d S )Nr   r   tag_categoryr   rE   TrC   r   r   single_choiceFr   )	r   r   r   CmfTagCategoryr!   r   r   r'  r"   )r   r   all_tag_categoriescat_datacats        r   r   r   5  s    """"""::Dn-& 
! 
!#''hv>N/O8<HXGY ( [ [  	*''))CF#X'CH$LL%@@4    
Fr&   c           
      l   ddl m} t                      }|d         }|D ]}|j                            ddd|d         gdd|                    d          ggd	d
g          }|s|                    d          r|                    d          |j                            d	d
g          }|                    d          D ]o}|r nj|D ]f}|                                |j        j                                        k    s,|j	        r)|                                d |j	        D             v r|} ngp|s| r|                                }|d         |_        |                    dd          |_
        d|v r|d         |_        d }	|                    d          rQ|j                            |d                   }	|	s.|                    |d                                                   }	|	|_        |                    d          ro|j	        j        st                      |j	        _        |j	        j                            |d                    t          t!          |j	                            |_	        |j                            |d                   |_        |                    d	           d S )Nr   r   tagsr   r   r   r   oldnameTrC   r   r   )r}   r   c                 6    g | ]}|                                 S r   )casefold).0xs     r   
<listcomp>z!scaffold_tags.<locals>.<listcomp>Z  s     =\=\=\qajjll=\=\=\r&   colorr   r   r&  r~   r   r   )nochecksyname)r   r   r   CmfTagr!   rk   r0  r   r   r   r4  r   r(  r"   r&  r   r   r   r   )
r   r   r   all_tagstag_datatagr-  altr&  s
             r   r   r   H  s   """"""::DF|H &% &%m)/(6:J(K)/hll96M6M(N(* 15@P?Q	   S S
  	x||G,, 	g1F1F1R=%%dFVEW%XXDll7++ 	 	 E  AKKMMQV\-B-B-D-DDD ! E,.KKMM=\=\TUT[=\=\=\,\,\ 	" --//CF#LL)44	X'CH<<'' 	[!044(>:R4SSL [%44(>:R4SSXXZZ'<<   	-9? )"&&&	IO""8G#4555S^^,,CI)--8J3G-HHt$$$$
Fr&   c                 6
   ddl m} i }i }t                      }|d         |         d         }d|d         |         v r|d         |         d         }d}|                                D ]\  }}|dz  }|j                            |d                   }	|	sJ d|d                      |j                            d	d
| gdd
|	ggddg          }
|
s$|j                            dd
|	gg dgd	g          }
|
s|                                }
|                    d          x}r||
_        n||
_        |	|
_        |d         |
_	        |                    dd          |
_
        |                    d          |
_        |                    d          |
_        ||
_        |                    d          |
_        | |
_        d| j        j        v rd|
_        nd|
_        |                    dd          |
_        t)          |
j        |
j        j        |
j        |
j        |
j                   |
                                 |
                    d           |
j        r|                    dd          }|j                            |d|
          }|s|                                }||_        ||_        d|_        |
|_        |                    d g           D ]9}|j                            |          }|r|j                            |           :d|_        |                    d           d!|
i||
j        <   g }|                                D ]\  }}g }|                    d"          D ]#}|                    ||         d!                    $|                    ||                    d#          |||                    d$                   d!         | |                    d%d          |                    d&          d'           |rt?          |          }|                    d(          x}rA|j         D ]9}|j        r0||j                 d!         }
||
_!        |
                    d           :|                    d)          x}rA|j         D ]9}|j        r0||j                 d!         }
||
_"        |
                    d           :|                    d*          x}r<|j         D ]6}||j                 d!         }
||
_#        |
                    d           3d S d S d S )+Nr   r   r   transitions  r   r   u(   Не найден код статуса r   rE   status_codeTrC   r   )r   rE   N)rH   fieldsordernorB   r4  z#666
next_alarmneed_approve	card_namez.systemFallow_empty_transitionr   ag_required_signscustom)required_signsr   r      ag_approvers_codesstatusfrom
trans_typetotrans_sdesk_portal_allowtransition_filters)r   rM  rL  rN  r   rO  rP  trans_approvedtrans_rejectedtrans_updated)$r   r   r   r   r   r!   	CmfStatusrA  r?  rB   r4  rB  rC  r   rD  r   r   r   r   rE  r   r   _calc_status_coder"   CmfApproveGrouprH  min_approversr   r    	approversr.   create_transitionsstatus_fromrQ  rR  rS  )r   r   r   r   transitions_datar   statuses_dataorder_nostatus_datar?  rK  data_order_norH  app_grapprover_codeapproverr=  	trans_key
trans_datastatuses_listrZ  created_transitionstransitems                           r   r   r   w  s   """""" H::D$Z0<MZ(444
+J7FH#0#6#6#8#8 M3 M3
KD*..K4G.HH\\\{SYGZ\\\\\!%%x(D+..
  +;*< & > >
  	$%))k2(((2 "l * $ $F  	(%%''F'OOI666= 	&*FNN%FN( "&)"w77'OOL99)oon== &??;77"+++ FMM!FM(38PRV(W(W%NO K	
 	
 	
 	  """d###  	((__-@(KKN+//- 0  F
  2//11&FK"0F!!"F  FM!,1Er!J!J 6 6!+//]/CC 6$++H555FMKK$K''' "*6 2K!1!7!7!9!9  	:%>>&11 	B 	BK  +!6x!@AAAA$..66!:>>$//0: (27QSX(Y(Y",..1E"F"F
 
 	 	 	 	  ,0== (++,<===5 	0) 0 0$ 0%di0:F,1F)KK$K///'++,<===5 	0) 0 0$ 0%di0:F,1F)KK$K///'++O<<<5 	,) , ,!$),X6',$d++++), , 	, 	,, ,r&   c           
         ddl m} i }| D ]n}|j                            dd|                    d          gdd|                    d          gd	d|                    d	          ggd
dg          }|s|                                }|                    d          |_        |                    d          |_        |                    d          |_        |                    d	          |_        d
|_        |	                    d
           |                    d          }|r>|D ],}|
                    |                    d	          |           -t          |           |||                    d          <   p|S )Nr   r   rZ  INrL  	status_torE   rN  r   TrC   r   r   r   rP  )r   
transitionrM  )r   r   CmfTransr!   r   rZ  rk  r   r   r"   updatecreate_transition_filters)r=  r   resultrl  rg  trans_filters_datatrans_filters          r   rY  rY    s   """"""F! 5 5
##D*.."8"89$
t 4 45z~~j99:,
  +;*<	 $ > >  	&OO%%E>>&))
$..00"t,,!~~j11

T
"""'^^,@AA 	: 2  ##'^^J77$ $     &&8999/4z~~l++,,Mr&   transition_filters_datalist[dict[str, Any]]c           
         ddl m} | D ]}|j                            dd|                    d          gdd|                    d          gdd|                    d          ggd          }|s|                                }|                    d          |_        |                    d          |_        |                    d          |_        |                                 d S )	Nr   r   r   r   rl  r   Tr   )r   r   CmfTransFilterr!   r   rl  r   r"   )rs  r   trans_filter_datarr  s       r   ro  ro     s   """"""4  ,00S"3"7"7
"C"CDs$5$9$9,$G$GHs$5$9$9,$G$GH
 ! 1 
 
  	3!0022L 1 5 5j A A"3"7"7"E"E"3"7"7"E"E! r&   c                     ddl m}  | j                            d          }|s|                     d          }| j        }d|_        |j         d|_        |j         |_	        |j
         |_        |j         d|_        d|_        d|_        |j        p|j        |_        |                                 | j                            d	          }|s|                     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   CmfMenuTreeItemr!   
CmfCompanyrA  
class_name	obj_id_idui_nameobj_ui_name	ui_moduleob_ui_moduleobj_code
obj_parenttree_parent_idverbose_name_pluralverbose_namer   r"   r    )r   companycompany_classr/   person_classs        r   r   r   5  s   
 #"""""$((l(;;G 
(( ) 
 
 %MGO(3;;;G*24G+57G'2:::GG5G 4R8RGLLLNNN#''\'::F 
'' ( 
 
 #LFN&1999F(02F)35F%0888FOF4F2Ol6OFK
KKMMMMMr&   c                     ddl m}  t                      d         }|D ]}| j                            dd|d         gd          }|s,t          d|d                     |                                 }|d         |_        |d	         |_        |d
         |_        |d         |_	        |d         |_
        d|_        |                                 d S )Nr   r   relation_typer   rE   Tr   zadd obj relation_type r   out_type_namein_type_name	type_auto)r   r   r   CmfRelationTyper!   r   r   r   r  r  choice_typer   r"   )r   relation_type_datadata_objr  s       r   r   r   `  s    """"""!O4&  .2264RXIY:Zlp2qq 	5=8F+;==>>>"2244M%f-%f-&.&?#%-n%="$,[$9!# r&   c                     ddl m}  | j        j        j        }ddddgg}| j                            |          }|D ]}| j                            d|	          }|s,|                     d||
          }|	                                 g }ddg}| j
                            |          }|D ]!}	|                    |	j        j                   "|D ]2}
|
|vr,| 
                    |
||
          }|	                                 3| j                            d|	          }|s,|                     d||
          }|	                                 g }| j                            |          }|D ]}|                    |j                   |D ]?}
||
         |vr3|                     ||
         |||
          }|	                                 @dS )u   
    Добавляет во все проекты с logic_type = ['project.base', 'project.agile']
    папки: Фильтры, Отчеты
    r   r   logic_prefixrj  zproject.basezproject.agilerG   u   Фильтрыr   r   )r   r   tree_parentu   Фильтр 1u   Фильтр 2)r  u   Отчеты)r   r   r  report_typeN)r   r   CmfTaskReportr  choices
CmfProjectrk   	CmfFolderr!   r"   CmfBqlFilterr.   r   r   )r   r  	filter_ltprojectsprojectfilter_folderfoundedaddedfiltersfrh  
new_filterreport_folderreportsreport
new_reports                   r   r   r   r  sn    #"""""&2:K 	~?I  %%Y%77H 2" 2"(,,2B7,SS 	!",,%# -  M
     !#34%**}*EE 	) 	)ANN16<(((( 	" 	"D7""#00" - 1  

 !!!(,,.,QQ 	!",,## -  M
     &+++FF 	( 	(FNN6;'''' 		" 		"D4 //#11$T*" - $	 2  
 !!!		"S2" 2"r&   c                      d S r   r   r   r&   r   scaffold_task_filterr        Dr&   c                      d S r   r   r   r&   r   scaffold_task_reportr    r  r&   c            
        	 ddl m	 t                      d         } d}| D ]}	j                            dd|d         gd          }|s,t          d	|d                     	                                }|d         |_        |d
         |_        |d         |_        |d         |_	        ||_
        |dz  }d|_        |                    d           t                      d         }|D ],}	j                            dd|d         gd          }|s,t          d|d                     	                                }|d         |_        |d
         |_        |d         |_	        |d         |_
        d|_        |                    d           |d         D ]{}	j                            |d         dg          }	j                            ||          }|rt          d| d           X|s	                    ||          }|                    dd           }|sg |_        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          |_        |j
        |_
        d|_        |                                 }.t                      d         } | D ]}	j                            dd|d         gddg*          }	j                                         D ]|}	j                            ||          s\t          d+| d,| d-|j!                    d.|vrtE          d/|d
          d0          |d.         }	                    ||          }|                    dd           }|sg |_        n	fd1|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 S )2Nr   r   project_perm_permissionr>  r   rE   Tr   z!add obj CmfProjectPermPermission r   categoryrB   r   project_perm_schemezadd obj CmfProjectPermScheme rA  r  project_permission)r   r@  )r   r  u   Правила uu    уже существуют и могут быть изменены пользователем, не трогаем.access_project_rolec                 F    g | ]}j                             |           S r   CmfProjectRoler!   r1  ir   s     r   r3  z)scaffold_project_perm.<locals>.<listcomp>  s/    2r2r2rYZ63H3L3LRS3L3T3T2r2r2rr&   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)rH   r}   r@  u-   Создаем проектное право u    в схеме  update_default_rulesu'   Для проектного права u    нужно добавить значения по-умолчанию, применяемые при обновлении к существующим схемам.c                 F    g | ]}j                             |           S r  r  r  s     r   r3  z)scaffold_project_perm.<locals>.<listcomp>  s/    6v6v6v]^v7L7P7PVW7P7X7X6v6v6vr&   )#r   r   r   CmfProjectPermPermissionr!   r   r   r   r  rB   rA  r   r"   CmfProjectPermSchemeCmfProjectPermSchemeRuler  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rk   r;   	Exception)
project_perm_permission_datarA  r  permproject_perm_scheme_dataschemescheme_rule_datascheme_ruler  r   s
            @r   r   r     s   """"""#+::.G#H G0 " ".2264RXIY:Zlp2qq 	5Hhv6FHHIII2244DV$	V$	 ,V$	4		D	!!!!  (zz*?@, - -,00xPVGW8Xjn0oo 	3D(62BDDEEE0022Fv&v&v&!),d### ( 1 "	 "	266<LMa<blukv6wwD 9==V`d=eeK   k  k  k  k  l  l  l f$==V`d=ee"2"6"67Ld"S"S& s24//2r2r2r2r^q2r2r2r/,<,@,@ATV[,\,\K).>.B.BCXZ_.`.`K+'7';';NE'R'RK$1A1E1EF^`e1f1fK.(8(<(<_e(T(TK%/?/C/CDZ\a/b/bK,-=-A-ABVX]-^-^K*+;+?+?@RTY+Z+ZK('7';';NE'R'RK$5E5I5IJfhm5n5nK2+;+?+?@RTY+Z+ZK(,<,@,@ATV[,\,\K)9I9M9MNnpu9v9vK64D4H4HIdfk4l4lK13C3G3GHbdi3j3jK0,<,@,@ATV[,\,\K)"&,K!%KE"	J $,::.G#H 0 $# $#.2264RXIY:Zlp  {D  zE2  F  F16688 "	# "	#F266fY]6^^ !#odoo[aoodjdmooppp)99# %EhW]N^ %E %E %E F F F#+,B#C $==V`d=ee&6&:&:;PRV&W&W#* w68K336v6v6v6vbu6v6v6vK30@0D0DEXZ_0`0`-2B2F2FG\^c2d2d/+;+?+?PU+V+V(5E5I5IJbdi5j5j2,<,@,@RW,X,X)3C3G3GH^`e3f3f01A1E1EFZ\a1b1b./?/C/CDVX]/^/^,+;+?+?PU+V+V(9I9M9MNjlq9r9r6/?/C/CDVX]/^/^,0@0D0DEXZ_0`0`-=M=Q=QRrty=z=z:8H8L8LMhjo8p8p57G7K7KLfhm7n7n40@0D0DEXZ_0`0`-&*l#  """E"	#$# $#r&   c                  h   ddl m}  t                      d         }|D ]}| j                            dd|d         gd          }|s4t          d|d                     |                     |d         	          }|d
         |_        |d         |_        d|_        |	                    d           d S )Nr   r   project_rolesr   rE   Tr   zadd obj CmfProjectRole r   r   rB   r   )
r   r   r   r  r!   r   r   rB   r   r"   )r   project_roles_datar  roles       r   r   r   +  s    """"""!O4& " "$((x?O0Pbf(gg 	@>HV,<>>???((hv.>(??DV$	V$			D	!!!!" "r&   c            
         ddl m}  t                      d         }|D ]^}|d         }|d         }|d         }|d         }| j                            dd|g	          }|sF|                                 }||_        ||_        ||_        d
|_        |	                    d
           |                    dt                                }|d         D ]}	| j                            |	d         |d
          }
|
s|                     |	d         |d
|	                    d                    }
|	                    d          r|	d         |
_        |	                    d          r|	d         |
_        |
	                                 |	d         D ]}dd|gdd|
gg}|                    d          r4|                    d          d         }|                    dd|g           n|                    dd|g           | j                            |d
          sb|                    d          rM|                     |                    d          d         d|                    d          d         id          }n|                     |          }|
|_        ||_        ||	                    dg           v |_        ||	                    dg           v |_        |                    d           r"| j                            |          }||_        |                    |i                               d!          r.|                    |i                               d!          |_        |	                                 `t5                       d S )"Nr   r   ui_formr   r   r   ui_form_jsonrE   rG   Tr   	ui_fieldsui_group_fields)r   r   r   r   )r   r   r   r   actionparamsr@  r   ui_form_groupzlink::r   linkrI  )r   r  r   r~   hidden_fieldshide_empty_fieldscf_requiredChanged)r   r   r   	CmfUiFormr!   r   r   r   r   r"   dictCmfUiFormGroupr  r  
startswithsplitr.   CmfUiFormFieldsgetr  r   hidden
hide_emptyCmfCustField
cust_fieldrequired_change_scaffold_ui_form_scheme)r   ui_form_listui_form_itemr   r   r   r  r  r  ui_groupr  
field_name_filterui_form_fieldr  s                  r   r   r   ;  s   """"""::i(L$ 3) 3)F#F#%&67#N3"&&vtT.B&CC 	)&&((GGLGL%3G"!GNLL4L((( $$[$&&99	$%67 "	) "	)H"1558F;KT[9= 6 ? ?M  % & 5 58F;KT[;?hllSYFZFZ !6 !\ !\<<)) >+3H+=M(<<)) >+3H+=M(""$$$&x0 ) )
$dG4]6[\((11 >#))#..r2DNNF4#67777NNF4#<===,11RV1WW )!,,W55 O(.(=(=:CSCSTWCXCXY[C\HNzO_O_`cOdOdefOgGhEK )> )M )M )/(=(=:(=(N(N0=M/)0M(+5oWY9Z9Z+ZM(/9X\\J]_a=b=b/bM,!,,U33 >%+%8%<%<*%<%M%M
3=0 }}Z44889JKK m8AjRT8U8U8Y8YZk8l8l5!&&(((/)"	)J r&   c            	         ddl m}  t                      d         }|D ]}| j                            |d                   }|s|                     |d         |d         d          }|                                 |d	         D ]Z}| j                            |d
                   }|                     |||d         |d                                                    [d S )Nr   r   ui_form_schemer   r   r   Tr   r  r  r   r  )r  targetr   r  )r   r   r   CmfUiFormSchemer!   r"   r  CmfUiFormSchemeRule)r   ui_form_scheme_listui_form_scheme_dictr  r$  r  s         r   r  r  w  s>   """""""**%562 D D/339LV9T3UU 	D#339LV9T[nou[v  @D3  E  EN!!!09 D D	)--9Y3G-HH**.QW:CDT:Uclmzc{ + } } ~B  ~B  ~D  ~D  ~D  ~DD Dr&   c            
      4	   ddl m } m}m} ddlm}  | j                                                    j        }t                      d         }|D ]I}|j	        
                    dd|d         g          }|sOt          d|d                     |	                    |d         	          }|
                    d
d          |_        |d         |_        |d         |_        t           | j        |                                                                                    |_        d|_        |                    d           |d         }|j        
                    dd|d         g          }	|	s=t          d|d          d|d                     |                    |d         	          }	||	_        |d         |	_        |d         |	_        d|	_        g }
|d                             d          }|d                                         D ]r\  }}d}t3          |
                    dg                     D ]\  }}|
                    dd           }|
                    dd           }d}|r|r | j        |d          } | j        |d          } |dd          |                                k    r| |d          z  }||z
                                  dz  }|                                }|                                }|d          d| d| d|||t          |          |d         d}|
                    |           ||z  }d | }t9          |	| d!|d                    t9          |	| d"|           t|	                    d           |
D ]}|j        
                    dd|d         g          }|s=t          d#|d          d$|d                     |                    |d         	          }|	|_        |d%         |_        |d         |_        |d         |_         |d&         |_!        |d'         |_"        |                    d           |	|_#        |                    d           |j$        r|%                    d()           Kd S )*Nr   )rf   	timedeltatimer   calendarr   rE   rG   zAdd calendar r   
is_defaultFr   Tr   default_workweekzAdd default workweek z for calendar r  weekdays	intervals	from_timeto_timez%H:%M   )hours<   z.workz	.intervalr  r   )r   day_weekr  r  interval_minutesinterval_typeday_type_intervals_total_minuteszAdd work interval z for default workweek r  r  r     )
back_years)&rf   r  r  r   r   rg   
astimezonetzinfor   CmfCalendarr!   r   r  r   r   int	utcoffsettotal_secondstimezoner   r"   CmfCalendarWorkWeekr   r  r   	enumeratestrptimer.   setattrCmfCalendarWorkWeekIntervalr  r  r  r  r  r	  is_newrecalc_calendar)rf   r  r  r   tzcalendar_datar  system_calendarworkweek_dataworkweekr  workweek_codeweekday_numday_dataintervals_total_minutesr  intervalr  r  r  interval_datar  work_intervals                          r   r   r     sK   2222222222""""""		"	"	$	$	+BJJz*M! P: P: ,00xPVGW8X0YY 	K4(6"244555$00hv6F0GGO)1lE)J)JO&'/'/#&|x|B'7'7'A'A'C'C'Q'Q'S'S#T#T !%t,,, !!34-11&$V\H]9^1__ 	Na-*?aaxX^O_aabbb11}V7L1MMH)%f-%f-	%f-33C88%2:%>%D%D%F%F 	Y 	Y!K&'#(k2)F)FGG < <8$LLd;;	",,y$77#$  - - 1 1)W E EI/h/AAGtAqzzW\\^^33992#6#6#66(/)(;'J'J'L'Lr'Q$ ) 0 0I%llnnG  -Q/WWkWWAWWW +!*&(+,<(=(=%-f%5! !   ///'+;;''%%%CHmmmXf-=>>>H>>>@WXXXX%%% " 	/ 	/H">BB6SWYabhYiJjBkkM  Zj8F+;jjS`agShjjkkk & B BQWHX B Y Y#+M %-j%9M"&.{&;M#$,Y$7M!-56H-IM**2?*CM'....+3(t,,, ! 	:++q+999aP: P:r&   c                  h    ddl m}  |                     dd                              d           d S )Nr   r   u#   Пример 9-5 календарьF)r   r   Tr   )r   r   r  r"   r   s    r   init_calendarr4    sL    """"""
2    dTdr&   c                  p   ddl m}  | j                            g d          }|s|                     d          }d|_        d|_        |                    d	           | j                            |d
          }|s|                     |d
          }d|_        d|_        |                    d	           dD ]\  }}| j                            |d| d          }|s | j                            |d| d          }|s|                     |d| d          }| j	                            |          }|s| j	                            |          }||_
        d| d|_        |dk    rdnd|_        |                    d	           | j                            |d          }|s|                     |d          }d|_        d|_        |                    d	           dD ]\  }}| j                            |d| d          }|s | j                            |d| d          }|s|                     |d| d          }| j	                            |          }|s| j	                            |          }||_
        d| d|_        d|_        |                    d	           d S )Nr   r   )r   rE   system:defaultrG   r6  r   u*   Системная по умолчаниюTr   zsystem-readonly:defaultr   r   u   Только чтение)r]   r\   rY   rX   rW   rV   rb   ra   )r[   rZ   zsystem-readonly-r  r[   Fzsystem-private:defaultu   Приватный)r8  r9  r:  r;  zsystem-private-)r   r   CmfSecurityLevelSchemer!   r   r   r"   CmfSecurityLevelCmfSecurityLevelRuler    access_memberr   access_readonly)r   r  leveluser_code_old	user_coder"  r?  s          r   r   r     s   """"""*..6V6V6V.WWF F..4D.EE>FKFM
KK$K #''v<U'VVE W''v<U'VVEL,EJ	JJJ%J " " y
 *..eBhU^BhBhBh.ii 	r.22%FpYfFpFpFp2qqD 	`..e8^98^8^8^ / ` `D(,,),<< 	E",00m0DDM*:y:::	'4'G'GttU		D	!!!!#''v<T'UUE V''v<T'UUEL%EJ	JJJ%K " " y *..eBgT]BgBgBg.hh 	q.22%FoXeFoFoFo2ppD 	_..e8])8]8]8] / _ _D (,,),<< 	E",00m0DDM*9i999	$		D	!!!!#" "r&   c                  r   ddl m}  t                      d         }|D ]}| j                            dd|d         gd          }|s,t          d|d                     |                                 }|d         |_        |d	         |_        |d
         |_        d|_	        |
                    d           dS )u+   
    Добавляет события
    r   r   
event_typer   rE   Tr   zAdd obj CmfEventType r   rB   r   N)r   r   r   CmfEventTyper!   r   r   r   rB   r   r"   )r   event_type_datarE  events       r   r   r   '  s     #"""""jj.O% # #
#''j>P/Q8< ( > > 	*>*V*<>>???''))E'
'
'


T
""""# #r&   c                  0   ddl m}  t                      d         }| j                            d          }|D ]}| j                            dd|d         gd	          }|s,t          d
|d                     |                                 }|d         |_        |d         |_        |d         |_	        d|_
        |                    d           |d         D ]8}| j                            |d                   }| j                            ||d                   }|rI|s|                     ||d                   }|                    dg           D ]}| j                            |          x}	r|j                            |	           :| j                            |          x}
r|j                            |
           rt%          d|           d|_
        |d         |_        ||_        ||_        |                                 :dS )u   
    Добавляет стандартную схему уведомлений. Клиенты могут ее редактировать!
    r   r   project_notify_schemer6  r   r   rE   Tr   zAdd obj CmfProjectNotifyScheme r   rB   r   r  rE  r7  membersz/scaffold_project_notify_scheme Unknown member: 
model_typeN)r   r   r   CmfEmailTemplater!   CmfProjectNotifySchemer   r   r   rB   r   r"   rF  CmfProjectNotifySchemeRuler    notify_membersr.   r+   r  rL  rE  email_template)r   project_notify_scheme_datadefault_templateobj_datar  	rule_datarE  r"  rC  r/   person_groups              r   r   r   =  s~    #"""""!),C!D.228H2II. , ,.2264RXIY:ZCG 3 I I 	5FHV4DFFGGG2244Fv&v&v&d###!'* 	 	I,00i6M0NNJ488v& 9  D    88!"6* 9  
 ']]9b99 c c	$.22	2BBBF c'..v6666&,&;&?&?Y&?&O&OOl c'..|<<<<#$aV_$a$abbb DK'5DO(DO"2DIIKKKK?	, ,r&   c                     ddl m}  dd l}| j                            dg dg dg          r+t          d| j                                                    d S d}dd	gd
dgfD ]\  }}t          d|            d}t          d| ddd          5 }|                    |dd|j                  }g }|D ]}	|	d         }
|	d         }|rt          |          }nd }|	d         }|
                    | j                                        |
||||| j        j        j        d           |dz  dk    rW| j        j        j                                                            ||           | j        j                                         g }|dz  }|rU| j        j        j                                                            ||           | j        j                                         d d d            n# 1 swxY w Y   d S )Nr   r   r   )	dict_namer   	ru_common)rX  r   ru_itrG   u8   Error! Словарь синонимов не пуст: rY  i'  rZ  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;")	delimiter	quotecharquotingrI     )r;   wordsyns	dictinary	word_statrA  full_search_type)r   r   csv
CmfSynonymr!   r   r   readerQUOTE_MINIMALfloatr.   gen_idrh  defaultr   data_driverSessionexecuter   )r   ri  r  rf  rA  sqlcsvfilerk  valuesrowrd  rg  re  s                r   r   r   t  s   """"""JJJT+J+J+JLgLgLg$hii bIZI^I^I`I`bbccc	A +U3gt_E 2. 2.	7>9>>???	 DIDDDcSUVVV %	.ZaZZ3*-s7H   J JFF  1vF	 % %i 0 0II $I1v +2244  !*!*&(.(9(J(R    " t8q==%(4<<>>FFsFSSS%(//111FQ .!$088::BB3OOO!$++---K%	. %	. %	. %	. %	. %	. %	. %	. %	. %	. %	. %	. %	. %	. %	.2. 2.s   EG//G3	6G3	c                  R   ddl m}  t                      d         }|D ]}| j                            dd|d         gd          }|s|                     |d                   }|d	         |_        |d
         |_        |d         |_        d|_        |	                    d           dS )u   
    Добавляет системные фильтры задач. Их нельзя редактировать и удалять.
    r   r   task_filterr   rE   Tr   r   r   ubql2bqlr   N)
r   r   r   r  r!   r   ubqlrz  r   r"   )r   task_filter_scheme_datarT  task_fitlers       r   r   r     s     #"""""&jj7+ ) ))--fdHVDT5Ugk-ll 	E --8F3C-DDK#F+#G,"5/!4(((() )r&   c                  r   ddl m}  t                      d         }|D ]}| j                            dd|d         gd          }|s|                     |d                   }|d	         |_        |d
         |_        |d         |_        |d         |_        |d         |_	        |d         |_
        |d         |_        d|_        |                    d           | j                            dg          }|d         s8| j                            d          }||_        |                                 dS dS )uS   
    Создает HTML схему по-умолчанию для servicedesk
    r   r   html_schemer   rE   Tr   r   r   sd_namesd_reference_headsd_task_button
home_titlecontent_background_colorcontent_text_colorr   sd_html_scheme)r@  sd_default_schemeN)r   r   r   CmfHtmlSchemer!   r   r  r  r  r  r  r  r   r"   r<   r  )r   html_scheme_datarT  r  global_settings	sd_customs         r   r   r     sp   
 #"""""zz-0$ ) )*..vtXfEU6Vhl.mm 	F ..HV4D.EEK#F+&y1(01D(E%%-.>%?"!),!7089S0T,*23G*H&!4((((.22;K:L2MMO+, (,,2E,FF	)2& r&   c            	         ddl m}  t                      d         }|D ]}| j                            |d                   }|s:|                     |d         |d         d          }|                    d	           |d
         D ]?}| j                            |d         d                   }|sF|                     |d         d         |d         d         d          }|                    d	           | j                            ||          }|s.|                     ||d          }|                    d	           |d                             dg           D ]d}| j                            |d         |d          }|s=|                     |d         |d         |d         |                                           eAd S )Nr   r   cust_field_conf_schemer   r   r   Tr   r   r  cust_field_confr4   )r   r  )r   r  r   r@  )r   r   r}   captionplaceholder)r   r  r  r   )	r   r   r   CmfCustFieldConfSchemer!   r"   CmfCustFieldConfCmfCustFieldConfSchemeRuleCmfCustFieldConfField)	r   cust_field_config_schemesr  cust_field_config_schemer$  cust_field_configr"  field
field_confs	            r   r   r     sm   """""" (

+C D+ b b#)#@#D#D&QW.#D#Y#Y ' 	:'-'D'D&QW._efl_mNR (E (T (T$$))D)999 	b 	bI & 7 ; ;K\A]^dAe ; f f$ 7$*$;$;K\A]^dAeCLM^C_`fCgEI %< %K %K! "&&&666488@XIZ 9 \ \D *88@XIZcg 9 i i		D	)))"#4599(BGG b b#9==5=Yj  }A=  B  B
! b00eFmUS\M]kpq~k  IZ0  [  [  `  `  b  b  bb	bb br&   c                     ddl m}  t                      d         }|D ]&}| j                            |d                   }|s7|                     |d         |d                   }|                                 |d         |_        |d         |_        |                    d	
           | j	                            |d          }| j	                            |d          }| j	                            |d          }|d         D ]}| j
                            |d         |          }|s| 
                                }||_        ||_        |d         |_        |                                 d|v rb|d         D ]Y}	| j                            |	d         ||          }
|
s|                     |	d         ||          }
|
                                 Z|d         D ]}| j
                            |d         |          }|s|                     |d         |          }d|v r(| j                            |d         |          |_        n||_        | j                            |d                   |_        |                                 |d         D ]}| j                            |d                   }|s|                     |          }|d         |_        | j                            |d         |          g|_        | j                            |d         |          |_        |                                 (d S )Nr   r   asset_schemesasset_code_prefix)r  r   )r  r   r   Tr   assets)r   sys_typeasset_types	locationsasset_type_catsr  )r   r   asset_type_cat
asset_cats	asset_catr   r   r~   )r   
asset_type)r   r   r   CmfAssetSchemer!   _scaffold_assetsr   r   r"   r  CmfAssetTypeCatr   r  CmfAssetTypeCmfAssetCatr   default_logic_typeCmfAssetr  r  )r   r  asset_schemer  assets_folderasset_types_folderlocations_foldertype_catr  obj_typer  a_catr  
asset_jsonassets                  r   r   r     s   """""" JJ/M% ; ;&**\J]=^*__ 	&**\J]=^2>v2F + H HF ##%%%$X."6*d###(,,FX,NN#-11-1XX!+//v/TT$%67 	& 	&H#377f%f 8  N " :!'!7!7!9!9$*N!);N&"*6"2N!!!(( ( 7 & &H!'!4!8!8hv>NW]p~!8!!J% @%+%8%8hv>NW]p~%8%%
OO%%%%!,/ 	 	E/336]6 4  I  R"..E&M&.QQ	e##(.(:(>(>E+DV_e(>(f(f	%%(5	%+1+>+B+BlH[+B+\+\I(NN&x0 	 	JO''Z-?'@@E 7v66#F+EJ!'!4!8!8j>V_e!8!f!f gE$044*[:QZ`4aaEOJJLLLL	i; ;r&   c                  b   ddl m}  | j                            g dg dgd          rd S t	                      d         }|D ]m}|                                 }|d         |_        |d	         |_        |d
         |_        |d         |_        |d         |_	        |
                    d           nd S )Nr   r   r  )r   r   doneTr   resolutionsr   r   rB   r   r  r   )r   r   CmfResolutionr!   r   r   r   rB   r   r  r"   )r   r  
resolutionnew_resolutions       r   r   r   ?  s    """"""(=(=(=?T?T?T'Ugkll **]+K! , ,
--//(0(0(0 *8 4$.|$<!d++++, ,r&   c                     ddl m}  t                      d         }|D ]f}| j                            |d                   }|s|                     |d                   }|d         |_        |                    ddd	           gd S )
Nr   r   
mail_listsr   r   r   TF)r   emitr6   )r   r   r   CmfEmailListr!   r   r"   )r   r  	mail_listnew_mail_lists       r   r   r   O  s    """"""L)J E E	+//Yv5F/GG 	H"//Yv5F/GGM&v.TeDDDDE Er&   c                     ddl m}  t          j                            t
          j        d          }t          |          5 }|                                }d d d            n# 1 swxY w Y   | j	        
                    d          }|s| 	                    d          }d|_        d|_        ||_        d|_        |                    d	           d S )
Nr   r   z$cmf/templates/mail_notification.htmlr6  r   Tu   По умолчаниюz+[{{project_name}}] ({{code}}) {{msg_title}}r   )r   r   r   pathjoinr   PROJECT_DIRr   r   rM  r!   r   r   tmplt_body_htmltmplt_subjectr"   )r   r  r  
body_tmpltdefault_email_templates        r   r   r   Z  s   """"""7<<*,RSSD	d qVVXX
               $488>N8OO! P!'!8!8>N!8!O!O$(!";-7*+X($/////s    A!!A%(A%c                     ddl m}  |                     ddddd          }|                                 t          j                            t          j        d	          }t          |          5 }|
                                }d d d            n# 1 swxY w Y   ||j        _        |j                                         |j                                         d S )
Nr   r   u   Портал компанииzproject.wiki:defaultsectionWPCT)r   r   project_typetask_code_prefixr  z#cmf/templates/company_homepage.html)r   r   r  r"   r   r  r  r   r  r   r   descr_document
text_draft
do_publish)r   r  r  r  homepages        r   r   r   l  s   """""",)    G LLNNN7<<*,QRRD	d q6688               )1G%!!!%%'''''s   .BBBc                     ddl m}  | j                            dd          }|s*|                     ddd                                          }| j                            |dd	          }|s,|                     ||ddd
                                          }| j                            ddd          }|s7|                     dddt          j                                                  }d S d S )Nr   r   app_gitT)r  r   u   Репозитории)r   r  r   CmfEvagitGroup)r  r   r   )r  r   r   r   r   evagit_sync)r   	hook_typer   )r   r  r   
token_user)	r   r   r  r!   r"   CmfRegistry
CmfWebhookr   system_user)r   evagit_root_folderevagit_reposwebhooks       r   r   r     s.   """""")--y-NN u#--3KV_hl-mmrrtt%))6HO_hl)mmL ))*%)! *   dff 	 ##-X\#]]G ###}	 $  
 dff 	 r&   c                      ddl m}  t                      d         }|D ]J}| j                            dd|d         gd          }|s! | j        d	ddi|                                }Kd S )
Nr   r   evagit_rolesr   rE   Tr   r   r   )r   r   r   CmfEvagitRoler!   r"   )r   
roles_data	role_datar  s       r   r   r     s    """"""N+J K K	#''i>O/Pbf'gg 	K'6'CCCCCHHJJDK Kr&   )F)rs  rt  )<__doc__rf   r
   r   typingr   flaskr   cmfr   
CMF_FOLDERr	   r   r%   r(   r1   r8   r=   r@   ry   r   r   r   r   r   r   r   r   r	  r  r   r   r   rY  ro  r   r   r   r  r  r   r   r   r  r   r4  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r   <module>r     s      				                  'BBB % % %
      x x xw w w> > >J0 J0 J0Z
 
 

 
 
B! B! B!J  0> > >2& & & & & & &R   &6 6 6 6D4 4 4 4<  &+ + + +^D, D, D,N     D   *) ) )V  $B" B" B"J	 	 		 	 	j# j# j#X" " " 9 9 9xD D DW: W: W:r  >" >" >"B# # #,5 5 5n:. :. :.x) ) )$  >b b b8@ @ @D, , , 	E 	E 	E0 0 0$( ( ((  4K K K K Kr&   