|
|
@@ -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
|
|
|
*/
|