Quellcode durchsuchen

función búsqueda de workflows multicriterio con join a la tabla de ejecuciones para proporcionar informacion de las ejecuciones por workflow

EmilianoOrtiz vor 4 Wochen
Ursprung
Commit
a2bc5b9fb1

+ 89 - 0
sistema-mantenimiento-back/app/Http/Controllers/ProcessManagementController.php

@@ -2977,6 +2977,95 @@ class ProcessManagementController extends Controller
         }
     }
 
+    public function searchWorkflows(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'PREDETERMINADO' => 'nullable|boolean',
+            'ESTADO' => 'nullable|string|in:Borrador,Activo,Eliminado',
+            'USUARIO_REGISTRO' => 'nullable|string',
+            'EJECUCION_INICIO' => 'nullable|date',
+            'EJECUCION_FIN' => 'nullable|date',
+            'ESTADO_EJECUCION' => 'nullable|string|in:En proceso,Completada,Interrumpida',
+            'REGISTRO_INICIO' => 'nullable|date',
+            'REGISTRO_FIN' => 'nullable|date',
+            'USUARIO' => 'required|string',
+            'NUMERO_LINEA' => 'required|integer',
+        ]);
+
+        if ($validator->fails()) {
+            return $this->responseController->makeResponse(true, "Se encontraron uno o más errores.", $this->responseController->makeErrors($validator->errors()->messages()), 401);
+        }
+
+        $requestData = $request->all();
+        $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
+        if ($arrResponseCheckUser['error']) {
+            return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
+        }
+
+        try {
+            $query = DB::table('S002V01TWORK as w')
+                ->leftJoin('S002V01TEJWO as e', 'w.WORK_IDWO', '=', 'e.EJWO_IDWO')
+                ->where('w.WORK_NULI', '=', $requestData['NUMERO_LINEA']);
+
+            // Restricción: Si PREDETERMINADO = true, forzar USUARIO_REGISTRO = SAM
+            if (isset($requestData['PREDETERMINADO']) && $requestData['PREDETERMINADO']) {
+                $query->where('w.WORK_PRED', '=', 1)
+                      ->where('w.WORK_USRE', '=', '0000000001');
+            } else {
+                if (isset($requestData['PREDETERMINADO']) && !$requestData['PREDETERMINADO']) {
+                    $query->where('w.WORK_PRED', '=', 0);
+                }
+                if (!empty($requestData['USUARIO_REGISTRO'])) {
+                    $query->where('w.WORK_USRE', '=', $requestData['USUARIO_REGISTRO']);
+                }
+            }
+
+            if (!empty($requestData['ESTADO'])) {
+                $query->where('w.WORK_ESTA', '=', $requestData['ESTADO']);
+            }
+
+            // Restricción: Si ESTADO = Borrador, excluir workflows con ejecuciones
+            if (!empty($requestData['EJECUCION_INICIO']) || !empty($requestData['EJECUCION_FIN']) || !empty($requestData['ESTADO_EJECUCION'])) {
+                $query->where('w.WORK_ESTA', '!=', 'Borrador');
+            }
+
+            if (!empty($requestData['EJECUCION_INICIO'])) {
+                $query->whereDate('e.EJWO_FERE', '>=', $requestData['EJECUCION_INICIO']);
+            }
+            if (!empty($requestData['EJECUCION_FIN'])) {
+                $query->whereDate('e.EJWO_FERE', '<=', $requestData['EJECUCION_FIN']);
+            }
+            if (!empty($requestData['ESTADO_EJECUCION'])) {
+                $query->where('e.EJWO_ESTA', '=', $requestData['ESTADO_EJECUCION']);
+            }
+
+            if (!empty($requestData['REGISTRO_INICIO'])) {
+                $query->whereDate('w.WORK_FERE', '>=', $requestData['REGISTRO_INICIO']);
+            }
+            if (!empty($requestData['REGISTRO_FIN'])) {
+                $query->whereDate('w.WORK_FERE', '<=', $requestData['REGISTRO_FIN']);
+            }
+
+            $results = $query->select(
+                'w.WORK_IDWO as ID_WORKFLOW',
+                'w.WORK_NOWO as NOMBRE_WORKFLOW',
+                'w.WORK_DESC as DESC_WORKFLOW',
+                'w.WORK_ESTA as ESTADO_WORKFLOW',
+                'w.WORK_USRE as USUARIO_REGISTRO',
+                'w.WORK_FERE as FECHA_REGISTRO',
+                DB::raw('COUNT(e.EJWO_IDEW) as EJECUCIONES'),
+                DB::raw('MAX(e.EJWO_FERE) as ULTIMA_EJECUCION')
+            )
+            ->groupBy('w.WORK_IDWO', 'w.WORK_NOWO', 'w.WORK_DESC', 'w.WORK_ESTA', 'w.WORK_USRE', 'w.WORK_FERE')
+            ->orderBy('w.WORK_FERE', 'desc')
+            ->get();
+
+            return $this->responseController->makeResponse(false, "ÉXITO: Búsqueda de workflows completada", $results);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(true, "Ocurrió un error en la búsqueda de workflows.", $th->getMessage(), 500);
+        }
+    }
+
     /**
      * Procesa la información extra según las reglas de validación Función privada en uso
      */

+ 1 - 0
sistema-mantenimiento-back/routes/api.php

@@ -580,6 +580,7 @@ Route::get('process-management/get-details-execute-request/{idExecuteTask}/{user
 Route::post('process-management/search-notificate',                                             "App\Http\Controllers\ProcessManagementController@searchNotificationsAndRequests");
 Route::post('process-management/search-solicitudes',                                            "App\Http\Controllers\ProcessManagementController@searchSolicitudes");
 Route::post('process-management/search-notificaciones',                                         "App\Http\Controllers\ProcessManagementController@searchNotificaciones");
+Route::post('process-management/search-workflows',                                              "App\Http\Controllers\ProcessManagementController@searchWorkflows");
 Route::get('process-management/get-details-notificate/{idNotificate}/{user}/{line}',           "App\Http\Controllers\ProcessManagementController@getDetailsNotificate");
 Route::post('process-management/activate-workflow-automatic',                                   "App\Http\Controllers\ProcessManagementController@activateManualWorkflow");