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

Ajout création de l'activité

parent d2326f44
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -575,6 +575,7 @@ return array(
                    'controller' => 'CheminDecisionnel',
                    'action' => [
                        'demarrer',
                        'terminer',
                    ],
                    'roles' => ['user']
                ],
+8 −0
Original line number Diff line number Diff line
@@ -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
+69 −4
Original line number Diff line number Diff line
@@ -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()
    {
@@ -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()
    {
+4 −0
Original line number Diff line number Diff line
@@ -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
{
@@ -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;
    }
}
+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;
@@ -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): ?>
@@ -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