Skip to content
Snippets Groups Projects
Commit d0de1e51 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Motif d'annulation de session

parent 453a92d1
No related branches found
No related tags found
No related merge requests found
Showing
with 198 additions and 7 deletions
......@@ -41,7 +41,8 @@ INSERT INTO unicaen_renderer_macro (code, description, variable_name, methode_na
('Url#GestionDemandesExternes', '<p>Retourne le lien vers la page de gestion des demandes externes</p>', 'UrlService', 'getUrlGestionDemandesExternes'),
('Url#MesFormations', '<p>Retourne l''url de la page des formations réalisées d''un·e agent·e</p>', 'UrlService', 'getUrlMesFormations'),
('Url#PlanDeFormation', '<p>Fourni un lieu vers la page des plans de formation courants</p>', 'UrlService', 'getUrlPlanDeFormation'),
('Url#ValidateurDemandesExternes', '<p>Retourne l''url associé à la page mes agents avec l''onglet ''Demande à titre individuel'' sélectionné</p>', 'UrlService', 'getUrlValidateurDemandesExternes')
('Url#ValidateurDemandesExternes', '<p>Retourne l''url associé à la page mes agents avec l''onglet ''Demande à titre individuel'' sélectionné</p>', 'UrlService', 'getUrlValidateurDemandesExternes'),
('SESSION#MotifAnnulation', '<p>Affiche le motif d''annulation</p>', 'session', 'getMotifAnnulation')
;
INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('ENQUETE_EXPLICATION', '<p>Texte précisant le caractère anonyme et <em>facultatif</em> de l''enquête</p>', 'texte', 'À propos des formulaires de retour d''expérience', e'<p>Ces formulaires sont anonymes et si vous ne souhaitez pas fournir de réponse à une des questions de l\'enquête vous pouvez sélectionner la réponse "<em>Sans avis</em>".</p>
......
......@@ -9,6 +9,10 @@ use Formation\Controller\SessionControllerFactory;
use Formation\Controller\InscriptionController;
use Formation\Event\NotificationNouvellesSessions\NotificationNouvellesSessionsEvent;
use Formation\Event\NotificationNouvellesSessions\NotificationNouvellesSessionsEventFactory;
use Formation\Form\Annulation\AnnulationForm;
use Formation\Form\Annulation\AnnulationFormFactory;
use Formation\Form\Annulation\AnnulationHydrator;
use Formation\Form\Annulation\AnnulationHydratorFactory;
use Formation\Form\Session\SessionForm;
use Formation\Form\Session\SessionFormFactory;
use Formation\Form\Session\SessionHydrator;
......@@ -479,11 +483,13 @@ return [
],
'form_elements' => [
'factories' => [
AnnulationForm::class => AnnulationFormFactory::class,
SessionForm::class => SessionFormFactory::class,
],
],
'hydrators' => [
'factories' => [
AnnulationHydrator::class => AnnulationHydratorFactory::class,
SessionHydrator::class => SessionHydratorFactory::class,
],
],
......
......@@ -4,6 +4,7 @@ namespace Formation\Controller;
use DateTime;
use Formation\Entity\Db\Inscription;
use Formation\Form\Annulation\AnnulationFormAwareTrait;
use Formation\Form\SelectionFormateur\SelectionFormateurFormAwareTrait;
use Formation\Form\SelectionGestionnaire\SelectionGestionnaireFormAwareTrait;
use Formation\Form\Session\SessionFormAwareTrait;
......@@ -50,6 +51,7 @@ class SessionController extends AbstractActionController
use ResultatServiceAwareTrait;
use UserServiceAwareTrait;
use AnnulationFormAwareTrait;
use SelectionFormateurFormAwareTrait;
use SelectionGestionnaireFormAwareTrait;
use SessionFormAwareTrait;
......@@ -337,11 +339,30 @@ class SessionController extends AbstractActionController
return $this->redirect()->toRoute('session/afficher', ['session' => $session->getId()], [], true);
}
public function annulerAction(): Response
public function annulerAction(): ViewModel
{
$session = $this->getSessionService()->getRequestedSession($this);
$form = $this->getAnnulationForm();
$form->setAttribute('action', $this->url()->fromRoute('session/annuler', ['session' => $session->getId()] ,[], true));
$form->bind($session);
$request = $this->getRequest();
if ($request->isPost()) {
$data = $request->getPost();
$form->setData($data);
if ($form->isValid()) {
$this->getSessionService()->annuler($session);
return $this->redirect()->toRoute('session/afficher', ['session' => $session->getId()], [], true);
exit();
}
}
$vm = new ViewModel([
'title' => "Annulation de la session",
'form' => $form,
]);
$vm->setTemplate('default/default-form');
return $vm;
}
public function reouvrirAction(): Response
......
......@@ -2,6 +2,7 @@
namespace Formation\Controller;
use Formation\Form\Annulation\AnnulationForm;
use Formation\Form\SelectionFormateur\SelectionFormateurForm;
use Formation\Form\SelectionGestionnaire\SelectionGestionnaireForm;
use Formation\Form\Session\SessionForm;
......@@ -63,10 +64,12 @@ class SessionControllerFactory
$userService = $container->get(UserService::class);
/**
* @var AnnulationForm $annulationForm
* @var SelectionFormateurForm $selectionFormateurForm
* @var SelectionGestionnaireForm $selectionGestionnaireForm
* @var SessionForm $sessionForm
*/
$annulationForm = $container->get('FormElementManager')->get(AnnulationForm::class);
$sessionForm = $container->get('FormElementManager')->get(SessionForm::class);
$selectionFormateurForm = $container->get('FormElementManager')->get(SelectionFormateurForm::class);
$selectionGestionnaireForm = $container->get('FormElementManager')->get(SelectionGestionnaireForm::class);
......@@ -86,6 +89,7 @@ class SessionControllerFactory
$controller->setResultatService($resultatService);
$controller->setSessionService($sessionService);
$controller->setUserService($userService);
$controller->setAnnulationForm($annulationForm);
$controller->setSessionForm($sessionForm);
$controller->setSelectionFormateurForm($selectionFormateurForm);
$controller->setSelectionGestionnaireForm($selectionGestionnaireForm);
......
......@@ -16,7 +16,8 @@
<field name="lieu" type="string" length="256" column="lieu" nullable="true"/>
<field name="type" type="string" length="256" column="type" nullable="true"/>
<field name="autoInscription" type="boolean" column="auto_inscription" nullable="true"/>
<field name="complement" type="string" length="4096" column="complement" nullable="true"/>
<field name="complement" type="text" column="complement" nullable="true"/>
<field name="motifAnnulation" type="text" column="motif_annulation" nullable="true"/>
<one-to-many field="journees" target-entity="Formation\Entity\Db\Seance" mapped-by="instance"/>
<one-to-many field="inscriptions" target-entity="Formation\Entity\Db\Inscription" mapped-by="session"/>
......
......@@ -72,6 +72,7 @@ class Session implements
private ?SessionParametre $parametre = null;
private ?string $motifAnnulation = null;
public function __construct()
......@@ -142,6 +143,17 @@ class Session implements
return $this;
}
public function getMotifAnnulation(): ?string
{
return $this->motifAnnulation;
}
public function setMotifAnnulation(?string $motifAnnulation): void
{
$this->motifAnnulation = $motifAnnulation;
}
/** PLACE SUR LISTE **********************************************************************************************/
/**
......
<?php
namespace Formation\Form\Annulation;
use Laminas\Form\Element\Button;
use Laminas\Form\Element\Textarea;
use Laminas\Form\Form;
use Laminas\InputFilter\Factory;
class AnnulationForm extends Form
{
public function init() : void
{
//description
$this->add([
'name' => 'motif_annulation',
'type' => Textarea::class,
'options' => [
'label' => "Motif d'annulation <span class='icon icon-obligatoire' title='champ obligatoire'></span> :",
'label_options' => ['disable_html_escape' => true,],
'label_attributes' => [
'class' => 'control-label',
],
],
'attributes' => [
'id' => 'motif_annulation',
'class' => 'tinymce',
]
]);
//bouton
$this->add([
'type' => Button::class,
'name' => 'bouton',
'options' => [
'label' => '<i class="fas fa-save"></i> Enregistrer',
'label_options' => [
'disable_html_escape' => true,
],
],
'attributes' => [
'type' => 'submit',
'class' => 'btn btn-success',
],
]);
$this->setInputFilter((new Factory())->createInputFilter([
'motif_annulation' => [ 'require' => true, ],
]));
}
}
\ No newline at end of file
<?php
namespace Formation\Form\Annulation;
trait AnnulationFormAwareTrait {
private AnnulationForm $annulationForm;
public function getAnnulationForm(): AnnulationForm
{
return $this->annulationForm;
}
public function setAnnulationForm(AnnulationForm $annulationForm): void
{
$this->annulationForm = $annulationForm;
}
}
\ No newline at end of file
<?php
namespace Formation\Form\Annulation;
use Laminas\Form\Annotation\Hydrator;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
class AnnulationFormFactory {
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $containerInterface): AnnulationForm
{
/** @var AnnulationHydrator $hydrator */
$hydrator = $containerInterface->get('HydratorManager')->get(AnnulationHydrator::class);
$form = new AnnulationForm();
$form->setHydrator($hydrator);
return $form;
}
}
\ No newline at end of file
<?php
namespace Formation\Form\Annulation;
use Formation\Entity\Db\Session;
use Laminas\Hydrator\HydratorInterface;
class AnnulationHydrator implements HydratorInterface {
public function extract(object $object): array
{
/** @var Session $object */
$data = [
'motif_annulation' => $object->getMotifAnnulation(),
];
return $data;
}
public function hydrate(array $data, object $object): object
{
$motif = (isset($data['motif_annulation']) AND trim($data['motif_annulation']) !== '') ? trim($data['motif_annulation']) : null;
/** @var Session $object */
$object->setMotifAnnulation($motif);
return $object;
}
}
\ No newline at end of file
<?php
namespace Formation\Form\Annulation;
use Psr\Container\ContainerInterface;
class AnnulationHydratorFactory {
public function __invoke(ContainerInterface $container): AnnulationHydrator
{
$hydrator = new AnnulationHydrator();
return $hydrator;
}
}
\ No newline at end of file
......@@ -2,7 +2,6 @@
namespace Formation\View\Helper;
use Formation\Entity\Db\FormationInstance;
use Formation\Entity\Db\Session;
use Laminas\View\Helper\AbstractHelper;
use Laminas\View\Helper\Partial;
......
......@@ -10,6 +10,7 @@
use Application\Entity\Db\Interfaces\HasSourceInterface;
use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
use Formation\Entity\Db\Session;
use Formation\Provider\Etat\SessionEtats;
$gestionnaires = $session->getGestionnaires();
......@@ -24,6 +25,16 @@ $displayListe = (!isset($options['display-liste']) OR $options['display-liste']
<dl class="row">
<dt class="col-md-3"> État</dt>
<dd class="col-md-9"> <?php echo ($session->getEtatActif()) ? $this->etattype($session->getEtatActif()->getType(), ['display-categorie' => false]) . " " . $session->getEtatActif()->getType()->getLibelle() : "N.C."; ?> </dd>
<?php if ($session->isEtatActif(SessionEtats::ETAT_SESSION_ANNULEE)): ?>
<dt class="col-md-3"> Motif d'annulation</dt>
<dd class="col-md-9">
<?php if ($session->getMotifAnnulation()): ?>
<?php echo $session->getMotifAnnulation(); ?>
<?php else : ?>
<em>Aucun motif connu</em>
<?php endif; ?>
</dd>
<?php endif; ?>
<?php if ($session->getComplement() !== null) : ?>
<dt class="col-md-3"> Compléments</dt>
<dd class="col-md-9"> <?php echo $session->getComplement(); ?></dd>
......
......@@ -178,7 +178,7 @@ $canMesSessions = $this->isAllowed(FormateurPrivileges::getResourceId(FormateurP
<?php if (!$session->isEtatActif(SessionEtats::ETAT_SESSION_ANNULEE)) : ?>
<a <?php /** @see SessionController::annulerAction() */ ?>
href="<?php echo $this->url('session/annuler', ['session' => $session->getId()], [], true); ?>"
class="btn btn-danger">
class="btn btn-danger ajax-modal" data-event="modification">
Annuler la session
</a>
<?php else : ?>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment