From 945af9fda5146405ab9903d4d268bcb2fe95da25 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 10 Jan 2023 13:08:54 +0100 Subject: enregistrement section 1 --- src/sections/1_new_service.php | 354 +++++++++++++++++--------------------- src/sections/2_modify_service.php | 9 + 2 files changed, 165 insertions(+), 198 deletions(-) create mode 100644 src/sections/2_modify_service.php (limited to 'src/sections') diff --git a/src/sections/1_new_service.php b/src/sections/1_new_service.php index 172402a..aaf441a 100644 --- a/src/sections/1_new_service.php +++ b/src/sections/1_new_service.php @@ -3,7 +3,7 @@ // // -- SECTION 1: Nouvelle prestation -- -function newService() +function newService(): int // code de retour, si 0 retour menu principal, si 2 aller à la section 2, etc { // fenêtres $QuestionNouveauClient = new ZenityQuestion(ZenitySetup::$question_nouveau_client_text); @@ -12,230 +12,188 @@ function newService() $NouveauClient = new ZenityForms(ZenitySetup::$nouveau_client_text, ZenitySetup::$nouveau_client_entrees); $MenuEnregistrement = new ZenityList(ZenitySetup::$menu_enregistrement_text, ZenitySetup::$menu_enregistrement_entrees); $Calendrier = new ZenityCalendar(ZenitySetup::$calendar_text); - $FormulaireDevis = new ZenityForms(ZenitySetup::$formulaire_text, array_merge(ZenitySetup::$formulaire_devis_entrees, ZenitySetup::$formulaire_facture_entrees)); + $FormulaireDevis = new ZenityForms(ZenitySetup::$formulaire_text, array_merge(ZenitySetup::$formulaire_facture_entrees, ZenitySetup::$formulaire_devis_entrees)); $FormulaireFacture = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_facture_entrees); $FormulaireCesu = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_cesu_entrees); $FormulaireLocation = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_location_entrees); $CommentairePrestation = new ZenityEntry(ZenitySetup::$commentaire_prestation_text); + $Recapitulatif = new ZenityList(ZenitySetup::$recapitulatif_text, ZenitySetup::$recapitulatif_entrees); // tableau à multiples colonnes + $QuestionModifierPrestation = new ZenityQuestion(ZenitySetup::$question_modification_text); - $Client = new Clients; // modèle de la table 'clients' + $Client = new Clients; - $continuer = false; - // niveau 2: est ce que le client est déjà dans la base? + + // -- partie 1: le client -- + + // est ce que le client est déjà dans la base? + $client_inconnu = true; if(exec($QuestionNouveauClient->get()) == '0') // $? = 0 signifie oui, double égal == pour le transtypage { echo "debug: recherche souhaitée\n"; - - // niveau 3: saisie du nom du client - $nom_client = exec($RechercheClient->get()); - if($nom_client !== '') + $input = exec($RechercheClient->get()); + if($input == '') { - echo "debug: recherche effectuée\n"; - $ResultatsRechercheClient->setListRows(rechercheClient($nom_client, $Client), $Client->getTable()); // recherche silencieuse - unset($nom_client); - - // niveau 4: sélection parmi les résultats - $choix_niv4 = exec($ResultatsRechercheClient->get()); // renvoie l'ID de la table 'clients' - $ResultatsRechercheClient->cleanCommand(); - - if($choix_niv4 !== '') - { - echo "debug: client sélectionné\n"; - $Client->hydrate($Client->findById($choix_niv4)); - $continuer = true; - } - else - { - echo "debug: client pas trouvé ou pas sélectionné\n"; - } + echo "debug: recherche annulée ou saisie vide\n"; + return(0); } - else + + echo "debug: recherche effectuée\n"; + $ResultatsRechercheClient->setListRows(rechercheClient($input, $Client), $Client->getTable()); // recherche silencieuse + unset($input); + + // niveau 4: sélection parmi les résultats + $choix_niv4 = exec($ResultatsRechercheClient->get()); // renvoie l'ID de la table 'clients' + $ResultatsRechercheClient->cleanCommand(); + + if($choix_niv4 == '') { - echo "debug: recherche annulée ou saisie vide\n"; + echo "debug: client pas trouvé ou pas sélectionné\n"; + return(0); } + + echo "debug: client sélectionné\n"; + $Client->hydrate($Client->findById($choix_niv4)); + $client_inconnu = false; } else { echo "debug: nouveau client\n"; } - // niveau 2: on n'a pas cherché OU on n'a pas trouvé - if(!$continuer) + // on n'a pas cherché OU on n'a pas trouvé + if($client_inconnu) { - $data_string = exec($NouveauClient->get()); - //~ $data_array = explode('|', $data_string); - //~ if(controlFormInput($data_array)) - //~ { - //~ $Client->newRow($data_array); // écriture dans la BDD - //~ $continuer = true; - //~ } - - if($data_string !== '') + $input = exec($NouveauClient->get()); + if($input == '') { - $data_array = explode('|', $data_string); - $data_string = ''; // nettoyage - - if(count($data_array) === count(StructTablesDB::$structureOfTables[$Client->getTable()]) - 1) - { - if($data_array[0] != "") // le champ "prenom_nom" ne doit pas être vide - { - $Client->newRow($data_array); // écriture dans la BDD - $continuer = true; - } - else - { - echo "debug: données insuffisantes, le nom du client doit au minimum être renseigné\n"; - $continuer = false; - } - } - else - { - echo "debug: le nombre d'informations à enregistrer du nombre de champs à renseigner dans la table\n"; - $continuer = false; - } + echo "debug: annulation lors de l'enregistrement d'un nouveau client\n"; + return(0); } - else + if(!$Client->hydrateFromForm($input)) { - echo "debug: annulation lors du formulaire\n"; - $continuer = false; + // messages d'erreur dans hydrateFromForm() + return(0); } + unset($input); + $Client->create(); + $Client->setID(); // sans paramètre, exécute un $this->db->lastInsertId() } + + // -- partie 2: la prestation -- + // niveau 2: type comptable d'enregistrement: devis, facture, cesu, location ou pas de prestation - if($continuer) + $choix_niv2 = exec($MenuEnregistrement->get()); + if($choix_niv2 === '') { - $choix_niv2 = exec($MenuEnregistrement->get()); - $continuer = false; - $Presta = new Prestations($Client->getID()); - - switch($choix_niv2) - { - case ZenitySetup::$menu_enregistrement_entrees[0]: // "Devis" - $DetailsPresta = new DevisFactures($Client->getID()); - $Presta->setTypePresta('devis'); - $continuer = true; - break; - case ZenitySetup::$menu_enregistrement_entrees[1]: // "Facture" - $DetailsPresta = new DevisFactures($Client->getID()); - $Presta->setTypePresta('facture'); - $continuer = true; - break; - case ZenitySetup::$menu_enregistrement_entrees[2]: // "CESU" - $DetailsPresta = new CESU($Client->getID()); - $Presta->setTypePresta('cesu'); - $continuer = true; - break; - case ZenitySetup::$menu_enregistrement_entrees[3]: // "Location" - $DetailsPresta = new Locations($Client->getID()); - $Presta->setTypePresta('location'); - $continuer = true; - break; - case ZenitySetup::$menu_enregistrement_entrees[4]: // "non_vendue" - // objet $Presta uniquement - $Presta->setTypePresta('non_vendue'); - $continuer = true; - break; - default: - $continuer = false; // annulation, retour menu principal - } - - if($continuer) - { - // niveau 3: détail de la prestation - // noter que exec() renvoie toujours une chaîne, sauf en cas d'erreur où il renvoie un "false" - $Date = new Dates(exec($Calendrier->get())); - if($Date->getDate() !== '') // on n'a pas cliqué sur "annuler" - { - $Presta->setDate($Date->getTimestamp()); // un entier pour la BDD - $Presta->makeCodePresta($Date, $Client->getCodeClient()); // d'un objet à l'autre - - // on continue si le formulaire précédent a été rempli - switch($choix_niv2) - { - case $Presta->getType = 'devis'; - $data_string = exec($FormulaireDevis->get()); - break; - case $Presta->getType = 'facture'; - $data_string = exec($FormulaireFacture->get()); // tester si c'est vide ou clic sur 'Annuler' - break; - case $Presta->getType = 'cesu'; - $data_string = exec($FormulaireCesu->get()); - break; - case $Presta->getType = 'location'; - $data_string = exec($FormulaireLocation->get()); - break; - case $data_string->getType = 'non_vendue'; - // ne rien faire - break; - default: - $continuer = false; // annulation, retour menu principal - } - - if($continuer) - { - // dans $Presta - $comment = exec($CommentairePrestation->get()); - if(!empty($comment)) - { - $Presta->setCommentaires($comment); - } - else - { - $continuer = false; // annulation, retour menu principal - } - } - } - $Presta->create(); - $Presta->setIDPresta(); // sans paramètre pour récupérer le dernier ID inséré - - if($data_string !== '') - { - $data_array = explode('|', $data_string); - - if(count($data_array) === count(StructTablesDB::$structureOfTables[$DetailsPresta->getTable()]) - 1) - { - if($data_array[0] != "") // le champ "prenom_nom" ne doit pas être vide - { - $DetailsPresta->newRow($data_array); // INSUFFISANT - $continuer = true; - } - else - { - echo "debug: données insuffisantes, le nom du client doit au minimum être renseigné\n"; - $continuer = false; - } - } - else - { - echo "debug: le nombre d'informations à enregistrer du nombre de champs à renseigner dans la table\n"; - $continuer = false; - } - } - else - { - echo "debug: annulation lors du formulaire\n"; - $continuer = false; - } - $DetailsPresta->setIDPresta($Presta->getIDPresta()); // d'un objet à l'autre - $DetailsPresta->create(); - - - // tableau récaptilatif, possibilité de modification - //ZenityList - - - // création fichiers LaTeX et PDF - //~ $latex_path = '../data/latex/'; // noms de variables dans le config.php - //~ $file_name = 'devis.tex'; - //~ $template = 'devis'; // vaut 'devis' ou 'enveloppe_recto' ou 'enveloppe_verso' ou 'facture' ou 'location' - //~ $latex = getLatexFromTemplate($template); - //~ file_put_contents($latex_path . $file_name, $latex); // injection des variables & écriture du fichier - //~ $pdf_path = '../data/pdf/'; - //~ latexToPdf($latex_path, $file_name, $pdf_path); - - // 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"'); - } + 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 + $Presta->makeCodePresta($Date, $Client->getCodeClient()); // d'un objet à l'autre + + switch($choix_niv2) + { + // formulaire - étape 2/3 + case ZenitySetup::$menu_enregistrement_entrees[0]: // "Devis" + $Details = new DevisFactures($Client->getID(), 'devis'); + $Presta->setTypePresta('devis'); + $input = exec($FormulaireDevis->get()); + break; + case ZenitySetup::$menu_enregistrement_entrees[1]: // "Facture" + $Details = new DevisFactures($Client->getID(), '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[2]: // "CESU" + $Details = new CESU($Client->getID()); + $Presta->setTypePresta('cesu'); + $input = exec($FormulaireCesu->get()); + break; + case ZenitySetup::$menu_enregistrement_entrees[3]: // "Location" + $Details = new Locations($Client->getID()); + $Presta->setTypePresta('location'); + $input = exec($FormulaireLocation->get()); + break; + case ZenitySetup::$menu_enregistrement_entrees[4]: // "Prestation non vendue" + $Presta->setTypePresta('non_vendue'); + break; + default: // inutile normallement, cas déjà géré plus haut + echo "debug: sortie du menu enregistrement incorrect\n"; + return(0); + } + + if($input == '') + { + echo "debug: annulation lors de l'enregistrement des détails de la prestation\n"; + return(0); + } + elseif(isset($Details) && !$Details->hydrateFromForm($input, $Presta)) + { + // messages d'erreur dans hydrateFromForm() + return(0); + } + unset($input); + + // commentaire - étape 3/3 + $input = exec($CommentairePrestation->get()); + //~ if($input == '') + //~ { + //~ 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() + + $Details->setIDPresta($Presta->getID()); // d'un objet à l'autre + $Details->create(); + $Details->setID(); // sans paramètre, exécute un $this->db->lastInsertId() + + + // -- partie 3: LaTeX -- + + // création fichiers LaTeX et PDF + //~ $latex_path = '../data/latex/'; // noms de variables dans le config.php + //~ $file_name = 'devis.tex'; + //~ $template = 'devis'; // vaut 'devis' ou 'enveloppe_recto' ou 'enveloppe_verso' ou 'facture' ou 'location' + //~ $latex = getLatexFromTemplate($template); + //~ file_put_contents($latex_path . $file_name, $latex); // injection des variables & écriture du fichier + //~ $pdf_path = '../data/pdf/'; + //~ latexToPdf($latex_path, $file_name, $pdf_path); + + + // -- 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"'); + + // possibilité de modification + // zenityQuestion + if(exec($QuestionModifierPrestation->get()) == '0') + { + return(2); // section 2 + } + else + { + return(0); // menu principal } } diff --git a/src/sections/2_modify_service.php b/src/sections/2_modify_service.php new file mode 100644 index 0000000..72e2605 --- /dev/null +++ b/src/sections/2_modify_service.php @@ -0,0 +1,9 @@ +