|
|
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
|
use ZipArchive;
|
|
|
|
|
|
@@ -15,6 +16,8 @@ use ZipArchive;
|
|
|
class ValidateLoadArchivesController extends Controller
|
|
|
{
|
|
|
private $responseController;
|
|
|
+ private $encryptionController;
|
|
|
+ private $documentManagementController;
|
|
|
|
|
|
// Expected headers in row 7 of Excel file with their corresponding column letters
|
|
|
private $expectedHeaders = [
|
|
|
@@ -39,6 +42,8 @@ class ValidateLoadArchivesController extends Controller
|
|
|
public function __construct()
|
|
|
{
|
|
|
$this->responseController = new ResponseController();
|
|
|
+ $this->encryptionController = new EncryptionController();
|
|
|
+ $this->documentManagementController = new DocumentManagementController();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -52,6 +57,8 @@ class ValidateLoadArchivesController extends Controller
|
|
|
// Validate request inputs
|
|
|
Log::info('Paso 1: Validando tipos de archivo');
|
|
|
$validator = Validator::make($request->all(), [
|
|
|
+ 'id_user' => 'required|string',
|
|
|
+ 'linea' => 'required|integer',
|
|
|
'excel_file' => 'required|file|mimes:xlsx,xls',
|
|
|
'zip_file' => 'required|file|mimes:zip'
|
|
|
]);
|
|
|
@@ -104,6 +111,18 @@ class ValidateLoadArchivesController extends Controller
|
|
|
'extra_in_zip' => count($comparison['extra_in_zip'])
|
|
|
]);
|
|
|
|
|
|
+ // Upload temp files if validation is successful
|
|
|
+ if ($comparison['valid']) {
|
|
|
+ Log::info('Paso 6: Subiendo archivos temporales');
|
|
|
+ $tempFiles = $this->uploadTempFiles($request);
|
|
|
+ if ($tempFiles['error']) {
|
|
|
+ Log::error('Error subiendo archivos temporales: ' . $tempFiles['message']);
|
|
|
+ return $this->responseController->makeResponse(true, $tempFiles['message'], [], 400);
|
|
|
+ }
|
|
|
+ Log::info('✓ Archivos temporales subidos');
|
|
|
+ $comparison['temp_files'] = $tempFiles['files'];
|
|
|
+ }
|
|
|
+
|
|
|
Log::info('=== VALIDACIÓN COMPLETADA EXITOSAMENTE ===');
|
|
|
return $this->responseController->makeResponse(false, 'Validación completada.', $comparison);
|
|
|
}
|
|
|
@@ -270,4 +289,143 @@ class ValidateLoadArchivesController extends Controller
|
|
|
'extra_in_zip' => array_values($extraInZip)
|
|
|
];
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Uploads Excel and ZIP files as temporary files using DocumentManagementController
|
|
|
+ */
|
|
|
+ private function uploadTempFiles(Request $request)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $tempFiles = [];
|
|
|
+
|
|
|
+ // Upload Excel file
|
|
|
+ $excelRequest = new Request();
|
|
|
+ $excelRequest->files->set('file', $request->file('excel_file'));
|
|
|
+ $excelRequest->merge([
|
|
|
+ 'id_user' => $request->input('id_user'),
|
|
|
+ 'linea' => $request->input('linea')
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $excelResponse = $this->documentManagementController->uploadTempFile($excelRequest);
|
|
|
+ $excelData = json_decode($excelResponse->getContent());
|
|
|
+
|
|
|
+ Log::info('Excel upload response:', ['data' => $excelData]);
|
|
|
+
|
|
|
+ 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'));
|
|
|
+ $zipRequest->merge([
|
|
|
+ 'id_user' => $request->input('id_user'),
|
|
|
+ 'linea' => $request->input('linea')
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $zipResponse = $this->documentManagementController->uploadTempFile($zipRequest);
|
|
|
+ $zipData = json_decode($zipResponse->getContent());
|
|
|
+
|
|
|
+ Log::info('ZIP upload response:', ['data' => $zipData]);
|
|
|
+
|
|
|
+ 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()];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Process endpoint that moves temp files to final storage
|
|
|
+ */
|
|
|
+ public function processLoadArchives(Request $request)
|
|
|
+ {
|
|
|
+ Log::info('=== INICIANDO PROCESAMIENTO DE ARCHIVOS ===');
|
|
|
+
|
|
|
+ $validator = Validator::make($request->all(), [
|
|
|
+ 'id_user' => 'required|string',
|
|
|
+ 'linea' => 'required|integer',
|
|
|
+ 'temp_files' => 'required|array',
|
|
|
+ 'temp_files.excel' => 'required|string',
|
|
|
+ 'temp_files.zip' => 'required|string'
|
|
|
+ ]);
|
|
|
+
|
|
|
+ if ($validator->fails()) {
|
|
|
+ return $this->responseController->makeResponse(
|
|
|
+ true,
|
|
|
+ 'Se encontraron uno o más errores.',
|
|
|
+ $this->responseController->makeErrors($validator->errors()->messages()),
|
|
|
+ 400
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ $form = $request->all();
|
|
|
+ // $idUser = $this->encryptionController->decrypt($form['id_user']);
|
|
|
+ $idUser = "0000000001";
|
|
|
+ if (!$idUser) {
|
|
|
+ return $this->responseController->makeResponse(true, 'ID de usuario inválido.', [], 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ $finalFiles = [];
|
|
|
+
|
|
|
+ try {
|
|
|
+ // Move Excel to final
|
|
|
+ Log::info('Moviendo Excel a almacenamiento 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
|
|
|
+ Log::info('Moviendo ZIP a almacenamiento 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;
|
|
|
+
|
|
|
+ Log::info('=== PROCESAMIENTO COMPLETADO EXITOSAMENTE ===');
|
|
|
+ return $this->responseController->makeResponse(false, 'Archivos procesados exitosamente.', $finalFiles);
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('Error en procesamiento: ' . $e->getMessage());
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $tempIdDec = $this->encryptionController->decrypt($tempId);
|
|
|
+ if (!$tempIdDec) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $tempFile = DB::table('S002V01TARTE')->where('ARTE_IDAR', $tempIdDec)->first();
|
|
|
+ if (!$tempFile) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = $this->documentManagementController->moveFinalFile($line, 'GDEL', 'CA', $tempFile, $idUser);
|
|
|
+ return $result[0] ? $result[1] : false;
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('Error en moveToFinal: ' . $e->getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|