Bläddra i källkod

Actualización controlador gestión documental electrónica

Jose Brito 2 år sedan
förälder
incheckning
488508910f
1 ändrade filer med 1321 tillägg och 1325 borttagningar
  1. 1321 1325
      sistema-mantenimiento-back/app/Http/Controllers/DocumentManagementController.php

+ 1321 - 1325
sistema-mantenimiento-back/app/Http/Controllers/DocumentManagementController.php

@@ -10,1329 +10,1325 @@ use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Storage;
 
 class DocumentManagementController extends Controller{
-    private $responseController;
-    private $encryptionController;
-    private $functionsController;
-
-    public function __construct(){
-        $this->responseController = new ResponseController();
-        $this->encryptionController = new EncryptionController();
-        $this->functionsController = new FunctionsController();
-    }
-
-    public function downloadFile($token, $idUser, $line){
-        DB::enableQueryLog();
-
-        $tokenInfo = DB::table('S002V01TTODE')->where([
-            ['TODE_NULI', '=', $line],
-            ['TODE_TOKE', '=', $token]
-        ])->first();
-
-        if(is_null($tokenInfo)){
-            return $this->responseController->makeResponse(true, 'El token de descarga no existe.', [], 404);
-        }else if($tokenInfo->TODE_ESTA != 'Activo'){
-            return $this->responseController->makeResponse(true, 'El token de descarga ya fue utilizado.', [], 401);
-        }
-
-        $token = $this->encryptionController->shortDec($token);
-        if(!$token){
-            return $this->responseController->makeResponse(true, 'El token de descarga no está encriptado correctamente.', [], 400);
-        }
-
-        $tokenArr = explode("|", $token);
-        if(count($tokenArr) != 3){
-            return $this->responseController->makeResponse(true, 'Estructura de token inválida.', [], 401);
-        }else if(intval($tokenArr[1]) != $tokenInfo->TODE_LLAL){
-            return $this->responseController->makeResponse(true, 'Token inválido.', [], 401);
-        }else if($tokenArr[2] != 'syp'){
-            return $this->responseController->makeResponse(true, 'Token inválido.', [], 401);
-        }
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_IDUS', '=', $idUser],
-            ['USUA_NULI', '=', $line]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $id = $tokenArr[0];
-        $codiArr = explode("=", $id);
-        $prefArr = explode("-", $codiArr[0]);
-        $suffArr = explode(".", $codiArr[2]);
-
-        $nuli = intval($prefArr[0]);
-        $como = $prefArr[1];
-        $cldo = $prefArr[2];
-        $fecr = $prefArr[3];
-        $nuse = intval($prefArr[4]);
-        $nuve = $codiArr[1];
-        $noar = $suffArr[0];
-        $exte = $suffArr[1];
-
-        $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
-        DB::table('S002V01TTODE')->where([
-            ['TODE_IDTO', '=', $tokenInfo->TODE_IDTO],
-            ['TODE_NULI', '=', $line]
-        ])->update([
-            'TODE_ESTA' => 'Usado',
-            'TODE_USDE' => $idUser,
-            'TODE_FEDE' => $nowStr
-        ]);
-        
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $nuli],
-            ['AFAL_COMO', '=', $como],
-            ['AFAL_CLDO', '=', $cldo],
-            ['AFAL_FECR', '=', $fecr],
-            ['AFAL_NUSE', '=', $nuse],
-            ['AFAL_NUVE', '=', $nuve],
-            ['AFAL_NOAR', '=', $noar],
-            ['AFAL_EXTE', '=', $exte],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no existe.', [], 404);
-        }
-
-        return response()->download($file->AFAL_UBIC, $id);
-    }
-
-    public function getDownloadToken($idFile, $idUser, $line){
-        DB::enableQueryLog();
-
-        $idFile = $this->encryptionController->shortDec($idFile);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, 'El ID del archivo requerido no está encriptado correctamente.', [], 400);
-        }
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_IDUS', '=', $idUser],
-            ['USUA_NULI', '=', $line]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $codiArr = explode("=", $idFile);
-        $prefArr = explode("-", $codiArr[0]);
-        $suffArr = explode(".", $codiArr[2]);
-
-        $nuli = intval($prefArr[0]);
-        $como = $prefArr[1];
-        $cldo = $prefArr[2];
-        $fecr = $prefArr[3];
-        $nuse = intval($prefArr[4]);
-        $nuve = $codiArr[1];
-        $noar = $suffArr[0];
-        $exte = $suffArr[1];
-        
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $nuli],
-            ['AFAL_COMO', '=', $como],
-            ['AFAL_CLDO', '=', $cldo],
-            ['AFAL_FECR', '=', $fecr],
-            ['AFAL_NUSE', '=', $nuse],
-            ['AFAL_NUVE', '=', $nuve],
-            ['AFAL_NOAR', '=', $noar],
-            ['AFAL_EXTE', '=', $exte],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no existe.', [], 404);
-        }
-
-        $rand = rand(0, 99999);
-        $tokenArr = [$idFile, $rand, "syp"];
-        $tokenStr = join('|', $tokenArr);
-
-        $token = $this->encryptionController->shortEnc($tokenStr);
-        $token = str_replace("+", "=P=", $token);
-        $token = str_replace("/", "=S=", $token);
-        $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
-
-        DB::table('S002V01TTODE')->insert([
-            'TODE_NULI' => $line,
-            'TODE_TOKE' => $token,
-            'TODE_CODO' => $idFile,
-            'TODE_LLAL' => $rand,
-            'TODE_USRE' => $idUser,
-            'TODE_FERE' => $nowStr
-        ]);
-
-        return $this->responseController->makeResponse(false, 'EXITO', ['TOKEN' => $token]);
-    }
-
-    public function getFileInfo($id, $idUser, $line){
-        DB::enableQueryLog();
-
-        $id = $this->encryptionController->shortDec($id);
-        if(!$id){
-            return $this->responseController->makeResponse(true, 'El ID del archivo requerido no está encriptado correctamente.', [], 400);
-        }
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_IDUS', '=', $idUser],
-            ['USUA_NULI', '=', $line]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $idArr = explode("=", $id);
-        $codiArr = explode("-", $idArr[0]);
-
-        $nuli = $line;
-        $como = $codiArr[1];
-        $cldo = $codiArr[2];
-        $fecr = $codiArr[3];
-        $nuse = intval($codiArr[4]);
-        $nuve = intval($idArr[1]);
-
-        $fileInfo = DB::table('S002V01TAFAL')->select([
-            'AFAL_NOAR AS NOMBREARCHIVO',
-            'AFAL_EXTE AS EXTENSION',
-            'AFAL_TAMA AS PESO',
-            'AFAL_USAC AS ACCESO',
-            'AFAL_ESTA AS ESTADO'
-        ])->where([
-            ['AFAL_NULI', '=', $nuli],
-            ['AFAL_COMO', '=', $como],
-            ['AFAL_CLDO', '=', $cldo],
-            ['AFAL_FECR', '=', $fecr],
-            ['AFAL_NUSE', '=', $nuse],
-            ['AFAL_NUVE', '=', $nuve],
-        ])->first();
-
-        if(is_null($fileInfo)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }else if($fileInfo->ESTADO != 'Activo'){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está disponible.', [], 404);
-        }
-
-        return $this->responseController->makeResponse(false, 'EXITO', $fileInfo);
-    }
-
-    public function getFiles($mod, $cla, $sda, $eda, $dna, $ext, $mode, $idUser, $line){
-        DB::enableQueryLog();
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $line],
-            ['USUA_IDUS', '=', $idUser]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $availableModes = ['my-files', 'shared', 'deleted'];
-        if(!in_array($mode, $availableModes)){
-            return $this->responseController->makeResponse(true, 'El modo seleccionado es inválido.', [], 401);
-        }
-
-        $whereParameters = [
-            ['AFAL_NULI', '=', $line]
-        ];
-
-        if($mod != '-'){
-            $whereParameters[] = ['AFAL_COMO', '=', $mod];
-        }
-        
-        if($cla != '-'){
-            $whereParameters[] = ['AFAL_CLDO', '=', $cla];
-        }
-
-        $files = DB::table('S002V01TAFAL')->where($whereParameters)->get()->all();
-        $filesDateFiltered = [];
-        foreach($files as $file){
-            $dateArr = str_split($file->AFAL_FECR, 2);
-            $dateStr = "20$dateArr[0]-$dateArr[1]-$dateArr[2]";
-            $dateObj = new Carbon($dateStr, 'America/Guatemala');
-
-            if($sda != '-' && $eda == '-'){
-                $dateIniArr = str_split($sda, 2);
-                $dateIniStr = "20$dateIniArr[0]-$dateIniArr[1]-$dateIniArr[2]";
-                $dateIniObj = new Carbon($dateIniStr, 'America/Guatemala');
-
-                if($dateIniObj->lte($dateObj)){
-                    $filesDateFiltered[] = $file;
-                }
-            }else if($sda == '-' && $eda != '-'){
-                $dateFinArr = str_split($eda, 2);
-                $dateFinStr = "20$dateFinArr[0]-$dateFinArr[1]-$dateFinArr[2]";
-                $dateFinObj = new Carbon($dateFinStr, 'America/Guatemala');
-
-                if($dateFinObj->gte($dateObj)){
-                    $filesDateFiltered[] = $file;
-                }
-            }else if($sda != '-' && $eda != '-'){
-                $dateIniArr = str_split($sda, 2);
-                $dateIniStr = "20$dateIniArr[0]-$dateIniArr[1]-$dateIniArr[2]";
-                $dateIniObj = new Carbon($dateIniStr, 'America/Guatemala');
-                
-                $dateFinArr = str_split($eda, 2);
-                $dateFinStr = "20$dateFinArr[0]-$dateFinArr[1]-$dateFinArr[2]";
-                $dateFinObj = new Carbon($dateFinStr, 'America/Guatemala');
-
-                if($dateFinObj->gte($dateObj) && $dateIniObj->lte($dateObj)){
-                    $filesDateFiltered[] = $file;
-                }
-            }else{
-                $filesDateFiltered[] = $file;
-            }
-        }
-
-        $filesNameFiltered = [];
-        foreach($filesDateFiltered as $file){
-            if($dna != '-' && $ext == '-'){
-                if(str_contains($file->AFAL_NOAR, $dna)){
-                    $filesNameFiltered[] = $file;
-                }
-            }else if($dna == '-' && $ext != '-'){
-                //$extArr = explode(',', $ext);
-                $extArr = json_decode($ext);
-                if(in_array($file->AFAL_EXTE, $extArr)){
-                    $filesNameFiltered[] = $file;
-                }
-            }else if($dna != '-' && $ext != '-'){
-                $extArr = json_decode($ext);
-                if(str_contains($file->AFAL_NOAR, $dna) && in_array($file->AFAL_EXTE, $extArr)){
-                    $filesNameFiltered[] = $file;
-                }
-            }else{
-                $filesNameFiltered[] = $file;
-            }
-        }
-        
-        $filesAccessFiltered = [];
-        foreach($filesNameFiltered as $file){
-            $access = json_decode($file->AFAL_USAC);
-
-            if($mode == 'my-files' && $file->AFAL_USRE == $idUser && $file->AFAL_ESTA == 'Activo'){
-                $filesAccessFiltered[] = $file;
-            }else if($mode == 'shared' && in_array($idUser, $access) && $file->AFAL_USRE != $idUser && $file->AFAL_ESTA == 'Activo'){
-                $filesAccessFiltered[] = $file;
-            }else if($mode == 'deleted' && $file->AFAL_ESTA == 'Eliminado' && ($file->AFAL_USRE == $idUser || in_array($idUser, $access))){
-                $filesAccessFiltered[] = $file;
-            }
-        }
-
-        $filesF = [];
-        foreach($filesAccessFiltered as $file){
-            $linea = $file->AFAL_NULI < 10 ? "0" . $file->AFAL_NULI : "" . $file->AFAL_NULI . "";
-            $secu = "";
-
-            for($i = strlen($file->AFAL_NUSE); $i < 6; $i++){
-                $secu .= "0";
-            }
-
-            $secu .= $file->AFAL_NUSE;
-            $vers = $file->AFAL_NUVE < 10 ? "0" . $file->AFAL_NUVE : "" . $file->AFAL_NUVE . "";
-            $fName = $file->AFAL_NOAR . '.' . $file->AFAL_EXTE;
-
-            $usrReg = DB::table('S002V01TUSUA')->where([
-                ['USUA_NULI', '=', $line],
-                ['USUA_IDUS', '=', $file->AFAL_USRE],
-            ])->first();
-            $nameReg = $this->functionsController->joinName($usrReg->USUA_NOMB, $usrReg->USUA_APPA, $usrReg->USUA_APMA);
-            $nameReg .= " (" . $file->AFAL_USRE . ")";
-
-            $access = json_decode($file->AFAL_USAC, true);
-            foreach($access as $k=>$v){
-                $usrAcc = DB::table('S002V01TUSUA')->where([
-                    ['USUA_NULI', '=', $line],
-                    ['USUA_IDUS', '=', $v],
-                ])->first();
-                $nameAcc = $this->functionsController->joinName($usrAcc->USUA_NOMB, $usrAcc->USUA_APPA, $usrAcc->USUA_APMA);
-                $nameAcc .= " (" . $v . ")";
-
-                $access[$k] = $nameAcc;
-            }
-
-            $accessStr = json_encode($access); 
-
-            $filesF[] = [
-                'CODIGO' => $linea . '-' . $file->AFAL_COMO . '-' . $file->AFAL_CLDO . '-' . $file->AFAL_FECR . '-' . $secu,
-                'VERSION' => $vers,
-                'NOMBRE' => $fName,
-                'TAMANIO' => $file->AFAL_TAMA,
-                'USRREG' => $nameReg,
-                'ACCESO' => $accessStr
-            ];
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $line,
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Consulta',
-            "El usuario $name (" . $usr->USUA_IDUS . ") consultó los documentos registrados.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
-        return $this->responseController->makeresponse(false, "EXITO", $filesF);
-    }
-
-    public function uploadTempFile(Request $request){
-        DB::enableQueryLog();
-        if(!$request->hasFile('file')){
-            return $this->responseController->makeResponse(true, "No se envió ningún archivo.", [], 400);
-        }
-
-        $validator = Validator::make($request->all(), [
-            'id_user' => 'required|string',
-            '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
-            );
-        }
-
-        $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_IDUS', '=', $idUser],
-            ['USUA_NULI', '=', $form['linea']]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
-        }
-
-        $originalFileName = $request->file('file')->getClientOriginalName();
-        $extension = $request->file('file')->extension();
-        $size = $request->file('file')->getSize();
-
-        $extArr = explode(".", $originalFileName);
-        $extArr = array_reverse($extArr);
-        $extStr = $extArr[0];
-
-        $isValid = $this->functionsController->checkFileSize($extStr, $size);
-        if ( $isValid && $extStr === 'xml') {
-            $isValid = $this->functionsController->checkInvoice($request->file('file')->getContent());
-        }
-
-        if($isValid){
-            $dir = str_replace("app\\Http\\Controllers", "storage\\app", __DIR__);
-            $tmpPath = $request->file('file')->store('tempFiles');
-            $tmpPath = str_replace("/", "\\", $tmpPath);
-
-            $location = "$dir\\$tmpPath";
-            $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
-
-            $fileID = DB::table('S002V01TARTE')->insertGetId([
-                'ARTE_NULI' => $form['linea'],
-                'ARTE_NOAR' => $originalFileName,
-                'ARTE_EXTE' => $extension,
-                'ARTE_TAMA' => $size,
-                'ARTE_UBTE' => $location,
-                'ARTE_USRE' => $idUser,
-                'ARTE_FERE' => $nowStr
-            ]);
-
-            $actions = DB::getQueryLog();
-            $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-            $idac = $this->functionsController->registerActivity(
-                $form['linea'],
-                'S002V01M04GDEL',
-                'S002V01F01ADDO',
-                'S002V01P05REDO',
-                'Registro',
-                "El usuario $name (" . $usr->USUA_IDUS . ") subió de manera temporal el archivo $originalFileName.",
-                $idUser,
-                $nowStr,
-            );
-
-            $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
-            
-            return $this->responseController->makeresponse(false, "EXITO", [
-                'idArchivo' => $this->encryptionController->encrypt($fileID),
-            ]);
-        }else{
-            return $this->responseController->makeResponse(true, "El archivo enviado tiene una extensión no soportada o sobrepasa el límite de peso de su categoría.", [], 400);
-        }
-    }
-
-    public function deleteTempFile(Request $request){
-        DB::enableQueryLog();
-        $validator = Validator::make($request->all(), [
-            'id_user' => 'required|string',
-            'id_file' => 'required|string',
-            '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
-            );
-        }
-
-        $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_IDUS', '=', $idUser],
-            ['USUA_NULI', '=', $form['linea']]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
-        }
-
-        $idFile = $this->encryptionController->decrypt($form['id_file']);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, "El id del archivo que desea eliminar no fue encriptado correctamente", [], 400);
-        }
-        
-        $file = DB::table('S002V01TARTE')->where([
-            ['ARTE_IDAR', '=', $idFile],
-            ['ARTE_NULI', '=', $form['linea']]
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo que desea eliminar no está registrado', [], 404);
-        }
-
-        if(file_exists($file->ARTE_UBTE)){
-            unlink($file->ARTE_UBTE);
-        }
-
-        $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
-        DB::table('S002V01TARTE')->where([
-            ['ARTE_IDAR', '=', $idFile],
-            ['ARTE_NULI', '=', $form['linea']]
-        ])->update([
-            'ARTE_ESTA' => 'Eliminado',
-            'ARTE_USMO' => $idUser,
-            'ARTE_FEMO' => $nowStr
-        ]);
-
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $form['linea'],
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P05REDO',
-            'Eliminación',
-            "El usuario $name (" . $usr->USUA_IDUS . ") eliminó el archivo " . $file->ARTE_NOAR,
-            $idUser,
-            $nowStr,
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
-        return $this->responseController->makeresponse(false, "EXITO");
-    }
-    
-    public function saveFinalFile(Request $request) {
-        DB::enableQueryLog();
-
-        $validator = Validator::make($request->all(), [
-            'id_user' => 'required|string',
-            'id_file' => 'required|string',
-            'linea' => 'required|integer',
-            'module' => 'required|string|max:4',
-            'clasification' => 'required|string|max:2',
-            'has_order' => 'required|string|in:S,N',
-            'id_order' => 'required_if:has_order,=,S|string',
-        ]);
-
-        if($validator->fails()){
-            return $this->responseController->makeResponse(
-                true,
-                "Se encontraron uno o más errores.",
-                $this->responseController->makeErrors(
-                    $validator->errors()->messages()
-                ),
-                401
-            );
-        }
-
-        $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $form['linea']],
-            ['USUA_IDUS', '=', $idUser],
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
-        }
-
-        $idFile = $this->encryptionController->decrypt($form['id_file']);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, "El id del archivo solicitado no fue encriptado correctamente", [], 400);
-        }
-
-        $tempFile = DB::table('S002V01TARTE')->where([
-            ['ARTE_NULI', '=', $form['linea']],
-            ['ARTE_IDAR', '=', $idFile],
-        ])->first();
-
-        if(is_null($tempFile)){
-            return $this->responseController->makeResponse(true, 'El archivo consultado no está registrado', [], 404);
-        }else if($tempFile->ARTE_ESTA == 'Eliminado'){
-            return $this->responseController->makeResponse(true, 'El archivo consultado está eliminado', [], 404);
-        }
-
-        $fileResponse = $this->moveFinalFile(
-            intval($form['linea']),
-            $form['module'],
-            $form['clasification'],
-            $tempFile,
-            $idUser,
-        );
-
-        if(!$fileResponse[0]){
-            return $this->responseController->makeResponse(true, $fileResponse[1], [], 400);
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-
-        if($form['has_order'] == 'S' && ($form['module'] == 'GMPR' || $form['module'] == 'GMCO')){
-            $idOrder = $this->encryptionController->decrypt($form['id_order']);
-            if(!$idOrder){
-                return $this->responseController->makeResponse(true, "El id de la orden relacionada no fue encriptado correctamente", [], 400);
-            }
-
-            $order = DB::table('S002V01TOTPR')->where([
-                ['OTPR_IDOT', '=', $idOrder],
-                ['OTPR_NULI', '=', $form['linea']]
-            ])->first();
-
-            if(is_null($order)){
-                return $this->responseController->makeResponse(true, 'La orden solicitada no está registrada', [], 404);
-            }
-
-            $documentsArr = json_decode($order->OTPR_DONE, true);
-            $fileCodeEnc = $this->encryptionController->encrypt($fileResponse[1]);
-
-            $documentsArr[] = $fileCodeEnc;
-            $documentsStr = json_encode($documentsArr);
-
-            DB::table('S002V01TOTPR')->where([
-                ['OTPR_IDOT', '=', $idOrder],
-                ['OTPR_NULI', '=', $form['linea']]
-            ])->update([
-                'OTPR_DONE' => $documentsStr,
-                'OTPR_USMO' => $idUser,
-                'OTPR_FEMO' => $nowStr
-            ]);
-        }
-
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $form['linea'],
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P05REDO',
-            'Registro',
-            "El usuario $name (" . $usr->USUA_IDUS . ") registró el archivo " . $tempFile->ARTE_NOAR,
-            $idUser,
-            $nowStr,
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
-        return $this->responseController->makeresponse(false, "EXITO");
-    }
-
-    public function moveFinalFile(int $line, string $como, string $cldo, object $tempFile, string $idUser) {
-        $modulesCodes = [
-            "GEAD","GIST","GMPR","GMCO","GEEQ","COAC","GEPR",
-            "ANFA","PCSA","GPRS","GEPR","GDEL","ADSI","USPE"
-        ];
-
-        $clasifications = [
-            "AV","AU","CA","CE","CO","DP","FA","FI",
-            "FO","IN","LA","OR","PL","RE","VI"
-        ];
-
-        if(!in_array($como, $modulesCodes)){
-            return [false, "El código $como es inválido."];
-        }
-
-        if(!in_array($cldo, $clasifications)){
-            return [false, "La clasificación $cldo es inválida."];
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $dateTimeArr = explode(' ', $nowStr);
-        $dateArr = explode('-', $dateTimeArr[0]);
-        $year = substr($dateArr[0], 2);
-
-        $fecr = "$year$dateArr[1]$dateArr[2]";
-        $sec = DB::table('S002V01TAFAL')->where([
-            ['AFAL_COMO', '=', $como],
-            ['AFAL_CLDO', '=', $cldo],
-            ['AFAL_NULI', '=', $line],
-        ])->orderBy('AFAL_NUSE', 'desc')->first();
-
-        $nuse = 1;
-        if(!is_null($sec)){
-            $nuse = intval($sec->AFAL_NUSE) + 1;
-        }
-
-        $fileNameArr = explode('.', $tempFile->ARTE_NOAR);
-        array_pop($fileNameArr);
-
-        $noar = implode('.', $fileNameArr);
-        $exte = $tempFile->ARTE_EXTE;
-
-        $ver = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $line],
-            ['AFAL_COMO', '=', $como],
-            ['AFAL_CLDO', '=', $cldo],
-            ['AFAL_NOAR', '=', $noar],
-            ['AFAL_EXTE', '=', $exte],
-        ])->orderBy('AFAL_NUVE', 'desc')->first();
-
-        $nuve = 1;
-        if(!is_null($ver)){
-            $nuve = intval($sec->AFAL_NUVE) + 1;
-        }
-
-        $tama = $tempFile->ARTE_TAMA;
-        $ubiFileArr = explode('tempFiles', $tempFile->ARTE_UBTE);
-        $ubic = $ubiFileArr[0] . 'files' . $ubiFileArr[1];
-
-        if(file_exists($tempFile->ARTE_UBTE)){
-            rename($tempFile->ARTE_UBTE, $ubic);
-            DB::table('S002V01TARTE')->where([
-                ['ARTE_IDAR', '=', $tempFile->ARTE_IDAR],
-                ['ARTE_NULI', '=', $line],
-            ])->update([
-                'ARTE_ESTA' => 'Eliminado',
-                'ARTE_USMO' => $idUser,
-                'ARTE_FEMO' => $nowStr,
-            ]);
-        }
-
-        $code = $line < 10 ? "0$line" : "$line";
-        $code .= "-$como-$cldo-$fecr-";
-
-        for($i = strlen($nuse); $i < 6; $i++){
-            $code .= "0";
-        }
-
-        $code .= "$nuse=";
-        $code .= $nuve < 10 ? "0$nuve=" : "$nuve=";
-        $code .= "$noar.$exte";
-
-        $usac = json_encode([$idUser]);
-
-        DB::table('S002V01TAFAL')->insert([
-            'AFAL_NULI' => $line,
-            'AFAL_COMO' => $como,
-            'AFAL_CLDO' => $cldo,
-            'AFAL_FECR' => $fecr,
-            'AFAL_NUSE' => $nuse,
-            'AFAL_NUVE' => $nuve,
-            'AFAL_NOAR' => $noar,
-            'AFAL_EXTE' => $exte,
-            'AFAL_TAMA' => $tama,
-            'AFAL_UBIC' => $ubic,
-            'AFAL_USAC' => $usac,
-            'AFAL_USRE' => $idUser,
-            'AFAL_FERE' => $nowStr
-        ]);
-
-        return [true, $code];
-    }
-
-    public function getPublicDocumentURL($id, $idUser, $line) {
-        DB::enableQueryLog();
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $line],
-            ['USUA_IDUS', '=', $idUser],
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $id = $this->encryptionController->shortDec($id);
-        if(!$id){
-            return $this->responseController->makeResponse(true, 'El ID del archivo solicitado no está encriptado correctamente.', [], 400);
-        }
-
-        $idArr = explode('=', $id);
-        $codeArr = explode('-', $idArr[0]);
-
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idArr[1]],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }
-
-        $ubicArr = explode('storage', $file->AFAL_UBIC);
-        $publicUbi = "$ubicArr[0]public\\public_files\\$id";
-
-        if(!file_exists($publicUbi)){
-            copy($file->AFAL_UBIC, $publicUbi);
-        }
-        // $publicUbiStr = str_replace('C:\inetpub\wwwroot\\', 'http://git.ittec.mx/', $publicUbi);
-        $publicUbiStr = str_replace('C:\ITTEC\SAM\Dev\SistemaMantenimiento\sistema-mantenimiento-back\public', 'http://192.168.100.105:8000', $publicUbi);
-        $publicUbiStr = str_replace('\\', '/', $publicUbiStr);
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $line,
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Consulta',
-            "El usuario $name (" . $usr->USUA_IDUS . ") consultó la URL pública del archivo $id.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
-        return $this->responseController->makeresponse(false, "EXITO", ['public_uri' => $publicUbiStr]);
-    }
-
-    public function getFileAccess($id, $idUser, $line) {
-        DB::enableQueryLog();
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $line],
-            ['USUA_IDUS', '=', $idUser],
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $id = $this->encryptionController->shortDec($id);
-        if(!$id){
-            return $this->responseController->makeResponse(true, 'El ID del archivo solicitado no está encriptado correctamente.', [], 400);
-        }
-
-        $idArr = explode('=', $id);
-        $codeArr = explode('-', $idArr[0]);
-
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idArr[1]],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }
-
-        $owner = $this->encryptionController->encrypt($file->AFAL_USRE);
-        $permissionsArr = json_decode($file->AFAL_USAC, true);
-        foreach($permissionsArr as $k=>$v){
-            $idEnc = $this->encryptionController->encrypt($v);
-            $permissionsArr[$k] = $idEnc;
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $line,
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Consulta',
-            "El usuario $name (" . $usr->USUA_IDUS . ") consultó los usuarios con acceso al archivo $id.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
-        return $this->responseController->makeresponse(false, "EXITO", [
-            'access' => $permissionsArr,
-            'owner' => $owner
-        ]);
-    }
-    
-    public function updateFilePermissions(Request $request) {
-        DB::enableQueryLog();
-
-        $validator = Validator::make($request->all(), [
-            'id_user' => 'required|string',
-            'id_file' => 'required|string',
-            'linea' => 'required|integer',
-            'permissions' => 'required|json',
-        ]);
-
-        if($validator->fails()){
-            return $this->responseController->makeResponse(
-                true,
-                "Se encontraron uno o más errores.",
-                $this->responseController->makeErrors(
-                    $validator->errors()->messages()
-                ),
-                401
-            );
-        }
-
-        $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, "El ID del usuario que realizó la petición no fue encriptado correctamente", [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $form['linea']],
-            ['USUA_IDUS', '=', $idUser],
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
-        }
-
-        $idFile = $this->encryptionController->decrypt($form['id_file']);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, "El ID del archivo solicitado no fue encriptado correctamente.", [], 400);
-        }
-
-        $idFileArr = explode('=', $idFile);
-        $codeArr = explode('-', $idFileArr[0]);
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idFileArr[1]],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }
-
-        $permissionsArr = json_decode($file->AFAL_USAC, true);
-        if(!in_array($idUser, $permissionsArr)){
-            $usrName = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA) . " ($idUser)";
-            return $this->responseController->makeResponse(true, "El usuario $usrName no tiene permisos para modificar el archivo $idFile.", [], 401);
-        }
-
-        $newPermissionsArr = json_decode($form['permissions'], true);
-        if(count($newPermissionsArr) <= 0){
-            return $this->responseController->makeResponse(true, "El arreglo de permisos está vacío.", [], 400);
-        }
-
-        $newPermissionsArrDec = [];
-        foreach($newPermissionsArr as $val){
-            $idDec = $this->encryptionController->decrypt($val);
-            if(!$idDec){
-                return $this->responseController->makeResponse(true, "Alguno de los ID's enviados no fue encriptado correctamente.", [], 400);
-            }
-
-            $newPermissionsArrDec[] = $idDec;
-        }
-
-        if(!in_array($file->AFAL_USRE, $newPermissionsArrDec)){
-            return $this->responseController->makeResponse(true, "El arreglo de permisos no incluye el ID del propietario.", [], 401);
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $usac = json_encode($newPermissionsArrDec);
-        DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idFileArr[1]],
-        ])->update([
-            'AFAL_USAC' => $usac,
-            'AFAL_USMO' => $idUser,
-            'AFAL_FEMO' => $nowStr,
-        ]);
-        
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $form['linea'],
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Actualización',
-            "El usuario $name (" . $usr->USUA_IDUS . ") actualizó los usuarios con acceso del archivo $idFile.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
-        return $this->responseController->makeresponse(false, "EXITO");
-    }
-
-    public function deleteFile(Request $request) {
-        DB::enableQueryLog();
-
-        $validator = Validator::make($request->all(), [
-            'id_user' => 'required|string',
-            'id_file' => 'required|string',
-            '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
-            );
-        }
-
-        $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, "El ID del usuario que realizó la petición no fue encriptado correctamente", [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $form['linea']],
-            ['USUA_IDUS', '=', $idUser],
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
-        }
-
-        $idFile = $this->encryptionController->decrypt($form['id_file']);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, "El ID del archivo solicitado no fue encriptado correctamente.", [], 400);
-        }
-
-        $idFileArr = explode('=', $idFile);
-        $codeArr = explode('-', $idFileArr[0]);
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idFileArr[1]],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }else if($file->AFAL_ESTA == 'Eliminado'){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado está eliminado.', [], 401);
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idFileArr[1]],
-        ])->update([
-            'AFAL_ESTA' => 'Eliminado',
-            'AFAL_USMO' => $idUser,
-            'AFAL_FEMO' => $nowStr
-        ]);
-        
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $form['linea'],
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Eliminación',
-            "El usuario $name (" . $usr->USUA_IDUS . ") eliminó el archivo $idFile.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
-        return $this->responseController->makeresponse(false, "EXITO");
-    }
-
-    public function getAssociatedWorkOrders($idFile, $idUser, $line) {
-        DB::enableQueryLog();
-
-        $idUser = $this->encryptionController->shortDec($idUser);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $line],
-            ['USUA_IDUS', '=', $idUser]
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
-        }
-
-        $idFile = $this->encryptionController->shortDec($idFile);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, 'El ID del archivo solicitado no está encriptado correctamente.', [], 400);
-        }
-
-        $idFileArr = explode('=', $idFile);
-        $codeArr = explode('-', $idFileArr[0]);
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $line],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idFileArr[1]],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }
-
-        $orders = DB::table('S002V01TOTPR')
-        ->select([
-            'OTPR_IDOT AS IDORDEN',
-            'OTPR_EQIN AS EQUIPAMIENTO',
-            'OTPR_ACAS AS ACTIVADOR',
-            'OTPR_CLAS AS CLASIFICACION',
-            'ACTI_PRIO AS PRIORIDAD',
-            'ACTI_TIAC AS TIPOACTIVADOR'
-        ])->join('S002V01TACTI', 'OTPR_ACAS', '=', 'ACTI_IDCO')
-        ->where('OTPR_NULI', '=', $line)
-        ->whereJsonContains('OTPR_DONE', $idFile)->get()->all();
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $line,
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Consulta',
-            "El usuario $name (" . $usr->USUA_IDUS . ") consultó las órdenes de trabajo relacionadas al archivo $idFile.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
-        return $this->responseController->makeresponse(false, "EXITO", $orders);
-    }
-
-    public function changeAssociationStatus(Request $request) {
-        DB::enableQueryLog();
-
-        $validator = Validator::make($request->all(), [
-            'id_user' => 'required|string',
-            'linea' => 'required|integer',
-            'id_file' => 'required|string',
-            'action' => 'required|string|in:disassociate,associate',
-            'id_order' => 'required|string',
-        ]);
-
-        if($validator->fails()){
-            return $this->responseController->makeResponse(
-                true,
-                "Se encontraron uno o más errores.",
-                $this->responseController->makeErrors(
-                    $validator->errors()->messages()
-                ),
-                401
-            );
-        }
-
-        $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
-        if(!$idUser){
-            return $this->responseController->makeResponse(true, "El ID del usuario que realizó la petición no fue encriptado correctamente", [], 400);
-        }
-
-        $usr = DB::table('S002V01TUSUA')->where([
-            ['USUA_NULI', '=', $form['linea']],
-            ['USUA_IDUS', '=', $idUser],
-        ])->first();
-
-        if(is_null($usr)){
-            return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
-        }
-
-        $idFile = $this->encryptionController->decrypt($form['id_file']);
-        if(!$idFile){
-            return $this->responseController->makeResponse(true, "El ID del archivo solicitado no fue encriptado correctamente.", [], 400);
-        }
-
-        $idFileArr = explode('=', $idFile);
-        $codeArr = explode('-', $idFileArr[0]);
-        $file = DB::table('S002V01TAFAL')->where([
-            ['AFAL_NULI', '=', $codeArr[0]],
-            ['AFAL_COMO', '=', $codeArr[1]],
-            ['AFAL_CLDO', '=', $codeArr[2]],
-            ['AFAL_FECR', '=', $codeArr[3]],
-            ['AFAL_NUSE', '=', $codeArr[4]],
-            ['AFAL_NUVE', '=', $idFileArr[1]],
-        ])->first();
-
-        if(is_null($file)){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
-        }else if($file->AFAL_ESTA == 'Eliminado'){
-            return $this->responseController->makeResponse(true, 'El archivo solicitado está eliminado.', [], 401);
-        }
-
-        $idOrder = $this->encryptionController->decrypt($form['id_order']);
-        if(!$idOrder){
-            return $this->responseController->makeResponse(true, 'El ID de la orden solicitada no fue encriptado correctamente.', [], 400);
-        }
-
-        $workOrder = DB::table('S002V01TOTPR')->where([
-            ['OTPR_NULI', '=', $form['linea']],
-            ['OTPR_IDOT', '=', $idOrder]
-        ])->first();
-        
-        if(is_null($workOrder)){
-            return $this->responseController->makeResponse(true, 'La orden solicitada no existe', [], 404);
-        }else if($workOrder->OTPR_ESTA == 'E'){
-            return $this->responseController->makeResponse(true, 'La orden solicitada está eliminada', [], 401);
-        }
-        
-        $filesArr = json_decode($workOrder->OTPR_DONE, true);
-        if($form['action'] == 'disassociate'){
-            if(!in_array($idFile, $filesArr)){
-                return $this->responseController->makeResponse(true, 'El archivo enviado no está asociado a la orden de trabajo.', [], 401);
-            }
-
-            $filesArrAux = [];
-            foreach($filesArr as $fileStr){
-                if($fileStr != $idFile){
-                    $filesArrAux[] = $fileStr;
-                }
-            }
-
-            $filesArr = $filesArrAux;
-        }else{
-            if(in_array($idFile, $filesArr)){
-                return $this->responseController->makeResponse(true, 'El archivo enviado ya está asociado a la orden de trabajo.', [], 401);
-            }
-            $filesArr[] = $idFile;
-        }
-
-        $now = $this->functionsController->now();
-        $nowStr = $now->toDateTimeString();
-        $filesStr = json_encode($filesArr);
-
-        DB::table('S002V01TOTPR')->where([
-            ['OTPR_NULI', '=', $form['linea']],
-            ['OTPR_IDOT', '=', $idOrder]
-        ])->update([
-            'OTPR_DONE' => $filesStr,
-            'OTPR_USMO' => $idUser,
-            'OTPR_FEMO' => $nowStr,
-        ]);
-        
-        $actions = DB::getQueryLog();
-        $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
-
-        $idac = $this->functionsController->registerActivity(
-            $form['linea'],
-            'S002V01M04GDEL',
-            'S002V01F01ADDO',
-            'S002V01P01GEDO',
-            'Actualización',
-            "El usuario $name (" . $usr->USUA_IDUS . ") actualizó la relación del archivo $idFile y la orden de trabajo #$idOrder.",
-            $idUser,
-            $nowStr
-        );
-
-        $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
-        return $this->responseController->makeresponse(false, "EXITO");
-    }
+  private $responseController;
+  private $encryptionController;
+  private $functionsController;
+
+  public function __construct(){
+      $this->responseController = new ResponseController();
+      $this->encryptionController = new EncryptionController();
+      $this->functionsController = new FunctionsController();
+  }
+
+  public function downloadFile($token, $idUser, $line){
+      DB::enableQueryLog();
+
+      $tokenInfo = DB::table('S002V01TTODE')->where([
+          ['TODE_NULI', '=', $line],
+          ['TODE_TOKE', '=', $token]
+      ])->first();
+
+      if(is_null($tokenInfo)){
+          return $this->responseController->makeResponse(true, 'El token de descarga no existe.', [], 404);
+      }else if($tokenInfo->TODE_ESTA != 'Activo'){
+          return $this->responseController->makeResponse(true, 'El token de descarga ya fue utilizado.', [], 401);
+      }
+
+      $token = $this->encryptionController->decrypt($token);
+      if(!$token){
+          return $this->responseController->makeResponse(true, 'El token de descarga no está encriptado correctamente.', [], 400);
+      }
+
+      $tokenArr = explode("|", $token);
+      if(count($tokenArr) != 3){
+          return $this->responseController->makeResponse(true, 'Estructura de token inválida.', [], 401);
+      }else if(intval($tokenArr[1]) != $tokenInfo->TODE_LLAL){
+          return $this->responseController->makeResponse(true, 'Token inválido.', [], 401);
+      }else if($tokenArr[2] != 'syp'){
+          return $this->responseController->makeResponse(true, 'Token inválido.', [], 401);
+      }
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_IDUS', '=', $idUser],
+          ['USUA_NULI', '=', $line]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $id = $tokenArr[0];
+      $codiArr = explode("=", $id);
+      $prefArr = explode("-", $codiArr[0]);
+      $suffArr = explode(".", $codiArr[2]);
+
+      $nuli = intval($prefArr[0]);
+      $como = $prefArr[1];
+      $cldo = $prefArr[2];
+      $fecr = $prefArr[3];
+      $nuse = intval($prefArr[4]);
+      $nuve = $codiArr[1];
+      $noar = $suffArr[0];
+      $exte = $suffArr[1];
+
+      $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
+      DB::table('S002V01TTODE')->where([
+          ['TODE_IDTO', '=', $tokenInfo->TODE_IDTO],
+          ['TODE_NULI', '=', $line]
+      ])->update([
+          'TODE_ESTA' => 'Usado',
+          'TODE_USDE' => $idUser,
+          'TODE_FEDE' => $nowStr
+      ]);
+      
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $nuli],
+          ['AFAL_COMO', '=', $como],
+          ['AFAL_CLDO', '=', $cldo],
+          ['AFAL_FECR', '=', $fecr],
+          ['AFAL_NUSE', '=', $nuse],
+          ['AFAL_NUVE', '=', $nuve],
+          ['AFAL_NOAR', '=', $noar],
+          ['AFAL_EXTE', '=', $exte],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no existe.', [], 404);
+      }
+
+      return response()->download($file->AFAL_UBIC, $id);
+  }
+
+  public function getDownloadToken($idFile, $idUser, $line){
+      DB::enableQueryLog();
+
+      $idFile = $this->encryptionController->decrypt($idFile);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, 'El ID del archivo requerido no está encriptado correctamente.', [], 400);
+      }
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_IDUS', '=', $idUser],
+          ['USUA_NULI', '=', $line]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $codiArr = explode("=", $idFile);
+      $prefArr = explode("-", $codiArr[0]);
+      $suffArr = explode(".", $codiArr[2]);
+
+      $nuli = intval($prefArr[0]);
+      $como = $prefArr[1];
+      $cldo = $prefArr[2];
+      $fecr = $prefArr[3];
+      $nuse = intval($prefArr[4]);
+      $nuve = $codiArr[1];
+      $noar = $suffArr[0];
+      $exte = $suffArr[1];
+      
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $nuli],
+          ['AFAL_COMO', '=', $como],
+          ['AFAL_CLDO', '=', $cldo],
+          ['AFAL_FECR', '=', $fecr],
+          ['AFAL_NUSE', '=', $nuse],
+          ['AFAL_NUVE', '=', $nuve],
+          ['AFAL_NOAR', '=', $noar],
+          ['AFAL_EXTE', '=', $exte],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no existe.', [], 404);
+      }
+
+      $rand = rand(0, 99999);
+      $tokenArr = [$idFile, $rand, "syp"];
+      $tokenStr = join('|', $tokenArr);
+
+      $token = $this->encryptionController->encrypt($tokenStr);
+      $token = str_replace("+", "=P=", $token);
+      $token = str_replace("/", "=S=", $token);
+      $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
+
+      DB::table('S002V01TTODE')->insert([
+          'TODE_NULI' => $line,
+          'TODE_TOKE' => $token,
+          'TODE_CODO' => $idFile,
+          'TODE_LLAL' => $rand,
+          'TODE_USRE' => $idUser,
+          'TODE_FERE' => $nowStr
+      ]);
+
+      return $this->responseController->makeResponse(false, 'EXITO', ['TOKEN' => $token]);
+  }
+
+  public function getFileInfo($id, $idUser, $line){
+      DB::enableQueryLog();
+
+      $id = $this->encryptionController->decrypt($id);
+      if(!$id){
+          return $this->responseController->makeResponse(true, 'El ID del archivo requerido no está encriptado correctamente.', [], 400);
+      }
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_IDUS', '=', $idUser],
+          ['USUA_NULI', '=', $line]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $idArr = explode("=", $id);
+      $codiArr = explode("-", $idArr[0]);
+
+      $nuli = $line;
+      $como = $codiArr[1];
+      $cldo = $codiArr[2];
+      $fecr = $codiArr[3];
+      $nuse = intval($codiArr[4]);
+      $nuve = intval($idArr[1]);
+
+      $fileInfo = DB::table('S002V01TAFAL')->select([
+          'AFAL_NOAR AS NOMBREARCHIVO',
+          'AFAL_EXTE AS EXTENSION',
+          'AFAL_TAMA AS PESO',
+          'AFAL_USAC AS ACCESO',
+          'AFAL_ESTA AS ESTADO'
+      ])->where([
+          ['AFAL_NULI', '=', $nuli],
+          ['AFAL_COMO', '=', $como],
+          ['AFAL_CLDO', '=', $cldo],
+          ['AFAL_FECR', '=', $fecr],
+          ['AFAL_NUSE', '=', $nuse],
+          ['AFAL_NUVE', '=', $nuve],
+      ])->first();
+
+      if(is_null($fileInfo)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }else if($fileInfo->ESTADO != 'Activo'){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está disponible.', [], 404);
+      }
+
+      return $this->responseController->makeResponse(false, 'EXITO', $fileInfo);
+  }
+
+  public function getFiles($mod, $cla, $sda, $eda, $dna, $ext, $mode, $idUser, $line){
+      DB::enableQueryLog();
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $line],
+          ['USUA_IDUS', '=', $idUser]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $availableModes = ['my-files', 'shared', 'deleted'];
+      if(!in_array($mode, $availableModes)){
+          return $this->responseController->makeResponse(true, 'El modo seleccionado es inválido.', [], 401);
+      }
+
+      $whereParameters = [
+          ['AFAL_NULI', '=', $line]
+      ];
+
+      if($mod != '-'){
+          $whereParameters[] = ['AFAL_COMO', '=', $mod];
+      }
+      
+      if($cla != '-'){
+          $whereParameters[] = ['AFAL_CLDO', '=', $cla];
+      }
+
+      $files = DB::table('S002V01TAFAL')->where($whereParameters)->get()->all();
+      $filesDateFiltered = [];
+      foreach($files as $file){
+          $dateArr = str_split($file->AFAL_FECR, 2);
+          $dateStr = "20$dateArr[0]-$dateArr[1]-$dateArr[2]";
+          $dateObj = new Carbon($dateStr, 'America/Guatemala');
+
+          if($sda != '-' && $eda == '-'){
+              $dateIniArr = str_split($sda, 2);
+              $dateIniStr = "20$dateIniArr[0]-$dateIniArr[1]-$dateIniArr[2]";
+              $dateIniObj = new Carbon($dateIniStr, 'America/Guatemala');
+
+              if($dateIniObj->lte($dateObj)){
+                  $filesDateFiltered[] = $file;
+              }
+          }else if($sda == '-' && $eda != '-'){
+              $dateFinArr = str_split($eda, 2);
+              $dateFinStr = "20$dateFinArr[0]-$dateFinArr[1]-$dateFinArr[2]";
+              $dateFinObj = new Carbon($dateFinStr, 'America/Guatemala');
+
+              if($dateFinObj->gte($dateObj)){
+                  $filesDateFiltered[] = $file;
+              }
+          }else if($sda != '-' && $eda != '-'){
+              $dateIniArr = str_split($sda, 2);
+              $dateIniStr = "20$dateIniArr[0]-$dateIniArr[1]-$dateIniArr[2]";
+              $dateIniObj = new Carbon($dateIniStr, 'America/Guatemala');
+              
+              $dateFinArr = str_split($eda, 2);
+              $dateFinStr = "20$dateFinArr[0]-$dateFinArr[1]-$dateFinArr[2]";
+              $dateFinObj = new Carbon($dateFinStr, 'America/Guatemala');
+
+              if($dateFinObj->gte($dateObj) && $dateIniObj->lte($dateObj)){
+                  $filesDateFiltered[] = $file;
+              }
+          }else{
+              $filesDateFiltered[] = $file;
+          }
+      }
+
+      $filesNameFiltered = [];
+      foreach($filesDateFiltered as $file){
+          if($dna != '-' && $ext == '-'){
+              if(str_contains($file->AFAL_NOAR, $dna)){
+                  $filesNameFiltered[] = $file;
+              }
+          }else if($dna == '-' && $ext != '-'){
+              //$extArr = explode(',', $ext);
+              $extArr = json_decode($ext);
+              if(in_array($file->AFAL_EXTE, $extArr)){
+                  $filesNameFiltered[] = $file;
+              }
+          }else if($dna != '-' && $ext != '-'){
+              $extArr = json_decode($ext);
+              if(str_contains($file->AFAL_NOAR, $dna) && in_array($file->AFAL_EXTE, $extArr)){
+                  $filesNameFiltered[] = $file;
+              }
+          }else{
+              $filesNameFiltered[] = $file;
+          }
+      }
+      
+      $filesAccessFiltered = [];
+      foreach($filesNameFiltered as $file){
+          $access = json_decode($file->AFAL_USAC);
+
+          if($mode == 'my-files' && $file->AFAL_USRE == $idUser && $file->AFAL_ESTA == 'Activo'){
+              $filesAccessFiltered[] = $file;
+          }else if($mode == 'shared' && in_array($idUser, $access) && $file->AFAL_USRE != $idUser && $file->AFAL_ESTA == 'Activo'){
+              $filesAccessFiltered[] = $file;
+          }else if($mode == 'deleted' && $file->AFAL_ESTA == 'Eliminado' && ($file->AFAL_USRE == $idUser || in_array($idUser, $access))){
+              $filesAccessFiltered[] = $file;
+          }
+      }
+
+      $filesF = [];
+      foreach($filesAccessFiltered as $file){
+          $linea = $file->AFAL_NULI < 10 ? "0" . $file->AFAL_NULI : "" . $file->AFAL_NULI . "";
+          $secu = "";
+
+          for($i = strlen($file->AFAL_NUSE); $i < 6; $i++){
+              $secu .= "0";
+          }
+
+          $secu .= $file->AFAL_NUSE;
+          $vers = $file->AFAL_NUVE < 10 ? "0" . $file->AFAL_NUVE : "" . $file->AFAL_NUVE . "";
+          $fName = $file->AFAL_NOAR . '.' . $file->AFAL_EXTE;
+
+          $usrReg = DB::table('S002V01TUSUA')->where([
+              ['USUA_NULI', '=', $line],
+              ['USUA_IDUS', '=', $file->AFAL_USRE],
+          ])->first();
+          $nameReg = $this->functionsController->joinName($usrReg->USUA_NOMB, $usrReg->USUA_APPA, $usrReg->USUA_APMA);
+          $nameReg .= " (" . $file->AFAL_USRE . ")";
+
+          $access = json_decode($file->AFAL_USAC, true);
+          foreach($access as $k=>$v){
+              $usrAcc = DB::table('S002V01TUSUA')->where([
+                  ['USUA_NULI', '=', $line],
+                  ['USUA_IDUS', '=', $v],
+              ])->first();
+              $nameAcc = $this->functionsController->joinName($usrAcc->USUA_NOMB, $usrAcc->USUA_APPA, $usrAcc->USUA_APMA);
+              $nameAcc .= " (" . $v . ")";
+
+              $access[$k] = $nameAcc;
+          }
+
+          $accessStr = json_encode($access); 
+
+          $filesF[] = [
+              'CODIGO' => $linea . '-' . $file->AFAL_COMO . '-' . $file->AFAL_CLDO . '-' . $file->AFAL_FECR . '-' . $secu,
+              'VERSION' => $vers,
+              'NOMBRE' => $fName,
+              'TAMANIO' => $file->AFAL_TAMA,
+              'USRREG' => $nameReg,
+              'ACCESO' => $accessStr
+          ];
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $line,
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Consulta',
+          "El usuario $name (" . $usr->USUA_IDUS . ") consultó los documentos registrados.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
+      return $this->responseController->makeresponse(false, "EXITO", $filesF);
+  }
+
+  public function uploadTempFile(Request $request){
+      DB::enableQueryLog();
+      if(!$request->hasFile('file')){
+          return $this->responseController->makeResponse(true, "No se envió ningún archivo.", [], 400);
+      }
+
+      $validator = Validator::make($request->all(), [
+          'id_user' => 'required|string',
+          '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
+          );
+      }
+
+      $form = $request->all();
+      $idUser = $this->encryptionController->decrypt($form['id_user']);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_IDUS', '=', $idUser],
+          ['USUA_NULI', '=', $form['linea']]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
+      }
+
+      $originalFileName = $request->file('file')->getClientOriginalName();
+      $extension = $request->file('file')->extension();
+      $size = $request->file('file')->getSize();
+
+      $extArr = explode(".", $originalFileName);
+      $extArr = array_reverse($extArr);
+      $extStr = $extArr[0];
+
+      $isValid = $this->functionsController->checkFileSize($extStr, $size);
+      if($isValid){
+          $dir = str_replace("app\\Http\\Controllers", "storage\\app", __DIR__);
+          $tmpPath = $request->file('file')->store('tempFiles');
+          $tmpPath = str_replace("/", "\\", $tmpPath);
+
+          $location = "$dir\\$tmpPath";
+          $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
+
+          $fileID = DB::table('S002V01TARTE')->insertGetId([
+              'ARTE_NULI' => $form['linea'],
+              'ARTE_NOAR' => $originalFileName,
+              'ARTE_EXTE' => $extension,
+              'ARTE_TAMA' => $size,
+              'ARTE_UBTE' => $location,
+              'ARTE_USRE' => $idUser,
+              'ARTE_FERE' => $nowStr
+          ]);
+          
+          $actions = DB::getQueryLog();
+          $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+          $idac = $this->functionsController->registerActivity(
+              $form['linea'],
+              'S002V01M04GDEL',
+              'S002V01F01ADDO',
+              'S002V01P05REDO',
+              'Registro',
+              "El usuario $name (" . $usr->USUA_IDUS . ") subió de manera temporal el archivo $originalFileName.",
+              $idUser,
+              $nowStr,
+          );
+
+          $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
+          
+          return $this->responseController->makeresponse(false, "EXITO", [
+              'idArchivo' => $this->encryptionController->encrypt($fileID),
+          ]);
+      }else{
+          return $this->responseController->makeResponse(true, "El archivo enviado tiene una extensión no soportada o sobrepasa el límite de peso de su categoría.", [], 400);
+      }
+  }
+
+  public function deleteTempFile(Request $request){
+      DB::enableQueryLog();
+      $validator = Validator::make($request->all(), [
+          'id_user' => 'required|string',
+          'id_file' => 'required|string',
+          '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
+          );
+      }
+
+      $form = $request->all();
+      $idUser = $this->encryptionController->decrypt($form['id_user']);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_IDUS', '=', $idUser],
+          ['USUA_NULI', '=', $form['linea']]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
+      }
+
+      $idFile = $this->encryptionController->decrypt($form['id_file']);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, "El id del archivo que desea eliminar no fue encriptado correctamente", [], 400);
+      }
+      
+      $file = DB::table('S002V01TARTE')->where([
+          ['ARTE_IDAR', '=', $idFile],
+          ['ARTE_NULI', '=', $form['linea']]
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo que desea eliminar no está registrado', [], 404);
+      }
+
+      if(file_exists($file->ARTE_UBTE)){
+          unlink($file->ARTE_UBTE);
+      }
+
+      $nowStr = Carbon::now('America/Mexico_city')->toDateTimeString();
+      DB::table('S002V01TARTE')->where([
+          ['ARTE_IDAR', '=', $idFile],
+          ['ARTE_NULI', '=', $form['linea']]
+      ])->update([
+          'ARTE_ESTA' => 'Eliminado',
+          'ARTE_USMO' => $idUser,
+          'ARTE_FEMO' => $nowStr
+      ]);
+
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $form['linea'],
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P05REDO',
+          'Eliminación',
+          "El usuario $name (" . $usr->USUA_IDUS . ") eliminó el archivo " . $file->ARTE_NOAR,
+          $idUser,
+          $nowStr,
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
+      return $this->responseController->makeresponse(false, "EXITO");
+  }
+  
+  public function saveFinalFile(Request $request) {
+      DB::enableQueryLog();
+
+      $validator = Validator::make($request->all(), [
+          'id_user' => 'required|string',
+          'id_file' => 'required|string',
+          'linea' => 'required|integer',
+          'module' => 'required|string|max:4',
+          'clasification' => 'required|string|max:2',
+          'has_order' => 'required|string|in:S,N',
+          'id_order' => 'required_if:has_order,=,S|string',
+      ]);
+
+      if($validator->fails()){
+          return $this->responseController->makeResponse(
+              true,
+              "Se encontraron uno o más errores.",
+              $this->responseController->makeErrors(
+                  $validator->errors()->messages()
+              ),
+              401
+          );
+      }
+
+      $form = $request->all();
+      $idUser = $this->encryptionController->decrypt($form['id_user']);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $form['linea']],
+          ['USUA_IDUS', '=', $idUser],
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
+      }
+
+      $idFile = $this->encryptionController->decrypt($form['id_file']);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, "El id del archivo solicitado no fue encriptado correctamente", [], 400);
+      }
+
+      $tempFile = DB::table('S002V01TARTE')->where([
+          ['ARTE_NULI', '=', $form['linea']],
+          ['ARTE_IDAR', '=', $idFile],
+      ])->first();
+
+      if(is_null($tempFile)){
+          return $this->responseController->makeResponse(true, 'El archivo consultado no está registrado', [], 404);
+      }else if($tempFile->ARTE_ESTA == 'Eliminado'){
+          return $this->responseController->makeResponse(true, 'El archivo consultado está eliminado', [], 404);
+      }
+
+      $fileResponse = $this->moveFinalFile(
+          intval($form['linea']),
+          $form['module'],
+          $form['clasification'],
+          $tempFile,
+          $idUser,
+      );
+
+      if(!$fileResponse[0]){
+          return $this->responseController->makeResponse(true, $fileResponse[1], [], 400);
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+
+      if($form['has_order'] == 'S' && ($form['module'] == 'GMPR' || $form['module'] == 'GMCO')){
+          $idOrder = $this->encryptionController->decrypt($form['id_order']);
+          if(!$idOrder){
+              return $this->responseController->makeResponse(true, "El id de la orden relacionada no fue encriptado correctamente", [], 400);
+          }
+
+          $order = DB::table('S002V01TOTPR')->where([
+              ['OTPR_IDOT', '=', $idOrder],
+              ['OTPR_NULI', '=', $form['linea']]
+          ])->first();
+
+          if(is_null($order)){
+              return $this->responseController->makeResponse(true, 'La orden solicitada no está registrada', [], 404);
+          }
+
+          $documentsArr = json_decode($order->OTPR_DONE, true);
+          $fileCodeEnc = $this->encryptionController->encrypt($fileResponse[1]);
+
+          $documentsArr[] = $fileCodeEnc;
+          $documentsStr = json_encode($documentsArr);
+
+          DB::table('S002V01TOTPR')->where([
+              ['OTPR_IDOT', '=', $idOrder],
+              ['OTPR_NULI', '=', $form['linea']]
+          ])->update([
+              'OTPR_DONE' => $documentsStr,
+              'OTPR_USMO' => $idUser,
+              'OTPR_FEMO' => $nowStr
+          ]);
+      }
+
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $form['linea'],
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P05REDO',
+          'Registro',
+          "El usuario $name (" . $usr->USUA_IDUS . ") registró el archivo " . $tempFile->ARTE_NOAR,
+          $idUser,
+          $nowStr,
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
+      return $this->responseController->makeresponse(false, "EXITO");
+  }
+
+  private function moveFinalFile(int $line, string $como, string $cldo, object $tempFile, string $idUser) {
+      $modulesCodes = [
+          "GEAD","GIST","GMPR","GMCO","GEEQ","COAC","GEPR",
+          "ANFA","PCSA","GPRS","GEPR","GDEL","ADSI","USPE"
+      ];
+
+      $clasifications = [
+          "AV","AU","CA","CE","CO","DP","FA","FI",
+          "FO","IN","LA","OR","PL","RE","VI"
+      ];
+
+      if(!in_array($como, $modulesCodes)){
+          return [false, "El código $como es inválido."];
+      }
+
+      if(!in_array($cldo, $clasifications)){
+          return [false, "La clasificación $cldo es inválida."];
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $dateTimeArr = explode(' ', $nowStr);
+      $dateArr = explode('-', $dateTimeArr[0]);
+      $year = substr($dateArr[0], 2);
+
+      $fecr = "$year$dateArr[1]$dateArr[2]";
+      $sec = DB::table('S002V01TAFAL')->where([
+          ['AFAL_COMO', '=', $como],
+          ['AFAL_CLDO', '=', $cldo],
+          ['AFAL_NULI', '=', $line],
+      ])->orderBy('AFAL_NUSE', 'desc')->first();
+
+      $nuse = 1;
+      if(!is_null($sec)){
+          $nuse = intval($sec->AFAL_NUSE) + 1;
+      }
+
+      $fileNameArr = explode('.', $tempFile->ARTE_NOAR);
+      array_pop($fileNameArr);
+
+      $noar = implode('.', $fileNameArr);
+      $exte = $tempFile->ARTE_EXTE;
+
+      $ver = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $line],
+          ['AFAL_COMO', '=', $como],
+          ['AFAL_CLDO', '=', $cldo],
+          ['AFAL_NOAR', '=', $noar],
+          ['AFAL_EXTE', '=', $exte],
+      ])->orderBy('AFAL_NUVE', 'desc')->first();
+
+      $nuve = 1;
+      if(!is_null($ver)){
+          $nuve = intval($sec->AFAL_NUVE) + 1;
+      }
+
+      $tama = $tempFile->ARTE_TAMA;
+      $ubiFileArr = explode('tempFiles', $tempFile->ARTE_UBTE);
+      $ubic = $ubiFileArr[0] . 'files' . $ubiFileArr[1];
+
+      if(file_exists($tempFile->ARTE_UBTE)){
+          rename($tempFile->ARTE_UBTE, $ubic);
+          DB::table('S002V01TARTE')->where([
+              ['ARTE_IDAR', '=', $tempFile->ARTE_IDAR],
+              ['ARTE_NULI', '=', $line],
+          ])->update([
+              'ARTE_ESTA' => 'Eliminado',
+              'ARTE_USMO' => $idUser,
+              'ARTE_FEMO' => $nowStr,
+          ]);
+      }
+
+      $code = $line < 10 ? "0$line" : "$line";
+      $code .= "-$como-$cldo-$fecr-";
+
+      for($i = strlen($nuse); $i < 6; $i++){
+          $code .= "0";
+      }
+
+      $code .= "$nuse=";
+      $code .= $nuve < 10 ? "0$nuve=" : "$nuve=";
+      $code .= "$noar.$exte";
+
+      $usac = json_encode([$idUser]);
+
+      DB::table('S002V01TAFAL')->insert([
+          'AFAL_NULI' => $line,
+          'AFAL_COMO' => $como,
+          'AFAL_CLDO' => $cldo,
+          'AFAL_FECR' => $fecr,
+          'AFAL_NUSE' => $nuse,
+          'AFAL_NUVE' => $nuve,
+          'AFAL_NOAR' => $noar,
+          'AFAL_EXTE' => $exte,
+          'AFAL_TAMA' => $tama,
+          'AFAL_UBIC' => $ubic,
+          'AFAL_USAC' => $usac,
+          'AFAL_USRE' => $idUser,
+          'AFAL_FERE' => $nowStr
+      ]);
+
+      return [true, $code];
+  }
+  
+  public function getPublicDocumentURL($id, $idUser, $line) {
+      DB::enableQueryLog();
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $line],
+          ['USUA_IDUS', '=', $idUser],
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $id = $this->encryptionController->decrypt($id);
+      if(!$id){
+          return $this->responseController->makeResponse(true, 'El ID del archivo solicitado no está encriptado correctamente.', [], 400);
+      }
+
+      $idArr = explode('=', $id);
+      $codeArr = explode('-', $idArr[0]);
+
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idArr[1]],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }
+
+      $ubicArr = explode('storage', $file->AFAL_UBIC);
+      $publicUbi = "$ubicArr[0]public_files\\$id";
+
+      if(!file_exists($publicUbi)){
+          copy($file->AFAL_UBIC, $publicUbi);
+      }
+
+      $publicUbiStr = str_replace('C:\inetpub\wwwroot\\', 'http://git.ittec.mx/', $publicUbi);
+      $publicUbiStr = str_replace('\\', '/', $publicUbiStr);
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $line,
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Consulta',
+          "El usuario $name (" . $usr->USUA_IDUS . ") consultó la URL pública del archivo $id.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
+      return $this->responseController->makeresponse(false, "EXITO", ['public_uri' => $publicUbiStr]);
+  }
+
+  public function getFileAccess($id, $idUser, $line) {
+      DB::enableQueryLog();
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $line],
+          ['USUA_IDUS', '=', $idUser],
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $id = $this->encryptionController->decrypt($id);
+      if(!$id){
+          return $this->responseController->makeResponse(true, 'El ID del archivo solicitado no está encriptado correctamente.', [], 400);
+      }
+
+      $idArr = explode('=', $id);
+      $codeArr = explode('-', $idArr[0]);
+
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idArr[1]],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }
+
+      $owner = $this->encryptionController->encrypt($file->AFAL_USRE);
+      $permissionsArr = json_decode($file->AFAL_USAC, true);
+      foreach($permissionsArr as $k=>$v){
+          $idEnc = $this->encryptionController->encrypt($v);
+          $permissionsArr[$k] = $idEnc;
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $line,
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Consulta',
+          "El usuario $name (" . $usr->USUA_IDUS . ") consultó los usuarios con acceso al archivo $id.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
+      return $this->responseController->makeresponse(false, "EXITO", [
+          'access' => $permissionsArr,
+          'owner' => $owner
+      ]);
+  }
+  
+  public function updateFilePermissions(Request $request) {
+      DB::enableQueryLog();
+
+      $validator = Validator::make($request->all(), [
+          'id_user' => 'required|string',
+          'id_file' => 'required|string',
+          'linea' => 'required|integer',
+          'permissions' => 'required|json',
+      ]);
+
+      if($validator->fails()){
+          return $this->responseController->makeResponse(
+              true,
+              "Se encontraron uno o más errores.",
+              $this->responseController->makeErrors(
+                  $validator->errors()->messages()
+              ),
+              401
+          );
+      }
+
+      $form = $request->all();
+      $idUser = $this->encryptionController->decrypt($form['id_user']);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, "El ID del usuario que realizó la petición no fue encriptado correctamente", [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $form['linea']],
+          ['USUA_IDUS', '=', $idUser],
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
+      }
+
+      $idFile = $this->encryptionController->decrypt($form['id_file']);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, "El ID del archivo solicitado no fue encriptado correctamente.", [], 400);
+      }
+
+      $idFileArr = explode('=', $idFile);
+      $codeArr = explode('-', $idFileArr[0]);
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idFileArr[1]],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }
+
+      $permissionsArr = json_decode($file->AFAL_USAC, true);
+      if(!in_array($idUser, $permissionsArr)){
+          $usrName = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA) . " ($idUser)";
+          return $this->responseController->makeResponse(true, "El usuario $usrName no tiene permisos para modificar el archivo $idFile.", [], 401);
+      }
+
+      $newPermissionsArr = json_decode($form['permissions'], true);
+      if(count($newPermissionsArr) <= 0){
+          return $this->responseController->makeResponse(true, "El arreglo de permisos está vacío.", [], 400);
+      }
+
+      $newPermissionsArrDec = [];
+      foreach($newPermissionsArr as $val){
+          $idDec = $this->encryptionController->decrypt($val);
+          if(!$idDec){
+              return $this->responseController->makeResponse(true, "Alguno de los ID's enviados no fue encriptado correctamente.", [], 400);
+          }
+
+          $newPermissionsArrDec[] = $idDec;
+      }
+
+      if(!in_array($file->AFAL_USRE, $newPermissionsArrDec)){
+          return $this->responseController->makeResponse(true, "El arreglo de permisos no incluye el ID del propietario.", [], 401);
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $usac = json_encode($newPermissionsArrDec);
+      DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idFileArr[1]],
+      ])->update([
+          'AFAL_USAC' => $usac,
+          'AFAL_USMO' => $idUser,
+          'AFAL_FEMO' => $nowStr,
+      ]);
+      
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $form['linea'],
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Actualización',
+          "El usuario $name (" . $usr->USUA_IDUS . ") actualizó los usuarios con acceso del archivo $idFile.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
+      return $this->responseController->makeresponse(false, "EXITO");
+  }
+
+  public function deleteFile(Request $request) {
+      DB::enableQueryLog();
+
+      $validator = Validator::make($request->all(), [
+          'id_user' => 'required|string',
+          'id_file' => 'required|string',
+          '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
+          );
+      }
+
+      $form = $request->all();
+      $idUser = $this->encryptionController->decrypt($form['id_user']);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, "El ID del usuario que realizó la petición no fue encriptado correctamente", [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $form['linea']],
+          ['USUA_IDUS', '=', $idUser],
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
+      }
+
+      $idFile = $this->encryptionController->decrypt($form['id_file']);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, "El ID del archivo solicitado no fue encriptado correctamente.", [], 400);
+      }
+
+      $idFileArr = explode('=', $idFile);
+      $codeArr = explode('-', $idFileArr[0]);
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idFileArr[1]],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }else if($file->AFAL_ESTA == 'Eliminado'){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado está eliminado.', [], 401);
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idFileArr[1]],
+      ])->update([
+          'AFAL_ESTA' => 'Eliminado',
+          'AFAL_USMO' => $idUser,
+          'AFAL_FEMO' => $nowStr
+      ]);
+      
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $form['linea'],
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Eliminación',
+          "El usuario $name (" . $usr->USUA_IDUS . ") eliminó el archivo $idFile.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
+      return $this->responseController->makeresponse(false, "EXITO");
+  }
+
+  public function getAssociatedWorkOrders($idFile, $idUser, $line) {
+      DB::enableQueryLog();
+
+      $idUser = $this->encryptionController->decrypt($idUser);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, 'El ID del usuario que realizó la petición no está encriptado correctamente.', [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $line],
+          ['USUA_IDUS', '=', $idUser]
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado.', [], 404);
+      }
+
+      $idFile = $this->encryptionController->decrypt($idFile);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, 'El ID del archivo solicitado no está encriptado correctamente.', [], 400);
+      }
+
+      $idFileArr = explode('=', $idFile);
+      $codeArr = explode('-', $idFileArr[0]);
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $line],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idFileArr[1]],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }
+
+      $orders = DB::table('S002V01TOTPR')
+      ->select([
+          'OTPR_IDOT AS IDORDEN',
+          'OTPR_EQIN AS EQUIPAMIENTO',
+          'OTPR_ACAS AS ACTIVADOR',
+          'OTPR_CLAS AS CLASIFICACION',
+          'ACTI_PRIO AS PRIORIDAD',
+          'ACTI_TIAC AS TIPOACTIVADOR'
+      ])->join('S002V01TACTI', 'OTPR_ACAS', '=', 'ACTI_IDCO')
+      ->where('OTPR_NULI', '=', $line)
+      ->whereJsonContains('OTPR_DONE', $idFile)->get()->all();
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $line,
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Consulta',
+          "El usuario $name (" . $usr->USUA_IDUS . ") consultó las órdenes de trabajo relacionadas al archivo $idFile.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $line);
+      return $this->responseController->makeresponse(false, "EXITO", $orders);
+  }
+
+  public function changeAssociationStatus(Request $request) {
+      DB::enableQueryLog();
+
+      $validator = Validator::make($request->all(), [
+          'id_user' => 'required|string',
+          'linea' => 'required|integer',
+          'id_file' => 'required|string',
+          'action' => 'required|string|in:disassociate,associate',
+          'id_order' => 'required|string',
+      ]);
+
+      if($validator->fails()){
+          return $this->responseController->makeResponse(
+              true,
+              "Se encontraron uno o más errores.",
+              $this->responseController->makeErrors(
+                  $validator->errors()->messages()
+              ),
+              401
+          );
+      }
+
+      $form = $request->all();
+      $idUser = $this->encryptionController->decrypt($form['id_user']);
+      if(!$idUser){
+          return $this->responseController->makeResponse(true, "El ID del usuario que realizó la petición no fue encriptado correctamente", [], 400);
+      }
+
+      $usr = DB::table('S002V01TUSUA')->where([
+          ['USUA_NULI', '=', $form['linea']],
+          ['USUA_IDUS', '=', $idUser],
+      ])->first();
+
+      if(is_null($usr)){
+          return $this->responseController->makeResponse(true, 'El usuario que realizó la consulta no está registrado', [], 404);
+      }
+
+      $idFile = $this->encryptionController->decrypt($form['id_file']);
+      if(!$idFile){
+          return $this->responseController->makeResponse(true, "El ID del archivo solicitado no fue encriptado correctamente.", [], 400);
+      }
+
+      $idFileArr = explode('=', $idFile);
+      $codeArr = explode('-', $idFileArr[0]);
+      $file = DB::table('S002V01TAFAL')->where([
+          ['AFAL_NULI', '=', $codeArr[0]],
+          ['AFAL_COMO', '=', $codeArr[1]],
+          ['AFAL_CLDO', '=', $codeArr[2]],
+          ['AFAL_FECR', '=', $codeArr[3]],
+          ['AFAL_NUSE', '=', $codeArr[4]],
+          ['AFAL_NUVE', '=', $idFileArr[1]],
+      ])->first();
+
+      if(is_null($file)){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado no está registrado.', [], 404);
+      }else if($file->AFAL_ESTA == 'Eliminado'){
+          return $this->responseController->makeResponse(true, 'El archivo solicitado está eliminado.', [], 401);
+      }
+
+      $idOrder = $this->encryptionController->decrypt($form['id_order']);
+      if(!$idOrder){
+          return $this->responseController->makeResponse(true, 'El ID de la orden solicitada no fue encriptado correctamente.', [], 400);
+      }
+
+      $workOrder = DB::table('S002V01TOTPR')->where([
+          ['OTPR_NULI', '=', $form['linea']],
+          ['OTPR_IDOT', '=', $idOrder]
+      ])->first();
+      
+      if(is_null($workOrder)){
+          return $this->responseController->makeResponse(true, 'La orden solicitada no existe', [], 404);
+      }else if($workOrder->OTPR_ESTA == 'E'){
+          return $this->responseController->makeResponse(true, 'La orden solicitada está eliminada', [], 401);
+      }
+      
+      $filesArr = json_decode($workOrder->OTPR_DONE, true);
+      if($form['action'] == 'disassociate'){
+          if(!in_array($idFile, $filesArr)){
+              return $this->responseController->makeResponse(true, 'El archivo enviado no está asociado a la orden de trabajo.', [], 401);
+          }
+
+          $filesArrAux = [];
+          foreach($filesArr as $fileStr){
+              if($fileStr != $idFile){
+                  $filesArrAux[] = $fileStr;
+              }
+          }
+
+          $filesArr = $filesArrAux;
+      }else{
+          if(in_array($idFile, $filesArr)){
+              return $this->responseController->makeResponse(true, 'El archivo enviado ya está asociado a la orden de trabajo.', [], 401);
+          }
+          $filesArr[] = $idFile;
+      }
+
+      $now = $this->functionsController->now();
+      $nowStr = $now->toDateTimeString();
+      $filesStr = json_encode($filesArr);
+
+      DB::table('S002V01TOTPR')->where([
+          ['OTPR_NULI', '=', $form['linea']],
+          ['OTPR_IDOT', '=', $idOrder]
+      ])->update([
+          'OTPR_DONE' => $filesStr,
+          'OTPR_USMO' => $idUser,
+          'OTPR_FEMO' => $nowStr,
+      ]);
+      
+      $actions = DB::getQueryLog();
+      $name = $this->functionsController->joinName($usr->USUA_NOMB, $usr->USUA_APPA, $usr->USUA_APMA);
+
+      $idac = $this->functionsController->registerActivity(
+          $form['linea'],
+          'S002V01M04GDEL',
+          'S002V01F01ADDO',
+          'S002V01P01GEDO',
+          'Actualización',
+          "El usuario $name (" . $usr->USUA_IDUS . ") actualizó la relación del archivo $idFile y la orden de trabajo #$idOrder.",
+          $idUser,
+          $nowStr
+      );
+
+      $this->functionsController->registerLog($actions, $idUser, $nowStr, $idac, $form['linea']);
+      return $this->responseController->makeresponse(false, "EXITO");
+  }
 }