ProcessManagementController.php 121 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572
  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. class ProcessManagementController extends Controller
  9. {
  10. private $responseController;
  11. private $encController;
  12. private $resourcesController;
  13. private $documentManagementController;
  14. private $functionsController;
  15. private $notificationsController;
  16. private $socketClient;
  17. public function __construct(){
  18. $this->responseController = new ResponseController();
  19. $this->encController = new EncryptionController();
  20. $this->resourcesController = new ResourcesController();
  21. $this->documentManagementController = new DocumentManagementController();
  22. $this->functionsController = new FunctionsController();
  23. $this->notificationsController = new NotificationsController();
  24. $url = 'http://localhost:3200';
  25. $this->socketClient = new Client(Client::engine(Client::CLIENT_4X, $url));
  26. $this->socketClient->initialize();
  27. $this->socketClient->of('/');
  28. }
  29. public function getWorkflows($user, $line) {
  30. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  31. if ($arrResponseCheckUser['error']) {
  32. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  33. }
  34. try {
  35. $arrWorkflows = DB::table('S002V01TWORK')->select([
  36. 'WORK_IDWO',
  37. 'WORK_NOWO',
  38. 'WORK_DESC',
  39. 'WORK_PRED',
  40. 'WORK_HICA',
  41. 'WORK_ESTA',
  42. 'WORK_VERS',
  43. 'WORK_INEX',
  44. 'WORK_USRE',
  45. 'WORK_FERE',
  46. 'WORK_USMO',
  47. 'WORK_FEMO',
  48. 'MODU_NOMO'
  49. ])->where('WORK_NULI', '=', $line)
  50. ->leftJoin('S002V01WRMO', 'WRMO_IDWO', '=', 'WORK_IDWO')
  51. ->leftJoin('S002V01TMODU', function($join) use ($line) {
  52. $join->on('MODU_IDMO', '=', 'WRMO_IDMO')
  53. ->where('MODU_NULI', '=', $line);
  54. })->get()->all();
  55. $arrWorkflows = json_decode(json_encode($arrWorkflows), true);
  56. } catch (\Throwable $th) {
  57. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los flujos de trabajo.", $th->getMessage(), 500);
  58. }
  59. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrWorkflows, $line);
  60. if ($responseCheckLatestUpdate['error']) {
  61. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  62. }
  63. $arrWorkflows = $responseCheckLatestUpdate['response'];
  64. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWorkflows);
  65. }
  66. public function getWorkflowById($idWorkflow, $user, $line) {
  67. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  68. if ($arrResponseCheckUser['error']) {
  69. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  70. }
  71. try {
  72. $idWorkflow = $this->encController->decrypt($idWorkflow);
  73. } catch (\Throwable $th) {
  74. return $this->responseController->makeResponse(true, 'ERR_AREA_GETBY000: Ocurrió un error al desencriptar el ID del almacen', $th->getMessage(), 406);
  75. }
  76. try {
  77. $arrWorkflow = (array) DB::table('S002V01TWORK')
  78. ->where('WORK_IDWO', '=', $idWorkflow)
  79. ->where('WORK_NULI', '=', $line)
  80. ->where('WORK_ESTA', '=', 'Activo')
  81. ->first([
  82. 'WORK_NOWO',
  83. 'WORK_DESC',
  84. 'WORK_PRED',
  85. 'WORK_HICA',
  86. 'WORK_VERS',
  87. 'WORK_INEX'
  88. ]);
  89. } catch (\Throwable $th) {
  90. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los flujos de trabajo.", $th->getMessage(), 500);
  91. }
  92. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWorkflow);
  93. }
  94. //Submodulo de auditoria: Busqueda de flujos de trabajo y solicitudes de validacion
  95. public function getProcessWorkflow($user, $line) {
  96. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  97. if ($arrResponseCheckUser['error']) {
  98. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  99. }
  100. try {
  101. $arrProcessWorkflow = DB::table('S002V01TPRWO')
  102. ->where('PRWO_NULI', '=', $line)
  103. ->get([
  104. 'PRWO_IDPR AS ID_PROCESO',
  105. 'PRWO_IDMO AS ID_MODULO',
  106. 'PRWO_NOPR AS NOMBRE_PROCESO',
  107. 'PRWO_ESTA AS ESTADO',
  108. ]);
  109. $arrProcessWorkflow = json_decode(json_encode($arrProcessWorkflow), true);
  110. } catch (\Throwable $th) {
  111. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el proceso del flujo de trabajo.", $th->getMessage(), 500);
  112. }
  113. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrProcessWorkflow);
  114. }
  115. public function getTasks($user, $line) {
  116. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  117. if ($arrResponseCheckUser['error']) {
  118. DB::rollBack();
  119. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  120. }
  121. try {
  122. $arrTasks = DB::table('S002V01TTAWO')
  123. ->where('TAWO_NULI', '=', $line)
  124. ->get([
  125. 'TAWO_IDTA AS ID_TAREA',
  126. 'TAWO_IDWO AS ID_WORKFLOW',
  127. 'TAWO_IDPR AS ID_PROCESO',
  128. 'TAWO_NOTA AS NOMBRE_TAREA',
  129. 'TAWO_DESC AS DESCRIPCION',
  130. 'TAWO_SECU AS SECUENCIA',
  131. 'TAWO_ESTA AS ESTADO',
  132. 'TAWO_USRE AS USUARIO_REGISTRA',
  133. 'TAWO_FERE AS FECHA_REGISTRA',
  134. 'TAWO_USMO AS USUARIO_MODIFICA',
  135. 'TAWO_FEMO AS FECHA_MODIFICA',
  136. ]);
  137. $arrTasks = json_decode(json_encode($arrTasks), true);
  138. } catch (\Throwable $th) {
  139. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los flujos de trabajo.", $th->getMessage(), 500);
  140. }
  141. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrTasks, $line);
  142. if ($responseCheckLatestUpdate['error']) {
  143. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  144. }
  145. $arrTasks = $responseCheckLatestUpdate['response'];
  146. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrTasks);
  147. }
  148. public function getTaskByWorkflow($idWorkflow, $user, $line) {
  149. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  150. if ($arrResponseCheckUser['error']) {
  151. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  152. }
  153. $idWorkflow = $this->encController->decrypt($idWorkflow);
  154. if (is_null($idWorkflow)) {
  155. return $this->responseController->makeResponse(true, 'El flujo de trabajo no está encriptado correctamente.', [], 500);
  156. }
  157. try {
  158. $arrTask = DB::table('S002V01TTAWO')->select([
  159. 'TAWO_IDTA AS ID_TAREA',
  160. 'TAWO_NOTA AS NOMBRE_TAREA',
  161. 'TAWO_SECU AS SECUENCIA'
  162. ])->where([
  163. ['TAWO_IDWO', '=', $idWorkflow],
  164. ['TAWO_ESTA', '=', 'Activo'],
  165. ['TAWO_NULI', '=', $line],
  166. ])->get()->all();
  167. } catch (\Throwable $th) {
  168. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener las tareas del flujo de trabajo.', [], 500);
  169. }
  170. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrTask);
  171. }
  172. public function getTaskById($idTask, $user, $line) {
  173. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  174. if ($arrResponseCheckUser['error']) {
  175. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  176. }
  177. $idTask = $this->encController->decrypt($idTask);
  178. if (is_null($idTask)) {
  179. return $this->responseController->makeResponse(true, 'El identificador no se encuentra encriptado correctamente.', [], 401);
  180. }
  181. try {
  182. $arrTask = (array) DB::table('S002V01TTAWO')
  183. ->where('TAWO_IDTA', '=', $idTask)
  184. ->where('TAWO_NULI', '=', $line)
  185. ->where('TAWO_ESTA', '=', 'Activo')
  186. ->first([
  187. 'TAWO_IDWO AS ID_WORKFLOW',
  188. 'TAWO_IDPR AS ID_PROCESO',
  189. 'TAWO_NOTA AS NOMBRE_TAREA',
  190. 'TAWO_OTWO AS ID_OTRO_WORKFLOW',
  191. 'TAWO_DESC AS DESCRIPCION',
  192. 'TAWO_REVA AS REGLAS_VALIDACION',
  193. 'TAWO_SECU AS SECUENCIA',
  194. ]);
  195. } catch (\Throwable $th) {
  196. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas.", $th->getMessage(), 500);
  197. }
  198. if (empty($arrTask)) {
  199. return $this->responseController->makeResponse(true, "La tarea no existe.", [], 500);
  200. }
  201. try {
  202. $arrNotificaciones = DB::table('S002V01TNTWO')
  203. ->where('NTWO_IDTA', '=', $idTask)
  204. ->where('NTWO_NULI', '=', $line)
  205. ->where('NTWO_ESTA', '=', 'Activo')
  206. ->orderBy('NTWO_SECU', 'ASC')
  207. ->get([
  208. 'NTWO_IDUS AS ID_USUARIO',
  209. 'NTWO_TINO AS TIPO_NOTIFICACION',
  210. ]);
  211. $arrNotificaciones = json_decode(json_encode($arrNotificaciones), true);
  212. } catch (\Throwable $th) {
  213. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los usuarios con notificaciones.", $th->getMessage(), 500);
  214. }
  215. $arrUserValidator = array();
  216. $arrUserNotification = array();
  217. foreach ($arrNotificaciones as $key => $value) {
  218. if ($value['TIPO_NOTIFICACION'] === 'V') {
  219. $arrUserValidator[] = $value['ID_USUARIO'];
  220. }
  221. if ($value['TIPO_NOTIFICACION'] === 'N') {
  222. $arrUserNotification[] = $value['ID_USUARIO'];
  223. }
  224. }
  225. $arrTask['NOTIFICAR_USUARIOS'] = $arrUserNotification;
  226. $arrTask['USUARIOS_VALIDACION'] = $arrUserValidator;
  227. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrTask);
  228. }
  229. public function registerTask(Request $request) {
  230. $validator = Validator::make($request->all(), [
  231. 'ID_WORKFLOW' => 'string|required',
  232. 'ID_PROCESO' => 'string|required',
  233. 'NOMBRE_TAREA' => 'string|required',
  234. 'DESCRIPCION' => 'string|required',
  235. 'REGLAS_VALIDACION' => 'string|required',
  236. 'ID_OTRO_WORKFLOW' => 'string|nullable',
  237. 'USUARIO_VALIDACION' => 'array|required',
  238. 'NOTIFICAR_USUARIOS' => 'array|required',
  239. 'USUARIO' => 'string|required',
  240. 'NUMERO_LINEA' => 'required|integer',
  241. ]);
  242. if ($validator->fails()) {
  243. return $this->responseController->makeResponse(
  244. true,
  245. "Se encontraron uno o más errores.",
  246. $this->responseController->makeErrors($validator->errors()->messages()),
  247. 401
  248. );
  249. }
  250. DB::beginTransaction();
  251. $requestData = $request->all();
  252. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  253. if ($arrResponseCheckUser['error']) {
  254. DB::rollBack();
  255. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  256. }
  257. $user = $arrResponseCheckUser['response'];
  258. $now = $this->functionsController->now();
  259. $currentDate = $now->toDateTimeString();
  260. try {
  261. $countTask = DB::table('S002V01TTAWO')
  262. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  263. ->where('TAWO_IDWO', '=', $requestData['ID_WORKFLOW'])
  264. ->count();
  265. } catch (\Throwable $th) {
  266. DB::rollBack();
  267. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas.", $th->getMessage(), 500);
  268. }
  269. $countTask = $countTask + 1;
  270. try {
  271. $idTask = DB::table('S002V01TTAWO')->insertGetId([
  272. 'TAWO_NULI' => $requestData['NUMERO_LINEA'],
  273. 'TAWO_IDWO' => $requestData['ID_WORKFLOW'],
  274. 'TAWO_OTWO' => $requestData['ID_OTRO_WORKFLOW'],
  275. 'TAWO_IDPR' => $requestData['ID_PROCESO'],
  276. 'TAWO_NOTA' => $requestData['NOMBRE_TAREA'],
  277. 'TAWO_DESC' => $requestData['DESCRIPCION'],
  278. 'TAWO_REVA' => $requestData['REGLAS_VALIDACION'],
  279. 'TAWO_SECU' => $countTask,
  280. 'TAWO_USRE' => $user,
  281. 'TAWO_FERE' => $currentDate,
  282. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  283. ]);
  284. } catch (\Throwable $th) {
  285. DB::rollBack();
  286. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar las tareas.", $th->getMessage(), 500);
  287. }
  288. if (is_null($idTask)) {
  289. DB::rollBack();
  290. return $this->responseController->makeResponse(true, "No se pudo registrar las tareas.", [], 500);
  291. };
  292. try {
  293. $validateUpdate = DB::table('S002V01TPRWO')
  294. ->where('PRWO_IDPR', '=', $requestData['ID_PROCESO'])
  295. ->where('PRWO_ESTA', '=', 'Sin asignar')
  296. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  297. ->update([
  298. 'PRWO_ESTA' => 'Asignado',
  299. 'PRWO_USMO' => $user,
  300. 'PRWO_FEMO' => $currentDate,
  301. 'PRWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  302. ]);
  303. } catch (\Throwable $th) {
  304. DB::rollBack();
  305. return $this->responseController->makeResponse(true, "Ocurrió un error al modificar el proceso del flujo de trabajo.", $th->getMessage(), 500);
  306. }
  307. if (!$validateUpdate) {
  308. DB::rollBack();
  309. return $this->responseController->makeResponse(true, "No se pudo modificar el proceso del flujo de trabajo.", [], 500);
  310. };
  311. foreach ($requestData['USUARIO_VALIDACION'] as $keyUser => $userValidator) {
  312. try {
  313. $validateInsert = DB::table('S002V01TNTWO')->insert([
  314. 'NTWO_NULI' => $requestData['NUMERO_LINEA'],
  315. 'NTWO_IDTA' => $idTask,
  316. 'NTWO_IDUS' => $userValidator,
  317. 'NTWO_TINO' => 'V',
  318. 'NTWO_SECU' => $keyUser + 1,
  319. 'NTWO_USRE' => $user,
  320. 'NTWO_FERE' => $currentDate,
  321. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  322. ]);
  323. } catch (\Throwable $th) {
  324. DB::rollBack();
  325. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la notificaciones de validación 1.", $th->getMessage(), 500);
  326. }
  327. if (!$validateInsert) {
  328. DB::rollBack();
  329. return $this->responseController->makeResponse(true, "No se pudo registrar las notificaciones", [], 500);
  330. }
  331. }
  332. $count = 1;
  333. foreach ($requestData['NOTIFICAR_USUARIOS'] as $key => $value) {
  334. try {
  335. $validateInsert = DB::table('S002V01TNTWO')->insert([
  336. 'NTWO_NULI' => $requestData['NUMERO_LINEA'],
  337. 'NTWO_IDTA' => $idTask,
  338. 'NTWO_IDUS' => $value,
  339. 'NTWO_SECU' => $count,
  340. 'NTWO_TINO' => 'N',
  341. 'NTWO_USRE' => $user,
  342. 'NTWO_FERE' => $currentDate,
  343. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  344. ]);
  345. } catch (\Throwable $th) {
  346. DB::rollBack();
  347. return $this->responseController->makeResponse(true, "Ocurrió un error las notificaciones", $th->getMessage(), 500);
  348. }
  349. $count++;
  350. }
  351. DB::commit();
  352. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  353. }
  354. public function updateTask(Request $request, $idTask) {
  355. $validator = Validator::make($request->all(), [
  356. 'ID_WORKFLOW' => 'string|required',
  357. 'ID_PROCESO' => 'string|required',
  358. 'NOMBRE_TAREA' => 'string|required',
  359. 'DESCRIPCION' => 'string|required',
  360. 'REGLAS_VALIDACION' => 'string|required',
  361. 'ID_OTRO_WORKFLOW' => 'string|nullable',
  362. 'USUARIO_VALIDACION' => 'array|required',
  363. 'NOTIFICAR_USUARIOS' => 'array|nullable',
  364. 'USUARIO' => 'string|required',
  365. 'NUMERO_LINEA' => 'required|integer',
  366. ]);
  367. if ($validator->fails()) {
  368. return $this->responseController->makeResponse(
  369. true,
  370. "Se encontraron uno o más errores.",
  371. $this->responseController->makeErrors($validator->errors()->messages()),
  372. 401
  373. );
  374. }
  375. DB::beginTransaction();
  376. $requestData = $request->all();
  377. // Desencripta el usuario y verifica que el usuario exista en la base de datos
  378. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  379. if ($arrResponseCheckUser['error']) {
  380. DB::rollBack();
  381. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  382. }
  383. // Guarda el número del usuario
  384. $user = $arrResponseCheckUser['response'];
  385. // Obtiene la información del identificador de la tarea
  386. $idTask = $this->encController->decrypt($idTask);
  387. if (is_null($idTask)) {
  388. return $this->responseController->makeResponse(true, 'La tarea no está encriptado correctamente.', [], 406);
  389. }
  390. // Obtiene la fecha actual
  391. $now = $this->functionsController->now();
  392. $currentDate = $now->toDateTimeString();
  393. try {
  394. //Se verifica que el identificador de la tarea exista
  395. $validateExists = DB::table('S002V01TTAWO')
  396. ->where('TAWO_IDTA', '=', $idTask)
  397. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  398. ->where('TAWO_ESTA', '=', 'Activo')
  399. ->exists();
  400. } catch (\Throwable $th) {
  401. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar si existe la tarea.', $th->getMessage(), 406);
  402. }
  403. if (!$validateExists) {
  404. return $this->responseController->makeResponse(true, 'La tarea no existe.', [], 406);
  405. }
  406. try {
  407. // Actualiza la información de la tarea según los datos del formulario obtenido
  408. $validateUpdate = DB::table('S002V01TTAWO')
  409. ->where('TAWO_IDTA', '=', $idTask)
  410. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  411. ->where('TAWO_ESTA', '=', 'Activo')
  412. ->update([
  413. 'TAWO_IDWO' => $requestData['ID_WORKFLOW'],
  414. 'TAWO_OTWO' => $requestData['ID_OTRO_WORKFLOW'],
  415. 'TAWO_IDPR' => $requestData['ID_PROCESO'],
  416. 'TAWO_NOTA' => $requestData['NOMBRE_TAREA'],
  417. 'TAWO_DESC' => $requestData['DESCRIPCION'],
  418. 'TAWO_REVA' => $requestData['REGLAS_VALIDACION'],
  419. 'TAWO_USMO' => $user,
  420. 'TAWO_FEMO' => $currentDate,
  421. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  422. ]);
  423. } catch (\Throwable $th) {
  424. DB::rollBack();
  425. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar las tareas.", $th->getMessage(), 500);
  426. }
  427. // Se verifica que la información haya sido actualizada correctamente
  428. if (!$validateUpdate) {
  429. DB::rollBack();
  430. return $this->responseController->makeResponse(true, "No se pudo registrar las tareas.", [], 500);
  431. };
  432. try {
  433. // Se obtiene la información de las notificaciones para validar de la tarea
  434. $arrNotfValidate = DB::table('S002V01TNTWO')
  435. ->where('NTWO_TINO', '=', 'V')
  436. ->where('NTWO_ESTA', '=', 'Activo')
  437. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  438. ->where('NTWO_IDTA', '=', $idTask)
  439. ->get([
  440. 'NTWO_IDUS AS ID_USUARIO',
  441. ]);
  442. // La información es pasada a un arreglo
  443. $arrNotfValidate = json_decode(json_encode($arrNotfValidate), true);
  444. } catch (\Throwable $th) {
  445. DB::rollBack();
  446. return $this->responseController->makeResponse(true, 'Ocurrió un error un al obtener el usuario de notificación de validación.', $th->getMessage(), 406);
  447. }
  448. // Se obtiene únicamente la información del usuario
  449. $arrNotification = array_column($arrNotfValidate, 'ID_USUARIO');
  450. // Si no hay información de usuarios para validar, entonces...
  451. if (empty($arrNotfValidate)) {
  452. // Variable para colocar la secuencia de los usuarios a validar
  453. $count = 1;
  454. foreach ($requestData['USUARIO_VALIDACION'] as $key => $value) {
  455. try {
  456. // Se registran los usuarios en el orden en el que están registrados en el arreglo
  457. $validateInsert = DB::table('S002V01TNTWO')->insert([
  458. 'NTWO_NULI' => $requestData['NUMERO_LINEA'],
  459. 'NTWO_IDTA' => $idTask,
  460. 'NTWO_IDUS' => $value,
  461. 'NTWO_TINO' => 'V',
  462. 'NTWO_SECU' => $count,
  463. 'NTWO_USRE' => $user,
  464. 'NTWO_FERE' => $currentDate,
  465. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  466. ]);
  467. } catch (\Throwable $th) {
  468. DB::rollBack();
  469. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la notificaciones de validación 1.", $th->getMessage(), 500);
  470. }
  471. if (!$validateInsert) {
  472. DB::rollBack();
  473. return $this->responseController->makeResponse(true, "No se pudo registrar las notificaciones", [], 500);
  474. }
  475. // Cada que se registre un usuario, su secuencia se incrementará
  476. $count++;
  477. }
  478. // En caso de existir información de usuarios para validar, entonces...
  479. } else {
  480. // En caso de que un usuario no se encuentre seleccionado en el formulario y este ya se haya registrado en la base de datos,
  481. // entonces se obtiene su identificador en un arreglo para ser eliminado
  482. $arrRemoveUser = array();
  483. foreach ($arrNotification as $notification) {
  484. if (!in_array($notification, $requestData['USUARIO_VALIDACION'])) {
  485. $arrRemoveUser[] = $notification;
  486. }
  487. }
  488. // Los usuarios que se encontraron para ser eliminados, su estado procede a ser eliminado
  489. try {
  490. $validateUpdate = DB::table('S002V01TNTWO')
  491. ->where('NTWO_TINO', '=', 'V')
  492. ->where('NTWO_IDTA', '=', $idTask)
  493. ->where('NTWO_ESTA', '=', 'Activo')
  494. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  495. ->update([
  496. 'NTWO_ESTA' => 'Eliminado',
  497. 'NTWO_SECU' => 0,
  498. 'NTWO_USMO' => $user,
  499. 'NTWO_FEMO' => $currentDate,
  500. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  501. ]);
  502. } catch (\Throwable $th) {
  503. DB::rollBack();
  504. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar al otro usuario de notificación de validación 2.', $th->getMessage(), 406);
  505. }
  506. if (!$validateUpdate) {
  507. DB::rollBack();
  508. return $this->responseController->makeResponse(true, 'No se pudo modificar al otro usuario de notificación de validación. 2', [], 406);
  509. }
  510. $count = 1;
  511. foreach ($requestData['USUARIO_VALIDACION'] as $key => $validateUser) {
  512. try {
  513. $validateInsert = DB::table('S002V01TNTWO')->insert([
  514. 'NTWO_NULI' => $requestData['NUMERO_LINEA'],
  515. 'NTWO_IDTA' => $idTask,
  516. 'NTWO_IDUS' => $validateUser,
  517. 'NTWO_TINO' => 'V',
  518. 'NTWO_SECU' => $count,
  519. 'NTWO_USRE' => $user,
  520. 'NTWO_FERE' => $currentDate,
  521. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  522. ]);
  523. } catch (\Throwable $th) {
  524. DB::rollBack();
  525. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la notificaciones de validación 3.", $th->getMessage(), 500);
  526. }
  527. if (!$validateInsert) {
  528. DB::rollBack();
  529. return $this->responseController->makeResponse(true, "No se pudo registrar las notificaciones 3", [], 500);
  530. }
  531. $count++;
  532. }
  533. }
  534. try {
  535. $arrNotification = DB::table('S002V01TNTWO')
  536. ->where('NTWO_TINO', '=', 'N')
  537. ->where('NTWO_ESTA', '=', 'Activo')
  538. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  539. ->where('NTWO_IDTA', '=', $idTask)
  540. ->get([
  541. 'NTWO_IDUS AS ID_USUARIO',
  542. ]);
  543. $arrNotification = json_decode(json_encode($arrNotification), true);
  544. } catch (\Throwable $th) {
  545. DB::rollBack();
  546. return $this->responseController->makeResponse(true, 'Ocurrió un error un al obtener el usuario de notificación de validación 7.', $th->getMessage(), 406);
  547. }
  548. $arrNotification = array_column($arrNotification, 'ID_USUARIO');
  549. if (empty($arrNotification)) {
  550. $count = 1;
  551. foreach ($requestData['NOTIFICAR_USUARIOS'] as $value) {
  552. try {
  553. $validateInsert = DB::table('S002V01TNTWO')->insert([
  554. 'NTWO_NULI' => $requestData['NUMERO_LINEA'],
  555. 'NTWO_IDTA' => $idTask,
  556. 'NTWO_IDUS' => $value,
  557. 'NTWO_TINO' => 'N',
  558. 'NTWO_SECU' => $count,
  559. 'NTWO_USRE' => $user,
  560. 'NTWO_FERE' => $currentDate,
  561. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  562. ]);
  563. } catch (\Throwable $th) {
  564. DB::rollBack();
  565. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la notificaciones de validación 8.", $th->getMessage(), 500);
  566. }
  567. if (!$validateInsert) {
  568. DB::rollBack();
  569. return $this->responseController->makeResponse(true, "No se pudo registrar las notificaciones 8", [], 500);
  570. }
  571. $count++;
  572. }
  573. } else {
  574. $arrRemoveUser = array();
  575. foreach ($arrNotification as $notification) {
  576. if (!in_array($notification, $requestData['NOTIFICAR_USUARIOS'])) {
  577. $arrRemoveUser[] = $notification;
  578. }
  579. }
  580. foreach ($arrRemoveUser as $removeUser) {
  581. try {
  582. $validateUpdate = DB::table('S002V01TNTWO')
  583. ->where('NTWO_TINO', '=', 'N')
  584. ->where('NTWO_IDTA', '=', $idTask)
  585. ->where('NTWO_ESTA', '=', 'Activo')
  586. ->where('NTWO_IDUS', '=', $removeUser)
  587. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  588. ->update([
  589. 'NTWO_ESTA' => 'Eliminado',
  590. 'NTWO_USMO' => $user,
  591. 'NTWO_FEMO' => $currentDate,
  592. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  593. ]);
  594. } catch (\Throwable $th) {
  595. DB::rollBack();
  596. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar al otro usuario de notificación de validación 9.', $th->getMessage(), 406);
  597. }
  598. if (!$validateUpdate) {
  599. DB::rollBack();
  600. return $this->responseController->makeResponse(true, 'No se pudo modificar al otro usuario de notificación de validación. 9', [], 406);
  601. }
  602. }
  603. $count = 1;
  604. foreach ($requestData['NOTIFICAR_USUARIOS'] as $key => $notificateUser) {
  605. if (!in_array($notificateUser, $arrNotification)) {
  606. try {
  607. $validateInsert = DB::table('S002V01TNTWO')->insert([
  608. 'NTWO_NULI' => $requestData['NUMERO_LINEA'],
  609. 'NTWO_IDTA' => $idTask,
  610. 'NTWO_IDUS' => $notificateUser,
  611. 'NTWO_TINO' => 'N',
  612. 'NTWO_SECU' => $count,
  613. 'NTWO_USRE' => $user,
  614. 'NTWO_FERE' => $currentDate,
  615. 'NTWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  616. ]);
  617. } catch (\Throwable $th) {
  618. DB::rollBack();
  619. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la notificaciones de validación 10.", $th->getMessage(), 500);
  620. }
  621. if (!$validateInsert) {
  622. DB::rollBack();
  623. return $this->responseController->makeResponse(true, "No se pudo registrar las notificaciones", [], 500);
  624. }
  625. $count++;
  626. }
  627. }
  628. }
  629. try {
  630. $arrExecuteWorkflow = DB::table('S002V01TEJWO')
  631. ->where('EJWO_NULI', '=', $requestData['NUMERO_LINEA'])
  632. ->where('EJWO_IDWO', '=', $requestData['ID_WORKFLOW'])
  633. ->where('EJWO_ESTA', '=', 'En proceso')
  634. ->get([
  635. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  636. ]);
  637. $arrExecuteWorkflow = json_decode(json_encode($arrExecuteWorkflow), true);
  638. $arrExecuteWorkflow = array_column($arrExecuteWorkflow, 'ID_EJECUCION_WORKFLOW');
  639. } catch (\Throwable $th) {
  640. DB::rollBack();
  641. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener las ejecuciones pendientes.', $th->getMessage(), 406);
  642. }
  643. $arrResendNotificate = array();
  644. foreach ($arrExecuteWorkflow as $executeWorkflow) {
  645. try {
  646. $arrExecuteTask = DB::table('S002V01TEJTW')
  647. ->where('EJTW_IDEW', '=', $executeWorkflow)
  648. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  649. ->where('TAWO_ESTA', '=', 'Activo')
  650. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  651. ->where('PRWO_ESTA', '=', 'Asignado')
  652. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  653. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  654. ->orderBy('TAWO_SECU', 'ASC')
  655. ->get([
  656. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  657. 'TAWO_SECU AS SECUENCIA',
  658. 'TAWO_IDWO AS ID_WORKFLOW',
  659. 'TAWO_IDTA AS ID_TAREA',
  660. 'PRWO_IDPR AS ID_PROCESO',
  661. 'PRWO_NOPR AS NOMBRE_PROCESO'
  662. ]);
  663. $arrExecuteTask = json_decode(json_encode($arrExecuteTask), true);
  664. } catch (\Throwable $th) {
  665. DB::rollBack();
  666. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener las ejecuciones de las tareas.', $th->getMessage(), 406);
  667. }
  668. foreach ($arrExecuteTask as $keyExecuteTask => $executeTask) {
  669. if ($executeTask['SECUENCIA'] === 1) {
  670. $arrUpdate = [
  671. 'EJTW_ESTA' => 'En proceso',
  672. 'EJTW_USMO' => $user,
  673. 'EJTW_FEMO' => $currentDate,
  674. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  675. ];
  676. } else {
  677. $arrUpdate = [
  678. 'EJTW_INFO' => null,
  679. 'EJTW_INRE' => null,
  680. 'EJTW_ESTA' => 'En espera',
  681. 'EJTW_USMO' => $user,
  682. 'EJTW_FEMO' => $currentDate,
  683. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  684. ];
  685. }
  686. try {
  687. $validateUpdate = DB::table('S002V01TEJTW')
  688. ->where('EJTW_IDEW', '=', $executeWorkflow)
  689. ->where('EJTW_IDET', '=', $executeTask['ID_EJECUCION_TAREA'])
  690. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  691. ->update($arrUpdate);
  692. } catch (\Throwable $th) {
  693. DB::rollBack();
  694. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar las ejecuciones de las tareas.', $th->getMessage(), 406);
  695. }
  696. if (!$validateUpdate) {
  697. DB::rollBack();
  698. return $this->responseController->makeResponse(true, 'No se pudo modificar las ejecuciones de las tareas.', [], 406);
  699. }
  700. try {
  701. $validateExists = DB::table('S002V01TEJNO')
  702. ->where('EJNO_IDET', '=', $executeTask['ID_EJECUCION_TAREA'])
  703. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  704. ->exists();
  705. } catch (\Throwable $th) {
  706. DB::rollBack();
  707. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener las ejecuciones de las notificaciones.', $th->getMessage(), 406);
  708. }
  709. if ($validateExists) {
  710. try {
  711. $validateUpdate = DB::table('S002V01TEJNO')
  712. ->where('EJNO_IDET', '=', $executeTask['ID_EJECUCION_TAREA'])
  713. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  714. ->update([
  715. 'EJNO_ESTA' => 'Obsoleto',
  716. 'EJNO_USMO' => $user,
  717. 'EJNO_FEMO' => $currentDate,
  718. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP')
  719. ]);
  720. } catch (\Throwable $th) {
  721. DB::rollBack();
  722. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar las ejecuciones de las notificaciones.', $th->getMessage(), 406);
  723. }
  724. if (!$validateUpdate) {
  725. DB::rollBack();
  726. return $this->responseController->makeResponse(true, 'No se pudo modificar las ejecuciones de las notificaciones.', [], 406);
  727. }
  728. }
  729. if ($executeTask['SECUENCIA'] === 1) {
  730. $arrResendNotificate[] = [
  731. 'ID_EJECUCION_WORKFLOW' => $executeWorkflow,
  732. 'ID_WORKFLOW' => $executeTask['ID_WORKFLOW'],
  733. 'ID_TAREA' => $executeTask['ID_TAREA'],
  734. 'ID_EJECUCION_TAREA' => $executeTask['ID_EJECUCION_TAREA'],
  735. 'ID_PROCESO' => $executeTask['ID_PROCESO'],
  736. 'NOMBRE_PROCESO' => $executeTask['NOMBRE_PROCESO'],
  737. ];
  738. }
  739. }
  740. }
  741. foreach ($arrResendNotificate as $resendNotificate) {
  742. try {
  743. $arrNotificate = DB::table('S002V01TNTWO')
  744. ->where('NTWO_IDTA', '=', $executeTask['ID_TAREA'])
  745. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  746. ->where('NTWO_ESTA', '=', 'Activo')
  747. ->orderBy('NTWO_SECU', 'ASC')
  748. ->get([
  749. 'NTWO_IDUS AS USUARIO_NOTIFICACION',
  750. 'NTWO_TINO AS TIPO_NOTIFICACION',
  751. 'NTWO_SECU AS SECUENCIA',
  752. ]);
  753. $arrNotificate = json_decode(json_encode($arrNotificate), true);
  754. } catch (\Throwable $th) {
  755. DB::rollBack();
  756. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener las notificaciones.', $th->getMessage(), 406);
  757. }
  758. $userValidate = null;
  759. $notifacateUsers = array();
  760. foreach ($arrNotificate as $notificate) {
  761. try {
  762. $validateRegister = DB::table('S002V01TEJNO')->insert([
  763. 'EJNO_NULI' => $requestData['NUMERO_LINEA'],
  764. 'EJNO_IDET' => $resendNotificate['ID_EJECUCION_TAREA'],
  765. 'EJNO_USNO' => $notificate['USUARIO_NOTIFICACION'],
  766. 'EJNO_SECU' => $notificate['SECUENCIA'],
  767. 'EJNO_TINO' => $notificate['TIPO_NOTIFICACION'],
  768. 'EJNO_ESTA' => $notificate['SECUENCIA'] === 1 || $notificate['TIPO_NOTIFICACION'] === 'N' ? 'Notificado' : 'En espera',
  769. 'EJNO_USRE' => $user,
  770. 'EJNO_FERE' => $currentDate,
  771. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  772. ]);
  773. } catch (\Throwable $th) {
  774. DB::rollBack();
  775. return $this->responseController->makeResponse(true, 'Ocurrió un error al registrar las notificaciones.', $th->getMessage(), 406);
  776. }
  777. if (!$validateRegister) {
  778. DB::rollBack();
  779. return $this->responseController->makeResponse(true, 'No se pudo registrar las notificaciones.', [], 406);
  780. }
  781. if ($notificate['TIPO_NOTIFICACION'] === 'V' && $notificate['SECUENCIA'] === 1) {
  782. $userValidate = $notificate['USUARIO_NOTIFICACION'];
  783. }
  784. if ($notificate['TIPO_NOTIFICACION'] === 'N') {
  785. $notifacateUsers[] = $notificate['USUARIO_NOTIFICACION'];
  786. }
  787. }
  788. if (is_null($userValidate)) {
  789. DB::rollBack();
  790. return $this->responseController->makeResponse(true, "No se encontró el usuario para enviar la notificación para la validación de la ejecución #{$resendNotificate['ID_EJECUCION_TAREA']}.", [], 406);
  791. }
  792. $objExecute = [ 'ID' => $resendNotificate['ID_EJECUCION_WORKFLOW'], 'TYPE' => 'VALIDATE' ];
  793. $strExecuteWorkflow = json_encode($objExecute);
  794. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  795. $this->notificationsController->emitNotification(
  796. 'S002V01M03GEPR',
  797. 'Flujo de trabajo modificado.',
  798. "El flujo de trabajo #{$resendNotificate['ID_WORKFLOW']} ha sido modificado, por lo cual el proceso se ha reiniciado. Se le pide nuevamente realizar el proceso de validación.",
  799. [[
  800. 'BOTON' => 'Ver solicitud',
  801. 'FUNCION' => 'openModule',
  802. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  803. ]],
  804. [$userValidate],
  805. $user,
  806. $requestData['NUMERO_LINEA'],
  807. $this->socketClient,
  808. );
  809. if (!empty($notifacateUsers)) {
  810. $objExecute = [ 'ID' => $resendNotificate['ID_EJECUCION_WORKFLOW'], 'TYPE' => 'NOTIFICATE' ];
  811. $strExecuteWorkflow = json_encode($objExecute);
  812. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  813. $this->notificationsController->emitNotification(
  814. 'S002V01M03GEPR',
  815. 'Flujo de trabajo modificado',
  816. "El flujo de trabajo #{$resendNotificate['ID_WORKFLOW']} ha sido modificado, por lo cual el proceso se ha reiniciado.",
  817. [[
  818. 'BOTON' => 'Ver solicitud',
  819. 'FUNCION' => 'openModule',
  820. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  821. ]],
  822. [$notifacateUsers],
  823. $user,
  824. $requestData['NUMERO_LINEA'],
  825. $this->socketClient,
  826. );
  827. }
  828. }
  829. DB::commit();
  830. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  831. }
  832. public function deleteTask(Request $request, $idTask) {
  833. $validator = Validator::make($request->all(), [
  834. 'USUARIO' => 'required|string',
  835. 'NUMERO_LINEA' => 'required|integer',
  836. ]);
  837. if ($validator->fails()) {
  838. return $this->responseController->makeResponse(
  839. true,
  840. "Se encontraron uno o más errores.",
  841. $this->responseController->makeErrors($validator->errors()->messages()),
  842. 401
  843. );
  844. }
  845. DB::beginTransaction();
  846. $requestData = $request->all();
  847. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  848. if ($arrResponseCheckUser['error']) {
  849. DB::rollBack();
  850. return $this->responseController->makeResponse(true, 'ERR_WAREHOUSE_REG001:'.$arrResponseCheckUser['msg'], [], 401);
  851. }
  852. $user = $arrResponseCheckUser['response'];
  853. $idTask = $this->encController->decrypt($idTask);
  854. if (is_null($idTask)) {
  855. return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar la tarea.', [], 500);
  856. }
  857. try {
  858. $arrTask = (array) DB::table('S002V01TTAWO')
  859. ->where('TAWO_IDTA', '=', $idTask)
  860. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  861. ->where('TAWO_ESTA', '=', 'Activo')
  862. ->first([
  863. 'TAWO_IDWO AS ID_WORKFLOW',
  864. 'TAWO_IDPR AS ID_PROCESO',
  865. ]);
  866. } catch (\Throwable $th) {
  867. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas.", $th->getMessage(), 500);
  868. }
  869. if (empty($arrTask)) {
  870. return $this->responseController->makeResponse(true, "La tarea no existe.", [], 406);
  871. }
  872. try {
  873. $validateExists = DB::table('S002V01TEJTW')
  874. ->where('EJTW_IDTA', '=', $idTask)
  875. ->where('EJTW_ESTA', '!=', 'Rechazado')
  876. ->exists();
  877. } catch (\Throwable $th) {
  878. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar la ejecución de los workflow.", $th->getMessage(), 500);
  879. }
  880. if ($validateExists) {
  881. return $this->responseController->makeResponse(true, "La tarea no puede ser eliminada ya que hay flujo de trabajo en proceso.", [], 406);
  882. }
  883. $now = $this->functionsController->now();
  884. $currentDate = $now->toDateTimeString();
  885. try {
  886. $validateUpdate = DB::table('S002V01TTAWO')
  887. ->where('TAWO_IDTA', '=', $idTask)
  888. ->where('TAWO_ESTA', '=', 'Activo')
  889. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  890. ->update([
  891. 'TAWO_ESTA' => 'Eliminado',
  892. 'TAWO_USMO' => $user,
  893. 'TAWO_FEMO' => $currentDate,
  894. 'TAWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  895. ]);
  896. } catch (\Throwable $th) {
  897. DB::rollBack();
  898. return $this->responseController->makeResponse(true, 'Ocurrió un error al eliminar la tarea.', $th->getMessage(), 500);
  899. }
  900. if (!$validateUpdate) {
  901. DB::rollBack();
  902. return $this->responseController->makeResponse(true, 'No se pudo eliminar la tarea.', [], 406);
  903. }
  904. DB::commit();
  905. return $this->responseController->makeResponse(false, "ÉXITO: Eliminación Exitosa");
  906. }
  907. public function getExecuteWorkflow($user, $line) {
  908. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  909. if ($arrResponseCheckUser['error']) {
  910. DB::rollBack();
  911. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  912. }
  913. $user = $arrResponseCheckUser['response'];
  914. try {
  915. $arrExecuteWorkflow = DB::table('S002V01TEJWO')
  916. ->where('EJWO_NULI', '=', $line)
  917. ->where('WORK_NULI', '=', $line)
  918. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'EJWO_IDWO')
  919. ->get([
  920. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  921. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  922. 'WORK_AUTO AS AUTOMATICO',
  923. 'EJWO_ESTA AS ESTADO',
  924. 'EJWO_USRE AS USUARIO_REGISTRA',
  925. 'EJWO_FERE AS FECHA_REGISTRA',
  926. 'EJWO_USMO AS USUARIO_MODIFICA',
  927. 'EJWO_FEMO AS FECHA_MODIFICA',
  928. ]);
  929. $arrExecuteWorkflow = json_decode(json_encode($arrExecuteWorkflow), true);
  930. } catch (\Throwable $th) {
  931. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las ejecuciones de los flujos de trabajo.", $th->getMessage(), 500);
  932. }
  933. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrExecuteWorkflow, $line);
  934. if ($responseCheckLatestUpdate['error']) {
  935. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  936. }
  937. $arrExecuteWorkflow = $responseCheckLatestUpdate['response'];
  938. $arrDataExecuteWorkflow = array();
  939. foreach ($arrExecuteWorkflow as $key => $executeWorkflow) {
  940. try {
  941. $arrExecuteTask = DB::table('S002V01TEJTW')
  942. ->where('EJTW_IDEW', '=', $executeWorkflow['ID_EJECUCION_WORKFLOW'])
  943. ->where('EJTW_NULI', '=', $line)
  944. ->get([
  945. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  946. 'EJTW_IDTA AS ID_TAREA',
  947. 'EJTW_ESTA AS ESTADO',
  948. ]);
  949. $arrExecuteTask = json_decode(json_encode($arrExecuteTask), true);
  950. } catch (\Throwable $th) {
  951. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas en ejecución", $th->getMessage(), 500);
  952. }
  953. $executeWorkflow['AUTOMATICO'] = $executeWorkflow['AUTOMATICO'] == 1 ? 'Si' : 'No';
  954. $existsUser = false;
  955. $quantityProcesses = 0;
  956. $quantityCompleted = 0;
  957. foreach ($arrExecuteTask as $executeTask) {
  958. if ($executeTask['ESTADO'] === 'Aceptado') {
  959. $quantityCompleted++;
  960. }
  961. $quantityProcesses++;
  962. try {
  963. $validateExists = DB::table('S002V01TEJNO')
  964. ->where('EJNO_IDET', '=', $executeTask['ID_EJECUCION_TAREA'])
  965. ->where('EJNO_NULI', '=', $line)
  966. ->where('EJNO_USNO', '=', $user)
  967. ->exists();
  968. } catch (\Throwable $th) {
  969. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener los usuarios de notificación.", $th->getMessage(), 500);
  970. }
  971. if ($validateExists) {
  972. $existsUser = true;
  973. }
  974. }
  975. $progress = ($quantityCompleted * 100) / $quantityProcesses;
  976. $executeWorkflow['PROGRESO'] = $progress;
  977. if ($existsUser) {
  978. $arrDataExecuteWorkflow[] = $executeWorkflow;
  979. }
  980. }
  981. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrDataExecuteWorkflow);
  982. }
  983. public function getExecuteTask($idExecute, $user, $line) {
  984. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  985. if ($arrResponseCheckUser['error']) {
  986. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  987. }
  988. $idExecute = $this->encController->decrypt($idExecute);
  989. if ($idExecute === null) {
  990. return $this->responseController->makeResponse(true, "La ejecución no está desencriptado correctamente.", [], 500);
  991. }
  992. try {
  993. $validateExists = DB::table('S002V01TEJWO')
  994. ->where('EJWO_IDEW', '=', $idExecute)
  995. ->where('EJWO_NULI', '=', $line)
  996. ->exists();
  997. } catch (\Throwable $th) {
  998. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar si la ejecución existe.", $th->getMessage(), 500);
  999. }
  1000. if (!$validateExists) {
  1001. return $this->responseController->makeResponse(true, "La ejecución no existe.", [], 500);
  1002. }
  1003. try {
  1004. $arrExecute = DB::table('S002V01TEJTW')
  1005. ->where('EJTW_IDEW', '=', $idExecute)
  1006. ->where('EJTW_NULI', '=', $line)
  1007. ->where('TAWO_NULI', '=', $line)
  1008. ->where('PRWO_NULI', '=', $line)
  1009. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  1010. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  1011. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'TAWO_IDWO')
  1012. ->get([
  1013. 'EJTW_IDEW AS ID_EJECUCION_WORKFLOW',
  1014. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  1015. DB::raw('CONCAT(TAWO_NOTA, " (", TAWO_IDTA, ")") AS NOMBRE_TAREA'),
  1016. DB::raw('CONCAT(PRWO_NOPR, " (", PRWO_IDPR, ")") AS NOMBRE_PROCESO'),
  1017. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  1018. 'EJTW_INFO AS INFORMACION_FORMULARIO',
  1019. 'EJTW_INRE AS INFORMACION_REGISTRO',
  1020. 'EJTW_ESTA AS ESTADO',
  1021. 'EJTW_USRE AS USUARIO_REGISTRA',
  1022. 'EJTW_FERE AS FECHA_REGISTRA',
  1023. 'EJTW_USMO AS USUARIO_MODIFICA',
  1024. 'EJTW_FEMO AS FECHA_MODIFICA',
  1025. ]);
  1026. $arrExecute = json_decode(json_encode($arrExecute), true);
  1027. } catch (\Throwable $th) {
  1028. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las ejecuciones.", $th->getMessage(), 500);
  1029. }
  1030. foreach ($arrExecute as $keyExecute => $execute) {
  1031. try {
  1032. $notificate = (array) DB::table('S002V01TEJNO')
  1033. ->where('EJNO_IDET', '=', $execute['ID_EJECUCION_TAREA'])
  1034. ->where('EJNO_NULI', '=', $line)
  1035. ->where('EJNO_TINO', '=', 'V')
  1036. ->where('EJNO_ESTA', '=', 'Notificado')
  1037. ->orderBy('EJNO_SECU', 'ASC')
  1038. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  1039. ->first([
  1040. DB::raw('CONCAT(USUA_NOMB, " ", USUA_APPA, IF(ISNULL(USUA_APMA), "", CONCAT(" ", USUA_APMA)), " (", USUA_IDUS, ")") AS USUARIO_RESPONSABLE'),
  1041. 'EJNO_ESTA AS ESTADO_NOTIFICACION',
  1042. ]);
  1043. } catch (\Throwable $th) {
  1044. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las notificaciones de las tareas de ejecución.", $th->getMessage(), 500);
  1045. }
  1046. if (!empty($notificate)) {
  1047. $execute['USUARIO_RESPONSABLE'] = $notificate['USUARIO_RESPONSABLE'];
  1048. } else if ($execute['ESTADO'] == 'Aceptado') {
  1049. $execute['USUARIO_RESPONSABLE'] = 'Asignación terminada';
  1050. } else {
  1051. $execute['USUARIO_RESPONSABLE'] = 'Sin asignar';
  1052. }
  1053. try {
  1054. $arrNotificate = DB::table('S002V01TEJNO')
  1055. ->where('EJNO_IDET', '=', $execute['ID_EJECUCION_TAREA'])
  1056. ->where('EJNO_TINO', '=', 'V')
  1057. ->where('EJNO_NULI', '=', $line)
  1058. ->get([
  1059. 'EJNO_ESTA AS ESTADO_NOTIFICACION'
  1060. ]);
  1061. $arrNotificate = json_decode(json_encode($arrNotificate), true);
  1062. } catch (\Throwable $th) {
  1063. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las notificaciones de las tareas de ejecución.", $th->getMessage(), 500);
  1064. }
  1065. if (!empty($arrNotificate)) {
  1066. $quantityProcesses = 0;
  1067. $quantityCompleted = 0;
  1068. foreach ($arrNotificate as $notificate) {
  1069. if ($notificate['ESTADO_NOTIFICACION'] === 'Aceptado') {
  1070. $quantityCompleted++;
  1071. }
  1072. if ($notificate['ESTADO_NOTIFICACION'] !== 'Obsoleto') {
  1073. $quantityProcesses++;
  1074. }
  1075. }
  1076. $progress = ($quantityCompleted * 100) / $quantityProcesses;
  1077. $execute['PROGRESO'] = $progress;
  1078. } else {
  1079. $execute['PROGRESO'] = 0;
  1080. }
  1081. $arrExecute[$keyExecute] = $execute;
  1082. }
  1083. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrExecute, $line);
  1084. if ($responseCheckLatestUpdate['error']) {
  1085. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  1086. }
  1087. $arrExecute = $responseCheckLatestUpdate['response'];
  1088. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrExecute);
  1089. }
  1090. public function updateRequestWorkflow(Request $request, $idExecuteTask) {
  1091. $validator = Validator::make($request->all(), [
  1092. 'ESTADO' => 'required|string|in:Aceptado,Rechazado',
  1093. 'MENSAJE_RECHAZO' => 'nullable|string',
  1094. 'USUARIO' => 'required|string',
  1095. 'NUMERO_LINEA' => 'required|integer',
  1096. ]);
  1097. if ($validator->fails()) {
  1098. return $this->responseController->makeResponse(
  1099. true,
  1100. "Se encontraron uno o más errores.",
  1101. $this->responseController->makeErrors($validator->errors()->messages()),
  1102. 401
  1103. );
  1104. }
  1105. DB::beginTransaction();
  1106. $requestData = $request->all();
  1107. // Se desencripta el identificador de la ejecución de la tarea
  1108. $idExecute = $this->encController->decrypt($idExecuteTask);
  1109. if (is_null($idExecute)) {
  1110. return $this->responseController->makeResponse(true, "No se pudo desencriptar el proceso de ejecución.", [], 500);
  1111. }
  1112. // Se recupera el identificador del usuario
  1113. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1114. if ($arrResponseCheckUser['error']) {
  1115. DB::rollBack();
  1116. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1117. }
  1118. $user = $arrResponseCheckUser['response'];
  1119. // Se valida que el usuario sea para la validación
  1120. try {
  1121. $validate = DB::table('S002V01TEJNO')
  1122. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1123. ->where('EJNO_USNO', '=', $user)
  1124. ->where('EJNO_TINO', '=', 'V')
  1125. ->where('EJNO_ESTA', '=', 'Notificado')
  1126. ->exists();
  1127. } catch (\Throwable $th) {
  1128. DB::rollBack();
  1129. return $this->responseController->makeResponse(true, 'Ocurrió un error al verificar la validación del usuario', $th->getMessage(), 500);
  1130. }
  1131. if (!$validate) {
  1132. DB::rollBack();
  1133. return $this->responseController->makeResponse(true, 'El usuario no está autorizado para modificar el estado de la solicitud.', [], 500);
  1134. }
  1135. // Se obtiene la información del workflow
  1136. try {
  1137. $arrExecute = (array) DB::table('S002V01TEJTW')
  1138. ->where('EJTW_IDET', '=', $idExecute)
  1139. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1140. ->join('S002V01TEJWO', 'EJWO_IDEW', '=', 'EJTW_IDEW')
  1141. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  1142. ->first([
  1143. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  1144. 'EJWO_IDWO AS ID_WORKFLOW',
  1145. 'EJTW_IDTA AS ID_TAREA',
  1146. 'EJTW_INFO AS INFORMACION_FORMULARIO',
  1147. 'EJTW_INRE AS INFORMACION_REGISTRO',
  1148. 'EJTW_ESTA AS ESTADO',
  1149. 'TAWO_SECU AS SECUENCIA',
  1150. ]);
  1151. } catch (\Throwable $th) {
  1152. DB::rollBack();
  1153. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del proceso de ejecución.', $th->getMessage(), 500);
  1154. }
  1155. if (empty($arrExecute)) {
  1156. DB::rollBack();
  1157. return $this->responseController->makeResponse(true, '', [], 500);
  1158. }
  1159. // Se obtiene la información del proceso
  1160. try {
  1161. $procesoWorkflow = (array) DB::table('S002V01TTAWO')
  1162. ->where('TAWO_IDTA', '=', $arrExecute['ID_TAREA'])
  1163. ->join('S002V01TPRWO', 'TAWO_IDPR', '=', 'PRWO_IDPR')
  1164. ->first([
  1165. 'PRWO_IDPR AS ID_PROCESO',
  1166. 'PRWO_IDMO AS ID_MODELO',
  1167. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1168. 'PRWO_FVMR AS FORMATO_VALIDACION',
  1169. ]);
  1170. } catch (\Throwable $th) {
  1171. DB::rollBack();
  1172. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos del proceso del flujo de trabajo.', $th->getMessage(), 500);
  1173. }
  1174. if (empty($procesoWorkflow)) {
  1175. DB::rollBack();
  1176. return $this->responseController->makeResponse(true, 'No se encontró el proceso del flujo de trabajo.', [], 500);
  1177. }
  1178. $now = $this->functionsController->now();
  1179. $currentDate = $now->toDateTimeString();
  1180. if ($requestData['ESTADO'] === 'Aceptado') {
  1181. try {
  1182. $validateUdpdate = DB::table('S002V01TEJNO')
  1183. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1184. ->where('EJNO_USNO', '=', $user)
  1185. ->where('EJNO_TINO', '=', 'V')
  1186. ->where('EJNO_ESTA', '=', 'Notificado')
  1187. ->where('EJNO_IDET', '=', $idExecute)
  1188. ->update([
  1189. 'EJNO_ESTA' => 'Aceptado',
  1190. 'EJNO_USMO' => $user,
  1191. 'EJNO_FEMO' => $currentDate,
  1192. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1193. ]);
  1194. } catch (\Throwable $th) {
  1195. DB::rollBack();
  1196. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el estado de la notificación. 1', $th->getMessage(), 500);
  1197. }
  1198. if (!$validateUdpdate) {
  1199. DB::rollBack();
  1200. return $this->responseController->makeResponse(true, 'No se pudo modificar el estado de la notificación.', [], 500);
  1201. }
  1202. try {
  1203. $arrNextNotificate = (array) DB::table('S002V01TEJNO')
  1204. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1205. ->where('EJNO_TINO', '=', 'V')
  1206. ->where('EJNO_ESTA', '=', 'En espera')
  1207. ->where('EJNO_IDET', '=', $idExecute)
  1208. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1209. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1210. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1211. ->join('S002V01TEJTW', 'EJTW_IDET', '=', 'EJNO_IDET')
  1212. ->join('S002V01TEJWO', 'EJWO_IDEW', '=', 'EJTW_IDEW')
  1213. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  1214. ->join('S002V01TPRWO', 'TAWO_IDPR', '=', 'PRWO_IDPR')
  1215. ->orderBy('EJNO_SECU', 'ASC')
  1216. ->first([
  1217. 'EJNO_IDEN AS ID_EJECUCION_NOTIFICACION',
  1218. 'EJNO_IDET AS ID_EJECUCION_TAREA',
  1219. 'EJNO_USNO AS USUARIO_NOTIFICACION',
  1220. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  1221. 'TAWO_IDTA AS ID_TAREA',
  1222. 'TAWO_NOTA AS NOMBRE_TAREA',
  1223. 'PRWO_IDPR AS ID_PROCESO',
  1224. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1225. ]);
  1226. } catch (\Throwable $th) {
  1227. DB::rollBack();
  1228. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el siguiente usuario para validación.', $th->getMessage(), 500);
  1229. }
  1230. if (!empty($arrNextNotificate)) {
  1231. $objExecute = [ 'ID' => $arrNextNotificate['ID_EJECUCION_WORKFLOW'], 'TYPE' => 'VALIDATE' ];
  1232. $strExecuteWorkflow = json_encode($objExecute);
  1233. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1234. $this->notificationsController->emitNotification(
  1235. 'S002V01M03GEPR',
  1236. 'Nuevo flujo de procesos creado',
  1237. "El usuario $user ha creado un nuevo flujo de trabajo: ".$arrNextNotificate['NOMBRE_PROCESO']. ". La tarea: ".$arrNextNotificate['NOMBRE_TAREA']. " requiere de su validación.",
  1238. [[
  1239. 'BOTON' => 'Ver solicitud',
  1240. 'FUNCION' => 'openModule',
  1241. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  1242. ]],
  1243. [$arrNextNotificate['USUARIO_NOTIFICACION']],
  1244. $user,
  1245. $requestData['NUMERO_LINEA'],
  1246. $this->socketClient,
  1247. );
  1248. try {
  1249. $validateUpdate = DB::table('S002V01TEJNO')
  1250. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1251. ->where('EJNO_TINO', '=', 'V')
  1252. ->where('EJNO_ESTA', '=', 'En espera')
  1253. ->where('EJNO_IDET', '=', $idExecute)
  1254. ->where('EJNO_IDEN', '=', $arrNextNotificate['ID_EJECUCION_NOTIFICACION'])
  1255. ->update([
  1256. 'EJNO_ESTA' => 'Notificado',
  1257. 'EJNO_USMO' => $user,
  1258. 'EJNO_FEMO' => $currentDate,
  1259. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1260. ]);
  1261. } catch (\Throwable $th) {
  1262. DB::rollBack();
  1263. return $this->responseController->makeResponse(true, 'Ocurrió un error registrar la notificación de siguiente usuario.', $th->getMessage(), 500);
  1264. }
  1265. if (!$validateUpdate) {
  1266. DB::rollBack();
  1267. return $this->responseController->makeResponse(true, 'No se pudo registrar la siguiente notificación del usuario.', [], 500);
  1268. }
  1269. }
  1270. } else {
  1271. try {
  1272. $validateUpdate = DB::table('S002V01TEJNO')
  1273. ->where('EJNO_IDET', '=', $idExecute)
  1274. ->where('EJNO_USNO', '=', $user)
  1275. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1276. ->where('EJNO_ESTA', '=', 'Notificado')
  1277. ->where('EJNO_TINO', '=', 'V')
  1278. ->update([
  1279. 'EJNO_ESTA' => 'Rechazado',
  1280. 'EJNO_MERE' => $requestData['MENSAJE_RECHAZO'],
  1281. 'EJNO_USMO' => $user,
  1282. 'EJNO_FEMO' => $currentDate,
  1283. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1284. ]);
  1285. } catch (\Throwable $th) {
  1286. DB::rollBack();
  1287. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar el estado de la notificación. 2', $th->getMessage(), 500);
  1288. }
  1289. if (!$validateUpdate) {
  1290. DB::rollBack();
  1291. return $this->responseController->makeResponse(true, 'No se pudo modificar el estado de la notificación.', [], 500);
  1292. }
  1293. }
  1294. try {
  1295. $validateExists = DB::table('S002V01TEJNO')
  1296. ->where('EJNO_IDET', '=', $idExecute)
  1297. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  1298. ->where('EJNO_TINO', '=', 'V')
  1299. ->where('EJNO_ESTA', '=', 'Notificado')
  1300. ->exists();
  1301. } catch (\Throwable $th) {
  1302. DB::rollBack();
  1303. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener el siguiente usuario para validación.', $th->getMessage(), 500);
  1304. }
  1305. $newStateExecute = $requestData['ESTADO'];
  1306. if ($validateExists && $requestData['ESTADO'] === 'Aceptado') {
  1307. $newStateExecute = 'En proceso';
  1308. }
  1309. try {
  1310. $validateUpdate = DB::table('S002V01TEJTW')
  1311. ->where('EJTW_IDET', '=', $idExecute)
  1312. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1313. ->update([
  1314. 'EJTW_ESTA' => $newStateExecute,
  1315. 'EJTW_USMO' => $user,
  1316. 'EJTW_FEMO' => $currentDate,
  1317. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1318. ]);
  1319. } catch (\Throwable $th) {
  1320. DB::rollBack();
  1321. return $this->responseController->makeResponse(true, "Ocurrió un error al modificar la ejecución.", $th->getMessage(), 500);
  1322. }
  1323. if (!$validateUpdate) {
  1324. DB::rollBack();
  1325. return $this->responseController->makeResponse(true, "No se pudo modificar la ejecución.", [], 500);
  1326. }
  1327. try {
  1328. $validateExists = DB::table('S002V01TEJTW')
  1329. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  1330. ->where('EJTW_IDEW', '=', $arrExecute['ID_EJECUCION_WORKFLOW'])
  1331. ->where('EJTW_ESTA', '=', 'En espera')
  1332. ->orWhere('EJTW_ESTA', '=', 'En proceso')
  1333. ->orWhere('EJTW_ESTA', '=', 'Notificado')
  1334. ->orWhere('EJTW_ESTA', '=', 'Rechazado')
  1335. ->exists();
  1336. } catch (\Throwable $th) {
  1337. DB::rollBack();
  1338. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar si existen tareas pendientes.", $th->getMessage(), 500);
  1339. }
  1340. if (!$validateExists) {
  1341. try {
  1342. $validateUpdate = DB::table('S002V01TEJWO')
  1343. ->where('EJWO_IDEW', '=', $arrExecute['ID_EJECUCION_WORKFLOW'])
  1344. ->where('EJWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1345. ->where('EJWO_ESTA', '=', 'En proceso')
  1346. ->update([
  1347. 'EJWO_ESTA' => 'Terminada',
  1348. 'EJWO_USMO' => $user,
  1349. 'EJWO_FEMO' => $currentDate,
  1350. 'EJWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1351. ]);
  1352. } catch (\Throwable $th) {
  1353. DB::rollBack();
  1354. return $this->responseController->makeResponse(true, "Ocurrió un error al modificar el estado del flujo de trabajo de ejecución.", $th->getMessage(), 500);
  1355. }
  1356. if (!$validateUpdate) {
  1357. DB::rollBack();
  1358. return $this->responseController->makeResponse(true, "No se pudo modificar el estado del flujo de trabajo de ejecución.", [], 500);
  1359. }
  1360. $strInfoRegister = $this->encController->decrypt($arrExecute['INFORMACION_REGISTRO']);
  1361. $arrInfoRegister = json_decode($strInfoRegister, true);
  1362. $arrFormatValidator = json_decode($procesoWorkflow['FORMATO_VALIDACION'], true);
  1363. foreach ($arrFormatValidator as $keyFormatValidator => $formatValidator) {
  1364. if (!array_key_exists($formatValidator['TABLA'], $arrInfoRegister)) {
  1365. DB::rollBack();
  1366. return $this->responseController->makeResponse(true, 'La tabla no existe en la información del proceso.', [], 500);
  1367. }
  1368. $tableName = $formatValidator['TABLA'];
  1369. $arrInfoData = $arrInfoRegister[$tableName];
  1370. foreach ($arrInfoData as $infoRegister) {
  1371. $arrWhere = array();
  1372. foreach ($infoRegister as $key => $value) {
  1373. $arrWhere[] = [
  1374. $key, '=', $value
  1375. ];
  1376. }
  1377. $arrWhere[] = [ $formatValidator['NUMERO_LINEA'], '=', $requestData['NUMERO_LINEA']];
  1378. try {
  1379. $validateUpdate = DB::table($tableName)
  1380. ->where($arrWhere)
  1381. ->update([
  1382. $formatValidator['CAMPO_ESTADO'] => $formatValidator['CAMBIO_ESTADO'],
  1383. $formatValidator['USUARIO_MODIFICA'] => $user,
  1384. $formatValidator['FECHA_MODIFICA'] => $currentDate,
  1385. ]);
  1386. } catch (\Throwable $th) {
  1387. DB::rollBack();
  1388. return $this->responseController->makeResponse(true, 'Ocurrió un error al modificar los campos de workflow.', $th->getMessage(), 500);
  1389. }
  1390. if (!$validateUpdate) {
  1391. DB::rollBack();
  1392. return $this->responseController->makeResponse(true, 'No se pudo modificar los campos de workflow.', [], 500);
  1393. }
  1394. }
  1395. }
  1396. }
  1397. DB::commit();
  1398. return $this->responseController->makeResponse(false, "ÉXITO: Modificación Exitosa");
  1399. }
  1400. public function getHistoryNotificateTask($idExecuteTask, $user, $line) {
  1401. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  1402. if ($arrResponseCheckUser['error']) {
  1403. DB::rollBack();
  1404. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1405. }
  1406. $idExecuteTask = $this->encController->decrypt($idExecuteTask);
  1407. if (is_null($idExecuteTask)) {
  1408. return $this->responseController->makeResponse(true, 'El identificador no está encriptado correctamente.', [], 401);
  1409. }
  1410. try {
  1411. $arrHistory = DB::table('S002V01TEJNO')
  1412. ->where('EJNO_NULI', '=', $line)
  1413. ->where('EJNO_IDET', '=', $idExecuteTask)
  1414. ->where('EJNO_ESTA', '!=', 'Obsoleto')
  1415. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  1416. ->orderBy('EJNO_SECU', 'ASC')
  1417. ->get([
  1418. 'EJNO_IDEN AS ID_EJECUCION_NOTIFICACION',
  1419. DB::raw(
  1420. 'CONCAT(USUA_NOMB, " ", USUA_APPA, IF(ISNULL(USUA_APMA), "", CONCAT(" ", USUA_APMA)), " (", USUA_IDUS, ")") AS USUARIO_RESPONSABLE'
  1421. ),
  1422. 'EJNO_TINO AS TIPO_NOTIFICACION',
  1423. 'EJNO_ESTA AS ESTADO',
  1424. 'EJNO_USRE AS USUARIO_REGISTRA',
  1425. 'EJNO_FERE AS FECHA_REGISTRA',
  1426. 'EJNO_USMO AS USUARIO_MODIFICA',
  1427. 'EJNO_FEMO AS FECHA_MODIFICA',
  1428. ]);
  1429. $arrHistory = json_decode(json_encode($arrHistory), true);
  1430. } catch (\Throwable $th) {
  1431. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el historial de las notificaciones.", $th->getMessage(), 500);
  1432. }
  1433. foreach ($arrHistory as $key => $history) {
  1434. if ($history['TIPO_NOTIFICACION'] === 'N') {
  1435. $history['TIPO_NOTIFICACION'] = 'Solo notificación';
  1436. } else if ($history['TIPO_NOTIFICACION'] === 'V') {
  1437. $history['TIPO_NOTIFICACION'] = 'Para validación';
  1438. }
  1439. $arrHistory[$key] = $history;
  1440. }
  1441. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrHistory, $line);
  1442. if ($responseCheckLatestUpdate['error']) {
  1443. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  1444. }
  1445. $arrHistory = $responseCheckLatestUpdate['response'];
  1446. return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrHistory);
  1447. }
  1448. public function registerRequestWorkflow(int $idProceso, string $encProcess, string $encRequest, string $user, string $line) {
  1449. $arrResponse = array('error' => false, 'msg' => '','response' => []);
  1450. // Se obtiene la información del proceso de ejecución con los datos del workflow y de la tarea
  1451. try {
  1452. $processWorkflow = (array) DB::table('S002V01TPRWO')
  1453. ->where('PRWO_IDPR', '=', $idProceso)
  1454. ->where('PRWO_NULI', '=', $line)
  1455. ->where('PRWO_ESTA', '=', 'Asignado')
  1456. ->join('S002V01TTAWO', 'TAWO_IDPR', '=', 'PRWO_IDPR')
  1457. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'TAWO_IDWO')
  1458. ->first([
  1459. 'PRWO_IDMO AS ID_MODULO',
  1460. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1461. 'WORK_IDWO AS ID_WORKFLOW',
  1462. 'WORK_NOWO AS NOMBRE_WORKFLOW',
  1463. 'TAWO_IDTA AS ID_TAREA',
  1464. 'TAWO_NOTA AS NOMBRE_TAREA',
  1465. 'TAWO_SECU AS SECUENCIA',
  1466. 'TAWO_REVA AS REGLA_VALIDACION',
  1467. 'TAWO_OTWO AS ID_OTRO_WORKFLOW',
  1468. ]);
  1469. } catch (\Throwable $th) {
  1470. $arrResponse['error'] = true;
  1471. $arrResponse['msg'] = 'Ocurrió un error al obtener los datos del proceso del flujo de trabajo.';
  1472. $arrResponse['response'] = $th->getMessage();
  1473. return $arrResponse;
  1474. }
  1475. // Se obtiene la fecha actual
  1476. $now = $this->functionsController->now();
  1477. $currentDate = $now->toDateTimeString();
  1478. // Si no se encontraron datos, entonces se termina el proceso.
  1479. if (empty($processWorkflow)) {
  1480. $arrResponse['error'] = true;
  1481. $arrResponse['msg'] = 'El proceso de la tarea no existe.';
  1482. return $arrResponse;
  1483. }
  1484. // Si la tarea de ejecución es la primera del workflow, entonces...
  1485. if ($processWorkflow['SECUENCIA'] == 1) {
  1486. // Se registra la ejecución del workflow y se obtiene el identificador
  1487. try {
  1488. $idExecuteWorkflow = DB::table('S002V01TEJWO')->insertGetId([
  1489. 'EJWO_NULI' => $line,
  1490. 'EJWO_IDWO' => $processWorkflow['ID_WORKFLOW'],
  1491. 'EJWO_USRE' => $user,
  1492. 'EJWO_FERE' => $currentDate,
  1493. 'EJWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1494. ]);
  1495. } catch (\Throwable $th) {
  1496. $arrResponse['error'] = true;
  1497. $arrResponse['msg'] = 'Ocurrió un error al registrar la ejecución del flujo de trabajo.';
  1498. $arrResponse['response'] = $th->getMessage();
  1499. return $arrResponse;
  1500. }
  1501. if (!$idExecuteWorkflow) {
  1502. $arrResponse['error'] = true;
  1503. $arrResponse['msg'] = 'No se pudo registrar la ejecución del flujo de trabajo.';
  1504. return $arrResponse;
  1505. }
  1506. // Se hace el registro de la ejecución de la tarea del workflow
  1507. try {
  1508. $idExecuteTask = DB::table('S002V01TEJTW')->insertGetId([
  1509. 'EJTW_NULI' => $line,
  1510. 'EJTW_IDEW' => $idExecuteWorkflow,
  1511. 'EJTW_IDTA' => $processWorkflow['ID_TAREA'],
  1512. 'EJTW_INFO' => $encProcess,
  1513. 'EJTW_INRE' => $encRequest,
  1514. 'EJTW_ESTA' => 'En proceso',
  1515. 'EJTW_USRE' => $user,
  1516. 'EJTW_FERE' => $currentDate,
  1517. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1518. ]);
  1519. } catch (\Throwable $th) {
  1520. $arrResponse['error'] = true;
  1521. $arrResponse['msg'] = 'Ocurrió un error al registrar la solicitud.';
  1522. $arrResponse['response'] = $th->getMessage();
  1523. return $arrResponse;
  1524. }
  1525. if (!$idExecuteTask) {
  1526. $arrResponse['error'] = true;
  1527. $arrResponse['msg'] = 'No se pudo registrar la solicitud.';
  1528. return $arrResponse;
  1529. }
  1530. // Se obtienen las otras tareas que se ejecutarán
  1531. try {
  1532. $arrTasks = DB::table('S002V01TTAWO')
  1533. ->where('TAWO_NULI', '=', $line)
  1534. ->where('TAWO_IDWO', '=', $processWorkflow['ID_WORKFLOW'])
  1535. ->where('TAWO_IDTA', '!=', $processWorkflow['ID_TAREA'])
  1536. ->where('TAWO_ESTA', '=', 'Activo')
  1537. ->orderBy('TAWO_SECU', 'DESC')
  1538. ->get([
  1539. 'TAWO_IDTA AS ID_TAREA',
  1540. 'TAWO_OTWO AS OTRO_WORKFLOW',
  1541. 'TAWO_IDPR AS ID_PROCESO',
  1542. 'TAWO_NOTA AS NOMBRE_TAREA',
  1543. 'TAWO_DESC AS DESCRIPCION',
  1544. 'TAWO_REVA AS REGLAS_VALIDACION',
  1545. ]);
  1546. $arrTasks = json_decode(json_encode($arrTasks), true);
  1547. } catch (\Throwable $th) {
  1548. $arrResponse['error'] = true;
  1549. $arrResponse['msg'] = 'Ocurrió un error al obtener las tareas pendientes.';
  1550. $arrResponse['response'] = $th->getMessage();
  1551. return $arrResponse;
  1552. }
  1553. // Se registran las tareas que continuarán para colocarlas en cola.
  1554. foreach ($arrTasks as $task) {
  1555. try {
  1556. $validateInsert = DB::table('S002V01TEJTW')->insert([
  1557. 'EJTW_NULI' => $line,
  1558. 'EJTW_IDEW' => $idExecuteWorkflow,
  1559. 'EJTW_IDTA' => $task['ID_TAREA'],
  1560. 'EJTW_ESTA' => 'En espera',
  1561. 'EJTW_USRE' => $user,
  1562. 'EJTW_FERE' => $currentDate,
  1563. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1564. ]);
  1565. } catch (\Throwable $th) {
  1566. $arrResponse['error'] = true;
  1567. $arrResponse['msg'] = 'Ocurrió un error al registrar la solicitud para en cola.';
  1568. $arrResponse['response'] = $th->getMessage();
  1569. return $arrResponse;
  1570. }
  1571. if (!$validateInsert) {
  1572. $arrResponse['error'] = true;
  1573. $arrResponse['msg'] = 'No se pudo registrar la solicitud.';
  1574. return $arrResponse;
  1575. }
  1576. }
  1577. // Se obtiene el primer usuario para la validación de la tarea
  1578. try {
  1579. $notiValidate = DB::table('S002V01TNTWO')
  1580. ->where('NTWO_IDTA', '=', $processWorkflow['ID_TAREA'])
  1581. ->where('NTWO_NULI', '=', $line)
  1582. ->where('NTWO_TINO', '=', 'V')
  1583. ->where('NTWO_ESTA', '=', 'Activo')
  1584. ->orderBy('NTWO_SECU', 'ASC')
  1585. ->get([
  1586. 'NTWO_IDUS AS ID_USUARIO',
  1587. ]);
  1588. $notiValidate = json_decode(json_encode($notiValidate), true);
  1589. } catch (\Throwable $th) {
  1590. $arrResponse['error'] = true;
  1591. $arrResponse['msg'] = 'Ocurrió un error al obtener los ajustes de las notificaciones.';
  1592. $arrResponse['response'] = $th->getMessage();
  1593. return $arrResponse;
  1594. }
  1595. if (empty($notiValidate)) {
  1596. $arrResponse['error'] = true;
  1597. $arrResponse['msg'] = 'No existe usuario para validar el flujo de trabajo.';
  1598. return $arrResponse;
  1599. }
  1600. // Se obtiene el identificador del usuario
  1601. $validateUser = $notiValidate[0]['ID_USUARIO'];
  1602. $arrInfoConnection = array();
  1603. $this->socketClient->emit('get_connections', []);
  1604. if($packet = $this->socketClient->wait('current_connections')) {
  1605. $data = json_decode($packet->data, true);
  1606. $arrInfoConnection = $data;
  1607. }
  1608. $arrUsersConnected = array();
  1609. foreach ($arrInfoConnection as $users) {
  1610. $data = explode('.', $users);
  1611. $userConnected = $this->encController->decrypt($data[0]);
  1612. $arrUsersConnected[] = $userConnected;
  1613. }
  1614. $additionalComments = '';
  1615. switch ($processWorkflow['REGLA_VALIDACION']) {
  1616. case 'S':
  1617. if (!in_array($validateUser, $arrUsersConnected)) {
  1618. $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.';
  1619. goto continue_notification;
  1620. }
  1621. break;
  1622. case 'C':
  1623. check_connection:
  1624. if (!in_array($validateUser, $arrUsersConnected)) {
  1625. array_shift($notiValidate);
  1626. if (empty($notiValidate)) {
  1627. $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.';
  1628. goto continue_notification;
  1629. }
  1630. $validateUser = $notiValidate[0]['ID_USUARIO'];
  1631. goto check_connection;
  1632. }
  1633. break;
  1634. case 'E':
  1635. if(is_null($processWorkflow['ID_OTRO_WORKFLOW'])) {
  1636. $arrResponse['error'] = true;
  1637. $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.';
  1638. return $arrResponse;
  1639. }
  1640. $encUser = $this->encController->encrypt($user);
  1641. if (is_null($encUser)) {
  1642. $arrResponse['error'] = true;
  1643. $arrResponse['msg'] = 'Ocurrió un error al encriptar el usuario.';
  1644. return $arrResponse;
  1645. }
  1646. $requestWorkflow = [
  1647. 'ID_WORKFLOW' => $processWorkflow['ID_OTRO_WORKFLOW'],
  1648. 'USUARIO' => $encUser,
  1649. 'NUMERO_LINEA' => $line,
  1650. ];
  1651. $requestWorkflow = new Request($requestWorkflow);
  1652. $responseWorkflow = $this->activateManualWorkflow($requestWorkflow);
  1653. $responseWorkflow = json_decode($responseWorkflow->original, true);
  1654. if ( $responseWorkflow['error'] ) {
  1655. $arrResponse['error'] = true;
  1656. $arrResponse['msg'] = $responseWorkflow['msg'];
  1657. return $arrResponse;
  1658. }
  1659. $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']}";
  1660. break;
  1661. }
  1662. continue_notification:
  1663. // Se obtiene el objeto de ejecución
  1664. $objExecute = [ 'ID' => $idExecuteWorkflow, 'TYPE' => 'VALIDATE' ];
  1665. // Se obtiene la cadena del objeto
  1666. $strExecuteWorkflow = json_encode($objExecute);
  1667. // Se obtiene la la cadena encriptada del objeto
  1668. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1669. $arrUser = $this->resourcesController->getUser($user, $line);
  1670. if ($arrUser['error']) {
  1671. $arrResponse['error'] = true;
  1672. $arrResponse['msg'] = $arrUser['msg'];
  1673. return $arrResponse;
  1674. }
  1675. $nameUser = $arrUser['response'];
  1676. // Se emite la notificación para el usuario
  1677. $this->notificationsController->emitNotification(
  1678. 'S002V01M03GEPR',
  1679. 'Nuevo flujo de procesos creado',
  1680. "El usuario {$nameUser} ha creado un nuevo flujo de trabajo: {$processWorkflow['NOMBRE_PROCESO']}
  1681. La tarea: {$processWorkflow['NOMBRE_TAREA']} requiere de su validación. \n {$additionalComments}",
  1682. [[
  1683. 'BOTON' => 'Ver solicitud',
  1684. 'FUNCION' => 'openModule',
  1685. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  1686. ]],
  1687. [$validateUser],
  1688. $user,
  1689. $line,
  1690. $this->socketClient,
  1691. );
  1692. // Se obtiene los usuarios que solo son para notificar
  1693. try {
  1694. $arrNotification = DB::table('S002V01TNTWO')
  1695. ->where('NTWO_IDTA', '=', $processWorkflow['ID_TAREA'])
  1696. ->where('NTWO_NULI', '=', $line)
  1697. ->where('NTWO_TINO', '!=', 'O')
  1698. ->where('NTWO_ESTA', '=', 'Activo')
  1699. ->get([
  1700. 'NTWO_IDUS AS ID_USUARIO',
  1701. 'NTWO_TINO AS TIPO_NOTIFICACION',
  1702. 'NTWO_SECU AS SECUENCIA',
  1703. ]);
  1704. // Se obtiene la información como un arreglo
  1705. $arrNotification = json_decode(json_encode($arrNotification), true);
  1706. } catch (\Throwable $th) {
  1707. $arrResponse['error'] = true;
  1708. $arrResponse['msg'] = 'Ocurrió un error al obtener los ajustes de las notificaciones.';
  1709. $arrResponse['response'] = $th->getMessage();
  1710. return $arrResponse;
  1711. }
  1712. $arrUserNoti = array_filter($arrNotification, fn($value) => $value['TIPO_NOTIFICACION'] === 'N');
  1713. $arrUserNoti = array_column($arrUserNoti, 'ID_USUARIO');
  1714. // Se obtiene el objeto de ejecución
  1715. $objExecute = [ 'ID' => $idExecuteWorkflow, 'TYPE' => 'NOTIFICATE' ];
  1716. // Se obtiene la cadena del objeto
  1717. $strExecuteWorkflow = json_encode($objExecute);
  1718. // Se obtiene la la cadena encriptada del objeto
  1719. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1720. $arrUserValidation = $this->resourcesController->getUser($validateUser, $line);
  1721. if ($arrUserValidation['error']) {
  1722. $arrResponse['error'] = true;
  1723. $arrResponse['msg'] = $arrUserValidation['msg'];
  1724. return $arrResponse;
  1725. }
  1726. $nameUserValidation = $arrUserValidation['response'];
  1727. // Se emite la notificación
  1728. $this->notificationsController->emitNotification(
  1729. 'S002V01M03GEPR',
  1730. 'Nuevo flujo de procesos creado',
  1731. "El usuario $nameUser ha creado un nuevo flujo de trabajo: ".$processWorkflow['NOMBRE_PROCESO']. ".
  1732. La tarea: ".$processWorkflow['NOMBRE_TAREA']. " le notifica que el proceso se encuentra en validación por el usuario: $nameUserValidation.",
  1733. [[
  1734. 'BOTON' => 'Ver solicitud',
  1735. 'FUNCION' => 'openModule',
  1736. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  1737. ]],
  1738. $arrUserNoti,
  1739. $user,
  1740. $line,
  1741. $this->socketClient,
  1742. );
  1743. foreach ($arrNotification as $key => $notification) {
  1744. if ($notification['TIPO_NOTIFICACION'] === 'V' && $notification['SECUENCIA'] === 1) {
  1745. try {
  1746. $validateInsert = DB::table('S002V01TEJNO')->insert([
  1747. 'EJNO_NULI' => $line,
  1748. 'EJNO_IDET' => $idExecuteTask,
  1749. 'EJNO_USNO' => $notification['ID_USUARIO'],
  1750. 'EJNO_SECU' => $notification['SECUENCIA'],
  1751. 'EJNO_TINO' => 'V',
  1752. 'EJNO_ESTA' => 'Notificado',
  1753. 'EJNO_USRE' => $user,
  1754. 'EJNO_FERE' => $currentDate,
  1755. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1756. ]);
  1757. } catch (\Throwable $th) {
  1758. $arrResponse['error'] = true;
  1759. $arrResponse['msg'] = 'Ocurrió un error al registrar las notificaciones de validación principal.';
  1760. $arrResponse['response'] = $th->getMessage();
  1761. return $arrResponse;
  1762. }
  1763. if (!$validateInsert) {
  1764. $arrResponse['error'] = true;
  1765. $arrResponse['msg'] = 'No se pudo registrar las notificaciones de validación principal.';
  1766. return $arrResponse;
  1767. }
  1768. } else if ($notification['TIPO_NOTIFICACION'] === 'V' && $notification['SECUENCIA'] > 1) {
  1769. try {
  1770. $validateInsert = DB::table('S002V01TEJNO')->insert([
  1771. 'EJNO_NULI' => $line,
  1772. 'EJNO_IDET' => $idExecuteTask,
  1773. 'EJNO_USNO' => $notification['ID_USUARIO'],
  1774. 'EJNO_SECU' => $notification['SECUENCIA'],
  1775. 'EJNO_TINO' => 'V',
  1776. 'EJNO_ESTA' => 'En espera',
  1777. 'EJNO_USRE' => $user,
  1778. 'EJNO_FERE' => $currentDate,
  1779. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1780. ]);
  1781. } catch (\Throwable $th) {
  1782. $arrResponse['error'] = true;
  1783. $arrResponse['msg'] = 'Ocurrió un error al registrar las notificaciones de validación.';
  1784. $arrResponse['response'] = $th->getMessage();
  1785. return $arrResponse;
  1786. }
  1787. if (!$validateInsert) {
  1788. $arrResponse['error'] = true;
  1789. $arrResponse['msg'] = 'No se pudo registrar las notificaciones de validación.';
  1790. return $arrResponse;
  1791. }
  1792. } else {
  1793. try {
  1794. $validateInsert = DB::table('S002V01TEJNO')->insert([
  1795. 'EJNO_NULI' => $line,
  1796. 'EJNO_IDET' => $idExecuteTask,
  1797. 'EJNO_USNO' => $notification['ID_USUARIO'],
  1798. 'EJNO_SECU' => 0,
  1799. 'EJNO_TINO' => 'N',
  1800. 'EJNO_ESTA' => 'Notificado',
  1801. 'EJNO_USRE' => $user,
  1802. 'EJNO_FERE' => $currentDate,
  1803. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1804. ]);
  1805. } catch (\Throwable $th) {
  1806. $arrResponse['error'] = true;
  1807. $arrResponse['msg'] = 'Ocurrió un error al registrar las notificaciones.';
  1808. $arrResponse['response'] = $th->getMessage();
  1809. return $arrResponse;
  1810. }
  1811. if (!$validateInsert) {
  1812. $arrResponse['error'] = true;
  1813. $arrResponse['msg'] = 'No se pudo registrar las notificaciones.';
  1814. return $arrResponse;
  1815. }
  1816. }
  1817. }
  1818. } else {
  1819. }
  1820. return $arrResponse;
  1821. }
  1822. public function activateManualWorkflow(Request $request) {
  1823. $validator = Validator::make($request->all(), [
  1824. 'ID_WORKFLOW' => 'required|integer',
  1825. 'USUARIO' => 'required|string',
  1826. 'NUMERO_LINEA' => 'required|integer',
  1827. ]);
  1828. if ($validator->fails()) {
  1829. return $this->responseController->makeResponse(
  1830. true,
  1831. "Se encontraron uno o más errores.",
  1832. $this->responseController->makeErrors($validator->errors()->messages()),
  1833. 401
  1834. );
  1835. }
  1836. DB::beginTransaction();
  1837. $requestData = $request->all();
  1838. try {
  1839. $validateExists = DB::table('S002V01TWORK')
  1840. ->where('WORK_IDWO', '=', $requestData['ID_WORKFLOW'])
  1841. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  1842. ->where('WORK_ESTA', '=', 'Activo')
  1843. ->exists();
  1844. } catch (\Throwable $th) {
  1845. DB::rollBack();
  1846. return $this->responseController->makeResponse(true, "Ocurrió un error al verificar si el workflow existe.", $th->getMessage(), 500);
  1847. }
  1848. if (!$validateExists) {
  1849. DB::rollBack();
  1850. return $this->responseController->makeResponse(true, "El flujo de trabajo no existe.", [], 500);
  1851. }
  1852. try {
  1853. $arrTasks = DB::table('S002V01TTAWO')
  1854. ->where('TAWO_IDWO', '=', $requestData['ID_WORKFLOW'])
  1855. ->where('TAWO_ESTA', '=', 'Activo')
  1856. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1857. ->where('PRWO_ESTA', '=', 'Asignado')
  1858. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1859. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  1860. ->orderBy('TAWO_SECU', 'ASC')
  1861. ->get([
  1862. 'TAWO_IDTA AS ID_TAREA',
  1863. 'TAWO_NOTA AS NOMBRE_TAREA',
  1864. 'TAWO_REVA AS REGLA_VALIDACION',
  1865. 'TAWO_OTWO AS OTRO_WORKFLOW',
  1866. 'PRWO_IDPR AS ID_PROCESO',
  1867. 'PRWO_NOPR AS NOMBRE_PROCESO',
  1868. ]);
  1869. $arrTasks = json_decode(json_encode($arrTasks), true);
  1870. } catch (\Throwable $th) {
  1871. DB::rollBack();
  1872. return $this->responseController->makeResponse(true, "Ocurrió un error al obtener las tareas del flujo de trabajo.", $th->getMessage(), 500);
  1873. }
  1874. if (empty($arrTasks)) {
  1875. DB::rollBack();
  1876. return $this->responseController->makeResponse(true, "No hay tareas registradas en el flujo de trabajo.", [], 500);
  1877. }
  1878. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  1879. if ($arrResponseCheckUser['error']) {
  1880. DB::rollBack();
  1881. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  1882. }
  1883. $user = $arrResponseCheckUser['response'];
  1884. $now = $this->functionsController->now();
  1885. $currentDate = $now->toDateTimeString();
  1886. try {
  1887. $idExecuteWorkflow = DB::table('S002V01TEJWO')->insertGetId([
  1888. 'EJWO_NULI' => $requestData['NUMERO_LINEA'],
  1889. 'EJWO_IDWO' => $requestData['ID_WORKFLOW'],
  1890. 'EJWO_ESTA' => 'En proceso',
  1891. 'EJWO_USRE' => $user,
  1892. 'EJWO_FERE' => $currentDate,
  1893. 'EJWO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1894. ]);
  1895. } catch (\Throwable $th) {
  1896. DB::rollBack();
  1897. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la solicitud del flujo de trabajo.", $th->getMessage(), 500);
  1898. }
  1899. if (!$idExecuteWorkflow) {
  1900. DB::rollBack();
  1901. return $this->responseController->makeResponse(true, "No se pudo registrar la solicitud del flujo de trabajo.", [], 500);
  1902. }
  1903. foreach ($arrTasks as $keyTask => $task) {
  1904. try {
  1905. $idExecuteTask = DB::table('S002V01TEJTW')->insertGetId([
  1906. 'EJTW_NULI' => $requestData['NUMERO_LINEA'],
  1907. 'EJTW_IDEW' => $idExecuteWorkflow,
  1908. 'EJTW_IDTA' => $task['ID_TAREA'],
  1909. 'EJTW_ESTA' => $keyTask === 0 ? 'En proceso' : 'En espera',
  1910. 'EJTW_USRE' => $user,
  1911. 'EJTW_FERE' => $currentDate,
  1912. 'EJTW_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1913. ]);
  1914. } catch (\Throwable $th) {
  1915. DB::rollBack();
  1916. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la solicitud de las tareas.", $th->getMessage(), 500);
  1917. }
  1918. if (!$idExecuteTask) {
  1919. DB::rollBack();
  1920. return $this->responseController->makeResponse(true, "No se pudo registrar la solicitud de las tareas.", [], 500);
  1921. }
  1922. if ($keyTask === 0 ) {
  1923. try {
  1924. $arrNotificate = DB::table('S002V01TNTWO')
  1925. ->where('NTWO_IDTA', '=', $task['ID_TAREA'])
  1926. ->where('NTWO_NULI', '=', $requestData['NUMERO_LINEA'])
  1927. ->where('NTWO_ESTA', '=', 'Activo')
  1928. ->orderBy('NTWO_SECU', 'ASC')
  1929. ->get([
  1930. 'NTWO_IDNO AS ID_NOTIFICACION',
  1931. 'NTWO_IDUS AS ID_USUARIO',
  1932. 'NTWO_TINO AS TIPO_NOTIFICACION',
  1933. ]);
  1934. $arrNotificate = json_decode(json_encode($arrNotificate), true);
  1935. } catch (\Throwable $th) {
  1936. DB::rollBack();
  1937. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar la solicitud de las tareas.", $th->getMessage(), 500);
  1938. }
  1939. $count = 1;
  1940. $userValidate = null;
  1941. $arrUserNotificate = array();
  1942. foreach ($arrNotificate as $keyNotificate => $notificate) {
  1943. if ($notificate['TIPO_NOTIFICACION'] === 'N') {
  1944. try {
  1945. $validateRegister = DB::table('S002V01TEJNO')->insert([
  1946. 'EJNO_NULI' => $requestData['NUMERO_LINEA'],
  1947. 'EJNO_IDET' => $idExecuteTask,
  1948. 'EJNO_USNO' => $notificate['ID_USUARIO'],
  1949. 'EJNO_SECU' => 0,
  1950. 'EJNO_TINO' => 'N',
  1951. 'EJNO_ESTA' => 'Notificado',
  1952. 'EJNO_USRE' => $user,
  1953. 'EJNO_FERE' => $currentDate,
  1954. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1955. ]);
  1956. } catch (\Throwable $th) {
  1957. DB::rollBack();
  1958. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar las solicitudes de las notificaciones.", $th->getMessage(), 500);
  1959. }
  1960. if (!$validateRegister) {
  1961. DB::rollBack();
  1962. return $this->responseController->makeResponse(true, "No se pudo registrar las solicitudes de las notificaciones.", [], 500);
  1963. }
  1964. $arrUserNotificate[] = $notificate['ID_USUARIO'];
  1965. } else if ($notificate['TIPO_NOTIFICACION'] === 'V') {
  1966. try {
  1967. $validateRegister = DB::table('S002V01TEJNO')->insert([
  1968. 'EJNO_NULI' => $requestData['NUMERO_LINEA'],
  1969. 'EJNO_IDET' => $idExecuteTask,
  1970. 'EJNO_USNO' => $notificate['ID_USUARIO'],
  1971. 'EJNO_SECU' => $count,
  1972. 'EJNO_TINO' => 'V',
  1973. 'EJNO_ESTA' => $count === 1 ? 'Notificado' : 'En espera',
  1974. 'EJNO_USRE' => $user,
  1975. 'EJNO_FERE' => $currentDate,
  1976. 'EJNO_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
  1977. ]);
  1978. } catch (\Throwable $th) {
  1979. DB::rollBack();
  1980. return $this->responseController->makeResponse(true, "Ocurrió un error al registrar las solicitudes de validación.", $th->getMessage(), 500);
  1981. }
  1982. if (!$validateRegister) {
  1983. DB::rollBack();
  1984. return $this->responseController->makeResponse(true, "No se pudo registrar las solicitudes de las validaciones.", [], 500);
  1985. }
  1986. if ($count === 1) {
  1987. $userValidate = $notificate['ID_USUARIO'];
  1988. }
  1989. $count++;
  1990. }
  1991. }
  1992. if (!empty($arrUserNotificate) && !is_null($userValidate)) {
  1993. $objExecute = [ 'ID' => $idExecuteWorkflow, 'TYPE' => 'NOTIFICATE' ];
  1994. $strExecuteWorkflow = json_encode($objExecute);
  1995. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  1996. $this->notificationsController->emitNotification(
  1997. 'S002V01M03GEPR',
  1998. 'Nuevo flujo de procesos creado',
  1999. "El usuario $user ha creado un nuevo flujo de trabajo: {$task['NOMBRE_PROCESO']}.
  2000. La tarea: ".$task['NOMBRE_TAREA']. " le notifica que el proceso se encuentra en validación por el usuario: $userValidate.",
  2001. [[
  2002. 'BOTON' => 'Ver solicitud',
  2003. 'FUNCION' => 'openModule',
  2004. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  2005. ]],
  2006. $arrUserNotificate,
  2007. $user,
  2008. $requestData['NUMERO_LINEA'],
  2009. $this->socketClient,
  2010. );
  2011. }
  2012. if (!is_null($userValidate)) {
  2013. $objExecute = [ 'ID' => $idExecuteWorkflow, 'TYPE' => 'VALIDATE' ];
  2014. $strExecuteWorkflow = json_encode($objExecute);
  2015. $encExecuteWorkflow = $this->encController->encrypt($strExecuteWorkflow);
  2016. $this->notificationsController->emitNotification(
  2017. 'S002V01M03GEPR',
  2018. 'Nuevo flujo de procesos creado',
  2019. "El usuario $user ha creado un nuevo flujo de trabajo: ".$task['NOMBRE_PROCESO']. ".
  2020. La tarea: ".$task['NOMBRE_TAREA']." requiere de su validación.",
  2021. [[
  2022. 'BOTON' => 'Ver solicitud',
  2023. 'FUNCION' => 'openModule',
  2024. 'PARAMETROS' => json_encode([$this->encController->encrypt("GEPR/SFTR/GSFT/".$encExecuteWorkflow)]),
  2025. ]],
  2026. [$userValidate],
  2027. $user,
  2028. $requestData['NUMERO_LINEA'],
  2029. $this->socketClient,
  2030. );
  2031. }
  2032. }
  2033. }
  2034. DB::commit();
  2035. return $this->responseController->makeResponse(false, "ÉXITO: Registro Exitoso");
  2036. }
  2037. public function searchRequestWorkflow(Request $request) {
  2038. $validator = Validator::make($request->all(), [
  2039. 'WORKFLOW' => 'nullable|integer',
  2040. 'EJECUCION_WORKFLOW' => 'nullable|integer',
  2041. 'ESTADO_WORKFLOW' => 'nullable|string',
  2042. 'TAREA' => 'nullable|integer',
  2043. 'EJECUCION_TAREA' => 'nullable|integer',
  2044. 'ESTADO_TAREA' => 'nullable|string',
  2045. 'PROCESO' => 'nullable|string',
  2046. 'FECHA_INICIO' => 'nullable|string',
  2047. 'FECHA_FINAL' => 'nullable|string',
  2048. 'USUARIO' => 'required|string',
  2049. 'NUMERO_LINEA' => 'required|integer',
  2050. ]);
  2051. if ($validator->fails()) {
  2052. return $this->responseController->makeResponse(
  2053. true,
  2054. "Se encontraron uno o más errores.",
  2055. $this->responseController->makeErrors($validator->errors()->messages()),
  2056. 401
  2057. );
  2058. }
  2059. DB::beginTransaction();
  2060. $requestData = $request->all();
  2061. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2062. if ($arrResponseCheckUser['error']) {
  2063. DB::rollBack();
  2064. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2065. }
  2066. $filterData = array(
  2067. 'WORKFLOW' => 'WORK_IDWO',
  2068. 'EJECUCION_WORKFLOW' => 'EJWO_IDEW',
  2069. 'ESTADO_WORKFLOW' => 'EJWO_ESTA',
  2070. 'TAREA' => 'TAWO_IDTA',
  2071. 'EJECUCION_TAREA' => 'EJTW_IDET',
  2072. 'ESTADO_TAREA' => 'EJTW_ESTA',
  2073. 'PROCESO' => 'PRWO_IDPR',
  2074. );
  2075. $dataWhere = array();
  2076. foreach ($requestData as $key => $value) {
  2077. if (
  2078. !is_null($value) &&
  2079. $key !== 'USUARIO' &&
  2080. $key !== 'NUMERO_LINEA' &&
  2081. $key !== 'FECHA_INICIO' &&
  2082. $key !== 'FECHA_FINAL'
  2083. ) {
  2084. $dataWhere[$filterData[$key]] = $value;
  2085. }
  2086. }
  2087. try {
  2088. $arrFilter = DB::table('S002V01TEJWO')
  2089. ->where($dataWhere)
  2090. ->where('EJWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2091. ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
  2092. ->where('EJTW_NULI', '=', $requestData['NUMERO_LINEA'])
  2093. ->where('TAWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2094. ->where('PRWO_NULI', '=', $requestData['NUMERO_LINEA'])
  2095. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'EJWO_IDWO')
  2096. ->join('S002V01TEJTW', 'EJTW_IDEW', '=', 'EJWO_IDEW')
  2097. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  2098. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  2099. ->get([
  2100. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  2101. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  2102. 'EJWO_ESTA AS ESTADO_EJECUCION_WORKFLOW',
  2103. DB::raw('CONCAT(TAWO_NOTA, " (", TAWO_IDTA, ")") AS NOMBRE_TAREA'),
  2104. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  2105. 'EJTW_ESTA AS ESTADO_EJECUCION_TAREA',
  2106. DB::raw('CONCAT(PRWO_NOPR, " (", PRWO_IDPR, ")") AS NOMBRE_PROCESO'),
  2107. 'EJTW_USRE AS USUARIO_REGISTRA',
  2108. 'EJTW_FERE AS FECHA_REGISTRA',
  2109. 'EJTW_USMO AS USUARIO_MODIFICA',
  2110. 'EJTW_FEMO AS FECHA_MODIFICA',
  2111. ]);
  2112. $arrFilter = json_decode(json_encode($arrFilter), true);
  2113. } catch (\Throwable $th) {
  2114. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las solicitudes de los flujos de trabajo.', $th->getMessage(), 401);
  2115. }
  2116. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrFilter, $requestData['NUMERO_LINEA']);
  2117. if ($responseCheckLatestUpdate['error']) {
  2118. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2119. }
  2120. $arrFilter = $responseCheckLatestUpdate['response'];
  2121. $arrDataFilter = array();
  2122. if ( !is_null($requestData['FECHA_INICIO']) && !is_null($requestData['FECHA_FINAL'])) {
  2123. foreach ($arrFilter as $key => $filter) {
  2124. $updateDate = $filter['FECHA_MODIFICA'];
  2125. $date = explode(' ', $updateDate)[0];
  2126. $arrDate = explode('-', $date);
  2127. $strFormattDate = $arrDate[2].'-'.$arrDate[1].'-'.$arrDate[0];
  2128. $dateFormattDate = new Carbon($strFormattDate);
  2129. $dateStart = new Carbon($requestData['FECHA_INICIO']);
  2130. $dateEnd = new Carbon($requestData['FECHA_FINAL']);
  2131. if ( $dateFormattDate->gte($dateStart) && $dateFormattDate->lte($dateEnd) ) {
  2132. $arrDataFilter[] = $filter;
  2133. }
  2134. }
  2135. } else {
  2136. $arrDataFilter = $arrFilter;
  2137. }
  2138. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrDataFilter);
  2139. }
  2140. public function getDetailsExecuteRequest($idExecuteTask, $user, $line) {
  2141. $idExecuteTask = $this->encController->decrypt($idExecuteTask);
  2142. if (is_null($idExecuteTask)) {
  2143. return $this->responseController->makeResponse(true, "La ejecución no está encriptado correctamente.", [], 500);
  2144. }
  2145. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  2146. if ($arrResponseCheckUser['error']) {
  2147. DB::rollBack();
  2148. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2149. }
  2150. try {
  2151. $arrExecuteRequest = (array) DB::table('S002V01TEJWO')
  2152. ->where('EJTW_IDET', '=', $idExecuteTask)
  2153. ->where('EJWO_NULI', '=', $line)
  2154. ->where('WORK_NULI', '=', $line)
  2155. ->where('EJTW_NULI', '=', $line)
  2156. ->where('TAWO_NULI', '=', $line)
  2157. ->where('PRWO_NULI', '=', $line)
  2158. ->join('S002V01TWORK', 'WORK_IDWO', '=', 'EJWO_IDWO')
  2159. ->join('S002V01TEJTW', 'EJTW_IDEW', '=', 'EJWO_IDEW')
  2160. ->join('S002V01TTAWO', 'TAWO_IDTA', '=', 'EJTW_IDTA')
  2161. ->join('S002V01TPRWO', 'PRWO_IDPR', '=', 'TAWO_IDPR')
  2162. ->first([
  2163. DB::raw('CONCAT(WORK_NOWO, " (", WORK_IDWO, ")") AS NOMBRE_WORKFLOW'),
  2164. 'WORK_DESC AS DESCRIPCION_WORKFLOW',
  2165. 'WORK_AUTO AS AUTOMATICO',
  2166. 'WORK_PRED AS PREDETERMINADO',
  2167. 'EJWO_IDEW AS ID_EJECUCION_WORKFLOW',
  2168. 'EJWO_ESTA AS ESTADO_EJECUCION_WORKFLOW',
  2169. DB::raw('CONCAT(TAWO_NOTA, " (", TAWO_IDTA, ")") AS NOMBRE_TAREA'),
  2170. 'TAWO_DESC AS DESCRIPCION_TAREA',
  2171. 'EJTW_IDET AS ID_EJECUCION_TAREA',
  2172. 'EJTW_INFO AS INFORMACION_FORMULARIO',
  2173. 'EJTW_INRE AS INFORMACION_REGISTRO',
  2174. 'EJTW_ESTA AS ESTADO_EJECUCION_TAREA',
  2175. DB::raw('CONCAT(PRWO_NOPR, " (", PRWO_IDPR, ")") AS NOMBRE_PROCESO'),
  2176. 'EJTW_USRE AS USUARIO_REGISTRA',
  2177. 'EJTW_FERE AS FECHA_REGISTRA',
  2178. 'EJTW_USMO AS USUARIO_MODIFICA',
  2179. 'EJTW_FEMO AS FECHA_MODIFICA',
  2180. ]);
  2181. } catch (\Throwable $th) {
  2182. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las solicitudes de los flujos de trabajo.', $th->getMessage(), 401);
  2183. }
  2184. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate([$arrExecuteRequest], $line);
  2185. if ($responseCheckLatestUpdate['error']) {
  2186. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2187. }
  2188. $arrExecuteRequest = $responseCheckLatestUpdate['response'][0];
  2189. $arrExecuteRequest['AUTOMATICO'] = $arrExecuteRequest['AUTOMATICO'] === 1 ? 'Si' : 'No';
  2190. $arrExecuteRequest['PREDETERMINADO'] = $arrExecuteRequest['PREDETERMINADO'] === 1 ? 'Si' : 'No';
  2191. $arrExecuteRequest['ID_EJECUCION_WORKFLOW'] = '#'.$arrExecuteRequest['ID_EJECUCION_WORKFLOW'];
  2192. $arrExecuteRequest['ID_EJECUCION_TAREA'] = '#'.$arrExecuteRequest['ID_EJECUCION_TAREA'];
  2193. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrExecuteRequest);
  2194. }
  2195. public function searchNotificate(Request $request) {
  2196. $validator = Validator::make($request->all(), [
  2197. 'NUMERO_NOTIFICACION' => 'nullable|integer',
  2198. 'USUARIO_NOTIFICACION' => 'nullable|string',
  2199. 'TIPO_NOTIFICACION' => 'nullable|string',
  2200. 'ESTADO_NOTIFICACION' => 'nullable|string',
  2201. 'FECHA_INICIO' => 'nullable|string',
  2202. 'FECHA_FINAL' => 'nullable|string',
  2203. 'USUARIO' => 'required|string',
  2204. 'NUMERO_LINEA' => 'required|integer',
  2205. ]);
  2206. if ($validator->fails()) {
  2207. return $this->responseController->makeResponse(
  2208. true,
  2209. "Se encontraron uno o más errores.",
  2210. $this->responseController->makeErrors($validator->errors()->messages()),
  2211. 401
  2212. );
  2213. }
  2214. DB::beginTransaction();
  2215. $requestData = $request->all();
  2216. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
  2217. if ($arrResponseCheckUser['error']) {
  2218. DB::rollBack();
  2219. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2220. }
  2221. $filterData = array(
  2222. 'NUMERO_NOTIFICACION' => 'EJNO_IDEN',
  2223. 'USUARIO_NOTIFICACION' => 'EJNO_USNO',
  2224. 'TIPO_NOTIFICACION' => 'EJNO_TINO',
  2225. 'ESTADO_NOTIFICACION' => 'EJNO_ESTA',
  2226. );
  2227. $dataWhere = array();
  2228. foreach ($requestData as $key => $value) {
  2229. if (
  2230. !is_null($value) &&
  2231. $key !== 'USUARIO' &&
  2232. $key !== 'NUMERO_LINEA' &&
  2233. $key !== 'FECHA_INICIO' &&
  2234. $key !== 'FECHA_FINAL'
  2235. ) {
  2236. $dataWhere[$filterData[$key]] = $value;
  2237. }
  2238. }
  2239. try {
  2240. $arrFilter = DB::table('S002V01TEJNO')
  2241. ->where($dataWhere)
  2242. ->where('EJNO_NULI', '=', $requestData['NUMERO_LINEA'])
  2243. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  2244. ->get([
  2245. 'EJNO_IDEN AS ID_NOTIFICACION',
  2246. 'EJNO_IDET AS ID_EJECUCION_TAREA',
  2247. DB::raw('CONCAT(USUA_NOMB, " ", USUA_APPA, IF(ISNULL(USUA_APMA), "", CONCAT(" ", USUA_APMA)), " (", USUA_IDUS, ")") AS USUARIO_NOTIFICACION'),
  2248. 'EJNO_TINO AS TIPO_NOTIFICACION',
  2249. 'EJNO_ESTA AS ESTADO',
  2250. 'EJNO_MERE AS MENSAJE_RECHAZO',
  2251. 'EJNO_USRE AS USUARIO_REGISTRA',
  2252. 'EJNO_FERE AS FECHA_REGISTRA',
  2253. 'EJNO_USMO AS USUARIO_MODIFICA',
  2254. 'EJNO_FEMO AS FECHA_MODIFICA',
  2255. ]);
  2256. $arrFilter = json_decode(json_encode($arrFilter), true);
  2257. } catch (\Throwable $th) {
  2258. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las notificaciones.', $th->getMessage(), 401);
  2259. }
  2260. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrFilter, $requestData['NUMERO_LINEA']);
  2261. if ($responseCheckLatestUpdate['error']) {
  2262. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2263. }
  2264. $arrFilter = $responseCheckLatestUpdate['response'];
  2265. if ( !is_null($requestData['FECHA_INICIO']) && !is_null($requestData['FECHA_FINAL'])) {
  2266. foreach ($arrFilter as $key => $filter) {
  2267. $updateDate = $filter['FECHA_MODIFICA'];
  2268. $date = explode(' ', $updateDate)[0];
  2269. $arrDate = explode('-', $date);
  2270. $strFormattDate = $arrDate[2].'-'.$arrDate[1].'-'.$arrDate[0];
  2271. $dateFormattDate = new Carbon($strFormattDate);
  2272. $dateStart = new Carbon($requestData['FECHA_INICIO']);
  2273. $dateEnd = new Carbon($requestData['FECHA_FINAL']);
  2274. if ( $dateFormattDate->gte($dateStart) && $dateFormattDate->lte($dateEnd) ) {
  2275. $arrDataFilter[] = $filter;
  2276. }
  2277. }
  2278. } else {
  2279. $arrDataFilter = $arrFilter;
  2280. }
  2281. foreach ($arrDataFilter as $key => $value) {
  2282. if ($value['TIPO_NOTIFICACION'] === 'V') {
  2283. $value['TIPO_NOTIFICACION'] = 'Para validación';
  2284. }
  2285. if ($value['TIPO_NOTIFICACION'] === 'N') {
  2286. $value['TIPO_NOTIFICACION'] = 'Para notificación';
  2287. }
  2288. $arrDataFilter[$key] = $value;
  2289. }
  2290. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrDataFilter);
  2291. }
  2292. public function getDetailsNotificate($idNotificate, $user, $line) {
  2293. $idNotificate = $this->encController->decrypt($idNotificate);
  2294. if (is_null($idNotificate)) {
  2295. return $this->responseController->makeResponse(true, "La ejecución no está encriptado correctamente.", [], 500);
  2296. }
  2297. $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
  2298. if ($arrResponseCheckUser['error']) {
  2299. DB::rollBack();
  2300. return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
  2301. }
  2302. try {
  2303. $arrNotificate = (array) DB::table('S002V01TEJNO')
  2304. ->where('EJNO_IDEN', '=', $idNotificate)
  2305. ->where('EJNO_NULI', '=', $line)
  2306. ->join('S002V01TUSUA', 'USUA_IDUS', '=', 'EJNO_USNO')
  2307. ->first([
  2308. 'EJNO_IDEN AS NUMERO_NOTIFICACION',
  2309. 'EJNO_IDET AS ID_EJECUCION_TAREA',
  2310. 'EJNO_USNO AS USUARIO_NOTIFICACION',
  2311. 'EJNO_SECU AS SECUENCIA',
  2312. 'EJNO_TINO AS TIPO_NOTIFICACION',
  2313. 'EJNO_ESTA AS ESTADO',
  2314. 'EJNO_MERE AS MENSAJE_RECHAZO',
  2315. 'EJNO_USRE AS USUARIO_REGISTRA',
  2316. 'EJNO_FERE AS FECHA_REGISTRA',
  2317. 'EJNO_USMO AS USUARIO_MODIFICA',
  2318. 'EJNO_FEMO AS FECHA_MODIFICA',
  2319. ]);
  2320. } catch (\Throwable $th) {
  2321. return $this->responseController->makeResponse(true, 'Ocurrió un error al obtener los datos de las notificaciones.', $th->getMessage(), 401);
  2322. }
  2323. $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate([$arrNotificate], $line);
  2324. if ($responseCheckLatestUpdate['error']) {
  2325. return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
  2326. }
  2327. $arrNotificate = $responseCheckLatestUpdate['response'][0];
  2328. $arrNotificate['NUMERO_NOTIFICACION'] = '#'.$arrNotificate['NUMERO_NOTIFICACION'];
  2329. $arrNotificate['ID_EJECUCION_TAREA'] = '#'.$arrNotificate['ID_EJECUCION_TAREA'];
  2330. $arrNotificate['TIPO_NOTIFICACION'] = $arrNotificate['TIPO_NOTIFICACION'] === 'V' ? 'Para validación' : 'Para notificar';
  2331. return $this->responseController->makeResponse(false, "ÉXITO: Consulta exitosa", $arrNotificate);
  2332. }
  2333. }