From b0f06b1d7dc3a790d6d8babe5f0855c08c5f7878 Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 20 Oct 2026 21:49:17 +0200 Subject: =?UTF-8?q?mise=20en=20place=20de=20l'h=C3=A9ritage=202,=20nombreu?= =?UTF-8?q?ses=20simplifications=20et=20factorisations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sections/2_service.php | 114 +++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 62 deletions(-) (limited to 'src/sections/2_service.php') diff --git a/src/sections/2_service.php b/src/sections/2_service.php index dc16fe8..e2d64f2 100644 --- a/src/sections/2_service.php +++ b/src/sections/2_service.php @@ -5,11 +5,9 @@ function newService(?Client $Client = null): array { - // fenêtres recherche d'un client + // fenêtres $RechercheClient = new zenityEntry(ZenitySetup::$recherche_client['text']); $ResultatsRechercheClient = new ZenityList(ZenitySetup::$resultats_recherche_client['text'], []); - - // fenêtres $MenuEnregistrement = new ZenityList(ZenitySetup::$menu_enregistrement['text'], ZenitySetup::$menu_enregistrement['entrees']); $Calendrier = new ZenityCalendar(ZenitySetup::$calendar['section2']); $FormulaireDevis = new ZenityForms(ZenitySetup::$formulaire['text'], ZenitySetup::$formulaire['devis_entrees']); @@ -17,15 +15,16 @@ function newService(?Client $Client = null): array $FormulaireFactureReduit = new ZenityForms(ZenitySetup::$formulaire['text'], ZenitySetup::$formulaire['facture_entrees_reduit']); $FormulaireCesu = new ZenityForms(ZenitySetup::$formulaire['text'], ZenitySetup::$formulaire['cesu_entrees']); $FormulaireLocation = new ZenityForms(ZenitySetup::$formulaire['text'], ZenitySetup::$formulaire['location_entrees']); + $FormulaireNonVendue = new ZenityForms(ZenitySetup::$formulaire['text'], ZenitySetup::$formulaire['non_vendue_entrees']); $CommentairePrestation = new ZenityEntry(ZenitySetup::$commentaire_prestation['text']); //$Recapitulatif = new ZenityList(ZenitySetup::$recapitulatif_text, ZenitySetup::$recapitulatif_entrees); // tableau à multiples colonnes $FinSection2 = new ZenityList(ZenitySetup::$fin_section_2['text'], ZenitySetup::$fin_section_2['entrees']); - // -- partie 1: le client -- + // -- partie 1: rechercher un client -- if(!$Client) { - $Client = Client::find($RechercheClient, $ResultatsRechercheClient); // retourne un Client ou 0 + $Client = Client::find($RechercheClient, $ResultatsRechercheClient); //$ResultatsRechercheClient->cleanCommand(); // inutile parce qu'on ne boucle pas dans cette fonction if(!$Client) { @@ -51,69 +50,82 @@ function newService(?Client $Client = null): array echo "debug: annulation à la saisie d'une date\n"; return [2, $Client]; } - - $Presta = new Prestation($Client); - //var_dump($Client);die; - $Presta->setDate($date_array[2] . '-' . $date_array[1] . '-' . $date_array[0]); // 2026-10-17 - + + // formulaire - étape 2/3 switch($choix_niv2) { - // comparaison retour de $MenuEnregistrement->get() avec les noms des entrées du même menu + // comparaison du retour de $MenuEnregistrement->get() avec les noms des entrées du même menu case ZenitySetup::$menu_enregistrement['entrees'][0]: // "Devis" - $PrestaDetails = new Devis($Presta); - $Presta->setTypePresta('devis'); + $Presta = new Devis($Client); $answers = exec($FormulaireDevis->get()); break; case ZenitySetup::$menu_enregistrement['entrees'][1]: // "Facture" - $PrestaDetails = new Facture($Presta); - $Presta->setTypePresta('facture'); + $Presta = new Facture($Client, false); $answers = exec($FormulaireFacture->get()); break; case ZenitySetup::$menu_enregistrement['entrees'][2]: // "Facture à partir d'un devis" - // recherche du devis - $Quotation = Prestation::getServices($Client, 'devis'); // rechercher un devis, type 'devis' spécifié - if(!is_object($Quotation) || get_class($Quotation) != 'Prestation' || $Quotation->getTypePresta() != 'devis') - { + $Quotation = Prestation::getServices($Client, Devis::class); + if(!is_object($Quotation) || $Quotation->getTypePresta() != 'devis'){ echo "debug: annulation sélection client\n"; return [2, $Client]; // menu précédent } - $QuotationDetails = Devis::getQuotation($Quotation); - $PrestaDetails = new Facture($Presta); - $PrestaDetails->hydrateWithQuotation($QuotationDetails); // du devis à la facture - $Presta->setTypePresta('facture'); + $Presta = new Facture($Client, true); // true = à partir d'un devis + $Presta->hydrateWithQuotation($Quotation); // du devis à la facture $answers = exec($FormulaireFactureReduit->get()); break; case ZenitySetup::$menu_enregistrement['entrees'][3]: // "CESU" - $PrestaDetails = new CESU($Presta); - $Presta->setTypePresta('cesu'); + $Presta = new CESU($Client); $answers = exec($FormulaireCesu->get()); break; case ZenitySetup::$menu_enregistrement['entrees'][4]: // "Location" - $PrestaDetails = new Location($Presta); - $Presta->setTypePresta('location'); + $Presta = new Location($Client); $answers = exec($FormulaireLocation->get()); break; case ZenitySetup::$menu_enregistrement['entrees'][5]: // "Prestation non vendue" - $Presta->setTypePresta('non_vendue'); + $Presta = new NonVendue($Client); + $answers = exec($FormulaireNonVendue->get()); break; default: // inutile normallement, cas déjà géré avant echo "debug: sortie du menu enregistrement incorrect\n"; return [0, null]; } + $Presta->setDate($date_array[2] . '-' . $date_array[1] . '-' . $date_array[0]); // 2026-10-17 //$Presta->makeCodePresta($Date, $Client->getCodeClient()); // d'un objet à l'autre //$Presta->makeCodePresta($Client->getCodeClient()); // d'un objet à l'autre $Presta->setCodePresta(1); // d'un objet à l'autre + + if($Presta->getTypePresta() !== 'devis'){ + $Client->setType('client'); // changer prospect en client + } + + $answers = $Presta->cleanSpecialChars($answers); + + $data_array = $Presta->answersToArray($answers); + if(!$data_array){ // annulation + echo "debug: annulation lors de l'enregistrement des détails de la prestation\n"; + return [0, null]; + } + + // attention risque d'erreur! les données n'ont pas de d'identifiant! + // leur ordre et leur nombre permettent d'insérer la bonne info au bon endroit + // toute modif du modèle ou d'un formulaire doit être répèrcutée ici + if(!$Presta->validateForm($data_array)){ + echo "erreur: les données du formulaire sont incompatibles avec le modèle\n"; + return [0, null]; + } + + // hydratation avec la saisie du formulaire + $Presta->hydrate($data_array); // commentaire - étape 3/3 $comment = exec($CommentairePrestation->get()); - if($comment == '') - { + if($comment == ''){ echo "debug: pas de commentaire saisi\n"; - // on n'interrompt pas le script et on enregistre dans tous les cas (annulatation comprise) + // on n'interrompt pas le script et on enregistre dans tous les cas (annulation comprise) } - // Cliquer sur annuler (ou appuyer sur échap) revient dont à valider avec une chaîne vide et enregistrer la prestation + // Cliquer sur annuler (ou appuyer sur échap) revient donc à 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 @@ -125,31 +137,11 @@ function newService(?Client $Client = null): array //~ return 0; //~ } $Presta->setCommentaires($comment); - - // hydratation avec la saisie du formulaire - if($choix_niv2 != ZenitySetup::$menu_enregistrement['entrees'][5]) // cas: tous les cas sauf presta non vendue - { - //var_dump($answers); - if($Presta->getTypePresta() !== 'devis'){ - $Client->setType('client'); - } - if($answers == '') // annulation - { - echo "debug: annulation lors de l'enregistrement des détails de la prestation\n"; - return [0, null]; - } - $PrestaDetails->hydrate($answers); - - // déléguer la synchronisation (flush) avec la BDD à une classe "Manager" - } - - // si encore de type prospect, devient un type client - // déjà fait ailleurs je crois! - /*if($Client->typeToClient()) // utile si $Client est renvoyé dans le "return" - { - $Client->updateOneValue('type', 'client'); // base synchronisée - }*/ - + + // enregistrement + // déléguer la synchronisation (flush) avec la BDD à une classe "Manager"? + Prestation::$entityManager->persist($Presta); + Prestation::$entityManager->flush(); // -- partie 3: LaTeX -- @@ -162,9 +154,8 @@ function newService(?Client $Client = null): array $EnveloppeRecto->setData($Client); $EnveloppeRecto->makeLatex(); $EnveloppeVerso->makeLatex(); - if($DocumentPresta !== null) - { - $DocumentPresta->setData($Client)->setData($Presta)->setData($PrestaDetails); + if($DocumentPresta !== null){ // facture, devis ou location + $DocumentPresta->setData($Client)->setData($Presta); $DocumentPresta->makeLatex(); } @@ -172,8 +163,7 @@ function newService(?Client $Client = null): array $EnveloppeRecto->makeTexAndPdf(); $EnveloppeVerso->makeTexAndPdf(); - if($DocumentPresta !== null) - { + if($DocumentPresta !== null){ $DocumentPresta->makeTexAndPdf(); } -- cgit v1.2.3