ExportTransGus.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. Lib::loadClass('RouteBase');
  3. class Route_ExportTransGus extends RouteBase {
  4. function defaultAction() { UI::layout([ $this, 'defaultView' ]); }
  5. function defaultView() {
  6. if (!User::isAdmin()) throw new Excetion("Access Denied");
  7. echo UI::h('a', [ 'class' => 'btn btn-primary', 'href' => $this->getLink('exportTransGusCsv') ], "Export csv");
  8. echo '<hr>';
  9. $rows = $this->fetch();
  10. UI::table([
  11. 'rows' => array_map([ $this, 'convertItemFromDB' ], $rows),
  12. ]);
  13. }
  14. function exportTransGusCsvAction() {
  15. if (!User::isAdmin()) throw new Excetion("Access Denied");
  16. $fileName = 'biall-net--transgus--2019-12-31.csv';
  17. header('Content-Type: application/csv');
  18. header('Content-Disposition: attachment; filename="' . $fileName . '";');
  19. $rows = $this->fetch();
  20. $firstRow = reset($rows);
  21. if (!$firstRow) throw new Exception("Brak danych");
  22. $headers = array_keys($this->convertItemFromDB($firstRow));
  23. echo implode("\t", $headers) . "\n";
  24. echo implode("\n", array_map([ $this, 'convertCsv' ], $rows));
  25. iconv("UTF-8", "Windows-1250", $output);
  26. }
  27. function fetch() {
  28. return DB::getPDO()->fetchAll("
  29. select com.ID
  30. , com.BILLING_OWNER
  31. , com.P_NAME, com.P_NAME_SECOND, com.P_NIP, com.P_PESEL, com.P_PHONE, com.P_PHONE_SMS
  32. , '#####' as _, com.*
  33. from `billing2013`.BILLS_FVAT fv
  34. left join `billing2013`.BILLS_FVAT_POS as pos on ( fv.ID = pos.ID_BILLS_FVAT )
  35. left join `billing2013`.SERVICES srv on ( srv.ID = pos.ID_SERVICES )
  36. left join `SES_USERS2`.`COMPANIES` as com on ( com.ID = fv.ID_BILLING_USERS )
  37. where fv.BILL_DATE like '2020-01-%'
  38. and srv.ID is not null -- skip 9 rows
  39. -- and com.A_ADM_COMPANY = '19994_PODMIOT_Vectra_wlasciciel' -- 11689, 11815, 11923 -- OK BN
  40. -- and com.BILLING_OWNER = 3 -- 3 NETDAY
  41. and com.BILLING_OWNER = 1 -- BN
  42. and com.is_firma = 0
  43. group by fv.ID_BILLING_USERS
  44. ");
  45. }
  46. function convertCsv($row) {
  47. $item = $this->convertItemFromDB($row);
  48. $values = array_map(function ($val) {
  49. return str_replace([ "\n", "\t" ], '', $val);
  50. }, array_values($item));
  51. return implode("\t", $values);
  52. }
  53. function convertItemFromDB($item) {
  54. $tel = $item['P_PHONE_SMS'];
  55. if (empty($tel) && !empty($item['P_PHONE'])) {
  56. $listTel = explode(' ', trim(str_replace(',', ' ', $item['P_PHONE'])));
  57. if (!empty($listTel[0])) $tel = $listTel[0];
  58. else if (!empty($listTel[1])) $tel = $listTel[1];
  59. }
  60. return [
  61. 'REGON' => '192120212', // numer REGON podmiotu sprawozdającego
  62. 'Nazwa' => 'BIALL-NET Sp. z o.o.', // nazwa podmiotu sprawozdającego
  63. 'DataStanNa' => '2019-12-31', // data stanu danych w formacie DD-MM-RRRR (np. 31-12-2019)
  64. 'Identyfikator_rekordu' => $item['ID'], // Identyfikator sztuczny rekordu w zbiorze
  65. 'Identyfikator' => '', // Sztuczny identyfikator abonenta. Sluży do oznaczania abonenta, gdy występuje on w kilku rekordach (np. ma kilka numerów telefonów bądź podaje klika adresów zamieszkania lub do korespondencji). Wypełnienie Identyfikatora jest szczególnie istotne w sytuacjach, gdy dla klienta nie ma identyfikatora w postaci numeru PESEL.
  66. 'PESEL' => $item['P_PESEL'], // numer PESEL abonenta, jeżeli jest dostępny
  67. 'Nazwisko' => $item['P_NAME_SECOND'], // nazwisko abonenta
  68. 'Imie' => $item['P_NAME'], // pierwsze imię abonenta
  69. 'DrugieImie' => '', // drugie imię abonenta
  70. 'AdrZamNazwaWojew' => '', // nazwa województwa
  71. // 'AdrZamKodWojew' => '', // kod TERYT województwa 2
  72. 'AdrZamNazwaPowiatu' => '', // nazwa powiatu
  73. // 'AdrZamKodPowiatu' => '', // kod TERYT powiatu 2
  74. 'AdrZamNazwaGminy' => '', // nazwa gminy
  75. // 'AdrZamKodGminy' => '', // kod TERYT gminy 3
  76. 'AdrZamNazwaMiejscowosci' => $item['P_ADDRESS_CITY'], // nazwa miejscowości
  77. // 'AdrZamKodMiejscowosci' => '', // identyfikator TERYT miejscowości 7
  78. 'AdrZamNazwaUlicy' => $item['P_ADDRESS_STREET'], // nazwa ulicy
  79. // 'AdrZamKodUlicy' => '', // identyfikator TERYT ulicy 5
  80. 'AdrZamNumerDomu' => $item['P_ADDRESS_HOUSE'], // numer budynku
  81. 'AdrZamNumerLokalu' => $item['P_ADDRESS_HOME'], // numer mieszkania
  82. // 'AdrKorNazwaWojew' => '', // nazwa województwa
  83. // // 'AdrKorKodWojew' => '', // kod TERYT województwa 2
  84. // 'AdrKorNazwaPowiatu' => '', // nazwa powiatu
  85. // // 'AdrKorKodPowiatu' => '', // kod TERYT powiatu 2
  86. // 'AdrKorNazwaGminy' => '', // nazwa gminy
  87. // // 'AdrKorKodGminy' => '', // kod TERYT gminy 3
  88. // 'AdrKorNazwaMiejscowosci' => '', // nazwa miejscowości
  89. // // 'AdrKorKodMiejscowosci' => '', // identyfikator TERYT miejscowości 7
  90. // 'AdrKorNazwaUlicy' => '', // nazwa ulicy
  91. // // 'AdrKorKodUlicy' => '', // identyfikator TERYT ulicy 5
  92. // 'AdrKorNumerDomu' => '', // numer budynku
  93. // 'AdrKorNumerLokalu' => '', // numer mieszkania
  94. 'NrTelefonu' => $tel, // numer telefonu abonenta
  95. ];
  96. }
  97. }