superedit-USERS2_WINDYKACJA_STATUS.php 189 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903
  1. <?php
  2. if (!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
  3. if (!defined('APP_PATH_ROOT')) define('APP_PATH_ROOT', dirname(__FILE__));
  4. if (!defined('APP_PATH_WWW')) define('APP_PATH_WWW', dirname(__FILE__));
  5. if (!defined('APP_PATH_CONFIG')) define('APP_PATH_CONFIG', APP_PATH_ROOT . DS . 'config');
  6. /**
  7. * Module PANEL klienta (?MENU_INIT=USERS2_WINDYKACJA_PANEL) - to mv to USERS2_PANEL
  8. *
  9. */
  10. function USERS2_WINDYKACJA_STATUS() {
  11. global $thiss;
  12. require_once dirname(__FILE__) . '/' . 'se-lib' . '/' . 'Lib.php';
  13. Lib::loadClass('V');
  14. Lib::loadClass('DB');
  15. Lib::loadClass('User');
  16. // router
  17. $q = V::get('q', '', $_REQUEST);
  18. $user_id = V::get('_user_id', 0, $_REQUEST, 'int');
  19. $task = V::get('task', '', $_REQUEST);
  20. if ($task != '') {
  21. if ($task == 'view_faktura') {
  22. $faktura_id = V::get('id', 0, $_REQUEST, 'int');
  23. WindykacjaView::view_faktura($faktura_id);
  24. return;
  25. }
  26. else if ($task == 'zadluzenia') {
  27. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  28. if ($user_id > 0) {
  29. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  30. if (!$user) {
  31. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  32. } else {
  33. WindykacjaView::zadluzenia($user);
  34. return;
  35. }
  36. } else {
  37. echo'<p style="color:red">'."Bledne dane.".'</p>';
  38. }
  39. }
  40. else if ($task == 'wezwanie') {
  41. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  42. if ($user_id > 0) {
  43. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  44. if (!$user) {
  45. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  46. } else {
  47. WindykacjaView::wezwanie($user, $user->PAY_TERM);
  48. return;
  49. }
  50. } else {
  51. echo'<p style="color:red">'."Bledne dane.".'</p>';
  52. }
  53. }
  54. else if ($task == 'wezwanie_ostateczne') {
  55. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  56. if ($user_id > 0) {
  57. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  58. if (!$user) {
  59. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  60. } else {
  61. WindykacjaView::wezwanie_ostateczne($user, $user->PAY_TERM);
  62. return;
  63. }
  64. } else {
  65. echo'<p style="color:red">'."Bledne dane.".'</p>';
  66. }
  67. }
  68. else if ($task == 'bok_rozwiazanie_umowy') {
  69. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  70. if ($user_id > 0) {
  71. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  72. if (!$user) {
  73. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  74. } else {
  75. WindykacjaView::task_bok_rozwiazanie_umowy($user);
  76. return;
  77. }
  78. } else {
  79. echo'<p style="color:red">'."Bledne dane.".'</p>';
  80. }
  81. }
  82. else if ($task == 'bok_rozwiazanie_umowy_print') {
  83. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  84. if ($user_id > 0) {
  85. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  86. if (!$user) {
  87. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  88. } else {
  89. WindykacjaView::task_bok_rozwiazanie_umowy_print($user, V::get('id_koresp', 0, $_REQUEST, 'int'));
  90. return;
  91. }
  92. } else {
  93. echo'<p style="color:red">'."Bledne dane.".'</p>';
  94. }
  95. }
  96. else if ($task == 'stats_update') {
  97. WindykacjaView::task_update_stats();
  98. return;
  99. }
  100. else if ($task == 'export_csv') {
  101. $items = array();
  102. $page_nav = new stdClass();
  103. $page_nav->total = 0;
  104. $page_nav->page_total = 0;
  105. $page_nav->base_link_arr = array('MENU_INIT'=>"USERS2_WINDYKACJA_STATUS", 'q'=>$q);
  106. $page_nav->page_limit = 100000;
  107. $page_nav->page_nr = 0;
  108. $page_nav->base_link_arr['_f'] = V::get('_f', '', $_GET);
  109. if ($page_nav->page_nr > 0) {
  110. $page_nav->base_link_arr['_p'] = $page_nav->page_nr;
  111. }
  112. // sortowanie, filtr wyszukiwania
  113. $page_nav->base_link_arr['_oby'] = 'ID';
  114. $page_nav->base_link_arr['_odir'] = 'DESC';
  115. if (($order_by = V::get('_oby', '', $_GET)) != '') {
  116. $page_nav->base_link_arr['_oby'] = $order_by;
  117. }
  118. if (($order_dir = V::get('_odir', '', $_GET)) != '') {
  119. $page_nav->base_link_arr['_odir'] = $order_dir;
  120. }
  121. if (!empty($q)) {
  122. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  123. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  124. $items = WindykacjaStatsModel::get_users($q, $page_nav->page_limit, $page_nav->page_nr * $page_nav->page_limit, $page_nav->base_link_arr['_oby'], $page_nav->base_link_arr['_odir']);
  125. $page_nav->page_total = count($items);
  126. }
  127. else {
  128. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  129. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  130. $items = WindykacjaStatsModel::get_users($q, $page_nav->page_limit, $page_nav->page_nr * $page_nav->page_limit, $page_nav->base_link_arr['_oby'], $page_nav->base_link_arr['_odir']);
  131. $page_nav->page_total = count($items);
  132. }
  133. if ($page_nav->total > 0) {
  134. WindykacjaView::export_csv($q, $page_nav, $items);
  135. } else {
  136. echo'<p>' . "Brak danych" . '</p>';
  137. }
  138. exit;
  139. }
  140. }
  141. WindykacjaView::css();
  142. if ($user_id > 0) {
  143. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  144. if (!$user) {
  145. echo'<p>'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  146. return;
  147. }
  148. WindykacjaView::user($user);
  149. WindykacjaView::user_umowy($user);
  150. WindykacjaView::user_historia_platnosci($user);
  151. }
  152. else {
  153. // aktualiacja danych
  154. WindykacjaStatsHelper::update_users_table();
  155. $items = array();
  156. $page_nav = new stdClass();
  157. $page_nav->total = 0;
  158. $page_nav->page_total = 0;
  159. $page_nav->base_link_arr = array('MENU_INIT'=>"USERS2_WINDYKACJA_STATUS", 'q'=>$q);
  160. $page_nav->page_limit = 50;
  161. $page_nav->page_nr = V::get('_p', 0, $_REQUEST, 'int');
  162. $page_nav->base_link_arr['_f'] = V::get('_f', '', $_GET);
  163. if ($page_nav->page_nr > 0) {
  164. $page_nav->base_link_arr['_p'] = $page_nav->page_nr;
  165. }
  166. // sortowanie, filtr wyszukiwania
  167. $page_nav->base_link_arr['_oby'] = 'ID';
  168. $page_nav->base_link_arr['_odir'] = 'DESC';
  169. if (($order_by = V::get('_oby', '', $_GET)) != '') {
  170. $page_nav->base_link_arr['_oby'] = $order_by;
  171. }
  172. if (($order_dir = V::get('_odir', '', $_GET)) != '') {
  173. $page_nav->base_link_arr['_odir'] = $order_dir;
  174. }
  175. if (!empty($q)) {
  176. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  177. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  178. $items = WindykacjaStatsModel::get_users($q, $page_nav->page_limit, $page_nav->page_nr * $page_nav->page_limit, $page_nav->base_link_arr['_oby'], $page_nav->base_link_arr['_odir']);
  179. $page_nav->page_total = count($items);
  180. }
  181. else {
  182. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  183. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  184. $items = WindykacjaStatsModel::get_users($q, $page_nav->page_limit, $page_nav->page_nr * $page_nav->page_limit, $page_nav->base_link_arr['_oby'], $page_nav->base_link_arr['_odir']);
  185. $page_nav->page_total = count($items);
  186. }
  187. WindykacjaView::form($q);
  188. $to_update_total = WindykacjaStatsHelper::get_to_update_total();
  189. if ($to_update_total > 0) {
  190. echo'<p>';
  191. echo'<a style="color:red" href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&task=stats_update&q=".$q."&_p=".V::get('_p', 0, $_GET, 'int') . '">' . "Aktualizuj statusy (" . $to_update_total . ")" . '</a>';
  192. echo'</p>';
  193. }
  194. WindykacjaView::items_filters();
  195. if ($page_nav->total > 0) {
  196. WindykacjaView::items($q, $page_nav, $items);
  197. } else {
  198. echo'<p>' . "Brak danych" . '</p>';
  199. }
  200. }
  201. }
  202. class WindykacjaView {
  203. public static function user(&$user) {
  204. $bad_address_task = V::get('bad_address', '', $_POST);
  205. $bad_address_msg = array();
  206. if ($bad_address_task) {
  207. $id_koresp = V::get('ID_KORESP', 0, $_POST, 'int');
  208. if ($id_koresp <= 0) {
  209. $bad_address_msg['error_id_koresp'] = true;
  210. } else {
  211. if ($bad_address_task == 'save') {
  212. if (!WindykacjaStatsHelper::bad_address_save($user, $id_koresp)) {
  213. $bad_address_msg['error'] = true;
  214. } else {
  215. $bad_address_msg['ok'] = true;
  216. }
  217. }
  218. else if ($bad_address_task == 'confirm') {
  219. if (!WindykacjaStatsHelper::bad_address_confirm($user, $id_koresp)) {
  220. $bad_address_msg['error'] = true;
  221. } else {
  222. $bad_address_msg['ok'] = true;
  223. }
  224. }
  225. }
  226. }
  227. $change_status_task = V::get('change_status', '', $_POST);
  228. $change_status_msg = array();
  229. if ($change_status_task) {
  230. if ($change_status_task == 'change') {
  231. $new_status = V::get('new_status', '', $_POST);
  232. $fltr_arr = WindykacjaStatsHelper::get_filters();
  233. if (!array_key_exists($new_status, $fltr_arr)) {
  234. $change_status_msg['error'] = true;
  235. } else {
  236. if (!WindykacjaStatsHelper::change_status_save($user, $new_status)) {
  237. $change_status_msg['error'] = true;
  238. } else {
  239. $change_status_msg['ok'] = true;
  240. }
  241. }
  242. }
  243. }
  244. $set_nr_sprawy_krd_task = V::get('set_nr_sprawy_krd', '', $_POST);
  245. $set_nr_sprawy_krd_msg = array();
  246. if ($set_nr_sprawy_krd_task) {
  247. if ($set_nr_sprawy_krd_task == 'change') {
  248. $nr_sprawy_krd = V::get('nr_sprawy_krd', '', $_POST);
  249. if (!WindykacjaStatsHelper::nr_sprawy_krd_save($user, $nr_sprawy_krd)) {
  250. $set_nr_sprawy_krd_msg['error'] = true;
  251. } else {
  252. $set_nr_sprawy_krd_msg['ok'] = true;
  253. }
  254. }
  255. }
  256. $set_nr_sprawy_sad_task = V::get('set_nr_sprawy_sad', '', $_POST);
  257. $set_nr_sprawy_sad_msg = array();
  258. if ($set_nr_sprawy_sad_task) {
  259. if ($set_nr_sprawy_sad_task == 'change') {
  260. $nr_sprawy_sad = V::get('nr_sprawy_sad', '', $_POST);
  261. if (!WindykacjaStatsHelper::nr_sprawy_sad_save($user, $nr_sprawy_sad)) {
  262. $set_nr_sprawy_sad_msg['error'] = true;
  263. } else {
  264. $set_nr_sprawy_sad_msg['ok'] = true;
  265. }
  266. }
  267. }
  268. $set_nr_sprawy_komornik_task = V::get('set_nr_sprawy_komornik', '', $_POST);
  269. $set_nr_sprawy_komornik_msg = array();
  270. if ($set_nr_sprawy_komornik_task) {
  271. if ($set_nr_sprawy_komornik_task == 'change') {
  272. $nr_sprawy_komornik = V::get('nr_sprawy_komornik', '', $_POST);
  273. if (!WindykacjaStatsHelper::nr_sprawy_komornik_save($user, $nr_sprawy_komornik)) {
  274. $set_nr_sprawy_komornik_msg['error'] = true;
  275. } else {
  276. $set_nr_sprawy_komornik_msg['ok'] = true;
  277. }
  278. }
  279. }
  280. $set_ustalenia_info_task = V::get('set_ustalenia_info', '', $_POST);
  281. $set_ustalenia_info_msg = array();
  282. if ($set_ustalenia_info_task) {
  283. if ($set_ustalenia_info_task == 'change') {
  284. $ustalenia_date = V::get('ustalenia_date', '', $_POST);
  285. $ustalenia_info = V::get('ustalenia_info', '', $_POST);
  286. if (!WindykacjaStatsHelper::ustalenia_info_save($user, $ustalenia_date, $ustalenia_info)) {
  287. $set_ustalenia_info_msg['error'] = true;
  288. } else {
  289. $set_ustalenia_info_msg['ok'] = true;
  290. }
  291. }
  292. }
  293. echo'<h3>';
  294. 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>';
  295. echo ' &raquo; <code style="font-size:normal;color:green;">'."[".$user->id_users."]".'</code>';
  296. echo ' <b>'.$user->P_NAME.' '.$user->P_NAME_SECOND.'</b>';
  297. echo'</h3>';
  298. echo '<table class="" cellspacing="0" cellpadding="0" border="0"><tr><td style="vertical-align:top">';
  299. echo '<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  300. echo '<caption>';
  301. echo "Dane " . (($user->is_firma)? "firmy" : "klienta") . " ";
  302. if ($user->BAD_ADDRESS) {
  303. echo '<form action="" method="POST" style="display:inline">';
  304. echo '<input type="hidden" name="'."bad_address".'" value="'."confirm".'" />';
  305. $js = "if(this.nextSibling.style.display=='none'){this.nextSibling.style.display='block'}else{this.nextSibling.style.display='none'}; return false;";
  306. echo '<input type="button" value="'."popraw adres".'" onclick="'.$js.'" style="margin:1px 2px;padding:0 6px;" />';
  307. echo '<div style="display:none;">';
  308. echo '<label for="ID_KORESP">'."ID Koresp.".'</label>';
  309. echo '<input type="text" name="' . "ID_KORESP" . '" size="5" value="' . "" . '" />';
  310. echo '<input type="submit" value="'."zapisz".'" />';
  311. echo '</div>';
  312. echo '</form>';
  313. } else {
  314. echo '<form action="" method="POST" style="display:inline">';
  315. echo '<input type="hidden" name="'."bad_address".'" value="'."save".'" />';
  316. $js = "if(this.nextSibling.style.display=='none'){this.nextSibling.style.display='block'}else{this.nextSibling.style.display='none'}; return false;";
  317. echo '<input type="button" value="'."zgłoś błędny adres".'" onclick="'.$js.'" style="margin:1px 2px;padding:0 6px;" />';
  318. echo '<div style="display:none;">';
  319. echo '<label for="ID_KORESP">'."ID Koresp.".'</label>';
  320. echo '<input type="text" name="' . "ID_KORESP" . '" size="5" value="' . "" . '" />';
  321. echo '<input type="submit" value="'."zapisz".'" />';
  322. echo '</div>';
  323. echo '</form>';
  324. }
  325. if (!empty($bad_address_msg)) {
  326. if ('id_koresp' == V::get('error', '', $bad_address_msg)) {
  327. echo '<div class="red">'."Podaj poprawny ID Koresp.".'</div>';
  328. } else if (true == V::get('error', false, $bad_address_msg)) {
  329. echo '<div class="red">'."Error!".'</div>';
  330. } else if (true == V::get('ok', false, $bad_address_msg)) {
  331. echo '<div style="color:green">'."Zapisano pomyślnie.".'</div>';
  332. }
  333. }
  334. echo '</caption>';
  335. echo'<tr>';
  336. echo'<th>' . "Adres:" . '</th>';
  337. echo'<td'.(($user->BAD_ADDRESS)? ' style="background-color:#FF7878;"' : '').'>';
  338. echo "ul. ".$user->P_ADDRESS_STREET." ".$user->P_ADDRESS_HOUSE."/".$user->P_ADDRESS_HOME.", ".$user->P_ADDRESS_POST_CODE." ".$user->P_ADDRESS_CITY;
  339. echo'</td>';
  340. echo'</tr>';
  341. echo'<tr>';
  342. echo'<th>' . "Pesel:" . '</th>';
  343. echo'<td>';
  344. if ($user->P_PESEL) {
  345. echo $user->P_PESEL;
  346. } else {
  347. echo '<span style="color:#f00;">'."Brak numeru PESEL!".'</span>';
  348. }
  349. echo'</td>';
  350. echo'</tr>';
  351. echo'<tr>';
  352. echo'<th>' . "Nr telefonu:" . '</th>';
  353. echo'<td>';
  354. if ($user->P_PHONE) {
  355. echo $user->P_PHONE;
  356. } else {
  357. echo '<span style="color:#f00;">'."Brak!".'</span>';
  358. }
  359. echo'</td>';
  360. echo'</tr>';
  361. echo'<tr>';
  362. echo'<th>' . "Nr dowodu:" . '</th>';
  363. echo'<td>';
  364. if ($user->P_OTHER_DOC) {
  365. echo $user->P_OTHER_DOC;
  366. } else {
  367. echo '<span style="color:#f00;">'."Brak!".'</span>';
  368. }
  369. echo'</td>';
  370. echo'</tr>';
  371. echo'<tr>';
  372. echo'<th>' . "e-mail:" . '</th>';
  373. echo'<td>';
  374. if ($user->user_mail_contact) {
  375. echo '<a href="mailto:'.$user->user_mail_contact.'">'.$user->user_mail_contact.'</a>';
  376. } else {
  377. echo '<span style="color:#f00;">'."Brak!".'</span>';
  378. }
  379. echo'</td>';
  380. echo'</tr>';
  381. echo'<tr>';
  382. echo'<th>' . "Klient firmy:" . '</th>';
  383. echo'<td>';
  384. if ($user->BILLING_OWNER == 1) {
  385. echo 'BN - BIALL-NET';
  386. } else if ($user->BILLING_OWNER == 2) {
  387. echo 'ND - NETDAY';
  388. } else {
  389. echo 'nieznany';
  390. }
  391. echo'</td>';
  392. echo'</tr>';
  393. echo'<tr>';
  394. echo'<th>' . "Blokada:" . '</th>';
  395. echo'<td>';
  396. if ($user->STATUS == 9) {
  397. echo '<b style="color:red">' . "ZABLOKOWANY" . '</b>';
  398. } else {
  399. echo 'brak blokady';
  400. }
  401. echo'</td>';
  402. echo'</tr>';
  403. echo '</table>';
  404. echo '</td><td>' . "&nbsp;" . '</td><td style="vertical-align:top">';
  405. 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">';
  406. echo '<caption>';
  407. echo "Status windykacji ";
  408. echo '<code style="font-size:x-small; color:#ccc;">' . "(" . $user->WINDYKACJA_ID . ")" . '</code>';
  409. if ($user->A_STATUS_UPDATE_DATE < date("Y-m-d")) {
  410. 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>';
  411. }
  412. // TODO: zmien status klienta - przypisanie do odpowiedniej grupy
  413. echo '</caption>';
  414. echo '<tr>';
  415. echo '<th>' . "status:" . '</th>';
  416. echo '<td>';
  417. echo $user->A_STATUS;
  418. if (V::get('DBG', '', $_GET, 'int') > 0) {// TODO: TEST
  419. if ($user->A_STATUS == 'waiting-krd') {
  420. echo '<br />' . "wezwanie2_DATE: {$user->wezwanie2_DATE}";
  421. $wzw2 = new stdClass();
  422. $wzw2->Y = intval(substr($user->wezwanie2_DATE, 0, 4));
  423. $wzw2->m = intval(substr($user->wezwanie2_DATE, 5, 2));
  424. $wzw2->d = intval(substr($user->wezwanie2_DATE, 8, 2));
  425. echo '<br />' . "wzw2: {$wzw2->Y}-{$wzw2->m}-{$wzw2->d}";
  426. $wzw2->plus_60 = date("Y-m-d", mktime(0,0,0, $wzw2->m, $wzw2->d + 60, $wzw2->Y));
  427. echo '<br />' . "wezwanie2_DATE + 60 dni: {$wzw2->plus_60}";
  428. if ($wzw2->plus_60 < date("Y-m-d")) {
  429. echo '<br />' . "TODO: przenieść do krd";
  430. }
  431. }
  432. }// TODO: TEST
  433. echo ' &nbsp;&nbsp; <form action="" method="POST" style="display:inline">';
  434. echo '<input type="hidden" name="'."change_status".'" value="'."change".'" />';
  435. $fltr_arr = WindykacjaStatsHelper::get_filters();
  436. $fltr_options = array();
  437. foreach ($fltr_arr as $k_status => $v_arr) {
  438. $fltr_options[$k_status] = reset($v_arr);
  439. }
  440. echo '<select name="' . "new_status" . '">';
  441. foreach ($fltr_options as $k_ind => $v_label) {
  442. $sel = ($k_ind == $user->A_STATUS)? ' selected="selected"' : '';
  443. echo '<option value="' . $k_ind . '"' . $sel . '>' . "{$k_ind}: {$v_label}" . '</option>';
  444. }
  445. echo '</select>';
  446. echo '<input type="submit" value="'."zmień".'" />';
  447. echo '</form>';
  448. echo '</td>';
  449. echo '</tr>';
  450. echo '<tr>';
  451. echo '<th>' . "Nr sprawy w krd" . '</th>';
  452. echo '<td>';
  453. echo ' <form action="" method="POST" style="display:inline">';
  454. echo '<input type="hidden" name="'."set_nr_sprawy_krd".'" value="'."change".'" />';
  455. echo '<input type="text" name="'."nr_sprawy_krd".'" value="'.$user->NR_SPRAWY_KRD.'" />';
  456. echo '<input type="submit" value="'."zmień".'" />';
  457. echo '</form>';
  458. echo '</td>';
  459. echo '</tr>';
  460. echo '<tr>';
  461. echo '<th>' . "Nr sprawy w sądzie" . '</th>';
  462. echo '<td>';
  463. echo ' <form action="" method="POST" style="display:inline">';
  464. echo '<input type="hidden" name="'."set_nr_sprawy_sad".'" value="'."change".'" />';
  465. echo '<input type="text" name="'."nr_sprawy_sad".'" value="'.$user->NR_SPRAWY_SAD.'" />';
  466. echo '<input type="submit" value="'."zmień".'" />';
  467. echo '</form>';
  468. echo '</td>';
  469. echo '</tr>';
  470. echo '<tr>';
  471. echo '<th>' . "Nr sprawy u komornika" . '</th>';
  472. echo '<td>';
  473. echo ' <form action="" method="POST" style="display:inline">';
  474. echo '<input type="hidden" name="'."set_nr_sprawy_komornik".'" value="'."change".'" />';
  475. echo '<input type="text" name="'."nr_sprawy_komornik".'" value="'.$user->NR_SPRAWY_KOMORNIK.'" />';
  476. echo '<input type="submit" value="'."zmień".'" />';
  477. echo '</form>';
  478. echo '</td>';
  479. echo '</tr>';
  480. echo '<tr>';
  481. echo '<th>' . "Aktualne ustalenia z klientem" . '</th>';
  482. echo '<td>';
  483. echo ' <form action="" method="POST" style="display:inline">';
  484. echo '<input type="hidden" name="'."set_ustalenia_info".'" value="'."change".'" />';
  485. echo '<textarea style="width:100%" type="text" name="'."ustalenia_info".'">' . $user->L_APPOITMENT_INFO . '</textarea>';
  486. echo '<br />' . "Data: ";
  487. echo '<input type="text" name="'."ustalenia_date".'" value="'.$user->L_APPOITMENT_DATE.'" />';
  488. echo '<input type="submit" value="'."zmień".'" />';
  489. $js = "this.form.ustalenia_info.value=''; this.form.ustalenia_date.value='0000-00-00'; return false;";
  490. echo '<input type="reset" value="'."wyszyść".'" onclick="'.$js.'" />';
  491. echo '</form>';
  492. echo '</td>';
  493. echo '</tr>';
  494. echo '<tr>';
  495. echo '<th>' . "data ostatniej wpłaty:" . '</th>';
  496. echo '<td>';
  497. if ($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00') {
  498. echo $user->LAST_PAY_DATE;
  499. } else {
  500. echo '---';
  501. }
  502. echo '</td>';
  503. echo '</tr>';
  504. echo '<tr>';
  505. echo '<th>' . "data wymagalności ostatniej faktury:" . '</th>';
  506. echo '<td>';
  507. if ($user->PAY_DATE != '0000-00-00') {
  508. echo $user->PAY_DATE;
  509. }
  510. echo '</td>';
  511. echo '</tr>';
  512. echo '<tr>';
  513. echo '<th>' . "data wymagalności pierwszej faktury:" . '</th>';
  514. echo '<td>';
  515. if ($user->PAY_DATE_FIRST_FVAT != '0000-00-00') {
  516. echo $user->PAY_DATE_FIRST_FVAT;
  517. }
  518. echo '</td>';
  519. echo '</tr>';
  520. echo '<tr>';
  521. echo '<th>' . "termin płatności:" . '</th>';
  522. echo '<td>';
  523. if ($user->PAY_TERM != '0000-00-00') {
  524. echo $user->PAY_TERM;
  525. }
  526. echo '</td>';
  527. echo '</tr>';
  528. echo '</table>';
  529. echo '</td></tr></table>';
  530. // TODO: windykacja_status_info - grupa filtrow do ktorej nalezy klient
  531. Lib::loadClass('CompanyHelper');
  532. $db = DB::getDB();
  533. $comHelper = new CompanyHelper($db);
  534. $usr = $comHelper->getById($user->ID);
  535. $dealsActive = $comHelper->getDealsFull($user->ID, false);
  536. Lib::loadClass('PokazOfertyView');
  537. $pokaz_oferty_view = new PokazOfertyView();
  538. echo $pokaz_oferty_view->print_css();
  539. $pokaz_oferty_view->printServices($usr, $dealsActive);
  540. // aktualny status klienta
  541. echo'<div>';
  542. if ($user->A_STATUS_UPDATE_DATE < date("Y-m-d")) {
  543. }
  544. else {
  545. switch ($user->A_STATUS) {
  546. case 'WAITING': {
  547. echo'<p>' . "Status OK" . '</p>';
  548. }
  549. break;
  550. case 'wezwanie1': {
  551. $default_PAY_TERM = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  552. $frm_errors = array();
  553. $frm_msgs = array();
  554. $frm = array();
  555. $frm['wezwanie1_DATE'] = date("Y-m-d");
  556. $frm['PAY_TERM'] = V::get('PAY_TERM', $default_PAY_TERM, $_POST);
  557. $frm['ID_PROJ'] = V::get('ID_PROJ', 0, $_POST, 'int');
  558. if ('set_wezwanie' == V::get('user_task', '', $_POST)) {
  559. if ($frm['ID_PROJ'] == 0) {
  560. $frm_errors[] = "Brak numeru ID Projketu";
  561. }
  562. if (empty($frm_errors)) {
  563. $ret = WindykacjaStatsHelper::update_user($user, $frm);
  564. if ($ret) {
  565. $frm_msgs[] = "Status klienta został zaktualizowany";
  566. } else {
  567. $frm_errors[] = "Status klienta nie został zaktualizowany";
  568. }
  569. }
  570. }
  571. echo '<div class="box box-blue" style="margin:6px 0;">';
  572. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO < 0) {
  573. echo "Saldo klienta: " . '<b style="color:#f00">' . "{$user->PAY_SALDO} zł" . '</b>' . " ({$user->PAY_FVAT} niezapłaconych faktur)" . '<br />';
  574. echo'<br />';
  575. }
  576. echo '<b style="color:#0B0B8E">'."Wysłać wezwanie do zapłaty".'</b>'.'<br />';
  577. if (!empty($frm_errors)) {
  578. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  579. }
  580. if (!empty($frm_msgs)) {
  581. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  582. }
  583. echo'<form action="" method="post">';
  584. echo'<input type="hidden" name="'."user_task".'" value="'."set_wezwanie".'" />';
  585. echo "Data płatności: ";
  586. echo'<input type="text" name="'."PAY_TERM".'" value="'.$frm['PAY_TERM'].'" />';
  587. echo " ID Projektu: ";
  588. echo'<input type="text" name="'."ID_PROJ".'" value="'.$frm['ID_PROJ'].'" />';
  589. echo'<input type="submit" value="'."Zapisz".'" />';
  590. echo'</form>';
  591. if ($user->wezwanie1_DATE != '0000-00-00') {
  592. echo'<br />';
  593. $ico_print = '<img src="icon/print.gif" height="16" />';
  594. 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>';
  595. }
  596. echo '</div>';// .box-blue
  597. }
  598. break;
  599. case 'waiting-wezwanie2': {// TODO: only auto update ?
  600. echo '<div class="box box-blue" style="margin:6px 0;">';
  601. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO < 0) {
  602. echo "Saldo klienta: " . '<b style="color:#f00">' . $user->PAY_SALDO . " zł" . '</b>' . " (" . $user->PAY_FVAT ." niezapłaconych faktur)" . '<br />';
  603. echo'<br />';
  604. }
  605. echo '<b style="color:#0B0B8E">'."Oczekiwanie na uzbieranie kwoty 300zł (firmy 500zł)".'</b>'.'<br />';
  606. if (!empty($frm_errors)) {
  607. echo'<p style="color:#f00">';
  608. echo implode('<br />', $frm_errors);
  609. echo'</p>';
  610. }
  611. echo'<form action="" method="post">';
  612. // echo'<input type="hidden" name="'."user_task".'" value="'."set_".'" />';
  613. // echo'<input type="submit" value="'."Zapisz".'" />';
  614. echo'</form>';
  615. if ($user->wezwanie1_DATE != '0000-00-00') {
  616. echo'<br />';
  617. $ico_print = '<img src="icon/print.gif" height="16" />';
  618. 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>';
  619. }
  620. echo '</div>';// .box-blue
  621. }
  622. break;
  623. case 'wezwanie2': {
  624. $default_PAY_TERM = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  625. $frm_msgs = array();
  626. $frm_errors = array();
  627. $frm = array();
  628. $frm['wezwanie2_DATE'] = date("Y-m-d");
  629. $frm['PAY_TERM'] = V::get('PAY_TERM', $default_PAY_TERM, $_POST);
  630. $frm['ID_PROJ'] = V::get('ID_PROJ', 0, $_POST, 'int');
  631. if ('set_wezwanie2' == V::get('user_task', '', $_POST)) {
  632. if ($frm['ID_PROJ'] == 0) {
  633. $frm_errors[] = "Brak numeru ID korespondencji";
  634. }
  635. if (empty($frm_errors)) {
  636. $ret = WindykacjaStatsHelper::update_user($user, $frm);
  637. if ($ret) {
  638. $frm_msgs[] = "Status klienta został zaktualizowany";
  639. } else {
  640. $frm_errors[] = "Status klienta nie został zaktualizowany";
  641. }
  642. }
  643. }
  644. echo '<div class="box box-blue" style="margin:6px 0;border-color:#666;">';
  645. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO < 0) {
  646. echo "Saldo klienta: " . '<b style="color:#f00">' . "{$user->PAY_SALDO} zł" . '</b>' . " ({$user->PAY_FVAT} niezapłaconych faktur)" . '<br />';
  647. echo'<br />';
  648. }
  649. echo '<b style="color:#0B0B8E">'."Wysłać ostateczne wezwanie do zapłaty".'</b>'.'<br />';
  650. if (!empty($frm_errors)) {
  651. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  652. }
  653. if (!empty($frm_msgs)) {
  654. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  655. }
  656. echo'<form action="" method="post">';
  657. echo'<input type="hidden" name="'."user_task".'" value="'."set_wezwanie2".'" />';
  658. echo "Data płatności: ";
  659. echo'<input type="text" name="'."PAY_TERM".'" value="'.$frm['PAY_TERM'].'" />';
  660. echo " ID Projektu: ";
  661. echo'<input type="text" name="'."ID_PROJ".'" value="'.$frm['ID_PROJ'].'" />';
  662. echo'<input type="submit" value="'."Zapisz".'" />';
  663. echo'</form>';
  664. if ($user->wezwanie2_DATE != '0000-00-00') {
  665. echo'<br />';
  666. $ico_print = '<img src="icon/print.gif" height="16" />';
  667. 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>';
  668. }
  669. echo '</div>';// .box-blue
  670. }
  671. break;
  672. case 'waiting-krd': {
  673. if ($user->wezwanie2_DATE != '0000-00-00') {
  674. echo'<br />';
  675. $ico_print = '<img src="icon/print.gif" height="16" />';
  676. 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>';
  677. }
  678. }
  679. break;
  680. default:
  681. echo'<p>' . "TODO: (".$user->A_STATUS.")" . '</p>';
  682. }
  683. }
  684. //if ($user->BA_TIMESTAMP) {
  685. // echo "Stan wzajemnych rozrachunków:";
  686. // 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>";
  687. // echo", i jest to stan na dzień ".date("Y-m-d",$user->BA_TIMESTAMP)." ";
  688. //}
  689. // phone contact
  690. $phone_status_info = WindykacjaStatsHelper::get_phone_status_info($user);
  691. $frm_errors = array();
  692. $frm_msgs = array();
  693. if (1 == V::get('phone_contact_save', 0, $_POST, 'int')) {
  694. if ('' == ($phone_status = V::get('phone_status', '', $_POST))) {
  695. $frm_errors[] = "Nic nie zaznaczono!";
  696. } else {
  697. if (!array_key_exists($phone_status, $phone_status_info)) {
  698. $frm_errors[] = "Nieprawidłowa wartość!";
  699. } else {
  700. $ret = WindykacjaStatsHelper::update_phone_status($user, $phone_status);
  701. if ($ret) {
  702. $frm_msgs[] = "Dane zapisano pomyślnie";
  703. } else {
  704. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  705. }
  706. }
  707. }
  708. }
  709. // add old id_koresp to hist (events)
  710. if (1 == V::get('contact_add_id_koresp_save', 0, $_POST, 'int')) {
  711. if (($id_koresp = V::get('id_koresp', '', $_POST, 'int')) <= 0) {
  712. $frm_errors[] = "Nie podano numeru korespondencji!";
  713. } else {
  714. $koresp_type = V::get('koresp_type', '', $_POST);
  715. $ret = WindykacjaStatsHelper::update_old_id_koresp($user, $id_koresp, $koresp_type);
  716. if ($ret) {
  717. $frm_msgs[] = "Dane zapisano pomyślnie";
  718. } else {
  719. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  720. }
  721. }
  722. }
  723. echo'<script type="text/javascript">'."
  724. function frm_kontakt_phone_submit_callback(frm){
  725. var len=frm.phone_status.length;
  726. var val='';
  727. for(var i=0; i < len; i++){
  728. if(frm.phone_status[i].checked){
  729. var val = frm.phone_status[i].value;
  730. }
  731. }
  732. if (val!='') {
  733. return true;
  734. } else {
  735. alert('Nic nie zaznaczono.');
  736. }
  737. return false;
  738. }
  739. function frm_kontakt_add_id_koresp(frm){
  740. var val=frm.id_koresp.value;
  741. if (val!='') {
  742. return true;
  743. } else {
  744. alert('Nie podano numeru korespondencji.');
  745. }
  746. return false;
  747. }
  748. ".'</script>';
  749. echo'<div class="box" style="margin:6px 0;border-color:#666;">';
  750. if (!empty($frm_errors)) {
  751. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  752. }
  753. if (!empty($frm_msgs)) {
  754. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  755. }
  756. echo'<form action="" method="post" onsubmit="' . "return frm_kontakt_phone_submit_callback(this);" . '">';
  757. echo '<table cellspacing="0" cellpadding="0" border="0" class="tbl-td-top"><tr>';
  758. echo '<td style="padding:0 20px 0 0;color:blue;">';
  759. echo'<img src="' . "icon/phone.png" . '" alt="tel" />';
  760. echo " kontakt z klientem ";
  761. echo '</td>';
  762. echo '<td style="padding:0 5px;text-align:right">';
  763. echo " Co ustalono: ";
  764. echo '</td>';
  765. echo '<td>';
  766. echo'<div id="'."kontakt-phone".'">';
  767. echo'<input type="hidden" name="'."phone_contact_save".'" value="'."1".'" />';
  768. foreach ($phone_status_info as $k_type => $v_info) {
  769. echo'<input type="radio" name="'."phone_status".'" value="' . $k_type . '" />'; echo " " . $v_info['label'] . " " . $v_info['date'] . '<br />';
  770. }
  771. echo'</div>';
  772. echo '</td>';
  773. echo '<td>';
  774. echo'<input type="submit" value="'."zapisz".'" />';
  775. echo '</td>';
  776. echo '</tr></table>';
  777. echo'</form>';
  778. echo'</div>';// .box
  779. echo'<div class="box" style="margin:6px 0;border-color:#666;">';
  780. echo'<form action="" method="post" onsubmit="' . "return frm_kontakt_add_id_koresp(this);" . '">';
  781. echo'<input type="hidden" name="'."contact_add_id_koresp_save".'" value="'."1".'" />';
  782. echo "Dodaj korespondencję z klientem - ID_KORESP: ";
  783. echo '<input type="text" name="'."id_koresp".'" value="' . "" . '" class="i" />';
  784. echo ' <input type="submit" value="'."zapisz".'" />';
  785. echo'</form>';
  786. echo'</div>';// .box
  787. echo'<div class="box" style="margin:6px 0;border-color:#666;">';
  788. $ico_print = '<img src="icon/print.gif" height="16" />';
  789. 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>';
  790. echo'</div>';// .box
  791. echo'</div>';
  792. }
  793. public static function items_filters() {
  794. $filter_arr = WindykacjaStatsHelper::get_filters();
  795. $filter_selected = WindykacjaStatsHelper::get_filter_selected();
  796. $status_cnt = WindykacjaStatsHelper::get_status_count();// {cnt, suma_zaleglosci}
  797. // pomin filtry
  798. unset($filter_arr['15']);
  799. unset($filter_arr['blokada']);
  800. unset($filter_arr['WAITING']);
  801. $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');
  802. $sub_filters_arr = array();
  803. foreach ($sub_filters as $v_filter_name) {
  804. if (array_key_exists($v_filter_name, $filter_arr)) {
  805. $sub_filters_arr[$v_filter_name] = $filter_arr[$v_filter_name];
  806. unset($filter_arr[$v_filter_name]);
  807. }
  808. }
  809. $zewn_filters = array('waiting-sad', 'sad');
  810. $zewn_filters_arr = array();
  811. foreach ($zewn_filters as $v_filter_name) {
  812. if (array_key_exists($v_filter_name, $filter_arr)) {
  813. $zewn_filters_arr[$v_filter_name] = $filter_arr[$v_filter_name];
  814. unset($filter_arr[$v_filter_name]);
  815. }
  816. }
  817. echo'<table cellspacing="0" cellpadding="0" border="1" style="background:#ddd;border-color:#666;"><tr><td style="vertical-align:top">';
  818. if (!empty($filter_selected)) {
  819. echo'<a href="' . "??MENU_INIT=USERS2_WINDYKACJA_STATUS" . '" title="'."Kasuj filtry".'">' . '<img src="icon/del.png" height="16" alt="'."Kasuj filtry".'" />' . '</a>';
  820. echo '</td><td>';
  821. }
  822. echo'<table class="tbl-view historia-platnosci-filters" cellspacing="0" cellpadding="0" border="1">';
  823. echo'<thead>';
  824. echo'<tr>';
  825. foreach ($filter_arr as $k => $v_arr) {
  826. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  827. echo'<td' . $cls . '>';
  828. if ($desc = V::get('desc', '', $v_arr)) {
  829. echo '<span title="' . end($desc) . '">' . reset($desc) . '</span>';
  830. }
  831. echo'</td>';
  832. }
  833. if (!empty($zewn_filters_arr)) {
  834. echo '<td colspan="'.count($zewn_filters_arr).'" style="background:#f00;color:#fff;font-weight:bold;">' . "Windykacja zewnętrzna" . '</td>';
  835. }
  836. echo'</tr>';
  837. echo'<tr>';
  838. foreach ($filter_arr as $k => $v_arr) {
  839. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  840. echo'<td' . $cls . '>';
  841. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  842. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  843. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  844. $stat_cnt = 0;
  845. if (array_key_exists($k, $status_cnt)) {
  846. $stat_cnt = $status_cnt[$k]->cnt;
  847. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  848. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  849. echo '<br />' . '<span style="color:#f00;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  850. } else {
  851. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  852. }
  853. echo'</td>';
  854. }
  855. if (!empty($zewn_filters_arr)) {
  856. foreach ($zewn_filters_arr as $k => $v_arr) {
  857. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  858. echo'<td' . $cls . '>';
  859. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  860. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  861. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  862. $stat_cnt = 0;
  863. if (array_key_exists($k, $status_cnt)) {
  864. $stat_cnt = $status_cnt[$k]->cnt;
  865. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  866. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  867. echo '<br />' . '<span style="color:#f00;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  868. } else {
  869. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  870. }
  871. echo'</td>';
  872. }
  873. }
  874. echo'</tr>';
  875. echo'</thead>';
  876. echo'</table>';
  877. if (!empty($sub_filters_arr)) {
  878. echo '<table class="tbl-view historia-platnosci-subfilters" cellspacing="0" cellpadding="0" border="1">';
  879. echo '<thead><tr>';
  880. foreach ($sub_filters_arr as $k => $v_arr) {
  881. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  882. echo'<td' . $cls . '>';
  883. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  884. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  885. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  886. $stat_cnt = 0;
  887. if (array_key_exists($k, $status_cnt)) {
  888. $stat_cnt = $status_cnt[$k]->cnt;
  889. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  890. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  891. echo '<br />' . '<span style="color:#000;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  892. } else {
  893. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  894. }
  895. echo'</td>';
  896. }
  897. echo '</tr></thead>';
  898. echo '</table>';
  899. }
  900. echo '</td></tr></table>';
  901. echo'<br />';
  902. }
  903. public static function items($q, &$page_nav, &$items) {
  904. $page_nav->links = array();
  905. $out_link_arr = V::copy($page_nav->base_link_arr);
  906. $out_link_arr['_p'] = 0;
  907. $out_link = V::make_link('', $out_link_arr);
  908. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Pierwsza strona".'">'."|&lt;&lt;".'</a>';
  909. if ($page_nav->page_nr > 0) {
  910. $out_link_arr = V::copy($page_nav->base_link_arr);
  911. $out_link_arr['_p'] = $page_nav->page_nr - 1;
  912. $out_link = V::make_link('', $out_link_arr);
  913. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Poprzednia strona".'">'."&lt;&lt; -{$page_nav->page_limit}".'</a>';
  914. } else {
  915. $page_nav->links[] = " &lt;&lt; ";
  916. }
  917. $page_nav->links[] = '<span>'.($page_nav->page_nr * $page_nav->page_limit).'</span>';
  918. $page_nav->links[] = '<span title="'."Znaleziono ".$page_nav->total." rekordów".'">'."({$page_nav->total}) ".'</span>';
  919. $out_link_arr = V::copy($page_nav->base_link_arr);
  920. $out_link_arr['_p'] = $page_nav->page_nr + 1;
  921. $out_link = V::make_link('', $out_link_arr);
  922. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Nastepna strona".'">'."+{$page_nav->page_limit} &gt;&gt;".'</a>';
  923. $out_link_arr = V::copy($page_nav->base_link_arr);
  924. $out_link_arr['_p'] = $page_nav->last_page_nr;
  925. $out_link = V::make_link('', $out_link_arr);
  926. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Ostatnia strona".'">'."&gt;&gt;|".'</a>';
  927. $page_nav_out = '<div class="tbl-page-nav">' . implode(" ", $page_nav->links);
  928. $out_link_arr = V::copy($page_nav->base_link_arr);
  929. $out_link_arr['task'] = 'export_csv';
  930. $out_link = V::make_link('', $out_link_arr);
  931. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">export csv</a>';
  932. $page_nav_out .= '</div>';
  933. if (empty($items)) {
  934. echo'<p style="color:red">'."Brak danych".'</p>';
  935. return;
  936. }
  937. echo $page_nav_out;
  938. $cols_order_by = WindykacjaStatsModel::get_order_by_fields();
  939. $cols = array();
  940. $cols['ID_BILLING_USERS'] = array('label'=>'Nr klienta', 'title'=>'ID_BILLING_USERS');
  941. $cols['is_firma'] = array('label'=>'F', 'title'=>'is_firma: Firma 1 - tak, 0 nie');
  942. $cols['BILLING_OWNER'] = array('label'=>'COM', 'title'=>'BILLING_OWNER: Klient firmy 1 - BIALL-NET, 2 - NETDAY');
  943. $cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
  944. $cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
  945. $cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
  946. $cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
  947. $cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
  948. $cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
  949. $cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
  950. $cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności<br> pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
  951. $cols['PAY_DATE'] = array('label'=>'data wymagalności<br> ostatniej faktury', 'title'=>'PAY_DATE');
  952. $cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
  953. $cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
  954. echo'<table class="tbl-view historia-platnosci" border="1" cellspacing="0" cellpaddin="0">';
  955. echo'<thead>';
  956. echo'<tr>';
  957. foreach ($cols as $k_field => $v_params) {
  958. echo'<th' . ((!empty($v_params['title'])) ? ' title="' . $v_params['title'] . '"' : '') . '>';
  959. echo $v_params['label'];
  960. if (in_array($k_field, $cols_order_by)) {
  961. $sel_oby = (isset($page_nav->base_link_arr['_oby']))? $page_nav->base_link_arr['_oby'] : '';
  962. $sel_odir = 'DESC';
  963. if ($k_field == $sel_oby) {
  964. $sel_odir = (isset($page_nav->base_link_arr['_odir']))? $page_nav->base_link_arr['_odir'] : '';
  965. $sel_odir = ($sel_odir == 'ASC')? 'ASC' : 'DESC';
  966. }
  967. $out_link_arr = V::copy($page_nav->base_link_arr);
  968. $out_link_arr['_p'] = 0;
  969. $out_link_arr['_oby'] = $k_field;
  970. $out_link_arr['_odir'] = ($sel_odir == 'DESC')? 'ASC' : 'DESC';
  971. $out_link = V::make_link('', $out_link_arr);
  972. echo ' <a style="' . (($k_field == $sel_oby)? 'color:red;' : '') . 'text-decoration:none" href="' . $out_link . '">' . (($sel_odir == 'DESC')? 'v' : '^') . '</a>';
  973. }
  974. echo '</th>';
  975. }
  976. echo'</tr>';
  977. echo'</thead>';
  978. echo'<tbody>';
  979. $t = 0;
  980. foreach ($items as $k_id => $user) {
  981. echo'<tr class="row-'.($t = 1 - $t).'">';
  982. echo'<td>';
  983. echo'<nobr>';
  984. $out_link_arr = V::copy($page_nav->base_link_arr);
  985. $out_link_arr['_user_id'] = $k_id;
  986. $out_link = V::make_link('', $out_link_arr);
  987. echo '<a href="' . $out_link . '">'.'<img src="icon/edit.png" height="16" alt="Edit">'.'</a>';
  988. echo " ";
  989. echo '<a href="' . $out_link . '">'.$k_id.'</a>';
  990. echo'</nobr>';
  991. echo'</td>';
  992. echo '<td>';
  993. echo $user->is_firma;
  994. echo '</td>';
  995. echo '<td>';
  996. if ($user->BILLING_OWNER == 1) {
  997. echo '<span title="' . "BIALL-NET" . '">' . 'BN' . '</span>';
  998. } else if ($user->BILLING_OWNER == 2) {
  999. echo '<span title="' . "NETDAY" . '">' . 'ND' . '</span>';
  1000. } else {
  1001. echo '0';
  1002. }
  1003. echo '</td>';
  1004. echo '<td>';
  1005. if ($user->STATUS == 9) {
  1006. echo '<b style="color:red" title="' . "ZABLOKOWANY" . '">' . "Z" . '</b>';
  1007. } else {
  1008. echo '<em style="color:silver" title="' . "brak blokady" . '">' . "0" . '</em>';
  1009. }
  1010. echo '</td>';
  1011. echo'<td>';
  1012. $cell_out = $user->P_NAME.' '.$user->P_NAME_SECOND;
  1013. echo '<b title="' . $cell_out . '">' . ((strlen($cell_out) > 30)? substr($cell_out, 0, 30) . ' ...' : $cell_out) . '</b>';
  1014. echo'</td>';
  1015. echo'<td'.(($user->BAD_ADDRESS)? ' style="background-color:#FF7878;"' : '').'>';
  1016. $cell_out = "ul. " . $user->P_ADDRESS_STREET . " " . $user->P_ADDRESS_HOUSE . "/" . $user->P_ADDRESS_HOME . ", " . $user->P_ADDRESS_POST_CODE . " " . $user->P_ADDRESS_CITY;
  1017. 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>';
  1018. echo'</td>';
  1019. echo'<td>';
  1020. echo '<nobr>';
  1021. switch ($user->A_STATUS) {
  1022. case 'WAITING':
  1023. echo '<span style="color:#666;">' . $user->A_STATUS . '</span>';
  1024. break;
  1025. default:
  1026. echo $user->A_STATUS;
  1027. }
  1028. echo '</nobr>';
  1029. echo'</td>';
  1030. echo'<td>';
  1031. if ($user->A_STATUS_UPDATE_DATE != '0000-00-00') {
  1032. echo $user->A_STATUS_UPDATE_DATE;
  1033. } else {
  1034. echo '<span style="color:#666;">' . $user->A_STATUS_UPDATE_DATE . '</span>';
  1035. }
  1036. echo'</td>';
  1037. echo'<td>';
  1038. echo '<nobr>';
  1039. if ($user->PAY_SALDO != 0) {
  1040. $col = ($user->PAY_SALDO > 0)? '#333' : '#f00';
  1041. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO} zł" . '</span>';
  1042. } else {
  1043. echo'<span style="color:#666">' . "0" . '</span>';
  1044. }
  1045. echo '</nobr>';
  1046. echo'</td>';
  1047. echo'<td>';
  1048. if ($user->PAY_FVAT > 0) {
  1049. $st = ($user->PAY_FVAT > 1)? ' style="color:#f00"' : '';
  1050. echo' <span title="' . "{$user->PAY_FVAT} nieopłaconych faktur" . '"'.$st.'>' . $user->PAY_FVAT . '</span>';
  1051. } else {
  1052. echo $user->PAY_FVAT;
  1053. }
  1054. echo'</td>';
  1055. echo'<td>';
  1056. if ($user->PAY_DATE_FIRST_FVAT != '0000-00-00') {
  1057. echo $user->PAY_DATE_FIRST_FVAT;
  1058. }
  1059. echo'</td>';
  1060. echo'<td>';
  1061. if ($user->PAY_DATE != '0000-00-00') {
  1062. echo $user->PAY_DATE;
  1063. }
  1064. echo'</td>';
  1065. echo'<td>';
  1066. if ($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00') {
  1067. echo $user->LAST_PAY_DATE;
  1068. } else {
  1069. echo '---';
  1070. }
  1071. echo'</td>';
  1072. echo'<td>';
  1073. if ($user->PAY_TERM != '0000-00-00') {
  1074. echo $user->PAY_TERM;
  1075. }
  1076. echo'</td>';
  1077. //, w.`USER_PAY_TERM_ADD`
  1078. //, w.`L_APPOITMENT_DATE`
  1079. //, w.`L_APPOITMENT_USER`
  1080. echo'</tr>';
  1081. }
  1082. echo'</tbody>';
  1083. echo'</table>';
  1084. echo $page_nav_out;
  1085. }
  1086. public static function export_csv($q, &$page_nav, &$items) {
  1087. if (empty($items)) {
  1088. echo "Brak danych";
  1089. return;
  1090. }
  1091. $cols_order_by = WindykacjaStatsModel::get_order_by_fields();
  1092. $cols = array();
  1093. $cols['ID_BILLING_USERS'] = array('label'=>'Nr klienta', 'title'=>'ID_BILLING_USERS');
  1094. $cols['is_firma'] = array('label'=>'F', 'title'=>'is_firma: Firma 1 - tak, 0 nie');
  1095. $cols['BILLING_OWNER'] = array('label'=>'COM', 'title'=>'BILLING_OWNER: Klient firmy 1 - BIALL-NET, 2 - NETDAY');
  1096. $cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
  1097. $cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
  1098. $cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
  1099. $cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
  1100. $cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
  1101. $cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
  1102. $cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
  1103. $cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
  1104. $cols['PAY_DATE'] = array('label'=>'data wymagalności ostatniej faktury', 'title'=>'PAY_DATE');
  1105. $cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
  1106. $cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
  1107. $out_cols = array();
  1108. foreach ($cols as $k_field => $v_params) {
  1109. $out_cols[] = '"' . $v_params['label'] . '"';
  1110. }
  1111. echo implode(";", $out_cols) . "<br />\n";
  1112. foreach ($items as $k_id => $user) {
  1113. $out_cols = array();
  1114. $out_cols[] = '"' . $k_id . '"';
  1115. $out_cols[] = '"' . $user->is_firma . '"';
  1116. if ($user->BILLING_OWNER == 1) {
  1117. $out_cols[] = '"' . 'BN' . '"';
  1118. } else if ($user->BILLING_OWNER == 2) {
  1119. $out_cols[] = '"' . 'ND' . '"';
  1120. } else {
  1121. $out_cols[] = '"' . '0' . '"';
  1122. }
  1123. $out_cols[] = '"' . (($user->STATUS == 9)? "Z" : "0") . '"';
  1124. $out_cols[] = '"' . $user->P_NAME.' '.$user->P_NAME_SECOND . '"';
  1125. $out_cols[] = '"' . "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}" . '"';
  1126. $out_cols[] = '"' . $user->A_STATUS . '"';
  1127. $out_cols[] = '"' . $user->A_STATUS_UPDATE_DATE . '"';
  1128. $out_cols[] = '"' . (($user->PAY_SALDO != 0)? "{$user->PAY_SALDO} zł" : "0") . '"';
  1129. $out_cols[] = '"' . $user->PAY_FVAT . '"';
  1130. $out_cols[] = '"' . (($user->PAY_DATE_FIRST_FVAT != '0000-00-00')? $user->PAY_DATE_FIRST_FVAT : '') . '"';
  1131. $out_cols[] = '"' . (($user->PAY_DATE != '0000-00-00')? $user->PAY_DATE : '') . '"';
  1132. $out_cols[] = '"' . (($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00')? $user->LAST_PAY_DATE : '---') . '"';
  1133. $out_cols[] = '"' . (($user->PAY_TERM != '0000-00-00')? $user->PAY_TERM : '') . '"';
  1134. echo implode(";", $out_cols) . "<br />\n";
  1135. }
  1136. }
  1137. public static function form($q = '') {
  1138. SEF("MENU");
  1139. MENU();
  1140. echo'<div class="box box-blue">';
  1141. echo'<form action="" method="get">';
  1142. echo'<input type="hidden" name="'."MENU_INIT".'" value="'."USERS2_WINDYKACJA_STATUS".'" />';
  1143. echo'<p style="margin:0;">'."Wyszukaj klienta: ";
  1144. echo'<input type="text" name="'."q".'" value="'.htmlspecialchars($q).'" />';
  1145. echo " ".'<em>'."(imie, nazwisko lub numer klineta)".'</em>';//, adres
  1146. echo " ".'<input type="submit" value="'."szukaj".'" />';
  1147. echo'</p>';
  1148. echo'</form>';
  1149. echo'</div>';// .box-blue
  1150. }
  1151. public static function css() {
  1152. echo'<style type="text/css">'."
  1153. body{font-family:arial;}
  1154. .box{border:1px solid #999;padding:5px;margin:5px;}
  1155. .box-center{border:1px solid #999;padding:5px;margin:5px auto;}
  1156. .box-silver{border-color:#999;}
  1157. .box-red{border-color:#f00;}
  1158. .box-blue{border-color:#00f;}
  1159. .box-green{border-color:#008000;}
  1160. .box-hover-active{background:#fff;border-color:#999;}
  1161. .box-hover-active:hover{background:#eee;border-color:#000;}
  1162. .btn-box{margin:0 2px 0 0;padding:0 3px;background:#bbb;color:#fff;text-decoration:none;border:0;font-weight:bold;}
  1163. .tbl-page-nav{font-size:small;}
  1164. .tbl-page-nav a{font-size:small; text-decoration:none;}
  1165. .tbl-page-nav a:hover{background-color:#eee;}
  1166. .tbl-view {margin:0;font-size:small;}
  1167. .tbl-view caption{text-align:left;font-style:italic;font-size:medium;}
  1168. .tbl-view caption em{padding:0 5px;font-size:13px;font-style:normal;}
  1169. .tbl-view th{padding:0 3px;font-size:small;}
  1170. .tbl-view td{padding:0 3px;}
  1171. .tbl-view .r{text-align:right;}
  1172. .tbl-view thead th {background:#F3F3F3;}
  1173. .tbl-view thead td {background:#F3F3F3;}
  1174. .historia-platnosci-filters thead td{text-align:center;}
  1175. .historia-platnosci-filters td.selected {background-color:#FFE6E9;}
  1176. .historia-platnosci-filters td:hover {background-color:#E6FFE6;}
  1177. .historia-platnosci-subfilters thead td{text-align:center;background:#fff;}
  1178. .historia-platnosci-subfilters td.selected {background-color:#FFE6E9;}
  1179. .historia-platnosci-subfilters td:hover {background-color:#E6FFE6;}
  1180. .tbl-td-top th,
  1181. .tbl-td-top td {vertical-align:top;}
  1182. ".'</style>';
  1183. }
  1184. public static function user_umowy(&$user) {
  1185. Lib::loadClass('Tree');
  1186. Lib::loadClass('TreeHelper');
  1187. // build tree by P_ID - array or 0
  1188. function Tree_Helper__create_tree_rec($p_id, &$items) {
  1189. static $rec_ind;
  1190. $rec_ind++;
  1191. $ret = array();
  1192. if (!array_key_exists($p_id, $items)) {
  1193. return false;
  1194. } else {
  1195. $r = $items[$p_id];
  1196. if (empty($r->sub)) {
  1197. return false;
  1198. }
  1199. foreach ($r->sub as $k_id => $v) {
  1200. $ret[$k_id] = Tree_Helper__create_tree_rec($k_id, $items);
  1201. }
  1202. return $ret;
  1203. }
  1204. }
  1205. function tree_callback__show_item_from_SERVICES(&$r, &$tree) {
  1206. $cls = array();
  1207. $cls[] = 'HANGUP_STATUS-' . $r->HANGUP_STATUS;
  1208. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  1209. echo'<dl'.$cls.'>';
  1210. echo'<dt>';
  1211. $out_id = ($r->ID < 10)? '&nbsp;'.$r->ID.'' : $r->ID;
  1212. echo'<b class="item_id btn-box">'.$out_id.'</b>';
  1213. //echo'<a href="'."?MENU_INIT=IN7_MK_BAZA_DYSTRYBUCJI_EDIT&ARG1=EDIT&ARG1_VAL=".$r->ID.'" class="btn" title="'."Edit".'">'."E".'</a>';
  1214. $st_status_bg = '';
  1215. if ($r->A_STATUS == 'NORMAL') {
  1216. $st_status_bg = '#8F8;';
  1217. } else if ($r->A_STATUS == 'WAITING') {
  1218. $st_status_bg = '#F8F;';
  1219. } else if ($r->A_STATUS == 'DELETED') {
  1220. $st_status_bg = '#ccc;';
  1221. } else if ($r->A_STATUS == 'OFF_SOFT') {
  1222. $st_status_bg = '#F99;';
  1223. } else if ($r->A_STATUS == 'OFF_HARD') {
  1224. $st_status_bg = '#eee;';
  1225. }
  1226. $st_status_bg = ($st_status_bg)? 'background-color:'.$st_status_bg : '';
  1227. echo'<span class="desc">';
  1228. echo'<span class="btn-box" style="'.$st_status_bg.'">'.$r->A_STATUS.'</span>';
  1229. echo' <b style="color:#333;">'.$r->description.'</b>';
  1230. if ($r->ID_OFFERS) {
  1231. echo' <code>' . "(Nr oferty: {$r->ID_OFFERS})" . '</code>';
  1232. } else {
  1233. echo' <span style="color:#f00">'."Brak numeru oferty!".'</span>';
  1234. }
  1235. $st_status_bg = '';
  1236. if ($r->HANGUP_STATUS == 'NORMAL') {
  1237. $st_status_bg = 'background-color:#8F8;';
  1238. } else if ($r->HANGUP_STATUS == 'WAITING') {
  1239. $st_status_bg = 'background-color:#F8F;';
  1240. } else if ($r->HANGUP_STATUS == 'DELETED') {
  1241. $st_status_bg = 'background-color:#ccc;';
  1242. } else if ($r->HANGUP_STATUS == 'OFF_SOFT') {
  1243. $st_status_bg = 'background-color:#F99;';
  1244. } else if ($r->HANGUP_STATUS == 'OFF_HARD') {
  1245. $st_status_bg = 'background-color:#f00;color:#fff;';
  1246. }
  1247. echo ' <span class="btn-box" style="' . $st_status_bg . '">' . "{$r->HANGUP_STATUS} ({$r->HANGUP_FROM} - {$r->HANGUP_TILL}) - {$r->A_STATUS_DESC}" .'</span>';
  1248. echo'</span>';
  1249. echo'</dt>';
  1250. echo'</dl>'."\n";
  1251. }
  1252. $uslugi_l2 = WindykacjaStatsModel::get_uslugi_from_l2($user);
  1253. $umowy_l2 = WindykacjaStatsModel::get_umowy_from_l2($user);
  1254. $uslugi_l2_nieprzypisane = array();
  1255. foreach ($uslugi_l2 as $k_id => $h) {
  1256. $uslugi_l2_nieprzypisane[$k_id] = true;
  1257. }
  1258. if (is_array($umowy_l2) && !empty($umowy_l2)) {
  1259. if (is_array($uslugi_l2) && !empty($uslugi_l2)) {
  1260. foreach ($umowy_l2 as $k_umowa_ind => $h_umowa) {
  1261. $umowy_l2[$k_umowa_ind]['uslugi'] = array();
  1262. foreach ($uslugi_l2 as $k_id => $h_usluga) {
  1263. if ($h_usluga['ID_DEALS_TABLE'] == $h_umowa['ID']) {
  1264. $umowy_l2[$k_umowa_ind]['uslugi'][$k_id] = $h_usluga;
  1265. if (isset($uslugi_l2_nieprzypisane[$k_id])) unset($uslugi_l2_nieprzypisane[$k_id]);
  1266. }
  1267. }
  1268. }
  1269. }
  1270. }
  1271. echo'<style type="text/css">'."
  1272. .tbl-umowy-l2 .umowa-id{font-weight:bold;font-size:big;font-family:arial;}
  1273. .tbl-umowy-l2 .row-umowa td{border-top:2px solid #00f;}
  1274. .wind-status-old td,
  1275. .wind-status-old th {color:#666;}
  1276. ".'</style>';
  1277. $ARGS['ZAPISZ'] = true;
  1278. Lay_Html_Toggle::start("Aktualne umowy i usługi ", array('open'=>(($ARGS['ZAPISZ'])? false : true)));
  1279. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2: ';print_r($umowy_l2);echo'</pre>';
  1280. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1281. //echo'<caption>'."Aktualne umowy".'<em>'." (l2)".'</em>'.'</caption>';
  1282. if ($umowy_l2 == -1) {
  1283. echo'<tr><td>';
  1284. echo'<span style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</span>';
  1285. echo'</td></tr>';
  1286. } else if (empty($umowy_l2)) {
  1287. echo'<tr><td>'."Brak umów.".'</td></tr>';
  1288. }
  1289. else {
  1290. $tbl_umowy_cols = 5;
  1291. echo'<thead>';
  1292. echo'<tr>';
  1293. echo'<th>'."Nr umowy".'</th>';
  1294. echo'<th>'."Prefix".'</th>';
  1295. echo'<th>'."Data umowy".'</th>';
  1296. echo'<th>'."Termin".'</th>';
  1297. echo'<th>'."".'</th>';
  1298. echo'</tr>';
  1299. echo'</thead>';
  1300. $t = 0;
  1301. foreach ($umowy_l2 as $h) {
  1302. echo'<tr class="row-umowa row-'.($t = 1 - $t).'">';
  1303. echo'<td class="r umowa-id">' . $h['P_DEALNUMBER'] . '</td>';
  1304. echo'<td>' . $h['P_DEALPREFIX'] . '</td>';
  1305. echo'<td class="r">' . $h['P_DEALDATE'] . '</td>';
  1306. echo'<td class="r">' . $h['P_DEALDATE_TERM'] . '</td>';
  1307. echo'<td>';
  1308. if ($h['Wcześniejszy Nr umowy']) echo "Wcześniejszy Nr umowy: ".$h['Wcześniejszy Nr umowy'].'<br />';// TODO: Undefined index
  1309. if ($h['DEALDESC']) echo "Notatki: ".$h['DEALDESC'].'<br />';
  1310. echo "Koniecznosc podpisania aneksu lub innego dokumentu: ".$h['ANEX_NEEDED'].'<br />';
  1311. echo "Data potwierdzenia podpisania aneksu/dokumentu: ".$h['ANEX_CONFIRM_DATE'].'<br />';
  1312. echo'</td>';
  1313. echo'</tr>';
  1314. if (!empty($h['uslugi'])) {
  1315. // TODO: make TREE by P_ID_SERVICES
  1316. $items = array();
  1317. foreach ($h['uslugi'] as $k_id_usluga => $h_suluga) {
  1318. $h_suluga['sub'] = array();
  1319. $items[$k_id_usluga] = (object)$h_suluga;
  1320. }
  1321. $uslugi_tree = array();// tree root
  1322. foreach ($items as $k_id => $r) {
  1323. if ($r->P_ID == 0) {
  1324. $uslugi_tree[$r->ID] = array();
  1325. if (array_key_exists($r->P_ID, $items)) {
  1326. $items[$r->P_ID]->sub[$r->ID] = true;
  1327. }
  1328. } else {// array
  1329. if (array_key_exists($r->P_ID, $items)) {
  1330. $items[$r->P_ID]->sub[$r->ID] = true;
  1331. }
  1332. }
  1333. }
  1334. ksort($uslugi_tree);
  1335. // set up has_childrens
  1336. foreach ($items as $k_id => $r) {
  1337. $items[$k_id]->has_childrens = !empty($r->sub);
  1338. }
  1339. foreach ($uslugi_tree as $k_id => $v_childrens) {
  1340. if (array_key_exists($k_id, $items)) {
  1341. $uslugi_tree[$k_id] = Tree_Helper__create_tree_rec($k_id, $items);
  1342. }
  1343. }
  1344. echo'<tr class="row-'.($t).'">';
  1345. echo'<td>'."&nbsp;".'</td>';
  1346. echo'<td colspan="'.($tbl_umowy_cols - 1).'" style="padding:0;">';
  1347. $tree = new Tree('SERVICES');
  1348. $tree->set_parent_id_col('P_ID');
  1349. $tree->set_param('show_item_callback', "tree_callback__show_item_from_SERVICES");
  1350. $tree->set_param('ajax', "NIE");
  1351. $tree->set_param('rozwin', true);
  1352. $tree->show_css();
  1353. $tree->show_js();
  1354. $_COOKIE[$tree->cookie_name] = implode(' ', array_keys($items));
  1355. echo "\n".'<div class="tree-wrap">'."\n";
  1356. $tree->show_rec_by_tree($uslugi_tree, $items);
  1357. echo '</div>'."\n";
  1358. echo'</td>';
  1359. echo'</tr>';
  1360. }
  1361. }
  1362. }
  1363. echo'</table>';
  1364. if (!empty($uslugi_l2_nieprzypisane)) {
  1365. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1366. echo'<caption>'."Nieprzypisane usługi".'<em>'." (l2)".'</em>'.'</caption>';
  1367. echo'<head>';
  1368. echo'<tr>';
  1369. echo'<th>'."ID".'</th>';
  1370. echo'<th>'."usługa".'</th>';
  1371. echo'<th>'."status".'</th>';
  1372. echo'<th>'."nr umowy".'</th>';
  1373. echo'<th>'."id oferty".'</th>';
  1374. echo'</tr>';
  1375. echo'</head>';
  1376. foreach ($uslugi_l2_nieprzypisane as $k_id => $v_bool) {
  1377. $h_usluga = $uslugi_l2[$k_id];
  1378. echo'<tr>';
  1379. echo'<td class="r">' . $h_usluga['ID'] . '</td>';
  1380. echo'<td>' . $h_usluga['description'] . '</td>';
  1381. echo'<td>' . $h_usluga['A_STATUS_DESC'] . '</td>';
  1382. echo'<td class="r">' . '<b>';
  1383. if (array_key_exists($h['ID_DEALS_TABLE'], $umowy_l2)) {
  1384. echo $umowy_l2[$h['ID_DEALS_TABLE']]['P_DEALNUMBER'];
  1385. } else {
  1386. //TODO: get P_DEALNUMBER from DEALS_TABLE where ID = $h['ID_DEALS_TABLE']
  1387. }
  1388. echo'</b>' . '</td>';
  1389. echo'<td class="r">';
  1390. if ($h_usluga['ID_OFFERS']) {
  1391. echo'<code>' . $h_usluga['ID_OFFERS'] . '</code>';
  1392. } else {
  1393. echo'<span style="color:#f00">'."Brak!".'</span>';
  1394. }
  1395. echo'</td>';
  1396. echo'</tr>';
  1397. }
  1398. echo'</table>';
  1399. }
  1400. Lay_Html_Toggle::end();
  1401. $umowy_l3 = WindykacjaStatsModel::get_umowy_from_l3($user);
  1402. $ARGS['ZAPISZ'] = true;
  1403. Lay_Html_Toggle::start("Aktualne usługi".'<em>'." (l3)".'</em>', array('open'=>(($ARGS['ZAPISZ'])? false : true)));
  1404. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l3: ';print_r($umowy_l3);echo'</pre>';
  1405. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1406. if (empty($umowy_l3)) {
  1407. echo'<tr><td>'."Brak usług.".'</td></tr>';
  1408. }
  1409. else {
  1410. echo'<thead>';
  1411. echo'<tr>';
  1412. echo'<th rowspan="2">'."ID".'</th>';
  1413. echo'<th rowspan="2">'."status".'</th>';
  1414. echo'<th rowspan="2">'."data dok".'</th>';
  1415. echo'<th rowspan="2">'."adres".'</th>';
  1416. echo'<th rowspan="2">'."usługa".'</th>';
  1417. echo'<th rowspan="2">'."S_OTHER_INFO".'</th>';
  1418. echo'<th colspan="2" title="'."ID_BILLING_USERS".'">'. "nr klienta" .'</th>';
  1419. echo'<th colspan="2" title="'."ID_SERVICES".'">'."nr usługi".'</th>';
  1420. echo'<th colspan="2" title="'."P_OFFER_ID".'">'."nr oferty".'</th>';
  1421. echo'<th colspan="2" title="'."P_DEAL_DATE".'">'."data umowy".'</th>';
  1422. echo'<th colspan="2">'."nr umowy".'</th>';
  1423. echo'<th colspan="2">'."termin umowy".'</th>';
  1424. echo'<th colspan="2" title="'."MONTH COST".'">'."abonament".'</th>';
  1425. echo'<th rowspan="2">'."INICJALY HANDLOWCA".'</th>';
  1426. echo'<th rowspan="2">'."RODZAJ DZIALANIA HANDLOWEGO".'</th>';
  1427. echo'</tr>';
  1428. echo'<tr>';
  1429. echo'<td>'."OLD".'</td>';
  1430. echo'<td>'."NEW".'</td>';
  1431. echo'<td>'."OLD".'</td>';
  1432. echo'<td>'."NEW".'</td>';
  1433. echo'<td>'."OLD".'</td>';
  1434. echo'<td>'."NEW".'</td>';
  1435. echo'<td>'."OLD".'</td>';
  1436. echo'<td>'."NEW".'</td>';
  1437. echo'<td>'."OLD".'</td>';
  1438. echo'<td>'."NEW".'</td>';
  1439. echo'<td>'."OLD".'</td>';
  1440. echo'<td>'."NEW".'</td>';
  1441. echo'<td>'."OLD".'</td>';
  1442. echo'<td>'."NEW".'</td>';
  1443. echo'</tr>';
  1444. echo'</thead>';
  1445. foreach ($umowy_l3 as $h) {
  1446. echo'<tr>';
  1447. echo'<td>' . $h['ID'] . '</td>';
  1448. echo'<td>' . $h['A_STATUS'] . '</td>';
  1449. echo'<td>' . '<nobr>' . $h['DATA_DOK'] . '</nobr>' . '</td>';
  1450. echo'<td>' . $h['S_ADDRESS_STREET'] . '</td>';
  1451. echo'<td>' . '<b>' . $h['P_SERVICE'] . '</b>' . '</td>';
  1452. echo'<td>' . $h['S_OTHER_INFO'] . '</td>';
  1453. echo'<td>' . $h['ID_BILLING_USERS_OLD'] . '</td>';
  1454. echo'<td>' . $h['ID_BILLING_USERS_NEW'] . '</td>';
  1455. echo'<td>' . $h['ID_SERVICES_OLD'] . '</td>';
  1456. echo'<td>' . $h['ID_SERVICES_NEW'] . '</td>';
  1457. echo'<td>' . $h['P_OFFER_ID_OLD'] . '</td>';
  1458. echo'<td>' . $h['P_OFFER_ID_NEW'] . '</td>';
  1459. echo'<td>' . '<nobr>' . $h['P_DEAL_DATE_OLD'] . '</nobr>' . '</td>';
  1460. echo'<td>' . '<nobr>' . $h['P_DEAL_DATE_NEW'] . '</nobr>' . '</td>';
  1461. echo'<td>' . $h['P_DEALNUMBER_OLD'] . '</td>';
  1462. echo'<td>' . $h['P_DEALNUMBER_NEW'] . '</td>';
  1463. echo'<td>' . '<nobr>' . $h['P_DEALTERM_OLD'] . '</nobr>' . '</td>';
  1464. echo'<td>' . '<nobr>' . $h['P_DEALTERM_NEW'] . '</nobr>' . '</td>';
  1465. echo'<td>' . $h['MONTH_COST_OLD'] . '</td>';
  1466. echo'<td>' . $h['MONTH_COST_NEW'] . '</td>';
  1467. echo'<td>' . $h['INICJALY_HANDLOWCA'] . '</td>';
  1468. echo'<td>' . $h['RODZAJ_DZIALANIA_HANDLOWEGO'] . '</td>';
  1469. echo'</tr>';
  1470. }
  1471. }
  1472. echo'</table>';
  1473. Lay_Html_Toggle::end();
  1474. }
  1475. public static function user_historia_platnosci(&$user) {
  1476. echo'<style type="text/css">';
  1477. echo"
  1478. .hide .to-hide{display:none;}
  1479. .may-hide .btn-hide{display:inline;padding:0 5px;border:1px solid #bbb;}
  1480. .may-hide .btn-show{display:none;padding:0 5px;border:1px solid #bbb;}
  1481. .hide .btn-hide{display:none;}
  1482. .hide .btn-show{display:inline;}
  1483. ";
  1484. echo'</style>';
  1485. Lay_Html_Toggle::show_js();
  1486. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user);
  1487. // add events
  1488. $umowy_l2 = WindykacjaStatsModel::get_umowy_from_l2($user);
  1489. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_docs ';print_r($billing_docs);echo'</pre>';
  1490. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_docs ';print_r(reset($billing_docs));echo'</pre>';
  1491. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2 ';print_r($umowy_l2);echo'</pre>';
  1492. if (!empty($umowy_l2)) {
  1493. foreach ($umowy_l2 as $h) {
  1494. $billing_docs->add_event($h['P_DEALDATE'], 'UMOWA', $h);
  1495. if ($h['P_DEALDATE_TERM'] != '0000-00-00') {// < date('Y-m-d')) {
  1496. $billing_docs->add_event($h['P_DEALDATE_TERM'], 'KONIEC UMOWY', $h);
  1497. }
  1498. }
  1499. }
  1500. $user_hist_events = WindykacjaStatsHelper::get_user_hist_status_events($user);
  1501. if (!empty($user_hist_events)) {
  1502. foreach ($user_hist_events as $v_hist) {
  1503. $bill_doc = (array)$v_hist;
  1504. $billing_docs->add_event($v_hist->A_STATUS_UPDATE_DATE, 'HIST_STATUS', $bill_doc);
  1505. }
  1506. }
  1507. $user_hist_events = WindykacjaStatsHelper::get_user_hist_phone_events($user);
  1508. if (!empty($user_hist_events)) {
  1509. foreach ($user_hist_events as $v_hist) {
  1510. $bill_doc = (array)$v_hist;
  1511. $billing_docs->add_event(substr($v_hist->A_RECORD_UPDATE_DATE, 0, 10), 'HIST_PHONE', $bill_doc);
  1512. }
  1513. }
  1514. $user_hist_events = WindykacjaStatsHelper::get_user_bad_address_events($user);
  1515. if (!empty($user_hist_events)) {
  1516. foreach ($user_hist_events as $v_hist) {
  1517. $bill_doc = (array)$v_hist;
  1518. $billing_docs->add_event(substr($v_hist->A_RECORD_UPDATE_DATE, 0, 10), 'HIST_BAD_ADDRESS', $bill_doc);
  1519. }
  1520. }
  1521. // add today
  1522. $bill_doc = array();
  1523. $bill_doc['saldo'] = $billing_docs->get_saldo();
  1524. $billing_docs->add_event(date('Y-m-d'), 'TODAY', $bill_doc);
  1525. $billing_docs->sort_docs();
  1526. //$billing_docs = array_reverse($billing_docs, true);
  1527. //echo'<pre style="max-height:300px;overflow:auto;border:1px solid red;">billing_docs: ';print_r($billing_docs);echo'</pre>';
  1528. $billing_docs_arr = $billing_docs->get_docs();
  1529. $types_finanse = array();
  1530. $types_finanse[] = 'KW';
  1531. $types_finanse[] = 'KP';
  1532. $types_finanse[] = 'WB_MASS';
  1533. $types_finanse[] = 'WB';
  1534. $types_finanse[] = 'KORV';
  1535. $types_finanse[] = 'FVAT';
  1536. $saldo_all = 0;
  1537. $out_tbl = array();
  1538. foreach ($billing_docs_arr as $k_data => $v_docs_arr) {
  1539. foreach ($v_docs_arr as $k_ind => $v_doc) {
  1540. $out_tr = array();
  1541. $out_tr['data'] = $k_data;
  1542. if ($k_data == date("Y-m-d")) $out_tr['class'] = 'today';
  1543. $out_tr['ID'] = '';
  1544. $out_tr['nr'] = '';
  1545. $out_tr['winien'] = '';
  1546. $out_tr['ma'] = '';
  1547. $out_tr['saldo'] = '';
  1548. $out_tr['saldo_all'] = '';
  1549. if ($v_doc->get_class() == 'BILLING') {
  1550. $saldo_all += $v_doc->get_saldo();
  1551. $out_tr['ID'] = $v_doc->get_type();
  1552. $type_desc = WindykacjaStatsModel::get_billing_type_desc($v_doc->get_type());
  1553. if ($type_desc) {
  1554. 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');
  1555. $out_tr['ID'] = '<span title="'.$type_desc.'">'.$out_tr['ID'].'</span>';
  1556. // TODO: podglad faktury
  1557. //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>';
  1558. }
  1559. $out_tr['ID'] .= ' <code style="font-size:10px">'."(".$v_doc->get('ID').")".'</code>';// TODO: dla KP,KW: ID_BILLING_NUMBERS zamiast ID
  1560. $out_tr['nr'] = $v_doc->get('nr');
  1561. $out_tr['winien'] = number_format($v_doc->get('WINIEN'), 2, ',', ' ');
  1562. $out_tr['ma'] = number_format($v_doc->get('MA'), 2, ',', ' ');
  1563. $out_tr['saldo'] = number_format($v_doc->get_saldo(), 2, ',', ' ');
  1564. $out_tr['saldo_all'] = number_format($saldo_all, 2, ',', ' ');
  1565. // style
  1566. if ($out_tr['winien'] == '0,00') $out_tr['winien'] = '<span style="color:#666;">' . $out_tr['winien'] . '</span>';
  1567. if ($out_tr['ma'] == '0,00') $out_tr['ma'] = '<span style="color:#666;">' . $out_tr['ma'] . '</span>';
  1568. }
  1569. else if ($v_doc->get_class() == 'EVENT') {
  1570. if ($v_doc->get_type() == 'TODAY') {
  1571. $out_tr['class'] = 'today';
  1572. $vDocSaldoData = $v_doc->get_data();
  1573. $v_doc_saldo = V::get('saldo', '', $vDocSaldoData);
  1574. $out_tr['saldo_all'] = number_format($v_doc_saldo, 2, ',', ' ');
  1575. }
  1576. else if ($v_doc->get_type() == 'HIST_STATUS') {
  1577. // search for koresp files
  1578. // TODO: mv to ::get_koresp_file($id_koresp);
  1579. $id_koresp = intval($v_doc->get('ID_KORESP'));
  1580. $found_files = array();
  1581. {
  1582. $CNF = new stdClass();
  1583. $CNF->koresp_dir = '/home/samba/BIALL-NET/PISMA/OUT';
  1584. $CNF->koresp_www_path = '/se-dev/PISMA/OUT';
  1585. if ($id_koresp > 0) {
  1586. $pattern = $CNF->koresp_dir . '/' . '*.' . $id_koresp . '.pdf';
  1587. $file_tmp_list = glob($pattern);//, GLOB_NOSORT);
  1588. if (!empty($file_tmp_list)) {
  1589. foreach ($file_tmp_list as $v_file) {
  1590. $test_file = explode('/', $v_file);
  1591. $test_file = end($test_file);
  1592. $found_files[] = $CNF->koresp_www_path . '/' . $test_file;
  1593. }
  1594. }
  1595. }
  1596. // return $found_files;
  1597. }
  1598. switch ($v_doc->get('A_STATUS')) {
  1599. case 'WAITING':
  1600. $out_tr['add'] = "powrót do oczekujących";
  1601. break;
  1602. case 'waiting-wezwanie2':
  1603. $out_tr['add'] = "wezwanie do zapłaty - ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(termin: ".$v_doc->get('PAY_TERM').")</em> ";
  1604. break;
  1605. case 'waiting-krd':
  1606. $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> ";
  1607. break;
  1608. case 'N/S;':
  1609. $out_tr['add'] = "ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(" . $v_doc->get('K_ZAWARTOS') . ")</em>";// TODO: get opis from koresp
  1610. //echo '('.$v_doc->get('ID_KORESP').', '.$v_doc->get('K_ZAWARTOS').'='.substr($v_doc->get('K_ZAWARTOS'), 0, strlen('rozwiazanie umowy')).')';
  1611. if ($v_doc->get('ID_KORESP') > 0 && substr($v_doc->get('params'), 0, strlen('rozwiazanie umowy')) == 'rozwiazanie umowy') {
  1612. $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>';
  1613. }
  1614. break;
  1615. default:
  1616. $out_tr['add'] = "zmiana statusu na: ".$v_doc->get('A_STATUS')." ";
  1617. }
  1618. if ($id_koresp > 0) {
  1619. if (!empty($out_tr['add']) && !empty($found_files)) {
  1620. $add_link_koresp = reset($found_files);// first file from koresp
  1621. $out_tr['add'] .= " " . '<a href="' . $add_link_koresp . '" target="_blank">' . "P" . '</a>';
  1622. }
  1623. //$koresp_edit_link = "?MENU_INIT=IN7_DZIENNIK_KORESP_EDIT&ARG1=EDIT&ARG1_VAL=" . $id_koresp;
  1624. Lib::loadClass('ProcesHelper');
  1625. $zasobKorespID = ProcesHelper::getZasobTableID('IN7_DZIENNIK_KORESP');
  1626. $koresp_edit_link = "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID={$zasobKorespID}#EDIT/{$id_koresp}";
  1627. $out_tr['add'] .= " " . '<a href="' . $koresp_edit_link . '" title="' . "Edycja KORESP. ({$id_koresp})" . '" target="_blank">' . "KOR" . '</a>';
  1628. }
  1629. }
  1630. else if ($v_doc->get_type() == 'HIST_PHONE') {
  1631. $date = $v_doc->get('PAY_TERM');
  1632. if ($date == 'N/S;') $date = '';
  1633. switch ($v_doc->get('LAST_PHONE_STATUS')) {
  1634. case 'nie_zaplaci':
  1635. $out_tr['add'] = "nie zapłaci";
  1636. break;
  1637. case 'zaplaci_w_terminie':
  1638. $out_tr['add'] = "zapłaci w terminie " . $date . " " . '<em style="font-size:small;">' . "(ustalono " . $v_doc->get('A_RECORD_UPDATE_DATE') . ")" . '</em>';
  1639. break;
  1640. case 'zaplaci_za_1mc':
  1641. $out_tr['add'] = "zapłaci miesiąc później " . $date . " " . '<em style="font-size:small;">' . "(ustalono " . $v_doc->get('A_RECORD_UPDATE_DATE') . ")" . '</em>';
  1642. break;
  1643. case 'zaplaci_za_2mc':
  1644. $out_tr['add'] = "zapłaci 2 miesiące później " . $date . " " . '<em style="font-size:small;">' . "(ustalono " . $v_doc->get('A_RECORD_UPDATE_DATE') . ")" . '</em>';
  1645. break;
  1646. case 'zaplaci_za_3mc':
  1647. $out_tr['add'] = "zapłaci 3 miesiące później " . $date . " " . '<em style="font-size:small;">' . "(ustalono " . $v_doc->get('A_RECORD_UPDATE_DATE') . ")" . '</em>';
  1648. break;
  1649. default:
  1650. $out_tr['add'] = "kontakt z klientem: " . $v_doc->get('LAST_PHONE_STATUS') . " " . '<em style="font-size:small;">' . "(ustalono " . $v_doc->get('A_RECORD_UPDATE_DATE') . ")" . '</em>';
  1651. }
  1652. } else if ($v_doc->get_type() == 'HIST_BAD_ADDRESS') {
  1653. if ($v_doc->get('BAD_ADDRESS')) {
  1654. $out_tr['add'] = "błędny adres zameldowania ";
  1655. } else {
  1656. $out_tr['add'] = "poprawa adresu zameldowania ";
  1657. }
  1658. if ($v_doc->get('ID_KORESP') > 0) {
  1659. $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>' . ")";
  1660. }
  1661. } else {
  1662. $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
  1663. if ($v_doc->get_type() == 'UMOWA') {
  1664. $out_tr['add'] = "umowa nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(termin ".$v_doc->get('P_DEALDATE_TERM').")</em>";
  1665. } else if ($v_doc->get_type() == 'KONIEC UMOWY') {
  1666. $out_tr['add'] = "zakończenie umowy nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(z dnia ".$v_doc->get('P_DEALDATE').")</em>";
  1667. }
  1668. }
  1669. }
  1670. //$out_tbl[] = $out_tr;// add to the end
  1671. array_unshift($out_tbl, $out_tr);// add to the begining
  1672. }
  1673. }
  1674. echo'<style type="text/css">'."
  1675. .tbl-windykacja td{padding:0 5px;}
  1676. .tbl-windykacja .cell-data{white-space:nowrap;}
  1677. .tbl-windykacja .cell-winien{text-align:right;}
  1678. .tbl-windykacja .cell-ma{text-align:right;}
  1679. .tbl-windykacja .cell-saldo{text-align:right;}
  1680. .tbl-windykacja .cell-saldo_all{text-align:right; white-space:nowrap; background-color:#E5E5E5;}
  1681. .tbl-windykacja .cell-nr{font-family:monospace;text-align:right;}
  1682. .tbl-windykacja .change-year td{border-top:3px solid #00f;}
  1683. .tbl-windykacja .today td{background:#FFFF98;}
  1684. .tbl-windykacja .cell-add em{color:#666;}
  1685. ".'</style>';
  1686. $last_year = '';
  1687. $cols = array();
  1688. $cols['data'] = "data";
  1689. $cols['ID'] = "ID";
  1690. $cols['nr'] = "nr";
  1691. $cols['winien'] = "winien";
  1692. $cols['ma'] = "ma";
  1693. //$cols['saldo'] = "saldo";
  1694. $cols['saldo_all'] = "saldo";
  1695. $cols['add'] = "uwagi";
  1696. echo'<h4>'."Historia płatności".'<em>'." (l1)".'</em>'.'</h4>';
  1697. echo'<table border="1" class="tbl-view tbl-windykacja" cellspacing="0" cellpadding="0">';
  1698. echo'<thead>';
  1699. echo'<tr>';
  1700. echo'<th>'."rok".'</th>';
  1701. foreach ($cols as $col_name => $col_label) {
  1702. echo'<th>' . $col_label . '</th>';
  1703. }
  1704. echo'</tr>';
  1705. echo'</thead>';
  1706. foreach ($out_tbl as $out_tr) {
  1707. $change_year = false;
  1708. $k_data = $out_tr['data'];
  1709. $rok = substr($k_data, 0, 4);
  1710. if ($rok != $last_year) {
  1711. $change_year = true;
  1712. }
  1713. $cls = array();
  1714. if ($change_year) $cls[] = 'change-year';
  1715. if ($add_cls = V::get('class', '', $out_tr)) $cls[] = $add_cls;
  1716. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  1717. echo'<tr'.$cls.'>';
  1718. echo'<td>';
  1719. echo ($change_year)? $rok : "&nbsp;";
  1720. echo'</td>';
  1721. $last_year = $rok;
  1722. foreach ($cols as $col_name => $col_label) {
  1723. //foreach ($out_tr as $k_col_name => $v_val) {
  1724. if (array_key_exists($col_name, $out_tr)) {
  1725. echo'<td class="'."cell-".$col_name.'">' . $out_tr[$col_name] . '</td>';
  1726. } else {
  1727. echo'<td>'."&nbsp;".'</td>';
  1728. }
  1729. }
  1730. echo'</tr>';
  1731. }
  1732. echo'</table>';
  1733. echo'<br />';
  1734. echo'<br />';
  1735. WindykacjaStatsHelper::update_stats($user, $billing_docs);
  1736. }
  1737. public static function view_faktura($faktura_id) {
  1738. // https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=make_faktura&adm=edit&uid=11381&fpos=&dz=
  1739. // 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
  1740. echo'{'.$faktura_id.'}';
  1741. }
  1742. public static function zadluzenia(&$user) {
  1743. $THIS_DATA_DO = null;// TODO: pobierac z PAY_TERM z tabeli USERS2_WINDYKACJA_STATUS
  1744. $post_sent = (!empty($_POST['sbmt']));
  1745. $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')));
  1746. if (!$post_sent) {
  1747. echo'<table style="margin:10px 50px;padding:20px;border:1px solid blue;"><tr><td>';
  1748. echo'<form action="" method="post">';
  1749. $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')));
  1750. echo'<p>'."Termin płatności: ".'</p>';
  1751. echo'<input type="text" name="'."DATA_DO".'" value="'.$post_DATA_DO.'" />';
  1752. echo'<input type="submit" name="sbmt" value="'."Wyslij".'" />';
  1753. echo'</form>';
  1754. echo'</td></tr></table>';
  1755. return;
  1756. } else {
  1757. $THIS_DATA_DO = $post_DATA_DO;
  1758. }
  1759. self::wezwanie($user, $THIS_DATA_DO);
  1760. }
  1761. public static function wezwanie_ostateczne(&$user, $wezwanie_termin) {
  1762. self::wezwanie($user, $wezwanie_termin, true);
  1763. }
  1764. public static function wezwanie(&$user, $wezwanie_termin, $wezwanie_ostateczne = false) {
  1765. $date_limit = date("Y-m-d");
  1766. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user, $date_limit);
  1767. $billing_docs->sort_docs();
  1768. // sprawdz zadluzenie
  1769. if ($billing_docs->get_saldo() >= 0) {
  1770. echo'<p class="green">' . "Brak zadluzenia" . '</p>';
  1771. return;
  1772. }
  1773. else {
  1774. $fvat_arr = $billing_docs->get_unpaid_fvat();
  1775. //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>';
  1776. //foreach ($fvat_arr as $key => $v) {
  1777. // echo'<br />'.number_format($v['WINIEN_POZOSTALO'], 4, ',', ' ');
  1778. //}
  1779. if (empty($fvat_arr)) {
  1780. echo'<p>'."Brak nieoplaconych faktur".'</p>';
  1781. return;
  1782. }
  1783. WindykacjaStatsModel::update_doc_number($fvat_arr);
  1784. $cols = array();
  1785. $cols['ID'] = "ID";
  1786. $cols['nr'] = "nr";
  1787. $cols['winien'] = "winien";
  1788. $cols['ma'] = "ma";
  1789. //$cols['saldo'] = "saldo";
  1790. $cols['saldo_all'] = "saldo";
  1791. $cols['add'] = "&nbsp;";
  1792. $saldo_all = 0;
  1793. foreach ($fvat_arr as $f) {
  1794. $saldo_all += round($f['WINIEN_POZOSTALO'], 2);
  1795. }
  1796. $out_tbl = array();
  1797. foreach ($fvat_arr as $v_fvat) {
  1798. $out_tr = array();
  1799. $out_tr['ID'] = ' <code style="font-size:10px">'."(".$v_fvat['ID'].")".'</code>';// TODO: dla KP,KW: ID_BILLING_NUMBERS zamiast ID
  1800. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  1801. $out_tr['winien'] = number_format($v_fvat['WINIEN'], 2, ',', ' ');
  1802. $out_tr['data'] = $v_fvat['BILL_DATE'];
  1803. $out_tr['termin'] = $v_fvat['PAYMENT_TERM'];
  1804. $out_tr['pozostalo'] = number_format($v_fvat['WINIEN_POZOSTALO'], 2, ',', ' ');
  1805. array_unshift($out_tbl, $out_tr);// add to the begining
  1806. }
  1807. $razem = $saldo_all;
  1808. $company = WindykacjaStatsModel::get_company($user);
  1809. $nr_konta = FunkcjeL1::bankowy_formatuj_nrach(FunkcjeL1::bankowy_make_nrach($company->NR_RACH_MASS_PAY, $user->ID_BILLING_USERS, 0));
  1810. echo'<style type="text/css">'."
  1811. body{font-family:serif; font-size:10px;line-height:14px;}
  1812. td{font-family:verdana; font-size:10px; color:#333;}
  1813. table {border-style:none;}
  1814. table td, table th {padding:0 2px;border-style:solid;border-collapse:collapse;}
  1815. table th {border-width:1px;border-color:#333;}
  1816. table td {border-width:1px;border-color:#333;}
  1817. ".'</style>';
  1818. echo'<div style="background:#fff;border:none;margin:5px;padding:20px 40px 10px 40px;page-break-after:always;font-size:small;">';
  1819. if ($user->ID_KORESP) {
  1820. $koresp = DB::get_by_id('IN7_DZIENNIK_KORESP', $user->ID_KORESP);
  1821. if ($koresp) {
  1822. echo '<div style="text-align:right;font-weight:bold;">';
  1823. echo $koresp->ID_PROJECT . '-' .$koresp->ID . "/" . substr(date("Y"), 2);
  1824. echo '</div>';
  1825. }
  1826. }
  1827. echo '<table border=0 cellspacing=0 cellpadding=0 style="width:100%;">';
  1828. echo'<tr>';
  1829. echo'<td style="width:60%;border:none;">';
  1830. //echo "&bdquo;BIALL-NET&rdquo; Sp. z o.o.<br />Otomin, ul. Słoneczna 43<br />80-174 Gdańsk";
  1831. echo $company->name1 . '<br />' . "ul. " . $company->ulica . " " . $company->numer_dom . '<br />' . $company->kod . " " . $company->miasto;
  1832. echo'</td>';
  1833. echo'<td style="border:none;text-align:left;vertical-align:top;">';
  1834. echo "Gdańsk, dnia ".date("Y-m-d");
  1835. echo'</td>';
  1836. echo'</tr>';
  1837. echo'<tr>';
  1838. echo'<td style="border:none;">'."&nbsp;".'</td>';
  1839. echo'<td style="border:none;">';
  1840. echo'<p style="margin:50px 0;">';
  1841. echo "Numer klienta: ".$user->ID;
  1842. echo '<br />'."".$user->P_NAME." ".$user->P_NAME_SECOND;
  1843. // TODO: P_ADRESS_KORESP_1282
  1844. echo '<br />'."ul. ".$user->P_ADDRESS_STREET." ".$user->P_ADDRESS_HOUSE;
  1845. if ($user->P_ADDRESS_HOME) echo "/".$user->P_ADDRESS_HOME;
  1846. echo '<br />' . $user->P_ADDRESS_POST_CODE . " " . $user->P_ADDRESS_CITY;
  1847. echo'</p>';
  1848. echo'</td>';
  1849. echo'</tr>';
  1850. echo'</table>';
  1851. echo'<h1 style="text-align:center;margin:20px 10px 10px 10px;font-size:28px;">';
  1852. if ($wezwanie_ostateczne) {
  1853. echo "OSTATECZNE WEZWANIE DO ZAPŁATY";
  1854. } else {
  1855. echo "WEZWANIE DO ZAPŁATY";
  1856. }
  1857. echo'</h1>';
  1858. echo'<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>';
  1859. echo '<table border=0 cellspacing=0 cellpadding=2 style="width:100%;margin:10px;font-size:small;">';
  1860. echo '<thead style="background:#F3F3F3;">';
  1861. echo '<tr>';
  1862. echo '<th>'."Podstawa zobowiązania*".'</th>';
  1863. echo '<th>'."Nr dokumentu".'</th>';
  1864. //echo '<th>'."Kwota netto".'</th>';
  1865. echo '<th>'."Kwota brutto".'</th>';
  1866. echo '<th>'."Data faktury".'</th>';
  1867. echo '<th>'."Termin płatności".'</th>';
  1868. echo '<th>'."Pozostało do zapłaty".'</th>';
  1869. echo '</tr>';
  1870. echo '</thead>';
  1871. echo '<tfoot>';
  1872. echo'<tr>';
  1873. echo'<td colspan="4" style="border:none;"></td>';
  1874. echo'<th style="border-width:2px;border-color:#333;text-align:right;background:#F3F3F3;">'."Razem:".'</th>';
  1875. echo'<td style="border-width:2px;border-color:#333;font-weight:bold;">'.FunkcjeL1::formatuj_grosze($razem).'</td>';
  1876. echo'</tr>';
  1877. echo '</tfoot>';
  1878. echo "\n";
  1879. foreach ($out_tbl as $out_tr) {
  1880. $k_data = $out_tr['data'];
  1881. $rok = substr($k_data, 0, 4);
  1882. $cls = array();
  1883. if ($add_cls = V::get('class', '', $out_tr)) $cls[] = $add_cls;
  1884. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  1885. echo'<tr'.$cls.'>';
  1886. echo'<td>';
  1887. echo "Faktura Vat";
  1888. echo'</td>';
  1889. //$file_total['PODSTAWA_NUMBER'] = $r['NUMBER']."/".$r['ID_BILLING_PREFIXES'];
  1890. //$file_total['PODSTAWA_DATA'] = date("Y-m-d",$r['BAF_TIMESTAMP']);
  1891. //$file_total['PAYMENT_TERM'] = date("Y-m-d",$r['TERMIN_PL']);
  1892. echo'<td>';
  1893. echo $out_tr['nr'];
  1894. echo'</td>';
  1895. echo'<td>';
  1896. echo $out_tr['winien'];
  1897. echo'</td>';
  1898. echo'<td>';
  1899. echo '<nobr>' . $out_tr['data'] . '</nobr>';
  1900. echo'</td>';
  1901. echo'<td>';
  1902. echo '<nobr>' . $out_tr['termin'] . '</nobr>';
  1903. echo'</td>';
  1904. echo'<td>';
  1905. echo $out_tr['pozostalo'];
  1906. echo'</td>';
  1907. echo'</tr>';
  1908. echo "\n";
  1909. }
  1910. echo '</table>';
  1911. echo'<p style="margin:10px;">'."Słownie do zapłaty: ".'<span style="border-bottom:1px dotted #000;padding:0 50px;">'."&nbsp;&nbsp;".'<b>'.FunkcjeL1::slownie($razem).'</b>'."&nbsp;&nbsp;".'</span>'.'</p>';
  1912. echo'<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>';
  1913. echo'<ul style="margin:10px;font-size:small;padding:0 0 0 40px;">';
  1914. echo'<li style="line-height:16px;">'."Od nieterminowych płatności mogą zostać naliczone odsetki ustawowe (art.481 § 1 KC).".'</li>';
  1915. echo'<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>';
  1916. echo '<li style="line-height:16px;">' . "W przypadku uregulowania należności przed otrzymaniem niniejszego wezwania, proszę potraktować je za bezprzedmiotowe." . '</li>';
  1917. echo'</ul>';
  1918. echo'<table style="width:100%;border:none">';
  1919. echo'<tr>';
  1920. echo'<td colspan="2" style="border:none;">';
  1921. echo'<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,
  1922. <br> e-mail: bok@biall.net.pl lub z Windykatorem: tel. 513-156-732, (58) 741-84-78".'</p>';
  1923. echo'</td>';
  1924. echo'</tr>';
  1925. echo'</table>';
  1926. echo'<table style="width:100%;border:none">';
  1927. echo'<tr>';
  1928. echo'<td style="width:50%;border:none;">'."&nbsp;".'</td>';
  1929. echo'<td style="width:50%;border:2px solid #999">'."<br /><br /><br /><br />".'</td>';
  1930. echo'</tr>';
  1931. echo'<tr>';
  1932. echo'<td style="border:none;">'."&nbsp;".'</td>';
  1933. echo'<td style="text-align:center;border:none;">'."(pieczęć i podpis wierzyciela)".'</td>';
  1934. echo'</tr>';
  1935. echo'<tr>';
  1936. echo'<td colspan="2" style="border:none;">';
  1937. echo'<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>';
  1938. echo'</td>';
  1939. echo'</tr>';
  1940. echo'<tr>';
  1941. echo'<td colspan="2" style="border:none">';
  1942. echo'<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>';
  1943. echo'<p style="margin:8px 0 0 0;font-size:small;text-align:center">'."<b>Krajowego Rejestru Długów<br />
  1944. Biura Informacji Gospodarczej S.A.<br />
  1945. ul. Armii Ludowej 21, 51-214 Wrocław<br />
  1946. www.krd.pl</b>
  1947. <br />
  1948. <br />
  1949. Informacja o zadłużeniu upubliczniona będzie w systemie KRD do dnia zapłaty lub 10 lat od daty dokonania wpisu.".'</p>';
  1950. echo'</td>';
  1951. echo'</tr>';
  1952. echo'</table>';
  1953. echo'</div>';
  1954. }
  1955. }
  1956. public static function task_update_stats() {
  1957. self::css();
  1958. $to_update_step = 500;
  1959. $q = V::get('q', '', $_GET);
  1960. $_p = V::get('_p', 0, $_GET, 'int');
  1961. echo'<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".$q."&_p=".$_p . '">' . "Cofnij" . '<img src=icon/back.gif border=0 alt=POWROT>' . '</a>';
  1962. $to_update_total = WindykacjaStatsHelper::get_to_update_total();
  1963. if ($to_update_total <= 0) {
  1964. echo'<p style="color:green">' . "Wszystkie rekordy zaktualizowane" . '</p>';
  1965. return;
  1966. }
  1967. if ($to_update_total > $to_update_step) {
  1968. echo'<br />';
  1969. 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>';
  1970. echo'<br />';
  1971. }
  1972. $to_update_list = WindykacjaStatsHelper::get_to_update_list($to_update_step);
  1973. if (empty($to_update_list)) {
  1974. echo'<p style="color:green">' . "Wszystkie rekordy zaktualizowane" . '</p>';
  1975. return;
  1976. }
  1977. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">to_update_list: ';print_r($to_update_list);echo'</pre>';
  1978. foreach ($to_update_list as $w) {
  1979. //echo'<div class="box box-blue">';
  1980. echo "Nr. klienta: <b>".$w->ID_BILLING_USERS . "</b> ...";
  1981. //echo $w->A_STATUS . ' (' . $w->A_STATUS_UPDATE_DATE . ')';
  1982. $user = WindykacjaStatsModel::get_user_by_id($w->ID_BILLING_USERS);
  1983. if ($user) {
  1984. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user);
  1985. WindykacjaStatsHelper::update_stats($user, $billing_docs);
  1986. }
  1987. //echo'</div>';// .box-blue
  1988. echo'<br />';
  1989. }
  1990. if ($to_update_total > $to_update_step) {
  1991. echo'<br /><br />';
  1992. 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>';
  1993. }
  1994. }
  1995. public static function getPowodyRezygnacji() {
  1996. // [895].[3888] - DEALS_TABLE.RODZAJ_DZIALANIA_HANDLOWEGO
  1997. $powody = array();
  1998. // $powody['3226'] = "REZYGNACJA FINANSE";
  1999. // $powody['3227'] = "REZYGNACJA SLABA OFERTA";
  2000. // $powody['3121'] = "REZYGNACJA WYPROWADZKA";
  2001. // $powody['3228'] = "REZYGNACJA PROBLEMY TECHNICZNE";
  2002. // $powody['3230'] = "REZYGNACJA WYJAZD";
  2003. // $powody['3229'] = "REZYGNACJA ZLA OBSLUGA BOK";
  2004. // $powody['3123'] = "REZYGNACJA CESJA";
  2005. // $powody['3119'] = "BRAK-BOK (Inne)";
  2006. // $powody['4188'] = "UMOWA_BEZPOSREDNIA";
  2007. // $powody['4189'] = "UMOWA_POSREDNIA";
  2008. // $powody['4190'] = "TELEMARKETING";
  2009. $powody['4192'] = "REZYGNACJA ZMIANA OPERATORA";
  2010. $powody['4193'] = "REZYGNACJA WYPROWADZKA";
  2011. $powody['4194'] = "REZYGNACJA NIEZADOWOLENIE";
  2012. $powody['4195'] = "REZYGNACJA CESJA";
  2013. //$powody['4196'] = "REZYGNACJA FINANSE";
  2014. $powody['4197'] = "REZYGNACJA SLABA OFERTA";
  2015. $powody['4198'] = "REZYGNACJA PROBLEMY TECHNICZNE";
  2016. $powody['4199'] = "REZYGNACJA ZLA OBSLUGA BOK";
  2017. $powody['4200'] = "WYPOWIEDZENIE PRZEZ OPERATORA ZA DLUGI";
  2018. // $powody['4201'] = "UMOWA W BOK ZWYCZAJNA";
  2019. // $powody['4202'] = "REZYGNACJA WYJAZD";
  2020. // $powody['4191'] = "BRAK-BOK (Inne)";
  2021. $powody['19803'] = "REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA";
  2022. $powody['4213'] = "REZYGNACJA INNE";
  2023. return $powody;
  2024. }
  2025. /**
  2026. * @params $user
  2027. * @params $id_koresp
  2028. */
  2029. public static function task_bok_rozwiazanie_umowy_print($user, $id_koresp) {
  2030. $user_hist_events = WindykacjaStatsHelper::get_user_hist_status_events($user);
  2031. if (empty($user_hist_events)) {
  2032. echo '<p style="color:red">' . "Brak danych HIST" . '</p>';
  2033. return;
  2034. }
  2035. $v_doc = null;
  2036. foreach ($user_hist_events as $v_hist) {
  2037. if ($v_hist->ID_KORESP == $id_koresp) {
  2038. $v_doc = $v_hist;
  2039. break;
  2040. }
  2041. }
  2042. if (!$v_doc) {
  2043. echo '<p style="color:red">' . "Brak danych HIST dla kodresp(".$v_doc->ID_KORESP.")" . '</p>';
  2044. return;
  2045. }
  2046. // params(255): rozwiazanie umowy,9872,3121
  2047. $params = explode(',', $v_doc->params);
  2048. if (count($params) < 3 && $params[0] != 'rozwiazanie umowy') {
  2049. echo '<p style="color:red">' . "Bad params" . '</p>';
  2050. return;
  2051. }
  2052. $koresp = DB::get_by_id('IN7_DZIENNIK_KORESP', $id_koresp);
  2053. if (!$koresp) {
  2054. echo '<p style="color:red">' . "Koresp not exists!" . '</p>';
  2055. return;
  2056. }
  2057. $nr_umowy = $params[1];
  2058. $powod = $params[2];
  2059. $deal_id = '..........................................................';
  2060. $termin_odlaczenia = '.....................';
  2061. if (count($params) > 4) {
  2062. // $data_arr["params"] = "rozwiazanie umowy,{$nr_umowy},{$powod},{$termin_odlaczenia},{$new_id_deals}";
  2063. $termin_odlaczenia = $params[3];
  2064. $deal_id = $params[4];
  2065. }
  2066. $arg_values = array();
  2067. $arg_values['powod'] = self::getPowodyRezygnacji();
  2068. $com = new stdClass();
  2069. if ($user->BILLING_OWNER == 2) {
  2070. $com->name = 'NET-DAY';
  2071. $com->fullName = 'NET-DAY s.c.';
  2072. $com->address_street = 'ul. Kopeckiego 9/24';
  2073. $com->address_city = '80-809 Gdańsk';
  2074. } else {
  2075. $com->name = 'BIALL-NET';
  2076. $com->fullName = 'BIALL-NET Sp. z o.o.';
  2077. $com->address_street = 'Otomin ul. Słoneczna 43';
  2078. $com->address_city = '80-174 Gdańsk';
  2079. }
  2080. ?>
  2081. <style type="text/css">
  2082. body{margin:12px;font-family:serif;font-size:11px;line-height:14px;}
  2083. td{font-family:verdana; font-size:10px; color:#333;}
  2084. table {border-style:none;}
  2085. table td, table th {padding:0 2px;border-collapse:collapse;}
  2086. table.tbl-bordered {border-style:none;}
  2087. table.tbl-bordered td, table.tbl-bordered th {padding:0 2px;border-style:solid;border-collapse:collapse;}
  2088. table.tbl-bordered th {border-width:1px;border-color:#333;}
  2089. table.tbl-bordered td {border-width:1px;border-color:#333;}
  2090. </style>
  2091. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;"><tr>
  2092. <td>[1612][v3]</td>
  2093. <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); ?>
  2094. <br />Gdańsk, dnia: .......................
  2095. </td>
  2096. </tr></table>
  2097. <br /><b>Dane Abonenta</b>
  2098. <br />Imię i Nazwisko / Nazwa firmy: <?php echo "{$user->P_NAME} {$user->P_NAME_SECOND}";?>
  2099. <br />Pesel / nr dowodu osoby reprezentującej firmę: <?php echo $user->P_PESEL; ?>
  2100. <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}"; ?>
  2101. <br />Nr ID klienta: <?php echo $user->ID; ?>
  2102. <br />Nr ID Umowy: <?php echo $deal_id; ?>
  2103. <?php
  2104. // <br />ID_SERVICES_OLD: ..........................................................
  2105. ?>
  2106. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;margin:40px 0;"><tr>
  2107. <td>&nbsp;</td>
  2108. <td style="width:260px;text-align:left">
  2109. <?php echo $com->fullName; ?><br /><?php echo $com->address_street; ?><br /><?php echo $com->address_city; ?>
  2110. </td>
  2111. </tr></table>
  2112. <p style="margin:50px 0; text-align:center;">ROZWIĄZANIE UMOWY ABONENCKIEJ O ŚWIADCZENIE USŁUG TELEKOMUNIKACYJNYCH NR <sup>[794]</sup></p>
  2113. <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>
  2114. <p>Termin odłączenia: <?php echo $termin_odlaczenia; ?>
  2115. <br />(poinformowano o miesięcznym terminie wypowiedzenia, jak również przedstawiono nowe propozycje oferty)</p>
  2116. <p style="margin:30px 0;font-weight:bold;"><sup>[1061]</sup>Powody rezygnacji z Usług (wybierz tylko 1 najważniejszy powód)</p>
  2117. <table cellspacing="0" cellpadding="0" border="1" style="width:100%" class="tbl-bordered">
  2118. <?php foreach ($arg_values['powod'] as $k_powod => $v_label) : ?>
  2119. <?php $sel = ($powod == $k_powod)? "X" : "&nbsp;"; ?>
  2120. <tr><td style="width:26%;"><?php echo $v_label; ?></td><td style="width:5%;text-align:center;"> <?php echo $sel; ?> </td><td></td></tr>
  2121. <?php endforeach; ?>
  2122. </table>
  2123. <table cellspacing="0" cellpadding="0" border="0" style="margin:60px 0;width:100%;">
  2124. <tr>
  2125. <td style="width:15%;">&nbsp;</td>
  2126. <td style="width:20%;border-top:1px dotted #000;text-align:center;">
  2127. Data i podpis pracownika BOK
  2128. </td>
  2129. <td>&nbsp;</td>
  2130. <td style="width:20%;border-top:1px dotted #000;text-align:center;">
  2131. Data i czytelny podpis Klienta
  2132. </td>
  2133. <td style="width:15%;">&nbsp;</td>
  2134. </tr>
  2135. </table>
  2136. <?php
  2137. }
  2138. public static function task_bok_rozwiazanie_umowy(&$user) {
  2139. echo'<script type="text/javascript">'."
  2140. function frm_bok_rozwiazanie_umowy(frm){
  2141. if (frm.id_proj.value=='') {
  2142. alert('Nie podano numeru projektu!');
  2143. } else if (frm.nr_umowy.value=='') {
  2144. alert('Nie podano numeru umowy!');
  2145. } else if (frm.temin_odlaczenia.value=='') {
  2146. alert('Nie podano daty odłączenia!');
  2147. // TODO: powod - radio
  2148. } else {
  2149. return true;
  2150. }
  2151. return false;
  2152. }
  2153. ".'</script>';
  2154. $umowy_l2 = WindykacjaStatsModel::get_umowy_from_l2($user);
  2155. if (empty($umowy_l2)) {
  2156. echo '<p style="color:red">' . "Brak aktualnych umów z klientem" . '</p>';
  2157. return;
  2158. }
  2159. $arg_errors = array();
  2160. $arg_values = array();
  2161. $args = array();
  2162. $args['id_proj'] = V::get('id_proj', '', $_REQUEST, 'int');
  2163. $args['nr_umowy'] = V::get('nr_umowy', '', $_REQUEST, 'int');
  2164. $args['temin_odlaczenia'] = V::get('temin_odlaczenia', '', $_REQUEST);
  2165. $args['powod'] = V::get('powod', '', $_REQUEST, 'int');
  2166. $arg_values['nr_umowy'] = array();
  2167. foreach ($umowy_l2 as $k_id => $v_deal) {
  2168. $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'] . ')';
  2169. }
  2170. $arg_values['powod'] = self::getPowodyRezygnacji();
  2171. // validate
  2172. if ($args['temin_odlaczenia'] == '') {
  2173. $args['temin_odlaczenia'] = date("Y-m-d", mktime(0, 0, 0, date('m') + 1, date('d'), date('Y')));
  2174. } else {// cehck date format
  2175. if (strlen($args['temin_odlaczenia']) != 10) {
  2176. $arg_errors['temin_odlaczenia'] = "Błędny format daty";
  2177. } else {
  2178. $check_date = explode('-', $args['temin_odlaczenia']);
  2179. if (count($check_date) != 3 || strlen($check_date[0]) != 4 || strlen($check_date[1]) != 2 || strlen($check_date[2]) != 2) {
  2180. $arg_errors['temin_odlaczenia'] = "Błędny format daty";
  2181. } else {
  2182. // ok
  2183. }
  2184. }
  2185. }
  2186. if ($args['id_proj'] <= 0) {
  2187. $arg_errors['id_proj'] = "Nie podano numeru projektu!";
  2188. }
  2189. if ($args['nr_umowy'] <= 0) {
  2190. $arg_errors['nr_umowy'] = "Nie wybrano numeru umowy!";
  2191. }
  2192. if ($args['powod'] <= 0) {
  2193. $arg_errors['powod'] = "Nie wybrano powodu rezygnacji!";
  2194. }
  2195. // add rezygnacja z umowy
  2196. if (1 == V::get('contact_bok_rozwiazanie_umowy_save', 0, $_POST, 'int')) {
  2197. if (!empty($arg_errors)) {
  2198. echo '<p style="color:red">' . "W formularzy wystąpiły błędy:";
  2199. foreach ($arg_errors as $k_field => $v_err) {
  2200. echo '<br />' . $v_err;
  2201. }
  2202. echo '</p>';
  2203. } else {
  2204. $msg_log = array();
  2205. $ret = WindykacjaStatsHelper::update_bok_rozwiazanie_umowy($user, $args['id_proj'], $args['nr_umowy'], $args['powod'], $arg_values['powod'][$args['powod']], $args['temin_odlaczenia'], $msg_log);
  2206. if ($ret) {
  2207. echo '<p style="color:green">' . "Dane zapisano pomyślnie" . '</p>';
  2208. if (!empty($msg_log)) {
  2209. echo '<p style="color:silver">' . implode('<br />', $msg_log) . '</p>';
  2210. }
  2211. $ico_print = '<img src="icon/print.gif" height="16" />';
  2212. 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>';
  2213. return;
  2214. } else {
  2215. echo '<p style="color:red">' . "Wystąpił błąd podczas zapisu danych" . '</p>';
  2216. if (!empty($msg_log)) {
  2217. echo '<p style="color:silver">' . implode('<br />', $msg_log) . '</p>';
  2218. }
  2219. }
  2220. }
  2221. }
  2222. echo'<form action="" method="post" onsubmit="' . "return frm_bok_rozwiazanie_umowy(this);" . '">';
  2223. echo'<input type="hidden" name="'."contact_bok_rozwiazanie_umowy_save".'" value="'."1".'" />';
  2224. echo '<b>' . "Rozwiązanie umowy abonenckiej o świadczenie usług telekomunikacyjnych" . '</b>';
  2225. echo '<br />' . "ID projektu: ";
  2226. echo '<input type="text" name="'."id_proj".'" value="' . $args['id_proj'] . '" class="i" />';
  2227. echo '<br />' . "Nr umowy: ";
  2228. foreach ($arg_values['nr_umowy'] as $k_id => $v_label) {
  2229. $sel = ($k_id == $args['nr_umowy'])? ' checked="checked"' : '';
  2230. echo '<br />' . "&nbsp;&nbsp;&nbsp;&nbsp;" . '<input type="radio" name="'."nr_umowy".'" value="' . $k_id . '" class="i" ' . $sel . ' />' . " " . $v_label;
  2231. }
  2232. echo '<br />' . "Termin odłączenia: ";
  2233. echo '<input type="text" name="'."temin_odlaczenia".'" value="' . $args['temin_odlaczenia']. '" class="i" />';
  2234. echo '<br />' . "Powód rezygnacji z usług: ";
  2235. foreach ($arg_values['powod'] as $k_id => $v_label) {
  2236. $sel = ($k_id == $args['powod'])? ' checked="checked"' : '';
  2237. echo '<br />' . "&nbsp;&nbsp;&nbsp;&nbsp;" . '<input type="radio" name="'."powod".'" value="' . $k_id . '" class="i" ' . $sel . ' />' . " " . $v_label;
  2238. }
  2239. echo '<br />' . '<input type="submit" value="'."zapisz".'" />';
  2240. echo'</form>';
  2241. }
  2242. }
  2243. class BillingDocs {
  2244. var $_docs;
  2245. var $_saldo;
  2246. public function __construct() {
  2247. $this->_docs = array();
  2248. $this->_saldo = 0;
  2249. }
  2250. public function add_bill_doc($data, $type, $h) {
  2251. $bill_doc = new BillingDoc($type, $h);
  2252. $this->_docs[$data][] = $bill_doc;
  2253. if ($data <= date("Y-m-d")) {
  2254. $this->_saldo += $bill_doc->get_saldo();
  2255. }
  2256. }
  2257. public function add_event($data, $type, $h) {
  2258. $event = new EventDoc($type, $h);
  2259. $this->_docs[$data][] = $event;
  2260. }
  2261. public function get_saldo() {
  2262. if (round($this->_saldo, 2) === 0.0) {// float point bug round('-6.821210263297E-13', 2) = -0
  2263. $this->_saldo = 0.0;
  2264. }
  2265. return round($this->_saldo, 2);
  2266. }
  2267. public function get_docs() {
  2268. return $this->_docs;
  2269. }
  2270. public function sort_docs() {
  2271. ksort($this->_docs);
  2272. }
  2273. public function get_unpaid_fvat() {
  2274. $today_date = date("Y-m-d");
  2275. $fvat_arr = array();
  2276. $saldo_curr = $this->get_saldo();
  2277. if ($saldo_curr >= 0) {
  2278. return $fvat_arr;
  2279. }
  2280. $break = false;
  2281. $saldo_dates_keys = array_keys($this->_docs);
  2282. $saldo_dates_keys = array_reverse($saldo_dates_keys);
  2283. foreach ($saldo_dates_keys as $k_data) {
  2284. if ($k_data > $today_date) continue;
  2285. $v_saldo_arr = $this->_docs[$k_data];
  2286. foreach ($v_saldo_arr as $k_ind => $v_doc) {
  2287. if ($v_doc->get_type() == 'FVAT') {
  2288. $h = $v_doc->get_data();
  2289. $h['WINIEN_POZOSTALO'] = round($h['WINIEN'], 2);
  2290. $saldo_curr += round($h['WINIEN'], 2);
  2291. if ($saldo_curr >= 0) {
  2292. $h['WINIEN_POZOSTALO'] -= $saldo_curr;
  2293. $break = true;
  2294. }
  2295. $fvat_arr[] = $h;
  2296. }
  2297. if ($break) break;
  2298. }
  2299. if ($break) break;
  2300. }
  2301. return $fvat_arr;
  2302. }
  2303. public function get_last_pay_doc() {
  2304. $last_pay_doc = null;
  2305. $today_date = date("Y-m-d");
  2306. $break = false;
  2307. foreach ($this->_docs as $k_data => $v_saldo_arr) {
  2308. if ($k_data > $today_date) continue;
  2309. foreach ($v_saldo_arr as $k_ind => $v_doc) {
  2310. if (in_array($v_doc->get_type(), array('WB_MASS','KP'))) {
  2311. $last_pay_doc = $v_doc;
  2312. break;
  2313. }
  2314. }
  2315. if ($break) break;
  2316. }
  2317. return $last_pay_doc;
  2318. }
  2319. }
  2320. class TimelineDoc {
  2321. var $_type;
  2322. var $_data;
  2323. var $_class;
  2324. public function get_type() { return $this->_type; }
  2325. public function get_data() { return $this->_data; }
  2326. public function get_class() { return $this->_class; }
  2327. public function get($key) {
  2328. return $this->_data[$key];
  2329. }
  2330. }
  2331. class EventDoc extends TimelineDoc {
  2332. public function __construct($type, &$data) {
  2333. $this->_data = $data;
  2334. $this->_class = 'EVENT';
  2335. $this->_type = $type;
  2336. }
  2337. }
  2338. class BillingDoc extends TimelineDoc {
  2339. public function __construct($type, &$data) {
  2340. $this->_data = $data;
  2341. $this->_class = 'BILLING';
  2342. $this->_convert_type($type);
  2343. $this->_count_saldo();
  2344. }
  2345. public function get_saldo() {
  2346. return $this->_saldo;
  2347. }
  2348. public function get($key) {
  2349. return $this->_data[$key];
  2350. }
  2351. public function _convert_type($type) {
  2352. $this->_type = $type;
  2353. switch ($this->_type) {
  2354. case 'FVAT':
  2355. $this->_data['nr'] = $this->_data['ID_BILLING_NUMBERS'];
  2356. $this->_data['WINIEN'] = $this->_data['WARTOSC'];
  2357. $this->_data['MA'] = 0;
  2358. break;
  2359. case 'KP':
  2360. case 'KW':
  2361. case 'WB':
  2362. case 'WB_MASS':
  2363. case 'KORV':
  2364. $this->_data['nr'] = $this->_data['NUMBER'];
  2365. break;
  2366. default:
  2367. }
  2368. }
  2369. public function _count_saldo() {
  2370. $this->_saldo = 0;
  2371. switch ($this->_type) {
  2372. case 'FVAT':
  2373. $this->_saldo -= round($this->_data['WARTOSC'], 2);
  2374. break;
  2375. case 'KORV':
  2376. $this->_saldo -= round($this->_data['MA'], 2);
  2377. break;
  2378. case 'KP':
  2379. case 'KW':
  2380. case 'WB':
  2381. case 'WB_MASS':
  2382. $this->_saldo += round($this->_data['MA'], 2);
  2383. $this->_saldo -= round($this->_data['WINIEN'], 2);
  2384. break;
  2385. default:
  2386. }
  2387. }
  2388. }
  2389. class WindykacjaStatsHelper {
  2390. // TODO: `A_RECORD_UPDATE_DATE` aktualizowane tylko wraz ze statusem
  2391. // TODO: statusy:
  2392. // 1. Automatyczne wysłanie powiadomień do Abonentów o niezapłaconych fakturach drogą e-mailową
  2393. // 5 dni roboczych po 10-go na okolo 5 dni przed blokadami
  2394. // - blokada: ??? dni po ostatniej dacie platnosci - odczytac czy zablokowany z l2?
  2395. // - 1 list - wezwanie - jesli min. 2 faktury - czyli 2 m-ce od 1 daty platnosci
  2396. // - 2 list - wezwanie ostateczne - min. 300 zł
  2397. public static function get_filter_selected() {
  2398. $filter_selected = V::get('_f', '', $_GET);
  2399. $filter_arr = self::get_filters();
  2400. $filter_selected = (array_key_exists($filter_selected, $filter_arr))? $filter_selected : '';
  2401. return $filter_selected;
  2402. }
  2403. public static function get_filters() {
  2404. $filter_arr['stan_zero'] = array("stan zerowy");
  2405. $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"));
  2406. $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
  2407. $filter_arr['15'] = array("mail ponaglenie", 'desc'=>array("10-ego + 5", "10-ego + 5 dni roboczych"));
  2408. $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
  2409. $filter_arr['tel1'] = array("kontakt tel.", 'desc'=>array("", "Ostatni kontakt tel. ponad 3 m-ce temu"));
  2410. $filter_arr['bad_address'] = array("błędny adres");
  2411. $filter_arr['wezwanie1'] = array("wezwanie do zapłaty", 'desc'=>array("2 x FVat", "2 faktury"));
  2412. $filter_arr['waiting-wezwanie2'] = array("oczekiwanie na uzbieranie 300 zł (firmy 500 zł)");
  2413. $filter_arr['wezwanie2'] = array("ostateczne wezwanie do zapłaty, rozwiązanie umowy", 'desc'=>array("wezwanie + 14, 300zł", "wezwanie + 14 dni, min. 300zł (firmy 500zł)"));
  2414. $filter_arr['waiting-krd'] = array("min. 60 dni od ostatecznego wezwania");
  2415. $filter_arr['krd'] = array("do przekazania do KRD", 'desc'=>array("wezwanie ost. + 60", "wezwanie ost. + 60 dni"));
  2416. $filter_arr['waiting-sad'] = array("przekazano do KRD");
  2417. $filter_arr['sad'] = array("przekazanie sprawy do sądu");// "krd + 14 dni"
  2418. $filter_arr['3 m-ce przed'] = array("3 m-ce przed przedawnieniem");// 3 m-ce przed przedawnieniem
  2419. $filter_arr['po-terminie'] = array("po terminie");// 3 lata po dacie platnosci faktur
  2420. $filter_arr['has_nr_sad'] = array("nr sprawy sąd");
  2421. $filter_arr['has_nr_komornik'] = array("nr sprawy komornik");
  2422. $filter_arr['has_ustalenia'] = array("ustalenia z klientem");
  2423. $filter_arr['sad_and_komornik'] = array("sąd z komornik");
  2424. $filter_arr['sad_bez_komornik'] = array("sąd bez komornik");
  2425. return $filter_arr;
  2426. }
  2427. public static function get_by_user(&$user) {
  2428. $db = DB::getDB();
  2429. $sql = "select * from `USERS2_WINDYKACJA_STATUS` as w where w.`ID_BILLING_USERS`='{$user->ID}' ";
  2430. $res = $db->query($sql);
  2431. $ret = $db->fetch($res);
  2432. return $ret;
  2433. }
  2434. /**
  2435. * Auto update user stats.
  2436. *
  2437. * @returns boolean - status changed or not
  2438. * @param $user - object return from function WindykacjaStatsModel::get_user_by_id
  2439. * @param $billing_docs - user billing docs
  2440. *
  2441. * @used in task_update_stats - for all users
  2442. * @used in WindykacjaView::user_historia_platnosci after view billing docs
  2443. *
  2444. * save HIST at status change to WAITING
  2445. */
  2446. public static function update_stats(&$user, &$billing_docs) {
  2447. $data_arr = array();
  2448. if ($user->A_STATUS_UPDATE_DATE >= date("Y-m-d")) {
  2449. return;
  2450. }
  2451. $saldo = $billing_docs->get_saldo();
  2452. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");
  2453. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2454. $data_arr["A_RECORD_UPDATE_AUTHOR"] = "stat-update";
  2455. // set default values
  2456. //$data_arr["A_STATUS"] = "WAITING";
  2457. //$data_arr["PAY_FVAT"] = 0;
  2458. //$data_arr["PAY_DATE"] = "0000-00-00";
  2459. // update values
  2460. {// LAST_PAY_DATE
  2461. $last_pay_doc = $billing_docs->get_last_pay_doc();
  2462. if ($last_pay_doc) {
  2463. $last_pay_doc = $last_pay_doc->get_data();
  2464. $data_arr["LAST_PAY_DATE"] = $last_pay_doc['BILL_DATE'];
  2465. }
  2466. }
  2467. $data_arr["PAY_SALDO"] = $saldo;
  2468. $data_arr["PAY_FVAT"] = 0;
  2469. $data_arr["PAY_DATE_FIRST_FVAT"] = '0000-00-00';
  2470. if ($saldo <= 0) {
  2471. $fvat_arr = $billing_docs->get_unpaid_fvat();
  2472. $data_arr["PAY_FVAT"] = count($fvat_arr);
  2473. if (count($fvat_arr) > 0) {
  2474. foreach ($fvat_arr as $v_fvat) {
  2475. if (!isset($data_arr["PAY_DATE"]) || $v_fvat['PAYMENT_TERM'] > $data_arr["PAY_DATE"]) {
  2476. $data_arr["PAY_DATE"] = $v_fvat['PAYMENT_TERM'];
  2477. }
  2478. if ('0000-00-00' == $data_arr["PAY_DATE_FIRST_FVAT"] || $v_fvat['PAYMENT_TERM'] < $data_arr["PAY_DATE_FIRST_FVAT"]) {
  2479. $data_arr["PAY_DATE_FIRST_FVAT"] = $v_fvat['PAYMENT_TERM'];
  2480. }
  2481. }
  2482. }
  2483. }
  2484. // zmiana statusu na kolejny wg. salda
  2485. switch ($user->A_STATUS) {
  2486. case 'WAITING':// auto
  2487. if ($user->wezwanie1_DATE == '0000-00-00') {
  2488. if ($saldo < 0) {
  2489. $fvat_arr = $billing_docs->get_unpaid_fvat();
  2490. if (count($fvat_arr) > 1) {
  2491. $data_arr["A_STATUS"] = "wezwanie1";
  2492. }
  2493. }
  2494. }
  2495. else if ($user->wezwanie2_DATE == '0000-00-00') {
  2496. $data_arr["A_STATUS"] = "waiting-wezwanie2";
  2497. }
  2498. else {
  2499. $data_arr["A_STATUS"] = "wezwanie2";
  2500. }
  2501. break;
  2502. case 'wezwanie1':// wymaga `PAY_TERM`, `wezwanie1_DATE`, `ID_KORESP`
  2503. break;
  2504. case 'waiting-wezwanie2':// auto -> wezwanie2
  2505. if ($user->wezwanie2_DATE == '0000-00-00') {
  2506. if ($saldo <= -300) {// TODO: data od pierwszego wezwania
  2507. $data_arr["A_STATUS"] = "wezwanie2";
  2508. }
  2509. }
  2510. break;
  2511. case 'wezwanie2':// wymaga `PAY_TERM`, `wezwanie2_DATE`, `ID_KORESP`
  2512. break;
  2513. case 'waiting-krd':// auto -> krd jesli minelo 60 dni od wystawienia wezwanie2
  2514. if ($user->wezwanie2_DATE != '0000-00-00') {
  2515. $wzw2 = new stdClass();
  2516. $wzw2->Y = intval(substr($user->wezwanie2_DATE, 0, 4));
  2517. $wzw2->m = intval(substr($user->wezwanie2_DATE, 5, 2));
  2518. $wzw2->d = intval(substr($user->wezwanie2_DATE, 8, 2));
  2519. $wzw2->plus_60 = date("Y-m-d", mktime(0,0,0, $wzw2->m, $wzw2->d + 60, $wzw2->Y));
  2520. if ($wzw2->plus_60 < date("Y-m-d")) {
  2521. $data_arr["A_STATUS"] = "krd";
  2522. }
  2523. }
  2524. break;
  2525. default:
  2526. }
  2527. // zmiana statusu na czysty - WAITING
  2528. if ($saldo >= 0 || $data_arr["PAY_FVAT"] < 2) {
  2529. $data_arr["A_STATUS"] = "WAITING";
  2530. // TODO: wyczyszczenie pol
  2531. $data_arr["wezwanie2_DATE"] = '0000-00-00';
  2532. $data_arr["wezwanie1_DATE"] = '0000-00-00';
  2533. //$data_arr["PAY_DATE"] = '0000-00-00';// TODO: ?
  2534. }
  2535. $sql_arr = array();
  2536. foreach ($data_arr as $k => $v) {
  2537. $sql_arr[] = "`{$k}`='{$v}'";
  2538. }
  2539. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ; ";
  2540. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  2541. DB::query($sql);
  2542. // update HIST - tylko zmiana na WAITING - powrót do oczekujących
  2543. if (isset($data_arr["A_STATUS"]) && $data_arr["A_STATUS"] == "WAITING" && $user->A_STATUS != "WAITING") {
  2544. //if (DB::affected()) {
  2545. $sql_arr = array();
  2546. foreach ($data_arr as $k => $v) {
  2547. $sql_arr["`{$k}`"] = "'{$v}'";
  2548. }
  2549. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  2550. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  2551. DB::query($sql);
  2552. //}
  2553. }
  2554. }
  2555. public static function &get_phone_status_array(&$user) {
  2556. $ret = array();
  2557. $status_info = self::get_phone_status_info($user);
  2558. foreach ($status_info as $k => $v) {
  2559. $ret[$k] = $v['label'];
  2560. }
  2561. return $ret;
  2562. }
  2563. /**
  2564. * @param $user
  2565. *
  2566. * @returns array of 'label', 'date' -> nowy PAY_TERM ustalony wg. aktualnego stanu
  2567. */
  2568. public static function &get_phone_status_info(&$user) {
  2569. $ret = array();
  2570. $ret['nie_zaplaci'] = array('label'=>"nie zapłaci", 'date'=>'');
  2571. $today = date("Y-m-d");
  2572. $date = date("Y-m-d");
  2573. {// PAY_TERM jesli jest ustalony np. z wewaznie1 lub wezwanie2
  2574. if ($user->PAY_TERM != '0000-00-00') {
  2575. if ($user->PAY_TERM > $today) {
  2576. // jest już ustalona data platnosci na przyszłość
  2577. $date = $user->PAY_TERM;
  2578. }
  2579. }
  2580. }
  2581. if ($date > $today) {// data platnosci w przyszlosci -> ok
  2582. {// zapłaci w terminie today +14 dni lub PAY_TERM jesli jest ustalony np. z wewaznie1 lub wezwanie2
  2583. $ret['zaplaci_w_terminie'] = array('label'=>"zapłaci w terminie", 'date'=>$date);
  2584. }
  2585. }
  2586. else {// data platnosci w przeszlosci - przeterminowana -> ustalic nowa (+14,+1mc,+2mc,+3mc)
  2587. {// zapłaci w terminie today +14 dni lub PAY_TERM jesli jest ustalony np. z wewaznie1 lub wezwanie2
  2588. $date = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  2589. $ret['zaplaci_w_terminie'] = array('label'=>"zapłaci w terminie", 'date'=>$date);
  2590. }
  2591. {// zaplaci za 1-mc pozniej
  2592. $date = date("Y-m-d", mktime(0,0,0,date('m') + 1, date('d'), date('Y')));
  2593. $ret['zaplaci_za_1mc'] = array('label'=>"zapłaci miesiąc później", 'date'=>$date);
  2594. }
  2595. {// zaplaci za 2-mce pozniej
  2596. $date = date("Y-m-d", mktime(0,0,0,date('m') + 2, date('d'), date('Y')));
  2597. $ret['zaplaci_za_2mc'] = array('label'=>"zapłaci 2 miesiące później", 'date'=>$date);
  2598. }
  2599. {// zaplaci za 3-mce pozniej
  2600. $date = date("Y-m-d", mktime(0,0,0,date('m') + 3, date('d'), date('Y')));
  2601. $ret['zaplaci_za_3mc'] = array('label'=>"zapłaci 3 miesiące później", 'date'=>$date);
  2602. }
  2603. }
  2604. $ret['nie_odbiera'] = array('label'=>"nie obiera lub wyłączony telefon", 'date'=>'');
  2605. $ret['zly_numer'] = array('label'=>"zły numer telefonu", 'date'=>'');
  2606. return $ret;
  2607. }
  2608. /**
  2609. * Update user phone status.
  2610. *
  2611. * @returns boolean - status changed or not
  2612. * @param $user - object return from function WindykacjaStatsModel::get_user_by_id
  2613. * @param $phone_status - phone status
  2614. *
  2615. */
  2616. public static function update_phone_status(&$user, $phone_status) {
  2617. $data_arr = array();
  2618. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2619. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2620. $data_arr["LAST_PHONE_STATUS"] = $phone_status;
  2621. $data_arr["LAST_PHONE_STATUS_DATE"] = date("Y-m-d");
  2622. $status_info = self::get_phone_status_info($user);
  2623. if (array_key_exists($phone_status, $status_info)) {
  2624. $date = V::get('date', '', $status_info[$phone_status]);
  2625. if ($date != '' && $date != '0000-00-00') {
  2626. $data_arr["PAY_TERM"] = $date;
  2627. }
  2628. }
  2629. $sql_arr = array();
  2630. foreach ($data_arr as $k => $v) {
  2631. $sql_arr[] = "`{$k}`='{$v}'";
  2632. }
  2633. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ; ";
  2634. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  2635. DB::query($sql);
  2636. // update HIST
  2637. //if (DB::affected()) {
  2638. $sql_arr = array();
  2639. foreach ($data_arr as $k => $v) {
  2640. $sql_arr["`{$k}`"] = "'{$v}'";
  2641. }
  2642. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  2643. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  2644. DB::query($sql);
  2645. //}
  2646. return true;
  2647. }
  2648. public static function update_old_id_koresp(&$user, $id_koresp, $koresp_type) {
  2649. $db = DB::getDB();
  2650. $koresp = DB::get_by_id('IN7_DZIENNIK_KORESP', $id_koresp);
  2651. if (!$koresp) {
  2652. return false;
  2653. }
  2654. // check if ID koresp already exists in HIST table!
  2655. $sql = "select wh.`ID`,wh.``,wh.`` from `USERS2_WINDYKACJA_STATUS_HIST` as wh where ";
  2656. $data_arr = array();
  2657. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2658. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2659. $data_arr["ID_USERS2"] = $user->WINDYKACJA_ID;
  2660. $data_arr["ID_KORESP"] = $id_koresp;
  2661. //$data_arr["A_STATUS_UPDATE_DATE"] = $koresp->K_DATA_OTRZYMANEJ_KORESP;// data utworzenia
  2662. $data_arr["A_STATUS_UPDATE_DATE"] = $koresp->K_DATA_OTRZYM_KORESP;// data wyslania
  2663. // $koresp_type ?
  2664. // update HIST
  2665. $sql_arr = array();
  2666. foreach ($data_arr as $k => $v) {
  2667. $sql_arr["`{$k}`"] = "'{$v}'";
  2668. }
  2669. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  2670. $db->query($sql);
  2671. return true;
  2672. }
  2673. /**
  2674. * @returns int - ID Koresp or null if error
  2675. */
  2676. public static function update_bok_rozwiazanie_umowy(&$user, $id_proj, $nr_umowy, $powod, $powod_desc, $termin_odlaczenia, &$msg_log) {
  2677. $data_arr = array();
  2678. if ($id_proj > 0 && $nr_umowy > 0 && $powod != '') {
  2679. $new_id_deals = WindykacjaStatsModel::create_deals_rozwiazanie($user->ID, $nr_umowy, $termin_odlaczenia, $powod_desc);
  2680. if (!$new_id_deals) {
  2681. $msg_log[] = "Nie udało się utworzyć rekordu w DEALS_TABLE";
  2682. return null;
  2683. }
  2684. $msg_log[] = "Utworzonno rekord w DEALS_TABLE ID={$new_id_deals}";
  2685. $new_id_koresp = WindykacjaStatsModel::create_koresp($user, 'rozwiazanie umowy', $id_proj, array('nr_umowy'=>$nr_umowy, 'powod'=>$powod, 'powod_desc'=>$powod_desc));
  2686. if (!$new_id_koresp) {
  2687. $msg_log[] = "Nie udało się utworzyć rekordu KORESP";
  2688. return null;
  2689. }
  2690. $msg_log[] = "Utworzonno rekord KORESP ID={$new_id_koresp}";
  2691. $data_arr["ID_KORESP"] = $new_id_koresp;
  2692. } else {
  2693. return null;
  2694. }
  2695. $data_arr["params"] = "rozwiazanie umowy,{$nr_umowy},{$powod},{$termin_odlaczenia},{$new_id_deals}";
  2696. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");// zawsze podana jesli jest zmiana A_STATUS
  2697. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2698. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2699. $sql_arr = array();
  2700. foreach ($data_arr as $k => $v) {
  2701. $sql_arr[] = "`{$k}`='{$v}'";
  2702. }
  2703. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ";
  2704. DB::query($sql);
  2705. //if (DB::affected()) {
  2706. // update $user data
  2707. foreach ($data_arr as $k => $v) {
  2708. $user->$k = $v;
  2709. }
  2710. $sql_arr = array();
  2711. foreach ($data_arr as $k => $v) {
  2712. $sql_arr["`{$k}`"] = "'{$v}'";
  2713. }
  2714. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  2715. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  2716. DB::query($sql);
  2717. //}
  2718. return $new_id_koresp;
  2719. }
  2720. public static function update_users_table() {
  2721. if (!isset($_SESSION['USERS2_WINDYKACJA_PANEL'])) $_SESSION['USERS2_WINDYKACJA_PANEL'] = array();
  2722. $_SESSION['USERS2_WINDYKACJA_PANEL']['_initialized'] = 0;// always actualize
  2723. if (0 == V::get('_initialized', 0, $_SESSION['USERS2_WINDYKACJA_PANEL'], 'int')) {
  2724. $sql = "insert ignore into `USERS2_WINDYKACJA_STATUS` (`ID_BILLING_USERS`, `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  2725. select `id_users`, '" . date("Y-m-d-H:i") . "', 'sync-users' from `BILLING_USERS_ADD`
  2726. ";
  2727. $res = DB::query($sql);
  2728. $_SESSION['USERS2_WINDYKACJA_PANEL']['_initialized'] = 1;
  2729. }
  2730. }
  2731. public static function _to_update_where() {
  2732. $sql_where = "";
  2733. $sql_where_and_arr = array();
  2734. //$sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  2735. $sql_where_and_arr[] = "w.`A_STATUS_UPDATE_DATE`<CURDATE()";
  2736. $sql_where = implode(" and ", $sql_where_and_arr);
  2737. return $sql_where;
  2738. }
  2739. public static function get_to_update_total() {
  2740. $ret = array();
  2741. $sql_where = self::_to_update_where();
  2742. $db = DB::getDB();
  2743. $sql = "select count(1) as cnt
  2744. from `USERS2_WINDYKACJA_STATUS` as w
  2745. where {$sql_where}
  2746. ";
  2747. $res = $db->query($sql);
  2748. while ($r = $db->fetch($res)) {
  2749. $ret = $r->cnt;
  2750. }
  2751. return $ret;
  2752. }
  2753. public static function get_to_update_list($limit) {
  2754. $ret = array();
  2755. $db = DB::getDB();
  2756. $sql_where = self::_to_update_where();
  2757. $sql_limit = ($limit > 0)? "limit {$limit}" : "";
  2758. $sql = "select w.*
  2759. from `USERS2_WINDYKACJA_STATUS` as w
  2760. where {$sql_where}
  2761. order by ID desc
  2762. {$sql_limit}
  2763. ";
  2764. $res = $db->query($sql);
  2765. while ($r = $db->fetch($res)) {
  2766. $ret[] = $r;
  2767. }
  2768. return $ret;
  2769. }
  2770. /**
  2771. * @returns boolean - status changed or not
  2772. * @param $user - object return from function WindykacjaStatsModel::get_user_by_id
  2773. * @param $data - array of new user data
  2774. * 1. wysłanie 1 wezwania do zapłaty ($user->A_STATUS='wezwanie1'; `PAY_TERM`, `wezwanie1_DATE`, `ID_PROJ`)
  2775. * 2. wysłanie 2 wezwania do zapłaty ($user->A_STATUS='wezwanie2'; `PAY_TERM`, `wezwanie2_DATE`, `ID_KORESP`)
  2776. * 3. klient spłacił wszystkie zobowiązania (`PAY_SALDO`>=0)
  2777. * TODO: 4. bledny adres klienta - ponowne wyslanie wezwania - niezaleznie od statusu?
  2778. *
  2779. * if $user->A_STATUS == 'wezwanie1' @param $data:
  2780. * $data['wezwanie1_DATE'] - user data
  2781. * $data['PAY_TERM'] - user data
  2782. * $data['ID_PROJ'] - do WindykacjaStatsModel::create_koresp
  2783. */
  2784. public static function update_user($user, $data) {
  2785. if (empty($data)) {
  2786. return $user;
  2787. }
  2788. $data_arr = array();
  2789. // set up status by current status and $data
  2790. switch ($user->A_STATUS) {
  2791. case 'WAITING':// auto
  2792. break;
  2793. case 'wezwanie1':// wymaga `PAY_TERM`, `wezwanie1_DATE`, `ID_KORESP` - wysłanie wezwanie1 (z podaniem ID_KORESP, i PAY_TERM=NOW()+14dni)
  2794. // TODO: ID_KORESP z utworzonego rekordu KORESP (wymaga ID_PROJ)
  2795. if ("" != V::get('wezwanie1_DATE' ,'', $data) && "" != V::get('PAY_TERM' ,'', $data) && V::get('ID_PROJ' ,'', $data, 'int') > 0) {
  2796. $new_id_koresp = WindykacjaStatsModel::create_koresp($user, 'wezwanie1', V::get('ID_PROJ' ,'', $data, 'int'));
  2797. if (!$new_id_koresp) {
  2798. // TODO: revert changes - DB error
  2799. return $user;
  2800. }
  2801. $data_arr["ID_KORESP"] = $new_id_koresp;
  2802. $data_arr["A_STATUS"] = "waiting-wezwanie2";
  2803. $data_arr["wezwanie1_DATE"] = V::get('wezwanie1_DATE' ,'', $data);
  2804. $data_arr["PAY_TERM"] = V::get('PAY_TERM' ,'', $data);
  2805. unset($data['ID_PROJ']);// TODO: RM after mv $data to $data_arr
  2806. }
  2807. break;
  2808. case 'waiting-wezwanie2':// auto
  2809. break;
  2810. case 'wezwanie2':// wymaga `PAY_TERM`, `wezwanie2_DATE`, `ID_KORESP` - wysłanie wezwanie2 (z podaniem ID_KORESP, i PAY_TERM=NOW()+14dni)
  2811. if ("" != V::get('wezwanie2_DATE' ,'', $data) && "" != V::get('PAY_TERM' ,'', $data) && V::get('ID_PROJ' ,'', $data, 'int') > 0) {
  2812. $new_id_koresp = WindykacjaStatsModel::create_koresp($user, 'wezwanie2', V::get('ID_PROJ' ,'', $data, 'int'));
  2813. if (!$new_id_koresp) {
  2814. // TODO: revert changes - DB error
  2815. return $user;
  2816. }
  2817. $data_arr["ID_KORESP"] = $new_id_koresp;
  2818. $data_arr["A_STATUS"] = "waiting-krd";
  2819. $data_arr["wezwanie2_DATE"] = V::get('wezwanie2_DATE' ,'', $data);
  2820. $data_arr["PAY_TERM"] = V::get('PAY_TERM' ,'', $data);
  2821. }
  2822. break;
  2823. default:
  2824. }
  2825. // if status not set, check id user saldo is ok
  2826. if (!isset($data_arr["A_STATUS"])) {
  2827. if (isset($data['PAY_SALDO']) && $data['PAY_SALDO'] >= 0) {
  2828. $data_arr["A_STATUS"] = "WAITING";
  2829. }
  2830. }
  2831. // error jesli nie ustalono statusu
  2832. if (!isset($data_arr["A_STATUS"])) {
  2833. return false;
  2834. }
  2835. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");// zawsze podana jesli jest zmiana A_STATUS
  2836. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2837. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2838. $sql_arr = array();
  2839. foreach ($data_arr as $k => $v) {
  2840. $sql_arr[] = "`{$k}`='{$v}'";
  2841. }
  2842. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ";
  2843. DB::query($sql);
  2844. //if (DB::affected()) {
  2845. // update $user data
  2846. foreach ($data_arr as $k => $v) {
  2847. $user->$k = $v;
  2848. }
  2849. $sql_arr = array();
  2850. foreach ($data_arr as $k => $v) {
  2851. $sql_arr["`{$k}`"] = "'{$v}'";
  2852. }
  2853. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  2854. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  2855. DB::query($sql);
  2856. //}
  2857. return true;
  2858. }
  2859. public static function bad_address_save($user, $id_koresp) {
  2860. $data_arr = array();
  2861. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2862. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2863. $data_arr["BAD_ADDRESS"] = 1;
  2864. $data_arr["ID_KORESP"] = $id_koresp;
  2865. return self::_sql_update($user, $data_arr);
  2866. }
  2867. public static function bad_address_confirm($user, $id_koresp) {
  2868. $data_arr = array();
  2869. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2870. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2871. $data_arr["BAD_ADDRESS"] = 0;
  2872. $data_arr["ID_KORESP"] = $id_koresp;
  2873. return self::_sql_update($user, $data_arr);
  2874. }
  2875. public static function _sql_update($user, $data_arr) {
  2876. // update values
  2877. $sql_arr = array();
  2878. foreach ($data_arr as $k => $v) {
  2879. $sql_arr[] = "`{$k}`='{$v}'";
  2880. }
  2881. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ";
  2882. DB::query($sql);
  2883. // update $user data
  2884. foreach ($data_arr as $k => $v) {
  2885. $user->$k = $v;
  2886. }
  2887. $sql_arr = array();
  2888. foreach ($data_arr as $k => $v) {
  2889. $sql_arr["`{$k}`"] = "'{$v}'";
  2890. }
  2891. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  2892. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  2893. DB::query($sql);
  2894. return true;
  2895. }
  2896. public static function change_status_save($user, $new_status) {
  2897. $data_arr = array();
  2898. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2899. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2900. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");
  2901. $data_arr["A_STATUS"] = $new_status;
  2902. return self::_sql_update($user, $data_arr);
  2903. }
  2904. public static function nr_sprawy_krd_save($user, $nr_sprawy_krd) {
  2905. $data_arr = array();
  2906. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2907. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2908. $data_arr["NR_SPRAWY_KRD"] = $nr_sprawy_krd;
  2909. return self::_sql_update($user, $data_arr);
  2910. }
  2911. public static function nr_sprawy_sad_save($user, $nr_sprawy_sad) {
  2912. $data_arr = array();
  2913. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2914. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2915. $data_arr["NR_SPRAWY_SAD"] = $nr_sprawy_sad;
  2916. return self::_sql_update($user, $data_arr);
  2917. }
  2918. public static function nr_sprawy_komornik_save($user, $nr_sprawy_komornik) {
  2919. $data_arr = array();
  2920. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2921. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2922. $data_arr["NR_SPRAWY_KOMORNIK"] = $nr_sprawy_komornik;
  2923. return self::_sql_update($user, $data_arr);
  2924. }
  2925. public static function ustalenia_info_save($user, $ustalenia_date, $ustalenia_info) {
  2926. $data_arr = array();
  2927. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  2928. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  2929. $data_arr["L_APPOITMENT_DATE"] = $ustalenia_date;
  2930. $data_arr["L_APPOITMENT_INFO"] = $ustalenia_info;
  2931. $data_arr["L_APPOITMENT_USER"] = $_SESSION['ADM_ACCOUNT'];
  2932. if (empty($ustalenia_info) && (empty($ustalenia_date) || $ustalenia_date == '0000-00-00')) {
  2933. $data_arr["L_APPOITMENT_USER"] = '';
  2934. }
  2935. return self::_sql_update($user, $data_arr);
  2936. }
  2937. public static function get_user_hist_events(&$user) {
  2938. $db = DB::getDB();
  2939. $ret = array();
  2940. $sql = "select wh.*
  2941. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  2942. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  2943. ";
  2944. $res = $db->query($sql);
  2945. while ($r = $db->fetch($res)) {
  2946. $ret[] = $r;
  2947. }
  2948. return $ret;
  2949. }
  2950. public static function get_user_hist_status_events(&$user) {
  2951. $db = DB::getDB();
  2952. $ret = array();
  2953. $sql = "select wh.*, kor.`K_ZAWARTOS`
  2954. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  2955. left join `IN7_DZIENNIK_KORESP` as kor on(wh.`ID_KORESP`!='N/S;' and kor.`ID`=wh.`ID_KORESP`)
  2956. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  2957. and wh.`A_STATUS_UPDATE_DATE`!='N/S;'
  2958. ";
  2959. $res = $db->query($sql);
  2960. while ($r = $db->fetch($res)) {
  2961. $ret[] = $r;
  2962. }
  2963. return $ret;
  2964. }
  2965. public static function get_user_hist_phone_events(&$user) {
  2966. $ret = array();
  2967. $db = DB::getDB();
  2968. $sql = "select wh.*
  2969. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  2970. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  2971. and wh.`LAST_PHONE_STATUS`!='N/S;'
  2972. ";
  2973. $res = $db->query($sql);
  2974. while ($r = $db->fetch($res)) {
  2975. $ret[] = $r;
  2976. }
  2977. return $ret;
  2978. }
  2979. public static function get_user_bad_address_events(&$user) {
  2980. $ret = array();
  2981. $db = DB::getDB();
  2982. $sql = "select wh.*
  2983. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  2984. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  2985. and wh.`BAD_ADDRESS`!='N/S;'
  2986. order by wh.`ID` ASC
  2987. ";
  2988. $res = $db->query($sql);
  2989. while ($r = $db->fetch($res)) {
  2990. $ret[] = $r;
  2991. }
  2992. return $ret;
  2993. }
  2994. public static function get_status_count() {
  2995. $sql_where_and_arr = array();
  2996. $usrAclGroups = User::getLdapGroupsNames();
  2997. $usrAclGroups[] = '';
  2998. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  2999. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  3000. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  3001. $sqlWhereAdd = " and " . implode(" and ", $sql_where_and_arr);
  3002. $ret = array();
  3003. $db = DB::getDB();
  3004. $sql = " select w.`A_STATUS`, count(1) as cnt
  3005. , sum(IF(w.`PAY_SALDO`<0, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  3006. from `USERS2_WINDYKACJA_STATUS` as w
  3007. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3008. where 1=1 {$sqlWhereAdd}
  3009. group by w.`A_STATUS`
  3010. ";
  3011. $res = $db->query($sql);
  3012. while ($r = $db->fetch($res)) {
  3013. $ret[$r->A_STATUS] = $r;
  3014. }
  3015. // filter: 'po-terminie'
  3016. $sql = "select w.`A_STATUS`
  3017. , count(1) as cnt
  3018. , sum(IF(w.`PAY_SALDO`<0, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  3019. from `USERS2_WINDYKACJA_STATUS` as w
  3020. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3021. where
  3022. w.`PAY_SALDO`<0
  3023. and w.`PAY_DATE`!='0000-00-00'
  3024. and w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)
  3025. {$sqlWhereAdd}
  3026. ";
  3027. $res = $db->query($sql);
  3028. if ($r = $db->fetch($res)) {
  3029. $ret['po-terminie'] = $r;
  3030. }
  3031. // filter: '3 m-ce przed'
  3032. $sql = "select w.`A_STATUS`
  3033. , count(1) as cnt
  3034. , sum(IF(w.`PAY_SALDO`<0, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  3035. from `USERS2_WINDYKACJA_STATUS` as w
  3036. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3037. where
  3038. w.`PAY_SALDO`<0
  3039. and w.`PAY_DATE`!='0000-00-00'
  3040. and w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)
  3041. and w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)
  3042. {$sqlWhereAdd}
  3043. ";
  3044. $res = $db->query($sql);
  3045. if ($r = $db->fetch($res)) {
  3046. $ret['3 m-ce przed'] = $r;
  3047. }
  3048. // filter: 'tel1'
  3049. $sql = "select w.`A_STATUS`
  3050. , count(1) as cnt
  3051. , sum(IF(w.`PAY_SALDO`<0, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  3052. from `USERS2_WINDYKACJA_STATUS` as w
  3053. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3054. where
  3055. w.`PAY_SALDO`<0
  3056. and w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')
  3057. and ( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
  3058. or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 3 MONTH) )
  3059. {$sqlWhereAdd}
  3060. ";
  3061. $res = $db->query($sql);
  3062. if ($r = $db->fetch($res)) {
  3063. $ret['tel1'] = $r;
  3064. }
  3065. // filter: 'bad_address'
  3066. $sql = "select w.`A_STATUS`
  3067. , count(1) as cnt
  3068. , sum(IF(w.`PAY_SALDO`<0, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  3069. from `USERS2_WINDYKACJA_STATUS` as w
  3070. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3071. where
  3072. w.`PAY_SALDO`<0
  3073. -- and w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')
  3074. and w.`BAD_ADDRESS`>0
  3075. {$sqlWhereAdd}
  3076. ";
  3077. $res = $db->query($sql);
  3078. if ($r = $db->fetch($res)) {
  3079. $ret['bad_address'] = $r;
  3080. }
  3081. // filter: 'stan_zero', '10-ego'
  3082. $sql = "select w.`A_STATUS`
  3083. , count(1) as cnt
  3084. , sum(IF(w.`PAY_SALDO`>=0, 1, 0)) as cnt_stan_zero
  3085. , sum(IF(w.`PAY_SALDO`<0, 1, 0)) as cnt_stan_minus
  3086. , sum(IF(w.`PAY_SALDO`<0, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  3087. from `USERS2_WINDYKACJA_STATUS` as w
  3088. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3089. where
  3090. w.`A_STATUS`='WAITING'
  3091. {$sqlWhereAdd}
  3092. ";
  3093. $res = $db->query($sql);
  3094. if ($r = $db->fetch($res)) {
  3095. $ret['stan_zero'] = (object)array('A_STATUS'=>'stan_zero', 'cnt'=>$r->cnt_stan_zero, 'suma_zaleglosci'=>0);
  3096. $ret['10-ego'] = (object)array('A_STATUS'=>'10-ego', 'cnt'=>$r->cnt_stan_minus, 'suma_zaleglosci'=>$r->suma_zaleglosci);
  3097. }
  3098. // filter: 'has_nr_sad', 'has_nr_komornik', 'has_ustalenia'
  3099. $sql = "select w.`A_STATUS`
  3100. , count(1) as cnt
  3101. , sum(IF(w.`NR_SPRAWY_SAD`!='', 1, 0)) as cnt_sad
  3102. , sum(IF(w.`NR_SPRAWY_KOMORNIK`!='', 1, 0)) as cnt_komornik
  3103. , sum(IF(w.`L_APPOITMENT_INFO`!='', 1, 0)) as cnt_ustalenia
  3104. from `USERS2_WINDYKACJA_STATUS` as w
  3105. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3106. where
  3107. (w.`NR_SPRAWY_SAD`!=''
  3108. or w.`NR_SPRAWY_KOMORNIK`!=''
  3109. or w.`L_APPOITMENT_INFO`!=''
  3110. )
  3111. {$sqlWhereAdd}
  3112. ";
  3113. $res = $db->query($sql);
  3114. if ($r = $db->fetch($res)) {
  3115. $ret['has_nr_sad'] = (object)array('A_STATUS'=>'has_nr_sad', 'cnt'=>$r->cnt_sad, 'suma_zaleglosci'=>null);
  3116. $ret['has_nr_komornik'] = (object)array('A_STATUS'=>'has_nr_komornik', 'cnt'=>$r->cnt_komornik, 'suma_zaleglosci'=>null);
  3117. $ret['has_ustalenia'] = (object)array('A_STATUS'=>'has_ustalenia', 'cnt'=>$r->cnt_ustalenia, 'suma_zaleglosci'=>null);
  3118. }
  3119. // filter: 'sad_and_komornik', 'sad_bez_komornik'
  3120. $sql = "select w.`A_STATUS`
  3121. , count(1) as cnt
  3122. , sum(IF(w.`NR_SPRAWY_KOMORNIK`!='', 1, 0)) as cnt_komornik
  3123. from `USERS2_WINDYKACJA_STATUS` as w
  3124. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3125. where
  3126. w.`A_STATUS`='sad'
  3127. {$sqlWhereAdd}
  3128. ";
  3129. $res = $db->query($sql);
  3130. if ($r = $db->fetch($res)) {
  3131. $ret['sad_and_komornik'] = (object)array('A_STATUS'=>'sad_and_komornik', 'cnt'=>$r->cnt_komornik, 'suma_zaleglosci'=>null);
  3132. $ret['sad_bez_komornik'] = (object)array('A_STATUS'=>'sad_bez_komornik', 'cnt'=>($r->cnt - $r->cnt_komornik), 'suma_zaleglosci'=>null);
  3133. }
  3134. return $ret;
  3135. }
  3136. }
  3137. class WindykacjaStatsModel {
  3138. public static function _parse_query($q) {
  3139. $sql_where = '';
  3140. $sql_where_and_arr = array();
  3141. $usrAclGroups = User::getLdapGroupsNames();
  3142. $usrAclGroups[] = '';
  3143. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  3144. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  3145. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  3146. $filter_selected = WindykacjaStatsHelper::get_filter_selected();
  3147. if ($filter_selected) {
  3148. if ($filter_selected == 'po-terminie') {
  3149. $sql_where_and_arr[] = "w.`PAY_SALDO`<0";
  3150. $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  3151. $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  3152. }
  3153. else if ($filter_selected == '3 m-ce przed') {
  3154. $sql_where_and_arr[] = "w.`PAY_SALDO`<0";
  3155. $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  3156. $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)";
  3157. $sql_where_and_arr[] = "w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  3158. }
  3159. else if ($filter_selected == 'tel1') {
  3160. $sql_where_and_arr[] = "w.`PAY_SALDO`<0";
  3161. $sql_where_and_arr[] = "w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')";
  3162. $sql_where_and_arr[] = "( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
  3163. or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 3 MONTH) )";
  3164. }
  3165. else if ($filter_selected == 'bad_address') {
  3166. $sql_where_and_arr[] = "w.`BAD_ADDRESS`>0";
  3167. $sql_where_and_arr[] = "w.`PAY_SALDO`<0";
  3168. }
  3169. else if ($filter_selected == 'stan_zero') {
  3170. $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  3171. $sql_where_and_arr[] = "w.`PAY_SALDO`>=0";
  3172. }
  3173. else if ($filter_selected == '10-ego') {
  3174. $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  3175. $sql_where_and_arr[] = "w.`PAY_SALDO`<0";
  3176. }
  3177. else if ($filter_selected == 'has_nr_sad') {
  3178. $sql_where_and_arr[] = "w.`NR_SPRAWY_SAD`!=''";
  3179. }
  3180. else if ($filter_selected == 'has_nr_komornik') {
  3181. $sql_where_and_arr[] = "w.`NR_SPRAWY_KOMORNIK`!=''";
  3182. }
  3183. else if ($filter_selected == 'has_ustalenia') {
  3184. $sql_where_and_arr[] = "w.`L_APPOITMENT_INFO`!=''";
  3185. }
  3186. else if ($filter_selected == 'sad_and_komornik') {
  3187. $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`!=''";
  3188. }
  3189. else if ($filter_selected == 'sad_bez_komornik') {
  3190. $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`=''";
  3191. }
  3192. else {
  3193. $sql_where_and_arr[] = "w.`A_STATUS`='{$filter_selected}'";
  3194. }
  3195. }
  3196. if (!empty($q)) {
  3197. $q = trim($q);
  3198. if (is_numeric($q)) {// billing number
  3199. $sqlIdUsr = DB::_($q);
  3200. $sql_where_and_arr[] = "a.`id_users`='{$sqlIdUsr}'";
  3201. }
  3202. else {// string - name, second name
  3203. $q_arr_values = array();
  3204. $q_exp = explode(' ', $q);
  3205. foreach ($q_exp as $v_q) {
  3206. $v_q = trim($v_q);
  3207. if (strlen($v_q) > 2) {// min. 3 znaki
  3208. $q_arr_values[] = strtolower($v_q);
  3209. }
  3210. }
  3211. foreach ($q_arr_values as $q_value) {
  3212. $sql_filter_q = array();
  3213. $q_arr = array();// uniq array
  3214. $q_arr_pl = array();// loop array
  3215. $pl_letters = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż');
  3216. $en_letters = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z');
  3217. $sqlQValue = DB::_($q_value);
  3218. $sql_filter_q[] = "a.`P_NAME` like '{$sqlQValue}%'";
  3219. $sql_filter_q[] = "a.`P_NAME_SECOND` like '{$sqlQValue}%'";
  3220. $q_value_clean_en = str_replace($pl_letters, $en_letters, $q_value);
  3221. $q_value_clean_pl = str_replace($en_letters, $pl_letters, $q_value_clean_en);
  3222. $q_value_clean_pr = str_replace($en_letters, '_', $q_value_clean_en);
  3223. if ($q_value_clean_en != $q_value) $q_arr[$q_value_clean_en] = true;
  3224. if ($q_value_clean_pl != $q_value) $q_arr[$q_value_clean_pl] = true;
  3225. if ($q_value_clean_pr != $q_value) $q_arr[$q_value_clean_pr] = true;
  3226. foreach ($q_arr as $v_q => $v_val) {
  3227. $sqlQValue = DB::_($v_q);
  3228. $sql_filter_q[] = "a.`P_NAME` like '{$sqlQValue}'";
  3229. $sql_filter_q[] = "a.`P_NAME_SECOND` like '{$sqlQValue}'";
  3230. // $sql_filter_q[] = "a.`P_ADDRESS_STREET` like '{$sqlQValue}'";
  3231. }
  3232. $sql_field_1 = "a.`P_NAME`";
  3233. $sql_field_2 = "a.`P_NAME_SECOND`";
  3234. foreach ($pl_letters as $k_ind => $v_char_pl) {
  3235. $sql_field_1 = "REPLACE({$sql_field_1}, '{$v_char_pl}', '{$en_letters[$k_ind]}')";
  3236. $sql_field_2 = "REPLACE({$sql_field_2}, '{$v_char_pl}', '{$en_letters[$k_ind]}')";
  3237. }
  3238. $q_value_clean_en = DB::_($q_value_clean_en);
  3239. $sql_filter_q[] = $sql_field_1 . " like '%{$q_value_clean_en}%'";
  3240. $sql_filter_q[] = $sql_field_2 . " like '%{$q_value_clean_en}%'";
  3241. $sql_where_and_arr[] = "(" . implode(" or ", $sql_filter_q) . ")";
  3242. }
  3243. }
  3244. }
  3245. if (!empty($sql_where_and_arr)) {
  3246. $sql_where = implode(" and ", $sql_where_and_arr);
  3247. } else {
  3248. $sql_where = "1=1";
  3249. }
  3250. return $sql_where;
  3251. }
  3252. public static function get_order_by_fields() {
  3253. $order_by_fields = array();
  3254. $order_by_fields[] = 'ID';
  3255. $order_by_fields[] = 'is_firma';
  3256. $order_by_fields[] = 'BILLING_OWNER';
  3257. $order_by_fields[] = 'STATUS';
  3258. $order_by_fields[] = 'BLOKADA';
  3259. $order_by_fields[] = 'ID_BILLING_USERS';
  3260. $order_by_fields[] = 'P_NAME';
  3261. $order_by_fields[] = 'PAY_SALDO';
  3262. $order_by_fields[] = 'PAY_FVAT';
  3263. $order_by_fields[] = 'PAY_DATE';
  3264. $order_by_fields[] = 'PAY_TERM';
  3265. return $order_by_fields;
  3266. }
  3267. public static function get_users_total($q = '') {
  3268. $total = 0;
  3269. $sql_where = WindykacjaStatsModel::_parse_query($q);
  3270. $db = DB::getDB();
  3271. $sql = "select count(1) as cnt
  3272. from `USERS2_WINDYKACJA_STATUS` as w
  3273. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3274. where {$sql_where}
  3275. ";
  3276. $res = $db->query($sql);
  3277. if ($r = $db->fetch($res)) {
  3278. $total = $r->cnt;
  3279. }
  3280. return $total;
  3281. }
  3282. public static function get_sql_users_select() {
  3283. $sql_select = "
  3284. a.`id_users` as ID
  3285. , a.`id_users`
  3286. , a.`P_NAME`
  3287. , a.`P_NAME_SECOND`
  3288. , a.`P_ADDRESS_STREET`
  3289. , a.`P_ADDRESS_HOME`
  3290. , a.`P_ADDRESS_HOUSE`
  3291. , a.`P_ADDRESS_CITY`
  3292. , a.`P_ADDRESS_POST_CODE`
  3293. , a.`P_ADDRESS_REGION`
  3294. , a.`P_PESEL`
  3295. , a.`P_PHONE`
  3296. , a.`P_OTHER_DOC`
  3297. , a.`user_mail_contact`
  3298. , a.`is_firma`
  3299. , w.`ID` as WINDYKACJA_ID
  3300. , w.`ID_BILLING_USERS`
  3301. , w.`A_STATUS`
  3302. , w.`A_STATUS_UPDATE_DATE`
  3303. , w.`USER_PAY_TERM_ADD`
  3304. , w.`L_APPOITMENT_DATE`
  3305. , w.`L_APPOITMENT_USER`
  3306. , w.`L_APPOITMENT_INFO`
  3307. , w.`PAY_DATE`
  3308. , w.`PAY_DATE_FIRST_FVAT`
  3309. , w.`PAY_TERM`
  3310. , w.`PAY_SALDO`
  3311. , w.`PAY_FVAT`
  3312. , w.`wezwanie1_DATE`
  3313. , w.`wezwanie2_DATE`
  3314. , w.`ID_KORESP`
  3315. , w.`LAST_PAY_DATE`
  3316. , w.`BAD_ADDRESS`
  3317. -- , (select bu.`BILLING_OWNER` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as BILLING_OWNER
  3318. -- , (select bu.`STATUS` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as STATUS
  3319. , bu.`STATUS`
  3320. , bu.`BILLING_OWNER`
  3321. , w.`NR_SPRAWY_KRD`
  3322. , w.`NR_SPRAWY_SAD`
  3323. , w.`NR_SPRAWY_KOMORNIK`
  3324. ";
  3325. return $sql_select;
  3326. }
  3327. public static function &get_users($q = '', $limit = 10, $limit_start = 0, $order_by = '', $order_dir = '') {
  3328. $ret = array();
  3329. $sql_select = self::get_sql_users_select();
  3330. $sql_where = WindykacjaStatsModel::_parse_query($q);
  3331. $sql_limit = "limit " . (($limit > 0)? $limit : "10");
  3332. if ($limit_start > 0) $sql_limit .= " offset {$limit_start}";
  3333. $sql_order_by = "";
  3334. $order_by_allowed = self::get_order_by_fields();
  3335. if (in_array($order_by, $order_by_allowed)) {
  3336. if (in_array($order_by, array('P_NAME','is_firma'))) {
  3337. $order_by = "a.{$order_by}";
  3338. } else if (in_array($order_by, array('BILLING_OWNER','STATUS'))) {
  3339. $order_by = "bu.{$order_by}";
  3340. } else if ($order_by == 'BLOKADA') {
  3341. $order_by = "bu.`STATUS`";
  3342. } else {
  3343. $order_by = "w.{$order_by}";
  3344. }
  3345. $sql_order_by .= " order by {$order_by}";
  3346. if (in_array($order_dir, array('DESC','ASC'))) {
  3347. $sql_order_by .= " {$order_dir}";
  3348. }
  3349. }
  3350. $db = DB::getDB();
  3351. $sql = "select {$sql_select}
  3352. from `USERS2_WINDYKACJA_STATUS` as w
  3353. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  3354. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3355. where {$sql_where}
  3356. {$sql_order_by}
  3357. {$sql_limit}
  3358. ";
  3359. $res = $db->query($sql);
  3360. while ($r = $db->fetch($res)) {
  3361. $ret[$r->id_users] = $r;
  3362. }
  3363. return $ret;
  3364. }
  3365. public static function get_user_by_id($id) {
  3366. $ret = null;
  3367. if ($id <= 0) return $ret;
  3368. $sql_where_and_arr = array();
  3369. $usrAclGroups = User::getLdapGroupsNames();
  3370. $usrAclGroups[] = '';
  3371. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  3372. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  3373. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  3374. $sqlWhereAdd = " and " . implode(" and ", $sql_where_and_arr);
  3375. $sql_select = self::get_sql_users_select();
  3376. $sql_where = "a.`id_users`='{$id}'";
  3377. $db = DB::getDB();
  3378. $sql = "select {$sql_select}
  3379. from `USERS2_WINDYKACJA_STATUS` as w
  3380. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  3381. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  3382. where {$sql_where}
  3383. {$sqlWhereAdd}
  3384. ";
  3385. $res = $db->query($sql);
  3386. if ($r = $db->fetch($res)) {
  3387. if(0){
  3388. $r->BA_WINIEN = "";
  3389. $r->BA_MA = "";
  3390. $r->BA_TIMESTAMP = "";
  3391. $sql = "select BA.`WINIEN` as BA_WINIEN
  3392. , BA.`MA` as BA_MA
  3393. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  3394. from `BILLING_ACCOUNTS` as BA
  3395. where BA.`ID_BILLING_USERS`='" . $r->ID . "'
  3396. ";
  3397. $db_webone = DB::getDB('931');
  3398. if ($db_webone) {
  3399. $res_fin = $db_webone->query($sql);
  3400. if ($r_fin = $db_webone->fetch($res_fin)) {
  3401. $r->BA_WINIEN = $r_fin->BA_WINIEN;
  3402. $r->BA_MA = $r_fin->BA_MA;
  3403. $r->BA_TIMESTAMP = $r_fin->BA_TIMESTAMP;
  3404. }
  3405. }
  3406. }
  3407. $ret = $r;
  3408. }
  3409. return $ret;
  3410. }
  3411. public static function get_company(&$user) {
  3412. if (!isset($user->_company)) {
  3413. $db = DB::getDB();
  3414. /*
  3415. id 1 / 2
  3416. name1 "BIALL-NET" Sp. z o.o. / "NET-DAY" s.c.
  3417. name2 --- / Adrian i Ewa Wieczorkowscy
  3418. kod 80-174 / 80-809
  3419. miasto Gdańsk, Otomin / Gdańsk
  3420. ulica Słoneczna / Cieszyńskiego
  3421. numer_dom 43 / 38
  3422. numer_pos NULL / NULL
  3423. uwagi --- / ---
  3424. tel 0-58 320-72-92 / 0-58 741 84 54
  3425. fax 0-58 320-72-96 / 0-58 741 84 56
  3426. nip 593-22-68-672 / 583-27-54-031
  3427. regon 192120212 / 192578721
  3428. bank Bank Zachodni WBK SA I O/Gdansk / ---
  3429. nr_rach 46 1090 1098 0000 0001 0253 7156 / 84 1500 1171 1211 7002 9997 0000
  3430. NR_RACH_MASS_PAY 109000049887 / 109000049669
  3431. BILLING_OWNER_EMAIL biall-net@biall.net.pl / netday@netday.pl
  3432. */
  3433. $sql = "select
  3434. bo.`id`
  3435. , bo.`name1`
  3436. , bo.`name2`
  3437. , bo.`kod`
  3438. , bo.`miasto`
  3439. , bo.`ulica`
  3440. , bo.`numer_dom`
  3441. , bo.`tel`
  3442. , bo.`fax`
  3443. , bo.`nip`
  3444. , bo.`regon`
  3445. , bo.`bank`
  3446. , bo.`nr_rach`
  3447. , bo.`NR_RACH_MASS_PAY`
  3448. , bo.`BILLING_OWNER_EMAIL`
  3449. from `BILLING_USERS` as bu
  3450. left join `BILLING_OWNER` as bo on (bo.`ID`=bu.`BILLING_OWNER`)
  3451. where
  3452. bu.`ID`='{$user->ID_BILLING_USERS}'
  3453. ";
  3454. //$db_webone = DB::getDB('931');
  3455. //if ($db_webone) {
  3456. //$res = $db_webone->query($sql);
  3457. //if ($r = $db_webone->fetch($res)) {
  3458. // $user->_company = $r;
  3459. //}
  3460. //}
  3461. $res = $db->query($sql);
  3462. if ($r = $db->fetch($res)) {
  3463. $user->_company = $r;
  3464. }
  3465. }
  3466. return $user->_company;
  3467. }
  3468. public static function get_billing_type($type_id) {
  3469. $ret = null;
  3470. $types = WindykacjaStatsModel::get_billing_types();
  3471. if (array_key_exists($type_id, $types)) {
  3472. $ret = $types[$type_id];
  3473. }
  3474. return $ret;
  3475. }
  3476. public static function get_billing_type_desc($type) {
  3477. $ret = '';
  3478. if ($type == 'FVAT') {
  3479. return "Faktura Vat";
  3480. }
  3481. $types = WindykacjaStatsModel::get_billing_types();
  3482. foreach ($types as $h) {
  3483. if ($h['TYPE'] == $type) {
  3484. return $h['DESC'];
  3485. }
  3486. }
  3487. return $ret;
  3488. }
  3489. public static function get_billing_types($ids = array()) {
  3490. static $_cache;
  3491. if (empty($_cache)) $_cache = array();
  3492. $cache_key = implode(".", $ids);
  3493. if (!array_key_exists($cache_key, $_cache)) {
  3494. $billing_types = array();
  3495. $db_webone = DB::getDB('931');
  3496. if ($db_webone) {
  3497. $sql_where = "1=1";
  3498. if (!empty($ids)) {
  3499. $sql_where = "`ID` in ('".implode("','", $ids)."')";
  3500. }
  3501. $sql = "select *
  3502. from `BILLING_NUMBERS_TYPE`
  3503. where
  3504. {$sql_where}
  3505. ";
  3506. $res = $db_webone->query($sql);
  3507. while ($h = $db_webone->fetch_assoc($res)) {
  3508. $billing_types[$h['ID']] = $h;
  3509. }
  3510. }
  3511. $_cache[$cache_key] = $billing_types;
  3512. }
  3513. return $_cache[$cache_key];
  3514. }
  3515. public static function get_umowy_from_l2(&$user) {
  3516. $ret = array();
  3517. $db_webone = DB::getDB();
  3518. if (!$db_webone) {
  3519. return -1;
  3520. }
  3521. $sql = "select
  3522. d.`ID`, d.`P_DEALPREFIX`, d.`P_DEALNUMBER`, d.`P_DEALNUMBER_OLD`, d.`P_DEALDATE`, d.`P_DEALDATE_TERM`, d.`DEALDESC`, d.`ANEX_NEEDED`, d.`ANEX_CONFIRM_DATE`
  3523. from `DEALS_TABLE` as d
  3524. where d.`ID_BILLING_USERS`='{$user->ID}'
  3525. order by d.`ID` DESC
  3526. ";
  3527. $res = $db_webone->query($sql);
  3528. while ($h = $db_webone->fetch_assoc($res)) {
  3529. $ret[$h['ID']] = $h;
  3530. }
  3531. return $ret;
  3532. }
  3533. public static function get_uslugi_from_l2(&$user) {
  3534. // l2: www/modules/webone/form/edit_user_status.php
  3535. // Aktualne: Usługa[Status] => list_services2($user->ID);
  3536. $uID = $user->ID;
  3537. $ret = array();
  3538. $db_webone = DB::getDB();
  3539. if (!$db_webone) {
  3540. return -1;
  3541. }
  3542. if(0){// SERVICES table struct example:
  3543. //[ID_BILLING_USERS] => 11363
  3544. //[active] => 1
  3545. //[TAB_UPDATE_STAT] => 1
  3546. //[TAB_UPDATE_DATE] => 2012-02-03 17:43:44
  3547. //[TAB_UPDATE_INFO] => OK-PREUPDATE-DELETED---UPDATED-OK-:195.117.2.79
  3548. //[SERVICE_TYPE] => ABONAMENT
  3549. //[ID_BILLING_NUMBERS_TYPE] => 1
  3550. //[ABONAMENT_PERIOD] => 1
  3551. //[ABONAMENT_VALUE] => 26.01
  3552. //[VAT] => 23
  3553. //[ID_CURRENCY] => 0
  3554. //[ABONAMENT_PAYMENT] => UP
  3555. //[ABONAMENT_START] => 1
  3556. //[MINIMUM_BILLING_VALUE] => 0.00
  3557. //[BILLED_TILL] => 2012-06-01 00:00:00
  3558. //[HANGUP_FROM] =>
  3559. //[HANGUP_TILL] =>
  3560. //[HANGUP_STATUS] =>
  3561. //[HANGUP_RATIO] => 1.00
  3562. //[TIMESTAMP] => 20120504125053
  3563. //[P_ID_SERVICES] => 0
  3564. //[uwagi] =>
  3565. //[ID_DEALS_TABLE] => 9373
  3566. //[VAT_NAME] => 23
  3567. //[id_list_sww] => 1
  3568. //[SERV_ID_BILLING_PREFIXES] => 0
  3569. //[ID_OFFERS] => 833
  3570. //[A_RECORD_CREATE_DATE] =>
  3571. //[A_RECORD_CREATE_AUTHOR] =>
  3572. //[A_RECORD_UPDATE_DATE] =>
  3573. //[A_RECORD_UPDATE_AUTHOR] =>
  3574. }
  3575. $sql = "select
  3576. s.`ID`, s.`NAME_LIST_SERVICES`, s.`A_STATUS`
  3577. , s.`ID_OFFERS`
  3578. , s.`ID_DEALS_TABLE`
  3579. , s.`P_ID_SERVICES`
  3580. , s.`P_ID_SERVICES` as P_ID
  3581. , s.`HANGUP_STATUS`
  3582. , s.`HANGUP_FROM`
  3583. , s.`HANGUP_TILL`
  3584. , ls.`description` as description
  3585. , lst.`name` as A_STATUS_DESC
  3586. from `SERVICES` as s
  3587. left join `LIST_SERVICES` as ls on(ls.`name`=s.`NAME_LIST_SERVICES`)
  3588. left join `LIST_status` as lst on(lst.`ses_users2`=s.`HANGUP_STATUS` and lst.`ID`>2)
  3589. where `ID_BILLING_USERS`='{$user->ID}'
  3590. ";
  3591. $res = $db_webone->query($sql);
  3592. while ($h = $db_webone->fetch_assoc($res)) {
  3593. $ret[$h['ID']] = $h;
  3594. }
  3595. return $ret;
  3596. }
  3597. public static function get_umowy_from_l3(&$user) {
  3598. $ret = array();
  3599. $db = DB::getDB();
  3600. $sql = "select d.*
  3601. from `USERS2_DEALS` as d
  3602. where
  3603. (d.`ID_BILLING_USERS_OLD`='{$user->ID}' or d.`ID_BILLING_USERS_NEW`='{$user->ID}')
  3604. order by d.`ID` DESC
  3605. ";
  3606. $res = $db->query($sql);
  3607. while ($h = $db->fetch_assoc($res)) {
  3608. $ret[] = $h;
  3609. }
  3610. return $ret;
  3611. }
  3612. public static function get_bill_dosc_by_date(&$user, $date_limit = null) {
  3613. // fetch finanse data from remote DB
  3614. $billing_docs = new BillingDocs();
  3615. $db_webone = DB::getDB('931');
  3616. if (!$db_webone) {
  3617. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  3618. return;
  3619. }
  3620. $sql_where = " BILLS_FVAT.OPEN='N' and BILLS_FVAT.ID_BILLING_USERS ='{$user->ID}' ";
  3621. // blad w zaokragleniach
  3622. // , sum((BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE)*(1 + BILLS_FVAT_POS.VAT/100)) as WARTOSC
  3623. if ($date_limit) {
  3624. $sql_where .= " and BILLS_FVAT.PAYMENT_TERM <= '{$date_limit}' ";
  3625. }
  3626. $sql = "select
  3627. BILLS_FVAT.*
  3628. , count(BILLS_FVAT_POS.ID) as ILOSC_POZYCJI
  3629. , BILLS_FVAT_POS.ID_BILLS_FVAT
  3630. , round(sum((BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE)*(1 + BILLS_FVAT_POS.VAT/100)), 2) as WARTOSC
  3631. -- , count(BILLS_FVAT_POS.PRICE) as ILOSC_POZYCJI
  3632. from `BILLS_FVAT`
  3633. left join `BILLS_FVAT_POS` on BILLS_FVAT.ID=BILLS_FVAT_POS.ID_BILLS_FVAT
  3634. where {$sql_where}
  3635. group by BILLS_FVAT.ID
  3636. order by BILLS_FVAT.ID_BILLING_NUMBERS ASC
  3637. ";
  3638. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  3639. $res = $db_webone->query($sql);
  3640. while ($h = $db_webone->fetch_assoc($res)) {
  3641. if (0){// ? dla kazdej faktury ?
  3642. $sql = "select t1.ID_BILLING_NUMBERS AS NR_DOK
  3643. , t1.ID_BILLING_USERS as PLATNIK
  3644. , t1.WINIEN,t1.MA
  3645. , t1.ID_FIN_WINIEN as ID_F_W
  3646. , t1.ID_FIN_WINIEN_VAL as F_WINIEN_V
  3647. , t1.ID_FIN_MA as ID_F_M
  3648. , t1.ID_FIN_MA_VAL as F_MA_V
  3649. , max(t2.ID)
  3650. , sum(t2.ID_FIN_WINIEN_VAL) as ROZ_WINIEN
  3651. , max(t3.ID)
  3652. , sum(t3.ID_FIN_MA_VAL) as ROZ_MA
  3653. , t1.WINIEN - sum(t2.ID_FIN_WINIEN_VAL) - sum(t3.ID_FIN_MA_VAL) as POZ_WINIEN
  3654. , t1.MA - sum(t3.ID_FIN_MA_VAL) - sum(t2.ID_FIN_WINIEN_VAL) as POZ_MA
  3655. from `BILLING_ACCOUNTS_FILES` as t1
  3656. left join `BILLING_ACCOUNTS_FILES` as t2 on (t1.ID_BILLING_NUMBERS=t2.ID_FIN_WINIEN)
  3657. left join `BILLING_ACCOUNTS_FILES` as t3 on (t1.ID_BILLING_NUMBERS=t3.ID_FIN_MA)
  3658. where
  3659. t1.ID_FIN_WINIEN is NULL and t1.ID_FIN_MA is NULL and t1.MA = 0 and t1.WINIEN > 0
  3660. and t1.ID_BILLING_NUMBERS={$user->ID}
  3661. group by t1.ID_BILLING_NUMBERS
  3662. limit 0,1
  3663. ";
  3664. }
  3665. //$h['type'] = 'FVAT';
  3666. //$h['nr'] = $h['ID_BILLING_NUMBERS'];
  3667. //$h['WINIEN'] = $h['WARTOSC'];
  3668. //$h['MA'] = 0;
  3669. $billing_docs->add_bill_doc($h['PAYMENT_TERM'], 'FVAT', $h);
  3670. }
  3671. $faktury_cols = array();
  3672. //$faktury_cols['ID_BILLING_USERS'] = "id klienta";//
  3673. $faktury_cols['ID_BILLING_NUMBERS'] = "numer";// numer faktury
  3674. $faktury_cols['BILL_DATE'] = "";// data('Y-m-d')
  3675. $faktury_cols['SELL_DATE'] = "";// data('Y-m-d')
  3676. $faktury_cols['PAYMENT_TERM'] = "";// data('Y-m-d')
  3677. //$billing_types = WindykacjaStatsModel::get_billing_types(array(3, 4, 5, 7, 8));
  3678. $billing_types = WindykacjaStatsModel::get_billing_types();
  3679. foreach ($billing_types as $bill_type) {
  3680. if ($bill_type['CLASS'] == 'FINANCE') {
  3681. $sql_where = ($date_limit)? " and {$bill_type['TABLE']}.BILL_DATE <= '{$date_limit}' " : "";
  3682. $sql = "select {$bill_type['TABLE']}.ID
  3683. , {$bill_type['TABLE']}.ID_BILLING_NUMBERS
  3684. , {$bill_type['TABLE']}.BILL_DATE
  3685. , round({$bill_type['TABLE']}.WINIEN, 2) as WINIEN
  3686. , round({$bill_type['TABLE']}.MA, 2) as MA
  3687. , {$bill_type['TABLE']}.ID_FK_DEKRET
  3688. , {$bill_type['TABLE']}.OPEN
  3689. , {$bill_type['TABLE']}.FK_ZAKSIEG
  3690. , {$bill_type['TABLE']}.do_dokumentu
  3691. , {$bill_type['BILLING_NUMBERS_TABLE']}.NUMBER
  3692. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_PREFIXES
  3693. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_NUMBERS_TYPE
  3694. from {$bill_type['TABLE']}
  3695. left join {$bill_type['BILLING_NUMBERS_TABLE']} on ({$bill_type['BILLING_NUMBERS_TABLE']}.ID={$bill_type['TABLE']}.ID_BILLING_NUMBERS)
  3696. where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
  3697. {$sql_where}
  3698. ";
  3699. $res = $db_webone->query($sql);
  3700. while ($h = $db_webone->fetch_assoc($res)) {
  3701. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  3702. }
  3703. }
  3704. else if ($bill_type['CLASS'] == 'SELL_MA') {
  3705. $sql_where = ($date_limit)? " and {$bill_type['TABLE']}.BILL_DATE <= '{$date_limit}' " : "";
  3706. $sql = "select {$bill_type['TABLE']}.ID
  3707. , count({$bill_type['TABLE']}_POS.ID) as cnt
  3708. , {$bill_type['TABLE']}_POS.ID_BILLS_FVAT
  3709. , {$bill_type['TABLE']}.ID_CURRENCY
  3710. , round(sum(({$bill_type['TABLE']}_POS.N_AMMOUNT * {$bill_type['TABLE']}_POS.N_PRICE) * ( 1 + {$bill_type['TABLE']}_POS.N_VAT / 100)),2) as WINIEN
  3711. , round(sum(
  3712. (({$bill_type['TABLE']}_POS.AMMOUNT * {$bill_type['TABLE']}_POS.PRICE) * ( 1 + {$bill_type['TABLE']}_POS.VAT / 100))
  3713. - ({$bill_type['TABLE']}_POS.N_AMMOUNT * {$bill_type['TABLE']}_POS.N_PRICE * {$bill_type['TABLE']}_POS.N_VAT / 100)
  3714. + ({$bill_type['TABLE']}_POS.N_AMMOUNT * {$bill_type['TABLE']}_POS.N_PRICE * {$bill_type['TABLE']}_POS.VAT / 100)
  3715. ),2) as MA
  3716. , {$bill_type['TABLE']}.ID_BILLING_NUMBERS , {$bill_type['TABLE']}.OPEN , {$bill_type['TABLE']}.FK_ZAKSIEG
  3717. , {$bill_type['TABLE']}.IF_KORV , {$bill_type['TABLE']}.BILL_DATE , {$bill_type['BILLING_NUMBERS_TABLE']}.NUMBER
  3718. from {$bill_type['TABLE']}
  3719. left join {$bill_type['BILLING_NUMBERS_TABLE']} on {$bill_type['BILLING_NUMBERS_TABLE']}.ID={$bill_type['TABLE']}.ID_BILLING_NUMBERS
  3720. left join {$bill_type['TABLE']}_POS on {$bill_type['TABLE']}.ID={$bill_type['TABLE']}_POS.ID_BILLS_FVAT
  3721. where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
  3722. {$sql_where}
  3723. group by {$bill_type['TABLE']}.ID
  3724. order by {$bill_type['TABLE']}.ID
  3725. ";
  3726. $res = $db_webone->query($sql);
  3727. while ($h = $db_webone->fetch_assoc($res)) {
  3728. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  3729. }
  3730. }
  3731. }
  3732. return $billing_docs;
  3733. }
  3734. /**
  3735. * @used in FunkcjeL1::billing_billwiev_przeterminowania
  3736. */
  3737. public static function get_billing_account_files($user_id) {
  3738. $baf = array();
  3739. $ECHO_PARAM = '';
  3740. $ID_BILLING_USERS_PARAM = $user_id;
  3741. $db_webone = DB::getDB('931');
  3742. if (!$db_webone) {
  3743. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  3744. return $baf;
  3745. }
  3746. $WHERE = "";
  3747. if ($ID_BILLING_USERS_PARAM) $WHERE .= " and BAF.ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' ";
  3748. //UZGODNIENIE_SALD
  3749. if (strstr($ECHO_PARAM, 'saldo_rok')) {
  3750. global $base_path ;
  3751. include_once($base_path."/modules/billing/bill/modules/billing_financefunc.inc");
  3752. if ($ID_BILLING_USERS_PARAM) {
  3753. if ($vdb->sql_numrows($vdb->sql_query("select ID from BILLING_ACCOUNTS_TILL where ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' and TILL=YEAR(NOW())-1 ;")) != 1) {
  3754. UAKTUALNIJ_KONTA($ID_BILLING_USERS_PARAM);
  3755. }
  3756. }
  3757. $WHERE .= " AND YEAR(BN.TIMESTAMP)<YEAR(NOW()) ";
  3758. }
  3759. $WHERE_FIRMA = "";
  3760. if ($_GET['FIRMA']) $WHERE_FIRMA = "and BILLING_USERS.BILLING_OWNER='{$_GET['FIRMA']}'" ;
  3761. //$billing_account_files = WindykacjaStatsModel::
  3762. $sql = "create temporary table TEMP_BILLING_ACCOUNTS_FILES
  3763. select BAF.ID
  3764. , BAF.ID_BILLING_USERS
  3765. , BAF.WINIEN
  3766. , BAF.MA
  3767. , BAF.ID_BILLING_NUMBERS_TYPE
  3768. , BN.NUMBER
  3769. , BN.ID_BILLING_PREFIXES
  3770. , BAF_WINIEN.ID_FIN_WINIEN
  3771. , BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W
  3772. , BAF_BN_WINIEN.NUMBER as NUMBER_W
  3773. , BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W
  3774. , unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W
  3775. , BAF_WINIEN.ID_FIN_WINIEN_VAL
  3776. , NULL as ID_FIN_MA
  3777. , NULL as ID_BILLING_NUMBERS_TYPE_M
  3778. , NULL as NUMBER_M
  3779. , NULL as ID_BILLING_PREFIXES_M
  3780. , NULL as TIMESTAMP_M
  3781. , NULL as ID_FIN_MA_VAL
  3782. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM)) as TERMIN_PL
  3783. , BUA.P_NAME
  3784. , BUA.P_NAME_SECOND
  3785. , BUA.P_ADDRESS_CITY
  3786. , BUA.P_ADDRESS_STREET
  3787. , BUA.P_ADDRESS_HOUSE
  3788. , BUA.P_ADDRESS_HOME
  3789. , BUA.user_mail_contact
  3790. , BA.WINIEN as BA_WINIEN
  3791. , BA.MA as BA_MA
  3792. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  3793. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  3794. from BILLING_ACCOUNTS_FILES as BAF
  3795. left join BILLING_USERS on BILLING_USERS.ID=BAF.ID_BILLING_USERS
  3796. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  3797. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  3798. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  3799. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  3800. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  3801. left join BILLING_ACCOUNTS_FILES as BAF_WINIEN on BAF_WINIEN.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS
  3802. left join BILLING_NUMBERS as BAF_BN_WINIEN on BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS
  3803. where BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL and BAF.ID_FIN_WINIEN is NULL
  3804. {$WHERE}
  3805. {$WHERE_FIRMA}
  3806. ";
  3807. $sql2 = "insert into TEMP_BILLING_ACCOUNTS_FILES
  3808. select BAF.ID
  3809. , BAF.ID_BILLING_USERS
  3810. , BAF.WINIEN
  3811. , BAF.MA
  3812. , BAF.ID_BILLING_NUMBERS_TYPE
  3813. , BN.NUMBER
  3814. , BN.ID_BILLING_PREFIXES
  3815. , NULL as ID_FIN_WINIEN
  3816. , NULL as ID_BILLING_NUMBERS_TYPE_W
  3817. , NULL as NUMBER_W
  3818. , NULL as ID_BILLING_PREFIXES_W
  3819. , NULL as TIMESTAMP_W
  3820. , NULL as ID_FIN_WINIEN_VAL
  3821. , BAF_MA.ID_FIN_MA
  3822. , BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M
  3823. , BAF_BN_MA.NUMBER as NUMBER_M
  3824. , BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M
  3825. , unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M
  3826. , BAF_MA.ID_FIN_MA_VAL
  3827. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM))
  3828. , BUA.P_NAME
  3829. , BUA.P_NAME_SECOND
  3830. , BUA.P_ADDRESS_CITY
  3831. , BUA.P_ADDRESS_STREET
  3832. , BUA.P_ADDRESS_HOUSE
  3833. , BUA.P_ADDRESS_HOME
  3834. , BUA.user_mail_contact
  3835. , BA.WINIEN as BA_WINIEN
  3836. , BA.MA as BA_MA
  3837. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  3838. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  3839. from BILLING_ACCOUNTS_FILES as BAF
  3840. left join BILLING_USERS on (BILLING_USERS.ID=BAF.ID_BILLING_USERS)
  3841. left join BILLING_USERS_ADD as BUA on (BUA.id_users=BAF.ID_BILLING_USERS)
  3842. left join BILLING_NUMBERS as BN on (BN.ID=BAF.ID_BILLING_NUMBERS)
  3843. left join BILLING_ACCOUNTS as BA on (BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS)
  3844. left join BILLS_FVAT on (BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  3845. left join BILLS_KORV on (BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  3846. left join BILLING_ACCOUNTS_FILES as BAF_MA on (BAF_MA.ID_FIN_MA=BAF.ID_BILLING_NUMBERS)
  3847. left join BILLING_NUMBERS as BAF_BN_MA on (BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS)
  3848. where
  3849. BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL
  3850. {$WHERE}
  3851. {$WHERE_FIRMA}
  3852. ";
  3853. if (strstr($ECHO_PARAM,'saldo_rok')) {
  3854. $sql = "create temporary table TEMP_BILLING_ACCOUNTS_FILES
  3855. select
  3856. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  3857. BAF_WINIEN.ID_FIN_WINIEN,
  3858. BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W,
  3859. BAF_BN_WINIEN.NUMBER as NUMBER_W,
  3860. BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W,
  3861. unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W,
  3862. BAF_WINIEN.ID_FIN_WINIEN_VAL,
  3863. NULL as ID_FIN_MA,
  3864. NULL as ID_BILLING_NUMBERS_TYPE_M,
  3865. NULL as NUMBER_M,
  3866. NULL as ID_BILLING_PREFIXES_M,
  3867. NULL as TIMESTAMP_M,
  3868. NULL as ID_FIN_MA_VAL,
  3869. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  3870. BUA.P_NAME , BUA.P_NAME_SECOND , BUA.P_ADDRESS_CITY , BUA.P_ADDRESS_STREET ,BUA.P_ADDRESS_HOUSE , BUA.P_ADDRESS_HOME , BUA.user_mail_contact ,
  3871. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  3872. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  3873. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  3874. from BILLING_ACCOUNTS_FILES as BAF
  3875. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  3876. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  3877. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  3878. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  3879. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  3880. left join BILLING_ACCOUNTS_FILES as BAF_TRG on ( BAF.ID_FIN_WINIEN=BAF_TRG.ID_BILLING_NUMBERS or BAF.ID_FIN_MA=BAF_TRG.ID_BILLING_NUMBERS )
  3881. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  3882. left join BILLING_ACCOUNTS_FILES as BAF_WINIEN on ( BAF_WINIEN.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS or BAF_WINIEN.ID_FIN_MA=BAF.ID_BILLING_NUMBERS )
  3883. left join BILLING_NUMBERS as BAF_BN_WINIEN on ( BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS )
  3884. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  3885. where
  3886. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  3887. and (YEAR(BAF_BN_WINIEN.TIMESTAMP)<YEAR(NOW()) or BAF_BN_WINIEN.TIMESTAMP is NULL )
  3888. {$WHERE}
  3889. limit 2000 ;
  3890. ";
  3891. $sql2 = " insert into TEMP_BILLING_ACCOUNTS_FILES select
  3892. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  3893. NULL as ID_FIN_WINIEN,
  3894. NULL as ID_BILLING_NUMBERS_TYPE_W,
  3895. NULL as NUMBER_W ,
  3896. NULL as ID_BILLING_PREFIXES_W,
  3897. NULL as TIMESTAMP_W ,
  3898. NULL as ID_FIN_WINIEN_VAL ,
  3899. BAF_MA.ID_FIN_MA,
  3900. BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M,
  3901. BAF_BN_MA.NUMBER as NUMBER_M,
  3902. BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M,
  3903. unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M,
  3904. BAF_MA.ID_FIN_MA_VAL,
  3905. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  3906. BUA.P_NAME , BUA.P_NAME_SECOND , BUA.P_ADDRESS_CITY , BUA.P_ADDRESS_STREET ,BUA.P_ADDRESS_HOUSE , BUA.P_ADDRESS_HOME , BUA.user_mail_contact ,
  3907. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  3908. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  3909. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  3910. from BILLING_ACCOUNTS_FILES as BAF
  3911. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  3912. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  3913. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  3914. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  3915. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  3916. left join BILLING_ACCOUNTS_FILES as BAF_TRG on ( BAF.ID_FIN_WINIEN=BAF_TRG.ID_BILLING_NUMBERS or BAF.ID_FIN_MA=BAF_TRG.ID_BILLING_NUMBERS )
  3917. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  3918. left join BILLING_ACCOUNTS_FILES as BAF_MA on ( BAF_MA.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS or BAF_MA.ID_FIN_MA=BAF.ID_BILLING_NUMBERS )
  3919. left join BILLING_NUMBERS as BAF_BN_MA on ( BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS )
  3920. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  3921. where
  3922. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  3923. and BAF.ID_BILLING_USERS='1047' AND YEAR(BN.TIMESTAMP)<YEAR(NOW())
  3924. and (YEAR(BAF_BN_MA.TIMESTAMP)<YEAR(NOW()) or BAF_BN_MA.TIMESTAMP is NULL )
  3925. {$WHERE}
  3926. limit 1000,1000 ;
  3927. ";
  3928. }//EOF if saldo_rok param
  3929. $sql_alter = "alter table TEMP_BILLING_ACCOUNTS_FILES
  3930. modify ID_FIN_MA int(11)
  3931. , modify ID_BILLING_NUMBERS_TYPE_M int(2)
  3932. , modify NUMBER_M int(10)
  3933. , modify ID_BILLING_PREFIXES_M int(2) default NULL NULL
  3934. , modify TIMESTAMP_M int(10)
  3935. , modify ID_FIN_MA_VAL decimal(10,2)
  3936. , modify ID_BILLING_PREFIXES int(2) default NULL NULL
  3937. , modify ID_BILLING_PREFIXES_W int(2) default NULL NULL
  3938. ";
  3939. $db_webone->query("drop TEMPORARY table TEMP_BILLING_ACCOUNTS_FILES");
  3940. $result_create = $db_webone->query($sql);
  3941. $result_alter = $db_webone->query($sql_alter);
  3942. $result_create2 = $db_webone->query($sql2);
  3943. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">db_webone: ';print_r($db_webone);echo'</pre>';
  3944. $sql = "select * from TEMP_BILLING_ACCOUNTS_FILES order by ID_BILLING_USERS,ID ";
  3945. $sql_count = "select count(1) as cnt from TEMP_BILLING_ACCOUNTS_FILES ";
  3946. $count = 0;
  3947. $res = $db_webone->query($sql_count);
  3948. if ($r_count = $db_webone->fetch($res)) {
  3949. $count = $r_count->cnt;
  3950. }
  3951. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">count: ';print_r($count);echo'</pre>';
  3952. if ($count > 0 && $ID_BILLING_USERS_PARAM > 0) {
  3953. $result = $db_webone->query($sql);
  3954. } else {
  3955. $sql_none = "insert into TEMP_BILLING_ACCOUNTS_FILES (ID,ID_BILLING_USERS,BAT_TILL,BAT_WINIEN,BAT_MA)
  3956. select '0',ID_BILLING_USERS,TILL ,WINIEN ,MA from BILLING_ACCOUNTS_TILL where ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' and TILL=YEAR(NOW())-1
  3957. ";
  3958. $db_webone->query($sql_none);
  3959. $result = $db_webone->query($sql);
  3960. }
  3961. while ($h_baf = $db_webone->fetch_row($result)) {
  3962. $baf[] = $h_baf;
  3963. }
  3964. return $baf;
  3965. }
  3966. public static function update_doc_number(&$fvat_arr) {
  3967. $fetch_ids = array();
  3968. foreach ($fvat_arr as $k => $fvat) {
  3969. $fetch_ids[] = $fvat['ID_BILLING_NUMBERS'];
  3970. }
  3971. if (!empty($fetch_ids)) {
  3972. $db_webone = DB::getDB('931');
  3973. if (!$db_webone) {
  3974. return -1;
  3975. }
  3976. $sql = "select `ID`, `NUMBER`, `ID_BILLING_PREFIXES`
  3977. from `BILLING_NUMBERS`
  3978. where
  3979. `ID` in(".implode(",", $fetch_ids).")
  3980. ";
  3981. $res = $db_webone->query($sql);
  3982. $bnum = array();
  3983. while ($h = $db_webone->fetch_assoc($res)) {
  3984. $bnum[$h['ID']] = $h;
  3985. }
  3986. foreach ($bnum as $k_id => $bn) {
  3987. foreach ($fvat_arr as $k_fvat => $fvat) {
  3988. if ($bn['ID'] == $fvat['ID_BILLING_NUMBERS']) {
  3989. $fvat_arr[$k_fvat]['NUMBER'] = $bn['NUMBER'];
  3990. $fvat_arr[$k_fvat]['ID_BILLING_PREFIXES'] = $bn['ID_BILLING_PREFIXES'];
  3991. }
  3992. }
  3993. }
  3994. }
  3995. }
  3996. /**
  3997. * @param $user - Windykacja status user
  3998. * @param $taks - wezwanie1, wezwanie2
  3999. * @param $id_proj - ID Projektu
  4000. * @returns int - ID created record
  4001. */
  4002. public static function create_koresp($user, $task, $id_proj, $params = array()) {
  4003. $sql_data = array();
  4004. $sql_zawartosc = '';
  4005. if ($task == 'wezwanie1') {
  4006. $sql_zawartosc = 'wezwanie do zaplaty';
  4007. $sql_data['K_TYP_KORESP'] = 'OUT';
  4008. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  4009. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  4010. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  4011. } else if ($task == 'wezwanie2') {
  4012. $sql_zawartosc = 'wezwanie do zaplaty - ostateczne';
  4013. $sql_data['K_TYP_KORESP'] = 'OUT';
  4014. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  4015. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  4016. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  4017. } else if ($task == 'rozwiazanie umowy') {
  4018. $sql_zawartosc = 'rozwiazanie umowy ID ' . $params['nr_umowy'] . ' - ' . $params['powod_desc'];
  4019. $sql_data['K_TYP_KORESP'] = 'IN';
  4020. }
  4021. if (!$sql_zawartosc) {
  4022. return false;
  4023. }
  4024. /**
  4025. * przykładowe wezwania:
  4026. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `K_ZAWARTOS` LIKE '%wezwanie%' ORDER BY `IN7_DZIENNIK_KORESP`.`ID` DESC;
  4027. * przykład:
  4028. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `ID`=25951;
  4029. */
  4030. $db = DB::getDB();
  4031. $sql_obj = new stdClass();
  4032. $sql_obj->A_STATUS = 'WAITING';
  4033. foreach ($sql_data as $k_field => $v_value) {
  4034. $sql_obj->$k_field = $v_value;
  4035. }
  4036. $sql_obj->ID_BILLING_USERS = $user->ID;
  4037. $sql_obj->K_DATA_OTRZYM_KORESP = '';// data ?
  4038. $sql_obj->K_DATA_OTRZYMANEJ_KORESP = '';// data ?
  4039. $sql_obj->K_OD_KOGO = "{$user->P_NAME} {$user->P_NAME_SECOND}";
  4040. $sql_obj->OD_KOGO_ADRES = "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}";
  4041. $sql_obj->K_ZAWARTOS = $sql_zawartosc;
  4042. $sql_obj->K_ZNAK_REFERENTA = User::getFullName() . ' (' . User::getInicjaly() . ')';
  4043. $sql_obj->ID_PROJECT = $id_proj;
  4044. $ret_id = $db->ADD_NEW_OBJ('IN7_DZIENNIK_KORESP', $sql_obj);
  4045. return $ret_id;
  4046. }
  4047. /**
  4048. * @param int $user_id - IS klienta
  4049. * @param int $id_deals_old - ID umowy do wyłączenia
  4050. * @param date 'Y-m-d' $termin_odlaczenia - Termin odłączenia
  4051. * @returns int - ID created record
  4052. */
  4053. public static function create_deals_rozwiazanie($user_id, $id_deals_old, $termin_odlaczenia, $powod_desc = '') {
  4054. $db = DB::getDB();
  4055. $old_deal = $db->get_by_id('DEALS_TABLE', $id_deals_old);
  4056. if (!$old_deal) {
  4057. return false;
  4058. }
  4059. $sql_obj = new stdClass();
  4060. $sql_obj->DEALDESC = "Rezygnacja z dniem {$termin_odlaczenia}";
  4061. $sql_obj->A_STATUS = 'WAITING';
  4062. $sql_obj->ID_BILLING_USERS = $user_id;
  4063. $sql_obj->P_DEALNUMBER_OLD = $old_deal->ID;
  4064. $sql_obj->S_ADDRESS_STREET = $old_deal->S_ADDRESS_STREET;
  4065. $sql_obj->P_DEALDATE = $old_deal->P_DEALDATE;
  4066. $sql_obj->P_DEALDATE_TERM = $old_deal->P_DEALDATE_TERM;
  4067. $sql_obj->L2_HANGUP_FROM = $termin_odlaczenia;
  4068. $sql_obj->RODZAJ_DZIALANIA_HANDLOWEGO = $powod_desc;
  4069. // TODO: $sql_obj->ID_OFFERS_OFF = get_active_services_id($old_deal->ID);
  4070. /*
  4071. if(
  4072. SV.HANGUP_STATUS=SV.A_STATUS
  4073. , coalesce(SV.A_STATUS)
  4074. , if(
  4075. ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  4076. and ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  4077. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  4078. )
  4079. , coalesce(SV.HANGUP_STATUS)
  4080. , if(
  4081. ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM)
  4082. and (SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  4083. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  4084. )
  4085. , coalesce(SV.A_STATUS)
  4086. , if(
  4087. ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  4088. and unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_TILL)
  4089. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  4090. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  4091. )
  4092. , coalesce(SV.HANGUP_STATUS)
  4093. , if(
  4094. ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW())< unix_timestamp(SV.HANGUP_TILL)
  4095. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  4096. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null ))
  4097. , coalesce(SV.A_STATUS)
  4098. , if(
  4099. ( ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  4100. and ( SV.HANGUP_FROM='0000-00-00' or SV.HANGUP_FROM is null ))
  4101. , coalesce(SV.A_STATUS)
  4102. , if( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  4103. and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL)
  4104. and (
  4105. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  4106. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  4107. )
  4108. , coalesce(SV.A_STATUS)
  4109. , if(
  4110. unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  4111. and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL)
  4112. and SV.HANGUP_FROM<SV.HANGUP_TILL
  4113. and (
  4114. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  4115. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , 'ERROR1',
  4116. 'ERROR2'
  4117. )
  4118. )
  4119. )
  4120. )
  4121. )
  4122. )
  4123. )
  4124. )
  4125. */
  4126. /*
  4127. $id_offers_off = array();
  4128. $sql = "select
  4129. s.``
  4130. , s.`ID_OFFERS`
  4131. from `SERVICES` as s
  4132. where
  4133. s.`ID_DEALS_TABLE`='{$old_deal->ID}'
  4134. and s.`ID_BILLING_USERS`='{$user_id}'
  4135. ";
  4136. $res = $db->query($sql);
  4137. while ($r = $db->fetch($res)) {
  4138. $id_offers_off[] = $r;
  4139. }
  4140. */
  4141. $ret_id = $db->ADD_NEW_OBJ('DEALS_TABLE', $sql_obj);
  4142. return $ret_id;
  4143. }
  4144. }
  4145. class Lay_Html_Toggle {
  4146. public static function start($title, $attrs = array()) {
  4147. $cls = array();
  4148. $cls[] = 'may-hide';
  4149. if (array_key_exists('open', $attrs) && $attrs['open'] == false) $cls[] = 'hide';
  4150. echo'<div class="'.implode(' ', $cls).'">';
  4151. $st = array();
  4152. $st[] = 'margin-bottom:0';
  4153. if (!empty($attrs['color'])) $st[] = 'color:'.$attrs['color'];
  4154. echo'<h4 style="'.implode(';', $st).'">'.$title;
  4155. echo'<a class="btn-hide" href="#" onclick="'."return hide(this);".'">'."-".'</a>';
  4156. echo'<a class="btn-show" href="#" onclick="'."return hide(this);".'">'."+".'</a>';
  4157. echo'</h4>';
  4158. echo'<div class="to-hide">';
  4159. }
  4160. public static function end() {
  4161. echo'</div>';// .to-hide
  4162. echo'</div>';// .may-hide'
  4163. }
  4164. public static function show_js() {
  4165. echo'<script type="text/javascript">'."
  4166. function hide(n){
  4167. jQuery(n).parent().parent().toggleClass('hide');
  4168. return false;
  4169. }
  4170. ".'</script>';
  4171. }
  4172. }
  4173. class FunkcjeL1 {
  4174. public static function bankowy_make_nrach($NR_RACH_MASS_PAY,$ID_BILLING_USERS,$ID_BILLING_NUMBERS) {
  4175. //echo "TTUTAJ <hr> AASDADS f. bankowy_make_nrach($NR_RACH_MASS_PAY,$ID_BILLING_USERS,$ID_BILLING_NUMBERS) <br>";
  4176. $ID_BILLING_USERS=str_pad($ID_BILLING_USERS,10,0,STR_PAD_LEFT) ;
  4177. $ID_BILLING_NUMBERS=str_pad($ID_BILLING_NUMBERS,2,0,STR_PAD_LEFT) ;
  4178. $ID_BILLING_NUMBERS=substr($ID_BILLING_NUMBERS,-2) ;
  4179. $NN = self::bankowy_make($NR_RACH_MASS_PAY.$ID_BILLING_NUMBERS.$ID_BILLING_USERS) ;
  4180. if($NN) return $NN.$NR_RACH_MASS_PAY.$ID_BILLING_NUMBERS.$ID_BILLING_USERS ;
  4181. }
  4182. public static function bankowy_make($nrb) {
  4183. $nrb=preg_replace("/[^0-9]/","",$nrb);
  4184. if (strlen($nrb)<>24) return 0;
  4185. $nrb .="252100";
  4186. $modulo=self::my_bcmod($nrb,97) ;
  4187. $modulo= 98 - $modulo ;
  4188. if(strlen($modulo)==1) $modulo="0".$modulo ;
  4189. return $modulo ;
  4190. if ($nrb[0]==$liczba[0] and $nrb[1]==$liczba[1]){
  4191. return 1;
  4192. }
  4193. return 0;
  4194. }
  4195. public static function my_bcmod($x, $y) {
  4196. // how many numbers to take at once? carefull not to exceed (int)
  4197. $take = 5;
  4198. $mod = '';
  4199. do {
  4200. $a = (int)$mod . substr($x, 0, $take);
  4201. $x = substr($x, $take);
  4202. $mod = $a % $y;
  4203. } while (strlen($x));
  4204. return (int)$mod;
  4205. }
  4206. public static function bankowy_formatuj_nrach($NR_RACH_MASS_PAY) {
  4207. $NR_RACH_MASS_PAY_FORMATTED = '';
  4208. if ($NR_RACH_MASS_PAY) {
  4209. for ($i=4; $i<(strlen($NR_RACH_MASS_PAY)); $i=$i+4) {
  4210. $NR_RACH_MASS_PAY_FORMATTED = " ".substr($NR_RACH_MASS_PAY,-$i,4).$NR_RACH_MASS_PAY_FORMATTED;
  4211. }
  4212. $NR_RACH_MASS_PAY_FORMATTED = substr($NR_RACH_MASS_PAY,0,$i-strlen($NR_RACH_MASS_PAY))." ".$NR_RACH_MASS_PAY_FORMATTED;
  4213. }
  4214. return $NR_RACH_MASS_PAY_FORMATTED ;
  4215. }
  4216. public static function policz($l,$t1,$t2,$t3) {
  4217. $j = array("", "jeden ", "dwa ", "trzy ", "cztery ", "pięć ", "sześć ",
  4218. "siedem ", "osiem ", "dziewięć ", "dziesięć ", "jedenaście ",
  4219. "dwanaście ", "trzynaście ", "czternaście ", "piętnaście ",
  4220. "szesnaście ", "siedemnaście ", "osiemnaście ", "dziewiętnaście ");
  4221. $d = array("", "", "dwadzieścia ", "trzydzieści ", "czterdzieści ",
  4222. "pięćdziesiąt ", "sześćdziesiąt ", "siedemdziesiąt ",
  4223. "osiemdziesiąt ", "dziewięćdziesiąt ");
  4224. $s = array("","sto ", "dwieście ", "trzysta ", "czterysta ", "pięćset ",
  4225. "sześćset ", "siedemset ", "osiemset ", "dziewięćset ");
  4226. $txt = $s[0+substr($l,0,1)];
  4227. if (substr($l,1,2)<20) {
  4228. $txt .= $j[0+substr($l,1,2)];
  4229. }
  4230. else {
  4231. $txt .= $d[0+substr($l, 1,1)].$j[0+substr($l, 2,1)];
  4232. }
  4233. if ($l<>0) {
  4234. if ($l==1) {
  4235. $txt .= "$t1 ";
  4236. } else {
  4237. if ((substr($l,2,1)==2 or substr($l,2,1)==3 or substr($l,2,1)==4) and (substr($l,1,2)>20 or substr($l,1,2)<10)) {
  4238. $txt .= "$t2 ";
  4239. } else {
  4240. $txt .= "$t3 ";
  4241. }
  4242. }
  4243. }
  4244. return $txt;
  4245. }
  4246. public static function slownie($liczba) {
  4247. $txt = '';
  4248. $kwota = explode(".", $liczba);
  4249. if (strlen($kwota[1])==1) $kwota[1] = $kwota[1]."0";
  4250. $kwotazl = sprintf("%012d",$kwota[0]);
  4251. $kwotagr = sprintf("%03d",$kwota[1]);
  4252. $txt .= self::policz(substr($kwotazl, 0,3),"miliard","miliardy","miliardów");
  4253. $txt .= self::policz(substr($kwotazl, 3,3),"milion","miliony","milionów");
  4254. $txt .= self::policz(substr($kwotazl, 6,3),"tysiąc","tysiące","tysięcy");
  4255. $txt .= self::policz(substr($kwotazl, 9,3),"złoty","złote","złotych");
  4256. if ($kwotazl==0) $txt .= "zero złotych ";
  4257. $txt .= " i ";
  4258. $txt .= self::policz($kwotagr,"grosz","grosze","groszy");
  4259. if ($kwotagr==0) $txt .= "zero groszy";
  4260. return $txt;
  4261. }
  4262. public static function formatuj_grosze($kwota) {
  4263. $kwota = round($kwota, 2);
  4264. $liczba = explode(".", $kwota);
  4265. if (!$liczba[1]) {
  4266. $liczba = explode(",", $kwota);
  4267. if (!$liczba[1]) $liczba[1] = "00";
  4268. }
  4269. if (strlen($liczba[1]) == 1) $liczba[1] = $liczba[1] . "0";
  4270. $liczba_out = $liczba[0] . "." . "$liczba[1]";
  4271. return $liczba_out;
  4272. }
  4273. public static function billing_billwiev_przeterminowania($ID_BILLING_USERS_PARAM, $IF_PRINT_PARAM, $ECHO_PARAM) {
  4274. global $vdb
  4275. , $STOPA_ODSETEK // from billing-l1/www/config.php
  4276. , $form_mail_sender // billing-l1/www/config.php:24:$form_mail_sender="/usr/bin/mutt";
  4277. , $form_send_from_param // billing-l1/www/config.php:19:$form_send_from_param="biall-net@biall.net.pl";
  4278. ;
  4279. //NAGLOWKI DO HTML MAILA
  4280. $naglowki = "From: ".$form_send_from_param."\r\n";
  4281. $naglowki .= "MIME-Version: 1.0\r\n";
  4282. $naglowki .= "Content-type: text/html; charset=iso-8859-1\r\n";
  4283. //PODRECZNE_ZAPYTANIE_SLOWNIKOWE_DO_TYPOW_DOKUMENTOW
  4284. $BNT = array();
  4285. $bnt_types = WindykacjaStatsModel::get_billing_types();
  4286. foreach ($bnt_types as $k_type_id => $h_type) {
  4287. $BNT[$h_type['ID']] = $h_type['TYPE'];
  4288. }
  4289. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">bnt_types: ';print_r($bnt_types);echo'</pre>';
  4290. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">BNT: ';print_r($BNT);echo'</pre>';
  4291. if ($_GET['ID_BILLING_USERS_PARAM']) $ID_BILLING_USERS_PARAM = $_GET['ID_BILLING_USERS_PARAM'];
  4292. if (!$IF_PRINT_PARAM && !$ECHO_PARAM) {
  4293. echo'<p style="text-align:right">';
  4294. echo"<a href=\"javascript:openWindow('/modules/make_billing/edit.php?op=zadluzenia&print=1&FIRMA=1&uid=$ID_BILLING_USERS_PARAM','print','scrollbars,resizable=yes,width=750,height=550')\">";
  4295. echo"<img border=\"0\" src=\"$xpath/ico/kw.gif\" width=\"16\" height=\"16\" alt=\"Zadłużenia\">";
  4296. echo"Druki wezwania do zaplaty";
  4297. echo"</a>";
  4298. echo'</p>';
  4299. }
  4300. $user_id = $ID_BILLING_USERS_PARAM;
  4301. $billing_account_files = WindykacjaStatsModel::get_billing_account_files($user_id);
  4302. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_account_files: ';print_r($billing_account_files);echo'</pre>';
  4303. die('F.' . __FUNCTION__ . ' ...');
  4304. $NAGLOWEK = "<table border=\"1\" width=\"100%\"><tr><td>Płatnik</td><td>WINIEN</td><td>MA</td><td>DOK</td><td>Numer</td><td>(T)ermin pł./(D)ata ksiegowania </td><td>Dni przeterminowania</td><td>Kwota przeterminowana</td><td>Odsetki</td></tr>";
  4305. //while ($BAF = $vdb->sql_fetchrow($result)) {
  4306. foreach ($billing_account_files as $BAF) {
  4307. //RESETUJEMY FORM - jak nie chcemy pojedynczego odczytu:
  4308. if (!$ID_BILLING_USERS_PARAM) unset($FORM);
  4309. if (!$LAST_PLATNIK) $LAST_PLATNIK = $BAF[1];
  4310. if (!$LPD) $LPD = $BAF;
  4311. if (($BAF[0] <> $LAST_ID)) {// ID
  4312. //DRUKUJEMY_STARE_PODSUMOWANIE (DLA_FAKTURY POJEDYNCZEJ)
  4313. if ($LAST_ID) {
  4314. $FORM_2.="<tr><td></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL[WINIEN])."</b></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL[MA])."</b></td><td colspan=\"3\"></td>";
  4315. $FORM_S.= "<tr><td></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL[WINIEN])."</b></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL[MA])."</b></td><td colspan=\"3\"></td>";
  4316. $LDNI = floor((date("U") - $DOC_TERM) / 86400) ;
  4317. if(($LDNI>0) && ($DOC_TERM) && ($LTOTAL['WINIEN_MA'] == "WINIEN")) {
  4318. $LODSETKI= FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL[WINIEN_MA]] * $STOPA_ODSETEK * $LDNI / 365);
  4319. $POD_ODSETEK=$LTOTAL[$LTOTAL['WINIEN_MA']];
  4320. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI;
  4321. $PLATNIK_DATA['PRZETER']['WINIEN'] += $LTOTAL[$LTOTAL['WINIEN_MA']];
  4322. } else {
  4323. unset($LODSETKI);
  4324. unset($LDNI);
  4325. unset($POD_ODSETEK);
  4326. }
  4327. $FORM_2.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  4328. $FORM_2.= "<td>$LODSETKI</td>";
  4329. $FORM_S.= "<td>---</td><td>---</td><td>---</td>";
  4330. // if(!$PLATNIK_DATA[TOTAL][WINIEN])
  4331. $PLATNIK_DATA[TOTAL][WINIEN]+=FunkcjeL1::formatuj_grosze($LTOTAL[WINIEN]) ;
  4332. // if(!$PLATNIK_DATA[TOTAL][MA])
  4333. $PLATNIK_DATA[TOTAL][MA]+=FunkcjeL1::formatuj_grosze($LTOTAL[MA]) ;
  4334. $FORM_2.= "</tr>";
  4335. $FORM_2.= "<tr><td colspan=\"6\"><hr></td></tr>";
  4336. $FORM_S.="</tr><tr><td colspan=\"6\"><hr></td></tr>";
  4337. $TOTAL[WINIEN]+=$LTOTAL[WINIEN] ; $TOTAL[MA]+=$LTOTAL[MA] ;
  4338. if ($LAST_PLATNIK <> $BAF[1]) {//PODSUMOWANIE_DLA_PLATNIKA
  4339. $TOTAL[PRZETER]+=$PLATNIK_DATA[PRZETER][WINIEN];
  4340. $TOTAL[ODSETKI]+=$PLATNIK_DATA[PRZETER][ODSETKI];
  4341. $FORM_2.= "<tr><td colspan=\"9\">Podsumowanie salda niezbilansowanych zobowiązań dla platnika $LAST_PLATNIK
  4342. $LPD[P_NAME] $LPD[P_NAME_SECOND] $LPD[P_ADDRESS_CITY] $LPD[P_ADDRESS_STREET] $LPD[P_ADDRESS_HOUSE] $LPD[P_ADDRESS_HOME]
  4343. <br> WINIEN: <b>".$PLATNIK_DATA[TOTAL][WINIEN]."</b> - MA: <b>".$PLATNIK_DATA[TOTAL][MA]."</b> DO ZAPŁATY: <b>".FunkcjeL1::formatuj_grosze($PLATNIK_DATA[TOTAL][WINIEN]-$PLATNIK_DATA[TOTAL][MA])."</b> " ;
  4344. if($PLATNIK_DATA[PRZETER][WINIEN]) $FORM_2.=", z czego przeterminowane <font color=\"red\"><b> ".FunkcjeL1::formatuj_grosze($PLATNIK_DATA[PRZETER][WINIEN])." </b></font> ";
  4345. if($PLATNIK_DATA[PRZETER][ODSETKI]) $FORM_2.= " ( aktualnie nalezne odsetki to ".$PLATNIK_DATA[PRZETER][ODSETKI]." PLN , które mogą zostać naliczone ) " ;
  4346. if($LPD[BA_TIMESTAMP]) $FORM_2.=" <br> Stan wzajemnych rozrachunków: WINIEN: <b>$LPD[BA_WINIEN]</b> - MA: <b>$LPD[BA_MA]</b> SALDO(DO ZAPŁATY): <b>".FunkcjeL1::formatuj_grosze($LPD[BA_WINIEN]-$LPD[BA_MA])."</b> , i jest to stan na dzień ".date("Y-m-d",$LPD['BA_TIMESTAMP'])." ";
  4347. $RETURN_ARR="";
  4348. $FORM_S.="<tr><td colspan=\"9\"></td></tr></table>";
  4349. $FORM_2.="<br>W razie problemów prosimy o kontakt z biurem obsługi. <br><font size=\"1\" color=\"#CCCCCC\">webone billing system &copy;2004 by Arkadiusz Binder & www.grafnet.pl | finance module by A.Binder </font>";
  4350. $FORM_2.= " </tr></table>";
  4351. $FORM_2 = "{$NAGLOWEK} \n {$FORM_2}";
  4352. $FORM_S= "{$NAGLOWEK} \n {$FORM_S}";
  4353. if ($IF_PRINT_PARAM) {
  4354. $delivery_subject="Stan rozrachunków dla {$LPD[P_NAME]} {$LPD[P_NAME_SECOND]}" ;
  4355. $sql2="insert into HIST_CONTACTS (ID_BILLING_USERS,ID_BILLING_NUMBERS,SUBJECT,BODY_HTML,REQUEST_STATUS_MAIL) values
  4356. ('".$LAST_PLATNIK."','','{$delivery_subject}','{$FORM_2}','CONFIRM_SENT_MAIL') ";
  4357. $res = $vdb->sql_query($sql2) ;
  4358. echo "<hr> $sql2 <hr>****";
  4359. } else if (!$ECHO_PARAM) {
  4360. echo $FORM_2;
  4361. }
  4362. $LAST_PLATNIK=$BAF[1];
  4363. unset($PLATNIK_DATA);
  4364. $FORM.=$FORM_2 ;
  4365. unset($FORM_2);
  4366. $FORM_SS.=$FORM_S ;
  4367. unset($FORM_S);
  4368. } else {
  4369. }
  4370. //$PLATNIK_DATA[TOTAL][WINIEN]+=$BAF[2];
  4371. //$PLATNIK_DATA[TOTAL][MA]+=$BAF[3];
  4372. $LPD = $BAF;
  4373. $LAST_PLATNIK = $BAF[1];
  4374. }
  4375. else {
  4376. }
  4377. //DODAJEMY_NOWY_REKORD_OD_SAMEJ_PLATNOSCI
  4378. unset($LTOTAL);
  4379. $FORM_2.= "<tr><td>$BAF[1]</td><td>$BAF[2]</td><td>$BAF[3]</td><td>".$BNT[$BAF[4]]."</td><td>$BAF[5]/$BAF[6]</td> <td colspan=\"1\">";
  4380. if ($BAF[19]) $FORM_2.="T: ".date("Y-m-d",$BAF[19])." "; else $FORM_2.="D: ".date("Y-m-d",$BAF['BAF_TIMESTAMP'])." ";
  4381. $FORM_2.="</td></tr>";
  4382. $FORM_S.= "<tr><td>$BAF[1]</td><td>$BAF[2]</td><td>$BAF[3]</td><td>".$BNT[$BAF[4]]."</td><td>$BAF[5]/$BAF[6]</td> <td colspan=\"1\">";
  4383. if($BAF[19])$FORM_S.="T: ".date("Y-m-d",$BAF[19])." "; else $FORM_2.="D: ".date("Y-m-d",$BAF['BAF_TIMESTAMP'])." ";
  4384. $FORM_S.="</td></tr>";
  4385. $DOC_TERM = $BAF[19];
  4386. if ($BAF[2] > 0) $LTOTAL['WINIEN_MA'] = "WINIEN"; else $LTOTAL['WINIEN_MA'] = "MA";
  4387. $LTOTAL[$LTOTAL['WINIEN_MA']] = $BAF[2] + $BAF[3];
  4388. } else {
  4389. //DRUKUJEMY_PODSTUMOWANIE_STAREGO i ZAPODAJEMY NOWY_REKORD
  4390. }
  4391. if ($BAF[12]) {// ID_FIN_WINIEN_VAL
  4392. $FORM_2.= "<tr><td colspan=\"1\"></td>";
  4393. $FORM_S.= "<tr><td colspan=\"1\"></td>";
  4394. if($LTOTAL['WINIEN_MA']=="MA") {
  4395. $FORM_2.= "<td><font color=\"green\"><b> $BAF[12] </b> </font></td>";
  4396. $FORM_2.= "<td></td>";
  4397. $FORM_S.="<td><font color=\"green\"><b> $BAF[12] </b> </font></td><td></td>";
  4398. } else {
  4399. $FORM_2.= "<td></td>";
  4400. $FORM_2.= "<td><font color=\"green\"><b> $BAF[12] </b> </font></td>";
  4401. $FORM_S.="<td></td><td><font color=\"green\"><b> $BAF[12] </b> </font></td>";
  4402. }
  4403. $FORM_2.= "<td>".$BNT[$BAF[8]]."</td>";
  4404. $FORM_2.= "<td> $BAF[9]/$BAF[10] </td><td>D: ".date("Y-m-d",$BAF[11])."</td> ";
  4405. $FORM_S.= "<td>".$BNT[$BAF[8]]."</td>";
  4406. $FORM_S.= "<td> $BAF[9]/$BAF[10] </td><td>D: ".date("Y-m-d",$BAF[11])."</td> ";
  4407. $LDNI = floor(($BAF[11] - $DOC_TERM) / 86400);
  4408. if (($LDNI > 0) && ($DOC_TERM) && ($LTOTAL['WINIEN_MA'] == "WINIEN")) {
  4409. $DOC_TERM = $BAF[11];
  4410. $LODSETKI = FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL['WINIEN_MA']] * $STOPA_ODSETEK * $LDNI / 365);
  4411. $POD_ODSETEK = $LTOTAL[$LTOTAL['WINIEN_MA']];
  4412. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI;
  4413. } else {
  4414. unset($LODSETKI);
  4415. unset($LDNI);
  4416. unset($POD_ODSETEK);
  4417. }
  4418. $FORM_2.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  4419. $FORM_2.= "<td>$LODSETKI</td>";
  4420. $FORM_2.= "</tr>";
  4421. $FORM_S.="<td>---</td><td>---</td><td>---</td></tr>";
  4422. $LTOTAL[$LTOTAL['WINIEN_MA']] -= $BAF[12];
  4423. }
  4424. if ($BAF[18]) {// ID_FIN_MA_VAL
  4425. $FORM_2.= "<tr><td colspan=\"1\"></td>";
  4426. $FORM_S.= "<tr><td colspan=\"1\"></td>";
  4427. if ($LTOTAL['WINIEN_MA'] == "MA") {
  4428. $FORM_2.= "<td><font color=\"red\"><b> $BAF[18] </b> </font></td>";
  4429. $FORM_2.= "<td></td>";
  4430. $FORM_S.= "<td><font color=\"red\"><b> $BAF[18] </b> </font></td><td></td>";
  4431. } else {
  4432. $FORM_2.= "<td></td>";
  4433. $FORM_2.= "<td><font color=\"red\"><b> $BAF[18] </b> </font></td>";
  4434. $FORM_S.="<td></td><td><font color=\"red\"><b> $BAF[18] </b> </font></td>";
  4435. }
  4436. $FORM_2.= "<td>".$BNT[$BAF[14]]."</td>";
  4437. $FORM_2.= "<td> $BAF[15]/$BAF[16] </td> <td>D: ".date("Y-m-d",$BAF[17])."</td> ";
  4438. $FORM_S.="<td>".$BNT[$BAF[14]]."</td> <td> $BAF[15]/$BAF[16] </td> <td>D: ".date("Y-m-d",$BAF[17])."</td> ";
  4439. $LDNI=floor(($BAF[17] - $DOC_TERM) / 86400) ;
  4440. // $LDNI=10;
  4441. if (($LDNI > 0) && ($DOC_TERM) && ($LTOTAL['WINIEN_MA'] == "WINIEN")) {
  4442. $LODSETKI = FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL[WINIEN_MA]] * $STOPA_ODSETEK * $LDNI / 365);
  4443. $POD_ODSETEK = $LTOTAL[$LTOTAL['WINIEN_MA']];
  4444. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI;
  4445. } else {
  4446. unset($LODSETKI);
  4447. unset($LDNI);
  4448. unset($POD_ODSETEK);
  4449. }
  4450. $FORM_2.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  4451. $FORM_S.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  4452. $FORM_2.= "<td>$LODSETKI</td>";
  4453. $FORM_S.= "<td>$LODSETKI</td>";
  4454. $FORM_2.= "</tr>";
  4455. $FORM_S.= "</tr>";
  4456. $LTOTAL[$LTOTAL['WINIEN_MA']]-=$BAF[18] ;
  4457. }
  4458. $LAST_ID = $BAF[0];
  4459. $L_BAF = $BAF;
  4460. }//eof SQL while($BAF=$vdb->sql_fetchrow($result)) {
  4461. //DODANIE_ZESTAWIENIA KOPIA_Z_GORY
  4462. //DRUKUJEMY_STARE_PODSUMOWANIE (DLA_FAKTURY POJEDYNCZEJ)
  4463. if ($LAST_ID) {
  4464. $FORM_2.="<tr><td></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL['WINIEN'])."</b></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL['MA'])."</b></td><td colspan=\"3\"></td>";
  4465. $FORM_S.="<tr><td></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL['WINIEN'])."</b></td><td><b>".FunkcjeL1::formatuj_grosze($LTOTAL['MA'])."</b></td><td colspan=\"3\"></td>";
  4466. $LDNI = round((date("U") - $DOC_TERM) / 86400, 0);
  4467. if (($LDNI > 0) && ($DOC_TERM)) {
  4468. $LODSETKI = FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL['WINIEN_MA']] * $STOPA_ODSETEK * $LDNI / 365);
  4469. $POD_ODSETEK = $LTOTAL[$LTOTAL['WINIEN_MA']];
  4470. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI ;
  4471. $PLATNIK_DATA['PRZETER']['WINIEN'] += $LTOTAL[$LTOTAL['WINIEN_MA']];
  4472. } else {
  4473. unset($LODSETKI);
  4474. unset($LDNI);
  4475. unset($POD_ODSETEK);
  4476. }
  4477. $FORM_2.= "<td>$LDNI</td><td>".FunkcjeL1::formatuj_grosze($POD_ODSETEK)."</td>";
  4478. $FORM_2.= "<td>$LODSETKI</td>";
  4479. $FORM_S.="<td>---</td><td>---</td><td>---</td>";
  4480. // if(!$PLATNIK_DATA[TOTAL]['WINIEN'])
  4481. $PLATNIK_DATA['TOTAL']['WINIEN']+=FunkcjeL1::formatuj_grosze($LTOTAL['WINIEN']) ;
  4482. // if(!$PLATNIK_DATA[TOTAL][MA])
  4483. $PLATNIK_DATA['TOTAL']['MA']+=FunkcjeL1::formatuj_grosze($LTOTAL['MA']) ;
  4484. $FORM_2.= "</tr>";
  4485. $FORM_2.= "<tr><td colspan=\"6\"><hr></td></tr>";
  4486. $FORM_S.="</tr><tr><td colspan=\"6\"><hr></td></tr>";
  4487. $TOTAL['WINIEN']+=$LTOTAL['WINIEN'] ; $TOTAL['MA']+=$LTOTAL['MA'] ;
  4488. if ($LAST_PLATNIK <> $BAF[1]) {//PODSUMOWANIE_DLA_PLATNIKA
  4489. $TOTAL['PRZETER'] += $PLATNIK_DATA['PRZETER']['WINIEN'];
  4490. $TOTAL['ODSETKI'] += $PLATNIK_DATA['PRZETER']['ODSETKI'];
  4491. if (!$LPD) $LPD = $L_BAF ;
  4492. $FORM_2.= "<tr><td colspan=\"9\">Podsumowanie salda niezbilansowanych zobowiązań dla platnika $LAST_PLATNIK
  4493. $LPD[P_NAME] $LPD[P_NAME_SECOND] $LPD[P_ADDRESS_CITY] $LPD[P_ADDRESS_STREET] $LPD[P_ADDRESS_HOUSE] $LPD[P_ADDRESS_HOME]
  4494. <br> WINIEN: <b>".$PLATNIK_DATA['TOTAL']['WINIEN']."</b> - MA: <b>".$PLATNIK_DATA['TOTAL']['MA']."</b>
  4495. DO ZAPŁATY: <b>".FunkcjeL1::formatuj_grosze($PLATNIK_DATA['TOTAL']['WINIEN']-$PLATNIK_DATA['TOTAL']['MA'])."</b> " ;
  4496. if ($PLATNIK_DATA['PRZETER']['WINIEN']) $FORM_2.=", z czego przeterminowane <font color=\"red\"><b> ".FunkcjeL1::formatuj_grosze($PLATNIK_DATA['PRZETER']['WINIEN'])." </b></font> ";
  4497. if ($PLATNIK_DATA['PRZETER']['ODSETKI']) $FORM_2.= " ( aktualnie nalezne odsetki to ".$PLATNIK_DATA['PRZETER']['ODSETKI']." PLN , które mogą zostać naliczone ) " ;
  4498. if ($LPD['BA_TIMESTAMP']) $FORM_2.=" <br> Stan wzajemnych rozrachunków: WINIEN: <b>".$LPD['BA_WINIEN']."</b> - MA: <b>".$LPD['BA_MA']."</b> SALDO(DO ZAPŁATY): <b>".FunkcjeL1::formatuj_grosze($LPD['BA_WINIEN']-$LPD['BA_MA'])."</b> , i jest to stan na dzień ".date("Y-m-d",$LPD['BA_TIMESTAMP'])." ";
  4499. $RETURN_ARR="";
  4500. $FORM_S.="<tr><td colspan=\"9\"></td></tr></table>";
  4501. $FORM_2.="<br>W razie problemów prosimy o kontakt z biurem obsługi. <br><font size=\"1\" color=\"#CCCCCC\">webone billing system &copy;2004 by Arkadiusz Binder & www.grafnet.pl | finance module by A.Binder </font>";
  4502. $FORM_2.= " </tr></table>";
  4503. $FORM_2 = "{$NAGLOWEK} \n {$FORM_2}";
  4504. $FORM_S = "{$NAGLOWEK}{$FORM_S}";
  4505. //DRUKOWANIE ZESTAWIENIA
  4506. if ($IF_PRINT_PARAM) {
  4507. $delivery_subject="Stan rozrachunków dla {$LPD['P_NAME']} {$LPD['P_NAME_SECOND']}" ;
  4508. // exec("echo \"Pliki zostały dołączone do załącznika\" | $form_mail_sender -n -a \"$filename\" $delivery_mail -s ".$delivery_subject."" );
  4509. $sql2="insert into HIST_CONTACTS (ID_BILLING_USERS,ID_BILLING_NUMBERS,SUBJECT,BODY_HTML,REQUEST_STATUS_MAIL) values
  4510. ('".$LAST_PLATNIK."','','{$delivery_subject}','{$FORM_2}','CONFIRM_SENT_MAIL') ";
  4511. $res = $vdb->sql_query($sql2);
  4512. echo "<hr> {$sql2} <hr>***";
  4513. } else if (!$ECHO_PARAM) {
  4514. echo $FORM_2;
  4515. }
  4516. //EOF DRUKOWANIE ZESTAWIENIA itp
  4517. $LAST_PLATNIK = $BAF[1];
  4518. $ECHO_DATA=$PLATNIK_DATA;
  4519. unset($PLATNIK_DATA);
  4520. $FORM .= "{$FORM_2}</table>";
  4521. $FORM_SS .= "{$FORM_S}</table>";
  4522. unset($FORM_2);
  4523. unset($FORM_S);
  4524. }
  4525. }
  4526. $FORM_2.= $NAGLOWEK;
  4527. $FORM_2.= "<tr><td>TOT</td><td><b>{$TOTAL['WINIEN']}</b></td><td><b>{$TOTAL['MA']}</b></td><td colspan=\"4\"></td>
  4528. <td><b>{$TOTAL['PRZETER']}</b></td><td><b>{$TOTAL['ODSETKI']}</b></td></tr>";
  4529. $FORM_2 .= "</table>";
  4530. if (!$ECHO_PARAM) echo "{$FORM_2}";
  4531. $FORM_S.= "</table> ";
  4532. if ($ECHO_PARAM == "zadluzenie") return FunkcjeL1::formatuj_grosze($ECHO_DATA['PRZETER']['WINIEN']);
  4533. if ($ECHO_PARAM == "saldo") return FunkcjeL1::formatuj_grosze($LPD['BA_WINIEN']-$LPD['BA_MA']);
  4534. if ($ECHO_PARAM == "zadluzenie_lista") return $FORM;
  4535. if ($ECHO_PARAM == "saldo_rok") {
  4536. $L_BAF['FORM'] = $FORM;
  4537. $L_BAF['FORM_SALDO'] = $FORM_SS;
  4538. return $L_BAF;
  4539. }
  4540. }
  4541. }