View.php 133 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282
  1. <?php
  2. Lib::loadClass('CompanyHelper');
  3. Lib::loadClass('PokazOfertyView');
  4. Lib::loadClass('ProcesHelper');
  5. Lib::loadClass('Windykacja_StatsHelper');
  6. Lib::loadClass('Windykacja_StatsModel');
  7. Lib::loadClass('Windykacja_FunkcjeL1');
  8. class Windykacja_View {
  9. static function viewUserInfo($idUser) {
  10. $userInfo = self::getUserInfo($idUser);
  11. $windykInfo = self::getWindykacjaInfo($idUser);
  12. echo UI::h('details', [ 'style' => "margin-bottom: 24px" ], [
  13. UI::h('summary', [ 'style' => "padding: 12px; background: #eee; cursor: pointer; outline: none" ], [
  14. ($userInfo['is_firma']) ? "Firma" : "Klient",
  15. " ",
  16. UI::h('b', [], "{$userInfo['P_NAME']} {$userInfo['P_NAME_SECOND']}"),
  17. $windykInfo ? UI::h('span', [ 'style' => "padding-left: 24px" ], [
  18. "Zapis/Odczyt dla: {$windykInfo['A_ADM_COMPANY']}", // $windykInfo['A_CLASSIFIED'];
  19. ]) : "",
  20. UI::h('span', [ 'style' => "padding-left: 24px" ], [
  21. "Status windykacji: ",
  22. (!$windykInfo) ? "brak danych" : UI::h('span', [], "{$windykInfo['A_STATUS']} <em>{$windykInfo['A_STATUS_INFO']}</em>"),
  23. ]),
  24. " ...",
  25. UI::h('span', [ 'style' => "float:right" ], [
  26. UI::h('a', [ 'href' => "index.php?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=&_f=&_user_id={$idUser}" ], "Panel windykacji"),
  27. ]),
  28. ]),
  29. UI::h('div', [ 'style' => "padding: 12px; background: #eee;" ], [
  30. UI::h('table', [], [
  31. UI::h('tr', [], [
  32. UI::h('td', [ 'style' => "vertical-align:top; padding-right:8px" ], [
  33. self::viewWidgetUserInfo($idUser, $userInfo),
  34. ]),
  35. UI::h('td', [ 'style' => "vertical-align:top; padding-right:8px" ], [
  36. self::viewWidgetUserWindykInfo($idUser, $windykInfo),
  37. ]),
  38. ]),
  39. ]),
  40. ]),
  41. ]);
  42. }
  43. static function getUserInfo($idUser) {
  44. return DB::getPDO()->fetchFirst("
  45. select bua.`id_users`
  46. , bua.`id_users` as ID_BILLING_USERS
  47. , bua.`is_firma`
  48. , bua.`P_NAME`
  49. , bua.`P_NAME_SECOND`
  50. , bua.`P_NIP`
  51. , bua.`P_PESEL`
  52. , bua.`P_PHONE`
  53. , bua.`P_ADDRESS_REGION`
  54. , bua.`P_ADDRESS_CITY`
  55. , bua.`P_ADDRESS_POST_CODE`
  56. , bua.`P_ADDRESS_STREET`
  57. , bua.`P_ADDRESS_HOME`
  58. , bua.`P_ADDRESS_HOUSE`
  59. , bua.`user_mail_contact`
  60. , bu.`BILLING_OWNER`
  61. , ( select bo.name1 from BILLING_OWNER bo where bo.ID = bu.BILLING_OWNER ) as BILLING_OWNER_NAME
  62. from `BILLING_USERS_ADD` as bua
  63. left join `BILLING_USERS` as bu on ( bu.`ID` = bua.`id_users` )
  64. where bua.`id_users` = :id_user
  65. ", [ ':id_user' => $idUser ]);
  66. }
  67. static function getWindykacjaInfo($idUser) {
  68. static $_windykInfo;
  69. if ($_windykInfo) return $_windykInfo;
  70. $_windykInfo = self::fetchWindykacjaInfo($idUser);
  71. if ($_windykInfo['A_STATUS_UPDATE_DATE'] < date("Y-m-d")) {
  72. $user = Windykacja_StatsModel::get_user_by_id($idUser);
  73. if ($user) {
  74. $billing_docs = Windykacja_StatsModel::getBillDocsByDate($idUser);
  75. Windykacja_StatsHelper::update_stats($user, $billing_docs);
  76. }
  77. $_windykInfo = self::fetchWindykacjaInfo($idUser);
  78. }
  79. return $_windykInfo;
  80. }
  81. static function fetchWindykacjaInfo($idUser) {
  82. return DB::getPDO()->fetchFirst("
  83. select t.`ID`
  84. , t.A_STATUS
  85. , t.A_STATUS_INFO
  86. , t.PAY_SALDO
  87. , t.*
  88. from `USERS2_WINDYKACJA_STATUS` as t
  89. where t.`ID_BILLING_USERS` = :id_user
  90. ", [ ':id_user' => $idUser ]);
  91. }
  92. static function viewWidgetUserInfo($idUser, $userInfo = []) {
  93. if (empty($userInfo)) $userInfo = self::getUserInfo($idUser);
  94. $outUserInfo = [
  95. 'Nr klienta' => $userInfo['ID_BILLING_USERS'],
  96. 'Firma' => ($userInfo['is_firma']) ? "Tak" : "Nie",
  97. 'Nip' => $userInfo['P_NIP'],
  98. 'Pesel' => $userInfo['P_PESEL'],
  99. 'Tel' => $userInfo['P_PHONE'],
  100. 'email' => $userInfo['user_mail_contact'],
  101. 'Adres' => "{$userInfo['P_ADDRESS_POST_CODE']} {$userInfo['P_ADDRESS_CITY']} {$userInfo['P_ADDRESS_STREET']} {$userInfo['P_ADDRESS_HOME']}/{$userInfo['P_ADDRESS_HOUSE']}",
  102. 'Operator' => "[{$userInfo['BILLING_OWNER']}] {$userInfo['BILLING_OWNER_NAME']}",
  103. ];
  104. return UI::h('div', [], [
  105. UI::h('p', [ 'style' => "border-left:3px solid #ddd; padding-left:6px; font-weight:bold" ], "Dane klienta"),
  106. UI::h('table', [ 'class' => "table table-bordered", 'style' => "width:auto; background:#fff" ],
  107. array_map(function ($fieldName) use ($outUserInfo) {
  108. return UI::h('tr', [], [
  109. UI::h('th', [], $fieldName),
  110. UI::h('td', [], $outUserInfo[$fieldName]),
  111. ]);
  112. }, array_keys($outUserInfo))
  113. ),
  114. ]);
  115. }
  116. static function viewWidgetUserWindykInfo($idUser, $windykInfo = []) {
  117. if (empty($windykInfo)) $windykInfo = self::getUserInfo($idUser);
  118. $outWindykInfo = [
  119. 'Status' => $windykInfo['A_STATUS'],
  120. // $filter_arr['stan_zero'] = array("stan zerowy");
  121. // $filter_arr['10-ego'] = array("termin płatności faktur, saldo na -", 'desc'=>array("10-ego", "10-ego każdego miesiąca - termin płatnosci faktur oraz saldo na minusie"));
  122. // $filter_arr['WAITING'] = array("termin płatności faktur", 'desc'=>array("10-ego", "10-ego każdego miesiąca - termin płatnosci faktur"));// z regulaminu
  123. // $filter_arr['15'] = array("mail ponaglenie", 'desc'=>array("10-ego + 5", "10-ego + 5 dni roboczych"));
  124. // $filter_arr['blokada'] = array("blokada", 'desc'=>array("pn, wt, śr około 25", "najbliższy pn, wt, śr do 25"));// najbliższy pn, wt, śr do 25-ego danego miesiąca
  125. // $filter_arr['tel1'] = array("kontakt tel.", 'desc'=>array("", "Ostatni kontakt tel. ponad 3 m-ce temu"));
  126. // $filter_arr['bad_address'] = array("błędny adres");
  127. // $filter_arr['wezwanie1'] = array("wezwanie do zapłaty", 'desc'=>array("2 x FVat", "2 faktury"));
  128. // $filter_arr['waiting-wezwanie2'] = array("oczekiwanie 7 dni od terminu płatności");
  129. // $filter_arr['wezwanie2'] = array("ostateczne wezwanie do zapłaty, rozwiązanie umowy", 'desc'=>array("wezwanie + 14", "wezwanie + 14 dni"));
  130. // $filter_arr['waiting-krd'] = array("min. 30 dni od ostatecznego wezwania");
  131. // $filter_arr['krd'] = array("do przekazania do KRD", 'desc'=>array("wezwanie ost. + 60", "wezwanie ost. + 60 dni"));
  132. // $filter_arr['waiting-sad'] = array("przekazano do KRD");
  133. // $filter_arr['docs-in-sad'] = array("przekazać sprawę do sądu");// waiting-sad = 30 dni
  134. // $filter_arr['sad'] = array("przekazano sprawę do sądu");
  135. // $filter_arr['3 m-ce przed'] = array("3 m-ce przed przedawnieniem");// 3 m-ce przed przedawnieniem
  136. // $filter_arr['po-terminie'] = array("po terminie");// 3 lata po dacie platnosci faktur
  137. // $filter_arr['has_nr_sad'] = array("nr sprawy sąd");
  138. // $filter_arr['has_nr_komornik'] = array("nr sprawy komornik");
  139. // $filter_arr['has_ustalenia'] = array("ustalenia z klientem");
  140. // $filter_arr['sad_and_komornik'] = array("sąd z komornik");
  141. // $filter_arr['sad_bez_komornik'] = array("sąd bez komornik");
  142. // $filter_arr['isMovedToVectra'] = array("przeniesieni do Vectra");
  143. // if ($filter_selected == 'po-terminie') {
  144. // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  145. // $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  146. // $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  147. // }
  148. // else if ($filter_selected == '3 m-ce przed') {
  149. // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  150. // $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  151. // $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)";
  152. // $sql_where_and_arr[] = "w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  153. // }
  154. // else if ($filter_selected == 'tel1') {
  155. // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  156. // $sql_where_and_arr[] = "w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')";
  157. // $sql_where_and_arr[] = "( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
  158. // or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 3 MONTH) )";
  159. // }
  160. // else if ($filter_selected == 'bad_address') {
  161. // $sql_where_and_arr[] = "w.`BAD_ADDRESS`>0";
  162. // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  163. // }
  164. // else if ($filter_selected == 'stan_zero') {
  165. // $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  166. // $sql_where_and_arr[] = "w.`PAY_SALDO`>-0.05";
  167. // }
  168. // else if ($filter_selected == '10-ego') {
  169. // $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  170. // $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  171. // }
  172. // else if ($filter_selected == 'has_nr_sad') {
  173. // $sql_where_and_arr[] = "w.`NR_SPRAWY_SAD`!=''";
  174. // }
  175. // else if ($filter_selected == 'has_nr_komornik') {
  176. // $sql_where_and_arr[] = "w.`NR_SPRAWY_KOMORNIK`!=''";
  177. // }
  178. // else if ($filter_selected == 'has_ustalenia') {
  179. // $sql_where_and_arr[] = "w.`L_APPOITMENT_INFO`!=''";
  180. // }
  181. // else if ($filter_selected == 'sad_and_komornik') {
  182. // $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`!=''";
  183. // }
  184. // else if ($filter_selected == 'sad_bez_komornik') {
  185. // $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`=''";
  186. // }
  187. // else if ($filter_selected == 'isMovedToVectra') {
  188. // $sql_where_and_arr[] = "w.`IS_MOVED_TO_VECTRA`=1";
  189. // }
  190. // else {
  191. // $sql_where_and_arr[] = "w.`A_STATUS`='{$filter_selected}'";
  192. // }
  193. 'Saldo' => $windykInfo['PAY_SALDO'],
  194. 'Termin ost. fv' => $windykInfo['PAY_DATE'], // Data wymagalności ostatniej faktury
  195. 'Zaległe faktury' => $windykInfo['PAY_FVAT'],
  196. 'Adresy usług' => $windykInfo['SERVICES_STREETS'],
  197. ];
  198. return UI::h('div', [], [
  199. UI::h('p', [ 'style' => "border-left:3px solid #ddd; padding-left:6px; font-weight:bold" ], [
  200. "Informacje o płatnościach",
  201. ($windykInfo['A_STATUS_UPDATE_DATE'] < date("Y-m-d"))
  202. ? UI::h('div', [ 'class' => "text-danger" ], [
  203. "Uwaga: Wymagają aktualizacji",
  204. " ",
  205. UI::h('em', [ 'class' => "text-muted" ], "(dane z {$windykInfo['A_STATUS_UPDATE_DATE']})"),
  206. // TODO: btn aktualizuj lub auto aktualizuj przed pokazaniem danych
  207. ])
  208. : "",
  209. ]),
  210. UI::h('table', [ 'class' => "table table-bordered", 'style' => "width:auto; background:#fff" ],
  211. array_map(function ($fieldName) use ($outWindykInfo) {
  212. return UI::h('tr', [], [
  213. UI::h('th', [], $fieldName),
  214. UI::h('td', [], $outWindykInfo[$fieldName]),
  215. ]);
  216. }, array_keys($outWindykInfo))
  217. ),
  218. UI::h('table', [ 'class' => "table table-bordered", 'style' => "width:auto; display:none; background:yellow" ],
  219. array_map(function ($fieldName) use ($windykInfo) {
  220. return UI::h('tr', [], [
  221. UI::h('th', [], $fieldName),
  222. UI::h('td', [], $windykInfo[$fieldName]),
  223. ]);
  224. }, array_keys($windykInfo))
  225. ),
  226. ]);
  227. }
  228. public static function user(&$user) {
  229. $bad_address_task = V::get('bad_address', '', $_POST);
  230. $bad_address_msg = array();
  231. if ($bad_address_task) {
  232. $id_koresp = V::get('ID_KORESP', 0, $_POST, 'int');
  233. if ($id_koresp <= 0) {
  234. $bad_address_msg['error_id_koresp'] = true;
  235. } else {
  236. if ($bad_address_task == 'save') {
  237. if (!Windykacja_StatsHelper::bad_address_save($user, $id_koresp)) {
  238. $bad_address_msg['error'] = true;
  239. } else {
  240. $bad_address_msg['ok'] = true;
  241. }
  242. }
  243. else if ($bad_address_task == 'confirm') {
  244. if (!Windykacja_StatsHelper::bad_address_confirm($user, $id_koresp)) {
  245. $bad_address_msg['error'] = true;
  246. } else {
  247. $bad_address_msg['ok'] = true;
  248. }
  249. }
  250. }
  251. }
  252. $change_status_task = V::get('change_status', '', $_POST);
  253. $change_status_msg = array();
  254. if ($change_status_task) {
  255. if ($change_status_task == 'change') {
  256. $new_status = V::get('new_status', '', $_POST);
  257. $fltr_arr = Windykacja_StatsHelper::get_filters();
  258. if (!array_key_exists($new_status, $fltr_arr)) {
  259. $change_status_msg['error'] = true;
  260. } else {
  261. if (!Windykacja_StatsHelper::change_status_save($user, $new_status)) {
  262. $change_status_msg['error'] = true;
  263. } else {
  264. $change_status_msg['ok'] = true;
  265. }
  266. }
  267. }
  268. }
  269. $set_nr_sprawy_krd_task = V::get('set_nr_sprawy_krd', '', $_POST);
  270. $set_nr_sprawy_krd_msg = array();
  271. if ($set_nr_sprawy_krd_task) {
  272. if ($set_nr_sprawy_krd_task == 'change') {
  273. $nr_sprawy_krd = V::get('nr_sprawy_krd', '', $_POST);
  274. if (!Windykacja_StatsHelper::nr_sprawy_krd_save($user, $nr_sprawy_krd)) {
  275. $set_nr_sprawy_krd_msg['error'] = true;
  276. } else {
  277. $set_nr_sprawy_krd_msg['ok'] = true;
  278. }
  279. }
  280. }
  281. $set_nr_sprawy_sad_task = V::get('set_nr_sprawy_sad', '', $_POST);
  282. $set_nr_sprawy_sad_msg = array();
  283. if ($set_nr_sprawy_sad_task) {
  284. if ($set_nr_sprawy_sad_task == 'change') {
  285. $nr_sprawy_sad = V::get('nr_sprawy_sad', '', $_POST);
  286. if (!Windykacja_StatsHelper::nr_sprawy_sad_save($user, $nr_sprawy_sad)) {
  287. $set_nr_sprawy_sad_msg['error'] = true;
  288. } else {
  289. $set_nr_sprawy_sad_msg['ok'] = true;
  290. }
  291. }
  292. }
  293. $set_nr_sprawy_komornik_task = V::get('set_nr_sprawy_komornik', '', $_POST);
  294. $set_nr_sprawy_komornik_msg = array();
  295. if ($set_nr_sprawy_komornik_task) {
  296. if ($set_nr_sprawy_komornik_task == 'change') {
  297. $nr_sprawy_komornik = V::get('nr_sprawy_komornik', '', $_POST);
  298. if (!Windykacja_StatsHelper::nr_sprawy_komornik_save($user, $nr_sprawy_komornik)) {
  299. $set_nr_sprawy_komornik_msg['error'] = true;
  300. } else {
  301. $set_nr_sprawy_komornik_msg['ok'] = true;
  302. }
  303. }
  304. }
  305. $set_ustalenia_info_task = V::get('set_ustalenia_info', '', $_POST);
  306. $set_ustalenia_info_msg = array();
  307. if ($set_ustalenia_info_task) {
  308. if ($set_ustalenia_info_task == 'change') {
  309. $ustalenia_date = V::get('ustalenia_date', '', $_POST);
  310. $ustalenia_info = V::get('ustalenia_info', '', $_POST);
  311. if (!Windykacja_StatsHelper::ustalenia_info_save($user, $ustalenia_date, $ustalenia_info)) {
  312. $set_ustalenia_info_msg['error'] = true;
  313. } else {
  314. $set_ustalenia_info_msg['ok'] = true;
  315. }
  316. }
  317. }
  318. $dataBlokady = '';
  319. if ($user->STATUS == 9) {
  320. $db = DB::getDB();
  321. $sqlDataBlokadyTest = "
  322. select c.`ID`, c.`STATUS`, h.`STATUS` as h_status, h.`A_RECORD_UPDATE_DATE`, h.`A_RECORD_CREATE_DATE`
  323. from `COMPANIES` c
  324. join `COMPANIES_HIST` h on(h.`ID_USERS2`=c.`ID`)
  325. where (h.`STATUS`='9' or c.`STATUS`='9')
  326. ";
  327. $sqlDataBlokadyTestHasNoDate = "
  328. select c.`ID`, c.`STATUS`
  329. from `COMPANIES` c
  330. where c.`STATUS`='9'
  331. and not exists(select h.`ID`
  332. from `COMPANIES_HIST` h
  333. where h.`ID_USERS2`=c.`ID`
  334. and h.`STATUS`='9'
  335. )
  336. ";
  337. $sqlDataBlokady = "select h.`A_RECORD_UPDATE_DATE`
  338. from `COMPANIES_HIST` h
  339. where h.`ID_USERS2`='{$user->ID_BILLING_USERS}'
  340. and h.`STATUS`='9'
  341. order by h.`ID` desc
  342. limit 1
  343. ";
  344. $res = $db->query($sqlDataBlokady);
  345. if ($r = $db->fetch($res)) {
  346. $dataBlokady = $r->A_RECORD_UPDATE_DATE;
  347. }
  348. }
  349. $company = Windykacja_StatsModel::getOwnerCompany($user->ID_BILLING_USERS);
  350. $nr_konta = Windykacja_FunkcjeL1::bankowy_formatuj_nrach(Windykacja_FunkcjeL1::bankowy_make_nrach($company['NR_RACH_MASS_PAY'], $user->ID_BILLING_USERS, 0));
  351. echo'<h3>';
  352. echo' <a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&_p=".V::get('_p', '', $_REQUEST)."&_f=".V::get('_f', '', $_REQUEST)."&_oby=".V::get('_oby', '', $_REQUEST)."&_odir=".V::get('_odir', '', $_REQUEST).'">'."Klienci".'</a>';
  353. echo ' &raquo; <code style="font-size:normal;color:green;">'."[".$user->id_users."]".'</code>';
  354. echo ' <b>'.$user->P_NAME.' '.$user->P_NAME_SECOND.'</b>';
  355. echo'</h3>';
  356. echo '<table class="" cellspacing="0" cellpadding="0" border="0"><tr><td style="vertical-align:top">';
  357. echo '<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  358. echo '<caption>';
  359. echo "Dane " . (($user->is_firma)? "firmy" : "klienta") . " ";
  360. if ($user->BAD_ADDRESS) {
  361. echo '<form action="" method="POST" style="display:inline">';
  362. echo '<input type="hidden" name="'."bad_address".'" value="'."confirm".'" />';
  363. $js = "if(this.nextSibling.style.display=='none'){this.nextSibling.style.display='block'}else{this.nextSibling.style.display='none'}; return false;";
  364. echo '<input type="button" value="'."popraw adres".'" onclick="'.$js.'" style="margin:1px 2px;padding:0 6px;" />';
  365. echo '<div style="display:none;">';
  366. echo '<label for="ID_KORESP">'."ID Koresp.".'</label>';
  367. echo '<input type="text" name="' . "ID_KORESP" . '" size="5" value="' . "" . '" />';
  368. echo '<input type="submit" value="'."zapisz".'" />';
  369. echo '</div>';
  370. echo '</form>';
  371. } else {
  372. echo '<form action="" method="POST" style="display:inline">';
  373. echo '<input type="hidden" name="'."bad_address".'" value="'."save".'" />';
  374. $js = "if(this.nextSibling.style.display=='none'){this.nextSibling.style.display='block'}else{this.nextSibling.style.display='none'}; return false;";
  375. echo '<input type="button" value="'."zgłoś błędny adres".'" onclick="'.$js.'" style="margin:1px 2px;padding:0 6px;" />';
  376. echo '<div style="display:none;">';
  377. echo '<label for="ID_KORESP">'."ID Koresp.".'</label>';
  378. echo '<input type="text" name="' . "ID_KORESP" . '" size="5" value="' . "" . '" />';
  379. echo '<input type="submit" value="'."zapisz".'" />';
  380. echo '</div>';
  381. echo '</form>';
  382. }
  383. if (!empty($bad_address_msg)) {
  384. if ('id_koresp' == V::get('error', '', $bad_address_msg)) {
  385. echo '<div class="red">'."Podaj poprawny ID Koresp.".'</div>';
  386. } else if (true == V::get('error', false, $bad_address_msg)) {
  387. echo '<div class="red">'."Error!".'</div>';
  388. } else if (true == V::get('ok', false, $bad_address_msg)) {
  389. echo '<div style="color:green">'."Zapisano pomyślnie.".'</div>';
  390. }
  391. }
  392. echo '</caption>';
  393. echo'<tr>';
  394. echo'<th>' . "Adres:" . '</th>';
  395. echo'<td'.(($user->BAD_ADDRESS)? ' style="background-color:#FF7878;"' : '').'>';
  396. echo "ul. ".$user->P_ADDRESS_STREET." ".$user->P_ADDRESS_HOUSE."/".$user->P_ADDRESS_HOME.", ".$user->P_ADDRESS_POST_CODE." ".$user->P_ADDRESS_CITY;
  397. echo'</td>';
  398. echo'</tr>';
  399. ?>
  400. <?php if ($user->P_ADRESS_KORESP_1282) : ?>
  401. <tr>
  402. <th title="Adres do korespondencji">Adres koresp.</th>
  403. <td><?php echo $user->P_ADRESS_KORESP_1282; ?></td>
  404. </tr>
  405. <?php endif; ?>
  406. <?php
  407. echo'<tr>';
  408. echo'<th>' . "Pesel:" . '</th>';
  409. echo'<td>';
  410. if ($user->P_PESEL) {
  411. echo $user->P_PESEL;
  412. } else {
  413. echo '<span style="color:#f00;">'."Brak numeru PESEL!".'</span>';
  414. }
  415. echo'</td>';
  416. echo'</tr>';
  417. echo'<tr>';
  418. echo'<th>' . "Nr telefonu:" . '</th>';
  419. echo'<td>';
  420. if ($user->P_PHONE) {
  421. echo $user->P_PHONE;
  422. } else {
  423. echo '<span style="color:#f00;">'."Brak!".'</span>';
  424. }
  425. echo'</td>';
  426. echo'</tr>';
  427. echo'<tr>';
  428. echo'<th>' . "Nr dowodu:" . '</th>';
  429. echo'<td>';
  430. if ($user->P_OTHER_DOC) {
  431. echo $user->P_OTHER_DOC;
  432. } else {
  433. echo '<span style="color:#f00;">'."Brak!".'</span>';
  434. }
  435. echo'</td>';
  436. echo'</tr>';
  437. echo'<tr>';
  438. echo'<th>' . "e-mail:" . '</th>';
  439. echo'<td>';
  440. if ($user->user_mail_contact) {
  441. echo '<a href="mailto:'.$user->user_mail_contact.'">'.$user->user_mail_contact.'</a>';
  442. } else {
  443. echo '<span style="color:#f00;">'."Brak!".'</span>';
  444. }
  445. echo'</td>';
  446. echo'</tr>';
  447. echo'<tr>';
  448. echo'<th>' . "Klient firmy:" . '</th>';
  449. echo'<td>';
  450. if ($user->BILLING_OWNER == 1) {
  451. echo 'BN - BIALL-NET';
  452. } else if ($user->BILLING_OWNER == 2) {
  453. echo 'ND - NETDAY';
  454. } else {
  455. echo 'nieznany';
  456. }
  457. echo'</td>';
  458. echo'</tr>';
  459. echo'<tr>';
  460. echo'<th>' . "Blokada:" . '</th>';
  461. echo'<td>';
  462. if ($user->STATUS == 9) {
  463. echo '<b style="color:red">' . "ZABLOKOWANY" . '</b>';
  464. if (!empty($dataBlokady)) {
  465. echo '<br>' . "od dnia " . substr($dataBlokady, 0, 10);
  466. }
  467. } else {
  468. echo 'brak blokady';
  469. }
  470. echo'</td>';
  471. echo'</tr>';
  472. ?>
  473. <tr>
  474. <th>Nr konta:</th>
  475. <td><?php echo $nr_konta; ?></td>
  476. </tr>
  477. <?php
  478. echo '</table>';
  479. echo '</td><td>' . "&nbsp;" . '</td><td style="vertical-align:top">';
  480. echo '<table class="tbl-view tbl-umowy-l2'.(($user->A_STATUS_UPDATE_DATE < date("Y-m-d"))? ' wind-status-old' : '').'" cellspacing="0" cellpadding="0" border="1">';
  481. echo '<caption>';
  482. echo "Status windykacji ";
  483. echo '<code style="font-size:x-small; color:#ccc;">' . "(" . $user->WINDYKACJA_ID . ")" . '</code>';
  484. if ($user->A_STATUS_UPDATE_DATE < date("Y-m-d")) {
  485. echo " " . '<a style="color:red" href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&_p=".V::get('_p','', $_REQUEST)."&_f=".V::get('_f', '', $_REQUEST)."&_user_id=".$user->ID . '">' . "Aktualizuj status" . '</a>'; // Reload page, data updated below
  486. }
  487. // TODO: zmien status klienta - przypisanie do odpowiedniej grupy
  488. echo '</caption>';
  489. echo '<tr>';
  490. echo '<th>' . "status:" . '</th>';
  491. echo '<td>';
  492. echo $user->A_STATUS;
  493. if (V::get('DBG', '', $_GET, 'int') > 0) {// TODO: TEST
  494. if ($user->A_STATUS == 'waiting-krd') {
  495. echo '<br />' . "wezwanie2_DATE: {$user->wezwanie2_DATE}";
  496. $wzw2 = new stdClass();
  497. $wzw2->Y = intval(substr($user->wezwanie2_DATE, 0, 4));
  498. $wzw2->m = intval(substr($user->wezwanie2_DATE, 5, 2));
  499. $wzw2->d = intval(substr($user->wezwanie2_DATE, 8, 2));
  500. echo '<br />' . "wzw2: {$wzw2->Y}-{$wzw2->m}-{$wzw2->d}";
  501. $wzw2->plus_60 = date("Y-m-d", mktime(0,0,0, $wzw2->m, $wzw2->d + 60, $wzw2->Y));
  502. echo '<br />' . "wezwanie2_DATE + 60 dni: {$wzw2->plus_60}";
  503. if ($wzw2->plus_60 < date("Y-m-d")) {
  504. echo '<br />' . "TODO: przenieść do krd";
  505. }
  506. }
  507. }// TODO: TEST
  508. echo ' &nbsp;&nbsp; <form action="" method="POST" style="display:inline">';
  509. echo '<input type="hidden" name="'."change_status".'" value="'."change".'" />';
  510. $fltr_arr = Windykacja_StatsHelper::get_filters();
  511. $fltr_options = array();
  512. foreach ($fltr_arr as $k_status => $v_arr) {
  513. $fltr_options[$k_status] = reset($v_arr);
  514. }
  515. echo '<select name="' . "new_status" . '">';
  516. foreach ($fltr_options as $k_ind => $v_label) {
  517. $sel = ($k_ind == $user->A_STATUS)? ' selected="selected"' : '';
  518. echo '<option value="' . $k_ind . '"' . $sel . '>' . "{$k_ind}: {$v_label}" . '</option>';
  519. }
  520. echo '</select>';
  521. echo '<input type="submit" value="'."zmień".'" />';
  522. echo '</form>';
  523. echo '</td>';
  524. echo '</tr>';
  525. echo '<tr>';
  526. echo '<th>' . "Nr sprawy w krd" . '</th>';
  527. echo '<td>';
  528. echo ' <form action="" method="POST" style="display:inline">';
  529. echo '<input type="hidden" name="'."set_nr_sprawy_krd".'" value="'."change".'" />';
  530. echo '<input type="text" name="'."nr_sprawy_krd".'" value="'.$user->NR_SPRAWY_KRD.'" />';
  531. echo '<input type="submit" value="'."zmień".'" />';
  532. echo '</form>';
  533. echo '</td>';
  534. echo '</tr>';
  535. echo '<tr>';
  536. echo '<th>' . "Nr sprawy w sądzie" . '</th>';
  537. echo '<td>';
  538. echo ' <form action="" method="POST" style="display:inline">';
  539. echo '<input type="hidden" name="'."set_nr_sprawy_sad".'" value="'."change".'" />';
  540. echo '<input type="text" name="'."nr_sprawy_sad".'" value="'.$user->NR_SPRAWY_SAD.'" />';
  541. echo '<input type="submit" value="'."zmień".'" />';
  542. echo '</form>';
  543. echo '</td>';
  544. echo '</tr>';
  545. echo '<tr>';
  546. echo '<th>' . "Nr sprawy u komornika" . '</th>';
  547. echo '<td>';
  548. echo ' <form action="" method="POST" style="display:inline">';
  549. echo '<input type="hidden" name="'."set_nr_sprawy_komornik".'" value="'."change".'" />';
  550. echo '<input type="text" name="'."nr_sprawy_komornik".'" value="'.$user->NR_SPRAWY_KOMORNIK.'" />';
  551. echo '<input type="submit" value="'."zmień".'" />';
  552. echo '</form>';
  553. echo '</td>';
  554. echo '</tr>';
  555. echo '<tr>';
  556. echo '<th>' . "Aktualne ustalenia z klientem" . '</th>';
  557. echo '<td>';
  558. echo ' <form action="" method="POST" style="display:inline">';
  559. echo '<input type="hidden" name="'."set_ustalenia_info".'" value="'."change".'" />';
  560. echo '<textarea style="width:100%" type="text" name="'."ustalenia_info".'">' . $user->L_APPOITMENT_INFO . '</textarea>';
  561. echo '<br />' . "Data: ";
  562. echo '<input type="text" name="'."ustalenia_date".'" value="'.$user->L_APPOITMENT_DATE.'" />';
  563. echo '<input type="submit" value="'."zmień".'" />';
  564. $js = "this.form.ustalenia_info.value=''; this.form.ustalenia_date.value='0000-00-00'; return false;";
  565. echo '<input type="reset" value="'."wyszyść".'" onclick="'.$js.'" />';
  566. echo '</form>';
  567. echo '</td>';
  568. echo '</tr>';
  569. echo '<tr>';
  570. echo '<th>' . "data ostatniej wpłaty:" . '</th>';
  571. echo '<td>';
  572. if ($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00') {
  573. echo $user->LAST_PAY_DATE;
  574. } else {
  575. echo '---';
  576. }
  577. echo '</td>';
  578. echo '</tr>';
  579. echo '<tr>';
  580. echo '<th>' . "data wymagalności ostatniej faktury:" . '</th>';
  581. echo '<td>';
  582. if ($user->PAY_DATE != '0000-00-00') {
  583. echo $user->PAY_DATE;
  584. }
  585. echo '</td>';
  586. echo '</tr>';
  587. echo '<tr>';
  588. echo '<th>' . "data wymagalności pierwszej faktury:" . '</th>';
  589. echo '<td>';
  590. if ($user->PAY_DATE_FIRST_FVAT != '0000-00-00') {
  591. echo $user->PAY_DATE_FIRST_FVAT;
  592. }
  593. echo '</td>';
  594. echo '</tr>';
  595. echo '<tr>';
  596. echo '<th>' . "termin płatności:" . '</th>';
  597. echo '<td>';
  598. if ($user->PAY_TERM != '0000-00-00') {
  599. echo $user->PAY_TERM;
  600. }
  601. echo '</td>';
  602. echo '</tr>';
  603. echo '<tr>';
  604. echo '<th>' . "Przeniesienie do Vectra?:" . '</th>';
  605. echo '<td>';
  606. if ($user->IS_MOVED_TO_VECTRA) {
  607. echo 'TAK';
  608. } else {
  609. echo '<span class="text-muted">NIE</span>';
  610. }
  611. echo '</td>';
  612. echo '</tr>';
  613. echo '</table>';
  614. echo '</td></tr></table>';
  615. // TODO: windykacja_status_info - grupa filtrow do ktorej nalezy klient
  616. Lib::loadClass('CompanyHelper');
  617. $db = DB::getDB();
  618. $comHelper = new CompanyHelper($db);
  619. $usr = $comHelper->getById($user->ID);
  620. $dealsActive = $comHelper->getDealsFull($user->ID, false);
  621. Lib::loadClass('PokazOfertyView');
  622. $pokaz_oferty_view = new PokazOfertyView();
  623. echo $pokaz_oferty_view->print_css();
  624. $pokaz_oferty_view->printServices($usr, $dealsActive);
  625. if(V::get('DBG_ACTIVE_SRV', '', $_GET) > 2){
  626. $activeServicesByType = array();
  627. $db = DB::getDB();
  628. $idUser = $user->ID;
  629. $sql = "
  630. select srv.`ID` as `ID_SERVICES`
  631. , srv.`NAME_LIST_SERVICES`
  632. , A_STATUS_L2_SQL_L1(srv.`ID`) as A_STATUS_CURRENT
  633. from `SERVICES` srv
  634. where srv.`ID_BILLING_USERS`='{$idUser}'
  635. ";
  636. DBG::_(true, true, "sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  637. $res = $db->query($sql);
  638. while ($r = $db->fetch($res)) {
  639. $activeServicesByType[] = $r;
  640. }
  641. DBG::_(true, true, "activeServicesByType", $activeServicesByType, __CLASS__, __FUNCTION__, __LINE__);
  642. $sql = "
  643. select
  644. IF(1 = (
  645. select 1 as hasActiveNET
  646. from `SERVICES` srv
  647. where srv.`ID_BILLING_USERS`='{$idUser}'
  648. and srv.`NAME_LIST_SERVICES`='USERS2'
  649. and 'NORMAL'=A_STATUS_L2_SQL_L1(srv.`ID`)
  650. limit 1
  651. ), 1, 0) as hasActiveNET
  652. ,
  653. IF(1 = (
  654. select 1 as hasActiveTV
  655. from `SERVICES` srv
  656. where srv.`ID_BILLING_USERS`='{$idUser}'
  657. and srv.`NAME_LIST_SERVICES`='TV'
  658. and 'NORMAL'=A_STATUS_L2_SQL_L1(srv.`ID`)
  659. limit 1
  660. ), 1, 0) as hasActiveTV
  661. ";
  662. DBG::_(true, true, "sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  663. $activeServicesByType = array();
  664. $res = $db->query($sql);
  665. while ($r = $db->fetch($res)) {
  666. $activeServicesByType = $r;
  667. }
  668. DBG::_(true, true, "activeServicesByType", $activeServicesByType, __CLASS__, __FUNCTION__, __LINE__);
  669. }
  670. // aktualny status klienta
  671. echo'<div>';
  672. if ($user->A_STATUS_UPDATE_DATE < date("Y-m-d")) {
  673. }
  674. else {
  675. switch ($user->A_STATUS) {
  676. case 'WAITING': {
  677. echo'<p>' . "Status OK" . '</p>';
  678. }
  679. break;
  680. case 'wezwanie1': {
  681. $default_PAY_TERM = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  682. $frm_errors = array();
  683. $frm_msgs = array();
  684. $frm = array();
  685. $frm['wezwanie1_DATE'] = date("Y-m-d");
  686. $frm['PAY_TERM'] = V::get('PAY_TERM', $default_PAY_TERM, $_POST);
  687. $frm['ID_PROJ'] = V::get('ID_PROJ', 0, $_POST, 'int');
  688. if ('set_wezwanie' == V::get('user_task', '', $_POST)) {
  689. if ($frm['ID_PROJ'] == 0) {
  690. $frm_errors[] = "Brak numeru ID Projketu";
  691. }
  692. if (empty($frm_errors)) {
  693. $ret = Windykacja_StatsHelper::update_user($user, $frm);
  694. if ($ret) {
  695. $frm_msgs[] = "Status klienta został zaktualizowany";
  696. } else {
  697. $frm_errors[] = "Status klienta nie został zaktualizowany";
  698. }
  699. }
  700. }
  701. echo '<div class="box box-blue" style="margin:6px 0;">';
  702. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO <= -0.05) {
  703. echo "Saldo klienta: " . '<b style="color:#f00">' . "{$user->PAY_SALDO} zł" . '</b>' . " ({$user->PAY_FVAT} niezapłaconych faktur)" . '<br />';
  704. echo'<br />';
  705. }
  706. echo '<b style="color:#0B0B8E">'."Wysłać wezwanie do zapłaty".'</b>'.'<br />';
  707. if (!empty($frm_errors)) {
  708. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  709. }
  710. if (!empty($frm_msgs)) {
  711. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  712. }
  713. echo'<form action="" method="post">';
  714. echo'<input type="hidden" name="'."user_task".'" value="'."set_wezwanie".'" />';
  715. echo "Data płatności: ";
  716. echo'<input type="text" name="'."PAY_TERM".'" value="'.$frm['PAY_TERM'].'" />';
  717. echo " ID Projektu (np. 335 - klienci BIALL-NET lub 4956 - klienci Vectra): ";
  718. echo'<input type="text" name="'."ID_PROJ".'" value="'.$frm['ID_PROJ'].'" />';
  719. echo'<input type="submit" value="'."Zapisz".'" />';
  720. echo'</form>';
  721. if ($user->wezwanie1_DATE != '0000-00-00') {
  722. echo'<br />';
  723. $ico_print = '<img src="icon/print.gif" height="16" />';
  724. echo'<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."wezwanie"."&user_id=".$user->ID.'" target="_blank">'.$ico_print." wezwanie do zapłaty".'</a>';
  725. }
  726. echo '</div>';// .box-blue
  727. }
  728. break;
  729. case 'waiting-wezwanie2': {// TODO: only auto update ?
  730. echo '<div class="box box-blue" style="margin:6px 0;">';
  731. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO <= -0.05) {
  732. echo "Saldo klienta: " . '<b style="color:#f00">' . $user->PAY_SALDO . " zł" . '</b>' . " (" . $user->PAY_FVAT ." niezapłaconych faktur)" . '<br />';
  733. echo'<br />';
  734. }
  735. echo '<b style="color:#0B0B8E">'."Oczekiwanie na uzbieranie kwoty 300zł (firmy 500zł)".'</b>'.'<br />';
  736. if (!empty($frm_errors)) {
  737. echo'<p style="color:#f00">';
  738. echo implode('<br />', $frm_errors);
  739. echo'</p>';
  740. }
  741. echo'<form action="" method="post">';
  742. // echo'<input type="hidden" name="'."user_task".'" value="'."set_".'" />';
  743. // echo'<input type="submit" value="'."Zapisz".'" />';
  744. echo'</form>';
  745. if ($user->wezwanie1_DATE != '0000-00-00') {
  746. echo'<br />';
  747. $ico_print = '<img src="icon/print.gif" height="16" />';
  748. echo'<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."wezwanie"."&user_id=".$user->ID.'" target="_blank">' . $ico_print . " wezwanie do zapłaty".'</a>'.'<em>'." (termin płatności: " . $user->PAY_TERM . ")".'</em>';
  749. }
  750. echo '</div>';// .box-blue
  751. }
  752. break;
  753. case 'wezwanie2': {
  754. $default_PAY_TERM = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  755. $frm_msgs = array();
  756. $frm_errors = array();
  757. $frm = array();
  758. $frm['wezwanie2_DATE'] = date("Y-m-d");
  759. $frm['PAY_TERM'] = V::get('PAY_TERM', $default_PAY_TERM, $_POST);
  760. $frm['ID_PROJ'] = V::get('ID_PROJ', 0, $_POST, 'int');
  761. if ('set_wezwanie2' == V::get('user_task', '', $_POST)) {
  762. if ($frm['ID_PROJ'] == 0) {
  763. $frm_errors[] = "Brak numeru ID korespondencji";
  764. }
  765. if (empty($frm_errors)) {
  766. $ret = Windykacja_StatsHelper::update_user($user, $frm);
  767. if ($ret) {
  768. $frm_msgs[] = "Status klienta został zaktualizowany";
  769. } else {
  770. $frm_errors[] = "Status klienta nie został zaktualizowany";
  771. }
  772. }
  773. }
  774. echo '<div class="box box-blue" style="margin:6px 0;border-color:#666;">';
  775. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO <= -0.05) {
  776. echo "Saldo klienta: " . '<b style="color:#f00">' . "{$user->PAY_SALDO} zł" . '</b>' . " ({$user->PAY_FVAT} niezapłaconych faktur)" . '<br />';
  777. echo'<br />';
  778. }
  779. echo '<b style="color:#0B0B8E">'."Wysłać ostateczne wezwanie do zapłaty".'</b>'.'<br />';
  780. if (!empty($frm_errors)) {
  781. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  782. }
  783. if (!empty($frm_msgs)) {
  784. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  785. }
  786. echo'<form action="" method="post">';
  787. echo'<input type="hidden" name="'."user_task".'" value="'."set_wezwanie2".'" />';
  788. echo "Data płatności: ";
  789. echo'<input type="text" name="'."PAY_TERM".'" value="'.$frm['PAY_TERM'].'" />';
  790. echo " ID Projektu: ";
  791. echo'<input type="text" name="'."ID_PROJ".'" value="'.$frm['ID_PROJ'].'" />';
  792. echo'<input type="submit" value="'."Zapisz".'" />';
  793. echo'</form>';
  794. if ($user->wezwanie2_DATE != '0000-00-00') {
  795. echo'<br />';
  796. $ico_print = '<img src="icon/print.gif" height="16" />';
  797. echo'<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."wezwanie_ostateczne"."&user_id=".$user->ID.'" target="_blank">' . $ico_print . " ostateczne wezwanie do zapłaty".'</a>';
  798. }
  799. echo '</div>';// .box-blue
  800. }
  801. break;
  802. case 'waiting-krd': {
  803. if ($user->wezwanie2_DATE != '0000-00-00') {
  804. echo'<br />';
  805. $ico_print = '<img src="icon/print.gif" height="16" />';
  806. echo'<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."wezwanie_ostateczne"."&user_id=".$user->ID.'" target="_blank">' . $ico_print . " ostateczne wezwanie do zapłaty".'</a>';
  807. }
  808. }
  809. break;
  810. default:
  811. echo'<p>' . "TODO: (".$user->A_STATUS.")" . '</p>';
  812. }
  813. }
  814. //if ($user->BA_TIMESTAMP) {
  815. // echo "Stan wzajemnych rozrachunków:";
  816. // echo " WINIEN: <b>".$user->BA_WINIEN."</b> - MA: <b>".$user->BA_MA."</b> SALDO(DO ZAPŁATY): <b>".($user->BA_WINIEN - $user->BA_MA)."</b>";
  817. // echo", i jest to stan na dzień ".date("Y-m-d",$user->BA_TIMESTAMP)." ";
  818. //}
  819. // phone contact
  820. $phone_status_info = Windykacja_StatsHelper::get_phone_status_info($user);
  821. $sms_status_info = Windykacja_StatsHelper::get_sms_status_info($user);
  822. $mail_status_info = Windykacja_StatsHelper::get_mail_status_info($user);
  823. $frm_errors = array();
  824. $frm_msgs = array();
  825. if (1 == V::get('phone_contact_save', 0, $_POST, 'int')) {
  826. if ('' == ($phone_status = V::get('phone_status', '', $_POST))) {
  827. $frm_errors[] = "Nic nie zaznaczono!";
  828. } else {
  829. if (!array_key_exists($phone_status, $phone_status_info)) {
  830. $frm_errors[] = "Nieprawidłowa wartość!";
  831. } else {
  832. $ret = Windykacja_StatsHelper::update_phone_status($user, $phone_status);
  833. if ($ret) {
  834. $frm_msgs[] = "Dane zapisano pomyślnie";
  835. } else {
  836. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  837. }
  838. }
  839. }
  840. }
  841. if (1 == V::get('sms_contact_save', 0, $_POST, 'int')) {
  842. if ('' == ($sms_status = V::get('sms_status', '', $_POST))) {
  843. $frm_errors[] = "Nic nie zaznaczono!";
  844. } else {
  845. if (!array_key_exists($sms_status, $sms_status_info)) {
  846. $frm_errors[] = "Nieprawidłowa wartość!";
  847. } else {
  848. $ret = Windykacja_StatsHelper::update_sms_status($user, $sms_status);
  849. if ($ret) {
  850. $frm_msgs[] = "Dane zapisano pomyślnie";
  851. } else {
  852. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  853. }
  854. }
  855. }
  856. }
  857. if (1 == V::get('mail_contact_save', 0, $_POST, 'int')) {
  858. if ('' == ($mail_status = V::get('mail_status', '', $_POST))) {
  859. $frm_errors[] = "Nic nie zaznaczono!";
  860. } else {
  861. if (!array_key_exists($mail_status, $mail_status_info)) {
  862. $frm_errors[] = "Nieprawidłowa wartość!";
  863. } else {
  864. $ret = Windykacja_StatsHelper::update_mail_status($user, $mail_status);
  865. if ($ret) {
  866. $frm_msgs[] = "Dane zapisano pomyślnie";
  867. } else {
  868. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  869. }
  870. }
  871. }
  872. }
  873. // add old id_koresp to hist (events)
  874. if (1 == V::get('contact_add_id_koresp_save', 0, $_POST, 'int')) {
  875. if (($id_koresp = V::get('id_koresp', '', $_POST, 'int')) <= 0) {
  876. $frm_errors[] = "Nie podano numeru korespondencji!";
  877. } else {
  878. $koresp_type = V::get('koresp_type', '', $_POST);
  879. $ret = Windykacja_StatsHelper::update_old_id_koresp($user, $id_koresp, $koresp_type);
  880. if ($ret) {
  881. $frm_msgs[] = "Dane zapisano pomyślnie";
  882. } else {
  883. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  884. }
  885. }
  886. }
  887. ?>
  888. <script type="text/javascript">
  889. function frm_kontakt_phone_submit_callback(frm){
  890. var len=frm.phone_status.length;
  891. var val='';
  892. for(var i=0; i < len; i++){
  893. if(frm.phone_status[i].checked){
  894. var val = frm.phone_status[i].value;
  895. }
  896. }
  897. if (val!='') {
  898. return true;
  899. } else {
  900. alert('Nic nie zaznaczono.');
  901. }
  902. return false;
  903. }
  904. function frm_kontakt_sms_submit_callback(frm){
  905. var len=frm.sms_status.length;
  906. var val='';
  907. if (!len && frm.sms_status.type && frm.sms_status.type == 'radio') {
  908. if (frm.sms_status.checked) {
  909. val = frm.sms_status[i].value;
  910. }
  911. } else {
  912. for(var i=0; i < len; i++){
  913. if(frm.sms_status[i].checked){
  914. var val = frm.sms_status[i].value;
  915. }
  916. }
  917. }
  918. if (val!='') {
  919. return true;
  920. } else {
  921. alert('Nic nie zaznaczono.');
  922. }
  923. return false;
  924. }
  925. function frm_kontakt_add_id_koresp(frm){
  926. var val=frm.id_koresp.value;
  927. if (val!='') {
  928. return true;
  929. } else {
  930. alert('Nie podano numeru korespondencji.');
  931. }
  932. return false;
  933. }
  934. </script>
  935. <div class="box" style="margin:6px 0;border-color:#666;">
  936. <?php if (!empty($frm_errors)) {
  937. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  938. }
  939. if (!empty($frm_msgs)) {
  940. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  941. }
  942. ?>
  943. <table cellspacing="0" cellpadding="0" border="0" class="tbl-td-top"><tr>
  944. <td style="padding:0 20px 0 0;color:blue;">
  945. <img src="icon/phone.png" alt="tel" />
  946. kontakt z klientem
  947. </td>
  948. <td style="padding:0 5px;text-align:right">
  949. <nobr>Co ustalono:</nobr>
  950. </td>
  951. <td style="min-width:300px;">
  952. <form action="" method="post" onsubmit="return frm_kontakt_phone_submit_callback(this);">
  953. <div id="kontakt-phone">
  954. <input type="hidden" name="phone_contact_save" value="1" />
  955. <?php foreach ($phone_status_info as $k_type => $v_info) {
  956. echo '<input type="radio" name="'."phone_status".'" value="' . $k_type . '" />'; echo " " . $v_info['label'] . " " . $v_info['date'] . '<br />';
  957. } ?>
  958. </div>
  959. <input type="submit" value="zapisz" />
  960. </form>
  961. </td>
  962. <td style="width:40px">
  963. </td>
  964. <td>
  965. <?php if (!empty($sms_status_info)) : ?>
  966. <form action="" method="post" onsubmit="return frm_kontakt_sms_submit_callback(this);">
  967. <div id="kontakt-sms">
  968. <input type="hidden" name="sms_contact_save" value="1" />
  969. <?php foreach ($sms_status_info as $k_type => $v_info) {
  970. echo '<input type="radio" name="'."sms_status".'" value="' . $k_type . '" />'; echo " {$v_info['label']}:<br> {$v_info['msg']}" . '<br />';
  971. } ?>
  972. </div>
  973. <input type="submit" value="wyślij" />
  974. </form>
  975. <?php endif; ?>
  976. </td>
  977. <td style="width:40px">
  978. </td>
  979. <td>
  980. <?php if (!empty($mail_status_info)) : ?>
  981. <form action="" method="post" onsubmit="return frm_kontakt_mail_submit_callback(this);">
  982. <div id="kontakt-mail">
  983. <input type="hidden" name="mail_contact_save" value="1" />
  984. <?php foreach ($mail_status_info as $k_type => $v_info) {
  985. echo '<input type="radio" name="'."mail_status".'" value="' . $k_type . '" />'; echo " {$v_info['label']}:<br> {$v_info['msg']}" . '<br />';
  986. } ?>
  987. </div>
  988. <input type="submit" value="wyślij" />
  989. </form>
  990. <?php endif; ?>
  991. </td>
  992. </tr></table>
  993. </div>
  994. <div class="box" style="margin:6px 0;border-color:#666;">
  995. <form action="" method="post" onsubmit="return frm_kontakt_add_id_koresp(this);">
  996. <input type="hidden" name="contact_add_id_koresp_save" value="1" />
  997. Dodaj korespondencję z klientem - ID_KORESP:
  998. <input type="text" name="id_koresp" value="" class="i" />
  999. <input type="submit" value="zapisz" />
  1000. </form>
  1001. </div>
  1002. <div class="box" style="margin:6px 0;border-color:#666;">
  1003. <?php
  1004. $ico_print = '<img src="icon/print.gif" height="16" />';
  1005. echo '<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."bok_rozwiazanie_umowy"."&user_id=".$user->ID.'" target="_blank">' . $ico_print . " rozwiązanie umowy".'</a>';
  1006. ?>
  1007. </div>
  1008. </div>
  1009. <?php
  1010. }
  1011. public static function items_filters() {
  1012. $filter_arr = Windykacja_StatsHelper::get_filters();
  1013. $filter_selected = Windykacja_StatsHelper::get_filter_selected();
  1014. $status_cnt = Windykacja_StatsHelper::get_status_count();// {cnt, suma_zaleglosci}
  1015. // pomin filtry
  1016. unset($filter_arr['15']);
  1017. unset($filter_arr['blokada']);
  1018. unset($filter_arr['WAITING']);
  1019. $sub_filters = array('tel1', 'bad_address', '3 m-ce przed', 'po-terminie', 'has_nr_sad', 'has_nr_komornik', 'has_ustalenia', 'sad_and_komornik', 'sad_bez_komornik', 'isMovedToVectra');
  1020. $sub_filters_arr = array();
  1021. foreach ($sub_filters as $v_filter_name) {
  1022. if (array_key_exists($v_filter_name, $filter_arr)) {
  1023. $sub_filters_arr[$v_filter_name] = $filter_arr[$v_filter_name];
  1024. unset($filter_arr[$v_filter_name]);
  1025. }
  1026. }
  1027. $zewn_filters = array('waiting-sad', 'docs-in-sad', 'sad');
  1028. $zewn_filters_arr = array();
  1029. foreach ($zewn_filters as $v_filter_name) {
  1030. if (array_key_exists($v_filter_name, $filter_arr)) {
  1031. $zewn_filters_arr[$v_filter_name] = $filter_arr[$v_filter_name];
  1032. unset($filter_arr[$v_filter_name]);
  1033. }
  1034. }
  1035. echo'<table cellspacing="0" cellpadding="0" border="1" style="background:#ddd;border-color:#666;"><tr><td style="vertical-align:top">';
  1036. if (!empty($filter_selected)) {
  1037. echo'<a href="' . "??MENU_INIT=USERS2_WINDYKACJA_STATUS" . '" title="'."Kasuj filtry".'">' . '<img src="icon/del.png" height="16" alt="'."Kasuj filtry".'" />' . '</a>';
  1038. echo '</td><td>';
  1039. }
  1040. echo'<table class="tbl-view historia-platnosci-filters" cellspacing="0" cellpadding="0" border="1">';
  1041. echo'<thead>';
  1042. echo'<tr>';
  1043. foreach ($filter_arr as $k => $v_arr) {
  1044. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1045. echo'<td' . $cls . '>';
  1046. if ($desc = V::get('desc', '', $v_arr)) {
  1047. echo '<span title="' . end($desc) . '">' . reset($desc) . '</span>';
  1048. }
  1049. echo'</td>';
  1050. }
  1051. if (!empty($zewn_filters_arr)) {
  1052. echo '<td colspan="'.count($zewn_filters_arr).'" style="background:#f00;color:#fff;font-weight:bold;">' . "Windykacja zewnętrzna" . '</td>';
  1053. }
  1054. echo'</tr>';
  1055. echo'<tr>';
  1056. foreach ($filter_arr as $k => $v_arr) {
  1057. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1058. echo'<td' . $cls . '>';
  1059. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  1060. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  1061. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1062. $stat_cnt = 0;
  1063. if (array_key_exists($k, $status_cnt)) {
  1064. $stat_cnt = $status_cnt[$k]->cnt;
  1065. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1066. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  1067. echo '<br />' . '<span style="color:#f00;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  1068. } else {
  1069. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1070. }
  1071. echo'</td>';
  1072. }
  1073. if (!empty($zewn_filters_arr)) {
  1074. foreach ($zewn_filters_arr as $k => $v_arr) {
  1075. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1076. echo'<td' . $cls . '>';
  1077. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  1078. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  1079. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1080. $stat_cnt = 0;
  1081. if (array_key_exists($k, $status_cnt)) {
  1082. $stat_cnt = $status_cnt[$k]->cnt;
  1083. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1084. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  1085. echo '<br />' . '<span style="color:#f00;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  1086. } else {
  1087. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1088. }
  1089. echo'</td>';
  1090. }
  1091. }
  1092. echo'</tr>';
  1093. echo'</thead>';
  1094. echo'</table>';
  1095. if (!empty($sub_filters_arr)) {
  1096. echo '<table class="tbl-view historia-platnosci-subfilters" cellspacing="0" cellpadding="0" border="1">';
  1097. echo '<thead><tr>';
  1098. foreach ($sub_filters_arr as $k => $v_arr) {
  1099. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1100. echo'<td' . $cls . '>';
  1101. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  1102. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  1103. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1104. $stat_cnt = 0;
  1105. if (array_key_exists($k, $status_cnt)) {
  1106. $stat_cnt = $status_cnt[$k]->cnt;
  1107. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1108. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  1109. echo '<br />' . '<span style="color:#000;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  1110. } else {
  1111. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1112. }
  1113. echo'</td>';
  1114. }
  1115. echo '</tr></thead>';
  1116. echo '</table>';
  1117. }
  1118. echo '</td></tr></table>';
  1119. echo'<br />';
  1120. }
  1121. public static function items($q, &$page_nav, &$items) {
  1122. $page_nav->links = array();
  1123. $out_link_arr = V::copy($page_nav->base_link_arr);
  1124. $out_link_arr['_p'] = 0;
  1125. $out_link = V::make_link('', $out_link_arr);
  1126. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Pierwsza strona".'">'."|&lt;&lt;".'</a>';
  1127. if ($page_nav->page_nr > 0) {
  1128. $out_link_arr = V::copy($page_nav->base_link_arr);
  1129. $out_link_arr['_p'] = $page_nav->page_nr - 1;
  1130. $out_link = V::make_link('', $out_link_arr);
  1131. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Poprzednia strona".'">'."&lt;&lt; -{$page_nav->page_limit}".'</a>';
  1132. } else {
  1133. $page_nav->links[] = " &lt;&lt; ";
  1134. }
  1135. $page_nav->links[] = '<span>'.($page_nav->page_nr * $page_nav->page_limit).'</span>';
  1136. $page_nav->links[] = '<span title="'."Znaleziono ".$page_nav->total." rekordów".'">'."({$page_nav->total}) ".'</span>';
  1137. $out_link_arr = V::copy($page_nav->base_link_arr);
  1138. $out_link_arr['_p'] = $page_nav->page_nr + 1;
  1139. $out_link = V::make_link('', $out_link_arr);
  1140. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Nastepna strona".'">'."+{$page_nav->page_limit} &gt;&gt;".'</a>';
  1141. $out_link_arr = V::copy($page_nav->base_link_arr);
  1142. $out_link_arr['_p'] = $page_nav->last_page_nr;
  1143. $out_link = V::make_link('', $out_link_arr);
  1144. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Ostatnia strona".'">'."&gt;&gt;|".'</a>';
  1145. $page_nav_out = '<div class="tbl-page-nav">' . implode(" ", $page_nav->links);
  1146. $out_link_arr = V::copy($page_nav->base_link_arr);
  1147. $out_link_arr['task'] = 'export_csv';
  1148. $out_link_arr['HEADER_NOT_INIT'] = 'YES';
  1149. $out_link = V::make_link('', $out_link_arr);
  1150. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">export csv</a>';
  1151. $out_link_arr = V::copy($page_nav->base_link_arr);
  1152. $out_link_arr['task'] = 'send_mass_mail';
  1153. $out_link = V::make_link('', $out_link_arr);
  1154. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">send mail</a>';
  1155. $out_link_arr = V::copy($page_nav->base_link_arr);
  1156. $out_link_arr['task'] = 'send_mass_sms';
  1157. $out_link = V::make_link('', $out_link_arr);
  1158. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">send sms</a>';
  1159. $page_nav_out .= '</div>';
  1160. if (empty($items)) {
  1161. echo'<p style="color:red">'."Brak danych".'</p>';
  1162. return;
  1163. }
  1164. echo $page_nav_out;
  1165. $cols_order_by = Windykacja_StatsModel::get_order_by_fields();
  1166. $cols = array();
  1167. $cols['ID_BILLING_USERS'] = array('label'=>'Nr klienta', 'title'=>'ID_BILLING_USERS');
  1168. $cols['is_firma'] = array('label'=>'F', 'title'=>'is_firma: Firma 1 - tak, 0 nie');
  1169. $cols['BILLING_OWNER'] = array('label'=>'COM', 'title'=>'BILLING_OWNER: Klient firmy 1 - BIALL-NET, 2 - NETDAY');
  1170. $cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
  1171. $cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
  1172. $cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
  1173. $cols['P_ADDRESS_Koresp'] = array('label'=>'adres koresp.', 'title'=>'Adres do korespondencji');
  1174. $cols['P_PHONE'] = array('label'=>'nr telefonu', 'title'=>'P_PHONE');
  1175. $cols['user_mail_contact'] = array('label'=>'adres e-mail', 'title'=>'user_mail_contact');
  1176. $cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
  1177. $cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
  1178. $cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
  1179. $cols['PAY_SALDO_30_DNI'] = array('label'=>'saldo 30 dni', 'title'=>'Saldo bez faktur z terminem płatności < 30 dni');
  1180. $cols['PAY_SALDO_ISSUED'] = array('label'=>'saldo wystawione', 'title'=>'Saldo wg daty wystawienia faktur');
  1181. $cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
  1182. $cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności<br> pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
  1183. $cols['PAY_DATE'] = array('label'=>'data wymagalności<br> ostatniej faktury', 'title'=>'PAY_DATE');
  1184. $cols['LAST_FVAT_VALUE'] = array('label'=>'kwota ostatniej faktury', 'title'=>'LAST_FVAT_VALUE');
  1185. $cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
  1186. $cols['LAST_PAY_VALUE'] = array('label'=>'kwota ostatniej wpłaty', 'title'=>'LAST_PAY_VALUE');
  1187. $cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
  1188. $cols['IS_MOVED_TO_VECTRA'] = array('label'=>'Przeniesienie do Vectra?', 'title'=>'IS_MOVED_TO_VECTRA');
  1189. $cols['HAS_ACTIVE_NET'] = array('label'=>'NET', 'title'=>'Aktywne usługi NET');
  1190. $cols['HAS_ACTIVE_TV'] = array('label'=>'TV', 'title'=>'Aktywne uslugi TV');
  1191. echo'<table class="tbl-view historia-platnosci" border="1" cellspacing="0" cellpaddin="0">';
  1192. echo'<thead>';
  1193. echo'<tr>';
  1194. foreach ($cols as $k_field => $v_params) {
  1195. echo'<th' . ((!empty($v_params['title'])) ? ' title="' . $v_params['title'] . '"' : '') . '>';
  1196. echo $v_params['label'];
  1197. if (in_array($k_field, $cols_order_by)) {
  1198. $sel_oby = (isset($page_nav->base_link_arr['_oby']))? $page_nav->base_link_arr['_oby'] : '';
  1199. $sel_odir = 'DESC';
  1200. if ($k_field == $sel_oby) {
  1201. $sel_odir = (isset($page_nav->base_link_arr['_odir']))? $page_nav->base_link_arr['_odir'] : '';
  1202. $sel_odir = ($sel_odir == 'ASC')? 'ASC' : 'DESC';
  1203. }
  1204. $out_link_arr = V::copy($page_nav->base_link_arr);
  1205. $out_link_arr['_p'] = 0;
  1206. $out_link_arr['_oby'] = $k_field;
  1207. $out_link_arr['_odir'] = ($sel_odir == 'DESC')? 'ASC' : 'DESC';
  1208. $out_link = V::make_link('', $out_link_arr);
  1209. echo ' <a style="' . (($k_field == $sel_oby)? 'color:red;' : '') . 'text-decoration:none" href="' . $out_link . '">' . (($sel_odir == 'DESC')? 'v' : '^') . '</a>';
  1210. }
  1211. echo '</th>';
  1212. }
  1213. echo'</tr>';
  1214. echo'</thead>';
  1215. echo'<tbody>';
  1216. $t = 0;
  1217. foreach ($items as $k_id => $user) {
  1218. echo'<tr class="row-'.($t = 1 - $t).'">';
  1219. echo'<td>';
  1220. echo'<nobr>';
  1221. $out_link_arr = V::copy($page_nav->base_link_arr);
  1222. $out_link_arr['_user_id'] = $k_id;
  1223. $out_link = V::make_link('', $out_link_arr);
  1224. echo '<a href="' . $out_link . '">'.'<img src="icon/edit.png" height="16" alt="Edit">'.'</a>';
  1225. echo " ";
  1226. echo '<a href="' . $out_link . '">'.$k_id.'</a>';
  1227. echo'</nobr>';
  1228. echo'</td>';
  1229. echo '<td>';
  1230. echo $user->is_firma;
  1231. echo '</td>';
  1232. echo '<td>';
  1233. if ($user->BILLING_OWNER == 1) {
  1234. echo '<span title="' . "BIALL-NET" . '">' . 'BN' . '</span>';
  1235. } else if ($user->BILLING_OWNER == 2) {
  1236. echo '<span title="' . "NETDAY" . '">' . 'ND' . '</span>';
  1237. } else {
  1238. echo '0';
  1239. }
  1240. echo '</td>';
  1241. echo '<td>';
  1242. if ($user->STATUS == 9) {
  1243. echo '<b style="color:red" title="' . "ZABLOKOWANY" . '">' . "Z" . '</b>';
  1244. } else {
  1245. echo '<em style="color:silver" title="' . "brak blokady" . '">' . "0" . '</em>';
  1246. }
  1247. echo '</td>';
  1248. echo'<td style="white-space:nowrap;">';
  1249. $cell_out = $user->P_NAME.' '.$user->P_NAME_SECOND;
  1250. echo '<b title="' . $cell_out . '">' . ((strlen($cell_out) > 30)? substr($cell_out, 0, 30) . ' ...' : $cell_out) . '</b>';
  1251. echo'</td>';
  1252. echo'<td style="white-space:nowrap;'.(($user->BAD_ADDRESS)? 'background-color:#FF7878;' : '').'">';
  1253. $cell_out = "ul. " . $user->P_ADDRESS_STREET . " " . $user->P_ADDRESS_HOUSE . "/" . $user->P_ADDRESS_HOME . ", " . $user->P_ADDRESS_POST_CODE . " " . $user->P_ADDRESS_CITY;
  1254. echo '<i title="' . (($user->BAD_ADDRESS)? "błędny adres zameldowania: " : '') . $cell_out . '">' . ((strlen($cell_out) > 30)? mb_substr($cell_out, 0, 30, "UTF-8") . ' ...' : $cell_out) . '</i>';
  1255. echo'</td>';
  1256. ?>
  1257. <?php if ($user->P_ADRESS_KORESP_1282) : ?>
  1258. <td title="Adres do korespondencji: <?php echo $user->P_ADRESS_KORESP_1282; ?>">
  1259. <?php echo $user->P_ADRESS_KORESP_1282; ?>
  1260. </td>
  1261. <?php else: ?>
  1262. <td></td>
  1263. <?php endif; ?>
  1264. <?php
  1265. echo '<td>' . $user->P_PHONE . '</td>';
  1266. echo '<td>' . $user->user_mail_contact . '</td>';
  1267. echo'<td>';
  1268. echo '<nobr>';
  1269. switch ($user->A_STATUS) {
  1270. case 'WAITING':
  1271. echo '<span style="color:#666;">' . $user->A_STATUS . '</span>';
  1272. break;
  1273. default:
  1274. echo $user->A_STATUS;
  1275. }
  1276. echo '</nobr>';
  1277. echo'</td>';
  1278. echo'<td>';
  1279. if ($user->A_STATUS_UPDATE_DATE != '0000-00-00') {
  1280. echo $user->A_STATUS_UPDATE_DATE;
  1281. } else {
  1282. echo '<span style="color:#666;">' . $user->A_STATUS_UPDATE_DATE . '</span>';
  1283. }
  1284. echo'</td>';
  1285. echo'<td>';
  1286. echo '<nobr>';
  1287. if ($user->PAY_SALDO != 0) {
  1288. $col = ($user->PAY_SALDO > 0)? '#333' : '#f00';
  1289. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO} zł" . '</span>';
  1290. } else {
  1291. echo'<span style="color:#666">' . "0" . '</span>';
  1292. }
  1293. echo '</nobr>';
  1294. echo'</td>';
  1295. echo'<td>';
  1296. echo '<nobr>';
  1297. if ($user->PAY_SALDO_30_DNI != 0) {
  1298. $col = ($user->PAY_SALDO_30_DNI > 0)? '#333' : '#f00';
  1299. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO_30_DNI} zł" . '</span>';
  1300. } else {
  1301. echo'<span style="color:#666">' . "0" . '</span>';
  1302. }
  1303. echo '</nobr>';
  1304. echo'</td>';
  1305. echo'<td>';
  1306. echo '<nobr>';
  1307. if ($user->PAY_SALDO_ISSUED != 0) {
  1308. $col = ($user->PAY_SALDO_ISSUED > 0)? '#333' : '#f00';
  1309. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO_ISSUED} zł" . '</span>';
  1310. } else {
  1311. echo'<span style="color:#666">' . "0" . '</span>';
  1312. }
  1313. echo '</nobr>';
  1314. echo'</td>';
  1315. echo'<td>';
  1316. if ($user->PAY_FVAT > 0) {
  1317. $st = ($user->PAY_FVAT > 1)? ' style="color:#f00"' : '';
  1318. echo' <span title="' . "{$user->PAY_FVAT} nieopłaconych faktur" . '"'.$st.'>' . $user->PAY_FVAT . '</span>';
  1319. } else {
  1320. echo $user->PAY_FVAT;
  1321. }
  1322. echo'</td>';
  1323. echo'<td>';
  1324. if ($user->PAY_DATE_FIRST_FVAT != '0000-00-00') {
  1325. echo $user->PAY_DATE_FIRST_FVAT;
  1326. }
  1327. echo'</td>';
  1328. echo'<td>';
  1329. if ($user->PAY_DATE != '0000-00-00') {
  1330. echo $user->PAY_DATE;
  1331. }
  1332. echo'</td>';
  1333. echo'<td>';
  1334. echo $user->LAST_FVAT_VALUE;
  1335. echo'</td>';
  1336. echo'<td>';
  1337. if ($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00') {
  1338. echo $user->LAST_PAY_DATE;
  1339. } else {
  1340. echo '---';
  1341. }
  1342. echo'</td>';
  1343. echo'<td>';
  1344. echo $user->LAST_PAY_VALUE;
  1345. echo'</td>';
  1346. echo'<td>';
  1347. if ($user->PAY_TERM != '0000-00-00') {
  1348. echo $user->PAY_TERM;
  1349. }
  1350. echo'</td>';
  1351. echo'<td>';
  1352. if ($user->IS_MOVED_TO_VECTRA) {
  1353. echo 'TAK';
  1354. } else {
  1355. echo '<span class="text-muted">NIE</span>';
  1356. }
  1357. echo'</td>';
  1358. echo'<td>' . $user->HAS_ACTIVE_NET . '</td>';
  1359. echo'<td>' . $user->HAS_ACTIVE_TV . '</td>';
  1360. //, w.`USER_PAY_TERM_ADD`
  1361. //, w.`L_APPOITMENT_DATE`
  1362. //, w.`L_APPOITMENT_USER`
  1363. echo'</tr>';
  1364. }
  1365. echo'</tbody>';
  1366. echo'</table>';
  1367. echo $page_nav_out;
  1368. }
  1369. public static function export_csv($q, &$page_nav, &$items) {
  1370. if (empty($items)) {
  1371. echo "Brak danych";
  1372. return;
  1373. }
  1374. $activeFiltr = V::get('_f', 'all', $_GET);
  1375. $csvFileName = "Windykacja-{$activeFiltr}";
  1376. header('Content-Type: text/csv; charset=utf-8');
  1377. header("Content-Disposition: attachment; filename={$csvFileName}.csv");
  1378. $cols_order_by = Windykacja_StatsModel::get_order_by_fields();
  1379. $cols = array();
  1380. $cols['ID_BILLING_USERS'] = array('label'=>'Nr klienta', 'title'=>'ID_BILLING_USERS');
  1381. $cols['is_firma'] = array('label'=>'F', 'title'=>'is_firma: Firma 1 - tak, 0 nie');
  1382. $cols['BILLING_OWNER'] = array('label'=>'COM', 'title'=>'BILLING_OWNER: Klient firmy 1 - BIALL-NET, 2 - NETDAY');
  1383. $cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
  1384. $cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
  1385. $cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
  1386. $cols['P_ADDRESS_Koresp'] = array('label'=>'adres koresp.', 'title'=>'Adres do korespondencji');
  1387. $cols['P_PHONE'] = array('label'=>'nr telefonu', 'title'=>'P_PHONE');
  1388. $cols['user_mail_contact'] = array('label'=>'adres e-mail', 'title'=>'user_mail_contact');
  1389. $cols['P_PESEL'] = array('label'=>'pesel', 'title'=>'P_PESEL');
  1390. $cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
  1391. $cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
  1392. $cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
  1393. $cols['PAY_SALDO_30_DNI'] = array('label'=>'saldo 30 dni', 'title'=>'Saldo bez faktur z terminem płatności < 30 dni');
  1394. $cols['PAY_SALDO_ISSUED'] = array('label'=>'saldo wystawione', 'title'=>'Saldo wg daty wystawienia faktur');
  1395. $cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
  1396. $cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
  1397. $cols['PAY_DATE'] = array('label'=>'data wymagalności ostatniej faktury', 'title'=>'PAY_DATE');
  1398. $cols['LAST_FVAT_VALUE'] = array('label'=>'kwota ostatniej faktury', 'title'=>'LAST_FVAT_VALUE');
  1399. $cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
  1400. $cols['LAST_PAY_VALUE'] = array('label'=>'kwota ostatniej wpłaty', 'title'=>'LAST_PAY_VALUE');
  1401. $cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
  1402. $cols['ACCOUNT_NUMBER'] = array('label'=>'nr konta', 'title'=>'ACCOUNT_NUMBER');
  1403. $cols['SERVICES_STREETS'] = array('label'=>'adresy usług', 'title'=>'SERVICES_STREETS');
  1404. $cols['IS_MOVED_TO_VECTRA'] = array('label'=>'Przeniesienie do Vectra', 'title'=>'IS_MOVED_TO_VECTRA');
  1405. $cols['HAS_ACTIVE_NET'] = array('label'=>'NET', 'title'=>'Aktywne usługi NET');
  1406. $cols['HAS_ACTIVE_TV'] = array('label'=>'TV', 'title'=>'Aktywne uslugi TV');
  1407. $out_cols = array();
  1408. foreach ($cols as $k_field => $v_params) {
  1409. $out_cols[] = '"' . $v_params['label'] . '"';
  1410. }
  1411. echo implode(";", $out_cols) . "\n";
  1412. foreach ($items as $k_id => $user) {
  1413. $out_cols = array();
  1414. $out_cols[] = '"' . $k_id . '"';
  1415. $out_cols[] = '"' . $user->is_firma . '"';
  1416. if ($user->BILLING_OWNER == 1) {
  1417. $out_cols[] = '"' . 'BN' . '"';
  1418. } else if ($user->BILLING_OWNER == 2) {
  1419. $out_cols[] = '"' . 'ND' . '"';
  1420. } else {
  1421. $out_cols[] = '"' . '0' . '"';
  1422. }
  1423. $out_cols[] = '"' . (($user->STATUS == 9)? "Z" : "0") . '"';
  1424. $out_cols[] = '"' . $user->P_NAME.' '.$user->P_NAME_SECOND . '"';
  1425. $out_cols[] = '"' . "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}" . '"';
  1426. if ($user->P_ADRESS_KORESP_1282) {
  1427. $out_cols[] = '"' . $user->P_ADRESS_KORESP_1282 . '"';
  1428. } else {
  1429. $out_cols[] = '""';
  1430. }
  1431. $out_cols[] = '"' . $user->P_PHONE . '"';
  1432. $out_cols[] = '"' . $user->user_mail_contact . '"';
  1433. $out_cols[] = '"' . $user->P_PESEL . '"';
  1434. $out_cols[] = '"' . $user->A_STATUS . '"';
  1435. $out_cols[] = '"' . $user->A_STATUS_UPDATE_DATE . '"';
  1436. $out_cols[] = '"' . (($user->PAY_SALDO != 0)? "{$user->PAY_SALDO} zł" : "0") . '"';
  1437. $out_cols[] = '"' . (($user->PAY_SALDO_30_DNI != 0)? "{$user->PAY_SALDO_30_DNI} zł" : "0") . '"';
  1438. $out_cols[] = '"' . (($user->PAY_SALDO_ISSUED != 0)? "{$user->PAY_SALDO_ISSUED} zł" : "0") . '"';
  1439. $out_cols[] = '"' . $user->PAY_FVAT . '"';
  1440. $out_cols[] = '"' . (($user->PAY_DATE_FIRST_FVAT != '0000-00-00')? $user->PAY_DATE_FIRST_FVAT : '') . '"';
  1441. $out_cols[] = '"' . (($user->PAY_DATE != '0000-00-00')? $user->PAY_DATE : '') . '"';
  1442. $out_cols[] = '"' . $user->LAST_FVAT_VALUE . '"';
  1443. $out_cols[] = '"' . (($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00')? $user->LAST_PAY_DATE : '---') . '"';
  1444. $out_cols[] = '"' . $user->LAST_PAY_VALUE . '"';
  1445. $out_cols[] = '"' . (($user->PAY_TERM != '0000-00-00')? $user->PAY_TERM : '') . '"';
  1446. $out_cols[] = '"' . $user->ACCOUNT_NUMBER . '"';
  1447. $out_cols[] = '"' . $user->SERVICES_STREETS . '"';
  1448. $out_cols[] = '"' . (($user->IS_MOVED_TO_VECTRA)? 'TAK' : 'NIE') . '"';
  1449. $out_cols[] = '"' . $user->HAS_ACTIVE_NET . '"';
  1450. $out_cols[] = '"' . $user->HAS_ACTIVE_TV . '"';
  1451. echo implode(";", $out_cols) . "\n";
  1452. }
  1453. }
  1454. public static function form($q = '') {
  1455. SEF("MENU");
  1456. MENU();
  1457. echo'<div class="box box-blue">';
  1458. echo'<form action="" method="get">';
  1459. echo'<input type="hidden" name="'."MENU_INIT".'" value="'."USERS2_WINDYKACJA_STATUS".'" />';
  1460. echo'<p style="margin:0;">'."Wyszukaj klienta: ";
  1461. echo'<input type="text" name="'."q".'" value="'.htmlspecialchars($q).'" />';
  1462. echo " ".'<em>'."(imie, nazwisko lub numer klineta)".'</em>';//, adres
  1463. echo " ".'<input type="submit" value="'."szukaj".'" />';
  1464. echo'</p>';
  1465. echo'</form>';
  1466. echo'</div>';// .box-blue
  1467. }
  1468. public static function css() {
  1469. echo'<style type="text/css">'."
  1470. body{font-family:arial;line-height:1.4;}
  1471. .box{border:1px solid #999;padding:5px;margin:5px;}
  1472. .box-center{border:1px solid #999;padding:5px;margin:5px auto;}
  1473. .box-silver{border-color:#999;}
  1474. .box-red{border-color:#f00;}
  1475. .box-blue{border-color:#00f;}
  1476. .box-green{border-color:#008000;}
  1477. .box-hover-active{background:#fff;border-color:#999;}
  1478. .box-hover-active:hover{background:#eee;border-color:#000;}
  1479. .btn-box{margin:0 2px 0 0;padding:0 3px;background:#bbb;color:#fff;text-decoration:none;border:0;font-weight:bold;}
  1480. .tbl-page-nav{font-size:small;}
  1481. .tbl-page-nav a{font-size:small; text-decoration:none;}
  1482. .tbl-page-nav a:hover{background-color:#eee;}
  1483. .tbl-view {margin:0;font-size:small;}
  1484. .tbl-view caption{text-align:left;font-style:italic;font-size:medium;}
  1485. .tbl-view caption em{padding:0 5px;font-size:13px;font-style:normal;}
  1486. .tbl-view th{padding:0 3px;font-size:small;}
  1487. .tbl-view td{padding:0 3px;}
  1488. .tbl-view .r{text-align:right;}
  1489. .tbl-view thead th {background:#F3F3F3;}
  1490. .tbl-view thead td {background:#F3F3F3;}
  1491. .historia-platnosci-filters thead td{text-align:center;}
  1492. .historia-platnosci-filters td.selected {background-color:#FFE6E9;}
  1493. .historia-platnosci-filters td:hover {background-color:#E6FFE6;}
  1494. .historia-platnosci-subfilters thead td{text-align:center;background:#fff;}
  1495. .historia-platnosci-subfilters td.selected {background-color:#FFE6E9;}
  1496. .historia-platnosci-subfilters td:hover {background-color:#E6FFE6;}
  1497. .tbl-td-top th,
  1498. .tbl-td-top td {vertical-align:top;}
  1499. ".'</style>';
  1500. }
  1501. public static function user_umowy(&$user) {
  1502. Lib::loadClass('Tree');
  1503. Lib::loadClass('TreeHelper');
  1504. // build tree by P_ID - array or 0
  1505. function Tree_Helper__create_tree_rec($p_id, &$items) {
  1506. static $rec_ind;
  1507. $rec_ind++;
  1508. $ret = array();
  1509. if (!array_key_exists($p_id, $items)) {
  1510. return false;
  1511. } else {
  1512. $r = $items[$p_id];
  1513. if (empty($r->sub)) {
  1514. return false;
  1515. }
  1516. foreach ($r->sub as $k_id => $v) {
  1517. $ret[$k_id] = Tree_Helper__create_tree_rec($k_id, $items);
  1518. }
  1519. return $ret;
  1520. }
  1521. }
  1522. function tree_callback__show_item_from_SERVICES(&$r, &$tree) {
  1523. $cls = array();
  1524. $cls[] = 'HANGUP_STATUS-' . $r->HANGUP_STATUS;
  1525. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  1526. echo'<dl'.$cls.'>';
  1527. echo'<dt>';
  1528. $out_id = ($r->ID < 10)? '&nbsp;'.$r->ID.'' : $r->ID;
  1529. echo'<b class="item_id btn-box">'.$out_id.'</b>';
  1530. //echo'<a href="'."?MENU_INIT=IN7_MK_BAZA_DYSTRYBUCJI_EDIT&ARG1=EDIT&ARG1_VAL=".$r->ID.'" class="btn" title="'."Edit".'">'."E".'</a>';
  1531. $st_status_bg = '';
  1532. if ($r->A_STATUS == 'NORMAL') {
  1533. $st_status_bg = '#8F8;';
  1534. } else if ($r->A_STATUS == 'WAITING') {
  1535. $st_status_bg = '#F8F;';
  1536. } else if ($r->A_STATUS == 'DELETED') {
  1537. $st_status_bg = '#ccc;';
  1538. } else if ($r->A_STATUS == 'OFF_SOFT') {
  1539. $st_status_bg = '#F99;';
  1540. } else if ($r->A_STATUS == 'OFF_HARD') {
  1541. $st_status_bg = '#eee;';
  1542. }
  1543. $st_status_bg = ($st_status_bg)? 'background-color:'.$st_status_bg : '';
  1544. echo'<span class="desc">';
  1545. echo'<span class="btn-box" style="'.$st_status_bg.'">'.$r->A_STATUS.'</span>';
  1546. echo' <b style="color:#333;">'.$r->description.'</b>';
  1547. if ($r->ID_OFFERS) {
  1548. echo' <code>' . "(Nr oferty: {$r->ID_OFFERS})" . '</code>';
  1549. } else {
  1550. echo' <span style="color:#f00">'."Brak numeru oferty!".'</span>';
  1551. }
  1552. $st_status_bg = '';
  1553. if ($r->HANGUP_STATUS == 'NORMAL') {
  1554. $st_status_bg = 'background-color:#8F8;';
  1555. } else if ($r->HANGUP_STATUS == 'WAITING') {
  1556. $st_status_bg = 'background-color:#F8F;';
  1557. } else if ($r->HANGUP_STATUS == 'DELETED') {
  1558. $st_status_bg = 'background-color:#ccc;';
  1559. } else if ($r->HANGUP_STATUS == 'OFF_SOFT') {
  1560. $st_status_bg = 'background-color:#F99;';
  1561. } else if ($r->HANGUP_STATUS == 'OFF_HARD') {
  1562. $st_status_bg = 'background-color:#f00;color:#fff;';
  1563. }
  1564. echo ' <span class="btn-box" style="' . $st_status_bg . '">' . "{$r->HANGUP_STATUS} ({$r->HANGUP_FROM} - {$r->HANGUP_TILL}) - {$r->A_STATUS_DESC}" .'</span>';
  1565. echo'</span>';
  1566. echo'</dt>';
  1567. echo'</dl>'."\n";
  1568. }
  1569. $uslugi_l2 = Windykacja_StatsModel::get_uslugi_from_l2($user);
  1570. $umowy_l2 = Windykacja_StatsModel::getClientUmowy($user->ID);
  1571. $uslugi_l2_nieprzypisane = array();
  1572. foreach ($uslugi_l2 as $k_id => $h) {
  1573. $uslugi_l2_nieprzypisane[$k_id] = true;
  1574. }
  1575. if (is_array($umowy_l2) && !empty($umowy_l2)) {
  1576. if (is_array($uslugi_l2) && !empty($uslugi_l2)) {
  1577. foreach ($umowy_l2 as $k_umowa_ind => $h_umowa) {
  1578. $umowy_l2[$k_umowa_ind]['uslugi'] = array();
  1579. foreach ($uslugi_l2 as $k_id => $h_usluga) {
  1580. if ($h_usluga['ID_DEALS_TABLE'] == $h_umowa['ID']) {
  1581. $umowy_l2[$k_umowa_ind]['uslugi'][$k_id] = $h_usluga;
  1582. if (isset($uslugi_l2_nieprzypisane[$k_id])) unset($uslugi_l2_nieprzypisane[$k_id]);
  1583. }
  1584. }
  1585. }
  1586. }
  1587. }
  1588. echo'<style type="text/css">'."
  1589. .tbl-umowy-l2 .umowa-id{font-weight:bold;font-size:big;font-family:arial;}
  1590. .tbl-umowy-l2 .row-umowa td{border-top:2px solid #00f;}
  1591. .wind-status-old td,
  1592. .wind-status-old th {color:#666;}
  1593. ".'</style>';
  1594. $ARGS['ZAPISZ'] = true;
  1595. Lay_Html_Toggle::start("Aktualne umowy i usługi ", array('open'=>(($ARGS['ZAPISZ'])? false : true)));
  1596. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2: ';print_r($umowy_l2);echo'</pre>';
  1597. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1598. //echo'<caption>'."Aktualne umowy".'<em>'." (l2)".'</em>'.'</caption>';
  1599. if ($umowy_l2 == -1) {
  1600. echo'<tr><td>';
  1601. echo'<span style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</span>';
  1602. echo'</td></tr>';
  1603. } else if (empty($umowy_l2)) {
  1604. echo'<tr><td>'."Brak umów.".'</td></tr>';
  1605. }
  1606. else {
  1607. $tbl_umowy_cols = 5;
  1608. echo'<thead>';
  1609. echo'<tr>';
  1610. echo'<th>'."Nr umowy".'</th>';
  1611. echo'<th>'."Prefix".'</th>';
  1612. echo'<th>'."Data umowy".'</th>';
  1613. echo'<th>'."Termin".'</th>';
  1614. echo'<th>'."".'</th>';
  1615. echo'</tr>';
  1616. echo'</thead>';
  1617. $t = 0;
  1618. foreach ($umowy_l2 as $h) {
  1619. echo'<tr class="row-umowa row-'.($t = 1 - $t).'">';
  1620. echo'<td class="r umowa-id">' . $h['P_DEALNUMBER'] . '</td>';
  1621. echo'<td>' . $h['P_DEALPREFIX'] . '</td>';
  1622. echo'<td class="r">' . $h['P_DEALDATE'] . '</td>';
  1623. echo'<td class="r">' . $h['P_DEALDATE_TERM'] . '</td>';
  1624. echo'<td>';
  1625. if ($h['Wcześniejszy Nr umowy']) echo "Wcześniejszy Nr umowy: ".$h['Wcześniejszy Nr umowy'].'<br />';// TODO: Undefined index
  1626. if ($h['DEALDESC']) echo "Notatki: ".$h['DEALDESC'].'<br />';
  1627. echo "Koniecznosc podpisania aneksu lub innego dokumentu: ".$h['ANEX_NEEDED'].'<br />';
  1628. echo "Data potwierdzenia podpisania aneksu/dokumentu: ".$h['ANEX_CONFIRM_DATE'].'<br />';
  1629. echo'</td>';
  1630. echo'</tr>';
  1631. if (!empty($h['uslugi'])) {
  1632. // TODO: make TREE by P_ID_SERVICES
  1633. $items = array();
  1634. foreach ($h['uslugi'] as $k_id_usluga => $h_suluga) {
  1635. $h_suluga['sub'] = array();
  1636. $items[$k_id_usluga] = (object)$h_suluga;
  1637. }
  1638. $uslugi_tree = array();// tree root
  1639. foreach ($items as $k_id => $r) {
  1640. if ($r->P_ID == 0) {
  1641. $uslugi_tree[$r->ID] = array();
  1642. if (array_key_exists($r->P_ID, $items)) {
  1643. $items[$r->P_ID]->sub[$r->ID] = true;
  1644. }
  1645. } else {// array
  1646. if (array_key_exists($r->P_ID, $items)) {
  1647. $items[$r->P_ID]->sub[$r->ID] = true;
  1648. }
  1649. }
  1650. }
  1651. ksort($uslugi_tree);
  1652. // set up has_childrens
  1653. foreach ($items as $k_id => $r) {
  1654. $items[$k_id]->has_childrens = !empty($r->sub);
  1655. }
  1656. foreach ($uslugi_tree as $k_id => $v_childrens) {
  1657. if (array_key_exists($k_id, $items)) {
  1658. $uslugi_tree[$k_id] = Tree_Helper__create_tree_rec($k_id, $items);
  1659. }
  1660. }
  1661. echo'<tr class="row-'.($t).'">';
  1662. echo'<td>'."&nbsp;".'</td>';
  1663. echo'<td colspan="'.($tbl_umowy_cols - 1).'" style="padding:0;">';
  1664. $tree = new Tree('SERVICES');
  1665. $tree->set_parent_id_col('P_ID');
  1666. $tree->set_param('show_item_callback', "tree_callback__show_item_from_SERVICES");
  1667. $tree->set_param('ajax', "NIE");
  1668. $tree->set_param('rozwin', true);
  1669. $tree->show_css();
  1670. $tree->show_js();
  1671. $_COOKIE[$tree->cookie_name] = implode(' ', array_keys($items));
  1672. echo "\n".'<div class="tree-wrap">'."\n";
  1673. $tree->show_rec_by_tree($uslugi_tree, $items);
  1674. echo '</div>'."\n";
  1675. echo'</td>';
  1676. echo'</tr>';
  1677. }
  1678. }
  1679. }
  1680. echo'</table>';
  1681. if (!empty($uslugi_l2_nieprzypisane)) {
  1682. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1683. echo'<caption>'."Nieprzypisane usługi".'<em>'." (l2)".'</em>'.'</caption>';
  1684. echo'<head>';
  1685. echo'<tr>';
  1686. echo'<th>'."ID".'</th>';
  1687. echo'<th>'."usługa".'</th>';
  1688. echo'<th>'."status".'</th>';
  1689. echo'<th>'."nr umowy".'</th>';
  1690. echo'<th>'."id oferty".'</th>';
  1691. echo'</tr>';
  1692. echo'</head>';
  1693. foreach ($uslugi_l2_nieprzypisane as $k_id => $v_bool) {
  1694. $h_usluga = $uslugi_l2[$k_id];
  1695. echo'<tr>';
  1696. echo'<td class="r">' . $h_usluga['ID'] . '</td>';
  1697. echo'<td>' . $h_usluga['description'] . '</td>';
  1698. echo'<td>' . $h_usluga['A_STATUS_DESC'] . '</td>';
  1699. echo'<td class="r">' . '<b>';
  1700. if (array_key_exists($h['ID_DEALS_TABLE'], $umowy_l2)) {
  1701. echo $umowy_l2[$h['ID_DEALS_TABLE']]['P_DEALNUMBER'];
  1702. } else {
  1703. //TODO: get P_DEALNUMBER from DEALS_TABLE where ID = $h['ID_DEALS_TABLE']
  1704. }
  1705. echo'</b>' . '</td>';
  1706. echo'<td class="r">';
  1707. if ($h_usluga['ID_OFFERS']) {
  1708. echo'<code>' . $h_usluga['ID_OFFERS'] . '</code>';
  1709. } else {
  1710. echo'<span style="color:#f00">'."Brak!".'</span>';
  1711. }
  1712. echo'</td>';
  1713. echo'</tr>';
  1714. }
  1715. echo'</table>';
  1716. }
  1717. Lay_Html_Toggle::end();
  1718. $umowy_l3 = Windykacja_StatsModel::get_umowy_from_l3($user);
  1719. $ARGS['ZAPISZ'] = true;
  1720. Lay_Html_Toggle::start("Aktualne usługi".'<em>'." (l3)".'</em>', array('open'=>(($ARGS['ZAPISZ'])? false : true)));
  1721. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l3: ';print_r($umowy_l3);echo'</pre>';
  1722. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1723. if (empty($umowy_l3)) {
  1724. echo'<tr><td>'."Brak usług.".'</td></tr>';
  1725. }
  1726. else {
  1727. echo'<thead>';
  1728. echo'<tr>';
  1729. echo'<th rowspan="2">'."ID".'</th>';
  1730. echo'<th rowspan="2">'."status".'</th>';
  1731. echo'<th rowspan="2">'."data dok".'</th>';
  1732. echo'<th rowspan="2">'."adres".'</th>';
  1733. echo'<th rowspan="2">'."usługa".'</th>';
  1734. echo'<th rowspan="2">'."S_OTHER_INFO".'</th>';
  1735. echo'<th colspan="2" title="'."ID_BILLING_USERS".'">'. "nr klienta" .'</th>';
  1736. echo'<th colspan="2" title="'."ID_SERVICES".'">'."nr usługi".'</th>';
  1737. echo'<th colspan="2" title="'."P_OFFER_ID".'">'."nr oferty".'</th>';
  1738. echo'<th colspan="2" title="'."P_DEAL_DATE".'">'."data umowy".'</th>';
  1739. echo'<th colspan="2">'."nr umowy".'</th>';
  1740. echo'<th colspan="2">'."termin umowy".'</th>';
  1741. echo'<th colspan="2" title="'."MONTH COST".'">'."abonament".'</th>';
  1742. echo'<th rowspan="2">'."INICJALY HANDLOWCA".'</th>';
  1743. echo'<th rowspan="2">'."RODZAJ DZIALANIA HANDLOWEGO".'</th>';
  1744. echo'</tr>';
  1745. echo'<tr>';
  1746. echo'<td>'."OLD".'</td>';
  1747. echo'<td>'."NEW".'</td>';
  1748. echo'<td>'."OLD".'</td>';
  1749. echo'<td>'."NEW".'</td>';
  1750. echo'<td>'."OLD".'</td>';
  1751. echo'<td>'."NEW".'</td>';
  1752. echo'<td>'."OLD".'</td>';
  1753. echo'<td>'."NEW".'</td>';
  1754. echo'<td>'."OLD".'</td>';
  1755. echo'<td>'."NEW".'</td>';
  1756. echo'<td>'."OLD".'</td>';
  1757. echo'<td>'."NEW".'</td>';
  1758. echo'<td>'."OLD".'</td>';
  1759. echo'<td>'."NEW".'</td>';
  1760. echo'</tr>';
  1761. echo'</thead>';
  1762. foreach ($umowy_l3 as $h) {
  1763. echo'<tr>';
  1764. echo'<td>' . $h['ID'] . '</td>';
  1765. echo'<td>' . $h['A_STATUS'] . '</td>';
  1766. echo'<td>' . '<nobr>' . $h['DATA_DOK'] . '</nobr>' . '</td>';
  1767. echo'<td>' . $h['S_ADDRESS_STREET'] . '</td>';
  1768. echo'<td>' . '<b>' . $h['P_SERVICE'] . '</b>' . '</td>';
  1769. echo'<td>' . $h['S_OTHER_INFO'] . '</td>';
  1770. echo'<td>' . $h['ID_BILLING_USERS_OLD'] . '</td>';
  1771. echo'<td>' . $h['ID_BILLING_USERS_NEW'] . '</td>';
  1772. echo'<td>' . $h['ID_SERVICES_OLD'] . '</td>';
  1773. echo'<td>' . $h['ID_SERVICES_NEW'] . '</td>';
  1774. echo'<td>' . $h['P_OFFER_ID_OLD'] . '</td>';
  1775. echo'<td>' . $h['P_OFFER_ID_NEW'] . '</td>';
  1776. echo'<td>' . '<nobr>' . $h['P_DEAL_DATE_OLD'] . '</nobr>' . '</td>';
  1777. echo'<td>' . '<nobr>' . $h['P_DEAL_DATE_NEW'] . '</nobr>' . '</td>';
  1778. echo'<td>' . $h['P_DEALNUMBER_OLD'] . '</td>';
  1779. echo'<td>' . $h['P_DEALNUMBER_NEW'] . '</td>';
  1780. echo'<td>' . '<nobr>' . $h['P_DEALTERM_OLD'] . '</nobr>' . '</td>';
  1781. echo'<td>' . '<nobr>' . $h['P_DEALTERM_NEW'] . '</nobr>' . '</td>';
  1782. echo'<td>' . $h['MONTH_COST_OLD'] . '</td>';
  1783. echo'<td>' . $h['MONTH_COST_NEW'] . '</td>';
  1784. echo'<td>' . $h['INICJALY_HANDLOWCA'] . '</td>';
  1785. echo'<td>' . $h['RODZAJ_DZIALANIA_HANDLOWEGO'] . '</td>';
  1786. echo'</tr>';
  1787. }
  1788. }
  1789. echo'</table>';
  1790. Lay_Html_Toggle::end();
  1791. }
  1792. public static function user_historia_platnosci(&$user) { // TODO: mv to UserContact::viewUserPaymentContactsHistory
  1793. ?>
  1794. <style type="text/css">
  1795. .hide .to-hide{display:none;}
  1796. .may-hide .btn-hide{display:inline;padding:0 5px;border:1px solid #bbb;}
  1797. .may-hide .btn-show{display:none;padding:0 5px;border:1px solid #bbb;}
  1798. .hide .btn-hide{display:none;}
  1799. .hide .btn-show{display:inline;}
  1800. </style>
  1801. <?php
  1802. Lay_Html_Toggle::show_js();
  1803. $billing_docs = Windykacja_StatsModel::getBillDocsByDate($user->ID);
  1804. // add events
  1805. $umowy_l2 = Windykacja_StatsModel::getClientUmowy($user->ID);
  1806. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_docs ';print_r($billing_docs);echo'</pre>';
  1807. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_docs ';print_r(reset($billing_docs));echo'</pre>';
  1808. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2 ';print_r($umowy_l2);echo'</pre>';
  1809. if (!empty($umowy_l2)) {
  1810. foreach ($umowy_l2 as $h) {
  1811. $billing_docs->add_event($h['P_DEALDATE'], 'UMOWA', $h);
  1812. if ($h['P_DEALDATE_TERM'] != '0000-00-00') {// < date('Y-m-d')) {
  1813. $billing_docs->add_event($h['P_DEALDATE_TERM'], 'KONIEC UMOWY', $h);
  1814. }
  1815. }
  1816. }
  1817. $user_hist_events = Windykacja_StatsHelper::getUserHistStatusEvents($user->ID);
  1818. if (!empty($user_hist_events)) {
  1819. foreach ($user_hist_events as $bill_doc) {
  1820. $billing_docs->add_event($bill_doc['A_STATUS_UPDATE_DATE'], 'HIST_STATUS', $bill_doc);
  1821. }
  1822. }
  1823. $user_hist_events = Windykacja_StatsHelper::getUserHistPhoneEvents($user->ID);
  1824. if (!empty($user_hist_events)) {
  1825. foreach ($user_hist_events as $bill_doc) {
  1826. $billing_docs->add_event(substr($bill_doc['A_RECORD_UPDATE_DATE'], 0, 10), 'HIST_PHONE', $bill_doc);
  1827. }
  1828. }
  1829. $user_hist_events = Windykacja_StatsHelper::getUserBadAddressEvents($user->ID);
  1830. if (!empty($user_hist_events)) {
  1831. foreach ($user_hist_events as $bill_doc) {
  1832. $billing_docs->add_event(substr($bill_doc['A_RECORD_UPDATE_DATE'], 0, 10), 'HIST_BAD_ADDRESS', $bill_doc);
  1833. }
  1834. }
  1835. // add today
  1836. $bill_doc = array();
  1837. $bill_doc['saldo'] = $billing_docs->get_saldo();
  1838. $billing_docs->add_event(date('Y-m-d'), 'TODAY', $bill_doc);
  1839. $billing_docs->sort_docs();
  1840. //$billing_docs = array_reverse($billing_docs, true);
  1841. //echo'<pre style="max-height:300px;overflow:auto;border:1px solid red;">billing_docs: ';print_r($billing_docs);echo'</pre>';
  1842. $billing_docs_arr = $billing_docs->get_docs();
  1843. $types_finanse = array();
  1844. $types_finanse[] = 'KW';
  1845. $types_finanse[] = 'KP';
  1846. $types_finanse[] = 'WB_MASS';
  1847. $types_finanse[] = 'WB';
  1848. $types_finanse[] = 'KORV';
  1849. $types_finanse[] = 'FVAT';
  1850. $saldo_all = 0;
  1851. $out_tbl = array();
  1852. //echo'<pre>';print_r($billing_docs_arr);echo'</pre>';
  1853. foreach ($billing_docs_arr as $k_data => $v_docs_arr) {
  1854. foreach ($v_docs_arr as $k_ind => $v_doc) {
  1855. $out_tr = array();
  1856. $out_tr['data'] = $k_data;
  1857. if ($k_data == date("Y-m-d")) $out_tr['class'] = 'today';
  1858. $out_tr['ID'] = '';
  1859. $out_tr['nr'] = '';
  1860. $out_tr['winien'] = '';
  1861. $out_tr['ma'] = '';
  1862. $out_tr['saldo'] = '';
  1863. $out_tr['saldo_all'] = '';
  1864. if ($v_doc->get_class() == 'BILLING') {
  1865. $saldo_all += $v_doc->get_saldo();
  1866. $out_tr['ID'] = $v_doc->get_type();
  1867. $type_desc = Windykacja_StatsModel::get_billing_type_desc($v_doc->get_type());
  1868. if ($type_desc) {
  1869. if ($v_doc->get_type() == 'FVAT') $type_desc .= "\n Wystawiona: ".$v_doc->get('BILL_DATE')."\n Termin płatności: ".$v_doc->get('PAYMENT_TERM');
  1870. $out_tr['ID'] = '<span title="'.$type_desc.'">'.$out_tr['ID'].'</span>';
  1871. // TODO: podglad faktury
  1872. //if ($h['type'] == 'FVAT') $out_tr['ID'] .= ' <a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&_user_id=".$user->ID."&task=view_faktura&id=".$h['ID'].'" target="_blank">'.'<img src="'."icon/search.png".'" alt="'."U".'" title="'."Podgląd faktury".'" />'.'</a>';
  1873. }
  1874. $docNr = $v_doc->get('nr');
  1875. $docNrLabel = $v_doc->get('NUMBER') . '/' . $v_doc->get('ID_BILLING_PREFIXES');
  1876. /* links fomr l1:
  1877. * FV: https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura&adm=edit&uid=4014&fpos=&dz=&close=0&doc=799413&doctype=1
  1878. * KOR: https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura_korekta&adm=edit&uid=4014&fpos=&dz=&close=0&doc=809557&doctype=3
  1879. */
  1880. if ('FVAT' == $v_doc->get_type()) {
  1881. $out_tr['ID'] .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $docNr . '" target="_blank">'."({$docNrLabel})".'</a>';
  1882. }
  1883. else if ('KORV' == $v_doc->get_type()) {
  1884. // https://biuro.biall-net.pl/dev-pl/se-master/index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=809557
  1885. $remoteFvNum = $v_doc->get('FV_NUMBER');
  1886. $korNr = $v_doc->get('ID_BILLING_NUMBERS');
  1887. $korTitle = "Korekta dotycząca faktury nr: {$remoteFvNum}";
  1888. $out_tr['ID'] .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $korNr . '" target="_blank" title="'.$korTitle.'">'."({$docNrLabel})".'</a>';
  1889. }
  1890. $out_tr['nr'] = $docNrLabel;
  1891. $out_tr['winien'] = number_format($v_doc->get('WINIEN'), 2, ',', ' ');
  1892. $out_tr['ma'] = number_format($v_doc->get('MA'), 2, ',', ' ');
  1893. $out_tr['saldo'] = number_format($v_doc->get_saldo(), 2, ',', ' ');
  1894. $out_tr['saldo_all'] = number_format($saldo_all, 2, ',', ' ');
  1895. // style
  1896. if ($out_tr['winien'] == '0,00') $out_tr['winien'] = '<span style="color:#666;">' . $out_tr['winien'] . '</span>';
  1897. if ($out_tr['ma'] == '0,00') $out_tr['ma'] = '<span style="color:#666;">' . $out_tr['ma'] . '</span>';
  1898. }
  1899. else if ($v_doc->get_class() == 'EVENT') {
  1900. if ($v_doc->get_type() == 'TODAY') {
  1901. $out_tr['class'] = 'today';
  1902. $vDocSaldoData = $v_doc->get_data();
  1903. $v_doc_saldo = V::get('saldo', '', $vDocSaldoData);
  1904. $out_tr['saldo_all'] = number_format($v_doc_saldo, 2, ',', ' ');
  1905. }
  1906. else if ($v_doc->get_type() == 'HIST_STATUS') {
  1907. // search for koresp files
  1908. // TODO: mv to ::get_koresp_file($id_koresp);
  1909. $id_koresp = intval($v_doc->get('ID_KORESP'));
  1910. $found_files = array();
  1911. if(0){// turn off - old server
  1912. $CNF = new stdClass();
  1913. $CNF->koresp_dir = '/home/samba/BIALL-NET/PISMA/OUT';
  1914. $CNF->koresp_www_path = '/se-dev/PISMA/OUT';
  1915. if ($id_koresp > 0) {
  1916. $pattern = $CNF->koresp_dir . '/' . '*.' . $id_koresp . '.pdf';
  1917. $file_tmp_list = glob($pattern);//, GLOB_NOSORT);
  1918. if (!empty($file_tmp_list)) {
  1919. foreach ($file_tmp_list as $v_file) {
  1920. $test_file = explode('/', $v_file);
  1921. $test_file = end($test_file);
  1922. $found_files[] = $CNF->koresp_www_path . '/' . $test_file;
  1923. }
  1924. }
  1925. }
  1926. // return $found_files;
  1927. }
  1928. switch ($v_doc->get('A_STATUS')) {
  1929. case 'WAITING':
  1930. $out_tr['add'] = "powrót do oczekujących";
  1931. break;
  1932. case 'waiting-wezwanie2':
  1933. // TODO: get('LAST_ID_KORESP_WEZWANIE1')
  1934. $out_tr['add'] = "wezwanie do zapłaty - ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(termin: ".$v_doc->get('PAY_TERM').")</em> ";
  1935. break;
  1936. case 'waiting-krd':
  1937. $out_tr['add'] = "wezwanie do zapłaty ost. - ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(termin: ".$v_doc->get('PAY_TERM').")</em> ";
  1938. break;
  1939. case 'N/S;':
  1940. $out_tr['add'] = "ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(" . $v_doc->get('K_ZAWARTOS') . ")</em>";// TODO: get opis from koresp
  1941. //echo '('.$v_doc->get('ID_KORESP').', '.$v_doc->get('K_ZAWARTOS').'='.substr($v_doc->get('K_ZAWARTOS'), 0, strlen('rozwiazanie umowy')).')';
  1942. if ($v_doc->get('ID_KORESP') > 0 && substr($v_doc->get('params'), 0, strlen('rozwiazanie umowy')) == 'rozwiazanie umowy') {
  1943. $out_tr['add'] .= " " . '<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."bok_rozwiazanie_umowy_print"."&user_id={$user->ID}&id_koresp=".$v_doc->get('ID_KORESP').'" target="_blank" title="' . "Generuj druk rozwiązania umowy" . '">' . "druk" . '</a>';
  1944. }
  1945. break;
  1946. default:
  1947. $out_tr['add'] = "zmiana statusu na: ".$v_doc->get('A_STATUS')." ";
  1948. }
  1949. if ($id_koresp > 0) {
  1950. if (!empty($out_tr['add']) && !empty($found_files)) {
  1951. $add_link_koresp = reset($found_files);// first file from koresp
  1952. $out_tr['add'] .= " " . '<a href="' . $add_link_koresp . '" target="_blank">' . "P" . '</a>';
  1953. }
  1954. //$koresp_edit_link = "?MENU_INIT=IN7_DZIENNIK_KORESP_EDIT&ARG1=EDIT&ARG1_VAL=" . $id_koresp;
  1955. Lib::loadClass('ProcesHelper');
  1956. $zasobKorespID = ProcesHelper::getZasobTableID('IN7_DZIENNIK_KORESP');
  1957. $koresp_edit_link = "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID={$zasobKorespID}#EDIT/{$id_koresp}";
  1958. $out_tr['add'] .= " " . '<a href="' . $koresp_edit_link . '" title="' . "Edycja KORESP. ({$id_koresp})" . '" target="_blank">' . "KOR" . '</a>';
  1959. }
  1960. }
  1961. else if ($v_doc->get_type() == 'HIST_PHONE') {
  1962. $date = $v_doc->get('PAY_TERM');
  1963. if ($date == 'N/S;') $date = '';
  1964. $lastPhoneStatus = $v_doc->get('LAST_PHONE_STATUS');
  1965. if ($lastPhoneStatus == 'N/S;') $lastPhoneStatus = '';
  1966. $lastSmsStatus = $v_doc->get('LAST_SMS_STATUS');
  1967. if ($lastSmsStatus == 'N/S;') $lastSmsStatus = '';
  1968. $lastMailStatus = $v_doc->get('LAST_MAIL_STATUS');
  1969. if ($lastMailStatus == 'N/S;') $lastMailStatus = '';
  1970. $lastUpdateDate = $v_doc->get('A_RECORD_UPDATE_DATE');
  1971. if (!empty($lastPhoneStatus)) {
  1972. switch ($lastPhoneStatus) {
  1973. case 'nie_zaplaci':
  1974. $out_tr['add'] = "nie zapłaci";
  1975. break;
  1976. case 'zaplaci_w_terminie':
  1977. $out_tr['add'] = "zapłaci w terminie {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  1978. break;
  1979. case 'zaplaci_za_1mc':
  1980. $out_tr['add'] = "zapłaci miesiąc później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  1981. break;
  1982. case 'zaplaci_za_2mc':
  1983. $out_tr['add'] = "zapłaci 2 miesiące później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  1984. break;
  1985. case 'zaplaci_za_3mc':
  1986. $out_tr['add'] = "zapłaci 3 miesiące później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  1987. break;
  1988. default:
  1989. $out_tr['add'] = "kontakt z klientem: {$lastPhoneStatus} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  1990. }
  1991. } else if (!empty($lastSmsStatus)) {
  1992. $lastSmsId = $v_doc->get('LAST_SMS_MSG_ID');
  1993. $out_tr['add'] = "SMS: {$lastSmsStatus} " . '<em style="font-size:small;" title="' . "(wysłano {$lastUpdateDate}, {$lastSmsId})" . '">' . "(wysłano {$lastUpdateDate})" . '</em>';
  1994. } else if (!empty($lastMailStatus)) {
  1995. $lastMailId = $v_doc->get('LAST_MAIL_MSG_ID');
  1996. $out_tr['add'] = "MAIL: {$lastMailStatus} " . '<em style="font-size:small;" title="' . "(wysłano {$lastUpdateDate}, {$lastMailId})" . '">' . "(wysłano {$lastUpdateDate})" . '</em>';
  1997. }
  1998. } else if ($v_doc->get_type() == 'HIST_BAD_ADDRESS') {
  1999. if ($v_doc->get('BAD_ADDRESS')) {
  2000. $out_tr['add'] = "błędny adres zameldowania ";
  2001. } else {
  2002. $out_tr['add'] = "poprawa adresu zameldowania ";
  2003. }
  2004. if ($v_doc->get('ID_KORESP') > 0) {
  2005. $out_tr['add'] .= " - ID Koresp. (" . '<a href="' . "index.php?MENU_INIT=IN7_DZIENNIK_KORESP_EDIT&ARG1=EDIT&ARG1_VAL=" . $v_doc->get('ID_KORESP') . '" target="_blank">' . $v_doc->get('ID_KORESP') . '</a>' . ")";
  2006. }
  2007. } else {
  2008. $out_tr['ID'] = $v_doc->get_type().' <code style="font-size:10px">'."(".$v_doc->get('ID').")".'</code>';// TODO: dla KP,KW: ID_BILLING_NUMBERS zamiast ID
  2009. if ($v_doc->get_type() == 'UMOWA') {
  2010. $out_tr['add'] = "umowa nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(termin ".$v_doc->get('P_DEALDATE_TERM').")</em>";
  2011. } else if ($v_doc->get_type() == 'KONIEC UMOWY') {
  2012. $out_tr['add'] = "zakończenie umowy nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(z dnia ".$v_doc->get('P_DEALDATE').")</em>";
  2013. }
  2014. }
  2015. }
  2016. //$out_tbl[] = $out_tr;// add to the end
  2017. array_unshift($out_tbl, $out_tr);// add to the begining
  2018. }
  2019. }
  2020. echo'<style type="text/css">'."
  2021. .tbl-windykacja td{padding:0 5px;}
  2022. .tbl-windykacja .cell-data{white-space:nowrap;}
  2023. .tbl-windykacja .cell-winien{text-align:right;}
  2024. .tbl-windykacja .cell-ma{text-align:right;}
  2025. .tbl-windykacja .cell-saldo{text-align:right;}
  2026. .tbl-windykacja .cell-saldo_all{text-align:right; white-space:nowrap; background-color:#E5E5E5;}
  2027. .tbl-windykacja .cell-nr{font-family:monospace;text-align:right;}
  2028. .tbl-windykacja .change-year td{border-top:3px solid #00f;}
  2029. .tbl-windykacja .today td{background:#FFFF98;}
  2030. .tbl-windykacja .cell-add em{color:#666;}
  2031. ".'</style>';
  2032. $last_year = '';
  2033. $cols = array();
  2034. $cols['data'] = "data";
  2035. $cols['ID'] = "ID";
  2036. $cols['nr'] = "nr";
  2037. $cols['winien'] = "winien";
  2038. $cols['ma'] = "ma";
  2039. //$cols['saldo'] = "saldo";
  2040. $cols['saldo_all'] = "saldo";
  2041. $cols['add'] = "uwagi";
  2042. ?>
  2043. <h4>Historia klienta <small>(l1)</small></h4>
  2044. <table border="1" class="tbl-view tbl-windykacja" cellspacing="0" cellpadding="0">
  2045. <thead>
  2046. <tr>
  2047. <th>rok</th>
  2048. <?php foreach ($cols as $colName => $colLabel) : ?>
  2049. <th><?php echo $colLabel; ?></th>
  2050. <?php endforeach; ?>
  2051. </tr>
  2052. </thead>
  2053. <?php
  2054. foreach ($out_tbl as $out_tr) {
  2055. $change_year = false;
  2056. $k_data = $out_tr['data'];
  2057. $rok = substr($k_data, 0, 4);
  2058. if ($rok != $last_year) {
  2059. $change_year = true;
  2060. }
  2061. $cls = array();
  2062. if ($change_year) $cls[] = 'change-year';
  2063. if ($add_cls = V::get('class', '', $out_tr)) $cls[] = $add_cls;
  2064. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  2065. echo'<tr'.$cls.'>';
  2066. echo'<td>';
  2067. echo ($change_year)? $rok : "&nbsp;";
  2068. echo'</td>';
  2069. $last_year = $rok;
  2070. foreach ($cols as $col_name => $col_label) {
  2071. //foreach ($out_tr as $k_col_name => $v_val) {
  2072. if (array_key_exists($col_name, $out_tr)) {
  2073. echo'<td class="'."cell-".$col_name.'">' . $out_tr[$col_name] . '</td>';
  2074. } else {
  2075. echo'<td>'."&nbsp;".'</td>';
  2076. }
  2077. }
  2078. echo'</tr>';
  2079. }
  2080. echo'</table>';
  2081. echo'<br />';
  2082. echo'<br />';
  2083. Windykacja_StatsHelper::update_stats($user, $billing_docs);
  2084. {// srv hist
  2085. $srvHist = array();
  2086. $db = DB::getDB();
  2087. $sql = "
  2088. select fvPos.`ID` as fvPos__ID
  2089. , fvPos.`DATE_FROM` as fvPos__DATE_FROM
  2090. , fvPos.`DATE_TO` as fvPos__DATE_TO
  2091. , fvPos.`ID_SERVICES` as fvPos__ID_SERVICES
  2092. , ( select srv.`NAME_LIST_SERVICES` from `billing2013`.`SERVICES` srv where srv.`ID` = fvPos.`ID_SERVICES` limit 1 ) as srv__NAME_LIST_SERVICES
  2093. , fvPos.`AMMOUNT` as fvPos__AMMOUNT
  2094. , fvPos.`PRICE` as fvPos__PRICE
  2095. , fvPos.`VAT` as fvPos__VAT
  2096. -- , fvPos.`ID_BILLS_FVAT` as fvPos__ID_BILLS_FVAT
  2097. , fvPos.`DESCR` as fvPos__DESCR
  2098. -- , fvPos.`id_list_services` as fvPos__id_list_services
  2099. -- , fvPos.`id_list_sww` as fvPos__id_list_sww
  2100. -- , fvPos.`VAT_NAME` as fvPos__VAT_NAME
  2101. -- , fvPos.`ID_OFFERS` as fvPos__ID_OFFERS
  2102. -- , 'fv', fv.*
  2103. -- , fv.`ID` as fv__ID
  2104. , fv.`ID_BILLING_NUMBERS` as fv__ID_BILLING_NUMBERS
  2105. -- , fv.`ID_BILLING_USERS` as fv__ID_BILLING_USERS
  2106. -- , fv.`id_owner` as fv__id_owner
  2107. , fv.`BILL_DATE` as fv__BILL_DATE
  2108. , fv.`SELL_DATE` as fv__SELL_DATE
  2109. -- , fv.`TIMESTAMP` as fv__TIMESTAMP
  2110. , fv.`PAYMENT_TERM` as fv__PAYMENT_TERM
  2111. -- , fv.`PAYMENT_TYPE` as fv__PAYMENT_TYPE
  2112. -- , fv.`ID_CURRENCY` as fv__ID_CURRENCY
  2113. -- , fv.`ID_FK_DEKRET` as fv__ID_FK_DEKRET
  2114. -- , fv.`ID_FK_ROZRACH` as fv__ID_FK_ROZRACH
  2115. -- , fv.`OPEN` as fv__OPEN
  2116. -- , fv.`FK_ZAKSIEG` as fv__FK_ZAKSIEG
  2117. , fv.`IF_KORV` as fv__IF_KORV
  2118. -- , 'fvNum', fvNum.*
  2119. -- , fvNum.`ID` as fvNum__ID
  2120. -- , fvNum.`TIMESTAMP` as fvNum__TIMESTAMP
  2121. -- , fvNum.`ID_BILLING_NUMBERS_TYPE` as fvNum__ID_BILLING_NUMBERS_TYPE
  2122. -- , fvNum.`ID_BILLING_PREFIXES` as fvNum__ID_BILLING_PREFIXES
  2123. , fvNum.`NUMBER` as fvNum__NUMBER
  2124. -- , fvNum.`ID_BILLING_USERS` as fvNum__ID_BILLING_USERS
  2125. , fvNum.`FOREIGN_ID_BILLING_NUMBERS` as fvNum__FOREIGN_ID_BILLING_NUMBERS
  2126. -- , fvNum.`U_ID` as fvNum__U_ID
  2127. -- , fvNum.`BILLING_OWNER` as fvNum__BILLING_OWNER
  2128. -- , 'korPos', korPos.*
  2129. , korPos.`ID` as korPos__ID
  2130. -- , korPos.`ID_BILLS_FVAT` as korPos__ID_BILLS_FVAT
  2131. , korPos.`DESCR` as korPos__DESCR
  2132. , korPos.`ID_SERVICES` as korPos__ID_SERVICES
  2133. , korPos.`DATE_FROM` as korPos__DATE_FROM
  2134. , korPos.`DATE_TO` as korPos__DATE_TO
  2135. , korPos.`AMMOUNT` as korPos__AMMOUNT
  2136. , korPos.`PRICE` as korPos__PRICE
  2137. , korPos.`VAT` as korPos__VAT
  2138. -- , korPos.`id_list_services` as korPos__id_list_services
  2139. -- , korPos.`id_list_sww` as korPos__id_list_sww
  2140. -- , korPos.`VAT_NAME` as korPos__VAT_NAME
  2141. -- , korPos.`N_DESCR` as korPos__N_DESCR
  2142. -- , korPos.`N_ID_SERVICES` as korPos__N_ID_SERVICES
  2143. -- , korPos.`N_DATE_FROM` as korPos__N_DATE_FROM
  2144. -- , korPos.`N_DATE_TO` as korPos__N_DATE_TO
  2145. -- , korPos.`N_AMMOUNT` as korPos__N_AMMOUNT
  2146. -- , korPos.`N_PRICE` as korPos__N_PRICE
  2147. -- , korPos.`N_VAT` as korPos__N_VAT
  2148. -- , korPos.`N_id_list_services` as korPos__N_id_list_services
  2149. -- , korPos.`N_id_list_sww` as korPos__N_id_list_sww
  2150. -- , korPos.`N_VAT_NAME` as korPos__N_VAT_NAME
  2151. , korPos.`TYP_KOREKTY` as korPos__TYP_KOREKTY
  2152. from `billing2013`.`BILLS_FVAT_POS` fvPos
  2153. join `billing2013`.`BILLS_FVAT` fv on ( fv.`ID` = fvPos.`ID_BILLS_FVAT` )
  2154. join `billing2013`.`BILLING_NUMBERS` fvNum on ( fvNum.`ID` = fv.`ID_BILLING_NUMBERS` )
  2155. left join `billing2013`.`BILLS_KORV_POS` korPos on (
  2156. korPos.`ID_BILLS_FVAT` = (
  2157. select kor.`ID`
  2158. from `billing2013`.`BILLS_KORV` kor
  2159. where kor.`REMOTE_ID_BILLING_NUMBERS` = fvNum.`ID`
  2160. )
  2161. and korPos.`ID_SERVICES` = fvPos.`ID_SERVICES`
  2162. )
  2163. where fv.`ID_BILLING_USERS` = '{$user->ID}'
  2164. order by fv.`ID` DESC
  2165. ";
  2166. //echo'<pre>srvHist:sql: ';print_r($sql);echo'</pre>';
  2167. $idxDates = array();
  2168. $idxSrv = array();
  2169. $idxHasKor = array();
  2170. $res = $db->query($sql);
  2171. while ($r = $db->fetch($res)) {
  2172. $srvHist[$r->fvPos__ID] = $r;
  2173. $month = substr($r->fv__BILL_DATE, 0, 7);
  2174. $idSrv = $r->fvPos__ID_SERVICES;
  2175. if (!empty($r->fv__BILL_DATE)) {
  2176. if (!array_key_exists($month, $idxDates)) $idxDates[$month] = array();
  2177. $idxDates[$month][$r->fvPos__ID] = $idSrv;
  2178. }
  2179. if (!empty($idSrv)) {
  2180. $idxSrv[$idSrv] = $r->srv__NAME_LIST_SERVICES;
  2181. }
  2182. if ($r->korPos__ID > 0) {
  2183. $isKorZero = ($r->korPos__AMMOUNT * $r->korPos__PRICE == -1 * $r->fvPos__AMMOUNT * $r->fvPos__PRICE);
  2184. $idxHasKor[$month][$idSrv][] = $isKorZero;
  2185. }
  2186. }
  2187. krsort($idxDates);
  2188. ?>
  2189. <div class="container">
  2190. <script>
  2191. function showHideSrvHist() {
  2192. jQuery('#srvHist').toggle();
  2193. return false;
  2194. }
  2195. </script>
  2196. <h3>Historia usług <button class="btn btn-xs btn-danger" onclick="return showHideSrvHist()">+/-</button></h3>
  2197. <table class="table table-bordered" id="srvHist" style="display:none">
  2198. <thead>
  2199. <tr>
  2200. <th style="padding:2px"><nobr class="pull-right">Usługi</nobr></th>
  2201. <?php foreach ($idxSrv as $idSrv => $srvType) : ?>
  2202. <th style="padding:2px"><?php echo $idSrv; ?></th>
  2203. <?php endforeach; ?>
  2204. </tr>
  2205. <tr>
  2206. <th style="padding:2px"><nobr>Data</nobr></th>
  2207. <?php foreach ($idxSrv as $idSrv => $srvType) : ?>
  2208. <th style="padding:2px"><?php echo $srvType; ?></th>
  2209. <?php endforeach; ?>
  2210. </tr>
  2211. </thead>
  2212. <tbody>
  2213. <?php foreach ($idxDates as $month => $posIds) : ?>
  2214. <tr>
  2215. <td style="padding:2px"><?php echo $month; ?></td>
  2216. <?php foreach ($idxSrv as $idSrv => $srvType) : ?>
  2217. <?php if (in_array($idSrv, $posIds)) : ?>
  2218. <?php if (!empty($idxHasKor[$month][$idSrv])) : ?>
  2219. <?php if (count($idxHasKor[$month][$idSrv]) > 1) : ?>
  2220. <td style="padding:2px" class="danger"><b title="Faktury i Korekty w tym na 0"><?php echo count($idxHasKor[$month][$idSrv]); ?> * FV (FV - KOR = 0)</b></td>
  2221. <?php elseif (true == $idxHasKor[$month][$idSrv][0]) : ?>
  2222. <td style="padding:2px" class="danger"><b title="Faktura i Korekta na 0">FV - KOR = 0</b></td>
  2223. <?php else : ?>
  2224. <td style="padding:2px" class="warning"><b title="Faktura i Korekta">FV - KOR &gt; 0</b></td>
  2225. <?php endif; ?>
  2226. <?php else : ?>
  2227. <td style="padding:2px" class="success"><b title="brak korekty">FV</b></td>
  2228. <?php endif; ?>
  2229. <?php else : ?>
  2230. <td style="padding:2px"><i class="muted">---</i></td>
  2231. <?php endif; ?>
  2232. <?php endforeach; ?>
  2233. </tr>
  2234. <?php endforeach; ?>
  2235. </tbody>
  2236. </table>
  2237. </div>
  2238. <?php
  2239. //echo'<pre>idxHasKor: ';print_r($idxHasKor);echo'</pre>';
  2240. //echo'<pre>idxDates: ';print_r($idxDates);echo'</pre>';
  2241. //echo'<pre>idxSrv: ';print_r($idxSrv);echo'</pre>';
  2242. //echo'<pre>srvHist: ';print_r($srvHist);echo'</pre>';
  2243. }// srv hist
  2244. }
  2245. public static function view_faktura($faktura_id) {
  2246. // https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=make_faktura&adm=edit&uid=11381&fpos=&dz=
  2247. // https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura&adm=edit&uid=11381&fpos=&dz=&close=0&doc=483930&doctype=1
  2248. echo'{'.$faktura_id.'}';
  2249. }
  2250. public static function zadluzenia(&$user) {
  2251. $THIS_DATA_DO = null;// TODO: pobierac z PAY_TERM z tabeli USERS2_WINDYKACJA_STATUS
  2252. $post_sent = (!empty($_POST['sbmt']));
  2253. $post_DATA_DO = (isset($_POST['DATA_DO']))? $_POST['DATA_DO'] : date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  2254. if (!$post_sent) {
  2255. echo'<table style="margin:10px 50px;padding:20px;border:1px solid blue;"><tr><td>';
  2256. echo'<form action="" method="post">';
  2257. $post_DATA_DO = (isset($_POST['DATA_DO']) && strlen($_POST['DATA_DO']) == 10)? $_POST['DATA_DO'] : date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  2258. echo'<p>'."Termin płatności: ".'</p>';
  2259. echo'<input type="text" name="'."DATA_DO".'" value="'.$post_DATA_DO.'" />';
  2260. echo'<input type="submit" name="sbmt" value="'."Wyslij".'" />';
  2261. echo'</form>';
  2262. echo'</td></tr></table>';
  2263. return;
  2264. } else {
  2265. $THIS_DATA_DO = $post_DATA_DO;
  2266. }
  2267. self::wezwanie($user, $THIS_DATA_DO);
  2268. }
  2269. public static function wezwanie_ostateczne(&$user, $wezwanie_termin) {
  2270. self::wezwanie($user, $wezwanie_termin, true);
  2271. }
  2272. public static function zestawienie_vectra_nadplaty() {
  2273. $usersList = array();
  2274. $db = DB::getDB();
  2275. $sql_select = "
  2276. c.`ID` as ID
  2277. , c.`ID` as id_users
  2278. , c.`P_NAME`
  2279. , c.`P_NAME_SECOND`
  2280. , c.`P_ADDRESS_STREET`
  2281. , c.`P_ADDRESS_HOME`
  2282. , c.`P_ADDRESS_HOUSE`
  2283. , c.`P_ADDRESS_CITY`
  2284. , c.`P_ADDRESS_POST_CODE`
  2285. , c.`P_ADDRESS_REGION`
  2286. , c.`P_PESEL`
  2287. , c.`P_PHONE`
  2288. , c.`P_OTHER_DOC`
  2289. , c.`user_mail_contact`
  2290. , c.`is_firma`
  2291. , w.`ID` as WINDYKACJA_ID
  2292. , w.`ID_BILLING_USERS`
  2293. , w.`A_STATUS`
  2294. , w.`A_STATUS_UPDATE_DATE`
  2295. , w.`USER_PAY_TERM_ADD`
  2296. , w.`L_APPOITMENT_DATE`
  2297. , w.`L_APPOITMENT_USER`
  2298. , w.`L_APPOITMENT_INFO`
  2299. , w.`PAY_DATE`
  2300. , w.`PAY_DATE_FIRST_FVAT`
  2301. , w.`PAY_TERM`
  2302. , w.`PAY_SALDO`
  2303. , w.`PAY_FVAT`
  2304. , w.`wezwanie1_DATE`
  2305. , w.`wezwanie2_DATE`
  2306. , w.`ID_KORESP`
  2307. , w.`LAST_PAY_DATE`
  2308. , w.`BAD_ADDRESS`
  2309. , c.`STATUS`
  2310. , c.`BILLING_OWNER`
  2311. , w.`NR_SPRAWY_KRD`
  2312. , w.`NR_SPRAWY_SAD`
  2313. , w.`NR_SPRAWY_KOMORNIK`
  2314. , w.`LAST_FVAT_PAY_TERM`
  2315. ";
  2316. $sqlWhereAdd = "
  2317. and (w.`LAST_FVAT_PAY_TERM`>='2014-12-01'
  2318. or ( w.`LAST_FVAT_PAY_TERM`='0000-00-00'
  2319. and w.`LAST_FVAT_SELL_DATE`>='2014-12-01'
  2320. )
  2321. )
  2322. and c.`ID_BILLING_PREFIXES` in('0','1')
  2323. and c.`BILLING_OWNER` in('1')
  2324. ";
  2325. $sql = "select {$sql_select}
  2326. from `USERS2_WINDYKACJA_STATUS` as w
  2327. join `COMPANIES` as c on(c.`ID`=w.`ID_BILLING_USERS`)
  2328. where c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  2329. {$sqlWhereAdd}
  2330. ";
  2331. if (V::get('DBG_SQL', '', $_GET)) {
  2332. header('Content-Type: text/plain; charset=utf-8');
  2333. echo $sql;
  2334. exit;
  2335. }
  2336. $res = $db->query($sql);
  2337. if ($db->has_errors()) {
  2338. print_r($db->get_errors());
  2339. die('die L.' . __LINE__);
  2340. }
  2341. while ($r = $db->fetch($res)) {
  2342. $usersList[$r->ID_BILLING_USERS] = $r;
  2343. }
  2344. if (V::get('DBG_ILE', '', $_GET)) {
  2345. echo '<p>ilosc: ' . count($usersList) . '</p>' . '<pre style="max-height:200px;overflow:auto">';
  2346. print_r($usersList);
  2347. echo '</pre>';
  2348. exit;
  2349. }
  2350. if (V::get('DBG_IDS', '', $_GET)) {
  2351. header('Content-Type: text/plain; charset=utf-8');
  2352. echo 'ilosc: ' . count($usersList) . "\n";
  2353. echo implode("\n", array_keys($usersList));
  2354. exit;
  2355. }
  2356. $limit = V::get('DBG_LOOP_LIMIT', 100000, $_GET, 'int');
  2357. if(V::get('DBG_LOOP_LIMIT', 0, $_GET, 'int')){echo "Loimit: {$limit}\n";}
  2358. $date_limit = V::get('DATE_LIMIT', date("Y-m-d"), $_GET);
  2359. $date_limit_from = '2014-12-01';
  2360. $csvFileName = "Zestawienie-nadplaty-do-{$date_limit}";
  2361. header('Content-Type: text/csv; charset=utf-8');
  2362. header("Content-Disposition: attachment; filename={$csvFileName}.csv");
  2363. $showCsvHeader = true;
  2364. foreach ($usersList as $userId => $user) {
  2365. $billing_docs = Windykacja_StatsModel::getBillDocsByDate($user->ID, $date_limit);
  2366. $billing_docs->sort_docs();
  2367. $saldo = $billing_docs->get_saldo();
  2368. if ($saldo <= 0) {
  2369. continue;
  2370. }
  2371. if(V::get('DBG_LOOP', '', $_GET)){echo "{$userId}:{$saldo}\n";}
  2372. $incomeDocs = $billing_docs->getLastIncomeDocsForSaldo($saldo);
  2373. if(V::get('DBG_LOOP', '', $_GET)){print_r($incomeDocs);echo "\n";}
  2374. //Windykacja_StatsModel::update_doc_number($incomeDocs);
  2375. $out_tbl = array();
  2376. foreach ($incomeDocs as $v_fvat) {
  2377. $out_tr = array();
  2378. $out_tr['ID'] = $v_fvat['ID'];
  2379. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  2380. $out_tr['wplata'] = number_format($v_fvat['MA'], 2, '.', '');
  2381. $out_tr['data'] = $v_fvat['BILL_DATE'];
  2382. $out_tr['pozostalo'] = number_format($v_fvat['MA_POZOSTALO'], 2, '.', '');
  2383. array_push($out_tbl, $out_tr);// add to the begining
  2384. }
  2385. {// csv
  2386. $csvLine = array();
  2387. $csvLine[] = '"id klienta"';
  2388. $csvLine[] = '"nr dokumentu"';
  2389. $csvLine[] = '"kwota brutto"';
  2390. $csvLine[] = '"data wpłaty"';
  2391. $csvLine[] = '"pozostało"';
  2392. if ($showCsvHeader) {
  2393. echo implode(';', $csvLine) . ";\n";
  2394. $showCsvHeader = false;
  2395. }
  2396. foreach ($out_tbl as $tr) {
  2397. $csvLine = array();
  2398. $csvLine[] = '"' . $userId . '"';
  2399. $csvLine[] = '"' . $tr['nr'] . '"';
  2400. $csvLine[] = '"' . $tr['wplata'] . '"';
  2401. $csvLine[] = '"' . $tr['data'] . '"';
  2402. $csvLine[] = '"' . $tr['pozostalo'] . '"';
  2403. echo implode(';', $csvLine) . ";\n";
  2404. }
  2405. }
  2406. //echo '<pre style="max-height:200px;overflow:auto">incomeDocs: ';print_r($incomeDocs);echo'</pre>';
  2407. //echo '<pre style="max-height:200px;overflow:auto">ilosc('.count($out_tbl).') ' . "client({$userId}): ";print_r($out_tbl);echo'</pre>';
  2408. if (--$limit < 0) {
  2409. echo '<br>BREAK';
  2410. break;
  2411. }
  2412. }
  2413. exit;
  2414. }
  2415. public static function zestawienie_vectra_zadluzenia() {
  2416. $usersList = array();
  2417. $db = DB::getDB();
  2418. $sql_select = "
  2419. c.`ID` as ID
  2420. , c.`ID` as id_users
  2421. , c.`P_NAME`
  2422. , c.`P_NAME_SECOND`
  2423. , c.`P_ADDRESS_STREET`
  2424. , c.`P_ADDRESS_HOME`
  2425. , c.`P_ADDRESS_HOUSE`
  2426. , c.`P_ADDRESS_CITY`
  2427. , c.`P_ADDRESS_POST_CODE`
  2428. , c.`P_ADDRESS_REGION`
  2429. , c.`P_PESEL`
  2430. , c.`P_PHONE`
  2431. , c.`P_OTHER_DOC`
  2432. , c.`user_mail_contact`
  2433. , c.`is_firma`
  2434. , w.`ID` as WINDYKACJA_ID
  2435. , w.`ID_BILLING_USERS`
  2436. , w.`A_STATUS`
  2437. , w.`A_STATUS_UPDATE_DATE`
  2438. , w.`USER_PAY_TERM_ADD`
  2439. , w.`L_APPOITMENT_DATE`
  2440. , w.`L_APPOITMENT_USER`
  2441. , w.`L_APPOITMENT_INFO`
  2442. , w.`PAY_DATE`
  2443. , w.`PAY_DATE_FIRST_FVAT`
  2444. , w.`PAY_TERM`
  2445. , w.`PAY_SALDO`
  2446. , w.`PAY_FVAT`
  2447. , w.`wezwanie1_DATE`
  2448. , w.`wezwanie2_DATE`
  2449. , w.`ID_KORESP`
  2450. , w.`LAST_PAY_DATE`
  2451. , w.`BAD_ADDRESS`
  2452. , c.`STATUS`
  2453. , c.`BILLING_OWNER`
  2454. , w.`NR_SPRAWY_KRD`
  2455. , w.`NR_SPRAWY_SAD`
  2456. , w.`NR_SPRAWY_KOMORNIK`
  2457. , w.`LAST_FVAT_PAY_TERM`
  2458. ";
  2459. $sqlWhereAdd = "
  2460. and (w.`LAST_FVAT_PAY_TERM`>='2014-12-01'
  2461. or ( w.`LAST_FVAT_PAY_TERM`='0000-00-00'
  2462. and w.`LAST_FVAT_SELL_DATE`>='2014-12-01'
  2463. )
  2464. )
  2465. and c.`ID_BILLING_PREFIXES` in('0','1')
  2466. and c.`BILLING_OWNER` in('1')
  2467. ";
  2468. if (V::get('DBG_NUM', '', $_GET)) {// number of clients with fvat after 2014-12-01
  2469. $sqlWhereAdd = "
  2470. and (w.`LAST_FVAT_PAY_TERM`>='2014-12-01'
  2471. or ( w.`LAST_FVAT_PAY_TERM`='0000-00-00'
  2472. and w.`LAST_FVAT_SELL_DATE`>='2014-12-01'
  2473. )
  2474. )
  2475. and c.`ID_BILLING_PREFIXES` in('0','1')
  2476. and c.`BILLING_OWNER` in('1')
  2477. ";
  2478. }
  2479. $sql = "select {$sql_select}
  2480. from `USERS2_WINDYKACJA_STATUS` as w
  2481. join `COMPANIES` as c on(c.`ID`=w.`ID_BILLING_USERS`)
  2482. where c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  2483. {$sqlWhereAdd}
  2484. ";
  2485. if (V::get('DBG_SQL', '', $_GET)) {
  2486. header('Content-Type: text/plain; charset=utf-8');
  2487. echo $sql;
  2488. exit;
  2489. }
  2490. $res = $db->query($sql);
  2491. if ($db->has_errors()) {
  2492. print_r($db->get_errors());
  2493. die();
  2494. }
  2495. while ($r = $db->fetch($res)) {
  2496. $usersList[$r->ID_BILLING_USERS] = $r;
  2497. }
  2498. if (V::get('DBG_ILE', '', $_GET)) {
  2499. echo '<p>ilosc: ' . count($usersList) . '</p>' . '<pre style="max-height:200px;overflow:auto">';
  2500. print_r($usersList);
  2501. echo '</pre>';
  2502. exit;
  2503. }
  2504. if (V::get('DBG_IDS', '', $_GET)) {
  2505. header('Content-Type: text/plain; charset=utf-8');
  2506. echo 'ilosc: ' . count($usersList) . "\n";
  2507. echo implode("\n", array_keys($usersList));
  2508. exit;
  2509. }
  2510. $limit = 10000;
  2511. $date_limit = V::get('DATE_LIMIT', date("Y-m-d"), $_GET);
  2512. $date_limit_from = '2014-12-01';
  2513. $csvFileName = "Zestawienie-zadluzenia-do-{$date_limit}";
  2514. header('Content-Type: text/csv; charset=utf-8');
  2515. header("Content-Disposition: attachment; filename={$csvFileName}.csv");
  2516. $showCsvHeader = true;
  2517. foreach ($usersList as $userId => $user) {
  2518. $billing_docs = Windykacja_StatsModel::getBillDocsByDate($user->ID, $date_limit);
  2519. $billing_docs->sort_docs();
  2520. $fvat_arr = $billing_docs->get_unpaid_fvat();
  2521. Windykacja_StatsModel::update_doc_number($fvat_arr);
  2522. if (V::get('DBG_LAST_FVAT_TERM', '', $_GET)) {
  2523. $lastFvatDoc = $billing_docs->get_last_fvat_doc();
  2524. if ($lastFvatDoc) {
  2525. echo '<p>lastFvatDoc:</p><pre style="max-height:200px;overflow:auto">';
  2526. print_r($lastFvatDoc);
  2527. echo '</pre>';
  2528. exit;
  2529. }
  2530. }
  2531. $user->hasActiveDeal = 0;
  2532. $sql = "select sum(t.`DEALS_ACTIVE`) as activeDeals
  2533. from `temp_DEALS_STATUS` as t
  2534. where t.`DEALS_ACTIVE`=1
  2535. and t.`ID_BILLING_USERS`='{$userId}'
  2536. ";
  2537. $res = $db->query($sql);
  2538. if ($db->num_rows($res) > 0) {
  2539. $user->hasActiveDeal = 1;
  2540. }
  2541. $out_tbl = array();
  2542. foreach ($fvat_arr as $v_fvat) {
  2543. if ($v_fvat['BILL_DATE'] < $date_limit_from || $v_fvat['BILL_DATE'] > $date_limit) {
  2544. //echo 'pomin fvat:'."\n";print_r($v_fvat);
  2545. continue;
  2546. }
  2547. $out_tr = array();
  2548. $out_tr['ID'] = $v_fvat['ID'];
  2549. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  2550. $out_tr['winien'] = number_format($v_fvat['WINIEN'], 2, '.', '');
  2551. $out_tr['data'] = $v_fvat['BILL_DATE'];
  2552. $out_tr['termin'] = $v_fvat['PAYMENT_TERM'];
  2553. $out_tr['pozostalo'] = number_format($v_fvat['WINIEN_POZOSTALO'], 2, '.', '');
  2554. array_unshift($out_tbl, $out_tr);// add to the begining
  2555. }
  2556. {// csv
  2557. $csvLine = array();
  2558. $csvLine[] = '"id klienta"';
  2559. $csvLine[] = '"nr dokumentu"';
  2560. $csvLine[] = '"kwota brutto"';
  2561. $csvLine[] = '"data faktury"';
  2562. $csvLine[] = '"termin płatności"';
  2563. $csvLine[] = '"pozostało do zapłaty"';
  2564. $csvLine[] = '"status klienta (9=blokada)"';
  2565. $csvLine[] = '"aktywne uslugi"';
  2566. if ($showCsvHeader) {
  2567. echo implode(';', $csvLine) . ";\n";
  2568. $showCsvHeader = false;
  2569. }
  2570. foreach ($out_tbl as $tr) {
  2571. $csvLine = array();
  2572. $csvLine[] = '"' . $userId . '"';
  2573. $csvLine[] = '"' . $tr['nr'] . '"';
  2574. $csvLine[] = '"' . $tr['winien'] . '"';
  2575. $csvLine[] = '"' . $tr['data'] . '"';
  2576. $csvLine[] = '"' . $tr['termin'] . '"';
  2577. $csvLine[] = '"' . $tr['pozostalo'] . '"';
  2578. $csvLine[] = '"' . $user->STATUS . '"';
  2579. $csvLine[] = '"' . $user->hasActiveDeal . '"';
  2580. echo implode(';', $csvLine) . ";\n";
  2581. }
  2582. }
  2583. //echo '<pre style="max-height:200px;overflow:auto">fvat_arr: ';print_r($fvat_arr);echo'</pre>';
  2584. //echo '<pre style="max-height:200px;overflow:auto">ilosc('.count($out_tbl).') ' . "client({$userId}): ";print_r($out_tbl);echo'</pre>';
  2585. if (--$limit < 0) {
  2586. echo '<br>BREAK';
  2587. break;
  2588. }
  2589. }
  2590. exit;
  2591. }
  2592. public static function wezwanie(&$user, $wezwanie_termin, $wezwanie_ostateczne = false) {
  2593. $date_limit = date("Y-m-d");
  2594. $billing_docs = Windykacja_StatsModel::getBillDocsByDate($user->ID, $date_limit);
  2595. $billing_docs->sort_docs();
  2596. // sprawdz zadluzenie
  2597. if ($billing_docs->get_saldo() >= 0) {
  2598. echo'<p class="green">' . "Brak zadluzenia" . '</p>';
  2599. return;
  2600. }
  2601. else {
  2602. $fvat_arr = $billing_docs->get_unpaid_fvat();
  2603. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">saldo('.$billing_docs->get_saldo().') fvat_arr: ';print_r($fvat_arr);echo'</pre>';
  2604. //foreach ($fvat_arr as $key => $v) {
  2605. // echo'<br />'.number_format($v['WINIEN_POZOSTALO'], 4, ',', ' ');
  2606. //}
  2607. if (empty($fvat_arr)) {
  2608. echo'<p>'."Brak nieoplaconych faktur".'</p>';
  2609. return;
  2610. }
  2611. Windykacja_StatsModel::update_doc_number($fvat_arr);
  2612. $cols = array();
  2613. $cols['ID'] = "ID";
  2614. $cols['nr'] = "nr";
  2615. $cols['winien'] = "winien";
  2616. $cols['ma'] = "ma";
  2617. //$cols['saldo'] = "saldo";
  2618. $cols['saldo_all'] = "saldo";
  2619. $cols['add'] = "&nbsp;";
  2620. $saldo_all = 0;
  2621. foreach ($fvat_arr as $f) {
  2622. $saldo_all += round($f['WINIEN_POZOSTALO'], 2);
  2623. }
  2624. $out_tbl = array();
  2625. foreach ($fvat_arr as $v_fvat) {
  2626. $out_tr = array();
  2627. $out_tr['ID'] = ' <code style="font-size:10px">'."(".$v_fvat['ID'].")".'</code>';// TODO: dla KP,KW: ID_BILLING_NUMBERS zamiast ID
  2628. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  2629. $out_tr['winien'] = number_format($v_fvat['WINIEN'], 2, ',', ' ');
  2630. $out_tr['data'] = $v_fvat['BILL_DATE'];
  2631. $out_tr['termin'] = $v_fvat['PAYMENT_TERM'];
  2632. $out_tr['pozostalo'] = number_format($v_fvat['WINIEN_POZOSTALO'], 2, ',', ' ');
  2633. array_unshift($out_tbl, $out_tr);// add to the begining
  2634. }
  2635. $razem = $saldo_all;
  2636. $company = Windykacja_StatsModel::getOwnerCompany($user->ID_BILLING_USERS);
  2637. $nr_konta = Windykacja_FunkcjeL1::bankowy_formatuj_nrach(Windykacja_FunkcjeL1::bankowy_make_nrach($company['NR_RACH_MASS_PAY'], $user->ID_BILLING_USERS, 0));
  2638. ?>
  2639. <style type="text/css">
  2640. body{font-family:serif; font-size:10px;line-height:14px;}
  2641. td{font-family:verdana; font-size:10px; color:#333;}
  2642. table {border-style:none;}
  2643. table td, table th {padding:0 2px;border-style:solid;border-collapse:collapse;}
  2644. table th {border-width:1px;border-color:#333;}
  2645. table td {border-width:1px;border-color:#333;}
  2646. </style>
  2647. <?php
  2648. echo'<div style="background:#fff;border:none;margin:5px;padding:20px 40px 10px 40px;page-break-after:always;font-size:small;">';
  2649. $id_koresp = 0;
  2650. if ($user->ID_KORESP) {
  2651. $id_koresp = $user->ID_KORESP;
  2652. if ($user->LAST_ID_KORESP_WEZWANIE1 && !$wezwanie_ostateczne) {
  2653. $id_koresp = $user->LAST_ID_KORESP_WEZWANIE1;
  2654. } else if ($user->LAST_ID_KORESP_WEZWANIE2 && $wezwanie_ostateczne) {
  2655. $id_koresp = $user->LAST_ID_KORESP_WEZWANIE2;
  2656. }
  2657. }
  2658. if ($id_koresp > 0) {//$user->ID_KORESP) {// TODO: if $user->LAST_ID_KORESP_WEZWANIE1 or LAST_ID_KORESP_WEZWANIE2
  2659. $koresp = DB::getPDO()->fetchFirstAsObject(" select * from IN7_DZIENNIK_KORESP where ID = :id ", [ ':id' => $id_koresp ]);
  2660. if ($koresp) {
  2661. echo '<div style="text-align:right;font-weight:bold;">';
  2662. echo $koresp->ID_PROJECT . '-' .$koresp->ID . "/" . substr(date("Y"), 2);
  2663. echo '</div>';
  2664. }
  2665. }
  2666. //echo "&bdquo;BIALL-NET&rdquo; Sp. z o.o.<br />Otomin, ul. Słoneczna 43<br />80-174 Gdańsk";
  2667. ?>
  2668. <table border=0 cellspacing=0 cellpadding=0 style="width:100%;">
  2669. <tr>
  2670. <td style="width:60%;border:none;">
  2671. <?= $company['name1']; ?>
  2672. <br /><?= "ul. {$company['ulica']} {$company['numer_dom']}"; ?>
  2673. <br /><?= "{$company['kod']} {$company['miasto']}"; ?>
  2674. </td>
  2675. <td style="border:none;text-align:left;vertical-align:top;">
  2676. Gdańsk, dnia <?= date("Y-m-d"); ?>
  2677. </td>
  2678. </tr>
  2679. <tr>
  2680. <td style="border:none;">&nbsp;</td>
  2681. <td style="border:none;">
  2682. <p style="margin:50px 0;">
  2683. Numer klienta: <?= $user->ID; ?>
  2684. <br /><?= "{$user->P_NAME} {$user->P_NAME_SECOND}"; ?>
  2685. <?php // TODO: P_ADRESS_KORESP_1282 ?>
  2686. <br /><?= "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}"; ?>
  2687. <?php if ($user->P_ADDRESS_HOME) { echo "/{$user->P_ADDRESS_HOME}"; } ?>
  2688. <br /><?= "{$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}"; ?>
  2689. </p>
  2690. </td>
  2691. </tr>
  2692. </table>
  2693. <h1 style="text-align:center;margin:20px 10px 10px 10px;font-size:28px;">
  2694. <?= ($wezwanie_ostateczne) ? "OSTATECZNE WEZWANIE DO ZAPŁATY" : "WEZWANIE DO ZAPŁATY"; ?>
  2695. </h1>
  2696. <p style="margin:10px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Na podstawie art. 476 Kodeksu cywilnego (Dz. U. z 1964 r. nr 16, poz. 93, z późn. zmianami) wzywamy do natychmiastowego uregulowania należnej sumy, zgodnie z poniższym zestawieniem.</p>
  2697. <table border=0 cellspacing=0 cellpadding=2 style="width:100%;margin:10px;font-size:small;">
  2698. <thead style="background:#F3F3F3;">
  2699. <tr>
  2700. <th>Podstawa zobowiązania*</th>
  2701. <th>Nr dokumentu</th>
  2702. <?php //<th>Kwota netto</th> ?>
  2703. <th>Kwota brutto</th>
  2704. <th>Data faktury</th>
  2705. <th>Termin płatności</th>
  2706. <th>Pozostało do zapłaty</th>
  2707. </tr>
  2708. </thead>
  2709. <tfoot>
  2710. <tr>
  2711. <td colspan="4" style="border:none;"></td>
  2712. <th style="border-width:2px;border-color:#333;text-align:right;background:#F3F3F3;">Razem:</th>
  2713. <td style="border-width:2px;border-color:#333;font-weight:bold;"><?= Windykacja_FunkcjeL1::formatuj_grosze($razem); ?></td>
  2714. </tr>
  2715. </tfoot>
  2716. <?php foreach ($out_tbl as $out_tr) {
  2717. $k_data = $out_tr['data'];
  2718. $rok = substr($k_data, 0, 4);
  2719. $cls = array();
  2720. if ($add_cls = V::get('class', '', $out_tr)) $cls[] = $add_cls;
  2721. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  2722. //$file_total['PODSTAWA_NUMBER'] = $r['NUMBER']."/".$r['ID_BILLING_PREFIXES'];
  2723. //$file_total['PODSTAWA_DATA'] = date("Y-m-d",$r['BAF_TIMESTAMP']);
  2724. //$file_total['PAYMENT_TERM'] = date("Y-m-d",$r['TERMIN_PL']);
  2725. ?>
  2726. <tr<?= $cls; ?>>
  2727. <td>
  2728. <?= "Faktura Vat"; ?>
  2729. </td>
  2730. <td>
  2731. <?= $out_tr['nr']; ?>
  2732. </td>
  2733. <td>
  2734. <?= $out_tr['winien']; ?>
  2735. </td>
  2736. <td>
  2737. <nobr><?= $out_tr['data']; ?></nobr>
  2738. </td>
  2739. <td>
  2740. <nobr><?= $out_tr['termin']; ?></nobr>
  2741. </td>
  2742. <td>
  2743. <?= $out_tr['pozostalo']; ?>
  2744. </td>
  2745. </tr>
  2746. <?php } ?>
  2747. </table>
  2748. <p style="margin:10px;">Słownie do zapłaty: <span style="border-bottom:1px dotted #000;padding:0 50px;">&nbsp;&nbsp;<b><?= Windykacja_FunkcjeL1::slownie($razem); ?></b>&nbsp;&nbsp;</span></p>
  2749. <p style="margin:10px;background:#eee;text-align:center;">Wymienioną sumę prosimy przekazać na nasz rachunek bankowy <br /><?= $nr_konta; ?> w terminie do dnia <span style="border-bottom:1px dotted #000;padding:0 50px;">&nbsp;&nbsp;<b><?= $wezwanie_termin; ?></b>&nbsp;&nbsp;</span></p>
  2750. <ul style="margin:10px;font-size:small;padding:0 0 0 40px;">
  2751. <li style="line-height:16px;">Od nieterminowych płatności mogą zostać naliczone odsetki ustawowe (art.481 § 1 KC).</li>
  2752. <li style="line-height:16px;">W przypadku nieterminowej zapłaty nabywca zostanie obciążony wszelkimi kosztami windykacji oraz postępowania sądowego, które zostaną poniesione przez sprzedawcę w celu odzyskania należności.</li>
  2753. <li style="line-height:16px;">W przypadku uregulowania należności przed otrzymaniem niniejszego wezwania, proszę potraktować je za bezprzedmiotowe.</li>
  2754. </ul>
  2755. <table style="width:100%;border:none">
  2756. <tr>
  2757. <td colspan="2" style="border:none;">
  2758. <p style="margin:5px 0;font-size:10px;">W razie problemów prosimy o kontakt z Biurem Obsługi Klienta tel. (58) 741-84-10 wew. 2,
  2759. <br> e-mail: bok@biall.net.pl lub z Windykatorem: tel. (58) 741-84-78</p>
  2760. </td>
  2761. </tr>
  2762. </table>
  2763. <table style="width:100%;border:none">
  2764. <tr>
  2765. <td style="width:50%;border:none;">&nbsp;</td>
  2766. <td style="width:50%;border:2px solid #999"><br /><br /><br /><br /></td>
  2767. </tr>
  2768. <tr>
  2769. <td style="border:none;">&nbsp;</td>
  2770. <td style="text-align:center;border:none;">(pieczęć i podpis wierzyciela)</td>
  2771. </tr>
  2772. <tr>
  2773. <td colspan="2" style="border:none;">
  2774. <p style="margin:10px 0;font-size:xx-small;">* Podstawa zobowiązania: Faktura VAT, Rachunek, Umowa, Nota odsetkowa, Nota księgowa, Weksel, Uznanie długu, Ugoda, Kara umowna, Faktura zbiorowa, Wyrok sądowy, Nakaz zapłaty, Pożyczka, inne.</p>
  2775. </td>
  2776. </tr>
  2777. <tr>
  2778. <td colspan="2" style="border:none">
  2779. <p style="margin:8px 0;font-size:x-small;text-align:center">W przypadku nieuregulowania płatności we wskazanym terminie, zgodnie z &bdquo;Ustawą o udostępnianiu informacji gospodarczych z dnia 14 lutego 2003 r. (Dz. U. Nr 50)&rdquo; , informacje o zadłużeniu zostaną przekazane do:</p>
  2780. <p style="margin:8px 0 0 0;font-size:small;text-align:center"><b>Krajowego Rejestru Długów<br />
  2781. Biura Informacji Gospodarczej S.A.<br />
  2782. ul. Armii Ludowej 21, 51-214 Wrocław<br />
  2783. www.krd.pl</b>
  2784. <br />
  2785. <br />
  2786. Informacja o zadłużeniu upubliczniona będzie w systemie KRD do dnia zapłaty lub 10 lat od daty dokonania wpisu.</p>
  2787. </td>
  2788. </tr>
  2789. </table>
  2790. </div>
  2791. </body>
  2792. </html>
  2793. <?php
  2794. die();
  2795. }
  2796. }
  2797. public static function task_update_stats() {
  2798. self::css();
  2799. $to_update_step = 1000;
  2800. $q = V::get('q', '', $_GET);
  2801. $_p = V::get('_p', 0, $_GET, 'int');
  2802. echo'<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".$q."&_p=".$_p . '">' . "Cofnij" . '<img src=icon/back.gif border=0 alt=POWROT>' . '</a>';
  2803. $to_update_total = Windykacja_StatsHelper::get_to_update_total();
  2804. if ($to_update_total <= 0) {
  2805. echo'<p style="color:green">' . "Wszystkie rekordy zaktualizowane" . '</p>';
  2806. return;
  2807. }
  2808. if ($to_update_total > $to_update_step) {
  2809. echo'<br />';
  2810. echo'<a style="color:red" href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&task=stats_update&q=".$q."&_p=".$_p . '">' . "Aktualizuj statusy (" . ($to_update_total - $to_update_step) . ")" . '</a>';
  2811. echo'<br />';
  2812. }
  2813. $to_update_list = Windykacja_StatsHelper::get_to_update_list($to_update_step);
  2814. if (empty($to_update_list)) {
  2815. echo'<p style="color:green">' . "Wszystkie rekordy zaktualizowane" . '</p>';
  2816. return;
  2817. }
  2818. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">to_update_list: ';print_r($to_update_list);echo'</pre>';
  2819. foreach ($to_update_list as $w) {
  2820. //echo'<div class="box box-blue">';
  2821. echo "Nr. klienta: <b>".$w->ID_BILLING_USERS . "</b> ...";
  2822. //echo $w->A_STATUS . ' (' . $w->A_STATUS_UPDATE_DATE . ')';
  2823. $user = Windykacja_StatsModel::get_user_by_id($w->ID_BILLING_USERS);
  2824. if ($user) {
  2825. $billing_docs = Windykacja_StatsModel::getBillDocsByDate($user->ID);
  2826. Windykacja_StatsHelper::update_stats($user, $billing_docs);
  2827. }
  2828. //echo'</div>';// .box-blue
  2829. echo'<br />';
  2830. }
  2831. if ($to_update_total > $to_update_step) {
  2832. echo'<br /><br />';
  2833. echo'<a style="color:red" href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&task=stats_update&q=".$q."&_p=".$_p . '">' . "Aktualizuj statusy (" . ($to_update_total - $to_update_step) . ")" . '</a>';
  2834. }
  2835. }
  2836. public static function getPowodyRezygnacji() {
  2837. // [895].[3888] - DEALS_TABLE.RODZAJ_DZIALANIA_HANDLOWEGO
  2838. $powody = array();
  2839. // $powody['3226'] = "REZYGNACJA FINANSE";
  2840. // $powody['3227'] = "REZYGNACJA SLABA OFERTA";
  2841. // $powody['3121'] = "REZYGNACJA WYPROWADZKA";
  2842. // $powody['3228'] = "REZYGNACJA PROBLEMY TECHNICZNE";
  2843. // $powody['3230'] = "REZYGNACJA WYJAZD";
  2844. // $powody['3229'] = "REZYGNACJA ZLA OBSLUGA BOK";
  2845. // $powody['3123'] = "REZYGNACJA CESJA";
  2846. // $powody['3119'] = "BRAK-BOK (Inne)";
  2847. // $powody['4188'] = "UMOWA_BEZPOSREDNIA";
  2848. // $powody['4189'] = "UMOWA_POSREDNIA";
  2849. // $powody['4190'] = "TELEMARKETING";
  2850. $powody['4192'] = "REZYGNACJA ZMIANA OPERATORA";
  2851. $powody['4193'] = "REZYGNACJA WYPROWADZKA";
  2852. $powody['4194'] = "REZYGNACJA NIEZADOWOLENIE";
  2853. $powody['4195'] = "REZYGNACJA CESJA";
  2854. //$powody['4196'] = "REZYGNACJA FINANSE";
  2855. $powody['4197'] = "REZYGNACJA SLABA OFERTA";
  2856. $powody['4198'] = "REZYGNACJA PROBLEMY TECHNICZNE";
  2857. $powody['4199'] = "REZYGNACJA ZLA OBSLUGA BOK";
  2858. $powody['4200'] = "WYPOWIEDZENIE PRZEZ OPERATORA ZA DLUGI";
  2859. // $powody['4201'] = "UMOWA W BOK ZWYCZAJNA";
  2860. // $powody['4202'] = "REZYGNACJA WYJAZD";
  2861. // $powody['4191'] = "BRAK-BOK (Inne)";
  2862. $powody['19803'] = "REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA";
  2863. $powody['22511'] = "WYPOWIEDZENIE PRZEZ OPERATORA";
  2864. $powody['4213'] = "REZYGNACJA INNE";
  2865. return $powody;
  2866. }
  2867. /**
  2868. * @params $user
  2869. * @params $id_koresp
  2870. */
  2871. public static function task_bok_rozwiazanie_umowy_print($user, $id_koresp) {
  2872. $user_hist_events = Windykacja_StatsHelper::getUserHistStatusEvents($user->ID);
  2873. if (empty($user_hist_events)) {
  2874. echo '<p style="color:red">' . "Brak danych HIST" . '</p>';
  2875. return;
  2876. }
  2877. $v_doc = null;
  2878. foreach ($user_hist_events as $v_hist) {
  2879. if ($v_hist['ID_KORESP'] == $id_koresp) {
  2880. $v_doc = (object)$v_hist;
  2881. break;
  2882. }
  2883. }
  2884. if (!$v_doc) {
  2885. echo '<p style="color:red">' . "Brak danych HIST dla kodresp(".$v_doc->ID_KORESP.")" . '</p>';
  2886. return;
  2887. }
  2888. // params(255): rozwiazanie umowy,9872,3121
  2889. $params = explode(',', $v_doc->params);
  2890. if (count($params) < 3 && $params[0] != 'rozwiazanie umowy') {
  2891. echo '<p style="color:red">' . "Bad params" . '</p>';
  2892. return;
  2893. }
  2894. $koresp = DB::getPDO()->fetchFirstAsObject(" select * from IN7_DZIENNIK_KORESP where ID = :id ", [ ':id' => $id_koresp ]);
  2895. if (!$koresp) {
  2896. echo '<p style="color:red">' . "Koresp not exists!" . '</p>';
  2897. return;
  2898. }
  2899. $nr_umowy = $params[1];
  2900. $powod = $params[2];
  2901. $deal_id = '..........................................................';
  2902. $termin_odlaczenia = '.....................';
  2903. if (count($params) > 4) {
  2904. // $data_arr["params"] = "rozwiazanie umowy,{$nr_umowy},{$powod},{$termin_odlaczenia},{$new_id_deals}";
  2905. $termin_odlaczenia = $params[3];
  2906. $deal_id = $params[4];
  2907. }
  2908. $arg_values = array();
  2909. $arg_values['powod'] = self::getPowodyRezygnacji();
  2910. $com = new stdClass();
  2911. if ($user->BILLING_OWNER == 2) {
  2912. $com->name = 'NET-DAY';
  2913. $com->fullName = 'NET-DAY s.c.';
  2914. $com->address_street = 'ul. Kopeckiego 9/24';
  2915. $com->address_city = '80-809 Gdańsk';
  2916. } else {
  2917. $com->name = 'BIALL-NET';
  2918. $com->fullName = 'BIALL-NET Sp. z o.o.';
  2919. $com->address_street = 'Otomin ul. Słoneczna 43';
  2920. $com->address_city = '80-174 Gdańsk';
  2921. }
  2922. ?>
  2923. <style type="text/css">
  2924. body{margin:12px;font-family:serif;font-size:11px;line-height:14px;}
  2925. td{font-family:verdana; font-size:10px; color:#333;}
  2926. table {border-style:none;}
  2927. table td, table th {padding:0 2px;border-collapse:collapse;}
  2928. table.tbl-bordered {border-style:none;}
  2929. table.tbl-bordered td, table.tbl-bordered th {padding:0 2px;border-style:solid;border-collapse:collapse;}
  2930. table.tbl-bordered th {border-width:1px;border-color:#333;}
  2931. table.tbl-bordered td {border-width:1px;border-color:#333;}
  2932. </style>
  2933. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;"><tr>
  2934. <td>[1612][v3]</td>
  2935. <td style="text-align:right">Nr dziennika przyjęcia pisma <?php echo $com->fullName; ?> <?php echo $koresp->ID_PROJECT; ?>-<?php echo $koresp->ID; ?>/<?php echo substr(date("Y"), 2); ?>
  2936. <br />Gdańsk, dnia: .......................
  2937. </td>
  2938. </tr></table>
  2939. <br /><b>Dane Abonenta</b>
  2940. <br />Imię i Nazwisko / Nazwa firmy: <?php echo "{$user->P_NAME} {$user->P_NAME_SECOND}";?>
  2941. <br />Pesel / nr dowodu osoby reprezentującej firmę: <?php echo $user->P_PESEL; ?>
  2942. <br />Adres zameldowania: ul. <?php echo "{$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}"; ?>
  2943. <br />Nr ID klienta: <?php echo $user->ID; ?>
  2944. <br />Nr ID Umowy: <?php echo $deal_id; ?>
  2945. <?php
  2946. // <br />ID_SERVICES_OLD: ..........................................................
  2947. ?>
  2948. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;margin:40px 0;"><tr>
  2949. <td>&nbsp;</td>
  2950. <td style="width:260px;text-align:left">
  2951. <?php echo $com->fullName; ?><br /><?php echo $com->address_street; ?><br /><?php echo $com->address_city; ?>
  2952. </td>
  2953. </tr></table>
  2954. <p style="margin:50px 0; text-align:center;">ROZWIĄZANIE UMOWY ABONENCKIEJ O ŚWIADCZENIE USŁUG TELEKOMUNIKACYJNYCH NR <sup>[794]</sup></p>
  2955. <p style="margin:0 0 50px 0;text-indent:50px">Proszę o rozwiązanie umowy abonenckiej o świadczeniu Usług Telekomunikacyjnych i odłączenie sygnału <?php echo $com->fullName; ?>. Jednocześnie jestem świadomy/a tego, że jeżeli okres trwania wypowiadanej umowy jeszcze nie uległ zakończeniu to firma <?php echo $com->name; ?> może naliczyć karę za wcześniejsze zerwanie umowy zgodnie z obowiązującym regulaminem i cennikiem.</p>
  2956. <p>Termin odłączenia: <?php echo $termin_odlaczenia; ?>
  2957. <br />(poinformowano o miesięcznym terminie wypowiedzenia, jak również przedstawiono nowe propozycje oferty)</p>
  2958. <p style="margin:30px 0;font-weight:bold;"><sup>[1061]</sup>Powody rezygnacji z Usług (wybierz tylko 1 najważniejszy powód)</p>
  2959. <table cellspacing="0" cellpadding="0" border="1" style="width:100%" class="tbl-bordered">
  2960. <?php foreach ($arg_values['powod'] as $k_powod => $v_label) : ?>
  2961. <?php $sel = ($powod == $k_powod)? "X" : "&nbsp;"; ?>
  2962. <tr><td style="width:26%;"><?php echo $v_label; ?></td><td style="width:5%;text-align:center;"> <?php echo $sel; ?> </td><td></td></tr>
  2963. <?php endforeach; ?>
  2964. </table>
  2965. <table cellspacing="0" cellpadding="0" border="0" style="margin:60px 0;width:100%;">
  2966. <tr>
  2967. <td style="width:15%;">&nbsp;</td>
  2968. <td style="width:20%;border-top:1px dotted #000;text-align:center;">
  2969. Data i podpis pracownika BOK
  2970. </td>
  2971. <td>&nbsp;</td>
  2972. <td style="width:20%;border-top:1px dotted #000;text-align:center;">
  2973. Data i czytelny podpis Klienta
  2974. </td>
  2975. <td style="width:15%;">&nbsp;</td>
  2976. </tr>
  2977. </table>
  2978. <?php
  2979. }
  2980. public static function task_bok_rozwiazanie_umowy(&$user) {
  2981. echo'<script type="text/javascript">'."
  2982. function frm_bok_rozwiazanie_umowy(frm){
  2983. if (frm.id_proj.value=='') {
  2984. alert('Nie podano numeru projektu!');
  2985. } else if (frm.nr_umowy.value=='') {
  2986. alert('Nie podano numeru umowy!');
  2987. } else if (frm.temin_odlaczenia.value=='') {
  2988. alert('Nie podano daty odłączenia!');
  2989. // TODO: powod - radio
  2990. } else {
  2991. return true;
  2992. }
  2993. return false;
  2994. }
  2995. ".'</script>';
  2996. $umowy_l2 = Windykacja_StatsModel::getClientUmowy($user->ID);
  2997. if (empty($umowy_l2)) {
  2998. echo '<p style="color:red">' . "Brak aktualnych umów z klientem" . '</p>';
  2999. return;
  3000. }
  3001. $arg_errors = array();
  3002. $arg_values = array();
  3003. $args = array();
  3004. $args['id_proj'] = V::get('id_proj', '', $_REQUEST, 'int');
  3005. $args['nr_umowy'] = V::get('nr_umowy', '', $_REQUEST, 'int');
  3006. $args['temin_odlaczenia'] = V::get('temin_odlaczenia', '', $_REQUEST);
  3007. $args['powod'] = V::get('powod', '', $_REQUEST, 'int');
  3008. $arg_values['nr_umowy'] = array();
  3009. foreach ($umowy_l2 as $k_id => $v_deal) {
  3010. $arg_values['nr_umowy'][$v_deal['ID']] = $v_deal['ID'] . ' (Nr umowy: ' . $v_deal['P_DEALNUMBER'] . ', ' . $v_deal['P_DEALDATE'] . ' - ' . $v_deal['P_DEALDATE_TERM'] . ')';
  3011. }
  3012. $arg_values['powod'] = self::getPowodyRezygnacji();
  3013. // validate
  3014. if ($args['temin_odlaczenia'] == '') {
  3015. $args['temin_odlaczenia'] = date("Y-m-d", mktime(0, 0, 0, date('m') + 1, date('d'), date('Y')));
  3016. } else {// cehck date format
  3017. if (strlen($args['temin_odlaczenia']) != 10) {
  3018. $arg_errors['temin_odlaczenia'] = "Błędny format daty";
  3019. } else {
  3020. $check_date = explode('-', $args['temin_odlaczenia']);
  3021. if (count($check_date) != 3 || strlen($check_date[0]) != 4 || strlen($check_date[1]) != 2 || strlen($check_date[2]) != 2) {
  3022. $arg_errors['temin_odlaczenia'] = "Błędny format daty";
  3023. } else {
  3024. // ok
  3025. }
  3026. }
  3027. }
  3028. if ($args['id_proj'] <= 0) {
  3029. $arg_errors['id_proj'] = "Nie podano numeru projektu!";
  3030. }
  3031. if ($args['nr_umowy'] <= 0) {
  3032. $arg_errors['nr_umowy'] = "Nie wybrano numeru umowy!";
  3033. }
  3034. if ($args['powod'] <= 0) {
  3035. $arg_errors['powod'] = "Nie wybrano powodu rezygnacji!";
  3036. }
  3037. // add rezygnacja z umowy
  3038. if (1 == V::get('contact_bok_rozwiazanie_umowy_save', 0, $_POST, 'int')) {
  3039. if (!empty($arg_errors)) {
  3040. echo '<p style="color:red">' . "W formularzy wystąpiły błędy:";
  3041. foreach ($arg_errors as $k_field => $v_err) {
  3042. echo '<br />' . $v_err;
  3043. }
  3044. echo '</p>';
  3045. } else {
  3046. $msg_log = array();
  3047. $ret = Windykacja_StatsHelper::update_bok_rozwiazanie_umowy($user, $args['id_proj'], $args['nr_umowy'], $args['powod'], $arg_values['powod'][$args['powod']], $args['temin_odlaczenia'], $msg_log);
  3048. if ($ret) {
  3049. echo '<p style="color:green">' . "Dane zapisano pomyślnie" . '</p>';
  3050. if (!empty($msg_log)) {
  3051. echo '<p style="color:silver">' . implode('<br />', $msg_log) . '</p>';
  3052. }
  3053. $ico_print = '<img src="icon/print.gif" height="16" />';
  3054. echo '<a href="'."?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".V::get('q','', $_REQUEST)."&task="."bok_rozwiazanie_umowy_print"."&user_id=".$user->ID."&id_koresp=".$ret.'">' . $ico_print . " rozwiązanie umowy".'</a>';
  3055. return;
  3056. } else {
  3057. echo '<p style="color:red">' . "Wystąpił błąd podczas zapisu danych" . '</p>';
  3058. if (!empty($msg_log)) {
  3059. echo '<p style="color:silver">' . implode('<br />', $msg_log) . '</p>';
  3060. }
  3061. }
  3062. }
  3063. }
  3064. echo'<form action="" method="post" onsubmit="' . "return frm_bok_rozwiazanie_umowy(this);" . '">';
  3065. echo'<input type="hidden" name="'."contact_bok_rozwiazanie_umowy_save".'" value="'."1".'" />';
  3066. echo '<b>' . "Rozwiązanie umowy abonenckiej o świadczenie usług telekomunikacyjnych" . '</b>';
  3067. echo '<br />' . "ID projektu: ";
  3068. echo '<input type="text" name="'."id_proj".'" value="' . $args['id_proj'] . '" class="i" />';
  3069. echo '<br />' . "Nr umowy: ";
  3070. foreach ($arg_values['nr_umowy'] as $k_id => $v_label) {
  3071. $sel = ($k_id == $args['nr_umowy'])? ' checked="checked"' : '';
  3072. echo '<br />' . "&nbsp;&nbsp;&nbsp;&nbsp;" . '<input type="radio" name="'."nr_umowy".'" value="' . $k_id . '" class="i" ' . $sel . ' />' . " " . $v_label;
  3073. }
  3074. echo '<br />' . "Termin odłączenia: ";
  3075. echo '<input type="text" name="'."temin_odlaczenia".'" value="' . $args['temin_odlaczenia']. '" class="i" />';
  3076. echo '<br />' . "Powód rezygnacji z usług: ";
  3077. foreach ($arg_values['powod'] as $k_id => $v_label) {
  3078. $sel = ($k_id == $args['powod'])? ' checked="checked"' : '';
  3079. echo '<br />' . "&nbsp;&nbsp;&nbsp;&nbsp;" . '<input type="radio" name="'."powod".'" value="' . $k_id . '" class="i" ' . $sel . ' />' . " " . $v_label;
  3080. }
  3081. echo '<br />' . '<input type="submit" value="'."zapisz".'" />';
  3082. echo'</form>';
  3083. }
  3084. }
  3085. class Lay_Html_Toggle {
  3086. public static function start($title, $attrs = array()) {
  3087. $cls = array();
  3088. $cls[] = 'may-hide';
  3089. if (array_key_exists('open', $attrs) && $attrs['open'] == false) $cls[] = 'hide';
  3090. echo'<div class="'.implode(' ', $cls).'">';
  3091. $st = array();
  3092. $st[] = 'margin-bottom:0';
  3093. if (!empty($attrs['color'])) $st[] = 'color:'.$attrs['color'];
  3094. echo'<h4 style="'.implode(';', $st).'">'.$title;
  3095. echo'<a class="btn-hide" href="#" onclick="'."return hide(this);".'">'."-".'</a>';
  3096. echo'<a class="btn-show" href="#" onclick="'."return hide(this);".'">'."+".'</a>';
  3097. echo'</h4>';
  3098. echo'<div class="to-hide">';
  3099. }
  3100. public static function end() {
  3101. echo'</div>';// .to-hide
  3102. echo'</div>';// .may-hide'
  3103. }
  3104. public static function show_js() {
  3105. echo'<script type="text/javascript">'."
  3106. function hide(n){
  3107. jQuery(n).parent().parent().toggleClass('hide');
  3108. return false;
  3109. }
  3110. ".'</script>';
  3111. }
  3112. }