ColumnDealsStatus.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. <?php
  2. // sql table: 'temp_DEALS_STATUS'
  3. class ColumnDealsStatus {
  4. function reinstall() {
  5. global $A_STATUS_L2_SQL;
  6. if (empty($A_STATUS_L2_SQL)) throw new Exception('Config Error: variable "$A_STATUS_L2_SQL" not exists!');
  7. DB::getPDO()->execSql(" DROP PROCEDURE IF EXISTS `update_deals_status` ");
  8. DB::getPDO()->execSql("
  9. CREATE DEFINER=`root`@`localhost` PROCEDURE `update_deals_status`()
  10. BEGIN
  11. DROP TABLE IF EXISTS `temp_DEALS_STATUS`;
  12. CREATE TABLE IF NOT EXISTS `temp_DEALS_STATUS` (
  13. `ID_DEALS` int(11) NOT NULL,
  14. `ID_BILLING_USERS` int(11) NOT NULL,
  15. `A_CREATE_DATE` date NOT NULL DEFAULT '0000-00-00',
  16. `DEALS_ACTIVE` int(1) NOT NULL DEFAULT '0',
  17. `DEALS_BLOCKED` int(1) NOT NULL DEFAULT '0',
  18. `P_DEALDATE_TERM` date NOT NULL DEFAULT '0000-00-00',
  19. `DEAL_TYPE` enum('UMOWA', 'ANEKS', 'INNE', '') NOT NULL DEFAULT '',
  20. `DATA_WYK_PODLACZENIA` date NOT NULL DEFAULT '0000-00-00',
  21. `SERVICES_STATUS` varchar(255) NOT NULL DEFAULT '',
  22. `SERVICES_S_ADDRESS_STREET` varchar(255) NOT NULL DEFAULT '',
  23. KEY `ID_DEALS` (`ID_DEALS`),
  24. KEY `ID_BILLING_USERS` (`ID_BILLING_USERS`),
  25. KEY `DEALS_ACTIVE` (`DEALS_ACTIVE`)
  26. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  27. INSERT INTO `temp_DEALS_STATUS` (`ID_DEALS`, `ID_BILLING_USERS`, `A_CREATE_DATE`, `SERVICES_STATUS`, `P_DEALDATE_TERM`, `SERVICES_S_ADDRESS_STREET`)
  28. select d.`ID`
  29. , d.`ID_BILLING_USERS`
  30. , NOW() as A_CREATE_DATE
  31. , GROUP_CONCAT({$A_STATUS_L2_SQL}) as SERVICES_STATUS
  32. , d.`P_DEALDATE_TERM`
  33. , GROUP_CONCAT( DISTINCT
  34. CASE SV.`NAME_LIST_SERVICES`
  35. WHEN 'USERS2' THEN (select `S_ADDRESS_STREET` from `SES_USERS2_A` as ses_a where ses_a.`ID_SERVICES`=SV.`ID`)
  36. WHEN 'TV' THEN (select `S_ADDRESS_STREET` from `SES_TV_A` as ses_a where ses_a.`ID_SERVICES`=SV.`ID`)
  37. END
  38. ) as SERVICES_S_ADDRESS_STREET
  39. from `DEALS_TABLE` as d
  40. left join `SERVICES` as SV on (SV.`ID_DEALS_TABLE`=d.`ID`)
  41. where
  42. SV.`NAME_LIST_SERVICES` not in('EMAIL','WWW_MASS')
  43. group by d.`ID`;
  44. -- update DEALS_ACTIVE and DEALS_BLOCKED
  45. UPDATE `temp_DEALS_STATUS` set `DEALS_ACTIVE` = 1 where `SERVICES_STATUS` like '%NORMAL%';
  46. UPDATE `temp_DEALS_STATUS` set `DEALS_BLOCKED` = 1 where `SERVICES_STATUS` like '%OFF_SOFT%' and `DEALS_ACTIVE` = 0;
  47. -- update DATA_WYK_PODLACZENIA `run_update_data_wyk_podlaczenia_query`
  48. UPDATE `temp_DEALS_STATUS` t
  49. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  50. set t.`DEAL_TYPE` = 'UMOWA'
  51. where t.`DEALS_ACTIVE` = 1
  52. and d.ID_OFFERS_ON != '' and d.ID_OFFERS_OFF = ''
  53. ;
  54. UPDATE `temp_DEALS_STATUS` t
  55. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  56. set t.`DEAL_TYPE` = 'ANEKS'
  57. where t.`DEALS_ACTIVE` = 1
  58. and d.ID_OFFERS_ON != '' and d.ID_OFFERS_OFF != ''
  59. ;
  60. UPDATE `temp_DEALS_STATUS` t
  61. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  62. set t.`DEAL_TYPE` = 'INNE'
  63. where t.`DEALS_ACTIVE` = 1
  64. and t.DEAL_TYPE not in ( 'UMOWA', 'ANEKS' )
  65. ;
  66. UPDATE `temp_DEALS_STATUS` t
  67. join (
  68. (
  69. select a.T_WHEN_CONNECTED, s.ID_DEALS_TABLE, a.ID_BILLING_USERS
  70. from SES_USERS2_A a
  71. join SERVICES s on ( s.ID = a.ID_SERVICES )
  72. where a.T_WHEN_CONNECTED > 0
  73. )
  74. union
  75. (
  76. select a.T_WHEN_CONNECTED, s.ID_DEALS_TABLE, a.ID_BILLING_USERS
  77. from SES_TV_A a
  78. join SERVICES s on ( s.ID = a.ID_SERVICES )
  79. where a.T_WHEN_CONNECTED > 0
  80. )
  81. union
  82. (
  83. select a.T_WHEN_CONNECTED, s.ID_DEALS_TABLE, a.ID_BILLING_USERS
  84. from SES_VOIP_A a
  85. join SERVICES s on ( s.ID = a.ID_SERVICES )
  86. where a.T_WHEN_CONNECTED > 0
  87. )
  88. order by T_WHEN_CONNECTED asc
  89. limit 1
  90. ) x on ( x.ID_BILLING_USERS = t.ID_BILLING_USERS and x.ID_DEALS_TABLE = t.ID_DEALS )
  91. set t.`DATA_WYK_PODLACZENIA` = x.T_WHEN_CONNECTED
  92. where t.`DEALS_ACTIVE` = 1
  93. and t.`DEAL_TYPE` = 'UMOWA'
  94. ;
  95. UPDATE `temp_DEALS_STATUS` t
  96. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  97. set t.`DATA_WYK_PODLACZENIA` = IF( d.USTALONA_DATA_PODLACZENIA > 0, d.USTALONA_DATA_PODLACZENIA, d.P_DEALDATE )
  98. where t.`DEALS_ACTIVE` = 1
  99. and t.`DEAL_TYPE` = 'ANEKS'
  100. ;
  101. UPDATE `DEALS_TABLE` d
  102. join `temp_DEALS_STATUS` t on ( d.ID = t.ID_DEALS )
  103. set d.`DATA_WYK_PODLACZENIA` = t.DATA_WYK_PODLACZENIA
  104. where t.`DEALS_ACTIVE` = 1
  105. ;
  106. END
  107. ");
  108. DB::getPDO()->execSql("
  109. CREATE EVENT IF NOT EXISTS `_DEALS_TABLE__update_deals_status_every_day_event`
  110. ON SCHEDULE EVERY 1 DAY STARTS '2019-01-01 04:00:00'
  111. ON COMPLETION NOT PRESERVE ENABLE
  112. DO BEGIN
  113. call `update_deals_status`();
  114. END
  115. ");
  116. }
  117. public static function get_update_query($userID = null) {
  118. $sqlUserID = '';
  119. if ($userID > 0) {
  120. $sqlUserID = " and `ID_BILLING_USERS` = '{$userID}' ";
  121. }
  122. return "
  123. UPDATE `temp_DEALS_STATUS` set
  124. `DEALS_ACTIVE` = 1
  125. where `SERVICES_STATUS` like '%NORMAL%'
  126. {$sqlUserID}
  127. ";
  128. }
  129. public static function get_update_blocked_query($userID = null) {
  130. $sqlUserID = '';
  131. if ($userID > 0) {
  132. $sqlUserID = " and `ID_BILLING_USERS` = '{$userID}' ";
  133. }
  134. return "
  135. UPDATE `temp_DEALS_STATUS` set
  136. `DEALS_BLOCKED`=1
  137. where `SERVICES_STATUS` like '%OFF_SOFT%'
  138. and `DEALS_ACTIVE` = 0
  139. {$sqlUserID}
  140. ";
  141. }
  142. public static function run_update_data_wyk_podlaczenia_query($userID = null) {
  143. $sqlUserID = '';
  144. if ($userID > 0) {
  145. $sqlUserID = " and t.`ID_BILLING_USERS` = '{$userID}' ";
  146. }
  147. DB::getPDO()->execSql("
  148. UPDATE `temp_DEALS_STATUS` t
  149. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  150. set t.`DEAL_TYPE` = 'UMOWA'
  151. where t.`DEALS_ACTIVE` = 1
  152. and d.ID_OFFERS_ON != '' and d.ID_OFFERS_OFF = ''
  153. {$sqlUserID}
  154. ");
  155. DB::getPDO()->execSql("
  156. UPDATE `temp_DEALS_STATUS` t
  157. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  158. set t.`DEAL_TYPE` = 'ANEKS'
  159. where t.`DEALS_ACTIVE` = 1
  160. and d.ID_OFFERS_ON != '' and d.ID_OFFERS_OFF != ''
  161. {$sqlUserID}
  162. ");
  163. DB::getPDO()->execSql("
  164. UPDATE `temp_DEALS_STATUS` t
  165. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  166. set t.`DEAL_TYPE` = 'INNE'
  167. where t.`DEALS_ACTIVE` = 1
  168. and t.DEAL_TYPE not in ( 'UMOWA', 'ANEKS' )
  169. {$sqlUserID}
  170. ");
  171. // DB::getPDO()->execSql("
  172. // UPDATE `temp_DEALS_STATUS` t
  173. // set t.`DATA_WYK_PODLACZENIA` = (
  174. // select a.T_WHEN_CONNECTED
  175. // from SES_USERS2_A a
  176. // join SERVICES s on ( s.ID = a.ID_SERVICES )
  177. // where a.ID_BILLING_USERS = t.ID_BILLING_USERS
  178. // and s.ID_DEALS_TABLE = t.ID_DEALS
  179. // and a.T_WHEN_CONNECTED > 0
  180. // order by a.T_WHEN_CONNECTED asc
  181. // limit 1
  182. // )
  183. // where t.`DEALS_ACTIVE` = 1
  184. // and t.`DEAL_TYPE` = 'UMOWA'
  185. // {$sqlUserID}
  186. // ");
  187. DB::getPDO()->execSql("
  188. UPDATE `temp_DEALS_STATUS` t
  189. join (
  190. (
  191. select a.T_WHEN_CONNECTED, s.ID_DEALS_TABLE, a.ID_BILLING_USERS
  192. from SES_USERS2_A a
  193. join SERVICES s on ( s.ID = a.ID_SERVICES )
  194. where a.T_WHEN_CONNECTED > 0
  195. )
  196. union
  197. (
  198. select a.T_WHEN_CONNECTED, s.ID_DEALS_TABLE, a.ID_BILLING_USERS
  199. from SES_TV_A a
  200. join SERVICES s on ( s.ID = a.ID_SERVICES )
  201. where a.T_WHEN_CONNECTED > 0
  202. )
  203. union
  204. (
  205. select a.T_WHEN_CONNECTED, s.ID_DEALS_TABLE, a.ID_BILLING_USERS
  206. from SES_VOIP_A a
  207. join SERVICES s on ( s.ID = a.ID_SERVICES )
  208. where a.T_WHEN_CONNECTED > 0
  209. )
  210. order by T_WHEN_CONNECTED asc
  211. limit 1
  212. ) x on ( x.ID_BILLING_USERS = t.ID_BILLING_USERS and x.ID_DEALS_TABLE = t.ID_DEALS )
  213. set t.`DATA_WYK_PODLACZENIA` = x.T_WHEN_CONNECTED
  214. where t.`DEALS_ACTIVE` = 1
  215. and t.`DEAL_TYPE` = 'UMOWA'
  216. {$sqlUserID}
  217. ");
  218. DB::getPDO()->execSql("
  219. UPDATE `temp_DEALS_STATUS` t
  220. join `DEALS_TABLE` d on ( d.ID = t.ID_DEALS )
  221. set t.`DATA_WYK_PODLACZENIA` = IF( d.USTALONA_DATA_PODLACZENIA > 0, d.USTALONA_DATA_PODLACZENIA, d.P_DEALDATE )
  222. where t.`DEALS_ACTIVE` = 1
  223. and t.`DEAL_TYPE` = 'ANEKS'
  224. {$sqlUserID}
  225. ");
  226. DB::getPDO()->execSql("
  227. UPDATE `DEALS_TABLE` d
  228. join `temp_DEALS_STATUS` t on ( d.ID = t.ID_DEALS )
  229. set d.`DATA_WYK_PODLACZENIA` = t.DATA_WYK_PODLACZENIA
  230. where t.`DEALS_ACTIVE` = 1
  231. {$sqlUserID}
  232. ");
  233. }
  234. public static function get_insert_query($userID = null) {
  235. global $A_STATUS_L2_SQL;// @from .config.php
  236. if (empty($A_STATUS_L2_SQL)) {
  237. die('Config Error: variable "$A_STATUS_L2_SQL" not exists!');
  238. }
  239. /*
  240. select d.`ID`
  241. , d.`ID_BILLING_USERS`
  242. , '2012-10-01' as A_CREATE_DATE
  243. , GROUP_CONCAT(if(SV.HANGUP_STATUS=SV.A_STATUS,coalesce(SV.A_STATUS),
  244. if( ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM) and ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  245. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , coalesce(SV.HANGUP_STATUS),
  246. if( ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM) and ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  247. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , coalesce(SV.A_STATUS),
  248. if( ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_TILL)
  249. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  250. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , coalesce(SV.HANGUP_STATUS),
  251. if( ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW())< unix_timestamp(SV.HANGUP_TILL)
  252. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  253. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , coalesce(SV.A_STATUS),
  254. if( (
  255. ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  256. and ( SV.HANGUP_FROM='0000-00-00' or SV.HANGUP_FROM is null )) , coalesce(SV.A_STATUS),
  257. if( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL) and (
  258. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  259. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , coalesce(SV.A_STATUS),
  260. if( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL) and
  261. SV.HANGUP_FROM<SV.HANGUP_TILL and (
  262. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  263. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , 'ERROR1',
  264. 'ERROR2'
  265. )
  266. )
  267. )
  268. )
  269. )
  270. )
  271. )
  272. )
  273. ) as SERVICES_STATUS
  274. , d.`P_DEALDATE_TERM`
  275. from `DEALS_TABLE` as d
  276. left join `SERVICES` as SV on (SV.`ID_DEALS_TABLE`=d.`ID`)
  277. where
  278. SV.`NAME_LIST_SERVICES` not in('EMAIL')
  279. group by d.`ID`
  280. */
  281. // TODO: dodac adresy z pozostalych uslug VOIP, TVCP, etc...
  282. $sqlUserID = '';
  283. if ($userID > 0) {
  284. $sqlUserID = " and SV.`ID_BILLING_USERS`='{$userID}' ";
  285. }
  286. return "
  287. INSERT INTO `temp_DEALS_STATUS` (`ID_DEALS`, `ID_BILLING_USERS`, `A_CREATE_DATE`, `SERVICES_STATUS`, `P_DEALDATE_TERM`, `SERVICES_S_ADDRESS_STREET`)
  288. select d.`ID`
  289. , d.`ID_BILLING_USERS`
  290. , '" . date("Y-m-d") . "' as A_CREATE_DATE
  291. , GROUP_CONCAT({$A_STATUS_L2_SQL}) as SERVICES_STATUS
  292. , d.`P_DEALDATE_TERM`
  293. , GROUP_CONCAT( DISTINCT
  294. CASE SV.`NAME_LIST_SERVICES`
  295. WHEN 'USERS2' THEN (select `S_ADDRESS_STREET` from `SES_USERS2_A` as ses_a where ses_a.`ID_SERVICES`=SV.`ID`)
  296. WHEN 'TV' THEN (select `S_ADDRESS_STREET` from `SES_TV_A` as ses_a where ses_a.`ID_SERVICES`=SV.`ID`)
  297. END
  298. ) as SERVICES_S_ADDRESS_STREET
  299. from `DEALS_TABLE` as d
  300. left join `SERVICES` as SV on (SV.`ID_DEALS_TABLE`=d.`ID`)
  301. where
  302. SV.`NAME_LIST_SERVICES` not in('EMAIL','WWW_MASS')
  303. {$sqlUserID}
  304. group by d.`ID`
  305. ";
  306. }
  307. public static function get_last_update() {
  308. $db = DB::getDB();
  309. $tableName = 'temp_DEALS_STATUS';
  310. if (empty($_SESSION["{$tableName}_COLUMN"]['_last_update'])) {
  311. $_SESSION["{$tableName}_COLUMN"]['_last_update'] = '';
  312. $sql = "SELECT td.`A_CREATE_DATE` from `temp_DEALS_STATUS` as td limit 1";
  313. $res = $db->query($sql, false);
  314. if ($res) {
  315. if ($r = $db->fetch($res)) {
  316. $_SESSION["{$tableName}_COLUMN"]['_last_update'] = $r->A_CREATE_DATE;
  317. }
  318. }
  319. }
  320. return $_SESSION["{$_table}_COLUMN"]['_last_update'];
  321. }
  322. public static function set_last_update( $date ) {
  323. $tableName = 'temp_DEALS_STATUS';
  324. $_SESSION["{$tableName}_COLUMN"]['_last_update'] = $date;
  325. }
  326. public static function is_updated() {
  327. return (self::get_last_update() >= date("Y-m-d"));
  328. }
  329. public static function run_update( $force = false ) {
  330. $run = ($force) ? true : !self::is_updated();
  331. if ($run) {
  332. DB::getPDO()->execSql(" DROP TABLE IF EXISTS `temp_DEALS_STATUS` ");
  333. DB::getPDO()->execSql("
  334. CREATE TABLE IF NOT EXISTS `temp_DEALS_STATUS` (
  335. `ID_DEALS` int(11) NOT NULL,
  336. `ID_BILLING_USERS` int(11) NOT NULL,
  337. `A_CREATE_DATE` date NOT NULL DEFAULT '0000-00-00',
  338. `DEALS_ACTIVE` int(1) NOT NULL DEFAULT '0',
  339. `DEALS_BLOCKED` int(1) NOT NULL DEFAULT '0',
  340. `P_DEALDATE_TERM` date NOT NULL DEFAULT '0000-00-00',
  341. `DEAL_TYPE` enum('UMOWA', 'ANEKS', 'INNE', '') NOT NULL DEFAULT '',
  342. `DATA_WYK_PODLACZENIA` date NOT NULL DEFAULT '0000-00-00',
  343. `SERVICES_STATUS` varchar(255) NOT NULL DEFAULT '',
  344. `SERVICES_S_ADDRESS_STREET` varchar(255) NOT NULL DEFAULT '',
  345. KEY `ID_DEALS` (`ID_DEALS`),
  346. KEY `ID_BILLING_USERS` (`ID_BILLING_USERS`),
  347. KEY `DEALS_ACTIVE` (`DEALS_ACTIVE`)
  348. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  349. ");
  350. $sql = self::get_insert_query();
  351. DB::getPDO()->execSql($sql);
  352. $sql = self::get_update_query();
  353. DB::getPDO()->execSql($sql);
  354. $sql = self::get_update_blocked_query();
  355. DB::getPDO()->execSql($sql);
  356. self::run_update_data_wyk_podlaczenia_query();
  357. $date = date("Y-m-d");
  358. self::set_last_update($date);
  359. }
  360. return true;
  361. }
  362. public static function run_update_for_user($userID) {
  363. DB::getPDO()->execSql(" DELETE from `temp_DEALS_STATUS` where `ID_BILLING_USERS` = :id_user ", [ ':id_user' => $userID ]);
  364. $sql = self::get_insert_query($userID);
  365. DB::getPDO()->execSql($sql);
  366. $sql = self::get_update_query($userID);
  367. DB::getPDO()->execSql($sql);
  368. $sql = self::get_update_blocked_query($userID);
  369. DB::getPDO()->execSql($sql);
  370. $sql = self::run_update_data_wyk_podlaczenia_query($userID);
  371. DB::getPDO()->execSql($sql);
  372. return true;
  373. }
  374. public static function get_deals_stats_by_months( $force = false ) {
  375. $deals_stats = array();
  376. // read from cache if not force
  377. if (!$force) {
  378. $tableName = 'temp_DEALS_STATUS';
  379. if (!empty($_SESSION["{$tableName}_COLUMN"]['_stats_by_month_cache'])) {
  380. foreach ($_SESSION["{$tableName}_COLUMN"]['_stats_by_month_cache'] as $k => $v) {
  381. $deals_stats[$k] = $v;
  382. }
  383. return $deals_stats;
  384. }
  385. }
  386. $loop_limit = 12;
  387. // fetch months, count
  388. $sql = "
  389. select
  390. IF(substr(td.`P_DEALDATE_TERM`, 1, 7) < '" . date('Y-m') . "-00'
  391. , '0000-00'
  392. , substr(td.`P_DEALDATE_TERM`, 1, 7)
  393. ) as deal_term_month
  394. , count(1) as cnt
  395. from `temp_DEALS_STATUS` as td
  396. where td.`DEALS_ACTIVE`=1
  397. group by deal_term_month
  398. order by deal_term_month asc
  399. ";
  400. if (V::get('DBG_DEALS', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo'</pre>';}
  401. $res = DB::query( $sql );
  402. while ($r = DB::fetch_assoc( $res )) {
  403. $r['suma'] = 0;
  404. $deals_stats[$r['deal_term_month']] = $r;
  405. }
  406. // fetch suma, for first 12 months
  407. foreach ($deals_stats as $k_month => $v_month) {
  408. if ($loop_limit-- <= 0) {
  409. break;
  410. }
  411. $db = DB::getDB();
  412. $sqlWhereTerm = "td.`P_DEALDATE_TERM` like '" . $k_month . "-%'";
  413. if ($k_month == '0000-00') {
  414. $sqlWhereTerm = "substr(td.`P_DEALDATE_TERM`, 1, 7)<'" . date('Y-m') . "-00'";
  415. }
  416. $sql = "
  417. select
  418. sum( (u.`ABONAMENT_VALUE` * (100 + u.`VAT`))/100 ) as suma
  419. from `temp_DEALS_STATUS` as td
  420. left join `SERVICES` as u on (u.`ID_DEALS_TABLE`=td.`ID_DEALS`)
  421. where
  422. {$sqlWhereTerm}
  423. and td.`DEALS_ACTIVE`=1
  424. and u.`ID` is not null
  425. ";
  426. if (V::get('DBG_DEALS', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo'</pre>';}
  427. $res = $db->query($sql);
  428. if ($r = $db->fetch($res)) {
  429. if (isset($deals_stats[$k_month])) {
  430. $deals_stats[$k_month]['suma'] = $r->suma;
  431. }
  432. }
  433. }
  434. if (V::get('DBG_DEALS', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">deals_stats (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($deals_stats);echo'</pre>';}
  435. // save in cache
  436. $tableName = 'temp_DEALS_STATUS';
  437. $_SESSION["$tableName}_COLUMN"]['_stats_by_month_cache'] = array();
  438. foreach ($deals_stats as $k => $v) {
  439. $_SESSION["$tableName}_COLUMN"]['_stats_by_month_cache'][$k] = $v;
  440. }
  441. return $deals_stats;
  442. }
  443. public static function get_deals_stats_by_month($_month, $_limitstart) {
  444. $sql_where = "";
  445. $sql_limit = "limit 100";
  446. if ($_limitstart > 0) {
  447. $sql_limit .= " offset " . $_limitstart;
  448. }
  449. $sql_where_and_arr = array();
  450. if ($_month == '0000-00') {// filter - P_DEALDATE_TERM
  451. $sql_where_and_arr[] = "td.`P_DEALDATE_TERM`<'" . date("Y-m") . "-00'";
  452. } else {
  453. $sql_where_and_arr[] = "td.`P_DEALDATE_TERM` like '" . $_month . "-%'";
  454. }
  455. $sql_where_and_arr[] = "td.`DEALS_ACTIVE`=1";// filter - ACTIVE: tylko aktywne umowy
  456. $sql_where = (!empty($sql_where_and_arr))? "where" . "\n" . implode(" and ", $sql_where_and_arr) : "";
  457. $db = DB::getDB();
  458. $sql = "select
  459. d.`ID`
  460. , d.`ID_BILLING_USERS`
  461. , d.`P_DEALPREFIX`
  462. , d.`P_DEALNUMBER`
  463. , d.`P_DEALNUMBER_OLD`
  464. , d.`P_DEALDATE`
  465. , d.`P_DEALDATE_TERM`
  466. , d.`ANEX_NEEDED`
  467. , d.`ANEX_CONFIRM_DATE`
  468. , d.`DEALDESC`
  469. , d.`A_STATUS`
  470. , BUA.`P_PHONE` as BUA_P_PHONE
  471. , concat_ws(' ', BUA.`P_NAME`, BUA.`P_NAME_SECOND`) as BUA_P_NAME
  472. from `temp_DEALS_STATUS` as td
  473. left join `DEALS_TABLE` as d on (d.`ID`=td.`ID_DEALS`)
  474. left join `BILLING_USERS_ADD` as BUA on (BUA.`id_users`=d.`ID_BILLING_USERS`)
  475. " . $sql_where . "
  476. order by d.`ID` ASC
  477. " . $sql_limit . "
  478. ";
  479. if (V::get('DBG_DEALS', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo'</pre>';}
  480. $res = $db->query($sql);
  481. while ($r = $db->fetch($res)) {
  482. $deals[$r->ID] = $r;
  483. }
  484. if (empty($deals)) {
  485. return $deals;
  486. }
  487. // function fetch_services(&$deals)
  488. $sql_deals_ids = array();
  489. foreach ($deals as $k_id => $v_deal) {
  490. $sql_deals_ids[] = "'" . $k_id . "'";
  491. $deals[$k_id]->uslugi = array();
  492. }
  493. if (empty($sql_deals_ids)) {
  494. return $deals;
  495. }
  496. global $A_STATUS_L2_SQL;// @from .config.php, @require SERVICES as SV
  497. $db = DB::getDB();
  498. $sql = "select
  499. SV.`ID`
  500. , SV.`ID_DEALS_TABLE`
  501. , $A_STATUS_L2_SQL as A_STATUS
  502. , SV.`ID_OFFERS`
  503. , SV.`ABONAMENT_VALUE`
  504. , SV.`NAME_LIST_SERVICES`
  505. , SV.`VAT`
  506. , IF(SV.`NAME_LIST_SERVICES`='USERS2'
  507. , (select `S_ADDRESS_STREET` from `SES_USERS2_A` as ses_a where ses_a.`ID_SERVICES`=SV.`ID`)
  508. , IF(SV.`NAME_LIST_SERVICES`='TV'
  509. , (select `S_ADDRESS_STREET` from `SES_TV_A` as ses_a where ses_a.`ID_SERVICES`=SV.`ID`)
  510. , null
  511. )
  512. ) as S_ADDRESS_STREET
  513. from `SERVICES` as SV
  514. where SV.`ID_DEALS_TABLE` in(" . implode(", ", $sql_deals_ids) . ")
  515. ";
  516. if (V::get('DBG_DEALS', '', $_GET)){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">sql (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo'</pre>';}
  517. $res = $db->query($sql);
  518. while ($r = $db->fetch($res)) {
  519. $deals[$r->ID_DEALS_TABLE]->uslugi[$r->ID] = $r;
  520. }
  521. // } // fetch_services
  522. return $deals;
  523. }
  524. }