superedit-BUDGET_ANALYTICS.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. <?php
  2. function BUDGET_ANALYTICS() {
  3. $budgetAnalyticsRouter = new BudgetAnalyticsRouter();
  4. $args = array();
  5. $args['year'] = V::get('zest_year', '', $_REQUEST, 'int');
  6. $args['_print'] = V::get('_print', '', $_REQUEST, 'int');
  7. $args['_task'] = V::get('_task', '', $_REQUEST, 'word');
  8. if ('test_fetchDataFromTables' == $args['_task']) {
  9. $budgetAnalyticsRouter->test_fetchDataFromTables();
  10. die('.EOF TEST test_fetchDataFromTables');
  11. }
  12. if (!$args['_print']) {
  13. $budgetAnalyticsRouter->menu($args['year']);
  14. }
  15. if (empty($args['year'])) {
  16. ?>
  17. <div class="alert alert-warning">
  18. Nie wybrano roku.
  19. </div>
  20. <?
  21. return;
  22. }
  23. $costs = $budgetAnalyticsRouter->getCostsByYear($args['year']);
  24. if (empty($costs)) {
  25. ?>
  26. <div class="alert alert-warning">
  27. Brak danych na wybrany rok.
  28. </div>
  29. <?
  30. return;
  31. }
  32. $projTree = $budgetAnalyticsRouter->buildProjectTree($costs);
  33. //$orderby = V::get('orderby', '', $_GET);
  34. //$view_type = V::get('view_type', '', $_GET);
  35. //$budgetAnalyticsRouter->cyfrowe($projekty, $grupyKosztow, $costs, $orderby, $view_type);
  36. $budgetAnalyticsRouter->printCostsForYear($projTree, $costs, $args['year']);
  37. }
  38. class BudgetAnalyticsRouter {
  39. function menu($selectedYear) {
  40. //SE_Layout::menu();
  41. $year = ($selectedYear)? $selectedYear : date("Y");
  42. ?>
  43. <div class="jumbotron">
  44. <div class="container">
  45. <form class="form-inline" method="POST">
  46. <input type="hidden" name="task" value="zest_year" />
  47. <label for="zest_year">Zestawienie kosztów projektów na podstawie korespondencji:</label>
  48. <div class="input-group date" id="fldZestYear">
  49. <input type="text" name="zest_year" class="form-control" value="" />
  50. <span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>
  51. </div>
  52. <button type="submit" id="fldZestYearBtn" class="btn btn-primary" autocomplete="off">
  53. Pokaż
  54. </button>
  55. </form>
  56. </div>
  57. </div>
  58. <script type="text/javascript">
  59. jQuery(document).ready(function () {
  60. jQuery('#fldZestYearBtn').on('click', function () {
  61. jQuery(this).text(jQuery(this).text() + '...').attr('disabled', 'disabled');
  62. jQuery(this).parent().submit();
  63. })
  64. jQuery("#fldZestYear").datetimepicker({
  65. format: "YYYY",
  66. defaultDate: new Date(<?php echo $year; ?>, <?php echo intval(date("m")); ?>, 1),
  67. // minDate: new Date(2014, 11, 1),
  68. // maxDate: "<?php echo date("Y"); ?>"
  69. });
  70. });
  71. </script>
  72. <?php
  73. }
  74. function css() {
  75. ?>
  76. <style type="text/css">
  77. .c { text-align:center; }
  78. .r { text-align:right; }
  79. .zestawienie-kosztow-tbl { border-collapse:collapse; border:1px solid #7EC5FF; }
  80. .zestawienie-kosztow-tbl td { border:1px solid #7EC5FF; }
  81. .zestawienie-kosztow-tbl .p2 { padding:0 2px; }
  82. .zestawienie-kosztow-tbl .nr { color:#7A7A7A; }
  83. .zestawienie-kosztow-tbl thead th { border:1px solid #7EC5FF; }
  84. .zestawienie-kosztow-tbl tbody tr:hover td { background:#cafbfd; }
  85. .row-selected td {background-color:#d8fded;}
  86. .showOnlySelected tr { display:none; }
  87. .showOnlySelected tr.row-selected { display:table-row; }
  88. .cost { padding:0 2px; min-width:30px; text-align:right; }
  89. .cost-only_child { color:#777; }
  90. .cost-only_self { color:red; }
  91. .cost-self_and_child { color:orange; }
  92. /* print table background colors */
  93. table td, table th { -webkit-print-color-adjust:exact; }
  94. table { page-break-after:auto }
  95. tr { page-break-inside:avoid; page-break-after:auto; position:relative; }
  96. td { page-break-inside:avoid; page-break-after:auto; position:relative; }
  97. thead { display:table-header-group }
  98. tfoot { display:table-footer-group }
  99. </style>
  100. <?php
  101. }
  102. function printCostsForYear($projOrder, $costs, $year) {
  103. $months = array();
  104. for ($i = 0; $i < 12; $i++) {
  105. $months[] = $i + 1;
  106. }
  107. $this->css();
  108. if(V::get('DBG','',$_GET)){echo'<pre style="width:600px;border:1px solid red;max-height:300px;overflow:auto;display:none">';print_r($costs);echo'</pre>';}
  109. ?>
  110. <div class="container">
  111. <div style="float:right;color:#aaa;"><?php echo date("Y-m-d"); ?></div>
  112. <h1>Zestawienie kosztów projektów na rok <?php echo $year; ?></h1>
  113. <table cellspacing="0" cellpadding="0" border="0" id="zestawienie-kosztow-projektow" class="zestawienie-kosztow-tbl">
  114. <thead>
  115. <tr>
  116. <td colspan="3" class="p2">
  117. <span class="pull-left">
  118. <input type="checkbox" onclick="return showHideAll(this);"/> pokaż tylko zaznaczone
  119. </span>
  120. <span class="pull-right">miesiąc</span>
  121. </td>
  122. <?php foreach ($months as $month) { ?>
  123. <th class="c"><?php echo $month; ?></th>
  124. <?php } ?>
  125. </tr>
  126. </thead>
  127. <tbody>
  128. <?php $t = 1; ?>
  129. <?php foreach ($projOrder as $projPath => $projId) : ?>
  130. <?php $projectInfo = $costs[$projId]; ?>
  131. <tr class="row-<?php echo ($t = 1 - $t); ?>"
  132. data-projId="<?php echo $projectInfo->ID_PROJECT; ?>"
  133. data-path="<?php echo $projectInfo->path; ?>">
  134. <td class="p2 r nr">
  135. <input type="checkbox" name="selectedProject" onclick="return selectProject(this);" value="<?php echo $projectInfo->ID_PROJECT; ?>" />
  136. </td>
  137. <td class="p2 l nr"><?php echo $projectInfo->path; ?></td>
  138. <td class="p2" style="max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;" title="<?php echo $projectInfo->M_DIST_DESC; ?>"><?php echo $projectInfo->M_DIST_DESC; ?></td>
  139. <?php foreach ($months as $month) : ?>
  140. <?php if (array_key_exists($month, $projectInfo->costsByMonth)) : ?>
  141. <?php $vCost = V::get($month, '', $projectInfo->costsByMonth); ?>
  142. <?php if ($vCost->COST_CHILD > 0) : ?>
  143. <?php $title = "Koszt projektu {$vCost->COST_SELF} / koszt podprojektów {$vCost->COST_CHILD}"; ?>
  144. <?php if ($vCost->COST_SELF > 0) : ?>
  145. <td class="cost cost-self_and_child"><span class="ttip" title="<?php echo $title; ?>"><?php echo $vCost->COST_TOTAL; ?></span></td>
  146. <?php else : ?>
  147. <td class="cost cost-only_child"><span class="ttip" title="<?php echo $title; ?>"><?php echo $vCost->COST_TOTAL; ?></span></td>
  148. <?php endif; ?>
  149. <?php else : ?>
  150. <td class="cost cost-only_self"><?php echo $vCost->COST_TOTAL; ?></td>
  151. <?php endif; ?>
  152. <?php else : ?>
  153. <td style="min-width:30px">&nbsp;</td>
  154. <?php endif; ?>
  155. <?php endforeach; ?>
  156. </tr>
  157. <?php endforeach; ?>
  158. </tbody>
  159. </table>
  160. </div>
  161. <script>
  162. jQuery(document).ready(function(){
  163. jQuery('.ttip').tooltip();
  164. });
  165. function selectProject(n) {
  166. var $n = jQuery(n);
  167. var $p = $n.parent().parent();
  168. if (n.checked) {
  169. $p.addClass('row-selected');
  170. } else {
  171. $p.removeClass('row-selected');
  172. }
  173. markSubProjects($p, $p.data('path'), n.checked);
  174. function markSubProjects($p, path, checked) {
  175. var $nextRow = $p.next('tr'),
  176. nextPath = $nextRow.data('path'),
  177. nextCheckbox = $nextRow.find('input[type="checkbox"]').get(0);
  178. if (0 !== nextPath.indexOf(path)) {
  179. return;
  180. }
  181. if (checked) {
  182. $nextRow.addClass('row-selected');
  183. } else {
  184. $nextRow.removeClass('row-selected');
  185. }
  186. nextCheckbox.checked = checked;
  187. markSubProjects($nextRow, path, checked);
  188. }
  189. }
  190. function showHideAll(n) {
  191. if (n.checked) {
  192. jQuery('#zestawienie-kosztow-projektow').find('tbody').addClass('showOnlySelected');
  193. } else {
  194. jQuery('#zestawienie-kosztow-projektow').find('tbody').removeClass('showOnlySelected');
  195. }
  196. }
  197. </script>
  198. <?php
  199. }
  200. public function getCostsByYear($year) {
  201. $db = DB::getDB();
  202. $costs = array();
  203. $sql = "
  204. select
  205. t.`ID_PROJECT`
  206. , t.`M_DIST_DESC`
  207. , t.`P_ID`
  208. , t.`path`
  209. , t.`MONTH`
  210. , t.`COST_SELF`
  211. , t.`COST_CHILD`
  212. , t.`COST_TOTAL`
  213. , t.`INCOME_SELF`
  214. , t.`INCOME_CHILD`
  215. , t.`INCOME_TOTAL`
  216. from `test_budget_project_synthetics_view` as t
  217. where 1=1
  218. and t.`MONTH` like '{$year}-%'
  219. ";
  220. $res = $db->query($sql);
  221. while ($r = $db->fetch($res)) {
  222. if (!array_key_exists($r->ID_PROJECT, $costs)) {
  223. $projectInfo = new stdClass();
  224. $projectInfo->ID_PROJECT = $r->ID_PROJECT;
  225. $projectInfo->M_DIST_DESC = $r->M_DIST_DESC;
  226. $projectInfo->path = $r->path;
  227. $projectInfo->costsByMonth = array();
  228. $costs[$r->ID_PROJECT] = $projectInfo;
  229. }
  230. $cost = new stdClass();
  231. $cost->MONTH = $r->MONTH;
  232. $cost->COST_SELF = $r->COST_SELF;
  233. $cost->COST_CHILD = $r->COST_CHILD;
  234. $cost->COST_TOTAL = $r->COST_TOTAL;
  235. $cost->INCOME_SELF = $r->INCOME_SELF;
  236. $cost->INCOME_CHILD = $r->INCOME_CHILD;
  237. $cost->INCOME_TOTAL = $r->INCOME_TOTAL;
  238. $monthNum = intval(substr($r->MONTH, 5, 2));
  239. $costs[$r->ID_PROJECT]->costsByMonth[$monthNum] = $cost;
  240. }
  241. return $costs;
  242. }
  243. public function buildProjectTree($costs) {
  244. $projPaths = array();
  245. foreach ($costs as $idProject => $projectInfo) {
  246. $projPaths[$projectInfo->path] = $projectInfo->ID_PROJECT;
  247. }
  248. //echo'<pre style="width:600px;border:1px solid red;max-height:300px;overflow:auto;">projPaths: ';print_r($projPaths);echo'</pre>';
  249. uksort($projPaths, array($this, 'sortPathsCallback'));
  250. //echo'<pre style="width:600px;border:1px solid red;max-height:300px;overflow:auto;">projPaths sorted: ';print_r($projPaths);echo'</pre>';
  251. return $projPaths;
  252. }
  253. public function sortPathsCallback($a, $b) {
  254. $ea = explode('-', $a);
  255. $eb = explode('-', $b);
  256. $la = count($ea);
  257. $lb = count($eb);
  258. $lmin = min($la, $lb);
  259. for ($i = 0; $i < $lmin; $i++) {
  260. if ($ea[$i] < $eb[$i]) {
  261. return -1;
  262. } else if ($ea[$i] > $eb[$i]) {
  263. return 1;
  264. }
  265. }
  266. return $la - $lb;
  267. }
  268. public function installView() {
  269. $sql = "
  270. CREATE VIEW `test_budget_project_analytics_view` AS
  271. select `IN7_DZIENNIK_KORESP`.`ID_PROJECT` AS `ID_PROJECT`
  272. , date_format(`IN7_DZIENNIK_KORESP`.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m') AS `MONTH`
  273. , sum(`IN7_DZIENNIK_KORESP`.`COST_VALUE`) AS `COST`
  274. , sum(`IN7_DZIENNIK_KORESP`.`INCOME_VALUE`) AS `INCOME`
  275. , 'SELF' AS `TYPE`
  276. from `IN7_DZIENNIK_KORESP`
  277. where ((`IN7_DZIENNIK_KORESP`.`COST_VALUE` > 0) or (`IN7_DZIENNIK_KORESP`.`INCOME_VALUE` > 0))
  278. group by `IN7_DZIENNIK_KORESP`.`ID_PROJECT`
  279. , date_format(`IN7_DZIENNIK_KORESP`.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m')
  280. union
  281. select `p`.`ID` AS `ID_PROJECT`
  282. , date_format(k.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m') AS `MONTH`
  283. , sum(k.`COST_VALUE`) AS `COST`
  284. , sum(k.`INCOME_VALUE`) AS `INCOME`
  285. , 'CHILD' AS `TYPE`
  286. from (`IN7_MK_BAZA_DYSTRYBUCJI` `p`
  287. join `IN7_DZIENNIK_KORESP` k on((((k.`COST_VALUE` > 0) or (k.`INCOME_VALUE` > 0))
  288. and (k.`path` like concat('%-',`p`.`ID`,'-%'))))
  289. )
  290. group by `p`.`ID`, date_format(k.`K_DATA_OTRZYMANEJ_KORESP`, '%Y-%m')
  291. ";
  292. $sql = "
  293. CREATE VIEW `test_budget_project_synthetics_view` AS
  294. select `t1`.`ID_PROJECT` AS `ID_PROJECT`
  295. , `p`.`M_DIST_DESC` AS `M_DIST_DESC`
  296. , `p`.`P_ID` AS `P_ID`
  297. , `p`.`path` AS `path`
  298. , `t1`.`MONTH` AS `MONTH`
  299. , cast(sum(if((`t1`.`TYPE` = 'SELF'),`t1`.`COST`,'0')) as decimal(10,2)) AS `COST_SELF`
  300. , cast(sum(if((`t1`.`TYPE` = 'CHILD'),`t1`.`COST`,'0')) as decimal(10,2)) AS `COST_CHILD`
  301. , sum(`t1`.`COST`) AS `COST_TOTAL`
  302. , cast(sum(if((`t1`.`TYPE` = 'SELF'),`t1`.`INCOME`,'0')) as decimal(10,2)) AS `INCOME_SELF`
  303. , cast(sum(if((`t1`.`TYPE` = 'CHILD'),`t1`.`INCOME`,'0')) as decimal(10,2)) AS `INCOME_CHILD`
  304. , sum(`t1`.`INCOME`) AS `INCOME_TOTAL`
  305. from (`test_budget_project_analytics_view` `t1`
  306. join `IN7_MK_BAZA_DYSTRYBUCJI` `p` on((`t1`.`ID_PROJECT` = `p`.`ID`))
  307. )
  308. group by `t1`.`ID_PROJECT`, `t1`.`MONTH`
  309. ";
  310. }
  311. public function test_fetchDataFromTables() {
  312. $this->projectCost = array();
  313. $this->projectPath = array();
  314. $this->projectDesc = array();
  315. $this->tableProjectCost = array();
  316. $db = DB::getDB();
  317. $sql = "select `ID`, `P_ID`, `M_DIST_DESC`
  318. from `IN7_MK_BAZA_DYSTRYBUCJI`
  319. order by `ID`
  320. ";
  321. $res = $db->query($sql);
  322. while ($row = $db->fetch($res)) {
  323. $project_P_ID[$row->P_ID][] = $row->ID;
  324. $this->projectDesc[$row->ID] = $row->M_DIST_DESC;
  325. }
  326. function buildProjectTree($flat,$id,$tree) {
  327. if (isset($flat[$id])) {
  328. foreach ($flat[$id] as $child) {
  329. $tree[$id][$child] = @buildProjectTree($flat, $child, $tree[$id]);
  330. }
  331. return $tree[$id];
  332. }
  333. }
  334. $projectTree[0] = buildProjectTree($project_P_ID, 0, null);
  335. //print_r($projectTree);
  336. $this->test_fetchDataFromTables__buildProjectPath($projectTree, null);
  337. //print_r($this->projectPath);
  338. $sql = "
  339. select `ID_PROJECT`
  340. , `TRANSFER_OPPOSITE_ID_PROJECT`
  341. , date_format(`K_DATA_OTRZYMANEJ_KORESP`, '%Y-%m') as MONTH
  342. , sum(`COST_VALUE`) as COST
  343. from `IN7_DZIENNIK_KORESP`
  344. where `COST_VALUE`>0
  345. and `K_DATA_OTRZYMANEJ_KORESP` like '2015%'
  346. group by `ID_PROJECT`, `MONTH`
  347. order by `MONTH`, `ID_PROJECT`, `TRANSFER_OPPOSITE_ID_PROJECT`
  348. ";
  349. $res = $db->query($sql);
  350. while ($row = $db->fetch($res)) {
  351. foreach ($this->projectPath[$row->ID_PROJECT] as $id) {
  352. if ($row->ID_PROJECT == $id) @$this->projectCost[$id][$row->MONTH]['SELF'] += $row->COST;
  353. else @$this->projectCost[$id][$row->MONTH]['CHILD'] += $row->COST;
  354. }
  355. if ($row->TRANSFER_OPPOSITE_ID_PROJECT) {
  356. foreach ($this->projectPath[$row->TRANSFER_OPPOSITE_ID_PROJECT] as $id) {
  357. if ($row->TRANSFER_OPPOSITE_ID_PROJECT == $id) @$this->projectCost[$id][$row->MONTH]['SELF']-=$row->COST;
  358. else @$this->projectCost[$id][$row->MONTH]['CHILD'] -= $row->COST;
  359. }
  360. }
  361. }
  362. //echo'<pre>$projectTree: ';print_r($projectTree);echo'</pre>';
  363. //echo'<pre>projectCost: ';print_r($this->projectCost);echo'</pre>';
  364. $this->test_fetchDataFromTables__genTableProjectCost($projectTree);
  365. echo'<pre>tableProjectCost: ';print_r($this->tableProjectCost);echo'</pre>';
  366. }
  367. function test_fetchDataFromTables__genTableProjectCost($tree) {
  368. //if (!empty($tree)) echo '<p>DBG: F.' . __FUNCTION__ . ": tree(" . count($tree) . ")" . '</p>';
  369. if (isset($tree)) {
  370. foreach ($tree as $id => $child) {
  371. //echo '<p>DBG: F.' . __FUNCTION__ . ": tree=>child({$id}) isset(" . (isset($this->projectCost[$id])) . ")" . '</p>';
  372. if (isset($this->projectCost[$id])) {
  373. $this->tableProjectCost[$id]['PATH'] = implode('-', $this->projectPath[$id]);
  374. $this->tableProjectCost[$id]['DESC'] = @$this->projectDesc[$id];
  375. $this->tableProjectCost[$id]['COST'] = $this->projectCost[$id];
  376. }
  377. $this->test_fetchDataFromTables__genTableProjectCost($child);
  378. }
  379. }
  380. }
  381. function test_fetchDataFromTables__buildProjectPath($tree, $ppath) {
  382. if (isset($tree)) {
  383. foreach ($tree as $id => $child) {
  384. $this->projectPath[$id] = $ppath;
  385. $this->projectPath[$id][] = $id;
  386. $this->test_fetchDataFromTables__buildProjectPath($child, $this->projectPath[$id]);
  387. }
  388. }
  389. }
  390. function test_reinstallViewsAndEvents() {
  391. $sqls['RemoveView_korespMain'] = " drop view if exists `in7_dziennik_koresp_budget_main_view` ";
  392. $sqls['CreateView_korespMain'] = "
  393. CREATE VIEW `in7_dziennik_koresp_budget_main_view` AS
  394. select cast(substring_index(substring_index(k.`path`,'-',2),'-',-(1)) as signed) AS `ID`
  395. , substring_index(k.`path`,'-',2) AS `path`
  396. , cast(concat(',',group_concat(distinct k.`ID_PROJECT` order by k.`ID_PROJECT` ASC separator ','),',') as char charset utf8) AS `ID_PROJECT`
  397. , year(k.`K_DATA_OTRZYMANEJ_KORESP`) AS `rok`
  398. , sum(k.`COST_VALUE`) AS `sum_k`
  399. , 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`
  400. , 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`
  401. , 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`
  402. , 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`
  403. , 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`
  404. , 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`
  405. , 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`
  406. , 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`
  407. , 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`
  408. , 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`
  409. , 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`
  410. , 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`
  411. , 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`
  412. , 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`
  413. , 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`
  414. , 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`
  415. , 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`
  416. , 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`
  417. , 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`
  418. , 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`
  419. , 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`
  420. , 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`
  421. , 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`
  422. , 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`
  423. , 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`
  424. , 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`
  425. , 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`
  426. , 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`
  427. , 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`
  428. , 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`
  429. , 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`
  430. , 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`
  431. , 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`
  432. , 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`
  433. , 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`
  434. , 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`
  435. , 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`
  436. , 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`
  437. , 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`
  438. , 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`
  439. , 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`
  440. , 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`
  441. from `IN7_DZIENNIK_KORESP` k
  442. where (k.`COST_VALUE` <> '')
  443. group by substring_index(k.`path`,'-',2)
  444. ";
  445. $sqls['RemoveView_korespMain'] = " drop view if exists `in7_dziennik_koresp_budget_view` ";
  446. $sqls['CreateView_korespMain'] = "
  447. CREATE VIEW `in7_dziennik_koresp_budget_view` AS
  448. select k.`ID` AS `ID`
  449. , k.`path` AS `path`
  450. , k.`ID_PROJECT` AS `ID_PROJECT`
  451. , year(k.`K_DATA_OTRZYMANEJ_KORESP`) AS `rok`
  452. , month(k.`K_DATA_OTRZYMANEJ_KORESP`) AS `miesiac`
  453. , date_format(k.`K_DATA_OTRZYMANEJ_KORESP`,'%Y-%m') AS `data`
  454. , sum(k.`COST_VALUE`) AS `sum_k`
  455. , 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`
  456. , 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`
  457. , 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`
  458. , 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`
  459. , 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`
  460. , 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`
  461. , 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`
  462. , 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`
  463. , 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`
  464. , 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`
  465. , 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`
  466. , 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`
  467. , 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`
  468. , 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`
  469. , 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`
  470. , 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`
  471. , 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`
  472. , 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`
  473. , 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`
  474. , 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`
  475. , 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`
  476. , 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`
  477. , 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`
  478. , 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`
  479. , 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`
  480. , 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`
  481. , 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`
  482. , 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`
  483. , 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`
  484. , 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`
  485. , 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`
  486. , 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`
  487. , 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`
  488. , 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`
  489. , 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`
  490. , 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`
  491. , 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`
  492. , 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`
  493. , 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`
  494. , 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`
  495. , 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`
  496. , 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`
  497. from `IN7_DZIENNIK_KORESP` k
  498. where (k.`COST_VALUE`!='')
  499. group by k.`ID_PROJECT`
  500. ";
  501. $sqlList['RemoveEvent_everyDay'] = "DROP EVENT IF EXISTS `view__budget_project_to_realization_main_event`";
  502. $sqlList['CreateEvent_everyDay'] = "
  503. CREATE EVENT `view__budget_project_to_realization_main_event`
  504. ON SCHEDULE EVERY 1 DAY STARTS '2015-05-12 00:04:30'
  505. ON COMPLETION NOT PRESERVE ENABLE
  506. DO BEGIN
  507. INSERT IGNORE INTO `projects_budget_year_month`(`ID_PROJECT`, `M_DIST_DESC`, `YEAR` ,`A_RECORD_CREATE_AUTHOR`, `A_RECORD_CREATE_DATE`)
  508. SELECT t1.`ID`
  509. , t2.`M_DIST_DESC`
  510. , t1.`rok`
  511. , 'import z widoku budzetu glownych spraw (view__budget_project_to_realization_main_event)'
  512. , NOW()
  513. FROM `in7_dziennik_koresp_budget_main_view` AS t1
  514. LEFT JOIN IN7_MK_BAZA_DYSTRYBUCJI AS t2 ON(t1.ID=t2.ID);
  515. END
  516. ";
  517. }
  518. }