Loading module/Oscar/src/Oscar/Controller/CheminDecisionnelAdministrationController.php +2 −2 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ class CheminDecisionnelAdministrationController extends AbstractOscarController } if (!$this->getRequest()->isPost()) { return ["chemin_decisionnel" => $cheminDecisionnel, "graph_svg" => $this->getCheminDecisionnelService()->générerGraphe($cheminDecisionnel, $this->url()->fromRoute('administration/chemins-decisionnels/update', ['id' => $cheminDecisionnel->getId()]))]; return ["chemin_decisionnel" => $cheminDecisionnel, "graph_svg" => $this->getCheminDecisionnelService()->générerGraphe($cheminDecisionnel, $this->url()->fromRoute('administration/chemins-decisionnels/update', ['id' => $cheminDecisionnel->getId()]), $this->url())]; } if ($this->params()->fromPost('action') == "modifier") { Loading Loading @@ -91,7 +91,7 @@ class CheminDecisionnelAdministrationController extends AbstractOscarController } if ($this->params()->fromPost('action') == "selectionner_suite") { $this->getCheminDecisionnelService()->definirSuite($cheminDecisionnel, $this->params()->fromPost('question_id'), $this->params()->fromPost('reponse_id'), $this->params()->fromPost('type_suite'), $this->params()->fromPost('question_suivante_id'), $this->params()->fromPost('message_suivant_id'), $this->getCurrentPerson()); $this->getCheminDecisionnelService()->definirSuite($cheminDecisionnel, $this->params()->fromPost('question_id'), $this->params()->fromPost('reponse_id'), $this->params()->fromPost('type_suite'), $this->params()->fromPost('question_suivante_id'), $this->params()->fromPost('message_suivant_id'), $this->params()->fromPost('formulaire_suivant_id'), $this->getCurrentPerson()); return $this->redirect()->toRoute('administration/chemins-decisionnels/update', ['id' => $cheminDecisionnel->getId()]); } Loading module/Oscar/src/Oscar/Entity/CheminDecisionnelQuestionReponse.php +25 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,13 @@ class CheminDecisionnelQuestionReponse */ private $cheminDecisionnelMessageSuivant; /** * @var ?CheminDecisionnelFormulaire * @ORM\ManyToOne(targetEntity="CheminDecisionnelFormulaire") * @ORM\JoinColumn(onDelete="SET NULL") */ private $cheminDecisionnelFormulaireSuivant; /** * @return mixed */ Loading Loading @@ -216,6 +223,24 @@ class CheminDecisionnelQuestionReponse return $this; } /** * @return ?CheminDecisionnelFormulaire */ public function getCheminDecisionnelFormulaireSuivant() { return $this->cheminDecisionnelFormulaireSuivant; } /** * @param ?CheminDecisionnelFormulaire $cheminDecisionnelFormulaireSuivant */ public function setCheminDecisionnelFormulaireSuivant($cheminDecisionnelFormulaireSuivant) { $this->cheminDecisionnelFormulaireSuivant = $cheminDecisionnelFormulaireSuivant; return $this; } public function __toString() { return (string) $this->getReponse(); Loading module/Oscar/src/Oscar/Service/CheminDecisionnelService.php +32 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Oscar\Service; use Laminas\Mvc\Controller\Plugin\Url; use Oscar\Entity\CheminDecisionnel; use Oscar\Entity\CheminDecisionnelMessage; use Oscar\Entity\CheminDecisionnelQuestion; Loading Loading @@ -181,7 +182,7 @@ class CheminDecisionnelService implements UseEntityManager, UseLoggerService, Us $this->getEntityManager()->flush(); } public function definirSuite(CheminDecisionnel $cheminDecisionnel, string $question_id, string $reponse_id, string $type_suite, string $question_suivante_id, string $message_suivant_id, \Oscar\Entity\Person $person): void public function definirSuite(CheminDecisionnel $cheminDecisionnel, string $question_id, string $reponse_id, string $type_suite, string $question_suivante_id, string $message_suivant_id, string $formulaire_suivant_id, \Oscar\Entity\Person $person): void { $this->getLoggerService()->info("CheminDecisionnelService definirQuestionSuivante"); $this->getLoggerService()->info("by: " . $person); Loading Loading @@ -261,10 +262,36 @@ class CheminDecisionnelService implements UseEntityManager, UseLoggerService, Us return; } if ($type_suite == "formulaire") { $formulaireSuivant = NULL; if (mb_strlen(trim($formulaire_suivant_id)) > 0) { foreach ($cheminDecisionnel->getFormulaires() as $f) { if ($f->getId() == $formulaire_suivant_id) { $formulaireSuivant = $f; break; } } if (!$formulaireSuivant) { throw new \Exception("Aucun formulaire trouvé pour l'identifiant: " . $formulaire_suivant_id); } } $reponse->setCheminDecisionnelQuestionSuivante(NULL); $reponse->setCheminDecisionnelFormulaireSuivant($formulaireSuivant); $reponse->setUpdatedBy($person); $reponse->setDateUpdated(new \DateTime()); $question->setUpdatedBy($person); $question->setDateUpdated(new \DateTime()); $cheminDecisionnel->setUpdatedBy($person); $cheminDecisionnel->setDateUpdated(new \DateTime()); $this->getEntityManager()->flush(); return; } throw new \Exception("Type de suite inconnu: " . $type_suite); } public function générerGraphe(CheminDecisionnel $cheminDecisionnel, string $url): string public function générerGraphe(CheminDecisionnel $cheminDecisionnel, string $url, Url $urlPlugin): string { $param="<< EOM\n"; $param .= "digraph chemin_decisionnel {\n"; Loading @@ -279,6 +306,9 @@ class CheminDecisionnelService implements UseEntityManager, UseLoggerService, Us } else if ($r->getCheminDecisionnelMessageSuivant()) { $param .= " \"reponse_" . $r->getId() . "_message_" . $r->getCheminDecisionnelMessageSuivant()->getId() . "\" [label=\"" . $r->getCheminDecisionnelMessageSuivant()->getMessage() . "\"]\n"; $param .= " \"" . $q->getId() . "\" -> \"reponse_" . $r->getId(). "_message_" . $r->getCheminDecisionnelMessageSuivant()->getId() . "\" [label=\"" . $r->getReponse() . "\" href=\"" . $url . "#question_" . $q->getId() . "\"]\n"; } else if ($r->getCheminDecisionnelFormulaireSuivant()) { $param .= " \"reponse_" . $r->getId() . "_formulaire_" . $r->getCheminDecisionnelFormulaireSuivant()->getId() . "\" [label=\"" . $r->getCheminDecisionnelFormulaireSuivant()->getNom() . "\" href=\"" . $urlPlugin->fromRoute('administration/chemins-decisionnels/update/formulaire', ['id' => $cheminDecisionnel->getId(), 'formulaire-id' => $r->getCheminDecisionnelFormulaireSuivant()->getId()]) . "\" fontcolor=dodgerblue3]\n"; $param .= " \"" . $q->getId() . "\" -> \"reponse_" . $r->getId(). "_formulaire_" . $r->getCheminDecisionnelFormulaireSuivant()->getId() . "\" [label=\"" . $r->getReponse() . "\" href=\"" . $url . "#question_" . $q->getId() . "\"]\n"; } else { $param .= " \"" . $q->getId() . "_" . $r->getId() . "\" [label=\"❌\"]\n"; $param .= " \"" . $q->getId() . "\" -> \"" . $q->getId() . "_" . $r->getId() . "\" [label=\"" . $r->getReponse() . "\" href=\"" . $url . "#question_" . $q->getId() . "\"]\n"; Loading module/Oscar/view/oscar/chemin-decisionnel-administration/chemins-decisionnels-update-question-partial.phtml +18 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,24 @@ <?php endforeach; ?> </select> </li> <li> <style> #formulaire_suivant_id_<?= $reponse->getId() ?> { display: none; } input#type_suite_formulaire_<?= $reponse->getId() ?>:checked ~ #formulaire_suivant_id_<?= $reponse->getId() ?> { display: inline; } </style> <input id="type_suite_formulaire_<?= $reponse->getId() ?>" type="radio" name="type_suite" value="formulaire" <?php if ($reponse->getCheminDecisionnelFormulaireSuivant()): ?>checked<?php endif; ?> /> <label for="type_suite_formulaire_<?= $reponse->getId() ?>">Afficher le formulaire suivant : </label> <select name="formulaire_suivant_id" id="formulaire_suivant_id_<?= $reponse->getId() ?>"> <option value="">-- Choisissez le formulaire --</option> <?php foreach( $chemin_decisionnel->getFormulaires() as $formulaireSuivant ): ?> <option value="<?= $formulaireSuivant->getId() ?>" <?php if ($reponse->getCheminDecisionnelFormulaireSuivant() && $reponse->getCheminDecisionnelFormulaireSuivant()->getId() == $formulaireSuivant->getId()): ?>selected<?php endif; ?> ><?= $formulaireSuivant->getNom() ?></option> <?php endforeach; ?> </select> </li> <li><input type="submit" value="💾 Enregistrer"></li> </ul> </form> Loading module/Oscar/view/oscar/chemin-decisionnel-administration/chemins-decisionnels-update.phtml +4 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,10 @@ <?php else: ?> <div id="chemins_decisionnels_formulaires_table"> <style> #chemins_decisionnels_formulaires_table table { width: 90%; } #chemins_decisionnels_formulaires_table td, #chemins_decisionnels_formulaires_table th { border: 1px solid rgb(190, 190, 190); Loading Loading
module/Oscar/src/Oscar/Controller/CheminDecisionnelAdministrationController.php +2 −2 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ class CheminDecisionnelAdministrationController extends AbstractOscarController } if (!$this->getRequest()->isPost()) { return ["chemin_decisionnel" => $cheminDecisionnel, "graph_svg" => $this->getCheminDecisionnelService()->générerGraphe($cheminDecisionnel, $this->url()->fromRoute('administration/chemins-decisionnels/update', ['id' => $cheminDecisionnel->getId()]))]; return ["chemin_decisionnel" => $cheminDecisionnel, "graph_svg" => $this->getCheminDecisionnelService()->générerGraphe($cheminDecisionnel, $this->url()->fromRoute('administration/chemins-decisionnels/update', ['id' => $cheminDecisionnel->getId()]), $this->url())]; } if ($this->params()->fromPost('action') == "modifier") { Loading Loading @@ -91,7 +91,7 @@ class CheminDecisionnelAdministrationController extends AbstractOscarController } if ($this->params()->fromPost('action') == "selectionner_suite") { $this->getCheminDecisionnelService()->definirSuite($cheminDecisionnel, $this->params()->fromPost('question_id'), $this->params()->fromPost('reponse_id'), $this->params()->fromPost('type_suite'), $this->params()->fromPost('question_suivante_id'), $this->params()->fromPost('message_suivant_id'), $this->getCurrentPerson()); $this->getCheminDecisionnelService()->definirSuite($cheminDecisionnel, $this->params()->fromPost('question_id'), $this->params()->fromPost('reponse_id'), $this->params()->fromPost('type_suite'), $this->params()->fromPost('question_suivante_id'), $this->params()->fromPost('message_suivant_id'), $this->params()->fromPost('formulaire_suivant_id'), $this->getCurrentPerson()); return $this->redirect()->toRoute('administration/chemins-decisionnels/update', ['id' => $cheminDecisionnel->getId()]); } Loading
module/Oscar/src/Oscar/Entity/CheminDecisionnelQuestionReponse.php +25 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,13 @@ class CheminDecisionnelQuestionReponse */ private $cheminDecisionnelMessageSuivant; /** * @var ?CheminDecisionnelFormulaire * @ORM\ManyToOne(targetEntity="CheminDecisionnelFormulaire") * @ORM\JoinColumn(onDelete="SET NULL") */ private $cheminDecisionnelFormulaireSuivant; /** * @return mixed */ Loading Loading @@ -216,6 +223,24 @@ class CheminDecisionnelQuestionReponse return $this; } /** * @return ?CheminDecisionnelFormulaire */ public function getCheminDecisionnelFormulaireSuivant() { return $this->cheminDecisionnelFormulaireSuivant; } /** * @param ?CheminDecisionnelFormulaire $cheminDecisionnelFormulaireSuivant */ public function setCheminDecisionnelFormulaireSuivant($cheminDecisionnelFormulaireSuivant) { $this->cheminDecisionnelFormulaireSuivant = $cheminDecisionnelFormulaireSuivant; return $this; } public function __toString() { return (string) $this->getReponse(); Loading
module/Oscar/src/Oscar/Service/CheminDecisionnelService.php +32 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace Oscar\Service; use Laminas\Mvc\Controller\Plugin\Url; use Oscar\Entity\CheminDecisionnel; use Oscar\Entity\CheminDecisionnelMessage; use Oscar\Entity\CheminDecisionnelQuestion; Loading Loading @@ -181,7 +182,7 @@ class CheminDecisionnelService implements UseEntityManager, UseLoggerService, Us $this->getEntityManager()->flush(); } public function definirSuite(CheminDecisionnel $cheminDecisionnel, string $question_id, string $reponse_id, string $type_suite, string $question_suivante_id, string $message_suivant_id, \Oscar\Entity\Person $person): void public function definirSuite(CheminDecisionnel $cheminDecisionnel, string $question_id, string $reponse_id, string $type_suite, string $question_suivante_id, string $message_suivant_id, string $formulaire_suivant_id, \Oscar\Entity\Person $person): void { $this->getLoggerService()->info("CheminDecisionnelService definirQuestionSuivante"); $this->getLoggerService()->info("by: " . $person); Loading Loading @@ -261,10 +262,36 @@ class CheminDecisionnelService implements UseEntityManager, UseLoggerService, Us return; } if ($type_suite == "formulaire") { $formulaireSuivant = NULL; if (mb_strlen(trim($formulaire_suivant_id)) > 0) { foreach ($cheminDecisionnel->getFormulaires() as $f) { if ($f->getId() == $formulaire_suivant_id) { $formulaireSuivant = $f; break; } } if (!$formulaireSuivant) { throw new \Exception("Aucun formulaire trouvé pour l'identifiant: " . $formulaire_suivant_id); } } $reponse->setCheminDecisionnelQuestionSuivante(NULL); $reponse->setCheminDecisionnelFormulaireSuivant($formulaireSuivant); $reponse->setUpdatedBy($person); $reponse->setDateUpdated(new \DateTime()); $question->setUpdatedBy($person); $question->setDateUpdated(new \DateTime()); $cheminDecisionnel->setUpdatedBy($person); $cheminDecisionnel->setDateUpdated(new \DateTime()); $this->getEntityManager()->flush(); return; } throw new \Exception("Type de suite inconnu: " . $type_suite); } public function générerGraphe(CheminDecisionnel $cheminDecisionnel, string $url): string public function générerGraphe(CheminDecisionnel $cheminDecisionnel, string $url, Url $urlPlugin): string { $param="<< EOM\n"; $param .= "digraph chemin_decisionnel {\n"; Loading @@ -279,6 +306,9 @@ class CheminDecisionnelService implements UseEntityManager, UseLoggerService, Us } else if ($r->getCheminDecisionnelMessageSuivant()) { $param .= " \"reponse_" . $r->getId() . "_message_" . $r->getCheminDecisionnelMessageSuivant()->getId() . "\" [label=\"" . $r->getCheminDecisionnelMessageSuivant()->getMessage() . "\"]\n"; $param .= " \"" . $q->getId() . "\" -> \"reponse_" . $r->getId(). "_message_" . $r->getCheminDecisionnelMessageSuivant()->getId() . "\" [label=\"" . $r->getReponse() . "\" href=\"" . $url . "#question_" . $q->getId() . "\"]\n"; } else if ($r->getCheminDecisionnelFormulaireSuivant()) { $param .= " \"reponse_" . $r->getId() . "_formulaire_" . $r->getCheminDecisionnelFormulaireSuivant()->getId() . "\" [label=\"" . $r->getCheminDecisionnelFormulaireSuivant()->getNom() . "\" href=\"" . $urlPlugin->fromRoute('administration/chemins-decisionnels/update/formulaire', ['id' => $cheminDecisionnel->getId(), 'formulaire-id' => $r->getCheminDecisionnelFormulaireSuivant()->getId()]) . "\" fontcolor=dodgerblue3]\n"; $param .= " \"" . $q->getId() . "\" -> \"reponse_" . $r->getId(). "_formulaire_" . $r->getCheminDecisionnelFormulaireSuivant()->getId() . "\" [label=\"" . $r->getReponse() . "\" href=\"" . $url . "#question_" . $q->getId() . "\"]\n"; } else { $param .= " \"" . $q->getId() . "_" . $r->getId() . "\" [label=\"❌\"]\n"; $param .= " \"" . $q->getId() . "\" -> \"" . $q->getId() . "_" . $r->getId() . "\" [label=\"" . $r->getReponse() . "\" href=\"" . $url . "#question_" . $q->getId() . "\"]\n"; Loading
module/Oscar/view/oscar/chemin-decisionnel-administration/chemins-decisionnels-update-question-partial.phtml +18 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,24 @@ <?php endforeach; ?> </select> </li> <li> <style> #formulaire_suivant_id_<?= $reponse->getId() ?> { display: none; } input#type_suite_formulaire_<?= $reponse->getId() ?>:checked ~ #formulaire_suivant_id_<?= $reponse->getId() ?> { display: inline; } </style> <input id="type_suite_formulaire_<?= $reponse->getId() ?>" type="radio" name="type_suite" value="formulaire" <?php if ($reponse->getCheminDecisionnelFormulaireSuivant()): ?>checked<?php endif; ?> /> <label for="type_suite_formulaire_<?= $reponse->getId() ?>">Afficher le formulaire suivant : </label> <select name="formulaire_suivant_id" id="formulaire_suivant_id_<?= $reponse->getId() ?>"> <option value="">-- Choisissez le formulaire --</option> <?php foreach( $chemin_decisionnel->getFormulaires() as $formulaireSuivant ): ?> <option value="<?= $formulaireSuivant->getId() ?>" <?php if ($reponse->getCheminDecisionnelFormulaireSuivant() && $reponse->getCheminDecisionnelFormulaireSuivant()->getId() == $formulaireSuivant->getId()): ?>selected<?php endif; ?> ><?= $formulaireSuivant->getNom() ?></option> <?php endforeach; ?> </select> </li> <li><input type="submit" value="💾 Enregistrer"></li> </ul> </form> Loading
module/Oscar/view/oscar/chemin-decisionnel-administration/chemins-decisionnels-update.phtml +4 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,10 @@ <?php else: ?> <div id="chemins_decisionnels_formulaires_table"> <style> #chemins_decisionnels_formulaires_table table { width: 90%; } #chemins_decisionnels_formulaires_table td, #chemins_decisionnels_formulaires_table th { border: 1px solid rgb(190, 190, 190); Loading