ProcessManagementController.php 145 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\DB;
  5. use Illuminate\Support\Facades\Validator;
  6. use ElephantIO\Client;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Facades\Log;
  9. class ProcessManagementController extends Controller
  10. {
  11. private $responseController;
  12. private $encController;
  13. private $resourcesController;
  14. private $documentManagementController;
  15. private $functionsController;
  16. private $notificationsController;
  17. private $socketClient;
  18. public function __construct()
  19. {
  20. $this->responseController = new ResponseController();
  21. $this->encController = new EncryptionController();
  22. $this->resourcesController = new ResourcesController();
  23. $this->documentManagementController = new DocumentManagementController();
  24. $this->functionsController = new FunctionsController();
  25. $this->notificationsController = new NotificationsController();
  26. $url = 'http://localhost:3200';
  27. $this->socketClient = new Client(Client::engine(Client::CLIENT_4X, $url));
  28. $this->socketClient->initialize();
  29. $this->socketClient->of('/');
  30. }
  31. //Submódulo de gestión de workflows
  32. public function registerWorkflow(Request $request)
  33. {
  34. $validator = Validator::make($request->all(), [
  35. 'NOMBRE_WORKFLOW' => 'required|string|max:50',
  36. 'DESCRIPCION' => 'required|string',
  37. 'USUARIO' => 'required|string',
  38. 'NUMERO_LINEA' => 'required|integer',
  39. ]);
  40. if ($validator->fails()) {
  41. return $this->responseController->makeResponse(
  42. true,
  43. "Se encontraron uno o más errores.",
  44. $this->responseController->makeErrors($validator->errors()->messages()),
  45. 401
  46. );
  47. }
  48. DB::beginTransaction();
  49. $requestData = $request->all();
  50. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  51. if ($arrResponseCheckUser['error']) {
  52. DB::rollBack();
  53. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  54. }
  55. $user = $arrResponseCheckUser['response'];
  56. $now = $this->functionsController->now();
  57. $currentDate = $now->toDateTimeString();
  58. try {
  59. $workflowId = DB::table('S002V01TWORK')->insertGetId([
  60. 'WORK_NULI' => $requestData['NUMERO_LINEA'],
  61. 'WORK_NOWO' => $requestData['NOMBRE_WORKFLOW'],
  62. 'WORK_DESC' => $requestData['DESCRIPCION'],
  63. 'WORK_PRED' => false,
  64. 'WORK_ESTA' => 'Borrador',
  65. 'WORK_VERS' => 1,
  66. 'WORK_USRE' => $user,
  67. 'WORK_FERE' => $currentDate,
  68. 'WORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  69. ]);
  70. } catch (\Throwable $th) {
  71. DB::rollBack();
  72. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el workflow.", $th->getMessage(), 500);
  73. }
  74. DB::commit();
  75. $this->functionsController->registerActivity(
  76. $requestData['NUMERO_LINEA'],
  77. 'S002V01M03GEPR',
  78. 'S002V01F01GFTR',
  79. 'S002V01P01PCIN',
  80. 'Registro',
  81. "El usuario (" . $user . ") registró un flujo de trabajo.",
  82. $user,
  83. $this->functionsController->now(),
  84. null,
  85. $workflowId
  86. );
  87. return $this->responseController->makeResponse(false, "ÉXITO: Workflow registrado exitosamente", ['ID_WORKFLOW' => $workflowId]);
  88. }
  89. public function registerWorkflowTask(Request $request)
  90. {
  91. $validator = Validator::make($request->all(), [
  92. 'ID_WORKFLOW' => 'required|integer',
  93. 'NOMBRE_TAREA' => 'required|string',
  94. 'DESCRIPCION' => 'required|string',
  95. 'SECUENCIA' => 'required|integer',
  96. 'REQUIERE_VALIDACION' => 'nullable|boolean',
  97. 'USUARIOS_NOTIFICAR' => 'array',
  98. 'USUARIO_VALIDADOR' => 'array',
  99. 'REGLAS_VALIDACION' => 'string|in:Esperar,Ejecutar,NA',
  100. 'ID_FUNCION' => 'nullable|string',
  101. 'ID_MODULO' => 'nullable|string',
  102. 'ID_SUBMODULO' => 'nullable|string',
  103. 'ID_WORKFLOW_EJECUTAR' => 'nullable|integer',
  104. 'INTERVALO' => 'nullable|integer',
  105. 'UNIDAD' => 'nullable|string',
  106. 'USUARIO' => 'required|string',
  107. 'NUMERO_LINEA' => 'required|integer',
  108. ]);
  109. Log::info($request);
  110. if ($validator->fails()) {
  111. return $this->responseController->makeResponse(
  112. true,
  113. "Se encontraron uno o más errores.",
  114. $this->responseController->makeErrors($validator->errors()->messages()),
  115. 401
  116. );
  117. }
  118. DB::beginTransaction();
  119. $requestData = $request->all();
  120. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  121. if ($arrResponseCheckUser['error']) {
  122. DB::rollBack();
  123. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  124. }
  125. $decryptMod = $this->encController->decrypt($requestData['ID_MODULO']);
  126. if (!$decryptMod) {
  127. return $this->responseController->makeResponse(true, "ID_MODULO no fue desencriptada correctamente", [], 400);
  128. }
  129. $decryptSubMod = null;
  130. if (!empty($requestData['ID_SUBMODULO'])) {
  131. $decryptSubMod = $this->encController->decrypt($requestData['ID_SUBMODULO']);
  132. if (!$decryptSubMod) {
  133. return $this->responseController->makeResponse(true, "ID_SUBMODULO no fue desencriptada correctamente", [], 400);
  134. }
  135. }
  136. $user = $arrResponseCheckUser['response'];
  137. $now = $this->functionsController->now();
  138. $currentDate = $now->toDateTimeString();
  139. Log::info($requestData);
  140. $informacionExtra = $this->processExtraInfo(
  141. $requestData['REGLAS_VALIDACION'],
  142. $requestData
  143. );
  144. try {
  145. $taskId = DB::table('S002V01TTAWO')->insertGetId([
  146. 'TAWO_NULI' => $requestData['NUMERO_LINEA'],
  147. 'TAWO_IDWO' => $requestData['ID_WORKFLOW'],
  148. 'TAWO_NOTA' => $requestData['NOMBRE_TAREA'],
  149. 'TAWO_DESC' => $requestData['DESCRIPCION'],
  150. 'TAWO_SECU' => $requestData['SECUENCIA'],
  151. 'TAWO_RQVA' => $requestData['REQUIERE_VALIDACION'],
  152. 'TAWO_USAN' => json_encode($requestData['USUARIOS_NOTIFICAR']),
  153. 'TAWO_USAV' => json_encode($requestData['USUARIO_VALIDADOR']),
  154. 'TAWO_REVA' => $requestData['REGLAS_VALIDACION'],
  155. 'TAWO_IDFU' => $requestData['ID_FUNCION'],
  156. 'TAWO_IDMO' => $decryptMod,
  157. 'TAWO_IDSM' => $decryptSubMod,
  158. 'TAWO_INEX' => $informacionExtra,
  159. 'TAWO_ESTA' => 'Borrador',
  160. 'TAWO_USRE' => $user,
  161. 'TAWO_FERE' => $currentDate,
  162. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  163. ]);
  164. } catch (\Throwable $th) {
  165. DB::rollBack();
  166. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la tarea.", $th->getMessage(), 500);
  167. }
  168. DB::commit();
  169. $this->functionsController->registerActivity(
  170. $requestData['NUMERO_LINEA'],
  171. 'S002V01M03GEPR',
  172. 'S002V01F01GETA',
  173. 'S002V01P01PCIN',
  174. 'Registro',
  175. "El usuario (" . $user . ") registró una tarea.",
  176. $user,
  177. $this->functionsController->now(),
  178. null,
  179. $requestData['ID_WORKFLOW'] //EN ESTE ESPECIFICO CASO ID_WORKFLOW ES EL VALOR ANCLA
  180. );
  181. return $this->responseController->makeResponse(false, "ÉXITO: Tarea registrada exitosamente", ['ID_TAREA' => $taskId]);
  182. }
  183. public function getWorkflows($user, $line)
  184. {
  185. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  186. if ($arrResponseCheckUser['error']) {
  187. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  188. }
  189. try {
  190. $arrWorkflows = DB::Table('v_workflows_modulos_simple')->get();
  191. $arrWorkflows = json_decode(json_encode($arrWorkflows), true);
  192. } catch (\Throwable $th) {
  193. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los flujos de trabajo.", $th->getMessage(), 500);
  194. }
  195. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWorkflows);
  196. }
  197. public function getActiveWorkflows($user, $line)
  198. {
  199. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  200. if ($arrResponseCheckUser['error']) {
  201. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  202. }
  203. try {
  204. $arrWorkflows = DB::table('S002V01TWORK')
  205. ->where('WORK_NULI', '=', $line)
  206. ->where('WORK_ESTA', '=', 'Activo')
  207. ->get([
  208. 'WORK_IDWO AS ID_WORKFLOW',
  209. 'WORK_NOWO AS NOMBRE_WORKFLOW',
  210. 'WORK_DESC AS DESCRIPCION'
  211. ]);
  212. $arrWorkflows = json_decode(json_encode($arrWorkflows), true);
  213. } catch (\Throwable $th) {
  214. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los flujos de trabajo activos.", $th->getMessage(), 500);
  215. }
  216. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWorkflows);
  217. }
  218. public function getWorkflowById($idWorkflow, $user, $line)
  219. {
  220. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  221. if ($arrResponseCheckUser['error']) {
  222. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  223. }
  224. /*
  225. try {
  226. $idWorkflow = $this->encController->decrypt($idWorkflow);
  227. } catch (\Throwable $th) {
  228. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  229. }*/
  230. try {
  231. $result = DB::select("SELECT fn_get_workflow_by_id(?) as workflow_data", [$idWorkflow]);
  232. $workflowData = json_decode($result[0]->workflow_data, true);
  233. $workflow = $workflowData['workflow'];
  234. $formattedWorkflow = [
  235. 'ID_WORKFLOW' => $workflow['ID_WORKFLOW'],
  236. 'NOMBRE_WORKFLOW' => $workflow['NOMBRE_WORKFLOW'],
  237. 'DESCRIPCION' => $workflow['DESCRIPCION'],
  238. 'PREDETERMINADO' => $workflow['PREDETERMINADO'],
  239. 'ESTADO' => $workflow['ESTADO'],
  240. 'VERSION' => $workflow['VERSION'],
  241. 'INFORMACION_EXTRA' => json_encode($workflow['INFORMACION_EXTRA']),
  242. 'MODULOS' => $workflowData['MODULOS'],
  243. 'USUARIO_REGISTRO' => $workflow['USUARIO_REGISTRO'],
  244. 'FECHA_REGISTRO' => $workflow['FECHA_REGISTRO'],
  245. 'USUARIO_MODIFICA' => $workflow['USUARIO_MODIFICA'],
  246. 'FECHA_MODIFICA' => $workflow['FECHA_MODIFICA']
  247. ];
  248. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate([$formattedWorkflow], $line);
  249. if ($responseCheckLatestUpdate['error']) {
  250. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  251. }
  252. $formattedWorkflow = $responseCheckLatestUpdate['response'][0];
  253. } catch (\Throwable $th) {
  254. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los flujos de trabajo.", $th->getMessage(), 500);
  255. }
  256. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $formattedWorkflow);
  257. }
  258. public function updateWorkflow(Request $request, $idWorkflow)
  259. {
  260. $validator = Validator::make($request->all(), [
  261. 'NOMBRE_WORKFLOW' => 'required|string|max:50',
  262. 'DESCRIPCION' => 'required|string',
  263. 'COMENTARIO_CAMBIO' => 'nullable|string',
  264. 'USUARIO' => 'required|string',
  265. 'NUMERO_LINEA' => 'required|integer',
  266. ]);
  267. if ($validator->fails()) {
  268. return $this->responseController->makeResponse(
  269. true,
  270. "Se encontraron uno o más errores.",
  271. $this->responseController->makeErrors($validator->errors()->messages()),
  272. 401
  273. );
  274. }
  275. DB::beginTransaction();
  276. $requestData = $request->all();
  277. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  278. if ($arrResponseCheckUser['error']) {
  279. DB::rollBack();
  280. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  281. }
  282. $user = $arrResponseCheckUser['response'];
  283. /*
  284. try {
  285. $idWorkflow = $this->encController->decrypt($idWorkflow);
  286. } catch (\Throwable $th) {
  287. DB::rollBack();
  288. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del workflow', $th->getMessage(), 406);
  289. }*/
  290. try {
  291. $currentWorkflow = (array) DB::table('S002V01TWORK')
  292. ->where('WORK_IDWO', '=', $idWorkflow)
  293. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  294. ->first([
  295. 'WORK_NOWO',
  296. 'WORK_DESC',
  297. 'WORK_VERS'
  298. ]);
  299. } catch (\Throwable $th) {
  300. DB::rollBack();
  301. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el workflow.", $th->getMessage(), 500);
  302. }
  303. if (empty($currentWorkflow)) {
  304. DB::rollBack();
  305. return $this->responseController->makeResponse(true, "El workflow no existe.", [], 404);
  306. }
  307. $now = $this->functionsController->now();
  308. $currentDate = $now->toDateTimeString();
  309. $newVersion = $currentWorkflow['WORK_VERS'] + 1;
  310. // try {
  311. // DB::table('S002V01THWORK')->insert([
  312. // 'HWORK_IDWO' => $idWorkflow,
  313. // 'HWORK_VERS' => $currentWorkflow['WORK_VERS'],
  314. // 'HWORK_NOWO' => $currentWorkflow['WORK_NOWO'],
  315. // 'HWORK_DESC' => $currentWorkflow['WORK_DESC'],
  316. // 'HWORK_COME' => $requestData['COMENTARIO_CAMBIO'],
  317. // 'HWORK_USRE' => $user,
  318. // 'HWORK_FERE' => $currentDate,
  319. // 'HWORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  320. // ]);
  321. // } catch (\Throwable $th) {
  322. // DB::rollBack();
  323. // return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el historial.", $th->getMessage(), 500);
  324. // }
  325. try {
  326. $validateUpdate = DB::table('S002V01TWORK')
  327. ->where('WORK_IDWO', '=', $idWorkflow)
  328. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  329. ->update([
  330. 'WORK_NOWO' => $requestData['NOMBRE_WORKFLOW'],
  331. 'WORK_DESC' => $requestData['DESCRIPCION'],
  332. 'WORK_VERS' => $newVersion,
  333. 'WORK_USMO' => $user,
  334. 'WORK_FEMO' => $currentDate,
  335. 'WORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  336. ]);
  337. } catch (\Throwable $th) {
  338. DB::rollBack();
  339. return $this->responseController->makeResponse(true, "Ocurrió un error al actualizar el workflow.", $th->getMessage(), 500);
  340. }
  341. if (!$validateUpdate) {
  342. DB::rollBack();
  343. return $this->responseController->makeResponse(true, "No se pudo actualizar el workflow.", [], 500);
  344. }
  345. DB::commit();
  346. return $this->responseController->makeResponse(false, "ÉXITO: Workflow actualizado exitosamente");
  347. }
  348. public function changeWorkflowStatus(Request $request)
  349. {
  350. $validator = Validator::make($request->all(), [
  351. 'ESTADO' => 'required|string|in:Activo,Eliminado',
  352. 'COMENTARIO_CAMBIO' => 'nullable|string',
  353. 'USUARIO' => 'required|string',
  354. 'NUMERO_LINEA' => 'required|integer',
  355. 'ID_WORKFLOW' => 'required|integer'
  356. ]);
  357. if ($validator->fails()) {
  358. return $this->responseController->makeResponse(
  359. true,
  360. "Se encontraron uno o más errores.",
  361. $this->responseController->makeErrors($validator->errors()->messages()),
  362. 401
  363. );
  364. }
  365. DB::beginTransaction();
  366. $requestData = $request->all();
  367. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  368. if ($arrResponseCheckUser['error']) {
  369. DB::rollBack();
  370. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  371. }
  372. $user = $arrResponseCheckUser['response'];
  373. try {
  374. $currentWorkflow = (array) DB::table('S002V01TWORK')
  375. ->where('WORK_IDWO', '=', $requestData['ID_WORKFLOW'])
  376. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  377. ->first([
  378. 'WORK_NOWO',
  379. 'WORK_DESC',
  380. 'WORK_ESTA',
  381. 'WORK_VERS'
  382. ]);
  383. } catch (\Throwable $th) {
  384. DB::rollBack();
  385. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el workflow.", $th->getMessage(), 500);
  386. }
  387. if (empty($currentWorkflow)) {
  388. DB::rollBack();
  389. return $this->responseController->makeResponse(true, "El workflow no existe.", [], 404);
  390. }
  391. if ($currentWorkflow['WORK_ESTA'] === $requestData['ESTADO']) {
  392. DB::rollBack();
  393. return $this->responseController->makeResponse(true, "El workflow ya tiene el estado solicitado.", [], 400);
  394. }
  395. $now = $this->functionsController->now();
  396. $currentDate = $now->toDateTimeString();
  397. // try {
  398. // DB::table('S002V01THWORK')->insert([
  399. // 'HWORK_IDWO' => $requestData['ID_WORKFLOW'],
  400. // 'HWORK_VERS' => $currentWorkflow['WORK_VERS'],
  401. // 'HWORK_NOWO' => $currentWorkflow['WORK_NOWO'],
  402. // 'HWORK_DESC' => $currentWorkflow['WORK_DESC'],
  403. // 'HWORK_COME' => $requestData['COMENTARIO_CAMBIO'] ?? 'Cambio de estado a: ' . $requestData['ESTADO'],
  404. // 'HWORK_USRE' => $user,
  405. // 'HWORK_FERE' => $currentDate,
  406. // 'HWORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  407. // ]);
  408. // } catch (\Throwable $th) {
  409. // DB::rollBack();
  410. // return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el historial.", $th->getMessage(), 500);
  411. // }
  412. // try {
  413. // DB::table('S002V01THEWO')->insert([
  414. // 'HEWO_IDWO' => $requestData['ID_WORKFLOW'],
  415. // 'HEWO_ESTA' => $requestData['ESTADO'],
  416. // 'HEWO_USRE' => $user,
  417. // 'HEWO_FECH' => $currentDate,
  418. // 'HEWO_COME' => $requestData['COMENTARIO_CAMBIO'],
  419. // ]);
  420. // } catch (\Throwable $th) {
  421. // DB::rollBack();
  422. // return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el historial de estados.", $th->getMessage(), 500);
  423. // }
  424. // Actualizar estado del workflow
  425. try {
  426. $validateUpdate = DB::table('S002V01TWORK')
  427. ->where('WORK_IDWO', '=', $requestData['ID_WORKFLOW'])
  428. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  429. ->update([
  430. 'WORK_ESTA' => $requestData['ESTADO'],
  431. 'WORK_USMO' => $user,
  432. 'WORK_FEMO' => $currentDate,
  433. 'WORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  434. ]);
  435. } catch (\Throwable $th) {
  436. DB::rollBack();
  437. return $this->responseController->makeResponse(true, "Ocurrió un error al cambiar el estado del workflow.", $th->getMessage(), 500);
  438. }
  439. if (!$validateUpdate) {
  440. DB::rollBack();
  441. return $this->responseController->makeResponse(true, "No se pudo cambiar el estado del workflow.", [], 500);
  442. }
  443. // Actualizar estado de las tareas relacionadas
  444. $taskStatus = null;
  445. if ($currentWorkflow['WORK_ESTA'] === 'Borrador' && $requestData['ESTADO'] === 'Activo') {
  446. $taskStatus = 'Activo';
  447. } elseif ($currentWorkflow['WORK_ESTA'] === 'Activo' && $requestData['ESTADO'] === 'Eliminado') {
  448. $taskStatus = 'Eliminado';
  449. }
  450. if ($taskStatus) {
  451. try {
  452. DB::table('S002V01TTAWO')
  453. ->where('TAWO_IDWO', '=', $requestData['ID_WORKFLOW'])
  454. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  455. ->update([
  456. 'TAWO_ESTA' => $taskStatus,
  457. 'TAWO_USMO' => $user,
  458. 'TAWO_FEMO' => $currentDate,
  459. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  460. ]);
  461. } catch (\Throwable $th) {
  462. DB::rollBack();
  463. return $this->responseController->makeResponse(true, "Ocurrió un error al actualizar el estado de las tareas.", $th->getMessage(), 500);
  464. }
  465. }
  466. DB::commit();
  467. $this->functionsController->registerActivity(
  468. $requestData['NUMERO_LINEA'],
  469. 'S002V01M03GEPR',
  470. 'S002V01F01GSFT',
  471. 'S002V01P01PCIN',
  472. 'Registro',
  473. "El usuario (" . $user . ") cambio el estado de un flujo de trabajo.",
  474. $user,
  475. $this->functionsController->now(),
  476. null,
  477. $request['ID_WORKFLOW']
  478. );
  479. return $this->responseController->makeResponse(false, "ÉXITO: Estado del workflow cambiado exitosamente");
  480. }
  481. public function getWorkflowHistory($idWorkflow, $user, $line)
  482. {
  483. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  484. if ($arrResponseCheckUser['error']) {
  485. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  486. }
  487. /*
  488. try {
  489. $idWorkflow = $this->encController->decrypt($idWorkflow);
  490. } catch (\Throwable $th) {
  491. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del workflow', $th->getMessage(), 406);
  492. }*/
  493. try {
  494. $arrHistory = DB::table('S002V01THWORK')
  495. ->where('HWORK_IDWO', '=', $idWorkflow)
  496. ->orderBy('HWORK_VERS', 'DESC')
  497. ->get([
  498. 'HWORK_VERS AS VERSION',
  499. 'HWORK_NOWO AS NOMBRE',
  500. 'HWORK_DESC AS DESCRIPCION',
  501. 'HWORK_COME AS COMENTARIO',
  502. 'HWORK_USRE AS USUARIO_CAMBIO',
  503. 'HWORK_FERE AS FECHA_CAMBIO'
  504. ]);
  505. $arrHistory = json_decode(json_encode($arrHistory), true);
  506. } catch (\Throwable $th) {
  507. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el historial del workflow.", $th->getMessage(), 500);
  508. }
  509. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrHistory, $line);
  510. if ($responseCheckLatestUpdate['error']) {
  511. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  512. }
  513. $arrHistory = $responseCheckLatestUpdate['response'];
  514. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrHistory);
  515. }
  516. public function getTaskByWorkflow($idWorkflow, $user, $line)
  517. {
  518. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  519. if ($arrResponseCheckUser['error']) {
  520. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  521. }
  522. /*
  523. $idWorkflow = $this->encController->decrypt($idWorkflow);
  524. if (is_null($idWorkflow)) {
  525. return $this->responseController->makeResponse(true, 'El flujo de trabajo no está encriptado correctamente.', [], 500);
  526. }*/
  527. try {
  528. $arrTask = DB::table('S002V01TTAWO')->select([
  529. 'TAWO_IDTA AS ID_TAREA',
  530. 'TAWO_NOTA AS NOMBRE_TAREA',
  531. 'TAWO_DESC AS DESCRIPCION',
  532. 'TAWO_SECU AS SECUENCIA',
  533. 'TAWO_RQVA AS REQUIERE_VALIDACION',
  534. 'TAWO_REVA AS REGLA_VALIDACION',
  535. 'TAWO_ESTA AS ESTADO'
  536. ])->where([
  537. ['TAWO_IDWO', '=', $idWorkflow],
  538. ['TAWO_NULI', '=', $line],
  539. ])->get()->all();
  540. } catch (\Throwable $th) {
  541. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener las tareas del flujo de trabajo.', [], 500);
  542. }
  543. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrTask);
  544. }
  545. public function getTaskById($idTask, $user, $line)
  546. {
  547. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  548. if ($arrResponseCheckUser['error']) {
  549. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  550. }
  551. /*
  552. $idTask = $this->encController->decrypt($idTask);
  553. if (is_null($idTask)) {
  554. return $this->responseController->makeResponse(true, 'El identificador no se encuentra encriptado correctamente.', [], 401);
  555. }*/
  556. try {
  557. $arrTask = DB::table('S002V01TTAWO as TAWO')
  558. ->leftJoin('S002V01TMODU as TMODU', 'TMODU.MODU_IDMO', '=', 'TAWO.TAWO_IDMO')
  559. ->leftJoin('S002V01TFUNC as TFUNC', 'TFUNC.FUNC_IDFU', '=', 'TAWO.TAWO_IDFU')
  560. ->leftJoin('S002V01TSUBM as TSUBM', 'TSUBM.SUBM_IDSM', '=', 'TAWO.TAWO_IDSM')
  561. ->select([
  562. 'TAWO.TAWO_IDTA as ID_TAREA',
  563. 'TAWO.TAWO_NULI as NUMERO_LINEA',
  564. 'TAWO.TAWO_IDWO as ID_WORKFLOW',
  565. 'TAWO.TAWO_NOTA as NOMBRE_TAREA',
  566. 'TAWO.TAWO_DESC as DESCRIPCION',
  567. 'TAWO.TAWO_SECU as SECUENCIA',
  568. 'TAWO.TAWO_RQVA as REQUIERE_VALIDACION',
  569. 'TAWO.TAWO_USAN as USUARIOS_NOTIFICAR_RAW',
  570. 'TAWO.TAWO_USAV as USUARIO_VALIDADOR_RAW',
  571. 'TAWO.TAWO_REVA as REGLAS_VALIDACION',
  572. 'TFUNC.FUNC_NOMB as ID_FUNCION',
  573. 'TMODU.MODU_NOMO as ID_MODULO',
  574. 'TSUBM.SUBM_NOMB as ID_SUBMODULO',
  575. 'TAWO.TAWO_ESTA as ESTADO',
  576. 'TAWO.TAWO_INEX as INFORMACION_EXTRA',
  577. 'TAWO.TAWO_USRE as USUARIO_REGISTRO',
  578. 'TAWO.TAWO_FERE as FECHA_REGISTRO',
  579. 'TAWO.TAWO_USMO as USUARIO_MODIFICA',
  580. 'TAWO.TAWO_FEMO as FECHA_MODIFICA',
  581. 'TAWO.TAWO_FEAR as FECHA_ACTUALIZACION'
  582. ])
  583. ->where('TAWO.TAWO_IDTA', $idTask)
  584. ->where('TAWO.TAWO_NULI', $line)
  585. ->first();
  586. if (empty($arrTask)) {
  587. return $this->responseController->makeResponse(true, "La tarea no existe.", [], 500);
  588. }
  589. $arrTask = (array) $arrTask;
  590. // Procesar usuarios notificadores
  591. $usuariosNotificar = [];
  592. if (!empty($arrTask['USUARIOS_NOTIFICAR_RAW'])) {
  593. $idsNotificar = json_decode($arrTask['USUARIOS_NOTIFICAR_RAW'], true) ?: [];
  594. if (!empty($idsNotificar)) {
  595. $usuarios = DB::table('S002V01TUSUA')
  596. ->whereIn('USUA_IDUS', $idsNotificar)
  597. ->get(['USUA_IDUS', 'USUA_NOMB']);
  598. foreach ($usuarios as $usuario) {
  599. $usuariosNotificar[] = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  600. }
  601. }
  602. }
  603. $arrTask['USUARIOS_NOTIFICAR'] = implode(', ', $usuariosNotificar);
  604. // Procesar usuarios validadores
  605. $usuariosValidador = [];
  606. if (!empty($arrTask['USUARIO_VALIDADOR_RAW'])) {
  607. $idsValidador = json_decode($arrTask['USUARIO_VALIDADOR_RAW'], true) ?: [];
  608. if (!empty($idsValidador)) {
  609. $usuarios = DB::table('S002V01TUSUA')
  610. ->whereIn('USUA_IDUS', $idsValidador)
  611. ->get(['USUA_IDUS', 'USUA_NOMB']);
  612. foreach ($usuarios as $usuario) {
  613. $usuariosValidador[] = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  614. }
  615. }
  616. }
  617. $arrTask['USUARIO_VALIDADOR'] = implode(', ', $usuariosValidador);
  618. // Remover campos temporales
  619. unset($arrTask['USUARIOS_NOTIFICAR_RAW'], $arrTask['USUARIO_VALIDADOR_RAW']);
  620. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate([$arrTask], $line);
  621. if ($responseCheckLatestUpdate['error']) {
  622. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  623. }
  624. $arrTask = $responseCheckLatestUpdate['response'][0];
  625. } catch (\Throwable $th) {
  626. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas.", $th->getMessage(), 500);
  627. }
  628. // Extraer información extra según regla de validación
  629. $idWorkflowEjecutar = null;
  630. $intervalo = null;
  631. $unidad = null;
  632. if (!empty($arrTask['INFORMACION_EXTRA'])) {
  633. $infoExtra = json_decode($arrTask['INFORMACION_EXTRA'], true);
  634. if ($arrTask['REGLAS_VALIDACION'] === 'Esperar' && $infoExtra) {
  635. $intervalo = $infoExtra['intervalo'] ?? null;
  636. $unidad = $infoExtra['unidad'] ?? null;
  637. } elseif ($arrTask['REGLAS_VALIDACION'] === 'Ejecutar' && $infoExtra) {
  638. $idWorkflowEjecutar = $infoExtra['workflow_id'] ?? null;
  639. }
  640. }
  641. $arrTask['ID_WORKFLOW_EJECUTAR'] = $idWorkflowEjecutar;
  642. $arrTask['INTERVALO'] = $intervalo;
  643. $arrTask['UNIDAD'] = $unidad;
  644. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrTask);
  645. }
  646. public function getTaskConfiguration($idTask, $user, $line)
  647. {
  648. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  649. if ($arrResponseCheckUser['error']) {
  650. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  651. }
  652. // $idTask = $this->encController->decrypt($idTask);
  653. // if (is_null($idTask)) {
  654. // return $this->responseController->makeResponse(true, 'El identificador no se encuentra encriptado correctamente.', [], 401);
  655. // }
  656. try {
  657. $arrTask = (array) DB::select("
  658. SELECT
  659. TAWO.TAWO_IDWO AS ID_WORKFLOW,
  660. TAWO.TAWO_NOTA AS NOMBRE_TAREA,
  661. TAWO.TAWO_DESC AS DESCRIPCION,
  662. TAWO.TAWO_SECU AS SECUENCIA,
  663. TAWO.TAWO_RQVA AS REQUIERE_VALIDACION,
  664. TAWO.TAWO_USAN AS USUARIOS_NOTIFICAR,
  665. TAWO.TAWO_USAV AS USUARIO_VALIDADOR,
  666. TAWO.TAWO_REVA AS REGLAS_VALIDACION,
  667. TAWO.TAWO_IDFU AS ID_FUNCION,
  668. TFUNC.FUNC_NOMB AS NOMBRE_FUNCION,
  669. TAWO.TAWO_IDMO AS ID_MODULO,
  670. TMODU.MODU_NOMO AS NOMBRE_MODULO,
  671. TAWO.TAWO_IDSM AS ID_SUBMODULO,
  672. TSUBM.SUBM_NOMB AS NOMBRE_SUBMODULO,
  673. TAWO.TAWO_INEX AS INFORMACION_EXTRA
  674. FROM S002V01TTAWO AS TAWO
  675. LEFT JOIN S002V01TFUNC AS TFUNC ON TFUNC.FUNC_IDFU = TAWO.TAWO_IDFU
  676. LEFT JOIN S002V01TMODU AS TMODU ON TMODU.MODU_IDMO = TAWO.TAWO_IDMO
  677. LEFT JOIN S002V01TSUBM AS TSUBM ON TSUBM.SUBM_IDSM = TAWO.TAWO_IDSM
  678. WHERE TAWO.TAWO_IDTA = ?
  679. AND TAWO.TAWO_NULI = ?
  680. ", [$idTask, $line]);
  681. $arrTask = !empty($arrTask) ? (array) $arrTask[0] : [];
  682. } catch (\Throwable $th) {
  683. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener la configuración de la tarea.", $th->getMessage(), 500);
  684. }
  685. if (empty($arrTask)) {
  686. return $this->responseController->makeResponse(true, "La tarea no existe.", [], 404);
  687. }
  688. // Extraer información extra según regla de validación
  689. $idWorkflowEjecutar = null;
  690. $intervalo = null;
  691. $unidad = null;
  692. if (!empty($arrTask['INFORMACION_EXTRA'])) {
  693. $infoExtra = json_decode($arrTask['INFORMACION_EXTRA'], true);
  694. if ($arrTask['REGLAS_VALIDACION'] === 'Esperar' && $infoExtra) {
  695. $intervalo = $infoExtra['intervalo'] ?? null;
  696. $unidad = $infoExtra['unidad'] ?? null;
  697. } elseif ($arrTask['REGLAS_VALIDACION'] === 'Ejecutar' && $infoExtra) {
  698. $idWorkflowEjecutar = $infoExtra['id_workflow'] ?? null;
  699. }
  700. }
  701. // Formatear respuesta
  702. $response = [
  703. 'NOMBRE_TAREA' => $arrTask['NOMBRE_TAREA'],
  704. 'DESCRIPCION' => $arrTask['DESCRIPCION'],
  705. 'SECUENCIA' => $arrTask['SECUENCIA'],
  706. 'REQUIERE_VALIDACION' => $arrTask['REQUIERE_VALIDACION'],
  707. 'USUARIOS_NOTIFICAR' => json_decode($arrTask['USUARIOS_NOTIFICAR'], true) ?: [],
  708. 'USUARIO_VALIDADOR' => json_decode($arrTask['USUARIO_VALIDADOR'], true) ?: [],
  709. 'REGLAS_VALIDACION' => $arrTask['REGLAS_VALIDACION'],
  710. 'MODULO' => [
  711. 'id' => $arrTask['ID_MODULO'] ? $this->encController->encrypt($arrTask['ID_MODULO']) : null,
  712. 'nombre' => $arrTask['NOMBRE_MODULO']
  713. ],
  714. 'SUBMODULO' => $arrTask['ID_SUBMODULO'] ? [
  715. 'id' => $this->encController->encrypt($arrTask['ID_SUBMODULO']),
  716. 'nombre' => $arrTask['NOMBRE_SUBMODULO']
  717. ] : null,
  718. 'FUNCION' => [
  719. 'id' => $arrTask['ID_FUNCION'],
  720. 'nombre' => $arrTask['NOMBRE_FUNCION']
  721. ],
  722. 'ID_WORKFLOW_EJECUTAR' => $idWorkflowEjecutar,
  723. 'INTERVALO' => $intervalo,
  724. 'UNIDAD' => $unidad
  725. ];
  726. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $response);
  727. }
  728. public function updateWorkflowTask(Request $request, $idTask)
  729. {
  730. Log::info($request);
  731. $validator = Validator::make($request->all(), [
  732. 'NOMBRE_TAREA' => 'required|string',
  733. 'DESCRIPCION' => 'required|string',
  734. 'SECUENCIA' => 'required|integer',
  735. 'REQUIERE_VALIDACION' => 'nullable|boolean',
  736. 'USUARIOS_NOTIFICAR' => 'array',
  737. 'USUARIO_VALIDADOR' => 'array',
  738. 'REGLAS_VALIDACION' => 'string|in:Esperar,Ejecutar,NA',
  739. 'ID_FUNCION' => 'nullable|string',
  740. 'ID_MODULO' => 'nullable|string',
  741. 'ID_SUBMODULO' => 'nullable|string',
  742. 'ID_WORKFLOW_EJECUTAR' => 'nullable|integer',
  743. 'INTERVALO' => 'nullable|integer',
  744. 'UNIDAD' => 'nullable|string',
  745. 'USUARIO' => 'required|string',
  746. 'NUMERO_LINEA' => 'required|integer',
  747. ]);
  748. if ($validator->fails()) {
  749. return $this->responseController->makeResponse(
  750. true,
  751. "Se encontraron uno o más errores.",
  752. $this->responseController->makeErrors($validator->errors()->messages()),
  753. 401
  754. );
  755. }
  756. DB::beginTransaction();
  757. $requestData = $request->all();
  758. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  759. if ($arrResponseCheckUser['error']) {
  760. DB::rollBack();
  761. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  762. }
  763. $user = $arrResponseCheckUser['response'];
  764. $decryptMod = $this->encController->decrypt($requestData['ID_MODULO']);
  765. if (!$decryptMod) {
  766. DB::rollBack();
  767. return $this->responseController->makeResponse(true, "ID_MODULO no fue desencriptada correctamente", [], 400);
  768. }
  769. $decryptSubMod = null;
  770. if (!empty($requestData['ID_SUBMODULO'])) {
  771. $decryptSubMod = $this->encController->decrypt($requestData['ID_SUBMODULO']);
  772. if (!$decryptSubMod) {
  773. DB::rollBack();
  774. return $this->responseController->makeResponse(true, "ID_SUBMODULO no fue desencriptada correctamente", [], 400);
  775. }
  776. }
  777. $now = $this->functionsController->now();
  778. $currentDate = $now->toDateTimeString();
  779. $informacionExtra = $this->processExtraInfo(
  780. $requestData['REGLAS_VALIDACION'],
  781. $requestData
  782. );
  783. try {
  784. $validateUpdate = DB::table('S002V01TTAWO')
  785. ->where('TAWO_IDTA', '=', $idTask)
  786. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  787. ->update([
  788. 'TAWO_NOTA' => $requestData['NOMBRE_TAREA'],
  789. 'TAWO_DESC' => $requestData['DESCRIPCION'],
  790. 'TAWO_SECU' => $requestData['SECUENCIA'],
  791. 'TAWO_RQVA' => $requestData['REQUIERE_VALIDACION'],
  792. 'TAWO_USAN' => json_encode($requestData['USUARIOS_NOTIFICAR']),
  793. 'TAWO_USAV' => json_encode($requestData['USUARIO_VALIDADOR']),
  794. 'TAWO_REVA' => $requestData['REGLAS_VALIDACION'],
  795. 'TAWO_IDFU' => $requestData['ID_FUNCION'],
  796. 'TAWO_IDMO' => $decryptMod,
  797. 'TAWO_IDSM' => $decryptSubMod,
  798. 'TAWO_INEX' => $informacionExtra,
  799. 'TAWO_USMO' => $user,
  800. 'TAWO_FEMO' => $currentDate,
  801. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  802. ]);
  803. } catch (\Throwable $th) {
  804. DB::rollBack();
  805. return $this->responseController->makeResponse(true, "Ocurrió un error al actualizar la tarea.", $th->getMessage(), 500);
  806. }
  807. if (!$validateUpdate) {
  808. DB::rollBack();
  809. return $this->responseController->makeResponse(true, "No se pudo actualizar la tarea.", [], 404);
  810. }
  811. DB::commit();
  812. return $this->responseController->makeResponse(false, "ÉXITO: Tarea actualizada exitosamente");
  813. }
  814. public function deleteTask(Request $request, $idTask)
  815. {
  816. $validator = Validator::make($request->all(), [
  817. 'USUARIO' => 'required|string',
  818. 'NUMERO_LINEA' => 'required|integer',
  819. ]);
  820. if ($validator->fails()) {
  821. return $this->responseController->makeResponse(
  822. true,
  823. "Se encontraron uno o más errores.",
  824. $this->responseController->makeErrors($validator->errors()->messages()),
  825. 401
  826. );
  827. }
  828. $idTask = $this->encController->decrypt($idTask);
  829. if (is_null($idTask)) {
  830. return $this->responseController->makeResponse(true, 'El identificador de la tarea no está encriptado correctamente.', [], 400);
  831. }
  832. DB::beginTransaction();
  833. $requestData = $request->all();
  834. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  835. if ($arrResponseCheckUser['error']) {
  836. DB::rollBack();
  837. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  838. }
  839. $user = $arrResponseCheckUser['response'];
  840. try {
  841. $task = (array) DB::table('S002V01TTAWO')
  842. ->where('TAWO_IDTA', '=', $idTask)
  843. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  844. ->first(['TAWO_IDWO', 'TAWO_SECU']);
  845. } catch (\Throwable $th) {
  846. DB::rollBack();
  847. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener la tarea.", $th->getMessage(), 500);
  848. }
  849. if (empty($task)) {
  850. DB::rollBack();
  851. return $this->responseController->makeResponse(true, "La tarea no existe.", [], 404);
  852. }
  853. $now = $this->functionsController->now();
  854. $currentDate = $now->toDateTimeString();
  855. try {
  856. DB::table('S002V01TTAWO')
  857. ->where('TAWO_IDTA', '=', $idTask)
  858. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  859. ->delete();
  860. } catch (\Throwable $th) {
  861. DB::rollBack();
  862. return $this->responseController->makeResponse(true, "Ocurrió un error al eliminar la tarea.", $th->getMessage(), 500);
  863. }
  864. try {
  865. DB::table('S002V01TTAWO')
  866. ->where('TAWO_IDWO', '=', $task['TAWO_IDWO'])
  867. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  868. ->where('TAWO_SECU', '>', $task['TAWO_SECU'])
  869. ->decrement('TAWO_SECU');
  870. } catch (\Throwable $th) {
  871. DB::rollBack();
  872. return $this->responseController->makeResponse(true, "Ocurrió un error al reordenar las secuencias.", $th->getMessage(), 500);
  873. }
  874. DB::commit();
  875. return $this->responseController->makeResponse(false, "ÉXITO: Tarea eliminada exitosamente");
  876. }
  877. public function updateTaskConfiguration(Request $request, $idTask)
  878. {
  879. $validator = Validator::make($request->all(), [
  880. 'REQUIERE_VALIDACION' => 'nullable|boolean',
  881. 'USUARIOS_NOTIFICAR' => 'array',
  882. 'USUARIO_VALIDADOR' => 'array',
  883. 'REGLAS_VALIDACION' => 'string|in:Esperar,Ejecutar,NA',
  884. 'ID_FUNCION' => 'nullable|string',
  885. 'ID_MODULO' => 'nullable|string',
  886. 'ID_SUBMODULO' => 'nullable|string',
  887. 'ID_WORKFLOW_EJECUTAR' => 'nullable|integer',
  888. 'INTERVALO' => 'nullable|integer',
  889. 'UNIDAD' => 'nullable|string',
  890. 'USUARIO' => 'required|string',
  891. 'NUMERO_LINEA' => 'required|integer',
  892. ]);
  893. Log::info($request);
  894. if ($validator->fails()) {
  895. return $this->responseController->makeResponse(
  896. true,
  897. "Se encontraron uno o más errores.",
  898. $this->responseController->makeErrors($validator->errors()->messages()),
  899. 401
  900. );
  901. }
  902. DB::beginTransaction();
  903. $requestData = $request->all();
  904. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  905. if ($arrResponseCheckUser['error']) {
  906. DB::rollBack();
  907. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  908. }
  909. $idTask = $this->encController->decrypt($idTask);
  910. if (is_null($idTask)) {
  911. return $this->responseController->makeResponse(true, 'El identificador de la tarea no se encuentra encriptado correctamente.', [], 401);
  912. }
  913. $idmod = $this->encController->decrypt($request['ID_MODULO']);
  914. if (is_null($idmod)) {
  915. return $this->responseController->makeResponse(true, 'El identificador deL modulo no se encuentra encriptado correctamente.', [], 401);
  916. }
  917. $user = $arrResponseCheckUser['response'];
  918. $decryptSubmod = null;
  919. if (!empty($requestData['ID_SUBMODULO'])) {
  920. $decryptSubmod = $this->encController->decrypt($requestData['ID_SUBMODULO']);
  921. if (!$decryptSubmod) {
  922. DB::rollBack();
  923. return $this->responseController->makeResponse(true, "ID_SUBMODULO no fue desencriptada correctamente", [], 400);
  924. }
  925. }
  926. $now = $this->functionsController->now();
  927. $currentDate = $now->toDateTimeString();
  928. $informacionExtra = $this->processExtraInfo(
  929. $requestData['REGLAS_VALIDACION'],
  930. $requestData
  931. );
  932. try {
  933. $validateUpdate = DB::table('S002V01TTAWO')
  934. ->where('TAWO_IDTA', '=', $idTask)
  935. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  936. ->update([
  937. 'TAWO_RQVA' => $requestData['REQUIERE_VALIDACION'],
  938. 'TAWO_USAN' => json_encode($requestData['USUARIOS_NOTIFICAR']),
  939. 'TAWO_USAV' => json_encode($requestData['USUARIO_VALIDADOR']),
  940. 'TAWO_REVA' => $requestData['REGLAS_VALIDACION'],
  941. 'TAWO_IDFU' => $requestData['ID_FUNCION'],
  942. 'TAWO_IDMO' => $idmod,
  943. 'TAWO_IDSM' => $decryptSubmod,
  944. 'TAWO_INEX' => $informacionExtra,
  945. 'TAWO_USMO' => $user,
  946. 'TAWO_FEMO' => $currentDate,
  947. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  948. ]);
  949. } catch (\Throwable $th) {
  950. DB::rollBack();
  951. return $this->responseController->makeResponse(true, "Ocurrió un error al actualizar la configuración de la tarea.", $th->getMessage(), 500);
  952. }
  953. if (!$validateUpdate) {
  954. DB::rollBack();
  955. return $this->responseController->makeResponse(true, "No se pudo actualizar la configuración de la tarea.", [], 404);
  956. }
  957. DB::commit();
  958. return $this->responseController->makeResponse(false, "ÉXITO: Configuración de tarea actualizada exitosamente");
  959. }
  960. public function getValidateApplications($user, $line)
  961. {
  962. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  963. if ($arrResponseCheckUser['error']) {
  964. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  965. }
  966. $idUser = $this->encController->decrypt($user);
  967. if (is_null($idUser)) {
  968. return $this->responseController->makeResponse(true, 'El identificador del usuario no se encuentra encriptado correctamente.', [], 401);
  969. }
  970. try {
  971. $results = DB::table('s002v01tsova as s')
  972. ->join('S002V01TEJTW as e', 's.SOVA_IDET', '=', 'e.EJTW_IDET')
  973. ->join('S002V01TTAWO as t', 'e.EJTW_IDTA', '=', 't.TAWO_IDTA')
  974. ->join('S002V01TWORK as w', 't.TAWO_IDWO', '=', 'w.WORK_IDWO')
  975. ->where('s.SOVA_IDUS', '=', $idUser)
  976. ->select(
  977. 's.SOVA_IDET AS ID_APPLICATION',
  978. 's.SOVA_FEEN AS FECHA_SOLICITUD',
  979. 's.SOVA_ESTA AS ESTADO_SOLICITUD',
  980. 't.TAWO_NOTA AS NOMBRE_TAREA',
  981. 't.TAWO_SECU AS SECUENCIA_TAREA',
  982. 'w.WORK_NOWO AS NOMBRE_WORKFLOW'
  983. )
  984. ->get();
  985. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $results);
  986. } catch (\Throwable $th) {
  987. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las solicitudes de validación.", $th->getMessage(), 500);
  988. }
  989. }
  990. public function asignStateToApplication(Request $request)
  991. {
  992. Log::info($request);
  993. $validator = Validator::make($request->all(), [
  994. 'USUARIO' => 'required|string',
  995. 'NUMERO_LINEA' => 'required|integer',
  996. 'ID_APPLICATION' => 'required|integer',
  997. 'STATE' => 'required|string|in:Rechazada,Aprobada',
  998. ]);
  999. if ($validator->fails()) {
  1000. return $this->responseController->makeResponse(
  1001. true,
  1002. "Se encontraron uno o más errores.",
  1003. $this->responseController->makeErrors($validator->errors()->messages()),
  1004. 401
  1005. );
  1006. }
  1007. $requestData = $request->all();
  1008. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1009. if ($arrResponseCheckUser['error']) {
  1010. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1011. }
  1012. DB::beginTransaction();
  1013. try {
  1014. // Verificar estado actual
  1015. $currentRecord = DB::table('S002V01TSOVA')
  1016. ->where('SOVA_IDSV', '=', $requestData['ID_APPLICATION'])
  1017. ->first(['SOVA_ESTA']);
  1018. if (!$currentRecord) {
  1019. DB::rollBack();
  1020. return $this->responseController->makeResponse(true, "La solicitud no existe.", [], 404);
  1021. }
  1022. if ($currentRecord->SOVA_ESTA !== 'Pendiente') {
  1023. DB::rollBack();
  1024. return $this->responseController->makeResponse(true, "No es posible cambiar el estado de la solicitud, el estado actual es: " . $currentRecord->SOVA_ESTA, [], 400);
  1025. }
  1026. $validateUpdate = DB::table('S002V01TSOVA')
  1027. ->where('SOVA_IDSV', '=', $requestData['ID_APPLICATION'])
  1028. ->where('SOVA_ESTA', '=', 'Pendiente')
  1029. ->update(['SOVA_ESTA' => $requestData['STATE'], 'SOVA_FERE' => now()]);
  1030. if (!$validateUpdate) {
  1031. DB::rollBack();
  1032. return $this->responseController->makeResponse(true, "No se pudo actualizar el estado de la solicitud.", [], 404);
  1033. }
  1034. DB::commit();
  1035. return $this->responseController->makeResponse(false, "ÉXITO: Estado actualizado exitosamente");
  1036. } catch (\Throwable $th) {
  1037. DB::rollBack();
  1038. return $this->responseController->makeResponse(true, "Ocurrió un error al actualizar el estado.", $th->getMessage(), 500);
  1039. }
  1040. }
  1041. //Submodulo de auditoria: Busqueda de flujos de trabajo y solicitudes de validacion
  1042. public function getProcessWorkflow($user, $line)
  1043. {
  1044. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1045. if ($arrResponseCheckUser['error']) {
  1046. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1047. }
  1048. try {
  1049. $arrProcessWorkflow = DB::table('S002V01TPRWO')
  1050. ->where('PRWO_NULI', '=', $line)
  1051. ->get([
  1052. 'PRWO_IDPR AS ID_PROCESO',
  1053. 'PRWO_IDMO AS ID_MODULO',
  1054. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1055. 'PRWO_ESTA AS ESTADO',
  1056. ]);
  1057. $arrProcessWorkflow = json_decode(json_encode($arrProcessWorkflow), true);
  1058. } catch (\Throwable $th) {
  1059. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el proceso del flujo de trabajo.", $th->getMessage(), 500);
  1060. }
  1061. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrProcessWorkflow);
  1062. }
  1063. public function getExecuteWorkflow($user, $line)
  1064. {
  1065. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1066. if ($arrResponseCheckUser['error']) {
  1067. DB::rollBack();
  1068. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1069. }
  1070. $user = $arrResponseCheckUser['response'];
  1071. try {
  1072. $arrExecuteWorkflow = DB::table('S002V01TEJWO')
  1073. ->where('EJWO_NULI', '=', $line)
  1074. ->where('WORK_NULI', '=', $line)
  1075. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'EJWO_IDWO')
  1076. ->get([
  1077. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  1078. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  1079. 'WORK_AUTO AS AUTOMATICO',
  1080. 'EJWO_ESTA AS ESTADO',
  1081. 'EJWO_USRE AS USUARIO_REGISTRA',
  1082. 'EJWO_FERE AS FECHA_REGISTRA',
  1083. 'EJWO_USMO AS USUARIO_MODIFICA',
  1084. 'EJWO_FEMO AS FECHA_MODIFICA',
  1085. ]);
  1086. $arrExecuteWorkflow = json_decode(json_encode($arrExecuteWorkflow), true);
  1087. } catch (\Throwable $th) {
  1088. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las ejecuciones de los flujos de trabajo.", $th->getMessage(), 500);
  1089. }
  1090. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrExecuteWorkflow, $line);
  1091. if ($responseCheckLatestUpdate['error']) {
  1092. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  1093. }
  1094. $arrExecuteWorkflow = $responseCheckLatestUpdate['response'];
  1095. $arrDataExecuteWorkflow = array();
  1096. foreach ($arrExecuteWorkflow as $key => $executeWorkflow) {
  1097. try {
  1098. $arrExecuteTask = DB::table('S002V01TEJTW')
  1099. ->where('EJTW_IDEW', '=', $executeWorkflow['ID_EJECUCION_WORKFLOW'])
  1100. ->where('EJTW_NULI', '=', $line)
  1101. ->get([
  1102. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  1103. 'EJTW_IDTA AS ID_TAREA',
  1104. 'EJTW_ESTA AS ESTADO',
  1105. ]);
  1106. $arrExecuteTask = json_decode(json_encode($arrExecuteTask), true);
  1107. } catch (\Throwable $th) {
  1108. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas en ejecución", $th->getMessage(), 500);
  1109. }
  1110. $executeWorkflow['AUTOMATICO'] = $executeWorkflow['AUTOMATICO'] == 1 ? 'Si' : 'No';
  1111. $existsUser = false;
  1112. $quantityProcesses = 0;
  1113. $quantityCompleted = 0;
  1114. foreach ($arrExecuteTask as $executeTask) {
  1115. if ($executeTask['ESTADO'] === 'Aceptado') {
  1116. $quantityCompleted++;
  1117. }
  1118. $quantityProcesses++;
  1119. try {
  1120. $validateExists = DB::table('S002V01TEJNO')
  1121. ->where('EJNO_IDET', '=', $executeTask['ID_EJECUCION_TAREA'])
  1122. ->where('EJNO_NULI', '=', $line)
  1123. ->where('EJNO_USNO', '=', $user)
  1124. ->exists();
  1125. } catch (\Throwable $th) {
  1126. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los usuarios de notificación.", $th->getMessage(), 500);
  1127. }
  1128. if ($validateExists) {
  1129. $existsUser = true;
  1130. }
  1131. }
  1132. $progress = ($quantityCompleted * 100) / $quantityProcesses;
  1133. $executeWorkflow['PROGRESO'] = $progress;
  1134. if ($existsUser) {
  1135. $arrDataExecuteWorkflow[] = $executeWorkflow;
  1136. }
  1137. }
  1138. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrDataExecuteWorkflow);
  1139. }
  1140. public function getExecuteTask($idExecute, $user, $line)
  1141. {
  1142. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1143. if ($arrResponseCheckUser['error']) {
  1144. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1145. }
  1146. $idExecute = $this->encController->decrypt($idExecute);
  1147. if ($idExecute === null) {
  1148. return $this->responseController->makeResponse(true, "La ejecución no está desencriptado correctamente.", [], 500);
  1149. }
  1150. try {
  1151. $validateExists = DB::table('S002V01TEJWO')
  1152. ->where('EJWO_IDEW', '=', $idExecute)
  1153. ->where('EJWO_NULI', '=', $line)
  1154. ->exists();
  1155. } catch (\Throwable $th) {
  1156. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar si la ejecución existe.", $th->getMessage(), 500);
  1157. }
  1158. if (!$validateExists) {
  1159. return $this->responseController->makeResponse(true, "La ejecución no existe.", [], 500);
  1160. }
  1161. try {
  1162. $arrExecute = DB::table('S002V01TEJTW')
  1163. ->where('EJTW_IDEW', '=', $idExecute)
  1164. ->where('EJTW_NULI', '=', $line)
  1165. ->where('TAWO_NULI', '=', $line)
  1166. ->where('PRWO_NULI', '=', $line)
  1167. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  1168. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  1169. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'TAWO_IDWO')
  1170. ->get([
  1171. 'EJTW_IDEW AS ID_EJECUCION_WORKFLOW',
  1172. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  1173. DB::raw('CONCAT(TAWO_NOTA, " (", TAWO_IDTA, ")") AS NOMBRE_TAREA'),
  1174. DB::raw('CONCAT(PRWO_NOPR, " (", PRWO_IDPR, ")") AS NOMBRE_PROCESO'),
  1175. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  1176. 'EJTW_INFO AS INFORMACION_FORMULARIO',
  1177. 'EJTW_INRE AS INFORMACION_REGISTRO',
  1178. 'EJTW_ESTA AS ESTADO',
  1179. 'EJTW_USRE AS USUARIO_REGISTRA',
  1180. 'EJTW_FERE AS FECHA_REGISTRA',
  1181. 'EJTW_USMO AS USUARIO_MODIFICA',
  1182. 'EJTW_FEMO AS FECHA_MODIFICA',
  1183. ]);
  1184. $arrExecute = json_decode(json_encode($arrExecute), true);
  1185. } catch (\Throwable $th) {
  1186. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las ejecuciones.", $th->getMessage(), 500);
  1187. }
  1188. foreach ($arrExecute as $keyExecute => $execute) {
  1189. try {
  1190. $notificate = (array) DB::table('S002V01TEJNO')
  1191. ->where('EJNO_IDET', '=', $execute['ID_EJECUCION_TAREA'])
  1192. ->where('EJNO_NULI', '=', $line)
  1193. ->where('EJNO_TINO', '=', 'V')
  1194. ->where('EJNO_ESTA', '=', 'Notificado')
  1195. ->orderBy('EJNO_SECU', 'ASC')
  1196. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  1197. ->first([
  1198. DB::raw('CONCAT(USUA_NOMB, " ", USUA_APPA, IF(ISNULL(USUA_APMA), "", CONCAT(" ", USUA_APMA)), " (", USUA_IDUS, ")") AS USUARIO_RESPONSABLE'),
  1199. 'EJNO_ESTA AS ESTADO_NOTIFICACION',
  1200. ]);
  1201. } catch (\Throwable $th) {
  1202. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las notificaciones de las tareas de ejecución.", $th->getMessage(), 500);
  1203. }
  1204. if (!empty($notificate)) {
  1205. $execute['USUARIO_RESPONSABLE'] = $notificate['USUARIO_RESPONSABLE'];
  1206. } else if ($execute['ESTADO'] == 'Aceptado') {
  1207. $execute['USUARIO_RESPONSABLE'] = 'Asignación terminada';
  1208. } else {
  1209. $execute['USUARIO_RESPONSABLE'] = 'Sin asignar';
  1210. }
  1211. try {
  1212. $arrNotificate = DB::table('S002V01TEJNO')
  1213. ->where('EJNO_IDET', '=', $execute['ID_EJECUCION_TAREA'])
  1214. ->where('EJNO_TINO', '=', 'V')
  1215. ->where('EJNO_NULI', '=', $line)
  1216. ->get([
  1217. 'EJNO_ESTA AS ESTADO_NOTIFICACION'
  1218. ]);
  1219. $arrNotificate = json_decode(json_encode($arrNotificate), true);
  1220. } catch (\Throwable $th) {
  1221. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las notificaciones de las tareas de ejecución.", $th->getMessage(), 500);
  1222. }
  1223. if (!empty($arrNotificate)) {
  1224. $quantityProcesses = 0;
  1225. $quantityCompleted = 0;
  1226. foreach ($arrNotificate as $notificate) {
  1227. if ($notificate['ESTADO_NOTIFICACION'] === 'Aceptado') {
  1228. $quantityCompleted++;
  1229. }
  1230. if ($notificate['ESTADO_NOTIFICACION'] !== 'Obsoleto') {
  1231. $quantityProcesses++;
  1232. }
  1233. }
  1234. $progress = ($quantityCompleted * 100) / $quantityProcesses;
  1235. $execute['PROGRESO'] = $progress;
  1236. } else {
  1237. $execute['PROGRESO'] = 0;
  1238. }
  1239. $arrExecute[$keyExecute] = $execute;
  1240. }
  1241. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrExecute, $line);
  1242. if ($responseCheckLatestUpdate['error']) {
  1243. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  1244. }
  1245. $arrExecute = $responseCheckLatestUpdate['response'];
  1246. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrExecute);
  1247. }
  1248. public function updateRequestWorkflow(Request $request, $idExecuteTask)
  1249. {
  1250. $validator = Validator::make($request->all(), [
  1251. 'ESTADO' => 'required|string|in:Aceptado,Rechazado',
  1252. 'MENSAJE_RECHAZO' => 'nullable|string',
  1253. 'USUARIO' => 'required|string',
  1254. 'NUMERO_LINEA' => 'required|integer',
  1255. ]);
  1256. if ($validator->fails()) {
  1257. return $this->responseController->makeResponse(
  1258. true,
  1259. "Se encontraron uno o más errores.",
  1260. $this->responseController->makeErrors($validator->errors()->messages()),
  1261. 401
  1262. );
  1263. }
  1264. DB::beginTransaction();
  1265. $requestData = $request->all();
  1266. // Se desencripta el identificador de la ejecución de la tarea
  1267. $idExecute = $this->encController->decrypt($idExecuteTask);
  1268. if (is_null($idExecute)) {
  1269. return $this->responseController->makeResponse(true, "No se pudo desencriptar el proceso de ejecución.", [], 500);
  1270. }
  1271. // Se recupera el identificador del usuario
  1272. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1273. if ($arrResponseCheckUser['error']) {
  1274. DB::rollBack();
  1275. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1276. }
  1277. $user = $arrResponseCheckUser['response'];
  1278. // Se valida que el usuario sea para la validación
  1279. try {
  1280. $validate = DB::table('S002V01TEJNO')
  1281. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1282. ->where('EJNO_USNO', '=', $user)
  1283. ->where('EJNO_TINO', '=', 'V')
  1284. ->where('EJNO_ESTA', '=', 'Notificado')
  1285. ->exists();
  1286. } catch (\Throwable $th) {
  1287. DB::rollBack();
  1288. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar la validación del usuario', $th->getMessage(), 500);
  1289. }
  1290. if (!$validate) {
  1291. DB::rollBack();
  1292. return $this->responseController->makeResponse(true, 'El usuario no está autorizado para modificar el estado de la solicitud.', [], 500);
  1293. }
  1294. // Se obtiene la información del workflow
  1295. try {
  1296. $arrExecute = (array) DB::table('S002V01TEJTW')
  1297. ->where('EJTW_IDET', '=', $idExecute)
  1298. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1299. ->join('S002V01TEJWO', 'EJWO_IDEW', '=', 'EJTW_IDEW')
  1300. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  1301. ->first([
  1302. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  1303. 'EJWO_IDWO AS ID_WORKFLOW',
  1304. 'EJTW_IDTA AS ID_TAREA',
  1305. 'EJTW_INFO AS INFORMACION_FORMULARIO',
  1306. 'EJTW_INRE AS INFORMACION_REGISTRO',
  1307. 'EJTW_ESTA AS ESTADO',
  1308. 'TAWO_SECU AS SECUENCIA',
  1309. ]);
  1310. } catch (\Throwable $th) {
  1311. DB::rollBack();
  1312. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del proceso de ejecución.', $th->getMessage(), 500);
  1313. }
  1314. if (empty($arrExecute)) {
  1315. DB::rollBack();
  1316. return $this->responseController->makeResponse(true, '', [], 500);
  1317. }
  1318. // Se obtiene la información del proceso
  1319. try {
  1320. $procesoWorkflow = (array) DB::table('S002V01TTAWO')
  1321. ->where('TAWO_IDTA', '=', $arrExecute['ID_TAREA'])
  1322. ->join('S002V01TPRWO', 'TAWO_IDPR', '=', 'PRWO_IDPR')
  1323. ->first([
  1324. 'PRWO_IDPR AS ID_PROCESO',
  1325. 'PRWO_IDMO AS ID_MODELO',
  1326. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1327. 'PRWO_FVMR AS FORMATO_VALIDACION',
  1328. ]);
  1329. } catch (\Throwable $th) {
  1330. DB::rollBack();
  1331. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del proceso del flujo de trabajo.', $th->getMessage(), 500);
  1332. }
  1333. if (empty($procesoWorkflow)) {
  1334. DB::rollBack();
  1335. return $this->responseController->makeResponse(true, 'No se encontró el proceso del flujo de trabajo.', [], 500);
  1336. }
  1337. $now = $this->functionsController->now();
  1338. $currentDate = $now->toDateTimeString();
  1339. if ($requestData['ESTADO'] === 'Aceptado') {
  1340. try {
  1341. $validateUdpdate = DB::table('S002V01TEJNO')
  1342. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1343. ->where('EJNO_USNO', '=', $user)
  1344. ->where('EJNO_TINO', '=', 'V')
  1345. ->where('EJNO_ESTA', '=', 'Notificado')
  1346. ->where('EJNO_IDET', '=', $idExecute)
  1347. ->update([
  1348. 'EJNO_ESTA' => 'Aceptado',
  1349. 'EJNO_USMO' => $user,
  1350. 'EJNO_FEMO' => $currentDate,
  1351. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1352. ]);
  1353. } catch (\Throwable $th) {
  1354. DB::rollBack();
  1355. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el estado de la notificación. 1', $th->getMessage(), 500);
  1356. }
  1357. if (!$validateUdpdate) {
  1358. DB::rollBack();
  1359. return $this->responseController->makeResponse(true, 'No se pudo modificar el estado de la notificación.', [], 500);
  1360. }
  1361. try {
  1362. $arrNextNotificate = (array) DB::table('S002V01TEJNO')
  1363. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1364. ->where('EJNO_TINO', '=', 'V')
  1365. ->where('EJNO_ESTA', '=', 'En espera')
  1366. ->where('EJNO_IDET', '=', $idExecute)
  1367. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1368. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1369. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1370. ->join('S002V01TEJTW', 'EJTW_IDET', '=', 'EJNO_IDET')
  1371. ->join('S002V01TEJWO', 'EJWO_IDEW', '=', 'EJTW_IDEW')
  1372. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  1373. ->join('S002V01TPRWO', 'TAWO_IDPR', '=', 'PRWO_IDPR')
  1374. ->orderBy('EJNO_SECU', 'ASC')
  1375. ->first([
  1376. 'EJNO_IDEN AS ID_EJECUCION_NOTIFICACION',
  1377. 'EJNO_IDET AS ID_EJECUCION_TAREA',
  1378. 'EJNO_USNO AS USUARIO_NOTIFICACION',
  1379. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  1380. 'TAWO_IDTA AS ID_TAREA',
  1381. 'TAWO_NOTA AS NOMBRE_TAREA',
  1382. 'PRWO_IDPR AS ID_PROCESO',
  1383. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1384. ]);
  1385. } catch (\Throwable $th) {
  1386. DB::rollBack();
  1387. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el siguiente usuario para validación.', $th->getMessage(), 500);
  1388. }
  1389. if (!empty($arrNextNotificate)) {
  1390. $objExecute = ['ID' => $arrNextNotificate['ID_EJECUCION_WORKFLOW'], 'TYPE' => 'VALIDATE'];
  1391. $strExecuteWorkflow = json_encode($objExecute);
  1392. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1393. $this->notificationsController->emitNotification(
  1394. 'S002V01M03GEPR',
  1395. 'Nuevo flujo de procesos creado',
  1396. "El usuario $user ha creado un nuevo flujo de trabajo: " . $arrNextNotificate['NOMBRE_PROCESO'] . ". La tarea: " . $arrNextNotificate['NOMBRE_TAREA'] . " requiere de su validación.",
  1397. [[
  1398. 'BOTON' => 'Ver solicitud',
  1399. 'FUNCION' => 'openModule',
  1400. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/" . $encExecuteWorkflow)]),
  1401. ]],
  1402. [$arrNextNotificate['USUARIO_NOTIFICACION']],
  1403. $user,
  1404. $requestData['NUMERO_LINEA'],
  1405. $this->socketClient,
  1406. );
  1407. try {
  1408. $validateUpdate = DB::table('S002V01TEJNO')
  1409. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1410. ->where('EJNO_TINO', '=', 'V')
  1411. ->where('EJNO_ESTA', '=', 'En espera')
  1412. ->where('EJNO_IDET', '=', $idExecute)
  1413. ->where('EJNO_IDEN', '=', $arrNextNotificate['ID_EJECUCION_NOTIFICACION'])
  1414. ->update([
  1415. 'EJNO_ESTA' => 'Notificado',
  1416. 'EJNO_USMO' => $user,
  1417. 'EJNO_FEMO' => $currentDate,
  1418. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1419. ]);
  1420. } catch (\Throwable $th) {
  1421. DB::rollBack();
  1422. return $this->responseController->makeResponse(true, 'Ocurrió un error registrar la notificación de siguiente usuario.', $th->getMessage(), 500);
  1423. }
  1424. if (!$validateUpdate) {
  1425. DB::rollBack();
  1426. return $this->responseController->makeResponse(true, 'No se pudo registrar la siguiente notificación del usuario.', [], 500);
  1427. }
  1428. }
  1429. } else {
  1430. try {
  1431. $validateUpdate = DB::table('S002V01TEJNO')
  1432. ->where('EJNO_IDET', '=', $idExecute)
  1433. ->where('EJNO_USNO', '=', $user)
  1434. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1435. ->where('EJNO_ESTA', '=', 'Notificado')
  1436. ->where('EJNO_TINO', '=', 'V')
  1437. ->update([
  1438. 'EJNO_ESTA' => 'Rechazado',
  1439. 'EJNO_MERE' => $requestData['MENSAJE_RECHAZO'],
  1440. 'EJNO_USMO' => $user,
  1441. 'EJNO_FEMO' => $currentDate,
  1442. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1443. ]);
  1444. } catch (\Throwable $th) {
  1445. DB::rollBack();
  1446. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el estado de la notificación. 2', $th->getMessage(), 500);
  1447. }
  1448. if (!$validateUpdate) {
  1449. DB::rollBack();
  1450. return $this->responseController->makeResponse(true, 'No se pudo modificar el estado de la notificación.', [], 500);
  1451. }
  1452. }
  1453. try {
  1454. $validateExists = DB::table('S002V01TEJNO')
  1455. ->where('EJNO_IDET', '=', $idExecute)
  1456. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1457. ->where('EJNO_TINO', '=', 'V')
  1458. ->where('EJNO_ESTA', '=', 'Notificado')
  1459. ->exists();
  1460. } catch (\Throwable $th) {
  1461. DB::rollBack();
  1462. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el siguiente usuario para validación.', $th->getMessage(), 500);
  1463. }
  1464. $newStateExecute = $requestData['ESTADO'];
  1465. if ($validateExists && $requestData['ESTADO'] === 'Aceptado') {
  1466. $newStateExecute = 'En proceso';
  1467. }
  1468. try {
  1469. $validateUpdate = DB::table('S002V01TEJTW')
  1470. ->where('EJTW_IDET', '=', $idExecute)
  1471. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1472. ->update([
  1473. 'EJTW_ESTA' => $newStateExecute,
  1474. 'EJTW_USMO' => $user,
  1475. 'EJTW_FEMO' => $currentDate,
  1476. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1477. ]);
  1478. } catch (\Throwable $th) {
  1479. DB::rollBack();
  1480. return $this->responseController->makeResponse(true, "Ocurrió un error al modificar la ejecución.", $th->getMessage(), 500);
  1481. }
  1482. if (!$validateUpdate) {
  1483. DB::rollBack();
  1484. return $this->responseController->makeResponse(true, "No se pudo modificar la ejecución.", [], 500);
  1485. }
  1486. try {
  1487. $validateExists = DB::table('S002V01TEJTW')
  1488. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1489. ->where('EJTW_IDEW', '=', $arrExecute['ID_EJECUCION_WORKFLOW'])
  1490. ->where('EJTW_ESTA', '=', 'En espera')
  1491. ->orWhere('EJTW_ESTA', '=', 'En proceso')
  1492. ->orWhere('EJTW_ESTA', '=', 'Notificado')
  1493. ->orWhere('EJTW_ESTA', '=', 'Rechazado')
  1494. ->exists();
  1495. } catch (\Throwable $th) {
  1496. DB::rollBack();
  1497. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar si existen tareas pendientes.", $th->getMessage(), 500);
  1498. }
  1499. if (!$validateExists) {
  1500. try {
  1501. $validateUpdate = DB::table('S002V01TEJWO')
  1502. ->where('EJWO_IDEW', '=', $arrExecute['ID_EJECUCION_WORKFLOW'])
  1503. ->where('EJWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1504. ->where('EJWO_ESTA', '=', 'En proceso')
  1505. ->update([
  1506. 'EJWO_ESTA' => 'Terminada',
  1507. 'EJWO_USMO' => $user,
  1508. 'EJWO_FEMO' => $currentDate,
  1509. 'EJWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1510. ]);
  1511. } catch (\Throwable $th) {
  1512. DB::rollBack();
  1513. return $this->responseController->makeResponse(true, "Ocurrió un error al modificar el estado del flujo de trabajo de ejecución.", $th->getMessage(), 500);
  1514. }
  1515. if (!$validateUpdate) {
  1516. DB::rollBack();
  1517. return $this->responseController->makeResponse(true, "No se pudo modificar el estado del flujo de trabajo de ejecución.", [], 500);
  1518. }
  1519. $strInfoRegister = $this->encController->decrypt($arrExecute['INFORMACION_REGISTRO']);
  1520. $arrInfoRegister = json_decode($strInfoRegister, true);
  1521. $arrFormatValidator = json_decode($procesoWorkflow['FORMATO_VALIDACION'], true);
  1522. foreach ($arrFormatValidator as $keyFormatValidator => $formatValidator) {
  1523. if (!array_key_exists($formatValidator['TABLA'], $arrInfoRegister)) {
  1524. DB::rollBack();
  1525. return $this->responseController->makeResponse(true, 'La tabla no existe en la información del proceso.', [], 500);
  1526. }
  1527. $tableName = $formatValidator['TABLA'];
  1528. $arrInfoData = $arrInfoRegister[$tableName];
  1529. foreach ($arrInfoData as $infoRegister) {
  1530. $arrWhere = array();
  1531. foreach ($infoRegister as $key => $value) {
  1532. $arrWhere[] = [
  1533. $key,
  1534. '=',
  1535. $value
  1536. ];
  1537. }
  1538. $arrWhere[] = [$formatValidator['NUMERO_LINEA'], '=', $requestData['NUMERO_LINEA']];
  1539. try {
  1540. $validateUpdate = DB::table($tableName)
  1541. ->where($arrWhere)
  1542. ->update([
  1543. $formatValidator['CAMPO_ESTADO'] => $formatValidator['CAMBIO_ESTADO'],
  1544. $formatValidator['USUARIO_MODIFICA'] => $user,
  1545. $formatValidator['FECHA_MODIFICA'] => $currentDate,
  1546. ]);
  1547. } catch (\Throwable $th) {
  1548. DB::rollBack();
  1549. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar los campos de workflow.', $th->getMessage(), 500);
  1550. }
  1551. if (!$validateUpdate) {
  1552. DB::rollBack();
  1553. return $this->responseController->makeResponse(true, 'No se pudo modificar los campos de workflow.', [], 500);
  1554. }
  1555. }
  1556. }
  1557. }
  1558. DB::commit();
  1559. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  1560. }
  1561. public function getHistoryNotificateTask($idExecuteTask, $user, $line)
  1562. {
  1563. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1564. if ($arrResponseCheckUser['error']) {
  1565. DB::rollBack();
  1566. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1567. }
  1568. $idExecuteTask = $this->encController->decrypt($idExecuteTask);
  1569. if (is_null($idExecuteTask)) {
  1570. return $this->responseController->makeResponse(true, 'El identificador no está encriptado correctamente.', [], 401);
  1571. }
  1572. try {
  1573. $arrHistory = DB::table('S002V01TEJNO')
  1574. ->where('EJNO_NULI', '=', $line)
  1575. ->where('EJNO_IDET', '=', $idExecuteTask)
  1576. ->where('EJNO_ESTA', '!=', 'Obsoleto')
  1577. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  1578. ->orderBy('EJNO_SECU', 'ASC')
  1579. ->get([
  1580. 'EJNO_IDEN AS ID_EJECUCION_NOTIFICACION',
  1581. DB::raw(
  1582. 'CONCAT(USUA_NOMB, " ", USUA_APPA, IF(ISNULL(USUA_APMA), "", CONCAT(" ", USUA_APMA)), " (", USUA_IDUS, ")") AS USUARIO_RESPONSABLE'
  1583. ),
  1584. 'EJNO_TINO AS TIPO_NOTIFICACION',
  1585. 'EJNO_ESTA AS ESTADO',
  1586. 'EJNO_USRE AS USUARIO_REGISTRA',
  1587. 'EJNO_FERE AS FECHA_REGISTRA',
  1588. 'EJNO_USMO AS USUARIO_MODIFICA',
  1589. 'EJNO_FEMO AS FECHA_MODIFICA',
  1590. ]);
  1591. $arrHistory = json_decode(json_encode($arrHistory), true);
  1592. } catch (\Throwable $th) {
  1593. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el historial de las notificaciones.", $th->getMessage(), 500);
  1594. }
  1595. foreach ($arrHistory as $key => $history) {
  1596. if ($history['TIPO_NOTIFICACION'] === 'N') {
  1597. $history['TIPO_NOTIFICACION'] = 'Solo notificación';
  1598. } else if ($history['TIPO_NOTIFICACION'] === 'V') {
  1599. $history['TIPO_NOTIFICACION'] = 'Para validación';
  1600. }
  1601. $arrHistory[$key] = $history;
  1602. }
  1603. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrHistory, $line);
  1604. if ($responseCheckLatestUpdate['error']) {
  1605. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  1606. }
  1607. $arrHistory = $responseCheckLatestUpdate['response'];
  1608. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrHistory);
  1609. }
  1610. public function registerRequestWorkflow(int $idProceso, string $encProcess, string $encRequest, string $user, string $line)
  1611. {
  1612. $arrResponse = array('error' => false, 'msg' => '', 'response' => []);
  1613. // Se obtiene la información del proceso de ejecución con los datos del workflow y de la tarea
  1614. try {
  1615. $processWorkflow = (array) DB::table('S002V01TPRWO')
  1616. ->where('PRWO_IDPR', '=', $idProceso)
  1617. ->where('PRWO_NULI', '=', $line)
  1618. ->where('PRWO_ESTA', '=', 'Asignado')
  1619. ->join('S002V01TTAWO', 'TAWO_IDPR', '=', 'PRWO_IDPR')
  1620. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'TAWO_IDWO')
  1621. ->first([
  1622. 'PRWO_IDMO AS ID_MODULO',
  1623. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1624. 'WORK_IDWO AS ID_WORKFLOW',
  1625. 'WORK_NOWO AS NOMBRE_WORKFLOW',
  1626. 'TAWO_IDTA AS ID_TAREA',
  1627. 'TAWO_NOTA AS NOMBRE_TAREA',
  1628. 'TAWO_SECU AS SECUENCIA',
  1629. 'TAWO_REVA AS REGLA_VALIDACION',
  1630. 'TAWO_OTWO AS ID_OTRO_WORKFLOW',
  1631. ]);
  1632. } catch (\Throwable $th) {
  1633. $arrResponse['error'] = true;
  1634. $arrResponse['msg'] = 'Ocurrió un error al obtener los datos del proceso del flujo de trabajo.';
  1635. $arrResponse['response'] = $th->getMessage();
  1636. return $arrResponse;
  1637. }
  1638. // Se obtiene la fecha actual
  1639. $now = $this->functionsController->now();
  1640. $currentDate = $now->toDateTimeString();
  1641. // Si no se encontraron datos, entonces se termina el proceso.
  1642. if (empty($processWorkflow)) {
  1643. $arrResponse['error'] = true;
  1644. $arrResponse['msg'] = 'El proceso de la tarea no existe.';
  1645. return $arrResponse;
  1646. }
  1647. // Si la tarea de ejecución es la primera del workflow, entonces...
  1648. if ($processWorkflow['SECUENCIA'] == 1) {
  1649. // Se registra la ejecución del workflow y se obtiene el identificador
  1650. try {
  1651. $idExecuteWorkflow = DB::table('S002V01TEJWO')->insertGetId([
  1652. 'EJWO_NULI' => $line,
  1653. 'EJWO_IDWO' => $processWorkflow['ID_WORKFLOW'],
  1654. 'EJWO_USRE' => $user,
  1655. 'EJWO_FERE' => $currentDate,
  1656. 'EJWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1657. ]);
  1658. } catch (\Throwable $th) {
  1659. $arrResponse['error'] = true;
  1660. $arrResponse['msg'] = 'Ocurrió un error al registrar la ejecución del flujo de trabajo.';
  1661. $arrResponse['response'] = $th->getMessage();
  1662. return $arrResponse;
  1663. }
  1664. if (!$idExecuteWorkflow) {
  1665. $arrResponse['error'] = true;
  1666. $arrResponse['msg'] = 'No se pudo registrar la ejecución del flujo de trabajo.';
  1667. return $arrResponse;
  1668. }
  1669. // Se hace el registro de la ejecución de la tarea del workflow
  1670. try {
  1671. $idExecuteTask = DB::table('S002V01TEJTW')->insertGetId([
  1672. 'EJTW_NULI' => $line,
  1673. 'EJTW_IDEW' => $idExecuteWorkflow,
  1674. 'EJTW_IDTA' => $processWorkflow['ID_TAREA'],
  1675. 'EJTW_INFO' => $encProcess,
  1676. 'EJTW_INRE' => $encRequest,
  1677. 'EJTW_ESTA' => 'En proceso',
  1678. 'EJTW_USRE' => $user,
  1679. 'EJTW_FERE' => $currentDate,
  1680. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1681. ]);
  1682. } catch (\Throwable $th) {
  1683. $arrResponse['error'] = true;
  1684. $arrResponse['msg'] = 'Ocurrió un error al registrar la solicitud.';
  1685. $arrResponse['response'] = $th->getMessage();
  1686. return $arrResponse;
  1687. }
  1688. if (!$idExecuteTask) {
  1689. $arrResponse['error'] = true;
  1690. $arrResponse['msg'] = 'No se pudo registrar la solicitud.';
  1691. return $arrResponse;
  1692. }
  1693. // Se obtienen las otras tareas que se ejecutarán
  1694. try {
  1695. $arrTasks = DB::table('S002V01TTAWO')
  1696. ->where('TAWO_NULI', '=', $line)
  1697. ->where('TAWO_IDWO', '=', $processWorkflow['ID_WORKFLOW'])
  1698. ->where('TAWO_IDTA', '!=', $processWorkflow['ID_TAREA'])
  1699. ->where('TAWO_ESTA', '=', 'Activo')
  1700. ->orderBy('TAWO_SECU', 'DESC')
  1701. ->get([
  1702. 'TAWO_IDTA AS ID_TAREA',
  1703. 'TAWO_OTWO AS OTRO_WORKFLOW',
  1704. 'TAWO_IDPR AS ID_PROCESO',
  1705. 'TAWO_NOTA AS NOMBRE_TAREA',
  1706. 'TAWO_DESC AS DESCRIPCION',
  1707. 'TAWO_REVA AS REGLAS_VALIDACION',
  1708. ]);
  1709. $arrTasks = json_decode(json_encode($arrTasks), true);
  1710. } catch (\Throwable $th) {
  1711. $arrResponse['error'] = true;
  1712. $arrResponse['msg'] = 'Ocurrió un error al obtener las tareas pendientes.';
  1713. $arrResponse['response'] = $th->getMessage();
  1714. return $arrResponse;
  1715. }
  1716. // Se registran las tareas que continuarán para colocarlas en cola.
  1717. foreach ($arrTasks as $task) {
  1718. try {
  1719. $validateInsert = DB::table('S002V01TEJTW')->insert([
  1720. 'EJTW_NULI' => $line,
  1721. 'EJTW_IDEW' => $idExecuteWorkflow,
  1722. 'EJTW_IDTA' => $task['ID_TAREA'],
  1723. 'EJTW_ESTA' => 'En espera',
  1724. 'EJTW_USRE' => $user,
  1725. 'EJTW_FERE' => $currentDate,
  1726. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1727. ]);
  1728. } catch (\Throwable $th) {
  1729. $arrResponse['error'] = true;
  1730. $arrResponse['msg'] = 'Ocurrió un error al registrar la solicitud para en cola.';
  1731. $arrResponse['response'] = $th->getMessage();
  1732. return $arrResponse;
  1733. }
  1734. if (!$validateInsert) {
  1735. $arrResponse['error'] = true;
  1736. $arrResponse['msg'] = 'No se pudo registrar la solicitud.';
  1737. return $arrResponse;
  1738. }
  1739. }
  1740. // Se obtiene el primer usuario para la validación de la tarea
  1741. try {
  1742. $notiValidate = DB::table('S002V01TNTWO')
  1743. ->where('NTWO_IDTA', '=', $processWorkflow['ID_TAREA'])
  1744. ->where('NTWO_NULI', '=', $line)
  1745. ->where('NTWO_TINO', '=', 'V')
  1746. ->where('NTWO_ESTA', '=', 'Activo')
  1747. ->orderBy('NTWO_SECU', 'ASC')
  1748. ->get([
  1749. 'NTWO_IDUS AS ID_USUARIO',
  1750. ]);
  1751. $notiValidate = json_decode(json_encode($notiValidate), true);
  1752. } catch (\Throwable $th) {
  1753. $arrResponse['error'] = true;
  1754. $arrResponse['msg'] = 'Ocurrió un error al obtener los ajustes de las notificaciones.';
  1755. $arrResponse['response'] = $th->getMessage();
  1756. return $arrResponse;
  1757. }
  1758. if (empty($notiValidate)) {
  1759. $arrResponse['error'] = true;
  1760. $arrResponse['msg'] = 'No existe usuario para validar el flujo de trabajo.';
  1761. return $arrResponse;
  1762. }
  1763. // Se obtiene el identificador del usuario
  1764. $validateUser = $notiValidate[0]['ID_USUARIO'];
  1765. $arrInfoConnection = array();
  1766. $this->socketClient->emit('get_connections', []);
  1767. if ($packet = $this->socketClient->wait('current_connections')) {
  1768. $data = json_decode($packet->data, true);
  1769. $arrInfoConnection = $data;
  1770. }
  1771. $arrUsersConnected = array();
  1772. foreach ($arrInfoConnection as $users) {
  1773. $data = explode('.', $users);
  1774. $userConnected = $this->encController->decrypt($data[0]);
  1775. $arrUsersConnected[] = $userConnected;
  1776. }
  1777. $additionalComments = '';
  1778. switch ($processWorkflow['REGLA_VALIDACION']) {
  1779. case 'S':
  1780. if (!in_array($validateUser, $arrUsersConnected)) {
  1781. $additionalComments = 'Se detectó que el usuario que debe validar la solicitud no se encuentra conectado dentro del sistema, sin embargo, la tarea está configurada para esperar a que el usuario se conecte y valide o rechase la solicitud.';
  1782. goto continue_notification;
  1783. }
  1784. break;
  1785. case 'C':
  1786. check_connection:
  1787. if (!in_array($validateUser, $arrUsersConnected)) {
  1788. array_shift($notiValidate);
  1789. if (empty($notiValidate)) {
  1790. $additionalComments = 'Se detectó que el usuario no se encuentra conectado dentro del sistema, sin embargo, al no tener otro usuario adicional para validar la tarea, la ejecución se quedará en espera hasta que el usuario se haya conectado.';
  1791. goto continue_notification;
  1792. }
  1793. $validateUser = $notiValidate[0]['ID_USUARIO'];
  1794. goto check_connection;
  1795. }
  1796. break;
  1797. case 'E':
  1798. if (is_null($processWorkflow['ID_OTRO_WORKFLOW'])) {
  1799. $arrResponse['error'] = true;
  1800. $arrResponse['msg'] = 'Se activó la regla de validación para activar otro flujo de trabajo en caso de que el usuario no se encuentre conectado, sin embargo, no hay otro flujo de trabajo registrado para ejecutar.';
  1801. return $arrResponse;
  1802. }
  1803. $encUser = $this->encController->encrypt($user);
  1804. if (is_null($encUser)) {
  1805. $arrResponse['error'] = true;
  1806. $arrResponse['msg'] = 'Ocurrió un error al encriptar el usuario.';
  1807. return $arrResponse;
  1808. }
  1809. $requestWorkflow = [
  1810. 'ID_WORKFLOW' => $processWorkflow['ID_OTRO_WORKFLOW'],
  1811. 'USUARIO' => $encUser,
  1812. 'NUMERO_LINEA' => $line,
  1813. ];
  1814. $requestWorkflow = new Request($requestWorkflow);
  1815. $responseWorkflow = $this->activateManualWorkflow($requestWorkflow);
  1816. $responseWorkflow = json_decode($responseWorkflow->original, true);
  1817. if ($responseWorkflow['error']) {
  1818. $arrResponse['error'] = true;
  1819. $arrResponse['msg'] = $responseWorkflow['msg'];
  1820. return $arrResponse;
  1821. }
  1822. $additionalComments = "Se detectó que el usuario no se encuentra conectado dentro del sistema, sin embargo, las reglas de validación activaron el flujo de trabajo #{$processWorkflow['ID_OTRO_WORKFLOW']}";
  1823. break;
  1824. }
  1825. continue_notification:
  1826. // Se obtiene el objeto de ejecución
  1827. $objExecute = ['ID' => $idExecuteWorkflow, 'TYPE' => 'VALIDATE'];
  1828. // Se obtiene la cadena del objeto
  1829. $strExecuteWorkflow = json_encode($objExecute);
  1830. // Se obtiene la la cadena encriptada del objeto
  1831. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1832. $arrUser = $this->resourcesController->getUser($user, $line);
  1833. if ($arrUser['error']) {
  1834. $arrResponse['error'] = true;
  1835. $arrResponse['msg'] = $arrUser['msg'];
  1836. return $arrResponse;
  1837. }
  1838. $nameUser = $arrUser['response'];
  1839. // Se emite la notificación para el usuario
  1840. $this->notificationsController->emitNotification(
  1841. 'S002V01M03GEPR',
  1842. 'Nuevo flujo de procesos creado',
  1843. "El usuario {$nameUser} ha creado un nuevo flujo de trabajo: {$processWorkflow['NOMBRE_PROCESO']}
  1844. La tarea: {$processWorkflow['NOMBRE_TAREA']} requiere de su validación. \n {$additionalComments}",
  1845. [[
  1846. 'BOTON' => 'Ver solicitud',
  1847. 'FUNCION' => 'openModule',
  1848. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/" . $encExecuteWorkflow)]),
  1849. ]],
  1850. [$validateUser],
  1851. $user,
  1852. $line,
  1853. $this->socketClient,
  1854. );
  1855. // Se obtiene los usuarios que solo son para notificar
  1856. try {
  1857. $arrNotification = DB::table('S002V01TNTWO')
  1858. ->where('NTWO_IDTA', '=', $processWorkflow['ID_TAREA'])
  1859. ->where('NTWO_NULI', '=', $line)
  1860. ->where('NTWO_TINO', '!=', 'O')
  1861. ->where('NTWO_ESTA', '=', 'Activo')
  1862. ->get([
  1863. 'NTWO_IDUS AS ID_USUARIO',
  1864. 'NTWO_TINO AS TIPO_NOTIFICACION',
  1865. 'NTWO_SECU AS SECUENCIA',
  1866. ]);
  1867. // Se obtiene la información como un arreglo
  1868. $arrNotification = json_decode(json_encode($arrNotification), true);
  1869. } catch (\Throwable $th) {
  1870. $arrResponse['error'] = true;
  1871. $arrResponse['msg'] = 'Ocurrió un error al obtener los ajustes de las notificaciones.';
  1872. $arrResponse['response'] = $th->getMessage();
  1873. return $arrResponse;
  1874. }
  1875. $arrUserNoti = array_filter($arrNotification, fn($value) => $value['TIPO_NOTIFICACION'] === 'N');
  1876. $arrUserNoti = array_column($arrUserNoti, 'ID_USUARIO');
  1877. // Se obtiene el objeto de ejecución
  1878. $objExecute = ['ID' => $idExecuteWorkflow, 'TYPE' => 'NOTIFICATE'];
  1879. // Se obtiene la cadena del objeto
  1880. $strExecuteWorkflow = json_encode($objExecute);
  1881. // Se obtiene la la cadena encriptada del objeto
  1882. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1883. $arrUserValidation = $this->resourcesController->getUser($validateUser, $line);
  1884. if ($arrUserValidation['error']) {
  1885. $arrResponse['error'] = true;
  1886. $arrResponse['msg'] = $arrUserValidation['msg'];
  1887. return $arrResponse;
  1888. }
  1889. $nameUserValidation = $arrUserValidation['response'];
  1890. // Se emite la notificación
  1891. $this->notificationsController->emitNotification(
  1892. 'S002V01M03GEPR',
  1893. 'Nuevo flujo de procesos creado',
  1894. "El usuario $nameUser ha creado un nuevo flujo de trabajo: " . $processWorkflow['NOMBRE_PROCESO'] . ".
  1895. La tarea: " . $processWorkflow['NOMBRE_TAREA'] . " le notifica que el proceso se encuentra en validación por el usuario: $nameUserValidation.",
  1896. [[
  1897. 'BOTON' => 'Ver solicitud',
  1898. 'FUNCION' => 'openModule',
  1899. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/" . $encExecuteWorkflow)]),
  1900. ]],
  1901. $arrUserNoti,
  1902. $user,
  1903. $line,
  1904. $this->socketClient,
  1905. );
  1906. foreach ($arrNotification as $key => $notification) {
  1907. if ($notification['TIPO_NOTIFICACION'] === 'V' && $notification['SECUENCIA'] === 1) {
  1908. try {
  1909. $validateInsert = DB::table('S002V01TEJNO')->insert([
  1910. 'EJNO_NULI' => $line,
  1911. 'EJNO_IDET' => $idExecuteTask,
  1912. 'EJNO_USNO' => $notification['ID_USUARIO'],
  1913. 'EJNO_SECU' => $notification['SECUENCIA'],
  1914. 'EJNO_TINO' => 'V',
  1915. 'EJNO_ESTA' => 'Notificado',
  1916. 'EJNO_USRE' => $user,
  1917. 'EJNO_FERE' => $currentDate,
  1918. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1919. ]);
  1920. } catch (\Throwable $th) {
  1921. $arrResponse['error'] = true;
  1922. $arrResponse['msg'] = 'Ocurrió un error al registrar las notificaciones de validación principal.';
  1923. $arrResponse['response'] = $th->getMessage();
  1924. return $arrResponse;
  1925. }
  1926. if (!$validateInsert) {
  1927. $arrResponse['error'] = true;
  1928. $arrResponse['msg'] = 'No se pudo registrar las notificaciones de validación principal.';
  1929. return $arrResponse;
  1930. }
  1931. } else if ($notification['TIPO_NOTIFICACION'] === 'V' && $notification['SECUENCIA'] > 1) {
  1932. try {
  1933. $validateInsert = DB::table('S002V01TEJNO')->insert([
  1934. 'EJNO_NULI' => $line,
  1935. 'EJNO_IDET' => $idExecuteTask,
  1936. 'EJNO_USNO' => $notification['ID_USUARIO'],
  1937. 'EJNO_SECU' => $notification['SECUENCIA'],
  1938. 'EJNO_TINO' => 'V',
  1939. 'EJNO_ESTA' => 'En espera',
  1940. 'EJNO_USRE' => $user,
  1941. 'EJNO_FERE' => $currentDate,
  1942. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1943. ]);
  1944. } catch (\Throwable $th) {
  1945. $arrResponse['error'] = true;
  1946. $arrResponse['msg'] = 'Ocurrió un error al registrar las notificaciones de validación.';
  1947. $arrResponse['response'] = $th->getMessage();
  1948. return $arrResponse;
  1949. }
  1950. if (!$validateInsert) {
  1951. $arrResponse['error'] = true;
  1952. $arrResponse['msg'] = 'No se pudo registrar las notificaciones de validación.';
  1953. return $arrResponse;
  1954. }
  1955. } else {
  1956. try {
  1957. $validateInsert = DB::table('S002V01TEJNO')->insert([
  1958. 'EJNO_NULI' => $line,
  1959. 'EJNO_IDET' => $idExecuteTask,
  1960. 'EJNO_USNO' => $notification['ID_USUARIO'],
  1961. 'EJNO_SECU' => 0,
  1962. 'EJNO_TINO' => 'N',
  1963. 'EJNO_ESTA' => 'Notificado',
  1964. 'EJNO_USRE' => $user,
  1965. 'EJNO_FERE' => $currentDate,
  1966. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1967. ]);
  1968. } catch (\Throwable $th) {
  1969. $arrResponse['error'] = true;
  1970. $arrResponse['msg'] = 'Ocurrió un error al registrar las notificaciones.';
  1971. $arrResponse['response'] = $th->getMessage();
  1972. return $arrResponse;
  1973. }
  1974. if (!$validateInsert) {
  1975. $arrResponse['error'] = true;
  1976. $arrResponse['msg'] = 'No se pudo registrar las notificaciones.';
  1977. return $arrResponse;
  1978. }
  1979. }
  1980. }
  1981. } else {
  1982. }
  1983. return $arrResponse;
  1984. }
  1985. public function activateManualWorkflow(Request $request)
  1986. {
  1987. $validator = Validator::make($request->all(), [
  1988. 'ID_WORKFLOW' => 'required|integer',
  1989. 'USUARIO' => 'required|string',
  1990. 'NUMERO_LINEA' => 'required|integer',
  1991. ]);
  1992. if ($validator->fails()) {
  1993. return $this->responseController->makeResponse(
  1994. true,
  1995. "Se encontraron uno o más errores.",
  1996. $this->responseController->makeErrors($validator->errors()->messages()),
  1997. 401
  1998. );
  1999. }
  2000. DB::beginTransaction();
  2001. $requestData = $request->all();
  2002. try {
  2003. $validateExists = DB::table('S002V01TWORK')
  2004. ->where('WORK_IDWO', '=', $requestData['ID_WORKFLOW'])
  2005. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  2006. ->where('WORK_ESTA', '=', 'Activo')
  2007. ->exists();
  2008. } catch (\Throwable $th) {
  2009. DB::rollBack();
  2010. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar si el workflow existe.", $th->getMessage(), 500);
  2011. }
  2012. if (!$validateExists) {
  2013. DB::rollBack();
  2014. return $this->responseController->makeResponse(true, "El flujo de trabajo no existe.", [], 500);
  2015. }
  2016. try {
  2017. $arrTasks = DB::table('S002V01TTAWO')
  2018. ->where('TAWO_IDWO', '=', $requestData['ID_WORKFLOW'])
  2019. ->where('TAWO_ESTA', '=', 'Activo')
  2020. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2021. ->where('PRWO_ESTA', '=', 'Asignado')
  2022. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2023. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  2024. ->orderBy('TAWO_SECU', 'ASC')
  2025. ->get([
  2026. 'TAWO_IDTA AS ID_TAREA',
  2027. 'TAWO_NOTA AS NOMBRE_TAREA',
  2028. 'TAWO_REVA AS REGLA_VALIDACION',
  2029. 'TAWO_OTWO AS OTRO_WORKFLOW',
  2030. 'PRWO_IDPR AS ID_PROCESO',
  2031. 'PRWO_NOPR AS NOMBRE_PROCESO',
  2032. ]);
  2033. $arrTasks = json_decode(json_encode($arrTasks), true);
  2034. } catch (\Throwable $th) {
  2035. DB::rollBack();
  2036. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas del flujo de trabajo.", $th->getMessage(), 500);
  2037. }
  2038. if (empty($arrTasks)) {
  2039. DB::rollBack();
  2040. return $this->responseController->makeResponse(true, "No hay tareas registradas en el flujo de trabajo.", [], 500);
  2041. }
  2042. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2043. if ($arrResponseCheckUser['error']) {
  2044. DB::rollBack();
  2045. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2046. }
  2047. $user = $arrResponseCheckUser['response'];
  2048. $now = $this->functionsController->now();
  2049. $currentDate = $now->toDateTimeString();
  2050. try {
  2051. $idExecuteWorkflow = DB::table('S002V01TEJWO')->insertGetId([
  2052. 'EJWO_NULI' => $requestData['NUMERO_LINEA'],
  2053. 'EJWO_IDWO' => $requestData['ID_WORKFLOW'],
  2054. 'EJWO_ESTA' => 'En proceso',
  2055. 'EJWO_USRE' => $user,
  2056. 'EJWO_FERE' => $currentDate,
  2057. 'EJWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2058. ]);
  2059. } catch (\Throwable $th) {
  2060. DB::rollBack();
  2061. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la solicitud del flujo de trabajo.", $th->getMessage(), 500);
  2062. }
  2063. if (!$idExecuteWorkflow) {
  2064. DB::rollBack();
  2065. return $this->responseController->makeResponse(true, "No se pudo registrar la solicitud del flujo de trabajo.", [], 500);
  2066. }
  2067. foreach ($arrTasks as $keyTask => $task) {
  2068. try {
  2069. $idExecuteTask = DB::table('S002V01TEJTW')->insertGetId([
  2070. 'EJTW_NULI' => $requestData['NUMERO_LINEA'],
  2071. 'EJTW_IDEW' => $idExecuteWorkflow,
  2072. 'EJTW_IDTA' => $task['ID_TAREA'],
  2073. 'EJTW_ESTA' => $keyTask === 0 ? 'En proceso' : 'En espera',
  2074. 'EJTW_USRE' => $user,
  2075. 'EJTW_FERE' => $currentDate,
  2076. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2077. ]);
  2078. } catch (\Throwable $th) {
  2079. DB::rollBack();
  2080. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la solicitud de las tareas.", $th->getMessage(), 500);
  2081. }
  2082. if (!$idExecuteTask) {
  2083. DB::rollBack();
  2084. return $this->responseController->makeResponse(true, "No se pudo registrar la solicitud de las tareas.", [], 500);
  2085. }
  2086. if ($keyTask === 0) {
  2087. try {
  2088. $arrNotificate = DB::table('S002V01TNTWO')
  2089. ->where('NTWO_IDTA', '=', $task['ID_TAREA'])
  2090. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2091. ->where('NTWO_ESTA', '=', 'Activo')
  2092. ->orderBy('NTWO_SECU', 'ASC')
  2093. ->get([
  2094. 'NTWO_IDNO AS ID_NOTIFICACION',
  2095. 'NTWO_IDUS AS ID_USUARIO',
  2096. 'NTWO_TINO AS TIPO_NOTIFICACION',
  2097. ]);
  2098. $arrNotificate = json_decode(json_encode($arrNotificate), true);
  2099. } catch (\Throwable $th) {
  2100. DB::rollBack();
  2101. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la solicitud de las tareas.", $th->getMessage(), 500);
  2102. }
  2103. $count = 1;
  2104. $userValidate = null;
  2105. $arrUserNotificate = array();
  2106. foreach ($arrNotificate as $keyNotificate => $notificate) {
  2107. if ($notificate['TIPO_NOTIFICACION'] === 'N') {
  2108. try {
  2109. $validateRegister = DB::table('S002V01TEJNO')->insert([
  2110. 'EJNO_NULI' => $requestData['NUMERO_LINEA'],
  2111. 'EJNO_IDET' => $idExecuteTask,
  2112. 'EJNO_USNO' => $notificate['ID_USUARIO'],
  2113. 'EJNO_SECU' => 0,
  2114. 'EJNO_TINO' => 'N',
  2115. 'EJNO_ESTA' => 'Notificado',
  2116. 'EJNO_USRE' => $user,
  2117. 'EJNO_FERE' => $currentDate,
  2118. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2119. ]);
  2120. } catch (\Throwable $th) {
  2121. DB::rollBack();
  2122. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar las solicitudes de las notificaciones.", $th->getMessage(), 500);
  2123. }
  2124. if (!$validateRegister) {
  2125. DB::rollBack();
  2126. return $this->responseController->makeResponse(true, "No se pudo registrar las solicitudes de las notificaciones.", [], 500);
  2127. }
  2128. $arrUserNotificate[] = $notificate['ID_USUARIO'];
  2129. } else if ($notificate['TIPO_NOTIFICACION'] === 'V') {
  2130. try {
  2131. $validateRegister = DB::table('S002V01TEJNO')->insert([
  2132. 'EJNO_NULI' => $requestData['NUMERO_LINEA'],
  2133. 'EJNO_IDET' => $idExecuteTask,
  2134. 'EJNO_USNO' => $notificate['ID_USUARIO'],
  2135. 'EJNO_SECU' => $count,
  2136. 'EJNO_TINO' => 'V',
  2137. 'EJNO_ESTA' => $count === 1 ? 'Notificado' : 'En espera',
  2138. 'EJNO_USRE' => $user,
  2139. 'EJNO_FERE' => $currentDate,
  2140. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  2141. ]);
  2142. } catch (\Throwable $th) {
  2143. DB::rollBack();
  2144. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar las solicitudes de validación.", $th->getMessage(), 500);
  2145. }
  2146. if (!$validateRegister) {
  2147. DB::rollBack();
  2148. return $this->responseController->makeResponse(true, "No se pudo registrar las solicitudes de las validaciones.", [], 500);
  2149. }
  2150. if ($count === 1) {
  2151. $userValidate = $notificate['ID_USUARIO'];
  2152. }
  2153. $count++;
  2154. }
  2155. }
  2156. if (!empty($arrUserNotificate) && !is_null($userValidate)) {
  2157. $objExecute = ['ID' => $idExecuteWorkflow, 'TYPE' => 'NOTIFICATE'];
  2158. $strExecuteWorkflow = json_encode($objExecute);
  2159. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  2160. $this->notificationsController->emitNotification(
  2161. 'S002V01M03GEPR',
  2162. 'Nuevo flujo de procesos creado',
  2163. "El usuario $user ha creado un nuevo flujo de trabajo: {$task['NOMBRE_PROCESO']}.
  2164. La tarea: " . $task['NOMBRE_TAREA'] . " le notifica que el proceso se encuentra en validación por el usuario: $userValidate.",
  2165. [[
  2166. 'BOTON' => 'Ver solicitud',
  2167. 'FUNCION' => 'openModule',
  2168. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/" . $encExecuteWorkflow)]),
  2169. ]],
  2170. $arrUserNotificate,
  2171. $user,
  2172. $requestData['NUMERO_LINEA'],
  2173. $this->socketClient,
  2174. );
  2175. }
  2176. if (!is_null($userValidate)) {
  2177. $objExecute = ['ID' => $idExecuteWorkflow, 'TYPE' => 'VALIDATE'];
  2178. $strExecuteWorkflow = json_encode($objExecute);
  2179. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  2180. $this->notificationsController->emitNotification(
  2181. 'S002V01M03GEPR',
  2182. 'Nuevo flujo de procesos creado',
  2183. "El usuario $user ha creado un nuevo flujo de trabajo: " . $task['NOMBRE_PROCESO'] . ".
  2184. La tarea: " . $task['NOMBRE_TAREA'] . " requiere de su validación.",
  2185. [[
  2186. 'BOTON' => 'Ver solicitud',
  2187. 'FUNCION' => 'openModule',
  2188. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/" . $encExecuteWorkflow)]),
  2189. ]],
  2190. [$userValidate],
  2191. $user,
  2192. $requestData['NUMERO_LINEA'],
  2193. $this->socketClient,
  2194. );
  2195. }
  2196. }
  2197. }
  2198. DB::commit();
  2199. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  2200. }
  2201. public function searchRequestWorkflow(Request $request)
  2202. {
  2203. $validator = Validator::make($request->all(), [
  2204. 'WORKFLOW' => 'nullable|integer',
  2205. 'EJECUCION_WORKFLOW' => 'nullable|integer',
  2206. 'ESTADO_WORKFLOW' => 'nullable|string',
  2207. 'TAREA' => 'nullable|integer',
  2208. 'EJECUCION_TAREA' => 'nullable|integer',
  2209. 'ESTADO_TAREA' => 'nullable|string',
  2210. 'PROCESO' => 'nullable|string',
  2211. 'FECHA_INICIO' => 'nullable|string',
  2212. 'FECHA_FINAL' => 'nullable|string',
  2213. 'USUARIO' => 'required|string',
  2214. 'NUMERO_LINEA' => 'required|integer',
  2215. ]);
  2216. if ($validator->fails()) {
  2217. return $this->responseController->makeResponse(
  2218. true,
  2219. "Se encontraron uno o más errores.",
  2220. $this->responseController->makeErrors($validator->errors()->messages()),
  2221. 401
  2222. );
  2223. }
  2224. DB::beginTransaction();
  2225. $requestData = $request->all();
  2226. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2227. if ($arrResponseCheckUser['error']) {
  2228. DB::rollBack();
  2229. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2230. }
  2231. $filterData = array(
  2232. 'WORKFLOW' => 'WORK_IDWO',
  2233. 'EJECUCION_WORKFLOW' => 'EJWO_IDEW',
  2234. 'ESTADO_WORKFLOW' => 'EJWO_ESTA',
  2235. 'TAREA' => 'TAWO_IDTA',
  2236. 'EJECUCION_TAREA' => 'EJTW_IDET',
  2237. 'ESTADO_TAREA' => 'EJTW_ESTA',
  2238. 'PROCESO' => 'PRWO_IDPR',
  2239. );
  2240. $dataWhere = array();
  2241. foreach ($requestData as $key => $value) {
  2242. if (
  2243. !is_null($value) &&
  2244. $key !== 'USUARIO' &&
  2245. $key !== 'NUMERO_LINEA' &&
  2246. $key !== 'FECHA_INICIO' &&
  2247. $key !== 'FECHA_FINAL'
  2248. ) {
  2249. $dataWhere[$filterData[$key]] = $value;
  2250. }
  2251. }
  2252. try {
  2253. $arrFilter = DB::table('S002V01TEJWO')
  2254. ->where($dataWhere)
  2255. ->where('EJWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2256. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  2257. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  2258. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2259. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2260. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'EJWO_IDWO')
  2261. ->join('S002V01TEJTW', 'EJTW_IDEW', '=', 'EJWO_IDEW')
  2262. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  2263. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  2264. ->get([
  2265. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  2266. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  2267. 'EJWO_ESTA AS ESTADO_EJECUCION_WORKFLOW',
  2268. DB::raw('CONCAT(TAWO_NOTA, " (", TAWO_IDTA, ")") AS NOMBRE_TAREA'),
  2269. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  2270. 'EJTW_ESTA AS ESTADO_EJECUCION_TAREA',
  2271. DB::raw('CONCAT(PRWO_NOPR, " (", PRWO_IDPR, ")") AS NOMBRE_PROCESO'),
  2272. 'EJTW_USRE AS USUARIO_REGISTRA',
  2273. 'EJTW_FERE AS FECHA_REGISTRA',
  2274. 'EJTW_USMO AS USUARIO_MODIFICA',
  2275. 'EJTW_FEMO AS FECHA_MODIFICA',
  2276. ]);
  2277. $arrFilter = json_decode(json_encode($arrFilter), true);
  2278. } catch (\Throwable $th) {
  2279. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las solicitudes de los flujos de trabajo.', $th->getMessage(), 401);
  2280. }
  2281. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrFilter, $requestData['NUMERO_LINEA']);
  2282. if ($responseCheckLatestUpdate['error']) {
  2283. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2284. }
  2285. $arrFilter = $responseCheckLatestUpdate['response'];
  2286. $arrDataFilter = array();
  2287. if (!is_null($requestData['FECHA_INICIO']) && !is_null($requestData['FECHA_FINAL'])) {
  2288. foreach ($arrFilter as $key => $filter) {
  2289. $updateDate = $filter['FECHA_MODIFICA'];
  2290. $date = explode(' ', $updateDate)[0];
  2291. $arrDate = explode('-', $date);
  2292. $strFormattDate = $arrDate[2] . '-' . $arrDate[1] . '-' . $arrDate[0];
  2293. $dateFormattDate = new Carbon($strFormattDate);
  2294. $dateStart = new Carbon($requestData['FECHA_INICIO']);
  2295. $dateEnd = new Carbon($requestData['FECHA_FINAL']);
  2296. if ($dateFormattDate->gte($dateStart) && $dateFormattDate->lte($dateEnd)) {
  2297. $arrDataFilter[] = $filter;
  2298. }
  2299. }
  2300. } else {
  2301. $arrDataFilter = $arrFilter;
  2302. }
  2303. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrDataFilter);
  2304. }
  2305. public function getDetailsExecuteRequest($idExecuteTask, $user, $line)
  2306. {
  2307. $idExecuteTask = $this->encController->decrypt($idExecuteTask);
  2308. if (is_null($idExecuteTask)) {
  2309. return $this->responseController->makeResponse(true, "La ejecución no está encriptado correctamente.", [], 500);
  2310. }
  2311. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  2312. if ($arrResponseCheckUser['error']) {
  2313. DB::rollBack();
  2314. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2315. }
  2316. try {
  2317. $arrExecuteRequest = (array) DB::table('S002V01TEJWO')
  2318. ->where('EJTW_IDET', '=', $idExecuteTask)
  2319. ->where('EJWO_NULI', '=', $line)
  2320. ->where('WORK_NULI', '=', $line)
  2321. ->where('EJTW_NULI', '=', $line)
  2322. ->where('TAWO_NULI', '=', $line)
  2323. ->where('PRWO_NULI', '=', $line)
  2324. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'EJWO_IDWO')
  2325. ->join('S002V01TEJTW', 'EJTW_IDEW', '=', 'EJWO_IDEW')
  2326. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  2327. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  2328. ->first([
  2329. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  2330. 'WORK_DESC AS DESCRIPCION_WORKFLOW',
  2331. 'WORK_AUTO AS AUTOMATICO',
  2332. 'WORK_PRED AS PREDETERMINADO',
  2333. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  2334. 'EJWO_ESTA AS ESTADO_EJECUCION_WORKFLOW',
  2335. DB::raw('CONCAT(TAWO_NOTA, " (", TAWO_IDTA, ")") AS NOMBRE_TAREA'),
  2336. 'TAWO_DESC AS DESCRIPCION_TAREA',
  2337. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  2338. 'EJTW_INFO AS INFORMACION_FORMULARIO',
  2339. 'EJTW_INRE AS INFORMACION_REGISTRO',
  2340. 'EJTW_ESTA AS ESTADO_EJECUCION_TAREA',
  2341. DB::raw('CONCAT(PRWO_NOPR, " (", PRWO_IDPR, ")") AS NOMBRE_PROCESO'),
  2342. 'EJTW_USRE AS USUARIO_REGISTRA',
  2343. 'EJTW_FERE AS FECHA_REGISTRA',
  2344. 'EJTW_USMO AS USUARIO_MODIFICA',
  2345. 'EJTW_FEMO AS FECHA_MODIFICA',
  2346. ]);
  2347. } catch (\Throwable $th) {
  2348. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las solicitudes de los flujos de trabajo.', $th->getMessage(), 401);
  2349. }
  2350. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate([$arrExecuteRequest], $line);
  2351. if ($responseCheckLatestUpdate['error']) {
  2352. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2353. }
  2354. $arrExecuteRequest = $responseCheckLatestUpdate['response'][0];
  2355. $arrExecuteRequest['AUTOMATICO'] = $arrExecuteRequest['AUTOMATICO'] === 1 ? 'Si' : 'No';
  2356. $arrExecuteRequest['PREDETERMINADO'] = $arrExecuteRequest['PREDETERMINADO'] === 1 ? 'Si' : 'No';
  2357. $arrExecuteRequest['ID_EJECUCION_WORKFLOW'] = '#' . $arrExecuteRequest['ID_EJECUCION_WORKFLOW'];
  2358. $arrExecuteRequest['ID_EJECUCION_TAREA'] = '#' . $arrExecuteRequest['ID_EJECUCION_TAREA'];
  2359. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrExecuteRequest);
  2360. }
  2361. public function getDetailsNotificate($idNotificate, $user, $line)
  2362. {
  2363. $idNotificate = $this->encController->decrypt($idNotificate);
  2364. if (is_null($idNotificate)) {
  2365. return $this->responseController->makeResponse(true, "La ejecución no está encriptado correctamente.", [], 500);
  2366. }
  2367. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  2368. if ($arrResponseCheckUser['error']) {
  2369. DB::rollBack();
  2370. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2371. }
  2372. try {
  2373. $arrNotificate = (array) DB::table('S002V01TEJNO')
  2374. ->where('EJNO_IDEN', '=', $idNotificate)
  2375. ->where('EJNO_NULI', '=', $line)
  2376. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  2377. ->first([
  2378. 'EJNO_IDEN AS NUMERO_NOTIFICACION',
  2379. 'EJNO_IDET AS ID_EJECUCION_TAREA',
  2380. 'EJNO_USNO AS USUARIO_NOTIFICACION',
  2381. 'EJNO_SECU AS SECUENCIA',
  2382. 'EJNO_TINO AS TIPO_NOTIFICACION',
  2383. 'EJNO_ESTA AS ESTADO',
  2384. 'EJNO_MERE AS MENSAJE_RECHAZO',
  2385. 'EJNO_USRE AS USUARIO_REGISTRA',
  2386. 'EJNO_FERE AS FECHA_REGISTRA',
  2387. 'EJNO_USMO AS USUARIO_MODIFICA',
  2388. 'EJNO_FEMO AS FECHA_MODIFICA',
  2389. ]);
  2390. } catch (\Throwable $th) {
  2391. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las notificaciones.', $th->getMessage(), 401);
  2392. }
  2393. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate([$arrNotificate], $line);
  2394. if ($responseCheckLatestUpdate['error']) {
  2395. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2396. }
  2397. $arrNotificate = $responseCheckLatestUpdate['response'][0];
  2398. $arrNotificate['NUMERO_NOTIFICACION'] = '#' . $arrNotificate['NUMERO_NOTIFICACION'];
  2399. $arrNotificate['ID_EJECUCION_TAREA'] = '#' . $arrNotificate['ID_EJECUCION_TAREA'];
  2400. $arrNotificate['TIPO_NOTIFICACION'] = $arrNotificate['TIPO_NOTIFICACION'] === 'V' ? 'Para validación' : 'Para notificar';
  2401. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrNotificate);
  2402. }
  2403. public function searchNotificationsAndRequests(Request $request)
  2404. {
  2405. $validator = Validator::make($request->all(), [
  2406. 'USUARIOS_NOTIFICADOS' => 'nullable|array',
  2407. 'TIPO_NOTIFICACION' => 'nullable|string|in:Solicitud,Notificacion',
  2408. 'ESTADO' => 'nullable|string',
  2409. 'FECHA_INICIO' => 'nullable|date',
  2410. 'FECHA_FIN' => 'nullable|date',
  2411. 'USUARIO' => 'required|string',
  2412. 'NUMERO_LINEA' => 'required|integer',
  2413. ]);
  2414. if ($validator->fails()) {
  2415. return $this->responseController->makeResponse(
  2416. true,
  2417. "Se encontraron uno o más errores.",
  2418. $this->responseController->makeErrors($validator->errors()->messages()),
  2419. 401
  2420. );
  2421. }
  2422. $requestData = $request->all();
  2423. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2424. if ($arrResponseCheckUser['error']) {
  2425. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2426. }
  2427. try {
  2428. $query = DB::table('S002V01TNOTI as n')
  2429. ->leftJoin('S002V01TSOVA as s', function ($join) {
  2430. $join->whereRaw('JSON_UNQUOTE(JSON_EXTRACT(s.SOVA_INEX, "$[0].idtask")) = JSON_UNQUOTE(JSON_EXTRACT(n.NOTI_ACCI, "$[*].idtask"))');
  2431. })
  2432. ->leftJoin('S002V01TNOEJ as ne', function ($join) {
  2433. $join->whereRaw('JSON_UNQUOTE(JSON_EXTRACT(ne.NOWF_INEX, "$[0].idtask")) = JSON_UNQUOTE(JSON_EXTRACT(n.NOTI_ACCI, "$[*].idtask"))');
  2434. })
  2435. ->where('n.NOTI_NULI', '=', $requestData['NUMERO_LINEA']);
  2436. // Filtro por usuarios notificados
  2437. if (!empty($requestData['USUARIOS_NOTIFICADOS'])) {
  2438. $query->where(function ($q) use ($requestData) {
  2439. foreach ($requestData['USUARIOS_NOTIFICADOS'] as $usuario) {
  2440. $q->orWhereJsonContains('n.NOTI_AUDI', $usuario)
  2441. ->orWhere('s.SOVA_IDUS', '=', $usuario)
  2442. ->orWhereJsonContains('ne.NOWF_USNO', $usuario);
  2443. }
  2444. });
  2445. }
  2446. // Filtro por tipo de notificación
  2447. if (!empty($requestData['TIPO_NOTIFICACION'])) {
  2448. if ($requestData['TIPO_NOTIFICACION'] === 'Solicitud') {
  2449. $query->whereNotNull('s.SOVA_IDSV');
  2450. } else {
  2451. $query->whereNotNull('ne.NOWF_IDNE');
  2452. }
  2453. }
  2454. // Filtro por estado
  2455. if (!empty($requestData['ESTADO'])) {
  2456. $estado = $requestData['ESTADO'];
  2457. $tipoNotificacion = $requestData['TIPO_NOTIFICACION'] ?? null;
  2458. if ($tipoNotificacion === 'Solicitud') {
  2459. $estadosPermitidos = ['Pendiente', 'Aprobada', 'Rechazada', 'Aprobada por timeout', 'Leido', 'No leido'];
  2460. if (in_array($estado, $estadosPermitidos)) {
  2461. if (in_array($estado, ['Leido', 'No leido'])) {
  2462. $estadoBuscar = $estado === 'Leido' ? 'Leído' : 'No leído';
  2463. $query->whereRaw('JSON_SEARCH(n.NOTI_ALCA, "one", ?) IS NOT NULL', [$estadoBuscar]);
  2464. } else {
  2465. $query->where('s.SOVA_ESTA', '=', $estado === 'Aprobada por timeout' ? 'Validada por timeout' : $estado);
  2466. }
  2467. }
  2468. } else {
  2469. if (in_array($estado, ['Leido', 'No leido'])) {
  2470. $estadoBuscar = $estado === 'Leido' ? 'Leído' : 'No leído';
  2471. $query->whereRaw('JSON_SEARCH(n.NOTI_ALCA, "one", ?) IS NOT NULL', [$estadoBuscar]);
  2472. }
  2473. }
  2474. }
  2475. // Filtro por fechas
  2476. if (!empty($requestData['FECHA_INICIO'])) {
  2477. $query->whereDate('n.NOTI_FEAR', '>=', $requestData['FECHA_INICIO']);
  2478. }
  2479. if (!empty($requestData['FECHA_FIN'])) {
  2480. $query->whereDate('n.NOTI_FEAR', '<=', $requestData['FECHA_FIN']);
  2481. }
  2482. $results = $query->select(
  2483. 'n.NOTI_IDMO',
  2484. 'n.NOTI_CONT',
  2485. 'n.NOTI_AUDI',
  2486. 'n.NOTI_ALCA',
  2487. 's.SOVA_ESTA',
  2488. DB::raw('CASE WHEN s.SOVA_IDSV IS NOT NULL THEN "Solicitud" ELSE "Notificacion" END as TIPO_NOTIFICACION'),
  2489. 'n.NOTI_FEAR as FECHA_CREACION'
  2490. )->orderBy('n.NOTI_FEAR', 'desc')->get();
  2491. // Procesar resultados para agregar campo de usuarios que vieron
  2492. foreach ($results as $result) {
  2493. if (in_array($requestData['ESTADO'] ?? '', ['Leido', 'No leido'])) {
  2494. $alcance = json_decode($result->NOTI_ALCA, true) ?: [];
  2495. $usuariosVieron = [];
  2496. foreach ($alcance as $item) {
  2497. if (($item['ESTADO'] ?? '') === 'Leído') {
  2498. $usuario = DB::table('S002V01TUSUA')
  2499. ->where('USUA_IDUS', $item['USUARIO'])
  2500. ->first(['USUA_NOMB', 'USUA_IDUS']);
  2501. if ($usuario) {
  2502. $usuariosVieron[] = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2503. }
  2504. }
  2505. }
  2506. $result->USUARIOS_VIERON = !empty($usuariosVieron) ? 'visto por ' . implode(', ', $usuariosVieron) : 'no visto';
  2507. }
  2508. }
  2509. return $this->responseController->makeResponse(false, "ÉXITO: Búsqueda completada", $results);
  2510. } catch (\Throwable $th) {
  2511. return $this->responseController->makeResponse(true, "Ocurrió un error en la búsqueda.", $th->getMessage(), 500);
  2512. }
  2513. }
  2514. public function searchSolicitudes(Request $request)
  2515. {
  2516. $validator = Validator::make($request->all(), [
  2517. 'USUARIO_VALIDADOR' => 'nullable|string',
  2518. 'ESTADO' => 'nullable|string|in:Pendiente,Aprobada,Rechazada,Validada por timeout',
  2519. 'FECHA_INICIO' => 'nullable|date',
  2520. 'FECHA_FIN' => 'nullable|date',
  2521. 'FECHA_VALIDACION' => 'nullable|date',
  2522. 'USUARIO' => 'required|string',
  2523. 'NUMERO_LINEA' => 'required|integer',
  2524. ]);
  2525. if ($validator->fails()) {
  2526. return $this->responseController->makeResponse(true, "Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401);
  2527. }
  2528. $requestData = $request->all();
  2529. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2530. if ($arrResponseCheckUser['error']) {
  2531. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2532. }
  2533. try {
  2534. $query = DB::table('S002V01TNOTI as n')
  2535. ->join('S002V01TSOVA as s', function ($join) {
  2536. $join->whereRaw('JSON_UNQUOTE(JSON_EXTRACT(s.SOVA_INEX, "$[0].idtask")) = JSON_UNQUOTE(JSON_EXTRACT(n.NOTI_ACCI, "$[3].idtask"))');
  2537. })
  2538. ->where('n.NOTI_NULI', '=', $requestData['NUMERO_LINEA']);
  2539. if (!empty($requestData['USUARIO_VALIDADOR'])) {
  2540. $query->where('s.SOVA_IDUS', '=', $requestData['USUARIO_VALIDADOR']);
  2541. }
  2542. if (!empty($requestData['ESTADO'])) {
  2543. $query->where('s.SOVA_ESTA', '=', $requestData['ESTADO']);
  2544. }
  2545. if (!empty($requestData['FECHA_INICIO'])) {
  2546. $query->whereDate('n.NOTI_FEAR', '>=', $requestData['FECHA_INICIO']);
  2547. }
  2548. if (!empty($requestData['FECHA_FIN'])) {
  2549. $query->whereDate('n.NOTI_FEAR', '<=', $requestData['FECHA_FIN']);
  2550. }
  2551. if (!empty($requestData['FECHA_VALIDACION'])) {
  2552. $query->whereDate('s.SOVA_FERE', '=', $requestData['FECHA_VALIDACION']);
  2553. }
  2554. $results = $query->select(
  2555. 'n.NOTI_CONT as MENSAJE',
  2556. 'n.NOTI_AUDI as AUDIENCIA',
  2557. 'n.NOTI_ALCA as ALCANCE',
  2558. 'n.NOTI_FEAR as FECHA_ENVIO',
  2559. 's.SOVA_ESTA as ESTADO_SOLICITUD',
  2560. 's.SOVA_FERE as FECHA_RESOLUCION'
  2561. )->orderBy('n.NOTI_FEAR', 'desc')->get();
  2562. foreach ($results as $result) {
  2563. // Formatear AUDIENCIA
  2564. $audiencia = json_decode($result->AUDIENCIA, true) ?: [];
  2565. $audienciaFormateada = [];
  2566. foreach ($audiencia as $userId) {
  2567. $usuario = DB::table('S002V01TUSUA')->where('USUA_IDUS', $userId)->first(['USUA_NOMB', 'USUA_IDUS']);
  2568. if ($usuario) $audienciaFormateada[] = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2569. }
  2570. $result->AUDIENCIA = implode(', ', $audienciaFormateada);
  2571. // Formatear ALCANCE
  2572. $alcance = json_decode($result->ALCANCE, true) ?: [];
  2573. $leidos = [];
  2574. $noLeidos = [];
  2575. foreach ($alcance as $item) {
  2576. $usuario = DB::table('S002V01TUSUA')->where('USUA_IDUS', $item['USUARIO'])->first(['USUA_NOMB', 'USUA_IDUS']);
  2577. if ($usuario) {
  2578. $nombreFormateado = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2579. if (($item['ESTADO'] ?? '') === 'Leído') {
  2580. $leidos[] = $nombreFormateado;
  2581. } else {
  2582. $noLeidos[] = $nombreFormateado;
  2583. }
  2584. }
  2585. }
  2586. $alcanceFormateado = [];
  2587. if (!empty($leidos)) $alcanceFormateado[] = 'Leído: ' . implode(', ', $leidos);
  2588. if (!empty($noLeidos)) $alcanceFormateado[] = 'No leído: ' . implode(', ', $noLeidos);
  2589. $result->ALCANCE = implode('. ', $alcanceFormateado);
  2590. }
  2591. return $this->responseController->makeResponse(false, "ÉXITO: Búsqueda de solicitudes completada", $results);
  2592. } catch (\Throwable $th) {
  2593. return $this->responseController->makeResponse(true, "Ocurrió un error en la búsqueda de solicitudes.", $th->getMessage(), 500);
  2594. }
  2595. }
  2596. public function searchNotificaciones(Request $request)
  2597. {
  2598. $validator = Validator::make($request->all(), [
  2599. 'USUARIOS_NOTIFICADOS' => 'nullable|array',
  2600. 'ESTADO' => 'nullable|string|in:Leido,No leido',
  2601. 'FECHA_INICIO' => 'nullable|date',
  2602. 'FECHA_FIN' => 'nullable|date',
  2603. 'USUARIO' => 'required|string',
  2604. 'NUMERO_LINEA' => 'required|integer',
  2605. ]);
  2606. if ($validator->fails()) {
  2607. return $this->responseController->makeResponse(true, "Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401);
  2608. }
  2609. $requestData = $request->all();
  2610. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2611. if ($arrResponseCheckUser['error']) {
  2612. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2613. }
  2614. try {
  2615. $query = DB::table('S002V01TNOTI as n')
  2616. ->join('S002V01TNOEJ as ne', function ($join) {
  2617. $join->whereRaw('JSON_UNQUOTE(JSON_EXTRACT(ne.NOWF_INEX, "$[0].idtask")) = JSON_UNQUOTE(JSON_EXTRACT(n.NOTI_ACCI, "$[0].idtask"))');
  2618. })
  2619. ->where('n.NOTI_NULI', '=', $requestData['NUMERO_LINEA']);
  2620. if (!empty($requestData['USUARIOS_NOTIFICADOS'])) {
  2621. $query->where(function ($q) use ($requestData) {
  2622. foreach ($requestData['USUARIOS_NOTIFICADOS'] as $usuario) {
  2623. $q->orWhereJsonContains('ne.NOWF_USNO', $usuario);
  2624. }
  2625. });
  2626. }
  2627. if (!empty($requestData['ESTADO'])) {
  2628. $estadoBuscar = $requestData['ESTADO'] === 'Leido' ? 'Leído' : 'No leído';
  2629. $query->whereRaw('JSON_SEARCH(n.NOTI_ALCA, "all", ?) IS NOT NULL', [$estadoBuscar]);
  2630. }
  2631. if (!empty($requestData['FECHA_INICIO'])) {
  2632. $query->whereDate('n.NOTI_FEAR', '>=', $requestData['FECHA_INICIO']);
  2633. }
  2634. if (!empty($requestData['FECHA_FIN'])) {
  2635. $query->whereDate('n.NOTI_FEAR', '<=', $requestData['FECHA_FIN']);
  2636. }
  2637. $results = $query->select(
  2638. 'n.NOTI_CONT as MENSAJE',
  2639. 'n.NOTI_AUDI as AUDIENCIA',
  2640. 'n.NOTI_ALCA as ALCANCE',
  2641. 'n.NOTI_FEAR as FECHA_ENVIO'
  2642. )->orderBy('n.NOTI_FEAR', 'desc')->get();
  2643. foreach ($results as $result) {
  2644. // Formatear AUDIENCIA
  2645. $audiencia = json_decode($result->AUDIENCIA, true) ?: [];
  2646. $audienciaFormateada = [];
  2647. foreach ($audiencia as $userId) {
  2648. $usuario = DB::table('S002V01TUSUA')->where('USUA_IDUS', $userId)->first(['USUA_NOMB', 'USUA_IDUS']);
  2649. if ($usuario) $audienciaFormateada[] = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2650. }
  2651. $result->AUDIENCIA = implode(', ', $audienciaFormateada);
  2652. // Formatear ALCANCE según estado solicitado
  2653. $alcance = json_decode($result->ALCANCE, true) ?: [];
  2654. $leidos = [];
  2655. $noLeidos = [];
  2656. foreach ($alcance as $item) {
  2657. $usuario = DB::table('S002V01TUSUA')->where('USUA_IDUS', $item['USUARIO'])->first(['USUA_NOMB', 'USUA_IDUS']);
  2658. if ($usuario) {
  2659. $nombreFormateado = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2660. if (($item['ESTADO'] ?? '') === 'Leído') {
  2661. $leidos[] = $nombreFormateado;
  2662. } else {
  2663. $noLeidos[] = $nombreFormateado;
  2664. }
  2665. }
  2666. }
  2667. if (!empty($requestData['ESTADO'])) {
  2668. if ($requestData['ESTADO'] === 'Leido') {
  2669. $result->ALCANCE = !empty($leidos) ? 'Leído por: ' . implode(', ', $leidos) : 'No leído por nadie';
  2670. } else {
  2671. $result->ALCANCE = !empty($noLeidos) ? 'No leído por: ' . implode(', ', $noLeidos) : 'Leído por todos';
  2672. }
  2673. } else {
  2674. $alcanceFormateado = [];
  2675. if (!empty($leidos)) $alcanceFormateado[] = 'Leído por: ' . implode(', ', $leidos);
  2676. if (!empty($noLeidos)) $alcanceFormateado[] = 'No leído por: ' . implode(', ', $noLeidos);
  2677. $result->ALCANCE = implode('. ', $alcanceFormateado);
  2678. }
  2679. }
  2680. return $this->responseController->makeResponse(false, "ÉXITO: Búsqueda de notificaciones completada", $results);
  2681. } catch (\Throwable $th) {
  2682. return $this->responseController->makeResponse(true, "Ocurrió un error en la búsqueda de notificaciones.", $th->getMessage(), 500);
  2683. }
  2684. }
  2685. public function searchWorkflows(Request $request)
  2686. {
  2687. $validator = Validator::make($request->all(), [
  2688. 'PREDETERMINADO' => 'nullable|boolean',
  2689. 'ESTADO' => 'nullable|string|in:Borrador,Activo,Eliminado',
  2690. 'USUARIO_REGISTRO' => 'nullable|string',
  2691. 'EJECUCION_INICIO' => 'nullable|date',
  2692. 'EJECUCION_FIN' => 'nullable|date',
  2693. 'ESTADO_EJECUCION' => 'nullable|string|in:En proceso,Completada,Interrumpida',
  2694. 'REGISTRO_INICIO' => 'nullable|date',
  2695. 'REGISTRO_FIN' => 'nullable|date',
  2696. 'USUARIO' => 'required|string',
  2697. 'NUMERO_LINEA' => 'required|integer',
  2698. ]);
  2699. if ($validator->fails()) {
  2700. return $this->responseController->makeResponse(true, "Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401);
  2701. }
  2702. $requestData = $request->all();
  2703. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2704. if ($arrResponseCheckUser['error']) {
  2705. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2706. }
  2707. try {
  2708. $query = DB::table('S002V01TWORK as w')
  2709. ->leftJoin('S002V01TEJWO as e', 'w.WORK_IDWO', '=', 'e.EJWO_IDWO')
  2710. ->where('w.WORK_NULI', '=', $requestData['NUMERO_LINEA']);
  2711. // Restricción: Si PREDETERMINADO = true, forzar USUARIO_REGISTRO = SAM
  2712. if (isset($requestData['PREDETERMINADO']) && $requestData['PREDETERMINADO']) {
  2713. $query->where('w.WORK_PRED', '=', 1)
  2714. ->where('w.WORK_USRE', '=', '0000000001');
  2715. } else {
  2716. if (isset($requestData['PREDETERMINADO']) && !$requestData['PREDETERMINADO']) {
  2717. $query->where('w.WORK_PRED', '=', 0);
  2718. }
  2719. if (!empty($requestData['USUARIO_REGISTRO'])) {
  2720. $query->where('w.WORK_USRE', '=', $requestData['USUARIO_REGISTRO']);
  2721. }
  2722. }
  2723. if (!empty($requestData['ESTADO'])) {
  2724. $query->where('w.WORK_ESTA', '=', $requestData['ESTADO']);
  2725. }
  2726. // Restricción: Si ESTADO = Borrador, excluir workflows con ejecuciones
  2727. if (!empty($requestData['EJECUCION_INICIO']) || !empty($requestData['EJECUCION_FIN']) || !empty($requestData['ESTADO_EJECUCION'])) {
  2728. $query->where('w.WORK_ESTA', '!=', 'Borrador');
  2729. }
  2730. if (!empty($requestData['EJECUCION_INICIO'])) {
  2731. $query->whereDate('e.EJWO_FERE', '>=', $requestData['EJECUCION_INICIO']);
  2732. }
  2733. if (!empty($requestData['EJECUCION_FIN'])) {
  2734. $query->whereDate('e.EJWO_FERE', '<=', $requestData['EJECUCION_FIN']);
  2735. }
  2736. if (!empty($requestData['ESTADO_EJECUCION'])) {
  2737. $query->where('e.EJWO_ESTA', '=', $requestData['ESTADO_EJECUCION']);
  2738. }
  2739. if (!empty($requestData['REGISTRO_INICIO'])) {
  2740. $query->whereDate('w.WORK_FERE', '>=', $requestData['REGISTRO_INICIO']);
  2741. }
  2742. if (!empty($requestData['REGISTRO_FIN'])) {
  2743. $query->whereDate('w.WORK_FERE', '<=', $requestData['REGISTRO_FIN']);
  2744. }
  2745. $results = $query->select(
  2746. 'w.WORK_IDWO as ID_WORKFLOW',
  2747. 'w.WORK_NOWO as NOMBRE_WORKFLOW',
  2748. 'w.WORK_DESC as DESC_WORKFLOW',
  2749. 'w.WORK_ESTA as ESTADO_WORKFLOW',
  2750. 'w.WORK_USRE as USUARIO_REGISTRO',
  2751. 'w.WORK_FERE as FECHA_REGISTRO',
  2752. DB::raw('COUNT(e.EJWO_IDEW) as EJECUCIONES'),
  2753. DB::raw('MAX(e.EJWO_FERE) as ULTIMA_EJECUCION')
  2754. )
  2755. ->groupBy('w.WORK_IDWO', 'w.WORK_NOWO', 'w.WORK_DESC', 'w.WORK_ESTA', 'w.WORK_USRE', 'w.WORK_FERE')
  2756. ->orderBy('w.WORK_FERE', 'desc')
  2757. ->get();
  2758. foreach ($results as $result) {
  2759. if (!empty($result->USUARIO_REGISTRO)) {
  2760. $usuario = DB::table('S002V01TUSUA')->where('USUA_IDUS', $result->USUARIO_REGISTRO)->first(['USUA_NOMB', 'USUA_IDUS']);
  2761. if ($usuario) {
  2762. $result->USUARIO_REGISTRO = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2763. }
  2764. }
  2765. }
  2766. return $this->responseController->makeResponse(false, "ÉXITO: Búsqueda de workflows completada", $results);
  2767. } catch (\Throwable $th) {
  2768. return $this->responseController->makeResponse(true, "Ocurrió un error en la búsqueda de workflows.", $th->getMessage(), 500);
  2769. }
  2770. }
  2771. public function getWorkflowExecutionsHistory($idWorkflow, $user, $line)
  2772. {
  2773. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  2774. if ($arrResponseCheckUser['error']) {
  2775. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2776. }
  2777. try {
  2778. $results = DB::table('S002V01TWORK as w')
  2779. ->join('S002V01TEJWO as ew', 'w.WORK_IDWO', '=', 'ew.EJWO_IDWO')
  2780. ->join('S002V01TEJTW as et', 'ew.EJWO_IDEW', '=', 'et.EJTW_IDEW')
  2781. ->join('S002V01TTAWO as ta', 'et.EJTW_IDTA', '=', 'ta.TAWO_IDTA')
  2782. ->where('w.WORK_IDWO', '=', $idWorkflow)
  2783. ->where('w.WORK_NULI', '=', $line)
  2784. ->select(
  2785. 'w.WORK_IDWO AS ID_WORKFLOW',
  2786. 'w.WORK_NOWO AS NOMBRE_WORKFLOW',
  2787. 'ew.EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  2788. 'et.EJTW_IDOJ AS OBJETO',
  2789. 'ew.EJWO_ESTA AS ESTADO_WORKFLOW',
  2790. 'ew.EJWO_FERE AS FECHA_INICIO',
  2791. 'ew.EJWO_FEMO AS FECHA_COMPLETADO',
  2792. 'et.EJTW_IDET AS ID_EJECUCION_TAREA',
  2793. 'ta.TAWO_NOTA AS NOMBRE_TAREA',
  2794. 'ta.TAWO_SECU AS SECUENCIA',
  2795. 'et.EJTW_ESTA AS ESTADO_TAREA',
  2796. 'et.EJTW_USAT AS USUARIO',
  2797. 'et.EJTW_FERE AS FECHA_EJECUCION'
  2798. )
  2799. ->orderBy('ew.EJWO_FERE', 'desc')
  2800. ->orderBy('ta.TAWO_SECU', 'asc')
  2801. ->get();
  2802. foreach ($results as $result) {
  2803. if (!empty($result->USUARIO)) {
  2804. $usuario = DB::table('S002V01TUSUA')->where('USUA_IDUS', $result->USUARIO)->first(['USUA_NOMB', 'USUA_IDUS']);
  2805. if ($usuario) {
  2806. $result->USUARIO = $usuario->USUA_NOMB . ' (' . $usuario->USUA_IDUS . ')';
  2807. }
  2808. }
  2809. }
  2810. return $this->responseController->makeResponse(false, "ÉXITO: Historial de ejecuciones obtenido", $results);
  2811. } catch (\Throwable $th) {
  2812. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el historial de ejecuciones.", $th->getMessage(), 500);
  2813. }
  2814. }
  2815. /**
  2816. * Procesa la información extra según las reglas de validación Función privada en uso
  2817. */
  2818. private function processExtraInfo($reglasValidacion, $requestData)
  2819. {
  2820. switch ($reglasValidacion) {
  2821. case 'Ejecutar':
  2822. return !empty($requestData['ID_WORKFLOW_EJECUTAR'])
  2823. ? json_encode(['id_workflow' => $requestData['ID_WORKFLOW_EJECUTAR']])
  2824. : null;
  2825. case 'Esperar':
  2826. $intervalo = $requestData['INTERVALO'] ?? 5;
  2827. $unidad = $requestData['UNIDAD'] ?? 'seg';
  2828. return json_encode(['intervalo' => $intervalo, 'unidad' => $unidad]);
  2829. default:
  2830. return null;
  2831. }
  2832. }
  2833. }