StatsModel.php 41 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142
  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();
  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 = DB::_($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::_($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::_($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::_($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. $total = 0;
  155. $sql_where = self::_parse_query($q);
  156. $db = DB::getDB();
  157. $sql = "select count(1) as cnt
  158. from `USERS2_WINDYKACJA_STATUS` as w
  159. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  160. where {$sql_where}
  161. ";
  162. //echo'<pre>sqlTotal:';print_r($sql);echo'</pre>';
  163. $res = $db->query($sql);
  164. if ($r = $db->fetch($res)) {
  165. $total = $r->cnt;
  166. }
  167. return $total;
  168. }
  169. public static function get_sql_users_select() {
  170. $sql_select = "
  171. a.`id_users` as ID
  172. , a.`id_users`
  173. , a.`P_NAME`
  174. , a.`P_NAME_SECOND`
  175. , a.`P_ADDRESS_STREET`
  176. , a.`P_ADDRESS_HOME`
  177. , a.`P_ADDRESS_HOUSE`
  178. , a.`P_ADDRESS_CITY`
  179. , a.`P_ADDRESS_POST_CODE`
  180. , a.`P_ADDRESS_REGION`
  181. , a.`P_PESEL`
  182. , a.`P_PHONE`
  183. , a.`P_OTHER_DOC`
  184. , a.`user_mail_contact`
  185. , a.`is_firma`
  186. , a.`P_ADRESS_KORESP_1282`
  187. , w.`ID` as WINDYKACJA_ID
  188. , w.`ID_BILLING_USERS`
  189. , w.`A_STATUS`
  190. , w.`A_STATUS_UPDATE_DATE`
  191. , w.`USER_PAY_TERM_ADD`
  192. , w.`L_APPOITMENT_DATE`
  193. , w.`L_APPOITMENT_USER`
  194. , w.`L_APPOITMENT_INFO`
  195. , w.`PAY_DATE`
  196. , w.`PAY_DATE_FIRST_FVAT`
  197. , w.`PAY_TERM`
  198. , w.`PAY_SALDO`
  199. , w.`PAY_FVAT`
  200. , w.`wezwanie1_DATE`
  201. , w.`wezwanie2_DATE`
  202. , w.`wpis_w_krd_DATE`
  203. , w.`ID_KORESP`
  204. , w.`LAST_ID_KORESP_WEZWANIE1`
  205. , w.`LAST_ID_KORESP_WEZWANIE2`
  206. , w.`LAST_PAY_DATE`
  207. , w.`LAST_PAY_VALUE`
  208. , w.`LAST_FVAT_PAY_TERM`
  209. , w.`LAST_FVAT_VALUE`
  210. , w.`PAY_SALDO_30_DNI`
  211. , w.`PAY_SALDO_ISSUED`
  212. , w.`BAD_ADDRESS`
  213. -- , (select bu.`BILLING_OWNER` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as BILLING_OWNER
  214. -- , (select bu.`STATUS` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as STATUS
  215. , bu.`STATUS`
  216. , bu.`BILLING_OWNER`
  217. , w.`NR_SPRAWY_KRD`
  218. , w.`NR_SPRAWY_SAD`
  219. , w.`NR_SPRAWY_KOMORNIK`
  220. , w.`ACCOUNT_NUMBER`
  221. , w.`SERVICES_STREETS`
  222. , w.`IS_MOVED_TO_VECTRA` as IS_MOVED_TO_VECTRA
  223. -- , ('REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA'=(select `RODZAJ_DZIALANIA_HANDLOWEGO`
  224. -- from `DEALS_TABLE`
  225. -- where `A_STATUS`='NORMAL'
  226. -- and `ID_BILLING_USERS`=w.`ID_BILLING_USERS`
  227. -- order by `ID` DESC
  228. -- limit 1)
  229. -- ) as IS_MOVED_TO_VECTRA
  230. , w.`HAS_ACTIVE_NET`
  231. , w.`HAS_ACTIVE_TV`
  232. ";
  233. return $sql_select;
  234. }
  235. public static function get_users($q = '', $limit = 10, $limit_start = 0, $order_by = '', $order_dir = '') {
  236. $ret = array();
  237. $sql_select = self::get_sql_users_select();
  238. $sql_where = self::_parse_query($q);
  239. $sql_limit = "limit " . (($limit > 0)? $limit : "10");
  240. if ($limit_start > 0) $sql_limit .= " offset {$limit_start}";
  241. $sql_order_by = "";
  242. $order_by_allowed = self::get_order_by_fields();
  243. if (in_array($order_by, $order_by_allowed)) {
  244. if (in_array($order_by, array('P_NAME','is_firma'))) {
  245. $order_by = "a.{$order_by}";
  246. } else if (in_array($order_by, array('BILLING_OWNER','STATUS'))) {
  247. $order_by = "bu.{$order_by}";
  248. } else if ($order_by == 'BLOKADA') {
  249. $order_by = "bu.`STATUS`";
  250. } else {
  251. $order_by = "w.{$order_by}";
  252. }
  253. $sql_order_by .= " order by {$order_by}";
  254. if (in_array($order_dir, array('DESC','ASC'))) {
  255. $sql_order_by .= " {$order_dir}";
  256. }
  257. }
  258. $db = DB::getDB();
  259. $sql = "select {$sql_select}
  260. from `USERS2_WINDYKACJA_STATUS` as w
  261. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  262. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  263. where {$sql_where}
  264. {$sql_order_by}
  265. {$sql_limit}
  266. ";
  267. DBG::_('DBG_SQL', '>1', "sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  268. //echo'<pre>';print_r($sql);echo'</pre>';
  269. $res = $db->query($sql);
  270. while ($r = $db->fetch($res)) {
  271. $ret[$r->id_users] = $r;
  272. }
  273. return $ret;
  274. }
  275. public static function get_user_by_id($id) {
  276. $ret = null;
  277. if ($id <= 0) return $ret;
  278. $sql_where_and_arr = array();
  279. $usrAclGroups = User::getLdapGroupsNames();
  280. $usrAclGroups[] = '';
  281. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  282. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  283. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  284. $sqlWhereAdd = " and " . implode(" and ", $sql_where_and_arr);
  285. $sql_select = self::get_sql_users_select();
  286. $sql_where = "a.`id_users`='{$id}'";
  287. $db = DB::getDB();
  288. $sql = "select {$sql_select}
  289. from `USERS2_WINDYKACJA_STATUS` as w
  290. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  291. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  292. where {$sql_where}
  293. {$sqlWhereAdd}
  294. ";
  295. $res = $db->query($sql);
  296. if ($r = $db->fetch($res)) {
  297. if(0){
  298. $r->BA_WINIEN = "";
  299. $r->BA_MA = "";
  300. $r->BA_TIMESTAMP = "";
  301. $sql = "select BA.`WINIEN` as BA_WINIEN
  302. , BA.`MA` as BA_MA
  303. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  304. from `BILLING_ACCOUNTS` as BA
  305. where BA.`ID_BILLING_USERS`='" . $r->ID . "'
  306. ";
  307. $db_webone = DB::getDB('931');
  308. if ($db_webone) {
  309. $res_fin = $db_webone->query($sql);
  310. if ($r_fin = $db_webone->fetch($res_fin)) {
  311. $r->BA_WINIEN = $r_fin->BA_WINIEN;
  312. $r->BA_MA = $r_fin->BA_MA;
  313. $r->BA_TIMESTAMP = $r_fin->BA_TIMESTAMP;
  314. }
  315. }
  316. }
  317. $ret = $r;
  318. }
  319. return $ret;
  320. }
  321. public static function get_company(&$user) {
  322. if (!isset($user->_company)) {
  323. $db = DB::getDB();
  324. /*
  325. id 1 / 2
  326. name1 "BIALL-NET" Sp. z o.o. / "NET-DAY" s.c.
  327. name2 --- / Adrian i Ewa Wieczorkowscy
  328. kod 80-174 / 80-809
  329. miasto Gdańsk, Otomin / Gdańsk
  330. ulica Słoneczna / Cieszyńskiego
  331. numer_dom 43 / 38
  332. numer_pos NULL / NULL
  333. uwagi --- / ---
  334. tel 0-58 320-72-92 / 0-58 741 84 54
  335. fax 0-58 320-72-96 / 0-58 741 84 56
  336. nip 593-22-68-672 / 583-27-54-031
  337. regon 192120212 / 192578721
  338. bank Bank Zachodni WBK SA I O/Gdansk / ---
  339. nr_rach 46 1090 1098 0000 0001 0253 7156 / 84 1500 1171 1211 7002 9997 0000
  340. NR_RACH_MASS_PAY 109000049887 / 109000049669
  341. BILLING_OWNER_EMAIL biall-net@biall.net.pl / netday@netday.pl
  342. */
  343. $sql = "select
  344. bo.`id`
  345. , bo.`name1`
  346. , bo.`name2`
  347. , bo.`kod`
  348. , bo.`miasto`
  349. , bo.`ulica`
  350. , bo.`numer_dom`
  351. , bo.`tel`
  352. , bo.`fax`
  353. , bo.`nip`
  354. , bo.`regon`
  355. , bo.`bank`
  356. , bo.`nr_rach`
  357. , bo.`NR_RACH_MASS_PAY`
  358. , bo.`BILLING_OWNER_EMAIL`
  359. from `BILLING_USERS` as bu
  360. left join `BILLING_OWNER` as bo on (bo.`ID`=bu.`BILLING_OWNER`)
  361. where
  362. bu.`ID`='{$user->ID_BILLING_USERS}'
  363. ";
  364. //$db_webone = DB::getDB('931');
  365. //if ($db_webone) {
  366. //$res = $db_webone->query($sql);
  367. //if ($r = $db_webone->fetch($res)) {
  368. // $user->_company = $r;
  369. //}
  370. //}
  371. $res = $db->query($sql);
  372. if ($r = $db->fetch($res)) {
  373. $user->_company = $r;
  374. }
  375. }
  376. return $user->_company;
  377. }
  378. public static function get_billing_type($type_id) {
  379. $ret = null;
  380. $types = self::get_billing_types();
  381. if (array_key_exists($type_id, $types)) {
  382. $ret = $types[$type_id];
  383. }
  384. return $ret;
  385. }
  386. public static function get_billing_type_desc($type) {
  387. $ret = '';
  388. if ($type == 'FVAT') {
  389. return "Faktura Vat";
  390. }
  391. $types = self::get_billing_types();
  392. foreach ($types as $h) {
  393. if ($h['TYPE'] == $type) {
  394. return $h['DESC'];
  395. }
  396. }
  397. return $ret;
  398. }
  399. public static function get_billing_types($ids = array()) {
  400. static $_cache;
  401. if (empty($_cache)) $_cache = array();
  402. $cache_key = implode(".", $ids);
  403. if (!array_key_exists($cache_key, $_cache)) {
  404. $billing_types = array();
  405. $db_webone = DB::getDB('931');
  406. if ($db_webone) {
  407. $sql_where = "1=1";
  408. if (!empty($ids)) {
  409. $sql_where = "`ID` in ('".implode("','", $ids)."')";
  410. }
  411. $sql = "select *
  412. from `BILLING_NUMBERS_TYPE`
  413. where
  414. {$sql_where}
  415. ";
  416. $res = $db_webone->query($sql);
  417. while ($h = $db_webone->fetch_assoc($res)) {
  418. $billing_types[$h['ID']] = $h;
  419. }
  420. }
  421. $_cache[$cache_key] = $billing_types;
  422. }
  423. return $_cache[$cache_key];
  424. }
  425. public static function getAllServicesStreetsCSV($user) {
  426. $streets = array();
  427. $db = DB::getDB();
  428. $sql = "
  429. select s.`S_ADDRESS_STREET`
  430. from `COMPANIES` c
  431. join `DEALS_TABLE` d on(d.`ID_BILLING_USERS`=c.`ID`)
  432. join `SERVICES` s on(s.`ID_BILLING_USERS`=c.`ID` and s.`ID_DEALS_TABLE`=d.`ID`)
  433. where c.`ID`='{$user->ID}'
  434. -- and c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  435. and s.`NAME_LIST_SERVICES` in ('TV','USERS2','VOIP')
  436. and s.`A_STATUS` not in ('DELETED')
  437. ";
  438. $res = $db->query($sql);
  439. while ($r = $db->fetch($res)) {
  440. $streets[$r->S_ADDRESS_STREET] = true;
  441. }
  442. $streets = (!empty($streets))? implode(',', array_keys($streets)) : '';
  443. return $streets;
  444. }
  445. public static function get_umowy_from_l2($user) {
  446. $ret = array();
  447. $db_webone = DB::getDB();
  448. if (!$db_webone) {
  449. return -1;
  450. }
  451. $sql = "select
  452. 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`
  453. from `DEALS_TABLE` as d
  454. where d.`ID_BILLING_USERS`='{$user->ID}'
  455. order by d.`ID` DESC
  456. ";
  457. $res = $db_webone->query($sql);
  458. while ($h = $db_webone->fetch_assoc($res)) {
  459. $ret[$h['ID']] = $h;
  460. }
  461. return $ret;
  462. }
  463. public static function get_uslugi_from_l2(&$user) {
  464. // l2: www/modules/webone/form/edit_user_status.php
  465. // Aktualne: Usługa[Status] => list_services2($user->ID);
  466. $uID = $user->ID;
  467. $ret = array();
  468. $db_webone = DB::getDB();
  469. if (!$db_webone) {
  470. return -1;
  471. }
  472. if(0){// SERVICES table struct example:
  473. //[ID_BILLING_USERS] => 11363
  474. //[active] => 1
  475. //[TAB_UPDATE_STAT] => 1
  476. //[TAB_UPDATE_DATE] => 2012-02-03 17:43:44
  477. //[TAB_UPDATE_INFO] => OK-PREUPDATE-DELETED---UPDATED-OK-:195.117.2.79
  478. //[SERVICE_TYPE] => ABONAMENT
  479. //[ID_BILLING_NUMBERS_TYPE] => 1
  480. //[ABONAMENT_PERIOD] => 1
  481. //[ABONAMENT_VALUE] => 26.01
  482. //[VAT] => 23
  483. //[ID_CURRENCY] => 0
  484. //[ABONAMENT_PAYMENT] => UP
  485. //[ABONAMENT_START] => 1
  486. //[MINIMUM_BILLING_VALUE] => 0.00
  487. //[BILLED_TILL] => 2012-06-01 00:00:00
  488. //[HANGUP_FROM] =>
  489. //[HANGUP_TILL] =>
  490. //[HANGUP_STATUS] =>
  491. //[HANGUP_RATIO] => 1.00
  492. //[TIMESTAMP] => 20120504125053
  493. //[P_ID_SERVICES] => 0
  494. //[uwagi] =>
  495. //[ID_DEALS_TABLE] => 9373
  496. //[VAT_NAME] => 23
  497. //[id_list_sww] => 1
  498. //[SERV_ID_BILLING_PREFIXES] => 0
  499. //[ID_OFFERS] => 833
  500. //[A_RECORD_CREATE_DATE] =>
  501. //[A_RECORD_CREATE_AUTHOR] =>
  502. //[A_RECORD_UPDATE_DATE] =>
  503. //[A_RECORD_UPDATE_AUTHOR] =>
  504. }
  505. $sql = "select
  506. s.`ID`, s.`NAME_LIST_SERVICES`, s.`A_STATUS`
  507. , s.`ID_OFFERS`
  508. , s.`ID_DEALS_TABLE`
  509. , s.`P_ID_SERVICES`
  510. , s.`P_ID_SERVICES` as P_ID
  511. , s.`HANGUP_STATUS`
  512. , s.`HANGUP_FROM`
  513. , s.`HANGUP_TILL`
  514. , ls.`description` as description
  515. , lst.`name` as A_STATUS_DESC
  516. from `SERVICES` as s
  517. left join `LIST_SERVICES` as ls on(ls.`name`=s.`NAME_LIST_SERVICES`)
  518. left join `LIST_status` as lst on(lst.`ses_users2`=s.`HANGUP_STATUS` and lst.`ID`>2)
  519. where `ID_BILLING_USERS`='{$user->ID}'
  520. ";
  521. $res = $db_webone->query($sql);
  522. while ($h = $db_webone->fetch_assoc($res)) {
  523. $ret[$h['ID']] = $h;
  524. }
  525. return $ret;
  526. }
  527. public static function get_umowy_from_l3(&$user) {
  528. $ret = array();
  529. $db = DB::getDB();
  530. $sql = "select d.*
  531. from `USERS2_DEALS` as d
  532. where
  533. (d.`ID_BILLING_USERS_OLD`='{$user->ID}' or d.`ID_BILLING_USERS_NEW`='{$user->ID}')
  534. order by d.`ID` DESC
  535. ";
  536. $res = $db->query($sql);
  537. while ($h = $db->fetch_assoc($res)) {
  538. $ret[] = $h;
  539. }
  540. return $ret;
  541. }
  542. public static function get_bill_dosc_by_date(&$user, $date_limit = null) {
  543. // fetch finanse data from remote DB
  544. $billing_docs = new Windykacja_BillingListDocs();
  545. $db_webone = DB::getDB('931');
  546. if (!$db_webone) {
  547. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  548. return;
  549. }
  550. $sql_where = " BILLS_FVAT.OPEN='N' and BILLS_FVAT.ID_BILLING_USERS ='{$user->ID}' ";
  551. // blad w zaokragleniach
  552. // , sum((BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE)*(1 + BILLS_FVAT_POS.VAT/100)) as WARTOSC
  553. if ($date_limit) {
  554. $sql_where .= " and BILLS_FVAT.PAYMENT_TERM <= '{$date_limit}' ";
  555. }
  556. $sql = "select
  557. BILLS_FVAT.*
  558. , count(BILLS_FVAT_POS.ID) as ILOSC_POZYCJI
  559. , BILLS_FVAT_POS.ID_BILLS_FVAT
  560. , sum(round((round(BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE, 2)) * (1 + BILLS_FVAT_POS.VAT / 100), 2)) as WARTOSC
  561. -- , count(BILLS_FVAT_POS.PRICE) as ILOSC_POZYCJI
  562. , `BILLING_NUMBERS`.`NUMBER` as `NUMBER`
  563. , `BILLING_NUMBERS`.`ID_BILLING_PREFIXES` as `ID_BILLING_PREFIXES`
  564. from `BILLS_FVAT`
  565. left join `BILLING_NUMBERS` on(`BILLING_NUMBERS`.`ID`=`BILLS_FVAT`.`ID_BILLING_NUMBERS`)
  566. left join `BILLS_FVAT_POS` on(`BILLS_FVAT_POS`.`ID_BILLS_FVAT`=`BILLS_FVAT`.`ID`)
  567. where {$sql_where}
  568. group by BILLS_FVAT.ID
  569. order by BILLS_FVAT.ID_BILLING_NUMBERS ASC
  570. ";
  571. //echo'<pre>sql1: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
  572. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  573. $res = $db_webone->query($sql);
  574. while ($h = $db_webone->fetch_assoc($res)) {
  575. if (0){// ? dla kazdej faktury ?
  576. $sql = "select t1.ID_BILLING_NUMBERS AS NR_DOK
  577. , t1.ID_BILLING_USERS as PLATNIK
  578. , t1.WINIEN,t1.MA
  579. , t1.ID_FIN_WINIEN as ID_F_W
  580. , t1.ID_FIN_WINIEN_VAL as F_WINIEN_V
  581. , t1.ID_FIN_MA as ID_F_M
  582. , t1.ID_FIN_MA_VAL as F_MA_V
  583. , max(t2.ID)
  584. , sum(t2.ID_FIN_WINIEN_VAL) as ROZ_WINIEN
  585. , max(t3.ID)
  586. , sum(t3.ID_FIN_MA_VAL) as ROZ_MA
  587. , t1.WINIEN - sum(t2.ID_FIN_WINIEN_VAL) - sum(t3.ID_FIN_MA_VAL) as POZ_WINIEN
  588. , t1.MA - sum(t3.ID_FIN_MA_VAL) - sum(t2.ID_FIN_WINIEN_VAL) as POZ_MA
  589. from `BILLING_ACCOUNTS_FILES` as t1
  590. left join `BILLING_ACCOUNTS_FILES` as t2 on (t1.ID_BILLING_NUMBERS=t2.ID_FIN_WINIEN)
  591. left join `BILLING_ACCOUNTS_FILES` as t3 on (t1.ID_BILLING_NUMBERS=t3.ID_FIN_MA)
  592. where
  593. t1.ID_FIN_WINIEN is NULL and t1.ID_FIN_MA is NULL and t1.MA = 0 and t1.WINIEN > 0
  594. and t1.ID_BILLING_NUMBERS={$user->ID}
  595. group by t1.ID_BILLING_NUMBERS
  596. limit 0,1
  597. ";
  598. }
  599. //$h['type'] = 'FVAT';
  600. //$h['nr'] = $h['ID_BILLING_NUMBERS'];
  601. //$h['WINIEN'] = $h['WARTOSC'];
  602. //$h['MA'] = 0;
  603. $billing_docs->add_bill_doc($h['PAYMENT_TERM'], 'FVAT', $h);
  604. }
  605. $faktury_cols = array();
  606. //$faktury_cols['ID_BILLING_USERS'] = "id klienta";//
  607. $faktury_cols['ID_BILLING_NUMBERS'] = "numer";// numer faktury
  608. $faktury_cols['BILL_DATE'] = "";// data('Y-m-d')
  609. $faktury_cols['SELL_DATE'] = "";// data('Y-m-d')
  610. $faktury_cols['PAYMENT_TERM'] = "";// data('Y-m-d')
  611. //$billing_types = self::get_billing_types(array(3, 4, 5, 7, 8));
  612. $billing_types = self::get_billing_types();
  613. //echo'<pre>$billing_types:';print_r($billing_types);echo'</pre>';
  614. foreach ($billing_types as $bill_type) {
  615. if ($bill_type['CLASS'] == 'FINANCE') {
  616. $sql_where = ($date_limit)? " and {$bill_type['TABLE']}.BILL_DATE <= '{$date_limit}' " : "";
  617. $sql = "select {$bill_type['TABLE']}.ID
  618. , {$bill_type['TABLE']}.ID_BILLING_NUMBERS
  619. , {$bill_type['TABLE']}.BILL_DATE
  620. , round({$bill_type['TABLE']}.WINIEN, 2) as WINIEN
  621. , round({$bill_type['TABLE']}.MA, 2) as MA
  622. , {$bill_type['TABLE']}.ID_FK_DEKRET
  623. , {$bill_type['TABLE']}.OPEN
  624. , {$bill_type['TABLE']}.FK_ZAKSIEG
  625. , {$bill_type['TABLE']}.do_dokumentu
  626. , {$bill_type['BILLING_NUMBERS_TABLE']}.NUMBER
  627. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_PREFIXES
  628. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_NUMBERS_TYPE
  629. from {$bill_type['TABLE']}
  630. left join {$bill_type['BILLING_NUMBERS_TABLE']} on ({$bill_type['BILLING_NUMBERS_TABLE']}.ID={$bill_type['TABLE']}.ID_BILLING_NUMBERS)
  631. where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
  632. {$sql_where}
  633. ";
  634. //echo'<pre>sql2: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
  635. $res = $db_webone->query($sql);
  636. while ($h = $db_webone->fetch_assoc($res)) {
  637. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  638. }
  639. }
  640. else if ($bill_type['CLASS'] == 'SELL_MA') {
  641. $sql_where = ($date_limit)? " and t.BILL_DATE <= '{$date_limit}' " : "";
  642. $sql = "select t.ID
  643. , count(t_pos.ID) as cnt
  644. , t_pos.ID_BILLS_FVAT
  645. , t.ID_CURRENCY
  646. , round(sum((t_pos.N_AMMOUNT * t_pos.N_PRICE) * ( 1 + t_pos.N_VAT / 100)),2) as WINIEN
  647. , round(sum(
  648. ((t_pos.AMMOUNT * t_pos.PRICE) * ( 1 + t_pos.VAT / 100))
  649. - (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.N_VAT / 100)
  650. + (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.VAT / 100)
  651. ),2) as MA
  652. , t.ID_BILLING_NUMBERS
  653. , t.OPEN
  654. , t.FK_ZAKSIEG
  655. , t.IF_KORV , t.BILL_DATE
  656. , t_num.`NUMBER`
  657. , t_num.`ID_BILLING_PREFIXES`
  658. , fv_num.`NUMBER` as FV_NUMBER
  659. from `{$bill_type['TABLE']}` t
  660. left join `{$bill_type['BILLING_NUMBERS_TABLE']}` t_num on (t_num.`ID`=t.`ID_BILLING_NUMBERS`)
  661. left join `{$bill_type['BILLING_NUMBERS_TABLE']}` fv_num on (fv_num.`ID`=t.`REMOTE_ID_BILLING_NUMBERS`)
  662. left join `{$bill_type['TABLE']}_POS` t_pos on (t_pos.`ID_BILLS_FVAT`=t.`ID`)
  663. where t.`ID_BILLING_USERS`='{$user->ID}'
  664. {$sql_where}
  665. group by t.`ID`
  666. order by t.`ID`
  667. ";
  668. //echo'<pre>sql3: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
  669. $res = $db_webone->query($sql);
  670. while ($h = $db_webone->fetch_assoc($res)) {
  671. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  672. }
  673. }
  674. }
  675. return $billing_docs;
  676. }
  677. /**
  678. * @used in Windykacja_FunkcjeL1::billing_billwiev_przeterminowania
  679. */
  680. public static function get_billing_account_files($user_id) {
  681. $baf = array();
  682. $ECHO_PARAM = '';
  683. $ID_BILLING_USERS_PARAM = $user_id;
  684. $db_webone = DB::getDB('931');
  685. if (!$db_webone) {
  686. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  687. return $baf;
  688. }
  689. $WHERE = "";
  690. if ($ID_BILLING_USERS_PARAM) $WHERE .= " and BAF.ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' ";
  691. //UZGODNIENIE_SALD
  692. if (strstr($ECHO_PARAM, 'saldo_rok')) {
  693. global $base_path ;
  694. include_once($base_path."/modules/billing/bill/modules/billing_financefunc.inc");
  695. if ($ID_BILLING_USERS_PARAM) {
  696. 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) {
  697. UAKTUALNIJ_KONTA($ID_BILLING_USERS_PARAM);
  698. }
  699. }
  700. $WHERE .= " AND YEAR(BN.TIMESTAMP)<YEAR(NOW()) ";
  701. }
  702. $WHERE_FIRMA = "";
  703. if ($_GET['FIRMA']) $WHERE_FIRMA = "and BILLING_USERS.BILLING_OWNER='{$_GET['FIRMA']}'" ;
  704. //$billing_account_files = self::
  705. $sql = "create temporary table TEMP_BILLING_ACCOUNTS_FILES
  706. select BAF.ID
  707. , BAF.ID_BILLING_USERS
  708. , BAF.WINIEN
  709. , BAF.MA
  710. , BAF.ID_BILLING_NUMBERS_TYPE
  711. , BN.NUMBER
  712. , BN.ID_BILLING_PREFIXES
  713. , BAF_WINIEN.ID_FIN_WINIEN
  714. , BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W
  715. , BAF_BN_WINIEN.NUMBER as NUMBER_W
  716. , BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W
  717. , unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W
  718. , BAF_WINIEN.ID_FIN_WINIEN_VAL
  719. , NULL as ID_FIN_MA
  720. , NULL as ID_BILLING_NUMBERS_TYPE_M
  721. , NULL as NUMBER_M
  722. , NULL as ID_BILLING_PREFIXES_M
  723. , NULL as TIMESTAMP_M
  724. , NULL as ID_FIN_MA_VAL
  725. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM)) as TERMIN_PL
  726. , BUA.P_NAME
  727. , BUA.P_NAME_SECOND
  728. , BUA.P_ADDRESS_CITY
  729. , BUA.P_ADDRESS_STREET
  730. , BUA.P_ADDRESS_HOUSE
  731. , BUA.P_ADDRESS_HOME
  732. , BUA.user_mail_contact
  733. , BA.WINIEN as BA_WINIEN
  734. , BA.MA as BA_MA
  735. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  736. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  737. from BILLING_ACCOUNTS_FILES as BAF
  738. left join BILLING_USERS on BILLING_USERS.ID=BAF.ID_BILLING_USERS
  739. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  740. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  741. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  742. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  743. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  744. left join BILLING_ACCOUNTS_FILES as BAF_WINIEN on BAF_WINIEN.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS
  745. left join BILLING_NUMBERS as BAF_BN_WINIEN on BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS
  746. where BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL and BAF.ID_FIN_WINIEN is NULL
  747. {$WHERE}
  748. {$WHERE_FIRMA}
  749. ";
  750. $sql2 = "insert into TEMP_BILLING_ACCOUNTS_FILES
  751. select BAF.ID
  752. , BAF.ID_BILLING_USERS
  753. , BAF.WINIEN
  754. , BAF.MA
  755. , BAF.ID_BILLING_NUMBERS_TYPE
  756. , BN.NUMBER
  757. , BN.ID_BILLING_PREFIXES
  758. , NULL as ID_FIN_WINIEN
  759. , NULL as ID_BILLING_NUMBERS_TYPE_W
  760. , NULL as NUMBER_W
  761. , NULL as ID_BILLING_PREFIXES_W
  762. , NULL as TIMESTAMP_W
  763. , NULL as ID_FIN_WINIEN_VAL
  764. , BAF_MA.ID_FIN_MA
  765. , BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M
  766. , BAF_BN_MA.NUMBER as NUMBER_M
  767. , BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M
  768. , unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M
  769. , BAF_MA.ID_FIN_MA_VAL
  770. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM))
  771. , BUA.P_NAME
  772. , BUA.P_NAME_SECOND
  773. , BUA.P_ADDRESS_CITY
  774. , BUA.P_ADDRESS_STREET
  775. , BUA.P_ADDRESS_HOUSE
  776. , BUA.P_ADDRESS_HOME
  777. , BUA.user_mail_contact
  778. , BA.WINIEN as BA_WINIEN
  779. , BA.MA as BA_MA
  780. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  781. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  782. from BILLING_ACCOUNTS_FILES as BAF
  783. left join BILLING_USERS on (BILLING_USERS.ID=BAF.ID_BILLING_USERS)
  784. left join BILLING_USERS_ADD as BUA on (BUA.id_users=BAF.ID_BILLING_USERS)
  785. left join BILLING_NUMBERS as BN on (BN.ID=BAF.ID_BILLING_NUMBERS)
  786. left join BILLING_ACCOUNTS as BA on (BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS)
  787. left join BILLS_FVAT on (BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  788. left join BILLS_KORV on (BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  789. left join BILLING_ACCOUNTS_FILES as BAF_MA on (BAF_MA.ID_FIN_MA=BAF.ID_BILLING_NUMBERS)
  790. left join BILLING_NUMBERS as BAF_BN_MA on (BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS)
  791. where
  792. BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL
  793. {$WHERE}
  794. {$WHERE_FIRMA}
  795. ";
  796. if (strstr($ECHO_PARAM,'saldo_rok')) {
  797. $sql = "create temporary table TEMP_BILLING_ACCOUNTS_FILES
  798. select
  799. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  800. BAF_WINIEN.ID_FIN_WINIEN,
  801. BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W,
  802. BAF_BN_WINIEN.NUMBER as NUMBER_W,
  803. BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W,
  804. unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W,
  805. BAF_WINIEN.ID_FIN_WINIEN_VAL,
  806. NULL as ID_FIN_MA,
  807. NULL as ID_BILLING_NUMBERS_TYPE_M,
  808. NULL as NUMBER_M,
  809. NULL as ID_BILLING_PREFIXES_M,
  810. NULL as TIMESTAMP_M,
  811. NULL as ID_FIN_MA_VAL,
  812. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  813. 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 ,
  814. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  815. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  816. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  817. from BILLING_ACCOUNTS_FILES as BAF
  818. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  819. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  820. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  821. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  822. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  823. 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 )
  824. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  825. 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 )
  826. left join BILLING_NUMBERS as BAF_BN_WINIEN on ( BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS )
  827. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  828. where
  829. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  830. and (YEAR(BAF_BN_WINIEN.TIMESTAMP)<YEAR(NOW()) or BAF_BN_WINIEN.TIMESTAMP is NULL )
  831. {$WHERE}
  832. limit 2000 ;
  833. ";
  834. $sql2 = " insert into TEMP_BILLING_ACCOUNTS_FILES select
  835. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  836. NULL as ID_FIN_WINIEN,
  837. NULL as ID_BILLING_NUMBERS_TYPE_W,
  838. NULL as NUMBER_W ,
  839. NULL as ID_BILLING_PREFIXES_W,
  840. NULL as TIMESTAMP_W ,
  841. NULL as ID_FIN_WINIEN_VAL ,
  842. BAF_MA.ID_FIN_MA,
  843. BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M,
  844. BAF_BN_MA.NUMBER as NUMBER_M,
  845. BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M,
  846. unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M,
  847. BAF_MA.ID_FIN_MA_VAL,
  848. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  849. 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 ,
  850. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  851. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  852. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  853. from BILLING_ACCOUNTS_FILES as BAF
  854. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  855. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  856. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  857. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  858. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  859. 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 )
  860. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  861. 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 )
  862. left join BILLING_NUMBERS as BAF_BN_MA on ( BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS )
  863. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  864. where
  865. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  866. and BAF.ID_BILLING_USERS='1047' AND YEAR(BN.TIMESTAMP)<YEAR(NOW())
  867. and (YEAR(BAF_BN_MA.TIMESTAMP)<YEAR(NOW()) or BAF_BN_MA.TIMESTAMP is NULL )
  868. {$WHERE}
  869. limit 1000,1000 ;
  870. ";
  871. }//EOF if saldo_rok param
  872. $sql_alter = "alter table TEMP_BILLING_ACCOUNTS_FILES
  873. modify ID_FIN_MA int(11)
  874. , modify ID_BILLING_NUMBERS_TYPE_M int(2)
  875. , modify NUMBER_M int(10)
  876. , modify ID_BILLING_PREFIXES_M int(2) default NULL NULL
  877. , modify TIMESTAMP_M int(10)
  878. , modify ID_FIN_MA_VAL decimal(10,2)
  879. , modify ID_BILLING_PREFIXES int(2) default NULL NULL
  880. , modify ID_BILLING_PREFIXES_W int(2) default NULL NULL
  881. ";
  882. $db_webone->query("drop TEMPORARY table TEMP_BILLING_ACCOUNTS_FILES");
  883. $result_create = $db_webone->query($sql);
  884. $result_alter = $db_webone->query($sql_alter);
  885. $result_create2 = $db_webone->query($sql2);
  886. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">db_webone: ';print_r($db_webone);echo'</pre>';
  887. $sql = "select * from TEMP_BILLING_ACCOUNTS_FILES order by ID_BILLING_USERS,ID ";
  888. $sql_count = "select count(1) as cnt from TEMP_BILLING_ACCOUNTS_FILES ";
  889. $count = 0;
  890. $res = $db_webone->query($sql_count);
  891. if ($r_count = $db_webone->fetch($res)) {
  892. $count = $r_count->cnt;
  893. }
  894. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">count: ';print_r($count);echo'</pre>';
  895. if ($count > 0 && $ID_BILLING_USERS_PARAM > 0) {
  896. $result = $db_webone->query($sql);
  897. } else {
  898. $sql_none = "insert into TEMP_BILLING_ACCOUNTS_FILES (ID,ID_BILLING_USERS,BAT_TILL,BAT_WINIEN,BAT_MA)
  899. select '0',ID_BILLING_USERS,TILL ,WINIEN ,MA from BILLING_ACCOUNTS_TILL where ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' and TILL=YEAR(NOW())-1
  900. ";
  901. $db_webone->query($sql_none);
  902. $result = $db_webone->query($sql);
  903. }
  904. while ($h_baf = $db_webone->fetch_row($result)) {
  905. $baf[] = $h_baf;
  906. }
  907. return $baf;
  908. }
  909. public static function update_doc_number(&$fvat_arr) {
  910. $fetch_ids = array();
  911. foreach ($fvat_arr as $k => $fvat) {
  912. $fetch_ids[] = $fvat['ID_BILLING_NUMBERS'];
  913. }
  914. if (!empty($fetch_ids)) {
  915. $db_webone = DB::getDB('931');
  916. if (!$db_webone) {
  917. return -1;
  918. }
  919. $sql = "select `ID`, `NUMBER`, `ID_BILLING_PREFIXES`
  920. from `BILLING_NUMBERS`
  921. where
  922. `ID` in(".implode(",", $fetch_ids).")
  923. ";
  924. $res = $db_webone->query($sql);
  925. $bnum = array();
  926. while ($h = $db_webone->fetch_assoc($res)) {
  927. $bnum[$h['ID']] = $h;
  928. }
  929. foreach ($bnum as $k_id => $bn) {
  930. foreach ($fvat_arr as $k_fvat => $fvat) {
  931. if ($bn['ID'] == $fvat['ID_BILLING_NUMBERS']) {
  932. $fvat_arr[$k_fvat]['NUMBER'] = $bn['NUMBER'];
  933. $fvat_arr[$k_fvat]['ID_BILLING_PREFIXES'] = $bn['ID_BILLING_PREFIXES'];
  934. }
  935. }
  936. }
  937. }
  938. }
  939. /**
  940. * @param $user - Windykacja status user
  941. * @param $taks - wezwanie1, wezwanie2
  942. * @param $id_proj - ID Projektu
  943. * @returns int - ID created record
  944. */
  945. public static function create_koresp($user, $task, $id_proj, $params = array()) {
  946. $sql_data = array();
  947. $sql_zawartosc = '';
  948. if ($task == 'wezwanie1') {
  949. $sql_zawartosc = 'wezwanie do zaplaty';
  950. $sql_data['K_TYP_KORESP'] = 'OUT';
  951. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  952. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  953. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  954. } else if ($task == 'wezwanie2') {
  955. $sql_zawartosc = 'wezwanie do zaplaty - ostateczne';
  956. $sql_data['K_TYP_KORESP'] = 'OUT';
  957. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  958. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  959. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  960. } else if ($task == 'rozwiazanie umowy') {
  961. $sql_zawartosc = 'rozwiazanie umowy ID ' . $params['nr_umowy'] . ' - ' . $params['powod_desc'];
  962. $sql_data['K_TYP_KORESP'] = 'IN';
  963. }
  964. if (!$sql_zawartosc) {
  965. return false;
  966. }
  967. /**
  968. * przykładowe wezwania:
  969. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `K_ZAWARTOS` LIKE '%wezwanie%' ORDER BY `IN7_DZIENNIK_KORESP`.`ID` DESC;
  970. * przykład:
  971. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `ID`=25951;
  972. */
  973. $db = DB::getDB();
  974. $sql_obj = new stdClass();
  975. $sql_obj->A_STATUS = 'WAITING';
  976. foreach ($sql_data as $k_field => $v_value) {
  977. $sql_obj->$k_field = $v_value;
  978. }
  979. $sql_obj->ID_BILLING_USERS = $user->ID;
  980. $sql_obj->K_DATA_OTRZYM_KORESP = '';// data ?
  981. $sql_obj->K_DATA_OTRZYMANEJ_KORESP = '';// data ?
  982. $sql_obj->K_OD_KOGO = "{$user->P_NAME} {$user->P_NAME_SECOND}";
  983. $sql_obj->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}";
  984. $sql_obj->K_ZAWARTOS = $sql_zawartosc;
  985. $sql_obj->K_ZNAK_REFERENTA = User::getFullName() . ' (' . User::getInicjaly() . ')';
  986. $sql_obj->ID_PROJECT = $id_proj;
  987. $ret_id = $db->ADD_NEW_OBJ('IN7_DZIENNIK_KORESP', $sql_obj);
  988. return $ret_id;
  989. }
  990. /**
  991. * @param int $user_id - IS klienta
  992. * @param int $id_deals_old - ID umowy do wyłączenia
  993. * @param date 'Y-m-d' $termin_odlaczenia - Termin odłączenia
  994. * @returns int - ID created record
  995. */
  996. public static function create_deals_rozwiazanie($user_id, $id_deals_old, $termin_odlaczenia, $powod_desc = '') {
  997. $db = DB::getDB();
  998. $old_deal = $db->get_by_id('DEALS_TABLE', $id_deals_old);
  999. if (!$old_deal) {
  1000. return false;
  1001. }
  1002. $sql_obj = new stdClass();
  1003. $sql_obj->DEALDESC = "Rezygnacja z dniem {$termin_odlaczenia}";
  1004. $sql_obj->A_STATUS = 'WAITING';
  1005. $sql_obj->ID_BILLING_USERS = $user_id;
  1006. $sql_obj->P_DEALNUMBER_OLD = $old_deal->ID;
  1007. $sql_obj->S_ADDRESS_STREET = $old_deal->S_ADDRESS_STREET;
  1008. $sql_obj->P_DEALDATE = $old_deal->P_DEALDATE;
  1009. $sql_obj->P_DEALDATE_TERM = $old_deal->P_DEALDATE_TERM;
  1010. $sql_obj->L2_HANGUP_FROM = $termin_odlaczenia;
  1011. $sql_obj->RODZAJ_DZIALANIA_HANDLOWEGO = $powod_desc;
  1012. // TODO: $sql_obj->ID_OFFERS_OFF = get_active_services_id($old_deal->ID);
  1013. /*
  1014. if(
  1015. SV.HANGUP_STATUS=SV.A_STATUS
  1016. , coalesce(SV.A_STATUS)
  1017. , if(
  1018. ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  1019. and ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  1020. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  1021. )
  1022. , coalesce(SV.HANGUP_STATUS)
  1023. , if(
  1024. ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM)
  1025. and (SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  1026. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  1027. )
  1028. , coalesce(SV.A_STATUS)
  1029. , if(
  1030. ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  1031. and unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_TILL)
  1032. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  1033. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  1034. )
  1035. , coalesce(SV.HANGUP_STATUS)
  1036. , if(
  1037. ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW())< unix_timestamp(SV.HANGUP_TILL)
  1038. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  1039. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null ))
  1040. , coalesce(SV.A_STATUS)
  1041. , if(
  1042. ( ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  1043. and ( SV.HANGUP_FROM='0000-00-00' or SV.HANGUP_FROM is null ))
  1044. , coalesce(SV.A_STATUS)
  1045. , if( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  1046. and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL)
  1047. and (
  1048. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  1049. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  1050. )
  1051. , coalesce(SV.A_STATUS)
  1052. , if(
  1053. unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  1054. and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL)
  1055. and SV.HANGUP_FROM<SV.HANGUP_TILL
  1056. and (
  1057. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  1058. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , 'ERROR1',
  1059. 'ERROR2'
  1060. )
  1061. )
  1062. )
  1063. )
  1064. )
  1065. )
  1066. )
  1067. )
  1068. */
  1069. /*
  1070. $id_offers_off = array();
  1071. $sql = "select
  1072. s.``
  1073. , s.`ID_OFFERS`
  1074. from `SERVICES` as s
  1075. where
  1076. s.`ID_DEALS_TABLE`='{$old_deal->ID}'
  1077. and s.`ID_BILLING_USERS`='{$user_id}'
  1078. ";
  1079. $res = $db->query($sql);
  1080. while ($r = $db->fetch($res)) {
  1081. $id_offers_off[] = $r;
  1082. }
  1083. */
  1084. $ret_id = $db->ADD_NEW_OBJ('DEALS_TABLE', $sql_obj);
  1085. return $ret_id;
  1086. }
  1087. }