Loading front/Mission/ListeOffreEmploi.vue +4 −1 Original line number Diff line number Diff line Loading @@ -13,8 +13,11 @@ <!--On affiche une synthèse de la liste des offres--> <div v-if="extended"> <offreEmploi v-for="offre in offres" :key="offre.id" :offre="offre" @refresh="refresh" <offreEmploi v-for="offre in offres" :key="offre.id" :offre="offre" @refresh="refresh" @supprimer="supprimer" :canPostuler="this.canPostuler" :canModifier="this.canModifier" :canValider="this.canValider" :canSupprimer="this.canSupprimer" :canVoirCandidature="this.canVoirCandidature" :canValiderCandidature="this.canValiderCandidature" :extended="extended" Loading front/Mission/OffreEmploi.vue +39 −45 Original line number Diff line number Diff line <template> <div class="col" v-if="!this.extended"> <div class="card h-100"> <div class="card-header"> Loading Loading @@ -31,22 +32,7 @@ </div> <div class="card-footer"> <div class="d-grid gap-2 d-md-flex justify-content-md-end"> <a v-if="offre.validation && this.canValider" :href="devaliderUrl" class="btn btn-danger" title="Devalider" @click.prevent="devalider"> <u-icon name="thumbs-down"/> Devalider </a> <a v-if="!offre.validation && this.canValider" :href="validerUrl" class="btn btn-success" title="Valider" @click.prevent="valider"> <u-icon name="thumbs-up"/> Valider </a> <a :href="consulterUrl" title="Consulter " class="btn btn-primary" Loading @@ -54,29 +40,12 @@ <u-icon name="eye"/> Voir </a> <a v-if="this.canModifier" :href="saisirUrl" class="btn btn-primary" @click.prevent="saisir" title="Modifier"> <u-icon name="pen-to-square"/> Modifier </a> <a v-if="this.canSupprimer" :href="supprimerUrl" class="btn btn-danger" title="Supprimer" data-title="Suppression de l'offre" data-content="Êtes-vous sur de vouloir supprimer l'offre ?" @click.prevent="supprimer"> <u-icon name="trash"/> </a> </div> </div> </div> </div> <div v-if="this.extended"> <h1 class="page-header">{{ offre.titre }}</h1> <div v-if="!this.utilisateur" class="alert alert-primary d-flex align-items-center" role="alert"> <i class="fa-solid fa-user"></i> <div class="ms-2"> Loading Loading @@ -174,8 +143,42 @@ <div class="mt-5"> <a class="btn btn-primary" href="/offre-emploi">Retour aux offres</a> <a :class="isDisabled" :href="'/offre-emploi/postuler/' + offre.id" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="Vous devez être connecté pour postuler">Postuler</a> <a v-if="this.canPostuler" :href="'/offre-emploi/postuler/' + offre.id" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="Vous devez être connecté pour postuler">Postuler</a> <a v-if="offre.canModifier" :href="saisirUrl" class="btn btn-primary" @click.prevent="saisir" title="Modifier"> <u-icon name="pen-to-square"/> Modifier </a> <a v-if="offre.validation && offre.canValider" :href="devaliderUrl" class="btn btn-danger" title="Devalider" @click.prevent="devalider"> <u-icon name="thumbs-down"/> Devalider </a> <a v-if="!offre.validation && offre.canValider" :href="validerUrl" class="btn btn-success" title="Valider" @click.prevent="valider"> <u-icon name="thumbs-up"/> Valider </a> <a v-if="offre.canSupprimer" :href="supprimerUrl" class="btn btn-danger" title="Supprimer" data-title="Suppression de l'offre" data-content="Êtes-vous sur de vouloir supprimer l'offre ?" @click.prevent="supprimer"> <u-icon name="trash"/> Supprimer </a> </div> Loading @@ -202,8 +205,6 @@ export default { data() { console.log(this) return { saisirUrl: unicaenVue.url('offre-emploi/saisir/:offre', {offre: this.offre.id}), supprimerUrl: unicaenVue.url("offre-emploi/supprimer/:offre", {offre: this.offre.id}), Loading @@ -214,13 +215,6 @@ export default { }; }, computed: { isDisabled: function () { if (!this.canPostuler) { return 'btn btn-primary disabled'; } return 'btn btn-primary'; }, isCandidat: function () { return false; }, Loading module/Mission/config/offre-emploi.config.php +2 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ return [ ], 'rules' => [ [ 'privileges' => [ Loading @@ -128,6 +129,7 @@ return [ Privileges::MISSION_OFFRE_EMPLOI_POSTULER, Privileges::MISSION_CANDIDATURE_VISUALISATION, Privileges::MISSION_CANDIDATURE_VALIDER, Privileges::MISSION_OFFRE_EMPLOI_SUPPRESSION, ], 'resources' => 'OffreEmploi', Loading module/Mission/src/Assertion/OffreEmploiAssertion.php +17 −4 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ class OffreEmploiAssertion extends AbstractAssertion /** @var Role $role */ $role = $this->getRole(); if ($privilege && !$role->hasPrivilege($privilege)) return false; switch (true) { Loading @@ -44,6 +43,8 @@ class OffreEmploiAssertion extends AbstractAssertion return $this->assertCandidatureVisualisation($role, $entity); case Privileges::MISSION_CANDIDATURE_VALIDER: return $this->assertCandidatureValider($role, $entity); case Privileges::MISSION_OFFRE_EMPLOI_SUPPRESSION: return $this->assertOffreEmploiSupprimer($role, $entity); } break; } Loading @@ -55,23 +56,34 @@ class OffreEmploiAssertion extends AbstractAssertion protected function assertOffreEmploiVisualisation(Role $role, OffreEmploi $offre) { if ($offre->isValide()) { return true; } return true; } protected function assertOffreEmploiEdition(Role $role, OffreEmploi $offre) { $haveRole = $this->haveRole(); return $this->asserts([ $this->haveRole(), $offre->canSaisie(), $offre->haveCandidats(), $this->assertOffreEmploi($role, $offre), ]); } $have = $offre->haveCandidats(); protected function assertOffreEmploiSupprimer(Role $role, OffreEmploi $offre) { return $this->asserts([ $this->haveRole(), $offre->canSaisie(), !$offre->haveCandidats(), $this->assertOffreEmploi($role, $offre), ]); } Loading Loading @@ -107,6 +119,7 @@ class OffreEmploiAssertion extends AbstractAssertion protected function assertOffreEmploiValidation(Role $role, OffreEmploi $offre) { return $this->asserts([ $this->haveRole(), $this->assertOffreEmploi($role, $offre), Loading module/Mission/src/Controller/OffreEmploiController.php +5 −1 Original line number Diff line number Diff line Loading @@ -86,11 +86,14 @@ class OffreEmploiController extends AbstractController */ public function listeAction() { $parameters = []; $role = $this->getServiceContext()->getSelectedIdentityRole(); /** * @var Query $query */ $query = $this->getServiceOffreEmploi()->query([]); $query = $this->getServiceOffreEmploi()->query([], $role); $properties = [ 'id', Loading @@ -107,6 +110,7 @@ class OffreEmploiController extends AbstractController 'validation', 'candidats', 'candidaturesValides', 'valide', ['candidatures', ['id', ['intervenant', ['id', 'nomUsuel', 'prenom', 'emailPro', 'code', ['structure', ['libelleLong', 'libelleCourt', 'code', 'id']], ['statut', ['libelle', 'code']]]], 'histoCreation', 'validation']], ]; Loading Loading
front/Mission/ListeOffreEmploi.vue +4 −1 Original line number Diff line number Diff line Loading @@ -13,8 +13,11 @@ <!--On affiche une synthèse de la liste des offres--> <div v-if="extended"> <offreEmploi v-for="offre in offres" :key="offre.id" :offre="offre" @refresh="refresh" <offreEmploi v-for="offre in offres" :key="offre.id" :offre="offre" @refresh="refresh" @supprimer="supprimer" :canPostuler="this.canPostuler" :canModifier="this.canModifier" :canValider="this.canValider" :canSupprimer="this.canSupprimer" :canVoirCandidature="this.canVoirCandidature" :canValiderCandidature="this.canValiderCandidature" :extended="extended" Loading
front/Mission/OffreEmploi.vue +39 −45 Original line number Diff line number Diff line <template> <div class="col" v-if="!this.extended"> <div class="card h-100"> <div class="card-header"> Loading Loading @@ -31,22 +32,7 @@ </div> <div class="card-footer"> <div class="d-grid gap-2 d-md-flex justify-content-md-end"> <a v-if="offre.validation && this.canValider" :href="devaliderUrl" class="btn btn-danger" title="Devalider" @click.prevent="devalider"> <u-icon name="thumbs-down"/> Devalider </a> <a v-if="!offre.validation && this.canValider" :href="validerUrl" class="btn btn-success" title="Valider" @click.prevent="valider"> <u-icon name="thumbs-up"/> Valider </a> <a :href="consulterUrl" title="Consulter " class="btn btn-primary" Loading @@ -54,29 +40,12 @@ <u-icon name="eye"/> Voir </a> <a v-if="this.canModifier" :href="saisirUrl" class="btn btn-primary" @click.prevent="saisir" title="Modifier"> <u-icon name="pen-to-square"/> Modifier </a> <a v-if="this.canSupprimer" :href="supprimerUrl" class="btn btn-danger" title="Supprimer" data-title="Suppression de l'offre" data-content="Êtes-vous sur de vouloir supprimer l'offre ?" @click.prevent="supprimer"> <u-icon name="trash"/> </a> </div> </div> </div> </div> <div v-if="this.extended"> <h1 class="page-header">{{ offre.titre }}</h1> <div v-if="!this.utilisateur" class="alert alert-primary d-flex align-items-center" role="alert"> <i class="fa-solid fa-user"></i> <div class="ms-2"> Loading Loading @@ -174,8 +143,42 @@ <div class="mt-5"> <a class="btn btn-primary" href="/offre-emploi">Retour aux offres</a> <a :class="isDisabled" :href="'/offre-emploi/postuler/' + offre.id" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="Vous devez être connecté pour postuler">Postuler</a> <a v-if="this.canPostuler" :href="'/offre-emploi/postuler/' + offre.id" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-original-title="Vous devez être connecté pour postuler">Postuler</a> <a v-if="offre.canModifier" :href="saisirUrl" class="btn btn-primary" @click.prevent="saisir" title="Modifier"> <u-icon name="pen-to-square"/> Modifier </a> <a v-if="offre.validation && offre.canValider" :href="devaliderUrl" class="btn btn-danger" title="Devalider" @click.prevent="devalider"> <u-icon name="thumbs-down"/> Devalider </a> <a v-if="!offre.validation && offre.canValider" :href="validerUrl" class="btn btn-success" title="Valider" @click.prevent="valider"> <u-icon name="thumbs-up"/> Valider </a> <a v-if="offre.canSupprimer" :href="supprimerUrl" class="btn btn-danger" title="Supprimer" data-title="Suppression de l'offre" data-content="Êtes-vous sur de vouloir supprimer l'offre ?" @click.prevent="supprimer"> <u-icon name="trash"/> Supprimer </a> </div> Loading @@ -202,8 +205,6 @@ export default { data() { console.log(this) return { saisirUrl: unicaenVue.url('offre-emploi/saisir/:offre', {offre: this.offre.id}), supprimerUrl: unicaenVue.url("offre-emploi/supprimer/:offre", {offre: this.offre.id}), Loading @@ -214,13 +215,6 @@ export default { }; }, computed: { isDisabled: function () { if (!this.canPostuler) { return 'btn btn-primary disabled'; } return 'btn btn-primary'; }, isCandidat: function () { return false; }, Loading
module/Mission/config/offre-emploi.config.php +2 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,7 @@ return [ ], 'rules' => [ [ 'privileges' => [ Loading @@ -128,6 +129,7 @@ return [ Privileges::MISSION_OFFRE_EMPLOI_POSTULER, Privileges::MISSION_CANDIDATURE_VISUALISATION, Privileges::MISSION_CANDIDATURE_VALIDER, Privileges::MISSION_OFFRE_EMPLOI_SUPPRESSION, ], 'resources' => 'OffreEmploi', Loading
module/Mission/src/Assertion/OffreEmploiAssertion.php +17 −4 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ class OffreEmploiAssertion extends AbstractAssertion /** @var Role $role */ $role = $this->getRole(); if ($privilege && !$role->hasPrivilege($privilege)) return false; switch (true) { Loading @@ -44,6 +43,8 @@ class OffreEmploiAssertion extends AbstractAssertion return $this->assertCandidatureVisualisation($role, $entity); case Privileges::MISSION_CANDIDATURE_VALIDER: return $this->assertCandidatureValider($role, $entity); case Privileges::MISSION_OFFRE_EMPLOI_SUPPRESSION: return $this->assertOffreEmploiSupprimer($role, $entity); } break; } Loading @@ -55,23 +56,34 @@ class OffreEmploiAssertion extends AbstractAssertion protected function assertOffreEmploiVisualisation(Role $role, OffreEmploi $offre) { if ($offre->isValide()) { return true; } return true; } protected function assertOffreEmploiEdition(Role $role, OffreEmploi $offre) { $haveRole = $this->haveRole(); return $this->asserts([ $this->haveRole(), $offre->canSaisie(), $offre->haveCandidats(), $this->assertOffreEmploi($role, $offre), ]); } $have = $offre->haveCandidats(); protected function assertOffreEmploiSupprimer(Role $role, OffreEmploi $offre) { return $this->asserts([ $this->haveRole(), $offre->canSaisie(), !$offre->haveCandidats(), $this->assertOffreEmploi($role, $offre), ]); } Loading Loading @@ -107,6 +119,7 @@ class OffreEmploiAssertion extends AbstractAssertion protected function assertOffreEmploiValidation(Role $role, OffreEmploi $offre) { return $this->asserts([ $this->haveRole(), $this->assertOffreEmploi($role, $offre), Loading
module/Mission/src/Controller/OffreEmploiController.php +5 −1 Original line number Diff line number Diff line Loading @@ -86,11 +86,14 @@ class OffreEmploiController extends AbstractController */ public function listeAction() { $parameters = []; $role = $this->getServiceContext()->getSelectedIdentityRole(); /** * @var Query $query */ $query = $this->getServiceOffreEmploi()->query([]); $query = $this->getServiceOffreEmploi()->query([], $role); $properties = [ 'id', Loading @@ -107,6 +110,7 @@ class OffreEmploiController extends AbstractController 'validation', 'candidats', 'candidaturesValides', 'valide', ['candidatures', ['id', ['intervenant', ['id', 'nomUsuel', 'prenom', 'emailPro', 'code', ['structure', ['libelleLong', 'libelleCourt', 'code', 'id']], ['statut', ['libelle', 'code']]]], 'histoCreation', 'validation']], ]; Loading