Commit fe1a72ab authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Correction et assouplissement des accès à la saisie de service + référentiel

parent 681a243b
Loading
Loading
Loading
Loading
+16 −0
Changes for code/test3.php: 16 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -7,3 +7,19 @@
 * @var $viewName   string
 * @var $viewFile   string
 */

/** @var \Application\Service\ContextService $c */
$c = $container->get(\Application\Service\ContextService::class);

$roleId = $c->getSelectedIdentityRole()->getRoleId();
var_dump($roleId);


$p = $c->getIntervenant()->getStatut()->getPrivileges();
foreach ($p as $priv => $ok) {
    if (!$ok) unset($p[$priv]);
}

//$p = $r->getPrivileges();

var_dump(array_keys($p));
 No newline at end of file
+1 −1
Changes for data/indicateurs.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ return [
                'enabled'           => true,
                'libelle_singulier' => '%s intervenant a saisi des enseignements dont l\'étape, l\'élément pédagogique ou la période ont disparu',
                'libelle_pluriel'   => '%s intervenants ont saisi des enseignements dont l\'étape, l\'élément pédagogique ou la période ont disparu',
                'route'             => 'intervenant/services',
                'route'             => 'intervenant/services-prevus',
                'irrecevables'      => false,
            ],
        ],
+1 −1
Changes for data/workflow_etapes.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ return [
    "SERVICE_SAISIE"                 => [
        "LIBELLE_INTERVENANT" => "Je saisis mes enseignements prévisionnels",
        "LIBELLE_AUTRES"      => "J'accède aux enseignements prévisionnels",
        "ROUTE"               => "intervenant/services",
        "ROUTE"               => "intervenant/services-prevus",
        "DESC_NON_FRANCHIE"   => "Aucun enseignement prévisionnel n'a été saisi",
        "OBLIGATOIRE"         => true,
    ],
+17 −12
Changes for module/Application/config/intervenant.config.php: 17 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -182,14 +182,13 @@ return [
                            ],
                        ],
                    ],
                    'services'                => [
                    'services-prevus'         => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'    => '/:intervenant/services',
                            'route'    => '/:intervenant/services-prevus',
                            'defaults' => [
                                'controller' => 'Application\Controller\Intervenant',
                                'action'                   => 'services',
                                'type-volume-horaire-code' => Entity\Db\TypeVolumeHoraire::CODE_PREVU,
                                'action'     => 'services-prevus',
                            ],
                        ],
                    ],
@@ -210,8 +209,7 @@ return [
                            'route'    => '/:intervenant/services-realises',
                            'defaults' => [
                                'controller' => 'Application\Controller\Intervenant',
                                'action'                   => 'services',
                                'type-volume-horaire-code' => Entity\Db\TypeVolumeHoraire::CODE_REALISE,
                                'action'     => 'services-realises',
                            ],
                        ],
                    ],
@@ -415,16 +413,16 @@ return [
                                'resource'     => PrivilegeController::getResourceId('Application\Controller\ModificationServiceDu', 'saisir'),
                                'order'        => 4,
                            ],
                            'service'                 => [
                            'services-prevus'         => [
                                'label'               => "Enseignements prévisionnels",
                                'title'               => "Enseignements prévisionnels de l'intervenant",
                                'route'               => 'intervenant/services',
                                'route'               => 'intervenant/services-prevus',
                                'paramsInject'        => [
                                    'intervenant',
                                ],
                                'workflow-etape-code' => WfEtape::CODE_SERVICE_SAISIE,
                                'withtarget'          => true,
                                'resource'            => PrivilegeController::getResourceId('Application\Controller\Intervenant', 'services'),
                                'resource'            => PrivilegeController::getResourceId('Application\Controller\Intervenant', 'services-prevus'),
                                'visible'             => Assertion\ServiceAssertion::class,
                                'order'               => 6,
                            ],
@@ -448,7 +446,7 @@ return [
                                ],
                                'workflow-etape-code' => WfEtape::CODE_SERVICE_SAISIE_REALISE,
                                'withtarget'          => true,
                                'resource'            => PrivilegeController::getResourceId('Application\Controller\Intervenant', 'services'),
                                'resource'            => PrivilegeController::getResourceId('Application\Controller\Intervenant', 'services-realises'),
                                'visible'             => Assertion\ServiceAssertion::class,
                                'order'               => 13,
                            ],
@@ -477,11 +475,18 @@ return [
                ],
                [
                    'controller' => 'Application\Controller\Intervenant',
                    'action'     => ['services'],
                    'action'     => ['services-prevus'],
                    'privileges' => [
                        Privileges::ENSEIGNEMENT_PREVU_VISUALISATION,
                        Privileges::ENSEIGNEMENT_REALISE_VISUALISATION,
                        Privileges::REFERENTIEL_PREVU_VISUALISATION,
                    ],
                    'assertion'  => Assertion\ServiceAssertion::class,
                ],
                [
                    'controller' => 'Application\Controller\Intervenant',
                    'action'     => ['services-realises'],
                    'privileges' => [
                        Privileges::ENSEIGNEMENT_REALISE_VISUALISATION,
                        Privileges::REFERENTIEL_REALISE_VISUALISATION,
                    ],
                    'assertion'  => Assertion\ServiceAssertion::class,
+127 −22
Changes for module/Application/src/Assertion/ServiceAssertion.php: 127 added lines, 22 removed lines.
Original line number Diff line number Diff line
@@ -74,6 +74,12 @@ class ServiceAssertion extends AbstractAssertion
                case 'intervenant/validation/service/prevu':
                    return $this->assertEntity($intervenant, Privileges::ENSEIGNEMENT_PREVU_VISUALISATION);
                break;
                case 'intervenant/services-prevus':
                    return $this->assertPageServices($role, $intervenant, TypeVolumeHoraire::CODE_PREVU);
                break;
                case 'intervenant/services-realises':
                    return $this->assertPageServices($role, $intervenant, TypeVolumeHoraire::CODE_REALISE);
                break;
            }
        }

@@ -140,14 +146,28 @@ class ServiceAssertion extends AbstractAssertion
            case $entity instanceof Intervenant:
                switch ($privilege) {
                    case Privileges::ENSEIGNEMENT_PREVU_VISUALISATION:
                        return $this->assertIntervenantService($role, $entity, TypeVolumeHoraire::CODE_PREVU, false);

                    case Privileges::ENSEIGNEMENT_PREVU_EDITION:
                    case Privileges::REFERENTIEL_PREVU_VISUALISATION:
                    case Privileges::REFERENTIEL_PREVU_EDITION:
                        return $this->assertIntervenantService($role, $entity, TypeVolumeHoraire::CODE_PREVU, true);

                    case Privileges::ENSEIGNEMENT_REALISE_VISUALISATION:
                        return $this->assertIntervenantService($role, $entity, TypeVolumeHoraire::CODE_REALISE, false);

                    case Privileges::ENSEIGNEMENT_REALISE_EDITION:
                        return $this->assertIntervenantService($role, $entity, TypeVolumeHoraire::CODE_REALISE, true);

                    case Privileges::REFERENTIEL_PREVU_VISUALISATION:
                        return $this->assertIntervenantReferentiel($role, $entity, TypeVolumeHoraire::CODE_PREVU, false);

                    case Privileges::REFERENTIEL_PREVU_EDITION:
                        return $this->assertIntervenantReferentiel($role, $entity, TypeVolumeHoraire::CODE_PREVU, true);

                    case Privileges::REFERENTIEL_REALISE_VISUALISATION:
                        return $this->assertIntervenantReferentiel($role, $entity, TypeVolumeHoraire::CODE_REALISE, false);

                    case Privileges::REFERENTIEL_REALISE_EDITION:
                        return $this->assertIntervenant($role, $entity);
                        return $this->assertIntervenantReferentiel($role, $entity, TypeVolumeHoraire::CODE_REALISE, true);

                    case Privileges::MOTIF_NON_PAIEMENT_VISUALISATION:
                    case Privileges::MOTIF_NON_PAIEMENT_EDITION:
@@ -205,8 +225,12 @@ class ServiceAssertion extends AbstractAssertion
                return $this->assertImportAgenda($role);

            break;
            case 'Application\Controller\Intervenant.services':
                return $this->assertPageServices($role, $intervenant);
            case 'Application\Controller\Intervenant.servicesPrevus':
                return $this->assertPageServices($role, $intervenant, TypeVolumeHoraire::CODE_PREVU);
            break;
            case 'Application\Controller\Intervenant.servicesRealises':
                return $this->assertPageServices($role, $intervenant, TypeVolumeHoraire::CODE_REALISE);
            break;
        }

        return true;
@@ -214,20 +238,28 @@ class ServiceAssertion extends AbstractAssertion



    protected function assertPageServices(Role $role, Intervenant $intervenant = null)
    protected function assertPageServices(Role $role, Intervenant $intervenant = null, string $typeVolumeHoraireCode)
    {
        if (!$intervenant) return true;

        $typeVolumehoraireCode = $this->getMvcEvent()->getRouteMatch()->getParam('type-volume-horaire-code');
        if (!$typeVolumehoraireCode) return true;
        $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getByCode($typeVolumehoraireCode);
        $statut = $intervenant->getStatut();

        $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getByCode($typeVolumeHoraireCode);

        $wfEtape = $this->getWorkflowEtape($typeVolumeHoraire, 'saisie');

        return $this->asserts([
        $asserts = [
            $this->assertIntervenant($role, $intervenant),
            $this->assertEtapeAtteignable($wfEtape, $intervenant),
        ]);
        ];
        if ($typeVolumeHoraire->isPrevu()) {
            $asserts[] = $statut->getServicePrevu() || $statut->getReferentielPrevu();
        }
        if ($typeVolumeHoraire->isRealise()) {
            $asserts[] = $statut->getServiceRealise() || $statut->getReferentielRealise();
        }

        return $this->asserts($asserts);
    }


@@ -235,7 +267,12 @@ class ServiceAssertion extends AbstractAssertion
    protected function assertEnseignements(Role $role)
    {
        return $this->asserts([
            ($role->hasPrivilege(Privileges::ENSEIGNEMENT_PREVU_VISUALISATION) || $role->hasPrivilege(Privileges::ENSEIGNEMENT_REALISE_VISUALISATION)),
            (
                $role->hasPrivilege(Privileges::ENSEIGNEMENT_PREVU_VISUALISATION)
                || $role->hasPrivilege(Privileges::ENSEIGNEMENT_REALISE_VISUALISATION)
                || $role->hasPrivilege(Privileges::REFERENTIEL_PREVU_VISUALISATION)
                || $role->hasPrivilege(Privileges::REFERENTIEL_REALISE_VISUALISATION)
            ),
            !$role->getIntervenant(),
        ]);
    }
@@ -252,24 +289,48 @@ class ServiceAssertion extends AbstractAssertion

    protected function assertServiceVisualisation(Role $role, Service $service)
    {
        $wfEtape = $this->getWorkflowEtape($service->getTypeVolumeHoraire(), 'saisie');
        $typeVolumeHoraire = $service->getTypeVolumeHoraire();
        $intervenant       = $service->getIntervenant();
        $statut            = $intervenant->getStatut();

        return $this->asserts([
            $this->assertIntervenant($role, $service->getIntervenant()),
            $this->assertEtapeAtteignable($wfEtape, $service->getIntervenant()),
        ]);
        $wfEtape = $this->getWorkflowEtape($typeVolumeHoraire, 'saisie');

        $asserts = [
            $this->assertIntervenant($role, $intervenant),
            $this->assertEtapeAtteignable($wfEtape, $intervenant),
        ];
        if ($typeVolumeHoraire->isPrevu()) {
            $asserts[] = $statut->getServicePrevu();
        }
        if ($typeVolumeHoraire->isRealise()) {
            $asserts[] = $statut->getServiceRealise();
        }

        return $this->asserts($asserts);
    }



    protected function assertServiceReferentielVisualisation(Role $role, ServiceReferentiel $serviceReferentiel)
    {
        $wfEtape = $this->getWorkflowEtape($serviceReferentiel->getTypeVolumeHoraire(), 'saisie');
        $typeVolumeHoraire = $serviceReferentiel->getTypeVolumeHoraire();
        $intervenant       = $serviceReferentiel->getIntervenant();
        $statut            = $intervenant->getStatut();

        return $this->asserts([
            $this->assertIntervenant($role, $serviceReferentiel->getIntervenant()),
            $this->assertEtapeAtteignable($wfEtape, $serviceReferentiel->getIntervenant()),
        ]);
        $wfEtape = $this->getWorkflowEtape($typeVolumeHoraire, 'saisie');

        $asserts = [
            $this->assertIntervenant($role, $intervenant),
            $this->assertEtapeAtteignable($wfEtape, $intervenant),
        ];
        if ($typeVolumeHoraire->isPrevu()) {
            $asserts[] = $statut->getServicePrevu();
        }
        if ($typeVolumeHoraire->isRealise()) {
            $asserts[] = $statut->getServiceRealise();
        }

        return $this->asserts($asserts);
    }


@@ -507,6 +568,50 @@ class ServiceAssertion extends AbstractAssertion



    protected function assertIntervenantService(
        Role $role,
        Intervenant $intervenant,
        string $typeVolumeHoraireCode,
        bool $edition = false
    )
    {
        if (!$this->assertIntervenant($role, $intervenant)) return false; // si on n'est pas le bon intervenant!!

        $statut = $intervenant->getStatut();
        if (TypeVolumeHoraire::CODE_PREVU == $typeVolumeHoraireCode) {
            if (!$statut->getServicePrevu()) return false;
        }
        if (TypeVolumeHoraire::CODE_REALISE == $typeVolumeHoraireCode) {
            if (!$statut->getServiceRealise()) return false;
        }

        return true;
    }



    protected function assertIntervenantReferentiel(
        Role $role,
        Intervenant $intervenant,
        string $typeVolumeHoraireCode,
        bool $edition = false
    )
    {
        if (!$this->assertIntervenant($role, $intervenant)) return false; // si on n'est pas le bon intervenant!!

        $statut = $intervenant->getStatut();
        if (TypeVolumeHoraire::CODE_PREVU == $typeVolumeHoraireCode) {
            if (!$statut->getReferentielPrevu()) return false;
        }
        if (TypeVolumeHoraire::CODE_REALISE == $typeVolumeHoraireCode) {
            if (!$statut->getReferentielRealise()) return false;
        }

        return true;
    }



    protected function assertStructure(Role $role, ?Structure $structure = null)
    {
        if ($structure) {
Loading