|
|
@@ -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';
|
|
|
}
|
|
|
-}
|
|
|
+}
|