Преглед изворни кода

cambio a la funcion emitNotificacion para manejo de arrays en audience

EmilianoOrtiz пре 1 месец
родитељ
комит
44157fe049

+ 167 - 109
sistema-mantenimiento-back/app/Http/Controllers/AsyncValidateLoadArchivesController.php

@@ -24,7 +24,7 @@ class AsyncValidateLoadArchivesController extends Controller
     private $functionsController;
     private $notificationsController;
     private $socketClient;
-    
+
     // Expected headers in row 7 of Excel file with their corresponding column letters
     private $expectedHeaders = [
         ['letter' => 'D', 'category' => 'CÓDIGO DE EQUIPO'],
@@ -38,20 +38,41 @@ class AsyncValidateLoadArchivesController extends Controller
         ['letter' => 'V', 'category' => 'DOCUMENTOS ADICIONALES']
     ];
 
-     // Mapping of file extensions to their types for validation
+    // Mapping of file extensions to their types for validation
     private $extensionTypes = [
         // Archivos de almacenamiento
-        'zip' => 'STORAGE', 'rar' => 'STORAGE', 'tar' => 'STORAGE', '7z' => 'STORAGE',
+        'zip' => 'STORAGE',
+        'rar' => 'STORAGE',
+        'tar' => 'STORAGE',
+        '7z' => 'STORAGE',
         // Formatos de audio
-        'mp3' => 'AUDIO', 'mpeg' => 'AUDIO', 'wav' => 'AUDIO', 'ogg' => 'AUDIO', 'opus' => 'AUDIO',
+        'mp3' => 'AUDIO',
+        'mpeg' => 'AUDIO',
+        'wav' => 'AUDIO',
+        'ogg' => 'AUDIO',
+        'opus' => 'AUDIO',
         // Archivos de imagen
-        'jpeg' => 'IMG', 'jpg' => 'IMG', 'png' => 'IMG', 'gif' => 'IMG', 'bmp' => 'IMG', 'tiff' => 'IMG', 'svg' => 'IMG',
+        'jpeg' => 'IMG',
+        'jpg' => 'IMG',
+        'png' => 'IMG',
+        'gif' => 'IMG',
+        'bmp' => 'IMG',
+        'tiff' => 'IMG',
+        'svg' => 'IMG',
         // Archivos de texto
         'txt' => 'TEXT',
         // Archivos de video
-        'webm' => 'VIDEO', 'mpeg4' => 'VIDEO', 'mp4' => 'VIDEO', '3gpp' => 'VIDEO', 'mov' => 'VIDEO', 'avi' => 'VIDEO', 'wmv' => 'VIDEO', 'flv' => 'VIDEO',
+        'webm' => 'VIDEO',
+        'mpeg4' => 'VIDEO',
+        'mp4' => 'VIDEO',
+        '3gpp' => 'VIDEO',
+        'mov' => 'VIDEO',
+        'avi' => 'VIDEO',
+        'wmv' => 'VIDEO',
+        'flv' => 'VIDEO',
         // Planos de Auto CAD
-        'dwg' => 'CAD', 'dxf' => 'CAD',
+        'dwg' => 'CAD',
+        'dxf' => 'CAD',
         // Modelos de 3D Studio
         '3ds' => '3D',
         // Dibujos de Illustrator
@@ -61,13 +82,17 @@ class AsyncValidateLoadArchivesController extends Controller
         // Formato de documento portátil
         'pdf' => 'PDF',
         // Hoja de cálculo en Excel
-        'xls' => 'EXCEL', 'xlsx' => 'EXCEL',
+        'xls' => 'EXCEL',
+        'xlsx' => 'EXCEL',
         // Presentaciones de PowerPoint
-        'ppt' => 'POWERPOINT', 'pptx' => 'POWERPOINT',
+        'ppt' => 'POWERPOINT',
+        'pptx' => 'POWERPOINT',
         // Documentos de texto de Word
-        'doc' => 'WORD', 'docx' => 'WORD',
+        'doc' => 'WORD',
+        'docx' => 'WORD',
         // Dibujos de Visio
-        'vsd' => 'VISIO', 'vsdx' => 'VISIO'
+        'vsd' => 'VISIO',
+        'vsdx' => 'VISIO'
     ];
 
     public function __construct()
@@ -88,21 +113,23 @@ class AsyncValidateLoadArchivesController extends Controller
     /**
      * EmitNotification use  
      */
-    public function emitNotification(Request $request):bool{
+    public function emitNotification(Request $request): bool
+    {
+        Log::info($request);
         $module = $request['module'];
         $title = $request['title'];
         $content = $request['content'];
         $actions = is_string($request['actions']) ? json_decode($request['actions'], true) : $request['actions'];
-        $audience = [$request['audience']];
-        $idUser = $request['idUser'] ?? $request['audience'];
+        //$audience = [$request['audience']];
+        $audience = is_array($request['audience']) ? $request['audience'] : [$request['audience']];
+        $idUser = $request['idUser'] ?? 1;
         $line = $request['line'] ?? 1;
         $idOrder = $request['idOrder'] ?? null;
         $orderType = $request['orderType'] ?? null;
 
-        $this->notificationsController->emitNotification($module, $title, $content, $actions, $audience, $idUser, $line, $this->socketClient ,$idOrder, $orderType);
+        $this->notificationsController->emitNotification($module, $title, $content, $actions, $audience, $idUser, $line, $this->socketClient, $idOrder, $orderType);
 
         return true;
-
     }
 
 
@@ -111,19 +138,21 @@ class AsyncValidateLoadArchivesController extends Controller
      *
      */
 
-    public function encrypt(Request $request){
+    public function encrypt(Request $request)
+    {
         $encryptString = $this->encryptionController->encrypt($request['value']);
-         if(!$encryptString){
-             return $this->responseController->makeResponse(true, "La cadena no fue encriptada correctamente", [], 400);
-         }
-         return $this->responseController->makeResponse(false, "Cadena encriptada correctamente", ['encrypted' => $encryptString], 200);
+        if (!$encryptString) {
+            return $this->responseController->makeResponse(true, "La cadena no fue encriptada correctamente", [], 400);
+        }
+        return $this->responseController->makeResponse(false, "Cadena encriptada correctamente", ['encrypted' => $encryptString], 200);
     }
 
     /**
      * Validation endpoint that dispatches file process to bat job
      */
 
-    public function validateFilesWithBat(Request $request){
+    public function validateFilesWithBat(Request $request)
+    {
         $validator = Validator::make($request->all(), [
             'id_user' => 'required|string',
             'linea' => 'required|integer',
@@ -139,10 +168,10 @@ class AsyncValidateLoadArchivesController extends Controller
                 400
             );
         }
-        
+
         $jobId = Str::uuid();
         $userId = '0000000001';
-        
+
         // $idUser = $this->encryptionController->decrypt($request->input('id_user'));
         // if(!$idUser){
         //     return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
@@ -154,7 +183,7 @@ class AsyncValidateLoadArchivesController extends Controller
             return $this->responseController->makeResponse(true, $excelValidation['message'], [], 400);
         }
 
-        
+
         // Validate ZIP file integrity
         $zipValidation = $this->validateZipFile($request->file('zip_file'));
         if ($zipValidation['error']) {
@@ -177,44 +206,44 @@ class AsyncValidateLoadArchivesController extends Controller
             return $this->responseController->makeResponse(true, $comparison['error'], [], 400);
         }
 
-        
+
         // Upload temp files
         $tempFiles = $this->uploadTempFiles($request);
         if ($tempFiles['error']) {
             return $this->responseController->makeResponse(
-                true, 
-                $tempFiles['message'], 
+                true,
+                $tempFiles['message'],
                 [
                     'valid' => false,
                     'missing_in_zip' => $comparison['missing_in_zip'] ?? [],
                     'extra_in_zip' => $comparison['extra_in_zip'] ?? []
-                ], 
+                ],
                 400
             );
         }
 
         if (!$comparison['valid']) {
             return $this->responseController->makeResponse(
-                true, 
-                'Los archivos no coinciden entre Excel y ZIP', 
+                true,
+                'Los archivos no coinciden entre Excel y ZIP',
                 [
                     'valid' => false,
                     'missing_in_zip' => $comparison['missing_in_zip'],
                     'extra_in_zip' => $comparison['extra_in_zip']
-                ], 
+                ],
                 400
             );
         }
 
 
-         $idFileZip = $this->encryptionController->decrypt($tempFiles['files']['zip']);
-         if(!$idFileZip){
-             return $this->responseController->makeResponse(true, "El id del archivo que desea eliminar no fue encriptado correctamente", [], 400);
-         }
-        
-         $idFileExcel = $this->encryptionController->decrypt($tempFiles['files']['excel']);
-         if(!$idFileExcel){
-             return $this->responseController->makeResponse(true, "El id del archivo que desea eliminar no fue encriptado correctamente", [], 400);
+        $idFileZip = $this->encryptionController->decrypt($tempFiles['files']['zip']);
+        if (!$idFileZip) {
+            return $this->responseController->makeResponse(true, "El id del archivo que desea eliminar no fue encriptado correctamente", [], 400);
+        }
+
+        $idFileExcel = $this->encryptionController->decrypt($tempFiles['files']['excel']);
+        if (!$idFileExcel) {
+            return $this->responseController->makeResponse(true, "El id del archivo que desea eliminar no fue encriptado correctamente", [], 400);
         }
 
         // Guardar en bd::S002V01TVAJO 
@@ -229,12 +258,12 @@ class AsyncValidateLoadArchivesController extends Controller
             'VAJO_FERE' => now(),
             'VAJO_FEMO' => now()
         ]);
-        
+
         return $this->responseController->makeResponse(
-            false, 
-            'Validación iniciada', 
+            false,
+            'Validación iniciada',
             [
-                'job_id' => $validationJobId, 
+                'job_id' => $validationJobId,
                 'status' => 'queued',
                 'valid' => $comparison['valid'],
                 'missing_in_zip' => $comparison['missing_in_zip'],
@@ -243,8 +272,8 @@ class AsyncValidateLoadArchivesController extends Controller
         );
     }
 
-        
-     /**
+
+    /**
      * Process endpoint that moves temp files to final storage
      */
     public function processLoadArchives(Request $request)
@@ -266,53 +295,53 @@ class AsyncValidateLoadArchivesController extends Controller
                 400
             );
         }
-        
+
         $form = $request->all();
         $idUser  = '0000000001';
-        
+
         // $idUser = $this->encryptionController->decrypt($form['id_user']);
         // if (!$idUser) {
         //     return $this->responseController->makeResponse(true, 'ID de usuario inválido.', [], 400);
         // }
-        
+
         $finalFiles = [];
-        
+
         try {
             // Verificar estado de archivos antes de procesarlos
             $tempFiles = [$form['temp_files']['excel'], $form['temp_files']['zip']];
             foreach ($form['individual_temp_files'] as $tempFile) {
                 $tempFiles[] = $tempFile['temp_id'];
             }
-            
+
             foreach ($tempFiles as $tempId) {
                 $tempIdDec = $this->encryptionController->decrypt($tempId);
                 if ($tempIdDec) {
                     $tempFile = DB::table('S002V01TARTE')->where('ARTE_IDAR', $tempIdDec)->first();
                     if ($tempFile && $tempFile->ARTE_ESTA === 'Eliminado') {
                         return $this->responseController->makeResponse(
-                            true, 
-                            'La acción no puede completarse porque uno o más archivos han sido eliminados lógicamente.', 
-                            [], 
+                            true,
+                            'La acción no puede completarse porque uno o más archivos han sido eliminados lógicamente.',
+                            [],
                             400
                         );
                     }
                 }
             }
-            
+
             // Move Excel to final
             $excelFinal = $this->moveToFinal($form['temp_files']['excel'], $form['linea'], $idUser);
             if (!$excelFinal) {
                 return $this->responseController->makeResponse(true, 'Error procesando Excel', [], 400);
             }
             $finalFiles['excel'] = $excelFinal;
-            
+
             // Move ZIP to final
             $zipFinal = $this->moveToFinal($form['temp_files']['zip'], $form['linea'], $idUser);
             if (!$zipFinal) {
                 return $this->responseController->makeResponse(true, 'Error procesando ZIP', [], 400);
             }
             $finalFiles['zip'] = $zipFinal;
-            
+
             // Move individual temp files to final storage
             $individualFiles = [];
             foreach ($form['individual_temp_files'] as $tempFile) {
@@ -326,13 +355,12 @@ class AsyncValidateLoadArchivesController extends Controller
             }
             $finalFiles['individual_files'] = $individualFiles;
             return $this->responseController->makeResponse(false, 'Archivos procesados exitosamente.', $finalFiles);
-            
         } catch (\Exception $e) {
             return $this->responseController->makeResponse(true, 'Error interno: ' . $e->getMessage(), [], 500);
         }
     }
 
-      /**
+    /**
      * Moves a temporary file to final storage using DocumentManagementController
      */
     private function moveToFinal($tempId, $line, $idUser)
@@ -342,20 +370,19 @@ class AsyncValidateLoadArchivesController extends Controller
             if (!$tempIdDec) {
                 return false;
             }
-            
+
             $tempFile = DB::table('S002V01TARTE')->where('ARTE_IDAR', $tempIdDec)->first();
             if (!$tempFile) {
                 return false;
             }
-            
+
             // Validar estado del archivo temporal
             if ($tempFile->ARTE_ESTA === 'Eliminado') {
                 return false;
             }
-            
+
             $result = $this->documentManagementController->moveFinalFile($line, 'ADSI', 'LA', $tempFile, $idUser);
             return $result[0] ? $result[1] : false;
-            
         } catch (\Exception $e) {
             return false;
         }
@@ -370,7 +397,7 @@ class AsyncValidateLoadArchivesController extends Controller
         try {
             $spreadsheet = IOFactory::load($file->getPathname());
             $worksheet = $spreadsheet->getActiveSheet();
-            
+
             // Check each expected header in row 7
             foreach ($this->expectedHeaders as $header) {
                 $cellValue = $worksheet->getCell($header['letter'] . '7')->getValue();
@@ -381,7 +408,7 @@ class AsyncValidateLoadArchivesController extends Controller
                     ];
                 }
             }
-            
+
 
             return ['error' => false];
         } catch (\Exception $e) {
@@ -396,21 +423,21 @@ class AsyncValidateLoadArchivesController extends Controller
     {
         $zip = new ZipArchive();
         $result = $zip->open($file->getPathname());
-        
+
         if ($result !== TRUE) {
             return ['error' => true, 'message' => 'No se pudo abrir el archivo ZIP.'];
         }
-        
+
         if ($zip->numFiles === 0) {
             $zip->close();
             return ['error' => true, 'message' => 'El archivo ZIP está vacío.'];
         }
-        
+
 
         $zip->close();
         return ['error' => false];
     }
-    
+
     /**
      * Extracts file listings from Excel starting from row 8
      * Validates file extensions and creates structured file list
@@ -423,30 +450,30 @@ class AsyncValidateLoadArchivesController extends Controller
             $worksheet = $spreadsheet->getActiveSheet();
             $highestRow = $worksheet->getHighestRow();
             $files = [];
-            
 
-            
+
+
             // Process each row starting from row 8 (data rows)
             for ($row = 8; $row <= $highestRow; $row++) {
                 $equipmentCode = trim($worksheet->getCell('D' . $row)->getValue());
                 if (empty($equipmentCode)) continue; // Skip rows without equipment code
-                
+
                 $hasFiles = false;
                 $rowFiles = [];
-                
+
                 // Check each file category column (excluding equipment code column D)
                 foreach ($this->expectedHeaders as $header) {
                     if ($header['letter'] === 'D') continue;
-                    
+
                     $cellValue = trim($worksheet->getCell($header['letter'] . $row)->getValue());
                     if (empty($cellValue)) continue;
-                    
+
                     // Handle multiple files separated by commas
                     $fileNames = explode(',', $cellValue);
                     foreach ($fileNames as $fileName) {
                         $fileName = trim($fileName);
                         if (empty($fileName)) continue;
-                        
+
                         // Validate file extension 
                         $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
                         if (!isset($this->extensionTypes[$extension])) {
@@ -455,7 +482,7 @@ class AsyncValidateLoadArchivesController extends Controller
                                 'message' => "Extensión inválida '{$extension}' en archivo '{$fileName}' para equipo '{$equipmentCode}'"
                             ];
                         }
-                        
+
                         $rowFiles[] = [
                             'equipment_code' => $equipmentCode,
                             'file_name' => $fileName,
@@ -464,12 +491,12 @@ class AsyncValidateLoadArchivesController extends Controller
                         $hasFiles = true;
                     }
                 }
-                
+
                 if ($hasFiles) {
                     $files = array_merge($files, $rowFiles);
                 }
             }
-            
+
 
             return ['error' => false, 'files' => $files];
         } catch (\Exception $e) {
@@ -477,7 +504,7 @@ class AsyncValidateLoadArchivesController extends Controller
             return ['error' => true, 'message' => 'Error al extraer archivos del Excel: ' . $e->getMessage()];
         }
     }
-    
+
     /**
      * Compares file listings from Excel with actual files in ZIP
      * Returns validation status and lists of missing/extra files
@@ -486,20 +513,20 @@ class AsyncValidateLoadArchivesController extends Controller
     {
         $zip = new ZipArchive();
         $zip->open($zipFile->getPathname());
-        
 
-        
+
+
         // Extract all file names and sizes from ZIP
         $zipFiles = [];
         $zipFileSizes = [];
         for ($i = 0; $i < $zip->numFiles; $i++) {
             $fullPath = $zip->getNameIndex($i);
-            
+
             // Skip directories (entries ending with /)
             if (substr($fullPath, -1) === '/') {
                 continue;
             }
-            
+
             // Extract filename and size
             $fileName = basename($fullPath);
             if (!empty($fileName)) {
@@ -508,7 +535,7 @@ class AsyncValidateLoadArchivesController extends Controller
             }
         }
         $zip->close();
-        
+
         // Validate file sizes using FunctionsController
         foreach ($zipFileSizes as $fileName => $size) {
             $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
@@ -520,17 +547,17 @@ class AsyncValidateLoadArchivesController extends Controller
                 ];
             }
         }
-        
+
         // Get file names from Excel listings
         $excelFileNames = array_column($excelFiles, 'file_name');
-        
+
         // Find discrepancies between Excel and ZIP
         $missingInZip = array_diff($excelFileNames, $zipFiles);
         $extraInZip = array_diff($zipFiles, $excelFileNames);
-        
+
         $isValid = empty($missingInZip) && empty($extraInZip);
 
-        
+
         return [
             'valid' => $isValid,
             'missing_in_zip' => array_values($missingInZip),
@@ -546,7 +573,7 @@ class AsyncValidateLoadArchivesController extends Controller
         try {
 
             $tempFiles = [];
-            
+
             // Upload Excel file
             $excelRequest = new Request();
             $excelRequest->files->set('file', $request->file('excel_file'));
@@ -554,18 +581,18 @@ class AsyncValidateLoadArchivesController extends Controller
                 'id_user' => $request->input('id_user'),
                 'linea' => $request->input('linea')
             ]);
-            
+
             $excelResponse = $this->documentManagementController->uploadTempFile($excelRequest);
             $excelData = json_decode($excelResponse->getContent());
-            
+
             if ($excelData->error) {
                 $errorMsg = isset($excelData->message) ? $excelData->message : 'Error desconocido subiendo Excel';
 
                 return ['error' => true, 'message' => 'Error subiendo Excel: ' . $errorMsg];
             }
-            
+
             $tempFiles['excel'] = $excelData->response->idArchivo;
-            
+
             // Upload ZIP file
             $zipRequest = new Request();
             $zipRequest->files->set('file', $request->file('zip_file'));
@@ -573,43 +600,74 @@ class AsyncValidateLoadArchivesController extends Controller
                 'id_user' => $request->input('id_user'),
                 'linea' => $request->input('linea')
             ]);
-            
+
             $zipResponse = $this->documentManagementController->uploadTempFile($zipRequest);
             $zipData = json_decode($zipResponse->getContent());
-            
+
             if ($zipData->error) {
                 $errorMsg = isset($zipData->message) ? $zipData->message : 'Error desconocido subiendo ZIP';
 
                 return ['error' => true, 'message' => 'Error subiendo ZIP: ' . $errorMsg];
             }
-            
+
             $tempFiles['zip'] = $zipData->response->idArchivo;
-            
+
 
             return ['error' => false, 'files' => $tempFiles];
-            
         } catch (\Exception $e) {
 
             return ['error' => true, 'message' => 'Error en uploadTempFiles: ' . $e->getMessage()];
         }
     }
-    
+
 
 
     /**
      * Gets file type based on extension
      */
-    private function getFileType($extension){
+    private function getFileType($extension)
+    {
         $typeMap = [
-            'zip' => 'STORAGE', 'rar' => 'STORAGE', 'tar' => 'STORAGE', '7z' => 'STORAGE',
-            'mp3' => 'AUDIO', 'mpeg' => 'AUDIO', 'wav' => 'AUDIO', 'ogg' => 'AUDIO', 'opus' => 'AUDIO',
-            'jpeg' => 'IMG', 'jpg' => 'IMG', 'png' => 'IMG', 'gif' => 'IMG', 'bmp' => 'IMG', 'tiff' => 'IMG', 'svg' => 'IMG',
+            'zip' => 'STORAGE',
+            'rar' => 'STORAGE',
+            'tar' => 'STORAGE',
+            '7z' => 'STORAGE',
+            'mp3' => 'AUDIO',
+            'mpeg' => 'AUDIO',
+            'wav' => 'AUDIO',
+            'ogg' => 'AUDIO',
+            'opus' => 'AUDIO',
+            'jpeg' => 'IMG',
+            'jpg' => 'IMG',
+            'png' => 'IMG',
+            'gif' => 'IMG',
+            'bmp' => 'IMG',
+            'tiff' => 'IMG',
+            'svg' => 'IMG',
             'txt' => 'TEXT',
-            'webm' => 'VIDEO', 'mpeg4' => 'VIDEO', 'mp4' => 'VIDEO', '3gpp' => 'VIDEO', 'mov' => 'VIDEO', 'avi' => 'VIDEO', 'wmv' => 'VIDEO', 'flv' => 'VIDEO',
-            'dwg' => 'CAD', 'dxf' => 'CAD', '3ds' => '3D', 'ai' => 'ILLUSTRATOR', 'psd' => 'PHOTOSHOP',
-            'pdf' => 'PDF', 'xls' => 'EXCEL', 'xlsx' => 'EXCEL', 'ppt' => 'POWERPOINT', 'pptx' => 'POWERPOINT',
-            'doc' => 'WORD', 'docx' => 'WORD', 'vsd' => 'VISIO', 'vsdx' => 'VISIO'
+            'webm' => 'VIDEO',
+            'mpeg4' => 'VIDEO',
+            'mp4' => 'VIDEO',
+            '3gpp' => 'VIDEO',
+            'mov' => 'VIDEO',
+            'avi' => 'VIDEO',
+            'wmv' => 'VIDEO',
+            'flv' => 'VIDEO',
+            'dwg' => 'CAD',
+            'dxf' => 'CAD',
+            '3ds' => '3D',
+            'ai' => 'ILLUSTRATOR',
+            'psd' => 'PHOTOSHOP',
+            'pdf' => 'PDF',
+            'xls' => 'EXCEL',
+            'xlsx' => 'EXCEL',
+            'ppt' => 'POWERPOINT',
+            'pptx' => 'POWERPOINT',
+            'doc' => 'WORD',
+            'docx' => 'WORD',
+            'vsd' => 'VISIO',
+            'vsdx' => 'VISIO'
         ];
         return $typeMap[$extension] ?? 'UNKNOWN';
     }
-}
+}