refactor creation file pdf

This commit is contained in:
Tolotsoa 2025-08-22 10:16:33 +03:00
parent 351801d4ac
commit 9b617eac73

View File

@ -113,17 +113,7 @@ class InvoicePdfService
}
$pdfFilename = $prefixPdf."_".$pdfFilename;
$filenames = [];
foreach($factureFolders as $folder) {
try {
$storage->newFolder($folder);
} catch(\OCP\Files\NotPermittedException $e) {
}
$ff_pdf = $folder.$pdfFilename.'.pdf';
$storage->newFile($ff_pdf);
$file_pdf = $storage->get($ff_pdf);
$file_pdf->putContent($pdfContent);
$filenames[] = $ff_pdf;
}
$filenames = $this->savePdfToFolders($factureFolders, $pdfFilename, $pdfContent, $storage);
$this->gestionBdd->setFactureGeneratedDate($factureId);
return [
"content" => $pdfContent,
@ -211,20 +201,7 @@ class InvoicePdfService
$pdfContent = $pdf->Output('', 'S');
$pdfFilename = $pdf->GetInvoiceFilename();
$filenames = [];
foreach($factureFolders as $folder) {
try {
$storage->newFolder($folder);
} catch(TemplateException $e) {
// Ignore si le dossier existe déjà
}
$ff_pdf = $folder.$pdfFilename;
$storage->newFile($ff_pdf);
$file_pdf = $storage->get($ff_pdf);
$file_pdf->putContent($pdfContent);
$filenames[] = $ff_pdf;
}
$filenames = $this->savePdfToFolders($factureFolders, $pdfFilename, $pdfContent, $storage);
$this->gestionBdd->setFactureGeneratedDate($factureId);
return [
"content" => $pdfContent,
@ -276,16 +253,10 @@ class InvoicePdfService
}
$clientRacineFolder = $racinePath.'CLIENTS/'.mb_strtoupper($clientNameInFolder, 'UTF-8').'/';
$filename = "FACTURE".'_'.$pdf->GetMultipleInvoiceFilename($month, $year);
$filenamePath = $clientRacineFolder.$filename.'.pdf';
$pdfContent = $pdf->Output('', 'S');
try {
$storage->newFolder($clientRacineFolder);
} catch(\OCP\Files\NotPermittedException $e) {
}
$storage->newFile($filenamePath);
$file_pdf = $storage->get($filenamePath);
$file_pdf->putContent($pdfContent);
return $filenamePath;
$singleFolderArray = [$clientRacineFolder];
$filenames = $this->savePdfToFolders($singleFolderArray, $filename, $pdfContent, $storage);
return $filenames[0];
}
public function generateInvoiceRecap($filter, $filterType, $date, $idNextCloud)
@ -666,4 +637,62 @@ class InvoicePdfService
"Si les frais de recouvrement sont supérieurs à ce montant forfaitaire, une indemnisation complémentaire " .
"sera due sur présentation de justificatifs (articles L 441-3 et L 441-6 du code de commerce).";
}
/**
* Fonction générique pour sauvegarder un fichier PDF dans plusieurs dossiers
*
* @param array $factureFolders Liste des dossiers sauvegarder
* @param string $pdfFilename Nom du fichier PDF (sans extension)
* @param string $pdfContent Contenu binaire du PDF
* @param mixed $storage Instance de stockage Nextcloud
* @return array Liste des chemins des fichiers créés
*/
private function savePdfToFolders(array $factureFolders, string $pdfFilename, string $pdfContent, $storage): array
{
$filenames = [];
foreach ($factureFolders as $folder) {
// --- GESTION DU CHEMIN ---
if (($_ENV['APP_ENV'] ?? 'prod') === 'dev') {
// En dev : remplacer les accents et caractères spéciaux pour Docker
$relativeFolder = $this->sanitizePathDev($folder);
$pdfFileNameSafe = $this->sanitizePathDev($pdfFilename);
} else {
// En prod : garder UTF-8, juste retirer slash initial
$relativeFolder = ltrim($folder, '/');
$pdfFileNameSafe = $pdfFilename;
}
// --- CREATION DU DOSSIER ---
try {
if (!$storage->nodeExists($relativeFolder)) {
$storage->newFolder($relativeFolder);
}
} catch (\Exception $e) {
error_log("ERROR creating folder '$relativeFolder': " . $e->getMessage());
// Ne pas faire exit, continuer avec les autres dossiers
continue;
}
// --- CHEMIN COMPLET DU FICHIER ---
$ff_pdf = rtrim($relativeFolder, '/') . '/' . $pdfFileNameSafe . '.pdf';
// --- CREATION OU MISE A JOUR DU FICHIER ---
try {
if ($storage->nodeExists($ff_pdf)) {
$file_pdf = $storage->get($ff_pdf);
} else {
$file_pdf = $storage->newFile($ff_pdf);
}
$file_pdf->putContent($pdfContent);
$filenames[] = $ff_pdf;
} catch (\Throwable $e) {
error_log("ERROR on file '$ff_pdf': " . $e->getMessage());
// Ne pas faire exit, continuer avec les autres fichiers
continue;
}
}
return $filenames;
}
}