CompanyHelper.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. <?php
  2. class BN_CompanyHelper {
  3. /**
  4. * @return object | null
  5. */
  6. function getById($id) {
  7. $sql = "
  8. select bua.`id_users`
  9. , bua.`id_users` as ID_BILLING_USERS
  10. , bua.`is_firma`
  11. , bua.`P_NAME`
  12. , bua.`P_NAME_SECOND`
  13. , bua.`P_NIP`
  14. , bua.`P_PESEL`
  15. , bua.`P_PHONE`
  16. , bua.`P_ADDRESS_REGION`
  17. , bua.`P_ADDRESS_CITY`
  18. , bua.`P_ADDRESS_POST_CODE`
  19. , bua.`P_ADDRESS_STREET`
  20. , bua.`P_ADDRESS_HOME`
  21. , bua.`P_ADDRESS_HOUSE`
  22. , bua.`user_mail_contact`
  23. , bu.`BILLING_OWNER`
  24. from `BILLING_USERS_ADD` as bua
  25. left join `BILLING_USERS` as bu on ( bu.`ID` = bua.`id_users` )
  26. where bua.`id_users` = '{$id}'
  27. ";
  28. return DB::getPDO()->fetchFirstAsObject("
  29. select c.`ID`
  30. , c.`ID` as id_users
  31. , c.`ID` as ID_BILLING_USERS
  32. , c.`is_firma`
  33. , c.`P_NAME`
  34. , c.`P_NAME_SECOND`
  35. , c.`P_NIP`
  36. , c.`P_PESEL`
  37. , c.`P_PHONE`
  38. , c.`P_ADDRESS_REGION`
  39. , c.`P_ADDRESS_CITY`
  40. , c.`P_ADDRESS_POST_CODE`
  41. , c.`P_ADDRESS_STREET`
  42. , c.`P_ADDRESS_HOME`
  43. , c.`P_ADDRESS_HOUSE`
  44. , c.`user_mail_contact`
  45. , c.`BILLING_OWNER`
  46. , c.`CRM_LISTA_ZASOBOW_ID`
  47. from `COMPANIES` as c
  48. where c.`ID` = :id
  49. ", [
  50. ':id' => $id,
  51. ]);
  52. }
  53. /**
  54. * @return object | null
  55. */
  56. function getByNip($nip) {
  57. $sqlNip = trim(str_replace('-', '', $nip));
  58. return DB::getPDO()->fetchFirstAsObject("
  59. select c.`ID`
  60. , c.`ID` as id_users
  61. , c.`ID` as ID_BILLING_USERS
  62. , c.`is_firma`
  63. , c.`P_NAME`
  64. , c.`P_NAME_SECOND`
  65. , c.`P_NIP`
  66. , c.`P_PESEL`
  67. , c.`P_PHONE`
  68. , c.`P_ADDRESS_REGION`
  69. , c.`P_ADDRESS_CITY`
  70. , c.`P_ADDRESS_POST_CODE`
  71. , c.`P_ADDRESS_STREET`
  72. , c.`P_ADDRESS_HOME`
  73. , c.`P_ADDRESS_HOUSE`
  74. , c.`user_mail_contact`
  75. , c.`BILLING_OWNER`
  76. , c.`CRM_LISTA_ZASOBOW_ID`
  77. from `COMPANIES` as c
  78. where replace(c.`P_NIP`, '-', '') = :nip
  79. ", [
  80. ':nip' => $sqlNip,
  81. ]);
  82. }
  83. /**
  84. * @param object $company @see getById
  85. * @return object | null
  86. */
  87. function getBillingOwner($company) {
  88. if (!$company) return null;
  89. if ($company->BILLING_OWNER <= 0) return null;
  90. /*
  91. CREATE TABLE IF NOT EXISTS `BILLING_OWNER` (
  92. `id` int(10) NOT NULL AUTO_INCREMENT,
  93. `name1` varchar(255) NOT NULL DEFAULT '',
  94. `name2` varchar(255) NOT NULL DEFAULT '',
  95. `kod` varchar(6) NOT NULL DEFAULT '',
  96. `miasto` varchar(150) NOT NULL DEFAULT '',
  97. `ulica` varchar(255) NOT NULL DEFAULT '',
  98. `numer_dom` int(5) DEFAULT NULL,
  99. `numer_pos` tinyint(5) DEFAULT NULL,
  100. `uwagi` text NOT NULL,
  101. `tel` varchar(100) NOT NULL DEFAULT '',
  102. `fax` varchar(100) NOT NULL DEFAULT '',
  103. `nip` varchar(13) NOT NULL DEFAULT '',
  104. `regon` varchar(10) NOT NULL DEFAULT '',
  105. `bank` varchar(255) NOT NULL DEFAULT '',
  106. `nr_rach` varchar(255) NOT NULL DEFAULT '',
  107. `NR_RACH_MASS_PAY` varchar(24) DEFAULT NULL,
  108. `BILLING_OWNER_EMAIL` varchar(100) NOT NULL DEFAULT '',
  109. `CRM_LISTA_ZASOBOW_ID` int(11) NOT NULL,
  110. UNIQUE KEY `id` (`id`)
  111. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=3 ;
  112. INSERT INTO `BILLING_OWNER` (`id`, `name1`, `name2`, `kod`, `miasto`, `ulica`, `numer_dom`, `numer_pos`, `uwagi`, `tel`, `fax`, `nip`, `regon`, `bank`, `nr_rach`, `NR_RACH_MASS_PAY`, `BILLING_OWNER_EMAIL`, `CRM_LISTA_ZASOBOW_ID`) VALUES
  113. (1, '"BIALL-NET" Sp. z o.o.', '', '80-174', 'Gdańsk, Otomin', 'Słoneczna', 43, NULL, '', '0-58 320-72-92', '0-58 320-72-96', '593-22-68-672', '192120212', 'Bank Zachodni WBK SA I O/Gdansk', '46 1090 1098 0000 0001 0253 7156', '109000049887', 'biall-net@biall.net.pl', 12889),
  114. (2, '"NET-DAY" s.c.', 'Adrian i Ewa Wieczorkowscy', '80-809', 'Gdańsk', 'Kopeckiego', 9, 24, '', '0-58 741 84 54', '0-58 741 84 56', '583-27-54-031', '192578721', '', '84 1500 1171 1211 7002 9997 0000', '109000049669', 'netday@netday.pl', 12919);
  115. */
  116. return DB::getPDO()->fetchFirstAsObject("
  117. select o.*
  118. from `BILLING_OWNER` as o
  119. where o.`ID` = :id_owner
  120. ", [
  121. ':id_owner' => $company->BILLING_OWNER,
  122. ]);
  123. }
  124. /**
  125. * Powiązanie zasobu z companies za pomocą $company->CRM_LISTA_ZASOBOW_ID
  126. * @return object | null | false
  127. */
  128. function getZasobPodmiot($company, $billingOwner) {
  129. if (!$company || !$billingOwner) return false;
  130. if (!$billingOwner->CRM_LISTA_ZASOBOW_ID) return false;
  131. if (!$company->CRM_LISTA_ZASOBOW_ID) return null;
  132. return DB::getPDO()->fetchFirstAsObject("
  133. select z.*
  134. from `CRM_LISTA_ZASOBOW` as z
  135. where z.`ID` = :id_zasob
  136. ", [
  137. ':id_zasob' => $company->CRM_LISTA_ZASOBOW_ID,
  138. ]);
  139. //if ($zasob->PARENT_ID == $billingOwner->CRM_LISTA_ZASOBOW_ID) {
  140. // return $zasob;
  141. //} else {
  142. // return false;
  143. //}
  144. }
  145. function createZasobPodmiot($company, $billingOwner) {
  146. if (!$company || !$billingOwner) return false;
  147. if (!$billingOwner->CRM_LISTA_ZASOBOW_ID) return false;
  148. if ($company->CRM_LISTA_ZASOBOW_ID > 0) return null;
  149. $podmiot = new stdClass();
  150. $podmiot->PARENT_ID = $billingOwner->CRM_LISTA_ZASOBOW_ID;
  151. $podmiot->TYPE = 'PODMIOT';
  152. $podmiot->DESC = "{$company->P_NAME} {$company->P_NAME_SECOND}";
  153. $zasobId = DB::getDB()->ADD_NEW_OBJ('CRM_LISTA_ZASOBOW', $podmiot);
  154. if ($zasobId > 0) {
  155. $sqlCom = new stdClass();
  156. $sqlCom->ID = $company->ID;
  157. $sqlCom->CRM_LISTA_ZASOBOW_ID = $zasobId;
  158. $affeted = DB::getDB()->UPDATE_OBJ('COMPANIES', $sqlCom);
  159. }
  160. return $zasobId;
  161. }
  162. /**
  163. * Powiązane konta do autoryzacji w systemie
  164. */
  165. function getAccountsList($company) {
  166. if (!$company) return false;
  167. if (!$company->ID) return false;
  168. if (!$company->CRM_LISTA_ZASOBOW_ID) return false;
  169. return DB::getPDO()->fetchAllByKey("
  170. select u.*
  171. , count(up.ID) as cntProfile
  172. from `ADMIN_USERS` as u
  173. left join `CRM_AUTH_PROFILE` as up on ( up.`REMOTE_ID` = u.`ID` and up.`REMOTE_TABLE` = 'ADMIN_USERS' )
  174. where (
  175. u.`ADM_ACCOUNT` like 'c{$company->ID}%'
  176. or u.`ID_BILLING_USERS` = '{$company->ID}'
  177. )
  178. group by u.`ID`
  179. ", 'ID');
  180. }
  181. /**
  182. * @see POKAZ_OFERTY_AKTUALNE_FUNC: PokazOfertyHelper::get_deals_active_by_user($ID_BILLING_USERS, $only_active = true)
  183. */
  184. function getDealsFull($ID_BILLING_USERS, $only_active = true) {
  185. $deals = $this->getDealsAll([ 'ID_BILLING_USERS' => $ID_BILLING_USERS, 'return_by' => 'ID', 'P_DEALNUMBER' => true ]);
  186. $this->addDealsActiveInfo($deals, $ID_BILLING_USERS, $only_active);
  187. return $deals;
  188. }
  189. /**
  190. * @see POKAZ_OFERTY_AKTUALNE_FUNC: PokazOfertyHelper::deals_active_add_info(&$active_deals_by_id, $ID_BILLING_USERS, $only_active = false)
  191. */
  192. function addDealsActiveInfo(&$active_deals_by_id, $ID_BILLING_USERS, $only_active = false) {
  193. if (empty($active_deals_by_id)) {
  194. return;
  195. }
  196. $uslugi = $this->getServicesByDeals($ID_BILLING_USERS, array_keys($active_deals_by_id), $only_active);
  197. foreach ($active_deals_by_id as $k_deal_id => $v_deal) {
  198. if (array_key_exists($k_deal_id, $uslugi)) {
  199. $active_deals_by_id[$k_deal_id]->services = $uslugi[$k_deal_id];
  200. $active_deals_by_id[$k_deal_id]->services_by_id = array();
  201. foreach ($uslugi[$k_deal_id] as $k_p_service => $v_srv_arr) {
  202. foreach ($v_srv_arr as $k_srv_id => $v_srv) {
  203. $active_deals_by_id[$k_deal_id]->services_by_id[$k_srv_id] = $v_srv;
  204. }
  205. }
  206. }
  207. }
  208. // add $v_deal->ses_x_a
  209. $out_id_count = array();
  210. $uslugi_params = $this->getServicesParams($uslugi);
  211. foreach ($active_deals_by_id as $k_deal_id => $v_deal) {
  212. $active_deals_by_id[$k_deal_id]->ses_x_a = array();
  213. foreach ($v_deal->services as $k_p_service => $v_srv_arr) {
  214. foreach ($v_srv_arr as $k_srv_id => $v_srv) {
  215. $v_deal->services[$k_p_service][$k_srv_id]->offer_p_service = $k_p_service;
  216. // add SERVICE params if exists
  217. if (array_key_exists($k_srv_id, $uslugi_params)) {
  218. $active_deals_by_id[$k_deal_id]->ses_x_a[$k_srv_id] = $uslugi_params[$k_srv_id];
  219. if ($v_srv->NAME_LIST_SERVICES == 'TV' && $uslugi_params[$k_srv_id]->P_SERVICE_CLASS != '') {
  220. $v_deal->services[$k_p_service][$k_srv_id]->offer_p_service = $uslugi_params[$k_srv_id]->P_SERVICE_CLASS;
  221. }
  222. }
  223. // add out_id - @used in JavaScript overview
  224. if (!in_array($v_srv->offer_p_service, $out_id_count)) {
  225. $out_id_count[$v_srv->offer_p_service] = 1;
  226. } else {
  227. $out_id_count[$v_srv->offer_p_service] += 1;
  228. }
  229. $v_deal->services[$k_p_service][$k_srv_id]->out_id = $v_srv->offer_p_service . '_' . $out_id_count[$v_srv->offer_p_service];
  230. }
  231. }
  232. }
  233. }
  234. /**
  235. * @see POKAZ_OFERTY_AKTUALNE_FUNC: PokazOfertyHelper::get_services_by_user_deals($user_id, $deals_ids = array(), $only_active = false)
  236. */
  237. function getServicesByDeals($user_id, $deals_ids = array(), $only_active = false) {
  238. if (empty($deals_ids)) return [];
  239. $sqlDeals = implode(",", $deals_ids);
  240. $listServices = DB::getPDO()->fetchAll("
  241. select
  242. s.`ID`, s.`NAME_LIST_SERVICES`, s.`A_STATUS`
  243. , s.`ID_OFFERS`
  244. , s.`ID_DEALS_TABLE`
  245. , s.`P_ID_SERVICES`
  246. , s.`ABONAMENT_VALUE` as ABONAMENT_VALUE
  247. , s.`P_ID_SERVICES` as P_ID
  248. , s.`HANGUP_STATUS`
  249. , s.`HANGUP_FROM`
  250. , s.`HANGUP_TILL`
  251. , ls.`description` as description
  252. -- , lst.`name` as A_STATUS_DESC
  253. , '' as A_STATUS_DESC
  254. from `SERVICES` as s
  255. left join `LIST_SERVICES` as ls on ( ls.`name` = s.`NAME_LIST_SERVICES` )
  256. -- left join `LIST_status` as lst on ( lst.`ses_users2` = s.`A_STATUS` )
  257. -- left join `LIST_status` as lst on ( lst.`ses_users2` = s.`HANGUP_STATUS` and lst.`ID` > 2 )
  258. where `ID_BILLING_USERS` = :id
  259. and `ID_DEALS_TABLE` in ( {$sqlDeals} )
  260. -- and s.`A_STATUS` = 'NORMAL'
  261. ", [
  262. ':id' => $user_id,
  263. ]);
  264. $deals = [];
  265. foreach ($listServices as $item) {
  266. // TODO: only active services - @from $A_STATUS_L2_SQL
  267. // $item['HANGUP_STATUS'] = ('NORMAL', 'OFF_SOFT', 'OFF_HARD')
  268. $item['HANGUP_TILL'] = (!$item['HANGUP_TILL'] || $item['HANGUP_TILL'] == '0000-00-00')? null : $item['HANGUP_TILL'];
  269. $item['HANGUP_FROM'] = (!$item['HANGUP_FROM'] || $item['HANGUP_FROM'] == '0000-00-00')? null : $item['HANGUP_FROM'];
  270. $item['_status'] = null;
  271. $today = date("Y-m-d");
  272. if ($item['HANGUP_STATUS'] == $item['A_STATUS']) {
  273. $item['_status'] = $item['A_STATUS'];
  274. } else if (!$item['HANGUP_TILL'] && $item['HANGUP_FROM'] > '' && $today > $item['HANGUP_FROM']) {
  275. $item['_status'] = $item['HANGUP_STATUS'];
  276. } else if (!$item['HANGUP_TILL'] && $item['HANGUP_FROM'] > '' && $today < $item['HANGUP_FROM']) {
  277. $item['_status'] = $item['A_STATUS'];
  278. } else if ($item['HANGUP_TILL'] > '' && $item['HANGUP_FROM'] > '' && $today > $item['HANGUP_FROM'] && $today < $item['HANGUP_TILL']) {
  279. $item['_status'] = $item['HANGUP_STATUS'];
  280. } else if ($item['HANGUP_TILL'] > '' && $item['HANGUP_FROM'] > '' && $today < $item['HANGUP_FROM'] && $today < $item['HANGUP_TILL']) {
  281. $item['_status'] = $item['A_STATUS'];
  282. } else if (!$item['HANGUP_TILL'] && !$item['HANGUP_FROM']) {
  283. $item['_status'] = $item['A_STATUS'];
  284. } else if ($item['HANGUP_TILL'] > '' && $item['HANGUP_FROM'] > '' && $today > $item['HANGUP_FROM'] && $today > $item['HANGUP_TILL']) {
  285. $item['_status'] = $item['A_STATUS'];
  286. } else if ($item['HANGUP_TILL'] > '' && $item['HANGUP_FROM'] > '' && $today > $item['HANGUP_FROM'] && $today > $item['HANGUP_TILL'] && $item['HANGUP_FROM'] < $item['HANGUP_TILL']) {
  287. $item['_status'] = 'ERROR1';
  288. } else {
  289. $item['_status'] = 'ERROR2';
  290. }
  291. $item['A_STATUS_DESC'] = $this->getStatusName($item['_status']);
  292. if ($only_active && !in_array($item['_status'], [ 'NORMAL' ])) {
  293. continue;
  294. }
  295. // TODO: P_SERVICE used?
  296. $item['P_SERVICE'] = $item['NAME_LIST_SERVICES'];
  297. if ($item['P_SERVICE'] == 'USERS2') $item['P_SERVICE'] = 'NET';
  298. else if ($item['P_SERVICE'] == 'VOIP') $item['P_SERVICE'] = 'TEL';
  299. $deals[ $item['ID_DEALS_TABLE'] ][ $item['P_SERVICE'] ][ $item['ID'] ] = (object)$item;
  300. }
  301. return $deals;
  302. }
  303. /**
  304. * @see POKAZ_OFERTY_AKTUALNE_FUNC: PokazOfertyHelper::get_l2_list_status_name($status)
  305. */
  306. function getStatusName($status) {
  307. static $listStatusL2 = [];
  308. if (empty($listStatusL2)) {
  309. $listStatusL2 = DB::getPDO()->fetchValuesListByKey("
  310. select lst.`name`
  311. , lst.`ses_users2`
  312. , lst.`description`
  313. from `LIST_status` as lst
  314. where lst.`ID` > 2
  315. ", 'ses_users2');
  316. }
  317. return (array_key_exists($status, $listStatusL2)) ? $listStatusL2[$status] : null;
  318. }
  319. /**
  320. * @see POKAZ_OFERTY_AKTUALNE_FUNC: PokazOfertyHelper::get_services_params($uslugi)
  321. */
  322. function getServicesParams($uslugi) {
  323. if (empty($uslugi)) return [];
  324. $ses_x_a = array();
  325. $allowed_name_list_srv = array('USERS2', 'TV', 'VOIP');
  326. $load_ses_x_a_ids = array();
  327. foreach ($uslugi as $k_deal_id => $v_deal_arr) {
  328. foreach ($v_deal_arr as $k_p_service => $v_srv_arr) {
  329. if (empty($v_srv_arr)) continue;
  330. foreach ($v_srv_arr as $k_srv_id => $v_srv) {
  331. $load_ses_x_a_ids[$v_srv->NAME_LIST_SERVICES][] = $v_srv->ID;
  332. }
  333. }
  334. }
  335. foreach ($load_ses_x_a_ids as $k_name_list_srv => $v_srv_ids) {
  336. if (!in_array($k_name_list_srv, $allowed_name_list_srv)) continue;
  337. if (empty($v_srv_ids)) continue;
  338. $listItems = DB::getPDO()->fetchAll("
  339. select *
  340. from `SES_{$k_name_list_srv}_A`
  341. where `ID_SERVICES` in ( " . implode(", ", $v_srv_ids) . " )
  342. ");
  343. foreach ($listItems as $item) {
  344. $ses_x_a[ $item['ID_SERVICES'] ] = (object)$item;
  345. }
  346. }
  347. return $ses_x_a;
  348. }
  349. function getDealsAll($params = array()) {
  350. $sqlReturnBy = V::get('return_by', '', $params);
  351. $forceUpdate = false;
  352. Lib::loadClass('ColumnDealsStatus');
  353. ColumnDealsStatus::run_update($forceUpdate);
  354. $dealsActive = array();
  355. $sql_left_join = "";
  356. $sql_select_arr = array();
  357. $sql_select_arr[] = "ds.`ID_DEALS`";
  358. $sql_select_arr[] = "ds.`ID_BILLING_USERS`";
  359. $sql_select_arr[] = "ds.`SERVICES_S_ADDRESS_STREET`";
  360. $sql_select_arr[] = "concat(c.`P_NAME`, ' ', c.`P_NAME_SECOND`) as P_NAME";
  361. if ('' != V::get('ID_BILLING_USERS', '', $params)) {
  362. $sql_left_join .= "\n left join `DEALS_TABLE` as d on (d.`ID`=ds.`ID_DEALS`)";
  363. $sql_select_arr[] = "d.`P_DEALNUMBER`";
  364. $sql_select_arr[] = "d.`P_DEALDATE`";
  365. $sql_select_arr[] = "d.`P_DEALDATE_TERM`";
  366. $sql_select_arr[] = "d.`ID_OFFERS_GROUP`";
  367. $sql_select_arr[] = "d.`ID_OFFERS_ON`";
  368. $sql_select_arr[] = "d.`ID_OFFERS_OFF`";
  369. $sql_select_arr[] = "d.`S_ADDRESS_STREET`";
  370. }
  371. $sql_where_arr = array();
  372. //$sql_where_arr[] = "ds.`DEALS_ACTIVE`=1";
  373. if ('' != ($user_id = V::get('ID_BILLING_USERS', '', $params))) {
  374. $sql_where_arr[] = "ds.`ID_BILLING_USERS`='{$user_id}'";
  375. }
  376. if ('' != ($street = V::get('S_ADDRESS_STREET', '', $params))) {
  377. $sql_where_arr[] = "(ds.`SERVICES_S_ADDRESS_STREET`='{$street}' or concat(',', ds.`SERVICES_S_ADDRESS_STREET`, ',') like '%,{$street},%')";
  378. }
  379. $sql_where_arr = implode("\n and ", $sql_where_arr);
  380. $listItems = DB::getPDO()->fetchAll("
  381. select " . implode("\n, ", $sql_select_arr) . "
  382. from `temp_DEALS_STATUS` as ds
  383. left join `COMPANIES` as c on (c.`ID`=ds.`ID_BILLING_USERS`)
  384. {$sql_left_join}
  385. where {$sql_where_arr}
  386. order by ds.`ID_DEALS` DESC
  387. ");
  388. foreach ($listItems as $item) {
  389. if ('ID' === $sqlReturnBy) {
  390. $dealsActive[$item['ID_DEALS']] = (object)$item;
  391. } else {
  392. $dealsActive[$item['ID_BILLING_USERS']][] = (object)$item;
  393. }
  394. }
  395. return $dealsActive;
  396. }
  397. /**
  398. * @see POKAZ_OFERTY_AKTUALNE_FUNC: PokazOfertyHelper::get_deals_active($params)
  399. */
  400. function getDealsActive($params = array()) {
  401. $sqlReturnBy = V::get('return_by', '', $params);
  402. $forceUpdate = false;
  403. Lib::loadClass('ColumnDealsStatus');
  404. ColumnDealsStatus::run_update($forceUpdate);
  405. $dealsActive = array();
  406. $sql_left_join = "";
  407. $sql_select_arr = array();
  408. $sql_select_arr[] = "ds.`ID_DEALS`";
  409. $sql_select_arr[] = "ds.`ID_BILLING_USERS`";
  410. $sql_select_arr[] = "ds.`SERVICES_S_ADDRESS_STREET`";
  411. $sql_select_arr[] = "concat(c.`P_NAME`, ' ', c.`P_NAME_SECOND`) as P_NAME";
  412. if ('' != V::get('ID_BILLING_USERS', '', $params)) {
  413. $sql_left_join .= "\n left join `DEALS_TABLE` as d on (d.`ID`=ds.`ID_DEALS`)";
  414. $sql_select_arr[] = "d.`P_DEALNUMBER`";
  415. $sql_select_arr[] = "d.`P_DEALDATE`";
  416. $sql_select_arr[] = "d.`P_DEALDATE_TERM`";
  417. $sql_select_arr[] = "d.`ID_OFFERS_GROUP`";
  418. $sql_select_arr[] = "d.`ID_OFFERS_ON`";
  419. $sql_select_arr[] = "d.`ID_OFFERS_OFF`";
  420. $sql_select_arr[] = "d.`S_ADDRESS_STREET`";
  421. }
  422. $sql_where_arr = array();
  423. $sql_where_arr[] = "ds.`DEALS_ACTIVE`=1";
  424. if ('' != ($user_id = V::get('ID_BILLING_USERS', '', $params))) {
  425. $sql_where_arr[] = "ds.`ID_BILLING_USERS`='{$user_id}'";
  426. }
  427. if ('' != ($street = V::get('S_ADDRESS_STREET', '', $params))) {
  428. $sql_where_arr[] = "(ds.`SERVICES_S_ADDRESS_STREET`='{$street}' or concat(',', ds.`SERVICES_S_ADDRESS_STREET`, ',') like '%,{$street},%')";
  429. }
  430. $sql_where_arr = implode("\n and ", $sql_where_arr);
  431. $listItems = DB::getPDO()->fetchAll("
  432. select " . implode("\n, ", $sql_select_arr) . "
  433. from `temp_DEALS_STATUS` as ds
  434. left join `COMPANIES` as c on (c.`ID`=ds.`ID_BILLING_USERS`)
  435. {$sql_left_join}
  436. where {$sql_where_arr}
  437. order by ds.`ID_DEALS` DESC
  438. ");
  439. foreach ($listItems as $item) {
  440. if ($sqlReturnBy == 'ID') {
  441. $dealsActive[$item['ID_DEALS']] = (object)$item;
  442. } else {
  443. $dealsActive[$item['ID_BILLING_USERS']][] = (object)$item;
  444. }
  445. }
  446. return $dealsActive;
  447. }
  448. /**
  449. * Emulates TypespecialVariable->getValuesWithExports($query)
  450. * TODO: only groups visible for current Partner - $company
  451. */
  452. function searchTypeSpecialPartnerGroups($company, $query) {
  453. $query = trim($query, ' %');
  454. $sqlLimit = 20;
  455. $listItems = DB::getPDO()->fetchAll("
  456. select z.`ID`, z.`DESC`, z.`TYPE`
  457. from `CRM_LISTA_ZASOBOW` as z
  458. where z.`A_STATUS` in ( 'NORMAL', 'WAITING' )
  459. and z.`TYPE` in ( 'STANOWISKO', 'PODMIOT', 'DZIAL' )
  460. and ( z.`DESC` like ':query' or z.`ID` like ':query' )
  461. group by z.`DESC`
  462. limit {$sqlLimit}
  463. ", [
  464. ':query' => "%{$query}%",
  465. ]);
  466. return array_map(function ($item) {
  467. return (object)[ 'id' => $item['ID'], 'param_out' => "{$item['TYPE']} {$item['DESC']}" ];
  468. }, $listItems);
  469. }
  470. }