Loading module/Oscar/src/Oscar/Controller/CheminDecisionnelAdministrationController.php +23 −3 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ 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\Traits\UseCheminDecisionnelFormulaireService; use Oscar\Traits\UseCheminDecisionnelFormulaireServiceTrait; Loading @@ -13,11 +14,13 @@ use Oscar\Traits\UseCheminDecisionnelService; use Oscar\Traits\UseCheminDecisionnelServiceTrait; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarConfigurationService; use Oscar\Traits\UseOscarConfigurationServiceTrait; use Throwable; class CheminDecisionnelAdministrationController extends AbstractOscarController implements UseLoggerService, UseCheminDecisionnelService, UseCheminDecisionnelFormulaireService class CheminDecisionnelAdministrationController extends AbstractOscarController implements UseLoggerService, UseCheminDecisionnelService, UseCheminDecisionnelFormulaireService, UseOscarConfigurationService { use UseLoggerServiceTrait, UseCheminDecisionnelServiceTrait, UseCheminDecisionnelFormulaireServiceTrait; use UseLoggerServiceTrait, UseCheminDecisionnelServiceTrait, UseCheminDecisionnelFormulaireServiceTrait, UseOscarConfigurationServiceTrait; public function cheminsDecisionnelsAction() { Loading Loading @@ -136,11 +139,28 @@ class CheminDecisionnelAdministrationController extends AbstractOscarController } if (!$this->getRequest()->isPost()) { return ['chemin_decisionnel_id' => $cheminDecisionnel->getId(), 'formulaire' => $cheminDecisionnelFormulaire]; $allActivityForm = $this->getOscarConfigurationService()->getActivityFormConfigKeying(); $activityFormToShow = []; foreach (CheminDecisionnelFormulaire::CHAMPS_VALIDES as $v) { if (array_key_exists($v, $allActivityForm)) { $activityFormToShow[$v] = $allActivityForm[$v]; } } return ['chemin_decisionnel_id' => $cheminDecisionnel->getId(), 'formulaire' => $cheminDecisionnelFormulaire, 'activity_forms' => $activityFormToShow]; } if ($this->params()->fromPost('action') == "modifier") { $this->getCheminDecisionnelFormulaireService()->modifier($cheminDecisionnel, $cheminDecisionnelFormulaire, $this->params()->fromPost('nom'), $this->getCurrentPerson()); return $this->redirect()->toRoute('administration/chemins-decisionnels/update/formulaire', ['id' => $cheminDecisionnel->getId(), 'formulaire-id' => $cheminDecisionnelFormulaire->getId()]); } else if ($this->params()->fromPost('action') == "selection_champs") { $champs = []; if ($this->params()->fromPost('champs')) { $champs = $this->params()->fromPost('champs'); } $this->getCheminDecisionnelFormulaireService()->definirChamps($cheminDecisionnel, $cheminDecisionnelFormulaire, $champs, $this->getCurrentPerson()); return $this->redirect()->toRoute('administration/chemins-decisionnels/update/formulaire', ['id' => $cheminDecisionnel->getId(), 'formulaire-id' => $cheminDecisionnelFormulaire->getId()]); } Loading module/Oscar/src/Oscar/Controller/CheminDecisionnelAdministrationControllerFactory.php +2 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Oscar\Controller; use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Laminas\ServiceManager\Factory\FactoryInterface; use Oscar\Service\OscarConfigurationService; use Oscar\Service\OscarUserContext; class CheminDecisionnelAdministrationControllerFactory implements FactoryInterface Loading @@ -15,6 +16,7 @@ class CheminDecisionnelAdministrationControllerFactory implements FactoryInterfa $c->setEntityManager($container->get(EntityManager::class)); $c->setOscarUserContextService($container->get(OscarUserContext::class)); $c->setLoggerService($container->get('Logger')); $c->setOscarConfigurationService($container->get(OscarConfigurationService::class)); $c->setCheminDecisionnelService($container->get(\Oscar\Service\CheminDecisionnelService::class)); $c->setCheminDecisionnelFormulaireService($container->get(\Oscar\Service\CheminDecisionnelFormulaireService::class)); return $c; Loading module/Oscar/src/Oscar/Entity/CheminDecisionnelFormulaire.php +27 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,15 @@ class CheminDecisionnelFormulaire */ private $nom; const CHAMPS_VALIDES = ['dateStart', 'dateEnd', 'amount']; /** * Liste des champs. * * @ORM\Column(type="array", nullable=false) */ private $champs = []; /** * @var \DateTime * @ORM\Column(type="datetime", nullable=false) Loading Loading @@ -86,6 +95,24 @@ class CheminDecisionnelFormulaire $this->dateCreated = new \DateTime(); } /** * @return array */ public function getChamps() { return $this->champs; } /** * @param array $champs */ public function setChamps($champs) { $this->champs = $champs; return $this; } /** * @return \DateTime */ Loading module/Oscar/src/Oscar/Service/CheminDecisionnelFormulaireService.php +20 −0 Original line number Diff line number Diff line Loading @@ -59,4 +59,24 @@ class CheminDecisionnelFormulaireService implements UseEntityManager, UseLoggerS $cheminDecisionnel->setDateUpdated(new \DateTime()); $this->getEntityManager()->flush(); } public function definirChamps(CheminDecisionnel $cheminDecisionnel, CheminDecisionnelFormulaire $cheminDecisionnelFormulaire, array $champs, \Oscar\Entity\Person $person): void { $this->getLoggerService()->info("CheminDecisionnelFormulaireService definirChamps"); $this->getLoggerService()->info("by: " . $person); $champsValides = []; foreach ($champs as $c) { if (in_array($c, CheminDecisionnelFormulaire::CHAMPS_VALIDES)) { $champsValides[] = $c; } } $cheminDecisionnelFormulaire->setChamps($champsValides); $cheminDecisionnelFormulaire->setUpdatedBy($person); $cheminDecisionnelFormulaire->setDateUpdated(new \DateTime()); $cheminDecisionnel->setUpdatedBy($person); $cheminDecisionnel->setDateUpdated(new \DateTime()); $this->getEntityManager()->flush(); } } module/Oscar/view/oscar/chemin-decisionnel-administration/formulaire.phtml +59 −0 Original line number Diff line number Diff line Loading @@ -28,4 +28,63 @@ </form> </div> <div style="margin-bottom: 4rem; background-color: white; border-radius: 1rem; padding: 1rem; margin-top: 1rem; padding-left: 3rem;"> <h2>Prévisualisation du formulaire</h2> <?php if (count($formulaire->getChamps()) == 0): ?> <div style="margin: 4rem;"><em>Le formulaire ne contient aucun champ pour le moment. Vous pouvez en ajouter ci-dessous.</em></div> <?php else: ?> <form style="margin: 4rem;"> <?php if (in_array('dateStart', $formulaire->getChamps())): ?> <div> <label for="previsualisation_<?= $activity_forms['dateStart']['name'] ?>"><?= $activity_forms['dateStart']['label'] ?> :</label> <input type="date" id="previsualisation_<?= $activity_forms['dateStart']['name'] ?>" name="<?= $activity_forms['dateStart']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('dateEnd', $formulaire->getChamps())): ?> <div> <label for="previsualisation_<?= $activity_forms['dateEnd']['name'] ?>"><?= $activity_forms['dateEnd']['label'] ?> :</label> <input type="date" id="previsualisation_<?= $activity_forms['dateEnd']['name'] ?>" name="<?= $activity_forms['dateEnd']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('amount', $formulaire->getChamps())): ?> <div> <label for="previsualisation_<?= $activity_forms['amount']['name'] ?>"><?= $activity_forms['amount']['label'] ?> :</label> <input type="number" id="previsualisation_<?= $activity_forms['amount']['name'] ?>" name="<?= $activity_forms['amount']['name'] ?>" step="0.01" min="0" max="100000000000" /> </div> <?php endif; ?> </form> <?php endif; ?> </div> <div style="margin-bottom: 4rem; background-color: white; border-radius: 1rem; padding: 1rem; margin-top: 1rem; padding-left: 3rem;"> <h2>Sélection des champs à afficher</h2> <form method="post" style="margin-left: 2rem; margin-top: 2rem; margin-bottom: 4rem;"> <input type="hidden" name="action" value="selection_champs"> <?php foreach ($activity_forms as $activity_form): ?> <div> <label> <input type="checkbox" id="<?= $activity_form['name'] ?>" name="champs[]" value="<?= $activity_form['name'] ?>" <?php if (in_array($activity_form['name'], $formulaire->getChamps())) { echo "checked"; } ?> /> <?= $activity_form['label'] ?> </label> </div> <?php endforeach; ?> <input type="submit" value="💾 Enregistrer les champs du formulaire"> </form> </div> </div> Loading
module/Oscar/src/Oscar/Controller/CheminDecisionnelAdministrationController.php +23 −3 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ 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\Traits\UseCheminDecisionnelFormulaireService; use Oscar\Traits\UseCheminDecisionnelFormulaireServiceTrait; Loading @@ -13,11 +14,13 @@ use Oscar\Traits\UseCheminDecisionnelService; use Oscar\Traits\UseCheminDecisionnelServiceTrait; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarConfigurationService; use Oscar\Traits\UseOscarConfigurationServiceTrait; use Throwable; class CheminDecisionnelAdministrationController extends AbstractOscarController implements UseLoggerService, UseCheminDecisionnelService, UseCheminDecisionnelFormulaireService class CheminDecisionnelAdministrationController extends AbstractOscarController implements UseLoggerService, UseCheminDecisionnelService, UseCheminDecisionnelFormulaireService, UseOscarConfigurationService { use UseLoggerServiceTrait, UseCheminDecisionnelServiceTrait, UseCheminDecisionnelFormulaireServiceTrait; use UseLoggerServiceTrait, UseCheminDecisionnelServiceTrait, UseCheminDecisionnelFormulaireServiceTrait, UseOscarConfigurationServiceTrait; public function cheminsDecisionnelsAction() { Loading Loading @@ -136,11 +139,28 @@ class CheminDecisionnelAdministrationController extends AbstractOscarController } if (!$this->getRequest()->isPost()) { return ['chemin_decisionnel_id' => $cheminDecisionnel->getId(), 'formulaire' => $cheminDecisionnelFormulaire]; $allActivityForm = $this->getOscarConfigurationService()->getActivityFormConfigKeying(); $activityFormToShow = []; foreach (CheminDecisionnelFormulaire::CHAMPS_VALIDES as $v) { if (array_key_exists($v, $allActivityForm)) { $activityFormToShow[$v] = $allActivityForm[$v]; } } return ['chemin_decisionnel_id' => $cheminDecisionnel->getId(), 'formulaire' => $cheminDecisionnelFormulaire, 'activity_forms' => $activityFormToShow]; } if ($this->params()->fromPost('action') == "modifier") { $this->getCheminDecisionnelFormulaireService()->modifier($cheminDecisionnel, $cheminDecisionnelFormulaire, $this->params()->fromPost('nom'), $this->getCurrentPerson()); return $this->redirect()->toRoute('administration/chemins-decisionnels/update/formulaire', ['id' => $cheminDecisionnel->getId(), 'formulaire-id' => $cheminDecisionnelFormulaire->getId()]); } else if ($this->params()->fromPost('action') == "selection_champs") { $champs = []; if ($this->params()->fromPost('champs')) { $champs = $this->params()->fromPost('champs'); } $this->getCheminDecisionnelFormulaireService()->definirChamps($cheminDecisionnel, $cheminDecisionnelFormulaire, $champs, $this->getCurrentPerson()); return $this->redirect()->toRoute('administration/chemins-decisionnels/update/formulaire', ['id' => $cheminDecisionnel->getId(), 'formulaire-id' => $cheminDecisionnelFormulaire->getId()]); } Loading
module/Oscar/src/Oscar/Controller/CheminDecisionnelAdministrationControllerFactory.php +2 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ namespace Oscar\Controller; use Doctrine\ORM\EntityManager; use Interop\Container\ContainerInterface; use Laminas\ServiceManager\Factory\FactoryInterface; use Oscar\Service\OscarConfigurationService; use Oscar\Service\OscarUserContext; class CheminDecisionnelAdministrationControllerFactory implements FactoryInterface Loading @@ -15,6 +16,7 @@ class CheminDecisionnelAdministrationControllerFactory implements FactoryInterfa $c->setEntityManager($container->get(EntityManager::class)); $c->setOscarUserContextService($container->get(OscarUserContext::class)); $c->setLoggerService($container->get('Logger')); $c->setOscarConfigurationService($container->get(OscarConfigurationService::class)); $c->setCheminDecisionnelService($container->get(\Oscar\Service\CheminDecisionnelService::class)); $c->setCheminDecisionnelFormulaireService($container->get(\Oscar\Service\CheminDecisionnelFormulaireService::class)); return $c; Loading
module/Oscar/src/Oscar/Entity/CheminDecisionnelFormulaire.php +27 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,15 @@ class CheminDecisionnelFormulaire */ private $nom; const CHAMPS_VALIDES = ['dateStart', 'dateEnd', 'amount']; /** * Liste des champs. * * @ORM\Column(type="array", nullable=false) */ private $champs = []; /** * @var \DateTime * @ORM\Column(type="datetime", nullable=false) Loading Loading @@ -86,6 +95,24 @@ class CheminDecisionnelFormulaire $this->dateCreated = new \DateTime(); } /** * @return array */ public function getChamps() { return $this->champs; } /** * @param array $champs */ public function setChamps($champs) { $this->champs = $champs; return $this; } /** * @return \DateTime */ Loading
module/Oscar/src/Oscar/Service/CheminDecisionnelFormulaireService.php +20 −0 Original line number Diff line number Diff line Loading @@ -59,4 +59,24 @@ class CheminDecisionnelFormulaireService implements UseEntityManager, UseLoggerS $cheminDecisionnel->setDateUpdated(new \DateTime()); $this->getEntityManager()->flush(); } public function definirChamps(CheminDecisionnel $cheminDecisionnel, CheminDecisionnelFormulaire $cheminDecisionnelFormulaire, array $champs, \Oscar\Entity\Person $person): void { $this->getLoggerService()->info("CheminDecisionnelFormulaireService definirChamps"); $this->getLoggerService()->info("by: " . $person); $champsValides = []; foreach ($champs as $c) { if (in_array($c, CheminDecisionnelFormulaire::CHAMPS_VALIDES)) { $champsValides[] = $c; } } $cheminDecisionnelFormulaire->setChamps($champsValides); $cheminDecisionnelFormulaire->setUpdatedBy($person); $cheminDecisionnelFormulaire->setDateUpdated(new \DateTime()); $cheminDecisionnel->setUpdatedBy($person); $cheminDecisionnel->setDateUpdated(new \DateTime()); $this->getEntityManager()->flush(); } }
module/Oscar/view/oscar/chemin-decisionnel-administration/formulaire.phtml +59 −0 Original line number Diff line number Diff line Loading @@ -28,4 +28,63 @@ </form> </div> <div style="margin-bottom: 4rem; background-color: white; border-radius: 1rem; padding: 1rem; margin-top: 1rem; padding-left: 3rem;"> <h2>Prévisualisation du formulaire</h2> <?php if (count($formulaire->getChamps()) == 0): ?> <div style="margin: 4rem;"><em>Le formulaire ne contient aucun champ pour le moment. Vous pouvez en ajouter ci-dessous.</em></div> <?php else: ?> <form style="margin: 4rem;"> <?php if (in_array('dateStart', $formulaire->getChamps())): ?> <div> <label for="previsualisation_<?= $activity_forms['dateStart']['name'] ?>"><?= $activity_forms['dateStart']['label'] ?> :</label> <input type="date" id="previsualisation_<?= $activity_forms['dateStart']['name'] ?>" name="<?= $activity_forms['dateStart']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('dateEnd', $formulaire->getChamps())): ?> <div> <label for="previsualisation_<?= $activity_forms['dateEnd']['name'] ?>"><?= $activity_forms['dateEnd']['label'] ?> :</label> <input type="date" id="previsualisation_<?= $activity_forms['dateEnd']['name'] ?>" name="<?= $activity_forms['dateEnd']['name'] ?>" /> </div> <?php endif; ?> <?php if (in_array('amount', $formulaire->getChamps())): ?> <div> <label for="previsualisation_<?= $activity_forms['amount']['name'] ?>"><?= $activity_forms['amount']['label'] ?> :</label> <input type="number" id="previsualisation_<?= $activity_forms['amount']['name'] ?>" name="<?= $activity_forms['amount']['name'] ?>" step="0.01" min="0" max="100000000000" /> </div> <?php endif; ?> </form> <?php endif; ?> </div> <div style="margin-bottom: 4rem; background-color: white; border-radius: 1rem; padding: 1rem; margin-top: 1rem; padding-left: 3rem;"> <h2>Sélection des champs à afficher</h2> <form method="post" style="margin-left: 2rem; margin-top: 2rem; margin-bottom: 4rem;"> <input type="hidden" name="action" value="selection_champs"> <?php foreach ($activity_forms as $activity_form): ?> <div> <label> <input type="checkbox" id="<?= $activity_form['name'] ?>" name="champs[]" value="<?= $activity_form['name'] ?>" <?php if (in_array($activity_form['name'], $formulaire->getChamps())) { echo "checked"; } ?> /> <?= $activity_form['label'] ?> </label> </div> <?php endforeach; ?> <input type="submit" value="💾 Enregistrer les champs du formulaire"> </form> </div> </div>