StockController.php 265 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943
  1. <?php
  2. /*
  3. Desarrollador: Ing. Jean Jairo Benitez Meza
  4. Ultima Modificación: 11/04/2023
  5. Módulo: Gestión de Inventario y/o Stock
  6. */
  7. namespace App\Http\Controllers;
  8. use App\Http\Controllers\Controller;
  9. use App\Http\Controllers\ResourcesController;
  10. use App\Http\Controllers\ResponseController;
  11. use App\Http\Controllers\EncryptionController;
  12. use App\Http\Controllers\DocumentManagementController;
  13. use Illuminate\Database\Query\JoinClause;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\DB;
  16. use Illuminate\Support\Facades\Validator;
  17. use App\Http\Controllers\FunctionsController;
  18. use Illuminate\Support\Facades\Storage;
  19. use Illuminate\Http\File;
  20. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  21. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  22. use Dompdf\Dompdf;
  23. class StockController extends Controller
  24. {
  25. private $responseController;
  26. private $encController;
  27. private $resourcesController;
  28. private $documentManagementController;
  29. private $functionsController;
  30. private $processManagementController;
  31. public function __construct(){
  32. $this->responseController = new ResponseController();
  33. $this->encController = new EncryptionController();
  34. $this->resourcesController = new ResourcesController();
  35. $this->documentManagementController = new DocumentManagementController();
  36. $this->functionsController = new FunctionsController();
  37. $this->processManagementController = new ProcessManagementController();
  38. }
  39. // Crear Artículo en Stock
  40. public function createArtitleWithoutOrder(Request $request) {
  41. $validator = Validator::make($request->all(), [
  42. 'ARTICULO' => 'required',
  43. 'MODELO' => 'required',
  44. 'CODIGO_MODELO' => 'required',
  45. 'FAMILIA' => 'required',
  46. 'SUBFAMILIA' => 'required',
  47. 'UNIDAD' => 'required',
  48. 'CODIGO_BARRAS' => 'required',
  49. 'CANTIDAD' => 'required',
  50. 'STOCK_MINIMO' => 'required',
  51. 'STOCK_MAXIMO' => 'required',
  52. 'REPARACION' => 'required|boolean',
  53. 'CONSUMIBLE' => 'required|boolean',
  54. 'PELIGROSO' => 'required|boolean',
  55. // 'FECHA_VENCIMIENTO' => '',
  56. // 'PROVEEDOR' => 'required',
  57. 'IMAGEN' => 'required',
  58. 'NUMERO_LINEA' => 'required',
  59. 'USUARIO' => 'required',
  60. ]);
  61. if ($validator->fails()) {
  62. return $this->responseController->makeResponse(
  63. true,
  64. "ERR_STOCK_REG000: Se encontraron uno o más errores.",
  65. $this->responseController->makeErrors($validator->errors()->messages()),
  66. 401
  67. );
  68. }
  69. DB::beginTransaction();
  70. $requestData = $request->all();
  71. try {
  72. $user = $this->encController->decrypt($requestData['USUARIO']);
  73. } catch (\Throwable $th) {
  74. DB::rollBack();
  75. return $this->responseController->makeResponse(true, "ERR_STOCK_REG001: Ocurrió un error al obtener el usuario.", $th->getMessage(), 500);
  76. }
  77. try {
  78. $validateFamily = DB::table('S002V01TFAMI')
  79. ->where('FAMI_COFA','=', $requestData['FAMILIA'])
  80. ->where('FAMI_NULI','=', $requestData['NUMERO_LINEA'])
  81. ->where('FAMI_ESTA','=','Activo')
  82. ->exists();
  83. } catch (\Throwable $th) {
  84. DB::rollBack();
  85. return $this->responseController->makeResponse(true, "ERR_STOCK_REG002: Ocurrió un error al validar la familia.", $th->getMessage(), 500);
  86. }
  87. if (!$validateFamily) {
  88. DB::rollBack();
  89. return $this->responseController->makeResponse(true, "ERR_STOCK_REG003: La familia no existe.", [], 500);
  90. }
  91. try {
  92. $validateSubfamily = DB::table('S002V01TSUBF')
  93. ->where('SUBF_COSU','=', $requestData['SUBFAMILIA'])
  94. ->where('SUBF_NULI','=', $requestData['NUMERO_LINEA'])
  95. ->where('SUBF_ESTA','=','Activo')
  96. ->exists();
  97. } catch (\Throwable $th) {
  98. DB::rollBack();
  99. return $this->responseController->makeResponse(true, "ERR_STOCK_REG004: Ocurrió un error al validar la subfamilia.", $th->getMessage(), 500);
  100. }
  101. if (!$validateSubfamily) {
  102. DB::rollBack();
  103. return $this->responseController->makeResponse(true, "ERR_STOCK_REG005: La subfamilia no existe.", [], 500);
  104. }
  105. try {
  106. $validateUnit = DB::table('S002V01TUNID')
  107. ->where('UNID_IDUN','=', $requestData['UNIDAD'])
  108. ->where('UNID_NULI','=', $requestData['NUMERO_LINEA'])
  109. ->where('UNID_ESTA','=','Activo')
  110. ->exists();
  111. } catch (\Throwable $th) {
  112. DB::rollBack();
  113. return $this->responseController->makeResponse(true, "ERR_STOCK_REG006: Ocurrió un error al validar la unidad.", $th->getMessage(), 500);
  114. }
  115. if (!$validateUnit) {
  116. DB::rollBack();
  117. return $this->responseController->makeResponse(true, "ERR_STOCK_REG007: La unidad no existe.", [], 500);
  118. }
  119. $requestData['PROVEEDOR'] = $requestData['PROVEEDOR'] === '' ? null : $requestData['PROVEEDOR'];
  120. if (!is_null($requestData['PROVEEDOR'])) {
  121. try {
  122. $validateUnit = DB::table('S002V01TPROV')
  123. ->where('PROV_NUPR','=', $requestData['PROVEEDOR'])
  124. ->where('PROV_NULI','=', $requestData['NUMERO_LINEA'])
  125. ->where('PROV_ESTA','=','Activo')
  126. ->exists();
  127. } catch (\Throwable $th) {
  128. DB::rollBack();
  129. return $this->responseController->makeResponse(true, "ERR_STOCK_REG008: Ocurrió un error al validar el proveedor.", $th->getMessage(), 500);
  130. }
  131. if (!$validateUnit) {
  132. DB::rollBack();
  133. return $this->responseController->makeResponse(true, "ERR_STOCK_REG009: El proveedor no existe.", [], 500);
  134. }
  135. }
  136. $arrCodeImages = array();
  137. foreach ($requestData['IMAGEN'] as $key => $encIdFile) {
  138. $idFile = $this->encController->decrypt($encIdFile);
  139. $tempFile = DB::table('S002V01TARTE')->where([
  140. ['ARTE_NULI', '=', $requestData['NUMERO_LINEA']],
  141. ['ARTE_IDAR', '=', $idFile],
  142. ])->first();
  143. if(is_null($tempFile)){
  144. return $this->responseController->makeResponse(true, 'ERR_ARTITLE_REG006: El archivo consultado no está registrado', [], 404);
  145. }else if($tempFile->ARTE_ESTA == 'Eliminado'){
  146. return $this->responseController->makeResponse(true, 'ERR_ARTITLE_REG007: El archivo consultado está eliminado', [], 404);
  147. }
  148. $fileResponse = $this->documentManagementController->moveFinalFile(
  149. intval($requestData['NUMERO_LINEA']),
  150. 'GIST',
  151. 'FO',
  152. $tempFile,
  153. $user,
  154. );
  155. if(!$fileResponse[0]){
  156. return $this->responseController->makeResponse(true, 'ERR_ARTITLE_REG008: '.$fileResponse[1], [], 400);
  157. }
  158. $arrCodeImages[] = $this->encController->encrypt($fileResponse[1]);
  159. }
  160. $jsonImages = json_encode($arrCodeImages);
  161. $now = $this->functionsController->now();
  162. $currentDate = $now->toDateTimeString();
  163. try {
  164. $validateRegister = DB::table('S002V01TSTAR')->insert([
  165. // 'STAR_CODI' => $requestData['CODIGO_STOCK'],
  166. 'STAR_ARTI' => $requestData['ARTICULO'],
  167. 'STAR_MODE' => $requestData['MODELO'],
  168. 'STAR_COMO' => $requestData['CODIGO_MODELO'],
  169. 'STAR_IDFA' => $requestData['FAMILIA'],
  170. 'STAR_IDSU' => $requestData['SUBFAMILIA'],
  171. 'STAR_NUPR' => $requestData['PROVEEDOR'],
  172. 'STAR_IDUN' => $requestData['UNIDAD'],
  173. 'STAR_COBA' => $requestData['CODIGO_BARRAS'],
  174. 'STAR_CANT' => $requestData['CANTIDAD'],
  175. 'STAR_STMI' => $requestData['STOCK_MINIMO'],
  176. 'STAR_STMA' => $requestData['STOCK_MAXIMO'],
  177. 'STAR_REPA' => $requestData['REPARACION'],
  178. 'STAR_CONS' => $requestData['CONSUMIBLE'],
  179. 'STAR_PELI' => $requestData['PELIGROSO'],
  180. 'STAR_FEVE' => $requestData['FECHA_VENCIMIENTO'],
  181. 'STAR_IMAG' => $jsonImages,
  182. 'STAR_TIAD' => 'Sin Pedido',
  183. 'STAR_NULI' => $requestData['NUMERO_LINEA'],
  184. 'STAR_USRE' => $user,
  185. 'STAR_FERE' => $currentDate,
  186. 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  187. ]);
  188. } catch (\Throwable $th) {
  189. DB::rollBack();
  190. return $this->responseController->makeResponse(true, "ERR_STOCK_REG011: Ocurrió un error al registrar el artículo.", $th->getMessage(), 500);
  191. }
  192. if (!$validateRegister) {
  193. DB::rollBack();
  194. return $this->responseController->makeResponse(true, "ERR_STOCK_REG012: No se pudo registrar el artículo.", [], 500);
  195. }
  196. DB::commit();
  197. return $this->responseController->makeResponse(false, "EXITO: Registro Exitoso");
  198. }
  199. // FUNCIÓN GESTIÓN DE ALMACENES
  200. public function getWarehouse( $user, $line ) {
  201. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  202. if ($arrResponseCheckUser['error']) {
  203. DB::rollBack();
  204. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401);
  205. }
  206. try {
  207. $arrWarehouse = DB::table('S002V01TALMA')
  208. ->where('ALMA_NULI', '=', $line)
  209. ->get([
  210. 'ALMA_COAL AS CODIGO_ALMACEN',
  211. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  212. 'ALMA_NORE AS NOMBRE_RESPONSABLE',
  213. 'ALMA_APRE AS APELLIDO_PATERNO_RESPONSABLE',
  214. 'ALMA_AMRE AS APELLIDO_MATERNO_RESPONSABLE',
  215. 'ALMA_COR1 AS CORREO1',
  216. 'ALMA_COR2 AS CORREO2',
  217. 'ALMA_LAD1 AS LADA1',
  218. 'ALMA_TEL1 AS TELEFONO1',
  219. 'ALMA_LAD2 AS LADA2',
  220. 'ALMA_TEL2 AS TELEFONO2',
  221. 'ALMA_CALL AS CALLE',
  222. 'ALMA_NUEX AS NUMERO_EXTERIOR',
  223. 'ALMA_NUIN AS NUMERO_INTERIOR',
  224. 'ALMA_COPO AS CODIGO_POSTAL',
  225. 'ALMA_COLO AS COLONIA',
  226. 'ALMA_LOCA AS LOCALIDAD',
  227. 'ALMA_MUNI AS MUNICIPIO',
  228. 'ALMA_ENTI AS ENTIDAD_FEDERATIVA',
  229. 'ALMA_PAIS AS PAIS',
  230. 'ALMA_ESTA AS ESTADO',
  231. 'ALMA_USRE AS USUARIO_REGISTRA',
  232. 'ALMA_FERE AS FECHA_REGISTRA',
  233. 'ALMA_USMO AS USUARIO_MODIFICA',
  234. 'ALMA_FEMO AS FECHA_MODIFICA',
  235. ]);
  236. $arrWarehouse = json_decode( json_encode($arrWarehouse), true );
  237. } catch (\Throwable $th) {
  238. DB::rollBack();
  239. return $this->responseController->makeResponse(
  240. true,
  241. "ERR_WAREHOUSE_GET001: Ocurrió un error al obtener los almacenes.",
  242. $th->getMessage(),
  243. 500
  244. );
  245. }
  246. foreach ($arrWarehouse as $keyWarehouse => $warehouse) {
  247. $arrResponseGetAddress = $this->resourcesController->getAddress(
  248. $warehouse['CODIGO_POSTAL'],
  249. $warehouse['COLONIA'],
  250. $warehouse['MUNICIPIO'],
  251. $warehouse['LOCALIDAD'],
  252. $warehouse['ENTIDAD_FEDERATIVA'],
  253. $warehouse['PAIS'],
  254. $line
  255. );
  256. if ($arrResponseGetAddress['error']) {
  257. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GET002: '.$arrResponseGetAddress['msg'], $arrResponseGetAddress['response'], 401);
  258. }
  259. $warehouse['CODIGO_POSTAL'] = $arrResponseGetAddress['response']['CODIGO_POSTAL'];
  260. $warehouse['COLONIA'] = $arrResponseGetAddress['response']['COLONIA'];
  261. $warehouse['MUNICIPIO'] = $arrResponseGetAddress['response']['MUNICIPIO'];
  262. $warehouse['LOCALIDAD'] = $arrResponseGetAddress['response']['LOCALIDAD'];
  263. $warehouse['ENTIDAD_FEDERATIVA'] = $arrResponseGetAddress['response']['ENTIDAD_FEDERATIVA'];
  264. $warehouse['PAIS'] = $arrResponseGetAddress['response']['PAIS'];
  265. try {
  266. $countStock = DB::table('S002V01TUBAR')
  267. ->where('UBAR_NULI', '=', $line)
  268. ->where('UBAR_ESTA', '=', 'Activo')
  269. ->where('UBAR_COAL', '=', $warehouse['CODIGO_ALMACEN'])
  270. ->count();
  271. } catch (\Throwable $th) {
  272. DB::rollBack();
  273. return $this->responseController->makeResponse(
  274. true,
  275. "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.",
  276. $th->getMessage(),
  277. 500
  278. );
  279. }
  280. $warehouse['CANTIDAD_STOCK'] = $countStock;
  281. $arrWarehouse[$keyWarehouse] = $warehouse;
  282. }
  283. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrWarehouse, $line);
  284. if ($responseCheckLatestUpdate['error']) {
  285. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  286. }
  287. $arrWarehouse = $responseCheckLatestUpdate['response'];
  288. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWarehouse);
  289. }
  290. public function getWarehouseById( $idWarehouse, $user, $line ) {
  291. try {
  292. $idWarehouse = $this->encController->decrypt($idWarehouse);
  293. } catch (\Throwable $th) {
  294. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  295. }
  296. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  297. if ($arrResponseCheckUser['error']) {
  298. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401);
  299. }
  300. try {
  301. $arrWarehouse = (array) DB::table('S002V01TALMA')
  302. ->where('ALMA_COAL', '=', $idWarehouse)
  303. ->where('ALMA_NULI', '=', $line)
  304. ->first([
  305. 'ALMA_COAL AS CODIGO_ALMACEN',
  306. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  307. 'ALMA_NORE AS NOMBRE_RESPONSABLE',
  308. 'ALMA_APRE AS APELLIDO_PATERNO_RESPONSABLE',
  309. 'ALMA_AMRE AS APELLIDO_MATERNO_RESPONSABLE',
  310. 'ALMA_COR1 AS CORREO1',
  311. 'ALMA_COR2 AS CORREO2',
  312. 'ALMA_LAD1 AS LADA1',
  313. 'ALMA_TEL1 AS TELEFONO1',
  314. 'ALMA_LAD2 AS LADA2',
  315. 'ALMA_TEL2 AS TELEFONO2',
  316. 'ALMA_CALL AS CALLE',
  317. 'ALMA_NUEX AS NUMERO_EXTERIOR',
  318. 'ALMA_NUIN AS NUMERO_INTERIOR',
  319. 'ALMA_COPO AS CODIGO_POSTAL',
  320. 'ALMA_COLO AS COLONIA',
  321. 'ALMA_LOCA AS LOCALIDAD',
  322. 'ALMA_MUNI AS MUNICIPIO',
  323. 'ALMA_ENTI AS ENTIDAD_FEDERATIVA',
  324. 'ALMA_PAIS AS PAIS',
  325. 'ALMA_ESTA AS ESTADO',
  326. 'ALMA_USRE AS USUARIO_REGISTRA',
  327. 'ALMA_FERE AS FECHA_REGISTRA',
  328. 'ALMA_USMO AS USUARIO_MODIFICA',
  329. 'ALMA_FEMO AS FECHA_MODIFICA',
  330. ]);
  331. $arrWarehouse = json_decode( json_encode($arrWarehouse), true );
  332. } catch (\Throwable $th) {
  333. DB::rollBack();
  334. return $this->responseController->makeResponse(
  335. true,
  336. "ERR_WAREHOUSE_GETBY001: Ocurrió un error al obtener los almacenes.",
  337. $th->getMessage(),
  338. 500
  339. );
  340. }
  341. if (!empty($arrWarehouse)) {
  342. $arrResponseGetAddress = $this->resourcesController->getAddress(
  343. $arrWarehouse['CODIGO_POSTAL'],
  344. $arrWarehouse['COLONIA'],
  345. $arrWarehouse['MUNICIPIO'],
  346. $arrWarehouse['LOCALIDAD'],
  347. $arrWarehouse['ENTIDAD_FEDERATIVA'],
  348. $arrWarehouse['PAIS'],
  349. $line
  350. );
  351. if ($arrResponseGetAddress['error']) {
  352. return $this->responseController->makeResponse(true, 'ERR_arrWarehouse_GETBY002: '.$arrResponseGetAddress['msg'], $arrResponseGetAddress['response'], 406);
  353. }
  354. $arrWarehouse['CODIGO_POSTAL'] = $arrResponseGetAddress['response']['CODIGO_POSTAL'];
  355. $arrWarehouse['COLONIA'] = $arrResponseGetAddress['response']['COLONIA'];
  356. $arrWarehouse['MUNICIPIO'] = $arrResponseGetAddress['response']['MUNICIPIO'];
  357. $arrWarehouse['LOCALIDAD'] = $arrResponseGetAddress['response']['LOCALIDAD'];
  358. $arrWarehouse['ENTIDAD_FEDERATIVA'] = $arrResponseGetAddress['response']['ENTIDAD_FEDERATIVA'];
  359. $arrWarehouse['PAIS'] = $arrResponseGetAddress['response']['PAIS'];
  360. }
  361. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWarehouse);
  362. }
  363. public function getWarehouseActives($user, $line) {
  364. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  365. if ($arrResponseCheckUser['error']) {
  366. DB::rollBack();
  367. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_GETBY000:'.$arrResponseCheckUser['msg'], [], 401);
  368. }
  369. try {
  370. $arrWarehouse = DB::table('S002V01TALMA')
  371. ->where('ALMA_NULI', '=', $line)
  372. ->where('ALMA_ESTA', '=', 'Activo')
  373. ->get([
  374. 'ALMA_COAL AS CODIGO_ALMACEN',
  375. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  376. 'ALMA_NORE AS NOMBRE_RESPONSABLE',
  377. 'ALMA_APRE AS APELLIDO_PATERNO_RESPONSABLE',
  378. 'ALMA_AMRE AS APELLIDO_MATERNO_RESPONSABLE',
  379. 'ALMA_COR1 AS CORREO1',
  380. 'ALMA_LAD1 AS LADA1',
  381. 'ALMA_TEL1 AS TELEFONO1',
  382. ]);
  383. $arrWarehouse = json_decode( json_encode($arrWarehouse), true );
  384. } catch (\Throwable $th) {
  385. DB::rollBack();
  386. return $this->responseController->makeResponse(
  387. true,
  388. "ERR_WAREHOUSE_GET001: Ocurrió un error al obtener los almacenes.",
  389. $th->getMessage(),
  390. 500
  391. );
  392. }
  393. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWarehouse);
  394. }
  395. public function createWarehouse( Request $request ) {
  396. $validator = Validator::make($request->all(), [
  397. 'CODIGO_ALMACEN' => 'required|string',
  398. 'NOMBRE_ALMACEN' => 'required|string',
  399. 'NOMBRE_RESPONSABLE' => 'required|string',
  400. 'APELLIDO_PATERNO_RESPONSABLE' => 'required|string',
  401. 'APELLIDO_MATERNO_RESPONSABLE' => 'nullable|string',
  402. 'CORREO1' => 'required|string',
  403. 'CORREO2' => 'nullable|string',
  404. 'LADA1' => 'required|string',
  405. 'TELEFONO1' => 'required|string',
  406. 'LADA2' => 'nullable|string',
  407. 'TELEFONO2' => 'nullable|string',
  408. 'CALLE' => 'required|string',
  409. 'NUMERO_EXTERIOR' => 'required|string',
  410. 'NUMERO_INTERIOR' => 'nullable|string',
  411. 'CODIGO_POSTAL' => 'required|string',
  412. 'COLONIA' => 'required|string',
  413. 'LOCALIDAD' => 'nullable|string',
  414. 'MUNICIPIO' => 'required|string',
  415. 'ENTIDAD_FEDERATIVA' => 'required|string',
  416. 'PAIS' => 'required|string',
  417. 'USUARIO' => 'required|string',
  418. 'NUMERO_LINEA' => 'required|integer',
  419. ]);
  420. if ($validator->fails()) {
  421. return $this->responseController->makeResponse(
  422. true,
  423. "ERR_WAREHOUSE_REG000: Se encontraron uno o más errores.",
  424. $this->responseController->makeErrors($validator->errors()->messages()),
  425. 401
  426. );
  427. }
  428. DB::beginTransaction();
  429. $requestData = $request->all();
  430. // Se valida y se obtiene el usuario
  431. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  432. if ($arrResponseCheckUser['error']) {
  433. DB::rollBack();
  434. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_REG001:'.$arrResponseCheckUser['msg'], [], 401);
  435. }
  436. $user = $arrResponseCheckUser['response'];
  437. // Se vallidan los campos de dirección
  438. $arrResponseCheckAddress = $this->resourcesController->validateAddress(
  439. $requestData['CODIGO_POSTAL'],
  440. $requestData['COLONIA'],
  441. $requestData['MUNICIPIO'],
  442. $requestData['LOCALIDAD'],
  443. $requestData['ENTIDAD_FEDERATIVA'],
  444. $requestData['PAIS'],
  445. $requestData['NUMERO_LINEA'],
  446. );
  447. if ($arrResponseCheckAddress['error']) {
  448. DB::rollBack();
  449. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_REG002: '.$arrResponseCheckAddress['msg'], $arrResponseCheckAddress['response'], 401);
  450. }
  451. $now = $this->functionsController->now();
  452. $currentDate = $now->toDateTimeString();
  453. try {
  454. $validateInsert = DB::table('S002V01TALMA')->insert([
  455. 'ALMA_NULI' => $requestData['NUMERO_LINEA'],
  456. 'ALMA_COAL' => $requestData['CODIGO_ALMACEN'],
  457. 'ALMA_NOAL' => $requestData['NOMBRE_ALMACEN'],
  458. 'ALMA_NORE' => $requestData['NOMBRE_RESPONSABLE'],
  459. 'ALMA_APRE' => $requestData['APELLIDO_PATERNO_RESPONSABLE'],
  460. 'ALMA_AMRE' => $requestData['APELLIDO_MATERNO_RESPONSABLE'],
  461. 'ALMA_COR1' => $requestData['CORREO1'],
  462. 'ALMA_COR2' => $requestData['CORREO2'],
  463. 'ALMA_LAD1' => $requestData['LADA1'],
  464. 'ALMA_TEL1' => $requestData['TELEFONO1'],
  465. 'ALMA_LAD2' => $requestData['LADA2'],
  466. 'ALMA_TEL2' => $requestData['TELEFONO2'],
  467. 'ALMA_CALL' => $requestData['CALLE'],
  468. 'ALMA_NUEX' => $requestData['NUMERO_EXTERIOR'],
  469. 'ALMA_NUIN' => $requestData['NUMERO_INTERIOR'],
  470. 'ALMA_COPO' => $requestData['CODIGO_POSTAL'],
  471. 'ALMA_COLO' => $requestData['COLONIA'],
  472. 'ALMA_LOCA' => $requestData['LOCALIDAD'],
  473. 'ALMA_MUNI' => $requestData['MUNICIPIO'],
  474. 'ALMA_ENTI' => $requestData['ENTIDAD_FEDERATIVA'],
  475. 'ALMA_PAIS' => $requestData['PAIS'],
  476. 'ALMA_USRE' => $user,
  477. 'ALMA_FERE' => $currentDate,
  478. 'ALMA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  479. ]);
  480. } catch (\Throwable $th) {
  481. DB::rollBack();
  482. return $this->responseController->makeResponse(
  483. true,
  484. "ERR_WAREHOUSE_REG003: Ocurrió un error al insertar el registro del almacen.",
  485. $th->getMessage(),
  486. 500
  487. );
  488. }
  489. if (!$validateInsert) {
  490. DB::rollBack();
  491. return $this->responseController->makeResponse(
  492. true,
  493. "ERR_WAREHOUSE_REG004: No se pudo insertar el registro del almacen.",
  494. [],
  495. 500
  496. );
  497. }
  498. DB::commit();
  499. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  500. }
  501. public function updateWarehouse( Request $request, $idWarehouse ) {
  502. $validator = Validator::make($request->all(), [
  503. 'CODIGO_ALMACEN' => 'required|string',
  504. 'NOMBRE_ALMACEN' => 'required|string',
  505. 'NOMBRE_RESPONSABLE' => 'required|string',
  506. 'APELLIDO_PATERNO_RESPONSABLE' => 'required|string',
  507. 'APELLIDO_MATERNO_RESPONSABLE' => 'nullable|string',
  508. 'CORREO1' => 'required|string',
  509. 'CORREO2' => 'nullable|string',
  510. 'LADA1' => 'required|string',
  511. 'TELEFONO1' => 'required|string',
  512. 'LADA2' => 'nullable|string',
  513. 'TELEFONO2' => 'nullable|string',
  514. 'CALLE' => 'required|string',
  515. 'NUMERO_EXTERIOR' => 'required|string',
  516. 'NUMERO_INTERIOR' => 'nullable|string',
  517. 'CODIGO_POSTAL' => 'required|string',
  518. 'COLONIA' => 'required|string',
  519. 'LOCALIDAD' => 'nullable|string',
  520. 'MUNICIPIO' => 'required|string',
  521. 'ENTIDAD_FEDERATIVA' => 'required|string',
  522. 'PAIS' => 'required|string',
  523. 'USUARIO' => 'required|string',
  524. 'NUMERO_LINEA' => 'required|integer',
  525. ]);
  526. if ($validator->fails()) {
  527. return $this->responseController->makeResponse(
  528. true,
  529. "ERR_WAREHOUSE_UPD000: Se encontraron uno o más errores.",
  530. $this->responseController->makeErrors($validator->errors()->messages()),
  531. 401
  532. );
  533. }
  534. DB::beginTransaction();
  535. $requestData = $request->all();
  536. try {
  537. $idWarehouse = $this->encController->decrypt($idWarehouse);
  538. } catch (\Throwable $th) {
  539. return $this->responseController->makeResponse(true, "ERR_WAREHOUSE_UPD001: Ocurrió un error al desencriptar el ID del almacen.". $th->getMessage(), 406);
  540. }
  541. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  542. if ($arrResponseCheckUser['error']) {
  543. DB::rollBack();
  544. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_UPD002:'.$arrResponseCheckUser['msg'], [], 401);
  545. }
  546. $user = $arrResponseCheckUser['response'];
  547. $arrResponseCheckAddress = $this->resourcesController->validateAddress(
  548. $requestData['CODIGO_POSTAL'],
  549. $requestData['COLONIA'],
  550. $requestData['MUNICIPIO'],
  551. $requestData['LOCALIDAD'],
  552. $requestData['ENTIDAD_FEDERATIVA'],
  553. $requestData['PAIS'],
  554. $requestData['NUMERO_LINEA'],
  555. );
  556. if ($arrResponseCheckAddress['error']) {
  557. DB::rollBack();
  558. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_UPD003: '.$arrResponseCheckAddress['msg'], $arrResponseCheckAddress['response'], 401);
  559. }
  560. $now = $this->functionsController->now();
  561. $currentDate = $now->toDateTimeString();
  562. try {
  563. $validateUpdate = DB::table('S002V01TALMA')
  564. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  565. ->where('ALMA_COAL', '=', $idWarehouse)
  566. ->update([
  567. 'ALMA_COAL' => $requestData['CODIGO_ALMACEN'],
  568. 'ALMA_NOAL' => $requestData['NOMBRE_ALMACEN'],
  569. 'ALMA_NORE' => $requestData['NOMBRE_RESPONSABLE'],
  570. 'ALMA_APRE' => $requestData['APELLIDO_PATERNO_RESPONSABLE'],
  571. 'ALMA_AMRE' => $requestData['APELLIDO_MATERNO_RESPONSABLE'],
  572. 'ALMA_COR1' => $requestData['CORREO1'],
  573. 'ALMA_COR2' => $requestData['CORREO2'],
  574. 'ALMA_LAD1' => $requestData['LADA1'],
  575. 'ALMA_TEL1' => $requestData['TELEFONO1'],
  576. 'ALMA_LAD2' => $requestData['LADA2'],
  577. 'ALMA_TEL2' => $requestData['TELEFONO2'],
  578. 'ALMA_CALL' => $requestData['CALLE'],
  579. 'ALMA_NUEX' => $requestData['NUMERO_EXTERIOR'],
  580. 'ALMA_NUIN' => $requestData['NUMERO_INTERIOR'],
  581. 'ALMA_COPO' => $requestData['CODIGO_POSTAL'],
  582. 'ALMA_COLO' => $requestData['COLONIA'],
  583. 'ALMA_LOCA' => $requestData['LOCALIDAD'],
  584. 'ALMA_MUNI' => $requestData['MUNICIPIO'],
  585. 'ALMA_ENTI' => $requestData['ENTIDAD_FEDERATIVA'],
  586. 'ALMA_PAIS' => $requestData['PAIS'],
  587. 'ALMA_USMO' => $user,
  588. 'ALMA_FEMO' => $currentDate,
  589. 'ALMA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  590. ]);
  591. } catch (\Throwable $th) {
  592. DB::rollBack();
  593. return $this->responseController->makeResponse(
  594. true,
  595. "ERR_WAREHOUSE_UPD004: Ocurrió un error al insertar el registro del almacen.",
  596. $th->getMessage(),
  597. 500
  598. );
  599. }
  600. if (!$validateUpdate) {
  601. DB::rollBack();
  602. return $this->responseController->makeResponse(
  603. true,
  604. "ERR_WAREHOUSE_UPD005: No se pudo insertar el registro del almacen.",
  605. [],
  606. 500
  607. );
  608. }
  609. DB::commit();
  610. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  611. }
  612. public function deleteWarehouse( Request $request, $idWarehouse ) {
  613. $validator = Validator::make($request->all(), [
  614. 'USUARIO' => 'required|string',
  615. 'NUMERO_LINEA' => 'required|integer',
  616. ]);
  617. if ($validator->fails()) {
  618. return $this->responseController->makeResponse(
  619. true,
  620. "ERR_WAREHOUSE_DEL000: Se encontraron uno o más errores.",
  621. $this->responseController->makeErrors($validator->errors()->messages()),
  622. 401
  623. );
  624. }
  625. DB::beginTransaction();
  626. $requestData = $request->all();
  627. try {
  628. $idWarehouse = $this->encController->decrypt($idWarehouse);
  629. } catch (\Throwable $th) {
  630. DB::rollBack();
  631. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL001: Ocurrió un error al desencriptar el nivel.', $th->getMessage(), 500);
  632. }
  633. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  634. if ($arrResponseCheckUser['error']) {
  635. DB::rollBack();
  636. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL002:'.$arrResponseCheckUser['msg'], [], 401);
  637. }
  638. $user = $arrResponseCheckUser['response'];
  639. try {
  640. $validateExists = DB::table('S002V01TALMA')
  641. ->where('ALMA_COAL', '=', $idWarehouse)
  642. ->where('ALMA_ESTA', '=', 'Activo')
  643. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  644. ->exists();
  645. } catch (\Throwable $th) {
  646. DB::rollBack();
  647. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL003: Ocurrió un error al obtener la información del área.', $th->getMessage(), 500);
  648. }
  649. if (!$validateExists) {
  650. DB::rollBack();
  651. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL004: El almacen no existe.', [], 406);
  652. }
  653. try {
  654. $validateExists = DB::table('S002V01TUBAR')
  655. ->where('UBAR_COAL', '=', $idWarehouse)
  656. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  657. ->where('UBAR_ESTA', '=', 'Activo')
  658. ->exists();
  659. } catch (\Throwable $th) {
  660. DB::rollBack();
  661. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500);
  662. }
  663. if($validateExists) {
  664. DB::rollBack();
  665. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL006: No se puede eliminar debido a que existen artículos ubicados en el almacen.', [], 406);
  666. }
  667. try {
  668. $countArea = DB::table('S002V01TAREA')
  669. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  670. ->where('AREA_COAL', '=', $idWarehouse)
  671. ->where('AREA_ESTA', '=', 'Activo')
  672. ->count();
  673. } catch (\Throwable $th) {
  674. DB::rollBack();
  675. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL007: Ocurrió un error al obtener la información del área.', $th->getMessage(), 500);
  676. }
  677. if ($countArea > 0) {
  678. DB::rollBack();
  679. $quantity = $countArea === 1 ? 'existe 1 área activa' : 'existen'.$countArea.' áreas activas';
  680. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL008: No se puede elminar debido a que '.$quantity.'.', [], 406);
  681. }
  682. try {
  683. $countLevel = DB::table('S002V01TNIVE')
  684. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  685. ->where('NIVE_COAL', '=', $idWarehouse)
  686. ->where('NIVE_ESTA', '=', 'Activo')
  687. ->count();
  688. } catch (\Throwable $th) {
  689. DB::rollBack();
  690. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL009: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500);
  691. }
  692. if ($countLevel > 0) {
  693. DB::rollBack();
  694. $quantity = $countLevel === 1 ? 'existe 1 nivel activo' : 'existen '.$countLevel.' niveles activos';
  695. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL010: No se puede eliminar debido a que '.$quantity.'.', [], 406);
  696. }
  697. try {
  698. $countZones = DB::table('S002V01TZONA')
  699. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  700. ->where('ZONA_COAL', '=', $idWarehouse)
  701. ->where('ZONA_ESTA', '=', 'Activo')
  702. ->count();
  703. } catch (\Throwable $th) {
  704. DB::rollBack();
  705. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL011: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500);
  706. }
  707. if ($countZones > 0) {
  708. DB::rollBack();
  709. $quantity = $countZones === 1 ? 'existe 1 zona activa' : 'existen '.$countZones.' zonas activas';
  710. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL012: No se puede eliminar debido a que '.$quantity.'.', [], 406);
  711. }
  712. $now = $this->functionsController->now();
  713. $currentDate = $now->toDateTimeString();
  714. try {
  715. $validateUpdate = DB::table('S002V01TALMA')
  716. ->where('ALMA_COAL', '=', $idWarehouse)
  717. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  718. ->update([
  719. 'ALMA_ESTA' => 'Eliminado',
  720. 'ALMA_USMO' => $user,
  721. 'ALMA_FEMO' => $currentDate,
  722. 'ALMA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  723. ]);
  724. } catch (\Throwable $th) {
  725. DB::rollBack();
  726. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL013: Ocurrió un error al eliminar el área.', $th->getMessage(), 500);
  727. }
  728. if (!$validateUpdate) {
  729. DB::rollBack();
  730. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_DEL014: No se pudo eliminar el área.', [], 406);
  731. }
  732. DB::commit();
  733. return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa");
  734. }
  735. public function getAreaByWarehouse($idWarehouse, $user, $line) {
  736. try {
  737. $idWarehouse = $this->encController->decrypt($idWarehouse);
  738. } catch (\Throwable $th) {
  739. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  740. }
  741. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  742. if ($arrResponseCheckUser['error']) {
  743. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY001:'.$arrResponseCheckUser['msg'], [], 401);
  744. }
  745. try {
  746. $getArea = DB::table('S002V01TAREA')
  747. ->where('AREA_COAL', '=', $idWarehouse)
  748. ->where('AREA_NULI', '=', $line)
  749. ->get([
  750. 'AREA_COAR AS CODIGO_AREA',
  751. 'AREA_NOAR AS NOMBRE_AREA',
  752. 'AREA_COME AS COMENTARIOS',
  753. 'AREA_ESTA AS ESTADO',
  754. 'AREA_USRE AS USUARIO_REGISTRA',
  755. 'AREA_FERE AS FECHA_REGISTRA',
  756. 'AREA_USMO AS USUARIO_MODIFICA',
  757. 'AREA_FEMO AS FECHA_MODIFICA',
  758. ]);
  759. $arrArea = json_decode(json_encode($getArea), true);
  760. } catch (\Throwable $th) {
  761. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  762. }
  763. foreach ($arrArea as $key => $value) {
  764. try {
  765. $countStock = DB::table('S002V01TUBAR')
  766. ->where('UBAR_NULI', '=', $line)
  767. ->where('UBAR_ESTA', '=', 'Activo')
  768. ->where('UBAR_COAL', '=', $idWarehouse)
  769. ->where('UBAR_COAR', '=', $value['CODIGO_AREA'])
  770. ->count();
  771. } catch (\Throwable $th) {
  772. DB::rollBack();
  773. return $this->responseController->makeResponse(
  774. true,
  775. "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.",
  776. $th->getMessage(),
  777. 500
  778. );
  779. }
  780. $value['CANTIDAD_STOCK'] = $countStock;
  781. $arrArea[$key] = $value;
  782. }
  783. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArea);
  784. }
  785. public function getAreaById($idArea, $user, $line) {
  786. try {
  787. $idArea = $this->encController->decrypt($idArea);
  788. } catch (\Throwable $th) {
  789. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  790. }
  791. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  792. if ($arrResponseCheckUser['error']) {
  793. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY001:'.$arrResponseCheckUser['msg'], [], 401);
  794. }
  795. try {
  796. $getArea = (array) DB::table('S002V01TAREA')
  797. ->where('AREA_COAR', '=', $idArea)
  798. ->where('AREA_NULI', '=', $line)
  799. ->first([
  800. 'AREA_NOAR AS NOMBRE_AREA',
  801. 'AREA_COME AS COMENTARIOS',
  802. 'AREA_ESTA AS ESTADO',
  803. 'AREA_USRE AS USUARIO_REGISTRA',
  804. 'AREA_FERE AS FECHA_REGISTRA',
  805. 'AREA_USMO AS USUARIO_MODIFICA',
  806. 'AREA_FEMO AS FECHA_MODIFICA',
  807. ]);
  808. $arrArea = json_decode(json_encode($getArea), true);
  809. } catch (\Throwable $th) {
  810. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  811. }
  812. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArea);
  813. }
  814. public function getAreaByWarehouseActives($idWarehouse, $user, $line) {
  815. try {
  816. $idWarehouse = $this->encController->decrypt($idWarehouse);
  817. } catch (\Throwable $th) {
  818. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  819. }
  820. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  821. if ($arrResponseCheckUser['error']) {
  822. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE001:'.$arrResponseCheckUser['msg'], [], 401);
  823. }
  824. try {
  825. $validateExists = DB::table('S002V01TALMA')
  826. ->where('ALMA_NULI', '=', $line)
  827. ->where('ALMA_COAL', '=', $idWarehouse)
  828. ->exists();
  829. } catch (\Throwable $th) {
  830. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE002: Ocurrió un error al obtener el almacen.', $th->getMessage(), 406);
  831. }
  832. if (!$validateExists) {
  833. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE003: El almacen no existe.', [], 401);
  834. }
  835. try {
  836. $getArea = DB::table('S002V01TAREA')
  837. ->where('AREA_COAL', '=', $idWarehouse)
  838. ->where('AREA_NULI', '=', $line)
  839. ->where('AREA_ESTA', '=', 'Activo')
  840. ->get([
  841. 'AREA_COAR AS CODIGO_AREA',
  842. 'AREA_NOAR AS NOMBRE_AREA',
  843. 'AREA_COME AS COMENTARIOS',
  844. ]);
  845. $arrArea = json_decode(json_encode($getArea), true);
  846. } catch (\Throwable $th) {
  847. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBYACTIVE004: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  848. }
  849. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrArea);
  850. }
  851. public function registerArea(Request $request) {
  852. $validator = Validator::make($request->all(), [
  853. 'CODIGO_ALMACEN' => 'required|string',
  854. 'CODIGO_AREA' => 'required|string',
  855. 'NOMBRE_AREA' => 'required|string',
  856. 'COMENTARIOS' => 'nullable|string',
  857. 'USUARIO' => 'required|string',
  858. 'NUMERO_LINEA' => 'required|integer',
  859. ]);
  860. if ($validator->fails()) {
  861. return $this->responseController->makeResponse(
  862. true,
  863. "ERR_AREA_REG000: Se encontraron uno o más errores.",
  864. $this->responseController->makeErrors($validator->errors()->messages()),
  865. 401
  866. );
  867. }
  868. DB::beginTransaction();
  869. $requestData = $request->all();
  870. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  871. if ($arrResponseCheckUser['error']) {
  872. return $this->responseController->makeResponse(true, 'ERR_AREA_REG001:'.$arrResponseCheckUser['msg'], [], 401);
  873. }
  874. $user = $arrResponseCheckUser['response'];
  875. try {
  876. $validateExistWarehouse = DB::table('S002V01TALMA')
  877. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  878. ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  879. ->where('ALMA_ESTA', '=', 'Activo')
  880. ->exists();
  881. } catch (\Throwable $th) {
  882. DB::rollBack();
  883. return $this->responseController->makeResponse(true, 'ERR_AREA_REG002: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500);
  884. }
  885. if (!$validateExistWarehouse) {
  886. DB::rollBack();
  887. return $this->responseController->makeResponse(true, 'ERR_AREA_REG003: El almacen no existe.', [], 406);
  888. }
  889. try {
  890. $validateExistCode = DB::table('S002V01TAREA')
  891. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  892. ->where('AREA_COAR', '=', $requestData['CODIGO_AREA'])
  893. ->where('AREA_ESTA', '=', 'Activo')
  894. ->exists();
  895. } catch (\Throwable $th) {
  896. DB::rollBack();
  897. return $this->responseController->makeResponse(true, 'ERR_AREA_REG004: Ocurrió un error al verificar el código del área.', $th->getMessage(), 500);
  898. }
  899. if ($validateExistCode) {
  900. DB::rollBack();
  901. return $this->responseController->makeResponse(true, 'ERR_AREA_REG005: El código del área ya se encuentra registrado.', [], 406);
  902. }
  903. $now = $this->functionsController->now();
  904. $currentDate = $now->toDateTimeString();
  905. try {
  906. $validateInsert = DB::table('S002V01TAREA')->insert([
  907. 'AREA_COAL' => $requestData['CODIGO_ALMACEN'],
  908. 'AREA_COAR' => $requestData['CODIGO_AREA'],
  909. 'AREA_NOAR' => $requestData['NOMBRE_AREA'],
  910. 'AREA_COME' => $requestData['COMENTARIOS'],
  911. 'AREA_NULI' => $requestData['NUMERO_LINEA'],
  912. 'AREA_USRE' => $user,
  913. 'AREA_FERE' => $currentDate,
  914. 'AREA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  915. ]);
  916. } catch (\Throwable $th) {
  917. DB::rollBack();
  918. return $this->responseController->makeResponse(true, 'ERR_AREA_REG006: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500);
  919. }
  920. if (!$validateInsert) {
  921. DB::rollBack();
  922. return $this->responseController->makeResponse(true, 'ERR_AREA_REG007: No se pudo guardar la información en la base de datos.', [], 406);
  923. }
  924. DB::commit();
  925. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  926. }
  927. public function updateArea(Request $request, $idArea) {
  928. $validator = Validator::make($request->all(), [
  929. 'CODIGO_ALMACEN' => 'required|string',
  930. 'NOMBRE_AREA' => 'required|string',
  931. 'COMENTARIOS' => 'nullable|string',
  932. 'USUARIO' => 'required|string',
  933. 'NUMERO_LINEA' => 'required|integer',
  934. ]);
  935. if ($validator->fails()) {
  936. return $this->responseController->makeResponse(
  937. true,
  938. "ERR_AREA_UPD000: Se encontraron uno o más errores.",
  939. $this->responseController->makeErrors($validator->errors()->messages()),
  940. 401
  941. );
  942. }
  943. DB::beginTransaction();
  944. $requestData = $request->all();
  945. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  946. if ($arrResponseCheckUser['error']) {
  947. DB::rollBack();
  948. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD001:'.$arrResponseCheckUser['msg'], $arrResponseCheckUser['response'], 401);
  949. }
  950. $user = $arrResponseCheckUser['response'];
  951. try {
  952. $idArea = $this->encController->decrypt($idArea);
  953. } catch (\Throwable $th) {
  954. DB::rollBack();
  955. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD002: Ocurrió un error al desencriptar el área.', $th->getMessage(), 500);
  956. }
  957. try {
  958. $validateExistArea = DB::table('S002V01TAREA')
  959. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  960. ->where('AREA_COAR', '=', $idArea)
  961. ->where('AREA_ESTA', '=', 'Activo')
  962. ->exists();
  963. } catch (\Throwable $th) {
  964. DB::rollBack();
  965. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD003: Ocurrió un error al verificar el código del área.', $th->getMessage(), 500);
  966. }
  967. if (!$validateExistArea) {
  968. DB::rollBack();
  969. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD004: El área no existe.', [], 406);
  970. }
  971. try {
  972. $validateExistWarehouse = DB::table('S002V01TALMA')
  973. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  974. ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  975. ->where('ALMA_ESTA', '=', 'Activo')
  976. ->exists();
  977. } catch (\Throwable $th) {
  978. DB::rollBack();
  979. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD005: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500);
  980. }
  981. if (!$validateExistWarehouse) {
  982. DB::rollBack();
  983. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD006: El almacen no existe.', [], 406);
  984. }
  985. $now = $this->functionsController->now();
  986. $currentDate = $now->toDateTimeString();
  987. try {
  988. $validateUpdate = DB::table('S002V01TAREA')
  989. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  990. ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  991. ->where('AREA_COAR', '=', $idArea)
  992. ->update([
  993. 'AREA_NOAR' => $requestData['NOMBRE_AREA'],
  994. 'AREA_COME' => $requestData['COMENTARIOS'],
  995. 'AREA_USMO' => $user,
  996. 'AREA_FEMO' => $currentDate,
  997. 'AREA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  998. ]);
  999. } catch (\Throwable $th) {
  1000. DB::rollBack();
  1001. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD009: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500);
  1002. }
  1003. if (!$validateUpdate) {
  1004. DB::rollBack();
  1005. return $this->responseController->makeResponse(true, 'ERR_AREA_UPD010: No se pudo guardar la información en la base de datos.', [], 406);
  1006. }
  1007. DB::commit();
  1008. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  1009. }
  1010. public function deleteArea(Request $request, $idArea) {
  1011. $validator = Validator::make($request->all(), [
  1012. 'USUARIO' => 'required|string',
  1013. 'NUMERO_LINEA' => 'required|integer',
  1014. ]);
  1015. if ($validator->fails()) {
  1016. return $this->responseController->makeResponse(
  1017. true,
  1018. "ERR_AREA_DEL000: Se encontraron uno o más errores.",
  1019. $this->responseController->makeErrors($validator->errors()->messages()),
  1020. 401
  1021. );
  1022. }
  1023. DB::beginTransaction();
  1024. $requestData = $request->all();
  1025. try {
  1026. $idArea = $this->encController->decrypt($idArea);
  1027. } catch (\Throwable $th) {
  1028. DB::rollBack();
  1029. return $this->responseController->makeResponse(true, 'ERR_AREA_DEL001: Ocurrió un error al desencriptar el nivel.', $th->getMessage(), 500);
  1030. }
  1031. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1032. if ($arrResponseCheckUser['error']) {
  1033. DB::rollBack();
  1034. return $this->responseController->makeResponse(true, 'ERR_AREA_DEL002:'.$arrResponseCheckUser['msg'], [], 401);
  1035. }
  1036. $user = $arrResponseCheckUser['response'];
  1037. try {
  1038. $arrArea = (array) DB::table('S002V01TAREA')
  1039. ->where('AREA_COAR', '=', $idArea)
  1040. ->where('AREA_ESTA', '=', 'Activo')
  1041. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  1042. ->first([
  1043. 'AREA_COAL',
  1044. ]);
  1045. } catch (\Throwable $th) {
  1046. DB::rollBack();
  1047. return $this->responseController->makeResponse(true, 'ERR_AREA_DEL003: Ocurrió un error al obtener la información del área.', $th->getMessage(), 500);
  1048. }
  1049. if (empty($arrArea)) {
  1050. DB::rollBack();
  1051. return $this->responseController->makeResponse(true, 'ERR_AREA_DEL004: El área no existe.', [], 406);
  1052. }
  1053. try {
  1054. $validateExists = DB::table('S002V01TUBAR')
  1055. ->where('UBAR_COAL', '=', $arrArea['AREA_COAL'])
  1056. ->where('UBAR_COZO', '=', $idArea)
  1057. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  1058. ->where('UBAR_ESTA', '=', 'Activo')
  1059. ->exists();
  1060. } catch (\Throwable $th) {
  1061. DB::rollBack();
  1062. return $this->responseController->makeResponse(true, 'ERR_AREA_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500);
  1063. }
  1064. if($validateExists) {
  1065. DB::rollBack();
  1066. return $this->responseController->makeResponse(true, 'ERR_AREA_DEL006: No se puede eliminar debido a que existen artículos ubicados en el área.', [], 406);
  1067. }
  1068. try {
  1069. $countLevel = DB::table('S002V01TNIVE')
  1070. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1071. ->where('NIVE_COAL', '=', $arrArea['AREA_COAL'])
  1072. ->where('NIVE_COAR', '=', $idArea)
  1073. ->where('NIVE_ESTA', '=', 'Activo')
  1074. ->count();
  1075. } catch (\Throwable $th) {
  1076. DB::rollBack();
  1077. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL007: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500);
  1078. }
  1079. if ($countLevel > 0) {
  1080. DB::rollBack();
  1081. $quantity = $countLevel === 1 ? 'existe 1 nivel activo' : 'existen '.$countLevel.' niveles activos';
  1082. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL008: No se puede eliminar debido a que '.$quantity.'.', [], 406);
  1083. }
  1084. try {
  1085. $countZones = DB::table('S002V01TZONA')
  1086. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  1087. ->where('ZONA_COAL', '=', $arrArea['AREA_COAL'])
  1088. ->where('ZONA_COAR', '=', $idArea)
  1089. ->where('ZONA_ESTA', '=', 'Activo')
  1090. ->count();
  1091. } catch (\Throwable $th) {
  1092. DB::rollBack();
  1093. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL009: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500);
  1094. }
  1095. if ($countZones > 0) {
  1096. DB::rollBack();
  1097. $quantity = $countZones === 1 ? 'existe 1 zona activa' : 'existen '.$countZones.' zonas activas';
  1098. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL010: No se puede eliminar debido a que '.$quantity.'.', [], 406);
  1099. }
  1100. $now = $this->functionsController->now();
  1101. $currentDate = $now->toDateTimeString();
  1102. try {
  1103. $validateUpdate = DB::table('S002V01TAREA')
  1104. ->where('AREA_COAR', '=', $idArea)
  1105. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  1106. ->update([
  1107. 'AREA_ESTA' => 'Eliminado',
  1108. 'AREA_USMO' => $user,
  1109. 'AREA_FEMO' => $currentDate,
  1110. 'AREA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1111. ]);
  1112. } catch (\Throwable $th) {
  1113. DB::rollBack();
  1114. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL011: Ocurrió un error al eliminar el área.', $th->getMessage(), 500);
  1115. }
  1116. if (!$validateUpdate) {
  1117. DB::rollBack();
  1118. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL012: No se pudo eliminar el área.', [], 406);
  1119. }
  1120. DB::commit();
  1121. return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa");
  1122. }
  1123. public function getLevelByAreaWarehouse($idWarehouse, $idArea, $user, $line) {
  1124. try {
  1125. $idWarehouse = $this->encController->decrypt($idWarehouse);
  1126. } catch (\Throwable $th) {
  1127. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  1128. }
  1129. try {
  1130. $idArea = $this->encController->decrypt($idArea);
  1131. } catch (\Throwable $th) {
  1132. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406);
  1133. }
  1134. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1135. if ($arrResponseCheckUser['error']) {
  1136. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY002:'.$arrResponseCheckUser['msg'], [], 401);
  1137. }
  1138. try {
  1139. $getLevel = DB::table('S002V01TNIVE')
  1140. ->where('NIVE_COAL', '=', $idWarehouse)
  1141. ->where('NIVE_COAR', '=', $idArea)
  1142. ->where('NIVE_NULI', '=', $line)
  1143. ->get([
  1144. 'NIVE_CONI AS CODIGO_NIVEL',
  1145. 'NIVE_NONI AS NOMBRE_NIVEL',
  1146. 'NIVE_COME AS COMENTARIOS',
  1147. 'NIVE_ESTA AS ESTADO',
  1148. 'NIVE_USRE AS USUARIO_REGISTRA',
  1149. 'NIVE_FERE AS FECHA_REGISTRA',
  1150. 'NIVE_USMO AS USUARIO_MODIFICA',
  1151. 'NIVE_FEMO AS FECHA_MODIFICA',
  1152. ]);
  1153. $arrLevel = json_decode(json_encode($getLevel), true);
  1154. } catch (\Throwable $th) {
  1155. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY003: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  1156. }
  1157. foreach ($arrLevel as $key => $value) {
  1158. try {
  1159. $countStock = DB::table('S002V01TUBAR')
  1160. ->where('UBAR_NULI', '=', $line)
  1161. ->where('UBAR_ESTA', '=', 'Activo')
  1162. ->where('UBAR_COAL', '=', $idWarehouse)
  1163. ->where('UBAR_COAR', '=', $idArea)
  1164. ->where('UBAR_CONI', '=', $value['CODIGO_NIVEL'])
  1165. ->count();
  1166. } catch (\Throwable $th) {
  1167. DB::rollBack();
  1168. return $this->responseController->makeResponse(
  1169. true,
  1170. "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.",
  1171. $th->getMessage(),
  1172. 500
  1173. );
  1174. }
  1175. $value['CANTIDAD_STOCK'] = $countStock;
  1176. $arrLevel[$key] = $value;
  1177. }
  1178. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLevel);
  1179. }
  1180. public function getLevelById( $idLevel, $user, $line ) {
  1181. try {
  1182. $idLevel = $this->encController->decrypt($idLevel);
  1183. } catch (\Throwable $th) {
  1184. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  1185. }
  1186. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1187. if ($arrResponseCheckUser['error']) {
  1188. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY001:'.$arrResponseCheckUser['msg'], [], 401);
  1189. }
  1190. try {
  1191. $getLevel = (array) DB::table('S002V01TNIVE')
  1192. ->where('NIVE_CONI', '=', $idLevel)
  1193. ->where('NIVE_NULI', '=', $line)
  1194. ->first([
  1195. 'NIVE_NONI AS NOMBRE_NIVEL',
  1196. 'NIVE_COME AS COMENTARIOS',
  1197. 'NIVE_ESTA AS ESTADO',
  1198. 'NIVE_USRE AS USUARIO_REGISTRA',
  1199. 'NIVE_FERE AS FECHA_REGISTRA',
  1200. 'NIVE_USMO AS USUARIO_MODIFICA',
  1201. 'NIVE_FEMO AS FECHA_MODIFICA',
  1202. ]);
  1203. $arrLevel = json_decode(json_encode($getLevel), true);
  1204. } catch (\Throwable $th) {
  1205. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  1206. }
  1207. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLevel);
  1208. }
  1209. public function getLevelByAreaWarehouseActives($idWarehouse, $idArea, $user, $line) {
  1210. try {
  1211. $idWarehouse = $this->encController->decrypt($idWarehouse);
  1212. } catch (\Throwable $th) {
  1213. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  1214. }
  1215. try {
  1216. $idArea = $this->encController->decrypt($idArea);
  1217. } catch (\Throwable $th) {
  1218. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406);
  1219. }
  1220. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1221. if ($arrResponseCheckUser['error']) {
  1222. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE002:'.$arrResponseCheckUser['msg'], [], 401);
  1223. }
  1224. try {
  1225. $validateExists = DB::table('S002V01TALMA')
  1226. ->where('ALMA_NULI', '=', $line)
  1227. ->where('ALMA_COAL', '=', $idWarehouse)
  1228. ->exists();
  1229. } catch (\Throwable $th) {
  1230. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE003: Ocurrió un error al obtener el almacen.', $th->getMessage(), 406);
  1231. }
  1232. if (!$validateExists) {
  1233. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE004: El almacen no existe.', [], 401);
  1234. }
  1235. try {
  1236. $validateExists = DB::table('S002V01TAREA')
  1237. ->where('AREA_NULI', '=', $line)
  1238. ->where('AREA_COAL', '=', $idWarehouse)
  1239. ->where('AREA_COAR', '=', $idArea)
  1240. ->exists();
  1241. } catch (\Throwable $th) {
  1242. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE005: Ocurrió un error al obtener el área.', $th->getMessage(), 406);
  1243. }
  1244. if (!$validateExists) {
  1245. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE006: El área no existe.', [], 401);
  1246. }
  1247. try {
  1248. $getLevel = DB::table('S002V01TNIVE')
  1249. ->where('NIVE_COAL', '=', $idWarehouse)
  1250. ->where('NIVE_COAR', '=', $idArea)
  1251. ->where('NIVE_NULI', '=', $line)
  1252. ->where('NIVE_ESTA', '=', 'Activo')
  1253. ->get([
  1254. 'NIVE_CONI AS CODIGO_NIVEL',
  1255. 'NIVE_NONI AS NOMBRE_NIVEL',
  1256. 'NIVE_COME AS COMENTARIOS',
  1257. ]);
  1258. $arrLevel = json_decode(json_encode($getLevel), true);
  1259. } catch (\Throwable $th) {
  1260. return $this->responseController->makeResponse(true, 'ERR_LEVEL_GETBYACTIVE007: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  1261. }
  1262. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLevel);
  1263. }
  1264. public function registerLevel(Request $request) {
  1265. $validator = Validator::make($request->all(), [
  1266. 'CODIGO_ALMACEN' => 'required|string',
  1267. 'CODIGO_AREA' => 'required|string',
  1268. 'CODIGO_NIVEL' => 'required|string',
  1269. 'NOMBRE_NIVEL' => 'required|string',
  1270. 'COMENTARIOS' => 'nullable|string',
  1271. 'USUARIO' => 'required|string',
  1272. 'NUMERO_LINEA' => 'required|integer',
  1273. ]);
  1274. if ($validator->fails()) {
  1275. return $this->responseController->makeResponse(
  1276. true,
  1277. "ERR_LEVEL_REG000: Se encontraron uno o más errores.",
  1278. $this->responseController->makeErrors($validator->errors()->messages()),
  1279. 401
  1280. );
  1281. }
  1282. DB::beginTransaction();
  1283. $requestData = $request->all();
  1284. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1285. if ($arrResponseCheckUser['error']) {
  1286. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG001:'.$arrResponseCheckUser['msg'], [], 401);
  1287. }
  1288. $user = $arrResponseCheckUser['response'];
  1289. try {
  1290. $validateExistWarehouse = DB::table('S002V01TALMA')
  1291. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  1292. ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1293. ->where('ALMA_ESTA', '=', 'Activo')
  1294. ->exists();
  1295. } catch (\Throwable $th) {
  1296. DB::rollBack();
  1297. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG002: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500);
  1298. }
  1299. if (!$validateExistWarehouse) {
  1300. DB::rollBack();
  1301. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG003: El almacen no existe.', [], 406);
  1302. }
  1303. try {
  1304. $validateExistArea = DB::table('S002V01TAREA')
  1305. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  1306. ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1307. ->where('AREA_COAR', '=', $requestData['CODIGO_AREA'])
  1308. ->where('AREA_ESTA', '=', 'Activo')
  1309. ->exists();
  1310. } catch (\Throwable $th) {
  1311. DB::rollBack();
  1312. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG004: Ocurrió un error al verificar el área.', $th->getMessage(), 500);
  1313. }
  1314. if (!$validateExistArea) {
  1315. DB::rollBack();
  1316. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG005: El área no existe.', [], 406);
  1317. }
  1318. try {
  1319. $validateExistLevel = DB::table('S002V01TNIVE')
  1320. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1321. ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1322. ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA'])
  1323. ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL'])
  1324. ->exists();
  1325. } catch (\Throwable $th) {
  1326. DB::rollBack();
  1327. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG006: Ocurrió un error al verificar el código del nivel.', $th->getMessage(), 406);
  1328. }
  1329. if ($validateExistLevel) {
  1330. DB::rollBack();
  1331. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG007: El código del nivel ya existe.', [], 406);
  1332. }
  1333. $now = $this->functionsController->now();
  1334. $currentDate = $now->toDateTimeString();
  1335. try {
  1336. $validateInsert = DB::table('S002V01TNIVE')->insert([
  1337. 'NIVE_NULI' => $requestData['NUMERO_LINEA'],
  1338. 'NIVE_COAL' => $requestData['CODIGO_ALMACEN'],
  1339. 'NIVE_COAR' => $requestData['CODIGO_AREA'],
  1340. 'NIVE_CONI' => $requestData['CODIGO_NIVEL'],
  1341. 'NIVE_NONI' => $requestData['NOMBRE_NIVEL'],
  1342. 'NIVE_COME' => $requestData['COMENTARIOS'],
  1343. 'NIVE_USRE' => $user,
  1344. 'NIVE_FERE' => $currentDate,
  1345. 'NIVE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  1346. ]);
  1347. } catch (\Throwable $th) {
  1348. DB::rollBack();
  1349. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG008: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500);
  1350. }
  1351. if (!$validateInsert) {
  1352. DB::rollBack();
  1353. return $this->responseController->makeResponse(true, 'ERR_LEVEL_REG009: No se pudo guardar la información en la base de datos.', [], 406);
  1354. }
  1355. DB::commit();
  1356. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  1357. }
  1358. public function updateLevel(Request $request, $idLevel) {
  1359. $validator = Validator::make($request->all(), [
  1360. 'CODIGO_ALMACEN' => 'required|string',
  1361. 'NOMBRE_NIVEL' => 'required|string',
  1362. 'COMENTARIOS' => 'nullable|string',
  1363. 'USUARIO' => 'required|string',
  1364. 'NUMERO_LINEA' => 'required|integer',
  1365. ]);
  1366. if ($validator->fails()) {
  1367. return $this->responseController->makeResponse(
  1368. true,
  1369. "ERR_LEVEL_UPD000: Se encontraron uno o más errores.",
  1370. $this->responseController->makeErrors($validator->errors()->messages()),
  1371. 401
  1372. );
  1373. }
  1374. DB::beginTransaction();
  1375. $requestData = $request->all();
  1376. try {
  1377. $idLevel = $this->encController->decrypt($idLevel);
  1378. } catch (\Throwable $th) {
  1379. DB::rollBack();
  1380. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD001: Ocurrió un error al desencriptar el área.', $th->getMessage(), 500);
  1381. }
  1382. try {
  1383. $validateExistLevel = DB::table('S002V01TNIVE')
  1384. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1385. ->where('NIVE_CONI', '=', $idLevel)
  1386. ->where('NIVE_ESTA', '=', 'Activo')
  1387. ->exists();
  1388. } catch (\Throwable $th) {
  1389. DB::rollBack();
  1390. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD002: Ocurrió un error al verificar el código del área.', $th->getMessage(), 500);
  1391. }
  1392. if (!$validateExistLevel) {
  1393. DB::rollBack();
  1394. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD003: El área no existe.', [], 406);
  1395. }
  1396. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1397. if ($arrResponseCheckUser['error']) {
  1398. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD004:'.$arrResponseCheckUser['msg'], [], 401);
  1399. }
  1400. $user = $arrResponseCheckUser['response'];
  1401. try {
  1402. $validateExistWarehouse = DB::table('S002V01TALMA')
  1403. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  1404. ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1405. ->where('ALMA_ESTA', '=', 'Activo')
  1406. ->exists();
  1407. } catch (\Throwable $th) {
  1408. DB::rollBack();
  1409. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD005: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500);
  1410. }
  1411. if (!$validateExistWarehouse) {
  1412. DB::rollBack();
  1413. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD006: El almacen no existe.', [], 406);
  1414. }
  1415. try {
  1416. $validateExistArea = DB::table('S002V01TAREA')
  1417. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  1418. ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1419. ->where('AREA_COAR', '=', $requestData['CODIGO_AREA'])
  1420. ->where('AREA_ESTA', '=', 'Activo')
  1421. ->exists();
  1422. } catch (\Throwable $th) {
  1423. DB::rollBack();
  1424. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD007: Ocurrió un error al verificar el área.', $th->getMessage(), 500);
  1425. }
  1426. if (!$validateExistArea) {
  1427. DB::rollBack();
  1428. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD008: El área no existe.', [], 406);
  1429. }
  1430. try {
  1431. $validateExistLevel = DB::table('S002V01TNIVE')
  1432. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1433. ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1434. ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA'])
  1435. ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL'])
  1436. ->exists();
  1437. } catch (\Throwable $th) {
  1438. DB::rollBack();
  1439. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD009: Ocurrió un error al verificar el código del nivel.', $th->getMessage(), 406);
  1440. }
  1441. if ($validateExistLevel) {
  1442. DB::rollBack();
  1443. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD010: El código del nivel ya existe.', [], 406);
  1444. }
  1445. $now = $this->functionsController->now();
  1446. $currentDate = $now->toDateTimeString();
  1447. try {
  1448. $validateUpdate = DB::table('S002V01TNIVE')
  1449. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1450. ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1451. ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA'])
  1452. ->where('NIVE_CONI', '=', $idLevel)
  1453. ->update([
  1454. 'NIVE_NONI' => $requestData['NOMBRE_NIVEL'],
  1455. 'NIVE_COME' => $requestData['COMENTARIOS'],
  1456. 'NIVE_USMO' => $user,
  1457. 'NIVE_FEMO' => $currentDate,
  1458. 'NIVE_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  1459. ]);
  1460. } catch (\Throwable $th) {
  1461. DB::rollBack();
  1462. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD011: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500);
  1463. }
  1464. if (!$validateUpdate) {
  1465. DB::rollBack();
  1466. return $this->responseController->makeResponse(true, 'ERR_LEVEL_UPD012: No se pudo guardar la información en la base de datos.', [], 406);
  1467. }
  1468. DB::commit();
  1469. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  1470. }
  1471. public function deleteLevel(Request $request, $idLevel) {
  1472. $validator = Validator::make($request->all(), [
  1473. 'USUARIO' => 'required|string',
  1474. 'NUMERO_LINEA' => 'required|integer',
  1475. ]);
  1476. if ($validator->fails()) {
  1477. return $this->responseController->makeResponse(
  1478. true,
  1479. "ERR_LEVEL_DEL000: Se encontraron uno o más errores.",
  1480. $this->responseController->makeErrors($validator->errors()->messages()),
  1481. 401
  1482. );
  1483. }
  1484. DB::beginTransaction();
  1485. $requestData = $request->all();
  1486. try {
  1487. $idLevel = $this->encController->decrypt($idLevel);
  1488. } catch (\Throwable $th) {
  1489. DB::rollBack();
  1490. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL001: Ocurrió un error al desencriptar el nivel.', $th->getMessage(), 500);
  1491. }
  1492. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1493. if ($arrResponseCheckUser['error']) {
  1494. DB::rollBack();
  1495. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL002:'.$arrResponseCheckUser['msg'], [], 401);
  1496. }
  1497. $user = $arrResponseCheckUser['response'];
  1498. try {
  1499. $arrLevel = (array) DB::table('S002V01TNIVE')
  1500. ->where('NIVE_CONI', '=', $idLevel)
  1501. ->where('NIVE_ESTA', '=', 'Activo')
  1502. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1503. ->first([
  1504. 'NIVE_COAL',
  1505. 'NIVE_COAR'
  1506. ]);
  1507. } catch (\Throwable $th) {
  1508. DB::rollBack();
  1509. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL003: Ocurrió un error al obtener la información del nivel.', $th->getMessage(), 500);
  1510. }
  1511. if (empty($arrLevel)) {
  1512. DB::rollBack();
  1513. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL004: El nivel no existe.', [], 406);
  1514. }
  1515. try {
  1516. $validateExists = DB::table('S002V01TUBAR')
  1517. ->where('UBAR_COAL', '=', $arrLevel['NIVE_COAL'])
  1518. ->where('UBAR_COAR', '=', $arrLevel['NIVE_COAR'])
  1519. ->where('UBAR_COZO', '=', $idLevel)
  1520. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  1521. ->where('UBAR_ESTA', '=', 'Activo')
  1522. ->exists();
  1523. } catch (\Throwable $th) {
  1524. DB::rollBack();
  1525. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500);
  1526. }
  1527. if($validateExists) {
  1528. DB::rollBack();
  1529. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL006: No se puede eliminar debido a que existen artículos ubicados en el nivel.', [], 406);
  1530. }
  1531. try {
  1532. $countZones = DB::table('S002V01TZONA')
  1533. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  1534. ->where('ZONA_COAL', '=', $arrLevel['NIVE_COAL'])
  1535. ->where('ZONA_COAR', '=', $arrLevel['NIVE_COAR'])
  1536. ->where('ZONA_CONI', '=', $idLevel)
  1537. ->where('ZONA_ESTA', '=', 'Activo')
  1538. ->count();
  1539. } catch (\Throwable $th) {
  1540. DB::rollBack();
  1541. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL007: Ocurrió un error al obtener las zonas.', $th->getMessage(), 500);
  1542. }
  1543. if ($countZones > 0) {
  1544. DB::rollBack();
  1545. $quantity = $countZones === 1 ? 'existe 1 zona activa' : 'existen '.$countZones.' zonas activas';
  1546. return $this->responseController->makeResponse(true, 'ERR_LEVEL_DEL008: No se puede eliminar debido a que '.$quantity.'.', [], 406);
  1547. }
  1548. $now = $this->functionsController->now();
  1549. $currentDate = $now->toDateTimeString();
  1550. try {
  1551. $validateUpdate = DB::table('S002V01TNIVE')
  1552. ->where('NIVE_CONI', '=', $idLevel)
  1553. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1554. ->update([
  1555. 'NIVE_ESTA' => 'Eliminado',
  1556. 'NIVE_USMO' => $user,
  1557. 'NIVE_FEMO' => $currentDate,
  1558. 'NIVE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1559. ]);
  1560. } catch (\Throwable $th) {
  1561. DB::rollBack();
  1562. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL009: Ocurrió un error al eliminar el nivel.', $th->getMessage(), 500);
  1563. }
  1564. if (!$validateUpdate) {
  1565. DB::rollBack();
  1566. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL010: No se pudo eliminar el nivel.', [], 406);
  1567. }
  1568. DB::commit();
  1569. return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa");
  1570. }
  1571. public function getZoneByLevelAreaWarehouse($idWarehouse, $idArea, $idLevel, $user, $line) {
  1572. try {
  1573. $idWarehouse = $this->encController->decrypt($idWarehouse);
  1574. } catch (\Throwable $th) {
  1575. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  1576. }
  1577. try {
  1578. $idArea = $this->encController->decrypt($idArea);
  1579. } catch (\Throwable $th) {
  1580. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406);
  1581. }
  1582. try {
  1583. $idLevel = $this->encController->decrypt($idLevel);
  1584. } catch (\Throwable $th) {
  1585. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY002: Ocurrió un error al desencriptar el ID del nivel', $th->getMessage(), 406);
  1586. }
  1587. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1588. if ($arrResponseCheckUser['error']) {
  1589. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY003:'.$arrResponseCheckUser['msg'], [], 401);
  1590. }
  1591. try {
  1592. $getZone = DB::table('S002V01TZONA')
  1593. ->where('ZONA_COAL', '=', $idWarehouse)
  1594. ->where('ZONA_COAR', '=', $idArea)
  1595. ->where('ZONA_CONI', '=', $idLevel)
  1596. ->where('ZONA_NULI', '=', $line)
  1597. ->get([
  1598. 'ZONA_COZO AS CODIGO_ZONA',
  1599. 'ZONA_NOZO AS NOMBRE_ZONA',
  1600. 'ZONA_COME AS COMENTARIOS',
  1601. 'ZONA_ESTA AS ESTADO',
  1602. 'ZONA_USRE AS USUARIO_REGISTRA',
  1603. 'ZONA_FERE AS FECHA_REGISTRA',
  1604. 'ZONA_USMO AS USUARIO_MODIFICA',
  1605. 'ZONA_FEMO AS FECHA_MODIFICA',
  1606. ]);
  1607. $arrZone = json_decode(json_encode($getZone), true);
  1608. } catch (\Throwable $th) {
  1609. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY004: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  1610. }
  1611. foreach ($arrZone as $key => $value) {
  1612. try {
  1613. $countStock = DB::table('S002V01TUBAR')
  1614. ->where('UBAR_NULI', '=', $line)
  1615. ->where('UBAR_ESTA', '=', 'Activo')
  1616. ->where('UBAR_COAL', '=', $idWarehouse)
  1617. ->where('UBAR_COAR', '=', $idArea)
  1618. ->where('UBAR_CONI', '=', $idLevel)
  1619. ->where('UBAR_COZO', '=', $value['CODIGO_ZONA'])
  1620. ->count();
  1621. } catch (\Throwable $th) {
  1622. DB::rollBack();
  1623. return $this->responseController->makeResponse(
  1624. true,
  1625. "ERR_WAREHOUSE_GET003: Ocurrió un error al obtener los almacenes.",
  1626. $th->getMessage(),
  1627. 500
  1628. );
  1629. }
  1630. $value['CANTIDAD_STOCK'] = $countStock;
  1631. $arrZone[$key] = $value;
  1632. }
  1633. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrZone);
  1634. }
  1635. public function getZoneById($idZone, $user, $line) {
  1636. try {
  1637. $idZone = $this->encController->decrypt($idZone);
  1638. } catch (\Throwable $th) {
  1639. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  1640. }
  1641. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1642. if ($arrResponseCheckUser['error']) {
  1643. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY001:'.$arrResponseCheckUser['msg'], [], 401);
  1644. }
  1645. try {
  1646. $getZone = (array) DB::table('S002V01TZONA')
  1647. ->where('ZONA_COZO', '=', $idZone)
  1648. ->where('ZONA_NULI', '=', $line)
  1649. ->first([
  1650. 'ZONA_NOZO AS NOMBRE_ZONA',
  1651. 'ZONA_COME AS COMENTARIOS',
  1652. 'ZONA_ESTA AS ESTADO',
  1653. 'ZONA_USRE AS USUARIO_REGISTRA',
  1654. 'ZONA_FERE AS FECHA_REGISTRA',
  1655. 'ZONA_USMO AS USUARIO_MODIFICA',
  1656. 'ZONA_FEMO AS FECHA_MODIFICA',
  1657. ]);
  1658. $arrZone = json_decode(json_encode($getZone), true);
  1659. } catch (\Throwable $th) {
  1660. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBY002: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  1661. }
  1662. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrZone);
  1663. }
  1664. public function getZoneByLevelAreaWarehouseActive($idWarehouse, $idArea, $idLevel, $user, $line) {
  1665. try {
  1666. $idWarehouse = $this->encController->decrypt($idWarehouse);
  1667. } catch (\Throwable $th) {
  1668. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  1669. }
  1670. try {
  1671. $idArea = $this->encController->decrypt($idArea);
  1672. } catch (\Throwable $th) {
  1673. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE001: Ocurrió un error al desencriptar el ID del área', $th->getMessage(), 406);
  1674. }
  1675. try {
  1676. $idLevel = $this->encController->decrypt($idLevel);
  1677. } catch (\Throwable $th) {
  1678. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE002: Ocurrió un error al desencriptar el ID del nivel', $th->getMessage(), 406);
  1679. }
  1680. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1681. if ($arrResponseCheckUser['error']) {
  1682. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE003:'.$arrResponseCheckUser['msg'], [], 401);
  1683. }
  1684. try {
  1685. $validateExists = DB::table('S002V01TALMA')
  1686. ->where('ALMA_NULI', '=', $line)
  1687. ->where('ALMA_COAL', '=', $idWarehouse)
  1688. ->exists();
  1689. } catch (\Throwable $th) {
  1690. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE004: Ocurrió un error al obtener el almacen.', $th->getMessage(), 406);
  1691. }
  1692. if (!$validateExists) {
  1693. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE005: El almacen no existe.', [], 401);
  1694. }
  1695. try {
  1696. $validateExists = DB::table('S002V01TAREA')
  1697. ->where('AREA_NULI', '=', $line)
  1698. ->where('AREA_COAL', '=', $idWarehouse)
  1699. ->where('AREA_COAR', '=', $idArea)
  1700. ->exists();
  1701. } catch (\Throwable $th) {
  1702. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE006: Ocurrió un error al obtener el área.', $th->getMessage(), 406);
  1703. }
  1704. if (!$validateExists) {
  1705. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE007: El área no existe.', [], 401);
  1706. }
  1707. try {
  1708. $validateExists = DB::table('S002V01TNIVE')
  1709. ->where('NIVE_NULI', '=', $line)
  1710. ->where('NIVE_COAL', '=', $idWarehouse)
  1711. ->where('NIVE_COAR', '=', $idArea)
  1712. ->where('NIVE_CONI', '=', $idLevel)
  1713. ->exists();
  1714. } catch (\Throwable $th) {
  1715. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE008: Ocurrió un error al obtener el nivel.', $th->getMessage(), 406);
  1716. }
  1717. if (!$validateExists) {
  1718. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE009: El nivel no existe.', [], 401);
  1719. }
  1720. try {
  1721. $getZone = DB::table('S002V01TZONA')
  1722. ->where('ZONA_COAL', '=', $idWarehouse)
  1723. ->where('ZONA_COAR', '=', $idArea)
  1724. ->where('ZONA_CONI', '=', $idLevel)
  1725. ->where('ZONA_NULI', '=', $line)
  1726. ->where('ZONA_ESTA', '=', 'Activo')
  1727. ->get([
  1728. 'ZONA_COZO AS CODIGO_ZONA',
  1729. 'ZONA_NOZO AS NOMBRE_ZONA',
  1730. 'ZONA_COME AS COMENTARIOS',
  1731. ]);
  1732. $arrZone = json_decode(json_encode($getZone), true);
  1733. } catch (\Throwable $th) {
  1734. return $this->responseController->makeResponse(true, 'ERR_ZONE_GETBYACTIVE010: Ocurrió un error al obtener los registros del área.', $th->getMessage(), 406);
  1735. }
  1736. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrZone);
  1737. }
  1738. public function registerZone(Request $request) {
  1739. $validator = Validator::make($request->all(), [
  1740. 'CODIGO_ALMACEN' => 'required|string',
  1741. 'CODIGO_AREA' => 'required|string',
  1742. 'CODIGO_NIVEL' => 'required|string',
  1743. 'CODIGO_ZONA' => 'required|string',
  1744. 'NOMBRE_ZONA' => 'required|string',
  1745. 'COMENTARIOS' => 'nullable|string',
  1746. 'USUARIO' => 'required|string',
  1747. 'NUMERO_LINEA' => 'required|integer',
  1748. ]);
  1749. if ($validator->fails()) {
  1750. return $this->responseController->makeResponse(
  1751. true,
  1752. "ERR_ZONE_REG000: Se encontraron uno o más errores.",
  1753. $this->responseController->makeErrors($validator->errors()->messages()),
  1754. 401
  1755. );
  1756. }
  1757. DB::beginTransaction();
  1758. $requestData = $request->all();
  1759. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1760. if ($arrResponseCheckUser['error']) {
  1761. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG001:'.$arrResponseCheckUser['msg'], [], 401);
  1762. }
  1763. $user = $arrResponseCheckUser['response'];
  1764. try {
  1765. $validateExistWarehouse = DB::table('S002V01TALMA')
  1766. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  1767. ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1768. ->where('ALMA_ESTA', '=', 'Activo')
  1769. ->exists();
  1770. } catch (\Throwable $th) {
  1771. DB::rollBack();
  1772. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG002: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500);
  1773. }
  1774. if (!$validateExistWarehouse) {
  1775. DB::rollBack();
  1776. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG003: El almacen no existe.', [], 406);
  1777. }
  1778. try {
  1779. $validateExistArea = DB::table('S002V01TAREA')
  1780. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  1781. ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1782. ->where('AREA_COAR', '=', $requestData['CODIGO_AREA'])
  1783. ->where('AREA_ESTA', '=', 'Activo')
  1784. ->exists();
  1785. } catch (\Throwable $th) {
  1786. DB::rollBack();
  1787. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG004: Ocurrió un error al verificar el área.', $th->getMessage(), 500);
  1788. }
  1789. if (!$validateExistArea) {
  1790. DB::rollBack();
  1791. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG005: El área no existe.', [], 406);
  1792. }
  1793. try {
  1794. $validateExistNivel = DB::table('S002V01TNIVE')
  1795. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1796. ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1797. ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA'])
  1798. ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL'])
  1799. ->where('NIVE_ESTA', '=', 'Activo')
  1800. ->exists();
  1801. } catch (\Throwable $th) {
  1802. DB::rollBack();
  1803. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG006: Ocurrió un error al verificar el nivel.', $th->getMessage(), 500);
  1804. }
  1805. if (!$validateExistNivel) {
  1806. DB::rollBack();
  1807. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG007: El nivel no existe.', [], 406);
  1808. }
  1809. try {
  1810. $validateExistZone = DB::table('S002V01TZONA')
  1811. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  1812. ->where('ZONA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1813. ->where('ZONA_COAR', '=', $requestData['CODIGO_AREA'])
  1814. ->where('ZONA_CONI', '=', $requestData['CODIGO_NIVEL'])
  1815. ->where('ZONA_COZO', '=', $requestData['CODIGO_ZONA'])
  1816. ->exists();
  1817. } catch (\Throwable $th) {
  1818. DB::rollBack();
  1819. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG008: Ocurrió un error al verificar el código de la zona.', $th->getMessage(), 406);
  1820. }
  1821. if ($validateExistZone) {
  1822. DB::rollBack();
  1823. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG009: El código de la zona ya existe.', [], 406);
  1824. }
  1825. $now = $this->functionsController->now();
  1826. $currentDate = $now->toDateTimeString();
  1827. try {
  1828. $validateInsert = DB::table('S002V01TZONA')->insert([
  1829. 'ZONA_NULI' => $requestData['NUMERO_LINEA'],
  1830. 'ZONA_COAL' => $requestData['CODIGO_ALMACEN'],
  1831. 'ZONA_COAR' => $requestData['CODIGO_AREA'],
  1832. 'ZONA_CONI' => $requestData['CODIGO_NIVEL'],
  1833. 'ZONA_COZO' => $requestData['CODIGO_ZONA'],
  1834. 'ZONA_NOZO' => $requestData['NOMBRE_ZONA'],
  1835. 'ZONA_COME' => $requestData['COMENTARIOS'],
  1836. 'ZONA_USRE' => $user,
  1837. 'ZONA_FERE' => $currentDate,
  1838. 'ZONA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1839. ]);
  1840. } catch (\Throwable $th) {
  1841. DB::rollBack();
  1842. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG010: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500);
  1843. }
  1844. if (!$validateInsert) {
  1845. DB::rollBack();
  1846. return $this->responseController->makeResponse(true, 'ERR_ZONE_REG011: No se pudo guardar la información en la base de datos.', [], 406);
  1847. }
  1848. DB::commit();
  1849. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  1850. }
  1851. public function updateZone(Request $request, $idZone) {
  1852. $validator = Validator::make($request->all(), [
  1853. 'CODIGO_ALMACEN' => 'required|string',
  1854. 'CODIGO_AREA' => 'required|string',
  1855. 'CODIGO_NIVEL' => 'required|string',
  1856. 'NOMBRE_ZONA' => 'required|string',
  1857. 'COMENTARIOS' => 'nullable|string',
  1858. 'USUARIO' => 'required|string',
  1859. 'NUMERO_LINEA' => 'required|integer',
  1860. ]);
  1861. if ($validator->fails()) {
  1862. return $this->responseController->makeResponse(
  1863. true,
  1864. "ERR_ZONE_UPD000: Se encontraron uno o más errores.",
  1865. $this->responseController->makeErrors($validator->errors()->messages()),
  1866. 401
  1867. );
  1868. }
  1869. DB::beginTransaction();
  1870. $requestData = $request->all();
  1871. try {
  1872. $idZone = $this->encController->decrypt($idZone);
  1873. } catch (\Throwable $th) {
  1874. DB::rollBack();
  1875. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD001: Ocurrió un error al desencriptar la zona.', $th->getMessage(), 500);
  1876. }
  1877. try {
  1878. $validateExistLevel = DB::table('S002V01TZONA')
  1879. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  1880. ->where('ZONA_COZO', '=', $idZone)
  1881. ->where('ZONA_ESTA', '=', 'Activo')
  1882. ->exists();
  1883. } catch (\Throwable $th) {
  1884. DB::rollBack();
  1885. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD002: Ocurrió un error al verificar el código de la zona.', $th->getMessage(), 500);
  1886. }
  1887. if (!$validateExistLevel) {
  1888. DB::rollBack();
  1889. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD003: El área no existe.', [], 406);
  1890. }
  1891. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1892. if ($arrResponseCheckUser['error']) {
  1893. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD004:'.$arrResponseCheckUser['msg'], [], 401);
  1894. }
  1895. $user = $arrResponseCheckUser['response'];
  1896. try {
  1897. $validateExistWarehouse = DB::table('S002V01TALMA')
  1898. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  1899. ->where('ALMA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1900. ->where('ALMA_ESTA', '=', 'Activo')
  1901. ->exists();
  1902. } catch (\Throwable $th) {
  1903. DB::rollBack();
  1904. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD005: Ocurrió un error al verificar el almacen.', $th->getMessage(), 500);
  1905. }
  1906. if (!$validateExistWarehouse) {
  1907. DB::rollBack();
  1908. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD006: El almacen no existe.', [], 406);
  1909. }
  1910. try {
  1911. $validateExistArea = DB::table('S002V01TAREA')
  1912. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  1913. ->where('AREA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1914. ->where('AREA_COAR', '=', $requestData['CODIGO_AREA'])
  1915. ->where('AREA_ESTA', '=', 'Activo')
  1916. ->exists();
  1917. } catch (\Throwable $th) {
  1918. DB::rollBack();
  1919. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD007: Ocurrió un error al verificar el área.', $th->getMessage(), 500);
  1920. }
  1921. if (!$validateExistArea) {
  1922. DB::rollBack();
  1923. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD008: El área no existe.', [], 406);
  1924. }
  1925. try {
  1926. $validateExistNivel = DB::table('S002V01TNIVE')
  1927. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  1928. ->where('NIVE_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1929. ->where('NIVE_COAR', '=', $requestData['CODIGO_AREA'])
  1930. ->where('NIVE_CONI', '=', $requestData['CODIGO_NIVEL'])
  1931. ->where('NIVE_ESTA', '=', 'Activo')
  1932. ->exists();
  1933. } catch (\Throwable $th) {
  1934. DB::rollBack();
  1935. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD009: Ocurrió un error al verificar el nivel.', $th->getMessage(), 500);
  1936. }
  1937. if (!$validateExistNivel) {
  1938. DB::rollBack();
  1939. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD010: El nivel no existe.', [], 406);
  1940. }
  1941. try {
  1942. $validateExistZone = DB::table('S002V01TZONA')
  1943. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  1944. ->where('ZONA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1945. ->where('ZONA_COAR', '=', $requestData['CODIGO_AREA'])
  1946. ->where('ZONA_CONI', '=', $requestData['CODIGO_NIVEL'])
  1947. ->where('ZONA_COZO', '=', $requestData['CODIGO_ZONA'])
  1948. ->exists();
  1949. } catch (\Throwable $th) {
  1950. DB::rollBack();
  1951. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD011: Ocurrió un error al verificar el código de la zona.', $th->getMessage(), 406);
  1952. }
  1953. if ($validateExistZone) {
  1954. DB::rollBack();
  1955. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD012: El código de la zona ya existe.', [], 406);
  1956. }
  1957. $now = $this->functionsController->now();
  1958. $currentDate = $now->toDateTimeString();
  1959. try {
  1960. $validateUpdate = DB::table('S002V01TZONA')
  1961. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  1962. ->where('ZONA_COAL', '=', $requestData['CODIGO_ALMACEN'])
  1963. ->where('ZONA_COAR', '=', $requestData['CODIGO_AREA'])
  1964. ->where('ZONA_CONI', '=', $requestData['CODIGO_NIVEL'])
  1965. ->where('ZONA_COZO', '=', $idZone)
  1966. ->update([
  1967. 'ZONA_NOZO' => $requestData['NOMBRE_ZONA'],
  1968. 'ZONA_COME' => $requestData['COMENTARIOS'],
  1969. 'ZONA_USMO' => $user,
  1970. 'ZONA_FEMO' => $currentDate,
  1971. 'ZONA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1972. ]);
  1973. } catch (\Throwable $th) {
  1974. DB::rollBack();
  1975. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD013: Ocurrió un error al ingresar la información a la base de datos.', $th->getMessage(), 500);
  1976. }
  1977. if (!$validateUpdate) {
  1978. DB::rollBack();
  1979. return $this->responseController->makeResponse(true, 'ERR_ZONE_UPD014: No se pudo guardar la información en la base de datos.', [], 406);
  1980. }
  1981. DB::commit();
  1982. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  1983. }
  1984. public function deleteZone(Request $request, $idZone) {
  1985. $validator = Validator::make($request->all(), [
  1986. 'USUARIO' => 'required|string',
  1987. 'NUMERO_LINEA' => 'required|integer',
  1988. ]);
  1989. if ($validator->fails()) {
  1990. return $this->responseController->makeResponse(
  1991. true,
  1992. "ERR_ZONE_DEL000: Se encontraron uno o más errores.",
  1993. $this->responseController->makeErrors($validator->errors()->messages()),
  1994. 401
  1995. );
  1996. }
  1997. DB::beginTransaction();
  1998. $requestData = $request->all();
  1999. try {
  2000. $idZone = $this->encController->decrypt($idZone);
  2001. } catch (\Throwable $th) {
  2002. DB::rollBack();
  2003. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL001: Ocurrió un error al desencriptar la zona.', $th->getMessage(), 500);
  2004. }
  2005. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2006. if ($arrResponseCheckUser['error']) {
  2007. DB::rollBack();
  2008. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL002:'.$arrResponseCheckUser['msg'], [], 401);
  2009. }
  2010. $user = $arrResponseCheckUser['response'];
  2011. try {
  2012. $arrZone = (array) DB::table('S002V01TZONA')
  2013. ->where('ZONA_COZO', '=', $idZone)
  2014. ->where('ZONA_ESTA', '=', 'Activo')
  2015. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  2016. ->first([
  2017. 'ZONA_COAL',
  2018. 'ZONA_COAR',
  2019. 'ZONA_CONI',
  2020. ]);
  2021. } catch (\Throwable $th) {
  2022. DB::rollBack();
  2023. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL003: Ocurrió un error al obtener la información de la zona.', $th->getMessage(), 500);
  2024. }
  2025. if (empty($arrZone)) {
  2026. DB::rollBack();
  2027. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL004: La zona no existe.', [], 406);
  2028. }
  2029. try {
  2030. $validateExists = DB::table('S002V01TUBAR')
  2031. ->where('UBAR_COAL', '=', $arrZone['ZONA_COAL'])
  2032. ->where('UBAR_COAR', '=', $arrZone['ZONA_COAR'])
  2033. ->where('UBAR_CONI', '=', $arrZone['ZONA_CONI'])
  2034. ->where('UBAR_COZO', '=', $idZone)
  2035. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  2036. ->where('UBAR_ESTA', '=', 'Activo')
  2037. ->exists();
  2038. } catch (\Throwable $th) {
  2039. DB::rollBack();
  2040. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL005: Ocurrió un error al obtener las ubicaciones de los artículos.', $th->getMessage(), 500);
  2041. }
  2042. if($validateExists) {
  2043. DB::rollBack();
  2044. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL006: No se puede eliminar debido a que existen artículos ubicados en la zona.', [], 406);
  2045. }
  2046. $now = $this->functionsController->now();
  2047. $currentDate = $now->toDateTimeString();
  2048. try {
  2049. $validateUpdate = DB::table('S002V01TZONA')
  2050. ->where('ZONA_COZO', '=', $idZone)
  2051. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  2052. ->update([
  2053. 'ZONA_ESTA' => 'Eliminado',
  2054. 'ZONA_USMO' => $user,
  2055. 'ZONA_FEMO' => $currentDate,
  2056. 'ZONA_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2057. ]);
  2058. } catch (\Throwable $th) {
  2059. DB::rollBack();
  2060. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL007: Ocurrió un error al eliminar la zona.', $th->getMessage(), 500);
  2061. }
  2062. if (!$validateUpdate) {
  2063. DB::rollBack();
  2064. return $this->responseController->makeResponse(true, 'ERR_ZONE_DEL008: No se pudo eliminar la zona.', [], 406);
  2065. }
  2066. DB::commit();
  2067. return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa");
  2068. }
  2069. // FUNCIÓN RECEPCIÓN DE ARTÍCULOS
  2070. public function registerToStock(Request $request) {
  2071. $validator = Validator::make($request->all(), [
  2072. 'WAREHOUSE' => 'required|string',
  2073. 'AREA' => 'required|string',
  2074. 'LEVEL' => 'required|string',
  2075. 'ZONE' => 'required|string',
  2076. 'ORDER' => 'required|string',
  2077. 'PRE_CODIFICATE' => 'required|array',
  2078. 'ID_INFORMATION' => 'required|integer',
  2079. 'FAMILIA' => 'required|string',
  2080. 'SUBFAMILIA' => 'required|string',
  2081. 'MODELO' => 'required|string',
  2082. 'CODIGO_MODELO' => 'required|string',
  2083. 'NUMBER_ITEMS' => 'required|integer',
  2084. 'CODIGO_BARRAS' => 'required|string',
  2085. 'FECHA_VENCIMIENTO' => 'nullable|string',
  2086. 'IMAGES' => 'required|json',
  2087. 'PRE_GENERATED_CODE' => 'required|string',
  2088. 'REPARABLE' => 'required|boolean',
  2089. 'CONSUMIBLE' => 'required|boolean',
  2090. 'USUARIO' => 'required|string',
  2091. 'NUMERO_LINEA' => 'required|integer',
  2092. ]);
  2093. if($validator->fails()){
  2094. return $this->responseController->makeResponse(
  2095. true,
  2096. "Se encontraron uno o más errores.",
  2097. $this->responseController->makeErrors(
  2098. $validator->errors()->messages()
  2099. ),
  2100. 401
  2101. );
  2102. }
  2103. DB::beginTransaction();
  2104. $requestData = $request->all();
  2105. // Se verifica la precodificación
  2106. if ( count($requestData['PRE_CODIFICATE']) !== $requestData['NUMBER_ITEMS']) {
  2107. DB::rollBack();
  2108. return $this->responseController->makeResponse(true, 'La cantidad registrada de la precodificación no es igual la cantidad de artículos seleccionados.', [], 500);
  2109. }
  2110. // Se desencripta y se verifica si el usuario existe
  2111. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2112. if ($arrResponseCheckUser['error']) {
  2113. DB::rollBack();
  2114. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2115. }
  2116. $user = $arrResponseCheckUser['response'];
  2117. // Se obtiene la información encriptada
  2118. try {
  2119. $idWarehouse = $this->encController->decrypt($requestData['WAREHOUSE']);
  2120. } catch (\Throwable $th) {
  2121. DB::rollBack();
  2122. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el almacen.', $th->getMessage(), 500);
  2123. }
  2124. if ($idWarehouse === false) {
  2125. DB::rollBack();
  2126. return $this->responseController->makeResponse(true, 'La encriptación del almacen no es correcta.', [], 500);
  2127. }
  2128. try {
  2129. $idArea = $this->encController->decrypt($requestData['AREA']);
  2130. } catch (\Throwable $th) {
  2131. DB::rollBack();
  2132. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el área.', $th->getMessage(), 500);
  2133. }
  2134. if ($idArea === false) {
  2135. DB::rollBack();
  2136. return $this->responseController->makeResponse(true, 'La encriptacipon del área no es correcta.', [], 500);
  2137. }
  2138. try {
  2139. $idLevel = $this->encController->decrypt($requestData['LEVEL']);
  2140. } catch (\Throwable $th) {
  2141. DB::rollBack();
  2142. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el nivel.', $th->getMessage(), 500);
  2143. }
  2144. if ($idLevel === false) {
  2145. DB::rollBack();
  2146. return $this->responseController->makeResponse(true, 'La encriptación del nivel no es correcta.', [], 500);
  2147. }
  2148. try {
  2149. $idZone = $this->encController->decrypt($requestData['ZONE']);
  2150. } catch (\Throwable $th) {
  2151. DB::rollBack();
  2152. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la zona.', $th->getMessage(), 500);
  2153. }
  2154. if ($idZone === false) {
  2155. DB::rollBack();
  2156. return $this->responseController->makeResponse(true, 'La encriptación de la zona no es correcta.', [], 500);
  2157. }
  2158. try {
  2159. $idFamily = $this->encController->decrypt($requestData['FAMILIA']);
  2160. } catch (\Throwable $th) {
  2161. DB::rollBack();
  2162. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la familia.', $th->getMessage(), 500);
  2163. }
  2164. if ($idFamily === false) {
  2165. DB::rollBack();
  2166. return $this->responseController->makeResponse(true, 'La encriptación de la familia no es correcta.', [], 500);
  2167. }
  2168. try {
  2169. $idSubfamily = $this->encController->decrypt($requestData['SUBFAMILIA']);
  2170. } catch (\Throwable $th) {
  2171. DB::rollBack();
  2172. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la subfamilia.', $th->getMessage(), 500);
  2173. }
  2174. if ($idSubfamily === false) {
  2175. DB::rollBack();
  2176. return $this->responseController->makeResponse(true, 'La encriptación de la subfamilia no es correcta.', [], 500);
  2177. }
  2178. // Se verifica que la información exista
  2179. try {
  2180. $validateWarehouse = DB::table('S002V01TALMA')
  2181. ->where('ALMA_COAL', '=', $idWarehouse)
  2182. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  2183. ->exists();
  2184. } catch (\Throwable $th) {
  2185. DB::rollBack();
  2186. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el almacen existe.', $th->getMessage(), 500);
  2187. }
  2188. if ($validateWarehouse === false) {
  2189. DB::rollBack();
  2190. return $this->responseController->makeResponse(true, 'El almacen no existe.', [], 500);
  2191. }
  2192. try {
  2193. $validateArea = DB::table('S002V01TAREA')
  2194. ->where('AREA_COAL', '=', $idWarehouse)
  2195. ->where('AREA_COAR', '=', $idArea)
  2196. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  2197. ->exists();
  2198. } catch (\Throwable $th) {
  2199. DB::rollBack();
  2200. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el área existe.', $th->getMessage(), 500);
  2201. }
  2202. if ($validateArea === false) {
  2203. DB::rollBack();
  2204. return $this->responseController->makeResponse(true, 'El área no existe.', [], 500);
  2205. }
  2206. try {
  2207. $validateLevel = DB::table('S002V01TNIVE')
  2208. ->where('NIVE_COAL', '=', $idWarehouse)
  2209. ->where('NIVE_COAR', '=', $idArea)
  2210. ->where('NIVE_CONI', '=', $idLevel)
  2211. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  2212. ->exists();
  2213. } catch (\Throwable $th) {
  2214. DB::rollBack();
  2215. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el nivel existe.', $th->getMessage(), 500);
  2216. }
  2217. if ($validateLevel === false) {
  2218. DB::rollBack();
  2219. return $this->responseController->makeResponse(true, 'El nivel no existe.', [], 500);
  2220. }
  2221. try {
  2222. $validateZone = DB::table('S002V01TZONA')
  2223. ->where('ZONA_COAL', '=', $idWarehouse)
  2224. ->where('ZONA_COAR', '=', $idArea)
  2225. ->where('ZONA_CONI', '=', $idLevel)
  2226. ->where('ZONA_COZO', '=', $idZone)
  2227. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  2228. ->exists();
  2229. } catch (\Throwable $th) {
  2230. DB::rollBack();
  2231. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la zona existe.', $th->getMessage(), 500);
  2232. }
  2233. if ($validateZone === false) {
  2234. return $this->responseController->makeResponse(true, 'La zona no existe.', [], 500);
  2235. }
  2236. try {
  2237. $validateFamily = DB::table('S002V01TFAMI')
  2238. ->where('FAMI_COFA', '=', $idFamily)
  2239. ->where('FAMI_NULI', '=', $requestData['NUMERO_LINEA'])
  2240. ->exists();
  2241. } catch (\Throwable $th) {
  2242. DB::rollBack();
  2243. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la familia existe.', $th->getMessage(), 500);
  2244. }
  2245. if ($validateFamily === false) {
  2246. DB::rollBack();
  2247. return $this->responseController->makeResponse(true, 'La familia no existe.', [], 500);
  2248. }
  2249. try {
  2250. $validateSubfamily = DB::table('S002V01TSUBF')
  2251. ->where('SUBF_COFA', '=', $idFamily)
  2252. ->where('SUBF_COSU', '=', $idSubfamily)
  2253. ->where('SUBF_NULI', '=', $requestData['NUMERO_LINEA'])
  2254. ->exists();
  2255. } catch (\Throwable $th) {
  2256. DB::rollBack();
  2257. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la subfamilia existe.', $th->getMessage(), 500);
  2258. }
  2259. if ($validateSubfamily === false) {
  2260. DB::rollBack();
  2261. return $this->responseController->makeResponse(true, 'La subfamilia no existe.', [], 500);
  2262. }
  2263. try {
  2264. $orden = (array) DB::table('S002V01TORCO')
  2265. ->where('ORCO_NUOR', '=', $requestData['ORDER'])
  2266. ->where('ORCO_NULI', '=', $requestData['NUMERO_LINEA'])
  2267. ->where('ORCO_ESTA', '=', 'Recibido')
  2268. ->first([
  2269. 'ORCO_IDLI AS ID_LINEA_SOLICITUD',
  2270. 'ORCO_IDDE AS ID_DESCRIPCION',
  2271. ]);
  2272. } catch (\Throwable $th) {
  2273. DB::rollBack();
  2274. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la orden de compra.', $th->getMessage(), 500);
  2275. }
  2276. if (is_null($orden)) {
  2277. DB::rollBack();
  2278. return $this->responseController->makeResponse(true, 'La orden de compra no existe.', [], 500);
  2279. }
  2280. $now = $this->functionsController->now();
  2281. $currentDate = $now->toDateTimeString();
  2282. try {
  2283. $info = DB::table('S002V01TARSE')
  2284. ->where('ARSE_IDIN', '=', $requestData['ID_INFORMATION'])
  2285. ->where('ARSE_ESTA', '=', 'Activo')
  2286. ->where('ARSE_IDLI', '=', $orden['ID_LINEA_SOLICITUD'])
  2287. ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA'])
  2288. ->where('ARTI_NULI', '=', $requestData['NUMERO_LINEA'])
  2289. ->where('DEAR_NULI', '=', $requestData['NUMERO_LINEA'])
  2290. ->where('UNID_NULI', '=', $requestData['NUMERO_LINEA'])
  2291. ->where('INAR_NULI', '=', $requestData['NUMERO_LINEA'])
  2292. ->where('ARSE_ESTA', '=', 'Activo')
  2293. ->where('ARTI_ESTA', '=', 'Activo')
  2294. ->where('DEAR_ESTA', '=', 'Activo')
  2295. ->where('UNID_ESTA', '=', 'Activo')
  2296. ->where('INAR_ESTA', '=', 'Activo')
  2297. ->where('INAR_CODI', '=', $requestData['CODIGO_MODELO'])
  2298. ->where('INAR_MODE', '=', $requestData['MODELO'])
  2299. ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'ARSE_IDAR')
  2300. ->join('S002V01TINAR', 'INAR_IDIN', '=', 'ARSE_IDIN')
  2301. ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
  2302. ->join('S002V01TUNID', 'UNID_IDUN', '=', 'DEAR_IDUN')
  2303. ->limit($requestData['NUMBER_ITEMS'])
  2304. ->get([
  2305. 'ARSE_IDAS AS NUMERO_SELECCIONADO',
  2306. 'ARTI_IDAR AS ID_ARTICULO',
  2307. 'ARTI_COFA AS CODIGO_FAMILIA',
  2308. 'ARTI_COSU AS CODIGO_SUBFAMILIA',
  2309. 'ARTI_CODI AS CODIGO_ARTICULO',
  2310. 'ARTI_NOMB AS NOMBRE_ARTICULO',
  2311. 'DEAR_IDDE AS ID_DESCRIPCION',
  2312. 'DEAR_IMAG AS IMAGENES',
  2313. 'DEAR_DESC AS DESCRIPCION',
  2314. 'DEAR_CARA AS CARACTERISTICAS',
  2315. 'DEAR_COWE AS COMPRA_WEB',
  2316. 'DEAR_NUPR AS NUMERO_PROVEEDOR',
  2317. 'UNID_IDUN AS ID_UNIDAD',
  2318. 'UNID_NOMB AS NOMBRE_UNIDAD',
  2319. 'UNID_ACRO AS ACRONIMO_UNIDAD',
  2320. 'INAR_IDIN AS ID_INFORMACION',
  2321. 'INAR_CODI AS CODIGO_INFORMACION',
  2322. 'INAR_MODE AS MODELO_INFORMACION',
  2323. 'INAR_COMO AS CODIGO_MONEDA',
  2324. 'INAR_PREC AS PRECIO',
  2325. 'INAR_MOMI AS MONTO_MINIMO',
  2326. 'INAR_CARA AS CARACTERISTICAS',
  2327. ]);
  2328. $info = json_decode(json_encode($info ), true);
  2329. } catch (\Throwable $th) {
  2330. DB::rollBack();
  2331. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de los productos.', $th->getMessage(), 500);
  2332. }
  2333. if ( is_null($info) || empty($info) ) {
  2334. DB::rollBack();
  2335. return $this->responseController->makeResponse(true, 'No existen artículos asociados a la orden de compra.', [], 500);
  2336. }
  2337. // Se verifica que existan los datos suficientes para hacer el traslado.
  2338. if ( count($info) !== $requestData['NUMBER_ITEMS']) {
  2339. DB::rollBack();
  2340. return $this->responseController->makeResponse(true, 'La cantidad de artículos en la orden de compra no corresponde a la cantidad de artículos seleccionados a Stock.', [], 500);
  2341. }
  2342. // Se verifica los códigos de barras
  2343. $uniqueBarcode = false;
  2344. $arrBarcode = explode(',', $requestData['CODIGO_BARRAS']);
  2345. if ( count($arrBarcode) === 0) {
  2346. DB::rollBack();
  2347. return $this->responseController->makeResponse(true, 'No hay códigos de barras registrados.', [], 500);
  2348. } else if (count($arrBarcode) === $requestData['NUMBER_ITEMS']) {
  2349. $uniqueBarcode = false;
  2350. } else if (array_key_exists(0, $arrBarcode) && count($arrBarcode) === 1 && $arrBarcode[0] !== '' ) {
  2351. $uniqueBarcode = true;
  2352. } else {
  2353. DB::rollBack();
  2354. return $this->responseController->makeResponse(true, 'Ocurrió un error con los códigos de barras registrados.', [], 500);
  2355. }
  2356. // Se verifica que los códigos de barras del formulario no sean repetidos
  2357. $temp_array = array_unique($arrBarcode);
  2358. $duplicates = sizeof($temp_array) != sizeof($arrBarcode);
  2359. if ($duplicates) {
  2360. return $this->responseController->makeResponse(true, 'Los códigos de barras no se pueden repetir.', [], 400);
  2361. }
  2362. // Se verifican que los códigos de barras no se repitan
  2363. foreach ($arrBarcode as $key => $barcode) {
  2364. try {
  2365. $validateBarcode = DB::table('S002V01TSTAR')
  2366. ->where('STAR_COBA', '=', $barcode)
  2367. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  2368. ->exists();
  2369. } catch (\Throwable $th) {
  2370. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar los códigos de barras.', $th->getMessage(), 500);
  2371. }
  2372. if ($validateBarcode === true) {
  2373. return $this->responseController->makeResponse(true, 'El código '.$barcode.' ya se encuentra registrado', [], 500);
  2374. }
  2375. }
  2376. // Se verifica la fecha de vencimientos
  2377. $arrDueDate = array();
  2378. $uniqueDueDate = false;
  2379. if ($requestData['FECHA_VENCIMIENTO'] !== '' && !is_null($requestData['FECHA_VENCIMIENTO'])) {
  2380. $arrDueDate = explode(',', $requestData['FECHA_VENCIMIENTO']);
  2381. if ( count($arrDueDate) === 0) {
  2382. DB::rollBack();
  2383. return $this->responseController->makeResponse(true, 'No hay fechas de vencimientos registradas.', [], 500);
  2384. } else if (count($arrDueDate) === $requestData['NUMBER_ITEMS']) {
  2385. $uniqueDueDate = false;
  2386. } else if (array_key_exists(0, $arrDueDate) && count($arrDueDate) === 1 && $arrDueDate[0] !== '' ) {
  2387. $uniqueDueDate = true;
  2388. } else {
  2389. DB::rollBack();
  2390. return $this->responseController->makeResponse(true, 'Ocurrió un error con las fechas de vencimientos registrados.', [], 500);
  2391. }
  2392. }
  2393. // Se obtiene la fecha actual
  2394. $now = $this->functionsController->now();
  2395. $currentDate = $now->toDateTimeString();
  2396. $idInfoStock = null;
  2397. try {
  2398. $infoStock = (array) DB::table('S002V01TINST')
  2399. ->where('INST_COFA', '=', $idFamily)
  2400. ->where('INST_COSU', '=', $idSubfamily)
  2401. ->where('INST_ARTI', '=', $info[0]['ID_ARTICULO'])
  2402. ->where('INST_MODE', '=', $requestData['MODELO'])
  2403. ->where('INST_COMO', '=', $requestData['CODIGO_MODELO'])
  2404. ->where('INST_NULI', '=', $requestData['NUMERO_LINEA'])
  2405. ->where('INST_ESTA', '=', 'Activo')
  2406. ->first([
  2407. 'INST_IDIS AS ID_INFO_STOCK'
  2408. ]);
  2409. } catch (\Throwable $th) {
  2410. DB::rollBack();
  2411. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar la información del stock.', $th->getMessage(), 500);
  2412. }
  2413. if (empty($infoStock) || is_null($infoStock)) {
  2414. // Se obtiene el arreglo de las imagenes
  2415. $imagesArr = json_decode($requestData['IMAGES'], true);
  2416. // Se verifica que el arreglo contenga imagenes
  2417. if(count($imagesArr) < 1){
  2418. DB::rollBack();
  2419. return $this->responseController->makeResponse(true, 'El arreglo de la galería de imágenes está vacío.', [], 400);
  2420. }
  2421. $imagesGallery = [];
  2422. // Se iteran las imagenes
  2423. foreach($imagesArr as $imageFile){
  2424. // Se verifica que tenga un formato correcto
  2425. if(!array_key_exists('type', $imageFile)){
  2426. DB::rollBack();
  2427. return $this->responseController->makeResponse(true, 'El arreglo de la galería de imágenes tiene un formato inválido.', [], 400);
  2428. // Si la imagen es nueva, entonces...
  2429. }else if($imageFile['type'] == 'Nuevo'){
  2430. // Se obtiene el ID de la imagen
  2431. $tempFileID = $this->encController->decrypt($imageFile['id']);
  2432. // Se obtiene la información registrada en la tabla de archivos temporales
  2433. $tempFile = DB::table('S002V01TARTE')->where([
  2434. ['ARTE_IDAR', '=', $tempFileID],
  2435. ['ARTE_NULI', '=', $requestData['NUMERO_LINEA']]
  2436. ])->first();
  2437. // La imagen es colocada en su posición final
  2438. $finalFile = $this->documentManagementController->moveFinalFile($requestData['NUMERO_LINEA'], 'GEEQ', 'FO', $tempFile, $user);
  2439. // Si ocurrió un error, entonces se manda el error
  2440. if(!$finalFile[0]){
  2441. return $this->responseController->makeResponse(true, $finalFile[1], [], 400);
  2442. }
  2443. // La información es guardada en un arreglo
  2444. $imagesGallery[] = $finalFile[1];
  2445. }else{
  2446. // Se desencripta el id de la imagen
  2447. $fileID = $this->encController->decrypt($imageFile['id']);
  2448. // Es guardada en un arreglo
  2449. $imagesGallery[] = $fileID;
  2450. }
  2451. }
  2452. // El arreglo de las imagenes es pasada en formato string
  2453. $imagesGalleryStr = json_encode($imagesGallery);
  2454. try {
  2455. $idInsert = DB::table('S002V01TINST')->insertGetId([
  2456. 'INST_NULI' => $requestData['NUMERO_LINEA'],
  2457. 'INST_COFA' => $idFamily,
  2458. 'INST_COSU' => $idSubfamily,
  2459. 'INST_ARTI' => $info[0]['ID_ARTICULO'],
  2460. 'INST_MODE' => $requestData['MODELO'],
  2461. 'INST_COMO' => $requestData['CODIGO_MODELO'],
  2462. 'INST_IMAG' => $imagesGalleryStr,
  2463. 'INST_USRE' => $user,
  2464. 'INST_FERE' => $currentDate,
  2465. 'INST_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2466. ]);
  2467. } catch (\Throwable $th) {
  2468. DB::rollBack();
  2469. return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar la información del stock.', $th->getMessage(), 500);
  2470. }
  2471. if ($idInsert === false || is_null($idInsert)) {
  2472. DB::rollBack();
  2473. return $this->responseController->makeResponse(true, 'No se pudo insertar la información del stock.', [], 500);
  2474. }
  2475. $idInfoStock = $idInsert;
  2476. } else {
  2477. $idInfoStock = $infoStock['ID_INFO_STOCK'];
  2478. }
  2479. if (is_null($idInfoStock)) {
  2480. DB::rollBack();
  2481. return $this->responseController->makeResponse(true, 'No se pudo obtener el ID de la información del Stock.', [], 500);
  2482. }
  2483. for ($i=0; $i < $requestData['NUMBER_ITEMS']; $i++) {
  2484. $dueDate = null;
  2485. if (count($arrDueDate) > 0 && $uniqueDueDate === true) {
  2486. $dueDate = $arrDueDate[0];
  2487. } else if (count($arrDueDate) > 0 && $uniqueDueDate === false) {
  2488. $dueDate = $arrDueDate[$i];
  2489. }
  2490. if (!is_null($dueDate) && str_contains($dueDate, 'T')) {
  2491. $dueDate = explode('T', $dueDate)[0];
  2492. }
  2493. try {
  2494. $preCodificate = $this->encController->decrypt($requestData['PRE_CODIFICATE'][$i]);
  2495. } catch (\Throwable $th) {
  2496. DB::rollBack();
  2497. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el identificador de la pre-codificación.', $th->getMessage(), 500);
  2498. }
  2499. if ($preCodificate === false) {
  2500. DB::rollBack();
  2501. return $this->responseController->makeResponse(true, 'No se pudo desencriptar el identificador de la pre-codificación.', [], 500);
  2502. }
  2503. try {
  2504. $idInsertStAr = DB::table('S002V01TSTAR')->insertGetId([
  2505. 'STAR_NULI' => $requestData['NUMERO_LINEA'],
  2506. 'STAR_IDIS' => $idInfoStock,
  2507. 'STAR_COBA' => $uniqueBarcode === true ? $arrBarcode[0] : $arrBarcode[$i],
  2508. 'STAR_FEVE' => $dueDate,
  2509. 'STAR_IDUN' => $info[$i]['ID_UNIDAD'],
  2510. 'STAR_NUPR' => $info[$i]['NUMERO_PROVEEDOR'],
  2511. 'STAR_TIAD' => 'Por pedido',
  2512. 'STAR_IDPC' => $preCodificate,
  2513. 'STAR_CONS' => $requestData['CONSUMIBLE'] ? 'Si' : 'No',
  2514. 'STAR_REPA' => $requestData['REPARABLE'] ? 'Si' : 'No',
  2515. 'STAR_PRAD' => $info[$i]['PRECIO'],
  2516. 'STAR_COMO' => $info[$i]['CODIGO_MONEDA'],
  2517. 'STAR_ESTA' => 'Pendiente',
  2518. 'STAR_USRE' => $user,
  2519. 'STAR_FERE' => $currentDate,
  2520. 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2521. ]);
  2522. } catch (\Throwable $th) {
  2523. DB::rollBack();
  2524. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar el equipamiento.', $th->getMessage(), 500);
  2525. }
  2526. if ($idInsertStAr === false || is_null($idInsertStAr)) {
  2527. DB::rollBack();
  2528. return $this->responseController->makeResponse(true, 'No se pudo registrar el equipamiento.', [], 500);
  2529. }
  2530. try {
  2531. $preCodeCodificate = $this->encController->decrypt($requestData['PRE_GENERATED_CODE']);
  2532. } catch (\Throwable $th) {
  2533. DB::rollBack();
  2534. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el pre-código generado', $th->getMessage(), 500);
  2535. }
  2536. if ( $preCodeCodificate === false ) {
  2537. DB::rollBack();
  2538. return $this->responseController->makeResponse(true, 'No se pudo desencriptar el pre-código del equipamientos.', [], 500);
  2539. }
  2540. try {
  2541. $validateInsertUbAr = DB::table('S002V01TUBAR')->insert([
  2542. 'UBAR_NULI' => $requestData['NUMERO_LINEA'],
  2543. 'UBAR_COAL' => $idWarehouse,
  2544. 'UBAR_COAR' => $idArea,
  2545. 'UBAR_CONI' => $idLevel,
  2546. 'UBAR_COZO' => $idZone,
  2547. 'UBAR_IDST' => $idInsertStAr,
  2548. 'UBAR_COUB' => $preCodeCodificate,
  2549. 'UBAR_ESTA' => 'Pendiente',
  2550. 'UBAR_USRE' => $user,
  2551. 'UBAR_FERE' => $currentDate,
  2552. 'UBAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2553. ]);
  2554. } catch (\Throwable $th) {
  2555. DB::rollBack();
  2556. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar la ubicación del artículo.', $th->getMessage(), 500);
  2557. }
  2558. if ( $validateInsertUbAr === false ) {
  2559. DB::rollBack();
  2560. return $this->responseController->makeResponse(true, 'No se pudo registrar la ubicación del artículo.', [], 500);
  2561. }
  2562. try {
  2563. $validateUpdateArSe = DB::table('S002V01TARSE')
  2564. ->where('ARSE_IDAS', '=', $info[$i]['NUMERO_SELECCIONADO'])
  2565. ->where('ARSE_NULI', '=', $requestData['NUMERO_LINEA'])
  2566. ->where('ARSE_IDLI', '=', $orden['ID_LINEA_SOLICITUD'])
  2567. ->where('ARSE_IDAR', '=', $info[$i]['ID_ARTICULO'])
  2568. ->where('ARSE_NUPR', '=', $info[$i]['NUMERO_PROVEEDOR'])
  2569. ->where('ARSE_IDIN', '=', $requestData['ID_INFORMATION'])
  2570. ->where('ARSE_ESTA', '=', 'Activo')
  2571. ->update([
  2572. 'ARSE_ESTA' => 'Guardado',
  2573. 'ARSE_USMO' => $user,
  2574. 'ARSE_FEMO' => $currentDate,
  2575. 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2576. ]);
  2577. } catch (\Throwable $th) {
  2578. DB::rollBack();
  2579. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el artículo seleccionado.', $th->getMessage(), 500);
  2580. }
  2581. if ($validateUpdateArSe === false) {
  2582. DB::rollBack();
  2583. return $this->responseController->makeResponse(true, 'No se pudo modificar el artículo seleccionado.', [], 500);
  2584. }
  2585. }
  2586. DB::commit();
  2587. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  2588. }
  2589. // FUNCIÓN INTERCAMBIO DE ARTICULOS ENTRE ALMACENES
  2590. public function getCurrentLocationArtitles($user, $line) {
  2591. try {
  2592. $arrStockArtitle = DB::table('S002V01TSTAR')
  2593. ->where('STAR_NULI', '=', $line)
  2594. ->where('STAR_ESTA', '=', 'Activo')
  2595. ->where('INST_NULI', '=', $line)
  2596. ->where('INST_ESTA', '=', 'Activo')
  2597. ->where('UBAR_ESTA', '=', 'Activo')
  2598. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  2599. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  2600. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  2601. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  2602. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  2603. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  2604. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  2605. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  2606. ->orderBy('ID_STOCK', 'DESC')
  2607. ->get([
  2608. 'STAR_IDST AS ID_STOCK',
  2609. 'INST_IDIS AS ID_INFORMACION_STOCK',
  2610. 'FAMI_COFA AS CODIGO_FAMILIA',
  2611. 'FAMI_NOFA AS NOMBRE_FAMILIA',
  2612. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  2613. 'SUBF_NOSU AS NOMBRE_SUBFAMILIA',
  2614. 'INST_ARTI AS ARTITULO',
  2615. 'INST_MODE AS MODELO',
  2616. 'INST_COMO AS CODIGO_MODELO',
  2617. 'INST_IMAG AS IMAGENES',
  2618. 'UBAR_COUB AS CODIGO',
  2619. DB::raw('CONCAT(ALMA_NOAL, " (", ALMA_COAL, ")") AS NOMBRE_ALMACEN'),
  2620. DB::raw('CONCAT(AREA_NOAR, " (", AREA_COAR, ")") AS NOMBRE_AREA'),
  2621. DB::raw('CONCAT(NIVE_NONI, " (", NIVE_CONI, ")") AS NOMBRE_NIVEL'),
  2622. DB::raw('CONCAT(ZONA_NOZO, " (", ZONA_COZO, ")") AS NOMBRE_ZONA'),
  2623. ]);
  2624. $arrStockArtitle = json_decode(json_encode($arrStockArtitle), true);
  2625. } catch (\Throwable $th) {
  2626. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  2627. }
  2628. foreach ($arrStockArtitle as $key => $stockArtitle) {
  2629. $imagesGallery = [];
  2630. $arrImages = json_decode($stockArtitle['IMAGENES']);
  2631. foreach($arrImages as $image) {
  2632. $imageCodeEnc = $this->encController->encrypt($image);
  2633. $response = $this->documentManagementController->privateGetPublicDocumentURL(
  2634. $imageCodeEnc,
  2635. $user,
  2636. $line
  2637. );
  2638. if($response['error']){
  2639. return $this->responseController->makeresponse(true, $response['msg'], [], 500);
  2640. }
  2641. $imagesGallery[] = $response['response']['public_uri'];
  2642. }
  2643. $stockArtitle['IMAGENES'] = $imagesGallery;
  2644. $arrStockArtitle[$key] = $stockArtitle;
  2645. }
  2646. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStockArtitle);
  2647. }
  2648. // FUNCIÓN PARA JOSÉ LUIS
  2649. public function getInfoStock($user, $line) {
  2650. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  2651. if ($arrResponseCheckUser['error']) {
  2652. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2653. }
  2654. try {
  2655. $arrStockArtitle = DB::table('S002V01TSTAR')
  2656. ->where('STAR_NULI', '=', $line)
  2657. ->where('STAR_ESTA', '=', 'Activo')
  2658. ->where('INST_NULI', '=', $line)
  2659. ->where('INST_ESTA', '=', 'Activo')
  2660. ->where('UBAR_ESTA', '=', 'Activo')
  2661. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  2662. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  2663. ->get([
  2664. 'STAR_IDST AS ID_STOCK',
  2665. 'INST_MODE AS MODELO',
  2666. 'INST_COMO AS CODIGO_MODELO',
  2667. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  2668. 'STAR_CONS AS CONSUMIBLE',
  2669. 'STAR_REPA AS REPARABLE',
  2670. ]);
  2671. } catch (\Throwable $th) {
  2672. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  2673. }
  2674. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStockArtitle);
  2675. }
  2676. public function moveToStock(Request $request, string $idStock ) {
  2677. $validator = Validator::make($request->all(), [
  2678. 'ALMACEN' => 'required|string',
  2679. 'AREA' => 'required|string',
  2680. 'NIVEL' => 'required|string',
  2681. 'ZONA' => 'required|string',
  2682. 'FAMILIA' => 'required|string',
  2683. 'SUBFAMILIA' => 'required|string',
  2684. 'LINEA' => 'required|string',
  2685. 'TIPO' => 'required|string',
  2686. 'MODELO' => 'required|string',
  2687. 'ID_EQUIPMENTO' => 'required|string',
  2688. 'STATUS' => 'required|string',
  2689. 'CODIGO_EQUIPAMIENTO' => 'required|string',
  2690. 'USUARIO' => 'required|string',
  2691. 'NUMERO_LINEA' => 'required|integer',
  2692. ]);
  2693. if($validator->fails()){
  2694. return $this->responseController->makeResponse(
  2695. true,
  2696. "Se encontraron uno o más errores.",
  2697. $this->responseController->makeErrors(
  2698. $validator->errors()->messages()
  2699. ),
  2700. 401
  2701. );
  2702. }
  2703. DB::beginTransaction();
  2704. $requestData = $request->all();
  2705. $arrInfoRegistro = array();
  2706. $arrToWorkflow = array();
  2707. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2708. if ($arrResponseCheckUser['error']) {
  2709. DB::rollBack();
  2710. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2711. }
  2712. $user = $arrResponseCheckUser['response'];
  2713. // Se obtiene el identificador del stock
  2714. $idStock = $this->encController->decrypt($idStock);
  2715. if ($idStock === false) {
  2716. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el stock.', [], 406);
  2717. }
  2718. // Se obtiene el valor del almacen
  2719. $requestData['ALMACEN'] = $this->encController->decrypt($requestData['ALMACEN']);
  2720. if ($requestData['ALMACEN'] === false) {
  2721. DB::rollBack();
  2722. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del almacen.', [], 406);
  2723. }
  2724. // Se obtiene el valor del area
  2725. $requestData['AREA'] = $this->encController->decrypt($requestData['AREA']);
  2726. if ($requestData['AREA'] === false) {
  2727. DB::rollBack();
  2728. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del área.', [], 406);
  2729. }
  2730. // Se obtiene el valor del nivel
  2731. $requestData['NIVEL'] = $this->encController->decrypt($requestData['NIVEL']);
  2732. if ($requestData['NIVEL'] === false) {
  2733. DB::rollBack();
  2734. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del nivel.', [], 406);
  2735. }
  2736. // Se obtiene el valor de la zona
  2737. $requestData['ZONA'] = $this->encController->decrypt($requestData['ZONA']);
  2738. if ($requestData['ZONA'] === false) {
  2739. DB::rollBack();
  2740. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID de la zona.', [], 406);
  2741. }
  2742. // Se verifica el código del artículo que sea válido
  2743. $codeVerified = $this->verifyPreCode($requestData);
  2744. if ($codeVerified !== $requestData['CODIGO_EQUIPAMIENTO']) {
  2745. DB::rollBack();
  2746. return $this->responseController->makeResponse(true, 'El código generado no coincide con el código verificado a partir de la información del formulario.', [], 406);
  2747. }
  2748. // Se verifica que el código no sea el mismo que el anterior
  2749. if ($requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'] === $requestData['CODIGO_EQUIPAMIENTO']) {
  2750. DB::rollBack();
  2751. return $this->responseController->makeResponse(true, 'Los códigos no deben ser los mismos.', [], 406);
  2752. }
  2753. // Se verifica que la información del almacen exista
  2754. try {
  2755. $validateWarehouse = DB::table('S002V01TALMA')
  2756. ->where('ALMA_COAL', '=', $requestData['ALMACEN'])
  2757. ->where('ALMA_NULI', '=', $requestData['NUMERO_LINEA'])
  2758. ->exists();
  2759. } catch (\Throwable $th) {
  2760. DB::rollBack();
  2761. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el almacen existe.', $th->getMessage(), 500);
  2762. }
  2763. if ($validateWarehouse === false) {
  2764. DB::rollBack();
  2765. return $this->responseController->makeResponse(true, 'El almacen no existe.', [], 500);
  2766. }
  2767. // Se verifica que la informacion del área exista
  2768. try {
  2769. $validateArea = DB::table('S002V01TAREA')
  2770. ->where('AREA_COAL', '=', $requestData['ALMACEN'])
  2771. ->where('AREA_COAR', '=', $requestData['AREA'])
  2772. ->where('AREA_NULI', '=', $requestData['NUMERO_LINEA'])
  2773. ->exists();
  2774. } catch (\Throwable $th) {
  2775. DB::rollBack();
  2776. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el área existe.', $th->getMessage(), 500);
  2777. }
  2778. if ($validateArea === false) {
  2779. DB::rollBack();
  2780. return $this->responseController->makeResponse(true, 'El área no existe.', [], 500);
  2781. }
  2782. // Se verifica que la información del nivel exista
  2783. try {
  2784. $validateLevel = DB::table('S002V01TNIVE')
  2785. ->where('NIVE_COAL', '=', $requestData['ALMACEN'])
  2786. ->where('NIVE_COAR', '=', $requestData['AREA'])
  2787. ->where('NIVE_CONI', '=', $requestData['NIVEL'])
  2788. ->where('NIVE_NULI', '=', $requestData['NUMERO_LINEA'])
  2789. ->exists();
  2790. } catch (\Throwable $th) {
  2791. DB::rollBack();
  2792. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si el nivel existe.', $th->getMessage(), 500);
  2793. }
  2794. if ($validateLevel === false) {
  2795. DB::rollBack();
  2796. return $this->responseController->makeResponse(true, 'El nivel no existe.', [], 500);
  2797. }
  2798. // Se verifica que la información de la zona
  2799. try {
  2800. $validateZone = DB::table('S002V01TZONA')
  2801. ->where('ZONA_COAL', '=', $requestData['ALMACEN'])
  2802. ->where('ZONA_COAR', '=', $requestData['AREA'])
  2803. ->where('ZONA_CONI', '=', $requestData['NIVEL'])
  2804. ->where('ZONA_COZO', '=', $requestData['ZONA'])
  2805. ->where('ZONA_NULI', '=', $requestData['NUMERO_LINEA'])
  2806. ->exists();
  2807. } catch (\Throwable $th) {
  2808. DB::rollBack();
  2809. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si la zona existe.', $th->getMessage(), 500);
  2810. }
  2811. if ($validateZone === false) {
  2812. return $this->responseController->makeResponse(true, 'La zona no existe.', [], 500);
  2813. }
  2814. $arrToWorkflow[] = [
  2815. 'ANTERIOR_CODIGO_EQUIPAMIENTO' => $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'],
  2816. 'NUEVO_CODIGO_EQUIPAMIENTO' => $requestData['CODIGO_EQUIPAMIENTO'],
  2817. 'ALMACEN' => $requestData['ALMACEN'],
  2818. 'AREA' => $requestData['AREA'],
  2819. 'NIVEL' => $requestData['NIVEL'],
  2820. 'ZONA' => $requestData['ZONA'],
  2821. ];
  2822. $strToWorkflow = json_encode($arrToWorkflow);
  2823. $encToWorkflow = $this->encController->encrypt($strToWorkflow);
  2824. $now = $this->functionsController->now();
  2825. $currentDate = $now->toDateTimeString();
  2826. try {
  2827. $validateUpdate = DB::table('S002V01TUBAR')
  2828. ->where('UBAR_IDST', '=', $idStock)
  2829. ->where('UBAR_COUB', '=', $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'])
  2830. ->where('UBAR_ESTA', '=', 'Activo')
  2831. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  2832. ->update([
  2833. 'UBAR_ESTA' => 'Obsoleto',
  2834. 'UBAR_USMO' => $user,
  2835. 'UBAR_FEMO' => $currentDate,
  2836. 'UBAR_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  2837. ]);
  2838. } catch (\Throwable $th) {
  2839. DB::rollBack();
  2840. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el estado actual del código del stock.', $th->getMessage(), 406);
  2841. }
  2842. if (!$validateUpdate) {
  2843. DB::rollBack();
  2844. return $this->responseController->makeResponse(true, 'No se pudo modificar el estado actual del código del stock.', [], 406);
  2845. }
  2846. try {
  2847. $idUbication = DB::table('S002V01TUBAR')->insertGetId([
  2848. 'UBAR_NULI' => $requestData['NUMERO_LINEA'],
  2849. 'UBAR_COAL' => $requestData['ALMACEN'],
  2850. 'UBAR_COAR' => $requestData['AREA'],
  2851. 'UBAR_CONI' => $requestData['NIVEL'],
  2852. 'UBAR_COZO' => $requestData['ZONA'],
  2853. 'UBAR_IDST' => $idStock,
  2854. 'UBAR_COUB' => $requestData['CODIGO_EQUIPAMIENTO'],
  2855. 'UBAR_ESTA' => 'Workflow',
  2856. 'UBAR_USRE' => $user,
  2857. 'UBAR_FERE' => $currentDate,
  2858. 'UBAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2859. ]);
  2860. } catch (\Throwable $th) {
  2861. DB::rollBack();
  2862. return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar la nueva ubicación del artículo.', $th->getMessage(), 406);
  2863. }
  2864. if (!$idUbication) {
  2865. DB::rollBack();
  2866. return $this->responseController->makeResponse(true, 'No se pudo insertar la nueva ubicación del artículo.', [], 406);
  2867. }
  2868. $arrInfoRegistro['S002V01TUBAR'][] = [
  2869. 'UBAR_IDUB' => $idUbication,
  2870. 'UBAR_IDST' => $idStock,
  2871. 'UBAR_COUB' => $requestData['CODIGO_EQUIPAMIENTO'],
  2872. ];
  2873. try {
  2874. $equipment = (array) DB::table('S002V01TEQUI')
  2875. ->where('EQUI_COEQ', '=', $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'])
  2876. ->where('EQUI_NULI', '=', $requestData['NUMERO_LINEA'])
  2877. ->first();
  2878. } catch (\Throwable $th) {
  2879. DB::rollBack();
  2880. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del artículo.', $th->getMessage(), 406);
  2881. }
  2882. if (is_null($equipment) || empty($equipment)) {
  2883. DB::rollBack();
  2884. return $this->responseController->makeResponse(true, 'No se se pudo obtener la información del equipamiento.', [], 406);
  2885. }
  2886. $strHistorial = $equipment['EQUI_HICO'];
  2887. $arrHistorial = json_decode($strHistorial, true);
  2888. $arrHistorial[] = $requestData['CODIGO_EQUIPAMIENTO'];
  2889. try {
  2890. $validateUpdate = DB::table('S002V01TEQUI')
  2891. ->where('EQUI_COEQ', '=', $requestData['ANTERIOR_CODIGO_EQUIPAMIENTO'])
  2892. ->where('EQUI_NULI', '=', $requestData['NUMERO_LINEA'])
  2893. ->update([
  2894. 'EQUI_COEQ' => $requestData['CODIGO_EQUIPAMIENTO'],
  2895. 'EQUI_ALMA' => $requestData['ALMACEN'],
  2896. 'EQUI_AREA' => $requestData['AREA'],
  2897. 'EQUI_NIVE' => $requestData['NIVEL'],
  2898. 'EQUI_ZONA' => $requestData['ZONA'],
  2899. 'EQUI_HICO' => $arrHistorial,
  2900. 'EQUI_USMO' => $user,
  2901. 'EQUI_FEMO' => $currentDate,
  2902. 'EQUI_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2903. ]);
  2904. } catch (\Throwable $th) {
  2905. DB::rollBack();
  2906. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el equipamiento.', $th->getMessage(), 406);
  2907. }
  2908. if (!$validateUpdate) {
  2909. DB::rollBack();
  2910. return $this->responseController->makeResponse(true, 'No se pudo modificar el equipamiento.', [], 406);
  2911. }
  2912. try {
  2913. $existsEquipmentWorkflow = DB::table('S002V01TEQWO')
  2914. ->where('EQWO_COEQ', '=', $requestData['CODIGO_EQUIPAMIENTO'])
  2915. ->where('EQWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2916. ->where('EQWO_ESTA', '=', 'En Workflow')
  2917. ->exists();
  2918. } catch (\Throwable $th) {
  2919. DB::rollBack();
  2920. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el estado del equipamiento.', $th->getMessage(), 406);
  2921. }
  2922. if ( !$existsEquipmentWorkflow ) {
  2923. try {
  2924. $idEquipmentWorkflow = DB::table('S002V01TEQWO')->insertGetId([
  2925. 'EQWO_NULI' => $requestData['NUMERO_LINEA'],
  2926. 'EQWO_COEQ' => $requestData['CODIGO_EQUIPAMIENTO'],
  2927. 'EQWO_ESTA' => 'En Workflow',
  2928. 'EQWO_USRE' => $user,
  2929. 'EQWO_FERE' => $currentDate,
  2930. 'EQWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2931. ]);
  2932. } catch (\Throwable $th) {
  2933. DB::rollBack();
  2934. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar el equipamiento en el workflow.', $th->getMessage(), 406);
  2935. }
  2936. if (!$idEquipmentWorkflow) {
  2937. DB::rollBack();
  2938. return $this->responseController->makeResponse(true, 'No se pudo registrar el equipamiento en el workflow.', [], 406);
  2939. }
  2940. $arrInfoRegistro['S002V01TEQWO'][] = [
  2941. 'EQWO_IDEQW' => $idEquipmentWorkflow,
  2942. 'EQWO_COEQ' => $requestData['CODIGO_EQUIPAMIENTO'],
  2943. ];
  2944. } else {
  2945. DB::rollBack();
  2946. return $this->responseController->makeResponse(true, 'No se pudo hacer el intercambio si el equipamiento se encuentra en proceso de validación.', [], 406);
  2947. }
  2948. $strInfoRegistro = json_encode($arrInfoRegistro);
  2949. $encInfoRegistro = $this->encController->encrypt($strInfoRegistro);
  2950. $arrResponseRequestWorkflow = $this->processManagementController->registerRequestWorkflow(5, $encToWorkflow, $encInfoRegistro, $user, $requestData['NUMERO_LINEA']);
  2951. if ($arrResponseRequestWorkflow['error']) {
  2952. DB::rollBack();
  2953. return $this->responseController->makeResponse(true, $arrResponseRequestWorkflow['msg'], $arrResponseRequestWorkflow['response'], 500);
  2954. }
  2955. DB::commit();
  2956. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  2957. }
  2958. private function verifyPreCode(array $parameters) {
  2959. $siteTag = '';
  2960. $site = ['LINEA', 'AREA', 'NIVEL'];
  2961. foreach($site as $ctrl){
  2962. $val = $parameters[$ctrl];
  2963. if($ctrl == 'LINE'){
  2964. $val = intval($val) < 10 ? "0$val" : "$val";
  2965. }
  2966. $siteTag .= $val.'.';
  2967. }
  2968. $siteTag = substr($siteTag, 0, -1);
  2969. $areaTag = '';
  2970. $area = ['ALMACEN', 'ZONA'];
  2971. foreach($area as $ctrl){
  2972. $val = $parameters[$ctrl];
  2973. $areaTag .= $val.'.';
  2974. }
  2975. $areaTag = substr($areaTag, 0, -1);
  2976. $technicalSpecificationTag = '';
  2977. $technicalSpecification = ['FAMILIA', 'SUBFAMILIA', 'STATUS'];
  2978. foreach($technicalSpecification as $ctrl){
  2979. $val = $parameters[$ctrl];
  2980. $technicalSpecificationTag .= $val.'.';
  2981. }
  2982. $technicalSpecificationTag = substr($technicalSpecificationTag, 0, -1);
  2983. $equipmentIdentifierTag = '';
  2984. $equipmentIdentifier = ['TIPO', 'MODELO', 'ID_EQUIPMENTO'];
  2985. foreach($equipmentIdentifier as $ctrl){
  2986. $val = $parameters[$ctrl];
  2987. if($ctrl == 'MODELO'){
  2988. $val = $this->processElement($val, 'model');
  2989. }else if($ctrl == 'TIPO'){
  2990. $val = $this->processElement($val, 'element');
  2991. }
  2992. $equipmentIdentifierTag .= $val.'-';
  2993. }
  2994. $equipmentIdentifierTag = substr($equipmentIdentifierTag, 0, -1);
  2995. $code = $siteTag.'-'.$areaTag.'_'.$technicalSpecificationTag.'.'.$equipmentIdentifierTag;
  2996. return $code;
  2997. }
  2998. private function processElement(string $value, string $type) : string {
  2999. $value = strtoupper($value);
  3000. $validVal0 = $this->functionsController->unaccent($value);
  3001. $CONNECTORS = ['DE', 'PARA', 'Y', 'O', 'DEL', 'EL', 'LA', 'LOS', 'POR', 'EN'];
  3002. $valueArr1 = explode(' ', $validVal0);
  3003. $validVal1 = [];
  3004. foreach($valueArr1 as $word){
  3005. if(!in_array($word, $CONNECTORS)){
  3006. $validVal1[] = $word;
  3007. }
  3008. }
  3009. $validLength = count($validVal1);
  3010. $validVal2 = "";
  3011. if($validLength < 1){
  3012. return "ERROR";
  3013. }else if($validLength == 1){
  3014. if(strlen($validVal1[0]) < 5){
  3015. $validVal2 = $validVal1[0];
  3016. for($i = strlen($validVal1[0]); $i < 5; $i++){
  3017. if($type == 'model'){
  3018. $validVal2 = "X$validVal2";
  3019. }else{
  3020. $validVal2 = $validVal2 . "X";
  3021. }
  3022. }
  3023. }else{
  3024. $validVal2 = substr($validVal1[0], 0, 5);
  3025. }
  3026. }else if($validLength == 2){
  3027. $word1 = "";
  3028. if(strlen($validVal1[0]) < 2){
  3029. if($type == 'model'){
  3030. $word1 = "X$validVal1[0]";
  3031. }else{
  3032. $word1 = $validVal1[0] . "X";
  3033. }
  3034. }else{
  3035. $word1 = substr($validVal1[0], 0, 2);
  3036. }
  3037. $word2 = "";
  3038. if(strlen($validVal1[1]) < 3){
  3039. $word2 = $validVal1[1];
  3040. for($i = strlen($validVal1[1]); $i < 3; $i++){
  3041. if($type == 'model'){
  3042. $word2 = "X$word2";
  3043. }else{
  3044. $word2 = $word2 . "X";
  3045. }
  3046. }
  3047. }else{
  3048. $word2 = substr($validVal1[1], 0, 3);
  3049. }
  3050. $validVal2 = $word1 . $word2;
  3051. }else if($validLength == 3){
  3052. $word1 = "";
  3053. if(strlen($validVal1[0]) < 2){
  3054. if($type == 'model'){
  3055. $word1 = "X$validVal1[0]";
  3056. }else{
  3057. $word1 = $validVal1[0] . "X";
  3058. }
  3059. }else{
  3060. $word1 = substr($validVal1[0], 0, 2);
  3061. }
  3062. $word2 = substr($validVal1[1], 0, 1);
  3063. $word3 = "";
  3064. if(strlen($validVal1[2]) < 2){
  3065. if($type == 'model'){
  3066. $word3 = "X$validVal1[2]";
  3067. }else{
  3068. $word3 = $validVal1[2] . "X";
  3069. }
  3070. }else{
  3071. $word3 = substr($validVal1[2], 0, 2);
  3072. }
  3073. $validVal2 = $word1 . $word2 . $word3;
  3074. }else if($validLength == 4){
  3075. $word1 = "";
  3076. if(strlen($validVal1[0]) < 2){
  3077. if($type == 'model'){
  3078. $word1 = "X$validVal1[0]";
  3079. }else{
  3080. $word1 = $validVal1[0] . "X";
  3081. }
  3082. }else{
  3083. $word1 = substr($validVal1[0], 0, 2);
  3084. }
  3085. $word2 = substr($validVal1[1], 0, 1);
  3086. $word3 = substr($validVal1[2], 0, 1);
  3087. $word4 = substr($validVal1[3], 0, 1);
  3088. $validVal2 = $word1 . $word2 . $word3 . $word4;
  3089. }else if($validLength >= 5){
  3090. $word1 = substr($validVal1[0], 0, 1);
  3091. $word2 = substr($validVal1[1], 0, 1);
  3092. $word3 = substr($validVal1[2], 0, 1);
  3093. $word4 = substr($validVal1[3], 0, 1);
  3094. $word5 = substr($validVal1[4], 0, 1);
  3095. $validVal2 = $word1 . $word2 . $word3 . $word4 . $word5;
  3096. }else{
  3097. return "ERROR";
  3098. }
  3099. return $validVal2;
  3100. }
  3101. public function getLocationStock($user, $line) {
  3102. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3103. if ($arrResponseCheckUser['error']) {
  3104. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3105. }
  3106. try {
  3107. $arrLocation = DB::table('S002V01TUBAR')
  3108. ->where('UBAR_NULI', '=', $line)
  3109. ->where('UBAR_ESTA', '=', 'Activo')
  3110. ->whereOr('UBAR_ESTA', '=', 'Otro')
  3111. ->get([
  3112. DB::raw("CONCAT('#', UBAR_IDST) AS ID_STOCK"),
  3113. DB::raw("CONCAT('#', UBAR_IDUB) AS ID_UBICACION "),
  3114. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3115. 'UBAR_ESTA AS ESTADO',
  3116. 'UBAR_USRE AS USUARIO_REGISTRA',
  3117. 'UBAR_FERE AS FECHA_REGISTRA',
  3118. 'UBAR_USMO AS USUARIO_MODIFICA',
  3119. 'UBAR_FEMO AS FECHA_MODIFICA',
  3120. ]);
  3121. $arrLocation = json_decode(json_encode($arrLocation), true);
  3122. } catch (\Throwable $th) {
  3123. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el emplazamiento del stock.', $th->getMessage(), 500);
  3124. }
  3125. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrLocation, $line);
  3126. if ($responseCheckLatestUpdate['error']) {
  3127. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  3128. }
  3129. $arrLocation = $responseCheckLatestUpdate['response'];
  3130. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLocation);
  3131. }
  3132. public function getLocationByStock($idStock, $user, $line) {
  3133. $idStock = $this->encController->decrypt($idStock);
  3134. if (is_null($idStock)) {
  3135. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401);
  3136. }
  3137. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3138. if ($arrResponseCheckUser['error']) {
  3139. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3140. }
  3141. try {
  3142. $arrLocation = DB::table('S002V01TUBAR')
  3143. ->where('UBAR_NULI', '=', $line)
  3144. ->where('UBAR_IDST', '=', $idStock)
  3145. ->orderBy('UBAR_IDUB', 'DESC')
  3146. ->get([
  3147. DB::raw("CONCAT('#', UBAR_IDUB) AS ID_UBICACION "),
  3148. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3149. 'UBAR_ESTA AS ESTADO',
  3150. 'UBAR_USRE AS USUARIO_REGISTRA',
  3151. 'UBAR_FERE AS FECHA_REGISTRA',
  3152. 'UBAR_USMO AS USUARIO_MODIFICA',
  3153. 'UBAR_FEMO AS FECHA_MODIFICA',
  3154. ]);
  3155. $arrLocation = json_decode(json_encode($arrLocation), true);
  3156. } catch (\Throwable $th) {
  3157. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el emplazamiento del stock.', $th->getMessage(), 500);
  3158. }
  3159. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrLocation, $line);
  3160. if ($responseCheckLatestUpdate['error']) {
  3161. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  3162. }
  3163. $arrLocation = $responseCheckLatestUpdate['response'];
  3164. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLocation);
  3165. }
  3166. public function getDetaisLocation($idStock, $idLocation, $user, $line) {
  3167. $idStock = $this->encController->decrypt($idStock);
  3168. if (is_null($idStock)) {
  3169. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401);
  3170. }
  3171. $idLocation = $this->encController->decrypt($idLocation);
  3172. if (is_null($idLocation)) {
  3173. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la ubicación.', [], 401);
  3174. }
  3175. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3176. if ($arrResponseCheckUser['error']) {
  3177. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3178. }
  3179. try {
  3180. $arrLocation = (array) DB::table('S002V01TUBAR')
  3181. ->where('UBAR_NULI', '=', $line)
  3182. ->where('UBAR_IDST', '=', $idStock)
  3183. ->where('UBAR_IDUB', '=', $idLocation)
  3184. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  3185. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  3186. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  3187. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  3188. ->first([
  3189. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3190. DB::raw('CONCAT(ALMA_NOAL, " (", ALMA_COAL, ")") AS ALMACEN'),
  3191. DB::raw('CONCAT(AREA_NOAR, " (", AREA_COAL, ")") AS AREA'),
  3192. DB::raw('CONCAT(NIVE_NONI, " (", NIVE_CONI, ")") AS NIVEL'),
  3193. DB::raw('CONCAT(ZONA_NOZO, " (", ZONA_COZO, ")") AS ZONA'),
  3194. 'UBAR_ESTA AS ESTADO',
  3195. ]);
  3196. } catch (\Throwable $th) {
  3197. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el emplazamiento del stock.', $th->getMessage(), 500);
  3198. }
  3199. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrLocation);
  3200. }
  3201. public function search(Request $request) {
  3202. $validator = Validator::make($request->all(), [
  3203. 'ID_STOCK' => 'nullable|string',
  3204. 'CODIGO_EQUIPAMIENTO' => 'nullable|string',
  3205. 'ID_UBICACION' => 'nullable|string',
  3206. 'FAMILIA' => 'nullable|string',
  3207. 'SUBFAMILIA' => 'nullable|string',
  3208. 'MODELO' => 'nullable|string',
  3209. 'CODIGO_MODELO' => 'nullable|string',
  3210. 'ALMACEN' => 'nullable|string',
  3211. 'AREA' => 'nullable|string',
  3212. 'NIVEL' => 'nullable|string',
  3213. 'ZONA' => 'nullable|string',
  3214. 'TIPO_ADQUISICION' => 'nullable|string',
  3215. 'NUMERO_PROVEEDOR' => 'nullable|string',
  3216. 'CODIGO_BARRAS' => 'nullable|string',
  3217. 'FECHA_VENCIMIENTO' => 'nullable|string',
  3218. 'TASA_ROTACION' => 'nullable|string',
  3219. 'STOCK_MINIMO' => 'nullable|string',
  3220. 'STOCK_MAXIMO' => 'nullable|string',
  3221. 'ESTADO' => 'nullable|string',
  3222. 'CONSUMIBLE' => 'nullable|string',
  3223. 'REPARABLE' => 'nullable|string',
  3224. 'USUARIO' => 'nullable|string',
  3225. 'NUMERO_LINEA' => 'nullable|string',
  3226. ]);
  3227. if ($validator->fails()) {
  3228. return $this->responseController->makeResponse(
  3229. true,
  3230. "Se encontraron uno o más errores.",
  3231. $this->responseController->makeErrors($validator->errors()->messages()),
  3232. 401
  3233. );
  3234. }
  3235. DB::beginTransaction();
  3236. $requestData = $request->all();
  3237. $arrClausules = [
  3238. 'FAMILIA' => 'INST_COFA',
  3239. 'SUBFAMILIA' => 'INST_COSU',
  3240. 'MODELO' => 'INST_MODE',
  3241. 'CODIGO_MODELO' => 'INST_COMO',
  3242. 'STOCK_MINIMO' => 'INST_STMI',
  3243. 'STOCK_MAXIMO' => 'INST_STMA',
  3244. 'ID_STOCK' => 'STAR_IDST',
  3245. 'CODIGO_BARRAS' => 'STAR_COBA',
  3246. 'FECHA_VENCIMIENTO' => 'STAR_FEVE',
  3247. 'NUMERO_PROVEEDOR' => 'STAR_NUPR',
  3248. 'TIPO_ADQUISICION' => 'STAR_TIAD',
  3249. 'CONSUMIBLE' => 'STAR_CONS',
  3250. 'REPARABLE' => 'STAR_REPA',
  3251. 'ESTADO' => 'STAR_ESTA',
  3252. 'ID_UBICACION' => 'UBAR_IDUB',
  3253. 'ALMACEN' => 'UBAR_COAL',
  3254. 'AREA' => 'UBAR_COAR',
  3255. 'NIVEL' => 'UBAR_CONI',
  3256. 'ZONA' => 'UBAR_COZO',
  3257. 'CODIGO_EQUIPAMIENTO' => 'UBAR_COUB',
  3258. ];
  3259. $arrWhere = array();
  3260. foreach ($requestData as $key => $value) {
  3261. if (!is_null($value) && $key !== 'USUARIO' && $key !== 'NUMERO_LINEA') {
  3262. $column = $arrClausules[$key];
  3263. $arrWhere[$column] = $value;
  3264. }
  3265. }
  3266. if (empty($arrWhere)) {
  3267. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", []);
  3268. }
  3269. try {
  3270. $arrInfo = DB::table('S002V01TSTAR')
  3271. ->where($arrWhere)
  3272. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  3273. ->where('INST_NULI', '=', $requestData['NUMERO_LINEA'])
  3274. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  3275. ->where('INST_ESTA', '=', 'Activo')
  3276. ->where('UBAR_ESTA', '=', 'Activo')
  3277. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  3278. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  3279. ->get([
  3280. 'STAR_IDST AS ID_STOCK',
  3281. 'INST_MODE AS MODELO',
  3282. 'INST_COMO AS CODIGO_MODELO',
  3283. 'INST_IMAG AS IMAGENES',
  3284. 'UBAR_COUB AS CODIGO',
  3285. ]);
  3286. $arrInfo = json_decode(json_encode($arrInfo), true);
  3287. } catch (\Throwable $th) {
  3288. return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500);
  3289. }
  3290. foreach ($arrInfo as $key => $info) {
  3291. $arrImages = json_decode($info['IMAGENES']);
  3292. $arrUrlImage = array();
  3293. foreach ($arrImages as $keyImages => $images) {
  3294. $images = $this->encController->encrypt($images);
  3295. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  3296. if ($responseDocument['error']) {
  3297. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  3298. }
  3299. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  3300. }
  3301. $arrInfo[$key]['IMAGENES'] = $arrUrlImage;
  3302. }
  3303. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInfo);
  3304. }
  3305. public function getInfoByStock($idStock, $user, $line) {
  3306. $idStock = $this->encController->decrypt($idStock);
  3307. if (is_null($idStock)) {
  3308. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401);
  3309. }
  3310. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3311. if ($arrResponseCheckUser['error']) {
  3312. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3313. }
  3314. try {
  3315. $arrInfo = (array) DB::table('S002V01TSTAR')
  3316. ->where('STAR_IDST', '=', $idStock)
  3317. ->where('STAR_NULI', '=', $line)
  3318. ->where('INST_NULI', '=', $line)
  3319. ->where('UBAR_NULI', '=', $line)
  3320. ->where('INST_ESTA', '=', 'Activo')
  3321. ->where('UBAR_ESTA', '=', 'Activo')
  3322. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  3323. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  3324. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  3325. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  3326. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  3327. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  3328. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  3329. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  3330. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  3331. ->first([
  3332. DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'),
  3333. DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'),
  3334. 'INST_MODE AS MODELO',
  3335. 'INST_COMO AS CODIGO_MODELO',
  3336. 'INST_STMI AS STOCK_MINIMO',
  3337. 'INST_STMA AS STOCK_MAXIMO',
  3338. 'STAR_IDST AS ID_STOCK',
  3339. 'STAR_COBA AS CODIGO_BARRAS',
  3340. 'STAR_FEVE AS FECHA_VENCIMIENTO',
  3341. DB::raw('CONCAT(PROV_NOCO, " (", PROV_NUPR, ")") AS NUMERO_PROVEEDOR'),
  3342. 'STAR_TIAD AS TIPO_ADQUISICION',
  3343. 'STAR_CONS AS CONSUMIBLE',
  3344. 'STAR_REPA AS REPARABLE',
  3345. 'STAR_ESTA AS ESTADO',
  3346. 'UBAR_IDUB AS ID_UBICACION',
  3347. DB::raw('CONCAT(ALMA_NOAL, " (", ALMA_COAL, ")") AS ALMACEN'),
  3348. DB::raw('CONCAT(AREA_NOAR, " (", AREA_COAR, ")") AS AREA'),
  3349. DB::raw('CONCAT(NIVE_NONI, " (", NIVE_CONI, ")") AS NIVEL'),
  3350. DB::raw('CONCAT(ZONA_NOZO, " (", ZONA_COZO, ")") AS ZONA'),
  3351. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3352. ]);
  3353. $arrInfo = json_decode(json_encode($arrInfo), true);
  3354. } catch (\Throwable $th) {
  3355. return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500);
  3356. }
  3357. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInfo);
  3358. }
  3359. public function getMaxMinStock($user, $line) {
  3360. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3361. if ($arrResponseCheckUser['error']) {
  3362. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3363. }
  3364. try {
  3365. $arrInfoStock = DB::table('S002V01TINST')
  3366. ->where('INST_NULI', '=', $line)
  3367. ->where('INST_ESTA', '=', 'Activo')
  3368. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  3369. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  3370. ->get([
  3371. 'INST_IDIS AS ID_INFORMACION_STOCK',
  3372. DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'),
  3373. DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'),
  3374. 'INST_MODE AS MODELO',
  3375. 'INST_COMO AS CODIGO_MODELO',
  3376. 'INST_STMI AS STOCK_MINIMO',
  3377. 'INST_STMA AS STOCK_MAXIMO',
  3378. 'INST_IMAG AS IMAGENES',
  3379. ]);
  3380. $arrInfoStock = json_decode(json_encode($arrInfoStock), true);
  3381. } catch (\Throwable $th) {
  3382. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  3383. }
  3384. foreach ($arrInfoStock as $key => $info) {
  3385. $arrImages = json_decode($info['IMAGENES']);
  3386. $arrUrlImage = array();
  3387. foreach ($arrImages as $keyImages => $images) {
  3388. $images = $this->encController->encrypt($images);
  3389. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  3390. if ($responseDocument['error']) {
  3391. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  3392. }
  3393. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  3394. }
  3395. $arrInfoStock[$key]['IMAGENES'] = $arrUrlImage;
  3396. try {
  3397. $countStock = DB::table('S002V01TSTAR')
  3398. ->where('STAR_NULI', '=', $line)
  3399. ->where('STAR_IDIS', '=', $info['ID_INFORMACION_STOCK'])
  3400. ->where('STAR_ESTA', '=', 'Activo')
  3401. ->count();
  3402. } catch (\Throwable $th) {
  3403. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  3404. }
  3405. $arrInfoStock[$key]['CANTIDAD_ACTUAL'] = $countStock;
  3406. $stateStock = '';
  3407. if ($countStock < $info['STOCK_MINIMO'] && !is_null($info['STOCK_MINIMO'])) {
  3408. $stateStock = 'Menor al Stock Requerido';
  3409. } else if ($countStock > $info['STOCK_MAXIMO'] && !is_null($info['STOCK_MAXIMO'])) {
  3410. $stateStock = 'Exedente al Stock Requerido';
  3411. } else if (is_null($info['STOCK_MINIMO']) && is_null($info['STOCK_MAXIMO'])) {
  3412. $stateStock = 'No aplica';
  3413. } else {
  3414. $stateStock = 'Stock Normal';
  3415. }
  3416. if (is_null($info['STOCK_MINIMO'])) {
  3417. $arrInfoStock[$key]['STOCK_MINIMO'] = 'Sin Definir';
  3418. }
  3419. if (is_null($info['STOCK_MAXIMO'])) {
  3420. $arrInfoStock[$key]['STOCK_MAXIMO'] = 'Sin Definir';
  3421. }
  3422. $arrInfoStock[$key]['ESTADO'] = $stateStock;
  3423. }
  3424. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrInfoStock);
  3425. }
  3426. public function updateStockMaxMin(Request $request, $idInfo) {
  3427. $validator = Validator::make($request->all(), [
  3428. 'STOCK_MINIMO' => 'required|integer',
  3429. 'STOCK_MAXIMO' => 'required|integer',
  3430. 'USUARIO' => 'required|string',
  3431. 'NUMERO_LINEA' => 'required|integer',
  3432. ]);
  3433. if($validator->fails()){
  3434. return $this->responseController->makeResponse(
  3435. true,
  3436. "Se encontraron uno o más errores.",
  3437. $this->responseController->makeErrors(
  3438. $validator->errors()->messages()
  3439. ),
  3440. 401
  3441. );
  3442. }
  3443. DB::beginTransaction();
  3444. $requestData = $request->all();
  3445. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  3446. if ($arrResponseCheckUser['error']) {
  3447. DB::rollBack();
  3448. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3449. }
  3450. $user = $arrResponseCheckUser['response'];
  3451. $idInfo = $this->encController->decrypt($idInfo);
  3452. if (is_null($idInfo)) {
  3453. DB::rollBack();
  3454. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  3455. }
  3456. try {
  3457. $validateExist = DB::table('S002V01TINST')
  3458. ->where('INST_NULI', '=', $requestData['NUMERO_LINEA'])
  3459. ->where('INST_IDIS', '=', $idInfo)
  3460. ->where('INST_ESTA', '=', 'Activo')
  3461. ->exists();
  3462. } catch (\Throwable $th) {
  3463. DB::rollBack();
  3464. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si existe el artículo.', $th->getMessage(), 500);
  3465. }
  3466. if (!$validateExist) {
  3467. DB::rollBack();
  3468. return $this->responseController->makeResponse(true, 'El artículo no existe.', [], 401);
  3469. }
  3470. try {
  3471. $stockMin = intval($requestData['STOCK_MINIMO']);
  3472. } catch (\Throwable $th) {
  3473. DB::rollBack();
  3474. return $this->responseController->makeResponse(true, 'Ocurrió un error con el formato del stock mínimo.', $th->getMessage(), 500);
  3475. }
  3476. try {
  3477. $stockMax = intval($requestData['STOCK_MAXIMO']);
  3478. } catch (\Throwable $th) {
  3479. DB::rollBack();
  3480. return $this->responseController->makeResponse(true, 'Ocurrió un error con el formato del stock mínimo.', $th->getMessage(), 500);
  3481. }
  3482. if ($stockMin < 0) {
  3483. DB::rollBack();
  3484. return $this->responseController->makeResponse(true, 'La cantidad del stock mínimo no debe ser menor a 0.', [], 401);
  3485. }
  3486. if ($stockMax < 0) {
  3487. DB::rollBack();
  3488. return $this->responseController->makeResponse(true, 'La cantidad del stock máximo no debe ser menos a 0.', [], 401);
  3489. }
  3490. if ($stockMin > $stockMax) {
  3491. DB::rollBack();
  3492. return $this->responseController->makeResponse(true, 'La cantidad del stock mínimo no debe ser mayos al stock máximo.', [], 401);
  3493. }
  3494. $now = $this->functionsController->now();
  3495. $currentDate = $now->toDateTimeString();
  3496. try {
  3497. $validateUpdate = DB::table('S002V01TINST')
  3498. ->where('INST_NULI', '=', $requestData['NUMERO_LINEA'])
  3499. ->where('INST_IDIS', '=', $idInfo)
  3500. ->where('INST_ESTA', '=', 'Activo')
  3501. ->update([
  3502. 'INST_STMI' => $stockMin,
  3503. 'INST_STMA' => $stockMax,
  3504. 'INST_USMO' => $user,
  3505. 'INST_FEMO' => $currentDate,
  3506. 'INST_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  3507. ]);
  3508. } catch (\Throwable $th) {
  3509. DB::rollBack();
  3510. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el stock mínimo y máximo.', $th->getMessage(), 500);
  3511. }
  3512. if (!$validateUpdate) {
  3513. DB::rollBack();
  3514. return $this->responseController->makeResponse(true, 'No se pudo modificar el stock mínimo y máximo.', [], 401);
  3515. }
  3516. DB::commit();
  3517. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  3518. }
  3519. public function getStockBarcode($user, $line) {
  3520. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3521. if ($arrResponseCheckUser['error']) {
  3522. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3523. }
  3524. try {
  3525. $arrStock = DB::table('S002V01TSTAR')
  3526. ->where('STAR_NULI', '=', $line)
  3527. ->where('STAR_ESTA', '=', 'Activo')
  3528. ->where('INST_NULI', '=', $line)
  3529. ->where('INST_ESTA', '=', 'Activo')
  3530. ->where('UBAR_NULI', '=', $line)
  3531. ->where('UBAR_ESTA', '=', 'Activo')
  3532. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  3533. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  3534. ->get([
  3535. 'STAR_IDST AS ID_STOCK',
  3536. 'INST_MODE AS MODELO',
  3537. 'INST_COMO AS CODIGO_MODELO',
  3538. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3539. 'STAR_COBA AS CODIGO_BARRA',
  3540. 'INST_IMAG AS IMAGENES',
  3541. ]);
  3542. $arrStock = json_decode(json_encode($arrStock), true);
  3543. } catch (\Throwable $th) {
  3544. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  3545. }
  3546. foreach ($arrStock as $key => $info) {
  3547. $arrImages = json_decode($info['IMAGENES']);
  3548. $arrUrlImage = array();
  3549. foreach ($arrImages as $keyImages => $images) {
  3550. $images = $this->encController->encrypt($images);
  3551. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  3552. if ($responseDocument['error']) {
  3553. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  3554. }
  3555. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  3556. }
  3557. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  3558. }
  3559. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock);
  3560. }
  3561. public function updateStockBarcode(Request $request, $idStock) {
  3562. $validator = Validator::make($request->all(), [
  3563. 'BARCODE' => 'required|string',
  3564. 'USUARIO' => 'required|string',
  3565. 'NUMERO_LINEA' => 'required|integer',
  3566. ]);
  3567. if($validator->fails()){
  3568. return $this->responseController->makeResponse(
  3569. true,
  3570. "Se encontraron uno o más errores.",
  3571. $this->responseController->makeErrors(
  3572. $validator->errors()->messages()
  3573. ),
  3574. 401
  3575. );
  3576. }
  3577. DB::beginTransaction();
  3578. $requestData = $request->all();
  3579. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  3580. if ($arrResponseCheckUser['error']) {
  3581. DB::rollBack();
  3582. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3583. }
  3584. $user = $arrResponseCheckUser['response'];
  3585. $idStock = $this->encController->decrypt($idStock);
  3586. if (is_null($idStock)) {
  3587. DB::rollBack();
  3588. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  3589. }
  3590. try {
  3591. $validateExists = DB::table('S002V01TSTAR')
  3592. ->where('STAR_IDST', '=', $idStock)
  3593. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  3594. ->where('STAR_ESTA', '=', 'Activo')
  3595. ->exists();
  3596. } catch (\Throwable $th) {
  3597. DB::rollBack();
  3598. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  3599. }
  3600. if (!$validateExists) {
  3601. DB::rollBack();
  3602. return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500);
  3603. }
  3604. $now = $this->functionsController->now();
  3605. $currentDate = $now->toDateTimeString();
  3606. try {
  3607. $validateUpdate = DB::table('S002V01TSTAR')
  3608. ->where('STAR_IDST', '=', $idStock)
  3609. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  3610. ->where('STAR_ESTA', '=', 'Activo')
  3611. ->update([
  3612. 'STAR_COBA' => $requestData['BARCODE'],
  3613. 'STAR_USMO' => $user,
  3614. 'STAR_FEMO' => $currentDate,
  3615. 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  3616. ]);
  3617. } catch (\Throwable $th) {
  3618. DB::rollBack();
  3619. return $this->responseController->makeResponse(true, 'Ocurrió un error modificar el código de barra.', $th->getMessage(), 500);
  3620. }
  3621. if (!$validateUpdate) {
  3622. DB::rollBack();
  3623. return $this->responseController->makeResponse(true, 'No se pudo modificar el código de barra.', [], 500);
  3624. }
  3625. DB::commit();
  3626. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  3627. }
  3628. public function getStockDueDate($user, $line) {
  3629. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3630. if ($arrResponseCheckUser['error']) {
  3631. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3632. }
  3633. try {
  3634. $arrStock = DB::table('S002V01TSTAR')
  3635. ->where('STAR_NULI', '=', $line)
  3636. ->where('STAR_ESTA', '=', 'Activo')
  3637. ->where('INST_NULI', '=', $line)
  3638. ->where('INST_ESTA', '=', 'Activo')
  3639. ->where('UBAR_NULI', '=', $line)
  3640. ->where('UBAR_ESTA', '=', 'Activo')
  3641. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  3642. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  3643. ->get([
  3644. 'STAR_IDST AS ID_STOCK',
  3645. 'INST_MODE AS MODELO',
  3646. 'INST_COMO AS CODIGO_MODELO',
  3647. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3648. 'STAR_FEVE AS FECHA_VENCIMIENTO',
  3649. 'INST_IMAG AS IMAGENES',
  3650. ]);
  3651. $arrStock = json_decode(json_encode($arrStock), true);
  3652. } catch (\Throwable $th) {
  3653. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  3654. }
  3655. foreach ($arrStock as $key => $info) {
  3656. $arrImages = json_decode($info['IMAGENES']);
  3657. $arrUrlImage = array();
  3658. foreach ($arrImages as $keyImages => $images) {
  3659. $images = $this->encController->encrypt($images);
  3660. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  3661. if ($responseDocument['error']) {
  3662. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  3663. }
  3664. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  3665. }
  3666. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  3667. if (is_null($info['FECHA_VENCIMIENTO'])) {
  3668. $arrStock[$key]['FECHA_VENCIMIENTO'] = 'Ninguno';
  3669. }
  3670. }
  3671. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock);
  3672. }
  3673. public function updateDueDateStock(Request $request, $idStock) {
  3674. $validator = Validator::make($request->all(), [
  3675. 'FECHA_VENCIMIENTO' => 'required|string',
  3676. 'USUARIO' => 'required|string',
  3677. 'NUMERO_LINEA' => 'required|integer',
  3678. ]);
  3679. if($validator->fails()){
  3680. return $this->responseController->makeResponse(
  3681. true,
  3682. "Se encontraron uno o más errores.",
  3683. $this->responseController->makeErrors(
  3684. $validator->errors()->messages()
  3685. ),
  3686. 401
  3687. );
  3688. }
  3689. DB::beginTransaction();
  3690. $requestData = $request->all();
  3691. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  3692. if ($arrResponseCheckUser['error']) {
  3693. DB::rollBack();
  3694. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3695. }
  3696. $user = $arrResponseCheckUser['response'];
  3697. $idStock = $this->encController->decrypt($idStock);
  3698. if (is_null($idStock)) {
  3699. DB::rollBack();
  3700. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  3701. }
  3702. try {
  3703. $validateExists = DB::table('S002V01TSTAR')
  3704. ->where('STAR_IDST', '=', $idStock)
  3705. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  3706. ->where('STAR_ESTA', '=', 'Activo')
  3707. ->exists();
  3708. } catch (\Throwable $th) {
  3709. DB::rollBack();
  3710. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  3711. }
  3712. if (!$validateExists) {
  3713. DB::rollBack();
  3714. return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500);
  3715. }
  3716. $now = $this->functionsController->now();
  3717. $currentDate = $now->toDateTimeString();
  3718. try {
  3719. $validateUpdate = DB::table('S002V01TSTAR')
  3720. ->where('STAR_IDST', '=', $idStock)
  3721. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  3722. ->where('STAR_ESTA', '=', 'Activo')
  3723. ->update([
  3724. 'STAR_FEVE' => $requestData['FECHA_VENCIMIENTO'],
  3725. 'STAR_USMO' => $user,
  3726. 'STAR_FEMO' => $currentDate,
  3727. 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  3728. ]);
  3729. } catch (\Throwable $th) {
  3730. DB::rollBack();
  3731. return $this->responseController->makeResponse(true, 'Ocurrió un error modificar la fecha de vencimiento.', $th->getMessage(), 500);
  3732. }
  3733. if (!$validateUpdate) {
  3734. DB::rollBack();
  3735. return $this->responseController->makeResponse(true, 'No se pudo modificar la fecha de vencimiento.', [], 500);
  3736. }
  3737. DB::commit();
  3738. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  3739. }
  3740. public function getDescriptionSheetStock($user, $line) {
  3741. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3742. if ($arrResponseCheckUser['error']) {
  3743. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3744. }
  3745. try {
  3746. $arrStock = DB::table('S002V01TSTAR')
  3747. ->where('STAR_NULI', '=', $line)
  3748. ->where('STAR_ESTA', '=', 'Activo')
  3749. ->where('INST_NULI', '=', $line)
  3750. ->where('INST_ESTA', '=', 'Activo')
  3751. ->where('UBAR_NULI', '=', $line)
  3752. ->where('UBAR_ESTA', '=', 'Activo')
  3753. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  3754. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  3755. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  3756. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  3757. ->get([
  3758. 'STAR_IDST AS ID_STOCK',
  3759. 'INST_MODE AS MODELO',
  3760. 'INST_COMO AS CODIGO_MODELO',
  3761. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3762. 'FAMI_NOFA AS FAMILIA',
  3763. 'SUBF_NOSU AS SUBFAMILIA',
  3764. 'INST_IMAG AS IMAGENES',
  3765. ]);
  3766. $arrStock = json_decode(json_encode($arrStock), true);
  3767. } catch (\Throwable $th) {
  3768. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  3769. }
  3770. foreach ($arrStock as $key => $info) {
  3771. $arrImages = json_decode($info['IMAGENES']);
  3772. $arrUrlImage = array();
  3773. foreach ($arrImages as $keyImages => $images) {
  3774. $images = $this->encController->encrypt($images);
  3775. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  3776. if ($responseDocument['error']) {
  3777. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  3778. }
  3779. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  3780. }
  3781. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  3782. }
  3783. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock);
  3784. }
  3785. public function createDescriptionSheetStockXLS($idStock, $user, $line) {
  3786. $idStock = $this->encController->decrypt($idStock);
  3787. if (is_null($idStock)) {
  3788. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401);
  3789. }
  3790. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  3791. if ($arrResponseCheckUser['error']) {
  3792. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  3793. }
  3794. $user = $arrResponseCheckUser['response'];
  3795. try {
  3796. $arrStock = (array) DB::table('S002V01TSTAR')
  3797. ->where('STAR_IDST', '=', $idStock)
  3798. ->where('STAR_NULI', '=', $line)
  3799. ->where('INST_NULI', '=', $line)
  3800. ->where('UBAR_NULI', '=', $line)
  3801. ->where('INST_ESTA', '=', 'Activo')
  3802. ->where('UBAR_ESTA', '=', 'Activo')
  3803. ->where('STAR_ESTA', '=', 'Activo')
  3804. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  3805. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  3806. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  3807. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  3808. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  3809. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  3810. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  3811. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  3812. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  3813. ->first([
  3814. 'FAMI_COFA AS CODIGO_FAMILIA',
  3815. 'FAMI_NOFA AS FAMILIA',
  3816. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  3817. 'SUBF_NOSU AS SUBFAMILIA',
  3818. 'INST_MODE AS MODELO',
  3819. 'INST_COMO AS CODIGO_MODELO',
  3820. 'INST_STMI AS STOCK_MINIMO',
  3821. 'INST_STMA AS STOCK_MAXIMO',
  3822. 'STAR_IDST AS ID_STOCK',
  3823. 'STAR_COBA AS CODIGO_BARRAS',
  3824. 'STAR_FEVE AS FECHA_VENCIMIENTO',
  3825. 'STAR_NUPR AS NUMERO_PROVEEDOR',
  3826. 'PROV_NOCO AS PROVEEDOR',
  3827. 'STAR_TIAD AS TIPO_ADQUISICION',
  3828. 'STAR_CONS AS CONSUMIBLE',
  3829. 'STAR_REPA AS REPARABLE',
  3830. 'STAR_ESTA AS ESTADO',
  3831. 'UBAR_IDUB AS ID_UBICACION',
  3832. 'ALMA_COAL AS CODIGO_ALMACEN',
  3833. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  3834. 'AREA_COAR AS CODIGO_AREA',
  3835. 'AREA_NOAR AS NOMBRE_AREA',
  3836. 'NIVE_CONI AS CODIGO_NIVEL',
  3837. 'NIVE_NONI AS NOMBRE_NIVEL',
  3838. 'ZONA_COZO AS CODIGO_ZONA',
  3839. 'ZONA_NOZO AS NOMBRE_ZONA',
  3840. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  3841. ]);
  3842. } catch (\Throwable $th) {
  3843. return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500);
  3844. }
  3845. if (empty($arrStock) === 0) {
  3846. return $this->responseController->makeResponse(true, "No se encontró información del stock.", [], 500);
  3847. }
  3848. $spreadsheet = new Spreadsheet();
  3849. $activeWorksheet = $spreadsheet->getActiveSheet()->setTitle($arrStock['ID_STOCK']);
  3850. $cell = 1;
  3851. $activeWorksheet->setCellValue("A$cell", 'Código del Equipamiento');
  3852. $activeWorksheet->setCellValue("B$cell", $arrStock['CODIGO_EQUIPAMIENTO']);
  3853. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3854. $cell++;
  3855. $activeWorksheet->setCellValue("A$cell", 'Familia');
  3856. $activeWorksheet->setCellValue("B$cell", $arrStock['FAMILIA'].' ('.$arrStock['CODIGO_FAMILIA'].')');
  3857. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3858. $cell++;
  3859. $activeWorksheet->setCellValue("A$cell", 'Subfamilia');
  3860. $activeWorksheet->setCellValue("B$cell", $arrStock['SUBFAMILIA'].' ('.$arrStock['CODIGO_SUBFAMILIA'].')');
  3861. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3862. $cell++;
  3863. $activeWorksheet->setCellValue("A$cell", 'Modelo');
  3864. $activeWorksheet->setCellValue("B$cell", $arrStock['MODELO']);
  3865. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3866. $cell++;
  3867. $activeWorksheet->setCellValue("A$cell", 'Código Modelo');
  3868. $activeWorksheet->setCellValue("B$cell", $arrStock['CODIGO_MODELO']);
  3869. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3870. $cell++;
  3871. $activeWorksheet->setCellValue("A$cell", 'Tipo de Adquisición');
  3872. $activeWorksheet->setCellValue("B$cell", $arrStock['TIPO_ADQUISICION']);
  3873. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3874. $cell++;
  3875. if (!is_null($arrStock['NUMERO_PROVEEDOR'])) {
  3876. $activeWorksheet->setCellValue("A$cell", 'Proveedor');
  3877. $activeWorksheet->setCellValue("B$cell", $arrStock['PROVEEDOR'].' ('.$arrStock['NUMERO_PROVEEDOR'].')');
  3878. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3879. $cell++;
  3880. }
  3881. if (!is_null($arrStock['FECHA_VENCIMIENTO'])) {
  3882. $activeWorksheet->setCellValue("A$cell", 'Fecha de Vencimiento');
  3883. $activeWorksheet->setCellValue("B$cell", $arrStock['FECHA_VENCIMIENTO']);
  3884. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3885. $cell++;
  3886. }
  3887. $activeWorksheet->setCellValue("A$cell", 'Código de Barras');
  3888. $activeWorksheet->setCellValue("B$cell", $arrStock['CODIGO_BARRAS']);
  3889. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3890. $cell++;
  3891. if ( array_key_exists('TASA_ROTACION', $arrStock) ) {
  3892. $activeWorksheet->setCellValue("A$cell", 'Tasa de Rotación');
  3893. $activeWorksheet->setCellValue("B$cell", $arrStock['TASA_ROTACION']);
  3894. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3895. $cell++;
  3896. }
  3897. $activeWorksheet->setCellValue("A$cell", 'Stock Mínimo');
  3898. $activeWorksheet->setCellValue("B$cell", is_null($arrStock['STOCK_MINIMO']) ? 'Sin Definir' : $arrStock['STOCK_MINIMO']);
  3899. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3900. $cell++;
  3901. $activeWorksheet->setCellValue("A$cell", 'Stock Máximo');
  3902. $activeWorksheet->setCellValue("B$cell", is_null($arrStock['STOCK_MAXIMO']) ? 'Sin Definir' : $arrStock['STOCK_MAXIMO']);
  3903. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3904. $cell++;
  3905. $activeWorksheet->setCellValue("A$cell", '¿Es consumible?');
  3906. $activeWorksheet->setCellValue("B$cell", $arrStock['CONSUMIBLE']);
  3907. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3908. $cell++;
  3909. $activeWorksheet->setCellValue("A$cell", '¿Es reparable?');
  3910. $activeWorksheet->setCellValue("B$cell", $arrStock['REPARABLE']);
  3911. $activeWorksheet->getStyle( "A$cell" )->getFont()->setBold(true);
  3912. $cell++;
  3913. $activeWorksheet->getColumnDimension("A")->setAutoSize(true);
  3914. $activeWorksheet->getColumnDimension("B")->setAutoSize(true);
  3915. $nuli = $this->resourcesController->formatSecuence($line, 2);
  3916. $como = 'GIST'; // Código del módulo
  3917. $cldo = 'IN'; // Código de la clasificación
  3918. $fecr = date('ymd'); // Fecha en la se carga el archivo
  3919. try {
  3920. $arrSecuence = (array) DB::table('S002V01TAFAL')
  3921. ->where('AFAL_COMO', '=', $como)
  3922. ->where('AFAL_CLDO', '=', $cldo)
  3923. ->where('AFAL_NULI', '=', $line)
  3924. ->orderBy('AFAL_NUSE', 'desc')
  3925. ->first([ 'AFAL_NUSE' ]);
  3926. } catch (\Throwable $th) {
  3927. return $this->responseController->makeResponse(
  3928. true,
  3929. "ERR_PROVIDER_SHEET020: Ocurrió un error al obtener la información de la secuencia.",
  3930. $th->getMessage(),
  3931. 500
  3932. );
  3933. }
  3934. $nuse = 1; // Secuencia del documento
  3935. if ( !empty( $arrSecuence ) && !is_null( $arrSecuence ) ) {
  3936. $nuse = intval( $arrSecuence['AFAL_NUSE'] ) + 1;
  3937. }
  3938. $nuse = $this->resourcesController->formatSecuence($nuse, 6);
  3939. $nuve = $this->resourcesController->formatSecuence('1', 2);
  3940. $noar = 'ficha_de_stock_'.$arrStock['ID_STOCK'];
  3941. $exte = 'xlsx';
  3942. if ($_SERVER['SERVER_NAME'] === '192.168.100.105') {
  3943. $filePath = 'C:/ITTEC/SAM/Dev/SistemaMantenimiento/sistema-mantenimiento-back/public/public_files/'; // API JEAN
  3944. } else {
  3945. $filePath = 'C:\inetpub\wwwroot\sam\public_files\\'; // API QA
  3946. }
  3947. $fileName = $nuli.'-'.$como.'-'.$cldo.'-'.$fecr.'-'.$nuse.'='.$nuve.'='.$noar.'.'.$exte;
  3948. $tempFile = $filePath.$fileName;
  3949. if ( file_exists( $tempFile ) ) {
  3950. if ( !unlink( $tempFile ) ) {
  3951. return $this->responseController->makeResponse(
  3952. true,
  3953. "ERR_PROVIDER_SHEET021: Ocurrió un error al eliminar el siguiente archivo: " . $tempFile,
  3954. [],
  3955. 500
  3956. );
  3957. }
  3958. }
  3959. try {
  3960. $writer = new Xlsx($spreadsheet);
  3961. ob_start();
  3962. $writer->save('php://output');
  3963. $base64 = base64_encode(ob_get_clean());
  3964. $validate = \File::put( $tempFile, base64_decode($base64));
  3965. } catch (\Throwable $th) {
  3966. return $this->responseController->makeResponse(
  3967. true,
  3968. "ERR_PROVIDER_SHEET022: Ocurrió un error al guardar el documento.",
  3969. $th->getMessage(),
  3970. 500
  3971. );
  3972. }
  3973. $ubic = Storage::putFile('files', new File($tempFile));
  3974. $ubic = str_replace("/", "\\", $ubic);
  3975. if ($_SERVER['SERVER_NAME'] === '192.168.100.105') {
  3976. $ubic = "C:\ITTEC\SAM\Dev\SistemaMantenimiento\sistema-mantenimiento-back\storage\app\\" . $ubic;
  3977. } else {
  3978. $ubic = "C:\inetpub\wwwroot\sam\storage\app\\" . $ubic;
  3979. }
  3980. $tama = filesize($ubic);
  3981. $usac = json_encode([$user]);
  3982. $now = $this->functionsController->now();
  3983. $currentDate = $now->toDateTimeString();
  3984. try {
  3985. $validateInsert = DB::table('S002V01TAFAL')->insert([
  3986. 'AFAL_NULI' => $line,
  3987. 'AFAL_COMO' => $como,
  3988. 'AFAL_CLDO' => $cldo,
  3989. 'AFAL_FECR' => $fecr,
  3990. 'AFAL_NUSE' => $nuse,
  3991. 'AFAL_NUVE' => $nuve,
  3992. 'AFAL_NOAR' => $noar,
  3993. 'AFAL_EXTE' => $exte,
  3994. 'AFAL_TAMA' => $tama,
  3995. 'AFAL_UBIC' => $ubic,
  3996. 'AFAL_USAC' => $usac,
  3997. 'AFAL_USRE' => $user,
  3998. 'AFAL_FERE' => $currentDate,
  3999. ]);
  4000. } catch (\Throwable $th) {
  4001. return $this->responseController->makeResponse(
  4002. true,
  4003. "ERR_PROVIDER_SHEET023: Ocurrió un error guardar los datos a la tabla final de archivos.",
  4004. $th->getMessage(),
  4005. 500
  4006. );
  4007. }
  4008. if ( !$validateInsert ) {
  4009. return $this->responseController->makeResponse(
  4010. true,
  4011. "ERR_PROVIDER_SHEET024: No se pudo guardar la ficha del proveedor en la base de datos.",
  4012. [],
  4013. 500
  4014. );
  4015. }
  4016. $encCode = $this->encController->encrypt($fileName);
  4017. try {
  4018. $validateInsert = DB::table('S002V01TDOST')->insert([
  4019. 'DOST_NULI' => $line,
  4020. 'DOST_IDST' => $idStock,
  4021. 'DOST_NODO' => 'Ficha de Stock #'.$arrStock['ID_STOCK'],
  4022. 'DOST_CODO' => $encCode,
  4023. 'DOST_EXTE' => $exte,
  4024. 'DOST_TAMA' => $tama,
  4025. 'DOST_CLAS' => 'IN',
  4026. 'DOST_VERS' => 1,
  4027. 'DOST_USRE' => $user,
  4028. 'DOST_FERE' => $currentDate,
  4029. 'DOST_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  4030. ]);
  4031. } catch (\Throwable $th) {
  4032. return $this->responseController->makeResponse(
  4033. true,
  4034. "Ocurrió un error guardar los datos a la tabla final de archivos.",
  4035. $th->getMessage(),
  4036. 500
  4037. );
  4038. }
  4039. if (!$validateInsert) {
  4040. return $this->responseController->makeResponse(
  4041. true,
  4042. "No se pudo guardar la ficha del proveedor en la base de datos.",
  4043. [],
  4044. 500
  4045. );
  4046. }
  4047. if ($_SERVER['SERVER_NAME'] === '192.168.100.105') {
  4048. $urlPublic = 'http://192.168.100.105:8000/public_files/' . $fileName;
  4049. } else {
  4050. $urlPublic = $this->functionsController->getApiURI().'sam/public_files/' . $fileName;
  4051. }
  4052. return $this->responseController->makeResponse(false, "EXITO: Modificación Exitosa", [ 'url' => $urlPublic ]);
  4053. }
  4054. public function createDescriptionSheetStockPDF($idStock, $user, $line) {
  4055. $idStock = $this->encController->decrypt($idStock);
  4056. if (is_null($idStock)) {
  4057. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID del Stock.', [], 401);
  4058. }
  4059. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4060. if ($arrResponseCheckUser['error']) {
  4061. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4062. }
  4063. $user = $arrResponseCheckUser['response'];
  4064. try {
  4065. $arrStock = (array) DB::table('S002V01TSTAR')
  4066. ->where('STAR_IDST', '=', $idStock)
  4067. ->where('STAR_NULI', '=', $line)
  4068. ->where('INST_NULI', '=', $line)
  4069. ->where('UBAR_NULI', '=', $line)
  4070. ->where('INST_ESTA', '=', 'Activo')
  4071. ->where('UBAR_ESTA', '=', 'Activo')
  4072. ->where('STAR_ESTA', '=', 'Activo')
  4073. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4074. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  4075. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4076. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4077. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  4078. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  4079. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  4080. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  4081. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  4082. ->first([
  4083. 'FAMI_COFA AS CODIGO_FAMILIA',
  4084. 'FAMI_NOFA AS FAMILIA',
  4085. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  4086. 'SUBF_NOSU AS SUBFAMILIA',
  4087. 'INST_MODE AS MODELO',
  4088. 'INST_COMO AS CODIGO_MODELO',
  4089. 'INST_STMI AS STOCK_MINIMO',
  4090. 'INST_STMA AS STOCK_MAXIMO',
  4091. 'STAR_IDST AS ID_STOCK',
  4092. 'STAR_COBA AS CODIGO_BARRAS',
  4093. 'STAR_FEVE AS FECHA_VENCIMIENTO',
  4094. 'PROV_NUPR AS NUMERO_PROVEEDOR',
  4095. 'PROV_NOCO AS PROVEEDOR',
  4096. 'STAR_TIAD AS TIPO_ADQUISICION',
  4097. 'STAR_CONS AS CONSUMIBLE',
  4098. 'STAR_REPA AS REPARABLE',
  4099. 'STAR_ESTA AS ESTADO',
  4100. 'UBAR_IDUB AS ID_UBICACION',
  4101. 'ALMA_COAL AS CODIGO_ALMACEN',
  4102. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  4103. 'AREA_COAR AS CODIGO_AREA',
  4104. 'AREA_NOAR AS NOMBRE_AREA',
  4105. 'NIVE_CONI AS CODIGO_NIVEL',
  4106. 'NIVE_NONI AS NOMBRE_NIVEL',
  4107. 'ZONA_COZO AS CODIGO_ZONA',
  4108. 'ZONA_NOZO AS NOMBRE_ZONA',
  4109. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  4110. ]);
  4111. } catch (\Throwable $th) {
  4112. return $this->responseController->makeResponse(true, "Ocurrió un error al recuperar la información.", $th->getMessage(), 500);
  4113. }
  4114. if (empty($arrStock) === 0) {
  4115. return $this->responseController->makeResponse(true, "No se encontró información del stock.", [], 500);
  4116. }
  4117. $html = '<!DOCTYPE html>
  4118. <html lang="en">
  4119. <head>
  4120. <meta charset="UTF-8">
  4121. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  4122. <title>Document</title>
  4123. <style>
  4124. body {
  4125. font-family: Arial, Helvetica, sans-serif;
  4126. font-size: 8pt;
  4127. }
  4128. .section-title {
  4129. margin: 20px 0;
  4130. font-size: 12pt;
  4131. }
  4132. table {
  4133. width: 100%;
  4134. font-size: 8pt;
  4135. }
  4136. thead tr th {
  4137. text-align: start;
  4138. padding: 0 16px;
  4139. height: 52px;
  4140. border-bottom-width: 1px;
  4141. border-bottom-style: solid;
  4142. border-bottom-color: #CCC;
  4143. }
  4144. tbody tr td {
  4145. padding: 0 16px;
  4146. height: 52px;
  4147. border-bottom-width: 1px;
  4148. border-bottom-style: solid;
  4149. border-bottom-color: #CCC;
  4150. }
  4151. p {
  4152. text-align: justify;
  4153. }
  4154. </style>
  4155. </head>
  4156. <body>';
  4157. $html.='<div class="item">
  4158. <b>Código del Equipamiento</b>
  4159. <span>'.$arrStock['CODIGO_EQUIPAMIENTO'].'</span>
  4160. </div>';
  4161. $html.='<div class="item">
  4162. <b>Familia</b>
  4163. <span>'.$arrStock['FAMILIA'].' ('.$arrStock['CODIGO_FAMILIA'].')'.'</span>
  4164. </div>';
  4165. $html.='<div class="item">
  4166. <b>Subfamilia</b>
  4167. <span>'.$arrStock['SUBFAMILIA'].' ('.$arrStock['CODIGO_SUBFAMILIA'].')'.'</span>
  4168. </div>';
  4169. $html.='<div class="item">
  4170. <b>Modelo</b>
  4171. <span>'.$arrStock['MODELO'].'</span>
  4172. </div>';
  4173. $html.='<div class="item">
  4174. <b>Código Modelo</b>
  4175. <span>'.$arrStock['CODIGO_MODELO'].'</span>
  4176. </div>';
  4177. $html.='<div class="item">
  4178. <b>Tipo de Adquisición</b>
  4179. <span>'.$arrStock['TIPO_ADQUISICION'].'</span>
  4180. </div>';
  4181. $html.='<div class="item">
  4182. <b>Proveedor</b>
  4183. <span>'.$arrStock['PROVEEDOR'].' ('.$arrStock['NUMERO_PROVEEDOR'].')'.'</span>
  4184. </div>';
  4185. $html.='<div class="item">
  4186. <b>Fecha de Vencimiento</b>
  4187. <span>'.$arrStock['FECHA_VENCIMIENTO'].'</span>
  4188. </div>';
  4189. $html.='<div class="item">
  4190. <b>Código de Barras</b>
  4191. <span>'.$arrStock['CODIGO_BARRAS'].'</span>
  4192. </div>';
  4193. if ( array_key_exists('TASA_ROTACION', $arrStock) ) {
  4194. $html.='<div class="item">
  4195. <b>Tasa de Rotación</b>
  4196. <span>'.$arrStock['TASA_ROTACION'].'</span>
  4197. </div>';
  4198. }
  4199. $html.='<div class="item">
  4200. <b>Stock Mínimo</b>
  4201. <span>'.is_null($arrStock['STOCK_MINIMO']) ? 'Sin Definir' : $arrStock['STOCK_MINIMO'].'</span>
  4202. </div>';
  4203. $html.='<div class="item">
  4204. <b>Stock Máximo</b>
  4205. <span>'.is_null($arrStock['STOCK_MAXIMO']) ? 'Sin Definir' : $arrStock['STOCK_MAXIMO'].'</span>
  4206. </div>';
  4207. $html.='<div class="item">
  4208. <b>¿Es consumible?</b>
  4209. <span>'.$arrStock['CONSUMIBLE'].'</span>
  4210. </div>';
  4211. $html.='<div class="item">
  4212. <b>¿Es reparable?</b>
  4213. <span>'.$arrStock['REPARABLE'].'</span>
  4214. </div>';
  4215. $html.='</body></html>';
  4216. $nuli = $this->resourcesController->formatSecuence($line, 2);
  4217. $como = 'GIST'; // Código del módulo
  4218. $cldo = 'IN'; // Código de la clasificación
  4219. $fecr = date('ymd'); // Fecha en la se carga el archivo
  4220. try {
  4221. $arrSecuence = (array) DB::table('S002V01TAFAL')
  4222. ->where('AFAL_COMO', '=', $como)
  4223. ->where('AFAL_CLDO', '=', $cldo)
  4224. ->where('AFAL_NULI', '=', $line)
  4225. ->orderBy('AFAL_NUSE', 'desc')
  4226. ->first([ 'AFAL_NUSE' ]);
  4227. } catch (\Throwable $th) {
  4228. return $this->responseController->makeResponse(
  4229. true,
  4230. "ERR_PROVIDER_SHEET020: Ocurrió un error al obtener la información de la secuencia.",
  4231. $th->getMessage(),
  4232. 500
  4233. );
  4234. }
  4235. $nuse = 1; // Secuencia del documento
  4236. if ( !empty( $arrSecuence ) && !is_null( $arrSecuence ) ) {
  4237. $nuse = intval( $arrSecuence['AFAL_NUSE'] ) + 1;
  4238. }
  4239. $nuse = $this->resourcesController->formatSecuence($nuse, 6);
  4240. $nuve = $this->resourcesController->formatSecuence('1', 2);
  4241. $noar = 'ficha_de_adquisición_' . $arrStock['ID_STOCK'];
  4242. $nuli = $this->resourcesController->formatSecuence($line, 2);
  4243. $como = 'GIST'; // Código del módulo
  4244. $cldo = 'IN'; // Código de la clasificación
  4245. $fecr = date('ymd'); // Fecha en la se carga el archivo
  4246. try {
  4247. $arrSecuence = (array) DB::table('S002V01TAFAL')
  4248. ->where('AFAL_COMO', '=', $como)
  4249. ->where('AFAL_CLDO', '=', $cldo)
  4250. ->where('AFAL_NULI', '=', $line)
  4251. ->orderBy('AFAL_NUSE', 'desc')
  4252. ->first([ 'AFAL_NUSE' ]);
  4253. } catch (\Throwable $th) {
  4254. return $this->responseController->makeResponse(
  4255. true,
  4256. "ERR_PROVIDER_SHEET020: Ocurrió un error al obtener la información de la secuencia.",
  4257. $th->getMessage(),
  4258. 500
  4259. );
  4260. }
  4261. $nuse = 1; // Secuencia del documento
  4262. if ( !empty( $arrSecuence ) && !is_null( $arrSecuence ) ) {
  4263. $nuse = intval( $arrSecuence['AFAL_NUSE'] ) + 1;
  4264. }
  4265. $nuse = $this->resourcesController->formatSecuence($nuse, 6);
  4266. $nuve = $this->resourcesController->formatSecuence('1', 2);
  4267. $noar = 'ficha_de_stock_' . $arrStock['ID_STOCK'];
  4268. $exte = 'pdf';
  4269. if ($_SERVER['SERVER_NAME'] === '192.168.100.105') {
  4270. $filePath = 'C:/ITTEC/SAM/Dev/SistemaMantenimiento/sistema-mantenimiento-back/public/public_files/'; // API JEAN
  4271. } else {
  4272. $filePath = 'C:\inetpub\wwwroot\sam\public_files\\'; // API QA
  4273. }
  4274. $fileName = $nuli.'-'.$como.'-'.$cldo.'-'.$fecr.'-'.$nuse.'='.$nuve.'='.$noar.'.'.$exte;
  4275. $tempFile = $filePath . $fileName;
  4276. $dompdf = new Dompdf();
  4277. $dompdf ->loadHtml($html);
  4278. $dompdf->setPaper('A4', 'landscape');
  4279. $dompdf->render();
  4280. $output = $dompdf->output();
  4281. file_put_contents($tempFile, $output);
  4282. $ubic = Storage::putFile('files', new File($tempFile));
  4283. $ubic = str_replace("/", "\\", $ubic);
  4284. if ($_SERVER['SERVER_NAME'] === '192.168.100.105') {
  4285. $ubic = "C:\ITTEC\SAM\Dev\SistemaMantenimiento\sistema-mantenimiento-back\storage\app\\" . $ubic;
  4286. } else {
  4287. $ubic = "C:\inetpub\wwwroot\sam\storage\app\\" . $ubic;
  4288. }
  4289. $tama = filesize($ubic);
  4290. $usac = json_encode([$user]);
  4291. $now = $this->functionsController->now();
  4292. $currentDate = $now->toDateTimeString();
  4293. try {
  4294. $validateInsert = DB::table('S002V01TAFAL')->insert([
  4295. 'AFAL_NULI' => $line,
  4296. 'AFAL_COMO' => $como,
  4297. 'AFAL_CLDO' => $cldo,
  4298. 'AFAL_FECR' => $fecr,
  4299. 'AFAL_NUSE' => $nuse,
  4300. 'AFAL_NUVE' => $nuve,
  4301. 'AFAL_NOAR' => $noar,
  4302. 'AFAL_EXTE' => $exte,
  4303. 'AFAL_TAMA' => $tama,
  4304. 'AFAL_UBIC' => $ubic,
  4305. 'AFAL_USAC' => $usac,
  4306. 'AFAL_USRE' => $user,
  4307. 'AFAL_FERE' => $currentDate,
  4308. ]);
  4309. } catch (\Throwable $th) {
  4310. return $this->responseController->makeResponse(
  4311. true,
  4312. "ERR_PROVIDER_SHEET023: Ocurrió un error guardar los datos a la tabla final de archivos.",
  4313. $th->getMessage(),
  4314. 500
  4315. );
  4316. }
  4317. if ( !$validateInsert ) {
  4318. return $this->responseController->makeResponse(
  4319. true,
  4320. "ERR_PROVIDER_SHEET024: No se pudo guardar la ficha del proveedor en la base de datos.",
  4321. [],
  4322. 500
  4323. );
  4324. }
  4325. $encCode = $this->encController->encrypt($fileName);
  4326. try {
  4327. $validateInsert = DB::table('S002V01TDOST')->insert([
  4328. 'DOST_NULI' => $line,
  4329. 'DOST_IDST' => $idStock,
  4330. 'DOST_NODO' => 'Ficha de Stock #'.$arrStock['ID_STOCK'],
  4331. 'DOST_CODO' => $encCode,
  4332. 'DOST_EXTE' => $exte,
  4333. 'DOST_TAMA' => $tama,
  4334. 'DOST_CLAS' => 'IN',
  4335. 'DOST_VERS' => 1,
  4336. 'DOST_USRE' => $user,
  4337. 'DOST_FERE' => $currentDate,
  4338. 'DOST_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  4339. ]);
  4340. } catch (\Throwable $th) {
  4341. return $this->responseController->makeResponse(
  4342. true,
  4343. "Ocurrió un error guardar los datos a la tabla final de archivos.",
  4344. $th->getMessage(),
  4345. 500
  4346. );
  4347. }
  4348. if (!$validateInsert) {
  4349. return $this->responseController->makeResponse(
  4350. true,
  4351. "No se pudo guardar la ficha del proveedor en la base de datos.",
  4352. [],
  4353. 500
  4354. );
  4355. }
  4356. if ($_SERVER['SERVER_NAME'] === '192.168.100.105') {
  4357. $urlPublic = 'http://192.168.100.105:8000/public_files/' . $fileName;
  4358. } else {
  4359. $urlPublic = $this->functionsController->getApiURI().'sam/public_files/' . $fileName;
  4360. }
  4361. return $this->responseController->makeResponse(false, "EXITO: Modificación Exitosa", [ 'url' => $urlPublic ]);
  4362. }
  4363. public function getDocumentAssociation($user, $line) {
  4364. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4365. if ($arrResponseCheckUser['error']) {
  4366. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4367. }
  4368. try {
  4369. $arrStock = DB::table('S002V01TSTAR')
  4370. ->where('STAR_NULI', '=', $line)
  4371. ->where('STAR_ESTA', '=', 'Activo')
  4372. ->where('INST_NULI', '=', $line)
  4373. ->where('INST_ESTA', '=', 'Activo')
  4374. ->where('UBAR_NULI', '=', $line)
  4375. ->where('UBAR_ESTA', '=', 'Activo')
  4376. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  4377. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4378. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4379. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4380. ->get([
  4381. 'STAR_IDST AS ID_STOCK',
  4382. 'INST_MODE AS MODELO',
  4383. 'INST_COMO AS CODIGO_MODELO',
  4384. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  4385. 'FAMI_NOFA AS FAMILIA',
  4386. 'SUBF_NOSU AS SUBFAMILIA',
  4387. 'INST_IMAG AS IMAGENES',
  4388. 'STAR_NUPR AS NUMERO_PROVEEDOR'
  4389. ]);
  4390. $arrStock = json_decode(json_encode($arrStock), true);
  4391. } catch (\Throwable $th) {
  4392. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  4393. }
  4394. foreach ($arrStock as $key => $stock) {
  4395. $arrImages = json_decode($stock['IMAGENES']);
  4396. $arrUrlImage = array();
  4397. foreach ($arrImages as $keyImages => $images) {
  4398. $images = $this->encController->encrypt($images);
  4399. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  4400. if ($responseDocument['error']) {
  4401. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  4402. }
  4403. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  4404. }
  4405. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  4406. try {
  4407. $count = DB::table('S002V01TDOST')
  4408. ->where('DOST_IDST', '=', $stock['ID_STOCK'])
  4409. ->where('DOST_NULI', '=', $line)
  4410. ->where('DOST_ESTA', '=', 'Activo')
  4411. ->count();
  4412. } catch (\Throwable $th) {
  4413. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la cantidad de documentos.', $th->getMessage(), 500);
  4414. }
  4415. $arrStock[$key]['CANTIDAD_DOCUMENTOS'] = $count;
  4416. }
  4417. return $this->responseController->makeResponse(false, "ÉXITO: Consulta ExitosaA", $arrStock);
  4418. }
  4419. public function getDocumentsByStock($idStock, $user, $line) {
  4420. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4421. if ($arrResponseCheckUser['error']) {
  4422. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4423. }
  4424. $idStock = $this->encController->decrypt($idStock);
  4425. if (is_null($idStock)) {
  4426. DB::rollBack();
  4427. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  4428. }
  4429. try {
  4430. $validateExists = DB::table('S002V01TSTAR')
  4431. ->where('STAR_IDST', '=', $idStock)
  4432. ->where('STAR_NULI', '=', $line)
  4433. ->where('STAR_ESTA', '=', 'Activo')
  4434. ->exists();
  4435. } catch (\Throwable $th) {
  4436. DB::rollBack();
  4437. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  4438. }
  4439. if (!$validateExists) {
  4440. DB::rollBack();
  4441. return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500);
  4442. }
  4443. try {
  4444. $arrDocuments = DB::table('S002V01TDOST')
  4445. ->where('DOST_IDST', '=', $idStock)
  4446. ->where('DOST_NULI', '=', $line)
  4447. ->get([
  4448. 'DOST_IDDO AS ID_DOCUMENTO',
  4449. 'DOST_CODO AS CODIGO_DOCUMENTO',
  4450. 'DOST_NODO AS NOMBRE_DOCUMENTO',
  4451. 'DOST_CLAS AS CLASIFICACION',
  4452. 'DOST_EXTE AS EXTENSION',
  4453. 'DOST_VERS AS VERSION',
  4454. 'DOST_TAMA AS TAMANO',
  4455. 'DOST_ESTA AS ESTADO',
  4456. 'DOST_USRE AS USUARIO_REGISTRA',
  4457. 'DOST_FERE AS FECHA_REGISTRA',
  4458. 'DOST_USMO AS USUARIO_MODIFICA',
  4459. 'DOST_FEMO AS FECHA_MODIFICA',
  4460. ]);
  4461. $arrDocuments = json_decode(json_encode($arrDocuments), true);
  4462. } catch (\Throwable $th) {
  4463. DB::rollBack();
  4464. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  4465. }
  4466. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrDocuments, $line);
  4467. if ($responseCheckLatestUpdate['error']) {
  4468. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  4469. }
  4470. $arrDocuments = $responseCheckLatestUpdate['response'];
  4471. foreach ($arrDocuments as $keyDocument => $document) {
  4472. foreach ($document as $key => $value) {
  4473. if ($key === 'ID_DOCUMENTO') {
  4474. $document[$key] = '#'.$value;
  4475. }
  4476. if ($key === 'CLASIFICACION') {
  4477. $document[$key] = $this->resourcesController->arrClasificateDocument[$value];
  4478. }
  4479. if ($key === 'TAMANO') {
  4480. $document[$key] = ($value / 1000).' KB';
  4481. }
  4482. }
  4483. $arrDocuments[$keyDocument] = $document;
  4484. }
  4485. return $this->responseController->makeResponse(false, "EXITO: Consulta Exitosa", $arrDocuments);
  4486. }
  4487. public function registerDocumentStock(Request $request) {
  4488. $valitador = Validator::make($request->all(), [
  4489. 'ID_STOCK' => 'required|string',
  4490. 'NOMBRE_ARCHIVO' => 'required|string',
  4491. 'TIPO_ARCHIVO' => 'required|string',
  4492. 'ARCHIVO' => 'required|string',
  4493. 'USUARIO' => 'required|string',
  4494. 'NUMERO_LINEA' => 'required|integer',
  4495. ]);
  4496. if ($valitador->fails()) {
  4497. return $this->responseController->makeResponse(
  4498. true,
  4499. "ERR_DOCUMENT_ORDER_REG000: Se encontraron uno o más errores.",
  4500. $this->responseController->makeErrors($valitador->errors()->messages()),
  4501. 401
  4502. );
  4503. }
  4504. DB::beginTransaction();
  4505. $requestData = $request->all();
  4506. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  4507. if ($arrResponseCheckUser['error']) {
  4508. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4509. }
  4510. $user = $arrResponseCheckUser['response'];
  4511. try {
  4512. $idFile = $this->encController->decrypt($requestData['ARCHIVO']);
  4513. } catch (\Throwable $th) {
  4514. DB::rollBack();
  4515. return $this->responseController->makeResponse(true, "ERR_DOCUMENT_ORDER_REG002: Ocurrió un error al desencriptar el documento.", $th->getMessage(), 401);
  4516. }
  4517. $tempFile = DB::table('S002V01TARTE')->where([
  4518. ['ARTE_NULI', '=', $requestData['NUMERO_LINEA']],
  4519. ['ARTE_IDAR', '=', $idFile],
  4520. ])->first();
  4521. if(is_null($tempFile)){
  4522. return $this->responseController->makeResponse(true, 'ERR_DOCUMENT_ORDER_REG003: El archivo consultado no está registrado', [], 404);
  4523. }else if($tempFile->ARTE_ESTA == 'Eliminado'){
  4524. return $this->responseController->makeResponse(true, 'ERR_DOCUMENT_ORDER_REG004: El archivo consultado está eliminado', [], 404);
  4525. }
  4526. $fileResponse = $this->documentManagementController->moveFinalFile(
  4527. intval($requestData['NUMERO_LINEA']),
  4528. 'GEAD',
  4529. $requestData['TIPO_ARCHIVO'],
  4530. $tempFile,
  4531. $user,
  4532. );
  4533. if(!$fileResponse[0]){
  4534. return $this->responseController->makeResponse(true, 'ERR_DOCUMENT_ORDER_REG005: '.$fileResponse[1], [], 400);
  4535. }
  4536. $encCode = $this->encController->encrypt($fileResponse[1]);
  4537. $now = $this->functionsController->now();
  4538. $currentDate = $now->toDateTimeString();
  4539. try {
  4540. $validateInsert = DB::table('S002V01TDOST')->insert([
  4541. 'DOST_NULI' => $requestData['NUMERO_LINEA'],
  4542. 'DOST_IDST' => $requestData['ID_STOCK'],
  4543. 'DOST_NODO' => $requestData['NOMBRE_ARCHIVO'],
  4544. 'DOST_CODO' => $encCode,
  4545. 'DOST_EXTE' => $tempFile->ARTE_EXTE,
  4546. 'DOST_TAMA' => $tempFile->ARTE_TAMA,
  4547. 'DOST_CLAS' => $requestData['TIPO_ARCHIVO'],
  4548. 'DOST_VERS' => 1,
  4549. 'DOST_USRE' => $user,
  4550. 'DOST_FERE' => $currentDate,
  4551. 'DOST_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  4552. ]);
  4553. } catch (\Throwable $th) {
  4554. return $this->responseController->makeResponse(
  4555. true,
  4556. "Ocurrió un error guardar los datos a la tabla final de archivos.",
  4557. $th->getMessage(),
  4558. 500
  4559. );
  4560. }
  4561. if (!$validateInsert) {
  4562. return $this->responseController->makeResponse(
  4563. true,
  4564. "No se pudo guardar la ficha del proveedor en la base de datos.",
  4565. [],
  4566. 500
  4567. );
  4568. }
  4569. DB::commit();
  4570. return $this->responseController->makeResponse(false, "ÉXITO: Registro de Documento Exitoso");
  4571. }
  4572. public function getReplenishmentQuantitiesService($user, $line) {
  4573. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4574. if ($arrResponseCheckUser['error']) {
  4575. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4576. }
  4577. try {
  4578. $arrStock = DB::table('S002V01TSTAR')
  4579. ->where('STAR_TIAD', '=', 'Por Pedido')
  4580. ->where('STAR_NULI', '=', $line)
  4581. ->where('STAR_ESTA', '=', 'Activo')
  4582. ->where('INST_NULI', '=', $line)
  4583. ->where('INST_ESTA', '=', 'Activo')
  4584. ->where('UBAR_NULI', '=', $line)
  4585. ->where('UBAR_ESTA', '=', 'Activo')
  4586. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  4587. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4588. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4589. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4590. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  4591. ->get([
  4592. 'STAR_IDST AS ID_STOCK',
  4593. 'INST_MODE AS MODELO',
  4594. 'INST_COMO AS CODIGO_MODELO',
  4595. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  4596. 'FAMI_NOFA AS FAMILIA',
  4597. 'SUBF_NOSU AS SUBFAMILIA',
  4598. 'INST_IMAG AS IMAGENES',
  4599. 'PROV_NUPR AS NUMERO_PROVEEDOR',
  4600. 'PROV_NOCO AS NOMBRE_PROVEEDOR',
  4601. ]);
  4602. $arrStock = json_decode(json_encode($arrStock), true);
  4603. } catch (\Throwable $th) {
  4604. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  4605. }
  4606. foreach ($arrStock as $key => $info) {
  4607. $arrImages = json_decode($info['IMAGENES']);
  4608. $arrUrlImage = array();
  4609. foreach ($arrImages as $keyImages => $images) {
  4610. $images = $this->encController->encrypt($images);
  4611. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  4612. if ($responseDocument['error']) {
  4613. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  4614. }
  4615. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  4616. }
  4617. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  4618. $arrStock[$key]['CANTIDAD'] = 0;
  4619. }
  4620. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock);
  4621. }
  4622. public function createRequestLine(Request $request) {
  4623. $valitador = Validator::make($request->all(), [
  4624. 'REQUEST_LINE' => 'required|array',
  4625. 'USUARIO' => 'required|string',
  4626. 'NUMERO_LINEA' => 'required|integer',
  4627. ]);
  4628. if ($valitador->fails()) {
  4629. return $this->responseController->makeResponse(
  4630. true,
  4631. "ERR_DOCUMENT_ORDER_REG000: Se encontraron uno o más errores.",
  4632. $this->responseController->makeErrors($valitador->errors()->messages()),
  4633. 401
  4634. );
  4635. }
  4636. DB::beginTransaction();
  4637. $requestData = $request->all();
  4638. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  4639. if ($arrResponseCheckUser['error']) {
  4640. DB::rollBack();
  4641. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4642. }
  4643. $user = $arrResponseCheckUser['response'];
  4644. $now = $this->functionsController->now();
  4645. $currentDate = $now->toDateTimeString();
  4646. $arrProviders = array();
  4647. $arrRequestData = array();
  4648. foreach ($requestData['REQUEST_LINE'] as $keyRequest => $request) {
  4649. try {
  4650. $validateInsert = DB::table('S002V01TCARE')->insert([
  4651. 'CARE_NULI' => $requestData['NUMERO_LINEA'],
  4652. 'CARE_IDST' => $request['ID_STOCK'],
  4653. 'CARE_CAAD' => $request['CANTIDAD'],
  4654. 'CARE_USRE' => $user,
  4655. 'CARE_FERE' => $currentDate,
  4656. 'CARE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  4657. ]);
  4658. } catch (\Throwable $th) {
  4659. DB::rollBack();
  4660. return $this->responseController->makeResponse(true, 'Ocurrió un error al guar la información del reabastecimiento del stock.', $th->getMessage(), 500);
  4661. }
  4662. if (!$validateInsert) {
  4663. DB::rollBack();
  4664. return $this->responseController->makeResponse(true, 'No se pudo guardar los datos del reabastecimiento dentro de la base de datos.', [], 500);
  4665. }
  4666. try {
  4667. $arrStock = (array) DB::table('S002V01TSTAR')
  4668. ->where('STAR_IDST', '=', $request['ID_STOCK'])
  4669. ->where('STAR_TIAD', '=', 'Por Pedido')
  4670. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  4671. ->where('STAR_ESTA', '=', 'Activo')
  4672. ->where('INST_NULI', '=', $requestData['NUMERO_LINEA'])
  4673. ->where('INST_ESTA', '=', 'Activo')
  4674. ->where('UBAR_NULI', '=', $requestData['NUMERO_LINEA'])
  4675. ->where('UBAR_ESTA', '=', 'Activo')
  4676. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  4677. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4678. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4679. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4680. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  4681. ->first([
  4682. 'INST_MODE AS MODELO',
  4683. 'INST_COMO AS CODIGO_MODELO',
  4684. 'FAMI_COFA AS FAMILIA',
  4685. 'SUBF_COSU AS SUBFAMILIA',
  4686. 'PROV_NUPR AS NUMERO_PROVEEDOR',
  4687. ]);
  4688. } catch (\Throwable $th) {
  4689. DB::rollBack();
  4690. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  4691. }
  4692. if (empty($arrStock)) {
  4693. DB::rollBack();
  4694. return $this->responseController->makeResponse(true, 'No se encontró la información del Stock', [], 500);
  4695. }
  4696. if ( !in_array($arrStock['NUMERO_PROVEEDOR'], $arrProviders) ) {
  4697. $arrProviders[] = $arrStock['NUMERO_PROVEEDOR'];
  4698. }
  4699. $request['MODELO'] = $arrStock['MODELO'];
  4700. $request['CODIGO_MODELO'] = $arrStock['CODIGO_MODELO'];
  4701. $request['FAMILIA'] = $arrStock['FAMILIA'];
  4702. $request['SUBFAMILIA'] = $arrStock['SUBFAMILIA'];
  4703. $request['NUMERO_PROVEEDOR'] = $arrStock['NUMERO_PROVEEDOR'];
  4704. try {
  4705. $infoAdquisition = (array) DB::table('S002V01TINAR')
  4706. ->where('INAR_NULI', '=', $requestData['NUMERO_LINEA'])
  4707. ->where('INAR_CODI', '=', $arrStock['CODIGO_MODELO'])
  4708. ->where('INAR_MODE', '=', $arrStock['MODELO'])
  4709. ->where('INAR_ESTA', '=', 'Activo')
  4710. ->where('DEAR_NULI', '=', $requestData['NUMERO_LINEA'])
  4711. ->where('DEAR_NUPR', '=', $arrStock['NUMERO_PROVEEDOR'])
  4712. ->where('DEAR_ESTA', '=', 'Activo')
  4713. ->where('ARTI_NULI', '=', $requestData['NUMERO_LINEA'])
  4714. ->where('ARTI_COFA', '=', $arrStock['FAMILIA'])
  4715. ->where('ARTI_COSU', '=', $arrStock['SUBFAMILIA'])
  4716. ->where('ARTI_ESTA', '=', 'Activo')
  4717. ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
  4718. ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'DEAR_IDAR')
  4719. ->first([
  4720. 'ARTI_IDAR AS ID_ARTICULO',
  4721. 'INAR_IDIN AS ID_INFORMACION',
  4722. ]);
  4723. } catch (\Throwable $th) {
  4724. DB::rollBack();
  4725. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la adquisición.', $th->getMessage(), 500);
  4726. }
  4727. if (empty($infoAdquisition)) {
  4728. DB::rollBack();
  4729. return $this->responseController->makeResponse(true, 'No se encontró la información de la adquisición.', [], 500);
  4730. }
  4731. $request['ID_ARTICULO'] = $infoAdquisition['ID_ARTICULO'];
  4732. $request['ID_INFORMACION'] = $infoAdquisition['ID_INFORMACION'];
  4733. $arrRequestData[$keyRequest] = $request;
  4734. }
  4735. foreach ($arrProviders as $provider) {
  4736. $contItemRequest = 1;
  4737. foreach ($arrRequestData as $key => $value) {
  4738. if ($provider === $value['NUMERO_PROVEEDOR']) {
  4739. try {
  4740. $idRequest = DB::table('S002V01TLINE')->insertGetId([
  4741. 'LINE_NULI' => $requestData['NUMERO_LINEA'],
  4742. 'LINE_NUPR' => $value['NUMERO_PROVEEDOR'],
  4743. 'LINE_ESTA' => 'En espera',
  4744. 'LINE_USRE' => $user,
  4745. 'LINE_FERE' => $currentDate,
  4746. 'LINE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  4747. ]);
  4748. } catch (\Throwable $th) {
  4749. DB::rollBack();
  4750. return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar la información en la línea de solicitud.', $th->getMessage(), 500);
  4751. }
  4752. if ($idRequest <= 0) {
  4753. DB::rollBack();
  4754. return $this->responseController->makeResponse(true, 'No se pudo insertar la información de la línea de solicitud.', [], 500);
  4755. }
  4756. for ($i=0; $i < $value['CANTIDAD']; $i++) {
  4757. try {
  4758. $validateInsert = DB::table('S002V01TARSE')->insert([
  4759. 'ARSE_IDAS' => $contItemRequest,
  4760. 'ARSE_IDLI' => $idRequest,
  4761. 'ARSE_ESTA' => 'Activo',
  4762. 'ARSE_NULI' => $requestData['NUMERO_LINEA'],
  4763. 'ARSE_IDAR' => $value['ID_ARTICULO'],
  4764. 'ARSE_NUPR' => $value['NUMERO_PROVEEDOR'],
  4765. 'ARSE_IDIN' => $value['ID_INFORMACION'],
  4766. 'ARSE_USRE' => $user,
  4767. 'ARSE_FERE' => $currentDate,
  4768. 'ARSE_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  4769. ]);
  4770. } catch (\Throwable $th) {
  4771. DB::rollBack();
  4772. return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar los artículos en la línea de solicitud.', $th->getMessage(), 500);
  4773. }
  4774. if (!$validateInsert) {
  4775. DB::rollBack();
  4776. return $this->responseController->makeResponse(true, 'No se pudo insertar los artículos en la línea de solicitud.', [], 500);
  4777. }
  4778. $contItemRequest++;
  4779. }
  4780. }
  4781. }
  4782. }
  4783. DB::commit();
  4784. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  4785. }
  4786. public function getReplenishmentSuggestion($user, $line) {
  4787. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4788. if ($arrResponseCheckUser['error']) {
  4789. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4790. }
  4791. try {
  4792. $arrInfoStock = DB::table('S002V01TINST')
  4793. ->where('INST_NULI', '=', $line)
  4794. ->where('INST_ESTA', '=', 'Activo')
  4795. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4796. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4797. ->join('S002V01TSTAR', 'STAR_IDIS', '=', 'INST_IDIS')
  4798. ->get([
  4799. 'INST_IDIS AS ID_INFORMACION_STOCK',
  4800. 'STAR_IDST AS ID_STOCK',
  4801. DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'),
  4802. DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'),
  4803. 'INST_MODE AS MODELO',
  4804. 'INST_COMO AS CODIGO_MODELO',
  4805. 'STAR_NUPR AS NUMERO_PROVEEDOR',
  4806. 'INST_STMI AS STOCK_MINIMO',
  4807. 'INST_STMA AS STOCK_MAXIMO',
  4808. 'INST_IMAG AS IMAGENES',
  4809. ]);
  4810. $arrInfoStock = json_decode(json_encode($arrInfoStock), true);
  4811. } catch (\Throwable $th) {
  4812. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  4813. }
  4814. $arrDataStock = array();
  4815. foreach ($arrInfoStock as $key => $info) {
  4816. $arrImages = json_decode($info['IMAGENES']);
  4817. $arrUrlImage = array();
  4818. foreach ($arrImages as $images) {
  4819. $images = $this->encController->encrypt($images);
  4820. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  4821. if ($responseDocument['error']) {
  4822. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  4823. }
  4824. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  4825. }
  4826. $arrInfoStock[$key]['IMAGENES'] = $arrUrlImage;
  4827. try {
  4828. $countStock = DB::table('S002V01TSTAR')
  4829. ->where('STAR_NULI', '=', $line)
  4830. ->where('STAR_IDIS', '=', $info['ID_INFORMACION_STOCK'])
  4831. ->where('STAR_ESTA', '=', 'Activo')
  4832. ->count();
  4833. } catch (\Throwable $th) {
  4834. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el stock.', $th->getMessage(), 500);
  4835. }
  4836. $arrInfoStock[$key]['CANTIDAD_ACTUAL'] = $countStock;
  4837. if ($countStock < $info['STOCK_MINIMO'] && !is_null($info['STOCK_MINIMO'])) {
  4838. $arrInfoStock[$key]['ESTADO'] = 'Menor al Stock Requerido';
  4839. $arrInfoStock[$key]['CANTIDAD_SUGERIDA'] = $info['STOCK_MINIMO'] - $countStock;
  4840. $arrDataStock[] = $arrInfoStock[$key];
  4841. }
  4842. }
  4843. try {
  4844. $arrReplanishment = DB::table('S002V01TCARE')
  4845. ->where('CARE_NULI', '=', $line)
  4846. ->where('CARE_ESTA', '=', 'Activo')
  4847. ->join('S002V01TSTAR', 'STAR_IDST', '=', 'CARE_IDST')
  4848. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4849. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4850. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4851. ->orderBy('CARE_CAAD', 'DESC')
  4852. ->limit(5)
  4853. ->get([
  4854. 'INST_IDIS AS ID_INFORMACION_STOCK',
  4855. 'STAR_IDST AS ID_STOCK',
  4856. DB::raw('CONCAT(FAMI_NOFA, " (", FAMI_COFA, ")") AS FAMILIA'),
  4857. DB::raw('CONCAT(SUBF_NOSU, " (", SUBF_COSU, ")") AS SUBFAMILIA'),
  4858. 'INST_MODE AS MODELO',
  4859. 'INST_COMO AS CODIGO_MODELO',
  4860. 'STAR_NUPR AS NUMERO_PROVEEDOR',
  4861. 'INST_STMI AS STOCK_MINIMO',
  4862. 'INST_STMA AS STOCK_MAXIMO',
  4863. 'INST_IMAG AS IMAGENES',
  4864. 'CARE_CAAD AS CANTIDAD_SUGERIDA',
  4865. ]);
  4866. $arrReplanishment = json_decode(json_encode($arrReplanishment), true);
  4867. } catch (\Throwable $th) {
  4868. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el reabastecimiento.', $th->getMessage(), 500);
  4869. }
  4870. foreach ($arrReplanishment as $key => $replanishment) {
  4871. $arrImages = json_decode($replanishment['IMAGENES']);
  4872. $arrUrlImage = array();
  4873. foreach ($arrImages as $images) {
  4874. $images = $this->encController->encrypt($images);
  4875. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  4876. if ($responseDocument['error']) {
  4877. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  4878. }
  4879. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  4880. }
  4881. $arrReplanishment[$key]['IMAGENES'] = $arrUrlImage;
  4882. $arrReplanishment[$key]['ESTADO'] = 'Stock habitualmente pedido';
  4883. }
  4884. // Se verifica los campos repetidos
  4885. $arrIdDataStock = array_column($arrDataStock, 'ID_INFORMACION_STOCK');
  4886. $arrIdReplanishment = array_column($arrReplanishment, 'ID_INFORMACION_STOCK');
  4887. $arrRepeated = array_merge($arrIdDataStock, $arrIdReplanishment);
  4888. $arrUnique = array_unique($arrRepeated);
  4889. $arrValues = array_values($arrUnique);
  4890. // Se unen con los estados para el resultado final
  4891. $arrFinal = array();
  4892. foreach ($arrValues as $key => $value) {
  4893. foreach ($arrDataStock as $dataStock) {
  4894. if ($dataStock['ID_INFORMACION_STOCK'] === $value) {
  4895. $arrFinal[$key] = $dataStock;
  4896. }
  4897. }
  4898. foreach ($arrReplanishment as $replanishment) {
  4899. if ($replanishment['ID_INFORMACION_STOCK'] === $value) {
  4900. if (array_key_exists($key, $arrFinal)) {
  4901. $arrFinal[$key]['ESTADO'] .= ' | '.$replanishment['ESTADO'];
  4902. } else {
  4903. $arrFinal[$key] = $replanishment;
  4904. }
  4905. }
  4906. }
  4907. }
  4908. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrFinal);
  4909. }
  4910. public function getNomenclatureManagement($user, $line) {
  4911. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4912. if ($arrResponseCheckUser['error']) {
  4913. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4914. }
  4915. try {
  4916. $arrStock = DB::table('S002V01TSTAR')
  4917. ->where('STAR_TIAD', '=', 'Por Pedido')
  4918. ->where('STAR_NULI', '=', $line)
  4919. ->where('STAR_ESTA', '=', 'Activo')
  4920. ->where('INST_NULI', '=', $line)
  4921. ->where('INST_ESTA', '=', 'Activo')
  4922. ->where('UBAR_NULI', '=', $line)
  4923. ->where('UBAR_ESTA', '=', 'Activo')
  4924. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  4925. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4926. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4927. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4928. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  4929. ->get([
  4930. 'STAR_IDST AS ID_STOCK',
  4931. 'INST_MODE AS MODELO',
  4932. 'INST_COMO AS CODIGO_MODELO',
  4933. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  4934. 'FAMI_NOFA AS FAMILIA',
  4935. 'SUBF_NOSU AS SUBFAMILIA',
  4936. 'INST_IMAG AS IMAGENES',
  4937. ]);
  4938. $arrStock = json_decode(json_encode($arrStock), true);
  4939. } catch (\Throwable $th) {
  4940. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  4941. }
  4942. foreach ($arrStock as $key => $info) {
  4943. $arrImages = json_decode($info['IMAGENES']);
  4944. $arrUrlImage = array();
  4945. foreach ($arrImages as $keyImages => $images) {
  4946. $images = $this->encController->encrypt($images);
  4947. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  4948. if ($responseDocument['error']) {
  4949. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  4950. }
  4951. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  4952. }
  4953. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  4954. }
  4955. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock);
  4956. }
  4957. public function getDetailsNomenclature($idStock, $user, $line) {
  4958. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  4959. if ($arrResponseCheckUser['error']) {
  4960. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  4961. }
  4962. $idStock = $this->encController->decrypt($idStock);
  4963. if (is_null($idStock)) {
  4964. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  4965. }
  4966. try {
  4967. $validateExists = DB::table('S002V01TSTAR')
  4968. ->where('STAR_IDST', '=', $idStock)
  4969. ->where('STAR_NULI', '=', $line)
  4970. ->where('STAR_ESTA', '=', 'Activo')
  4971. ->exists();
  4972. } catch (\Throwable $th) {
  4973. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  4974. }
  4975. if (!$validateExists) {
  4976. return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500);
  4977. }
  4978. try {
  4979. $info = (array) DB::table('S002V01TSTAR')
  4980. ->where('STAR_IDST', '=', $idStock)
  4981. ->where('STAR_TIAD', '=', 'Por Pedido')
  4982. ->where('STAR_NULI', '=', $line)
  4983. ->where('STAR_ESTA', '=', 'Activo')
  4984. ->where('INST_NULI', '=', $line)
  4985. ->where('INST_ESTA', '=', 'Activo')
  4986. ->where('UBAR_NULI', '=', $line)
  4987. ->where('UBAR_ESTA', '=', 'Activo')
  4988. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  4989. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  4990. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  4991. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  4992. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'STAR_NUPR')
  4993. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  4994. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  4995. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  4996. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  4997. ->first([
  4998. 'INST_MODE AS MODELO',
  4999. 'INST_COMO AS CODIGO_MODELO',
  5000. 'FAMI_COFA AS CODIGO_FAMILIA',
  5001. 'FAMI_NOFA AS FAMILIA',
  5002. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  5003. 'SUBF_NOSU AS SUBFAMILIA',
  5004. 'ALMA_COAL AS CODIGO_ALMACEN',
  5005. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  5006. 'AREA_COAR AS CODIGO_AREA',
  5007. 'AREA_NOAR AS NOMBRE_AREA',
  5008. 'NIVE_CONI AS CODIGO_NIVEL',
  5009. 'NIVE_NONI AS NOMBRE_NIVEL',
  5010. 'ZONA_COZO AS CODIGO_ZONA',
  5011. 'ZONA_NOZO AS NOMBRE_ZONA',
  5012. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  5013. ]);
  5014. } catch (\Throwable $th) {
  5015. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  5016. }
  5017. if (empty($info)) {
  5018. return $this->responseController->makeResponse(true, 'No se encontró la información del código.', [], 500);
  5019. }
  5020. $codeEquipment = $info['CODIGO_EQUIPAMIENTO'];
  5021. $arrStructureCode = explode('_', $codeEquipment);
  5022. if ( count($arrStructureCode) !== 2 ) {
  5023. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la estructura del código.' [], 500);
  5024. }
  5025. $strLBS = $arrStructureCode[0];
  5026. $arrStructureLBS = explode('.', $strLBS);
  5027. if (count($arrStructureLBS) !== 4) {
  5028. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la estructura del LBS.' [], 500);
  5029. }
  5030. $levelOccupation = $arrStructureLBS[2];
  5031. $arrStructureLevelOccupation = explode('-', $levelOccupation);
  5032. if (count($arrStructureLevelOccupation) !== 2) {
  5033. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el nivel y la ocupación.', [], 500);
  5034. }
  5035. $codeSite = $arrStructureLBS[0];
  5036. $codeLocation = $arrStructureLBS[1];
  5037. $codeElement = $arrStructureLBS[3];
  5038. $codeLevel = $arrStructureLevelOccupation[0];
  5039. $codeOccupation = $arrStructureLevelOccupation[1];
  5040. $strPBS = $arrStructureCode[1];
  5041. $arrStructurePBS = explode('.', $strPBS);
  5042. if ( count($arrStructurePBS) !== 4 ) {
  5043. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la estructura del PBS.', [], 500);
  5044. }
  5045. $typeModel = $arrStructurePBS[3];
  5046. $arrStructureTypeModel = explode('-', $typeModel);
  5047. if (count($arrStructureTypeModel) !== 3) {
  5048. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener tipo y modelo.', [], 500);
  5049. }
  5050. $codeFamily = $arrStructurePBS[0];
  5051. $codeSubfamily = $arrStructurePBS[1];
  5052. $codeState = $arrStructurePBS[2];
  5053. $codeType = $arrStructureTypeModel[0];
  5054. $codeModel = $arrStructureTypeModel[1];
  5055. $arrClaves = array(
  5056. 'CLAVE_SITIO' => $codeSite,
  5057. 'SITIO' => 'Número de Línea 01',
  5058. 'CLAVE_UBICACION' => $codeLocation,
  5059. 'UBICACION' => $info['NOMBRE_AREA'],
  5060. 'CLAVE_POSICION' => $codeElement,
  5061. 'POSICION' => $info['NOMBRE_NIVEL'],
  5062. 'CLAVE_OCUPACION' => $codeLevel,
  5063. 'OCUPACION' => $info['NOMBRE_ALMACEN'],
  5064. 'CLAVE_ELEMENTO' => $codeOccupation,
  5065. 'ELEMENTO' => $info['NOMBRE_ZONA'],
  5066. 'CLAVE_FAMILIA' => $codeFamily,
  5067. 'FAMILIA' => $info['FAMILIA'],
  5068. 'CLAVE_SUBFAMILIA' => $codeSubfamily,
  5069. 'SUBFAMILIA' => $info['SUBFAMILIA'],
  5070. 'CLAVE_ESTADO' => $codeState,
  5071. 'ESTADO' => $this->resourcesController->arrStatesEquipment[$codeState],
  5072. 'CLAVE_TIPO' => $codeType,
  5073. 'TIPO' => $info['MODELO'],
  5074. 'CLAVE_MODELO' => $codeModel,
  5075. 'MODELO' => $info['CODIGO_MODELO'],
  5076. );
  5077. return $this->responseController->makeResponse(false, 'ÉXITO: Consulta Exitosa.', $arrClaves);
  5078. }
  5079. public function getObjectProperties($user, $line) {
  5080. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  5081. if ($arrResponseCheckUser['error']) {
  5082. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  5083. }
  5084. try {
  5085. $arrStock = DB::table('S002V01TSTAR')
  5086. ->where('STAR_NULI', '=', $line)
  5087. ->where('STAR_ESTA', '=', 'Activo')
  5088. ->where('INST_NULI', '=', $line)
  5089. ->where('INST_ESTA', '=', 'Activo')
  5090. ->where('UBAR_NULI', '=', $line)
  5091. ->where('UBAR_ESTA', '=', 'Activo')
  5092. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  5093. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  5094. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  5095. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  5096. ->get([
  5097. 'STAR_IDST AS ID_STOCK',
  5098. 'INST_MODE AS MODELO',
  5099. 'INST_COMO AS CODIGO_MODELO',
  5100. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  5101. 'INST_IMAG AS IMAGENES',
  5102. 'FAMI_COFA AS CODIGO_FAMILIA',
  5103. 'FAMI_NOFA AS FAMILIA',
  5104. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  5105. 'SUBF_NOSU AS SUBFAMILIA',
  5106. ]);
  5107. $arrStock = json_decode(json_encode($arrStock), true);
  5108. } catch (\Throwable $th) {
  5109. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información del stock.', $th->getMessage(), 500);
  5110. }
  5111. foreach ($arrStock as $key => $info) {
  5112. $arrImages = json_decode($info['IMAGENES']);
  5113. $arrUrlImage = array();
  5114. foreach ($arrImages as $keyImages => $images) {
  5115. $images = $this->encController->encrypt($images);
  5116. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  5117. if ($responseDocument['error']) {
  5118. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  5119. }
  5120. $arrUrlImage[] = $responseDocument['response']['public_uri'];
  5121. }
  5122. $arrStock[$key]['IMAGENES'] = $arrUrlImage;
  5123. }
  5124. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrStock);
  5125. }
  5126. public function getDetailsObjectProperties($idStock, $user, $line) {
  5127. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  5128. if ($arrResponseCheckUser['error']) {
  5129. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  5130. }
  5131. $idStock = $this->encController->decrypt($idStock);
  5132. if (is_null($idStock)) {
  5133. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  5134. }
  5135. try {
  5136. $validateExists = DB::table('S002V01TSTAR')
  5137. ->where('STAR_IDST', '=', $idStock)
  5138. ->where('STAR_NULI', '=', $line)
  5139. ->where('STAR_ESTA', '=', 'Activo')
  5140. ->exists();
  5141. } catch (\Throwable $th) {
  5142. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  5143. }
  5144. if (!$validateExists) {
  5145. return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500);
  5146. }
  5147. try {
  5148. $arrStock = (array) DB::table('S002V01TSTAR')
  5149. ->where('STAR_IDST', '=', $idStock)
  5150. ->where('STAR_NULI', '=', $line)
  5151. ->where('STAR_ESTA', '=', 'Activo')
  5152. ->where('INST_NULI', '=', $line)
  5153. ->where('INST_ESTA', '=', 'Activo')
  5154. ->where('UBAR_NULI', '=', $line)
  5155. ->where('UBAR_ESTA', '=', 'Activo')
  5156. ->where('FAMI_NULI', '=', $line)
  5157. ->where('FAMI_ESTA', '=', 'Activo')
  5158. ->where('SUBF_NULI', '=', $line)
  5159. ->where('SUBF_ESTA', '=', 'Activo')
  5160. ->join('S002V01TINST', 'INST_IDIS', '=', 'STAR_IDIS')
  5161. ->join('S002V01TUBAR', 'UBAR_IDST', '=', 'STAR_IDST')
  5162. ->join('S002V01TFAMI', 'FAMI_COFA', '=', 'INST_COFA')
  5163. ->join('S002V01TSUBF', 'SUBF_COSU', '=', 'INST_COSU')
  5164. ->join('S002V01TALMA', 'ALMA_COAL', '=', 'UBAR_COAL')
  5165. ->join('S002V01TAREA', 'AREA_COAR', '=', 'UBAR_COAR')
  5166. ->join('S002V01TNIVE', 'NIVE_CONI', '=', 'UBAR_CONI')
  5167. ->join('S002V01TZONA', 'ZONA_COZO', '=', 'UBAR_COZO')
  5168. ->first([
  5169. 'STAR_COBA AS CODIGO_BARRA',
  5170. 'STAR_FEVE AS FECHA_VENCIMIENTO',
  5171. 'STAR_NUPR AS NUMERO_PROVEEDOR',
  5172. 'STAR_TIAD AS TIPO_ADQUISICION',
  5173. 'STAR_CONS AS CONSUMIBLE',
  5174. 'STAR_REPA AS REPARABLE',
  5175. 'STAR_ALTO AS ALTO',
  5176. 'STAR_ANCH AS ANCHO',
  5177. 'STAR_LARG AS LARGO',
  5178. 'STAR_COLO AS COLOR',
  5179. 'STAR_PRAD AS PRECIO_ADQUIRIDO',
  5180. 'STAR_COMO AS CODIGO_MONEDA',
  5181. 'INST_MODE AS MODELO',
  5182. 'INST_COMO AS CODIGO_MODELO',
  5183. 'INST_STMI AS STOCK_MINIMO',
  5184. 'INST_STMA AS STOCK_MAXIMO',
  5185. 'STAR_NIPE AS NIVEL_PELIGROSIDAD',
  5186. 'INST_IMAG AS IMAGENES',
  5187. 'UBAR_COUB AS CODIGO_EQUIPAMIENTO',
  5188. 'FAMI_COFA AS CODIGO_FAMILIA',
  5189. 'FAMI_NOFA AS NOMBRE_FAMILIA',
  5190. 'SUBF_COSU AS CODIGO_SUBFAMILIA',
  5191. 'SUBF_NOSU AS NOMBRE_SUBFAMILIA',
  5192. 'ALMA_COAL AS CODIGO_ALMACEN',
  5193. 'ALMA_NOAL AS NOMBRE_ALMACEN',
  5194. 'AREA_COAR AS CODIGO_AREA',
  5195. 'AREA_NOAR AS NOMBRE_AREA',
  5196. 'NIVE_CONI AS CODIGO_NIVEL',
  5197. 'NIVE_NONI AS NOMBRE_NIVEL',
  5198. 'ZONA_COZO AS CODIGO_ZONA',
  5199. 'ZONA_NOZO AS NOMBRE_ZONA',
  5200. ]);
  5201. } catch (\Throwable $th) {
  5202. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del stock.', $th->getMessage(), 500);
  5203. }
  5204. if (empty($arrStock)) {
  5205. return $this->responseController->makeResponse(true, 'No existe información de stock.', [], 500);
  5206. }
  5207. $arrImages = array();
  5208. $arrImagesTemp = json_decode($arrStock['IMAGENES']);
  5209. foreach ($arrImagesTemp as $key => $value) {
  5210. $images = $this->encController->encrypt($value);
  5211. $responseDocument = $this->documentManagementController->privateGetPublicDocumentURL($images, $user, $line);
  5212. if ($responseDocument['error']) {
  5213. return $this->responseController->makeResponse(true, $responseDocument['msg'], [], 500);
  5214. }
  5215. $arrImages[] = $responseDocument['response']['public_uri'];
  5216. }
  5217. $arrStock['IMAGENES'] = $arrImages;
  5218. try {
  5219. $infoAdquisition = (array) DB::table('S002V01TINAR')
  5220. ->where('INAR_NULI', '=', $line)
  5221. ->where('INAR_CODI', '=', $arrStock['CODIGO_MODELO'])
  5222. ->where('INAR_MODE', '=', $arrStock['MODELO'])
  5223. ->where('INAR_ESTA', '=', 'Activo')
  5224. ->where('DEAR_NULI', '=', $line)
  5225. ->where('DEAR_NUPR', '=', $arrStock['NUMERO_PROVEEDOR'])
  5226. ->where('DEAR_ESTA', '=', 'Activo')
  5227. ->where('ARTI_NULI', '=', $line)
  5228. ->where('ARTI_COFA', '=', $arrStock['CODIGO_FAMILIA'])
  5229. ->where('ARTI_COSU', '=', $arrStock['CODIGO_SUBFAMILIA'])
  5230. ->where('ARTI_ESTA', '=', 'Activo')
  5231. ->join('S002V01TDEAR', 'DEAR_IDDE', '=', 'INAR_IDDE')
  5232. ->join('S002V01TARTI', 'ARTI_IDAR', '=', 'DEAR_IDAR')
  5233. ->join('S002V01TPROV', 'PROV_NUPR', '=', 'DEAR_NUPR')
  5234. ->first([
  5235. 'DEAR_DESC AS DESCRIPCION_PROVEEDOR',
  5236. 'DEAR_CARA AS CARACTERISTICA_PROVEEDOR',
  5237. 'PROV_NOCO AS NOMBRE_PROVEEDOR',
  5238. ]);
  5239. } catch (\Throwable $th) {
  5240. DB::rollBack();
  5241. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener la información de la adquisición.', $th->getMessage(), 500);
  5242. }
  5243. if (empty($infoAdquisition)) {
  5244. DB::rollBack();
  5245. return $this->responseController->makeResponse(true, 'No se encontró la información de la adquisición.', [], 500);
  5246. }
  5247. $arrGeneralInfo = array_merge($arrStock, $infoAdquisition);
  5248. return $this->responseController->makeResponse(false, 'ÉXITO: Consulta Exitosa', $arrGeneralInfo);
  5249. }
  5250. public function saveInfoStock(Request $request, $idStock) {
  5251. $valitador = Validator::make($request->all(), [
  5252. 'ALTO' => 'string|nullable',
  5253. 'ANCHO' => 'string|nullable',
  5254. 'LARGO' => 'string|nullable',
  5255. 'COLOR' => 'string|nullable',
  5256. 'NIVEL_PELIGROSIDAD' => 'string|nullable',
  5257. 'TASA_ROTACION' => 'string|nullable',
  5258. 'USUARIO' => 'required|string',
  5259. 'NUMERO_LINEA' => 'required|integer',
  5260. ]);
  5261. if ($valitador->fails()) {
  5262. return $this->responseController->makeResponse(
  5263. true,
  5264. "ERR_DOCUMENT_ORDER_REG000: Se encontraron uno o más errores.",
  5265. $this->responseController->makeErrors($valitador->errors()->messages()),
  5266. 401
  5267. );
  5268. }
  5269. DB::beginTransaction();
  5270. $requestData = $request->all();
  5271. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  5272. if ($arrResponseCheckUser['error']) {
  5273. DB::rollBack();
  5274. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  5275. }
  5276. $user = $arrResponseCheckUser['response'];
  5277. $idStock = $this->encController->decrypt($idStock);
  5278. if (is_null($idStock)) {
  5279. DB::rollBack();
  5280. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el ID de la información.', [], 401);
  5281. }
  5282. try {
  5283. $validateExists = DB::table('S002V01TSTAR')
  5284. ->where('STAR_IDST', '=', $idStock)
  5285. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  5286. ->where('STAR_ESTA', '=', 'Activo')
  5287. ->exists();
  5288. } catch (\Throwable $th) {
  5289. DB::rollBack();
  5290. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar el ID del stock.', $th->getMessage(), 500);
  5291. }
  5292. if (!$validateExists) {
  5293. DB::rollBack();
  5294. return $this->responseController->makeResponse(true, 'El número de stock no existe.', [], 500);
  5295. }
  5296. $now = $this->functionsController->now();
  5297. $currentDate = $now->toDateTimeString();
  5298. try {
  5299. $validateInsert = DB::table('S002V01TSTAR')
  5300. ->where('STAR_IDST', '=', $idStock)
  5301. ->where('STAR_NULI', '=', $requestData['NUMERO_LINEA'])
  5302. ->where('STAR_ESTA', '=', 'Activo')
  5303. ->update([
  5304. 'STAR_ALTO' => $requestData['ALTO'],
  5305. 'STAR_ANCH' => $requestData['ANCHO'],
  5306. 'STAR_LARG' => $requestData['LARGO'],
  5307. 'STAR_COLO' => $requestData['COLOR'],
  5308. 'STAR_NIPE' => $requestData['NIVEL_PELIGROSIDAD'],
  5309. 'STAR_USMO' => $user,
  5310. 'STAR_FEMO' => $currentDate,
  5311. 'STAR_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  5312. ]);
  5313. } catch (\Throwable $th) {
  5314. DB::rollBack();
  5315. return $this->responseController->makeResponse(true, 'Ocurrió un error al insertar los datos del stock.', $th->getMessage(), 500);
  5316. }
  5317. if (!$validateInsert) {
  5318. DB::rollBack();
  5319. return $this->responseController->makeResponse(true, 'No se pudo insertar los datos del stock.', [], 500);
  5320. }
  5321. DB::commit();
  5322. return $this->responseController->makeResponse(false, 'ÉXITO: Registro Exitoso');
  5323. }
  5324. }