diff --git a/front/Mission/ListeCandidatures.vue b/front/Mission/ListeCandidatures.vue
index 49f2575cc31df559e0308d3888f3cb2efc9d0875..29963d6e90ed8edc20b81edb3ad65f15bcca759c 100644
--- a/front/Mission/ListeCandidatures.vue
+++ b/front/Mission/ListeCandidatures.vue
@@ -29,14 +29,20 @@
                        class="btn btn-success"
                        data-content="Êtes vous sûr de vouloir accepter cette candidature ?"
                        data-title="Accepter la candidature"
+                       style="color:white;"
                        title="Accepter la candidature"
-                       @click.prevent="validerCandidature">Accepter </a>&nbsp;
+                       @click.prevent="validerCandidature">
+                        <i class="fa-solid fa-check"></i>
+                    </a>&nbsp;
                     <a :href="urlRefuserCandidature(candidature)"
                        class="btn btn-danger"
                        data-content="Êtes vous sûr de vouloir refuser cette candidature ?"
                        data-title="Refuser la candidature"
+                       style="color:white;"
                        title="Refuser la candidature"
-                       @click.prevent="refuserCandidature">Refuser </a>
+                       @click.prevent="refuserCandidature">
+                        <i class="fa-sharp fa-solid fa-xmark"></i>
+                    </a>
                 </td>
             </tr>
 
diff --git a/front/Mission/OffreEmploi.vue b/front/Mission/OffreEmploi.vue
index 17a0b1205a5457ec3ffa5e660ebf378b6d87151e..e88d686ccd2bf558a2e4be68326d84089783de7b 100644
--- a/front/Mission/OffreEmploi.vue
+++ b/front/Mission/OffreEmploi.vue
@@ -117,19 +117,14 @@
                         <span v-if="!candidature.validation && candidature.motif === null" class="badge rounded-pill bg-warning">En attente d'acceptation</span>
                     </td>
                     <td v-if="this.canValiderCandidature">
-                        <a v-if="!candidature.validation" :href="urlAccepterCandidature(candidature)"
-                           class="btn btn-success"
-                           data-content="Êtes vous sûr de vouloir accepter cette candidature ?"
-                           data-title="Accepter la candidature"
-                           title="Accepter la candidature"
-                           @click.prevent="validerCandidature">Accepter </a>&nbsp;
-                        <a v-if="!candidature.motif && candidature.validation"
-                           :href="urlRefuserCandidature(candidature)"
-                           class="btn btn-danger"
-                           data-content="Êtes vous sûr de vouloir refuser cette candidature ?"
-                           data-title="Refuser la candidature"
-                           title="Refuser la candidature"
-                           @click.prevent="refuserCandidature">Refuser </a>
+                        <a :href="urlVoirCandidature(candidature)"
+                           class="btn btn-primary"
+                           title="Consulter "
+                        >
+                            <u-icon name="eye"/>
+                            Voir
+                        </a>
+
                     </td>
                 </tr>
                 </tbody>
@@ -249,6 +244,9 @@ export default {
         urlVoir: function (candidature) {
             return unicaenVue.url('intervenant/:code/voir', {code: 'code:'+candidature.intervenant.code})
         },
+        urlVoirCandidature: function (candidature) {
+            return unicaenVue.url('intervenant/:code/candidature', {code: 'code:'+candidature.intervenant.code})
+        },
         urlAccepterCandidature: function (candidature) {
             return unicaenVue.url('offre-emploi/accepter-candidature/:id', {id: candidature.id})
         },
diff --git a/module/Application/config/intervenant.config.php b/module/Application/config/intervenant.config.php
index 744fefba8c150a10665b680c2336f96b44fdb10a..ec3dbeca415f540d4a017832f2c0cb2799b0a461 100755
--- a/module/Application/config/intervenant.config.php
+++ b/module/Application/config/intervenant.config.php
@@ -9,6 +9,7 @@ use Application\Provider\Privilege\Privileges;
 use Contrat\Controller\ContratController;
 use Dossier\Assertion\IntervenantDossierAssertion;
 use Dossier\Controller\IntervenantDossierController;
+use Mission\Assertion\OffreEmploiAssertion;
 use Paiement\Controller\PaiementController;
 use UnicaenPrivilege\Guard\PrivilegeController;
 use UnicaenPrivilege\Provider\Rule\PrivilegeRuleProvider;
@@ -351,7 +352,7 @@ return [
                     'controller' => 'Application\Controller\Intervenant',
                     'action'     => ['candidature', 'get-candidatures'],
                     'privileges' => [Privileges::MISSION_CANDIDATURE_VISUALISATION],
-                    'assertion'  => IntervenantAssertion::class,
+                    'assertion'  => OffreEmploiAssertion::class,
                 ],
                 [
                     'controller' => 'Application\Controller\Intervenant',
@@ -407,6 +408,13 @@ return [
                         'resources'  => ['Intervenant'],
                         'assertion'  => Assertion\IntervenantAssertion::class,
                     ],
+                    [
+                        'privileges' => [
+                            Privileges::MISSION_CANDIDATURE_VALIDER,
+                        ],
+                        'resources'  => ['Intervenant'],
+                        'assertion'  => OffreEmploiAssertion::class,
+                    ],
                 ],
             ],
         ],
diff --git a/module/Application/src/Controller/IntervenantController.php b/module/Application/src/Controller/IntervenantController.php
index 7ad2091cd7825a174a43e8019893a6b1bed0ccf4..71116c28399ac62cdc5c793a911b9e2daada17f9 100755
--- a/module/Application/src/Controller/IntervenantController.php
+++ b/module/Application/src/Controller/IntervenantController.php
@@ -65,7 +65,7 @@ class  IntervenantController extends AbstractController
     use CandidatureServiceAwareTrait;
 
 
-    public function indexAction()
+    public function indexAction ()
     {
         $role = $this->getServiceContext()->getSelectedIdentityRole();
 
@@ -86,7 +86,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function rechercherAction()
+    public function rechercherAction ()
     {
         $recents = $this->getIntervenantsRecents();
 
@@ -95,7 +95,37 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function rechercheJsonAction()
+    /**
+     *
+     * @return array
+     */
+    protected function getIntervenantsRecents ()
+    {
+        $container = $this->getSessionContainer();
+        //$container->recents = [];
+        if (isset($container->recents)) {
+            $recents = $container->recents;
+            foreach ($recents as $i => $recent) {
+                if (isset($recent['code'])) {
+                    $intervenant = $this->getServiceIntervenant()->getByCode($recent['code']);
+                } else {
+                    $intervenant = null;
+                }
+                if (!$intervenant) {
+                    unset($recents[$i]);
+                    unset($container->recents[$i]);
+                }
+            }
+
+            return $recents;
+        } else {
+            return [];
+        }
+    }
+
+
+
+    public function rechercheJsonAction ()
     {
         $recherche         = $this->getProcessusIntervenant()->recherche();
         $canShowHistorises = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_VISUALISATION_HISTORISES));
@@ -112,7 +142,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function voirAction()
+    public function voirAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
         $tab         = $this->params()->fromQuery('tab');
@@ -137,21 +167,83 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function candidatureAction()
+    /**
+     *
+     * @param \Application\Entity\Db\Intervenant $intervenant
+     *
+     * @return \Application\Controller\IntervenantController
+     */
+    protected function addIntervenantRecent (Intervenant $intervenant)
     {
-        $intervenant = $this->getEvent()->getParam('intervenant');
+        $container = $this->getSessionContainer();
+        if (!isset($container->recents)) {
+            $container->recents = [];
+        }
+
+        if (count($container->recents) > 4 && !isset($container->recents[$intervenant->getCode()])) {
+            $prem = (int)date('U');
+            foreach ($container->recents as $i) {
+                $horo = $i['__horo_ajout__'];
+                if ($horo) {
+                    if ($prem >= $horo) $prem = $horo;
+                }
+            }
+            foreach ($container->recents as $index => $i) {
+                $horo = $i['__horo_ajout__'];
+                if ($horo == $prem) {
+                    unset($container->recents[$index]);
+                }
+            }
+        }
+
+        if (!isset($container->recents[$intervenant->getCode()])) {
+            $container->recents[$intervenant->getCode()] = [
+                'civilite'         => $intervenant->getCivilite() ? $intervenant->getCivilite()->getLibelleLong() : null,
+                'nom'              => $intervenant->getNomUsuel(),
+                'prenom'           => $intervenant->getPrenom(),
+                'date-naissance'   => $intervenant->getDateNaissance(),
+                'structure'        => (string)$intervenant->getStructure(),
+                'statut'           => (string)$intervenant->getStatut(),
+                'code'             => $intervenant->getCode(),
+                'numero-personnel' => $intervenant->getCodeRh(),
+                '__horo_ajout__'   => (int)date('U'),
+            ];
+        } else {
+            if (!isset($container->recents[$intervenant->getCode()]['statut'])) {
+                $container->recents[$intervenant->getCode()]['statut'] = [$container->recents[$intervenant->getCode()]['statut']];
+            }
+            if (is_array($container->recents[$intervenant->getCode()]['statut'])) {
+                $container->recents[$intervenant->getCode()]['statut'][] = (string)$intervenant->getStatut();
+            } else {
+                $container->recents[$intervenant->getCode()]['statut'] = (string)$intervenant->getStatut();
+            }
+        }
+
+        uasort($container->recents, function ($a, $b) {
+            return $a['nom'] . ' ' . $a['prenom'] > $b['nom'] . ' ' . $b['prenom'] ? 1 : 0;
+        });
+
+        return $this;
+    }
+
+
+
+    public function candidatureAction ()
+    {
+        $intervenant           = $this->getEvent()->getParam('intervenant');
+        $canValiderCandidature = $this->isAllowed($intervenant, Privileges::MISSION_CANDIDATURE_VALIDER);
 
         if (!$intervenant) {
             throw new \LogicException('Intervenant introuvable');
         }
 
 
-        return compact('intervenant');
+        return compact('intervenant', 'canValiderCandidature');
     }
 
 
 
-    public function getCandidaturesAction()
+    public function getCandidaturesAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
         if (!$intervenant) {
@@ -168,7 +260,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function definirParDefautAction()
+    public function definirParDefautAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
 
@@ -181,17 +273,17 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function ficheAction()
+    public function ficheAction ()
     {
         $role        = $this->getServiceContext()->getSelectedIdentityRole();
-        $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
+        $intervenant = $role->getIntervenant() ? : $this->getEvent()->getParam('intervenant');
 
         return compact('intervenant', 'role');
     }
 
 
 
-    public function saisirAction()
+    public function saisirAction ()
     {
         $intervenant  = $this->getEvent()->getParam('intervenant');
         $title        = "Saisie d'un intervenant";
@@ -241,7 +333,7 @@ class  IntervenantController extends AbstractController
                         $login         = $form->get('intervenant-edition-login')->getValue();
                         $password      = $form->get('intervenant-edition-password')->getValue();
                         $utilisateur   = $this->getServiceUtilisateur()->creerUtilisateur($nom, $prenom, $dateNaissance, $login, $password);
-                        $utilisateur->setCode($intervenant->getUtilisateurCode() ?: $intervenant->getCode());
+                        $utilisateur->setCode($intervenant->getUtilisateurCode() ? : $intervenant->getCode());
                         $this->getServiceUtilisateur()->save($utilisateur);
                         if ($utilisateur->getCode() != $intervenant->getUtilisateurCode()) {
                             $intervenant->setUtilisateurCode($utilisateur->getCode());
@@ -281,7 +373,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function synchronisationAction()
+    public function synchronisationAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
 
@@ -306,7 +398,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function synchroniserAction()
+    public function synchroniserAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
         $this->getProcessusImport()->execMaj('INTERVENANT', 'CODE', $intervenant->getCode());
@@ -317,7 +409,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function voirHeuresCompAction()
+    public function voirHeuresCompAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
         /* @var $intervenant \Application\Entity\Db\Intervenant */
@@ -362,7 +454,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function formuleTotauxHetdAction()
+    public function formuleTotauxHetdAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
         /* @var $intervenant Intervenant */
@@ -375,7 +467,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function supprimerAction()
+    public function supprimerAction ()
     {
         $intervenant = $this->getEvent()->getParam('intervenant');
         /* @var $intervenant \Application\Entity\Db\Intervenant */
@@ -414,7 +506,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function historiserAction()
+    public function historiserAction ()
     {
         /* @var $intervenant \Application\Entity\Db\Intervenant */
         $intervenant = $this->getEvent()->getParam('intervenant');
@@ -429,7 +521,7 @@ class  IntervenantController extends AbstractController
 
 
 
-    public function restaurerAction()
+    public function restaurerAction ()
     {
         /* @var $intervenant \Application\Entity\Db\Intervenant */
         $intervenant = $this->getEvent()->getParam('intervenant');
@@ -443,95 +535,4 @@ class  IntervenantController extends AbstractController
 
         return $this->redirect()->toRoute('intervenant/voir', ['intervenant' => $intervenant->getId()]);
     }
-
-
-
-    /**
-     *
-     * @return array
-     */
-    protected function getIntervenantsRecents()
-    {
-        $container = $this->getSessionContainer();
-        //$container->recents = [];
-        if (isset($container->recents)) {
-            $recents = $container->recents;
-            foreach ($recents as $i => $recent) {
-                if (isset($recent['code'])) {
-                    $intervenant = $this->getServiceIntervenant()->getByCode($recent['code']);
-                } else {
-                    $intervenant = null;
-                }
-                if (!$intervenant) {
-                    unset($recents[$i]);
-                    unset($container->recents[$i]);
-                }
-            }
-
-            return $recents;
-        } else {
-            return [];
-        }
-    }
-
-
-
-    /**
-     *
-     * @param \Application\Entity\Db\Intervenant $intervenant
-     *
-     * @return \Application\Controller\IntervenantController
-     */
-    protected function addIntervenantRecent(Intervenant $intervenant)
-    {
-        $container = $this->getSessionContainer();
-        if (!isset($container->recents)) {
-            $container->recents = [];
-        }
-
-        if (count($container->recents) > 4 && !isset($container->recents[$intervenant->getCode()])) {
-            $prem = (int)date('U');
-            foreach ($container->recents as $i) {
-                $horo = $i['__horo_ajout__'];
-                if ($horo) {
-                    if ($prem >= $horo) $prem = $horo;
-                }
-            }
-            foreach ($container->recents as $index => $i) {
-                $horo = $i['__horo_ajout__'];
-                if ($horo == $prem) {
-                    unset($container->recents[$index]);
-                }
-            }
-        }
-
-        if (!isset($container->recents[$intervenant->getCode()])) {
-            $container->recents[$intervenant->getCode()] = [
-                'civilite'         => $intervenant->getCivilite() ? $intervenant->getCivilite()->getLibelleLong() : null,
-                'nom'              => $intervenant->getNomUsuel(),
-                'prenom'           => $intervenant->getPrenom(),
-                'date-naissance'   => $intervenant->getDateNaissance(),
-                'structure'        => (string)$intervenant->getStructure(),
-                'statut'           => (string)$intervenant->getStatut(),
-                'code'             => $intervenant->getCode(),
-                'numero-personnel' => $intervenant->getCodeRh(),
-                '__horo_ajout__'   => (int)date('U'),
-            ];
-        } else {
-            if (!isset($container->recents[$intervenant->getCode()]['statut'])) {
-                $container->recents[$intervenant->getCode()]['statut'] = [$container->recents[$intervenant->getCode()]['statut']];
-            }
-            if (is_array($container->recents[$intervenant->getCode()]['statut'])) {
-                $container->recents[$intervenant->getCode()]['statut'][] = (string)$intervenant->getStatut();
-            } else {
-                $container->recents[$intervenant->getCode()]['statut'] = (string)$intervenant->getStatut();
-            }
-        }
-
-        uasort($container->recents, function ($a, $b) {
-            return $a['nom'] . ' ' . $a['prenom'] > $b['nom'] . ' ' . $b['prenom'] ? 1 : 0;
-        });
-
-        return $this;
-    }
 }
diff --git a/module/Application/view/application/intervenant/candidature.phtml b/module/Application/view/application/intervenant/candidature.phtml
index 13efef5ff585fc209b2012758f141a0eb276f010..a6d331afaa98cd62ed19218f2750753f4d21bac1 100755
--- a/module/Application/view/application/intervenant/candidature.phtml
+++ b/module/Application/view/application/intervenant/candidature.phtml
@@ -3,7 +3,7 @@
 use Application\Provider\Privilege\Privileges;
 
 $this->intervenant($intervenant)->renderTitle('Candidature');
-$canValiderCandidature = $this->isAllowed(Privileges::getResourceId(Privileges::MISSION_CANDIDATURE_VALIDER));
+$canValiderCandidature = $this->isAllowed($intervenant, Privileges::MISSION_CANDIDATURE_VALIDER);
 
 
 echo $this->vue('mission/liste-candidatures', [
diff --git a/module/Mission/src/Assertion/OffreEmploiAssertion.php b/module/Mission/src/Assertion/OffreEmploiAssertion.php
index baee71306a6d5830fc435a5fcbd481044611926c..0d646fd2bea6d172d039742086c8b8b1282f02d5 100755
--- a/module/Mission/src/Assertion/OffreEmploiAssertion.php
+++ b/module/Mission/src/Assertion/OffreEmploiAssertion.php
@@ -5,9 +5,13 @@ namespace Mission\Assertion;
 use Application\Acl\Role;
 use Application\Entity\Db\Intervenant;
 use Application\Entity\Db\Structure;
+use Application\Entity\Db\WfEtape;
 use Application\Provider\Privilege\Privileges;
+use Application\Service\Traits\WorkflowServiceAwareTrait;
 use Mission\Entity\Db\Candidature;
+use Mission\Entity\Db\Mission;
 use Mission\Entity\Db\OffreEmploi;
+use Mission\Entity\Db\VolumeHoraireMission;
 use UnicaenApp\Service\EntityManagerAwareInterface;
 use UnicaenApp\Service\EntityManagerAwareTrait;
 use UnicaenPrivilege\Assertion\AbstractAssertion;
@@ -22,6 +26,7 @@ use Laminas\Permissions\Acl\Resource\ResourceInterface;
 class OffreEmploiAssertion extends AbstractAssertion implements EntityManagerAwareInterface
 {
     use EntityManagerAwareTrait;
+    use WorkflowServiceAwareTrait;
 
     /* ---- Routage général ---- */
     public function __invoke (array $page) // gestion des visibilités de menus
@@ -35,7 +40,7 @@ class OffreEmploiAssertion extends AbstractAssertion implements EntityManagerAwa
     {
         switch ($page['route']) {
             case 'offre-emploi':
-                $query = 'SELECT id FROM offre_emploi WHERE histo_destruction IS NULL';
+                $query = 'SELECT id FROM offre_emploi WHERE histo_destruction IS NULL AND validation_id IS NOT NULL';
                 $conn  = $this->getEntityManager()->getConnection();
 
                 if (false === $conn->executeQuery($query)->fetchOne()) {
@@ -81,12 +86,16 @@ class OffreEmploiAssertion extends AbstractAssertion implements EntityManagerAwa
                         return $this->assertOffreEmploiPostuler($role, $entity);
                     case Privileges::MISSION_CANDIDATURE_VISUALISATION:
                         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;
+            case $entity instanceof Intervenant:
+                switch ($privilege) {
+                    case Privileges::MISSION_CANDIDATURE_VALIDER:
+                        return $this->assertCandidatureValider($role, $entity);
+                }
+            break;
         }
 
         return true;
@@ -126,7 +135,6 @@ class OffreEmploiAssertion extends AbstractAssertion implements EntityManagerAwa
         return $this->asserts([
             $this->haveRole(),
             $offre->canSaisie(),
-            //$offre->haveCandidats(),
             $this->assertOffreEmploi($role, $offre),
         ]);
     }
@@ -203,15 +211,6 @@ class OffreEmploiAssertion extends AbstractAssertion implements EntityManagerAwa
 
 
 
-    protected function assertCandidatureValider (Role $role, OffreEmploi $offre)
-    {
-        return $this->asserts([
-            $this->haveRole(),
-        ]);
-    }
-
-
-
     protected function assertOffreEmploiSupprimer (Role $role, OffreEmploi $offre)
     {
         return $this->asserts([
@@ -223,9 +222,15 @@ class OffreEmploiAssertion extends AbstractAssertion implements EntityManagerAwa
 
 
 
-    protected function haveCandidature ()
+    protected function assertCandidatureValider (Role $role, Intervenant $intervenant)
     {
+        $codeEtape = WfEtape::CANDIDATURE_VALIDATION;
+        $wfEtape   = $this->getServiceWorkflow()->getEtape($codeEtape, $intervenant);
 
+        return $this->asserts([
+            $wfEtape->isAtteignable(),
+            $this->haveRole(),
+        ]);
     }
 
 }
\ No newline at end of file
diff --git a/module/Mission/src/Service/CandidatureService.php b/module/Mission/src/Service/CandidatureService.php
index 0a71b8b13a7119ee79cd7e9f168e368dc1987f1c..a8fca2bb8135a4b7e463668f8a944708c20504e3 100755
--- a/module/Mission/src/Service/CandidatureService.php
+++ b/module/Mission/src/Service/CandidatureService.php
@@ -109,7 +109,6 @@ class CandidatureService extends AbstractEntityService
         $query  = $this->getEntityManager()->createQuery($dql)->setParameters($parameters);
         $result = $query->getResult();
 
-        /*$triggers = $this->getOffreEmploiPrivileges();*/
         $triggers = [];
 
         $properties = [
diff --git a/public/dist/assets/main-ea1c4ffa.js b/public/dist/assets/main-ea1c4ffa.js
deleted file mode 100644
index 994b7d5ff02b6a6379821ebf7bacb566be1c5a46..0000000000000000000000000000000000000000
--- a/public/dist/assets/main-ea1c4ffa.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{c as a,o as r,t as h,a as i,w as D,v as A,b as c,F as g,r as y,d as u,n as j,e as _,f as L,g as b,h as k,i as O,j as S,p as N,k as z,l as q,m as Y,q as J,s as Q,u as X,x as W}from"./vendor-aed55673.js";const x=(e,t)=>{const n=e.__vccOpts||e;for(const[m,l]of t)n[m]=l;return n},G={props:{valeur:{required:!0,type:Number}},computed:{affichage:function(){return Util.formattedHeures(this.valeur,!0)}}},Z=["innerHTML"];function K(e,t,n,m,l,s){return r(),a("span",{class:"heures",innerHTML:s.affichage},null,8,Z)}const ee=x(G,[["render",K]]),te=Object.freeze(Object.defineProperty({__proto__:null,default:ee},Symbol.toStringTag,{value:"Module"})),ie={name:"Utilisateur",props:{nom:String,mail:String}},ne=["href"];function se(e,t,n,m,l,s){return r(),a("a",{href:`mailto:${n.mail}`},h(n.nom),9,ne)}const re=x(ie,[["render",se]]),ae=Object.freeze(Object.defineProperty({__proto__:null,default:re},Symbol.toStringTag,{value:"Module"})),oe={name:"UDate",props:{value:{required:!1,type:[String,Date]},format:{required:!1,type:String}},mounted(){this.formatted=this.formatage(this.value)},data(){return{formatted:void 0}},watch:{value:function(e){this.formatted=this.formatage(e)}},methods:{formatage(e){if(e===void 0)return;let t=new Date(e);const n=t.getFullYear(),m=(t.getMonth()+1).toString().padStart(2,"0"),l=t.getDate().toString().padStart(2,"0"),s=t.getHours().toString().padStart(2,"0"),d=t.getMinutes().toString().padStart(2,"0"),o=t.getSeconds().toString().padStart(2,"0");switch(this.format){case"datetime":return`${l}/${m}/${n} à ${s}:${d}`;case"time":return`${s}:${d}:${o}`}return`${l}/${m}/${n}`}}};function le(e,t,n,m,l,s){return h(l.formatted)}const w=x(oe,[["render",le]]),ue={name:"Recherche",data(){return{searchTerm:"",noResult:0,intervenants:[],checkedTypes:["vacataire","permanent","etudiant"]}},mixins:[Util],methods:{rechercher:function(e){this.searchTerm=e.currentTarget.value,this.searchTerm==""&&(this.noResult=0),this.searchTerm!=""&&this.reload()},urlFiche(e){return unicaenVue.url("intervenant/code:"+e+"/voir")},reload(){this.timer&&(clearTimeout(this.timer),this.timer=null),this.timer=setTimeout(()=>{unicaenVue.axios.post(unicaenVue.url("intervenant/recherche-json"),{term:this.searchTerm}).then(e=>{let t=e.data,n=[];for(const m in t){if(t[m].typeIntervenantCode=="E"&&this.checkedTypes.includes("vacataire")){n.push(t[m]);continue}if(t[m].typeIntervenantCode=="P"&&this.checkedTypes.includes("permanent")){n.push(t[m]);continue}if(t[m].typeIntervenantCode=="S"&&this.checkedTypes.includes("etudiant")){n.push(t[m]);continue}}this.intervenants=n,this.intervenants.length==0?this.noResult=1:this.noResult=0}).catch(e=>{console.log(e.message)})},800)}}},de=i("h3",null,"Saisissez le nom suivi éventuellement du prénom (2 lettres minimum)",-1),ce={class:"intervenant-recherche"},me={class:"critere"},he=i("br",null,null,-1),fe=i("span",{class:"fw-bold"},"Types d'intervenant : ",-1),_e=i("br",null,null,-1),ve={key:0,class:"table table-bordered table-hover"},pe=i("thead",null,[i("tr",null,[i("th",{style:{width:"90px"}}),i("th",null,"Civilité"),i("th",null,"Nom"),i("th",null,"Prenom"),i("th",null,"Structure"),i("th",null,"Statut"),i("th",null,"Date de naissance"),i("th",null,"N° Personnel")])],-1),be=["title"],ge={style:{}},ye=["href"],xe=i("i",{class:"fas fa-eye"},null,-1),Ce={key:1,class:"table table-bordered table-hover"},Ve=i("thead",null,[i("tr",null,[i("th",{style:{width:"90px"}}),i("th",null,"Civilité"),i("th",null,"Nom"),i("th",null,"Prenom"),i("th",null,"Structure"),i("th",null,"Statut"),i("th",null,"Date de naissance"),i("th",null,"N° Personnel")])],-1),ke=i("tbody",null,[i("tr",null,[i("td",{colspan:"8",style:{"text-align":"center"}},"Aucun intervenant trouvé")])],-1),Se=[Ve,ke];function Me(e,t,n,m,l,s){const d=w;return r(),a(g,null,[de,i("div",ce,[i("div",me,[i("div",null,[i("input",{id:"term",class:"form-control input",placeholder:"votre recherche...",type:"text",onKeyup:t[0]||(t[0]=(...o)=>s.rechercher&&s.rechercher(...o))},null,32),he]),i("div",null,[fe,D(i("input",{"onUpdate:modelValue":t[1]||(t[1]=o=>l.checkedTypes=o),checked:"checked",name:"type[]",type:"checkbox",value:"permanent",onChange:t[2]||(t[2]=o=>s.reload())},null,544),[[A,l.checkedTypes]]),c(" Permanent "),D(i("input",{"onUpdate:modelValue":t[3]||(t[3]=o=>l.checkedTypes=o),checked:"checked",name:"type[]",type:"checkbox",value:"vacataire",onChange:t[4]||(t[4]=o=>s.reload())},null,544),[[A,l.checkedTypes]]),c(" Vacataire "),D(i("input",{"onUpdate:modelValue":t[5]||(t[5]=o=>l.checkedTypes=o),checked:"checked",name:"type[]",type:"checkbox",value:"etudiant",onChange:t[6]||(t[6]=o=>s.reload())},null,544),[[A,l.checkedTypes]]),c(" Etudiant ")]),_e])]),l.intervenants.length>0?(r(),a("table",ve,[pe,i("tbody",null,[(r(!0),a(g,null,y(l.intervenants,(o,f)=>(r(),a("tr",{class:j({"bg-danger":o.destruction!==null}),title:o.destruction!==null?"Fiche historisé":""},[i("td",ge,[i("a",{href:s.urlFiche(o.code)},[xe,c(" Fiche")],8,ye)]),i("td",null,h(o.civilite),1),i("td",null,h(o.nom),1),i("td",null,h(o.prenom),1),i("td",null,h(o.structure),1),i("td",null,h(o.statut),1),i("td",null,[_(d,{value:o["date-naissance"]},null,8,["value"])]),i("td",null,h(o["numero-personnel"]),1)],10,be))),256))])])):u("",!0),l.intervenants.length==0&&l.noResult==1?(r(),a("table",Ce,Se)):u("",!0)],64)}const Te=x(ue,[["render",Me]]),De=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"})),je={name:"UModal",props:{id:{required:!0,type:String},title:{required:!0,type:String}}},we=["id"],Ue={class:"modal-dialog"},Ae={class:"modal-content"},Re={class:"modal-header"},Ee={class:"modal-title"},Le=i("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1),Oe={class:"modal-body"},qe={class:"modal-footer"},He=i("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"},"Fermer",-1);function Pe(e,t,n,m,l,s){return r(),a("div",{class:"modal fade",id:n.id,tabindex:"-1","aria-hidden":"true"},[i("div",Ue,[i("div",Ae,[i("div",Re,[i("h5",Ee,h(n.title),1),Le]),i("div",Oe,[L(e.$slots,"body")]),i("div",qe,[L(e.$slots,"footer"),He])])])],8,we)}const Fe=x(je,[["render",Pe]]),Be={name:"UIcon",props:{name:{required:!0,type:String},variant:{required:!1,type:String}}};function $e(e,t,n,m,l,s){return r(),a("i",{class:j(`fas fa-${n.name} text-${n.variant}`)},null,2)}const M=x(Be,[["render",$e]]);const Ie={name:"Mission",props:{mission:{required:!0}},data(){return{validationText:this.calcValidation(this.mission.validation),saisieUrl:unicaenVue.url("mission/saisie/:mission",{mission:this.mission.id}),validerUrl:unicaenVue.url("mission/valider/:mission",{mission:this.mission.id}),devaliderUrl:unicaenVue.url("mission/devalider/:mission",{mission:this.mission.id}),supprimerUrl:unicaenVue.url("mission/supprimer/:mission",{mission:this.mission.id})}},watch:{"mission.validation"(e){this.validationText=this.calcValidation(e)}},computed:{heuresLib:function(){return this.mission.heures===null||this.mission.heures===0?"Aucune heure saisie":this.mission.heures==this.mission.heuresValidees?Util.formattedHeures(this.mission.heures)+" heures (validées)":this.mission.heuresValidees==0?Util.formattedHeures(this.mission.heures)+" heures (non validées)":'<span class="bg-info">'+Util.formattedHeures(this.mission.heures)+"</span> heures ("+Util.formattedHeures(this.mission.heuresValidees)+" validées)"}},methods:{calcValidation(e){return e===null?"A valider":e.id===null?"Autovalidée":"Validation du "+Util.dateToString(e.histoCreation)+" par "},saisie(e){modAjax(e.currentTarget,t=>{this.refresh()})},supprimer(e){popConfirm(e.currentTarget,t=>{this.$emit("supprimer",this.mission)})},valider(e){popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},devalider(e){popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},volumeHoraireSupprimer(e){e.currentTarget.href=unicaenVue.url("mission/volume-horaire/supprimer/:missionVolumeHoraire",{missionVolumeHoraire:e.currentTarget.dataset.id}),popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},volumeHoraireValider(e){e.currentTarget.href=unicaenVue.url("mission/volume-horaire/valider/:missionVolumeHoraire",{missionVolumeHoraire:e.currentTarget.dataset.id}),popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},volumeHoraireDevalider(e){e.currentTarget.href=unicaenVue.url("mission/volume-horaire/devalider/:missionVolumeHoraire",{missionVolumeHoraire:e.currentTarget.dataset.id}),popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},refresh(){unicaenVue.axios.get(unicaenVue.url("mission/get/:mission",{mission:this.mission.id})).then(e=>{this.$emit("refresh",e.data)})}}},V=e=>(N("data-v-1735108d"),e=e(),z(),e),Ne=["id"],ze={class:"card-header card-header-h3"},Ye={key:0},Je={class:"float-end"},Qe={key:1},Xe={key:2},We={class:"float-end"},Ge={class:"card-body"},Ze={class:"row"},Ke={class:"col-md-8"},et={class:"row"},tt={class:"col-md-12"},it=V(()=>i("label",{class:"form-label"},"Composante en charge du suivi",-1)),nt={class:"form-control"},st={class:"row"},rt={class:"col-md-6"},at=V(()=>i("label",{class:"form-label"},"Taux de rémunération",-1)),ot={class:"form-control"},lt={class:"col-md-6"},ut=V(()=>i("label",{class:"form-label"},"Taux majoré (dimanches/jours fériés)",-1)),dt={class:"form-control"},ct={class:"col-md-7"},mt=V(()=>i("label",{class:"form-label"},"Nombre d'heures prévisionnelles",-1)),ht={class:"input-group mb-3"},ft=["innerHTML"],_t=["data-bs-target"],vt={key:0,class:"col-md-5"},pt=V(()=>i("label",{class:"form-label"},"Heures de formation prévues",-1)),bt={class:"form-control"},gt={class:"row"},yt={class:"col-md-12"},xt=V(()=>i("label",{class:"form-label"},"Descriptif de la mission",-1)),Ct={class:"form-control"},Vt={key:0,class:"row"},kt={class:"col-md-12"},St=V(()=>i("label",{class:"form-label"},"Etudiants suivis",-1)),Mt={class:"form-control"},Tt=V(()=>i("div",{class:"row"},[i("div",{class:"col-md-12"}," ")],-1)),Dt={class:"row"},jt={class:"col-md-12"},wt=["href"],Ut=["href"],At=["href"],Rt=["href"],Et={class:"col-md-4"},Lt=V(()=>i("div",null,[i("label",{class:"form-label"},"Suivi")],-1)),Ot={class:"table table-bordered table-condensed"},qt=V(()=>i("thead",null,[i("tr",null,[i("th",null,"Heures"),i("th",null,"Statut"),i("th",null,"Actions")])],-1)),Ht={style:{"text-align":"right"}},Pt=V(()=>i("br",null,null,-1)),Ft={key:0},Bt=["data-id"],$t=["data-id"],It=["data-id"];function Nt(e,t,n,m,l,s){const d=w,o=M,f=S("utilisateur"),C=S("u-heures"),p=Fe;return r(),a(g,null,[i("div",{id:n.mission.id,class:j([{"bg-success":n.mission.valide,"bg-default":!n.mission.valide},"card"])},[i("form",{onSubmit:t[4]||(t[4]=b((...v)=>e.submitForm&&e.submitForm(...v),["prevent"]))},[i("div",ze,[n.mission.libelleMission?(r(),a("h5",Ye,[c(h(n.mission.libelleMission)+" ",1),i("span",Je,[c("Du "),_(d,{value:n.mission.dateDebut},null,8,["value"]),c(" au "),_(d,{value:n.mission.dateFin},null,8,["value"])])])):u("",!0),n.mission.libelleMission?(r(),a("h6",Qe,h(n.mission.typeMission.libelle),1)):u("",!0),n.mission.libelleMission?u("",!0):(r(),a("h5",Xe,[c(h(n.mission.typeMission.libelle)+" ",1),i("span",We,[c("Du "),_(d,{value:n.mission.dateDebut},null,8,["value"]),c(" au "),_(d,{value:n.mission.dateFin},null,8,["value"])])]))]),i("div",Ge,[i("div",Ze,[i("div",Ke,[i("div",et,[i("div",tt,[it,i("div",nt,h(n.mission.structure.libelle),1)])]),i("div",st,[i("div",rt,[at,i("div",ot,h(n.mission.tauxRemu?n.mission.tauxRemu.libelle:null),1)]),i("div",lt,[ut,i("div",dt,h(n.mission.tauxRemuMajore?n.mission.tauxRemuMajore.libelle:n.mission.tauxRemu?"Idem ("+n.mission.tauxRemu.libelle+")":null),1)]),i("div",ct,[mt,i("div",ht,[i("div",{class:"form-control",innerHTML:s.heuresLib},null,8,ft),i("button",{"data-bs-target":`#details-${n.mission.id}`,class:"input-group-btn btn btn-secondary","data-bs-toggle":"modal"}," Détails ",8,_t)])]),n.mission.typeMission.besoinFormation?(r(),a("div",vt,[pt,i("div",bt,h(n.mission.heuresFormation),1)])):u("",!0)]),i("div",gt,[i("div",yt,[xt,i("div",Ct,h(n.mission.description),1)])]),n.mission.typeMission.accompagnementEtudiants?(r(),a("div",Vt,[i("div",kt,[St,i("div",Mt,[i("pre",null,h(n.mission.etudiantsSuivis),1)])])])):u("",!0),Tt,i("div",Dt,[i("div",jt,[n.mission.canSaisie?(r(),a("a",{key:0,href:l.saisieUrl,class:"btn btn-primary",onClick:t[0]||(t[0]=b((...v)=>s.saisie&&s.saisie(...v),["prevent"]))},"Modifier",8,wt)):u("",!0),n.mission.canValider?(r(),a("a",{key:1,href:l.validerUrl,class:"btn btn-secondary","data-content":"Êtes-vous sur de vouloir valider la mission ?","data-title":"Validation de la mission",onClick:t[1]||(t[1]=b((...v)=>s.valider&&s.valider(...v),["prevent"]))},"Valider",8,Ut)):u("",!0),n.mission.canDevalider?(r(),a("a",{key:2,href:l.devaliderUrl,class:"btn btn-danger","data-content":"Êtes-vous sur de vouloir dévalider la mission ?","data-title":"Dévalidation de la mission",onClick:t[2]||(t[2]=b((...v)=>s.devalider&&s.devalider(...v),["prevent"]))},"Dévalider",8,At)):u("",!0),n.mission.canSupprimer?(r(),a("a",{key:3,href:l.supprimerUrl,class:"btn btn-danger","data-content":"Êtes-vous sur de vouloir supprimer la mission ?","data-title":"Suppression de la mission",onClick:t[3]||(t[3]=b((...v)=>s.supprimer&&s.supprimer(...v),["prevent"]))},"Supprimer",8,Rt)):u("",!0)])])]),i("div",Et,[Lt,i("div",null,[_(o,{name:"thumbs-up",variant:"success"}),c(" Créé le "),_(d,{value:n.mission.histoCreation},null,8,["value"]),c(" par "),_(f,{mail:n.mission.histoCreateur.email,nom:n.mission.histoCreateur.displayName},null,8,["mail","nom"])]),i("div",null,[_(o,{name:n.mission.valide?"thumbs-up":"thumbs-down",variant:n.mission.valide?"success":"info"},null,8,["name","variant"]),c(" "+h(l.validationText)+" ",1),n.mission.validation&&n.mission.validation.histoCreateur?(r(),k(f,{key:0,mail:n.mission.validation.histoCreateur.email,nom:n.mission.validation.histoCreateur.displayName},null,8,["mail","nom"])):u("",!0)]),i("div",null,[_(o,{name:n.mission.contrat?"thumbs-up":"thumbs-down",variant:n.mission.contrat?"success":"info"},null,8,["name","variant"]),c(" "+h(n.mission.contrat?"Contrat établi":"Pas de contrat"),1)]),i("div",null,h(n.mission.heuresRealisees)+" heure"+h(n.mission.heuresRealisees<2?"":"s")+" réalisée"+h(n.mission.heuresRealisees<2?"":"s"),1)])])])],32)],10,Ne),_(p,{id:`details-${n.mission.id}`,title:"Détail des heures prévisionnelles"},{body:O(()=>[i("table",Ot,[qt,i("tbody",null,[(r(!0),a(g,null,y(n.mission.volumesHorairesPrevus,v=>(r(),a("tr",{key:v.id},[i("td",Ht,[_(C,{valeur:v.heures},null,8,["valeur"])]),i("td",null,[_(o,{name:"thumbs-up",variant:"success"}),c(" Saisi par "),_(f,{mail:v.histoCreateur.email,nom:v.histoCreateur.displayName},null,8,["mail","nom"]),c(" le "),_(d,{value:v.histoCreation},null,8,["value"]),Pt,_(o,{name:v.valide?"thumbs-up":"thumbs-down",variant:v.valide?"success":"info"},null,8,["name","variant"]),c(" "+h(v.validation&&v.validation.id==null?"Autovalidé":v.validation?"":"à valider")+" ",1),v.validation&&v.validation.histoCreateur?(r(),a("span",Ft,[c(" Validé par "),_(f,{mail:v.validation.histoCreateur.email,nom:v.validation.histoCreateur.displayName},null,8,["mail","nom"]),c(" le "),_(d,{value:v.validation.histoCreation},null,8,["value"])])):u("",!0)]),i("td",null,[v.canValider?(r(),a("a",{key:0,"data-id":v.id,class:"btn btn-secondary","data-content":"Êtes-vous sur de vouloir valider ce volume horaire ?","data-title":"Validation du volume horaire",onClick:t[5]||(t[5]=b((...T)=>s.volumeHoraireValider&&s.volumeHoraireValider(...T),["prevent"]))},"Valider",8,Bt)):u("",!0),v.canDevalider?(r(),a("a",{key:1,"data-id":v.id,class:"btn btn-danger","data-content":"Êtes-vous sur de vouloir dévalider ce volume horaire ?","data-title":"Dévalidation du volume horaire",onClick:t[6]||(t[6]=b((...T)=>s.volumeHoraireDevalider&&s.volumeHoraireDevalider(...T),["prevent"]))},"Dévalider",8,$t)):u("",!0),v.canSupprimer?(r(),a("a",{key:2,"data-id":v.id,class:"btn btn-danger","data-content":"Êtes-vous sur de vouloir supprimer le volume horaire ?","data-title":"Suppression du volume horaire",onClick:t[7]||(t[7]=b((...T)=>s.volumeHoraireSupprimer&&s.volumeHoraireSupprimer(...T),["prevent"]))},"Supprimer",8,It)):u("",!0)])]))),128))])])]),footer:O(()=>[]),_:1},8,["id"])],64)}const H=x(Ie,[["render",Nt],["__scopeId","data-v-1735108d"]]),zt=Object.freeze(Object.defineProperty({__proto__:null,default:H},Symbol.toStringTag,{value:"Module"})),Yt={components:{mission:H},props:{intervenant:{type:Number,required:!0},canAddMission:{type:Boolean,required:!0}},data(){return{missions:[],isMounted:!1,ajoutUrl:unicaenVue.url("mission/ajout/:intervenant",{intervenant:this.intervenant})}},mounted(){this.reload()},methods:{ajout(e){modAjax(e.currentTarget,t=>{this.reload()})},supprimer(e){this.reload()},refresh(e){let t=Util.json.indexById(this.missions,e.id);this.missions[t]=e,this.refreshPlafonds()},reload(){unicaenVue.axios.get(unicaenVue.url("mission/liste/:intervenant",{intervenant:this.intervenant})).then(e=>{this.missions=e.data,this.refreshPlafonds()})},refreshPlafonds(){this.isMounted?($(".plafonds").refresh(),$("#sidebar").refresh()):this.isMounted=!0}}},Jt=["href"];function Qt(e,t,n,m,l,s){const d=S("mission");return r(),a(g,null,[(r(!0),a(g,null,y(l.missions,o=>(r(),k(d,{onSupprimer:s.supprimer,onRefresh:s.refresh,key:o.id,mission:o},null,8,["onSupprimer","onRefresh","mission"]))),128)),n.canAddMission?(r(),a("a",{key:0,class:"btn btn-primary",href:l.ajoutUrl,onClick:t[0]||(t[0]=b((...o)=>s.ajout&&s.ajout(...o),["prevent"]))},"Ajout d'une nouvelle mission",8,Jt)):u("",!0)],64)}const Xt=x(Yt,[["render",Qt]]),Wt=Object.freeze(Object.defineProperty({__proto__:null,default:Xt},Symbol.toStringTag,{value:"Module"})),Gt={name:"ListeCandidatures.vue",props:{intervenant:{required:!0},canValiderCandidature:{type:Boolean,required:!1}},data(){return{candidatures:[],urlListeOffre:unicaenVue.url("offre-emploi")}},mounted(){this.reload()},methods:{reload(){unicaenVue.axios.get(unicaenVue.url("intervenant/:intervenant/get-candidatures",{intervenant:this.intervenant})).then(e=>{this.candidatures=e.data})},validerCandidature(e){popConfirm(e.target,t=>{this.reload()})},refuserCandidature(e){popConfirm(e.target,t=>{this.reload()})},urlOffre(e){return unicaenVue.url("offre-emploi/detail/:offre",{offre:e.offre.id})},urlAccepterCandidature:function(e){return unicaenVue.url("offre-emploi/accepter-candidature/:id",{id:e.id})},urlRefuserCandidature:function(e){return unicaenVue.url("offre-emploi/refuser-candidature/:id",{id:e.id})}}},Zt={class:"table table-bordered"},Kt=i("th",null,"Offre d'emploi",-1),ei=i("th",null,"Composante",-1),ti=i("th",null,"Etat",-1),ii={key:0},ni={key:0},si={key:0,colspan:"4",style:{"text-align":"center"}},ri={key:1,colspan:"3",style:{"text-align":"center"}},ai={style:{"text-align":"center"}},oi=["href"],li={style:{"text-align":"center"}},ui={style:{"text-align":"center"}},di={key:0,class:"badge rounded-pill bg-success"},ci={key:1,class:"badge rounded-pill bg-danger"},mi={key:2,class:"badge rounded-pill bg-warning"},hi={key:0,style:{"text-align":"center"}},fi=["href"],_i=["href"],vi=["href"];function pi(e,t,n,m,l,s){const d=M;return r(),a("div",null,[i("table",Zt,[i("thead",null,[i("tr",null,[Kt,ei,ti,n.canValiderCandidature?(r(),a("th",ii,"Action")):u("",!0)])]),i("tbody",null,[l.candidatures.length==0?(r(),a("tr",ni,[n.canValiderCandidature?(r(),a("td",si,"Aucune candidature")):u("",!0),n.canValiderCandidature?u("",!0):(r(),a("td",ri,"Aucune candidature"))])):u("",!0),(r(!0),a(g,null,y(l.candidatures,o=>(r(),a("tr",{key:o.id},[i("td",ai,[i("a",{href:s.urlOffre(o)},h(o.offre.titre),9,oi)]),i("td",li,h(o.offre.structure.libelleLong),1),i("td",ui,[o.validation?(r(),a("span",di,"Acceptée par "+h(o.validation.histoCreateur.displayName),1)):u("",!0),!o.validation&&o.motif!==null?(r(),a("span",ci,h(o.motif),1)):u("",!0),!o.validation&&o.motif===null?(r(),a("span",mi,"En attente d'acceptation")):u("",!0)]),this.canValiderCandidature?(r(),a("td",hi,[o.validation?u("",!0):(r(),a("a",{key:0,href:s.urlAccepterCandidature(o),class:"btn btn-success","data-content":"Êtes vous sûr de vouloir accepter cette candidature ?","data-title":"Accepter la candidature",title:"Accepter la candidature",onClick:t[0]||(t[0]=b((...f)=>s.validerCandidature&&s.validerCandidature(...f),["prevent"]))},"Accepter ",8,fi)),c("  "),i("a",{href:s.urlRefuserCandidature(o),class:"btn btn-danger","data-content":"Êtes vous sûr de vouloir refuser cette candidature ?","data-title":"Refuser la candidature",title:"Refuser la candidature",onClick:t[1]||(t[1]=b((...f)=>s.refuserCandidature&&s.refuserCandidature(...f),["prevent"]))},"Refuser ",8,_i)])):u("",!0)]))),128))])]),i("a",{href:l.urlListeOffre,class:"btn btn-primary",title:"Voir les offres d'emploi"},[_(d,{name:"eye"}),c(" Voir toutes les offres d'emploi ")],8,vi),c("  ")])}const bi=x(Gt,[["render",pi]]),gi=Object.freeze(Object.defineProperty({__proto__:null,default:bi},Symbol.toStringTag,{value:"Module"})),yi={name:"OffreEmploi.vue",props:{offre:{required:!0},utilisateur:{required:!1},extended:{type:Boolean,required:!1},canModifier:{type:Boolean,required:!1},canPostuler:{type:Boolean,required:!1},canValider:{type:Boolean,required:!1},canSupprimer:{type:Boolean,required:!1},canVoirCandidature:{type:Boolean,required:!1},canValiderCandidature:{type:Boolean,required:!1}},data(){return{saisirUrl:unicaenVue.url("offre-emploi/saisir/:offre",{offre:this.offre.id}),supprimerUrl:unicaenVue.url("offre-emploi/supprimer/:offre",{offre:this.offre.id}),validerUrl:unicaenVue.url("offre-emploi/valider/:offre",{offre:this.offre.id}),devaliderUrl:unicaenVue.url("offre-emploi/devalider/:offre",{offre:this.offre.id}),consulterUrl:unicaenVue.url("offre-emploi/detail/:offre",{offre:this.offre.id}),offreEmploiUrl:unicaenVue.url("offre-emploi"),postulerUrl:unicaenVue.url("offre-emploi/postuler/:id",{id:this.offre.id})}},computed:{isCandidat:function(){return!1},shortDesc:function(){let e=this.offre.description.substr(0,200);return this.offre.description.length>200&&(e+="..."),e},descriptionHtml:function(){return this.offre.description.replace(/(?:\r\n|\r|\n)/g,"<br />")},connectionLink:function(){let e="auth/connexion?redirect="+window.location.href;return unicaenVue.url(e)}},methods:{saisir(e){modAjax(e.target,t=>{this.refresh()})},urlVoir:function(e){return unicaenVue.url("intervenant/:code/voir",{code:"code:"+e.intervenant.code})},urlAccepterCandidature:function(e){return unicaenVue.url("offre-emploi/accepter-candidature/:id",{id:e.id})},urlRefuserCandidature:function(e){return unicaenVue.url("offre-emploi/refuser-candidature/:id",{id:e.id})},refresh(){unicaenVue.axios.get(unicaenVue.url("offre-emploi/get/:offreEmploi",{offreEmploi:this.offre.id})).then(e=>{this.$emit("refresh",e.data)})},supprimer(e){popConfirm(e.target,t=>{this.$emit("supprimer",this.offre)})},postuler(e){popConfirm(e.target,t=>{this.$emit("postuler",this.offre)})},valider(e){popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},devalider(e){popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},validerCandidature(e){popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})},refuserCandidature(e){popConfirm(e.currentTarget,t=>{this.$emit("refresh",t.data)})}}},xi={key:0,class:"col"},Ci={class:"card h-100"},Vi={class:"card-header"},ki={class:"badge rounded-pill bg-info"},Si={key:0,class:"badge rounded-pill bg-success"},Mi={key:1,class:"badge rounded-pill bg-warning"},Ti={class:"card-body"},Di={class:"bg-light",style:{padding:"5px"}},ji=i("b",null,"Créée le : ",-1),wi=i("br",null,null,-1),Ui=i("b",null,"Période à pourvoir : ",-1),Ai=i("br",null,null,-1),Ri=i("b",null,"Demandée par la composante :",-1),Ei=i("br",null,null,-1),Li=i("b",null,"Type de mission :",-1),Oi={class:"card-footer"},qi={class:"d-grid gap-2 d-md-flex justify-content-md-end"},Hi=["href"],Pi={key:1},Fi={class:"page-header"},Bi={key:0,class:"alert alert-primary d-flex align-items-center",role:"alert"},$i=i("i",{class:"fa-solid fa-user"},null,-1),Ii={class:"ms-2"},Ni=["href"],zi={key:1,class:"alert alert-primary d-flex align-items-center",role:"alert"},Yi=i("i",{class:"fa-solid fa-circle-xmark"},null,-1),Ji=i("div",{class:"ms-2"}," Vous n'avez pas les droits pour postuler à cette offre, merci de contacter votre administration de rattachement. ",-1),Qi=[Yi,Ji],Xi={key:2,class:"alert alert-primary d-flex align-items-center",role:"alert"},Wi=i("i",{class:"fa-solid fa-circle-xmark"},null,-1),Gi=i("div",{class:"ms-2"}," Vous avez déjà postulé à cette offre. ",-1),Zi=[Wi,Gi],Ki={class:"bg-light",style:{padding:"10px"}},en=i("b",null,"Créée le : ",-1),tn=i("br",null,null,-1),nn=i("b",null,"Période à pourvoir : ",-1),sn=i("br",null,null,-1),rn=i("b",null,"Date limite de candidature :",-1),an=i("br",null,null,-1),on=i("b",null,"Demandé par la composante :",-1),ln=i("br",null,null,-1),un=i("b",null,"Type de mission :",-1),dn=i("br",null,null,-1),cn=i("b",null,"Nombre d'heures pour la mission :",-1),mn=i("br",null,null,-1),hn=i("b",null,"Nombre de postes à pourvoir :",-1),fn=i("br",null,null,-1),_n=["innerHTML"],vn=i("br",null,null,-1),pn={key:3},bn=i("h5",null,[i("strong",null,"Liste des candidats :")],-1),gn={class:"table table-bordered"},yn=i("th",null,"Intervenant",-1),xn=i("th",null,"Etat",-1),Cn={key:0},Vn={key:0},kn={key:0,colspan:"4",style:{"text-align":"center"}},Sn={key:1,colspan:"3",style:{"text-align":"center"}},Mn=["href"],Tn={key:0,class:"badge rounded-pill bg-success"},Dn={key:1,class:"badge rounded-pill bg-danger"},jn={key:2,class:"badge rounded-pill bg-warning"},wn={key:0},Un=["href"],An=["href"],Rn={class:"mt-5"},En=["href"],Ln=["href"],On=["href"],qn=["href"],Hn=["href"],Pn=["href"];function Fn(e,t,n,m,l,s){const d=w,o=M;return r(),a(g,null,[this.extended?u("",!0):(r(),a("div",xi,[i("div",Ci,[i("div",Vi,[i("h4",null,h(n.offre.titre),1),i("span",ki,h(n.offre.nombreHeures)+" heure(s)",1),c("   "),n.offre.validation?(r(),a("span",Si,[c("Validée le "),_(d,{value:n.offre.validation.histoCreation},null,8,["value"]),c(" par "+h(n.offre.validation.histoCreateur.displayName),1)])):u("",!0),n.offre.validation?u("",!0):(r(),a("span",Mi," En attente de validation par la DRH")),c("  ")]),i("div",Ti,[i("p",Di,[ji,_(d,{value:n.offre.histoCreation},null,8,["value"]),c(" par "+h(n.offre.histoCreateur.displayName),1),wi,Ui,c("du "),_(d,{value:n.offre.dateDebut},null,8,["value"]),c(" au "),_(d,{value:n.offre.dateFin},null,8,["value"]),Ai,Ri,c(" "+h(n.offre.structure.libelleCourt)+" ",1),Ei,Li,c(" "+h(n.offre.typeMission.libelle),1)]),c(" "+h(s.shortDesc),1)]),i("div",Oi,[i("div",qi,[i("a",{href:l.consulterUrl,class:"btn btn-primary",title:"Consulter "},[_(o,{name:"eye"}),c(" Voir ")],8,Hi)])])])])),this.extended?(r(),a("div",Pi,[i("h1",Fi,h(n.offre.titre),1),this.utilisateur?u("",!0):(r(),a("div",Bi,[$i,i("div",Ii,[c(" Vous devez "),i("a",{href:s.connectionLink,class:"text-decoration-underline alert-link"},"être identifé",8,Ni),c(" pour pouvoir postuler. ")])])),!n.offre.canPostuler&&this.utilisateur?(r(),a("div",zi,Qi)):u("",!0),s.isCandidat&&this.utilisateur?(r(),a("div",Xi,Zi)):u("",!0),i("p",Ki,[en,_(d,{value:n.offre.histoCreation},null,8,["value"]),c(" par "+h(n.offre.histoCreateur.displayName),1),tn,nn,c("du "),_(d,{value:n.offre.dateDebut},null,8,["value"]),c(" au "),_(d,{value:n.offre.dateFin},null,8,["value"]),sn,rn,_(d,{value:n.offre.dateLimite},null,8,["value"]),an,on,c(" "+h(n.offre.structure.libelleCourt)+" ",1),ln,un,c(" "+h(n.offre.typeMission.libelle)+" ",1),dn,cn,c(" "+h(n.offre.nombreHeures)+" heure(s) ",1),mn,hn,c(" "+h(n.offre.nombrePostes)+" poste(s) ",1),fn]),i("p",{innerHTML:s.descriptionHtml},null,8,_n),vn,this.canValiderCandidature?(r(),a("div",pn,[bn,i("table",gn,[i("thead",null,[i("tr",null,[yn,xn,n.canValiderCandidature?(r(),a("th",Cn,"Action")):u("",!0)])]),i("tbody",null,[n.offre.candidatures.length==0?(r(),a("tr",Vn,[n.canValiderCandidature?(r(),a("td",kn,"Aucune candidature")):u("",!0),n.canValiderCandidature?u("",!0):(r(),a("td",Sn,"Aucune candidature"))])):u("",!0),(r(!0),a(g,null,y(n.offre.candidatures,f=>(r(),a("tr",null,[i("td",null,[i("a",{href:s.urlVoir(f)},h(f.intervenant.prenom+" "+f.intervenant.nomUsuel),9,Mn)]),i("td",null,[f.validation?(r(),a("span",Tn,[c("Acceptée le "),_(d,{value:f.validation.histoCreation},null,8,["value"]),c(" par "+h(f.validation.histoCreateur.displayName),1)])):u("",!0),!f.validation&&f.motif!==null?(r(),a("span",Dn,h(f.motif),1)):u("",!0),!f.validation&&f.motif===null?(r(),a("span",jn,"En attente d'acceptation")):u("",!0)]),this.canValiderCandidature?(r(),a("td",wn,[f.validation?u("",!0):(r(),a("a",{key:0,href:s.urlAccepterCandidature(f),class:"btn btn-success","data-content":"Êtes vous sûr de vouloir accepter cette candidature ?","data-title":"Accepter la candidature",title:"Accepter la candidature",onClick:t[0]||(t[0]=b((...C)=>s.validerCandidature&&s.validerCandidature(...C),["prevent"]))},"Accepter ",8,Un)),c("  "),!f.motif&&f.validation?(r(),a("a",{key:1,href:s.urlRefuserCandidature(f),class:"btn btn-danger","data-content":"Êtes vous sûr de vouloir refuser cette candidature ?","data-title":"Refuser la candidature",title:"Refuser la candidature",onClick:t[1]||(t[1]=b((...C)=>s.refuserCandidature&&s.refuserCandidature(...C),["prevent"]))},"Refuser ",8,An)):u("",!0)])):u("",!0)]))),256))])])])):u("",!0),i("div",Rn,[i("a",{href:l.offreEmploiUrl,class:"btn btn-secondary"},"Retour aux offres",8,En),c("  "),this.canPostuler?(r(),a("a",{key:0,href:l.postulerUrl,class:"btn btn-primary","data-bs-original-title":"Vous devez être connecté pour postuler","data-bs-placement":"top","data-bs-toggle":"tooltip"},"Postuler",8,Ln)):u("",!0),c("  "),n.offre.canModifier?(r(),a("a",{key:1,href:l.saisirUrl,class:"btn btn-primary",title:"Modifier",onClick:t[2]||(t[2]=b((...f)=>s.saisir&&s.saisir(...f),["prevent"]))},[_(o,{name:"pen-to-square"}),c(" Modifier ")],8,On)):u("",!0),c("  "),n.offre.validation&&n.offre.canValider?(r(),a("a",{key:2,href:l.devaliderUrl,class:"btn btn-danger",title:"Devalider",onClick:t[3]||(t[3]=b((...f)=>s.devalider&&s.devalider(...f),["prevent"]))},[_(o,{name:"thumbs-down"}),c(" Devalider ")],8,qn)):u("",!0),c("  "),!n.offre.validation&&n.offre.canValider?(r(),a("a",{key:3,href:l.validerUrl,class:"btn btn-success",title:"Valider",onClick:t[4]||(t[4]=b((...f)=>s.valider&&s.valider(...f),["prevent"]))},[_(o,{name:"thumbs-up"}),c(" Valider ")],8,Hn)):u("",!0),c("  "),n.offre.canSupprimer?(r(),a("a",{key:4,href:l.supprimerUrl,class:"btn btn-danger","data-content":"Êtes-vous sur de vouloir supprimer l'offre ?","data-title":"Suppression de l'offre",title:"Supprimer",onClick:t[5]||(t[5]=b((...f)=>s.supprimer&&s.supprimer(...f),["prevent"]))},[_(o,{name:"trash"}),c(" Supprimer ")],8,Pn)):u("",!0)])])):u("",!0)],64)}const P=x(yi,[["render",Fn]]),Bn=Object.freeze(Object.defineProperty({__proto__:null,default:P},Symbol.toStringTag,{value:"Module"})),$n={components:{offreEmploi:P},props:{id:{type:Number,required:!1},utilisateur:{required:!1},canModifier:{type:Boolean,required:!1},canPostuler:{type:Boolean,required:!1},canValider:{type:Boolean,required:!1},canVoirCandidature:{type:Boolean,required:!1},canValiderCandidature:{type:Boolean,required:!1},canSupprimer:{type:Boolean,required:!1}},data(){return{offres:[],ajoutUrl:unicaenVue.url("offre-emploi/saisir")}},mounted(){this.reload()},computed:{extended:function(){return!!this.id}},methods:{ajout(e){modAjax(e.target,t=>{this.reload()})},supprimer(){window.location.href=unicaenVue.url("offre-emploi")},refresh(e){let t=Util.json.indexById(this.offres,e.id);this.offres[t]=e},reload(){this.id?unicaenVue.axios.get(unicaenVue.url("offre-emploi/get/:offreEmploi",{offreEmploi:this.id})).then(e=>{this.offres=[e.data]}):unicaenVue.axios.get(unicaenVue.url("offre-emploi/liste")).then(e=>{this.offres=e.data})}}},In={key:0,class:"row row-cols-1 row-cols-md-2 g-4 mb-3"},Nn={key:1},zn=["href"],Yn={key:2};function Jn(e,t,n,m,l,s){const d=S("offreEmploi");return r(),a(g,null,[s.extended?u("",!0):(r(),a("div",In,[(r(!0),a(g,null,y(l.offres,o=>(r(),k(d,{key:o.id,canModifier:this.canModifier,canSupprimer:this.canSupprimer,canValider:this.canValider,canVoirCandidature:this.canVoirCandidature,offre:o,onRefresh:s.refresh,onSupprimer:s.supprimer},null,8,["canModifier","canSupprimer","canValider","canVoirCandidature","offre","onRefresh","onSupprimer"]))),128))])),s.extended?u("",!0):(r(),a("div",Nn,[this.canModifier?(r(),a("a",{key:0,href:l.ajoutUrl,class:"btn btn-primary",onClick:t[0]||(t[0]=b((...o)=>s.ajout&&s.ajout(...o),["prevent"]))},"Ajouter une nouvelle offre",8,zn)):u("",!0)])),s.extended?(r(),a("div",Yn,[(r(!0),a(g,null,y(l.offres,o=>(r(),k(d,{key:o.id,canModifier:this.canModifier,canPostuler:this.canPostuler,canSupprimer:this.canSupprimer,canValider:this.canValider,canValiderCandidature:this.canValiderCandidature,canVoirCandidature:this.canVoirCandidature,extended:s.extended,offre:o,utilisateur:this.utilisateur,onRefresh:s.refresh,onSupprimer:s.supprimer},null,8,["canModifier","canPostuler","canSupprimer","canValider","canValiderCandidature","canVoirCandidature","extended","offre","utilisateur","onRefresh","onSupprimer"]))),128))])):u("",!0)],64)}const Qn=x($n,[["render",Jn]]),Xn=Object.freeze(Object.defineProperty({__proto__:null,default:Qn},Symbol.toStringTag,{value:"Module"}));const Wn={name:"UCalendar",props:{date:{type:Date,required:!0},events:{type:Array,required:!0},canAddEvent:{type:Boolean,required:!0,default:!0},addDateDebut:{type:String,required:!1},addDateFin:{type:String,required:!1}},data(){const e=new Date(this.date);return{mois:e.getMonth()+1,annee:e.getFullYear()}},computed:{listeJours(){const e=new Date(this.date);e.setDate(1),e.setMonth(e.getMonth()+1),e.setDate(e.getDate()-1);let t=e.getDate();return Array.from({length:t},(n,m)=>m+1)}},watch:{date:function(e,t){const n=new Date(this.date);this.mois=n.getMonth()+1,this.annee=n.getFullYear()},mois:function(e,t){const n=new Date(this.date);n.setMonth(e-1),this.$emit("changeDate",n)},annee:function(e,t){const n=new Date(this.date);n.setFullYear(e),this.$emit("changeDate",n)}},methods:{nomJour(e){const t=new Date(this.date);return t.setDate(e),t.toLocaleString("fr-FR",{weekday:"short"})},listeMois(){let e=[];const t=new Date;for(let n=1;n<=12;n++){t.setMonth(n-1);let m=t.toLocaleString("fr-FR",{month:"long"});e.push({id:n,libelle:m})}return e},listeAnnees(){const t=new Date().getFullYear(),n=1;let m=[];for(let l=t-n;l<=t+n;l++)m.push(l);return m},canAdd(e){if(!this.canAddEvent)return!1;let t=this.addDateDebut;t===void 0?t=new Date("2000-01-01"):t==="now"?t=new Date:t=new Date(t);let n=this.addDateFin;n===void 0?n=new Date("2500-01-01"):n==="now"?n=new Date:n=new Date(n);let m=new Date(this.date);return m.setDate(e),t=this.isoDateOnly(t),n=this.isoDateOnly(n),m=this.isoDateOnly(m),!(m<t||m>n)},addEvent(e){const t=new Date(this.date);t.setDate(e.currentTarget.dataset.jour),this.$emit("addEvent",t,e)},prevMois(){const e=new Date(this.date);e.setMonth(e.getMonth()-1),this.$emit("changeDate",e)},nextMois(){const e=new Date(this.date);e.setMonth(e.getMonth()+1),this.$emit("changeDate",e)},eventsByJour(e){const t=new Date(this.date);let n={};for(let m in this.events){let l=this.events[m];l.date.getFullYear()===t.getFullYear()&&l.date.getMonth()+1===t.getMonth()+1&&l.date.getDate()===e&&(n[m]=l)}return n},isoDateOnly(e){const t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),m=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${m}`}}},Gn={class:"calendar"},Zn={class:"recherche"},Kn={class:"recherche btn-group"},es=["value"],ts=["value"],is={class:"table table-bordered table-hover table-sm"},ss=["data-jour"],rs={class:"nom-jour"},as={class:"numero-jour"},os={class:"num-jour badge bg-secondary rounded-circle"},ls={key:0},us=["data-jour"];function ds(e,t,n,m,l,s){const d=M;return r(),a("div",Gn,[i("div",Zn,[i("div",Kn,[i("button",{class:"btn btn-light",id:"prevMois",onClick:t[0]||(t[0]=(...o)=>s.prevMois&&s.prevMois(...o)),title:"Mois précédant"},[_(d,{name:"chevron-left"})]),D(i("select",{class:"form-select btn btn-light",id:"otherMois","onUpdate:modelValue":t[1]||(t[1]=o=>l.mois=o)},[(r(!0),a(g,null,y(s.listeMois(),o=>(r(),a("option",{value:o.id},h(o.libelle),9,es))),256))],512),[[q,l.mois]]),D(i("select",{class:"form-select btn btn-light",id:"otherAnnee","onUpdate:modelValue":t[2]||(t[2]=o=>l.annee=o)},[(r(!0),a(g,null,y(s.listeAnnees(),o=>(r(),a("option",{value:o},h(o),9,ts))),256))],512),[[q,l.annee]]),i("button",{class:"btn btn-light",id:"nextMois",onClick:t[3]||(t[3]=(...o)=>s.nextMois&&s.nextMois(...o)),title:"Mois suivant"},[_(d,{name:"chevron-right"})])])]),i("table",is,[(r(!0),a(g,null,y(s.listeJours,o=>(r(),a("tr",{"data-jour":o},[i("th",rs,h(s.nomJour(o)),1),i("th",as,[i("div",os,h(o<10?"0"+o.toString():o),1)]),i("td",null,[(r(!0),a(g,null,y(s.eventsByJour(o),(f,C)=>(r(),a("div",{class:"event",style:Y("border-color:"+f.color+";background-color:"+f.bgcolor),key:C},[(r(),k(J(f.component),{event:f},null,8,["event"]))],4))),128)),s.canAdd(o)?(r(),a("div",ls,[i("button",{onClick:t[4]||(t[4]=(...f)=>s.addEvent&&s.addEvent(...f)),"data-jour":o,class:"btn btn-light btn-sm"},[_(d,{name:"plus"}),c(" Nouvel événement ")],8,us)])):u("",!0)])],8,ss))),256))])])}const cs=x(Wn,[["render",ds],["__scopeId","data-v-51bbc42d"]]);const ms={name:"SuiviEvent",props:{event:{type:Object,required:!0}},data(){return{suivi:this.$parent.$parent,modifierUrl:unicaenVue.url("mission/suivi/modifier/:id",{id:this.event.id}),supprimerUrl:unicaenVue.url("mission/suivi/supprimer/:id",{id:this.event.id}),validerUrl:unicaenVue.url("mission/suivi/valider/:id",{id:this.event.id}),devaliderUrl:unicaenVue.url("mission/suivi/devalider/:id",{id:this.event.id})}},computed:{heureDebut(){return this.event.heureDebut.toString().replace(":","h")},heureFin(){return this.event.heureFin.toString().replace(":","h")},heures(){return Util.floatToString(this.event.heures)}},methods:{modifier(e){modAjax(e.currentTarget,t=>{this.suivi.refresh()})},supprimer(e){popConfirm(e.currentTarget,t=>{this.suivi.refresh()})},valider(e){unicaenVue.axios.get(this.validerUrl).then(t=>{this.suivi.refresh()})},devalider(e){popConfirm(e.currentTarget,t=>{this.suivi.refresh()})}}},hs={class:"event-content"},fs={class:"mission"},_s={key:0,class:"badge bg-success"},vs={class:"horaires"},ps={key:0,class:"badge bg-secondary"},bs={key:0,class:"description"},gs={class:"event-actions"},ys={class:"btn-group btn-group-sm"},xs=["data-url"],Cs=["data-url"],Vs=["data-url"],ks=["data-url"];function Ss(e,t,n,m,l,s){const d=M;return r(),a(g,null,[i("div",hs,[i("p",fs,[c(h(n.event.mission.libelleCourt)+" ",1),n.event.valide?(r(),a("span",_s,"Validé")):u("",!0)]),i("p",vs,[c(" de "+h(s.heureDebut)+" à "+h(s.heureFin)+", soit "+h(s.heures)+" heure"+h(s.heures<2?"":"s")+" ",1),n.event.formation?(r(),a("span",ps,"En formation")):u("",!0)]),n.event.description?(r(),a("p",bs,h(n.event.description),1)):u("",!0)]),i("div",gs,[i("div",ys,[n.event.canEdit?(r(),a("button",{key:0,class:"btn btn-light",onClick:t[0]||(t[0]=(...o)=>s.modifier&&s.modifier(...o)),title:"Modifier le suivi","data-url":l.modifierUrl},[_(d,{name:"pen-to-square"})],8,xs)):u("",!0),n.event.canValider?(r(),a("button",{key:1,class:"btn btn-light",onClick:t[1]||(t[1]=(...o)=>s.valider&&s.valider(...o)),title:"Valider le suivi","data-url":l.validerUrl},[_(d,{name:"check",class:"text-success"})],8,Cs)):u("",!0),n.event.canDevalider?(r(),a("button",{key:2,class:"btn btn-light",onClick:t[2]||(t[2]=(...o)=>s.devalider&&s.devalider(...o)),title:"Dévalider le suivi","data-url":l.devaliderUrl,"data-content":"Voulez-vous vraiment dévalider ce suivi ?"},[_(d,{name:"xmark",class:"text-danger"})],8,Vs)):u("",!0),n.event.canSupprimer?(r(),a("button",{key:3,class:"btn btn-light",onClick:t[3]||(t[3]=(...o)=>s.supprimer&&s.supprimer(...o)),title:"Supprimer le suivi","data-url":l.supprimerUrl,"data-content":"Voulez-vous vraiment supprimer ce suivi ?"},[_(d,{name:"trash-can",class:"text-danger"})],8,ks)):u("",!0)])])],64)}const F=x(ms,[["render",Ss],["__scopeId","data-v-17cb1f29"]]),Ms=Object.freeze(Object.defineProperty({__proto__:null,default:F},Symbol.toStringTag,{value:"Module"})),Ts={name:"Suivi",props:{intervenant:{type:Number,required:!0},canAddMission:{type:Boolean,required:!0}},mounted(){this.refresh()},data(){return{date:new Date,isMounted:!1,suivi:[]}},methods:{changeDate(e){this.date=e},ajouter(e,t){const n={intervenant:this.intervenant,date:e.toISOString().slice(0,10)};t.currentTarget.dataset.url=unicaenVue.url("mission/suivi/ajout/:intervenant/:date",n),modAjax(t.currentTarget,m=>{this.refresh()})},refresh(){const e=["#e74c3c","#8e44ad","#3498db","#1abc9c","#2ecc71","#f1c40f","#e67e22","#d35400"];let t=0,n=[];unicaenVue.axios.get(unicaenVue.url("mission/suivi/liste/:intervenant",{intervenant:this.intervenant})).then(m=>{let l=[];for(let s in m.data){let d=m.data[s];n[d.mission.id]===void 0&&(n[d.mission.id]=e[t],t++),d.valide&&(d.bgcolor="#d0eddb"),d.color=n[d.mission.id],d.component=Q(F),d.date=new Date(d.date),d.intervenant=this.intervenant,l.push(d)}this.suivi=l,this.refreshPlafonds()})},refreshPlafonds(){this.isMounted?$(".plafonds").refresh():this.isMounted=!0}}};function Ds(e,t,n,m,l,s){const d=cs;return r(),k(d,{date:l.date,onChangeDate:s.changeDate,onAddEvent:s.ajouter,"can-add-event":n.canAddMission,addDateFin:"now",events:l.suivi},null,8,["date","onChangeDate","onAddEvent","can-add-event","events"])}const js=x(Ts,[["render",Ds]]),ws=Object.freeze(Object.defineProperty({__proto__:null,default:js},Symbol.toStringTag,{value:"Module"})),Us={name:"Taux",props:{taux:{required:!0},listeTaux:{required:!0}},data(){return{saisieUrl:unicaenVue.url("taux/saisir/:tauxRemu",{tauxRemu:this.taux.id}),supprimerUrl:unicaenVue.url("taux/supprimer/:tauxRemu",{tauxRemu:this.taux.id}),ajoutValeurUrl:unicaenVue.url("taux/saisir-valeur/:tauxRemu",{tauxRemu:this.taux.id})}},methods:{saisie(e){modAjax(e.target,t=>{this.$emit("refreshListe")})},ajoutValeur(e){modAjax(e.target,t=>{this.$emit("refreshListe")})},saisieValeur(e){e.currentTarget.href=unicaenVue.url("taux/saisir-valeur/:tauxRemu/:tauxRemuValeur",{tauxRemu:this.taux.id,tauxRemuValeur:e.currentTarget.dataset.id}),modAjax(e.currentTarget,t=>{this.$emit("refreshListe")})},refreshListe(e){this.$emit("refreshListe")},supprimer(e){popConfirm(e.target,t=>{this.$emit("refreshListe")})},supprimerValeur(e){e.currentTarget.href=unicaenVue.url("taux/supprimer-valeur/:tauxRemuValeur",{tauxRemuValeur:e.currentTarget.dataset.id}),popConfirm(e.currentTarget,t=>{this.$emit("refreshListe")})},refresh(e){unicaenVue.axios.get(unicaenVue.url("taux/get/:tauxRemu",{tauxRemu:e.id})).then(t=>{this.$emit("refresh",t.data)})}}},As={class:"card-header"},Rs={style:{display:"inline"}},Es={class:"float-end"},Ls=["href"],Os=["href"],qs={class:"card-body"},Hs={key:0},Ps=i("br",null,null,-1),Fs={class:""},Bs={class:"row align-items-start"},$s={class:"col-md-6"},Is={class:"col"},Ns=["data-id"],zs=["data-id"],Ys=["href"],Js={key:1,class:"row"},Qs={class:"col-md-7"},Xs=i("br",null,null,-1),Ws={class:"row align-items-start"},Gs={class:"col-md-8"},Zs={class:"col-md-auto"},Ks=["data-id"],er=["data-id"],tr=["href"],ir={class:"col"},nr=i("br",null,null,-1),sr={key:0},rr={key:0};function ar(e,t,n,m,l,s){const d=M,o=S("u-heures"),f=w,C=S("taux",!0);return r(),a(g,null,[i("div",{class:j(["card",{"ms-5":n.taux.tauxRemu}])},[i("div",As,[i("h3",Rs,h(n.taux.libelle)+" ("+h(n.taux.code)+")",1),i("div",Es,[n.taux.canEdit?(r(),a("a",{key:0,href:l.saisieUrl,class:"btn btn-primary",onClick:t[0]||(t[0]=b((...p)=>s.saisie&&s.saisie(...p),["prevent"]))},[_(d,{name:"pen-to-square"}),c(" Modifier")],8,Ls)):u("",!0),c("   "),n.taux.canDelete?(r(),a("a",{key:1,href:l.supprimerUrl,class:"btn btn-danger",onClick:t[1]||(t[1]=b((...p)=>s.supprimer&&s.supprimer(...p),["prevent"]))},[_(d,{name:"trash-can"}),c(" Supprimer")],8,Os)):u("",!0)])]),i("div",qs,[n.taux.tauxRemu?u("",!0):(r(),a("div",Hs,[c(" Modification :"),Ps,i("ul",null,[(r(!0),a(g,null,y(n.taux.tauxRemuValeurs,p=>(r(),a("div",{key:p.id},[i("li",Fs,[i("div",Bs,[i("div",$s,[_(o,{valeur:p.valeur},null,8,["valeur"]),c("€/h à partir du "),_(f,{value:p.dateEffet},null,8,["value"])]),i("div",Is,[n.taux.canEdit?(r(),a("a",{key:0,class:"text-primary",onClick:t[2]||(t[2]=b((...v)=>s.saisieValeur&&s.saisieValeur(...v),["prevent"])),"data-id":p.id},[_(d,{name:"pen-to-square"})],8,Ns)):u("",!0),c("   "),n.taux.canEdit?(r(),a("a",{key:1,class:"text-primary",onClick:t[3]||(t[3]=b((...v)=>s.supprimerValeur&&s.supprimerValeur(...v),["prevent"])),"data-id":p.id},[_(d,{name:"trash-can"})],8,zs)):u("",!0)])])])]))),128))]),n.taux.canEdit?(r(),a("a",{key:0,href:l.ajoutValeurUrl,class:"btn btn-primary btn-sm",onClick:t[4]||(t[4]=b((...p)=>s.ajoutValeur&&s.ajoutValeur(...p),["prevent"]))},[_(d,{name:"plus"}),c(" Ajouter une valeur ")],8,Ys)):u("",!0)])),n.taux.tauxRemu?(r(),a("div",Js,[i("div",Qs,[c(" Modification :"),Xs,i("ul",null,[(r(!0),a(g,null,y(n.taux.tauxRemuValeurs,p=>(r(),a("div",null,[i("li",null,[i("div",Ws,[i("div",Gs,[c(" Coéfficient de "),_(o,{valeur:p.valeur},null,8,["valeur"]),c(" à partir du "),_(f,{value:p.dateEffet},null,8,["value"])]),i("div",Zs,[n.taux.canEdit?(r(),a("a",{key:0,class:"text-primary",onClick:t[5]||(t[5]=b((...v)=>s.saisieValeur&&s.saisieValeur(...v),["prevent"])),"data-id":p.id},[_(d,{name:"pen-to-square"})],8,Ks)):u("",!0),c("   "),n.taux.canEdit?(r(),a("a",{key:1,class:"text-primary",onClick:t[6]||(t[6]=b((...v)=>s.supprimerValeur&&s.supprimerValeur(...v),["prevent"])),"data-id":p.id},[_(d,{name:"trash-can"})],8,er)):u("",!0)])])])]))),256))]),n.taux.canEdit?(r(),a("a",{key:0,href:l.ajoutValeurUrl,class:"btn btn-primary btn-sm",onClick:t[7]||(t[7]=b((...p)=>s.ajoutValeur&&s.ajoutValeur(...p),["prevent"]))},[_(d,{name:"plus"})],8,tr)):u("",!0)]),i("div",ir,[c(" Valeurs calculées (indexées sur le taux "+h(n.taux.tauxRemu.libelle)+") : ",1),i("ul",null,[(r(!0),a(g,null,y(n.taux.tauxRemuValeursIndex,p=>(r(),a("div",null,[i("li",null,[_(o,{valeur:p.valeur},null,8,["valeur"]),c("€/h à partir du "),_(f,{value:p.date},null,8,["value"])])]))),256))]),nr])])):u("",!0)])],2),n.taux.tauxRemu?u("",!0):(r(),a("div",sr,[(r(!0),a(g,null,y(n.listeTaux,p=>(r(),a("div",{key:p},[p.tauxRemu&&p.tauxRemu.id===n.taux.id?(r(),a("div",rr,[(r(),k(C,{onSupprimer:s.supprimer,onRefreshListe:s.refreshListe,key:n.taux.id,taux:p,listeTaux:n.listeTaux},null,8,["onSupprimer","onRefreshListe","taux","listeTaux"]))])):u("",!0)]))),128))]))],64)}const B=x(Us,[["render",ar]]),or=Object.freeze(Object.defineProperty({__proto__:null,default:B},Symbol.toStringTag,{value:"Module"})),lr={components:{taux:B},props:{canEditTaux:{type:Boolean,required:!0}},data(){return{listeTaux:[],ajoutUrl:unicaenVue.url("taux/saisir")}},mounted(){this.reload()},methods:{ajout(e){modAjax(e.currentTarget,t=>{this.reload()})},supprimer(){this.reload()},refreshListe(){this.reload()},refresh(e){let t=Util.json.indexById(this.listeTaux,e.id);this.listeTaux[t]=e},reload(){unicaenVue.axios.get(unicaenVue.url("taux/liste-taux")).then(e=>{this.listeTaux=e.data})}}},ur=["href"];function dr(e,t,n,m,l,s){const d=S("taux");return r(),a(g,null,[(r(!0),a(g,null,y(l.listeTaux,o=>(r(),a("div",null,[o.tauxRemu?u("",!0):(r(),k(d,{onSupprimer:s.supprimer,onRefreshListe:s.refreshListe,key:o.id,taux:o,listeTaux:l.listeTaux},null,8,["onSupprimer","onRefreshListe","taux","listeTaux"]))]))),256)),n.canEditTaux?(r(),a("a",{key:0,class:"btn btn-primary",href:l.ajoutUrl,onClick:t[0]||(t[0]=b((...o)=>s.ajout&&s.ajout(...o),["prevent"]))},"Ajout d'un nouveau taux",8,ur)):u("",!0)],64)}const cr=x(lr,[["render",dr]]),mr=Object.freeze(Object.defineProperty({__proto__:null,default:cr},Symbol.toStringTag,{value:"Module"})),hr={UHeures:"Application/UI/UHeures",Utilisateur:"Application/Utilisateur"};function fr(e){for(let t in e)for(let n in e[t])I(e[t][n],t)}function _r(){let e=document.getElementById("unicaen-vue-toast-container");return e||(e=document.createElement("div"),e.id="unicaen-vue-toast-container",e.classList.add("toast-container","position-fixed","top-0","end-0","p-3"),document.body.appendChild(e)),e}function vr(e){return e=pr(e),e=br(e),e}function pr(e){const t=document.createElement("div");t.innerHTML=e;const n=t.querySelector(".alert");return n?n.innerHTML:t.innerHTML}function br(e){const t=document.createElement("div");return t.innerHTML=e,t.querySelectorAll("i.fas").forEach(m=>m.style.display="none"),t.innerHTML}function I(e,t){const n={info:"bg-info",success:"bg-success",warning:"bg-warning",error:"bg-danger"},m={info:"info-circle",success:"check-circle",warning:"exclamation-circle",error:"exclamation-triangle"},l=document.createElement("button");l.classList.add("btn-close","btn-close-white","h5"),l.style.float="right",l.setAttribute("data-bs-dismiss","toast"),l.setAttribute("aria-label","Close");const s=document.createElement("i");s.classList.add("icon","fas",`fa-${m[t]}`),s.style.float="left",s.style.fontSize="26pt",s.style.paddingLeft=".4rem",s.style.marginTop=".4rem",s.style.paddingRight="1rem";const d=document.createElement("div");d.classList.add("toast-body"),d.innerHTML=vr(e);const o=document.createElement("div");o.appendChild(l),o.appendChild(s),o.appendChild(d);const f=document.createElement("div");f.classList.add("toast","text-white",n[t]?n[t]:"bg-secondary"),f.setAttribute("role","alert"),f.setAttribute("aria-live","assertive"),f.setAttribute("aria-atomic","true"),t==="error"&&e.length>500&&f.setAttribute("style","width:700px"),f.appendChild(o),_r().appendChild(f);const C={animation:!0,delay:t==="warning"?15e3:5e3,autohide:t!=="error"};new bootstrap.Toast(f,C).show()}const R={toast:I,toasts:fr};let U={...X};U.interceptors.request.use(e=>{if(e.submitter){let t=e.msg?e.msg:"Action en cours";e.popover!=null&&e.popover.dispose(),e.popover=new bootstrap.Popover(e.submitter,{content:`<div class="spinner-border text-primary" role="status">
-  <span class="visually-hidden">Loading...</span>
-</div> `+t,html:!0,trigger:"focus"}),e.popover.show()}return e});U.interceptors.response.use(e=>{if(e.messages=e.data.messages,e.data=e.data.data,e.hasErrors=!!(e.messages&&e.messages.error&&e.messages.error.length>0),e.config.popover){var t=e.config.popover;let n="";for(ns in e.messages)for(mid in e.messages[ns])n+='<div class="alert fade show alert-'+(ns=="error"?"danger":ns)+'" role="alert">'+e.messages[ns][mid]+"</div>";n?(t._config.content=n,t.setContent(),setTimeout(()=>{t.dispose()},5e3)):t.dispose()}return e.messages&&R.toasts(e.messages),e},e=>{let t=e.response.data;e.response.status==403?t="<h4>403 - Accès interdit</h4><br />Vous n'êtes pas autorisé(e) à faire cette action.":t=e.response.data,R.toast(t,"error")});U.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";const gr={uvAxios:U},E={axios:gr.uvAxios,flashMessenger:R,url:(e,t,n)=>{let m=window.__unicaenVueBaseUrl;if(t)for(let s in t)e=e.replace(`:${s}`,t[s]);let l=n?E.encodeUrlQueryParam(n):null;return m+e+(l?`?${l}`:"")},encodeUrlQueryParam:(e,t)=>{var n=[];for(var m in e)if(e.hasOwnProperty(m)){var l=e[m],s=t?t+"["+encodeURIComponent(m)+"]":encodeURIComponent(m);if(typeof l=="object"&&l!==null)n.push(E.encodeUrlQueryParam(l,s));else{var d=encodeURIComponent(l);n.push(s+"="+d)}}return n.join("&")}};window.unicaenVue=E;function yr(e,t){const n={};t===void 0&&(t={});for(const m in e){let s=m.slice(2,-4).replace("/","");n[s]=e[m].default}for(const m of document.getElementsByClassName("vue-app")){let l=W({template:m.innerHTML,components:n});if(t.beforeMount!==void 0&&t.beforeMount(l),t.autoloads!==void 0)for(const s in t.autoloads){let d=t.autoloads[s].replace("/","");l.component(s,n[d])}l.mount(m),t.afterMount!==void 0&&t.afterMount(l)}}const xr={init:yr},Cr=Object.assign({"./Application/UI/UHeures.vue":te,"./Application/Utilisateur.vue":ae,"./Intervenant/Recherche.vue":De,"./Mission/Liste.vue":Wt,"./Mission/ListeCandidatures.vue":gi,"./Mission/ListeOffreEmploi.vue":Xn,"./Mission/Mission.vue":zt,"./Mission/OffreEmploi.vue":Bn,"./Mission/Suivi.vue":ws,"./Mission/SuiviEvent.vue":Ms,"./Paiement/ListeTaux.vue":mr,"./Paiement/Taux.vue":or}),Vr={autoloads:hr};xr.init(Cr,Vr);
diff --git a/public/dist/manifest.json b/public/dist/manifest.json
index 7f72ad183f2babce7acbd5932343a676a003d240..621016f37f4f82cd57ef891e5446b9c36828cd06 100644
--- a/public/dist/manifest.json
+++ b/public/dist/manifest.json
@@ -10,7 +10,7 @@
     "css": [
       "assets/main-4e3d9e0c.css"
     ],
-    "file": "assets/main-ea1c4ffa.js",
+    "file": "assets/main-8664fb7c.js",
     "imports": [
       "_vendor-aed55673.js"
     ],