Implementada funcionalidad descarga en zip

This commit is contained in:
Ignacio Martinez Navajas
2025-05-22 22:10:14 +02:00
parent b084d1bd7c
commit e3c202ae64
8 changed files with 188 additions and 19 deletions

View File

@ -114,4 +114,57 @@ class SafekatFtpClient
return implode('/', [$this->base_dir, 'pedidos_files', $rootIdExtern]);
}
public function downloadZipPresupuesto(int $presupuesto_id): ?string
{
$modelPedidoLinea = model(PedidoLineaModel::class);
$model = model(PresupuestoFicheroModel::class);
$pedidoLinea = $modelPedidoLinea->findByPresupuesto($presupuesto_id);
$rootIdExtern = $this->pedido_xml_config->id_offset + $pedidoLinea->pedido_id;
$remotePath = implode('/', [$this->base_dir, 'pedidos_files', $rootIdExtern]);
$this->ftp->login(username: $this->username, password: $this->password);
if (!$this->ftp->is_dir($remotePath)) {
return null;
}
$files = $model->getFiles($presupuesto_id);
if (empty($files)) {
return null;
}
$localTempDir = WRITEPATH . 'zip_presupuestos/' . uniqid("presupuesto_");
if (!is_dir($localTempDir)) {
mkdir($localTempDir, 0777, true);
}
foreach ($files as $file) {
$originalName = $file->nombre ?? basename($file->file_path);
$localFile = $localTempDir . '/' . $originalName;
$remoteFile = $remotePath . '/' . basename($file->file_path);
$this->ftp->get($remoteFile, $localFile);
}
$zipPath = $localTempDir . '.zip';
$zip = new \ZipArchive();
if ($zip->open($zipPath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
foreach (glob($localTempDir . '/*') as $localFile) {
$zip->addFile($localFile, basename($localFile));
}
$zip->close();
}
// Limpieza temporal
foreach (glob($localTempDir . '/*') as $localFile) {
unlink($localFile);
}
rmdir($localTempDir);
return $zipPath;
}
}