superedit-USERS2_WINDYKACJA_STATUS.php 246 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459
  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 == 'zestawienie_vectra_zadluzenia') {
  41. WindykacjaView::zestawienie_vectra_zadluzenia();
  42. exit;
  43. }
  44. else if ($task == 'zestawienie_vectra_nadplaty') {
  45. WindykacjaView::zestawienie_vectra_nadplaty();
  46. exit;
  47. }
  48. else if ($task == 'wezwanie') {
  49. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  50. if ($user_id > 0) {
  51. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  52. if (!$user) {
  53. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  54. } else {
  55. WindykacjaView::wezwanie($user, $user->PAY_TERM);
  56. return;
  57. }
  58. } else {
  59. echo'<p style="color:red">'."Bledne dane.".'</p>';
  60. }
  61. }
  62. else if ($task == 'wezwanie_ostateczne') {
  63. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  64. if ($user_id > 0) {
  65. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  66. if (!$user) {
  67. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  68. } else {
  69. WindykacjaView::wezwanie_ostateczne($user, $user->PAY_TERM);
  70. return;
  71. }
  72. } else {
  73. echo'<p style="color:red">'."Bledne dane.".'</p>';
  74. }
  75. }
  76. else if ($task == 'bok_rozwiazanie_umowy') {
  77. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  78. if ($user_id > 0) {
  79. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  80. if (!$user) {
  81. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  82. } else {
  83. WindykacjaView::task_bok_rozwiazanie_umowy($user);
  84. return;
  85. }
  86. } else {
  87. echo'<p style="color:red">'."Bledne dane.".'</p>';
  88. }
  89. }
  90. else if ($task == 'bok_rozwiazanie_umowy_print') {
  91. $user_id = V::get('user_id', 0, $_REQUEST, 'int');
  92. if ($user_id > 0) {
  93. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  94. if (!$user) {
  95. echo'<p style="color:red">'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  96. } else {
  97. WindykacjaView::task_bok_rozwiazanie_umowy_print($user, V::get('id_koresp', 0, $_REQUEST, 'int'));
  98. return;
  99. }
  100. } else {
  101. echo'<p style="color:red">'."Bledne dane.".'</p>';
  102. }
  103. }
  104. else if ($task == 'stats_update') {
  105. WindykacjaView::task_update_stats();
  106. return;
  107. }
  108. else if ($task == 'export_csv') {
  109. $items = array();
  110. $page_nav = new stdClass();
  111. $page_nav->total = 0;
  112. $page_nav->page_total = 0;
  113. $page_nav->base_link_arr = array('MENU_INIT'=>"USERS2_WINDYKACJA_STATUS", 'q'=>$q);
  114. $page_nav->page_limit = 100000;
  115. $page_nav->page_nr = 0;
  116. $page_nav->base_link_arr['_f'] = V::get('_f', '', $_GET);
  117. if ($page_nav->page_nr > 0) {
  118. $page_nav->base_link_arr['_p'] = $page_nav->page_nr;
  119. }
  120. // sortowanie, filtr wyszukiwania
  121. $page_nav->base_link_arr['_oby'] = 'ID';
  122. $page_nav->base_link_arr['_odir'] = 'DESC';
  123. if (($order_by = V::get('_oby', '', $_GET)) != '') {
  124. $page_nav->base_link_arr['_oby'] = $order_by;
  125. }
  126. if (($order_dir = V::get('_odir', '', $_GET)) != '') {
  127. $page_nav->base_link_arr['_odir'] = $order_dir;
  128. }
  129. if (!empty($q)) {
  130. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  131. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  132. $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']);
  133. $page_nav->page_total = count($items);
  134. }
  135. else {
  136. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  137. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  138. $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']);
  139. $page_nav->page_total = count($items);
  140. }
  141. if ($page_nav->total > 0) {
  142. WindykacjaView::export_csv($q, $page_nav, $items);
  143. } else {
  144. echo'<p>' . "Brak danych" . '</p>';
  145. }
  146. exit;
  147. }
  148. else if ($task == 'send_mass_mail'
  149. || $task == 'send_mass_sms'
  150. ) {
  151. $usersLimit = 10000;
  152. $msgType = '';
  153. if ($task == 'send_mass_mail') {
  154. $msgType = 'mail';
  155. } else if ($task == 'send_mass_sms') {
  156. $msgType = 'sms';
  157. } else {
  158. echo "Błędny rodzaj wiadomości";
  159. exit;
  160. }
  161. $filter_selected = WindykacjaStatsHelper::get_filter_selected();
  162. if (empty($filter_selected)) {
  163. echo "Nie wybrano filtra";
  164. exit;
  165. }
  166. $_GET['_special_filter_active'] = 'today';
  167. $_GET["_special_filter_msg_{$msgType}"] = 'not_today';
  168. $usersTotal = WindykacjaStatsModel::get_users_total();
  169. if ($usersTotal > 0) {
  170. $firstUser = WindykacjaStatsModel::get_users('', 1, 0);
  171. $firstUser = reset($firstUser);
  172. //echo'<pre>';print_r($firstUser);echo'</pre>';
  173. if ('mail' == $msgType) {
  174. $msgStatusList = WindykacjaStatsHelper::get_mail_status_info($firstUser);
  175. } else if ('sms' == $msgType) {
  176. $msgStatusList = WindykacjaStatsHelper::get_sms_status_info($firstUser);
  177. }
  178. $msgStatusFirstKey = array_keys($msgStatusList);
  179. $msgStatusFirstKey = reset($msgStatusFirstKey);
  180. $msgStatusInfo = $msgStatusList[$msgStatusFirstKey];
  181. //echo'<pre>$msgStatusInfo:';print_r($msgStatusInfo);echo'</pre>';
  182. $selectedMsgStatus = V::get('msgStatus', '', $_REQUEST);
  183. $saldoLimit = V::get('saldoLimit', '100', $_REQUEST, 'int');
  184. $terminPlatnosci = V::get('terminPlatnosci', '', $_REQUEST);
  185. if ($saldoLimit <= 0) $saldoLimit = 100;
  186. if (strlen($terminPlatnosci) != 10 || $terminPlatnosci < date("Y-m-d")) $terminPlatnosci = '';
  187. //echo'<pre>$selectedMsgStatus:';print_r($selectedMsgStatus);echo'</pre>';
  188. if ('1' != V::get('confirm', '', $_POST) || empty($selectedMsgStatus)) {
  189. WindykacjaView::css();
  190. $fltrLabel = WindykacjaStatsHelper::get_filter_selected_label();
  191. ?>
  192. <style type="text/css">
  193. body{font-size:14px;line-height:1.4;}
  194. </style>
  195. <div class="jumbotron">
  196. <div class="container">
  197. <p>Wyślij wiadomości (<?php echo $msgType; ?>) do <b><?php echo $usersTotal; ?></b> użytkowników wg filtra
  198. <br><b><?php echo $fltrLabel; ?></b>
  199. </p>
  200. <form class="form-horizontal" method="POST">
  201. <input type="hidden" name="confirm" value="-1">
  202. <?php foreach ($msgStatusList as $vMsgKey => $vMsgInfo) : ?>
  203. <div class="form-group">
  204. <div class="col-sm-offset-2 col-sm-10">
  205. <div class="radio">
  206. <label>
  207. <input type="radio" name="msgStatus" value="<?php echo $vMsgKey; ?>">
  208. <?php echo $vMsgInfo['label']; ?>
  209. <div style="margin:0 0 0 100px;"><?php echo $vMsgInfo['msg']; ?></div>
  210. </label>
  211. </div>
  212. </div>
  213. </div>
  214. <?php endforeach; ?>
  215. <div class="form-group">
  216. <label for="saldoLimit" class="col-sm-2 control-label">Limit:</label>
  217. <div class="col-sm-10">
  218. <input style="width:100px;" class="form-control" name="saldoLimit" type="number" value="<?php echo $saldoLimit; ?>" />
  219. </div>
  220. </div>
  221. <div class="form-group">
  222. <label for="terminPlatnosci" class="col-sm-2 control-label">Termin płatności:</label>
  223. <div class="col-sm-10">
  224. <div class="input-group date" id="fldTerminPlatnosci" style="width:140px;">
  225. <input type="text" name="terminPlatnosci" class="form-control" value="<?php echo $terminPlatnosci; ?>" />
  226. <span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>
  227. </div>
  228. </div>
  229. </div>
  230. <div class="form-group">
  231. <div class="col-sm-offset-2 col-sm-10">
  232. <label style="text-info"><i>Określenenie terminu zmienia w wiadomości zdanie: "Prosimy o niezwloczne uregulowanie zaleglosci" na "Prosimy o uregulowanie w/w zaleglosci w terminie do {podany termin}."</i></label>
  233. </div>
  234. </div>
  235. <div class="form-group">
  236. <div class="col-sm-offset-2 col-sm-10">
  237. <button type="submit" id="testMassMsgsBtn" class="btn btn-default" autocomplete="off">
  238. Testuj
  239. </button>
  240. <button type="submit" id="sendMassMsgsBtn" class="btn btn-primary" autocomplete="off">
  241. Wyślij
  242. </button>
  243. </div>
  244. </div>
  245. </form>
  246. </div>
  247. </div>
  248. <script type="text/javascript">
  249. jQuery(document).ready(function () {
  250. jQuery('#sendMassMsgsBtn').on('click', function () {
  251. var n = jQuery(this);
  252. this.form['confirm'].value = '1';
  253. jQuery('#testMassMsgsBtn').attr('disabled', 'disabled');
  254. n.text(n.text() + '...').attr('disabled', 'disabled');
  255. this.form.submit();
  256. })
  257. jQuery('#testMassMsgsBtn').on('click', function () {
  258. var n = jQuery(this);
  259. jQuery('#sendMassMsgsBtn').attr('disabled', 'disabled');
  260. n.text(n.text() + '...').attr('disabled', 'disabled');
  261. n.get(0).form.submit();
  262. })
  263. jQuery("#fldTerminPlatnosci").datetimepicker({
  264. format: "YYYY-MM-DD",
  265. //defaultDate: new Date(<?php echo date("Y"); ?>, <?php echo intval(date("m")) - 1; ?>, 1),
  266. minDate: new Date(<?php echo date("Y"); ?>, <?php echo (int)date("m") - 1; ?>, <?php echo (int)date("d"); ?>),
  267. // maxDate: "<?php echo date("Y"); ?>"
  268. });
  269. });
  270. </script>
  271. <?php
  272. if ('-1' == V::get('confirm', '', $_POST) && !empty($selectedMsgStatus)) {
  273. echo '<div class="container">';
  274. echo '<h3>TEST</h3>';
  275. echo '<div style="max-height:400px;overflow:auto;border:1px solid silver;">';
  276. $users = WindykacjaStatsModel::get_users('', $usersLimit, 0);
  277. $cmdStats = array('sent' => 0, 'omitted' => 0, 'error' => 0);
  278. foreach ($users as $user) {
  279. if ($user->PAY_SALDO > -1 * $saldoLimit) {
  280. echo '<p class="text-warning">';
  281. $zaleglosc = number_format($user->PAY_SALDO, 2, ',', '');
  282. echo "pominięto klienta {$user->ID} ze względu na limit płatności (zaległość: {$zaleglosc} zł)";
  283. echo '</p>';
  284. $cmdStats['omitted'] += 1;
  285. continue;
  286. } else {
  287. echo '<p class="text-info">';
  288. echo "wysyłanie {$msgType} do klienta {$user->ID}: ";
  289. if ('mail' == $msgType) {
  290. $msgStatusList = WindykacjaStatsHelper::get_mail_status_info($user, $terminPlatnosci);
  291. } else if ('sms' == $msgType) {
  292. $msgStatusList = WindykacjaStatsHelper::get_sms_status_info($user, $terminPlatnosci);
  293. }
  294. foreach ($msgStatusList as $vMsgKey => $vMsgInfo) {
  295. if ($vMsgKey == $selectedMsgStatus) {
  296. echo '"' . V::get('msg', '', $vMsgInfo) . '"';
  297. break;
  298. }
  299. }
  300. echo '</p>';
  301. $cmdStats['sent'] += 1;
  302. }
  303. }
  304. echo '</div>';
  305. echo '<div class="alert alert-info">';
  306. echo "Informacja zostanie wysłana do {$cmdStats['sent']} klientów. {$cmdStats['omitted']} klientów zostanie pominiętych.";
  307. echo '</div>';
  308. echo '</div>';
  309. }
  310. } else {
  311. $fltrSelected = WindykacjaStatsHelper::get_filter_selected();
  312. $users = WindykacjaStatsModel::get_users('', $usersLimit, 0);
  313. $cmdStats = array('sent' => 0, 'omitted' => 0, 'error' => 0);
  314. $usersCount = count($users);
  315. @error_log(date('Y-m-d H:i:s') . "\tuser(" . User::getLogin() . ") send mass '{$msgType}' to {$usersCount}/{$usersTotal} users with fltr '{$fltrSelected}' ...\n", 3, '/tmp/se-windykacja.log');
  316. foreach ($users as $user) {
  317. if ($user->PAY_SALDO > -1 * $saldoLimit) {
  318. echo '<div class="alert alert-warning">';
  319. $zaleglosc = number_format($user->PAY_SALDO, 2, ',', '');
  320. echo "pominięto klienta {$user->ID} ze względu na limit płatności (zaległość: {$zaleglosc} zł)";
  321. echo '</div>';
  322. $cmdStats['omitted'] += 1;
  323. continue;
  324. } else {
  325. //echo '<div class="alert alert-info">';
  326. // echo "wysyłanie wiadomości do klienta {$user->ID}...";
  327. //echo '</div>';
  328. }
  329. if ('mail' == $msgType) {
  330. $msgStatusList = WindykacjaStatsHelper::get_mail_status_info($user, $terminPlatnosci);
  331. } else if ('sms' == $msgType) {
  332. $msgStatusList = WindykacjaStatsHelper::get_sms_status_info($user, $terminPlatnosci);
  333. }
  334. if ('mail' == $msgType) {
  335. $ret = WindykacjaStatsHelper::update_mail_status($user, $selectedMsgStatus);
  336. } else if ('sms' == $msgType) {
  337. $ret = WindykacjaStatsHelper::update_sms_status($user, $selectedMsgStatus);
  338. }
  339. $ret = 1;
  340. if ($ret) {
  341. echo '<div class="alert alert-success">';
  342. echo "wysłano wiadomość do klienta {$user->ID}";
  343. echo '</div>';
  344. $cmdStats['sent'] += 1;
  345. } else {
  346. echo '<div class="alert alert-danger">';
  347. echo "nie udało się wysłać wiadomości do klienta {$user->ID}";
  348. echo '</div>';
  349. $cmdStats['error'] += 1;
  350. }
  351. }
  352. @error_log(date('Y-m-d H:i:s') . "\tuser(" . User::getLogin() . ") sent mass '{$msgType}' fltr({$fltrSelected}): " . json_encode($cmdStats) . "\n\n", 3, '/tmp/se-windykacja.log');
  353. }
  354. } else {
  355. echo'<p>' . "Brak danych" . '</p>';
  356. }
  357. exit;
  358. }
  359. }
  360. WindykacjaView::css();
  361. if ($user_id > 0) {
  362. $user = WindykacjaStatsModel::get_user_by_id($user_id);
  363. if (!$user) {
  364. echo'<p>'."Użytkownik nie istnieje lub brak uprawnień.".'</p>';
  365. return;
  366. }
  367. WindykacjaView::user($user);
  368. WindykacjaView::user_umowy($user);
  369. WindykacjaView::user_historia_platnosci($user);
  370. }
  371. else {
  372. // aktualiacja danych
  373. WindykacjaStatsHelper::update_users_table();
  374. $items = array();
  375. $page_nav = new stdClass();
  376. $page_nav->total = 0;
  377. $page_nav->page_total = 0;
  378. $page_nav->base_link_arr = array('MENU_INIT'=>"USERS2_WINDYKACJA_STATUS", 'q'=>$q);
  379. $page_nav->page_limit = 50;
  380. $page_nav->page_nr = V::get('_p', 0, $_REQUEST, 'int');
  381. $page_nav->base_link_arr['_f'] = V::get('_f', '', $_GET);
  382. if ($page_nav->page_nr > 0) {
  383. $page_nav->base_link_arr['_p'] = $page_nav->page_nr;
  384. }
  385. // sortowanie, filtr wyszukiwania
  386. $page_nav->base_link_arr['_oby'] = 'ID';
  387. $page_nav->base_link_arr['_odir'] = 'DESC';
  388. if (($order_by = V::get('_oby', '', $_GET)) != '') {
  389. $page_nav->base_link_arr['_oby'] = $order_by;
  390. }
  391. if (($order_dir = V::get('_odir', '', $_GET)) != '') {
  392. $page_nav->base_link_arr['_odir'] = $order_dir;
  393. }
  394. if (!empty($q)) {
  395. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  396. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  397. $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']);
  398. $page_nav->page_total = count($items);
  399. }
  400. else {
  401. $page_nav->total = WindykacjaStatsModel::get_users_total($q);
  402. $page_nav->last_page_nr = floor($page_nav->total / $page_nav->page_limit);
  403. $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']);
  404. $page_nav->page_total = count($items);
  405. }
  406. WindykacjaView::form($q);
  407. $to_update_total = WindykacjaStatsHelper::get_to_update_total();
  408. if ($to_update_total > 0) {
  409. echo'<p>';
  410. 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>';
  411. echo'</p>';
  412. }
  413. WindykacjaView::items_filters();
  414. if ($page_nav->total > 0) {
  415. WindykacjaView::items($q, $page_nav, $items);
  416. } else {
  417. echo'<p>' . "Brak danych" . '</p>';
  418. }
  419. }
  420. }
  421. class WindykacjaView {
  422. public static function user(&$user) {
  423. $bad_address_task = V::get('bad_address', '', $_POST);
  424. $bad_address_msg = array();
  425. if ($bad_address_task) {
  426. $id_koresp = V::get('ID_KORESP', 0, $_POST, 'int');
  427. if ($id_koresp <= 0) {
  428. $bad_address_msg['error_id_koresp'] = true;
  429. } else {
  430. if ($bad_address_task == 'save') {
  431. if (!WindykacjaStatsHelper::bad_address_save($user, $id_koresp)) {
  432. $bad_address_msg['error'] = true;
  433. } else {
  434. $bad_address_msg['ok'] = true;
  435. }
  436. }
  437. else if ($bad_address_task == 'confirm') {
  438. if (!WindykacjaStatsHelper::bad_address_confirm($user, $id_koresp)) {
  439. $bad_address_msg['error'] = true;
  440. } else {
  441. $bad_address_msg['ok'] = true;
  442. }
  443. }
  444. }
  445. }
  446. $change_status_task = V::get('change_status', '', $_POST);
  447. $change_status_msg = array();
  448. if ($change_status_task) {
  449. if ($change_status_task == 'change') {
  450. $new_status = V::get('new_status', '', $_POST);
  451. $fltr_arr = WindykacjaStatsHelper::get_filters();
  452. if (!array_key_exists($new_status, $fltr_arr)) {
  453. $change_status_msg['error'] = true;
  454. } else {
  455. if (!WindykacjaStatsHelper::change_status_save($user, $new_status)) {
  456. $change_status_msg['error'] = true;
  457. } else {
  458. $change_status_msg['ok'] = true;
  459. }
  460. }
  461. }
  462. }
  463. $set_nr_sprawy_krd_task = V::get('set_nr_sprawy_krd', '', $_POST);
  464. $set_nr_sprawy_krd_msg = array();
  465. if ($set_nr_sprawy_krd_task) {
  466. if ($set_nr_sprawy_krd_task == 'change') {
  467. $nr_sprawy_krd = V::get('nr_sprawy_krd', '', $_POST);
  468. if (!WindykacjaStatsHelper::nr_sprawy_krd_save($user, $nr_sprawy_krd)) {
  469. $set_nr_sprawy_krd_msg['error'] = true;
  470. } else {
  471. $set_nr_sprawy_krd_msg['ok'] = true;
  472. }
  473. }
  474. }
  475. $set_nr_sprawy_sad_task = V::get('set_nr_sprawy_sad', '', $_POST);
  476. $set_nr_sprawy_sad_msg = array();
  477. if ($set_nr_sprawy_sad_task) {
  478. if ($set_nr_sprawy_sad_task == 'change') {
  479. $nr_sprawy_sad = V::get('nr_sprawy_sad', '', $_POST);
  480. if (!WindykacjaStatsHelper::nr_sprawy_sad_save($user, $nr_sprawy_sad)) {
  481. $set_nr_sprawy_sad_msg['error'] = true;
  482. } else {
  483. $set_nr_sprawy_sad_msg['ok'] = true;
  484. }
  485. }
  486. }
  487. $set_nr_sprawy_komornik_task = V::get('set_nr_sprawy_komornik', '', $_POST);
  488. $set_nr_sprawy_komornik_msg = array();
  489. if ($set_nr_sprawy_komornik_task) {
  490. if ($set_nr_sprawy_komornik_task == 'change') {
  491. $nr_sprawy_komornik = V::get('nr_sprawy_komornik', '', $_POST);
  492. if (!WindykacjaStatsHelper::nr_sprawy_komornik_save($user, $nr_sprawy_komornik)) {
  493. $set_nr_sprawy_komornik_msg['error'] = true;
  494. } else {
  495. $set_nr_sprawy_komornik_msg['ok'] = true;
  496. }
  497. }
  498. }
  499. $set_ustalenia_info_task = V::get('set_ustalenia_info', '', $_POST);
  500. $set_ustalenia_info_msg = array();
  501. if ($set_ustalenia_info_task) {
  502. if ($set_ustalenia_info_task == 'change') {
  503. $ustalenia_date = V::get('ustalenia_date', '', $_POST);
  504. $ustalenia_info = V::get('ustalenia_info', '', $_POST);
  505. if (!WindykacjaStatsHelper::ustalenia_info_save($user, $ustalenia_date, $ustalenia_info)) {
  506. $set_ustalenia_info_msg['error'] = true;
  507. } else {
  508. $set_ustalenia_info_msg['ok'] = true;
  509. }
  510. }
  511. }
  512. $dataBlokady = '';
  513. if ($user->STATUS == 9) {
  514. $db = DB::getDB();
  515. $sqlDataBlokadyTest = "
  516. select c.`ID`, c.`STATUS`, h.`STATUS` as h_status, h.`A_RECORD_UPDATE_DATE`, h.`A_RECORD_CREATE_DATE`
  517. from `COMPANIES` c
  518. join `COMPANIES_HIST` h on(h.`ID_USERS2`=c.`ID`)
  519. where (h.`STATUS`='9' or c.`STATUS`='9')
  520. ";
  521. $sqlDataBlokadyTestHasNoDate = "
  522. select c.`ID`, c.`STATUS`
  523. from `COMPANIES` c
  524. where c.`STATUS`='9'
  525. and not exists(select h.`ID`
  526. from `COMPANIES_HIST` h
  527. where h.`ID_USERS2`=c.`ID`
  528. and h.`STATUS`='9'
  529. )
  530. ";
  531. $sqlDataBlokady = "select h.`A_RECORD_UPDATE_DATE`
  532. from `COMPANIES_HIST` h
  533. where h.`ID_USERS2`='{$user->ID_BILLING_USERS}'
  534. and h.`STATUS`='9'
  535. order by h.`ID` desc
  536. limit 1
  537. ";
  538. $res = $db->query($sqlDataBlokady);
  539. if ($r = $db->fetch($res)) {
  540. $dataBlokady = $r->A_RECORD_UPDATE_DATE;
  541. }
  542. }
  543. $company = WindykacjaStatsModel::get_company($user);
  544. $nr_konta = FunkcjeL1::bankowy_formatuj_nrach(FunkcjeL1::bankowy_make_nrach($company->NR_RACH_MASS_PAY, $user->ID_BILLING_USERS, 0));
  545. echo'<h3>';
  546. 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>';
  547. echo ' &raquo; <code style="font-size:normal;color:green;">'."[".$user->id_users."]".'</code>';
  548. echo ' <b>'.$user->P_NAME.' '.$user->P_NAME_SECOND.'</b>';
  549. echo'</h3>';
  550. echo '<table class="" cellspacing="0" cellpadding="0" border="0"><tr><td style="vertical-align:top">';
  551. echo '<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  552. echo '<caption>';
  553. echo "Dane " . (($user->is_firma)? "firmy" : "klienta") . " ";
  554. if ($user->BAD_ADDRESS) {
  555. echo '<form action="" method="POST" style="display:inline">';
  556. echo '<input type="hidden" name="'."bad_address".'" value="'."confirm".'" />';
  557. $js = "if(this.nextSibling.style.display=='none'){this.nextSibling.style.display='block'}else{this.nextSibling.style.display='none'}; return false;";
  558. echo '<input type="button" value="'."popraw adres".'" onclick="'.$js.'" style="margin:1px 2px;padding:0 6px;" />';
  559. echo '<div style="display:none;">';
  560. echo '<label for="ID_KORESP">'."ID Koresp.".'</label>';
  561. echo '<input type="text" name="' . "ID_KORESP" . '" size="5" value="' . "" . '" />';
  562. echo '<input type="submit" value="'."zapisz".'" />';
  563. echo '</div>';
  564. echo '</form>';
  565. } else {
  566. echo '<form action="" method="POST" style="display:inline">';
  567. echo '<input type="hidden" name="'."bad_address".'" value="'."save".'" />';
  568. $js = "if(this.nextSibling.style.display=='none'){this.nextSibling.style.display='block'}else{this.nextSibling.style.display='none'}; return false;";
  569. echo '<input type="button" value="'."zgłoś błędny adres".'" onclick="'.$js.'" style="margin:1px 2px;padding:0 6px;" />';
  570. echo '<div style="display:none;">';
  571. echo '<label for="ID_KORESP">'."ID Koresp.".'</label>';
  572. echo '<input type="text" name="' . "ID_KORESP" . '" size="5" value="' . "" . '" />';
  573. echo '<input type="submit" value="'."zapisz".'" />';
  574. echo '</div>';
  575. echo '</form>';
  576. }
  577. if (!empty($bad_address_msg)) {
  578. if ('id_koresp' == V::get('error', '', $bad_address_msg)) {
  579. echo '<div class="red">'."Podaj poprawny ID Koresp.".'</div>';
  580. } else if (true == V::get('error', false, $bad_address_msg)) {
  581. echo '<div class="red">'."Error!".'</div>';
  582. } else if (true == V::get('ok', false, $bad_address_msg)) {
  583. echo '<div style="color:green">'."Zapisano pomyślnie.".'</div>';
  584. }
  585. }
  586. echo '</caption>';
  587. echo'<tr>';
  588. echo'<th>' . "Adres:" . '</th>';
  589. echo'<td'.(($user->BAD_ADDRESS)? ' style="background-color:#FF7878;"' : '').'>';
  590. echo "ul. ".$user->P_ADDRESS_STREET." ".$user->P_ADDRESS_HOUSE."/".$user->P_ADDRESS_HOME.", ".$user->P_ADDRESS_POST_CODE." ".$user->P_ADDRESS_CITY;
  591. echo'</td>';
  592. echo'</tr>';
  593. ?>
  594. <?php if ($user->P_ADRESS_KORESP_1282) : ?>
  595. <tr>
  596. <th title="Adres do korespondencji">Adres koresp.</th>
  597. <td><?php echo $user->P_ADRESS_KORESP_1282; ?></td>
  598. </tr>
  599. <?php endif; ?>
  600. <?php
  601. echo'<tr>';
  602. echo'<th>' . "Pesel:" . '</th>';
  603. echo'<td>';
  604. if ($user->P_PESEL) {
  605. echo $user->P_PESEL;
  606. } else {
  607. echo '<span style="color:#f00;">'."Brak numeru PESEL!".'</span>';
  608. }
  609. echo'</td>';
  610. echo'</tr>';
  611. echo'<tr>';
  612. echo'<th>' . "Nr telefonu:" . '</th>';
  613. echo'<td>';
  614. if ($user->P_PHONE) {
  615. echo $user->P_PHONE;
  616. } else {
  617. echo '<span style="color:#f00;">'."Brak!".'</span>';
  618. }
  619. echo'</td>';
  620. echo'</tr>';
  621. echo'<tr>';
  622. echo'<th>' . "Nr dowodu:" . '</th>';
  623. echo'<td>';
  624. if ($user->P_OTHER_DOC) {
  625. echo $user->P_OTHER_DOC;
  626. } else {
  627. echo '<span style="color:#f00;">'."Brak!".'</span>';
  628. }
  629. echo'</td>';
  630. echo'</tr>';
  631. echo'<tr>';
  632. echo'<th>' . "e-mail:" . '</th>';
  633. echo'<td>';
  634. if ($user->user_mail_contact) {
  635. echo '<a href="mailto:'.$user->user_mail_contact.'">'.$user->user_mail_contact.'</a>';
  636. } else {
  637. echo '<span style="color:#f00;">'."Brak!".'</span>';
  638. }
  639. echo'</td>';
  640. echo'</tr>';
  641. echo'<tr>';
  642. echo'<th>' . "Klient firmy:" . '</th>';
  643. echo'<td>';
  644. if ($user->BILLING_OWNER == 1) {
  645. echo 'BN - BIALL-NET';
  646. } else if ($user->BILLING_OWNER == 2) {
  647. echo 'ND - NETDAY';
  648. } else {
  649. echo 'nieznany';
  650. }
  651. echo'</td>';
  652. echo'</tr>';
  653. echo'<tr>';
  654. echo'<th>' . "Blokada:" . '</th>';
  655. echo'<td>';
  656. if ($user->STATUS == 9) {
  657. echo '<b style="color:red">' . "ZABLOKOWANY" . '</b>';
  658. if (!empty($dataBlokady)) {
  659. echo '<br>' . "od dnia " . substr($dataBlokady, 0, 10);
  660. }
  661. } else {
  662. echo 'brak blokady';
  663. }
  664. echo'</td>';
  665. echo'</tr>';
  666. ?>
  667. <tr>
  668. <th>Nr konta:</th>
  669. <td><?php echo $nr_konta; ?></td>
  670. </tr>
  671. <?php
  672. echo '</table>';
  673. echo '</td><td>' . "&nbsp;" . '</td><td style="vertical-align:top">';
  674. 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">';
  675. echo '<caption>';
  676. echo "Status windykacji ";
  677. echo '<code style="font-size:x-small; color:#ccc;">' . "(" . $user->WINDYKACJA_ID . ")" . '</code>';
  678. if ($user->A_STATUS_UPDATE_DATE < date("Y-m-d")) {
  679. 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>';
  680. }
  681. // TODO: zmien status klienta - przypisanie do odpowiedniej grupy
  682. echo '</caption>';
  683. echo '<tr>';
  684. echo '<th>' . "status:" . '</th>';
  685. echo '<td>';
  686. echo $user->A_STATUS;
  687. if (V::get('DBG', '', $_GET, 'int') > 0) {// TODO: TEST
  688. if ($user->A_STATUS == 'waiting-krd') {
  689. echo '<br />' . "wezwanie2_DATE: {$user->wezwanie2_DATE}";
  690. $wzw2 = new stdClass();
  691. $wzw2->Y = intval(substr($user->wezwanie2_DATE, 0, 4));
  692. $wzw2->m = intval(substr($user->wezwanie2_DATE, 5, 2));
  693. $wzw2->d = intval(substr($user->wezwanie2_DATE, 8, 2));
  694. echo '<br />' . "wzw2: {$wzw2->Y}-{$wzw2->m}-{$wzw2->d}";
  695. $wzw2->plus_60 = date("Y-m-d", mktime(0,0,0, $wzw2->m, $wzw2->d + 60, $wzw2->Y));
  696. echo '<br />' . "wezwanie2_DATE + 60 dni: {$wzw2->plus_60}";
  697. if ($wzw2->plus_60 < date("Y-m-d")) {
  698. echo '<br />' . "TODO: przenieść do krd";
  699. }
  700. }
  701. }// TODO: TEST
  702. echo ' &nbsp;&nbsp; <form action="" method="POST" style="display:inline">';
  703. echo '<input type="hidden" name="'."change_status".'" value="'."change".'" />';
  704. $fltr_arr = WindykacjaStatsHelper::get_filters();
  705. $fltr_options = array();
  706. foreach ($fltr_arr as $k_status => $v_arr) {
  707. $fltr_options[$k_status] = reset($v_arr);
  708. }
  709. echo '<select name="' . "new_status" . '">';
  710. foreach ($fltr_options as $k_ind => $v_label) {
  711. $sel = ($k_ind == $user->A_STATUS)? ' selected="selected"' : '';
  712. echo '<option value="' . $k_ind . '"' . $sel . '>' . "{$k_ind}: {$v_label}" . '</option>';
  713. }
  714. echo '</select>';
  715. echo '<input type="submit" value="'."zmień".'" />';
  716. echo '</form>';
  717. echo '</td>';
  718. echo '</tr>';
  719. echo '<tr>';
  720. echo '<th>' . "Nr sprawy w krd" . '</th>';
  721. echo '<td>';
  722. echo ' <form action="" method="POST" style="display:inline">';
  723. echo '<input type="hidden" name="'."set_nr_sprawy_krd".'" value="'."change".'" />';
  724. echo '<input type="text" name="'."nr_sprawy_krd".'" value="'.$user->NR_SPRAWY_KRD.'" />';
  725. echo '<input type="submit" value="'."zmień".'" />';
  726. echo '</form>';
  727. echo '</td>';
  728. echo '</tr>';
  729. echo '<tr>';
  730. echo '<th>' . "Nr sprawy w sądzie" . '</th>';
  731. echo '<td>';
  732. echo ' <form action="" method="POST" style="display:inline">';
  733. echo '<input type="hidden" name="'."set_nr_sprawy_sad".'" value="'."change".'" />';
  734. echo '<input type="text" name="'."nr_sprawy_sad".'" value="'.$user->NR_SPRAWY_SAD.'" />';
  735. echo '<input type="submit" value="'."zmień".'" />';
  736. echo '</form>';
  737. echo '</td>';
  738. echo '</tr>';
  739. echo '<tr>';
  740. echo '<th>' . "Nr sprawy u komornika" . '</th>';
  741. echo '<td>';
  742. echo ' <form action="" method="POST" style="display:inline">';
  743. echo '<input type="hidden" name="'."set_nr_sprawy_komornik".'" value="'."change".'" />';
  744. echo '<input type="text" name="'."nr_sprawy_komornik".'" value="'.$user->NR_SPRAWY_KOMORNIK.'" />';
  745. echo '<input type="submit" value="'."zmień".'" />';
  746. echo '</form>';
  747. echo '</td>';
  748. echo '</tr>';
  749. echo '<tr>';
  750. echo '<th>' . "Aktualne ustalenia z klientem" . '</th>';
  751. echo '<td>';
  752. echo ' <form action="" method="POST" style="display:inline">';
  753. echo '<input type="hidden" name="'."set_ustalenia_info".'" value="'."change".'" />';
  754. echo '<textarea style="width:100%" type="text" name="'."ustalenia_info".'">' . $user->L_APPOITMENT_INFO . '</textarea>';
  755. echo '<br />' . "Data: ";
  756. echo '<input type="text" name="'."ustalenia_date".'" value="'.$user->L_APPOITMENT_DATE.'" />';
  757. echo '<input type="submit" value="'."zmień".'" />';
  758. $js = "this.form.ustalenia_info.value=''; this.form.ustalenia_date.value='0000-00-00'; return false;";
  759. echo '<input type="reset" value="'."wyszyść".'" onclick="'.$js.'" />';
  760. echo '</form>';
  761. echo '</td>';
  762. echo '</tr>';
  763. echo '<tr>';
  764. echo '<th>' . "data ostatniej wpłaty:" . '</th>';
  765. echo '<td>';
  766. if ($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00') {
  767. echo $user->LAST_PAY_DATE;
  768. } else {
  769. echo '---';
  770. }
  771. echo '</td>';
  772. echo '</tr>';
  773. echo '<tr>';
  774. echo '<th>' . "data wymagalności ostatniej faktury:" . '</th>';
  775. echo '<td>';
  776. if ($user->PAY_DATE != '0000-00-00') {
  777. echo $user->PAY_DATE;
  778. }
  779. echo '</td>';
  780. echo '</tr>';
  781. echo '<tr>';
  782. echo '<th>' . "data wymagalności pierwszej faktury:" . '</th>';
  783. echo '<td>';
  784. if ($user->PAY_DATE_FIRST_FVAT != '0000-00-00') {
  785. echo $user->PAY_DATE_FIRST_FVAT;
  786. }
  787. echo '</td>';
  788. echo '</tr>';
  789. echo '<tr>';
  790. echo '<th>' . "termin płatności:" . '</th>';
  791. echo '<td>';
  792. if ($user->PAY_TERM != '0000-00-00') {
  793. echo $user->PAY_TERM;
  794. }
  795. echo '</td>';
  796. echo '</tr>';
  797. echo '<tr>';
  798. echo '<th>' . "Przeniesienie do Vectra?:" . '</th>';
  799. echo '<td>';
  800. if ($user->IS_MOVED_TO_VECTRA) {
  801. echo 'TAK';
  802. } else {
  803. echo '<span class="text-muted">NIE</span>';
  804. }
  805. echo '</td>';
  806. echo '</tr>';
  807. echo '</table>';
  808. echo '</td></tr></table>';
  809. // TODO: windykacja_status_info - grupa filtrow do ktorej nalezy klient
  810. Lib::loadClass('CompanyHelper');
  811. $db = DB::getDB();
  812. $comHelper = new CompanyHelper($db);
  813. $usr = $comHelper->getById($user->ID);
  814. $dealsActive = $comHelper->getDealsFull($user->ID, false);
  815. Lib::loadClass('PokazOfertyView');
  816. $pokaz_oferty_view = new PokazOfertyView();
  817. echo $pokaz_oferty_view->print_css();
  818. $pokaz_oferty_view->printServices($usr, $dealsActive);
  819. if(V::get('DBG_ACTIVE_SRV', '', $_GET) > 2){
  820. $activeServicesByType = array();
  821. $db = DB::getDB();
  822. $idUser = $user->ID;
  823. $sql = "
  824. select srv.`ID` as `ID_SERVICES`
  825. , srv.`NAME_LIST_SERVICES`
  826. , A_STATUS_L2_SQL_L1(srv.`ID`) as A_STATUS_CURRENT
  827. from `SERVICES` srv
  828. where srv.`ID_BILLING_USERS`='{$idUser}'
  829. ";
  830. DBG::_(true, true, "sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  831. $res = $db->query($sql);
  832. while ($r = $db->fetch($res)) {
  833. $activeServicesByType[] = $r;
  834. }
  835. DBG::_(true, true, "activeServicesByType", $activeServicesByType, __CLASS__, __FUNCTION__, __LINE__);
  836. $sql = "
  837. select
  838. IF(1 = (
  839. select 1 as hasActiveNET
  840. from `SERVICES` srv
  841. where srv.`ID_BILLING_USERS`='{$idUser}'
  842. and srv.`NAME_LIST_SERVICES`='USERS2'
  843. and 'NORMAL'=A_STATUS_L2_SQL_L1(srv.`ID`)
  844. limit 1
  845. ), 1, 0) as hasActiveNET
  846. ,
  847. IF(1 = (
  848. select 1 as hasActiveTV
  849. from `SERVICES` srv
  850. where srv.`ID_BILLING_USERS`='{$idUser}'
  851. and srv.`NAME_LIST_SERVICES`='TV'
  852. and 'NORMAL'=A_STATUS_L2_SQL_L1(srv.`ID`)
  853. limit 1
  854. ), 1, 0) as hasActiveTV
  855. ";
  856. DBG::_(true, true, "sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  857. $activeServicesByType = array();
  858. $res = $db->query($sql);
  859. while ($r = $db->fetch($res)) {
  860. $activeServicesByType = $r;
  861. }
  862. DBG::_(true, true, "activeServicesByType", $activeServicesByType, __CLASS__, __FUNCTION__, __LINE__);
  863. }
  864. // aktualny status klienta
  865. echo'<div>';
  866. if ($user->A_STATUS_UPDATE_DATE < date("Y-m-d")) {
  867. }
  868. else {
  869. switch ($user->A_STATUS) {
  870. case 'WAITING': {
  871. echo'<p>' . "Status OK" . '</p>';
  872. }
  873. break;
  874. case 'wezwanie1': {
  875. $default_PAY_TERM = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  876. $frm_errors = array();
  877. $frm_msgs = array();
  878. $frm = array();
  879. $frm['wezwanie1_DATE'] = date("Y-m-d");
  880. $frm['PAY_TERM'] = V::get('PAY_TERM', $default_PAY_TERM, $_POST);
  881. $frm['ID_PROJ'] = V::get('ID_PROJ', 0, $_POST, 'int');
  882. if ('set_wezwanie' == V::get('user_task', '', $_POST)) {
  883. if ($frm['ID_PROJ'] == 0) {
  884. $frm_errors[] = "Brak numeru ID Projketu";
  885. }
  886. if (empty($frm_errors)) {
  887. $ret = WindykacjaStatsHelper::update_user($user, $frm);
  888. if ($ret) {
  889. $frm_msgs[] = "Status klienta został zaktualizowany";
  890. } else {
  891. $frm_errors[] = "Status klienta nie został zaktualizowany";
  892. }
  893. }
  894. }
  895. echo '<div class="box box-blue" style="margin:6px 0;">';
  896. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO <= -0.05) {
  897. echo "Saldo klienta: " . '<b style="color:#f00">' . "{$user->PAY_SALDO} zł" . '</b>' . " ({$user->PAY_FVAT} niezapłaconych faktur)" . '<br />';
  898. echo'<br />';
  899. }
  900. echo '<b style="color:#0B0B8E">'."Wysłać wezwanie do zapłaty".'</b>'.'<br />';
  901. if (!empty($frm_errors)) {
  902. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  903. }
  904. if (!empty($frm_msgs)) {
  905. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  906. }
  907. echo'<form action="" method="post">';
  908. echo'<input type="hidden" name="'."user_task".'" value="'."set_wezwanie".'" />';
  909. echo "Data płatności: ";
  910. echo'<input type="text" name="'."PAY_TERM".'" value="'.$frm['PAY_TERM'].'" />';
  911. echo " ID Projektu (np. 335 - klienci BIALL-NET lub 4956 - klienci Vectra): ";
  912. echo'<input type="text" name="'."ID_PROJ".'" value="'.$frm['ID_PROJ'].'" />';
  913. echo'<input type="submit" value="'."Zapisz".'" />';
  914. echo'</form>';
  915. if ($user->wezwanie1_DATE != '0000-00-00') {
  916. echo'<br />';
  917. $ico_print = '<img src="icon/print.gif" height="16" />';
  918. 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>';
  919. }
  920. echo '</div>';// .box-blue
  921. }
  922. break;
  923. case 'waiting-wezwanie2': {// TODO: only auto update ?
  924. echo '<div class="box box-blue" style="margin:6px 0;">';
  925. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO <= -0.05) {
  926. echo "Saldo klienta: " . '<b style="color:#f00">' . $user->PAY_SALDO . " zł" . '</b>' . " (" . $user->PAY_FVAT ." niezapłaconych faktur)" . '<br />';
  927. echo'<br />';
  928. }
  929. echo '<b style="color:#0B0B8E">'."Oczekiwanie na uzbieranie kwoty 300zł (firmy 500zł)".'</b>'.'<br />';
  930. if (!empty($frm_errors)) {
  931. echo'<p style="color:#f00">';
  932. echo implode('<br />', $frm_errors);
  933. echo'</p>';
  934. }
  935. echo'<form action="" method="post">';
  936. // echo'<input type="hidden" name="'."user_task".'" value="'."set_".'" />';
  937. // echo'<input type="submit" value="'."Zapisz".'" />';
  938. echo'</form>';
  939. if ($user->wezwanie1_DATE != '0000-00-00') {
  940. echo'<br />';
  941. $ico_print = '<img src="icon/print.gif" height="16" />';
  942. 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>';
  943. }
  944. echo '</div>';// .box-blue
  945. }
  946. break;
  947. case 'wezwanie2': {
  948. $default_PAY_TERM = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  949. $frm_msgs = array();
  950. $frm_errors = array();
  951. $frm = array();
  952. $frm['wezwanie2_DATE'] = date("Y-m-d");
  953. $frm['PAY_TERM'] = V::get('PAY_TERM', $default_PAY_TERM, $_POST);
  954. $frm['ID_PROJ'] = V::get('ID_PROJ', 0, $_POST, 'int');
  955. if ('set_wezwanie2' == V::get('user_task', '', $_POST)) {
  956. if ($frm['ID_PROJ'] == 0) {
  957. $frm_errors[] = "Brak numeru ID korespondencji";
  958. }
  959. if (empty($frm_errors)) {
  960. $ret = WindykacjaStatsHelper::update_user($user, $frm);
  961. if ($ret) {
  962. $frm_msgs[] = "Status klienta został zaktualizowany";
  963. } else {
  964. $frm_errors[] = "Status klienta nie został zaktualizowany";
  965. }
  966. }
  967. }
  968. echo '<div class="box box-blue" style="margin:6px 0;border-color:#666;">';
  969. if ($user->PAY_FVAT > 0 && $user->PAY_SALDO <= -0.05) {
  970. echo "Saldo klienta: " . '<b style="color:#f00">' . "{$user->PAY_SALDO} zł" . '</b>' . " ({$user->PAY_FVAT} niezapłaconych faktur)" . '<br />';
  971. echo'<br />';
  972. }
  973. echo '<b style="color:#0B0B8E">'."Wysłać ostateczne wezwanie do zapłaty".'</b>'.'<br />';
  974. if (!empty($frm_errors)) {
  975. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  976. }
  977. if (!empty($frm_msgs)) {
  978. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  979. }
  980. echo'<form action="" method="post">';
  981. echo'<input type="hidden" name="'."user_task".'" value="'."set_wezwanie2".'" />';
  982. echo "Data płatności: ";
  983. echo'<input type="text" name="'."PAY_TERM".'" value="'.$frm['PAY_TERM'].'" />';
  984. echo " ID Projektu: ";
  985. echo'<input type="text" name="'."ID_PROJ".'" value="'.$frm['ID_PROJ'].'" />';
  986. echo'<input type="submit" value="'."Zapisz".'" />';
  987. echo'</form>';
  988. if ($user->wezwanie2_DATE != '0000-00-00') {
  989. echo'<br />';
  990. $ico_print = '<img src="icon/print.gif" height="16" />';
  991. 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>';
  992. }
  993. echo '</div>';// .box-blue
  994. }
  995. break;
  996. case 'waiting-krd': {
  997. if ($user->wezwanie2_DATE != '0000-00-00') {
  998. echo'<br />';
  999. $ico_print = '<img src="icon/print.gif" height="16" />';
  1000. 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>';
  1001. }
  1002. }
  1003. break;
  1004. default:
  1005. echo'<p>' . "TODO: (".$user->A_STATUS.")" . '</p>';
  1006. }
  1007. }
  1008. //if ($user->BA_TIMESTAMP) {
  1009. // echo "Stan wzajemnych rozrachunków:";
  1010. // 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>";
  1011. // echo", i jest to stan na dzień ".date("Y-m-d",$user->BA_TIMESTAMP)." ";
  1012. //}
  1013. // phone contact
  1014. $phone_status_info = WindykacjaStatsHelper::get_phone_status_info($user);
  1015. $sms_status_info = WindykacjaStatsHelper::get_sms_status_info($user);
  1016. $mail_status_info = WindykacjaStatsHelper::get_mail_status_info($user);
  1017. $frm_errors = array();
  1018. $frm_msgs = array();
  1019. if (1 == V::get('phone_contact_save', 0, $_POST, 'int')) {
  1020. if ('' == ($phone_status = V::get('phone_status', '', $_POST))) {
  1021. $frm_errors[] = "Nic nie zaznaczono!";
  1022. } else {
  1023. if (!array_key_exists($phone_status, $phone_status_info)) {
  1024. $frm_errors[] = "Nieprawidłowa wartość!";
  1025. } else {
  1026. $ret = WindykacjaStatsHelper::update_phone_status($user, $phone_status);
  1027. if ($ret) {
  1028. $frm_msgs[] = "Dane zapisano pomyślnie";
  1029. } else {
  1030. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  1031. }
  1032. }
  1033. }
  1034. }
  1035. if (1 == V::get('sms_contact_save', 0, $_POST, 'int')) {
  1036. if ('' == ($sms_status = V::get('sms_status', '', $_POST))) {
  1037. $frm_errors[] = "Nic nie zaznaczono!";
  1038. } else {
  1039. if (!array_key_exists($sms_status, $sms_status_info)) {
  1040. $frm_errors[] = "Nieprawidłowa wartość!";
  1041. } else {
  1042. $ret = WindykacjaStatsHelper::update_sms_status($user, $sms_status);
  1043. if ($ret) {
  1044. $frm_msgs[] = "Dane zapisano pomyślnie";
  1045. } else {
  1046. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  1047. }
  1048. }
  1049. }
  1050. }
  1051. if (1 == V::get('mail_contact_save', 0, $_POST, 'int')) {
  1052. if ('' == ($mail_status = V::get('mail_status', '', $_POST))) {
  1053. $frm_errors[] = "Nic nie zaznaczono!";
  1054. } else {
  1055. if (!array_key_exists($mail_status, $mail_status_info)) {
  1056. $frm_errors[] = "Nieprawidłowa wartość!";
  1057. } else {
  1058. $ret = WindykacjaStatsHelper::update_mail_status($user, $mail_status);
  1059. if ($ret) {
  1060. $frm_msgs[] = "Dane zapisano pomyślnie";
  1061. } else {
  1062. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  1063. }
  1064. }
  1065. }
  1066. }
  1067. // add old id_koresp to hist (events)
  1068. if (1 == V::get('contact_add_id_koresp_save', 0, $_POST, 'int')) {
  1069. if (($id_koresp = V::get('id_koresp', '', $_POST, 'int')) <= 0) {
  1070. $frm_errors[] = "Nie podano numeru korespondencji!";
  1071. } else {
  1072. $koresp_type = V::get('koresp_type', '', $_POST);
  1073. $ret = WindykacjaStatsHelper::update_old_id_koresp($user, $id_koresp, $koresp_type);
  1074. if ($ret) {
  1075. $frm_msgs[] = "Dane zapisano pomyślnie";
  1076. } else {
  1077. $frm_errors[] = "Wystąpił błąd podczas zapisu danych";
  1078. }
  1079. }
  1080. }
  1081. ?>
  1082. <script type="text/javascript">
  1083. function frm_kontakt_phone_submit_callback(frm){
  1084. var len=frm.phone_status.length;
  1085. var val='';
  1086. for(var i=0; i < len; i++){
  1087. if(frm.phone_status[i].checked){
  1088. var val = frm.phone_status[i].value;
  1089. }
  1090. }
  1091. if (val!='') {
  1092. return true;
  1093. } else {
  1094. alert('Nic nie zaznaczono.');
  1095. }
  1096. return false;
  1097. }
  1098. function frm_kontakt_sms_submit_callback(frm){
  1099. var len=frm.sms_status.length;
  1100. var val='';
  1101. if (!len && frm.sms_status.type && frm.sms_status.type == 'radio') {
  1102. if (frm.sms_status.checked) {
  1103. val = frm.sms_status[i].value;
  1104. }
  1105. } else {
  1106. for(var i=0; i < len; i++){
  1107. if(frm.sms_status[i].checked){
  1108. var val = frm.sms_status[i].value;
  1109. }
  1110. }
  1111. }
  1112. if (val!='') {
  1113. return true;
  1114. } else {
  1115. alert('Nic nie zaznaczono.');
  1116. }
  1117. return false;
  1118. }
  1119. function frm_kontakt_add_id_koresp(frm){
  1120. var val=frm.id_koresp.value;
  1121. if (val!='') {
  1122. return true;
  1123. } else {
  1124. alert('Nie podano numeru korespondencji.');
  1125. }
  1126. return false;
  1127. }
  1128. </script>
  1129. <div class="box" style="margin:6px 0;border-color:#666;">
  1130. <?php if (!empty($frm_errors)) {
  1131. echo'<p style="color:#f00">' . implode('<br />', $frm_errors) . '</p>';
  1132. }
  1133. if (!empty($frm_msgs)) {
  1134. echo'<p style="color:green">' . implode('<br />', $frm_msgs) . '</p>';
  1135. }
  1136. ?>
  1137. <table cellspacing="0" cellpadding="0" border="0" class="tbl-td-top"><tr>
  1138. <td style="padding:0 20px 0 0;color:blue;">
  1139. <img src="icon/phone.png" alt="tel" />
  1140. kontakt z klientem
  1141. </td>
  1142. <td style="padding:0 5px;text-align:right">
  1143. <nobr>Co ustalono:</nobr>
  1144. </td>
  1145. <td style="min-width:300px;">
  1146. <form action="" method="post" onsubmit="return frm_kontakt_phone_submit_callback(this);">
  1147. <div id="kontakt-phone">
  1148. <input type="hidden" name="phone_contact_save" value="1" />
  1149. <?php foreach ($phone_status_info as $k_type => $v_info) {
  1150. echo '<input type="radio" name="'."phone_status".'" value="' . $k_type . '" />'; echo " " . $v_info['label'] . " " . $v_info['date'] . '<br />';
  1151. } ?>
  1152. </div>
  1153. <input type="submit" value="zapisz" />
  1154. </form>
  1155. </td>
  1156. <td style="width:40px">
  1157. </td>
  1158. <td>
  1159. <?php if (!empty($sms_status_info)) : ?>
  1160. <form action="" method="post" onsubmit="return frm_kontakt_sms_submit_callback(this);">
  1161. <div id="kontakt-sms">
  1162. <input type="hidden" name="sms_contact_save" value="1" />
  1163. <?php foreach ($sms_status_info as $k_type => $v_info) {
  1164. echo '<input type="radio" name="'."sms_status".'" value="' . $k_type . '" />'; echo " {$v_info['label']}:<br> {$v_info['msg']}" . '<br />';
  1165. } ?>
  1166. </div>
  1167. <input type="submit" value="wyślij" />
  1168. </form>
  1169. <?php endif; ?>
  1170. </td>
  1171. <td style="width:40px">
  1172. </td>
  1173. <td>
  1174. <?php if (!empty($mail_status_info)) : ?>
  1175. <form action="" method="post" onsubmit="return frm_kontakt_mail_submit_callback(this);">
  1176. <div id="kontakt-mail">
  1177. <input type="hidden" name="mail_contact_save" value="1" />
  1178. <?php foreach ($mail_status_info as $k_type => $v_info) {
  1179. echo '<input type="radio" name="'."mail_status".'" value="' . $k_type . '" />'; echo " {$v_info['label']}:<br> {$v_info['msg']}" . '<br />';
  1180. } ?>
  1181. </div>
  1182. <input type="submit" value="wyślij" />
  1183. </form>
  1184. <?php endif; ?>
  1185. </td>
  1186. </tr></table>
  1187. </div>
  1188. <div class="box" style="margin:6px 0;border-color:#666;">
  1189. <form action="" method="post" onsubmit="return frm_kontakt_add_id_koresp(this);">
  1190. <input type="hidden" name="contact_add_id_koresp_save" value="1" />
  1191. Dodaj korespondencję z klientem - ID_KORESP:
  1192. <input type="text" name="id_koresp" value="" class="i" />
  1193. <input type="submit" value="zapisz" />
  1194. </form>
  1195. </div>
  1196. <div class="box" style="margin:6px 0;border-color:#666;">
  1197. <?php
  1198. $ico_print = '<img src="icon/print.gif" height="16" />';
  1199. 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>';
  1200. ?>
  1201. </div>
  1202. </div>
  1203. <?php
  1204. }
  1205. public static function items_filters() {
  1206. $filter_arr = WindykacjaStatsHelper::get_filters();
  1207. $filter_selected = WindykacjaStatsHelper::get_filter_selected();
  1208. $status_cnt = WindykacjaStatsHelper::get_status_count();// {cnt, suma_zaleglosci}
  1209. // pomin filtry
  1210. unset($filter_arr['15']);
  1211. unset($filter_arr['blokada']);
  1212. unset($filter_arr['WAITING']);
  1213. $sub_filters = array('tel1', 'bad_address', '3 m-ce przed', 'po-terminie', 'has_nr_sad', 'has_nr_komornik', 'has_ustalenia', 'sad_and_komornik', 'sad_bez_komornik', 'isMovedToVectra');
  1214. $sub_filters_arr = array();
  1215. foreach ($sub_filters as $v_filter_name) {
  1216. if (array_key_exists($v_filter_name, $filter_arr)) {
  1217. $sub_filters_arr[$v_filter_name] = $filter_arr[$v_filter_name];
  1218. unset($filter_arr[$v_filter_name]);
  1219. }
  1220. }
  1221. $zewn_filters = array('waiting-sad', 'docs-in-sad', 'sad');
  1222. $zewn_filters_arr = array();
  1223. foreach ($zewn_filters as $v_filter_name) {
  1224. if (array_key_exists($v_filter_name, $filter_arr)) {
  1225. $zewn_filters_arr[$v_filter_name] = $filter_arr[$v_filter_name];
  1226. unset($filter_arr[$v_filter_name]);
  1227. }
  1228. }
  1229. echo'<table cellspacing="0" cellpadding="0" border="1" style="background:#ddd;border-color:#666;"><tr><td style="vertical-align:top">';
  1230. if (!empty($filter_selected)) {
  1231. echo'<a href="' . "??MENU_INIT=USERS2_WINDYKACJA_STATUS" . '" title="'."Kasuj filtry".'">' . '<img src="icon/del.png" height="16" alt="'."Kasuj filtry".'" />' . '</a>';
  1232. echo '</td><td>';
  1233. }
  1234. echo'<table class="tbl-view historia-platnosci-filters" cellspacing="0" cellpadding="0" border="1">';
  1235. echo'<thead>';
  1236. echo'<tr>';
  1237. foreach ($filter_arr as $k => $v_arr) {
  1238. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1239. echo'<td' . $cls . '>';
  1240. if ($desc = V::get('desc', '', $v_arr)) {
  1241. echo '<span title="' . end($desc) . '">' . reset($desc) . '</span>';
  1242. }
  1243. echo'</td>';
  1244. }
  1245. if (!empty($zewn_filters_arr)) {
  1246. echo '<td colspan="'.count($zewn_filters_arr).'" style="background:#f00;color:#fff;font-weight:bold;">' . "Windykacja zewnętrzna" . '</td>';
  1247. }
  1248. echo'</tr>';
  1249. echo'<tr>';
  1250. foreach ($filter_arr as $k => $v_arr) {
  1251. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1252. echo'<td' . $cls . '>';
  1253. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  1254. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  1255. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1256. $stat_cnt = 0;
  1257. if (array_key_exists($k, $status_cnt)) {
  1258. $stat_cnt = $status_cnt[$k]->cnt;
  1259. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1260. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  1261. echo '<br />' . '<span style="color:#f00;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  1262. } else {
  1263. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1264. }
  1265. echo'</td>';
  1266. }
  1267. if (!empty($zewn_filters_arr)) {
  1268. foreach ($zewn_filters_arr as $k => $v_arr) {
  1269. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1270. echo'<td' . $cls . '>';
  1271. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  1272. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  1273. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1274. $stat_cnt = 0;
  1275. if (array_key_exists($k, $status_cnt)) {
  1276. $stat_cnt = $status_cnt[$k]->cnt;
  1277. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1278. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  1279. echo '<br />' . '<span style="color:#f00;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  1280. } else {
  1281. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1282. }
  1283. echo'</td>';
  1284. }
  1285. }
  1286. echo'</tr>';
  1287. echo'</thead>';
  1288. echo'</table>';
  1289. if (!empty($sub_filters_arr)) {
  1290. echo '<table class="tbl-view historia-platnosci-subfilters" cellspacing="0" cellpadding="0" border="1">';
  1291. echo '<thead><tr>';
  1292. foreach ($sub_filters_arr as $k => $v_arr) {
  1293. $cls = ($filter_selected == $k)? ' class="selected"' : '';
  1294. echo'<td' . $cls . '>';
  1295. echo '<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&_f=" . $k . '">' . reset($v_arr) . '</a>';
  1296. //$stat_cnt = V::get($k, 0, $status_cnt, 'int');
  1297. //echo ' <span style="color:#f00;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1298. $stat_cnt = 0;
  1299. if (array_key_exists($k, $status_cnt)) {
  1300. $stat_cnt = $status_cnt[$k]->cnt;
  1301. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1302. $stat_saldo = number_format($status_cnt[$k]->suma_zaleglosci, 2, ',', ' ');
  1303. echo '<br />' . '<span style="color:#000;" title="' . $stat_saldo . " zł zagdłużenia" . '">' . $stat_saldo . '</span>';
  1304. } else {
  1305. echo ' <span style="color:#000;" title="' . $stat_cnt . " klinetów" . '">' . "(" . $stat_cnt . ")" . '</span>';
  1306. }
  1307. echo'</td>';
  1308. }
  1309. echo '</tr></thead>';
  1310. echo '</table>';
  1311. }
  1312. echo '</td></tr></table>';
  1313. echo'<br />';
  1314. }
  1315. public static function items($q, &$page_nav, &$items) {
  1316. $page_nav->links = array();
  1317. $out_link_arr = V::copy($page_nav->base_link_arr);
  1318. $out_link_arr['_p'] = 0;
  1319. $out_link = V::make_link('', $out_link_arr);
  1320. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Pierwsza strona".'">'."|&lt;&lt;".'</a>';
  1321. if ($page_nav->page_nr > 0) {
  1322. $out_link_arr = V::copy($page_nav->base_link_arr);
  1323. $out_link_arr['_p'] = $page_nav->page_nr - 1;
  1324. $out_link = V::make_link('', $out_link_arr);
  1325. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Poprzednia strona".'">'."&lt;&lt; -{$page_nav->page_limit}".'</a>';
  1326. } else {
  1327. $page_nav->links[] = " &lt;&lt; ";
  1328. }
  1329. $page_nav->links[] = '<span>'.($page_nav->page_nr * $page_nav->page_limit).'</span>';
  1330. $page_nav->links[] = '<span title="'."Znaleziono ".$page_nav->total." rekordów".'">'."({$page_nav->total}) ".'</span>';
  1331. $out_link_arr = V::copy($page_nav->base_link_arr);
  1332. $out_link_arr['_p'] = $page_nav->page_nr + 1;
  1333. $out_link = V::make_link('', $out_link_arr);
  1334. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Nastepna strona".'">'."+{$page_nav->page_limit} &gt;&gt;".'</a>';
  1335. $out_link_arr = V::copy($page_nav->base_link_arr);
  1336. $out_link_arr['_p'] = $page_nav->last_page_nr;
  1337. $out_link = V::make_link('', $out_link_arr);
  1338. $page_nav->links[] = '<a href="' . $out_link . '" title="'."Ostatnia strona".'">'."&gt;&gt;|".'</a>';
  1339. $page_nav_out = '<div class="tbl-page-nav">' . implode(" ", $page_nav->links);
  1340. $out_link_arr = V::copy($page_nav->base_link_arr);
  1341. $out_link_arr['task'] = 'export_csv';
  1342. $out_link_arr['HEADER_NOT_INIT'] = 'YES';
  1343. $out_link = V::make_link('', $out_link_arr);
  1344. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">export csv</a>';
  1345. $out_link_arr = V::copy($page_nav->base_link_arr);
  1346. $out_link_arr['task'] = 'send_mass_mail';
  1347. $out_link = V::make_link('', $out_link_arr);
  1348. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">send mail</a>';
  1349. $out_link_arr = V::copy($page_nav->base_link_arr);
  1350. $out_link_arr['task'] = 'send_mass_sms';
  1351. $out_link = V::make_link('', $out_link_arr);
  1352. $page_nav_out .= ' <a style="margin:0 0 0 20px;" href="' . $out_link . '" target="_blank">send sms</a>';
  1353. $page_nav_out .= '</div>';
  1354. if (empty($items)) {
  1355. echo'<p style="color:red">'."Brak danych".'</p>';
  1356. return;
  1357. }
  1358. echo $page_nav_out;
  1359. $cols_order_by = WindykacjaStatsModel::get_order_by_fields();
  1360. $cols = array();
  1361. $cols['ID_BILLING_USERS'] = array('label'=>'Nr klienta', 'title'=>'ID_BILLING_USERS');
  1362. $cols['is_firma'] = array('label'=>'F', 'title'=>'is_firma: Firma 1 - tak, 0 nie');
  1363. $cols['BILLING_OWNER'] = array('label'=>'COM', 'title'=>'BILLING_OWNER: Klient firmy 1 - BIALL-NET, 2 - NETDAY');
  1364. $cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
  1365. $cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
  1366. $cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
  1367. $cols['P_ADDRESS_Koresp'] = array('label'=>'adres koresp.', 'title'=>'Adres do korespondencji');
  1368. $cols['P_PHONE'] = array('label'=>'nr telefonu', 'title'=>'P_PHONE');
  1369. $cols['user_mail_contact'] = array('label'=>'adres e-mail', 'title'=>'user_mail_contact');
  1370. $cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
  1371. $cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
  1372. $cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
  1373. $cols['PAY_SALDO_30_DNI'] = array('label'=>'saldo 30 dni', 'title'=>'Saldo bez faktur z terminem płatności < 30 dni');
  1374. $cols['PAY_SALDO_ISSUED'] = array('label'=>'saldo wystawione', 'title'=>'Saldo wg daty wystawienia faktur');
  1375. $cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
  1376. $cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności<br> pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
  1377. $cols['PAY_DATE'] = array('label'=>'data wymagalności<br> ostatniej faktury', 'title'=>'PAY_DATE');
  1378. $cols['LAST_FVAT_VALUE'] = array('label'=>'kwota ostatniej faktury', 'title'=>'LAST_FVAT_VALUE');
  1379. $cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
  1380. $cols['LAST_PAY_VALUE'] = array('label'=>'kwota ostatniej wpłaty', 'title'=>'LAST_PAY_VALUE');
  1381. $cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
  1382. $cols['IS_MOVED_TO_VECTRA'] = array('label'=>'Przeniesienie do Vectra?', 'title'=>'IS_MOVED_TO_VECTRA');
  1383. $cols['HAS_ACTIVE_NET'] = array('label'=>'NET', 'title'=>'Aktywne usługi NET');
  1384. $cols['HAS_ACTIVE_TV'] = array('label'=>'TV', 'title'=>'Aktywne uslugi TV');
  1385. echo'<table class="tbl-view historia-platnosci" border="1" cellspacing="0" cellpaddin="0">';
  1386. echo'<thead>';
  1387. echo'<tr>';
  1388. foreach ($cols as $k_field => $v_params) {
  1389. echo'<th' . ((!empty($v_params['title'])) ? ' title="' . $v_params['title'] . '"' : '') . '>';
  1390. echo $v_params['label'];
  1391. if (in_array($k_field, $cols_order_by)) {
  1392. $sel_oby = (isset($page_nav->base_link_arr['_oby']))? $page_nav->base_link_arr['_oby'] : '';
  1393. $sel_odir = 'DESC';
  1394. if ($k_field == $sel_oby) {
  1395. $sel_odir = (isset($page_nav->base_link_arr['_odir']))? $page_nav->base_link_arr['_odir'] : '';
  1396. $sel_odir = ($sel_odir == 'ASC')? 'ASC' : 'DESC';
  1397. }
  1398. $out_link_arr = V::copy($page_nav->base_link_arr);
  1399. $out_link_arr['_p'] = 0;
  1400. $out_link_arr['_oby'] = $k_field;
  1401. $out_link_arr['_odir'] = ($sel_odir == 'DESC')? 'ASC' : 'DESC';
  1402. $out_link = V::make_link('', $out_link_arr);
  1403. echo ' <a style="' . (($k_field == $sel_oby)? 'color:red;' : '') . 'text-decoration:none" href="' . $out_link . '">' . (($sel_odir == 'DESC')? 'v' : '^') . '</a>';
  1404. }
  1405. echo '</th>';
  1406. }
  1407. echo'</tr>';
  1408. echo'</thead>';
  1409. echo'<tbody>';
  1410. $t = 0;
  1411. foreach ($items as $k_id => $user) {
  1412. echo'<tr class="row-'.($t = 1 - $t).'">';
  1413. echo'<td>';
  1414. echo'<nobr>';
  1415. $out_link_arr = V::copy($page_nav->base_link_arr);
  1416. $out_link_arr['_user_id'] = $k_id;
  1417. $out_link = V::make_link('', $out_link_arr);
  1418. echo '<a href="' . $out_link . '">'.'<img src="icon/edit.png" height="16" alt="Edit">'.'</a>';
  1419. echo " ";
  1420. echo '<a href="' . $out_link . '">'.$k_id.'</a>';
  1421. echo'</nobr>';
  1422. echo'</td>';
  1423. echo '<td>';
  1424. echo $user->is_firma;
  1425. echo '</td>';
  1426. echo '<td>';
  1427. if ($user->BILLING_OWNER == 1) {
  1428. echo '<span title="' . "BIALL-NET" . '">' . 'BN' . '</span>';
  1429. } else if ($user->BILLING_OWNER == 2) {
  1430. echo '<span title="' . "NETDAY" . '">' . 'ND' . '</span>';
  1431. } else {
  1432. echo '0';
  1433. }
  1434. echo '</td>';
  1435. echo '<td>';
  1436. if ($user->STATUS == 9) {
  1437. echo '<b style="color:red" title="' . "ZABLOKOWANY" . '">' . "Z" . '</b>';
  1438. } else {
  1439. echo '<em style="color:silver" title="' . "brak blokady" . '">' . "0" . '</em>';
  1440. }
  1441. echo '</td>';
  1442. echo'<td style="white-space:nowrap;">';
  1443. $cell_out = $user->P_NAME.' '.$user->P_NAME_SECOND;
  1444. echo '<b title="' . $cell_out . '">' . ((strlen($cell_out) > 30)? substr($cell_out, 0, 30) . ' ...' : $cell_out) . '</b>';
  1445. echo'</td>';
  1446. echo'<td style="white-space:nowrap;'.(($user->BAD_ADDRESS)? 'background-color:#FF7878;' : '').'">';
  1447. $cell_out = "ul. " . $user->P_ADDRESS_STREET . " " . $user->P_ADDRESS_HOUSE . "/" . $user->P_ADDRESS_HOME . ", " . $user->P_ADDRESS_POST_CODE . " " . $user->P_ADDRESS_CITY;
  1448. 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>';
  1449. echo'</td>';
  1450. ?>
  1451. <?php if ($user->P_ADRESS_KORESP_1282) : ?>
  1452. <td title="Adres do korespondencji: <?php echo $user->P_ADRESS_KORESP_1282; ?>">
  1453. <?php echo $user->P_ADRESS_KORESP_1282; ?>
  1454. </td>
  1455. <?php else: ?>
  1456. <td></td>
  1457. <?php endif; ?>
  1458. <?php
  1459. echo '<td>' . $user->P_PHONE . '</td>';
  1460. echo '<td>' . $user->user_mail_contact . '</td>';
  1461. echo'<td>';
  1462. echo '<nobr>';
  1463. switch ($user->A_STATUS) {
  1464. case 'WAITING':
  1465. echo '<span style="color:#666;">' . $user->A_STATUS . '</span>';
  1466. break;
  1467. default:
  1468. echo $user->A_STATUS;
  1469. }
  1470. echo '</nobr>';
  1471. echo'</td>';
  1472. echo'<td>';
  1473. if ($user->A_STATUS_UPDATE_DATE != '0000-00-00') {
  1474. echo $user->A_STATUS_UPDATE_DATE;
  1475. } else {
  1476. echo '<span style="color:#666;">' . $user->A_STATUS_UPDATE_DATE . '</span>';
  1477. }
  1478. echo'</td>';
  1479. echo'<td>';
  1480. echo '<nobr>';
  1481. if ($user->PAY_SALDO != 0) {
  1482. $col = ($user->PAY_SALDO > 0)? '#333' : '#f00';
  1483. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO} zł" . '</span>';
  1484. } else {
  1485. echo'<span style="color:#666">' . "0" . '</span>';
  1486. }
  1487. echo '</nobr>';
  1488. echo'</td>';
  1489. echo'<td>';
  1490. echo '<nobr>';
  1491. if ($user->PAY_SALDO_30_DNI != 0) {
  1492. $col = ($user->PAY_SALDO_30_DNI > 0)? '#333' : '#f00';
  1493. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO_30_DNI} zł" . '</span>';
  1494. } else {
  1495. echo'<span style="color:#666">' . "0" . '</span>';
  1496. }
  1497. echo '</nobr>';
  1498. echo'</td>';
  1499. echo'<td>';
  1500. echo '<nobr>';
  1501. if ($user->PAY_SALDO_ISSUED != 0) {
  1502. $col = ($user->PAY_SALDO_ISSUED > 0)? '#333' : '#f00';
  1503. echo '<span style="color:' . $col . '">' . "{$user->PAY_SALDO_ISSUED} zł" . '</span>';
  1504. } else {
  1505. echo'<span style="color:#666">' . "0" . '</span>';
  1506. }
  1507. echo '</nobr>';
  1508. echo'</td>';
  1509. echo'<td>';
  1510. if ($user->PAY_FVAT > 0) {
  1511. $st = ($user->PAY_FVAT > 1)? ' style="color:#f00"' : '';
  1512. echo' <span title="' . "{$user->PAY_FVAT} nieopłaconych faktur" . '"'.$st.'>' . $user->PAY_FVAT . '</span>';
  1513. } else {
  1514. echo $user->PAY_FVAT;
  1515. }
  1516. echo'</td>';
  1517. echo'<td>';
  1518. if ($user->PAY_DATE_FIRST_FVAT != '0000-00-00') {
  1519. echo $user->PAY_DATE_FIRST_FVAT;
  1520. }
  1521. echo'</td>';
  1522. echo'<td>';
  1523. if ($user->PAY_DATE != '0000-00-00') {
  1524. echo $user->PAY_DATE;
  1525. }
  1526. echo'</td>';
  1527. echo'<td>';
  1528. echo $user->LAST_FVAT_VALUE;
  1529. echo'</td>';
  1530. echo'<td>';
  1531. if ($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00') {
  1532. echo $user->LAST_PAY_DATE;
  1533. } else {
  1534. echo '---';
  1535. }
  1536. echo'</td>';
  1537. echo'<td>';
  1538. echo $user->LAST_PAY_VALUE;
  1539. echo'</td>';
  1540. echo'<td>';
  1541. if ($user->PAY_TERM != '0000-00-00') {
  1542. echo $user->PAY_TERM;
  1543. }
  1544. echo'</td>';
  1545. echo'<td>';
  1546. if ($user->IS_MOVED_TO_VECTRA) {
  1547. echo 'TAK';
  1548. } else {
  1549. echo '<span class="text-muted">NIE</span>';
  1550. }
  1551. echo'</td>';
  1552. echo'<td>' . $user->HAS_ACTIVE_NET . '</td>';
  1553. echo'<td>' . $user->HAS_ACTIVE_TV . '</td>';
  1554. //, w.`USER_PAY_TERM_ADD`
  1555. //, w.`L_APPOITMENT_DATE`
  1556. //, w.`L_APPOITMENT_USER`
  1557. echo'</tr>';
  1558. }
  1559. echo'</tbody>';
  1560. echo'</table>';
  1561. echo $page_nav_out;
  1562. }
  1563. public static function export_csv($q, &$page_nav, &$items) {
  1564. if (empty($items)) {
  1565. echo "Brak danych";
  1566. return;
  1567. }
  1568. $activeFiltr = V::get('_f', 'all', $_GET);
  1569. $csvFileName = "Windykacja-{$activeFiltr}";
  1570. header('Content-Type: text/csv; charset=utf-8');
  1571. header("Content-Disposition: attachment; filename={$csvFileName}.csv");
  1572. $cols_order_by = WindykacjaStatsModel::get_order_by_fields();
  1573. $cols = array();
  1574. $cols['ID_BILLING_USERS'] = array('label'=>'Nr klienta', 'title'=>'ID_BILLING_USERS');
  1575. $cols['is_firma'] = array('label'=>'F', 'title'=>'is_firma: Firma 1 - tak, 0 nie');
  1576. $cols['BILLING_OWNER'] = array('label'=>'COM', 'title'=>'BILLING_OWNER: Klient firmy 1 - BIALL-NET, 2 - NETDAY');
  1577. $cols['BLOKADA'] = array('label'=>'B', 'title'=>'BLOKADA: Informacja o blokadzie');
  1578. $cols['P_NAME'] = array('label'=>'imie i nazwisko', 'title'=>'P_NAME');
  1579. $cols['P_ADDRESS_STREET'] = array('label'=>'adres', 'title'=>'P_ADDRESS_STREET');
  1580. $cols['P_ADDRESS_Koresp'] = array('label'=>'adres koresp.', 'title'=>'Adres do korespondencji');
  1581. $cols['P_PHONE'] = array('label'=>'nr telefonu', 'title'=>'P_PHONE');
  1582. $cols['user_mail_contact'] = array('label'=>'adres e-mail', 'title'=>'user_mail_contact');
  1583. $cols['P_PESEL'] = array('label'=>'pesel', 'title'=>'P_PESEL');
  1584. $cols['A_STATUS'] = array('label'=>'status', 'title'=>'A_STATUS');
  1585. $cols['A_STATUS_UPDATE_DATE'] = array('label'=>'data aktualizacji', 'title'=>'A_STATUS_UPDATE_DATE');
  1586. $cols['PAY_SALDO'] = array('label'=>'saldo', 'title'=>'PAY_SALDO');
  1587. $cols['PAY_SALDO_30_DNI'] = array('label'=>'saldo 30 dni', 'title'=>'Saldo bez faktur z terminem płatności < 30 dni');
  1588. $cols['PAY_SALDO_ISSUED'] = array('label'=>'saldo wystawione', 'title'=>'Saldo wg daty wystawienia faktur');
  1589. $cols['PAY_FVAT'] = array('label'=>'zaległe faktury', 'title'=>'PAY_FVAT');
  1590. $cols['PAY_DATE_FIRST_FVAT'] = array('label'=>'data wymagalności pierwszej faktury', 'title'=>'PAY_DATE_FIRST_FVAT');
  1591. $cols['PAY_DATE'] = array('label'=>'data wymagalności ostatniej faktury', 'title'=>'PAY_DATE');
  1592. $cols['LAST_FVAT_VALUE'] = array('label'=>'kwota ostatniej faktury', 'title'=>'LAST_FVAT_VALUE');
  1593. $cols['LAST_PAY_DATE'] = array('label'=>'data ostatniej wpłaty', 'title'=>'LAST_PAY_DATE');
  1594. $cols['LAST_PAY_VALUE'] = array('label'=>'kwota ostatniej wpłaty', 'title'=>'LAST_PAY_VALUE');
  1595. $cols['PAY_TERM'] = array('label'=>'termin płatności', 'title'=>'PAY_TERM');
  1596. $cols['ACCOUNT_NUMBER'] = array('label'=>'nr konta', 'title'=>'ACCOUNT_NUMBER');
  1597. $cols['SERVICES_STREETS'] = array('label'=>'adresy usług', 'title'=>'SERVICES_STREETS');
  1598. $cols['IS_MOVED_TO_VECTRA'] = array('label'=>'Przeniesienie do Vectra', 'title'=>'IS_MOVED_TO_VECTRA');
  1599. $cols['HAS_ACTIVE_NET'] = array('label'=>'NET', 'title'=>'Aktywne usługi NET');
  1600. $cols['HAS_ACTIVE_TV'] = array('label'=>'TV', 'title'=>'Aktywne uslugi TV');
  1601. $out_cols = array();
  1602. foreach ($cols as $k_field => $v_params) {
  1603. $out_cols[] = '"' . $v_params['label'] . '"';
  1604. }
  1605. echo implode(";", $out_cols) . "\n";
  1606. foreach ($items as $k_id => $user) {
  1607. $out_cols = array();
  1608. $out_cols[] = '"' . $k_id . '"';
  1609. $out_cols[] = '"' . $user->is_firma . '"';
  1610. if ($user->BILLING_OWNER == 1) {
  1611. $out_cols[] = '"' . 'BN' . '"';
  1612. } else if ($user->BILLING_OWNER == 2) {
  1613. $out_cols[] = '"' . 'ND' . '"';
  1614. } else {
  1615. $out_cols[] = '"' . '0' . '"';
  1616. }
  1617. $out_cols[] = '"' . (($user->STATUS == 9)? "Z" : "0") . '"';
  1618. $out_cols[] = '"' . $user->P_NAME.' '.$user->P_NAME_SECOND . '"';
  1619. $out_cols[] = '"' . "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}/{$user->P_ADDRESS_HOME}, {$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}" . '"';
  1620. if ($user->P_ADRESS_KORESP_1282) {
  1621. $out_cols[] = '"' . $user->P_ADRESS_KORESP_1282 . '"';
  1622. } else {
  1623. $out_cols[] = '""';
  1624. }
  1625. $out_cols[] = '"' . $user->P_PHONE . '"';
  1626. $out_cols[] = '"' . $user->user_mail_contact . '"';
  1627. $out_cols[] = '"' . $user->P_PESEL . '"';
  1628. $out_cols[] = '"' . $user->A_STATUS . '"';
  1629. $out_cols[] = '"' . $user->A_STATUS_UPDATE_DATE . '"';
  1630. $out_cols[] = '"' . (($user->PAY_SALDO != 0)? "{$user->PAY_SALDO} zł" : "0") . '"';
  1631. $out_cols[] = '"' . (($user->PAY_SALDO_30_DNI != 0)? "{$user->PAY_SALDO_30_DNI} zł" : "0") . '"';
  1632. $out_cols[] = '"' . (($user->PAY_SALDO_ISSUED != 0)? "{$user->PAY_SALDO_ISSUED} zł" : "0") . '"';
  1633. $out_cols[] = '"' . $user->PAY_FVAT . '"';
  1634. $out_cols[] = '"' . (($user->PAY_DATE_FIRST_FVAT != '0000-00-00')? $user->PAY_DATE_FIRST_FVAT : '') . '"';
  1635. $out_cols[] = '"' . (($user->PAY_DATE != '0000-00-00')? $user->PAY_DATE : '') . '"';
  1636. $out_cols[] = '"' . $user->LAST_FVAT_VALUE . '"';
  1637. $out_cols[] = '"' . (($user->LAST_PAY_DATE && $user->LAST_PAY_DATE != '0000-00-00')? $user->LAST_PAY_DATE : '---') . '"';
  1638. $out_cols[] = '"' . $user->LAST_PAY_VALUE . '"';
  1639. $out_cols[] = '"' . (($user->PAY_TERM != '0000-00-00')? $user->PAY_TERM : '') . '"';
  1640. $out_cols[] = '"' . $user->ACCOUNT_NUMBER . '"';
  1641. $out_cols[] = '"' . $user->SERVICES_STREETS . '"';
  1642. $out_cols[] = '"' . (($user->IS_MOVED_TO_VECTRA)? 'TAK' : 'NIE') . '"';
  1643. $out_cols[] = '"' . $user->HAS_ACTIVE_NET . '"';
  1644. $out_cols[] = '"' . $user->HAS_ACTIVE_TV . '"';
  1645. echo implode(";", $out_cols) . "\n";
  1646. }
  1647. }
  1648. public static function form($q = '') {
  1649. SEF("MENU");
  1650. MENU();
  1651. echo'<div class="box box-blue">';
  1652. echo'<form action="" method="get">';
  1653. echo'<input type="hidden" name="'."MENU_INIT".'" value="'."USERS2_WINDYKACJA_STATUS".'" />';
  1654. echo'<p style="margin:0;">'."Wyszukaj klienta: ";
  1655. echo'<input type="text" name="'."q".'" value="'.htmlspecialchars($q).'" />';
  1656. echo " ".'<em>'."(imie, nazwisko lub numer klineta)".'</em>';//, adres
  1657. echo " ".'<input type="submit" value="'."szukaj".'" />';
  1658. echo'</p>';
  1659. echo'</form>';
  1660. echo'</div>';// .box-blue
  1661. }
  1662. public static function css() {
  1663. echo'<style type="text/css">'."
  1664. body{font-family:arial;line-height:1.4;}
  1665. .box{border:1px solid #999;padding:5px;margin:5px;}
  1666. .box-center{border:1px solid #999;padding:5px;margin:5px auto;}
  1667. .box-silver{border-color:#999;}
  1668. .box-red{border-color:#f00;}
  1669. .box-blue{border-color:#00f;}
  1670. .box-green{border-color:#008000;}
  1671. .box-hover-active{background:#fff;border-color:#999;}
  1672. .box-hover-active:hover{background:#eee;border-color:#000;}
  1673. .btn-box{margin:0 2px 0 0;padding:0 3px;background:#bbb;color:#fff;text-decoration:none;border:0;font-weight:bold;}
  1674. .tbl-page-nav{font-size:small;}
  1675. .tbl-page-nav a{font-size:small; text-decoration:none;}
  1676. .tbl-page-nav a:hover{background-color:#eee;}
  1677. .tbl-view {margin:0;font-size:small;}
  1678. .tbl-view caption{text-align:left;font-style:italic;font-size:medium;}
  1679. .tbl-view caption em{padding:0 5px;font-size:13px;font-style:normal;}
  1680. .tbl-view th{padding:0 3px;font-size:small;}
  1681. .tbl-view td{padding:0 3px;}
  1682. .tbl-view .r{text-align:right;}
  1683. .tbl-view thead th {background:#F3F3F3;}
  1684. .tbl-view thead td {background:#F3F3F3;}
  1685. .historia-platnosci-filters thead td{text-align:center;}
  1686. .historia-platnosci-filters td.selected {background-color:#FFE6E9;}
  1687. .historia-platnosci-filters td:hover {background-color:#E6FFE6;}
  1688. .historia-platnosci-subfilters thead td{text-align:center;background:#fff;}
  1689. .historia-platnosci-subfilters td.selected {background-color:#FFE6E9;}
  1690. .historia-platnosci-subfilters td:hover {background-color:#E6FFE6;}
  1691. .tbl-td-top th,
  1692. .tbl-td-top td {vertical-align:top;}
  1693. ".'</style>';
  1694. }
  1695. public static function user_umowy(&$user) {
  1696. Lib::loadClass('Tree');
  1697. Lib::loadClass('TreeHelper');
  1698. // build tree by P_ID - array or 0
  1699. function Tree_Helper__create_tree_rec($p_id, &$items) {
  1700. static $rec_ind;
  1701. $rec_ind++;
  1702. $ret = array();
  1703. if (!array_key_exists($p_id, $items)) {
  1704. return false;
  1705. } else {
  1706. $r = $items[$p_id];
  1707. if (empty($r->sub)) {
  1708. return false;
  1709. }
  1710. foreach ($r->sub as $k_id => $v) {
  1711. $ret[$k_id] = Tree_Helper__create_tree_rec($k_id, $items);
  1712. }
  1713. return $ret;
  1714. }
  1715. }
  1716. function tree_callback__show_item_from_SERVICES(&$r, &$tree) {
  1717. $cls = array();
  1718. $cls[] = 'HANGUP_STATUS-' . $r->HANGUP_STATUS;
  1719. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  1720. echo'<dl'.$cls.'>';
  1721. echo'<dt>';
  1722. $out_id = ($r->ID < 10)? '&nbsp;'.$r->ID.'' : $r->ID;
  1723. echo'<b class="item_id btn-box">'.$out_id.'</b>';
  1724. //echo'<a href="'."?MENU_INIT=IN7_MK_BAZA_DYSTRYBUCJI_EDIT&ARG1=EDIT&ARG1_VAL=".$r->ID.'" class="btn" title="'."Edit".'">'."E".'</a>';
  1725. $st_status_bg = '';
  1726. if ($r->A_STATUS == 'NORMAL') {
  1727. $st_status_bg = '#8F8;';
  1728. } else if ($r->A_STATUS == 'WAITING') {
  1729. $st_status_bg = '#F8F;';
  1730. } else if ($r->A_STATUS == 'DELETED') {
  1731. $st_status_bg = '#ccc;';
  1732. } else if ($r->A_STATUS == 'OFF_SOFT') {
  1733. $st_status_bg = '#F99;';
  1734. } else if ($r->A_STATUS == 'OFF_HARD') {
  1735. $st_status_bg = '#eee;';
  1736. }
  1737. $st_status_bg = ($st_status_bg)? 'background-color:'.$st_status_bg : '';
  1738. echo'<span class="desc">';
  1739. echo'<span class="btn-box" style="'.$st_status_bg.'">'.$r->A_STATUS.'</span>';
  1740. echo' <b style="color:#333;">'.$r->description.'</b>';
  1741. if ($r->ID_OFFERS) {
  1742. echo' <code>' . "(Nr oferty: {$r->ID_OFFERS})" . '</code>';
  1743. } else {
  1744. echo' <span style="color:#f00">'."Brak numeru oferty!".'</span>';
  1745. }
  1746. $st_status_bg = '';
  1747. if ($r->HANGUP_STATUS == 'NORMAL') {
  1748. $st_status_bg = 'background-color:#8F8;';
  1749. } else if ($r->HANGUP_STATUS == 'WAITING') {
  1750. $st_status_bg = 'background-color:#F8F;';
  1751. } else if ($r->HANGUP_STATUS == 'DELETED') {
  1752. $st_status_bg = 'background-color:#ccc;';
  1753. } else if ($r->HANGUP_STATUS == 'OFF_SOFT') {
  1754. $st_status_bg = 'background-color:#F99;';
  1755. } else if ($r->HANGUP_STATUS == 'OFF_HARD') {
  1756. $st_status_bg = 'background-color:#f00;color:#fff;';
  1757. }
  1758. echo ' <span class="btn-box" style="' . $st_status_bg . '">' . "{$r->HANGUP_STATUS} ({$r->HANGUP_FROM} - {$r->HANGUP_TILL}) - {$r->A_STATUS_DESC}" .'</span>';
  1759. echo'</span>';
  1760. echo'</dt>';
  1761. echo'</dl>'."\n";
  1762. }
  1763. $uslugi_l2 = WindykacjaStatsModel::get_uslugi_from_l2($user);
  1764. $umowy_l2 = WindykacjaStatsModel::get_umowy_from_l2($user);
  1765. $uslugi_l2_nieprzypisane = array();
  1766. foreach ($uslugi_l2 as $k_id => $h) {
  1767. $uslugi_l2_nieprzypisane[$k_id] = true;
  1768. }
  1769. if (is_array($umowy_l2) && !empty($umowy_l2)) {
  1770. if (is_array($uslugi_l2) && !empty($uslugi_l2)) {
  1771. foreach ($umowy_l2 as $k_umowa_ind => $h_umowa) {
  1772. $umowy_l2[$k_umowa_ind]['uslugi'] = array();
  1773. foreach ($uslugi_l2 as $k_id => $h_usluga) {
  1774. if ($h_usluga['ID_DEALS_TABLE'] == $h_umowa['ID']) {
  1775. $umowy_l2[$k_umowa_ind]['uslugi'][$k_id] = $h_usluga;
  1776. if (isset($uslugi_l2_nieprzypisane[$k_id])) unset($uslugi_l2_nieprzypisane[$k_id]);
  1777. }
  1778. }
  1779. }
  1780. }
  1781. }
  1782. echo'<style type="text/css">'."
  1783. .tbl-umowy-l2 .umowa-id{font-weight:bold;font-size:big;font-family:arial;}
  1784. .tbl-umowy-l2 .row-umowa td{border-top:2px solid #00f;}
  1785. .wind-status-old td,
  1786. .wind-status-old th {color:#666;}
  1787. ".'</style>';
  1788. $ARGS['ZAPISZ'] = true;
  1789. Lay_Html_Toggle::start("Aktualne umowy i usługi ", array('open'=>(($ARGS['ZAPISZ'])? false : true)));
  1790. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2: ';print_r($umowy_l2);echo'</pre>';
  1791. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1792. //echo'<caption>'."Aktualne umowy".'<em>'." (l2)".'</em>'.'</caption>';
  1793. if ($umowy_l2 == -1) {
  1794. echo'<tr><td>';
  1795. echo'<span style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</span>';
  1796. echo'</td></tr>';
  1797. } else if (empty($umowy_l2)) {
  1798. echo'<tr><td>'."Brak umów.".'</td></tr>';
  1799. }
  1800. else {
  1801. $tbl_umowy_cols = 5;
  1802. echo'<thead>';
  1803. echo'<tr>';
  1804. echo'<th>'."Nr umowy".'</th>';
  1805. echo'<th>'."Prefix".'</th>';
  1806. echo'<th>'."Data umowy".'</th>';
  1807. echo'<th>'."Termin".'</th>';
  1808. echo'<th>'."".'</th>';
  1809. echo'</tr>';
  1810. echo'</thead>';
  1811. $t = 0;
  1812. foreach ($umowy_l2 as $h) {
  1813. echo'<tr class="row-umowa row-'.($t = 1 - $t).'">';
  1814. echo'<td class="r umowa-id">' . $h['P_DEALNUMBER'] . '</td>';
  1815. echo'<td>' . $h['P_DEALPREFIX'] . '</td>';
  1816. echo'<td class="r">' . $h['P_DEALDATE'] . '</td>';
  1817. echo'<td class="r">' . $h['P_DEALDATE_TERM'] . '</td>';
  1818. echo'<td>';
  1819. if ($h['Wcześniejszy Nr umowy']) echo "Wcześniejszy Nr umowy: ".$h['Wcześniejszy Nr umowy'].'<br />';// TODO: Undefined index
  1820. if ($h['DEALDESC']) echo "Notatki: ".$h['DEALDESC'].'<br />';
  1821. echo "Koniecznosc podpisania aneksu lub innego dokumentu: ".$h['ANEX_NEEDED'].'<br />';
  1822. echo "Data potwierdzenia podpisania aneksu/dokumentu: ".$h['ANEX_CONFIRM_DATE'].'<br />';
  1823. echo'</td>';
  1824. echo'</tr>';
  1825. if (!empty($h['uslugi'])) {
  1826. // TODO: make TREE by P_ID_SERVICES
  1827. $items = array();
  1828. foreach ($h['uslugi'] as $k_id_usluga => $h_suluga) {
  1829. $h_suluga['sub'] = array();
  1830. $items[$k_id_usluga] = (object)$h_suluga;
  1831. }
  1832. $uslugi_tree = array();// tree root
  1833. foreach ($items as $k_id => $r) {
  1834. if ($r->P_ID == 0) {
  1835. $uslugi_tree[$r->ID] = array();
  1836. if (array_key_exists($r->P_ID, $items)) {
  1837. $items[$r->P_ID]->sub[$r->ID] = true;
  1838. }
  1839. } else {// array
  1840. if (array_key_exists($r->P_ID, $items)) {
  1841. $items[$r->P_ID]->sub[$r->ID] = true;
  1842. }
  1843. }
  1844. }
  1845. ksort($uslugi_tree);
  1846. // set up has_childrens
  1847. foreach ($items as $k_id => $r) {
  1848. $items[$k_id]->has_childrens = !empty($r->sub);
  1849. }
  1850. foreach ($uslugi_tree as $k_id => $v_childrens) {
  1851. if (array_key_exists($k_id, $items)) {
  1852. $uslugi_tree[$k_id] = Tree_Helper__create_tree_rec($k_id, $items);
  1853. }
  1854. }
  1855. echo'<tr class="row-'.($t).'">';
  1856. echo'<td>'."&nbsp;".'</td>';
  1857. echo'<td colspan="'.($tbl_umowy_cols - 1).'" style="padding:0;">';
  1858. $tree = new Tree('SERVICES');
  1859. $tree->set_parent_id_col('P_ID');
  1860. $tree->set_param('show_item_callback', "tree_callback__show_item_from_SERVICES");
  1861. $tree->set_param('ajax', "NIE");
  1862. $tree->set_param('rozwin', true);
  1863. $tree->show_css();
  1864. $tree->show_js();
  1865. $_COOKIE[$tree->cookie_name] = implode(' ', array_keys($items));
  1866. echo "\n".'<div class="tree-wrap">'."\n";
  1867. $tree->show_rec_by_tree($uslugi_tree, $items);
  1868. echo '</div>'."\n";
  1869. echo'</td>';
  1870. echo'</tr>';
  1871. }
  1872. }
  1873. }
  1874. echo'</table>';
  1875. if (!empty($uslugi_l2_nieprzypisane)) {
  1876. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1877. echo'<caption>'."Nieprzypisane usługi".'<em>'." (l2)".'</em>'.'</caption>';
  1878. echo'<head>';
  1879. echo'<tr>';
  1880. echo'<th>'."ID".'</th>';
  1881. echo'<th>'."usługa".'</th>';
  1882. echo'<th>'."status".'</th>';
  1883. echo'<th>'."nr umowy".'</th>';
  1884. echo'<th>'."id oferty".'</th>';
  1885. echo'</tr>';
  1886. echo'</head>';
  1887. foreach ($uslugi_l2_nieprzypisane as $k_id => $v_bool) {
  1888. $h_usluga = $uslugi_l2[$k_id];
  1889. echo'<tr>';
  1890. echo'<td class="r">' . $h_usluga['ID'] . '</td>';
  1891. echo'<td>' . $h_usluga['description'] . '</td>';
  1892. echo'<td>' . $h_usluga['A_STATUS_DESC'] . '</td>';
  1893. echo'<td class="r">' . '<b>';
  1894. if (array_key_exists($h['ID_DEALS_TABLE'], $umowy_l2)) {
  1895. echo $umowy_l2[$h['ID_DEALS_TABLE']]['P_DEALNUMBER'];
  1896. } else {
  1897. //TODO: get P_DEALNUMBER from DEALS_TABLE where ID = $h['ID_DEALS_TABLE']
  1898. }
  1899. echo'</b>' . '</td>';
  1900. echo'<td class="r">';
  1901. if ($h_usluga['ID_OFFERS']) {
  1902. echo'<code>' . $h_usluga['ID_OFFERS'] . '</code>';
  1903. } else {
  1904. echo'<span style="color:#f00">'."Brak!".'</span>';
  1905. }
  1906. echo'</td>';
  1907. echo'</tr>';
  1908. }
  1909. echo'</table>';
  1910. }
  1911. Lay_Html_Toggle::end();
  1912. $umowy_l3 = WindykacjaStatsModel::get_umowy_from_l3($user);
  1913. $ARGS['ZAPISZ'] = true;
  1914. Lay_Html_Toggle::start("Aktualne usługi".'<em>'." (l3)".'</em>', array('open'=>(($ARGS['ZAPISZ'])? false : true)));
  1915. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l3: ';print_r($umowy_l3);echo'</pre>';
  1916. echo'<table class="tbl-view tbl-umowy-l2" cellspacing="0" cellpadding="0" border="1">';
  1917. if (empty($umowy_l3)) {
  1918. echo'<tr><td>'."Brak usług.".'</td></tr>';
  1919. }
  1920. else {
  1921. echo'<thead>';
  1922. echo'<tr>';
  1923. echo'<th rowspan="2">'."ID".'</th>';
  1924. echo'<th rowspan="2">'."status".'</th>';
  1925. echo'<th rowspan="2">'."data dok".'</th>';
  1926. echo'<th rowspan="2">'."adres".'</th>';
  1927. echo'<th rowspan="2">'."usługa".'</th>';
  1928. echo'<th rowspan="2">'."S_OTHER_INFO".'</th>';
  1929. echo'<th colspan="2" title="'."ID_BILLING_USERS".'">'. "nr klienta" .'</th>';
  1930. echo'<th colspan="2" title="'."ID_SERVICES".'">'."nr usługi".'</th>';
  1931. echo'<th colspan="2" title="'."P_OFFER_ID".'">'."nr oferty".'</th>';
  1932. echo'<th colspan="2" title="'."P_DEAL_DATE".'">'."data umowy".'</th>';
  1933. echo'<th colspan="2">'."nr umowy".'</th>';
  1934. echo'<th colspan="2">'."termin umowy".'</th>';
  1935. echo'<th colspan="2" title="'."MONTH COST".'">'."abonament".'</th>';
  1936. echo'<th rowspan="2">'."INICJALY HANDLOWCA".'</th>';
  1937. echo'<th rowspan="2">'."RODZAJ DZIALANIA HANDLOWEGO".'</th>';
  1938. echo'</tr>';
  1939. echo'<tr>';
  1940. echo'<td>'."OLD".'</td>';
  1941. echo'<td>'."NEW".'</td>';
  1942. echo'<td>'."OLD".'</td>';
  1943. echo'<td>'."NEW".'</td>';
  1944. echo'<td>'."OLD".'</td>';
  1945. echo'<td>'."NEW".'</td>';
  1946. echo'<td>'."OLD".'</td>';
  1947. echo'<td>'."NEW".'</td>';
  1948. echo'<td>'."OLD".'</td>';
  1949. echo'<td>'."NEW".'</td>';
  1950. echo'<td>'."OLD".'</td>';
  1951. echo'<td>'."NEW".'</td>';
  1952. echo'<td>'."OLD".'</td>';
  1953. echo'<td>'."NEW".'</td>';
  1954. echo'</tr>';
  1955. echo'</thead>';
  1956. foreach ($umowy_l3 as $h) {
  1957. echo'<tr>';
  1958. echo'<td>' . $h['ID'] . '</td>';
  1959. echo'<td>' . $h['A_STATUS'] . '</td>';
  1960. echo'<td>' . '<nobr>' . $h['DATA_DOK'] . '</nobr>' . '</td>';
  1961. echo'<td>' . $h['S_ADDRESS_STREET'] . '</td>';
  1962. echo'<td>' . '<b>' . $h['P_SERVICE'] . '</b>' . '</td>';
  1963. echo'<td>' . $h['S_OTHER_INFO'] . '</td>';
  1964. echo'<td>' . $h['ID_BILLING_USERS_OLD'] . '</td>';
  1965. echo'<td>' . $h['ID_BILLING_USERS_NEW'] . '</td>';
  1966. echo'<td>' . $h['ID_SERVICES_OLD'] . '</td>';
  1967. echo'<td>' . $h['ID_SERVICES_NEW'] . '</td>';
  1968. echo'<td>' . $h['P_OFFER_ID_OLD'] . '</td>';
  1969. echo'<td>' . $h['P_OFFER_ID_NEW'] . '</td>';
  1970. echo'<td>' . '<nobr>' . $h['P_DEAL_DATE_OLD'] . '</nobr>' . '</td>';
  1971. echo'<td>' . '<nobr>' . $h['P_DEAL_DATE_NEW'] . '</nobr>' . '</td>';
  1972. echo'<td>' . $h['P_DEALNUMBER_OLD'] . '</td>';
  1973. echo'<td>' . $h['P_DEALNUMBER_NEW'] . '</td>';
  1974. echo'<td>' . '<nobr>' . $h['P_DEALTERM_OLD'] . '</nobr>' . '</td>';
  1975. echo'<td>' . '<nobr>' . $h['P_DEALTERM_NEW'] . '</nobr>' . '</td>';
  1976. echo'<td>' . $h['MONTH_COST_OLD'] . '</td>';
  1977. echo'<td>' . $h['MONTH_COST_NEW'] . '</td>';
  1978. echo'<td>' . $h['INICJALY_HANDLOWCA'] . '</td>';
  1979. echo'<td>' . $h['RODZAJ_DZIALANIA_HANDLOWEGO'] . '</td>';
  1980. echo'</tr>';
  1981. }
  1982. }
  1983. echo'</table>';
  1984. Lay_Html_Toggle::end();
  1985. }
  1986. public static function user_historia_platnosci(&$user) {
  1987. ?>
  1988. <style type="text/css">
  1989. .hide .to-hide{display:none;}
  1990. .may-hide .btn-hide{display:inline;padding:0 5px;border:1px solid #bbb;}
  1991. .may-hide .btn-show{display:none;padding:0 5px;border:1px solid #bbb;}
  1992. .hide .btn-hide{display:none;}
  1993. .hide .btn-show{display:inline;}
  1994. </style>
  1995. <?php
  1996. Lay_Html_Toggle::show_js();
  1997. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user);
  1998. // add events
  1999. $umowy_l2 = WindykacjaStatsModel::get_umowy_from_l2($user);
  2000. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_docs ';print_r($billing_docs);echo'</pre>';
  2001. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_docs ';print_r(reset($billing_docs));echo'</pre>';
  2002. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">umowy_l2 ';print_r($umowy_l2);echo'</pre>';
  2003. if (!empty($umowy_l2)) {
  2004. foreach ($umowy_l2 as $h) {
  2005. $billing_docs->add_event($h['P_DEALDATE'], 'UMOWA', $h);
  2006. if ($h['P_DEALDATE_TERM'] != '0000-00-00') {// < date('Y-m-d')) {
  2007. $billing_docs->add_event($h['P_DEALDATE_TERM'], 'KONIEC UMOWY', $h);
  2008. }
  2009. }
  2010. }
  2011. $user_hist_events = WindykacjaStatsHelper::get_user_hist_status_events($user);
  2012. if (!empty($user_hist_events)) {
  2013. foreach ($user_hist_events as $v_hist) {
  2014. $bill_doc = (array)$v_hist;
  2015. $billing_docs->add_event($v_hist->A_STATUS_UPDATE_DATE, 'HIST_STATUS', $bill_doc);
  2016. }
  2017. }
  2018. $user_hist_events = WindykacjaStatsHelper::get_user_hist_phone_events($user);
  2019. if (!empty($user_hist_events)) {
  2020. foreach ($user_hist_events as $v_hist) {
  2021. $bill_doc = (array)$v_hist;
  2022. $billing_docs->add_event(substr($v_hist->A_RECORD_UPDATE_DATE, 0, 10), 'HIST_PHONE', $bill_doc);
  2023. }
  2024. }
  2025. $user_hist_events = WindykacjaStatsHelper::get_user_bad_address_events($user);
  2026. if (!empty($user_hist_events)) {
  2027. foreach ($user_hist_events as $v_hist) {
  2028. $bill_doc = (array)$v_hist;
  2029. $billing_docs->add_event(substr($v_hist->A_RECORD_UPDATE_DATE, 0, 10), 'HIST_BAD_ADDRESS', $bill_doc);
  2030. }
  2031. }
  2032. // add today
  2033. $bill_doc = array();
  2034. $bill_doc['saldo'] = $billing_docs->get_saldo();
  2035. $billing_docs->add_event(date('Y-m-d'), 'TODAY', $bill_doc);
  2036. $billing_docs->sort_docs();
  2037. //$billing_docs = array_reverse($billing_docs, true);
  2038. //echo'<pre style="max-height:300px;overflow:auto;border:1px solid red;">billing_docs: ';print_r($billing_docs);echo'</pre>';
  2039. $billing_docs_arr = $billing_docs->get_docs();
  2040. $types_finanse = array();
  2041. $types_finanse[] = 'KW';
  2042. $types_finanse[] = 'KP';
  2043. $types_finanse[] = 'WB_MASS';
  2044. $types_finanse[] = 'WB';
  2045. $types_finanse[] = 'KORV';
  2046. $types_finanse[] = 'FVAT';
  2047. $saldo_all = 0;
  2048. $out_tbl = array();
  2049. //echo'<pre>';print_r($billing_docs_arr);echo'</pre>';
  2050. foreach ($billing_docs_arr as $k_data => $v_docs_arr) {
  2051. foreach ($v_docs_arr as $k_ind => $v_doc) {
  2052. $out_tr = array();
  2053. $out_tr['data'] = $k_data;
  2054. if ($k_data == date("Y-m-d")) $out_tr['class'] = 'today';
  2055. $out_tr['ID'] = '';
  2056. $out_tr['nr'] = '';
  2057. $out_tr['winien'] = '';
  2058. $out_tr['ma'] = '';
  2059. $out_tr['saldo'] = '';
  2060. $out_tr['saldo_all'] = '';
  2061. if ($v_doc->get_class() == 'BILLING') {
  2062. $saldo_all += $v_doc->get_saldo();
  2063. $out_tr['ID'] = $v_doc->get_type();
  2064. $type_desc = WindykacjaStatsModel::get_billing_type_desc($v_doc->get_type());
  2065. if ($type_desc) {
  2066. 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');
  2067. $out_tr['ID'] = '<span title="'.$type_desc.'">'.$out_tr['ID'].'</span>';
  2068. // TODO: podglad faktury
  2069. //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>';
  2070. }
  2071. $docNr = $v_doc->get('nr');
  2072. $docNrLabel = $v_doc->get('NUMBER') . '/' . $v_doc->get('ID_BILLING_PREFIXES');
  2073. /* links fomr l1:
  2074. * FV: https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura&adm=edit&uid=4014&fpos=&dz=&close=0&doc=799413&doctype=1
  2075. * KOR: https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=html_faktura_korekta&adm=edit&uid=4014&fpos=&dz=&close=0&doc=809557&doctype=3
  2076. */
  2077. if ('FVAT' == $v_doc->get_type()) {
  2078. $out_tr['ID'] .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $docNr . '" target="_blank">'."({$docNrLabel})".'</a>';
  2079. }
  2080. else if ('KORV' == $v_doc->get_type()) {
  2081. // https://biuro.biall-net.pl/dev-pl/se-master/index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=809557
  2082. $remoteFvNum = $v_doc->get('FV_NUMBER');
  2083. $korNr = $v_doc->get('ID_BILLING_NUMBERS');
  2084. $korTitle = "Korekta dotycząca faktury nr: {$remoteFvNum}";
  2085. $out_tr['ID'] .= ' <a href="index.php?FUNCTION_INIT=bm_show_document&ARG1_VAL=' . $korNr . '" target="_blank" title="'.$korTitle.'">'."({$docNrLabel})".'</a>';
  2086. }
  2087. $out_tr['nr'] = $docNrLabel;
  2088. $out_tr['winien'] = number_format($v_doc->get('WINIEN'), 2, ',', ' ');
  2089. $out_tr['ma'] = number_format($v_doc->get('MA'), 2, ',', ' ');
  2090. $out_tr['saldo'] = number_format($v_doc->get_saldo(), 2, ',', ' ');
  2091. $out_tr['saldo_all'] = number_format($saldo_all, 2, ',', ' ');
  2092. // style
  2093. if ($out_tr['winien'] == '0,00') $out_tr['winien'] = '<span style="color:#666;">' . $out_tr['winien'] . '</span>';
  2094. if ($out_tr['ma'] == '0,00') $out_tr['ma'] = '<span style="color:#666;">' . $out_tr['ma'] . '</span>';
  2095. }
  2096. else if ($v_doc->get_class() == 'EVENT') {
  2097. if ($v_doc->get_type() == 'TODAY') {
  2098. $out_tr['class'] = 'today';
  2099. $vDocSaldoData = $v_doc->get_data();
  2100. $v_doc_saldo = V::get('saldo', '', $vDocSaldoData);
  2101. $out_tr['saldo_all'] = number_format($v_doc_saldo, 2, ',', ' ');
  2102. }
  2103. else if ($v_doc->get_type() == 'HIST_STATUS') {
  2104. // search for koresp files
  2105. // TODO: mv to ::get_koresp_file($id_koresp);
  2106. $id_koresp = intval($v_doc->get('ID_KORESP'));
  2107. $found_files = array();
  2108. if(0){// turn off - old server
  2109. $CNF = new stdClass();
  2110. $CNF->koresp_dir = '/home/samba/BIALL-NET/PISMA/OUT';
  2111. $CNF->koresp_www_path = '/se-dev/PISMA/OUT';
  2112. if ($id_koresp > 0) {
  2113. $pattern = $CNF->koresp_dir . '/' . '*.' . $id_koresp . '.pdf';
  2114. $file_tmp_list = glob($pattern);//, GLOB_NOSORT);
  2115. if (!empty($file_tmp_list)) {
  2116. foreach ($file_tmp_list as $v_file) {
  2117. $test_file = explode('/', $v_file);
  2118. $test_file = end($test_file);
  2119. $found_files[] = $CNF->koresp_www_path . '/' . $test_file;
  2120. }
  2121. }
  2122. }
  2123. // return $found_files;
  2124. }
  2125. switch ($v_doc->get('A_STATUS')) {
  2126. case 'WAITING':
  2127. $out_tr['add'] = "powrót do oczekujących";
  2128. break;
  2129. case 'waiting-wezwanie2':
  2130. // TODO: get('LAST_ID_KORESP_WEZWANIE1')
  2131. $out_tr['add'] = "wezwanie do zapłaty - ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(termin: ".$v_doc->get('PAY_TERM').")</em> ";
  2132. break;
  2133. case 'waiting-krd':
  2134. $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> ";
  2135. break;
  2136. case 'N/S;':
  2137. $out_tr['add'] = "ID_KORESP: <b>".$v_doc->get('ID_KORESP')."</b> <em>(" . $v_doc->get('K_ZAWARTOS') . ")</em>";// TODO: get opis from koresp
  2138. //echo '('.$v_doc->get('ID_KORESP').', '.$v_doc->get('K_ZAWARTOS').'='.substr($v_doc->get('K_ZAWARTOS'), 0, strlen('rozwiazanie umowy')).')';
  2139. if ($v_doc->get('ID_KORESP') > 0 && substr($v_doc->get('params'), 0, strlen('rozwiazanie umowy')) == 'rozwiazanie umowy') {
  2140. $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>';
  2141. }
  2142. break;
  2143. default:
  2144. $out_tr['add'] = "zmiana statusu na: ".$v_doc->get('A_STATUS')." ";
  2145. }
  2146. if ($id_koresp > 0) {
  2147. if (!empty($out_tr['add']) && !empty($found_files)) {
  2148. $add_link_koresp = reset($found_files);// first file from koresp
  2149. $out_tr['add'] .= " " . '<a href="' . $add_link_koresp . '" target="_blank">' . "P" . '</a>';
  2150. }
  2151. //$koresp_edit_link = "?MENU_INIT=IN7_DZIENNIK_KORESP_EDIT&ARG1=EDIT&ARG1_VAL=" . $id_koresp;
  2152. Lib::loadClass('ProcesHelper');
  2153. $zasobKorespID = ProcesHelper::getZasobTableID('IN7_DZIENNIK_KORESP');
  2154. $koresp_edit_link = "index.php?MENU_INIT=VIEWTABLE_AJAX&ZASOB_ID={$zasobKorespID}#EDIT/{$id_koresp}";
  2155. $out_tr['add'] .= " " . '<a href="' . $koresp_edit_link . '" title="' . "Edycja KORESP. ({$id_koresp})" . '" target="_blank">' . "KOR" . '</a>';
  2156. }
  2157. }
  2158. else if ($v_doc->get_type() == 'HIST_PHONE') {
  2159. $date = $v_doc->get('PAY_TERM');
  2160. if ($date == 'N/S;') $date = '';
  2161. $lastPhoneStatus = $v_doc->get('LAST_PHONE_STATUS');
  2162. if ($lastPhoneStatus == 'N/S;') $lastPhoneStatus = '';
  2163. $lastSmsStatus = $v_doc->get('LAST_SMS_STATUS');
  2164. if ($lastSmsStatus == 'N/S;') $lastSmsStatus = '';
  2165. $lastMailStatus = $v_doc->get('LAST_MAIL_STATUS');
  2166. if ($lastMailStatus == 'N/S;') $lastMailStatus = '';
  2167. $lastUpdateDate = $v_doc->get('A_RECORD_UPDATE_DATE');
  2168. if (!empty($lastPhoneStatus)) {
  2169. switch ($lastPhoneStatus) {
  2170. case 'nie_zaplaci':
  2171. $out_tr['add'] = "nie zapłaci";
  2172. break;
  2173. case 'zaplaci_w_terminie':
  2174. $out_tr['add'] = "zapłaci w terminie {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  2175. break;
  2176. case 'zaplaci_za_1mc':
  2177. $out_tr['add'] = "zapłaci miesiąc później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  2178. break;
  2179. case 'zaplaci_za_2mc':
  2180. $out_tr['add'] = "zapłaci 2 miesiące później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  2181. break;
  2182. case 'zaplaci_za_3mc':
  2183. $out_tr['add'] = "zapłaci 3 miesiące później {$date} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  2184. break;
  2185. default:
  2186. $out_tr['add'] = "kontakt z klientem: {$lastPhoneStatus} " . '<em style="font-size:small;">' . "(ustalono {$lastUpdateDate})" . '</em>';
  2187. }
  2188. } else if (!empty($lastSmsStatus)) {
  2189. $lastSmsId = $v_doc->get('LAST_SMS_MSG_ID');
  2190. $out_tr['add'] = "SMS: {$lastSmsStatus} " . '<em style="font-size:small;" title="' . "(wysłano {$lastUpdateDate}, {$lastSmsId})" . '">' . "(wysłano {$lastUpdateDate})" . '</em>';
  2191. } else if (!empty($lastMailStatus)) {
  2192. $lastMailId = $v_doc->get('LAST_MAIL_MSG_ID');
  2193. $out_tr['add'] = "MAIL: {$lastMailStatus} " . '<em style="font-size:small;" title="' . "(wysłano {$lastUpdateDate}, {$lastMailId})" . '">' . "(wysłano {$lastUpdateDate})" . '</em>';
  2194. }
  2195. } else if ($v_doc->get_type() == 'HIST_BAD_ADDRESS') {
  2196. if ($v_doc->get('BAD_ADDRESS')) {
  2197. $out_tr['add'] = "błędny adres zameldowania ";
  2198. } else {
  2199. $out_tr['add'] = "poprawa adresu zameldowania ";
  2200. }
  2201. if ($v_doc->get('ID_KORESP') > 0) {
  2202. $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>' . ")";
  2203. }
  2204. } else {
  2205. $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
  2206. if ($v_doc->get_type() == 'UMOWA') {
  2207. $out_tr['add'] = "umowa nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(termin ".$v_doc->get('P_DEALDATE_TERM').")</em>";
  2208. } else if ($v_doc->get_type() == 'KONIEC UMOWY') {
  2209. $out_tr['add'] = "zakończenie umowy nr <b>".$v_doc->get('P_DEALNUMBER')."</b> <em>(z dnia ".$v_doc->get('P_DEALDATE').")</em>";
  2210. }
  2211. }
  2212. }
  2213. //$out_tbl[] = $out_tr;// add to the end
  2214. array_unshift($out_tbl, $out_tr);// add to the begining
  2215. }
  2216. }
  2217. echo'<style type="text/css">'."
  2218. .tbl-windykacja td{padding:0 5px;}
  2219. .tbl-windykacja .cell-data{white-space:nowrap;}
  2220. .tbl-windykacja .cell-winien{text-align:right;}
  2221. .tbl-windykacja .cell-ma{text-align:right;}
  2222. .tbl-windykacja .cell-saldo{text-align:right;}
  2223. .tbl-windykacja .cell-saldo_all{text-align:right; white-space:nowrap; background-color:#E5E5E5;}
  2224. .tbl-windykacja .cell-nr{font-family:monospace;text-align:right;}
  2225. .tbl-windykacja .change-year td{border-top:3px solid #00f;}
  2226. .tbl-windykacja .today td{background:#FFFF98;}
  2227. .tbl-windykacja .cell-add em{color:#666;}
  2228. ".'</style>';
  2229. $last_year = '';
  2230. $cols = array();
  2231. $cols['data'] = "data";
  2232. $cols['ID'] = "ID";
  2233. $cols['nr'] = "nr";
  2234. $cols['winien'] = "winien";
  2235. $cols['ma'] = "ma";
  2236. //$cols['saldo'] = "saldo";
  2237. $cols['saldo_all'] = "saldo";
  2238. $cols['add'] = "uwagi";
  2239. ?>
  2240. <h4>Historia klienta <small>(l1)</small></h4>
  2241. <table border="1" class="tbl-view tbl-windykacja" cellspacing="0" cellpadding="0">
  2242. <thead>
  2243. <tr>
  2244. <th>rok</th>
  2245. <?php foreach ($cols as $colName => $colLabel) : ?>
  2246. <th><?php echo $colLabel; ?></th>
  2247. <?php endforeach; ?>
  2248. </tr>
  2249. </thead>
  2250. <?php
  2251. foreach ($out_tbl as $out_tr) {
  2252. $change_year = false;
  2253. $k_data = $out_tr['data'];
  2254. $rok = substr($k_data, 0, 4);
  2255. if ($rok != $last_year) {
  2256. $change_year = true;
  2257. }
  2258. $cls = array();
  2259. if ($change_year) $cls[] = 'change-year';
  2260. if ($add_cls = V::get('class', '', $out_tr)) $cls[] = $add_cls;
  2261. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  2262. echo'<tr'.$cls.'>';
  2263. echo'<td>';
  2264. echo ($change_year)? $rok : "&nbsp;";
  2265. echo'</td>';
  2266. $last_year = $rok;
  2267. foreach ($cols as $col_name => $col_label) {
  2268. //foreach ($out_tr as $k_col_name => $v_val) {
  2269. if (array_key_exists($col_name, $out_tr)) {
  2270. echo'<td class="'."cell-".$col_name.'">' . $out_tr[$col_name] . '</td>';
  2271. } else {
  2272. echo'<td>'."&nbsp;".'</td>';
  2273. }
  2274. }
  2275. echo'</tr>';
  2276. }
  2277. echo'</table>';
  2278. echo'<br />';
  2279. echo'<br />';
  2280. WindykacjaStatsHelper::update_stats($user, $billing_docs);
  2281. {// srv hist
  2282. $srvHist = array();
  2283. $db = DB::getDB();
  2284. $sql = <<<SQL
  2285. select fvPos.`ID` as fvPos__ID
  2286. , fvPos.`DATE_FROM` as fvPos__DATE_FROM
  2287. , fvPos.`DATE_TO` as fvPos__DATE_TO
  2288. , fvPos.`ID_SERVICES` as fvPos__ID_SERVICES
  2289. , (select srv.`NAME_LIST_SERVICES` from `billing2013`.`SERVICES` srv where srv.`ID`=fvPos.`ID_SERVICES` limit 1) as srv__NAME_LIST_SERVICES
  2290. , fvPos.`AMMOUNT` as fvPos__AMMOUNT
  2291. , fvPos.`PRICE` as fvPos__PRICE
  2292. , fvPos.`VAT` as fvPos__VAT
  2293. -- , fvPos.`ID_BILLS_FVAT` as fvPos__ID_BILLS_FVAT
  2294. , fvPos.`DESCR` as fvPos__DESCR
  2295. -- , fvPos.`id_list_services` as fvPos__id_list_services
  2296. -- , fvPos.`id_list_sww` as fvPos__id_list_sww
  2297. -- , fvPos.`VAT_NAME` as fvPos__VAT_NAME
  2298. -- , fvPos.`ID_OFFERS` as fvPos__ID_OFFERS
  2299. -- , 'fv', fv.*
  2300. -- , fv.`ID` as fv__ID
  2301. , fv.`ID_BILLING_NUMBERS` as fv__ID_BILLING_NUMBERS
  2302. -- , fv.`ID_BILLING_USERS` as fv__ID_BILLING_USERS
  2303. -- , fv.`id_owner` as fv__id_owner
  2304. , fv.`BILL_DATE` as fv__BILL_DATE
  2305. , fv.`SELL_DATE` as fv__SELL_DATE
  2306. -- , fv.`TIMESTAMP` as fv__TIMESTAMP
  2307. , fv.`PAYMENT_TERM` as fv__PAYMENT_TERM
  2308. -- , fv.`PAYMENT_TYPE` as fv__PAYMENT_TYPE
  2309. -- , fv.`ID_CURRENCY` as fv__ID_CURRENCY
  2310. -- , fv.`ID_FK_DEKRET` as fv__ID_FK_DEKRET
  2311. -- , fv.`ID_FK_ROZRACH` as fv__ID_FK_ROZRACH
  2312. -- , fv.`OPEN` as fv__OPEN
  2313. -- , fv.`FK_ZAKSIEG` as fv__FK_ZAKSIEG
  2314. , fv.`IF_KORV` as fv__IF_KORV
  2315. -- , 'fvNum', fvNum.*
  2316. -- , fvNum.`ID` as fvNum__ID
  2317. -- , fvNum.`TIMESTAMP` as fvNum__TIMESTAMP
  2318. -- , fvNum.`ID_BILLING_NUMBERS_TYPE` as fvNum__ID_BILLING_NUMBERS_TYPE
  2319. -- , fvNum.`ID_BILLING_PREFIXES` as fvNum__ID_BILLING_PREFIXES
  2320. , fvNum.`NUMBER` as fvNum__NUMBER
  2321. -- , fvNum.`ID_BILLING_USERS` as fvNum__ID_BILLING_USERS
  2322. , fvNum.`FOREIGN_ID_BILLING_NUMBERS` as fvNum__FOREIGN_ID_BILLING_NUMBERS
  2323. -- , fvNum.`U_ID` as fvNum__U_ID
  2324. -- , fvNum.`BILLING_OWNER` as fvNum__BILLING_OWNER
  2325. -- , 'korPos', korPos.*
  2326. , korPos.`ID` as korPos__ID
  2327. -- , korPos.`ID_BILLS_FVAT` as korPos__ID_BILLS_FVAT
  2328. , korPos.`DESCR` as korPos__DESCR
  2329. , korPos.`ID_SERVICES` as korPos__ID_SERVICES
  2330. , korPos.`DATE_FROM` as korPos__DATE_FROM
  2331. , korPos.`DATE_TO` as korPos__DATE_TO
  2332. , korPos.`AMMOUNT` as korPos__AMMOUNT
  2333. , korPos.`PRICE` as korPos__PRICE
  2334. , korPos.`VAT` as korPos__VAT
  2335. -- , korPos.`id_list_services` as korPos__id_list_services
  2336. -- , korPos.`id_list_sww` as korPos__id_list_sww
  2337. -- , korPos.`VAT_NAME` as korPos__VAT_NAME
  2338. -- , korPos.`N_DESCR` as korPos__N_DESCR
  2339. -- , korPos.`N_ID_SERVICES` as korPos__N_ID_SERVICES
  2340. -- , korPos.`N_DATE_FROM` as korPos__N_DATE_FROM
  2341. -- , korPos.`N_DATE_TO` as korPos__N_DATE_TO
  2342. -- , korPos.`N_AMMOUNT` as korPos__N_AMMOUNT
  2343. -- , korPos.`N_PRICE` as korPos__N_PRICE
  2344. -- , korPos.`N_VAT` as korPos__N_VAT
  2345. -- , korPos.`N_id_list_services` as korPos__N_id_list_services
  2346. -- , korPos.`N_id_list_sww` as korPos__N_id_list_sww
  2347. -- , korPos.`N_VAT_NAME` as korPos__N_VAT_NAME
  2348. , korPos.`TYP_KOREKTY` as korPos__TYP_KOREKTY
  2349. from `billing2013`.`BILLS_FVAT_POS` fvPos
  2350. join `billing2013`.`BILLS_FVAT` fv on (fv.`ID`=fvPos.`ID_BILLS_FVAT`)
  2351. join `billing2013`.`BILLING_NUMBERS` fvNum on(fvNum.`ID`=fv.`ID_BILLING_NUMBERS`)
  2352. left join `billing2013`.`BILLS_KORV_POS` korPos on(
  2353. korPos.`ID_BILLS_FVAT`=(
  2354. select kor.`ID`
  2355. from `billing2013`.`BILLS_KORV` kor
  2356. where kor.`REMOTE_ID_BILLING_NUMBERS`=fvNum.`ID`
  2357. )
  2358. and korPos.`ID_SERVICES`=fvPos.`ID_SERVICES`
  2359. )
  2360. where fv.`ID_BILLING_USERS`='{$user->ID}'
  2361. order by fv.`ID` DESC
  2362. SQL;
  2363. //echo'<pre>srvHist:sql: ';print_r($sql);echo'</pre>';
  2364. $idxDates = array();
  2365. $idxSrv = array();
  2366. $idxHasKor = array();
  2367. $res = $db->query($sql);
  2368. while ($r = $db->fetch($res)) {
  2369. $srvHist[$r->fvPos__ID] = $r;
  2370. $month = substr($r->fv__BILL_DATE, 0, 7);
  2371. $idSrv = $r->fvPos__ID_SERVICES;
  2372. if (!empty($r->fv__BILL_DATE)) {
  2373. if (!array_key_exists($month, $idxDates)) $idxDates[$month] = array();
  2374. $idxDates[$month][$r->fvPos__ID] = $idSrv;
  2375. }
  2376. if (!empty($idSrv)) {
  2377. $idxSrv[$idSrv] = $r->srv__NAME_LIST_SERVICES;
  2378. }
  2379. if ($r->korPos__ID > 0) {
  2380. $isKorZero = ($r->korPos__AMMOUNT * $r->korPos__PRICE == -1 * $r->fvPos__AMMOUNT * $r->fvPos__PRICE);
  2381. $idxHasKor[$month][$idSrv][] = $isKorZero;
  2382. }
  2383. }
  2384. krsort($idxDates);
  2385. ?>
  2386. <div class="container">
  2387. <script>
  2388. function showHideSrvHist() {
  2389. jQuery('#srvHist').toggle();
  2390. return false;
  2391. }
  2392. </script>
  2393. <h3>Historia usług <button class="btn btn-xs btn-danger" onclick="return showHideSrvHist()">+/-</button></h3>
  2394. <table class="table table-bordered" id="srvHist" style="display:none">
  2395. <thead>
  2396. <tr>
  2397. <th style="padding:2px"><nobr class="pull-right">Usługi</nobr></th>
  2398. <?php foreach ($idxSrv as $idSrv => $srvType) : ?>
  2399. <th style="padding:2px"><?php echo $idSrv; ?></th>
  2400. <?php endforeach; ?>
  2401. </tr>
  2402. <tr>
  2403. <th style="padding:2px"><nobr>Data</nobr></th>
  2404. <?php foreach ($idxSrv as $idSrv => $srvType) : ?>
  2405. <th style="padding:2px"><?php echo $srvType; ?></th>
  2406. <?php endforeach; ?>
  2407. </tr>
  2408. </thead>
  2409. <tbody>
  2410. <?php foreach ($idxDates as $month => $posIds) : ?>
  2411. <tr>
  2412. <td style="padding:2px"><?php echo $month; ?></td>
  2413. <?php foreach ($idxSrv as $idSrv => $srvType) : ?>
  2414. <?php if (in_array($idSrv, $posIds)) : ?>
  2415. <?php if (!empty($idxHasKor[$month][$idSrv])) : ?>
  2416. <?php if (count($idxHasKor[$month][$idSrv]) > 1) : ?>
  2417. <td style="padding:2px" class="danger"><b title="Faktury i Korekty w tym na 0"><?php echo count($idxHasKor[$month][$idSrv]); ?> * FV (FV - KOR = 0)</b></td>
  2418. <?php elseif (true == $idxHasKor[$month][$idSrv][0]) : ?>
  2419. <td style="padding:2px" class="danger"><b title="Faktura i Korekta na 0">FV - KOR = 0</b></td>
  2420. <?php else : ?>
  2421. <td style="padding:2px" class="warning"><b title="Faktura i Korekta">FV - KOR &gt; 0</b></td>
  2422. <?php endif; ?>
  2423. <?php else : ?>
  2424. <td style="padding:2px" class="success"><b title="brak korekty">FV</b></td>
  2425. <?php endif; ?>
  2426. <?php else : ?>
  2427. <td style="padding:2px"><i class="muted">---</i></td>
  2428. <?php endif; ?>
  2429. <?php endforeach; ?>
  2430. </tr>
  2431. <?php endforeach; ?>
  2432. </tbody>
  2433. </table>
  2434. </div>
  2435. <?php
  2436. //echo'<pre>idxHasKor: ';print_r($idxHasKor);echo'</pre>';
  2437. //echo'<pre>idxDates: ';print_r($idxDates);echo'</pre>';
  2438. //echo'<pre>idxSrv: ';print_r($idxSrv);echo'</pre>';
  2439. //echo'<pre>srvHist: ';print_r($srvHist);echo'</pre>';
  2440. }// srv hist
  2441. }
  2442. public static function view_faktura($faktura_id) {
  2443. // https://l1.webone.pl/modules/make_billing/edit.php?mod=make_billing&form=make_faktura&adm=edit&uid=11381&fpos=&dz=
  2444. // 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
  2445. echo'{'.$faktura_id.'}';
  2446. }
  2447. public static function zadluzenia(&$user) {
  2448. $THIS_DATA_DO = null;// TODO: pobierac z PAY_TERM z tabeli USERS2_WINDYKACJA_STATUS
  2449. $post_sent = (!empty($_POST['sbmt']));
  2450. $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')));
  2451. if (!$post_sent) {
  2452. echo'<table style="margin:10px 50px;padding:20px;border:1px solid blue;"><tr><td>';
  2453. echo'<form action="" method="post">';
  2454. $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')));
  2455. echo'<p>'."Termin płatności: ".'</p>';
  2456. echo'<input type="text" name="'."DATA_DO".'" value="'.$post_DATA_DO.'" />';
  2457. echo'<input type="submit" name="sbmt" value="'."Wyslij".'" />';
  2458. echo'</form>';
  2459. echo'</td></tr></table>';
  2460. return;
  2461. } else {
  2462. $THIS_DATA_DO = $post_DATA_DO;
  2463. }
  2464. self::wezwanie($user, $THIS_DATA_DO);
  2465. }
  2466. public static function wezwanie_ostateczne(&$user, $wezwanie_termin) {
  2467. self::wezwanie($user, $wezwanie_termin, true);
  2468. }
  2469. public static function zestawienie_vectra_nadplaty() {
  2470. $usersList = array();
  2471. $db = DB::getDB();
  2472. $sql_select = "
  2473. c.`ID` as ID
  2474. , c.`ID` as id_users
  2475. , c.`P_NAME`
  2476. , c.`P_NAME_SECOND`
  2477. , c.`P_ADDRESS_STREET`
  2478. , c.`P_ADDRESS_HOME`
  2479. , c.`P_ADDRESS_HOUSE`
  2480. , c.`P_ADDRESS_CITY`
  2481. , c.`P_ADDRESS_POST_CODE`
  2482. , c.`P_ADDRESS_REGION`
  2483. , c.`P_PESEL`
  2484. , c.`P_PHONE`
  2485. , c.`P_OTHER_DOC`
  2486. , c.`user_mail_contact`
  2487. , c.`is_firma`
  2488. , w.`ID` as WINDYKACJA_ID
  2489. , w.`ID_BILLING_USERS`
  2490. , w.`A_STATUS`
  2491. , w.`A_STATUS_UPDATE_DATE`
  2492. , w.`USER_PAY_TERM_ADD`
  2493. , w.`L_APPOITMENT_DATE`
  2494. , w.`L_APPOITMENT_USER`
  2495. , w.`L_APPOITMENT_INFO`
  2496. , w.`PAY_DATE`
  2497. , w.`PAY_DATE_FIRST_FVAT`
  2498. , w.`PAY_TERM`
  2499. , w.`PAY_SALDO`
  2500. , w.`PAY_FVAT`
  2501. , w.`wezwanie1_DATE`
  2502. , w.`wezwanie2_DATE`
  2503. , w.`ID_KORESP`
  2504. , w.`LAST_PAY_DATE`
  2505. , w.`BAD_ADDRESS`
  2506. , c.`STATUS`
  2507. , c.`BILLING_OWNER`
  2508. , w.`NR_SPRAWY_KRD`
  2509. , w.`NR_SPRAWY_SAD`
  2510. , w.`NR_SPRAWY_KOMORNIK`
  2511. , w.`LAST_FVAT_PAY_TERM`
  2512. ";
  2513. $sqlWhereAdd = "
  2514. and (w.`LAST_FVAT_PAY_TERM`>='2014-12-01'
  2515. or ( w.`LAST_FVAT_PAY_TERM`='0000-00-00'
  2516. and w.`LAST_FVAT_SELL_DATE`>='2014-12-01'
  2517. )
  2518. )
  2519. and c.`ID_BILLING_PREFIXES` in('0','1')
  2520. and c.`BILLING_OWNER` in('1')
  2521. ";
  2522. $sql = "select {$sql_select}
  2523. from `USERS2_WINDYKACJA_STATUS` as w
  2524. join `COMPANIES` as c on(c.`ID`=w.`ID_BILLING_USERS`)
  2525. where c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  2526. {$sqlWhereAdd}
  2527. ";
  2528. if (V::get('DBG_SQL', '', $_GET)) {
  2529. header('Content-Type: text/plain; charset=utf-8');
  2530. echo $sql;
  2531. exit;
  2532. }
  2533. $res = $db->query($sql);
  2534. if ($db->has_errors()) {
  2535. print_r($db->get_errors());
  2536. die('die L.' . __LINE__);
  2537. }
  2538. while ($r = $db->fetch($res)) {
  2539. $usersList[$r->ID_BILLING_USERS] = $r;
  2540. }
  2541. if (V::get('DBG_ILE', '', $_GET)) {
  2542. echo '<p>ilosc: ' . count($usersList) . '</p>' . '<pre style="max-height:200px;overflow:auto">';
  2543. print_r($usersList);
  2544. echo '</pre>';
  2545. exit;
  2546. }
  2547. if (V::get('DBG_IDS', '', $_GET)) {
  2548. header('Content-Type: text/plain; charset=utf-8');
  2549. echo 'ilosc: ' . count($usersList) . "\n";
  2550. echo implode("\n", array_keys($usersList));
  2551. exit;
  2552. }
  2553. $limit = V::get('DBG_LOOP_LIMIT', 100000, $_GET, 'int');
  2554. if(V::get('DBG_LOOP_LIMIT', 0, $_GET, 'int')){echo "Loimit: {$limit}\n";}
  2555. $date_limit = V::get('DATE_LIMIT', date("Y-m-d"), $_GET);
  2556. $date_limit_from = '2014-12-01';
  2557. $csvFileName = "Zestawienie-nadplaty-do-{$date_limit}";
  2558. header('Content-Type: text/csv; charset=utf-8');
  2559. header("Content-Disposition: attachment; filename={$csvFileName}.csv");
  2560. $showCsvHeader = true;
  2561. foreach ($usersList as $userId => $user) {
  2562. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user, $date_limit);
  2563. $billing_docs->sort_docs();
  2564. $saldo = $billing_docs->get_saldo();
  2565. if ($saldo <= 0) {
  2566. continue;
  2567. }
  2568. if(V::get('DBG_LOOP', '', $_GET)){echo "{$userId}:{$saldo}\n";}
  2569. $incomeDocs = $billing_docs->getLastIncomeDocsForSaldo($saldo);
  2570. if(V::get('DBG_LOOP', '', $_GET)){print_r($incomeDocs);echo "\n";}
  2571. //WindykacjaStatsModel::update_doc_number($incomeDocs);
  2572. $out_tbl = array();
  2573. foreach ($incomeDocs as $v_fvat) {
  2574. $out_tr = array();
  2575. $out_tr['ID'] = $v_fvat['ID'];
  2576. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  2577. $out_tr['wplata'] = number_format($v_fvat['MA'], 2, '.', '');
  2578. $out_tr['data'] = $v_fvat['BILL_DATE'];
  2579. $out_tr['pozostalo'] = number_format($v_fvat['MA_POZOSTALO'], 2, '.', '');
  2580. array_push($out_tbl, $out_tr);// add to the begining
  2581. }
  2582. {// csv
  2583. $csvLine = array();
  2584. $csvLine[] = '"id klienta"';
  2585. $csvLine[] = '"nr dokumentu"';
  2586. $csvLine[] = '"kwota brutto"';
  2587. $csvLine[] = '"data wpłaty"';
  2588. $csvLine[] = '"pozostało"';
  2589. if ($showCsvHeader) {
  2590. echo implode(';', $csvLine) . ";\n";
  2591. $showCsvHeader = false;
  2592. }
  2593. foreach ($out_tbl as $tr) {
  2594. $csvLine = array();
  2595. $csvLine[] = '"' . $userId . '"';
  2596. $csvLine[] = '"' . $tr['nr'] . '"';
  2597. $csvLine[] = '"' . $tr['wplata'] . '"';
  2598. $csvLine[] = '"' . $tr['data'] . '"';
  2599. $csvLine[] = '"' . $tr['pozostalo'] . '"';
  2600. echo implode(';', $csvLine) . ";\n";
  2601. }
  2602. }
  2603. //echo '<pre style="max-height:200px;overflow:auto">incomeDocs: ';print_r($incomeDocs);echo'</pre>';
  2604. //echo '<pre style="max-height:200px;overflow:auto">ilosc('.count($out_tbl).') ' . "client({$userId}): ";print_r($out_tbl);echo'</pre>';
  2605. if (--$limit < 0) {
  2606. echo '<br>BREAK';
  2607. break;
  2608. }
  2609. }
  2610. exit;
  2611. }
  2612. public static function zestawienie_vectra_zadluzenia() {
  2613. $usersList = array();
  2614. $db = DB::getDB();
  2615. $sql_select = "
  2616. c.`ID` as ID
  2617. , c.`ID` as id_users
  2618. , c.`P_NAME`
  2619. , c.`P_NAME_SECOND`
  2620. , c.`P_ADDRESS_STREET`
  2621. , c.`P_ADDRESS_HOME`
  2622. , c.`P_ADDRESS_HOUSE`
  2623. , c.`P_ADDRESS_CITY`
  2624. , c.`P_ADDRESS_POST_CODE`
  2625. , c.`P_ADDRESS_REGION`
  2626. , c.`P_PESEL`
  2627. , c.`P_PHONE`
  2628. , c.`P_OTHER_DOC`
  2629. , c.`user_mail_contact`
  2630. , c.`is_firma`
  2631. , w.`ID` as WINDYKACJA_ID
  2632. , w.`ID_BILLING_USERS`
  2633. , w.`A_STATUS`
  2634. , w.`A_STATUS_UPDATE_DATE`
  2635. , w.`USER_PAY_TERM_ADD`
  2636. , w.`L_APPOITMENT_DATE`
  2637. , w.`L_APPOITMENT_USER`
  2638. , w.`L_APPOITMENT_INFO`
  2639. , w.`PAY_DATE`
  2640. , w.`PAY_DATE_FIRST_FVAT`
  2641. , w.`PAY_TERM`
  2642. , w.`PAY_SALDO`
  2643. , w.`PAY_FVAT`
  2644. , w.`wezwanie1_DATE`
  2645. , w.`wezwanie2_DATE`
  2646. , w.`ID_KORESP`
  2647. , w.`LAST_PAY_DATE`
  2648. , w.`BAD_ADDRESS`
  2649. , c.`STATUS`
  2650. , c.`BILLING_OWNER`
  2651. , w.`NR_SPRAWY_KRD`
  2652. , w.`NR_SPRAWY_SAD`
  2653. , w.`NR_SPRAWY_KOMORNIK`
  2654. , w.`LAST_FVAT_PAY_TERM`
  2655. ";
  2656. $sqlWhereAdd = "
  2657. and (w.`LAST_FVAT_PAY_TERM`>='2014-12-01'
  2658. or ( w.`LAST_FVAT_PAY_TERM`='0000-00-00'
  2659. and w.`LAST_FVAT_SELL_DATE`>='2014-12-01'
  2660. )
  2661. )
  2662. and c.`ID_BILLING_PREFIXES` in('0','1')
  2663. and c.`BILLING_OWNER` in('1')
  2664. ";
  2665. if (V::get('DBG_NUM', '', $_GET)) {// number of clients with fvat after 2014-12-01
  2666. $sqlWhereAdd = "
  2667. and (w.`LAST_FVAT_PAY_TERM`>='2014-12-01'
  2668. or ( w.`LAST_FVAT_PAY_TERM`='0000-00-00'
  2669. and w.`LAST_FVAT_SELL_DATE`>='2014-12-01'
  2670. )
  2671. )
  2672. and c.`ID_BILLING_PREFIXES` in('0','1')
  2673. and c.`BILLING_OWNER` in('1')
  2674. ";
  2675. }
  2676. $sql = "select {$sql_select}
  2677. from `USERS2_WINDYKACJA_STATUS` as w
  2678. join `COMPANIES` as c on(c.`ID`=w.`ID_BILLING_USERS`)
  2679. where c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  2680. {$sqlWhereAdd}
  2681. ";
  2682. if (V::get('DBG_SQL', '', $_GET)) {
  2683. header('Content-Type: text/plain; charset=utf-8');
  2684. echo $sql;
  2685. exit;
  2686. }
  2687. $res = $db->query($sql);
  2688. if ($db->has_errors()) {
  2689. print_r($db->get_errors());
  2690. die();
  2691. }
  2692. while ($r = $db->fetch($res)) {
  2693. $usersList[$r->ID_BILLING_USERS] = $r;
  2694. }
  2695. if (V::get('DBG_ILE', '', $_GET)) {
  2696. echo '<p>ilosc: ' . count($usersList) . '</p>' . '<pre style="max-height:200px;overflow:auto">';
  2697. print_r($usersList);
  2698. echo '</pre>';
  2699. exit;
  2700. }
  2701. if (V::get('DBG_IDS', '', $_GET)) {
  2702. header('Content-Type: text/plain; charset=utf-8');
  2703. echo 'ilosc: ' . count($usersList) . "\n";
  2704. echo implode("\n", array_keys($usersList));
  2705. exit;
  2706. }
  2707. $limit = 10000;
  2708. $date_limit = V::get('DATE_LIMIT', date("Y-m-d"), $_GET);
  2709. $date_limit_from = '2014-12-01';
  2710. $csvFileName = "Zestawienie-zadluzenia-do-{$date_limit}";
  2711. header('Content-Type: text/csv; charset=utf-8');
  2712. header("Content-Disposition: attachment; filename={$csvFileName}.csv");
  2713. $showCsvHeader = true;
  2714. foreach ($usersList as $userId => $user) {
  2715. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user, $date_limit);
  2716. $billing_docs->sort_docs();
  2717. $fvat_arr = $billing_docs->get_unpaid_fvat();
  2718. WindykacjaStatsModel::update_doc_number($fvat_arr);
  2719. if (V::get('DBG_LAST_FVAT_TERM', '', $_GET)) {
  2720. $lastFvatDoc = $billing_docs->get_last_fvat_doc();
  2721. if ($lastFvatDoc) {
  2722. echo '<p>lastFvatDoc:</p><pre style="max-height:200px;overflow:auto">';
  2723. print_r($lastFvatDoc);
  2724. echo '</pre>';
  2725. exit;
  2726. }
  2727. }
  2728. $user->hasActiveDeal = 0;
  2729. $sql = "select sum(t.`DEALS_ACTIVE`) as activeDeals
  2730. from `temp_DEALS_STATUS` as t
  2731. where t.`DEALS_ACTIVE`=1
  2732. and t.`ID_BILLING_USERS`='{$userId}'
  2733. ";
  2734. $res = $db->query($sql);
  2735. if ($db->num_rows($res) > 0) {
  2736. $user->hasActiveDeal = 1;
  2737. }
  2738. $out_tbl = array();
  2739. foreach ($fvat_arr as $v_fvat) {
  2740. if ($v_fvat['BILL_DATE'] < $date_limit_from || $v_fvat['BILL_DATE'] > $date_limit) {
  2741. //echo 'pomin fvat:'."\n";print_r($v_fvat);
  2742. continue;
  2743. }
  2744. $out_tr = array();
  2745. $out_tr['ID'] = $v_fvat['ID'];
  2746. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  2747. $out_tr['winien'] = number_format($v_fvat['WINIEN'], 2, '.', '');
  2748. $out_tr['data'] = $v_fvat['BILL_DATE'];
  2749. $out_tr['termin'] = $v_fvat['PAYMENT_TERM'];
  2750. $out_tr['pozostalo'] = number_format($v_fvat['WINIEN_POZOSTALO'], 2, '.', '');
  2751. array_unshift($out_tbl, $out_tr);// add to the begining
  2752. }
  2753. {// csv
  2754. $csvLine = array();
  2755. $csvLine[] = '"id klienta"';
  2756. $csvLine[] = '"nr dokumentu"';
  2757. $csvLine[] = '"kwota brutto"';
  2758. $csvLine[] = '"data faktury"';
  2759. $csvLine[] = '"termin płatności"';
  2760. $csvLine[] = '"pozostało do zapłaty"';
  2761. $csvLine[] = '"status klienta (9=blokada)"';
  2762. $csvLine[] = '"aktywne uslugi"';
  2763. if ($showCsvHeader) {
  2764. echo implode(';', $csvLine) . ";\n";
  2765. $showCsvHeader = false;
  2766. }
  2767. foreach ($out_tbl as $tr) {
  2768. $csvLine = array();
  2769. $csvLine[] = '"' . $userId . '"';
  2770. $csvLine[] = '"' . $tr['nr'] . '"';
  2771. $csvLine[] = '"' . $tr['winien'] . '"';
  2772. $csvLine[] = '"' . $tr['data'] . '"';
  2773. $csvLine[] = '"' . $tr['termin'] . '"';
  2774. $csvLine[] = '"' . $tr['pozostalo'] . '"';
  2775. $csvLine[] = '"' . $user->STATUS . '"';
  2776. $csvLine[] = '"' . $user->hasActiveDeal . '"';
  2777. echo implode(';', $csvLine) . ";\n";
  2778. }
  2779. }
  2780. //echo '<pre style="max-height:200px;overflow:auto">fvat_arr: ';print_r($fvat_arr);echo'</pre>';
  2781. //echo '<pre style="max-height:200px;overflow:auto">ilosc('.count($out_tbl).') ' . "client({$userId}): ";print_r($out_tbl);echo'</pre>';
  2782. if (--$limit < 0) {
  2783. echo '<br>BREAK';
  2784. break;
  2785. }
  2786. }
  2787. exit;
  2788. }
  2789. public static function wezwanie(&$user, $wezwanie_termin, $wezwanie_ostateczne = false) {
  2790. $date_limit = date("Y-m-d");
  2791. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user, $date_limit);
  2792. $billing_docs->sort_docs();
  2793. // sprawdz zadluzenie
  2794. if ($billing_docs->get_saldo() >= 0) {
  2795. echo'<p class="green">' . "Brak zadluzenia" . '</p>';
  2796. return;
  2797. }
  2798. else {
  2799. $fvat_arr = $billing_docs->get_unpaid_fvat();
  2800. //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>';
  2801. //foreach ($fvat_arr as $key => $v) {
  2802. // echo'<br />'.number_format($v['WINIEN_POZOSTALO'], 4, ',', ' ');
  2803. //}
  2804. if (empty($fvat_arr)) {
  2805. echo'<p>'."Brak nieoplaconych faktur".'</p>';
  2806. return;
  2807. }
  2808. WindykacjaStatsModel::update_doc_number($fvat_arr);
  2809. $cols = array();
  2810. $cols['ID'] = "ID";
  2811. $cols['nr'] = "nr";
  2812. $cols['winien'] = "winien";
  2813. $cols['ma'] = "ma";
  2814. //$cols['saldo'] = "saldo";
  2815. $cols['saldo_all'] = "saldo";
  2816. $cols['add'] = "&nbsp;";
  2817. $saldo_all = 0;
  2818. foreach ($fvat_arr as $f) {
  2819. $saldo_all += round($f['WINIEN_POZOSTALO'], 2);
  2820. }
  2821. $out_tbl = array();
  2822. foreach ($fvat_arr as $v_fvat) {
  2823. $out_tr = array();
  2824. $out_tr['ID'] = ' <code style="font-size:10px">'."(".$v_fvat['ID'].")".'</code>';// TODO: dla KP,KW: ID_BILLING_NUMBERS zamiast ID
  2825. $out_tr['nr'] = $v_fvat['NUMBER'] . '/' . $v_fvat['ID_BILLING_PREFIXES'];
  2826. $out_tr['winien'] = number_format($v_fvat['WINIEN'], 2, ',', ' ');
  2827. $out_tr['data'] = $v_fvat['BILL_DATE'];
  2828. $out_tr['termin'] = $v_fvat['PAYMENT_TERM'];
  2829. $out_tr['pozostalo'] = number_format($v_fvat['WINIEN_POZOSTALO'], 2, ',', ' ');
  2830. array_unshift($out_tbl, $out_tr);// add to the begining
  2831. }
  2832. $razem = $saldo_all;
  2833. $company = WindykacjaStatsModel::get_company($user);
  2834. $nr_konta = FunkcjeL1::bankowy_formatuj_nrach(FunkcjeL1::bankowy_make_nrach($company->NR_RACH_MASS_PAY, $user->ID_BILLING_USERS, 0));
  2835. ?>
  2836. <style type="text/css">
  2837. body{font-family:serif; font-size:10px;line-height:14px;}
  2838. td{font-family:verdana; font-size:10px; color:#333;}
  2839. table {border-style:none;}
  2840. table td, table th {padding:0 2px;border-style:solid;border-collapse:collapse;}
  2841. table th {border-width:1px;border-color:#333;}
  2842. table td {border-width:1px;border-color:#333;}
  2843. </style>
  2844. <?php
  2845. echo'<div style="background:#fff;border:none;margin:5px;padding:20px 40px 10px 40px;page-break-after:always;font-size:small;">';
  2846. $id_koresp = 0;
  2847. if ($user->ID_KORESP) {
  2848. $id_koresp = $user->ID_KORESP;
  2849. if ($user->LAST_ID_KORESP_WEZWANIE1 && !$wezwanie_ostateczne) {
  2850. $id_koresp = $user->LAST_ID_KORESP_WEZWANIE1;
  2851. } else if ($user->LAST_ID_KORESP_WEZWANIE2 && $wezwanie_ostateczne) {
  2852. $id_koresp = $user->LAST_ID_KORESP_WEZWANIE2;
  2853. }
  2854. }
  2855. if ($id_koresp > 0) {//$user->ID_KORESP) {// TODO: if $user->LAST_ID_KORESP_WEZWANIE1 or LAST_ID_KORESP_WEZWANIE2
  2856. $koresp = DB::get_by_id('IN7_DZIENNIK_KORESP', $id_koresp);
  2857. if ($koresp) {
  2858. echo '<div style="text-align:right;font-weight:bold;">';
  2859. echo $koresp->ID_PROJECT . '-' .$koresp->ID . "/" . substr(date("Y"), 2);
  2860. echo '</div>';
  2861. }
  2862. }
  2863. //echo "&bdquo;BIALL-NET&rdquo; Sp. z o.o.<br />Otomin, ul. Słoneczna 43<br />80-174 Gdańsk";
  2864. ?>
  2865. <table border=0 cellspacing=0 cellpadding=0 style="width:100%;">
  2866. <tr>
  2867. <td style="width:60%;border:none;">
  2868. <?php echo $company->name1; ?>
  2869. <br /><?php echo "ul. " . $company->ulica . " " . $company->numer_dom; ?>
  2870. <br /><?php echo $company->kod . " " . $company->miasto; ?>
  2871. </td>
  2872. <td style="border:none;text-align:left;vertical-align:top;">
  2873. Gdańsk, dnia <?php echo date("Y-m-d"); ?>
  2874. </td>
  2875. </tr>
  2876. <tr>
  2877. <td style="border:none;">&nbsp;</td>
  2878. <td style="border:none;">
  2879. <p style="margin:50px 0;">
  2880. Numer klienta: <?php echo $user->ID; ?>
  2881. <br /><?php echo "{$user->P_NAME} {$user->P_NAME_SECOND}"; ?>
  2882. <?php // TODO: P_ADRESS_KORESP_1282 ?>
  2883. <br /><?php echo "ul. {$user->P_ADDRESS_STREET} {$user->P_ADDRESS_HOUSE}"; ?>
  2884. <?php if ($user->P_ADDRESS_HOME) { echo "/{$user->P_ADDRESS_HOME}"; } ?>
  2885. <br /><?php echo "{$user->P_ADDRESS_POST_CODE} {$user->P_ADDRESS_CITY}"; ?>
  2886. </p>
  2887. </td>
  2888. </tr>
  2889. </table>
  2890. <h1 style="text-align:center;margin:20px 10px 10px 10px;font-size:28px;">
  2891. <?php
  2892. if ($wezwanie_ostateczne) {
  2893. echo "OSTATECZNE WEZWANIE DO ZAPŁATY";
  2894. } else {
  2895. echo "WEZWANIE DO ZAPŁATY";
  2896. }
  2897. ?>
  2898. </h1>
  2899. <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>
  2900. <table border=0 cellspacing=0 cellpadding=2 style="width:100%;margin:10px;font-size:small;">
  2901. <thead style="background:#F3F3F3;">
  2902. <tr>
  2903. <th>Podstawa zobowiązania*</th>
  2904. <th>Nr dokumentu</th>
  2905. <?php //<th>Kwota netto</th> ?>
  2906. <th>Kwota brutto</th>
  2907. <th>Data faktury</th>
  2908. <th>Termin płatności</th>
  2909. <th>Pozostało do zapłaty</th>
  2910. </tr>
  2911. </thead>
  2912. <tfoot>
  2913. <tr>
  2914. <td colspan="4" style="border:none;"></td>
  2915. <th style="border-width:2px;border-color:#333;text-align:right;background:#F3F3F3;">Razem:</th>
  2916. <td style="border-width:2px;border-color:#333;font-weight:bold;"><?php echo FunkcjeL1::formatuj_grosze($razem); ?></td>
  2917. </tr>
  2918. </tfoot>
  2919. <?php foreach ($out_tbl as $out_tr) {
  2920. $k_data = $out_tr['data'];
  2921. $rok = substr($k_data, 0, 4);
  2922. $cls = array();
  2923. if ($add_cls = V::get('class', '', $out_tr)) $cls[] = $add_cls;
  2924. $cls = (!empty($cls))? ' class="'.implode(' ', $cls).'"' : '';
  2925. //$file_total['PODSTAWA_NUMBER'] = $r['NUMBER']."/".$r['ID_BILLING_PREFIXES'];
  2926. //$file_total['PODSTAWA_DATA'] = date("Y-m-d",$r['BAF_TIMESTAMP']);
  2927. //$file_total['PAYMENT_TERM'] = date("Y-m-d",$r['TERMIN_PL']);
  2928. ?>
  2929. <tr<?php echo $cls; ?>>
  2930. <td>
  2931. <?php echo "Faktura Vat"; ?>
  2932. </td>
  2933. <td>
  2934. <?php echo $out_tr['nr']; ?>
  2935. </td>
  2936. <td>
  2937. <?php echo $out_tr['winien']; ?>
  2938. </td>
  2939. <td>
  2940. <nobr><?php echo $out_tr['data']; ?></nobr>
  2941. </td>
  2942. <td>
  2943. <nobr><?php echo $out_tr['termin']; ?></nobr>
  2944. </td>
  2945. <td>
  2946. <?php echo $out_tr['pozostalo']; ?>
  2947. </td>
  2948. </tr>
  2949. <?php } ?>
  2950. </table>
  2951. <p style="margin:10px;">Słownie do zapłaty: <span style="border-bottom:1px dotted #000;padding:0 50px;">&nbsp;&nbsp;<b><?php echo FunkcjeL1::slownie($razem); ?></b>&nbsp;&nbsp;</span></p>
  2952. <p style="margin:10px;background:#eee;text-align:center;">Wymienioną sumę prosimy przekazać na nasz rachunek bankowy <br /><?php echo $nr_konta; ?> w terminie do dnia <span style="border-bottom:1px dotted #000;padding:0 50px;">&nbsp;&nbsp;<b><?php echo $wezwanie_termin; ?></b>&nbsp;&nbsp;</span></p>
  2953. <ul style="margin:10px;font-size:small;padding:0 0 0 40px;">
  2954. <li style="line-height:16px;">Od nieterminowych płatności mogą zostać naliczone odsetki ustawowe (art.481 § 1 KC).</li>
  2955. <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>
  2956. <li style="line-height:16px;">W przypadku uregulowania należności przed otrzymaniem niniejszego wezwania, proszę potraktować je za bezprzedmiotowe.</li>
  2957. </ul>
  2958. <table style="width:100%;border:none">
  2959. <tr>
  2960. <td colspan="2" style="border:none;">
  2961. <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,
  2962. <br> e-mail: bok@biall.net.pl lub z Windykatorem: tel. (58) 741-84-78</p>
  2963. </td>
  2964. </tr>
  2965. </table>
  2966. <table style="width:100%;border:none">
  2967. <tr>
  2968. <td style="width:50%;border:none;">&nbsp;</td>
  2969. <td style="width:50%;border:2px solid #999"><br /><br /><br /><br /></td>
  2970. </tr>
  2971. <tr>
  2972. <td style="border:none;">&nbsp;</td>
  2973. <td style="text-align:center;border:none;">(pieczęć i podpis wierzyciela)</td>
  2974. </tr>
  2975. <tr>
  2976. <td colspan="2" style="border:none;">
  2977. <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>
  2978. </td>
  2979. </tr>
  2980. <tr>
  2981. <td colspan="2" style="border:none">
  2982. <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>
  2983. <p style="margin:8px 0 0 0;font-size:small;text-align:center"><b>Krajowego Rejestru Długów<br />
  2984. Biura Informacji Gospodarczej S.A.<br />
  2985. ul. Armii Ludowej 21, 51-214 Wrocław<br />
  2986. www.krd.pl</b>
  2987. <br />
  2988. <br />
  2989. Informacja o zadłużeniu upubliczniona będzie w systemie KRD do dnia zapłaty lub 10 lat od daty dokonania wpisu.</p>
  2990. </td>
  2991. </tr>
  2992. </table>
  2993. </div>
  2994. <?php
  2995. }
  2996. }
  2997. public static function task_update_stats() {
  2998. self::css();
  2999. $to_update_step = 1000;
  3000. $q = V::get('q', '', $_GET);
  3001. $_p = V::get('_p', 0, $_GET, 'int');
  3002. echo'<a href="' . "?MENU_INIT=USERS2_WINDYKACJA_STATUS&q=".$q."&_p=".$_p . '">' . "Cofnij" . '<img src=icon/back.gif border=0 alt=POWROT>' . '</a>';
  3003. $to_update_total = WindykacjaStatsHelper::get_to_update_total();
  3004. if ($to_update_total <= 0) {
  3005. echo'<p style="color:green">' . "Wszystkie rekordy zaktualizowane" . '</p>';
  3006. return;
  3007. }
  3008. if ($to_update_total > $to_update_step) {
  3009. echo'<br />';
  3010. 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>';
  3011. echo'<br />';
  3012. }
  3013. $to_update_list = WindykacjaStatsHelper::get_to_update_list($to_update_step);
  3014. if (empty($to_update_list)) {
  3015. echo'<p style="color:green">' . "Wszystkie rekordy zaktualizowane" . '</p>';
  3016. return;
  3017. }
  3018. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">to_update_list: ';print_r($to_update_list);echo'</pre>';
  3019. foreach ($to_update_list as $w) {
  3020. //echo'<div class="box box-blue">';
  3021. echo "Nr. klienta: <b>".$w->ID_BILLING_USERS . "</b> ...";
  3022. //echo $w->A_STATUS . ' (' . $w->A_STATUS_UPDATE_DATE . ')';
  3023. $user = WindykacjaStatsModel::get_user_by_id($w->ID_BILLING_USERS);
  3024. if ($user) {
  3025. $billing_docs = WindykacjaStatsModel::get_bill_dosc_by_date($user);
  3026. WindykacjaStatsHelper::update_stats($user, $billing_docs);
  3027. }
  3028. //echo'</div>';// .box-blue
  3029. echo'<br />';
  3030. }
  3031. if ($to_update_total > $to_update_step) {
  3032. echo'<br /><br />';
  3033. 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>';
  3034. }
  3035. }
  3036. public static function getPowodyRezygnacji() {
  3037. // [895].[3888] - DEALS_TABLE.RODZAJ_DZIALANIA_HANDLOWEGO
  3038. $powody = array();
  3039. // $powody['3226'] = "REZYGNACJA FINANSE";
  3040. // $powody['3227'] = "REZYGNACJA SLABA OFERTA";
  3041. // $powody['3121'] = "REZYGNACJA WYPROWADZKA";
  3042. // $powody['3228'] = "REZYGNACJA PROBLEMY TECHNICZNE";
  3043. // $powody['3230'] = "REZYGNACJA WYJAZD";
  3044. // $powody['3229'] = "REZYGNACJA ZLA OBSLUGA BOK";
  3045. // $powody['3123'] = "REZYGNACJA CESJA";
  3046. // $powody['3119'] = "BRAK-BOK (Inne)";
  3047. // $powody['4188'] = "UMOWA_BEZPOSREDNIA";
  3048. // $powody['4189'] = "UMOWA_POSREDNIA";
  3049. // $powody['4190'] = "TELEMARKETING";
  3050. $powody['4192'] = "REZYGNACJA ZMIANA OPERATORA";
  3051. $powody['4193'] = "REZYGNACJA WYPROWADZKA";
  3052. $powody['4194'] = "REZYGNACJA NIEZADOWOLENIE";
  3053. $powody['4195'] = "REZYGNACJA CESJA";
  3054. //$powody['4196'] = "REZYGNACJA FINANSE";
  3055. $powody['4197'] = "REZYGNACJA SLABA OFERTA";
  3056. $powody['4198'] = "REZYGNACJA PROBLEMY TECHNICZNE";
  3057. $powody['4199'] = "REZYGNACJA ZLA OBSLUGA BOK";
  3058. $powody['4200'] = "WYPOWIEDZENIE PRZEZ OPERATORA ZA DLUGI";
  3059. // $powody['4201'] = "UMOWA W BOK ZWYCZAJNA";
  3060. // $powody['4202'] = "REZYGNACJA WYJAZD";
  3061. // $powody['4191'] = "BRAK-BOK (Inne)";
  3062. $powody['19803'] = "REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA";
  3063. $powody['22511'] = "WYPOWIEDZENIE PRZEZ OPERATORA";
  3064. $powody['4213'] = "REZYGNACJA INNE";
  3065. return $powody;
  3066. }
  3067. /**
  3068. * @params $user
  3069. * @params $id_koresp
  3070. */
  3071. public static function task_bok_rozwiazanie_umowy_print($user, $id_koresp) {
  3072. $user_hist_events = WindykacjaStatsHelper::get_user_hist_status_events($user);
  3073. if (empty($user_hist_events)) {
  3074. echo '<p style="color:red">' . "Brak danych HIST" . '</p>';
  3075. return;
  3076. }
  3077. $v_doc = null;
  3078. foreach ($user_hist_events as $v_hist) {
  3079. if ($v_hist->ID_KORESP == $id_koresp) {
  3080. $v_doc = $v_hist;
  3081. break;
  3082. }
  3083. }
  3084. if (!$v_doc) {
  3085. echo '<p style="color:red">' . "Brak danych HIST dla kodresp(".$v_doc->ID_KORESP.")" . '</p>';
  3086. return;
  3087. }
  3088. // params(255): rozwiazanie umowy,9872,3121
  3089. $params = explode(',', $v_doc->params);
  3090. if (count($params) < 3 && $params[0] != 'rozwiazanie umowy') {
  3091. echo '<p style="color:red">' . "Bad params" . '</p>';
  3092. return;
  3093. }
  3094. $koresp = DB::get_by_id('IN7_DZIENNIK_KORESP', $id_koresp);
  3095. if (!$koresp) {
  3096. echo '<p style="color:red">' . "Koresp not exists!" . '</p>';
  3097. return;
  3098. }
  3099. $nr_umowy = $params[1];
  3100. $powod = $params[2];
  3101. $deal_id = '..........................................................';
  3102. $termin_odlaczenia = '.....................';
  3103. if (count($params) > 4) {
  3104. // $data_arr["params"] = "rozwiazanie umowy,{$nr_umowy},{$powod},{$termin_odlaczenia},{$new_id_deals}";
  3105. $termin_odlaczenia = $params[3];
  3106. $deal_id = $params[4];
  3107. }
  3108. $arg_values = array();
  3109. $arg_values['powod'] = self::getPowodyRezygnacji();
  3110. $com = new stdClass();
  3111. if ($user->BILLING_OWNER == 2) {
  3112. $com->name = 'NET-DAY';
  3113. $com->fullName = 'NET-DAY s.c.';
  3114. $com->address_street = 'ul. Kopeckiego 9/24';
  3115. $com->address_city = '80-809 Gdańsk';
  3116. } else {
  3117. $com->name = 'BIALL-NET';
  3118. $com->fullName = 'BIALL-NET Sp. z o.o.';
  3119. $com->address_street = 'Otomin ul. Słoneczna 43';
  3120. $com->address_city = '80-174 Gdańsk';
  3121. }
  3122. ?>
  3123. <style type="text/css">
  3124. body{margin:12px;font-family:serif;font-size:11px;line-height:14px;}
  3125. td{font-family:verdana; font-size:10px; color:#333;}
  3126. table {border-style:none;}
  3127. table td, table th {padding:0 2px;border-collapse:collapse;}
  3128. table.tbl-bordered {border-style:none;}
  3129. table.tbl-bordered td, table.tbl-bordered th {padding:0 2px;border-style:solid;border-collapse:collapse;}
  3130. table.tbl-bordered th {border-width:1px;border-color:#333;}
  3131. table.tbl-bordered td {border-width:1px;border-color:#333;}
  3132. </style>
  3133. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;"><tr>
  3134. <td>[1612][v3]</td>
  3135. <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); ?>
  3136. <br />Gdańsk, dnia: .......................
  3137. </td>
  3138. </tr></table>
  3139. <br /><b>Dane Abonenta</b>
  3140. <br />Imię i Nazwisko / Nazwa firmy: <?php echo "{$user->P_NAME} {$user->P_NAME_SECOND}";?>
  3141. <br />Pesel / nr dowodu osoby reprezentującej firmę: <?php echo $user->P_PESEL; ?>
  3142. <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}"; ?>
  3143. <br />Nr ID klienta: <?php echo $user->ID; ?>
  3144. <br />Nr ID Umowy: <?php echo $deal_id; ?>
  3145. <?php
  3146. // <br />ID_SERVICES_OLD: ..........................................................
  3147. ?>
  3148. <table cellspacing="0" cellpadding="0" border="0" style="width:100%;margin:40px 0;"><tr>
  3149. <td>&nbsp;</td>
  3150. <td style="width:260px;text-align:left">
  3151. <?php echo $com->fullName; ?><br /><?php echo $com->address_street; ?><br /><?php echo $com->address_city; ?>
  3152. </td>
  3153. </tr></table>
  3154. <p style="margin:50px 0; text-align:center;">ROZWIĄZANIE UMOWY ABONENCKIEJ O ŚWIADCZENIE USŁUG TELEKOMUNIKACYJNYCH NR <sup>[794]</sup></p>
  3155. <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>
  3156. <p>Termin odłączenia: <?php echo $termin_odlaczenia; ?>
  3157. <br />(poinformowano o miesięcznym terminie wypowiedzenia, jak również przedstawiono nowe propozycje oferty)</p>
  3158. <p style="margin:30px 0;font-weight:bold;"><sup>[1061]</sup>Powody rezygnacji z Usług (wybierz tylko 1 najważniejszy powód)</p>
  3159. <table cellspacing="0" cellpadding="0" border="1" style="width:100%" class="tbl-bordered">
  3160. <?php foreach ($arg_values['powod'] as $k_powod => $v_label) : ?>
  3161. <?php $sel = ($powod == $k_powod)? "X" : "&nbsp;"; ?>
  3162. <tr><td style="width:26%;"><?php echo $v_label; ?></td><td style="width:5%;text-align:center;"> <?php echo $sel; ?> </td><td></td></tr>
  3163. <?php endforeach; ?>
  3164. </table>
  3165. <table cellspacing="0" cellpadding="0" border="0" style="margin:60px 0;width:100%;">
  3166. <tr>
  3167. <td style="width:15%;">&nbsp;</td>
  3168. <td style="width:20%;border-top:1px dotted #000;text-align:center;">
  3169. Data i podpis pracownika BOK
  3170. </td>
  3171. <td>&nbsp;</td>
  3172. <td style="width:20%;border-top:1px dotted #000;text-align:center;">
  3173. Data i czytelny podpis Klienta
  3174. </td>
  3175. <td style="width:15%;">&nbsp;</td>
  3176. </tr>
  3177. </table>
  3178. <?php
  3179. }
  3180. public static function task_bok_rozwiazanie_umowy(&$user) {
  3181. echo'<script type="text/javascript">'."
  3182. function frm_bok_rozwiazanie_umowy(frm){
  3183. if (frm.id_proj.value=='') {
  3184. alert('Nie podano numeru projektu!');
  3185. } else if (frm.nr_umowy.value=='') {
  3186. alert('Nie podano numeru umowy!');
  3187. } else if (frm.temin_odlaczenia.value=='') {
  3188. alert('Nie podano daty odłączenia!');
  3189. // TODO: powod - radio
  3190. } else {
  3191. return true;
  3192. }
  3193. return false;
  3194. }
  3195. ".'</script>';
  3196. $umowy_l2 = WindykacjaStatsModel::get_umowy_from_l2($user);
  3197. if (empty($umowy_l2)) {
  3198. echo '<p style="color:red">' . "Brak aktualnych umów z klientem" . '</p>';
  3199. return;
  3200. }
  3201. $arg_errors = array();
  3202. $arg_values = array();
  3203. $args = array();
  3204. $args['id_proj'] = V::get('id_proj', '', $_REQUEST, 'int');
  3205. $args['nr_umowy'] = V::get('nr_umowy', '', $_REQUEST, 'int');
  3206. $args['temin_odlaczenia'] = V::get('temin_odlaczenia', '', $_REQUEST);
  3207. $args['powod'] = V::get('powod', '', $_REQUEST, 'int');
  3208. $arg_values['nr_umowy'] = array();
  3209. foreach ($umowy_l2 as $k_id => $v_deal) {
  3210. $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'] . ')';
  3211. }
  3212. $arg_values['powod'] = self::getPowodyRezygnacji();
  3213. // validate
  3214. if ($args['temin_odlaczenia'] == '') {
  3215. $args['temin_odlaczenia'] = date("Y-m-d", mktime(0, 0, 0, date('m') + 1, date('d'), date('Y')));
  3216. } else {// cehck date format
  3217. if (strlen($args['temin_odlaczenia']) != 10) {
  3218. $arg_errors['temin_odlaczenia'] = "Błędny format daty";
  3219. } else {
  3220. $check_date = explode('-', $args['temin_odlaczenia']);
  3221. if (count($check_date) != 3 || strlen($check_date[0]) != 4 || strlen($check_date[1]) != 2 || strlen($check_date[2]) != 2) {
  3222. $arg_errors['temin_odlaczenia'] = "Błędny format daty";
  3223. } else {
  3224. // ok
  3225. }
  3226. }
  3227. }
  3228. if ($args['id_proj'] <= 0) {
  3229. $arg_errors['id_proj'] = "Nie podano numeru projektu!";
  3230. }
  3231. if ($args['nr_umowy'] <= 0) {
  3232. $arg_errors['nr_umowy'] = "Nie wybrano numeru umowy!";
  3233. }
  3234. if ($args['powod'] <= 0) {
  3235. $arg_errors['powod'] = "Nie wybrano powodu rezygnacji!";
  3236. }
  3237. // add rezygnacja z umowy
  3238. if (1 == V::get('contact_bok_rozwiazanie_umowy_save', 0, $_POST, 'int')) {
  3239. if (!empty($arg_errors)) {
  3240. echo '<p style="color:red">' . "W formularzy wystąpiły błędy:";
  3241. foreach ($arg_errors as $k_field => $v_err) {
  3242. echo '<br />' . $v_err;
  3243. }
  3244. echo '</p>';
  3245. } else {
  3246. $msg_log = array();
  3247. $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);
  3248. if ($ret) {
  3249. echo '<p style="color:green">' . "Dane zapisano pomyślnie" . '</p>';
  3250. if (!empty($msg_log)) {
  3251. echo '<p style="color:silver">' . implode('<br />', $msg_log) . '</p>';
  3252. }
  3253. $ico_print = '<img src="icon/print.gif" height="16" />';
  3254. 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>';
  3255. return;
  3256. } else {
  3257. echo '<p style="color:red">' . "Wystąpił błąd podczas zapisu danych" . '</p>';
  3258. if (!empty($msg_log)) {
  3259. echo '<p style="color:silver">' . implode('<br />', $msg_log) . '</p>';
  3260. }
  3261. }
  3262. }
  3263. }
  3264. echo'<form action="" method="post" onsubmit="' . "return frm_bok_rozwiazanie_umowy(this);" . '">';
  3265. echo'<input type="hidden" name="'."contact_bok_rozwiazanie_umowy_save".'" value="'."1".'" />';
  3266. echo '<b>' . "Rozwiązanie umowy abonenckiej o świadczenie usług telekomunikacyjnych" . '</b>';
  3267. echo '<br />' . "ID projektu: ";
  3268. echo '<input type="text" name="'."id_proj".'" value="' . $args['id_proj'] . '" class="i" />';
  3269. echo '<br />' . "Nr umowy: ";
  3270. foreach ($arg_values['nr_umowy'] as $k_id => $v_label) {
  3271. $sel = ($k_id == $args['nr_umowy'])? ' checked="checked"' : '';
  3272. echo '<br />' . "&nbsp;&nbsp;&nbsp;&nbsp;" . '<input type="radio" name="'."nr_umowy".'" value="' . $k_id . '" class="i" ' . $sel . ' />' . " " . $v_label;
  3273. }
  3274. echo '<br />' . "Termin odłączenia: ";
  3275. echo '<input type="text" name="'."temin_odlaczenia".'" value="' . $args['temin_odlaczenia']. '" class="i" />';
  3276. echo '<br />' . "Powód rezygnacji z usług: ";
  3277. foreach ($arg_values['powod'] as $k_id => $v_label) {
  3278. $sel = ($k_id == $args['powod'])? ' checked="checked"' : '';
  3279. echo '<br />' . "&nbsp;&nbsp;&nbsp;&nbsp;" . '<input type="radio" name="'."powod".'" value="' . $k_id . '" class="i" ' . $sel . ' />' . " " . $v_label;
  3280. }
  3281. echo '<br />' . '<input type="submit" value="'."zapisz".'" />';
  3282. echo'</form>';
  3283. }
  3284. }
  3285. class BillingDocs {
  3286. var $_docs;
  3287. var $_saldo;
  3288. public function __construct() {
  3289. $this->_docs = array();
  3290. $this->_saldo = 0;
  3291. }
  3292. public function add_bill_doc($data, $type, $h) {
  3293. $bill_doc = new BillingDoc($type, $h);
  3294. if ('FVAT' == $type && '0000-00-00' == $data) {
  3295. $data = $h['BILL_DATE'];
  3296. }
  3297. $this->_docs[$data][] = $bill_doc;
  3298. if ($data <= date("Y-m-d")) {
  3299. $this->_saldo += $bill_doc->get_saldo();
  3300. }
  3301. }
  3302. public function add_event($data, $type, $h) {
  3303. $event = new EventDoc($type, $h);
  3304. $this->_docs[$data][] = $event;
  3305. }
  3306. public function get_saldo() {
  3307. if (round($this->_saldo, 2) === 0.0) {// float point bug round('-6.821210263297E-13', 2) = -0
  3308. $this->_saldo = 0.0;
  3309. }
  3310. return round($this->_saldo, 2);
  3311. }
  3312. public function get_saldo_30_dni() {
  3313. // `PAY_SALDO_30_DNI` bez fv z terminem płatności < 30 dni
  3314. $saldo_30_dni = 0;
  3315. $dateMinus30dni = date('Y-m-d', mktime(0,0,0, date('n'), date('j') - 30, date('Y')));
  3316. foreach ($this->_docs as $kData => $vDocs) {
  3317. foreach ($vDocs as $vDoc) {
  3318. if ($vDoc instanceof BillingDoc) {
  3319. if ('FVAT' == $vDoc->get_type()) {// TODO: if FVAT then use only date PAYMENT_TERM >= 30 dni
  3320. if ($vDoc->get('PAYMENT_TERM') > $dateMinus30dni) {
  3321. //echo'<pre>POMIŃ! $vDoc pay_term('.$vDoc->get('PAYMENT_TERM').') ';print_r($vDoc);echo'</pre>';
  3322. } else {
  3323. //echo'<pre>$vDoc pay_term('.$vDoc->get('PAYMENT_TERM').'/'.($vDoc->get('PAYMENT_TERM') > $dateMinus30dni).') ';print_r($vDoc);echo'</pre>';
  3324. $saldo_30_dni += $vDoc->get_saldo();
  3325. }
  3326. } else {
  3327. $saldo_30_dni += $vDoc->get_saldo();
  3328. }
  3329. }
  3330. }
  3331. }
  3332. $saldo_30_dni = round($saldo_30_dni, 2);
  3333. if ($saldo_30_dni === 0.0) {// float point bug round('-6.821210263297E-13', 2) = -0
  3334. $saldo_30_dni = 0.0;
  3335. }
  3336. return $saldo_30_dni;
  3337. }
  3338. public function get_saldo_issued() {
  3339. // `PAY_SALDO_ISSUED` fv wg daty wystawienia
  3340. $saldo_issued = 0;
  3341. foreach ($this->_docs as $kData => $vDocs) {
  3342. foreach ($vDocs as $vDoc) {
  3343. if ($vDoc instanceof BillingDoc) {
  3344. if (1) {// TODO: if FVAT then use SELL_DATE instead of PAYMENT_TERM
  3345. $saldo_issued += $vDoc->get_saldo();
  3346. } else {
  3347. $saldo_issued += $vDoc->get_saldo();
  3348. }
  3349. }
  3350. }
  3351. }
  3352. $saldo_issued = round($saldo_issued, 2);
  3353. if ($saldo_issued === 0.0) {// float point bug round('-6.821210263297E-13', 2) = -0
  3354. $saldo_issued = 0.0;
  3355. }
  3356. return $saldo_issued;
  3357. }
  3358. public function get_docs() {
  3359. return $this->_docs;
  3360. }
  3361. public function sort_docs() {
  3362. ksort($this->_docs);
  3363. }
  3364. public function get_unpaid_fvat() {
  3365. $today_date = date("Y-m-d");
  3366. $fvat_arr = array();
  3367. $saldo_curr = $this->get_saldo();
  3368. if ($saldo_curr >= 0) {
  3369. return $fvat_arr;
  3370. }
  3371. $break = false;
  3372. $saldo_dates_keys = array_keys($this->_docs);
  3373. $saldo_dates_keys = array_reverse($saldo_dates_keys);
  3374. foreach ($saldo_dates_keys as $k_data) {
  3375. if ($k_data > $today_date) continue;
  3376. $v_saldo_arr = $this->_docs[$k_data];
  3377. foreach ($v_saldo_arr as $k_ind => $v_doc) {
  3378. if ($v_doc->get_type() == 'FVAT') {
  3379. $h = $v_doc->get_data();
  3380. $h['WINIEN_POZOSTALO'] = round($h['WINIEN'], 2);
  3381. $saldo_curr += round($h['WINIEN'], 2);
  3382. if ($saldo_curr >= 0) {
  3383. $h['WINIEN_POZOSTALO'] -= $saldo_curr;
  3384. $break = true;
  3385. }
  3386. $fvat_arr[] = $h;
  3387. }
  3388. if ($break) break;
  3389. }
  3390. if ($break) break;
  3391. }
  3392. return $fvat_arr;
  3393. }
  3394. public function getLastIncomeDocsForSaldo($saldoLimit) {
  3395. $today_date = date("Y-m-d");
  3396. $incomeDocs = array();
  3397. $break = false;
  3398. $saldo_dates_keys = array_keys($this->_docs);
  3399. $saldo_dates_keys = array_reverse($saldo_dates_keys);
  3400. $saldo_curr = 0;
  3401. foreach ($saldo_dates_keys as $k_data) {
  3402. if ($k_data > $today_date) continue;
  3403. $v_saldo_arr = $this->_docs[$k_data];
  3404. foreach ($v_saldo_arr as $k_ind => $v_doc) {
  3405. if (in_array($v_doc->get_type(), array('WB_MASS','KP'))) {
  3406. $h = $v_doc->get_data();
  3407. $h['MA_POZOSTALO'] = round($h['MA'], 2);
  3408. $saldo_curr += round($h['MA'], 2);
  3409. if ($saldo_curr >= $saldoLimit) {
  3410. $h['MA_POZOSTALO'] -= $saldo_curr - $saldoLimit;
  3411. $break = true;
  3412. }
  3413. $incomeDocs[] = $h;
  3414. }
  3415. if ($break) break;
  3416. }
  3417. if ($break) break;
  3418. }
  3419. return $incomeDocs;
  3420. }
  3421. public function get_last_pay_doc() {
  3422. $last_pay_doc = null;
  3423. $today_date = date("Y-m-d");
  3424. $break = false;
  3425. foreach ($this->_docs as $k_data => $v_saldo_arr) {
  3426. if ($k_data > $today_date) continue;
  3427. foreach ($v_saldo_arr as $k_ind => $v_doc) {
  3428. if (in_array($v_doc->get_type(), array('WB_MASS','KP'))) {
  3429. $last_pay_doc = $v_doc;
  3430. break;
  3431. }
  3432. }
  3433. if ($break) break;
  3434. }
  3435. return $last_pay_doc;
  3436. }
  3437. public function get_last_fvat_doc() {
  3438. $last_fvat_doc = null;
  3439. $today_date = date("Y-m-d");
  3440. $break = false;
  3441. foreach ($this->_docs as $k_data => $v_saldo_arr) {
  3442. if ($k_data > $today_date) continue;
  3443. foreach ($v_saldo_arr as $k_ind => $v_doc) {
  3444. if (in_array($v_doc->get_type(), array('FVAT'))) {
  3445. $last_fvat_doc = $v_doc;
  3446. break;
  3447. }
  3448. }
  3449. if ($break) break;
  3450. }
  3451. return $last_fvat_doc;
  3452. }
  3453. }
  3454. class TimelineDoc {
  3455. var $_type;
  3456. var $_data;
  3457. var $_class;
  3458. public function get_type() { return $this->_type; }
  3459. public function get_data() { return $this->_data; }
  3460. public function get_class() { return $this->_class; }
  3461. public function get($key) {
  3462. return $this->_data[$key];
  3463. }
  3464. }
  3465. class EventDoc extends TimelineDoc {
  3466. public function __construct($type, &$data) {
  3467. $this->_data = $data;
  3468. $this->_class = 'EVENT';
  3469. $this->_type = $type;
  3470. }
  3471. }
  3472. class BillingDoc extends TimelineDoc {
  3473. public function __construct($type, &$data) {
  3474. $this->_data = $data;
  3475. $this->_class = 'BILLING';
  3476. $this->_convert_type($type);
  3477. $this->_count_saldo();
  3478. }
  3479. public function get_saldo() {
  3480. return $this->_saldo;
  3481. }
  3482. public function get($key) {
  3483. return $this->_data[$key];
  3484. }
  3485. public function _convert_type($type) {
  3486. $this->_type = $type;
  3487. switch ($this->_type) {
  3488. case 'FVAT':
  3489. $this->_data['nr'] = $this->_data['ID_BILLING_NUMBERS'];
  3490. $this->_data['WINIEN'] = $this->_data['WARTOSC'];
  3491. $this->_data['MA'] = 0;
  3492. break;
  3493. case 'KP':
  3494. case 'KW':
  3495. case 'WB':
  3496. case 'WB_MASS':
  3497. case 'KORV':
  3498. $this->_data['nr'] = $this->_data['NUMBER'];
  3499. break;
  3500. default:
  3501. }
  3502. }
  3503. public function _count_saldo() {
  3504. $this->_saldo = 0;
  3505. switch ($this->_type) {
  3506. case 'FVAT':
  3507. $this->_saldo -= round($this->_data['WARTOSC'], 2);
  3508. break;
  3509. case 'KORV':
  3510. $this->_saldo -= round($this->_data['MA'], 2);
  3511. break;
  3512. case 'KP':
  3513. case 'KW':
  3514. case 'WB':
  3515. case 'WB_MASS':
  3516. $this->_saldo += round($this->_data['MA'], 2);
  3517. $this->_saldo -= round($this->_data['WINIEN'], 2);
  3518. break;
  3519. default:
  3520. }
  3521. }
  3522. }
  3523. class WindykacjaStatsHelper {
  3524. // TODO: `A_RECORD_UPDATE_DATE` aktualizowane tylko wraz ze statusem
  3525. // TODO: statusy:
  3526. // 1. Automatyczne wysłanie powiadomień do Abonentów o niezapłaconych fakturach drogą e-mailową
  3527. // 5 dni roboczych po 10-go na okolo 5 dni przed blokadami
  3528. // - blokada: ??? dni po ostatniej dacie platnosci - odczytac czy zablokowany z l2?
  3529. // - 1 list - wezwanie - jesli min. 2 faktury - czyli 2 m-ce od 1 daty platnosci
  3530. // - 2 list - wezwanie ostateczne - min. 300 zł
  3531. public static function get_filter_selected() {
  3532. $filter_selected = V::get('_f', '', $_GET);
  3533. $filter_arr = self::get_filters();
  3534. $filter_selected = (array_key_exists($filter_selected, $filter_arr))? $filter_selected : '';
  3535. return $filter_selected;
  3536. }
  3537. public static function get_filter_selected_label() {
  3538. $fltrLabel = '';
  3539. $fltrSelected = self::get_filter_selected();
  3540. if (!empty($fltrSelected)) {
  3541. $fltrs = self::get_filters();
  3542. $fltrLabel = V::get($fltrSelected, '', $fltrs);
  3543. $fltrLabel = V::get(0, '', $fltrLabel);
  3544. }
  3545. return $fltrLabel;
  3546. }
  3547. public static function get_filters() {
  3548. $filter_arr['stan_zero'] = array("stan zerowy");
  3549. $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"));
  3550. $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
  3551. $filter_arr['15'] = array("mail ponaglenie", 'desc'=>array("10-ego + 5", "10-ego + 5 dni roboczych"));
  3552. $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
  3553. $filter_arr['tel1'] = array("kontakt tel.", 'desc'=>array("", "Ostatni kontakt tel. ponad 3 m-ce temu"));
  3554. $filter_arr['bad_address'] = array("błędny adres");
  3555. $filter_arr['wezwanie1'] = array("wezwanie do zapłaty", 'desc'=>array("2 x FVat", "2 faktury"));
  3556. $filter_arr['waiting-wezwanie2'] = array("oczekiwanie 7 dni od terminu płatności");
  3557. $filter_arr['wezwanie2'] = array("ostateczne wezwanie do zapłaty, rozwiązanie umowy", 'desc'=>array("wezwanie + 14", "wezwanie + 14 dni"));
  3558. $filter_arr['waiting-krd'] = array("min. 30 dni od ostatecznego wezwania");
  3559. $filter_arr['krd'] = array("do przekazania do KRD", 'desc'=>array("wezwanie ost. + 60", "wezwanie ost. + 60 dni"));
  3560. $filter_arr['waiting-sad'] = array("przekazano do KRD");
  3561. $filter_arr['docs-in-sad'] = array("przekazać sprawę do sądu");// waiting-sad = 30 dni
  3562. $filter_arr['sad'] = array("przekazano sprawę do sądu");
  3563. $filter_arr['3 m-ce przed'] = array("3 m-ce przed przedawnieniem");// 3 m-ce przed przedawnieniem
  3564. $filter_arr['po-terminie'] = array("po terminie");// 3 lata po dacie platnosci faktur
  3565. $filter_arr['has_nr_sad'] = array("nr sprawy sąd");
  3566. $filter_arr['has_nr_komornik'] = array("nr sprawy komornik");
  3567. $filter_arr['has_ustalenia'] = array("ustalenia z klientem");
  3568. $filter_arr['sad_and_komornik'] = array("sąd z komornik");
  3569. $filter_arr['sad_bez_komornik'] = array("sąd bez komornik");
  3570. $filter_arr['isMovedToVectra'] = array("przeniesieni do Vectra");
  3571. return $filter_arr;
  3572. }
  3573. public static function get_by_user(&$user) {
  3574. $db = DB::getDB();
  3575. $sql = "select * from `USERS2_WINDYKACJA_STATUS` as w where w.`ID_BILLING_USERS`='{$user->ID}' ";
  3576. $res = $db->query($sql);
  3577. $ret = $db->fetch($res);
  3578. return $ret;
  3579. }
  3580. /**
  3581. * Auto update user stats.
  3582. *
  3583. * @returns boolean - status changed or not
  3584. * @param $user - object return from function WindykacjaStatsModel::get_user_by_id
  3585. * @param $billing_docs - user billing docs
  3586. *
  3587. * @used in task_update_stats - for all users
  3588. * @used in WindykacjaView::user_historia_platnosci after view billing docs
  3589. *
  3590. * save HIST at status change to WAITING
  3591. */
  3592. public static function update_stats(&$user, &$billing_docs) {
  3593. $data_arr = array();
  3594. if (!V::get('DBG_LAST_FVAT_PAY_TERM', '', $_GET)) {
  3595. if ($user->A_STATUS_UPDATE_DATE >= date("Y-m-d")) {
  3596. return;
  3597. }
  3598. }
  3599. self::updateUserKoresp($user);
  3600. $saldo = $billing_docs->get_saldo();
  3601. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");
  3602. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  3603. $data_arr["A_RECORD_UPDATE_AUTHOR"] = "stat-update";
  3604. $company = WindykacjaStatsModel::get_company($user);
  3605. $nr_konta = FunkcjeL1::bankowy_make_nrach($company->NR_RACH_MASS_PAY, $user->ID_BILLING_USERS, 0);
  3606. $data_arr["ACCOUNT_NUMBER"] = $nr_konta;
  3607. $data_arr["SERVICES_STREETS"] = WindykacjaStatsModel::getAllServicesStreetsCSV($user);
  3608. // set default values
  3609. //$data_arr["A_STATUS"] = "WAITING";
  3610. //$data_arr["PAY_FVAT"] = 0;
  3611. //$data_arr["PAY_DATE"] = "0000-00-00";
  3612. // update values
  3613. {// LAST_PAY_DATE
  3614. $lastPayDoc = $billing_docs->get_last_pay_doc();
  3615. if ($lastPayDoc) {
  3616. $data_arr["LAST_PAY_DATE"] = $lastPayDoc->get('BILL_DATE');
  3617. $data_arr["LAST_PAY_VALUE"] = $lastPayDoc->get('MA');
  3618. if(V::get('DBG_LAST_FVAT_PAY_TERM', '', $_GET)){echo'<pre>lastPayDoc: ';print_r($lastPayDoc);echo'</pre>';}
  3619. }
  3620. }
  3621. $data_arr["PAY_SALDO"] = $saldo;
  3622. $data_arr["PAY_SALDO_30_DNI"] = $billing_docs->get_saldo_30_dni();
  3623. $data_arr["PAY_SALDO_ISSUED"] = $billing_docs->get_saldo_issued();
  3624. $data_arr["PAY_FVAT"] = 0;
  3625. $data_arr["PAY_DATE_FIRST_FVAT"] = '0000-00-00';
  3626. $lastFvatDoc = $billing_docs->get_last_fvat_doc();
  3627. if(V::get('DBG_LAST_FVAT_PAY_TERM', '', $_GET)){echo'<pre>lastFvatDoc: ';print_r($lastFvatDoc);echo'</pre>';}
  3628. if ($lastFvatDoc) {
  3629. $data_arr["LAST_FVAT_PAY_TERM"] = $lastFvatDoc->get('PAYMENT_TERM');
  3630. $data_arr["LAST_FVAT_SELL_DATE"] = $lastFvatDoc->get('SELL_DATE');
  3631. $data_arr["LAST_FVAT_VALUE"] = $lastFvatDoc->get('WINIEN');
  3632. }
  3633. if ($saldo <= -0.05) {
  3634. $fvat_arr = $billing_docs->get_unpaid_fvat();
  3635. $data_arr["PAY_FVAT"] = count($fvat_arr);
  3636. if (count($fvat_arr) > 0) {
  3637. foreach ($fvat_arr as $v_fvat) {
  3638. if (!isset($data_arr["PAY_DATE"]) || $v_fvat['PAYMENT_TERM'] > $data_arr["PAY_DATE"]) {
  3639. $data_arr["PAY_DATE"] = $v_fvat['PAYMENT_TERM'];
  3640. }
  3641. if ('0000-00-00' == $data_arr["PAY_DATE_FIRST_FVAT"] || $v_fvat['PAYMENT_TERM'] < $data_arr["PAY_DATE_FIRST_FVAT"]) {
  3642. $data_arr["PAY_DATE_FIRST_FVAT"] = $v_fvat['PAYMENT_TERM'];
  3643. }
  3644. }
  3645. }
  3646. }
  3647. // zmiana statusu na kolejny wg. salda
  3648. switch ($user->A_STATUS) {
  3649. case 'WAITING':// auto
  3650. if ($user->wezwanie1_DATE == '0000-00-00') {
  3651. if ($saldo <= -0.05) {
  3652. $fvat_arr = $billing_docs->get_unpaid_fvat();
  3653. if (count($fvat_arr) > 1) {
  3654. $data_arr["A_STATUS"] = "wezwanie1";
  3655. }
  3656. }
  3657. }
  3658. else if ($user->wezwanie2_DATE == '0000-00-00') {
  3659. $data_arr["A_STATUS"] = "waiting-wezwanie2";
  3660. }
  3661. else {
  3662. $data_arr["A_STATUS"] = "wezwanie2";
  3663. }
  3664. break;
  3665. case 'wezwanie1':// wymaga `PAY_TERM`, `wezwanie1_DATE`, `ID_KORESP`
  3666. break;
  3667. case 'waiting-wezwanie2':// auto -> wezwanie2
  3668. if ($user->wezwanie2_DATE == '0000-00-00') {
  3669. $payTermArr = explode('-', $user->PAY_TERM);// Y-m-d
  3670. $payTermPlus7dni = date("Y-m-d", mktime(0,0,0, intval($payTermArr[1]), intval($payTermArr[2]) + 7, intval($payTermArr[0])));
  3671. // TODO: data +7 dni od terminu płatności (PAY_TERM) / mktime ($user->PAY_TERM + 7 dni)
  3672. if ($user->PAY_TERM != '0000-00-00' && $payTermPlus7dni < date('Y-m-d')) {
  3673. $data_arr["A_STATUS"] = "wezwanie2";
  3674. }
  3675. }
  3676. break;
  3677. case 'wezwanie2':// wymaga `PAY_TERM`, `wezwanie2_DATE`, `ID_KORESP`
  3678. break;
  3679. case 'waiting-krd':// auto -> krd jesli minelo 30 dni od wystawienia wezwanie2
  3680. if ($user->wezwanie2_DATE != '0000-00-00') {
  3681. $wzw2 = new stdClass();
  3682. $wzw2->Y = intval(substr($user->wezwanie2_DATE, 0, 4));
  3683. $wzw2->m = intval(substr($user->wezwanie2_DATE, 5, 2));
  3684. $wzw2->d = intval(substr($user->wezwanie2_DATE, 8, 2));
  3685. $wzw2->plus_30 = date("Y-m-d", mktime(0,0,0, $wzw2->m, $wzw2->d + 30, $wzw2->Y));
  3686. if ($wzw2->plus_30 < date("Y-m-d")) {
  3687. $data_arr["A_STATUS"] = "krd";
  3688. }
  3689. }
  3690. break;
  3691. case 'waiting-sad':// auto -> sad jesli minelo 30 dni od wpisania do krd (wpis_w_krd_DATE)
  3692. if ($user->wpis_w_krd_DATE != '0000-00-00') {
  3693. $krdDate = new stdClass();
  3694. $krdDate->Y = intval(substr($user->wpis_w_krd_DATE, 0, 4));
  3695. $krdDate->m = intval(substr($user->wpis_w_krd_DATE, 5, 2));
  3696. $krdDate->d = intval(substr($user->wpis_w_krd_DATE, 8, 2));
  3697. $krdDate->plus_30 = date("Y-m-d", mktime(0,0,0, $krdDate->m, $krdDate->d + 30, $krdDate->Y));
  3698. if ($krdDate->plus_30 < date("Y-m-d")) {
  3699. $data_arr["A_STATUS"] = "docs-in-sad";
  3700. }
  3701. }
  3702. break;
  3703. default:
  3704. }
  3705. // zmiana statusu na czysty - WAITING
  3706. if ($saldo > -0.05 || $data_arr["PAY_FVAT"] < 2) {
  3707. if (!in_array($user->A_STATUS, array('waiting-sad', 'docs-in-sad', 'sad'))) {
  3708. $data_arr["A_STATUS"] = "WAITING";
  3709. $data_arr["wezwanie2_DATE"] = '0000-00-00';
  3710. $data_arr["wezwanie1_DATE"] = '0000-00-00';
  3711. //$data_arr["PAY_DATE"] = '0000-00-00';// TODO: ?
  3712. }
  3713. }
  3714. {
  3715. $hasActiveNET = 0;
  3716. $hasActiveTV = 0;
  3717. $isMovedToVectra = 0;
  3718. $db = DB::getDB();
  3719. $idUser = $user->ID;
  3720. $sql = "
  3721. select
  3722. IF(1 = (
  3723. select 1 as hasActiveNET
  3724. from `SERVICES` srv
  3725. where srv.`ID_BILLING_USERS`='{$idUser}'
  3726. and srv.`NAME_LIST_SERVICES`='USERS2'
  3727. and 'NORMAL'=A_STATUS_L2_SQL_L1(srv.`ID`)
  3728. limit 1
  3729. ), 1, 0) as hasActiveNET
  3730. ,
  3731. IF(1 = (
  3732. select 1 as hasActiveTV
  3733. from `SERVICES` srv
  3734. where srv.`ID_BILLING_USERS`='{$idUser}'
  3735. and srv.`NAME_LIST_SERVICES`='TV'
  3736. and 'NORMAL'=A_STATUS_L2_SQL_L1(srv.`ID`)
  3737. limit 1
  3738. ), 1, 0) as hasActiveTV
  3739. ,
  3740. IF(1 = ('REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA'=(select `RODZAJ_DZIALANIA_HANDLOWEGO`
  3741. from `DEALS_TABLE`
  3742. where `A_STATUS`='NORMAL'
  3743. and `ID_BILLING_USERS`='{$user->ID}'
  3744. order by `ID` DESC
  3745. limit 1)
  3746. ), 1, 0) as IS_MOVED_TO_VECTRA
  3747. ";
  3748. DBG::_('DBG_ACTIVE_SRV', '>2', "DBG_ACTIVE_SRV sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  3749. $res = $db->query($sql);
  3750. if ($r = $db->fetch($res)) {
  3751. DBG::_('DBG_ACTIVE_SRV', '>2', "r", $r, __CLASS__, __FUNCTION__, __LINE__);
  3752. $hasActiveNET = V::get('hasActiveNET', '', $r);
  3753. $hasActiveTV = V::get('hasActiveTV', '', $r);
  3754. $isMovedToVectra = V::get('IS_MOVED_TO_VECTRA', '', $r);
  3755. }
  3756. $data_arr['HAS_ACTIVE_NET'] = $hasActiveNET;
  3757. $data_arr['HAS_ACTIVE_TV'] = $hasActiveTV;
  3758. $data_arr['IS_MOVED_TO_VECTRA'] = $isMovedToVectra;
  3759. DBG::_('DBG_ACTIVE_SRV', '>2', "data_arr", $data_arr, __CLASS__, __FUNCTION__, __LINE__);
  3760. }
  3761. if(V::get('DBG_LAST_FVAT_PAY_TERM', '', $_GET)){echo'<pre>data_arr #' . __LINE__ . ': ';print_r($data_arr);echo'</pre>';}
  3762. $sql_arr = array();
  3763. foreach ($data_arr as $k => $v) {
  3764. $sql_arr[] = "`{$k}`='{$v}'";
  3765. }
  3766. $db = DB::getDB();
  3767. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ; ";
  3768. $db->query($sql);
  3769. // update HIST - tylko zmiana na WAITING - powrót do oczekujących
  3770. if (isset($data_arr["A_STATUS"]) && $data_arr["A_STATUS"] == "WAITING" && $user->A_STATUS != "WAITING") {
  3771. $sql_arr = array();
  3772. foreach ($data_arr as $k => $v) {
  3773. $sql_arr["`{$k}`"] = "'{$v}'";
  3774. }
  3775. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  3776. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  3777. $db->query($sql);
  3778. }
  3779. }
  3780. public static function updateUserKoresp($user) {
  3781. //echo'<pre>TODO: updateUserKoresp: ';print_r($user);echo'</pre>';
  3782. $sql = <<<SQL
  3783. insert into `USERS2_WINDYKACJA_STATUS_HIST` (
  3784. `A_RECORD_UPDATE_DATE`
  3785. , `A_RECORD_UPDATE_AUTHOR`
  3786. , `ID_USERS2`
  3787. , `ID_KORESP`
  3788. , `A_STATUS_UPDATE_DATE`
  3789. )
  3790. select
  3791. NOW() as `A_RECORD_UPDATE_DATE`
  3792. , 'auto-update-koresp-hist' as `A_RECORD_UPDATE_AUTHOR`
  3793. , w.`ID` as `ID_USERS2`
  3794. , k.`ID` as `ID_KORESP`
  3795. , k.`K_DATA_OTRZYM_KORESP` as `A_STATUS_UPDATE_DATE`
  3796. from `USERS2_WINDYKACJA_STATUS` w
  3797. join `IN7_DZIENNIK_KORESP` k on (k.`ID_BILLING_USERS`=w.`ID_BILLING_USERS`)
  3798. left join `USERS2_WINDYKACJA_STATUS_HIST` h on (h.`ID_USERS2`=w.`ID` and h.`ID_KORESP`=k.`ID`)
  3799. where 1=1
  3800. and h.ID is null
  3801. and w.`ID_BILLING_USERS`={$user->ID_BILLING_USERS}
  3802. SQL;
  3803. $db = DB::getDB();
  3804. $db->query($sql);
  3805. //echo'<pre>TODO: updateUserKoresp: last insert_id: ';print_r($db->insert_id());echo'</pre>';
  3806. }
  3807. public static function &get_phone_status_array(&$user) {
  3808. $ret = array();
  3809. $status_info = self::get_phone_status_info($user);
  3810. foreach ($status_info as $k => $v) {
  3811. $ret[$k] = $v['label'];
  3812. }
  3813. return $ret;
  3814. }
  3815. /**
  3816. * @param $user
  3817. *
  3818. * @returns array of 'label', 'date' -> nowy PAY_TERM ustalony wg. aktualnego stanu
  3819. */
  3820. public static function get_phone_status_info($user) {
  3821. $ret = array();
  3822. $ret['nie_zaplaci'] = array('label'=>"nie zapłaci", 'date'=>'');
  3823. $today = date("Y-m-d");
  3824. $date = date("Y-m-d");
  3825. {// PAY_TERM jesli jest ustalony np. z wewaznie1 lub wezwanie2
  3826. if ($user->PAY_TERM != '0000-00-00') {
  3827. if ($user->PAY_TERM > $today) {
  3828. // jest już ustalona data platnosci na przyszłość
  3829. $date = $user->PAY_TERM;
  3830. }
  3831. }
  3832. }
  3833. if ($date > $today) {// data platnosci w przyszlosci -> ok
  3834. {// zapłaci w terminie today +14 dni lub PAY_TERM jesli jest ustalony np. z wewaznie1 lub wezwanie2
  3835. $ret['zaplaci_w_terminie'] = array('label'=>"zapłaci w terminie", 'date'=>$date);
  3836. }
  3837. }
  3838. else {// data platnosci w przeszlosci - przeterminowana -> ustalic nowa (+14,+1mc,+2mc,+3mc)
  3839. {// zapłaci w terminie today +14 dni lub PAY_TERM jesli jest ustalony np. z wewaznie1 lub wezwanie2
  3840. $date = date("Y-m-d", mktime(0,0,0,date('m'), date('d') + 14, date('Y')));
  3841. $ret['zaplaci_w_terminie'] = array('label'=>"zapłaci w terminie", 'date'=>$date);
  3842. }
  3843. {// zaplaci za 1-mc pozniej
  3844. $date = date("Y-m-d", mktime(0,0,0,date('m') + 1, date('d'), date('Y')));
  3845. $ret['zaplaci_za_1mc'] = array('label'=>"zapłaci miesiąc później", 'date'=>$date);
  3846. }
  3847. {// zaplaci za 2-mce pozniej
  3848. $date = date("Y-m-d", mktime(0,0,0,date('m') + 2, date('d'), date('Y')));
  3849. $ret['zaplaci_za_2mc'] = array('label'=>"zapłaci 2 miesiące później", 'date'=>$date);
  3850. }
  3851. {// zaplaci za 3-mce pozniej
  3852. $date = date("Y-m-d", mktime(0,0,0,date('m') + 3, date('d'), date('Y')));
  3853. $ret['zaplaci_za_3mc'] = array('label'=>"zapłaci 3 miesiące później", 'date'=>$date);
  3854. }
  3855. }
  3856. $ret['nie_odbiera'] = array('label'=>"nie obiera lub wyłączony telefon", 'date'=>'');
  3857. $ret['zly_numer'] = array('label'=>"zły numer telefonu", 'date'=>'');
  3858. return $ret;
  3859. }
  3860. public static function get_sms_status_info($user, $terminPlatnosci = '') {
  3861. $ret = array();
  3862. $today = date("Y-m-d");
  3863. $due_date = $user->PAY_TERM;// ustalowny pay term
  3864. $zaleglosc = number_format($user->PAY_SALDO, 2, ',', '');
  3865. if ($user->PAY_SALDO <= -0.05) {
  3866. $msg = "Twoje saldo na dzien {$today} wynosi {$zaleglosc} zl.\n";
  3867. if (strlen($terminPlatnosci) == 10 && $terminPlatnosci > date("Y-m-d")) {
  3868. $msg .= "Prosimy o uregulowanie w/w zaleglosci w terminie do {$terminPlatnosci}.";
  3869. } else {
  3870. $msg .= "Prosimy o niezwloczne uregulowanie zaleglosci.";
  3871. }
  3872. if ($due_date > $today) {
  3873. // $msg .= "Prosimy o uregulowanie zaleglosci do dnia {$due_date} r.";
  3874. } else {
  3875. }
  3876. $ret['Powiadomienie SMS o zaleglosciach'] = array('label'=>"Windykacja: Powiadomienie SMS o zaleglosciach", 'msg'=>$msg);
  3877. // Z powodu niedotrzymania terminu płatności nastąpi blokada usług. Dowód wpłaty w kwocie #Saldo# zł prosimy przesłać na bok@biall.net.pl. Szczegóły 587277777.
  3878. $doZaplaty = number_format(-1 * $user->PAY_SALDO, 2, ',', '');
  3879. $msgBlokada = "Z powodu niedotrzymania terminu platnosci nastapi blokada uslug. Dowod wplaty w kwocie {$doZaplaty} zl prosimy przeslac na bok@biall.net.pl. Szczegoly 587277777.";
  3880. $ret['Powiadomienie SMS o blokadzie'] = array('label'=>"Windykacja: Powiadomienie SMS o blokadzie", 'msg'=>$msgBlokada);
  3881. }
  3882. return $ret;
  3883. }
  3884. /*
  3885. <html><body>Informujemy Pana/Pania o zalegosci w platnosciach w wysokosci 109.16 zl. Prosimy o uregulowanie w/w zaleglosci w terminie do 31.03.2015 r.<br>W przypadku watpliwosci prosimy o kontakt z Biurem Obslugi Klienta. <p>BIALL-NET Sp. z o.o. <br><br>Biuro Obslugi Klienta:<br>tel. 58 741 84 10<br>fax 58 741 84 30</body></html>
  3886. */
  3887. public static function get_mail_status_info($user, $terminPlatnosci = '') {
  3888. $ret = array();
  3889. $today = date("Y-m-d");
  3890. $due_date = $user->PAY_TERM;// ustalowny pay term
  3891. $zaleglosc = number_format(abs($user->PAY_SALDO), 2, ',', '');
  3892. if ($user->PAY_SALDO <= -0.05) {
  3893. $msg = "Informujemy Pana/Pania o zalegosci w platnosciach w wysokosci {$zaleglosc} zl.\n";
  3894. if (strlen($terminPlatnosci) == 10 && $terminPlatnosci > date("Y-m-d")) {
  3895. $msg .= "Prosimy o uregulowanie w/w zaleglosci w terminie do {$terminPlatnosci}.";
  3896. } else {
  3897. $msg .= "Prosimy o niezwloczne uregulowanie zaleglosci.";
  3898. }
  3899. $msg .= "<br>W przypadku watpliwosci prosimy o kontakt z Biurem Obslugi Klienta.";
  3900. $msg .= "<p>BIALL-NET Sp. z o.o.</p>";
  3901. if ($due_date > $today) {
  3902. // $msg .= "Prosimy o uregulowanie zaleglosci do dnia {$due_date} r.";
  3903. } else {
  3904. }
  3905. $ret['Powiadomienie o zaleglosciach'] = array('label'=>"Windykacja: Powiadomienie o zaleglosciach", 'msg'=>$msg);
  3906. }
  3907. return $ret;
  3908. }
  3909. /**
  3910. * Update user phone status.
  3911. *
  3912. * @returns boolean - status changed or not
  3913. * @param $user - object return from function WindykacjaStatsModel::get_user_by_id
  3914. * @param $phone_status - phone status
  3915. *
  3916. */
  3917. public static function update_phone_status($user, $phone_status) {
  3918. $data_arr = array();
  3919. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  3920. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  3921. $data_arr["LAST_PHONE_STATUS"] = $phone_status;
  3922. $data_arr["LAST_PHONE_STATUS_DATE"] = date("Y-m-d");
  3923. $status_info = self::get_phone_status_info($user);
  3924. if (array_key_exists($phone_status, $status_info)) {
  3925. $date = V::get('date', '', $status_info[$phone_status]);
  3926. if ($date != '' && $date != '0000-00-00') {
  3927. $data_arr["PAY_TERM"] = $date;
  3928. }
  3929. }
  3930. $sql_arr = array();
  3931. foreach ($data_arr as $k => $v) {
  3932. $sql_arr[] = "`{$k}`='{$v}'";
  3933. }
  3934. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ; ";
  3935. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  3936. DB::query($sql);
  3937. // update HIST
  3938. //if (DB::affected()) {
  3939. $sql_arr = array();
  3940. foreach ($data_arr as $k => $v) {
  3941. $sql_arr["`{$k}`"] = "'{$v}'";
  3942. }
  3943. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  3944. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  3945. DB::query($sql);
  3946. //}
  3947. return true;
  3948. }
  3949. public static function update_sms_status($user, $sms_status) {
  3950. $data_arr = array();
  3951. $status_info = self::get_sms_status_info($user);
  3952. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">$sms_status ';print_r($sms_status);echo'</pre>';
  3953. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">$status_info ';print_r($status_info);echo'</pre>';
  3954. if (!array_key_exists($sms_status, $status_info)) {
  3955. echo '<div class="alert alert-danger">Nieznany status!</div>';
  3956. return false;
  3957. }
  3958. $db_webone = DB::getDB('931');
  3959. if (!$db_webone) {
  3960. echo '<div class="alert alert-danger">Brak połączenia do bazy billing!</div>';
  3961. return false;
  3962. }
  3963. $sqlArr = array();
  3964. $sqlArr["`ID_BILLING_USERS`"] = $user->ID;
  3965. $sqlArr["`SUBJECT`"] = "'{$status_info[$sms_status]['label']}'";
  3966. $sqlArr["`BODY_HTML`"] = "'{$status_info[$sms_status]['msg']}'";
  3967. $sqlArr["`REQUEST_STATUS_SMS`"] = "'SENT_SMS'";
  3968. $sql = "insert into `HIST_CONTACTS` (" . implode(",", array_keys($sqlArr)) . ")
  3969. values (" . implode(",", array_values($sqlArr)) . ");";
  3970. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">sql ';print_r($sql);echo'</pre>';
  3971. //echo'TODO: TEST...';return true;
  3972. $db_webone->query($sql);
  3973. $msgId = $db_webone->insert_id();
  3974. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">$msgId ';print_r($msgId);echo'</pre>';
  3975. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  3976. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  3977. $data_arr["LAST_SMS_MSG_ID"] = $msgId;
  3978. $data_arr["LAST_SMS_STATUS"] = $sms_status;
  3979. $data_arr["LAST_PHONE_STATUS_DATE"] = date("Y-m-d");
  3980. if (array_key_exists($sms_status, $status_info)) {
  3981. $date = V::get('date', '', $status_info[$sms_status]);
  3982. if ($date != '' && $date != '0000-00-00') {
  3983. $data_arr["PAY_TERM"] = $date;
  3984. }
  3985. }
  3986. $sql_arr = array();
  3987. foreach ($data_arr as $k => $v) {
  3988. $sql_arr[] = "`{$k}`='{$v}'";
  3989. }
  3990. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ; ";
  3991. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  3992. DB::query($sql);
  3993. // update HIST
  3994. //if (DB::affected()) {
  3995. $sql_arr = array();
  3996. foreach ($data_arr as $k => $v) {
  3997. $sql_arr["`{$k}`"] = "'{$v}'";
  3998. }
  3999. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  4000. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  4001. DB::query($sql);
  4002. //}
  4003. return true;
  4004. }
  4005. public static function update_mail_status($user, $mail_status) {
  4006. $data_arr = array();
  4007. $status_info = self::get_mail_status_info($user);
  4008. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">$mail_status ';print_r($mail_status);echo'</pre>';
  4009. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">$status_info ';print_r($status_info);echo'</pre>';
  4010. if (!array_key_exists($mail_status, $status_info)) {
  4011. echo '<div class="alert alert-danger">Nieznany status!</div>';
  4012. return false;
  4013. }
  4014. $db_webone = DB::getDB('931');
  4015. if (!$db_webone) {
  4016. echo '<div class="alert alert-danger">Brak połączenia do bazy billing!</div>';
  4017. return false;
  4018. }
  4019. $sqlArr = array();
  4020. $sqlArr["`ID_BILLING_USERS`"] = $user->ID;
  4021. $sqlArr["`SUBJECT`"] = "'{$status_info[$mail_status]['label']}'";
  4022. $sqlArr["`BODY_HTML`"] = "'<html><body>{$status_info[$mail_status]['msg']}</body></html>'";
  4023. $sqlArr["`REQUEST_STATUS_MAIL`"] = "'CONFIRM_SENT_MAIL'";
  4024. $sql = "insert into `HIST_CONTACTS` (" . implode(",", array_keys($sqlArr)) . ")
  4025. values (" . implode(",", array_values($sqlArr)) . ");";
  4026. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">sql ';print_r($sql);echo'</pre>';
  4027. //echo'TODO: TEST...';return true;
  4028. $db_webone->query($sql);
  4029. $msgId = $db_webone->insert_id();
  4030. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">$msgId ';print_r($msgId);echo'</pre>';
  4031. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4032. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4033. $data_arr["LAST_MAIL_MSG_ID"] = $msgId;
  4034. $data_arr["LAST_MAIL_STATUS"] = $mail_status;
  4035. $data_arr["LAST_PHONE_STATUS_DATE"] = date("Y-m-d");
  4036. if (array_key_exists($mail_status, $status_info)) {
  4037. $date = V::get('date', '', $status_info[$mail_status]);
  4038. if ($date != '' && $date != '0000-00-00') {
  4039. $data_arr["PAY_TERM"] = $date;
  4040. }
  4041. }
  4042. $sql_arr = array();
  4043. foreach ($data_arr as $k => $v) {
  4044. $sql_arr[] = "`{$k}`='{$v}'";
  4045. }
  4046. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ; ";
  4047. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  4048. DB::query($sql);
  4049. // update HIST
  4050. //if (DB::affected()) {
  4051. $sql_arr = array();
  4052. foreach ($data_arr as $k => $v) {
  4053. $sql_arr["`{$k}`"] = "'{$v}'";
  4054. }
  4055. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  4056. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  4057. DB::query($sql);
  4058. //}
  4059. return true;
  4060. }
  4061. public static function update_old_id_koresp(&$user, $id_koresp, $koresp_type) {
  4062. $db = DB::getDB();
  4063. $koresp = DB::get_by_id('IN7_DZIENNIK_KORESP', $id_koresp);
  4064. if (!$koresp) {
  4065. return false;
  4066. }
  4067. // check if ID koresp already exists in HIST table!
  4068. $sql = "select wh.`ID`,wh.``,wh.`` from `USERS2_WINDYKACJA_STATUS_HIST` as wh where ";
  4069. $data_arr = array();
  4070. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4071. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4072. $data_arr["ID_USERS2"] = $user->WINDYKACJA_ID;
  4073. $data_arr["ID_KORESP"] = $id_koresp;
  4074. //$data_arr["A_STATUS_UPDATE_DATE"] = $koresp->K_DATA_OTRZYMANEJ_KORESP;// data utworzenia
  4075. $data_arr["A_STATUS_UPDATE_DATE"] = $koresp->K_DATA_OTRZYM_KORESP;// data wyslania
  4076. // $koresp_type ?
  4077. // update HIST
  4078. $sql_arr = array();
  4079. foreach ($data_arr as $k => $v) {
  4080. $sql_arr["`{$k}`"] = "'{$v}'";
  4081. }
  4082. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  4083. $db->query($sql);
  4084. return true;
  4085. }
  4086. /**
  4087. * @returns int - ID Koresp or null if error
  4088. */
  4089. public static function update_bok_rozwiazanie_umowy(&$user, $id_proj, $nr_umowy, $powod, $powod_desc, $termin_odlaczenia, &$msg_log) {
  4090. $data_arr = array();
  4091. if ($id_proj > 0 && $nr_umowy > 0 && $powod != '') {
  4092. $new_id_deals = WindykacjaStatsModel::create_deals_rozwiazanie($user->ID, $nr_umowy, $termin_odlaczenia, $powod_desc);
  4093. if (!$new_id_deals) {
  4094. $msg_log[] = "Nie udało się utworzyć rekordu w DEALS_TABLE";
  4095. return null;
  4096. }
  4097. $msg_log[] = "Utworzonno rekord w DEALS_TABLE ID={$new_id_deals}";
  4098. $new_id_koresp = WindykacjaStatsModel::create_koresp($user, 'rozwiazanie umowy', $id_proj, array('nr_umowy'=>$nr_umowy, 'powod'=>$powod, 'powod_desc'=>$powod_desc));
  4099. if (!$new_id_koresp) {
  4100. $msg_log[] = "Nie udało się utworzyć rekordu KORESP";
  4101. return null;
  4102. }
  4103. $msg_log[] = "Utworzonno rekord KORESP ID={$new_id_koresp}";
  4104. $data_arr["ID_KORESP"] = $new_id_koresp;
  4105. } else {
  4106. return null;
  4107. }
  4108. $data_arr["params"] = "rozwiazanie umowy,{$nr_umowy},{$powod},{$termin_odlaczenia},{$new_id_deals}";
  4109. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");// zawsze podana jesli jest zmiana A_STATUS
  4110. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4111. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4112. $sql_arr = array();
  4113. foreach ($data_arr as $k => $v) {
  4114. $sql_arr[] = "`{$k}`='{$v}'";
  4115. }
  4116. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ";
  4117. DB::query($sql);
  4118. //if (DB::affected()) {
  4119. // update $user data
  4120. foreach ($data_arr as $k => $v) {
  4121. $user->$k = $v;
  4122. }
  4123. $sql_arr = array();
  4124. foreach ($data_arr as $k => $v) {
  4125. $sql_arr["`{$k}`"] = "'{$v}'";
  4126. }
  4127. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  4128. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  4129. DB::query($sql);
  4130. //}
  4131. return $new_id_koresp;
  4132. }
  4133. public static function update_users_table() {
  4134. if (!isset($_SESSION['USERS2_WINDYKACJA_PANEL'])) $_SESSION['USERS2_WINDYKACJA_PANEL'] = array();
  4135. $_SESSION['USERS2_WINDYKACJA_PANEL']['_initialized'] = 0;// always actualize
  4136. if (0 == V::get('_initialized', 0, $_SESSION['USERS2_WINDYKACJA_PANEL'], 'int')) {
  4137. $sql = "insert ignore into `USERS2_WINDYKACJA_STATUS` (`ID_BILLING_USERS`, `A_RECORD_CREATE_DATE`, `A_RECORD_CREATE_AUTHOR`)
  4138. select `id_users`, '" . date("Y-m-d-H:i") . "', 'sync-users' from `BILLING_USERS_ADD`
  4139. ";
  4140. $res = DB::query($sql);
  4141. $_SESSION['USERS2_WINDYKACJA_PANEL']['_initialized'] = 1;
  4142. }
  4143. }
  4144. public static function _to_update_where() {
  4145. $sql_where = "";
  4146. $sql_where_and_arr = array();
  4147. //$sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  4148. $sql_where_and_arr[] = "w.`A_STATUS_UPDATE_DATE`<CURDATE()";
  4149. $sql_where = implode(" and ", $sql_where_and_arr);
  4150. return $sql_where;
  4151. }
  4152. public static function get_to_update_total() {
  4153. $ret = array();
  4154. $sql_where = self::_to_update_where();
  4155. $db = DB::getDB();
  4156. $sql = "select count(1) as cnt
  4157. from `USERS2_WINDYKACJA_STATUS` as w
  4158. where {$sql_where}
  4159. ";
  4160. $res = $db->query($sql);
  4161. while ($r = $db->fetch($res)) {
  4162. $ret = $r->cnt;
  4163. }
  4164. return $ret;
  4165. }
  4166. public static function get_to_update_list($limit) {
  4167. $ret = array();
  4168. $db = DB::getDB();
  4169. $sql_where = self::_to_update_where();
  4170. $sql_limit = ($limit > 0)? "limit {$limit}" : "";
  4171. $sql = "select w.*
  4172. from `USERS2_WINDYKACJA_STATUS` as w
  4173. where {$sql_where}
  4174. order by ID desc
  4175. {$sql_limit}
  4176. ";
  4177. $res = $db->query($sql);
  4178. while ($r = $db->fetch($res)) {
  4179. $ret[] = $r;
  4180. }
  4181. return $ret;
  4182. }
  4183. /**
  4184. * @returns boolean - status changed or not
  4185. * @param $user - object return from function WindykacjaStatsModel::get_user_by_id
  4186. * @param $data - array of new user data
  4187. * 1. wysłanie 1 wezwania do zapłaty ($user->A_STATUS='wezwanie1'; `PAY_TERM`, `wezwanie1_DATE`, `ID_PROJ`)
  4188. * 2. wysłanie 2 wezwania do zapłaty ($user->A_STATUS='wezwanie2'; `PAY_TERM`, `wezwanie2_DATE`, `ID_KORESP`)
  4189. * 3. klient spłacił wszystkie zobowiązania (`PAY_SALDO` >= -0.05)
  4190. * TODO: 4. bledny adres klienta - ponowne wyslanie wezwania - niezaleznie od statusu?
  4191. *
  4192. * if $user->A_STATUS == 'wezwanie1' @param $data:
  4193. * $data['wezwanie1_DATE'] - user data
  4194. * $data['PAY_TERM'] - user data
  4195. * $data['ID_PROJ'] - do WindykacjaStatsModel::create_koresp
  4196. */
  4197. public static function update_user($user, $data) {
  4198. if (empty($data)) {
  4199. return $user;
  4200. }
  4201. $data_arr = array();
  4202. // set up status by current status and $data
  4203. switch ($user->A_STATUS) {
  4204. case 'WAITING':// auto
  4205. break;
  4206. case 'wezwanie1':// wymaga `PAY_TERM`, `wezwanie1_DATE`, `ID_KORESP` - wysłanie wezwanie1 (z podaniem ID_KORESP, i PAY_TERM=NOW()+14dni)
  4207. // TODO: ID_KORESP z utworzonego rekordu KORESP (wymaga ID_PROJ)
  4208. if ("" != V::get('wezwanie1_DATE' ,'', $data) && "" != V::get('PAY_TERM' ,'', $data) && V::get('ID_PROJ' ,'', $data, 'int') > 0) {
  4209. $new_id_koresp = WindykacjaStatsModel::create_koresp($user, 'wezwanie1', V::get('ID_PROJ' ,'', $data, 'int'));
  4210. if (!$new_id_koresp) {
  4211. // TODO: revert changes - DB error
  4212. return $user;
  4213. }
  4214. $data_arr["ID_KORESP"] = $new_id_koresp;
  4215. $data_arr["LAST_ID_KORESP_WEZWANIE1"] = $new_id_koresp;
  4216. $data_arr["A_STATUS"] = "waiting-wezwanie2";
  4217. $data_arr["wezwanie1_DATE"] = V::get('wezwanie1_DATE' ,'', $data);
  4218. $data_arr["PAY_TERM"] = V::get('PAY_TERM' ,'', $data);
  4219. unset($data['ID_PROJ']);// TODO: RM after mv $data to $data_arr
  4220. }
  4221. break;
  4222. case 'waiting-wezwanie2':// auto
  4223. break;
  4224. case 'wezwanie2':// wymaga `PAY_TERM`, `wezwanie2_DATE`, `ID_KORESP` - wysłanie wezwanie2 (z podaniem ID_KORESP, i PAY_TERM=NOW()+14dni)
  4225. if ("" != V::get('wezwanie2_DATE' ,'', $data) && "" != V::get('PAY_TERM' ,'', $data) && V::get('ID_PROJ' ,'', $data, 'int') > 0) {
  4226. $new_id_koresp = WindykacjaStatsModel::create_koresp($user, 'wezwanie2', V::get('ID_PROJ' ,'', $data, 'int'));
  4227. if (!$new_id_koresp) {
  4228. // TODO: revert changes - DB error
  4229. return $user;
  4230. }
  4231. $data_arr["ID_KORESP"] = $new_id_koresp;
  4232. $data_arr["LAST_ID_KORESP_WEZWANIE2"] = $new_id_koresp;
  4233. $data_arr["A_STATUS"] = "waiting-krd";
  4234. $data_arr["wezwanie2_DATE"] = V::get('wezwanie2_DATE' ,'', $data);
  4235. $data_arr["PAY_TERM"] = V::get('PAY_TERM' ,'', $data);
  4236. }
  4237. break;
  4238. default:
  4239. }
  4240. // if status not set, check id user saldo is ok
  4241. if (!isset($data_arr["A_STATUS"])) {
  4242. if (isset($data['PAY_SALDO']) && $data['PAY_SALDO'] >= -0.05) {
  4243. $data_arr["A_STATUS"] = "WAITING";
  4244. }
  4245. }
  4246. // error jesli nie ustalono statusu
  4247. if (!isset($data_arr["A_STATUS"])) {
  4248. return false;
  4249. }
  4250. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");// zawsze podana jesli jest zmiana A_STATUS
  4251. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4252. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4253. $sql_arr = array();
  4254. foreach ($data_arr as $k => $v) {
  4255. $sql_arr[] = "`{$k}`='{$v}'";
  4256. }
  4257. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ";
  4258. DB::query($sql);
  4259. //if (DB::affected()) {
  4260. // update $user data
  4261. foreach ($data_arr as $k => $v) {
  4262. $user->$k = $v;
  4263. }
  4264. $sql_arr = array();
  4265. foreach ($data_arr as $k => $v) {
  4266. $sql_arr["`{$k}`"] = "'{$v}'";
  4267. }
  4268. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  4269. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  4270. DB::query($sql);
  4271. //}
  4272. return true;
  4273. }
  4274. public static function bad_address_save($user, $id_koresp) {
  4275. $data_arr = array();
  4276. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4277. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4278. $data_arr["BAD_ADDRESS"] = 1;
  4279. $data_arr["ID_KORESP"] = $id_koresp;
  4280. return self::_sql_update($user, $data_arr);
  4281. }
  4282. public static function bad_address_confirm($user, $id_koresp) {
  4283. $data_arr = array();
  4284. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4285. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4286. $data_arr["BAD_ADDRESS"] = 0;
  4287. $data_arr["ID_KORESP"] = $id_koresp;
  4288. return self::_sql_update($user, $data_arr);
  4289. }
  4290. public static function _sql_update($user, $data_arr) {
  4291. // update values
  4292. $sql_arr = array();
  4293. foreach ($data_arr as $k => $v) {
  4294. $sql_arr[] = "`{$k}`='{$v}'";
  4295. }
  4296. $sql = "update `USERS2_WINDYKACJA_STATUS` set " . implode(",", $sql_arr) . " where `ID`='{$user->WINDYKACJA_ID}' limit 1 ";
  4297. DB::query($sql);
  4298. // update $user data
  4299. foreach ($data_arr as $k => $v) {
  4300. $user->$k = $v;
  4301. }
  4302. $sql_arr = array();
  4303. foreach ($data_arr as $k => $v) {
  4304. $sql_arr["`{$k}`"] = "'{$v}'";
  4305. }
  4306. $sql_arr["`ID_USERS2`"] = "'{$user->WINDYKACJA_ID}'";
  4307. $sql = "insert into `USERS2_WINDYKACJA_STATUS_HIST`(" . implode(",", array_keys($sql_arr)) . ") values(" . implode(",", array_values($sql_arr)) . ");";
  4308. DB::query($sql);
  4309. return true;
  4310. }
  4311. public static function change_status_save($user, $new_status) {
  4312. $data_arr = array();
  4313. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4314. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4315. $data_arr["A_STATUS_UPDATE_DATE"] = date("Y-m-d");
  4316. $data_arr["A_STATUS"] = $new_status;
  4317. if ($user->A_STATUS == 'krd' && $new_status == 'waiting-sad') {
  4318. $data_arr["wpis_w_krd_DATE"] = date('Y-m-d');
  4319. }
  4320. return self::_sql_update($user, $data_arr);
  4321. }
  4322. public static function nr_sprawy_krd_save($user, $nr_sprawy_krd) {
  4323. $data_arr = array();
  4324. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4325. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4326. $data_arr["NR_SPRAWY_KRD"] = $nr_sprawy_krd;
  4327. return self::_sql_update($user, $data_arr);
  4328. }
  4329. public static function nr_sprawy_sad_save($user, $nr_sprawy_sad) {
  4330. $data_arr = array();
  4331. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4332. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4333. $data_arr["NR_SPRAWY_SAD"] = $nr_sprawy_sad;
  4334. return self::_sql_update($user, $data_arr);
  4335. }
  4336. public static function nr_sprawy_komornik_save($user, $nr_sprawy_komornik) {
  4337. $data_arr = array();
  4338. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4339. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4340. $data_arr["NR_SPRAWY_KOMORNIK"] = $nr_sprawy_komornik;
  4341. return self::_sql_update($user, $data_arr);
  4342. }
  4343. public static function ustalenia_info_save($user, $ustalenia_date, $ustalenia_info) {
  4344. $data_arr = array();
  4345. $data_arr["A_RECORD_UPDATE_DATE"] = date("Y-m-d-H:i");
  4346. $data_arr["A_RECORD_UPDATE_AUTHOR"] = $_SESSION['ADM_ACCOUNT'];
  4347. $data_arr["L_APPOITMENT_DATE"] = $ustalenia_date;
  4348. $data_arr["L_APPOITMENT_INFO"] = $ustalenia_info;
  4349. $data_arr["L_APPOITMENT_USER"] = $_SESSION['ADM_ACCOUNT'];
  4350. if (empty($ustalenia_info) && (empty($ustalenia_date) || $ustalenia_date == '0000-00-00')) {
  4351. $data_arr["L_APPOITMENT_USER"] = '';
  4352. }
  4353. return self::_sql_update($user, $data_arr);
  4354. }
  4355. public static function get_user_hist_events(&$user) {
  4356. $db = DB::getDB();
  4357. $ret = array();
  4358. $sql = "select wh.*
  4359. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  4360. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  4361. ";
  4362. $res = $db->query($sql);
  4363. while ($r = $db->fetch($res)) {
  4364. $ret[] = $r;
  4365. }
  4366. return $ret;
  4367. }
  4368. public static function get_user_hist_status_events(&$user) {
  4369. $db = DB::getDB();
  4370. $ret = array();
  4371. $sql = "select wh.*, kor.`K_ZAWARTOS`
  4372. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  4373. left join `IN7_DZIENNIK_KORESP` as kor on(wh.`ID_KORESP`!='N/S;' and kor.`ID`=wh.`ID_KORESP`)
  4374. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  4375. and wh.`A_STATUS_UPDATE_DATE`!='N/S;'
  4376. ";
  4377. $res = $db->query($sql);
  4378. while ($r = $db->fetch($res)) {
  4379. $ret[] = $r;
  4380. }
  4381. return $ret;
  4382. }
  4383. public static function get_user_hist_phone_events(&$user) {
  4384. $ret = array();
  4385. $db = DB::getDB();
  4386. $sql = "select wh.*
  4387. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  4388. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  4389. and wh.`LAST_PHONE_STATUS_DATE`!='N/S;'
  4390. ";
  4391. $res = $db->query($sql);
  4392. while ($r = $db->fetch($res)) {
  4393. $ret[] = $r;
  4394. }
  4395. return $ret;
  4396. }
  4397. public static function get_user_bad_address_events(&$user) {
  4398. $ret = array();
  4399. $db = DB::getDB();
  4400. $sql = "select wh.*
  4401. from `USERS2_WINDYKACJA_STATUS_HIST` as wh
  4402. where wh.`ID_USERS2`='{$user->WINDYKACJA_ID}'
  4403. and wh.`BAD_ADDRESS`!='N/S;'
  4404. order by wh.`ID` ASC
  4405. ";
  4406. $res = $db->query($sql);
  4407. while ($r = $db->fetch($res)) {
  4408. $ret[] = $r;
  4409. }
  4410. return $ret;
  4411. }
  4412. public static function get_status_count() {
  4413. $sql_where_and_arr = array();
  4414. $usrAclGroups = User::getLdapGroupsNames();
  4415. $usrAclGroups[] = '';
  4416. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  4417. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  4418. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  4419. $sqlWhereAdd = " and " . implode(" and ", $sql_where_and_arr);
  4420. $ret = array();
  4421. $db = DB::getDB();
  4422. $sql = " select w.`A_STATUS`, count(1) as cnt
  4423. , sum(IF(w.`PAY_SALDO`<=-0.05, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4424. from `USERS2_WINDYKACJA_STATUS` as w
  4425. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4426. where 1=1 {$sqlWhereAdd}
  4427. group by w.`A_STATUS`
  4428. ";
  4429. $res = $db->query($sql);
  4430. while ($r = $db->fetch($res)) {
  4431. $ret[$r->A_STATUS] = $r;
  4432. }
  4433. // filter: 'po-terminie'
  4434. $sql = "select w.`A_STATUS`
  4435. , count(1) as cnt
  4436. , sum(IF(w.`PAY_SALDO`<=-0.05, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4437. from `USERS2_WINDYKACJA_STATUS` as w
  4438. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4439. where
  4440. w.`PAY_SALDO`<=-0.05
  4441. and w.`PAY_DATE`!='0000-00-00'
  4442. and w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)
  4443. {$sqlWhereAdd}
  4444. ";
  4445. $res = $db->query($sql);
  4446. if ($r = $db->fetch($res)) {
  4447. $ret['po-terminie'] = $r;
  4448. }
  4449. // filter: '3 m-ce przed'
  4450. $sql = "select w.`A_STATUS`
  4451. , count(1) as cnt
  4452. , sum(IF(w.`PAY_SALDO`<=-0.05, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4453. from `USERS2_WINDYKACJA_STATUS` as w
  4454. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4455. where
  4456. w.`PAY_SALDO`<=-0.05
  4457. and w.`PAY_DATE`!='0000-00-00'
  4458. and w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)
  4459. and w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)
  4460. {$sqlWhereAdd}
  4461. ";
  4462. $res = $db->query($sql);
  4463. if ($r = $db->fetch($res)) {
  4464. $ret['3 m-ce przed'] = $r;
  4465. }
  4466. // filter: 'tel1'
  4467. $sql = "select w.`A_STATUS`
  4468. , count(1) as cnt
  4469. , sum(IF(w.`PAY_SALDO`<=-0.05, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4470. from `USERS2_WINDYKACJA_STATUS` as w
  4471. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4472. where
  4473. w.`PAY_SALDO`<=-0.05
  4474. and w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')
  4475. and ( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
  4476. or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 14 DAY) )
  4477. {$sqlWhereAdd}
  4478. ";
  4479. $res = $db->query($sql);
  4480. if ($r = $db->fetch($res)) {
  4481. $ret['tel1'] = $r;
  4482. }
  4483. // filter: 'bad_address'
  4484. $sql = "select w.`A_STATUS`
  4485. , count(1) as cnt
  4486. , sum(IF(w.`PAY_SALDO`<=-0.05, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4487. from `USERS2_WINDYKACJA_STATUS` as w
  4488. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4489. where
  4490. w.`PAY_SALDO`<=-0.05
  4491. -- and w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')
  4492. and w.`BAD_ADDRESS`>0
  4493. {$sqlWhereAdd}
  4494. ";
  4495. $res = $db->query($sql);
  4496. if ($r = $db->fetch($res)) {
  4497. $ret['bad_address'] = $r;
  4498. }
  4499. // filter: 'stan_zero', '10-ego'
  4500. $stanZeroLimit = -0.05;
  4501. $sql = "select w.`A_STATUS`
  4502. , count(1) as cnt
  4503. , sum(IF(w.`PAY_SALDO`>{$stanZeroLimit}, 1, 0)) as cnt_stan_zero
  4504. , sum(IF(w.`PAY_SALDO`<={$stanZeroLimit}, 1, 0)) as cnt_stan_minus
  4505. , sum(IF(w.`PAY_SALDO`<={$stanZeroLimit}, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4506. from `USERS2_WINDYKACJA_STATUS` as w
  4507. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4508. where
  4509. w.`A_STATUS`='WAITING'
  4510. {$sqlWhereAdd}
  4511. ";
  4512. $res = $db->query($sql);
  4513. if ($r = $db->fetch($res)) {
  4514. $ret['stan_zero'] = (object)array('A_STATUS'=>'stan_zero', 'cnt'=>$r->cnt_stan_zero, 'suma_zaleglosci'=>0);
  4515. $ret['10-ego'] = (object)array('A_STATUS'=>'10-ego', 'cnt'=>$r->cnt_stan_minus, 'suma_zaleglosci'=>$r->suma_zaleglosci);
  4516. }
  4517. // filter: 'has_nr_sad', 'has_nr_komornik', 'has_ustalenia'
  4518. $sql = "select w.`A_STATUS`
  4519. , count(1) as cnt
  4520. , sum(IF(w.`NR_SPRAWY_SAD`!='', 1, 0)) as cnt_sad
  4521. , sum(IF(w.`NR_SPRAWY_KOMORNIK`!='', 1, 0)) as cnt_komornik
  4522. , sum(IF(w.`L_APPOITMENT_INFO`!='', 1, 0)) as cnt_ustalenia
  4523. from `USERS2_WINDYKACJA_STATUS` as w
  4524. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4525. where
  4526. (w.`NR_SPRAWY_SAD`!=''
  4527. or w.`NR_SPRAWY_KOMORNIK`!=''
  4528. or w.`L_APPOITMENT_INFO`!=''
  4529. )
  4530. {$sqlWhereAdd}
  4531. ";
  4532. $res = $db->query($sql);
  4533. if ($r = $db->fetch($res)) {
  4534. $ret['has_nr_sad'] = (object)array('A_STATUS'=>'has_nr_sad', 'cnt'=>$r->cnt_sad, 'suma_zaleglosci'=>null);
  4535. $ret['has_nr_komornik'] = (object)array('A_STATUS'=>'has_nr_komornik', 'cnt'=>$r->cnt_komornik, 'suma_zaleglosci'=>null);
  4536. $ret['has_ustalenia'] = (object)array('A_STATUS'=>'has_ustalenia', 'cnt'=>$r->cnt_ustalenia, 'suma_zaleglosci'=>null);
  4537. }
  4538. // filter: 'sad_and_komornik', 'sad_bez_komornik'
  4539. $sql = "select w.`A_STATUS`
  4540. , count(1) as cnt
  4541. , sum(IF(w.`NR_SPRAWY_KOMORNIK`!='', 1, 0)) as cnt_komornik
  4542. from `USERS2_WINDYKACJA_STATUS` as w
  4543. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4544. where
  4545. w.`A_STATUS`='sad'
  4546. {$sqlWhereAdd}
  4547. ";
  4548. $res = $db->query($sql);
  4549. if ($r = $db->fetch($res)) {
  4550. $ret['sad_and_komornik'] = (object)array('A_STATUS'=>'sad_and_komornik', 'cnt'=>$r->cnt_komornik, 'suma_zaleglosci'=>null);
  4551. $ret['sad_bez_komornik'] = (object)array('A_STATUS'=>'sad_bez_komornik', 'cnt'=>($r->cnt - $r->cnt_komornik), 'suma_zaleglosci'=>null);
  4552. }
  4553. // filter: 'isMovedToVectra'
  4554. $sql = "select w.`A_STATUS`
  4555. , count(1) as cnt
  4556. , sum(IF(w.`PAY_SALDO`<={$stanZeroLimit}, w.`PAY_SALDO`, 0)) as suma_zaleglosci
  4557. from `USERS2_WINDYKACJA_STATUS` as w
  4558. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4559. where
  4560. w.`IS_MOVED_TO_VECTRA`=1
  4561. {$sqlWhereAdd}
  4562. ";
  4563. $res = $db->query($sql);
  4564. if ($r = $db->fetch($res)) {
  4565. $ret['isMovedToVectra'] = (object)array('cnt'=>$r->cnt, 'suma_zaleglosci'=>$r->suma_zaleglosci);
  4566. }
  4567. return $ret;
  4568. }
  4569. }
  4570. class WindykacjaStatsModel {
  4571. public static function _parse_query($q) {
  4572. $sql_where = '';
  4573. $sql_where_and_arr = array();
  4574. $usrAclGroups = User::getLdapGroupsNames();
  4575. $usrAclGroups[] = '';
  4576. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  4577. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  4578. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  4579. $filter_selected = WindykacjaStatsHelper::get_filter_selected();
  4580. if ($filter_selected) {
  4581. if ($filter_selected == 'po-terminie') {
  4582. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  4583. $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  4584. $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  4585. }
  4586. else if ($filter_selected == '3 m-ce przed') {
  4587. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  4588. $sql_where_and_arr[] = "w.`PAY_DATE`!='0000-00-00'";
  4589. $sql_where_and_arr[] = "w.`PAY_DATE`<DATE_SUB(NOW(), INTERVAL 33 MONTH)";
  4590. $sql_where_and_arr[] = "w.`PAY_DATE`>DATE_SUB(NOW(), INTERVAL 36 MONTH)";
  4591. }
  4592. else if ($filter_selected == 'tel1') {
  4593. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  4594. $sql_where_and_arr[] = "w.`A_STATUS` in('wezwanie1', 'waiting-wezwanie2', 'wezwanie2', 'waiting-krd')";
  4595. $sql_where_and_arr[] = "( w.`LAST_PHONE_STATUS_DATE`='0000-00-00'
  4596. or w.`LAST_PHONE_STATUS_DATE`<DATE_SUB(NOW(), INTERVAL 3 MONTH) )";
  4597. }
  4598. else if ($filter_selected == 'bad_address') {
  4599. $sql_where_and_arr[] = "w.`BAD_ADDRESS`>0";
  4600. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  4601. }
  4602. else if ($filter_selected == 'stan_zero') {
  4603. $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  4604. $sql_where_and_arr[] = "w.`PAY_SALDO`>-0.05";
  4605. }
  4606. else if ($filter_selected == '10-ego') {
  4607. $sql_where_and_arr[] = "w.`A_STATUS`='WAITING'";
  4608. $sql_where_and_arr[] = "w.`PAY_SALDO`<=-0.05";
  4609. }
  4610. else if ($filter_selected == 'has_nr_sad') {
  4611. $sql_where_and_arr[] = "w.`NR_SPRAWY_SAD`!=''";
  4612. }
  4613. else if ($filter_selected == 'has_nr_komornik') {
  4614. $sql_where_and_arr[] = "w.`NR_SPRAWY_KOMORNIK`!=''";
  4615. }
  4616. else if ($filter_selected == 'has_ustalenia') {
  4617. $sql_where_and_arr[] = "w.`L_APPOITMENT_INFO`!=''";
  4618. }
  4619. else if ($filter_selected == 'sad_and_komornik') {
  4620. $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`!=''";
  4621. }
  4622. else if ($filter_selected == 'sad_bez_komornik') {
  4623. $sql_where_and_arr[] = "w.`A_STATUS`='sad' and w.`NR_SPRAWY_KOMORNIK`=''";
  4624. }
  4625. else if ($filter_selected == 'isMovedToVectra') {
  4626. $sql_where_and_arr[] = "w.`IS_MOVED_TO_VECTRA`=1";
  4627. }
  4628. else {
  4629. $sql_where_and_arr[] = "w.`A_STATUS`='{$filter_selected}'";
  4630. }
  4631. }
  4632. if (!empty($q)) {
  4633. $q = trim($q);
  4634. if (is_numeric($q)) {// billing number
  4635. $sqlIdUsr = DB::_($q);
  4636. $sql_where_and_arr[] = "a.`id_users`='{$sqlIdUsr}'";
  4637. }
  4638. else {// string - name, second name
  4639. $q_arr_values = array();
  4640. $q_exp = explode(' ', $q);
  4641. foreach ($q_exp as $v_q) {
  4642. $v_q = trim($v_q);
  4643. if (strlen($v_q) > 2) {// min. 3 znaki
  4644. $q_arr_values[] = strtolower($v_q);
  4645. }
  4646. }
  4647. foreach ($q_arr_values as $q_value) {
  4648. $sql_filter_q = array();
  4649. $q_arr = array();// uniq array
  4650. $q_arr_pl = array();// loop array
  4651. $pl_letters = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż');
  4652. $en_letters = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z');
  4653. $sqlQValue = DB::_($q_value);
  4654. $sql_filter_q[] = "a.`P_NAME` like '{$sqlQValue}%'";
  4655. $sql_filter_q[] = "a.`P_NAME_SECOND` like '{$sqlQValue}%'";
  4656. $q_value_clean_en = str_replace($pl_letters, $en_letters, $q_value);
  4657. $q_value_clean_pl = str_replace($en_letters, $pl_letters, $q_value_clean_en);
  4658. $q_value_clean_pr = str_replace($en_letters, '_', $q_value_clean_en);
  4659. if ($q_value_clean_en != $q_value) $q_arr[$q_value_clean_en] = true;
  4660. if ($q_value_clean_pl != $q_value) $q_arr[$q_value_clean_pl] = true;
  4661. if ($q_value_clean_pr != $q_value) $q_arr[$q_value_clean_pr] = true;
  4662. foreach ($q_arr as $v_q => $v_val) {
  4663. $sqlQValue = DB::_($v_q);
  4664. $sql_filter_q[] = "a.`P_NAME` like '{$sqlQValue}'";
  4665. $sql_filter_q[] = "a.`P_NAME_SECOND` like '{$sqlQValue}'";
  4666. // $sql_filter_q[] = "a.`P_ADDRESS_STREET` like '{$sqlQValue}'";
  4667. }
  4668. $sql_field_1 = "a.`P_NAME`";
  4669. $sql_field_2 = "a.`P_NAME_SECOND`";
  4670. foreach ($pl_letters as $k_ind => $v_char_pl) {
  4671. $sql_field_1 = "REPLACE({$sql_field_1}, '{$v_char_pl}', '{$en_letters[$k_ind]}')";
  4672. $sql_field_2 = "REPLACE({$sql_field_2}, '{$v_char_pl}', '{$en_letters[$k_ind]}')";
  4673. }
  4674. $q_value_clean_en = DB::_($q_value_clean_en);
  4675. $sql_filter_q[] = $sql_field_1 . " like '%{$q_value_clean_en}%'";
  4676. $sql_filter_q[] = $sql_field_2 . " like '%{$q_value_clean_en}%'";
  4677. $sql_where_and_arr[] = "(" . implode(" or ", $sql_filter_q) . ")";
  4678. }
  4679. }
  4680. }
  4681. $special_filter_active = V::get('_special_filter_active', '', $_GET);
  4682. if ('today' == $special_filter_active) {
  4683. $today = date("Y-m-d");
  4684. $sql_where_and_arr[] = "w.`A_STATUS_UPDATE_DATE`='{$today}'";
  4685. }
  4686. $special_filter_msg_mail = V::get('_special_filter_msg_mail', '', $_GET);
  4687. if ('not_today' == $special_filter_msg_mail) {
  4688. $sql_where_and_arr[] = "w.`LAST_PHONE_STATUS_DATE`<'{$today}'";
  4689. }
  4690. $special_filter_msg_sms = V::get('_special_filter_msg_sms', '', $_GET);
  4691. if ('not_today' == $special_filter_msg_sms) {
  4692. $sql_where_and_arr[] = "w.`LAST_PHONE_STATUS_DATE`<'{$today}'";
  4693. }
  4694. if (!empty($sql_where_and_arr)) {
  4695. $sql_where = implode(" and ", $sql_where_and_arr);
  4696. } else {
  4697. $sql_where = "1=1";
  4698. }
  4699. return $sql_where;
  4700. }
  4701. public static function get_order_by_fields() {
  4702. $order_by_fields = array();
  4703. $order_by_fields[] = 'ID';
  4704. $order_by_fields[] = 'is_firma';
  4705. $order_by_fields[] = 'BILLING_OWNER';
  4706. $order_by_fields[] = 'STATUS';
  4707. $order_by_fields[] = 'BLOKADA';
  4708. $order_by_fields[] = 'ID_BILLING_USERS';
  4709. $order_by_fields[] = 'P_NAME';
  4710. $order_by_fields[] = 'PAY_SALDO';
  4711. $order_by_fields[] = 'PAY_FVAT';
  4712. $order_by_fields[] = 'PAY_DATE';
  4713. $order_by_fields[] = 'PAY_TERM';
  4714. $order_by_fields[] = 'HAS_ACTIVE_NET';
  4715. $order_by_fields[] = 'HAS_ACTIVE_TV';
  4716. $order_by_fields[] = 'IS_MOVED_TO_VECTRA';
  4717. return $order_by_fields;
  4718. }
  4719. public static function get_users_total($q = '') {
  4720. $total = 0;
  4721. $sql_where = WindykacjaStatsModel::_parse_query($q);
  4722. $db = DB::getDB();
  4723. $sql = "select count(1) as cnt
  4724. from `USERS2_WINDYKACJA_STATUS` as w
  4725. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4726. where {$sql_where}
  4727. ";
  4728. //echo'<pre>sqlTotal:';print_r($sql);echo'</pre>';
  4729. $res = $db->query($sql);
  4730. if ($r = $db->fetch($res)) {
  4731. $total = $r->cnt;
  4732. }
  4733. return $total;
  4734. }
  4735. public static function get_sql_users_select() {
  4736. $sql_select = "
  4737. a.`id_users` as ID
  4738. , a.`id_users`
  4739. , a.`P_NAME`
  4740. , a.`P_NAME_SECOND`
  4741. , a.`P_ADDRESS_STREET`
  4742. , a.`P_ADDRESS_HOME`
  4743. , a.`P_ADDRESS_HOUSE`
  4744. , a.`P_ADDRESS_CITY`
  4745. , a.`P_ADDRESS_POST_CODE`
  4746. , a.`P_ADDRESS_REGION`
  4747. , a.`P_PESEL`
  4748. , a.`P_PHONE`
  4749. , a.`P_OTHER_DOC`
  4750. , a.`user_mail_contact`
  4751. , a.`is_firma`
  4752. , a.`P_ADRESS_KORESP_1282`
  4753. , w.`ID` as WINDYKACJA_ID
  4754. , w.`ID_BILLING_USERS`
  4755. , w.`A_STATUS`
  4756. , w.`A_STATUS_UPDATE_DATE`
  4757. , w.`USER_PAY_TERM_ADD`
  4758. , w.`L_APPOITMENT_DATE`
  4759. , w.`L_APPOITMENT_USER`
  4760. , w.`L_APPOITMENT_INFO`
  4761. , w.`PAY_DATE`
  4762. , w.`PAY_DATE_FIRST_FVAT`
  4763. , w.`PAY_TERM`
  4764. , w.`PAY_SALDO`
  4765. , w.`PAY_FVAT`
  4766. , w.`wezwanie1_DATE`
  4767. , w.`wezwanie2_DATE`
  4768. , w.`wpis_w_krd_DATE`
  4769. , w.`ID_KORESP`
  4770. , w.`LAST_ID_KORESP_WEZWANIE1`
  4771. , w.`LAST_ID_KORESP_WEZWANIE2`
  4772. , w.`LAST_PAY_DATE`
  4773. , w.`LAST_PAY_VALUE`
  4774. , w.`LAST_FVAT_PAY_TERM`
  4775. , w.`LAST_FVAT_VALUE`
  4776. , w.`PAY_SALDO_30_DNI`
  4777. , w.`PAY_SALDO_ISSUED`
  4778. , w.`BAD_ADDRESS`
  4779. -- , (select bu.`BILLING_OWNER` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as BILLING_OWNER
  4780. -- , (select bu.`STATUS` from `BILLING_USERS` as bu where bu.`ID`=w.`ID_BILLING_USERS` limit 1) as STATUS
  4781. , bu.`STATUS`
  4782. , bu.`BILLING_OWNER`
  4783. , w.`NR_SPRAWY_KRD`
  4784. , w.`NR_SPRAWY_SAD`
  4785. , w.`NR_SPRAWY_KOMORNIK`
  4786. , w.`ACCOUNT_NUMBER`
  4787. , w.`SERVICES_STREETS`
  4788. , w.`IS_MOVED_TO_VECTRA` as IS_MOVED_TO_VECTRA
  4789. -- , ('REZYGNACJA_Z_PRZEJSCIEM_DO_VECTRA'=(select `RODZAJ_DZIALANIA_HANDLOWEGO`
  4790. -- from `DEALS_TABLE`
  4791. -- where `A_STATUS`='NORMAL'
  4792. -- and `ID_BILLING_USERS`=w.`ID_BILLING_USERS`
  4793. -- order by `ID` DESC
  4794. -- limit 1)
  4795. -- ) as IS_MOVED_TO_VECTRA
  4796. , w.`HAS_ACTIVE_NET`
  4797. , w.`HAS_ACTIVE_TV`
  4798. ";
  4799. return $sql_select;
  4800. }
  4801. public static function get_users($q = '', $limit = 10, $limit_start = 0, $order_by = '', $order_dir = '') {
  4802. $ret = array();
  4803. $sql_select = self::get_sql_users_select();
  4804. $sql_where = WindykacjaStatsModel::_parse_query($q);
  4805. $sql_limit = "limit " . (($limit > 0)? $limit : "10");
  4806. if ($limit_start > 0) $sql_limit .= " offset {$limit_start}";
  4807. $sql_order_by = "";
  4808. $order_by_allowed = self::get_order_by_fields();
  4809. if (in_array($order_by, $order_by_allowed)) {
  4810. if (in_array($order_by, array('P_NAME','is_firma'))) {
  4811. $order_by = "a.{$order_by}";
  4812. } else if (in_array($order_by, array('BILLING_OWNER','STATUS'))) {
  4813. $order_by = "bu.{$order_by}";
  4814. } else if ($order_by == 'BLOKADA') {
  4815. $order_by = "bu.`STATUS`";
  4816. } else {
  4817. $order_by = "w.{$order_by}";
  4818. }
  4819. $sql_order_by .= " order by {$order_by}";
  4820. if (in_array($order_dir, array('DESC','ASC'))) {
  4821. $sql_order_by .= " {$order_dir}";
  4822. }
  4823. }
  4824. $db = DB::getDB();
  4825. $sql = "select {$sql_select}
  4826. from `USERS2_WINDYKACJA_STATUS` as w
  4827. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  4828. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4829. where {$sql_where}
  4830. {$sql_order_by}
  4831. {$sql_limit}
  4832. ";
  4833. DBG::_('DBG_SQL', '>1', "sql", $sql, __CLASS__, __FUNCTION__, __LINE__);
  4834. //echo'<pre>';print_r($sql);echo'</pre>';
  4835. $res = $db->query($sql);
  4836. while ($r = $db->fetch($res)) {
  4837. $ret[$r->id_users] = $r;
  4838. }
  4839. return $ret;
  4840. }
  4841. public static function get_user_by_id($id) {
  4842. $ret = null;
  4843. if ($id <= 0) return $ret;
  4844. $sql_where_and_arr = array();
  4845. $usrAclGroups = User::getLdapGroupsNames();
  4846. $usrAclGroups[] = '';
  4847. $sqlUsrAclGroups = "'" . implode("','", $usrAclGroups) . "'";
  4848. $sql_where_and_arr[] = "a.`A_ADM_COMPANY` in({$sqlUsrAclGroups})";
  4849. $sql_where_and_arr[] = "a.`A_CLASSIFIED` in({$sqlUsrAclGroups})";
  4850. $sqlWhereAdd = " and " . implode(" and ", $sql_where_and_arr);
  4851. $sql_select = self::get_sql_users_select();
  4852. $sql_where = "a.`id_users`='{$id}'";
  4853. $db = DB::getDB();
  4854. $sql = "select {$sql_select}
  4855. from `USERS2_WINDYKACJA_STATUS` as w
  4856. left join `BILLING_USERS` as bu on(bu.`ID`=w.`ID_BILLING_USERS`)
  4857. left join `BILLING_USERS_ADD` as a on(a.`id_users`=w.`ID_BILLING_USERS`)
  4858. where {$sql_where}
  4859. {$sqlWhereAdd}
  4860. ";
  4861. $res = $db->query($sql);
  4862. if ($r = $db->fetch($res)) {
  4863. if(0){
  4864. $r->BA_WINIEN = "";
  4865. $r->BA_MA = "";
  4866. $r->BA_TIMESTAMP = "";
  4867. $sql = "select BA.`WINIEN` as BA_WINIEN
  4868. , BA.`MA` as BA_MA
  4869. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  4870. from `BILLING_ACCOUNTS` as BA
  4871. where BA.`ID_BILLING_USERS`='" . $r->ID . "'
  4872. ";
  4873. $db_webone = DB::getDB('931');
  4874. if ($db_webone) {
  4875. $res_fin = $db_webone->query($sql);
  4876. if ($r_fin = $db_webone->fetch($res_fin)) {
  4877. $r->BA_WINIEN = $r_fin->BA_WINIEN;
  4878. $r->BA_MA = $r_fin->BA_MA;
  4879. $r->BA_TIMESTAMP = $r_fin->BA_TIMESTAMP;
  4880. }
  4881. }
  4882. }
  4883. $ret = $r;
  4884. }
  4885. return $ret;
  4886. }
  4887. public static function get_company(&$user) {
  4888. if (!isset($user->_company)) {
  4889. $db = DB::getDB();
  4890. /*
  4891. id 1 / 2
  4892. name1 "BIALL-NET" Sp. z o.o. / "NET-DAY" s.c.
  4893. name2 --- / Adrian i Ewa Wieczorkowscy
  4894. kod 80-174 / 80-809
  4895. miasto Gdańsk, Otomin / Gdańsk
  4896. ulica Słoneczna / Cieszyńskiego
  4897. numer_dom 43 / 38
  4898. numer_pos NULL / NULL
  4899. uwagi --- / ---
  4900. tel 0-58 320-72-92 / 0-58 741 84 54
  4901. fax 0-58 320-72-96 / 0-58 741 84 56
  4902. nip 593-22-68-672 / 583-27-54-031
  4903. regon 192120212 / 192578721
  4904. bank Bank Zachodni WBK SA I O/Gdansk / ---
  4905. nr_rach 46 1090 1098 0000 0001 0253 7156 / 84 1500 1171 1211 7002 9997 0000
  4906. NR_RACH_MASS_PAY 109000049887 / 109000049669
  4907. BILLING_OWNER_EMAIL biall-net@biall.net.pl / netday@netday.pl
  4908. */
  4909. $sql = "select
  4910. bo.`id`
  4911. , bo.`name1`
  4912. , bo.`name2`
  4913. , bo.`kod`
  4914. , bo.`miasto`
  4915. , bo.`ulica`
  4916. , bo.`numer_dom`
  4917. , bo.`tel`
  4918. , bo.`fax`
  4919. , bo.`nip`
  4920. , bo.`regon`
  4921. , bo.`bank`
  4922. , bo.`nr_rach`
  4923. , bo.`NR_RACH_MASS_PAY`
  4924. , bo.`BILLING_OWNER_EMAIL`
  4925. from `BILLING_USERS` as bu
  4926. left join `BILLING_OWNER` as bo on (bo.`ID`=bu.`BILLING_OWNER`)
  4927. where
  4928. bu.`ID`='{$user->ID_BILLING_USERS}'
  4929. ";
  4930. //$db_webone = DB::getDB('931');
  4931. //if ($db_webone) {
  4932. //$res = $db_webone->query($sql);
  4933. //if ($r = $db_webone->fetch($res)) {
  4934. // $user->_company = $r;
  4935. //}
  4936. //}
  4937. $res = $db->query($sql);
  4938. if ($r = $db->fetch($res)) {
  4939. $user->_company = $r;
  4940. }
  4941. }
  4942. return $user->_company;
  4943. }
  4944. public static function get_billing_type($type_id) {
  4945. $ret = null;
  4946. $types = WindykacjaStatsModel::get_billing_types();
  4947. if (array_key_exists($type_id, $types)) {
  4948. $ret = $types[$type_id];
  4949. }
  4950. return $ret;
  4951. }
  4952. public static function get_billing_type_desc($type) {
  4953. $ret = '';
  4954. if ($type == 'FVAT') {
  4955. return "Faktura Vat";
  4956. }
  4957. $types = WindykacjaStatsModel::get_billing_types();
  4958. foreach ($types as $h) {
  4959. if ($h['TYPE'] == $type) {
  4960. return $h['DESC'];
  4961. }
  4962. }
  4963. return $ret;
  4964. }
  4965. public static function get_billing_types($ids = array()) {
  4966. static $_cache;
  4967. if (empty($_cache)) $_cache = array();
  4968. $cache_key = implode(".", $ids);
  4969. if (!array_key_exists($cache_key, $_cache)) {
  4970. $billing_types = array();
  4971. $db_webone = DB::getDB('931');
  4972. if ($db_webone) {
  4973. $sql_where = "1=1";
  4974. if (!empty($ids)) {
  4975. $sql_where = "`ID` in ('".implode("','", $ids)."')";
  4976. }
  4977. $sql = "select *
  4978. from `BILLING_NUMBERS_TYPE`
  4979. where
  4980. {$sql_where}
  4981. ";
  4982. $res = $db_webone->query($sql);
  4983. while ($h = $db_webone->fetch_assoc($res)) {
  4984. $billing_types[$h['ID']] = $h;
  4985. }
  4986. }
  4987. $_cache[$cache_key] = $billing_types;
  4988. }
  4989. return $_cache[$cache_key];
  4990. }
  4991. public static function getAllServicesStreetsCSV($user) {
  4992. $streets = array();
  4993. $db = DB::getDB();
  4994. $sql = "
  4995. select s.`S_ADDRESS_STREET`
  4996. from `COMPANIES` c
  4997. join `DEALS_TABLE` d on(d.`ID_BILLING_USERS`=c.`ID`)
  4998. join `SERVICES` s on(s.`ID_BILLING_USERS`=c.`ID` and s.`ID_DEALS_TABLE`=d.`ID`)
  4999. where c.`ID`='{$user->ID}'
  5000. -- and c.`A_ADM_COMPANY`='19994_PODMIOT_Vectra_wlasciciel'
  5001. and s.`NAME_LIST_SERVICES` in ('TV','USERS2','VOIP')
  5002. and s.`A_STATUS` not in ('DELETED')
  5003. ";
  5004. $res = $db->query($sql);
  5005. while ($r = $db->fetch($res)) {
  5006. $streets[$r->S_ADDRESS_STREET] = true;
  5007. }
  5008. $streets = (!empty($streets))? implode(',', array_keys($streets)) : '';
  5009. return $streets;
  5010. }
  5011. public static function get_umowy_from_l2($user) {
  5012. $ret = array();
  5013. $db_webone = DB::getDB();
  5014. if (!$db_webone) {
  5015. return -1;
  5016. }
  5017. $sql = "select
  5018. 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`
  5019. from `DEALS_TABLE` as d
  5020. where d.`ID_BILLING_USERS`='{$user->ID}'
  5021. order by d.`ID` DESC
  5022. ";
  5023. $res = $db_webone->query($sql);
  5024. while ($h = $db_webone->fetch_assoc($res)) {
  5025. $ret[$h['ID']] = $h;
  5026. }
  5027. return $ret;
  5028. }
  5029. public static function get_uslugi_from_l2(&$user) {
  5030. // l2: www/modules/webone/form/edit_user_status.php
  5031. // Aktualne: Usługa[Status] => list_services2($user->ID);
  5032. $uID = $user->ID;
  5033. $ret = array();
  5034. $db_webone = DB::getDB();
  5035. if (!$db_webone) {
  5036. return -1;
  5037. }
  5038. if(0){// SERVICES table struct example:
  5039. //[ID_BILLING_USERS] => 11363
  5040. //[active] => 1
  5041. //[TAB_UPDATE_STAT] => 1
  5042. //[TAB_UPDATE_DATE] => 2012-02-03 17:43:44
  5043. //[TAB_UPDATE_INFO] => OK-PREUPDATE-DELETED---UPDATED-OK-:195.117.2.79
  5044. //[SERVICE_TYPE] => ABONAMENT
  5045. //[ID_BILLING_NUMBERS_TYPE] => 1
  5046. //[ABONAMENT_PERIOD] => 1
  5047. //[ABONAMENT_VALUE] => 26.01
  5048. //[VAT] => 23
  5049. //[ID_CURRENCY] => 0
  5050. //[ABONAMENT_PAYMENT] => UP
  5051. //[ABONAMENT_START] => 1
  5052. //[MINIMUM_BILLING_VALUE] => 0.00
  5053. //[BILLED_TILL] => 2012-06-01 00:00:00
  5054. //[HANGUP_FROM] =>
  5055. //[HANGUP_TILL] =>
  5056. //[HANGUP_STATUS] =>
  5057. //[HANGUP_RATIO] => 1.00
  5058. //[TIMESTAMP] => 20120504125053
  5059. //[P_ID_SERVICES] => 0
  5060. //[uwagi] =>
  5061. //[ID_DEALS_TABLE] => 9373
  5062. //[VAT_NAME] => 23
  5063. //[id_list_sww] => 1
  5064. //[SERV_ID_BILLING_PREFIXES] => 0
  5065. //[ID_OFFERS] => 833
  5066. //[A_RECORD_CREATE_DATE] =>
  5067. //[A_RECORD_CREATE_AUTHOR] =>
  5068. //[A_RECORD_UPDATE_DATE] =>
  5069. //[A_RECORD_UPDATE_AUTHOR] =>
  5070. }
  5071. $sql = "select
  5072. s.`ID`, s.`NAME_LIST_SERVICES`, s.`A_STATUS`
  5073. , s.`ID_OFFERS`
  5074. , s.`ID_DEALS_TABLE`
  5075. , s.`P_ID_SERVICES`
  5076. , s.`P_ID_SERVICES` as P_ID
  5077. , s.`HANGUP_STATUS`
  5078. , s.`HANGUP_FROM`
  5079. , s.`HANGUP_TILL`
  5080. , ls.`description` as description
  5081. , lst.`name` as A_STATUS_DESC
  5082. from `SERVICES` as s
  5083. left join `LIST_SERVICES` as ls on(ls.`name`=s.`NAME_LIST_SERVICES`)
  5084. left join `LIST_status` as lst on(lst.`ses_users2`=s.`HANGUP_STATUS` and lst.`ID`>2)
  5085. where `ID_BILLING_USERS`='{$user->ID}'
  5086. ";
  5087. $res = $db_webone->query($sql);
  5088. while ($h = $db_webone->fetch_assoc($res)) {
  5089. $ret[$h['ID']] = $h;
  5090. }
  5091. return $ret;
  5092. }
  5093. public static function get_umowy_from_l3(&$user) {
  5094. $ret = array();
  5095. $db = DB::getDB();
  5096. $sql = "select d.*
  5097. from `USERS2_DEALS` as d
  5098. where
  5099. (d.`ID_BILLING_USERS_OLD`='{$user->ID}' or d.`ID_BILLING_USERS_NEW`='{$user->ID}')
  5100. order by d.`ID` DESC
  5101. ";
  5102. $res = $db->query($sql);
  5103. while ($h = $db->fetch_assoc($res)) {
  5104. $ret[] = $h;
  5105. }
  5106. return $ret;
  5107. }
  5108. public static function get_bill_dosc_by_date(&$user, $date_limit = null) {
  5109. // fetch finanse data from remote DB
  5110. $billing_docs = new BillingDocs();
  5111. $db_webone = DB::getDB('931');
  5112. if (!$db_webone) {
  5113. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  5114. return;
  5115. }
  5116. $sql_where = " BILLS_FVAT.OPEN='N' and BILLS_FVAT.ID_BILLING_USERS ='{$user->ID}' ";
  5117. // blad w zaokragleniach
  5118. // , sum((BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE)*(1 + BILLS_FVAT_POS.VAT/100)) as WARTOSC
  5119. if ($date_limit) {
  5120. $sql_where .= " and BILLS_FVAT.PAYMENT_TERM <= '{$date_limit}' ";
  5121. }
  5122. $sql = "select
  5123. BILLS_FVAT.*
  5124. , count(BILLS_FVAT_POS.ID) as ILOSC_POZYCJI
  5125. , BILLS_FVAT_POS.ID_BILLS_FVAT
  5126. , sum(round((round(BILLS_FVAT_POS.AMMOUNT * BILLS_FVAT_POS.PRICE, 2)) * (1 + BILLS_FVAT_POS.VAT / 100), 2)) as WARTOSC
  5127. -- , count(BILLS_FVAT_POS.PRICE) as ILOSC_POZYCJI
  5128. , `BILLING_NUMBERS`.`NUMBER` as `NUMBER`
  5129. , `BILLING_NUMBERS`.`ID_BILLING_PREFIXES` as `ID_BILLING_PREFIXES`
  5130. from `BILLS_FVAT`
  5131. left join `BILLING_NUMBERS` on(`BILLING_NUMBERS`.`ID`=`BILLS_FVAT`.`ID_BILLING_NUMBERS`)
  5132. left join `BILLS_FVAT_POS` on(`BILLS_FVAT_POS`.`ID_BILLS_FVAT`=`BILLS_FVAT`.`ID`)
  5133. where {$sql_where}
  5134. group by BILLS_FVAT.ID
  5135. order by BILLS_FVAT.ID_BILLING_NUMBERS ASC
  5136. ";
  5137. //echo'<pre>sql1: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
  5138. //echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">';print_r($sql);echo'</pre>';
  5139. $res = $db_webone->query($sql);
  5140. while ($h = $db_webone->fetch_assoc($res)) {
  5141. if (0){// ? dla kazdej faktury ?
  5142. $sql = "select t1.ID_BILLING_NUMBERS AS NR_DOK
  5143. , t1.ID_BILLING_USERS as PLATNIK
  5144. , t1.WINIEN,t1.MA
  5145. , t1.ID_FIN_WINIEN as ID_F_W
  5146. , t1.ID_FIN_WINIEN_VAL as F_WINIEN_V
  5147. , t1.ID_FIN_MA as ID_F_M
  5148. , t1.ID_FIN_MA_VAL as F_MA_V
  5149. , max(t2.ID)
  5150. , sum(t2.ID_FIN_WINIEN_VAL) as ROZ_WINIEN
  5151. , max(t3.ID)
  5152. , sum(t3.ID_FIN_MA_VAL) as ROZ_MA
  5153. , t1.WINIEN - sum(t2.ID_FIN_WINIEN_VAL) - sum(t3.ID_FIN_MA_VAL) as POZ_WINIEN
  5154. , t1.MA - sum(t3.ID_FIN_MA_VAL) - sum(t2.ID_FIN_WINIEN_VAL) as POZ_MA
  5155. from `BILLING_ACCOUNTS_FILES` as t1
  5156. left join `BILLING_ACCOUNTS_FILES` as t2 on (t1.ID_BILLING_NUMBERS=t2.ID_FIN_WINIEN)
  5157. left join `BILLING_ACCOUNTS_FILES` as t3 on (t1.ID_BILLING_NUMBERS=t3.ID_FIN_MA)
  5158. where
  5159. t1.ID_FIN_WINIEN is NULL and t1.ID_FIN_MA is NULL and t1.MA = 0 and t1.WINIEN > 0
  5160. and t1.ID_BILLING_NUMBERS={$user->ID}
  5161. group by t1.ID_BILLING_NUMBERS
  5162. limit 0,1
  5163. ";
  5164. }
  5165. //$h['type'] = 'FVAT';
  5166. //$h['nr'] = $h['ID_BILLING_NUMBERS'];
  5167. //$h['WINIEN'] = $h['WARTOSC'];
  5168. //$h['MA'] = 0;
  5169. $billing_docs->add_bill_doc($h['PAYMENT_TERM'], 'FVAT', $h);
  5170. }
  5171. $faktury_cols = array();
  5172. //$faktury_cols['ID_BILLING_USERS'] = "id klienta";//
  5173. $faktury_cols['ID_BILLING_NUMBERS'] = "numer";// numer faktury
  5174. $faktury_cols['BILL_DATE'] = "";// data('Y-m-d')
  5175. $faktury_cols['SELL_DATE'] = "";// data('Y-m-d')
  5176. $faktury_cols['PAYMENT_TERM'] = "";// data('Y-m-d')
  5177. //$billing_types = WindykacjaStatsModel::get_billing_types(array(3, 4, 5, 7, 8));
  5178. $billing_types = WindykacjaStatsModel::get_billing_types();
  5179. //echo'<pre>$billing_types:';print_r($billing_types);echo'</pre>';
  5180. foreach ($billing_types as $bill_type) {
  5181. if ($bill_type['CLASS'] == 'FINANCE') {
  5182. $sql_where = ($date_limit)? " and {$bill_type['TABLE']}.BILL_DATE <= '{$date_limit}' " : "";
  5183. $sql = "select {$bill_type['TABLE']}.ID
  5184. , {$bill_type['TABLE']}.ID_BILLING_NUMBERS
  5185. , {$bill_type['TABLE']}.BILL_DATE
  5186. , round({$bill_type['TABLE']}.WINIEN, 2) as WINIEN
  5187. , round({$bill_type['TABLE']}.MA, 2) as MA
  5188. , {$bill_type['TABLE']}.ID_FK_DEKRET
  5189. , {$bill_type['TABLE']}.OPEN
  5190. , {$bill_type['TABLE']}.FK_ZAKSIEG
  5191. , {$bill_type['TABLE']}.do_dokumentu
  5192. , {$bill_type['BILLING_NUMBERS_TABLE']}.NUMBER
  5193. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_PREFIXES
  5194. , {$bill_type['BILLING_NUMBERS_TABLE']}.ID_BILLING_NUMBERS_TYPE
  5195. from {$bill_type['TABLE']}
  5196. left join {$bill_type['BILLING_NUMBERS_TABLE']} on ({$bill_type['BILLING_NUMBERS_TABLE']}.ID={$bill_type['TABLE']}.ID_BILLING_NUMBERS)
  5197. where {$bill_type['TABLE']}.ID_BILLING_USERS='{$user->ID}'
  5198. {$sql_where}
  5199. ";
  5200. //echo'<pre>sql2: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
  5201. $res = $db_webone->query($sql);
  5202. while ($h = $db_webone->fetch_assoc($res)) {
  5203. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  5204. }
  5205. }
  5206. else if ($bill_type['CLASS'] == 'SELL_MA') {
  5207. $sql_where = ($date_limit)? " and t.BILL_DATE <= '{$date_limit}' " : "";
  5208. $sql = "select t.ID
  5209. , count(t_pos.ID) as cnt
  5210. , t_pos.ID_BILLS_FVAT
  5211. , t.ID_CURRENCY
  5212. , round(sum((t_pos.N_AMMOUNT * t_pos.N_PRICE) * ( 1 + t_pos.N_VAT / 100)),2) as WINIEN
  5213. , round(sum(
  5214. ((t_pos.AMMOUNT * t_pos.PRICE) * ( 1 + t_pos.VAT / 100))
  5215. - (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.N_VAT / 100)
  5216. + (t_pos.N_AMMOUNT * t_pos.N_PRICE * t_pos.VAT / 100)
  5217. ),2) as MA
  5218. , t.ID_BILLING_NUMBERS
  5219. , t.OPEN
  5220. , t.FK_ZAKSIEG
  5221. , t.IF_KORV , t.BILL_DATE
  5222. , t_num.`NUMBER`
  5223. , t_num.`ID_BILLING_PREFIXES`
  5224. , fv_num.`NUMBER` as FV_NUMBER
  5225. from `{$bill_type['TABLE']}` t
  5226. left join `{$bill_type['BILLING_NUMBERS_TABLE']}` t_num on (t_num.`ID`=t.`ID_BILLING_NUMBERS`)
  5227. left join `{$bill_type['BILLING_NUMBERS_TABLE']}` fv_num on (fv_num.`ID`=t.`REMOTE_ID_BILLING_NUMBERS`)
  5228. left join `{$bill_type['TABLE']}_POS` t_pos on (t_pos.`ID_BILLS_FVAT`=t.`ID`)
  5229. where t.`ID_BILLING_USERS`='{$user->ID}'
  5230. {$sql_where}
  5231. group by t.`ID`
  5232. order by t.`ID`
  5233. ";
  5234. //echo'<pre>sql3: L.' . __LINE__ . "\n";print_r($sql);echo'</pre>';
  5235. $res = $db_webone->query($sql);
  5236. while ($h = $db_webone->fetch_assoc($res)) {
  5237. $billing_docs->add_bill_doc($h['BILL_DATE'], $bill_type['TYPE'], $h);
  5238. }
  5239. }
  5240. }
  5241. return $billing_docs;
  5242. }
  5243. /**
  5244. * @used in FunkcjeL1::billing_billwiev_przeterminowania
  5245. */
  5246. public static function get_billing_account_files($user_id) {
  5247. $baf = array();
  5248. $ECHO_PARAM = '';
  5249. $ID_BILLING_USERS_PARAM = $user_id;
  5250. $db_webone = DB::getDB('931');
  5251. if (!$db_webone) {
  5252. echo'<p style="color:red">'."Blad polaczenia do bazy dancyh webone_billing - Zasob [931]".'</p>';
  5253. return $baf;
  5254. }
  5255. $WHERE = "";
  5256. if ($ID_BILLING_USERS_PARAM) $WHERE .= " and BAF.ID_BILLING_USERS='{$ID_BILLING_USERS_PARAM}' ";
  5257. //UZGODNIENIE_SALD
  5258. if (strstr($ECHO_PARAM, 'saldo_rok')) {
  5259. global $base_path ;
  5260. include_once($base_path."/modules/billing/bill/modules/billing_financefunc.inc");
  5261. if ($ID_BILLING_USERS_PARAM) {
  5262. 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) {
  5263. UAKTUALNIJ_KONTA($ID_BILLING_USERS_PARAM);
  5264. }
  5265. }
  5266. $WHERE .= " AND YEAR(BN.TIMESTAMP)<YEAR(NOW()) ";
  5267. }
  5268. $WHERE_FIRMA = "";
  5269. if ($_GET['FIRMA']) $WHERE_FIRMA = "and BILLING_USERS.BILLING_OWNER='{$_GET['FIRMA']}'" ;
  5270. //$billing_account_files = WindykacjaStatsModel::
  5271. $sql = "create temporary table TEMP_BILLING_ACCOUNTS_FILES
  5272. select BAF.ID
  5273. , BAF.ID_BILLING_USERS
  5274. , BAF.WINIEN
  5275. , BAF.MA
  5276. , BAF.ID_BILLING_NUMBERS_TYPE
  5277. , BN.NUMBER
  5278. , BN.ID_BILLING_PREFIXES
  5279. , BAF_WINIEN.ID_FIN_WINIEN
  5280. , BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W
  5281. , BAF_BN_WINIEN.NUMBER as NUMBER_W
  5282. , BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W
  5283. , unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W
  5284. , BAF_WINIEN.ID_FIN_WINIEN_VAL
  5285. , NULL as ID_FIN_MA
  5286. , NULL as ID_BILLING_NUMBERS_TYPE_M
  5287. , NULL as NUMBER_M
  5288. , NULL as ID_BILLING_PREFIXES_M
  5289. , NULL as TIMESTAMP_M
  5290. , NULL as ID_FIN_MA_VAL
  5291. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM)) as TERMIN_PL
  5292. , BUA.P_NAME
  5293. , BUA.P_NAME_SECOND
  5294. , BUA.P_ADDRESS_CITY
  5295. , BUA.P_ADDRESS_STREET
  5296. , BUA.P_ADDRESS_HOUSE
  5297. , BUA.P_ADDRESS_HOME
  5298. , BUA.user_mail_contact
  5299. , BA.WINIEN as BA_WINIEN
  5300. , BA.MA as BA_MA
  5301. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  5302. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  5303. from BILLING_ACCOUNTS_FILES as BAF
  5304. left join BILLING_USERS on BILLING_USERS.ID=BAF.ID_BILLING_USERS
  5305. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  5306. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  5307. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  5308. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  5309. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  5310. left join BILLING_ACCOUNTS_FILES as BAF_WINIEN on BAF_WINIEN.ID_FIN_WINIEN=BAF.ID_BILLING_NUMBERS
  5311. left join BILLING_NUMBERS as BAF_BN_WINIEN on BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS
  5312. where BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL and BAF.ID_FIN_WINIEN is NULL
  5313. {$WHERE}
  5314. {$WHERE_FIRMA}
  5315. ";
  5316. $sql2 = "insert into TEMP_BILLING_ACCOUNTS_FILES
  5317. select BAF.ID
  5318. , BAF.ID_BILLING_USERS
  5319. , BAF.WINIEN
  5320. , BAF.MA
  5321. , BAF.ID_BILLING_NUMBERS_TYPE
  5322. , BN.NUMBER
  5323. , BN.ID_BILLING_PREFIXES
  5324. , NULL as ID_FIN_WINIEN
  5325. , NULL as ID_BILLING_NUMBERS_TYPE_W
  5326. , NULL as NUMBER_W
  5327. , NULL as ID_BILLING_PREFIXES_W
  5328. , NULL as TIMESTAMP_W
  5329. , NULL as ID_FIN_WINIEN_VAL
  5330. , BAF_MA.ID_FIN_MA
  5331. , BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M
  5332. , BAF_BN_MA.NUMBER as NUMBER_M
  5333. , BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M
  5334. , unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M
  5335. , BAF_MA.ID_FIN_MA_VAL
  5336. , unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM, BILLS_KORV.PAYMENT_TERM))
  5337. , BUA.P_NAME
  5338. , BUA.P_NAME_SECOND
  5339. , BUA.P_ADDRESS_CITY
  5340. , BUA.P_ADDRESS_STREET
  5341. , BUA.P_ADDRESS_HOUSE
  5342. , BUA.P_ADDRESS_HOME
  5343. , BUA.user_mail_contact
  5344. , BA.WINIEN as BA_WINIEN
  5345. , BA.MA as BA_MA
  5346. , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP
  5347. , unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP
  5348. from BILLING_ACCOUNTS_FILES as BAF
  5349. left join BILLING_USERS on (BILLING_USERS.ID=BAF.ID_BILLING_USERS)
  5350. left join BILLING_USERS_ADD as BUA on (BUA.id_users=BAF.ID_BILLING_USERS)
  5351. left join BILLING_NUMBERS as BN on (BN.ID=BAF.ID_BILLING_NUMBERS)
  5352. left join BILLING_ACCOUNTS as BA on (BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS)
  5353. left join BILLS_FVAT on (BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  5354. left join BILLS_KORV on (BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS)
  5355. left join BILLING_ACCOUNTS_FILES as BAF_MA on (BAF_MA.ID_FIN_MA=BAF.ID_BILLING_NUMBERS)
  5356. left join BILLING_NUMBERS as BAF_BN_MA on (BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS)
  5357. where
  5358. BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL
  5359. {$WHERE}
  5360. {$WHERE_FIRMA}
  5361. ";
  5362. if (strstr($ECHO_PARAM,'saldo_rok')) {
  5363. $sql = "create temporary table TEMP_BILLING_ACCOUNTS_FILES
  5364. select
  5365. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  5366. BAF_WINIEN.ID_FIN_WINIEN,
  5367. BAF_WINIEN.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_W,
  5368. BAF_BN_WINIEN.NUMBER as NUMBER_W,
  5369. BAF_BN_WINIEN.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_W,
  5370. unix_timestamp(BAF_BN_WINIEN.TIMESTAMP) as TIMESTAMP_W,
  5371. BAF_WINIEN.ID_FIN_WINIEN_VAL,
  5372. NULL as ID_FIN_MA,
  5373. NULL as ID_BILLING_NUMBERS_TYPE_M,
  5374. NULL as NUMBER_M,
  5375. NULL as ID_BILLING_PREFIXES_M,
  5376. NULL as TIMESTAMP_M,
  5377. NULL as ID_FIN_MA_VAL,
  5378. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  5379. 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 ,
  5380. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  5381. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  5382. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  5383. from BILLING_ACCOUNTS_FILES as BAF
  5384. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  5385. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  5386. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  5387. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  5388. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  5389. 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 )
  5390. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  5391. 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 )
  5392. left join BILLING_NUMBERS as BAF_BN_WINIEN on ( BAF_BN_WINIEN.ID=BAF_WINIEN.ID_BILLING_NUMBERS )
  5393. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  5394. where
  5395. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  5396. and (YEAR(BAF_BN_WINIEN.TIMESTAMP)<YEAR(NOW()) or BAF_BN_WINIEN.TIMESTAMP is NULL )
  5397. {$WHERE}
  5398. limit 2000 ;
  5399. ";
  5400. $sql2 = " insert into TEMP_BILLING_ACCOUNTS_FILES select
  5401. BAF.ID, BAF.ID_BILLING_USERS , BAF.WINIEN, BAF.MA, BAF.ID_BILLING_NUMBERS_TYPE, BN.NUMBER , BN.ID_BILLING_PREFIXES,
  5402. NULL as ID_FIN_WINIEN,
  5403. NULL as ID_BILLING_NUMBERS_TYPE_W,
  5404. NULL as NUMBER_W ,
  5405. NULL as ID_BILLING_PREFIXES_W,
  5406. NULL as TIMESTAMP_W ,
  5407. NULL as ID_FIN_WINIEN_VAL ,
  5408. BAF_MA.ID_FIN_MA,
  5409. BAF_MA.ID_BILLING_NUMBERS_TYPE as ID_BILLING_NUMBERS_TYPE_M,
  5410. BAF_BN_MA.NUMBER as NUMBER_M,
  5411. BAF_BN_MA.ID_BILLING_PREFIXES as ID_BILLING_PREFIXES_M,
  5412. unix_timestamp(BAF_BN_MA.TIMESTAMP) as TIMESTAMP_M,
  5413. BAF_MA.ID_FIN_MA_VAL,
  5414. unix_timestamp(ifnull(BILLS_FVAT.PAYMENT_TERM,ifnull( BILLS_KORV.PAYMENT_TERM,BN.TIMESTAMP ))) as TERMIN_PL ,
  5415. 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 ,
  5416. BA.WINIEN as BA_WINIEN , BA.MA as BA_MA , unix_timestamp(BA.TIMESTAMP) as BA_TIMESTAMP,
  5417. unix_timestamp(BAF.TIMESTAMP) as BAF_TIMESTAMP,
  5418. BILLING_ACCOUNTS_TILL.TILL as BAT_TILL , BILLING_ACCOUNTS_TILL.WINIEN as BAT_WINIEN, BILLING_ACCOUNTS_TILL.MA as BAT_MA
  5419. from BILLING_ACCOUNTS_FILES as BAF
  5420. left join BILLING_USERS_ADD as BUA on BUA.id_users=BAF.ID_BILLING_USERS
  5421. left join BILLING_NUMBERS as BN on BN.ID=BAF.ID_BILLING_NUMBERS
  5422. left join BILLING_ACCOUNTS as BA on BA.ID_BILLING_USERS=BAF.ID_BILLING_USERS
  5423. left join BILLS_FVAT on BILLS_FVAT.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  5424. left join BILLS_KORV on BILLS_KORV.ID_BILLING_NUMBERS=BAF.ID_BILLING_NUMBERS
  5425. 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 )
  5426. left join BILLING_NUMBERS as BAF_TRG_BN on ( BAF_TRG.ID_BILLING_NUMBERS=BAF_TRG_BN.ID )
  5427. 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 )
  5428. left join BILLING_NUMBERS as BAF_BN_MA on ( BAF_BN_MA.ID=BAF_MA.ID_BILLING_NUMBERS )
  5429. left join BILLING_ACCOUNTS_TILL on (BILLING_ACCOUNTS_TILL.ID_BILLING_USERS=BAF.ID_BILLING_USERS and BILLING_ACCOUNTS_TILL.TILL=year(now())-1 )
  5430. where
  5431. ( BAF.ID_FIN_WINIEN is NULL and BAF.ID_FIN_MA is NULL or year(BAF_TRG_BN.TIMESTAMP)>year(NOW())-1 )
  5432. and BAF.ID_BILLING_USERS='1047' AND YEAR(BN.TIMESTAMP)<YEAR(NOW())
  5433. and (YEAR(BAF_BN_MA.TIMESTAMP)<YEAR(NOW()) or BAF_BN_MA.TIMESTAMP is NULL )
  5434. {$WHERE}
  5435. limit 1000,1000 ;
  5436. ";
  5437. }//EOF if saldo_rok param
  5438. $sql_alter = "alter table TEMP_BILLING_ACCOUNTS_FILES
  5439. modify ID_FIN_MA int(11)
  5440. , modify ID_BILLING_NUMBERS_TYPE_M int(2)
  5441. , modify NUMBER_M int(10)
  5442. , modify ID_BILLING_PREFIXES_M int(2) default NULL NULL
  5443. , modify TIMESTAMP_M int(10)
  5444. , modify ID_FIN_MA_VAL decimal(10,2)
  5445. , modify ID_BILLING_PREFIXES int(2) default NULL NULL
  5446. , modify ID_BILLING_PREFIXES_W int(2) default NULL NULL
  5447. ";
  5448. $db_webone->query("drop TEMPORARY table TEMP_BILLING_ACCOUNTS_FILES");
  5449. $result_create = $db_webone->query($sql);
  5450. $result_alter = $db_webone->query($sql_alter);
  5451. $result_create2 = $db_webone->query($sql2);
  5452. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">db_webone: ';print_r($db_webone);echo'</pre>';
  5453. $sql = "select * from TEMP_BILLING_ACCOUNTS_FILES order by ID_BILLING_USERS,ID ";
  5454. $sql_count = "select count(1) as cnt from TEMP_BILLING_ACCOUNTS_FILES ";
  5455. $count = 0;
  5456. $res = $db_webone->query($sql_count);
  5457. if ($r_count = $db_webone->fetch($res)) {
  5458. $count = $r_count->cnt;
  5459. }
  5460. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">count: ';print_r($count);echo'</pre>';
  5461. if ($count > 0 && $ID_BILLING_USERS_PARAM > 0) {
  5462. $result = $db_webone->query($sql);
  5463. } else {
  5464. $sql_none = "insert into TEMP_BILLING_ACCOUNTS_FILES (ID,ID_BILLING_USERS,BAT_TILL,BAT_WINIEN,BAT_MA)
  5465. 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
  5466. ";
  5467. $db_webone->query($sql_none);
  5468. $result = $db_webone->query($sql);
  5469. }
  5470. while ($h_baf = $db_webone->fetch_row($result)) {
  5471. $baf[] = $h_baf;
  5472. }
  5473. return $baf;
  5474. }
  5475. public static function update_doc_number(&$fvat_arr) {
  5476. $fetch_ids = array();
  5477. foreach ($fvat_arr as $k => $fvat) {
  5478. $fetch_ids[] = $fvat['ID_BILLING_NUMBERS'];
  5479. }
  5480. if (!empty($fetch_ids)) {
  5481. $db_webone = DB::getDB('931');
  5482. if (!$db_webone) {
  5483. return -1;
  5484. }
  5485. $sql = "select `ID`, `NUMBER`, `ID_BILLING_PREFIXES`
  5486. from `BILLING_NUMBERS`
  5487. where
  5488. `ID` in(".implode(",", $fetch_ids).")
  5489. ";
  5490. $res = $db_webone->query($sql);
  5491. $bnum = array();
  5492. while ($h = $db_webone->fetch_assoc($res)) {
  5493. $bnum[$h['ID']] = $h;
  5494. }
  5495. foreach ($bnum as $k_id => $bn) {
  5496. foreach ($fvat_arr as $k_fvat => $fvat) {
  5497. if ($bn['ID'] == $fvat['ID_BILLING_NUMBERS']) {
  5498. $fvat_arr[$k_fvat]['NUMBER'] = $bn['NUMBER'];
  5499. $fvat_arr[$k_fvat]['ID_BILLING_PREFIXES'] = $bn['ID_BILLING_PREFIXES'];
  5500. }
  5501. }
  5502. }
  5503. }
  5504. }
  5505. /**
  5506. * @param $user - Windykacja status user
  5507. * @param $taks - wezwanie1, wezwanie2
  5508. * @param $id_proj - ID Projektu
  5509. * @returns int - ID created record
  5510. */
  5511. public static function create_koresp($user, $task, $id_proj, $params = array()) {
  5512. $sql_data = array();
  5513. $sql_zawartosc = '';
  5514. if ($task == 'wezwanie1') {
  5515. $sql_zawartosc = 'wezwanie do zaplaty';
  5516. $sql_data['K_TYP_KORESP'] = 'OUT';
  5517. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  5518. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  5519. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  5520. } else if ($task == 'wezwanie2') {
  5521. $sql_zawartosc = 'wezwanie do zaplaty - ostateczne';
  5522. $sql_data['K_TYP_KORESP'] = 'OUT';
  5523. $sql_data['K_TYP_RODZAJ'] = 'POLECONY';
  5524. $sql_data['K_LOKALIZACJA'] = 'PROJEKT';
  5525. $sql_data['K_LOKALIZACJA_NEW'] = 'PROJEKT';
  5526. } else if ($task == 'rozwiazanie umowy') {
  5527. $sql_zawartosc = 'rozwiazanie umowy ID ' . $params['nr_umowy'] . ' - ' . $params['powod_desc'];
  5528. $sql_data['K_TYP_KORESP'] = 'IN';
  5529. }
  5530. if (!$sql_zawartosc) {
  5531. return false;
  5532. }
  5533. /**
  5534. * przykładowe wezwania:
  5535. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `K_ZAWARTOS` LIKE '%wezwanie%' ORDER BY `IN7_DZIENNIK_KORESP`.`ID` DESC;
  5536. * przykład:
  5537. * SELECT * FROM `IN7_DZIENNIK_KORESP` WHERE `ID`=25951;
  5538. */
  5539. $db = DB::getDB();
  5540. $sql_obj = new stdClass();
  5541. $sql_obj->A_STATUS = 'WAITING';
  5542. foreach ($sql_data as $k_field => $v_value) {
  5543. $sql_obj->$k_field = $v_value;
  5544. }
  5545. $sql_obj->ID_BILLING_USERS = $user->ID;
  5546. $sql_obj->K_DATA_OTRZYM_KORESP = '';// data ?
  5547. $sql_obj->K_DATA_OTRZYMANEJ_KORESP = '';// data ?
  5548. $sql_obj->K_OD_KOGO = "{$user->P_NAME} {$user->P_NAME_SECOND}";
  5549. $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}";
  5550. $sql_obj->K_ZAWARTOS = $sql_zawartosc;
  5551. $sql_obj->K_ZNAK_REFERENTA = User::getFullName() . ' (' . User::getInicjaly() . ')';
  5552. $sql_obj->ID_PROJECT = $id_proj;
  5553. $ret_id = $db->ADD_NEW_OBJ('IN7_DZIENNIK_KORESP', $sql_obj);
  5554. return $ret_id;
  5555. }
  5556. /**
  5557. * @param int $user_id - IS klienta
  5558. * @param int $id_deals_old - ID umowy do wyłączenia
  5559. * @param date 'Y-m-d' $termin_odlaczenia - Termin odłączenia
  5560. * @returns int - ID created record
  5561. */
  5562. public static function create_deals_rozwiazanie($user_id, $id_deals_old, $termin_odlaczenia, $powod_desc = '') {
  5563. $db = DB::getDB();
  5564. $old_deal = $db->get_by_id('DEALS_TABLE', $id_deals_old);
  5565. if (!$old_deal) {
  5566. return false;
  5567. }
  5568. $sql_obj = new stdClass();
  5569. $sql_obj->DEALDESC = "Rezygnacja z dniem {$termin_odlaczenia}";
  5570. $sql_obj->A_STATUS = 'WAITING';
  5571. $sql_obj->ID_BILLING_USERS = $user_id;
  5572. $sql_obj->P_DEALNUMBER_OLD = $old_deal->ID;
  5573. $sql_obj->S_ADDRESS_STREET = $old_deal->S_ADDRESS_STREET;
  5574. $sql_obj->P_DEALDATE = $old_deal->P_DEALDATE;
  5575. $sql_obj->P_DEALDATE_TERM = $old_deal->P_DEALDATE_TERM;
  5576. $sql_obj->L2_HANGUP_FROM = $termin_odlaczenia;
  5577. $sql_obj->RODZAJ_DZIALANIA_HANDLOWEGO = $powod_desc;
  5578. // TODO: $sql_obj->ID_OFFERS_OFF = get_active_services_id($old_deal->ID);
  5579. /*
  5580. if(
  5581. SV.HANGUP_STATUS=SV.A_STATUS
  5582. , coalesce(SV.A_STATUS)
  5583. , if(
  5584. ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  5585. and ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  5586. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  5587. )
  5588. , coalesce(SV.HANGUP_STATUS)
  5589. , if(
  5590. ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM)
  5591. and (SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  5592. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  5593. )
  5594. , coalesce(SV.A_STATUS)
  5595. , if(
  5596. ( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  5597. and unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_TILL)
  5598. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  5599. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  5600. )
  5601. , coalesce(SV.HANGUP_STATUS)
  5602. , if(
  5603. ( unix_timestamp(NOW()) < unix_timestamp(SV.HANGUP_FROM) and unix_timestamp(NOW())< unix_timestamp(SV.HANGUP_TILL)
  5604. and ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  5605. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null ))
  5606. , coalesce(SV.A_STATUS)
  5607. , if(
  5608. ( ( SV.HANGUP_TILL='0000-00-00' or SV.HANGUP_TILL is NULL )
  5609. and ( SV.HANGUP_FROM='0000-00-00' or SV.HANGUP_FROM is null ))
  5610. , coalesce(SV.A_STATUS)
  5611. , if( unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  5612. and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL)
  5613. and (
  5614. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  5615. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )
  5616. )
  5617. , coalesce(SV.A_STATUS)
  5618. , if(
  5619. unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_FROM)
  5620. and unix_timestamp(NOW()) > unix_timestamp(SV.HANGUP_TILL)
  5621. and SV.HANGUP_FROM<SV.HANGUP_TILL
  5622. and (
  5623. ( SV.HANGUP_TILL<>'0000-00-00' and SV.HANGUP_TILL is not NULL )
  5624. and ( SV.HANGUP_FROM<>'0000-00-00' and SV.HANGUP_FROM is not null )) , 'ERROR1',
  5625. 'ERROR2'
  5626. )
  5627. )
  5628. )
  5629. )
  5630. )
  5631. )
  5632. )
  5633. )
  5634. */
  5635. /*
  5636. $id_offers_off = array();
  5637. $sql = "select
  5638. s.``
  5639. , s.`ID_OFFERS`
  5640. from `SERVICES` as s
  5641. where
  5642. s.`ID_DEALS_TABLE`='{$old_deal->ID}'
  5643. and s.`ID_BILLING_USERS`='{$user_id}'
  5644. ";
  5645. $res = $db->query($sql);
  5646. while ($r = $db->fetch($res)) {
  5647. $id_offers_off[] = $r;
  5648. }
  5649. */
  5650. $ret_id = $db->ADD_NEW_OBJ('DEALS_TABLE', $sql_obj);
  5651. return $ret_id;
  5652. }
  5653. }
  5654. class Lay_Html_Toggle {
  5655. public static function start($title, $attrs = array()) {
  5656. $cls = array();
  5657. $cls[] = 'may-hide';
  5658. if (array_key_exists('open', $attrs) && $attrs['open'] == false) $cls[] = 'hide';
  5659. echo'<div class="'.implode(' ', $cls).'">';
  5660. $st = array();
  5661. $st[] = 'margin-bottom:0';
  5662. if (!empty($attrs['color'])) $st[] = 'color:'.$attrs['color'];
  5663. echo'<h4 style="'.implode(';', $st).'">'.$title;
  5664. echo'<a class="btn-hide" href="#" onclick="'."return hide(this);".'">'."-".'</a>';
  5665. echo'<a class="btn-show" href="#" onclick="'."return hide(this);".'">'."+".'</a>';
  5666. echo'</h4>';
  5667. echo'<div class="to-hide">';
  5668. }
  5669. public static function end() {
  5670. echo'</div>';// .to-hide
  5671. echo'</div>';// .may-hide'
  5672. }
  5673. public static function show_js() {
  5674. echo'<script type="text/javascript">'."
  5675. function hide(n){
  5676. jQuery(n).parent().parent().toggleClass('hide');
  5677. return false;
  5678. }
  5679. ".'</script>';
  5680. }
  5681. }
  5682. class FunkcjeL1 {
  5683. public static function bankowy_make_nrach($NR_RACH_MASS_PAY, $ID_BILLING_USERS, $ID_BILLING_NUMBERS) {
  5684. //echo "TTUTAJ <hr> AASDADS f. bankowy_make_nrach($NR_RACH_MASS_PAY,$ID_BILLING_USERS,$ID_BILLING_NUMBERS) <br>";
  5685. $ID_BILLING_USERS = str_pad($ID_BILLING_USERS, 10, 0, STR_PAD_LEFT);
  5686. $ID_BILLING_NUMBERS = str_pad($ID_BILLING_NUMBERS, 2, 0, STR_PAD_LEFT);
  5687. $ID_BILLING_NUMBERS = substr($ID_BILLING_NUMBERS, -2);
  5688. $NN = self::bankowy_make($NR_RACH_MASS_PAY . $ID_BILLING_NUMBERS . $ID_BILLING_USERS);
  5689. if ($NN) return $NN . $NR_RACH_MASS_PAY . $ID_BILLING_NUMBERS . $ID_BILLING_USERS;
  5690. }
  5691. public static function bankowy_make($nrb) {
  5692. $nrb = preg_replace("/[^0-9]/", "", $nrb);
  5693. if (strlen($nrb) <> 24) return 0;
  5694. $nrb .= "252100";
  5695. $modulo = self::my_bcmod($nrb, 97);
  5696. $modulo = 98 - $modulo;
  5697. if (strlen($modulo) == 1) {
  5698. $modulo = "0" . $modulo;
  5699. }
  5700. return $modulo;
  5701. }
  5702. public static function my_bcmod($x, $y) {
  5703. // how many numbers to take at once? carefull not to exceed (int)
  5704. $take = 5;
  5705. $mod = '';
  5706. do {
  5707. $a = (int)$mod . substr($x, 0, $take);
  5708. $x = substr($x, $take);
  5709. $mod = $a % $y;
  5710. } while (strlen($x));
  5711. return (int)$mod;
  5712. }
  5713. public static function bankowy_formatuj_nrach($NR_RACH_MASS_PAY) {
  5714. $NR_RACH_MASS_PAY_FORMATTED = '';
  5715. if ($NR_RACH_MASS_PAY) {
  5716. for ($i = 4; $i < strlen($NR_RACH_MASS_PAY); $i += 4) {
  5717. $NR_RACH_MASS_PAY_FORMATTED = " " . substr($NR_RACH_MASS_PAY, -$i, 4) . $NR_RACH_MASS_PAY_FORMATTED;
  5718. }
  5719. $NR_RACH_MASS_PAY_FORMATTED = substr($NR_RACH_MASS_PAY, 0, $i - strlen($NR_RACH_MASS_PAY)) . " " . $NR_RACH_MASS_PAY_FORMATTED;
  5720. }
  5721. return $NR_RACH_MASS_PAY_FORMATTED;
  5722. }
  5723. public static function policz($l,$t1,$t2,$t3) {
  5724. $j = array("", "jeden ", "dwa ", "trzy ", "cztery ", "pięć ", "sześć ",
  5725. "siedem ", "osiem ", "dziewięć ", "dziesięć ", "jedenaście ",
  5726. "dwanaście ", "trzynaście ", "czternaście ", "piętnaście ",
  5727. "szesnaście ", "siedemnaście ", "osiemnaście ", "dziewiętnaście ");
  5728. $d = array("", "", "dwadzieścia ", "trzydzieści ", "czterdzieści ",
  5729. "pięćdziesiąt ", "sześćdziesiąt ", "siedemdziesiąt ",
  5730. "osiemdziesiąt ", "dziewięćdziesiąt ");
  5731. $s = array("","sto ", "dwieście ", "trzysta ", "czterysta ", "pięćset ",
  5732. "sześćset ", "siedemset ", "osiemset ", "dziewięćset ");
  5733. $txt = $s[0+substr($l,0,1)];
  5734. if (substr($l,1,2)<20) {
  5735. $txt .= $j[0+substr($l,1,2)];
  5736. }
  5737. else {
  5738. $txt .= $d[0+substr($l, 1,1)].$j[0+substr($l, 2,1)];
  5739. }
  5740. if ($l<>0) {
  5741. if ($l==1) {
  5742. $txt .= "$t1 ";
  5743. } else {
  5744. 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)) {
  5745. $txt .= "$t2 ";
  5746. } else {
  5747. $txt .= "$t3 ";
  5748. }
  5749. }
  5750. }
  5751. return $txt;
  5752. }
  5753. public static function slownie($liczba) {
  5754. $txt = '';
  5755. $kwota = explode(".", $liczba);
  5756. if (strlen($kwota[1])==1) $kwota[1] = $kwota[1]."0";
  5757. $kwotazl = sprintf("%012d",$kwota[0]);
  5758. $kwotagr = sprintf("%03d",$kwota[1]);
  5759. $txt .= self::policz(substr($kwotazl, 0,3),"miliard","miliardy","miliardów");
  5760. $txt .= self::policz(substr($kwotazl, 3,3),"milion","miliony","milionów");
  5761. $txt .= self::policz(substr($kwotazl, 6,3),"tysiąc","tysiące","tysięcy");
  5762. $txt .= self::policz(substr($kwotazl, 9,3),"złoty","złote","złotych");
  5763. if ($kwotazl==0) $txt .= "zero złotych ";
  5764. $txt .= " i ";
  5765. $txt .= self::policz($kwotagr,"grosz","grosze","groszy");
  5766. if ($kwotagr==0) $txt .= "zero groszy";
  5767. return $txt;
  5768. }
  5769. public static function formatuj_grosze($kwota) {
  5770. $kwota = round($kwota, 2);
  5771. $liczba = explode(".", $kwota);
  5772. if (!$liczba[1]) {
  5773. $liczba = explode(",", $kwota);
  5774. if (!$liczba[1]) $liczba[1] = "00";
  5775. }
  5776. if (strlen($liczba[1]) == 1) $liczba[1] = $liczba[1] . "0";
  5777. $liczba_out = $liczba[0] . "." . "$liczba[1]";
  5778. return $liczba_out;
  5779. }
  5780. public static function billing_billwiev_przeterminowania($ID_BILLING_USERS_PARAM, $IF_PRINT_PARAM, $ECHO_PARAM) {
  5781. global $vdb
  5782. , $STOPA_ODSETEK // from billing-l1/www/config.php
  5783. , $form_mail_sender // billing-l1/www/config.php:24:$form_mail_sender="/usr/bin/mutt";
  5784. , $form_send_from_param // billing-l1/www/config.php:19:$form_send_from_param="biall-net@biall.net.pl";
  5785. ;
  5786. //NAGLOWKI DO HTML MAILA
  5787. $naglowki = "From: ".$form_send_from_param."\r\n";
  5788. $naglowki .= "MIME-Version: 1.0\r\n";
  5789. $naglowki .= "Content-type: text/html; charset=iso-8859-1\r\n";
  5790. //PODRECZNE_ZAPYTANIE_SLOWNIKOWE_DO_TYPOW_DOKUMENTOW
  5791. $BNT = array();
  5792. $bnt_types = WindykacjaStatsModel::get_billing_types();
  5793. foreach ($bnt_types as $k_type_id => $h_type) {
  5794. $BNT[$h_type['ID']] = $h_type['TYPE'];
  5795. }
  5796. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">bnt_types: ';print_r($bnt_types);echo'</pre>';
  5797. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">BNT: ';print_r($BNT);echo'</pre>';
  5798. if ($_GET['ID_BILLING_USERS_PARAM']) $ID_BILLING_USERS_PARAM = $_GET['ID_BILLING_USERS_PARAM'];
  5799. if (!$IF_PRINT_PARAM && !$ECHO_PARAM) {
  5800. echo'<p style="text-align:right">';
  5801. 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')\">";
  5802. echo"<img border=\"0\" src=\"$xpath/ico/kw.gif\" width=\"16\" height=\"16\" alt=\"Zadłużenia\">";
  5803. echo"Druki wezwania do zaplaty";
  5804. echo"</a>";
  5805. echo'</p>';
  5806. }
  5807. $user_id = $ID_BILLING_USERS_PARAM;
  5808. $billing_account_files = WindykacjaStatsModel::get_billing_account_files($user_id);
  5809. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;">billing_account_files: ';print_r($billing_account_files);echo'</pre>';
  5810. die('F.' . __FUNCTION__ . ' ...');
  5811. $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>";
  5812. //while ($BAF = $vdb->sql_fetchrow($result)) {
  5813. foreach ($billing_account_files as $BAF) {
  5814. //RESETUJEMY FORM - jak nie chcemy pojedynczego odczytu:
  5815. if (!$ID_BILLING_USERS_PARAM) unset($FORM);
  5816. if (!$LAST_PLATNIK) $LAST_PLATNIK = $BAF[1];
  5817. if (!$LPD) $LPD = $BAF;
  5818. if (($BAF[0] <> $LAST_ID)) {// ID
  5819. //DRUKUJEMY_STARE_PODSUMOWANIE (DLA_FAKTURY POJEDYNCZEJ)
  5820. if ($LAST_ID) {
  5821. $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>";
  5822. $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>";
  5823. $LDNI = floor((date("U") - $DOC_TERM) / 86400) ;
  5824. if(($LDNI>0) && ($DOC_TERM) && ($LTOTAL['WINIEN_MA'] == "WINIEN")) {
  5825. $LODSETKI= FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL[WINIEN_MA]] * $STOPA_ODSETEK * $LDNI / 365);
  5826. $POD_ODSETEK=$LTOTAL[$LTOTAL['WINIEN_MA']];
  5827. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI;
  5828. $PLATNIK_DATA['PRZETER']['WINIEN'] += $LTOTAL[$LTOTAL['WINIEN_MA']];
  5829. } else {
  5830. unset($LODSETKI);
  5831. unset($LDNI);
  5832. unset($POD_ODSETEK);
  5833. }
  5834. $FORM_2.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  5835. $FORM_2.= "<td>$LODSETKI</td>";
  5836. $FORM_S.= "<td>---</td><td>---</td><td>---</td>";
  5837. // if(!$PLATNIK_DATA[TOTAL][WINIEN])
  5838. $PLATNIK_DATA[TOTAL][WINIEN]+=FunkcjeL1::formatuj_grosze($LTOTAL[WINIEN]) ;
  5839. // if(!$PLATNIK_DATA[TOTAL][MA])
  5840. $PLATNIK_DATA[TOTAL][MA]+=FunkcjeL1::formatuj_grosze($LTOTAL[MA]) ;
  5841. $FORM_2.= "</tr>";
  5842. $FORM_2.= "<tr><td colspan=\"6\"><hr></td></tr>";
  5843. $FORM_S.="</tr><tr><td colspan=\"6\"><hr></td></tr>";
  5844. $TOTAL[WINIEN]+=$LTOTAL[WINIEN] ; $TOTAL[MA]+=$LTOTAL[MA] ;
  5845. if ($LAST_PLATNIK <> $BAF[1]) {//PODSUMOWANIE_DLA_PLATNIKA
  5846. $TOTAL[PRZETER]+=$PLATNIK_DATA[PRZETER][WINIEN];
  5847. $TOTAL[ODSETKI]+=$PLATNIK_DATA[PRZETER][ODSETKI];
  5848. $FORM_2.= "<tr><td colspan=\"9\">Podsumowanie salda niezbilansowanych zobowiązań dla platnika $LAST_PLATNIK
  5849. $LPD[P_NAME] $LPD[P_NAME_SECOND] $LPD[P_ADDRESS_CITY] $LPD[P_ADDRESS_STREET] $LPD[P_ADDRESS_HOUSE] $LPD[P_ADDRESS_HOME]
  5850. <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> " ;
  5851. if($PLATNIK_DATA[PRZETER][WINIEN]) $FORM_2.=", z czego przeterminowane <font color=\"red\"><b> ".FunkcjeL1::formatuj_grosze($PLATNIK_DATA[PRZETER][WINIEN])." </b></font> ";
  5852. if($PLATNIK_DATA[PRZETER][ODSETKI]) $FORM_2.= " ( aktualnie nalezne odsetki to ".$PLATNIK_DATA[PRZETER][ODSETKI]." PLN , które mogą zostać naliczone ) " ;
  5853. 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'])." ";
  5854. $RETURN_ARR="";
  5855. $FORM_S.="<tr><td colspan=\"9\"></td></tr></table>";
  5856. $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>";
  5857. $FORM_2.= " </tr></table>";
  5858. $FORM_2 = "{$NAGLOWEK} \n {$FORM_2}";
  5859. $FORM_S= "{$NAGLOWEK} \n {$FORM_S}";
  5860. if ($IF_PRINT_PARAM) {
  5861. $delivery_subject="Stan rozrachunków dla {$LPD[P_NAME]} {$LPD[P_NAME_SECOND]}" ;
  5862. $sql2="insert into HIST_CONTACTS (ID_BILLING_USERS,ID_BILLING_NUMBERS,SUBJECT,BODY_HTML,REQUEST_STATUS_MAIL) values
  5863. ('".$LAST_PLATNIK."','','{$delivery_subject}','{$FORM_2}','CONFIRM_SENT_MAIL') ";
  5864. $res = $vdb->sql_query($sql2) ;
  5865. echo "<hr> $sql2 <hr>****";
  5866. } else if (!$ECHO_PARAM) {
  5867. echo $FORM_2;
  5868. }
  5869. $LAST_PLATNIK=$BAF[1];
  5870. unset($PLATNIK_DATA);
  5871. $FORM.=$FORM_2 ;
  5872. unset($FORM_2);
  5873. $FORM_SS.=$FORM_S ;
  5874. unset($FORM_S);
  5875. } else {
  5876. }
  5877. //$PLATNIK_DATA[TOTAL][WINIEN]+=$BAF[2];
  5878. //$PLATNIK_DATA[TOTAL][MA]+=$BAF[3];
  5879. $LPD = $BAF;
  5880. $LAST_PLATNIK = $BAF[1];
  5881. }
  5882. else {
  5883. }
  5884. //DODAJEMY_NOWY_REKORD_OD_SAMEJ_PLATNOSCI
  5885. unset($LTOTAL);
  5886. $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\">";
  5887. if ($BAF[19]) $FORM_2.="T: ".date("Y-m-d",$BAF[19])." "; else $FORM_2.="D: ".date("Y-m-d",$BAF['BAF_TIMESTAMP'])." ";
  5888. $FORM_2.="</td></tr>";
  5889. $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\">";
  5890. if($BAF[19])$FORM_S.="T: ".date("Y-m-d",$BAF[19])." "; else $FORM_2.="D: ".date("Y-m-d",$BAF['BAF_TIMESTAMP'])." ";
  5891. $FORM_S.="</td></tr>";
  5892. $DOC_TERM = $BAF[19];
  5893. if ($BAF[2] > 0) $LTOTAL['WINIEN_MA'] = "WINIEN"; else $LTOTAL['WINIEN_MA'] = "MA";
  5894. $LTOTAL[$LTOTAL['WINIEN_MA']] = $BAF[2] + $BAF[3];
  5895. } else {
  5896. //DRUKUJEMY_PODSTUMOWANIE_STAREGO i ZAPODAJEMY NOWY_REKORD
  5897. }
  5898. if ($BAF[12]) {// ID_FIN_WINIEN_VAL
  5899. $FORM_2.= "<tr><td colspan=\"1\"></td>";
  5900. $FORM_S.= "<tr><td colspan=\"1\"></td>";
  5901. if($LTOTAL['WINIEN_MA']=="MA") {
  5902. $FORM_2.= "<td><font color=\"green\"><b> $BAF[12] </b> </font></td>";
  5903. $FORM_2.= "<td></td>";
  5904. $FORM_S.="<td><font color=\"green\"><b> $BAF[12] </b> </font></td><td></td>";
  5905. } else {
  5906. $FORM_2.= "<td></td>";
  5907. $FORM_2.= "<td><font color=\"green\"><b> $BAF[12] </b> </font></td>";
  5908. $FORM_S.="<td></td><td><font color=\"green\"><b> $BAF[12] </b> </font></td>";
  5909. }
  5910. $FORM_2.= "<td>".$BNT[$BAF[8]]."</td>";
  5911. $FORM_2.= "<td> $BAF[9]/$BAF[10] </td><td>D: ".date("Y-m-d",$BAF[11])."</td> ";
  5912. $FORM_S.= "<td>".$BNT[$BAF[8]]."</td>";
  5913. $FORM_S.= "<td> $BAF[9]/$BAF[10] </td><td>D: ".date("Y-m-d",$BAF[11])."</td> ";
  5914. $LDNI = floor(($BAF[11] - $DOC_TERM) / 86400);
  5915. if (($LDNI > 0) && ($DOC_TERM) && ($LTOTAL['WINIEN_MA'] == "WINIEN")) {
  5916. $DOC_TERM = $BAF[11];
  5917. $LODSETKI = FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL['WINIEN_MA']] * $STOPA_ODSETEK * $LDNI / 365);
  5918. $POD_ODSETEK = $LTOTAL[$LTOTAL['WINIEN_MA']];
  5919. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI;
  5920. } else {
  5921. unset($LODSETKI);
  5922. unset($LDNI);
  5923. unset($POD_ODSETEK);
  5924. }
  5925. $FORM_2.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  5926. $FORM_2.= "<td>$LODSETKI</td>";
  5927. $FORM_2.= "</tr>";
  5928. $FORM_S.="<td>---</td><td>---</td><td>---</td></tr>";
  5929. $LTOTAL[$LTOTAL['WINIEN_MA']] -= $BAF[12];
  5930. }
  5931. if ($BAF[18]) {// ID_FIN_MA_VAL
  5932. $FORM_2.= "<tr><td colspan=\"1\"></td>";
  5933. $FORM_S.= "<tr><td colspan=\"1\"></td>";
  5934. if ($LTOTAL['WINIEN_MA'] == "MA") {
  5935. $FORM_2.= "<td><font color=\"red\"><b> $BAF[18] </b> </font></td>";
  5936. $FORM_2.= "<td></td>";
  5937. $FORM_S.= "<td><font color=\"red\"><b> $BAF[18] </b> </font></td><td></td>";
  5938. } else {
  5939. $FORM_2.= "<td></td>";
  5940. $FORM_2.= "<td><font color=\"red\"><b> $BAF[18] </b> </font></td>";
  5941. $FORM_S.="<td></td><td><font color=\"red\"><b> $BAF[18] </b> </font></td>";
  5942. }
  5943. $FORM_2.= "<td>".$BNT[$BAF[14]]."</td>";
  5944. $FORM_2.= "<td> $BAF[15]/$BAF[16] </td> <td>D: ".date("Y-m-d",$BAF[17])."</td> ";
  5945. $FORM_S.="<td>".$BNT[$BAF[14]]."</td> <td> $BAF[15]/$BAF[16] </td> <td>D: ".date("Y-m-d",$BAF[17])."</td> ";
  5946. $LDNI=floor(($BAF[17] - $DOC_TERM) / 86400) ;
  5947. // $LDNI=10;
  5948. if (($LDNI > 0) && ($DOC_TERM) && ($LTOTAL['WINIEN_MA'] == "WINIEN")) {
  5949. $LODSETKI = FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL[WINIEN_MA]] * $STOPA_ODSETEK * $LDNI / 365);
  5950. $POD_ODSETEK = $LTOTAL[$LTOTAL['WINIEN_MA']];
  5951. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI;
  5952. } else {
  5953. unset($LODSETKI);
  5954. unset($LDNI);
  5955. unset($POD_ODSETEK);
  5956. }
  5957. $FORM_2.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  5958. $FORM_S.= "<td>$LDNI</td><td>$POD_ODSETEK</td>";
  5959. $FORM_2.= "<td>$LODSETKI</td>";
  5960. $FORM_S.= "<td>$LODSETKI</td>";
  5961. $FORM_2.= "</tr>";
  5962. $FORM_S.= "</tr>";
  5963. $LTOTAL[$LTOTAL['WINIEN_MA']]-=$BAF[18] ;
  5964. }
  5965. $LAST_ID = $BAF[0];
  5966. $L_BAF = $BAF;
  5967. }//eof SQL while($BAF=$vdb->sql_fetchrow($result)) {
  5968. //DODANIE_ZESTAWIENIA KOPIA_Z_GORY
  5969. //DRUKUJEMY_STARE_PODSUMOWANIE (DLA_FAKTURY POJEDYNCZEJ)
  5970. if ($LAST_ID) {
  5971. $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>";
  5972. $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>";
  5973. $LDNI = round((date("U") - $DOC_TERM) / 86400, 0);
  5974. if (($LDNI > 0) && ($DOC_TERM)) {
  5975. $LODSETKI = FunkcjeL1::formatuj_grosze($LTOTAL[$LTOTAL['WINIEN_MA']] * $STOPA_ODSETEK * $LDNI / 365);
  5976. $POD_ODSETEK = $LTOTAL[$LTOTAL['WINIEN_MA']];
  5977. $PLATNIK_DATA['PRZETER']['ODSETKI'] += $LODSETKI ;
  5978. $PLATNIK_DATA['PRZETER']['WINIEN'] += $LTOTAL[$LTOTAL['WINIEN_MA']];
  5979. } else {
  5980. unset($LODSETKI);
  5981. unset($LDNI);
  5982. unset($POD_ODSETEK);
  5983. }
  5984. $FORM_2.= "<td>$LDNI</td><td>".FunkcjeL1::formatuj_grosze($POD_ODSETEK)."</td>";
  5985. $FORM_2.= "<td>$LODSETKI</td>";
  5986. $FORM_S.="<td>---</td><td>---</td><td>---</td>";
  5987. // if(!$PLATNIK_DATA[TOTAL]['WINIEN'])
  5988. $PLATNIK_DATA['TOTAL']['WINIEN']+=FunkcjeL1::formatuj_grosze($LTOTAL['WINIEN']) ;
  5989. // if(!$PLATNIK_DATA[TOTAL][MA])
  5990. $PLATNIK_DATA['TOTAL']['MA']+=FunkcjeL1::formatuj_grosze($LTOTAL['MA']) ;
  5991. $FORM_2.= "</tr>";
  5992. $FORM_2.= "<tr><td colspan=\"6\"><hr></td></tr>";
  5993. $FORM_S.="</tr><tr><td colspan=\"6\"><hr></td></tr>";
  5994. $TOTAL['WINIEN']+=$LTOTAL['WINIEN'] ; $TOTAL['MA']+=$LTOTAL['MA'] ;
  5995. if ($LAST_PLATNIK <> $BAF[1]) {//PODSUMOWANIE_DLA_PLATNIKA
  5996. $TOTAL['PRZETER'] += $PLATNIK_DATA['PRZETER']['WINIEN'];
  5997. $TOTAL['ODSETKI'] += $PLATNIK_DATA['PRZETER']['ODSETKI'];
  5998. if (!$LPD) $LPD = $L_BAF ;
  5999. $FORM_2.= "<tr><td colspan=\"9\">Podsumowanie salda niezbilansowanych zobowiązań dla platnika $LAST_PLATNIK
  6000. $LPD[P_NAME] $LPD[P_NAME_SECOND] $LPD[P_ADDRESS_CITY] $LPD[P_ADDRESS_STREET] $LPD[P_ADDRESS_HOUSE] $LPD[P_ADDRESS_HOME]
  6001. <br> WINIEN: <b>".$PLATNIK_DATA['TOTAL']['WINIEN']."</b> - MA: <b>".$PLATNIK_DATA['TOTAL']['MA']."</b>
  6002. DO ZAPŁATY: <b>".FunkcjeL1::formatuj_grosze($PLATNIK_DATA['TOTAL']['WINIEN']-$PLATNIK_DATA['TOTAL']['MA'])."</b> " ;
  6003. if ($PLATNIK_DATA['PRZETER']['WINIEN']) $FORM_2.=", z czego przeterminowane <font color=\"red\"><b> ".FunkcjeL1::formatuj_grosze($PLATNIK_DATA['PRZETER']['WINIEN'])." </b></font> ";
  6004. if ($PLATNIK_DATA['PRZETER']['ODSETKI']) $FORM_2.= " ( aktualnie nalezne odsetki to ".$PLATNIK_DATA['PRZETER']['ODSETKI']." PLN , które mogą zostać naliczone ) " ;
  6005. 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'])." ";
  6006. $RETURN_ARR="";
  6007. $FORM_S.="<tr><td colspan=\"9\"></td></tr></table>";
  6008. $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>";
  6009. $FORM_2.= " </tr></table>";
  6010. $FORM_2 = "{$NAGLOWEK} \n {$FORM_2}";
  6011. $FORM_S = "{$NAGLOWEK}{$FORM_S}";
  6012. //DRUKOWANIE ZESTAWIENIA
  6013. if ($IF_PRINT_PARAM) {
  6014. $delivery_subject="Stan rozrachunków dla {$LPD['P_NAME']} {$LPD['P_NAME_SECOND']}" ;
  6015. // exec("echo \"Pliki zostały dołączone do załącznika\" | $form_mail_sender -n -a \"$filename\" $delivery_mail -s ".$delivery_subject."" );
  6016. $sql2="insert into HIST_CONTACTS (ID_BILLING_USERS,ID_BILLING_NUMBERS,SUBJECT,BODY_HTML,REQUEST_STATUS_MAIL) values
  6017. ('".$LAST_PLATNIK."','','{$delivery_subject}','{$FORM_2}','CONFIRM_SENT_MAIL') ";
  6018. $res = $vdb->sql_query($sql2);
  6019. echo "<hr> {$sql2} <hr>***";
  6020. } else if (!$ECHO_PARAM) {
  6021. echo $FORM_2;
  6022. }
  6023. //EOF DRUKOWANIE ZESTAWIENIA itp
  6024. $LAST_PLATNIK = $BAF[1];
  6025. $ECHO_DATA=$PLATNIK_DATA;
  6026. unset($PLATNIK_DATA);
  6027. $FORM .= "{$FORM_2}</table>";
  6028. $FORM_SS .= "{$FORM_S}</table>";
  6029. unset($FORM_2);
  6030. unset($FORM_S);
  6031. }
  6032. }
  6033. $FORM_2.= $NAGLOWEK;
  6034. $FORM_2.= "<tr><td>TOT</td><td><b>{$TOTAL['WINIEN']}</b></td><td><b>{$TOTAL['MA']}</b></td><td colspan=\"4\"></td>
  6035. <td><b>{$TOTAL['PRZETER']}</b></td><td><b>{$TOTAL['ODSETKI']}</b></td></tr>";
  6036. $FORM_2 .= "</table>";
  6037. if (!$ECHO_PARAM) echo "{$FORM_2}";
  6038. $FORM_S.= "</table> ";
  6039. if ($ECHO_PARAM == "zadluzenie") return FunkcjeL1::formatuj_grosze($ECHO_DATA['PRZETER']['WINIEN']);
  6040. if ($ECHO_PARAM == "saldo") return FunkcjeL1::formatuj_grosze($LPD['BA_WINIEN']-$LPD['BA_MA']);
  6041. if ($ECHO_PARAM == "zadluzenie_lista") return $FORM;
  6042. if ($ECHO_PARAM == "saldo_rok") {
  6043. $L_BAF['FORM'] = $FORM;
  6044. $L_BAF['FORM_SALDO'] = $FORM_SS;
  6045. return $L_BAF;
  6046. }
  6047. }
  6048. }