StatsModel.php 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003
  1. <?php
  2. Lib::loadClass('Windykacja_BillingListDocs');
  3. Lib::loadClass('Windykacja_StatsHelper');
  4. class Windykacja_StatsModel {
  5. public static function _parse_query($q) {
  6. $sql_where = '';
  7. $sql_where_and_arr = array();
  8. $usrAclGroups = User::getLdapGroupsNames();
  9. $usrAclGroups[] = '';
  10. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  11. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  12. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  13. $filter_selected = Windykacja_StatsHelper::get_filter_selected(); // V::get('_f', '', $_GET);
  14. if ($filter_selected) {
  15. if ($filter_selected == 'po-terminie') {
  16. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  17. $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  18. $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  19. }
  20. else if ($filter_selected == '3 m-ce przed') {
  21. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  22. $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  23. $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)";
  24. $sql_where_and_arr[] = "w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  25. }
  26. else if ($filter_selected == 'tel1') {
  27. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  28. $sql_where_and_arr[] = "w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')";
  29. $sql_where_and_arr[] = "( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
  30. or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 3 MONTH) )";
  31. }
  32. else if ($filter_selected == 'bad_address') {
  33. $sql_where_and_arr[] = "w.`BAD_ADDRESS`>0";
  34. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  35. }
  36. else if ($filter_selected == 'stan_zero') {
  37. $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  38. $sql_where_and_arr[] = "w.`PAY_SALDO`>-0.05";
  39. }
  40. else if ($filter_selected == '10-ego') {
  41. $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  42. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  43. }
  44. else if ($filter_selected == 'has_nr_sad') {
  45. $sql_where_and_arr[] = "w.`NR_SPRAWY_SAD`!=''";
  46. }
  47. else if ($filter_selected == 'has_nr_komornik') {
  48. $sql_where_and_arr[] = "w.`NR_SPRAWY_KOMORNIK`!=''";
  49. }
  50. else if ($filter_selected == 'has_ustalenia') {
  51. $sql_where_and_arr[] = "w.`L_APPOITMENT_INFO`!=''";
  52. }
  53. else if ($filter_selected == 'sad_and_komornik') {
  54. $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`!=''";
  55. }
  56. else if ($filter_selected == 'sad_bez_komornik') {
  57. $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`=''";
  58. }
  59. else if ($filter_selected == 'isMovedToVectra') {
  60. $sql_where_and_arr[] = "w.`IS_MOVED_TO_VECTRA`=1";
  61. }
  62. else {
  63. $sql_where_and_arr[] = "w.`A_STATUS`='{$filter_selected}'";
  64. }
  65. }
  66. if (!empty($q)) {
  67. $q = trim($q);
  68. if (is_numeric($q)) {// billing number
  69. $sqlIdUsr = $q;
  70. $sql_where_and_arr[] = "a.`id_users`='{$sqlIdUsr}'";
  71. }
  72. else {// string - name, second name
  73. $q_arr_values = array();
  74. $q_exp = explode(' ', $q);
  75. foreach ($q_exp as $v_q) {
  76. $v_q = trim($v_q);
  77. if (strlen($v_q) > 2) {// min. 3 znaki
  78. $q_arr_values[] = strtolower($v_q);
  79. }
  80. }
  81. foreach ($q_arr_values as $q_value) {
  82. $sql_filter_q = array();
  83. $q_arr = array();// uniq array
  84. $q_arr_pl = array();// loop array
  85. $pl_letters = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż');
  86. $en_letters = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z');
  87. $sqlQValue = DB::getPDO()->quote("{$q_value}%");
  88. $sql_filter_q[] = " a.`P_NAME` like {$sqlQValue} ";
  89. $sql_filter_q[] = " a.`P_NAME_SECOND` like {$sqlQValue} ";
  90. $q_value_clean_en = str_replace($pl_letters, $en_letters, $q_value);
  91. $q_value_clean_pl = str_replace($en_letters, $pl_letters, $q_value_clean_en);
  92. $q_value_clean_pr = str_replace($en_letters, '_', $q_value_clean_en);
  93. if ($q_value_clean_en != $q_value) $q_arr[$q_value_clean_en] = true;
  94. if ($q_value_clean_pl != $q_value) $q_arr[$q_value_clean_pl] = true;
  95. if ($q_value_clean_pr != $q_value) $q_arr[$q_value_clean_pr] = true;
  96. foreach ($q_arr as $v_q => $v_val) {
  97. $sqlQValue = DB::getPDO()->quote($v_q);
  98. $sql_filter_q[] = " a.`P_NAME` like {$sqlQValue} ";
  99. $sql_filter_q[] = " a.`P_NAME_SECOND` like {$sqlQValue} ";
  100. // $sql_filter_q[] = "a.`P_ADDRESS_STREET` like '{$sqlQValue}'";
  101. }
  102. $sql_field_1 = " a.`P_NAME` ";
  103. $sql_field_2 = " a.`P_NAME_SECOND` ";
  104. foreach ($pl_letters as $k_ind => $v_char_pl) {
  105. $sql_field_1 = "REPLACE({$sql_field_1}, '{$v_char_pl}', '{$en_letters[$k_ind]}')";
  106. $sql_field_2 = "REPLACE({$sql_field_2}, '{$v_char_pl}', '{$en_letters[$k_ind]}')";
  107. }
  108. $q_value_clean_en = DB::getPDO()->quote("%{$q_value_clean_en}%");
  109. $sql_filter_q[] = $sql_field_1 . " like {$q_value_clean_en} ";
  110. $sql_filter_q[] = $sql_field_2 . " like {$q_value_clean_en} ";
  111. $sql_where_and_arr[] = "(" . implode(" or ", $sql_filter_q) . ")";
  112. }
  113. }
  114. }
  115. $special_filter_active = V::get('_special_filter_active', '', $_GET);
  116. if ('today' == $special_filter_active) {
  117. $today = date("Y-m-d");
  118. $sql_where_and_arr[] = "w.`A_STATUS_UPDATE_DATE`='{$today}'";
  119. }
  120. $special_filter_msg_mail = V::get('_special_filter_msg_mail', '', $_GET);
  121. if ('not_today' == $special_filter_msg_mail) {
  122. $sql_where_and_arr[] = "w.`LAST_PHONE_STATUS_DATE`<'{$today}'";
  123. }
  124. $special_filter_msg_sms = V::get('_special_filter_msg_sms', '', $_GET);
  125. if ('not_today' == $special_filter_msg_sms) {
  126. $sql_where_and_arr[] = "w.`LAST_PHONE_STATUS_DATE`<'{$today}'";
  127. }
  128. if (!empty($sql_where_and_arr)) {
  129. $sql_where = implode(" and ", $sql_where_and_arr);
  130. } else {
  131. $sql_where = "1=1";
  132. }
  133. return $sql_where;
  134. }
  135. public static function get_order_by_fields() {
  136. $order_by_fields = array();
  137. $order_by_fields[] = 'ID';
  138. $order_by_fields[] = 'is_firma';
  139. $order_by_fields[] = 'BILLING_OWNER';
  140. $order_by_fields[] = 'STATUS';
  141. $order_by_fields[] = 'BLOKADA';
  142. $order_by_fields[] = 'ID_BILLING_USERS';
  143. $order_by_fields[] = 'P_NAME';
  144. $order_by_fields[] = 'PAY_SALDO';
  145. $order_by_fields[] = 'PAY_FVAT';
  146. $order_by_fields[] = 'PAY_DATE';
  147. $order_by_fields[] = 'PAY_TERM';
  148. $order_by_fields[] = 'HAS_ACTIVE_NET';
  149. $order_by_fields[] = 'HAS_ACTIVE_TV';
  150. $order_by_fields[] = 'IS_MOVED_TO_VECTRA';
  151. return $order_by_fields;
  152. }
  153. public static function get_users_total($q = '') {
  154. $sql_where = self::_parse_query($q);
  155. return DB::getPDO()->fetchValue("
  156. select count(1) as cnt
  157. from `USERS2_WINDYKACJA_STATUS` as w
  158. left join `BILLING_USERS_ADD` as a on ( a.`id_users` = w.`ID_BILLING_USERS` )
  159. where {$sql_where}
  160. ");
  161. }
  162. public static function get_sql_users_select() {
  163. $sql_select = "
  164. a.`id_users` as ID
  165. , a.`id_users`
  166. , a.`P_NAME`
  167. , a.`P_NAME_SECOND`
  168. , a.`P_ADDRESS_STREET`
  169. , a.`P_ADDRESS_HOME`
  170. , a.`P_ADDRESS_HOUSE`
  171. , a.`P_ADDRESS_CITY`
  172. , a.`P_ADDRESS_POST_CODE`
  173. , a.`P_ADDRESS_REGION`
  174. , a.`P_PESEL`
  175. , a.`P_PHONE`
  176. , a.`P_OTHER_DOC`
  177. , a.`user_mail_contact`
  178. , a.`is_firma`
  179. , a.`P_ADRESS_KORESP_1282`
  180. , w.`ID` as WINDYKACJA_ID
  181. , w.`ID_BILLING_USERS`
  182. , w.`A_STATUS`
  183. , w.`A_STATUS_UPDATE_DATE`
  184. , w.`USER_PAY_TERM_ADD`
  185. , w.`L_APPOITMENT_DATE`
  186. , w.`L_APPOITMENT_USER`
  187. , w.`L_APPOITMENT_INFO`
  188. , w.`PAY_DATE`
  189. , w.`PAY_DATE_FIRST_FVAT`
  190. , w.`PAY_TERM`
  191. , w.`PAY_SALDO`
  192. , w.`PAY_FVAT`
  193. , w.`wezwanie1_DATE`
  194. , w.`wezwanie2_DATE`
  195. , w.`wpis_w_krd_DATE`
  196. , w.`ID_KORESP`
  197. , w.`LAST_ID_KORESP_WEZWANIE1`
  198. , w.`LAST_ID_KORESP_WEZWANIE2`
  199. , w.`LAST_PAY_DATE`
  200. , w.`LAST_PAY_VALUE`
  201. , w.`LAST_FVAT_PAY_TERM`
  202. , w.`LAST_FVAT_VALUE`
  203. , w.`PAY_SALDO_30_DNI`
  204. , w.`PAY_SALDO_ISSUED`
  205. , w.`BAD_ADDRESS`
  206. -- , (select bu.`BILLING_OWNER` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as BILLING_OWNER
  207. -- , (select bu.`STATUS` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as STATUS
  208. , bu.`STATUS`
  209. , bu.`BILLING_OWNER`
  210. , w.`NR_SPRAWY_KRD`
  211. , w.`NR_SPRAWY_SAD`
  212. , w.`NR_SPRAWY_KOMORNIK`
  213. , w.`ACCOUNT_NUMBER`
  214. , w.`SERVICES_STREETS`
  215. , w.`IS_MOVED_TO_VECTRA` as IS_MOVED_TO_VECTRA
  216. -- , ('REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA' = (select `RODZAJ_DZIALANIA_HANDLOWEGO`
  217. -- from `DEALS_TABLE`
  218. -- where `A_STATUS` = 'NORMAL'
  219. -- and `ID_BILLING_USERS` = w.`ID_BILLING_USERS`
  220. -- order by `ID` DESC
  221. -- limit 1)
  222. -- ) as IS_MOVED_TO_VECTRA
  223. , w.`HAS_ACTIVE_NET`
  224. , w.`HAS_ACTIVE_TV`
  225. ";
  226. return $sql_select;
  227. }
  228. public static function get_users($q = '', $limit = 10, $limit_start = 0, $order_by = '', $order_dir = '') {
  229. $ret = array();
  230. $sql_select = self::get_sql_users_select();
  231. $sql_where = self::_parse_query($q);
  232. $sql_limit = "limit " . (($limit > 0)? $limit : "10");
  233. if ($limit_start > 0) $sql_limit .= " offset {$limit_start}";
  234. $sql_order_by = "";
  235. $order_by_allowed = self::get_order_by_fields();
  236. if (in_array($order_by, $order_by_allowed)) {
  237. if (in_array($order_by, array('P_NAME','is_firma'))) {
  238. $order_by = "a.{$order_by}";
  239. } else if (in_array($order_by, array('BILLING_OWNER','STATUS'))) {
  240. $order_by = "bu.{$order_by}";
  241. } else if ($order_by == 'BLOKADA') {
  242. $order_by = "bu.`STATUS`";
  243. } else {
  244. $order_by = "w.{$order_by}";
  245. }
  246. $sql_order_by .= " order by {$order_by}";
  247. if (in_array($order_dir, array('DESC','ASC'))) {
  248. $sql_order_by .= " {$order_dir}";
  249. }
  250. }
  251. return array_map(function ($item) {
  252. return (object)$item;
  253. }, DB::getPDO()->fetchAllByKey("
  254. select {$sql_select}
  255. from `USERS2_WINDYKACJA_STATUS` as w
  256. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  257. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  258. where {$sql_where}
  259. {$sql_order_by}
  260. {$sql_limit}
  261. ", $key = 'id_users'));
  262. }
  263. public static function get_user_by_id($id) {
  264. $ret = null;
  265. if ($id <= 0) return $ret;
  266. $sql_where_and_arr = array();
  267. $usrAclGroups = User::getLdapGroupsNames();
  268. $usrAclGroups[] = '';
  269. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  270. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in ( {$sqlUsrAclGroups} )";
  271. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in ( {$sqlUsrAclGroups} )";
  272. $sqlWhereAdd = " and " . implode(" and ", $sql_where_and_arr);
  273. $sql_select = self::get_sql_users_select();
  274. return DB::getPDO()->fetchFirstAsObject("
  275. select {$sql_select}
  276. from `USERS2_WINDYKACJA_STATUS` as w
  277. left join `BILLING_USERS` as bu on ( bu.`ID` = w.`ID_BILLING_USERS` )
  278. left join `BILLING_USERS_ADD` as a on ( a.`id_users` = w.`ID_BILLING_USERS` )
  279. where a.`id_users` = :id_user
  280. {$sqlWhereAdd}
  281. ", [ ':id_user' => $id ]);
  282. // if(0){
  283. // $r->BA_WINIEN = "";
  284. // $r->BA_MA = "";
  285. // $r->BA_TIMESTAMP = "";
  286. // if (DB::getPDO('931')) {
  287. // $r_fin = DB::getPDO('931')->fetchFirst("
  288. // select BA.`WINIEN` as BA_WINIEN
  289. // , BA.`MA` as BA_MA
  290. // , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  291. // from `BILLING_ACCOUNTS` as BA
  292. // where BA.`ID_BILLING_USERS` = :id_user
  293. // ", [ ':id_user' => $r->ID ]);
  294. // if ($r_fin) {
  295. // $r->BA_WINIEN = $r_fin['BA_WINIEN'];
  296. // $r->BA_MA = $r_fin['BA_MA'];
  297. // $r->BA_TIMESTAMP = $r_fin['BA_TIMESTAMP'];
  298. // }
  299. // }
  300. // }
  301. }
  302. public static function get_company(&$user) {
  303. if (!isset($user->_company)) {
  304. $user->_company = DB::getPDO()->fetchFirstAsObject("
  305. select
  306. bo.`id`
  307. , bo.`name1`
  308. , bo.`name2`
  309. , bo.`kod`
  310. , bo.`miasto`
  311. , bo.`ulica`
  312. , bo.`numer_dom`
  313. , bo.`tel`
  314. , bo.`fax`
  315. , bo.`nip`
  316. , bo.`regon`
  317. , bo.`bank`
  318. , bo.`nr_rach`
  319. , bo.`NR_RACH_MASS_PAY`
  320. , bo.`BILLING_OWNER_EMAIL`
  321. from `BILLING_USERS` as bu
  322. left join `BILLING_OWNER` as bo on ( bo.`ID` = bu.`BILLING_OWNER` )
  323. where
  324. bu.`ID` = :id_user
  325. ", [ ':id_user' => $user->ID_BILLING_USERS ]);
  326. /*
  327. id 1 / 2
  328. name1 "BIALL-NET" Sp. z o.o. / "NET-DAY" s.c.
  329. name2 --- / Adrian i Ewa Wieczorkowscy
  330. kod 80-174 / 80-809
  331. miasto Gdańsk, Otomin / Gdańsk
  332. ulica Słoneczna / Cieszyńskiego
  333. numer_dom 43 / 38
  334. numer_pos NULL / NULL
  335. uwagi --- / ---
  336. tel 0-58 320-72-92 / 0-58 741 84 54
  337. fax 0-58 320-72-96 / 0-58 741 84 56
  338. nip 593-22-68-672 / 583-27-54-031
  339. regon 192120212 / 192578721
  340. bank Bank Zachodni WBK SA I O/Gdansk / ---
  341. nr_rach 46 1090 1098 0000 0001 0253 7156 / 84 1500 1171 1211 7002 9997 0000
  342. NR_RACH_MASS_PAY 109000049887 / 109000049669
  343. BILLING_OWNER_EMAIL biall-net@biall.net.pl / netday@netday.pl
  344. */
  345. }
  346. return $user->_company;
  347. }
  348. public static function get_billing_type($type_id) {
  349. $ret = null;
  350. $types = self::get_billing_types();
  351. if (array_key_exists($type_id, $types)) {
  352. $ret = $types[$type_id];
  353. }
  354. return $ret;
  355. }
  356. public static function get_billing_type_desc($type) {
  357. $ret = '';
  358. if ($type == 'FVAT') {
  359. return "Faktura Vat";
  360. }
  361. $types = self::get_billing_types();
  362. foreach ($types as $h) {
  363. if ($h['TYPE'] == $type) {
  364. return $h['DESC'];
  365. }
  366. }
  367. return $ret;
  368. }
  369. public static function get_billing_types($ids = array()) {
  370. static $_cache;
  371. if (empty($_cache)) $_cache = array();
  372. $cache_key = implode(".", $ids);
  373. if (!array_key_exists($cache_key, $_cache)) {
  374. $billing_types = array();
  375. if (DB::getPDO('931')) {
  376. $sql_where = " 1=1 ";
  377. if (!empty($ids)) {
  378. $sql_where = " `ID` in ('".implode("','", $ids)."') ";
  379. }
  380. $billing_types = DB::getPDO('931')->fetchAllByKey("
  381. select *
  382. from `BILLING_NUMBERS_TYPE`
  383. where
  384. {$sql_where}
  385. ", $key = 'ID');
  386. }
  387. $_cache[$cache_key] = $billing_types;
  388. }
  389. return $_cache[$cache_key];
  390. }
  391. public static function getAllServicesStreetsCSV($user) {
  392. $streets = DB::getPDO()->fetchAllByKey("
  393. select s.`S_ADDRESS_STREET`
  394. from `COMPANIES` c
  395. join `DEALS_TABLE` d on(d.`ID_BILLING_USERS`=c.`ID`)
  396. join `SERVICES` s on(s.`ID_BILLING_USERS`=c.`ID` and s.`ID_DEALS_TABLE`=d.`ID`)
  397. where c.`ID` = :id_user
  398. -- and c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  399. and s.`NAME_LIST_SERVICES` in ('TV','USERS2','VOIP')
  400. and s.`A_STATUS` not in ('DELETED')
  401. ", $key = 'S_ADDRESS_STREET', [ ':id_user' => $user->ID ]);
  402. return (!empty($streets))? implode(',', array_keys($streets)) : '';
  403. }
  404. public static function get_umowy_from_l2($user) {
  405. return DB::getPDO()->fetchAllByKey("
  406. select
  407. d.`ID`, d.`P_DEALPREFIX`, d.`P_DEALNUMBER`, d.`P_DEALNUMBER_OLD`, d.`P_DEALDATE`, d.`P_DEALDATE_TERM`, d.`DEALDESC`, d.`ANEX_NEEDED`, d.`ANEX_CONFIRM_DATE`
  408. from `DEALS_TABLE` as d
  409. where d.`ID_BILLING_USERS` = :id_user
  410. order by d.`ID` DESC
  411. ", $key = 'ID', [ ':id_user' => $user->ID ]);
  412. }
  413. public static function get_uslugi_from_l2(&$user) {
  414. // l2: www/modules/webone/form/edit_user_status.php
  415. // Aktualne: Usługa[Status] => list_services2($user->ID);
  416. if(0){// SERVICES table struct example:
  417. //[ID_BILLING_USERS] => 11363
  418. //[active] => 1
  419. //[TAB_UPDATE_STAT] => 1
  420. //[TAB_UPDATE_DATE] => 2012-02-03 17:43:44
  421. //[TAB_UPDATE_INFO] => OK-PREUPDATE-DELETED---UPDATED-OK-:195.117.2.79
  422. //[SERVICE_TYPE] => ABONAMENT
  423. //[ID_BILLING_NUMBERS_TYPE] => 1
  424. //[ABONAMENT_PERIOD] => 1
  425. //[ABONAMENT_VALUE] => 26.01
  426. //[VAT] => 23
  427. //[ID_CURRENCY] => 0
  428. //[ABONAMENT_PAYMENT] => UP
  429. //[ABONAMENT_START] => 1
  430. //[MINIMUM_BILLING_VALUE] => 0.00
  431. //[BILLED_TILL] => 2012-06-01 00:00:00
  432. //[HANGUP_FROM] =>
  433. //[HANGUP_TILL] =>
  434. //[HANGUP_STATUS] =>
  435. //[HANGUP_RATIO] => 1.00
  436. //[TIMESTAMP] => 20120504125053
  437. //[P_ID_SERVICES] => 0
  438. //[uwagi] =>
  439. //[ID_DEALS_TABLE] => 9373
  440. //[VAT_NAME] => 23
  441. //[id_list_sww] => 1
  442. //[SERV_ID_BILLING_PREFIXES] => 0
  443. //[ID_OFFERS] => 833
  444. //[A_RECORD_CREATE_DATE] =>
  445. //[A_RECORD_CREATE_AUTHOR] =>
  446. //[A_RECORD_UPDATE_DATE] =>
  447. //[A_RECORD_UPDATE_AUTHOR] =>
  448. }
  449. return DB::getPDO()->fetchAllByKey("
  450. select
  451. s.`ID`, s.`NAME_LIST_SERVICES`, s.`A_STATUS`
  452. , s.`ID_OFFERS`
  453. , s.`ID_DEALS_TABLE`
  454. , s.`P_ID_SERVICES`
  455. , s.`P_ID_SERVICES` as P_ID
  456. , s.`HANGUP_STATUS`
  457. , s.`HANGUP_FROM`
  458. , s.`HANGUP_TILL`
  459. , ls.`description` as description
  460. , lst.`name` as A_STATUS_DESC
  461. from `SERVICES` as s
  462. left join `LIST_SERVICES` as ls on(ls.`name`=s.`NAME_LIST_SERVICES`)
  463. left join `LIST_status` as lst on(lst.`ses_users2`=s.`HANGUP_STATUS` and lst.`ID`>2)
  464. where `ID_BILLING_USERS` = :id_user
  465. ", $key = 'ID', [ ':id_user' => $user->ID ]);
  466. }
  467. public static function get_umowy_from_l3(&$user) {
  468. return DB::getPDO()->fetchAll("
  469. select d.*
  470. from `USERS2_DEALS` as d
  471. where
  472. ( d.`ID_BILLING_USERS_OLD` = :id_user or d.`ID_BILLING_USERS_NEW` = :id_user )
  473. order by d.`ID` DESC
  474. ", [ ':id_user' => $user->ID ]);
  475. }
  476. public static function get_bill_dosc_by_date(&$user, $date_limit = null) {
  477. // fetch finanse data from remote DB
  478. $billing_docs = new Windykacja_BillingListDocs();
  479. $pdo_webone = DB::getPDO('931');
  480. if (!$pdo_webone) {
  481. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  482. return;
  483. }
  484. $sqlWhereAdd = " ";
  485. // blad w zaokragleniach
  486. // , sum((BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE)*(1 + BILLS_FVAT_POS.VAT/100)) as WARTOSC
  487. if ($date_limit) {
  488. $sqlWhereAdd .= " and BILLS_FVAT.PAYMENT_TERM <= '{$date_limit}' ";
  489. }
  490. $billsFvat = $pdo_webone->fetchAll("
  491. select
  492. BILLS_FVAT.*
  493. , count(BILLS_FVAT_POS.ID) as ILOSC_POZYCJI
  494. , BILLS_FVAT_POS.ID_BILLS_FVAT
  495. , sum(round((round(BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE, 2)) * (1 + BILLS_FVAT_POS.VAT / 100), 2)) as WARTOSC
  496. -- , count(BILLS_FVAT_POS.PRICE) as ILOSC_POZYCJI
  497. , `BILLING_NUMBERS`.`NUMBER` as `NUMBER`
  498. , `BILLING_NUMBERS`.`ID_BILLING_PREFIXES` as `ID_BILLING_PREFIXES`
  499. from `BILLS_FVAT`
  500. left join `BILLING_NUMBERS` on(`BILLING_NUMBERS`.`ID`=`BILLS_FVAT`.`ID_BILLING_NUMBERS`)
  501. left join `BILLS_FVAT_POS` on(`BILLS_FVAT_POS`.`ID_BILLS_FVAT`=`BILLS_FVAT`.`ID`)
  502. where BILLS_FVAT.OPEN='N' and BILLS_FVAT.ID_BILLING_USERS = :id_user
  503. {$sqlWhereAdd}
  504. group by BILLS_FVAT.ID
  505. order by BILLS_FVAT.ID_BILLING_NUMBERS ASC
  506. ", [ ':id_user' => $user->ID ]);
  507. foreach ($billsFvat as $h) {
  508. // if (0){// ? dla kazdej faktury ?
  509. // $sql = "select t1.ID_BILLING_NUMBERS AS NR_DOK
  510. // , t1.ID_BILLING_USERS as PLATNIK
  511. // , t1.WINIEN,t1.MA
  512. // , t1.ID_FIN_WINIEN as ID_F_W
  513. // , t1.ID_FIN_WINIEN_VAL as F_WINIEN_V
  514. // , t1.ID_FIN_MA as ID_F_M
  515. // , t1.ID_FIN_MA_VAL as F_MA_V
  516. // , max(t2.ID)
  517. // , sum(t2.ID_FIN_WINIEN_VAL) as ROZ_WINIEN
  518. // , max(t3.ID)
  519. // , sum(t3.ID_FIN_MA_VAL) as ROZ_MA
  520. // , t1.WINIEN - sum(t2.ID_FIN_WINIEN_VAL) - sum(t3.ID_FIN_MA_VAL) as POZ_WINIEN
  521. // , t1.MA - sum(t3.ID_FIN_MA_VAL) - sum(t2.ID_FIN_WINIEN_VAL) as POZ_MA
  522. // from `BILLING_ACCOUNTS_FILES` as t1
  523. // left join `BILLING_ACCOUNTS_FILES` as t2 on (t1.ID_BILLING_NUMBERS=t2.ID_FIN_WINIEN)
  524. // left join `BILLING_ACCOUNTS_FILES` as t3 on (t1.ID_BILLING_NUMBERS=t3.ID_FIN_MA)
  525. // where
  526. // t1.ID_FIN_WINIEN is NULL and t1.ID_FIN_MA is NULL and t1.MA = 0 and t1.WINIEN > 0
  527. // and t1.ID_BILLING_NUMBERS={$user->ID}
  528. // group by t1.ID_BILLING_NUMBERS
  529. // limit 0,1
  530. // ";
  531. // }
  532. //$h['type'] = 'FVAT';
  533. //$h['nr'] = $h['ID_BILLING_NUMBERS'];
  534. //$h['WINIEN'] = $h['WARTOSC'];
  535. //$h['MA'] = 0;
  536. $billing_docs->add_bill_doc($h['PAYMENT_TERM'], 'FVAT', $h);
  537. }
  538. $faktury_cols = array();
  539. //$faktury_cols['ID_BILLING_USERS'] = "id klienta";//
  540. $faktury_cols['ID_BILLING_NUMBERS'] = "numer";// numer faktury
  541. $faktury_cols['BILL_DATE'] = "";// data('Y-m-d')
  542. $faktury_cols['SELL_DATE'] = "";// data('Y-m-d')
  543. $faktury_cols['PAYMENT_TERM'] = "";// data('Y-m-d')
  544. //$billing_types = self::get_billing_types(array(3, 4, 5, 7, 8));
  545. $billing_types = self::get_billing_types();
  546. //echo'<pre>$billing_types:';print_r($billing_types);echo'</pre>';
  547. foreach ($billing_types as $bill_type) {
  548. if ($bill_type['CLASS'] == 'FINANCE') {
  549. $sql_where = ($date_limit)? " and {$bill_type['TABLE']}.BILL_DATE <= '{$date_limit}' " : "";
  550. $sql = "
  551. select {$bill_type['TABLE']}.ID
  552. , {$bill_type['TABLE']}.ID_BILLING_NUMBERS
  553. , {$bill_type['TABLE']}.BILL_DATE
  554. , round({$bill_type['TABLE']}.WINIEN, 2) as WINIEN
  555. , round({$bill_type['TABLE']}.MA, 2) as MA
  556. , {$bill_type['TABLE']}.ID_FK_DEKRET
  557. , {$bill_type['TABLE']}.OPEN
  558. , {$bill_type['TABLE']}.FK_ZAKSIEG
  559. , {$bill_type['TABLE']}.do_dokumentu
  560. , {$bill_type['BILLING_NUMBERS_TABLE']}.NUMBER
  561. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_PREFIXES
  562. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_NUMBERS_TYPE
  563. from {$bill_type['TABLE']}
  564. left join {$bill_type['BILLING_NUMBERS_TABLE']} on ({$bill_type['BILLING_NUMBERS_TABLE']}.ID={$bill_type['TABLE']}.ID_BILLING_NUMBERS)
  565. where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
  566. {$sql_where}
  567. ";
  568. $vBillDocs = $pdo_webone->fetchAll($sql);
  569. foreach ($vBillDocs as $h) {
  570. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  571. }
  572. }
  573. else if ($bill_type['CLASS'] == 'SELL_MA') {
  574. $sql_where = ($date_limit)? " and t.BILL_DATE <= '{$date_limit}' " : "";
  575. $sql = "select t.ID
  576. , count(t_pos.ID) as cnt
  577. , t_pos.ID_BILLS_FVAT
  578. , t.ID_CURRENCY
  579. , round(sum((t_pos.N_AMMOUNT * t_pos.N_PRICE) * ( 1 + t_pos.N_VAT / 100)),2) as WINIEN
  580. , round(sum(
  581. ((t_pos.AMMOUNT * t_pos.PRICE) * ( 1 + t_pos.VAT / 100))
  582. - (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.N_VAT / 100)
  583. + (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.VAT / 100)
  584. ),2) as MA
  585. , t.ID_BILLING_NUMBERS
  586. , t.OPEN
  587. , t.FK_ZAKSIEG
  588. , t.IF_KORV , t.BILL_DATE
  589. , t_num.`NUMBER`
  590. , t_num.`ID_BILLING_PREFIXES`
  591. , fv_num.`NUMBER` as FV_NUMBER
  592. from `{$bill_type['TABLE']}` t
  593. left join `{$bill_type['BILLING_NUMBERS_TABLE']}` t_num on (t_num.`ID`=t.`ID_BILLING_NUMBERS`)
  594. left join `{$bill_type['BILLING_NUMBERS_TABLE']}` fv_num on (fv_num.`ID`=t.`REMOTE_ID_BILLING_NUMBERS`)
  595. left join `{$bill_type['TABLE']}_POS` t_pos on (t_pos.`ID_BILLS_FVAT`=t.`ID`)
  596. where t.`ID_BILLING_USERS`='{$user->ID}'
  597. {$sql_where}
  598. group by t.`ID`
  599. order by t.`ID`
  600. ";
  601. $vBillDocs = $pdo_webone->fetchAll($sql);
  602. foreach ($vBillDocs as $h) {
  603. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  604. }
  605. }
  606. }
  607. return $billing_docs;
  608. }
  609. /**
  610. * @used in Windykacja_FunkcjeL1::billing_billwiev_przeterminowania
  611. */
  612. public static function get_billing_account_files($user_id) {
  613. $baf = array();
  614. $ECHO_PARAM = '';
  615. $ID_BILLING_USERS_PARAM = $user_id;
  616. if (!DB::getPDO('931')) {
  617. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  618. return $baf;
  619. }
  620. $WHERE = "";
  621. if ($ID_BILLING_USERS_PARAM) $WHERE .= " and BAF.ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' ";
  622. //UZGODNIENIE_SALD
  623. if (strstr($ECHO_PARAM, 'saldo_rok')) {
  624. global $base_path ;
  625. include_once($base_path."/modules/billing/bill/modules/billing_financefunc.inc");
  626. if ($ID_BILLING_USERS_PARAM) {
  627. if ($vdb->sql_numrows($vdb->sql_query("select ID from BILLING_ACCOUNTS_TILL where ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' and TILL=YEAR(NOW())-1 ;")) != 1) {
  628. UAKTUALNIJ_KONTA($ID_BILLING_USERS_PARAM);
  629. }
  630. }
  631. $WHERE .= " AND YEAR(BN.TIMESTAMP)<YEAR(NOW()) ";
  632. }
  633. $WHERE_FIRMA = "";
  634. if ($_GET['FIRMA']) $WHERE_FIRMA = "and BILLING_USERS.BILLING_OWNER='{$_GET['FIRMA']}'" ;
  635. //$billing_account_files = self::
  636. $sql = "
  637. create temporary table TEMP_BILLING_ACCOUNTS_FILES
  638. select BAF.ID
  639. , BAF.ID_BILLING_USERS
  640. , BAF.WINIEN
  641. , BAF.MA
  642. , BAF.ID_BILLING_NUMBERS_TYPE
  643. , BN.NUMBER
  644. , BN.ID_BILLING_PREFIXES
  645. , BAF_WINIEN.ID_FIN_WINIEN
  646. , BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W
  647. , BAF_BN_WINIEN.NUMBER as NUMBER_W
  648. , BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W
  649. , unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W
  650. , BAF_WINIEN.ID_FIN_WINIEN_VAL
  651. , NULL as ID_FIN_MA
  652. , NULL as ID_BILLING_NUMBERS_TYPE_M
  653. , NULL as NUMBER_M
  654. , NULL as ID_BILLING_PREFIXES_M
  655. , NULL as TIMESTAMP_M
  656. , NULL as ID_FIN_MA_VAL
  657. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM)) as TERMIN_PL
  658. , BUA.P_NAME
  659. , BUA.P_NAME_SECOND
  660. , BUA.P_ADDRESS_CITY
  661. , BUA.P_ADDRESS_STREET
  662. , BUA.P_ADDRESS_HOUSE
  663. , BUA.P_ADDRESS_HOME
  664. , BUA.user_mail_contact
  665. , BA.WINIEN as BA_WINIEN
  666. , BA.MA as BA_MA
  667. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  668. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  669. from BILLING_ACCOUNTS_FILES as BAF
  670. left join BILLING_USERS on BILLING_USERS.ID=BAF.ID_BILLING_USERS
  671. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  672. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  673. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  674. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  675. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  676. left join BILLING_ACCOUNTS_FILES as BAF_WINIEN on BAF_WINIEN.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS
  677. left join BILLING_NUMBERS as BAF_BN_WINIEN on BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS
  678. where BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL and BAF.ID_FIN_WINIEN is NULL
  679. {$WHERE}
  680. {$WHERE_FIRMA}
  681. ";
  682. $sql2 = "
  683. insert into TEMP_BILLING_ACCOUNTS_FILES
  684. select BAF.ID
  685. , BAF.ID_BILLING_USERS
  686. , BAF.WINIEN
  687. , BAF.MA
  688. , BAF.ID_BILLING_NUMBERS_TYPE
  689. , BN.NUMBER
  690. , BN.ID_BILLING_PREFIXES
  691. , NULL as ID_FIN_WINIEN
  692. , NULL as ID_BILLING_NUMBERS_TYPE_W
  693. , NULL as NUMBER_W
  694. , NULL as ID_BILLING_PREFIXES_W
  695. , NULL as TIMESTAMP_W
  696. , NULL as ID_FIN_WINIEN_VAL
  697. , BAF_MA.ID_FIN_MA
  698. , BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M
  699. , BAF_BN_MA.NUMBER as NUMBER_M
  700. , BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M
  701. , unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M
  702. , BAF_MA.ID_FIN_MA_VAL
  703. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM))
  704. , BUA.P_NAME
  705. , BUA.P_NAME_SECOND
  706. , BUA.P_ADDRESS_CITY
  707. , BUA.P_ADDRESS_STREET
  708. , BUA.P_ADDRESS_HOUSE
  709. , BUA.P_ADDRESS_HOME
  710. , BUA.user_mail_contact
  711. , BA.WINIEN as BA_WINIEN
  712. , BA.MA as BA_MA
  713. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  714. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  715. from BILLING_ACCOUNTS_FILES as BAF
  716. left join BILLING_USERS on (BILLING_USERS.ID=BAF.ID_BILLING_USERS)
  717. left join BILLING_USERS_ADD as BUA on (BUA.id_users=BAF.ID_BILLING_USERS)
  718. left join BILLING_NUMBERS as BN on (BN.ID=BAF.ID_BILLING_NUMBERS)
  719. left join BILLING_ACCOUNTS as BA on (BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS)
  720. left join BILLS_FVAT on (BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  721. left join BILLS_KORV on (BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  722. left join BILLING_ACCOUNTS_FILES as BAF_MA on (BAF_MA.ID_FIN_MA=BAF.ID_BILLING_NUMBERS)
  723. left join BILLING_NUMBERS as BAF_BN_MA on (BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS)
  724. where
  725. BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL
  726. {$WHERE}
  727. {$WHERE_FIRMA}
  728. ";
  729. if (strstr($ECHO_PARAM,'saldo_rok')) {
  730. $sql = "
  731. create temporary table TEMP_BILLING_ACCOUNTS_FILES
  732. select
  733. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  734. BAF_WINIEN.ID_FIN_WINIEN,
  735. BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W,
  736. BAF_BN_WINIEN.NUMBER as NUMBER_W,
  737. BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W,
  738. unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W,
  739. BAF_WINIEN.ID_FIN_WINIEN_VAL,
  740. NULL as ID_FIN_MA,
  741. NULL as ID_BILLING_NUMBERS_TYPE_M,
  742. NULL as NUMBER_M,
  743. NULL as ID_BILLING_PREFIXES_M,
  744. NULL as TIMESTAMP_M,
  745. NULL as ID_FIN_MA_VAL,
  746. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  747. BUA.P_NAME , BUA.P_NAME_SECOND , BUA.P_ADDRESS_CITY , BUA.P_ADDRESS_STREET ,BUA.P_ADDRESS_HOUSE , BUA.P_ADDRESS_HOME , BUA.user_mail_contact ,
  748. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  749. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  750. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  751. from BILLING_ACCOUNTS_FILES as BAF
  752. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  753. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  754. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  755. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  756. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  757. left join BILLING_ACCOUNTS_FILES as BAF_TRG on ( BAF.ID_FIN_WINIEN=BAF_TRG.ID_BILLING_NUMBERS or BAF.ID_FIN_MA=BAF_TRG.ID_BILLING_NUMBERS )
  758. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  759. left join BILLING_ACCOUNTS_FILES as BAF_WINIEN on ( BAF_WINIEN.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS or BAF_WINIEN.ID_FIN_MA=BAF.ID_BILLING_NUMBERS )
  760. left join BILLING_NUMBERS as BAF_BN_WINIEN on ( BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS )
  761. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  762. where
  763. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  764. and (YEAR(BAF_BN_WINIEN.TIMESTAMP)<YEAR(NOW()) or BAF_BN_WINIEN.TIMESTAMP is NULL )
  765. {$WHERE}
  766. limit 2000 ;
  767. ";
  768. $sql2 = "
  769. insert into TEMP_BILLING_ACCOUNTS_FILES select
  770. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  771. NULL as ID_FIN_WINIEN,
  772. NULL as ID_BILLING_NUMBERS_TYPE_W,
  773. NULL as NUMBER_W ,
  774. NULL as ID_BILLING_PREFIXES_W,
  775. NULL as TIMESTAMP_W ,
  776. NULL as ID_FIN_WINIEN_VAL ,
  777. BAF_MA.ID_FIN_MA,
  778. BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M,
  779. BAF_BN_MA.NUMBER as NUMBER_M,
  780. BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M,
  781. unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M,
  782. BAF_MA.ID_FIN_MA_VAL,
  783. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  784. BUA.P_NAME , BUA.P_NAME_SECOND , BUA.P_ADDRESS_CITY , BUA.P_ADDRESS_STREET ,BUA.P_ADDRESS_HOUSE , BUA.P_ADDRESS_HOME , BUA.user_mail_contact ,
  785. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  786. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  787. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  788. from BILLING_ACCOUNTS_FILES as BAF
  789. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  790. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  791. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  792. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  793. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  794. left join BILLING_ACCOUNTS_FILES as BAF_TRG on ( BAF.ID_FIN_WINIEN=BAF_TRG.ID_BILLING_NUMBERS or BAF.ID_FIN_MA=BAF_TRG.ID_BILLING_NUMBERS )
  795. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  796. left join BILLING_ACCOUNTS_FILES as BAF_MA on ( BAF_MA.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS or BAF_MA.ID_FIN_MA=BAF.ID_BILLING_NUMBERS )
  797. left join BILLING_NUMBERS as BAF_BN_MA on ( BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS )
  798. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  799. where
  800. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  801. and BAF.ID_BILLING_USERS='1047' AND YEAR(BN.TIMESTAMP)<YEAR(NOW())
  802. and (YEAR(BAF_BN_MA.TIMESTAMP)<YEAR(NOW()) or BAF_BN_MA.TIMESTAMP is NULL )
  803. {$WHERE}
  804. limit 1000,1000 ;
  805. ";
  806. }//EOF if saldo_rok param
  807. $sql_alter = "
  808. alter table TEMP_BILLING_ACCOUNTS_FILES
  809. modify ID_FIN_MA int(11)
  810. , modify ID_BILLING_NUMBERS_TYPE_M int(2)
  811. , modify NUMBER_M int(10)
  812. , modify ID_BILLING_PREFIXES_M int(2) default NULL NULL
  813. , modify TIMESTAMP_M int(10)
  814. , modify ID_FIN_MA_VAL decimal(10,2)
  815. , modify ID_BILLING_PREFIXES int(2) default NULL NULL
  816. , modify ID_BILLING_PREFIXES_W int(2) default NULL NULL
  817. ";
  818. DB::getPDO('931')->execSql(" drop TEMPORARY table TEMP_BILLING_ACCOUNTS_FILES ");
  819. DB::getPDO('931')->execSql($sql);
  820. DB::getPDO('931')->execSql($sql_alter);
  821. DB::getPDO('931')->execSql($sql2);
  822. $count = DB::getPDO('931')->fetchValue(" select count(1) as cnt from TEMP_BILLING_ACCOUNTS_FILES ");
  823. if ($count <= 0 || $ID_BILLING_USERS_PARAM <= 0) {
  824. DB::getPDO('931')->execSql("
  825. insert into TEMP_BILLING_ACCOUNTS_FILES (ID, ID_BILLING_USERS, BAT_TILL, BAT_WINIEN, BAT_MA)
  826. select '0', ID_BILLING_USERS, TILL, WINIEN, MA
  827. from BILLING_ACCOUNTS_TILL
  828. where ID_BILLING_USERS = :id_user
  829. and TILL = YEAR(NOW()) - 1
  830. ", [ ':id_user' => $ID_BILLING_USERS_PARAM ]);
  831. }
  832. $listBaf = DB::getPDO('931')->fetchAll(" select * from TEMP_BILLING_ACCOUNTS_FILES order by ID_BILLING_USERS, ID ");
  833. foreach ($listBaf as $h_baf) {
  834. $baf[] = array_values($h_baf); // like mysql_fetch_row which returm array [ 0 => val_1, 1 => val_2, ... ]
  835. }
  836. return $baf;
  837. }
  838. public static function update_doc_number(&$fvat_arr) {
  839. $fetch_ids = array();
  840. foreach ($fvat_arr as $k => $fvat) {
  841. $fetch_ids[] = $fvat['ID_BILLING_NUMBERS'];
  842. }
  843. if (!empty($fetch_ids)) {
  844. if (!DB::getPDO('931')) {
  845. return -1;
  846. }
  847. $bnum = DB::getPDO('931')->fetchAllByKey("
  848. select `ID`, `NUMBER`, `ID_BILLING_PREFIXES`
  849. from `BILLING_NUMBERS`
  850. where
  851. `ID` in(".implode(",", $fetch_ids).")
  852. ", $key = 'ID');
  853. foreach ($bnum as $k_id => $bn) {
  854. foreach ($fvat_arr as $k_fvat => $fvat) {
  855. if ($bn['ID'] == $fvat['ID_BILLING_NUMBERS']) {
  856. $fvat_arr[$k_fvat]['NUMBER'] = $bn['NUMBER'];
  857. $fvat_arr[$k_fvat]['ID_BILLING_PREFIXES'] = $bn['ID_BILLING_PREFIXES'];
  858. }
  859. }
  860. }
  861. }
  862. }
  863. /**
  864. * @param $user - Windykacja status user
  865. * @param $taks - wezwanie1, wezwanie2
  866. * @param $id_proj - ID Projektu
  867. * @returns int - ID created record
  868. */
  869. public static function create_koresp($user, $task, $id_proj, $params = array()) {
  870. $sql_data = array();
  871. $sql_zawartosc = '';
  872. if ($task == 'wezwanie1') {
  873. $sql_zawartosc = 'wezwanie do zaplaty';
  874. $sql_data['K_TYP_KORESP'] = 'OUT';
  875. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  876. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  877. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  878. } else if ($task == 'wezwanie2') {
  879. $sql_zawartosc = 'wezwanie do zaplaty - ostateczne';
  880. $sql_data['K_TYP_KORESP'] = 'OUT';
  881. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  882. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  883. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  884. } else if ($task == 'rozwiazanie umowy') {
  885. $sql_zawartosc = 'rozwiazanie umowy ID ' . $params['nr_umowy'] . ' - ' . $params['powod_desc'];
  886. $sql_data['K_TYP_KORESP'] = 'IN';
  887. }
  888. if (!$sql_zawartosc) {
  889. return false;
  890. }
  891. /**
  892. * przykładowe wezwania:
  893. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `K_ZAWARTOS` LIKE '%wezwanie%' ORDER BY `IN7_DZIENNIK_KORESP`.`ID` DESC;
  894. * przykład:
  895. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `ID`=25951;
  896. */
  897. $sql_data = array_merge($sql_data, [
  898. 'A_STATUS' => 'WAITING',
  899. 'ID_BILLING_USERS' => $user->ID,
  900. 'K_DATA_OTRZYM_KORESP' => '', // data
  901. 'K_DATA_OTRZYMANEJ_KORESP' => '', // data
  902. 'K_OD_KOGO' => "{$user->P_NAME} {$user->P_NAME_SECOND}",
  903. 'OD_KOGO_ADRES' => "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}",
  904. 'K_ZAWARTOS' => $sql_zawartosc,
  905. 'K_ZNAK_REFERENTA' => User::getFullName() . ' (' . User::getInicjaly() . ')',
  906. 'ID_PROJECT' => $id_proj,
  907. 'A_RECORD_CREATE_DATE' => "NOW()",
  908. 'A_RECORD_CREATE_AUTHOR' => User::getLogin(),
  909. ]);
  910. $ret_id = DB::getPDO()->insert('IN7_DZIENNIK_KORESP', $sql_data);
  911. DB::getPDO()->insert('IN7_DZIENNIK_KORESP_HIST', array_merge($sql_data, [
  912. 'ID_USERS2' => $ret_id,
  913. ]));
  914. return $ret_id;
  915. }
  916. /**
  917. * @param int $user_id - IS klienta
  918. * @param int $id_deals_old - ID umowy do wyłączenia
  919. * @param date 'Y-m-d' $termin_odlaczenia - Termin odłączenia
  920. * @returns int - ID created record
  921. */
  922. public static function create_deals_rozwiazanie($user_id, $id_deals_old, $termin_odlaczenia, $powod_desc = '') {
  923. $old_deal = DB::getPDO()->fetchFirst("
  924. select * from DEALS_TABLE where ID = :id
  925. ", [ ':id' => $id_deals_old ]);
  926. if (!$old_deal) {
  927. return false;
  928. }
  929. $sql_data = [
  930. 'DEALDESC' => "Rezygnacja z dniem {$termin_odlaczenia}",
  931. 'A_STATUS' => 'WAITING',
  932. 'ID_BILLING_USERS' => $user_id,
  933. 'P_DEALNUMBER_OLD' => $old_deal->ID,
  934. 'S_ADDRESS_STREET' => $old_deal->S_ADDRESS_STREET,
  935. 'P_DEALDATE' => $old_deal->P_DEALDATE,
  936. 'P_DEALDATE_TERM' => $old_deal->P_DEALDATE_TERM,
  937. 'L2_HANGUP_FROM' => $termin_odlaczenia,
  938. 'RODZAJ_DZIALANIA_HANDLOWEGO' => $powod_desc,
  939. // TODO: 'ID_OFFERS_OFF' => get_active_services_id($old_deal->ID),
  940. ];
  941. $ret_id = DB::getPDO()->insert('DEALS_TABLE', $sql_data);
  942. DB::getPDO()->insert('DEALS_TABLE_HIST', array_merge($sql_data, [
  943. 'ID_USERS2' => $ret_id,
  944. ]));
  945. return $ret_id;
  946. }
  947. }