浏览代码

Actualización controladores

MathewCordourier 2 年之前
父节点
当前提交
4b7ff30e08

+ 32 - 78
sistema-mantenimiento-back/app/Http/Controllers/DocumentsController.php

@@ -14,9 +14,6 @@ use Illuminate\Support\Facades\Storage;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use Throwable;
 
-use App\Http\Controllers\resources\ResourcesController;
-use App\Http\Controllers\resources\ResponseController;
-
 class DocumentsController extends Controller
 {
     private $resources_controller;
@@ -28,7 +25,7 @@ class DocumentsController extends Controller
 
     }
     // Metodo para la creación de un documento y la inserción de la liga en la base de datos
-    public function createDocument($module_code, $document_clasification, $document_name, $id_employee = null, $storage_disk, $line_number = 1, $user_id, $employee_new_document = "N")
+    public function createDocument($module_code, $document_clasification, $document_name, $id_employee = null, $storage_disk, $line_number = 1, $user_id, $employee_new_document = "0")
     {
         try {
 
@@ -42,83 +39,38 @@ class DocumentsController extends Controller
             // Verifica que el nombre de la nomenclatura no se duplique
             $document_name = $this->deleteCodificationStructureName($document_name, $line_number, $module_code);
 
-            $files_uploaded = Storage::disk($storage_disk)->files();
+            // Si se realizará la actualización de un archivo, entra directamente a crear el nombre
+            if ($employee_new_document != "0") {
+                
+                // Agrega la secuencia del archivo
+                $sequence_number = substr($employee_new_document, 18, 6);
+                $version_number = substr($employee_new_document, 25, 2);
+                // Busca el numero siguiente de versión
+                $version_number++;
+                if ($version_number <= 9) {
+                    $version_number = 0 . $version_number;
+                }
 
-            // Itera cada archivo guardado en el disco del storage para ver si hay coincidencias en la nomenclatura
-            foreach ($files_uploaded as $file) {
+                // Crea el nombre del archivo
+                $name_document = $line_number . '-' . $module_code . '-' . $document_clasification . '-' .
+                    $REGISTER_DATE . '-' . $sequence_number . '=' .
+                    $version_number . '=' . $document_name;
 
-                // Si la clasificaciòn es la misma, se recupera el numero de secuencia
-                if (substr($file, 0, 10) == ($line_number . '-' . $module_code . '-' . $document_clasification)) {
-                    $sequence_number = substr($file, 18, 6);
-
-                    // Verifica si el archivo es nuevo por medio del nombre
-                    if (substr($file, 28) != $document_name) {
-
-                        // Encuentra el siguiente numero de secuencia
-                        if (substr($file, 18, 6) >= $sequence_number) {
-                            $sequence_number = substr($file, 18, 6);
-                            $sequence_number++;
-                        }
-                    } else {
-
-                        // Verifica si el usuario creará nuevos documentos
-                        if ($employee_new_document == "Y") {
-
-                            // Busca el siguiente numero de secuencia para el archivo
-                            while (true) {
-                                $name_document = $line_number . '-' . $module_code . '-' . $document_clasification . '-' .
-                                    $REGISTER_DATE . '-' . $sequence_number . '=' .
-                                    $version_number . '=' . $document_name;
-
-                                // Si el nombre es nuevo, sale del ciclo
-                                if (Storage::disk($storage_disk)->missing($name_document)) {
-                                    break;
-                                }
-
-                                $sequence_number++;
-                                $sequence_number = $this->resources_controller->formatSecuence($sequence_number, 6);
-                            }
-                        } else {
-
-                            // Busca el ultimo numero de secuencia para el archivo
-                            while (true) {
-                                $sequence_number = $this->resources_controller->formatSecuence($sequence_number, 6);
-                                $name_document = $line_number . '-' . $module_code . '-' . $document_clasification . '-' .
-                                    $REGISTER_DATE . '-' . $sequence_number . '=' .
-                                    $version_number . '=' . $document_name;
-
-                                // Si el nombre es nuevo, sale del ciclo recuperando el ultimo numero de secuencia
-                                if (Storage::disk($storage_disk)->missing($name_document)) {
-                                    $sequence_number--;
-                                    $sequence_number = $this->resources_controller->formatSecuence($sequence_number, 6);
-                                    break;
-                                }
-
-                                $sequence_number++;
-                            }
-                        }
-
-                        // Busca el siguiente numero de versión para el archivo
-                        while (true) {
-                            $name_document = $line_number . '-' . $module_code . '-' . $document_clasification . '-' .
-                                $REGISTER_DATE . '-' . $sequence_number . '=' .
-                                $version_number . '=' . $document_name;
-
-                            // Si el nombre es nuevo, sale del ciclo
-                            if (Storage::disk($storage_disk)->missing($name_document)) {
-                                break;
-                            }
-
-                            $version_number++;
-                            if ($version_number <= 9) {
-                                $version_number = 0 . $version_number;
-                            }
-                        }
-
-                        break;
+            } else {
+
+                //Obtiene los archivos del storage
+                $files_uploaded = Storage::disk($storage_disk)->files();
+
+                // Itera cada archivo guardado en el disco del storage
+                foreach ($files_uploaded as $file) {
+
+                    // Encuentra el siguiente numero de secuencia
+                    if (substr($file, 18, 6) >= $sequence_number) {
+                        $sequence_number = substr($file, 18, 6);
+                        $sequence_number++;
                     }
+
                 }
-            }
 
             // Si la clasificación es nueva, crea su nuevo nombre
             if ($name_document == "") {
@@ -128,6 +80,8 @@ class DocumentsController extends Controller
                     $version_number . '=' . $document_name;
             }
 
+        }
+
             DB::table("S002V01TDOCU_P")
                 ->insert([
                     "DOCU_NUSE" => $sequence_number,
@@ -367,4 +321,4 @@ class DocumentsController extends Controller
     }
 
 
-}
+}

+ 242 - 198
sistema-mantenimiento-back/app/Http/Controllers/EmployeeController.php

@@ -17,10 +17,6 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use stdClass;
 use Throwable;
 
-use App\Http\Controllers\resources\EncryptionController;
-use App\Http\Controllers\resources\ResponseController;
-
-
 class EmployeeController extends Controller
 {
 
@@ -93,7 +89,7 @@ class EmployeeController extends Controller
                 // Introduce los equipos de trabajo a los que pertenece
                 foreach ($workteams as $workteam) {
                     if ($employee->ID_EMPLOYEE == $workteam->ID_EMPLOYEE) {
-                        $employee->WORKTEAMS[] = $workteam->NAME;
+                        $employee->WORKTEAMS = $workteam->NAME;
                     }
                 }
 
@@ -177,6 +173,64 @@ class EmployeeController extends Controller
         }
     }
 
+    public function getLastDocumentsByEmployee($id_employee, $line_number)
+    {
+        try {
+
+            // Busca si existe el empleado
+            $employee_found = DB::table('S002V01TPERS')
+                ->select('PERS_IDPE')
+                ->where('PERS_IDPE', '=', $id_employee)
+                ->where('PERS_NULI', '=', $line_number)
+                ->first();
+
+            // Verifica si el objeto esta vacio
+            if (!isset($employee_found) && empty($employee_found)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, 'ERR_PERSONAL_REG001: No se encontró al empleado', [], 500);
+            }
+
+            // Busca si el empleado tiene documentos
+            $documents_by_employee = DB::table('S002V01TDOCU_P')
+                ->select('DOCU_LIDO as DOCUMENT_LINK', 'DOCU_NUSE as SEQUENCE')
+                ->where('DOCU_IDPE', '=', $id_employee)
+                ->where('DOCU_NULI', '=', $line_number)
+                ->get();
+
+            // Busca los numeros de secuencia
+            $documents_sequence = DB::table('S002V01TDOCU_P')
+                ->select('DOCU_NUSE as SEQUENCE')
+                ->where('DOCU_IDPE', '=', $id_employee)
+                ->where('DOCU_NULI', '=', $line_number)
+                ->groupBy('DOCU_NUSE')
+                ->get();
+
+            $test = [];
+
+            for ($i = 0; $i < sizeof($documents_sequence); $i++) {
+                foreach ($documents_by_employee as $doc) {
+                    if ($doc->SEQUENCE == $documents_sequence[$i]->SEQUENCE) {
+                        if (isset($test[$i]) && !empty($test[$i])) {
+                            if (substr($doc->DOCUMENT_LINK, 25, 2) > substr($test[$i], 25, 2)) {
+                                $test[$i] = $doc->DOCUMENT_LINK;
+                            }
+                        } else {
+                            $test[$i] = $doc->DOCUMENT_LINK;
+                        }
+                    }
+                }
+            }
+
+            return $this->response_controller
+                ->makeResponse(FALSE, "Consulta exitosa", $test);
+
+
+        } catch (Throwable $th) {
+            return $this->response_controller
+                ->makeResponse(TRUE, 'ERR_PERSONAL_REG003: Error inesperado', strtoupper($th->getMessage()), 500);
+        }
+    }
+
     // Metodo para obtener todas las intervenciones relacionadas a un empleado
     public function getInterventionsByEmployee($id_employee, $line_number)
     {
@@ -345,6 +399,95 @@ class EmployeeController extends Controller
         }
     }
 
+    // Metodo para la activación logica de un empleado
+    public function updateToActiveStatus(Request $request, $id_employee)
+    {
+        try {
+            $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
+            $validator = Validator::make($request->all(), [
+                "SAVED_BY_USER" => ['required', 'digits:10']
+            ]);
+
+            if ($validator->fails()) {
+                return $this->response_controller->makeResponse(
+                    TRUE,
+                    'ERR_PERSONAL_REG001: Uno o más errores encontrados',
+                    $this->response_controller->makeErrors($validator->errors()->messages()),
+                    400
+                );
+            }
+
+            // Busca si el empleado existe
+            $search_employee = DB::table("S002V01TPERS")
+                ->select("PERS_IDPE")
+                ->where("PERS_IDPE", "=", $id_employee)
+                ->where('PERS_NULI', '=', $request->LINE_NUMBER)
+                ->first();
+
+            // Verifica si el objeto esta vacio
+            if (!isset($search_employee) && empty($search_employee)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, "ERR_PERSONAL_REG002: No se encontró al empleado", $search_employee, 500);
+            }
+
+            $user_register = DB::table('S002V01TUSUA')
+                ->select('USUA_IDUS as ID_USER')
+                ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
+                ->where('USUA_NULI', '=', $request->LINE_NUMBER)
+                ->first();
+
+            // Verifica si el objeto esta vacio
+            if (!isset($user_register) && empty($user_register)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, "ERR_USUARIO_REG003: Tu usuario no es válido para activar empleados", [], 500);
+            }
+
+            DB::beginTransaction(); # Para impedir que las actualizaciones queden incompletas
+
+            $UPDATE_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
+
+            $activate_employee = DB::table('S002V01TPERS')
+                ->where('PERS_IDPE', $id_employee)
+                ->where('PERS_NULI', '=', $request->LINE_NUMBER)
+                ->update([
+                    "PERS_ESTA" => "Activo",
+                    "PERS_USMO" => trim($request->SAVED_BY_USER),
+                    "PERS_FEMO" => $UPDATE_DATE,
+                    "PERS_FEAR" => DB::raw('CURRENT_TIMESTAMP')
+                ]);
+
+            // Verifica que la actualización fuera exitosa
+            if ($activate_employee < 1) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, 'ERR_PERSONAL_REG004: Algo salió mal, error activando al empleado', [], 500);
+            }
+
+            $activate_employee = DB::table('S002V01TPEEM')
+                ->where('PEEM_IDPE', $id_employee)
+                ->where('PEEM_NULI', '=', $request->LINE_NUMBER)
+                ->update([
+                    "PEEM_ESTA" => "Activo",
+                    "PEEM_USMO" => trim($request->SAVED_BY_USER),
+                    "PEEM_FEMO" => $UPDATE_DATE,
+                    "PEEM_FEAR" => DB::raw('CURRENT_TIMESTAMP')
+                ]);
+
+            // Verifica que la actualización fuera exitosa
+            if ($activate_employee < 1) {
+                DB::rollBack(); # Si no se logra eliminar al empleado en el equipo, se revierten los cambios previos
+                return $this->response_controller
+                    ->makeResponse(TRUE, 'ERR_PERSONAL_REG005: Algo salió mal, error activando al empleado del equipo', [], 500);
+            }
+
+            DB::commit(); # Para guardar los cambios en la base de datos
+            return $this->response_controller->makeResponse(FALSE, "Activación exitosa");
+
+        } catch (Throwable $th) {
+            return $this->response_controller->
+                makeResponse(TRUE, 'ERR_PERSONAL_REG006: Error inesperado', strtoupper($th->getMessage()), 500);
+        }
+    }
+
     // Metodo para obtener a los usuarios que no son empleados
     public function getAvaibleUsers($line_number)
     {
@@ -362,13 +505,31 @@ class EmployeeController extends Controller
                 ->where('USUA_ESTA', '=', "Activo")
                 ->get();
 
+            $employees = DB::table('S002V01TPERS')
+                ->select("PERS_IDUS as ID_USER")
+                ->where('PERS_NULI', '=', $line_number)
+                ->get();
+
+            $avaibleUsers = [];
+
+            foreach ($users as $user) {
+                foreach ($employees as $employee) {
+                    if ($user->ID_USER == $employee->ID_USER) {
+                        $user->ID_USER = "XXXX";
+                    }
+                }
+                if ($user->ID_USER != "XXXX") {
+                    $avaibleUsers[] = $user;
+                }
+            }
+
             // Verifica si el objeto contiene algo
             if (!isset($users) && empty($users)) {
                 return $this->response_controller
                     ->makeResponse(TRUE, 'ERR_USUARIO_REG001: No se encontraron datos', [], 500);
             }
 
-            return $this->response_controller->makeResponse(FALSE, 'Usuarios obtenidos', $users, 200);
+            return $this->response_controller->makeResponse(FALSE, 'Usuarios obtenidos', $avaibleUsers, 200);
 
         } catch (Throwable $th) {
             return $this->response_controller
@@ -729,7 +890,7 @@ class EmployeeController extends Controller
                 ->where('S002V01TPERS.PERS_NULI', '=', $line_number)
                 ->where('s002v01TPEEM.PEEM_NULI', '=', $line_number)
                 ->where('s002v01TEQMA.EQMA_NULI', '=', $line_number)
-                ->where('S002V01TUSUA.USUA_NULI', '=', $line_number)
+                ->where('s002v01TUSUA.USUA_NULI', '=', $line_number)
                 ->join('S002V01TPEEM', 'S002V01TPERS.PERS_IDPE', '=', 'S002V01TPEEM.PEEM_IDPE')
                 ->join('S002V01TEQMA', 'S002V01TPEEM.PEEM_IDEM', '=', 'S002V01TEQMA.EQMA_IDEQ')
                 ->join('S002V01TUSUA', 'S002V01TPERS.PERS_IDUS', '=', 'S002V01TUSUA.USUA_IDUS')
@@ -976,43 +1137,22 @@ class EmployeeController extends Controller
                 $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
 
                 $final_part_name_document = $this->documents_controller->deleteCodificationStructureName($final_part_name_document, "01", "GPRS");
-                $old_documents_name = $this->documents_controller->getDocumentsWithSameName($final_part_name_document, "pdf");
-                if ($old_documents_name != null) {
-
-                    // Si no hay ningun cambio en el documento, se descarga la ultima versión
-                    $old_documents_name = $this->documents_controller->sameDocumentsPdfOnRequest($doc, $old_documents_name);
-                    if ($old_documents_name == null) {
-
-                        // Crea el nombre del documento y lo almacena en la base de datos
-                        $name_document = $this->documents_controller->createDocument(
-                            "GPRS",
-                            "IN",
-                            $final_part_name_document,
-                            $id_employee,
-                            'pdf',
-                            $request->LINE_NUMBER,
-                            $request->SAVED_BY_USER,
-                            $request->UPLOAD_NEW_DOCUMENTS
-                        );
-
-                        // El documento es guardado en el storage
-                        $doc->storeAs('public/pdf_documents', $name_document);
-                    }
-                } else {
-                    $name_document = $this->documents_controller->createDocument(
-                        "GPRS",
-                        "IN",
-                        $final_part_name_document,
-                        $id_employee,
-                        'pdf',
-                        $request->LINE_NUMBER,
-                        $request->SAVED_BY_USER
-                    );
-
-                    // El documento es guardado en el storage
-                    $doc->storeAs('public/pdf_documents', $name_document);
-                }
-                $request->UPLOAD_NEW_DOCUMENTS = "N";
+
+                $name_document = $this->documents_controller->createDocument(
+                    "GPRS",
+                    "IN",
+                    $final_part_name_document,
+                    $id_employee,
+                    'pdf',
+                    $request->LINE_NUMBER,
+                    $request->SAVED_BY_USER,
+                    $request->DOCUMENTS_AUTHO_UPDATE
+                );
+
+                // El documento es guardado en el storage
+                $doc->storeAs('public/pdf_documents', $name_document);
+
+
             }
 
             // Verifica si el objeto esta vacio
@@ -1035,48 +1175,22 @@ class EmployeeController extends Controller
                 $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
 
                 $final_part_name_document = $this->documents_controller->deleteCodificationStructureName($final_part_name_document, "01", "GPRS");
-                $old_documents_name = $this->documents_controller->getDocumentsWithSameName($final_part_name_document, "pdf");
-                if ($old_documents_name != null) {
-
-                    // Si no hay ningun cambio en el documento, se descarga la ultima versión
-                    $old_documents_name = $this->documents_controller->sameDocumentsPdfOnRequest($doc, $old_documents_name);
-                    if ($old_documents_name == null) {
-
-                        // Crea el nombre del documento y lo almacena en la base de datos
-                        $name_document = $this->documents_controller->createDocument(
-                            "GPRS",
-                            "IN",
-                            $final_part_name_document,
-                            $id_employee,
-                            'pdf',
-                            $request->LINE_NUMBER,
-                            $request->SAVED_BY_USER,
-                            $request->UPLOAD_NEW_DOCUMENTS
-                        );
-
-                        // El documento es guardado en el storage
-                        $doc->storeAs('public/pdf_documents', $name_document);
-                    }
-                } else {
-                    $name_document = $this->documents_controller->createDocument(
-                        "GPRS",
-                        "IN",
-                        $final_part_name_document,
-                        $id_employee,
-                        'pdf',
-                        $request->LINE_NUMBER,
-                        $request->SAVED_BY_USER
-                    );
-
-                    // El documento es guardado en el storage
-                    $doc->storeAs('public/pdf_documents', $name_document);
-                }
 
-            }
+                $name_document = $this->documents_controller->createDocument(
+                    "GPRS",
+                    "IN",
+                    $final_part_name_document,
+                    $id_employee,
+                    'pdf',
+                    $request->LINE_NUMBER,
+                    $request->SAVED_BY_USER,
+                    $request->DOCUMENTS_AUTHO2_UPDATE
+                );
+
+                // El documento es guardado en el storage
+                $doc->storeAs('public/pdf_documents', $name_document);
+
 
-            // Para llevar el control de la secuencia en los archivos, si el usuario desea no actualizar los nuevos, sino crear otros.s
-            if ($save_option) {
-                $request->UPLOAD_NEW_DOCUMENTS = "Y";
             }
 
             // Verifica si el objeto esta vacio
@@ -1099,43 +1213,21 @@ class EmployeeController extends Controller
                 $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
 
                 $final_part_name_document = $this->documents_controller->deleteCodificationStructureName($final_part_name_document, "01", "GPRS");
-                $old_documents_name = $this->documents_controller->getDocumentsWithSameName($final_part_name_document, "pdf");
-                if ($old_documents_name != null) {
-                    // Si no hay ningun cambio en el documento, se descarga la ultima versión
-                    $old_documents_name = $this->documents_controller->sameDocumentsPdfOnRequest($doc, $old_documents_name);
-                    if ($old_documents_name == null) {
-
-                        // Crea el nombre del documento y lo almacena en la base de datos
-                        $name_document = $this->documents_controller->createDocument(
-                            "GPRS",
-                            "CE",
-                            $final_part_name_document,
-                            $id_employee,
-                            'pdf',
-                            $request->LINE_NUMBER,
-                            $request->SAVED_BY_USER,
-                            $request->UPLOAD_NEW_DOCUMENTS
-                        );
-
-                        // El documento es guardado en el storage
-                        $doc->storeAs('public/pdf_documents', $name_document);
-                    }
-                } else {
-                    $name_document = $this->documents_controller->createDocument(
-                        "GPRS",
-                        "CE",
-                        $final_part_name_document,
-                        $id_employee,
-                        'pdf',
-                        $request->LINE_NUMBER,
-                        $request->SAVED_BY_USER
-                    );
-
-                    // El documento es guardado en el storage
-                    $doc->storeAs('public/pdf_documents', $name_document);
-                }
 
-                $request->UPLOAD_NEW_DOCUMENTS = "N";
+                $name_document = $this->documents_controller->createDocument(
+                    "GPRS",
+                    "CE",
+                    $final_part_name_document,
+                    $id_employee,
+                    'pdf',
+                    $request->LINE_NUMBER,
+                    $request->SAVED_BY_USER,
+                    $request->DOCUMENTS_CERT_UPDATE
+                );
+
+                // El documento es guardado en el storage
+                $doc->storeAs('public/pdf_documents', $name_document);
+
             }
 
             // Verifica si el objeto esta vacio
@@ -1158,48 +1250,24 @@ class EmployeeController extends Controller
                 $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
 
                 $final_part_name_document = $this->documents_controller->deleteCodificationStructureName($final_part_name_document, "01", "GPRS");
-                $old_documents_name = $this->documents_controller->getDocumentsWithSameName($final_part_name_document, "pdf");
-                if ($old_documents_name != null) {
-                    // Si no hay ningun cambio en el documento, se descarga la ultima versión
-                    $old_documents_name = $this->documents_controller->sameDocumentsPdfOnRequest($doc, $old_documents_name);
-                    if ($old_documents_name == null) {
-
-                        // Crea el nombre del documento y lo almacena en la base de datos
-                        $name_document = $this->documents_controller->createDocument(
-                            "GPRS",
-                            "CE",
-                            $final_part_name_document,
-                            $id_employee,
-                            'pdf',
-                            $request->LINE_NUMBER,
-                            $request->SAVED_BY_USER,
-                            $request->UPLOAD_NEW_DOCUMENTS
-                        );
-
-                        // El documento es guardado en el storage
-                        $doc->storeAs('public/pdf_documents', $name_document);
-                    }
-                } else {
-                    $name_document = $this->documents_controller->createDocument(
-                        "GPRS",
-                        "CE",
-                        $final_part_name_document,
-                        $id_employee,
-                        'pdf',
-                        $request->LINE_NUMBER,
-                        $request->SAVED_BY_USER
-                    );
-
-                    // El documento es guardado en el storage
-                    $doc->storeAs('public/pdf_documents', $name_document);
-                }
+
+                $name_document = $this->documents_controller->createDocument(
+                    "GPRS",
+                    "CE",
+                    $final_part_name_document,
+                    $id_employee,
+                    'pdf',
+                    $request->LINE_NUMBER,
+                    $request->SAVED_BY_USER,
+                    $request->DOCUMENTS_CERT2_UPDATE
+                );
+
+                // El documento es guardado en el storage
+                $doc->storeAs('public/pdf_documents', $name_document);
 
 
 
-            }
 
-            if ($save_option) {
-                $request->UPLOAD_NEW_DOCUMENTS = "Y";
             }
 
             // Verifica si el objeto esta vacio
@@ -1222,44 +1290,20 @@ class EmployeeController extends Controller
                 $final_part_name_document = str_replace(' ', '_', $fileNameOnly) . '.' . $extension;
 
                 $final_part_name_document = $this->documents_controller->deleteCodificationStructureName($final_part_name_document, "01", "GPRS");
-                $old_documents_name = $this->documents_controller->getDocumentsWithSameName($final_part_name_document, "pdf");
-                if ($old_documents_name != null) {
-
-                    // Si no hay ningun cambio en el documento, se descarga la ultima versión
-                    $old_documents_name = $this->documents_controller->sameDocumentsPdfOnRequest($doc, $old_documents_name);
-                    if ($old_documents_name == null) {
-
-                        // Crea el nombre del documento y lo almacena en la base de datos
-                        $name_document = $this->documents_controller->createDocument(
-                            "GPRS",
-                            "CO",
-                            $final_part_name_document,
-                            $id_employee,
-                            'pdf',
-                            $request->LINE_NUMBER,
-                            $request->SAVED_BY_USER,
-                            $request->UPLOAD_NEW_DOCUMENTS
-                        );
-
-                        // El documento es guardado en el storage
-                        $doc->storeAs('public/pdf_documents', $name_document);
-                    }
-                } else {
-                    $name_document = $this->documents_controller->createDocument(
-                        "GPRS",
-                        "CO",
-                        $final_part_name_document,
-                        $id_employee,
-                        'pdf',
-                        $request->LINE_NUMBER,
-                        $request->SAVED_BY_USER
-                    );
-
-                    // El documento es guardado en el storage
-                    $doc->storeAs('public/pdf_documents', $name_document);
-                }
 
+                $name_document = $this->documents_controller->createDocument(
+                    "GPRS",
+                    "CO",
+                    $final_part_name_document,
+                    $id_employee,
+                    'pdf',
+                    $request->LINE_NUMBER,
+                    $request->SAVED_BY_USER,
+                    $request->DOCUMENT_OFFICE_UPDATE
+                );
 
+                // El documento es guardado en el storage
+                $doc->storeAs('public/pdf_documents', $name_document);
 
             }
 
@@ -1371,10 +1415,10 @@ class EmployeeController extends Controller
             $employee_id = $request->EMPLOYEE['ID_EMPLOYEE'];
 
             $final_part_name_document = "Details_Of_Employee_" . $employee_id . ".xlsx";
+
             // Crea el documento con los datos del request
             $document = $this->createDocument($request);
 
-
             // Busca la ultima versión del documento que se haya insertado
             $old_document_name = $this->documents_controller->getDocumentsWithSameName($final_part_name_document, 'excel');
 
@@ -1395,7 +1439,7 @@ class EmployeeController extends Controller
             $content = tmpfile();
             $writer->save($content);
 
-            // Inserta la nueva version del documento en la base de datos y en el storage
+            // Inserta la nueva version del documento en la base de datos y en el storage            
             $name_document = $this->documents_controller->createDocument("GPRS", "IN", $final_part_name_document, $employee_id, "excel", $request->EMPLOYEE['LINE_NUMBER'], $request->SAVED_BY_USER);
 
             Storage::disk('excel')->put(
@@ -1408,7 +1452,7 @@ class EmployeeController extends Controller
 
         } catch (Throwable $th) {
             return $this->response_controller
-                ->makeResponse(TRUE, "ERR_EXCEL_REG001: Error inesperado $th", strtoupper($th), 500);
+                ->makeResponse(TRUE, 'ERR_EXCEL_REG001: Error inesperado', strtoupper($th), 500);
         }
     }
 
@@ -1624,4 +1668,4 @@ class EmployeeController extends Controller
         }
     }
 
-}
+}

+ 96 - 3
sistema-mantenimiento-back/app/Http/Controllers/SubcontractController.php

@@ -17,9 +17,6 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use stdClass;
 use Throwable;
 
-use App\Http\Controllers\resources\EncryptionController;
-use App\Http\Controllers\resources\ResponseController;
-
 class SubcontractController extends Controller
 {
     private $response_controller;
@@ -224,6 +221,78 @@ class SubcontractController extends Controller
         }
     }
 
+    // Metodo para la activación lógica de un subcontratista
+    public function updateToActiveStatus(Request $request, $id_subcontratist)
+    {
+        try {
+
+            $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
+            $validator = Validator::make($request->all(), [
+                "SAVED_BY_USER" => ['required', 'digits:10']
+            ]);
+
+            if ($validator->fails()) {
+                return $this->response_controller->makeResponse(
+                    TRUE,
+                    'ERR_SUBCONTRATISTA_REG001: Uno o más errores encontrados',
+                    $this->response_controller->makeErrors($validator->errors()->messages()),
+                    400
+                );
+            }
+
+            $user_register = DB::table('S002V01TUSUA')
+                ->select('USUA_IDUS as ID_USER')
+                ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
+                ->where('USUA_NULI', '=', $request->LINE_NUMBER)
+                ->first();
+
+            // Verifica si el objeto está vacio
+            if (!isset($user_register) && empty($user_register)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, "ERR_USUARIO_REG002: Tu usuario no es válido para activar subcontratistas", [], 500);
+            }
+
+            // Busca si el subcontratista existe
+            $search_subcontratist = DB::table("S002V01TPESU")
+                ->select("PESU_IDPS")
+                ->where("PESU_IDPS", "=", $id_subcontratist)
+                ->where('PESU_NULI', '=', $request->LINE_NUMBER)
+                ->first();
+
+            // Verifica si el objeto está vacio
+            if (!isset($search_subcontratist) && empty($search_subcontratist)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, "ERR_SUBCONTRATISTA_REG003: No se encontró al subcontratista", $search_subcontratist, 500);
+            }
+
+                $UPDATE_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
+
+                $delete_subcontratist = DB::table('S002V01TPESU')
+                    ->where('PESU_IDPS', $id_subcontratist)
+                    ->where('PESU_NULI', '=', $request->LINE_NUMBER)
+                    ->update([
+                        "PESU_ESTA" => "Activo",
+                        "PESU_USMO" => trim($request->SAVED_BY_USER),
+                        "PESU_FEMO" => $UPDATE_DATE,
+                        "PESU_FEAR" => DB::raw('CURRENT_TIMESTAMP')
+                    ]);
+
+                // Verifica si el subcontratista se inhabilitó correctamente
+                if ($delete_subcontratist) {
+                    $response = $this->response_controller->makeResponse(FALSE, "Activación exitosa");
+                } else {
+                    $response = $this->response_controller
+                        ->makeResponse(TRUE, 'ERR_SUBCONTRATISTA_REG005: Algo salió mal, error activando al subcontratista', [], 500);
+                }
+
+            return $response;
+
+        } catch (Throwable $th) {
+            return $this->response_controller
+                ->makeResponse(TRUE, 'ERR_SUBCONTRATISTA_REG006: Error inesperado', strtoupper($th->getMessage()), 500);
+        }
+    }
+
     // Metodo para guardar un nuevo subcontratista
     public function storeSubcontratist(Request $request)
     {
@@ -847,6 +916,30 @@ class SubcontractController extends Controller
         }
     }
 
+    public function getCountries($line_number)
+    {
+        try {
+
+            // Busca si el subcontratista existe
+            $countries = DB::table("S002V01TPAIS")
+                ->select("PAIS_IDPA as COUNTRY_ID" ,"PAIS_NOMB as NAME", "PAIS_LADA as LADA")
+                ->where('PAIS_NULI', '=', $line_number)
+                ->get();
+
+            // Verifica si el objeto esta vacio
+            if (!isset($countries[0]) && empty($countries[0])) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, "ERR_SUBCONTRATISTA_REG001: No se encontró al subcontratista", $countries, 500);
+            }
+
+            return $this->response_controller->makeResponse(FALSE, 'Consulta exitosa', $countries);
+
+        } catch (Throwable $th) {
+            return $this->response_controller
+                ->makeResponse(TRUE, 'ERR_SUBCONTRATISTA_REG005: Error inesperado', strtoupper($th->getMessage()), 500);
+        }
+    }
+
     // Metodo para la descarga en archivo excel del historial de contratos por subcontratista
     public function downoloadSubcontractInfoOnExcel(Request $request)
     {

+ 67 - 4
sistema-mantenimiento-back/app/Http/Controllers/WorkTeamController.php

@@ -13,9 +13,6 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Validator;
 use Throwable;
 
-use App\Http\Controllers\resources\EncryptionController;
-use App\Http\Controllers\resources\ResponseController;
-
 class WorkTeamController extends Controller
 {
 
@@ -255,6 +252,72 @@ class WorkTeamController extends Controller
                 ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG006: Error inesperado', strtoupper($th->getMessage()), 500);
         }
     }
+    // Metodo para la activación lógica de un equipo de trabajo
+    public function updateToActiveStatus(Request $request, $id_workteam)
+    {
+        try {
+
+            $request['SAVED_BY_USER'] = $this->encrypt_controller->decrypt($request->SAVED_BY_USER);
+            $validator = Validator::make($request->all(), [
+                "SAVED_BY_USER" => ['required', 'digits:10']
+            ]);
+
+            if ($validator->fails()) {
+                return $this->response_controller->makeResponse(
+                    TRUE,
+                    'ERR_EQUIPO_TRABAJO_REG001: Uno o más errores encontrados',
+                    $this->response_controller->makeErrors($validator->errors()->messages()),
+                    400
+                );
+            }
+            $workteam = DB::table('S002V01TEQMA')
+                ->select("EQMA_IDEQ")
+                ->where("EQMA_IDEQ", '=', $id_workteam)
+                ->first();
+
+            // Verifica si el objeto esta vacio
+            if (!isset($workteam) && empty($workteam)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG002: No se encontró al equipo de trabajo', [], 500);
+            }
+
+            $user_register = DB::table('S002V01TUSUA')
+                ->select('USUA_IDUS as ID_USER')
+                ->where('USUA_IDUS', '=', $request->SAVED_BY_USER)
+                ->where('USUA_NULI', '=', $request->LINE_NUMBER)
+                ->first();
+
+            // Verifica si el objeto esta vacio
+            if (!isset($user_register) && empty($user_register)) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, "ERR_EQUIPO_TRABAJO_REG003: Tu usuario no es válido para activar equipos de trabajo", [], 500);
+            }
+
+            $UPDATE_DATE = Carbon::now()->timezone('America/Mexico_City')->toDateTimeString();
+
+            $activate_workteam = DB::table('S002V01TEQMA')
+                ->where("EQMA_IDEQ", '=', $id_workteam)
+                ->where('EQMA_NULI', '=', $request->LINE_NUMBER)
+                ->update([
+                    "EQMA_ESTA" => "Activo",
+                    "EQMA_USMO" => trim($request->SAVED_BY_USER),
+                    "EQMA_FEMO" => $UPDATE_DATE,
+                    "EQMA_FEAR" => DB::raw('CURRENT_TIMESTAMP')
+                ]);
+
+            if (!$activate_workteam) {
+                return $this->response_controller
+                    ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG004: Algo salió mal, error activando al equipo de trabajo', [], 500);
+            }
+
+            return $this->response_controller
+                ->makeResponse(FALSE, 'Activación exitosa');
+
+        } catch (Throwable $th) {
+            return $this->response_controller
+                ->makeResponse(TRUE, 'ERR_EQUIPO_TRABAJO_REG005: Error inesperado', strtoupper($th->getMessage()), 500);
+        }
+    }
 
     // Metodo para guardar un equipo de trabajo
     public function storeWorkteam(Request $request)
@@ -412,4 +475,4 @@ class WorkTeamController extends Controller
         }
     }
 
-}
+}

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

@@ -125,6 +125,7 @@ Route::middleware(['jwt.auth'])->group(function(){
 Route::controller(SubcontractController::class)->prefix('/subcontract')->group(function () {
     Route::get('/consult/{line_number}',                                'getConsultOfSubcontratists');
     Route::put('/inactive-subcontratist/{id_subcontratist}',            'updateToInactiveStatus');
+    Route::put('/active-subcontratist/{id_subcontratist}',              'updateToActiveStatus');
     Route::get('/subcontratists/{line_number}',                         'getAllSubcontratists');
     Route::get('/active-subcontratists/{line_number}',                  'getActiveSubcontratists');
     Route::post('/',                                                    'storeSubcontratist');
@@ -132,6 +133,7 @@ Route::controller(SubcontractController::class)->prefix('/subcontract')->group(f
     Route::put('/{id_subcontratist}',                                   'updateSubcontratist');
     Route::get('/contracts/subcontratists/{line_number}',               'getContractsOfEverySubcontratist');
     Route::get('/contracts/history/{id_subcontratist}/{line_number}',   'getContractsBySubcontratist');
+    Route::get('/countries/{line_number}',                              'getCountries');
     Route::post('/downoload-info-excel',                                'downoloadSubcontractInfoOnExcel');
     Route::post('/downoload-info-pdf',                                  'downoloadSubcontractInfoOnPdf');
 });
@@ -139,9 +141,11 @@ Route::controller(SubcontractController::class)->prefix('/subcontract')->group(f
 Route::controller(EmployeeController::class)->prefix('/employee')->group(function () {
     Route::get('/consult/{line_number}',                                'getConsultOfEmployees');
     Route::get('/user-avaible/{line_number}',                           'getAvaibleUsers');
+    Route::get('/last-documents/{id_employee}/{line_number}',           'getLastDocumentsByEmployee');
     Route::get('/documents/{id_employee}/{line_number}',                'getDocumentsByEmployee');
     Route::get('/orders/{id_employee}/{line_number}',                   'getInterventionsByEmployee');
     Route::put('/inactive-employee/{id_employee}',                      'updateToInactiveStatus');
+    Route::put('/active-employee/{id_employee}',                        'updateToActiveStatus');
     Route::post('/',                                                    'storeEmployee');
     Route::get('/{id_employee}/{line_number}',                          'getEmployeeById');
     Route::get('/{line_number}',                                        'getAllEmployees');
@@ -167,6 +171,7 @@ Route::controller(WorkTeamController::class)->prefix('/workteam')->group(functio
     Route::get('/{id_workteam}/{line_number}',                            'getWorkteamById');
     Route::get('/details/{id_workteam}/{line_number}',                    'getDetailsOfWorkteamById');
     Route::put('/inactive-workteam/{id_workteam}',                        'updateToInactiveStatus');
+    Route::put('/active-workteam/{id_workteam}',                          'updateToActiveStatus');
     Route::post('/',                                                      'storeWorkteam');
     Route::put('/{id_workteam}',                                          'updateWorkteam');
 });