From 9bdfb5196a2ee1cbfc403702e8d2ef88076d366f Mon Sep 17 00:00:00 2001 From: polo Date: Wed, 5 Jul 2023 01:39:29 +0200 Subject: classe Latex "fonctionnelle" --- src/Latex.php | 177 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 130 insertions(+), 47 deletions(-) (limited to 'src/Latex.php') diff --git a/src/Latex.php b/src/Latex.php index a766fd6..051c48b 100644 --- a/src/Latex.php +++ b/src/Latex.php @@ -5,9 +5,12 @@ abstract class Latex { - protected $fileName = ''; - protected $latexPath = ''; - protected $pdfPath = ''; + protected $type = ''; + protected $file_name = ''; + protected $latex_path = ''; + protected $pdf_path = ''; + protected $data = []; // données à insérer dans le template + protected $latex = ''; // latex pur static function makeLatexSubClass(string $type): Object { @@ -15,15 +18,15 @@ abstract class Latex { // documents pour les clients case 'devis': - return new DevisLatex(); + return new DevisLatex($type); case 'facture': - return new FactireLatex(); + return new FactureLatex($type); case 'location': - return new LocationLatex(); + return new LocationLatex($type); case 'enveloppe_recto': - return new EnveloppeRectoLatex(); + return new EnveloppeRectoLatex($type); case 'enveloppe_verso': - return new EnveloppeVersoLatex(); + return new EnveloppeVersoLatex($type); // documents pour la compta @@ -33,72 +36,152 @@ abstract class Latex } } - protected function createFile(string $latex, string $fileName, string $latexPath) + // tester en private? + public function __construct(string $type) { - // nom du fichier créé = nom.tex - // pour les devis, factures et enveloppes, le nom est le code la prestation - // pour les livre de recettes et registres des achats mensuels: - // le nom du fichier suit cet exemple: "Recettes-2022-06-Juin.tex" - // pour le livre de recette ou le registre des achats annuel, même principe: "Achats-2022.tex" - // pour le bilan comptable annuel, ça donne: "Bilan-2022.tex" - $fichier = fopen($latexPath . $fileName, "w+"); - fputs($fichier, $latex); - fclose($fichier); + $this->type = $type; + } + + public function makeLatex() + { + $data = $this->data; + + // on obtient la variable $latex avec ob_get_clean() + // le include() ici, c'est du génie ou c'est moche ou les deux? + // un nouveau fichier php est inséré à chaque itération + include('latex_templates/' . $this->type . '.php'); + + // on retourne le buffer + // normallement le code PHP inséré avec include est nettoyé en quittant la fonction + $this->latex = $latex; + //return($latex); + } + + // getters + public function getFileName(): string + { + return $this->file_name; + } + public function getLatexPath(): string + { + return $this->latex_path; + } + public function getPdfPath(): string + { + return $this->pdf_path; + } + + public function getLatex(): string + { + return $this->latex; + } + + // setters + public function setFileName(string $file_name) + { + $this->file_name = $file_name; + } + public function setLatexPath(string $latex_path) + { + $this->latex_path = $latex_path; + } + public function setPdfPath(string $pdf_path) + { + $this->pdf_path = $pdf_path; + } + + public function setData(Object $Object) + { + $this->data = array_merge($this->data, $Object->getAll()); // nécessite des tableaux associatifs + //return $Object; // pour chainer les méthodes } } - abstract class PrestaLatex extends Latex { - public function __construct(string $quoi, string $codePresta) + protected $Date; // sera un type "Dates" + protected $year = ''; + + //~ public function __construct(string $type) // surcharge Latex::__construct() + //~ { + //~ $this->type = $type; + //~ $this->Date = new Dates(); + //~ $this->year = $this->Date->getYear(); + //~ } + + public function getYear(): string // parce que Dates::getDate() retourne une chaine { - nameTheFile($quoi, $codePresta); + return $this->year; + } + + public function makeDateInstance(int $date) + { + $this->Date = new Dates($date); + $this->year = $this->Date->getYear(); } // forme = code-presta.tex - protected function nameTheFile(string $quoi, string $codePresta) + //~ protected function nameTheFile(string $quoi, string $codePresta) + //~ { + //~ $this->fileName = $quoi . '-' . $codePresta . '.tex'; + //~ } + + public function makeLatex() { - $this->fileName = $quoi . '-' . $codePresta . '.tex'; + $data = $this->data; + $date = preg_replace('#\D#', '/', $this->Date->getDate()); // date avec des slashs / parce que j'aime bien + + // on obtient la variable $latex avec ob_get_clean() + // le include() ici, c'est du génie ou c'est moche ou les deux? + // un nouveau fichier php est inséré à chaque itération + include('latex_templates/' . $this->type . '.php'); + + // on retourne le buffer + // normallement le code PHP inséré avec include est nettoyé en quittant la fonction + $this->latex = $latex; + //return($latex); } } -//~ class PrestaClassFactory extends PrestaLatex -//~ {} - -class DevisLatex extends PrestaLatex +class DevisLatex extends PrestaLatex // extends Latex {} -class FactureLatex extends PrestaLatex +class FactureLatex extends PrestaLatex // extends Latex {} -class LocationLatex extends PrestaLatex -{} - -class EnveloppeRectoLatex// extends PrestaLatex +class LocationLatex extends PrestaLatex // extends Latex {} -class EnveloppeVersoLatex// extends PrestaLatex +class EnveloppeRectoLatex extends Latex +{ + // code postal avec 2 espaces entre chaque chiffre: 2 \ 9 \ 0 \ 0 \ 0 + public function spacesInPostCode() + { + $this->data['code_postal_espaces'] = implode(' \ ', str_split($this->data['code_postal'])); + } +} +class EnveloppeVersoLatex extends Latex {} abstract class ComptaLatex extends Latex { - public function __construct(string $quoi, string $annee, int $numeroMois = 0) - { - nameTheFile($quoi, $annee, $numeroMois); - } + //~ public function __construct(string $quoi, string $annee, int $numeroMois = 0) + //~ { + //~ nameTheFile($quoi, $annee, $numeroMois); + //~ } // forme = Recettes-2022-06-Juin.tex ou Recettes-2022.tex // type de 'annee'? - protected function nameTheFile(string $quoi, string $annee, int $numeroMois = 0) - { - $this->fileName = $quoi . '-' . $annee; - $mois = ['', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']; - if($numeroMois > 0 && $numeroMois <= 12) - { - $this->fileName .= '-' . $numeroMois . '-' . $mois[$numeroMois]; - } - $this->fileName .= '.tex'; - } + //~ protected function nameTheFile(string $quoi, string $annee, int $numeroMois = 0) + //~ { + //~ $this->fileName = $quoi . '-' . $annee; + //~ $mois = ['', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']; + //~ if($numeroMois > 0 && $numeroMois <= 12) + //~ { + //~ $this->fileName .= '-' . $numeroMois . '-' . $mois[$numeroMois]; + //~ } + //~ $this->fileName .= '.tex'; + //~ } } class LivreRecettesLatex extends ComptaLatex -- cgit v1.2.3