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

Ajout d'un privilège : modifier un dossier d'admission même lorsque le circuit...

Ajout d'un privilège : modifier un dossier d'admission même lorsque le circuit de validation est démarré
parent b1b644cb
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
insert into unicaen_privilege_privilege(ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE)
with d(ordre, code, lib) as (select 100,
                                    'admission-modifier-dossier-admission-gestion',
                                    'Modifier un dossier d''admission même lorsque le circuit de validation est démarré')
select nextval('privilege_id_seq'), cp.id, d.code, d.lib, d.ordre
from d
         join unicaen_privilege_categorie cp on cp.CODE = 'admission'
WHERE NOT EXISTS (SELECT 1
                  FROM unicaen_privilege_privilege p
                  WHERE p.CODE = d.code);

-- ajout des privilèges au profil ADMIN_TECH et GEST_ED
INSERT INTO PROFIL_PRIVILEGE (PRIVILEGE_ID, PROFIL_ID)
with data(categ, priv) as (select 'admission', 'admission-modifier-dossier-admission-gestion')
select p.id as PRIVILEGE_ID, profil.id as PROFIL_ID
from data
         join PROFIL on profil.ROLE_ID in ('ADMIN_TECH', 'GEST_ED')
         join unicaen_privilege_categorie cp on cp.CODE = data.categ
         join unicaen_privilege_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)
;
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ return array(
                            AdmissionPrivileges::ADMISSION_AFFICHER_SON_DOSSIER_ADMISSION,
                            AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION,
                            AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION,
                            AdmissionPrivileges::ADMISSION_MODIFIER_DOSSIER_ADMISSION_GESTION,
                            AdmissionPrivileges::ADMISSION_SUPPRIMER_TOUS_DOSSIERS_ADMISSION,
                            AdmissionPrivileges::ADMISSION_SUPPRIMER_SON_DOSSIER_ADMISSION,
                            AdmissionPrivileges::ADMISSION_HISTORISER,
@@ -151,6 +152,7 @@ return array(
                        AdmissionPrivileges::ADMISSION_AFFICHER_TOUS_DOSSIERS_ADMISSION,
                        AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION,
                        AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION,
                        AdmissionPrivileges::ADMISSION_MODIFIER_DOSSIER_ADMISSION_GESTION,
                    ],
                    'assertion' => AdmissionAssertion::class,
                ],
+1 −1
Original line number Diff line number Diff line
@@ -144,7 +144,6 @@ class AdmissionAssertion extends AdmissionAbstractAssertion implements UserConte
            return false;
        }
        $this->admission = $entity;

        try {
            switch ($privilege) {
                case AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION:
@@ -172,6 +171,7 @@ class AdmissionAssertion extends AdmissionAbstractAssertion implements UserConte
                case AdmissionPrivileges::ADMISSION_AFFICHER_SON_DOSSIER_ADMISSION_DANS_LISTE:
                case AdmissionPrivileges::ADMISSION_SUPPRIMER_SON_DOSSIER_ADMISSION:
                case AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION:
                case AdmissionPrivileges::ADMISSION_MODIFIER_DOSSIER_ADMISSION_GESTION:
                case AdmissionPrivileges::ADMISSION_TELEVERSER_SON_DOCUMENT:
                case AdmissionPrivileges::ADMISSION_SUPPRIMER_SON_DOCUMENT:
                case AdmissionPrivileges::ADMISSION_TELECHARGER_SON_DOCUMENT:
+15 −12
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ class AdmissionController extends AdmissionAbstractController {
            $etudiant = $this->admissionForm->get('etudiant');
            $data = $this->multipageForm($this->admissionForm)->getFormSessionData();
            $this->admissionForm->bind($admission);
            $canModifierAdmission  = $this->isAllowed($admission,AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION) || $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION);
            $canModifierAdmission  = $this->peutModifierAdmission($admission);

            if(!$canModifierAdmission) $etudiant->disableModificationFieldset();
            //Enregistrement des informations de l'inscription
@@ -148,7 +148,7 @@ class AdmissionController extends AdmissionAbstractController {
        /** @var Admission $admission */
        $admission = $this->getAdmission();
        if(!empty($admission)){
            $canModifierAdmission  = $this->isAllowed($admission,AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION) || $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION);
            $canModifierAdmission  = $this->peutModifierAdmission($admission);
            if(!$canModifierAdmission){
                /** @var InscriptionFieldset $inscription */
                $inscription = $this->admissionForm->get('inscription');
@@ -206,7 +206,7 @@ class AdmissionController extends AdmissionAbstractController {
        if (!empty($admission)) {
            $data = $this->multipageForm($this->admissionForm)->getFormSessionData();
            $this->admissionForm->bind($admission);
            $canModifierAdmission = $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION) || $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION);
            $canModifierAdmission = $this->peutModifierAdmission($admission);
            if (!$canModifierAdmission) {
                /** @var FinancementFieldset $financement */
                $financement = $this->admissionForm->get('financement');
@@ -251,7 +251,7 @@ class AdmissionController extends AdmissionAbstractController {
            $this->admissionForm->bind($admission);
            $this->admissionForm->setNavigationFieldsetPrototype($this->createNavigationForDocument($admission));

            $canModifierAdmission  = $this->isAllowed($admission,AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION) || $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION);
            $canModifierAdmission = $this->peutModifierAdmission($admission);
            if(!$canModifierAdmission){
                /** @var DocumentFieldset $document */
                $document = $this->admissionForm->get('document');
@@ -441,8 +441,7 @@ class AdmissionController extends AdmissionAbstractController {
            //si le dossier d'admission existe, on met à jour l'entité Etudiant
            try {
                $this->admissionForm->bind($admission);
                if ($this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION) ||
                    $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION)) {
                if ($this->peutModifierAdmission($admission)) {
                    $individu = $this->individuService->getRepository()->findRequestedIndividu($this);
                    if($individu && isset($data["etudiant"]["dateNaissance"])){
                        $individu->setDateNaissance(new DateTime($data["etudiant"]["dateNaissance"]));
@@ -489,8 +488,7 @@ class AdmissionController extends AdmissionAbstractController {
        $etablissementInscriptionBeforeUpdate = $inscription?->getEtablissementInscription();

        //Lier les valeurs des données en session avec le formulaire
        if ($this->isAllowed($admission,AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION) ||
            $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION)) {
        if ($this->peutModifierAdmission($admission)) {
            $this->admissionForm->get('inscription')->bindValues($data['inscription']);
            //Si le fieldest Inscription n'est pas encore en BDD
            if (!$inscription instanceof Inscription) {
@@ -576,8 +574,7 @@ class AdmissionController extends AdmissionAbstractController {
        /** @var Financement $financement */
        $financement = $this->admissionFinancementService->getRepository()->findOneByAdmission($admission);
        //Lier les valeurs des données en session avec le formulaire
        if ($this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION) ||
            $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION)) {
        if ($this->peutModifierAdmission($admission)) {
            $this->admissionForm->get('financement')->bindValues($data['financement']);
            //Si le fieldest Financement n'est pas encore en BDD
            if (!$financement instanceof Financement) {
@@ -735,8 +732,7 @@ class AdmissionController extends AdmissionAbstractController {
        $prevButton->setAttribute('class', $prevButton->getAttribute('class') . ' btn btn-primary');
        $cancelButton->setAttribute('class', $confirmButton->getAttribute('class') . ' visually-hidden');

        $canModifierAdmission = $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION) ||
                                $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION);
        $canModifierAdmission = $this->peutModifierAdmission($admission);
        //si le dossier est validé, rejeté, en cours de validation ou abandonné et que l'utilisateur connecté n'a pas le droit de modifier le dossier
        if(!$canModifierAdmission){
            $submitButton->setValue("Revenir à l'accueil");
@@ -896,4 +892,11 @@ class AdmissionController extends AdmissionAbstractController {
            'tabEtablissementsVariables' => $tabEtablissementsVariables,
        ]);
    }

    private function peutModifierAdmission($admission): bool
    {
        return $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION)
            || $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION)
            || $this->isAllowed($admission, AdmissionPrivileges::ADMISSION_MODIFIER_DOSSIER_ADMISSION_GESTION);
    }
}
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ class AdmissionPrivileges extends Privileges {
    public const ADMISSION_AFFICHER_SON_DOSSIER_ADMISSION_DANS_LISTE = 'admission-admission-afficher-son-dossier-admission-dans-liste';
    public const ADMISSION_MODIFIER_TOUS_DOSSIERS_ADMISSION  = 'admission-admission-modifier-tous-dossiers-admission';
    public const ADMISSION_MODIFIER_SON_DOSSIER_ADMISSION     = 'admission-admission-modifier-son-dossier-admission';
    public const ADMISSION_MODIFIER_DOSSIER_ADMISSION_GESTION     = 'admission-admission-modifier-dossier-admission-gestion';
    public const ADMISSION_SUPPRIMER_TOUS_DOSSIERS_ADMISSION  = 'admission-admission-supprimer-tous-dossiers-admission';
    public const ADMISSION_SUPPRIMER_SON_DOSSIER_ADMISSION     = 'admission-admission-supprimer-son-dossier-admission';
    public const ADMISSION_GENERER_EXPORT_ADMISSIONS  = 'admission-admission-generer-export-admissions';