Commit ad563ccb authored by Johnny Leveneur's avatar Johnny Leveneur
Browse files

gestion des places nominatives coté gestionnaire

parent 0d7ec6cf
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -236,29 +236,9 @@ CREATE TABLE IF NOT EXISTS public.evenementiel_inscription_place
    id                SERIAL PRIMARY KEY,
    inscription_id    INTEGER NOT NULL
        REFERENCES public.evenementiel_inscription(id) ON DELETE CASCADE,

    -- Données nominatives de la place
    nom               VARCHAR(255) NOT NULL,
    prenom            VARCHAR(255),
    -- email             VARCHAR(255),
    -- telephone         VARCHAR(50),

    -- Suivi
    statut            VARCHAR(30) NOT NULL DEFAULT 'provisoire' -- provisoire|confirme|annule

--     histo_createur_id       integer     default 0     not null
--         constraint evenementiel_inscription_createur_fk
--             references unicaen_utilisateur_user,
--     histo_creation          timestamp   default now() not null,
--     histo_modificateur_id   integer
--         constraint evenementiel_inscription_modificateur_fk
--             references unicaen_utilisateur_user,
--     histo_modification      timestamp,
--     histo_destructeur_id    integer
--         constraint evenementiel_inscription_destructeur_fk
--             references unicaen_utilisateur_user,
--     histo_destruction       timestamp

);

CREATE INDEX IF NOT EXISTS idx_eip_inscription_id
+4 −4
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ return [
                    'controller' => InscriptionController::class,
                    'action' => [
                        'modifier', 'pointer', 'depointer', 'pointer-msg', 'classer'
                        ,'envoyer-liste-principale','envoyer-liste-attente'
                        ,'envoyer-liste-principale','envoyer-liste-complementaire'
                    ],
                    'privileges' => [
                        EvenementielinscriptionPrivileges::MODIFIER,
@@ -230,13 +230,13 @@ return [
                                    ],
                                ],
                            ],
                            'envoyer-liste-attente' => [
                            'envoyer-liste-complementaire' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/envoyer-liste-attente/:entity',
                                    'route' => '/envoyer-liste-complementaire/:entity',
                                    'defaults' => [
                                        /** @see InscriptionController::envoyerListePrincipaleAction() */
                                        'action' => 'envoyer-liste-attente',
                                        'action' => 'envoyer-liste-complementaire',
                                    ],
                                ],
                            ],
+12 −0
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@ use Evenementiel\Service\Notification\NotificationServiceFactory;
use Evenementiel\Service\Url\UrlService;
use Evenementiel\Service\Url\UrlServiceFactory;
use Evenementiel\View\Helper\InscriptionButtonHelper;
use Evenementiel\View\Helper\PopulateCollection;
use Evenementiel\View\Helper\RenderPlacesCollection;

return array(
    'doctrine' => [
@@ -68,6 +70,16 @@ return array(
        'invokables' => [
            'inscriptionButton' => InscriptionButtonHelper::class,
        ],
        'factories' => [
            PopulateCollection::class => Laminas\ServiceManager\Factory\InvokableFactory::class,
            RenderPlacesCollection::class => Laminas\ServiceManager\Factory\InvokableFactory::class,
        ],
        'aliases' => [
            'populateCollection' => PopulateCollection::class,
            'renderPlacesCollection' => RenderPlacesCollection::class
        ],


    ],

    'view_manager' => [
+93 −38
Original line number Diff line number Diff line
@@ -357,39 +357,40 @@ class EvenementController extends AbstractActionController
        $form->setAttribute('action', $this->url()->fromRoute('evenementiel/evenement/inscription-participant-gestionnaire', ['entity' => $evenement->getId()], [], true));
        $form->setAttribute("method", "post");
        $form->bind($inscription);
        $form->setBindOnValidate(false); // facultatif, mais évite la liaison “tardive”
        $form->prepare();

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                if ($inscription->getParticipant() !== null and $inscription->getEvenement() !== null) {
                if ($inscription->getEvenement() !== null
                    and $inscription->getParticipant() !== null and $inscription->getParticipant()->getId() != -1) {
                    $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_VALIDER);
                    $this->getInscriptionService()->create($inscription);
                    $this->getEvenementService()->classerInscription($inscription);

                    switch ($inscription->getListe()) {
                        case Inscription::PRINCIPALE :
                            $this->getNotificationService()->triggerListePrincipale($inscription);
                            $this->flashMessenger()->addSuccessMessage("Classement de l'inscription en liste principale.");
                            break;
                        case Inscription::COMPLEMENTAIRE :
                            $this->getNotificationService()->triggerListeComplementaire($inscription);
                            $this->flashMessenger()->addWarningMessage("Liste principale complète. <br/> Classement de l'inscription en liste d'attente.");
                            break;
                        default :
                            $this->flashMessenger()->addErrorMessage("Échec du classement de l'inscription.");
                            break;
                    }
            }

                    exit();
                }

        // --- initialisation de la collection places du form
        $nb = max(1, (int)($inscription?->getNombrePlacesDemandees() ?? 1));

        // Récupère la collection (au niveau racine ou dans un base fieldset)
        $collection = $form->has('places')
            ? $form->get('places')
            : ($form->getBaseFieldset() && $form->getBaseFieldset()->has('places')
                ? $form->getBaseFieldset()->get('places')
                : null);

        if ($collection) {
            // fixe le nombre désiré
            $collection->setCount($nb);
            // ⚠️ crucial sur les anciennes versions : créer N enfants “vides”
            if (count($collection->getElements()) === 0 && count($collection->getFieldsets()) === 0) {
                $collection->populateValues(array_fill(0, $nb, []));
                $this->flashMessenger()->addErrorMessage("Échec de l'inscription du participant.");
            }

        }
        // ----

        $vm = new ViewModel([
            'title' => "Inscription d'un·e Participant·e à l'évènement " . $evenement->getLibelle() . " du" . $evenement->getDateToString(),
@@ -419,6 +420,8 @@ class EvenementController extends AbstractActionController
        $form->setAttribute('action', $this->url()->fromRoute('evenementiel/evenement/inscription-etudiant-gestionnaire', ['entity' => $evenement->getId()], [], true));
        $form->setAttribute("method", "post");
        $form->bind($inscription);
        $form->setBindOnValidate(false); // facultatif, mais évite la liaison “tardive”
        $form->prepare();

        $request = $this->getRequest();
        if ($request->isPost()) {
@@ -426,9 +429,7 @@ class EvenementController extends AbstractActionController
            $form->setData($data);
            if ($form->isValid()) {
                $etudiant = $inscription->getParticipant()->getEtudiant();
                if ($inscription->getParticipant() !== null
                    and $inscription->getEvenement() !== null
                    and $etudiant->getEmail() !== null
                if ($inscription->getEvenement() !== null and $etudiant->getEmail() !== null
                ) {
                    // Vérifier si l'étudiant existe déjà en tant que participant
                    $participant = $this->getParticipantService()->createOrUpdateUsager($etudiant);
@@ -438,9 +439,26 @@ class EvenementController extends AbstractActionController
                        $inscription->setParticipant($participant);
                        $this->getInscriptionService()->create($inscription);
                        $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_VALIDER);

                        $this->getEvenementService()->classerInscription($inscription);
                        switch ($inscription->getListe()) {
                            case Inscription::PRINCIPALE :
                                $this->getNotificationService()->triggerListePrincipale($inscription);
                                $this->flashMessenger()->addSuccessMessage("Classement de l'inscription en liste principale.");
                                break;
                            case Inscription::COMPLEMENTAIRE :
                                $this->getNotificationService()->triggerListeComplementaire($inscription);
                                $this->flashMessenger()->addWarningMessage("Liste principale complète. <br/> Classement de l'inscription en liste d'attente.");
                                break;
                            default :
                                $this->flashMessenger()->addErrorMessage("Échec du classement de l'inscription.");
                                break;
                        }
                    } else {
                        $this->flashMessenger()->addErrorMessage("L'étudiant·e <strong>" . $participant->getDenomination() . "</strong> est déjà inscrit·e.");
                    }
                } else {
                    $this->flashMessenger()->addErrorMessage("Échec de l'inscription de l'étudiant.");
                }
            }
            exit();
@@ -474,6 +492,8 @@ class EvenementController extends AbstractActionController
        $form->setAttribute('action', $this->url()->fromRoute('evenementiel/evenement/inscription-personnel-gestionnaire', ['entity' => $evenement->getId()], [], true));
        $form->setAttribute("method", "post");
        $form->bind($inscription);
        $form->setBindOnValidate(false); // facultatif, mais évite la liaison “tardive”
        $form->prepare();

        $request = $this->getRequest();
        if ($request->isPost()) {
@@ -481,10 +501,8 @@ class EvenementController extends AbstractActionController
            $form->setData($data);
            if ($form->isValid()) {
                $personnel = $inscription->getParticipant()->getPersonnel();
                if ($inscription->getParticipant() !== null
                    and $inscription->getEvenement() !== null
                    and $personnel->getEmail() !== null
                ) {
                if ($inscription->getEvenement() !== null && $personnel->getEmail() !== null)
                {
                    // Vérifier si le personnel existe déjà en tant que participant
                    $participant = $this->getParticipantService()->createOrUpdateUsager($personnel);
                    // verifier si l'inscription existe déjà
@@ -493,9 +511,27 @@ class EvenementController extends AbstractActionController
                        $inscription->setParticipant($participant);
                        $this->getInscriptionService()->create($inscription);
                        $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_VALIDER);

                        $this->getEvenementService()->classerInscription($inscription);
                        switch ($inscription->getListe()) {
                            case Inscription::PRINCIPALE :
                                $this->getNotificationService()->triggerListePrincipale($inscription);
                                $this->flashMessenger()->addSuccessMessage("Classement de l'inscription en liste principale.");
                                break;
                            case Inscription::COMPLEMENTAIRE :
                                $this->getNotificationService()->triggerListeComplementaire($inscription);
                                $this->flashMessenger()->addWarningMessage("Liste principale complète. <br/> Classement de l'inscription en liste d'attente.");
                                break;
                            default :
                                $this->flashMessenger()->addErrorMessage("Échec du classement de l'inscription.");
                                break;
                        }

                    } else {
                        $this->flashMessenger()->addErrorMessage("Le personnel<strong>" . $participant->getDenomination() . "</strong> est déjà inscrit·e.");
                    }
                } else {
                    $this->flashMessenger()->addErrorMessage("Échec de l'inscription de l'étudiant.");
                }
            }
            exit();
@@ -528,15 +564,15 @@ class EvenementController extends AbstractActionController
        ], [], true));
        $form->setAttribute("method", "post");
        $form->bind($inscription);
        $form->setBindOnValidate(false); // facultatif, mais évite la liaison “tardive”
        $form->prepare();

        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            $form->setData($data);
            if ($form->isValid()) {
                if ($inscription->getParticipant() !== null
                    && $inscription->getEvenement() !== null
                    && $usager->getEmail() !== null
                if ($inscription->getEvenement() !== null && $usager->getEmail() !== null
                ) {
                    $participant = $this->getParticipantService()->createOrUpdateUsager($usager);
                    $existingInscription = $this->getInscriptionService()->inscriptionExists($participant, $evenement);
@@ -549,10 +585,29 @@ class EvenementController extends AbstractActionController
                    }
                    $this->getInscriptionService()->create($inscription);
                    $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_DEMANDE);
                    $this->getNotificationService()->triggerInscription($inscription);
                    $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_VALIDER);
                    $this->getNotificationService()->triggerValidation($inscription);
                    $this->flashMessenger()->addSuccessMessage("Inscription faite.");

//                    $this->getNotificationService()->triggerInscriptionDemande($inscription);
//                    $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_VALIDER);
//                    $this->getNotificationService()->triggerListePrincipale($inscription);
//                    $this->flashMessenger()->addSuccessMessage("Inscription faite.");

                    $this->getEvenementService()->classerInscription($inscription);
                    switch ($inscription->getListe()) {
                        case Inscription::PRINCIPALE :
                            $this->getNotificationService()->triggerListePrincipale($inscription);
                            $this->flashMessenger()->addSuccessMessage("Classement de l'inscription en liste principale.");
                            break;
                        case Inscription::COMPLEMENTAIRE :
                            $this->getNotificationService()->triggerListeComplementaire($inscription);
                            $this->flashMessenger()->addWarningMessage("Liste principale complète. <br/> Classement de l'inscription en liste d'attente.");
                            break;
                        default :
                            $this->flashMessenger()->addErrorMessage("Échec du classement de l'inscription.");
                            break;
                    }

                } else {
                    $this->flashMessenger()->addErrorMessage("Échec de l'inscription.");
                }
            }
            exit();
@@ -639,9 +694,9 @@ class EvenementController extends AbstractActionController
                    }
                    $this->getInscriptionService()->create($inscription);
                    $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_DEMANDE);
                    $this->getNotificationService()->triggerInscription($inscription);
                    $this->getNotificationService()->triggerInscriptionDemande($inscription);
                    $this->getEtatInstanceService()->setEtatActif($inscription, InscriptionEtats::INSCRIPTION_VALIDER);
                    $this->getNotificationService()->triggerValidation($inscription);
                    $this->getNotificationService()->triggerListePrincipale($inscription);
                    $this->flashMessenger()->addSuccessMessage("Inscription faite.");
                }
            }
@@ -685,7 +740,7 @@ class EvenementController extends AbstractActionController
            if ($form->isValid()) {
                $inscriptions = match ($data['liste']) {
                    Inscription::PRINCIPALE => $evenement->getListePrincipale(),
                    Inscription::ATTENTE => $evenement->getListeAttente(),
                    Inscription::COMPLEMENTAIRE => $evenement->getListeComplementaire(),
                    'tous' => $evenement->getListeValide(),
                    default => [],
                };
+54 −75

File changed.

Preview size limit exceeded, changes collapsed.

Loading