superedit-DB_PROCEDURES_CREATE.php 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907
  1. <?php
  2. // procedury do optymalnegi przyjemnego i szybkiego widoku danych procesow
  3. // bazowe konstruktory twardych struktur danych systemowych
  4. //version @2014-01-22 bindera
  5. //@2014-02-05 ustalono, ze ten plik zostanie rozrzucony po pojedynczych skryptach php, ktore beda wyzwalane przez klase zaprojektowana przez Piotra, ktora
  6. //na podobnej zasadzie co WordPress bedzie czytac tabele z dostepnymi pluginami, gdzie te skryupty beda pozglaszane/lub beda sie zglaszac
  7. if(isset($_SERVER["argv"][1])) {
  8. //wymuszenie argumentu z polecenia (ta zmienna oznaczac ma domene (np. biuro.biall-net.pl )
  9. //php -r"include('/Library/Server/Web/Data/Sites/Default/SE/superedit-SQIX_STRUCTURE_DB_SYNC.php') ;" biuro.biall-net.pl
  10. $_SERVER['SERVER_NAME']=$_SERVER["argv"][1];
  11. $_REQUEST['SYSTEM_PROFILE_STRING_IMPORT_EXPORT']=$_SERVER["argv"][2]; //filtr do importu
  12. $_REQUEST['submit']=true;
  13. define('DS', DIRECTORY_SEPARATOR);
  14. define('APP_PATH_ROOT', dirname(__FILE__));
  15. define('APP_PATH_WWW', dirname(__FILE__));
  16. define('APP_PATH_CONFIG', APP_PATH_ROOT . DS . 'config');
  17. require_once APP_PATH_ROOT . DS . 'se-lib' . DS . 'Lib.php';
  18. Lib::loadClass('V');
  19. Lib::loadClass('Config');
  20. Lib::loadClass('DB');
  21. Lib::loadClass('User');
  22. session_start();
  23. include_once(APP_PATH_CONFIG.'/.config-'.$_SERVER['SERVER_NAME'].'.php');
  24. include('superedit-DEBUG_S.php');
  25. // $PROJ_mount_point=Config::getConfFile('import_db', '') ;
  26. // print_r($PROJ_mount_point);
  27. } else {
  28. if($_SESSION['ADM_ADMIN_LEVEL']<>0) die('niewlasciwy admin level != 0');
  29. if(!isset($_SESSION['ADM_ADMIN_LEVEL'])) die('brak admin level - zle wyzwolenie funkcji');
  30. }
  31. function DB_PROCEDURES_CREATE($DB=null) {
  32. DEBUG_S(-3,"Deklaruje zmienna SQL do wykonania instalacji procedur",null,__FILE__,__FUNCTION__,__LINE__);
  33. $sql['turn_off_database_locking']="SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;";
  34. //! CRM_ZASOBY_BEGIN
  35. $sql['drop_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="drop function if exists CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path";
  36. $sql['create_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="CREATE DEFINER=`root`@`localhost` FUNCTION `CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2
  37. READS SQL DATA
  38. BEGIN
  39. DECLARE _path TEXT;
  40. DECLARE _type CHAR(255);
  41. DECLARE _lvl INT;
  42. DECLARE _cpath TEXT;
  43. DECLARE _id INT;
  44. DECLARE _id_cur INT;
  45. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  46. SET _id = COALESCE(node, @id);
  47. SET _path = '';
  48. SET _lvl=1;
  49. the_loop: LOOP
  50. SET _lvl =_lvl+1;
  51. IF _lvl>100 THEN
  52. RETURN concat('ERROR',_path);
  53. LEAVE the_loop;
  54. END IF;
  55. SELECT PARENT_ID,`DESC`,ID
  56. INTO _id,_type,_id_cur
  57. FROM CRM_LISTA_ZASOBOW
  58. WHERE id = _id
  59. AND COALESCE(id <> @start_with, TRUE);
  60. SET _path = CONCAT(_type, delimiter, _path);
  61. END LOOP the_loop;
  62. END";
  63. //!_CRM_LISTA_ZASOBOW_tree_UPDATE
  64. $sql['drop__CRM_LISTA_ZASOBOW_tree_UPDATE']="DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_UPDATE`";
  65. $sql['create__CRM_LISTA_ZASOBOW_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_LISTA_ZASOBOW_tree_UPDATE` BEFORE UPDATE ON `CRM_LISTA_ZASOBOW` FOR EACH ROW BEGIN
  66. IF NEW.PARENT_ID<>OLD.PARENT_ID or NEW.`DESC`<>OLD.`DESC` THEN
  67. SET NEW.path = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.PARENT_ID);
  68. update CRM_WSKAZNIK ik set ik.path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID) where path_CRM_LISTA_ZASOBOW like concat('%',NEW.ID,'%');
  69. -- update CRM_LISTA_ZASOBOW ik set ik.path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID) where path like concat('%',OLD.`DESC`,'%') and ik.ID<>OLD.ID;
  70. END IF;
  71. END
  72. ";
  73. //!_CRM_LISTA_ZASOBOW_tree_UPDATE_after
  74. $sql['drop__CRM_LISTA_ZASOBOW_tree_UPDATE_after']="DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_UPDATE_after`";
  75. /*$sql['create__CRM_LISTA_ZASOBOW_tree_UPDATE_after']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_LISTA_ZASOBOW_tree_UPDATE_after` AFTER UPDATE ON `CRM_LISTA_ZASOBOW` FOR EACH ROW BEGIN
  76. IF NEW.PARENT_ID<>OLD.PARENT_ID or NEW.`DESC`<>OLD.`DESC` THEN
  77. -- update CRM_LISTA_ZASOBOW ik set ik.path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID) where path like concat('%',OLD.`DESC`,'%');
  78. update CRM_WSKAZNIK ik set ik.path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID_ZASOB) where path_CRM_LISTA_ZASOBOW like concat('%',OLD.`DESC`,'%');
  79. END IF;
  80. END
  81. ";
  82. */
  83. //!_CRM_LISTA_ZASOBOW_tree_INSERT
  84. $sql['drop__CRM_LISTA_ZASOBOW_tree_INSERT']="DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_INSERT`";
  85. $sql['create__CRM_LISTA_ZASOBOW_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_LISTA_ZASOBOW_tree_INSERT` BEFORE INSERT ON `CRM_LISTA_ZASOBOW` FOR EACH ROW BEGIN
  86. SET NEW.path = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.PARENT_ID);
  87. END
  88. ";
  89. //!_CRM_WSKAZNIK_tree_INSERT
  90. $sql['drop__CRM_WSKAZNIK_tree_INSERT']="DROP TRIGGER IF EXISTS `_CRM_WSKAZNIK_tree_INSERT`";
  91. $sql['create__CRM_WSKAZNIK_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_WSKAZNIK_tree_INSERT` BEFORE INSERT ON `CRM_WSKAZNIK` FOR EACH ROW BEGIN
  92. SET NEW.path_CRM_LISTA_ZASOBOW = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID_ZASOB);
  93. END
  94. ";
  95. //!_CRM_WSKAZNIK_tree_UPDATE
  96. $sql['drop__CRM_WSKAZNIK_tree_UPDATE']="DROP TRIGGER IF EXISTS `_CRM_WSKAZNIK_tree_UPDATE`";
  97. $sql['create__CRM_WSKAZNIK_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_WSKAZNIK_tree_UPDATE` BEFORE UPDATE ON `CRM_WSKAZNIK` FOR EACH ROW BEGIN
  98. IF NEW.ID_ZASOB<>OLD.ID_ZASOB THEN
  99. SET NEW.path_CRM_LISTA_ZASOBOW = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID_ZASOB);
  100. END IF;
  101. END
  102. ";
  103. //! event do aktualizacji PROJEKTOW - raz dziennie wszystkie przemapowac TODO trigger powinien aktualizowac pozostale powiazane rekordy, ktore zmienily strukture po zmianie struktury projektow
  104. $sql['event_delete_CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree']="drop event if exists _CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree_event";
  105. $sql['event_create_CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree']="CREATE DEFINER=root@localhost EVENT _CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree_event
  106. ON SCHEDULE EVERY 1 DAY
  107. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  108. DO
  109. BEGIN
  110. update CRM_LISTA_ZASOBOW set path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/',ID);
  111. update CRM_WSKAZNIK set path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/',ID_ZASOB);
  112. END
  113. ";
  114. //! CRM_ZASOBY_END
  115. //!IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path
  116. $sql['drop_IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path']="drop function if exists IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path";
  117. $sql['create_IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path']="CREATE DEFINER=`root`@`localhost` FUNCTION `IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2
  118. READS SQL DATA
  119. BEGIN
  120. DECLARE _path TEXT;
  121. DECLARE _type CHAR(255);
  122. DECLARE _lvl INT;
  123. DECLARE _cpath TEXT;
  124. DECLARE _id INT;
  125. DECLARE _id_cur INT;
  126. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  127. SET _id = COALESCE(node, @id);
  128. SET _path = _id;
  129. SET _lvl=1;
  130. the_loop: LOOP
  131. SET _lvl =_lvl+1;
  132. IF _lvl>100 THEN
  133. RETURN concat('ERROR',_path);
  134. LEAVE the_loop;
  135. END IF;
  136. SELECT P_ID,M_DIST_TYPE,ID
  137. INTO _id,_type,_id_cur
  138. FROM IN7_MK_BAZA_DYSTRYBUCJI
  139. WHERE id = _id
  140. AND COALESCE(id <> @start_with, TRUE);
  141. SET _path = CONCAT(_id, delimiter, _path);
  142. END LOOP the_loop;
  143. END";
  144. //!_IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE
  145. $sql['drop__IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE']="DROP TRIGGER IF EXISTS `_IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE`";
  146. $sql['create__IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE` BEFORE UPDATE ON `IN7_MK_BAZA_DYSTRYBUCJI` FOR EACH ROW BEGIN
  147. IF NEW.P_ID<>OLD.P_ID THEN
  148. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
  149. update IN7_DZIENNIK_KORESP ik set ik.path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID) where path like concat('%',NEW.ID,'%');
  150. END IF;
  151. END
  152. ";
  153. //!_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT
  154. $sql['drop__IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT']="DROP TRIGGER IF EXISTS `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT`";
  155. $sql['create__IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT` BEFORE INSERT ON `IN7_MK_BAZA_DYSTRYBUCJI` FOR EACH ROW BEGIN
  156. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
  157. END
  158. ";
  159. //!_IN7_DZIENNIK_KORESP_tree_INSERT
  160. $sql['drop__IN7_DZIENNIK_KORESP_tree_INSERT']="DROP TRIGGER IF EXISTS `_IN7_DZIENNIK_KORESP_tree_INSERT`";
  161. $sql['create__IN7_DZIENNIK_KORESP_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_DZIENNIK_KORESP_tree_INSERT` BEFORE INSERT ON `IN7_DZIENNIK_KORESP` FOR EACH ROW BEGIN
  162. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
  163. END
  164. ";
  165. //!_IN7_DZIENNIK_KORESP_tree_UPDATE
  166. $sql['drop__IN7_DZIENNIK_KORESP_tree_UPDATE']="DROP TRIGGER IF EXISTS `_IN7_DZIENNIK_KORESP_tree_UPDATE`";
  167. $sql['create__IN7_DZIENNIK_KORESP_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_DZIENNIK_KORESP_tree_UPDATE` BEFORE UPDATE ON `IN7_DZIENNIK_KORESP` FOR EACH ROW BEGIN
  168. IF NEW.ID_PROJECT<>OLD.ID_PROJECT THEN
  169. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
  170. END IF;
  171. END
  172. ";
  173. //! event do aktualizacji PROJEKTOW - raz dziennie wszystkie przemapowac TODO trigger powinien aktualizowac pozostale powiazane rekordy, ktore zmienily strukture po zmianie struktury projektow
  174. $sql['event_delete_IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree']="drop event if exists _IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree_event";
  175. $sql['event_create_IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree']="CREATE DEFINER=root@localhost EVENT _IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree_event
  176. ON SCHEDULE EVERY 1 DAY
  177. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  178. DO
  179. BEGIN
  180. update IN7_MK_BAZA_DYSTRYBUCJI set path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-',ID);
  181. update IN7_DZIENNIK_KORESP set path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-',ID_PROJECT);
  182. END
  183. ";
  184. //!hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop
  185. $sql['drop_hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop']="drop function if exists hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop";
  186. $sql['create_hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop']="CREATE DEFINER=`root`@`localhost` FUNCTION `hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop`(`value` INT, `maxlevel` INT) RETURNS int(11)
  187. READS SQL DATA
  188. BEGIN
  189. DECLARE _id INT;
  190. DECLARE _parent INT;
  191. DECLARE _next INT;
  192. DECLARE _i INT;
  193. DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL;
  194. SET _parent = @id;
  195. SET _id = -1;
  196. SET _i = 0;
  197. IF @id IS NULL THEN
  198. RETURN NULL;
  199. END IF;
  200. LOOP
  201. SELECT MIN(id)
  202. INTO @id
  203. FROM CRM_PROCES
  204. WHERE PARENT_ID = _parent
  205. AND id > _id
  206. AND id <> @start_with
  207. AND COALESCE(@level < maxlevel, TRUE);
  208. IF @id IS NOT NULL OR _parent = @start_with THEN
  209. SET @level = @level + 1;
  210. RETURN @id;
  211. END IF;
  212. SET @level := @level - 1;
  213. SELECT id, PARENT_ID
  214. INTO _id, _parent
  215. FROM CRM_PROCES
  216. WHERE id = _parent;
  217. SET _i = _i + 1;
  218. END LOOP;
  219. RETURN NULL;
  220. END
  221. ";
  222. $sql['drop_hierarchy_connect_by_iscycle']="drop function if exists hierarchy_connect_by_iscycle";
  223. $sql['create_hierarchy_connect_by_iscycle']="CREATE DEFINER=`root`@`localhost` FUNCTION `hierarchy_connect_by_iscycle`(`node` INT) RETURNS int(11)
  224. READS SQL DATA
  225. BEGIN
  226. DECLARE _id INT;
  227. DECLARE _loop INT;
  228. DECLARE _node INT;
  229. DECLARE EXIT HANDLER FOR NOT FOUND RETURN 0;
  230. SET _id = COALESCE(node, @id);
  231. SET _loop = 0;
  232. SET _node = 0;
  233. LOOP
  234. SELECT PARENT_ID
  235. INTO _id
  236. FROM CRM_PROCES
  237. WHERE id = _id;
  238. IF _id = @start_with THEN
  239. SET _loop := _loop + 1;
  240. END IF;
  241. IF _id = COALESCE(node, @id) THEN
  242. SET _node = _node + 1;
  243. END IF;
  244. IF _loop >= 2 THEN
  245. RETURN _node;
  246. END IF;
  247. END LOOP;
  248. END";
  249. $sql['drop_hierarchy_sys_connect_by_path']="drop function if exists hierarchy_sys_connect_by_path";
  250. $sql['create_hierarchy_sys_connect_by_path']="CREATE DEFINER=`root`@`localhost` FUNCTION `hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2
  251. READS SQL DATA
  252. BEGIN
  253. DECLARE _path TEXT;
  254. DECLARE _type CHAR(255);
  255. DECLARE _cpath TEXT;
  256. DECLARE _id INT;
  257. DECLARE _id_cur INT;
  258. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  259. SET _id = COALESCE(node, @id);
  260. SET _path = _id;
  261. LOOP
  262. SELECT PARENT_ID,TYPE,ID
  263. INTO _id,_type,_id_cur
  264. FROM CRM_PROCES
  265. WHERE id = _id
  266. AND COALESCE(id <> @start_with, TRUE);
  267. SET _path = CONCAT(_id, delimiter, _path);
  268. END LOOP;
  269. END";
  270. $sql['drop_CRM_PROCES_tree_detect_init']="drop function if exists CRM_PROCES_tree_detect_init";
  271. $sql['create_CRM_PROCES_tree_detect_init']="CREATE DEFINER=`root`@`localhost` FUNCTION `CRM_PROCES_tree_detect_init`(`node` INT) RETURNS text CHARSET latin2
  272. READS SQL DATA
  273. BEGIN
  274. DECLARE _path INT;
  275. DECLARE _type CHAR(255);
  276. DECLARE _cpath TEXT;
  277. DECLARE _id INT;
  278. DECLARE _id_cur INT;
  279. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  280. SET _id = COALESCE(node, @id);
  281. LOOP
  282. SELECT PARENT_ID,TYPE,ID
  283. INTO _id,_type,_id_cur
  284. FROM CRM_PROCES
  285. WHERE id = _id
  286. AND COALESCE(id <> @start_with, TRUE);
  287. if _type = 'PROCES_INIT' THEN
  288. SET _path = _id_cur;
  289. END IF;
  290. END LOOP;
  291. END";
  292. $sql['drop__CRM_PROCES_STATS_proc_wiev']="drop table if exists _CRM_PROCES_STATS_proc_wiev;";
  293. $sql['create__CRM_PROCES_STATS_proc_wiev']="create table _CRM_PROCES_STATS_proc_wiev
  294. SELECT hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT(' ', lvl - 1), hi.id) AS treeitem,
  295. hierarchy_sys_connect_by_path('/', hi.id) AS path,
  296. PARENT_ID, lvl,
  297. CASE
  298. WHEN lvl >= @maxlevel THEN 1
  299. ELSE COALESCE(
  300. (
  301. SELECT 0
  302. FROM CRM_PROCES hl
  303. WHERE hl.PARENT_ID = ho.id
  304. AND hl.id <> @start_with
  305. LIMIT 1
  306. ), 1)
  307. END AS is_leaf,
  308. hierarchy_connect_by_iscycle(hi.id) AS is_cycle
  309. FROM (
  310. SELECT hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop(id, @maxlevel) AS id,
  311. CAST(@level AS SIGNED) AS lvl
  312. FROM (
  313. SELECT @start_with := 0,
  314. @id := @start_with,
  315. @level := 0,
  316. @maxlevel := NULL
  317. ) vars, CRM_PROCES
  318. WHERE @id IS NOT NULL
  319. ) ho
  320. JOIN CRM_PROCES hi
  321. ON hi.id = ho.id ;";
  322. $sql['alter__CRM_PROCES_STATS_proc_wiev_unique_id']="alter table _CRM_PROCES_STATS_proc_wiev add unique(ID)";
  323. $sql['alter__CRM_PROCES_STATS_proc_wiev_modify_path']="alter table _CRM_PROCES_STATS_proc_wiev modify path varchar(255)";
  324. $sql['alter__CRM_PROCES_STATS_proc_wiev_modify_treeitem']="alter table _CRM_PROCES_STATS_proc_wiev modify treeitem varchar(255)";
  325. //!_CRM_PROCES_STATS_proc_wiev_UPDATE
  326. $sql['drop__CRM_PROCES_STATS_proc_wiev_UPDATE']="DROP TRIGGER IF EXISTS `_CRM_PROCES_STATS_proc_wiev_UPDATE`";
  327. $sql['create__CRM_PROCES_STATS_proc_wiev_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_PROCES_STATS_proc_wiev_UPDATE` AFTER UPDATE ON `CRM_PROCES` FOR EACH ROW BEGIN
  328. IF NEW.PARENT_ID<>OLD.PARENT_ID THEN
  329. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  330. replace into _CRM_PROCES_STATS_proc_wiev
  331. SELECT hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT(' ', lvl - 1), hi.id) AS treeitem,
  332. hierarchy_sys_connect_by_path('/', hi.id) AS path,
  333. PARENT_ID, lvl,
  334. CASE
  335. WHEN lvl >= @maxlevel THEN 1
  336. ELSE COALESCE(
  337. (
  338. SELECT 0
  339. FROM CRM_PROCES hl
  340. WHERE hl.PARENT_ID = ho.id
  341. AND hl.id <> @start_with
  342. LIMIT 1
  343. ), 1)
  344. END AS is_leaf,
  345. hierarchy_connect_by_iscycle(hi.id) AS is_cycle
  346. FROM (
  347. SELECT hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop(id, @maxlevel) AS id,
  348. CAST(@level AS SIGNED) AS lvl
  349. FROM (
  350. SELECT @start_with := 0,
  351. @id := @start_with,
  352. @level := 0,
  353. @maxlevel := 1000
  354. ) vars, CRM_PROCES
  355. WHERE @id IS NOT NULL
  356. ) ho
  357. JOIN CRM_PROCES hi
  358. ON hi.id = ho.id ;
  359. END IF;
  360. END
  361. ";
  362. //!_CRM_PROCES_STATS_proc_wiev_INSERT
  363. $sql['_drop__CRM_PROCES_STATS_proc_wiev_INSERT']="DROP TRIGGER IF EXISTS `_CRM_PROCES_STATS_proc_wiev_INSERT`;";
  364. $sql['create__CRM_PROCES_STATS_proc_wiev_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_PROCES_STATS_proc_wiev_INSERT` AFTER INSERT ON `CRM_PROCES` FOR EACH ROW BEGIN
  365. IF NEW.PARENT_ID>0 THEN
  366. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  367. replace into _CRM_PROCES_STATS_proc_wiev
  368. SELECT hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT(' ', lvl - 1), hi.id) AS treeitem,
  369. hierarchy_sys_connect_by_path('/', hi.id) AS path,
  370. PARENT_ID, lvl,
  371. CASE
  372. WHEN lvl >= @maxlevel THEN 1
  373. ELSE COALESCE(
  374. (
  375. SELECT 0
  376. FROM CRM_PROCES hl
  377. WHERE hl.PARENT_ID = ho.id
  378. AND hl.id <> @start_with
  379. LIMIT 1
  380. ), 1)
  381. END AS is_leaf,
  382. hierarchy_connect_by_iscycle(hi.id) AS is_cycle
  383. FROM (
  384. SELECT hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop(id, @maxlevel) AS id,
  385. CAST(@level AS SIGNED) AS lvl
  386. FROM (
  387. SELECT @start_with := 0,
  388. @id := @start_with,
  389. @level := 0,
  390. @maxlevel := 1000
  391. ) vars, CRM_PROCES
  392. WHERE @id IS NOT NULL
  393. ) ho
  394. JOIN CRM_PROCES hi
  395. ON hi.id = ho.id ;
  396. END IF;
  397. END";
  398. $sql['drop__CRM_PROCES_GOTO_CACHE']="drop table if exists _CRM_PROCES_GOTO_CACHE;";
  399. $sql_tmp['select_CRM_PROCES_GOTO_CACHE']="select t1.ID,t1.ID_PROCES_INIT,t2.IF_TRUE_GOTO , t2.IF_TRUE_GOTO_FLAG, now() as TIMESTAMP
  400. from _CRM_PROCES_STATS_proc_wiev t1
  401. inner join CRM_PROCES as t2 on ( t1.ID=t2.ID and t2.IF_TRUE_GOTO>0 and t2.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN' )
  402. -- inner join CRM_PROCES as t3 on ( t2.IF_TRUE_GOTO=t3.ID and t2.IF_TRUE_GOTO>0 and t2.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN' ) TODO@2014-09-04 trzeba rekursywnie podlapac wzajemne powiazania
  403. where t1.ID_PROCES_INIT>0
  404. ";
  405. $sql['create__CRM_PROCES_GOTO_CACHE']="create table _CRM_PROCES_GOTO_CACHE ".$sql_tmp['select_CRM_PROCES_GOTO_CACHE'] ;
  406. $sql['alter__CRM_PROCES_GOTO_CACHE_ID']="alter table _CRM_PROCES_GOTO_CACHE add index(ID)" ;
  407. $sql['alter__CRM_PROCES_GOTO_CACHE_ID_PROCES_INIT_type']="alter table _CRM_PROCES_GOTO_CACHE modify ID_PROCES_INIT int(11)" ;
  408. $sql['alter__CRM_PROCES_GOTO_CACHE_ID_PROCES_INIT']="alter table _CRM_PROCES_GOTO_CACHE add index(ID_PROCES_INIT)" ;
  409. $sql['alter__CRM_PROCES_GOTO_CACHE_IF_TRUE_GOTO']="alter table _CRM_PROCES_GOTO_CACHE add index(IF_TRUE_GOTO)" ;
  410. $sql['event_delete_CRM_PROCES_GOTO_CACHE']="drop event if exists _CRM_PROCES_GOTO_CACHE_event";
  411. $sql['event_create_CRM_PROCES_GOTO_CACHE']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_GOTO_CACHE_event
  412. ON SCHEDULE EVERY 1 DAY
  413. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  414. DO
  415. BEGIN
  416. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  417. truncate table _CRM_PROCES_INIT_STATS;
  418. replace into _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_GOTO_CACHE']." ;
  419. END
  420. ";
  421. $sql['drop__CRM_PROCES_STATS']="drop table if exists _CRM_PROCES_STATS ;";
  422. $sql_tmp['select__CRM_PROCES_STATS']="select t1.ID , t2.ID_PROCES_INIT , count(t1.ID) as CSteps
  423. , (select count(ID) from CRM_IMAGE where REMOTE_TABLE='CRM_PROCES' and REMOTE_ID=t1.ID and A_STATUS!='DELETED' ) as CPics
  424. , (select count(ID) from CRM_PROCES_HIST where ID_USERS2=t1.ID ) as CProcEdits
  425. , (select count(ID) from CRM_WSKAZNIK where ID_PROCES=t1.ID and A_STATUS!='DELETED') as CRes
  426. , (select count(cwh.ID) from CRM_WSKAZNIK_HIST cwh left join CRM_WSKAZNIK as cw on cwh.ID_USERS2=cw.ID where cw.ID_PROCES=t1.ID ) as CResorEdits
  427. , (select count(ctph.ID) from CRM_TESTY_PYTANIA_HIST as ctph left join CRM_TESTY_PYTANIA as ctp on ctp.ID=ctph.ID_USERS2 where ctp.ID_PROCES=t1.ID ) as CQuestEdits
  428. , (select count(ci.ID) from CRM_IMAGE ci left join CRM_WSKAZNIK as cw on ci.REMOTE_ID=cw.ID and ci.REMOTE_TABLE='CRM_WSKAZNIK' where cw.ID_PROCES=t1.ID ) as CResPics
  429. , (select count(ci.ID) from CRM_IMAGE ci left join CRM_WSKAZNIK as cw on ci.REMOTE_ID=cw.ID_ZASOB and ci.REMOTE_TABLE='CRM_LISTA_ZASOBOW' where cw.ID_PROCES=t1.ID ) as CResPicsS
  430. , (select count(ID) from CRM_TESTY_PYTANIA where ID_PROCES=t1.ID ) as CQuest
  431. , (select count(ID) from CRM_TESTY_PYTANIA where ID_PROCES=t1.ID and TEST_TYPE='TEORETYCZNY' ) as CQuestTeor
  432. , (select count(ID) from CRM_TESTY_PYTANIA where ID_PROCES=t1.ID and TEST_TYPE='PRAKTYCZNY' ) as CQuestPract -- pytania praktyczne
  433. , (select count(cto.ID) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID where ctp.ID_PROCES=t1.ID ) as CQRes -- udzielono odpowiedzi
  434. , (select count(cto.ID) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID where ctp.ID_PROCES=t1.ID and ctp.TEST_TYPE='PRAKTYCZNY' ) as CQPRes -- udzielono odpowiedzi praktycznych
  435. , (select count(cto.ID) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID where ctp.ID_PROCES=t1.ID and cto.OCENA<1 ) as CQErrRes -- udzielono slabych odpowiedzi
  436. , (select count(distinct(au.ID)) from ADMIN_USERS as au left join CRM_AUTH_PROFILE as cap on au.ID=cap.REMOTE_ID and
  437. cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS!='DELETED' left join CRM_WSKAZNIK as cw on cap.ID_ZASOB=cw.ID_ZASOB and cw.A_STATUS!='DELETED' where cw.ID_PROCES=t1.ID and au.A_STATUS='NORMAL' ) as CWorkers -- pracownikow aktualnie wykonujacych proces - blad w strukturach ADMIN_USERS statusy WAITING
  438. -- , (select count(distinct(au.ID)) from ADMIN_USERS as au
  439. -- left join CRM_AUTH_PROFILE as cap on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS!='DELETED'
  440. -- left join CRM_WSKAZNIK as cw on cap.ID_ZASOB=cw.ID_ZASOB and cw.A_STATUS!='DELETED'
  441. -- left join CRM_TESTY_ODPOWIEDZI as cto on cto.A_RECORD_CREATE_AUTHOR=au.ADM_ACCOUNT
  442. -- left join CRM_TESTY_PYTANIA as ctp on ctp.ID=cto.ID_PYTANIE
  443. -- left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  444. -- where cw.ID_PROCES=cps.ID and au.A_STATUS='NORMAL' and ctp.ID_PROCES=t1.ID and cps.ID_PROCES_INIT=t1.ID ) as CQAWorkers -- pracownikow ktorzy maja aktualny proces
  445. , (select count(distinct(cto.ID)) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID
  446. left join CRM_WSKAZNIK as cw on cw.ID_PROCES=ctp.ID_PROCES
  447. left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  448. left join CRM_WSKAZNIK as cw1 on cw1.ID_PROCES=cps.ID_PROCES_INIT
  449. left join CRM_AUTH_PROFILE as cap on cap.ID_ZASOB=cw1.ID_ZASOB
  450. left join ADMIN_USERS as au on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS' and au.A_STATUS='NORMAL'
  451. where cw.ID_PROCES = t1.ID and au.ADM_ACCOUNT=cto.A_RECORD_CREATE_AUTHOR and cto.OCENA>1 and ctp.TEST_TYPE='TEORETYCZNY') as CQTAnsOk -- pracownicy ktorzy sa przyporzadkowani do procesow ile udzielili odpowiedzi
  452. , (select count(distinct(cto.ID)) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID
  453. left join CRM_WSKAZNIK as cw on cw.ID_PROCES=ctp.ID_PROCES
  454. left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  455. left join CRM_WSKAZNIK as cw1 on cw1.ID_PROCES=cps.ID_PROCES_INIT
  456. left join CRM_AUTH_PROFILE as cap on cap.ID_ZASOB=cw1.ID_ZASOB
  457. left join ADMIN_USERS as au on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS' and au.A_STATUS='NORMAL'
  458. where cw.ID_PROCES = t1.ID and au.ADM_ACCOUNT=cto.A_RECORD_CREATE_AUTHOR and cto.OCENA>1 and ctp.TEST_TYPE='PRAKTYCZNY') as CQPWAnsOk -- pracownicy ktorzy sa przyporzadkowani do procesow ile udzielili odpowiedzi
  459. , (select count(distinct(cto.ID)) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID
  460. left join CRM_WSKAZNIK as cw on cw.ID_PROCES=ctp.ID_PROCES
  461. left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  462. left join CRM_WSKAZNIK as cw1 on cw1.ID_PROCES=cps.ID_PROCES_INIT
  463. left join CRM_AUTH_PROFILE as cap on cap.ID_ZASOB=cw1.ID_ZASOB
  464. left join ADMIN_USERS as au on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS'
  465. where cw.ID_PROCES = t1.ID and au.ADM_ACCOUNT=cto.A_RECORD_CREATE_AUTHOR and cto.OCENA>1 and ctp.TEST_TYPE='PRAKTYCZNY') as CQPAnsOk -- pracownicy ktorzy sa przyporzadkowani do procesow ile udzielili odpowiedzi praktycznych
  466. , (select min(A_RECORD_CREATE_DATE) from CRM_WSKAZNIK where ID_PROCES=t1.ID and A_STATUS!='DELETED') as MinResCreDate
  467. , (select max(A_RECORD_UPDATE_DATE) from CRM_WSKAZNIK where ID_PROCES=t1.ID and A_STATUS!='DELETED') as MaxResUpdDate
  468. , (select min(A_RECORD_CREATE_DATE) from CRM_PROCES where ID=t1.ID and A_STATUS!='DELETED') as MinProcCreDate
  469. , (select max(A_RECORD_UPDATE_DATE) from CRM_PROCES where ID=t1.ID and A_STATUS!='DELETED') as MaxProcUpdDate
  470. from
  471. _CRM_PROCES_STATS_proc_wiev as t2 join CRM_PROCES as t1 on t1.ID=t2.ID
  472. -- where t2.ID_PROCES_INIT=994
  473. -- group by t2.ID_PROCES_INIT
  474. group by t1.ID
  475. order by t1.A_RECORD_UPDATE_DATE desc";
  476. $sql['create__CRM_PROCES_STATS']="create table _CRM_PROCES_STATS
  477. ".$sql_tmp['select__CRM_PROCES_STATS'] ;
  478. $sql['alter__CRM_PROCES_STATS_unique_id']="alter table _CRM_PROCES_STATS add unique(ID)";
  479. $sql['drop__CRM_PROCES_INIT_STATS']="drop table if exists _CRM_PROCES_INIT_STATS";
  480. $sql_tmp['select_CRM_PROCES_INIT_STATS']="select t1.ID_PROCES_INIT as ID,left(t2.`DESC`,100) as `DESC`,t3.path, t3.lvl,sum(CSteps) as SCSteps,sum(CPics) as SCPics ,sum(CProcEdits+CResorEdits) as SCPREdits,
  481. sum(CQuestEdits) as SCQuestEdits,sum(CResPics) as SCResPics , sum(CResPicsS) as SCResPicsS,sum(CQuest) as SCQuest,sum(CQuestPract) as SCQuestPract,
  482. sum(CQRes) as SCQRes,sum(CQPRes) as SCQPRes,sum(CQErrRes) as CQErrRes,sum(CWorkers) as SCWorkers,sum(CQTAnsOk) as SCQTAnsOk,sum(CQPWAnsOk) as CQPWAnsOk, sum(CQPAnsOk) as SCQPAnsOk
  483. ,(select count(ID) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT and TEST_TYPE='TEORETYCZNY') as STestTeor
  484. ,(select count(ID) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT and TEST_TYPE='PRAKTYCNZY') as STestPrakt
  485. ,(select avg(OCENA) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT) as AvgMark
  486. ,(select avg(DISCOUNT) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT) as AvgDiscount
  487. ,min(MinProcCreDate) as MinProcCreDate , max(MaxProcUpdDate) as MaxProcUpdDate
  488. -- todo lista osob ktora powinna zdac test teoretyczny i taka sama praktyczny wyliczana w oparciu o to czy sa testy i ile jest stanowisk
  489. , (
  490. select if ((select sum(CQuestTeor) from _CRM_PROCES_STATS where ID_PROCES_INIT=t1.ID_PROCES_INIT)>0,
  491. concat('brak:',sum(if(ct.ID<1 or ct.ID is null ,1,0)),'/popraw:' ,
  492. sum(if(ct.OCENA > 0 and ct.OCENA<2.5,1,0)) ) ,0) from ADMIN_USERS as au
  493. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
  494. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB
  495. left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cw.ID_PROCES and ct.ID_TESTER=au.ID and ct.TEST_TYPE='TEORETYCZNY'
  496. where au.A_STATUS='NORMAL' and cw.ID_PROCES=t1.ID_PROCES_INIT
  497. ) as CTTWinfo
  498. , (
  499. select if ((select sum(CQuestTeor) from _CRM_PROCES_STATS where ID_PROCES_INIT=t1.ID_PROCES_INIT)>0,
  500. concat('brak:',sum(if(ct.ID<1 or ct.ID is null ,1,0)),'/popraw:' ,
  501. sum(if(ct.OCENA > 0 and ct.OCENA<2.5,1,0)) ) ,0) from ADMIN_USERS as au
  502. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
  503. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB
  504. left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cw.ID_PROCES and ct.ID_TESTER=au.ID and ct.TEST_TYPE='PRAKTYCZNY'
  505. where au.A_STATUS='NORMAL' and cw.ID_PROCES=t1.ID_PROCES_INIT
  506. ) as CTPWinfo
  507. , '' as A_ADM_COMPANY, '' as A_CLASSIFIED
  508. from _CRM_PROCES_STATS as t1
  509. left join CRM_PROCES as t2 on t1.ID_PROCES_INIT=t2.ID
  510. left join _CRM_PROCES_STATS_proc_wiev as t3 on t3.ID=t1.ID_PROCES_INIT
  511. group by t1.ID_PROCES_INIT
  512. ";
  513. $sql['create__CRM_PROCES_INIT_STATS']="create table _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_INIT_STATS'];
  514. $sql['alter__CRM_PROCES_INIT_STATS_mod_id']="alter table _CRM_PROCES_INIT_STATS modify ID int(11)";
  515. $sql['alter__CRM_PROCES_INIT_STATS_add_uniq']="alter table _CRM_PROCES_INIT_STATS add unique(ID)";
  516. $sql['alter__CRM_PROCES_INIT_STATS_SCPREdits']="alter table `_CRM_PROCES_INIT_STATS` CHANGE `SCPREdits` `SCPREdits` decimal(42,0)";
  517. $sql['event_delete_CRM_PROCES_INIT_STATS']="drop event if exists _CRM_PROCES_INIT_STATS_event";
  518. $sql['event_create_CRM_PROCES_INIT_STATS']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_INIT_STATS_event
  519. ON SCHEDULE EVERY 1 DAY
  520. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  521. DO
  522. BEGIN
  523. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  524. replace into _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_INIT_STATS']." ;
  525. END
  526. ";
  527. $sql['event_delete_CRM_PROCES_STATS']="drop event if exists _CRM_PROCES_STATS_event";
  528. $sql['event_create_CRM_PROCES_STATS']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_STATS_event
  529. ON SCHEDULE EVERY 1 DAY
  530. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  531. DO
  532. BEGIN
  533. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  534. replace into _CRM_PROCES_STATS ".$sql_tmp['select__CRM_PROCES_STATS']." ;
  535. END
  536. ";
  537. /*
  538. -- stworzenie tabeli do planowania harmonogramow testow i szkolen
  539. -- proponuje widok!
  540. -- drop table if exists _CRM_PROCES_USER_STATS;
  541. -- create table _CRM_PROCES_USER_STATS
  542. -- DROP VIEW _CRM_PROCES_USER_STATS_wiev;
  543. */
  544. $sql['drop_CRM_LISTA_ZASOBOW_tree_detect_kierownik']="drop function if exists CRM_LISTA_ZASOBOW_tree_detect_kierownik";
  545. $sql['create_CRM_LISTA_ZASOBOW_tree_detect_kierownik']="CREATE DEFINER=`root`@`localhost` FUNCTION `CRM_LISTA_ZASOBOW_tree_detect_kierownik`(`node` INT) RETURNS text CHARSET latin2
  546. READS SQL DATA
  547. BEGIN
  548. DECLARE _path INT;
  549. DECLARE _type CHAR(255);
  550. DECLARE _cpath TEXT;
  551. DECLARE _id INT;
  552. DECLARE _id_cur INT;
  553. DECLARE _group_name CHAR(255);
  554. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _group_name;
  555. SET _id = COALESCE(node, @id);
  556. SELECT NAME from LDAP_GROUPS where ID=node
  557. INTO _group_name;
  558. label1: LOOP
  559. SELECT t1.PARENT_ID,t1.TYPE,t1.ID
  560. INTO _id,_type,_id_cur
  561. FROM CRM_LISTA_ZASOBOW t1
  562. WHERE t1.id = _id
  563. -- AND COALESCE(id <> @start_with, TRUE);
  564. ;
  565. if _type = 'STANOWISKO' and node!=_id_cur THEN
  566. SET _path = _id_cur;
  567. SELECT NAME from LDAP_GROUPS where ID=_id_cur
  568. INTO _group_name;
  569. RETURN _group_name;
  570. LEAVE label1;
  571. END IF;
  572. END LOOP label1;
  573. END";
  574. $sql['replace__CRM_PROCES_USER_STATS_wiev_to_group']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev_to_group as
  575. select concat(au.ID,cw.ID,0) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  576. ,au.ADM_ACCOUNT
  577. ,cps.path
  578. , 'TEORETYCZNY' as TEST_TYPE,cps.SCQuest , max(ct.OCENA) as OCENA , max(ct.TEST_END) as TEST_END
  579. -- , max(if(ct.TEST_TYPE='TEORETYCZNY',ct.OCENA,NULL)) as OCENA_T
  580. -- , max(if(ct.TEST_TYPE='PRAKTYCZNY',ct.OCENA,NULL)) as OCENA_P
  581. , au.EMPLOYEE_TYPE , au.A_RECORD_CREATE_DATE, au.A_RECORD_UPDATE_DATE , au.L_APPOITMENT_DATE, au.L_APPOITMENT_INFO, au.L_APPOITMENT_USER
  582. from ADMIN_USERS as au
  583. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
  584. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  585. left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cw.ID_PROCES and ct.ID_TESTER=au.ID and ct.TEST_TYPE='TEORETYCZNY'
  586. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
  587. where au.A_STATUS='NORMAL'
  588. and cps.SCQuest>0
  589. group by au.ID, cps.ID
  590. -- order by ct.OCENA desc
  591. -- limit 10
  592. -- dodatkowe GOTO_AND_RETURN
  593. union
  594. select concat(au.ID,cw.ID,1) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  595. ,au.ADM_ACCOUNT
  596. ,cps.path
  597. , 'TEORETYCZNY' as TEST_TYPE,cps.SCQuest , max(ct.OCENA) as OCENA , max(ct.TEST_END) as TEST_END
  598. -- , max(if(ct.TEST_TYPE='TEORETYCZNY',ct.OCENA,NULL)) as OCENA_T
  599. -- , max(if(ct.TEST_TYPE='PRAKTYCZNY',ct.OCENA,NULL)) as OCENA_P
  600. , au.EMPLOYEE_TYPE , au.A_RECORD_CREATE_DATE, au.A_RECORD_UPDATE_DATE , au.L_APPOITMENT_DATE, au.L_APPOITMENT_INFO, au.L_APPOITMENT_USER
  601. from ADMIN_USERS as au
  602. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
  603. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  604. left join _CRM_PROCES_GOTO_CACHE as cpgc on cpgc.ID_PROCES_INIT=cw.ID_PROCES
  605. left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cpgc.IF_TRUE_GOTO and ct.ID_TESTER=au.ID and ct.TEST_TYPE='TEORETYCZNY'
  606. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cpgc.IF_TRUE_GOTO
  607. where au.A_STATUS='NORMAL'
  608. and cps.SCQuest>0
  609. group by au.ID, cps.ID
  610. union
  611. select concat(au.ID,cw.ID,2) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  612. ,au.ADM_ACCOUNT
  613. ,cps.path
  614. , 'PRAKTYCZNY' as TEST_TYPE, cps.SCQuestPract , max(ct.OCENA) as OCENA, max(ct.TEST_END) as TEST_END
  615. , au.EMPLOYEE_TYPE , au.A_RECORD_CREATE_DATE, au.A_RECORD_UPDATE_DATE , au.L_APPOITMENT_DATE, au.L_APPOITMENT_INFO, au.L_APPOITMENT_USER
  616. from ADMIN_USERS as au
  617. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
  618. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  619. left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cw.ID_PROCES and ct.ID_TESTER=au.ID and ct.TEST_TYPE='PRAKTYCZNY'
  620. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
  621. where au.A_STATUS='NORMAL'
  622. and cps.SCQuestPract>0
  623. group by au.ID,cps.ID
  624. -- dodatkowe GOTO_AND_RETURN
  625. union
  626. select concat(au.ID,cw.ID,3) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  627. ,au.ADM_ACCOUNT
  628. ,cps.path
  629. , 'PRAKTYCZNY' as TEST_TYPE, cps.SCQuestPract , max(ct.OCENA) as OCENA, max(ct.TEST_END) as TEST_END
  630. , au.EMPLOYEE_TYPE, au.A_RECORD_CREATE_DATE, au.A_RECORD_UPDATE_DATE , au.L_APPOITMENT_DATE, au.L_APPOITMENT_INFO, au.L_APPOITMENT_USER
  631. from ADMIN_USERS as au
  632. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
  633. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  634. left join _CRM_PROCES_GOTO_CACHE as cpgc on cpgc.ID_PROCES_INIT=cw.ID_PROCES
  635. left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cpgc.IF_TRUE_GOTO and ct.ID_TESTER=au.ID and ct.TEST_TYPE='PRAKTYCZNY'
  636. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cpgc.IF_TRUE_GOTO
  637. where au.A_STATUS='NORMAL'
  638. and cps.SCQuestPract>0
  639. group by au.ID,cps.ID
  640. ";
  641. $sql['replace__CRM_PROCES_USER_STATS_wiev']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev as
  642. select ID,ID_PROCES, `DESC`, ADM_ACCOUNT, EMPLOYEE_TYPE,A_RECORD_CREATE_DATE, A_RECORD_UPDATE_DATE ,L_APPOITMENT_DATE,L_APPOITMENT_INFO, L_APPOITMENT_USER, path,TEST_TYPE,SCQuest,OCENA,TEST_END
  643. from _CRM_PROCES_USER_STATS_wiev_to_group
  644. group by ADM_ACCOUNT,ID_PROCES,TEST_TYPE ";
  645. $sql['event_drop_CRM_PROCES_USER_OCENA_OKRES']="drop event if exists CRM_PROCES_USER_OCENA_OKRES_event ";
  646. $sql['event_create_CRM_PROCES_USER_OCENA_OKRES']=" CREATE DEFINER=root@localhost EVENT CRM_PROCES_USER_OCENA_OKRES_event
  647. ON SCHEDULE EVERY 1 DAY
  648. STARTS str_to_date( date_format(now(), '%Y%m%d 0600'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  649. DO
  650. BEGIN
  651. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  652. insert ignore into CRM_PROCES_USER_OCENA_OKRES (ID,CW_ID,DATE,ID_PROCES,`DESC`,OPIS_ZASOB,L_APPOITMENT_USER,A_CLASSIFIED,A_ADM_COMPANY,FUNCTION)
  653. select '', group_concat(cw.ID) as CW_ID , now() ,cps.ID as ID_PROCES , left(cps.`DESC`,200) as `DESC` , group_concat(cw.`OPIS_ZASOB`) as OPIS_ZASOB
  654. ,au.ADM_ACCOUNT ,CRM_LISTA_ZASOBOW_tree_detect_kierownik(cw.ID_ZASOB),CRM_LISTA_ZASOBOW_tree_detect_kierownik(cw.ID_ZASOB),concat('[',cz.ID,'] ',cz.`DESC`)
  655. from ADMIN_USERS as au
  656. left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING') and cap.SHOW_IN_PERIOD_MARK!='NO'
  657. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  658. left join CRM_LISTA_ZASOBOW as cz on cz.ID=cw.ID_ZASOB
  659. -- left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cw.ID_PROCES and ct.ID_TESTER=au.ID and ct.TEST_TYPE='TEORETYCZNY'
  660. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
  661. where au.A_STATUS='NORMAL' and cps.ID is not null
  662. -- and cps.SCQuest>0
  663. group by au.ID, cps.ID , cw.ID;
  664. END
  665. ";
  666. $sql['event_shedule_init']="SET GLOBAL event_scheduler = ON";
  667. foreach($sql as $ind=>$sql_) {
  668. DEBUG_S(-3,'wykonuje zapytanie sql dla '.$ind,$sql_,__FILE__,__FUNCTION__,__LINE__);
  669. if(!empty($DB)) {
  670. $DB->query($sql_) or die('Problem z zapytaniem '.mysql_error());
  671. } else {
  672. DB::query($sql_) or die('Problem z zapytaniem '.mysql_error());
  673. }
  674. }
  675. //-- alter table _CRM_PROCES_USER_STATS add unique(ID,TEST_TYPE,ADM_ACCOUNT);
  676. } //eof func
  677. ?>