Commit 0dbef8ea authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

[Formation] Ajout d'un bouton pour changer l'état vers un état donnée sans respecter le circuit

parent 594746cf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
* Ajout des temoins hiérarchique et fonctionnelle pour les affectations
* Ajout du pourcentage de l'affectation pour les affectations
* [FIX] correction de la route de retour lors de l'abonnement/désabonnement à une formation
* [Formation] Ajout d'un bouton pour changer l'état vers un état donnée sans respecter le circuit

**Modifications de la base de donnée**

+12 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ return [
                        'envoyer-convocation',
                        'demander-retour',
                        'cloturer',
                        'changer-etat',
                    ],
                    'privileges' => [
                        FormationinstancePrivileges::FORMATIONINSTANCE_GERER_INSCRIPTION,
@@ -307,6 +308,17 @@ return [
                            ],
                        ],
                    ],
                    /** @see FormationInstanceController::changerEtatAction() */
                    'changer-etat' => [
                        'type'  => Segment::class,
                        'options' => [
                            'route'    => '/changer-etat/:formation-instance',
                            'defaults' => [
                                'controller' => FormationInstanceController::class,
                                'action'     => 'changer-etat',
                            ],
                        ],
                    ],
                ],
            ],
        ],
+49 −19
Original line number Diff line number Diff line
@@ -2,24 +2,22 @@

namespace Formation\Controller;

use Formation\Service\Notification\NotificationServiceAwareTrait;
use Formation\Service\Presence\PresenceAwareTrait;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceServiceAwareTrait;
use DateInterval;
use DateTime;
use Formation\Form\FormationInstance\FormationInstanceFormAwareTrait;
use Formation\Service\Evenement\RappelAgentAvantFormationServiceAwareTrait;
use Formation\Provider\Etat\SessionEtats;
use Formation\Service\Formation\FormationServiceAwareTrait;
use Formation\Service\FormationInstance\FormationInstanceServiceAwareTrait;
use Formation\Service\FormationInstanceInscrit\FormationInstanceInscritServiceAwareTrait;
use UnicaenEtat\Service\Etat\EtatServiceAwareTrait;
use UnicaenMail\Service\Mail\MailServiceAwareTrait;
use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;
use Formation\Service\Notification\NotificationServiceAwareTrait;
use Formation\Service\Presence\PresenceAwareTrait;
use Laminas\Http\Request;
use Laminas\Http\Response;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Laminas\View\Model\ViewModel;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceServiceAwareTrait;
use UnicaenEtat\Service\Etat\EtatServiceAwareTrait;
use UnicaenMail\Service\Mail\MailServiceAwareTrait;
use UnicaenParametre\Service\Parametre\ParametreServiceAwareTrait;

/** @method FlashMessenger flashMessenger() */

@@ -35,7 +33,6 @@ class FormationInstanceController extends AbstractActionController
    use ParametreServiceAwareTrait;
    use PresenceAwareTrait;
    use FormationInstanceFormAwareTrait;
    use RappelAgentAvantFormationServiceAwareTrait;

    public function indexAction() : ViewModel
    {
@@ -196,12 +193,6 @@ class FormationInstanceController extends AbstractActionController
        $instance = $this->getFormationInstanceService()->getRequestedFormationInstance($this);
        $this->getFormationInstanceService()->ouvrirInscription($instance);

        //notification abonnement
        $abonnements = $instance->getFormation()->getAbonnements();
        foreach ($abonnements as $abonnement) {
            if ($abonnement->estNonHistorise()) $this->getNotificationService()->triggerNouvelleSession($instance, $abonnement);
        }

        return $this->redirect()->toRoute('formation-instance/afficher', ['formation-instance' => $instance->getId()], [], true);
    }

@@ -210,9 +201,7 @@ class FormationInstanceController extends AbstractActionController
        $instance = $this->getFormationInstanceService()->getRequestedFormationInstance($this);
        $this->getFormationInstanceService()->fermerInscription($instance);

        $dateRappel = DateTime::createFromFormat('d/m/Y H:i', $instance->getDebut() . " 08:00");
        $dateRappel->sub(new DateInterval('P4D'));
        $this->getRappelAgentAvantFormationService()->creer($instance, $dateRappel);


        return $this->redirect()->toRoute('formation-instance/afficher', ['formation-instance' => $instance->getId()], [], true);
    }
@@ -252,4 +241,45 @@ class FormationInstanceController extends AbstractActionController
        $this->getFormationInstanceService()->reouvrir($instance);
        return $this->redirect()->toRoute('formation-instance/afficher', ['formation-instance' => $instance->getId()], [], true);
    }

    public function changerEtatAction() : ViewModel
    {
        $instance = $this->getFormationInstanceService()->getRequestedFormationInstance($this);

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $etat = $this->getEtatService()->getEtat($data['etat']);

            switch($etat->getCode()) {
                case SessionEtats::ETAT_CREATION_EN_COURS :
                    $this->getFormationInstanceService()->recreation($instance);
                    exit();
                case SessionEtats::ETAT_INSCRIPTION_OUVERTE :
                    $this->getFormationInstanceService()->ouvrirInscription($instance);
                    exit();
                case SessionEtats::ETAT_INSCRIPTION_FERMEE :
                    $this->getFormationInstanceService()->fermerInscription($instance);
                    exit();
                case SessionEtats::ETAT_FORMATION_CONVOCATION :
                    $this->getFormationInstanceService()->envoyerConvocation($instance);
                    exit();
                case SessionEtats::ETAT_ATTENTE_RETOURS :
                    $this->getFormationInstanceService()->demanderRetour($instance);
                    exit();
                case SessionEtats::ETAT_CLOTURE_INSTANCE :
                    $this->getFormationInstanceService()->cloturer($instance);
                    exit();
                default :
            }

            exit();
        }

        return new ViewModel([
           'title' => "Changer l'état de la session de formation",
           'etats' => $this->getEtatService()->getEtatsByTypeCode(SessionEtats::TYPE),
           'instance' => $instance,
        ]);
    }
}
 No newline at end of file
+5 −9
Original line number Diff line number Diff line
@@ -2,17 +2,16 @@

namespace Formation\Controller;

use Formation\Service\Notification\NotificationService;
use Formation\Service\Presence\PresenceService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceService;
use Formation\Form\FormationInstance\FormationInstanceForm;
use Formation\Service\Evenement\RappelAgentAvantFormationService;
use Formation\Service\Formation\FormationService;
use Formation\Service\FormationInstance\FormationInstanceService;
use Formation\Service\FormationInstanceInscrit\FormationInstanceInscritService;
use Formation\Service\Notification\NotificationService;
use Formation\Service\Presence\PresenceService;
use Interop\Container\ContainerInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenAutoform\Service\Formulaire\FormulaireInstanceService;
use UnicaenEtat\Service\Etat\EtatService;
use UnicaenMail\Service\Mail\MailService;
use UnicaenParametre\Service\Parametre\ParametreService;
@@ -38,7 +37,6 @@ class FormationInstanceControllerFactory
         * @var NotificationService $notificationService
         * @var ParametreService $parametreService
         * @var PresenceService $presenceService
         * @var RappelAgentAvantFormationService $rappelAgentAvantFormationService
         */
        $etatService = $container->get(EtatService::class);
        $formationService = $container->get(FormationService::class);
@@ -49,7 +47,6 @@ class FormationInstanceControllerFactory
        $notificationService = $container->get(NotificationService::class);
        $parametreService = $container->get(ParametreService::class);
        $presenceService = $container->get(PresenceService::class);
        $rappelAgentAvantFormationService = $container->get(RappelAgentAvantFormationService::class);

        /**
         * @var FormationInstanceForm $formationInstanceForm
@@ -68,7 +65,6 @@ class FormationInstanceControllerFactory
        $controller->setNotificationService($notificationService);
        $controller->setParametreService($parametreService);
        $controller->setPresenceService($presenceService);
        $controller->setRappelAgentAvantFormationService($rappelAgentAvantFormationService);
        return $controller;
    }

+23 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ use Formation\Entity\Db\FormationInstanceInscrit;
use Formation\Entity\Db\PlanDeFormation;
use Formation\Provider\Etat\SessionEtats;
use Formation\Service\Abonnement\AbonnementServiceAwareTrait;
use Formation\Service\Evenement\RappelAgentAvantFormationServiceAwareTrait;
use Formation\Service\Notification\NotificationServiceAwareTrait;
use Laminas\Mvc\Controller\AbstractActionController;
use UnicaenApp\Exception\RuntimeException;
@@ -30,6 +31,7 @@ class FormationInstanceService
    use EtatServiceAwareTrait;
    use NotificationServiceAwareTrait;
    use ParametreServiceAwareTrait;
    use RappelAgentAvantFormationServiceAwareTrait;
    use SourceServiceAwareTrait;


@@ -314,6 +316,16 @@ class FormationInstanceService

    /** Fonctions associées aux états de l'instance *******************************************************************/


    public function recreation(FormationInstance $instance) : FormationInstance
    {
        $instance->setEtat($this->getEtatService()->getEtatByCode(SessionEtats::ETAT_CREATION_EN_COURS));
        $this->update($instance);

        return $instance;
    }


    /**
     * @param FormationInstance $instance
     * @return FormationInstance
@@ -323,6 +335,12 @@ class FormationInstanceService
        $instance->setEtat($this->getEtatService()->getEtatByCode(SessionEtats::ETAT_INSCRIPTION_OUVERTE));
        $this->update($instance);

        //notification abonnement
        $abonnements = $instance->getFormation()->getAbonnements();
        foreach ($abonnements as $abonnement) {
            if ($abonnement->estNonHistorise()) $this->getNotificationService()->triggerNouvelleSession($instance, $abonnement);
        }

        return $instance;
    }

@@ -349,6 +367,11 @@ class FormationInstanceService
            $abonnement = $this->getAbonnementService()->getAbonnementByAgentAndFormation($agent, $formation);
            if ($abonnement === null) $this->getAbonnementService()->ajouterAbonnement($agent, $formation);
        }

        $dateRappel = DateTime::createFromFormat('d/m/Y H:i', $instance->getDebut() . " 08:00");
        $dateRappel->sub(new DateInterval('P4D'));
        $this->getRappelAgentAvantFormationService()->creer($instance, $dateRappel);

        return $instance;
    }

@@ -481,5 +504,4 @@ class FormationInstanceService

        return $result;
    }

}
 No newline at end of file
Loading