StockController.php 301 KB

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