From 747674b450d6840ce9bd9aecd765cf31445ef8d3 Mon Sep 17 00:00:00 2001 From: polo Date: Sat, 22 Jul 2023 12:29:47 +0200 Subject: navigation entre sections, boucle principale, client ou prospect --- src/sections/2_service.php | 229 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 src/sections/2_service.php (limited to 'src/sections/2_service.php') diff --git a/src/sections/2_service.php b/src/sections/2_service.php new file mode 100644 index 0000000..8109b31 --- /dev/null +++ b/src/sections/2_service.php @@ -0,0 +1,229 @@ +get()); + if($choix_niv2 === '') + { + echo "debug: annulation menu enregistrement\n"; + return [0, null]; // menu principal + } + + $Presta = new Prestations($Client->getID()); + + // détail de la prestation + // calendrier - étape 1/3 + $Date = new Dates(exec($Calendrier->get())); // exec() renvoie soit une chaîne soit un false + if($Date->getDate() == '') // on n'a pas cliqué sur "annuler" + { + echo "debug: annulation à la saisie d'une date\n"; + return [0, null]; // menu principal + } + + $Presta->setDate($Date->getTimestamp()); // un entier pour la BDD + + switch($choix_niv2) + { + // formulaire - étape 2/3 + //~ case ZenitySetup::$menu_enregistrement_entrees[0]: // "Devis" + //~ $PrestaDetails = new DevisFactures('devis'); + //~ $Presta->setTypePresta('devis'); + //~ $input = exec($FormulaireDevis->get()); + //~ break; + case ZenitySetup::$menu_enregistrement_entrees[0]: // "Facture" + $PrestaDetails = new DevisFactures('factures'); // 'factures' est le nom de la table, pas le type de presta + $Presta->setTypePresta('facture'); + $input =exec($FormulaireFacture->get()); + break; + case ZenitySetup::$menu_enregistrement_entrees[1]: // "CESU" + $PrestaDetails = new CESU(); + $Presta->setTypePresta('cesu'); + $input = exec($FormulaireCesu->get()); + break; + case ZenitySetup::$menu_enregistrement_entrees[2]: // "Location" + $PrestaDetails = new Locations(); + $Presta->setTypePresta('location'); + $input = exec($FormulaireLocation->get()); + break; + case ZenitySetup::$menu_enregistrement_entrees[3]: // "Prestation non vendue" + $Presta->setTypePresta('non_vendue'); + break; + default: // inutile normallement, cas déjà géré avant + echo "debug: sortie du menu enregistrement incorrect\n"; + return [0, null]; + } + + $Presta->makeCodePresta($Date, $Client->getCodeClient()); // d'un objet à l'autre + + if($choix_niv2 != ZenitySetup::$menu_enregistrement_entrees[3]) // si presta non vendue, saut étape 3/3 + { + if($input == '') // annulation + { + echo "debug: annulation lors de l'enregistrement des détails de la prestation\n"; + return [0, null]; + } + elseif(isset($PrestaDetails) && !$PrestaDetails->hydrateFromForm($input, $Presta)) // echec de l'hydratation + { + echo "debug: erreur de hydrateFromForm()\n"; // messages d'erreur à mettre ici ou dans hydrateFromForm()? + return [0, null]; + } + unset($input); + } + + // commentaire - étape 3/3 + $input = exec($CommentairePrestation->get()); + if($input == '') + { + echo "debug: pas de commentaire saisi\n"; + // on n'interrompt pas le script et on enregistre dans tous les cas (annulatation, chaîne vide) + } + // Cliquer sur annuler (ou appuyer sur échap) revient dont à valider avec une chaîne vide et enregistrer la prestation + // la commande 'echo $?' ($? est le code de sortie de la commande précédente) renvoit 1 si on annule avec la touche échap () + // elle renvoit 0 si la fenêtre est fermée correctement, qu'on valide une chaîne vide ou qu'on clique sur Annuler (on ne peut pas savoir) + // malheureusement, si les deux commandes sont liées par un '&&' et qu'on annule la saisie, la 2è commande n'est pas exécutée + // solution partielle si echo $? ne renvoit rien, c'est qu'echo n'a pas été exécuté parce qu'on a appuyé sur échap (ou que le programme) + // 2>&1 semble inutile, pas de sortie d'erreur de zenity --entry + //~ if(exec('echo $?') != 1) + //~ { + //~ echo "debug: annulation à la saisie d'un commentaire\n"; + //~ return 0; + //~ } + $Presta->setCommentaires($input); + unset($input); + + $Presta->create(); + $Presta->setID(); // sans paramètre, exécute un $this->db->lastInsertId() + + if(isset($PrestaDetails)) // presta non vendue + { + $PrestaDetails->setIDPresta($Presta->getID()); // d'un objet à l'autre + $PrestaDetails->create(); + $PrestaDetails->setID(); // sans paramètre, exécute un $this->db->lastInsertId() + } + + // si encore de type prospect, devient un type client + //$Client->setType('client'); // inutile? + $Client->updateOneValue('type', 'client'); // modifier le type prospect en client + + + // -- partie 3: LaTeX -- + + //makeLatexAndPdfDocuments($Client, $Presta, $PrestaDetails); + // factoriser tout ça + /* plusieurs parties: + * - une fonction ou on crée et manipule les objets (une classe par type de document) + * - manipulation des données + * - chemins et noms de fichiers + * - insertion des variables + * - écriture du fichier (+ dossier si nécessaire) + */ + // et pour bien faire ajouter aussi une interface + + //~ function makeLatexSubClass(string $type) + //~ {} + + // fabrique d'objets (sans connaître les noms des classes) + $EnveloppeRecto = Latex::makeLatexSubClass('enveloppe_recto'); + $EnveloppeVerso = Latex::makeLatexSubClass('enveloppe_verso'); + $DocumentPresta = Latex::makeLatexSubClass($Presta->getTypePresta()); // $type = facture, devis, location + + // génération du latex + $EnveloppeRecto->setData($Client); + //~ $EnveloppeRecto->setFileName($Client->getCodeClient() . '.tex'); + //~ $EnveloppeRecto->setLatexPath(Config::$latex_path . 'enveloppes_recto/'); + //~ $EnveloppeRecto->setPdfPath(Config::$pdf_path . 'enveloppes_recto/'); + //~ $EnveloppeRecto->spacesInPostCode(); + $EnveloppeRecto->makeLatex(); + + //~ $EnveloppeVerso->setFileName('enveloppe_verso.tex'); + //~ $EnveloppeVerso->setLatexPath(Config::$latex_path); + //~ $EnveloppeVerso->setPdfPath(Config::$pdf_path); + $EnveloppeVerso->makeLatex(); + + if($DocumentPresta !== null) + { + $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); + //~ $DocumentPresta->setData($Client); + //~ $DocumentPresta->setData($Presta); + //~ $DocumentPresta->makeDateInstance($Presta->getDate()); // paramètre = int + //~ $DocumentPresta->setFileName($Presta->getCodePresta() . '.tex'); + //~ $DocumentPresta->setLatexPath(Config::$latex_path . $DocumentPresta->getYear() . '/'); + //~ $DocumentPresta->setPdfPath(Config::$pdf_path . $DocumentPresta->getYear() . '/'); + //~ $DocumentPresta->setData($PrestaDetails); + $DocumentPresta->makeLatex(); + } + + + // création des fichiers + // paramètre = Objet enfant de Latex + makeTexAndPdf($EnveloppeRecto); + makeTexAndPdf($EnveloppeVerso); + + if($DocumentPresta !== null) + { + makeTexAndPdf($DocumentPresta); + } + + + // -- partie 4: récapitulatif -- + + // tableau récaptilatif + // ZenityList + + // imprimer? + //~ $imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"'); + //~ $imprimer_enveloppe = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer l\'adresse sur une enveloppe? (insérer une enveloppe DL sans fenêtre dans l\'imprimante"'); + + + // -- partie 5: on fait quoi maintenant -- + $choix_niv2 = exec($FinSection2->get()); + if($choix_niv2 === ZenitySetup::$fin_section_2_entrees[0]) + { + return [4, null]; // section 4: getDocument() + } + elseif($choix_niv2 === ZenitySetup::$fin_section_2_entrees[1]) + { + return [3, null]; // section 3: modifyData() + } + elseif($choix_niv2 === ZenitySetup::$fin_section_2_entrees[2]) + { + return [2, null]; // relancer section 2: newService() + } + else + { + return [0, null]; // menu principal + } + + return [0, null]; // menu principal +} -- cgit v1.2.3