Browse Source

funcion updateWorkflow y getWorkflowHistory

EmilianoOrtiz 2 tháng trước cách đây
mục cha
commit
b4d4d3d630

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

@@ -108,6 +108,143 @@ class ProcessManagementController extends Controller
         return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrWorkflow);
     }
 
+    public function updateWorkflow(Request $request, $idWorkflow) {
+        $validator = Validator::make($request->all(), [
+            'NOMBRE_WORKFLOW' => 'required|string|max:50',
+            'DESCRIPCION' => 'required|string',
+            'COMENTARIO_CAMBIO' => 'nullable|string',
+            '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
+            );
+        }
+
+        DB::beginTransaction();
+        $requestData = $request->all();
+
+        $arrResponseCheckUser = $this->resourcesController->checkUserEnc($requestData['USUARIO'], $requestData['NUMERO_LINEA']);
+        if ($arrResponseCheckUser['error']) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
+        }
+        $user = $arrResponseCheckUser['response'];
+
+        try {
+            $idWorkflow = $this->encController->decrypt($idWorkflow);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del workflow', $th->getMessage(), 406);
+        }
+
+        try {
+            $currentWorkflow = (array) DB::table('S002V01TWORK')
+                ->where('WORK_IDWO', '=', $idWorkflow)
+                ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
+                ->where('WORK_ESTA', '=', 'Activo')
+                ->first([
+                    'WORK_NOWO',
+                    'WORK_DESC',
+                    'WORK_VERS'
+                ]);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el workflow.", $th->getMessage(), 500);
+        }
+
+        if (empty($currentWorkflow)) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "El workflow no existe.", [], 404);
+        }
+
+        $now = $this->functionsController->now();
+        $currentDate = $now->toDateTimeString();
+        $newVersion = $currentWorkflow['WORK_VERS'] + 1;
+
+        try {
+            DB::table('S002V01HWORK')->insert([
+                'HWORK_IDWO' => $idWorkflow,
+                'HWORK_VERS' => $currentWorkflow['WORK_VERS'],
+                'HWORK_NOWO' => $currentWorkflow['WORK_NOWO'],
+                'HWORK_DESC' => $currentWorkflow['WORK_DESC'],
+                'HWORK_COME' => $requestData['COMENTARIO_CAMBIO'],
+                'HWORK_USRE' => $user,
+                'HWORK_FERE' => $currentDate,
+                'HWORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
+            ]);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "Ocurrió un error al registrar el historial.", $th->getMessage(), 500);
+        }
+
+        try {
+            $validateUpdate = DB::table('S002V01TWORK')
+                ->where('WORK_IDWO', '=', $idWorkflow)
+                ->where('WORK_NULI', '=', $requestData['NUMERO_LINEA'])
+                ->where('WORK_ESTA', '=', 'Activo')
+                ->update([
+                    'WORK_NOWO' => $requestData['NOMBRE_WORKFLOW'],
+                    'WORK_DESC' => $requestData['DESCRIPCION'],
+                    'WORK_VERS' => $newVersion,
+                    'WORK_FEAR' => DB::raw('CURRENT_TIMESTAMP'),
+                ]);
+        } catch (\Throwable $th) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "Ocurrió un error al actualizar el workflow.", $th->getMessage(), 500);
+        }
+
+        if (!$validateUpdate) {
+            DB::rollBack();
+            return $this->responseController->makeResponse(true, "No se pudo actualizar el workflow.", [], 500);
+        }
+
+        DB::commit();
+        return $this->responseController->makeResponse(false, "ÉXITO: Workflow actualizado exitosamente");
+    }
+
+    public function getWorkflowHistory($idWorkflow, $user, $line) {
+        $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);
+        if ($arrResponseCheckUser['error']) {
+            return $this->responseController->makeResponse(true, $arrResponseCheckUser['msg'], [], 401);
+        }
+
+        try {
+            $idWorkflow = $this->encController->decrypt($idWorkflow);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(true, 'Ocurrió un error al desencriptar el ID del workflow', $th->getMessage(), 406);
+        }
+
+        try {
+            $arrHistory = DB::table('S002V01HWORK')
+                ->where('HWORK_IDWO', '=', $idWorkflow)
+                ->orderBy('HWORK_VERS', 'DESC')
+                ->get([
+                    'HWORK_VERS AS VERSION',
+                    'HWORK_NOWO AS NOMBRE',
+                    'HWORK_DESC AS DESCRIPCION',
+                    'HWORK_COME AS COMENTARIO',
+                    'HWORK_USRE AS USUARIO_CAMBIO',
+                    'HWORK_FERE AS FECHA_CAMBIO'
+                ]);
+            $arrHistory = json_decode(json_encode($arrHistory), true);
+        } catch (\Throwable $th) {
+            return $this->responseController->makeResponse(true, "Ocurrió un error al obtener el historial del workflow.", $th->getMessage(), 500);
+        }
+
+        $responseCheckLatestUpdate = $this->resourcesController->checkLatestUpdate($arrHistory, $line);
+        if ($responseCheckLatestUpdate['error']) {
+            return $this->responseController->makeResponse(true, $responseCheckLatestUpdate['msg'], [], 500);
+        }
+        $arrHistory = $responseCheckLatestUpdate['response'];
+
+        return $this->responseController->makeResponse(false, "ÉXITO: Consulta Exitosa", $arrHistory);
+    }
+
     //Submodulo de auditoria: Busqueda de flujos de trabajo y solicitudes de validacion
     public function getProcessWorkflow($user, $line) {
         $arrResponseCheckUser = $this->resourcesController->checkUserEnc($user, $line);