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

Ajout selection des champs

parent 6c20f142
Loading
Loading
Loading
Loading
Loading
+23 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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()
    {
@@ -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()]);
        }

+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -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;
+27 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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
     */
+20 −0
Original line number Diff line number Diff line
@@ -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();
  }
}
+59 −0
Original line number Diff line number Diff line
@@ -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>