get()); if($choix_niv2 === '') { echo "debug: annulation menu enregistrement\n"; return 0; // 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; // 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; } $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; } 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; } 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() } // -- 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 // 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(); $DocumentPresta->setData($Client); $DocumentPresta->setData($Presta); $DocumentPresta->setData($PrestaDetails); $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->makeLatex(); // création des fichiers makeFolder($EnveloppeRecto->getLatexPath()); makeFolder($EnveloppeRecto->getPdfPath()); makeFile($EnveloppeRecto->getLatexPath(), $EnveloppeRecto->getFileName(), $EnveloppeRecto->getLatex()); latexToPdf($EnveloppeRecto->getLatexPath(), $EnveloppeRecto->getFileName(), $EnveloppeRecto->getPdfPath()); makeFile($EnveloppeVerso->getLatexPath(), $EnveloppeVerso->getFileName(), $EnveloppeVerso->getLatex()); latexToPdf($EnveloppeVerso->getLatexPath(), $EnveloppeVerso->getFileName(), $EnveloppeVerso->getPdfPath()); makeFolder($DocumentPresta->getLatexPath()); makeFolder($DocumentPresta->getPdfPath()); makeFile($DocumentPresta->getLatexPath(), $DocumentPresta->getFileName(), $DocumentPresta->getLatex()); latexToPdf($DocumentPresta->getLatexPath(), $DocumentPresta->getFileName(), $DocumentPresta->getPdfPath()); // -- 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 -- // possibilité de modification // zenityQuestion //~ if(exec($QuestionModifierPrestation->get()) == '0') //~ { //~ return 3; // section "Modifier un enregistrement" //~ } //~ else //~ { //~ return 0; // menu principal //~ } return 0; // menu principal }