Implementado en Bubok

This commit is contained in:
imnavajas
2025-07-23 14:02:59 +02:00
parent afe9f6e0e3
commit 5e954ae350
2 changed files with 106 additions and 68 deletions

View File

@ -210,4 +210,97 @@ class PresupuestoUploaderService
'zipPath' => $zipPath
];
}
public function importarArchivosDesdeUrlsBubok(int $presupuestoId, array $urls): array
{
$resultados = [];
$errores = [];
foreach ($urls as $tipo => $url) {
if (empty($url)) {
$errores[] = "URL vacía para tipo: {$tipo}";
continue;
}
try {
// Intenta descargar el contenido del archivo desde la URL
$contenido = @file_get_contents($url);
// Si no se puede descargar, se genera un archivo de error local (no se guarda en BBDD)
if ($contenido === false || strlen($contenido) === 0) {
$mensajeError = "ERROR: No se pudo descargar el archivo remoto para $tipo desde la URL: $url";
$nombreError = 'ERROR_' . strtoupper($tipo) . '.txt';
// Ruta local en la estructura estándar (no BBDD)
$rutaError = $this->fileModel->getAbsolutePath($presupuestoId, $nombreError);
// Crear el directorio si no existe
$directorio = dirname($rutaError);
if (!is_dir($directorio)) {
mkdir($directorio, 0755, true);
}
// Guardar el archivo con el mensaje de error
file_put_contents($rutaError, $mensajeError);
// Registrar el error en el array de errores
$errores[] = $mensajeError;
continue;
}
// Nombre original y extensión del archivo descargado
$nombreOriginal = basename(parse_url($url, PHP_URL_PATH));
$extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);
// Registrar el archivo en la base de datos y obtener el nombre limpio
$nombreLimpio = $this->fileModel->saveFileInBBDD(
$presupuestoId,
$nombreOriginal,
$extension,
auth()->id()
);
if (!$nombreLimpio) {
$errores[] = "No se pudo registrar '$nombreOriginal' en la base de datos.";
continue;
}
// Obtener la ruta completa donde se guardará el archivo localmente
$rutaAbsoluta = $this->fileModel->getAbsolutePath($presupuestoId, $nombreLimpio);
// Crear el directorio si no existe
$directorio = dirname($rutaAbsoluta);
if (!is_dir($directorio)) {
mkdir($directorio, 0755, true);
}
// Guardar el archivo en el sistema de archivos local
file_put_contents($rutaAbsoluta, $contenido);
// Añadir el archivo a la lista de resultados
$resultados[] = [
'nombre' => $nombreLimpio,
'tipo' => $tipo,
'ruta_local' => $rutaAbsoluta
];
} catch (\Throwable $e) {
$errores[] = "Error inesperado procesando '$tipo': " . $e->getMessage();
}
}
// Subida de todos los archivos válidos al servidor remoto SFTP
try {
$this->uploadToRemote($presupuestoId);
} catch (\Throwable $e) {
$errores[] = "Error al subir archivos al SFTP: " . $e->getMessage();
}
// Devolver el resumen del proceso
return [
'success' => empty($errores),
'archivos_subidos' => $resultados,
'errores' => $errores
];
}
}