Commit d2326f44 authored by Jean-Baptiste Oellers's avatar Jean-Baptiste Oellers
Browse files

Ajout des formulaires comme réponse possible

parent dc727851
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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") {
@@ -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()]);
        }

+25 −0
Original line number Diff line number Diff line
@@ -68,6 +68,13 @@ class CheminDecisionnelQuestionReponse
     */
    private $cheminDecisionnelMessageSuivant;

    /**
     * @var ?CheminDecisionnelFormulaire
     * @ORM\ManyToOne(targetEntity="CheminDecisionnelFormulaire")
     * @ORM\JoinColumn(onDelete="SET NULL")
     */
    private $cheminDecisionnelFormulaireSuivant;

    /**
     * @return mixed
     */
@@ -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();
+32 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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";
@@ -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";
+18 −0
Original line number Diff line number Diff line
@@ -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>
+4 −0
Original line number Diff line number Diff line
@@ -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);