superedit-DB_PROCEDURES_CREATE.php 68 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183
  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. $sql['KONTAKTY_view']="
  35. CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `KONTAKTY_view` AS select `u`.`ID` AS `ID`,`u`.`ADM_ACCOUNT` AS `ADM_ACCOUNT`,`u`.`ADM_NAME` AS `ADM_NAME`,`u`.`EMPLOYEE_TYPE` AS `EMPLOYEE_TYPE`,`u`.`ADM_PHONE` AS `ADM_PHONE`,`u`.`EMAIL` AS `EMAIL`,`u`.`A_STATUS` AS `A_STATUS`,`u`.`A_CLASSIFIED` AS `A_CLASSIFIED`,`u`.`A_ADM_COMPANY` AS `A_ADM_COMPANY`,group_concat(`ua`.`ID_ZASOB` separator ',') AS `ID_ZASOB_CSV_NUM` from (`ADMIN_USERS` `u` left join `CRM_AUTH_PROFILE` `ua` on(((`ua`.`REMOTE_ID` = `u`.`ID`) and (`ua`.`REMOTE_TABLE` = 'ADMIN_USERS')))) where (`u`.`A_STATUS` in ('WAITING','NORMAL','MONITOR','WARNING')) group by `u`.`ID`;
  36. ";
  37. //! CRM_ZASOBY_BEGIN
  38. $sql['drop_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="drop function if exists CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path";
  39. $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
  40. READS SQL DATA
  41. BEGIN
  42. DECLARE _path TEXT;
  43. DECLARE _type CHAR(255);
  44. DECLARE _lvl INT;
  45. DECLARE _cpath TEXT;
  46. DECLARE _id INT;
  47. DECLARE _id_cur INT;
  48. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  49. SET _id = COALESCE(node, @id);
  50. SET _path = '';
  51. SET _lvl=1;
  52. the_loop: LOOP
  53. SET _lvl =_lvl+1;
  54. IF _lvl>100 THEN
  55. RETURN concat('ERROR',_path);
  56. LEAVE the_loop;
  57. END IF;
  58. SELECT PARENT_ID,`DESC`,ID
  59. INTO _id,_type,_id_cur
  60. FROM CRM_LISTA_ZASOBOW
  61. WHERE id = _id
  62. AND COALESCE(id <> @start_with, TRUE);
  63. SET _path = CONCAT(_type, delimiter, _path);
  64. END LOOP the_loop;
  65. END";
  66. //!_CRM_LISTA_ZASOBOW_tree_UPDATE
  67. $sql['drop__CRM_LISTA_ZASOBOW_tree_UPDATE']="DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_UPDATE`";
  68. $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
  69. IF NEW.PARENT_ID<>OLD.PARENT_ID or NEW.`DESC`<>OLD.`DESC` THEN
  70. SET NEW.path = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.PARENT_ID);
  71. 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,'%');
  72. -- 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;
  73. END IF;
  74. END
  75. ";
  76. //!_CRM_LISTA_ZASOBOW_tree_UPDATE_after
  77. $sql['drop__CRM_LISTA_ZASOBOW_tree_UPDATE_after']="DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_UPDATE_after`";
  78. /*$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
  79. IF NEW.PARENT_ID<>OLD.PARENT_ID or NEW.`DESC`<>OLD.`DESC` THEN
  80. -- update CRM_LISTA_ZASOBOW ik set ik.path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID) where path like concat('%',OLD.`DESC`,'%');
  81. 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`,'%');
  82. END IF;
  83. END
  84. ";
  85. */
  86. //!_CRM_LISTA_ZASOBOW_tree_INSERT
  87. $sql['drop__CRM_LISTA_ZASOBOW_tree_INSERT']="DROP TRIGGER IF EXISTS `_CRM_LISTA_ZASOBOW_tree_INSERT`";
  88. $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
  89. SET NEW.path = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.PARENT_ID);
  90. END
  91. ";
  92. //!_CRM_WSKAZNIK_tree_INSERT
  93. $sql['drop__CRM_WSKAZNIK_tree_INSERT']="DROP TRIGGER IF EXISTS `_CRM_WSKAZNIK_tree_INSERT`";
  94. $sql['create__CRM_WSKAZNIK_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_WSKAZNIK_tree_INSERT` BEFORE INSERT ON `CRM_WSKAZNIK` FOR EACH ROW BEGIN
  95. SET NEW.path_CRM_LISTA_ZASOBOW = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID_ZASOB);
  96. END
  97. ";
  98. //!_CRM_WSKAZNIK_tree_UPDATE
  99. $sql['drop__CRM_WSKAZNIK_tree_UPDATE']="DROP TRIGGER IF EXISTS `_CRM_WSKAZNIK_tree_UPDATE`";
  100. $sql['create__CRM_WSKAZNIK_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_WSKAZNIK_tree_UPDATE` BEFORE UPDATE ON `CRM_WSKAZNIK` FOR EACH ROW BEGIN
  101. IF NEW.ID_ZASOB<>OLD.ID_ZASOB THEN
  102. SET NEW.path_CRM_LISTA_ZASOBOW = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID_ZASOB);
  103. END IF;
  104. END
  105. ";
  106. //! event do aktualizacji PROJEKTOW - raz dziennie wszystkie przemapowac TODO trigger powinien aktualizowac pozostale powiazane rekordy, ktore zmienily strukture po zmianie struktury projektow
  107. $sql['event_delete_CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree']="drop event if exists _CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree_event";
  108. $sql['event_create_CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree']="CREATE DEFINER=root@localhost EVENT _CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree_event
  109. ON SCHEDULE EVERY 1 DAY
  110. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  111. DO
  112. BEGIN
  113. update CRM_LISTA_ZASOBOW set path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/',ID);
  114. update CRM_WSKAZNIK set path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/',ID_ZASOB);
  115. END
  116. ";
  117. //! CRM_ZASOBY_END
  118. //!IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path
  119. $sql['drop_IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path']="drop function if exists IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path";
  120. $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
  121. READS SQL DATA
  122. BEGIN
  123. DECLARE _path TEXT;
  124. DECLARE _type CHAR(255);
  125. DECLARE _lvl INT;
  126. DECLARE _cpath TEXT;
  127. DECLARE _id INT;
  128. DECLARE _id_cur INT;
  129. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  130. SET _id = COALESCE(node, @id);
  131. SET _path = _id;
  132. SET _lvl=1;
  133. the_loop: LOOP
  134. SET _lvl =_lvl+1;
  135. IF _lvl>100 THEN
  136. RETURN concat('ERROR',_path);
  137. LEAVE the_loop;
  138. END IF;
  139. SELECT P_ID,M_DIST_TYPE,ID
  140. INTO _id,_type,_id_cur
  141. FROM IN7_MK_BAZA_DYSTRYBUCJI
  142. WHERE id = _id
  143. AND COALESCE(id <> @start_with, TRUE);
  144. SET _path = CONCAT(_id, delimiter, _path);
  145. END LOOP the_loop;
  146. END";
  147. //!_IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE
  148. $sql['drop__IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE']="DROP TRIGGER IF EXISTS `_IN7_MK_BAZA_DYSTRYBUCJI_tree_UPDATE`";
  149. $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
  150. IF NEW.P_ID<>OLD.P_ID THEN
  151. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
  152. 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,'%');
  153. update PROBLEMS ik set ik.ID_PROJECT_path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID) where ID_PROJET_path like concat('%',NEW.ID,'%');
  154. END IF;
  155. END
  156. ";
  157. //!_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT
  158. $sql['drop__IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT']="DROP TRIGGER IF EXISTS `_IN7_MK_BAZA_DYSTRYBUCJI_tree_INSERT`";
  159. $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
  160. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.P_ID);
  161. END
  162. ";
  163. //!_IN7_DZIENNIK_KORESP_tree_INSERT
  164. $sql['drop__IN7_DZIENNIK_KORESP_tree_INSERT']="DROP TRIGGER IF EXISTS `_IN7_DZIENNIK_KORESP_tree_INSERT`";
  165. $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
  166. IF NEW.ID_PROJECT IS NOT NULL THEN
  167. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
  168. END IF;
  169. END
  170. ";
  171. //!_IN7_DZIENNIK_KORESP_tree_UPDATE
  172. $sql['drop__IN7_DZIENNIK_KORESP_tree_UPDATE']="DROP TRIGGER IF EXISTS `_IN7_DZIENNIK_KORESP_tree_UPDATE`";
  173. $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
  174. IF NEW.ID_PROJECT is null THEN
  175. SET NEW.path = '';
  176. ELSEIF OLD.ID_PROJECT IS NULL or NEW.ID_PROJECT<>OLD.ID_PROJECT THEN
  177. SET NEW.path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
  178. END IF;
  179. END
  180. ";
  181. //!_PROBLEMS_tree_INSERT
  182. $sql['drop__PROBLEMS_tree_INSERT']="DROP TRIGGER IF EXISTS `_PROBLEMS_tree_INSERT`";
  183. $sql['create__PROBLEMS_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_PROBLEMS_tree_INSERT` BEFORE INSERT ON `PROBLEMS` FOR EACH ROW BEGIN
  184. IF NEW.ID_PROJECT IS NOT NULL THEN
  185. SET NEW.ID_PROJECT_path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
  186. END IF;
  187. END
  188. ";
  189. //!_PROBLEMS_tree_UPDATE
  190. $sql['drop__PROBLEMS_tree_UPDATE']="DROP TRIGGER IF EXISTS `_PROBLEMS_tree_UPDATE`";
  191. $sql['create__PROBLEMS_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_PROBLEMS_tree_UPDATE` BEFORE UPDATE ON `PROBLEMS` FOR EACH ROW BEGIN
  192. IF NEW.ID_PROJECT is null THEN
  193. SET NEW.ID_PROJECT_path = '';
  194. ELSEIF OLD.ID_PROJECT IS NULL or NEW.ID_PROJECT<>OLD.ID_PROJECT THEN
  195. SET NEW.ID_PROJECT_path = IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-', NEW.ID_PROJECT);
  196. END IF;
  197. END
  198. ";
  199. //! event do aktualizacji PROJEKTOW - raz dziennie wszystkie przemapowac TODO trigger powinien aktualizowac pozostale powiazane rekordy, ktore zmienily strukture po zmianie struktury projektow
  200. $sql['event_delete_IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree']="drop event if exists _IN7_MK_BAZA_DYSTRYBUCJI__IN7_DZIENNIK_KORESP_tree_event";
  201. $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
  202. ON SCHEDULE EVERY 1 DAY
  203. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  204. DO
  205. BEGIN
  206. update IN7_MK_BAZA_DYSTRYBUCJI set path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-',ID);
  207. update IN7_DZIENNIK_KORESP set path=IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path('-',ID_PROJECT);
  208. END
  209. ";
  210. //!hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop
  211. $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";
  212. $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)
  213. READS SQL DATA
  214. BEGIN
  215. DECLARE _id INT;
  216. DECLARE _parent INT;
  217. DECLARE _next INT;
  218. DECLARE _i INT;
  219. DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL;
  220. SET _parent = @id;
  221. SET _id = -1;
  222. SET _i = 0;
  223. IF @id IS NULL THEN
  224. RETURN NULL;
  225. END IF;
  226. LOOP
  227. SELECT MIN(id)
  228. INTO @id
  229. FROM CRM_PROCES
  230. WHERE PARENT_ID = _parent
  231. AND id > _id
  232. AND id <> @start_with
  233. AND COALESCE(@level < maxlevel, TRUE);
  234. IF @id IS NOT NULL OR _parent = @start_with THEN
  235. SET @level = @level + 1;
  236. RETURN @id;
  237. END IF;
  238. SET @level := @level - 1;
  239. SELECT id, PARENT_ID
  240. INTO _id, _parent
  241. FROM CRM_PROCES
  242. WHERE id = _parent;
  243. SET _i = _i + 1;
  244. END LOOP;
  245. RETURN NULL;
  246. END
  247. ";
  248. $sql['drop_hierarchy_connect_by_iscycle']="drop function if exists hierarchy_connect_by_iscycle";
  249. $sql['create_hierarchy_connect_by_iscycle']="CREATE DEFINER=`root`@`localhost` FUNCTION `hierarchy_connect_by_iscycle`(`node` INT) RETURNS int(11)
  250. READS SQL DATA
  251. BEGIN
  252. DECLARE _id INT;
  253. DECLARE _loop INT;
  254. DECLARE _node INT;
  255. DECLARE EXIT HANDLER FOR NOT FOUND RETURN 0;
  256. SET _id = COALESCE(node, @id);
  257. SET _loop = 0;
  258. SET _node = 0;
  259. LOOP
  260. SELECT PARENT_ID
  261. INTO _id
  262. FROM CRM_PROCES
  263. WHERE id = _id;
  264. IF _id = @start_with THEN
  265. SET _loop := _loop + 1;
  266. END IF;
  267. IF _id = COALESCE(node, @id) THEN
  268. SET _node = _node + 1;
  269. END IF;
  270. IF _loop >= 2 THEN
  271. RETURN _node;
  272. END IF;
  273. END LOOP;
  274. END";
  275. $sql['drop_hierarchy_sys_connect_by_path']="drop function if exists hierarchy_sys_connect_by_path";
  276. $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
  277. READS SQL DATA
  278. BEGIN
  279. DECLARE _path TEXT;
  280. DECLARE _type CHAR(255);
  281. DECLARE _cpath TEXT;
  282. DECLARE _id INT;
  283. DECLARE _id_cur INT;
  284. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  285. SET _id = COALESCE(node, @id);
  286. SET _path = _id;
  287. LOOP
  288. SELECT PARENT_ID,TYPE,ID
  289. INTO _id,_type,_id_cur
  290. FROM CRM_PROCES
  291. WHERE id = _id
  292. AND COALESCE(id <> @start_with, TRUE);
  293. SET _path = CONCAT(_id, delimiter, _path);
  294. END LOOP;
  295. END";
  296. $sql['drop_CRM_PROCES_tree_detect_init']="drop function if exists CRM_PROCES_tree_detect_init";
  297. $sql['create_CRM_PROCES_tree_detect_init']="CREATE DEFINER=`root`@`localhost` FUNCTION `CRM_PROCES_tree_detect_init`(`node` INT) RETURNS text CHARSET latin2
  298. READS SQL DATA
  299. BEGIN
  300. DECLARE _path INT;
  301. DECLARE _type CHAR(255);
  302. DECLARE _cpath TEXT;
  303. DECLARE _id INT;
  304. DECLARE _id_cur INT;
  305. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
  306. SET _id = COALESCE(node, @id);
  307. LOOP
  308. SELECT PARENT_ID,TYPE,ID
  309. INTO _id,_type,_id_cur
  310. FROM CRM_PROCES
  311. WHERE id = _id
  312. AND COALESCE(id <> @start_with, TRUE);
  313. if _type = 'PROCES_INIT' THEN
  314. SET _path = _id_cur;
  315. END IF;
  316. END LOOP;
  317. END";
  318. $sql['drop__CRM_PROCES_STATS_proc_wiev']="drop table if exists _CRM_PROCES_STATS_proc_wiev;";
  319. $sql['create__CRM_PROCES_STATS_proc_wiev']="create table _CRM_PROCES_STATS_proc_wiev
  320. SELECT hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT(' ', lvl - 1), hi.id) AS treeitem,
  321. hierarchy_sys_connect_by_path('/', hi.id) AS path,
  322. PARENT_ID, lvl,
  323. CASE
  324. WHEN lvl >= @maxlevel THEN 1
  325. ELSE COALESCE(
  326. (
  327. SELECT 0
  328. FROM CRM_PROCES hl
  329. WHERE hl.PARENT_ID = ho.id
  330. AND hl.id <> @start_with
  331. LIMIT 1
  332. ), 1)
  333. END AS is_leaf,
  334. hierarchy_connect_by_iscycle(hi.id) AS is_cycle
  335. FROM (
  336. SELECT hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop(id, @maxlevel) AS id,
  337. CAST(@level AS SIGNED) AS lvl
  338. FROM (
  339. SELECT @start_with := 0,
  340. @id := @start_with,
  341. @level := 0,
  342. @maxlevel := NULL
  343. ) vars, CRM_PROCES
  344. WHERE @id IS NOT NULL
  345. ) ho
  346. JOIN CRM_PROCES hi
  347. ON hi.id = ho.id ;";
  348. $sql['alter__CRM_PROCES_STATS_proc_wiev_unique_id']="alter table _CRM_PROCES_STATS_proc_wiev add unique(ID)";
  349. $sql['alter__CRM_PROCES_STATS_proc_wiev_modify_path']="alter table _CRM_PROCES_STATS_proc_wiev modify path varchar(255)";
  350. $sql['alter__CRM_PROCES_STATS_proc_wiev_modify_treeitem']="alter table _CRM_PROCES_STATS_proc_wiev modify treeitem varchar(255)";
  351. //!_CRM_PROCES_STATS_proc_wiev_UPDATE
  352. $sql['drop__CRM_PROCES_STATS_proc_wiev_UPDATE']="DROP TRIGGER IF EXISTS `_CRM_PROCES_STATS_proc_wiev_UPDATE`";
  353. $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
  354. IF NEW.PARENT_ID<>OLD.PARENT_ID THEN
  355. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  356. replace into _CRM_PROCES_STATS_proc_wiev
  357. SELECT hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT(' ', lvl - 1), hi.id) AS treeitem,
  358. hierarchy_sys_connect_by_path('/', hi.id) AS path,
  359. PARENT_ID, lvl,
  360. CASE
  361. WHEN lvl >= @maxlevel THEN 1
  362. ELSE COALESCE(
  363. (
  364. SELECT 0
  365. FROM CRM_PROCES hl
  366. WHERE hl.PARENT_ID = ho.id
  367. AND hl.id <> @start_with
  368. LIMIT 1
  369. ), 1)
  370. END AS is_leaf,
  371. hierarchy_connect_by_iscycle(hi.id) AS is_cycle
  372. FROM (
  373. SELECT hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop(id, @maxlevel) AS id,
  374. CAST(@level AS SIGNED) AS lvl
  375. FROM (
  376. SELECT @start_with := 0,
  377. @id := @start_with,
  378. @level := 0,
  379. @maxlevel := 1000
  380. ) vars, CRM_PROCES
  381. WHERE @id IS NOT NULL
  382. ) ho
  383. JOIN CRM_PROCES hi
  384. ON hi.id = ho.id ;
  385. END IF;
  386. END
  387. ";
  388. //!_CRM_PROCES_STATS_proc_wiev_INSERT
  389. $sql['_drop__CRM_PROCES_STATS_proc_wiev_INSERT']="DROP TRIGGER IF EXISTS `_CRM_PROCES_STATS_proc_wiev_INSERT`;";
  390. $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
  391. IF NEW.PARENT_ID>0 THEN
  392. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  393. replace into _CRM_PROCES_STATS_proc_wiev
  394. SELECT hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT(' ', lvl - 1), hi.id) AS treeitem,
  395. hierarchy_sys_connect_by_path('/', hi.id) AS path,
  396. PARENT_ID, lvl,
  397. CASE
  398. WHEN lvl >= @maxlevel THEN 1
  399. ELSE COALESCE(
  400. (
  401. SELECT 0
  402. FROM CRM_PROCES hl
  403. WHERE hl.PARENT_ID = ho.id
  404. AND hl.id <> @start_with
  405. LIMIT 1
  406. ), 1)
  407. END AS is_leaf,
  408. hierarchy_connect_by_iscycle(hi.id) AS is_cycle
  409. FROM (
  410. SELECT hierarchy_connect_by_parent_eq_prior_id_with_level_and_loop(id, @maxlevel) AS id,
  411. CAST(@level AS SIGNED) AS lvl
  412. FROM (
  413. SELECT @start_with := 0,
  414. @id := @start_with,
  415. @level := 0,
  416. @maxlevel := 1000
  417. ) vars, CRM_PROCES
  418. WHERE @id IS NOT NULL
  419. ) ho
  420. JOIN CRM_PROCES hi
  421. ON hi.id = ho.id ;
  422. END IF;
  423. END";
  424. $sql['drop__CRM_PROCES_GOTO_CACHE']="drop table if exists _CRM_PROCES_GOTO_CACHE;";
  425. $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
  426. from _CRM_PROCES_STATS_proc_wiev t1
  427. 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' )
  428. 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' )
  429. -- TODO@2014-09-04 trzeba rekursywnie podlapac wzajemne powiazania
  430. where t1.ID_PROCES_INIT>0
  431. ";
  432. $sql['create__CRM_PROCES_GOTO_CACHE']="create table _CRM_PROCES_GOTO_CACHE ".$sql_tmp['select_CRM_PROCES_GOTO_CACHE'] ;
  433. $sql['alter__CRM_PROCES_GOTO_CACHE_ID']="alter table _CRM_PROCES_GOTO_CACHE add index(ID)" ;
  434. $sql['alter__CRM_PROCES_GOTO_CACHE_ID_PROCES_INIT_type']="alter table _CRM_PROCES_GOTO_CACHE modify ID_PROCES_INIT int(11)" ;
  435. $sql['alter__CRM_PROCES_GOTO_CACHE_ID_PROCES_INIT']="alter table _CRM_PROCES_GOTO_CACHE add index(ID_PROCES_INIT)" ;
  436. $sql['alter__CRM_PROCES_GOTO_CACHE_IF_TRUE_GOTO']="alter table _CRM_PROCES_GOTO_CACHE add index(IF_TRUE_GOTO)" ;
  437. $sql['event_delete_CRM_PROCES_GOTO_CACHE']="drop event if exists _CRM_PROCES_GOTO_CACHE_event";
  438. $sql['event_create_CRM_PROCES_GOTO_CACHE']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_GOTO_CACHE_event
  439. ON SCHEDULE EVERY 1 DAY
  440. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  441. DO
  442. BEGIN
  443. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  444. truncate table _CRM_PROCES_INIT_STATS;
  445. replace into _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_GOTO_CACHE']." ;
  446. END
  447. ";
  448. $sql['drop__CRM_PROCES_STATS']="drop table if exists _CRM_PROCES_STATS ;";
  449. $sql_tmp['select__CRM_PROCES_STATS']="select t1.ID , t2.ID_PROCES_INIT , count(t1.ID) as CSteps
  450. , (select count(ID) from CRM_IMAGE where REMOTE_TABLE='CRM_PROCES' and REMOTE_ID=t1.ID and A_STATUS!='DELETED' ) as CPics
  451. , (select count(ID) from CRM_PROCES_HIST where ID_USERS2=t1.ID ) as CProcEdits
  452. , (select count(ID) from CRM_WSKAZNIK where ID_PROCES=t1.ID and A_STATUS!='DELETED') as CRes
  453. , (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
  454. , (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
  455. , (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
  456. , (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
  457. , (select count(ID) from CRM_TESTY_PYTANIA where ID_PROCES=t1.ID ) as CQuest
  458. , (select count(ID) from CRM_TESTY_PYTANIA where ID_PROCES=t1.ID and TEST_TYPE='TEORETYCZNY' ) as CQuestTeor
  459. , (select count(ID) from CRM_TESTY_PYTANIA where ID_PROCES=t1.ID and TEST_TYPE='PRAKTYCZNY' ) as CQuestPract -- pytania praktyczne
  460. , (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
  461. , (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
  462. , (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
  463. , (select count(distinct(au.ID)) from ADMIN_USERS as au left join CRM_AUTH_PROFILE as cap on au.ID=cap.REMOTE_ID and
  464. 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
  465. -- , (select count(distinct(au.ID)) from ADMIN_USERS as au
  466. -- left join CRM_AUTH_PROFILE as cap on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS!='DELETED'
  467. -- left join CRM_WSKAZNIK as cw on cap.ID_ZASOB=cw.ID_ZASOB and cw.A_STATUS!='DELETED'
  468. -- left join CRM_TESTY_ODPOWIEDZI as cto on cto.A_RECORD_CREATE_AUTHOR=au.ADM_ACCOUNT
  469. -- left join CRM_TESTY_PYTANIA as ctp on ctp.ID=cto.ID_PYTANIE
  470. -- left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  471. -- 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
  472. , (select count(distinct(cto.ID)) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID
  473. left join CRM_WSKAZNIK as cw on cw.ID_PROCES=ctp.ID_PROCES
  474. left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  475. left join CRM_WSKAZNIK as cw1 on cw1.ID_PROCES=cps.ID_PROCES_INIT
  476. left join CRM_AUTH_PROFILE as cap on cap.ID_ZASOB=cw1.ID_ZASOB
  477. left join ADMIN_USERS as au on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS' and au.A_STATUS='NORMAL'
  478. 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
  479. , (select count(distinct(cto.ID)) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID
  480. left join CRM_WSKAZNIK as cw on cw.ID_PROCES=ctp.ID_PROCES
  481. left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  482. left join CRM_WSKAZNIK as cw1 on cw1.ID_PROCES=cps.ID_PROCES_INIT
  483. left join CRM_AUTH_PROFILE as cap on cap.ID_ZASOB=cw1.ID_ZASOB
  484. left join ADMIN_USERS as au on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS' and au.A_STATUS='NORMAL'
  485. 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
  486. , (select count(distinct(cto.ID)) from CRM_TESTY_ODPOWIEDZI as cto left join CRM_TESTY_PYTANIA as ctp on cto.ID_PYTANIE=ctp.ID
  487. left join CRM_WSKAZNIK as cw on cw.ID_PROCES=ctp.ID_PROCES
  488. left join _CRM_PROCES_STATS_proc_wiev as cps on cps.ID=cw.ID_PROCES
  489. left join CRM_WSKAZNIK as cw1 on cw1.ID_PROCES=cps.ID_PROCES_INIT
  490. left join CRM_AUTH_PROFILE as cap on cap.ID_ZASOB=cw1.ID_ZASOB
  491. left join ADMIN_USERS as au on au.ID=cap.REMOTE_ID and cap.REMOTE_TABLE='ADMIN_USERS'
  492. 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
  493. , (select min(A_RECORD_CREATE_DATE) from CRM_WSKAZNIK where ID_PROCES=t1.ID and A_STATUS!='DELETED') as MinResCreDate
  494. , (select max(A_RECORD_UPDATE_DATE) from CRM_WSKAZNIK where ID_PROCES=t1.ID and A_STATUS!='DELETED') as MaxResUpdDate
  495. , (select min(A_RECORD_CREATE_DATE) from CRM_PROCES where ID=t1.ID and A_STATUS!='DELETED') as MinProcCreDate
  496. , (select max(A_RECORD_UPDATE_DATE) from CRM_PROCES where ID=t1.ID and A_STATUS!='DELETED') as MaxProcUpdDate
  497. from
  498. _CRM_PROCES_STATS_proc_wiev as t2 join CRM_PROCES as t1 on t1.ID=t2.ID
  499. -- where t2.ID_PROCES_INIT=994
  500. -- group by t2.ID_PROCES_INIT
  501. group by t1.ID
  502. order by t1.A_RECORD_UPDATE_DATE desc";
  503. $sql['create__CRM_PROCES_STATS']="create table _CRM_PROCES_STATS
  504. ".$sql_tmp['select__CRM_PROCES_STATS'] ;
  505. $sql['alter__CRM_PROCES_STATS_unique_id']="alter table _CRM_PROCES_STATS add unique(ID)";
  506. $sql['drop__CRM_PROCES_INIT_STATS']="drop table if exists _CRM_PROCES_INIT_STATS";
  507. $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,
  508. sum(CQuestEdits) as SCQuestEdits,sum(CResPics) as SCResPics , sum(CResPicsS) as SCResPicsS,sum(CQuest) as SCQuest,sum(CQuestPract) as SCQuestPract,
  509. 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
  510. ,(select count(ID) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT and TEST_TYPE='TEORETYCZNY') as STestTeor
  511. ,(select count(ID) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT and TEST_TYPE='PRAKTYCNZY') as STestPrakt
  512. ,(select avg(OCENA) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT) as AvgMark
  513. ,(select avg(DISCOUNT) from CRM_TESTY where ID_PROCES_INIT=t1.ID_PROCES_INIT) as AvgDiscount
  514. ,min(MinProcCreDate) as MinProcCreDate , max(MaxProcUpdDate) as MaxProcUpdDate
  515. -- todo lista osob ktora powinna zdac test teoretyczny i taka sama praktyczny wyliczana w oparciu o to czy sa testy i ile jest stanowisk
  516. , (
  517. select if ((select sum(CQuestTeor) from _CRM_PROCES_STATS where ID_PROCES_INIT=t1.ID_PROCES_INIT)>0,
  518. concat('brak:',sum(if(ct.ID<1 or ct.ID is null ,1,0)),'/popraw:' ,
  519. sum(if(ct.OCENA > 0 and ct.OCENA<2.5,1,0)) ) ,0) from ADMIN_USERS as au
  520. 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')
  521. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB
  522. 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'
  523. where au.A_STATUS='NORMAL' and cw.ID_PROCES=t1.ID_PROCES_INIT
  524. ) as CTTWinfo
  525. , (
  526. select if ((select sum(CQuestTeor) from _CRM_PROCES_STATS where ID_PROCES_INIT=t1.ID_PROCES_INIT)>0,
  527. concat('brak:',sum(if(ct.ID<1 or ct.ID is null ,1,0)),'/popraw:' ,
  528. sum(if(ct.OCENA > 0 and ct.OCENA<2.5,1,0)) ) ,0) from ADMIN_USERS as au
  529. 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')
  530. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB
  531. 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'
  532. where au.A_STATUS='NORMAL' and cw.ID_PROCES=t1.ID_PROCES_INIT
  533. ) as CTPWinfo
  534. , '' as A_ADM_COMPANY, '' as A_CLASSIFIED
  535. from _CRM_PROCES_STATS as t1
  536. left join CRM_PROCES as t2 on t1.ID_PROCES_INIT=t2.ID
  537. left join _CRM_PROCES_STATS_proc_wiev as t3 on t3.ID=t1.ID_PROCES_INIT
  538. group by t1.ID_PROCES_INIT
  539. ";
  540. $sql['create__CRM_PROCES_INIT_STATS']="create table _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_INIT_STATS'];
  541. $sql['alter__CRM_PROCES_INIT_STATS_mod_id']="alter table _CRM_PROCES_INIT_STATS modify ID int(11)";
  542. $sql['alter__CRM_PROCES_INIT_STATS_add_uniq']="alter table _CRM_PROCES_INIT_STATS add unique(ID)";
  543. $sql['alter__CRM_PROCES_INIT_STATS_SCPREdits']="alter table `_CRM_PROCES_INIT_STATS` CHANGE `SCPREdits` `SCPREdits` decimal(42,0)";
  544. $sql['event_delete_CRM_PROCES_INIT_STATS']="drop event if exists _CRM_PROCES_INIT_STATS_event";
  545. $sql['event_create_CRM_PROCES_INIT_STATS']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_INIT_STATS_event
  546. ON SCHEDULE EVERY 1 DAY
  547. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  548. DO
  549. BEGIN
  550. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  551. replace into _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_INIT_STATS']." ;
  552. END
  553. ";
  554. $sql['event_delete_CRM_PROCES_STATS']="drop event if exists _CRM_PROCES_STATS_event";
  555. $sql['event_create_CRM_PROCES_STATS']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_STATS_event
  556. ON SCHEDULE EVERY 1 DAY
  557. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  558. DO
  559. BEGIN
  560. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  561. replace into _CRM_PROCES_STATS ".$sql_tmp['select__CRM_PROCES_STATS']." ;
  562. END
  563. ";
  564. /*
  565. -- stworzenie tabeli do planowania harmonogramow testow i szkolen
  566. -- proponuje widok!
  567. -- drop table if exists _CRM_PROCES_USER_STATS;
  568. -- create table _CRM_PROCES_USER_STATS
  569. -- DROP VIEW _CRM_PROCES_USER_STATS_wiev;
  570. */
  571. $sql['drop_CRM_LISTA_ZASOBOW_tree_detect_kierownik']="drop function if exists CRM_LISTA_ZASOBOW_tree_detect_kierownik";
  572. $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
  573. READS SQL DATA
  574. BEGIN
  575. DECLARE _path INT;
  576. DECLARE _type CHAR(255);
  577. DECLARE _cpath TEXT;
  578. DECLARE _id INT;
  579. DECLARE _id_cur INT;
  580. DECLARE _group_name CHAR(255);
  581. DECLARE EXIT HANDLER FOR NOT FOUND RETURN _group_name;
  582. SET _id = COALESCE(node, @id);
  583. SELECT NAME from LDAP_GROUPS where ID=node
  584. INTO _group_name;
  585. label1: LOOP
  586. SELECT t1.PARENT_ID,t1.TYPE,t1.ID
  587. INTO _id,_type,_id_cur
  588. FROM CRM_LISTA_ZASOBOW t1
  589. WHERE t1.id = _id
  590. -- AND COALESCE(id <> @start_with, TRUE);
  591. ;
  592. if _type = 'STANOWISKO' and node!=_id_cur THEN
  593. SET _path = _id_cur;
  594. SELECT NAME from LDAP_GROUPS where ID=_id_cur
  595. INTO _group_name;
  596. RETURN _group_name;
  597. LEAVE label1;
  598. END IF;
  599. END LOOP label1;
  600. END";
  601. $sql['replace__CRM_PROCES_USER_STATS_wiev_to_group']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev_to_group as
  602. select concat(au.ID,cw.ID,0) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  603. ,au.ADM_ACCOUNT
  604. ,cps.path
  605. , 'TEORETYCZNY' as TEST_TYPE,cps.SCQuest , max(ct.OCENA) as OCENA , max(ct.TEST_END) as TEST_END
  606. -- , max(if(ct.TEST_TYPE='TEORETYCZNY',ct.OCENA,NULL)) as OCENA_T
  607. -- , max(if(ct.TEST_TYPE='PRAKTYCZNY',ct.OCENA,NULL)) as OCENA_P
  608. , 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
  609. from ADMIN_USERS as au
  610. 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')
  611. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  612. 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'
  613. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
  614. where au.A_STATUS='NORMAL'
  615. and cps.SCQuest>0
  616. group by au.ID, cps.ID
  617. -- order by ct.OCENA desc
  618. -- limit 10
  619. -- dodatkowe GOTO_AND_RETURN
  620. union
  621. select concat(au.ID,cw.ID,1) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  622. ,au.ADM_ACCOUNT
  623. ,cps.path
  624. , 'TEORETYCZNY' as TEST_TYPE,cps.SCQuest , max(ct.OCENA) as OCENA , max(ct.TEST_END) as TEST_END
  625. -- , max(if(ct.TEST_TYPE='TEORETYCZNY',ct.OCENA,NULL)) as OCENA_T
  626. -- , max(if(ct.TEST_TYPE='PRAKTYCZNY',ct.OCENA,NULL)) as OCENA_P
  627. , 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
  628. from ADMIN_USERS as au
  629. 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')
  630. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  631. left join _CRM_PROCES_GOTO_CACHE as cpgc on cpgc.ID_PROCES_INIT=cw.ID_PROCES
  632. 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'
  633. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cpgc.IF_TRUE_GOTO
  634. where au.A_STATUS='NORMAL'
  635. and cps.SCQuest>0
  636. group by au.ID, cps.ID
  637. union
  638. select concat(au.ID,cw.ID,2) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  639. ,au.ADM_ACCOUNT
  640. ,cps.path
  641. , 'PRAKTYCZNY' as TEST_TYPE, cps.SCQuestPract , max(ct.OCENA) as OCENA, max(ct.TEST_END) as TEST_END
  642. , 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
  643. from ADMIN_USERS as au
  644. 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')
  645. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  646. 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'
  647. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
  648. where au.A_STATUS='NORMAL'
  649. and cps.SCQuestPract>0
  650. group by au.ID,cps.ID
  651. -- dodatkowe GOTO_AND_RETURN
  652. union
  653. select concat(au.ID,cw.ID,3) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
  654. ,au.ADM_ACCOUNT
  655. ,cps.path
  656. , 'PRAKTYCZNY' as TEST_TYPE, cps.SCQuestPract , max(ct.OCENA) as OCENA, max(ct.TEST_END) as TEST_END
  657. , 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
  658. from ADMIN_USERS as au
  659. 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')
  660. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  661. left join _CRM_PROCES_GOTO_CACHE as cpgc on cpgc.ID_PROCES_INIT=cw.ID_PROCES
  662. 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'
  663. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cpgc.IF_TRUE_GOTO
  664. where au.A_STATUS='NORMAL'
  665. and cps.SCQuestPract>0
  666. group by au.ID,cps.ID
  667. ";
  668. $sql['replace__CRM_PROCES_USER_STATS_wiev']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev as
  669. 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
  670. from _CRM_PROCES_USER_STATS_wiev_to_group
  671. group by ADM_ACCOUNT,ID_PROCES,TEST_TYPE ";
  672. $sql['event_drop_CRM_PROCES_USER_OCENA_OKRES']="drop event if exists CRM_PROCES_USER_OCENA_OKRES_event ";
  673. $sql['event_create_CRM_PROCES_USER_OCENA_OKRES']=" CREATE DEFINER=root@localhost EVENT CRM_PROCES_USER_OCENA_OKRES_event
  674. ON SCHEDULE EVERY 1 DAY
  675. STARTS str_to_date( date_format(now(), '%Y%m%d 0600'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  676. DO
  677. BEGIN
  678. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  679. 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)
  680. 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
  681. ,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`)
  682. from ADMIN_USERS as au
  683. 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'
  684. left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')
  685. left join CRM_LISTA_ZASOBOW as cz on cz.ID=cw.ID_ZASOB
  686. -- 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'
  687. left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
  688. where au.A_STATUS='NORMAL' and cps.ID is not null
  689. -- and cps.SCQuest>0
  690. group by au.ID, cps.ID , cw.ID;
  691. END
  692. ";
  693. $sql['procedure_GRAFIK_PRACY_FILL_DATE_drop']="drop procedure if exists GRAFIK_PRACY_FILL_DATE";
  694. $sql['procedure_GRAFIK_PRACY_FILL_DATE_create']="CREATE PROCEDURE GRAFIK_PRACY_FILL_DATE(start_date DATE, end_date DATE)
  695. BEGIN
  696. DECLARE crt_date DATE;
  697. DECLARE USER TEXT;
  698. DECLARE COUNT_USERS integer;
  699. DECLARE USERS_counter int;
  700. DECLARE ACL_GROUP TEXT;
  701. DECLARE USER_GROUP TEXT;
  702. SET @USERS_counter = 0;
  703. SET USERS_counter = 0;
  704. SET @ACL_GROUP = '';
  705. SET @USER_GROUP = '';
  706. SELECT COUNT(`ID`) into COUNT_USERS FROM ADMIN_USERS WHERE EMPLOYEE_TYPE='Pracownik' and A_STATUS='NORMAL';
  707. WHILE USERS_counter < COUNT_USERS DO
  708. SET crt_date=start_date;
  709. PREPARE stmt FROM \"SELECT ADM_ACCOUNT into @USER from ADMIN_USERS WHERE EMPLOYEE_TYPE='Pracownik' and A_STATUS='NORMAL' limit ?,1;\";
  710. EXECUTE stmt USING @USERS_counter ;
  711. DEALLOCATE PREPARE stmt;
  712. PREPARE stmt FROM \"SELECT DEFAULT_ACL_GROUP into @ACL_GROUP from ADMIN_USERS WHERE EMPLOYEE_TYPE='Pracownik' and A_STATUS='NORMAL' limit ?,1;\";
  713. EXECUTE stmt USING @USERS_counter ;
  714. DEALLOCATE PREPARE stmt;
  715. SELECT GROUP_CONCAT(concat('[',cap.ID_ZASOB,']')) into @USER_GROUP from ADMIN_USERS au
  716. 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')
  717. WHERE au.ADM_ACCOUNT=@USER ;
  718. WHILE crt_date < end_date DO
  719. INSERT ignore INTO GRAFIK_PRACY (`L_APPOITMENT_USER`,`DATE`,`WEEK`,`DAY_OF_WEEK`,`A_CLASSIFIED`,`A_ADM_COMPANY`,`USER_GROUPS`) VALUES(@USER , crt_date,date_format(crt_date,'%v'),date_format(crt_date,'%W'), @ACL_GROUP,@ACL_GROUP, @USER_GROUP );
  720. SET crt_date = ADDDATE(crt_date, INTERVAL 1 DAY);
  721. END WHILE;
  722. SET USERS_counter = USERS_counter +1;
  723. SET @USERS_counter = @USERS_counter +1;
  724. END WHILE;
  725. END";
  726. $sql['event_delete_GRAFIK_PRACY_FILL_DATE']="drop event if exists GRAFIK_PRACY_FILL_DATE_event";
  727. $sql['event_create_GRAFIK_PRACY_FILL_DATE']="CREATE DEFINER=root@localhost EVENT GRAFIK_PRACY_FILL_DATE_event
  728. ON SCHEDULE EVERY 1 DAY
  729. STARTS str_to_date( date_format(now(), '%Y%m%d 0400'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  730. DO
  731. BEGIN
  732. call GRAFIK_PRACY_FILL_DATE(date_format(now(),'%Y-%m-01'),date_format(DATE_ADD(now(),INTERVAL + 2 MONTH ),'%Y-%m-01'));
  733. END
  734. ";
  735. $sql['view__GRAFIK_PRACY']="create or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `GRAFIK_PRACY_view` as
  736. select `GRAFIK_PRACY`.`ID` AS `ID`,
  737. year(`GRAFIK_PRACY`.`DATE`) AS `rok`, month(`GRAFIK_PRACY`.`DATE`) AS `miesiac`,
  738. `GRAFIK_PRACY`.`L_APPOITMENT_USER` AS `L_APPOITMENT_USER`,
  739. (sum(time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR`,`GRAFIK_PRACY`.`START_WORK_HOUR`))) / 3600) AS `GODZIN_PLANOWO`,
  740. (sum(time_to_sec(timediff(if(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`),`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`))) / 3600) AS `GODZIN_FAKTYCZNIE`,
  741. (sum(if((time_to_sec(timediff(`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`START_WORK_HOUR`)) > 0),time_to_sec(timediff(`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`START_WORK_HOUR`)),0)) / 3600) AS `GODZIN_SPOZNIEN`,
  742. (sum(if(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM` and (time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR`,`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`)) > 0),time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR`,`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`)),0)) / 3600) AS `GODZIN_WYJSC_PRZED_CZASEM`,
  743. (sum((`GRAFIK_PRACY`.`BREAK1_MINUTES` + `GRAFIK_PRACY`.`BREAK2_MINUTES`)) / 60) AS `CZAS_PRZERW`,
  744. sum((if((`GRAFIK_PRACY`.`BREAK1_MINUTES` > 0),1,0) + if((`GRAFIK_PRACY`.`BREAK2_MINUTES` > 0),1,0))) AS `ILOSC_PRZERW`,
  745. sum(if(`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM` and `GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,1,0)) AS `DNI_W_PRACY`,
  746. count(`GRAFIK_PRACY`.`ID`) AS `ILOSC_DNI`,
  747. sum(if(`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM` and `GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`, time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`)) - time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR`,`GRAFIK_PRACY`.`START_WORK_HOUR`)),0) / 3600) AS `NADGODZINY`,
  748. sum(if(`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM` and time_to_sec(timediff('07:00:00', `GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`))>0, time_to_sec(timediff('07:00:00',`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`)),0) + if(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM` and time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,'21:00:00'))>0, time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,'21:00:00')),0)) / 3600 AS GODZIN_W_NOCY,
  749. (sum(if(`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM` and (time_to_sec(timediff(`GRAFIK_PRACY`.`START_WORK_HOUR`,`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`)) > 0),time_to_sec(timediff(`GRAFIK_PRACY`.`START_WORK_HOUR`,`GRAFIK_PRACY`.`START_WORK_HOUR_CONFIRM`)),0)) / 3600) AS `GODZIN_PRZYJSC_PRZED_CZASEM`,
  750. (sum(if((time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`END_WORK_HOUR`)) > 0),time_to_sec(timediff(`GRAFIK_PRACY`.`END_WORK_HOUR_CONFIRM`,`GRAFIK_PRACY`.`END_WORK_HOUR`)),0)) / 3600) AS `GODZIN_WYJSC_PO_CZASIE` from `GRAFIK_PRACY`
  751. group by
  752. `GRAFIK_PRACY`.`L_APPOITMENT_USER`, year(`GRAFIK_PRACY`.`DATE`), month(`GRAFIK_PRACY`.`DATE`);
  753. ";
  754. $sql['view__in7_dziennik_koresp_budget_view']="
  755. CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `in7_dziennik_koresp_budget_view` AS select `k`.`ID` AS `ID`,`k`.`path` AS `path`,`k`.`ID_PROJECT` AS `ID_PROJECT`,year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) AS `rok`,month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) AS `miesiac`,date_format(`k`.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m') AS `data`,sum(`k`.`COST_VALUE`) AS `sum_k`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '0') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_0`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '1') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_1`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '2') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_2`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '3') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_3`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '4') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_4`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '5') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_5`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '6') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_6`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '7') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_7`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '8') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_8`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '9') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_9`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '10') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_10`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '11') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_11`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '12') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_12`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '13') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_13`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '0') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_0`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '1') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_1`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '2') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_2`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '3') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_3`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '4') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_4`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '5') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_5`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '6') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_6`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '7') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_7`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '8') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_8`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '9') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_9`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '10') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_10`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '11') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_11`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '12') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_12`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '13') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_13`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '0') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_0`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '1') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_1`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '2') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_2`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '3') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_3`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '4') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_4`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '5') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_5`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '6') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_6`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '7') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_7`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '8') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_8`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '9') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_9`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '10') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_10`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '11') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_11`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '12') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_12`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '13') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_13` from `IN7_DZIENNIK_KORESP` `k` where (`k`.`COST_VALUE` <> '') group by `k`.`ID_PROJECT`;
  756. ";
  757. $sql['view__in7_dziennik_koresp_budget_main_view']="
  758. CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `in7_dziennik_koresp_budget_main_view` AS select cast(substring_index(substring_index(`k`.`path`,'-',2),'-',-(1)) as signed) AS `ID`,substring_index(`k`.`path`,'-',2) AS `path`,cast(concat(',',group_concat(distinct `k`.`ID_PROJECT` order by `k`.`ID_PROJECT` ASC separator ','),',') as char charset utf8) AS `ID_PROJECT`,year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) AS `rok`, sum(`k`.`COST_VALUE`) AS `sum_k`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '0') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_0`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '1') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_1`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '2') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_2`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '3') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_3`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '4') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_4`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '5') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_5`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '6') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_6`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '7') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_7`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '8') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_8`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '9') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_9`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '10') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_10`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '11') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_11`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '12') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_12`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '13') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = year(now()))),`k`.`COST_VALUE`,0)) AS `sum_13`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '0') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_0`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '1') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_1`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '2') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_2`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '3') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_3`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '4') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_4`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '5') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_5`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '6') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_6`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '7') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_7`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '8') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_8`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '9') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_9`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '10') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_10`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '11') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_11`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '12') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_12`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '13') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) - 1))),`k`.`COST_VALUE`,0)) AS `sum_ly_13`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '0') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_0`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '1') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_1`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '2') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_2`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '3') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_3`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '4') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_4`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '5') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_5`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '6') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_6`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '7') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_7`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '8') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_8`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '9') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_9`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '10') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_10`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '11') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_11`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '12') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_12`,sum(if(((month(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = '13') and (year(`k`.`K_DATA_OTRZYMANEJ_KORESP`) = (year(now()) + 1))),`k`.`COST_VALUE`,0)) AS `sum_ny_13` from `IN7_DZIENNIK_KORESP` `k` where (`k`.`COST_VALUE` <> '') group by substring_index(`k`.`path`,'-',2);
  759. ";
  760. $sql['view__budget_project_to_realization_view']="
  761. CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `budget_project_to_realization_view` AS select `p`.`ID` AS `ID`,`p`.`ID_PROJECT` AS `ID_PROJECT`,`k`.`path` AS `path`,`p`.`YEAR` AS `YEAR`,`p`.`MONTH_1_VALUE` AS `MONTH_1_VALUE`,`k`.`sum_1` AS `sum_1`,`p`.`MONTH_2_VALUE` AS `MONTH_2_VALUE`,`k`.`sum_2` AS `sum_2`,`p`.`MONTH_3_VALUE` AS `MONTH_3_VALUE`,`k`.`sum_3` AS `sum_3`,`p`.`MONTH_4_VALUE` AS `MONTH_4_VALUE`,`k`.`sum_4` AS `sum_4`,`p`.`MONTH_5_VALUE` AS `MONTH_5_VALUE`,`k`.`sum_5` AS `sum_5`,`p`.`MONTH_6_VALUE` AS `MONTH_6_VALUE`,`k`.`sum_6` AS `sum_6`,`p`.`MONTH_7_VALUE` AS `MONTH_7_VALUE`,`k`.`sum_7` AS `sum_7`,`p`.`MONTH_8_VALUE` AS `MONTH_8_VALUE`,`k`.`sum_8` AS `sum_8`,`p`.`MONTH_9_VALUE` AS `MONTH_9_VALUE`,`k`.`sum_9` AS `sum_9`,`p`.`MONTH_10_VALUE` AS `MONTH_10_VALUE`,`k`.`sum_10` AS `sum_10`,`p`.`MONTH_11_VALUE` AS `MONTH_11_VALUE`,`k`.`sum_11` AS `sum_11`,`p`.`MONTH_12_VALUE` AS `MONTH_12_VALUE`,`k`.`sum_12` AS `sum_12` from (`projects_budget_year_month` `p` left join `in7_dziennik_koresp_budget_view` `k` on(((`k`.`ID_PROJECT` = `p`.`ID_PROJECT`) and (`p`.`YEAR` = `k`.`rok`))));
  762. ";
  763. $sql['view__budget_project_to_realization_main_view']="
  764. CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `budget_project_to_realization_main_view` AS select `p`.`ID` AS `ID`,`p`.`ID_PROJECT` AS `ID_PROJECT`,`k`.`path` AS `path`,`p`.`YEAR` AS `YEAR`,`p`.`MONTH_1_VALUE` AS `MONTH_1_VALUE`,`k`.`sum_1` AS `sum_1`,`p`.`MONTH_2_VALUE` AS `MONTH_2_VALUE`,`k`.`sum_2` AS `sum_2`,`p`.`MONTH_3_VALUE` AS `MONTH_3_VALUE`,`k`.`sum_3` AS `sum_3`,`p`.`MONTH_4_VALUE` AS `MONTH_4_VALUE`,`k`.`sum_4` AS `sum_4`,`p`.`MONTH_5_VALUE` AS `MONTH_5_VALUE`,`k`.`sum_5` AS `sum_5`,`p`.`MONTH_6_VALUE` AS `MONTH_6_VALUE`,`k`.`sum_6` AS `sum_6`,`p`.`MONTH_7_VALUE` AS `MONTH_7_VALUE`,`k`.`sum_7` AS `sum_7`,`p`.`MONTH_8_VALUE` AS `MONTH_8_VALUE`,`k`.`sum_8` AS `sum_8`,`p`.`MONTH_9_VALUE` AS `MONTH_9_VALUE`,`k`.`sum_9` AS `sum_9`,`p`.`MONTH_10_VALUE` AS `MONTH_10_VALUE`,`k`.`sum_10` AS `sum_10`,`p`.`MONTH_11_VALUE` AS `MONTH_11_VALUE`,`k`.`sum_11` AS `sum_11`,`p`.`MONTH_12_VALUE` AS `MONTH_12_VALUE`,`k`.`sum_12` AS `sum_12` from (`projects_budget_year_month` `p` left join `in7_dziennik_koresp_budget_main_view` `k` on(((`k`.`ID_PROJECT` = `p`.`ID_PROJECT`) and (`p`.`YEAR` = `k`.`rok`))));
  765. ";
  766. /*
  767. CREATE DEFINER=root@localhost EVENT _CRM_PROCES_STATS_event
  768. ON SCHEDULE EVERY 1 DAY
  769. STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
  770. DO
  771. BEGIN
  772. SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
  773. replace into _CRM_PROCES_STATS ".$sql_tmp['select__CRM_PROCES_STATS']." ;
  774. END
  775. */
  776. $sql['view__TASKS_INFO_trigger']="
  777. CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `_TASKS_INFO_trigger` AS
  778. SELECT CONCAT( 'W:', SUM( IF( t.A_STATUS = 'WAITING', 1, 0 ) ) , '/N:', SUM( IF( t.A_STATUS = 'NORMAL', 1, 0 ) ) , '/Z:', SUM( IF( t.A_STATUS = 'OFF_HARD', 1, 0 ) ) ) AS TASKS_INFO_trigger,
  779. SUM( IF( t.A_STATUS = 'WAITING', 1, 0 ) ) as WAITING,
  780. SUM( IF( t.A_STATUS = 'NORMAL', 1, 0 ) ) as NORMAL,
  781. SUM( IF( t.A_STATUS = 'OFF_SOFT', 1, 0 ) ) as OFF_SOFT,
  782. SUM( IF( t.A_STATUS = 'OFF_HARD', 1, 0 ) ) as OFF_HARD,
  783. t.ID_PROJECT
  784. FROM PROBLEMS AS t
  785. GROUP BY ID_PROJECT";
  786. $sql['drop__PROBLEMS_TASKS_INFO_trigger_INSERT']="DROP TRIGGER IF EXISTS `_PROBLEMS_TASKS_INFO_trigger_INSERT`";
  787. $sql['create__PROBLEMS_TASKS_INFO_trigger_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_PROBLEMS_TASKS_INFO_trigger_INSERT`
  788. AFTER INSERT ON `PROBLEMS` FOR EACH ROW BEGIN
  789. UPDATE IN7_MK_BAZA_DYSTRYBUCJI , _TASKS_INFO_trigger
  790. set IN7_MK_BAZA_DYSTRYBUCJI.TASKS_INFO_trigger = _TASKS_INFO_trigger.TASKS_INFO_trigger where IN7_MK_BAZA_DYSTRYBUCJI.ID=NEW.ID_PROJECT and _TASKS_INFO_trigger.ID_PROJECT=NEW.ID_PROJECT;
  791. END
  792. ";
  793. $sql['drop__PROBLEMS_TASKS_INFO_trigger_UPDATE']="DROP TRIGGER IF EXISTS `_PROBLEMS_TASKS_INFO_trigger_UPDATE`";
  794. $sql['create__PROBLEMS_TASKS_INFO_trigger_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_PROBLEMS_TASKS_INFO_trigger_UPDATE` AFTER UPDATE ON `PROBLEMS` FOR EACH ROW BEGIN
  795. UPDATE IN7_MK_BAZA_DYSTRYBUCJI , _TASKS_INFO_trigger
  796. set IN7_MK_BAZA_DYSTRYBUCJI.TASKS_INFO_trigger = _TASKS_INFO_trigger.TASKS_INFO_trigger where IN7_MK_BAZA_DYSTRYBUCJI.ID=NEW.ID_PROJECT and _TASKS_INFO_trigger.ID_PROJECT=NEW.ID_PROJECT;
  797. END
  798. ";
  799. $sql['view__IN7_DZIENNIK_KORESP_trigger']="
  800. CREATE or replace ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `_IN7_DZIENNIK_KORESP_trigger` AS
  801. SELECT CONCAT( 'W:', SUM( IF( t.A_STATUS = 'WAITING', 1, 0 ) ) , '/N:', SUM( IF( t.A_STATUS = 'NORMAL', 1, 0 ) ) , '/Z:', SUM( IF( t.A_STATUS = 'OFF_HARD', 1, 0 ) ) ) AS IN7_DZIENNIK_KORESP_INFO_trigger,
  802. SUM( IF( t.A_STATUS = 'WAITING', 1, 0 ) ) as WAITING,
  803. SUM( IF( t.A_STATUS = 'NORMAL', 1, 0 ) ) as NORMAL,
  804. SUM( IF( t.A_STATUS = 'OFF_SOFT', 1, 0 ) ) as OFF_SOFT,
  805. SUM( IF( t.A_STATUS = 'OFF_HARD', 1, 0 ) ) as OFF_HARD,
  806. t.ID_PROJECT
  807. FROM IN7_DZIENNIK_KORESP AS t
  808. GROUP BY ID_PROJECT";
  809. /* - nie dziala, bo jest trigger w bash_file_perms!!!
  810. $sql['drop__IN7_DZIENNIK_KORESP_trigger_INSERT']="DROP TRIGGER IF EXISTS `_IN7_DZIENNIK_KORESP_trigger_INSERT`";
  811. $sql['create__PROBLEMS_TASKS_INFO_trigger_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_DZIENNIK_KORESP_trigger_INSERT`
  812. AFTER INSERT ON `IN7_DZIENNIK_KORESP` FOR EACH ROW BEGIN
  813. UPDATE IN7_MK_BAZA_DYSTRYBUCJI , _IN7_DZIENNIK_KORESP_trigger
  814. set IN7_MK_BAZA_DYSTRYBUCJI.IN7_DZIENNIK_KORESP_INFO_trigger = _IN7_DZIENNIK_KORESP_trigger.IN7_DZIENNIK_KORESP_INFO_trigger where IN7_MK_BAZA_DYSTRYBUCJI.ID=NEW.ID_PROJECT and _TASKS_INFO_trigger.ID_PROJECT=NEW.ID_PROJECT;
  815. END
  816. ";
  817. $sql['drop__IN7_DZIENNIK_KORESP_trigger_UPDATE']="DROP TRIGGER IF EXISTS `_IN7_DZIENNIK_KORESP_trigger_UPDATE`";
  818. $sql['create__PROBLEMS_TASKS_INFO_trigger_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_IN7_DZIENNIK_KORESP_trigger_UPDATE` AFTER UPDATE ON `IN7_DZIENNIK_KORESP` FOR EACH ROW BEGIN
  819. UPDATE IN7_MK_BAZA_DYSTRYBUCJI , _IN7_DZIENNIK_KORESP_trigger
  820. set IN7_MK_BAZA_DYSTRYBUCJI.IN7_DZIENNIK_KORESP_INFO_trigger = _IN7_DZIENNIK_KORESP_trigger.IN7_DZIENNIK_KORESP_INFO_trigger where IN7_MK_BAZA_DYSTRYBUCJI.ID=NEW.ID_PROJECT and _IN7_DZIENNIK_KORESP_trigger.ID_PROJECT=NEW.ID_PROJECT;
  821. END
  822. ";
  823. */
  824. // W zastepstwie poki nie bedzie triggera na KORESPONDENCJI
  825. $sql['_IN7_DZIENNIK_KORESP_trigger_event_drop']="DROP EVENT if exists _IN7_DZIENNIK_KORESP_trigger_event";
  826. $sql['_IN7_DZIENNIK_KORESP_trigger_event']="CREATE EVENT `_IN7_DZIENNIK_KORESP_trigger_event` ON SCHEDULE EVERY 1 DAY STARTS '2015-05-12 00:04:30' ON COMPLETION NOT PRESERVE ENABLE DO
  827. UPDATE IN7_MK_BAZA_DYSTRYBUCJI , _IN7_DZIENNIK_KORESP_trigger
  828. set IN7_MK_BAZA_DYSTRYBUCJI.IN7_DZIENNIK_KORESP_INFO_trigger = _IN7_DZIENNIK_KORESP_trigger.IN7_DZIENNIK_KORESP_INFO_trigger where IN7_MK_BAZA_DYSTRYBUCJI.ID=_IN7_DZIENNIK_KORESP_trigger.ID_PROJECT ;";
  829. $sql['view__budget_project_to_realization_main_event_drop']="DROP EVENT if exists view__budget_project_to_realization_main_event";
  830. $sql['view__budget_project_to_realization_main_event']="CREATE EVENT `view__budget_project_to_realization_main_event` ON SCHEDULE EVERY 1 DAY STARTS '2015-05-12 00:04:30' ON COMPLETION NOT PRESERVE ENABLE DO INSERT IGNORE INTO `projects_budget_year_month` ( `ID_PROJECT` , `M_DIST_DESC` , `YEAR` ,`A_RECORD_CREATE_AUTHOR` , `A_RECORD_CREATE_DATE` )
  831. SELECT t1.`ID` , t2.M_DIST_DESC, t1.`rok` , 'import z widoku budzetu glownych spraw (view__budget_project_to_realization_main_event)', NOW( )
  832. FROM `in7_dziennik_koresp_budget_main_view` AS t1
  833. LEFT JOIN IN7_MK_BAZA_DYSTRYBUCJI AS t2 ON t1.ID = t2.ID;";
  834. $sql['event_shedule_init']="SET GLOBAL event_scheduler = ON";
  835. foreach($sql as $ind=>$sql_) {
  836. DEBUG_S(-3,'wykonuje zapytanie sql dla '.$ind,$sql_,__FILE__,__FUNCTION__,__LINE__);
  837. if(!empty($DB)) {
  838. $DB->query($sql_) or die('Problem z zapytaniem '.mysql_error());
  839. } else {
  840. DB::query($sql_) or die('Problem z zapytaniem '.mysql_error());
  841. }
  842. }
  843. //-- alter table _CRM_PROCES_USER_STATS add unique(ID,TEST_TYPE,ADM_ACCOUNT);
  844. } //eof func
  845. ?>