浏览代码

updated Fix Perms

Piotr Labudda 7 年之前
父节点
当前提交
6bbc05cae6

文件差异内容过多而无法显示
+ 363 - 560
SE/se-lib/Route/FixCrmProcesInitIdx.php


+ 16 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/fill_CRM_PROCES_idx_GROUP_to_PROCES.sql

@@ -0,0 +1,16 @@
+-- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
+insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` (`ID_PROCES`,`ID_GROUP`)
+	select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
+	from `CRM_PROCES_idx` i
+		join `CRM_WSKAZNIK` wsk on(wsk.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`
+				and wsk.`A_STATUS` in('NORMAL', 'WAITING')
+			)
+		join `CRM_LISTA_ZASOBOW` as z on(z.`ID`=wsk.`ID_ZASOB`
+				and z.`TYPE` in('STANOWISKO','PODMIOT','DZIAL')
+				and z.`A_STATUS` in('NORMAL', 'WAITING')
+			)
+		join `CRM_PRZYPADEK` przyp on(przyp.`ID`=wsk.`ID_PRZYPADEK`
+				and przyp.`FORM_TREAT` & 8 -- has perm X
+			)
+--	where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
+;

+ 32 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/fill__CRM_PROCES_idx_TEMP.sql

@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS `CRM_PROCES_idx_TEMP`;
+-- Mysql BUG: "Can't reopen table" -- CREATE TEMPORARY TABLE `CRM_PROCES_idx_TEMP` (
+-- You cannot refer to a TEMPORARY table more than once in the same query.
+CREATE TABLE IF NOT EXISTS `CRM_PROCES_idx_TEMP` (
+	`ID_PROCES` int(11) NOT NULL
+	, `PARENT_ID` int(11) NOT NULL DEFAULT '0'
+	, `TYPE` varchar(32) NOT NULL DEFAULT ''
+	, `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
+	, `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
+	, `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
+--	, `idx_PATH` text NOT NULL
+	, KEY `ID_PROCES` ( `ID_PROCES` )
+	, KEY `PARENT_ID` ( `PARENT_ID` )
+	, KEY `idx_PROCES_INIT_ID` ( `idx_PROCES_INIT_ID` )
+	, KEY `idx_MAIN_PROCES_INIT_ID` ( `idx_MAIN_PROCES_INIT_ID` )
+	, KEY `idx_PROCES_WITH_GROUPS_ID` ( `idx_PROCES_WITH_GROUPS_ID` )
+	, UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` ( `ID_PROCES`, `idx_PROCES_WITH_GROUPS_ID` )
+)
+
+-- I.1--truncate-table
+truncate table `CRM_PROCES_idx_TEMP`;
+
+-- I.2--fill-CRM_PROCES_idx_TEMP
+insert into `CRM_PROCES_idx_TEMP` ( `ID_PROCES`, `TYPE`, `PARENT_ID`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID` )
+	select p.`ID` as `ID_PROCES`
+		, p.`TYPE` as `TYPE`
+		, p.`PARENT_ID` as `PARENT_ID`
+		, IF( p.`TYPE` = 'PROCES_INIT', p.`ID`, 0 ) as `idx_PROCES_INIT_ID`
+		, IF( p.`TYPE` = 'PROCES_INIT', p.`ID`, 0 ) as `idx_MAIN_PROCES_INIT_ID`
+	from `CRM_PROCES` p
+	where p.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+;

+ 23 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/fill_childrens_of_goto_and_return.sql

@@ -0,0 +1,23 @@
+-- GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2
+-- i   p(5103) is GOTO_AND_RETURN_LVL2       pID(5105) pI(5103) pIM(5040) pG(5040)
+-- i   p(5103) is GOTO_AND_RETURN_LVL2       pID(5105) pI(5103) pIM(5100) pG(5100)
+-- ic  p(5104) is GOTO_AND_RETURN_CHILD      pID(5103) pI(5103) pIM(5039) pG(NULL)
+-- ic  p(5104) is GOTO_AND_RETURN_CHILD      pID(5103) pI(5103) pIM(5039) pG(NULL)
+-- +   p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
+-- +   p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
+insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
+	select ic.`ID_PROCES`
+		, 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
+		, ic.`PARENT_ID` as `PARENT_ID`
+		, ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
+		, i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+		, IF(ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
+--		, 'i', i.*, 'ic', ic.*
+	from `CRM_PROCES_idx_TEMP` i
+		join `CRM_PROCES_idx_TEMP` ic on(
+			ic.`idx_PROCES_INIT_ID`=i.`ID_PROCES`
+			and ic.`ID_PROCES`!=i.`ID_PROCES`
+			and ic.`TYPE`='GOTO_AND_RETURN_CHILD'
+		)
+	where i.`TYPE`='GOTO_AND_RETURN_LVL2'
+;

+ 27 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/fill_childrens_of_goto_and_return_lvl2.sql

@@ -0,0 +1,27 @@
+-- I.2--fill-CRM_PROCES_idx_TEMP
+-- Mysql BUG: "Can't reopen table" -- CREATE TEMPORARY TABLE `CRM_PROCES_idx_TEMP` (
+-- You cannot refer to a TEMPORARY table more than once in the same query.
+CREATE TABLE `CRM_PROCES_idx_TEMP` (
+	`ID_PROCES` int(11) NOT NULL
+	, `PARENT_ID` int(11) NOT NULL DEFAULT '0'
+	, `TYPE` varchar(32) NOT NULL DEFAULT ''
+	, `idx_PROCES_INIT_ID` int(11) NOT NULL DEFAULT '0'
+	, `idx_MAIN_PROCES_INIT_ID` int(11) NULL DEFAULT '0'
+	, `idx_PROCES_WITH_GROUPS_ID` int(11) NULL DEFAULT NULL
+--	, `idx_PATH` text NOT NULL
+	, KEY `ID_PROCES` (`ID_PROCES`)
+	, KEY `PARENT_ID` (`PARENT_ID`)
+	, KEY `idx_PROCES_INIT_ID` (`idx_PROCES_INIT_ID`)
+	, KEY `idx_MAIN_PROCES_INIT_ID` (`idx_MAIN_PROCES_INIT_ID`)
+	, KEY `idx_PROCES_WITH_GROUPS_ID` (`idx_PROCES_WITH_GROUPS_ID`)
+	, UNIQUE KEY `uniq__idx_PROCES_WITH_GROUPS_ID` (`ID_PROCES`,`idx_PROCES_WITH_GROUPS_ID`)
+)
+
+select p.`ID` as `ID_PROCES`
+	, p.`TYPE` as `TYPE`
+	, p.`PARENT_ID` as `PARENT_ID`
+	, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_PROCES_INIT_ID`
+	, IF(p.`TYPE`='PROCES_INIT', p.`ID`, 0) as `idx_MAIN_PROCES_INIT_ID`
+from `CRM_PROCES` p
+where p.`A_STATUS` in('NORMAL','WAITING')
+;

+ 19 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/fill_goto_and_return.sql

@@ -0,0 +1,19 @@
+-- GOTO_AND_RET.1--from-7-fill-goto_and_return
+insert ignore into `CRM_PROCES_idx_TEMP` (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
+	select g.`ID`
+		, 'GOTO_AND_RETURN' as `TYPE`
+		, p.`ID` as `PARENT_ID`
+		, g.`ID` as `idx_PROCES_INIT_ID`
+		, i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+		, IF(i.`idx_PROCES_WITH_GROUPS_ID` is null, gi.`idx_PROCES_WITH_GROUPS_ID`, i.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
+	from `CRM_PROCES` p
+		join `CRM_PROCES_idx_TEMP` i on(i.`ID_PROCES`=p.`ID`)
+		join `CRM_PROCES` g on(g.`ID`=p.`IF_TRUE_GOTO`
+				and g.`TYPE`='PROCES_INIT'
+				and g.`A_STATUS` in('NORMAL','WAITING')
+				and p.`IF_TRUE_GOTO_FLAG`='GOTO_AND_RETURN'
+				and p.`IF_TRUE_GOTO`>0
+			)
+		join `CRM_PROCES_idx_TEMP` gi on(gi.`ID_PROCES`=g.`ID`)
+	where p.`A_STATUS` in('NORMAL','WAITING')
+;

+ 19 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/fill_goto_and_return_lvl2.sql

@@ -0,0 +1,19 @@
+-- GOTO_AND_RET.3--fill-goto_and_return_lvl2
+-- gc  p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
+-- gc  p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
+-- gg  p(5103) is GOTO_AND_RETURN       pID(5105) pI(5103) pIM(5039) pG(NULL)
+-- +   p(5103) is GOTO_AND_RETURN_LVL2  pID(5105) pI(5103) pIM(5040) pG(5040)
+-- +   p(5103) is GOTO_AND_RETURN_LVL2  pID(5105) pI(5103) pIM(5100) pG(5100)
+insert ignore into `CRM_PROCES_idx_TEMP`  (`ID_PROCES`,`TYPE`,`PARENT_ID`,`idx_PROCES_INIT_ID`,`idx_MAIN_PROCES_INIT_ID`,`idx_PROCES_WITH_GROUPS_ID`)
+	select gg.`ID_PROCES` as `ID_PROCES`
+		, 'GOTO_AND_RETURN_LVL2' as `TYPE`
+		, gg.`PARENT_ID` as `PARENT_ID`
+		, gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
+		, gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+		, IF(gg.`idx_PROCES_WITH_GROUPS_ID` is null, gc.`idx_PROCES_WITH_GROUPS_ID`, gg.`idx_PROCES_WITH_GROUPS_ID`) as `idx_PROCES_WITH_GROUPS_ID`
+--		, 'gc', gc.*, 'gg', gg.*
+	from `CRM_PROCES_idx_TEMP` gg
+		join `CRM_PROCES_idx_TEMP` gc on(gc.`ID_PROCES`=gg.`PARENT_ID`)
+	where gg.`TYPE`='GOTO_AND_RETURN'
+		and gc.`TYPE`='GOTO_AND_RETURN_CHILD'
+;

+ 16 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/set_initial_proc_with_groups_id.sql

@@ -0,0 +1,16 @@
+-- G.1--before-while-2-set-initial-proc_with_groups_id
+update `CRM_PROCES_idx_TEMP` i
+	join `CRM_WSKAZNIK` as wsk on ( wsk.`ID_PROCES`= i.`ID_PROCES`
+			and wsk.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+		)
+	join `CRM_LISTA_ZASOBOW` as z on ( z.`ID` = wsk.`ID_ZASOB`
+			and z.`TYPE` in ( 'STANOWISKO', 'PODMIOT', 'DZIAL' )
+			and z.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+		)
+	join `CRM_PRZYPADEK` przyp on ( przyp.`ID` = wsk.`ID_PRZYPADEK`
+			and przyp.`FORM_TREAT` & 8 -- has perm X
+		)
+	set
+		i.`idx_PROCES_WITH_GROUPS_ID` = i.`ID_PROCES`
+	where i.`idx_PROCES_INIT_ID` > 0
+;

+ 17 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/update_proces_init_idx__loop__fill_idx_INIT.sql

@@ -0,0 +1,17 @@
+CREATE DEFINER=`root`@`localhost` PROCEDURE `update_proces_init_idx__loop__fill_idx_INIT`()
+BEGIN
+	SET @i = 0;
+	SET @loopLomit = 100;
+	SET @pinitCnt = 1;
+	WHILE @i < @loopLomit and @pinitCnt > 0 DO
+		update `CRM_PROCES_idx_TEMP` p
+			join `CRM_PROCES_idx_TEMP` pp on ( pp.`ID_PROCES` = p.`PARENT_ID` )
+			set p.`idx_PROCES_INIT_ID` = IF( p.`idx_PROCES_INIT_ID` > 0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID` )
+				, p.`idx_MAIN_PROCES_INIT_ID` = pp.`idx_MAIN_PROCES_INIT_ID`
+			-- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
+			where p.`idx_PROCES_INIT_ID` = 0 and pp.`idx_PROCES_INIT_ID` > 0
+		;
+		SET @pinitCnt = ROW_COUNT();
+		SET @i = @i + 1;
+	END WHILE;
+END

+ 226 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/update_proces_init_idx_rec.sql

@@ -0,0 +1,226 @@
+CREATE DEFINER=`root`@`localhost` PROCEDURE `update_proces_init_idx_rec`()
+BEGIN
+	SET @enabled = FALSE;
+	SET @conf_last_exec_lock_key = 'tbl_indexer_CRM_PROCES_last_exec_lock_date';
+	SET @conf_last_exec_start_key = 'tbl_indexer_CRM_PROCES_last_exec_start';
+	SET @conf_last_exec_end_key   = 'tbl_indexer_CRM_PROCES_last_exec_end';
+	-- if already runnig mysql will throw 'Commands out of sync; you cant run this command now'
+	IF (select count(1) from `CRM_CONFIG` where `conf_key`=@conf_last_exec_lock_key and `conf_val`!='')>0 THEN
+		UPDATE `P5-MSG:Route_FixCrmProcesInitIdx:ERROR: Already executed` SET x=1;
+	ELSE BEGIN
+
+		-- CONF.1--set-start-time-in-config
+		replace into `CRM_CONFIG` (`conf_key`, `conf_val`) values (@conf_last_exec_lock_key, NOW()), (@conf_last_exec_start_key, NOW());
+
+		-- I.1--truncate-table
+		truncate table `CRM_PROCES_idx_TEMP`;
+
+		-- I.2--fill-CRM_PROCES_idx_TEMP
+		insert into `CRM_PROCES_idx_TEMP` ( `ID_PROCES`, `TYPE`, `PARENT_ID`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID` )
+			select p.`ID` as `ID_PROCES`
+				, p.`TYPE` as `TYPE`
+				, p.`PARENT_ID` as `PARENT_ID`
+				, IF( p.`TYPE` = 'PROCES_INIT', p.`ID`, 0 ) as `idx_PROCES_INIT_ID`
+				, IF( p.`TYPE` = 'PROCES_INIT', p.`ID`, 0 ) as `idx_MAIN_PROCES_INIT_ID`
+			from `CRM_PROCES` p
+			where p.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+		;
+
+		-- G.1--before-while-2-set-initial-proc_with_groups_id
+		update `CRM_PROCES_idx_TEMP` i
+				join `CRM_WSKAZNIK` as wsk on ( wsk.`ID_PROCES` = i.`ID_PROCES`
+						and wsk.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+					)
+				join `CRM_LISTA_ZASOBOW` as z on ( z.`ID` = wsk.`ID_ZASOB`
+						and z.`TYPE` in ( 'STANOWISKO', 'PODMIOT', 'DZIAL' )
+						and z.`A_STATUS` in ( 'NORMAL',  'WAITING' )
+					)
+				join `CRM_PRZYPADEK` przyp on ( przyp.`ID` = wsk.`ID_PRZYPADEK`
+						and przyp.`FORM_TREAT` & 8 -- has perm X
+					)
+			set
+				i.`idx_PROCES_WITH_GROUPS_ID` = i.`ID_PROCES`
+			where i.`idx_PROCES_INIT_ID` > 0
+		;
+
+		-- G.2--while-2-loop-update-proc_with_groups_id-from-parent
+		SET @i = 0;
+		SET @loopLomit = 100;
+		SET @groupCnt = 1;
+		WHILE @i < @loopLomit and @groupCnt > 0 DO
+			update `CRM_PROCES_idx_TEMP` as p
+				join `CRM_PROCES_idx_TEMP` as pp on (
+					pp.`ID_PROCES` = p.`PARENT_ID`
+					and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
+					and pp.`idx_PROCES_WITH_GROUPS_ID` > 0
+				)
+				set p.`idx_PROCES_WITH_GROUPS_ID` = pp.`idx_PROCES_WITH_GROUPS_ID`
+				where p.`idx_PROCES_WITH_GROUPS_ID` is null
+			;
+			SET @groupCnt = ROW_COUNT();
+			SET @i = @i + 1;
+		END WHILE;
+
+		-- P_INIT_ID.1--fill_idx_INIT
+		SET @i = 0;
+		SET @loopLomit = 100;
+		SET @pinitCnt = 1;
+		WHILE @i < @loopLomit and @pinitCnt > 0 DO
+			update `CRM_PROCES_idx_TEMP` p
+				join `CRM_PROCES_idx_TEMP` pp on ( pp.`ID_PROCES` = p.`PARENT_ID` )
+				set p.`idx_PROCES_INIT_ID` = IF( p.`idx_PROCES_INIT_ID` > 0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID` )
+					, p.`idx_MAIN_PROCES_INIT_ID` = pp.`idx_MAIN_PROCES_INIT_ID`
+				-- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
+				where p.`idx_PROCES_INIT_ID` = 0 and pp.`idx_PROCES_INIT_ID`>0
+			;
+			SET @pinitCnt = ROW_COUNT();
+			SET @i = @i + 1;
+		END WHILE;
+
+		-- GOTO_AND_RET.1--from-7-fill-goto_and_return
+		insert ignore into `CRM_PROCES_idx_TEMP` ( `ID_PROCES`, `TYPE`, `PARENT_ID`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID`, `idx_PROCES_WITH_GROUPS_ID` )
+			select g.`ID`
+				, 'GOTO_AND_RETURN' as `TYPE`
+				, p.`ID` as `PARENT_ID`
+				, g.`ID` as `idx_PROCES_INIT_ID`
+				, i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+				, IF( i.`idx_PROCES_WITH_GROUPS_ID` is null, gi.`idx_PROCES_WITH_GROUPS_ID`, i.`idx_PROCES_WITH_GROUPS_ID` ) as `idx_PROCES_WITH_GROUPS_ID`
+			from `CRM_PROCES` p
+				join `CRM_PROCES_idx_TEMP` i on ( i.`ID_PROCES` = p.`ID` )
+				join `CRM_PROCES` g on ( g.`ID` = p.`IF_TRUE_GOTO`
+						and g.`TYPE` = 'PROCES_INIT'
+						and g.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+						and p.`IF_TRUE_GOTO_FLAG` = 'GOTO_AND_RETURN'
+						and p.`IF_TRUE_GOTO` > 0
+					)
+				join `CRM_PROCES_idx_TEMP` gi on ( gi.`ID_PROCES` = g.`ID` )
+			where p.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+		;
+
+		-- GOTO_AND_RET.2--fill-childrens-of-goto_and_return
+		insert ignore into `CRM_PROCES_idx_TEMP` ( `ID_PROCES`, `TYPE`, `PARENT_ID`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID`, `idx_PROCES_WITH_GROUPS_ID` )
+			select ic.`ID_PROCES`
+				, 'GOTO_AND_RETURN_CHILD' as `TYPE`
+				, ic.`PARENT_ID` as `PARENT_ID`
+				, ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
+				, i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+				, IF( ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID` ) as `idx_PROCES_WITH_GROUPS_ID`
+			from `CRM_PROCES_idx_TEMP` i
+				join `CRM_PROCES_idx_TEMP` ic on (
+					ic.`idx_PROCES_INIT_ID` = i.`ID_PROCES`
+					and ic.`ID_PROCES` != i.`ID_PROCES`
+				)
+			where i.`TYPE` = 'GOTO_AND_RETURN'
+		;
+
+		-- GOTO_AND_RET.3--fill-goto_and_return_lvl2
+		-- gc  p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5040) pG(5040)
+		-- gc  p(5105) is GOTO_AND_RETURN_CHILD pID(5061) pI(5039) pIM(5100) pG(5100)
+		-- gg  p(5103) is GOTO_AND_RETURN       pID(5105) pI(5103) pIM(5039) pG(NULL)
+		-- +   p(5103) is GOTO_AND_RETURN_LVL2  pID(5105) pI(5103) pIM(5040) pG(5040)
+		-- +   p(5103) is GOTO_AND_RETURN_LVL2  pID(5105) pI(5103) pIM(5100) pG(5100)
+		insert ignore into `CRM_PROCES_idx_TEMP`  ( `ID_PROCES`, `TYPE`, `PARENT_ID`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID`, `idx_PROCES_WITH_GROUPS_ID` )
+			select gg.`ID_PROCES` as `ID_PROCES`
+				, 'GOTO_AND_RETURN_LVL2' as `TYPE`
+				, gg.`PARENT_ID` as `PARENT_ID`
+				, gg.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
+				, gc.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+				, IF( gg.`idx_PROCES_WITH_GROUPS_ID` is null, gc.`idx_PROCES_WITH_GROUPS_ID`, gg.`idx_PROCES_WITH_GROUPS_ID` ) as `idx_PROCES_WITH_GROUPS_ID`
+		--		, 'gc', gc.*, 'gg', gg.*
+			from `CRM_PROCES_idx_TEMP` gg
+				join `CRM_PROCES_idx_TEMP` gc on ( gc.`ID_PROCES` = gg.`PARENT_ID` )
+			where gg.`TYPE` = 'GOTO_AND_RETURN'
+				and gc.`TYPE` = 'GOTO_AND_RETURN_CHILD'
+		;
+
+		-- GOTO_AND_RET.3--fill-childrens-of-goto_and_return_lvl2
+		-- i   p(5103) is GOTO_AND_RETURN_LVL2       pID(5105) pI(5103) pIM(5040) pG(5040)
+		-- i   p(5103) is GOTO_AND_RETURN_LVL2       pID(5105) pI(5103) pIM(5100) pG(5100)
+		-- ic  p(5104) is GOTO_AND_RETURN_CHILD      pID(5103) pI(5103) pIM(5039) pG(NULL)
+		-- ic  p(5104) is GOTO_AND_RETURN_CHILD      pID(5103) pI(5103) pIM(5039) pG(NULL)
+		-- +   p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5100) pG(5100)
+		-- +   p(5104) is GOTO_AND_RETURN_CHILD_LVL2 pID(5103) pI(5103) pIM(5040) pG(5040)
+		insert ignore into `CRM_PROCES_idx_TEMP` ( `ID_PROCES`, `TYPE`, `PARENT_ID`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID`, `idx_PROCES_WITH_GROUPS_ID` )
+			select ic.`ID_PROCES`
+				, 'GOTO_AND_RETURN_CHILD_LVL2' as `TYPE`
+				, ic.`PARENT_ID` as `PARENT_ID`
+				, ic.`idx_PROCES_INIT_ID` as `idx_PROCES_INIT_ID`
+				, i.`idx_MAIN_PROCES_INIT_ID` as `idx_MAIN_PROCES_INIT_ID`
+				, IF( ic.`idx_PROCES_WITH_GROUPS_ID` is null, i.`idx_PROCES_WITH_GROUPS_ID`, ic.`idx_PROCES_WITH_GROUPS_ID` ) as `idx_PROCES_WITH_GROUPS_ID`
+		--		, 'i', i.*, 'ic', ic.*
+			from `CRM_PROCES_idx_TEMP` i
+				join `CRM_PROCES_idx_TEMP` ic on (
+					ic.`idx_PROCES_INIT_ID` = i.`ID_PROCES`
+					and ic.`ID_PROCES` != i.`ID_PROCES`
+					and ic.`TYPE` = 'GOTO_AND_RETURN_CHILD'
+				)
+			where i.`TYPE` = 'GOTO_AND_RETURN_LVL2'
+		;
+
+		-- IDX.1--clear-CRM_PROCES_idx
+		truncate table `CRM_PROCES_idx`;
+
+		-- IDX.2--update-CRM_PROCES_idx-from-temp
+		insert into `CRM_PROCES_idx` ( `ID_PROCES`, `PARENT_ID`, `TYPE`, `idx_PROCES_INIT_ID`, `idx_MAIN_PROCES_INIT_ID`, `idx_PROCES_WITH_GROUPS_ID` )
+			select i.`ID_PROCES`, i.`PARENT_ID`, i.`TYPE`, i.`idx_PROCES_INIT_ID`, i.`idx_MAIN_PROCES_INIT_ID`, i.`idx_PROCES_WITH_GROUPS_ID`
+			from `CRM_PROCES_idx_TEMP` i
+			where i.`idx_PROCES_INIT_ID` > 0 and i.`idx_PROCES_WITH_GROUPS_ID` is not null
+		;
+
+
+		-- TODO OFF: time ~0.1 P.1--update-CRM_PROCES-idx_PROCES_INIT_ID
+		-- update `CRM_PROCES` p
+		-- 	set p.`idx_PROCES_INIT_ID`=coalesce((select i.`idx_PROCES_INIT_ID` from `CRM_PROCES_idx` i where i.`ID_PROCES`=p.`ID` limit 1), 0)
+		-- ;
+
+		-- GP.1--clear-CRM_PROCES_idx_GROUP_to_PROCES
+		truncate table `CRM_PROCES_idx_GROUP_to_PROCES`;
+
+		-- GP.2--fill-CRM_PROCES_idx_GROUP_to_PROCES
+		insert ignore into `CRM_PROCES_idx_GROUP_to_PROCES` ( `ID_PROCES`, `ID_GROUP` )
+			select i.`ID_PROCES` as ID_PROCES, z.`ID` as ID_GROUP
+			from `CRM_PROCES_idx` i
+				join `CRM_WSKAZNIK` wsk on ( wsk.`ID_PROCES` = i.`idx_PROCES_WITH_GROUPS_ID`
+						and wsk.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+					)
+				join `CRM_LISTA_ZASOBOW` as z on ( z.`ID` = wsk.`ID_ZASOB`
+						and z.`TYPE` in ( 'STANOWISKO', 'PODMIOT', 'DZIAL' )
+						and z.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+					)
+				join `CRM_PRZYPADEK` przyp on ( przyp.`ID` = wsk.`ID_PRZYPADEK`
+						and przyp.`FORM_TREAT` & 8 -- has perm X
+					)
+		--	where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
+		;
+
+		-- GP.2--clear-CRM_PROCES_idx_GROUP_to_PROCES_PERM
+		truncate table `CRM_PROCES_idx_GROUP_to_PROCES_PERM`;
+
+		-- GP.3--fill-CRM_PROCES_idx_GROUP_to_PROCES_PERM
+		insert into `CRM_PROCES_idx_GROUP_to_PROCES_PERM` ( `ID_PROCES`, `ID_GROUP`, `HAS_PERM_R`, `HAS_PERM_X` )
+			select i.`ID_PROCES` as `_ID_PROCES`
+				, z.`ID` as `_ID_GROUP`
+				, IF( przyp.`FORM_TREAT` & 2, 1, 0 ) as `_HAS_PERM_R`
+				, IF( przyp.`FORM_TREAT` & 8, 1, 0 ) as `_HAS_PERM_X`
+			from `CRM_PROCES_idx` i
+				join `CRM_WSKAZNIK` wsk on( wsk.`ID_PROCES` = i.`idx_PROCES_WITH_GROUPS_ID`
+						and wsk.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+					)
+				join `CRM_LISTA_ZASOBOW` as z on ( z.`ID` = wsk.`ID_ZASOB`
+						and z.`TYPE` in ( 'STANOWISKO', 'PODMIOT', 'DZIAL' )
+						and z.`A_STATUS` in ( 'NORMAL', 'WAITING' )
+					)
+				join `CRM_PRZYPADEK` przyp on ( przyp.`ID` = wsk.`ID_PRZYPADEK` )
+		--	where i.`TYPE` in('PROCES_INIT', 'GOTO_AND_RETURN')
+			ON DUPLICATE KEY UPDATE `HAS_PERM_R` = GREATEST( `HAS_PERM_R`, IF( przyp.`FORM_TREAT` & 2, 1, 0 ) )
+				, `HAS_PERM_X` = GREATEST( `HAS_PERM_X`, IF( przyp.`FORM_TREAT` & 8, 1, 0 ) )
+		;
+
+		-- CONF.2--set-end-time-in-config
+		replace into `CRM_CONFIG` ( `conf_key`, `conf_val` ) values ( @conf_last_exec_lock_key, '' ), ( @conf_last_exec_end_key, NOW() );
+
+		-- clear msg 'Update perms' from Msgs system
+		CALL CRM_UI_MSGS__markTableEveryoneAsExecuted( 'update_proces_init_idx_rec', 'FixCrmProcesInitIdx', 'Update perms', 'CRM_PROCES' );
+
+	END ; END IF ;
+END ;

+ 21 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/update_proces_init_idx_rec__while1.sql

@@ -0,0 +1,21 @@
+CREATE DEFINER=`root`@`localhost` PROCEDURE `update_proces_init_idx_rec__while1`()
+BEGIN
+	-- update `CRM_PROCES_idx_TEMP` as i set i.`idx_PROCES_INIT_ID`=IF(i.`TYPE`='PROCES_INIT', i.`ID_PROCES`, 0);
+	-- P_INIT_ID.1--fill_idx_INIT
+	SET @i = 0;
+	SET @loopLomit = 100;
+	SET @pinitCnt = 1;
+	WHILE @i < @loopLomit and @pinitCnt > 0 DO
+		update `CRM_PROCES_idx_TEMP` p
+			join `CRM_PROCES_idx_TEMP` pp on ( pp.`ID_PROCES` = p.`PARENT_ID` )
+			-- set p.`idx_MAIN_PROCES_INIT_ID`=pp.`idx_MAIN_PROCES_INIT_ID`
+			-- where p.`idx_MAIN_PROCES_INIT_ID`=0 and pp.`idx_MAIN_PROCES_INIT_ID`>0
+			set p.`idx_PROCES_INIT_ID` = IF( p.`idx_PROCES_INIT_ID` > 0, p.`idx_PROCES_INIT_ID`, pp.`idx_PROCES_INIT_ID` )
+				, p.`idx_MAIN_PROCES_INIT_ID` = pp.`idx_MAIN_PROCES_INIT_ID`
+			-- // TODO:?: update here `idx_MAIN_PROCES_INIT_ID`
+			where p.`idx_PROCES_INIT_ID` = 0 and pp.`idx_PROCES_INIT_ID` > 0
+		;
+		SET @pinitCnt = ROW_COUNT();
+		SET @i = @i + 1;
+	END WHILE;
+END

+ 20 - 0
SE/se-lib/Route/FixCrmProcesInitIdx/update_proces_init_idx_rec__while2.sql

@@ -0,0 +1,20 @@
+CREATE DEFINER=`root`@`localhost` PROCEDURE `update_proces_init_idx_rec__while2`()
+BEGIN
+	-- G.2--while-2-loop-update-proc_with_groups_id-from-parent
+	SET @i = 0;
+	SET @loopLomit = 100;
+	SET @groupCnt = 1;
+	WHILE @i < @loopLomit and @groupCnt > 0 DO
+		update `CRM_PROCES_idx_TEMP` as p
+			join `CRM_PROCES_idx_TEMP` as pp on (
+				pp.`ID_PROCES` = p.`PARENT_ID`
+				and pp.`idx_PROCES_WITH_GROUPS_ID` is not null
+				and pp.`idx_PROCES_WITH_GROUPS_ID` > 0
+			)
+			set p.`idx_PROCES_WITH_GROUPS_ID` = pp.`idx_PROCES_WITH_GROUPS_ID`
+			where p.`idx_PROCES_WITH_GROUPS_ID` is null
+		;
+		SET @groupCnt = ROW_COUNT();
+		SET @i = @i + 1;
+	END WHILE;
+END

部分文件因为文件数量过多而无法显示