Commit a399f7b0 authored by Thomas Hamel's avatar Thomas Hamel
Browse files

catalogue formation : filtre annee en cours, desinscription jusqu'à j-3 pour...

catalogue formation : filtre annee en cours, desinscription jusqu'à j-3 pour une session, lieu visible seulement pour les inscrits à une session
parent 2e0aabec
Loading
Loading
Loading
Loading
+42 −0
Changes for doc/release-notes/8.2.0/01_formation.sql: 42 added lines, 0 removed lines.
Original line number Diff line number Diff line
-- Module Formation

--Ajout d'un paramètre pour spécifier le délai pour une annulation d'inscription
INSERT INTO public.unicaen_parametre_parametre (id, categorie_id, code, libelle, description, valeurs_possibles, valeur,
                                                ordre)
VALUES (20, 2, 'DELAI_ANNULATION_INSCRIPTION', 'Delai annulation', null, 'Number', '21', 20) ON CONFLICT DO NOTHING;


--Ajout d'un privilège pour voir le lieu des séances d'une session
INSERT INTO privilege(id, CATEGORIE_ID, CODE, LIBELLE, ORDRE)
WITH d(code, lib, ordre) AS (SELECT 'voir_lieu', 'Voir le lieu de la session', 8)
SELECT nextval('privilege_id_seq'), cp.id, d.code, d.lib, d.ordre
FROM d
         JOIN categorie_privilege cp ON cp.CODE = 'formation_session'
WHERE NOT EXISTS (SELECT 1
                  FROM PRIVILEGE p
                  WHERE p.CODE = d.code);
--
-- Accord de privilèges à des profils.
--
INSERT INTO PROFIL_PRIVILEGE (PRIVILEGE_ID, PROFIL_ID)
with data(categ, priv) as (select 'formation_session', 'voir_lieu')
select p.id as PRIVILEGE_ID, profil.id as PROFIL_ID
from data
         join PROFIL on profil.ROLE_ID in (
                                           'ADMIN_TECH',
                                           'BDD',
                                           'FORMATEUR',
                                           'RESP_ED',
                                           'DOCTORANT'
    )
         join CATEGORIE_PRIVILEGE cp on cp.CODE = data.categ
         join PRIVILEGE p on p.CATEGORIE_ID = cp.id and p.code = data.priv
where not exists (select * from PROFIL_PRIVILEGE where PRIVILEGE_ID = p.id and PROFIL_ID = profil.id);

insert into ROLE_PRIVILEGE (ROLE_ID, PRIVILEGE_ID)
select p2r.ROLE_ID, pp.PRIVILEGE_ID
from PROFIL_TO_ROLE p2r
         join profil pr on pr.id = p2r.PROFIL_ID
         join PROFIL_PRIVILEGE pp on pp.PROFIL_ID = pr.id
where not exists (select * from role_privilege where role_id = p2r.role_id and privilege_id = pp.privilege_id)
;
+5 −3
Changes for module/Formation/config/others/inscription.config.php: 5 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -2,7 +2,8 @@

namespace Formation;

use Formation\Assertion\InscriptionAssertion;
use Formation\Assertion\Inscription\InscriptionAssertion;
use Formation\Assertion\Inscription\InscriptionAssertionFactory;
use Formation\Controller\InscriptionController;
use Formation\Controller\InscriptionControllerFactory;
use Formation\Controller\Recherche\InscriptionRechercheController;
@@ -12,14 +13,14 @@ use Formation\Service\Exporter\Attestation\AttestationExporter;
use Formation\Service\Exporter\Attestation\AttestationExporterFactory;
use Formation\Service\Exporter\Convocation\ConvocationExporter;
use Formation\Service\Exporter\Convocation\ConvocationExporterFactory;
use Formation\Service\Inscription\Search\InscriptionSearchServiceFactory;
use Formation\Service\Inscription\InscriptionService;
use Formation\Service\Inscription\InscriptionServiceFactory;
use Formation\Service\Inscription\Search\InscriptionSearchService;
use Formation\Service\Inscription\Search\InscriptionSearchServiceFactory;
use Formation\View\Helper\InscriptionViewHelper;
use UnicaenAuth\Guard\PrivilegeController;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenAuth\Guard\PrivilegeController;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;

return [
@@ -303,6 +304,7 @@ return [
            InscriptionSearchService::class => InscriptionSearchServiceFactory::class,
            AttestationExporter::class => AttestationExporterFactory::class,
            ConvocationExporter::class => ConvocationExporterFactory::class,
            InscriptionAssertion::class => InscriptionAssertionFactory::class
        ],
    ],
    'controllers'     => [
+5 −2
Changes for module/Formation/config/others/module.config.php: 5 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -132,10 +132,13 @@ return [
            'formation' => [
                'child_routes' => [
                    'catalogue' => [
                        'type'  => Literal::class,
                        'type'  => Segment::class,
                        'may_terminate' => true,
                        'options' => [
                            'route'    => '/catalogue',
                            'route'    => '/catalogue[/:anneeUniv]',
                            'constraints' => [
                                'anneeUniv' => '\d{4}',
                            ],
                            'defaults' => [
                                'controller' => ModuleController::class,
                                'action'     => 'catalogue',
+22 −0
Changes for module/Formation/config/others/session.config.php: 22 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace Formation;

use Formation\Assertion\Session\SessionAssertion;
use Formation\Assertion\Session\SessionAssertionFactory;
use Formation\Controller\Console\SessionConsoleController;
use Formation\Controller\Console\SessionConsoleControllerFactory;
use Formation\Controller\Recherche\SessionRechercheController;
@@ -20,9 +22,28 @@ use Formation\Service\Session\SessionServiceFactory;
use UnicaenAuth\Guard\PrivilegeController;
use Laminas\Router\Http\Literal;
use Laminas\Router\Http\Segment;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;

return [
    'bjyauthorize' => [
        'resource_providers' => [
            'BjyAuthorize\Provider\Resource\Config' => [
                'Session' => []
            ],
        ],
        'rule_providers'     => [
            PrivilegeRuleProvider::class => [
                'allow' => [
                    [
                        'privileges' => [
                            SessionPrivileges::SESSION_VOIR_LIEU
                        ],
                        'resources'  => ['Session'],
                        'assertion'  => SessionAssertion::class,
                    ],
                ],
            ],
        ],
        'guards' => [
            PrivilegeController::class => [
                [
@@ -316,6 +337,7 @@ return [
        'factories' => [
            SessionService::class => SessionServiceFactory::class,
            SessionSearchService::class => SessionSearchServiceFactory::class,
            SessionAssertion::class => SessionAssertionFactory::class
        ],
    ],
    'controllers'     => [
+6 −8
Changes for module/Formation/src/Formation/Assertion/Inscription/InscriptionAssertion.php: 6 added lines, 8 removed lines.
Original line number Diff line number Diff line
<?php

namespace Formation\Assertion;
namespace Formation\Assertion\Inscription;

use Application\Assertion\AbstractAssertion;
use Application\Entity\Db\Role;
@@ -74,36 +74,34 @@ class InscriptionAssertion extends AbstractAssertion implements AssertionInterf
        switch($action) {
            case 'desinscription' :
                if ($inscription !== null) {
                    return $this->canDescinscrire($inscription);
                    return $this->canDesinscrire($inscription);
                }
                return false;
        }
        return true;
    }


    /** @var Inscription $entity */
    protected function assertEntity(ResourceInterface $entity, $privilege = null): bool
    {
        if (!parent::assertEntity($entity, $privilege)) {
            return false;
        }
        $this->admission = $entity;


        switch ($privilege) {
            case InscriptionPrivileges::INSCRIPTION_AJOUTER :
                return $this->canDescinscrire($entity);
                return $this->canDesinscrire($entity);
        }

        return true;
    }

    private function canDescinscrire(?Inscription $inscription): bool
    private function canDesinscrire(?Inscription $inscription): bool
    {
        if (!$this->scopeValide($inscription)) return false;
        $session = $inscription->getSession();
        $etatSession = $session->getEtat();
        if (!in_array($etatSession->getCode(), [Session::ETAT_IMMINENTE, Session::ETAT_EN_COURS, Session::ETAT_CLOS_FINAL])) return false;
        if (in_array($etatSession->getCode(), [Session::ETAT_IMMINENTE, Session::ETAT_EN_COURS, Session::ETAT_CLOS_FINAL])) return false;

        $dateMax = DateTime::createFromFormat('d/m/Y H:m', $session->getDateDebut()->format('d/m/Y H:m'));
        try {
Loading