Loading module/Oscar/config/module.config.php +1 −0 Original line number Diff line number Diff line Loading @@ -575,6 +575,7 @@ return array( 'controller' => 'CheminDecisionnel', 'action' => [ 'demarrer', 'terminer', ], 'roles' => ['user'] ], Loading module/Oscar/config/routes.yml +8 −0 Original line number Diff line number Diff line Loading @@ -2382,3 +2382,11 @@ chemins-decisionnels: route: /:id defaults: action: demarrer child_routes: terminer: type: segment may_terminate: true options: route: /terminer defaults: action: terminer module/Oscar/src/Oscar/Controller/CheminDecisionnelController.php +69 −4 Original line number Diff line number Diff line Loading @@ -6,15 +6,26 @@ use DateTime; use BjyAuthorize\Exception\UnAuthorizedException; use Laminas\Http\Response; use Laminas\View\Model\JsonModel; use Oscar\Entity\CheminDecisionnelFormulaire; use Oscar\Provider\Privileges; use Oscar\Service\ProjectGrantService; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarConfigurationService; use Oscar\Traits\UseOscarConfigurationServiceTrait; use Throwable; class CheminDecisionnelController extends AbstractOscarController implements UseLoggerService class CheminDecisionnelController extends AbstractOscarController implements UseLoggerService, UseOscarConfigurationService { use UseLoggerServiceTrait; use UseLoggerServiceTrait, UseOscarConfigurationServiceTrait; /** * @param ProjectGrantService $activityService */ public function setActivityService(ProjectGrantService $activityService): void { $this->activityService = $activityService; } public function demarrerAction() { Loading @@ -40,26 +51,80 @@ class CheminDecisionnelController extends AbstractOscarController implements Use $question = $cheminDecisionnel->getPremièreQuestion(); $message = NULL; $formulaire = NULL; foreach ($reponses as $reponse) { $questionSuivante = NULL; $messageSuivant = NULL; $formulaireSuivant = NULL; foreach ($question->getReponses() as $r) { if ($reponse == $r->getId()) { $questionSuivante = $r->getCheminDecisionnelQuestionSuivante(); $messageSuivant = $r->getCheminDecisionnelMessageSuivant(); $formulaireSuivant = $r->getCheminDecisionnelFormulaireSuivant(); break; } } if (!$questionSuivante && !$messageSuivant) { if (!$questionSuivante && !$messageSuivant && !$formulaireSuivant) { throw new \Exception("Les réponses ne correspondent pas au chemin décisionnel."); } $question = $questionSuivante; $message = $messageSuivant; $formulaire = $formulaireSuivant; } return ["chemin_decisionnel" => $cheminDecisionnel, "question" => $question, "message" => $message, "reponses" => $reponses]; $activityFormToShow = []; if ($formulaire) { $allActivityForm = $this->getOscarConfigurationService()->getActivityFormConfigKeying(); foreach (CheminDecisionnelFormulaire::CHAMPS_VALIDES as $v) { if (array_key_exists($v, $allActivityForm)) { $activityFormToShow[$v] = $allActivityForm[$v]; } } } if ($this->getRequest()->isPost()) { if ($this->params()->fromPost('action') == "creer_convention") { $newActivity = new \Oscar\Entity\Activity(); if ($this->params()->fromPost('dateStart')) { $newActivity->setDateStart($this->params()->fromPost('dateStart')); } if ($this->params()->fromPost('dateEnd')) { $newActivity->setDateEnd($this->params()->fromPost('dateEnd')); } if ($this->params()->fromPost('amount')) { $newActivity->setAmount($this->params()->fromPost('amount')); } $newActivity->setCurrency($this->getEntityManager()->getRepository(\Oscar\Entity\Currency::class)->findAll()[0]); $newActivity->setPcruValidPoleCompetitivite(false); $newActivity->setDisciplines([]); $newActivity->setMotscles([]); $this->getEntityManager()->persist($newActivity); $this->getEntityManager()->flush(); // Mise à jour de l'index de recherche try { $this->activityService->jobSearchUpdate($newActivity); } catch (Exception $e) { $this->getLoggerService()->error($e->getMessage()); } $this->redirect()->toRoute('chemins-decisionnels/demarrer/terminer', ['id'=>$cheminDecisionnel->getId()], ['query' => 'activity_id=' . $newActivity->getId()]); return; } } return ["chemin_decisionnel" => $cheminDecisionnel, "question" => $question, "message" => $message, "formulaire" => $formulaire, "activity_forms" => $activityFormToShow, "reponses" => $reponses]; } public function terminerAction() { $activityID = $this->params()->fromQuery('activity_id', NULL); return ['activity_id' => $activityID]; } public function formulairesAction() { Loading module/Oscar/src/Oscar/Controller/CheminDecisionnelControllerFactory.php +4 −0 Original line number Diff line number Diff line Loading @@ -5,7 +5,9 @@ namespace Oscar\Controller; use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Laminas\ServiceManager\Factory\FactoryInterface; use Oscar\Service\OscarConfigurationService; use Oscar\Service\OscarUserContext; use Oscar\Service\ProjectGrantService; class CheminDecisionnelControllerFactory implements FactoryInterface { Loading @@ -14,7 +16,9 @@ class CheminDecisionnelControllerFactory implements FactoryInterface $c = new CheminDecisionnelController(); $c->setEntityManager($container->get(EntityManager::class)); $c->setOscarUserContextService($container->get(OscarUserContext::class)); $c->setOscarConfigurationService($container->get(OscarConfigurationService::class)); $c->setLoggerService($container->get('Logger')); $c->setActivityService($container->get(ProjectGrantService::class)); return $c; } } module/Oscar/view/oscar/chemin-decisionnel/demarrer.phtml +62 −1 Original line number Diff line number Diff line <style> input[type=submit] { background-color: white; padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; padding-right: 1rem; border: 1px solid lightgrey; cursor: pointer; border-radius: 1rem; } input[type=submit]:hover { background-color: rgb(220, 220, 220); } #demarrer-chemin-decisionnel { display: flex; flex-direction: column; Loading @@ -25,7 +39,7 @@ </style> <div id="demarrer-chemin-decisionnel" class="container"> <div style="background-color: white; padding-left: 4em; padding-bottom: 1em; padding-right: 4em;"> <div style="background-color: white; padding-left: 4em; padding-bottom: 1em; padding-right: 4em; min-width: 40%;"> <?php if ($question): ?> Loading @@ -38,6 +52,53 @@ <?php elseif ($message): ?> <h1 style="padding-bottom: 3rem;"><?= $message ?></h1> <?php elseif ($formulaire): ?> <?php if (count($formulaire->getChamps()) == 0): ?> <div style="margin: 4rem;"><em>Le formulaire ne contient aucun champ pour le moment.</em></div> <?php else: ?> <form method="post" style="margin: 4rem;"> <input type="hidden" name="action" value="creer_convention"> <style> #demarrer-chemin-decisionnel form > div { display: flex; justify-content: space-between; margin-bottom: 2rem; } </style> <?php if (in_array('dateStart', $formulaire->getChamps())): ?> <div> <label for="formulaire_<?= $activity_forms['dateStart']['name'] ?>"><?= $activity_forms['dateStart']['label'] ?> :</label> <input type="date" id="formulaire_<?= $activity_forms['dateStart']['name'] ?>" name="<?= $activity_forms['dateStart']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('dateEnd', $formulaire->getChamps())): ?> <div> <label for="formulaire_<?= $activity_forms['dateEnd']['name'] ?>"><?= $activity_forms['dateEnd']['label'] ?> :</label> <input type="date" id="formulaire_<?= $activity_forms['dateEnd']['name'] ?>" name="<?= $activity_forms['dateEnd']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('amount', $formulaire->getChamps())): ?> <div> <label for="formulaire_<?= $activity_forms['amount']['name'] ?>"><?= $activity_forms['amount']['label'] ?> :</label> <input type="number" id="formulaire_<?= $activity_forms['amount']['name'] ?>" name="<?= $activity_forms['amount']['name'] ?>" step="0.01" min="0" max="100000000000" /> </div> <?php endif; ?> <input type="submit" value="Créer la demande de convention"> </form> <?php endif; ?> <?php endif; ?> </div> </div> Loading
module/Oscar/config/module.config.php +1 −0 Original line number Diff line number Diff line Loading @@ -575,6 +575,7 @@ return array( 'controller' => 'CheminDecisionnel', 'action' => [ 'demarrer', 'terminer', ], 'roles' => ['user'] ], Loading
module/Oscar/config/routes.yml +8 −0 Original line number Diff line number Diff line Loading @@ -2382,3 +2382,11 @@ chemins-decisionnels: route: /:id defaults: action: demarrer child_routes: terminer: type: segment may_terminate: true options: route: /terminer defaults: action: terminer
module/Oscar/src/Oscar/Controller/CheminDecisionnelController.php +69 −4 Original line number Diff line number Diff line Loading @@ -6,15 +6,26 @@ use DateTime; use BjyAuthorize\Exception\UnAuthorizedException; use Laminas\Http\Response; use Laminas\View\Model\JsonModel; use Oscar\Entity\CheminDecisionnelFormulaire; use Oscar\Provider\Privileges; use Oscar\Service\ProjectGrantService; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarConfigurationService; use Oscar\Traits\UseOscarConfigurationServiceTrait; use Throwable; class CheminDecisionnelController extends AbstractOscarController implements UseLoggerService class CheminDecisionnelController extends AbstractOscarController implements UseLoggerService, UseOscarConfigurationService { use UseLoggerServiceTrait; use UseLoggerServiceTrait, UseOscarConfigurationServiceTrait; /** * @param ProjectGrantService $activityService */ public function setActivityService(ProjectGrantService $activityService): void { $this->activityService = $activityService; } public function demarrerAction() { Loading @@ -40,26 +51,80 @@ class CheminDecisionnelController extends AbstractOscarController implements Use $question = $cheminDecisionnel->getPremièreQuestion(); $message = NULL; $formulaire = NULL; foreach ($reponses as $reponse) { $questionSuivante = NULL; $messageSuivant = NULL; $formulaireSuivant = NULL; foreach ($question->getReponses() as $r) { if ($reponse == $r->getId()) { $questionSuivante = $r->getCheminDecisionnelQuestionSuivante(); $messageSuivant = $r->getCheminDecisionnelMessageSuivant(); $formulaireSuivant = $r->getCheminDecisionnelFormulaireSuivant(); break; } } if (!$questionSuivante && !$messageSuivant) { if (!$questionSuivante && !$messageSuivant && !$formulaireSuivant) { throw new \Exception("Les réponses ne correspondent pas au chemin décisionnel."); } $question = $questionSuivante; $message = $messageSuivant; $formulaire = $formulaireSuivant; } return ["chemin_decisionnel" => $cheminDecisionnel, "question" => $question, "message" => $message, "reponses" => $reponses]; $activityFormToShow = []; if ($formulaire) { $allActivityForm = $this->getOscarConfigurationService()->getActivityFormConfigKeying(); foreach (CheminDecisionnelFormulaire::CHAMPS_VALIDES as $v) { if (array_key_exists($v, $allActivityForm)) { $activityFormToShow[$v] = $allActivityForm[$v]; } } } if ($this->getRequest()->isPost()) { if ($this->params()->fromPost('action') == "creer_convention") { $newActivity = new \Oscar\Entity\Activity(); if ($this->params()->fromPost('dateStart')) { $newActivity->setDateStart($this->params()->fromPost('dateStart')); } if ($this->params()->fromPost('dateEnd')) { $newActivity->setDateEnd($this->params()->fromPost('dateEnd')); } if ($this->params()->fromPost('amount')) { $newActivity->setAmount($this->params()->fromPost('amount')); } $newActivity->setCurrency($this->getEntityManager()->getRepository(\Oscar\Entity\Currency::class)->findAll()[0]); $newActivity->setPcruValidPoleCompetitivite(false); $newActivity->setDisciplines([]); $newActivity->setMotscles([]); $this->getEntityManager()->persist($newActivity); $this->getEntityManager()->flush(); // Mise à jour de l'index de recherche try { $this->activityService->jobSearchUpdate($newActivity); } catch (Exception $e) { $this->getLoggerService()->error($e->getMessage()); } $this->redirect()->toRoute('chemins-decisionnels/demarrer/terminer', ['id'=>$cheminDecisionnel->getId()], ['query' => 'activity_id=' . $newActivity->getId()]); return; } } return ["chemin_decisionnel" => $cheminDecisionnel, "question" => $question, "message" => $message, "formulaire" => $formulaire, "activity_forms" => $activityFormToShow, "reponses" => $reponses]; } public function terminerAction() { $activityID = $this->params()->fromQuery('activity_id', NULL); return ['activity_id' => $activityID]; } public function formulairesAction() { Loading
module/Oscar/src/Oscar/Controller/CheminDecisionnelControllerFactory.php +4 −0 Original line number Diff line number Diff line Loading @@ -5,7 +5,9 @@ namespace Oscar\Controller; use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Laminas\ServiceManager\Factory\FactoryInterface; use Oscar\Service\OscarConfigurationService; use Oscar\Service\OscarUserContext; use Oscar\Service\ProjectGrantService; class CheminDecisionnelControllerFactory implements FactoryInterface { Loading @@ -14,7 +16,9 @@ class CheminDecisionnelControllerFactory implements FactoryInterface $c = new CheminDecisionnelController(); $c->setEntityManager($container->get(EntityManager::class)); $c->setOscarUserContextService($container->get(OscarUserContext::class)); $c->setOscarConfigurationService($container->get(OscarConfigurationService::class)); $c->setLoggerService($container->get('Logger')); $c->setActivityService($container->get(ProjectGrantService::class)); return $c; } }
module/Oscar/view/oscar/chemin-decisionnel/demarrer.phtml +62 −1 Original line number Diff line number Diff line <style> input[type=submit] { background-color: white; padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; padding-right: 1rem; border: 1px solid lightgrey; cursor: pointer; border-radius: 1rem; } input[type=submit]:hover { background-color: rgb(220, 220, 220); } #demarrer-chemin-decisionnel { display: flex; flex-direction: column; Loading @@ -25,7 +39,7 @@ </style> <div id="demarrer-chemin-decisionnel" class="container"> <div style="background-color: white; padding-left: 4em; padding-bottom: 1em; padding-right: 4em;"> <div style="background-color: white; padding-left: 4em; padding-bottom: 1em; padding-right: 4em; min-width: 40%;"> <?php if ($question): ?> Loading @@ -38,6 +52,53 @@ <?php elseif ($message): ?> <h1 style="padding-bottom: 3rem;"><?= $message ?></h1> <?php elseif ($formulaire): ?> <?php if (count($formulaire->getChamps()) == 0): ?> <div style="margin: 4rem;"><em>Le formulaire ne contient aucun champ pour le moment.</em></div> <?php else: ?> <form method="post" style="margin: 4rem;"> <input type="hidden" name="action" value="creer_convention"> <style> #demarrer-chemin-decisionnel form > div { display: flex; justify-content: space-between; margin-bottom: 2rem; } </style> <?php if (in_array('dateStart', $formulaire->getChamps())): ?> <div> <label for="formulaire_<?= $activity_forms['dateStart']['name'] ?>"><?= $activity_forms['dateStart']['label'] ?> :</label> <input type="date" id="formulaire_<?= $activity_forms['dateStart']['name'] ?>" name="<?= $activity_forms['dateStart']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('dateEnd', $formulaire->getChamps())): ?> <div> <label for="formulaire_<?= $activity_forms['dateEnd']['name'] ?>"><?= $activity_forms['dateEnd']['label'] ?> :</label> <input type="date" id="formulaire_<?= $activity_forms['dateEnd']['name'] ?>" name="<?= $activity_forms['dateEnd']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('amount', $formulaire->getChamps())): ?> <div> <label for="formulaire_<?= $activity_forms['amount']['name'] ?>"><?= $activity_forms['amount']['label'] ?> :</label> <input type="number" id="formulaire_<?= $activity_forms['amount']['name'] ?>" name="<?= $activity_forms['amount']['name'] ?>" step="0.01" min="0" max="100000000000" /> </div> <?php endif; ?> <input type="submit" value="Créer la demande de convention"> </form> <?php endif; ?> <?php endif; ?> </div> </div>