diff --git a/.gitignore b/.gitignore index 595dddb417b292d9d1e50516bb6003363c4aeead..597e88900a806393cd3464c47f12de5903d29173 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ config.local.php config/autoload/*.local.php vendor/* +node_modules/* cache/* .idea deploy.log diff --git a/CHANGELOG.md b/CHANGELOG.md index eb926f41e66a8d8534a7b87cf3b3c1b12fac434d..621f99f08e44c8636f9a9b2c989353e44356e9e3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,38 +1,118 @@ # Version stable -[OSE 19.4](#ose-194-21102022) +[OSE 20.0](#ose-20--28022023-) -# OSE 20 (à venir) +# OSE 21 (à venir) + +## Nouveautés + +* Nouvelle notion de mission, permettant de gérer les contrats étudiants +* Taux HETD personnalisables + + +# OSE 20.1 (A venir) + +## Nouveautés + +* Ajout de la date de clôture dans la page historique de l'intervenant + +## Corrections de bugs + +* Correction d'une régression de la V20 sur le module Export Siham + +# OSE 20 (28/02/2023) ## Nouveautés * Les modèles de contrats de travail sont maintenant gérés comme n'importe quel autre état de sortie -* Reconduction de l'offre de formation pour les éléments de OSE porté par un élément synchroniser +* Reconduction de l'offre de formation pour les éléments de OSE portés par un élément synchronisé * Possibilité de rentrer un taux de charge par statut d'intervenant * Ajout d'un choix par statut pour "contrat de travail et avenants" pour laisser la possibilité à l'intervenant de télécharger sont contrat en pdf -* Ajout d'un choix par statut pour "Modifications de service dû" pour laisser la possibilité à l'intervenant de modifier son service dû * Migration technnique vers le framework Bootstrap 5 et modernisation de l'identité visuelle +* Réorganisation du menu "Administration" pour plus de lisibilité +* Filtrage des caractères interdits lors de l'export RH SIHAM (#47267) +* Associer des tags aux services afin de flécher certains financements (#42451) +* Envoyer un email via un indicateur à la fois sur l'email perso et l'email pro de l'intervenant (#48687) +* Nouveaux indicateurs 500 et 505 listant les permanents sans service ni référentiel ## Corrections de bugs * Sur la page "Services", la sélection d'un élément après selection d'une composante et d'une formation est désormais fonctionnel -* Correction des indicateur 910 et 920 qui étaient non fonctionnels dans le cas d'une autovalidation ou d'une absence de contrat +* Correction des indicateurs 910 et 920 qui étaient non fonctionnels dans le cas d'une autovalidation ou d'une absence de contrat * Correction de la suppression d'un role dans la page d'administration des roles. -* Correction mineure sur les notes intervenants au niveau de l'historique (#46303) +* Correction mineure sur les notes des intervenants au niveau de l'historique (#46303) * La durée de vie attendue des pièces justificatives est maintenant celle de l'année en cours et plus celle de l'année de dépôt de la pièce * Les annulations de mises en paiement sont désormais bien prises en compte dès la première annulation -* Il est désormais possible de cloturer le service réalisé même si aucune heure n'est saisie +* Il est désormais possible de clôturer le service réalisé même si aucune heure n'est saisie * Les indicateurs 530 et 540 ne renvoient plus de vacataires -* Les étapes d'ODF complémentaire peuvent de nouveau être modifiées (#46922) +* Dans les diagrammes du module Charges, la boite de dialogue s'affiche correctement, même avec beaucoup de types d'intervention +* Le plafond relatif aux charges / services saisis est maintenant opérationnel +* Lors de la saisie d'enseignement, les elements pedagogique sur lesquels il est impossible de saisir des heures seront surlignés en rouge +* Il est de nouveau possible de saisir des taux de charge TTC et des taux de charge patronale a virgule +* Modification du filtre des status séléctionnables dans les données personnelles (#48151) +* Lors de la demande de mise en paiement, pouvoir choisir un EOTP même si son centre de coût parent n'est pas de l'activité attendue (pilotage / enseignement) (#48286) +* Utilisation prioritaire de l'email personnel des données personnelles pour l'envoi d'email via les indicateurs (#48393) +* Meilleure gestion de la casse lors de la recherche d'un employeur (#48543) +* Ajout d'une contrainte d'unicité sur la colonne code de la table type_intervention (#48727) +* Correction formule d'UVSQ (#47149) +* Et beaucoup d'autres ... ## Notes de mise à jour * Supprimer la ligne faisant référence à TBL_NOEUD dans Administration/Synchronisation/Tables, table NOEUD, champ "Traitements postérieurs : à exécuter après la synchro". +* La génération des contrats de travail ayant été remaniée, veuillez vérifier que vous pouvez générer correctement de nouveaux contrats de travail + + +Avec l'ajout de la notion de tag sur les services d'enseignement et référentiel, les champs 'TAG' et 'TAG_ID' ont été ajouté dans la V_EXPORT_SERVICE, si vous avez créé votre propre V_EXPORT_SERVICE, il vous faudra la modifier vous même en vous appuyant sur la V_EXPORT_SERVICE par défaut de OSE (https://git.unicaen.fr/open-source/OSE/-/blob/master/data/ddl/view/V_EXPORT_SERVICE.sql) + +Ensuite si vous souhaitez faire apparaître les tags dans l'export des services, il vous faudra modifier vous même l'état de sortie 'Export des services', dans l'onglet 'Export CSV' : + +A la **ligne 56** ajouter TAG_ID à la variable $sid : + + $sid .= '_' . $d['TAG_ID']; + +A la **ligne 102** ajouter la colonne TAG dans le tableau $ds: + tag' => $d['TAG'], +A la **ligne 206** Ajouter le titre de colonne TAG dans le tableau $head : + + 'tag' => 'Tags', -# OSE 19.5 (à venir) +Le système de mise à jour peut - dans certaines circonstances - vous afficher quelques erreurs qui sont sans impact +sur le bon fonctionnement de l'application. +Je vais modifier les scripts de mise à jour pour éviter qu'elles ne se produisent. +Mais en attendant, si vous y êtes confrontés, vous en trouverez les explications sur le ticket suivant : +https://redmine.unicaen.fr/Etablissement/issues/49445?issue_count=42&issue_position=1&next_issue_id=48972 + + + +# OSE 19.7 (16/12/2022) + +## Corrections de bugs + +* Correction régression 19.5 : le workflow fonctionne à nouveau (#47982) +* Correction formule de calcul du Havre (#48024) + + + +# OSE 19.6 (14/12/2022) + +### Attention : il est déconseillé d'utiliser les 19.5 et 19.6, des régressions ont été constatées à plusieurs niveaux. + +## Corrections de bugs + +* Correction régression 19.5 : les indicateurs 910 et 920 fonctionnent de nouveau +* Correction régression 19.5 : les formules de calcul fonctionnent de nouveau +* Correction régression 19.5 : la page d'administration des statuts fonctionne de nouveau (#47976) +* Correction sur l'état de sortie préliquidation SIHAM (#47678) +* Prise dans compte des modulateurs pour la formule de Rennes 2 (#47753) + + +# OSE 19.5 (12/12/2022) + +### Attention : il est déconseillé d'utiliser les 19.5 et 19.6, des régressions ont été constatées à plusieurs niveaux. ## Corrections de bugs @@ -41,8 +121,20 @@ * Filtre des pays avec dates de validité périmées dans les listing des données personnelles (#47492) * Correction sur le script de mise à jour des employeurs * Correction sur les notes de l'intervenant au niveau de l'historique (#46303) - - +* Vue V_IMPORT_DEPUIS_DOSSIERS permettant de réinjecter les données personnelles dans les fiches corrigée (pb de filtre année) (#46769) +* Formule de calcul du Havre mise à jour +* Correction de bug dans la formule de Picardie +* Correction de bug de l'envoi du contrat par email lorsque la civilité est absente +* Correction du bouton "Prévu->Réalisé" absent pour le service réalisé +* Lors de la saisie de référentiel, le tri se fait correctement sur les fonction référentielles et sur les types de fonction +* Les caractères spéciaux sont bien pris en compte dans les types d'intervention (exemple : CM/TD) +* Le tableau des services d'enseignement n'affiche plus les colonnes inutiles +* Les étapes d'ODF complémentaire peuvent de nouveau être modifiées (#46922) +* Ajout du libelle du statut (champ STATUT_LIBELLE) pour affichage dans les états de paiement si nécessaire (#47762) +* Correction pour prise en compte des départements de naissance dans les DOM TOM dans la PEC Siham. +* Le workflow se calcule correctement lorsqu'il n'y a qu'un seul contrat par intervenant +* Correction sur la gestion des pièces jointes demandées uniquement dans le cadre de la formation continue +* Formule de calcul de ROUEN corrigée (#47876) # OSE 19.4 (21/10/2022) diff --git a/admin/actions/chargens-calcul-effectifs.php b/admin/actions/chargens-calcul-effectifs.php index b9f38e73f2ca37901245ad6a0b35c309df5680c5..cf30f4a30bf53b5dddd93fdbd68ac3698a809332 100644 --- a/admin/actions/chargens-calcul-effectifs.php +++ b/admin/actions/chargens-calcul-effectifs.php @@ -5,16 +5,22 @@ $bdd->setLogger($c); $sql = " SELECT + sne.id scenario_noeud_effectif_id, + sne.effectif effectif, sn.noeud_id, sn.scenario_id, sne.type_heures_id, - sne.etape_id + sne.etape_id, + n.annee_id FROM scenario_noeud_effectif sne JOIN scenario_noeud sn ON sn.id = sne.scenario_noeud_id JOIN noeud n ON n.id = sn.noeud_id WHERE n.etape_id IS NOT NULL + AND COALESCE(sne.effectif_calcule,-1) <> sne.effectif +ORDER BY + n.annee_id DESC "; @@ -25,14 +31,18 @@ $c->msg("Attention : ce traitement peut être long."); $snes = $bdd->select($sql); $count = count($snes); foreach ($snes as $index => $sne) { + $sneId = (int)$sne['SCENARIO_NOEUD_EFFECTIF_ID']; + $effectif = (float)$sne['EFFECTIF']; $noeud = (int)$sne['NOEUD_ID']; $scenario = (int)$sne['SCENARIO_ID']; $typeHeures = (int)$sne['TYPE_HEURES_ID']; $etape = (int)$sne['ETAPE_ID']; + $annee = ((int)$sne['ANNEE_ID']) . '/' . ((int)$sne['ANNEE_ID'] + 1); - $c->msg("Calcul de la formation $index / $count ...", true); + $c->msg("Calcul de la formation $index / $count (année $annee)...", true); $bdd->exec("BEGIN OSE_CHARGENS.CALC_SUB_EFFECTIF( $noeud, $scenario, $typeHeures, $etape ); END;"); + $bdd->getTable('SCENARIO_NOEUD_EFFECTIF')->update(['EFFECTIF_CALCULE' => $effectif], ['ID' => $sneId]); } $c->end("Fin du calcul"); \ No newline at end of file diff --git a/admin/actions/help.php b/admin/actions/help.php index bd6f4e9f4e609dadcc4cae2d27a634fa92edaacb..8c42d7664cb2a428b6e1a822f5af693811d806ea 100644 --- a/admin/actions/help.php +++ b/admin/actions/help.php @@ -35,13 +35,13 @@ $actionsDev = [ "update-ddl" => "Mise à jour du fichier de définition de la base de données à partir de cette dernière", "update-bdd-data" => "Mise à jour des données de la base de données", "update-bdd-privileges" => "Mise à jour des privilèges de la base de données", - "update-bdd-formules" => "Mise à jour de le liste des formules de calcul", + "update-bdd-formules" => "Mise à jour de la liste des formules de calcul", "test" => "Script de tests divers", "test-migration" => "Script de test de migration. Paramètres : [before|after nom_du_script_de_migration]", "build-tableaux-bord" => "Reconstruction des tableaux de bord", ]; -if ((getenv('APPLICATION_ENV') ?: 'dev') == 'dev') { +if ($oa->inDev()) { $actions = array_merge($actions, $actionsDev); } diff --git a/admin/actions/update-employeur.php b/admin/actions/update-employeur.php index 48c20cd9fb53c98a95bbe212b15bd0fcd190bc94..bc529d6d82eb22e56e0cb3a5905fc264b6f1d756 100644 --- a/admin/actions/update-employeur.php +++ b/admin/actions/update-employeur.php @@ -102,7 +102,7 @@ foreach ($listFiles as $file) { $nomCommercial = (!empty($data[5])) ? $data[5] : ''; $nomCommercial .= (!empty($data[6])) ? ' ' . $data[6] : ''; $nomCommercial .= (!empty($data[7])) ? ' ' . $data[7] : ''; - $nomCommercial = str_replace("'", "''", $nomCommercial); + $nomCommercial = str_replace("''", "'", $nomCommercial); //RAISON_SOCIALE $nomJuridique = $data[4]; //SIREN @@ -124,7 +124,7 @@ foreach ($listFiles as $file) { } elseif (!empty($nomPropre)) { $raisonSociale = $nomPropre; } - $raisonSociale = str_replace("'", "''", $raisonSociale); + $raisonSociale = str_replace("''", "'", $raisonSociale); //Si pas de raison sociale et pas de nom commercial on passe if (empty($raisonSociale) && empty($nomCommercial)) { continue; diff --git a/admin/migration/v20Contrats.php b/admin/migration/v20Contrats.php new file mode 100644 index 0000000000000000000000000000000000000000..014974e989cc14d1ea22e5d36305c7c21e93a10e --- /dev/null +++ b/admin/migration/v20Contrats.php @@ -0,0 +1,111 @@ +<?php + + + + + +class v20Contrats extends AbstractMigration +{ + + public function description(): string + { + return "Transformation des modèles de contrats en états de sortie"; + } + + + + public function utile(): bool + { + return $this->manager->hasOld('table', 'MODELE_CONTRAT'); + } + + + + public function after() + { + $c = $this->manager->getOseAdmin()->getConsole(); + $bdd = $this->manager->getBdd(); + + $c->begin("Convertion des contrats de travail en états de sortie"); + + $modeles = $bdd->select("SELECT * FROM modele_contrat"); + + $etatsSortie = []; + $statuts = []; + + $sts = $bdd->select('select distinct code from statut WHERE histo_destruction IS NULL'); + foreach ($sts as $st) { + $statuts[$st['CODE']] = null; + } + + foreach ($modeles as $modele) { + $id = (int)$modele['ID']; + $code = 'CONTRAT_' . $id; + $libelle = 'Contrat de travail - ' . $modele['LIBELLE']; + $statutId = $modele['STATUT_ID'] ? (int)$modele['STATUT_ID'] : null; + $fichier = $modele['FICHIER']; + $requete = $modele['REQUETE'] ?: 'SELECT * FROM v_contrat_main'; + + if ($statutId) { + $statutCode = $bdd->select("SELECT code FROM statut WHERE id = $statutId")[0]['CODE']; + $statuts[$statutCode] = $code; + } else { + $statutCode = null; + foreach ($statuts as $scode => $sc) { + if (empty($sc)) { + $statuts[$scode] = $code; + } + } + } + + $etatSortie = [ + 'CODE' => $code, + 'LIBELLE' => $libelle, + 'FICHIER' => $fichier, + 'REQUETE' => $requete, + 'PDF_TRAITEMENT' => '$mainData = reset($data); +$data = []; +$exemplaires = []; + +for ($i = 1; $i <= 3; $i++) { + $exemplaire = $mainData[\'exemplaire\' . $i] ?? \'0\'; + if ($exemplaire !== \'0\') { + $exemplaires[$i] = $exemplaire; + } + unset($mainData[\'exemplaire\' . $i]); +} + +foreach ($exemplaires as $exemplaire) { + $newExemplaire = $mainData; + $newExemplaire[\'exemplaire\'] = $exemplaire; + $data[] = $newExemplaire; +} + +return $data;', + 'CLE' => 'CONTRAT_ID', + 'BLOC1_NOM' => 'serviceCode', + 'BLOC1_ZONE' => 'table:table-row', + 'BLOC1_REQUETE' => 'SELECT * FROM V_CONTRAT_SERVICES', + ]; + + $etatsSortie[] = $etatSortie; + } + + $c->msg("Création des nouveaux états"); + foreach ($etatsSortie as $etatSortie) { + $bdd->getTable('ETAT_SORTIE')->insert($etatSortie); + foreach ($statuts as $scode => $setat) { + if ($setat === $etatSortie['CODE']) { + $statuts[$scode] = $etatSortie['ID']; + } + } + } + + $c->msg("Configuration des statuts"); + foreach ($statuts as $scode => $modeleId) { + $bdd->exec("UPDATE STATUT SET contrat_etat_sortie_id = $modeleId WHERE CODE = :code", ['code' => $scode]); + } + + $c->end("Convertion terminée"); + } +} \ No newline at end of file diff --git a/admin/migration/v20Divers.php b/admin/migration/v20Divers.php new file mode 100644 index 0000000000000000000000000000000000000000..ce15ca9a1754ede5c81c234c738a85a73d8d6d3d --- /dev/null +++ b/admin/migration/v20Divers.php @@ -0,0 +1,41 @@ +<?php + + + + + +class v20Divers extends AbstractMigration +{ + + public function description(): string + { + return "Transformation des modèles de contrats en états de sortie"; + } + + + + public function utile(): bool + { + return $this->manager->hasNew('table', 'TAG'); + } + + + + public function before() + { + $c = $this->manager->getOseAdmin()->getConsole(); + $bdd = $this->manager->getBdd(); + + $c->begin("Préparation de la migration vers la version 20"); + + $bdd->exec("ALTER TABLE TYPE_INTERVENTION DROP CONSTRAINT TYPE_INTERVENTION_CODE_UN"); + $bdd->exec("DROP INDEX TYPE_INTERVENTION_CODE_UN"); + + $oseAppliId = $this->manager->getOseAdmin()->getOseAppliId(); + $bdd->exec("UPDATE TYPE_INTERVENTION_STATUT SET HISTO_CREATEUR_ID = $oseAppliId WHERE HISTO_CREATEUR_ID IS NULL"); + $bdd->exec("UPDATE TYPE_INTERVENTION_STATUT SET HISTO_CREATION = SYSDATE WHERE HISTO_CREATION IS NULL"); + $bdd->exec("UPDATE TYPE_INTERVENTION_STATUT SET HISTO_MODIFICATION = SYSDATE WHERE HISTO_MODIFICATION IS NULL"); + + $c->end("Préparation terminée"); + } +} \ No newline at end of file diff --git a/admin/src/OseAdmin.php b/admin/src/OseAdmin.php index 6f029860a1a2bae1324bd0b59236b23b53285aae..446f51d96e30907b5295466eb02d0919e07f03a6 100644 --- a/admin/src/OseAdmin.php +++ b/admin/src/OseAdmin.php @@ -111,9 +111,6 @@ class OseAdmin public function getTags($minVersion = self::MIN_VERSION): array { - if (Dep::config('local')){ - return []; - } if (false === $this->tags) { $this->tags = []; @@ -157,9 +154,6 @@ class OseAdmin public function getBranches(): array { - if (Dep::config('local')){ - return []; - } if (false === $this->branches) { $this->branches = []; @@ -271,6 +265,20 @@ class OseAdmin + public function getEnv(): string + { + return getenv('APPLICATION_ENV') ?: 'dev'; + } + + + + public function inDev(): bool + { + return 'dev' == $this->getEnv(); + } + + + public function exec($args) { $this->console->passthru("php " . $this->getOseDir() . "/public/index.php " . $args); diff --git a/code/AideCss.php b/code/AideCss.php new file mode 100644 index 0000000000000000000000000000000000000000..a3be9fbf76d0268098f2080cc95ff52b6844cc72 --- /dev/null +++ b/code/AideCss.php @@ -0,0 +1,343 @@ +<?php + +/** + * @var $this \Application\View\Renderer\PhpRenderer + * @var $controller \Laminas\Mvc\Controller\AbstractController + * @var $container \Psr\Container\ContainerInterface + * @var $viewName string + * @var $viewFile string + */ + +?> + +<style> + h1:not(.title) { + margin-top: 2em; + } + + +</style> + + +<nav class="nav-local intervenant-statuts"> + <ul class=""> + <li class="nav-item historise" title="Cliquez pour afficher"> + <a class="nav-link" href="/intervenant/647908/voir"> + <span class="type-intervenant">Vacataire</span> + <span class="validite-intervenant">du 01/09/2017 au 30/05/2023</span><br/> + <span class="statut">Autres <i class="text-danger fas fa-triangle-exclamation" title="Intervenant historisé"></i></span> + </a> + </li> + <li class="nav-item active"> + <a class="nav-link" href="/intervenant/635955/voir"> + <span class="type-intervenant">Vacataire</span> + <span class="validite-intervenant">du 01/09/2017 au 16/10/2021</span><br/> + <span class="statut">Autres</span> + </a> + </li> + + <li class="nav-item ajout-intervenant"> + <a href="/intervenant/635955/dupliquer" title="Ajout d'un nouveau statut à l'intervenant"><i class="fas fa-plus"></i></a> + </li> + </ul> + <div style="clear: both"></div> +</nav> + + +<h1>Titre 1</h1> +<h2>Titre 2</h2> +<h3>Titre 3</h3> +<h4>Titre 4</h4> +<h5>Titre 5</h5> + +<p>Texte normal : Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pulvinar dolor justo, a convallis elit molestie in. Donec cursus faucibus quam + egestas egestas. + Aliquam vitae maximus quam. Aliquam neque massa, tincidunt vel velit ut, ornare molestie augue. Vestibulum cursus sed orci et posuere. Nulla suscipit + aliquet eros sed euismod. Fusce efficitur sodales laoreet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Maecenas + viverra condimentum ligula, at sollicitudin diam tempus a. Fusce lacinia est at massa elementum lacinia. Etiam rhoncus varius tortor, et porttitor dolor + aliquet ut. Phasellus dapibus diam sit amet commodo sollicitudin. Sed vehicula nulla id tellus aliquam, vel egestas felis fermentum. Duis sem dui, + condimentum eu magna sed, congue volutpat lectus. Donec suscipit tellus justo, vel tristique ex interdum id. </p> +<strong>Texte en gras</strong> + + +<h1>Buttons</h1> + +<h2>Taille normale</h2> + +<button class="btn btn-primary">btn btn-primary</button> + +<button class="btn btn-secondary">btn btn-secondary</button> + +<button class="btn btn-warning">btn btn-warning</button> + +<button class="btn btn-danger">btn btn-danger</button> + +<h2>Taille SM</h2> + +<button class="btn btn-sm btn-primary">btn btn-primary</button> + +<button class="btn btn-sm btn-secondary">btn btn-secondary</button> + +<button class="btn btn-sm btn-warning">btn btn-warning</button> + +<button class="btn btn-sm btn-danger">btn btn-danger</button> + +<h2>Taille XS</h2> + +<button class="btn btn-sm btn-primary">btn btn-primary</button> + +<button class="btn btn-sm btn-secondary">btn btn-secondary</button> + +<button class="btn btn-sm btn-warning">btn btn-warning</button> + +<button class="btn btn-sm btn-danger">btn btn-danger</button> + + +<h1>Alerts</h1> +<h2>Normales</h2> +<div class="alert alert-info"> + alert alert-info +</div> + +<div class="alert alert-success"> + alert alert-success +</div> + +<div class="alert alert-danger"> + alert alert-danger +</div> + +<div class="alert alert-warning"> + alert alert-warning +</div> + +<h2>Avec titres</h2> + +<div class="alert alert-info"> + <h4>Titre</h4> + alert alert-info +</div> + + +<h1>Wells</h1> + +<div class="well"> + <h2>Titre du well</h2> + contenu du well +</div> + + +<h1>Cards</h1> + +<div class="card bg-default"> + <div class="card-header"> + card-header default + </div> + <div class="card-body"> + card-body + </div> +</div> + +<div class="card bg-info"> + <div class="card-header"> + card-header info + </div> + <div class="card-body"> + card-body + </div> +</div> + +<div class="card bg-warning"> + <div class="card-header"> + card-header warning + </div> + <div class="card-body"> + card-body + </div> +</div> + +<div class="card bg-danger"> + <div class="card-header"> + card-header danger + </div> + <div class="card-body"> + card-body + </div> +</div> + + +<div class="contrat card bg-success" id="contrat-25014"> + <div class="card-header card-heading-h3"> + Contrat n°25014 - UFR HSS + </div> + + <div class="card-body"> + body + </div> + + <div class="card-footer"> + footer + </div> +</div> + + +<h1>Cartridge</h1> + +<div class="cartridge gray bordered"> + <span><a href="#">UFR HSS</a></span> + <span><a href="#">Master 2A Arts, Lettres et Civilisations</a></span> + <span><a href="#">2MPROD2A - Développement de l'entreprise de production</a></span> +</div> + + +<h1>Callout</h1> + +<div class="callout-menu"> + <div class="callout-container"> + <div class="callout" style="border-left-color: #FFA643"> + <span class="fas fa-tachometer"></span> + <h1><a href="#">Callout 1</a></h1> + <ul> + <li><a title="Sous-item 1" href="#">Sous-item 1</a></li> + <li><a title="Sous-item 2" href="#">Sous-item 2</a></li> + </ul> + </div> + </div> + <div class="callout-container"> + <div class="callout" style="border-left-color: #BBCF55"> + <span class="fas fa-table-list"></span> + <h1><a href="#">Callout 2</a></h1> + <ul> + <li><a title="Sous-item 1" href="#">Sous-item 1</a></li> + <li><a title="Sous-item 2" href="#">Sous-item 2</a></li> + <li><a title="Sous-item 3" href="#">Sous-item 3</a></li> + </ul> + </div> + </div> +</div> + + +<h1>Tableaux</h1> + +<h2>Taille standard</h2> + +<table class="table table-bordered"> + <thead> + <tr> + <th style="width:5%">Civilité</th> + <th style="width:15%">Nom</th> + <th style="width:15%">Prénom</th> + <th style="width:15%">Structure</th> + <th style="width:15%">Statut</th> + <th style="width:15%">Date de naissance</th> + <th style="width:10%">N° personnel</th> + </tr> + </thead> + <tbody class="table-hover"> + <tr> + <td>Madame</td> + <td>Test</td> + <td>Sabine</td> + <td>INSPE</td> + <td>Vacataire</td> + <td>06/10/1974</td> + <td></td> + </tr> + </tbody> +</table> + +<h2>Taille sm</h2> + +<table class="table table-bordered table-sm"> + <thead> + <tr> + <th style="width:5%">Civilité</th> + <th style="width:15%">Nom</th> + <th style="width:15%">Prénom</th> + <th style="width:15%">Structure</th> + <th style="width:15%">Statut</th> + <th style="width:15%">Date de naissance</th> + <th style="width:10%">N° personnel</th> + </tr> + </thead> + <tbody class="table-hover"> + <tr> + <td>Madame</td> + <td>Test</td> + <td>Sabine</td> + <td>INSPE</td> + <td>Vacataire</td> + <td>06/10/1974</td> + <td></td> + </tr> + </tbody> +</table> + +<h2>Taille xs</h2> + +<table class="table table-bordered table-xs"> + <thead> + <tr> + <th style="width:5%">Civilité</th> + <th style="width:15%">Nom</th> + <th style="width:15%">Prénom</th> + <th style="width:15%">Structure</th> + <th style="width:15%">Statut</th> + <th style="width:15%">Date de naissance</th> + <th style="width:10%">N° personnel</th> + </tr> + </thead> + <tbody class="table-hover"> + <tr> + <td>Madame</td> + <td>Test</td> + <td>Sabine</td> + <td>INSPE</td> + <td>Vacataire</td> + <td>06/10/1974</td> + <td></td> + </tr> + </tbody> +</table> + + +<h1>Fenêtre Modale</h1> + + +<div class="modal" tabindex="1" style="position:relative;display:block"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <h2 class="modal-title">Modal title</h2> + <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> + </div> + <div class="modal-body"> + <p>Modal body text goes here.</p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> + <button type="button" class="btn btn-primary">Save changes</button> + </div> + </div> + </div> +</div> + + +<h1>Formulaires</h1> + +<h2>form-select</h2> + +<select class="form-select"> + <option selected>Open this select menu</option> + <option value="1">One</option> + <option value="2">Two</option> + <option value="3">Three</option> +</select> + +<h2>bootstrap-select</h2> +<select class="selectpicker"> + <option selected>Open this select menu</option> + <option value="1">One</option> + <option value="2">Two</option> + <option value="3">Three</option> +</select> \ No newline at end of file diff --git a/code/DiagrammeBdd.php b/code/DiagrammeBdd.php index 79a5d634c7cb79240670da5dbdaff1df6da3f7f2..01526bd31fb5730d31fd20f7e8e6941ed2ef946d 100755 --- a/code/DiagrammeBdd.php +++ b/code/DiagrammeBdd.php @@ -93,7 +93,7 @@ foreach ($cls as $cl) { $(function () { - WidgetInitializer.includeJs(Url('vendor/go.js')); + WidgetInitializer.includeJs(Util.url('vendor/go.js')); var $ = go.GraphObject.make; diff --git a/code/GenerationTraitsInterfaces.php b/code/GenerationTraitsInterfaces.php index 5b9d10274b58f61807557b72b5eb17d3a13cedf9..327076248dbc80d2f1f140fd3fdaaad57e13450c 100755 --- a/code/GenerationTraitsInterfaces.php +++ b/code/GenerationTraitsInterfaces.php @@ -12,7 +12,7 @@ $introspection = \UnicaenCode\Util::introspection(); $traits = $introspection->getTraits(); -//$traits = [\Application\Form\OffreFormation\Traits\ElementPedagogiqueRechercheFieldsetAwareTrait::class]; +//$traits = [\OffreFormation\Form\Traits\ElementPedagogiqueRechercheFieldsetAwareTrait::class]; foreach ($traits as $trait) { $params = $introspection->getTraitParams($trait); if ($params['aware']) { diff --git a/code/test1.php b/code/test1.php index 494a5b65727f278e8c83889ceb4de7ac819155b5..d993b6d3d569213a6cd41c42be239a1132d90df0 100644 --- a/code/test1.php +++ b/code/test1.php @@ -7,26 +7,3 @@ * @var $viewName string * @var $viewFile string */ - -use UnicaenCode\Util; - -$file = getcwd() . '/cache/t.xlsx'; - -$fc = new \Application\Model\FormuleCalcul($file, 'TEST'); - - -$cell = 'AN20'; - -$formule = 'IF(AND([.$E20]="Oui";[.$I20]<>"Référentiel";[.$I20]<>"ETD";[.$G20]=1;OR([.$A20]="I2000";[.$A20]="I2300"));[.$N20]*[.$AE20];0)'; - - -$fc->testFormule($cell, $formule); - -//xmlDump($fc->getSheet()->getCell($cell)->getNode()); - - -//echo $fc->getSheet(1)->html(); -//Util::highlight($fc->makePackageBody(), 'plsql', true, ['show-line-numbers' => true]); - - - diff --git a/code/test2.php b/code/test2.php index 0ea8fc0eb704bb113ede3e643fd984d9d4883c64..fa6be6eb2df797ca4648ba2487afc37320ebf0be 100755 --- a/code/test2.php +++ b/code/test2.php @@ -9,14 +9,3 @@ use Unicaen\OpenDocument\Calc; * @var $viewName string * @var $viewFile string */ - -$file = getcwd() . '/cache/t.xlsx'; - -$fc = new \Application\Model\FormuleCalcul($file, 'TEST'); -$d = $fc->getFormuleCells(); - -echo '<table class="table table-bordered">'; -foreach ($d as $name => $cell) { - echo '<tr><th>' . $name . '</th><td>' . htmlentities($cell->getFormule() ?? $cell->getValue()) . '</td></tr>'; -} -echo '</table>'; diff --git a/code/test3.php b/code/test3.php index d993b6d3d569213a6cd41c42be239a1132d90df0..b6f18e845a19abfc14f2230e0fa6c18a8ecad1ae 100755 --- a/code/test3.php +++ b/code/test3.php @@ -7,3 +7,30 @@ * @var $viewName string * @var $viewFile string */ + +use Application\Entity\Db\Intervenant; +use Mission\Entity\Db\Mission; +use Service\Entity\Db\TypeVolumeHoraire; + +?> +<script> + + + var data = { + 0: {id: 15, heures: 15}, + 1: {id: 14, heures: 14}, + 2: {id: 120, heures: 120} + }; + + console.log(data[Util.json.indexById(data, 120)]); + + + var data2 = [ + {id: 15, heures: 15}, + {id: 14, heures: 14}, + {id: 120, heures: 120} + ]; + + console.log(data2[Util.json.indexById(data2, 120)]); + +</script> diff --git a/code/test4.php b/code/test4.php index a3be9fbf76d0268098f2080cc95ff52b6844cc72..d993b6d3d569213a6cd41c42be239a1132d90df0 100755 --- a/code/test4.php +++ b/code/test4.php @@ -7,337 +7,3 @@ * @var $viewName string * @var $viewFile string */ - -?> - -<style> - h1:not(.title) { - margin-top: 2em; - } - - -</style> - - -<nav class="nav-local intervenant-statuts"> - <ul class=""> - <li class="nav-item historise" title="Cliquez pour afficher"> - <a class="nav-link" href="/intervenant/647908/voir"> - <span class="type-intervenant">Vacataire</span> - <span class="validite-intervenant">du 01/09/2017 au 30/05/2023</span><br/> - <span class="statut">Autres <i class="text-danger fas fa-triangle-exclamation" title="Intervenant historisé"></i></span> - </a> - </li> - <li class="nav-item active"> - <a class="nav-link" href="/intervenant/635955/voir"> - <span class="type-intervenant">Vacataire</span> - <span class="validite-intervenant">du 01/09/2017 au 16/10/2021</span><br/> - <span class="statut">Autres</span> - </a> - </li> - - <li class="nav-item ajout-intervenant"> - <a href="/intervenant/635955/dupliquer" title="Ajout d'un nouveau statut à l'intervenant"><i class="fas fa-plus"></i></a> - </li> - </ul> - <div style="clear: both"></div> -</nav> - - -<h1>Titre 1</h1> -<h2>Titre 2</h2> -<h3>Titre 3</h3> -<h4>Titre 4</h4> -<h5>Titre 5</h5> - -<p>Texte normal : Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pulvinar dolor justo, a convallis elit molestie in. Donec cursus faucibus quam - egestas egestas. - Aliquam vitae maximus quam. Aliquam neque massa, tincidunt vel velit ut, ornare molestie augue. Vestibulum cursus sed orci et posuere. Nulla suscipit - aliquet eros sed euismod. Fusce efficitur sodales laoreet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Maecenas - viverra condimentum ligula, at sollicitudin diam tempus a. Fusce lacinia est at massa elementum lacinia. Etiam rhoncus varius tortor, et porttitor dolor - aliquet ut. Phasellus dapibus diam sit amet commodo sollicitudin. Sed vehicula nulla id tellus aliquam, vel egestas felis fermentum. Duis sem dui, - condimentum eu magna sed, congue volutpat lectus. Donec suscipit tellus justo, vel tristique ex interdum id. </p> -<strong>Texte en gras</strong> - - -<h1>Buttons</h1> - -<h2>Taille normale</h2> - -<button class="btn btn-primary">btn btn-primary</button> - -<button class="btn btn-secondary">btn btn-secondary</button> - -<button class="btn btn-warning">btn btn-warning</button> - -<button class="btn btn-danger">btn btn-danger</button> - -<h2>Taille SM</h2> - -<button class="btn btn-sm btn-primary">btn btn-primary</button> - -<button class="btn btn-sm btn-secondary">btn btn-secondary</button> - -<button class="btn btn-sm btn-warning">btn btn-warning</button> - -<button class="btn btn-sm btn-danger">btn btn-danger</button> - -<h2>Taille XS</h2> - -<button class="btn btn-sm btn-primary">btn btn-primary</button> - -<button class="btn btn-sm btn-secondary">btn btn-secondary</button> - -<button class="btn btn-sm btn-warning">btn btn-warning</button> - -<button class="btn btn-sm btn-danger">btn btn-danger</button> - - -<h1>Alerts</h1> -<h2>Normales</h2> -<div class="alert alert-info"> - alert alert-info -</div> - -<div class="alert alert-success"> - alert alert-success -</div> - -<div class="alert alert-danger"> - alert alert-danger -</div> - -<div class="alert alert-warning"> - alert alert-warning -</div> - -<h2>Avec titres</h2> - -<div class="alert alert-info"> - <h4>Titre</h4> - alert alert-info -</div> - - -<h1>Wells</h1> - -<div class="well"> - <h2>Titre du well</h2> - contenu du well -</div> - - -<h1>Cards</h1> - -<div class="card bg-default"> - <div class="card-header"> - card-header default - </div> - <div class="card-body"> - card-body - </div> -</div> - -<div class="card bg-info"> - <div class="card-header"> - card-header info - </div> - <div class="card-body"> - card-body - </div> -</div> - -<div class="card bg-warning"> - <div class="card-header"> - card-header warning - </div> - <div class="card-body"> - card-body - </div> -</div> - -<div class="card bg-danger"> - <div class="card-header"> - card-header danger - </div> - <div class="card-body"> - card-body - </div> -</div> - - -<div class="contrat card bg-success" id="contrat-25014"> - <div class="card-header card-heading-h3"> - Contrat n°25014 - UFR HSS - </div> - - <div class="card-body"> - body - </div> - - <div class="card-footer"> - footer - </div> -</div> - - -<h1>Cartridge</h1> - -<div class="cartridge gray bordered"> - <span><a href="#">UFR HSS</a></span> - <span><a href="#">Master 2A Arts, Lettres et Civilisations</a></span> - <span><a href="#">2MPROD2A - Développement de l'entreprise de production</a></span> -</div> - - -<h1>Callout</h1> - -<div class="callout-menu"> - <div class="callout-container"> - <div class="callout" style="border-left-color: #FFA643"> - <span class="fas fa-tachometer"></span> - <h1><a href="#">Callout 1</a></h1> - <ul> - <li><a title="Sous-item 1" href="#">Sous-item 1</a></li> - <li><a title="Sous-item 2" href="#">Sous-item 2</a></li> - </ul> - </div> - </div> - <div class="callout-container"> - <div class="callout" style="border-left-color: #BBCF55"> - <span class="fas fa-table-list"></span> - <h1><a href="#">Callout 2</a></h1> - <ul> - <li><a title="Sous-item 1" href="#">Sous-item 1</a></li> - <li><a title="Sous-item 2" href="#">Sous-item 2</a></li> - <li><a title="Sous-item 3" href="#">Sous-item 3</a></li> - </ul> - </div> - </div> -</div> - - -<h1>Tableaux</h1> - -<h2>Taille standard</h2> - -<table class="table table-bordered"> - <thead> - <tr> - <th style="width:5%">Civilité</th> - <th style="width:15%">Nom</th> - <th style="width:15%">Prénom</th> - <th style="width:15%">Structure</th> - <th style="width:15%">Statut</th> - <th style="width:15%">Date de naissance</th> - <th style="width:10%">N° personnel</th> - </tr> - </thead> - <tbody class="table-hover"> - <tr> - <td>Madame</td> - <td>Test</td> - <td>Sabine</td> - <td>INSPE</td> - <td>Vacataire</td> - <td>06/10/1974</td> - <td></td> - </tr> - </tbody> -</table> - -<h2>Taille sm</h2> - -<table class="table table-bordered table-sm"> - <thead> - <tr> - <th style="width:5%">Civilité</th> - <th style="width:15%">Nom</th> - <th style="width:15%">Prénom</th> - <th style="width:15%">Structure</th> - <th style="width:15%">Statut</th> - <th style="width:15%">Date de naissance</th> - <th style="width:10%">N° personnel</th> - </tr> - </thead> - <tbody class="table-hover"> - <tr> - <td>Madame</td> - <td>Test</td> - <td>Sabine</td> - <td>INSPE</td> - <td>Vacataire</td> - <td>06/10/1974</td> - <td></td> - </tr> - </tbody> -</table> - -<h2>Taille xs</h2> - -<table class="table table-bordered table-xs"> - <thead> - <tr> - <th style="width:5%">Civilité</th> - <th style="width:15%">Nom</th> - <th style="width:15%">Prénom</th> - <th style="width:15%">Structure</th> - <th style="width:15%">Statut</th> - <th style="width:15%">Date de naissance</th> - <th style="width:10%">N° personnel</th> - </tr> - </thead> - <tbody class="table-hover"> - <tr> - <td>Madame</td> - <td>Test</td> - <td>Sabine</td> - <td>INSPE</td> - <td>Vacataire</td> - <td>06/10/1974</td> - <td></td> - </tr> - </tbody> -</table> - - -<h1>Fenêtre Modale</h1> - - -<div class="modal" tabindex="1" style="position:relative;display:block"> - <div class="modal-dialog"> - <div class="modal-content"> - <div class="modal-header"> - <h2 class="modal-title">Modal title</h2> - <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> - </div> - <div class="modal-body"> - <p>Modal body text goes here.</p> - </div> - <div class="modal-footer"> - <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> - <button type="button" class="btn btn-primary">Save changes</button> - </div> - </div> - </div> -</div> - - -<h1>Formulaires</h1> - -<h2>form-select</h2> - -<select class="form-select"> - <option selected>Open this select menu</option> - <option value="1">One</option> - <option value="2">Two</option> - <option value="3">Three</option> -</select> - -<h2>bootstrap-select</h2> -<select class="selectpicker"> - <option selected>Open this select menu</option> - <option value="1">One</option> - <option value="2">Two</option> - <option value="3">Three</option> -</select> \ No newline at end of file diff --git a/code/test5.php b/code/test5.php index 5e6216ec29872bc19e38312921c0c602d6669640..d993b6d3d569213a6cd41c42be239a1132d90df0 100644 --- a/code/test5.php +++ b/code/test5.php @@ -7,54 +7,3 @@ * @var $viewName string * @var $viewFile string */ - -$url = (string)$this->url('chargens'); - -?> -<div> - <h2>SelectPicker</h2> - - <select class="selectpicker"> - <option>Test 1</option> - <option>Lorem Ipsum</option> - <option>Tets 5</option> - </select> - - -</div> - -<div> - <h2>form-select</h2> - - <select class="form-select"> - <option>Test 1</option> - <option>Lorem Ipsum</option> - <option>Tets 5</option> - </select> - - -</div> - -<div> - <h2>SelectPicker + form-select</h2> - - <select class="form-select selectpicker"> - <option>Test 1</option> - <option>Lorem Ipsum</option> - <option>Tets 5</option> - </select> - - -</div> - -<div> - <h2>sans classe</h2> - - <select class=""> - <option>Test 1</option> - <option>Lorem Ipsum</option> - <option>Tets 5</option> - </select> - - -</div> \ No newline at end of file diff --git a/code/test6.php b/code/test6.php index d4ba2934161db4f1d10f1a07e05d5356846ae672..d993b6d3d569213a6cd41c42be239a1132d90df0 100644 --- a/code/test6.php +++ b/code/test6.php @@ -7,88 +7,3 @@ * @var $viewName string * @var $viewFile string */ - - - - - -class Flux -{ - private static ?self $instance = null; - - private string $filename = ''; - - private $buffer; - - - - public function demarrer(string $filename): bool - { - $this->filename = $filename; - $this->buffer = fopen($this->filename, 'w'); - - return true; - } - - - - public function stopper() - { - fwrite($this->buffer, '<END-OF-FLUX />'); - fclose($this->buffer); - } - - - - public function ecrire(string $data) - { - fwrite($this->buffer, $data); - } - - - - public function alert(string $message, string $type) - { - $this->ecrire('<div class="alert alert-' . $type . '">' . $message . '</div>'); - } - - - - public static function getInstance(): self - { - if (!self::$instance) { - self::$instance = new self; - } - - return self::$instance; - } -} - - - - - -$filename = getcwd() . '/cache/testRunner'; -if (!Flux::getInstance()->demarrer($filename)) return; - -$ws = $container->get(\Application\Service\WorkflowService::class); - -$result = $ws->calculerTousTableauxBord(function (array $d) { - Flux::getInstance()->ecrire('<h3>' . $d['tableau-bord'] . '</h3>'); -}, function (array $d) { - if ($d['result']) { - $duree = round($d['duree'], 3) . ' secondes'; - Flux::getInstance()->ecrire('<div>Calcul effectué en ' . $duree . '</div>'); - } else { - Flux::getInstance()->alert($d['exception']->getMessage(), 'danger'); - } -}); - -Flux::getInstance()->ecrire('Fin du calcul des tableaux de bord'); -if ($result) { - Flux::getInstance()->alert('Tout c\'est bien passé', 'success'); -} else { - Flux::getInstance()->alert('Attention : des erreurs ont été rencontrées!!', 'danger'); -} - -Flux::getInstance()->stopper(); \ No newline at end of file diff --git a/code/testBS5.php b/code/testBS5.php deleted file mode 100644 index 1c6436afc88d10c2896d1c88aed9ae3b0e693f1d..0000000000000000000000000000000000000000 --- a/code/testBS5.php +++ /dev/null @@ -1,24 +0,0 @@ -<?php - -/** - * @var $this \Application\View\Renderer\PhpRenderer - * @var $controller \Laminas\Mvc\Controller\AbstractController - * @var $container \Psr\Container\ContainerInterface - * @var $viewName string - * @var $viewFile string - */ - - -?> -<script> - - $(function () { - $('[data-bs-toggle="popover"]').popover() - }) - -</script> - -<button type="button" class="navbar-link" data-bs-toggle="popover" title="Popover title" - data-html="true" - data-bs-content="And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?And here's some amazing content. It's very engaging. Right?">Click to toggle popover -</button> diff --git a/composer.json b/composer.json index 0c76b68e5d486208a9d25efc3bffbe63bbe1ca73..3076aa0cfdeb967b51d4e73e4e18f34dde7fa997 100644 --- a/composer.json +++ b/composer.json @@ -9,13 +9,13 @@ ], "require" : { "php" : ">=8.0", - "unicaen/app" : "dev-ll-php8-bs5", - "unicaen/auth" : "dev-ll-php8-bs5", + "unicaen/app" : "6.0.1", + "unicaen/auth" : "6.0.0", "laminas/laminas-file" : "^2.8", - "unicaen/code" : "7.1", - "unicaen/import" : "dev-ll-php8-bs5", - "unicaen/tbl" : "dev-ll-php8-bs5", - "unicaen/open-document" : "^4.0", + "unicaen/code" : "6.0.5", + "unicaen/import" : "6.0.0", + "unicaen/tbl" : "6.0.0", + "unicaen/open-document" : "6.0.1", "unicaen/siham" : "^2.0", "laminas/laminas-cache-storage-adapter-memory": "2.1.x-dev", "laminas/laminas-text": "2.10.x-dev" diff --git a/composer.lock b/composer.lock index 4804ecbe63e8440ad0e4c0e6877fd8a1bb76b6d6..53af4a2b8af07e4a3a098fb0400e2a5f6359bf6c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "05e603d0419ff11ff6d6b28665503249", + "content-hash": "2a24f58724430278ccdfb7e634b4b21f", "packages": [ { "name": "beberlei/assert", @@ -73,74 +73,18 @@ }, "time": "2021-12-16T21:41:27+00:00" }, - { - "name": "brick/math", - "version": "0.10.2", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "4.25.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.10.2" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2022-08-10T22:54:19+00:00" - }, { "name": "brick/varexporter", - "version": "0.3.7", + "version": "0.3.8", "source": { "type": "git", "url": "https://github.com/brick/varexporter.git", - "reference": "3e263cd718d242594c52963760fee2059fd5833c" + "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/varexporter/zipball/3e263cd718d242594c52963760fee2059fd5833c", - "reference": "3e263cd718d242594c52963760fee2059fd5833c", + "url": "https://api.github.com/repos/brick/varexporter/zipball/b5853edea6204ff8fa10633c3a4cccc4058410ed", + "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed", "shasum": "" }, "require": { @@ -168,7 +112,7 @@ ], "support": { "issues": "https://github.com/brick/varexporter/issues", - "source": "https://github.com/brick/varexporter/tree/0.3.7" + "source": "https://github.com/brick/varexporter/tree/0.3.8" }, "funding": [ { @@ -176,36 +120,39 @@ "type": "github" } ], - "time": "2022-06-29T23:37:57+00:00" + "time": "2023-01-21T23:05:38+00:00" }, { "name": "doctrine/annotations", - "version": "1.13.3", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", - "reference": "648b0343343565c4a056bfc8392201385e8d89f0", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { - "doctrine/lexer": "1.*", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", "vimeo/psalm": "^4.10" }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, "type": "library", "autoload": { "psr-4": { @@ -247,9 +194,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.3" + "source": "https://github.com/doctrine/annotations/tree/1.14.3" }, - "time": "2022-07-02T10:48:51+00:00" + "time": "2023-02-01T09:20:38+00:00" }, { "name": "doctrine/cache", @@ -513,16 +460,16 @@ }, { "name": "doctrine/dbal", - "version": "3.5.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" + "reference": "85b98cb23c8af471a67abfe14485da696bcabc2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", - "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/85b98cb23c8af471a67abfe14485da696bcabc2e", + "reference": "85b98cb23c8af471a67abfe14485da696bcabc2e", "shasum": "" }, "require": { @@ -535,16 +482,17 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "10.0.0", - "jetbrains/phpstorm-stubs": "2022.2", - "phpstan/phpstan": "1.8.10", + "doctrine/coding-standard": "11.1.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2022.3", + "phpstan/phpstan": "1.9.14", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "9.5.25", - "psalm/plugin-phpunit": "0.17.0", + "phpunit/phpunit": "9.6.3", + "psalm/plugin-phpunit": "0.18.4", "squizlabs/php_codesniffer": "3.7.1", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.29.0" + "vimeo/psalm": "4.30.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -604,7 +552,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.5.1" + "source": "https://github.com/doctrine/dbal/tree/3.6.0" }, "funding": [ { @@ -620,7 +568,7 @@ "type": "tidelift" } ], - "time": "2022-10-24T07:26:18+00:00" + "time": "2023-02-07T22:52:03+00:00" }, { "name": "doctrine/deprecations", @@ -667,29 +615,29 @@ }, { "name": "doctrine/doctrine-laminas-hydrator", - "version": "3.2.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/doctrine-laminas-hydrator.git", - "reference": "b76cfa71d5e494a8a71ada4e8ea6454fc0fc56ba" + "reference": "b41bc66a485f1e2ce4477517d29d1803d0f2cbb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine-laminas-hydrator/zipball/b76cfa71d5e494a8a71ada4e8ea6454fc0fc56ba", - "reference": "b76cfa71d5e494a8a71ada4e8ea6454fc0fc56ba", + "url": "https://api.github.com/repos/doctrine/doctrine-laminas-hydrator/zipball/b41bc66a485f1e2ce4477517d29d1803d0f2cbb4", + "reference": "b41bc66a485f1e2ce4477517d29d1803d0f2cbb4", "shasum": "" }, "require": { - "doctrine/collections": "^1.6.8", + "doctrine/collections": "^1.8.0 || ^2.0.0", "doctrine/inflector": "^2.0.4", "doctrine/persistence": "^2.2.3 || ^3.0.0", "ext-ctype": "*", "laminas/laminas-hydrator": "^4.3.1", "laminas/laminas-stdlib": "^3.6.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0.2", + "doctrine/coding-standard": "^11.1.0", "phpstan/phpstan": "^1.9.2", "phpunit/phpunit": "^9.5.26", "vimeo/psalm": "^4.30" @@ -729,43 +677,43 @@ "type": "tidelift" } ], - "time": "2022-11-18T09:49:57+00:00" + "time": "2023-02-07T07:28:03+00:00" }, { "name": "doctrine/doctrine-module", - "version": "5.2.1", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineModule.git", - "reference": "79994578c93037d3c41f9fc3de25f3d2962a4188" + "reference": "ad346200568aa095c58e2866eb1e2be0e3c3083f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineModule/zipball/79994578c93037d3c41f9fc3de25f3d2962a4188", - "reference": "79994578c93037d3c41f9fc3de25f3d2962a4188", + "url": "https://api.github.com/repos/doctrine/DoctrineModule/zipball/ad346200568aa095c58e2866eb1e2be0e3c3083f", + "reference": "ad346200568aa095c58e2866eb1e2be0e3c3083f", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2.0", - "doctrine/annotations": "^1.13.2", - "doctrine/cache": "^1.12.1", - "doctrine/collections": "^1.6.8", - "doctrine/doctrine-laminas-hydrator": "^3.0.0", - "doctrine/event-manager": "^1.1.1", - "doctrine/inflector": "^2.0.4", - "doctrine/persistence": "^2.3.0 || ^3.0.0", - "laminas/laminas-authentication": "^2.9.0", - "laminas/laminas-cache": "^3.1.2", - "laminas/laminas-eventmanager": "^3.4.0", - "laminas/laminas-form": "^3.1.1", - "laminas/laminas-modulemanager": "^2.11.0", - "laminas/laminas-mvc": "^3.3.0", - "laminas/laminas-paginator": "^2.12.2", - "laminas/laminas-servicemanager": "^3.10.0", - "laminas/laminas-stdlib": "^3.7.1", - "laminas/laminas-validator": "^2.16.0", - "php": "^7.4 || ~8.0.0 || ~8.1.0", - "symfony/console": "^5.4.3 || ^6.0.3" + "doctrine/annotations": "^1.13.3", + "doctrine/cache": "^1.13.0", + "doctrine/collections": "^1.8.0", + "doctrine/doctrine-laminas-hydrator": "^3.2.0", + "doctrine/event-manager": "^1.2.0", + "doctrine/inflector": "^2.0.6", + "doctrine/persistence": "^2.5.5 || ^3.1.0", + "laminas/laminas-authentication": "^2.12.0", + "laminas/laminas-cache": "^3.6.0", + "laminas/laminas-eventmanager": "^3.5.0", + "laminas/laminas-form": "^3.4.1", + "laminas/laminas-modulemanager": "^2.12.0", + "laminas/laminas-mvc": "^3.3.5", + "laminas/laminas-paginator": "^2.13.0", + "laminas/laminas-servicemanager": "^3.17.0", + "laminas/laminas-stdlib": "^3.13.0", + "laminas/laminas-validator": "^2.25.0", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0", + "psr/container": "^1.1.2", + "symfony/console": "^5.4.16 || ^6.2.1" }, "conflict": { "doctrine/orm": "2.12.0" @@ -774,22 +722,21 @@ "laminas/laminas-cache-storage-implementation": "1.0.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0.0", - "doctrine/mongodb-odm": "^2.3.0", - "doctrine/orm": "^2.11.1", + "doctrine/coding-standard": "^9.0.2", + "doctrine/mongodb-odm": "^2.4.2", + "doctrine/orm": "^2.13.4", "jangregor/phpstan-prophecy": "^1.0.0", "laminas/laminas-cache-storage-adapter-blackhole": "^2.0.0", - "laminas/laminas-cache-storage-adapter-memory": "^2.0.0", - "laminas/laminas-i18n": "^2.13.0", - "laminas/laminas-log": "^2.15.0", - "laminas/laminas-serializer": "^2.12.0", - "laminas/laminas-session": "^2.12.0", - "phpspec/prophecy-phpunit": "^2.0.1", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-phpunit": "^1.0.0", - "phpunit/phpunit": "^9.5.13", + "laminas/laminas-cache-storage-adapter-memory": "^2.1.0", + "laminas/laminas-i18n": "^2.17.0", + "laminas/laminas-log": "^2.15.3", + "laminas/laminas-serializer": "^2.13.0", + "laminas/laminas-session": "^2.13.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-phpunit": "^1.3.0", + "phpunit/phpunit": "^9.5.27", "predis/predis": "^1.1.10", - "vimeo/psalm": "^4.20.0" + "vimeo/psalm": "^5.0" }, "suggest": { "doctrine/data-fixtures": "Data Fixtures if you want to generate test data or bootstrap data for your deployments" @@ -848,7 +795,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineModule/issues", - "source": "https://github.com/doctrine/DoctrineModule/tree/5.2.1" + "source": "https://github.com/doctrine/DoctrineModule/tree/5.3.0" }, "funding": [ { @@ -864,27 +811,26 @@ "type": "tidelift" } ], - "time": "2022-10-28T09:04:39+00:00" + "time": "2022-12-12T15:24:40+00:00" }, { "name": "doctrine/doctrine-orm-module", - "version": "5.2.1", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineORMModule.git", - "reference": "37521972472715065a187a07a5d856bef318dd8e" + "reference": "79715e6ed9939595789b62eb21ed15592493ee3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineORMModule/zipball/37521972472715065a187a07a5d856bef318dd8e", - "reference": "37521972472715065a187a07a5d856bef318dd8e", + "url": "https://api.github.com/repos/doctrine/DoctrineORMModule/zipball/79715e6ed9939595789b62eb21ed15592493ee3c", + "reference": "79715e6ed9939595789b62eb21ed15592493ee3c", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2.0", "doctrine/dbal": "^2.13.7 || ^3.3.2", "doctrine/doctrine-laminas-hydrator": "^3.0.0", - "doctrine/doctrine-module": "^5.2.0", + "doctrine/doctrine-module": "^5.3.0", "doctrine/event-manager": "^1.1.1", "doctrine/orm": "^2.11.1", "doctrine/persistence": "^2.3.0 || ^3.0.0", @@ -893,9 +839,10 @@ "laminas/laminas-modulemanager": "^2.11.0", "laminas/laminas-mvc": "^3.3.2", "laminas/laminas-paginator": "^2.12.2", - "laminas/laminas-servicemanager": "^3.10.0", + "laminas/laminas-servicemanager": "^3.17.0", "laminas/laminas-stdlib": "^3.7.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0", + "psr/container": "^1.1.2", "symfony/console": "^5.4.3 || ^6.0.3" }, "conflict": { @@ -915,7 +862,7 @@ "phpstan/phpstan-phpunit": "^1.0.0", "phpunit/phpunit": "^9.5.13", "squizlabs/php_codesniffer": "^3.6.2", - "vimeo/psalm": "^4.20.0" + "vimeo/psalm": "^5.4.0" }, "suggest": { "doctrine/migrations": "doctrine migrations if you want to keep your schema definitions versioned", @@ -973,7 +920,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineORMModule/issues", - "source": "https://github.com/doctrine/DoctrineORMModule/tree/5.2.1" + "source": "https://github.com/doctrine/DoctrineORMModule/tree/5.3.0" }, "funding": [ { @@ -989,7 +936,7 @@ "type": "tidelift" } ], - "time": "2022-08-17T12:19:36+00:00" + "time": "2022-12-23T10:42:13+00:00" }, { "name": "doctrine/event-manager", @@ -1176,30 +1123,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.16 || ^1", "phpstan/phpstan": "^1.4", "phpstan/phpstan-phpunit": "^1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -1226,7 +1173,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -1242,35 +1189,37 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9 || ^10", "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1302,7 +1251,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -1318,55 +1267,56 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { "name": "doctrine/orm", - "version": "2.13.3", + "version": "2.14.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "e750360bd52b080c4cbaaee1b48b80f7dc873b36" + "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/e750360bd52b080c4cbaaee1b48b80f7dc873b36", - "reference": "e750360bd52b080c4cbaaee1b48b80f7dc873b36", + "url": "https://api.github.com/repos/doctrine/orm/zipball/de7eee5ed7b1b35c99b118f26f210a8281e6db8e", + "reference": "de7eee5ed7b1b35c99b118f26f210a8281e6db8e", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5", + "doctrine/collections": "^1.5 || ^2.0", "doctrine/common": "^3.0.3", "doctrine/dbal": "^2.13.1 || ^3.2", "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.1", + "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.2.3", + "doctrine/lexer": "^1.2.3 || ^2", "doctrine/persistence": "^2.4 || ^3", "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, "conflict": { - "doctrine/annotations": "<1.13 || >= 2.0" + "doctrine/annotations": "<1.13 || >= 3.0" }, "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0.2 || ^10.0", + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^11.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.8.5", + "phpstan/phpstan": "~1.4.10 || 1.9.8", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.1", "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.27.0" + "vimeo/psalm": "4.30.0 || 5.4.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1416,22 +1366,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.13.3" + "source": "https://github.com/doctrine/orm/tree/2.14.1" }, - "time": "2022-10-07T06:37:17+00:00" + "time": "2023-01-16T18:36:59+00:00" }, { "name": "doctrine/persistence", - "version": "3.1.0", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b" + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/2a9c70a5e21f8968c5a46b79f819ea52f322080b", - "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/8bf8ab15960787f1a49d405f6eb8c787b4841119", + "reference": "8bf8ab15960787f1a49d405f6eb8c787b4841119", "shasum": "" }, "require": { @@ -1440,20 +1390,18 @@ "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/annotations": "<1.7 || >=2.0", "doctrine/common": "<2.10" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^1.7", - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.8.8", + "phpstan/phpstan": "1.9.4", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.29.0" + "vimeo/psalm": "4.30.0 || 5.3.0" }, "type": "library", "autoload": { @@ -1502,7 +1450,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.1.0" + "source": "https://github.com/doctrine/persistence/tree/3.1.4" }, "funding": [ { @@ -1518,7 +1466,7 @@ "type": "tidelift" } ], - "time": "2022-11-18T14:10:19+00:00" + "time": "2023-02-03T11:13:07+00:00" }, { "name": "easybook/geshi", @@ -1571,16 +1519,16 @@ }, { "name": "jasig/phpcas", - "version": "1.6.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/apereo/phpCAS.git", - "reference": "f817c72a961484afef95ac64a9257c8e31f063b9" + "reference": "d6f5797fb568726f34c8e48741776d81e4a2646b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/apereo/phpCAS/zipball/f817c72a961484afef95ac64a9257c8e31f063b9", - "reference": "f817c72a961484afef95ac64a9257c8e31f063b9", + "url": "https://api.github.com/repos/apereo/phpCAS/zipball/d6f5797fb568726f34c8e48741776d81e4a2646b", + "reference": "d6f5797fb568726f34c8e48741776d81e4a2646b", "shasum": "" }, "require": { @@ -1633,9 +1581,9 @@ ], "support": { "issues": "https://github.com/apereo/phpCAS/issues", - "source": "https://github.com/apereo/phpCAS/tree/1.6.0" + "source": "https://github.com/apereo/phpCAS/tree/1.5.0" }, - "time": "2022-10-31T20:39:27+00:00" + "time": "2022-05-03T21:12:54+00:00" }, { "name": "laminas/laminas-authentication", @@ -1715,22 +1663,22 @@ }, { "name": "laminas/laminas-cache", - "version": "3.8.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-cache.git", - "reference": "b756eb5905f499695c09ab4f3a3e2bafeece8d88" + "reference": "5807c51b92fd256bbf58eda6df4c1d27148bbfb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/b756eb5905f499695c09ab4f3a3e2bafeece8d88", - "reference": "b756eb5905f499695c09ab4f3a3e2bafeece8d88", + "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/5807c51b92fd256bbf58eda6df4c1d27148bbfb8", + "reference": "5807c51b92fd256bbf58eda6df4c1d27148bbfb8", "shasum": "" }, "require": { "laminas/laminas-cache-storage-implementation": "1.0", "laminas/laminas-eventmanager": "^3.4", - "laminas/laminas-servicemanager": "^3.11.1", + "laminas/laminas-servicemanager": "^3.18.0", "laminas/laminas-stdlib": "^3.6", "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "psr/cache": "^1.0", @@ -1746,20 +1694,20 @@ "psr/simple-cache-implementation": "1.0" }, "require-dev": { - "laminas/laminas-cache-storage-adapter-apcu": "^2.0", - "laminas/laminas-cache-storage-adapter-blackhole": "^2.0", - "laminas/laminas-cache-storage-adapter-filesystem": "^2.0", - "laminas/laminas-cache-storage-adapter-memory": "^2.0", - "laminas/laminas-cache-storage-adapter-test": "^2.3", - "laminas/laminas-cli": "^1.0", - "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-config-aggregator": "^1.5", - "laminas/laminas-feed": "^2.14", - "laminas/laminas-serializer": "^2.6.1", - "phpbench/phpbench": "^1.0", - "phpunit/phpunit": "^9.5.23", - "psalm/plugin-phpunit": "^0.18.0", - "vimeo/psalm": "^4.24" + "laminas/laminas-cache-storage-adapter-apcu": "^2.4", + "laminas/laminas-cache-storage-adapter-blackhole": "^2.3", + "laminas/laminas-cache-storage-adapter-filesystem": "^2.3", + "laminas/laminas-cache-storage-adapter-memory": "^2.2", + "laminas/laminas-cache-storage-adapter-test": "^2.4", + "laminas/laminas-cli": "^1.7", + "laminas/laminas-coding-standard": "~2.5.0", + "laminas/laminas-config-aggregator": "^1.13", + "laminas/laminas-feed": "^2.20", + "laminas/laminas-serializer": "^2.14", + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.27", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.4" }, "suggest": { "laminas/laminas-cache-storage-adapter-apcu": "APCu implementation", @@ -1811,7 +1759,7 @@ "type": "community_bridge" } ], - "time": "2022-11-08T15:24:00+00:00" + "time": "2023-01-10T14:17:43+00:00" }, { "name": "laminas/laminas-cache-storage-adapter-memory", @@ -1883,40 +1831,39 @@ }, { "name": "laminas/laminas-cache-storage-deprecated-factory", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-cache-storage-deprecated-factory.git", - "reference": "b38ca23107443ce0a59d34d4735e8404545f31fc" + "reference": "f35b7b1b7c33f61726b57d694ff0340f8e0e9328" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-cache-storage-deprecated-factory/zipball/b38ca23107443ce0a59d34d4735e8404545f31fc", - "reference": "b38ca23107443ce0a59d34d4735e8404545f31fc", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-deprecated-factory/zipball/f35b7b1b7c33f61726b57d694ff0340f8e0e9328", + "reference": "f35b7b1b7c33f61726b57d694ff0340f8e0e9328", "shasum": "" }, "require": { "laminas/laminas-cache": "^3.0", "laminas/laminas-servicemanager": "^3.7", "laminas/laminas-stdlib": "^3.6", - "php": "^7.3 || ~8.0.0 || ~8.1.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "webmozart/assert": "^1.10" }, "require-dev": { - "laminas/laminas-cache": "3.0.x@dev", - "laminas/laminas-cache-storage-adapter-apcu": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-blackhole": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-ext-mongodb": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-filesystem": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-memcached": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-memory": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-redis": "2.0.x@dev", - "laminas/laminas-cache-storage-adapter-session": "2.0.x@dev", - "laminas/laminas-coding-standard": "^2.3", - "laminas/laminas-serializer": "^2.11", - "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.12" + "laminas/laminas-cache-storage-adapter-apcu": "^2.4", + "laminas/laminas-cache-storage-adapter-blackhole": "^2.2", + "laminas/laminas-cache-storage-adapter-ext-mongodb": "^2.3", + "laminas/laminas-cache-storage-adapter-filesystem": "^2.3", + "laminas/laminas-cache-storage-adapter-memcached": "^2.4", + "laminas/laminas-cache-storage-adapter-memory": "^2.2", + "laminas/laminas-cache-storage-adapter-redis": "^2.5", + "laminas/laminas-cache-storage-adapter-session": "^2.3", + "laminas/laminas-coding-standard": "2.3", + "laminas/laminas-serializer": "^2.14", + "phpunit/phpunit": "^9.5.27", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -1931,7 +1878,7 @@ "description": "Temporary storage adapter factory for fluent migration to laminas-cache v3 when working with laminas components which depend on laminas-cache", "support": { "issues": "https://github.com/laminas/laminas-cache-storage-deprecated-factory/issues", - "source": "https://github.com/laminas/laminas-cache-storage-deprecated-factory/tree/1.0.1" + "source": "https://github.com/laminas/laminas-cache-storage-deprecated-factory/tree/1.1.0" }, "funding": [ { @@ -1939,7 +1886,7 @@ "type": "community_bridge" } ], - "time": "2022-02-23T20:40:35+00:00" + "time": "2022-12-22T08:25:45+00:00" }, { "name": "laminas/laminas-code", @@ -2141,16 +2088,16 @@ }, { "name": "laminas/laminas-db", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-db.git", - "reference": "0fb9d7a32b40036a158961a5df082ff421321aa7" + "reference": "9020ba27ffa4966c03cac743144bfd6716fdab60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-db/zipball/0fb9d7a32b40036a158961a5df082ff421321aa7", - "reference": "0fb9d7a32b40036a158961a5df082ff421321aa7", + "url": "https://api.github.com/repos/laminas/laminas-db/zipball/9020ba27ffa4966c03cac743144bfd6716fdab60", + "reference": "9020ba27ffa4966c03cac743144bfd6716fdab60", "shasum": "" }, "require": { @@ -2208,32 +2155,32 @@ "type": "community_bridge" } ], - "time": "2022-11-18T09:28:22+00:00" + "time": "2023-01-31T12:09:24+00:00" }, { "name": "laminas/laminas-dependency-plugin", - "version": "2.5.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-dependency-plugin.git", - "reference": "8f2d10199381cdc7d0843bfadad55f8485df9e38" + "reference": "73cfb63ddca9d6bfedad5e0a038f6d55063975a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-dependency-plugin/zipball/8f2d10199381cdc7d0843bfadad55f8485df9e38", - "reference": "8f2d10199381cdc7d0843bfadad55f8485df9e38", + "url": "https://api.github.com/repos/laminas/laminas-dependency-plugin/zipball/73cfb63ddca9d6bfedad5e0a038f6d55063975a3", + "reference": "73cfb63ddca9d6bfedad5e0a038f6d55063975a3", "shasum": "" }, "require": { - "composer-plugin-api": ">=1.1.0 <2.3.0", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "composer-plugin-api": "^1.1 || ^2.0", + "php": "^7.3 || ~8.0.0 || ~8.1.0" }, "require-dev": { - "composer/composer": ">=1.9.0 <2.3.0", - "laminas/laminas-coding-standard": "~2.4.0", - "mikey179/vfsstream": "^1.6.11", + "composer/composer": "^1.9 || ^2.0", + "laminas/laminas-coding-standard": "^2.2.1", + "mikey179/vfsstream": "^1.6.10@alpha", "phpunit/phpunit": "^9.5.5", - "psalm/plugin-phpunit": "^0.17.0", + "psalm/plugin-phpunit": "^0.15.1", "roave/security-advisories": "dev-master", "vimeo/psalm": "^4.5" }, @@ -2253,7 +2200,7 @@ "description": "Replace zendframework and zfcampus packages with their Laminas Project equivalents.", "support": { "issues": "https://github.com/laminas/laminas-dependency-plugin/issues", - "source": "https://github.com/laminas/laminas-dependency-plugin/tree/2.5.0" + "source": "https://github.com/laminas/laminas-dependency-plugin/tree/2.2.0" }, "funding": [ { @@ -2261,20 +2208,20 @@ "type": "community_bridge" } ], - "time": "2022-10-16T14:45:47+00:00" + "time": "2021-09-08T17:51:35+00:00" }, { "name": "laminas/laminas-developer-tools", - "version": "2.5.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-developer-tools.git", - "reference": "d6a7110dbdc4674f4382325ac6d81e476ff7c8ae" + "reference": "343862445024d1b4cac76f0f5a89627d3c1edc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-developer-tools/zipball/d6a7110dbdc4674f4382325ac6d81e476ff7c8ae", - "reference": "d6a7110dbdc4674f4382325ac6d81e476ff7c8ae", + "url": "https://api.github.com/repos/laminas/laminas-developer-tools/zipball/343862445024d1b4cac76f0f5a89627d3c1edc66", + "reference": "343862445024d1b4cac76f0f5a89627d3c1edc66", "shasum": "" }, "require": { @@ -2285,7 +2232,7 @@ "laminas/laminas-servicemanager": "^3.3", "laminas/laminas-stdlib": "^3.6", "laminas/laminas-view": "^2.13.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "symfony/var-dumper": "^5.0.1 || ^6.0" }, "conflict": { @@ -2293,9 +2240,9 @@ }, "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", - "phpunit/phpunit": "^9.3.4", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.6" + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.1" }, "suggest": { "aist/aist-git-tools": "Show you information about current GIT repository", @@ -2342,7 +2289,7 @@ "type": "community_bridge" } ], - "time": "2022-09-13T11:02:52+00:00" + "time": "2022-12-15T14:26:58+00:00" }, { "name": "laminas/laminas-escaper", @@ -2408,16 +2355,16 @@ }, { "name": "laminas/laminas-eventmanager", - "version": "3.6.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "3f1afbad86cd34a431fdc069f265cfe6f8fc8308" + "reference": "5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/3f1afbad86cd34a431fdc069f265cfe6f8fc8308", - "reference": "3f1afbad86cd34a431fdc069f265cfe6f8fc8308", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba", + "reference": "5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba", "shasum": "" }, "require": { @@ -2428,13 +2375,13 @@ "zendframework/zend-eventmanager": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-stdlib": "^3.15", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", "psr/container": "^1.1.2 || ^2.0.2", - "vimeo/psalm": "^4.28" + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature", @@ -2472,7 +2419,7 @@ "type": "community_bridge" } ], - "time": "2022-10-11T12:46:13+00:00" + "time": "2023-01-11T19:52:45+00:00" }, { "name": "laminas/laminas-file", @@ -2544,16 +2491,16 @@ }, { "name": "laminas/laminas-filter", - "version": "2.28.1", + "version": "2.31.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-filter.git", - "reference": "336b7571820c1d1d2443c34fa46f39884885e67c" + "reference": "548a6597d357b0b0b139cc7bffea4dfbc50eb5a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/336b7571820c1d1d2443c34fa46f39884885e67c", - "reference": "336b7571820c1d1d2443c34fa46f39884885e67c", + "url": "https://api.github.com/repos/laminas/laminas-filter/zipball/548a6597d357b0b0b139cc7bffea4dfbc50eb5a8", + "reference": "548a6597d357b0b0b139cc7bffea4dfbc50eb5a8", "shasum": "" }, "require": { @@ -2567,14 +2514,14 @@ "zendframework/zend-filter": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-crypt": "^3.9", "laminas/laminas-uri": "^2.10", "pear/archive_tar": "^1.4.14", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.3", + "phpunit/phpunit": "^9.5.27", + "psalm/plugin-phpunit": "^0.18.4", "psr/http-factory": "^1.0.1", - "vimeo/psalm": "^4.30" + "vimeo/psalm": "^5.3" }, "suggest": { "laminas/laminas-crypt": "Laminas\\Crypt component, for encryption filters", @@ -2618,20 +2565,20 @@ "type": "community_bridge" } ], - "time": "2022-11-19T15:13:44+00:00" + "time": "2023-01-12T06:17:48+00:00" }, { "name": "laminas/laminas-form", - "version": "3.6.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-form.git", - "reference": "e6d71e87d31f583aafe3644a7680de72d1f81ea5" + "reference": "087def3e3e4a70c618cdf622fbea8840280ff1c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-form/zipball/e6d71e87d31f583aafe3644a7680de72d1f81ea5", - "reference": "e6d71e87d31f583aafe3644a7680de72d1f81ea5", + "url": "https://api.github.com/repos/laminas/laminas-form/zipball/087def3e3e4a70c618cdf622fbea8840280ff1c2", + "reference": "087def3e3e4a70c618cdf622fbea8840280ff1c2", "shasum": "" }, "require": { @@ -2652,23 +2599,23 @@ "require-dev": { "doctrine/annotations": "^1.13.3", "ext-intl": "*", - "laminas/laminas-captcha": "^2.13", + "laminas/laminas-captcha": "^2.15", "laminas/laminas-coding-standard": "^2.4", - "laminas/laminas-db": "^2.15", + "laminas/laminas-db": "^2.16", "laminas/laminas-escaper": "^2.12", - "laminas/laminas-eventmanager": "^3.6", - "laminas/laminas-filter": "^2.23", - "laminas/laminas-i18n": "^2.19", + "laminas/laminas-eventmanager": "^3.8", + "laminas/laminas-filter": "^2.29", + "laminas/laminas-i18n": "^2.21", "laminas/laminas-modulemanager": "^2.14.0", - "laminas/laminas-recaptcha": "^3.4.0", - "laminas/laminas-servicemanager": "^3.19", - "laminas/laminas-session": "^2.13", + "laminas/laminas-recaptcha": "^3.5", + "laminas/laminas-servicemanager": "^3.20", + "laminas/laminas-session": "^2.16", "laminas/laminas-text": "^2.9.0", - "laminas/laminas-validator": "^2.26", - "laminas/laminas-view": "^2.24", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.18.0", - "vimeo/psalm": "^4.29" + "laminas/laminas-validator": "^2.28", + "laminas/laminas-view": "^2.25", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.1" }, "suggest": { "doctrine/annotations": "^1.12, required to use laminas-form annotations support", @@ -2715,20 +2662,20 @@ "type": "community_bridge" } ], - "time": "2022-11-20T22:16:51+00:00" + "time": "2022-12-05T19:11:27+00:00" }, { "name": "laminas/laminas-http", - "version": "2.17.1", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-http.git", - "reference": "324e5895235fe40bfd5a4e2a0337bd7bf9a97a50" + "reference": "76de9008f889bc7088f85a41d0d2b06c2b59c53d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-http/zipball/324e5895235fe40bfd5a4e2a0337bd7bf9a97a50", - "reference": "324e5895235fe40bfd5a4e2a0337bd7bf9a97a50", + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/76de9008f889bc7088f85a41d0d2b06c2b59c53d", + "reference": "76de9008f889bc7088f85a41d0d2b06c2b59c53d", "shasum": "" }, "require": { @@ -2780,20 +2727,20 @@ "type": "community_bridge" } ], - "time": "2022-11-11T09:16:23+00:00" + "time": "2022-11-23T15:45:41+00:00" }, { "name": "laminas/laminas-hydrator", - "version": "4.8.0", + "version": "4.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-hydrator.git", - "reference": "eae638f4912769b7336daf32fccb03c89e243ed6" + "reference": "78fa8f8a29a2866b1fccdf1b0c260557b6bb595e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-hydrator/zipball/eae638f4912769b7336daf32fccb03c89e243ed6", - "reference": "eae638f4912769b7336daf32fccb03c89e243ed6", + "url": "https://api.github.com/repos/laminas/laminas-hydrator/zipball/78fa8f8a29a2866b1fccdf1b0c260557b6bb595e", + "reference": "78fa8f8a29a2866b1fccdf1b0c260557b6bb595e", "shasum": "" }, "require": { @@ -2808,13 +2755,13 @@ "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", "laminas/laminas-eventmanager": "^3.6", - "laminas/laminas-modulemanager": "^2.12", - "laminas/laminas-serializer": "^2.13.0", + "laminas/laminas-modulemanager": "^2.14.0", + "laminas/laminas-serializer": "^2.14.0", "laminas/laminas-servicemanager": "^3.19", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.29" + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0" }, "suggest": { "laminas/laminas-eventmanager": "^3.2, to support aggregate hydrator usage", @@ -2857,20 +2804,20 @@ "type": "community_bridge" } ], - "time": "2022-10-24T15:56:12+00:00" + "time": "2022-12-21T04:00:01+00:00" }, { "name": "laminas/laminas-i18n", - "version": "2.19.0", + "version": "2.21.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-i18n.git", - "reference": "ebabca3a6398fc872127bc69a51bda5afc720d67" + "reference": "fbd2d0373aaced4769cba2bf3d1425d55f68abb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/ebabca3a6398fc872127bc69a51bda5afc720d67", - "reference": "ebabca3a6398fc872127bc69a51bda5afc720d67", + "url": "https://api.github.com/repos/laminas/laminas-i18n/zipball/fbd2d0373aaced4769cba2bf3d1425d55f68abb1", + "reference": "fbd2d0373aaced4769cba2bf3d1425d55f68abb1", "shasum": "" }, "require": { @@ -2885,18 +2832,18 @@ "zendframework/zend-i18n": "*" }, "require-dev": { - "laminas/laminas-cache": "^3.6", - "laminas/laminas-cache-storage-adapter-memory": "^2.1", + "laminas/laminas-cache": "^3.8", + "laminas/laminas-cache-storage-adapter-memory": "^2.2.0", "laminas/laminas-cache-storage-deprecated-factory": "^1.0.1", "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-config": "^3.7", - "laminas/laminas-eventmanager": "^3.5.0", - "laminas/laminas-filter": "^2.21", - "laminas/laminas-validator": "^2.25", - "laminas/laminas-view": "^2.23", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "laminas/laminas-config": "^3.8.0", + "laminas/laminas-eventmanager": "^3.7", + "laminas/laminas-filter": "^2.28.1", + "laminas/laminas-validator": "^2.28", + "laminas/laminas-view": "^2.25", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-cache": "You should install this package to cache the translations", @@ -2943,7 +2890,7 @@ "type": "community_bridge" } ], - "time": "2022-10-10T15:48:56+00:00" + "time": "2022-12-02T17:15:52+00:00" }, { "name": "laminas/laminas-i18n-resources", @@ -3006,16 +2953,16 @@ }, { "name": "laminas/laminas-inputfilter", - "version": "2.22.1", + "version": "2.24.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-inputfilter.git", - "reference": "ec8b923d2c6923c24e4822a9ac77b4cd0f047ad3" + "reference": "01c56c11904565b0f594c9cb745b5457a0e390eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-inputfilter/zipball/ec8b923d2c6923c24e4822a9ac77b4cd0f047ad3", - "reference": "ec8b923d2c6923c24e4822a9ac77b4cd0f047ad3", + "url": "https://api.github.com/repos/laminas/laminas-inputfilter/zipball/01c56c11904565b0f594c9cb745b5457a0e390eb", + "reference": "01c56c11904565b0f594c9cb745b5457a0e390eb", "shasum": "" }, "require": { @@ -3030,11 +2977,11 @@ }, "require-dev": { "ext-json": "*", - "laminas/laminas-coding-standard": "~2.4.0", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", + "laminas/laminas-coding-standard": "~2.5.0", + "phpunit/phpunit": "^9.5.27", + "psalm/plugin-phpunit": "^0.18.4", "psr/http-message": "^1.0.1", - "vimeo/psalm": "^4.28", + "vimeo/psalm": "^5.4", "webmozart/assert": "^1.11" }, "suggest": { @@ -3076,7 +3023,7 @@ "type": "community_bridge" } ], - "time": "2022-11-04T13:12:58+00:00" + "time": "2023-02-01T17:22:43+00:00" }, { "name": "laminas/laminas-json", @@ -3141,16 +3088,16 @@ }, { "name": "laminas/laminas-ldap", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-ldap.git", - "reference": "4c1fefb3dad9b112e18a7d35245854dc77a04a1e" + "reference": "cb66c477ec2fd2a7f38527c59d0635a9166b6597" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-ldap/zipball/4c1fefb3dad9b112e18a7d35245854dc77a04a1e", - "reference": "4c1fefb3dad9b112e18a7d35245854dc77a04a1e", + "url": "https://api.github.com/repos/laminas/laminas-ldap/zipball/cb66c477ec2fd2a7f38527c59d0635a9166b6597", + "reference": "cb66c477ec2fd2a7f38527c59d0635a9166b6597", "shasum": "" }, "require": { @@ -3166,9 +3113,9 @@ "laminas/laminas-eventmanager": "^3.6.0", "laminas/laminas-stdlib": "^3.15.0", "php-mock/php-mock-phpunit": "^2.6.1", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.29.0" + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-eventmanager": "Laminas\\EventManager component" @@ -3203,7 +3150,7 @@ "type": "community_bridge" } ], - "time": "2022-10-22T13:51:43+00:00" + "time": "2022-12-19T19:50:51+00:00" }, { "name": "laminas/laminas-loader", @@ -3263,16 +3210,16 @@ }, { "name": "laminas/laminas-log", - "version": "2.16.0", + "version": "2.16.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-log.git", - "reference": "932a4b95b4cbb64dc69fb56ad3cd5032d5995104" + "reference": "a9c16bb161311553238b8989aa587bed4b518a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-log/zipball/932a4b95b4cbb64dc69fb56ad3cd5032d5995104", - "reference": "932a4b95b4cbb64dc69fb56ad3cd5032d5995104", + "url": "https://api.github.com/repos/laminas/laminas-log/zipball/a9c16bb161311553238b8989aa587bed4b518a7e", + "reference": "a9c16bb161311553238b8989aa587bed4b518a7e", "shasum": "" }, "require": { @@ -3347,20 +3294,20 @@ "type": "community_bridge" } ], - "time": "2022-11-15T22:50:53+00:00" + "time": "2022-12-19T16:38:15+00:00" }, { "name": "laminas/laminas-mail", - "version": "2.20.0", + "version": "2.22.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mail.git", - "reference": "0516586f6bf4d47f855cbef040870ac3a324a9a8" + "reference": "1d307ff65328c00117c6d90ba0084fdd0fc2bd5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mail/zipball/0516586f6bf4d47f855cbef040870ac3a324a9a8", - "reference": "0516586f6bf4d47f855cbef040870ac3a324a9a8", + "url": "https://api.github.com/repos/laminas/laminas-mail/zipball/1d307ff65328c00117c6d90ba0084fdd0fc2bd5c", + "reference": "1d307ff65328c00117c6d90ba0084fdd0fc2bd5c", "shasum": "" }, "require": { @@ -3375,14 +3322,14 @@ "webmozart/assert": "^1.11.0" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-crypt": "^3.9.0", - "laminas/laminas-db": "^2.15.0", - "laminas/laminas-servicemanager": "^3.19", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.18.0", + "laminas/laminas-db": "^2.16", + "laminas/laminas-servicemanager": "^3.20", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.4", "symfony/process": "^6.0.11", - "vimeo/psalm": "^4.29" + "vimeo/psalm": "^5.1" }, "suggest": { "laminas/laminas-crypt": "^3.8 Crammd5 support in SMTP Auth", @@ -3424,7 +3371,7 @@ "type": "community_bridge" } ], - "time": "2022-11-18T14:39:19+00:00" + "time": "2023-01-18T08:33:48+00:00" }, { "name": "laminas/laminas-math", @@ -3628,16 +3575,16 @@ }, { "name": "laminas/laminas-mvc", - "version": "3.5.0", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc.git", - "reference": "111e08a9c27274af570260c83abe77204ccf3366" + "reference": "c54eaebe3810feaca834cc38ef0a962c89ff2431" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/111e08a9c27274af570260c83abe77204ccf3366", - "reference": "111e08a9c27274af570260c83abe77204ccf3366", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/c54eaebe3810feaca834cc38ef0a962c89ff2431", + "reference": "c54eaebe3810feaca834cc38ef0a962c89ff2431", "shasum": "" }, "require": { @@ -3707,20 +3654,20 @@ "type": "community_bridge" } ], - "time": "2022-10-21T14:19:57+00:00" + "time": "2022-12-05T14:02:56+00:00" }, { "name": "laminas/laminas-mvc-i18n", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc-i18n.git", - "reference": "b073da7b27ec8a8e8cf6df770cd58c1ba38af096" + "reference": "571f3e34afbff14351677c450f872a0dd19f9d28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc-i18n/zipball/b073da7b27ec8a8e8cf6df770cd58c1ba38af096", - "reference": "b073da7b27ec8a8e8cf6df770cd58c1ba38af096", + "url": "https://api.github.com/repos/laminas/laminas-mvc-i18n/zipball/571f3e34afbff14351677c450f872a0dd19f9d28", + "reference": "571f3e34afbff14351677c450f872a0dd19f9d28", "shasum": "" }, "require": { @@ -3740,10 +3687,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.29.0" + "phpspec/prophecy-phpunit": "^2.0.1", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-cache": "To enable caching of translation strings" @@ -3785,20 +3732,20 @@ "type": "community_bridge" } ], - "time": "2022-10-24T07:54:49+00:00" + "time": "2022-12-02T15:45:50+00:00" }, { "name": "laminas/laminas-mvc-plugin-fileprg", - "version": "1.4.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc-plugin-fileprg.git", - "reference": "c72675556a32cb42597ec3bace6ab9cef8847c04" + "reference": "0ad4cbfdb77ccbefc6b0c62c26b81514b79d58f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-fileprg/zipball/c72675556a32cb42597ec3bace6ab9cef8847c04", - "reference": "c72675556a32cb42597ec3bace6ab9cef8847c04", + "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-fileprg/zipball/0ad4cbfdb77ccbefc6b0c62c26b81514b79d58f3", + "reference": "0ad4cbfdb77ccbefc6b0c62c26b81514b79d58f3", "shasum": "" }, "require": { @@ -3809,17 +3756,17 @@ "laminas/laminas-session": "^2.12", "laminas/laminas-stdlib": "^3.6.2", "laminas/laminas-validator": "^2.15.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "laminas/laminas-mvc": "<3.0.0", "zendframework/zend-mvc-plugin-fileprg": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpunit/phpunit": "^9.5.11", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.24" + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5.27", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.4" }, "type": "library", "extra": { @@ -3856,7 +3803,7 @@ "type": "community_bridge" } ], - "time": "2022-07-24T16:24:56+00:00" + "time": "2022-12-20T12:23:36+00:00" }, { "name": "laminas/laminas-mvc-plugin-flashmessenger", @@ -3996,32 +3943,32 @@ }, { "name": "laminas/laminas-mvc-plugin-prg", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc-plugin-prg.git", - "reference": "d6e1052fbc6027b516fb325063961e192a16883e" + "reference": "4c879f6c8bb250a336513fd21666bd128ced6f9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-prg/zipball/d6e1052fbc6027b516fb325063961e192a16883e", - "reference": "d6e1052fbc6027b516fb325063961e192a16883e", + "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-prg/zipball/4c879f6c8bb250a336513fd21666bd128ced6f9f", + "reference": "4c879f6c8bb250a336513fd21666bd128ced6f9f", "shasum": "" }, "require": { "laminas/laminas-mvc": "^3.3.3", "laminas/laminas-session": "^2.12.1", "laminas/laminas-stdlib": "^3.10.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-mvc-plugin-prg": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpunit/phpunit": "^9.5.21", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.24" + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "type": "library", "extra": { @@ -4058,20 +4005,20 @@ "type": "community_bridge" } ], - "time": "2022-07-21T16:00:29+00:00" + "time": "2022-12-07T01:17:19+00:00" }, { "name": "laminas/laminas-navigation", - "version": "2.16.0", + "version": "2.18.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-navigation.git", - "reference": "f285a0849b674b7bb2fe180f3132b02b9cf9a919" + "reference": "f685f8b34db462d84617c5ad440f9f273e2558f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-navigation/zipball/f285a0849b674b7bb2fe180f3132b02b9cf9a919", - "reference": "f285a0849b674b7bb2fe180f3132b02b9cf9a919", + "url": "https://api.github.com/repos/laminas/laminas-navigation/zipball/f685f8b34db462d84617c5ad440f9f273e2558f4", + "reference": "f685f8b34db462d84617c5ad440f9f273e2558f4", "shasum": "" }, "require": { @@ -4084,17 +4031,17 @@ "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", "laminas/laminas-config": "^3.8.0", - "laminas/laminas-http": "^2.17.0", - "laminas/laminas-i18n": "^2.19.0", - "laminas/laminas-mvc": "^3.5.0", - "laminas/laminas-permissions-acl": "^2.12.0", - "laminas/laminas-router": "^3.10.0", - "laminas/laminas-servicemanager": "^3.19.0", + "laminas/laminas-http": "^2.18", + "laminas/laminas-i18n": "^2.21", + "laminas/laminas-mvc": "^3.6", + "laminas/laminas-permissions-acl": "^2.13", + "laminas/laminas-router": "^3.11", + "laminas/laminas-servicemanager": "^3.20", "laminas/laminas-uri": "^2.10.0", - "laminas/laminas-view": "^2.24.0", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.29" + "laminas/laminas-view": "^2.25", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.1" }, "suggest": { "laminas/laminas-config": "^3.7, to provide page configuration (optional, as arrays and Traversables are also allowed)", @@ -4139,20 +4086,20 @@ "type": "community_bridge" } ], - "time": "2022-10-22T13:35:40+00:00" + "time": "2022-12-06T18:03:48+00:00" }, { "name": "laminas/laminas-paginator", - "version": "2.15.1", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-paginator.git", - "reference": "7070769de9b3d94270154c4bf24d4884e65c29f3" + "reference": "d0fca60a32656fe095045d76af7ad3a3bfc297f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-paginator/zipball/7070769de9b3d94270154c4bf24d4884e65c29f3", - "reference": "7070769de9b3d94270154c4bf24d4884e65c29f3", + "url": "https://api.github.com/repos/laminas/laminas-paginator/zipball/d0fca60a32656fe095045d76af7ad3a3bfc297f9", + "reference": "d0fca60a32656fe095045d76af7ad3a3bfc297f9", "shasum": "" }, "require": { @@ -4165,15 +4112,15 @@ }, "require-dev": { "laminas/laminas-cache": "^3.6.0", - "laminas/laminas-cache-storage-adapter-memory": "^2.1.0", + "laminas/laminas-cache-storage-adapter-memory": "^2.2.0", "laminas/laminas-coding-standard": "^2.4.0", "laminas/laminas-config": "^3.8.0", "laminas/laminas-filter": "^2.23.0", "laminas/laminas-servicemanager": "^3.19.0", "laminas/laminas-view": "^2.24.0", "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.29.0" + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-cache": "Laminas\\Cache component to support cache features", @@ -4218,20 +4165,20 @@ "type": "community_bridge" } ], - "time": "2022-11-18T18:34:30+00:00" + "time": "2022-12-05T16:02:38+00:00" }, { "name": "laminas/laminas-permissions-acl", - "version": "2.12.0", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-permissions-acl.git", - "reference": "0d88f430953fbcbce382f09090db28905b90d60f" + "reference": "86cecb540cf8f2e088d70d8acef1fc9203ed5023" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-permissions-acl/zipball/0d88f430953fbcbce382f09090db28905b90d60f", - "reference": "0d88f430953fbcbce382f09090db28905b90d60f", + "url": "https://api.github.com/repos/laminas/laminas-permissions-acl/zipball/86cecb540cf8f2e088d70d8acef1fc9203ed5023", + "reference": "86cecb540cf8f2e088d70d8acef1fc9203ed5023", "shasum": "" }, "require": { @@ -4242,11 +4189,12 @@ "zendframework/zend-permissions-acl": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-servicemanager": "^3.19", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.29" + "phpbench/phpbench": "^1.2", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0" }, "suggest": { "laminas/laminas-servicemanager": "To support Laminas\\Permissions\\Acl\\Assertion\\AssertionManager plugin manager usage" @@ -4281,20 +4229,20 @@ "type": "community_bridge" } ], - "time": "2022-10-17T04:26:35+00:00" + "time": "2023-02-01T16:19:54+00:00" }, { "name": "laminas/laminas-router", - "version": "3.10.0", + "version": "3.11.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-router.git", - "reference": "84aa1047389270cc2b05e2fe85667efb592fbf5e" + "reference": "3512c28cb4ffd64a62bc9e8b685a50a6547b0a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-router/zipball/84aa1047389270cc2b05e2fe85667efb592fbf5e", - "reference": "84aa1047389270cc2b05e2fe85667efb592fbf5e", + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/3512c28cb4ffd64a62bc9e8b685a50a6547b0a11", + "reference": "3512c28cb4ffd64a62bc9e8b685a50a6547b0a11", "shasum": "" }, "require": { @@ -4308,10 +4256,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-i18n": "^2.17", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "laminas/laminas-i18n": "^2.19.0", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-i18n": "^2.15.0 if defining translatable HTTP path segments" @@ -4352,7 +4300,7 @@ "type": "community_bridge" } ], - "time": "2022-10-10T15:38:09+00:00" + "time": "2022-12-29T14:47:23+00:00" }, { "name": "laminas/laminas-serializer", @@ -4426,16 +4374,16 @@ }, { "name": "laminas/laminas-servicemanager", - "version": "3.19.0", + "version": "3.20.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "ed160729bb8721127efdaac799f9a298963345b1" + "reference": "bc2c2cbe2dd90db8b9d16b0618f542692b76ab59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/ed160729bb8721127efdaac799f9a298963345b1", - "reference": "ed160729bb8721127efdaac799f9a298963345b1", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/bc2c2cbe2dd90db8b9d16b0618f542692b76ab59", + "reference": "bc2c2cbe2dd90db8b9d16b0618f542692b76ab59", "shasum": "" }, "require": { @@ -4458,14 +4406,14 @@ "require-dev": { "composer/package-versions-deprecated": "^1.11.99.5", "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-container-config-test": "^0.7", + "laminas/laminas-container-config-test": "^0.8", "laminas/laminas-dependency-plugin": "^2.2", "mikey179/vfsstream": "^1.6.11@alpha", "ocramius/proxy-manager": "^2.14.1", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" @@ -4512,20 +4460,20 @@ "type": "community_bridge" } ], - "time": "2022-10-10T20:59:22+00:00" + "time": "2022-12-01T17:03:38+00:00" }, { "name": "laminas/laminas-session", - "version": "2.15.0", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-session.git", - "reference": "175957825cb7a43bcb6e132a5fad89800c12884f" + "reference": "9c845a0361625d5775cad6f043716196201ad41f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-session/zipball/175957825cb7a43bcb6e132a5fad89800c12884f", - "reference": "175957825cb7a43bcb6e132a5fad89800c12884f", + "url": "https://api.github.com/repos/laminas/laminas-session/zipball/9c845a0361625d5775cad6f043716196201ad41f", + "reference": "9c845a0361625d5775cad6f043716196201ad41f", "shasum": "" }, "require": { @@ -4547,7 +4495,7 @@ "mongodb/mongodb": "~1.13.0", "phpunit/phpunit": "^9.5.26", "psalm/plugin-phpunit": "^0.18.0", - "vimeo/psalm": "^4.30" + "vimeo/psalm": "^5.0" }, "suggest": { "laminas/laminas-cache": "Laminas\\Cache component", @@ -4593,20 +4541,20 @@ "type": "community_bridge" } ], - "time": "2022-11-15T20:01:10+00:00" + "time": "2022-12-04T11:15:36+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.15.0", + "version": "3.16.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "63b66bd4b696f024f42616b9d95cdb10e5109c27" + "reference": "f4f773641807c7ccee59b758bfe4ac4ba33ecb17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/63b66bd4b696f024f42616b9d95cdb10e5109c27", - "reference": "63b66bd4b696f024f42616b9d95cdb10e5109c27", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/f4f773641807c7ccee59b758bfe4ac4ba33ecb17", + "reference": "f4f773641807c7ccee59b758bfe4ac4ba33ecb17", "shasum": "" }, "require": { @@ -4617,10 +4565,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "^2.4.0", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "type": "library", "autoload": { @@ -4652,7 +4600,7 @@ "type": "community_bridge" } ], - "time": "2022-10-10T19:10:24+00:00" + "time": "2022-12-03T18:48:01+00:00" }, { "name": "laminas/laminas-text", @@ -4660,25 +4608,27 @@ "source": { "type": "git", "url": "https://github.com/laminas/laminas-text.git", - "reference": "a3de48acd4942202f58ef6815bb9369cf4bc3235" + "reference": "40f7acdb284d41553d32db811e704d6e15e415b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-text/zipball/a3de48acd4942202f58ef6815bb9369cf4bc3235", - "reference": "a3de48acd4942202f58ef6815bb9369cf4bc3235", + "url": "https://api.github.com/repos/laminas/laminas-text/zipball/40f7acdb284d41553d32db811e704d6e15e415b4", + "reference": "40f7acdb284d41553d32db811e704d6e15e415b4", "shasum": "" }, "require": { - "laminas/laminas-servicemanager": "^3.4", - "laminas/laminas-stdlib": "^3.6", - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "laminas/laminas-servicemanager": "^3.19.0", + "laminas/laminas-stdlib": "^3.7.1", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-text": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpunit/phpunit": "^9.3" + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.1" }, "default-branch": true, "type": "library", @@ -4711,7 +4661,7 @@ "type": "community_bridge" } ], - "time": "2022-03-08T15:58:35+00:00" + "time": "2022-12-11T15:36:27+00:00" }, { "name": "laminas/laminas-uri", @@ -4773,16 +4723,16 @@ }, { "name": "laminas/laminas-validator", - "version": "2.28.0", + "version": "2.30.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-validator.git", - "reference": "695bfa40b0a83dc1c5c58bdf74a03fdbeb516c39" + "reference": "b7d217b5e4951955fda9a3a5ada91b717b5c8d5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/695bfa40b0a83dc1c5c58bdf74a03fdbeb516c39", - "reference": "695bfa40b0a83dc1c5c58bdf74a03fdbeb516c39", + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/b7d217b5e4951955fda9a3a5ada91b717b5c8d5c", + "reference": "b7d217b5e4951955fda9a3a5ada91b717b5c8d5c", "shasum": "" }, "require": { @@ -4796,17 +4746,17 @@ }, "require-dev": { "laminas/laminas-coding-standard": "^2.4.0", - "laminas/laminas-db": "^2.15.0", - "laminas/laminas-filter": "^2.23.0", - "laminas/laminas-http": "^2.17.0", + "laminas/laminas-db": "^2.16", + "laminas/laminas-filter": "^2.28.1", + "laminas/laminas-http": "^2.18", "laminas/laminas-i18n": "^2.19", - "laminas/laminas-session": "^2.13.0", + "laminas/laminas-session": "^2.15", "laminas/laminas-uri": "^2.10.0", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.18.0", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.3", "psr/http-client": "^1.0.1", "psr/http-factory": "^1.0.1", - "vimeo/psalm": "^4.28" + "vimeo/psalm": "^5.0" }, "suggest": { "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", @@ -4854,20 +4804,20 @@ "type": "community_bridge" } ], - "time": "2022-11-14T08:50:44+00:00" + "time": "2023-01-30T22:41:19+00:00" }, { "name": "laminas/laminas-view", - "version": "2.25.0", + "version": "2.26.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-view.git", - "reference": "77a4b6d78445ae2f30625c5af09a05ad4e4434eb" + "reference": "955c34b8fd0d5bdb28f560e64f510f6b49c7e250" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-view/zipball/77a4b6d78445ae2f30625c5af09a05ad4e4434eb", - "reference": "77a4b6d78445ae2f30625c5af09a05ad4e4434eb", + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/955c34b8fd0d5bdb28f560e64f510f6b49c7e250", + "reference": "955c34b8fd0d5bdb28f560e64f510f6b49c7e250", "shasum": "" }, "require": { @@ -4890,24 +4840,23 @@ }, "require-dev": { "laminas/laminas-authentication": "^2.13", - "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-console": "^2.8", - "laminas/laminas-feed": "^2.19", - "laminas/laminas-filter": "^2.25", - "laminas/laminas-http": "^2.17", - "laminas/laminas-i18n": "^2.19", + "laminas/laminas-coding-standard": "~2.5.0", + "laminas/laminas-feed": "^2.20", + "laminas/laminas-filter": "^2.31", + "laminas/laminas-http": "^2.18", + "laminas/laminas-i18n": "^2.21", "laminas/laminas-modulemanager": "^2.14", - "laminas/laminas-mvc": "^3.5", - "laminas/laminas-mvc-i18n": "^1.6", + "laminas/laminas-mvc": "^3.6", + "laminas/laminas-mvc-i18n": "^1.7", "laminas/laminas-mvc-plugin-flashmessenger": "^1.9", - "laminas/laminas-navigation": "^2.16", - "laminas/laminas-paginator": "^2.15", - "laminas/laminas-permissions-acl": "^2.12", - "laminas/laminas-router": "^3.10", + "laminas/laminas-navigation": "^2.18.1", + "laminas/laminas-paginator": "^2.17", + "laminas/laminas-permissions-acl": "^2.13", + "laminas/laminas-router": "^3.11.1", "laminas/laminas-uri": "^2.10", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^9.5.28", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.4" }, "suggest": { "laminas/laminas-authentication": "Laminas\\Authentication component", @@ -4955,20 +4904,20 @@ "type": "community_bridge" } ], - "time": "2022-11-07T08:01:13+00:00" + "time": "2023-01-15T08:16:12+00:00" }, { "name": "mpdf/mpdf", - "version": "v8.1.2", + "version": "v8.1.4", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "a8a22f4874157e490d41b486053a20bec42e182c" + "reference": "add590e93b7502efafd9839a68cff99f3497b318" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/a8a22f4874157e490d41b486053a20bec42e182c", - "reference": "a8a22f4874157e490d41b486053a20bec42e182c", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/add590e93b7502efafd9839a68cff99f3497b318", + "reference": "add590e93b7502efafd9839a68cff99f3497b318", "shasum": "" }, "require": { @@ -4976,7 +4925,7 @@ "ext-mbstring": "*", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0", "php-http/message-factory": "^1.0", "psr/http-message": "^1.0", "psr/log": "^1.0 || ^2.0", @@ -4986,7 +4935,7 @@ "mockery/mockery": "^1.3.0", "mpdf/qrcode": "^1.1.0", "squizlabs/php_codesniffer": "^3.5.0", - "tracy/tracy": "^2.4", + "tracy/tracy": "~2.5", "yoast/phpunit-polyfills": "^1.0" }, "suggest": { @@ -5032,7 +4981,7 @@ "type": "custom" } ], - "time": "2022-08-15T08:15:09+00:00" + "time": "2022-12-15T11:24:39+00:00" }, { "name": "myclabs/deep-copy", @@ -5095,16 +5044,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.2", + "version": "v4.15.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", "shasum": "" }, "require": { @@ -5145,9 +5094,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" }, - "time": "2022-11-12T15:38:23+00:00" + "time": "2023-01-16T22:05:37+00:00" }, { "name": "ocramius/proxy-manager", @@ -5383,6 +5332,54 @@ }, "time": "2016-08-06T20:24:11+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "1.1.2", @@ -5585,143 +5582,54 @@ }, "time": "2017-10-23T01:57:42+00:00" }, - { - "name": "ramsey/collection", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" - }, - "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2021-10-10T03:01:02+00:00" - }, { "name": "ramsey/uuid", - "version": "4.6.0", + "version": "3.9.7", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f" + "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/ad63bc700e7d021039e30ce464eba384c4a1d40f", - "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/dc75aa439eb4c1b77f5379fd958b3dc0e6014178", + "reference": "dc75aa439eb4c1b77f5379fd958b3dc0e6014178", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10", "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.0" + "paragonie/random_compat": "^1 | ^2 | ^9.99.99", + "php": "^5.4 | ^7.0 | ^8.0", + "symfony/polyfill-ctype": "^1.8" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", + "codeception/aspect-mock": "^1 | ^2", + "doctrine/annotations": "^1.2", + "goaop/framework": "1.0.0-alpha.2 | ^1 | >=2.1.0 <=2.3.2", + "mockery/mockery": "^0.9.11 | ^1", + "moontoast/math": "^1.1", + "nikic/php-parser": "<=4.5.0", "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", + "php-mock/php-mock-phpunit": "^0.3 | ^1.1 | ^2.6", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpunit/phpunit": ">=4.8.36 <9.0.0 | >=9.3.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, "autoload": { "files": [ "src/functions.php" @@ -5734,7 +5642,23 @@ "license": [ "MIT" ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + }, + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", @@ -5742,7 +5666,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.6.0" + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid", + "wiki": "https://github.com/ramsey/uuid/wiki" }, "funding": [ { @@ -5754,7 +5680,7 @@ "type": "tidelift" } ], - "time": "2022-11-05T23:03:38+00:00" + "time": "2022-12-19T21:55:10+00:00" }, { "name": "setasign/fpdi", @@ -5830,20 +5756,21 @@ }, { "name": "stella-maris/clock", - "version": "0.1.6", + "version": "0.1.7", "source": { "type": "git", "url": "https://github.com/stella-maris-solutions/clock.git", - "reference": "a94228dac03c9a8411198ce8c8dacbbe99c930c3" + "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/a94228dac03c9a8411198ce8c8dacbbe99c930c3", - "reference": "a94228dac03c9a8411198ce8c8dacbbe99c930c3", + "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/fa23ce16019289a18bb3446fdecd45befcdd94f8", + "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8", "shasum": "" }, "require": { - "php": "^7.0|^8.0" + "php": "^7.0|^8.0", + "psr/clock": "^1.0" }, "type": "library", "autoload": { @@ -5870,49 +5797,52 @@ "psr20" ], "support": { - "issues": "https://github.com/stella-maris-solutions/clock/issues", - "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.6" + "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.7" }, - "time": "2022-09-27T15:03:11+00:00" + "time": "2022-11-25T16:15:06+00:00" }, { "name": "symfony/console", - "version": "v6.0.15", + "version": "v5.4.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb" + "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b0b910724a0a0326b4481e4f8a30abb2dd442efb", - "reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb", + "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", + "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.1|^6.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -5952,7 +5882,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.15" + "source": "https://github.com/symfony/console/tree/v5.4.19" }, "funding": [ { @@ -5968,7 +5898,7 @@ "type": "tidelift" } ], - "time": "2022-10-26T21:42:20+00:00" + "time": "2023-01-01T08:32:19+00:00" }, { "name": "symfony/deprecation-contracts", @@ -6531,17 +6461,17 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php80", + "name": "symfony/polyfill-php73", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { @@ -6562,7 +6492,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, "classmap": [ "Resources/stubs" @@ -6573,10 +6503,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6586,7 +6512,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6595,7 +6521,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -6614,17 +6540,17 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php81", + "name": "symfony/polyfill-php80", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -6645,7 +6571,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" @@ -6656,6 +6582,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6665,7 +6595,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6674,7 +6604,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -6777,16 +6707,16 @@ }, { "name": "symfony/string", - "version": "v6.0.15", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771" + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/51ac0fa0ccf132a00519b87c97e8f775fa14e771", - "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771", + "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", "shasum": "" }, "require": { @@ -6842,7 +6772,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.15" + "source": "https://github.com/symfony/string/tree/v6.0.19" }, "funding": [ { @@ -6858,20 +6788,20 @@ "type": "tidelift" } ], - "time": "2022-10-10T09:34:08+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.0.14", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "72af925ddd41ca0372d166d004bc38a00c4608cc" + "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/72af925ddd41ca0372d166d004bc38a00c4608cc", - "reference": "72af925ddd41ca0372d166d004bc38a00c4608cc", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/eb980457fa6899840fe1687e8627a03a7d8a3d52", + "reference": "eb980457fa6899840fe1687e8627a03a7d8a3d52", "shasum": "" }, "require": { @@ -6930,7 +6860,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.14" + "source": "https://github.com/symfony/var-dumper/tree/v6.0.19" }, "funding": [ { @@ -6946,20 +6876,19 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:02:12+00:00" + "time": "2023-01-20T17:44:14+00:00" }, { "name": "unicaen/app", - "version": "dev-ll-php8-bs5", + "version": "6.0.1", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/app.git", - "reference": "c89c04fd569e85ced47093441479ae1695984d65" + "reference": "19335523fd529823d959a3c6cc9eccf3b0dc63b8" }, "require": { "beberlei/assert": "^3.3", "doctrine/dbal": "^3.2", - "doctrine/doctrine-laminas-hydrator": "^3.0", "doctrine/doctrine-orm-module": "^5.0", "ext-bcmath": "*", "ext-intl": "*", @@ -6989,7 +6918,7 @@ "laminas/laminas-view": "^2.16", "mpdf/mpdf": "^8.0", "ocramius/proxy-manager": "^2.0", - "php": ">=7.4 || >=8.0", + "php": "^8.0", "unicaen/console": "dev-main" }, "require-dev": { @@ -7011,24 +6940,25 @@ ] }, "description": "Module de base des applications unicaen", - "time": "2022-11-18T15:45:01+00:00" + "time": "2023-02-08T15:57:37+00:00" }, { "name": "unicaen/auth", - "version": "dev-ll-php8-bs5", + "version": "6.0.0", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/auth.git", - "reference": "d272f41f9ea01079b7cf9fd8d488854018d19716" + "reference": "a99fec284c6cb736216e311168263935c3c94469" }, "require": { - "jasig/phpcas": "^1.4", - "ramsey/uuid": "^4.2", - "unicaen/app": "^5.0 || dev-ll-php8-bs5", - "unicaen/bjy-authorize": "^4.0 || dev-ll-php8-bs5" + "jasig/phpcas": "1.5.*", + "php": "^8.0", + "ramsey/uuid": "^3.0", + "unicaen/app": "^6.0", + "unicaen/bjy-authorize": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^5.6" + "phpunit/phpunit": "^8.0" }, "type": "library", "autoload": { @@ -7041,15 +6971,15 @@ ] }, "description": "Module d'authentification pour les applications Unicaen", - "time": "2022-10-19T14:41:20+00:00" + "time": "2023-01-26T15:43:30+00:00" }, { "name": "unicaen/bjy-authorize", - "version": "dev-ll-php8-bs5", + "version": "5.0.0", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/bjy-authorize.git", - "reference": "9840e7f87b140b8904c16e4f997e7d8dae9facdc" + "reference": "a653fd0952b277c0add239f70b60e936546b548b" }, "require": { "doctrine/common": "^3.2", @@ -7063,8 +6993,8 @@ "laminas/laminas-permissions-acl": "^2.9", "laminas/laminas-servicemanager": "^3.10", "laminas/laminas-view": "^2.16", - "php": ">=7.4", - "unicaen/zfc-user": "dev-ll-php8" + "php": "^8.0", + "unicaen/zfc-user": "^5.0" }, "require-dev": { "laminas/laminas-developer-tools": "^1.2", @@ -7105,15 +7035,15 @@ "zf2", "zfc-user" ], - "time": "2022-10-13T08:37:06+00:00" + "time": "2023-01-26T15:53:35+00:00" }, { "name": "unicaen/code", - "version": "7.1", + "version": "6.0.5", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/code.git", - "reference": "b81326b34e8a993d771fa2aa682322e1908f6f9a" + "reference": "86df91b5c75ae57ebdbd8f2dcf8c3c2c1df76adc" }, "require": { "easybook/geshi": ">=1.0", @@ -7130,7 +7060,7 @@ ] }, "description": "Boite à outils pour la programmation avec la bibliothèque Unicaen", - "time": "2022-10-05T15:04:59+00:00" + "time": "2022-12-02T10:15:21+00:00" }, { "name": "unicaen/console", @@ -7138,7 +7068,7 @@ "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/console.git", - "reference": "83543c8ae6232d01723954feede3b0706d5c0b4f" + "reference": "4d52eee8c0b2ae238aec8fa692685de455eaf7ca" }, "require": { "laminas/laminas-stdlib": "^3.2", @@ -7178,18 +7108,18 @@ ] }, "description": "Build console applications using getopt syntax or routing, complete with prompts", - "time": "2022-01-10T08:49:31+00:00" + "time": "2022-11-28T12:26:08+00:00" }, { "name": "unicaen/import", - "version": "dev-ll-php8-bs5", + "version": "6.0.0", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/import.git", - "reference": "7d3a988b1734751adf872646eb14287dc293ae30" + "reference": "bf75b4c3140056f2fe19085ddc7d6b8abe331b71" }, "require": { - "unicaen/auth": "^4.0 || dev-ll-php8-bs5" + "unicaen/auth": "^6.0" }, "require-dev": { "phpunit/phpunit": "^5.7" @@ -7204,15 +7134,15 @@ ] }, "description": "Module d'import de données vers une base Oracle", - "time": "2022-11-17T16:03:09+00:00" + "time": "2023-02-03T15:01:18+00:00" }, { "name": "unicaen/open-document", - "version": "4.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/open-document.git", - "reference": "079bff8110b1ccd0a99557aee33f87eb867813a5" + "reference": "3c71e1a7f2289bc5ca774dbc4a0b45bd9382a462" }, "type": "library", "autoload": { @@ -7224,7 +7154,7 @@ ] }, "description": "Module Unicaen de traitement des fichiers au format OpenDocument", - "time": "2021-11-23T14:15:57+00:00" + "time": "2023-02-08T10:58:46+00:00" }, { "name": "unicaen/siham", @@ -7261,14 +7191,14 @@ }, { "name": "unicaen/tbl", - "version": "dev-ll-php8-bs5", + "version": "6.0.0", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/tbl.git", - "reference": "5e98da354c13abd914813fe9b77a7bca783d5c1b" + "reference": "ddef0a769684f7dcb705b7c975470fce0143c1b5" }, "require": { - "unicaen/app": "^4.0 || dev-ll-php8-bs5" + "unicaen/app": "^6.0" }, "type": "library", "autoload": { @@ -7280,15 +7210,15 @@ ] }, "description": "Module Unicaen de gestion de tableaux de bord Oracle", - "time": "2022-10-13T08:39:16+00:00" + "time": "2023-02-03T14:58:23+00:00" }, { "name": "unicaen/zfc-user", - "version": "dev-ll-php8", + "version": "5.0.0", "source": { "type": "git", "url": "https://git.unicaen.fr/lib/unicaen/zfc-user.git", - "reference": "a007eff8a5ff121e4b40ae8ab7662c28d5907937" + "reference": "fad17a7b3437f99dfb86bed2ef58b5dc3c8be82d" }, "require": { "laminas/laminas-authentication": "^2.9", @@ -7310,7 +7240,7 @@ "laminas/laminas-stdlib": "^3.6", "laminas/laminas-validator": "^2.15", "laminas/laminas-view": "^2.16", - "php": "^7.4 || ^8.0" + "php": "^8.0" }, "require-dev": { "laminas/laminas-captcha": "^2.6", @@ -7331,7 +7261,7 @@ ] }, "description": "A generic user registration and authentication module for ZF2. Supports Laminas\\Db and Doctrine2.", - "time": "2022-01-05T15:54:38+00:00" + "time": "2023-01-26T15:48:20+00:00" }, { "name": "webimpress/safe-writer", @@ -7762,16 +7692,16 @@ }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", + "reference": "cfa81ea1d35294d64adb9c68aa4cb9e92400e53f", "shasum": "" }, "require": { @@ -7807,9 +7737,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.1.0" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2022-12-08T20:46:14+00:00" }, { "name": "pdepend/pdepend", @@ -8381,16 +8311,16 @@ }, { "name": "symfony/config", - "version": "v6.0.11", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "956d4ec5df274dda91a4cedfccc2bfd063f6f649" + "reference": "db4fc45c24e0c3e2198e68ada9d7f90daa1f97e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/956d4ec5df274dda91a4cedfccc2bfd063f6f649", - "reference": "956d4ec5df274dda91a4cedfccc2bfd063f6f649", + "url": "https://api.github.com/repos/symfony/config/zipball/db4fc45c24e0c3e2198e68ada9d7f90daa1f97e3", + "reference": "db4fc45c24e0c3e2198e68ada9d7f90daa1f97e3", "shasum": "" }, "require": { @@ -8439,7 +8369,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.0.11" + "source": "https://github.com/symfony/config/tree/v6.0.19" }, "funding": [ { @@ -8455,20 +8385,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:10:44+00:00" + "time": "2023-01-09T04:36:00+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.0.13", + "version": "v6.0.20", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6339881a2970b9f6bf6f4d2b07a540b4e3740f98" + "reference": "359806e1adebd1c43e18e5ea22acd14bef7fcf8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6339881a2970b9f6bf6f4d2b07a540b4e3740f98", - "reference": "6339881a2970b9f6bf6f4d2b07a540b4e3740f98", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/359806e1adebd1c43e18e5ea22acd14bef7fcf8c", + "reference": "359806e1adebd1c43e18e5ea22acd14bef7fcf8c", "shasum": "" }, "require": { @@ -8527,7 +8457,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.0.13" + "source": "https://github.com/symfony/dependency-injection/tree/v6.0.20" }, "funding": [ { @@ -8543,20 +8473,20 @@ "type": "tidelift" } ], - "time": "2022-09-28T16:00:20+00:00" + "time": "2023-01-30T15:41:07+00:00" }, { "name": "symfony/filesystem", - "version": "v6.0.13", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3adca49133bd055ebe6011ed1e012be3c908af79" + "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3adca49133bd055ebe6011ed1e012be3c908af79", - "reference": "3adca49133bd055ebe6011ed1e012be3c908af79", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214", + "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214", "shasum": "" }, "require": { @@ -8590,7 +8520,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.13" + "source": "https://github.com/symfony/filesystem/tree/v6.0.19" }, "funding": [ { @@ -8606,7 +8536,86 @@ "type": "tidelift" } ], - "time": "2022-09-21T20:25:27+00:00" + "time": "2023-01-20T17:44:14+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" }, { "name": "tysonandre/var_representation_polyfill", @@ -8674,10 +8683,6 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "unicaen/app": 20, - "unicaen/auth": 20, - "unicaen/import": 20, - "unicaen/tbl": 20, "laminas/laminas-cache-storage-adapter-memory": 20, "laminas/laminas-text": 20 }, @@ -8687,5 +8692,5 @@ "php": ">=8.0" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/config/application.config.php b/config/application.config.php index ffbfc058b3cd45809a9386c0a34d51607a9855e1..fd74fe0cc30a9e4e71093454e2a28d708cf54e00 100755 --- a/config/application.config.php +++ b/config/application.config.php @@ -68,11 +68,35 @@ class AppConfig public static function getEnv() { + $forcedEnv = self::get('dev', 'forced-env', false); + if (false !== $forcedEnv) return $forcedEnv; + return getenv('APPLICATION_ENV') ?: 'dev'; } + public static function inDev() + { + return 'dev' == self::getEnv(); + } + + + + public static function inTest() + { + return 'test' == self::getEnv(); + } + + + + public static function inProd() + { + return 'prod' == self::getEnv(); + } + + + private static function makeGlobal() { $env = self::getEnv(); @@ -108,20 +132,24 @@ class AppConfig 'Service', 'Enseignement', 'Referentiel', + 'Mission', + 'Paiement', + 'OffreFormation', 'Plafond', 'Indicateur', 'ExportRh', + 'Dossier', ]; if (!self::inConsole()) { array_unshift($modules, 'BjyAuthorize'); // ne charge BjyAuthorize QUE si on n'est pas en mode console } - if ('dev' == $env) { + if (self::inDev()) { $modules[] = 'Laminas\DeveloperTools'; } - if (self::inConsole() || 'dev' == $env) { + if (self::inConsole() || self::inDev()) { $modules[] = 'UnicaenCode'; } @@ -132,15 +160,15 @@ class AppConfig 'modules' => $modules, 'module_listener_options' => [ 'config_glob_paths' => [ - 'config/autoload/{,*.}{global,local' . ('dev' == $env ? ',dev' : '') . '}.php', + 'config/autoload/{,*.}{global,local' . (self::inDev() ? ',dev' : '') . '}.php', ], 'module_paths' => [ './module', './vendor', ], 'cache_dir' => 'cache/', - 'config_cache_enabled' => ('prod' == $env && !self::inConsole()), - 'module_map_cache_enabled' => ('prod' == $env && !self::inConsole()), + 'config_cache_enabled' => (self::inProd() && !self::inConsole()), + 'module_map_cache_enabled' => (self::inProd() && !self::inConsole()), ], ]; } diff --git a/config/autoload/laminas-developer-tools.dev.php b/config/autoload/laminas-developer-tools.dev.php index bde09182414c6c524522fbb655e7230f10efdc44..2ccb96183412c4a462654013796fce0da1ca1e44 100644 --- a/config/autoload/laminas-developer-tools.dev.php +++ b/config/autoload/laminas-developer-tools.dev.php @@ -103,7 +103,7 @@ return [ * Expects: bool * Default: false */ - 'enabled' => false, + 'enabled' => AppConfig::get('dev', 'toolbar', true), /** * If enabled, every empty collector will be hidden. @@ -148,11 +148,12 @@ return [ * Expects: array */ 'entries' => [ - 'config' => false, - 'db' => false, - 'doctrine.mapping_collector.orm_default' => false, - //'bjy_authorize_role_collector' => false, - //'request' => true, + 'config' => false, + 'db' => false, + 'doctrine.mapping_collector.orm_default' => false, + 'UnicaenApp\DeveloperTools\MessageCollectorService' => false, + 'bjy_authorize_role_collector' => false, + //'request' => true, //'memory' => true, ], ], diff --git a/config/autoload/unicaen-app.global.php b/config/autoload/unicaen-app.global.php index d50eacae513720fea64eeb1c31fb8e784d1c057b..ed5d118888344f6033019bd4f63f062edc7bb735 100755 --- a/config/autoload/unicaen-app.global.php +++ b/config/autoload/unicaen-app.global.php @@ -3,7 +3,7 @@ $versionFile = dirname(dirname(__DIR__)) . '/VERSION'; if (file_exists($versionFile)) { $version = file_get_contents($versionFile); } else { - $version = AppConfig::getEnv() . ' (pas de numéro)'; + $version = AppConfig::getEnv(); } return [ diff --git a/data/Etats de sortie/modele_contrat.odt b/data/Etats de sortie/contrat.odt similarity index 100% rename from data/Etats de sortie/modele_contrat.odt rename to data/Etats de sortie/contrat.odt diff --git a/data/Etats de sortie/contrat.php b/data/Etats de sortie/contrat.php new file mode 100644 index 0000000000000000000000000000000000000000..63f2f252179c020d5c697ecb5db1faa604513848 --- /dev/null +++ b/data/Etats de sortie/contrat.php @@ -0,0 +1,21 @@ +<?php + +$mainData = reset($data); +$data = []; +$exemplaires = []; + +for ($i = 1; $i <= 3; $i++) { + $exemplaire = $mainData['exemplaire' . $i] ?? '0'; + if ($exemplaire !== '0') { + $exemplaires[$i] = $exemplaire; + } + unset($mainData['exemplaire' . $i]); +} + +foreach ($exemplaires as $exemplaire) { + $newExemplaire = $mainData; + $newExemplaire['exemplaire'] = $exemplaire; + $data[] = $newExemplaire; +} + +return $data; \ No newline at end of file diff --git a/data/Etats de sortie/export_services_csv.php b/data/Etats de sortie/export_services_csv.php index c2a7c80a138de4e483ce118353f97c427837573c..acff26fee79b159fdfccc14547b651f4f2e1c06f 100644 --- a/data/Etats de sortie/export_services_csv.php +++ b/data/Etats de sortie/export_services_csv.php @@ -13,6 +13,8 @@ // initialisation +use OffreFormation\Entity\Db\TypeIntervention; + $res = []; $shown = []; $typesIntervention = []; @@ -34,12 +36,12 @@ $numericColunms = [ 'total', 'solde', ]; -$dateColumns = [ +$dateColumns = [ 'service-date-modification', 'intervenant-date-naissance', 'date-cloture-service-realise', ]; -$addableColumns = [ +$addableColumns = [ '__total__', 'heures-ref', 'service-fi', @@ -60,7 +62,9 @@ $dateExtraction = new \DateTime(); foreach ($data as $d) { $sid = $d['SERVICE_ID'] ? $d['SERVICE_ID'] . '_' . $d['PERIODE_ID'] : $d['ID']; $sid .= '_' . $d['MOTIF_NON_PAIEMENT_ID']; - $ds = [ + $sid .= '_' . $d['TAG_ID']; + + $ds = [ '__total__' => (float)$d['HEURES'] + (float)$d['HEURES_NON_PAYEES'] + (float)$d['HEURES_REF'] + (float)$d['TOTAL'], 'type-etat' => $d['TYPE_ETAT'], 'date' => $dateExtraction, @@ -99,6 +103,7 @@ foreach ($data as $d) { 'periode-libelle' => $d['PERIODE_LIBELLE'], 'heures-non-payees-libelle' => $d['MOTIF_NON_PAIEMENT'], + 'tag' => $d['TAG'], // types d'intervention traités en aval 'heures-ref' => (float)$d['HEURES_REF'], @@ -116,22 +121,18 @@ foreach ($data as $d) { 'date-cloture-service-realise' => $d['DATE_CLOTURE_REALISE'], ]; - if ( - $ds['heures-service-statutaire'] > 0 - && $ds['heures-service-statutaire'] + $ds['heures-service-du-modifie'] == 0 - && empty($ds['etape-code']) - ) { - $ds['__total__']++; // pour que le cas spécifique des décharges totales soit pris en compte + if ($ds['heures-service-du-modifie'] != 0) { + $ds['__total__']++; // pour que les modifs de service apparaissent } if ($d['TYPE_INTERVENTION_ID'] != null) { $tid = $d['TYPE_INTERVENTION_ID']; if (!isset($typesIntervention[$tid])) { - $typesIntervention[$tid] = $entityManager->getRepository(\Application\Entity\Db\TypeIntervention::class)->find($tid); + $typesIntervention[$tid] = $entityManager->getRepository(TypeIntervention::class)->find($tid); } - $typeIntervention = $typesIntervention[$tid]; + $typeIntervention = $typesIntervention[$tid]; $invertTi['type-intervention-' . $typeIntervention->getCode()] = $typeIntervention->getId(); - $ds['type-intervention-' . $typeIntervention->getCode()] = (float)$d['HEURES']; + $ds['type-intervention-' . $typeIntervention->getCode()] = (float)$d['HEURES']; } foreach ($ds as $column => $value) { if (!isset($shown[$column])) $shown[$column] = 0; @@ -204,26 +205,28 @@ $head = [ 'element-source-libelle' => 'Source enseignement', 'periode-libelle' => 'Période', 'heures-non-payees-libelle' => 'Motif de non paiement', + 'tag' => 'Tags', + ]; uasort($typesIntervention, function ($ti1, $ti2) { return $ti1->getOrdre() - $ti2->getOrdre(); }); foreach ($typesIntervention as $typeIntervention) { - /* @var $typeIntervention \Application\Entity\Db\TypeIntervention */ + /* @var \OffreFormation\Entity\Db\TypeIntervention $typeIntervention */ $head['type-intervention-' . $typeIntervention->getCode()] = $typeIntervention->getCode(); } -$head['heures-ref'] = 'Référentiel'; -$head['service-fi'] = 'HETD Service FI'; -$head['service-fa'] = 'HETD Service FA'; -$head['service-fc'] = 'HETD Service FC'; -$head['service-referentiel'] = 'HETD Service Référentiel'; -$head['heures-compl-fi'] = 'HETD Compl. FI'; -$head['heures-compl-fa'] = 'HETD Compl. FA'; -$head['heures-compl-fc'] = 'HETD Compl. FC'; -$head['heures-compl-fc-majorees'] = 'HETD Compl. FC D714-60'; -$head['heures-compl-referentiel'] = 'HETD Compl. référentiel'; -$head['total'] = 'Total HETD'; -$head['solde'] = 'Solde HETD'; +$head['heures-ref'] = 'Référentiel'; +$head['service-fi'] = 'HETD Service FI'; +$head['service-fa'] = 'HETD Service FA'; +$head['service-fc'] = 'HETD Service FC'; +$head['service-referentiel'] = 'HETD Service Référentiel'; +$head['heures-compl-fi'] = 'HETD Compl. FI'; +$head['heures-compl-fa'] = 'HETD Compl. FA'; +$head['heures-compl-fc'] = 'HETD Compl. FC'; +$head['heures-compl-fc-majorees'] = 'HETD Compl. FC D714-60'; +$head['heures-compl-referentiel'] = 'HETD Compl. référentiel'; +$head['total'] = 'Total HETD'; +$head['solde'] = 'Solde HETD'; $head['date-cloture-service-realise'] = 'Clôture du service réalisé'; // suppression des informations superflues diff --git a/data/ddl/index/EP_TAUX_REMU_FK.php b/data/ddl/index/EP_TAUX_REMU_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..7a63116f8e387fb9abba040003f1afc79a1f2e23 --- /dev/null +++ b/data/ddl/index/EP_TAUX_REMU_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'EP_TAUX_REMU_FK', + 'unique' => FALSE, + 'table' => 'ELEMENT_PEDAGOGIQUE', + 'columns' => [ + 'TAUX_REMU_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_ETUDIANT_INTERVENANT_FK.php b/data/ddl/index/MISSION_ETUDIANT_INTERVENANT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..59e0281c645a91aebe39de7d1e4a3fe680046678 --- /dev/null +++ b/data/ddl/index/MISSION_ETUDIANT_INTERVENANT_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT_INTERVENANT_FK', + 'unique' => FALSE, + 'table' => 'MISSION_ETUDIANT', + 'columns' => [ + 'INTERVENANT_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_ETUDIANT_MISSION_FK.php b/data/ddl/index/MISSION_ETUDIANT_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..4bd8afc9522e9bb3fd2f59005a86b9c4a4e2bd5f --- /dev/null +++ b/data/ddl/index/MISSION_ETUDIANT_MISSION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT_MISSION_FK', + 'unique' => FALSE, + 'table' => 'MISSION_ETUDIANT', + 'columns' => [ + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_ETUDIANT_PK.php b/data/ddl/index/MISSION_ETUDIANT_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..37cb6201095bc595a9365979ed43a7df7aff0d76 --- /dev/null +++ b/data/ddl/index/MISSION_ETUDIANT_PK.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT_PK', + 'unique' => TRUE, + 'table' => 'MISSION_ETUDIANT', + 'columns' => [ + 'INTERVENANT_ID', + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_HCFK.php b/data/ddl/index/MISSION_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..0e9b8f43413c3bec15154d092c06e735bc895458 --- /dev/null +++ b/data/ddl/index/MISSION_HCFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_HCFK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'HISTO_CREATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_HDFK.php b/data/ddl/index/MISSION_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..a7816f5cf75972cb8c91adfeed768b05ec8675a0 --- /dev/null +++ b/data/ddl/index/MISSION_HDFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_HDFK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_HMFK.php b/data/ddl/index/MISSION_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..081fd7c57392d3b2378de349b9c3f1909bd2df59 --- /dev/null +++ b/data/ddl/index/MISSION_HMFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_HMFK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'HISTO_MODIFICATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_INTERVENANT_FK.php b/data/ddl/index/MISSION_INTERVENANT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..bddb174a4f7074839f32b1623b33ac695d2334b3 --- /dev/null +++ b/data/ddl/index/MISSION_INTERVENANT_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_INTERVENANT_FK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'INTERVENANT_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_PK.php b/data/ddl/index/MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..8e6688e9ac39790d1f57533128b0709e1d179753 --- /dev/null +++ b/data/ddl/index/MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_PK', + 'unique' => TRUE, + 'table' => 'MISSION', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_STRUCTURE_FK.php b/data/ddl/index/MISSION_STRUCTURE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..35b75f416b3068df9afe9dc5b4c090eea7051523 --- /dev/null +++ b/data/ddl/index/MISSION_STRUCTURE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_STRUCTURE_FK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'STRUCTURE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_TAUX_REMU_FK.php b/data/ddl/index/MISSION_TAUX_REMU_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..8d8da7dc6769a7ff524ccf3b5b6a6b6f960d6e16 --- /dev/null +++ b/data/ddl/index/MISSION_TAUX_REMU_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_TAUX_REMU_FK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'TAUX_REMU_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/MISSION_TYPE_MISSION_FK.php b/data/ddl/index/MISSION_TYPE_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..11ec388b01990523be12d64e3e0565a82e359de8 --- /dev/null +++ b/data/ddl/index/MISSION_TYPE_MISSION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_TYPE_MISSION_FK', + 'unique' => FALSE, + 'table' => 'MISSION', + 'columns' => [ + 'TYPE_MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/SERVICE_REFERENTIEL_TAG_FK.php b/data/ddl/index/SERVICE_REFERENTIEL_TAG_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..eafee213224c8f159232b714e97c1b818048ce95 --- /dev/null +++ b/data/ddl/index/SERVICE_REFERENTIEL_TAG_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'SERVICE_REFERENTIEL_TAG_FK', + 'unique' => FALSE, + 'table' => 'SERVICE_REFERENTIEL', + 'columns' => [ + 'TAG_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/SERV_REF_MOTIF_NON_PAIEMENT_FK.php b/data/ddl/index/SERV_REF_MOTIF_NON_PAIEMENT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..af73af2a3fc6f53cebe950fea738bb82d8d2b869 --- /dev/null +++ b/data/ddl/index/SERV_REF_MOTIF_NON_PAIEMENT_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'SERV_REF_MOTIF_NON_PAIEMENT_FK', + 'unique' => FALSE, + 'table' => 'SERVICE_REFERENTIEL', + 'columns' => [ + 'MOTIF_NON_PAIEMENT_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAG_HCFK.php b/data/ddl/index/TAG_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..9cbe20768ef1dcdafc69487577a292809b5d747a --- /dev/null +++ b/data/ddl/index/TAG_HCFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_HCFK', + 'unique' => FALSE, + 'table' => 'TAG', + 'columns' => [ + 'HISTO_CREATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAG_HDFK.php b/data/ddl/index/TAG_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..9d2c92fcf5ac8e5c1ebd9f481a7e2dab79fd3488 --- /dev/null +++ b/data/ddl/index/TAG_HDFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_HDFK', + 'unique' => FALSE, + 'table' => 'TAG', + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAG_HMFK.php b/data/ddl/index/TAG_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..6edd52af48cf0d3bff919eed408835615502bf98 --- /dev/null +++ b/data/ddl/index/TAG_HMFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_HMFK', + 'unique' => FALSE, + 'table' => 'TAG', + 'columns' => [ + 'HISTO_MODIFICATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAG_PK.php b/data/ddl/index/TAG_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..1e18cd8f325735bb8d2d91324dca19fe91921976 --- /dev/null +++ b/data/ddl/index/TAG_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_PK', + 'unique' => TRUE, + 'table' => 'TAG', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAUX_REMU_HCFK.php b/data/ddl/index/TAUX_REMU_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..787794f51ebb350f76f93295618cce3b49a97e49 --- /dev/null +++ b/data/ddl/index/TAUX_REMU_HCFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_HCFK', + 'unique' => FALSE, + 'table' => 'TAUX_REMU', + 'columns' => [ + 'HISTO_CREATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAUX_REMU_HDFK.php b/data/ddl/index/TAUX_REMU_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..846edab6f8a32063bf8fef2b00ef0880e4ad8f08 --- /dev/null +++ b/data/ddl/index/TAUX_REMU_HDFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_HDFK', + 'unique' => FALSE, + 'table' => 'TAUX_REMU', + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAUX_REMU_HMFK.php b/data/ddl/index/TAUX_REMU_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..5dde15425fb3fc28757b1cf27e233497e6a120b6 --- /dev/null +++ b/data/ddl/index/TAUX_REMU_HMFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_HMFK', + 'unique' => FALSE, + 'table' => 'TAUX_REMU', + 'columns' => [ + 'HISTO_MODIFICATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAUX_REMU_PK.php b/data/ddl/index/TAUX_REMU_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..c008d14c941f4d32a7f46aae35896b468cac7d01 --- /dev/null +++ b/data/ddl/index/TAUX_REMU_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_PK', + 'unique' => TRUE, + 'table' => 'TAUX_REMU', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAUX_REMU_VALEUR_PK.php b/data/ddl/index/TAUX_REMU_VALEUR_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..ba11991cd47a1c344fef886b49da00cb1f544258 --- /dev/null +++ b/data/ddl/index/TAUX_REMU_VALEUR_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_VALEUR_PK', + 'unique' => TRUE, + 'table' => 'TAUX_REMU_VALEUR', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TAUX_REMU_VALEUR_UN.php b/data/ddl/index/TAUX_REMU_VALEUR_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..ddbaa709c2ed754db0ba55425c1cd6459d56a539 --- /dev/null +++ b/data/ddl/index/TAUX_REMU_VALEUR_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_VALEUR_UN', + 'unique' => TRUE, + 'table' => 'TAUX_REMU_VALEUR', + 'columns' => [ + 'DATE_EFFET', + 'TAUX_REMU_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_ANNEE_FK.php b/data/ddl/index/TBL_MISSION_ANNEE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..f60312a1aac851bb24c9350d4b3eb8a44fd58f0b --- /dev/null +++ b/data/ddl/index/TBL_MISSION_ANNEE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_ANNEE_FK', + 'unique' => FALSE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'ANNEE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_INTERVENANT_FK.php b/data/ddl/index/TBL_MISSION_INTERVENANT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..8210c712060be105c3a6bfc8f7adb1179c855765 --- /dev/null +++ b/data/ddl/index/TBL_MISSION_INTERVENANT_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_INTERVENANT_FK', + 'unique' => FALSE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'INTERVENANT_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_INT_STRUCTURE_FK.php b/data/ddl/index/TBL_MISSION_INT_STRUCTURE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..96be02f1245cecf90274633c7f1ffad6f167e103 --- /dev/null +++ b/data/ddl/index/TBL_MISSION_INT_STRUCTURE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_INT_STRUCTURE_FK', + 'unique' => FALSE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'INTERVENANT_STRUCTURE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_MISSION_FK.php b/data/ddl/index/TBL_MISSION_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..97602fcb0744beb82cc83f9280ee438540dd665f --- /dev/null +++ b/data/ddl/index/TBL_MISSION_MISSION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_MISSION_FK', + 'unique' => FALSE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_PK.php b/data/ddl/index/TBL_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..848c75aa509a3fe1f3c31c1c850098f6ac115748 --- /dev/null +++ b/data/ddl/index/TBL_MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_PK', + 'unique' => TRUE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_STRUCTURE_FK.php b/data/ddl/index/TBL_MISSION_STRUCTURE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..8b0c5af6b707e957d866997f277f34955c9bcfb4 --- /dev/null +++ b/data/ddl/index/TBL_MISSION_STRUCTURE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_STRUCTURE_FK', + 'unique' => FALSE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'STRUCTURE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TBL_MISSION_UN.php b/data/ddl/index/TBL_MISSION_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..651d09fee305e6e70a0be3266581e05eee6f43b9 --- /dev/null +++ b/data/ddl/index/TBL_MISSION_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_UN', + 'unique' => TRUE, + 'table' => 'TBL_MISSION', + 'columns' => [ + 'INTERVENANT_ID', + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TI_STATUT_STATUT_UN.php b/data/ddl/index/TI_STATUT_STATUT_UN.php index 81161467e79dca1b9dc2d714682344ab5708f92b..b72abfd5d5b67ae0503b8f94e7fdb23cea9b515f 100644 --- a/data/ddl/index/TI_STATUT_STATUT_UN.php +++ b/data/ddl/index/TI_STATUT_STATUT_UN.php @@ -9,6 +9,7 @@ return [ 'columns' => [ 'TYPE_INTERVENTION_ID', 'STATUT_ID', + 'HISTO_DESTRUCTION', ], ]; diff --git a/data/ddl/index/TRV_TAUX_FK.php b/data/ddl/index/TRV_TAUX_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..e7c6bbf472390a42169eda960b578eb0bce2c1d4 --- /dev/null +++ b/data/ddl/index/TRV_TAUX_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TRV_TAUX_FK', + 'unique' => FALSE, + 'table' => 'TAUX_REMU_VALEUR', + 'columns' => [ + 'TAUX_REMU_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TR_CODE_UN.php b/data/ddl/index/TR_CODE_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..3f30d5c6e6bb1bca7c3ae82276790d8213be2b0a --- /dev/null +++ b/data/ddl/index/TR_CODE_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TR_CODE_UN', + 'unique' => TRUE, + 'table' => 'TAUX_REMU', + 'columns' => [ + 'CODE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TR_LIB_UN.php b/data/ddl/index/TR_LIB_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..34190beaa00736c052070b3a3498019e2fcfa957 --- /dev/null +++ b/data/ddl/index/TR_LIB_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TR_LIB_UN', + 'unique' => TRUE, + 'table' => 'TAUX_REMU', + 'columns' => [ + 'LIBELLE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_ANNEE_FK.php b/data/ddl/index/TYPE_MISSION_ANNEE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..262ce381a47b9a199d6a35bc0bc9bccb88784b11 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_ANNEE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_ANNEE_FK', + 'unique' => FALSE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'ANNEE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_HCFK.php b/data/ddl/index/TYPE_MISSION_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..6921c5d8ba43076484782ec6ccec1c7fccc9fc41 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_HCFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_HCFK', + 'unique' => FALSE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'HISTO_CREATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_HDFK.php b/data/ddl/index/TYPE_MISSION_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..d049a59f8abd3506925f7aab13eeba4dc8dc3995 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_HDFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_HDFK', + 'unique' => FALSE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_HMFK.php b/data/ddl/index/TYPE_MISSION_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..4d021a357bd5fcea87ead83434bb8fd955dcf2c1 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_HMFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_HMFK', + 'unique' => FALSE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'HISTO_MODIFICATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_PK.php b/data/ddl/index/TYPE_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..2dfcbb7165bc817471b9490914d2e434cb236fd6 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_PK', + 'unique' => TRUE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_TAUX_REMU_FK.php b/data/ddl/index/TYPE_MISSION_TAUX_REMU_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..672aa6632eb71e7eaf3e4bfe35125f922e6454e9 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_TAUX_REMU_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_TAUX_REMU_FK', + 'unique' => FALSE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'TAUX_REMU_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/TYPE_MISSION_UN.php b/data/ddl/index/TYPE_MISSION_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..f81da397a16bd45d925fe11413ec72050505d739 --- /dev/null +++ b/data/ddl/index/TYPE_MISSION_UN.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_UN', + 'unique' => TRUE, + 'table' => 'TYPE_MISSION', + 'columns' => [ + 'CODE', + 'ANNEE_ID', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VALIDATION_MISSION_PK.php b/data/ddl/index/VALIDATION_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..5a0022cc47d29a7fcb2b1a33338f642409af0187 --- /dev/null +++ b/data/ddl/index/VALIDATION_MISSION_PK.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISSION_PK', + 'unique' => TRUE, + 'table' => 'VALIDATION_MISSION', + 'columns' => [ + 'VALIDATION_ID', + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VALIDATION_MISS_MISSION_FK.php b/data/ddl/index/VALIDATION_MISS_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..9e834aebb93ecf9ac157b033a6a77eccf519e0e6 --- /dev/null +++ b/data/ddl/index/VALIDATION_MISS_MISSION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISS_MISSION_FK', + 'unique' => FALSE, + 'table' => 'VALIDATION_MISSION', + 'columns' => [ + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VALIDATION_MISS_VALIDATION_FK.php b/data/ddl/index/VALIDATION_MISS_VALIDATION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..dd58dcb999df86a411d494e64b3fcbb1d61e4677 --- /dev/null +++ b/data/ddl/index/VALIDATION_MISS_VALIDATION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISS_VALIDATION_FK', + 'unique' => FALSE, + 'table' => 'VALIDATION_MISSION', + 'columns' => [ + 'VALIDATION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VALIDATION_VOL_HORAIRE_MISS_PK.php b/data/ddl/index/VALIDATION_VOL_HORAIRE_MISS_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..4af41e105294e3bc7b50297fe959a37181613cfa --- /dev/null +++ b/data/ddl/index/VALIDATION_VOL_HORAIRE_MISS_PK.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_VOL_HORAIRE_MISS_PK', + 'unique' => TRUE, + 'table' => 'VALIDATION_VOL_HORAIRE_MISS', + 'columns' => [ + 'VALIDATION_ID', + 'VOLUME_HORAIRE_MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VHM_CONTRAT_FK.php b/data/ddl/index/VHM_CONTRAT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..f3c55f3bca9cb9da63c117f952892a8f911b4fce --- /dev/null +++ b/data/ddl/index/VHM_CONTRAT_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VHM_CONTRAT_FK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'CONTRAT_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VHM_MISSION_FK.php b/data/ddl/index/VHM_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..9970224fcae30e61d4e2a94c81ef951883bf4ac5 --- /dev/null +++ b/data/ddl/index/VHM_MISSION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VHM_MISSION_FK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VHM_TYPE_VOLUME_HORAIRE_FK.php b/data/ddl/index/VHM_TYPE_VOLUME_HORAIRE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..9f30f22a1a8271296fdf4e6e05951dbd91093725 --- /dev/null +++ b/data/ddl/index/VHM_TYPE_VOLUME_HORAIRE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VHM_TYPE_VOLUME_HORAIRE_FK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'TYPE_VOLUME_HORAIRE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_MISSION_HCFK.php b/data/ddl/index/VOLUME_HORAIRE_MISSION_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..d168c481a99517c250a2c5ed9e2d3a9f5c1f6323 --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_MISSION_HCFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_HCFK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'HISTO_CREATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_MISSION_HDFK.php b/data/ddl/index/VOLUME_HORAIRE_MISSION_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..93399714e900df05b42f051e2089e05de56bf75f --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_MISSION_HDFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_HDFK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_MISSION_HMFK.php b/data/ddl/index/VOLUME_HORAIRE_MISSION_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..8e852e1dffc2d94d8bf6cd60c94ebe3061a7fa74 --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_MISSION_HMFK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_HMFK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'HISTO_MODIFICATEUR_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_MISSION_PK.php b/data/ddl/index/VOLUME_HORAIRE_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..fe56184bf7e9a8f9426ce0da6e02aea6b7828015 --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_PK', + 'unique' => TRUE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_MISSI_SOURCE_FK.php b/data/ddl/index/VOLUME_HORAIRE_MISSI_SOURCE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..e1b564726178a4798ac8b5b6fafd8471be81cc2d --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_MISSI_SOURCE_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSI_SOURCE_FK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'SOURCE_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_MISSI_SOURCE_UN.php b/data/ddl/index/VOLUME_HORAIRE_MISSI_SOURCE_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..af08c860797956359f7a3d7202d63aa683165fd3 --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_MISSI_SOURCE_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSI_SOURCE_UN', + 'unique' => TRUE, + 'table' => 'VOLUME_HORAIRE_MISSION', + 'columns' => [ + 'SOURCE_CODE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VOLUME_HORAIRE_TAG_FK.php b/data/ddl/index/VOLUME_HORAIRE_TAG_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..dfebd7053c7d7cd6e0890e305a9cfa70531865e5 --- /dev/null +++ b/data/ddl/index/VOLUME_HORAIRE_TAG_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_TAG_FK', + 'unique' => FALSE, + 'table' => 'VOLUME_HORAIRE', + 'columns' => [ + 'TAG_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VVHM_VALIDATION_FK.php b/data/ddl/index/VVHM_VALIDATION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..a6de83a4cd549fa4332a4d4a2999c81f57be7018 --- /dev/null +++ b/data/ddl/index/VVHM_VALIDATION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VVHM_VALIDATION_FK', + 'unique' => FALSE, + 'table' => 'VALIDATION_VOL_HORAIRE_MISS', + 'columns' => [ + 'VALIDATION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/index/VVHM_VOLUME_HORAIRE_MISSION_FK.php b/data/ddl/index/VVHM_VOLUME_HORAIRE_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..3164aef84bb3060f1f09d3148d59e8217027c119 --- /dev/null +++ b/data/ddl/index/VVHM_VOLUME_HORAIRE_MISSION_FK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VVHM_VOLUME_HORAIRE_MISSION_FK', + 'unique' => FALSE, + 'table' => 'VALIDATION_VOL_HORAIRE_MISS', + 'columns' => [ + 'VOLUME_HORAIRE_MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/package/FORMULE_PARIS8/body.sql b/data/ddl/package/FORMULE_PARIS8/body.sql index 362863d110eda66493855a46873d932fbc45e352..889d7646b88fa3f025ae97a8d528f0cda7e32bb1 100644 --- a/data/ddl/package/FORMULE_PARIS8/body.sql +++ b/data/ddl/package/FORMULE_PARIS8/body.sql @@ -16,24 +16,11 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS debugLine NUMERIC; - - PROCEDURE dbg( val CLOB ) IS - BEGIN - ose_formule.volumes_horaires.items(debugLine).debug_info := - ose_formule.volumes_horaires.items(debugLine).debug_info || val; - END; - - PROCEDURE dbgi( val CLOB ) IS BEGIN ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; END; - PROCEDURE dbgDump( val CLOB ) IS - BEGIN - dbg('<div class="dbg-dump">' || val || '</div>'); - END; - PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS ligne NUMERIC; BEGIN @@ -50,9 +37,13 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS dbgi( '[calc|' || fncName || '|' || c || '|' || res ); END; - FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 0 ) RETURN FLOAT IS + FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 9999 ) RETURN FLOAT IS val FLOAT; BEGIN + IF l = 0 THEN + RETURN 0; + END IF; + IF feuille.exists(c) THEN IF feuille(c).cells.exists(l) THEN IF feuille(c).cells(l).enCalcul THEN @@ -94,7 +85,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS CASE -- Liste des fonctions supportées - WHEN fncName = 'total' THEN + WHEN fncName = 'somme' THEN val := 0; FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP val := val + COALESCE(cell(c, l),0); @@ -122,528 +113,524 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS END; - FUNCTION calcVersion RETURN NUMERIC IS - BEGIN - RETURN 1; - END; - - - - FUNCTION notInStructs( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS - BEGIN - RETURN COALESCE(v,' ') NOT IN ('KE8','UP10'); - END; - - FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS vh ose_formule.t_volume_horaire; i ose_formule.t_intervenant; - v NUMERIC; val FLOAT; BEGIN - v := calcVersion; - i := ose_formule.intervenant; - IF l > 0 THEN + IF l > 0 AND l <> 9999 THEN vh := ose_formule.volumes_horaires.items(l); END IF; - CASE + CASE c + -- T=IF([.$H20]="Référentiel";0;([.$AI20]+[.$AU20]+[.$BG20])*[.E20]) + WHEN 'T' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fi; + END IF; - -- AH15=SOMME(AG:AG) - WHEN c = 'AH15' AND v >= 1 THEN - RETURN calcFnc('total', 'AG'); + -- U=IF([.$H20]="Référentiel";0;([.$AI20]+[.$AU20]+[.$BG20])*[.F20]) + WHEN 'U' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fa; + END IF; + + + + -- V=IF([.$H20]="Référentiel";0;([.$AI20]+[.$AU20]+[.$BG20])*[.G20]) + WHEN 'V' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fc; + END IF; - -- AN15=SOMME(AM:AM) - WHEN c = 'AN15' AND v >= 1 THEN - RETURN calcFnc('total', 'AM'); + + -- W=IF([.$H20]="Référentiel";[.$AO20]+[.$BA20]+[.$BM20];0) + WHEN 'W' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN cell('AO',l) + cell('BA',l) + cell('BM',l); + ELSE + RETURN 0; + END IF; - -- AT15=SOMME(AS:AS) - WHEN c = 'AT15' AND v >= 1 THEN - RETURN calcFnc('total', 'AS'); + -- X=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AW20]+[.$BI20]+[.$BQ20])*[.E20]) + WHEN 'X' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l) + cell('BQ',l)) * vh.taux_fi; + END IF; - -- AZ15=SOMME(AY:AY) - WHEN c = 'AZ15' AND v >= 1 THEN - RETURN calcFnc('total', 'AY'); + -- Y=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AW20]+[.$BI20]+[.$BQ20])*[.F20]) + WHEN 'Y' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l) + cell('BQ',l)) * vh.taux_fa; + END IF; - -- BF15=SOMME(BE:BE) - WHEN c = 'BF15' AND v >= 1 THEN - RETURN calcFnc('total', 'BE'); + -- Z=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AW20]+[.$BI20]+[.$BQ20])*[.G20]) + WHEN 'Z' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l) + cell('BQ',l)) * vh.taux_fc; + END IF; - -- BL15=SOMME(BK:BK) - WHEN c = 'BL15' AND v >= 1 THEN - RETURN calcFnc('total', 'BK'); + -- AA=0 + WHEN 'AA' THEN + RETURN 0; - -- AH16=MIN(AH15;i_service_du) - WHEN c = 'AH16' AND v >= 1 THEN - RETURN LEAST(cell('AH15'), i.service_du); + -- AB=IF([.$H20]="Référentiel";[.$AQ20]+[.$BC20]+[.$BO20]+[.$BQ20];0) + WHEN 'AB' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN cell('AQ',l) + cell('BC',l) + cell('BO',l) + cell('BQ',l); + ELSE + RETURN 0; + END IF; - -- AN16=MIN(AN15;AH17) - WHEN c = 'AN16' AND v >= 1 THEN - RETURN LEAST(cell('AN15'), cell('AH17')); + -- AD=IF(ISERROR([.I20]);1;[.I20]) + WHEN 'AD' THEN + RETURN vh.taux_service_du; - -- AT16=MIN(AT15;AN17) - WHEN c = 'AT16' AND v >= 1 THEN - RETURN LEAST(cell('AT15'), cell('AN17')); + -- AE=IF(ISERROR([.J20]);1;[.J20]) + WHEN 'AE' THEN + RETURN vh.taux_service_compl; - -- AZ16=MIN(AZ15;AT17) - WHEN c = 'AZ16' AND v >= 1 THEN - RETURN LEAST(cell('AZ15'), cell('AT17')); + -- AG=IF([.$H20]="Référentiel";0;IF(AND(MID([.$N20];1;4)="PRIO";MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0)) + WHEN 'AG' THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + IF SUBSTR(vh.param_1, 1, 4) = 'PRIO' AND SUBSTR(vh.structure_code, 1, 5) <> '15310' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; + END IF; - -- BF16=MIN(BF15;AZ17) - WHEN c = 'BF16' AND v >= 1 THEN - RETURN LEAST(cell('BF15'), cell('AZ17')); + -- AH15=SUM([.AG$1:.AG$1048576]) + WHEN 'AH15' THEN + RETURN calcFnc('somme','AG'); - -- BL16=MIN(BL15;BF17) - WHEN c = 'BL16' AND v >= 1 THEN - RETURN LEAST(cell('BL15'), cell('BF17')); + -- AH16=MIN([.AH15];i_service_du) + WHEN 'AH16' THEN + RETURN LEAST(cell('AH15'), i.service_du); - -- AH17=i_service_du-AH16 - WHEN c = 'AH17' AND v >= 1 THEN - RETURN i.service_du - cell('AH16'); + -- AH17=i_service_du-[.AH16] + WHEN 'AH17' THEN + RETURN i.service_du - cell('AH16'); - -- AN17=AH17-AN16 - WHEN c = 'AN17' AND v >= 1 THEN - RETURN cell('AH17') - cell('AN16'); + -- AH=IF([.AH$15]>0;[.AG20]/[.AH$15];0) + WHEN 'AH' THEN + IF cell('AH15') > 0 THEN + RETURN cell('AG',l) / cell('AH15'); + ELSE + RETURN 0; + END IF; - -- AT17=AN17-AT16 - WHEN c = 'AT17' AND v >= 1 THEN - RETURN cell('AN17') - cell('AT16'); + -- AI=[.AH$16]*[.AH20] + WHEN 'AI' THEN + RETURN cell('AH16') * cell('AH',l); - -- AZ17=AT17-AZ16 - WHEN c = 'AZ17' AND v >= 1 THEN - RETURN cell('AT17') - cell('AZ16'); + -- AJ=IF([.AH$17]=0;([.AG20]-[.AI20])/[.$AD20];0) + WHEN 'AJ' THEN + IF cell('AH17') = 0 THEN + RETURN (cell('AG',l) - cell('AI',l)) / cell('AD',l); + ELSE + RETURN 0; + END IF; - -- BF17=AZ17-BF16 - WHEN c = 'BF17' AND v >= 1 THEN - RETURN cell('AZ17') - cell('BF16'); + -- AK=IF(i_depassement_service_du_sans_hc="Non";[.AJ20]*[.$AE20];0) + WHEN 'AK' THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('AJ',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- BL17=BF17-BL16 - WHEN c = 'BL17' AND v >= 1 THEN - RETURN cell('BF17') - cell('BL16'); + -- AM=IF(AND([.$H20]="Référentiel";[.$A20]=[.$K$10];MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0) + WHEN 'AM' THEN + IF vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_univ AND COALESCE(SUBSTR(vh.structure_code, 1, 5),' ') <> '15310' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; - -- T=SI($H20="Référentiel";0;($AI20+$AU20+$BG20)*E20) - WHEN c = 'T' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fi; - END IF; + -- AN15=SUM([.AM$1:.AM$1048576]) + WHEN 'AN15' THEN + RETURN calcFnc('somme','AM'); - -- U=SI($H20="Référentiel";0;($AI20+$AU20+$BG20)*F20) - WHEN c = 'U' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fa; - END IF; + -- AN16=MIN([.AN15];[.AH17]) + WHEN 'AN16' THEN + RETURN LEAST(cell('AN15'), cell('AH17')); - -- V=SI($H20="Référentiel";0;($AI20+$AU20+$BG20)*G20) - WHEN c = 'V' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fc; - END IF; + -- AN17=[.AH17]-[.AN16] + WHEN 'AN17' THEN + RETURN cell('AH17') - cell('AN16'); - -- W=SI($H20="Référentiel";$AO20+$BA20+$BM20;0) - WHEN c = 'W' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN cell('AO',l) + cell('BA',l) + cell('BM',l); - ELSE - RETURN 0; - END IF; + -- AN=IF([.AN$15]>0;[.AM20]/[.AN$15];0) + WHEN 'AN' THEN + IF cell('AN15') > 0 THEN + RETURN cell('AM',l) / cell('AN15'); + ELSE + RETURN 0; + END IF; - -- X=SI($H20="Référentiel";0;($AK20+$AW20+$BI20)*E20) - WHEN c = 'X' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l)) * vh.taux_fi; - END IF; + -- AO=[.AN$16]*[.AN20] + WHEN 'AO' THEN + RETURN cell('AN16') * cell('AN',l); - -- Y=SI($H20="Référentiel";0;($AK20+$AW20+$BI20)*F20) - WHEN c = 'Y' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l)) * vh.taux_fa; - END IF; + -- AP=IF([.AN$17]=0;([.AM20]-[.AO20])/[.$AD20];0) + WHEN 'AP' THEN + IF cell('AN17') = 0 THEN + RETURN (cell('AM',l) - cell('AO',l)) / cell('AD',l); + ELSE + RETURN 0; + END IF; - -- Z=SI($H20="Référentiel";0;($AK20+$AW20+$BI20)*G20) - WHEN c = 'Z' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l)) * vh.taux_fc; - END IF; + -- AQ=IF(i_depassement_service_du_sans_hc="Non";[.AP20]*[.$AE20];0) + WHEN 'AQ' THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('AP',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- AA=0 - WHEN c = 'AA' AND v >= 1 THEN - RETURN 0; + -- AS=IF(AND([.$H20]<>"Référentiel";[.$A20]=i_structure_code;MID([.$N20];1;4)<>"PRIO";MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0) + WHEN 'AS' THEN + IF vh.volume_horaire_ref_id IS NULL AND vh.structure_is_affectation AND SUBSTR(vh.param_1, 1, 4) <> 'PRIO' AND SUBSTR(vh.structure_code, 1, 5) <> '15310' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; - -- AB=SI($H20="Référentiel";$AQ20+$BC20+$BO20;0) - WHEN c = 'AB' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN cell('AQ',l) + cell('BC',l) + cell('BO',l); - ELSE - RETURN 0; - END IF; + -- AT15=SUM([.AS$1:.AS$1048576]) + WHEN 'AT15' THEN + RETURN calcFnc('somme','AS'); - -- AD=SI(ESTERREUR(I20);1;I20) - WHEN c = 'AD' AND v >= 1 THEN - RETURN vh.taux_service_du; + -- AT16=MIN([.AT15];[.AN17]) + WHEN 'AT16' THEN + RETURN LEAST(cell('AT15'), cell('AN17')); - -- AE=SI(ESTERREUR(J20);1;J20) - WHEN c = 'AE' AND v >= 1 THEN - RETURN vh.taux_service_compl; + -- AT17=[.AN17]-[.AT16] + WHEN 'AT17' THEN + RETURN cell('AN17') - cell('AT16'); - -- AG=SI($H20="Référentiel";0;SI(STXT($N20;1;4)="PRIO";$M20*$AD20;0)) - WHEN c = 'AG' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN 0; - ELSE - IF UPPER(SUBSTR(vh.param_1, 1, 4)) = 'PRIO' THEN - RETURN vh.heures * cell('AD', l); + -- AT=IF([.AT$15]>0;[.AS20]/[.AT$15];0) + WHEN 'AT' THEN + IF cell('AT15') > 0 THEN + RETURN cell('AS',l) / cell('AT15'); ELSE RETURN 0; END IF; - END IF; - - -- AH=SI(AH$15>0;AG20/AH$15;0) - WHEN c = 'AH' AND v >= 1 THEN - IF cell('AH15') > 0 THEN - RETURN cell('AG',l) / cell('AH15'); - ELSE - RETURN 0; - END IF; + -- AU=[.AT$16]*[.AT20] + WHEN 'AU' THEN + RETURN cell('AT16') * cell('AT',l); - -- AI=AH$16*AH20 - WHEN c = 'AI' AND v >= 1 THEN - RETURN cell('AH16') * cell('AH',l); + -- AV=IF([.AT$17]=0;([.AS20]-[.AU20])/[.$AD20];0) + WHEN 'AV' THEN + IF cell('AT17') = 0 THEN + RETURN (cell('AS',l) - cell('AU',l)) / cell('AD',l); + ELSE + RETURN 0; + END IF; - -- AJ=SI(AH$17=0;(AG20-AI20)/$AD20;0) - WHEN c = 'AJ' AND v >= 1 THEN - IF cell('AH17') = 0 THEN - RETURN (cell('AG',l) - cell('AI',l)) / cell('AD', l); - ELSE - RETURN 0; - END IF; + -- AW=IF(i_depassement_service_du_sans_hc="Non";[.AV20]*[.$AE20];0) + WHEN 'AW' THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('AV',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- AK=SI(i_depassement_service_du_sans_hc="Non";AJ20*$AE20;0) - WHEN c = 'AK' AND v >= 1 THEN - IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('AJ',l) * cell('AE',l); - ELSE - RETURN 0; - END IF; + -- AY=IF(AND(AND([.$H20]="Référentiel";[.$A20]=i_structure_code);( MID([.$A20];1;5))<>"15310");[.$M20]*[.$AD20];0) + WHEN 'AY' THEN + IF (vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_affectation) AND (SUBSTR(vh.structure_code, 1, 5)) <> '15310' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; - -- AM=SI(ET($H20="Référentiel";$A20=$K$10);$M20*$AD20;0) - WHEN c = 'AM' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_univ THEN - RETURN vh.heures * cell('AD',l); - ELSE - RETURN 0; - END IF; + -- AZ15=SUM([.AY$1:.AY$1048576]) + WHEN 'AZ15' THEN + RETURN calcFnc('somme','AY'); - -- AN=SI(AN$15>0;AM20/AN$15;0) - WHEN c = 'AN' AND v >= 1 THEN - IF cell('AN15') > 0 THEN - RETURN cell('AM',l) / cell('AN15'); - ELSE - RETURN 0; - END IF; + -- AZ16=MIN([.AZ15];[.AT17]) + WHEN 'AZ16' THEN + RETURN LEAST(cell('AZ15'), cell('AT17')); - -- AO=AN$16*AN20 - WHEN c = 'AO' AND v >= 1 THEN - RETURN cell('AN16') * cell('AN',l); + -- AZ17=[.AT17]-[.AZ16] + WHEN 'AZ17' THEN + RETURN cell('AT17') - cell('AZ16'); - -- AP=SI(AN$17=0;(AM20-AO20)/$AD20;0) - WHEN c = 'AP' AND v >= 1 THEN - IF cell('AN17') = 0 THEN - RETURN (cell('AM',l) - cell('AO',l)) / cell('AD', l); - ELSE - RETURN 0; - END IF; + -- AZ=IF([.AZ$15]>0;[.AY20]/[.AZ$15];0) + WHEN 'AZ' THEN + IF cell('AZ15') > 0 THEN + RETURN cell('AY',l) / cell('AZ15'); + ELSE + RETURN 0; + END IF; - -- AQ=SI(i_depassement_service_du_sans_hc="Non";AP20*$AE20;0) - WHEN c = 'AQ' AND v >= 1 THEN - IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('AP',l) * cell('AE',l); - ELSE - RETURN 0; - END IF; - + -- BA=[.AZ$16]*[.AZ20] + WHEN 'BA' THEN + RETURN cell('AZ16') * cell('AZ',l); - -- AS=SI(ET($H20<>"Référentiel";$A20=i_structure_code;STXT($N20;1;4)<>"PRIO");$M20*$AD20;0) - WHEN c = 'AS' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NULL AND vh.structure_is_affectation AND UPPER(SUBSTR(vh.param_1, 1, 4)) <> 'PRIO' THEN - RETURN vh.heures * cell('AD',l); - ELSE - RETURN 0; - END IF; + -- BB=IF([.AZ$17]=0;([.AY20]-[.BA20])/[.$AD20];0) + WHEN 'BB' THEN + IF cell('AZ17') = 0 THEN + RETURN (cell('AY',l) - cell('BA',l)) / cell('AD',l); + ELSE + RETURN 0; + END IF; - -- AT=SI(AT$15>0;AS20/AT$15;0) - WHEN c = 'AT' AND v >= 1 THEN - IF cell('AT15') > 0 THEN - RETURN cell('AS',l) / cell('AT15'); - ELSE - RETURN 0; - END IF; + -- BC=IF(i_depassement_service_du_sans_hc="Non";[.BB20]*[.$AE20];0) + WHEN 'BC' THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('BB',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- AU=AT$16*AT20 - WHEN c = 'AU' AND v >= 1 THEN - RETURN cell('AT16') * cell('AT',l); + -- BE=IF(AND([.$H20]<>"Référentiel";[.$A20]<>i_structure_code;MID([.$N20];1;4)<>"PRIO";MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0) + WHEN 'BE' THEN + IF vh.volume_horaire_ref_id IS NULL AND NOT vh.structure_is_affectation AND SUBSTR(vh.param_1, 1, 4) <> 'PRIO' AND SUBSTR(vh.structure_code, 1, 5) <> '15310' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; - -- AV=SI(AT$17=0;(AS20-AU20)/$AD20;0) - WHEN c = 'AV' AND v >= 1 THEN - IF cell('AT17') = 0 THEN - RETURN (cell('AS',l) - cell('AU',l)) / cell('AD', l); - ELSE - RETURN 0; - END IF; + -- BF15=SUM([.BE$1:.BE$1048576]) + WHEN 'BF15' THEN + RETURN calcFnc('somme','BE'); - -- AW=SI(i_depassement_service_du_sans_hc="Non";AV20*$AE20;0) - WHEN c = 'AW' AND v >= 1 THEN - IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('AV',l) * cell('AE',l); - ELSE - RETURN 0; - END IF; + -- BF16=MIN([.BF15];[.AZ17]) + WHEN 'BF16' THEN + RETURN LEAST(cell('BF15'), cell('AZ17')); - -- AY=SI(ET($H20="Référentiel";$A20=i_structure_code);$M20*$AD20;0) - WHEN c = 'AY' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_affectation THEN - RETURN vh.heures * cell('AD',l); - ELSE - RETURN 0; - END IF; + -- BF17=[.AZ17]-[.BF16] + WHEN 'BF17' THEN + RETURN cell('AZ17') - cell('BF16'); - -- AZ=SI(AZ$15>0;AY20/AZ$15;0) - WHEN c = 'AZ' AND v >= 1 THEN - IF cell('AZ15') > 0 THEN - RETURN cell('AY',l) / cell('AZ15'); - ELSE - RETURN 0; - END IF; + -- BF=IF([.BF$15]>0;[.BE20]/[.BF$15];0) + WHEN 'BF' THEN + IF cell('BF15') > 0 THEN + RETURN cell('BE',l) / cell('BF15'); + ELSE + RETURN 0; + END IF; - -- BA=AZ$16*AZ20 - WHEN c = 'BA' AND v >= 1 THEN - RETURN cell('AZ16') * cell('AZ',l); + -- BG=[.BF$16]*[.BF20] + WHEN 'BG' THEN + RETURN cell('BF16') * cell('BF',l); - -- BB=SI(AZ$17=0;(AY20-BA20)/$AD20;0) - WHEN c = 'BB' AND v >= 1 THEN - IF cell('AZ17') = 0 THEN - RETURN (cell('AY',l) - cell('BA',l)) / cell('AD', l); - ELSE - RETURN 0; - END IF; + -- BH=IF([.BF$17]=0;([.BE20]-[.BG20])/[.$AD20];0) + WHEN 'BH' THEN + IF cell('BF17') = 0 THEN + RETURN (cell('BE',l) - cell('BG',l)) / cell('AD',l); + ELSE + RETURN 0; + END IF; - -- BC=SI(i_depassement_service_du_sans_hc="Non";BB20*$AE20;0) - WHEN c = 'BC' AND v >= 1 THEN - IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('BB',l) * cell('AE',l); - ELSE - RETURN 0; - END IF; + -- BI=IF(i_depassement_service_du_sans_hc="Non";[.BH20]*[.$AE20];0) + WHEN 'BI' THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('BH',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- BE=SI(ET($H20<>"Référentiel";$A20<>i_structure_code;STXT($N20;1;4)<>"PRIO");$M20*$AD20;0) - WHEN c = 'BE' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NULL AND NOT vh.structure_is_affectation AND UPPER(SUBSTR(vh.param_1, 1, 4)) <> 'PRIO' THEN - RETURN vh.heures * cell('AD',l); - ELSE - RETURN 0; - END IF; + -- BK=IF(AND([.$H20]="Référentiel";[.$A20]<>i_structure_code;[.$A20]<>[.$K$10];MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0) + WHEN 'BK' THEN + IF vh.volume_horaire_ref_id IS NOT NULL AND NOT vh.structure_is_affectation AND NOT vh.structure_is_univ AND SUBSTR(vh.structure_code, 1, 5) <> '15310' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; - -- BF=SI(BF$15>0;BE20/BF$15;0) - WHEN c = 'BF' AND v >= 1 THEN - IF cell('BF15') > 0 THEN - RETURN cell('BE',l) / cell('BF15'); - ELSE - RETURN 0; - END IF; + -- BL15=SUM([.BK$1:.BK$1048576]) + WHEN 'BL15' THEN + RETURN calcFnc('somme','BK'); - -- BG=BF$16*BF20 - WHEN c = 'BG' AND v >= 1 THEN - RETURN cell('BF16') * cell('BF',l); + -- BL16=MIN([.BL15];[.BF17]) + WHEN 'BL16' THEN + RETURN LEAST(cell('BL15'), cell('BF17')); - -- BH=SI(BF$17=0;(BE20-BG20)/$AD20;0) - WHEN c = 'BH' AND v >= 1 THEN - IF cell('BF17') = 0 THEN - RETURN (cell('BE',l) - cell('BG',l)) / cell('AD', l); - ELSE - RETURN 0; - END IF; + -- BL17=[.BF17]-[.BL16] + WHEN 'BL17' THEN + RETURN cell('BF17') - cell('BL16'); - -- BI=SI(i_depassement_service_du_sans_hc="Non";BH20*$AE20;0) - WHEN c = 'BI' AND v >= 1 THEN - IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('BH',l) * cell('AE',l); - ELSE - RETURN 0; - END IF; + -- BL=IF([.BL$15]>0;[.BK20]/[.BL$15];0) + WHEN 'BL' THEN + IF cell('BL15') > 0 THEN + RETURN cell('BK',l) / cell('BL15'); + ELSE + RETURN 0; + END IF; - -- BK=SI(ET($H20="Référentiel";$A20<>i_structure_code;$A20<>$K$10);$M20*$AD20;0) - WHEN c = 'BK' AND v >= 1 THEN - IF vh.volume_horaire_ref_id IS NOT NULL AND NOT vh.structure_is_affectation AND NOT vh.structure_is_univ THEN - RETURN vh.heures * cell('AD',l); - ELSE - RETURN 0; - END IF; + -- BM=[.BL$16]*[.BL20] + WHEN 'BM' THEN + RETURN cell('BL16') * cell('BL',l); - -- BL=SI(BL$15>0;BK20/BL$15;0) - WHEN c = 'BL' AND v >= 1 THEN - IF cell('BL15') > 0 THEN - RETURN cell('BK',l) / cell('BL15'); - ELSE - RETURN 0; - END IF; + -- BN=IF([.BL$17]=0;([.BK20]-[.BM20])/[.$AD20];0) + WHEN 'BN' THEN + IF cell('BL17') = 0 THEN + RETURN (cell('BK',l) - cell('BM',l)) / cell('AD',l); + ELSE + RETURN 0; + END IF; - -- BM=BL$16*BL20 - WHEN c = 'BM' AND v >= 1 THEN - RETURN cell('BL16') * cell('BL',l); + -- BO=IF(i_depassement_service_du_sans_hc="Non";[.BN20]*[.$AE20];0) + WHEN 'BO' THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('BN',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- BN=SI(BL$17=0;(BK20-BM20)/$AD20;0) - WHEN c = 'BN' AND v >= 1 THEN - IF cell('BL17') = 0 THEN - RETURN (cell('BK',l) - cell('BM',l)) / cell('AD', l); - ELSE - RETURN 0; - END IF; + -- BQ=IF(MID([.$A20];1;25)="15310";[.$M20]*[.$AE20];0) + WHEN 'BQ' THEN + IF SUBSTR(vh.structure_code, 1, 25) = '15310' THEN + RETURN vh.heures * cell('AE',l); + ELSE + RETURN 0; + END IF; - -- BO=SI(i_depassement_service_du_sans_hc="Non";BN20*$AE20;0) - WHEN c = 'BO' AND v >= 1 THEN - IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('BN',l) * cell('AE',l); - ELSE - RETURN 0; - END IF; ELSE - OSE_TEST.echo(c); + dbms_output.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!'); raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); - END CASE; END; + END CASE; + raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); + + END; @@ -651,6 +638,15 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS BEGIN feuille.delete; + IF ose_formule.intervenant.annee_id < 2022 THEN + FORMULE_PARIS8_2021.CALCUL_RESULTAT; + RETURN; + END IF; + + IF ose_formule.intervenant.depassement_service_du_sans_hc THEN -- HC traitées comme du service + ose_formule.intervenant.service_du := ose_formule.intervenant.heures_service_statutaire + ose_formule.intervenant.heures_service_modifie; + END IF; + -- transmission des résultats aux volumes horaires et volumes horaires référentiel FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'T',l); diff --git a/data/ddl/package/FORMULE_PARIS8_2021/body.sql b/data/ddl/package/FORMULE_PARIS8_2021/body.sql new file mode 100644 index 0000000000000000000000000000000000000000..b102ed946a6f5cae998eb9081d781ba96e8582d0 --- /dev/null +++ b/data/ddl/package/FORMULE_PARIS8_2021/body.sql @@ -0,0 +1,705 @@ +CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8_2021 AS + decalageLigne NUMERIC DEFAULT 20; + + + /* Stockage des valeurs intermédiaires */ + TYPE t_cell IS RECORD ( + valeur FLOAT, + enCalcul BOOLEAN DEFAULT FALSE + ); + TYPE t_cells IS TABLE OF t_cell INDEX BY PLS_INTEGER; + TYPE t_coll IS RECORD ( + cells t_cells + ); + TYPE t_colls IS TABLE OF t_coll INDEX BY VARCHAR2(50); + feuille t_colls; + + debugLine NUMERIC; + + + PROCEDURE dbg( val CLOB ) IS + BEGIN + ose_formule.volumes_horaires.items(debugLine).debug_info := + ose_formule.volumes_horaires.items(debugLine).debug_info || val; + END; + + + PROCEDURE dbgi( val CLOB ) IS + BEGIN + ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; + END; + + PROCEDURE dbgDump( val CLOB ) IS + BEGIN + dbg('<div class="dbg-dump">' || val || '</div>'); + END; + + PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS + ligne NUMERIC; + BEGIN + ligne := l; + IF l <> 0 THEN + ligne := ligne + decalageLigne; + END IF; + + dbgi( '[cell|' || c || '|' || ligne || '|' || val ); + END; + + PROCEDURE dbgCalc( fncName VARCHAR2, c VARCHAR2, res FLOAT ) IS + BEGIN + dbgi( '[calc|' || fncName || '|' || c || '|' || res ); + END; + + FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 0 ) RETURN FLOAT IS + val FLOAT; + BEGIN + IF feuille.exists(c) THEN + IF feuille(c).cells.exists(l) THEN + IF feuille(c).cells(l).enCalcul THEN + raise_application_error( -20001, 'Dépendance cyclique : la cellule [' || c || ';' || l || '] est déjà en cours de calcul'); + END IF; + RETURN feuille(c).cells(l).valeur; + END IF; + END IF; + + feuille(c).cells(l).enCalcul := true; + val := calcCell( c, l ); + IF ose_formule.debug_actif THEN + dbgCell( c, l, val ); + END IF; + feuille(c).cells(l).valeur := val; + feuille(c).cells(l).enCalcul := false; + + RETURN val; + END; + + FUNCTION mainCell( libelle VARCHAR2, c VARCHAR2, l NUMERIC ) RETURN FLOAT IS + val FLOAT; + BEGIN + debugLine := l; + val := cell(c,l); + + RETURN val; + END; + + FUNCTION calcFnc( fncName VARCHAR2, c VARCHAR2 ) RETURN FLOAT IS + val FLOAT; + cellRes FLOAT; + BEGIN + IF feuille.exists('__' || fncName || '__' || c || '__') THEN + IF feuille('__' || fncName || '__' || c || '__').cells.exists(1) THEN + RETURN feuille('__' || fncName || '__' || c || '__').cells(1).valeur; + END IF; + END IF; + CASE + -- Liste des fonctions supportées + + WHEN fncName = 'total' THEN + val := 0; + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + val := val + COALESCE(cell(c, l),0); + END LOOP; + + WHEN fncName = 'max' THEN + val := NULL; + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + cellRes := cell(c,l); + IF val IS NULL OR val < cellRes THEN + val := cellRes; + END IF; + END LOOP; + + -- fin de la liste des fonctions supportées + ELSE + raise_application_error( -20001, 'La formule "' || fncName || '" n''existe pas!'); + END CASE; + IF ose_formule.debug_actif THEN + dbgCalc(fncName, c, val ); + END IF; + feuille('__' || fncName || '__' || c || '__').cells(1).valeur := val; + + RETURN val; + END; + + + FUNCTION calcVersion RETURN NUMERIC IS + BEGIN + RETURN 1; + END; + + + + FUNCTION notInStructs( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS + BEGIN + RETURN COALESCE(v,' ') NOT IN ('KE8','UP10'); + END; + + + + FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS + vh ose_formule.t_volume_horaire; + i ose_formule.t_intervenant; + v NUMERIC; + val FLOAT; + BEGIN + v := calcVersion; + + i := ose_formule.intervenant; + IF l > 0 THEN + vh := ose_formule.volumes_horaires.items(l); + END IF; + CASE + + + + + + -- AH15=SOMME(AG:AG) + WHEN c = 'AH15' AND v >= 1 THEN + RETURN calcFnc('total', 'AG'); + + + + -- AN15=SOMME(AM:AM) + WHEN c = 'AN15' AND v >= 1 THEN + RETURN calcFnc('total', 'AM'); + + + + -- AT15=SOMME(AS:AS) + WHEN c = 'AT15' AND v >= 1 THEN + RETURN calcFnc('total', 'AS'); + + + + -- AZ15=SOMME(AY:AY) + WHEN c = 'AZ15' AND v >= 1 THEN + RETURN calcFnc('total', 'AY'); + + + + -- BF15=SOMME(BE:BE) + WHEN c = 'BF15' AND v >= 1 THEN + RETURN calcFnc('total', 'BE'); + + + + -- BL15=SOMME(BK:BK) + WHEN c = 'BL15' AND v >= 1 THEN + RETURN calcFnc('total', 'BK'); + + + + -- AH16=MIN(AH15;i_service_du) + WHEN c = 'AH16' AND v >= 1 THEN + RETURN LEAST(cell('AH15'), i.service_du); + + + + -- AN16=MIN(AN15;AH17) + WHEN c = 'AN16' AND v >= 1 THEN + RETURN LEAST(cell('AN15'), cell('AH17')); + + + + -- AT16=MIN(AT15;AN17) + WHEN c = 'AT16' AND v >= 1 THEN + RETURN LEAST(cell('AT15'), cell('AN17')); + + + + -- AZ16=MIN(AZ15;AT17) + WHEN c = 'AZ16' AND v >= 1 THEN + RETURN LEAST(cell('AZ15'), cell('AT17')); + + + + -- BF16=MIN(BF15;AZ17) + WHEN c = 'BF16' AND v >= 1 THEN + RETURN LEAST(cell('BF15'), cell('AZ17')); + + + + -- BL16=MIN(BL15;BF17) + WHEN c = 'BL16' AND v >= 1 THEN + RETURN LEAST(cell('BL15'), cell('BF17')); + + + + -- AH17=i_service_du-AH16 + WHEN c = 'AH17' AND v >= 1 THEN + RETURN i.service_du - cell('AH16'); + + + + -- AN17=AH17-AN16 + WHEN c = 'AN17' AND v >= 1 THEN + RETURN cell('AH17') - cell('AN16'); + + + + -- AT17=AN17-AT16 + WHEN c = 'AT17' AND v >= 1 THEN + RETURN cell('AN17') - cell('AT16'); + + + + -- AZ17=AT17-AZ16 + WHEN c = 'AZ17' AND v >= 1 THEN + RETURN cell('AT17') - cell('AZ16'); + + + + -- BF17=AZ17-BF16 + WHEN c = 'BF17' AND v >= 1 THEN + RETURN cell('AZ17') - cell('BF16'); + + + + -- BL17=BF17-BL16 + WHEN c = 'BL17' AND v >= 1 THEN + RETURN cell('BF17') - cell('BL16'); + + + + -- T=SI($H20="Référentiel";0;($AI20+$AU20+$BG20)*E20) + WHEN c = 'T' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fi; + END IF; + + + + -- U=SI($H20="Référentiel";0;($AI20+$AU20+$BG20)*F20) + WHEN c = 'U' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fa; + END IF; + + + + -- V=SI($H20="Référentiel";0;($AI20+$AU20+$BG20)*G20) + WHEN c = 'V' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AI',l) + cell('AU',l) + cell('BG',l)) * vh.taux_fc; + END IF; + + + + -- W=SI($H20="Référentiel";$AO20+$BA20+$BM20;0) + WHEN c = 'W' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN cell('AO',l) + cell('BA',l) + cell('BM',l); + ELSE + RETURN 0; + END IF; + + + + -- X=SI($H20="Référentiel";0;($AK20+$AW20+$BI20)*E20) + WHEN c = 'X' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l)) * vh.taux_fi; + END IF; + + + + -- Y=SI($H20="Référentiel";0;($AK20+$AW20+$BI20)*F20) + WHEN c = 'Y' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l)) * vh.taux_fa; + END IF; + + + + -- Z=SI($H20="Référentiel";0;($AK20+$AW20+$BI20)*G20) + WHEN c = 'Z' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + RETURN (cell('AK',l) + cell('AW',l) + cell('BI',l)) * vh.taux_fc; + END IF; + + + + -- AA=0 + WHEN c = 'AA' AND v >= 1 THEN + RETURN 0; + + + + -- AB=SI($H20="Référentiel";$AQ20+$BC20+$BO20;0) + WHEN c = 'AB' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN cell('AQ',l) + cell('BC',l) + cell('BO',l); + ELSE + RETURN 0; + END IF; + + + + -- AD=SI(ESTERREUR(I20);1;I20) + WHEN c = 'AD' AND v >= 1 THEN + RETURN vh.taux_service_du; + + + + -- AE=SI(ESTERREUR(J20);1;J20) + WHEN c = 'AE' AND v >= 1 THEN + RETURN vh.taux_service_compl; + + + + -- AG=SI($H20="Référentiel";0;SI(STXT($N20;1;4)="PRIO";$M20*$AD20;0)) + WHEN c = 'AG' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN + RETURN 0; + ELSE + IF UPPER(SUBSTR(vh.param_1, 1, 4)) = 'PRIO' THEN + RETURN vh.heures * cell('AD', l); + ELSE + RETURN 0; + END IF; + END IF; + + + + -- AH=SI(AH$15>0;AG20/AH$15;0) + WHEN c = 'AH' AND v >= 1 THEN + IF cell('AH15') > 0 THEN + RETURN cell('AG',l) / cell('AH15'); + ELSE + RETURN 0; + END IF; + + + + -- AI=AH$16*AH20 + WHEN c = 'AI' AND v >= 1 THEN + RETURN cell('AH16') * cell('AH',l); + + + + -- AJ=SI(AH$17=0;(AG20-AI20)/$AD20;0) + WHEN c = 'AJ' AND v >= 1 THEN + IF cell('AH17') = 0 THEN + RETURN (cell('AG',l) - cell('AI',l)) / cell('AD', l); + ELSE + RETURN 0; + END IF; + + + + -- AK=SI(i_depassement_service_du_sans_hc="Non";AJ20*$AE20;0) + WHEN c = 'AK' AND v >= 1 THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('AJ',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; + + + + -- AM=SI(ET($H20="Référentiel";$A20=$K$10);$M20*$AD20;0) + WHEN c = 'AM' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_univ THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; + + + + -- AN=SI(AN$15>0;AM20/AN$15;0) + WHEN c = 'AN' AND v >= 1 THEN + IF cell('AN15') > 0 THEN + RETURN cell('AM',l) / cell('AN15'); + ELSE + RETURN 0; + END IF; + + + + -- AO=AN$16*AN20 + WHEN c = 'AO' AND v >= 1 THEN + RETURN cell('AN16') * cell('AN',l); + + + + -- AP=SI(AN$17=0;(AM20-AO20)/$AD20;0) + WHEN c = 'AP' AND v >= 1 THEN + IF cell('AN17') = 0 THEN + RETURN (cell('AM',l) - cell('AO',l)) / cell('AD', l); + ELSE + RETURN 0; + END IF; + + + + -- AQ=SI(i_depassement_service_du_sans_hc="Non";AP20*$AE20;0) + WHEN c = 'AQ' AND v >= 1 THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('AP',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; + + + + -- AS=SI(ET($H20<>"Référentiel";$A20=i_structure_code;STXT($N20;1;4)<>"PRIO");$M20*$AD20;0) + WHEN c = 'AS' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NULL AND vh.structure_is_affectation AND UPPER(SUBSTR(vh.param_1, 1, 4)) <> 'PRIO' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; + + + + -- AT=SI(AT$15>0;AS20/AT$15;0) + WHEN c = 'AT' AND v >= 1 THEN + IF cell('AT15') > 0 THEN + RETURN cell('AS',l) / cell('AT15'); + ELSE + RETURN 0; + END IF; + + + + -- AU=AT$16*AT20 + WHEN c = 'AU' AND v >= 1 THEN + RETURN cell('AT16') * cell('AT',l); + + + + -- AV=SI(AT$17=0;(AS20-AU20)/$AD20;0) + WHEN c = 'AV' AND v >= 1 THEN + IF cell('AT17') = 0 THEN + RETURN (cell('AS',l) - cell('AU',l)) / cell('AD', l); + ELSE + RETURN 0; + END IF; + + + + -- AW=SI(i_depassement_service_du_sans_hc="Non";AV20*$AE20;0) + WHEN c = 'AW' AND v >= 1 THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('AV',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; + + + + -- AY=SI(ET($H20="Référentiel";$A20=i_structure_code);$M20*$AD20;0) + WHEN c = 'AY' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_affectation THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; + + + + -- AZ=SI(AZ$15>0;AY20/AZ$15;0) + WHEN c = 'AZ' AND v >= 1 THEN + IF cell('AZ15') > 0 THEN + RETURN cell('AY',l) / cell('AZ15'); + ELSE + RETURN 0; + END IF; + + + + -- BA=AZ$16*AZ20 + WHEN c = 'BA' AND v >= 1 THEN + RETURN cell('AZ16') * cell('AZ',l); + + + + -- BB=SI(AZ$17=0;(AY20-BA20)/$AD20;0) + WHEN c = 'BB' AND v >= 1 THEN + IF cell('AZ17') = 0 THEN + RETURN (cell('AY',l) - cell('BA',l)) / cell('AD', l); + ELSE + RETURN 0; + END IF; + + + + -- BC=SI(i_depassement_service_du_sans_hc="Non";BB20*$AE20;0) + WHEN c = 'BC' AND v >= 1 THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('BB',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; + + + + -- BE=SI(ET($H20<>"Référentiel";$A20<>i_structure_code;STXT($N20;1;4)<>"PRIO");$M20*$AD20;0) + WHEN c = 'BE' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NULL AND NOT vh.structure_is_affectation AND UPPER(SUBSTR(vh.param_1, 1, 4)) <> 'PRIO' THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; + + + + -- BF=SI(BF$15>0;BE20/BF$15;0) + WHEN c = 'BF' AND v >= 1 THEN + IF cell('BF15') > 0 THEN + RETURN cell('BE',l) / cell('BF15'); + ELSE + RETURN 0; + END IF; + + + + -- BG=BF$16*BF20 + WHEN c = 'BG' AND v >= 1 THEN + RETURN cell('BF16') * cell('BF',l); + + + + -- BH=SI(BF$17=0;(BE20-BG20)/$AD20;0) + WHEN c = 'BH' AND v >= 1 THEN + IF cell('BF17') = 0 THEN + RETURN (cell('BE',l) - cell('BG',l)) / cell('AD', l); + ELSE + RETURN 0; + END IF; + + + + -- BI=SI(i_depassement_service_du_sans_hc="Non";BH20*$AE20;0) + WHEN c = 'BI' AND v >= 1 THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('BH',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; + + + + -- BK=SI(ET($H20="Référentiel";$A20<>i_structure_code;$A20<>$K$10);$M20*$AD20;0) + WHEN c = 'BK' AND v >= 1 THEN + IF vh.volume_horaire_ref_id IS NOT NULL AND NOT vh.structure_is_affectation AND NOT vh.structure_is_univ THEN + RETURN vh.heures * cell('AD',l); + ELSE + RETURN 0; + END IF; + + + + -- BL=SI(BL$15>0;BK20/BL$15;0) + WHEN c = 'BL' AND v >= 1 THEN + IF cell('BL15') > 0 THEN + RETURN cell('BK',l) / cell('BL15'); + ELSE + RETURN 0; + END IF; + + + + -- BM=BL$16*BL20 + WHEN c = 'BM' AND v >= 1 THEN + RETURN cell('BL16') * cell('BL',l); + + + + -- BN=SI(BL$17=0;(BK20-BM20)/$AD20;0) + WHEN c = 'BN' AND v >= 1 THEN + IF cell('BL17') = 0 THEN + RETURN (cell('BK',l) - cell('BM',l)) / cell('AD', l); + ELSE + RETURN 0; + END IF; + + + + -- BO=SI(i_depassement_service_du_sans_hc="Non";BN20*$AE20;0) + WHEN c = 'BO' AND v >= 1 THEN + IF NOT i.depassement_service_du_sans_hc THEN + RETURN cell('BN',l) * cell('AE',l); + ELSE + RETURN 0; + END IF; + + + + ELSE + OSE_TEST.echo(c); + raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); + END CASE; END; + + + + PROCEDURE CALCUL_RESULTAT IS + BEGIN + feuille.delete; + + -- transmission des résultats aux volumes horaires et volumes horaires référentiel + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'T',l); + ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'U',l); + ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'V',l); + ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'W',l); + ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'X',l); + ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'Y',l); + ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'Z',l); + ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AA',l); + ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AB',l); + END LOOP; + END; + + + + FUNCTION INTERVENANT_QUERY RETURN CLOB IS + BEGIN + RETURN ' + SELECT + fi.*, + NULL param_1, + NULL param_2, + NULL param_3, + NULL param_4, + NULL param_5 + FROM + V_FORMULE_INTERVENANT fi + '; + END; + + + + FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB IS + BEGIN + RETURN ' + SELECT + fvh.*, + ep.code param_1, + NULL param_2, + NULL param_3, + NULL param_4, + NULL param_5 + FROM + V_FORMULE_VOLUME_HORAIRE fvh + LEFT JOIN service s ON s.id = fvh.service_id + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + ORDER BY + ordre'; + END; + +END FORMULE_PARIS8_2021; \ No newline at end of file diff --git a/data/ddl/package/FORMULE_PARIS8_2021/definition.sql b/data/ddl/package/FORMULE_PARIS8_2021/definition.sql new file mode 100644 index 0000000000000000000000000000000000000000..3906b3aca9ccb50516e5c71ca223b4a592538361 --- /dev/null +++ b/data/ddl/package/FORMULE_PARIS8_2021/definition.sql @@ -0,0 +1,10 @@ +CREATE OR REPLACE PACKAGE FORMULE_PARIS8_2021 AS + + PROCEDURE CALCUL_RESULTAT; + + FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT; + + FUNCTION INTERVENANT_QUERY RETURN CLOB; + FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB; + +END FORMULE_PARIS8_2021; \ No newline at end of file diff --git a/data/ddl/package/FORMULE_RENNES2/body.sql b/data/ddl/package/FORMULE_RENNES2/body.sql index 35750e99db1e85b591076dec50dc10ae75800568..d21922656479cff87f4f67674329d48b70ef99f7 100644 --- a/data/ddl/package/FORMULE_RENNES2/body.sql +++ b/data/ddl/package/FORMULE_RENNES2/body.sql @@ -208,15 +208,15 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AD=IF(ISERROR([.I20]);1;[.I20]) + -- AD=IF(ISERROR([.I20]);1;[.I20]*[.K20]) WHEN 'AD' THEN - RETURN vh.taux_service_du; + RETURN vh.taux_service_du * vh.ponderation_service_du; - -- AE=IF(ISERROR([.J20]);1;[.J20]) + -- AE=IF(ISERROR([.J20]);1;[.J20]*[.L20]) WHEN 'AE' THEN - RETURN vh.taux_service_compl; + RETURN vh.taux_service_compl * vh.ponderation_service_compl; diff --git a/data/ddl/package/FORMULE_ROUEN/body.sql b/data/ddl/package/FORMULE_ROUEN/body.sql index 5ed95937c89c73c3393d82a099c0ed0f17760c36..32a56f9cc7b14f91e8f2e215eebf9e5d8862fa44 100644 --- a/data/ddl/package/FORMULE_ROUEN/body.sql +++ b/data/ddl/package/FORMULE_ROUEN/body.sql @@ -186,12 +186,12 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_ROUEN AS - -- AA=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AX20])*[.H20]) + -- AA=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20])*[.H20]) WHEN 'AA' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE - RETURN (cell('AL',l) + cell('AX',l)) * vh.taux_fc; + RETURN (cell('AL',l) + cell('AR',l)) * vh.taux_fc; END IF; diff --git a/data/ddl/package/FORMULE_ULHN/body.sql b/data/ddl/package/FORMULE_ULHN/body.sql index b608d11fb253b879c20cab06e540bd67ce5627a5..86bd7dc635330e3c826e9f43d26f4e1c2953157f 100644 --- a/data/ddl/package/FORMULE_ULHN/body.sql +++ b/data/ddl/package/FORMULE_ULHN/body.sql @@ -1,225 +1,224 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_ULHN AS - decalageLigne NUMERIC DEFAULT 19; - - /* Stockage des valeurs intermédiaires */ - TYPE t_cell IS RECORD ( - valeur FLOAT, - enCalcul BOOLEAN DEFAULT FALSE - ); - TYPE t_cells IS TABLE OF t_cell INDEX BY PLS_INTEGER; - TYPE t_coll IS RECORD ( - cells t_cells - ); - TYPE t_colls IS TABLE OF t_coll INDEX BY VARCHAR2(50); - feuille t_colls; - - debugLine NUMERIC; - - PROCEDURE dbgi( val CLOB ) IS - BEGIN - ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; - END; - - PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS - ligne NUMERIC; - BEGIN - ligne := l; - IF l <> 0 THEN - ligne := ligne + decalageLigne; + decalageLigne NUMERIC DEFAULT 19; + + /* Stockage des valeurs intermédiaires */ + TYPE t_cell IS RECORD ( + valeur FLOAT, + enCalcul BOOLEAN DEFAULT FALSE + ); + TYPE t_cells IS TABLE OF t_cell INDEX BY PLS_INTEGER; + TYPE t_coll IS RECORD ( + cells t_cells + ); + TYPE t_colls IS TABLE OF t_coll INDEX BY VARCHAR2(50); + feuille t_colls; + + debugLine NUMERIC; + + PROCEDURE dbgi( val CLOB ) IS + BEGIN + ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; + END; + + PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS + ligne NUMERIC; + BEGIN + ligne := l; + IF l <> 0 THEN + ligne := ligne + decalageLigne; + END IF; + + dbgi( '[cell|' || c || '|' || ligne || '|' || val ); + END; + + PROCEDURE dbgCalc( fncName VARCHAR2, c VARCHAR2, res FLOAT ) IS + BEGIN + dbgi( '[calc|' || fncName || '|' || c || '|' || res ); + END; + + FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 9999 ) RETURN FLOAT IS + val FLOAT; + BEGIN + IF l = 0 THEN + RETURN 0; + END IF; + + IF feuille.exists(c) THEN + IF feuille(c).cells.exists(l) THEN + IF feuille(c).cells(l).enCalcul THEN + raise_application_error( -20001, 'Dépendance cyclique : la cellule [' || c || ';' || l || '] est déjà en cours de calcul'); END IF; - - dbgi( '[cell|' || c || '|' || ligne || '|' || val ); - END; - - PROCEDURE dbgCalc( fncName VARCHAR2, c VARCHAR2, res FLOAT ) IS - BEGIN - dbgi( '[calc|' || fncName || '|' || c || '|' || res ); - END; - - FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 9999 ) RETURN FLOAT IS - val FLOAT; - BEGIN - IF l = 0 THEN - RETURN 0; + RETURN feuille(c).cells(l).valeur; + END IF; + END IF; + + feuille(c).cells(l).enCalcul := true; + val := calcCell( c, l ); + IF ose_formule.debug_actif THEN + dbgCell( c, l, val ); + END IF; + feuille(c).cells(l).valeur := val; + feuille(c).cells(l).enCalcul := false; + + RETURN val; + END; + + FUNCTION mainCell( libelle VARCHAR2, c VARCHAR2, l NUMERIC ) RETURN FLOAT IS + val FLOAT; + BEGIN + debugLine := l; + val := cell(c,l); + + RETURN val; + END; + + FUNCTION calcFnc( fncName VARCHAR2, c VARCHAR2 ) RETURN FLOAT IS + val FLOAT; + cellRes FLOAT; + BEGIN + IF feuille.exists('__' || fncName || '__' || c || '__') THEN + IF feuille('__' || fncName || '__' || c || '__').cells.exists(1) THEN + RETURN feuille('__' || fncName || '__' || c || '__').cells(1).valeur; + END IF; + END IF; + CASE + -- Liste des fonctions supportées + + WHEN fncName = 'somme' THEN + val := 0; + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + val := val + COALESCE(cell(c, l),0); + END LOOP; + + WHEN fncName = 'max' THEN + val := NULL; + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + cellRes := cell(c,l); + IF val IS NULL OR val < cellRes THEN + val := cellRes; END IF; + END LOOP; - IF feuille.EXISTS(c) THEN - IF feuille(c).cells.EXISTS(l) THEN - IF feuille(c).cells(l).enCalcul THEN - raise_application_error( -20001, 'Dépendance cyclique : la cellule [' || c || ';' || l || '] est déjà en cours de calcul'); - END IF; - RETURN feuille(c).cells(l).valeur; - END IF; - END IF; + -- fin de la liste des fonctions supportées + ELSE + raise_application_error( -20001, 'La formule "' || fncName || '" n''existe pas!'); + END CASE; + IF ose_formule.debug_actif THEN + dbgCalc(fncName, c, val ); + END IF; + feuille('__' || fncName || '__' || c || '__').cells(1).valeur := val; - feuille(c).cells(l).enCalcul := TRUE; - val := calcCell( c, l ); - IF ose_formule.debug_actif THEN - dbgCell( c, l, val ); - END IF; - feuille(c).cells(l).valeur := val; - feuille(c).cells(l).enCalcul := FALSE; - - RETURN val; - END; - - FUNCTION mainCell( libelle VARCHAR2, c VARCHAR2, l NUMERIC ) RETURN FLOAT IS - val FLOAT; - BEGIN - debugLine := l; - val := cell(c,l); - - RETURN val; - END; - - FUNCTION calcFnc( fncName VARCHAR2, c VARCHAR2 ) RETURN FLOAT IS - val FLOAT; - cellRes FLOAT; - BEGIN - IF feuille.EXISTS('__' || fncName || '__' || c || '__') THEN - IF feuille('__' || fncName || '__' || c || '__').cells.EXISTS(1) THEN - RETURN feuille('__' || fncName || '__' || c || '__').cells(1).valeur; - END IF; - END IF; - CASE - -- Liste des fonctions supportées - - WHEN fncName = 'somme' THEN - val := 0; - FOR l IN 1 .. ose_formule.volumes_horaires.LENGTH LOOP - val := val + COALESCE(cell(c, l),0); - END LOOP; - - WHEN fncName = 'max' THEN - val := NULL; - FOR l IN 1 .. ose_formule.volumes_horaires.LENGTH LOOP - cellRes := cell(c,l); - IF val IS NULL OR val < cellRes THEN - val := cellRes; - END IF; - END LOOP; - - -- fin de la liste des fonctions supportées - ELSE - raise_application_error( -20001, 'La formule "' || fncName || '" n''existe pas!'); - END CASE; - IF ose_formule.debug_actif THEN - dbgCalc(fncName, c, val ); - END IF; - feuille('__' || fncName || '__' || c || '__').cells(1).valeur := val; - - RETURN val; - END; + RETURN val; + END; - FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS - vh ose_formule.t_volume_horaire; - i ose_formule.t_intervenant; - val FLOAT; - BEGIN - i := ose_formule.intervenant; - IF l > 0 AND l <> 9999 THEN - vh := ose_formule.volumes_horaires.items(l); - END IF; - CASE c + FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS + vh ose_formule.t_volume_horaire; + i ose_formule.t_intervenant; + val FLOAT; + BEGIN + i := ose_formule.intervenant; + IF l > 0 AND l <> 9999 THEN + vh := ose_formule.volumes_horaires.items(l); + END IF; + CASE c - -- T=IF(OR(ISBLANK([.$H20]);[.$H20]="Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AS20]*[.E20];[.$AM20]*[.E20])) + -- T=IF([.$H20]="Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AP20]*[.E20];[.$AJ20]*[.E20])) WHEN 'T' THEN - IF vh.type_intervention_code IS NULL OR vh.volume_horaire_ref_id IS NOT NULL THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AS',l) * vh.taux_fi; + RETURN cell('AP',l) * vh.taux_fi; ELSE - RETURN cell('AM',l) * vh.taux_fi; + RETURN cell('AJ',l) * vh.taux_fi; END IF; END IF; - -- U=IF(OR(ISBLANK([.$H20]);[.$H20]="Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AS20]*[.F20];[.$AM20]*[.F20])) + -- U=IF([.$H20]="Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AP20]*[.F20];[.$AJ20]*[.F20])) WHEN 'U' THEN - IF vh.type_intervention_code IS NULL OR vh.volume_horaire_ref_id IS NOT NULL THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AS',l) * vh.taux_fa; + RETURN cell('AP',l) * vh.taux_fa; ELSE - RETURN cell('AM',l) * vh.taux_fa; + RETURN cell('AJ',l) * vh.taux_fa; END IF; END IF; - -- V=IF(OR(ISBLANK([.$H20]);[.$H20]="Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AS20]*[.G20];[.$AM20]*[.G20])) + -- V=IF([.$H20]="Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AP20]*[.G20];[.$AJ20]*[.G20])) WHEN 'V' THEN - IF vh.type_intervention_code IS NULL OR vh.volume_horaire_ref_id IS NOT NULL THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AS',l) * vh.taux_fc; + RETURN cell('AP',l) * vh.taux_fc; ELSE - RETURN cell('AM',l) * vh.taux_fc; + RETURN cell('AJ',l) * vh.taux_fc; END IF; END IF; - -- W=IF(OR(ISBLANK([.$H20]);[.$H20]<>"Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AS20];[.$AM20])) - -- !!!!! modifié manuellement : supression du is_blank inutile !!!!! + -- W=IF([.$H20]<>"Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AP20];[.$AJ20])) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AS',l); + RETURN cell('AP',l); ELSE - RETURN cell('AM',l); + RETURN cell('AJ',l); END IF; END IF; - -- X=IF(OR(ISBLANK([.$H20]);[.$H20]="Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AV20]*[.E20];[.$AO20]*[.E20])) + -- X=IF([.$H20]="Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AS20]*[.E20];[.$AL20]*[.E20])) WHEN 'X' THEN - IF vh.type_intervention_code IS NULL OR vh.volume_horaire_ref_id IS NOT NULL THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AV',l) * vh.taux_fi; + RETURN cell('AS',l) * vh.taux_fi; ELSE - RETURN cell('AO',l) * vh.taux_fi; + RETURN cell('AL',l) * vh.taux_fi; END IF; END IF; - -- Y=IF(OR(ISBLANK([.$H20]);[.$H20]="Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AV20]*[.F20];[.$AO20]*[.F20])) + -- Y=IF([.$H20]="Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AS20]*[.F20];[.$AL20]*[.F20])) WHEN 'Y' THEN - IF vh.type_intervention_code IS NULL OR vh.volume_horaire_ref_id IS NOT NULL THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AV',l) * vh.taux_fa; + RETURN cell('AS',l) * vh.taux_fa; ELSE - RETURN cell('AO',l) * vh.taux_fa; + RETURN cell('AL',l) * vh.taux_fa; END IF; END IF; - -- Z=IF(OR(ISBLANK([.$H20]);[.$H20]="Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AV20]*[.G20];[.$AO20]*[.G20])) + -- Z=IF([.$H20]="Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AS20]*[.G20];[.$AL20]*[.G20])) WHEN 'Z' THEN - IF vh.type_intervention_code IS NULL OR vh.volume_horaire_ref_id IS NOT NULL THEN + IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AV',l) * vh.taux_fc; + RETURN cell('AS',l) * vh.taux_fc; ELSE - RETURN cell('AO',l) * vh.taux_fc; + RETURN cell('AL',l) * vh.taux_fc; END IF; END IF; @@ -231,55 +230,28 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_ULHN AS - -- AB=IF(OR(ISBLANK([.$H20]);[.$H20]<>"Référentiel");0;IF(i_type_volume_horaire_code="REALISE";[.$AV20];[.$AO20])) - -- !!!!! modifié manuellement : supression du is_blank inutile !!!!! + -- AB=IF([.$H20]<>"Référentiel";0;IF(i_type_volume_horaire_code="REALISE";[.$AS20];[.$AL20])) WHEN 'AB' THEN IF vh.volume_horaire_ref_id IS NULL THEN RETURN 0; ELSE IF vh.type_volume_horaire_code = 'REALISE' THEN - RETURN cell('AV',l); + RETURN cell('AS',l); ELSE - RETURN cell('AO',l); + RETURN cell('AL',l); END IF; END IF; - -- AE=IF([.M20]>0;SUMIF([.AD21:.AD$500];[.AD20];[.M21:.$M500])+[.M20];0) + -- AE=IF(ISERROR([.I20]);1;[.I20])*[.K20] WHEN 'AE' THEN - IF vh.heures > 0 THEN - val := 0; - FOR sumIfRow IN l + 1 .. ose_formule.volumes_horaires.LENGTH LOOP - IF ose_formule.volumes_horaires.items(sumIfRow).param_5 = vh.param_5 THEN - val := val + ose_formule.volumes_horaires.items(sumIfRow).heures; - END IF; - END LOOP; - RETURN val + vh.heures; - ELSE - RETURN 0; - END IF; - - - - -- AF=IF([.M20]>0;MIN([.M20];[.AE20]);0) - WHEN 'AF' THEN - IF vh.heures > 0 THEN - RETURN LEAST(vh.heures, cell('AE',l)); - ELSE - RETURN 0; - END IF; - - - - -- AH=IF(ISERROR([.I20]);1;[.I20])*[.K20] - WHEN 'AH' THEN RETURN vh.taux_service_du * vh.ponderation_service_du; - -- AI=IF(ISERROR([.J20]);1;IF(i_depassement_service_du_sans_hc="Oui";0;[.J20]))*[.L20] - WHEN 'AI' THEN + -- AF=IF(ISERROR([.J20]);1;IF(i_depassement_service_du_sans_hc="Oui";0;[.J20]))*[.L20] + WHEN 'AF' THEN IF i.depassement_service_du_sans_hc THEN RETURN 0; ELSE @@ -288,216 +260,232 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_ULHN AS - -- AK=IF([.$D20]="Oui";[.$AF20]*[.$AH20];0) - WHEN 'AK' THEN + -- AH=IF([.$D20]="Oui";[.$M20]*[.$AE20];0) + WHEN 'AH' THEN IF vh.service_statutaire THEN - RETURN cell('AF',l) * cell('AH',l); + RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; - -- AL15=SUM([.AK$1:.AK$1048576]) - WHEN 'AL15' THEN - RETURN calcFnc('somme','AK'); + -- AI15=SUM([.AH$1:.AH$1048576]) + WHEN 'AI15' THEN + RETURN calcFnc('somme','AH'); - -- AL16=MIN([.AL15];i_service_du) - WHEN 'AL16' THEN - RETURN LEAST(cell('AL15'), i.service_du); + -- AI16=MIN([.AI15];i_service_du) + WHEN 'AI16' THEN + RETURN LEAST(cell('AI15'), i.service_du); - -- AL17=i_service_du-[.AL16] - WHEN 'AL17' THEN - RETURN i.service_du - cell('AL16'); + -- AI17=i_service_du-[.AI16] + WHEN 'AI17' THEN + RETURN i.service_du - cell('AI16'); - -- AL=IF([.AL$15]>0;[.AK20]/[.AL$15];0) - WHEN 'AL' THEN - IF cell('AL15') > 0 THEN - RETURN cell('AK',l) / cell('AL15'); + -- AI=IF([.AI$15]>0;[.AH20]/[.AI$15];0) + WHEN 'AI' THEN + IF cell('AI15') > 0 THEN + RETURN cell('AH',l) / cell('AI15'); ELSE RETURN 0; END IF; - -- AM=[.AL$16]*[.AL20] - WHEN 'AM' THEN - RETURN cell('AL16') * cell('AL',l); + -- AJ=[.AI$16]*[.AI20] + WHEN 'AJ' THEN + RETURN cell('AI16') * cell('AI',l); - -- AN=IF(AND([.AK20]>0;[.AL$17]=0);([.AK20]-[.AM20])/[.$AH20];0)+IF(AND([.AL$17]=0;[.D20]<>"Oui");[.AF20];0) - WHEN 'AN' THEN - IF cell('AK',l) > 0 AND cell('AL17') = 0 THEN - IF cell('AL17') = 0 AND NOT vh.service_statutaire THEN - RETURN ((cell('AK',l) - cell('AM',l)) / cell('AH',l)) + cell('AF',l); - ELSE - RETURN ((cell('AK',l) - cell('AM',l)) / cell('AH',l)); - END IF; + -- AK=IF([.AI$17]=0;([.AH20]-[.AJ20])/[.$AE20];0) + WHEN 'AK' THEN + IF cell('AI17') = 0 THEN + RETURN (cell('AH',l) - cell('AJ',l)) / cell('AE',l); ELSE - IF cell('AL17') = 0 AND NOT vh.service_statutaire THEN - RETURN cell('AF',l); - ELSE - RETURN 0; - END IF; + RETURN 0; END IF; - -- AO=IF(i_depassement_service_du_sans_hc="Non";[.AN20]*[.$AI20];0) - WHEN 'AO' THEN + -- AL=IF(i_depassement_service_du_sans_hc="Non";[.AK20]*[.$AF20];0) + WHEN 'AL' THEN IF NOT i.depassement_service_du_sans_hc THEN - RETURN cell('AN',l) * cell('AI',l); + RETURN cell('AK',l) * cell('AF',l); ELSE RETURN 0; END IF; - -- AQ=IF([.$D20]="Oui";[.$AF20]*[.$AH20];0) - WHEN 'AQ' THEN + -- AN=IF([.$D20]="Oui";[.$M20]*[.$AE20];0) + WHEN 'AN' THEN IF vh.service_statutaire THEN - RETURN cell('AF',l) * cell('AH',l); + RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; - -- AR=IF([.AQ20]+[.AR19]>i_service_du;i_service_du;[.AQ20]+[.AR19]) - WHEN 'AR' THEN - IF cell('AQ',l) + cell('AR',l-1) > i.service_du THEN + -- AO=IF([.AN20]+[.AO19]>i_service_du;i_service_du;[.AN20]+[.AO19]) + WHEN 'AO' THEN + IF cell('AN',l) + cell('AO',l-1) > i.service_du THEN RETURN i.service_du; ELSE - RETURN cell('AQ',l) + cell('AR',l-1); + RETURN cell('AN',l) + cell('AO',l-1); END IF; - -- AS=[.AR20]-[.AR19] - WHEN 'AS' THEN - RETURN cell('AR',l) - cell('AR',l-1); + -- AP=[.AO20]-[.AO19] + WHEN 'AP' THEN + RETURN cell('AO',l) - cell('AO',l-1); - -- AT=IF([.AQ20]>0;([.AQ20]-[.AS20])/[.AH20];0) - WHEN 'AT' THEN - IF cell('AQ',l) > 0 THEN - RETURN (cell('AQ',l) - cell('AS',l)) / cell('AH',l); + -- AQ=IF([.AN20]>0;([.AN20]-[.AP20])/[.AE20];0) + WHEN 'AQ' THEN + IF cell('AN',l) > 0 THEN + RETURN (cell('AN',l) - cell('AP',l)) / cell('AE',l); ELSE RETURN 0; END IF; - -- AU=IF([.D20]="Oui";0;[.AF20]) - WHEN 'AU' THEN + -- AR=IF([.D20]="Oui";0;[.M20]) + WHEN 'AR' THEN IF vh.service_statutaire THEN RETURN 0; ELSE - RETURN cell('AF',l); + RETURN vh.heures; END IF; - -- AV=([.AT20]+[.AU20])*[.AI20] - WHEN 'AV' THEN - RETURN (cell('AT',l) + cell('AU',l)) * cell('AI',l); + -- AS=([.AQ20]+[.AR20])*[.AF20] + WHEN 'AS' THEN + RETURN (cell('AQ',l) + cell('AR',l)) * cell('AF',l); - -- AR19 - WHEN 'AR19' THEN + -- AO19 + WHEN 'AO19' THEN RETURN 0; - ELSE - DBMS_OUTPUT.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!'); - raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); - END CASE; + ELSE + dbms_output.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!'); raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); + END CASE; + raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); - END; + END; - PROCEDURE CALCUL_RESULTAT IS - BEGIN - feuille.DELETE; + PROCEDURE CALCUL_RESULTAT IS + BEGIN + feuille.delete; - IF ose_formule.intervenant.depassement_service_du_sans_hc THEN -- HC traitées comme du service - ose_formule.intervenant.service_du := ose_formule.intervenant.heures_service_statutaire + ose_formule.intervenant.heures_service_modifie; - END IF; + IF ose_formule.intervenant.annee_id < 2022 THEN + FORMULE_ULHN_2021.CALCUL_RESULTAT; + RETURN; + END IF; - -- pré-traitement spécifique au Havre : à conserver lors de modifications ultérieures de la formule - FOR l IN 1 .. ose_formule.volumes_horaires.LENGTH LOOP - -- on est en réel : param_1 n'est pas utile puisqu'on a l'ID du service à dispo - IF ose_formule.volumes_horaires.items(l).param_1 IS NULL THEN - ose_formule.volumes_horaires.items(l).param_5 := COALESCE(ose_formule.volumes_horaires.items(l).service_id,0) - || '-' || COALESCE(ose_formule.volumes_horaires.items(l).service_referentiel_id,0) - || '-' || COALESCE(ose_formule.volumes_horaires.items(l).type_intervention_code,'0'); - ELSE - -- en mode test, on doit fournir param1 obligatoirement! - ose_formule.volumes_horaires.items(l).param_5 := ose_formule.volumes_horaires.items(l).param_1 || '-' || COALESCE(ose_formule.volumes_horaires.items(l).type_intervention_code,'0'); - END IF; - END LOOP; - - -- transmission des résultats aux volumes horaires et volumes horaires référentiel - FOR l IN 1 .. ose_formule.volumes_horaires.LENGTH LOOP - ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'T',l); - ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'U',l); - ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'V',l); - ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'W',l); - ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'X',l); - ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'Y',l); - ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'Z',l); - ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AA',l); - ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AB',l); - END LOOP; - END; - - - - FUNCTION INTERVENANT_QUERY RETURN CLOB IS - BEGIN - RETURN ' - SELECT - fi.*, - NULL param_1, - NULL param_2, - NULL param_3, - NULL param_4, - NULL param_5 - FROM - V_FORMULE_INTERVENANT fi - '; - END; + IF ose_formule.intervenant.depassement_service_du_sans_hc THEN -- HC traitées comme du service + ose_formule.intervenant.service_du := ose_formule.intervenant.heures_service_statutaire + ose_formule.intervenant.heures_service_modifie; + END IF; + -- transmission des résultats aux volumes horaires et volumes horaires référentiel + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'T',l); + ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'U',l); + ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'V',l); + ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'W',l); + ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'X',l); + ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'Y',l); + ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'Z',l); + ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AA',l); + ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AB',l); + END LOOP; + END; - FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB IS - BEGIN - RETURN ' - SELECT - fvh.*, + + FUNCTION INTERVENANT_QUERY RETURN CLOB IS + BEGIN + RETURN ' + SELECT + fi.*, NULL param_1, NULL param_2, NULL param_3, NULL param_4, NULL param_5 FROM - V_FORMULE_VOLUME_HORAIRE fvh - ORDER BY - ordre - '; - END; - - END FORMULE_ULHN; \ No newline at end of file + V_FORMULE_INTERVENANT fi + '; + END; + + + + FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB IS + BEGIN + RETURN ' + SELECT + ORDRE, + ID, + VOLUME_HORAIRE_ID, + VOLUME_HORAIRE_REF_ID, + SERVICE_ID, + SERVICE_REFERENTIEL_ID, + INTERVENANT_ID, + TYPE_INTERVENTION_ID, + TYPE_VOLUME_HORAIRE_ID, + ETAT_VOLUME_HORAIRE_ID, + TYPE_VOLUME_HORAIRE_CODE, + TAUX_FI, + TAUX_FA, + TAUX_FC, + STRUCTURE_ID, + STRUCTURE_CODE, + STRUCTURE_IS_AFFECTATION, + STRUCTURE_IS_UNIV, + STRUCTURE_IS_EXTERIEUR, + PONDERATION_SERVICE_DU, + PONDERATION_SERVICE_COMPL, + SERVICE_STATUTAIRE, + CASE WHEN 0 > MIN(heures) OVER (PARTITION BY service_id, type_intervention_id, periode_id, horaire_debut, horaire_fin) THEN + CASE WHEN volume_horaire_id = MIN(volume_horaire_id) OVER (PARTITION BY service_id, type_intervention_id, periode_id, horaire_debut, horaire_fin) THEN + SUM(heures) OVER (PARTITION BY service_id, type_intervention_id, periode_id, horaire_debut, horaire_fin) + ELSE 0 END + ELSE heures END HEURES, + PERIODE_ID, + HORAIRE_DEBUT, + HORAIRE_FIN, + TYPE_INTERVENTION_CODE, + TAUX_SERVICE_DU, + TAUX_SERVICE_COMPL, + NULL param_1, + NULL param_2, + NULL param_3, + NULL param_4, + NULL param_5 + FROM + v_formule_volume_horaire + ORDER BY + ordre + '; + END; + +END FORMULE_ULHN; \ No newline at end of file diff --git a/data/ddl/package/FORMULE_ULHN/definition.sql b/data/ddl/package/FORMULE_ULHN/definition.sql index f4c6672f76b1f3047dd5df52df51cdff53d6b983..d424f5eb377c44c9a758e30eb245b0ce1c84ee6b 100644 --- a/data/ddl/package/FORMULE_ULHN/definition.sql +++ b/data/ddl/package/FORMULE_ULHN/definition.sql @@ -1,4 +1,4 @@ -CREATE OR REPLACE PACKAGE FORMULE_ULHN AS +CREATE OR REPLACE PACKAGE "FORMULE_ULHN" AS PROCEDURE CALCUL_RESULTAT; diff --git a/data/ddl/package/FORMULE_ULHN_2021/body.sql b/data/ddl/package/FORMULE_ULHN_2021/body.sql new file mode 100644 index 0000000000000000000000000000000000000000..5a95dbc98885501c39cda0355df37fd3a32f2dcf --- /dev/null +++ b/data/ddl/package/FORMULE_ULHN_2021/body.sql @@ -0,0 +1,432 @@ +CREATE OR REPLACE PACKAGE BODY FORMULE_ULHN_2021 AS + decalageLigne NUMERIC DEFAULT 21; + + + /* Stockage des valeurs intermédiaires */ + TYPE t_cell IS RECORD ( + valeur FLOAT, + enCalcul BOOLEAN DEFAULT FALSE + ); + TYPE t_cells IS TABLE OF t_cell INDEX BY PLS_INTEGER; + TYPE t_coll IS RECORD ( + cells t_cells + ); + TYPE t_colls IS TABLE OF t_coll INDEX BY VARCHAR2(50); + feuille t_colls; + + debugLine NUMERIC; + + + PROCEDURE dbg( val CLOB ) IS + BEGIN + ose_formule.volumes_horaires.items(debugLine).debug_info := + ose_formule.volumes_horaires.items(debugLine).debug_info || val; + END; + + + PROCEDURE dbgi( val CLOB ) IS + BEGIN + ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; + END; + + PROCEDURE dbgDump( val CLOB ) IS + BEGIN + dbg('<div class="dbg-dump">' || val || '</div>'); + END; + + PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS + ligne NUMERIC; + BEGIN + ligne := l; + IF l <> 0 THEN + ligne := ligne + decalageLigne; + END IF; + + dbgi( '[cell|' || c || '|' || ligne || '|' || val ); + END; + + PROCEDURE dbgCalc( fncName VARCHAR2, c VARCHAR2, res FLOAT ) IS + BEGIN + dbgi( '[calc|' || fncName || '|' || c || '|' || res ); + END; + + FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 0 ) RETURN FLOAT IS + val FLOAT; + BEGIN + IF feuille.exists(c) THEN + IF feuille(c).cells.exists(l) THEN + IF feuille(c).cells(l).enCalcul THEN + raise_application_error( -20001, 'Dépendance cyclique : la cellule [' || c || ';' || l || '] est déjà en cours de calcul'); + END IF; + RETURN feuille(c).cells(l).valeur; + END IF; + END IF; + + feuille(c).cells(l).enCalcul := true; + val := calcCell( c, l ); + IF ose_formule.debug_actif THEN + dbgCell( c, l, val ); + END IF; + feuille(c).cells(l).valeur := val; + feuille(c).cells(l).enCalcul := false; + + RETURN val; + END; + + FUNCTION mainCell( libelle VARCHAR2, c VARCHAR2, l NUMERIC ) RETURN FLOAT IS + val FLOAT; + BEGIN + debugLine := l; + val := cell(c,l); + + RETURN val; + END; + + FUNCTION calcFnc( fncName VARCHAR2, c VARCHAR2 ) RETURN FLOAT IS + val FLOAT; + cellRes FLOAT; + BEGIN + IF feuille.exists('__' || fncName || '__' || c || '__') THEN + IF feuille('__' || fncName || '__' || c || '__').cells.exists(1) THEN + RETURN feuille('__' || fncName || '__' || c || '__').cells(1).valeur; + END IF; + END IF; + CASE + -- Liste des fonctions supportées + + WHEN fncName = 'total' THEN + val := 0; + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + val := val + COALESCE(cell(c, l),0); + END LOOP; + + WHEN fncName = 'max' THEN + val := NULL; + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + cellRes := cell(c,l); + IF val IS NULL OR val < cellRes THEN + val := cellRes; + END IF; + END LOOP; + + -- fin de la liste des fonctions supportées + ELSE + raise_application_error( -20001, 'La formule "' || fncName || '" n''existe pas!'); + END CASE; + IF ose_formule.debug_actif THEN + dbgCalc(fncName, c, val ); + END IF; + feuille('__' || fncName || '__' || c || '__').cells(1).valeur := val; + + RETURN val; + END; + + + FUNCTION calcVersion RETURN NUMERIC IS + BEGIN + RETURN 1; + END; + + + + FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS + vh ose_formule.t_volume_horaire; + i ose_formule.t_intervenant; + v NUMERIC; + val FLOAT; + BEGIN + v := calcVersion; + + i := ose_formule.intervenant; + IF l > 0 THEN + vh := ose_formule.volumes_horaires.items(l); + END IF; + CASE + + + -- j=SI(ESTVIDE(C22);0;RECHERCHEH(SI(ET(C22="TP";TP_vaut_TD="Oui");"TD";C22);types_intervention;2;0)) + -- = RECHERCHEH(SI(ET(C22="TP";TP_vaut_TD="Oui");"TD";C22);types_intervention;2;0) + WHEN c = 'j' AND v >= 1 THEN + --RETURN GREATEST(vh.taux_service_du * vh.ponderation_service_du,1); + RETURN vh.taux_service_du * vh.ponderation_service_du ; + + -- k=SI(ESTVIDE(C22);0;RECHERCHEH(C22;types_intervention;3;0)) + -- =RECHERCHEH(C22;types_intervention;3;0) + WHEN c = 'k' AND v >= 1 THEN + RETURN vh.taux_service_compl; + + -- l=SI(H22="Oui";I22*J22;0) + WHEN c = 'l' AND v >= 1 THEN + IF vh.service_statutaire THEN + RETURN vh.heures * cell( 'j', l ); + ELSE + RETURN 0; + END IF; + + + -- l522=SOMME(L22:L81) + WHEN c = 'l522' AND v >= 1 THEN + RETURN calcFnc('total','l'); + + -- n=SI($L$82>0;L22/$L$82;0) + WHEN c = 'n' AND v >= 1 THEN + IF cell('l522') > 0 THEN + RETURN cell('l',l) / cell('l522'); + ELSE + RETURN 0; + END IF; + + -- o=MIN(service_du;$L$82)*N22 + WHEN c = 'o' AND v >= 1 THEN + RETURN LEAST(ose_formule.intervenant.service_du, cell('l522')) * cell('n',l); + + -- p=SI(L22<>0;O22/L22;0) + WHEN c = 'p' AND v >= 1 THEN + IF cell('l',l) <> 0 THEN + RETURN cell('o',l) / cell('l',l); + ELSE + RETURN 0; + END IF; + + -- q=SI($L$82>service_du;1-P22;0) + WHEN c = 'q' AND v >= 1 THEN + IF cell('l522') > ose_formule.intervenant.service_du THEN + RETURN 1 - cell('p',l); + ELSE + RETURN 0; + END IF; + + -- r=I22*Q22*K22 + -- Changement : ajout de * vh.ponderation_service_du pour prendre en compte le modulateur + WHEN c = 'r' AND v >= 1 THEN + RETURN vh.heures * cell('q',l) * cell('k',l) * vh.ponderation_service_du; + + + + -- t=SI(service_du=0;0;SI(T21+L22>service_du;service_du;T21+L22)) + WHEN c = 't' AND v >= 1 THEN + IF l = 0 THEN + RETURN 0; + END IF; + IF i.service_du = 0 THEN + RETURN 0; + ELSE + IF (cell('t',l-1) + cell('l',l)) > ose_formule.intervenant.service_du THEN + RETURN ose_formule.intervenant.service_du; + ELSE + RETURN cell('t',l-1) + cell('l',l); + END IF; + END IF; + + + + -- u=SI(service_du=0;0;SI(T21+L22>service_du;service_du-T21;L22)) + WHEN c = 'u' AND v >= 1 THEN + IF i.service_du = 0 THEN + RETURN 0; + ELSE + --SI(T21+L22>service_du;service_du-T21;L22) + IF cell('t',l-1) + cell('l',l) > i.service_du THEN + RETURN i.service_du - cell('t',l-1); + ELSE + RETURN cell('l',l); + END IF; + END IF; + + -- v=SI(service_du=0;I22;SI(J22>0;SI(T21+L22<service_du;0;((T21+L22)-service_du)/J22);0)) + WHEN c = 'v' AND v >= 1 THEN + IF i.service_du = 0 THEN + RETURN vh.heures; + ELSE + --SI(J22>0;SI(T21+L22<service_du;0;((T21+L22)-service_du)/J22);0) + IF cell('j',l) > 0 THEN + --SI(T21+L22<service_du;0;((T21+L22)-service_du)/J22) + IF cell('t',l-1) + cell('l',l) < i.service_du THEN + RETURN 0; + ELSE + --((T21+L22)-service_du)/J22 + RETURN ((cell('t',l-1) + cell('l',l)) - i.service_du) / cell('j',l); + END IF; + ELSE + RETURN 0; + END IF; + END IF; + + -- w=SI(OU(service_realise<service_du;HC_autorisees<>"Oui");0;(V22+SI(H22<>"Oui";I22;0))*K22) + -- Changement : ajout de * vh.ponderation_service_du pour prendre en compte le modulateur + WHEN c = 'w' AND v >= 1 THEN + IF cell('service_realise') < ose_formule.intervenant.service_du OR ose_formule.intervenant.depassement_service_du_sans_hc THEN + RETURN 0; + ELSE + --(V22+SI(H22<>"Oui";I22;0))*K22 + RETURN (cell('v',l) + CASE WHEN NOT vh.service_statutaire THEN vh.heures ELSE 0 END ) * cell('k',l) * vh.ponderation_service_du; + END IF; + + -- y=SI(OU(ESTVIDE($C22);$C22="Référentiel");0;SI(contexte_calcul="Réalisé";$U22*D22;$O22*D22)) + WHEN c = 'y' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + RETURN 0; + ELSE + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('u',l) * vh.taux_fi; + ELSE + RETURN cell('o',l) * vh.taux_fi; + END IF; + END IF; + + -- z=SI(OU(ESTVIDE($C22);$C22="Référentiel");0;SI(contexte_calcul="Réalisé";$U22*E22;$O22*E22)) + WHEN c = 'z' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + RETURN 0; + ELSE + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('u',l) * vh.taux_fa; + ELSE + RETURN cell('o',l) * vh.taux_fa; + END IF; + END IF; + + -- aa=SI(OU(ESTVIDE($C22);$C22="Référentiel");0;SI(contexte_calcul="Réalisé";$U22*F22;$O22*F22)) + WHEN c = 'aa' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + RETURN 0; + ELSE + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('u',l) * vh.taux_fc; + ELSE + RETURN cell('o',l) * vh.taux_fc; + END IF; + END IF; + + -- ab=SI($C22="Référentiel";SI(contexte_calcul="Réalisé";$U22;$R22);0) + WHEN c = 'ab' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('u',l); + ELSE + RETURN cell('r',l); + END IF; + ELSE + RETURN 0; + END IF; + + -- ac=SI(OU(ESTVIDE($C22);$C22="Référentiel");0;SI(contexte_calcul="Réalisé";$V22*D22;$R22*D22)) + WHEN c = 'ac' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + RETURN 0; + ELSE + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('w',l) * vh.taux_fi; + ELSE + RETURN cell('r',l) * vh.taux_fi; + END IF; + END IF; + + -- ad=SI(OU(ESTVIDE($C22);$C22="Référentiel");0;SI(contexte_calcul="Réalisé";$V22*E22;$R22*E22)) + WHEN c = 'ad' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + RETURN 0; + ELSE + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('w',l) * vh.taux_fa; + ELSE + RETURN cell('r',l) * vh.taux_fa; + END IF; + END IF; + + -- ae=SI(OU(ESTVIDE($C22);$C22="Référentiel");0;SI(contexte_calcul="Réalisé";$V22*F22;$R22*F22)) + WHEN c = 'ae' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + RETURN 0; + ELSE + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('w',l) * vh.taux_fc; + ELSE + RETURN cell('r',l) * vh.taux_fc; + END IF; + END IF; + + -- af=0 + WHEN c = 'af' AND v >= 1 THEN + RETURN 0; + + -- ag=SI($C22="Référentiel";SI(contexte_calcul="Réalisé";$V22;$R22);0) + WHEN c = 'ag' AND v >= 1 THEN + IF vh.service_referentiel_id IS NOT NULL THEN + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN cell('w',l); + ELSE + RETURN cell('r',l); + END IF; + ELSE + RETURN 0; + END IF; + + -- d17=SI(contexte_calcul="Réalisé";MAX($T$22:$T$81);SOMME($O$22:$O$81)) + WHEN c='service_realise' AND v >= 1 THEN + IF ose_formule.intervenant.type_volume_horaire_id = 2 THEN + RETURN calcFnc('max','t'); + ELSE + RETURN calcFnc('total','o'); + END IF; + + ELSE + raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); + END CASE; END; + + + + PROCEDURE CALCUL_RESULTAT IS + BEGIN + feuille.delete; + + -- transmission des résultats aux volumes horaires et volumes horaires référentiel + FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP + ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'y',l); + ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'z',l); + ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'aa',l); + ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'ab',l); + ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'ac',l); + ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'ad',l); + ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'ae',l); + ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'af',l); + ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'ag',l); + END LOOP; + END; + + + + FUNCTION INTERVENANT_QUERY RETURN CLOB IS + BEGIN + RETURN ' + SELECT + fi.*, + NULL param_1, + NULL param_2, + NULL param_3, + NULL param_4, + NULL param_5 + FROM + V_FORMULE_INTERVENANT fi + '; + END; + + + + FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB IS + BEGIN + RETURN ' + SELECT + fvh.*, + NULL param_1, + NULL param_2, + NULL param_3, + NULL param_4, + NULL param_5 + FROM + V_FORMULE_VOLUME_HORAIRE fvh + ORDER BY + ordre'; + END; + +END FORMULE_ULHN_2021; \ No newline at end of file diff --git a/data/ddl/package/FORMULE_ULHN_2021/definition.sql b/data/ddl/package/FORMULE_ULHN_2021/definition.sql new file mode 100644 index 0000000000000000000000000000000000000000..9b32dc0856c66c7f13303682bec4cb7492a64d0c --- /dev/null +++ b/data/ddl/package/FORMULE_ULHN_2021/definition.sql @@ -0,0 +1,10 @@ +CREATE OR REPLACE PACKAGE FORMULE_ULHN_2021 AS + + PROCEDURE CALCUL_RESULTAT; + + FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT; + + FUNCTION INTERVENANT_QUERY RETURN CLOB; + FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB; + +END FORMULE_ULHN_2021; \ No newline at end of file diff --git a/data/ddl/package/FORMULE_UVSQ/body.sql b/data/ddl/package/FORMULE_UVSQ/body.sql index fd18290b5b9270eaa6c73154703211d98add08f1..9c449a0ecbd96afef5113c48526b429b7c080006 100644 --- a/data/ddl/package/FORMULE_UVSQ/body.sql +++ b/data/ddl/package/FORMULE_UVSQ/body.sql @@ -373,6 +373,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_UVSQ AS WHEN c = 'AQ' AND v >= 1 THEN IF cell('AO17') = 0 THEN RETURN (cell('AN',l) - cell('AP',l)) / cell('AE',l); + ELSE + RETURN 0; END IF; diff --git a/data/ddl/package/OSE_FORMULE/body.sql b/data/ddl/package/OSE_FORMULE/body.sql index baf275a5e3cf1586259f97232d39ab03fa742096..db6563fca78df4a49250b003ed19504f8458a9b1 100644 --- a/data/ddl/package/OSE_FORMULE/body.sql +++ b/data/ddl/package/OSE_FORMULE/body.sql @@ -296,6 +296,7 @@ CREATE OR REPLACE PACKAGE BODY "OSE_FORMULE" AS vh.ponderation_service_compl, vh.service_statutaire, vh.heures, + length, -- on ignore ensuite vh_horaire_debut, vh_horaire_fin, vh.type_intervention_code, diff --git a/data/ddl/package/OSE_PAIEMENT/body.sql b/data/ddl/package/OSE_PAIEMENT/body.sql index 862d06af580668cd9993043f3c39f1c5a022cd02..50234ca96711438b123831e3b73befaca80bbd32 100644 --- a/data/ddl/package/OSE_PAIEMENT/body.sql +++ b/data/ddl/package/OSE_PAIEMENT/body.sql @@ -1,10 +1,10 @@ CREATE OR REPLACE PACKAGE BODY "OSE_PAIEMENT" AS + code_taux_remu_legal CONSTANT VARCHAR2(3) := 'TLD'; + mois_extraction_paie VARCHAR2(50) := '01'; annee_extraction_paie VARCHAR2(50) := '22'; - - PROCEDURE check_bad_paiements(formule_res_service_id NUMERIC DEFAULT NULL, formule_res_service_ref_id NUMERIC DEFAULT NULL) IS cc NUMERIC; BEGIN @@ -62,5 +62,112 @@ CREATE OR REPLACE PACKAGE BODY "OSE_PAIEMENT" AS RETURN '20' || ose_paiement.annee_extraction_paie || '-' || ose_paiement.mois_extraction_paie; END; + Function get_taux_horaire (id_in IN NUMBER, date_val IN DATE) RETURN float IS + valeur float; + valeur_parent float; + BEGIN + + SELECT valeur into valeur FROM + ( + SELECT trv.valeur + FROM taux_remu tr + JOIN taux_remu_valeur trv ON tr.id = trv.taux_remu_id + WHERE tr.id = id_in + AND tr.histo_destruction IS NULL + AND trv.date_effet <= date_val + ORDER BY trv.date_effet DESC + ) + WHERE rownum = 1; + + + SELECT( + SELECT valeur FROM + ( + SELECT trv.valeur + FROM taux_remu tr + JOIN taux_remu_valeur trv ON tr.id = trv.taux_remu_id + WHERE tr.id IN + ( + SELECT tr.taux_remu_id + FROM taux_remu tr + WHERE tr.id = id_in + ) + AND tr.histo_destruction IS NULL + AND trv.date_effet <= date_val + ORDER BY trv.date_effet DESC + ) + WHERE rownum = 1 + ) into valeur_parent + FROM dual; + + IF valeur_parent is NULL + THEN + RETURN valeur; + ELSE + RETURN valeur*valeur_parent; + END IF; + + + EXCEPTION + WHEN OTHERS THEN + return -1; + END get_taux_horaire; + + Function get_taux_horaire_date (id_in IN NUMBER, date_val IN DATE) RETURN DATE IS + date_valeur DATE; + date_parent DATE; + BEGIN + SELECT date_effet into date_valeur FROM + ( + SELECT trv.date_effet + FROM taux_remu tr + JOIN taux_remu_valeur trv ON tr.id = trv.taux_remu_id + WHERE tr.id = id_in + AND tr.histo_destruction IS NULL + AND trv.date_effet <= date_val + ORDER BY trv.date_effet DESC + ) + WHERE rownum = 1; + + + SELECT( + SELECT date_effet FROM + ( + SELECT trv.date_effet + FROM taux_remu tr + JOIN taux_remu_valeur trv ON tr.id = trv.taux_remu_id + WHERE tr.id IN + ( + SELECT tr.taux_remu_id + FROM taux_remu tr + WHERE tr.id = id_in + ) + AND tr.histo_destruction IS NULL + AND trv.date_effet <= date_val + ORDER BY trv.date_effet DESC + ) + WHERE rownum = 1 + ) into date_parent + FROM dual; + + IF date_parent is NULL + THEN + RETURN date_valeur; + ELSE + RETURN GREATEST(date_valeur, date_parent); + END IF; + + EXCEPTION + WHEN OTHERS THEN + return '00/00/0000'; + END get_taux_horaire_date; + + + + + FUNCTION get_code_taux_remu_legal RETURN VARCHAR2 IS + BEGIN + RETURN code_taux_remu_legal; + END; END ose_paiement; \ No newline at end of file diff --git a/data/ddl/package/OSE_PAIEMENT/definition.sql b/data/ddl/package/OSE_PAIEMENT/definition.sql index 09d6c8fed4e0548805982b53fb1ee0003347896f..77f28e6558b54e670262abada6de77e1a207a9fe 100644 --- a/data/ddl/package/OSE_PAIEMENT/definition.sql +++ b/data/ddl/package/OSE_PAIEMENT/definition.sql @@ -12,4 +12,10 @@ CREATE OR REPLACE PACKAGE "OSE_PAIEMENT" AS FUNCTION get_format_mois_du RETURN VARCHAR2; + FUNCTION get_taux_horaire(id_in IN NUMBER, date_val IN DATE) return float; + + FUNCTION get_taux_horaire_date(id_in IN NUMBER, date_val IN DATE) return DATE; + + FUNCTION get_code_taux_remu_legal RETURN VARCHAR2; + END ose_paiement; \ No newline at end of file diff --git a/data/ddl/package/OSE_WORKFLOW/body.sql b/data/ddl/package/OSE_WORKFLOW/body.sql index e83f4d74a6bf44fcf034902719ed43f8fe763f2a..a56a22f0d0de8be4fb062ab6a8d4f8eac32593d3 100644 --- a/data/ddl/package/OSE_WORKFLOW/body.sql +++ b/data/ddl/package/OSE_WORKFLOW/body.sql @@ -350,6 +350,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS p VARCHAR2(30); dems CLOB; intervenant CLOB; + mission CLOB; dossier CLOB; service_saisie CLOB; service_saisie_realise CLOB; @@ -362,6 +363,9 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS contrat CLOB; BEGIN dems := ' + WHEN e.code = ''MISSION_SAISIE'' OR e.code = ''MISSION_VALIDATION'' OR e.code = ''MISSION_SAISIE_REALISE'' OR e.code = ''MISSION_VALIDATION_REALISE'' THEN + si.mission + WHEN e.code = ''DONNEES_PERSO_SAISIE'' OR e.code = ''DONNEES_PERSO_VALIDATION'' THEN si.dossier @@ -417,6 +421,64 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS + mission := ' + SELECT + ''MISSION_SAISIE'' etape_code, + m.intervenant_id intervenant_id, + COALESCE(m.structure_id,m.intervenant_structure_id) structure_id, + SUM(1) objectif, + SUM(CASE WHEN m.mission_id IS NULL THEN 0 ELSE 1 END) realisation + FROM + tbl_mission m + WHERE + m.actif = 1 + GROUP BY + m.intervenant_id, m.structure_id, m.intervenant_structure_id + + UNION ALL + + SELECT + ''MISSION_VALIDATION'' etape_code, + m.intervenant_id intervenant_id, + m.structure_id structure_id, + SUM(1) objectif, + SUM(m.valide) realisation + FROM + tbl_mission m + WHERE + m.actif = 1 + GROUP BY + m.intervenant_id, m.structure_id + + UNION ALL + + SELECT + ''MISSION_SAISIE_REALISE'' etape_code, + m.intervenant_id intervenant_id, + m.structure_id structure_id, + 1 objectif, + CASE WHEN m.heures_realisees > 0 THEN 1 ELSE 0 END realisation + FROM + tbl_mission m + WHERE + m.actif = 1 + + UNION ALL + + SELECT + ''MISSION_VALIDATION_REALISE'' etape_code, + m.intervenant_id intervenant_id, + m.structure_id structure_id, + m.heures_realisees objectif, + m.heures_validees realisation + FROM + tbl_mission m + WHERE + m.actif = 1 + '; + + + dossier := ' SELECT e.code etape_code, @@ -457,16 +519,17 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS LEFT JOIN ( SELECT DISTINCT t.intervenant_id FROM tbl_service t - WHERE t.heures > 0 AND t.type_volume_horaire_code = ''PREVU'' + WHERE ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 't') || ' AND (t.heures <> 0 OR t.valide > 0) AND t.type_volume_horaire_code = ''PREVU'' UNION SELECT DISTINCT t.intervenant_id FROM tbl_referentiel t - WHERE t.heures > 0 AND t.type_volume_horaire_code = ''PREVU'' + WHERE ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 't') || ' AND (t.heures <> 0 OR t.valide > 0) AND t.type_volume_horaire_code = ''PREVU'' ) t ON t.intervenant_id = i.id WHERE - i.histo_destruction IS NULL + ' || unicaen_tbl.MAKE_WHERE(CASE param WHEN 'INTERVENANT_ID' THEN 'ID' ELSE param END, VALUE, 'i') || ' + AND i.histo_destruction IS NULL AND (si.service_prevu = 1 OR si.referentiel_prevu = 1) '; @@ -485,16 +548,17 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS LEFT JOIN ( SELECT DISTINCT t.intervenant_id FROM tbl_service t - WHERE t.heures > 0 AND t.type_volume_horaire_code = ''REALISE'' + WHERE ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 't') || ' AND (t.heures <> 0 OR t.valide > 0) AND t.type_volume_horaire_code = ''REALISE'' UNION SELECT DISTINCT t.intervenant_id FROM tbl_referentiel t - WHERE t.heures > 0 AND t.type_volume_horaire_code = ''REALISE'' + WHERE ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 't') || ' AND (t.heures <> 0 OR t.valide > 0) AND t.type_volume_horaire_code = ''REALISE'' ) t ON t.intervenant_id = i.id WHERE - i.histo_destruction IS NULL + ' || unicaen_tbl.MAKE_WHERE(CASE param WHEN 'INTERVENANT_ID' THEN 'ID' ELSE param END, VALUE, 'i') || ' + AND i.histo_destruction IS NULL AND (si.service_realise = 1 OR si.referentiel_realise = 1) '; @@ -514,7 +578,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS tbl_validation_enseignement tve JOIN type_volume_horaire tvh ON tvh.id = tve.type_volume_horaire_id WHERE - ' || unicaen_tbl.MAKE_WHERE(param, VALUE) || ' + ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 'tve') || ' AND tve.auto_validation = 0 GROUP BY tve.intervenant_id, @@ -538,7 +602,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS tbl_validation_referentiel tvr JOIN type_volume_horaire tvh ON tvh.id = tvr.type_volume_horaire_id WHERE - ' || unicaen_tbl.MAKE_WHERE(param, VALUE) || ' + ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 'tvr') || ' AND tvr.auto_validation = 0 GROUP BY tvr.intervenant_id, @@ -600,7 +664,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS tbl_agrement a JOIN type_agrement ta ON ta.id = a.type_agrement_id WHERE - ' || unicaen_tbl.MAKE_WHERE(param, VALUE) || ' + ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 'a') || ' '; @@ -693,7 +757,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS JOIN parametre p on p.nom = ''contrat_regle_franchissement'' JOIN parametre p2 on p2.nom = ''avenant'' WHERE - ' || unicaen_tbl.MAKE_WHERE(param, VALUE) || ' + ' || unicaen_tbl.MAKE_WHERE(param, VALUE, 'c') || ' AND actif = 1 AND nbvh > 0 ) c @@ -720,6 +784,7 @@ CREATE OR REPLACE PACKAGE BODY OSE_WORKFLOW AS JOIN type_intervenant ti ON ti.id = si.type_intervenant_id JOIN wf_etape e ON 1 = CASE ' || dems || ' END LEFT JOIN ( ' || dossier || ' + UNION ALL ' || mission || ' UNION ALL ' || service_saisie || ' UNION ALL ' || service_saisie_realise || ' UNION ALL ' || validation_enseignement || ' diff --git a/data/ddl/package/UNICAEN_TBL/body.sql b/data/ddl/package/UNICAEN_TBL/body.sql index 53425aefc72cdb2590a669039226527a7c2699ae..2721cc1539261c8d851e5aa0da03f2f6ac8b96d7 100644 --- a/data/ddl/package/UNICAEN_TBL/body.sql +++ b/data/ddl/package/UNICAEN_TBL/body.sql @@ -1,307 +1,414 @@ -CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS +CREATE +OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS TYPE t_dems_values IS TABLE OF BOOLEAN INDEX BY VARCHAR2(80); - TYPE t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30); - TYPE t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30); + TYPE +t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30); + TYPE +t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30); - dems t_dems; + dems +t_dems; - FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, + FUNCTION +MAKE_WHERE(param VARCHAR2 DEFAULT NULL, VALUE VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS res VARCHAR2(120) DEFAULT ''; - BEGIN - IF param IS NULL THEN +BEGIN + IF +param IS NULL THEN RETURN '1=1'; - END IF; - IF alias IS NOT NULL THEN +END IF; + IF +alias IS NOT NULL THEN res := alias || '.'; - END IF; - IF value IS NULL THEN +END IF; + IF +VALUE IS NULL THEN RETURN res || param || ' IS NULL'; - END IF; - RETURN res || param || ' = q''[' || value || ']'''; - END; +END IF; +RETURN res || param || ' = q''[' || value || ']'''; +END; - FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS + FUNCTION +QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, VALUE VARCHAR2) RETURN CLOB IS pos NUMERIC; - paramLen NUMERIC; - paramComm VARCHAR2(200); - debComm NUMERIC; - endComm NUMERIC; - debReal NUMERIC; - realParam VARCHAR2(80); - realValue VARCHAR2(120); - q CLOB; - BEGIN - q := sqlQuery; - IF param IS NULL THEN + paramLen +NUMERIC; + paramComm +VARCHAR2(200); + debComm +NUMERIC; + endComm +NUMERIC; + debReal +NUMERIC; + realParam +VARCHAR2(80); + realValue +VARCHAR2(120); + q +CLOB; +BEGIN + q +:= sqlQuery; + IF +param IS NULL THEN RETURN q; - END IF; +END IF; - paramlen := length(param); - IF value IS NULL THEN + paramlen +:= LENGTH(param); + IF +VALUE IS NULL THEN realValue := ' IS NULL'; - ELSE - BEGIN - realValue := TO_NUMBER(value); - EXCEPTION +ELSE +BEGIN + realValue +:= TO_NUMBER(VALUE); +EXCEPTION WHEN VALUE_ERROR THEN - realValue := 'q''[' || value || ']'''; - END; - realValue := '=' || realValue; - END IF; + realValue := 'q''[' || VALUE || ']'''; +END; + realValue +:= '=' || realValue; +END IF; LOOP - pos := instr(q, '/*@' || param, 1, 1); - EXIT WHEN pos = 0; - debComm := pos - 1; - endComm := instr(q, '*/', pos, 1); - paramComm := substr(q, debComm, endComm - debComm); - debReal := instr(paramComm, '=', 1, 1); - realParam := trim(substr(paramComm, debReal + 1)); +pos := instr(q, '/*@' || param, 1, 1); + EXIT +WHEN pos = 0; + debComm +:= pos - 1; + endComm +:= instr(q, '*/', pos, 1); + paramComm +:= substr(q, debComm, endComm - debComm); + debReal +:= instr(paramComm, '=', 1, 1); + realParam +:= TRIM(substr(paramComm, debReal + 1)); --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4); - realParam := 'AND ' || realParam || realValue; - q := substr(q, 1, debComm) || realParam || substr(q, endComm + 2); - END LOOP; + realParam +:= 'AND ' || realParam || realValue; + q +:= substr(q, 1, debComm) || realParam || substr(q, endComm + 2); +END LOOP; - RETURN q; - END; +RETURN q; +END; - FUNCTION QUERY_APPLY_PARAMS(sqlQuery VARCHAR2, useParams BOOLEAN DEFAULT FALSE) RETURN CLOB IS + FUNCTION +QUERY_APPLY_PARAMS(sqlQuery VARCHAR2, useParams BOOLEAN DEFAULT FALSE) RETURN CLOB IS q CLOB; - BEGIN - q := sqlQuery; +BEGIN + q +:= sqlQuery; - IF NOT useParams THEN + IF +NOT useParams THEN RETURN q; - END IF; +END IF; - IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p1 IS NOT NULL THEN + IF +UNICAEN_TBL.CALCUL_PROC_PARAMS.p1 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); - END IF; +END IF; - IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p2 IS NOT NULL THEN + IF +UNICAEN_TBL.CALCUL_PROC_PARAMS.p2 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p2, UNICAEN_TBL.CALCUL_PROC_PARAMS.v2); - END IF; +END IF; - IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p3 IS NOT NULL THEN + IF +UNICAEN_TBL.CALCUL_PROC_PARAMS.p3 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p3, UNICAEN_TBL.CALCUL_PROC_PARAMS.v3); - END IF; +END IF; - IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p4 IS NOT NULL THEN + IF +UNICAEN_TBL.CALCUL_PROC_PARAMS.p4 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p4, UNICAEN_TBL.CALCUL_PROC_PARAMS.v4); - END IF; +END IF; - IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p5 IS NOT NULL THEN + IF +UNICAEN_TBL.CALCUL_PROC_PARAMS.p5 IS NOT NULL THEN q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p5, UNICAEN_TBL.CALCUL_PROC_PARAMS.v5); - END IF; +END IF; - RETURN q; - END; +RETURN q; +END; - FUNCTION PARAMS_MAKE_FILTER(useParams BOOLEAN DEFAULT FALSE) RETURN VARCHAR2 IS + FUNCTION +PARAMS_MAKE_FILTER(useParams BOOLEAN DEFAULT FALSE) RETURN VARCHAR2 IS filter VARCHAR2(4000) DEFAULT ''; - BEGIN - IF NOT useParams THEN +BEGIN + IF +NOT useParams THEN RETURN '1=1'; - END IF; +END IF; - IF unicaen_tbl.calcul_proc_params.p1 IS NOT NULL THEN + IF +unicaen_tbl.calcul_proc_params.p1 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; - END IF; - filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p1 || ', t.' || unicaen_tbl.calcul_proc_params.p1 || ') '; - IF unicaen_tbl.calcul_proc_params.v1 IS NULL THEN +END IF; + filter +:= filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p1 || ', t.' || unicaen_tbl.calcul_proc_params.p1 || ') '; + IF +unicaen_tbl.calcul_proc_params.v1 IS NULL THEN filter := filter || 'IS NULL'; - ELSE +ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v1 || ']'''; - END IF; - END IF; +END IF; +END IF; - IF unicaen_tbl.calcul_proc_params.p2 IS NOT NULL THEN + IF +unicaen_tbl.calcul_proc_params.p2 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; - END IF; - filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p2 || ', t.' || unicaen_tbl.calcul_proc_params.p2 || ') '; - IF unicaen_tbl.calcul_proc_params.v2 IS NULL THEN +END IF; + filter +:= filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p2 || ', t.' || unicaen_tbl.calcul_proc_params.p2 || ') '; + IF +unicaen_tbl.calcul_proc_params.v2 IS NULL THEN filter := filter || 'IS NULL'; - ELSE +ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v2 || ']'''; - END IF; - END IF; +END IF; +END IF; - IF unicaen_tbl.calcul_proc_params.p3 IS NOT NULL THEN + IF +unicaen_tbl.calcul_proc_params.p3 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; - END IF; - filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p3 || ', t.' || unicaen_tbl.calcul_proc_params.p3 || ') '; - IF unicaen_tbl.calcul_proc_params.v3 IS NULL THEN +END IF; + filter +:= filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p3 || ', t.' || unicaen_tbl.calcul_proc_params.p3 || ') '; + IF +unicaen_tbl.calcul_proc_params.v3 IS NULL THEN filter := filter || 'IS NULL'; - ELSE +ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v3 || ']'''; - END IF; - END IF; +END IF; +END IF; - IF unicaen_tbl.calcul_proc_params.p4 IS NOT NULL THEN + IF +unicaen_tbl.calcul_proc_params.p4 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; - END IF; - filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p4 || ', t.' || unicaen_tbl.calcul_proc_params.p4 || ') '; - IF unicaen_tbl.calcul_proc_params.v4 IS NULL THEN +END IF; + filter +:= filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p4 || ', t.' || unicaen_tbl.calcul_proc_params.p4 || ') '; + IF +unicaen_tbl.calcul_proc_params.v4 IS NULL THEN filter := filter || 'IS NULL'; - ELSE +ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v4 || ']'''; - END IF; - END IF; +END IF; +END IF; - IF unicaen_tbl.calcul_proc_params.p5 IS NOT NULL THEN + IF +unicaen_tbl.calcul_proc_params.p5 IS NOT NULL THEN IF filter IS NOT NULL THEN filter := filter || ' AND '; - END IF; - filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p5 || ', t.' || unicaen_tbl.calcul_proc_params.p5 || ') '; - IF unicaen_tbl.calcul_proc_params.v5 IS NULL THEN +END IF; + filter +:= filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p5 || ', t.' || unicaen_tbl.calcul_proc_params.p5 || ') '; + IF +unicaen_tbl.calcul_proc_params.v5 IS NULL THEN filter := filter || 'IS NULL'; - ELSE +ELSE filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v5 || ']'''; - END IF; - END IF; +END IF; +END IF; - IF filter IS NULL OR filter = '' THEN + IF +filter IS NULL OR filter = '' THEN RETURN '1=1'; - END IF; +END IF; - RETURN filter; - END; +RETURN filter; +END; - PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS + PROCEDURE CALCULER(TBL_NAME VARCHAR2) +IS params t_params; - BEGIN - ANNULER_DEMANDES(TBL_NAME); - CALCULER(TBL_NAME, params); - END; +BEGIN + ANNULER_DEMANDES +(TBL_NAME); + CALCULER +(TBL_NAME, params); +END; - PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS + PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, VALUE VARCHAR2) +IS calcul_proc varchar2(30); - params t_params; - BEGIN - IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF; - - SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME; - - params.p1 := param; - params.v1 := value; - - unicaen_tbl.calcul_proc_params := params; - - IF calcul_proc IS NOT NULL THEN + params +t_params; +BEGIN + IF +NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; +END IF; + +SELECT custom_calcul_proc +INTO calcul_proc +FROM tbl +WHERE tbl_name = calculer.tbl_name; + +params +. +p1 +:= param; + params.v1 +:= VALUE; + + unicaen_tbl.calcul_proc_params +:= params; + + IF +calcul_proc IS NOT NULL THEN EXECUTE IMMEDIATE 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;'; - ELSE +ELSE EXECUTE IMMEDIATE 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;'; - END IF; - END; +END IF; +END; - PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params) IS + PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params) +IS calcul_proc varchar2(30); - BEGIN - IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF; - - SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME; - - unicaen_tbl.calcul_proc_params := params; - - IF calcul_proc IS NOT NULL THEN +BEGIN + IF +NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; +END IF; + +SELECT custom_calcul_proc +INTO calcul_proc +FROM tbl +WHERE tbl_name = calculer.tbl_name; + +unicaen_tbl +. +calcul_proc_params +:= params; + + IF +calcul_proc IS NOT NULL THEN EXECUTE IMMEDIATE 'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;'; - ELSE +ELSE EXECUTE IMMEDIATE 'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;'; - END IF; - END; +END IF; +END; - PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS - BEGIN - dems(TBL_NAME)(param)(value) := TRUE; - END; + PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, VALUE VARCHAR2) +IS +BEGIN + dems +(TBL_NAME)(param)(VALUE) := TRUE; +END; - PROCEDURE ANNULER_DEMANDES IS - BEGIN + PROCEDURE ANNULER_DEMANDES +IS +BEGIN dems.delete; - END; +END; - PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS - BEGIN - IF dems.exists(tbl_name) THEN + PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) +IS +BEGIN + IF +dems.exists(tbl_name) THEN dems(tbl_name).delete; - END IF; - END; +END IF; +END; - FUNCTION HAS_DEMANDES RETURN BOOLEAN IS - BEGIN - RETURN dems.count > 0; - END; + FUNCTION +HAS_DEMANDES RETURN BOOLEAN IS +BEGIN +RETURN dems.count > 0; +END; - PROCEDURE CALCULER_DEMANDES IS + PROCEDURE CALCULER_DEMANDES +IS d t_dems; - tbl_name VARCHAR2(30); - param VARCHAR2(30); - value VARCHAR2(80); - BEGIN - d := dems; + tbl_name +VARCHAR2(30); + param +VARCHAR2(30); +VALUE VARCHAR2(80); +BEGIN + d +:= dems; dems.delete; - tbl_name := d.FIRST; - LOOP EXIT WHEN tbl_name IS NULL; - param := d(tbl_name).FIRST; - LOOP EXIT WHEN param IS NULL; - value := d(tbl_name)(param).FIRST; - LOOP EXIT WHEN value IS NULL; - calculer(tbl_name, param, value); - value := d(tbl_name)(param).NEXT(value); - END LOOP; - param := d(tbl_name).NEXT(param); - END LOOP; - tbl_name := d.NEXT(tbl_name); - END LOOP; - - IF HAS_DEMANDES THEN -- pour les boucles !! + tbl_name +:= d.FIRST; + LOOP +EXIT WHEN tbl_name IS NULL; + param +:= d(tbl_name).FIRST; + LOOP +EXIT WHEN param IS NULL; +VALUE := d(tbl_name)(param).FIRST; + LOOP +EXIT WHEN VALUE IS NULL; + calculer +(tbl_name, param, VALUE); +VALUE := d(tbl_name)(param).NEXT(VALUE); +END LOOP; + param +:= d(tbl_name).NEXT(param); +END LOOP; + tbl_name +:= d.NEXT(tbl_name); +END LOOP; + + IF +HAS_DEMANDES THEN -- pour les boucles !! CALCULER_DEMANDES; - END IF; - END; +END IF; +END; -- AUTOMATIC GENERATION -- - PROCEDURE C_AGREMENT(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_AGREMENT(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_AGREMENT%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'WITH i_s AS ( + C +r_cursor; + d +TBL_AGREMENT%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'WITH i_s AS ( SELECT fr.intervenant_id, ep.structure_id structure_id @@ -414,7 +521,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS WHERE rank = 1'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -442,36 +549,49 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.INTERVENANT_ID = v.INTERVENANT_ID AND COALESCE(t.STRUCTURE_ID,0) = COALESCE(v.STRUCTURE_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_AGREMENT_ID_SEQ.NEXTVAL; - INSERT INTO TBL_AGREMENT values d; - ELSIF - d.ANNEE_AGREMENT IS NULL +INSERT INTO tbl_agrement +VALUES d; +ELSIF +d.ANNEE_AGREMENT IS NULL AND d.TYPE_AGREMENT_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.STRUCTURE_ID IS NULL THEN - DELETE FROM TBL_AGREMENT WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_AGREMENT SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_agrement +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_agrement +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_CHARGENS(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_CHARGENS(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_CHARGENS%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_CHARGENS%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT annee_id, noeud_id, scenario_id, @@ -586,7 +706,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@ETAPE_ENS_ID=sne.etape_id*/ ) t'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -640,14 +760,17 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.STRUCTURE_ID = v.STRUCTURE_ID AND t.GROUPE_TYPE_FORMATION_ID = v.GROUPE_TYPE_FORMATION_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_CHARGENS_ID_SEQ.NEXTVAL; - INSERT INTO TBL_CHARGENS values d; - ELSIF - d.ANNEE_ID IS NULL +INSERT INTO tbl_chargens +VALUES d; +ELSIF +d.ANNEE_ID IS NULL AND d.NOEUD_ID IS NULL AND d.SCENARIO_ID IS NULL AND d.TYPE_HEURES_ID IS NULL @@ -658,24 +781,34 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND d.STRUCTURE_ID IS NULL AND d.GROUPE_TYPE_FORMATION_ID IS NULL THEN - DELETE FROM TBL_CHARGENS WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_CHARGENS SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_chargens +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_chargens +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_CHARGENS_SEUILS_DEF(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_CHARGENS_SEUILS_DEF(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_CHARGENS_SEUILS_DEF%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_CHARGENS_SEUILS_DEF%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT sta.annee_id, sta.scenario_id, s.structure_id, @@ -721,7 +854,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS WHERE COALESCE(sc1.dedoublement, sc2.dedoublement, sc3.dedoublement, sc4.dedoublement, 1) <> 1'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -746,37 +879,50 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.GROUPE_TYPE_FORMATION_ID = v.GROUPE_TYPE_FORMATION_ID AND t.TYPE_INTERVENTION_ID = v.TYPE_INTERVENTION_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_CHARGENS_SEUILS_DEF_ID_SEQ.NEXTVAL; - INSERT INTO TBL_CHARGENS_SEUILS_DEF values d; - ELSIF - d.ANNEE_ID IS NULL +INSERT INTO tbl_chargens_seuils_def +VALUES d; +ELSIF +d.ANNEE_ID IS NULL AND d.SCENARIO_ID IS NULL AND d.STRUCTURE_ID IS NULL AND d.GROUPE_TYPE_FORMATION_ID IS NULL AND d.TYPE_INTERVENTION_ID IS NULL THEN - DELETE FROM TBL_CHARGENS_SEUILS_DEF WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_CHARGENS_SEUILS_DEF SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_chargens_seuils_def +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_chargens_seuils_def +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_CLOTURE_REALISE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_CLOTURE_REALISE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_CLOTURE_REALISE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'WITH t AS ( + C +r_cursor; + d +TBL_CLOTURE_REALISE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'WITH t AS ( SELECT i.annee_id annee_id, i.id intervenant_id, @@ -808,7 +954,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS intervenant_id, actif'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -825,33 +971,46 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS FULL JOIN TBL_CLOTURE_REALISE t ON t.INTERVENANT_ID = v.INTERVENANT_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_CLOTURE_REALISE_ID_SEQ.NEXTVAL; - INSERT INTO TBL_CLOTURE_REALISE values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_cloture_realise +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL THEN - DELETE FROM TBL_CLOTURE_REALISE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_CLOTURE_REALISE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_cloture_realise +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_cloture_realise +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_CONTRAT(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_CONTRAT(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_CONTRAT%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'WITH t AS ( + C +r_cursor; + d +TBL_CONTRAT%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'WITH t AS ( SELECT i.annee_id annee_id, i.id intervenant_id, @@ -904,7 +1063,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS actif, structure_id'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -928,34 +1087,47 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS t.INTERVENANT_ID = v.INTERVENANT_ID AND COALESCE(t.STRUCTURE_ID,0) = COALESCE(v.STRUCTURE_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_CONTRAT_ID_SEQ.NEXTVAL; - INSERT INTO TBL_CONTRAT values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_contrat +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL AND d.STRUCTURE_ID IS NULL THEN - DELETE FROM TBL_CONTRAT WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_CONTRAT SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_contrat +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_contrat +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_DMEP_LIQUIDATION(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_DMEP_LIQUIDATION(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_DMEP_LIQUIDATION%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_DMEP_LIQUIDATION%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT annee_id, type_ressource_id, structure_id, @@ -1002,7 +1174,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS GROUP BY annee_id, type_ressource_id, structure_id'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -1021,35 +1193,48 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.TYPE_RESSOURCE_ID = v.TYPE_RESSOURCE_ID AND t.STRUCTURE_ID = v.STRUCTURE_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_DMEP_LIQUIDATION_ID_SEQ.NEXTVAL; - INSERT INTO TBL_DMEP_LIQUIDATION values d; - ELSIF - d.ANNEE_ID IS NULL +INSERT INTO tbl_dmep_liquidation +VALUES d; +ELSIF +d.ANNEE_ID IS NULL AND d.TYPE_RESSOURCE_ID IS NULL AND d.STRUCTURE_ID IS NULL THEN - DELETE FROM TBL_DMEP_LIQUIDATION WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_DMEP_LIQUIDATION SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_dmep_liquidation +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_dmep_liquidation +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_DOSSIER(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_DOSSIER(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_DOSSIER%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_DOSSIER%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT i.annee_id, i.id intervenant_id, si.dossier actif, @@ -1166,7 +1351,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@INTERVENANT_ID=i.id*/ /*@ANNEE_ID=i.annee_id*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -1203,33 +1388,147 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS FULL JOIN TBL_DOSSIER t ON t.INTERVENANT_ID = v.INTERVENANT_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_DOSSIER_ID_SEQ.NEXTVAL; - INSERT INTO TBL_DOSSIER values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_dossier +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL THEN - DELETE FROM TBL_DOSSIER WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_DOSSIER SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_dossier +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_dossier +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PAIEMENT(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_MISSION(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PAIEMENT%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_MISSION%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT + i.annee_id annee_id, + i.id intervenant_id, + 1 actif, + m.id mission_id, + m.structure_id structure_id, + i.structure_id intervenant_structure_id, + CASE WHEN m.auto_validation = 1 OR vm.id IS NOT NULL THEN 1 ELSE 0 END valide, + COALESCE(SUM(vhm.heures),0) heures_realisees, + SUM(CASE WHEN vvhm.id IS NOT NULL OR vhm.auto_validation = 1 THEN vhm.heures ELSE 0 END) heures_validees + FROM + intervenant i + JOIN statut si ON si.id = i.statut_id + JOIN type_validation tvm ON tvm.code = ''MISSION'' + JOIN type_validation tvvh ON tvvh.code = ''MISSION_REALISE'' + LEFT JOIN mission m ON m.intervenant_id = i.id AND m.histo_destruction IS NULL + LEFT JOIN validation_mission vml ON vml.mission_id = m.id + LEFT JOIN validation vm ON vm.id = vml.validation_id AND vm.histo_destruction IS NULL + LEFT JOIN volume_horaire_mission vhm ON vhm.mission_id = m.id AND vhm.histo_destruction IS NULL + LEFT JOIN validation_vol_horaire_miss vvhml ON vvhml.volume_horaire_mission_id = vhm.id + LEFT JOIN validation vvhm ON vvhm.id = vvhml.validation_id AND vvhm.histo_destruction IS NULL + WHERE + i.histo_destruction IS NULL + AND si.mission = 1 + GROUP BY + i.annee_id, + i.id, + m.id, + m.structure_id, + i.structure_id, + m.auto_validation, + vm.id'; + +OPEN c FOR ' + SELECT + CASE WHEN + t.ANNEE_ID = v.ANNEE_ID + AND t.INTERVENANT_ID = v.INTERVENANT_ID + AND t.ACTIF = v.ACTIF + AND COALESCE(t.MISSION_ID,0) = COALESCE(v.MISSION_ID,0) + AND COALESCE(t.STRUCTURE_ID,0) = COALESCE(v.STRUCTURE_ID,0) + AND COALESCE(t.INTERVENANT_STRUCTURE_ID,0) = COALESCE(v.INTERVENANT_STRUCTURE_ID,0) + AND t.VALIDE = v.VALIDE + AND t.HEURES_REALISEES = v.HEURES_REALISEES + AND t.HEURES_VALIDEES = v.HEURES_VALIDEES + THEN -1 ELSE t.ID END ID, + v.ANNEE_ID, + v.INTERVENANT_ID, + v.ACTIF, + v.MISSION_ID, + v.STRUCTURE_ID, + v.INTERVENANT_STRUCTURE_ID, + v.VALIDE, + v.HEURES_REALISEES, + v.HEURES_VALIDEES + FROM + (' || QUERY_APPLY_PARAMS(viewQuery, useParams) || ') v + FULL JOIN TBL_MISSION t ON + t.INTERVENANT_ID = v.INTERVENANT_ID + AND COALESCE(t.MISSION_ID,0) = COALESCE(v.MISSION_ID,0) + WHERE ' || PARAMS_MAKE_FILTER(useParams); +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; + + IF +d.id IS NULL THEN + d.id := TBL_MISSION_ID_SEQ.NEXTVAL; +INSERT INTO tbl_mission +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL + AND d.MISSION_ID IS NULL + THEN +DELETE +FROM tbl_mission +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_mission +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; + + + + + PROCEDURE C_PAIEMENT(useParams BOOLEAN DEFAULT FALSE) +IS + TYPE r_cursor IS REF CURSOR; + C +r_cursor; + d +TBL_PAIEMENT%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT annee_id, service_id, service_referentiel_id, @@ -1371,7 +1670,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND mep.histo_destruction IS NULL ) t'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -1419,50 +1718,63 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.INTERVENANT_ID = v.INTERVENANT_ID AND COALESCE(t.MISE_EN_PAIEMENT_ID,0) = COALESCE(v.MISE_EN_PAIEMENT_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PAIEMENT_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PAIEMENT values d; - ELSIF - d.FORMULE_RES_SERVICE_ID IS NULL +INSERT INTO tbl_paiement +VALUES d; +ELSIF +d.FORMULE_RES_SERVICE_ID IS NULL AND d.FORMULE_RES_SERVICE_REF_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.MISE_EN_PAIEMENT_ID IS NULL THEN - DELETE FROM TBL_PAIEMENT WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PAIEMENT SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_paiement +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_paiement +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PIECE_JOINTE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PIECE_JOINTE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PIECE_JOINTE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'WITH t AS ( + C +r_cursor; + d +TBL_PIECE_JOINTE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'WITH t AS ( SELECT pjd.annee_id annee_id, pjd.type_piece_jointe_id type_piece_jointe_id, pjd.intervenant_id intervenant_id, CASE WHEN pjd.intervenant_id IS NULL THEN 0 ELSE 1 END demandee, - SUM(CASE WHEN pjf.id IS NULL THEN 0 ELSE 1 END) fournie, - MAX(pjf.validation_id) keep(DENSE_RANK FIRST ORDER BY pjf.annee_id DESC) validee, + SUM(CASE WHEN pjf.id IS NOT NULL THEN 1 ELSE 0 END) fournie, + MAX(pjf.validation_id) KEEP(DENSE_RANK FIRST ORDER BY pjf.annee_id DESC) validee, COALESCE(pjd.heures_pour_seuil,0) heures_pour_seuil, COALESCE(pjd.obligatoire,1) obligatoire FROM tbl_piece_jointe_demande pjd LEFT JOIN tbl_piece_jointe_fournie pjf ON pjf.code_intervenant = pjd.code_intervenant AND pjf.type_piece_jointe_id = pjd.type_piece_jointe_id - AND pjd.annee_id BETWEEN pjf.annee_id AND COALESCE(pjf.date_archive - 1,pjf.date_validite -1,(pjf.annee_id + pjf.duree_vie-1)) + AND pjd.annee_id BETWEEN pjf.annee_id AND COALESCE(pjf.date_archive - 1,(pjf.annee_id + pjd.duree_vie-1)) WHERE 1=1 /*@INTERVENANT_ID=pjd.intervenant_id*/ @@ -1478,7 +1790,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS pjf.intervenant_id intervenant_id, 0 demandee, 1 fournie, - MAX(pjf.validation_id) keep(DENSE_RANK FIRST ORDER BY pjf.annee_id DESC) validee, + MAX(pjf.validation_id) KEEP(DENSE_RANK FIRST ORDER BY pjf.annee_id DESC) validee, 0 heures_pour_seuil, 0 obligatoire FROM @@ -1492,19 +1804,17 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS GROUP BY pjf.annee_id, pjf.type_piece_jointe_id, pjf.intervenant_id ) - SELECT - annee_id, - type_piece_jointe_id, - intervenant_id, - demandee, - CASE WHEN fournie <> 0 THEN 1 ELSE 0 END fournie, - CASE WHEN validee IS NULL THEN 0 ELSE 1 END validee, - heures_pour_seuil, - obligatoire - FROM - t'; - - OPEN c FOR ' + SELECT annee_id, + type_piece_jointe_id, + intervenant_id, + demandee, + CASE WHEN fournie <> 0 THEN 1 ELSE 0 END fournie, + CASE WHEN validee IS NULL THEN 0 ELSE 1 END validee, + heures_pour_seuil, + obligatoire + FROM t'; + +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -1530,46 +1840,60 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS t.TYPE_PIECE_JOINTE_ID = v.TYPE_PIECE_JOINTE_ID AND t.INTERVENANT_ID = v.INTERVENANT_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PIECE_JOINTE_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PIECE_JOINTE values d; - ELSIF - d.TYPE_PIECE_JOINTE_ID IS NULL +INSERT INTO tbl_piece_jointe +VALUES d; +ELSIF +d.TYPE_PIECE_JOINTE_ID IS NULL AND d.INTERVENANT_ID IS NULL THEN - DELETE FROM TBL_PIECE_JOINTE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PIECE_JOINTE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_piece_jointe +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_piece_jointe +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PIECE_JOINTE_DEMANDE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PIECE_JOINTE_DEMANDE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PIECE_JOINTE_DEMANDE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'WITH i_h AS ( + C +r_cursor; + d +TBL_PIECE_JOINTE_DEMANDE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'WITH i_h AS ( SELECT s.intervenant_id, SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NULL THEN vh.heures ELSE 0 END) heures, SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NOT NULL THEN vh.heures ELSE 0 END) heures_non_payables, - SUM(ep.taux_fc) fc + --SUM(ep.taux_fc) fc + SUM(CASE WHEN ep.taux_fc > 0 THEN vh.heures ELSE 0 END) fc FROM service s JOIN type_volume_horaire tvh ON tvh.code = ''PREVU'' JOIN volume_horaire vh ON vh.service_id = s.id AND vh.type_volume_horaire_id = tvh.id AND vh.histo_destruction IS NULL - JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id -- Service sur l''établissement + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id -- Service sur l''établissement WHERE s.histo_destruction IS NULL /*@INTERVENANT_ID=s.intervenant_id*/ @@ -1589,57 +1913,64 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS GROUP BY intervenant_id ) - SELECT - i.annee_id annee_id, - i.code code_intervenant, - i.id intervenant_id, - tpj.id type_piece_jointe_id, - MAX(COALESCE(i_h.heures, 0)) heures_pour_seuil, - tpjs.obligatoire obligatoire, - MAX(COALESCE(hetd.total_hetd, 0)) heures_pour_seuil_hetd - FROM - intervenant i - - LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id - AND d.histo_destruction IS NULL - - JOIN type_piece_jointe_statut tpjs ON tpjs.statut_id = i.statut_id - AND tpjs.histo_destruction IS NULL - AND i.annee_id = tpjs.annee_id - - JOIN type_piece_jointe tpj ON tpj.id = tpjs.type_piece_jointe_id - AND tpj.histo_destruction IS NULL - - LEFT JOIN i_h ON i_h.intervenant_id = i.id - LEFT JOIN hetd ON hetd.intervenant_id = i.id - WHERE - -- Gestion de l''historique - i.histo_destruction IS NULL - /*@INTERVENANT_ID=i.id*/ - /*@ANNEE_ID=i.annee_id*/ + SELECT i.annee_id annee_id, + i.code code_intervenant, + i.id intervenant_id, + tpj.id type_piece_jointe_id, + MAX(COALESCE(i_h.heures, 0)) heures_pour_seuil, + MAX(tpjs.obligatoire) obligatoire, + MAX(COALESCE(hetd.total_hetd, 0)) heures_pour_seuil_hetd, + MIN(tpjs.duree_vie) duree_vie + FROM intervenant i + LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id AND d.histo_destruction IS NULL + JOIN type_piece_jointe_statut tpjs + ON tpjs.statut_id = i.statut_id AND tpjs.histo_destruction IS NULL AND i.annee_id = tpjs.annee_id + JOIN type_piece_jointe tpj ON tpj.id = tpjs.type_piece_jointe_id AND tpj.histo_destruction IS NULL + LEFT JOIN i_h ON i_h.intervenant_id = i.id + LEFT JOIN hetd ON hetd.intervenant_id = i.id + WHERE i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ -- Seuil heure soit en HETD soit en heure ou PJ obligatoire meme avec des heures non payables - AND ((COALESCE(tpjs.type_heure_hetd,0) = 0 AND COALESCE(i_h.heures,0) > COALESCE(tpjs.seuil_hetd,-1)) - OR (tpjs.type_heure_hetd = 1 AND COALESCE(hetd.total_hetd,0) > COALESCE(tpjs.seuil_hetd,-1)) - OR (COALESCE(i_h.heures_non_payables,0) > 0 AND tpjs.obligatoire_hnp = 1 )) - + AND ( + COALESCE(tpjs.seuil_hetd, 0) = 0 + OR (COALESCE(tpjs.type_heure_hetd, 0) = 0 AND COALESCE(i_h.heures, 0) > COALESCE(tpjs.seuil_hetd, -1)) + OR (tpjs.type_heure_hetd = 1 AND COALESCE(hetd.total_hetd, 0) > COALESCE(tpjs.seuil_hetd, -1)) + OR (COALESCE(i_h.heures_non_payables, 0) > 0 AND tpjs.obligatoire_hnp = 1) + ) -- Le RIB n''est demandé QUE s''il est différent!! AND CASE - WHEN tpjs.changement_rib = 0 OR d.id IS NULL THEN 1 - ELSE CASE WHEN REPLACE(i.bic, '' '', '''') = REPLACE(d.bic, '' '', '''') AND REPLACE(i.iban, '' '', '''') = REPLACE(d.iban, '' '', '''') THEN 0 ELSE 1 END - END = 1 + WHEN tpjs.changement_rib = 0 OR d.id IS NULL + THEN 1 + ELSE CASE + WHEN + replace(i.bic, '' '', '''') = replace(d.bic, '' '', '''') + AND replace(i.iban, '' '', '''') = replace(d.iban, '' '', '''') + THEN 0 + ELSE 1 END + END = 1 + + -- Demandé uniquement si nationalité étrangère + AND CASE + WHEN tpjs.nationalite_etrangere = 0 OR d.id IS null + THEN 1 + ELSE CASE + WHEN + d.pays_nationalite_id = (SELECT MAX(id) FROM pays p WHERE libelle IN (''France'',''FRANCE'') AND histo_destruction IS NULL GROUP BY id) + THEN 0 + ELSE 1 END + END = 1 -- Filtre FC AND (tpjs.fc = 0 OR i_h.fc > 0) - GROUP BY - i.annee_id, - i.id, - i.code, - tpj.id, - tpjs.obligatoire'; + GROUP BY i.annee_id, + i.id, + i.code, + tpj.id'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -1649,6 +1980,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.HEURES_POUR_SEUIL = v.HEURES_POUR_SEUIL AND COALESCE(t.OBLIGATOIRE,0) = COALESCE(v.OBLIGATOIRE,0) AND t.HEURES_POUR_SEUIL_HETD = v.HEURES_POUR_SEUIL_HETD + AND t.DUREE_VIE = v.DUREE_VIE THEN -1 ELSE t.ID END ID, v.ANNEE_ID, v.CODE_INTERVENANT, @@ -1656,41 +1988,55 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS v.TYPE_PIECE_JOINTE_ID, v.HEURES_POUR_SEUIL, v.OBLIGATOIRE, - v.HEURES_POUR_SEUIL_HETD + v.HEURES_POUR_SEUIL_HETD, + v.DUREE_VIE FROM (' || QUERY_APPLY_PARAMS(viewQuery, useParams) || ') v FULL JOIN TBL_PIECE_JOINTE_DEMANDE t ON t.INTERVENANT_ID = v.INTERVENANT_ID AND t.TYPE_PIECE_JOINTE_ID = v.TYPE_PIECE_JOINTE_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PIECE_JOINTE_DEMAND_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PIECE_JOINTE_DEMANDE values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_piece_jointe_demande +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL AND d.TYPE_PIECE_JOINTE_ID IS NULL THEN - DELETE FROM TBL_PIECE_JOINTE_DEMANDE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PIECE_JOINTE_DEMANDE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_piece_jointe_demande +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_piece_jointe_demande +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PIECE_JOINTE_FOURNIE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PIECE_JOINTE_FOURNIE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PIECE_JOINTE_FOURNIE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_PIECE_JOINTE_FOURNIE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT i.annee_id, i.code code_intervenant, pj.type_piece_jointe_id, @@ -1729,7 +2075,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS f.id, pj.date_archive'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -1761,36 +2107,49 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND COALESCE(t.VALIDATION_ID,0) = COALESCE(v.VALIDATION_ID,0) AND COALESCE(t.FICHIER_ID,0) = COALESCE(v.FICHIER_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PIECE_JOINTE_FOURNI_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PIECE_JOINTE_FOURNIE values d; - ELSIF - d.TYPE_PIECE_JOINTE_ID IS NULL +INSERT INTO tbl_piece_jointe_fournie +VALUES d; +ELSIF +d.TYPE_PIECE_JOINTE_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.VALIDATION_ID IS NULL AND d.FICHIER_ID IS NULL THEN - DELETE FROM TBL_PIECE_JOINTE_FOURNIE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PIECE_JOINTE_FOURNIE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_piece_jointe_fournie +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_piece_jointe_fournie +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PLAFOND_ELEMENT(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PLAFOND_ELEMENT(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PLAFOND_ELEMENT%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_PLAFOND_ELEMENT%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT p.PLAFOND_ID, p.ANNEE_ID, p.TYPE_VOLUME_HORAIRE_ID, @@ -1824,7 +2183,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@ELEMENT_PEDAGOGIQUE_ID=p.ELEMENT_PEDAGOGIQUE_ID*/ /*@PLAFOND_ETAT_ID=p.PLAFOND_ETAT_ID*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN COALESCE(t.PLAFOND_ID,0) = COALESCE(v.PLAFOND_ID,0) @@ -1857,37 +2216,50 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.INTERVENANT_ID = v.INTERVENANT_ID AND t.ELEMENT_PEDAGOGIQUE_ID = v.ELEMENT_PEDAGOGIQUE_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PLAFOND_ELEMENT_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PLAFOND_ELEMENT values d; - ELSIF - d.PLAFOND_ID IS NULL +INSERT INTO tbl_plafond_element +VALUES d; +ELSIF +d.PLAFOND_ID IS NULL AND d.ANNEE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.ELEMENT_PEDAGOGIQUE_ID IS NULL THEN - DELETE FROM TBL_PLAFOND_ELEMENT WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PLAFOND_ELEMENT SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_plafond_element +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_plafond_element +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PLAFOND_INTERVENANT(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PLAFOND_INTERVENANT(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PLAFOND_INTERVENANT%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_PLAFOND_INTERVENANT%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT p.PLAFOND_ID, p.ANNEE_ID, p.TYPE_VOLUME_HORAIRE_ID, @@ -1903,33 +2275,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( - SELECT - i.annee_id annee_id, - vh.type_volume_horaire_id type_volume_horaire_id, - i.id intervenant_id, - SUM(vh.heures) heures - FROM - volume_horaire vh - JOIN service s ON s.id = vh.service_id - JOIN intervenant i ON i.id = s.intervenant_id - JOIN statut si ON si.id = i.statut_id - WHERE - vh.histo_destruction IS NULL - AND i.histo_destruction IS NULL - AND vh.motif_non_paiement_id IS NULL - AND si.code IN (''IMP'') - GROUP BY - i.annee_id, - vh.type_volume_horaire_id, - i.id, - i.statut_id - HAVING - SUM(vh.heures) >= 0 - ) p - - UNION ALL - SELECT 1 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT i.annee_id annee_id, @@ -1960,6 +2305,24 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS UNION ALL + SELECT 3 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.heures_compl_fc_majorees * a.taux_hetd heures + /*ROUND( (COALESCE(si.plafond_hc_remu_fc,0) - COALESCE(i.montant_indemnite_fc,0)) / a.taux_hetd, 2 ) plafond*/ + + FROM + intervenant i + JOIN annee a ON a.id = i.annee_id + JOIN statut si ON si.id = i.statut_id + JOIN etat_volume_horaire evh ON evh.code = ''saisi'' + JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id + ) p + + UNION ALL + SELECT 4 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT i.annee_id annee_id, @@ -1985,6 +2348,33 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS UNION ALL + SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + vh.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + SUM(vh.heures) heures + FROM + volume_horaire vh + JOIN service s ON s.id = vh.service_id + JOIN intervenant i ON i.id = s.intervenant_id + JOIN statut si ON si.id = i.statut_id + WHERE + vh.histo_destruction IS NULL + AND i.histo_destruction IS NULL + AND vh.motif_non_paiement_id IS NULL + AND si.code IN (''IMP'') + GROUP BY + i.annee_id, + vh.type_volume_horaire_id, + i.id, + i.statut_id + HAVING + SUM(vh.heures) >= 0 + ) p + + UNION ALL + SELECT 8 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT i.annee_id annee_id, @@ -1997,24 +2387,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id JOIN statut si ON si.id = i.statut_id ) p - - UNION ALL - - SELECT 3 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( - SELECT - i.annee_id annee_id, - fr.type_volume_horaire_id type_volume_horaire_id, - i.id intervenant_id, - fr.heures_compl_fc_majorees heures - /*ROUND( (COALESCE(si.plafond_hc_remu_fc,0) - COALESCE(i.montant_indemnite_fc,0)) / a.taux_hetd, 2 ) plafond*/ - - FROM - intervenant i - JOIN annee a ON a.id = i.annee_id - JOIN statut si ON si.id = i.statut_id - JOIN etat_volume_horaire evh ON evh.code = ''saisi'' - JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id - ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_statut ps ON ps.plafond_id = p.plafond_id AND ps.statut_id = i.statut_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL @@ -2030,7 +2402,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@INTERVENANT_ID=p.INTERVENANT_ID*/ /*@PLAFOND_ETAT_ID=p.PLAFOND_ETAT_ID*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN COALESCE(t.PLAFOND_ID,0) = COALESCE(v.PLAFOND_ID,0) @@ -2060,36 +2432,49 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0) AND t.INTERVENANT_ID = v.INTERVENANT_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PLAFOND_INTERVENANT_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PLAFOND_INTERVENANT values d; - ELSIF - d.PLAFOND_ID IS NULL +INSERT INTO tbl_plafond_intervenant +VALUES d; +ELSIF +d.PLAFOND_ID IS NULL AND d.ANNEE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.INTERVENANT_ID IS NULL THEN - DELETE FROM TBL_PLAFOND_INTERVENANT WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PLAFOND_INTERVENANT SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_plafond_intervenant +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_plafond_intervenant +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PLAFOND_REFERENTIEL(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PLAFOND_REFERENTIEL(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PLAFOND_REFERENTIEL%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_PLAFOND_REFERENTIEL%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT p.PLAFOND_ID, p.ANNEE_ID, p.TYPE_VOLUME_HORAIRE_ID, @@ -2158,7 +2543,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@FONCTION_REFERENTIEL_ID=p.FONCTION_REFERENTIEL_ID*/ /*@PLAFOND_ETAT_ID=p.PLAFOND_ETAT_ID*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN COALESCE(t.PLAFOND_ID,0) = COALESCE(v.PLAFOND_ID,0) @@ -2191,37 +2576,50 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.INTERVENANT_ID = v.INTERVENANT_ID AND t.FONCTION_REFERENTIEL_ID = v.FONCTION_REFERENTIEL_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PLAFOND_REFERENTIEL_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PLAFOND_REFERENTIEL values d; - ELSIF - d.PLAFOND_ID IS NULL +INSERT INTO tbl_plafond_referentiel +VALUES d; +ELSIF +d.PLAFOND_ID IS NULL AND d.ANNEE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.FONCTION_REFERENTIEL_ID IS NULL THEN - DELETE FROM TBL_PLAFOND_REFERENTIEL WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PLAFOND_REFERENTIEL SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_plafond_referentiel +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_plafond_referentiel +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PLAFOND_STRUCTURE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PLAFOND_STRUCTURE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PLAFOND_STRUCTURE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_PLAFOND_STRUCTURE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT p.PLAFOND_ID, p.ANNEE_ID, p.TYPE_VOLUME_HORAIRE_ID, @@ -2271,7 +2669,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@STRUCTURE_ID=p.STRUCTURE_ID*/ /*@PLAFOND_ETAT_ID=p.PLAFOND_ETAT_ID*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN COALESCE(t.PLAFOND_ID,0) = COALESCE(v.PLAFOND_ID,0) @@ -2304,37 +2702,50 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.INTERVENANT_ID = v.INTERVENANT_ID AND t.STRUCTURE_ID = v.STRUCTURE_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PLAFOND_STRUCTURE_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PLAFOND_STRUCTURE values d; - ELSIF - d.PLAFOND_ID IS NULL +INSERT INTO tbl_plafond_structure +VALUES d; +ELSIF +d.PLAFOND_ID IS NULL AND d.ANNEE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.STRUCTURE_ID IS NULL THEN - DELETE FROM TBL_PLAFOND_STRUCTURE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PLAFOND_STRUCTURE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_plafond_structure +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_plafond_structure +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_PLAFOND_VOLUME_HORAIRE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_PLAFOND_VOLUME_HORAIRE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_PLAFOND_VOLUME_HORAIRE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_PLAFOND_VOLUME_HORAIRE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT p.PLAFOND_ID, p.ANNEE_ID, p.TYPE_VOLUME_HORAIRE_ID, @@ -2343,16 +2754,12 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS p.TYPE_INTERVENTION_ID, p.HEURES, COALESCE(p.PLAFOND,ps.heures,0) PLAFOND, - CASE - WHEN p.type_volume_horaire_id = 1 THEN ps.plafond_etat_prevu_id - WHEN p.type_volume_horaire_id = 2 THEN ps.plafond_etat_realise_id - ELSE COALESCE(p.plafond_etat_id,1) - END plafond_etat_id, + COALESCE(p.plafond_etat_id,1) plafond_etat_id, COALESCE(pd.heures, 0) derogation, CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT 5 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT 5 PLAFOND_ID, p.* FROM ( WITH c AS ( SELECT vhe.element_pedagogique_id, @@ -2400,7 +2807,8 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS s.element_pedagogique_id element_pedagogique_id, s.type_intervention_id type_intervention_id, s.heures heures, - COALESCE(c.heures * c.groupes,0) plafond + COALESCE(c.heures * c.groupes,0) plafond, + 2 plafond_etat_id FROM s JOIN type_intervention ti ON ti.id = s.type_intervention_id @@ -2415,10 +2823,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS LEFT JOIN plafond_statut ps ON 1 = 0 LEFT JOIN plafond_derogation pd ON pd.plafond_id = p.plafond_id AND pd.intervenant_id = p.intervenant_id AND pd.histo_destruction IS NULL WHERE - CASE - WHEN p.type_volume_horaire_id = 1 THEN ps.plafond_etat_prevu_id - WHEN p.type_volume_horaire_id = 2 THEN ps.plafond_etat_realise_id - END IS NOT NULL + 1=1 /*@PLAFOND_ID=p.PLAFOND_ID*/ /*@ANNEE_ID=p.ANNEE_ID*/ /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/ @@ -2427,7 +2832,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@TYPE_INTERVENTION_ID=p.TYPE_INTERVENTION_ID*/ /*@PLAFOND_ETAT_ID=p.PLAFOND_ETAT_ID*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN COALESCE(t.PLAFOND_ID,0) = COALESCE(v.PLAFOND_ID,0) @@ -2463,38 +2868,51 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.ELEMENT_PEDAGOGIQUE_ID = v.ELEMENT_PEDAGOGIQUE_ID AND COALESCE(t.TYPE_INTERVENTION_ID,0) = COALESCE(v.TYPE_INTERVENTION_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_PLAFOND_VOLUME_HORA_ID_SEQ.NEXTVAL; - INSERT INTO TBL_PLAFOND_VOLUME_HORAIRE values d; - ELSIF - d.PLAFOND_ID IS NULL +INSERT INTO tbl_plafond_volume_horaire +VALUES d; +ELSIF +d.PLAFOND_ID IS NULL AND d.ANNEE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.INTERVENANT_ID IS NULL AND d.ELEMENT_PEDAGOGIQUE_ID IS NULL AND d.TYPE_INTERVENTION_ID IS NULL THEN - DELETE FROM TBL_PLAFOND_VOLUME_HORAIRE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_PLAFOND_VOLUME_HORAIRE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_plafond_volume_horaire +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_plafond_volume_horaire +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_REFERENTIEL(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_REFERENTIEL(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_REFERENTIEL%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT + C +r_cursor; + d +TBL_REFERENTIEL%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT t.annee_id, t.intervenant_id, t.type_volume_horaire_id, @@ -2567,7 +2985,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS t.type_intervenant_code, t.type_volume_horaire_code'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -2607,36 +3025,49 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.STRUCTURE_ID = v.STRUCTURE_ID AND t.SERVICE_REFERENTIEL_ID = v.SERVICE_REFERENTIEL_ID WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_REFERENTIEL_ID_SEQ.NEXTVAL; - INSERT INTO TBL_REFERENTIEL values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_referentiel +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.STRUCTURE_ID IS NULL AND d.SERVICE_REFERENTIEL_ID IS NULL THEN - DELETE FROM TBL_REFERENTIEL WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_REFERENTIEL SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_referentiel +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_referentiel +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_SERVICE(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_SERVICE(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_SERVICE%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'WITH t AS ( + C +r_cursor; + d +TBL_SERVICE%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'WITH t AS ( SELECT s.id service_id, s.intervenant_id intervenant_id, @@ -2729,7 +3160,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS t.element_pedagogique_histo, t.etape_histo'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -2777,34 +3208,47 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS t.SERVICE_ID = v.SERVICE_ID AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_SERVICE_ID_SEQ.NEXTVAL; - INSERT INTO TBL_SERVICE values d; - ELSIF - d.SERVICE_ID IS NULL +INSERT INTO tbl_service +VALUES d; +ELSIF +d.SERVICE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL THEN - DELETE FROM TBL_SERVICE WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_SERVICE SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_service +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_service +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_VALIDATION_ENSEIGNEMENT(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_VALIDATION_ENSEIGNEMENT(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_VALIDATION_ENSEIGNEMENT%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT DISTINCT + C +r_cursor; + d +TBL_VALIDATION_ENSEIGNEMENT%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT DISTINCT i.annee_id, i.id intervenant_id, CASE WHEN rsv.priorite = ''affectation'' THEN @@ -2832,7 +3276,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@INTERVENANT_ID=i.id*/ /*@ANNEE_ID=i.annee_id*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -2862,38 +3306,51 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.VOLUME_HORAIRE_ID = v.VOLUME_HORAIRE_ID AND COALESCE(t.VALIDATION_ID,0) = COALESCE(v.VALIDATION_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_VALIDATION_ENSEIGNE_ID_SEQ.NEXTVAL; - INSERT INTO TBL_VALIDATION_ENSEIGNEMENT values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_validation_enseignement +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL AND d.STRUCTURE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.SERVICE_ID IS NULL AND d.VOLUME_HORAIRE_ID IS NULL AND d.VALIDATION_ID IS NULL THEN - DELETE FROM TBL_VALIDATION_ENSEIGNEMENT WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_VALIDATION_ENSEIGNEMENT SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_validation_enseignement +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_validation_enseignement +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; - PROCEDURE C_VALIDATION_REFERENTIEL(useParams BOOLEAN DEFAULT FALSE) IS + PROCEDURE C_VALIDATION_REFERENTIEL(useParams BOOLEAN DEFAULT FALSE) +IS TYPE r_cursor IS REF CURSOR; - c r_cursor; - d TBL_VALIDATION_REFERENTIEL%rowtype; - viewQuery CLOB; - BEGIN - viewQuery := 'SELECT DISTINCT + C +r_cursor; + d +TBL_VALIDATION_REFERENTIEL%rowtype; + viewQuery +CLOB; +BEGIN + viewQuery +:= 'SELECT DISTINCT i.annee_id, i.id intervenant_id, CASE WHEN rsv.priorite = ''affectation'' THEN @@ -2919,7 +3376,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS /*@INTERVENANT_ID=i.id*/ /*@ANNEE_ID=i.annee_id*/'; - OPEN c FOR ' +OPEN c FOR ' SELECT CASE WHEN t.ANNEE_ID = v.ANNEE_ID @@ -2949,27 +3406,35 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS AND t.VOLUME_HORAIRE_REF_ID = v.VOLUME_HORAIRE_REF_ID AND COALESCE(t.VALIDATION_ID,0) = COALESCE(v.VALIDATION_ID,0) WHERE ' || PARAMS_MAKE_FILTER(useParams); - LOOP - FETCH c INTO d; EXIT WHEN c%NOTFOUND; +LOOP +FETCH C INTO d; EXIT +WHEN C%NOTFOUND; - IF d.id IS NULL THEN + IF +d.id IS NULL THEN d.id := TBL_VALIDATION_REFERENT_ID_SEQ.NEXTVAL; - INSERT INTO TBL_VALIDATION_REFERENTIEL values d; - ELSIF - d.INTERVENANT_ID IS NULL +INSERT INTO tbl_validation_referentiel +VALUES d; +ELSIF +d.INTERVENANT_ID IS NULL AND d.STRUCTURE_ID IS NULL AND d.TYPE_VOLUME_HORAIRE_ID IS NULL AND d.SERVICE_REFERENTIEL_ID IS NULL AND d.VOLUME_HORAIRE_REF_ID IS NULL AND d.VALIDATION_ID IS NULL THEN - DELETE FROM TBL_VALIDATION_REFERENTIEL WHERE id = d.id; - ELSIF d.id <> -1 THEN - UPDATE TBL_VALIDATION_REFERENTIEL SET row = d WHERE id = d.id; - END IF; - END LOOP; - CLOSE c; - END; +DELETE +FROM tbl_validation_referentiel +WHERE id = d.id; +ELSIF +d.id <> -1 THEN +UPDATE tbl_validation_referentiel +SET row = d +WHERE id = d.id; +END IF; +END LOOP; +CLOSE c; +END; -- END OF AUTOMATIC GENERATION -- diff --git a/data/ddl/package/UNICAEN_TBL/definition.sql b/data/ddl/package/UNICAEN_TBL/definition.sql index 134b89eef4324d2214ea975d126f6e219f72a2d1..ca7a24de9a706ae09dfcf644f3825715b2b8e9c2 100644 --- a/data/ddl/package/UNICAEN_TBL/definition.sql +++ b/data/ddl/package/UNICAEN_TBL/definition.sql @@ -34,6 +34,7 @@ CREATE OR REPLACE PACKAGE "UNICAEN_TBL" AS PROCEDURE C_CONTRAT(useParams BOOLEAN DEFAULT FALSE); PROCEDURE C_DMEP_LIQUIDATION(useParams BOOLEAN DEFAULT FALSE); PROCEDURE C_DOSSIER(useParams BOOLEAN DEFAULT FALSE); + PROCEDURE C_MISSION(useParams BOOLEAN DEFAULT FALSE); PROCEDURE C_PAIEMENT(useParams BOOLEAN DEFAULT FALSE); PROCEDURE C_PIECE_JOINTE(useParams BOOLEAN DEFAULT FALSE); PROCEDURE C_PIECE_JOINTE_DEMANDE(useParams BOOLEAN DEFAULT FALSE); diff --git a/data/ddl/primary-constraint/MISSION_ETUDIANT_PK.php b/data/ddl/primary-constraint/MISSION_ETUDIANT_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..0cf8b1bc0a6a90cc4e293496137b84339cfa05fa --- /dev/null +++ b/data/ddl/primary-constraint/MISSION_ETUDIANT_PK.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT_PK', + 'table' => 'MISSION_ETUDIANT', + 'index' => 'MISSION_ETUDIANT_PK', + 'columns' => [ + 'INTERVENANT_ID', + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/MISSION_PK.php b/data/ddl/primary-constraint/MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..b6172f0ee45ebd44fb04a6cbd069ce1c4134df6e --- /dev/null +++ b/data/ddl/primary-constraint/MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_PK', + 'table' => 'MISSION', + 'index' => 'MISSION_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/TAG_PK.php b/data/ddl/primary-constraint/TAG_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..ae5bcb87e0e4fb94420a1e07be5a81059d3fcac6 --- /dev/null +++ b/data/ddl/primary-constraint/TAG_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_PK', + 'table' => 'TAG', + 'index' => 'TAG_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/TAUX_REMU_PK.php b/data/ddl/primary-constraint/TAUX_REMU_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..5b1d950eace86593029c40a3eff84813ff07d4be --- /dev/null +++ b/data/ddl/primary-constraint/TAUX_REMU_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_PK', + 'table' => 'TAUX_REMU', + 'index' => 'TAUX_REMU_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/TAUX_REMU_VALEUR_PK.php b/data/ddl/primary-constraint/TAUX_REMU_VALEUR_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..05c39762cead7d0ccc12a86a910b28b41212a421 --- /dev/null +++ b/data/ddl/primary-constraint/TAUX_REMU_VALEUR_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_VALEUR_PK', + 'table' => 'TAUX_REMU_VALEUR', + 'index' => 'TAUX_REMU_VALEUR_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/TBL_MISSION_PK.php b/data/ddl/primary-constraint/TBL_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..b0b9bca1b1b91b291b59d69036f0e534b824d984 --- /dev/null +++ b/data/ddl/primary-constraint/TBL_MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_PK', + 'table' => 'TBL_MISSION', + 'index' => 'TBL_MISSION_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/TYPE_MISSION_PK.php b/data/ddl/primary-constraint/TYPE_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..2ae1d416de9b21d6b94d0b4caee84781732259a5 --- /dev/null +++ b/data/ddl/primary-constraint/TYPE_MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_PK', + 'table' => 'TYPE_MISSION', + 'index' => 'TYPE_MISSION_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/VALIDATION_MISSION_PK.php b/data/ddl/primary-constraint/VALIDATION_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..fc1e064e15faebf355eebcc2b064efcf579c03b7 --- /dev/null +++ b/data/ddl/primary-constraint/VALIDATION_MISSION_PK.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISSION_PK', + 'table' => 'VALIDATION_MISSION', + 'index' => 'VALIDATION_MISSION_PK', + 'columns' => [ + 'VALIDATION_ID', + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/VALIDATION_VOL_HORAIRE_MISS_PK.php b/data/ddl/primary-constraint/VALIDATION_VOL_HORAIRE_MISS_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..3848f3297f3b6e5f5a1e10a450f43b7d2039df84 --- /dev/null +++ b/data/ddl/primary-constraint/VALIDATION_VOL_HORAIRE_MISS_PK.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_VOL_HORAIRE_MISS_PK', + 'table' => 'VALIDATION_VOL_HORAIRE_MISS', + 'index' => 'VALIDATION_VOL_HORAIRE_MISS_PK', + 'columns' => [ + 'VALIDATION_ID', + 'VOLUME_HORAIRE_MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/primary-constraint/VOLUME_HORAIRE_MISSION_PK.php b/data/ddl/primary-constraint/VOLUME_HORAIRE_MISSION_PK.php new file mode 100644 index 0000000000000000000000000000000000000000..64c0bb42571219b82376c858f9a868f53e3b658f --- /dev/null +++ b/data/ddl/primary-constraint/VOLUME_HORAIRE_MISSION_PK.php @@ -0,0 +1,14 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_PK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'index' => 'VOLUME_HORAIRE_MISSION_PK', + 'columns' => [ + 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/ELEMENT_PEDAGOGIQUE_FK1.php b/data/ddl/ref-constraint/ELEMENT_PEDAGOGIQUE_FK1.php new file mode 100644 index 0000000000000000000000000000000000000000..41e254250dc5b91e31748d2cb60d5911f8e8ccf7 --- /dev/null +++ b/data/ddl/ref-constraint/ELEMENT_PEDAGOGIQUE_FK1.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'ELEMENT_PEDAGOGIQUE_FK1', + 'table' => 'ELEMENT_PEDAGOGIQUE', + 'rtable' => 'TAUX_REMU', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TAUX_REMU_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_ETUDIANT_INTERVENANT_FK.php b/data/ddl/ref-constraint/MISSION_ETUDIANT_INTERVENANT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..8c42b473a3a97d0f567ee62e03c0fd56fdfeedce --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_ETUDIANT_INTERVENANT_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT_INTERVENANT_FK', + 'table' => 'MISSION_ETUDIANT', + 'rtable' => 'INTERVENANT', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'INTERVENANT_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_ETUDIANT_MISSION_FK.php b/data/ddl/ref-constraint/MISSION_ETUDIANT_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..095d1e25426e2754e3cab266f3993bcab3612b2f --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_ETUDIANT_MISSION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT_MISSION_FK', + 'table' => 'MISSION_ETUDIANT', + 'rtable' => 'MISSION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'MISSION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_HCFK.php b/data/ddl/ref-constraint/MISSION_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..11b93b64020ce6a7adb230d9699ddd80a084b979 --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_HCFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_HCFK', + 'table' => 'MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_CREATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_HDFK.php b/data/ddl/ref-constraint/MISSION_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..0d7c630dd453839d42bfeab78cfb283eac6ad70d --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_HDFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_HDFK', + 'table' => 'MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_HMFK.php b/data/ddl/ref-constraint/MISSION_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..6eb44642f774a208341125304acbfbc3302c7381 --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_HMFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_HMFK', + 'table' => 'MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_MODIFICATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_INTERVENANT_FK.php b/data/ddl/ref-constraint/MISSION_INTERVENANT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..cc643aced5ff152500c23fca3fe9a9997ebb08a5 --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_INTERVENANT_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_INTERVENANT_FK', + 'table' => 'MISSION', + 'rtable' => 'INTERVENANT', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'INTERVENANT_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_STRUCTURE_FK.php b/data/ddl/ref-constraint/MISSION_STRUCTURE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..6a3d6bc33e9227c48e1ccee8995b401ec0ba803e --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_STRUCTURE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_STRUCTURE_FK', + 'table' => 'MISSION', + 'rtable' => 'STRUCTURE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'STRUCTURE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_TAUX_REMU_FK.php b/data/ddl/ref-constraint/MISSION_TAUX_REMU_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..c5c3060dd9be9a115598dd770bf21c4f75187ce2 --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_TAUX_REMU_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_TAUX_REMU_FK', + 'table' => 'MISSION', + 'rtable' => 'TAUX_REMU', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TAUX_REMU_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/MISSION_TYPE_MISSION_FK.php b/data/ddl/ref-constraint/MISSION_TYPE_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..9ece1d25d30203cd698201b973282087a7079ee2 --- /dev/null +++ b/data/ddl/ref-constraint/MISSION_TYPE_MISSION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_TYPE_MISSION_FK', + 'table' => 'MISSION', + 'rtable' => 'TYPE_MISSION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TYPE_MISSION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/SERVICE_REFERENTIEL_TAG_FK.php b/data/ddl/ref-constraint/SERVICE_REFERENTIEL_TAG_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..6d2b4618ce847c1f74ac6cda29b658636163c650 --- /dev/null +++ b/data/ddl/ref-constraint/SERVICE_REFERENTIEL_TAG_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'SERVICE_REFERENTIEL_TAG_FK', + 'table' => 'SERVICE_REFERENTIEL', + 'rtable' => 'TAG', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TAG_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/SERV_REF_MOTIF_NON_PAIEMENT_FK.php b/data/ddl/ref-constraint/SERV_REF_MOTIF_NON_PAIEMENT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..58a882d0320656e8833ae2f675a8a4a7cbc52435 --- /dev/null +++ b/data/ddl/ref-constraint/SERV_REF_MOTIF_NON_PAIEMENT_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'SERV_REF_MOTIF_NON_PAIEMENT_FK', + 'table' => 'SERVICE_REFERENTIEL', + 'rtable' => 'MOTIF_NON_PAIEMENT', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'MOTIF_NON_PAIEMENT_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/STATUT_TAUX_FK.php b/data/ddl/ref-constraint/STATUT_TAUX_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..fcead65338aa73f1e02e000d9749d037db6945a7 --- /dev/null +++ b/data/ddl/ref-constraint/STATUT_TAUX_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'STATUT_TAUX_FK', + 'table' => 'STATUT', + 'rtable' => 'TAUX_REMU', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TAUX_REMU_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TAG_HCFK.php b/data/ddl/ref-constraint/TAG_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..24fc7aadec72d81100d08d5c428618c55afdf83f --- /dev/null +++ b/data/ddl/ref-constraint/TAG_HCFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_HCFK', + 'table' => 'TAG', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_CREATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TAG_HDFK.php b/data/ddl/ref-constraint/TAG_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..9f5c678999796ff51f1872cdf993f40b3e16dd84 --- /dev/null +++ b/data/ddl/ref-constraint/TAG_HDFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_HDFK', + 'table' => 'TAG', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TAG_HMFK.php b/data/ddl/ref-constraint/TAG_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..7dc218433873ae26b0b481cdf0c50c1b984b7444 --- /dev/null +++ b/data/ddl/ref-constraint/TAG_HMFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG_HMFK', + 'table' => 'TAG', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_MODIFICATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TAUX_REMU_HCFK.php b/data/ddl/ref-constraint/TAUX_REMU_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..0290f550aa6aa1de431a8e3ee717da748cadade2 --- /dev/null +++ b/data/ddl/ref-constraint/TAUX_REMU_HCFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_HCFK', + 'table' => 'TAUX_REMU', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_CREATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TAUX_REMU_HDFK.php b/data/ddl/ref-constraint/TAUX_REMU_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..18b66f1585f07850659029bef23a008a61db925c --- /dev/null +++ b/data/ddl/ref-constraint/TAUX_REMU_HDFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_HDFK', + 'table' => 'TAUX_REMU', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TAUX_REMU_HMFK.php b/data/ddl/ref-constraint/TAUX_REMU_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..ad2f37322d660daa1acef9bbe7106a02afbb971f --- /dev/null +++ b/data/ddl/ref-constraint/TAUX_REMU_HMFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_HMFK', + 'table' => 'TAUX_REMU', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_MODIFICATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TBL_MISSION_ANNEE_FK.php b/data/ddl/ref-constraint/TBL_MISSION_ANNEE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..3c40e6a37d7f7af2965650f2b7e3114531c44bb8 --- /dev/null +++ b/data/ddl/ref-constraint/TBL_MISSION_ANNEE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_ANNEE_FK', + 'table' => 'TBL_MISSION', + 'rtable' => 'ANNEE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'ANNEE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TBL_MISSION_INTERVENANT_FK.php b/data/ddl/ref-constraint/TBL_MISSION_INTERVENANT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..021f823ce23fdd04d39ded89b614718b7119ff0e --- /dev/null +++ b/data/ddl/ref-constraint/TBL_MISSION_INTERVENANT_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_INTERVENANT_FK', + 'table' => 'TBL_MISSION', + 'rtable' => 'INTERVENANT', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'INTERVENANT_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TBL_MISSION_INT_STRUCTURE_FK.php b/data/ddl/ref-constraint/TBL_MISSION_INT_STRUCTURE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..99e2a9ed5f7883b96d1e5e081cbca6d6b865afd8 --- /dev/null +++ b/data/ddl/ref-constraint/TBL_MISSION_INT_STRUCTURE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_INT_STRUCTURE_FK', + 'table' => 'TBL_MISSION', + 'rtable' => 'STRUCTURE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'INTERVENANT_STRUCTURE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TBL_MISSION_MISSION_FK.php b/data/ddl/ref-constraint/TBL_MISSION_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..5620cde3b0039741024b9b7f8fc74545761131c9 --- /dev/null +++ b/data/ddl/ref-constraint/TBL_MISSION_MISSION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_MISSION_FK', + 'table' => 'TBL_MISSION', + 'rtable' => 'MISSION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'MISSION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TBL_MISSION_STRUCTURE_FK.php b/data/ddl/ref-constraint/TBL_MISSION_STRUCTURE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..048353b467d91ea275409aededdbcd84739e95c5 --- /dev/null +++ b/data/ddl/ref-constraint/TBL_MISSION_STRUCTURE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_STRUCTURE_FK', + 'table' => 'TBL_MISSION', + 'rtable' => 'STRUCTURE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'STRUCTURE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TRV_TAUX_FK.php b/data/ddl/ref-constraint/TRV_TAUX_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..0d2d90c48328fa83b8f041323b26e3e197b0ccd9 --- /dev/null +++ b/data/ddl/ref-constraint/TRV_TAUX_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TRV_TAUX_FK', + 'table' => 'TAUX_REMU_VALEUR', + 'rtable' => 'TAUX_REMU', + 'delete_rule' => 'CASCADE', + 'index' => NULL, + 'columns' => [ + 'TAUX_REMU_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TYPE_MISSION_ANNEE_FK.php b/data/ddl/ref-constraint/TYPE_MISSION_ANNEE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..290db176fec42e199eadd3494ae74e3212e63233 --- /dev/null +++ b/data/ddl/ref-constraint/TYPE_MISSION_ANNEE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_ANNEE_FK', + 'table' => 'TYPE_MISSION', + 'rtable' => 'ANNEE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'ANNEE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TYPE_MISSION_HCFK.php b/data/ddl/ref-constraint/TYPE_MISSION_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..409444333f0377011d49ecdc05e4c3c47fe32480 --- /dev/null +++ b/data/ddl/ref-constraint/TYPE_MISSION_HCFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_HCFK', + 'table' => 'TYPE_MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_CREATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TYPE_MISSION_HDFK.php b/data/ddl/ref-constraint/TYPE_MISSION_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..eff7861a64f6e7e930ef7bda40873dc63273b5b8 --- /dev/null +++ b/data/ddl/ref-constraint/TYPE_MISSION_HDFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_HDFK', + 'table' => 'TYPE_MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TYPE_MISSION_HMFK.php b/data/ddl/ref-constraint/TYPE_MISSION_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..a91c260770274e915b176e42cb7f5b1b7a39020f --- /dev/null +++ b/data/ddl/ref-constraint/TYPE_MISSION_HMFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_HMFK', + 'table' => 'TYPE_MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_MODIFICATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/TYPE_MISSION_TAUX_REMU_FK.php b/data/ddl/ref-constraint/TYPE_MISSION_TAUX_REMU_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..9841e1c2f49a3dec1cdb449891eddf2ad705cff8 --- /dev/null +++ b/data/ddl/ref-constraint/TYPE_MISSION_TAUX_REMU_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_TAUX_REMU_FK', + 'table' => 'TYPE_MISSION', + 'rtable' => 'TAUX_REMU', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TAUX_REMU_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VALIDATION_MISS_MISSION_FK.php b/data/ddl/ref-constraint/VALIDATION_MISS_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..5c1c959a35a446a9be23319232df76e999d60ea3 --- /dev/null +++ b/data/ddl/ref-constraint/VALIDATION_MISS_MISSION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISS_MISSION_FK', + 'table' => 'VALIDATION_MISSION', + 'rtable' => 'MISSION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'MISSION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VALIDATION_MISS_VALIDATION_FK.php b/data/ddl/ref-constraint/VALIDATION_MISS_VALIDATION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..611c4c33623bca6f43cc4c237d8fcb0d80872001 --- /dev/null +++ b/data/ddl/ref-constraint/VALIDATION_MISS_VALIDATION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISS_VALIDATION_FK', + 'table' => 'VALIDATION_MISSION', + 'rtable' => 'VALIDATION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'VALIDATION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VHM_CONTRAT_FK.php b/data/ddl/ref-constraint/VHM_CONTRAT_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..f91e36e4a24ee990e6516dfd294c6b8cc8d6c14b --- /dev/null +++ b/data/ddl/ref-constraint/VHM_CONTRAT_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VHM_CONTRAT_FK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'CONTRAT', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'CONTRAT_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VHM_MISSION_FK.php b/data/ddl/ref-constraint/VHM_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..21c4b6a2ff42976a6ae9da7085426f741c0e9507 --- /dev/null +++ b/data/ddl/ref-constraint/VHM_MISSION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VHM_MISSION_FK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'MISSION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'MISSION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VHM_TYPE_VOLUME_HORAIRE_FK.php b/data/ddl/ref-constraint/VHM_TYPE_VOLUME_HORAIRE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..edbbaa1527dc99e84e0f2e35e0c43557aa2f04eb --- /dev/null +++ b/data/ddl/ref-constraint/VHM_TYPE_VOLUME_HORAIRE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VHM_TYPE_VOLUME_HORAIRE_FK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'TYPE_VOLUME_HORAIRE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TYPE_VOLUME_HORAIRE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HCFK.php b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HCFK.php new file mode 100644 index 0000000000000000000000000000000000000000..1091c9570f2929d783017f612e59b824a0c95041 --- /dev/null +++ b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HCFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_HCFK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_CREATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HDFK.php b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HDFK.php new file mode 100644 index 0000000000000000000000000000000000000000..668bca7e1187502c20d5b49f275791432c5957f2 --- /dev/null +++ b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HDFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_HDFK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_DESTRUCTEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HMFK.php b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HMFK.php new file mode 100644 index 0000000000000000000000000000000000000000..016aa63944a9dab42bd009bde7b3f07df09e0d3e --- /dev/null +++ b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSION_HMFK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION_HMFK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'UTILISATEUR', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'HISTO_MODIFICATEUR_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSI_SOURCE_FK.php b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSI_SOURCE_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..6998425d8cd459d53495d16a63805ad34e444ba3 --- /dev/null +++ b/data/ddl/ref-constraint/VOLUME_HORAIRE_MISSI_SOURCE_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSI_SOURCE_FK', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'rtable' => 'SOURCE', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'SOURCE_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VOLUME_HORAIRE_TAG_FK.php b/data/ddl/ref-constraint/VOLUME_HORAIRE_TAG_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..9eb7aa16e6ed43d2891a9f53ccccdeddf2e45435 --- /dev/null +++ b/data/ddl/ref-constraint/VOLUME_HORAIRE_TAG_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_TAG_FK', + 'table' => 'VOLUME_HORAIRE', + 'rtable' => 'TAG', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'TAG_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VVHM_VALIDATION_FK.php b/data/ddl/ref-constraint/VVHM_VALIDATION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..4d451573b794d718bc6b5f206b34c6895fd2aff7 --- /dev/null +++ b/data/ddl/ref-constraint/VVHM_VALIDATION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VVHM_VALIDATION_FK', + 'table' => 'VALIDATION_VOL_HORAIRE_MISS', + 'rtable' => 'VALIDATION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'VALIDATION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/ref-constraint/VVHM_VOLUME_HORAIRE_MISSION_FK.php b/data/ddl/ref-constraint/VVHM_VOLUME_HORAIRE_MISSION_FK.php new file mode 100644 index 0000000000000000000000000000000000000000..1a5ee450fe3c5100e38bfb3faeb0c5bb84331825 --- /dev/null +++ b/data/ddl/ref-constraint/VVHM_VOLUME_HORAIRE_MISSION_FK.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VVHM_VOLUME_HORAIRE_MISSION_FK', + 'table' => 'VALIDATION_VOL_HORAIRE_MISS', + 'rtable' => 'VOLUME_HORAIRE_MISSION', + 'delete_rule' => NULL, + 'index' => NULL, + 'columns' => [ + 'VOLUME_HORAIRE_MISSION_ID' => 'ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/sequence.php b/data/ddl/sequence.php index d6d6d2bfd3ed1415bfaf891068c3fd2f301f325d..d4a8faffbf069f8198d6983c1533cdb8a38ed611 100644 --- a/data/ddl/sequence.php +++ b/data/ddl/sequence.php @@ -56,6 +56,10 @@ return [ 'INTERVENANT_SAISIE_ID_SEQ', 'LIEN_ID_SEQ', 'MISE_EN_PAIEMENT_ID_SEQ', + 'MISSION_ID_SEQ', + 'MISSION_TAUX_REMU_ID_SEQ', + 'MISSION_TAUX_REMU_VALEUR_ID_SEQ', + 'MISSION_TAUX_REMU_VALEU_ID_SEQ', 'MODIFICATION_SERVICE_DU_ID_SEQ', 'MODULATEUR_ID_SEQ', 'MOTIF_MODIFICATION_SERV_ID_SEQ', @@ -92,7 +96,10 @@ return [ 'STATUT_INTERVENANT_MAPP_ID_SEQ', 'STRUCTURE_ID_SEQ', 'SYNC_LOG_ID_SEQ', + 'TAG_ID_SEQ', 'TAUX_HORAIRE_HETD_ID_SEQ', + 'TAUX_REMU_ID_SEQ', + 'TAUX_REMU_VALEUR_ID_SEQ', 'TBL_AGREMENT_ID_SEQ', 'TBL_CHARGENS_ID_SEQ', 'TBL_CHARGENS_SEUILS_DEF_ID_SEQ', @@ -102,6 +109,7 @@ return [ 'TBL_DMEP_LIQUIDATION_ID_SEQ', 'TBL_DOSSIER_ID_SEQ', 'TBL_LIEN_ID_SEQ', + 'TBL_MISSION_ID_SEQ', 'TBL_PAIEMENT_ID_SEQ', 'TBL_PIECE_JOINTE_DEMAND_ID_SEQ', 'TBL_PIECE_JOINTE_FOURNI_ID_SEQ', @@ -128,6 +136,7 @@ return [ 'TYPE_INTERVENTION_ID_SEQ', 'TYPE_INTERVENTION_STATU_ID_SEQ', 'TYPE_INTERVENTION_STRUC_ID_SEQ', + 'TYPE_MISSION_ID_SEQ', 'TYPE_MODULATEUR_EP_ID_SEQ', 'TYPE_MODULATEUR_ID_SEQ', 'TYPE_MODULATEUR_STRUCTU_ID_SEQ', @@ -144,6 +153,7 @@ return [ 'VOLUME_HORAIRE_CHARGE_ID_SEQ', 'VOLUME_HORAIRE_ENS_ID_SEQ', 'VOLUME_HORAIRE_ID_SEQ', + 'VOLUME_HORAIRE_MISSION_ID_SEQ', 'VOLUME_HORAIRE_REF_ID_SEQ', 'WF_DEP_BLOQUANTE_ID_SEQ', 'WF_ETAPE_DEP_ID_SEQ', diff --git a/data/ddl/table/ELEMENT_PEDAGOGIQUE.php b/data/ddl/table/ELEMENT_PEDAGOGIQUE.php index 3f2bc235afdb3c48623995d0001dcc9cedf09379..6eae145fff5b762b1d799dffa2514538bb98ca52 100644 --- a/data/ddl/table/ELEMENT_PEDAGOGIQUE.php +++ b/data/ddl/table/ELEMENT_PEDAGOGIQUE.php @@ -285,6 +285,18 @@ return [ 'position' => 8, 'commentaire' => NULL, ], + 'TAUX_REMU_ID' => [ + 'name' => 'TAUX_REMU_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 24, + 'commentaire' => NULL, + ], ], ]; diff --git a/data/ddl/table/MISSION.php b/data/ddl/table/MISSION.php new file mode 100644 index 0000000000000000000000000000000000000000..e7ebfbaafa991b197edbd13ff05eeac055c0829c --- /dev/null +++ b/data/ddl/table/MISSION.php @@ -0,0 +1,195 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'MISSION_ID_SEQ', + 'columns' => [ + 'AUTO_VALIDATION' => [ + 'name' => 'AUTO_VALIDATION', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 14, + 'commentaire' => NULL, + ], + 'DATE_DEBUT' => [ + 'name' => 'DATE_DEBUT', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 4, + 'commentaire' => NULL, + ], + 'DATE_FIN' => [ + 'name' => 'DATE_FIN', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 5, + 'commentaire' => NULL, + ], + 'DESCRIPTION' => [ + 'name' => 'DESCRIPTION', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 4000, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 6, + 'commentaire' => NULL, + ], + 'HISTO_CREATEUR_ID' => [ + 'name' => 'HISTO_CREATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 8, + 'commentaire' => NULL, + ], + 'HISTO_CREATION' => [ + 'name' => 'HISTO_CREATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 7, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTEUR_ID' => [ + 'name' => 'HISTO_DESTRUCTEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 12, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTION' => [ + 'name' => 'HISTO_DESTRUCTION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 11, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATEUR_ID' => [ + 'name' => 'HISTO_MODIFICATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 10, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATION' => [ + 'name' => 'HISTO_MODIFICATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 9, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'INTERVENANT_ID' => [ + 'name' => 'INTERVENANT_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'STRUCTURE_ID' => [ + 'name' => 'STRUCTURE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 13, + 'commentaire' => NULL, + ], + 'TAUX_REMU_ID' => [ + 'name' => 'TAUX_REMU_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 15, + 'commentaire' => NULL, + ], + 'TYPE_MISSION_ID' => [ + 'name' => 'TYPE_MISSION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/MISSION_ETUDIANT.php b/data/ddl/table/MISSION_ETUDIANT.php new file mode 100644 index 0000000000000000000000000000000000000000..8835f2bbc5d6b09c27a7c968a225b56690e47222 --- /dev/null +++ b/data/ddl/table/MISSION_ETUDIANT.php @@ -0,0 +1,39 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'MISSION_ETUDIANT', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => NULL, + 'columns' => [ + 'INTERVENANT_ID' => [ + 'name' => 'INTERVENANT_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'MISSION_ID' => [ + 'name' => 'MISSION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/SCENARIO_NOEUD_EFFECTIF.php b/data/ddl/table/SCENARIO_NOEUD_EFFECTIF.php index aae5e837b501ea3b79158eec593f7474d0dc6691..97875c7453f715cd21af780c2c99c4a3a3467c09 100644 --- a/data/ddl/table/SCENARIO_NOEUD_EFFECTIF.php +++ b/data/ddl/table/SCENARIO_NOEUD_EFFECTIF.php @@ -21,6 +21,18 @@ return [ 'position' => 4, 'commentaire' => NULL, ], + 'EFFECTIF_CALCULE' => [ + 'name' => 'EFFECTIF_CALCULE', + 'type' => 'float', + 'bdd-type' => 'FLOAT', + 'length' => 0, + 'scale' => NULL, + 'precision' => 126, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 14, + 'commentaire' => NULL, + ], 'ETAPE_ID' => [ 'name' => 'ETAPE_ID', 'type' => 'int', diff --git a/data/ddl/table/SERVICE_REFERENTIEL.php b/data/ddl/table/SERVICE_REFERENTIEL.php index a7a6a3cde14e5717e7019a560d7e95ac8d6122e3..516b16bd9831fc8bb040f3b65bd2fe168aa35e52 100644 --- a/data/ddl/table/SERVICE_REFERENTIEL.php +++ b/data/ddl/table/SERVICE_REFERENTIEL.php @@ -141,6 +141,18 @@ return [ 'position' => 3, 'commentaire' => NULL, ], + 'MOTIF_NON_PAIEMENT_ID' => [ + 'name' => 'MOTIF_NON_PAIEMENT_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 15, + 'commentaire' => NULL, + ], 'SOURCE_CODE' => [ 'name' => 'SOURCE_CODE', 'type' => 'string', @@ -177,6 +189,18 @@ return [ 'position' => 4, 'commentaire' => NULL, ], + 'TAG_ID' => [ + 'name' => 'TAG_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 16, + 'commentaire' => NULL, + ], ], ]; diff --git a/data/ddl/table/STATUT.php b/data/ddl/table/STATUT.php index 35afd7bafbcdd336c338c5f9a4627f03e5fdf5de..c8a422d73c7d3980595d868ecda344c56e5ee000 100644 --- a/data/ddl/table/STATUT.php +++ b/data/ddl/table/STATUT.php @@ -189,18 +189,6 @@ return [ 'position' => 50, 'commentaire' => NULL, ], - 'CONTRAT_GENERATION' => [ - 'name' => 'CONTRAT_GENERATION', - 'type' => 'bool', - 'bdd-type' => 'NUMBER', - 'length' => 0, - 'scale' => '0', - 'precision' => 1, - 'nullable' => FALSE, - 'default' => '0', - 'position' => 50, - 'commentaire' => NULL, - ], 'CONTRAT_ETAT_SORTIE_ID' => [ 'name' => 'CONTRAT_ETAT_SORTIE_ID', 'type' => 'int', @@ -213,6 +201,18 @@ return [ 'position' => 80, 'commentaire' => NULL, ], + 'CONTRAT_GENERATION' => [ + 'name' => 'CONTRAT_GENERATION', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 82, + 'commentaire' => NULL, + ], 'CONTRAT_VISUALISATION' => [ 'name' => 'CONTRAT_VISUALISATION', 'type' => 'bool', @@ -537,6 +537,18 @@ return [ 'position' => 14, 'commentaire' => NULL, ], + 'DOSSIER_STATUT' => [ + 'name' => 'DOSSIER_STATUT', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '1', + 'position' => 86, + 'commentaire' => NULL, + ], 'DOSSIER_TEL_PERSO' => [ 'name' => 'DOSSIER_TEL_PERSO', 'type' => 'bool', @@ -669,8 +681,8 @@ return [ 'position' => 3, 'commentaire' => NULL, ], - 'MODIF_SERVICE_DU' => [ - 'name' => 'MODIF_SERVICE_DU', + 'MISSION' => [ + 'name' => 'MISSION', 'type' => 'bool', 'bdd-type' => 'NUMBER', 'length' => 0, @@ -678,11 +690,11 @@ return [ 'precision' => 1, 'nullable' => FALSE, 'default' => '0', - 'position' => 62, + 'position' => 83, 'commentaire' => NULL, ], - 'MODIF_SERVICE_DU_VISUALISATION' => [ - 'name' => 'MODIF_SERVICE_DU_VISUALISATION', + 'MISSION_REALISE_EDITION' => [ + 'name' => 'MISSION_REALISE_EDITION', 'type' => 'bool', 'bdd-type' => 'NUMBER', 'length' => 0, @@ -690,11 +702,23 @@ return [ 'precision' => 1, 'nullable' => FALSE, 'default' => '0', - 'position' => 63, + 'position' => 84, 'commentaire' => NULL, ], - 'MODIF_SERVICE_DU_EDITION' => [ - 'name' => 'MODIF_SERVICE_DU_EDITION', + 'MODIF_SERVICE_DU' => [ + 'name' => 'MODIF_SERVICE_DU', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 62, + 'commentaire' => NULL, + ], + 'MODIF_SERVICE_DU_VISUALISATION' => [ + 'name' => 'MODIF_SERVICE_DU_VISUALISATION', 'type' => 'bool', 'bdd-type' => 'NUMBER', 'length' => 0, @@ -993,6 +1017,18 @@ return [ 'position' => 81, 'commentaire' => NULL, ], + 'TAUX_REMU_ID' => [ + 'name' => 'TAUX_REMU_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 85, + 'commentaire' => NULL, + ], 'TYPE_INTERVENANT_ID' => [ 'name' => 'TYPE_INTERVENANT_ID', 'type' => 'int', diff --git a/data/ddl/table/TAG.php b/data/ddl/table/TAG.php new file mode 100644 index 0000000000000000000000000000000000000000..75860272c58bb358db7421be029992a7dfc7b26b --- /dev/null +++ b/data/ddl/table/TAG.php @@ -0,0 +1,135 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAG', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'TAG_ID_SEQ', + 'columns' => [ + 'CODE' => [ + 'name' => 'CODE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 10, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'HISTO_CREATEUR_ID' => [ + 'name' => 'HISTO_CREATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 6, + 'commentaire' => NULL, + ], + 'HISTO_CREATION' => [ + 'name' => 'HISTO_CREATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 5, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTEUR_ID' => [ + 'name' => 'HISTO_DESTRUCTEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 10, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTION' => [ + 'name' => 'HISTO_DESTRUCTION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 9, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATEUR_ID' => [ + 'name' => 'HISTO_MODIFICATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 8, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATION' => [ + 'name' => 'HISTO_MODIFICATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 7, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'LIBELLE_COURT' => [ + 'name' => 'LIBELLE_COURT', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 50, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + 'LIBELLE_LONG' => [ + 'name' => 'LIBELLE_LONG', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 200, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 4, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/TAUX_REMU.php b/data/ddl/table/TAUX_REMU.php new file mode 100644 index 0000000000000000000000000000000000000000..d52b2aab8d59cbddfb9f41aaca09408bcc6edef2 --- /dev/null +++ b/data/ddl/table/TAUX_REMU.php @@ -0,0 +1,135 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'TAUX_REMU_ID_SEQ', + 'columns' => [ + 'CODE' => [ + 'name' => 'CODE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 20, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'HISTO_CREATEUR_ID' => [ + 'name' => 'HISTO_CREATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 4, + 'commentaire' => NULL, + ], + 'HISTO_CREATION' => [ + 'name' => 'HISTO_CREATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 5, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTEUR_ID' => [ + 'name' => 'HISTO_DESTRUCTEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 6, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTION' => [ + 'name' => 'HISTO_DESTRUCTION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 7, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATEUR_ID' => [ + 'name' => 'HISTO_MODIFICATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 8, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATION' => [ + 'name' => 'HISTO_MODIFICATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 9, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'LIBELLE' => [ + 'name' => 'LIBELLE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 50, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + 'TAUX_REMU_ID' => [ + 'name' => 'TAUX_REMU_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 10, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/TAUX_REMU_VALEUR.php b/data/ddl/table/TAUX_REMU_VALEUR.php new file mode 100644 index 0000000000000000000000000000000000000000..4fa5b808295681041d58e4a6db109aedadc86d65 --- /dev/null +++ b/data/ddl/table/TAUX_REMU_VALEUR.php @@ -0,0 +1,63 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_VALEUR', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'TAUX_REMU_VALEUR_ID_SEQ', + 'columns' => [ + 'DATE_EFFET' => [ + 'name' => 'DATE_EFFET', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'TAUX_REMU_ID' => [ + 'name' => 'TAUX_REMU_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'VALEUR' => [ + 'name' => 'VALEUR', + 'type' => 'float', + 'bdd-type' => 'FLOAT', + 'length' => 0, + 'scale' => NULL, + 'precision' => 126, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 4, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/TBL_MISSION.php b/data/ddl/table/TBL_MISSION.php new file mode 100644 index 0000000000000000000000000000000000000000..3a8a69b9f9e4051f9883ac7725b48c9583d78c6a --- /dev/null +++ b/data/ddl/table/TBL_MISSION.php @@ -0,0 +1,135 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'TBL_MISSION_ID_SEQ', + 'columns' => [ + 'ACTIF' => [ + 'name' => 'ACTIF', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 4, + 'commentaire' => NULL, + ], + 'ANNEE_ID' => [ + 'name' => 'ANNEE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'HEURES_REALISEES' => [ + 'name' => 'HEURES_REALISEES', + 'type' => 'float', + 'bdd-type' => 'FLOAT', + 'length' => 0, + 'scale' => NULL, + 'precision' => 126, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 9, + 'commentaire' => NULL, + ], + 'HEURES_VALIDEES' => [ + 'name' => 'HEURES_VALIDEES', + 'type' => 'float', + 'bdd-type' => 'FLOAT', + 'length' => 0, + 'scale' => NULL, + 'precision' => 126, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 10, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'INTERVENANT_ID' => [ + 'name' => 'INTERVENANT_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + 'INTERVENANT_STRUCTURE_ID' => [ + 'name' => 'INTERVENANT_STRUCTURE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 7, + 'commentaire' => NULL, + ], + 'MISSION_ID' => [ + 'name' => 'MISSION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 5, + 'commentaire' => NULL, + ], + 'STRUCTURE_ID' => [ + 'name' => 'STRUCTURE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 6, + 'commentaire' => NULL, + ], + 'VALIDE' => [ + 'name' => 'VALIDE', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 8, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/TYPE_INTERVENTION_STATUT.php b/data/ddl/table/TYPE_INTERVENTION_STATUT.php index 113a9eb5efee93e97669ab1d551f6f405f2eb7b2..cd0eb55246ea9d374dc86bbc3b3d0f18e61bcc15 100644 --- a/data/ddl/table/TYPE_INTERVENTION_STATUT.php +++ b/data/ddl/table/TYPE_INTERVENTION_STATUT.php @@ -28,7 +28,7 @@ return [ 'length' => 0, 'scale' => '0', 'precision' => NULL, - 'nullable' => TRUE, + 'nullable' => FALSE, 'default' => NULL, 'position' => 8, 'commentaire' => NULL, @@ -40,7 +40,7 @@ return [ 'length' => 0, 'scale' => NULL, 'precision' => NULL, - 'nullable' => TRUE, + 'nullable' => FALSE, 'default' => NULL, 'position' => 7, 'commentaire' => NULL, @@ -88,7 +88,7 @@ return [ 'length' => 0, 'scale' => NULL, 'precision' => NULL, - 'nullable' => TRUE, + 'nullable' => FALSE, 'default' => NULL, 'position' => 9, 'commentaire' => NULL, diff --git a/data/ddl/table/TYPE_MISSION.php b/data/ddl/table/TYPE_MISSION.php new file mode 100644 index 0000000000000000000000000000000000000000..2295d687547906e9e103cff241b1f7eb85b3f886 --- /dev/null +++ b/data/ddl/table/TYPE_MISSION.php @@ -0,0 +1,147 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'TYPE_MISSION_ID_SEQ', + 'columns' => [ + 'ANNEE_ID' => [ + 'name' => 'ANNEE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 4, + 'commentaire' => NULL, + ], + 'CODE' => [ + 'name' => 'CODE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 30, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'HISTO_CREATEUR_ID' => [ + 'name' => 'HISTO_CREATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 6, + 'commentaire' => NULL, + ], + 'HISTO_CREATION' => [ + 'name' => 'HISTO_CREATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 5, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTEUR_ID' => [ + 'name' => 'HISTO_DESTRUCTEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 10, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTION' => [ + 'name' => 'HISTO_DESTRUCTION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 9, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATEUR_ID' => [ + 'name' => 'HISTO_MODIFICATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 8, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATION' => [ + 'name' => 'HISTO_MODIFICATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 7, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'LIBELLE' => [ + 'name' => 'LIBELLE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 100, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + 'TAUX_REMU_ID' => [ + 'name' => 'TAUX_REMU_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 11, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/TYPE_PIECE_JOINTE_STATUT.php b/data/ddl/table/TYPE_PIECE_JOINTE_STATUT.php index 3c8b5962ff523f59685ae288e9dfab5957093828..9e49efa73c37a14dc0c9c248b075afb69340a5a7 100644 --- a/data/ddl/table/TYPE_PIECE_JOINTE_STATUT.php +++ b/data/ddl/table/TYPE_PIECE_JOINTE_STATUT.php @@ -141,6 +141,18 @@ return [ 'position' => 1, 'commentaire' => NULL, ], + 'NATIONALITE_ETRANGERE' => [ + 'name' => 'NATIONALITE_ETRANGERE', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 19, + 'commentaire' => NULL, + ], 'NUM_REGLE' => [ 'name' => 'NUM_REGLE', 'type' => 'int', diff --git a/data/ddl/table/VALIDATION_MISSION.php b/data/ddl/table/VALIDATION_MISSION.php new file mode 100644 index 0000000000000000000000000000000000000000..f8dac68ac6431550e4a8ae7985665db08a7f4826 --- /dev/null +++ b/data/ddl/table/VALIDATION_MISSION.php @@ -0,0 +1,39 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_MISSION', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => NULL, + 'columns' => [ + 'MISSION_ID' => [ + 'name' => 'MISSION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + 'VALIDATION_ID' => [ + 'name' => 'VALIDATION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/VALIDATION_VOL_HORAIRE_MISS.php b/data/ddl/table/VALIDATION_VOL_HORAIRE_MISS.php new file mode 100644 index 0000000000000000000000000000000000000000..1764cba0e8fba2e3d224aa611abb7030cf104b26 --- /dev/null +++ b/data/ddl/table/VALIDATION_VOL_HORAIRE_MISS.php @@ -0,0 +1,39 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VALIDATION_VOL_HORAIRE_MISS', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'VALIDATION_VOL_HORAIRE__ID_SEQ', + 'columns' => [ + 'VALIDATION_ID' => [ + 'name' => 'VALIDATION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'VOLUME_HORAIRE_MISSION_ID' => [ + 'name' => 'VOLUME_HORAIRE_MISSION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/table/VOLUME_HORAIRE.php b/data/ddl/table/VOLUME_HORAIRE.php index 19432e64f093c0ed52846cc17c610aeb9a05cc85..bc7e83dea0b0a02891a83cc57255efc0bb121de5 100644 --- a/data/ddl/table/VOLUME_HORAIRE.php +++ b/data/ddl/table/VOLUME_HORAIRE.php @@ -213,6 +213,18 @@ return [ 'position' => 15, 'commentaire' => NULL, ], + 'TAG_ID' => [ + 'name' => 'TAG_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 20, + 'commentaire' => NULL, + ], 'TYPE_INTERVENTION_ID' => [ 'name' => 'TYPE_INTERVENTION_ID', 'type' => 'int', diff --git a/data/ddl/table/VOLUME_HORAIRE_MISSION.php b/data/ddl/table/VOLUME_HORAIRE_MISSION.php new file mode 100644 index 0000000000000000000000000000000000000000..bf2f733bfbb1e757bb4c0007fa4142d19f10f218 --- /dev/null +++ b/data/ddl/table/VOLUME_HORAIRE_MISSION.php @@ -0,0 +1,219 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSION', + 'temporary' => FALSE, + 'logging' => TRUE, + 'commentaire' => NULL, + 'sequence' => 'VOLUME_HORAIRE_MISSION_ID_SEQ', + 'columns' => [ + 'AUTO_VALIDATION' => [ + 'name' => 'AUTO_VALIDATION', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 6, + 'commentaire' => NULL, + ], + 'CONTRAT_ID' => [ + 'name' => 'CONTRAT_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 5, + 'commentaire' => NULL, + ], + 'HEURES' => [ + 'name' => 'HEURES', + 'type' => 'float', + 'bdd-type' => 'FLOAT', + 'length' => 0, + 'scale' => NULL, + 'precision' => 126, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 4, + 'commentaire' => NULL, + ], + 'HISTO_CREATEUR_ID' => [ + 'name' => 'HISTO_CREATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 13, + 'commentaire' => NULL, + ], + 'HISTO_CREATION' => [ + 'name' => 'HISTO_CREATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 12, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTEUR_ID' => [ + 'name' => 'HISTO_DESTRUCTEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 17, + 'commentaire' => NULL, + ], + 'HISTO_DESTRUCTION' => [ + 'name' => 'HISTO_DESTRUCTION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 16, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATEUR_ID' => [ + 'name' => 'HISTO_MODIFICATEUR_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 15, + 'commentaire' => NULL, + ], + 'HISTO_MODIFICATION' => [ + 'name' => 'HISTO_MODIFICATION', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => 'SYSDATE', + 'position' => 14, + 'commentaire' => NULL, + ], + 'HORAIRE_DEBUT' => [ + 'name' => 'HORAIRE_DEBUT', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 7, + 'commentaire' => NULL, + ], + 'HORAIRE_FIN' => [ + 'name' => 'HORAIRE_FIN', + 'type' => 'date', + 'bdd-type' => 'DATE', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 8, + 'commentaire' => NULL, + ], + 'ID' => [ + 'name' => 'ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 1, + 'commentaire' => NULL, + ], + 'MISSION_ID' => [ + 'name' => 'MISSION_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 3, + 'commentaire' => NULL, + ], + 'NOCTURNE' => [ + 'name' => 'NOCTURNE', + 'type' => 'bool', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => '0', + 'precision' => 1, + 'nullable' => FALSE, + 'default' => '0', + 'position' => 9, + 'commentaire' => NULL, + ], + 'SOURCE_CODE' => [ + 'name' => 'SOURCE_CODE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 100, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 10, + 'commentaire' => NULL, + ], + 'SOURCE_ID' => [ + 'name' => 'SOURCE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 11, + 'commentaire' => NULL, + ], + 'TYPE_VOLUME_HORAIRE_ID' => [ + 'name' => 'TYPE_VOLUME_HORAIRE_ID', + 'type' => 'int', + 'bdd-type' => 'NUMBER', + 'length' => 0, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => FALSE, + 'default' => NULL, + 'position' => 2, + 'commentaire' => NULL, + ], + ], +]; + +//@formatter:on diff --git a/data/ddl/trigger/F_MODULATEUR.sql b/data/ddl/trigger/F_MODULATEUR.sql deleted file mode 100644 index bbdae3ae77c795ae860cb974fc2e287626819e87..0000000000000000000000000000000000000000 --- a/data/ddl/trigger/F_MODULATEUR.sql +++ /dev/null @@ -1,26 +0,0 @@ -CREATE OR REPLACE TRIGGER "F_MODULATEUR" -AFTER UPDATE OR DELETE ON modulateur -FOR EACH ROW -BEGIN - - IF NOT UNICAEN_TBL.ACTIV_TRIGGERS THEN RETURN; END IF; - - FOR p IN ( - - SELECT DISTINCT - s.intervenant_id - FROM - service s - JOIN element_modulateur em ON - em.element_id = s.element_pedagogique_id - AND em.histo_destruction IS NULL - WHERE - s.histo_destruction IS NULL - AND (em.modulateur_id = :OLD.id OR em.modulateur_id = :NEW.id) - - ) LOOP - - UNICAEN_TBL.DEMANDE_CALCUL('formule', 'INTERVENANT_ID', p.intervenant_id ); - - END LOOP; -END; \ No newline at end of file diff --git a/data/ddl/trigger/F_MODULATEUR_S.sql b/data/ddl/trigger/F_MODULATEUR_S.sql deleted file mode 100644 index c0f98a5ce270fa9f778662ca229412b25feed650..0000000000000000000000000000000000000000 --- a/data/ddl/trigger/F_MODULATEUR_S.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE OR REPLACE TRIGGER "F_MODULATEUR_S" -AFTER UPDATE OR DELETE ON modulateur -BEGIN - UNICAEN_TBL.CALCULER_DEMANDES; -END; \ No newline at end of file diff --git a/data/ddl/unique-constraint/EMPLOYEUR_SOURCE_UN.php b/data/ddl/unique-constraint/EMPLOYEUR_SOURCE_UN.php index 123c054d49d59f58fbca78385f503d3f6cd86625..c48a511f645acafa88e7ddb23dcc7b222e2a8954 100644 --- a/data/ddl/unique-constraint/EMPLOYEUR_SOURCE_UN.php +++ b/data/ddl/unique-constraint/EMPLOYEUR_SOURCE_UN.php @@ -5,7 +5,7 @@ return [ 'name' => 'EMPLOYEUR_SOURCE_UN', 'table' => 'EMPLOYEUR', - 'index' => 'EMPLOYEUR_SOURCE_UN', + 'index' => NULL, 'columns' => [ 'SOURCE_CODE', 'HISTO_DESTRUCTION', diff --git a/data/ddl/unique-constraint/TAUX_REMU_VALEUR_UN.php b/data/ddl/unique-constraint/TAUX_REMU_VALEUR_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..6973846ff64c7443d36dc1f8f3f83f4b06bb1088 --- /dev/null +++ b/data/ddl/unique-constraint/TAUX_REMU_VALEUR_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TAUX_REMU_VALEUR_UN', + 'table' => 'TAUX_REMU_VALEUR', + 'index' => 'TAUX_REMU_VALEUR_UN', + 'columns' => [ + 'DATE_EFFET', + 'TAUX_REMU_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/unique-constraint/TBL_MISSION_UN.php b/data/ddl/unique-constraint/TBL_MISSION_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..ec09910ddf7847708c9d709ef2b0513446d60a8a --- /dev/null +++ b/data/ddl/unique-constraint/TBL_MISSION_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TBL_MISSION_UN', + 'table' => 'TBL_MISSION', + 'index' => 'TBL_MISSION_UN', + 'columns' => [ + 'INTERVENANT_ID', + 'MISSION_ID', + ], +]; + +//@formatter:on diff --git a/data/ddl/unique-constraint/TI_STATUT_STATUT_UN.php b/data/ddl/unique-constraint/TI_STATUT_STATUT_UN.php index fab437119569bb8567d8bccabacf912f598e8ebc..8706c396c2ebfca21283118d9590c7509c69efbf 100644 --- a/data/ddl/unique-constraint/TI_STATUT_STATUT_UN.php +++ b/data/ddl/unique-constraint/TI_STATUT_STATUT_UN.php @@ -9,6 +9,7 @@ return [ 'columns' => [ 'TYPE_INTERVENTION_ID', 'STATUT_ID', + 'HISTO_DESTRUCTION', ], ]; diff --git a/data/ddl/unique-constraint/TR_CODE_UN.php b/data/ddl/unique-constraint/TR_CODE_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..c8efbad7ed9a53fc1ce4693b077ddf3ab2a4960a --- /dev/null +++ b/data/ddl/unique-constraint/TR_CODE_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TR_CODE_UN', + 'table' => 'TAUX_REMU', + 'index' => 'TR_CODE_UN', + 'columns' => [ + 'CODE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/unique-constraint/TR_LIB_UN.php b/data/ddl/unique-constraint/TR_LIB_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..58681556f1172ea9e1a6d1b28918bb3c5981c650 --- /dev/null +++ b/data/ddl/unique-constraint/TR_LIB_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TR_LIB_UN', + 'table' => 'TAUX_REMU', + 'index' => 'TR_LIB_UN', + 'columns' => [ + 'LIBELLE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/unique-constraint/TYPE_INTERVENTION_CODE_UN.php b/data/ddl/unique-constraint/TYPE_INTERVENTION_CODE_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..51338c947f565143cbad2e516686a4be886bc337 --- /dev/null +++ b/data/ddl/unique-constraint/TYPE_INTERVENTION_CODE_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_INTERVENTION_CODE_UN', + 'table' => 'TYPE_INTERVENTION', + 'index' => 'TYPE_INTERVENTION_CODE_UN', + 'columns' => [ + 'CODE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/unique-constraint/TYPE_MISSION_UN.php b/data/ddl/unique-constraint/TYPE_MISSION_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..182f6241d9f01d9d3ca78b340d451cb64ae0a808 --- /dev/null +++ b/data/ddl/unique-constraint/TYPE_MISSION_UN.php @@ -0,0 +1,16 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'TYPE_MISSION_UN', + 'table' => 'TYPE_MISSION', + 'index' => 'TYPE_MISSION_UN', + 'columns' => [ + 'CODE', + 'ANNEE_ID', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/unique-constraint/VOLUME_HORAIRE_MISSI_SOURCE_UN.php b/data/ddl/unique-constraint/VOLUME_HORAIRE_MISSI_SOURCE_UN.php new file mode 100644 index 0000000000000000000000000000000000000000..9385ff0cd1ffe93205308584b18943c8899f35c7 --- /dev/null +++ b/data/ddl/unique-constraint/VOLUME_HORAIRE_MISSI_SOURCE_UN.php @@ -0,0 +1,15 @@ +<?php + +//@formatter:off + +return [ + 'name' => 'VOLUME_HORAIRE_MISSI_SOURCE_UN', + 'table' => 'VOLUME_HORAIRE_MISSION', + 'index' => 'VOLUME_HORAIRE_MISSI_SOURCE_UN', + 'columns' => [ + 'SOURCE_CODE', + 'HISTO_DESTRUCTION', + ], +]; + +//@formatter:on diff --git a/data/ddl/view/V_CONTRAT_MAIN.sql b/data/ddl/view/V_CONTRAT_MAIN.sql index bbeed5f1a8f3dd2106a4669b5a35999a6b2cffc6..6d7e0ed6fd135edfa1fcca230c12e51cf2d2d924 100644 --- a/data/ddl/view/V_CONTRAT_MAIN.sql +++ b/data/ddl/view/V_CONTRAT_MAIN.sql @@ -77,8 +77,8 @@ FROM (SELECT c.*, COALESCE(d.numero_insee, i.numero_insee) "numInsee", si.libelle "statut", REPLACE(ltrim(to_char(COALESCE(c.total_hetd, fr.total, 0), '999999.00')), '.', ',') "totalHETD", - REPLACE(ltrim(to_char(COALESCE(th.valeur, 0), '999999.00')), '.', ',') "tauxHoraireValeur", - COALESCE(to_char(th.histo_modification, 'dd/mm/YYYY'), 'TAUX INTROUVABLE') "tauxHoraireDate", + REPLACE(ltrim(to_char(COALESCE(OSE_PAIEMENT.get_taux_horaire(COALESCE(si.taux_remu_id,tr.id), a.date_debut), 0), '999999.00')), '.', ',') "tauxHoraireValeur", + COALESCE(to_char(OSE_PAIEMENT.get_taux_horaire_date(COALESCE(si.taux_remu_id,tr.id), a.date_debut), 'dd/mm/YYYY'), 'TAUX INTROUVABLE') "tauxHoraireDate", to_char(COALESCE(v.histo_creation, a.date_debut), 'dd/mm/YYYY') "dateSignature", CASE WHEN c.structure_id <> COALESCE(cp.structure_id, 0) THEN 'modifié' @@ -118,7 +118,7 @@ FROM (SELECT c.*, JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' JOIN etat_volume_horaire evh ON evh.code = 'valide' LEFT JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.type_volume_horaire_id = tvh.id AND fr.etat_volume_horaire_id = evh.id - LEFT JOIN taux_horaire_hetd th ON th.valeur = OSE_FORMULE.GET_TAUX_HORAIRE_HETD(a.date_debut) + LEFT JOIN taux_remu tr ON tr.code = OSE_PAIEMENT.get_code_taux_remu_legal() LEFT JOIN hs ON hs.contrat_id = c.id LEFT JOIN contrat cp ON cp.id = c.contrat_id WHERE diff --git a/data/ddl/view/V_ETAT_PAIEMENT.sql b/data/ddl/view/V_ETAT_PAIEMENT.sql index 1f8bd9f685207023bd74d021258c8a88bf831d67..639d8459dad299c08c8c25825e64f15664ee9f5e 100644 --- a/data/ddl/view/V_ETAT_PAIEMENT.sql +++ b/data/ddl/view/V_ETAT_PAIEMENT.sql @@ -2,6 +2,7 @@ CREATE OR REPLACE FORCE VIEW V_ETAT_PAIEMENT AS SELECT annee_id, type_intervenant_id, + statut_id, structure_id, periode_id, intervenant_id, @@ -14,6 +15,7 @@ SELECT date_mise_en_paiement, periode, statut, + statut_libelle, intervenant_code, intervenant_nom, intervenant_numero_insee, @@ -47,6 +49,7 @@ SELECT periode_id, structure_id, type_intervenant_id, + statut_id, intervenant_id, annee_id, centre_cout_id, @@ -56,6 +59,7 @@ SELECT date_mise_en_paiement, periode, statut, + statut_libelle, intervenant_code, intervenant_nom, intervenant_numero_insee, @@ -84,6 +88,7 @@ SELECT p.id periode_id, s.id structure_id, i.id intervenant_id, + si.id statut_id, i.annee_id annee_id, cc.id centre_cout_id, df.id domaine_fonctionnel_id, @@ -97,6 +102,7 @@ SELECT mep.date_mise_en_paiement date_mise_en_paiement, s.libelle_court composante, ti.libelle statut, + si.libelle statut_libelle, i.source_code intervenant_code, i.nom_usuel || ' ' || i.prenom intervenant_nom, i.numero_insee intervenant_numero_insee, @@ -110,7 +116,15 @@ SELECT mis.heures_ac exercice_ac, --CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END * 4 / 10 exercice_aa, --CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END * 6 / 10 exercice_ac, - OSE_FORMULE.GET_TAUX_HORAIRE_HETD( NVL(mep.date_mise_en_paiement,SYSDATE) ) taux_horaire + OSE_PAIEMENT.GET_TAUX_HORAIRE( + COALESCE( + ep.taux_remu_id , + si.taux_remu_id , + tr.id), + NVL(mep.date_mise_en_paiement,SYSDATE) + ) taux_horaire + --OSE_FORMULE.GET_TAUX_HORAIRE_HETD( NVL(mep.date_mise_en_paiement,SYSDATE) ) taux_horaire + FROM tbl_paiement mis JOIN mise_en_paiement mep ON mep.id = mis.mise_en_paiement_id AND mep.histo_destruction IS NULL @@ -124,11 +138,15 @@ SELECT LEFT JOIN validation v ON v.id = mep.validation_id AND v.histo_destruction IS NULL LEFT JOIN domaine_fonctionnel df ON df.id = mis.domaine_fonctionnel_id LEFT JOIN periode p ON p.id = mep.periode_paiement_id + LEFT JOIN service se ON mis.service_id = se.id + LEFT JOIN element_pedagogique ep ON ep.id = se.element_pedagogique_id + LEFT JOIN taux_remu tr ON tr.code = OSE_PAIEMENT.get_code_taux_remu_legal() ) SELECT periode_id, structure_id, type_intervenant_id, + statut_id, intervenant_id, annee_id, centre_cout_id, @@ -138,6 +156,7 @@ SELECT composante, date_mise_en_paiement, statut, + statut_libelle, intervenant_code, intervenant_nom, intervenant_numero_insee, @@ -156,6 +175,7 @@ SELECT periode_id, structure_id, type_intervenant_id, + statut_id, intervenant_id, annee_id, centre_cout_id, @@ -165,6 +185,7 @@ SELECT composante, date_mise_en_paiement, statut, + statut_libelle, intervenant_code, intervenant_nom, intervenant_numero_insee, @@ -183,6 +204,7 @@ SELECT ORDER BY annee_id, type_intervenant_id, + statut_id, structure_id, periode_id, intervenant_nom \ No newline at end of file diff --git a/data/ddl/view/V_EXPORT_DMEP.sql b/data/ddl/view/V_EXPORT_DMEP.sql index 36fe98e6246019309dea45dce8f7b2e799b540af..2e06ec5b67e72a716a04abc77eb8dc13d578ad5b 100644 --- a/data/ddl/view/V_EXPORT_DMEP.sql +++ b/data/ddl/view/V_EXPORT_DMEP.sql @@ -1,5 +1,4 @@ -CREATE -OR REPLACE FORCE VIEW V_EXPORT_DMEP AS +CREATE OR REPLACE FORCE VIEW V_EXPORT_DMEP AS WITH mep AS ( SELECT frs.service_id, diff --git a/data/ddl/view/V_EXPORT_PAIEMENT_SIHAM.sql b/data/ddl/view/V_EXPORT_PAIEMENT_SIHAM.sql index d2a8e8731ca15cf555cc079bf3c41db29d8ae5fe..eebebe67eac9db566e2ae9d0cb7a8478b6accb21 100644 --- a/data/ddl/view/V_EXPORT_PAIEMENT_SIHAM.sql +++ b/data/ddl/view/V_EXPORT_PAIEMENT_SIHAM.sql @@ -3,23 +3,24 @@ SELECT annee_id, type_intervenant_id, structure_id, periode_id, - 'P' TYPE, - code_rh matricule, - CASE WHEN type_intervenant_code = 'P' THEN '200204' ELSE '202251' END retenue, - ose_paiement.get_format_mois_du() du_mois, - '20' || ose_paiement.get_annee_extraction_paie() annee_de_paye, - ose_paiement.get_mois_extraction_paie() mois_de_paye, - 'N' tg_specifique, - 'A definir' dossier_de_paye, + 'P' type, + code_rh matricule, + CASE WHEN type_intervenant_code = 'P' THEN '0204' ELSE '1578' END code_indemnite_retenu, + ose_paiement.get_format_mois_du() du_mois, + '20' || ose_paiement.get_annee_extraction_paie() annee_de_paye, + ose_paiement.get_mois_extraction_paie() mois_de_paye, + '01' numero_de_remise, + 'N' tg_specifique, + 'A definir' dossier_de_paye, '01/' || ose_paiement.get_mois_extraction_paie() || '/20' || - ose_paiement.get_annee_extraction_paie() date_pecuniaire, - nbu nombre_d_unites, - montant montant, + ose_paiement.get_annee_extraction_paie() date_pecuniaire, + nbu nombre_d_unites, + montant montant, 'DN ' || type_intervenant_code || ' ' || substr(UPPER(structure_libelle), 0, 10) - || ' ' || annee_libelle libelle, - 'B' mode_de_calcul, - code_origine code_origine + || ' ' || annee_libelle libelle, + 'B' mode_de_calcul, + code_origine code_origine FROM (SELECT i.annee_id annee_id, a.libelle annee_libelle, ti.id type_intervenant_id, @@ -37,9 +38,9 @@ FROM (SELECT i.annee_id END insee, i.nom_usuel || ',' || i.prenom nom, t2.code_origine code_origine, - CASE WHEN ind <> CEIL(t2.nbu / max_nbu) THEN max_nbu ELSE t2.nbu - max_nbu * (ind - 1) END nbu, + CASE WHEN ind <> ceil(t2.nbu / max_nbu) THEN max_nbu ELSE t2.nbu - max_nbu * (ind - 1) END nbu, t2.nbu tnbu, - (SELECT taux_hetd FROM annee ann WHERE ann.id = i.annee_id) montant, + (SELECT taux_hetd FROM annee ann WHERE ann.id = i.annee_id) montant, COALESCE(t2.unite_budgetaire, '') || ' ' || to_char(i.annee_id) || ' ' || to_char(i.annee_id + 1) libelle FROM (SELECT structure_id, periode_paiement_id, @@ -97,11 +98,11 @@ FROM (SELECT i.annee_id unite_budgetaire, date_mise_en_paiement) t2 JOIN (SELECT level ind, 99 max_nbu FROM dual CONNECT BY 1=1 AND LEVEL <= 11) tnbu - ON CEIL(t2.nbu / max_nbu) >= ind + ON ceil(t2.nbu / max_nbu) >= ind JOIN intervenant i ON i.id = t2.intervenant_id JOIN annee a ON a.id = i.annee_id LEFT JOIN intervenant_dossier d ON i.id = d.intervenant_id AND d.histo_destruction IS NULL JOIN statut si ON si.id = i.statut_id JOIN type_intervenant ti ON ti.id = si.type_intervenant_id - JOIN STRUCTURE s ON s.id = i.structure_id) t3 + JOIN structure s ON s.id = i.structure_id) t3 ORDER BY annee_id, type_intervenant_id, structure_id, periode_id, nom, code_origine, nbu DESC \ No newline at end of file diff --git a/data/ddl/view/V_EXPORT_SERVICE.sql b/data/ddl/view/V_EXPORT_SERVICE.sql index a05ad24feb0ec1da8ca5be500d895325dd336708..0a1dbf0995d603e22eeed8bc9c0c525cb61004eb 100644 --- a/data/ddl/view/V_EXPORT_SERVICE.sql +++ b/data/ddl/view/V_EXPORT_SERVICE.sql @@ -14,13 +14,14 @@ WITH t AS ( SELECT vh.type_intervention_id type_intervention_id, NULL fonction_referentiel_id, NULL motif_non_paiement_id, - + NULL tag_id, s.description service_description, vh.heures heures, 0 heures_ref, 0 heures_non_payees, null motif_non_paiement, + NULL tag, frvh.service_fi service_fi, frvh.service_fa service_fa, frvh.service_fc service_fc, @@ -37,8 +38,8 @@ WITH t AS ( SELECT FROM formule_resultat_vh frvh JOIN formule_resultat fr ON fr.id = frvh.formule_resultat_id - JOIN volume_horaire vh ON vh.id = frvh.volume_horaire_id AND vh.motif_non_paiement_id IS NULL AND vh.histo_destruction IS NULL - JOIN service s ON s.id = vh.service_id AND s.intervenant_id = fr.intervenant_id AND s.histo_destruction IS NULL + JOIN volume_horaire vh ON vh.id = frvh.volume_horaire_id AND vh.motif_non_paiement_id IS NULL AND vh.tag_id IS NULL AND vh.histo_destruction IS NULL + JOIN service s ON s.id = vh.service_id AND s.intervenant_id = fr.intervenant_id AND s.histo_destruction IS NULL UNION ALL @@ -57,13 +58,14 @@ SELECT vh.type_intervention_id type_intervention_id, NULL fonction_referentiel_id, mnp.id motif_non_paiement_id, - + NULL tag_id, s.description service_description, vh.heures heures, 0 heures_ref, 1 heures_non_payees, mnp.libelle_court motif_non_paiement, + NULL tag, 0 service_fi, 0 service_fa, 0 service_fc, @@ -86,6 +88,52 @@ FROM WHERE vh.histo_destruction IS NULL AND s.histo_destruction IS NULL + AND vh.tag_id IS NULL + +UNION ALL + +SELECT 'vh_' || vh.id id, + s.id service_id, + NULL service_referentiel_id, + s.intervenant_id intervenant_id, + vh.type_volume_horaire_id type_volume_horaire_id, + vhe.etat_volume_horaire_id etat_volume_horaire_id, + s.element_pedagogique_id element_pedagogique_id, + s.etablissement_id etablissement_id, + NULL structure_aff_id, + NULL structure_ens_id, + vh.periode_id periode_id, + vh.type_intervention_id type_intervention_id, + NULL fonction_referentiel_id, + NULL motif_non_paiement_id, + tag.id tag_id, + s.description service_description, + vh.heures heures, + 0 heures_ref, + 1 heures_non_payees, + NULL motif_non_paiement, + tag.libelle_court tag, + 0 service_fi, + 0 service_fa, + 0 service_fc, + 0 service_referentiel, + 0 heures_compl_fi, + 0 heures_compl_fa, + 0 heures_compl_fc, + 0 heures_compl_fc_majorees, + 0 heures_compl_referentiel, + 0 total, + COALESCE(fr.solde, 0) solde, + NULL service_ref_formation, + NULL commentaires + FROM volume_horaire vh + JOIN service s ON s.id = vh.service_id + JOIN v_vol_horaire_etat_multi vhe ON vhe.volume_horaire_id = vh.id + JOIN tag ON tag.id = vh.tag_id + LEFT JOIN formule_resultat fr ON fr.intervenant_id = s.intervenant_id AND fr.type_volume_horaire_id = vh.type_volume_horaire_id AND fr.etat_volume_horaire_id = vhe.etat_volume_horaire_id + WHERE vh.histo_destruction IS NULL + AND s.histo_destruction IS NULL + AND vh.motif_non_paiement_id IS NULL UNION ALL @@ -103,14 +151,16 @@ SELECT NULL periode_id, NULL type_intervention_id, sr.fonction_id fonction_referentiel_id, - NULL motif_non_paiement_id, + mnp.id motif_non_paiement_id, + t.id tag_id, NULL service_description, 0 heures, vhr.heures heures_ref, 0 heures_non_payees, - null motif_non_paiement, + mnp.libelle_court motif_non_paiement, + t.libelle_court tag, 0 service_fi, 0 service_fa, 0 service_fc, @@ -129,6 +179,8 @@ FROM JOIN formule_resultat fr ON fr.id = frvr.formule_resultat_id JOIN volume_horaire_ref vhr ON vhr.id = frvr.volume_horaire_ref_id AND vhr.histo_destruction IS NULL JOIN service_referentiel sr ON sr.id = vhr.service_referentiel_id AND sr.intervenant_id = fr.intervenant_id AND sr.histo_destruction IS NULL + LEFT JOIN motif_non_paiement mnp ON mnp.id = sr.motif_non_paiement_id + LEFT JOIN tag t ON t.id = sr.tag_id UNION ALL @@ -147,13 +199,14 @@ SELECT NULL type_intervention_id, NULL fonction_referentiel_id, NULL motif_non_paiement_id, - + NULL tag_id, NULL service_description, 0 heures, 0 heures_ref, 0 heures_non_payees, - null motif_non_paiement, + NULL motif_non_paiement, + NULL tag, 0 service_fi, 0 service_fa, 0 service_fc, @@ -164,7 +217,7 @@ SELECT 0 heures_compl_fc_majorees, NULL heures_compl_referentiel, 0 total, - 0 solde, + si.service_statutaire + SUM(msd.heures * mms.multiplicateur) solde, NULL service_ref_formation, NULL commentaires FROM @@ -172,16 +225,15 @@ FROM JOIN statut si ON si.id = i.statut_id JOIN etat_volume_horaire evh ON evh.code IN ('saisi','valide') JOIN type_volume_horaire tvh ON tvh.code IN ('PREVU','REALISE') - LEFT JOIN modification_service_du msd ON msd.intervenant_id = i.id AND msd.histo_destruction IS NULL - LEFT JOIN motif_modification_service mms ON mms.id = msd.motif_id + JOIN modification_service_du msd ON msd.intervenant_id = i.id AND msd.histo_destruction IS NULL + JOIN motif_modification_service mms ON mms.id = msd.motif_id + LEFT JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.type_volume_horaire_id = tvh.id AND fr.etat_volume_horaire_id = evh.id WHERE i.histo_destruction IS NULL - AND si.service_statutaire > 0 + AND COALESCE(fr.total,0) = 0 + AND msd.heures <> 0 GROUP BY i.id, si.service_statutaire, evh.id, tvh.id -HAVING - si.service_statutaire + SUM(msd.heures * mms.multiplicateur) = 0 - ), ponds AS ( SELECT @@ -224,7 +276,7 @@ SELECT di.id intervenant_discipline_id, de.id element_discipline_id, t.motif_non_paiement_id motif_non_paiement_id, - + t.tag_id tag_id, tvh.libelle || ' ' || evh.libelle type_etat, his.histo_modification service_date_modification, @@ -266,6 +318,7 @@ SELECT t.heures_ref heures_ref, t.heures_non_payees heures_non_payees, t.motif_non_paiement motif_non_paiement, + t.tag tag, si.service_statutaire service_statutaire, fi.heures_service_modifie service_du_modifie, t.service_fi service_fi, diff --git a/data/ddl/view/V_FORMULE_VOLUME_HORAIRE.sql b/data/ddl/view/V_FORMULE_VOLUME_HORAIRE.sql index 93995044551befc7ee092b6e5401297729d83c3f..712f8591c042c833dd38e6c8aa4b3cce2f166be7 100644 --- a/data/ddl/view/V_FORMULE_VOLUME_HORAIRE.sql +++ b/data/ddl/view/V_FORMULE_VOLUME_HORAIRE.sql @@ -23,6 +23,7 @@ SELECT t.PONDERATION_SERVICE_COMPL, t.SERVICE_STATUTAIRE, t.HEURES, + t.PERIODE_ID, t.HORAIRE_DEBUT, t.HORAIRE_FIN, t.TYPE_INTERVENTION_CODE, @@ -54,6 +55,7 @@ SELECT COALESCE(tf.service_statutaire,1) service_statutaire, vh.heures heures, + vh.periode_id periode_id, vh.horaire_debut horaire_debut, vh.horaire_fin horaire_fin, ti.code type_intervention_code, @@ -129,6 +131,7 @@ SELECT COALESCE(fr.service_statutaire,1) service_statutaire, vhr.heures heures, + null periode_id, vhr.horaire_debut horaire_debut, vhr.horaire_fin horaire_fin, null type_intervention_code, @@ -148,6 +151,7 @@ WHERE vhr.histo_destruction IS NULL AND sr.histo_destruction IS NULL AND vhr.heures <> 0 + AND sr.motif_non_paiement_id IS NULL AND sr.intervenant_id = COALESCE( OSE_FORMULE.GET_INTERVENANT_ID, sr.intervenant_id ) ORDER BY diff --git a/data/ddl/view/V_IMPORT_DEPUIS_DOSSIERS.sql b/data/ddl/view/V_IMPORT_DEPUIS_DOSSIERS.sql index a4198ea3a4d1f943c7e216688185d2fae251df48..5ea6f92c24ade115fbf3541bda639e1ab0964e15 100644 --- a/data/ddl/view/V_IMPORT_DEPUIS_DOSSIERS.sql +++ b/data/ddl/view/V_IMPORT_DEPUIS_DOSSIERS.sql @@ -101,4 +101,4 @@ FROM GROUP BY i.annee_id, i.code ) t - JOIN statut si ON si.ordre = t.z_statut_ordre \ No newline at end of file + JOIN statut si ON si.ordre = t.z_statut_ordre AND si.annee_id = t.annee_id \ No newline at end of file diff --git a/data/ddl/view/V_INDICATEUR_420.sql b/data/ddl/view/V_INDICATEUR_420.sql index 40ca8fb8127f634b4467e5b8042b6036a05e42d8..e94273b5352cafdccf12eacd89a93eeb7a9e636c 100644 --- a/data/ddl/view/V_INDICATEUR_420.sql +++ b/data/ddl/view/V_INDICATEUR_420.sql @@ -1,18 +1,20 @@ CREATE OR REPLACE FORCE VIEW V_INDICATEUR_420 AS SELECT DISTINCT w.intervenant_id, - w.structure_id -FROM - tbl_workflow w + CASE + WHEN w.structure_id IS NOT NULL + THEN w.structure_id + ELSE i.structure_id + END structure_id + FROM tbl_workflow w JOIN intervenant i ON w.intervenant_id = i.id JOIN statut si ON si.id = i.statut_id - LEFT JOIN contrat c ON c.intervenant_id = w.intervenant_id + LEFT JOIN contrat c ON c.intervenant_id = w.intervenant_id AND c.histo_destruction IS NULL WHERE w.atteignable = 1 AND w.etape_code = 'CONTRAT' AND w.objectif > 0 AND w.realisation = 0 - AND c.histo_destruction IS NULL AND i.histo_destruction IS NULL AND si.histo_destruction IS NULL AND c.id IS NULL diff --git a/data/ddl/view/V_INDICATEUR_430.sql b/data/ddl/view/V_INDICATEUR_430.sql index 8bd76c170996414fa18bca68f2363a6ee9530ac3..c660c781312ab9555644883f845deab94943d37f 100644 --- a/data/ddl/view/V_INDICATEUR_430.sql +++ b/data/ddl/view/V_INDICATEUR_430.sql @@ -1,7 +1,11 @@ CREATE OR REPLACE FORCE VIEW V_INDICATEUR_430 AS SELECT w.intervenant_id, - w.structure_id + CASE + WHEN w.structure_id IS NOT NULL + THEN w.structure_id + ELSE i.structure_id + END structure_id FROM intervenant i JOIN tbl_workflow w ON w.intervenant_id = i.id @@ -15,7 +19,7 @@ FROM c.type_contrat_id = 1 --a déjà un contrat de type 'CONTRAT' AND c.histo_destruction IS NULL ) hc ON hc.intervenant_id = i.id - LEFT JOIN contrat c ON c.intervenant_id = i.id AND c.structure_id = w.structure_id AND c.histo_destruction IS NULL + LEFT JOIN contrat c ON c.intervenant_id = i.id AND (w.structure_id = c.structure_id OR w.structure_id is NULL) AND c.histo_destruction IS NULL WHERE w.atteignable = 1 AND w.etape_code = 'CONTRAT' diff --git a/data/ddl/view/V_INDICATEUR_440.sql b/data/ddl/view/V_INDICATEUR_440.sql index 90ac8d91e4cbdd4566118dd281d83e9152285142..0a36ad02744b32b1360130b19db26c731ed2bf2a 100644 --- a/data/ddl/view/V_INDICATEUR_440.sql +++ b/data/ddl/view/V_INDICATEUR_440.sql @@ -4,7 +4,7 @@ SELECT s.structure_id FROM tbl_service s - JOIN tbl_workflow w ON w.intervenant_id = s.intervenant_id AND w.structure_id = s.structure_id + JOIN tbl_workflow w ON w.intervenant_id = s.intervenant_id AND (w.structure_id = s.structure_id OR w.structure_id is NULL) WHERE s.type_intervenant_code = 'V' AND s.type_volume_horaire_code = 'PREVU' diff --git a/data/ddl/view/V_INDICATEUR_460.sql b/data/ddl/view/V_INDICATEUR_460.sql index 7925eb732c16ffe8c0e3c3d1b9fac88fbaf6db2a..802af42cda2823d7688f2141300e6ea719d62d18 100644 --- a/data/ddl/view/V_INDICATEUR_460.sql +++ b/data/ddl/view/V_INDICATEUR_460.sql @@ -4,7 +4,7 @@ SELECT DISTINCT c.structure_id FROM contrat c - JOIN tbl_workflow w ON w.intervenant_id = c.intervenant_id AND w.structure_id = c.structure_id AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 + JOIN tbl_workflow w ON w.intervenant_id = c.intervenant_id AND (w.structure_id = c.structure_id OR w.structure_id is NULL) AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 JOIN validation v ON v.id = c.validation_id AND v.histo_destruction IS NULL LEFT JOIN contrat_fichier cf ON cf.contrat_id = c.id LEFT JOIN fichier f ON f.id = cf.fichier_id AND f.histo_destruction IS NULL diff --git a/data/ddl/view/V_INDICATEUR_470.sql b/data/ddl/view/V_INDICATEUR_470.sql index 3c2a05f392e371e05a67b34845583f72d93237a6..f134353fa6826706d57785791fc9392e0902ce50 100644 --- a/data/ddl/view/V_INDICATEUR_470.sql +++ b/data/ddl/view/V_INDICATEUR_470.sql @@ -4,7 +4,7 @@ SELECT DISTINCT c.structure_id FROM contrat c - JOIN tbl_workflow w ON w.intervenant_id = c.intervenant_id AND w.structure_id = c.structure_id AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 + JOIN tbl_workflow w ON w.intervenant_id = c.intervenant_id AND (w.structure_id = c.structure_id OR w.structure_id is NULL) AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 JOIN validation v ON v.id = c.validation_id AND v.histo_destruction IS NULL LEFT JOIN contrat_fichier cf ON cf.contrat_id = c.id LEFT JOIN fichier f ON f.id = cf.fichier_id AND f.histo_destruction IS NULL diff --git a/data/ddl/view/V_INDICATEUR_480.sql b/data/ddl/view/V_INDICATEUR_480.sql index 30cf8be5ee39eaefaaf454c5a6a02ac1f4f5f5d8..9ce8a8403f82e36c875a6fbded941b2d241bdf87 100644 --- a/data/ddl/view/V_INDICATEUR_480.sql +++ b/data/ddl/view/V_INDICATEUR_480.sql @@ -4,7 +4,7 @@ SELECT DISTINCT c.structure_id FROM contrat c - JOIN tbl_workflow w ON w.intervenant_id = c.intervenant_id AND w.structure_id = c.structure_id AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 + JOIN tbl_workflow w ON w.intervenant_id = c.intervenant_id AND (w.structure_id = c.structure_id OR w.structure_id is NULL) AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 JOIN validation v ON v.id = c.validation_id AND v.histo_destruction IS NULL JOIN contrat_fichier cf ON cf.contrat_id = c.id JOIN fichier f ON f.id = cf.fichier_id AND f.histo_destruction IS NULL diff --git a/data/ddl/view/V_INDICATEUR_500.sql b/data/ddl/view/V_INDICATEUR_500.sql new file mode 100644 index 0000000000000000000000000000000000000000..21b48b96ab30a7577a00d5e1ffa002beda6e8a2b --- /dev/null +++ b/data/ddl/view/V_INDICATEUR_500.sql @@ -0,0 +1,24 @@ +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_500 AS +SELECT DISTINCT +i.id AS intervenant_id, +i.structure_id +FROM + intervenant i + JOIN V_FORMULE_INTERVENANT vfi ON vfi.intervenant_id = i.id + LEFT JOIN ( + SELECT ts.intervenant_id, SUM(ts.heures) heures + FROM tbl_service ts + WHERE ts.type_volume_horaire_code = 'PREVU' + GROUP BY ts.intervenant_id + ) ts ON ts.intervenant_id = i.id + LEFT JOIN ( + SELECT tr.intervenant_id, SUM(tr.heures) heures + FROM tbl_referentiel tr + WHERE tr.type_volume_horaire_code = 'PREVU' + GROUP BY tr.intervenant_id + ) tr ON tr.intervenant_id = i.id +WHERE + i.histo_destruction IS NULL + AND vfi.type_intervenant_code = 'P' + AND vfi.heures_service_statutaire + heures_service_modifie > 0 + AND COALESCE(ts.heures,0) + COALESCE(tr.heures,0) = 0 \ No newline at end of file diff --git a/data/ddl/view/V_INDICATEUR_505.sql b/data/ddl/view/V_INDICATEUR_505.sql new file mode 100644 index 0000000000000000000000000000000000000000..534ee4fcfb7da757fbdc18d82428330d0fe3f1a0 --- /dev/null +++ b/data/ddl/view/V_INDICATEUR_505.sql @@ -0,0 +1,24 @@ +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_505 AS +SELECT DISTINCT +i.id AS intervenant_id, +i.structure_id +FROM + intervenant i + JOIN V_FORMULE_INTERVENANT vfi ON vfi.intervenant_id = i.id + LEFT JOIN ( + SELECT ts.intervenant_id, SUM(ts.heures) heures + FROM tbl_service ts + WHERE ts.type_volume_horaire_code = 'REALISE' + GROUP BY ts.intervenant_id + ) ts ON ts.intervenant_id = i.id + LEFT JOIN ( + SELECT tr.intervenant_id, SUM(tr.heures) heures + FROM tbl_referentiel tr + WHERE tr.type_volume_horaire_code = 'REALISE' + GROUP BY tr.intervenant_id + ) tr ON tr.intervenant_id = i.id +WHERE + i.histo_destruction IS NULL + AND vfi.type_intervenant_code = 'P' + AND vfi.heures_service_statutaire + heures_service_modifie > 0 + AND COALESCE(ts.heures,0) + COALESCE(tr.heures,0) = 0 \ No newline at end of file diff --git a/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql b/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql index fb44b0d1d568fcf1a154c7c8a08d0648cdb14b86..08d29d34a9c013598355be12abf0983456cec77a 100644 --- a/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql +++ b/data/ddl/view/V_INTERVENANT_HISTORIQUE.sql @@ -1,5 +1,4 @@ -CREATE -OR REPLACE FORCE VIEW V_INTERVENANT_HISTORIQUE AS +CREATE OR REPLACE FORCE VIEW V_INTERVENANT_HISTORIQUE AS WITH historique AS ( --Initialisation des données personnelles SELECT d.intervenant_id intervenant_id, @@ -278,7 +277,6 @@ SELECT C.intervenant_id intervenant_id, 5 ordre FROM fichier f JOIN contrat_fichier cf ON cf.fichier_id = f.id AND histo_destruction IS NULL - JOIN fichier f ON f.id = cf.fichier_id AND f.histo_destruction IS NULL JOIN contrat C ON C.id = cf.contrat_id JOIN type_contrat tc ON tc.id = C.type_contrat_id JOIN STRUCTURE s ON s.id = C.structure_id @@ -345,6 +343,21 @@ FROM volume_horaire vh LEFT JOIN motif_non_paiement mnp ON mnp.id = vh.motif_non_paiement_id GROUP BY s.intervenant_id, ep.structure_id +UNION ALL + +--Cloture de service +SELECT i.id intervenant_id, + '6 - Services réalisés' categorie, + 'Clôture de service réalisé ' label, + MAX(v.histo_modification) histo_date, + MAX(v.histo_modificateur_id) KEEP (dense_rank FIRST ORDER BY v.histo_creation DESC) histo_createur_id, MAX(u.display_name) KEEP (dense_rank FIRST ORDER BY v.histo_creation DESC) histo_user, 'glyphicon glyphicon-calendar' icon, + 5 ordre +FROM validation v + JOIN intervenant i ON i.id = v.intervenant_id + JOIN utilisateur u ON u.id = v.histo_createur_id +WHERE v.histo_destruction IS null +GROUP BY i.id + UNION ALL --Mise en paiement SELECT diff --git a/data/ddl/view/V_TBL_MISSION.sql b/data/ddl/view/V_TBL_MISSION.sql new file mode 100644 index 0000000000000000000000000000000000000000..809f70a5521248c380e475216253d7a57d6c8c56 --- /dev/null +++ b/data/ddl/view/V_TBL_MISSION.sql @@ -0,0 +1,33 @@ +CREATE OR REPLACE FORCE VIEW V_TBL_MISSION AS +SELECT + i.annee_id annee_id, + i.id intervenant_id, + 1 actif, + m.id mission_id, + m.structure_id structure_id, + i.structure_id intervenant_structure_id, + CASE WHEN m.auto_validation = 1 OR vm.id IS NOT NULL THEN 1 ELSE 0 END valide, + COALESCE(SUM(vhm.heures),0) heures_realisees, + SUM(CASE WHEN vvhm.id IS NOT NULL OR vhm.auto_validation = 1 THEN vhm.heures ELSE 0 END) heures_validees +FROM + intervenant i + JOIN statut si ON si.id = i.statut_id + JOIN type_validation tvm ON tvm.code = 'MISSION' + JOIN type_validation tvvh ON tvvh.code = 'MISSION_REALISE' + LEFT JOIN mission m ON m.intervenant_id = i.id AND m.histo_destruction IS NULL + LEFT JOIN validation_mission vml ON vml.mission_id = m.id + LEFT JOIN validation vm ON vm.id = vml.validation_id AND vm.histo_destruction IS NULL + LEFT JOIN volume_horaire_mission vhm ON vhm.mission_id = m.id AND vhm.histo_destruction IS NULL + LEFT JOIN validation_vol_horaire_miss vvhml ON vvhml.volume_horaire_mission_id = vhm.id + LEFT JOIN validation vvhm ON vvhm.id = vvhml.validation_id AND vvhm.histo_destruction IS NULL +WHERE + i.histo_destruction IS NULL + AND si.mission = 1 +GROUP BY + i.annee_id, + i.id, + m.id, + m.structure_id, + i.structure_id, + m.auto_validation, + vm.id \ No newline at end of file diff --git a/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql b/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql index 5b9e9bd1c2b28136e053fac98809aa165acb1c9e..98a8215bd20915364863706d4106df5962716844 100644 --- a/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql +++ b/data/ddl/view/V_TBL_PIECE_JOINTE_DEMANDE.sql @@ -4,7 +4,8 @@ WITH i_h AS ( s.intervenant_id, SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NULL THEN vh.heures ELSE 0 END) heures, SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NOT NULL THEN vh.heures ELSE 0 END) heures_non_payables, - SUM(ep.taux_fc) fc + --SUM(ep.taux_fc) fc + SUM(CASE WHEN ep.taux_fc > 0 THEN vh.heures ELSE 0 END) fc FROM service s JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' @@ -31,49 +32,57 @@ hetd AS ( GROUP BY intervenant_id ) -SELECT - i.annee_id annee_id, - i.code code_intervenant, - i.id intervenant_id, - tpj.id type_piece_jointe_id, - MAX(COALESCE(i_h.heures, 0)) heures_pour_seuil, - MAX(tpjs.obligatoire) obligatoire, - MAX(COALESCE(hetd.total_hetd, 0)) heures_pour_seuil_hetd, - MIN(tpjs.duree_vie) duree_vie -FROM - intervenant i - LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id AND d.histo_destruction IS NULL - JOIN type_piece_jointe_statut tpjs ON tpjs.statut_id = i.statut_id AND tpjs.histo_destruction IS NULL AND i.annee_id = tpjs.annee_id - JOIN type_piece_jointe tpj ON tpj.id = tpjs.type_piece_jointe_id AND tpj.histo_destruction IS NULL - LEFT JOIN i_h ON i_h.intervenant_id = i.id - LEFT JOIN hetd ON hetd.intervenant_id = i.id -WHERE - i.histo_destruction IS NULL - /*@INTERVENANT_ID=i.id*/ - /*@ANNEE_ID=i.annee_id*/ +SELECT i.annee_id annee_id, + i.code code_intervenant, + i.id intervenant_id, + tpj.id type_piece_jointe_id, + MAX(COALESCE(i_h.heures, 0)) heures_pour_seuil, + MAX(tpjs.obligatoire) obligatoire, + MAX(COALESCE(hetd.total_hetd, 0)) heures_pour_seuil_hetd, + MIN(tpjs.duree_vie) duree_vie +FROM intervenant i + LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id AND d.histo_destruction IS NULL + JOIN type_piece_jointe_statut tpjs + ON tpjs.statut_id = i.statut_id AND tpjs.histo_destruction IS NULL AND i.annee_id = tpjs.annee_id + JOIN type_piece_jointe tpj ON tpj.id = tpjs.type_piece_jointe_id AND tpj.histo_destruction IS NULL + LEFT JOIN i_h ON i_h.intervenant_id = i.id + LEFT JOIN hetd ON hetd.intervenant_id = i.id +WHERE i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ -- Seuil heure soit en HETD soit en heure ou PJ obligatoire meme avec des heures non payables AND ( - COALESCE(tpjs.seuil_hetd, 0) = 0 - OR (COALESCE(tpjs.type_heure_hetd, 0) = 0 AND COALESCE(i_h.heures, 0) > COALESCE(tpjs.seuil_hetd, -1)) - OR (tpjs.type_heure_hetd = 1 AND COALESCE(hetd.total_hetd, 0) > COALESCE(tpjs.seuil_hetd, -1)) - OR (COALESCE(i_h.heures_non_payables, 0) > 0 AND tpjs.obligatoire_hnp = 1) - ) + COALESCE(tpjs.seuil_hetd, 0) = 0 + OR (COALESCE(tpjs.type_heure_hetd, 0) = 0 AND COALESCE(i_h.heures, 0) > COALESCE(tpjs.seuil_hetd, -1)) + OR (tpjs.type_heure_hetd = 1 AND COALESCE(hetd.total_hetd, 0) > COALESCE(tpjs.seuil_hetd, -1)) + OR (COALESCE(i_h.heures_non_payables, 0) > 0 AND tpjs.obligatoire_hnp = 1) + ) -- Le RIB n'est demandé QUE s'il est différent!! AND CASE - WHEN tpjs.changement_rib = 0 OR d.id IS NULL - THEN 1 - ELSE CASE WHEN - replace(i.bic, ' ', '') = replace(d.bic, ' ', '') - AND replace(i.iban, ' ', '') = replace(d.iban, ' ', '') - THEN 0 ELSE 1 END - END = 1 - + WHEN tpjs.changement_rib = 0 OR d.id IS NULL + THEN 1 + ELSE CASE + WHEN + replace(i.bic, ' ', '') = replace(d.bic, ' ', '') + AND replace(i.iban, ' ', '') = replace(d.iban, ' ', '') + THEN 0 + ELSE 1 END + END = 1 + -- Demandé uniquement si nationalité étrangère + AND CASE + WHEN tpjs.nationalite_etrangere = 0 OR d.id IS null + THEN 1 + ELSE CASE + WHEN + d.pays_nationalite_id = (SELECT MAX(id) FROM pays p WHERE libelle IN ('France','FRANCE') AND histo_destruction IS NULL GROUP BY id) + THEN 0 + ELSE 1 END + END = 1 -- Filtre FC AND (tpjs.fc = 0 OR i_h.fc > 0) -GROUP BY - i.annee_id, - i.id, - i.code, - tpj.id \ No newline at end of file +GROUP BY i.annee_id, + i.id, + i.code, + tpj.id \ No newline at end of file diff --git a/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql b/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql index e0a2d4a2fecbb165c0afae8da036c2c7e5e423e1..c4cb750c88f271a392c1adddd589ec428769aacc 100644 --- a/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql +++ b/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql @@ -15,33 +15,6 @@ SELECT CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( - SELECT - i.annee_id annee_id, - vh.type_volume_horaire_id type_volume_horaire_id, - i.id intervenant_id, - SUM(vh.heures) heures - FROM - volume_horaire vh - JOIN service s ON s.id = vh.service_id - JOIN intervenant i ON i.id = s.intervenant_id - JOIN statut si ON si.id = i.statut_id - WHERE - vh.histo_destruction IS NULL - AND i.histo_destruction IS NULL - AND vh.motif_non_paiement_id IS NULL - AND si.code IN ('IMP') - GROUP BY - i.annee_id, - vh.type_volume_horaire_id, - i.id, - i.statut_id - HAVING - SUM(vh.heures) >= 0 - ) p - - UNION ALL - SELECT 1 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT i.annee_id annee_id, @@ -72,6 +45,24 @@ FROM UNION ALL + SELECT 3 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.heures_compl_fc_majorees * a.taux_hetd heures + /*ROUND( (COALESCE(si.plafond_hc_remu_fc,0) - COALESCE(i.montant_indemnite_fc,0)) / a.taux_hetd, 2 ) plafond*/ + + FROM + intervenant i + JOIN annee a ON a.id = i.annee_id + JOIN statut si ON si.id = i.statut_id + JOIN etat_volume_horaire evh ON evh.code = 'saisi' + JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id + ) p + + UNION ALL + SELECT 4 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT i.annee_id annee_id, @@ -97,6 +88,33 @@ FROM UNION ALL + SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + vh.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + SUM(vh.heures) heures + FROM + volume_horaire vh + JOIN service s ON s.id = vh.service_id + JOIN intervenant i ON i.id = s.intervenant_id + JOIN statut si ON si.id = i.statut_id + WHERE + vh.histo_destruction IS NULL + AND i.histo_destruction IS NULL + AND vh.motif_non_paiement_id IS NULL + AND si.code IN ('IMP') + GROUP BY + i.annee_id, + vh.type_volume_horaire_id, + i.id, + i.statut_id + HAVING + SUM(vh.heures) >= 0 + ) p + + UNION ALL + SELECT 8 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT i.annee_id annee_id, @@ -109,24 +127,6 @@ FROM JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id JOIN statut si ON si.id = i.statut_id ) p - - UNION ALL - - SELECT 3 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( - SELECT - i.annee_id annee_id, - fr.type_volume_horaire_id type_volume_horaire_id, - i.id intervenant_id, - fr.heures_compl_fc_majorees heures - /*ROUND( (COALESCE(si.plafond_hc_remu_fc,0) - COALESCE(i.montant_indemnite_fc,0)) / a.taux_hetd, 2 ) plafond*/ - - FROM - intervenant i - JOIN annee a ON a.id = i.annee_id - JOIN statut si ON si.id = i.statut_id - JOIN etat_volume_horaire evh ON evh.code = 'saisi' - JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id - ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_statut ps ON ps.plafond_id = p.plafond_id AND ps.statut_id = i.statut_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL diff --git a/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql b/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql index 725f0afd3d2152db68e384f9c28f87332a6f7eeb..33d08c9f387d495ad17ee098fb423387878877f3 100644 --- a/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql +++ b/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql @@ -8,16 +8,12 @@ SELECT p.TYPE_INTERVENTION_ID, p.HEURES, COALESCE(p.PLAFOND,ps.heures,0) PLAFOND, - CASE - WHEN p.type_volume_horaire_id = 1 THEN ps.plafond_etat_prevu_id - WHEN p.type_volume_horaire_id = 2 THEN ps.plafond_etat_realise_id - ELSE COALESCE(p.plafond_etat_id,1) - END plafond_etat_id, + COALESCE(p.plafond_etat_id,1) plafond_etat_id, COALESCE(pd.heures, 0) derogation, CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT 5 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT 5 PLAFOND_ID, p.* FROM ( WITH c AS ( SELECT vhe.element_pedagogique_id, @@ -65,7 +61,8 @@ FROM s.element_pedagogique_id element_pedagogique_id, s.type_intervention_id type_intervention_id, s.heures heures, - COALESCE(c.heures * c.groupes,0) plafond + COALESCE(c.heures * c.groupes,0) plafond, + 2 plafond_etat_id FROM s JOIN type_intervention ti ON ti.id = s.type_intervention_id @@ -80,10 +77,7 @@ FROM LEFT JOIN plafond_statut ps ON 1 = 0 LEFT JOIN plafond_derogation pd ON pd.plafond_id = p.plafond_id AND pd.intervenant_id = p.intervenant_id AND pd.histo_destruction IS NULL WHERE - CASE - WHEN p.type_volume_horaire_id = 1 THEN ps.plafond_etat_prevu_id - WHEN p.type_volume_horaire_id = 2 THEN ps.plafond_etat_realise_id - END IS NOT NULL + 1=1 /*@PLAFOND_ID=p.PLAFOND_ID*/ /*@ANNEE_ID=p.ANNEE_ID*/ /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/ diff --git a/data/ddl_columns_pos.php b/data/ddl_columns_pos.php index 3b1134ac17799c578ec46b5b674d8c8a71240da3..ef1328782a34952fb516998fa5c0a50d1656492d 100644 --- a/data/ddl_columns_pos.php +++ b/data/ddl_columns_pos.php @@ -382,6 +382,7 @@ return [ 'HISTO_MODIFICATEUR_ID', 'HISTO_DESTRUCTION', 'HISTO_DESTRUCTEUR_ID', + 'TAUX_REMU_ID', ], 'ELEMENT_TAUX_REGIMES' => [ 'ID', @@ -1158,6 +1159,7 @@ return [ 'HISTO_MODIFICATEUR_ID', 'HISTO_DESTRUCTION', 'HISTO_DESTRUCTEUR_ID', + 'EFFECTIF_CALCULE', ], 'SCENARIO_NOEUD_SEUIL' => [ 'ID', @@ -1197,6 +1199,8 @@ return [ 'FORMATION', 'SOURCE_ID', 'SOURCE_CODE', + 'MOTIF_NON_PAIEMENT_ID', + 'TAG_ID', ], 'SEUIL_CHARGE' => [ 'ID', @@ -1301,6 +1305,11 @@ return [ 'REFERENTIEL_REALISE_VISU', 'CONTRAT_ETAT_SORTIE_ID', 'TAUX_CHARGES_TTC', + 'CONTRAT_GENERATION', + 'MISSION', + 'MISSION_REALISE_EDITION', + 'TAUX_REMU_ID', + 'DOSSIER_STATUT', ], 'STRUCTURE' => [ 'ID', @@ -1779,6 +1788,7 @@ return [ 'STATUT_ID', 'ANNEE_ID', 'NUM_REGLE', + 'NATIONALITE_ETRANGERE', ], 'TYPE_RESSOURCE' => [ 'ID', @@ -1875,6 +1885,7 @@ return [ 'AUTO_VALIDATION', 'HORAIRE_DEBUT', 'HORAIRE_FIN', + 'TAG_ID', ], 'VOLUME_HORAIRE_CHARGE' => [ 'ID', @@ -2113,6 +2124,157 @@ return [ 'HISTO_DESTRUCTION', 'HISTO_DESTRUCTEUR_ID', ], + 'TAUX_REMU' => [ + 'ID', + 'CODE', + 'LIBELLE', + 'HISTO_CREATEUR_ID', + 'HISTO_CREATION', + 'HISTO_DESTRUCTEUR_ID', + 'HISTO_DESTRUCTION', + 'HISTO_MODIFICATEUR_ID', + 'HISTO_MODIFICATION', + 'TAUX_REMU_ID', + ], + 'TAUX_REMU_VALEUR' => [ + 'ID', + 'TAUX_REMU_ID', + 'DATE_EFFET', + 'VALEUR', + ], + 'TYPE_MISSION' => [ + 'ID', + 'CODE', + 'LIBELLE', + 'ANNEE_ID', + 'HISTO_CREATION', + 'HISTO_CREATEUR_ID', + 'HISTO_MODIFICATION', + 'HISTO_MODIFICATEUR_ID', + 'HISTO_DESTRUCTION', + 'HISTO_DESTRUCTEUR_ID', + 'TAUX_REMU_ID', + ], + 'MISSION' => [ + 'ID', + 'INTERVENANT_ID', + 'TYPE_MISSION_ID', + 'DATE_DEBUT', + 'DATE_FIN', + 'DESCRIPTION', + 'HISTO_CREATION', + 'HISTO_CREATEUR_ID', + 'HISTO_MODIFICATION', + 'HISTO_MODIFICATEUR_ID', + 'HISTO_DESTRUCTION', + 'HISTO_DESTRUCTEUR_ID', + 'STRUCTURE_ID', + 'AUTO_VALIDATION', + 'TAUX_REMU_ID', + ], + 'MISSION_ETUDIANT' => [ + 'MISSION_ID', + 'INTERVENANT_ID', + ], + 'VALIDATION_VOL_HORAIRE_MISS' => [ + 'VALIDATION_ID', + 'VOLUME_HORAIRE_MISSION_ID', + ], + 'VOLUME_HORAIRE_MISSION' => [ + 'ID', + 'TYPE_VOLUME_HORAIRE_ID', + 'MISSION_ID', + 'HEURES', + 'CONTRAT_ID', + 'AUTO_VALIDATION', + 'HORAIRE_DEBUT', + 'HORAIRE_FIN', + 'NOCTURNE', + 'SOURCE_CODE', + 'SOURCE_ID', + 'HISTO_CREATION', + 'HISTO_CREATEUR_ID', + 'HISTO_MODIFICATION', + 'HISTO_MODIFICATEUR_ID', + 'HISTO_DESTRUCTION', + 'HISTO_DESTRUCTEUR_ID', + ], + 'VALIDATION_MISSION' => [ + 'VALIDATION_ID', + 'MISSION_ID', + ], + 'TBL_MISSION' => [ + 'ID', + 'ANNEE_ID', + 'INTERVENANT_ID', + 'ACTIF', + 'MISSION_ID', + 'STRUCTURE_ID', + 'INTERVENANT_STRUCTURE_ID', + 'VALIDE', + 'HEURES_REALISEES', + 'HEURES_VALIDEES', + ], + 'TAG' => [ + 'ID', + 'CODE', + 'LIBELLE_COURT', + 'LIBELLE_LONG', + 'HISTO_CREATION', + 'HISTO_CREATEUR_ID', + 'HISTO_MODIFICATION', + 'HISTO_MODIFICATEUR_ID', + 'HISTO_DESTRUCTION', + 'HISTO_DESTRUCTEUR_ID', + ], + 'MODELE_CONTRAT' => [ + 'ID', + 'LIBELLE', + 'STATUT_ID', + 'STRUCTURE_ID', + 'FICHIER', + 'REQUETE', + 'BLOC1_NOM', + 'BLOC1_ZONE', + 'BLOC1_REQUETE', + 'BLOC2_NOM', + 'BLOC2_ZONE', + 'BLOC2_REQUETE', + 'BLOC3_NOM', + 'BLOC3_ZONE', + 'BLOC3_REQUETE', + 'BLOC4_NOM', + 'BLOC4_ZONE', + 'BLOC4_REQUETE', + 'BLOC5_NOM', + 'BLOC5_ZONE', + 'BLOC5_REQUETE', + 'BLOC6_NOM', + 'BLOC6_ZONE', + 'BLOC6_REQUETE', + 'BLOC7_NOM', + 'BLOC7_ZONE', + 'BLOC7_REQUETE', + 'BLOC8_NOM', + 'BLOC8_ZONE', + 'BLOC8_REQUETE', + 'BLOC9_NOM', + 'BLOC9_ZONE', + 'BLOC9_REQUETE', + 'BLOC10_NOM', + 'BLOC10_ZONE', + 'BLOC10_REQUETE', + ], + 'SAVE_V17_STATUT' => [ + 'ANNEE_ID', + 'INTERVENANT_ID', + 'STATUT_CODE', + ], + 'TEST_INTERVENANT' => [ + 'INTERVENANT_ID', + 'STATUT_CODE', + 'STATUT_DOSSIER_CODE', + ], ]; //@formatter:on diff --git a/data/ddl_config.php b/data/ddl_config.php index af64c8dfe2d24ab396582956cc87aaf54e41c556..f67aeb3303e909909d35418806be4796542b0321 100644 --- a/data/ddl_config.php +++ b/data/ddl_config.php @@ -96,6 +96,8 @@ return [ 'F_STATUT_INTERVENANT_S', 'F_TYPE_INTERVENTION', 'F_TYPE_INTERVENTION_S', + 'F_MODULATEUR', + 'F_MODULATEUR_S', ], ], 'sequence' => [ diff --git a/data/donnees_par_defaut.php b/data/donnees_par_defaut.php index 9fb1a334d15882327f8a61df82ed5a62d801fdfe..946918ec5617688978bd4aae32d9cbff7af14762 100755 --- a/data/donnees_par_defaut.php +++ b/data/donnees_par_defaut.php @@ -67,12 +67,12 @@ return [ [ "LIBELLE_COURT" => "ADJ DASEN 1ER DEG.", "LIBELLE_LONG" => "ADJOINT AU DASEN CHARGE DU 1ER DEGRE", - "SOURCE_CODE" => "097/1", + "SOURCE_CODE" => "097", ], [ "LIBELLE_COURT" => "ADJ DASEN 1ER DEG.", "LIBELLE_LONG" => "ADJOINT AU DASEN CHARGE DU 1ER DEGRE", - "SOURCE_CODE" => "097", + "SOURCE_CODE" => "097/1", ], [ "LIBELLE_COURT" => "ADJ SGA", @@ -107,12 +107,12 @@ return [ [ "LIBELLE_COURT" => "ATEC", "LIBELLE_LONG" => "ADJOINT TECHNIQUE DES ETAB.ENS.", - "SOURCE_CODE" => "943", + "SOURCE_CODE" => "943/3", ], [ "LIBELLE_COURT" => "ATEC", "LIBELLE_LONG" => "ADJOINT TECHNIQUE DES ETAB.ENS.", - "SOURCE_CODE" => "943/3", + "SOURCE_CODE" => "943", ], [ "LIBELLE_COURT" => "AJT-R EPST", @@ -124,11 +124,6 @@ return [ "LIBELLE_LONG" => "ADMINISTRATEUR CIVIL", "SOURCE_CODE" => "203", ], - [ - "LIBELLE_COURT" => "ADM CIVIL", - "LIBELLE_LONG" => "ADMINISTRATEUR CIVIL", - "SOURCE_CODE" => "203/1", - ], [ "LIBELLE_COURT" => "ADMENESR", "LIBELLE_LONG" => "ADMINISTRATEUR EN ES ET RECHERCHE", @@ -140,9 +135,9 @@ return [ "SOURCE_CODE" => "030", ], [ - "LIBELLE_COURT" => "ADM. INSEE", - "LIBELLE_LONG" => "ADMINISTRATEUR INSEE", - "SOURCE_CODE" => "285", + "LIBELLE_COURT" => "ADMINISTRAT. ETAT", + "LIBELLE_LONG" => "ADMINISTRATEUR ETAT", + "SOURCE_CODE" => "228/1", ], [ "LIBELLE_COURT" => "ADM INSEE", @@ -150,9 +145,9 @@ return [ "SOURCE_CODE" => "285/1", ], [ - "LIBELLE_COURT" => "A CNRS", - "LIBELLE_LONG" => "ADMINISTRATIF CONTRACTUEL CNRS", - "SOURCE_CODE" => "842/1", + "LIBELLE_COURT" => "ADM. INSEE", + "LIBELLE_LONG" => "ADMINISTRATEUR INSEE", + "SOURCE_CODE" => "285", ], [ "LIBELLE_COURT" => "A CNRS", @@ -162,13 +157,18 @@ return [ [ "LIBELLE_COURT" => "A CNRS", "LIBELLE_LONG" => "ADMINISTRATIF CONTRACTUEL CNRS", - "SOURCE_CODE" => "842/2", + "SOURCE_CODE" => "842/1", ], [ "LIBELLE_COURT" => "A.CNRS", "LIBELLE_LONG" => "ADMINISTRATIF CONTRACTUEL CNRS", "SOURCE_CODE" => "842", ], + [ + "LIBELLE_COURT" => "A CNRS", + "LIBELLE_LONG" => "ADMINISTRATIF CONTRACTUEL CNRS", + "SOURCE_CODE" => "842/2", + ], [ "LIBELLE_COURT" => "AG A C", "LIBELLE_LONG" => "AGENT ADMINISTRATIF ADM CENTR", @@ -222,7 +222,7 @@ return [ [ "LIBELLE_COURT" => "C ADM", "LIBELLE_LONG" => "AGENT CONTRACTUEL ADMINISTRATIF", - "SOURCE_CODE" => "850/3", + "SOURCE_CODE" => "850/2", ], [ "LIBELLE_COURT" => "C.ADM.", @@ -232,27 +232,27 @@ return [ [ "LIBELLE_COURT" => "C ADM", "LIBELLE_LONG" => "AGENT CONTRACTUEL ADMINISTRATIF", - "SOURCE_CODE" => "850/2", + "SOURCE_CODE" => "850/3", ], [ - "LIBELLE_COURT" => "AG.CNRS", + "LIBELLE_COURT" => "AG CNRS", "LIBELLE_LONG" => "AGENT CONTRACTUEL CNRS", - "SOURCE_CODE" => "841", + "SOURCE_CODE" => "841/1", ], [ "LIBELLE_COURT" => "AG CNRS", "LIBELLE_LONG" => "AGENT CONTRACTUEL CNRS", - "SOURCE_CODE" => "841/2", + "SOURCE_CODE" => "841/3", ], [ - "LIBELLE_COURT" => "AG CNRS", + "LIBELLE_COURT" => "AG.CNRS", "LIBELLE_LONG" => "AGENT CONTRACTUEL CNRS", - "SOURCE_CODE" => "841/3", + "SOURCE_CODE" => "841", ], [ "LIBELLE_COURT" => "AG CNRS", "LIBELLE_LONG" => "AGENT CONTRACTUEL CNRS", - "SOURCE_CODE" => "841/1", + "SOURCE_CODE" => "841/2", ], [ "LIBELLE_COURT" => "AG.CONT.BI", @@ -320,14 +320,14 @@ return [ "SOURCE_CODE" => "962", ], [ - "LIBELLE_COURT" => "AG P SV TC", + "LIBELLE_COURT" => "AG.P.SV.TC", "LIBELLE_LONG" => "AGENT PRINCIPAL DES SERVICES TECHNIQUES", - "SOURCE_CODE" => "233/3", + "SOURCE_CODE" => "233", ], [ - "LIBELLE_COURT" => "AG.P.SV.TC", + "LIBELLE_COURT" => "AG P SV TC", "LIBELLE_LONG" => "AGENT PRINCIPAL DES SERVICES TECHNIQUES", - "SOURCE_CODE" => "233", + "SOURCE_CODE" => "233/3", ], [ "LIBELLE_COURT" => "AG SUP AC", @@ -345,14 +345,14 @@ return [ "SOURCE_CODE" => "871", ], [ - "LIBELLE_COURT" => "AG T LAB", + "LIBELLE_COURT" => "AG.T.LAB", "LIBELLE_LONG" => "AGENT TECHNIQUE DE LABORATOIRE", - "SOURCE_CODE" => "087/3", + "SOURCE_CODE" => "087", ], [ - "LIBELLE_COURT" => "AG.T.LAB", + "LIBELLE_COURT" => "AG T LAB", "LIBELLE_LONG" => "AGENT TECHNIQUE DE LABORATOIRE", - "SOURCE_CODE" => "087", + "SOURCE_CODE" => "087/3", ], [ "LIBELLE_COURT" => "AGTRF", @@ -400,14 +400,14 @@ return [ "SOURCE_CODE" => "085/3", ], [ - "LIBELLE_COURT" => "AIDE-PHYS D-36", + "LIBELLE_COURT" => "AIDE-PHYS. (ST 1936)", "LIBELLE_LONG" => "AIDE-PHYSICIEN (STATUT 1936)", - "SOURCE_CODE" => "339/1", + "SOURCE_CODE" => "339", ], [ - "LIBELLE_COURT" => "AIDE-PHYS. (ST 1936)", + "LIBELLE_COURT" => "AIDE-PHYS D-36", "LIBELLE_LONG" => "AIDE-PHYSICIEN (STATUT 1936)", - "SOURCE_CODE" => "339", + "SOURCE_CODE" => "339/1", ], [ "LIBELLE_COURT" => "ARCH.CONT.", @@ -427,12 +427,12 @@ return [ [ "LIBELLE_COURT" => "AS AGREGE", "LIBELLE_LONG" => "ASSISTANT AGREGE ET ASSIMILE", - "SOURCE_CODE" => "303/1", + "SOURCE_CODE" => "303", ], [ "LIBELLE_COURT" => "AS AGREGE", "LIBELLE_LONG" => "ASSISTANT AGREGE ET ASSIMILE", - "SOURCE_CODE" => "303", + "SOURCE_CODE" => "303/1", ], [ "LIBELLE_COURT" => "ASSIST OBS D-36", @@ -465,14 +465,14 @@ return [ "SOURCE_CODE" => "348", ], [ - "LIBELLE_COURT" => "ASSIST MED OU ODONTO", + "LIBELLE_COURT" => "ASSIST MED OU ODON", "LIBELLE_LONG" => "ASSISTANT DE MEDECINE OU D'ODONTOLOGIE", - "SOURCE_CODE" => "472", + "SOURCE_CODE" => "472/1", ], [ - "LIBELLE_COURT" => "ASSIST MED OU ODON", + "LIBELLE_COURT" => "ASSIST MED OU ODONTO", "LIBELLE_LONG" => "ASSISTANT DE MEDECINE OU D'ODONTOLOGIE", - "SOURCE_CODE" => "472/1", + "SOURCE_CODE" => "472", ], [ "LIBELLE_COURT" => "ASS DISC MED BIO M", @@ -537,12 +537,12 @@ return [ [ "LIBELLE_COURT" => "ASSAE", "LIBELLE_LONG" => "ASSISTANT SERVICE SOCIAL ADMIN DE L'ETAT", - "SOURCE_CODE" => "H09", + "SOURCE_CODE" => "H09/1", ], [ "LIBELLE_COURT" => "ASSAE", "LIBELLE_LONG" => "ASSISTANT SERVICE SOCIAL ADMIN DE L'ETAT", - "SOURCE_CODE" => "H09/1", + "SOURCE_CODE" => "H09", ], [ "LIBELLE_COURT" => "A.SOC.CONT", @@ -627,12 +627,12 @@ return [ [ "LIBELLE_COURT" => "AAE", "LIBELLE_LONG" => "ATTACHE D'ADMINISTRATION DE L'ETAT", - "SOURCE_CODE" => "051/1", + "SOURCE_CODE" => "051", ], [ "LIBELLE_COURT" => "AAE", "LIBELLE_LONG" => "ATTACHE D'ADMINISTRATION DE L'ETAT", - "SOURCE_CODE" => "051", + "SOURCE_CODE" => "051/1", ], [ "LIBELLE_COURT" => "AAR-R EPST", @@ -640,14 +640,14 @@ return [ "SOURCE_CODE" => "265", ], [ - "LIBELLE_COURT" => "ATT INSEE", + "LIBELLE_COURT" => "ATT. INSEE", "LIBELLE_LONG" => "ATTACHE INSEE", - "SOURCE_CODE" => "284/1", + "SOURCE_CODE" => "284", ], [ - "LIBELLE_COURT" => "ATT. INSEE", + "LIBELLE_COURT" => "ATT INSEE", "LIBELLE_LONG" => "ATTACHE INSEE", - "SOURCE_CODE" => "284", + "SOURCE_CODE" => "284/1", ], [ "LIBELLE_COURT" => "AUX.BUREAU", @@ -670,14 +670,14 @@ return [ "SOURCE_CODE" => "8HH/2", ], [ - "LIBELLE_COURT" => "BIBLIOTH.", + "LIBELLE_COURT" => "BIBLIOTHECAIRE", "LIBELLE_LONG" => "BIBLIOTHECAIRE", - "SOURCE_CODE" => "806", + "SOURCE_CODE" => "806/1", ], [ - "LIBELLE_COURT" => "BIBLIOTHECAIRE", + "LIBELLE_COURT" => "BIBLIOTH.", "LIBELLE_LONG" => "BIBLIOTHECAIRE", - "SOURCE_CODE" => "806/1", + "SOURCE_CODE" => "806", ], [ "LIBELLE_COURT" => "B ADJ -D-95", @@ -717,12 +717,12 @@ return [ [ "LIBELLE_COURT" => "CHARGE ENS", "LIBELLE_LONG" => "CHARGE D'ENSEIGNEMENT HORS EPS", - "SOURCE_CODE" => "562/1", + "SOURCE_CODE" => "562", ], [ "LIBELLE_COURT" => "CHARGE ENS", "LIBELLE_LONG" => "CHARGE D'ENSEIGNEMENT HORS EPS", - "SOURCE_CODE" => "562", + "SOURCE_CODE" => "562/1", ], [ "LIBELLE_COURT" => "CHARGE ET.DOC.", @@ -735,14 +735,14 @@ return [ "SOURCE_CODE" => "981", ], [ - "LIBELLE_COURT" => "CH.MIS.INS", + "LIBELLE_COURT" => "CH MIS INS", "LIBELLE_LONG" => "CHARGE DE MISSION INSEE", - "SOURCE_CODE" => "286", + "SOURCE_CODE" => "286/1", ], [ - "LIBELLE_COURT" => "CH MIS INS", + "LIBELLE_COURT" => "CH.MIS.INS", "LIBELLE_LONG" => "CHARGE DE MISSION INSEE", - "SOURCE_CODE" => "286/1", + "SOURCE_CODE" => "286", ], [ "LIBELLE_COURT" => "CR", @@ -807,12 +807,12 @@ return [ [ "LIBELLE_COURT" => "CDT ART", "LIBELLE_LONG" => "CHEF DE TRAVAUX D'ART", - "SOURCE_CODE" => "H08", + "SOURCE_CODE" => "H08/1", ], [ "LIBELLE_COURT" => "CDT ART", "LIBELLE_LONG" => "CHEF DE TRAVAUX D'ART", - "SOURCE_CODE" => "H08/1", + "SOURCE_CODE" => "H08", ], [ "LIBELLE_COURT" => "CDT-IHC", @@ -867,12 +867,12 @@ return [ [ "LIBELLE_COURT" => "CHEF TP ENSAM", "LIBELLE_LONG" => "CHEF TP ENSAM", - "SOURCE_CODE" => "366", + "SOURCE_CODE" => "366/1", ], [ "LIBELLE_COURT" => "CHEF TP ENSAM", "LIBELLE_LONG" => "CHEF TP ENSAM", - "SOURCE_CODE" => "366/1", + "SOURCE_CODE" => "366", ], [ "LIBELLE_COURT" => "CHEF TRAV UNIV-PU", @@ -884,6 +884,11 @@ return [ "LIBELLE_LONG" => "CHEF TR UNIV-PR HOSP", "SOURCE_CODE" => "313", ], + [ + "LIBELLE_COURT" => "COMMIS S E", + "LIBELLE_LONG" => "COMMIS DES SERVICES EXTERIEURS", + "SOURCE_CODE" => "910/3", + ], [ "LIBELLE_COURT" => "COND AUTO", "LIBELLE_LONG" => "CONDUCTEUR AUTO DES ADM DE L'ETAT", @@ -897,12 +902,12 @@ return [ [ "LIBELLE_COURT" => "CTSSAE", "LIBELLE_LONG" => "CONS TECH DE SERV SOC AE", - "SOURCE_CODE" => "H10", + "SOURCE_CODE" => "H10/1", ], [ "LIBELLE_COURT" => "CTSSAE", "LIBELLE_LONG" => "CONS TECH DE SERV SOC AE", - "SOURCE_CODE" => "H10/1", + "SOURCE_CODE" => "H10", ], [ "LIBELLE_COURT" => "C.E.", @@ -922,12 +927,12 @@ return [ [ "LIBELLE_COURT" => "CONSEILLER RECTEUR", "LIBELLE_LONG" => "CONSEILLER DE RECTEUR OU DE VICE RECTEUR", - "SOURCE_CODE" => "093/1", + "SOURCE_CODE" => "093", ], [ "LIBELLE_COURT" => "CONSEILLER RECTEUR", "LIBELLE_LONG" => "CONSEILLER DE RECTEUR OU DE VICE RECTEUR", - "SOURCE_CODE" => "093", + "SOURCE_CODE" => "093/1", ], [ "LIBELLE_COURT" => "CASAE", @@ -957,12 +962,12 @@ return [ [ "LIBELLE_COURT" => "CONSEIL TCH RECTEU", "LIBELLE_LONG" => "CONSEILLER TECH RECTEUR / V-RECTEUR EVS", - "SOURCE_CODE" => "096/1", + "SOURCE_CODE" => "096", ], [ "LIBELLE_COURT" => "CONSEIL TCH RECTEU", "LIBELLE_LONG" => "CONSEILLER TECH RECTEUR / V-RECTEUR EVS", - "SOURCE_CODE" => "096", + "SOURCE_CODE" => "096/1", ], [ "LIBELLE_COURT" => "CTP SUP CN", @@ -990,14 +995,14 @@ return [ "SOURCE_CODE" => "801", ], [ - "LIBELLE_COURT" => "CONS.GN.BI", + "LIBELLE_COURT" => "CONS GN BI", "LIBELLE_LONG" => "CONSERVATEUR GENERAL DES BIBLIOTHEQUES", - "SOURCE_CODE" => "800", + "SOURCE_CODE" => "800/1", ], [ - "LIBELLE_COURT" => "CONS GN BI", + "LIBELLE_COURT" => "CONS.GN.BI", "LIBELLE_LONG" => "CONSERVATEUR GENERAL DES BIBLIOTHEQUES", - "SOURCE_CODE" => "800/1", + "SOURCE_CODE" => "800", ], [ "LIBELLE_COURT" => "C STAG ELV", @@ -1067,12 +1072,12 @@ return [ [ "LIBELLE_COURT" => "CONS PATRIMOINE", "LIBELLE_LONG" => "Conservateur du patrimoine", - "SOURCE_CODE" => "AM1/1", + "SOURCE_CODE" => "AM1", ], [ "LIBELLE_COURT" => "CONS PATRIMOINE", "LIBELLE_LONG" => "Conservateur du patrimoine", - "SOURCE_CODE" => "AM1", + "SOURCE_CODE" => "AM1/1", ], [ "LIBELLE_COURT" => "CONS GENE PATRIMOINE", @@ -1137,12 +1142,12 @@ return [ [ "LIBELLE_COURT" => "DAASEN", "LIBELLE_LONG" => "DIRECTEUR ACADEMIQUE ADJ. SERVICES E-N.", - "SOURCE_CODE" => "094", + "SOURCE_CODE" => "094/1", ], [ "LIBELLE_COURT" => "DAASEN", "LIBELLE_LONG" => "DIRECTEUR ACADEMIQUE ADJ. SERVICES E-N.", - "SOURCE_CODE" => "094/1", + "SOURCE_CODE" => "094", ], [ "LIBELLE_COURT" => "DASEN", @@ -1242,12 +1247,12 @@ return [ [ "LIBELLE_COURT" => "DGS EPSCP", "LIBELLE_LONG" => "DIRECTEUR GENERAL DES SERVICES EPSCP", - "SOURCE_CODE" => "029/1", + "SOURCE_CODE" => "029", ], [ "LIBELLE_COURT" => "DGS EPSCP", "LIBELLE_LONG" => "DIRECTEUR GENERAL DES SERVICES EPSCP", - "SOURCE_CODE" => "029", + "SOURCE_CODE" => "029/1", ], [ "LIBELLE_COURT" => "ELEVE PROF", @@ -1324,26 +1329,26 @@ return [ "LIBELLE_LONG" => "Historique contractuel asu de cat D", "SOURCE_CODE" => "CA-D/D", ], - [ - "LIBELLE_COURT" => "Hist type CNRS cat A", - "LIBELLE_LONG" => "Historique contractuel type CNRS cat A", - "SOURCE_CODE" => "CC-A", - ], [ "LIBELLE_COURT" => "Hist typ CNRS catA", "LIBELLE_LONG" => "Historique contractuel type CNRS cat A", "SOURCE_CODE" => "CC-A/1", ], [ - "LIBELLE_COURT" => "Hist type CNRS cat B", - "LIBELLE_LONG" => "Historique contractuel type CNRS cat B", - "SOURCE_CODE" => "CC-B", + "LIBELLE_COURT" => "Hist type CNRS cat A", + "LIBELLE_LONG" => "Historique contractuel type CNRS cat A", + "SOURCE_CODE" => "CC-A", ], [ "LIBELLE_COURT" => "Hist typ CNRS catB", "LIBELLE_LONG" => "Historique contractuel type CNRS cat B", "SOURCE_CODE" => "CC-B/2", ], + [ + "LIBELLE_COURT" => "Hist type CNRS cat B", + "LIBELLE_LONG" => "Historique contractuel type CNRS cat B", + "SOURCE_CODE" => "CC-B", + ], [ "LIBELLE_COURT" => "Hist type CNRS cat C", "LIBELLE_LONG" => "Historique contractuel type CNRS cat C", @@ -1355,14 +1360,14 @@ return [ "SOURCE_CODE" => "CC-C/3", ], [ - "LIBELLE_COURT" => "Hist typ CNRS catD", + "LIBELLE_COURT" => "Hist type CNRS cat D", "LIBELLE_LONG" => "Historique contractuel type CNRS cat D", - "SOURCE_CODE" => "CC-D/D", + "SOURCE_CODE" => "CC-D", ], [ - "LIBELLE_COURT" => "Hist type CNRS cat D", + "LIBELLE_COURT" => "Hist typ CNRS catD", "LIBELLE_LONG" => "Historique contractuel type CNRS cat D", - "SOURCE_CODE" => "CC-D", + "SOURCE_CODE" => "CC-D/D", ], [ "LIBELLE_COURT" => "Hist ens 1deg catA", @@ -1375,14 +1380,14 @@ return [ "SOURCE_CODE" => "DC-A", ], [ - "LIBELLE_COURT" => "Hist ens 1 deg cat B", + "LIBELLE_COURT" => "Hist ens 1deg catB", "LIBELLE_LONG" => "Historique enseignant 1er degré de cat B", - "SOURCE_CODE" => "DC-B", + "SOURCE_CODE" => "DC-B/2", ], [ - "LIBELLE_COURT" => "Hist ens 1deg catB", + "LIBELLE_COURT" => "Hist ens 1 deg cat B", "LIBELLE_LONG" => "Historique enseignant 1er degré de cat B", - "SOURCE_CODE" => "DC-B/2", + "SOURCE_CODE" => "DC-B", ], [ "LIBELLE_COURT" => "Hist ens 2 deg cat A", @@ -1404,20 +1409,15 @@ return [ "LIBELLE_LONG" => "Historique enseignant 2nd degré de cat B", "SOURCE_CODE" => "DA-B", ], - [ - "LIBELLE_COURT" => "Hist ens HU cat A", - "LIBELLE_LONG" => "Historique enseignant HU de cat A", - "SOURCE_CODE" => "SB-A/1", - ], [ "LIBELLE_COURT" => "Hist ens HU de cat A", "LIBELLE_LONG" => "Historique enseignant HU de cat A", "SOURCE_CODE" => "SB-A", ], [ - "LIBELLE_COURT" => "Hist ens CSERDcatA", - "LIBELLE_LONG" => "Historique enseignant HU des CSERD cat A", - "SOURCE_CODE" => "SD-A/1", + "LIBELLE_COURT" => "Hist ens HU cat A", + "LIBELLE_LONG" => "Historique enseignant HU de cat A", + "SOURCE_CODE" => "SB-A/1", ], [ "LIBELLE_COURT" => "Hist ens HUCSERDcatA", @@ -1425,15 +1425,20 @@ return [ "SOURCE_CODE" => "SD-A", ], [ - "LIBELLE_COURT" => "Hist pers EC cat A", - "LIBELLE_LONG" => "Historique enseignant chercheur de cat A", - "SOURCE_CODE" => "SA-A/1", + "LIBELLE_COURT" => "Hist ens CSERDcatA", + "LIBELLE_LONG" => "Historique enseignant HU des CSERD cat A", + "SOURCE_CODE" => "SD-A/1", ], [ "LIBELLE_COURT" => "Hist ens cherch catA", "LIBELLE_LONG" => "Historique enseignant chercheur de cat A", "SOURCE_CODE" => "SA-A", ], + [ + "LIBELLE_COURT" => "Hist pers EC cat A", + "LIBELLE_LONG" => "Historique enseignant chercheur de cat A", + "SOURCE_CODE" => "SA-A/1", + ], [ "LIBELLE_COURT" => "Hist pers bib catA", "LIBELLE_LONG" => "Historique pers biblio musées de cat A", @@ -1604,26 +1609,26 @@ return [ "LIBELLE_LONG" => "Historique pers. médicaux sociaux cat D", "SOURCE_CODE" => "MA-D", ], - [ - "LIBELLE_COURT" => "Hist persITARFcatA", - "LIBELLE_LONG" => "Historique personnel ITARF catégorie A", - "SOURCE_CODE" => "IA-A/1", - ], [ "LIBELLE_COURT" => "Hist pers ITARF catA", "LIBELLE_LONG" => "Historique personnel ITARF catégorie A", "SOURCE_CODE" => "IA-A", ], [ - "LIBELLE_COURT" => "Hist pers ITARF catB", - "LIBELLE_LONG" => "Historique personnel ITARF catégorie B", - "SOURCE_CODE" => "IA-B", + "LIBELLE_COURT" => "Hist persITARFcatA", + "LIBELLE_LONG" => "Historique personnel ITARF catégorie A", + "SOURCE_CODE" => "IA-A/1", ], [ "LIBELLE_COURT" => "Hist persITARFcatB", "LIBELLE_LONG" => "Historique personnel ITARF catégorie B", "SOURCE_CODE" => "IA-B/2", ], + [ + "LIBELLE_COURT" => "Hist pers ITARF catB", + "LIBELLE_LONG" => "Historique personnel ITARF catégorie B", + "SOURCE_CODE" => "IA-B", + ], [ "LIBELLE_COURT" => "Hist persITARFcatC", "LIBELLE_LONG" => "Historique personnel ITARF catégorie C", @@ -1675,14 +1680,14 @@ return [ "SOURCE_CODE" => "AC-C/3", ], [ - "LIBELLE_COURT" => "Hist pers Tos cat D", + "LIBELLE_COURT" => "Hist pers Tos catD", "LIBELLE_LONG" => "Historique personnel Tos de catégorie D", - "SOURCE_CODE" => "AC-D", + "SOURCE_CODE" => "AC-D/D", ], [ - "LIBELLE_COURT" => "Hist pers Tos catD", + "LIBELLE_COURT" => "Hist pers Tos cat D", "LIBELLE_LONG" => "Historique personnel Tos de catégorie D", - "SOURCE_CODE" => "AC-D/D", + "SOURCE_CODE" => "AC-D", ], [ "LIBELLE_COURT" => "Hist pers dir catA", @@ -1695,24 +1700,24 @@ return [ "SOURCE_CODE" => "DI-A", ], [ - "LIBELLE_COURT" => "Hist pers inspe catA", + "LIBELLE_COURT" => "Hist pers ins catA", "LIBELLE_LONG" => "Historique personnel inspection de cat A", - "SOURCE_CODE" => "PI-A", + "SOURCE_CODE" => "PI-A/1", ], [ - "LIBELLE_COURT" => "Hist pers ins catA", + "LIBELLE_COURT" => "Hist pers inspe catA", "LIBELLE_LONG" => "Historique personnel inspection de cat A", - "SOURCE_CODE" => "PI-A/1", + "SOURCE_CODE" => "PI-A", ], [ "LIBELLE_COURT" => "IGAENR EF", "LIBELLE_LONG" => "IG DE L'ADM ET DE LA REC EMP FONCT", - "SOURCE_CODE" => "121/1", + "SOURCE_CODE" => "121", ], [ "LIBELLE_COURT" => "IGAENR EF", "LIBELLE_LONG" => "IG DE L'ADM ET DE LA REC EMP FONCT", - "SOURCE_CODE" => "121", + "SOURCE_CODE" => "121/1", ], [ "LIBELLE_COURT" => "INFIR.AUX.", @@ -1727,22 +1732,22 @@ return [ [ "LIBELLE_COURT" => "INF-ETAT", "LIBELLE_LONG" => "INFIRMIERE D'ETAT (EN EXTINCTION)", - "SOURCE_CODE" => "289", + "SOURCE_CODE" => "289/2", ], [ "LIBELLE_COURT" => "INF-ETAT", "LIBELLE_LONG" => "INFIRMIERE D'ETAT (EN EXTINCTION)", - "SOURCE_CODE" => "289/2", + "SOURCE_CODE" => "289", ], [ - "LIBELLE_COURT" => "INFIRM.-NS", + "LIBELLE_COURT" => "INFIRM -NS", "LIBELLE_LONG" => "INFIRMIERE OU INFIRMIER (EN EXTINCTION)", - "SOURCE_CODE" => "989", + "SOURCE_CODE" => "989/2", ], [ - "LIBELLE_COURT" => "INFIRM -NS", + "LIBELLE_COURT" => "INFIRM.-NS", "LIBELLE_LONG" => "INFIRMIERE OU INFIRMIER (EN EXTINCTION)", - "SOURCE_CODE" => "989/2", + "SOURCE_CODE" => "989", ], [ "LIBELLE_COURT" => "INF ENES", @@ -1759,20 +1764,15 @@ return [ "LIBELLE_LONG" => "INFORMATICIEN DE HAUT NIVEAU", "SOURCE_CODE" => "873", ], - [ - "LIBELLE_COURT" => "IN CNRS", - "LIBELLE_LONG" => "INGENIEUR CONTRACTUEL CNRS", - "SOURCE_CODE" => "840/1", - ], [ "LIBELLE_COURT" => "IN.CNRS", "LIBELLE_LONG" => "INGENIEUR CONTRACTUEL CNRS", "SOURCE_CODE" => "840", ], [ - "LIBELLE_COURT" => "IGE", - "LIBELLE_LONG" => "INGENIEUR D'ETUDES (RECH ET FORM)", - "SOURCE_CODE" => "833", + "LIBELLE_COURT" => "IN CNRS", + "LIBELLE_LONG" => "INGENIEUR CONTRACTUEL CNRS", + "SOURCE_CODE" => "840/1", ], [ "LIBELLE_COURT" => "IGE RF", @@ -1780,15 +1780,20 @@ return [ "SOURCE_CODE" => "833/1", ], [ - "LIBELLE_COURT" => "IE-R EPST", - "LIBELLE_LONG" => "INGENIEUR D'ETUDES EPST", - "SOURCE_CODE" => "EP1", + "LIBELLE_COURT" => "IGE", + "LIBELLE_LONG" => "INGENIEUR D'ETUDES (RECH ET FORM)", + "SOURCE_CODE" => "833", ], [ "LIBELLE_COURT" => "IGE EPST", "LIBELLE_LONG" => "INGENIEUR D'ETUDES EPST", "SOURCE_CODE" => "EP1/1", ], + [ + "LIBELLE_COURT" => "IE-R EPST", + "LIBELLE_LONG" => "INGENIEUR D'ETUDES EPST", + "SOURCE_CODE" => "EP1", + ], [ "LIBELLE_COURT" => "IR-R CNRS", "LIBELLE_LONG" => "INGENIEUR DE RECHERCHE ( RECHERCHE CNRS)", @@ -1820,14 +1825,14 @@ return [ "SOURCE_CODE" => "280/1", ], [ - "LIBELLE_COURT" => "ING TELEC", + "LIBELLE_COURT" => "ING.TELEC.", "LIBELLE_LONG" => "INGENIEUR DES TELECOMMUNICATIONS", - "SOURCE_CODE" => "283/1", + "SOURCE_CODE" => "283", ], [ - "LIBELLE_COURT" => "ING.TELEC.", + "LIBELLE_COURT" => "ING TELEC", "LIBELLE_LONG" => "INGENIEUR DES TELECOMMUNICATIONS", - "SOURCE_CODE" => "283", + "SOURCE_CODE" => "283/1", ], [ "LIBELLE_COURT" => "IN TR PUBL", @@ -1860,14 +1865,14 @@ return [ "SOURCE_CODE" => "874", ], [ - "LIBELLE_COURT" => "I.A. ADJ", + "LIBELLE_COURT" => "I A ADJ", "LIBELLE_LONG" => "INSPECTEUR D'ACADEMIE ADJOINT", - "SOURCE_CODE" => "106", + "SOURCE_CODE" => "106/1", ], [ - "LIBELLE_COURT" => "I A ADJ", + "LIBELLE_COURT" => "I.A. ADJ", "LIBELLE_LONG" => "INSPECTEUR D'ACADEMIE ADJOINT", - "SOURCE_CODE" => "106/1", + "SOURCE_CODE" => "106", ], [ "LIBELLE_COURT" => "IA-DSDEN", @@ -1879,20 +1884,15 @@ return [ "LIBELLE_LONG" => "INSPECTEUR D'ACADEMIE DIR. SERV. DEPART.", "SOURCE_CODE" => "105", ], - [ - "LIBELLE_COURT" => "I.E.N", - "LIBELLE_LONG" => "INSPECTEUR DE L'EDUCATION NATIONALE", - "SOURCE_CODE" => "115", - ], [ "LIBELLE_COURT" => "I E N", "LIBELLE_LONG" => "INSPECTEUR DE L'EDUCATION NATIONALE", "SOURCE_CODE" => "115/1", ], [ - "LIBELLE_COURT" => "INSP. J.S.", - "LIBELLE_LONG" => "INSPECTEUR DE LA JEUNESSE ET DES SPORTS", - "SOURCE_CODE" => "116", + "LIBELLE_COURT" => "I.E.N", + "LIBELLE_LONG" => "INSPECTEUR DE L'EDUCATION NATIONALE", + "SOURCE_CODE" => "115", ], [ "LIBELLE_COURT" => "INSP J S", @@ -1900,9 +1900,9 @@ return [ "SOURCE_CODE" => "116/1", ], [ - "LIBELLE_COURT" => "INSP MAGAS", - "LIBELLE_LONG" => "INSPECTEUR DE MAGASINAGE", - "SOURCE_CODE" => "815/2", + "LIBELLE_COURT" => "INSP. J.S.", + "LIBELLE_LONG" => "INSPECTEUR DE LA JEUNESSE ET DES SPORTS", + "SOURCE_CODE" => "116", ], [ "LIBELLE_COURT" => "INSP.MAGAS", @@ -1910,15 +1910,20 @@ return [ "SOURCE_CODE" => "815", ], [ - "LIBELLE_COURT" => "I.G.A.E.N.", - "LIBELLE_LONG" => "INSPECTEUR GENERAL DE L'ADMINISTRATION", - "SOURCE_CODE" => "101", + "LIBELLE_COURT" => "INSP MAGAS", + "LIBELLE_LONG" => "INSPECTEUR DE MAGASINAGE", + "SOURCE_CODE" => "815/2", ], [ "LIBELLE_COURT" => "I G A E N", "LIBELLE_LONG" => "INSPECTEUR GENERAL DE L'ADMINISTRATION", "SOURCE_CODE" => "101/1", ], + [ + "LIBELLE_COURT" => "I.G.A.E.N.", + "LIBELLE_LONG" => "INSPECTEUR GENERAL DE L'ADMINISTRATION", + "SOURCE_CODE" => "101", + ], [ "LIBELLE_COURT" => "I G E N", "LIBELLE_LONG" => "INSPECTEUR GENERAL DE L'EDUCATION NAT", @@ -1930,14 +1935,14 @@ return [ "SOURCE_CODE" => "102", ], [ - "LIBELLE_COURT" => "I G BIBLIO", + "LIBELLE_COURT" => "I.G.BIBLIO", "LIBELLE_LONG" => "INSPECTEUR GENERAL DES BIBLIOTHEQUES", - "SOURCE_CODE" => "103/1", + "SOURCE_CODE" => "103", ], [ - "LIBELLE_COURT" => "I.G.BIBLIO", + "LIBELLE_COURT" => "I G BIBLIO", "LIBELLE_LONG" => "INSPECTEUR GENERAL DES BIBLIOTHEQUES", - "SOURCE_CODE" => "103", + "SOURCE_CODE" => "103/1", ], [ "LIBELLE_COURT" => "INSP TECH A SOC AE", @@ -1949,6 +1954,11 @@ return [ "LIBELLE_LONG" => "INSPECTEUR TECH D'ACTION SOCIALE AE", "SOURCE_CODE" => "H11/1", ], + [ + "LIBELLE_COURT" => "INSTIT", + "LIBELLE_LONG" => "INSTITUTEUR", + "SOURCE_CODE" => "600/2", + ], [ "LIBELLE_COURT" => "INST AUXIL", "LIBELLE_LONG" => "INSTITUTEUR AUXILIAIRE SUPPLEANT", @@ -1979,20 +1989,15 @@ return [ "LIBELLE_LONG" => "INSTRUCTEUR", "SOURCE_CODE" => "602/2", ], - [ - "LIBELLE_COURT" => "MAG", - "LIBELLE_LONG" => "MAGASINIER DES BIBLIOTHEQUES", - "SOURCE_CODE" => "942", - ], [ "LIBELLE_COURT" => "MAGASINIER", "LIBELLE_LONG" => "MAGASINIER DES BIBLIOTHEQUES", "SOURCE_CODE" => "942/3", ], [ - "LIBELLE_COURT" => "MAGAS CHEF", - "LIBELLE_LONG" => "MAGASINIER EN CHEF", - "SOURCE_CODE" => "813/3", + "LIBELLE_COURT" => "MAG", + "LIBELLE_LONG" => "MAGASINIER DES BIBLIOTHEQUES", + "SOURCE_CODE" => "942", ], [ "LIBELLE_COURT" => "MAGAS.CHEF", @@ -2000,15 +2005,20 @@ return [ "SOURCE_CODE" => "813", ], [ - "LIBELLE_COURT" => "MAGAS.SPEC", - "LIBELLE_LONG" => "MAGASINIER SPECIALISE", - "SOURCE_CODE" => "814", + "LIBELLE_COURT" => "MAGAS CHEF", + "LIBELLE_LONG" => "MAGASINIER EN CHEF", + "SOURCE_CODE" => "813/3", ], [ "LIBELLE_COURT" => "MAGAS SPEC", "LIBELLE_LONG" => "MAGASINIER SPECIALISE", "SOURCE_CODE" => "814/3", ], + [ + "LIBELLE_COURT" => "MAGAS.SPEC", + "LIBELLE_LONG" => "MAGASINIER SPECIALISE", + "SOURCE_CODE" => "814", + ], [ "LIBELLE_COURT" => "MCF MNHN", "LIBELLE_LONG" => "MAIT CONF DU MUSEUM NAT HIST NATUR", @@ -2019,11 +2029,6 @@ return [ "LIBELLE_LONG" => "MAIT CONF EPHE EC NAT DES CHARTES", "SOURCE_CODE" => "356/1", ], - [ - "LIBELLE_COURT" => "MCF PH DENT", - "LIBELLE_LONG" => "MAIT CONF PRAT HOSP DENTAIRES", - "SOURCE_CODE" => "316/1", - ], [ "LIBELLE_COURT" => "MAIT.CF.MUSEUM.H.NAT", "LIBELLE_LONG" => "MAIT. CONF. DU MUSEUM NAT. HIST. NATUR.", @@ -2040,14 +2045,14 @@ return [ "SOURCE_CODE" => "316", ], [ - "LIBELLE_COURT" => "MAIT.ASSI.", + "LIBELLE_COURT" => "MAIT ASSI", "LIBELLE_LONG" => "MAITRE ASSISTANT", - "SOURCE_CODE" => "302", + "SOURCE_CODE" => "302/1", ], [ - "LIBELLE_COURT" => "MAIT ASSI", + "LIBELLE_COURT" => "MAIT.ASSI.", "LIBELLE_LONG" => "MAITRE ASSISTANT", - "SOURCE_CODE" => "302/1", + "SOURCE_CODE" => "302", ], [ "LIBELLE_COURT" => "M.A.", @@ -2065,19 +2070,19 @@ return [ "SOURCE_CODE" => "453/1", ], [ - "LIBELLE_COURT" => "MCF PH", - "LIBELLE_LONG" => "MAITRE DE CONF UNIV - PRATICIEN HOSP", - "SOURCE_CODE" => "311/1", + "LIBELLE_COURT" => "MCU PH", + "LIBELLE_LONG" => "MAITRE DE CONF UNIV - PRATICIEN HOSPITALIER", + "SOURCE_CODE" => "325/1", ], [ "LIBELLE_COURT" => "MCF MED GENE", "LIBELLE_LONG" => "MAITRE DE CONF UNIV DE MEDECINE GENERALE", - "SOURCE_CODE" => "MG1/1", + "SOURCE_CODE" => "MG1", ], [ "LIBELLE_COURT" => "MCF MED GENE", "LIBELLE_LONG" => "MAITRE DE CONF UNIV DE MEDECINE GENERALE", - "SOURCE_CODE" => "MG1", + "SOURCE_CODE" => "MG1/1", ], [ "LIBELLE_COURT" => "MAIT.CONF.PRAT.HOSP.", @@ -2090,14 +2095,14 @@ return [ "SOURCE_CODE" => "453", ], [ - "LIBELLE_COURT" => "MCF", + "LIBELLE_COURT" => "MAIT.CONF.", "LIBELLE_LONG" => "MAITRE DE CONFERENCES", - "SOURCE_CODE" => "301/1", + "SOURCE_CODE" => "301", ], [ - "LIBELLE_COURT" => "MAIT.CONF.", + "LIBELLE_COURT" => "MCF", "LIBELLE_LONG" => "MAITRE DE CONFERENCES", - "SOURCE_CODE" => "301", + "SOURCE_CODE" => "301/1", ], [ "LIBELLE_COURT" => "MC. ASSOCIE", @@ -2105,14 +2110,14 @@ return [ "SOURCE_CODE" => "381", ], [ - "LIBELLE_COURT" => "MCF EHESS", + "LIBELLE_COURT" => "MAIT.CONF.DE L'EHESS", "LIBELLE_LONG" => "MAITRE DE CONFERENCES DE L'EHESS", - "SOURCE_CODE" => "354/1", + "SOURCE_CODE" => "354", ], [ - "LIBELLE_COURT" => "MAIT.CONF.DE L'EHESS", + "LIBELLE_COURT" => "MCF EHESS", "LIBELLE_LONG" => "MAITRE DE CONFERENCES DE L'EHESS", - "SOURCE_CODE" => "354", + "SOURCE_CODE" => "354/1", ], [ "LIBELLE_COURT" => "M.O", @@ -2139,11 +2144,6 @@ return [ "LIBELLE_LONG" => "MCUPH DES DISCIPLINES PHARMACEUTIQUES", "SOURCE_CODE" => "PH1", ], - [ - "LIBELLE_COURT" => "MCUPH PHARMA", - "LIBELLE_LONG" => "MCUPH DES DISCIPLINES PHARMACEUTIQUES", - "SOURCE_CODE" => "PH1/1", - ], [ "LIBELLE_COURT" => "MED.CONTR.", "LIBELLE_LONG" => "MEDECIN CONTRACTUEL SANTE SCOLAIRE", @@ -2182,12 +2182,12 @@ return [ [ "LIBELLE_COURT" => "MINISTRE", "LIBELLE_LONG" => "MINISTRE", - "SOURCE_CODE" => "201", + "SOURCE_CODE" => "201/1", ], [ "LIBELLE_COURT" => "MINISTRE", "LIBELLE_LONG" => "MINISTRE", - "SOURCE_CODE" => "201/1", + "SOURCE_CODE" => "201", ], [ "LIBELLE_COURT" => "O E A", @@ -2252,12 +2252,12 @@ return [ [ "LIBELLE_COURT" => "PHYSICIEN ADJOINT", "LIBELLE_LONG" => "PHYSICIEN ADJOINT", - "SOURCE_CODE" => "333", + "SOURCE_CODE" => "333/1", ], [ "LIBELLE_COURT" => "PHYSICIEN ADJOINT", "LIBELLE_LONG" => "PHYSICIEN ADJOINT", - "SOURCE_CODE" => "333/1", + "SOURCE_CODE" => "333", ], [ "LIBELLE_COURT" => "PHYSICIEN ADJ D-36", @@ -2292,22 +2292,22 @@ return [ [ "LIBELLE_COURT" => "PR1G", "LIBELLE_LONG" => "PROF DU 1ER GRADE CHIR DENT ODONTO", - "SOURCE_CODE" => "317/1", + "SOURCE_CODE" => "317", ], [ "LIBELLE_COURT" => "PR1G", "LIBELLE_LONG" => "PROF DU 1ER GRADE CHIR DENT ODONTO", - "SOURCE_CODE" => "317", + "SOURCE_CODE" => "317/1", ], [ "LIBELLE_COURT" => "PR2G", "LIBELLE_LONG" => "PROF DU 2EME GRADE CHIR DENT ODONTO", - "SOURCE_CODE" => "318", + "SOURCE_CODE" => "318/1", ], [ "LIBELLE_COURT" => "PR2G", "LIBELLE_LONG" => "PROF DU 2EME GRADE CHIR DENT ODONTO", - "SOURCE_CODE" => "318/1", + "SOURCE_CODE" => "318", ], [ "LIBELLE_COURT" => "PROF EC ARTS&MANUF", @@ -2322,17 +2322,12 @@ return [ [ "LIBELLE_COURT" => "PR TIT TITRE PERSO", "LIBELLE_LONG" => "PROF TITULAIRES A TITRE PERSONNEL", - "SOURCE_CODE" => "452/1", + "SOURCE_CODE" => "H03/1", ], [ "LIBELLE_COURT" => "PR TIT TITRE PERSO", "LIBELLE_LONG" => "PROF TITULAIRES A TITRE PERSONNEL", - "SOURCE_CODE" => "H03/1", - ], - [ - "LIBELLE_COURT" => "PROF UNIV PH DENT", - "LIBELLE_LONG" => "PROF UNIV PRAT HOSP DENTAIRES", - "SOURCE_CODE" => "315/1", + "SOURCE_CODE" => "452/1", ], [ "LIBELLE_COURT" => "PROF.EC. ARTS&MANUF.", @@ -2382,12 +2377,12 @@ return [ [ "LIBELLE_COURT" => "AGREGE", "LIBELLE_LONG" => "PROFESSEUR AGREGE", - "SOURCE_CODE" => "551", + "SOURCE_CODE" => "551/1", ], [ "LIBELLE_COURT" => "AGREGE", "LIBELLE_LONG" => "PROFESSEUR AGREGE", - "SOURCE_CODE" => "551/1", + "SOURCE_CODE" => "551", ], [ "LIBELLE_COURT" => "PR.ASSOCIE", @@ -2419,6 +2414,11 @@ return [ "LIBELLE_LONG" => "PROFESSEUR CONTRACTUEL", "SOURCE_CODE" => "779", ], + [ + "LIBELLE_COURT" => "PEGC", + "LIBELLE_LONG" => "PROFESSEUR D'ENS GENERAL DES COLLEGES", + "SOURCE_CODE" => "559/1", + ], [ "LIBELLE_COURT" => "PROF EPS", "LIBELLE_LONG" => "PROFESSEUR D'EPS", @@ -2432,12 +2432,12 @@ return [ [ "LIBELLE_COURT" => "CHAIRE SUP", "LIBELLE_LONG" => "PROFESSEUR DE CHAIRE SUPERIEURE", - "SOURCE_CODE" => "550/1", + "SOURCE_CODE" => "550", ], [ "LIBELLE_COURT" => "CHAIRE SUP", "LIBELLE_LONG" => "PROFESSEUR DE CHAIRE SUPERIEURE", - "SOURCE_CODE" => "550", + "SOURCE_CODE" => "550/1", ], [ "LIBELLE_COURT" => "PROF. DE L'ENSAM", @@ -2450,14 +2450,14 @@ return [ "SOURCE_CODE" => "364/1", ], [ - "LIBELLE_COURT" => "PROF.ECOLE", + "LIBELLE_COURT" => "PROF ECOLE", "LIBELLE_LONG" => "PROFESSEUR DES ECOLES", - "SOURCE_CODE" => "615", + "SOURCE_CODE" => "615/1", ], [ - "LIBELLE_COURT" => "PROF ECOLE", + "LIBELLE_COURT" => "PROF.ECOLE", "LIBELLE_LONG" => "PROFESSEUR DES ECOLES", - "SOURCE_CODE" => "615/1", + "SOURCE_CODE" => "615", ], [ "LIBELLE_COURT" => "P.L.P.", @@ -2469,11 +2469,6 @@ return [ "LIBELLE_LONG" => "PROFESSEUR DES LYCEES PROFESSIONNELS", "SOURCE_CODE" => "575/1", ], - [ - "LIBELLE_COURT" => "PROF UNIV PH", - "LIBELLE_LONG" => "PROFESSEUR DES UNIV - PRATICIEN HOSP", - "SOURCE_CODE" => "310/1", - ], [ "LIBELLE_COURT" => "PROF.UNIV.PRAT.HOSP.", "LIBELLE_LONG" => "PROFESSEUR DES UNIV - PRATICIEN HOSP.", @@ -2522,18 +2517,28 @@ return [ [ "LIBELLE_COURT" => "PR MED GENE", "LIBELLE_LONG" => "PROFESSEUR UNIVERSITES MEDECINE GENERALE", - "SOURCE_CODE" => "MG0", + "SOURCE_CODE" => "MG0/1", ], [ "LIBELLE_COURT" => "PR MED GENE", "LIBELLE_LONG" => "PROFESSEUR UNIVERSITES MEDECINE GENERALE", - "SOURCE_CODE" => "MG0/1", + "SOURCE_CODE" => "MG0", + ], + [ + "LIBELLE_COURT" => "PU PH", + "LIBELLE_LONG" => "PROFESSEURS DES UNIV - PRATICIEN HOSPITALIER", + "SOURCE_CODE" => "324/1", ], [ "LIBELLE_COURT" => "PROF SANS CHAIRE", "LIBELLE_LONG" => "PROFESSEURS SANS CHAIRE", "SOURCE_CODE" => "450/1", ], + [ + "LIBELLE_COURT" => "PROF SANS CHAIRE", + "LIBELLE_LONG" => "PROFESSEURS SANS CHAIRE", + "SOURCE_CODE" => "H01/1", + ], [ "LIBELLE_COURT" => "PROF. SANS CHAIRE", "LIBELLE_LONG" => "PROFESSEURS SANS CHAIRE", @@ -2545,9 +2550,9 @@ return [ "SOURCE_CODE" => "450", ], [ - "LIBELLE_COURT" => "PROF SANS CHAIRE", - "LIBELLE_LONG" => "PROFESSEURS SANS CHAIRE", - "SOURCE_CODE" => "H01/1", + "LIBELLE_COURT" => "PROF TITULAIRES", + "LIBELLE_LONG" => "PROFESSEURS TITULAIRES", + "SOURCE_CODE" => "451/1", ], [ "LIBELLE_COURT" => "PROF. TITULAIRES", @@ -2559,30 +2564,20 @@ return [ "LIBELLE_LONG" => "PROFESSEURS TITULAIRES", "SOURCE_CODE" => "H02/1", ], - [ - "LIBELLE_COURT" => "PROF TITULAIRES", - "LIBELLE_LONG" => "PROFESSEURS TITULAIRES", - "SOURCE_CODE" => "451/1", - ], [ "LIBELLE_COURT" => "PROF. TITULAIRES", "LIBELLE_LONG" => "PROFESSEURS TITULAIRES", "SOURCE_CODE" => "H02", ], - [ - "LIBELLE_COURT" => "PSY.EN", - "LIBELLE_LONG" => "PSYCHOLOGUE EDUCATION NATIONALE", - "SOURCE_CODE" => "522", - ], [ "LIBELLE_COURT" => "PSY EN", "LIBELLE_LONG" => "PSYCHOLOGUE EDUCATION NATIONALE", "SOURCE_CODE" => "522/1", ], [ - "LIBELLE_COURT" => "PUPH PHARMA", - "LIBELLE_LONG" => "PUPH DES DISCIPLINES PHARMACEUTIQUES", - "SOURCE_CODE" => "PH0/1", + "LIBELLE_COURT" => "PSY.EN", + "LIBELLE_LONG" => "PSYCHOLOGUE EDUCATION NATIONALE", + "SOURCE_CODE" => "522", ], [ "LIBELLE_COURT" => "PUPH PHARMA", @@ -2614,6 +2609,11 @@ return [ "LIBELLE_LONG" => "SECRETAIRE ADMINISTRATIF (SAC) NV.STATUT", "SOURCE_CODE" => "217", ], + [ + "LIBELLE_COURT" => "SASU NV ST", + "LIBELLE_LONG" => "SECRETAIRE ADMINISTRATIF (SASU) NV ST", + "SOURCE_CODE" => "033/2", + ], [ "LIBELLE_COURT" => "SASU NV.ST", "LIBELLE_LONG" => "SECRETAIRE ADMINISTRATIF (SASU) NV.ST.", @@ -2622,12 +2622,12 @@ return [ [ "LIBELLE_COURT" => "SAENES 10", "LIBELLE_LONG" => "SECRETAIRE ADMINISTRATIF 2010", - "SOURCE_CODE" => "054", + "SOURCE_CODE" => "054/2", ], [ "LIBELLE_COURT" => "SAENES 10", "LIBELLE_LONG" => "SECRETAIRE ADMINISTRATIF 2010", - "SOURCE_CODE" => "054/2", + "SOURCE_CODE" => "054", ], [ "LIBELLE_COURT" => "SAR-R EPST", @@ -2635,14 +2635,14 @@ return [ "SOURCE_CODE" => "264", ], [ - "LIBELLE_COURT" => "SECR ETAT", + "LIBELLE_COURT" => "SECR. ETAT", "LIBELLE_LONG" => "SECRETAIRE D'ETAT", - "SOURCE_CODE" => "202/1", + "SOURCE_CODE" => "202", ], [ - "LIBELLE_COURT" => "SECR. ETAT", + "LIBELLE_COURT" => "SECR ETAT", "LIBELLE_LONG" => "SECRETAIRE D'ETAT", - "SOURCE_CODE" => "202", + "SOURCE_CODE" => "202/1", ], [ "LIBELLE_COURT" => "SEC DOC-AS", @@ -2674,11 +2674,6 @@ return [ "LIBELLE_LONG" => "SECRETAIRE GENERAL D'A.S.U.", "SOURCE_CODE" => "022", ], - [ - "LIBELLE_COURT" => "S.G.A.", - "LIBELLE_LONG" => "SECRETAIRE GENERAL D'ACADEMIE", - "SOURCE_CODE" => "021", - ], [ "LIBELLE_COURT" => "SGA", "LIBELLE_LONG" => "SECRETAIRE GENERAL D'ACADEMIE", @@ -2689,6 +2684,11 @@ return [ "LIBELLE_LONG" => "SECRETAIRE GENERAL D'ACADEMIE", "SOURCE_CODE" => "091", ], + [ + "LIBELLE_COURT" => "S.G.A.", + "LIBELLE_LONG" => "SECRETAIRE GENERAL D'ACADEMIE", + "SOURCE_CODE" => "021", + ], [ "LIBELLE_COURT" => "S G A", "LIBELLE_LONG" => "SECRETAIRE GENERAL D'ACADEMIE", @@ -2697,12 +2697,12 @@ return [ [ "LIBELLE_COURT" => "SG DSDEN", "LIBELLE_LONG" => "SECRETAIRE GENERAL DE DSDEN / VICE-RECT", - "SOURCE_CODE" => "099", + "SOURCE_CODE" => "099/1", ], [ "LIBELLE_COURT" => "SG DSDEN", "LIBELLE_LONG" => "SECRETAIRE GENERAL DE DSDEN / VICE-RECT", - "SOURCE_CODE" => "099/1", + "SOURCE_CODE" => "099", ], [ "LIBELLE_COURT" => "SEC GEN M", @@ -2785,14 +2785,14 @@ return [ "SOURCE_CODE" => "9HH/2", ], [ - "LIBELLE_COURT" => "TECH", + "LIBELLE_COURT" => "TECH.", "LIBELLE_LONG" => "TECHNICIEN DE L'EDUCATION NATIONALE", - "SOURCE_CODE" => "957/2", + "SOURCE_CODE" => "957", ], [ - "LIBELLE_COURT" => "TECH.", + "LIBELLE_COURT" => "TECH", "LIBELLE_LONG" => "TECHNICIEN DE L'EDUCATION NATIONALE", - "SOURCE_CODE" => "957", + "SOURCE_CODE" => "957/2", ], [ "LIBELLE_COURT" => "TECH RF", @@ -2843,6 +2843,7 @@ return [ "PAYS" => [ [ "CODE" => "212", + "CODE_ISO3" => "AFG", "LIBELLE" => "Afghanistan", "SOURCE_CODE" => "212", "TEMOIN_UE" => FALSE, @@ -2850,6 +2851,7 @@ return [ ], [ "CODE" => "303", + "CODE_ISO3" => "ZAF", "LIBELLE" => "Afrique du Sud", "SOURCE_CODE" => "303", "TEMOIN_UE" => FALSE, @@ -2857,6 +2859,7 @@ return [ ], [ "CODE" => "125", + "CODE_ISO3" => "ALB", "LIBELLE" => "Albanie", "SOURCE_CODE" => "125", "TEMOIN_UE" => FALSE, @@ -2864,6 +2867,7 @@ return [ ], [ "CODE" => "352", + "CODE_ISO3" => "DZA", "LIBELLE" => "Algérie", "SOURCE_CODE" => "352", "TEMOIN_UE" => FALSE, @@ -2871,6 +2875,7 @@ return [ ], [ "CODE" => "109", + "CODE_ISO3" => "DEU", "LIBELLE" => "Allemagne", "SOURCE_CODE" => "109", "TEMOIN_UE" => FALSE, @@ -2894,6 +2899,7 @@ return [ ], [ "CODE" => "130", + "CODE_ISO3" => "AND", "LIBELLE" => "Andorre", "SOURCE_CODE" => "130", "TEMOIN_UE" => FALSE, @@ -2901,6 +2907,7 @@ return [ ], [ "CODE" => "395", + "CODE_ISO3" => "AGO", "LIBELLE" => "Angola", "SOURCE_CODE" => "395", "TEMOIN_UE" => FALSE, @@ -2908,6 +2915,7 @@ return [ ], [ "CODE" => "441", + "CODE_ISO3" => "ATG", "LIBELLE" => "Antigua-et-Barbuda", "SOURCE_CODE" => "441", "TEMOIN_UE" => FALSE, @@ -2923,6 +2931,7 @@ return [ ], [ "CODE" => "201", + "CODE_ISO3" => "SAU", "LIBELLE" => "Arabie saoudite", "SOURCE_CODE" => "201", "TEMOIN_UE" => FALSE, @@ -2930,6 +2939,7 @@ return [ ], [ "CODE" => "415", + "CODE_ISO3" => "ARG", "LIBELLE" => "Argentine", "SOURCE_CODE" => "415", "TEMOIN_UE" => FALSE, @@ -2937,6 +2947,7 @@ return [ ], [ "CODE" => "252", + "CODE_ISO3" => "ARM", "LIBELLE" => "Arménie", "SOURCE_CODE" => "252", "TEMOIN_UE" => FALSE, @@ -2944,6 +2955,7 @@ return [ ], [ "CODE" => "501", + "CODE_ISO3" => "AUS", "LIBELLE" => "Australie", "SOURCE_CODE" => "501", "TEMOIN_UE" => FALSE, @@ -2958,6 +2970,7 @@ return [ ], [ "CODE" => "110", + "CODE_ISO3" => "AUT", "LIBELLE" => "Autriche", "SOURCE_CODE" => "110", "TEMOIN_UE" => FALSE, @@ -2965,6 +2978,7 @@ return [ ], [ "CODE" => "253", + "CODE_ISO3" => "AZE", "LIBELLE" => "Azerbaidjan", "SOURCE_CODE" => "253", "TEMOIN_UE" => FALSE, @@ -2979,6 +2993,7 @@ return [ ], [ "CODE" => "436", + "CODE_ISO3" => "BHS", "LIBELLE" => "Bahamas", "SOURCE_CODE" => "436", "TEMOIN_UE" => FALSE, @@ -2986,6 +3001,7 @@ return [ ], [ "CODE" => "249", + "CODE_ISO3" => "BHR", "LIBELLE" => "Bahrein", "SOURCE_CODE" => "249", "TEMOIN_UE" => FALSE, @@ -2993,6 +3009,7 @@ return [ ], [ "CODE" => "246", + "CODE_ISO3" => "BGD", "LIBELLE" => "Bangladesh", "SOURCE_CODE" => "246", "TEMOIN_UE" => FALSE, @@ -3000,6 +3017,7 @@ return [ ], [ "CODE" => "434", + "CODE_ISO3" => "BRB", "LIBELLE" => "Barbade", "SOURCE_CODE" => "434", "TEMOIN_UE" => FALSE, @@ -3007,6 +3025,7 @@ return [ ], [ "CODE" => "131", + "CODE_ISO3" => "BEL", "LIBELLE" => "Belgique", "SOURCE_CODE" => "131", "TEMOIN_UE" => FALSE, @@ -3014,6 +3033,7 @@ return [ ], [ "CODE" => "429", + "CODE_ISO3" => "BLZ", "LIBELLE" => "Belize", "SOURCE_CODE" => "429", "TEMOIN_UE" => FALSE, @@ -3021,6 +3041,7 @@ return [ ], [ "CODE" => "214", + "CODE_ISO3" => "BTN", "LIBELLE" => "Bhoutan", "SOURCE_CODE" => "214", "TEMOIN_UE" => FALSE, @@ -3028,6 +3049,7 @@ return [ ], [ "CODE" => "224", + "CODE_ISO3" => "MMR", "LIBELLE" => "Birmanie", "SOURCE_CODE" => "224", "TEMOIN_UE" => FALSE, @@ -3035,6 +3057,7 @@ return [ ], [ "CODE" => "148", + "CODE_ISO3" => "BLR", "LIBELLE" => "Biélorussie", "SOURCE_CODE" => "148", "TEMOIN_UE" => FALSE, @@ -3042,6 +3065,7 @@ return [ ], [ "CODE" => "418", + "CODE_ISO3" => "BOL", "LIBELLE" => "Bolivie", "SOURCE_CODE" => "418", "TEMOIN_UE" => FALSE, @@ -3049,6 +3073,7 @@ return [ ], [ "CODE" => "443", + "CODE_ISO3" => "BES", "LIBELLE" => "Bonaire, Saint Eustache et Saba", "SOURCE_CODE" => "443", "TEMOIN_UE" => FALSE, @@ -3056,6 +3081,7 @@ return [ ], [ "CODE" => "118", + "CODE_ISO3" => "BIH", "LIBELLE" => "Bosnie-Herzégovine", "SOURCE_CODE" => "118", "TEMOIN_UE" => FALSE, @@ -3063,6 +3089,7 @@ return [ ], [ "CODE" => "347", + "CODE_ISO3" => "BWA", "LIBELLE" => "Botswana", "SOURCE_CODE" => "347", "TEMOIN_UE" => FALSE, @@ -3070,6 +3097,7 @@ return [ ], [ "CODE" => "225", + "CODE_ISO3" => "BRN", "LIBELLE" => "Brunei", "SOURCE_CODE" => "225", "TEMOIN_UE" => FALSE, @@ -3077,6 +3105,7 @@ return [ ], [ "CODE" => "416", + "CODE_ISO3" => "BRA", "LIBELLE" => "Brésil", "SOURCE_CODE" => "416", "TEMOIN_UE" => FALSE, @@ -3084,6 +3113,7 @@ return [ ], [ "CODE" => "111", + "CODE_ISO3" => "BGR", "LIBELLE" => "Bulgarie", "SOURCE_CODE" => "111", "TEMOIN_UE" => FALSE, @@ -3091,6 +3121,7 @@ return [ ], [ "CODE" => "331", + "CODE_ISO3" => "BFA", "LIBELLE" => "Burkina Faso", "SOURCE_CODE" => "331", "TEMOIN_UE" => FALSE, @@ -3098,6 +3129,7 @@ return [ ], [ "CODE" => "321", + "CODE_ISO3" => "BDI", "LIBELLE" => "Burundi", "SOURCE_CODE" => "321", "TEMOIN_UE" => FALSE, @@ -3105,6 +3137,7 @@ return [ ], [ "CODE" => "327", + "CODE_ISO3" => "BEN", "LIBELLE" => "Bénin", "SOURCE_CODE" => "327", "TEMOIN_UE" => FALSE, @@ -3112,6 +3145,7 @@ return [ ], [ "CODE" => "234", + "CODE_ISO3" => "KHM", "LIBELLE" => "Cambodge", "SOURCE_CODE" => "234", "TEMOIN_UE" => FALSE, @@ -3119,6 +3153,7 @@ return [ ], [ "CODE" => "322", + "CODE_ISO3" => "CMR", "LIBELLE" => "Cameroun", "SOURCE_CODE" => "322", "TEMOIN_UE" => FALSE, @@ -3134,6 +3169,7 @@ return [ ], [ "CODE" => "401", + "CODE_ISO3" => "CAN", "LIBELLE" => "Canada", "SOURCE_CODE" => "401", "TEMOIN_UE" => FALSE, @@ -3141,6 +3177,7 @@ return [ ], [ "CODE" => "396", + "CODE_ISO3" => "CPV", "LIBELLE" => "Cap-vert", "SOURCE_CODE" => "396", "TEMOIN_UE" => FALSE, @@ -3148,6 +3185,7 @@ return [ ], [ "CODE" => "323", + "CODE_ISO3" => "CAF", "LIBELLE" => "Centrafrique", "SOURCE_CODE" => "323", "TEMOIN_UE" => FALSE, @@ -3155,6 +3193,7 @@ return [ ], [ "CODE" => "417", + "CODE_ISO3" => "CHL", "LIBELLE" => "Chili", "SOURCE_CODE" => "417", "TEMOIN_UE" => FALSE, @@ -3162,6 +3201,7 @@ return [ ], [ "CODE" => "216", + "CODE_ISO3" => "CHN", "LIBELLE" => "Chine", "SOURCE_CODE" => "216", "TEMOIN_UE" => FALSE, @@ -3169,6 +3209,7 @@ return [ ], [ "CODE" => "254", + "CODE_ISO3" => "CYP", "LIBELLE" => "Chypre", "SOURCE_CODE" => "254", "TEMOIN_UE" => FALSE, @@ -3176,6 +3217,7 @@ return [ ], [ "CODE" => "419", + "CODE_ISO3" => "COL", "LIBELLE" => "Colombie", "SOURCE_CODE" => "419", "TEMOIN_UE" => FALSE, @@ -3183,6 +3225,7 @@ return [ ], [ "CODE" => "397", + "CODE_ISO3" => "COM", "LIBELLE" => "Comores", "SOURCE_CODE" => "397", "TEMOIN_UE" => FALSE, @@ -3190,6 +3233,7 @@ return [ ], [ "CODE" => "324", + "CODE_ISO3" => "COG", "LIBELLE" => "Congo ( République du Congo)", "SOURCE_CODE" => "324", "TEMOIN_UE" => FALSE, @@ -3197,6 +3241,7 @@ return [ ], [ "CODE" => "312", + "CODE_ISO3" => "COD", "LIBELLE" => "Congo ( République démocratique du Congo)", "SOURCE_CODE" => "312", "TEMOIN_UE" => FALSE, @@ -3212,6 +3257,7 @@ return [ ], [ "CODE" => "238", + "CODE_ISO3" => "PRK", "LIBELLE" => "Corée du Nord", "SOURCE_CODE" => "238", "TEMOIN_UE" => FALSE, @@ -3219,6 +3265,7 @@ return [ ], [ "CODE" => "239", + "CODE_ISO3" => "KOR", "LIBELLE" => "Corée du Sud", "SOURCE_CODE" => "239", "TEMOIN_UE" => FALSE, @@ -3226,6 +3273,7 @@ return [ ], [ "CODE" => "406", + "CODE_ISO3" => "CRI", "LIBELLE" => "Costa Rica", "SOURCE_CODE" => "406", "TEMOIN_UE" => FALSE, @@ -3233,6 +3281,7 @@ return [ ], [ "CODE" => "119", + "CODE_ISO3" => "HRV", "LIBELLE" => "Croatie", "SOURCE_CODE" => "119", "TEMOIN_UE" => FALSE, @@ -3240,6 +3289,7 @@ return [ ], [ "CODE" => "407", + "CODE_ISO3" => "CUB", "LIBELLE" => "Cuba", "SOURCE_CODE" => "407", "TEMOIN_UE" => FALSE, @@ -3247,6 +3297,7 @@ return [ ], [ "CODE" => "444", + "CODE_ISO3" => "CUW", "LIBELLE" => "Curaçao", "SOURCE_CODE" => "444", "TEMOIN_UE" => FALSE, @@ -3254,6 +3305,7 @@ return [ ], [ "CODE" => "326", + "CODE_ISO3" => "CIV", "LIBELLE" => "Côte d'Ivoire", "SOURCE_CODE" => "326", "TEMOIN_UE" => FALSE, @@ -3261,6 +3313,7 @@ return [ ], [ "CODE" => "101", + "CODE_ISO3" => "DNK", "LIBELLE" => "Danemark", "SOURCE_CODE" => "101", "TEMOIN_UE" => FALSE, @@ -3268,6 +3321,7 @@ return [ ], [ "CODE" => "399", + "CODE_ISO3" => "DJI", "LIBELLE" => "Djibouti", "SOURCE_CODE" => "399", "TEMOIN_UE" => FALSE, @@ -3275,6 +3329,7 @@ return [ ], [ "CODE" => "438", + "CODE_ISO3" => "DMA", "LIBELLE" => "Dominique", "SOURCE_CODE" => "438", "TEMOIN_UE" => FALSE, @@ -3282,6 +3337,7 @@ return [ ], [ "CODE" => "301", + "CODE_ISO3" => "EGY", "LIBELLE" => "Egypte", "SOURCE_CODE" => "301", "TEMOIN_UE" => FALSE, @@ -3289,6 +3345,7 @@ return [ ], [ "CODE" => "247", + "CODE_ISO3" => "ARE", "LIBELLE" => "Emirats Arabes Unis", "SOURCE_CODE" => "247", "TEMOIN_UE" => FALSE, @@ -3296,6 +3353,7 @@ return [ ], [ "CODE" => "420", + "CODE_ISO3" => "ECU", "LIBELLE" => "Equateur", "SOURCE_CODE" => "420", "TEMOIN_UE" => FALSE, @@ -3303,6 +3361,7 @@ return [ ], [ "CODE" => "317", + "CODE_ISO3" => "ERI", "LIBELLE" => "Erythrée", "SOURCE_CODE" => "317", "TEMOIN_UE" => FALSE, @@ -3310,6 +3369,7 @@ return [ ], [ "CODE" => "134", + "CODE_ISO3" => "ESP", "LIBELLE" => "Espagne", "SOURCE_CODE" => "134", "TEMOIN_UE" => FALSE, @@ -3317,6 +3377,7 @@ return [ ], [ "CODE" => "106", + "CODE_ISO3" => "EST", "LIBELLE" => "Estonie", "SOURCE_CODE" => "106", "TEMOIN_UE" => FALSE, @@ -3332,6 +3393,7 @@ return [ ], [ "CODE" => "404", + "CODE_ISO3" => "USA", "LIBELLE" => "Etats-Unis d'Amérique", "SOURCE_CODE" => "404", "TEMOIN_UE" => FALSE, @@ -3339,6 +3401,7 @@ return [ ], [ "CODE" => "315", + "CODE_ISO3" => "ETH", "LIBELLE" => "Ethiopie", "SOURCE_CODE" => "315", "TEMOIN_UE" => FALSE, @@ -3346,6 +3409,7 @@ return [ ], [ "CODE" => "508", + "CODE_ISO3" => "FJI", "LIBELLE" => "Fidji", "SOURCE_CODE" => "508", "TEMOIN_UE" => FALSE, @@ -3353,6 +3417,7 @@ return [ ], [ "CODE" => "105", + "CODE_ISO3" => "FIN", "LIBELLE" => "Finlande", "SOURCE_CODE" => "105", "TEMOIN_UE" => FALSE, @@ -3360,6 +3425,7 @@ return [ ], [ "CODE" => "100", + "CODE_ISO3" => "FRA", "LIBELLE" => "France", "SOURCE_CODE" => "100", "TEMOIN_UE" => FALSE, @@ -3367,6 +3433,7 @@ return [ ], [ "CODE" => "328", + "CODE_ISO3" => "GAB", "LIBELLE" => "Gabon", "SOURCE_CODE" => "328", "TEMOIN_UE" => FALSE, @@ -3374,6 +3441,7 @@ return [ ], [ "CODE" => "304", + "CODE_ISO3" => "GMB", "LIBELLE" => "Gambie", "SOURCE_CODE" => "304", "TEMOIN_UE" => FALSE, @@ -3381,6 +3449,7 @@ return [ ], [ "CODE" => "329", + "CODE_ISO3" => "GHA", "LIBELLE" => "Ghana", "SOURCE_CODE" => "329", "TEMOIN_UE" => FALSE, @@ -3388,6 +3457,7 @@ return [ ], [ "CODE" => "133", + "CODE_ISO3" => "GIB", "LIBELLE" => "Gibraltar", "SOURCE_CODE" => "133", "TEMOIN_UE" => FALSE, @@ -3395,6 +3465,7 @@ return [ ], [ "CODE" => "435", + "CODE_ISO3" => "GRD", "LIBELLE" => "Grenade", "SOURCE_CODE" => "435", "TEMOIN_UE" => FALSE, @@ -3402,6 +3473,7 @@ return [ ], [ "CODE" => "430", + "CODE_ISO3" => "GRL", "LIBELLE" => "Groenland", "SOURCE_CODE" => "430", "TEMOIN_UE" => FALSE, @@ -3409,6 +3481,7 @@ return [ ], [ "CODE" => "126", + "CODE_ISO3" => "GRC", "LIBELLE" => "Grèce", "SOURCE_CODE" => "126", "TEMOIN_UE" => FALSE, @@ -3416,6 +3489,7 @@ return [ ], [ "CODE" => "409", + "CODE_ISO3" => "GTM", "LIBELLE" => "Guatemala", "SOURCE_CODE" => "409", "TEMOIN_UE" => FALSE, @@ -3423,6 +3497,7 @@ return [ ], [ "CODE" => "392", + "CODE_ISO3" => "GNB", "LIBELLE" => "Guiné-Bissau", "SOURCE_CODE" => "392", "TEMOIN_UE" => FALSE, @@ -3430,6 +3505,7 @@ return [ ], [ "CODE" => "330", + "CODE_ISO3" => "GIN", "LIBELLE" => "Guinée", "SOURCE_CODE" => "330", "TEMOIN_UE" => FALSE, @@ -3437,6 +3513,7 @@ return [ ], [ "CODE" => "314", + "CODE_ISO3" => "GNQ", "LIBELLE" => "Guinée équatoriale", "SOURCE_CODE" => "314", "TEMOIN_UE" => FALSE, @@ -3444,6 +3521,7 @@ return [ ], [ "CODE" => "428", + "CODE_ISO3" => "GUY", "LIBELLE" => "Guyana", "SOURCE_CODE" => "428", "TEMOIN_UE" => FALSE, @@ -3451,6 +3529,7 @@ return [ ], [ "CODE" => "255", + "CODE_ISO3" => "GEO", "LIBELLE" => "Géorgie", "SOURCE_CODE" => "255", "TEMOIN_UE" => FALSE, @@ -3458,6 +3537,7 @@ return [ ], [ "CODE" => "410", + "CODE_ISO3" => "HTI", "LIBELLE" => "Haiti", "SOURCE_CODE" => "410", "TEMOIN_UE" => FALSE, @@ -3473,6 +3553,7 @@ return [ ], [ "CODE" => "411", + "CODE_ISO3" => "HND", "LIBELLE" => "Honduras", "SOURCE_CODE" => "411", "TEMOIN_UE" => FALSE, @@ -3488,6 +3569,7 @@ return [ ], [ "CODE" => "112", + "CODE_ISO3" => "HUN", "LIBELLE" => "Hongrie", "SOURCE_CODE" => "112", "TEMOIN_UE" => FALSE, @@ -3503,6 +3585,7 @@ return [ ], [ "CODE" => "223", + "CODE_ISO3" => "IND", "LIBELLE" => "Inde", "SOURCE_CODE" => "223", "TEMOIN_UE" => FALSE, @@ -3510,6 +3593,7 @@ return [ ], [ "CODE" => "231", + "CODE_ISO3" => "IDN", "LIBELLE" => "Indonésie", "SOURCE_CODE" => "231", "TEMOIN_UE" => FALSE, @@ -3517,6 +3601,7 @@ return [ ], [ "CODE" => "204", + "CODE_ISO3" => "IRN", "LIBELLE" => "Iran", "SOURCE_CODE" => "204", "TEMOIN_UE" => FALSE, @@ -3524,6 +3609,7 @@ return [ ], [ "CODE" => "203", + "CODE_ISO3" => "IRQ", "LIBELLE" => "Iraq", "SOURCE_CODE" => "203", "TEMOIN_UE" => FALSE, @@ -3531,6 +3617,7 @@ return [ ], [ "CODE" => "136", + "CODE_ISO3" => "IRL", "LIBELLE" => "Irlande", "SOURCE_CODE" => "136", "TEMOIN_UE" => FALSE, @@ -3538,6 +3625,7 @@ return [ ], [ "CODE" => "102", + "CODE_ISO3" => "ISL", "LIBELLE" => "Islande", "SOURCE_CODE" => "102", "TEMOIN_UE" => FALSE, @@ -3545,6 +3633,7 @@ return [ ], [ "CODE" => "207", + "CODE_ISO3" => "ISR", "LIBELLE" => "Israel", "SOURCE_CODE" => "207", "TEMOIN_UE" => FALSE, @@ -3552,6 +3641,7 @@ return [ ], [ "CODE" => "127", + "CODE_ISO3" => "ITA", "LIBELLE" => "Italie", "SOURCE_CODE" => "127", "TEMOIN_UE" => FALSE, @@ -3559,6 +3649,7 @@ return [ ], [ "CODE" => "426", + "CODE_ISO3" => "JAM", "LIBELLE" => "Jamaïque", "SOURCE_CODE" => "426", "TEMOIN_UE" => FALSE, @@ -3566,6 +3657,7 @@ return [ ], [ "CODE" => "217", + "CODE_ISO3" => "JPN", "LIBELLE" => "Japon", "SOURCE_CODE" => "217", "TEMOIN_UE" => FALSE, @@ -3573,6 +3665,7 @@ return [ ], [ "CODE" => "222", + "CODE_ISO3" => "JOR", "LIBELLE" => "Jordanie", "SOURCE_CODE" => "222", "TEMOIN_UE" => FALSE, @@ -3588,6 +3681,7 @@ return [ ], [ "CODE" => "256", + "CODE_ISO3" => "KAZ", "LIBELLE" => "Kazakhstan", "SOURCE_CODE" => "256", "TEMOIN_UE" => FALSE, @@ -3595,6 +3689,7 @@ return [ ], [ "CODE" => "332", + "CODE_ISO3" => "KEN", "LIBELLE" => "Kenya", "SOURCE_CODE" => "332", "TEMOIN_UE" => FALSE, @@ -3602,6 +3697,7 @@ return [ ], [ "CODE" => "257", + "CODE_ISO3" => "KGZ", "LIBELLE" => "Kirghizistan", "SOURCE_CODE" => "257", "TEMOIN_UE" => FALSE, @@ -3609,6 +3705,7 @@ return [ ], [ "CODE" => "513", + "CODE_ISO3" => "KIR", "LIBELLE" => "Kiribati", "SOURCE_CODE" => "513", "TEMOIN_UE" => FALSE, @@ -3623,6 +3720,7 @@ return [ ], [ "CODE" => "240", + "CODE_ISO3" => "KWT", "LIBELLE" => "Koweit", "SOURCE_CODE" => "240", "TEMOIN_UE" => FALSE, @@ -3638,6 +3736,7 @@ return [ ], [ "CODE" => "241", + "CODE_ISO3" => "LAO", "LIBELLE" => "Laos", "SOURCE_CODE" => "241", "TEMOIN_UE" => FALSE, @@ -3645,6 +3744,7 @@ return [ ], [ "CODE" => "348", + "CODE_ISO3" => "LSO", "LIBELLE" => "Lesotho", "SOURCE_CODE" => "348", "TEMOIN_UE" => FALSE, @@ -3652,6 +3752,7 @@ return [ ], [ "CODE" => "107", + "CODE_ISO3" => "LVA", "LIBELLE" => "Lettonie", "SOURCE_CODE" => "107", "TEMOIN_UE" => FALSE, @@ -3659,6 +3760,7 @@ return [ ], [ "CODE" => "205", + "CODE_ISO3" => "LBN", "LIBELLE" => "Liban", "SOURCE_CODE" => "205", "TEMOIN_UE" => FALSE, @@ -3666,6 +3768,7 @@ return [ ], [ "CODE" => "302", + "CODE_ISO3" => "LBR", "LIBELLE" => "Liberia", "SOURCE_CODE" => "302", "TEMOIN_UE" => FALSE, @@ -3673,6 +3776,7 @@ return [ ], [ "CODE" => "113", + "CODE_ISO3" => "LIE", "LIBELLE" => "Liechtenstein", "SOURCE_CODE" => "113", "TEMOIN_UE" => FALSE, @@ -3680,6 +3784,7 @@ return [ ], [ "CODE" => "108", + "CODE_ISO3" => "LTU", "LIBELLE" => "Lituanie", "SOURCE_CODE" => "108", "TEMOIN_UE" => FALSE, @@ -3687,6 +3792,7 @@ return [ ], [ "CODE" => "137", + "CODE_ISO3" => "LUX", "LIBELLE" => "Luxembourg", "SOURCE_CODE" => "137", "TEMOIN_UE" => FALSE, @@ -3694,6 +3800,7 @@ return [ ], [ "CODE" => "316", + "CODE_ISO3" => "LBY", "LIBELLE" => "Lybie", "SOURCE_CODE" => "316", "TEMOIN_UE" => FALSE, @@ -3709,6 +3816,7 @@ return [ ], [ "CODE" => "156", + "CODE_ISO3" => "MKD", "LIBELLE" => "Macédoine", "SOURCE_CODE" => "156", "TEMOIN_UE" => FALSE, @@ -3716,6 +3824,7 @@ return [ ], [ "CODE" => "333", + "CODE_ISO3" => "MDG", "LIBELLE" => "Madagascar", "SOURCE_CODE" => "333", "TEMOIN_UE" => FALSE, @@ -3723,6 +3832,7 @@ return [ ], [ "CODE" => "227", + "CODE_ISO3" => "MYS", "LIBELLE" => "Malaisie", "SOURCE_CODE" => "227", "TEMOIN_UE" => FALSE, @@ -3730,6 +3840,7 @@ return [ ], [ "CODE" => "334", + "CODE_ISO3" => "MWI", "LIBELLE" => "Malawi", "SOURCE_CODE" => "334", "TEMOIN_UE" => FALSE, @@ -3737,6 +3848,7 @@ return [ ], [ "CODE" => "229", + "CODE_ISO3" => "MDV", "LIBELLE" => "Maldives", "SOURCE_CODE" => "229", "TEMOIN_UE" => FALSE, @@ -3744,6 +3856,7 @@ return [ ], [ "CODE" => "335", + "CODE_ISO3" => "MLI", "LIBELLE" => "Mali", "SOURCE_CODE" => "335", "TEMOIN_UE" => FALSE, @@ -3751,6 +3864,7 @@ return [ ], [ "CODE" => "144", + "CODE_ISO3" => "MLT", "LIBELLE" => "Malte", "SOURCE_CODE" => "144", "TEMOIN_UE" => FALSE, @@ -3766,6 +3880,7 @@ return [ ], [ "CODE" => "350", + "CODE_ISO3" => "MAR", "LIBELLE" => "Maroc", "SOURCE_CODE" => "350", "TEMOIN_UE" => FALSE, @@ -3773,6 +3888,7 @@ return [ ], [ "CODE" => "515", + "CODE_ISO3" => "MHL", "LIBELLE" => "Marshall", "SOURCE_CODE" => "515", "TEMOIN_UE" => FALSE, @@ -3780,6 +3896,7 @@ return [ ], [ "CODE" => "390", + "CODE_ISO3" => "MUS", "LIBELLE" => "Maurice", "SOURCE_CODE" => "390", "TEMOIN_UE" => FALSE, @@ -3787,6 +3904,7 @@ return [ ], [ "CODE" => "336", + "CODE_ISO3" => "MRT", "LIBELLE" => "Mauritanie", "SOURCE_CODE" => "336", "TEMOIN_UE" => FALSE, @@ -3802,6 +3920,7 @@ return [ ], [ "CODE" => "405", + "CODE_ISO3" => "MEX", "LIBELLE" => "Mexique", "SOURCE_CODE" => "405", "TEMOIN_UE" => FALSE, @@ -3809,6 +3928,7 @@ return [ ], [ "CODE" => "516", + "CODE_ISO3" => "FSM", "LIBELLE" => "Micronésie", "SOURCE_CODE" => "516", "TEMOIN_UE" => FALSE, @@ -3816,6 +3936,7 @@ return [ ], [ "CODE" => "151", + "CODE_ISO3" => "MDA", "LIBELLE" => "Moldavie", "SOURCE_CODE" => "151", "TEMOIN_UE" => FALSE, @@ -3823,6 +3944,7 @@ return [ ], [ "CODE" => "138", + "CODE_ISO3" => "MCO", "LIBELLE" => "Monaco", "SOURCE_CODE" => "138", "TEMOIN_UE" => FALSE, @@ -3830,6 +3952,7 @@ return [ ], [ "CODE" => "242", + "CODE_ISO3" => "MNG", "LIBELLE" => "Mongolie", "SOURCE_CODE" => "242", "TEMOIN_UE" => FALSE, @@ -3837,6 +3960,7 @@ return [ ], [ "CODE" => "120", + "CODE_ISO3" => "MNE", "LIBELLE" => "Monténégro", "SOURCE_CODE" => "120", "TEMOIN_UE" => FALSE, @@ -3844,6 +3968,7 @@ return [ ], [ "CODE" => "393", + "CODE_ISO3" => "MOZ", "LIBELLE" => "Mozambique", "SOURCE_CODE" => "393", "TEMOIN_UE" => FALSE, @@ -3851,6 +3976,7 @@ return [ ], [ "CODE" => "311", + "CODE_ISO3" => "NAM", "LIBELLE" => "Namibie", "SOURCE_CODE" => "311", "TEMOIN_UE" => FALSE, @@ -3858,6 +3984,7 @@ return [ ], [ "CODE" => "507", + "CODE_ISO3" => "NRU", "LIBELLE" => "Nauru", "SOURCE_CODE" => "507", "TEMOIN_UE" => FALSE, @@ -3865,6 +3992,7 @@ return [ ], [ "CODE" => "412", + "CODE_ISO3" => "NIC", "LIBELLE" => "Nicaragua", "SOURCE_CODE" => "412", "TEMOIN_UE" => FALSE, @@ -3872,6 +4000,7 @@ return [ ], [ "CODE" => "337", + "CODE_ISO3" => "NER", "LIBELLE" => "Niger", "SOURCE_CODE" => "337", "TEMOIN_UE" => FALSE, @@ -3879,6 +4008,7 @@ return [ ], [ "CODE" => "338", + "CODE_ISO3" => "NGA", "LIBELLE" => "Nigeria", "SOURCE_CODE" => "338", "TEMOIN_UE" => FALSE, @@ -3886,6 +4016,7 @@ return [ ], [ "CODE" => "103", + "CODE_ISO3" => "NOR", "LIBELLE" => "Norvège", "SOURCE_CODE" => "103", "TEMOIN_UE" => FALSE, @@ -3901,6 +4032,7 @@ return [ ], [ "CODE" => "502", + "CODE_ISO3" => "NZL", "LIBELLE" => "Nouvelle-Zélande", "SOURCE_CODE" => "502", "TEMOIN_UE" => FALSE, @@ -3908,6 +4040,7 @@ return [ ], [ "CODE" => "215", + "CODE_ISO3" => "NPL", "LIBELLE" => "Népal", "SOURCE_CODE" => "215", "TEMOIN_UE" => FALSE, @@ -3915,6 +4048,7 @@ return [ ], [ "CODE" => "250", + "CODE_ISO3" => "OMN", "LIBELLE" => "Oman", "SOURCE_CODE" => "250", "TEMOIN_UE" => FALSE, @@ -3922,6 +4056,7 @@ return [ ], [ "CODE" => "339", + "CODE_ISO3" => "UGA", "LIBELLE" => "Ouganda", "SOURCE_CODE" => "339", "TEMOIN_UE" => FALSE, @@ -3929,6 +4064,7 @@ return [ ], [ "CODE" => "258", + "CODE_ISO3" => "UZB", "LIBELLE" => "Ouzbekistan", "SOURCE_CODE" => "258", "TEMOIN_UE" => FALSE, @@ -3936,6 +4072,7 @@ return [ ], [ "CODE" => "213", + "CODE_ISO3" => "PAK", "LIBELLE" => "Pakistan", "SOURCE_CODE" => "213", "TEMOIN_UE" => FALSE, @@ -3943,6 +4080,7 @@ return [ ], [ "CODE" => "517", + "CODE_ISO3" => "PLW", "LIBELLE" => "Palaos", "SOURCE_CODE" => "517", "TEMOIN_UE" => FALSE, @@ -3950,6 +4088,7 @@ return [ ], [ "CODE" => "261", + "CODE_ISO3" => "PSE", "LIBELLE" => "Palestine", "SOURCE_CODE" => "261", "TEMOIN_UE" => FALSE, @@ -3957,6 +4096,7 @@ return [ ], [ "CODE" => "413", + "CODE_ISO3" => "PAN", "LIBELLE" => "Panama", "SOURCE_CODE" => "413", "TEMOIN_UE" => FALSE, @@ -3964,6 +4104,7 @@ return [ ], [ "CODE" => "510", + "CODE_ISO3" => "PNG", "LIBELLE" => "Papouasie-Nouvelle-Guinée", "SOURCE_CODE" => "510", "TEMOIN_UE" => FALSE, @@ -3971,6 +4112,7 @@ return [ ], [ "CODE" => "421", + "CODE_ISO3" => "PRY", "LIBELLE" => "Paraguay", "SOURCE_CODE" => "421", "TEMOIN_UE" => FALSE, @@ -3978,6 +4120,7 @@ return [ ], [ "CODE" => "135", + "CODE_ISO3" => "NLD", "LIBELLE" => "Pays-Bas", "SOURCE_CODE" => "135", "TEMOIN_UE" => FALSE, @@ -3985,6 +4128,7 @@ return [ ], [ "CODE" => "220", + "CODE_ISO3" => "PHL", "LIBELLE" => "Philippines", "SOURCE_CODE" => "220", "TEMOIN_UE" => FALSE, @@ -3992,6 +4136,7 @@ return [ ], [ "CODE" => "503", + "CODE_ISO3" => "PCN", "LIBELLE" => "Pitcairn (Ile de Pitcairn)", "SOURCE_CODE" => "503", "TEMOIN_UE" => FALSE, @@ -3999,6 +4144,7 @@ return [ ], [ "CODE" => "122", + "CODE_ISO3" => "POL", "LIBELLE" => "Pologne", "SOURCE_CODE" => "122", "TEMOIN_UE" => FALSE, @@ -4014,6 +4160,7 @@ return [ ], [ "CODE" => "139", + "CODE_ISO3" => "PRT", "LIBELLE" => "Portugal", "SOURCE_CODE" => "139", "TEMOIN_UE" => FALSE, @@ -4036,6 +4183,7 @@ return [ ], [ "CODE" => "422", + "CODE_ISO3" => "PER", "LIBELLE" => "Pérou", "SOURCE_CODE" => "422", "TEMOIN_UE" => FALSE, @@ -4043,6 +4191,7 @@ return [ ], [ "CODE" => "248", + "CODE_ISO3" => "QAT", "LIBELLE" => "Qatar", "SOURCE_CODE" => "248", "TEMOIN_UE" => FALSE, @@ -4050,6 +4199,7 @@ return [ ], [ "CODE" => "114", + "CODE_ISO3" => "ROU", "LIBELLE" => "Roumanie", "SOURCE_CODE" => "114", "TEMOIN_UE" => FALSE, @@ -4057,6 +4207,7 @@ return [ ], [ "CODE" => "132", + "CODE_ISO3" => "GBR", "LIBELLE" => "Royaume-Uni", "SOURCE_CODE" => "132", "TEMOIN_UE" => FALSE, @@ -4064,6 +4215,7 @@ return [ ], [ "CODE" => "123", + "CODE_ISO3" => "RUS", "LIBELLE" => "Russie", "SOURCE_CODE" => "123", "TEMOIN_UE" => FALSE, @@ -4071,6 +4223,7 @@ return [ ], [ "CODE" => "340", + "CODE_ISO3" => "RWA", "LIBELLE" => "Rwanda", "SOURCE_CODE" => "340", "TEMOIN_UE" => FALSE, @@ -4078,6 +4231,7 @@ return [ ], [ "CODE" => "408", + "CODE_ISO3" => "DOM", "LIBELLE" => "République dominicaine", "SOURCE_CODE" => "408", "TEMOIN_UE" => FALSE, @@ -4085,6 +4239,7 @@ return [ ], [ "CODE" => "389", + "CODE_ISO3" => "ESH", "LIBELLE" => "Sahara Occidental", "SOURCE_CODE" => "389", "TEMOIN_UE" => FALSE, @@ -4092,6 +4247,7 @@ return [ ], [ "CODE" => "442", + "CODE_ISO3" => "KNA", "LIBELLE" => "Saint-Christophe-et-Nieves", "SOURCE_CODE" => "442", "TEMOIN_UE" => FALSE, @@ -4099,6 +4255,7 @@ return [ ], [ "CODE" => "128", + "CODE_ISO3" => "SMR", "LIBELLE" => "Saint-Marin", "SOURCE_CODE" => "128", "TEMOIN_UE" => FALSE, @@ -4106,6 +4263,7 @@ return [ ], [ "CODE" => "445", + "CODE_ISO3" => "SXM", "LIBELLE" => "Saint-Martin (partie néerlandaise)", "SOURCE_CODE" => "445", "TEMOIN_UE" => FALSE, @@ -4121,6 +4279,7 @@ return [ ], [ "CODE" => "440", + "CODE_ISO3" => "VCT", "LIBELLE" => "Saint-Vincent-et-Les Grenadines", "SOURCE_CODE" => "440", "TEMOIN_UE" => FALSE, @@ -4128,6 +4287,7 @@ return [ ], [ "CODE" => "306", + "CODE_ISO3" => "SHN", "LIBELLE" => "Sainte-Hélène", "SOURCE_CODE" => "306", "TEMOIN_UE" => FALSE, @@ -4135,6 +4295,7 @@ return [ ], [ "CODE" => "439", + "CODE_ISO3" => "LCA", "LIBELLE" => "Sainte-Lucie", "SOURCE_CODE" => "439", "TEMOIN_UE" => FALSE, @@ -4142,6 +4303,7 @@ return [ ], [ "CODE" => "512", + "CODE_ISO3" => "SLB", "LIBELLE" => "Salomon", "SOURCE_CODE" => "512", "TEMOIN_UE" => FALSE, @@ -4149,6 +4311,7 @@ return [ ], [ "CODE" => "414", + "CODE_ISO3" => "SLV", "LIBELLE" => "Salvador", "SOURCE_CODE" => "414", "TEMOIN_UE" => FALSE, @@ -4156,6 +4319,7 @@ return [ ], [ "CODE" => "506", + "CODE_ISO3" => "WSM", "LIBELLE" => "Samoa occidentales", "SOURCE_CODE" => "506", "TEMOIN_UE" => FALSE, @@ -4170,6 +4334,7 @@ return [ ], [ "CODE" => "394", + "CODE_ISO3" => "STP", "LIBELLE" => "Sao Tomé-et-Principe", "SOURCE_CODE" => "394", "TEMOIN_UE" => FALSE, @@ -4177,6 +4342,7 @@ return [ ], [ "CODE" => "121", + "CODE_ISO3" => "SRB", "LIBELLE" => "Serbie et Monténégro", "SOURCE_CODE" => "121", "TEMOIN_UE" => FALSE, @@ -4184,6 +4350,7 @@ return [ ], [ "CODE" => "398", + "CODE_ISO3" => "SYC", "LIBELLE" => "Seychelles", "SOURCE_CODE" => "398", "TEMOIN_UE" => FALSE, @@ -4199,6 +4366,7 @@ return [ ], [ "CODE" => "342", + "CODE_ISO3" => "SLE", "LIBELLE" => "Sierra Leone", "SOURCE_CODE" => "342", "TEMOIN_UE" => FALSE, @@ -4206,6 +4374,7 @@ return [ ], [ "CODE" => "226", + "CODE_ISO3" => "SGP", "LIBELLE" => "Singapour", "SOURCE_CODE" => "226", "TEMOIN_UE" => FALSE, @@ -4213,6 +4382,7 @@ return [ ], [ "CODE" => "117", + "CODE_ISO3" => "SVK", "LIBELLE" => "Slovaquie", "SOURCE_CODE" => "117", "TEMOIN_UE" => FALSE, @@ -4220,6 +4390,7 @@ return [ ], [ "CODE" => "145", + "CODE_ISO3" => "SVN", "LIBELLE" => "Slovénie", "SOURCE_CODE" => "145", "TEMOIN_UE" => FALSE, @@ -4227,6 +4398,7 @@ return [ ], [ "CODE" => "318", + "CODE_ISO3" => "SOM", "LIBELLE" => "Somalie", "SOURCE_CODE" => "318", "TEMOIN_UE" => FALSE, @@ -4234,6 +4406,7 @@ return [ ], [ "CODE" => "343", + "CODE_ISO3" => "SDN", "LIBELLE" => "Soudan", "SOURCE_CODE" => "343", "TEMOIN_UE" => FALSE, @@ -4241,6 +4414,7 @@ return [ ], [ "CODE" => "349", + "CODE_ISO3" => "SSD", "LIBELLE" => "Soudan du Sud", "SOURCE_CODE" => "349", "TEMOIN_UE" => FALSE, @@ -4256,6 +4430,7 @@ return [ ], [ "CODE" => "235", + "CODE_ISO3" => "LKA", "LIBELLE" => "Sri Lanka", "SOURCE_CODE" => "235", "TEMOIN_UE" => FALSE, @@ -4263,6 +4438,7 @@ return [ ], [ "CODE" => "140", + "CODE_ISO3" => "CHE", "LIBELLE" => "Suisse", "SOURCE_CODE" => "140", "TEMOIN_UE" => FALSE, @@ -4270,6 +4446,7 @@ return [ ], [ "CODE" => "437", + "CODE_ISO3" => "SUR", "LIBELLE" => "Suriname", "SOURCE_CODE" => "437", "TEMOIN_UE" => FALSE, @@ -4277,6 +4454,7 @@ return [ ], [ "CODE" => "104", + "CODE_ISO3" => "SWE", "LIBELLE" => "Suède", "SOURCE_CODE" => "104", "TEMOIN_UE" => FALSE, @@ -4284,6 +4462,7 @@ return [ ], [ "CODE" => "391", + "CODE_ISO3" => "SWZ", "LIBELLE" => "Swaziland", "SOURCE_CODE" => "391", "TEMOIN_UE" => FALSE, @@ -4291,6 +4470,7 @@ return [ ], [ "CODE" => "206", + "CODE_ISO3" => "SYR", "LIBELLE" => "Syrie", "SOURCE_CODE" => "206", "TEMOIN_UE" => FALSE, @@ -4298,6 +4478,7 @@ return [ ], [ "CODE" => "341", + "CODE_ISO3" => "SEN", "LIBELLE" => "Sénégal", "SOURCE_CODE" => "341", "TEMOIN_UE" => FALSE, @@ -4305,6 +4486,7 @@ return [ ], [ "CODE" => "259", + "CODE_ISO3" => "TJK", "LIBELLE" => "Tadjikistan", "SOURCE_CODE" => "259", "TEMOIN_UE" => FALSE, @@ -4312,6 +4494,7 @@ return [ ], [ "CODE" => "236", + "CODE_ISO3" => "TWN", "LIBELLE" => "Taiwan", "SOURCE_CODE" => "236", "TEMOIN_UE" => FALSE, @@ -4327,6 +4510,7 @@ return [ ], [ "CODE" => "309", + "CODE_ISO3" => "TZA", "LIBELLE" => "Tanzanie", "SOURCE_CODE" => "309", "TEMOIN_UE" => FALSE, @@ -4334,6 +4518,7 @@ return [ ], [ "CODE" => "344", + "CODE_ISO3" => "TCD", "LIBELLE" => "Tchad", "SOURCE_CODE" => "344", "TEMOIN_UE" => FALSE, @@ -4341,6 +4526,7 @@ return [ ], [ "CODE" => "116", + "CODE_ISO3" => "CZE", "LIBELLE" => "Tchèque (République tchèque)", "SOURCE_CODE" => "116", "TEMOIN_UE" => FALSE, @@ -4399,6 +4585,7 @@ return [ ], [ "CODE" => "219", + "CODE_ISO3" => "THA", "LIBELLE" => "Thailande", "SOURCE_CODE" => "219", "TEMOIN_UE" => FALSE, @@ -4406,6 +4593,7 @@ return [ ], [ "CODE" => "262", + "CODE_ISO3" => "TLS", "LIBELLE" => "Timor oriental", "SOURCE_CODE" => "262", "TEMOIN_UE" => FALSE, @@ -4413,6 +4601,7 @@ return [ ], [ "CODE" => "345", + "CODE_ISO3" => "TGO", "LIBELLE" => "Togo", "SOURCE_CODE" => "345", "TEMOIN_UE" => FALSE, @@ -4420,6 +4609,7 @@ return [ ], [ "CODE" => "509", + "CODE_ISO3" => "TON", "LIBELLE" => "Tonga", "SOURCE_CODE" => "509", "TEMOIN_UE" => FALSE, @@ -4427,6 +4617,7 @@ return [ ], [ "CODE" => "433", + "CODE_ISO3" => "TTO", "LIBELLE" => "Trinité-et-Tobago", "SOURCE_CODE" => "433", "TEMOIN_UE" => FALSE, @@ -4434,6 +4625,7 @@ return [ ], [ "CODE" => "351", + "CODE_ISO3" => "TUN", "LIBELLE" => "Tunisie", "SOURCE_CODE" => "351", "TEMOIN_UE" => FALSE, @@ -4449,6 +4641,7 @@ return [ ], [ "CODE" => "260", + "CODE_ISO3" => "TKM", "LIBELLE" => "Turkmenistan", "SOURCE_CODE" => "260", "TEMOIN_UE" => FALSE, @@ -4456,6 +4649,7 @@ return [ ], [ "CODE" => "208", + "CODE_ISO3" => "TUR", "LIBELLE" => "Turquie", "SOURCE_CODE" => "208", "TEMOIN_UE" => FALSE, @@ -4463,6 +4657,7 @@ return [ ], [ "CODE" => "511", + "CODE_ISO3" => "TUV", "LIBELLE" => "Tuvalu", "SOURCE_CODE" => "511", "TEMOIN_UE" => FALSE, @@ -4470,6 +4665,7 @@ return [ ], [ "CODE" => "155", + "CODE_ISO3" => "UKR", "LIBELLE" => "Ukraine", "SOURCE_CODE" => "155", "TEMOIN_UE" => FALSE, @@ -4477,6 +4673,7 @@ return [ ], [ "CODE" => "423", + "CODE_ISO3" => "URY", "LIBELLE" => "Uruguay", "SOURCE_CODE" => "423", "TEMOIN_UE" => FALSE, @@ -4484,6 +4681,7 @@ return [ ], [ "CODE" => "514", + "CODE_ISO3" => "VUT", "LIBELLE" => "Vanuatu", "SOURCE_CODE" => "514", "TEMOIN_UE" => FALSE, @@ -4491,6 +4689,7 @@ return [ ], [ "CODE" => "129", + "CODE_ISO3" => "VAT", "LIBELLE" => "Vatican", "SOURCE_CODE" => "129", "TEMOIN_UE" => FALSE, @@ -4498,6 +4697,7 @@ return [ ], [ "CODE" => "424", + "CODE_ISO3" => "VEN", "LIBELLE" => "Venezuela", "SOURCE_CODE" => "424", "TEMOIN_UE" => FALSE, @@ -4505,6 +4705,7 @@ return [ ], [ "CODE" => "243", + "CODE_ISO3" => "VNM", "LIBELLE" => "Viet Nam", "SOURCE_CODE" => "243", "TEMOIN_UE" => FALSE, @@ -4536,6 +4737,7 @@ return [ ], [ "CODE" => "251", + "CODE_ISO3" => "YEM", "LIBELLE" => "Yémen", "SOURCE_CODE" => "251", "TEMOIN_UE" => FALSE, @@ -4559,6 +4761,7 @@ return [ ], [ "CODE" => "346", + "CODE_ISO3" => "ZMB", "LIBELLE" => "Zambie", "SOURCE_CODE" => "346", "TEMOIN_UE" => FALSE, @@ -4566,6 +4769,7 @@ return [ ], [ "CODE" => "310", + "CODE_ISO3" => "ZWE", "LIBELLE" => "Zimbabwe", "SOURCE_CODE" => "310", "TEMOIN_UE" => FALSE, @@ -5968,6 +6172,13 @@ return [ "LIBELLE_LONG" => "Langues et littératures germaniques spé. Langues scandinaves", "SOURCE_CODE" => "1202", ], + [ + "CODES_CORRESP_1" => "14", + "CODES_CORRESP_2" => "14", + "LIBELLE_COURT" => "LL romanes", + "LIBELLE_LONG" => "Langues et littératures romanes", + "SOURCE_CODE" => "14", + ], [ "CODES_CORRESP_1" => "1403", "CODES_CORRESP_2" => "14", @@ -6239,10 +6450,6 @@ return [ "LIBELLE" => "UNICAEN biblio envir docu", "SOURCE_CODE" => "D1053", ], - [ - "LIBELLE" => "tt", - "SOURCE_CODE" => "tt", - ], ], "ETABLISSEMENT" => [ [ @@ -6251,6 +6458,12 @@ return [ "LOCALISATION" => "AHT", "SOURCE_CODE" => "ETR1099", ], + [ + "DEPARTEMENT" => "093", + "LIBELLE" => "Hôpital Avicenne AP-HP", + "LOCALISATION" => "Hôpital", + "SOURCE_CODE" => "HOAVSH", + ], [ "DEPARTEMENT" => "062", "LIBELLE" => "IFREMER centre de Boulogne", @@ -6281,6 +6494,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "ETR1439", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Laboratoire national d'Oak Ridge", + "LOCALISATION" => "Labo", + "SOURCE_CODE" => "ETR1484", + ], [ "DEPARTEMENT" => "061", "LIBELLE" => "3IFA - Centre de Formation des Apprentis", @@ -6443,12 +6662,6 @@ return [ "LOCALISATION" => "CAEN", "SOURCE_CODE" => "0142220M", ], - [ - "DEPARTEMENT" => "014", - "LIBELLE" => "AFTEC", - "LOCALISATION" => "AFTEC", - "SOURCE_CODE" => "0142395C", - ], [ "DEPARTEMENT" => "037", "LIBELLE" => "AFTEC Formation - Indre-et-Loire (CFSA)", @@ -8013,13 +8226,13 @@ return [ "DEPARTEMENT" => "077", "LIBELLE" => "ANTENNE IUFM MELUN IUFM CRETEIL", "LOCALISATION" => "MELUN", - "SOURCE_CODE" => "0772325J", + "SOURCE_CODE" => "0772297D", ], [ "DEPARTEMENT" => "077", "LIBELLE" => "ANTENNE IUFM MELUN IUFM CRETEIL", "LOCALISATION" => "MELUN", - "SOURCE_CODE" => "0772297D", + "SOURCE_CODE" => "0772325J", ], [ "DEPARTEMENT" => "048", @@ -8067,13 +8280,13 @@ return [ "DEPARTEMENT" => "006", "LIBELLE" => "ANTENNE IUFM NICE IUFM NICE", "LOCALISATION" => "NICE", - "SOURCE_CODE" => "0061551D", + "SOURCE_CODE" => "0060658H", ], [ "DEPARTEMENT" => "006", "LIBELLE" => "ANTENNE IUFM NICE IUFM NICE", "LOCALISATION" => "NICE", - "SOURCE_CODE" => "0060658H", + "SOURCE_CODE" => "0061551D", ], [ "DEPARTEMENT" => "030", @@ -8441,6 +8654,12 @@ return [ "LOCALISATION" => "PARIS", "SOURCE_CODE" => "0750008B", ], + [ + "DEPARTEMENT" => "031", + "LIBELLE" => "Adonis", + "LOCALISATION" => "Adonis", + "SOURCE_CODE" => "0312717K", + ], [ "DEPARTEMENT" => "034", "LIBELLE" => "Adonis - Ecole du second degré professionnelle privée", @@ -8501,6 +8720,12 @@ return [ "LOCALISATION" => "RENNES", "SOURCE_CODE" => "0352692L", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Agroscope", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "ETR1467", + ], [ "DEPARTEMENT" => "078", "LIBELLE" => "Airbus", @@ -8561,6 +8786,12 @@ return [ "LOCALISATION" => "DUNKERQUE", "SOURCE_CODE" => "0596388Y", ], + [ + "DEPARTEMENT" => "059", + "LIBELLE" => "Antenne de l'AFPA de Roubaix", + "LOCALISATION" => "AFPA Rouba", + "SOURCE_CODE" => "0597063G", + ], [ "DEPARTEMENT" => "075", "LIBELLE" => "Archives Nationales Paris", @@ -9185,6 +9416,12 @@ return [ "LOCALISATION" => "CEREMA", "SOURCE_CODE" => "CEREMA", ], + [ + "DEPARTEMENT" => "014", + "LIBELLE" => "CERMN - Normandie Université", + "LOCALISATION" => "CNRS", + "SOURCE_CODE" => "CERMCNRS", + ], [ "DEPARTEMENT" => "031", "LIBELLE" => "CERPOP - Centre d'Epidémiologie et de Recherche en Santé des Populations", @@ -9327,13 +9564,13 @@ return [ "DEPARTEMENT" => "076", "LIBELLE" => "CFA de Seine-Maritime - NaturaPOLE", "LOCALISATION" => "CFA", - "SOURCE_CODE" => "0762760M", + "SOURCE_CODE" => "0763411V", ], [ "DEPARTEMENT" => "076", "LIBELLE" => "CFA de Seine-Maritime - NaturaPOLE", "LOCALISATION" => "CFA", - "SOURCE_CODE" => "0763411V", + "SOURCE_CODE" => "0762760M", ], [ "DEPARTEMENT" => "092", @@ -9761,6 +9998,12 @@ return [ "LOCALISATION" => "D.R.CNRS", "SOURCE_CODE" => "0332865K", ], + [ + "DEPARTEMENT" => "094", + "LIBELLE" => "CNRS UMR 8230", + "LOCALISATION" => "CNRS", + "SOURCE_CODE" => "CUMR8230", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "COLLEGE DU SACRE COEUR DE GHAMRA", @@ -10301,6 +10544,12 @@ return [ "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR1404", ], + [ + "DEPARTEMENT" => "078", + "LIBELLE" => "Campus Innovation Paris d'Air Liquide", + "LOCALISATION" => "Campus", + "SOURCE_CODE" => "CAMPARIN", + ], [ "DEPARTEMENT" => "033", "LIBELLE" => "Campus du Lac - CCI Bordeaux Gironde", @@ -10325,6 +10574,12 @@ return [ "LOCALISATION" => "Ecole", "SOURCE_CODE" => "0911494E", ], + [ + "DEPARTEMENT" => "035", + "LIBELLE" => "CentraleSupélec Rennes Campus", + "LOCALISATION" => "SUPELEC CE", + "SOURCE_CODE" => "0351781W", + ], [ "DEPARTEMENT" => "013", "LIBELLE" => "Centre de physique des Particules de Marseille", @@ -10385,6 +10640,18 @@ return [ "LOCALISATION" => "CHU", "SOURCE_CODE" => "CHU-BRES", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Centre Hospitalier Universitaire Vaudois (CHUV)", + "LOCALISATION" => "CHU", + "SOURCE_CODE" => "ETR1468", + ], + [ + "DEPARTEMENT" => "059", + "LIBELLE" => "Centre Hospitalier Universitaire de Lille", + "LOCALISATION" => "CHU", + "SOURCE_CODE" => "CHU_L", + ], [ "DEPARTEMENT" => "006", "LIBELLE" => "Centre Hospitalier Universitaire de Nice", @@ -10397,6 +10664,12 @@ return [ "LOCALISATION" => "CHU", "SOURCE_CODE" => "CHU-REIM", ], + [ + "DEPARTEMENT" => "035", + "LIBELLE" => "Centre Hospitalier Universitaire de Rennes", + "LOCALISATION" => "CHU", + "SOURCE_CODE" => "CHU_R", + ], [ "DEPARTEMENT" => "037", "LIBELLE" => "Centre Hospitalier Universitaire de Tours", @@ -10499,6 +10772,12 @@ return [ "LOCALISATION" => "Centre Uni", "SOURCE_CODE" => "0422152L", ], + [ + "DEPARTEMENT" => "064", + "LIBELLE" => "Centre d'Analyse Théorique et de Traitement des données économiques (CATT) Université de Pau", + "LOCALISATION" => "Centre", + "SOURCE_CODE" => "CATTPAU", + ], [ "DEPARTEMENT" => "031", "LIBELLE" => "Centre d'Elaboration de Matériaux et d'Etudes structurales", @@ -10631,6 +10910,12 @@ return [ "LOCALISATION" => "CFA", "SOURCE_CODE" => "0311717Y", ], + [ + "DEPARTEMENT" => "056", + "LIBELLE" => "Centre de recherche Saint Cyr Coetquidan", + "LOCALISATION" => "Centre", + "SOURCE_CODE" => "CRSCYCOE", + ], [ "DEPARTEMENT" => "049", "LIBELLE" => "Centre d’Enseignement et de Recherche de l’ENSAM d’Angers", @@ -10643,6 +10928,12 @@ return [ "LOCALISATION" => "CCC", "SOURCE_CODE" => "ETR1128", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Centre for Environment, Fisheries & Aquaculture Science", + "LOCALISATION" => "Fisheries", + "SOURCE_CODE" => "ETR3000", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Centre for environnement fisheries and aquaculture Sciencee", @@ -10697,6 +10988,12 @@ return [ "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR959", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "CiTCom - CNRS Université Paris Cité", + "LOCALISATION" => "CNRS", + "SOURCE_CODE" => "CITCCNRS", + ], [ "DEPARTEMENT" => "091", "LIBELLE" => "Cisbio International-Shering-Gif-sur-Yvette", @@ -10883,6 +11180,12 @@ return [ "LOCALISATION" => "Etab.", "SOURCE_CODE" => "COURCAS", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "Cours par correspondance - LEGENDRE", + "LOCALISATION" => "LEGENDRE", + "SOURCE_CODE" => "0753446N", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Crepuq - Canada", @@ -11279,6 +11582,12 @@ return [ "LOCALISATION" => "Suisse", "SOURCE_CODE" => "ETR606", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Deutsches Elektronen-Synchrotron (Deutsches Elektronen-Synchrotron (DESY))", + "LOCALISATION" => "DESY", + "SOURCE_CODE" => "ETR1459", + ], [ "DEPARTEMENT" => "018", "LIBELLE" => "Direction Générale de l'Armement", @@ -13877,12 +14186,6 @@ return [ "LOCALISATION" => "AR GRENOB", "SOURCE_CODE" => "0380141X", ], - [ - "DEPARTEMENT" => "013", - "LIBELLE" => "ECOLE ARCHITECTURE MARSEILLE LUMINY (DE)", - "LOCALISATION" => "AR MARSEIL", - "SOURCE_CODE" => "0130236L", - ], [ "DEPARTEMENT" => "092", "LIBELLE" => "ECOLE ARCHITECTURE PARIS LA DEFENSE", @@ -16161,13 +16464,13 @@ return [ "DEPARTEMENT" => "075", "LIBELLE" => "ECOLE SUPERIEURE LIBRE", "LOCALISATION" => "ES PARIS", - "SOURCE_CODE" => "0755466J", + "SOURCE_CODE" => "0755467K", ], [ "DEPARTEMENT" => "075", "LIBELLE" => "ECOLE SUPERIEURE LIBRE", "LOCALISATION" => "ES PARIS", - "SOURCE_CODE" => "0755467K", + "SOURCE_CODE" => "0755466J", ], [ "DEPARTEMENT" => "075", @@ -18425,6 +18728,12 @@ return [ "LOCALISATION" => "EXIA-CESI", "SOURCE_CODE" => "0672969N", ], + [ + "DEPARTEMENT" => "078", + "LIBELLE" => "Early Drug Development - Campus Innovation Air Liquide", + "LOCALISATION" => "AIR LIQUID", + "SOURCE_CODE" => "078AIRLI", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Eckerd Collège Floride USA", @@ -18539,6 +18848,12 @@ return [ "LOCALISATION" => "Ecole", "SOURCE_CODE" => "0931000X", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Ecole Mohammadia d'Ingénieurs", + "LOCALISATION" => "Ecole", + "SOURCE_CODE" => "ETR1479", + ], [ "DEPARTEMENT" => "044", "LIBELLE" => "Ecole Nantaise de commerce (ENACOM)", @@ -18551,6 +18866,12 @@ return [ "LOCALISATION" => "Ecole", "SOURCE_CODE" => "0753478Y", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Ecole Nationale Supérieure d' Informatique (Ex.INI)", + "LOCALISATION" => "Ecole", + "SOURCE_CODE" => "ETR1480", + ], [ "DEPARTEMENT" => "054", "LIBELLE" => "Ecole Nationale Supérieure d'Agronomie et des Industries Alimentaires", @@ -18911,12 +19232,6 @@ return [ "LOCALISATION" => "CESSON-SEV", "SOURCE_CODE" => "9SUPELEC", ], - [ - "DEPARTEMENT" => "035", - "LIBELLE" => "Ecole Supérieure d'Electricité", - "LOCALISATION" => "SUPELEC CE", - "SOURCE_CODE" => "0351781W", - ], [ "DEPARTEMENT" => "091", "LIBELLE" => "Ecole Supérieure d'Electricité", @@ -18989,6 +19304,12 @@ return [ "LOCALISATION" => "Ecole", "SOURCE_CODE" => "0753602H", ], + [ + "DEPARTEMENT" => "092", + "LIBELLE" => "Ecole Supérieure de la Banque - ESB", + "LOCALISATION" => "ESB", + "SOURCE_CODE" => "0922791J", + ], [ "DEPARTEMENT" => "072", "LIBELLE" => "Ecole Supérieure des Géomètres Topographes", @@ -19133,6 +19454,12 @@ return [ "LOCALISATION" => "Ecole dans", "SOURCE_CODE" => "0922579D", ], + [ + "DEPARTEMENT" => "002", + "LIBELLE" => "Ecole de formation à distance STUDI COMPTALIA", + "LOCALISATION" => "STUDI", + "SOURCE_CODE" => "0022193Y", + ], [ "DEPARTEMENT" => "092", "LIBELLE" => "Ecole de la Formation à distance en commerce et web", @@ -19265,6 +19592,12 @@ return [ "LOCALISATION" => "ENS-P", "SOURCE_CODE" => "ENS-P", ], + [ + "DEPARTEMENT" => "013", + "LIBELLE" => "Ecole nationale supérieure d'architecture de Marseille-Luminy (ENSA)", + "LOCALISATION" => "AR MARSEIL", + "SOURCE_CODE" => "0130236L", + ], [ "DEPARTEMENT" => "091", "LIBELLE" => "Ecole nationale supérieure d'informatique pour l'industrie et l'entreprise", @@ -19367,6 +19700,12 @@ return [ "LOCALISATION" => "ESBANM", "SOURCE_CODE" => "0440106B", ], + [ + "DEPARTEMENT" => "067", + "LIBELLE" => "Ecole supérieure en travail éducatif et social : ESTES", + "LOCALISATION" => "Ecole", + "SOURCE_CODE" => "ESTES", + ], [ "DEPARTEMENT" => "053", "LIBELLE" => "Ecole supérieure professionnelle AFTEC", @@ -19481,6 +19820,12 @@ return [ "LOCALISATION" => "entreprise", "SOURCE_CODE" => "ETHO", ], + [ + "DEPARTEMENT" => "044", + "LIBELLE" => "Eureka Formation", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "0442530L", + ], [ "DEPARTEMENT" => "075", "LIBELLE" => "European Dance Center Goubé", @@ -19855,6 +20200,12 @@ return [ "LOCALISATION" => "Karlsruhe", "SOURCE_CODE" => "KARLSRUH", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Fukuoka University", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1465", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Fuzhou University", @@ -19951,6 +20302,12 @@ return [ "LOCALISATION" => "CHERBOURG", "SOURCE_CODE" => "0501719X", ], + [ + "DEPARTEMENT" => "076", + "LIBELLE" => "GRETA Portes Normandes", + "LOCALISATION" => "Greta", + "SOURCE_CODE" => "0271689P", + ], [ "DEPARTEMENT" => "050", "LIBELLE" => "GRETA SUD MANCHE", @@ -20047,6 +20404,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "075003X", ], + [ + "DEPARTEMENT" => "033", + "LIBELLE" => "Groupe Hospitalier Universitaire Pellegrin - CHU de Bordeaux", + "LOCALISATION" => "CHU", + "SOURCE_CODE" => "CHU_BORD", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Groupe Scolaire Jean Charcot", @@ -20209,6 +20572,12 @@ return [ "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR1354", ], + [ + "DEPARTEMENT" => "092", + "LIBELLE" => "Hôpital Ambroise Paré APHP", + "LOCALISATION" => "Hôpital", + "SOURCE_CODE" => "HOAP", + ], [ "DEPARTEMENT" => "092", "LIBELLE" => "Hôpital Antoine-Béclère", @@ -20281,6 +20650,12 @@ return [ "LOCALISATION" => "Hôpital", "SOURCE_CODE" => "NECKER", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "Hôpital Pitié Salpêtrière APHP", + "LOCALISATION" => "Hôpital", + "SOURCE_CODE" => "HOPS", + ], [ "DEPARTEMENT" => "075", "LIBELLE" => "Hôpital Pitié-Salpêtrière", @@ -20311,6 +20686,12 @@ return [ "LOCALISATION" => "Hôpital", "SOURCE_CODE" => "HOPHS", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "Hôpîtal Bichat - Claude Bernard", + "LOCALISATION" => "Hôpital", + "SOURCE_CODE" => "HBICHAT", + ], [ "DEPARTEMENT" => "035", "LIBELLE" => "I E S I E L", @@ -20347,6 +20728,12 @@ return [ "LOCALISATION" => "I.U.C.T-O", "SOURCE_CODE" => "IUCTO", ], + [ + "DEPARTEMENT" => "091", + "LIBELLE" => "I2BC CEA CNRS Université Paris-Saclay", + "LOCALISATION" => "CNRS", + "SOURCE_CODE" => "I2BCCNRS", + ], [ "DEPARTEMENT" => "013", "LIBELLE" => "IAE AIX MARSEILLE 3 UNIVERSITE AIX MARSEILLE 3", @@ -20587,6 +20974,12 @@ return [ "LOCALISATION" => "IFAG RENNE", "SOURCE_CODE" => "0352714K", ], + [ + "DEPARTEMENT" => "053", + "LIBELLE" => "IFE - Institut de formation en ergothérapie (centre hospitalier de Laval)", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "0531040T", + ], [ "DEPARTEMENT" => "027", "LIBELLE" => "IFELM - Institut de Formation en Ergothérapie La Musse", @@ -20665,6 +21058,12 @@ return [ "LOCALISATION" => "IFSI-IFAS", "SOURCE_CODE" => "0030877M", ], + [ + "DEPARTEMENT" => "059", + "LIBELLE" => "IFSI - Institut Régional de Formation Sanitaire et Sociale Nord-Pas-de-Calais de la Croix Rouge", + "LOCALISATION" => "IFSI Tourc", + "SOURCE_CODE" => "0594898D", + ], [ "DEPARTEMENT" => "094", "LIBELLE" => "IFSI - Institut de Formation en Soins Infirmiers du Groupe Hospitalier Paul Guiraud", @@ -20863,6 +21262,12 @@ return [ "LOCALISATION" => "ANGERS", "SOURCE_CODE" => "0492189N", ], + [ + "DEPARTEMENT" => "033", + "LIBELLE" => "INP Ecole Nationale Supérieure de Chimie, de Biologie et de Physique", + "LOCALISATION" => "ENSCBP", + "SOURCE_CODE" => "0333232J", + ], [ "DEPARTEMENT" => "054", "LIBELLE" => "INP LORRAINE", @@ -20983,6 +21388,12 @@ return [ "LOCALISATION" => "INRAE Nant", "SOURCE_CODE" => "0442674T", ], + [ + "DEPARTEMENT" => "084", + "LIBELLE" => "INRAE PACA - AGROCLIM", + "LOCALISATION" => "INRAE", + "SOURCE_CODE" => "INRAEPAC", + ], [ "DEPARTEMENT" => "078", "LIBELLE" => "INRAE Versailles-Grignon", @@ -21007,6 +21418,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "INRIA-S", ], + [ + "DEPARTEMENT" => "059", + "LIBELLE" => "INRIA de Lille", + "LOCALISATION" => "INRIA", + "SOURCE_CODE" => "INRIA_LI", + ], [ "DEPARTEMENT" => "078", "LIBELLE" => "INRIA de Rocquencourt", @@ -23317,6 +23734,12 @@ return [ "LOCALISATION" => "INU JF Cha", "SOURCE_CODE" => "0811300Y", ], + [ + "DEPARTEMENT" => "014", + "LIBELLE" => "IPAC BACHELOR FACTORY", + "LOCALISATION" => "IPAC", + "SOURCE_CODE" => "0142395C", + ], [ "DEPARTEMENT" => "056", "LIBELLE" => "IPAC BACHELOR FACTORY VANNES - GROUPE AFTEC", @@ -23569,6 +23992,12 @@ return [ "LOCALISATION" => "ISEP AMERI", "SOURCE_CODE" => "ETR0071", ], + [ + "DEPARTEMENT" => "029", + "LIBELLE" => "ISFFEL - Institut Supérieur de Formatoion Fruits et Légumes", + "LOCALISATION" => "ISFFEL", + "SOURCE_CODE" => "0292167Y", + ], [ "DEPARTEMENT" => "087", "LIBELLE" => "ISFOGEP - GROUPE ESSEC GESTION DU PERSONNEL GPE-ESSEC", @@ -23593,6 +24022,12 @@ return [ "LOCALISATION" => "ISPAC TOUR", "SOURCE_CODE" => "0371660D", ], + [ + "DEPARTEMENT" => "014", + "LIBELLE" => "ISTCT - CNRS Normandie Université", + "LOCALISATION" => "CNRS", + "SOURCE_CODE" => "ISTCCNR", + ], [ "DEPARTEMENT" => "035", "LIBELLE" => "ISTER INSTITUT EUROPEEN DE FORMATION", @@ -24947,13 +25382,13 @@ return [ "DEPARTEMENT" => "091", "LIBELLE" => "IUP MANAGT GEST ENTREPRISES UNIVERSITE EVRY VAL D ESSONNE", "LOCALISATION" => "EVRY", - "SOURCE_CODE" => "0912168M", + "SOURCE_CODE" => "0912170P", ], [ "DEPARTEMENT" => "091", "LIBELLE" => "IUP MANAGT GEST ENTREPRISES UNIVERSITE EVRY VAL D ESSONNE", "LOCALISATION" => "EVRY", - "SOURCE_CODE" => "0912170P", + "SOURCE_CODE" => "0912168M", ], [ "DEPARTEMENT" => "026", @@ -24995,13 +25430,13 @@ return [ "DEPARTEMENT" => "069", "LIBELLE" => "IUP MANAGT GEST ENTREPRISES UNIVERSITE LYON 3", "LOCALISATION" => "LYON", - "SOURCE_CODE" => "0693580S", + "SOURCE_CODE" => "0693978Z", ], [ "DEPARTEMENT" => "069", "LIBELLE" => "IUP MANAGT GEST ENTREPRISES UNIVERSITE LYON 3", "LOCALISATION" => "LYON", - "SOURCE_CODE" => "0693978Z", + "SOURCE_CODE" => "0693580S", ], [ "DEPARTEMENT" => "093", @@ -25349,13 +25784,13 @@ return [ "DEPARTEMENT" => "031", "LIBELLE" => "IUP METIERS INFO COMMUNICATION UNIVERSITE TOULOUSE 2", "LOCALISATION" => "TOULOUSE", - "SOURCE_CODE" => "0312703V", + "SOURCE_CODE" => "0312546Z", ], [ "DEPARTEMENT" => "031", "LIBELLE" => "IUP METIERS INFO COMMUNICATION UNIVERSITE TOULOUSE 2", "LOCALISATION" => "TOULOUSE", - "SOURCE_CODE" => "0312546Z", + "SOURCE_CODE" => "0312703V", ], [ "DEPARTEMENT" => "025", @@ -26323,6 +26758,12 @@ return [ "LOCALISATION" => "ELBEUF", "SOURCE_CODE" => "0763214F", ], + [ + "DEPARTEMENT" => "076", + "LIBELLE" => "IUT Rouen - Site Pasteur", + "LOCALISATION" => "IUT", + "SOURCE_CODE" => "0763422G", + ], [ "DEPARTEMENT" => "088", "LIBELLE" => "IUT SAINT DIE UNIVERSITE NANCY 1", @@ -27031,6 +27472,12 @@ return [ "LOCALISATION" => "IRFSS Lyon", "SOURCE_CODE" => "0692525V", ], + [ + "DEPARTEMENT" => "049", + "LIBELLE" => "Institut Régional du Sport et de la Santé de Cholet", + "LOCALISATION" => "IRSS Chole", + "SOURCE_CODE" => "0492390G", + ], [ "DEPARTEMENT" => "075", "LIBELLE" => "Institut Régional du Travail Social - Ile de France (IRTS)", @@ -27127,6 +27574,12 @@ return [ "LOCALISATION" => "Shangaï", "SOURCE_CODE" => "ETR580", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Institut Universitaire des Sciences - HAITI", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "ETR1482", + ], [ "DEPARTEMENT" => "013", "LIBELLE" => "Institut Universitaire des Systèmes Thermiques Industriels de l’université Aix-Marseille 1", @@ -27433,6 +27886,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "IRIM", ], + [ + "DEPARTEMENT" => "031", + "LIBELLE" => "Institut de Recherche en Informatique de Toulouse - IRIT", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "IRITTOUL", + ], [ "DEPARTEMENT" => "075", "LIBELLE" => "Institut de Recherche pour le Développement", @@ -27679,6 +28138,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "0370074E", ], + [ + "DEPARTEMENT" => "064", + "LIBELLE" => "Institut du travail social Pierre Bourdieu (ITS)", + "LOCALISATION" => "ITS", + "SOURCE_CODE" => "0640176U", + ], [ "DEPARTEMENT" => "059", "LIBELLE" => "Institut d’Etudes Politiques de Lille", @@ -27703,6 +28168,12 @@ return [ "LOCALISATION" => "IFSTTAR", "SOURCE_CODE" => "IFSTTAR", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Institut indien de technologie de Delhi (Indian Institute of Technology Delhi)", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "ETR1471", + ], [ "DEPARTEMENT" => "013", "LIBELLE" => "Institut méditerranéen de formation et recherche en travail social", @@ -27811,6 +28282,12 @@ return [ "LOCALISATION" => "IRSS Nante", "SOURCE_CODE" => "0442689J", ], + [ + "DEPARTEMENT" => "067", + "LIBELLE" => "Institut supérieur des arts appliqués - LISAA à Strasbourg", + "LOCALISATION" => "LISAA", + "SOURCE_CODE" => "0672939F", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Institut technologique Cuernavaca", @@ -27829,6 +28306,12 @@ return [ "LOCALISATION" => "institut", "SOURCE_CODE" => "ETR985", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Institute of Neuroscience and Medicine - Brain and Behaviour (INM-7)", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "ETR1478", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Institute of Optical Materials and technologies", @@ -27865,6 +28348,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "INRS", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "Instiut National des Langues et Civilisations Orientales (INALCO)", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "INALCO", + ], [ "DEPARTEMENT" => "050", "LIBELLE" => "Intechmer Cherbourg", @@ -27901,6 +28390,12 @@ return [ "LOCALISATION" => "Istituto", "SOURCE_CODE" => "ETR1154", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Iwate University", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1458", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Jan Diugosz University", @@ -35321,13 +35816,13 @@ return [ "DEPARTEMENT" => "092", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE JEANNE D ARC", "LOCALISATION" => "LY J.D'ARC", - "SOURCE_CODE" => "0920918Y", + "SOURCE_CODE" => "0921663H", ], [ "DEPARTEMENT" => "092", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE JEANNE D ARC", "LOCALISATION" => "LY J.D'ARC", - "SOURCE_CODE" => "0921663H", + "SOURCE_CODE" => "0920918Y", ], [ "DEPARTEMENT" => "039", @@ -35423,19 +35918,19 @@ return [ "DEPARTEMENT" => "076", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE LA PROVIDENCE", "LOCALISATION" => "LY PROVIDE", - "SOURCE_CODE" => "0761707T", + "SOURCE_CODE" => "0763112V", ], [ "DEPARTEMENT" => "076", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE LA PROVIDENCE", "LOCALISATION" => "LY PROVIDE", - "SOURCE_CODE" => "0763112V", + "SOURCE_CODE" => "0761713Z", ], [ "DEPARTEMENT" => "076", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE LA PROVIDENCE", "LOCALISATION" => "LY PROVIDE", - "SOURCE_CODE" => "0761713Z", + "SOURCE_CODE" => "0761707T", ], [ "DEPARTEMENT" => "095", @@ -35609,19 +36104,19 @@ return [ "DEPARTEMENT" => "078", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE NOTRE DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0783288A", + "SOURCE_CODE" => "0783289B", ], [ "DEPARTEMENT" => "078", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE NOTRE DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0783344L", + "SOURCE_CODE" => "0783288A", ], [ "DEPARTEMENT" => "078", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE NOTRE DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0783289B", + "SOURCE_CODE" => "0783344L", ], [ "DEPARTEMENT" => "083", @@ -35729,13 +36224,13 @@ return [ "DEPARTEMENT" => "092", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE NOTRE-DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0920917X", + "SOURCE_CODE" => "0920906K", ], [ "DEPARTEMENT" => "092", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE NOTRE-DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0920906K", + "SOURCE_CODE" => "0920917X", ], [ "DEPARTEMENT" => "095", @@ -36257,19 +36752,19 @@ return [ "DEPARTEMENT" => "044", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0440151A", + "SOURCE_CODE" => "0440201E", ], [ "DEPARTEMENT" => "044", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0440201E", + "SOURCE_CODE" => "0440149Y", ], [ "DEPARTEMENT" => "044", "LIBELLE" => "LYCEE GEN.ET TECHNOL.PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0440149Y", + "SOURCE_CODE" => "0440151A", ], [ "DEPARTEMENT" => "054", @@ -38221,12 +38716,6 @@ return [ "LOCALISATION" => "LY WALLIS", "SOURCE_CODE" => "9870026P", ], - [ - "DEPARTEMENT" => "011", - "LIBELLE" => "LYCEE GENERAL ET TECHNOLOGIQUE DENIS DIDEROT", - "LOCALISATION" => "LY DIDEROT", - "SOURCE_CODE" => "0110023R", - ], [ "DEPARTEMENT" => "031", "LIBELLE" => "LYCEE GENERAL ET TECHNOLOGIQUE DEODAT DE SEVERAC", @@ -39581,13 +40070,13 @@ return [ "DEPARTEMENT" => "034", "LIBELLE" => "LYCEE GENERAL ET TECHNOLOGIQUE JEAN MOULIN", "LOCALISATION" => "LY MOULIN", - "SOURCE_CODE" => "0340059E", + "SOURCE_CODE" => "0340011C", ], [ "DEPARTEMENT" => "034", "LIBELLE" => "LYCEE GENERAL ET TECHNOLOGIQUE JEAN MOULIN", "LOCALISATION" => "LY MOULIN", - "SOURCE_CODE" => "0340011C", + "SOURCE_CODE" => "0340059E", ], [ "DEPARTEMENT" => "057", @@ -40271,13 +40760,13 @@ return [ "DEPARTEMENT" => "059", "LIBELLE" => "LYCEE GENERAL ET TECHNOLOGIQUE LOUIS PASTEUR", "LOCALISATION" => "LY PASTEUR", - "SOURCE_CODE" => "0590117G", + "SOURCE_CODE" => "0590207E", ], [ "DEPARTEMENT" => "059", "LIBELLE" => "LYCEE GENERAL ET TECHNOLOGIQUE LOUIS PASTEUR", "LOCALISATION" => "LY PASTEUR", - "SOURCE_CODE" => "0590207E", + "SOURCE_CODE" => "0590117G", ], [ "DEPARTEMENT" => "062", @@ -42981,7 +43470,7 @@ return [ ], [ "DEPARTEMENT" => "042", - "LIBELLE" => "LYCEE GENERAL PRIVE ND DE VALBENOITE LE ROND POINT", + "LIBELLE" => "LYCEE GENERAL PRIVE ND DE VALBENOITE", "LOCALISATION" => "LY ND-VALB", "SOURCE_CODE" => "0421660B", ], @@ -43733,13 +44222,13 @@ return [ "DEPARTEMENT" => "064", "LIBELLE" => "LYCEE GENERAL PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0640125N", + "SOURCE_CODE" => "0640126P", ], [ "DEPARTEMENT" => "064", "LIBELLE" => "LYCEE GENERAL PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0640126P", + "SOURCE_CODE" => "0640125N", ], [ "DEPARTEMENT" => "084", @@ -45743,13 +46232,13 @@ return [ "DEPARTEMENT" => "013", "LIBELLE" => "LYCEE POLYVALENT LA FOURRAGERE", "LOCALISATION" => "LY FOURRAG", - "SOURCE_CODE" => "0134004G", + "SOURCE_CODE" => "0134003F", ], [ "DEPARTEMENT" => "013", "LIBELLE" => "LYCEE POLYVALENT LA FOURRAGERE", "LOCALISATION" => "LY FOURRAG", - "SOURCE_CODE" => "0134003F", + "SOURCE_CODE" => "0134004G", ], [ "DEPARTEMENT" => "080", @@ -45973,6 +46462,12 @@ return [ "LOCALISATION" => "LY MARSHAL", "SOURCE_CODE" => "0672615D", ], + [ + "DEPARTEMENT" => "011", + "LIBELLE" => "LYCEE POLYVALENT LOUISE MICHEL", + "LOCALISATION" => "LY LMICHEL", + "SOURCE_CODE" => "0110023R", + ], [ "DEPARTEMENT" => "092", "LIBELLE" => "LYCEE POLYVALENT LOUISE MICHEL", @@ -46639,12 +47134,6 @@ return [ "LOCALISATION" => "LY MARMOUT", "SOURCE_CODE" => "0370881G", ], - [ - "DEPARTEMENT" => "066", - "LIBELLE" => "LYCEE POLYVALENT PRIVE MASO", - "LOCALISATION" => "LY MASO", - "SOURCE_CODE" => "0660552S", - ], [ "DEPARTEMENT" => "031", "LIBELLE" => "LYCEE POLYVALENT PRIVE MONTALEMBERT NOTRE-DAME", @@ -47891,13 +48380,13 @@ return [ "DEPARTEMENT" => "002", "LIBELLE" => "LYCEE PROF PRIVE DES METIERS SAINT JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0022002R", + "SOURCE_CODE" => "0021999M", ], [ "DEPARTEMENT" => "002", "LIBELLE" => "LYCEE PROF PRIVE DES METIERS SAINT JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0021999M", + "SOURCE_CODE" => "0022002R", ], [ "DEPARTEMENT" => "029", @@ -48839,13 +49328,13 @@ return [ "DEPARTEMENT" => "032", "LIBELLE" => "LYCEE PROFESSIONNEL AGRICOLE EPLA DE MIRANDE", "LOCALISATION" => "LY MIRANDE", - "SOURCE_CODE" => "0320646D", + "SOURCE_CODE" => "0320557G", ], [ "DEPARTEMENT" => "032", "LIBELLE" => "LYCEE PROFESSIONNEL AGRICOLE EPLA DE MIRANDE", "LOCALISATION" => "LY MIRANDE", - "SOURCE_CODE" => "0320557G", + "SOURCE_CODE" => "0320646D", ], [ "DEPARTEMENT" => "082", @@ -49055,13 +49544,13 @@ return [ "DEPARTEMENT" => "011", "LIBELLE" => "LYCEE PROFESSIONNEL AGRICOLE MARTIN LUTHER KING", "LOCALISATION" => "LY ML/KING", - "SOURCE_CODE" => "0110710M", + "SOURCE_CODE" => "0110712P", ], [ "DEPARTEMENT" => "011", "LIBELLE" => "LYCEE PROFESSIONNEL AGRICOLE MARTIN LUTHER KING", "LOCALISATION" => "LY ML/KING", - "SOURCE_CODE" => "0110712P", + "SOURCE_CODE" => "0110710M", ], [ "DEPARTEMENT" => "038", @@ -52901,13 +53390,13 @@ return [ "DEPARTEMENT" => "062", "LIBELLE" => "LYCEE PROFESSIONNEL PIERRE MENDES-FRANCE", "LOCALISATION" => "LY MENDES", - "SOURCE_CODE" => "0620167V", + "SOURCE_CODE" => "0620192X", ], [ "DEPARTEMENT" => "062", "LIBELLE" => "LYCEE PROFESSIONNEL PIERRE MENDES-FRANCE", "LOCALISATION" => "LY MENDES", - "SOURCE_CODE" => "0620192X", + "SOURCE_CODE" => "0620167V", ], [ "DEPARTEMENT" => "039", @@ -54107,13 +54596,13 @@ return [ "DEPARTEMENT" => "028", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE NOTRE DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0280691Z", + "SOURCE_CODE" => "0280684S", ], [ "DEPARTEMENT" => "028", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE NOTRE DAME", "LOCALISATION" => "LY N-DAME", - "SOURCE_CODE" => "0280684S", + "SOURCE_CODE" => "0280691Z", ], [ "DEPARTEMENT" => "035", @@ -54527,13 +55016,13 @@ return [ "DEPARTEMENT" => "057", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE SAINT JOSEPH-LA PROVIDENCE", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0570264C", + "SOURCE_CODE" => "0572953A", ], [ "DEPARTEMENT" => "057", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE SAINT JOSEPH-LA PROVIDENCE", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0572953A", + "SOURCE_CODE" => "0570264C", ], [ "DEPARTEMENT" => "026", @@ -54653,13 +55142,13 @@ return [ "DEPARTEMENT" => "012", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE SAINT-JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0121309H", + "SOURCE_CODE" => "0121260E", ], [ "DEPARTEMENT" => "012", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE SAINT-JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0121260E", + "SOURCE_CODE" => "0121309H", ], [ "DEPARTEMENT" => "014", @@ -54953,13 +55442,13 @@ return [ "DEPARTEMENT" => "040", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0400916D", + "SOURCE_CODE" => "0400883T", ], [ "DEPARTEMENT" => "040", "LIBELLE" => "LYCEE PROFESSIONNEL PRIVE ST JOSEPH", "LOCALISATION" => "LY S-JOSEP", - "SOURCE_CODE" => "0400883T", + "SOURCE_CODE" => "0400916D", ], [ "DEPARTEMENT" => "051", @@ -57337,6 +57826,18 @@ return [ "LOCALISATION" => "Italie", "SOURCE_CODE" => "ETR593", ], + [ + "DEPARTEMENT" => "035", + "LIBELLE" => "Laboratory for Innovative Key Materials and Structures - LINK", + "LOCALISATION" => "Laboratoir", + "SOURCE_CODE" => "LINK", + ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Lampung University", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1464", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Laurel University", @@ -57487,6 +57988,12 @@ return [ "LOCALISATION" => "Nelson Man", "SOURCE_CODE" => "0442765S", ], + [ + "DEPARTEMENT" => "042", + "LIBELLE" => "Lycée Notre-Dame de Valbenoite", + "LOCALISATION" => "Lycée", + "SOURCE_CODE" => "0420010X", + ], [ "DEPARTEMENT" => "974", "LIBELLE" => "Lycée Polyvalent Mémona HINTERMANN-AFFEJEE", @@ -57713,13 +58220,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Lycée polyvalent de Mamoudzou nord", "LOCALISATION" => "LPO", - "SOURCE_CODE" => "9760370", + "SOURCE_CODE" => "9760370Y", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Lycée polyvalent de Mamoudzou nord", "LOCALISATION" => "LPO", - "SOURCE_CODE" => "9760370Y", + "SOURCE_CODE" => "9760370", ], [ "DEPARTEMENT" => "987", @@ -58093,6 +58600,12 @@ return [ "LOCALISATION" => "MFR Songeo", "SOURCE_CODE" => "0601610Z", ], + [ + "DEPARTEMENT" => "038", + "LIBELLE" => "Maison Familiale Rurale de Vignieu-Morestel", + "LOCALISATION" => "MFR", + "SOURCE_CODE" => "0382908E", + ], [ "DEPARTEMENT" => "085", "LIBELLE" => "Maison Familiale Rurale de l'IREO de St Fulgent", @@ -58159,6 +58672,12 @@ return [ "LOCALISATION" => "NORTH CARO", "SOURCE_CODE" => "ETR313", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Mathematical Institute of the Polish Academy of Sciences", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "ETR1461", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Max Planck Institute for Solid State Research", @@ -58261,6 +58780,12 @@ return [ "LOCALISATION" => "MUSEUM", "SOURCE_CODE" => "0753494R", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "Muséd de l'Orangerie des Tuileries", + "LOCALISATION" => "Musée", + "SOURCE_CODE" => "MUORANG", + ], [ "DEPARTEMENT" => "033", "LIBELLE" => "Médecine Mathématiques Pharmacie Paramédical (MMPP)", @@ -58279,6 +58804,12 @@ return [ "LOCALISATION" => "NEGOCIA PA", "SOURCE_CODE" => "0755441G", ], + [ + "DEPARTEMENT" => "066", + "LIBELLE" => "NEOSUP ECOLE SUPERIEURE DES METIERS DE LA SANTE", + "LOCALISATION" => "NEOSUP", + "SOURCE_CODE" => "0660552S", + ], [ "DEPARTEMENT" => "075", "LIBELLE" => "NOUVELLE FAC LIBRE DE LETTRES PARIS ET ILE-DE-FRANCE", @@ -58327,6 +58858,18 @@ return [ "LOCALISATION" => "SUISSE", "SOURCE_CODE" => "ETRO256", ], + [ + "DEPARTEMENT" => "033", + "LIBELLE" => "Neurocentre Magendie Bordeaux", + "LOCALISATION" => "Centre", + "SOURCE_CODE" => "NEUROMAG", + ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "New York University of Abu Dhabi", + "LOCALISATION" => "université", + "SOURCE_CODE" => "ETR1455", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Nexans SuperConductors GmbH", @@ -58459,6 +59002,12 @@ return [ "LOCALISATION" => "PARIS", "SOURCE_CODE" => "0753793R", ], + [ + "DEPARTEMENT" => "092", + "LIBELLE" => "PARIS YNOV CAMPUS", + "LOCALISATION" => "PARIS YNOV", + "SOURCE_CODE" => "0922816L", + ], [ "DEPARTEMENT" => "038", "LIBELLE" => "PHELMA Grenoble", @@ -58603,6 +59152,12 @@ return [ "LOCALISATION" => "Universita", "SOURCE_CODE" => "ETR1142", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Presidency University", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1477", + ], [ "DEPARTEMENT" => "014", "LIBELLE" => "Presto-Engineering Caen", @@ -58621,6 +59176,12 @@ return [ "LOCALISATION" => "University", "SOURCE_CODE" => "ETR1104", ], + [ + "DEPARTEMENT" => "034", + "LIBELLE" => "Purple campus Béziers - CFA CCI Occitanie", + "LOCALISATION" => "CFA", + "SOURCE_CODE" => "0342156J", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Pädagogische Hochschule Luzern", @@ -58801,6 +59362,12 @@ return [ "LOCALISATION" => "CFA", "SOURCE_CODE" => "0756002S", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "SCK CEN Belgian Nuclear Research Centre", + "LOCALISATION" => "Centre", + "SOURCE_CODE" => "ETR1476", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "SCK/CEN", @@ -59065,6 +59632,12 @@ return [ "LOCALISATION" => "SANOFI", "SOURCE_CODE" => "SANOFI", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "School of Marine Sciences Cochin University of Science And Technology", + "LOCALISATION" => "Ecole", + "SOURCE_CODE" => "ETR1481", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Science and Tecnology Facilities Council", @@ -59185,6 +59758,12 @@ return [ "LOCALISATION" => "VAL REUIL", "SOURCE_CODE" => "SJJ", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Sulzer", + "LOCALISATION" => "Institut", + "SOURCE_CODE" => "ETR1469", + ], [ "DEPARTEMENT" => "044", "LIBELLE" => "Supexam Nantes - Prépa PASS/LAS", @@ -59311,6 +59890,18 @@ return [ "LOCALISATION" => "University", "SOURCE_CODE" => "ETR1322", ], + [ + "DEPARTEMENT" => "006", + "LIBELLE" => "Thales Alenia Space Cannes", + "LOCALISATION" => "Etabl.", + "SOURCE_CODE" => "THALESCA", + ], + [ + "DEPARTEMENT" => "092", + "LIBELLE" => "Thales Digital Identity and Security", + "LOCALISATION" => "Société", + "SOURCE_CODE" => "TDIAS", + ], [ "DEPARTEMENT" => "076", "LIBELLE" => "Thales Land and Air Systems", @@ -62095,12 +62686,6 @@ return [ "LOCALISATION" => "NANTES", "SOURCE_CODE" => "0442077U", ], - [ - "DEPARTEMENT" => "064", - "LIBELLE" => "UFR SCIENCES ET TECHNIQUES UNIVERSITE PAU", - "LOCALISATION" => "PAU", - "SOURCE_CODE" => "0640218P", - ], [ "DEPARTEMENT" => "076", "LIBELLE" => "UFR SCIENCES ET TECHNIQUES UNIVERSITE ROUEN", @@ -62659,6 +63244,12 @@ return [ "LOCALISATION" => "ROUEN", "SOURCE_CODE" => "999GMPC", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "UNICAMP Universidade Estadual de Campinas", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1475", + ], [ "DEPARTEMENT" => "069", "LIBELLE" => "UNICANCER Lyon", @@ -62689,6 +63280,12 @@ return [ "LOCALISATION" => "AR NANTERR", "SOURCE_CODE" => "0921770Z", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "UNIVERSIDADE FEDERAL DE UBERLÂNDIA", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1456", + ], [ "DEPARTEMENT" => "022", "LIBELLE" => "UNIVERSITE CATHOLIQUE DE L'OUEST-BRETAGNE NORD", @@ -62929,6 +63526,12 @@ return [ "LOCALISATION" => "LONDRES", "SOURCE_CODE" => "ETR0083", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Universiti Putra Malaysia", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1457", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "University College Dublin", @@ -63001,6 +63604,12 @@ return [ "LOCALISATION" => "Guelph", "SOURCE_CODE" => "ETR1057", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "University of Jyväkylä", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1483", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "University of Kentucky", @@ -63013,12 +63622,24 @@ return [ "LOCALISATION" => "University", "SOURCE_CODE" => "ETR1069", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "University of Munster", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1474", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "University of New South Wales", "LOCALISATION" => "University", "SOURCE_CODE" => "ETR1321", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "University of Oldenburg", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1486", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "University of Pittsburgh", @@ -63091,6 +63712,12 @@ return [ "LOCALISATION" => "University", "SOURCE_CODE" => "ETR1130", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "University of the Western Cape", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1470", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Università Cattolica di Milano", @@ -63145,6 +63772,12 @@ return [ "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR1445", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Università degli studi di Napoli \"Federico II\"", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1487", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Università degli studi di Parma", @@ -63193,6 +63826,12 @@ return [ "LOCALISATION" => "SACLAY", "SOURCE_CODE" => "SACLAY", ], + [ + "DEPARTEMENT" => "075", + "LIBELLE" => "Université Paris Cité", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "0755976N", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université d’Hanoï", @@ -63501,8 +64140,8 @@ return [ ], [ "DEPARTEMENT" => "099", - "LIBELLE" => "Université Catholique Louvain - Belgique", - "LOCALISATION" => "BELGIQUE", + "LIBELLE" => "Université Catholique Louvain", + "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR0086", ], [ @@ -63871,6 +64510,12 @@ return [ "LOCALISATION" => "ALLEMAGNE", "SOURCE_CODE" => "ETR554", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université Friedrich-Alexander d'Erlangen-Nuremberg", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1485", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Frostburg Maryland USA", @@ -64075,6 +64720,12 @@ return [ "LOCALISATION" => "université", "SOURCE_CODE" => "ETR1126", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université Ibn Zohr", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1453", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Idaho - USA", @@ -64177,6 +64828,12 @@ return [ "LOCALISATION" => "ALLEMAGNE", "SOURCE_CODE" => "ETR534", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université Johns-Hopkins", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1473", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Kansai Gaidai Japon", @@ -64201,6 +64858,12 @@ return [ "LOCALISATION" => "PRAZE", "SOURCE_CODE" => "ETR162", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université Kasdi Merbah de Ouargla", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1454", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Kaskoli Islande", @@ -64261,6 +64924,12 @@ return [ "LOCALISATION" => "LAURENTIAN", "SOURCE_CODE" => "ETR225", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université Laval - Canada", + "LOCALISATION" => "UNIVERSITE", + "SOURCE_CODE" => "ETR577", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Laval Quebec", @@ -64339,12 +65008,6 @@ return [ "LOCALISATION" => "POLOGNE", "SOURCE_CODE" => "ETR567", ], - [ - "DEPARTEMENT" => "054", - "LIBELLE" => "Université Lorraine", - "LOCALISATION" => "NANCY", - "SOURCE_CODE" => "0542493S", - ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Louisiana Northwestern USA", @@ -64565,13 +65228,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Moulay Ismail", "LOCALISATION" => "Université", - "SOURCE_CODE" => "TER1004", + "SOURCE_CODE" => "ETR1004", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Moulay Ismail", "LOCALISATION" => "Université", - "SOURCE_CODE" => "ETR1004", + "SOURCE_CODE" => "TER1004", ], [ "DEPARTEMENT" => "099", @@ -64927,12 +65590,6 @@ return [ "LOCALISATION" => "Saclay", "SOURCE_CODE" => "0912230N", ], - [ - "DEPARTEMENT" => "064", - "LIBELLE" => "Université Pau Pays de l’Adour", - "LOCALISATION" => "PAU", - "SOURCE_CODE" => "0640251A", - ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Pecs Tudomanyegyetem Hongrie", @@ -65333,13 +65990,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Syddansk - Danemark", "LOCALISATION" => "SYDDANSK", - "SOURCE_CODE" => "ETR0168", + "SOURCE_CODE" => "ETR168", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université Syddansk - Danemark", "LOCALISATION" => "SYDDANSK", - "SOURCE_CODE" => "ETR168", + "SOURCE_CODE" => "ETR0168", ], [ "DEPARTEMENT" => "099", @@ -65737,6 +66394,12 @@ return [ "LOCALISATION" => "UNIVERSITE", "SOURCE_CODE" => "ETR0391", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université d'Abomey Calavi", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1462", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université d'Adelaide", @@ -65861,13 +66524,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université d'Iowa - USA", "LOCALISATION" => "IOWA", - "SOURCE_CODE" => "ETR0268", + "SOURCE_CODE" => "ETR268", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université d'Iowa - USA", "LOCALISATION" => "IOWA", - "SOURCE_CODE" => "ETR268", + "SOURCE_CODE" => "ETR0268", ], [ "DEPARTEMENT" => "099", @@ -66113,13 +66776,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Bologne - Italie", "LOCALISATION" => "UNIVERSITE", - "SOURCE_CODE" => "ETR0020", + "SOURCE_CODE" => "ETR0363", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Bologne - Italie", "LOCALISATION" => "UNIVERSITE", - "SOURCE_CODE" => "ETR0363", + "SOURCE_CODE" => "ETR0020", ], [ "DEPARTEMENT" => "099", @@ -66143,13 +66806,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Bremen - Allemagne", "LOCALISATION" => "UNIVERSITE", - "SOURCE_CODE" => "ETR0022", + "SOURCE_CODE" => "ETR00409", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Bremen - Allemagne", "LOCALISATION" => "UNIVERSITE", - "SOURCE_CODE" => "ETR00409", + "SOURCE_CODE" => "ETR0022", ], [ "DEPARTEMENT" => "029", @@ -66655,12 +67318,6 @@ return [ "LOCALISATION" => "UNIVERSITE", "SOURCE_CODE" => "ETR0357", ], - [ - "DEPARTEMENT" => "099", - "LIBELLE" => "Université de Laval - Quebec", - "LOCALISATION" => "UNIVERSITE", - "SOURCE_CODE" => "ETR577", - ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Lecce - Italie", @@ -66709,6 +67366,12 @@ return [ "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR1098", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université de Linköping", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1472", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Lisbonne - Portugal", @@ -66739,6 +67402,12 @@ return [ "LOCALISATION" => "TOGO", "SOURCE_CODE" => "ETR559", ], + [ + "DEPARTEMENT" => "054", + "LIBELLE" => "Université de Lorraine", + "LOCALISATION" => "NANCY", + "SOURCE_CODE" => "0542493S", + ], [ "DEPARTEMENT" => "054", "LIBELLE" => "Université de Lorraine", @@ -66809,13 +67478,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Miami Ohio USA", "LOCALISATION" => "OHIO", - "SOURCE_CODE" => "ETR317", + "SOURCE_CODE" => "ETR0317", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Miami Ohio USA", "LOCALISATION" => "OHIO", - "SOURCE_CODE" => "ETR0317", + "SOURCE_CODE" => "ETR317", ], [ "DEPARTEMENT" => "099", @@ -67039,12 +67708,6 @@ return [ "LOCALISATION" => "Université", "SOURCE_CODE" => "ETR1186", ], - [ - "DEPARTEMENT" => "075", - "LIBELLE" => "Université de Paris", - "LOCALISATION" => "U DE PARIS", - "SOURCE_CODE" => "0755976N", - ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Parma", @@ -67057,6 +67720,18 @@ return [ "LOCALISATION" => "PASSAU", "SOURCE_CODE" => "ETR0112", ], + [ + "DEPARTEMENT" => "064", + "LIBELLE" => "Université de Pau et des Pays de l'Adour", + "LOCALISATION" => "PAU", + "SOURCE_CODE" => "0640251A", + ], + [ + "DEPARTEMENT" => "064", + "LIBELLE" => "Université de Pau et des Pays de l'Adour", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "0640218P", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Pavie - Italie", @@ -67247,13 +67922,13 @@ return [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Sciences Iowa - USA", "LOCALISATION" => "IOWA", - "SOURCE_CODE" => "ETR269", + "SOURCE_CODE" => "ETR0269", ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université de Sciences Iowa - USA", "LOCALISATION" => "IOWA", - "SOURCE_CODE" => "ETR0269", + "SOURCE_CODE" => "ETR269", ], [ "DEPARTEMENT" => "099", @@ -67801,6 +68476,12 @@ return [ "LOCALISATION" => "NORVEGE", "SOURCE_CODE" => "ETR530", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université hébraïque de Jérusalem (The Hebrew University of Jerusalem)", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1460", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Université libre d'Amsterdam", @@ -67831,6 +68512,12 @@ return [ "LOCALISATION" => "ETATS UNIS", "SOURCE_CODE" => "ETR0101", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "Université of Split - School of Medecine", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1466", + ], [ "DEPARTEMENT" => "059", "LIBELLE" => "Université polytechnique Hauts de France", @@ -67927,6 +68614,12 @@ return [ "LOCALISATION" => "VETOPHARMA", "SOURCE_CODE" => "VETOPHAR", ], + [ + "DEPARTEMENT" => "099", + "LIBELLE" => "VIETNAM NATIONAL UNIVERSITY - VNU", + "LOCALISATION" => "Université", + "SOURCE_CODE" => "ETR1463", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "Ventspils University College", @@ -68053,6 +68746,12 @@ return [ "LOCALISATION" => "Symrise", "SOURCE_CODE" => "SYMRISE", ], + [ + "DEPARTEMENT" => "034", + "LIBELLE" => "iRIM - CNRS Université de Montpellier", + "LOCALISATION" => "CNRS", + "SOURCE_CODE" => "IRIMCNRS", + ], [ "DEPARTEMENT" => "022", "LIBELLE" => "iXFiber", @@ -68071,6 +68770,12 @@ return [ "LOCALISATION" => "Institut", "SOURCE_CODE" => "IRD-MONT", ], + [ + "DEPARTEMENT" => "069", + "LIBELLE" => "institut supérieur européen de formation par l'action", + "LOCALISATION" => "ISEFAC RH", + "SOURCE_CODE" => "0694266M", + ], [ "DEPARTEMENT" => "099", "LIBELLE" => "instituto tecnologico de aeronautica", @@ -68370,24 +69075,6 @@ return [ "LIBELLE_LONG" => "ADM. DE L'EN. DE L'ENS SUP ET DE LA RECH", "SOURCE_CODE" => "0301", ], - [ - "CORPS_ID" => "203", - "LIBELLE_COURT" => "ADMIN GENE", - "LIBELLE_LONG" => "ADMINISTRAT GENERAL", - "SOURCE_CODE" => "2035", - ], - [ - "CORPS_ID" => "203", - "LIBELLE_COURT" => "ADM CIV", - "LIBELLE_LONG" => "ADMINISTRATEUR CIVIL", - "SOURCE_CODE" => "2034", - ], - [ - "CORPS_ID" => "203", - "LIBELLE_COURT" => "ADM CIV HC", - "LIBELLE_LONG" => "ADMINISTRATEUR CIVIL HORS CL.", - "SOURCE_CODE" => "2033", - ], [ "CORPS_ID" => "285", "LIBELLE_COURT" => "AD INSEE 1", @@ -69336,24 +70023,6 @@ return [ "LIBELLE_LONG" => "INFIRMIERE OU INFIRMIER PRINCIPAL (NS)", "SOURCE_CODE" => "9892", ], - [ - "CORPS_ID" => "986", - "LIBELLE_COURT" => "INFENES CN", - "LIBELLE_LONG" => "INFIRMIERS ENES CN CATEG A", - "SOURCE_CODE" => "9861", - ], - [ - "CORPS_ID" => "986", - "LIBELLE_COURT" => "INFENES CS", - "LIBELLE_LONG" => "INFIRMIERS ENES CS CATEG A", - "SOURCE_CODE" => "9862", - ], - [ - "CORPS_ID" => "986", - "LIBELLE_COURT" => "INF PJJ CS", - "LIBELLE_LONG" => "INFIRMIERS ENES CS INT PJJ", - "SOURCE_CODE" => "9863", - ], [ "CORPS_ID" => "986", "LIBELLE_COURT" => "INFENES HC", @@ -69372,12 +70041,6 @@ return [ "LIBELLE_LONG" => "INGENIEUR 2E CL. DES PONTS ET CHAUSSEES", "SOURCE_CODE" => "2803", ], - [ - "CORPS_ID" => "833", - "LIBELLE_COURT" => "IGE CN", - "LIBELLE_LONG" => "INGENIEUR D'ETUDES CLASSE NORMALE", - "SOURCE_CODE" => "8331", - ], [ "CORPS_ID" => "EP1", "LIBELLE_COURT" => "IE CN EPST", @@ -69386,9 +70049,9 @@ return [ ], [ "CORPS_ID" => "833", - "LIBELLE_COURT" => "IGE HC", - "LIBELLE_LONG" => "INGENIEUR D'ETUDES HORS CLASSE", - "SOURCE_CODE" => "8332", + "LIBELLE_COURT" => "IGE CN", + "LIBELLE_LONG" => "INGENIEUR D'ETUDES CLASSE NORMALE", + "SOURCE_CODE" => "8331", ], [ "CORPS_ID" => "EP1", @@ -69396,6 +70059,12 @@ return [ "LIBELLE_LONG" => "INGENIEUR D'ETUDES HORS CLASSE", "SOURCE_CODE" => "EP11", ], + [ + "CORPS_ID" => "833", + "LIBELLE_COURT" => "IGE HC", + "LIBELLE_LONG" => "INGENIEUR D'ETUDES HORS CLASSE", + "SOURCE_CODE" => "8332", + ], [ "CORPS_ID" => "277", "LIBELLE_COURT" => "IR1-R", @@ -69597,24 +70266,6 @@ return [ "LIBELLE_LONG" => "MAITRE ASSISTANT 2E CL.", "SOURCE_CODE" => "3021", ], - [ - "CORPS_ID" => "316", - "LIBELLE_COURT" => "MCF PHO 1C", - "LIBELLE_LONG" => "MAITRE DE CONF PRAT HOSP CSERD 1E CL", - "SOURCE_CODE" => "3162", - ], - [ - "CORPS_ID" => "316", - "LIBELLE_COURT" => "MCF PHO 2C", - "LIBELLE_LONG" => "MAITRE DE CONF PRAT HOSP CSERD 2E CL", - "SOURCE_CODE" => "3161", - ], - [ - "CORPS_ID" => "316", - "LIBELLE_COURT" => "MCF PHO HC", - "LIBELLE_LONG" => "MAITRE DE CONF PRAT HOSP CSERD H. CL.", - "SOURCE_CODE" => "3163", - ], [ "CORPS_ID" => "MG1", "LIBELLE_COURT" => "MCF MED GENE 1C", @@ -69657,24 +70308,6 @@ return [ "LIBELLE_LONG" => "MAITRE DE CONF. EPHE ET EC. CHARTES H CL", "SOURCE_CODE" => "3563", ], - [ - "CORPS_ID" => "311", - "LIBELLE_COURT" => "MCF PH 1CL", - "LIBELLE_LONG" => "MAITRE DE CONF.-PRATICIEN HOSP. 1ERE CL", - "SOURCE_CODE" => "3112", - ], - [ - "CORPS_ID" => "311", - "LIBELLE_COURT" => "MCF PH 2CL", - "LIBELLE_LONG" => "MAITRE DE CONF.-PRATICIEN HOSP. 2EME CL", - "SOURCE_CODE" => "3111", - ], - [ - "CORPS_ID" => "311", - "LIBELLE_COURT" => "MCF PH HORS CL", - "LIBELLE_LONG" => "MAITRE DE CONF.-PRATICIEN HOSP. HORS CL", - "SOURCE_CODE" => "3113", - ], [ "CORPS_ID" => "354", "LIBELLE_COURT" => "MCF EHESS CN", @@ -69705,24 +70338,6 @@ return [ "LIBELLE_LONG" => "MAITRE DE CONFERENCES H. CL.", "SOURCE_CODE" => "3013", ], - [ - "CORPS_ID" => "PH1", - "LIBELLE_COURT" => "MCUPH PHARMA 1CL", - "LIBELLE_LONG" => "MCUPH DISCIPLINES PHARMACEUTIQUES 1E CL", - "SOURCE_CODE" => "PH12", - ], - [ - "CORPS_ID" => "PH1", - "LIBELLE_COURT" => "MCUPH PHARMA 2 CL", - "LIBELLE_LONG" => "MCUPH DISCIPLINES PHARMACEUTIQUES 2E CL", - "SOURCE_CODE" => "PH11", - ], - [ - "CORPS_ID" => "PH1", - "LIBELLE_COURT" => "MCUPH PHARMA HC", - "LIBELLE_LONG" => "MCUPH DISCIPLINES PHARMACEUTIQUES H CL", - "SOURCE_CODE" => "PH13", - ], [ "CORPS_ID" => "997", "LIBELLE_COURT" => "MED EN 1C", @@ -69849,30 +70464,6 @@ return [ "LIBELLE_LONG" => "PROF MUSEUM HIST. NATURELLE CL.EX", "SOURCE_CODE" => "3505", ], - [ - "CORPS_ID" => "315", - "LIBELLE_COURT" => "PUPHO EX1", - "LIBELLE_LONG" => "PROF UNIV-PRAT. HOSP CSERD CL.EX 1 ECH", - "SOURCE_CODE" => "3153", - ], - [ - "CORPS_ID" => "315", - "LIBELLE_COURT" => "PUPHO EX2", - "LIBELLE_LONG" => "PROF UNIV-PRAT. HOSP CSERD CL.EX 2 ECH", - "SOURCE_CODE" => "3154", - ], - [ - "CORPS_ID" => "315", - "LIBELLE_COURT" => "PUPHO 1C", - "LIBELLE_LONG" => "PROF UNIV-PRATICIEN HOSP CSERD 1E CL", - "SOURCE_CODE" => "3152", - ], - [ - "CORPS_ID" => "315", - "LIBELLE_COURT" => "PUPHO 2C", - "LIBELLE_LONG" => "PROF UNIV-PRATICIEN HOSP CSERD 2E CL", - "SOURCE_CODE" => "3151", - ], [ "CORPS_ID" => "317", "LIBELLE_COURT" => "PROF 1G DENT 1CL", @@ -70095,18 +70686,6 @@ return [ "LIBELLE_LONG" => "PROFESSEUR UNIV MED GENERALE CL.EX.", "SOURCE_CODE" => "MG03", ], - [ - "CORPS_ID" => "310", - "LIBELLE_COURT" => "PUPH 1CL", - "LIBELLE_LONG" => "PROFESSEUR UNIV.-PRATICIEN HOSP. 1ERE CL", - "SOURCE_CODE" => "3102", - ], - [ - "CORPS_ID" => "310", - "LIBELLE_COURT" => "PUPH 2CL", - "LIBELLE_LONG" => "PROFESSEUR UNIV.-PRATICIEN HOSP. 2EME CL", - "SOURCE_CODE" => "3101", - ], [ "CORPS_ID" => "310", "LIBELLE_COURT" => "PUPH CL EX", @@ -70143,24 +70722,6 @@ return [ "LIBELLE_LONG" => "PSYCHOLOGUE EDUCATION NATIONALE HC", "SOURCE_CODE" => "5222", ], - [ - "CORPS_ID" => "PH0", - "LIBELLE_COURT" => "PUPH PHARMA 1C", - "LIBELLE_LONG" => "PUPH DES DISCIPLINES PHARMACEUTIQUES 1C", - "SOURCE_CODE" => "PH02", - ], - [ - "CORPS_ID" => "PH0", - "LIBELLE_COURT" => "PUPH PHARMA 2C", - "LIBELLE_LONG" => "PUPH DES DISCIPLINES PHARMACEUTIQUES 2C", - "SOURCE_CODE" => "PH01", - ], - [ - "CORPS_ID" => "PH0", - "LIBELLE_COURT" => "PUPH PHARMA CE", - "LIBELLE_LONG" => "PUPH DES DISCIPLINES PHARMACEUTIQUES CE", - "SOURCE_CODE" => "PH03", - ], [ "CORPS_ID" => "020", "LIBELLE_COURT" => "RECT ACAD", @@ -70709,10 +71270,10 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, @@ -70780,10 +71341,10 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, @@ -70828,12 +71389,12 @@ return [ "PJ_VISUALISATION" => TRUE, "PRIORITAIRE_INDICATEURS" => FALSE, "REFERENTIEL_PREVU" => FALSE, - "REFERENTIEL_PREVU_EDITION" => TRUE, - "REFERENTIEL_PREVU_VISU" => TRUE, + "REFERENTIEL_PREVU_EDITION" => FALSE, + "REFERENTIEL_PREVU_VISU" => FALSE, "REFERENTIEL_REALISE" => FALSE, - "REFERENTIEL_REALISE_EDITION" => TRUE, - "REFERENTIEL_REALISE_VISU" => TRUE, - "SERVICE_EXTERIEUR" => TRUE, + "REFERENTIEL_REALISE_EDITION" => FALSE, + "REFERENTIEL_REALISE_VISU" => FALSE, + "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, "SERVICE_PREVU_EDITION" => TRUE, "SERVICE_PREVU_VISU" => TRUE, @@ -70851,10 +71412,10 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, @@ -70904,7 +71465,7 @@ return [ "REFERENTIEL_REALISE" => TRUE, "REFERENTIEL_REALISE_EDITION" => FALSE, "REFERENTIEL_REALISE_VISU" => FALSE, - "SERVICE_EXTERIEUR" => TRUE, + "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, "SERVICE_PREVU_EDITION" => TRUE, "SERVICE_PREVU_VISU" => TRUE, @@ -70993,10 +71554,10 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, @@ -71046,7 +71607,7 @@ return [ "REFERENTIEL_REALISE" => TRUE, "REFERENTIEL_REALISE_EDITION" => TRUE, "REFERENTIEL_REALISE_VISU" => TRUE, - "SERVICE_EXTERIEUR" => TRUE, + "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, "SERVICE_PREVU_EDITION" => TRUE, "SERVICE_PREVU_VISU" => TRUE, @@ -71058,7 +71619,7 @@ return [ "TYPE_INTERVENANT_ID" => "P", ], [ - "CLOTURE" => TRUE, + "CLOTURE" => FALSE, "CODE" => "ATER", "CODES_CORRESP_2" => "Non", "CODES_CORRESP_3" => "Non", @@ -71103,9 +71664,9 @@ return [ "LIBELLE" => "Ater", "MODIF_SERVICE_DU" => TRUE, "MODIF_SERVICE_DU_VISUALISATION" => TRUE, - "MOTIF_NON_PAIEMENT" => TRUE, + "MOTIF_NON_PAIEMENT" => FALSE, "ORDRE" => 372, - "PAIEMENT_VISUALISATION" => TRUE, + "PAIEMENT_VISUALISATION" => FALSE, "PJ_ARCHIVAGE" => TRUE, "PJ_EDITION" => TRUE, "PJ_TELECHARGEMENT" => TRUE, @@ -71117,7 +71678,7 @@ return [ "REFERENTIEL_REALISE" => TRUE, "REFERENTIEL_REALISE_EDITION" => TRUE, "REFERENTIEL_REALISE_VISU" => TRUE, - "SERVICE_EXTERIEUR" => TRUE, + "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, "SERVICE_PREVU_EDITION" => TRUE, "SERVICE_PREVU_VISU" => TRUE, @@ -71316,9 +71877,9 @@ return [ "LIBELLE" => "Ater mi-temps", "MODIF_SERVICE_DU" => TRUE, "MODIF_SERVICE_DU_VISUALISATION" => TRUE, - "MOTIF_NON_PAIEMENT" => TRUE, + "MOTIF_NON_PAIEMENT" => FALSE, "ORDRE" => 375, - "PAIEMENT_VISUALISATION" => TRUE, + "PAIEMENT_VISUALISATION" => FALSE, "PJ_ARCHIVAGE" => TRUE, "PJ_EDITION" => TRUE, "PJ_TELECHARGEMENT" => TRUE, @@ -71330,7 +71891,7 @@ return [ "REFERENTIEL_REALISE" => TRUE, "REFERENTIEL_REALISE_EDITION" => TRUE, "REFERENTIEL_REALISE_VISU" => TRUE, - "SERVICE_EXTERIEUR" => TRUE, + "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, "SERVICE_PREVU_EDITION" => TRUE, "SERVICE_PREVU_VISU" => TRUE, @@ -71348,53 +71909,53 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => TRUE, - "CONTRAT_DEPOT" => TRUE, + "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => TRUE, "DEPASSEMENT_SERVICE_DU_SANS_HC" => TRUE, "DOSSIER" => FALSE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, - "DOSSIER_EDITION" => TRUE, + "DOSSIER_EDITION" => FALSE, "DOSSIER_EMAIL_PERSO" => FALSE, "DOSSIER_EMPLOYEUR" => FALSE, "DOSSIER_IDENTITE_COMP" => TRUE, "DOSSIER_INSEE" => TRUE, "DOSSIER_SELECTIONNABLE" => FALSE, "DOSSIER_TEL_PERSO" => FALSE, - "DOSSIER_VISUALISATION" => TRUE, + "DOSSIER_VISUALISATION" => FALSE, "FORMULE_VISUALISATION" => FALSE, "LIBELLE" => "Doctorant (réforme 2016)", "MODIF_SERVICE_DU" => FALSE, "MODIF_SERVICE_DU_VISUALISATION" => FALSE, "MOTIF_NON_PAIEMENT" => TRUE, "ORDRE" => 376, - "PAIEMENT_VISUALISATION" => TRUE, + "PAIEMENT_VISUALISATION" => FALSE, "PJ_ARCHIVAGE" => TRUE, "PJ_EDITION" => TRUE, "PJ_TELECHARGEMENT" => TRUE, "PJ_VISUALISATION" => TRUE, - "PRIORITAIRE_INDICATEURS" => FALSE, + "PRIORITAIRE_INDICATEURS" => TRUE, "REFERENTIEL_PREVU" => FALSE, "REFERENTIEL_PREVU_EDITION" => FALSE, "REFERENTIEL_PREVU_VISU" => FALSE, @@ -71419,10 +71980,10 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, @@ -71472,7 +72033,7 @@ return [ "REFERENTIEL_REALISE" => TRUE, "REFERENTIEL_REALISE_EDITION" => FALSE, "REFERENTIEL_REALISE_VISU" => FALSE, - "SERVICE_EXTERIEUR" => TRUE, + "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, "SERVICE_PREVU_EDITION" => TRUE, "SERVICE_PREVU_VISU" => TRUE, @@ -71490,10 +72051,10 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, @@ -71703,7 +72264,7 @@ return [ "CODES_CORRESP_2" => "Non", "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => TRUE, - "CONSEIL_ACA_DUREE_VIE" => 1, + "CONSEIL_ACA_DUREE_VIE" => 99, "CONSEIL_ACA_VISUALISATION" => TRUE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, @@ -71775,7 +72336,7 @@ return [ "CODES_CORRESP_2" => "Non", "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => TRUE, - "CONSEIL_ACA_DUREE_VIE" => 1, + "CONSEIL_ACA_DUREE_VIE" => 99, "CONSEIL_ACA_VISUALISATION" => TRUE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, @@ -71787,20 +72348,20 @@ return [ "DOSSIER" => TRUE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, "DOSSIER_EDITION" => TRUE, @@ -71846,7 +72407,7 @@ return [ "CODES_CORRESP_2" => "Non", "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => TRUE, - "CONSEIL_ACA_DUREE_VIE" => 1, + "CONSEIL_ACA_DUREE_VIE" => 99, "CONSEIL_ACA_VISUALISATION" => TRUE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, @@ -71858,20 +72419,20 @@ return [ "DOSSIER" => TRUE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, "DOSSIER_EDITION" => TRUE, @@ -71918,7 +72479,7 @@ return [ "CODES_CORRESP_2" => "Non", "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => TRUE, - "CONSEIL_ACA_DUREE_VIE" => 1, + "CONSEIL_ACA_DUREE_VIE" => 99, "CONSEIL_ACA_VISUALISATION" => TRUE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, @@ -71990,7 +72551,7 @@ return [ "CODES_CORRESP_2" => "Non", "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => TRUE, - "CONSEIL_ACA_DUREE_VIE" => 1, + "CONSEIL_ACA_DUREE_VIE" => 99, "CONSEIL_ACA_VISUALISATION" => TRUE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, @@ -72002,20 +72563,20 @@ return [ "DOSSIER" => TRUE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, "DOSSIER_EDITION" => TRUE, @@ -72063,7 +72624,7 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 1, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, "CONSEIL_RESTREINT_VISU" => TRUE, @@ -72074,20 +72635,20 @@ return [ "DOSSIER" => TRUE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, "DOSSIER_EDITION" => TRUE, @@ -72181,7 +72742,7 @@ return [ "PJ_EDITION" => TRUE, "PJ_TELECHARGEMENT" => TRUE, "PJ_VISUALISATION" => TRUE, - "PRIORITAIRE_INDICATEURS" => FALSE, + "PRIORITAIRE_INDICATEURS" => TRUE, "REFERENTIEL_PREVU" => FALSE, "REFERENTIEL_PREVU_EDITION" => FALSE, "REFERENTIEL_PREVU_VISU" => FALSE, @@ -72206,7 +72767,7 @@ return [ "CODES_CORRESP_3" => "Non", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 1, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => TRUE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, "CONSEIL_RESTREINT_VISU" => TRUE, @@ -72217,20 +72778,20 @@ return [ "DOSSIER" => TRUE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, "DOSSIER_EDITION" => TRUE, @@ -72252,7 +72813,7 @@ return [ "PJ_EDITION" => TRUE, "PJ_TELECHARGEMENT" => TRUE, "PJ_VISUALISATION" => TRUE, - "PRIORITAIRE_INDICATEURS" => FALSE, + "PRIORITAIRE_INDICATEURS" => TRUE, "REFERENTIEL_PREVU" => FALSE, "REFERENTIEL_PREVU_EDITION" => FALSE, "REFERENTIEL_PREVU_VISU" => FALSE, @@ -72278,14 +72839,14 @@ return [ "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 1, "CONSEIL_ACA_VISUALISATION" => FALSE, - "CONSEIL_RESTREINT" => TRUE, + "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, - "CONTRAT" => TRUE, - "CONTRAT_DEPOT" => TRUE, - "CONTRAT_VISUALISATION" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, + "CONTRAT" => FALSE, + "CONTRAT_DEPOT" => FALSE, + "CONTRAT_VISUALISATION" => FALSE, "DEPASSEMENT_SERVICE_DU_SANS_HC" => FALSE, - "DOSSIER" => TRUE, + "DOSSIER" => FALSE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, "DOSSIER_AUTRE_1_EDITION" => FALSE, @@ -72304,25 +72865,25 @@ return [ "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, - "DOSSIER_EDITION" => TRUE, + "DOSSIER_EDITION" => FALSE, "DOSSIER_EMAIL_PERSO" => FALSE, "DOSSIER_EMPLOYEUR" => FALSE, "DOSSIER_IDENTITE_COMP" => TRUE, "DOSSIER_INSEE" => TRUE, "DOSSIER_SELECTIONNABLE" => FALSE, "DOSSIER_TEL_PERSO" => FALSE, - "DOSSIER_VISUALISATION" => TRUE, + "DOSSIER_VISUALISATION" => FALSE, "FORMULE_VISUALISATION" => FALSE, "LIBELLE" => "Sans emploi, non étudiant", "MODIF_SERVICE_DU" => FALSE, "MODIF_SERVICE_DU_VISUALISATION" => FALSE, "MOTIF_NON_PAIEMENT" => FALSE, "ORDRE" => 389, - "PAIEMENT_VISUALISATION" => TRUE, + "PAIEMENT_VISUALISATION" => FALSE, "PJ_ARCHIVAGE" => TRUE, - "PJ_EDITION" => TRUE, + "PJ_EDITION" => FALSE, "PJ_TELECHARGEMENT" => TRUE, - "PJ_VISUALISATION" => TRUE, + "PJ_VISUALISATION" => FALSE, "PRIORITAIRE_INDICATEURS" => FALSE, "REFERENTIEL_PREVU" => FALSE, "REFERENTIEL_PREVU_EDITION" => FALSE, @@ -72331,12 +72892,12 @@ return [ "REFERENTIEL_REALISE_EDITION" => FALSE, "REFERENTIEL_REALISE_VISU" => FALSE, "SERVICE_EXTERIEUR" => FALSE, - "SERVICE_PREVU" => TRUE, - "SERVICE_PREVU_EDITION" => TRUE, - "SERVICE_PREVU_VISU" => TRUE, - "SERVICE_REALISE" => TRUE, - "SERVICE_REALISE_EDITION" => TRUE, - "SERVICE_REALISE_VISU" => TRUE, + "SERVICE_PREVU" => FALSE, + "SERVICE_PREVU_EDITION" => FALSE, + "SERVICE_PREVU_VISU" => FALSE, + "SERVICE_REALISE" => FALSE, + "SERVICE_REALISE_EDITION" => FALSE, + "SERVICE_REALISE_VISU" => FALSE, "SERVICE_STATUTAIRE" => 0.0, "TAUX_CHARGES_PATRONALES" => 1.0, "TYPE_INTERVENANT_ID" => "E", @@ -72491,10 +73052,10 @@ return [ "CODES_CORRESP_3" => "Oui", "CONSEIL_ACA" => FALSE, "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, + "CONSEIL_ACA_VISUALISATION" => FALSE, "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, + "CONSEIL_RESTREINT_VISU" => FALSE, "CONTRAT" => TRUE, "CONTRAT_DEPOT" => TRUE, "CONTRAT_VISUALISATION" => TRUE, @@ -72502,20 +73063,20 @@ return [ "DOSSIER" => TRUE, "DOSSIER_ADRESSE" => TRUE, "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, "DOSSIER_BANQUE" => TRUE, "DOSSIER_CONTACT" => TRUE, "DOSSIER_EDITION" => TRUE, @@ -72523,7 +73084,7 @@ return [ "DOSSIER_EMPLOYEUR" => FALSE, "DOSSIER_IDENTITE_COMP" => TRUE, "DOSSIER_INSEE" => TRUE, - "DOSSIER_SELECTIONNABLE" => TRUE, + "DOSSIER_SELECTIONNABLE" => FALSE, "DOSSIER_TEL_PERSO" => FALSE, "DOSSIER_VISUALISATION" => TRUE, "FORMULE_VISUALISATION" => FALSE, @@ -72599,78 +73160,78 @@ return [ "DOSSIER_TEL_PERSO" => FALSE, "DOSSIER_VISUALISATION" => TRUE, "FORMULE_VISUALISATION" => FALSE, - "LIBELLE" => "SUAPS - Vacataire fonctionnaire", - "MODIF_SERVICE_DU" => FALSE, - "MODIF_SERVICE_DU_VISUALISATION" => FALSE, - "MOTIF_NON_PAIEMENT" => FALSE, - "ORDRE" => 393, - "PAIEMENT_VISUALISATION" => TRUE, - "PJ_ARCHIVAGE" => TRUE, - "PJ_EDITION" => TRUE, - "PJ_TELECHARGEMENT" => TRUE, - "PJ_VISUALISATION" => TRUE, - "PRIORITAIRE_INDICATEURS" => FALSE, - "REFERENTIEL_PREVU" => FALSE, - "REFERENTIEL_PREVU_EDITION" => FALSE, - "REFERENTIEL_PREVU_VISU" => FALSE, - "REFERENTIEL_REALISE" => FALSE, - "REFERENTIEL_REALISE_EDITION" => FALSE, - "REFERENTIEL_REALISE_VISU" => FALSE, - "SERVICE_EXTERIEUR" => FALSE, - "SERVICE_PREVU" => TRUE, - "SERVICE_PREVU_EDITION" => TRUE, - "SERVICE_PREVU_VISU" => TRUE, - "SERVICE_REALISE" => TRUE, - "SERVICE_REALISE_EDITION" => TRUE, - "SERVICE_REALISE_VISU" => TRUE, - "SERVICE_STATUTAIRE" => 0.0, - "TAUX_CHARGES_PATRONALES" => 1.0, - "TYPE_INTERVENANT_ID" => "E", - ], - [ - "CLOTURE" => FALSE, - "CODE" => "VACNONFONCSUAPS", - "CODES_CORRESP_1" => "C1204", - "CODES_CORRESP_2" => "Non", - "CODES_CORRESP_3" => "Oui", - "CONSEIL_ACA" => FALSE, - "CONSEIL_ACA_DUREE_VIE" => 5, - "CONSEIL_ACA_VISUALISATION" => TRUE, - "CONSEIL_RESTREINT" => FALSE, - "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, - "CONTRAT" => TRUE, - "CONTRAT_DEPOT" => TRUE, - "CONTRAT_VISUALISATION" => TRUE, - "DEPASSEMENT_SERVICE_DU_SANS_HC" => FALSE, - "DOSSIER" => TRUE, - "DOSSIER_ADRESSE" => TRUE, - "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => TRUE, - "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, - "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => TRUE, - "DOSSIER_AUTRE_2_VISUALISATION" => TRUE, - "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => TRUE, - "DOSSIER_AUTRE_3_VISUALISATION" => TRUE, - "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => TRUE, - "DOSSIER_AUTRE_4_VISUALISATION" => TRUE, - "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => TRUE, - "DOSSIER_AUTRE_5_VISUALISATION" => TRUE, - "DOSSIER_BANQUE" => TRUE, - "DOSSIER_CONTACT" => TRUE, - "DOSSIER_EDITION" => TRUE, - "DOSSIER_EMAIL_PERSO" => FALSE, - "DOSSIER_EMPLOYEUR" => FALSE, - "DOSSIER_IDENTITE_COMP" => TRUE, - "DOSSIER_INSEE" => TRUE, - "DOSSIER_SELECTIONNABLE" => TRUE, - "DOSSIER_TEL_PERSO" => FALSE, - "DOSSIER_VISUALISATION" => TRUE, - "FORMULE_VISUALISATION" => FALSE, + "LIBELLE" => "SUAPS - Vacataire fonctionnaire", + "MODIF_SERVICE_DU" => FALSE, + "MODIF_SERVICE_DU_VISUALISATION" => FALSE, + "MOTIF_NON_PAIEMENT" => FALSE, + "ORDRE" => 393, + "PAIEMENT_VISUALISATION" => TRUE, + "PJ_ARCHIVAGE" => TRUE, + "PJ_EDITION" => TRUE, + "PJ_TELECHARGEMENT" => TRUE, + "PJ_VISUALISATION" => TRUE, + "PRIORITAIRE_INDICATEURS" => FALSE, + "REFERENTIEL_PREVU" => FALSE, + "REFERENTIEL_PREVU_EDITION" => FALSE, + "REFERENTIEL_PREVU_VISU" => FALSE, + "REFERENTIEL_REALISE" => FALSE, + "REFERENTIEL_REALISE_EDITION" => FALSE, + "REFERENTIEL_REALISE_VISU" => FALSE, + "SERVICE_EXTERIEUR" => FALSE, + "SERVICE_PREVU" => TRUE, + "SERVICE_PREVU_EDITION" => TRUE, + "SERVICE_PREVU_VISU" => TRUE, + "SERVICE_REALISE" => TRUE, + "SERVICE_REALISE_EDITION" => TRUE, + "SERVICE_REALISE_VISU" => TRUE, + "SERVICE_STATUTAIRE" => 0.0, + "TAUX_CHARGES_PATRONALES" => 1.0, + "TYPE_INTERVENANT_ID" => "E", + ], + [ + "CLOTURE" => FALSE, + "CODE" => "VACNONFONCSUAPS", + "CODES_CORRESP_1" => "C1204", + "CODES_CORRESP_2" => "Non", + "CODES_CORRESP_3" => "Oui", + "CONSEIL_ACA" => FALSE, + "CONSEIL_ACA_DUREE_VIE" => 5, + "CONSEIL_ACA_VISUALISATION" => FALSE, + "CONSEIL_RESTREINT" => FALSE, + "CONSEIL_RESTREINT_DUREE_VIE" => 1, + "CONSEIL_RESTREINT_VISU" => FALSE, + "CONTRAT" => TRUE, + "CONTRAT_DEPOT" => TRUE, + "CONTRAT_VISUALISATION" => TRUE, + "DEPASSEMENT_SERVICE_DU_SANS_HC" => FALSE, + "DOSSIER" => TRUE, + "DOSSIER_ADRESSE" => TRUE, + "DOSSIER_AUTRE_1" => FALSE, + "DOSSIER_AUTRE_1_EDITION" => FALSE, + "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, + "DOSSIER_AUTRE_2" => FALSE, + "DOSSIER_AUTRE_2_EDITION" => FALSE, + "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, + "DOSSIER_AUTRE_3" => FALSE, + "DOSSIER_AUTRE_3_EDITION" => FALSE, + "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, + "DOSSIER_AUTRE_4" => FALSE, + "DOSSIER_AUTRE_4_EDITION" => FALSE, + "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, + "DOSSIER_AUTRE_5" => FALSE, + "DOSSIER_AUTRE_5_EDITION" => FALSE, + "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, + "DOSSIER_BANQUE" => TRUE, + "DOSSIER_CONTACT" => TRUE, + "DOSSIER_EDITION" => TRUE, + "DOSSIER_EMAIL_PERSO" => FALSE, + "DOSSIER_EMPLOYEUR" => FALSE, + "DOSSIER_IDENTITE_COMP" => TRUE, + "DOSSIER_INSEE" => TRUE, + "DOSSIER_SELECTIONNABLE" => TRUE, + "DOSSIER_TEL_PERSO" => FALSE, + "DOSSIER_VISUALISATION" => TRUE, + "FORMULE_VISUALISATION" => FALSE, "LIBELLE" => "SUAPS - Vacataire non-fonctionnaire", "MODIF_SERVICE_DU" => FALSE, "MODIF_SERVICE_DU_VISUALISATION" => FALSE, @@ -72710,7 +73271,7 @@ return [ "CONSEIL_RESTREINT" => FALSE, "CONSEIL_RESTREINT_DUREE_VIE" => 1, "CONSEIL_RESTREINT_VISU" => FALSE, - "CONTRAT" => TRUE, + "CONTRAT" => FALSE, "CONTRAT_DEPOT" => FALSE, "CONTRAT_VISUALISATION" => FALSE, "DEPASSEMENT_SERVICE_DU_SANS_HC" => TRUE, @@ -72811,7 +73372,7 @@ return [ "DOSSIER_INSEE" => FALSE, "DOSSIER_SELECTIONNABLE" => TRUE, "DOSSIER_TEL_PERSO" => FALSE, - "DOSSIER_VISUALISATION" => FALSE, + "DOSSIER_VISUALISATION" => TRUE, "FORMULE_VISUALISATION" => FALSE, "LIBELLE" => "INSPE - Permanent académique du 2nd degré", "MODIF_SERVICE_DU" => FALSE, @@ -72832,8 +73393,8 @@ return [ "REFERENTIEL_REALISE_VISU" => FALSE, "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, - "SERVICE_PREVU_EDITION" => FALSE, - "SERVICE_PREVU_VISU" => FALSE, + "SERVICE_PREVU_EDITION" => TRUE, + "SERVICE_PREVU_VISU" => TRUE, "SERVICE_REALISE" => TRUE, "SERVICE_REALISE_EDITION" => FALSE, "SERVICE_REALISE_VISU" => FALSE, @@ -72882,7 +73443,7 @@ return [ "DOSSIER_INSEE" => FALSE, "DOSSIER_SELECTIONNABLE" => TRUE, "DOSSIER_TEL_PERSO" => FALSE, - "DOSSIER_VISUALISATION" => FALSE, + "DOSSIER_VISUALISATION" => TRUE, "FORMULE_VISUALISATION" => FALSE, "LIBELLE" => "INSPE - Permanent académique du 1er degré", "MODIF_SERVICE_DU" => FALSE, @@ -72903,8 +73464,8 @@ return [ "REFERENTIEL_REALISE_VISU" => FALSE, "SERVICE_EXTERIEUR" => FALSE, "SERVICE_PREVU" => TRUE, - "SERVICE_PREVU_EDITION" => FALSE, - "SERVICE_PREVU_VISU" => FALSE, + "SERVICE_PREVU_EDITION" => TRUE, + "SERVICE_PREVU_VISU" => TRUE, "SERVICE_REALISE" => TRUE, "SERVICE_REALISE_EDITION" => FALSE, "SERVICE_REALISE_VISU" => FALSE, @@ -72912,77 +73473,6 @@ return [ "TAUX_CHARGES_PATRONALES" => 1.0, "TYPE_INTERVENANT_ID" => "P", ], - [ - "CLOTURE" => FALSE, - "CODE" => "BIATSS 2", - "CODES_CORRESP_2" => "Non", - "CODES_CORRESP_3" => "Non", - "CONSEIL_ACA" => FALSE, - "CONSEIL_ACA_DUREE_VIE" => 1, - "CONSEIL_ACA_VISUALISATION" => FALSE, - "CONSEIL_RESTREINT" => TRUE, - "CONSEIL_RESTREINT_DUREE_VIE" => 1, - "CONSEIL_RESTREINT_VISU" => TRUE, - "CONTRAT" => TRUE, - "CONTRAT_DEPOT" => TRUE, - "CONTRAT_VISUALISATION" => TRUE, - "DEPASSEMENT_SERVICE_DU_SANS_HC" => FALSE, - "DOSSIER" => FALSE, - "DOSSIER_ADRESSE" => TRUE, - "DOSSIER_AUTRE_1" => FALSE, - "DOSSIER_AUTRE_1_EDITION" => FALSE, - "DOSSIER_AUTRE_1_VISUALISATION" => FALSE, - "DOSSIER_AUTRE_2" => FALSE, - "DOSSIER_AUTRE_2_EDITION" => FALSE, - "DOSSIER_AUTRE_2_VISUALISATION" => FALSE, - "DOSSIER_AUTRE_3" => FALSE, - "DOSSIER_AUTRE_3_EDITION" => FALSE, - "DOSSIER_AUTRE_3_VISUALISATION" => FALSE, - "DOSSIER_AUTRE_4" => FALSE, - "DOSSIER_AUTRE_4_EDITION" => FALSE, - "DOSSIER_AUTRE_4_VISUALISATION" => FALSE, - "DOSSIER_AUTRE_5" => FALSE, - "DOSSIER_AUTRE_5_EDITION" => FALSE, - "DOSSIER_AUTRE_5_VISUALISATION" => FALSE, - "DOSSIER_BANQUE" => TRUE, - "DOSSIER_CONTACT" => TRUE, - "DOSSIER_EDITION" => FALSE, - "DOSSIER_EMAIL_PERSO" => FALSE, - "DOSSIER_EMPLOYEUR" => FALSE, - "DOSSIER_IDENTITE_COMP" => TRUE, - "DOSSIER_INSEE" => TRUE, - "DOSSIER_SELECTIONNABLE" => FALSE, - "DOSSIER_TEL_PERSO" => FALSE, - "DOSSIER_VISUALISATION" => FALSE, - "FORMULE_VISUALISATION" => FALSE, - "LIBELLE" => "BIATSS 2", - "MODIF_SERVICE_DU" => FALSE, - "MODIF_SERVICE_DU_VISUALISATION" => FALSE, - "MOTIF_NON_PAIEMENT" => TRUE, - "ORDRE" => 399, - "PAIEMENT_VISUALISATION" => TRUE, - "PJ_ARCHIVAGE" => TRUE, - "PJ_EDITION" => TRUE, - "PJ_TELECHARGEMENT" => TRUE, - "PJ_VISUALISATION" => TRUE, - "PRIORITAIRE_INDICATEURS" => FALSE, - "REFERENTIEL_PREVU" => FALSE, - "REFERENTIEL_PREVU_EDITION" => FALSE, - "REFERENTIEL_PREVU_VISU" => FALSE, - "REFERENTIEL_REALISE" => FALSE, - "REFERENTIEL_REALISE_EDITION" => FALSE, - "REFERENTIEL_REALISE_VISU" => FALSE, - "SERVICE_EXTERIEUR" => FALSE, - "SERVICE_PREVU" => TRUE, - "SERVICE_PREVU_EDITION" => TRUE, - "SERVICE_PREVU_VISU" => TRUE, - "SERVICE_REALISE" => TRUE, - "SERVICE_REALISE_EDITION" => TRUE, - "SERVICE_REALISE_VISU" => TRUE, - "SERVICE_STATUTAIRE" => 0.0, - "TAUX_CHARGES_PATRONALES" => 1.0, - "TYPE_INTERVENANT_ID" => "E", - ], ], "ROLE" => [ [ @@ -73408,6 +73898,54 @@ return [ "PRIVILEGE_ID" => "enseignement-edition-masse", "ROLE_ID" => "gestionnaire-composante", ], + [ + "PRIVILEGE_ID" => "enseignement-prevu-visualisation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "enseignement-prevu-edition", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "enseignement-prevu-validation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "enseignement-realise-visualisation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "enseignement-realise-edition", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "enseignement-realise-validation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "referentiel-prevu-visualisation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "referentiel-prevu-edition", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "referentiel-prevu-validation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "referentiel-realise-visualisation", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "referentiel-realise-edition", + "ROLE_ID" => "gestionnaire-composante", + ], + [ + "PRIVILEGE_ID" => "referentiel-realise-validation", + "ROLE_ID" => "gestionnaire-composante", + ], [ "PRIVILEGE_ID" => "modif-service-du-visualisation", "ROLE_ID" => "superviseur-etablissement", @@ -73653,31 +74191,19 @@ return [ "ROLE_ID" => "superviseur-etablissement", ], [ - "PRIVILEGE_ID" => "plafonds-visualisation", - "ROLE_ID" => "superviseur-etablissement", - ], - [ - "PRIVILEGE_ID" => "plafonds-edition", - "ROLE_ID" => "superviseur-etablissement", - ], - [ - "PRIVILEGE_ID" => "plafonds-config-structure", + "PRIVILEGE_ID" => "enseignement-prevu-visualisation", "ROLE_ID" => "superviseur-etablissement", ], [ - "PRIVILEGE_ID" => "plafonds-config-referentiel", + "PRIVILEGE_ID" => "enseignement-realise-visualisation", "ROLE_ID" => "superviseur-etablissement", ], [ - "PRIVILEGE_ID" => "plafonds-config-statut", + "PRIVILEGE_ID" => "referentiel-prevu-visualisation", "ROLE_ID" => "superviseur-etablissement", ], [ - "PRIVILEGE_ID" => "plafonds-derogations-visualisation", - "ROLE_ID" => "superviseur-etablissement", - ], - [ - "PRIVILEGE_ID" => "plafonds-derogations-edition", + "PRIVILEGE_ID" => "referentiel-realise-visualisation", "ROLE_ID" => "superviseur-etablissement", ], ], @@ -73786,14 +74312,6 @@ return [ "LIBELLE_LONG" => "Validation d'études", "SERVICE_STATUTAIRE" => TRUE, ], - [ - "CODE" => "ff", - "DOMAINE_FONCTIONNEL_ID" => "D103", - "ETAPE_REQUISE" => FALSE, - "LIBELLE_COURT" => "ff", - "LIBELLE_LONG" => "ff", - "SERVICE_STATUTAIRE" => TRUE, - ], ], "TYPE_PIECE_JOINTE" => [ [ @@ -73966,8 +74484,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 28, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "PFA", @@ -73977,7 +74495,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74060,9 +74578,9 @@ return [ ], [ "CHANGEMENT_RIB" => FALSE, - "DUREE_VIE" => 1, - "FC" => TRUE, - "NUM_REGLE" => 1, + "DUREE_VIE" => 99, + "FC" => FALSE, + "NUM_REGLE" => 2, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, @@ -74132,9 +74650,9 @@ return [ ], [ "CHANGEMENT_RIB" => FALSE, - "DUREE_VIE" => 1, - "FC" => TRUE, - "NUM_REGLE" => 1, + "DUREE_VIE" => 99, + "FC" => FALSE, + "NUM_REGLE" => 2, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, @@ -74229,8 +74747,8 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, - "NUM_REGLE" => 1, + "FC" => TRUE, + "NUM_REGLE" => 2, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, @@ -74241,7 +74759,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74254,8 +74772,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 18, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "ASS_MI_TPS", @@ -74265,7 +74783,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74277,7 +74795,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74290,8 +74808,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 24, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "DOCTOR_OLD", @@ -74301,7 +74819,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74314,8 +74832,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 8, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "LECTEUR", @@ -74326,8 +74844,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 16, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "MAITRE_LANG", @@ -74420,9 +74938,9 @@ return [ ], [ "CHANGEMENT_RIB" => FALSE, - "DUREE_VIE" => 1, - "FC" => TRUE, - "NUM_REGLE" => 2, + "DUREE_VIE" => 99, + "FC" => FALSE, + "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, @@ -74492,9 +75010,9 @@ return [ ], [ "CHANGEMENT_RIB" => FALSE, - "DUREE_VIE" => 99, - "FC" => FALSE, - "NUM_REGLE" => 1, + "DUREE_VIE" => 1, + "FC" => TRUE, + "NUM_REGLE" => 2, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, @@ -74566,8 +75084,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 12, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "ENS_CH_CONTRAT", @@ -74769,7 +75287,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74781,7 +75299,7 @@ return [ [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, - "FC" => FALSE, + "FC" => TRUE, "NUM_REGLE" => 1, "OBLIGATOIRE" => 1, "OBLIGATOIRE_HNP" => FALSE, @@ -74794,8 +75312,8 @@ return [ "CHANGEMENT_RIB" => FALSE, "DUREE_VIE" => 1, "FC" => FALSE, - "NUM_REGLE" => 1, - "OBLIGATOIRE" => 1, + "NUM_REGLE" => 4, + "OBLIGATOIRE" => 0, "OBLIGATOIRE_HNP" => FALSE, "SEUIL_HETD" => 0.0, "STATUT_ID" => "ENS_CONTRACT_CDI", diff --git a/data/etats_sortie.php b/data/etats_sortie.php index 2843d81ce9dfb756e2bdfbe3c8002cb5231095b1..116adfe3a13fb26644b1c893193f584a693d8184 100644 --- a/data/etats_sortie.php +++ b/data/etats_sortie.php @@ -1,6 +1,17 @@ <?php return [ + [ + 'CODE' => 'contrat', + 'LIBELLE' => 'Contrat de travail', + 'PDF_TRAITEMENT' => '/data/Etats de sortie/contrat.php', + 'AUTO_BREAK' => true, + 'REQUETE' => 'SELECT * FROM v_contrat_main', + 'CLE' => 'CONTRAT_ID', + 'BLOC1_NOM' => 'serviceCode', + 'BLOC1_ZONE' => 'table:table-row', + 'BLOC1_REQUETE' => 'SELECT * FROM V_CONTRAT_SERVICES', + ], [ 'CODE' => 'preliquidation-siham', 'LIBELLE' => 'Préliquidation SIHAM', @@ -29,9 +40,9 @@ return [ "MATRICULE": { "libelle": "Matricule" }, - "RETENUE": { - "libelle": "Retenue" - }, + "CODE_INDEMNITE_RETENU": { + "libelle": "Code indemnité/retenue" + } "DU_MOIS": { "libelle": "Du mois (AAAA-MM)" }, @@ -193,7 +204,7 @@ return [ "AGREE" : { "visible": false }, "ANNEE": { "libelle": "Année"}, "INTERVENANT_CODE": { "libelle": "Code intervenant"}, - "STRUCTURE_LIBELLE": {"libelle": "Structure hiérarchique"}, + "STRUCTURE_LIBELLE": {"libelle": "Structure d\'enseignement"}, "INTERVENANT_STRUCTURE_LIBELLE": {"libelle": "Structure d\'affectation"}, "INTERVENANT_NOM_USUEL": {"libelle": "Nom usuel"}, "INTERVENANT_NOM_PATRONYMIQUE": {"libelle": "Nom patronymique"}, diff --git a/data/indicateurs.php b/data/indicateurs.php index adbae4806d348484c641bbdabef91a1246b230a5..a15cb697633be98e30a516e2ecc10d8c137c7bc8 100644 --- a/data/indicateurs.php +++ b/data/indicateurs.php @@ -158,6 +158,20 @@ return [ 'Enseignements et référentiel <em>Permanents</em>' => [ 'id' => 6, 'indicateurs' => [ + 500 => [ + 'enabled' => true, + 'libelle_singulier' => '%s permanent n\'a saisi aucun service <i>prévisionnels</i>', + 'libelle_pluriel' => '%s permanents n\'ont saisi aucun service <i>prévisionnels</i>', + 'route' => 'intervenant/voir', + 'irrecevables' => false, + ], + 505 => [ + 'enabled' => true, + 'libelle_singulier' => '%s permanent n\'a saisi aucun service <i>réalisés</i>', + 'libelle_pluriel' => '%s permanents n\'ont saisi aucun service <i>réalisés</i>', + 'route' => 'intervenant/voir', + 'irrecevables' => false, + ], 510 => [ 'enabled' => true, 'libelle_singulier' => '%s permanent est en attente de validation de ses enseignements <i>prévisionnels</i>', diff --git a/data/nomenclatures.php b/data/nomenclatures.php index 9f0a44dee897e7648f53897987c0b4e2839a0721..6208b61af059867f64ff49db413ee070b9ca40d4 100644 --- a/data/nomenclatures.php +++ b/data/nomenclatures.php @@ -582,6 +582,16 @@ return [ 'ORDRE' => 14, 'FEUILLE_DE_ROUTE' => true, ], + [ + 'TBL_NAME' => 'mission', + 'TABLE_NAME' => 'TBL_MISSION', + 'VIEW_NAME' => 'V_TBL_MISSION', + 'SEQUENCE_NAME' => null, + 'CONSTRAINT_NAME' => 'TBL_MISSION_UN', + 'CUSTOM_CALCUL_PROC' => null, + 'ORDRE' => 15, + 'FEUILLE_DE_ROUTE' => true, + ], [ 'TBL_NAME' => 'workflow', 'TABLE_NAME' => null, @@ -589,7 +599,7 @@ return [ 'SEQUENCE_NAME' => null, 'CONSTRAINT_NAME' => null, 'CUSTOM_CALCUL_PROC' => 'OSE_WORKFLOW.CALCULER_TBL', - 'ORDRE' => 15, + 'ORDRE' => 16, 'FEUILLE_DE_ROUTE' => true, 'PARAMETRES' => 'INTERVENANT_ID,ANNEE_ID', ], @@ -600,7 +610,7 @@ return [ 'SEQUENCE_NAME' => null, 'CONSTRAINT_NAME' => 'TBL_PLAFOND_STR_UN', 'CUSTOM_CALCUL_PROC' => null, - 'ORDRE' => 16, + 'ORDRE' => 17, 'FEUILLE_DE_ROUTE' => true, ], [ @@ -610,7 +620,7 @@ return [ 'SEQUENCE_NAME' => null, 'CONSTRAINT_NAME' => 'TBL_PLA_INT_UN', 'CUSTOM_CALCUL_PROC' => null, - 'ORDRE' => 17, + 'ORDRE' => 18, 'FEUILLE_DE_ROUTE' => true, ], [ @@ -620,7 +630,7 @@ return [ 'SEQUENCE_NAME' => null, 'CONSTRAINT_NAME' => 'TBL_PLAFOND_ELEMENT_UN', 'CUSTOM_CALCUL_PROC' => null, - 'ORDRE' => 18, + 'ORDRE' => 19, 'FEUILLE_DE_ROUTE' => true, ], [ @@ -630,7 +640,7 @@ return [ 'SEQUENCE_NAME' => null, 'CONSTRAINT_NAME' => 'TBL_PLAFOND_VH_UN', 'CUSTOM_CALCUL_PROC' => null, - 'ORDRE' => 19, + 'ORDRE' => 20, 'FEUILLE_DE_ROUTE' => true, ], [ @@ -640,7 +650,7 @@ return [ 'SEQUENCE_NAME' => null, 'CONSTRAINT_NAME' => 'TBL_PLAFOND_REF_UN', 'CUSTOM_CALCUL_PROC' => null, - 'ORDRE' => 20, + 'ORDRE' => 21, 'FEUILLE_DE_ROUTE' => true, ], ], @@ -741,6 +751,11 @@ return [ "CODE" => "E", "LIBELLE" => "Vacataire", ], + [ + 'ID' => 3, + "CODE" => "S", + "LIBELLE" => "Étudiant", + ], ], 'TYPE_INTERVENTION' => [ @@ -857,6 +872,16 @@ return [ "CODE" => "CLOTURE_REALISE", "LIBELLE" => "Clôture de la saisie des enseignements réalisés", ], + [ + 'ID' => 8, + "CODE" => "MISSION", + "LIBELLE" => "Validation de mission par la DRH", + ], + [ + 'ID' => 9, + "CODE" => "MISSION_REALISE", + "LIBELLE" => "Validation d'heures de mission réalisées", + ], ], 'TYPE_VOLUME_HORAIRE' => [ @@ -874,10 +899,45 @@ return [ ], ], + 'TAUX_REMU' => [ + [ + 'ID' => 1, + 'CODE' => 'TLD', + 'LIBELLE' => 'Taux légal par défaut', + ], + ], + + 'TAUX_REMU_VALEUR' => [ + [ + 'ID' => 1, + 'TAUX_REMu_ID' => 1, + 'DATE_EFFET' => '27/07/2009', + 'VALEUR' => 40.58, + ], + [ + 'ID' => 2, + 'TAUX_REMu_ID' => 1, + 'DATE_EFFET' => '25/06/2014', + 'VALEUR' => 40.91, + ], + [ + 'ID' => 3, + 'TAUX_REMu_ID' => 1, + 'DATE_EFFET' => '01/02/2017', + 'VALEUR' => 41.41, + ], + [ + 'ID' => 4, + 'TAUX_REMu_ID' => 1, + 'DATE_EFFET' => '01/07/2022', + 'VALEUR' => 42.86, + ], + ], + 'UTILISATEUR' => [ [ 'USERNAME' => 'oseappli', - 'EMAIL' => 'dsi.applications@unicaen.fr', + 'EMAIL' => 'votre_mail@votre_etablissement.fr', 'DISPLAY_NAME' => 'Application OSE', 'PASSWORD' => 'x', 'STATE' => 1, diff --git a/data/privileges.php b/data/privileges.php index 10efdbb20a2c45f3c5f531bb5d1ff493ea66deaa..7e1a4bcaf901acb8b06fefb2957a4e05eaadb245 100644 --- a/data/privileges.php +++ b/data/privileges.php @@ -147,6 +147,24 @@ return [ ], ], + 'mission' => [ + 'libelle' => 'Missions', + 'privileges' => [ + 'visualisation' => 'Visualisation', + 'edition' => 'Edition', + 'validation' => 'Validation', + 'devalidation' => 'Dévalidation', + 'autovalidation' => 'Autovalidation', + 'edition-realise' => 'Edition des heures réalisées', + 'validation-realise' => 'Validation des heures réalisées', + 'devalidation-realise' => 'Dévalidation des heures réalisées', + 'autovalidation-realise' => 'Auto-validation des heures réalisées', + 'visualisation-type' => 'Visualisation des types de mission', + 'edition-type' => 'Edition des types de mission', + 'suppression-type' => 'Suppression des types de mission', + ], + ], + 'motif-non-paiement' => [ 'libelle' => 'Motifs de non paiement (pour enseignements)', 'privileges' => [ @@ -156,6 +174,15 @@ return [ 'administration-edition' => 'Administration - Édition', ], ], + 'tag' => [ + 'libelle' => 'Tag', + 'privileges' => [ + 'visualisation' => 'Visualisation', + 'edition' => 'Édition', + 'administration-visualisation' => 'Administration - Visualisation', + 'administration-edition' => 'Administration - Édition', + ], + ], 'referentiel' => [ 'libelle' => 'Référentiel', @@ -449,5 +476,14 @@ return [ ], ], + 'taux' => [ + 'libelle' => 'Taux', + 'privileges' => [ + 'visualisation' => 'Visualisation des taux', + 'edition' => 'Edition des taux', + 'suppression' => 'Suppression des taux', + ], + ], + ]; \ No newline at end of file diff --git a/data/workflow_etapes.php b/data/workflow_etapes.php index 9f2f0f2ff58594e2e8c6394f22cba4bda9a2f7c6..123ddacb7261a77f640dc30e4db441c5e84b4481 100644 --- a/data/workflow_etapes.php +++ b/data/workflow_etapes.php @@ -36,6 +36,20 @@ return [ "DESC_NON_FRANCHIE" => "Les données personnelles n'ont pas été validées", "OBLIGATOIRE" => true, ], + "MISSION_SAISIE" => [ + "LIBELLE_INTERVENANT" => "Je visualise mes missions", + "LIBELLE_AUTRES" => "J'accède aux missions", + "ROUTE" => "intervenant/missions", + "DESC_NON_FRANCHIE" => "Aucune mission attibuée", + "OBLIGATOIRE" => true, + ], + "MISSION_VALIDATION" => [ + "LIBELLE_INTERVENANT" => "Je visualise la validation de mes missions", + "LIBELLE_AUTRES" => "Je valide les missions saisies", + "ROUTE" => "intervenant/missions", + "DESC_NON_FRANCHIE" => "Certaines missions n'ont pas été validées", + "OBLIGATOIRE" => true, + ], "SERVICE_VALIDATION" => [ "LIBELLE_INTERVENANT" => "Je visualise la validation de mes services prévisionnels", "LIBELLE_AUTRES" => "Je visualise la validation des enseignements prévisionnels", @@ -78,6 +92,13 @@ return [ "DESC_NON_FRANCHIE" => "Aucun enseignement réalisé n'a été saisi", "OBLIGATOIRE" => true, ], + "MISSION_SAISIE_REALISE" => [ + "LIBELLE_INTERVENANT" => "Je renseigne mon suivi de mission", + "LIBELLE_AUTRES" => "J'accède au suivi de mission", + "ROUTE" => "intervenant/missions", + "DESC_NON_FRANCHIE" => "Aucune heure de mission réalisée n'a été renseignée", + "OBLIGATOIRE" => true, + ], "CLOTURE_REALISE" => [ "LIBELLE_INTERVENANT" => "Je visualise la clôture de la saisie de mes services réalisés", "LIBELLE_AUTRES" => "Je visualise la clôture de la saisie des services réalisés", @@ -92,6 +113,13 @@ return [ "DESC_NON_FRANCHIE" => "Le service réalisé n'a été intégralement validé", "OBLIGATOIRE" => true, ], + "MISSION_VALIDATION_REALISE" => [ + "LIBELLE_INTERVENANT" => "Je visualise la validation de mon suivi de mission", + "LIBELLE_AUTRES" => "J'accède à la validation du suivi de mission", + "ROUTE" => "intervenant/missions", + "DESC_NON_FRANCHIE" => "Des heures de mission réalisées n'ont pas été validées", + "OBLIGATOIRE" => true, + ], "REFERENTIEL_VALIDATION_REALISE" => [ "LIBELLE_INTERVENANT" => "Je visualise la validation de mon référentiel réalisé", "LIBELLE_AUTRES" => "Je visualise la validation du référentiel réalisé", diff --git a/doc/Connecteurs-Import/Octopus/MV_INTERVENANT.sql b/doc/Connecteurs-Import/Octopus/MV_INTERVENANT.sql index 6e0304fd7b9456130f3f2f82c2221beb378629db..484b353f9c482dedb7456bac3533cb9e307bbace 100644 --- a/doc/Connecteurs-Import/Octopus/MV_INTERVENANT.sql +++ b/doc/Connecteurs-Import/Octopus/MV_INTERVENANT.sql @@ -66,6 +66,24 @@ WITH i AS ( AND icto.individu_id IS NULL --AND (vinds.t_doctorant='N' OR vinds.individu_id IS NULL) AND inds.c_source IN ('HARP', 'OCTO', 'SIHAM') + + UNION ALL + + SELECT uni.c_individu_chaine code, + 'ETUDIANT' z_statut_id, + 'etudiant' z_type, + uni.c_individu_chaine || '-etudiant' source_code, + COALESCE(inds.d_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, + CASE + WHEN inds.d_fin = to_date('01/09/2021', 'dd/mm/YYYY') THEN to_date('31/08/2021', 'dd/mm/YYYY') + ELSE COALESCE(inds.d_fin, to_date('01/01/9999', 'dd/mm/YYYY')) END validite_fin, + NULL fin_affectation_siham + FROM octo.individu_unique@octoprod uni + JOIN octo.individu_statut@octoprod inds ON inds.individu_id = uni.c_individu_chaine + LEFT JOIN octo.v_individu_statut@octoprod vinds ON vinds.individu_id = uni.c_individu_chaine + WHERE inds.d_debut - 184 <= SYSDATE + AND inds.t_etudiant = 'O' + AND inds.c_source IN ('APO', 'OCTO') ) t @@ -283,14 +301,10 @@ FROM i LEFT JOIN octo.pays@octoprod pays ON pays.id = adr.pays_id --On récupére le téléphone pro principal de l'indivdu LEFT JOIN telephone_pro_principal telpro ON telpro.individu_id = induni.c_individu_chaine - -- On ne prend que les comptes qui ne sont pas étudiants - --LEFT JOIN octo.individu_compte@octoprod indc - -- ON indc.individu_id = induni.c_individu_chaine AND not regexp_like(ldap_uid, 'e[0-9]{8}') AND - -- indc.statut_id = 1 LEFT JOIN compte ON compte.individu_id = induni.c_individu_chaine --On récupére la discipline adaptée directement dans Octopus LEFT JOIN cnua cnua ON cnua.individu_id = induni.c_individu_chaine -WHERE i.validite_fin >= (sysdate - (365 * 2)) +WHERE i.validite_fin >= (sysdate - (365 * 2)) AND 1 = (CASE WHEN str2.code IS NULL AND i.z_type = 'permanent' AND i.z_statut_id NOT IN ('BIATSS', 'PAMSU') THEN 0 ELSE 1 END ) diff --git a/doc/Insertion-Periodes/InsertionPeriodes.sql b/doc/Insertion-Periodes/InsertionPeriodes.sql index d26e226dd82263586f8804ee3ad65de323dcb707..a7cbf25dd2521d95e30624752efc45bb812cc4c9 100644 --- a/doc/Insertion-Periodes/InsertionPeriodes.sql +++ b/doc/Insertion-Periodes/InsertionPeriodes.sql @@ -7,7 +7,7 @@ v_ordre number := 18; v_delta_mois number := 17; v_id_periode number; begin - for i in 2..12 loop + for i in 1..12 loop select periode_id_seq.nextval into v_id_periode from dual; insert into periode(id,code,libelle_long,libelle_court,ecart_mois,ordre,enseignement,paiement,histo_creation,histo_createur_id,histo_modification,histo_modificateur_id) values ( v_id_periode @@ -50,7 +50,6 @@ begin v_ordre := v_ordre+1; end loop; commit; - update periode set libelle_long = 'Reliquat Janvier', libelle_court = 'Reliquat 01' where code = 'PTD'; end; -- 3 année univ dans OSE diff --git a/doc/dev.md b/doc/dev.md new file mode 100644 index 0000000000000000000000000000000000000000..f63c2e86f495600f16ba1b4a5e92f6eb2250d472 --- /dev/null +++ b/doc/dev.md @@ -0,0 +1,198 @@ +# Installation de l'environnement de développement de OSE + +OSE a besoin de npm et node.js + +NPM doit être installé sur la machine au moyen du gestionnaire de packages + +Pour utiliser la version 19 de node sur Ubuntu, utiliser la commande : + +```bash +curl -fsSL https://deb.nodesource.com/setup_19.x | sudo -E bash - +``` + +Reste à l'installer en passant par le gestionnaire de paquets de la distribution. +```bash +apt install npm +``` + +Attention : l'utilisation de npm doit se faire toujours depuis la machine hôte et pas à l'intérieur du conteneurDocker. + +Il faut ensuite installer les dépendances (Vue, Vite, Sass, etc.) + +Dans le dossier du projet : +```bash +npx npm install +``` + +Reste à démarrer Vite en mode dév : + +```bash +npx vite dev +``` + +Ceci permet de faire du "hot loading". C'est-à-dire que les modifications du composant peuvent se voir dans le navigateur sans avoir à rafraichir la page. + + + +## Commandes usuelles + +### Mise à jour des dépendances Node + +Le fichier package.json gère les dépendances et la config de NPM +Si on veut mettre à jour les dépendances (équivalent de composer update), il faut lancer + +```bash +npx npm update +``` + +### Préparation pour le déploiement + +Vite est un outil de développement web rapide qui permet de créer facilement +des projets web avec Vue.js ou autre. +Il offre un serveur de développement local, le rechargement en direct et la compilation en temps réel +et peut être configuré avec Babel et TypeScript. + +Avec Vite, il faut lancer un build afin de générer les fichiers destinés à la production. + +```bash +npx vite build +``` + +Les fichiers ainsi générés seront placés dans le répertoire public/dist. +Enfin, commitez le tout et testez avant de déployer!!! + + + +## Création de composants Vue + +Sites officiels : +- https://vuejs.org/ +- https://vitejs.dev/ + +Doc Vue de Stéphane : +- https://git.unicaen.fr/bouvry/presentation-dev/-/blob/master/src/vuejs.md + +Les composants doivent être placés dnas le répertoire front/components. +Ils peuvent être placés dans des sous-répertoires. + +### Ajouter un composant Vue depuis une view Laminas + +Une aide de vue permet d'ajouter un composant. + +Exemple : + +```php +echo $this->vue('mission/liste', [ + 'intervenant' => $intervenant->getId(), + 'canAddMission' => $canAddMission, + 'options' => [ + 'typeMission' => $missionForm->get('typeMission')->getValueOptions(), + 'structure' => $missionForm->get('structure')->getValueOptions(), + 'tauxRemu' => $missionForm->get('tauxRemu')->getValueOptions(), + ], +]); +``` + +Si on veut insérer plusieurs composants, il faut faire : + +```php +// on démarre une vue-app +echo $this->vue()->begin(); + + +// affichage des composants +echo $this->vue()->component('monPremierComposant', [/* tableau de propriétés */]); +echo $this->vue()->component('monSecondComposant', [/* tableau de propriétés */]); + +// on termine la vue-app +echo $this->vue()->end(); +``` + +L'exemple ci-dessus charge et affiche le composant situé dans le fichier front/components/Mission/Liste.vue +On lui transmet les propriétés intervenant, canAddMission et un tableau d'options. + +### Utiliser un composant Vue depuis un autre : +<template> + <!-- Utilisation du "popover" comme sous-composant --> + <popover title="Mon titre cool"></popover> +</template> + +<script> + +// import "absolu, depuis le répertoire /front/components +import popover from '@components/Application/Popover.vue'; + +// import relatif, depuis le répertoire du composant actuel +import popover from '../../Application/Popover.vue'; + +// import d'un composant dans le même répertoire que l'actuel +import popover from './Popover.vue'; + +// dans tous les cas, on a choisi d'appeler localement le composant "popover" + +export default { + name: 'Mission', + components: { + popover // on déclare l'usage du composant ici + } +} + +</script> + + +## Communication front/serveur en AJAX avec axios + +Site officiel : https://axios-http.com/fr/docs/intro + +Depuis un morceau de code javascript : +```js + +// Données à poster +let data = { + 'param1' => 'mon premier paramètre', + 'param2' => 'mon deuxième paramètre' +}; + +// URL à utiliser. Ici, on la construit à partir d'une route avec Util.url +let url = Util.url('mission/modifier/:intervenant', {intervenant: 1000000}); + +// on utilise axios pour poster et récupérer le résultat +axios.post( + url, + data +).then((response) => { + + // récup des données renvoyées par le serveur + console.log(response.data); + + // on peut aussi récupérer les messages envoyés par le flashMessenger : + console.log(response.messages); +}); +``` + +Depuis une action de contrôleur Laminas : + +```php + public function modifierAction() + { + // on récupère les données postées + // le $this->params()->fromPost() ne fonctionne pas ici, il faut passer par axios, mais la syntaxe est identique + $input = $this->axios()->fromPost(); + + var_dump($input); + + // on crée un tableau de données de sortie + $output = [ + 'param1' => 'mon premier paramètre', + 'param2' => 'mon deuxième paramètre', + // ... + ]; + + + // Axios capte les messages envoyés par le flashMessenger et il les transfère au client + $this->flashMessenger()->addSuccessMessage('Youpi, super!'); + + // On utilise le plugin axios pour renvoyer $donnees en client qui récupèrera les valeurs dans le response.data + return $this->axios()->send($output); + } +``` \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index cace490ad42acfe6bb0a5f2484b30b9af9f599dd..bfa5496482f69d19cda615bc009c1b7e94f90008 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -44,6 +44,7 @@ services: APPLICATION_HOSTNAME: ose-test.pc-local XDEBUG_CONFIG: "remote_host=172.21.0.15" PHP_IDE_CONFIG: "serverName=ose-test.pc-local" + IGNORE_MV_EXT_SERVICE: "true" build: context: . diff --git a/docker/test/php.conf b/docker/test/php.conf index 15d6e1a7f205cd3f71012f3c1b00ff9c76a5ef29..7de2ad8efcae234d7cd6a8e780ca64c1a805beb2 100644 --- a/docker/test/php.conf +++ b/docker/test/php.conf @@ -23,25 +23,12 @@ session.upload_progress.cleanup = On opcache.enable = 1 -xdebug.remote_enable = 0 -xdebug.remote_connect_back = 0 -xdebug.remote_port = 9000 -#xdebug.scream = 0 -#xdebug.cli_color = 1 -#xdebug.show_local_vars = 1 -xdebug.remote_autostart = 0 - -xdebug.profiler_enable = 0 -xdebug.profiler_enable_trigger = 0 -xdebug.profiler_enable_trigger_value=0 -xdebug.profiler_output_dir = "/tmp/profiler" +xdebug.mode = debug, develop +xdebug.log_level = 0 +xdebug.cli_color = 1 xdebug.profiler_output_name = "xdebug.out.%p" - -xdebug.coverage_enable = 0 - +xdebug.client_host=host.docker.internal +xdebug.start_with_request=yes +xdebug.discover_client_host=1 xdebug.var_display_max_children = 512 -xdebug.var_display_max_data = -1 xdebug.max_nesting_level = 128 - -# Attention: trop diminuer 'max_nesting_level' peut causer une erreur 'Maximum function nesting level of x reached' -#xdebug.collect_params = 4 \ No newline at end of file diff --git a/front/Application/UI/UHeures.vue b/front/Application/UI/UHeures.vue new file mode 100644 index 0000000000000000000000000000000000000000..8a2d28347cd7995e35460cf17e33ca099ab80929 --- /dev/null +++ b/front/Application/UI/UHeures.vue @@ -0,0 +1,21 @@ +<template> + <span class="heures" v-html="affichage"></span> +</template> + +<script> +export default { + name: "UIcon", + props: { + valeur: {required: true, type: Float64Array}, + }, + computed: { + affichage: function () { + return Util.formattedHeures(this.valeur, true) + } + } +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Application/UI/UIcon.vue b/front/Application/UI/UIcon.vue new file mode 100644 index 0000000000000000000000000000000000000000..f33691bd3e4402f6d75d41e886421bf819ba703b --- /dev/null +++ b/front/Application/UI/UIcon.vue @@ -0,0 +1,17 @@ +<template> + <i :class="`fas fa-${name} text-${variant}`"></i> +</template> + +<script> +export default { + name: "UIcon", + props: { + name: {required: true, type: String}, + variant: {required: false, type: String}, + }, +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Application/UI/UModal.vue b/front/Application/UI/UModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..d6a51506cf5b9fa8c119366f55d2be2d84688c5c --- /dev/null +++ b/front/Application/UI/UModal.vue @@ -0,0 +1,34 @@ +<template> + <div class="modal fade" :id="id" tabindex="-1" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title">{{ title }}</h5> + <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> + </div> + <div class="modal-body"> + <slot name="body"></slot> + </div> + <div class="modal-footer"> + <slot name="footer"></slot> + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button> + </div> + </div> + </div> + </div> +</template> + +<script> + +export default { + name: "UModal", + props: { + id: {required: true, type: String}, + title: {required: true, type: String}, + }, +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Application/Utilisateur.vue b/front/Application/Utilisateur.vue new file mode 100644 index 0000000000000000000000000000000000000000..ec0ed9675c6233f06a712f519ea7ff216071d638 --- /dev/null +++ b/front/Application/Utilisateur.vue @@ -0,0 +1,17 @@ +<template> + <a :href="`mailto:${mail}`">{{ nom }}</a> +</template> + +<script> +export default { + name: "Utilisateur", + props: { + nom: String, + mail: String + } +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Intervenant/Recherche.vue b/front/Intervenant/Recherche.vue new file mode 100644 index 0000000000000000000000000000000000000000..54bb4f124ebc211817df8b731c399289fb57273e --- /dev/null +++ b/front/Intervenant/Recherche.vue @@ -0,0 +1,170 @@ +<template> + <h3>Saisissez le nom suivi éventuellement du prénom (2 lettres minimum)</h3> + + <div class="intervenant-recherche"> + <div class="critere"> + <div> + <input id="term" v-on:keyup="rechercher" class="form-control input" type="text" + placeholder="votre recherche..."/><br/> + </div> + <div> + <span class="fw-bold">Types d'intervenant : </span> + <input v-on:change="reload()" type="checkbox" name="type[]" value="permanent" checked="checked" v-model="checkedTypes"> Permanent + <input v-on:change="reload()" type="checkbox" name="type[]" value="vacataire" checked="checked" v-model="checkedTypes"> Vacataire + <input v-on:change="reload()" type="checkbox" name="type[]" value="etudiant" checked="checked" v-model="checkedTypes"> Etudiant + + </div> + <br/> + </div> + </div> + + + <table v-if="intervenants.length > 0" class="table table-bordered table-hover"> + <thead> + <tr> + <th style="width:90px"></th> + <th>Civilité</th> + <th>Nom</th> + <th>Prenom</th> + <th>Structure</th> + <th>Statut</th> + <th>Date de naissance</th> + <th>N° Personnel</th> + </tr> + </thead> + <tbody> + <tr :class="{'bg-danger': intervenant.destruction!==null}" :title="(intervenant.destruction!==null) ? 'Fiche historisé' : ''" + v-for="(intervenant,code) in intervenants"> + <td style=""> + <a :href="urlFiche(intervenant['code'])"><i class="fas fa-eye"></i> Fiche</a> + </td> + <td>{{ intervenant['civilite'] }}</td> + <td>{{ intervenant['nom'] }}</td> + <td>{{ intervenant['prenom'] }}</td> + <td>{{ intervenant['structure'] }}</td> + <td>{{ intervenant['statut'] }}</td> + <td>{{ intervenant['date-naissance'] }}</td> + <td>{{ intervenant['numero-personnel'] }}</td> + </tr> + + </tbody> + </table> + + <table v-if="intervenants.length == 0 && noResult == 1" class="table table-bordered table-hover"> + <thead> + <tr> + <th style="width:90px"></th> + <th>Civilité</th> + <th>Nom</th> + <th>Prenom</th> + <th>Structure</th> + <th>Statut</th> + <th>Date de naissance</th> + <th>N° Personnel</th> + </tr> + </thead> + <tbody> + <tr> + <td style="text-align:center" colspan="8">Aucun intervenant trouvé</td> + </tr> + + </tbody> + </table> +</template> + + +<script> + + +export default { + name: 'Recherche', + + data() + { + return { + searchTerm: '', + noResult: 0, + intervenants: [], + checkedTypes: ['vacataire', 'permanent', 'etudiant'], + }; + }, + + methods: { + rechercher: function (event) + { + this.searchTerm = event.currentTarget.value; + if (this.searchTerm == '') { + this.noResult = 0; + } + if (this.searchTerm != '') { + this.reload(); + } + }, + + urlFiche(code) + { + return '/intervenant/code:'+code+'/voir'; + }, + + reload() + { + + if (this.timer) { + clearTimeout(this.timer); + this.timer = null; + } + this.timer = setTimeout(() => { + + axios.post( + Util.url("intervenant/recherche-json"), { + term: this.searchTerm + } + ) + .then(response => { + let datas = response.data; + let datasFiltered = []; + + for (const intervenant in datas) { + if (datas[intervenant].typeIntervenantCode == 'E' && this.checkedTypes.includes('vacataire')) { + datasFiltered.push(datas[intervenant]); + continue; + } + if (datas[intervenant].typeIntervenantCode == 'P' && this.checkedTypes.includes('permanent')) { + datasFiltered.push(datas[intervenant]); + continue; + } + if (datas[intervenant].typeIntervenantCode == 'S' && this.checkedTypes.includes('etudiant')) { + datasFiltered.push(datas[intervenant]); + continue; + } + + } + this.intervenants = datasFiltered; + + if (this.intervenants.length == 0) { + this.noResult = 1; + } else { + this.noResult = 0; + } + + + + }) + .catch(response => { + console.log(response.message); + }); + }, 800); + + } + + + + } + + +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Mission/Liste.vue b/front/Mission/Liste.vue new file mode 100644 index 0000000000000000000000000000000000000000..73ad576627e20aeaca73c8d8a00f5e97f9392520 --- /dev/null +++ b/front/Mission/Liste.vue @@ -0,0 +1,59 @@ +<template> + <mission v-for="mission in missions" @supprimer="supprimer" @refresh="refresh" :key="mission.id" :mission="mission"></mission> + <a v-if="canAddMission" class="btn btn-primary" :href="ajoutUrl" @click.prevent="ajout">Ajout d'une nouvelle mission</a> +</template> + +<script> + +import mission from './Mission.vue'; + +export default { + components: { + mission + }, + props: { + intervenant: {type: Number, required: true}, + canAddMission: {type: Boolean, required: true}, + }, + data() + { + return { + missions: [], + ajoutUrl: Util.url('mission/ajout/:intervenant', {intervenant: this.intervenant}) + }; + }, + mounted() + { + this.reload(); + }, + methods: { + ajout(event) + { + modAjax(event.target, (widget) => { + this.reload(); + }); + }, + supprimer(mission) + { + this.reload(); + }, + refresh(mission) + {console.log(mission); + let index = Util.json.indexById(this.missions, mission.id); + this.missions[index] = mission; + }, + reload() + { + axios.get( + Util.url("mission/liste/:intervenant", {intervenant: this.intervenant}) + ).then(response => { + this.missions = response.data; + }); + }, + } +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Mission/Mission.vue b/front/Mission/Mission.vue new file mode 100644 index 0000000000000000000000000000000000000000..06e9f2a4b327521e6cb48253da800657ee2d307d --- /dev/null +++ b/front/Mission/Mission.vue @@ -0,0 +1,280 @@ +<template> + <div :id="mission.id" class="card" :class="{'bg-success':mission.valide,'bg-default':!mission.valide}"> + <form @submit.prevent="submitForm"> + <div class="card-header card-header-h3"> + <h5> + {{ mission.typeMission.libelle }} + <span class="float-end">Du {{ mission.dateDebut }} au {{ mission.dateFin }}</span> + </h5> + </div> + <div class="card-body"> + <div class="row"> + <div class="col-md-8"> + <!-- Propriétés --> + <div class="row"> + <div class="col-md-12"> + <label class="form-label">Composante en charge du suivi</label> + <div class="form-control">{{ mission.structure.libelle }}</div> + </div> + </div> + <div class="row"> + <div class="col-md-5"> + <label class=" form-label">Taux de rémunération</label> + <div class="form-control">{{ mission.tauxRemu.libelle }}</div> + </div> + <div class="col-md-7"> + <label class=" form-label">Nombre d'heures prévisionnelles</label> + <div class="input-group mb-3"> + <div class="form-control" v-html="heuresLib"></div> + <button class="input-group-btn btn btn-secondary" data-bs-toggle="modal" :data-bs-target="`#details-${mission.id}`"> + <u-icon name=""/> + Détails + </button> + </div> + </div> + </div> + <div class="row"> + <div class="col-md-12"> + <label class=" form-label">Descriptif de la mission</label> + <div class="form-control">{{ mission.description }}</div> + </div> + </div> + <div class="row"> + <div class="col-md-12"> </div> + </div> + <div class="row"> + <!-- Boutons d'actions --> + <div class="col-md-12"> + <a v-if="mission.canSaisie" + :href="saisieUrl" + class="btn btn-primary" + @click.prevent="saisie">Modifier</a> + + <a v-if="mission.canValider" + :href="validerUrl" + class="btn btn-secondary" + data-title="Validation de la mission" + data-content="Êtes-vous sur de vouloir valider la mission ?" + @click.prevent="valider">Valider</a> + + <a v-if="mission.canDevalider" + :href="devaliderUrl" + class="btn btn-danger" + data-title="Dévalidation de la mission" + data-content="Êtes-vous sur de vouloir dévalider la mission ?" + @click.prevent="devalider">Dévalider</a> + + <a v-if="mission.canSupprimer" + :href="supprimerUrl" + class="btn btn-danger" + data-title="Suppression de la mission" + data-content="Êtes-vous sur de vouloir supprimer la mission ?" + @click.prevent="supprimer">Supprimer</a> + </div> + </div> + </div> + <div class="col-md-4"> + <!-- Suivi --> + <div> + <label class=" form-label">Suivi</label> + </div> + <div> + <u-icon name="thumbs-up" variant="success"/> + Créé le {{ mission.histoCreation }} par + <utilisateur :nom="mission.histoCreateur.displayName" :mail="mission.histoCreateur.email"/> + </div> + <div> + <u-icon :name="mission.valide ? 'thumbs-up' : 'thumbs-down'" :variant="mission.valide ? 'success' : 'info'"/> + {{ validationText }} + <utilisateur v-if="mission.validation && mission.validation.histoCreateur" :nom="mission.validation.histoCreateur.displayName" + :mail="mission.validation.histoCreateur.email"/> + </div> + <div> + <u-icon :name="mission.contrat ? 'thumbs-up' : 'thumbs-down'" :variant="mission.contrat ? 'success' : 'info'"/> + {{ mission.contrat ? 'Contrat établi' : 'Pas de contrat' }} + </div> + <div> + Aucune heure réalisée + </div> + </div> + </div> + </div> + </form> + </div> + <u-modal :id="`details-${mission.id}`" title="Détail des heures prévisionnelles"> + <template #body> + <table class="table table-bordered table-condensed"> + <thead> + <tr> + <th>Heures</th> + <th>Statut</th> + <th>Actions</th> + </tr> + </thead> + <tbody> + <tr v-for="vh in mission.volumesHoraires" :key="vh.id"> + <td style="text-align: right"> + <u-heures :valeur="vh.heures"/> + </td> + <td> + <u-icon name="thumbs-up" variant="success"/> + Saisi par + <utilisateur :nom="vh.histoCreateur.displayName" + :mail="vh.histoCreateur.email"/> + le {{ vh.histoCreation }} + <br/> + <u-icon :name="vh.valide ? 'thumbs-up' : 'thumbs-down'" :variant="vh.valide ? 'success' : 'info'"/> + {{ vh.validation && vh.validation.id == null ? 'Autovalidé' : (!vh.validation ? 'à valider' : '') }} + <span v-if="vh.validation && vh.validation.histoCreateur"> + Validé par <utilisateur :nom="vh.validation.histoCreateur.displayName" + :mail="vh.validation.histoCreateur.email"/> le {{ vh.validation.histoCreation }} + </span> + </td> + <td> + <a v-if="vh.canValider" + class="btn btn-secondary" + :data-id="vh.id" + data-title="Validation du volume horaire" + data-content="Êtes-vous sur de vouloir valider ce volume horaire ?" + @click.prevent="volumeHoraireValider">Valider</a> + + <a v-if="vh.canDevalider" + class="btn btn-danger" + :data-id="vh.id" + data-title="Dévalidation du volume horaire" + data-content="Êtes-vous sur de vouloir dévalider ce volume horaire ?" + @click.prevent="volumeHoraireDevalider">Dévalider</a> + + <a v-if="vh.canSupprimer" + class="btn btn-danger" + :data-id="vh.id" + data-title="Suppression du volume horaire" + data-content="Êtes-vous sur de vouloir supprimer le volume horaire ?" + @click.prevent="volumeHoraireSupprimer">Supprimer</a> + </td> + </tr> + </tbody> + </table> + </template> + <template #footer> + + </template> + </u-modal> + +</template> + +<script> + +export default { + name: 'Mission', + props: { + mission: {required: true} + }, + data() + { + return { + validationText: this.calcValidation(this.mission.validation), + + saisieUrl: Util.url('mission/saisie/:mission', {mission: this.mission.id}), + validerUrl: Util.url('mission/valider/:mission', {mission: this.mission.id}), + devaliderUrl: Util.url('mission/devalider/:mission', {mission: this.mission.id}), + supprimerUrl: Util.url("mission/supprimer/:mission", {mission: this.mission.id}), + }; + }, + watch: { + 'mission.validation'(validation) + { + this.validationText = this.calcValidation(validation); + } + }, + computed: { + heuresLib: function () { + if (this.mission.heures === null || this.mission.heures === 0) { + return 'Aucune heure saisie'; + } else if (this.mission.heures == this.mission.heuresValidees) { + return Util.formattedHeures(this.mission.heures) + ' heures (validées)'; + } else if (this.mission.heuresValidees == 0) { + return Util.formattedHeures(this.mission.heures) + ' heures (non validées)'; + } else { + return Util.formattedHeures(this.mission.heures) + ' heures (' + Util.formattedHeures(this.mission.heuresValidees) + ' validées)'; + } + } + }, + methods: { + calcValidation(validation) + { + if (validation === null) { + return 'A valider'; + } else if (validation.id === null) { + return 'Autovalidée'; + } else { + return 'Validation du ' + validation.histoCreation + ' par '; + } + }, + saisie(event) + { + modAjax(event.target, (widget) => { + this.refresh(); + }); + }, + supprimer(event) + { + popConfirm(event.target, (response) => { + this.$emit('supprimer', this.mission); + }); + }, + valider(event) + { + popConfirm(event.target, (response) => { + this.$emit('refresh', response.data); + }); + }, + devalider(event) + { + popConfirm(event.target, (response) => { + this.$emit('refresh', response.data); + }); + }, + volumeHoraireSupprimer(event) + { + event.target.href = Util.url('mission/volume-horaire/supprimer/:missionVolumeHoraire', {missionVolumeHoraire: event.target.dataset.id}); + popConfirm(event.target, (response) => { + this.$emit('refresh', response.data); + }); + }, + volumeHoraireValider(event) + { + event.target.href = Util.url('mission/volume-horaire/valider/:missionVolumeHoraire', {missionVolumeHoraire: event.target.dataset.id}); + popConfirm(event.target, (response) => { + this.$emit('refresh', response.data); + }); + }, + volumeHoraireDevalider(event) + { + event.target.href = Util.url('mission/volume-horaire/devalider/:missionVolumeHoraire', {missionVolumeHoraire: event.target.dataset.id}); + popConfirm(event.target, (response) => { + this.$emit('refresh', response.data); + }); + }, + refresh() + { + axios.get( + Util.url("mission/get/:mission", {mission: this.mission.id}) + ).then(response => { + this.$emit('refresh', response.data); + }); + } + } +} +</script> + +<style scoped> +.card-header h5 { + font-weight: 500; +} + +.btn { + margin-left: 2px; + margin-right: 2px; +} +</style> \ No newline at end of file diff --git a/front/Paiement/ListeTaux.vue b/front/Paiement/ListeTaux.vue new file mode 100644 index 0000000000000000000000000000000000000000..ac311154ad6dcc82ff65223f71160b42b62980da --- /dev/null +++ b/front/Paiement/ListeTaux.vue @@ -0,0 +1,64 @@ +<template> + <div v-for="taux in listeTaux"> + <taux v-if="!taux.tauxRemu" @supprimer="supprimer" @refreshListe="refreshListe" :key="taux.id" :taux="taux" :listeTaux="listeTaux"></taux> + </div> + <a v-if="canEditTaux" class="btn btn-primary" :href="ajoutUrl" @click.prevent="ajout">Ajout d'un nouveau taux</a> +</template> + +<script> + +import taux from './Taux.vue'; + +export default { + components: { + taux + }, + props: { + canEditTaux: {type: Boolean, required: true}, + }, + data() + { + return { + listeTaux: [], + ajoutUrl: Util.url('taux/saisir') + }; + }, + mounted() + { + this.reload(); + }, + methods: { + ajout(event) + { + modAjax(event.target, (widget) => { + this.reload(); + }); + }, + supprimer() + { + this.reload(); + }, + refreshListe() + { + this.reload(); + }, + refresh(taux) + { + let index = Util.json.indexById(this.listeTaux, taux.id); + this.listeTaux[index] = taux; + }, + reload() + { + axios.get( + Util.url("taux/liste-taux") + ).then(response => { + this.listeTaux = response.data; + }); + }, + } +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/Paiement/Taux.vue b/front/Paiement/Taux.vue new file mode 100644 index 0000000000000000000000000000000000000000..f55e6e9554e2751f3c6bfab45f2432531255dce5 --- /dev/null +++ b/front/Paiement/Taux.vue @@ -0,0 +1,196 @@ +<template> + + <div class="card" :class="{ 'ms-5':taux.tauxRemu}"> + <div class="card-header"> + <h3 style="display:inline">{{ taux.libelle }} ({{ taux.code }})</h3> + <div class="float-end"> + <a v-if="taux.canEdit" + :href="saisieUrl" + class="btn btn-primary" + @click.prevent="saisie"> + <u-icon name="pen-to-square"/> + Modifier</a> +   + <a v-if="taux.canDelete" + :href="supprimerUrl" + class="btn btn-danger" + @click.prevent="supprimer"> + <u-icon name="trash-can"/> + Supprimer</a> + </div> + </div> + <div class="card-body"> + <!-- Pour les taux qui ne dépende pas d'un autre taux --> + <div v-if=!taux.tauxRemu> + Modification :<br/> + <ul> + <div v-for="tauxValeur in taux.tauxRemuValeurs" :key="tauxValeur.id"> + <li class=""> + <div class="row align-items-start"> + <div class="col-md-4"> + {{ tauxValeur.valeur }}€/h à partir du {{ tauxValeur.dateEffet }} + </div> + <div class="col"> + <a v-if="taux.canEdit" + class="text-primary" + @click.prevent="saisieValeur" + :data-id="tauxValeur.id"> + <u-icon name="pen-to-square"/> + </a> +   + <a v-if="taux.canEdit" + class="text-primary" + @click.prevent="supprimerValeur" + :data-id="tauxValeur.id"> + <u-icon name="trash-can"/> + </a> + </div> + </div> + </li> + </div> + </ul> + <a v-if="taux.canEdit" + :href="ajoutValeurUrl" + class="btn btn-primary btn-sm" + @click.prevent="ajoutValeur"> + <u-icon name="plus"/> + Ajouter une valeur + </a> + </div> + + <!-- Pour les taux qui dépende d'un autre taux --> + <div v-if=taux.tauxRemu class="row"> + <div class="col-md-7"> + Modification :<br/> + <ul> + <div v-for="tauxValeur in taux.tauxRemuValeurs"> + <li> + <div class="row align-items-start"> + <div class="col-md-8"> + Coéfficient de {{ tauxValeur.valeur }} à partir du {{ tauxValeur.dateEffet }} + </div> + <div class="col-md-auto"> + + <a v-if="taux.canEdit" + class="text-primary" + @click.prevent="saisieValeur" + :data-id="tauxValeur.id"> + <u-icon name="pen-to-square"/> + </a> +   + <a v-if="taux.canEdit" + class="text-primary" + @click.prevent="supprimerValeur" + :data-id="tauxValeur.id"> + <u-icon name="trash-can"/> + </a> + </div> + </div> + + </li> + </div> + </ul> + <a v-if="taux.canEdit" + :href="ajoutValeurUrl" + class="btn btn-primary btn-sm" + @click.prevent="ajoutValeur"> + <u-icon name="plus"/> + </a> + </div> + <div class="col"> + Valeurs calculées (indexées sur le taux {{ taux.tauxRemu.libelle }}) : + <ul> + <div v-for="indexResult in taux.tauxRemuValeursIndex"> + <li>{{ indexResult.valeur }}€/h à partir du {{ indexResult.date }}</li> + </div> + </ul> + <br> + </div> + + </div> + + + </div> + </div> + + <div v-if=!taux.tauxRemu> + <div v-for="item in listeTaux" :key="item"> + <div v-if="item.tauxRemu && item.tauxRemu.id === taux.id"> + <taux @supprimer="supprimer" @refreshListe="refreshListe" :key="taux.id" :taux="item" :listeTaux="listeTaux"></taux> + </div> + </div> + </div> +</template> + +<script> +import UIcon from "@/Application/UI/UIcon.vue"; + +export default { + name: "Taux", + components: {UIcon}, + props: { + taux: {required: true}, + listeTaux: {required: true}, + }, + data() + { + return { + saisieUrl: Util.url('taux/saisir/:tauxRemu', {tauxRemu: this.taux.id}), + supprimerUrl: Util.url("taux/supprimer/:tauxRemu", {tauxRemu: this.taux.id}), + ajoutValeurUrl: Util.url("taux/saisir-valeur/:tauxRemu", {tauxRemu: this.taux.id}), + }; + }, + methods: { + saisie(event) + { + modAjax(event.target, (response) => { + this.$emit('refreshListe'); + }); + }, + ajoutValeur(event) + { + modAjax(event.target, (response) => { + this.$emit('refreshListe'); + }); + }, + saisieValeur(event) + { + event.currentTarget.href = Util.url("taux/saisir-valeur/:tauxRemu/:tauxRemuValeur", + {tauxRemu: this.taux.id, tauxRemuValeur: event.currentTarget.dataset.id}); + modAjax(event.currentTarget, (response) => { + this.$emit('refreshListe'); + }); + }, + refreshListe(event) + { + this.$emit('refreshListe'); + }, + supprimer(event) + { + popConfirm(event.target, (response) => { + this.$emit('refreshListe'); + }); + }, + supprimerValeur(event) + { + event.currentTarget.href = Util.url("taux/supprimer-valeur/:tauxRemuValeur", + {tauxRemuValeur: event.currentTarget.dataset.id}); + popConfirm(event.currentTarget, (response) => { + this.$emit('refreshListe'); + }); + }, + refresh(taux) + { + axios.get( + Util.url("taux/get/:tauxRemu", {tauxRemu: taux.id}) + ).then(response => { + this.$emit('refresh', response.data); + }); + }, + } +} +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/front/autoload.js b/front/autoload.js new file mode 100644 index 0000000000000000000000000000000000000000..d2f2529999873a10811295b9263f54b54e752f20 --- /dev/null +++ b/front/autoload.js @@ -0,0 +1,10 @@ +export default { + /* UI components */ + uIcon: 'Application/UI/UIcon', + uHeures: 'Application/UI/UHeures', + uModal: 'Application/UI/UModal', + + /* App common components */ + utilisateur: 'Application/Utilisateur', + +}; \ No newline at end of file diff --git a/front/main.js b/front/main.js new file mode 100644 index 0000000000000000000000000000000000000000..5d15675d3ec9e2a743724b013cbbcfccd20ee7e9 --- /dev/null +++ b/front/main.js @@ -0,0 +1,32 @@ +import {createApp} from 'vue'; + +const vues = import.meta.glob('./**/*.vue', {eager: true}); + +import autoloadComponents from './autoload.js'; + +/* Chargement de tous les composants */ +let componentsPath = "./"; + +const components = {} +for (const path in vues) { + let compPath = path.slice(componentsPath.length, -4); + let compName = compPath.replace('/', ''); + + components[compName] = vues[path].default; +} + +// instantiate the Vue apps +// Note our lookup is a wrapping div with .vue-app class +for (const el of document.getElementsByClassName('vue-app')) { + let app = createApp({ + template: el.innerHTML, + components: components + }); + + // autoload de tous les composants déclarés + for (const alias in autoloadComponents) { + let compName = autoloadComponents[alias].replace('/', ''); + app.component(alias, components[compName]); + } + app.mount(el); +} \ No newline at end of file diff --git a/module/Application/Module.php b/module/Application/Module.php index 703681f386d05dc3694529d2fc219d2c15a63147..6ce13d3816bcdb88bc806f6ce4ee740931c338f9 100755 --- a/module/Application/Module.php +++ b/module/Application/Module.php @@ -10,6 +10,7 @@ namespace Application; use Application\ORM\RouteEntitiesInjector; +use Laminas\Mvc\Controller\AbstractActionController; use Laminas\Mvc\ModuleRouteListener; use Laminas\Mvc\MvcEvent; use Laminas\Stdlib\Glob; @@ -21,6 +22,9 @@ include_once(__DIR__ . '/src/functions.php'); +//include_once(__DIR__ . '/src/PhpVite.php'); + + class Module { private $modules = []; @@ -40,7 +44,7 @@ class Module $moduleRouteListener->attach($eventManager); /* Utilise un layout spécial si on est en AJAX. Valable pour TOUS les modules de l'application */ - $eventManager->getSharedManager()->attach('Laminas\Mvc\Controller\AbstractActionController', 'dispatch', + $eventManager->getSharedManager()->attach(AbstractActionController::class, MvcEvent::EVENT_DISPATCH, function (MvcEvent $e) { $request = $e->getRequest(); if ($request instanceof \Laminas\Http\Request && $request->isXmlHttpRequest()) { diff --git a/module/Application/config/aaa_module.config.php b/module/Application/config/aaa_module.config.php index 744254a36cb79cfd0147413f827d8d4f59f5693e..9f46cce975b2dd17b4344ae4a2296f7807bec454 100755 --- a/module/Application/config/aaa_module.config.php +++ b/module/Application/config/aaa_module.config.php @@ -160,23 +160,24 @@ $config = [ ], 'service_manager' => [ 'invokables' => [ - Service\AnneeService::class => Service\AnneeService::class, - Service\LocalContextService::class => Service\LocalContextService::class, - Service\ParametresService::class => Service\ParametresService::class, - Service\TypeInterventionService::class => Service\TypeInterventionService::class, - Service\SourceService::class => Service\SourceService::class, - Service\AffectationService::class => Service\AffectationService::class, - Service\RoleService::class => Service\RoleService::class, - Service\PaysService::class => Service\PaysService::class, - Service\DepartementService::class => Service\DepartementService::class, - Service\VoirieService::class => Service\VoirieService::class, - Service\GradeService::class => Service\GradeService::class, - Service\CorpsService::class => Service\CorpsService::class, - Service\FichierService::class => Service\FichierService::class, - Service\TauxHoraireHETDService::class => Service\TauxHoraireHETDService::class, - Assertion\InformationAssertion::class => Assertion\InformationAssertion::class, - Service\TypeValidationService::class => Service\TypeValidationService::class, - Service\ValidationService::class => Service\ValidationService::class, + Service\AdresseNumeroComplService::class => Service\AdresseNumeroComplService::class, + Service\AnneeService::class => Service\AnneeService::class, + Service\LocalContextService::class => Service\LocalContextService::class, + Service\ParametresService::class => Service\ParametresService::class, + \OffreFormation\Service\TypeInterventionService::class => \OffreFormation\Service\TypeInterventionService::class, + Service\SourceService::class => Service\SourceService::class, + Service\AffectationService::class => Service\AffectationService::class, + Service\RoleService::class => Service\RoleService::class, + Service\PaysService::class => Service\PaysService::class, + Service\DepartementService::class => Service\DepartementService::class, + Service\VoirieService::class => Service\VoirieService::class, + Service\GradeService::class => Service\GradeService::class, + Service\CorpsService::class => Service\CorpsService::class, + Service\FichierService::class => Service\FichierService::class, + Service\TauxHoraireHETDService::class => Service\TauxHoraireHETDService::class, + Assertion\InformationAssertion::class => Assertion\InformationAssertion::class, + Service\TypeValidationService::class => Service\TypeValidationService::class, + Service\ValidationService::class => Service\ValidationService::class, ], 'factories' => [ \Laminas\Navigation\Navigation::class => Navigation\NavigationFactory::class, @@ -217,6 +218,8 @@ $config = [ 'formSupprimer' => View\Helper\FormSupprimerViewHelper::class, 'formButtonGroup' => View\Helper\FormButtonGroupViewHelper::class, 'cartridge' => View\Helper\CartridgeViewHelper::class, + 'vite' => View\Helper\ViteViewHelper::class, + 'vue' => View\Helper\VueViewHelper::class, ], ], 'controllers' => [ @@ -227,6 +230,7 @@ $config = [ 'controller_plugins' => [ 'factories' => [ 'context' => Controller\Plugin\ContextFactory::class, + 'axios' => Controller\Plugin\AxiosFactory::class, ], ], 'view_manager' => [ diff --git a/module/Application/config/autres.config.php b/module/Application/config/autres.config.php deleted file mode 100644 index 3b82faa749bb8f25eca921183edf3fc374ae0179..0000000000000000000000000000000000000000 --- a/module/Application/config/autres.config.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php - -namespace Application; - -use Application\Form\Intervenant\AutresForm; -use Application\Provider\Privilege\Privileges; -use Application\Service\DossierAutreService; -use Application\Service\DossierAutreTypeService; -use UnicaenAuth\Guard\PrivilegeController; - -return [ - 'router' => [ - 'routes' => [ - 'autres-infos' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/autres', - 'defaults' => [ - 'controller' => 'Application\Controller\Autres', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'saisie' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/saisie[/:dossierAutre]', - 'constraints' => [ - 'dossierAutre' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'saisie', - ], - ], - 'may_terminate' => true, - ], - ], - ], - ], - ], - - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - [ - 'controller' => 'Application\Controller\Autres', - 'action' => ['index'], - 'privileges' => Privileges::INTERVENANT_AUTRES_VISUALISATION, - ], - [ - 'controller' => 'Application\Controller\Autres', - 'action' => ['saisie'], - 'privileges' => Privileges::INTERVENANT_AUTRES_EDITION, - ], - ], - ], - ], - 'controllers' => [ - 'invokables' => [ - 'Application\Controller\Autres' => Controller\AutresController::class, - ], - ], - 'service_manager' => [ - 'invokables' => [ - DossierAutreService::class => DossierAutreService::class, - DossierAutreTypeService::class => DossierAutreTypeService::class, - ], - ], - 'form_elements' => [ - 'invokables' => [ - AutresForm::class => AutresForm::class, - ], - ], -]; diff --git a/module/Application/config/discipline.config.php b/module/Application/config/discipline.config.php deleted file mode 100755 index a6a93fef33cea20daec7543cb1f74aa9241033f8..0000000000000000000000000000000000000000 --- a/module/Application/config/discipline.config.php +++ /dev/null @@ -1,131 +0,0 @@ -<?php - -namespace Application; - -use Application\Provider\Privilege\Privileges; -use UnicaenAuth\Guard\PrivilegeController; - -return [ - 'router' => [ - 'routes' => [ - 'discipline' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/discipline', - 'defaults' => [ - 'controller' => 'Application\Controller\Discipline', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'voir' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/voir/:discipline', - 'constraints' => [ - 'discipline' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'voir', - ], - ], - 'may_terminate' => true, - ], - 'saisir' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/saisir[/:discipline]', - 'constraints' => [ - 'discipline' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'saisir', - ], - ], - 'may_terminate' => true, - ], - 'supprimer' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/supprimer/:discipline', - 'constraints' => [ - 'discipline' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'supprimer', - ], - ], - 'may_terminate' => true, - ], - ], - ], - ], - ], - 'navigation' => [ - 'default' => [ - 'home' => [ - 'pages' => [ - 'administration' => [ - 'pages' => [ - 'odf' => [ - 'pages' => [ - 'discipline' => [ - 'color' => '#9F491F', - 'label' => "Types de disciplines", - 'title' => "Gestion des disciplines", - 'route' => 'discipline', - 'resource' => PrivilegeController::getResourceId('Application\Controller\Discipline', 'index'), - 'order' => 50, - ], - ], - ], - ], - ], - ], - ], - ], - ], - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - [ - 'controller' => 'Application\Controller\Discipline', - 'action' => ['index'], - 'privileges' => [ - Privileges::DISCIPLINE_GESTION, - ], - ], - [ - 'controller' => 'Application\Controller\Discipline', - 'action' => ['voir'], - 'privileges' => [ - Privileges::DISCIPLINE_VISUALISATION, - ], - ], - [ - 'controller' => 'Application\Controller\Discipline', - 'action' => ['saisir', 'supprimer'], - 'privileges' => [ - Privileges::DISCIPLINE_EDITION, - ], - ], - ], - ], - ], - 'controllers' => [ - 'invokables' => [ - 'Application\Controller\Discipline' => Controller\DisciplineController::class, - ], - ], - 'service_manager' => [ - 'invokables' => [ - Service\DisciplineService::class => Service\DisciplineService::class, - ], - ], - 'form_elements' => [ - 'invokables' => [ - Form\DisciplineForm::class => Form\DisciplineForm::class, - ], - ], -]; \ No newline at end of file diff --git a/module/Application/config/domaine-fonctionnel.config.php b/module/Application/config/domaine-fonctionnel.config.php index d48a2f1ede5265cf9624d93d618b4c79bcb387c6..1e516d511cfc6cdc493ef6f3df1ade9e59aa3883 100644 --- a/module/Application/config/domaine-fonctionnel.config.php +++ b/module/Application/config/domaine-fonctionnel.config.php @@ -93,7 +93,7 @@ return [ ], 'service_manager' => [ 'invokables' => [ - Service\DomaineFonctionnelService::class => Service\DomaineFonctionnelService::class, + ], ], 'view_helpers' => [ diff --git a/module/Application/config/employeur.config.php b/module/Application/config/employeur.config.php deleted file mode 100644 index 117a09d5df26a3862a0f5d3eb9b59018890e34dc..0000000000000000000000000000000000000000 --- a/module/Application/config/employeur.config.php +++ /dev/null @@ -1,163 +0,0 @@ -<?php - -namespace Application; - - -use Application\Provider\Privilege\Privileges; -use UnicaenAuth\Guard\PrivilegeController; -use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider; - -return [ - 'router' => [ - 'routes' => [ - 'employeur' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/employeur', - 'defaults' => [ - 'controller' => 'Application\Controller\Employeur', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'saisie' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/saisie[/:employeur]', - 'constraints' => [ - 'employeur' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'saisie', - ], - ], - 'may_terminate' => true, - ], - 'supprimer' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/supprimer/:employeur', - 'constraints' => [ - 'employeur' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'supprimer', - ], - ], - 'may_terminate' => true, - ], - ], - ], - 'employeur-search' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/employeur-search', - 'defaults' => [ - 'controller' => 'Application\Controller\Employeur', - 'action' => 'recherche', - ], - ], - 'may_terminate' => true, - ], - 'employeur-json' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/employeur/json', - 'defaults' => [ - 'controller' => 'Application\Controller\Employeur', - 'action' => 'recherche-json', - ], - ], - 'may_terminate' => true, - ], - - ], - ], - - - 'console' => [ - 'router' => [ - 'routes' => [ - 'console-update-employeur' => [ - 'options' => [ - 'route' => 'update-employeur', - 'defaults' => [ - 'controller' => 'Application\Controller\Employeur', - 'action' => 'update-employeur', - ], - ], - ], - ], - ], - ], - - 'navigation' => [ - 'default' => [ - 'home' => [ - 'pages' => [ - 'administration' => [ - 'pages' => [ - 'rh' => [ - 'pages' => [ - 'Employeurs' => [ - 'color' => '#9F491F', - 'label' => "Employeurs", - 'title' => "Gestion des employeurs", - 'route' => 'employeur', - 'resource' => PrivilegeController::getResourceId('Application\Controller\Employeur', 'index'), - 'order' => 20, - ], - ], - ], - ], - ], - ], - ], - ], - ], - - 'controllers' => [ - 'factories' => [ - 'Application\Controller\Employeur' => Controller\Factory\EmployeurControllerFactory::class, - ], - 'invokables' => [ - 'Application\Controller\Employeur' => Controller\EmployeurController::class, - ], - ], - - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - [ - 'controller' => 'Application\Controller\Employeur', - 'action' => ['index', 'recherche-json', 'saisie'], - 'privileges' => Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION, - ], - ], - 'BjyAuthorize\Guard\Controller' => [ - [ - 'controller' => 'Application\Controller\Employeur', - 'roles' => ['user']], - ], - ], - 'rule_providers' => [ - PrivilegeRuleProvider::class => [ - 'allow' => [ - [ - 'privileges' => [ - Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION, - ], - 'resources' => 'Contrat', - ], - ], - ], - ], - ], - - 'service_manager' => [ - 'invokables' => [ - Service\EmployeurService::class => Service\EmployeurService::class, - ], - ], -]; \ No newline at end of file diff --git a/module/Application/config/intervenant-dossier.config.php b/module/Application/config/intervenant-dossier.config.php deleted file mode 100755 index 704d0f485bc6579db25a03490d1eda4ebc3289d5..0000000000000000000000000000000000000000 --- a/module/Application/config/intervenant-dossier.config.php +++ /dev/null @@ -1,257 +0,0 @@ -<?php - -namespace Application; - -use Application\Assertion\IntervenantDossierAssertion; -use Application\Form\Intervenant\Factory\IntervenantDossierFactory; -use Application\Form\Intervenant\Factory\IntervenantDossierFormFactory; -use Application\Form\Intervenant\IntervenantDossier; -use Application\Form\Intervenant\IntervenantDossierForm; -use Application\Provider\Privilege\Privileges; -use Application\Service\AdresseNumeroComplService; -use UnicaenAuth\Guard\PrivilegeController; -use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider; - -return [ - 'router' => [ - 'routes' => [ - - 'intervenant' => [ - 'child_routes' => [ - 'dossier' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/:intervenant/dossier', - 'defaults' => [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'change-statut-dossier' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/change-statut-dossier', - 'defaults' => [ - 'action' => 'change-statut-dossier', - ], - ], - ], - 'valider' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/valider', - 'defaults' => [ - 'action' => 'valider', - ], - ], - ], - 'devalider' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/devalider', - 'defaults' => [ - 'action' => 'devalider', - ], - ], - ], - 'supprimer' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/supprimer', - 'defaults' => [ - 'action' => 'supprimer', - ], - ], - ], - 'differences' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/differences', - 'defaults' => [ - 'action' => 'differences', - ], - ], - ], - 'purger-differences' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/purger-differences', - 'defaults' => [ - 'action' => 'purger-differences', - ], - ], - ], - ], - ], - ], - ], - ], - ], - 'console' => [ - 'router' => [ - 'routes' => [ - 'calcul-completude-dossier' => [ - 'options' => [ - 'route' => 'calcul-completude-dossier [--annee=] [--intervenant=]', - 'defaults' => [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => 'calcul-completude-dossier', - ], - ], - ], - ], - ], - ] - , - 'navigation' => [ - 'default' => [ - 'home' => [ - 'pages' => [ - 'intervenant' => [ - 'pages' => [ - 'dossier' => [ - 'label' => "Données personnelles", - 'title' => "Saisir les données personnelles d'un intervenant vacataire", - 'route' => 'intervenant/dossier', - 'paramsInject' => [ - 'intervenant', - ], - 'withtarget' => true, - 'resource' => PrivilegeController::getResourceId('Application\Controller\Dossier', 'index'), - 'order' => 5, - ], - ], - ], - - 'administration' => [ - 'pages' => [ - 'intervenants' => [ - 'pages' => [ - 'gestion-champs-autres-dossier-intervenant' => [ - 'label' => "Champs personnalisés du dossier", - 'title' => "Editer et modifier les 5 champs personnalisables pour les dossiers des intervenant", - 'route' => 'autres-infos', - 'withtarget' => true, - 'order' => 10, - 'resource' => PrivilegeController::getResourceId('Application\Controller\Autres', 'index'), - ], - ], - ], - ], - ], - ], - ], - ], - ], - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - /* Dossier */ - [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => ['index', 'change-statut-dossier'], - 'privileges' => [Privileges::DOSSIER_VISUALISATION], - 'assertion' => IntervenantDossierAssertion::class, - ], - [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => ['differences'], - 'privileges' => [Privileges::DOSSIER_DIFFERENCES], - 'assertion' => IntervenantDossierAssertion::class, - ], - [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => ['purger-differences'], - 'privileges' => [Privileges::DOSSIER_PURGER_DIFFERENCES], - 'assertion' => IntervenantDossierAssertion::class, - ], - [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => ['valider'], - 'privileges' => [Privileges::DOSSIER_VALIDATION], - 'assertion' => IntervenantDossierAssertion::class, - - ], - [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => ['devalider'], - 'privileges' => [Privileges::DOSSIER_DEVALIDATION], - 'assertion' => IntervenantDossierAssertion::class, - - ], - [ - 'controller' => 'Application\Controller\IntervenantDossier', - 'action' => ['supprimer'], - 'privileges' => [Privileges::DOSSIER_SUPPRESSION], - 'assertion' => IntervenantDossierAssertion::class, - ], - ], - ], - 'rule_providers' => [ - PrivilegeRuleProvider::class => [ - 'allow' => [ - [ - 'privileges' => [ - IntervenantDossierAssertion::PRIV_VIEW_IDENTITE, - IntervenantDossierAssertion::PRIV_EDIT_IDENTITE, - IntervenantDossierAssertion::PRIV_EDIT_ADRESSE, - IntervenantDossierAssertion::PRIV_VIEW_ADRESSE, - IntervenantDossierAssertion::PRIV_EDIT_CONTACT, - IntervenantDossierAssertion::PRIV_VIEW_CONTACT, - IntervenantDossierAssertion::PRIV_EDIT_INSEE, - IntervenantDossierAssertion::PRIV_VIEW_INSEE, - IntervenantDossierAssertion::PRIV_VIEW_IBAN, - IntervenantDossierAssertion::PRIV_EDIT_IBAN, - IntervenantDossierAssertion::PRIV_VIEW_EMPLOYEUR, - IntervenantDossierAssertion::PRIV_EDIT_EMPLOYEUR, - IntervenantDossierAssertion::PRIV_VIEW_AUTRE1, - IntervenantDossierAssertion::PRIV_EDIT_AUTRE1, - IntervenantDossierAssertion::PRIV_VIEW_AUTRE2, - IntervenantDossierAssertion::PRIV_EDIT_AUTRE2, - IntervenantDossierAssertion::PRIV_VIEW_AUTRE3, - IntervenantDossierAssertion::PRIV_EDIT_AUTRE3, - IntervenantDossierAssertion::PRIV_VIEW_AUTRE4, - IntervenantDossierAssertion::PRIV_EDIT_AUTRE4, - IntervenantDossierAssertion::PRIV_VIEW_AUTRE5, - IntervenantDossierAssertion::PRIV_EDIT_AUTRE5, - IntervenantDossierAssertion::PRIV_CAN_VALIDE, - IntervenantDossierAssertion::PRIV_CAN_DEVALIDE, - IntervenantDossierAssertion::PRIV_CAN_EDIT, - IntervenantDossierAssertion::PRIV_CAN_SUPPRIME, - - - ], - 'resources' => ['Intervenant'], - 'assertion' => IntervenantDossierAssertion::class, - ], - ], - ], - ], - ], - 'controllers' => [ - 'factories' => [ - 'Application\Controller\IntervenantDossier' => Controller\Factory\IntervenantDossierControllerFactory::class, - ], - ], - 'service_manager' => [ - 'invokables' => [ - Service\DossierService::class => Service\DossierService::class, - AdresseNumeroComplService::class => AdresseNumeroComplService::class, - ], - 'factories' => [ - Assertion\IntervenantDossierAssertion::class => \UnicaenAuth\Assertion\AssertionFactory::class, - ], - ], - 'view_helpers' => [ - 'invokables' => [ - 'validation' => View\Helper\ValidationViewHelper::class, - ], - ], - 'form_elements' => [ - 'factories' => [ - IntervenantDossierForm::class => IntervenantDossierFormFactory::class, - ], - ], -]; diff --git a/module/Application/config/intervenant.config.php b/module/Application/config/intervenant.config.php index db039e147fc45be2e433a876ecb7f981bbf0d621..c3e21bac700b989a5f3b2a435a99854fa4b236b7 100755 --- a/module/Application/config/intervenant.config.php +++ b/module/Application/config/intervenant.config.php @@ -21,7 +21,7 @@ return [ ], 'may_terminate' => true, 'child_routes' => [ - 'rechercher' => [ + 'rechercher' => [ 'type' => 'Literal', 'options' => [ 'route' => '/rechercher', @@ -30,7 +30,25 @@ return [ ], ], ], - 'recherche' => [ + 'recherche-intervenant' => [ + 'type' => 'Literal', + 'options' => [ + 'route' => '/recherche-intervenant', + 'defaults' => [ + 'action' => 'recherche-intervenant', + ], + ], + ], + 'recherche-json' => [ + 'type' => 'Literal', + 'options' => [ + 'route' => '/recherche-json', + 'defaults' => [ + 'action' => 'recherche-json', + ], + ], + ], + 'recherche' => [ 'type' => 'Literal', 'options' => [ 'route' => '/recherche', @@ -39,7 +57,7 @@ return [ ], ], ], - 'voir' => [ + 'voir' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/voir', @@ -48,7 +66,7 @@ return [ ], ], ], - 'fiche' => [ + 'fiche' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/fiche', @@ -57,7 +75,7 @@ return [ ], ], ], - 'creer' => [ + 'creer' => [ 'type' => 'Segment', 'options' => [ 'route' => '/creer', @@ -67,7 +85,7 @@ return [ ], ], ], - 'saisir' => [ + 'saisir' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/saisir', @@ -77,7 +95,7 @@ return [ ], ], ], - 'dupliquer' => [ + 'dupliquer' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/dupliquer', @@ -87,7 +105,7 @@ return [ ], ], ], - 'synchronisation' => [ + 'synchronisation' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/synchronisation', @@ -96,7 +114,7 @@ return [ ], ], ], - 'synchroniser' => [ + 'synchroniser' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/synchroniser', @@ -105,7 +123,7 @@ return [ ], ], ], - 'supprimer' => [ + 'supprimer' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/supprimer', @@ -114,7 +132,7 @@ return [ ], ], ], - 'historiser' => [ + 'historiser' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/historiser', @@ -123,7 +141,7 @@ return [ ], ], ], - 'restaurer' => [ + 'restaurer' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/restaurer', @@ -132,7 +150,7 @@ return [ ], ], ], - 'definir-par-defaut' => [ + 'definir-par-defaut' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/definir-par-defaut', @@ -141,7 +159,7 @@ return [ ], ], ], - 'voir-heures-comp' => [ + 'voir-heures-comp' => [ 'type' => 'Segment', 'options' => [ 'route' => '/voir-heures-comp/:intervenant', @@ -150,7 +168,7 @@ return [ ], ], ], - 'formule-totaux-hetd' => [ + 'formule-totaux-hetd' => [ 'type' => 'Segment', 'options' => [ 'route' => '/formule-totaux-hetd/:intervenant/:typeVolumeHoraire/:etatVolumeHoraire', @@ -163,7 +181,7 @@ return [ ], ], ], - 'feuille-de-route' => [ + 'feuille-de-route' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/feuille-de-route', @@ -172,7 +190,7 @@ return [ ], ], ], - 'mise-en-paiement' => [ + 'mise-en-paiement' => [ 'type' => 'Segment', 'may_terminate' => false, 'options' => [ @@ -211,7 +229,7 @@ return [ ], ], ], - 'contrat' => [ + 'contrat' => [ 'type' => 'Segment', 'options' => [ 'route' => '/:intervenant/contrat', @@ -293,7 +311,7 @@ return [ PrivilegeController::class => [ [ 'controller' => 'Application\Controller\Intervenant', - 'action' => ['rechercher', 'recherche'], + 'action' => ['rechercher', 'recherche', 'recherche-json', 'recherche-intervenant'], 'privileges' => [ Privileges::INTERVENANT_RECHERCHE, ], @@ -332,6 +350,7 @@ return [ 'privileges' => [ Privileges::INTERVENANT_CALCUL_HETD, ], + 'assertion' => Assertion\IntervenantAssertion::class, ], [ 'controller' => 'Application\Controller\Intervenant', diff --git a/module/Application/config/modulateur.config.php b/module/Application/config/modulateur.config.php index ca05960100527a15de1b8d75947c64b86888a489..471855c6b5162c4e6d8dfaf4be55c1eccad0c467 100755 --- a/module/Application/config/modulateur.config.php +++ b/module/Application/config/modulateur.config.php @@ -3,6 +3,7 @@ namespace Application; use Application\Provider\Privilege\Privileges; +use Application\Service\TypeModulateurService; use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider; use UnicaenAuth\Guard\PrivilegeController; @@ -157,6 +158,9 @@ return [ 'service_manager' => [ 'invokables' => [ Service\TypeModulateurStructureService::class => Service\TypeModulateurStructureService::class, + Service\ModulateurService::class => Service\ModulateurService::class, + TypeModulateurService::class => TypeModulateurService::class, + ], 'factories' => [ Assertion\ModulateurAssertion::class => \UnicaenAuth\Assertion\AssertionFactory::class, diff --git a/module/Application/config/offre-formation.config.php b/module/Application/config/offre-formation.config.php deleted file mode 100755 index d2234c18cc74128005833a4fc03bec4690827b11..0000000000000000000000000000000000000000 --- a/module/Application/config/offre-formation.config.php +++ /dev/null @@ -1,549 +0,0 @@ -<?php - -namespace Application; - -use Application\Provider\Privilege\Privileges; -use UnicaenAuth\Guard\PrivilegeController; -use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider; - -return [ - 'router' => [ - 'routes' => [ - 'aof' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/administration-offre', - 'defaults' => [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => 'administrationOffre', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'reconduction' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/reconduction', - 'defaults' => [ - 'action' => 'reconduction', - ], - ], - ], - 'reconduction-centre-cout' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/reconduction-centre-cout', - 'defaults' => [ - 'action' => 'reconductionCentreCout', - ], - ], - ], - 'reconduction-modulateur' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/reconduction-modulateur', - 'defaults' => [ - 'action' => 'reconductionModulateur', - ], - ], - ], - ], - ], - 'of' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/offre-de-formation', - 'order' => 2, - 'defaults' => [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'default' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/:action[/:id]', - 'constraints' => [ - 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', - 'id' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'index', - ], - ], - ], - - 'element' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/element', - 'defaults' => [ - '__NAMESPACE__' => 'Application\Controller\OffreFormation', - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - ], - ], - 'may_terminate' => false, - 'child_routes' => [ - 'voir' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/voir/:elementPedagogique', - 'constraints' => ['elementPedagogique' => '[0-9]*'], - 'defaults' => ['action' => 'voir'], - ], - ], - 'ajouter' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/ajouter', - 'defaults' => ['action' => 'saisir'], - ], - ], - 'modifier' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/modifier/:elementPedagogique', - 'constraints' => ['elementPedagogique' => '[0-9]*'], - 'defaults' => ['action' => 'saisir'], - ], - ], - 'supprimer' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/supprimer/:elementPedagogique', - 'constraints' => ['elementPedagogique' => '[0-9]*'], - 'defaults' => ['action' => 'supprimer'], - ], - ], - 'search' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/search', - 'defaults' => ['action' => 'search'], - ], - ], - 'get-periode' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/get-periode/:elementPedagogique', - 'constraints' => ['elementPedagogique' => '[0-9]*'], - 'defaults' => ['action' => 'getPeriode'], - ], - ], - 'volume-horaire' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/volume-horaire/:elementPedagogique', - 'constraints' => [ - 'elementPedagogique' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'volume-horaire', - ], - ], - ], - 'synchronisation' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/synchronisation/:elementPedagogique', - 'constraints' => [ - 'elementPedagogique' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'synchronisation', - ], - ], - ], - 'synchronisation-par-code' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/synchronisation-par-code', - 'defaults' => [ - 'action' => 'synchronisation-par-code', - ], - ], - ], - - 'modulateurs-centres-couts' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/modulateurs-centres-couts/:elementPedagogique', - 'constraints' => [ - 'elementPedagogique' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'modulateurs-centres-couts', - ], - ], - ], - 'modifier-modulateurs' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/modulateurs/modifier/:elementPedagogique', - 'constraints' => [ - 'elementPedagogique' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'modifier-modulateur', - ], - ], - ], - ], - ], - 'etape' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/etape', - 'defaults' => [ - '__NAMESPACE__' => 'Application\Controller\OffreFormation', - 'controller' => 'Application\Controller\OffreFormation\Etape', - ], - ], - 'may_terminate' => false, - 'child_routes' => [ - 'voir' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/voir/:etape', - 'constraints' => ['etape' => '[0-9]*'], - 'defaults' => ['action' => 'voir'], - ], - ], - 'ajouter' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/ajouter/:structure', - 'constraints' => ['structure' => '[0-9]*'], - 'defaults' => ['action' => 'saisir'], - ], - ], - 'restaurer' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/restaurer/:etape', - 'constraints' => ['etape' => '[0-9]*'], - 'defaults' => ['action' => 'restaurer'], - ], - ], - - 'modifier' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/modifier/:etape', - 'constraints' => ['etape' => '[0-9]*'], - 'defaults' => ['action' => 'saisir'], - ], - ], - 'supprimer' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/supprimer/:etape', - 'constraints' => ['etape' => '[0-9]*'], - 'defaults' => ['action' => 'supprimer'], - ], - ], - 'modulateurs' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/modulateurs/:etape', - 'constraints' => ['etape' => '[0-9]*'], - 'defaults' => [ - 'controller' => 'Application\Controller\OffreFormation\Modulateur', - 'action' => 'saisir', - ], - ], - ], - 'centres-couts' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/centres-couts/:etape', - 'constraints' => [ - 'etape' => '[0-9]*', - ], - 'defaults' => [ - 'controller' => 'Application\Controller\OffreFormation\EtapeCentreCout', - 'action' => 'saisir', - ], - ], - ], - 'taux-mixite' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/taux-mixite/:etape', - 'constraints' => [ - 'etape' => '[0-9]*', - ], - 'defaults' => [ - 'controller' => 'Application\Controller\OffreFormation\Etape', - 'action' => 'taux-mixite', - ], - ], - ], - ], - ], - ], - ], - ], - ], - 'navigation' => [ - 'default' => [ - 'home' => [ - 'pages' => [ - 'of' => [ - 'label' => 'Offre de formation', - 'title' => "Gestion de l'offre de formation", - 'route' => 'of', - 'order' => 2, - 'resource' => PrivilegeController::getResourceId('Application\Controller\OffreFormation', 'index'), - ], - 'administration' => [ - 'pages' => [ - 'odf' => [ - 'pages' => [ - 'reconduction-offre' => [ - 'label' => 'Reconduction de l\'offre de formation complémentaire', - 'title' => 'Reconduction de l\'offre de formation complémentaire', - 'route' => 'aof/reconduction', - 'order' => 20, - 'resource' => PrivilegeController::getResourceId('Application\Controller\OffreFormation', 'reconduction'), - ], - 'reconduction-centre-cout' => [ - 'label' => 'Reconduction des centres de coûts', - 'title' => 'Reconduction des centres de coûts de l\'offre de formation', - 'route' => 'aof/reconduction-centre-cout', - 'order' => 30, - 'resource' => PrivilegeController::getResourceId('Application\Controller\OffreFormation', 'reconductionCentreCout'), - ], - 'reconduction-modulateur' => [ - 'label' => 'Reconduction des modulateurs', - 'title' => 'Reconduction des modulateurs de l\'offre de formation', - 'route' => 'aof/reconduction-modulateur', - 'order' => 40, - 'resource' => PrivilegeController::getResourceId('Application\Controller\OffreFormation', 'reconductionModulateur'), - ], - - ], - ], - ], - ], - ], - ], - ], - ], - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - /* Global */ - [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => ['index', 'search-structures', 'search-niveaux', 'administrationOffre'], - 'privileges' => Privileges::ODF_VISUALISATION, - ], - [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => ['export'], - 'privileges' => Privileges::ODF_EXPORT_CSV, - ], - [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => ['reconduction'], - 'privileges' => Privileges::ODF_RECONDUCTION_OFFRE, - ], - [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => ['reconductionCentreCout'], - 'privileges' => Privileges::ODF_RECONDUCTION_CENTRE_COUT, - ], - [ - 'controller' => 'Application\Controller\OffreFormation', - 'action' => ['reconductionModulateur'], - 'privileges' => Privileges::ODF_RECONDUCTION_MODULATEUR, - ], - - /* Etapes */ - [ - 'controller' => 'Application\Controller\OffreFormation\Etape', - 'action' => ['voir', 'search'], - 'privileges' => Privileges::ODF_ETAPE_VISUALISATION, - ], - [ - 'controller' => 'Application\Controller\OffreFormation\Etape', - 'action' => ['restaurer', 'saisir', 'supprimer'], - 'privileges' => Privileges::ODF_ETAPE_EDITION, - ], - /* Éléments pédagogiques */ - [ - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - 'action' => ['voir'], // getPeriode est utilisé pour la saisie de service!!! - 'privileges' => Privileges::ODF_ELEMENT_VISUALISATION, - ], - [ - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - 'action' => ['search', 'getPeriode'], // getPeriode est utilisé pour la saisie de service!!! - 'privileges' => [ - Privileges::ODF_ELEMENT_VISUALISATION, - Privileges::ENSEIGNEMENT_PREVU_EDITION, - Privileges::ENSEIGNEMENT_REALISE_EDITION, - ], - ], - [ - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - 'action' => ['volume-horaire'], - 'privileges' => [ - Privileges::ODF_ELEMENT_VH_VISUALISATION, - Privileges::ODF_ELEMENT_VH_EDITION, - ], - - ], - [ - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - 'action' => ['modulateurs-centres-couts'], - 'privileges' => [ - Privileges::ODF_CENTRES_COUT_EDITION, - Privileges::ODF_MODULATEURS_EDITION, - ], - - ], - [ - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - 'action' => ['saisir', 'supprimer'], - 'privileges' => Privileges::ODF_ELEMENT_EDITION, - ], - [ - 'controller' => 'Application\Controller\OffreFormation\ElementPedagogique', - 'action' => ['synchronisation', 'synchronisation-par-code'], - 'privileges' => Privileges::ODF_ELEMENT_SYNCHRONISATION, - ], - /* Modulateurs */ - [ - 'controller' => 'Application\Controller\OffreFormation\Modulateur', - 'action' => ['saisir'], - 'privileges' => Privileges::ODF_MODULATEURS_EDITION, - ], - /* Centres de coûts */ - [ - 'controller' => 'Application\Controller\OffreFormation\EtapeCentreCout', - 'action' => ['saisir'], - 'privileges' => Privileges::ODF_CENTRES_COUT_EDITION, - ], - /* Taux de mixité */ - [ - 'controller' => 'Application\Controller\OffreFormation\Etape', - 'action' => ['taux-mixite'], - 'privileges' => Privileges::ODF_TAUX_MIXITE_EDITION, - ], - ], - ], - 'rule_providers' => [ - PrivilegeRuleProvider::class => [ - 'allow' => [ - [ - 'privileges' => Privileges::ODF_ELEMENT_EDITION, - 'resources' => ['ElementPedagogique', 'Structure'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - [ - 'privileges' => Privileges::ODF_ETAPE_EDITION, - 'resources' => ['Etape', 'Structure'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - [ - 'privileges' => Privileges::ODF_CENTRES_COUT_EDITION, - 'resources' => ['Etape', 'Structure', 'ElementPedagogique', 'CentreCoutEp'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - [ - 'privileges' => Privileges::ODF_MODULATEURS_EDITION, - 'resources' => ['Etape', 'Structure', 'ElementPedagogique', 'ElementModulateur'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - [ - 'privileges' => Privileges::ODF_TAUX_MIXITE_EDITION, - 'resources' => ['Etape', 'Structure', 'ElementPedagogique'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - [ - 'privileges' => Privileges::ODF_ELEMENT_VH_EDITION, - 'resources' => ['Etape', 'Structure', 'ElementPedagogique', 'VolumeHoraireEns', 'TypeIntervention'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - [ - 'privileges' => Privileges::ODF_ELEMENT_SYNCHRONISATION, - 'resources' => ['ElementPedagogique'], - 'assertion' => Assertion\OffreDeFormationAssertion::class, - ], - ], - ], - ], - ], - 'controllers' => [ - 'invokables' => [ - 'Application\Controller\OffreFormation\Etape' => Controller\OffreFormation\EtapeController::class, - 'Application\Controller\OffreFormation\Modulateur' => Controller\OffreFormation\ModulateurController::class, - 'Application\Controller\OffreFormation\EtapeCentreCout' => Controller\OffreFormation\EtapeCentreCoutController::class, - ], - 'factories' => [ - 'Application\Controller\OffreFormation' => Controller\Factory\OffreFormationControllerFactory::class, - 'Application\Controller\OffreFormation\ElementPedagogique' => Controller\OffreFormation\Factory\ElementPedagogiqueControllerFactory::class, - ], - ], - 'service_manager' => [ - 'invokables' => [ - Service\ElementPedagogiqueService::class => Service\ElementPedagogiqueService::class, - Service\CheminPedagogiqueService::class => Service\CheminPedagogiqueService::class, - Service\EtapeService::class => Service\EtapeService::class, - Service\TypeFormationService::class => Service\TypeFormationService::class, - Service\GroupeTypeFormationService::class => Service\GroupeTypeFormationService::class, - Service\NiveauEtapeService::class => Service\NiveauEtapeService::class, - Service\NiveauFormationService::class => Service\NiveauFormationService::class, - Service\ModulateurService::class => Service\ModulateurService::class, - Service\ElementModulateurService::class => Service\ElementModulateurService::class, - Service\TypeModulateurService::class => Service\TypeModulateurService::class, - Service\DomaineFonctionnelService::class => Service\DomaineFonctionnelService::class, - Service\OffreFormationService::class => Service\OffreFormationService::class, - Assertion\OffreDeFormationAssertion::class => Assertion\OffreDeFormationAssertion::class, - Processus\ReconductionProcessus::class => Processus\ReconductionProcessus::class, - Service\VolumeHoraireEnsService::class => Service\VolumeHoraireEnsService::class, - Service\PeriodeService::class => Service\PeriodeService::class, - ], - 'factories' => [ - Processus\ReconductionProcessus::class => Processus\Factory\ReconductionProcessusFactory::class, - ], - ], - 'form_elements' => [ - 'invokables' => [ - Form\OffreFormation\ElementPedagogiqueRechercheFieldset::class => Form\OffreFormation\ElementPedagogiqueRechercheFieldset::class, - Form\OffreFormation\EtapeSaisie::class => Form\OffreFormation\EtapeSaisie::class, - Form\OffreFormation\ElementPedagogiqueSaisie::class => Form\OffreFormation\ElementPedagogiqueSaisie::class, - Form\OffreFormation\ElementPedagogiqueSynchronisationForm::class => Form\OffreFormation\ElementPedagogiqueSynchronisationForm::class, - Form\OffreFormation\EtapeModulateursSaisie::class => Form\OffreFormation\EtapeModulateursSaisie::class, - Form\OffreFormation\ElementModulateurCCSaisie::class => Form\OffreFormation\ElementModulateurCCSaisie::class, - Form\OffreFormation\ElementModulateursFieldset::class => Form\OffreFormation\ElementModulateursFieldset::class, - Form\OffreFormation\EtapeCentreCout\EtapeCentreCoutForm::class => Form\OffreFormation\EtapeCentreCout\EtapeCentreCoutForm::class, - Form\OffreFormation\EtapeCentreCout\ElementCentreCoutFieldset::class => Form\OffreFormation\EtapeCentreCout\ElementCentreCoutFieldset::class, - Form\OffreFormation\TauxMixite\TauxMixiteForm::class => Form\OffreFormation\TauxMixite\TauxMixiteForm::class, - Form\OffreFormation\TauxMixite\TauxMixiteFieldset::class => Form\OffreFormation\TauxMixite\TauxMixiteFieldset::class, - ], - 'factories' => [ - Form\OffreFormation\VolumeHoraireEns::class => Form\OffreFormation\Factory\VolumeHoraireEnsFormFactory::class, - ], - ], - 'view_helpers' => [ - 'invokables' => [ - 'etapeModulateursSaisieForm' => View\Helper\OffreFormation\EtapeModulateursSaisieForm::class, - 'elementModulateursSaisieFieldset' => View\Helper\OffreFormation\ElementModulateursSaisieFieldset::class, - 'etape' => View\Helper\OffreFormation\EtapeViewHelper::class, - 'etapeCentreCoutForm' => View\Helper\OffreFormation\EtapeCentreCoutFormViewHelper::class, - 'elementCentreCoutFieldset' => View\Helper\OffreFormation\ElementCentreCoutFieldsetViewHelper::class, - 'etapeTauxMixiteForm' => View\Helper\OffreFormation\EtapeTauxMixiteFormViewHelper::class, - 'elementTauxMixiteFieldset' => View\Helper\OffreFormation\ElementTauxMixiteFieldsetViewHelper::class, - 'fieldsetElementPedagogiqueRecherche' => View\Helper\OffreFormation\FieldsetElementPedagogiqueRecherche::class, - ], - 'factories' => [ - 'elementPedagogique' => View\Helper\OffreFormation\Factory\ElementPedagogiqueViewHelperFactory::class, - ], - - ], -]; \ No newline at end of file diff --git a/module/Application/config/paiement.config.php b/module/Application/config/paiement.config.php index 956cabdf76d10b29774bae950d67399b270eb24d..b1b742b669d3e0acd49cf16ac908cd45cc482f9a 100755 --- a/module/Application/config/paiement.config.php +++ b/module/Application/config/paiement.config.php @@ -268,9 +268,9 @@ return [ Service\ServiceAPayerService::class => Service\ServiceAPayerService::class, Service\MiseEnPaiementService::class => Service\MiseEnPaiementService::class, Service\MiseEnPaiementIntervenantStructureService::class => Service\MiseEnPaiementIntervenantStructureService::class, - Service\TypeHeuresService::class => Service\TypeHeuresService::class, + \OffreFormation\Service\TypeHeuresService::class => \OffreFormation\Service\TypeHeuresService::class, Service\CentreCoutService::class => Service\CentreCoutService::class, - Service\CentreCoutEpService::class => Service\CentreCoutEpService::class, + \OffreFormation\Service\CentreCoutEpService::class => \OffreFormation\Service\CentreCoutEpService::class, Service\MotifNonPaiementService::class => Service\MotifNonPaiementService::class, ], 'factories' => [ diff --git a/module/Application/config/periode.config.php b/module/Application/config/periode.config.php index b01b3684e5c78346c3cbbd1108f0ca035e38f69b..e96c63c917a56c1a93da0e4a9078fea78fe3ae94 100755 --- a/module/Application/config/periode.config.php +++ b/module/Application/config/periode.config.php @@ -7,7 +7,9 @@ namespace Application; use Application\Provider\Privilege\Privileges; +use Application\Service\PeriodeService; use UnicaenAuth\Guard\PrivilegeController; +use function Symfony\Component\DependencyInjection\Loader\Configurator\service; return [ 'router' => [ @@ -111,6 +113,12 @@ return [ 'Application\Controller\Periode' => Controller\Factory\PeriodeControllerFactory::class, ], ], + 'service_manager' => [ + 'invokables' => [ + PeriodeService::class => PeriodeService::class, + ], + ], + 'form_elements' => [ 'factories' => [ Form\Periode\PeriodeSaisieForm::class => Form\Periode\PeriodeSaisieFormFactory::class, diff --git a/module/Application/config/pilotage.config.php b/module/Application/config/pilotage.config.php index d10f7be3647939426098460699504324f9dff574..bc726c8dfc6b6c3e9191d28d767ffd8fc06a4cc5 100755 --- a/module/Application/config/pilotage.config.php +++ b/module/Application/config/pilotage.config.php @@ -3,6 +3,7 @@ namespace Application; use Application\Provider\Privilege\Privileges; +use Service\Controller\ModificationServiceDuController; use UnicaenAuth\Guard\PrivilegeController; return [ @@ -40,22 +41,28 @@ return [ 'gestion' => [ 'pages' => [ 'pilotage' => [ - 'label' => 'Pilotage', - 'title' => 'Pilotage', - 'icon' => 'fas fa-tachometer', - 'route' => 'pilotage', - 'resource' => PrivilegeController::getResourceId('Application\Controller\Pilotage', 'index'), - 'pages' => [ - 'ecarts-etats' => [ + 'label' => 'Pilotage', + 'title' => 'Pilotage', + 'icon' => 'fas fa-chart-line', + 'route' => 'pilotage', + 'resource' => PrivilegeController::getResourceId('Application\Controller\Pilotage', 'index'), + 'pages' => [ + 'ecarts-etats' => [ 'label' => 'Ecarts d\'heures complémentaires (CSV)', 'title' => 'Ecarts d\'heures complémentaires (CSV)', 'description' => 'Export CSV des HETD (ne porte que sur les heures complémentaires et non sur le service dû)', 'route' => 'pilotage/ecarts-etats', 'resource' => PrivilegeController::getResourceId('Application\Controller\Pilotage', 'ecartsEtats'), ], + 'modification-service-du-export-csv' => [ + 'label' => "Modifications de service dû (CSV)", + 'title' => "Modifications de service dû (CSV)", + 'route' => 'modification-service-du/export-csv', + 'resource' => PrivilegeController::getResourceId(ModificationServiceDuController::class, 'export-csv'), + ], ], - 'order' => 20, - 'color' => '#00A020', + 'order' => 20, + 'color' => '#00A020', ], ], ], diff --git a/module/Application/config/tag.config.php b/module/Application/config/tag.config.php new file mode 100644 index 0000000000000000000000000000000000000000..bc428932f7e61c5b90f1347b61f5b2454c352772 --- /dev/null +++ b/module/Application/config/tag.config.php @@ -0,0 +1,108 @@ +<?php + +namespace Application; + +use Application\Provider\Privilege\Privileges; +use UnicaenAuth\Guard\PrivilegeController; + +return [ + 'router' => [ + 'routes' => [ + 'tag' => [ + 'type' => 'Literal', + 'options' => [ + 'route' => '/tags', + 'defaults' => [ + 'controller' => 'Application\Controller\Tag', + 'action' => 'index', + ], + ], + 'may_terminate' => true, + 'child_routes' => [ + 'supprimer' => [ + 'type' => 'Segment', + 'options' => [ + 'route' => '/supprimer/:tag', + 'constraints' => [ + 'tag' => '[0-9]*', + ], + 'defaults' => [ + 'action' => 'supprimer', + ], + ], + ], + 'saisir' => [ + 'type' => 'Segment', + 'options' => [ + 'route' => '/saisir/[:tag]', + 'constraints' => [ + 'tag' => '[0-9]*', + ], + 'defaults' => [ + 'action' => 'saisir', + ], + ], + ], + ], + ], + ], + ], + 'navigation' => [ + 'default' => [ + 'home' => [ + 'pages' => [ + 'administration' => [ + 'pages' => [ + 'finances' => [ + 'pages' => [ + 'tag' => [ + 'label' => 'Tags', + 'route' => 'tag', + 'resource' => PrivilegeController::getResourceId('Application\Controller\Tag', 'index'), + 'order' => 50, + 'color' => '#BBCF55', + ], + ], + ], + ], + ], + ], + ], + ], + ], + 'bjyauthorize' => [ + 'guards' => [ + PrivilegeController::class => [ + [ + 'controller' => 'Application\Controller\Tag', + 'action' => ['index'], + //TODO ajouter le privilege pour gestion des tags + 'privileges' => Privileges::TAG_ADMINISTRATION_VISUALISATION, + ], + [ + 'controller' => 'Application\Controller\Tag', + 'action' => ['saisir', 'supprimer'], + //TODO ajouter le privilege pour gestion des tags + 'privileges' => Privileges::TAG_ADMINISTRATION_EDITION, + ], + ], + ], + ], + 'controllers' => [ + 'invokables' => [ + 'Application\Controller\Tag' => Controller\TagController::class, + ], + ], + 'service_manager' => [ + 'invokables' => [ + Service\TagService::class => Service\TagService::class, + ], + ], + 'view_helpers' => [ + ], + 'form_elements' => [ + 'invokables' => [ + Form\Tag\TagSaisieForm::class => Form\Tag\TagSaisieForm::class, + ], + ], +]; diff --git a/module/Application/config/type-formation.config.php b/module/Application/config/type-formation.config.php deleted file mode 100755 index 21916fadfddee36589f59b6254a9ad09eac954cb..0000000000000000000000000000000000000000 --- a/module/Application/config/type-formation.config.php +++ /dev/null @@ -1,147 +0,0 @@ -<?php -/* -* @author JORIOT Florian <florian.joriot at unicaen.fr> -*/ - -namespace Application; - - -use Application\Provider\Privilege\Privileges; -use UnicaenAuth\Guard\PrivilegeController; - -return [ - 'router' => [ - 'routes' => [ - 'type-formation' => [ - 'type' => 'Literal', - 'options' => [ - 'route' => '/type-formation', - 'defaults' => [ - 'controller' => 'Application\Controller\TypeFormation', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'saisie' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/saisie[/:typeFormation]', - 'constraints' => [ - 'typeFormation' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'saisie', - ], - ], - 'may_terminate' => true, - ], - 'supprimer' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/supprimer/:typeFormation', - 'constraints' => [ - 'typeFormation' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'supprimer', - ], - ], - 'may_terminate' => true, - ], - 'saisie-groupe' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/saisie-groupe[/:groupeTypeFormation]', - 'constraints' => [ - 'groupeTypeFormation' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'saisieGroupe', - ], - ], - 'may_terminate' => true, - ], - 'supprimer-groupe' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/supprimer-groupe/:groupeTypeFormation', - 'constraints' => [ - 'groupeTypeFormation' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'supprimerGroupe', - ], - ], - 'may_terminate' => true, - ], - 'trier' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/trier/', - 'constraints' => [ - ], - 'defaults' => [ - 'action' => 'trier', - ], - ], - 'may_terminate' => true, - ], - ], - ], - ], - ], - - 'navigation' => [ - 'default' => [ - 'home' => [ - 'pages' => [ - 'administration' => [ - 'pages' => [ - 'odf' => [ - 'pages' => [ - 'gestion-type-formation' => [ - 'label' => 'Types de formations', - 'route' => 'type-formation', - 'resource' => PrivilegeController::getResourceId('Application\Controller\TypeFormation', 'index'), - 'order' => 60, - 'border - color' => '#111', - ], - ], - ], - ], - ], - ], - ], - ], - ], - - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - [ - 'controller' => 'Application\Controller\TypeFormation', - 'action' => ['index'], - 'privileges' => [Privileges::ODF_TYPE_FORMATION_VISUALISATION], - ], - [ - 'controller' => 'Application\Controller\TypeFormation', - 'action' => ['saisie', 'supprimer', 'saisieGroupe', 'supprimerGroupe', "trier"], - 'privileges' => [Privileges::ODF_TYPE_FORMATION_EDITION], - ], - ], - ], - ], - 'controllers' => [ - 'factories' => [ - 'Application\Controller\TypeFormation' => Controller\Factory\TypeFormationControllerFactory::class, - 'Application\Controller\GroupeTypeFormation' => Controller\Factory\GroupeTypeFormationControllerFactory::class, - ], - ], - 'form_elements' => [ - 'factories' => [ - Form\GroupeTypeFormation\GroupeTypeFormationSaisieForm::class => Form\GroupeTypeFormation\GroupeTypeFormationSaisieFormFactory::class, - Form\TypeFormation\TypeFormationSaisieForm::class => Form\TypeFormation\TypeFormationSaisieFormFactory::class, - ], - ], -]; diff --git a/module/Application/config/type-intervention.config.php b/module/Application/config/type-intervention.config.php deleted file mode 100755 index ca43e8532177e8f7239f6eb19ddc273bea00349a..0000000000000000000000000000000000000000 --- a/module/Application/config/type-intervention.config.php +++ /dev/null @@ -1,195 +0,0 @@ -<?php - -namespace Application; - -use Application\Provider\Privilege\Privileges; -use UnicaenAuth\Guard\PrivilegeController; - -return [ - 'router' => [ - 'routes' => [ - 'type-intervention' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/type-intervention', - 'defaults' => [ - 'controller' => 'Application\Controller\TypeIntervention', - 'action' => 'index', - ], - ], - 'may_terminate' => true, - 'child_routes' => [ - 'saisie' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/saisie[/:typeIntervention]', - 'constraints' => [ - 'typeIntervention' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'saisie', - ], - ], - 'may_terminate' => true, - ], - 'statut' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/statut/:typeIntervention', - 'constraints' => [ - 'typeIntervention' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'statut', - ], - ], - 'may_terminate' => true, - ], - 'delete' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/delete/:typeIntervention', - 'constraints' => [ - 'typeIntervention' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'delete', - ], - ], - 'may_terminate' => true, - ], - 'type-intervention-trier' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/type-intervention-trier', - 'contraints' => [ - ], - 'defaults' => [ - 'action' => 'type-intervention-trier', - ], - ], - 'may_terminate' => 'true', - ], - 'type-intervention-structure-saisie' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/type-intervention-structure-saisie/:typeIntervention[/:typeInterventionStructure]', - 'constraints' => [ - 'typeIntervention' => '[0-9]*', - 'typeInterventionStructure' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'type-intervention-structure-saisie', - ], - ], - 'may_terminate' => true, - ], - 'type-intervention-structure-delete' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/type-intervention-structure-delete/:typeInterventionStructure', - 'constraints' => [ - 'typeInterventionStructure' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'type-intervention-structure-delete', - ], - ], - 'may_terminate' => true, - ], - 'statut-saisie' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/statut-saisie/:typeIntervention[/:typeInterventionStatut]', - 'constraints' => [ - 'typeIntervention' => '[0-9]*', - 'typeInterventionStatut' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'statut-saisie', - ], - ], - 'may_terminate' => true, - ], - 'statut-delete' => [ - 'type' => 'Segment', - 'options' => [ - 'route' => '/statut-delete/:typeIntervention/:typeInterventionStatut', - 'constraints' => [ - 'typeInterventionStatut' => '[0-9]*', - ], - 'defaults' => [ - 'action' => 'statut-delete', - ], - ], - 'may_terminate' => true, - ], - ], - ], - ], - ], - 'navigation' => [ - 'default' => [ - 'home' => [ - 'pages' => [ - 'administration' => [ - 'pages' => [ - 'odf' => [ - 'pages' => [ - 'type-intervention' => [ - 'label' => 'Types d\'interventions', - 'route' => 'type-intervention', - 'resource' => PrivilegeController::getResourceId('Application\Controller\TypeIntervention', 'index'), - 'order' => 70, - 'color' => '#71DFD7', - ], - ], - ], - ], - ], - ], - ], - ], - ], - 'bjyauthorize' => [ - 'guards' => [ - PrivilegeController::class => [ - [ - 'controller' => 'Application\Controller\TypeIntervention', - 'action' => ['index', 'statut'], - 'privileges' => [Privileges::TYPE_INTERVENTION_VISUALISATION], - ], - [ - 'controller' => 'Application\Controller\TypeIntervention', - 'action' => ['saisie', 'delete', 'type-intervention-structure-saisie', 'type-intervention-structure-delete', - 'type-intervention-trier', 'statut-saisie', 'statut-delete'], - 'privileges' => [Privileges::TYPE_INTERVENTION_EDITION], - ], - ], - ], - ], - 'service_manager' => [ - 'invokables' => [ - Service\TypeInterventionStructureService::class => Service\TypeInterventionStructureService::class, - Service\TypeInterventionStatutService::class => Service\TypeInterventionStatutService::class, - ], - ], - 'controllers' => [ - 'invokables' => [ - 'Application\Controller\TypeIntervention' => Controller\TypeInterventionController::class, - ], - ], - 'form_elements' => [ - 'invokables' => [ - Form\TypeIntervention\TypeInterventionSaisieForm::class => Form\TypeIntervention\TypeInterventionSaisieForm::class, - Form\TypeIntervention\TypeInterventionStructureSaisieForm::class => Form\TypeIntervention\TypeInterventionStructureSaisieForm::class, - Form\TypeIntervention\TypeInterventionStatutSaisieForm::class => Form\TypeIntervention\TypeInterventionStatutSaisieForm::class, - Form\TypeIntervention\TypeInterventionStatutDeleteForm::class => Form\TypeIntervention\TypeInterventionStatutDeleteForm::class, - ], - ], - 'view_helpers' => [ - 'invokables' => [ - 'typeInterventionAdmin' => View\Helper\TypeInterventionAdminViewHelper::class, - ], - ], -]; diff --git a/module/Application/src/Assertion/IntervenantAssertion.php b/module/Application/src/Assertion/IntervenantAssertion.php index 65bdf29bffbe69199cc0ed00812f9c68f1161bf1..1b23226f0906ea13608b276b30c44389e001523f 100755 --- a/module/Application/src/Assertion/IntervenantAssertion.php +++ b/module/Application/src/Assertion/IntervenantAssertion.php @@ -76,6 +76,28 @@ class IntervenantAssertion extends AbstractAssertion + protected function assertController($controller, $action = null, $privilege = null) + { + $role = $this->getRole(); + $intervenant = $this->getMvcEvent()->getParam('intervenant'); + /* @var $intervenant Intervenant */ + + // Si le rôle n'est pas renseigné alors on s'en va... + if (!$role instanceof Role) return false; + // pareil si le rôle ne possède pas le privilège adéquat + if ($privilege && !$role->hasPrivilege($privilege)) return false; + + switch ($action) { + case 'voir-heures-comp': + return $this->assertVisuHC($intervenant); + break; + } + + return true; + } + + + protected function assertEdition(Intervenant $intervenant = null) { $role = $this->getRole(); @@ -99,4 +121,15 @@ class IntervenantAssertion extends AbstractAssertion return true; } + + + + protected function assertVisuHC(?Intervenant $intervenant) + { + if (!$intervenant) return true; + + $statut = $intervenant->getStatut(); + + return $statut->getServicePrevu() || $statut->getServiceRealise() || $statut->getReferentielPrevu() || $statut->getReferentielRealise(); + } } \ No newline at end of file diff --git a/module/Application/src/ConfigFactory.php b/module/Application/src/ConfigFactory.php index bb63908f9f6058ac45fbb02dc80accde132a3546..4a4754cb989ed28cc1756bc7d338d3f67b82f9ea 100644 --- a/module/Application/src/ConfigFactory.php +++ b/module/Application/src/ConfigFactory.php @@ -15,7 +15,8 @@ class ConfigFactory { $paths = Glob::glob($dir . '/config/{,*.}{config}.php', Glob::GLOB_BRACE); - $config = Factory::fromFiles($paths); + $config = Factory::fromFiles($paths); + $routeGuards = []; $finalConfig = [ 'doctrine' => [ @@ -44,14 +45,14 @@ class ConfigFactory if (isset($config['console'])) { $finalConfig['console']['router']['routes'] = []; foreach ($config['console'] as $cr => $cc) { - $finalConfig['console']['router']['routes'][$cr] = self::routeSimplified($cc, true); + $finalConfig['console']['router']['routes'][$cr] = self::routeSimplified($cc, $routeGuards, true); } } if (isset($config['routes'])) { $finalConfig['router']['routes'] = []; foreach ($config['routes'] as $cr => $cc) { - $finalConfig['router']['routes'][$cr] = self::routeSimplified($cc, false); + $finalConfig['router']['routes'][$cr] = self::routeSimplified($cc, $routeGuards, false); } } @@ -73,6 +74,12 @@ class ConfigFactory ]; } + if (!empty($routeGuards)) { + foreach ($routeGuards as $routeGuard) { + $finalConfig['bjyauthorize']['guards'][PrivilegeController::class][] = $routeGuard; + } + } + if (isset($config['rules'])) { if (!isset($finalConfig['bjyauthorize'])) $finalConfig['bjyauthorize'] = []; $finalConfig['bjyauthorize']['rule_providers'] = [ @@ -134,8 +141,26 @@ class ConfigFactory - public static function routeSimplified(array $config, bool $isConsole = false): array + public static function routeSimplified(array $config, array &$routeGuards, bool $isConsole = false): array { + /* Détection des guards */ + if (isset($config['controller']) && isset($config['action']) && isset($config['privileges'])) { + $routeGuard = [ + 'controller' => $config['controller'], + 'action' => $config['action'], + 'privileges' => $config['privileges'], + ]; + unset($config['privileges']); + + if (isset($config['assertion'])) { + $routeGuard['assertion'] = $config['assertion']; + + unset($config['assertion']); + } + + $routeGuards[] = $routeGuard; + } + /* On remonte ces params dans le sous-menu options */ $optionsParams = ['route', 'defaults', 'constraints']; foreach ($optionsParams as $param) { @@ -169,7 +194,7 @@ class ConfigFactory /* Si il y a des routes filles, on les parse aussi */ if (isset($config['child_routes'])) { foreach ($config['child_routes'] as $sRoute => $sConfig) { - $config['child_routes'][$sRoute] = self::routeSimplified($sConfig); + $config['child_routes'][$sRoute] = self::routeSimplified($sConfig, $routeGuards); } } diff --git a/module/Application/src/Constants.php b/module/Application/src/Constants.php index 0f92a17b1e228817dd0661743c0ecafff4049b93..a9a44e68033c139ef101eee8f20587ab42a29bb6 100755 --- a/module/Application/src/Constants.php +++ b/module/Application/src/Constants.php @@ -5,7 +5,7 @@ namespace Application; class Constants { const DATE_FORMAT = 'd/m/Y'; - const DATETIME_FORMAT = 'd/m/Y à H:i'; + const DATETIME_FORMAT = 'd/m/Y H:i'; const DATE_SORT = 'ymd'; const BDD = 'doctrine.entitymanager.orm_default'; } \ No newline at end of file diff --git a/module/Application/src/Controller/AbstractController.php b/module/Application/src/Controller/AbstractController.php index 68d217929efcd880a637cfc48bc0ebb9dc12f803..53252b9346b4400285232bb328982920686961c0 100755 --- a/module/Application/src/Controller/AbstractController.php +++ b/module/Application/src/Controller/AbstractController.php @@ -5,12 +5,15 @@ namespace Application\Controller; use Application\Form\Supprimer; use Application\Traits\TranslatorTrait; use Doctrine\ORM\EntityManager; +use Laminas\Http\Request; use Laminas\Mvc\Controller\AbstractActionController; +use Laminas\Mvc\MvcEvent; /** * Description of AbstractController * * @method \Application\Controller\Plugin\Context context() + * @method \Application\Controller\Plugin\Axios axios() * @method \Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger flashMessenger() * @method \BjyAuthorize\Controller\Plugin\IsAllowed isAllowed($resource, $privilege = null) * @@ -51,4 +54,17 @@ abstract class AbstractController extends AbstractActionController { return \Application::$container->get(\Application\Constants::BDD); } + + + + public function onDispatch(MvcEvent $e) + { + $request = $e->getRequest(); + if ($request instanceof Request && $request->isXmlHttpRequest()) { + $e->getTarget()->layout('layout/ajax.phtml'); + } + + return parent::onDispatch($e); // TODO: Change the autogenerated stub + } + } \ No newline at end of file diff --git a/module/Application/src/Controller/AgrementController.php b/module/Application/src/Controller/AgrementController.php index 1e420e8f0d60e2be75e6bb1f47bffd1177bfa649..2277754b9bcd086a434d1d5b87636be8029dea5b 100755 --- a/module/Application/src/Controller/AgrementController.php +++ b/module/Application/src/Controller/AgrementController.php @@ -180,7 +180,7 @@ class AgrementController extends AbstractController if ($request->isPost()) { $form->setData($request->getPost()); if ($form->isValid()) { - $dateDecision = $form->get('dateDecision')->normalizeDate($form->get('dateDecision')->getValue()); + $dateDecision = \DateTime::createFromFormat('Y-m-d', $form->get('dateDecision')->getValue()); $agreer = $this->params()->fromPost('agreer', []); foreach ($agreer as $a => $val) { diff --git a/module/Application/src/Controller/ChargensController.php b/module/Application/src/Controller/ChargensController.php index 3b55020eb60b6aa01e3cc10daab29225ce3a4505..47dae2cfdb46c2d5fb02cdf4f454c18a7ced4b76 100755 --- a/module/Application/src/Controller/ChargensController.php +++ b/module/Application/src/Controller/ChargensController.php @@ -3,7 +3,6 @@ namespace Application\Controller; use Application\Entity\Db\Annee; -use Application\Entity\Db\Etape; use Application\Entity\Db\Scenario; use Application\Entity\Db\SeuilCharge; use Application\Form\Chargens\Traits\DifferentielFormAwareTrait; @@ -14,16 +13,17 @@ use Application\Form\Chargens\Traits\ScenarioFormAwareTrait; use Application\Provider\Chargens\ChargensProviderAwareTrait; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\ScenarioServiceAwareTrait; use Application\Service\Traits\SeuilChargeServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; use BjyAuthorize\Exception\UnAuthorizedException; +use Laminas\View\Model\JsonModel; +use Laminas\View\Model\ViewModel; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Entity\Db\Etape; use UnicaenApp\Util; use UnicaenApp\View\Model\CsvModel; use UnicaenApp\View\Model\MessengerViewModel; -use Laminas\View\Model\JsonModel; -use Laminas\View\Model\ViewModel; /** diff --git a/module/Application/src/Controller/ContratController.php b/module/Application/src/Controller/ContratController.php index 3b5eb55de527aa4e343e5fba505fb8ed59bfc0b0..72dacc9fd8c29df59306bddde1874d6f97d3879e 100755 --- a/module/Application/src/Controller/ContratController.php +++ b/module/Application/src/Controller/ContratController.php @@ -15,7 +15,7 @@ use Application\Form\Intervenant\Traits\ContratRetourAwareTrait; use Application\Processus\Traits\ContratProcessusAwareTrait; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ContratServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; use Enseignement\Service\ServiceServiceAwareTrait; @@ -429,7 +429,13 @@ class ContratController extends AbstractController //Ajout pour transformer les sauts de lignes en html <br/> $html = nl2br($html); //Personnalisation des variables - $vIntervenant = $contrat->getIntervenant()->getCivilite()->getLibelleCourt() . " " . $contrat->getIntervenant()->getNomUsuel(); + if ($contrat->getIntervenant()->getCivilite() != null) { + $vIntervenant = $contrat->getIntervenant()->getCivilite()->getLibelleCourt() . " " . $contrat->getIntervenant()->getNomUsuel(); + } elseif ($dossierIntervenant != null && $dossierIntervenant->getCivilite() != null) { + $vIntervenant = $dossierIntervenant->getCivilite()->getLibelleCourt() . " " . $contrat->getIntervenant()->getNomUsuel(); + } else { + $vIntervenant = $contrat->getIntervenant()->getNomUsuel(); + } $vUtilisateur = $this->getServiceContext()->getUtilisateur()->getDisplayName(); $vAnnee = $this->getServiceContext()->getAnnee()->getLibelle(); $html = str_replace([':intervenant', ':utilisateur', ':annee'], [$vIntervenant, $vUtilisateur, $vAnnee], $html); diff --git a/module/Application/src/Controller/DomaineFonctionnelController.php b/module/Application/src/Controller/DomaineFonctionnelController.php index ee8da7bce69af2db395e4c627dea4ee8389d0ba7..0376bab738561fd88166a840357c4d897668b914 100644 --- a/module/Application/src/Controller/DomaineFonctionnelController.php +++ b/module/Application/src/Controller/DomaineFonctionnelController.php @@ -3,7 +3,7 @@ namespace Application\Controller; use Application\Entity\Db\DomaineFonctionnel; -use Application\Service\Traits\DomaineFonctionnelServiceAwareTrait; +use OffreFormation\Service\Traits\DomaineFonctionnelServiceAwareTrait; use Application\Form\DomaineFonctionnel\Traits\DomaineFonctionnelSaisieFormAwareTrait; use UnicaenApp\View\Model\MessengerViewModel; use Application\Service\Traits\SourceServiceAwareTrait; diff --git a/module/Application/src/Controller/IndexController.php b/module/Application/src/Controller/IndexController.php index f8aeec60d13664b1a45c22920d6a1caaf7f0548c..4db27cdc1fc8851c96920eb03d73df0e939408d6 100755 --- a/module/Application/src/Controller/IndexController.php +++ b/module/Application/src/Controller/IndexController.php @@ -80,8 +80,7 @@ class IndexController extends AbstractController public function generateProxiesAction() - { - $destPath = $this->em()->getConfiguration()->getProxyDir(); + {$destPath = $this->em()->getConfiguration()->getProxyDir(); if (!is_dir($destPath)) { mkdir($destPath, 0775, true); diff --git a/module/Application/src/Controller/IntervenantController.php b/module/Application/src/Controller/IntervenantController.php index 1d2037364364ff71ee741785e4941356e718a0cb..a6887ce795406df8cc4576d65a5c88bd3b9ebebf 100755 --- a/module/Application/src/Controller/IntervenantController.php +++ b/module/Application/src/Controller/IntervenantController.php @@ -2,38 +2,35 @@ namespace Application\Controller; -use Service\Entity\Db\RegleStructureValidation; -use Service\Entity\Db\TypeVolumeHoraire; -use Application\Entity\Db\Validation; -use Service\Entity\Recherche; +use Application\Entity\Db\Intervenant; use Application\Form\Intervenant\Traits\EditionFormAwareTrait; use Application\Form\Intervenant\Traits\HeuresCompFormAwareTrait; use Application\Processus\Traits\IntervenantProcessusAwareTrait; -use Intervenant\Service\NoteServiceAwareTrait; -use Plafond\Processus\PlafondProcessusAwareTrait; -use Referentiel\Processus\ServiceReferentielProcessusAwareTrait; use Application\Provider\Privilege\Privileges; -use Service\Service\CampagneSaisieServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; -use Service\Service\EtatVolumeHoraireServiceAwareTrait; +use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\FormuleResultatServiceAwareTrait; +use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; -use Intervenant\Service\StatutServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; use Application\Service\Traits\UtilisateurServiceAwareTrait; use Application\Service\Traits\ValidationServiceAwareTrait; use Application\Service\Traits\WorkflowServiceAwareTrait; -use UnicaenApp\Traits\SessionContainerTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; +use Intervenant\Service\NoteServiceAwareTrait; +use Intervenant\Service\StatutServiceAwareTrait; +use Laminas\View\Model\JsonModel; +use Laminas\View\Model\ViewModel; use LogicException; -use Application\Entity\Db\Intervenant; -use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\IntervenantServiceAwareTrait; -use UnicaenApp\View\Model\MessengerViewModel; +use Plafond\Processus\PlafondProcessusAwareTrait; +use Referentiel\Processus\ServiceReferentielProcessusAwareTrait; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Service\CampagneSaisieServiceAwareTrait; +use Service\Service\EtatVolumeHoraireServiceAwareTrait; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; +use UnicaenApp\Traits\SessionContainerTrait; use UnicaenImport\Entity\Differentiel\Query; use UnicaenImport\Processus\Traits\ImportProcessusAwareTrait; use UnicaenImport\Service\Traits\DifferentielServiceAwareTrait; -use Laminas\View\Model\ViewModel; /** * Description of IntervenantController @@ -59,10 +56,10 @@ class IntervenantController extends AbstractController use StatutServiceAwareTrait; use SourceServiceAwareTrait; use UtilisateurServiceAwareTrait; - use DossierServiceAwareTrait; use ImportProcessusAwareTrait; use DifferentielServiceAwareTrait; use NoteServiceAwareTrait; + use DossierServiceAwareTrait; public function indexAction() @@ -95,21 +92,19 @@ class IntervenantController extends AbstractController - public function rechercheAction() + public function rechercheJsonAction() { - $this->em()->getFilters()->enable('historique')->init([ - Intervenant::class, - ]); - - $critere = $this->params()->fromPost('critere'); - $recherche = $this->getProcessusIntervenant()->recherche(); - + $recherche = $this->getProcessusIntervenant()->recherche(); $canShowHistorises = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_VISUALISATION_HISTORISES)); $recherche->setShowHisto($canShowHistorises); + $intervenants = []; + $term = $this->axios()->fromPost('term'); - $intervenants = $recherche->rechercher($critere, 21); + if (!empty($term)) { + $intervenants = $recherche->rechercher($term, 40); + } - return compact('intervenants'); + return $this->axios()->send($intervenants); } diff --git a/module/Application/src/Controller/MotifNonPaiementController.php b/module/Application/src/Controller/MotifNonPaiementController.php index 4424197f380dd6b89566c3a8937b9a61a12514e5..f337bf08fc73a624ed01e0ec01fc1f999c68cd68 100644 --- a/module/Application/src/Controller/MotifNonPaiementController.php +++ b/module/Application/src/Controller/MotifNonPaiementController.php @@ -26,7 +26,6 @@ class MotifNonPaiementController extends AbstractController } - public function saisirAction() { /* @var $motifNonPaiement MotifNonPaiement */ @@ -34,7 +33,7 @@ class MotifNonPaiementController extends AbstractController $form = $this->getFormMotifNonPaiementMotifNonPaiementSaisie(); if (empty($motifNonPaiement)) { - $title = 'Création d\'un nouveau motif de non paiement'; + $title = 'Création d\'un nouveau motif de non paiement'; $motifNonPaiement = $this->getServiceMotifNonPaiement()->newEntity(); } else { $title = 'Édition d\'un motif de non paiement'; @@ -53,7 +52,6 @@ class MotifNonPaiementController extends AbstractController } - public function supprimerAction() { $motifNonPaiement = $this->getEvent()->getParam('motifNonPaiement'); diff --git a/module/Application/src/Controller/ParametreController.php b/module/Application/src/Controller/ParametreController.php index df78005ea5f39db5dac4fd27875896d6aad03703..59364d7ea0fac371be829d35275f5a9dc2357e36 100755 --- a/module/Application/src/Controller/ParametreController.php +++ b/module/Application/src/Controller/ParametreController.php @@ -36,6 +36,7 @@ class ParametreController extends AbstractController $annee->setActive(!$annee->isActive()); $this->getServiceAnnee()->save($annee); + $this->getServiceAnnee()->resetChoixAnnees(); return new JsonModel([ 'message' => 'Action effectuée', diff --git a/module/Application/src/Controller/PeriodeController.php b/module/Application/src/Controller/PeriodeController.php index a4c1684d7551365d214c11e60702b1b77b9a0587..f5b00f40095290b5eed3706bd1d022b17a198721 100644 --- a/module/Application/src/Controller/PeriodeController.php +++ b/module/Application/src/Controller/PeriodeController.php @@ -8,7 +8,6 @@ namespace Application\Controller; use Application\Form\Periode\Traits\PeriodeSaisieFormAwareTrait; use Application\Service\Traits\PeriodeServiceAwareTrait; -use Cassandra\Exception\ExecutionException; use Laminas\View\Model\JsonModel; use UnicaenApp\View\Model\MessengerViewModel; diff --git a/module/Application/src/Controller/PieceJointeController.php b/module/Application/src/Controller/PieceJointeController.php index 1f7b77f5bd2d3900789d0e80369b3c12e7eba181..be67946d73f471c7eec1fcd28891ee949c4862fb 100755 --- a/module/Application/src/Controller/PieceJointeController.php +++ b/module/Application/src/Controller/PieceJointeController.php @@ -10,6 +10,7 @@ use Application\Entity\Db\TblPieceJointeDemande; use Application\Entity\Db\TypePieceJointe; use Application\Entity\Db\TypePieceJointeStatut; use Application\Entity\Db\Validation; +use Application\Entity\Db\WfEtape; use Application\Form\PieceJointe\Traits\ModifierTypePieceJointeStatutFormAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\PieceJointeServiceAwareTrait; @@ -65,7 +66,6 @@ class PieceJointeController extends AbstractController } - /** * * @return ViewModel @@ -93,13 +93,13 @@ class PieceJointeController extends AbstractController $title = "Pièces justificatives <small>{$intervenant}</small>"; $heuresPourSeuil = $this->getServicePieceJointe()->getHeuresPourSeuil($intervenant); - $fournies = $this->getServicePieceJointe()->getPiecesFournies($intervenant); - $demandees = $this->getServicePieceJointe()->getTypesPiecesDemandees($intervenant); - $synthese = $this->getServicePieceJointe()->getPiecesSynthese($intervenant); + $fournies = $this->getServicePieceJointe()->getPiecesFournies($intervenant); + $demandees = $this->getServicePieceJointe()->getTypesPiecesDemandees($intervenant); + $synthese = $this->getServicePieceJointe()->getPiecesSynthese($intervenant); $annee = $this->getServiceContext()->getAnnee(); - $messages = $this->makeMessages($demandees, $fournies); + $messages = $this->makeMessages($intervenant); $alertContrat = $role->getIntervenant() && $intervenant->getStatut()->getContrat(); @@ -107,7 +107,6 @@ class PieceJointeController extends AbstractController } - /** * * @return ViewModel @@ -120,54 +119,31 @@ class PieceJointeController extends AbstractController /* @var $intervenant Intervenant */ $demandees = $this->getServicePieceJointe()->getTypesPiecesDemandees($intervenant); - $fournies = $this->getServicePieceJointe()->getPiecesFournies($intervenant); + $fournies = $this->getServicePieceJointe()->getPiecesFournies($intervenant); - $messages = $this->makeMessages($demandees, $fournies); + $messages = $this->makeMessages($intervenant); return compact('messages'); } - /** - * @param TblPieceJointeDemande[] $demandees - * @param TblPieceJointeFournie[] $fournies + * @param Intervenant $intervenant * * @return array */ - protected function makeMessages(array $demandees, array $fournies) + protected function makeMessages(Intervenant $intervenant) { - $role = $this->getServiceContext()->getSelectedIdentityRole(); - $isIntervenant = (boolean)$role->getIntervenant(); - $nbDemandees = 0; - $nbFournies = 0; - $nbValidees = 0; - $nbObligatoiresNonFournis = 0; - - foreach ($demandees as $demandee) { - if ($demandee->isObligatoire()) { - $nbDemandees++; - if (isset($fournies[$demandee->getTypePieceJointe()->getId()])) { - $pj = $fournies[$demandee->getTypePieceJointe()->getId()]; - if (!$pj->getFichier()->isEmpty()) { - $nbFournies++; - if ($pj->getValidation()) { - $nbValidees++; - } - } - } - } - } + $workflowEtapePjSaisie = $this->getServiceWorkflow()->getEtape(WfEtape::CODE_PJ_SAISIE, $intervenant); + $workflowEtapePjValide = $this->getServiceWorkflow()->getEtape(WfEtape::CODE_PJ_VALIDATION, $intervenant); $msgs = []; - if (0 == $nbDemandees) { - $msgs['info'][] = 'Aucune pièce justificative obligatoire n\'est à fournir'; - } elseif ($nbFournies < $nbDemandees) { + if ($workflowEtapePjSaisie->getFranchie() != 1) { $msgs['danger'][] = "Des pièces justificatives obligatoires n'ont pas été fournies."; - } elseif ($nbFournies == $nbDemandees && $nbValidees == $nbDemandees) { + } elseif ($workflowEtapePjSaisie->getFranchie() == 1 && $workflowEtapePjValide->getFranchie() == 1) { $msgs['success'][] = "Toutes les pièces justificatives obligatoires ont été fournies et validées."; - } elseif ($nbFournies == $nbDemandees && $nbValidees < $nbFournies) { + } elseif ($workflowEtapePjSaisie->getFranchie() == 1 && $workflowEtapePjValide->getFranchie() != 1) { $msgs['success'][] = "Toutes les pièces justificatives obligatoires ont été fournies."; $msgs['warning'][] = "Mais certaines doivent encore être validées par un gestionnaire."; } @@ -176,20 +152,18 @@ class PieceJointeController extends AbstractController } - public function validationAction() { $this->initFilters(); $intervenant = $this->getEvent()->getParam('intervenant'); - $tpj = $this->getEvent()->getParam('typePieceJointe'); - $pj = $this->getServicePieceJointe()->getByType($intervenant, $tpj); + $tpj = $this->getEvent()->getParam('typePieceJointe'); + $pj = $this->getServicePieceJointe()->getByType($intervenant, $tpj); return compact('pj'); } - public function validerAction() { $this->initFilters(); @@ -207,7 +181,6 @@ class PieceJointeController extends AbstractController } - public function archiverAction() { $this->initFilters(); @@ -229,7 +202,6 @@ class PieceJointeController extends AbstractController } - public function devaliderAction() { $this->initFilters(); @@ -247,16 +219,15 @@ class PieceJointeController extends AbstractController } - public function listerAction() { $this->initFilters(); $intervenant = $this->getEvent()->getParam('intervenant'); - $pj = $this->getEvent()->getParam('pieceJointe'); + $pj = $this->getEvent()->getParam('pieceJointe'); if (empty($pj) || $pj->estHistorise()) { $typePieceJointe = $this->getEvent()->getParam('typePieceJointe'); - $pj = $this->getServicePieceJointe()->getByType($intervenant, $typePieceJointe); + $pj = $this->getServicePieceJointe()->getByType($intervenant, $typePieceJointe); } else { if ($pj->getIntervenant()->getCode() != $intervenant->getCode()) { // un intervenant tente d'archiver la PJ d'un autre intervenant @@ -268,10 +239,9 @@ class PieceJointeController extends AbstractController } - public function televerserAction() { - $intervenant = $this->getEvent()->getParam('intervenant'); + $intervenant = $this->getEvent()->getParam('intervenant'); $typePieceJointe = $this->getEvent()->getParam('typePieceJointe'); $result = $this->uploader()->upload(); @@ -292,7 +262,6 @@ class PieceJointeController extends AbstractController } - public function telechargerAction() { /** @var Fichier $fichier */ @@ -313,7 +282,6 @@ class PieceJointeController extends AbstractController } - public function supprimerAction() { if (!$this->getRequest()->isPost()) { @@ -321,7 +289,7 @@ class PieceJointeController extends AbstractController } /** @var PieceJointe $pj */ - $pj = $this->getEvent()->getParam('pieceJointe'); + $pj = $this->getEvent()->getParam('pieceJointe'); $fichier = $this->getEvent()->getParam('fichier'); $intervenant = $this->getServiceContext()->getSelectedIdentityRole()->getIntervenant(); @@ -340,7 +308,6 @@ class PieceJointeController extends AbstractController } - /* Actions liées à la configuration des PJ */ public function configurationAction() @@ -349,7 +316,6 @@ class PieceJointeController extends AbstractController } - public function typePieceJointeStatutAction() { $codeIntervenant = $this->params()->fromRoute('codeTypeIntervenant', TypeIntervenant::CODE_EXTERIEUR); @@ -365,8 +331,8 @@ class PieceJointeController extends AbstractController $anneeId = $this->getServiceContext()->getAnnee()->getId(); - $typesPiecesJointes = $this->getServiceTypePieceJointe()->getList(); - $statuts = $this->getServiceStatut()->getList(); + $typesPiecesJointes = $this->getServiceTypePieceJointe()->getList(); + $statuts = $this->getServiceStatut()->getList(); $typesIntervenants = []; foreach ($statuts as $intervenant) { if (!in_array($intervenant->getTypeIntervenant(), $typesIntervenants)) { @@ -395,12 +361,12 @@ class PieceJointeController extends AbstractController AND ti.code = :code"; /* @var $tpjss TypePieceJointeStatut[] */ - $query = $this->em()->createQuery($dql)->setParameters(['annee' => $this->getServiceContext()->getAnnee()->getId(), 'code' => $codeIntervenant]); - $tpjss = $query->getResult(); + $query = $this->em()->createQuery($dql)->setParameters(['annee' => $this->getServiceContext()->getAnnee()->getId(), 'code' => $codeIntervenant]); + $tpjss = $query->getResult(); $typesPiecesJointesStatuts = []; foreach ($tpjss as $tpjs) { $tpjID = $tpjs->getTypePieceJointe()->getId(); - $siId = $tpjs->getStatut()->getId(); + $siId = $tpjs->getStatut()->getId(); if (!isset($typesPiecesJointesStatuts[$tpjID][$siId])) { $typesPiecesJointesStatuts[$tpjID][$siId] = []; @@ -412,7 +378,6 @@ class PieceJointeController extends AbstractController } - public function typePieceJointeDeleteAction() { $typePieceJointe = $this->getEvent()->getParam('typePieceJointe'); @@ -428,7 +393,6 @@ class PieceJointeController extends AbstractController } - public function typePieceJointeSaisieAction() { /* @var $typePieceJointe TypePieceJointe */ @@ -436,7 +400,7 @@ class PieceJointeController extends AbstractController $form = $this->getFormPieceJointeTypePieceJointeSaisie(); if (empty($typePieceJointe)) { - $title = 'Création d\'un nouveau type de pièce jointe'; + $title = 'Création d\'un nouveau type de pièce jointe'; $typePieceJointe = $this->getServiceTypePieceJointe()->newEntity(); $typePieceJointe->setOrdre(9999); } else { @@ -448,7 +412,6 @@ class PieceJointeController extends AbstractController } - public function modifierTypePieceJointeStatutAction() { /* @var $tpjs TypePieceJointeStatut */ @@ -456,17 +419,17 @@ class PieceJointeController extends AbstractController $form = $this->getFormPieceJointeModifierTypePieceJointeStatut(); if (empty($tpjs)) { - $title = 'Nouveau paramètre de gestion de pièce justificative'; - $tpjs = $this->getServiceTypePieceJointeStatut()->newEntity(); + $title = 'Nouveau paramètre de gestion de pièce justificative'; + $tpjs = $this->getServiceTypePieceJointeStatut()->newEntity(); $typePieceJointe = $this->getEvent()->getParam('typePieceJointe'); - $statut = $this->getEvent()->getParam('statut'); + $statut = $this->getEvent()->getParam('statut'); $tpjs->setTypePieceJointe($typePieceJointe); $tpjs->setStatut($statut); $this->getServiceTypePieceJointeStatut()->incrementerNumPiece($tpjs); } else { - $title = 'Édition du paramètre de gestion de pièce justificative'; + $title = 'Édition du paramètre de gestion de pièce justificative'; $typePieceJointe = $tpjs->getTypePieceJointe(); - $statut = $tpjs->getStatut(); + $statut = $tpjs->getStatut(); } $form->bindRequestSave($tpjs, $this->getRequest(), $this->getServiceTypePieceJointeStatut()); @@ -474,13 +437,12 @@ class PieceJointeController extends AbstractController } - public function typePieceJointeTrierAction() { /* @var $tpj TypePieceJointe */ - $txt = 'result='; + $txt = 'result='; $champsIds = explode(',', $this->params()->fromPost('champsIds', '')); - $ordre = 1; + $ordre = 1; foreach ($champsIds as $champId) { $txt .= $champId . '=>'; $tpj = $this->getServiceTypePieceJointe()->get($champId); @@ -500,7 +462,6 @@ class PieceJointeController extends AbstractController } - public function deleteTypePieceJointeStatutAction() { $typePieceJointeStatut = $this->getEvent()->getParam('typePieceJointeStatut'); @@ -516,7 +477,6 @@ class PieceJointeController extends AbstractController } - private function updateTableauxBord(Intervenant $intervenant, $validation = false) { $this->getServiceWorkflow()->calculerTableauxBord([ @@ -537,7 +497,6 @@ class PieceJointeController extends AbstractController } - public function refuserAction() { /** @var PieceJointe $pj */ @@ -556,12 +515,12 @@ class PieceJointeController extends AbstractController if ($this->getRequest()->isPost() && $this->getRequest()->getPost()->count() > 0) { try { - $data = $this->getRequest()->getPost(); - $from = $data['from']; - $to = $data['to']; + $data = $this->getRequest()->getPost(); + $from = $data['from']; + $to = $data['to']; $subject = $data['subject']; $content = $data['content']; - $copy = $data['copy']; + $copy = $data['copy']; $this->getServiceMail()->envoyerMail($from, $to, $subject, $content, $copy); //Création d'une trace de l'envoi dans les notes de l'intervenant $this->getServiceNote()->createNoteFromEmail($pj->getIntervenant(), $subject, $content); diff --git a/module/Application/src/Controller/Plugin/Axios.php b/module/Application/src/Controller/Plugin/Axios.php new file mode 100755 index 0000000000000000000000000000000000000000..9aea93d9a8161f91c99f7725dfa6ad5f9a3ab759 --- /dev/null +++ b/module/Application/src/Controller/Plugin/Axios.php @@ -0,0 +1,216 @@ +<?php + +namespace Application\Controller\Plugin; + +use Application\Constants; +use Application\Interfaces\AxiosExtractor; +use Doctrine\Common\Collections\Collection; +use Doctrine\ORM\Query; +use Laminas\Mvc\Controller\Plugin\AbstractPlugin; +use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; +use Laminas\View\Model\JsonModel; +use UnicaenApp\Util; + +/** + * Description of Axios + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class Axios extends AbstractPlugin +{ + + public function fromPost(?string $param = null, $default = null) + { + $post = (array)json_decode(file_get_contents('php://input')); + if ($param) { + if (array_key_exists($param, $post)) { + return $post[$param]; + } else { + return $default; + } + } else { + return $post; + } + } + + + + public function send($data, array $properties = []): JsonModel + { + $data = self::extract($data, $properties); + + /** @var FlashMessenger $flashMessenger */ + $flashMessenger = $this->controller->flashMessenger(); + + $namespaces = [ + $flashMessenger::NAMESPACE_SUCCESS, + $flashMessenger::NAMESPACE_WARNING, + $flashMessenger::NAMESPACE_ERROR, + $flashMessenger::NAMESPACE_INFO, + ]; + + $messages = []; + foreach ($namespaces as $namespace) { + if ($flashMessenger->hasCurrentMessages($namespace)) { + $messages[$namespace] = $flashMessenger->getCurrentMessages($namespace); + $flashMessenger->clearCurrentMessages($namespace); + } + } + + $jsonData = [ + 'data' => $data, + 'messages' => $messages, + ]; + + $model = new JsonModel($jsonData); + + return $model; + } + + + + public static function extract($data, array $properties = []) + { + if ($data instanceof Query) { + return self::extract($data->getResult(), $properties); + } elseif (self::isList($data)) { + return self::extractList($data, $properties); + } elseif (is_array($data)) { + return self::extractArray($data, $properties); + } elseif ($data instanceof \DateTime) { + return $data->format(Util::DATE_FORMAT); + } elseif (is_object($data)) { + return self::extractObject($data, $properties); + } else { + return $data; + } + } + + + + protected static function extractObject($data, array $properties): array + { + $result = []; + + $props = ['id']; + if (empty($properties)) { + if ($data instanceof AxiosExtractor) { + $ad = $data->axiosDefinition(); + foreach ($ad as $prop) { + if ($prop !== 'id') { + $props[] = $prop; + } + } + } else { + if (method_exists($data, '__toString')) { + $props[] = '__toString'; + } + } + } else { + foreach ($properties as $prop) { + if ($prop !== 'id') { + $props[] = $prop; + } + } + } + + foreach ($props as $property) { + if (is_array($property)) { + $subProperties = $property[1]; + $property = $property[0]; + } else { + $subProperties = []; + } + + $methods = [ + $property, + 'get' . ucfirst($property), + 'is' . ucfirst($property), + 'has' . ucfirst($property), + ]; + foreach ($methods as $method) { + if (method_exists($data, $method)) { + $value = $data->$method(); + $result[$property] = self::extract($value, $subProperties); + break; + } + } + } + + if (array_key_exists('__toString', $result)) { + $result['libelle'] = $result['__toString']; + unset($result['__toString']); + } + + return $result; + } + + + + protected static function extractArray(array $data, array $properties): array + { + $result = []; + + + $props = ['id']; + if (empty($properties)) { + $properties = array_keys($data); + } + foreach ($properties as $prop) { + if ($prop !== 'id') { + $props[] = $prop; + } + } + + foreach ($props as $property) { + if (is_array($property)) { + $subProperties = $property[1]; + $property = $property[0]; + } else { + $subProperties = []; + } + + if (array_key_exists($property, $data)) { + $result[$property] = self::extract($data[$property], $subProperties); + } + } + + return $result; + } + + + + protected static function extractList($list, array $properties = []): array + { + $result = []; + foreach ($list as $sobj) { + $result[] = self::extract($sobj, $properties); + } + + return $result; + } + + + + protected static function isList($data): bool + { + if ($data instanceof Collection) { + return true; + } + if (!is_array($data)) { + return false; + } + foreach ($data as $k => $v) { + if (!is_numeric($k)) { + // une clé non numérique est rejetée + return false; + } + if (!(is_array($v) || is_object($v))) { + // une liste doit être une liste d'objets ou bien une liste de tableaux + return false; + } + } + + return true; + } +} \ No newline at end of file diff --git a/module/Application/src/Controller/Plugin/AxiosFactory.php b/module/Application/src/Controller/Plugin/AxiosFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..af0a8a01e1ddcb42d34b9175ad9df58a35b08684 --- /dev/null +++ b/module/Application/src/Controller/Plugin/AxiosFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace Application\Controller\Plugin; + +use Psr\Container\ContainerInterface; + + +/** + * Description of AxiosFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class AxiosFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return Axios + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): Axios + { + $plugin = new Axios; + + /* Injectez vos dépendances ICI */ + + return $plugin; + } +} \ No newline at end of file diff --git a/module/Application/src/Controller/TagController.php b/module/Application/src/Controller/TagController.php new file mode 100644 index 0000000000000000000000000000000000000000..e753780656f2ff92fb0ba0a008ee0e0aaaf64425 --- /dev/null +++ b/module/Application/src/Controller/TagController.php @@ -0,0 +1,68 @@ +<?php + +namespace Application\Controller; + +use Application\Entity\Db\Tag; +use Application\Form\Tag\Traits\TagSaisieFormAwareTrait; +use Application\Exception\DbException; +use Application\Service\Traits\TagServiceAwareTrait; +use UnicaenApp\View\Model\MessengerViewModel; + +class TagController extends AbstractController +{ + use TagServiceAwareTrait; + use TagSaisieFormAwareTrait; + + + public function indexAction() + { + $this->em()->getFilters()->enable('historique')->init([ + Tag::class, + ]); + + $tags = $this->getServiceTag()->getList(); + + return compact('tags'); + } + + + public function saisirAction() + { + /* @var $tag Tag */ + $tag = $this->getEvent()->getParam('tag'); + + $form = $this->getFormTagSaisie(); + if (empty($tag)) { + $title = 'Création d\'un nouveau tag'; + $tag = $this->getServiceTag()->newEntity(); + } else { + $title = 'Édition d\'un tag'; + } + + $form->bindRequestSave($tag, $this->getRequest(), function (Tag $tag) { + try { + $this->getServiceTag()->save($tag); + $this->flashMessenger()->addSuccessMessage('Enregistrement effectué'); + } catch (\Exception $e) { + $this->flashMessenger()->addErrorMessage($this->translate($e)); + } + }); + + return compact('form', 'title'); + } + + + public function supprimerAction() + { + $tag = $this->getEvent()->getParam('tag'); + + try { + $this->getServiceTag()->delete($tag); + $this->flashMessenger()->addSuccessMessage("Tag supprimé avec succès."); + } catch (\Exception $e) { + $this->flashMessenger()->addErrorMessage($this->translate($e)); + } + + return new MessengerViewModel(); + } +} diff --git a/module/Application/src/Entity/Chargens/Noeud.php b/module/Application/src/Entity/Chargens/Noeud.php index 550679eaf99fc368a833ac9a328d243966510d37..20d1a7d00a81fdc4f9b330ee534b0e94848dbc4b 100755 --- a/module/Application/src/Entity/Chargens/Noeud.php +++ b/module/Application/src/Entity/Chargens/Noeud.php @@ -2,12 +2,12 @@ namespace Application\Entity\Chargens; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; use Application\Entity\Db\Scenario; use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeIntervention; use Application\Provider\Chargens\ChargensProvider; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeIntervention; class Noeud { diff --git a/module/Application/src/Entity/Chargens/ScenarioNoeud.php b/module/Application/src/Entity/Chargens/ScenarioNoeud.php index dcdb0e24a9d4f6f84041d4b0800bda48d1531f6c..94bb4c1d97f2e2e893dfde5cf3e051fb5f6826b4 100755 --- a/module/Application/src/Entity/Chargens/ScenarioNoeud.php +++ b/module/Application/src/Entity/Chargens/ScenarioNoeud.php @@ -3,11 +3,11 @@ namespace Application\Entity\Chargens; use Application\Entity\Chargens\Traits\NoeudAwareTrait; -use Application\Entity\Db\Etape; use Application\Entity\Db\Scenario; use Application\Entity\Db\Traits\ScenarioAwareTrait; -use Application\Entity\Db\TypeHeures; -use Application\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\TypeIntervention; class ScenarioNoeud { diff --git a/module/Application/src/Entity/Chargens/ScenarioNoeudEffectif.php b/module/Application/src/Entity/Chargens/ScenarioNoeudEffectif.php index c6a728de36896f067f56f0c5c292a85315e535db..290cde4d467eedbbc9c8b0754554ca883c925269 100755 --- a/module/Application/src/Entity/Chargens/ScenarioNoeudEffectif.php +++ b/module/Application/src/Entity/Chargens/ScenarioNoeudEffectif.php @@ -3,10 +3,10 @@ namespace Application\Entity\Chargens; use Application\Entity\Chargens\Traits\ScenarioNoeudAwareTrait; -use Application\Entity\Db\Etape; -use Application\Entity\Db\Traits\EtapeAwareTrait; -use Application\Entity\Db\Traits\TypeHeuresAwareTrait; -use Application\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\Traits\EtapeAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeHeuresAwareTrait; class ScenarioNoeudEffectif diff --git a/module/Application/src/Entity/Chargens/ScenarioNoeudSeuil.php b/module/Application/src/Entity/Chargens/ScenarioNoeudSeuil.php index b21d73c64e489d85ca0800fa8890b67acf973c2f..5e454dcf28ee44e31831e22142e0baddec168e3b 100755 --- a/module/Application/src/Entity/Chargens/ScenarioNoeudSeuil.php +++ b/module/Application/src/Entity/Chargens/ScenarioNoeudSeuil.php @@ -3,8 +3,8 @@ namespace Application\Entity\Chargens; use Application\Entity\Chargens\Traits\ScenarioNoeudAwareTrait; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; -use Application\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; +use OffreFormation\Entity\Db\TypeIntervention; class ScenarioNoeudSeuil diff --git a/module/Application/src/Entity/Db/CcActivite.php b/module/Application/src/Entity/Db/CcActivite.php index 7649c647b12d6cd4bbd772dc8411a2bbe9ff34a0..3cf3d759fd8fecadc5af45293477d0f16fdec657 100755 --- a/module/Application/src/Entity/Db/CcActivite.php +++ b/module/Application/src/Entity/Db/CcActivite.php @@ -2,7 +2,7 @@ namespace Application\Entity\Db; -use Doctrine\ORM\Mapping as ORM; +use OffreFormation\Entity\Db\TypeHeures; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; @@ -276,7 +276,7 @@ class CcActivite implements HistoriqueAwareInterface /** * détermine si un type d'heures peut être appliqué à ce type d'activité de centre de coûts ou non * - * @param \Application\Entity\Db\TypeHeures $typeHeures + * @param \OffreFormation\Entity\Db\TypeHeures $typeHeures * * @return boolean */ diff --git a/module/Application/src/Entity/Db/CentreCout.php b/module/Application/src/Entity/Db/CentreCout.php index 6bf7f8adbaf3fb597aa5460f1fde2084d2d2ba57..d6de1c75c94c43af7de5148e7d7a336944db9956 100755 --- a/module/Application/src/Entity/Db/CentreCout.php +++ b/module/Application/src/Entity/Db/CentreCout.php @@ -2,6 +2,7 @@ namespace Application\Entity\Db; +use OffreFormation\Entity\Db\TypeHeures; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; @@ -291,7 +292,7 @@ class CentreCout implements HistoriqueAwareInterface, ImportAwareInterface /** * détermine si un type d'heures peut être appliqué à ce type de ressource ou non * - * @param \Application\Entity\Db\TypeHeures $typeHeures + * @param \OffreFormation\Entity\Db\TypeHeures $typeHeures * * @return boolean */ diff --git a/module/Application/src/Entity/Db/FormuleResultatService.php b/module/Application/src/Entity/Db/FormuleResultatService.php index 6ea4e3368aa3047794c8a255869a2a3d344b8868..fddff377eb2c59a792fff79dda22dc7422c79360 100755 --- a/module/Application/src/Entity/Db/FormuleResultatService.php +++ b/module/Application/src/Entity/Db/FormuleResultatService.php @@ -3,7 +3,9 @@ namespace Application\Entity\Db; use Laminas\Permissions\Acl\Resource\ResourceInterface; -use Application\Service\DomaineFonctionnelService as DomaineFonctionnelService; +use OffreFormation\Entity\Db\CentreCoutEp; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Service\DomaineFonctionnelService; /** * FormuleResultatService diff --git a/module/Application/src/Entity/Db/FormuleResultatServiceReferentiel.php b/module/Application/src/Entity/Db/FormuleResultatServiceReferentiel.php index 1bc1e019c8a89de38d73a1012af6c07625056fa5..e4af738d1c37bd01bfe5c5f9a50749f36a69726c 100755 --- a/module/Application/src/Entity/Db/FormuleResultatServiceReferentiel.php +++ b/module/Application/src/Entity/Db/FormuleResultatServiceReferentiel.php @@ -3,6 +3,7 @@ namespace Application\Entity\Db; use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\TypeHeures; /** * FormuleResultatServiceReferentiel diff --git a/module/Application/src/Entity/Db/FormuleResultatTypesHeuresTrait.php b/module/Application/src/Entity/Db/FormuleResultatTypesHeuresTrait.php index 2328786b211ec7650f0a56a6939a997ea7047a26..b89ffee50285108122b247a65723105cec882793 100755 --- a/module/Application/src/Entity/Db/FormuleResultatTypesHeuresTrait.php +++ b/module/Application/src/Entity/Db/FormuleResultatTypesHeuresTrait.php @@ -2,6 +2,8 @@ namespace Application\Entity\Db; +use OffreFormation\Entity\Db\TypeHeures; + trait FormuleResultatTypesHeuresTrait { /** diff --git a/module/Application/src/Entity/Db/Intervenant.php b/module/Application/src/Entity/Db/Intervenant.php index 1845445e8527d2c5ff36ad0957fd1884ca66ff7f..a7f92e2538b8375e28b249ce0081e48958e91463 100755 --- a/module/Application/src/Entity/Db/Intervenant.php +++ b/module/Application/src/Entity/Db/Intervenant.php @@ -4,15 +4,16 @@ namespace Application\Entity\Db; use Application\Entity\Db\Traits\AnneeAwareTrait; use Application\Entity\Db\Traits\CiviliteAwareTrait; -use Application\Entity\Db\Traits\DisciplineAwareTrait; -use Application\Entity\Db\Traits\EmployeurAwareTrait; +use Dossier\Entity\Db\Traits\EmployeurAwareTrait; use Application\Entity\Db\Traits\GradeAwareTrait; use Application\Entity\Db\Traits\StructureAwareTrait; use Application\Entity\Traits\AdresseTrait; use Application\Interfaces\AdresseInterface; -use Doctrine\Persistence\Mapping\ClassMetadata; use Indicateur\Entity\Db\IndicModifDossier; use Intervenant\Entity\Db\Statut; +use Laminas\Hydrator\ClassMethodsHydrator; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\Traits\DisciplineAwareTrait; use Service\Entity\Db\EtatVolumeHoraire; use Service\Entity\Db\HistoIntervenantService; use Service\Entity\Db\ModificationServiceDu; @@ -23,8 +24,6 @@ use UnicaenApp\Service\EntityManagerAwareInterface; use UnicaenApp\Service\EntityManagerAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Hydrator\ClassMethodsHydrator; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * Intervenant diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCout.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCout.dcm.xml index 2a5bbaf98530a91cfe93a363f0536dd8d63c3b52..50450ab57027dda89090cb6af814a34b6794aefa 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCout.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCout.dcm.xml @@ -65,7 +65,7 @@ <join-column name="ACTIVITE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-many field="typeHeures" target-entity="Application\Entity\Db\TypeHeures"> + <many-to-many field="typeHeures" target-entity="OffreFormation\Entity\Db\TypeHeures"> <join-table name="V_CENTRE_COUT_TYPE_HEURES"> <join-columns> <join-column name="CENTRE_COUT_ID" referenced-column-name="ID" /> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Intervenant.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Intervenant.dcm.xml index c9300f76f10018e5960fafcf2d3fff9d2e475200..19f1a2304609167b3ad88b321f69e688e8f475aa 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Intervenant.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Intervenant.dcm.xml @@ -22,7 +22,7 @@ <many-to-one field="grade" target-entity="Application\Entity\Db\Grade"> <join-column name="GRADE_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="discipline" target-entity="Application\Entity\Db\Discipline"> + <many-to-one field="discipline" target-entity="OffreFormation\Entity\Db\Discipline"> <join-column name="DISCIPLINE_ID" referenced-column-name="ID"/> </many-to-one> @@ -79,7 +79,7 @@ <field name="autre4" type="string" column="AUTRE_4" length="1000" nullable="true"/> <field name="autre5" type="string" column="AUTRE_5" length="1000" nullable="true"/> - <many-to-one field="employeur" target-entity="Application\Entity\Db\Employeur"> + <many-to-one field="employeur" target-entity="Dossier\Entity\Db\Employeur"> <join-column name="EMPLOYEUR_ID" referenced-column-name="ID"/> </many-to-one> <field name="montantIndemniteFc" type="float" column="MONTANT_INDEMNITE_FC" nullable="true"/> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.MiseEnPaiement.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.MiseEnPaiement.dcm.xml index c4aa7b4077c21854672fd6a854b0abf3dc61aef6..a825b3164e41a36ca7d0754936d195f17ecb11a1 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.MiseEnPaiement.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.MiseEnPaiement.dcm.xml @@ -19,7 +19,7 @@ <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> - <many-to-one field="typeHeures" target-entity="Application\Entity\Db\TypeHeures"> + <many-to-one field="typeHeures" target-entity="OffreFormation\Entity\Db\TypeHeures"> <join-columns> <join-column name="TYPE_HEURES_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Modulateur.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Modulateur.dcm.xml index 166c16e5944c4d862ee3dd5546bc624a254c9fa1..6b48dc291199b0dc10d1f00427b035ce0ef48371 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Modulateur.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Modulateur.dcm.xml @@ -40,6 +40,6 @@ <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <one-to-many field="elementModulateur" target-entity="Application\Entity\Db\ElementModulateur" mapped-by="modulateur" /> + <one-to-many field="elementModulateur" target-entity="OffreFormation\Entity\Db\ElementModulateur" mapped-by="modulateur" /> </entity> </doctrine-mapping> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.SeuilCharge.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.SeuilCharge.dcm.xml index eb0ea7aa53b7eb509ed7ec4f1d578190772e76c8..d89bef50f9ada7685bb5c956496bc643b827766b 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.SeuilCharge.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.SeuilCharge.dcm.xml @@ -9,10 +9,10 @@ <field name="dedoublement" type="integer" column="DEDOUBLEMENT" nullable="true"/> - <many-to-one field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-one field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-column name="TYPE_INTERVENTION_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="groupeTypeFormation" target-entity="Application\Entity\Db\GroupeTypeFormation"> + <many-to-one field="groupeTypeFormation" target-entity="OffreFormation\Entity\Db\GroupeTypeFormation"> <join-column name="GROUPE_TYPE_FORMATION_ID" referenced-column-name="ID"/> </many-to-one> <many-to-one field="structure" target-entity="Application\Entity\Db\Structure"> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml index 4d506bba4e57b2d34aeec60375e326825d4cf26b..638a16a0953e39c356e487463b4ab52b94caadd4 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Structure.dcm.xml @@ -44,9 +44,8 @@ <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-many field="centreCout" target-entity="Application\Entity\Db\CentreCout" mapped-by="structure" /> - <one-to-many field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique" mapped-by="structure" /> + <one-to-many field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique" mapped-by="structure" /> <one-to-many field="miseEnPaiementIntervenantStructure" target-entity="Application\Entity\Db\MiseEnPaiementIntervenantStructure" mapped-by="structure" /> </entity> </doctrine-mapping> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Tag.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Tag.dcm.xml new file mode 100755 index 0000000000000000000000000000000000000000..690e2b4f1ec06e036cc41e324d50082bb2a08056 --- /dev/null +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Tag.dcm.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Application\Entity\Db\Tag" table="TAG"> + <indexes> + <index name="IDX_212E995D59860CDC" columns="HISTO_CREATEUR_ID"/> + <index name="IDX_212E995D7E9E2204" columns="HISTO_DESTRUCTEUR_ID"/> + <index name="IDX_212E995D63F06898" columns="HISTO_MODIFICATEUR_ID"/> + </indexes> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + </id> + <field name="code" type="string" column="CODE" length="10" nullable="false"/> + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <field name="libelleCourt" type="string" column="LIBELLE_COURT" length="50" nullable="false"/> + <field name="libelleLong" type="string" column="LIBELLE_LONG" length="200" nullable="false"/> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + </entity> +</doctrine-mapping> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeModulateur.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeModulateur.dcm.xml index 949ebfff6f53a154329526bdd3b7b78da596213d..cda2e15805a27a3589fb0b1af7854d9f01bbc002 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeModulateur.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeModulateur.dcm.xml @@ -31,7 +31,7 @@ </many-to-one> <!-- NB: Ajout de relations à la main --> <one-to-many field="modulateur" target-entity="Application\Entity\Db\Modulateur" mapped-by="typeModulateur" /> - <many-to-many field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-many field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-table name="V_ELEMENT_TYPE_MODULATEUR"> <join-columns> <join-column name="TYPE_MODULATEUR_ID" referenced-column-name="ID"/> @@ -51,7 +51,7 @@ </inverse-join-columns> </join-table> </many-to-many> - <many-to-many field="etape" target-entity="Application\Entity\Db\Etape"> + <many-to-many field="etape" target-entity="OffreFormation\Entity\Db\Etape"> <join-table name="V_ETAPE_TYPE_MODULATEUR"> <join-columns> <join-column name="TYPE_MODULATEUR_ID" referenced-column-name="ID"/> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypePieceJointeStatut.dcm.xml b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypePieceJointeStatut.dcm.xml index 644790ead30b2cf0694c35ef9b8907eccfc8f441..71694d1981fa59648530caf466c89238e5897789 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypePieceJointeStatut.dcm.xml +++ b/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypePieceJointeStatut.dcm.xml @@ -1,51 +1,56 @@ <?xml version="1.0" encoding="utf-8"?> -<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TypePieceJointeStatut" table="TYPE_PIECE_JOINTE_STATUT"> - <unique-constraints> - <unique-constraint name="TYPE_PIECE_JOINTE_STATUT_UN" columns="TYPE_PIECE_JOINTE_ID,NUM_REGLE,STATUT_ID,HISTO_DESTRUCTION"/> - </unique-constraints> - <id name="id" type="integer" column="ID"> - <generator strategy="SEQUENCE"/> - <sequence-generator sequence-name="TYPE_PIECE_JOINTE_STATU_ID_SEQ" allocation-size="1"/> - </id> - <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> - <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> - <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> - <field name="obligatoire" type="boolean" column="OBLIGATOIRE" nullable="false"/> - <field name="seuilHetd" type="integer" column="SEUIL_HETD" nullable="false"/> - <field name="typeHeureHetd" type="boolean" column="TYPE_HEURE_HETD" nullable="false"/> - <field name="changementRIB" type="boolean" column="CHANGEMENT_RIB" nullable="false"/> - <field name="fc" type="boolean" column="FC" nullable="false"/> - <field name="dureeVie" type="integer" column="DUREE_VIE" nullable="false"/> - <field name="numRegle" type="integer" column="NUM_REGLE" nullable="false"/> - <field name="obligatoireHNP" type="boolean" column="OBLIGATOIRE_HNP" nullable="false"/> - <many-to-one field="annee" target-entity="Application\Entity\Db\Annee"> - <join-column name="ANNEE_ID" referenced-column-name="ID"/> - </many-to-one> - <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> - <join-columns> - <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> - </join-columns> - </many-to-one> - <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> - <join-columns> - <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> - </join-columns> - </many-to-one> - <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> - <join-columns> - <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> - </join-columns> - </many-to-one> - <many-to-one field="typePieceJointe" target-entity="Application\Entity\Db\TypePieceJointe"> - <join-columns> - <join-column name="TYPE_PIECE_JOINTE_ID" referenced-column-name="ID"/> - </join-columns> - </many-to-one> - <many-to-one field="statut" target-entity="Intervenant\Entity\Db\Statut"> - <join-columns> - <join-column name="STATUT_ID" referenced-column-name="ID"/> - </join-columns> - </many-to-one> - </entity> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Application\Entity\Db\TypePieceJointeStatut" table="TYPE_PIECE_JOINTE_STATUT"> + <unique-constraints> + <unique-constraint name="TYPE_PIECE_JOINTE_STATUT_UN" + columns="TYPE_PIECE_JOINTE_ID,NUM_REGLE,STATUT_ID,HISTO_DESTRUCTION"/> + </unique-constraints> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + <sequence-generator sequence-name="TYPE_PIECE_JOINTE_STATU_ID_SEQ" allocation-size="1"/> + </id> + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <field name="obligatoire" type="boolean" column="OBLIGATOIRE" nullable="false"/> + <field name="seuilHetd" type="integer" column="SEUIL_HETD" nullable="false"/> + <field name="typeHeureHetd" type="boolean" column="TYPE_HEURE_HETD" nullable="false"/> + <field name="changementRIB" type="boolean" column="CHANGEMENT_RIB" nullable="false"/> + <field name="nationaliteEtrangere" type="boolean" column="NATIONALITE_ETRANGERE" nullable="false"/> + + <field name="fc" type="boolean" column="FC" nullable="false"/> + <field name="dureeVie" type="integer" column="DUREE_VIE" nullable="false"/> + <field name="numRegle" type="integer" column="NUM_REGLE" nullable="false"/> + <field name="obligatoireHNP" type="boolean" column="OBLIGATOIRE_HNP" nullable="false"/> + <many-to-one field="annee" target-entity="Application\Entity\Db\Annee"> + <join-column name="ANNEE_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + <many-to-one field="typePieceJointe" target-entity="Application\Entity\Db\TypePieceJointe"> + <join-columns> + <join-column name="TYPE_PIECE_JOINTE_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + <many-to-one field="statut" target-entity="Intervenant\Entity\Db\Statut"> + <join-columns> + <join-column name="STATUT_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + </entity> </doctrine-mapping> diff --git a/module/Application/src/Entity/Db/MiseEnPaiement.php b/module/Application/src/Entity/Db/MiseEnPaiement.php index 44e6d46cb339f03b6c61f675a9dbf179310834bc..d82ba64bb6c899776a17a9f7e901b06774df4d34 100755 --- a/module/Application/src/Entity/Db/MiseEnPaiement.php +++ b/module/Application/src/Entity/Db/MiseEnPaiement.php @@ -2,9 +2,10 @@ namespace Application\Entity\Db; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\TypeHeures; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * MiseEnPaiement @@ -214,11 +215,11 @@ class MiseEnPaiement implements HistoriqueAwareInterface, ResourceInterface /** * Set typeHeures * - * @param \Application\Entity\Db\TypeHeures $typeHeures + * @param \OffreFormation\Entity\Db\TypeHeures $typeHeures * * @return self */ - public function setTypeHeures(\Application\Entity\Db\TypeHeures $typeHeures = null) + public function setTypeHeures(\OffreFormation\Entity\Db\TypeHeures $typeHeures = null) { $this->typeHeures = $typeHeures; @@ -230,7 +231,7 @@ class MiseEnPaiement implements HistoriqueAwareInterface, ResourceInterface /** * Get typeHeures * - * @return \Application\Entity\Db\TypeHeures + * @return \OffreFormation\Entity\Db\TypeHeures */ public function getTypeHeures() { diff --git a/module/Application/src/Entity/Db/Modulateur.php b/module/Application/src/Entity/Db/Modulateur.php index 67ff6263485018ea69878b4365210886ac8f9cc1..ebc6f08308ddcaef61a10ef84fd599de219d60fd 100755 --- a/module/Application/src/Entity/Db/Modulateur.php +++ b/module/Application/src/Entity/Db/Modulateur.php @@ -2,10 +2,9 @@ namespace Application\Entity\Db; -use Doctrine\ORM\Mapping as ORM; +use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * Modulateur @@ -213,11 +212,11 @@ class Modulateur implements HistoriqueAwareInterface, ResourceInterface /** * Add elementModulateur * - * @param \Application\Entity\Db\ElementModulateur $elementModulateur + * @param \OffreFormation\Entity\Db\ElementModulateur $elementModulateur * * @return self */ - public function addElementModulateur(\Application\Entity\Db\ElementModulateur $elementModulateur) + public function addElementModulateur(\OffreFormation\Entity\Db\ElementModulateur $elementModulateur) { $this->elementModulateur[] = $elementModulateur; @@ -229,7 +228,7 @@ class Modulateur implements HistoriqueAwareInterface, ResourceInterface /** * Remove elementModulateur * - * @param \Application\Entity\Db\ElementModulateur $elementModulateur + * @param \OffreFormation\Entity\Db\ElementModulateur $elementModulateur */ public function removeElementModulateur(\Enseignement\Entity\Db\Service $elementModulateur) { diff --git a/module/Application/src/Entity/Db/ServiceAPayerInterface.php b/module/Application/src/Entity/Db/ServiceAPayerInterface.php index b2341706f64608fde30db53d4daf71a21eeab37e..d88662771669bb8fa02bd19e64f86e21885ea334 100755 --- a/module/Application/src/Entity/Db/ServiceAPayerInterface.php +++ b/module/Application/src/Entity/Db/ServiceAPayerInterface.php @@ -2,6 +2,8 @@ namespace Application\Entity\Db; +use OffreFormation\Entity\Db\TypeHeures; + /** * Interface des entités possédant une gestion d'historique. * diff --git a/module/Application/src/Entity/Db/ServiceAPayerTrait.php b/module/Application/src/Entity/Db/ServiceAPayerTrait.php index 377f757d85ab31a5799c3a9c35c7146aec109478..6019f1de8faa7c8669d65ad5ef26d07f029f8d47 100755 --- a/module/Application/src/Entity/Db/ServiceAPayerTrait.php +++ b/module/Application/src/Entity/Db/ServiceAPayerTrait.php @@ -2,8 +2,9 @@ namespace Application\Entity\Db; -use Service\Entity\Db\TypeVolumeHoraire; +use OffreFormation\Entity\Db\TypeHeures; use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; trait ServiceAPayerTrait { diff --git a/module/Application/src/Entity/Db/SeuilCharge.php b/module/Application/src/Entity/Db/SeuilCharge.php index 0bd2912910837340500a8a4c38448060b2d67b01..290170f23d6dd6238cfc0800aab80643474952da 100755 --- a/module/Application/src/Entity/Db/SeuilCharge.php +++ b/module/Application/src/Entity/Db/SeuilCharge.php @@ -3,10 +3,10 @@ namespace Application\Entity\Db; use Application\Entity\Db\Traits\AnneeAwareTrait; -use Application\Entity\Db\Traits\GroupeTypeFormationAwareTrait; use Application\Entity\Db\Traits\ScenarioAwareTrait; use Application\Entity\Db\Traits\StructureAwareTrait; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; +use OffreFormation\Entity\Db\Traits\GroupeTypeFormationAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; diff --git a/module/Application/src/Entity/Db/Structure.php b/module/Application/src/Entity/Db/Structure.php index 68be851470f948a0536980c175c392939d3f83de..fe9481cfc2b9aefb67932200014b955456d06f50 100755 --- a/module/Application/src/Entity/Db/Structure.php +++ b/module/Application/src/Entity/Db/Structure.php @@ -3,13 +3,13 @@ namespace Application\Entity\Db; use Application\Entity\Traits\AdresseTrait; -use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; -use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; -use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; +use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; +use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; /** * Structure @@ -107,11 +107,11 @@ class Structure implements HistoriqueAwareInterface, ResourceInterface, ImportAw /** * Add elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique * * @return Intervenant */ - public function addElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique) + public function addElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique) { $this->elementPedagogique[] = $elementPedagogique; @@ -123,9 +123,9 @@ class Structure implements HistoriqueAwareInterface, ResourceInterface, ImportAw /** * Remove elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique */ - public function removeElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique) + public function removeElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique) { $this->elementPedagogique->removeElement($elementPedagogique); } diff --git a/module/Application/src/Entity/Db/Tag.php b/module/Application/src/Entity/Db/Tag.php new file mode 100755 index 0000000000000000000000000000000000000000..b13abc133646d1e414297ebb4cc037c11437767f --- /dev/null +++ b/module/Application/src/Entity/Db/Tag.php @@ -0,0 +1,73 @@ +<?php + +namespace Application\Entity\Db; + +use UnicaenApp\Entity\HistoriqueAwareInterface; +use UnicaenApp\Entity\HistoriqueAwareTrait; + +class Tag implements HistoriqueAwareInterface +{ + use HistoriqueAwareTrait; + + protected ?int $id = null; + + protected ?string $code = null; + + protected ?string $libelleCourt = null; + + protected ?string $libelleLong = null; + + + public function getId(): ?int + { + return $this->id; + } + + + public function getCode(): ?string + { + return $this->code; + } + + + public function setCode(?string $code): Tag + { + $this->code = $code; + + return $this; + } + + + public function getLibelleCourt(): ?string + { + return $this->libelleCourt; + } + + + public function setLibelleCourt(?string $libelleCourt): Tag + { + $this->libelleCourt = $libelleCourt; + + return $this; + } + + + public function getLibelleLong(): ?string + { + return $this->libelleLong; + } + + + public function setLibelleLong(?string $libelleLong): Tag + { + $this->libelleLong = $libelleLong; + + return $this; + } + + + public function __toString(): string + { + return $this->getLibelleLong() ?: $this->getLibelleCourt(); + } +} diff --git a/module/Application/src/Entity/Db/Traits/TagAwareTrait.php b/module/Application/src/Entity/Db/Traits/TagAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..110deded504026452380f7d8569a90b79bc2d4fe --- /dev/null +++ b/module/Application/src/Entity/Db/Traits/TagAwareTrait.php @@ -0,0 +1,34 @@ +<?php + +namespace Application\Entity\Db\Traits; + +use Application\Entity\Db\Tag; + +/** + * Description of TagAwareTrait + * + * @author UnicaenCode + */ +trait TagAwareTrait +{ + protected ?Tag $tag = null; + + + /** + * @param Tag $tag + * + * @return self + */ + public function setTag(?Tag $tag) + { + $this->tag = $tag; + + return $this; + } + + + public function getTag(): ?Tag + { + return $this->tag; + } +} \ No newline at end of file diff --git a/module/Application/src/Entity/Db/TypeModulateurStructure.php b/module/Application/src/Entity/Db/TypeModulateurStructure.php index b5edd8d39ee9696ff43983a5d36c6bba5ad92a97..b386c1437d9005c108b59961fbe9785230c57db5 100755 --- a/module/Application/src/Entity/Db/TypeModulateurStructure.php +++ b/module/Application/src/Entity/Db/TypeModulateurStructure.php @@ -1,6 +1,7 @@ <?php namespace Application\Entity\Db; +use OffreFormation\Entity\Db\TypeInterventionStructure; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; diff --git a/module/Application/src/Entity/Db/TypePieceJointeStatut.php b/module/Application/src/Entity/Db/TypePieceJointeStatut.php index c8268b2c6da2ef0a984b4eebd36fba2590d928de..18929e4eb7dcffa06fadadbedce419cd211fc996 100755 --- a/module/Application/src/Entity/Db/TypePieceJointeStatut.php +++ b/module/Application/src/Entity/Db/TypePieceJointeStatut.php @@ -6,8 +6,6 @@ use Application\Entity\Db\Traits\TypePieceJointeAwareTrait; use Application\Interfaces\ParametreEntityInterface; use Application\Traits\ParametreEntityTrait; use Intervenant\Entity\Db\StatutAwareTrait; -use UnicaenApp\Entity\HistoriqueAwareInterface; -use UnicaenApp\Entity\HistoriqueAwareTrait; class TypePieceJointeStatut implements ParametreEntityInterface @@ -16,21 +14,23 @@ class TypePieceJointeStatut implements ParametreEntityInterface use StatutAwareTrait; use TypePieceJointeAwareTrait; - private float $seuilHetd = 0; + private float $seuilHetd = 0; - private bool $typeHeureHetd = false; + private bool $typeHeureHetd = false; - private bool $fc = false; + private bool $fc = false; - private bool $changementRIB = false; + private bool $changementRIB = false; - private int $dureeVie = 1; + private bool $nationaliteEtrangere = false; - private bool $obligatoireHNP = false; + private int $dureeVie = 1; - private bool $obligatoire = true; + private bool $obligatoireHNP = false; - protected int $numRegle = 1; + private bool $obligatoire = true; + + protected int $numRegle = 1; @@ -98,6 +98,30 @@ class TypePieceJointeStatut implements ParametreEntityInterface + /** + * @return bool + */ + public function isNationaliteEtrangere(): bool + { + return $this->nationaliteEtrangere; + } + + + + /** + * @param bool $nationaliteEtrangere + * + * @return TypePieceJointeStatut $this + */ + public function setNationaliteEtrangere(bool $nationaliteEtrangere): TypePieceJointeStatut + { + $this->nationaliteEtrangere = $nationaliteEtrangere; + + return $this; + } + + + public function getDureeVie(): int { return $this->dureeVie; @@ -168,6 +192,7 @@ class TypePieceJointeStatut implements ParametreEntityInterface if ($this->getSeuilHetd()) $txt .= ' >' . $this->getSeuilHetd(); if ($this->getFc()) $txt .= ' FC '; if ($this->getChangementRIB()) $txt .= ' RIB'; + if ($this->isNationaliteEtrangere()) $txt .= ' Etr'; if ($this->getDureeVie() && $this->getDureeVie() > 1) $txt .= ' ' . $this->getDureeVie() . 'ans'; @@ -186,6 +211,7 @@ class TypePieceJointeStatut implements ParametreEntityInterface if ($this->getSeuilHetd()) $t[] = 'À partir de ' . $this->getSeuilHetd() . ' heures'; if ($this->getFc()) $t[] = 'Uniquement avec des enseignements en Formation Continue'; if ($this->getChangementRIB()) $t[] = 'Uniquement si le RIB a changé'; + if ($this->isNationaliteEtrangere()) $t[] = 'Uniquement si nationalité étrangère'; if ($this->getDureeVie()) $t[] = 'Redemander la pièce tous les ' . $this->getDureeVie() . ' an(s)'; return implode("\n", $t); diff --git a/module/Application/src/Entity/Db/TypeRessource.php b/module/Application/src/Entity/Db/TypeRessource.php index ca722c3bdcbbfb7e8452e5da6b6aa40e7cad29df..2fa946542b037aed699c5ddf5bbbbfa9e598067a 100755 --- a/module/Application/src/Entity/Db/TypeRessource.php +++ b/module/Application/src/Entity/Db/TypeRessource.php @@ -3,10 +3,10 @@ namespace Application\Entity\Db; use Application\Provider\Privilege\Privileges; -use Doctrine\ORM\Mapping as ORM; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\TypeHeures; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * TypeRessource @@ -297,7 +297,7 @@ class TypeRessource implements HistoriqueAwareInterface, ResourceInterface /** * détermine si un type d'heures peut être appliqué à ce type de ressource ou non * - * @param \Application\Entity\Db\TypeHeures $typeHeures + * @param \OffreFormation\Entity\Db\TypeHeures $typeHeures * * @return boolean */ diff --git a/module/Application/src/Entity/Db/TypeValidation.php b/module/Application/src/Entity/Db/TypeValidation.php index 2309d17c5e2a11f21df9dda391171298527592d5..68f8483103ca5388e79a6bd4290eee06de148795 100755 --- a/module/Application/src/Entity/Db/TypeValidation.php +++ b/module/Application/src/Entity/Db/TypeValidation.php @@ -15,6 +15,8 @@ class TypeValidation const CODE_FICHIER = 'FICHIER'; const CODE_PIECE_JOINTE = 'PIECE_JOINTE'; const CODE_CLOTURE_REALISE = 'CLOTURE_REALISE'; + const CODE_MISSION = 'MISSION'; + const CODE_MISSION_REALISE = 'MISSION_REALISE'; /** * @var string diff --git a/module/Application/src/Entity/Db/Utilisateur.php b/module/Application/src/Entity/Db/Utilisateur.php index a399e36180ff07eb620f83145509f58c65c2be1b..77a6d50db88098bec206d6b673d2f7fb0e319719 100755 --- a/module/Application/src/Entity/Db/Utilisateur.php +++ b/module/Application/src/Entity/Db/Utilisateur.php @@ -2,6 +2,7 @@ namespace Application\Entity\Db; +use Application\Interfaces\AxiosExtractor; use UnicaenApp\Entity\UserInterface; use UnicaenAuth\Entity\Db\AbstractUser; @@ -9,7 +10,7 @@ use UnicaenAuth\Entity\Db\AbstractUser; /** * Utilisateur */ -class Utilisateur extends AbstractUser implements UserInterface +class Utilisateur extends AbstractUser implements UserInterface, AxiosExtractor { const APP_UTILISATEUR_ID = 1; @@ -35,6 +36,13 @@ class Utilisateur extends AbstractUser implements UserInterface + public function axiosDefinition(): array + { + return ['email', 'displayName']; + } + + + /** * @return \Laminas\Permissions\Acl\Role\RoleInterface[] */ diff --git a/module/Application/src/Entity/Db/Validation.php b/module/Application/src/Entity/Db/Validation.php index 1afe49f1741cd323ea3fb12cec88e1977ddc71c0..e0fef1dce8c3bcb9b3606851ac146eee6b2823fb 100755 --- a/module/Application/src/Entity/Db/Validation.php +++ b/module/Application/src/Entity/Db/Validation.php @@ -2,6 +2,7 @@ namespace Application\Entity\Db; +use Application\Interfaces\AxiosExtractor; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use Laminas\Permissions\Acl\Resource\ResourceInterface; @@ -9,7 +10,7 @@ use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * Validation */ -class Validation implements HistoriqueAwareInterface, ResourceInterface +class Validation implements HistoriqueAwareInterface, ResourceInterface, AxiosExtractor { use HistoriqueAwareTrait; @@ -68,6 +69,13 @@ class Validation implements HistoriqueAwareInterface, ResourceInterface + public function axiosDefinition(): array + { + return ['histoCreation', 'histoCreateur']; + } + + + /** * Get id * diff --git a/module/Application/src/Entity/Db/WfEtape.php b/module/Application/src/Entity/Db/WfEtape.php index e3ec6cec35eefce58b00a592b05b04608fdb5315..53da84a3d31472c4c06c389d7c73dfde2664e2e7 100755 --- a/module/Application/src/Entity/Db/WfEtape.php +++ b/module/Application/src/Entity/Db/WfEtape.php @@ -14,6 +14,10 @@ class WfEtape const CODE_DONNEES_PERSO_VALIDATION = 'DONNEES_PERSO_VALIDATION'; const CODE_SERVICE_VALIDATION = 'SERVICE_VALIDATION'; const CODE_REFERENTIEL_VALIDATION = 'REFERENTIEL_VALIDATION'; + const CODE_MISSION_SAISIE = 'MISSION_SAISIE'; + const CODE_MISSION_VALIDATION = 'MISSION_VALIDATION'; + const CODE_MISSION_SAISIE_REALISE = 'MISSION_SAISIE_REALISE'; + const CODE_MISSION_VALIDATION_REALISE = 'MISSION_VALIDATION_REALISE'; const CODE_CONSEIL_RESTREINT = TypeAgrement::CODE_CONSEIL_RESTREINT; // NB: c'est texto le code du type d'agrément const CODE_CONSEIL_ACADEMIQUE = TypeAgrement::CODE_CONSEIL_ACADEMIQUE; // NB: c'est texto le code du type d'agrément const CODE_CONTRAT = 'CONTRAT'; diff --git a/module/Application/src/Entity/MiseEnPaiementListe.php b/module/Application/src/Entity/MiseEnPaiementListe.php index 9b9828a3d2849da942b057a8fa7e070ab0d42394..3b7002b4b4c5a80313bb7070aab6f927d02a6b66 100755 --- a/module/Application/src/Entity/MiseEnPaiementListe.php +++ b/module/Application/src/Entity/MiseEnPaiementListe.php @@ -2,10 +2,10 @@ namespace Application\Entity; +use Application\Entity\Db\Periode; use Application\Entity\Db\ServiceAPayerInterface; use Application\Interfaces\ServiceAPayerAwareInterface; use Application\Traits\ServiceAPayerAwareTrait; -use Application\Entity\Db\Periode; /** * Description of MiseEnPaiementListe @@ -42,7 +42,7 @@ class MiseEnPaiementListe implements ServiceAPayerAwareInterface /** * Type d'heures * - * @var Db\TypeHeures + * @var \OffreFormation\Entity\Db\TypeHeures */ protected $typeHeures = false; @@ -180,7 +180,7 @@ class MiseEnPaiementListe implements ServiceAPayerAwareInterface /** * - * @return Db\TypeHeures|boolean|null + * @return \OffreFormation\Entity\Db\TypeHeures|boolean|null */ function getTypeHeures() { @@ -191,14 +191,14 @@ class MiseEnPaiementListe implements ServiceAPayerAwareInterface /** * - * @param Db\TypeHeures|null|boolean $typeHeures + * @param \OffreFormation\Entity\Db\TypeHeures|null|boolean $typeHeures * * @return self * @throws RuntimeException */ function setTypeHeures($typeHeures) { - if (!(is_bool($typeHeures) || null === $typeHeures || $typeHeures instanceof Db\TypeHeures)) { + if (!(is_bool($typeHeures) || null === $typeHeures || $typeHeures instanceof \OffreFormation\Entity\Db\TypeHeures)) { throw new RuntimeException('Valeur non autorisée'); } $this->typeHeures = $typeHeures; @@ -440,7 +440,7 @@ class MiseEnPaiementListe implements ServiceAPayerAwareInterface if ($this->getCentreCout() instanceof Db\CentreCout && $miseEnPaiement->getCentreCout() !== $this->getCentreCout()) { throw new LogicException('Le centre de coûts de la mise en paiement ne correspond pas à celui de la liste'); } - if ($this->getTypeHeures() instanceof Db\TypeHeures && $miseEnPaiement->getTypeHeures() !== $this->getTypeHeures()) { + if ($this->getTypeHeures() instanceof \OffreFormation\Entity\Db\TypeHeures && $miseEnPaiement->getTypeHeures() !== $this->getTypeHeures()) { throw new LogicException('Le type d\'heures de la mise en paiement ne correspond pas à celui de la liste'); } @@ -467,7 +467,7 @@ class MiseEnPaiementListe implements ServiceAPayerAwareInterface if ($this->getCentreCout() instanceof Db\CentreCout) { $result['centre-cout'] = $this->getCentreCout()->getId(); } - if ($this->getTypeHeures() instanceof Db\TypeHeures) { + if ($this->getTypeHeures() instanceof \OffreFormation\Entity\Db\TypeHeures) { $result['type-heures'] = $this->getTypeHeures()->getId(); } @@ -478,7 +478,7 @@ class MiseEnPaiementListe implements ServiceAPayerAwareInterface /** * - * @return Db\TypeHeures[] + * @return \OffreFormation\Entity\Db\TypeHeures[] */ public function getTypesHeures() { diff --git a/module/Application/src/Entity/NiveauEtape.php b/module/Application/src/Entity/NiveauEtape.php index 3c74097b4f8c16026cc8a818ec26c599177ae681..a01295b4db05b1998ebb68ddeee976fd1990ffb4 100755 --- a/module/Application/src/Entity/NiveauEtape.php +++ b/module/Application/src/Entity/NiveauEtape.php @@ -2,7 +2,7 @@ namespace Application\Entity; -use Application\Entity\Db\Etape; +use OffreFormation\Entity\Db\Etape; /** * Description of NiveauEtape @@ -33,7 +33,7 @@ class NiveauEtape /** * - * @param \Application\Entity\Db\Etape $etape + * @param \OffreFormation\Entity\Db\Etape $etape */ static public function getInstanceFromEtape(Etape $etape) { diff --git a/module/Application/src/Filter/DateTimeFromString.php b/module/Application/src/Filter/DateTimeFromString.php new file mode 100644 index 0000000000000000000000000000000000000000..8c0c55bd118d4efaba041a1f56d865d869178d00 --- /dev/null +++ b/module/Application/src/Filter/DateTimeFromString.php @@ -0,0 +1,50 @@ +<?php + +namespace Application\Filter; + +use Laminas\Filter\AbstractFilter; + +class DateTimeFromString extends AbstractFilter +{ + private static $instance; + + + + public function filter($value) + { + if ($value === '') return null; + + return $this->convert($value); + } + + + + protected function convert($value): ?\DateTime + { + if (!$value) return null; + + $datetime = null; + if (strlen($value) == 10) { + $value .= "T00:00:00"; + } elseif (strlen($value) == 16) { + $value .= ":00"; + } + + $datetime = \DateTime::createFromFormat('Y-m-d\TH:i:s', $value); + + if ($datetime instanceof \DateTime) return $datetime; + + return null; + } + + + + public static function run($value) + { + if (!self::$instance) { + self::$instance = new self; + } + + return self::$instance->filter($value); + } +} \ No newline at end of file diff --git a/module/Application/src/Form/Agrement/Saisie.php b/module/Application/src/Form/Agrement/Saisie.php index f8a9e4ffd6f76496cc6a8bf2487f186bcd9ffa78..235c2b86d24fa8ef7c570bfa2a306b27b7378937 100755 --- a/module/Application/src/Form/Agrement/Saisie.php +++ b/module/Application/src/Form/Agrement/Saisie.php @@ -2,9 +2,12 @@ namespace Application\Form\Agrement; +use Application\Constants; +use Application\Filter\DateTimeFromString; use Application\Form\AbstractForm; use Laminas\Form\Element\Csrf; use Laminas\Hydrator\ClassMethodsHydrator; +use Laminas\Hydrator\HydratorInterface; use UnicaenApp\Hydrator\Strategy\DateStrategy; /** @@ -16,13 +19,14 @@ class Saisie extends AbstractForm public function init() { - $this->setHydrator(new ClassMethodsHydrator(false)); + $this->setHydrator(new AgreementRetourFormHydrator()); $this->setAttribute('action', $this->getCurrentUrl()); + $this->add([ 'name' => 'dateDecision', - 'type' => 'UnicaenApp\Form\Element\Date', + 'type' => 'Date', 'options' => [ 'label' => "Date de la décision", ], @@ -30,7 +34,7 @@ class Saisie extends AbstractForm 'id' => uniqid('dateDecision'), ], ]); - $this->getHydrator()->addStrategy('dateDecision', new DateStrategy($this->get('dateDecision'))); +// $this->getHydrator()->addStrategy('dateDecision', new DateStrategy($this->get('dateDecision'))); $this->add(new Csrf('security')); @@ -61,4 +65,38 @@ class Saisie extends AbstractForm ], ]; } +} + + + + + +class AgreementRetourFormHydrator implements HydratorInterface +{ + + /** + * @param array $data + * @param $object + */ + public function hydrate(array $data, $object) + { + $object->setDateDecision(DateTimeFromString::run($data['dateDecision'] ?? null)); + } + + + + /** + * + * @param $object + * + * @return array + */ + public function extract($object): array + { + $data = [ + 'dateDecision' => $object->getDateDecision() ? $object->getDateDecision()->format('Y-m-d') : null, + ]; + + return $data; + } } \ No newline at end of file diff --git a/module/Application/src/Form/Chargens/DuplicationScenarioForm.php b/module/Application/src/Form/Chargens/DuplicationScenarioForm.php index ae361456cb0345b3aa1e2899c8bbf2a66fb1f024..1baad8a0097212dbbc0df36c8c707342e67ee8b2 100755 --- a/module/Application/src/Form/Chargens/DuplicationScenarioForm.php +++ b/module/Application/src/Form/Chargens/DuplicationScenarioForm.php @@ -2,6 +2,7 @@ namespace Application\Form\Chargens; +use Application\Entity\Db\Scenario; use Application\Form\AbstractForm; use Application\Service\Traits\ScenarioServiceAwareTrait; use UnicaenApp\Util; @@ -54,10 +55,8 @@ class DuplicationScenarioForm extends AbstractForm 'value_options' => Util::collectionAsOptions($this->scenarios), ], 'attributes' => [ - 'id' => 'scenario', - 'title' => "Scénario ...", - 'class' => 'selectpicker', - 'data-live-search' => "true", + 'id' => 'scenario', + 'title' => "Scénario ...", ], 'type' => 'Select', ]); diff --git a/module/Application/src/Form/Chargens/FiltreForm.php b/module/Application/src/Form/Chargens/FiltreForm.php index 590dbf81348b61e5fac8ecf0432f792e52385be4..5baf710aa7dfa035a094224370ab64839ea576fa 100755 --- a/module/Application/src/Form/Chargens/FiltreForm.php +++ b/module/Application/src/Form/Chargens/FiltreForm.php @@ -2,14 +2,14 @@ namespace Application\Form\Chargens; -use Application\Entity\Db\Etape; use Application\Entity\Db\Scenario; use Application\Entity\Db\Structure; use Application\Form\AbstractForm; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\ScenarioServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Entity\Db\Etape; use UnicaenApp\Util; @@ -206,6 +206,7 @@ class FiltreForm extends AbstractForm $sEtapes = []; $eStructures = []; + $sScenarios = []; foreach ($dEtapes as $e) { $id = (int)$e['ID']; $label = $e['LIBELLE'] . ' (' . $e['CODE'] . ')'; diff --git a/module/Application/src/Form/Intervenant/ContratRetour.php b/module/Application/src/Form/Intervenant/ContratRetour.php index 8460b8f485e836cf5bd9e4e7a3dad494c192940b..84a7cbe3756032885d1a8224fe478ccbfb633be8 100755 --- a/module/Application/src/Form/Intervenant/ContratRetour.php +++ b/module/Application/src/Form/Intervenant/ContratRetour.php @@ -4,6 +4,7 @@ namespace Application\Form\Intervenant; use Application\Constants; use Application\Entity\Db\Traits\ContratAwareTrait; +use Application\Filter\DateTimeFromString; use Application\Form\AbstractForm; use Laminas\Hydrator\HydratorInterface; use UnicaenApp\Hydrator\Strategy\DateStrategy; @@ -28,10 +29,9 @@ class ContratRetour extends AbstractForm $this->add([ 'name' => 'dateRetourSigne', - 'type' => 'DateTime', + 'type' => 'Date', 'options' => [ - 'label' => "Date de retour $contratToString signé", - 'format' => Constants::DATE_FORMAT, + 'label' => "Date de retour $contratToString signé", ], 'attributes' => [ ], @@ -86,7 +86,7 @@ class ContratRetourFormHydrator implements HydratorInterface */ public function hydrate(array $data, $object) { - $object->setDateRetourSigne($data['dateRetourSigne'] ? \DateTime::createFromFormat(Constants::DATE_FORMAT, $data['dateRetourSigne']) : null); + $object->setDateRetourSigne(DateTimeFromString::run($data['dateRetourSigne'] ?? null)); return $object; } @@ -101,7 +101,7 @@ class ContratRetourFormHydrator implements HydratorInterface public function extract($object): array { $data = [ - 'dateRetourSigne' => $object->getDateRetourSigne() ? $object->getDateRetourSigne()->format(Constants::DATE_FORMAT) : null, + 'dateRetourSigne' => $object->getDateRetourSigne(), ]; return $data; diff --git a/module/Application/src/Form/Intervenant/EditionForm.php b/module/Application/src/Form/Intervenant/EditionForm.php index 6a2e9624c423ab7ad03b17df39ab1b6f6f045cd8..96a50f7dc7840d4a08b772ef17fcf84588fad8de 100755 --- a/module/Application/src/Form/Intervenant/EditionForm.php +++ b/module/Application/src/Form/Intervenant/EditionForm.php @@ -3,30 +3,29 @@ namespace Application\Form\Intervenant; use Application\Connecteur\Traits\LdapConnecteurAwareTrait; -use Application\Constants; use Application\Entity\Db\Civilite; -use Application\Entity\Db\Discipline; use Application\Entity\Db\Grade; use Application\Entity\Db\Intervenant; -use Intervenant\Entity\Db\Statut; use Application\Entity\Db\Structure; use Application\Filter\FloatFromString; use Application\Form\AbstractForm; use Application\Hydrator\GenericHydrator; use Application\Service\Traits\CiviliteServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DisciplineServiceAwareTrait; use Application\Service\Traits\GradeServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; -use Intervenant\Service\StatutServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; use Application\Service\Traits\UtilisateurServiceAwareTrait; +use Intervenant\Entity\Db\Statut; +use Intervenant\Service\StatutServiceAwareTrait; +use Laminas\Form\Element; +use Laminas\Form\FormInterface; +use OffreFormation\Entity\Db\Discipline; +use OffreFormation\Service\Traits\DisciplineServiceAwareTrait; use UnicaenApp\Form\Element\SearchAndSelect; use UnicaenApp\Util; use UnicaenImport\Entity\Db\Source; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; -use Laminas\Form\Element; -use Laminas\Form\FormInterface; /** * Description of EditionForm @@ -120,18 +119,14 @@ class EditionForm extends AbstractForm ]); $this->add([ - 'name' => 'dateNaissance', - 'type' => 'DateTime', - 'options' => [ + 'name' => 'dateNaissance', + 'type' => 'Date', + 'options' => [ 'label' => 'Date de naissance <span class="text-danger">*</span>', - 'format' => Constants::DATE_FORMAT, 'label_options' => [ 'disable_html_escape' => true, ], ], - 'attributes' => [ - 'placeholder' => "jj/mm/aaaa", - ], ]); $this->add([ @@ -284,42 +279,30 @@ class EditionForm extends AbstractForm ]); $this->add([ - 'name' => 'validiteDebut', - 'type' => 'DateTime', - 'options' => [ - 'label' => 'Début de validité', - 'format' => Constants::DATE_FORMAT, - ], - 'attributes' => [ - 'placeholder' => "jj/mm/aaaa", + 'name' => 'validiteDebut', + 'type' => 'Date', + 'options' => [ + 'label' => 'Début de validité', ], ]); $this->add([ - 'name' => 'validiteFin', - 'type' => 'DateTime', - 'options' => [ - 'label' => 'Fin de validité', - 'format' => Constants::DATE_FORMAT, - ], - 'attributes' => [ - 'placeholder' => "jj/mm/aaaa", + 'name' => 'validiteFin', + 'type' => 'Date', + 'options' => [ + 'label' => 'Fin de validité', ], ]); $this->add([ - 'name' => 'dateNaissance', - 'type' => 'DateTime', - 'options' => [ + 'name' => 'dateNaissance', + 'type' => 'Date', + 'options' => [ 'label' => 'Date de naissance <span class="text-danger">*</span>', - 'format' => Constants::DATE_FORMAT, 'label_options' => [ 'disable_html_escape' => true, ], ], - 'attributes' => [ - 'placeholder' => "jj/mm/aaaa", - ], ]); $this->add([ diff --git a/module/Application/src/Form/OffreFormation/Traits/ElementModulateurCentreCoutFormAwareTrait.php b/module/Application/src/Form/OffreFormation/Traits/ElementModulateurCentreCoutFormAwareTrait.php deleted file mode 100755 index b0f33c59d51affd8206ae380bfcd1c65b7d9f04b..0000000000000000000000000000000000000000 --- a/module/Application/src/Form/OffreFormation/Traits/ElementModulateurCentreCoutFormAwareTrait.php +++ /dev/null @@ -1,40 +0,0 @@ -<?php - -namespace Application\Form\OffreFormation\Traits; - -use Application\Form\OffreFormation\ElementModulateurCentreCoutForm; - -/** - * Description of ElementModulateurCentreCoutFormAwareTrait - * - * @author UnicaenCode - */ -trait ElementModulateurCentreCoutFormAwareTrait -{ - protected ?ElementModulateurCentreCoutForm $formOffreFormationElementModulateurCentreCout = null; - - - - /** - * @param ElementModulateurCentreCoutForm $formOffreFormationElementModulateurCentreCout - * - * @return self - */ - public function setFormOffreFormationElementModulateurCentreCout(?ElementModulateurCentreCoutForm $formOffreFormationElementModulateurCentreCout) - { - $this->formOffreFormationElementModulateurCentreCout = $formOffreFormationElementModulateurCentreCout; - - return $this; - } - - - - public function getFormOffreFormationElementModulateurCentreCout(): ?ElementModulateurCentreCoutForm - { - if (!empty($this->formOffreFormationElementModulateurCentreCout)) { - return $this->formOffreFormationElementModulateurCentreCout; - } - - return \Application::$container->get('FormElementManager')->get(ElementModulateurCentreCoutForm::class); - } -} \ No newline at end of file diff --git a/module/Application/src/Form/ParametresForm.php b/module/Application/src/Form/ParametresForm.php index bb082c3dd86731fbdfb48972142e1df1a0008608..27c1c77c8129dd062b250511f6677b4abb81dbc1 100755 --- a/module/Application/src/Form/ParametresForm.php +++ b/module/Application/src/Form/ParametresForm.php @@ -6,7 +6,7 @@ use Application\Entity\Db\Formule; use Application\Entity\Db\Parametre; use Service\Entity\Db\TypeVolumeHoraire; use Application\Service\Traits\AnneeServiceAwareTrait; -use Application\Service\Traits\DomaineFonctionnelServiceAwareTrait; +use OffreFormation\Service\Traits\DomaineFonctionnelServiceAwareTrait; use Application\Service\Traits\EtatSortieServiceAwareTrait; use Application\Service\Traits\FormuleServiceAwareTrait; use Application\Service\Traits\PaysServiceAwareTrait; diff --git a/module/Application/src/Form/Pays/PaysSaisieForm.php b/module/Application/src/Form/Pays/PaysSaisieForm.php index 3d50809cd2a0295718e2d396517503f51b309340..00c2324ec132ba505245d1dcc5fcb43bee1a8565 100644 --- a/module/Application/src/Form/Pays/PaysSaisieForm.php +++ b/module/Application/src/Form/Pays/PaysSaisieForm.php @@ -4,7 +4,7 @@ namespace Application\Form\Pays; use Application\Entity\Db\Pays; use Application\Form\AbstractForm; -use Application\Service\Traits\GroupeTypeFormationServiceAwareTrait; +use OffreFormation\Service\Traits\GroupeTypeFormationServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; diff --git a/module/Application/src/Form/PieceJointe/ModifierTypePieceJointeStatutForm.php b/module/Application/src/Form/PieceJointe/ModifierTypePieceJointeStatutForm.php index c9dd9655cb19210610fd0508f7357f86ff33f68f..3e319347c7d62325281f6af16a40bd3f682b330b 100755 --- a/module/Application/src/Form/PieceJointe/ModifierTypePieceJointeStatutForm.php +++ b/module/Application/src/Form/PieceJointe/ModifierTypePieceJointeStatutForm.php @@ -2,8 +2,8 @@ namespace Application\Form\PieceJointe; -use Application\Entity\Db\TypePieceJointeStatut; use Application\Form\AbstractForm; +use Application\Hydrator\TypePieceJointeStatutHydrator; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\TypePieceJointeStatutServiceAwareTrait; use Laminas\Form\Element\Csrf; @@ -64,6 +64,14 @@ class ModifierTypePieceJointeStatutForm extends AbstractForm 'type' => 'Checkbox', ]); + $this->add([ + 'name' => 'nationalite-etrangere', + 'options' => [ + 'label' => 'Uniquement en cas de nationalité étrangère', + ], + 'type' => 'Checkbox', + ]); + $this->add([ 'name' => 'fc', 'options' => [ @@ -103,7 +111,6 @@ class ModifierTypePieceJointeStatutForm extends AbstractForm } - /** * Should return an array specification compatible with * {@link Laminas\InputFilter\Factory::createInputFilter()}. @@ -150,60 +157,3 @@ class ModifierTypePieceJointeStatutForm extends AbstractForm } } - - - - - -class TypePieceJointeStatutHydrator implements HydratorInterface -{ - use AnneeServiceAwareTrait; - - - /** - * Hydrate $object with the provided $data. - * - * @param array $data - * @param \Application\Entity\Db\TypePieceJointeStatut $object - * - * @return object - */ - public function hydrate(array $data, $object) - { - - $object->setChangementRIB($data['changement-rib']); - $object->setObligatoire($data['obligatoire']); - $object->setSeuilHetd((empty($data['seuil-hetd']) ? 0 : $data['seuil-hetd'])); - $object->setTypeHeureHetd($data['type-heure-hetd']); - $object->setFC($data['fc']); - $object->setDureeVie($data['duree-vie']); - $object->setObligatoireHNP($data['obligatoire-hnp']); - - return $object; - } - - - - /** - * Extract values from an object - * - * @param \Application\Entity\Db\TypePieceJointeStatut $object - * - * @return array - */ - public function extract($object): array - { - $data = [ - 'id' => $object->getId(), - 'obligatoire' => $object->getObligatoire(), - 'seuil-hetd' => $object->getSeuilHetd(), - 'type-heure-hetd' => $object->getTypeHeureHetd(), - 'changement-rib' => $object->getChangementRIB(), - 'fc' => $object->getFc(), - 'duree-vie' => $object->getDureeVie(), - 'obligatoire-hnp' => $object->getObligatoireHNP(), - ]; - - return $data; - } -} \ No newline at end of file diff --git a/module/Application/src/Form/Tag/TagSaisieForm.php b/module/Application/src/Form/Tag/TagSaisieForm.php new file mode 100644 index 0000000000000000000000000000000000000000..64d6e8c934a35e9d38babf2a0b629fbb4ac18d36 --- /dev/null +++ b/module/Application/src/Form/Tag/TagSaisieForm.php @@ -0,0 +1,29 @@ +<?php + +namespace Application\Form\Tag; + +use Application\Entity\Db\Tag; +use Application\Form\AbstractForm; + +/** + * Description of TagSaisieForm + * + * @author Antony LE COURTES <antony.lecourtes at unicaen.fr> + */ +class TagSaisieForm extends AbstractForm +{ + + public function init() + { + $this->spec(Tag::class); + $this->build(); + + $this->get('libelleCourt')->setLabel('Libellé court'); + $this->get('libelleLong')->setLabel('Libellé long'); + + $this->addSecurity(); + $this->addSubmit(); + + return $this; + } +} \ No newline at end of file diff --git a/module/Application/src/Form/Tag/Traits/TagSaisieFormAwareTrait.php b/module/Application/src/Form/Tag/Traits/TagSaisieFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..a4b18d993f8d46b239f785bfb72d9e1dc186bebc --- /dev/null +++ b/module/Application/src/Form/Tag/Traits/TagSaisieFormAwareTrait.php @@ -0,0 +1,39 @@ +<?php + +namespace Application\Form\Tag\Traits; + +use Application\Entity\Db\Tag; +use Application\Form\Tag\TagSaisieForm; + +/** + * Description of TagSaisieFormAwareTrait + * + * @author Antony Le Courtes <antony.lecourtes at unicaen.fr> + */ +trait TagSaisieFormAwareTrait +{ + protected ?TagSaisieForm $formTagSaisie = null; + + + /** + * @param TagSaisieForm $formTagSaisie + * + * @return self + */ + public function setFormTagSaisie(?TagSaisieForm $formTagSaisie) + { + $this->formTagSaisie = $formTagSaisie; + + return $this; + } + + + public function getFormTagSaisie(): ?TagSaisieForm + { + if (!empty($this->formTagSaisie)) { + return $this->formTagSaisie; + } + + return \Application::$container->get('FormElementManager')->get(TagSaisieForm::class); + } +} \ No newline at end of file diff --git a/module/Application/src/Hydrator/Chargens/NoeudDiagrammeHydrator.php b/module/Application/src/Hydrator/Chargens/NoeudDiagrammeHydrator.php index e14eb2931abc0b450a16f1d21de86030a563a026..cf8b0247552612832f1b16b76451407e0a25e62a 100755 --- a/module/Application/src/Hydrator/Chargens/NoeudDiagrammeHydrator.php +++ b/module/Application/src/Hydrator/Chargens/NoeudDiagrammeHydrator.php @@ -2,11 +2,11 @@ namespace Application\Hydrator\Chargens; -use Application\Entity\Db\TypeHeures; -use Application\Entity\Db\TypeIntervention; +use Application\Entity\Chargens\Noeud; use Application\Provider\Chargens\ChargensProvider; use Laminas\Hydrator\HydratorInterface; -use Application\Entity\Chargens\Noeud; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\TypeIntervention; /** diff --git a/module/Application/src/Hydrator/GenericHydrator.php b/module/Application/src/Hydrator/GenericHydrator.php index ae0497543440a2f3686dcd28fd96434637a877d2..4fec2a7a0c27b42ed5b82021712f13c166ee443a 100644 --- a/module/Application/src/Hydrator/GenericHydrator.php +++ b/module/Application/src/Hydrator/GenericHydrator.php @@ -3,7 +3,10 @@ namespace Application\Hydrator; use Application\Constants; +use Application\Filter\DateTimeFromString; use Doctrine\ORM\EntityManager; +use Laminas\Form\Element\Date; +use Laminas\Form\Element\DateTimeLocal; use UnicaenApp\Service\EntityManagerAwareTrait; use Laminas\Hydrator\HydratorInterface; @@ -52,6 +55,9 @@ class GenericHydrator implements HydratorInterface public function extract($object): array { $data = []; + if (method_exists($object, 'getId')) { + $data['id'] = (string)$object->getId(); + } foreach ($this->elements as $name => $params) { if (!in_array($name, $this->noGenericParse)) { $type = isset($params['type']) ? $params['type'] : null; @@ -77,7 +83,7 @@ class GenericHydrator implements HydratorInterface } elseif (('bool' == $type || 'boolean' == $type) && is_bool($value)) { $value = booleanToString($value, '1', '0'); } elseif (\DateTime::class == $type && $value instanceof \DateTime) { - $value = $value->format(Constants::DATE_FORMAT); + $value = $value->format('Y-m-d'); } elseif (class_exists($type) && $value instanceof $type && method_exists($value, 'getId')) { $value = (string)$value->getId(); } @@ -115,10 +121,8 @@ class GenericHydrator implements HydratorInterface if (('bool' == $type || 'boolean' == $type)) { $value = stringToBoolean($value); } - if (\DateTime::class == $type) { - $value = \DateTime::createFromFormat(Constants::DATE_FORMAT, $value); - if ($value) $value->setTime(0, 0, 0); - if (!$value) $value = null; + if ('Date' == $type || 'DateTime' == $type || Date::class == $type || DateTimeLocal::class == $type || 'DateTimeLocal' == $type) { + $value = DateTimeFromString::run($value); } if (class_exists($type) && $this->isEntity($type) && $value) { $value = $this->getEntityManager()->find($type, $value); diff --git a/module/Application/src/Hydrator/TypePieceJointeStatutHydrator.php b/module/Application/src/Hydrator/TypePieceJointeStatutHydrator.php new file mode 100644 index 0000000000000000000000000000000000000000..9f52dd95ad937786bd7691068b1fbc8d9b7ee0a2 --- /dev/null +++ b/module/Application/src/Hydrator/TypePieceJointeStatutHydrator.php @@ -0,0 +1,62 @@ +<?php + +namespace Application\Hydrator; + +use Application\Entity\Db\TypePieceJointeStatut; +use Application\Service\Traits\AnneeServiceAwareTrait; +use Laminas\Hydrator\HydratorInterface; + +class TypePieceJointeStatutHydrator implements HydratorInterface +{ + use AnneeServiceAwareTrait; + + + /** + * + * Hydrate $object with the provided $data. + * + * @param array $data + * @param TypePieceJointeStatut $object + * + * @return object + */ + public function hydrate(array $data, $object) + { + + $object->setChangementRIB($data['changement-rib']); + $object->setNationaliteEtrangere($data['nationalite-etrangere']); + $object->setObligatoire($data['obligatoire']); + $object->setSeuilHetd((empty($data['seuil-hetd']) ? 0 : $data['seuil-hetd'])); + $object->setTypeHeureHetd($data['type-heure-hetd']); + $object->setFC($data['fc']); + $object->setDureeVie($data['duree-vie']); + $object->setObligatoireHNP($data['obligatoire-hnp']); + + return $object; + } + + + /** + * Extract values from an object + * + * @param TypePieceJointeStatut $object + * + * @return array + */ + public function extract($object): array + { + $data = [ + 'id' => $object->getId(), + 'obligatoire' => $object->getObligatoire(), + 'seuil-hetd' => $object->getSeuilHetd(), + 'type-heure-hetd' => $object->getTypeHeureHetd(), + 'changement-rib' => $object->getChangementRIB(), + 'nationalite-etrangere' => $object->isNationaliteEtrangere(), + 'fc' => $object->getFc(), + 'duree-vie' => $object->getDureeVie(), + 'obligatoire-hnp' => $object->getObligatoireHNP(), + ]; + + return $data; + } +} \ No newline at end of file diff --git a/module/Application/src/Interfaces/AxiosExtractor.php b/module/Application/src/Interfaces/AxiosExtractor.php new file mode 100644 index 0000000000000000000000000000000000000000..0c1488cf55e59d3b9fd1cc376c02f3910d82a7db --- /dev/null +++ b/module/Application/src/Interfaces/AxiosExtractor.php @@ -0,0 +1,14 @@ +<?php + +namespace Application\Interfaces; + + +interface AxiosExtractor +{ + + /** + * @return array + */ + public function axiosDefinition(): array; + +} \ No newline at end of file diff --git a/module/Application/src/Model/FormuleCalcul.php b/module/Application/src/Model/FormuleCalcul.php index b2d70db4819d5e35aa8d6e8269f97fda63855a42..e93bae7c3dbd9ac1eb8b722024a02a5d89239089 100644 --- a/module/Application/src/Model/FormuleCalcul.php +++ b/module/Application/src/Model/FormuleCalcul.php @@ -971,6 +971,7 @@ END FORMULE_" . $this->getName() . ";"; 'OR' => 'traductionFunctionOr', 'ISBLANK' => 'traductionFunctionIsBlank', 'SUMIF' => 'traductionFunctionSumIf', + 'MID' => 'traductionFunctionMid', ]; if (array_key_exists($term['name'], $functions)) { @@ -1143,9 +1144,9 @@ END FORMULE_" . $this->getName() . ";"; } } - var_dump($plage); - var_dump($critere); - var_dump($plageSomme); +// var_dump($plage); +// var_dump($critere); +// var_dump($plageSomme); $plsql = "val := 0;\n"; for ($c = 0; $c <= ($plage['colEnd'] - $plage['colBegin']); $c++) { @@ -1174,7 +1175,26 @@ END FORMULE_" . $this->getName() . ";"; $plsql .= 'RETURN ' . $this->traductionExpr($term['valExpr']); - echo '<pre>' . htmlentities($plsql) . '</pre>'; +// echo '<pre>' . htmlentities($plsql) . '</pre>'; + + return $plsql; + } + + + + private function traductionFunctionMid(array &$expr, int $i): string + { + $term = $expr[$i]; + $plsql = 'COALESCE(SUBSTR('; + + $plExprs = []; + foreach ($term['exprs'] as $e => $fExpr) { + $fExpr[] = null; + $plExprs[$e] = $this->traductionExpr($fExpr); + } + $plsql .= implode(', ', $plExprs); + + $plsql .= '),\' \')'; return $plsql; } diff --git a/module/Application/src/Processus/Intervenant/RechercheProcessus.php b/module/Application/src/Processus/Intervenant/RechercheProcessus.php index 8f5c8cdb7270c9c6b0257487dfc7b54e725520d7..82fa6339a48a67f7092d65de6c942660f9c3e687 100644 --- a/module/Application/src/Processus/Intervenant/RechercheProcessus.php +++ b/module/Application/src/Processus/Intervenant/RechercheProcessus.php @@ -18,8 +18,9 @@ class RechercheProcessus protected $showHisto = false; + /** - * @param string $critere + * @param string $critere * @param integer $limit * * @return array @@ -34,6 +35,7 @@ class RechercheProcessus } + /** * @return bool */ @@ -43,6 +45,7 @@ class RechercheProcessus } + /** * @param bool $showHisto * @@ -56,8 +59,9 @@ class RechercheProcessus } + /** - * @param string $critere + * @param string $critere * @param integer $limit * * @return array @@ -68,6 +72,7 @@ class RechercheProcessus } + private function sqlLocale(): string { $sql = " @@ -76,6 +81,8 @@ class RechercheProcessus i.code, i.code_rh, i.statut_id, + ti.code type_intervenant_code, + ti.libelle type_intervenant_libelle, i.nom_usuel, i.nom_patronymique, i.prenom, @@ -91,6 +98,7 @@ class RechercheProcessus LEFT JOIN structure s ON s.id = i.structure_id LEFT JOIN civilite c ON c.id = i.civilite_id LEFT JOIN statut si ON si.id = i.statut_id + LEFT JOIN type_intervenant ti ON ti.id = si.type_intervenant_id "; if (!$this->showHisto) { $sql .= "WHERE i.histo_destruction IS NULL"; @@ -100,6 +108,7 @@ class RechercheProcessus } + private function sqlSource(): string { return " @@ -107,6 +116,8 @@ class RechercheProcessus NULL id, i.code, i.statut_id, + ti.code type_intervenant_code, + ti.libelle type_intervenant_libelle, i.nom_usuel, i.nom_patronymique, i.prenom, @@ -122,10 +133,12 @@ class RechercheProcessus LEFT JOIN structure s ON s.id = i.structure_id LEFT JOIN civilite c ON c.id = i.civilite_id LEFT JOIN statut si ON si.id = i.statut_id + LEFT JOIN type_intervenant ti ON ti.id = si.type_intervenant_id "; } + protected function makeKey(array $data, string $key): string { $resKey = $key; @@ -137,13 +150,14 @@ class RechercheProcessus } + private function rechercheGenerique($critere, $limit = 50, string $key = ':CODE', $onlyLocale = false) { if (strlen($critere) < 2) return []; $anneeId = (int)$this->getServiceContext()->getAnnee()->getId(); - $critere = Util::reduce($critere); + $critere = Util::reduce($critere); $criteres = explode('_', $critere); $sqlSource = ''; @@ -151,14 +165,14 @@ class RechercheProcessus $sqlSource = ' UNION ALL ' . $this->sqlSource(); } - $sql = ' + $sql = ' WITH vrec AS ( ' . $this->sqlLocale() . ' ' . $sqlSource . ' ) SELECT * FROM vrec WHERE rownum <= ' . (int)$limit . ' AND annee_id = ' . $anneeId; - $sqlCri = ''; + $sqlCri = ''; $criCode = 0; foreach ($criteres as $c) { @@ -188,20 +202,24 @@ class RechercheProcessus $k = $this->makeKey($r, $key); if (!isset($intervenants[$k])) { $intervenants[$k] = [ - 'civilite' => $r['CIVILITE'], - 'nom' => $r['NOM_USUEL'], - 'prenom' => $r['PRENOM'], - 'date-naissance' => new \DateTime($r['DATE_NAISSANCE']), - 'structure' => $r['STRUCTURE'], - 'statut' => $r['STATUT'], - 'numero-personnel' => $r['CODE_RH'], - 'destruction' => $r['HISTO_DESTRUCTION'], + 'civilite' => $r['CIVILITE'], + 'nom' => $r['NOM_USUEL'], + 'prenom' => $r['PRENOM'], + 'date-naissance' => new \DateTime($r['DATE_NAISSANCE']), + 'structure' => $r['STRUCTURE'], + 'statut' => $r['STATUT'], + 'typeIntervenantCode' => $r['TYPE_INTERVENANT_CODE'], + 'typeIntervenantLibelle' => $r['TYPE_INTERVENANT_LIBELLE'], + 'numero-personnel' => $r['CODE_RH'], + 'destruction' => $r['HISTO_DESTRUCTION'], + 'code' => $r['CODE'], + ]; } else { if ($intervenants[$k]['destruction'] && !$r['HISTO_DESTRUCTION']) { $intervenants[$k]['destruction'] = null; } - + if ($intervenants[$k]['statut'] && !is_array($intervenants[$k]['statut'])) { $intervenants[$k]['statut'] = [$intervenants[$k]['statut']]; } diff --git a/module/Application/src/Provider/Chargens/ChargensProvider.php b/module/Application/src/Provider/Chargens/ChargensProvider.php index eac02db4dcf0abf01e9eefd887fac94da318aae1..a94fa93de340b9d97b9cc6e6bc0b25ff13e349cf 100755 --- a/module/Application/src/Provider/Chargens/ChargensProvider.php +++ b/module/Application/src/Provider/Chargens/ChargensProvider.php @@ -3,15 +3,15 @@ namespace Application\Provider\Chargens; use Application\Entity\Chargens\Noeud; -use Application\Entity\Db\Etape; use Application\Entity\Db\Scenario; use Application\Entity\Db\Structure; use Application\Entity\Db\Traits\StructureAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; -use Application\Service\Traits\TypeHeuresServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; use BjyAuthorize\Service\Authorize; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Service\Traits\TypeHeuresServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; use UnicaenApp\Service\EntityManagerAwareTrait; use UnicaenTbl\Service\Traits\TableauBordServiceAwareTrait; diff --git a/module/Application/src/Provider/Chargens/ChargensProviderFactory.php b/module/Application/src/Provider/Chargens/ChargensProviderFactory.php index 4ce58cfcf46b7b44e1b531362300f466be15c6c9..588b069bc4fd5cebc973d6b62d5c2e9448777c0f 100755 --- a/module/Application/src/Provider/Chargens/ChargensProviderFactory.php +++ b/module/Application/src/Provider/Chargens/ChargensProviderFactory.php @@ -2,7 +2,7 @@ namespace Application\Provider\Chargens; -use Application\Service\TypeHeuresService; +use OffreFormation\Service\TypeHeuresService; use Psr\Container\ContainerInterface; use Unicaen\Console\Console; use UnicaenTbl\Service\TableauBordService; diff --git a/module/Application/src/Provider/Chargens/ExportProvider.php b/module/Application/src/Provider/Chargens/ExportProvider.php index 1f2a55075fa6efe18c629e73ae89b24b86476b9b..8c9d174ceb43a0f1263c0b5179d00211ea82fa89 100644 --- a/module/Application/src/Provider/Chargens/ExportProvider.php +++ b/module/Application/src/Provider/Chargens/ExportProvider.php @@ -151,8 +151,8 @@ class ExportProvider protected function checkGoodCSV(array $data) { return - (isset($data[24]) && $data[24] === 'HETD') - && (isset($data[22]) && $data[22] === 'Groupes') + (isset($data[25]) && $data[25] === 'HETD') + && (isset($data[23]) && $data[23] === 'Groupes') && (isset($data[1]) && $data[1] === 'Composante porteuse (code)'); } diff --git a/module/Application/src/Provider/Chargens/NoeudProvider.php b/module/Application/src/Provider/Chargens/NoeudProvider.php index c502a99939767fd6ed31f5ddf7ed80089de3410c..ac682e580d7b65249e65b35faf4bd02b54b98286 100755 --- a/module/Application/src/Provider/Chargens/NoeudProvider.php +++ b/module/Application/src/Provider/Chargens/NoeudProvider.php @@ -3,10 +3,10 @@ namespace Application\Provider\Chargens; use Application\Entity\Chargens\Noeud; -use Application\Entity\Db\ElementPedagogique; use Application\Hydrator\Chargens\NoeudDbHydrator; use Application\Hydrator\Chargens\NoeudDiagrammeHydrator; use Application\Provider\Privilege\Privileges; +use OffreFormation\Entity\Db\ElementPedagogique; class NoeudProvider { diff --git a/module/Application/src/Provider/Chargens/ScenarioNoeudProvider.php b/module/Application/src/Provider/Chargens/ScenarioNoeudProvider.php index c14d95ab60a6969b6133c042b3d801b4e00b64a3..a59f227ea9625987c84f075851ca8afa1b7be8ba 100755 --- a/module/Application/src/Provider/Chargens/ScenarioNoeudProvider.php +++ b/module/Application/src/Provider/Chargens/ScenarioNoeudProvider.php @@ -6,13 +6,13 @@ use Application\Entity\Chargens\Noeud; use Application\Entity\Chargens\ScenarioNoeud; use Application\Entity\Chargens\ScenarioNoeudEffectif; use Application\Entity\Chargens\ScenarioNoeudSeuil; -use Application\Entity\Db\Etape; use Application\Entity\Db\Scenario; -use Application\Entity\Db\TypeHeures; -use Application\Entity\Db\TypeIntervention; use Application\Hydrator\Chargens\ScenarioNoeudDbHydrator; use Application\Hydrator\Chargens\ScenarioNoeudEffectifDbHydrator; use Application\Hydrator\Chargens\ScenarioNoeudSeuilDbHydrator; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\TypeIntervention; class ScenarioNoeudProvider { diff --git a/module/Application/src/Provider/Privilege/Privileges.php b/module/Application/src/Provider/Privilege/Privileges.php index 3f16f53e920e43364b04d58cd3a70f758c864386..08141064549aa513ca15c0373ce3a204c1df7c6d 100755 --- a/module/Application/src/Provider/Privilege/Privileges.php +++ b/module/Application/src/Provider/Privilege/Privileges.php @@ -58,8 +58,6 @@ class Privileges extends \UnicaenAuth\Provider\Privilege\Privileges { const CONTRAT_DEPOT_RETOUR_SIGNE = 'contrat-depot-retour-signe'; const CONTRAT_DEVALIDATION = 'contrat-devalidation'; const CONTRAT_ENVOI_EMAIL = 'contrat-envoi-email'; - const CONTRAT_MODELES_EDITION = 'contrat-modeles-edition'; - const CONTRAT_MODELES_VISUALISATION = 'contrat-modeles-visualisation'; const CONTRAT_PROJET_GENERATION = 'contrat-projet-generation'; const CONTRAT_SAISIE_DATE_RETOUR_SIGNE = 'contrat-saisie-date-retour-signe'; const CONTRAT_SUPPRESSION = 'contrat-suppression'; @@ -161,6 +159,18 @@ class Privileges extends \UnicaenAuth\Provider\Privilege\Privileges { const MISE_EN_PAIEMENT_MISE_EN_PAIEMENT = 'mise-en-paiement-mise-en-paiement'; const MISE_EN_PAIEMENT_VISUALISATION_GESTION = 'mise-en-paiement-visualisation-gestion'; const MISE_EN_PAIEMENT_VISUALISATION_INTERVENANT = 'mise-en-paiement-visualisation-intervenant'; + const MISSION_AUTOVALIDATION = 'mission-autovalidation'; + const MISSION_AUTOVALIDATION_REALISE = 'mission-autovalidation-realise'; + const MISSION_DEVALIDATION = 'mission-devalidation'; + const MISSION_DEVALIDATION_REALISE = 'mission-devalidation-realise'; + const MISSION_EDITION = 'mission-edition'; + const MISSION_EDITION_REALISE = 'mission-edition-realise'; + const MISSION_EDITION_TYPE = 'mission-edition-type'; + const MISSION_SUPPRESSION_TYPE = 'mission-suppression-type'; + const MISSION_VALIDATION = 'mission-validation'; + const MISSION_VALIDATION_REALISE = 'mission-validation-realise'; + const MISSION_VISUALISATION = 'mission-visualisation'; + const MISSION_VISUALISATION_TYPE = 'mission-visualisation-type'; const MODIF_SERVICE_DU_ASSOCIATION = 'modif-service-du-association'; const MODIF_SERVICE_DU_EDITION = 'modif-service-du-edition'; const MODIF_SERVICE_DU_EXPORT_CSV = 'modif-service-du-export-csv'; @@ -252,6 +262,13 @@ class Privileges extends \UnicaenAuth\Provider\Privilege\Privileges { const REFERENTIEL_SAISIE_TOUTES_COMPOSANTES = 'referentiel-saisie-toutes-composantes'; const STRUCTURES_ADMINISTRATION_EDITION = 'structures-administration-edition'; const STRUCTURES_ADMINISTRATION_VISUALISATION = 'structures-administration-visualisation'; + const TAG_ADMINISTRATION_EDITION = 'tag-administration-edition'; + const TAG_ADMINISTRATION_VISUALISATION = 'tag-administration-visualisation'; + const TAG_EDITION = 'tag-edition'; + const TAG_VISUALISATION = 'tag-visualisation'; + const TAUX_EDITION = 'taux-edition'; + const TAUX_SUPPRESSION = 'taux-suppression'; + const TAUX_VISUALISATION = 'taux-visualisation'; const TYPE_INTERVENTION_EDITION = 'type-intervention-edition'; const TYPE_INTERVENTION_VISUALISATION = 'type-intervention-visualisation'; const TYPE_RESSOURCE_EDITION = 'type-ressource-edition'; diff --git a/module/Application/src/Service/AnneeService.php b/module/Application/src/Service/AnneeService.php index d6aff268be4c1abf378b44138b162159bff6233d..c527c19eedf5c6585bf50a9a809e3ad6f3455744 100755 --- a/module/Application/src/Service/AnneeService.php +++ b/module/Application/src/Service/AnneeService.php @@ -86,6 +86,16 @@ class AnneeService extends AbstractEntityService + public function resetChoixAnnees(): self + { + $session = $this->getSessionContainer(); + $session->choixAnnees = null; + + return $this; + } + + + /** * Retourne la liste des ID des années sélectionnables */ diff --git a/module/Application/src/Service/CentreCoutService.php b/module/Application/src/Service/CentreCoutService.php index 74a3053d674e0346d7506c616b045b0b80fc23ba..008a5f1dd393a41f996719834b4d64774fb08e2b 100755 --- a/module/Application/src/Service/CentreCoutService.php +++ b/module/Application/src/Service/CentreCoutService.php @@ -3,9 +3,9 @@ namespace Application\Service; use Application\Entity\Db\CentreCout; -use Application\Entity\Db\TypeHeures; -use Application\Service\Traits\TypeHeuresServiceAwareTrait; use Doctrine\ORM\QueryBuilder; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Service\Traits\TypeHeuresServiceAwareTrait; /** @@ -53,7 +53,7 @@ class CentreCoutService extends AbstractEntityService */ public function finderByTypeHeures(TypeHeures $typeHeures, QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $this->join($this->getServiceTypeHeures(), $qb, 'typeHeures', false, $alias); $qb->andWhere($this->getServiceTypeHeures()->getAlias() . ' = :typeHeures'); @@ -112,7 +112,7 @@ class CentreCoutService extends AbstractEntityService */ public function getListeParent(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->where("$alias.parent is Null"); $qb->andWhere("$alias.histoDestruction is Null"); $this->orderBy($qb); diff --git a/module/Application/src/Service/EtatSortieService.php b/module/Application/src/Service/EtatSortieService.php index 9de56021fc5301b4ef6d49b20e39e9ec9d072648..41316fbfbacfbaa99c9164ec374212ed60659d76 100755 --- a/module/Application/src/Service/EtatSortieService.php +++ b/module/Application/src/Service/EtatSortieService.php @@ -28,7 +28,6 @@ class EtatSortieService extends AbstractEntityService private $config; - /** * retourne la classe des entités * @@ -41,7 +40,6 @@ class EtatSortieService extends AbstractEntityService } - /** * Retourne l'alias d'entité courante * @@ -53,7 +51,6 @@ class EtatSortieService extends AbstractEntityService } - /** * @param string $param * @@ -63,7 +60,7 @@ class EtatSortieService extends AbstractEntityService public function getByParametre(string $param): EtatSortie { $etatSortieId = $this->getServiceParametres()->get($param); - $etatSortie = $this->get($etatSortieId); + $etatSortie = $this->get($etatSortieId); if (!$etatSortie) { throw new \Exception('Etat de sortie "' . $param . '" non configuré dans les paramètres de OSE'); } @@ -72,11 +69,10 @@ class EtatSortieService extends AbstractEntityService } - /*** * @param EtatSortie $etatSortie - * @param array $filtres - * @param array $options + * @param array $filtres + * @param array $options * * @return Document * @throws \Exception @@ -100,8 +96,8 @@ class EtatSortieService extends AbstractEntityService } $entityManager = $this->getEntityManager(); - $data = $this->generateData($etatSortie, $filtres); - $role = $this->getServiceContext()->getSelectedIdentityRole(); // à fournir à l'évaluateur... + $data = $this->generateData($etatSortie, $filtres); + $role = $this->getServiceContext()->getSelectedIdentityRole(); // à fournir à l'évaluateur... if (trim($etatSortie->getPdfTraitement())) { $__PHP__CODE__TRAITEMENT__ = $etatSortie->getPdfTraitement(); @@ -111,7 +107,7 @@ class EtatSortieService extends AbstractEntityService return $data; }; - $data = $traitement(); + $data = $traitement(); } if (!$document->getPublisher()->isPublished()) $document->publish($data); @@ -119,11 +115,10 @@ class EtatSortieService extends AbstractEntityService } - /** * @param EtatSortie $etatSortie - * @param array $filtres - * @param array $options + * @param array $filtres + * @param array $options * * @return CsvModel * @throws \Exception @@ -133,15 +128,21 @@ class EtatSortieService extends AbstractEntityService $csv = new CsvModel(); //Uniquement dans le cas de la préliquidation siham if ($etatSortie->getCode() == 'preliquidation-siham') { - $periode = $options['periode']; - $annee = $options['annee']; - $this->setAnneePaie($filtres['ANNEE_ID'], $periode->getCode()); - $this->setMoisPaie($periode->getCode()); + $periode = (array_key_exists('periode', $options)) ? $options['periode'] : null; + $periodeCode = (array_key_exists('periode', $options)) ? $periode->getCode() : null; + $filtresAnnee = (array_key_exists('ANNEE_ID', $filtres)) ? $filtres['ANNEE_ID'] : null; + if ($filtresAnnee) { + $this->setAnneePaie($filtresAnnee, $periodeCode); + } + if ($periode) { + $this->setMoisPaie($periodeCode); + + } } $entityManager = $this->getEntityManager(); - $data = $this->generateData($etatSortie, $filtres); - $role = $this->getServiceContext()->getSelectedIdentityRole(); // à fournir à l'évaluateur... + $data = $this->generateData($etatSortie, $filtres); + $role = $this->getServiceContext()->getSelectedIdentityRole(); // à fournir à l'évaluateur... if (trim($etatSortie->getCsvTraitement())) { @@ -152,7 +153,7 @@ class EtatSortieService extends AbstractEntityService return $data; }; - $data = $traitement(); + $data = $traitement(); } if (!$csv->getFilename()) { @@ -162,7 +163,7 @@ class EtatSortieService extends AbstractEntityService $params = $etatSortie->getCsvParamsArray(); $blocs = $etatSortie->getBlocs(); - $bkey = null; + $bkey = null; foreach ($blocs as $bloc) { $bkey = $bloc['nom'] . '@' . $bloc['zone']; break; @@ -209,7 +210,6 @@ class EtatSortieService extends AbstractEntityService } - private function filterData(array $line, array $params): array { foreach ($line as $k => $v) { @@ -220,14 +220,14 @@ class EtatSortieService extends AbstractEntityService switch (strtolower($type)) { case 'float': $line[$k] = (float)$v; - break; + break; case 'date': $date = \DateTime::createFromFormat('Y-m-d H:i:s', $v); if ($date instanceof \DateTime) { - $format = isset($params[$k]['format']) ? $params[$k]['format'] : Constants::DATE_FORMAT; + $format = isset($params[$k]['format']) ? $params[$k]['format'] : Constants::DATE_FORMAT; $line[$k] = $date->format($format); } - break; + break; } } } @@ -236,7 +236,6 @@ class EtatSortieService extends AbstractEntityService } - private function generateData(EtatSortie $etatSortie, array $filtres) { if ($etatSortie->getCle()) return $this->generateDataWithCle($etatSortie, $filtres); @@ -254,7 +253,6 @@ class EtatSortieService extends AbstractEntityService } - private function generateDataWithCle(EtatSortie $etatSortie, array $filtres) { $cle = $etatSortie->getCle(); @@ -273,7 +271,7 @@ class EtatSortieService extends AbstractEntityService $blocs = $etatSortie->getBlocs(); foreach ($blocs as $bname => $boptions) { - $bdata = $this->connBlocFetch($boptions['requete'], $etatSortie->getRequete(), $cle, $filtres); + $bdata = $this->connBlocFetch($boptions['requete'], $etatSortie->getRequete(), $cle, $filtres); $blocKey = $boptions['nom'] . '@' . $boptions['zone']; foreach ($bdata as $d) { if (!array_key_exists($cle, $d)) { @@ -291,12 +289,11 @@ class EtatSortieService extends AbstractEntityService } - private function connFetch(string $sql, array $filtres) { $connection = $this->getEntityManager()->getConnection(); - $query = "SELECT q.* FROM ($sql) q WHERE 1=1"; + $query = "SELECT q.* FROM ($sql) q WHERE 1=1"; $queryFilters = $filtres; foreach ($filtres as $filtre => $values) { if (is_array($values)) { @@ -307,18 +304,18 @@ class EtatSortieService extends AbstractEntityService if ($index > 0) { $query .= ' OR '; } - $query .= "q.\"$filtre\" = :$filtre$index"; + $query .= "q.\"$filtre\" = :$filtre$index"; $queryFilters[$filtre . $index] = $val; $index++; } $query .= ")"; } else { if (false !== strpos($filtre, ' OR ')) { - $newFiltre = str_replace(' ', '_', $filtre); + $newFiltre = str_replace(' ', '_', $filtre); $queryFilters[$newFiltre] = $queryFilters[$filtre]; unset($queryFilters[$filtre]); $orFiltres = explode(" OR ", $filtre); - $orQuery = ''; + $orQuery = ''; foreach ($orFiltres as $orFiltre) { if ($orQuery) $orQuery .= ' OR '; $orQuery .= "q.\"$orFiltre\" = :$newFiltre"; @@ -334,12 +331,11 @@ class EtatSortieService extends AbstractEntityService } - private function connBlocFetch(string $sql, string $mainSql, string $cle, array $filtres) { $connection = $this->getEntityManager()->getConnection(); - $query = "SELECT q.* FROM ($sql) q JOIN ($mainSql) mq ON mq.\"$cle\" = q.\"$cle\" WHERE 1=1"; + $query = "SELECT q.* FROM ($sql) q JOIN ($mainSql) mq ON mq.\"$cle\" = q.\"$cle\" WHERE 1=1"; $queryFilters = $filtres; foreach ($filtres as $filtre => $values) { if (is_array($values)) { @@ -350,7 +346,7 @@ class EtatSortieService extends AbstractEntityService if ($index > 0) { $query .= ' OR '; } - $query .= "mq.\"$filtre\" = :$filtre$index"; + $query .= "mq.\"$filtre\" = :$filtre$index"; $queryFilters[$filtre . $index] = $val; $index++; } @@ -364,7 +360,6 @@ class EtatSortieService extends AbstractEntityService } - /** * @return array */ @@ -374,7 +369,6 @@ class EtatSortieService extends AbstractEntityService } - /** * @param array $config * @@ -388,10 +382,9 @@ class EtatSortieService extends AbstractEntityService } - public function setAnneePaie(string $annee, string $periode) { - $connection = $this->getEntityManager()->getConnection(); + $connection = $this->getEntityManager()->getConnection(); $anneeFormatted = $annee - 2000; //on ajouter +1 à l'année courante si on est sur une période après le mois de décembre if (!in_array($periode, ['P01', 'P02', 'P03', 'P04'])) { @@ -409,7 +402,6 @@ class EtatSortieService extends AbstractEntityService } - public function setMoisPaie($periode) { $connection = $this->getEntityManager()->getConnection(); diff --git a/module/Application/src/Service/FormuleResultatService.php b/module/Application/src/Service/FormuleResultatService.php index a153a4c599a53d4d2ec6b4d8a68f9043094fb247..1c93d8e630de21973857ef6e5409ef2cceae0be7 100755 --- a/module/Application/src/Service/FormuleResultatService.php +++ b/module/Application/src/Service/FormuleResultatService.php @@ -2,18 +2,18 @@ namespace Application\Service; -use Application\Entity\Db\ElementPedagogique; use Application\Entity\Db\Etablissement; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Structure; -use Service\Entity\Db\TypeVolumeHoraire; -use Referentiel\Service\ServiceReferentielServiceAwareTrait; -use Enseignement\Service\ServiceServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Referentiel\Service\VolumeHoraireReferentielServiceAwareTrait; +use Enseignement\Service\ServiceServiceAwareTrait; use Enseignement\Service\VolumeHoraireServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use Referentiel\Service\ServiceReferentielServiceAwareTrait; +use Referentiel\Service\VolumeHoraireReferentielServiceAwareTrait; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; /** * Description of FormuleResultat diff --git a/module/Application/src/Service/LocalContextService.php b/module/Application/src/Service/LocalContextService.php index cd98e640606b88fe30217f5145373fcf930eaeff..760c9256c550c1dde02adcded25cf06123fc6f00 100755 --- a/module/Application/src/Service/LocalContextService.php +++ b/module/Application/src/Service/LocalContextService.php @@ -2,18 +2,19 @@ namespace Application\Service; +use Application\Entity\Db\Intervenant; +use Application\Entity\Db\Structure; +use Application\Entity\NiveauEtape; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; -use Application\Service\Traits\NiveauEtapeServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; +use OffreFormation\Service\NiveauEtapeService; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; use UnicaenApp\Traits\SessionContainerTrait; -use Application\Entity\Db\Intervenant; -use Application\Entity\Db\Structure; -use Application\Entity\Db\Etape; -use Application\Entity\NiveauEtape; -use Application\Entity\Db\ElementPedagogique; /** @@ -198,11 +199,11 @@ class LocalContextService extends AbstractService /** * - * @param Etape $etape + * @param Etape|null $etape * * @return self */ - public function setEtape(Etape $etape = null) + public function setEtape(?Etape $etape = null) { $this->etape = $etape; $this->getSessionContainer()->etape = $etape ? $etape->getId() : null; diff --git a/module/Application/src/Service/MiseEnPaiementService.php b/module/Application/src/Service/MiseEnPaiementService.php index a55f80edfe8700ce9a57f1b1b1d69c50e7c1ef45..6fcd1f41f552e7751613ea90c8a8166866672daa 100755 --- a/module/Application/src/Service/MiseEnPaiementService.php +++ b/module/Application/src/Service/MiseEnPaiementService.php @@ -3,20 +3,20 @@ namespace Application\Service; use Application\Entity\Db\MiseEnPaiement; +use Application\Entity\Db\Periode; use Application\Entity\Db\ServiceAPayerInterface; -use Intervenant\Entity\Db\TypeIntervenant; -use Application\Entity\Paiement\MiseEnPaiementRecherche; use Application\Entity\Db\Structure; -use Application\Entity\Db\Periode; +use Application\Entity\Paiement\MiseEnPaiementRecherche; use Application\Service\Traits\CentreCoutServiceAwareTrait; -use Application\Service\Traits\DomaineFonctionnelServiceAwareTrait; use Application\Service\Traits\FormuleResultatServiceReferentielServiceAwareTrait; use Application\Service\Traits\FormuleResultatServiceServiceAwareTrait; use Application\Service\Traits\MiseEnPaiementIntervenantStructureServiceAwareTrait; -use Application\Service\Traits\TypeHeuresServiceAwareTrait; use Application\Util; -use RuntimeException; use Doctrine\ORM\QueryBuilder; +use Intervenant\Entity\Db\TypeIntervenant; +use OffreFormation\Service\Traits\DomaineFonctionnelServiceAwareTrait; +use OffreFormation\Service\Traits\TypeHeuresServiceAwareTrait; +use RuntimeException; /** * Description of MiseEnPaiement diff --git a/module/Application/src/Service/ModulateurService.php b/module/Application/src/Service/ModulateurService.php index 7b0db1113216c2004e63a32cbf95fb37b49eefce..28e3c72d9f237340e837a035ff507e7c6dcfcd62 100755 --- a/module/Application/src/Service/ModulateurService.php +++ b/module/Application/src/Service/ModulateurService.php @@ -3,10 +3,10 @@ namespace Application\Service; use Application\Entity\Db\Modulateur; -use Application\Entity\Db\ElementPedagogique; -use Application\Service\Traits\ElementModulateurServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Doctrine\ORM\QueryBuilder; +use OffreFormation\Service\Traits\ElementModulateurServiceAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; /** @@ -55,7 +55,7 @@ class ModulateurService extends AbstractEntityService public function finderByElementPedagogique(ElementPedagogique $element, QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $serviceElementModulateur = $this->getServiceElementModulateur(); @@ -80,7 +80,7 @@ class ModulateurService extends AbstractEntityService */ public function orderBy(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.libelle"); diff --git a/module/Application/src/Service/SeuilChargeService.php b/module/Application/src/Service/SeuilChargeService.php index 978d4dd895daa73e5c735be80f3af9a28282139a..73433c6e2234f32570955a92e7caa0fbea54e300 100755 --- a/module/Application/src/Service/SeuilChargeService.php +++ b/module/Application/src/Service/SeuilChargeService.php @@ -2,18 +2,18 @@ namespace Application\Service; -use Application\Entity\Db\GroupeTypeFormation; use Application\Entity\Db\Scenario; use Application\Entity\Db\SeuilCharge; use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeIntervention; use Application\Provider\Privilege\Privileges; -use Application\Service\Traits\GroupeTypeFormationServiceAwareTrait; -use Application\Service\Traits\ScenarioServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; +use Application\Service\Traits\ScenarioServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; use Doctrine\ORM\QueryBuilder; +use OffreFormation\Entity\Db\GroupeTypeFormation; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\GroupeTypeFormationServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; use UnicaenTbl\Service\Traits\TableauBordServiceAwareTrait; diff --git a/module/Application/src/Service/StructureService.php b/module/Application/src/Service/StructureService.php index 81fe7c51111c8d6004c3279d01b55a44e9ad43c1..06c43c57877a2a20631562f2f84137b034b54110 100755 --- a/module/Application/src/Service/StructureService.php +++ b/module/Application/src/Service/StructureService.php @@ -176,7 +176,7 @@ class StructureService extends AbstractEntityService public function finderByEnseignement(QueryBuilder $qb = null, $alias = null) { [$qb, $alias] = $this->initQuery($qb, $alias); - $qb->andWhere('(' . $alias . '.enseignement = 1 OR EXISTS (SELECT ep FROM Application\Entity\Db\ElementPedagogique ep WHERE ep.structure = ' . $alias . '))'); + $qb->andWhere('(' . $alias . '.enseignement = 1 OR EXISTS (SELECT ep FROM OffreFormation\Entity\Db\ElementPedagogique ep WHERE ep.structure = ' . $alias . '))'); return $qb; } diff --git a/module/Application/src/Service/TagService.php b/module/Application/src/Service/TagService.php new file mode 100755 index 0000000000000000000000000000000000000000..1510a41b5aea7f60911b95657f406a244230dd3f --- /dev/null +++ b/module/Application/src/Service/TagService.php @@ -0,0 +1,50 @@ +<?php + +namespace Application\Service; + +use Application\Entity\Db\Tag; +use Doctrine\ORM\QueryBuilder; + +/** + * Description of TagService + * + * @author Antony LE COURTES <antony.lecourtes at unicaen.fr> + */ +class TagService extends AbstractEntityService +{ + + /** + * retourne la classe des entités correcpondantes + * + * @return string + * @throws RuntimeException + */ + public function getEntityClass() + { + return Tag::class; + } + + /** + * Retourne l'alias d'entité courante + * + * @return string + */ + public function getAlias() + { + return 'tag'; + } + + /** + * Retourne la liste des tags + * + * @param QueryBuilder|null $queryBuilder + * @return Tag[] + */ + public function getList(QueryBuilder $qb = null, $alias = null) + { + list($qb, $alias) = $this->initQuery($qb, $alias); + $qb->andWhere("$alias.histoDestruction is Null"); + $qb->addOrderBy("$alias.libelleLong"); + return parent::getList($qb, $alias); + } +} \ No newline at end of file diff --git a/module/Application/src/Service/Traits/CentreCoutEpServiceAwareTrait.php b/module/Application/src/Service/Traits/CentreCoutEpServiceAwareTrait.php index aeafe9786e757476fba0148b907573a2a2695f6b..265b8b08e84c4087c2676baea54262ed18c8780e 100755 --- a/module/Application/src/Service/Traits/CentreCoutEpServiceAwareTrait.php +++ b/module/Application/src/Service/Traits/CentreCoutEpServiceAwareTrait.php @@ -2,7 +2,7 @@ namespace Application\Service\Traits; -use Application\Service\CentreCoutEpService; +use OffreFormation\Service\CentreCoutEpService; /** * Description of CentreCoutEpServiceAwareTrait diff --git a/module/Application/src/Service/Traits/TagServiceAwareTrait.php b/module/Application/src/Service/Traits/TagServiceAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..1a6b6a41a4b7cced95f6128ed09758abe0ef2fcc --- /dev/null +++ b/module/Application/src/Service/Traits/TagServiceAwareTrait.php @@ -0,0 +1,38 @@ +<?php + +namespace Application\Service\Traits; + +use Application\Service\TagService; + +/** + * Description of TagServiceAwareTrait + * + * @author UnicaenCode + */ +trait TagServiceAwareTrait +{ + protected ?TagService $serviceTag = null; + + + /** + * @param TagService $serviceTag + * + * @return self + */ + public function setServiceTag(?TagService $serviceTag) + { + $this->serviceTag = $serviceTag; + + return $this; + } + + + public function getServiceTag(): ?TagService + { + if (empty($this->serviceTag)) { + $this->serviceTag = \Application::$container->get(TagService::class); + } + + return $this->serviceTag; + } +} \ No newline at end of file diff --git a/module/Application/src/Service/TypeModulateurService.php b/module/Application/src/Service/TypeModulateurService.php index 61032631da520b99fd0e56f47b39fa97cc56033c..e7ddda6bee2601db8ff70581ada4b6ad5203e7eb 100755 --- a/module/Application/src/Service/TypeModulateurService.php +++ b/module/Application/src/Service/TypeModulateurService.php @@ -2,11 +2,10 @@ namespace Application\Service; -use Application\Entity\Db\TypeModulateur; use Application\Entity\Db\Structure; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\TypeModulateurStructure; +use Application\Entity\Db\TypeModulateur; use Doctrine\ORM\QueryBuilder; +use OffreFormation\Entity\Db\ElementPedagogique; /** @@ -62,7 +61,7 @@ class TypeModulateurService extends AbstractEntityService */ public function finderByStructure(Structure $structure, QueryBuilder $qb=null, $alias=null) { - list($qb,$alias) = $this->initQuery($qb, $alias); + [$qb,$alias] = $this->initQuery($qb, $alias); $pid = 'str'.uniqid(); $qb->andWhere(":$pid MEMBER OF $alias.structure")->setParameter($pid, $structure); @@ -80,7 +79,7 @@ class TypeModulateurService extends AbstractEntityService public function getByCode($code) { if(is_array($code)){ - list($qb,$alias) = $this->initQuery(); + [$qb,$alias] = $this->initQuery(); $qb->andWhere($alias.'.code IN (:'.$alias.'_code)')->setParameter($alias.'_code', $code); return $this->getList( $qb ); }elseif ($code){ @@ -100,7 +99,7 @@ class TypeModulateurService extends AbstractEntityService public function getById($id) { if(is_array($id)){ - list($qb,$alias) = $this->initQuery(); + [$qb,$alias] = $this->initQuery(); $qb->andWhere($alias.'.id IN (:'.$alias.'_id)')->setParameter($alias.'_id', $id); return $this->getList( $qb ); }elseif ($id){ @@ -119,7 +118,7 @@ class TypeModulateurService extends AbstractEntityService */ public function finderByElementPedagogique(ElementPedagogique $element, QueryBuilder $qb=null, $alias=null) { - list($qb,$alias) = $this->initQuery($qb, $alias); + [$qb,$alias] = $this->initQuery($qb, $alias); $pid = 'ep'.uniqid(); $qb->andWhere(":$pid MEMBER OF $alias.elementPedagogique")->setParameter($pid, $element); @@ -127,9 +126,9 @@ class TypeModulateurService extends AbstractEntityService return $qb; } - public function finderByEtape(\Application\Entity\Db\Etape $etape, QueryBuilder $qb=null, $alias=null ) + public function finderByEtape(\OffreFormation\Entity\Db\Etape $etape, QueryBuilder $qb=null, $alias=null ) { - list($qb,$alias) = $this->initQuery($qb, $alias); + [$qb,$alias] = $this->initQuery($qb, $alias); $pid = 'etp'.uniqid(); $qb->andWhere(":$pid MEMBER OF $alias.etape")->setParameter($pid, $etape); @@ -146,7 +145,7 @@ class TypeModulateurService extends AbstractEntityService */ public function getList( QueryBuilder $qb=null, $alias=null ) { - list($qb,$alias) = $this->initQuery($qb, $alias); + [$qb,$alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.libelle"); return parent::getList($qb, $alias); } diff --git a/module/Application/src/Service/TypeValidationService.php b/module/Application/src/Service/TypeValidationService.php index 9a10f3d9bc0be4306987f61b849e6e7119fd1094..decfdcaaa4022f1a1c389244d3534a7348b17b24 100755 --- a/module/Application/src/Service/TypeValidationService.php +++ b/module/Application/src/Service/TypeValidationService.php @@ -24,74 +24,110 @@ class TypeValidationService extends AbstractEntityService return TypeValidation::class; } + + /** * Retourne l'alias d'entité courante * * @return string */ - public function getAlias(){ + public function getAlias() + { return 'typev'; } + + /** * * @param string $code + * * @return TypeValidation */ - public function getByCode( $code ) + public function getByCode($code) { if (null == $code) return null; + return $this->getRepo()->findOneBy(['code' => $code]); } - public function getDonneesPerso() + public function getMission(): TypeValidation + { + return $this->getByCode(TypeValidation::CODE_MISSION); + } + + + + public function getMissionRealise(): TypeValidation + { + return $this->getByCode(TypeValidation::CODE_MISSION_REALISE); + } + + + + public function getDonneesPerso(): TypeValidation { return $this->getByCode(TypeValidation::CODE_DONNEES_PERSO); } - public function getEnseignement() + + + public function getEnseignement(): TypeValidation { return $this->getByCode(TypeValidation::CODE_ENSEIGNEMENT); } - public function getReferentiel() + + + public function getReferentiel(): TypeValidation { return $this->getByCode(TypeValidation::CODE_REFERENTIEL); } - public function getContrat() + + + public function getContrat(): TypeValidation { return $this->getByCode(TypeValidation::CODE_CONTRAT); } - public function getFichier() + + + public function getFichier(): TypeValidation { return $this->getByCode(TypeValidation::CODE_FICHIER); } - public function getPieceJointe() + + + public function getPieceJointe(): TypeValidation { return $this->getByCode(TypeValidation::CODE_PIECE_JOINTE); } - public function getClotureRealise() + + + public function getClotureRealise(): TypeValidation { return $this->getByCode(TypeValidation::CODE_CLOTURE_REALISE); } + /** * Retourne la liste des types de volumes horaires * * @param QueryBuilder|null $queryBuilder + * * @return TypeValidation[] */ - public function orderBy( QueryBuilder $qb=null, $alias=null ) + public function orderBy(QueryBuilder $qb = null, $alias = null) { - list($qb,$alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.libelle"); + return $qb; } diff --git a/module/Application/src/Service/ValidationService.php b/module/Application/src/Service/ValidationService.php index 633f3a3d5926f20f06c1cb4c670f7d05051b496a..3cdc20bfde1c371dbd4ed474f738d38c863cdb84 100755 --- a/module/Application/src/Service/ValidationService.php +++ b/module/Application/src/Service/ValidationService.php @@ -3,9 +3,7 @@ namespace Application\Service; use Application\Entity\Db\Contrat; -use Application\Entity\Db\Dossier; use Application\Entity\Db\Intervenant; -use Application\Entity\Db\IntervenantDossier; use Application\Entity\Db\MiseEnPaiement; use Application\Entity\Db\Structure; use Application\Entity\Db\TypeValidation; @@ -13,8 +11,12 @@ use Application\Entity\Db\Validation; use Application\Service\Traits\ContratServiceAwareTrait; use Application\Service\Traits\MiseEnPaiementServiceAwareTrait; use Application\Service\Traits\TypeValidationServiceAwareTrait; +use Dossier\Entity\Db\IntervenantDossier; +use Mission\Entity\Db\Mission; +use Mission\Entity\Db\VolumeHoraireMission; use RuntimeException; use Doctrine\ORM\QueryBuilder; +use Service\Entity\Db\TypeVolumeHoraire; use Service\Service\TypeVolumeHoraireServiceAwareTrait; @@ -55,15 +57,45 @@ class ValidationService extends AbstractEntityService - public function validerDossier(IntervenantDossier $intervenantDossier) + public function validerDossier(IntervenantDossier $intervenantDossier): Validation { - $typeDonneesPerso = $this->getServiceTypeValidation()->getByCode(TypeValidation::CODE_DONNEES_PERSO); - $validation = $this->newEntity(); + /** + * @var Intervenant $intervenant + */ + $intervenant = $intervenantDossier->getIntervenant(); $validation->setIntervenant($intervenantDossier->getIntervenant()); - $validation->setTypeValidation($typeDonneesPerso); - $validation->setStructure($intervenantDossier->getIntervenant()->getStructure()); + $validation->setTypeValidation($this->getServiceTypeValidation()->getDonneesPerso()); + $validation->setStructure($intervenant->getStructure()); + $this->save($validation); + + return $validation; + } + + + + public function validerMission(Mission $mission): Validation + { + $validation = $this->newEntity(); + $validation->setIntervenant($mission->getIntervenant()); + $validation->setTypeValidation($this->getServiceTypeValidation()->getMission()); + $validation->setStructure($mission->getStructure()); + $this->save($validation); + $mission->addValidation($validation); + + return $validation; + } + + + + public function validerVolumeHoraireMission(VolumeHoraireMission $volumeHoraireMission): Validation + { + $validation = $this->newEntity(); + $validation->setIntervenant($volumeHoraireMission->getMission()->getIntervenant()); + $validation->setTypeValidation($this->getServiceTypeValidation()->getMission()); + $validation->setStructure($volumeHoraireMission->getMission()->getStructure()); $this->save($validation); + $volumeHoraireMission->addValidation($validation); return $validation; } diff --git a/module/Application/src/Service/WorkflowService.php b/module/Application/src/Service/WorkflowService.php index 25272c3abc67d0db11d80902a54852202e8f7304..88799ac7ad5bcc37a7c0d8a92979053d7e7f1afe 100755 --- a/module/Application/src/Service/WorkflowService.php +++ b/module/Application/src/Service/WorkflowService.php @@ -349,6 +349,7 @@ class WorkflowService extends AbstractService 'paiement' => ['workflow'], 'piece_jointe' => ['workflow'], 'service' => ['workflow'], + 'mission' => ['workflow'], 'referentiel' => ['workflow'], 'validation_enseignement' => ['workflow'], 'validation_referentiel' => ['workflow'], diff --git a/module/Application/src/Traits/FormFieldsetTrait.php b/module/Application/src/Traits/FormFieldsetTrait.php index 6dfd3b5a652d06d83f9c92e8e62c16cb04e310d9..da9c2016def9e255234c96cc69d015422f73d6a0 100644 --- a/module/Application/src/Traits/FormFieldsetTrait.php +++ b/module/Application/src/Traits/FormFieldsetTrait.php @@ -12,6 +12,7 @@ use Laminas\Form\Element\Checkbox; use Laminas\Form\Element\Csrf; use Laminas\Form\Element\Number; use Laminas\Form\Element\Select; +use Laminas\Form\Element\Submit; use Laminas\Form\Element\Text; use Laminas\Form\Form; use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; @@ -464,11 +465,10 @@ trait FormFieldsetTrait break; case \DateTime::class: $spec = [ - 'type' => 'DateTime', + 'type' => 'Date', 'name' => $property, 'options' => [ 'label' => ucfirst($property), - 'format' => Constants::DATE_FORMAT, 'label_options' => [ 'disable_html_escape' => true, ], diff --git a/module/Application/src/View/Helper/Chargens/ChargensViewHelper.php b/module/Application/src/View/Helper/Chargens/ChargensViewHelper.php index 325aae9352c05049ae3f784d351630f9ea2a00c9..f634a20454ea9eee402409c995539197edb2d2b6 100755 --- a/module/Application/src/View/Helper/Chargens/ChargensViewHelper.php +++ b/module/Application/src/View/Helper/Chargens/ChargensViewHelper.php @@ -3,9 +3,9 @@ namespace Application\View\Helper\Chargens; use Application\Form\Chargens\FiltreForm; -use Application\Service\Traits\TypeHeuresServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; use Application\View\Helper\AbstractViewHelper; +use OffreFormation\Service\Traits\TypeHeuresServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; /** diff --git a/module/Application/src/View/Helper/Import/ElementPedagogiqueViewHelper.php b/module/Application/src/View/Helper/Import/ElementPedagogiqueViewHelper.php index d95c256b81b6e008ab127f9bcf3d6f94da304439..1301d70db89c35c11d376e2180b1b9d7dbf0fb78 100755 --- a/module/Application/src/View/Helper/Import/ElementPedagogiqueViewHelper.php +++ b/module/Application/src/View/Helper/Import/ElementPedagogiqueViewHelper.php @@ -1,6 +1,6 @@ <?php namespace Application\View\Helper\Import; -use Application\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\ElementPedagogique; use UnicaenImport\View\Helper\DifferentielLigne\DifferentielLigne; /** diff --git a/module/Application/src/View/Helper/Intervenant/FeuilleDeRouteViewHelper.php b/module/Application/src/View/Helper/Intervenant/FeuilleDeRouteViewHelper.php index d3ef43f32b69168b57420c89bdc92541f6ef1427..b05cc519682069f17090656f89c2e1212df168e3 100755 --- a/module/Application/src/View/Helper/Intervenant/FeuilleDeRouteViewHelper.php +++ b/module/Application/src/View/Helper/Intervenant/FeuilleDeRouteViewHelper.php @@ -65,7 +65,7 @@ class FeuilleDeRouteViewHelper extends AbstractViewHelper $tag = $this->getView()->tag(); /* @var $tag TagViewHelper */ - $res .= $tag('div', ['class' => 'feuille-de-route row']); + $res .= $tag('div', ['class' => 'feuille-de-route row no-intranavigation']); $res .= $tag('div', ['class' => 'col-md-9']); if (!empty($feuilleDeRoute)) { diff --git a/module/Application/src/View/Helper/Paiement/DemandeMiseEnPaiementViewHelper.php b/module/Application/src/View/Helper/Paiement/DemandeMiseEnPaiementViewHelper.php index 7fe781977c0d7cd3a84dc6cbc4d61324ec21e566..5df33f3a4b29654333c24c838f3dd56c3112016a 100755 --- a/module/Application/src/View/Helper/Paiement/DemandeMiseEnPaiementViewHelper.php +++ b/module/Application/src/View/Helper/Paiement/DemandeMiseEnPaiementViewHelper.php @@ -2,21 +2,21 @@ namespace Application\View\Helper\Paiement; +use Application\Entity\Db\DomaineFonctionnel; +use Application\Entity\Db\FormuleResultatService; +use Application\Entity\Db\FormuleResultatServiceReferentiel; +use Application\Entity\Db\MiseEnPaiement; +use Application\Entity\Db\ServiceAPayerInterface; use Application\Entity\Db\Structure; use Application\Entity\Db\TypeRessource; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DomaineFonctionnelServiceAwareTrait; -use Application\Service\Traits\TypeHeuresServiceAwareTrait; use Application\View\Helper\AbstractViewHelper; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Service\Traits\DomaineFonctionnelServiceAwareTrait; +use OffreFormation\Service\Traits\TypeHeuresServiceAwareTrait; use UnicaenApp\View\Helper\TagViewHelper; use UnicaenAuth\Guard\PrivilegeController; -use Application\Entity\Db\ServiceAPayerInterface; -use Application\Entity\Db\FormuleResultatService; -use Application\Entity\Db\FormuleResultatServiceReferentiel; -use Application\Entity\Db\TypeHeures; -use Application\Entity\Db\MiseEnPaiement; -use Application\Entity\Db\DomaineFonctionnel; /** * Description of DemandeMiseEnPaiementViewHelper diff --git a/module/Application/src/View/Helper/Paiement/TypeHeuresViewHelper.php b/module/Application/src/View/Helper/Paiement/TypeHeuresViewHelper.php index 83f6c1649db363453ec13e7ec2e66c1eebc1f8a8..909fbccdba32d47063c0eb4b0f6d5a628b9f9e4c 100755 --- a/module/Application/src/View/Helper/Paiement/TypeHeuresViewHelper.php +++ b/module/Application/src/View/Helper/Paiement/TypeHeuresViewHelper.php @@ -3,8 +3,8 @@ namespace Application\View\Helper\Paiement; use Laminas\View\Helper\AbstractHelper; -use Application\Entity\Db\TypeHeures; -use Application\Entity\Db\Traits\TypeHeuresAwareTrait; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\Traits\TypeHeuresAwareTrait; /** * Description of ElementPedagogique diff --git a/module/Application/src/View/Helper/UserCurrent.php b/module/Application/src/View/Helper/UserCurrent.php index b548b0628f17242501295783467f2bee172933c1..9b56ad38177e05eb4c8679345fc982d0972342da 100644 --- a/module/Application/src/View/Helper/UserCurrent.php +++ b/module/Application/src/View/Helper/UserCurrent.php @@ -43,7 +43,7 @@ class UserCurrent extends UserAbstract /* @var $userStatusHelper \UnicaenAuth\View\Helper\UserStatus */ $status = $userStatusHelper(false); $userProfileSelectable = true; - + $deconnexion =""; if ($this->getIdentity()) { if ($userProfileSelectable) { // DS : cas où aucun rôle n'est sélectionné, on affiche le rôle "user" @@ -56,13 +56,16 @@ class UserCurrent extends UserAbstract $userProfileHelper->setUserProfileSelectable($userProfileSelectable); $content = $userProfileHelper; + // - Lien de déconnexion. + /** @var \UnicaenAuth\View\Helper\UserConnection $userConnectionHelper */ + $userConnectionHelper = $this->getView()->plugin('userConnection'); + $deconnexion = "|".$userConnectionHelper->renderDisconnection(); } else { $status = "<span id=\"user-status-icon\" class=\"fa fa-user\"></span> Vous n'êtes pas connecté(e)"; $content = _("Aucun"); } $content = htmlspecialchars(preg_replace('/\r\n|\n|\r/', '', $content)); - $title = _("Utilisateur connecté à l'application"); $out = <<<EOS @@ -73,7 +76,7 @@ class UserCurrent extends UserAbstract data-bs-toggle="popover" data-bs-html="true" data-bs-content="$content" - href="#">$status<span class="caret"></span></a> + href="#">$status<span class="caret"><div class="text-center">$deconnexion</div></span></a> EOS; $out .= PHP_EOL; diff --git a/module/Application/src/View/Helper/UserProfileSelectRadioItem.php b/module/Application/src/View/Helper/UserProfileSelectRadioItem.php index d1711f4a1223c1d5369d2f292e7066d80081be37..5baf96cbdfca7cba3ebb819c9c083028fa43b4a9 100755 --- a/module/Application/src/View/Helper/UserProfileSelectRadioItem.php +++ b/module/Application/src/View/Helper/UserProfileSelectRadioItem.php @@ -40,24 +40,10 @@ class UserProfileSelectRadioItem extends UnicaenAuthViewHelper ->setValueOptions($this->getStructures()) ->setValue($this->getStructure() ? $this->getStructure()->getId() : null) ->setAttribute('class', $selectClass) + ->setAttribute('onchange', 'Util.userProfileStructureChange(this)') ->setAttribute('title', "Cliquez pour sélectionner la structure associée au profil $this->role"); $html .= ' ' . $this->getView()->formSelect($select); - - $html .= <<<EOS -<script> - $(function() { - $("select.$selectClass").tooltip({ delay: 500, placement: 'right' }).change(function() { - var roleInput = $(this).parent().find('input.user-profile-select-input'); - if (roleInput.attr("checked")) { - submitProfile(); - }else{ - roleInput.attr("checked", "checked"); - } - }); - }); -</script> -EOS; } return $html; diff --git a/module/Application/src/View/Helper/ViteViewHelper.php b/module/Application/src/View/Helper/ViteViewHelper.php new file mode 100755 index 0000000000000000000000000000000000000000..f4ac03047377e3a014e2028a0855a605c7da209b --- /dev/null +++ b/module/Application/src/View/Helper/ViteViewHelper.php @@ -0,0 +1,224 @@ +<?php + +namespace Application\View\Helper; + +use Laminas\View\Helper\AbstractHtmlElement; + + +/** + * Description of ViteViewHelper + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ViteViewHelper extends AbstractHtmlElement +{ + private $config = [ + 'host' => 'http://localhost:5133', + 'vueUrl' => '/vendor/vue.js', + ]; + + + + /** + * + * @return self|string + */ + public function __invoke(?string $entry = null) + { + if (!empty($entry)) { + return $this->vite($entry); + } + + return $this; + } + + + + /** + * Retourne le code HTML. + * + * @return string Code HTML + */ + public function __toString(): string + { + return $this->render(); + } + + + + /** + * + * + * @return string Code HTML + */ + public function render(): string + { + $r = ''; + + /* Complétez */ + + return $r; + } + + + + public function useNode(): bool + { + if (\AppConfig::inDev()) { + return \AppConfig::get('dev', 'hot-loading', true); + } else { + return false; + } + } + + + + public function getConfig(string $param) + { + return $this->config[$param] ?: null; + } + + + + public function setConfig(string $param, $value): self + { + $this->config[$param] = $value; + + return $this; + } + + + + public function head(): string + { + $h = ''; + if ($this->useNode()) { + $url = $this->getView()->basePath($this->getConfig('vueUrl')); + $h = '<script type="text/javascript" src="' . $url . '"></script>'; + } + $h .= $this->vite('main.js'); + + return $h; + } + + + + public function vite(string $entry): string + { + return "\n" . $this->jsTag($entry) + . "\n" . $this->jsPreloadImports($entry) + . "\n" . $this->cssTag($entry); + } + + + + public static function getInstance() + { + if (!self::$instance) { + self::$instance = new self; + } + + return self::$instance; + } + + + + protected function jsTag(string $entry): string + { + $url = $this->useNode() + ? $this->getConfig('host') . '/' . $entry + : $this->assetUrl($entry); + + if (!$url) { + return ''; + } + + return '<script type="module" crossorigin src="' . $url . '"></script>'; + } + + + + protected function jsPreloadImports(string $entry): string + { + if ($this->useNode()) { + return ''; + } + + $res = ''; + foreach ($this->importsUrls($entry) as $url) { + $res .= '<link rel="modulepreload" href="' . $url . '">'; + } + + return $res; + } + + + + protected function cssTag(string $entry): string + { + // not needed on dev, it's inject by Vite + if ($this->useNode()) { + return ''; + } + + $tags = ''; + foreach ($this->cssUrls($entry) as $url) { + $tags .= '<link rel="stylesheet" href="' . $url . '">'; + } + + return $tags; + } + + + + protected function getManifest(): array + { + $content = file_get_contents(getcwd() . '/public/dist/manifest.json'); + + return json_decode($content, true); + } + + + + protected function assetUrl(string $entry): string + { + $manifest = $this->getManifest(); + + return isset($manifest[$entry]) + ? $this->getView()->basePath('/dist/' . $manifest[$entry]['file']) + : ''; + } + + + + protected function importsUrls(string $entry): array + { + $urls = []; + $manifest = $this->getManifest(); + + if (!empty($manifest[$entry]['imports'])) { + foreach ($manifest[$entry]['imports'] as $imports) { + $urls[] = $this->getView()->basePath('/dist/' . $manifest[$imports]['file']); + } + } + + return $urls; + } + + + + protected function cssUrls(string $entry): array + { + $urls = []; + $manifest = $this->getManifest(); + + if (!empty($manifest[$entry]['css'])) { + foreach ($manifest[$entry]['css'] as $file) { + $urls[] = $this->getView()->basePath('/dist/' . $file); + } + } + + return $urls; + } + +} \ No newline at end of file diff --git a/module/Application/src/View/Helper/VueViewHelper.php b/module/Application/src/View/Helper/VueViewHelper.php new file mode 100755 index 0000000000000000000000000000000000000000..cd736bd10087bac3582cc18987036e8f7237688e --- /dev/null +++ b/module/Application/src/View/Helper/VueViewHelper.php @@ -0,0 +1,102 @@ +<?php + +namespace Application\View\Helper; + +use Laminas\View\Helper\AbstractHtmlElement; + + +/** + * Description of ViteViewHelper + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class VueViewHelper extends AbstractHtmlElement +{ + protected bool $inVue = false; + + + + /** + * + * @return self|string + */ + public function __invoke(string $name = null, array $props = []) + { + if (!empty($name)) { + $h = $this->begin(); + $h .= $this->component($name, $props); + $h .= $this->end(); + + return $h; + } + + return $this; + } + + + + /** + * Démarre une nouvelle zone de Vue + * + * @return string + */ + public function begin(): string + { + $this->inVue = true; + + return $this->getView()->tag("div", ['class' => 'vue-app']); + } + + + + /** + * Termine une zone de Vue + * + * @return string + */ + public function end(): string + { + $this->inVue = false; + + return "</div>"; + } + + + + /** + * Ajoute un composant Vue.JS à l'intérieur d'une zone de Vue. + * + * @param string $name + * @param array $props + * + * @return string + */ + public function component(string $name, array $props): string + { + if (!$this->inVue) { + return '<div class="alert alert-danger"><strong>Attention</strong> : votre composant doit être positionné à l\'intérieur' . + 'd\'une zone dédiée à Vue.js. Veuillez utiliser $this->begin(); avant et $this->end(); après.</div>'; + } + $name = str_replace('/', '-', $name); + + $attrs = []; + foreach ($props as $pn => $pv) { + $pt = getType($pv); + switch ($pt) { + case 'boolean': + $pv = $pv ? 'true' : 'false'; + break; + case 'array': + $pv = json_encode($pv); + default: + $pv = (string)$pv; + } + + $attrs[':' . strtolower(preg_replace('/(?<!^)[A-Z]/', '-$0', $pn))] = $pv; + } + + $res = $this->getView()->tag($name, $attrs)->html(''); + + return $res; + } +} \ No newline at end of file diff --git a/module/Application/src/View/Renderer/PhpRenderer.php b/module/Application/src/View/Renderer/PhpRenderer.php index 56f38584191919e9ee54db9286270d3b02b82dfb..e9b2eef0a9bc7c1cc951acfc6bad5127f2234e6f 100755 --- a/module/Application/src/View/Renderer/PhpRenderer.php +++ b/module/Application/src/View/Renderer/PhpRenderer.php @@ -10,7 +10,6 @@ namespace Application\View\Renderer; * * @method \Application\Form\View\Helper\FormSearchAndSelect formSearchAndSelect(?Laminas\Form\ElementInterface $element = null) * @method \Application\View\Helper\AgrementViewHelper agrement(?\Application\Entity\Db\Agrement $agrement = null, ?\Application\Entity\Db\TblAgrement $tblAgrement = null) - * @method \Application\View\Helper\AppLink appLink($title = null, $subtitle = null) * @method \Application\View\Helper\CartridgeViewHelper cartridge(array $items, array $options = []) * @method \Application\View\Helper\Chargens\ChargensViewHelper chargens() * @method \Application\View\Helper\EtablissementViewHelper etablissement(?\Application\Entity\Db\Etablissement $etablissement = null) @@ -19,34 +18,21 @@ namespace Application\View\Renderer; * @method \Application\View\Helper\Intervenant\FeuilleDeRouteViewHelper feuilleDeRoute(?\Application\Entity\Db\Intervenant $intervenant = null) * @method \Application\View\Helper\Intervenant\IntervenantViewHelper intervenant(?\Application\Entity\Db\Intervenant $intervenant = null) * @method \Application\View\Helper\Intervenant\TotauxHetdViewHelper formuleTotauxHetd(\Application\Entity\Db\FormuleResultat $formuleResultat) - * @method \Application\View\Helper\OffreFormation\ElementCentreCoutFieldsetViewHelper elementCentreCoutFieldset(?\Application\Form\OffreFormation\EtapeCentreCout\ElementCentreCoutFieldset $fieldset = null) - * @method \Application\View\Helper\OffreFormation\ElementModulateursSaisieFieldset elementModulateursSaisieFieldset(?\Application\Form\OffreFormation\ElementModulateursFieldset $fieldset = null) - * @method \Application\View\Helper\OffreFormation\ElementPedagogiqueViewHelper elementPedagogique(?\Application\Entity\Db\ElementPedagogique $elementPedagogique = null) - * @method \Application\View\Helper\OffreFormation\ElementTauxMixiteFieldsetViewHelper elementTauxMixiteFieldset(?\Application\Form\OffreFormation\TauxMixite\TauxMixiteFieldset $fieldset = null) - * @method \Application\View\Helper\OffreFormation\EtapeCentreCoutFormViewHelper etapeCentreCoutForm(?\Application\Form\OffreFormation\EtapeCentreCout\EtapeCentreCoutForm $form = null) - * @method \Application\View\Helper\OffreFormation\EtapeModulateursSaisieForm etapeModulateursSaisieForm(?\Application\Form\OffreFormation\EtapeModulateursSaisie $form = null) - * @method \Application\View\Helper\OffreFormation\EtapeTauxMixiteFormViewHelper etapeTauxMixiteForm(?\Application\Form\OffreFormation\TauxMixite\TauxMixiteForm $form = null) - * @method \Application\View\Helper\OffreFormation\EtapeViewHelper etape(?\Application\Entity\Db\Etape $etape = null) - * @method \Application\View\Helper\OffreFormation\FieldsetElementPedagogiqueRecherche fieldsetElementPedagogiqueRecherche(?\Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset $fieldset = null) * @method \Application\View\Helper\Paiement\DemandeMiseEnPaiementViewHelper demandeMiseEnPaiement(array $servicesAPayer, $changeIndex = null) - * @method \Application\View\Helper\Paiement\TypeHeuresViewHelper typeHeures(?\Application\Entity\Db\TypeHeures $typeHeures = null) - * @method \Application\View\Helper\ServiceReferentiel\FonctionReferentielViewHelper fonctionReferentiel(?\Referentiel\Entity\Db\FonctionReferentiel $fonctionReferentiel = null) - * @method \Application\View\Helper\ServiceReferentiel\FormSaisieViewHelper formServiceReferentielSaisie(?\Referentiel\Form\Saisie $form = null) - * @method \Application\View\Helper\ServiceReferentiel\LigneViewHelper serviceReferentielLigne(\Application\View\Helper\ServiceReferentiel\ListeViewHelper $liste, \Referentiel\Entity\Db\ServiceReferentiel $service) - * @method \Application\View\Helper\ServiceReferentiel\ListeViewHelper serviceReferentielListe($services) - * @method \Application\View\Helper\Service\ResumeViewHelper serviceResume($resumeServices) - * @method \Application\View\Helper\Service\SaisieForm serviceSaisieForm(?\Application\Form\Service\Saisie $form = null) + * @method \Application\View\Helper\Paiement\TypeHeuresViewHelper typeHeures(?\OffreFormation\Entity\Db\TypeHeures $typeHeures = null) * @method \Application\View\Helper\StructureViewHelper structure(?\Application\Entity\Db\Structure $structure = null) * @method \Application\View\Helper\TreeViewHelper tree(\Application\Model\TreeNode $tree, array $attributes = []) - * @method \Application\View\Helper\TypeInterventionAdminViewHelper typeInterventionAdmin(\Application\Entity\Db\TypeIntervention $typeIntervention) + * @method \OffreFormation\View\Helper\TypeInterventionAdminViewHelper typeInterventionAdmin(\OffreFormation\Entity\Db\TypeIntervention $typeIntervention) * @method \Application\View\Helper\UserCurrent userCurrent($affectationFineSiDispo = false) - * @method \Application\View\Helper\UserProfileSelectRadioItem userProfileSelectRadioItem(Laminas\Permissions\Acl\Role\RoleInterface $role, $selected = false) * @method string utilisateur(\Application\Entity\Db\Utilisateur $utilisateur, $title = null, $subject = null, $body = null) * @method \Application\View\Helper\ValidationViewHelper validation(?\Application\Entity\Db\Validation $validation = null) - * @method \Application\View\Helper\VolumeHoraire\Liste volumeHoraireListe(\Enseignement\Entity\VolumeHoraireListe $volumeHoraireListe) - * @method \Application\View\Helper\VolumeHoraire\ListeCalendaire volumeHoraireListeCalendaire(\Enseignement\Entity\VolumeHoraireListe $volumeHoraireListe) - * @method \Enseignement\View\Helper\EnseignementsViewHelper enseignements($services) + * @method \Application\View\Helper\ViteViewHelper vite(?string $entry = null) + * @method \Application\View\Helper\VueViewHelper vue(?string $name = null, array $props = []) + * @method \Enseignement\View\Helper\EnseignementSaisieFormViewHelper enseignementSaisieForm(?\Enseignement\Form\EnseignementSaisieForm $form = null) + * @method \Enseignement\View\Helper\EnseignementsViewHelper enseignements(\Service\Entity\Db\TypeVolumeHoraire $typeVolumeHoraire, ?\Application\Entity\Db\Intervenant $intervenant, array $services) * @method \Enseignement\View\Helper\LigneEnseignementViewHelper ligneEnseignement(\Enseignement\View\Helper\EnseignementsViewHelper $enseignements, \Enseignement\Entity\Db\Service $service) + * @method \Enseignement\View\Helper\VolumeHoraire\ListeCalendaireViewHelper volumeHoraireListeCalendaire(\Enseignement\Entity\VolumeHoraireListe $volumeHoraireListe) + * @method \Enseignement\View\Helper\VolumeHoraire\ListeViewHelper volumeHoraireListe(\Enseignement\Entity\VolumeHoraireListe $volumeHoraireListe) * @method \Laminas\Form\View\Helper\Captcha\Dumb captchaDumb(?Laminas\Form\ElementInterface $element = null) * @method \Laminas\Form\View\Helper\Captcha\Dumb formCaptchaDumb(?Laminas\Form\ElementInterface $element = null) * @method \Laminas\Form\View\Helper\Captcha\Figlet captchaFiglet(?Laminas\Form\ElementInterface $element = null) @@ -67,7 +53,7 @@ namespace Application\View\Renderer; * @method \Laminas\Form\View\Helper\FormDateSelect formDateSelect(?Laminas\Form\ElementInterface $element = null, int $dateType = 1, ?string $locale = null) * @method \Laminas\Form\View\Helper\FormDateTimeLocal formDateTimeLocal(?Laminas\Form\ElementInterface $element = null) * @method \Laminas\Form\View\Helper\FormDateTimeSelect formDateTimeSelect(?Laminas\Form\ElementInterface $element = null, int $dateType = 1, int $timeType = 1, ?string $locale = null) - * @method \Laminas\Form\View\Helper\FormElement formElement(?\Laminas\Form\ElementInterface $element = null) + * @method \Laminas\Form\View\Helper\FormElement formElement(?Laminas\Form\ElementInterface $element = null) * @method \Laminas\Form\View\Helper\FormElementErrors formElementErrors(?Laminas\Form\ElementInterface $element = null, array $attributes = []) * @method \Laminas\Form\View\Helper\FormEmail formEmail(?Laminas\Form\ElementInterface $element = null) * @method \Laminas\Form\View\Helper\FormFile formFile(?Laminas\Form\ElementInterface $element = null) @@ -125,6 +111,7 @@ namespace Application\View\Renderer; * @method \Laminas\View\Helper\EscapeUrl zendviewhelperescapeurl($value, $recurse = 0) * @method \Laminas\View\Helper\Gravatar gravatar($email = '', $options = [], $attributes = []) * @method \Laminas\View\Helper\Gravatar zendviewhelpergravatar($email = '', $options = [], $attributes = []) + * @method \Laminas\View\Helper\GravatarImage gravatarImage(string $emailAddress, int $imageSize = 80, array $imageAttributes = [], string $defaultImage = 'mp', string $rating = 'g') * @method \Laminas\View\Helper\HeadLink headLink(?array $attributes = null, $placement = 'APPEND') * @method \Laminas\View\Helper\HeadLink zendviewhelperheadlink(?array $attributes = null, $placement = 'APPEND') * @method \Laminas\View\Helper\HeadMeta headMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = [], $placement = 'APPEND') @@ -138,8 +125,8 @@ namespace Application\View\Renderer; * @method \Laminas\View\Helper\HtmlAttributes htmlAttributes(iterable $attributes = []) * @method string htmlFlash($data, array $attribs = [], array $params = [], $content = null) * @method string zendviewhelperhtmlflash($data, array $attribs = [], array $params = [], $content = null) - * @method \Laminas\View\Helper\HtmlList htmlList(array $items, $ordered = false, $attribs = false, $escape = true) - * @method \Laminas\View\Helper\HtmlList zendviewhelperhtmllist(array $items, $ordered = false, $attribs = false, $escape = true) + * @method \Laminas\View\Helper\HtmlList htmlList(array $items, $ordered = false, $attribs = null, $escape = true) + * @method \Laminas\View\Helper\HtmlList zendviewhelperhtmllist(array $items, $ordered = false, $attribs = null, $escape = true) * @method string htmlObject($data = null, $type = null, array $attribs = [], array $params = [], $content = null) * @method string zendviewhelperhtmlobject($data = null, $type = null, array $attribs = [], array $params = [], $content = null) * @method string htmlPage($data, array $attribs = [], array $params = [], $content = null) @@ -175,15 +162,22 @@ namespace Application\View\Renderer; * @method \Laminas\View\Helper\ViewModel viewModel() * @method \Laminas\View\Helper\ViewModel zendviewhelperviewmodel() * @method \Plafond\View\Helper\PlafondConfigElementViewHelper plafondConfig(?Plafond\Interfaces\PlafondConfigInterface $plafondConfig = null) - * @method \Plafond\View\Helper\PlafondsViewHelper plafonds(\Application\Entity\Db\Structure|\Application\Entity\Db\Intervenant|\Application\Entity\Db\ElementPedagogique|\Enseignement\Entity\Db\VolumeHoraire|\Referentiel\Entity\Db\FonctionReferentiel $entity, \Service\Entity\Db\TypeVolumeHoraire $typeVolumeHoraire) + * @method \Plafond\View\Helper\PlafondsViewHelper plafonds(\Application\Entity\Db\Structure|\Application\Entity\Db\Intervenant|\OffreFormation\Entity\Db\ElementPedagogique|\Enseignement\Entity\Db\VolumeHoraire|\Referentiel\Entity\Db\FonctionReferentiel $entity, \Service\Entity\Db\TypeVolumeHoraire $typeVolumeHoraire) + * @method \Referentiel\View\Helper\FonctionReferentielViewHelper fonctionReferentiel(?\Referentiel\Entity\Db\FonctionReferentiel $fonctionReferentiel = null) + * @method \Referentiel\View\Helper\FormSaisieViewHelper formServiceReferentielSaisie(?\Referentiel\Form\Saisie $form = null) + * @method \Referentiel\View\Helper\LigneViewHelper serviceReferentielLigne(\Referentiel\View\Helper\ReferentielsViewHelper $liste, \Referentiel\Entity\Db\ServiceReferentiel $service) + * @method \Referentiel\View\Helper\ReferentielsViewHelper referentiels(\Service\Entity\Db\TypeVolumeHoraire $typeVolumeHoraire, ?\Application\Entity\Db\Intervenant $intervenant, array $referentiels) + * @method \Service\View\Helper\HorodatageViewHelper horodatage(\Service\Entity\Db\TypeVolumeHoraire $typeVolumeHoraire, \Application\Entity\Db\Intervenant $intervenant, bool $referentiel = false) + * @method \Service\View\Helper\ResumeViewHelper serviceResume($resumeServices) * @method \UnicaenApp\Form\View\Helper\FormAdvancedMultiCheckbox formAdvancedMultiCheckbox(?Laminas\Form\ElementInterface $element = null, ?string $labelPosition = null) - * @method \UnicaenApp\Form\View\Helper\FormControlGroup formControlGroup(?Laminas\Form\ElementInterface $element = null, $pluginClass = 'formElement') + * @method \UnicaenApp\Form\View\Helper\FormControlGroup formControlGroup(?Laminas\Form\ElementInterface $element = null, $pluginClass = null) * @method \UnicaenApp\Form\View\Helper\FormDate formDate(?\UnicaenApp\Form\Element\Date $element = null, $dateReadonly = false) * @method \UnicaenApp\Form\View\Helper\FormDateInfSup formDateInfSup(?\UnicaenApp\Form\Element\DateInfSup $element = null, $dateInfReadonly = false, $dateSupReadonly = false) * @method \UnicaenApp\Form\View\Helper\FormDateTime formDateTime(?Laminas\Form\ElementInterface $element = null) * @method \UnicaenApp\Form\View\Helper\FormErrors formErrors(?\Laminas\Form\Form $form = null, $message = null) * @method \UnicaenApp\Form\View\Helper\FormLdapPeople formLdapPeople(?Laminas\Form\ElementInterface $element = null) * @method \UnicaenApp\Form\View\Helper\FormRowDateInfSup formRowDateInfSup(?Laminas\Form\ElementInterface $element = null, ?string $labelPosition = null, ?bool $renderErrors = null, ?string $partial = null) + * @method \UnicaenApp\Form\View\Helper\FormSearchAndSelect2 formSearchAndSelect2(?Laminas\Form\ElementInterface $element = null) * @method \UnicaenApp\Form\View\Helper\MultipageFormFieldset multipageFormFieldset(?\Laminas\Form\Fieldset $fieldset = null) * @method \UnicaenApp\Form\View\Helper\MultipageFormNav multipageFormNav(?\UnicaenApp\Form\Fieldset\MultipageFormNavFieldset $fieldset = null) * @method \UnicaenApp\Form\View\Helper\MultipageFormRecap multipageFormRecap(?\UnicaenApp\Form\MultipageForm $form = null) @@ -213,13 +207,13 @@ namespace Application\View\Renderer; * @method \UnicaenAuth\View\Helper\UserProfile userProfile($userProfileSelectable = false) * @method \UnicaenAuth\View\Helper\UserProfileSelect userProfileSelect() * @method \UnicaenAuth\View\Helper\UserStatus userStatus($displayConnectionLink = true) - * @method \UnicaenAuth\View\Helper\UserUsurpationHelper userUsurpation() * @method \UnicaenImport\View\Helper\DifferentielLigne\DifferentielLigne differentielLigne(\UnicaenImport\Entity\Differentiel\Ligne $ligne) * @method \UnicaenImport\View\Helper\DifferentielListe differentielListe($lignes) * * @author UnicaenCode */ -class PhpRenderer extends \Laminas\View\Renderer\PhpRenderer -{ +class PhpRenderer extends \Laminas\View\Renderer\PhpRenderer { + + } \ No newline at end of file diff --git a/module/Application/src/functions.php b/module/Application/src/functions.php index 88166fb2b7a660b2c599b52ffe80a45931807d50..10a2e93def79d1369fb324995b3b932db106786e 100755 --- a/module/Application/src/functions.php +++ b/module/Application/src/functions.php @@ -99,6 +99,37 @@ function validiteIntervalle($anneeDebut, $anneeFin): string } +/** + * Pour intégrer dans une requête DQL, permet de créer des conditions AND dans une clause WHERE, en fonction des paramètres donnés + * Filters permet de préciser, en fonction du nom du paramètre, quelle propriété de la requête tester. + * exemple : + * $filters = ['intervenant' => 'm.intervenant']; + * Ce qui donnera : AND m.intervenant = :intervenant si et seulement si intervenant est transmis comme paramètre + * + * $parameters est le tableau qui contient les paramètres à transmettre au QueryBuilder. + * + * @param array $filters + * @param array $parameters + * + * @return string + */ +function dqlAndWhere(array $filters, array $parameters): string +{ + $dqlFilters = ''; + foreach ($parameters as $name => $value) { + if (array_key_exists($name, $filters)) { + if ($value === null) { + $dqlFilters .= "\nAND " . $filters[$name] . ' IS NULL'; + } else { + $dqlFilters .= "\nAND " . $filters[$name] . ' = :' . $name; + } + } + } + + return $dqlFilters; +} + + function vhlDump(\Enseignement\Entity\VolumeHoraireListe $volumeHoraireListe): \OSETest\VolumeHoraireListeTest { include_once getcwd() . '/tests/OSETest/VolumeHoraireListeTest.php'; diff --git a/module/Application/view/application/centre-cout/index.phtml b/module/Application/view/application/centre-cout/index.phtml index c0b90d52530faa90f54016650e006836e90e05ef..8d8a4e4f17643b22f87c2463581a36ffc471479e 100644 --- a/module/Application/view/application/centre-cout/index.phtml +++ b/module/Application/view/application/centre-cout/index.phtml @@ -193,9 +193,9 @@ while ($i < $nTblListe) { </tbody> </table> <?php if ($canEdit): ?> - <a class="btn btn-primary class=" mod-ajax" data-submit-reload="true" - href="<?= $this->url('centre-cout/saisie') ?>" - title="Ajouter un Centre de Coûts"> - <i class="fas fa-pen-to-square"></i> - Ajouter un centre de coûts</a> + <a class="btn btn-primary mod-ajax" data-submit-reload="true" + href="<?= $this->url('centre-cout/saisie') ?>" + title="Ajouter un Centre de Coûts"> + <i class="fas fa-pen-to-square"></i> + Ajouter un centre de coûts</a> <?php endif ?> diff --git a/module/Application/view/application/chargens/differentiel.phtml b/module/Application/view/application/chargens/differentiel.phtml index 622c4c8478422299e7fe82d0d0cfe47e2f8540e3..2cc871c568aa2efa82a4710f0321290cfafc6228 100644 --- a/module/Application/view/application/chargens/differentiel.phtml +++ b/module/Application/view/application/chargens/differentiel.phtml @@ -99,19 +99,19 @@ if ($error) { } elseif (empty($diff)) { echo '<br /><div class="alert alert-info">Il n\'y a aucune différence entre les deux exports de charges</div>'; } else { - echo '<br /><div class="well">'; + echo '<br />'; $first = true; echo '<ul class="nav nav-tabs" role="tablist">'; foreach ($diff as $dk => $dc) { - echo '<li role="presentation"' . ($first ? ' class="active"' : '') . '><a href="#composante-' . $dk . '" aria-controls="home" role="tab" data-bs-toggle="tab">' . $dc['libelle'] . '</a></li>'; + echo '<li class="nav-item"><button data-bs-toggle="tab" data-bs-target="#composante-' . $dk . '" class="nav-link ' . ($first ? ' active' : '') . '">' . $dc['libelle'] . '</button></li>'; $first = false; } echo '</ul>'; echo '<div class="tab-content">'; - + $first = true; foreach ($diff as $dk => $dc) { - echo '<div role="tabcard" class="tab-pane active" id="composante-' . $dk . '">'; - echo '<br /><h2>' . $dc['libelle'] . '</h2>'; + echo '<div class="tab-pane ' . ($first ? ' show active' : '') . '" id="composante-' . $dk . '">'; + $first = false; echo '<table class="table table-bordered table-sm" style="width:70%">' . '<tr><th style="width:25%">Totaux Heures/HETD</th><th style="width:25%">' . $avantLibelle . '</th><th style="width:25%">' . $apresLibelle . '</th><th style="width:25%">Différence</th></tr>' . '<tr>' @@ -130,7 +130,7 @@ if ($error) { foreach ($dc['etapes'] as $de) { echo '<div class="card bg-default">'; echo '<div class="card-header">'; - echo '<h3 class="card-title"><span class="label label-default">' . $de['code'] . '</span> ' . $de['libelle'] . '</h3>'; + echo '<h5 class="card-title"><span class="label label-default">' . $de['code'] . '</span> ' . $de['libelle'] . '</h5>'; echo '</div>'; echo '<div class="card-body">'; echo '<div class="row">'; @@ -152,7 +152,7 @@ if ($error) { . '</table>'; echo '</div>'; echo '<div class="col-md-3">'; - echo '<button class="btn btn-info diff-details-ep">Afficher les éléments <i class="fas fa-arrow-down"></span></button>'; + echo '<button class="btn btn-info diff-details-ep">Afficher les éléments <i class="fas fa-arrow-down"></i></button>'; echo '</div>'; echo '</div>'; echo '<div class="etape-elements" style="display:none">'; @@ -187,7 +187,7 @@ if ($error) { if ($tdata == 'new') { echo '<span class="label label-info">Nouveau type d\'intervention</span>'; } elseif ($tdata == 'old') { - echo '<span class="label label-warning">Ancien type d\'intervention</span>'; + echo '<span class="badge bg-warning text-dark">Ancien type d\'intervention</span>'; } echo '</td></tr>'; } @@ -210,7 +210,6 @@ if ($error) { echo '</div > '; } echo '</div > '; - echo '</div > '; } ?> diff --git a/module/Application/view/application/chargens/formation.phtml b/module/Application/view/application/chargens/formation.phtml index edcf2ac41d28dc0407e91d07639eae3761c9a742..e58d33f29a3940ad23450040a06245f3847c46a0 100755 --- a/module/Application/view/application/chargens/formation.phtml +++ b/module/Application/view/application/chargens/formation.phtml @@ -2,7 +2,7 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $etape \Application\Entity\Db\Etape + * @var $etape \OffreFormation\Entity\Db\Etape * @var $scenario \Application\Entity\Db\Scenario * @var $filtre \Application\Form\Chargens\FiltreForm */ diff --git a/module/Application/view/application/chargens/seuil.phtml b/module/Application/view/application/chargens/seuil.phtml index e84d01b94fa0f27a34f9bf3a56d2a7dace9c9826..d211b23da8b87c211c423fe1e24863b677fe3339 100755 --- a/module/Application/view/application/chargens/seuil.phtml +++ b/module/Application/view/application/chargens/seuil.phtml @@ -96,7 +96,7 @@ $canEditcomp = $this->isAllowed(Privileges::getResourceId(Privileges::CHARGENS_S url: "<?= $scenario ? $this->url('chargens/seuil/modifier', ['scenario' => $scenario->getId()]) : null ?>", data: params, success: function () { - alertFlash("Le nouveau seuil a bien été pris en compte", 'success', 3000); + Util.alert("Le nouveau seuil a bien été pris en compte", 'success'; seuilCalcHeures(); }, }); diff --git a/module/Application/view/application/corps/index.phtml b/module/Application/view/application/corps/index.phtml index e73890bb7e3f53acd7d2fa76f57587c1a40452fb..3349155681279efe9fee8afe39a93ffc0badee69 100755 --- a/module/Application/view/application/corps/index.phtml +++ b/module/Application/view/application/corps/index.phtml @@ -44,7 +44,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); href="<?= $this->url('corps/saisie', ['corps' => $corps->getId()], ['query' => ['tab' => 'edition']]) ?>" title="Modifier le corps"><i class="fas fa-pen-to-square"></i></a> <?php if (!$corps->getSource()->getImportable()): ?> - <a class="pop-ajax" data-title="Suppression du corps" data-content="Êtes-vous sur de vouloir supprimer" + <a class="pop-ajax" data-title="Suppression du corps" data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('corps/supprimer', ['corps' => $corps->getId()]) ?>" diff --git a/module/Application/view/application/departement/index.phtml b/module/Application/view/application/departement/index.phtml index 1f674ca2f55a7a60df27aaa7d751b04222b470b4..b1fc84bcba0f8a23acdd5f71aeef87a91265e0ac 100755 --- a/module/Application/view/application/departement/index.phtml +++ b/module/Application/view/application/departement/index.phtml @@ -45,7 +45,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); <a class="ajax-modal" data-event="departement-edition" href="<?= $this->url('departement/saisie', ['departement' => $departement->getId()], ['query' => ['tab' => 'edition']]) ?>" title="Modifier le departement"><i class="fas fa-pen-to-square"></i></a> - <a class="pop-ajax" data-title="Suppression de l'établissement" data-content="Êtes-vous sur de vouloir supprimer" data-confirm="true" + <a class="pop-ajax" data-title="Suppression de l'établissement" data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('departement/supprimer', ['departement' => $departement->getId()]) ?>" title="Supprimer le departement"><i class="fas fa-trash-can"></i></a> diff --git a/module/Application/view/application/droits/affectations.phtml b/module/Application/view/application/droits/affectations.phtml index 564914e3f0cacd0f8d911799c157fcc04f34d372..af0797baa6617dd1198ff2b82bd5b6f909c5a72a 100755 --- a/module/Application/view/application/droits/affectations.phtml +++ b/module/Application/view/application/droits/affectations.phtml @@ -75,7 +75,7 @@ $ajoutUrl = $this->url('droits/affectations/edition'); <script type="text/javascript"> $(function () { $("body").on("affectation-edition", function (event, data) { - alertFlash("L'action a bien été prise en compte", 'success'); + Util.alert("L'action a bien été prise en compte", 'success'); window.location.reload(); }); diff --git a/module/Application/view/application/etablissement/index.phtml b/module/Application/view/application/etablissement/index.phtml index a32fc0f143a096d396485ba873a7b3ddf6cdc465..b18ee462b579cd90212aca4ff6ca31e9d84af72e 100755 --- a/module/Application/view/application/etablissement/index.phtml +++ b/module/Application/view/application/etablissement/index.phtml @@ -47,7 +47,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); <a class="ajax-modal" data-event="etablissement-edition" href="<?= $this->url('etablissement/saisie', ['etablissement' => $etablissement->getId()], ['query' => ['tab' => 'edition']]) ?>" title="Modifier l'établissement"><i class="fas fa-pen-to-square"></i></a> - <a class="pop-ajax" data-title="Suppression de l'établissement" data-content="Êtes-vous sur de vouloir supprimer" data-confirm="true" + <a class="pop-ajax" data-title="Suppression de l'établissement" data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('etablissement/supprimer', ['etablissement' => $etablissement->getId()]) ?>" title="Supprimer l'établissement"><i class="fas fa-trash-can"></i></a> diff --git a/module/Application/view/application/etat-sortie/saisir.phtml b/module/Application/view/application/etat-sortie/saisir.phtml index e2fd22a0ee3fd15ee3eae6ae6cc847c5b26031b8..3773a097771dc26bed545e5049bfa6b382024b7e 100644 --- a/module/Application/view/application/etat-sortie/saisir.phtml +++ b/module/Application/view/application/etat-sortie/saisir.phtml @@ -27,9 +27,9 @@ echo $this->form()->openTag($form); </div> <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="active"><a href="#sql" aria-controls="sql" role="tab" data-bs-toggle="tab">Requêtage</a></li> - <li role="presentation"><a href="#csv" aria-controls="csv" role="tab" data-bs-toggle="tab">Export CSV</a></li> - <li role="presentation"><a href="#pdf" aria-controls="pdf" role="tab" data-bs-toggle="tab">Export PDF</a></li> + <li role="presentation"><a class="nav-link active" href="#sql" aria-controls="sql" role="tab" data-bs-toggle="tab">Requêtage</a></li> + <li role="presentation"><a class="nav-link" href="#csv" aria-controls="csv" role="tab" data-bs-toggle="tab">Export CSV</a></li> + <li role="presentation"><a class="nav-link" href="#pdf" aria-controls="pdf" role="tab" data-bs-toggle="tab">Export PDF</a></li> </ul> <div class="tab-content etat-sortie-saisir"> @@ -69,7 +69,11 @@ echo $this->form()->openTag($form); </div> </div> <div role="tabcard" class="tab-pane" id="csv"> - <?= $this->formControlGroup($form->get('csv-params')) ?> + <?= $this->formLabel($form->get('csv-params')) ?> + <div class="card bg-default csv-options"> + <?= $this->formTextarea($form->get('csv-params')) ?> + </div> + <?= $this->formLabel($form->get('csv-traitement')) ?> <div class="card bg-default variables"> <div class="card-header">Variables disponibles en entrée</div> @@ -109,9 +113,9 @@ echo $this->form()->openTag($form); <td>Gestionaire d'entités Doctrine (permet d'accéder à la base de données)</td> </tr> </table> - </div> - <?= $this->formTextarea($form->get('csv-traitement')) ?> - <div class="card bg-default variables"> + <div class="card-body"> + <?= $this->formTextarea($form->get('csv-traitement')) ?> + </div> <div class="card-header">Données en sortie</div> <div class="card-body"> Le traitement doit retourner un tableau de données (array) à publiposter, ou NULL. @@ -123,7 +127,7 @@ echo $this->form()->openTag($form); <div role="tabcard" class="tab-pane" id="pdf"> <?= $this->formControlGroup($form->get('fichier')) ?> <?= $this->formControlGroup($form->get('auto-break')) ?> - <?= $this->formLabel($form->get('pdf-traitement')) ?> + <h4><?= $this->formLabel($form->get('pdf-traitement')) ?></h4> <div class="card bg-default variables"> <div class="card-header">Variables disponibles en entrée</div> <table class="table table-xs"> @@ -162,9 +166,9 @@ echo $this->form()->openTag($form); <td>Gestionaire d'entités Doctrine (permet d'accéder à la base de données)</td> </tr> </table> - </div> - <?= $this->formTextarea($form->get('pdf-traitement')) ?> - <div class="card bg-default variables"> + <div class="card-body"> + <?= $this->formTextarea($form->get('pdf-traitement')) ?> + </div> <div class="card-header">Données en sortie</div> <div class="card-body"> Le traitement doit retourner un tableau de données (array) à publiposter, ou NULL. diff --git a/module/Application/view/application/formule/test-saisir.phtml b/module/Application/view/application/formule/test-saisir.phtml index e677fc2ba5b0f29328db4634eefdc86ca12629ab..cb7c6c1e395651d2d4394027fffdf87bb2fd872a 100644 --- a/module/Application/view/application/formule/test-saisir.phtml +++ b/module/Application/view/application/formule/test-saisir.phtml @@ -392,7 +392,7 @@ echo $this->tag('h1', ['class' => 'page-header'])->html($title); </table> <div> <h2>Informations de débogage - <button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="collapse" data-target="#debug-info" + <button class="btn btn-secondary btn-sm" type="button" data-bs-toggle="collapse" data-bs-target="#debug-info" aria-expanded="false" aria-controls="debug-info"> Afficher/masquer </button> diff --git a/module/Application/view/application/intervenant/fiche.phtml b/module/Application/view/application/intervenant/fiche.phtml index 817ce6f7b1ddaf23b45458ad9246d45bb1d10003..63a2096cd4befdddd97f83c1f5cc75d05e1228e8 100755 --- a/module/Application/view/application/intervenant/fiche.phtml +++ b/module/Application/view/application/intervenant/fiche.phtml @@ -30,6 +30,12 @@ $urlRefresh = $this->url('workflow/feuille-de-route-refresh', ['intervenant' => var errBtn = '<button onclick="window.location.reload();" type="button" class="btn btn-primary">J\'ai lu, recharger la page</button>'; popAjax.setContent(popAjax.getContent() + errBtn); + }, + change: function (event, popAjax) { + if (!popAjax.hasErrors()) { + window.location.reload(); + + } } }); }); diff --git a/module/Application/view/application/intervenant/rechercher.phtml b/module/Application/view/application/intervenant/rechercher.phtml index c734824d6d933643cfaafc3ea36a41b3c88e161a..0db14185d9ec8a18e9d9e9625acdbd147a3cc8a2 100755 --- a/module/Application/view/application/intervenant/rechercher.phtml +++ b/module/Application/view/application/intervenant/rechercher.phtml @@ -6,23 +6,10 @@ <?= $this->messenger()->addCurrentMessagesFromFlashMessenger(); ?> <div style="padding:1em"> - <div class="intervenant-recherche"> - <div class="critere"> - Saisissez le nom suivi éventuellement du prénom (2 lettres au moins) :<br/> - <input id="critere" class="form-control input" type="text" style="width:15em;display:inline"/> - </div> - <div class="recherche" data-url="<?= $this->url('intervenant/recherche') ?>"> - - </div> - </div> <?php - if (!empty($recents)) { - echo '<h3>Fiches récemment consultées :</h3>'; - echo $this->partial('liste', ['intervenants' => $recents]); - } - + echo $this->vue('intervenant/recherche', []); $canAddIntervenant = $this->isAllowed(\Application\Provider\Privilege\Privileges::getResourceId(\Application\Provider\Privilege\Privileges::INTERVENANT_CREATION)); @@ -31,5 +18,12 @@ echo $this->tag('a', ['class' => 'btn btn-primary', 'href' => $url])->html("Ajout d'un nouvel intervenant"); } + + if (!empty($recents)) { + echo '<h3 style="margin-top:20px;">Intervenants récemment consultés :</h3>'; + echo $this->partial('liste', ['intervenants' => $recents]); + } + + ?> </div> diff --git a/module/Application/view/application/intervenant/supprimer.phtml b/module/Application/view/application/intervenant/supprimer.phtml index 45e104d5e22bc7e6bc386602b2d4bf415be4296f..72362d8e22447c332ccb0d7e5ef5d49ed762e52f 100755 --- a/module/Application/view/application/intervenant/supprimer.phtml +++ b/module/Application/view/application/intervenant/supprimer.phtml @@ -11,7 +11,8 @@ if (!$tree) { <script> window.location.href = "<?= $intervenant ? $this->url('intervenant/voir', ['intervenant' => 'code:' . $intervenant->getCode()]) : $this->url('intervenant/rechercher') ?>"; </script> - <div class="loading"> Veuillez patienter pendant le rechargement de la page ... + <div class="loading"> Veuillez patienter pendant le rechargement de la page + ... ... </div> <?php @@ -38,15 +39,15 @@ echo $this->tree($tree, ['id' => 'intervenant-suppr']); ?> <br/> - <button id="suppressionIntervenantData" type="button" class="btn btn-danger" data-bs-toggle="popover" data-trigger="focus" + <button id="suppressionIntervenantData" type="button" class="btn btn-danger" data-bs-toggle="popover" + data-trigger="focus" title="Suppression de données intervenant"> Supprimer les données sélectionnées </button> - <div id="supprEnCours" style="display:none" class="loading"> Suppression en cours - ... - </div> + <?php if ($intervenant->estNonHistorise()): ?> - <button id="historisationIntervenantData" type="button" class="btn btn-secondary" data-bs-toggle="popover" data-trigger="focus" + <button id="historisationIntervenantData" type="button" class="btn btn-secondary" data-bs-toggle="popover" + data-trigger="focus" title="Historisation de la fiche de l'intervenant"> Historiser la fiche de l'intervenant </button> @@ -55,6 +56,8 @@ echo $this->tree($tree, ['id' => 'intervenant-suppr']); $(function () { $('#suppressionIntervenantData').popover({ html: true, + sanitize: false, + placement: 'top', content: '<div class="alert alert-warning">Attention : les données supprimées ne pourront pas être restaurées</div>' + 'Souhaitez-vous vraiment supprimer les données sélectionnées ?<br /><br />' + @@ -64,6 +67,8 @@ echo $this->tree($tree, ['id' => 'intervenant-suppr']); $('#historisationIntervenantData').popover({ html: true, + sanitize: false, + placement: 'top', content: '<div class="alert alert-warning">Attention : Aucune donnée ne sera véritablement supprimée. La fiche de l\'intervenant ne sera simplement plus visible dans OSE ni dans les extractions (CSV, PDF, ...)</div>' + 'Souhaitez-vous vraiment historiser la fiche de l\'intervenant ?<br /><br />' + @@ -73,16 +78,15 @@ echo $this->tree($tree, ['id' => 'intervenant-suppr']); }); - function supprimer() - { - $('#supprEnCours').show(); - + function supprimer() { + //$('#supprEnCours').show(); + $('#suppressionIntervenantData').text('Suppression en cours...') + $('#suppressionIntervenantData').popover('hide') var div = $('#int-suppr-div'); var tree = $('#intervenant-suppr'); var selectedElms = tree.jstree("get_selected", true); var ids = []; - $.each(selectedElms, function () - { + $.each(selectedElms, function () { ids.push(this.id); }); @@ -91,8 +95,8 @@ echo $this->tree($tree, ['id' => 'intervenant-suppr']); }); } - function historiser() - { + function historiser() { + $('#historisationIntervenantData').popover('hide') var div = $('#int-suppr-div'); window.location.href = div.data('historiser-url'); } diff --git a/module/Application/view/application/intervenant/voir-heures-comp.phtml b/module/Application/view/application/intervenant/voir-heures-comp.phtml index 1449522bb4beef6f896751307222d25206abc031..7574797d69635cfbe335b68783d41e323e581124 100755 --- a/module/Application/view/application/intervenant/voir-heures-comp.phtml +++ b/module/Application/view/application/intervenant/voir-heures-comp.phtml @@ -143,7 +143,7 @@ $this->intervenant($intervenant)->renderTitle('Calcul HETD'); <?php foreach ($data['s'] as $ls): ?> <tr> <td><?php - if ($ls['element-etablissement'] instanceof \Application\Entity\Db\ElementPedagogique) { + if ($ls['element-etablissement'] instanceof \OffreFormation\Entity\Db\ElementPedagogique) { echo $this->elementPedagogique($ls['element-etablissement'])->renderLink(); } else { echo $this->etablissement($ls['element-etablissement'])->renderLink(); diff --git a/module/Application/view/application/menu-callout.phtml b/module/Application/view/application/menu-callout.phtml index 77a113fab8a0abedb58cf03cbdecdbfa08d06195..2a38f9470b56caa66d86b6fa408dc717a3abc203 100755 --- a/module/Application/view/application/menu-callout.phtml +++ b/module/Application/view/application/menu-callout.phtml @@ -8,44 +8,64 @@ use Laminas\Navigation\Page\Mvc; * @var $this \Application\View\Renderer\PhpRenderer */ -echo $this->tag('div', ['class' => 'callout-menu']); +$rubriques = []; + foreach ($container as $page) { if ($this->navigation()->accept($page)) { + $rubrique = [ + 'color' => $page->get('color'), + 'description' => $page->get('description'), + 'icon' => $page->get('icon'), + 'html' => $this->navigation()->htmlify($page), + 'items' => [], + ]; + + if ($page->hasPages()) { + $children = (array)$page->getPages(); + uasort($children, function (Mvc $a, Mvc $b) { + return $a->getOrder() > $b->getOrder() ? 1 : 0; + }); + foreach ($children as $child) { + if ($this->navigation()->accept($child)) { + $rubrique['items'][] = $this->navigation()->htmlify($child); + } + } + } + + $rubriques[] = $rubrique; + } +} + +//var_dump($rubriques); + + +echo $this->tag('div', ['class' => 'callout-menu']); +foreach ($rubriques as $rubrique) { + if (!empty($rubrique['items'])) { $attrs = [ 'class' => 'callout-container', ]; - if ($borderColor = $page->get('color')) { + if ($borderColor = $rubrique['color']) { $attrs['style'] = 'background-color:' . $borderColor; } - if ($description = $page->get('description')) { + if ($description = $rubrique['description']) { $attrs['title'] = $description; } echo $this->tag('div', $attrs); echo $this->tag('div', ['class' => 'callout']); - if ($icon = $page->get('icon')) { + if ($icon = $rubrique['icon']) { echo $this->tag('span', ['class' => $icon])->open(TagViewHelper::AUTOCLOSE_FULL); } - echo $this->tag('h1')->html($this->navigation()->htmlify($page)); - - if ($page->hasPages()) { - echo '<ul>'; - $children = (array)$page->getPages(); - uasort($children, function (Mvc $a, Mvc $b) { - return $a->getOrder() > $b->getOrder() ? 1 : 0; - }); - foreach ($children as $child) { - if ($this->navigation()->accept($child)) { - echo $this->tag('li')->html(/*$child->getOrder() . ' ' .*/ $this->navigation()->htmlify($child)); - } - } - echo '</ul>'; + echo $this->tag('h1')->html($rubrique['html']); + echo '<ul>'; + foreach ($rubrique['items'] as $item) { + echo $this->tag('li')->html($item); } + echo '</ul>'; echo '</div>'; echo '</div>'; } } echo '<div style="clear: both"></div>'; -echo '</div>'; - - +echo '</div>'; \ No newline at end of file diff --git a/module/Application/view/application/modulateur/index.phtml b/module/Application/view/application/modulateur/index.phtml index fbf55823e7b795b016c3b2a1c0844539b08618cf..7ae309774d6ecc82123ec30d348677a6892fd7af 100755 --- a/module/Application/view/application/modulateur/index.phtml +++ b/module/Application/view/application/modulateur/index.phtml @@ -71,16 +71,16 @@ foreach ($typeModulateurs as $tm) { <?php echo ($infoBulle ? '<abbr title="' . $infoBulle . '">' : '') . $tms->getStructure()->getLibelleCourt(); echo($infoBulle ? '</abbr>' : ''); if ($canEdit) { ?> - <a style="position:absolute; right:36px; " class="ajax-modal" + <a style="position:relative; left:10px;" class="ajax-modal" data-event="modulateur-saisie" href="<?= $this->url('modulateur/type-modulateur-structure-saisie', ['typeModulateur' => $tm->getId(), 'typeModulateurStructure' => $tms->getId()]) ?>" title="Éditer un type de modulateur pour une structure"> <i class="fas fa-pen-to-square"></i> </a> - <a style="position:absolute; right:20px; " class="pop-ajax" - href="<?= $this->url('modulateur/type-modulateur-structure-delete', ['typeModulateurStructure' => $tms->getId()]) ?>" - title="Supprimer le type de modulateur pour la structure" - data-content="<p class='lead text-danger'><strong>Attention!</strong> Confirmez-vous cette suppression ?</p>" + <a style="position:relative; left:10px;" class=" pop-ajax" + href="<?= $this->url('modulateur/type-modulateur-structure-delete', ['typeModulateurStructure' => $tms->getId()]) ?>" + title="Supprimer le type de modulateur pour la structure" + data-content="<p class='lead text-danger'><strong>Attention!</strong> Confirmez-vous cette suppression ?</p>" data-confirm="true" data-confirm-button="Oui" data-cancel-button="Non" @@ -95,6 +95,7 @@ foreach ($typeModulateurs as $tm) { } ?> </table> <?php if ($canEdit) { ?> + <br> <a class="ajax-modal" data-event="modulateur-saisie" href="<?= $this->url('modulateur/type-modulateur-structure-saisie', ['typeModulateur' => $tm->getId()]) ?>" title="Ajouter un type de modulateur pour une structure"> diff --git a/module/Application/view/application/offre-formation/element-pedagogique/modulateurs-centres-couts.phtml b/module/Application/view/application/offre-formation/element-pedagogique/modulateurs-centres-couts.phtml deleted file mode 100755 index 0bcc3648bff3100dabae79e5b01bb4e85c80d1f0..0000000000000000000000000000000000000000 --- a/module/Application/view/application/offre-formation/element-pedagogique/modulateurs-centres-couts.phtml +++ /dev/null @@ -1,61 +0,0 @@ -<div style="margin-top:10px;"> - <?= $this->form()->openTag($form); ?> - - <table class="table table-bordered table-xs"> - <thead> - <tr> - <th>Type(s) Modulateur(s)</th> - <th>Modulateur(s)</th> - </tr> - </thead> - <tbody> - <?php $hasModulateur = 0; ?> - <?php foreach($form->getElements() as $element): ?> - <tr> - <?php if(!empty(strstr($element->getName(), 'modulateur'))): ?> - <td><?= $element->getLabel(); ?></td> - <td><?= $this->formSelect($form->get($element->getName())); ?></td> - <?php $hasModulateur = 0; ?> - <?php endif; ?> - </tr> - <?php endforeach; ?> - <?php if($hasModulateur): ?> - <td colspan="2" class="text-center" >Aucun modulateur ne correspond aux enseignements de cette formation.</td> - <?php endif; ?> - </tbody> - </table> - <table class="table table-bordered table-xs"> - <thead> - <tr> - <th colspan="2">Centre de coûts de l'élément pédagogique</th> - </tr> - </thead> - <tbody> - <?php if($form->has('fi')): ?> - <tr> - <td class="text-center"><abbr title="Formation initiale"><?= $form->get('fi')->getLabel(); ?></abbr></td> - <td><?= $this->formSelect($form->get('fi')); ?></td> - </tr> - <?php endif; ?> - <?php if($form->has('fa')): ?> - <tr> - <td class="text-center"><abbr title="Formation apprentissage"><?= $form->get('fa')->getLabel(); ?></abbr></td> - <td><?= $this->formSelect($form->get('fa')); ?></td> - </tr> - <?php endif; ?> - <?php if($form->has('fc')): ?> - <tr> - <td class="text-center"><abbr title="Formation continue"><?= $form->get('fc')->getLabel(); ?></abbr></td> - <td><?= $this->formSelect($form->get('fc')); ?></td> - </tr> - <?php endif; ?> - </tbody> - </table> - - <?= $this->formSubmit($form->get('submit')); ?> - - <?= $this->form()->closeTag($form); ?> - - -</div> - diff --git a/module/Application/view/application/paiement/demande-mise-en-paiement.phtml b/module/Application/view/application/paiement/demande-mise-en-paiement.phtml index 1caa87aaa5a61cc40997ebba700370be77d4d6cf..e5cd4c0bfaaaf2ef1b17343abdf6565d543f00f9 100755 --- a/module/Application/view/application/paiement/demande-mise-en-paiement.phtml +++ b/module/Application/view/application/paiement/demande-mise-en-paiement.phtml @@ -45,7 +45,7 @@ if ($saved) { ?> <script type="text/javascript"> $(function () { - alertFlash('La demande de paiement a bien été prise en compte.', 'success', 2000); + Util.alert('La demande de paiement a bien été prise en compte.', 'success'); }); </script> <?php diff --git a/module/Application/view/application/parametre/annees.phtml b/module/Application/view/application/parametre/annees.phtml index 29ba7a038c773b4dae823662d0a0b72b14bdc9e8..1b6120fc0a64c3837c2085ed9588b2ba8c811a99 100755 --- a/module/Application/view/application/parametre/annees.phtml +++ b/module/Application/view/application/parametre/annees.phtml @@ -51,7 +51,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::PARAMETRES_ANN url: "<?= $this->url('parametres/annees') ?>", data: {annee: anneeId}, success: function (data) { - alertFlash(data.message, data.status, 5000); + Util.alert(data.message, data.status); }, }); diff --git a/module/Application/view/application/pays/index.phtml b/module/Application/view/application/pays/index.phtml index 031051c28439eda42b4482b385434f024471e0a2..01b1adf24519a8af064b8af26d6ab07c533504c9 100755 --- a/module/Application/view/application/pays/index.phtml +++ b/module/Application/view/application/pays/index.phtml @@ -48,7 +48,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); href="<?= $this->url('pays/saisie', ['pays' => $pays->getId()], ['query' => ['tab' => 'edition']]) ?>" title="Modifier le pays"><i class="fas fa-pen-to-square"></i></a> <a class="pop-ajax" data-title="Suppression de l'établissement" - data-content="Êtes-vous sur de vouloir supprimer" data-confirm="true" + data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('pays/supprimer', ['pays' => $pays->getId()]) ?>" title="Supprimer le pays"><i class="fas fa-trash-can"></i></a> diff --git a/module/Application/view/application/periode/index.phtml b/module/Application/view/application/periode/index.phtml index 459c9f56750d0095cae21460267dc9affbf41522..39bc3e578bbb20050b0a7b94adb6301839fc3bc9 100755 --- a/module/Application/view/application/periode/index.phtml +++ b/module/Application/view/application/periode/index.phtml @@ -50,7 +50,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); <a class="ajax-modal" data-event="periodes-edition" href="<?= $this->url('periodes/saisie', ['periode' => $periode->getId()], ['query' => ['tab' => 'edition']]) ?>" title="Modifier la période"><i class="fas fa-pen-to-square"></i></a> - <a class="pop-ajax" data-title="Suppression de période" data-content="Êtes-vous sur de vouloir supprimer" data-confirm="true" + <a class="pop-ajax" data-title="Suppression de période" data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('periodes/supprimer', ['periode' => $periode->getId()]) ?>" title="Supprimer la periode"><i class="fas fa-trash-can"></i></a> @@ -85,7 +85,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); type: 'POST', url: "<?= $this->url('periodes/trier')?>", data: {champsIds: champsIds}, - success: function () { alertFlash("Tri effectué", 'success', 3000); }, + success: function () { Util.alert("Tri effectué", 'success'); }, }); diff --git a/module/Application/view/application/piece-jointe/index.phtml b/module/Application/view/application/piece-jointe/index.phtml index 4c6063fa8788e1e47b7f06516ecc6ab5fb136318..6732a0cd8f4dd24879d388aa36727f9b20aea7f8 100755 --- a/module/Application/view/application/piece-jointe/index.phtml +++ b/module/Application/view/application/piece-jointe/index.phtml @@ -94,8 +94,8 @@ $menuUrl = $this->url('piece-jointe/intervenant', ['intervenant' => $intervenant $(function () { //WidgetInitializer.add('piece-jointe', 'pieceJointe', function(){ - // WidgetInitializer.includeJs(Url('js/piece_jointe.js')); - // WidgetInitializer.includeCss(Url('css/piece_jointe.css')); + // WidgetInitializer.includeJs(Util.url('js/piece_jointe.js')); + // WidgetInitializer.includeCss(Util.url('css/piece_jointe.css')); //}); $('.piece-jointe').pieceJointe({ diff --git a/module/Application/view/application/piece-jointe/modifier-type-piece-jointe-statut.phtml b/module/Application/view/application/piece-jointe/modifier-type-piece-jointe-statut.phtml index aaf0a9afcf52e47eab23970e769e3cfcfc419afc..6ee32378144efe705a08f7c478e0dfa26eaa71ec 100755 --- a/module/Application/view/application/piece-jointe/modifier-type-piece-jointe-statut.phtml +++ b/module/Application/view/application/piece-jointe/modifier-type-piece-jointe-statut.phtml @@ -31,6 +31,11 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); <?= $this->formControlGroup($form->get('changement-rib')); ?> </div> </div> +<div class="row"> + <div class="col-md-12"> + <?= $this->formControlGroup($form->get('nationalite-etrangere')); ?> + </div> +</div> <div class="row"> <div class="col-md-12"> <?= $this->formControlGroup($form->get('fc')); ?> @@ -91,7 +96,7 @@ echo $this->form()->closeTag(); var dureeVie = $("input[name='duree-vie']") if (this.checked) { dureeVie.val('1'); - dureeVie.attr('disabled', 'disabled'); + //dureeVie.attr('type', 'disabled'); } else { dureeVie.removeAttr('disabled'); } diff --git a/module/Application/view/application/piece-jointe/refuser.phtml b/module/Application/view/application/piece-jointe/refuser.phtml index 776d4b90f4b327f049937f01d0f6bfce2a446c55..cf032ea93f9ebf7c1d6d6b833f21ebb33c162070 100644 --- a/module/Application/view/application/piece-jointe/refuser.phtml +++ b/module/Application/view/application/piece-jointe/refuser.phtml @@ -44,8 +44,9 @@ echo $this->form()->closeTag(); * @param {string} selector * @param {object} form */ - function installEditor(selector, form) { - WidgetInitializer.includeJs(Url('vendor/tinymce-4.4.1/js/tinymce/tinymce.min.js')); + function installEditor(selector, form) + { + WidgetInitializer.includeJs(Util.url('vendor/tinymce-4.4.1/js/tinymce/tinymce.min.js')); tinymce.editors = []; tinymce.init({ selector: selector, diff --git a/module/Application/view/application/piece-jointe/type-piece-jointe-statut.phtml b/module/Application/view/application/piece-jointe/type-piece-jointe-statut.phtml index 5edd4475e9ebeab16bacaf46c07e8c9926fb3afa..2b0abad366d395c95687a72c989ee2383ef1313f 100755 --- a/module/Application/view/application/piece-jointe/type-piece-jointe-statut.phtml +++ b/module/Application/view/application/piece-jointe/type-piece-jointe-statut.phtml @@ -56,9 +56,9 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::PIECE_JUSTIFIC }); $.ajax({ type: 'POST', - url: Url('piece-jointe/type-piece-jointe-trier'), + url: Util.url('piece-jointe/type-piece-jointe-trier'), data: {champsIds: champsIds}, - success: function (res) { alertFlash(res.msg, 'success', 3000); }, + success: function (res) { Util.alert(res.msg, 'success'); }, }); } }); @@ -135,24 +135,24 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::PIECE_JUSTIFIC </script> <?php $this->headTitle()->append($title = "Pièces justificatives attendues par statut d'intervenant") ?> -<h1 class="page-header"><?= $title ?></h1> - -<div class="nav-local"> - <ul> - <?php foreach ($typesIntervenants as $intervenant): - if ($codeIntervenant == $intervenant->getCode()):?> - <li class="nav-item active"> - <?php else: ?> - <li class="nav-item"> - <?php endif; ?> - <a class="nav-link" - href="<?= $this->url('piece-jointe/type-piece-jointe-statut', ['codeTypeIntervenant' => $intervenant->getCode()]); ?>" - data-placement="bottom"><i class="fas fa-eye"></i> <?php echo $intervenant->getLibelle() ?></a> - </li> - <?php endforeach; ?> - </ul> - <div style="clear:both"></div> -</div> + <h1 class="page-header"><?= $title ?></h1> + + <div class="nav-local"> + <ul> + <?php foreach ($typesIntervenants as $intervenant): + if ($codeIntervenant == $intervenant->getCode()):?> + <li class="nav-item active"> + <?php else: ?> + <li class="nav-item"> + <?php endif; ?> + <a class="nav-link" + href="<?= $this->url('piece-jointe/type-piece-jointe-statut', ['codeTypeIntervenant' => $intervenant->getCode()]); ?>" + data-placement="bottom"><i class="fas fa-eye"></i> <?php echo $intervenant->getLibelle() ?></a> + </li> + <?php endforeach; ?> + </ul> + <div style="clear:both"></div> + </div> <table id="tblTpjs" class="table-bordered table-sm table-header table-header-rotated" style="width:1121px"> <thead> diff --git a/module/Application/view/application/tag/index.phtml b/module/Application/view/application/tag/index.phtml new file mode 100644 index 0000000000000000000000000000000000000000..7cb6aea8d0f60e7f18a984d86364cae2f8a14414 --- /dev/null +++ b/module/Application/view/application/tag/index.phtml @@ -0,0 +1,58 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + * @var $motifNonPaiements \Application\Entity\Db\MotifNonPaiement[] + */ + +use Application\Provider\Privilege\Privileges; + +$title = "Tag"; + +$this->headTitle()->append($title); +//TODO gestion du privilege spécifique pour les tags +$canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::MOTIF_NON_PAIEMENT_EDITION)); + +?> +<h1 class="page-header"><?= $title ?></h1> + +<table class="table table-bordered table-sort"> + <thead> + <th style="word-wrap: break-word ; ">Code</th> + <th style="word-wrap: break-word ; ">Libelle Court</th> + <th style="word-wrap: break-word ; ">Libelle Long</th> + <?php if ($canEdit) echo '<th>Actions</th>' ?> + </thead> + <tbody> + <?php foreach ($tags as $fr): ?> + <tr> + <td style="word-wrap: break-word ; "><?= $fr->getCode() ?></td> + <td style="word-wrap: break-word ; "><?= $fr->getLibelleCourt() ?></td> + <td style="word-wrap: break-word ; "><?= $fr->getLibelleLong() ?></td> + <?php if ($canEdit) { ?> + <td style="text-align:center;width:1px;white-space: nowrap"> + <a class="mod-ajax" data-submit-reload="true" + href="<?= $this->url('tag/saisir', ['tag' => $fr->getId()]) ?>" + title="Modifier le tag"> + <i class="fas fa-pen-to-square"></i></a> + <a class="pop-ajax" + href="<?= $this->url('tag/supprimer', ['tag' => $fr->getId()]) ?>" + title="Supprimer le tag" + data-content="<p class='lead text-danger'><strong>Attention!</strong> Confirmez-vous cette suppression ?</p>" + data-confirm="true" + data-confirm-button="Oui" + data-cancel-button="Non" + data-submit-reload="true" + > + <i class="fas fa-trash-can"></i> + </a> + </td> + <?php } ?> + </tr> + <?php endforeach; ?> + </tbody> +</table> +<?php if ($canEdit): ?> + <a class="btn btn-primary mod-ajax" data-submit-reload="true" href="<?= $this->url('tag/saisir') ?>"> + <i class="fas fa-pen-to-square"></i>Ajouter un tag + </a> +<?php endif ?> diff --git a/module/Application/view/application/tag/saisir.phtml b/module/Application/view/application/tag/saisir.phtml new file mode 100644 index 0000000000000000000000000000000000000000..caab79d165a9e47f2c98379cdfb40d6bc238772b --- /dev/null +++ b/module/Application/view/application/tag/saisir.phtml @@ -0,0 +1,9 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + * @var $form \Application\Form\MotifNonPaiement\MotifNonPaiementSaisieForm + */ + +echo $this->tag('h1', ['class' => 'page-header'])->html($title); +echo $this->messenger()->addCurrentMessagesFromFlashMessengerWithNoNamespace(); +echo $this->form($form); \ No newline at end of file diff --git a/module/Application/view/application/voirie/index.phtml b/module/Application/view/application/voirie/index.phtml index 7cbf8f1a89548b9d2911ca80a846bc5f9ac9d03b..b4dc8df53bce924be0fa4f09deccdf68c678155d 100755 --- a/module/Application/view/application/voirie/index.phtml +++ b/module/Application/view/application/voirie/index.phtml @@ -64,7 +64,7 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::REFERENTIEL_CO <a class="btn btn-primary ajax-modal" data-event="voirie-saisie" href="<?= $this->url('voirie/saisie') ?>" title="Ajouter une voirie"> - <i class="fas fa-pen-to-square"></i + <i class="fas fa-pen-to-square"></i> Ajouter une voirie</a> <script type="text/javascript"> diff --git a/module/Application/view/layout/layout.phtml b/module/Application/view/layout/layout.phtml index 4c5ba9daaee74336c1e2dba9f29022e80970202c..273c1fb2b1b47ecd6d5bf8f46e567afd10172114 100755 --- a/module/Application/view/layout/layout.phtml +++ b/module/Application/view/layout/layout.phtml @@ -27,13 +27,10 @@ echo $this->doctype(); <!-- Dépendances --> <link href="<?= $this->basePath('/vendor/jquery-ui-1.12.1/jquery-ui.min.css') ?>" media="all" rel="stylesheet" type="text/css"> - <link href="<?= $this->basePath('/vendor/jquery-ui-1.12.1/jquery-ui.structure.min.css') ?>" media="all" rel="stylesheet" type="text/css"> - <link href="<?= $this->basePath('/vendor/jquery-ui-1.12.1/jquery-ui.theme.min.css') ?>" media="all" rel="stylesheet" type="text/css"> <link href="<?= $this->basePath('/vendor/open-sans-gh-pages/open-sans.css') ?>" media="all" rel="stylesheet" type="text/css"> <link href="<?= $this->basePath('/vendor/font-awesome-6.0.0/css/all.min.css') ?>" media="all" rel="stylesheet" type="text/css"> <link href="<?= $this->basePath('/vendor/bootstrap-select-1.14.0/css/bootstrap-select.min.css') ?>" media="all" rel="stylesheet" type="text/css"> <link href="<?= $this->basePath('/vendor/DataTables-1.12.1/css/dataTables.bootstrap5.min.css') ?>" media="all" rel="stylesheet" type="text/css"> - <link href="<?= $this->basePath('/vendor/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css') ?>" media="all" rel="stylesheet" type="text/css"> <!-- CSS générale à l'application --> @@ -51,6 +48,11 @@ echo $this->doctype(); $icons = AppConfig::get('etablissement', 'icons'); if (is_array($icons)) { foreach ($icons as $icon) { + // Protection pour éviter d'appeler d'anciennes icônes Unicaen + $forbidden = 'www.unicaen.fr/images/favicon/'; + if (isset($icon['href']) && str_contains($icon['href'], $forbidden)) { + continue; + } $ihtml = "\t<link rel=\"icon\" "; foreach ($icon as $attrName => $attrVal) { $ihtml .= $attrName . '="' . $attrVal . '" '; @@ -62,11 +64,15 @@ echo $this->doctype(); ?> <!-- Scripts globaux --> - <script type="text/javascript" src="<?= $this->basePath('/vendor/jquery-3.6.0.min.js?v=' . $version) ?>"></script> - <script type="text/javascript" src="<?= $this->basePath('/vendor/jquery-ui-1.12.1/jquery-ui.min.js?v=' . $version) ?>"></script> + <script type="text/javascript" src="<?= $this->basePath('/vendor/jquery-3.6.0.min.js') ?>"></script> + <script type="text/javascript" src="<?= $this->basePath('/vendor/jquery-ui-1.12.1/jquery-ui.min.js') ?>"></script> + <script type="text/javascript" src="<?= $this->basePath('/vendor/axios/axios.min.js') ?>"></script> + <script type="text/javascript" src="<?= $this->basePath('/js/util.js?v=' . $version) ?>"></script> + <?= $this->vite()->head(); ?> + <?= $this->headScript(); ?> </head> -<body class="<?= getenv('APPLICATION_ENV') ?: 'dev' ?> p-0" data-base-url="<?= $this->url('home') ?>"> +<body class="<?= AppConfig::getEnv() ?> p-0" data-base-url="<?= $this->url('home') ?>"> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> @@ -122,7 +128,6 @@ echo $this->doctype(); <script type="text/javascript" src="<?= $this->basePath('/vendor/bootstrap-select-1.14.0/js/i18n/defaults-fr_FR.js') ?>"></script> <!-- Scripts de l'application --> -<script type="text/javascript" src="<?= $this->basePath('/js/datepicker-fr.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/unicaen.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/widget-initializer.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/intranavigator.js?v=' . $version) ?>"></script> @@ -130,7 +135,6 @@ echo $this->doctype(); <script type="text/javascript" src="<?= $this->basePath('/js/chargens.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/mod-ajax.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/tab-ajax.js?v=' . $version) ?>"></script> -<script type="text/javascript" src="<?= $this->basePath('/js/util.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/app.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/paiement.js?v=' . $version) ?>"></script> <script type="text/javascript" src="<?= $this->basePath('/js/piece-jointe.js?v=' . $version) ?>"></script> diff --git a/module/Dossier/Module.php b/module/Dossier/Module.php new file mode 100755 index 0000000000000000000000000000000000000000..41ec7785cd99c3e95fab7428ccd51fef94a47279 --- /dev/null +++ b/module/Dossier/Module.php @@ -0,0 +1,22 @@ +<?php + +namespace Dossier; + +use Application\ConfigFactory; + +class Module +{ + + public function getConfig() + { + return ConfigFactory::configFromSimplified(__DIR__, __NAMESPACE__); + } + + + + public function getAutoloaderConfig() + { + return ConfigFactory::autoloaderConfig(__DIR__, __NAMESPACE__); + } + +} diff --git a/module/Dossier/autoload_classmap.php b/module/Dossier/autoload_classmap.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/Dossier/autoload_classmap.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Dossier/config/module.config.php b/module/Dossier/config/module.config.php new file mode 100644 index 0000000000000000000000000000000000000000..23476d06996bd043f5f5351b8df258c7fb6e16aa --- /dev/null +++ b/module/Dossier/config/module.config.php @@ -0,0 +1,293 @@ +<?php + +namespace Dossier; + +use Application\Entity\Db\WfEtape; +use Application\Provider\Privilege\Privileges; +use Dossier\Assertion\IntervenantDossierAssertion; +use Dossier\Controller\AutresController; +use Dossier\Controller\EmployeurController; +use Dossier\Controller\IntervenantDossierController; +use Dossier\Form\AutresForm; +use Dossier\Form\EmployeurSaisieForm; +use Dossier\Form\Factory\AutresFormFactory; +use Dossier\Form\Factory\EmployeurSaisieFormFactory; +use Dossier\Form\Factory\IntervenantDossierFormFactory; +use Dossier\Form\IntervenantDossierForm; +use Dossier\Service\DossierAutreService; +use Dossier\Service\DossierAutreServiceFactory; +use Dossier\Service\DossierAutreTypeService; +use Dossier\Service\DossierAutreTypeServiceFactory; +use Dossier\Service\DossierService; +use Dossier\Service\DossierServiceFactory; +use Dossier\Service\EmployeurService; +use Dossier\Service\EmployeurServiceFactory; +use Dossier\View\Helper\ValidationViewHelperFactory; +use UnicaenAuth\Assertion\AssertionFactory; +use UnicaenAuth\Guard\PrivilegeController; + +return [ + 'routes' => [ + 'employeur' => [ + 'route' => '/employeur', + 'controller' => EmployeurController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'saisie' => [ + 'route' => '/saisie[/:employeur]', + 'constraints' => [ + 'employeur' => '[0-9]*', + ], + 'action' => 'saisie', + ], + 'supprimer' => [ + 'route' => '/supprimer/:employeur', + 'constraints' => [ + 'employeur' => '[0-9]*', + ], + 'action' => 'supprimer', + ], + ], + ], + 'employeur-search' => [ + 'route' => '/employeur-search', + 'controller' => EmployeurController::class, + 'action' => 'recherche', + 'may_terminate' => true, + ], + 'employeur-json' => [ + 'route' => '/employeur/json', + 'controller' => EmployeurController::class, + 'action' => 'recherche-json', + ], + 'autres-infos' => [ + 'route' => '/autres', + 'controller' => AutresController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'saisie' => [ + 'route' => '/saisie[/:dossierAutre]', + 'constraints' => [ + 'dossierAutre' => '[0-9]*', + ], + 'action' => 'saisie', + ], + ], + ], + 'intervenant' => [ + 'child_routes' => [ + 'dossier' => [ + 'route' => '/:intervenant/dossier', + 'controller' => IntervenantDossierController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'change-statut-dossier' => [ + 'route' => '/change-statut-dossier', + 'action' => 'change-statut-dossier', + ], + 'valider' => [ + 'route' => '/valider', + 'action' => 'valider', + ], + 'devalider' => [ + 'route' => '/devalider', + 'action' => 'devalider', + ], + + 'supprimer' => [ + 'route' => '/supprimer', + 'action' => 'supprimer', + ], + 'differences' => [ + 'route' => '/differences', + 'action' => 'differences', + ], + 'purger-differences' => [ + 'route' => '/purger-differences', + 'action' => 'purger-differences', + ], + ], + ], + ], + ], + ], + + 'console' => [ + 'console-update-employeur' => [ + 'route' => 'update-employeur', + 'controller' => 'Application\Controller\Employeur', + 'action' => 'update-employeur', + ], + ], + + + 'navigation' => [ + 'intervenant' => [ + 'pages' => [ + 'dossier' => [ + 'label' => "Données personnelles", + 'title' => "Saisir les données personnelles d'un intervenant vacataire", + 'route' => 'intervenant/dossier', + 'paramsInject' => [ + 'intervenant', + ], + 'workflow-etape-code' => WfEtape::CODE_DONNEES_PERSO_SAISIE, + 'withtarget' => true, + 'resource' => PrivilegeController::getResourceId(IntervenantDossierController::class, 'index'), + 'order' => 5, + ], + ], + ], + + 'administration' => [ + 'pages' => [ + 'intervenants' => [ + 'pages' => [ + 'gestion-champs-autres-dossier-intervenant' => [ + 'label' => "Champs personnalisés du dossier", + 'title' => "Editer et modifier les 5 champs personnalisables pour les dossiers des intervenant", + 'route' => 'autres-infos', + 'withtarget' => true, + 'order' => 10, + 'resource' => PrivilegeController::getResourceId(AutresController::class, 'index'), + ], + ], + ], + 'rh' => [ + 'pages' => [ + 'Employeurs' => [ + 'color' => '#9F491F', + 'label' => "Employeurs", + 'title' => "Gestion des employeurs", + 'route' => 'employeur', + 'resource' => PrivilegeController::getResourceId(EmployeurController::class, 'index'), + 'order' => 20, + ], + ], + ], + ], + ], + ], + 'guards' => [ + [ + 'controller' => IntervenantDossierController::class, + 'action' => ['index', 'change-statut-dossier'], + 'privileges' => [Privileges::DOSSIER_VISUALISATION], + 'assertion' => IntervenantDossierAssertion::class, + ], + [ + 'controller' => IntervenantDossierController::class, + 'action' => ['differences'], + 'privileges' => [Privileges::DOSSIER_DIFFERENCES], + 'assertion' => IntervenantDossierAssertion::class, + ], + [ + 'controller' => IntervenantDossierController::class, + 'action' => ['purger-differences'], + 'privileges' => [Privileges::DOSSIER_PURGER_DIFFERENCES], + 'assertion' => IntervenantDossierAssertion::class, + ], + [ + 'controller' => IntervenantDossierController::class, + 'action' => ['valider'], + 'privileges' => [Privileges::DOSSIER_VALIDATION], + 'assertion' => IntervenantDossierAssertion::class, + + ], + [ + 'controller' => IntervenantDossierController::class, + 'action' => ['devalider'], + 'privileges' => [Privileges::DOSSIER_DEVALIDATION], + 'assertion' => IntervenantDossierAssertion::class, + + ], + [ + 'controller' => IntervenantDossierController::class, + 'action' => ['supprimer'], + 'privileges' => [Privileges::DOSSIER_SUPPRESSION], + 'assertion' => IntervenantDossierAssertion::class, + ], + [ + 'controller' => AutresController::class, + 'action' => ['index'], + 'privileges' => Privileges::INTERVENANT_AUTRES_VISUALISATION, + ], + [ + 'controller' => AutresController::class, + 'action' => ['saisie'], + 'privileges' => Privileges::INTERVENANT_AUTRES_EDITION, + ], + [ + 'controller' => EmployeurController::class, + 'action' => ['index', 'recherche-json', 'saisie', 'supprimer'], + 'privileges' => [Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION], + ], + ], + 'rules' => [ + [ + 'privileges' => [ + IntervenantDossierAssertion::PRIV_VIEW_IDENTITE, + IntervenantDossierAssertion::PRIV_EDIT_IDENTITE, + IntervenantDossierAssertion::PRIV_EDIT_ADRESSE, + IntervenantDossierAssertion::PRIV_VIEW_ADRESSE, + IntervenantDossierAssertion::PRIV_EDIT_CONTACT, + IntervenantDossierAssertion::PRIV_VIEW_CONTACT, + IntervenantDossierAssertion::PRIV_EDIT_INSEE, + IntervenantDossierAssertion::PRIV_VIEW_INSEE, + IntervenantDossierAssertion::PRIV_VIEW_IBAN, + IntervenantDossierAssertion::PRIV_EDIT_IBAN, + IntervenantDossierAssertion::PRIV_VIEW_EMPLOYEUR, + IntervenantDossierAssertion::PRIV_EDIT_EMPLOYEUR, + IntervenantDossierAssertion::PRIV_VIEW_AUTRE1, + IntervenantDossierAssertion::PRIV_EDIT_AUTRE1, + IntervenantDossierAssertion::PRIV_VIEW_AUTRE2, + IntervenantDossierAssertion::PRIV_EDIT_AUTRE2, + IntervenantDossierAssertion::PRIV_VIEW_AUTRE3, + IntervenantDossierAssertion::PRIV_EDIT_AUTRE3, + IntervenantDossierAssertion::PRIV_VIEW_AUTRE4, + IntervenantDossierAssertion::PRIV_EDIT_AUTRE4, + IntervenantDossierAssertion::PRIV_VIEW_AUTRE5, + IntervenantDossierAssertion::PRIV_EDIT_AUTRE5, + IntervenantDossierAssertion::PRIV_CAN_VALIDE, + IntervenantDossierAssertion::PRIV_CAN_DEVALIDE, + IntervenantDossierAssertion::PRIV_CAN_EDIT, + IntervenantDossierAssertion::PRIV_CAN_SUPPRIME, + + + ], + 'resources' => ['Intervenant'], + 'assertion' => IntervenantDossierAssertion::class, + ], + [ + 'privileges' => [ + Privileges::REFERENTIEL_COMMUN_EMPLOYEUR_VISUALISATION, + ], + 'resources' => ['Contrat'], + ], + + ], + 'controllers' => [ + IntervenantDossierController::class => Controller\Factory\IntervenantDossierControllerFactory::class, + AutresController::class => Controller\Factory\AutresControllerFactory::class, + EmployeurController::class => Controller\Factory\EmployeurControllerFactory::class, + ], + 'services' => [ + DossierService::class => DossierServiceFactory::class, + DossierAutreService::class => DossierAutreServiceFactory::class, + DossierAutreTypeService::class => DossierAutreTypeServiceFactory::class, + EmployeurService::class => EmployeurServiceFactory::class, + IntervenantDossierAssertion::class => AssertionFactory::class, + + ], + 'view_helpers' => [ + 'validation' => ValidationViewHelperFactory::class, + ], + 'forms' => [ + IntervenantDossierForm::class => IntervenantDossierFormFactory::class, + AutresForm::class => AutresFormFactory::class, + EmployeurSaisieForm::class => EmployeurSaisieFormFactory::class, + ], +]; diff --git a/module/Application/src/Assertion/IntervenantDossierAssertion.php b/module/Dossier/src/Assertion/IntervenantDossierAssertion.php similarity index 99% rename from module/Application/src/Assertion/IntervenantDossierAssertion.php rename to module/Dossier/src/Assertion/IntervenantDossierAssertion.php index 1977553b8d66c7be2c0505d14fac87b0d5b722b9..e87f5286805bdbbd921435709f31228c798f6047 100644 --- a/module/Application/src/Assertion/IntervenantDossierAssertion.php +++ b/module/Dossier/src/Assertion/IntervenantDossierAssertion.php @@ -1,6 +1,6 @@ <?php -namespace Application\Assertion; +namespace Dossier\Assertion; use Application\Acl\Role; use Application\Entity\Db\Intervenant; @@ -8,7 +8,7 @@ use Application\Entity\Db\WfEtape; use Application\Provider\Privilege\Privileges; // sous réserve que vous utilisiez les privilèges d'UnicaenAuth et que vous ayez généré votre fournisseur -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Application\Service\Traits\WorkflowServiceAwareTrait; use UnicaenAuth\Assertion\AbstractAssertion; use Laminas\Permissions\Acl\Resource\ResourceInterface; diff --git a/module/Dossier/src/Assertion/IntervenantDossierAssertionFactory.php b/module/Dossier/src/Assertion/IntervenantDossierAssertionFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..a0d16dc118d22c2c100871d71877413d7ddaaecd --- /dev/null +++ b/module/Dossier/src/Assertion/IntervenantDossierAssertionFactory.php @@ -0,0 +1,26 @@ +<?php + +namespace Dossier\Assertion; + +use Psr\Container\ContainerInterface; + + +class IntervenantDossierAssertionFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return IntervenantDossierAssertion + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): IntervenantDossierAssertion + { + $assertion = new IntervenantDossierAssertion; + + /* Injectez vos dépendances ICI */ + + return $assertion; + } +} \ No newline at end of file diff --git a/module/Application/src/Controller/AutresController.php b/module/Dossier/src/Controller/AutresController.php similarity index 75% rename from module/Application/src/Controller/AutresController.php rename to module/Dossier/src/Controller/AutresController.php index 7b50b06ede4e038cfcf9bf02e61fb9cd1cf3eb9d..76680351956c8e7a58b9115abc2a061e6d4dc3fe 100644 --- a/module/Application/src/Controller/AutresController.php +++ b/module/Dossier/src/Controller/AutresController.php @@ -1,12 +1,13 @@ <?php -namespace Application\Controller; +namespace Dossier\Controller; -use Application\Entity\Db\DossierAutre; -use Application\Form\Intervenant\Traits\AutresFormAwareTrait; -use Application\Service\Traits\DossierAutreServiceAwareTrait; -use Application\Service\Traits\DossierAutreTypeServiceAwareTrait; +use Application\Controller\AbstractController; +use Dossier\Entity\Db\DossierAutre; +use Dossier\Form\Traits\AutresFormAwareTrait; +use Dossier\Service\Traits\DossierAutreServiceAwareTrait; +use Dossier\Service\Traits\DossierAutreTypeServiceAwareTrait; class AutresController extends AbstractController { @@ -34,6 +35,8 @@ class AutresController extends AbstractController try { $this->getServiceDossierAutre()->save($autre); $this->flashMessenger()->addSuccessMessage('Enregistrement effectué'); + + return $this->redirect()->toRoute('autres-infos'); } catch (\Exception $e) { $this->flashMessenger()->addErrorMessage($this->translate($e)); } diff --git a/module/Application/src/Controller/EmployeurController.php b/module/Dossier/src/Controller/EmployeurController.php similarity index 65% rename from module/Application/src/Controller/EmployeurController.php rename to module/Dossier/src/Controller/EmployeurController.php index 912c33bcae59c1890596f3fcd1ff1d09b318520e..d94267ec464e5830ac72c43c087171cb5324a8f4 100644 --- a/module/Application/src/Controller/EmployeurController.php +++ b/module/Dossier/src/Controller/EmployeurController.php @@ -1,12 +1,14 @@ <?php -namespace Application\Controller; +namespace Dossier\Controller; -use Application\Entity\Db\Employeur; -use Application\Form\Employeur\Traits\EmployeurSaisieFormAwareTrait; -use Application\Service\Traits\EmployeurServiceAwareTrait; +use Application\Controller\AbstractController; +use Dossier\Entity\Db\Employeur; +use Dossier\Form\Traits\EmployeurSaisieFormAwareTrait; +use Dossier\Service\Traits\EmployeurServiceAwareTrait; use Laminas\View\Model\JsonModel; +use UnicaenApp\View\Model\MessengerViewModel; /** * Description of EmployeurController @@ -21,19 +23,21 @@ class EmployeurController extends AbstractController public function indexAction() { - $critere = $this->params()->fromPost('critere'); + $critere = $this->params()->fromPost('critere'); $employeurs = $this->getServiceEmployeur()->rechercheEmployeur($critere, 1000); return compact('employeurs'); } + + public function saisieAction() { $employeur = $this->getEvent()->getParam('employeur'); if (empty($employeur)) { - $title = "Ajout d'un nouvel employeur"; + $title = "Ajout d'un nouvel employeur"; $employeur = $this->getServiceEmployeur()->newEntity(); } else { $title = "Édition d'un employeur"; @@ -46,7 +50,10 @@ class EmployeurController extends AbstractController /** * @var Employeur $employeur */ - $employeur->setCritereRecherche($employeur->getRaisonSociale() . ' ' . $employeur->getNomCommercial() . ' ' . $employeur->getSiret()); + $raisonSociale = $employeur->getRaisonSociale() ? strtolower($employeur->getRaisonSociale()) : ''; + $nomCommercial = $employeur->getNomCommercial() ? strtolower($employeur->getNomCommercial()) : ''; + + $employeur->setCritereRecherche($raisonSociale . ' ' . $nomCommercial . ' ' . $employeur->getSiret()); $employeur->setSourceCode($employeur->getSiret()); $this->getServiceEmployeur()->save($employeur); $this->flashMessenger()->addSuccessMessage( @@ -57,12 +64,18 @@ class EmployeurController extends AbstractController return compact('form', 'title'); } + + public function supprimerAction() { - return true; + $employeur = $this->getEvent()->getParam('employeur'); + $this->getServiceEmployeur()->delete($employeur, true); + + return new MessengerViewModel(); } + public function rechercheAction() { @@ -72,17 +85,19 @@ class EmployeurController extends AbstractController ]);*/ $term = $this->params()->fromQuery('term'); + $employeurs = $this->getServiceEmployeur()->rechercheEmployeur($term); return new JsonModel($employeurs); } + public function rechercheJsonAction() { $critere = $this->params()->fromPost('critere'); - $employeurs = $this->getServiceEmployeur()->rechercheEmployeur($critere); + $employeurs = $this->getServiceEmployeur()->rechercheEmployeur($critere); $employeursJson = json_encode($employeurs); return $employeursJson; diff --git a/module/Dossier/src/Controller/Factory/AutresControllerFactory.php b/module/Dossier/src/Controller/Factory/AutresControllerFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..cb13cd423293a2e2005ae059086d89e931fa452c --- /dev/null +++ b/module/Dossier/src/Controller/Factory/AutresControllerFactory.php @@ -0,0 +1,25 @@ +<?php + +namespace Dossier\Controller\Factory; + +use Dossier\Controller\AutresController; +use Psr\Container\ContainerInterface; + + +class AutresControllerFactory +{ + /** + * Create controller + * + * @param ContainerInterface $container + * + * @return AutresController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null) + { + $controller = new AutresController(); + + return $controller; + } + +} \ No newline at end of file diff --git a/module/Dossier/src/Controller/Factory/EmployeurControllerFactory.php b/module/Dossier/src/Controller/Factory/EmployeurControllerFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..012ff871a3716999f1026524ea6ae1a086449d42 --- /dev/null +++ b/module/Dossier/src/Controller/Factory/EmployeurControllerFactory.php @@ -0,0 +1,25 @@ +<?php + +namespace Dossier\Controller\Factory; + +use Dossier\Controller\EmployeurController; +use Psr\Container\ContainerInterface; + + +class EmployeurControllerFactory +{ + /** + * Create controller + * + * @param ContainerInterface $container + * + * @return EmployeurController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null) + { + $controller = new EmployeurController(); + + return $controller; + } + +} \ No newline at end of file diff --git a/module/Application/src/Controller/Factory/IntervenantDossierControllerFactory.php b/module/Dossier/src/Controller/Factory/IntervenantDossierControllerFactory.php similarity index 84% rename from module/Application/src/Controller/Factory/IntervenantDossierControllerFactory.php rename to module/Dossier/src/Controller/Factory/IntervenantDossierControllerFactory.php index cfbf13c5abf0d69a5e526360f9c8bd13d6f865fa..8f2dd5780c9a1019357c4df3fb882b62a74e19e9 100755 --- a/module/Application/src/Controller/Factory/IntervenantDossierControllerFactory.php +++ b/module/Dossier/src/Controller/Factory/IntervenantDossierControllerFactory.php @@ -1,9 +1,8 @@ <?php -namespace Application\Controller\Factory; +namespace Dossier\Controller\Factory; -use Application\Controller\DossierController; -use Application\Controller\IntervenantDossierController; +use Dossier\Controller\IntervenantDossierController; use Psr\Container\ContainerInterface; use UnicaenAuth\Service\UserContext; use UnicaenImport\Processus\ImportProcessus; diff --git a/module/Application/src/Controller/IntervenantDossierController.php b/module/Dossier/src/Controller/IntervenantDossierController.php similarity index 83% rename from module/Application/src/Controller/IntervenantDossierController.php rename to module/Dossier/src/Controller/IntervenantDossierController.php index b2ac9a5e6ceb4997327e20475dffa554d30b36c5..85b0d49b22ce11b84ce918d7b329d668e173b9ab 100755 --- a/module/Application/src/Controller/IntervenantDossierController.php +++ b/module/Dossier/src/Controller/IntervenantDossierController.php @@ -1,18 +1,18 @@ <?php -namespace Application\Controller; +namespace Dossier\Controller; use Application\Constants; +use Application\Controller\AbstractController; +use Dossier\Form\Traits\IntervenantDossierFormAwareTrait; use Indicateur\Entity\Db\IndicModifDossier; use Application\Entity\Db\Intervenant; use Application\Entity\Db\WfEtape; -use Application\Form\Intervenant\DossierValidation; -use Application\Form\Intervenant\Traits\AutresFormAwareTrait; -use Application\Form\Intervenant\Traits\IntervenantDossierFormAwareTrait; +use Dossier\Form\Traits\AutresFormAwareTrait; use Application\Service\Traits\AnneeServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DossierAutreServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierAutreServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; use Enseignement\Service\ServiceServiceAwareTrait; use Intervenant\Service\StatutServiceAwareTrait; @@ -48,17 +48,18 @@ class IntervenantDossierController extends AbstractController $this->em()->getFilters()->enable('historique')->init([ \Application\Entity\Db\Intervenant::class, \Application\Entity\Db\Validation::class, - \Application\Entity\Db\Dossier::class, + \Dossier\Entity\Db\IntervenantDossier::class, ]); } + public function indexAction() { $this->initFilters(); /* Initialisation */ - $role = $this->getServiceContext()->getSelectedIdentityRole(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); if (!$intervenant) { throw new \LogicException('Intervenant non précisé ou inexistant'); @@ -67,7 +68,7 @@ class IntervenantDossierController extends AbstractController $intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant); /* Récupération de la validation du dossier si elle existe */ $intervenantDossierValidation = $this->getServiceDossier()->getValidation($intervenant); - $tblDossier = $intervenantDossier->getTblDossier(); + $tblDossier = $intervenantDossier->getTblDossier(); if (!$tblDossier and $intervenantDossier->getId()) { //$this->em()->refresh($intervenantDossier); $tblDossier = $intervenantDossier->getTblDossier(); @@ -84,9 +85,13 @@ class IntervenantDossierController extends AbstractController $form->setData($data); if ($form->isValid()) { /* Traitement du formulaire */ + if (empty($intervenantDossier->getStatut()) && $intervenant->getStatut()->getCode() != 'AUTRES') { + $intervenantDossier->setStatut($intervenant->getStatut()); + } $intervenantDossier = $this->getServiceDossier()->save($intervenantDossier); + /*On reinitialise le formulaire car le statut du dossier a - pu être changé donc les règles d'affichage ne sont plus les mêmes*/ + pu être changé donc les règles d'affichage ne sont plus les mêmes */ $form = $this->getFormIntervenantIntervenantDossier()->setIntervenant($intervenant)->initForm(); $form->bind($intervenantDossier); //Alimentation de la table INDIC_MODIF_DOSSIER @@ -94,7 +99,7 @@ class IntervenantDossierController extends AbstractController //Recalcul des tableaux de bord nécessaires $this->updateTableauxBord($intervenantDossier->getIntervenant()); $this->em()->refresh($intervenantDossier); - $tblDossier = $intervenantDossier->getTblDossier(); + $tblDossier = $intervenantDossier->getTblDossier(); $lastCompleted = $tblDossier->getCompletude(); $this->flashMessenger()->addSuccessMessage('Enregistrement de vos données effectué'); @@ -113,8 +118,9 @@ class IntervenantDossierController extends AbstractController $intervenantDossierStatut = $intervenantDossier->getStatut(); //Règles pour afficher ou non les fieldsets - $champsAutres = $intervenantDossier->getStatut()->getChampsAutres(); + $champsAutres = $intervenantDossier->getStatut()->getChampsAutres(); $fieldsetRules = [ + 'fieldset-statut' => $intervenantDossier->getStatut()->getDossierStatut(), 'fieldset-identite-complementaire' => $intervenantDossier->getStatut()->getDossierIdentiteComplementaire(), 'fieldset-adresse' => $intervenantDossier->getStatut()->getDossierAdresse(), 'fieldset-contact' => $intervenantDossier->getStatut()->getDossierContact(), @@ -124,7 +130,7 @@ class IntervenantDossierController extends AbstractController 'fieldset-autres' => (!empty($champsAutres)) ? 1 : 0,//Si le statut intervenant a au moins 1 champs autre ]; - $iPrec = $this->getServiceDossier()->intervenantVacataireAnneesPrecedentes($intervenant, 1); + $iPrec = $this->getServiceDossier()->intervenantVacataireAnneesPrecedentes($intervenant, 1); $lastHETD = $iPrec ? $this->getServiceService()->getTotalHetdIntervenant($iPrec) : 0; if ($lastHETD > 0) { @@ -154,18 +160,20 @@ class IntervenantDossierController extends AbstractController } - public function changeStatutDossierAction() + + public + function changeStatutDossierAction() { if ($this->getRequest()->isPost()) { - $data = $this->getRequest()->getPost(); - $role = $this->getServiceContext()->getSelectedIdentityRole(); + $data = $this->getRequest()->getPost(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); if (!$intervenant) { throw new \LogicException('Intervenant non précisé ou inexistant'); } $intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant); - $statut = $this->getServiceStatut()->get($data['DossierStatut']['statut']); + $statut = $this->getServiceStatut()->get($data['DossierStatut']['statut']); if ($statut) { $intervenantDossier->setStatut($statut); $this->getServiceDossier()->save($intervenantDossier); @@ -189,14 +197,16 @@ class IntervenantDossierController extends AbstractController } - public function validerAction() + + public + function validerAction() { $this->initFilters(); - $role = $this->getServiceContext()->getSelectedIdentityRole(); - $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); + $role = $this->getServiceContext()->getSelectedIdentityRole(); + $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); $intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant); - $validation = $this->getServiceDossier()->getValidation($intervenant); + $validation = $this->getServiceDossier()->getValidation($intervenant); if ($validation) { throw new \Exception('Ce dossier a déjà été validé par ' . $validation->getHistoCreateur() . ' le ' . $validation->getHistoCreation()->format(Constants::DATE_FORMAT)); } @@ -213,13 +223,15 @@ class IntervenantDossierController extends AbstractController } - public function devaliderAction() + + public + function devaliderAction() { $this->initFilters(); - $role = $this->getServiceContext()->getSelectedIdentityRole(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); - $validation = $this->getServiceDossier()->getValidation($intervenant); + $validation = $this->getServiceDossier()->getValidation($intervenant); try { $this->getServiceValidation()->delete($validation); $this->updateTableauxBord($intervenant, true); @@ -232,13 +244,15 @@ class IntervenantDossierController extends AbstractController } - public function supprimerAction() + + public + function supprimerAction() { $this->initFilters(); - $role = $this->getServiceContext()->getSelectedIdentityRole(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); - $dossier = $this->getServiceDossier()->getByIntervenant($intervenant); + $dossier = $this->getServiceDossier()->getByIntervenant($intervenant); try { $this->getServiceDossier()->delete($dossier); @@ -252,7 +266,9 @@ class IntervenantDossierController extends AbstractController } - public function differencesAction() + + public + function differencesAction() { $intervenant = $this->getEvent()->getParam('intervenant'); @@ -273,13 +289,15 @@ class IntervenantDossierController extends AbstractController $query->setParameter('intervenant', $intervenant); $differences = $query->getResult(); - $title = "Historique des modifications d'informations importantes dans les données personnelles"; + $title = "Historique des modifications d'informations importantes dans les données personnelles"; return compact('title', 'intervenant', 'differences'); } - public function purgerDifferencesAction() + + public + function purgerDifferencesAction() { $intervenant = $this->getEvent()->getParam('intervenant'); @@ -304,7 +322,9 @@ class IntervenantDossierController extends AbstractController } - private function updateTableauxBord(Intervenant $intervenant, $validation = false) + + private + function updateTableauxBord(Intervenant $intervenant, $validation = false) { $this->getServiceWorkflow()->calculerTableauxBord([ 'dossier', diff --git a/module/Application/src/Entity/Db/DossierAutre.php b/module/Dossier/src/Entity/Db/DossierAutre.php similarity index 97% rename from module/Application/src/Entity/Db/DossierAutre.php rename to module/Dossier/src/Entity/Db/DossierAutre.php index ca0548192d7a8f4b404d24d5c70b6a985616922e..7664b7ff189d40c8ab51cc1b1a4e80fdec636253 100755 --- a/module/Application/src/Entity/Db/DossierAutre.php +++ b/module/Dossier/src/Entity/Db/DossierAutre.php @@ -1,8 +1,6 @@ <?php -namespace Application\Entity\Db; - -use Doctrine\ORM\Mapping as ORM; +namespace Dossier\Entity\Db; class DossierAutre diff --git a/module/Application/src/Entity/Db/DossierAutreType.php b/module/Dossier/src/Entity/Db/DossierAutreType.php similarity index 95% rename from module/Application/src/Entity/Db/DossierAutreType.php rename to module/Dossier/src/Entity/Db/DossierAutreType.php index b5a61c4b5628961a59df3cee978ca4b0846f2a9f..3b539dc9b69e8805568bf16dc21b12f3a18975c0 100755 --- a/module/Application/src/Entity/Db/DossierAutreType.php +++ b/module/Dossier/src/Entity/Db/DossierAutreType.php @@ -1,8 +1,6 @@ <?php -namespace Application\Entity\Db; - -use Doctrine\ORM\Mapping as ORM; +namespace Dossier\Entity\Db; /** diff --git a/module/Application/src/Entity/Db/Employeur.php b/module/Dossier/src/Entity/Db/Employeur.php similarity index 98% rename from module/Application/src/Entity/Db/Employeur.php rename to module/Dossier/src/Entity/Db/Employeur.php index b42a47aea7635acca9b6153299ff009db4af7ae9..9831c0160a87e54b4c392369374872b0f472041a 100755 --- a/module/Application/src/Entity/Db/Employeur.php +++ b/module/Dossier/src/Entity/Db/Employeur.php @@ -1,6 +1,6 @@ <?php -namespace Application\Entity\Db; +namespace Dossier\Entity\Db; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; @@ -51,6 +51,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface protected ?string $critereRecherche = null; + /** * Get id * @@ -62,6 +63,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @return string */ @@ -71,16 +73,17 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @param string $raisonSociale */ public function setRaisonSociale($raisonSociale): void { $this->raisonSociale = $raisonSociale; - } + /** * @return string */ @@ -90,6 +93,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @param string $siren */ @@ -99,6 +103,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @return string */ @@ -108,6 +113,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @param string $siret */ @@ -117,6 +123,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @return string */ @@ -126,6 +133,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @param string $nomCommercial */ @@ -135,6 +143,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @return string */ @@ -144,6 +153,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @param string $identifiantAssociation */ @@ -152,6 +162,8 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface $this->identifiantAssociation = $identifiantAssociation; } + + /** * @return string */ @@ -161,6 +173,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + /** * @param string $critereRecherche */ @@ -170,6 +183,7 @@ class Employeur implements HistoriqueAwareInterface, ImportAwareInterface } + public function __toString() { return $this->getLibelle(); diff --git a/module/Application/src/Entity/Db/IntervenantDossier.php b/module/Dossier/src/Entity/Db/IntervenantDossier.php similarity index 97% rename from module/Application/src/Entity/Db/IntervenantDossier.php rename to module/Dossier/src/Entity/Db/IntervenantDossier.php index 6e874eed3b2b9a311f7c7a1850d40da2c8337ccf..8e79a1f513d5ae5983c43ae673e94b3ecad30562 100755 --- a/module/Application/src/Entity/Db/IntervenantDossier.php +++ b/module/Dossier/src/Entity/Db/IntervenantDossier.php @@ -1,12 +1,14 @@ <?php -namespace Application\Entity\Db; +namespace Dossier\Entity\Db; +use Application\Entity\Db\Departement; +use Application\Entity\Db\Intervenant; +use Application\Entity\Db\Pays; use Application\Entity\Db\Traits\CiviliteAwareTrait; -use Application\Entity\Db\Traits\EmployeurAwareTrait; +use Dossier\Entity\Db\Traits\EmployeurAwareTrait; use Application\Entity\Traits\AdresseTrait; use Application\Interfaces\AdresseInterface; -use Doctrine\Persistence\Mapping\ClassMetadata; use Intervenant\Entity\Db\Statut; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; @@ -14,10 +16,6 @@ use UnicaenApp\Service\EntityManagerAwareInterface; use UnicaenApp\Service\EntityManagerAwareTrait; use Laminas\Permissions\Acl\Resource\ResourceInterface; -/** - * IntervenantDossier - * - */ class IntervenantDossier implements HistoriqueAwareInterface, ResourceInterface, EntityManagerAwareInterface, AdresseInterface { use CiviliteAwareTrait; @@ -175,7 +173,7 @@ class IntervenantDossier implements HistoriqueAwareInterface, ResourceInterface, */ public function __toString() { - return strtoupper($this->getNomUsuel()) . ' ' . ucfirst($this->getPrenom()); + return strtoupper($this->getNomUsuel()) . ' IntervenantDossier.php' . ucfirst($this->getPrenom()); } @@ -826,7 +824,7 @@ class IntervenantDossier implements HistoriqueAwareInterface, ResourceInterface, * * @param \Application\Entity\Db\Intervenant $intervenant * - * @return \Application\Entity\Db\IntervenantDossier + * @return \Dossier\Entity\Db\IntervenantDossier */ public function fromIntervenant(Intervenant $intervenant) { diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.DossierAutre.dcm.xml b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.DossierAutre.dcm.xml similarity index 87% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.DossierAutre.dcm.xml rename to module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.DossierAutre.dcm.xml index 6c961fe3de84fd5aee1b3c8dff5f70fbb432ec7d..38bd9b15eb0beea3a6857bb6d3893384b17daa30 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.DossierAutre.dcm.xml +++ b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.DossierAutre.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\DossierAutre" table="DOSSIER_CHAMP_AUTRE"> + <entity name="Dossier\Entity\Db\DossierAutre" table="DOSSIER_CHAMP_AUTRE"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> @@ -13,7 +13,7 @@ <field name="jsonValue" type="string" column="JSON_VALUE" nullable="true"/> <field name="sqlValue" type="string" column="SQL_VALUE" nullable="true"/> - <many-to-one field="type" target-entity="Application\Entity\Db\DossierAutreType"> + <many-to-one field="type" target-entity="Dossier\Entity\Db\DossierAutreType"> <join-columns> <join-column name="DOSSIER_CHAMP_AUTRE_TYPE_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.DossierAutreType.dcm.xml b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.DossierAutreType.dcm.xml similarity index 87% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.DossierAutreType.dcm.xml rename to module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.DossierAutreType.dcm.xml index d7f75e2733d3b1247ddc8c220ecbea6b55257c77..61e910ee70916724ecbf19a9f638e0ba83eb21bd 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.DossierAutreType.dcm.xml +++ b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.DossierAutreType.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\DossierAutreType" table="DOSSIER_CHAMP_AUTRE_TYPE"> + <entity name="Dossier\Entity\Db\DossierAutreType" table="DOSSIER_CHAMP_AUTRE_TYPE"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Employeur.dcm.xml b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.Employeur.dcm.xml similarity index 97% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Employeur.dcm.xml rename to module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.Employeur.dcm.xml index 92411c981d5d0a694885766870fbc7032840a2f5..91a15cf69d4bca6595d79f52c3e9214e4c450562 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Employeur.dcm.xml +++ b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.Employeur.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\Employeur" table="EMPLOYEUR"> + <entity name="Dossier\Entity\Db\Employeur" table="EMPLOYEUR"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.IntervenantDossier.dcm.xml b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.IntervenantDossier.dcm.xml similarity index 95% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.IntervenantDossier.dcm.xml rename to module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.IntervenantDossier.dcm.xml index edba471238a6a434b7b903796f5241c28e5d0d84..3ba319f0fdad42529d483ba7b57e72d32057adde 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.IntervenantDossier.dcm.xml +++ b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.IntervenantDossier.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\IntervenantDossier" table="INTERVENANT_DOSSIER"> + <entity name="Dossier\Entity\Db\IntervenantDossier" table="INTERVENANT_DOSSIER"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> @@ -64,9 +64,9 @@ <field name="autre4" type="string" column="AUTRE_4" length="1000" nullable="true"/> <field name="autre5" type="string" column="AUTRE_5" length="1000" nullable="true"/> - <one-to-one field="tblDossier" target-entity="Application\Entity\Db\TblDossier" mapped-by="dossier" /> + <one-to-one field="tblDossier" target-entity="Dossier\Entity\Db\TblDossier" mapped-by="dossier"/> - <many-to-one field="employeur" target-entity="Application\Entity\Db\Employeur"> + <many-to-one field="employeur" target-entity="Dossier\Entity\Db\Employeur"> <join-column name="EMPLOYEUR_ID" referenced-column-name="ID"/> </many-to-one> <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TblDossier.dcm.xml b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.TblDossier.dcm.xml similarity index 88% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TblDossier.dcm.xml rename to module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.TblDossier.dcm.xml index 2534c3a13f9c354ec0400f9df85cd23f96965b95..6cdd73868f1ae966fe2b16e9bb859057b6dcb316 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TblDossier.dcm.xml +++ b/module/Dossier/src/Entity/Db/Mapping/Dossier.Entity.Db.TblDossier.dcm.xml @@ -2,17 +2,17 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TblDossier" table="TBL_DOSSIER"> - <id name="id" type="integer" column="ID" /> + <entity name="Dossier\Entity\Db\TblDossier" table="TBL_DOSSIER"> + <id name="id" type="integer" column="ID"/> <many-to-one field="annee" target-entity="Application\Entity\Db\Annee" fetch="LAZY"> <join-column name="ANNEE_ID" referenced-column-name="ID"/> </many-to-one> <many-to-one field="intervenant" target-entity="Application\Entity\Db\Intervenant" fetch="LAZY"> <join-column name="INTERVENANT_ID" referenced-column-name="ID"/> </many-to-one> - <field name="actif" type="boolean" column="ACTIF" nullable="false" /> - <one-to-one field="dossier" target-entity="Application\Entity\Db\IntervenantDossier" inversed-by="tblDossier"> - <join-column name="DOSSIER_ID" referenced-column-name="ID" /> + <field name="actif" type="boolean" column="ACTIF" nullable="false"/> + <one-to-one field="dossier" target-entity="Dossier\Entity\Db\IntervenantDossier" inversed-by="tblDossier"> + <join-column name="DOSSIER_ID" referenced-column-name="ID"/> </one-to-one> <many-to-one field="validation" target-entity="Application\Entity\Db\Validation" fetch="LAZY"> <join-column name="VALIDATION_ID" referenced-column-name="ID"/> diff --git a/module/Application/src/Entity/Db/TblDossier.php b/module/Dossier/src/Entity/Db/TblDossier.php similarity index 95% rename from module/Application/src/Entity/Db/TblDossier.php rename to module/Dossier/src/Entity/Db/TblDossier.php index cf9046cd73e275a0c69661cd393a5cd094df3254..8a1f7498d8dac8cc7d944d281246ce9354d8ea8b 100755 --- a/module/Application/src/Entity/Db/TblDossier.php +++ b/module/Dossier/src/Entity/Db/TblDossier.php @@ -1,6 +1,11 @@ <?php -namespace Application\Entity\Db; +namespace Dossier\Entity\Db; + + +use Application\Entity\Db\Annee; +use Application\Entity\Db\Intervenant; +use Application\Entity\Db\Validation; class TblDossier { diff --git a/module/Application/src/Entity/Db/Traits/EmployeurAwareTrait.php b/module/Dossier/src/Entity/Db/Traits/EmployeurAwareTrait.php similarity index 74% rename from module/Application/src/Entity/Db/Traits/EmployeurAwareTrait.php rename to module/Dossier/src/Entity/Db/Traits/EmployeurAwareTrait.php index e364dc63127d0ae6f22077ed72ca6490d34c6169..e230a86231bb54f9d24e3c029353aeeae899c141 100755 --- a/module/Application/src/Entity/Db/Traits/EmployeurAwareTrait.php +++ b/module/Dossier/src/Entity/Db/Traits/EmployeurAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace Dossier\Entity\Db\Traits; -use Application\Entity\Db\Employeur; +use Dossier\Entity\Db\Employeur; /** * Description of EmployeurAwareTrait @@ -20,7 +20,7 @@ trait EmployeurAwareTrait * * @return self */ - public function setEmployeur( ?Employeur $employeur ) + public function setEmployeur(?Employeur $employeur) { $this->employeur = $employeur; diff --git a/module/Application/src/Entity/Db/Traits/TblDossierAwareTrait.php b/module/Dossier/src/Entity/Db/Traits/TblDossierAwareTrait.php similarity index 74% rename from module/Application/src/Entity/Db/Traits/TblDossierAwareTrait.php rename to module/Dossier/src/Entity/Db/Traits/TblDossierAwareTrait.php index bcfa0f1fc6caaa53512d723d120b3098d28c5dc9..ef5fd78174923a1a48d32e0c60bcc663ee7af29e 100755 --- a/module/Application/src/Entity/Db/Traits/TblDossierAwareTrait.php +++ b/module/Dossier/src/Entity/Db/Traits/TblDossierAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace Dossier\Entity\Db\Traits; -use Application\Entity\Db\TblDossier; +use Dossier\Entity\Db\TblDossier; /** * Description of TblDossierAwareTrait @@ -20,7 +20,7 @@ trait TblDossierAwareTrait * * @return self */ - public function setTblDossier( ?TblDossier $tblDossier ) + public function setTblDossier(?TblDossier $tblDossier) { $this->tblDossier = $tblDossier; diff --git a/module/Application/src/Form/Intervenant/AutresForm.php b/module/Dossier/src/Form/AutresForm.php similarity index 87% rename from module/Application/src/Form/Intervenant/AutresForm.php rename to module/Dossier/src/Form/AutresForm.php index 9520f2b9c39a6b76778fbfd008aaf72c3940553a..ba291cd4e63c81413b2a080f0159f5084a9297a3 100755 --- a/module/Application/src/Form/Intervenant/AutresForm.php +++ b/module/Dossier/src/Form/AutresForm.php @@ -1,10 +1,10 @@ <?php -namespace Application\Form\Intervenant; +namespace Dossier\Form; use Application\Form\AbstractForm; -use Application\Hydrator\DossierAutreHydrator; -use Application\Service\Traits\DossierAutreTypeServiceAwareTrait; +use Dossier\Hydrator\DossierAutreHydrator; +use Dossier\Service\Traits\DossierAutreTypeServiceAwareTrait; use Laminas\Form\Element\Csrf; @@ -96,7 +96,7 @@ class AutresForm extends AbstractForm 'name' => 'submit', 'type' => 'Submit', 'attributes' => [ - 'value' => 'Appliquer', + 'value' => 'Enregistrer', 'class' => 'btn btn-primary', 'id' => 'btn-save', ], @@ -107,12 +107,6 @@ class AutresForm extends AbstractForm - /** - * Should return an array specification compatible with - * {@link Laminas\InputFilter\Factory::createInputFilter()}. - * - * @return array - */ public function getInputFilterSpecification() { return []; diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierAutresFieldset.php b/module/Dossier/src/Form/DossierAutresFieldset.php similarity index 96% rename from module/Application/src/Form/Intervenant/Dossier/DossierAutresFieldset.php rename to module/Dossier/src/Form/DossierAutresFieldset.php index 66dae915b822df7475a621917709b747e72fddf6..00453eea5156f542df9bee72dd56e0b2a6757d93 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierAutresFieldset.php +++ b/module/Dossier/src/Form/DossierAutresFieldset.php @@ -1,10 +1,10 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; use Application\Form\AbstractFieldset; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DossierAutreServiceAwareTrait; +use Dossier\Service\Traits\DossierAutreServiceAwareTrait; use Intervenant\Service\StatutServiceAwareTrait; use Laminas\Form\Element\Select; diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierBancaireFieldset.php b/module/Dossier/src/Form/DossierBancaireFieldset.php similarity index 96% rename from module/Application/src/Form/Intervenant/Dossier/DossierBancaireFieldset.php rename to module/Dossier/src/Form/DossierBancaireFieldset.php index 45d228a57fa8e60e45e87ad56e0ce29111b0e157..c6c7a9fca755bf9aa5f0a2b41c72aed9362145fd 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierBancaireFieldset.php +++ b/module/Dossier/src/Form/DossierBancaireFieldset.php @@ -1,10 +1,10 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; use Application\Form\AbstractFieldset; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Validator\RIBValidator; +use Dossier\Validator\RIBValidator; use UnicaenApp\Validator\RIB; /** diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierContactFieldset.php b/module/Dossier/src/Form/DossierContactFieldset.php similarity index 95% rename from module/Application/src/Form/Intervenant/Dossier/DossierContactFieldset.php rename to module/Dossier/src/Form/DossierContactFieldset.php index 5dab94b6a8018aa3dd6bcabef0ceb0a9b954ab81..f225f1515684fb23433c404c07aba11183292000 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierContactFieldset.php +++ b/module/Dossier/src/Form/DossierContactFieldset.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; -use Application\Entity\Db\IntervenantDossier; +use Dossier\Entity\Db\IntervenantDossier; use Intervenant\Entity\Db\Statut; use Application\Form\AbstractFieldset; use Application\Service\Traits\ContextServiceAwareTrait; @@ -125,12 +125,6 @@ class DossierContactFieldset extends AbstractFieldset - /** - * Should return an array specification compatible with - * {@link Laminas\InputFilter\Factory::createInputFilter()}. - * - * @return array - */ public function getInputFilterSpecification() { $spec = [ diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierIdentiteComplementaireFieldset.php b/module/Dossier/src/Form/DossierIdentiteComplementaireFieldset.php similarity index 91% rename from module/Application/src/Form/Intervenant/Dossier/DossierIdentiteComplementaireFieldset.php rename to module/Dossier/src/Form/DossierIdentiteComplementaireFieldset.php index 8840ca4e066f53f8f4d6ffc719e2db1755c357ce..1594761250d7816339e20bef5e476975f11588c2 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierIdentiteComplementaireFieldset.php +++ b/module/Dossier/src/Form/DossierIdentiteComplementaireFieldset.php @@ -1,18 +1,15 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; -use Application\Entity\Db\Pays; use Application\Form\AbstractFieldset; -use Application\Form\CustomElements\PaysSelect; -use Application\Form\Intervenant\IntervenantDossier; use Application\Service\Traits\CiviliteServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\DepartementServiceAwareTrait; use Application\Service\Traits\PaysServiceAwareTrait; use Intervenant\Service\StatutServiceAwareTrait; -use Application\Validator\DepartementNaissanceValidator; -use Application\Validator\PaysNaissanceValidator; +use Dossier\Validator\DepartementNaissanceValidator; +use Dossier\Validator\PaysNaissanceValidator; use Application\Constants; use Laminas\Validator\Date as DateValidator; @@ -31,6 +28,7 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset static private $franceId; + public function init() { /** @@ -70,7 +68,7 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset ]); $this->get('paysNaissance') - ->setValueOptions(['' => '(Sélectionnez un pays)'] + \UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getListValide())); + ->setValueOptions(['' => '(Sélectionnez un pays)'] + \UnicaenApp\Util::collectionAsOptions($this->getServicePays()->getList())); /** * Pays nationalité @@ -137,19 +135,14 @@ class DossierIdentiteComplementaireFieldset extends AbstractFieldset } - /** - * Should return an array specification compatible with - * {@link Laminas\InputFilter\Factory::createInputFilter()}. - * - * @return array - */ + public function getInputFilterSpecification() { $paysNaissanceId = (int)$this->get('paysNaissance')->getValue(); // la sélection du département n'est obligatoire que si le pays sélectionné est la France $departementRequired = (self::$franceId === $paysNaissanceId); - $spec = []; + $spec = []; $spec = [ 'dateNaissance' => [ diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierIdentiteFieldset.php b/module/Dossier/src/Form/DossierIdentiteFieldset.php similarity index 91% rename from module/Application/src/Form/Intervenant/Dossier/DossierIdentiteFieldset.php rename to module/Dossier/src/Form/DossierIdentiteFieldset.php index 835f571782a1f4f59dc4b56fb0559490d90ae8f1..534d698b72df3608db37795ce6e10b46351f3012 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierIdentiteFieldset.php +++ b/module/Dossier/src/Form/DossierIdentiteFieldset.php @@ -1,10 +1,8 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; use Application\Form\AbstractFieldset; -use Application\Form\CustomElements\PaysSelect; -use Application\Form\Intervenant\IntervenantDossier; use Application\Service\Traits\CiviliteServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\DepartementServiceAwareTrait; @@ -106,12 +104,6 @@ class DossierIdentiteFieldset extends AbstractFieldset - /** - * Should return an array specification compatible with - * {@link Laminas\InputFilter\Factory::createInputFilter()}. - * - * @return array - */ public function getInputFilterSpecification() { diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierInseeFieldset.php b/module/Dossier/src/Form/DossierInseeFieldset.php similarity index 97% rename from module/Application/src/Form/Intervenant/Dossier/DossierInseeFieldset.php rename to module/Dossier/src/Form/DossierInseeFieldset.php index 5c9ca2e718ce2e9d27ff20bdf44885165725361c..d4c1ec0f735053fa4c83b3db3179a4b6e71a2466 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierInseeFieldset.php +++ b/module/Dossier/src/Form/DossierInseeFieldset.php @@ -1,10 +1,10 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; use Application\Form\AbstractFieldset; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Validator\NumeroINSEEValidator; +use Dossier\Validator\NumeroINSEEValidator; /** * Description of DossierInseeFieldset diff --git a/module/Application/src/Form/Intervenant/Dossier/DossierStatutFieldset.php b/module/Dossier/src/Form/DossierStatutFieldset.php similarity index 92% rename from module/Application/src/Form/Intervenant/Dossier/DossierStatutFieldset.php rename to module/Dossier/src/Form/DossierStatutFieldset.php index 69556d3e50618bda26a7a4634ada541c98e0cfa7..15d90899fb4612dab5b366de36ca3583500a7aa4 100755 --- a/module/Application/src/Form/Intervenant/Dossier/DossierStatutFieldset.php +++ b/module/Dossier/src/Form/DossierStatutFieldset.php @@ -1,6 +1,6 @@ <?php -namespace Application\Form\Intervenant\Dossier; +namespace Dossier\Form; use Intervenant\Entity\Db\Statut; use Application\Form\AbstractFieldset; @@ -24,6 +24,7 @@ class DossierStatutFieldset extends AbstractFieldset } + private function addElements() { @@ -42,14 +43,15 @@ class DossierStatutFieldset extends AbstractFieldset 'type' => 'Select', ]); + /** @var Statut $statut */ - $statut = $this->getOption('statut'); + $statut = $this->getOption('statut'); $intervenant = $this->getOption('intervenant'); /*On va chercher les statuts que l'intervenant possède déjà pour ne pas les afficher dans la liste, car il ne peut pas avoir deux fois le même statut*/ $intervernants = $this->getServiceIntervenant()->getIntervenants($intervenant); - $statuts = []; + $statuts = []; foreach ($intervernants as $intervenant) { if ($intervenant->estNonHistorise() && $intervenant->getStatut()) { $statuts[] = $intervenant->getStatut()->getCode(); @@ -64,11 +66,12 @@ class DossierStatutFieldset extends AbstractFieldset } + public function getInputFilterSpecification() { $spec = [ 'statut' => [ - 'required' => true, + 'required' => false, ], ]; diff --git a/module/Application/src/Form/Employeur/EmployeurFieldset.php b/module/Dossier/src/Form/EmployeurFieldset.php similarity index 96% rename from module/Application/src/Form/Employeur/EmployeurFieldset.php rename to module/Dossier/src/Form/EmployeurFieldset.php index 4fcee0047827bcba064ee34a65cbcfafd560c9b3..69d5f911ac6882ed53e91d9cf77c5eef807dc2cf 100755 --- a/module/Application/src/Form/Employeur/EmployeurFieldset.php +++ b/module/Dossier/src/Form/EmployeurFieldset.php @@ -1,6 +1,6 @@ <?php -namespace Application\Form\Employeur; +namespace Dossier\Form; use Application\Form\AbstractFieldset; use Application\Service\Traits\ContextServiceAwareTrait; diff --git a/module/Application/src/Form/Employeur/EmployeurSaisieForm.php b/module/Dossier/src/Form/EmployeurSaisieForm.php similarity index 93% rename from module/Application/src/Form/Employeur/EmployeurSaisieForm.php rename to module/Dossier/src/Form/EmployeurSaisieForm.php index 55626e3d7901ce9230e8f5c528a6a5d0e2eab60e..dbcaac7ea77910c46185d3c4895cf056e95d8497 100644 --- a/module/Application/src/Form/Employeur/EmployeurSaisieForm.php +++ b/module/Dossier/src/Form/EmployeurSaisieForm.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\Employeur; +namespace Dossier\Form; -use Application\Entity\Db\Employeur; +use Dossier\Entity\Db\Employeur; use Application\Form\AbstractForm; use Laminas\Form\FormInterface; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; @@ -25,6 +25,7 @@ class EmployeurSaisieForm extends AbstractForm } + public function bind($object, $flags = FormInterface::VALUES_NORMALIZED) { /* @var $object Employeur */ diff --git a/module/Dossier/src/Form/Factory/AutresFormFactory.php b/module/Dossier/src/Form/Factory/AutresFormFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..6301eb5401de3ac887e881d069d0773358f2eb69 --- /dev/null +++ b/module/Dossier/src/Form/Factory/AutresFormFactory.php @@ -0,0 +1,28 @@ +<?php + +namespace Dossier\Form\Factory; + +use Dossier\Form\AutresForm; +use Psr\Container\ContainerInterface; + + +/** + * Description of ModeleFormFactory + * + * @author LE COURTES Antony <antony.lecourtes at unicaen.fr> + */ +class AutresFormFactory +{ + + protected $options; + + + + public function __invoke(ContainerInterface $container, $requestedName, $options = null) + { + $form = new AutresForm(); + + return $form; + } + +} \ No newline at end of file diff --git a/module/Application/src/Form/Employeur/EmployeurSaisieFormFactory.php b/module/Dossier/src/Form/Factory/EmployeurSaisieFormFactory.php similarity index 74% rename from module/Application/src/Form/Employeur/EmployeurSaisieFormFactory.php rename to module/Dossier/src/Form/Factory/EmployeurSaisieFormFactory.php index 6f162ee497db230e50053b10edc59883191abad6..bfa56cdfd7936186bae0d27a6b7f792028ee4efd 100755 --- a/module/Application/src/Form/Employeur/EmployeurSaisieFormFactory.php +++ b/module/Dossier/src/Form/Factory/EmployeurSaisieFormFactory.php @@ -1,7 +1,8 @@ <?php -namespace Application\Form\Employeur; +namespace Dossier\Form\Factory; +use Dossier\Form\EmployeurSaisieForm; use Psr\Container\ContainerInterface; use UnicaenImport\Service\SchemaService; @@ -11,8 +12,8 @@ class EmployeurSaisieFormFactory /** * @param ContainerInterface $container - * @param string $requestedName - * @param array|null $options + * @param string $requestedName + * @param array|null $options * * @return EmployeurSaisieForm */ diff --git a/module/Application/src/Form/Intervenant/Factory/IntervenantDossierFormFactory.php b/module/Dossier/src/Form/Factory/IntervenantDossierFormFactory.php similarity index 79% rename from module/Application/src/Form/Intervenant/Factory/IntervenantDossierFormFactory.php rename to module/Dossier/src/Form/Factory/IntervenantDossierFormFactory.php index 8b9aaff4a5b2663bb23cbfd75597abc4508ef123..77ec78583fbfffa1aec9312c682119ba46d240a6 100755 --- a/module/Application/src/Form/Intervenant/Factory/IntervenantDossierFormFactory.php +++ b/module/Dossier/src/Form/Factory/IntervenantDossierFormFactory.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\Intervenant\Factory; +namespace Dossier\Form\Factory; -use Application\Form\Intervenant\IntervenantDossierForm; +use Dossier\Form\IntervenantDossierForm; use Psr\Container\ContainerInterface; @@ -17,6 +17,7 @@ class IntervenantDossierFormFactory protected $options; + public function __invoke(ContainerInterface $container, $requestedName, $options = null) { $form = new IntervenantDossierForm; diff --git a/module/Application/src/Form/Intervenant/IntervenantDossierForm.php b/module/Dossier/src/Form/IntervenantDossierForm.php similarity index 86% rename from module/Application/src/Form/Intervenant/IntervenantDossierForm.php rename to module/Dossier/src/Form/IntervenantDossierForm.php index 318da794b48c04646b506049a565d24787a4dfa8..3b1c73a66d0506b892b98795611e9e305965e184 100755 --- a/module/Application/src/Form/Intervenant/IntervenantDossierForm.php +++ b/module/Dossier/src/Form/IntervenantDossierForm.php @@ -1,25 +1,16 @@ <?php -namespace Application\Form\Intervenant; +namespace Dossier\Form; use Application\Entity\Db\Intervenant; use Application\Form\AbstractFieldset; use Application\Form\AbstractForm; -use Application\Form\Employeur\EmployeurFieldset; use Application\Form\Adresse\AdresseFieldset; -use Application\Form\Intervenant\Dossier\DossierAutresFieldset; -use Application\Form\Intervenant\Dossier\DossierBancaireFieldset; -use Application\Form\Intervenant\Dossier\DossierContactFieldset; -use Application\Form\Intervenant\Dossier\DossierIdentiteComplementaireFieldset; -use Application\Form\Intervenant\Dossier\DossierIdentiteFieldset; -use Application\Form\Intervenant\Dossier\DossierInseeFieldset; -use Application\Form\Intervenant\Dossier\DossierStatutFieldset; -use Application\Hydrator\IntervenantDossierHydrator; +use Dossier\Hydrator\IntervenantDossierHydrator; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Enseignement\Service\ServiceServiceAwareTrait; use Intervenant\Service\StatutServiceAwareTrait; -use Application\Validator\NumeroINSEEValidator; use Laminas\Form\Element\Csrf; /** diff --git a/module/Application/src/Form/Intervenant/Traits/AutresFormAwareTrait.php b/module/Dossier/src/Form/Traits/AutresFormAwareTrait.php similarity index 88% rename from module/Application/src/Form/Intervenant/Traits/AutresFormAwareTrait.php rename to module/Dossier/src/Form/Traits/AutresFormAwareTrait.php index 24b31db5e2c08720d42ffe569fb1c0293ed96cf3..a8272419c3598461e114cb2b9ca46367423123b6 100755 --- a/module/Application/src/Form/Intervenant/Traits/AutresFormAwareTrait.php +++ b/module/Dossier/src/Form/Traits/AutresFormAwareTrait.php @@ -1,8 +1,9 @@ <?php -namespace Application\Form\Intervenant\Traits; +namespace Dossier\Form\Traits; -use Application\Form\Intervenant\AutresForm; + +use Dossier\Form\AutresForm; /** * Description of AutresFormAwareTrait diff --git a/module/Application/src/Form/Employeur/Traits/EmployeurSaisieFormAwareTrait.php b/module/Dossier/src/Form/Traits/EmployeurSaisieFormAwareTrait.php similarity index 87% rename from module/Application/src/Form/Employeur/Traits/EmployeurSaisieFormAwareTrait.php rename to module/Dossier/src/Form/Traits/EmployeurSaisieFormAwareTrait.php index d576101f6e0c8d7058c78d6eca6ee66eda6ec9f3..93591952b93bc9dd25094eecbfec43aebec39b7f 100755 --- a/module/Application/src/Form/Employeur/Traits/EmployeurSaisieFormAwareTrait.php +++ b/module/Dossier/src/Form/Traits/EmployeurSaisieFormAwareTrait.php @@ -1,14 +1,15 @@ <?php -namespace Application\Form\Employeur\Traits; +namespace Dossier\Form\Traits; -use Application\Form\Employeur\EmployeurSaisieForm; +use Dossier\Form\EmployeurSaisieForm; trait EmployeurSaisieFormAwareTrait { protected ?EmployeurSaisieForm $formEmployeurSaisie = null; + /** * @param EmployeurSaisieForm $formEmployeurSaisie * @@ -22,6 +23,7 @@ trait EmployeurSaisieFormAwareTrait } + public function getFormEmployeurSaisie(): ?EmployeurSaisieForm { if (!empty($this->formEmployeurSaisie)) { diff --git a/module/Application/src/Form/Intervenant/Traits/IntervenantDossierFormAwareTrait.php b/module/Dossier/src/Form/Traits/IntervenantDossierFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/Intervenant/Traits/IntervenantDossierFormAwareTrait.php rename to module/Dossier/src/Form/Traits/IntervenantDossierFormAwareTrait.php index b01ec2bc0a3f845654ef8c571a182272d2bc0454..83fe4a4051a00b10a027e9cdf10b86a6e41d83ef 100755 --- a/module/Application/src/Form/Intervenant/Traits/IntervenantDossierFormAwareTrait.php +++ b/module/Dossier/src/Form/Traits/IntervenantDossierFormAwareTrait.php @@ -1,8 +1,9 @@ <?php -namespace Application\Form\Intervenant\Traits; +namespace Dossier\Form\Traits; -use Application\Form\Intervenant\IntervenantDossierForm; + +use Dossier\Form\IntervenantDossierForm; /** * Description of IntervenantDossierFormAwareTrait diff --git a/module/Application/src/Hydrator/DossierAutreHydrator.php b/module/Dossier/src/Hydrator/DossierAutreHydrator.php similarity index 82% rename from module/Application/src/Hydrator/DossierAutreHydrator.php rename to module/Dossier/src/Hydrator/DossierAutreHydrator.php index a4734a55dfd299c0fc7c3ead861c97f67c32b87e..233f709d0e19361d6c589a58dbdc92b4ed77fc18 100644 --- a/module/Application/src/Hydrator/DossierAutreHydrator.php +++ b/module/Dossier/src/Hydrator/DossierAutreHydrator.php @@ -1,9 +1,9 @@ <?php -namespace Application\Hydrator; +namespace Dossier\Hydrator; -use Application\Service\Traits\DossierAutreTypeServiceAwareTrait; +use Dossier\Service\Traits\DossierAutreTypeServiceAwareTrait; use Laminas\Hydrator\HydratorInterface; class DossierAutreHydrator implements HydratorInterface @@ -14,8 +14,8 @@ class DossierAutreHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data - * @param \Application\Entity\Db\DossierAutre $object + * @param array $data + * @param \Dossier\Entity\Db\DossierAutre $object * * @return object */ @@ -38,7 +38,7 @@ class DossierAutreHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\DossierAutre $object + * @param \Dossier\Entity\Db\DossierAutre $object * * @return array */ diff --git a/module/Application/src/Hydrator/IntervenantDossierHydrator.php b/module/Dossier/src/Hydrator/IntervenantDossierHydrator.php similarity index 98% rename from module/Application/src/Hydrator/IntervenantDossierHydrator.php rename to module/Dossier/src/Hydrator/IntervenantDossierHydrator.php index 439895818d762274aee9066b8956e525d573366c..cb547a501fa18572b3c293b7ddfe821373230dd8 100755 --- a/module/Application/src/Hydrator/IntervenantDossierHydrator.php +++ b/module/Dossier/src/Hydrator/IntervenantDossierHydrator.php @@ -1,13 +1,13 @@ <?php -namespace Application\Hydrator; +namespace Dossier\Hydrator; -use Application\Entity\Db\IntervenantDossier; +use Dossier\Entity\Db\IntervenantDossier; use Intervenant\Entity\Db\Statut; use Application\Service\Traits\AdresseNumeroComplServiceAwareTrait; use Application\Service\Traits\CiviliteServiceAwareTrait; use Application\Service\Traits\DepartementServiceAwareTrait; -use Application\Service\Traits\EmployeurServiceAwareTrait; +use Dossier\Service\Traits\EmployeurServiceAwareTrait; use Application\Service\Traits\PaysServiceAwareTrait; use Intervenant\Service\StatutServiceAwareTrait; use Application\Service\Traits\VoirieServiceAwareTrait; diff --git a/module/Application/src/Service/DossierAutreService.php b/module/Dossier/src/Service/DossierAutreService.php similarity index 81% rename from module/Application/src/Service/DossierAutreService.php rename to module/Dossier/src/Service/DossierAutreService.php index 5d2dbf5b5e121295c37bfa51f4a01ff4ac67401f..79a163fde359eda0c6656a6352d59227c17afba0 100755 --- a/module/Application/src/Service/DossierAutreService.php +++ b/module/Dossier/src/Service/DossierAutreService.php @@ -1,15 +1,11 @@ <?php -namespace Application\Service; - -use Application\Entity\Db\Dossier; -use Application\Entity\Db\DossierAutre; -use Application\Entity\Db\Modulateur; -use Application\Entity\Db\ElementPedagogique; -use Application\Service\Traits\ElementModulateurServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; +namespace Dossier\Service; + + +use Application\Service\AbstractEntityService; +use Dossier\Entity\Db\DossierAutre; use Doctrine\ORM\QueryBuilder; -use http\Exception; /** @@ -30,7 +26,7 @@ class DossierAutreService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\DossierAutre::class; + return \Dossier\Entity\Db\DossierAutre::class; } diff --git a/module/Dossier/src/Service/DossierAutreServiceFactory.php b/module/Dossier/src/Service/DossierAutreServiceFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..b7f7cebb705b09a37a939ab713f02e387499f48d --- /dev/null +++ b/module/Dossier/src/Service/DossierAutreServiceFactory.php @@ -0,0 +1,28 @@ +<?php + +namespace Dossier\Service; + +use Application\Constants; +use Psr\Container\ContainerInterface; + + +class DossierAutreServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DossierAutreService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DossierAutreService + { + $service = new DossierAutreService(); + $service->setEntityManager($container->get(Constants::BDD)); + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/Application/src/Service/DossierAutreTypeService.php b/module/Dossier/src/Service/DossierAutreTypeService.php similarity index 77% rename from module/Application/src/Service/DossierAutreTypeService.php rename to module/Dossier/src/Service/DossierAutreTypeService.php index 0c1d7d14ed4947f46824ddf3a1555c3681ff8f01..c74787ba86904aff6f1df6cf00baa34e7e83ae03 100755 --- a/module/Application/src/Service/DossierAutreTypeService.php +++ b/module/Dossier/src/Service/DossierAutreTypeService.php @@ -1,8 +1,11 @@ <?php -namespace Application\Service; +namespace Dossier\Service; +use Application\Service\AbstractEntityService; +use Dossier\Entity\Db\DossierAutreType; + /** * Description of DossierAutreTypeService * @@ -19,7 +22,7 @@ class DossierAutreTypeService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\DossierAutreType::class; + return DossierAutreType::class; } diff --git a/module/Dossier/src/Service/DossierAutreTypeServiceFactory.php b/module/Dossier/src/Service/DossierAutreTypeServiceFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..475b1858a3b410e35fb6ff4ee3b7a53757c6e457 --- /dev/null +++ b/module/Dossier/src/Service/DossierAutreTypeServiceFactory.php @@ -0,0 +1,28 @@ +<?php + +namespace Dossier\Service; + +use Application\Constants; +use Psr\Container\ContainerInterface; + + +class DossierAutreTypeServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DossierAutreTypeService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DossierAutreTypeService + { + $service = new DossierAutreTypeService(); + $service->setEntityManager($container->get(Constants::BDD)); + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/Application/src/Service/DossierService.php b/module/Dossier/src/Service/DossierService.php similarity index 74% rename from module/Application/src/Service/DossierService.php rename to module/Dossier/src/Service/DossierService.php index 05fa14cb8f6b1b9959d4bdceac7a619360afbd4b..cb2ef0974236682b8f76013fd1d19765a1fec8f7 100755 --- a/module/Application/src/Service/DossierService.php +++ b/module/Dossier/src/Service/DossierService.php @@ -1,10 +1,11 @@ <?php -namespace Application\Service; +namespace Dossier\Service; +use Application\Service\AbstractEntityService; use Indicateur\Entity\Db\IndicModifDossier; use Application\Entity\Db\Intervenant; -use Application\Entity\Db\IntervenantDossier; +use Dossier\Entity\Db\IntervenantDossier; use Application\Entity\Db\Utilisateur; use Application\Entity\Db\TypeValidation; use Application\Entity\Db\Validation; @@ -19,9 +20,9 @@ use Application\Service\Traits\ValidationServiceAwareTrait; * * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr> * - * @method Dossier get($id) - * @method Dossier[] getList(\Doctrine\ORM\QueryBuilder $qb = null, $alias = null) - * @method Dossier newEntity() + * @method IntervenantDossier get($id) + * @method IntervenantDossier[] getList(\Doctrine\ORM\QueryBuilder $qb = null, $alias = null) + * @method IntervenantDossier newEntity() */ class DossierService extends AbstractEntityService { @@ -33,11 +34,12 @@ class DossierService extends AbstractEntityService /** - * @var Dossier[] + * @var IntervenantDossier[] */ private $dcache = []; + /** * retourne la classe des entités * @@ -50,6 +52,7 @@ class DossierService extends AbstractEntityService } + /** * Retourne l'alias d'entité courante * @@ -61,6 +64,7 @@ class DossierService extends AbstractEntityService } + /** * @param Intervenant $intervenant * @@ -77,12 +81,14 @@ class DossierService extends AbstractEntityService foreach ($this->getList($qb) as $dossier) { return $dossier; } - $dossier = $this->newEntity()->fromIntervenant($intervenant); + $dossier = $this->newEntity()->fromIntervenant($intervenant); $this->dcache[$intervenant->getId()] = $dossier; return $dossier; } + + public function getEmailsIntervenant(Intervenant $intervenant) { $emails = [ @@ -98,26 +104,26 @@ class DossierService extends AbstractEntityService //Si pas de dossier alors on prend les informations de la fiche intervenant if (!empty($res)) { $emailsIntervenantDossierPerso = $res['EMAIL_PERSO'] ?? ''; - $emailsIntervenantDossierPro = $res['EMAIL_PRO'] ?? ''; + $emailsIntervenantDossierPro = $res['EMAIL_PRO'] ?? ''; } $emailsIntervenantPerso = $intervenant->getEmailPerso(); - $emailsIntervenantPro = $intervenant->getEmailPro(); + $emailsIntervenantPro = $intervenant->getEmailPro(); $emails['perso'] = (!empty($emailsIntervenantDossierPerso)) ? $emailsIntervenantDossierPerso : $emailsIntervenantPerso; - $emails['pro'] = (!empty($emailsIntervenantDossierPro)) ? $emailsIntervenantDossierPro : $emailsIntervenantPro; + $emails['pro'] = (!empty($emailsIntervenantDossierPro)) ? $emailsIntervenantDossierPro : $emailsIntervenantPro; return $emails; - } + /** * Enregistrement d'un dossier. * * NB: tout le travail est déjà fait via un formulaire en fait! * Cette méthode existe surtout pour déclencher l'événement de workflow. * - * @param \Application\Entity\Db\IntervenantDossier $dossier + * @param \Dossier\Entity\Db\IntervenantDossier $dossier */ public function enregistrerDossier(IntervenantDossier $dossier) { @@ -129,6 +135,7 @@ class DossierService extends AbstractEntityService } + /** * Détermine si l'intervenant courant était connu comme vacataire les années précédentes * dans l'application. @@ -154,6 +161,7 @@ class DossierService extends AbstractEntityService } + /** * Retourne la validation d'un dossier d'intervenant * @@ -163,9 +171,9 @@ class DossierService extends AbstractEntityService */ public function getValidation(Intervenant $intervenant) { - $validation = null; + $validation = null; $serviceValidation = $this->getServiceValidation(); - $qb = $serviceValidation->finderByType(TypeValidation::CODE_DONNEES_PERSO); + $qb = $serviceValidation->finderByType(TypeValidation::CODE_DONNEES_PERSO); $serviceValidation->finderByHistorique($qb); $serviceValidation->finderByIntervenant($intervenant, $qb); $validations = $serviceValidation->getList($qb); @@ -177,6 +185,7 @@ class DossierService extends AbstractEntityService } + /** * Suppression (historisation) de l'historique des modifications sur les données perso d'un intervenant. * @@ -205,11 +214,12 @@ class DossierService extends AbstractEntityService } + /** * Methode qui compare les données de la fiche intervenant et celle du dossier intervenant pour alimenter * la table INDIC_MODIF_DOSSIER ( * - * @param Intervenant $intervenant + * @param Intervenant $intervenant * @param IntervenantDossier $intervenantDossier * * @return boolean @@ -221,9 +231,9 @@ class DossierService extends AbstractEntityService $indicModifDossierCollection = $intervenant->getIndicModifDossier(); $indicModifDossierInProgress = []; - $sourceOse = $this->getServiceSource()->getOse()->getCode(); - $sourceIntervenant = $intervenant->getSource()->getCode(); - $em = $this->getEntityManager(); + $sourceOse = $this->getServiceSource()->getOse()->getCode(); + $sourceIntervenant = $intervenant->getSource()->getCode(); + $em = $this->getEntityManager(); /** * @var $indicModifDossier IndicModifDossier @@ -234,38 +244,38 @@ class DossierService extends AbstractEntityService } } - $newDatas = []; - $oldDatas = []; + $newDatas = []; + $oldDatas = []; $newDatas['NOM_PATRONYMIQUE'] = ($intervenantDossier->getNomPatronymique()) ? trim(strtolower($intervenantDossier->getNomPatronymique())) : '(aucun)'; - $newDatas['NOM_USUEL'] = ($intervenantDossier->getNomUsuel()) ? trim(strtolower($intervenantDossier->getNomUsuel())) : '(aucun)'; - $newDatas['CIVILITE'] = ($intervenantDossier->getCivilite()) ? trim(strtolower($intervenantDossier->getCivilite()->getLibelleCourt())) : '(aucun)'; - $newDatas['PRENOM'] = ($intervenantDossier->getPrenom()) ? trim(strtolower($intervenantDossier->getPrenom())) : '(aucun)'; - $newDatas['DATE_NAISSANCE'] = ($intervenantDossier->getDateNaissance()) ? $intervenantDossier->getDateNaissance()->format('d/m/Y') : '(aucun)'; + $newDatas['NOM_USUEL'] = ($intervenantDossier->getNomUsuel()) ? trim(strtolower($intervenantDossier->getNomUsuel())) : '(aucun)'; + $newDatas['CIVILITE'] = ($intervenantDossier->getCivilite()) ? trim(strtolower($intervenantDossier->getCivilite()->getLibelleCourt())) : '(aucun)'; + $newDatas['PRENOM'] = ($intervenantDossier->getPrenom()) ? trim(strtolower($intervenantDossier->getPrenom())) : '(aucun)'; + $newDatas['DATE_NAISSANCE'] = ($intervenantDossier->getDateNaissance()) ? $intervenantDossier->getDateNaissance()->format('d/m/Y') : '(aucun)'; /*Nettoyage et normalisation du RIB pour comparaison*/ - $rib = ($intervenantDossier->getRib()) ? trim(strtolower($intervenantDossier->getRib())) : '(aucun)'; - $rib = str_replace(' ', '', $rib); - $newDatas['RIB'] = $rib; + $rib = ($intervenantDossier->getRib()) ? trim(strtolower($intervenantDossier->getRib())) : '(aucun)'; + $rib = str_replace(' ', '', $rib); + $newDatas['RIB'] = $rib; $intervenantDossierAdresse = $intervenantDossier->getAdresse(); /*Normalisation et nettoyage de l'adresse pour comparaison*/ $intervenantDossierAdresse = trim(strtolower($intervenantDossierAdresse)); $intervenantDossierAdresse = str_replace(["\r\n", "\n", "\r", ",", "'"], ' ', $intervenantDossierAdresse); $intervenantDossierAdresse = preg_replace('/\s\s+/', ' ', $intervenantDossierAdresse); - $newDatas['ADRESSE'] = (!empty($intervenantDossierAdresse)) ? $intervenantDossierAdresse : '(aucun)'; + $newDatas['ADRESSE'] = (!empty($intervenantDossierAdresse)) ? $intervenantDossierAdresse : '(aucun)'; $oldDatas['NOM_PATRONYMIQUE'] = ($intervenant->getNomPatronymique()) ? trim(strtolower($intervenant->getNomPatronymique())) : '(aucun)'; - $oldDatas['NOM_USUEL'] = ($intervenant->getNomUsuel()) ? trim(strtolower($intervenant->getNomUsuel())) : '(aucun)'; - $oldDatas['CIVILITE'] = ($intervenant->getCivilite()) ? trim(strtolower($intervenant->getCivilite()->getLibelleCourt())) : '(aucun)'; - $oldDatas['PRENOM'] = ($intervenant->getPrenom()) ? trim(strtolower($intervenant->getPrenom())) : '(aucun)'; - $oldDatas['DATE_NAISSANCE'] = ($intervenant->getDateNaissance()) ? $intervenant->getDateNaissance()->format('d/m/Y') : '(aucun)'; + $oldDatas['NOM_USUEL'] = ($intervenant->getNomUsuel()) ? trim(strtolower($intervenant->getNomUsuel())) : '(aucun)'; + $oldDatas['CIVILITE'] = ($intervenant->getCivilite()) ? trim(strtolower($intervenant->getCivilite()->getLibelleCourt())) : '(aucun)'; + $oldDatas['PRENOM'] = ($intervenant->getPrenom()) ? trim(strtolower($intervenant->getPrenom())) : '(aucun)'; + $oldDatas['DATE_NAISSANCE'] = ($intervenant->getDateNaissance()) ? $intervenant->getDateNaissance()->format('d/m/Y') : '(aucun)'; /*Nettoyage et normalisation du RIB pour comparaison*/ - $rib = ($intervenant->getRib()) ? trim(strtolower($intervenant->getRib())) : '(aucun)'; - $rib = str_replace(' ', '', $rib); - $oldDatas['RIB'] = $rib; + $rib = ($intervenant->getRib()) ? trim(strtolower($intervenant->getRib())) : '(aucun)'; + $rib = str_replace(' ', '', $rib); + $oldDatas['RIB'] = $rib; $intervenantAdresse = $intervenant->getAdresse(); /*Normalisation et nettoyage de l'adresse pour comparaison*/ - $intervenantAdresse = trim(strtolower($intervenantAdresse)); - $intervenantAdresse = str_replace(["\r\n", "\n", "\r", ",", "'"], ' ', $intervenantAdresse); - $intervenantAdresse = preg_replace('/\s\s+/', ' ', $intervenantAdresse); + $intervenantAdresse = trim(strtolower($intervenantAdresse)); + $intervenantAdresse = str_replace(["\r\n", "\n", "\r", ",", "'"], ' ', $intervenantAdresse); + $intervenantAdresse = preg_replace('/\s\s+/', ' ', $intervenantAdresse); $oldDatas['ADRESSE'] = (!empty($intervenantAdresse)) ? $intervenantAdresse : '(aucun)'; //On calcule les champs différents diff --git a/module/Dossier/src/Service/DossierServiceFactory.php b/module/Dossier/src/Service/DossierServiceFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..d2406d9a07d5f654af19a48bcc763b9e09f5224d --- /dev/null +++ b/module/Dossier/src/Service/DossierServiceFactory.php @@ -0,0 +1,28 @@ +<?php + +namespace Dossier\Service; + +use Application\Constants; +use Psr\Container\ContainerInterface; + + +class DossierServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DossierService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DossierService + { + $service = new DossierService(); + $service->setEntityManager($container->get(Constants::BDD)); + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/Application/src/Service/EmployeurService.php b/module/Dossier/src/Service/EmployeurService.php similarity index 87% rename from module/Application/src/Service/EmployeurService.php rename to module/Dossier/src/Service/EmployeurService.php index cb4d0e60e137a2d62ceb02460fe8791934b4d679..41f752ff39814b5a3f1393a4f7fa9c4831ecbb00 100644 --- a/module/Application/src/Service/EmployeurService.php +++ b/module/Dossier/src/Service/EmployeurService.php @@ -1,7 +1,8 @@ <?php -namespace Application\Service; +namespace Dossier\Service; +use Application\Service\AbstractEntityService; use UnicaenApp\Util; class EmployeurService extends AbstractEntityService @@ -15,10 +16,11 @@ class EmployeurService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\Employeur::class; + return \Dossier\Entity\Db\Employeur::class; } + /** * Retourne l'alias d'entité courante * @@ -30,6 +32,7 @@ class EmployeurService extends AbstractEntityService } + public function getEmployeurs($limit = 100) { $sql = " @@ -42,6 +45,7 @@ class EmployeurService extends AbstractEntityService } + public function getEmployeursIntervenants() { $sql = " @@ -57,10 +61,11 @@ class EmployeurService extends AbstractEntityService } + public function rechercheEmployeur($criteria = null, $limit = 50) { $employeurs = []; - $criteria = Util::reduce($criteria); + $criteria = Util::reduce($criteria); $sql = " @@ -83,8 +88,8 @@ class EmployeurService extends AbstractEntityService $stmt = $this->getEntityManager()->getConnection()->executeQuery($sql); while ($r = $stmt->fetch()) { - $siren = $r['SIREN']; - $siret = $r['SIRET']; + $siren = $r['SIREN']; + $siret = $r['SIRET']; $employeurs[$r['ID']] = [ 'id' => $r['ID'], 'label' => $r['RAISON_SOCIALE'], @@ -95,7 +100,7 @@ class EmployeurService extends AbstractEntityService ]; } - + return $employeurs; } diff --git a/module/Dossier/src/Service/EmployeurServiceFactory.php b/module/Dossier/src/Service/EmployeurServiceFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..302cb413d4fd9da4ceebdf89e0140962f9c2a376 --- /dev/null +++ b/module/Dossier/src/Service/EmployeurServiceFactory.php @@ -0,0 +1,28 @@ +<?php + +namespace Dossier\Service; + +use Application\Constants; +use Psr\Container\ContainerInterface; + + +class EmployeurServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EmployeurService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EmployeurService + { + $service = new EmployeurService(); + $service->setEntityManager($container->get(Constants::BDD)); + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/Application/src/Service/Traits/DossierAutreServiceAwareTrait.php b/module/Dossier/src/Service/Traits/DossierAutreServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/DossierAutreServiceAwareTrait.php rename to module/Dossier/src/Service/Traits/DossierAutreServiceAwareTrait.php index e0f224908b29271ff225c8e9561fd08286c5c450..59c87657d4ec386dccead536075526cf02d7c2c8 100755 --- a/module/Application/src/Service/Traits/DossierAutreServiceAwareTrait.php +++ b/module/Dossier/src/Service/Traits/DossierAutreServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace Dossier\Service\Traits; -use Application\Service\DossierAutreService; +use Dossier\Service\DossierAutreService; /** * Description of DossierAutreServiceAwareTrait diff --git a/module/Application/src/Service/Traits/DossierAutreTypeServiceAwareTrait.php b/module/Dossier/src/Service/Traits/DossierAutreTypeServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/DossierAutreTypeServiceAwareTrait.php rename to module/Dossier/src/Service/Traits/DossierAutreTypeServiceAwareTrait.php index 9ac7d28aa0d112a2a42224cdb320629e6fd2a3c6..1b9dd5e961a0e142a836bb184e6ceabaa23a4658 100755 --- a/module/Application/src/Service/Traits/DossierAutreTypeServiceAwareTrait.php +++ b/module/Dossier/src/Service/Traits/DossierAutreTypeServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace Dossier\Service\Traits; -use Application\Service\DossierAutreTypeService; +use Dossier\Service\DossierAutreTypeService; /** * Description of DossierAutreTypeServiceAwareTrait diff --git a/module/Application/src/Service/Traits/DossierServiceAwareTrait.php b/module/Dossier/src/Service/Traits/DossierServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/DossierServiceAwareTrait.php rename to module/Dossier/src/Service/Traits/DossierServiceAwareTrait.php index d577ff13128946ef283af4ca02877d71b1bec90d..135443bebf2f5139eaf97e92d324580fe0bbd55c 100755 --- a/module/Application/src/Service/Traits/DossierServiceAwareTrait.php +++ b/module/Dossier/src/Service/Traits/DossierServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace Dossier\Service\Traits; -use Application\Service\DossierService; +use Dossier\Service\DossierService; /** * Description of DossierServiceAwareTrait diff --git a/module/Application/src/Service/Traits/EmployeurServiceAwareTrait.php b/module/Dossier/src/Service/Traits/EmployeurServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/EmployeurServiceAwareTrait.php rename to module/Dossier/src/Service/Traits/EmployeurServiceAwareTrait.php index b0a4522f8f8479c016a475045ec3f0dacbb390f6..0eb165383c5ab1c7d2732a73d37b76b1f5aa33c4 100755 --- a/module/Application/src/Service/Traits/EmployeurServiceAwareTrait.php +++ b/module/Dossier/src/Service/Traits/EmployeurServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace Dossier\Service\Traits; -use Application\Service\EmployeurService; +use Dossier\Service\EmployeurService; /** * Description of EmployeurServiceAwareTrait diff --git a/module/Application/src/Validator/DepartementNaissanceValidator.php b/module/Dossier/src/Validator/DepartementNaissanceValidator.php similarity index 97% rename from module/Application/src/Validator/DepartementNaissanceValidator.php rename to module/Dossier/src/Validator/DepartementNaissanceValidator.php index 079ad0aa9a9877fc2679df6f9ff186b3787cd6b8..e676cec34c6c6f734d8a475595537be69fbcebaa 100755 --- a/module/Application/src/Validator/DepartementNaissanceValidator.php +++ b/module/Dossier/src/Validator/DepartementNaissanceValidator.php @@ -1,6 +1,6 @@ <?php -namespace Application\Validator; +namespace Dossier\Validator; use Application\Entity\Db\Pays; use Application\Service\Traits\PaysServiceAwareTrait; diff --git a/module/Application/src/Validator/NumeroINSEEValidator.php b/module/Dossier/src/Validator/NumeroINSEEValidator.php similarity index 97% rename from module/Application/src/Validator/NumeroINSEEValidator.php rename to module/Dossier/src/Validator/NumeroINSEEValidator.php index 73f94beb8888d7d02daa1b9bad6cf92915e9b895..c44241c286917146be8c13ed676c7bc1b7ee9aaa 100755 --- a/module/Application/src/Validator/NumeroINSEEValidator.php +++ b/module/Dossier/src/Validator/NumeroINSEEValidator.php @@ -1,14 +1,14 @@ <?php -namespace Application\Validator; +namespace Dossier\Validator; -use Application\Constants; use Application\Entity\Db\Civilite; use Application\Entity\Db\Departement; use Application\Entity\Db\Pays; use Application\Service\Traits\CiviliteServiceAwareTrait; use Application\Service\Traits\DepartementServiceAwareTrait; use Application\Service\Traits\PaysServiceAwareTrait; +use UnicaenApp\Form\Element\Date; use UnicaenApp\Validator\NumeroINSEE; /** @@ -102,8 +102,7 @@ class NumeroINSEEValidator extends NumeroINSEE if ($this->civilite && !$this->isValidCivilite()) return false;*/ - $this->dateNaissance = (!empty($dateDeNaissance)) ? - \DateTime::createFromFormat(Constants::DATE_FORMAT, $dateDeNaissance) : null; + $this->dateNaissance = (!empty($dateDeNaissance)) ? \DateTime::createFromFormat(Date::DATE_FORMAT_PHP, $dateDeNaissance) : null; if ($this->dateNaissance && !$this->isValidDateNaissance()) return false; diff --git a/module/Application/src/Validator/PaysNaissanceValidator.php b/module/Dossier/src/Validator/PaysNaissanceValidator.php similarity index 74% rename from module/Application/src/Validator/PaysNaissanceValidator.php rename to module/Dossier/src/Validator/PaysNaissanceValidator.php index 93abf9f2e016f3261cade2b84c3f432e76644502..df87554c7022e79a675af194c4cc94f42336c9b5 100755 --- a/module/Application/src/Validator/PaysNaissanceValidator.php +++ b/module/Dossier/src/Validator/PaysNaissanceValidator.php @@ -1,9 +1,9 @@ <?php -namespace Application\Validator; +namespace Dossier\Validator; use Application\Entity\Db\Pays as PaysEntity; -use Application\Constants; +use Application\Filter\DateTimeFromString; use LogicException; use DateTime; use Laminas\Validator\AbstractValidator; @@ -11,40 +11,46 @@ use Laminas\Validator\AbstractValidator; class PaysNaissanceValidator extends AbstractValidator { const MSG_INVALID = 'msgInvalid'; - - protected $messageTemplates = array( + + protected $messageTemplates = [ self::MSG_INVALID => "Le pays sélectionné n'existe pas à la date de naissance saisie", - ); - + ]; + /** * @var PaysService */ protected $service; - + + + public function __construct($options = null) { parent::__construct($options); - + if (!isset($options['service'])) { throw new LogicException("Paramètre 'service' introuvable."); } - + $this->service = $options['service']; } - + + + public function isValid($value, $context = null) { - $pays = $this->service->get($value); /* @var $pays PaysEntity */ - - $date = DateTime::createFromFormat(Constants::DATE_FORMAT, $context['dateNaissance']); + $pays = $this->service->get($value); + /* @var $pays PaysEntity */ + + $date = DateTimeFromString::run($context['dateNaissance']); $dateDebutValidite = $pays->getValiditeDebut(); $dateFinValidite = $pays->getValiditeFin() ?: new DateTime(); - + if ($date && ($date < $dateDebutValidite || $date > $dateFinValidite)) { $this->error(self::MSG_INVALID); + return false; } - + return true; } } \ No newline at end of file diff --git a/module/Application/src/Validator/RIBValidator.php b/module/Dossier/src/Validator/RIBValidator.php similarity index 90% rename from module/Application/src/Validator/RIBValidator.php rename to module/Dossier/src/Validator/RIBValidator.php index 9c02870dd7d9e845ac8d0709d2332d65f242459b..bd5da68c0765dc9f25242cd02d8f630d340e3d89 100644 --- a/module/Application/src/Validator/RIBValidator.php +++ b/module/Dossier/src/Validator/RIBValidator.php @@ -1,6 +1,6 @@ <?php -namespace Application\Validator; +namespace Dossier\Validator; use Laminas\Validator\Iban; @@ -9,7 +9,7 @@ class RIBValidator extends Iban /** * Sets validator options * - * @param array|Traversable $options OPTIONAL + * @param array|Traversable $options OPTIONAL */ public function __construct($options = []) { diff --git a/module/Application/src/View/Helper/ValidationViewHelper.php b/module/Dossier/src/View/Helper/ValidationViewHelper.php similarity index 84% rename from module/Application/src/View/Helper/ValidationViewHelper.php rename to module/Dossier/src/View/Helper/ValidationViewHelper.php index 34e882c5c1f01f942edce033dd7dd9aa01ef002b..043f9df4e4aa9c40613cdb95b88caf505be8b1fb 100755 --- a/module/Application/src/View/Helper/ValidationViewHelper.php +++ b/module/Dossier/src/View/Helper/ValidationViewHelper.php @@ -1,7 +1,8 @@ <?php -namespace Application\View\Helper; +namespace Dossier\View\Helper; +use Application\Entity\Db\Structure; use Application\Entity\Db\Validation; use Application\Entity\Db\Traits\ValidationAwareTrait; use Laminas\View\Helper\AbstractHtmlElement; @@ -17,7 +18,6 @@ class ValidationViewHelper extends AbstractHtmlElement use ValidationAwareTrait; - /** * * @param Structure $structure @@ -83,10 +83,10 @@ class ValidationViewHelper extends AbstractHtmlElement return ''; } - $title = $entity->getTypeValidation().' de '.$entity->getIntervenant(); + $title = $entity->getTypeValidation() . ' de ' . $entity->getIntervenant(); return $this->getView()->tag('abbr', compact('title'))->html( - 'Validation du '.$entity->getHistoModification()->format(\Application\Constants::DATETIME_FORMAT).' par '.$entity->getHistoModificateur() + 'Validation du ' . $entity->getHistoModification()->format(\Application\Constants::DATETIME_FORMAT) . ' par ' . $entity->getHistoModificateur() ); } diff --git a/module/Dossier/src/View/Helper/ValidationViewHelperFactory.php b/module/Dossier/src/View/Helper/ValidationViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..5f39e070e6c4ccebf22dacb48570d9b8cec6ebed --- /dev/null +++ b/module/Dossier/src/View/Helper/ValidationViewHelperFactory.php @@ -0,0 +1,20 @@ +<?php + +namespace Dossier\View\Helper; + + +use Psr\Container\ContainerInterface; + +/** + * Description of LigneEnseignementFactory + * + */ +class ValidationViewHelperFactory +{ + public function __invoke(ContainerInterface $container, $requestedName, array $options = null) + { + $helper = new ValidationViewHelper(); + + return $helper; + } +} \ No newline at end of file diff --git a/module/Dossier/template_map.php b/module/Dossier/template_map.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/Dossier/template_map.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Application/view/application/autres/index.phtml b/module/Dossier/view/dossier/autres/index.phtml similarity index 81% rename from module/Application/view/application/autres/index.phtml rename to module/Dossier/view/dossier/autres/index.phtml index 6402731c3b06153fdc276a1e4d1ab70a8e073ea0..dcc9af96d751ce785e17354254f97b08ac47ce81 100755 --- a/module/Application/view/application/autres/index.phtml +++ b/module/Dossier/view/dossier/autres/index.phtml @@ -5,7 +5,7 @@ use Application\Provider\Privilege\Privileges; //$this->headTitle()->append($title); /** - * @var $autre \Application\Entity\Db\DossierAutre + * @var $autre \Dossier\Entity\Db\DossierAutre */ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_AUTRES_EDITION)); @@ -38,10 +38,9 @@ echo $this->inlinescript()->appendFile($this->basePath() . '/vendor/ace-builds-m <td><?= $autre->getDescription() ?></td> <?php if ($canEdit): ?> <td style="text-align:center;width:1px;white-space: nowrap"> - <a class="mod-ajax" data-submit-reload="true" - href="<?= $this->url('autres-infos/saisie', ['dossierAutre' => $autre->getId()]) ?>" - data-submit-reload="true"> - <i class="fas fa-pen-to-square"></i></a> + <a + href="<?= $this->url('autres-infos/saisie', ['dossierAutre' => $autre->getId()]) ?>" + <i class="fas fa-pen-to-square"></i></a> </td> <?php endif; ?> </tr> diff --git a/module/Application/view/application/autres/saisie.phtml b/module/Dossier/view/dossier/autres/saisie.phtml similarity index 57% rename from module/Application/view/application/autres/saisie.phtml rename to module/Dossier/view/dossier/autres/saisie.phtml index 8ebea174ced4e0d43b1125c3c7536ef84be56a69..8d5a750f3fb4e990809016f467746c3c6e9945c9 100755 --- a/module/Application/view/application/autres/saisie.phtml +++ b/module/Dossier/view/dossier/autres/saisie.phtml @@ -8,80 +8,77 @@ echo $this->tag('h1', ['class' => 'page-header'])->html($title); echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); $type = $dossierAutre->getType()->getId(); +echo $this->inlinescript()->appendFile($this->basePath() . '/vendor/ace-builds-master/src-min/ace.js'); + echo $this->form()->openTag($form); ?> <div class="row"> - <div class="col-md-3"> + <div class="col-md-6"> <?= $this->formControlGroup($form->get('libelle')); ?> </div> <div class="col-md-6"> <?= $this->formControlGroup($form->get('description')); ?> </div> +</div> +<div class="row"> <div class="col-md-6"> <?= $this->formControlGroup($form->get('type')); ?> </div> <div class="col-md-6"> <?= $this->formControlGroup($form->get('obligatoire')); ?> </div> - <div class="col-md-12"> - - <ul class="nav nav-tabs" role="tablist"> - <li role="presentation" class="<?= ($type != '3') ? 'active' : ''; ?>"><a href="#json" aria-controls="json" - role="tab" - >Valeurs manuelles</a></li> - <li role="presentation" class="<?= ($type == '3') ? 'active' : ''; ?>"><a href="#sql" aria-controls="sql" - role="tab" - >Valeurs via SQL </a></li> - </ul> - - <div class="tab-content"> - <div role="tabcard" class="tab-pane <?= ($type != '3') ? 'active' : ''; ?>" - id="json"> - <div class="card bg-default json-value"> - <div class="card-header" role="tab"> - <label>Valeurs sous forme JSON<br/> - <small style="font-weight:normal">Format : { "0":"VALUE1" , "1":"VALUE2" ...}</small></label> - </div> - <div class="card-body"> - <?= $this->formTextarea($form->get('json-value')) ?> - </div> - </div> +</div> + + +<ul class="nav nav-tabs" role="tablist"> + <li role="presentation"><a class="nav-link <?= ($type != '3') ? 'active' : ''; ?>" href="#json" aria-controls="json" + role="tab" data-bs-toggle="tab">Valeurs manuelles</a></li> + <li role="presentation"><a class="nav-link <?= ($type == '3') ? 'active' : ''; ?>" href="#sql" aria-controls="sql" + role="tab" data-bs-toggle="tab">Valeurs via SQL </a></li> +</ul> + +<div class="tab-content"> + <div role="tabcard" class="tab-pane <?= ($type != '3') ? 'active' : ''; ?>" + id="json"> + <div class="card bg-default json-value"> + <div class="card-header" role="tab"> + <label>Valeurs sous forme JSON<br/> + <small style="font-weight:normal">Format : { "0":"VALUE1" , "1":"VALUE2" + ...}</small></label> + </div> + <div class="card-body"> + <?= $this->formTextarea($form->get('json-value')) ?> + </div> + </div> + </div> + <div role="tabcard" class="tab-pane <?= ($dossierAutre->getType()->getId() == '3') ? 'active' : ''; ?>" + id="sql"> + <div class="card bg-default sql-value"> + <div class="card-header" role="tab"> + <label>Valeurs sous forme SQL<br/> <small style="font-weight:normal">Format : SELECT + votre_champs as VALUE_OPTION FROM + votre_table</small></label> </div> - <div role="tabcard" class="tab-pane <?= ($dossierAutre->getType()->getId() == '3') ? 'active' : ''; ?>" - id="sql"> - <div class="card bg-default sql-value"> - <div class="card-header" role="tab"> - <label>Valeurs sous forme SQL<br/> <small style="font-weight:normal">Format : SELECT - votre_champs as VALUE_OPTION FROM - votre_table</small></label> - </div> - <div class="card-body"> - <?= $this->formTextarea($form->get('sql-value')) ?> - </div> - </div> + <div class="card-body"> + <?= $this->formTextarea($form->get('sql-value')) ?> </div> </div> </div> </div> <?= $this->formSubmit($form->get('submit')); ?> <?= $this->formControlGroup($form->get('security')); ?> - <?= $this->form()->closeTag(); ?> -</div> <script> - - $(function () - { + $(function () { WidgetInitializer.add('autres-saisir', { jsonValueEditor: null, sqlValueEditor: null, - save: function () - { + save: function () { var jsonValue = $("<input>") .attr("type", 'hidden') .attr("name", 'json-value') @@ -96,11 +93,12 @@ echo $this->form()->openTag($form); ?> }, - _create: function () - { + _create: function () { var that = this; - that.element.find('#btn-save').click(function () { that.save();}); + that.element.find('#btn-save').click(function () { + that.save(); + }); that.element.find('.nav a').click(function (e) { e.preventDefault(); $('a[href="' + $(this).attr('href') + '"]').tab('show'); @@ -108,7 +106,7 @@ echo $this->form()->openTag($form); ?> }) var options = { - minLines: 15, maxLines: 40, + minLines: 40, maxLines: 40, }; that.jsonValueEditor = ace.edit("json-value"); that.jsonValueEditor.setTheme("ace/theme/github"); diff --git a/module/Application/view/application/employeur/index.phtml b/module/Dossier/view/dossier/employeur/index.phtml similarity index 100% rename from module/Application/view/application/employeur/index.phtml rename to module/Dossier/view/dossier/employeur/index.phtml diff --git a/module/Application/view/application/employeur/liste.phtml b/module/Dossier/view/dossier/employeur/liste.phtml similarity index 84% rename from module/Application/view/application/employeur/liste.phtml rename to module/Dossier/view/dossier/employeur/liste.phtml index fc2dea825cacd9c351dd77d366b69e5f462e0830..579c8c8d05f82f9448ac7a3741d54146716d10f3 100755 --- a/module/Application/view/application/employeur/liste.phtml +++ b/module/Dossier/view/dossier/employeur/liste.phtml @@ -1,7 +1,3 @@ -<table class="table table-bordered table-sm"> -<?php -$canEdit = true; -?> <table id='table-employeur' class="table table-bordered table-sort" data-searching="false"> <thead> <tr> @@ -49,18 +45,16 @@ $canEdit = true; <?php if ($canEdit): ?> - <tr class="champ-triable"> - <a class="btn btn-primary ajax-modal " data-event="employeur-edition" - href="<?= $this->url('employeur/saisie'); ?>"><i - class="fas fa-plus"></i> - Ajout d'un employeur</a> - </tr> + <a class="btn btn-primary ajax-modal " data-event="employeur-saisie" + href="<?= $this->url('employeur/saisie'); ?>"><i + class="fas fa-plus"></i> + Ajout d'un employeur</a> <?php endif; ?> <script type="text/javascript"> $(function () { - $("body").on("employeur-edition", function (event, data) { + $("body").on("employeur-saisie", function (event, data) { window.location.reload(); }); }); diff --git a/module/Application/view/application/employeur/recherche.phtml b/module/Dossier/view/dossier/employeur/recherche.phtml similarity index 100% rename from module/Application/view/application/employeur/recherche.phtml rename to module/Dossier/view/dossier/employeur/recherche.phtml diff --git a/module/Application/view/application/employeur/rechercher.phtml b/module/Dossier/view/dossier/employeur/rechercher.phtml similarity index 100% rename from module/Application/view/application/employeur/rechercher.phtml rename to module/Dossier/view/dossier/employeur/rechercher.phtml diff --git a/module/Application/view/application/employeur/saisie.phtml b/module/Dossier/view/dossier/employeur/saisie.phtml similarity index 100% rename from module/Application/view/application/employeur/saisie.phtml rename to module/Dossier/view/dossier/employeur/saisie.phtml diff --git a/module/Application/view/application/intervenant-dossier/differences.phtml b/module/Dossier/view/dossier/intervenant-dossier/differences.phtml similarity index 97% rename from module/Application/view/application/intervenant-dossier/differences.phtml rename to module/Dossier/view/dossier/intervenant-dossier/differences.phtml index 8bd3bbb2923070f70b305c18d8db60f487e7aa28..88417846bcef5618a72de4794b5a36e81d5a11bf 100755 --- a/module/Application/view/application/intervenant-dossier/differences.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/differences.phtml @@ -3,7 +3,7 @@ /** * @var $this \Application\View\Renderer\PhpRenderer * @var $title string - * @var $intervenant Intervenant + * @var $intervenant \Application\Entity\Db\Intervenant * @var $differences \Indicateur\Entity\Db\IndicModifDossier[] */ diff --git a/module/Application/view/application/intervenant-dossier/index.phtml b/module/Dossier/view/dossier/intervenant-dossier/index.phtml similarity index 78% rename from module/Application/view/application/intervenant-dossier/index.phtml rename to module/Dossier/view/dossier/intervenant-dossier/index.phtml index 9141067db29af5eff64c0f9e6cf9c50735ceb90e..a79eef635f20e8ce07071e8a36cec56238d4cf07 100755 --- a/module/Application/view/application/intervenant-dossier/index.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/index.phtml @@ -1,19 +1,17 @@ <?php /** - * @var $form \Application\Form\Intervenant\IntervenantDossierForm * @var $role \UnicaenAuth\Entity\Db\Role * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier * @var $intervenantDossierValidation \Application\Entity\Db\Validation * @var $intervenantDossierStatut \Intervenant\Entity\Db\Statut - * @var $tblDossier \Application\Entity\Db\TblDossier * @var $fieldsetRules Array * @var $champsAutres \Application\Entity\Collection */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; use Application\Entity\Db\WfEtape; $editIdentite = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_EDIT_IDENTITE); @@ -29,7 +27,7 @@ $canSupprimer = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRI $formErrors = $this->formErrors($form); $nextEtape = $intervenantDossierValidation ? WfEtape::CODE_DONNEES_PERSO_VALIDATION : WfEtape::CODE_DONNEES_PERSO_SAISIE; -$this->headTitle()->append($intervenant->getPrenom() . " " . $intervenant->getNomUsuel())->append("Données personnelles"); +$this->headTitle()->append($intervenant->getPrenom() . " index.phtml" . $intervenant->getNomUsuel())->append("Données personnelles"); $fieldsets = $form->getFieldsets(); ?> @@ -93,15 +91,15 @@ $fieldsets = $form->getFieldsets(); <?php if (!empty($tblDossier)): ?> <div class="messenger alert <?= ($tblDossier->getCompletude()) ? 'alert-success' : 'alert-warning' ?> "> <?php if ($tblDossier->getCompletude() && $intervenantDossierValidation): ?> - Vos données personnelles sont maintenant <span style="font-size:1em;" class="label label-success">Complètes</span> et + Vos données personnelles sont maintenant <span style="font-size:1em;" class="badge bg-success">Complètes</span> et <span - style="font-size:1em;" class="label label-success">Validées</span> + style="font-size:1em;" class="badge bg-success">Validées</span> <?php elseif ($tblDossier->getCompletude() && !$intervenantDossierValidation): ?> Vos données personnelles sont maintenant <span style="font-size:1em;" - class="label label-success">complètes</span> et en attente de validation par nos services + class="badge bg-success">complètes</span> et en attente de validation par nos services <?php else: ?> Vos données personnelles sont incomplètes, merci de renseigner les informations obligatoires demandées dans les blocs - <span style="font-size:1em;" class="label label-warning">A compléter</span> + <span style="font-size:1em;" class="badge bg-warning text-dark">A compléter</span> <?php endif; ?> </div> <?php else: ?> @@ -119,15 +117,19 @@ $fieldsets = $form->getFieldsets(); <!-- legend champs obligatoire --> <p class="text-right"><span class="text-danger">*</span> champs obligatoires pour compléter vos données personnelles </p> - <div class="row"> - <?php - if ($canEdit) { - echo $this->partial('application/intervenant-dossier/partial/formStatut', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier',)); - } else { - echo $this->partial('application/intervenant-dossier/partial/formStatutView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); - } - ?> - </div> + + <?php if ($fieldsetRules['fieldset-statut']) : ?> + <div class="row"> + <?php + if ($canEdit) { + echo $this->partial('dossier/intervenant-dossier/partial/formStatut', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier',)); + } else { + echo $this->partial('dossier/intervenant-dossier/partial/formStatutView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + } + ?> + </div> + <?php endif; ?> + <?php if (empty($intervenantDossierStatut)): ?> @@ -140,63 +142,63 @@ $fieldsets = $form->getFieldsets(); /*Fiedlset identite (toujours affiché)*/ if ($editIdentite) { - echo $this->partial('application/intervenant-dossier/partial/formIdentite', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formIdentite', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formIdentiteView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formIdentiteView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } /*Fiedlset identite complementaire*/ if ($fieldsetRules['fieldset-identite-complementaire']) { if ($editIdentite) { - echo $this->partial('application/intervenant-dossier/partial/formIdentiteComplementaire', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formIdentiteComplementaire', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formIdentiteComplementaireView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formIdentiteComplementaireView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } } /*Fieldset Contact*/ if ($fieldsetRules['fieldset-contact']) { if ($editContact) { - echo $this->partial('application/intervenant-dossier/partial/formContact', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formContact', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formContactView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formContactView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } } /*Fieldset Adresse*/ if ($fieldsetRules['fieldset-adresse']) { if ($editAdresse) { - echo $this->partial('application/intervenant-dossier/partial/formAdresse', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formAdresse', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formAdresseView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formAdresseView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } } /*Fiedlset Insee*/ if ($fieldsetRules['fieldset-insee']) { if ($editInsee) { - echo $this->partial('application/intervenant-dossier/partial/formInsee', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formInsee', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formInseeView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formInseeView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } } if ($fieldsetRules['fieldset-iban']) { if ($editIban) { - echo $this->partial('application/intervenant-dossier/partial/formBancaire', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formBancaire', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formBancaireView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formBancaireView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } } /*Fiedlset Employeur*/ if ($fieldsetRules['fieldset-employeur']) { if ($editEmployeur) { - echo $this->partial('application/intervenant-dossier/partial/formEmployeur', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formEmployeur', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } else { - echo $this->partial('application/intervenant-dossier/partial/formEmployeurView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formEmployeurView', compact('form', 'intervenant', 'intervenantDossier', 'tblDossier')); } } /*Fieldset Autres*/ if ($fieldsetRules['fieldset-autres']) { - echo $this->partial('application/intervenant-dossier/partial/formAutres', compact('form', 'intervenant', 'intervenantDossier', 'champsAutres', 'tblDossier')); + echo $this->partial('dossier/intervenant-dossier/partial/formAutres', compact('form', 'intervenant', 'intervenantDossier', 'champsAutres', 'tblDossier')); } ?> @@ -310,12 +312,12 @@ $fieldsets = $form->getFieldsets(); e.stopImmediatePropagation(); } else { var action = $("form[id='dossier']").attr('action'); - $("form[id='dossier']").attr('action', action + '/change-statut-dossier'); + $("form[id='dossier']").attr('action', action+'/change-statut-dossier'); $("form[id='dossier']").submit(); } } else { var action = $("form[id='dossier']").attr('action'); - $("form[id='dossier']").attr('action', action + '/change-statut-dossier'); + $("form[id='dossier']").attr('action', action+'/change-statut-dossier'); $("form[id='dossier']").submit(); } }); diff --git a/module/Application/view/application/intervenant-dossier/partial/form.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/form.phtml similarity index 94% rename from module/Application/view/application/intervenant-dossier/partial/form.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/form.phtml index 34e26be75ef86377c9785ed978fd662e229a3827..e7f29dc3004801e9a3d7b4cf0f17509db459f334 100755 --- a/module/Application/view/application/intervenant-dossier/partial/form.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/form.phtml @@ -1,18 +1,16 @@ -<?php - /** - * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\Dossier - * @var $canValider boolean - * @var $canDevalider boolean - * @var $canSupprimer boolean - * @var $dossier Dossier - */ +* @var $this \Application\View\Renderer\PhpRenderer +* @var $form \Dossier\Form\IntervenantDossierForm +* @var $canValider boolean +* @var $canDevalider boolean +* @var $canSupprimer boolean +* @var $dossier Dossier +*/ $Dossier = $dossier; $form->prepare(); -$dossier = $form->get('dossier'); /* @var $dossier \Application\Form\Intervenant\DossierFieldset */ +$dossier = $form->get('dossier'); ?> <style> @@ -158,8 +156,7 @@ if ($Dossier->getId()) { if (dateObservation.isBetween(dateDebutValid, dateFinValid)) { option.show(); - } - else { + } else { option.removeProp('selected'); option.hide(); } @@ -193,8 +190,7 @@ if ($Dossier->getId()) { if ($("option:selected", selectPays).hasClass("france")) { selectDept.removeProp('disabled').parent().show(); emptyDept.html("(Sélectionnez un département...)"); - } - else { + } else { selectDept.prop('disabled', 'disabled').parent().hide(); emptyDept.html("(Aucun)").prop('selected', 'selected'); } diff --git a/module/Application/view/application/intervenant-dossier/partial/formAdresse.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formAdresse.phtml similarity index 83% rename from module/Application/view/application/intervenant-dossier/partial/formAdresse.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formAdresse.phtml index 9c5bc24176ef98009efdbe5a73bda8ea66f16581..a4ae71a8ef941166e9322f4304b355592501a321 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formAdresse.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formAdresse.phtml @@ -2,10 +2,10 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ $form->prepare(); $dossierAdresse = $form->get('DossierAdresse'); @@ -18,9 +18,9 @@ $dossierAdresse = $form->get('DossierAdresse'); ADRESSE <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeAdresse()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formAdresseView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formAdresseView.phtml similarity index 90% rename from module/Application/view/application/intervenant-dossier/partial/formAdresseView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formAdresseView.phtml index 8ce9969fc344b97e3877eb5118c45d525b986488..394311fbf93fcc644d709943ca30579efbaf674a 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formAdresseView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formAdresseView.phtml @@ -2,18 +2,18 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewAdresse = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_ADRESSE); $form->prepare(); -$dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Form\Intervenant\DossierFieldset */ +$dossierAdresse = $form->get('DossierAdresse'); ?> <!-- Fiedlset Adresse --> @@ -23,9 +23,9 @@ $dossierAdresse = $form->get('DossierAdresse'); /* @var $dossier \Application\Fo ADRESSE <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeAdresse()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formAutres.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formAutres.phtml similarity index 71% rename from module/Application/view/application/intervenant-dossier/partial/formAutres.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formAutres.phtml index f08fa9ec0b1190a806c66a103a8c7f49bda49388..82f3a0e5e9e0011ffa759db001c72a504c42a16c 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formAutres.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formAutres.phtml @@ -2,11 +2,11 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier - * @var $champsAutres \Application\Entity\Db\DossierAutre[] + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier + * @var $champsAutres \Dossier\Entity\Db\DossierAutre[] */ $form->prepare(); $dossierAutres = $form->get('DossierAutres'); @@ -33,26 +33,26 @@ $dossierAutres = $form->get('DossierAutres'); AUTRES <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeAutres()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> <div class="card-body"> <?php foreach ($champsAutres as $champ): ?> - <?php if (!$this->isAllowed($intervenant, constant('Application\Assertion\IntervenantDossierAssertion::PRIV_EDIT_AUTRE' . $champ->getId()))): ?> - <?php if ($this->isAllowed($intervenant, constant('Application\Assertion\IntervenantDossierAssertion::PRIV_VIEW_AUTRE' . $champ->getId()))): ?> + <?php if (!$this->isAllowed($intervenant, constant('Dossier\Assertion\IntervenantDossierAssertion::PRIV_EDIT_AUTRE' . $champ->getId()))): ?> + <?php if ($this->isAllowed($intervenant, constant('Dossier\Assertion\IntervenantDossierAssertion::PRIV_VIEW_AUTRE' . $champ->getId()))): ?> <div class="form-group"> <?php echo $this->formLabel($dossierAutres->get('champ-autre-' . $champ->getId()),); ?> <div class="input-group cold-md-6 readonly"> <?php $method = 'getAutre' . $champ->getId(); - $value = $intervenantDossier->$method(); + $value = $intervenantDossier->$method(); if (!empty($intervenantDossier->$method())) { - $viewAutre = $this->isAllowed($intervenant, constant('Application\Assertion\IntervenantDossierAssertion::PRIV_VIEW_AUTRE' . $champ->getId())); + $viewAutre = $this->isAllowed($intervenant, constant('Dossier\Assertion\IntervenantDossierAssertion::PRIV_VIEW_AUTRE' . $champ->getId())); echo ($viewAutre) ? $intervenantDossier->$method() : '***************'; } ?> diff --git a/module/Application/view/application/intervenant-dossier/partial/formBancaire.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formBancaire.phtml similarity index 75% rename from module/Application/view/application/intervenant-dossier/partial/formBancaire.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formBancaire.phtml index c5f6aa37d32082052d606fe6368b9d8b791bc9d8..e5761657be461dc85fb889ea584cd38c4838acce 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formBancaire.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formBancaire.phtml @@ -1,10 +1,10 @@ <?php /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ $form->prepare(); @@ -29,9 +29,9 @@ $dossierBancaire = $form->get('DossierBancaire'); COORDONNÉES BANCAIRES <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeBanque()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> diff --git a/module/Application/view/application/intervenant-dossier/partial/formBancaireView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formBancaireView.phtml similarity index 84% rename from module/Application/view/application/intervenant-dossier/partial/formBancaireView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formBancaireView.phtml index 9626ecb1229e240d93b2a4bb582995f66c881aa6..9506e27f9469c8cce740c9587dbf5a13fc91ded5 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formBancaireView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formBancaireView.phtml @@ -1,13 +1,13 @@ <?php /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewIban = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_IBAN); @@ -22,9 +22,9 @@ $dossierBancaire = $form->get('DossierBancaire'); COORDONNÉES BANCAIRES <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeBanque()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formContact.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formContact.phtml similarity index 77% rename from module/Application/view/application/intervenant-dossier/partial/formContact.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formContact.phtml index 07133cfb957e057cea4575b7a7903c694f73478e..125b065c4248231e65d93aaf9008a7fa7eadd797 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formContact.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formContact.phtml @@ -2,10 +2,10 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ //$Dossier = $dossier; @@ -32,9 +32,9 @@ $dossierContact = $form->get('DossierContact'); CONTACT <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeContact()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formContactView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formContactView.phtml similarity index 84% rename from module/Application/view/application/intervenant-dossier/partial/formContactView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formContactView.phtml index 3b0535415c0a167b83ffdb90fa0b2f49d8a6abaa..acf1cd69c147eb192a04825a06bda09e1f5fe159 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formContactView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formContactView.phtml @@ -2,18 +2,18 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewContact = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_CONTACT); /** - * @var \Application\Entity\Db\IntervenantDossier $intervenantDossier + * @var \Dossier\Entity\Db\IntervenantDossier $intervenantDossier */ //$Dossier = $dossier; @@ -29,9 +29,9 @@ $dossierContact = $form->get('DossierContact'); CONTACT <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeContact()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formEmployeur.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formEmployeur.phtml similarity index 70% rename from module/Application/view/application/intervenant-dossier/partial/formEmployeur.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formEmployeur.phtml index b5cfb7da656effdd00bdbf24aec1c6933a9f3d58..5fcb973ef298c541476a561f51aa94a5fe6b66e5 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formEmployeur.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formEmployeur.phtml @@ -2,10 +2,10 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ //$Dossier = $dossier; @@ -32,14 +32,15 @@ $dossierInsee = $form->get('DossierEmployeur'); EMPLOYEUR PRINCIPAL <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeEmployeur()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> <div class="card-body"> - <div class="well" role="alert">Saissisez les premières lettres de votre employeur ou directement le N° de SIRET. + <div class="well" role="alert">Saissisez les premières lettres de votre employeur ou directement le N° de + SIRET. </div> <?= $this->formControlGroup($dossierInsee->get('employeur')); ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formEmployeurView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formEmployeurView.phtml similarity index 77% rename from module/Application/view/application/intervenant-dossier/partial/formEmployeurView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formEmployeurView.phtml index 044199b8d4716b025292162c9bcf0064314a1e5f..c7b380c31ca12fc67acc03b16a44d086a865faa2 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formEmployeurView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formEmployeurView.phtml @@ -1,13 +1,13 @@ <?php /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewEmployeur = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_EMPLOYEUR); $form->prepare(); @@ -22,9 +22,9 @@ $dossierEmployeur = $form->get('DossierEmployeur'); EMPLOYEUR PRINCIPAL <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeEmployeur()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> diff --git a/module/Application/view/application/intervenant-dossier/partial/formIdentite.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentite.phtml similarity index 72% rename from module/Application/view/application/intervenant-dossier/partial/formIdentite.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formIdentite.phtml index d3adb7a616b6f52752e6c9af3df4054983c29e03..6b7f21efcc7f4e4fb1df2042c9e75205a10f00af 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formIdentite.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentite.phtml @@ -2,13 +2,13 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewIdentite = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_IDENTITE); @@ -24,9 +24,9 @@ $dossierIdentite = $form->get('DossierIdentite'); IDENTITÉ <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeIdentite()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formIdentiteComplementaire.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteComplementaire.phtml similarity index 76% rename from module/Application/view/application/intervenant-dossier/partial/formIdentiteComplementaire.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteComplementaire.phtml index b732bb6e5c37018cfe3c0d08900f9cb3b4df7977..efe836745cf84c5cfa2cdf65ba012ae60b595bc8 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formIdentiteComplementaire.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteComplementaire.phtml @@ -2,13 +2,13 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewIdentiteComplementaire = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_IDENTITE); @@ -24,9 +24,9 @@ $dossierIdentiteComplementaire = $form->get('DossierIdentiteComplementaire'); IDENTITÉ COMPLEMENTAIRE <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeIdentiteComp()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formIdentiteComplementaireView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteComplementaireView.phtml similarity index 88% rename from module/Application/view/application/intervenant-dossier/partial/formIdentiteComplementaireView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteComplementaireView.phtml index ed1d3bfe48cbf680a6cc4d5457b3597aa4cbb2da..76ea643e337cae3cf5d89a4b9d59687af52af934 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formIdentiteComplementaireView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteComplementaireView.phtml @@ -2,18 +2,18 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewIdentite = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_IDENTITE); /** - * @var \Application\Entity\Db\IntervenantDossier $intervenantDossier + * @var \Dossier\Entity\Db\IntervenantDossier $intervenantDossier */ //$Dossier = $dossier; @@ -32,9 +32,9 @@ $dossierIdentiteComplementaire = $form->get('DossierIdentiteComplementaire'); IDENTITÉ COMPLEMENTAIRE <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeIdentiteComp()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> diff --git a/module/Application/view/application/intervenant-dossier/partial/formIdentiteView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteView.phtml similarity index 84% rename from module/Application/view/application/intervenant-dossier/partial/formIdentiteView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteView.phtml index e4a892f62802c583b41444993476cc332c595d66..411d7ae8e74247f61cb079fc19b757328ff6c5cf 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formIdentiteView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formIdentiteView.phtml @@ -2,18 +2,18 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewIdentite = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_IDENTITE); /** - * @var \Application\Entity\Db\IntervenantDossier $intervenantDossier + * @var \Dossier\Entity\Db\IntervenantDossier $intervenantDossier */ //$Dossier = $dossier; @@ -32,9 +32,9 @@ $dossierIdentite = $form->get('DossierIdentite'); IDENTITÉ <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeIdentite()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formInsee.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formInsee.phtml similarity index 73% rename from module/Application/view/application/intervenant-dossier/partial/formInsee.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formInsee.phtml index b558ab63df9a042e4c45c54e7bf89d3d197cdb99..7ac5370182aa92d046d02c8d39487ec9d10ee6cc 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formInsee.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formInsee.phtml @@ -2,10 +2,10 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ $form->prepare(); @@ -30,9 +30,9 @@ $dossierInsee = $form->get('DossierInsee'); INSEE <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeInsee()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formInseeView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formInseeView.phtml similarity index 77% rename from module/Application/view/application/intervenant-dossier/partial/formInseeView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formInseeView.phtml index b716a5f709839970ca1336ad1925efdeaac61caa..945a136bb4340899038de4618fbef350fe4ce581 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formInseeView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formInseeView.phtml @@ -2,18 +2,18 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ -use Application\Assertion\IntervenantDossierAssertion; +use Dossier\Assertion\IntervenantDossierAssertion; $viewInsee = $this->isAllowed($intervenant, IntervenantDossierAssertion::PRIV_VIEW_INSEE); /** - * @var \Application\Entity\Db\IntervenantDossier $intervenantDossier + * @var \Dossier\Entity\Db\IntervenantDossier $intervenantDossier */ $form->prepare(); @@ -27,9 +27,9 @@ $dossierInsee = $form->get('DossierInsee'); INSEE <?php if (!empty($tblDossier)): ?> <?php if (!$intervenantDossier->getTblDossier()->getCompletudeInsee()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formStatut.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formStatut.phtml similarity index 71% rename from module/Application/view/application/intervenant-dossier/partial/formStatut.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formStatut.phtml index e091f8f164c1d7ec6a22f06f8815ef32c5bc79fd..78c89d45767ab1be2c166b6b0c1c530d6c591bc1 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formStatut.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formStatut.phtml @@ -2,10 +2,10 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ $form->prepare(); $dossierStatut = $form->get('DossierStatut'); @@ -29,9 +29,9 @@ $dossierStatut = $form->get('DossierStatut'); STATUT <?php if (!empty($tblDossier)): ?> <?php if (!$tblDossier->getCompletudeStatut()): ?> - <span class="label label-warning">A compléter</span> + <span class="badge bg-warning text-dark">A compléter</span> <?php else: ?> - <span class="label label-success">Complet</span> + <span class="badge bg-success">Complet</span> <?php endif; ?> <?php endif; ?> </div> diff --git a/module/Application/view/application/intervenant-dossier/partial/formStatutView.phtml b/module/Dossier/view/dossier/intervenant-dossier/partial/formStatutView.phtml similarity index 82% rename from module/Application/view/application/intervenant-dossier/partial/formStatutView.phtml rename to module/Dossier/view/dossier/intervenant-dossier/partial/formStatutView.phtml index b04d4d6c478f7d7014dbf177fd6ec2a841c7cae5..4de0a187b1f4a520aaa6254942697ee82fea445a 100755 --- a/module/Application/view/application/intervenant-dossier/partial/formStatutView.phtml +++ b/module/Dossier/view/dossier/intervenant-dossier/partial/formStatutView.phtml @@ -2,10 +2,10 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\Intervenant\IntervenantDossierForm + * @var $form \Dossier\Form\IntervenantDossierForm * @var $intervenant \Application\Entity\Db\Intervenant - * @var $intervenantDossier \Application\Entity\Db\IntervenantDossier - * @var $tblDossier \Application\Entity\Db\TblDossier + * @var $intervenantDossier \Dossier\Entity\Db\IntervenantDossier + * @var $tblDossier \Dossier\Entity\Db\TblDossier */ $form->prepare(); diff --git a/module/Application/view/application/intervenant-dossier/purger-differences.phtml b/module/Dossier/view/dossier/intervenant-dossier/purger-differences.phtml similarity index 100% rename from module/Application/view/application/intervenant-dossier/purger-differences.phtml rename to module/Dossier/view/dossier/intervenant-dossier/purger-differences.phtml diff --git a/module/Enseignement/config/module.config.php b/module/Enseignement/config/module.config.php index ce296f2caf2ea9a64d38116b1c9ce439c39588df..ea8d3a744f08f89f541b83054c3dd26ac44818a1 100644 --- a/module/Enseignement/config/module.config.php +++ b/module/Enseignement/config/module.config.php @@ -235,6 +235,8 @@ return [ 'privileges' => [ Privileges::MOTIF_NON_PAIEMENT_VISUALISATION, Privileges::MOTIF_NON_PAIEMENT_EDITION, + Privileges::TAG_EDITION, + Privileges::TAG_VISUALISATION, ], 'resources' => 'Intervenant', 'assertion' => Assertion\EnseignementAssertion::class, diff --git a/module/Enseignement/src/Controller/EnseignementController.php b/module/Enseignement/src/Controller/EnseignementController.php index 8fff1887d282bbe478d9d2617d89197b4887cbc4..92bd1d53cfecd3b272030c401bf5d2f659d0da2d 100755 --- a/module/Enseignement/src/Controller/EnseignementController.php +++ b/module/Enseignement/src/Controller/EnseignementController.php @@ -3,37 +3,36 @@ namespace Enseignement\Controller; use Application\Controller\AbstractController; -use Application\Entity\Db\ElementPedagogique; -use Enseignement\Entity\Db\Service; +use Application\Entity\Db\Intervenant; use Application\Entity\Db\Validation; -use Enseignement\Form\EnseignementSaisieFormAwareTrait; -use Laminas\View\Model\ViewModel; -use Service\Form\RechercheFormAwareTrait; -use Enseignement\Processus\EnseignementProcessusAwareTrait; -use Plafond\Processus\PlafondProcessusAwareTrait; -use Enseignement\Processus\ValidationEnseignementProcessusAwareTrait; use Application\Provider\Privilege\Privileges; +use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\EtatSortieServiceAwareTrait; +use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; -use Service\Service\RegleStructureValidationServiceAwareTrait; +use Application\Service\Traits\PeriodeServiceAwareTrait; +use Application\Service\Traits\StructureServiceAwareTrait; use Application\Service\Traits\WorkflowServiceAwareTrait; -use UnicaenApp\View\Model\MessengerViewModel; -use Laminas\Http\Request; -use Application\Entity\Db\Intervenant; -use Service\Entity\Db\TypeVolumeHoraire; -use Service\Entity\Recherche; -use Application\Service\Traits\ContextServiceAwareTrait; +use Enseignement\Entity\Db\Service; +use Enseignement\Form\EnseignementSaisieFormAwareTrait; +use Enseignement\Processus\EnseignementProcessusAwareTrait; +use Enseignement\Processus\ValidationEnseignementProcessusAwareTrait; use Enseignement\Service\ServiceServiceAwareTrait; use Enseignement\Service\VolumeHoraireServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Application\Service\Traits\IntervenantServiceAwareTrait; +use Laminas\View\Model\ViewModel; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use Plafond\Processus\PlafondProcessusAwareTrait; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Entity\Recherche; +use Service\Form\RechercheFormAwareTrait; use Service\Service\EtatVolumeHoraireServiceAwareTrait; -use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; -use Application\Service\Traits\PeriodeServiceAwareTrait; +use Service\Service\RegleStructureValidationServiceAwareTrait; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; +use UnicaenApp\View\Model\MessengerViewModel; /** * Description of EnseignementController @@ -63,7 +62,7 @@ class EnseignementController extends AbstractController use WorkflowServiceAwareTrait; use PlafondProcessusAwareTrait; use EtatSortieServiceAwareTrait; - + use ElementPedagogiqueServiceAwareTrait; /** * Initialisation des filtres Doctrine pour les historique. @@ -107,7 +106,7 @@ class EnseignementController extends AbstractController { $this->initFilters(); $this->em()->getFilters()->enable('historique')->init([ - \Application\Entity\Db\CheminPedagogique::class, + \OffreFormation\Entity\Db\CheminPedagogique::class, ]); /* @var $intervenant Intervenant */ @@ -247,6 +246,7 @@ class EnseignementController extends AbstractController $form = $this->getFormServiceEnseignementSaisie(); $form->setTypeVolumeHoraire($typeVolumeHoraire); $element = $this->context()->elementPedagogiqueFromPost('element'); + $element = $this->getServiceElementPedagogique()->get($element); $etablissement = $this->context()->etablissementFromPost(); if ($serviceId) { diff --git a/module/Enseignement/src/Controller/VolumeHoraireController.php b/module/Enseignement/src/Controller/VolumeHoraireController.php index b9a28497704aceb092cc5308530634a62acd303d..1aa089d5579a22ae0354ecd87a751412b9564359 100755 --- a/module/Enseignement/src/Controller/VolumeHoraireController.php +++ b/module/Enseignement/src/Controller/VolumeHoraireController.php @@ -9,7 +9,9 @@ use Enseignement\Entity\Db\Service; use Enseignement\Entity\Db\VolumeHoraire; use Enseignement\Entity\VolumeHoraireListe; use Application\Form\AbstractForm; +use Enseignement\Form\VolumeHoraireSaisieCalendaireForm; use Enseignement\Form\VolumeHoraireSaisieCalendaireFormAwareTrait; +use Enseignement\Form\VolumeHoraireSaisieForm; use Enseignement\Form\VolumeHoraireSaisieFormAwareTrait; use Enseignement\Hydrator\ListeFilterHydrator; use Plafond\Processus\PlafondProcessusAwareTrait; @@ -49,62 +51,73 @@ class VolumeHoraireController extends AbstractController if (!$service) throw new RuntimeException("Service non spécifié ou introuvable."); $typeVolumeHoraireId = $this->params()->fromPost('type-volume-horaire', $this->params()->fromQuery('type-volume-horaire')); - $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->get($typeVolumeHoraireId); + $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->get($typeVolumeHoraireId); + $service->setTypeVolumeHoraire($typeVolumeHoraire); $readOnly = 1 == (int)$this->params()->fromQuery('read-only', 0); $volumeHoraireListe = $service->getVolumeHoraireListe()->setTypeVolumehoraire($typeVolumeHoraire); - $semestriel = $this->getServiceContext()->isModaliteServicesSemestriel($typeVolumeHoraire); + $semestriel = $this->getServiceContext()->isModaliteServicesSemestriel($typeVolumeHoraire); + return compact('volumeHoraireListe', 'readOnly', 'semestriel'); } - public function saisieAction() { return $this->saisieMixte($this->getFormVolumeHoraireSaisie()); } - public function saisieCalendaireAction() { return $this->saisieMixte($this->getFormVolumeHoraireSaisieCalendaire()); } - private function saisieMixte(AbstractForm $form) { $this->em()->getFilters()->enable('historique')->init([ VolumeHoraire::class, MotifNonPaiement::class, + Tag::class, ]); /** @var Service $service */ $service = $this->getEvent()->getParam('service'); + if (!$service) { throw new \Exception('Service non fourni'); } $volumeHoraireListe = new VolumeHoraireListe($service); - $vhlph = new ListeFilterHydrator(); + + $vhlph = new ListeFilterHydrator(); $vhlph->setEntityManager($this->em()); + $vhlph->hydrate($this->params()->fromQuery() + $this->params()->fromPost(), $volumeHoraireListe); $service->setTypeVolumeHoraire($volumeHoraireListe->getTypeVolumeHoraire()); $canViewMNP = $this->isAllowed($service->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_VISUALISATION); $canEditMNP = $canViewMNP && $this->isAllowed($service->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_EDITION); + $canViewTag = $this->isAllowed(Privileges::getResourceId(Privileges::TAG_VISUALISATION)); + $canEditTag = $canViewTag && $this->isAllowed(Privileges::getResourceId(Privileges::TAG_EDITION)); $hDeb = $volumeHoraireListe->getHeures(); + /** + * @var VolumeHoraireSaisieForm $form + */ + $form->setViewMNP($canViewMNP); $form->setEditMNP($canEditMNP); + $form->setViewTag($canViewTag); + $form->setEditTag($canEditTag); $form->build(); - $form->bindRequestSave($volumeHoraireListe, $this->getRequest(), function (VolumeHoraireListe $vhl) use ($hDeb, $volumeHoraireListe) { + $bind = $form->bindRequestSave($volumeHoraireListe, $this->getRequest(), function (VolumeHoraireListe $vhl) use ($hDeb, $volumeHoraireListe) { try { $service = $vhl->getService(); $this->getProcessusPlafond()->beginTransaction(); @@ -125,7 +138,6 @@ class VolumeHoraireController extends AbstractController } - public function suppressionCalendaireAction() { /** @var Service $service */ @@ -136,7 +148,7 @@ class VolumeHoraireController extends AbstractController } $volumeHoraireListe = new VolumeHoraireListe($service); - $vhlph = new ListeFilterHydrator(); + $vhlph = new ListeFilterHydrator(); $vhlph->setEntityManager($this->em()); $vhlph->hydrate($this->params()->fromQuery(), $volumeHoraireListe); @@ -157,7 +169,6 @@ class VolumeHoraireController extends AbstractController } - private function updateTableauxBord(Intervenant $intervenant) { $this->getServiceWorkflow()->calculerTableauxBord([ diff --git a/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.Service.dcm.xml b/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.Service.dcm.xml index 3343979b1307441ae538db0eabf0af5aa0684c6c..f15fadec7f0ec10bfabeb2241c94cca0f5cb8266 100755 --- a/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.Service.dcm.xml +++ b/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.Service.dcm.xml @@ -23,7 +23,7 @@ <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </many-to-one> <many-to-one field="etablissement" target-entity="Application\Entity\Db\Etablissement"> diff --git a/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.VolumeHoraire.dcm.xml b/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.VolumeHoraire.dcm.xml index 4384317787413ab62ac05ff40a8ab6f7c66331f3..d9bb9985cdbd25764047ac20f93ff28f68381b1a 100755 --- a/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.VolumeHoraire.dcm.xml +++ b/module/Enseignement/src/Entity/Db/Mapping/Enseignement.Entity.Db.VolumeHoraire.dcm.xml @@ -5,7 +5,7 @@ <entity name="Enseignement\Entity\Db\VolumeHoraire" table="VOLUME_HORAIRE"> <unique-constraints> <unique-constraint name="volume_horaire__un" - columns="SERVICE_ID,PERIODE_ID,TYPE_INTERVENTION_ID,MOTIF_NON_PAIEMENT_ID"/> + columns="SERVICE_ID,PERIODE_ID,TYPE_INTERVENTION_ID,MOTIF_NON_PAIEMENT_ID, TAG_ID"/> </unique-constraints> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> @@ -35,10 +35,13 @@ <many-to-one field="motifNonPaiement" target-entity="Application\Entity\Db\MotifNonPaiement"> <join-column name="MOTIF_NON_PAIEMENT_ID" referenced-column-name="ID"/> </many-to-one> + <many-to-one field="tag" target-entity="Application\Entity\Db\Tag"> + <join-column name="TAG_ID" referenced-column-name="ID"/> + </many-to-one> <many-to-one field="periode" target-entity="Application\Entity\Db\Periode"> <join-column name="PERIODE_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-one field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-column name="TYPE_INTERVENTION_ID" referenced-column-name="ID"/> </many-to-one> <many-to-many field="validation" target-entity="Application\Entity\Db\Validation"> @@ -61,7 +64,8 @@ </inverse-join-columns> </join-table> </many-to-many> - <one-to-many field="formuleResultatVolumeHoraire" target-entity="Application\Entity\Db\FormuleResultatVolumeHoraire" mapped-by="volumeHoraire"/> + <one-to-many field="formuleResultatVolumeHoraire" + target-entity="Application\Entity\Db\FormuleResultatVolumeHoraire" mapped-by="volumeHoraire"/> <many-to-one field="source" target-entity="UnicaenImport\Entity\Db\Source"> <join-column name="SOURCE_ID" referenced-column-name="ID"/> </many-to-one> diff --git a/module/Enseignement/src/Entity/Db/Service.php b/module/Enseignement/src/Entity/Db/Service.php index 71f096588a61f6d52323931987ea33c1c5799378..19007fb131bfb258d5902110cb3514f4f632c897 100755 --- a/module/Enseignement/src/Entity/Db/Service.php +++ b/module/Enseignement/src/Entity/Db/Service.php @@ -2,24 +2,24 @@ namespace Enseignement\Entity\Db; -use Application\Entity\Db\ElementPedagogique; use Application\Entity\Db\Etablissement; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\FormuleResultatService; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Periode; use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeIntervention; -use Service\Entity\Db\TypeVolumeHoraire; use Application\Entity\Db\Validation; -use Enseignement\Entity\VolumeHoraireListe; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Enseignement\Entity\VolumeHoraireListe; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\TypeIntervention; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; class Service implements HistoriqueAwareInterface, ResourceInterface, ImportAwareInterface { diff --git a/module/Enseignement/src/Entity/Db/VolumeHoraire.php b/module/Enseignement/src/Entity/Db/VolumeHoraire.php index eec01ee0d9a0921753174d8bdd934f0c090d959a..9451c9dd0887e015dc1a6aa7f7c1ead7b66e8115 100755 --- a/module/Enseignement/src/Entity/Db/VolumeHoraire.php +++ b/module/Enseignement/src/Entity/Db/VolumeHoraire.php @@ -3,24 +3,23 @@ namespace Enseignement\Entity\Db; use Application\Entity\Db\Contrat; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\FormuleResultatVolumeHoraire; -use Application\Entity\Db\Periode; use Application\Entity\Db\Traits\MotifNonPaiementAwareTrait; use Application\Entity\Db\Traits\PeriodeAwareTrait; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; -use Service\Entity\Db\TypeVolumeHoraireAwareTrait; -use Application\Entity\Db\TypeIntervention; +use Application\Entity\Db\Traits\TagAwareTrait; use Application\Entity\Db\TypeValidation; -use Service\Entity\Db\TypeVolumeHoraire; use Application\Entity\Db\Validation; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraireAwareTrait; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; class VolumeHoraire implements HistoriqueAwareInterface, ResourceInterface, ImportAwareInterface { @@ -28,6 +27,7 @@ class VolumeHoraire implements HistoriqueAwareInterface, ResourceInterface, Impo use ImportAwareTrait; use ServiceAwareTrait; use MotifNonPaiementAwareTrait; + use TagAwareTrait; use TypeVolumeHoraireAwareTrait; use TypeInterventionAwareTrait; use PeriodeAwareTrait; @@ -199,9 +199,10 @@ class VolumeHoraire implements HistoriqueAwareInterface, ResourceInterface, Impo { if (!$this->etatVolumeHoraire) return null; - return $this->etatVolumeHoraire->first(); - } + $result = $this->etatVolumeHoraire->first(); + return ($result) ?: null; + } /** diff --git a/module/Enseignement/src/Entity/VolumeHoraireListe.php b/module/Enseignement/src/Entity/VolumeHoraireListe.php index ba5e3ad3492db137900aad97a24b87a724815f89..ada87e0237ae4c71ee7768b3f785dbd08785a015 100755 --- a/module/Enseignement/src/Entity/VolumeHoraireListe.php +++ b/module/Enseignement/src/Entity/VolumeHoraireListe.php @@ -3,18 +3,20 @@ namespace Enseignement\Entity; use Application\Entity\Db\Contrat; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\MotifNonPaiement; use Application\Entity\Db\Periode; -use Enseignement\Entity\Db\Service; -use Application\Entity\Db\TypeIntervention; -use Service\Entity\Db\TypeVolumeHoraire; +use Application\Entity\Db\Tag; use Application\Entity\Db\Validation; +use Application\Service\Traits\ContextServiceAwareTrait; +use Application\Service\Traits\SourceServiceAwareTrait; +use Enseignement\Entity\Db\Service; use Enseignement\Entity\Db\VolumeHoraire; use Enseignement\Hydrator\ListeFilterHydrator; -use Application\Service\Traits\SourceServiceAwareTrait; use LogicException; +use OffreFormation\Entity\Db\TypeIntervention; use RuntimeException; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; use UnicaenImport\Entity\Db\Source; /** @@ -29,6 +31,7 @@ class VolumeHoraireListe const FILTRE_HORAIRE_DEBUT = 'horaire-debut'; const FILTRE_HORAIRE_FIN = 'horaire-fin'; const FILTRE_MOTIF_NON_PAIEMENT = 'motif-non-paiement'; + const FILTRE_TAG = 'tag'; const FILTRE_PERIODE = 'periode'; const FILTRE_TYPE_INTERVENTION = 'type-intervention'; const FILTRE_TYPE_VOLUME_HORAIRE = 'type-volume-horaire'; @@ -38,7 +41,7 @@ class VolumeHoraireListe const FILTRE_NEW = 'new'; const FILTRE_LIST = [ self::FILTRE_CONTRAT, self::FILTRE_ETAT_VOLUME_HORAIRE, self::FILTRE_HORAIRE_DEBUT, self::FILTRE_HORAIRE_FIN, - self::FILTRE_MOTIF_NON_PAIEMENT, self::FILTRE_PERIODE, self::FILTRE_TYPE_INTERVENTION, + self::FILTRE_MOTIF_NON_PAIEMENT, self::FILTRE_TAG, self::FILTRE_PERIODE, self::FILTRE_TYPE_INTERVENTION, self::FILTRE_TYPE_VOLUME_HORAIRE, self::FILTRE_VALIDATION, self::FILTRE_SOURCE, self::FILTRE_HISTORIQUE, self::FILTRE_NEW, ]; @@ -69,6 +72,11 @@ class VolumeHoraireListe 'accessor' => 'MotifNonPaiement', 'to-int-func' => 'getId', ], + self::FILTRE_TAG => [ + 'class' => Tag::class, + 'accessor' => 'Tag', + 'to-int-func' => 'getId', + ], self::FILTRE_PERIODE => [ 'class' => Periode::class, 'accessor' => 'Periode', @@ -107,6 +115,7 @@ class VolumeHoraireListe ]; use SourceServiceAwareTrait; + use ContextServiceAwareTrait; /** * @var Service|boolean @@ -139,6 +148,12 @@ class VolumeHoraireListe */ protected $motifNonPaiement = false; + /** + * @var Tag + */ + protected $tag = false; + + /** * @var Contrat|boolean */ @@ -162,11 +177,11 @@ class VolumeHoraireListe /** * @var Source|boolean */ - protected $source = false; + protected $source = false; protected bool $filterByHistorique = true; - protected bool $new = false; + protected bool $new = false; /** * @var object @@ -174,14 +189,12 @@ class VolumeHoraireListe public $__debug; - function __construct(Service $service) { $this->setService($service); } - /** * Retourne la liste des volumes horaires du service (sans les motifs de non paiement) * Les clés sont les codes des types d'intervention des volumes horaires @@ -193,24 +206,24 @@ class VolumeHoraireListe $data = []; $vhs = $this->getService()->getVolumeHoraire(); + foreach ($vhs as $volumeHoraire) { if ($this->match($volumeHoraire)) { $data[$volumeHoraire->getId()] = $volumeHoraire; } } + return $data; } - public function getService(): Service { return $this->service; } - public function setService(Service $service): VolumeHoraireListe { $this->service = $service; @@ -219,7 +232,6 @@ class VolumeHoraireListe } - /** * Détermine si un volume horaire répond aux critères de la liste ou non */ @@ -267,7 +279,8 @@ class VolumeHoraireListe if ($typeIntervention !== $this->typeIntervention) return false; } } - if (false !== $this->motifNonPaiement) { + //Uniquement en mode semestriel car en mode calendaire on ne doit pas être sur des mêmes horaires de début et de fin + if (false !== $this->motifNonPaiement && $this->getServiceContext()->isModaliteServicesSemestriel($volumeHoraire->getTypeVolumeHoraire()->getCode())) { $motifNonPaiement = $volumeHoraire->getMotifNonPaiement(); if (true === $this->motifNonPaiement) { if (null === $motifNonPaiement) return false; @@ -275,6 +288,15 @@ class VolumeHoraireListe if ($motifNonPaiement !== $this->motifNonPaiement) return false; } } + //Uniquement en mode semestriel car en mode calendaire on ne doit pas être sur des mêmes horaires de début et de fin + if (false !== $this->tag && $this->getServiceContext()->isModaliteServicesSemestriel($volumeHoraire->getTypeVolumeHoraire()->getCode())) { + $tag = $volumeHoraire->getTag(); + if (true === $this->tag) { + if (null === $tag) return false; + } else { + if ($tag !== $this->tag) return false; + } + } if (false !== $this->contrat) { $contrat = $volumeHoraire->getContrat(); if (true === $this->contrat) { @@ -323,7 +345,6 @@ class VolumeHoraireListe } - private function timestamp(?\DateTime $dateTime): int { if ($dateTime instanceof \DateTime) { @@ -334,7 +355,6 @@ class VolumeHoraireListe } - /** * @return Source|bool */ @@ -344,7 +364,6 @@ class VolumeHoraireListe } - /** * @param Source|bool $source * @@ -359,14 +378,12 @@ class VolumeHoraireListe } - public function getFilterByHistorique(): bool { return $this->filterByHistorique; } - public function setFilterByHistorique(bool $filterByHistorique): VolumeHoraireListe { $this->filterByHistorique = $filterByHistorique; @@ -376,14 +393,12 @@ class VolumeHoraireListe } - public function getNew(): bool { return $this->new; } - /** * @param bool $new * @@ -398,7 +413,6 @@ class VolumeHoraireListe } - /** * Détermine si, dans la liste des heures, des périodes non autorisées sont présentes */ @@ -416,14 +430,13 @@ class VolumeHoraireListe } - /** * Retourne la liste des types d'intervention concernés par le service */ public function getTypesIntervention(): array { $typesIntervention = []; - $vhs = $this->getVolumeHoraires(); + $vhs = $this->getVolumeHoraires(); foreach ($vhs as $vh) { if (!isset($typesIntervention[$vh->getTypeIntervention()->getId()])) { $typesIntervention[$vh->getTypeIntervention()->getId()] = $vh->getTypeIntervention(); @@ -434,7 +447,6 @@ class VolumeHoraireListe } - /** * * @return Periode[] @@ -453,14 +465,13 @@ class VolumeHoraireListe } - /** * * @return MotifNonPaiement[] */ public function getMotifsNonPaiement(): array { - $mnps = []; + $mnps = []; $vChild = $this->createChild(); foreach ($this->getVolumeHoraires() as $volumeHoraire) { if ($mnp = $volumeHoraire->getMotifNonPaiement()) { @@ -482,6 +493,33 @@ class VolumeHoraireListe return $mnps; } + /** + * + * @return Tag[] + */ + public function getTags(): array + { + $tags = []; + $vChild = $this->createChild(); + foreach ($this->getVolumeHoraires() as $volumeHoraire) { + if ($tag = $volumeHoraire->getTag()) { + $vChild->setTag($tag); + if ($vChild->getHeures() !== 0) { + $tags[$tag->getId()] = $tag; + } + } else { + $vChild->setTag(null); + if ($vChild->getHeures() !== 0) { + $tags[0] = null; + } + } + } + uasort($tags, function ($a, $b) { + return ($a ? $a->getLibelleLong() : '') > ($b ? $b->getLibelleLong() : '') ? 1 : 0; + }); + + return $tags; + } private function makeSousListeId(VolumeHoraire $vh, array $filtres = []): string @@ -489,8 +527,8 @@ class VolumeHoraireListe $id = []; foreach ($filtres as $filtre) { - $rule = self::FILTRES_LIST[$filtre]; - $getter = 'get' . $rule['accessor']; + $rule = self::FILTRES_LIST[$filtre]; + $getter = 'get' . $rule['accessor']; $toIntFunc = $rule['to-int-func']; if (is_object($v = $vh->$getter()) && is_a($v, $rule['class'])) { if ($toIntFunc) { @@ -517,7 +555,6 @@ class VolumeHoraireListe } - /** * @param array $filtres * @@ -526,7 +563,7 @@ class VolumeHoraireListe public function getSousListes(array $filtres = []): array { $listes = []; - $vhs = $this->getService()->getOrderedVolumeHoraire(); + $vhs = $this->getService()->getOrderedVolumeHoraire(); foreach ($vhs as $vh) { $vhId = $this->makeSousListeId($vh, $filtres); if (!array_key_exists($vhId, $listes)) { @@ -538,13 +575,12 @@ class VolumeHoraireListe } - /** * retourne une liste fille de volumes horaires */ public function createChild(): VolumeHoraireListe { - $vhlph = new ListeFilterHydrator(); + $vhlph = new ListeFilterHydrator(); $volumeHoraireListe = new VolumeHoraireListe($this->getService()); $vhlph->hydrate($vhlph->extract($this), $volumeHoraireListe); $volumeHoraireListe->__debug = $this->__debug; @@ -553,10 +589,9 @@ class VolumeHoraireListe } - /** * @param VolumeHoraire $vh - * @param array $filtres + * @param array $filtres * * @return VolumeHoraireListe */ @@ -583,6 +618,9 @@ class VolumeHoraireListe if (in_array(self::FILTRE_MOTIF_NON_PAIEMENT, $filtres)) { $this->setMotifNonPaiement($vh->getMotifNonPaiement()); } + if (in_array(self::FILTRE_TAG, $filtres)) { + $this->setTag($vh->getTag()); + } if (in_array(self::FILTRE_PERIODE, $filtres)) { $this->setPeriode($vh->getPeriode()); } @@ -605,10 +643,9 @@ class VolumeHoraireListe } - /** * @param VolumeHoraireListe $vhl - * @param array $filtres + * @param array $filtres * * @return VolumeHoraireListe */ @@ -635,6 +672,9 @@ class VolumeHoraireListe if (in_array(self::FILTRE_MOTIF_NON_PAIEMENT, $filtres)) { $this->setMotifNonPaiement($vhl->getMotifNonPaiement()); } + if (in_array(self::FILTRE_TAG, $filtres)) { + $this->setTag($vhl->getTag()); + } if (in_array(self::FILTRE_PERIODE, $filtres)) { $this->setPeriode($vhl->getPeriode()); } @@ -655,11 +695,10 @@ class VolumeHoraireListe } - public function getHeures(): float { $volumesHoraires = $this->getVolumeHoraires(); - $heures = 0; + $heures = 0; foreach ($volumesHoraires as $volumeHoraire) { $heures += $volumeHoraire->getHeures(); } @@ -668,7 +707,6 @@ class VolumeHoraireListe } - public function isVolumeHoraireModifiable(VolumeHoraire $volumeHoraire): bool { return !( @@ -680,7 +718,6 @@ class VolumeHoraireListe } - /** * Affecte un certain nombre d'heures à la liste * @@ -707,7 +744,7 @@ class VolumeHoraireListe } $lastHeures = $this->getHeures(); - $newHeures = $heures - $lastHeures; + $newHeures = $heures - $lastHeures; if (0 == $newHeures) return $this; // pas de changement!! @@ -738,16 +775,23 @@ class VolumeHoraireListe } } + /* Sinon on privilégie sans tag */ + $taga = $a->getTag() ? 1 : 0; + $tagb = $b->getTag() ? 1 : 0; + if ($taga != $tagb) return $taga > $tagb; + /* Sinon on trie par date */ $hda = $a->getHoraireDebut() ? $a->getHoraireDebut()->getTimestamp() : 0; $hdb = $b->getHoraireDebut() ? $b->getHoraireDebut()->getTimestamp() : 0; if ($hda != $hdb) return ($hda > $hdb) ? 1 : -1; + /* Sinon on privilégie sans motif de non paiement */ $mnpa = $a->getMotifNonPaiement() ? 1 : 0; $mnpb = $b->getMotifNonPaiement() ? 1 : 0; if ($mnpa != $mnpb) return $mnpa > $mnpb; + /* Si c'est pareil alors on ne supprime surtout pas pour pouvoir garder!! */ if ($heures + $aHeures * -1 == 0) { return 1; @@ -794,35 +838,35 @@ class VolumeHoraireListe foreach ($vhs as $volumeHoraire) { if ($newHeures == 0) break; - $vhHeures = $volumeHoraire->getHeures(); + $vhHeures = $volumeHoraire->getHeures(); $vhNewHeures = $vhHeures; /* Si les heures sont de signe différent et qu'il y a */ if ($newHeures < 0) { if ($vhHeures < 0) { $vhNewHeures += $newHeures; - $newHeures = 0;// OK + $newHeures = 0;// OK } else { if ($vhHeures <= $newHeures * -1) { $vhNewHeures = 0; - $newHeures += $vhHeures; + $newHeures += $vhHeures; } else { $vhNewHeures += $newHeures; - $newHeures = 0; // OK + $newHeures = 0; // OK } } } else { if ($vhHeures < 0) { if ($vhHeures * -1 <= $newHeures) { $vhNewHeures = 0; // OK - $newHeures += $vhHeures; + $newHeures += $vhHeures; } else { $vhNewHeures += $newHeures; - $newHeures = 0; // OK + $newHeures = 0; // OK } } else { $vhNewHeures += $newHeures; // OK - $newHeures = 0; + $newHeures = 0; } } @@ -863,6 +907,9 @@ class VolumeHoraireListe if ($this->getMotifNonPaiement() instanceof MotifNonPaiement) { $volumeHoraire->setMotifNonPaiement($this->getMotifNonPaiement()); } + if ($this->getTag() instanceof Tag) { + $volumeHoraire->setTag($this->getTag()); + } $volumeHoraire->setHeures($newHeures); $this->getService()->addVolumeHoraire($volumeHoraire); } @@ -871,7 +918,6 @@ class VolumeHoraireListe } - /** * @param $heures * @param $ancienMotifNonPaiement @@ -879,11 +925,11 @@ class VolumeHoraireListe * * @return $this */ - public function moveHeuresFromAncienMotifNonPaiement($heures, $ancienMotifNonPaiement): VolumeHoraireListe + public function moveHeuresFromAncienMotifNonPaiementOrTag($heures, $ancienMotifNonPaiement, $ancienTag): VolumeHoraireListe { - if ($this->__debug) $this->__debug->dumpAction('moveHeuresFromAncienMotifNonPaiement', $heures, $ancienMotifNonPaiement); + if ($this->__debug) $this->__debug->dumpAction('moveHeuresFromAncienMotifNonPaiementOrTag', $heures, $ancienMotifNonPaiement, $ancienTag); - if ($ancienMotifNonPaiement == $this->getMotifNonPaiement()) { + if ($ancienMotifNonPaiement == $this->getMotifNonPaiement() && $ancienTag == $this->getTag()) { return $this->setHeures($heures); } @@ -891,6 +937,7 @@ class VolumeHoraireListe $vhl = $this->createChild(); $vhl->setMotifNonPaiement($ancienMotifNonPaiement); + $vhl->setTag($ancienTag); $heuresAnciennes = $vhl->getHeures(); $vhl->setHeures(max($heuresAnciennes - $heures, 0)); @@ -900,30 +947,28 @@ class VolumeHoraireListe } - /** - * @param bool|\DateTime|null $horaireDebut - * @param bool|\DateTime|null $horaireFin - * @param bool|TypeIntervention $typeIntervention - * @param bool|Periode $periode + * @param bool|\DateTime|null $horaireDebut + * @param bool|\DateTime|null $horaireFin + * @param bool|TypeIntervention $typeIntervention + * @param bool|Periode $periode * @param bool|MotifNonPaiement|null $motifNonPaiement * * @return $this */ - public function changeAll($horaireDebut, $horaireFin, $typeIntervention, $periode, $motifNonPaiement): VolumeHoraireListe + public function changeAll($horaireDebut, $horaireFin, $typeIntervention, $periode, $motifNonPaiement, $tag): VolumeHoraireListe { if ($this->__debug) $this->__debug->dumpAction('changeAll', $horaireDebut, $horaireFin, $typeIntervention, $periode, $motifNonPaiement); - $vhs = $this->getVolumeHoraires(); + $vhs = $this->getVolumeHoraires(); $heuresAReporter = 0; - $reports = []; + $reports = []; $reportFilters = [ self::FILTRE_HORAIRE_DEBUT, self::FILTRE_HORAIRE_FIN, self::FILTRE_TYPE_INTERVENTION, self::FILTRE_PERIODE, - self::FILTRE_MOTIF_NON_PAIEMENT, ]; foreach ($vhs as $vh) { @@ -944,9 +989,13 @@ class VolumeHoraireListe if ($motifNonPaiement !== false) { $vh->setMotifNonPaiement($motifNonPaiement); } + if ($tag !== false) { + $vh->setTag($tag); + } + } else { $heuresAReporter += $vh->getHeures(); - $rid = $this->makeSousListeId($vh, $reportFilters); + $rid = $this->makeSousListeId($vh, $reportFilters); if (!isset($reports[$rid])) { $reports[$rid] = [ 'liste' => $this->createChild()->filterByVolumeHoraire($vh, $reportFilters), @@ -969,6 +1018,7 @@ class VolumeHoraireListe $this->setTypeIntervention($typeIntervention); $this->setPeriode($periode); $this->setMotifNonPaiement($motifNonPaiement); + $this->setTag($tag); /* On ajoute les heures correspondant aux nouveaux filtres */ if ($heuresAReporter !== 0) { @@ -979,7 +1029,6 @@ class VolumeHoraireListe } - /** * Détermine si la liste est vide ou non */ @@ -989,7 +1038,6 @@ class VolumeHoraireListe } - /** * Retourne le nombre de volumes horaires concernés par la liste */ @@ -999,7 +1047,6 @@ class VolumeHoraireListe } - /** * * @return TypeVolumeHoraire|boolean @@ -1010,7 +1057,6 @@ class VolumeHoraireListe } - /** * * @param TypeVolumeHoraire|boolean $typeVolumeHoraire @@ -1032,7 +1078,6 @@ class VolumeHoraireListe } - /** * * @return Periode|boolean @@ -1043,7 +1088,6 @@ class VolumeHoraireListe } - /** * * @param Periode|boolean $periode @@ -1065,7 +1109,6 @@ class VolumeHoraireListe } - /** * * @return TypeIntervention|boolean @@ -1076,7 +1119,6 @@ class VolumeHoraireListe } - /** * * @param TypeIntervention|boolean $typeIntervention @@ -1098,7 +1140,6 @@ class VolumeHoraireListe } - /** * @return bool|\DateTime */ @@ -1108,7 +1149,6 @@ class VolumeHoraireListe } - /** * @param bool|\DateTime $horaireDebut * @@ -1129,7 +1169,6 @@ class VolumeHoraireListe } - /** * @return bool|\DateTime */ @@ -1139,7 +1178,6 @@ class VolumeHoraireListe } - /** * @param bool|\DateTime $horaireFin * @@ -1160,7 +1198,6 @@ class VolumeHoraireListe } - /** * * @return EtatVolumeHoraire|boolean @@ -1171,7 +1208,6 @@ class VolumeHoraireListe } - /** * * @param EtatVolumeHoraire|boolean $etatVolumeHoraire @@ -1193,7 +1229,6 @@ class VolumeHoraireListe } - /** * * @return MotifNonPaiement|boolean @@ -1204,7 +1239,6 @@ class VolumeHoraireListe } - /** * * @param MotifNonPaiement|boolean $motifNonPaiement @@ -1225,7 +1259,33 @@ class VolumeHoraireListe return $this; } + /** + * + * @return Tag|boolean + */ + public function getTag() + { + return $this->tag; + } + /** + * + * @param Tag|boolean $tag + * + * @return self + */ + public function setTag($tag): VolumeHoraireListe + { + if ($tag !== $this->tag) { + + if (!(is_bool($tag) || null === $tag || $tag instanceof Tag)) { + throw new RuntimeException('Valeur non autorisée'); + } + $this->tag = $tag; + } + + return $this; + } /** * @@ -1237,7 +1297,6 @@ class VolumeHoraireListe } - /** * * @param Contrat|boolean $contrat @@ -1259,7 +1318,6 @@ class VolumeHoraireListe } - /** * * @return Validation|boolean @@ -1270,7 +1328,6 @@ class VolumeHoraireListe } - /** * * @param Validation|boolean $validation diff --git a/module/Enseignement/src/Form/EnseignementSaisieFieldset.php b/module/Enseignement/src/Form/EnseignementSaisieFieldset.php index 13d0f897ffc69dfa8b0fdf79a9b6749da6e4e315..7b496817abbc9fa4e086c027210d2d3ace54b427 100755 --- a/module/Enseignement/src/Form/EnseignementSaisieFieldset.php +++ b/module/Enseignement/src/Form/EnseignementSaisieFieldset.php @@ -2,24 +2,24 @@ namespace Enseignement\Form; -use Application\Entity\Db\ElementPedagogique; -use Enseignement\Entity\Db\Service; +use Application\Entity\Db\Etablissement; use Application\Entity\Db\Traits\IntervenantAwareTrait; use Application\Form\AbstractFieldset; -use Application\Form\OffreFormation\Traits\ElementPedagogiqueRechercheFieldsetAwareTrait; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; +use Application\Service\Traits\EtablissementServiceAwareTrait; +use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; -use Application\Service\Traits\NiveauEtapeServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; +use Enseignement\Entity\Db\Service; +use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Form\Traits\ElementPedagogiqueRechercheFieldsetAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; use UnicaenApp\Form\Element\SearchAndSelect; -use Application\Entity\Db\Etablissement; use UnicaenAuth\Service\Traits\AuthorizeServiceAwareTrait; -use Application\Service\Traits\IntervenantServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtablissementServiceAwareTrait; -use Laminas\Hydrator\HydratorInterface; /** @@ -118,7 +118,7 @@ class EnseignementSaisieFieldset extends AbstractFieldset { /* Peuple le formulaire avec les valeurs par défaut issues du contexte global */ $fs = $this->get('element-pedagogique'); - /* @var $fs \Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset */ + /* @var $fs \OffreFormation\Form\ElementPedagogiqueRechercheFieldset */ /* Peuple le formulaire avec les valeurs issues du contexte local */ if ($this->has('intervenant') && $this->getServiceLocalContext()->getIntervenant()) { @@ -160,7 +160,7 @@ class EnseignementSaisieFieldset extends AbstractFieldset { /* Met à jour le contexte local en fonction des besoins... */ $fs = $this->get('element-pedagogique'); - /* @var $fs \Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset */ + /* @var $fs \OffreFormation\Form\ElementPedagogiqueRechercheFieldset */ /* Peuple le formulaire avec les valeurs issues du contexte local */ if ($structureId = $fs->get('structure')->getValue()) { diff --git a/module/Enseignement/src/Form/EnseignementSaisieForm.php b/module/Enseignement/src/Form/EnseignementSaisieForm.php index 5266c145aeba9ef381cb0fbb8e9b7a9c1c2049f5..3b7c697b31b649c5c56ab0b988572740da13be77 100755 --- a/module/Enseignement/src/Form/EnseignementSaisieForm.php +++ b/module/Enseignement/src/Form/EnseignementSaisieForm.php @@ -3,16 +3,15 @@ namespace Enseignement\Form; use Application\Entity\Db\Periode; -use Enseignement\Entity\Db\Service; -use Laminas\Form\FormInterface; -use Service\Entity\Db\TypeVolumeHoraireAwareTrait; use Application\Form\AbstractForm; -use Enseignement\Form\EnseignementSaisieFieldsetAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\PeriodeServiceAwareTrait; -use Application\Entity\Db\Etablissement; +use Application\Service\Traits\LocalContextServiceAwareTrait; +use Enseignement\Entity\Db\Service; use Laminas\Form\Element\Hidden; +use Laminas\Form\FormInterface; use Laminas\Hydrator\HydratorInterface; +use Application\Service\Traits\PeriodeServiceAwareTrait; +use Service\Entity\Db\TypeVolumeHoraireAwareTrait; /** @@ -25,6 +24,7 @@ class EnseignementSaisieForm extends AbstractForm use TypeVolumeHoraireAwareTrait; use PeriodeServiceAwareTrait; use ContextServiceAwareTrait; + use LocalContextServiceAwareTrait; use EnseignementSaisieFieldsetAwareTrait; use VolumeHoraireSaisieMultipleFieldsetAwareTrait; @@ -40,14 +40,13 @@ class EnseignementSaisieForm extends AbstractForm } - /** * Bind an object to the form * * Ensures the object is populated with validated values. * * @param object $object - * @param int $flags + * @param int $flags * * @return mixed|void */ @@ -61,7 +60,6 @@ class EnseignementSaisieForm extends AbstractForm } - public function init() { $this->setName('service') @@ -74,7 +72,8 @@ class EnseignementSaisieForm extends AbstractForm $this->add($this->getFieldsetEnseignementSaisie()); // Product Fieldset - if ($this->getServiceContext()->isModaliteServicesSemestriel($this->getTypeVolumeHoraire())) { + $intervenant = $this->getServiceLocalContext()->getIntervenant(); + if ($this->getServiceContext()->isModaliteServicesSemestriel($intervenant)) { foreach ($this->getPeriodes() as $periode) { $pf = $this->getFieldsetVolumeHoraireSaisieMultiple(); $pf->setName($periode->getCode()); @@ -96,21 +95,18 @@ class EnseignementSaisieForm extends AbstractForm } - public function initFromContext() { $this->get('service')->initFromContext(); } - public function saveToContext() { $this->get('service')->saveToContext(); } - public function getInputFilterSpecification() { return []; @@ -118,9 +114,6 @@ class EnseignementSaisieForm extends AbstractForm } - - - /** * * @@ -144,11 +137,10 @@ class EnseignementSaisieFormHydrator implements HydratorInterface } - /** * Hydrate $object with the provided $data. * - * @param array $data + * @param array $data * @param Service $object * * @return object @@ -161,7 +153,6 @@ class EnseignementSaisieFormHydrator implements HydratorInterface } - /** * Extract values from an object * @@ -171,7 +162,7 @@ class EnseignementSaisieFormHydrator implements HydratorInterface */ public function extract($object): array { - $data = []; + $data = []; $data['service'] = $object; foreach ($this->getPeriodes() as $periode) { $data[$periode->getCode()] = $object->getVolumeHoraireListe($periode); diff --git a/module/Enseignement/src/Form/VolumeHoraireSaisieCalendaireForm.php b/module/Enseignement/src/Form/VolumeHoraireSaisieCalendaireForm.php index 9b34888b7413cdaa5e9fa1b2d27840358fdab6cd..d3995359083c633f0e1ff99fc2fdc806af15e4bf 100644 --- a/module/Enseignement/src/Form/VolumeHoraireSaisieCalendaireForm.php +++ b/module/Enseignement/src/Form/VolumeHoraireSaisieCalendaireForm.php @@ -2,26 +2,29 @@ namespace Enseignement\Form; -use Application\Constants; use Application\Entity\Db\MotifNonPaiement; use Application\Entity\Db\Periode; -use Application\Entity\Db\TypeIntervention; -use Enseignement\Entity\VolumeHoraireListe; +use Application\Filter\DateTimeFromString; use Application\Filter\FloatFromString; use Application\Form\AbstractForm; -use Enseignement\Hydrator\ListeFilterHydrator; use Application\Service\Traits\MotifNonPaiementServiceAwareTrait; use Application\Service\Traits\PeriodeServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use UnicaenApp\Util; +use Application\Service\Traits\TagServiceAwareTrait; +use Enseignement\Entity\VolumeHoraireListe; +use Enseignement\Hydrator\ListeFilterHydrator; +use Laminas\Form\Element\DateTimeLocal; use Laminas\Form\Element\Hidden; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; use UnicaenApp\Service\EntityManagerAwareTrait; +use UnicaenApp\Util; class VolumeHoraireSaisieCalendaireForm extends AbstractForm { use MotifNonPaiementServiceAwareTrait; + use TagServiceAwareTrait; use TypeInterventionServiceAwareTrait; use PeriodeServiceAwareTrait; @@ -35,6 +38,15 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm */ protected $editMNP = false; + /** + * @var boolean + */ + protected $viewTag = false; + + /** + * @var boolean + */ + protected $editTag = false; /** @@ -48,7 +60,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - /** * @return TypeIntervention[] */ @@ -61,7 +72,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - /** * @return Periode[] */ @@ -74,7 +84,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - public function build() { $this->setAttributes([ @@ -88,20 +97,18 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm $this->setHydrator($hydrator); $this->add([ - 'type' => 'DateTime', + 'type' => DateTimeLocal::class, 'name' => 'horaire-debut', 'options' => [ - 'label' => 'Horaire de début', - 'format' => Constants::DATETIME_FORMAT, + 'label' => 'Horaire de début', ], ]); $this->add([ - 'type' => 'DateTime', + 'type' => DateTimeLocal::class, 'name' => 'horaire-fin', 'options' => [ - 'label' => 'Horaire de fin', - 'format' => Constants::DATETIME_FORMAT, + 'label' => 'Horaire de fin', ], ]); @@ -114,7 +121,7 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm ], 'attributes' => [ 'value' => '', - 'title' => 'Période (semestre 1 ou 2)', + 'title' => 'Période(semestre 1 ou 2)', ], ]); @@ -149,9 +156,10 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm 'type' => 'Select', 'name' => 'motif-non-paiement', 'options' => [ - 'label' => "Motif de non paiement :", - 'empty_option' => "Aucun motif : paiement prévu", - 'value_options' => Util::collectionAsOptions($this->getMotifsNonPaiement()), + 'label' => "Motif de non paiement :", + 'empty_option' => "Aucun motif : paiement prévu", + 'value_options' => Util::collectionAsOptions($this->getMotifsNonPaiement()), + 'disable_inarray_validator' => true, ], 'attributes' => [ 'value' => "", @@ -163,9 +171,33 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm $this->add(new Hidden('motif-non-paiement')); } + + //Gestion des tags + if ($this->canEditTag()) { + $this->add([ + 'type' => 'Select', + 'name' => 'tag', + 'options' => [ + 'label' => "Tag :", + 'empty_option' => "Aucun tag", + 'value_options' => Util::collectionAsOptions($this->getServiceTag()->getList()), + 'disable_inarray_validator' => true, + + ], + 'attributes' => [ + 'value' => "", + 'title' => "Tag", + 'class' => 'volume-horaire volume-horaire-tag input-sm', + ], + ]); + } else { + $this->add(new Hidden('tag')); + } + $this->add(new Hidden('service')); $this->add(new Hidden('type-volume-horaire')); $this->add(new Hidden('ancien-motif-non-paiement')); + $this->add(new Hidden('ancien-tag')); $this->add(new Hidden('ancien-horaire-debut')); $this->add(new Hidden('ancien-horaire-fin')); $this->add(new Hidden('ancien-periode')); @@ -196,7 +228,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - /** * @return bool */ @@ -206,7 +237,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - /** * @param bool $viewMNP * @@ -220,7 +250,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - /** * @return bool */ @@ -230,6 +259,49 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } + /** + * @return bool + */ + public function canViewTag(): bool + { + return $this->viewTag; + } + + + /** + * @param bool $viewTag + * + * @return Saisie + */ + public function setViewTag(bool $viewTag): self + { + $this->viewTag = $viewTag; + + return $this; + } + + + /** + * @return bool + */ + public function canEditTag(): bool + { + return $this->editTag; + } + + + /** + * @param bool $editTag + * + * @return Saisie + */ + public function setEditTag(bool $editTag): self + { + $this->editTag = $editTag; + + return $this; + } + /** * @param bool $editMNP @@ -244,7 +316,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - /** * Should return an array specification compatible with * {@link Laminas\InputFilter\Factory::createInputFilter()}. @@ -255,29 +326,29 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm { return [ 'horaire-debut' => [ - 'required' => false, + 'required' => true, ], 'horaire-fin' => [ - 'required' => false, + 'required' => true, 'validators' => [[ - 'name' => 'Callback', - 'options' => [ - 'messages' => [ - \Laminas\Validator\Callback::INVALID_VALUE => 'L\'horaire de fin doit être ultérieur à l\'horaire de début', - ], - 'callback' => function ($value, $context = []) { - if (!$context['horaire-debut'] && $context['horaire-fin']) return true; // pas d'horaires de saisis - - $horaireDebut = \DateTime::createFromFormat(Constants::DATETIME_FORMAT, $context['horaire-debut']); - $horaireFin = \DateTime::createFromFormat(Constants::DATETIME_FORMAT, $context['horaire-fin']); - $deb = $horaireDebut->getTimestamp(); - $fin = $horaireFin->getTimestamp(); - $diff = $fin - $deb; - - return $diff >= 0; - }, - ], - ]], + 'name' => 'Callback', + 'options' => [ + 'messages' => [ + \Laminas\Validator\Callback::INVALID_VALUE => 'L\'horaire de fin doit être ultérieur à l\'horaire de début', + ], + 'callback' => function ($value, $context = []) { + if (!$context['horaire-debut'] && $context['horaire-fin']) return true; // pas d'horaires de saisis + + $horaireDebut = DateTimeFromString::run($context['horaire-debut']); + $horaireFin = DateTimeFromString::run($context['horaire-fin']); + $deb = $horaireDebut->getTimestamp(); + $fin = $horaireFin->getTimestamp(); + $diff = $fin - $deb; + + return $diff >= 0; + }, + ], + ]], ], 'motif-non-paiement' => [ 'required' => false, @@ -285,6 +356,12 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm 'ancien-motif-non-paiement' => [ 'required' => false, ], + 'tag' => [ + 'required' => false, + ], + 'ancien-tag' => [ + 'required' => false, + ], 'ancien-horaire-debut' => [ 'required' => false, ], @@ -314,9 +391,6 @@ class VolumeHoraireSaisieCalendaireForm extends AbstractForm } - - - /** * * @@ -332,68 +406,73 @@ class SaisieCalendaireHydrator implements HydratorInterface private $data; - private function getVal($key) { if (isset($this->data[$key])) { - return $this->data[$key]; + switch ($key) { + case 'horaire-debut': + case 'horaire-fin': + return DateTimeFromString::run($this->data[$key]); + default: + return $this->data[$key]; + } } else { return null; } } - /** * Hydrate $object with the provided $data. * - * @param array $data + * @param array $data * @param VolumeHoraireListe $object * * @return object */ public function hydrate(array $data, $object) { - //$dumper = vhlDump($object); + $this->data = $data; $lfh = new ListeFilterHydrator(); $lfh->setEntityManager($this->getEntityManager()); - $ho = ['format' => Constants::DATETIME_FORMAT]; - $ancienHoraireDebut = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_DEBUT, $this->getVal('ancien-horaire-debut'), $ho); - $horaireDebut = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_DEBUT, $this->getVal('horaire-debut'), $ho); + $ancienHoraireDebut = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_DEBUT, $this->getVal('ancien-horaire-debut')); + $horaireDebut = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_DEBUT, $this->getVal('horaire-debut')); $object->setHoraireDebut($ancienHoraireDebut != $horaireDebut ? $ancienHoraireDebut : $horaireDebut); - $ancienHoraireFin = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_FIN, $this->getVal('ancien-horaire-fin'), $ho); - $horaireFin = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_FIN, $this->getVal('horaire-fin'), $ho); + $ancienHoraireFin = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_FIN, $this->getVal('ancien-horaire-fin')); + $horaireFin = $lfh->allToData(VolumeHoraireListe::FILTRE_HORAIRE_FIN, $this->getVal('horaire-fin')); $object->setHoraireFin($ancienHoraireFin != $horaireFin ? $ancienHoraireFin : $horaireFin); $ancienTypeIntervention = $lfh->allToData(VolumeHoraireListe::FILTRE_TYPE_INTERVENTION, $this->getVal('ancien-type-intervention')); - $typeIntervention = $lfh->allToData(VolumeHoraireListe::FILTRE_TYPE_INTERVENTION, $this->getVal('type-intervention')); + $typeIntervention = $lfh->allToData(VolumeHoraireListe::FILTRE_TYPE_INTERVENTION, $this->getVal('type-intervention')); $object->setTypeIntervention($ancienTypeIntervention != $typeIntervention && $ancienTypeIntervention ? $ancienTypeIntervention : $typeIntervention); $ancienPeriode = $lfh->allToData(VolumeHoraireListe::FILTRE_PERIODE, $this->getVal('ancien-periode')); - $periode = $lfh->allToData(VolumeHoraireListe::FILTRE_PERIODE, $this->getVal('periode')); + $periode = $lfh->allToData(VolumeHoraireListe::FILTRE_PERIODE, $this->getVal('periode')); $object->setPeriode($ancienPeriode != $periode && $ancienPeriode ? $ancienPeriode : $periode); $ancienMotifNonPaiement = $lfh->allToData(VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, $this->getVal('ancien-motif-non-paiement')); - $motifNonPaiement = $lfh->allToData(VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, $this->getVal('motif-non-paiement')); - $object->setMotifNonPaiement($ancienMotifNonPaiement != $motifNonPaiement ? $ancienMotifNonPaiement : $motifNonPaiement); + $motifNonPaiement = $lfh->allToData(VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, $this->getVal('motif-non-paiement')); + $object->setMotifNonPaiement($ancienMotifNonPaiement != $motifNonPaiement && $ancienMotifNonPaiement ? $ancienMotifNonPaiement : $motifNonPaiement); + + $ancienTag = $lfh->allToData(VolumeHoraireListe::FILTRE_TAG, $this->getVal('ancien-tag')); + $tag = $lfh->allToData(VolumeHoraireListe::FILTRE_TAG, $this->getVal('tag')); + $object->setTag($ancienTag != $tag && $ancienTag ? $ancienTag : $tag); $heures = (float)$this->getVal('heures'); - $object->changeAll($horaireDebut, $horaireFin, $typeIntervention, $periode, $motifNonPaiement); + $object->changeAll($horaireDebut, $horaireFin, $typeIntervention, $periode, $motifNonPaiement, $tag); $object->setHeures($heures); - //$dumper->dumpEndToFile(); return $object; } - /** * Extract values from an object * @@ -414,6 +493,7 @@ class SaisieCalendaireHydrator implements HydratorInterface /* Gestion des valeurs anciennes */ $anciens = [ 'motif-non-paiement', + 'tag', 'periode', 'horaire-debut', 'horaire-fin', @@ -424,7 +504,7 @@ class SaisieCalendaireHydrator implements HydratorInterface $data['ancien-' . $ancien] = $data[$ancien]; } } - + /*WIP TAG*/ /* Conversion des dates en objets */ if (isset($data['horaire-debut']) && $data['horaire-debut'] > 0) { $data['horaire-debut'] = (new \DateTime)->setTimestamp($data['horaire-debut']); diff --git a/module/Enseignement/src/Form/VolumeHoraireSaisieForm.php b/module/Enseignement/src/Form/VolumeHoraireSaisieForm.php index ccf90560914d0d88391a09888508952b30fb0d4e..45fc22447e7dbe961cfd3416141fc6d2945a393a 100755 --- a/module/Enseignement/src/Form/VolumeHoraireSaisieForm.php +++ b/module/Enseignement/src/Form/VolumeHoraireSaisieForm.php @@ -4,22 +4,24 @@ namespace Enseignement\Form; use Application\Entity\Db\MotifNonPaiement; use Application\Entity\Db\Periode; -use Application\Entity\Db\TypeIntervention; -use Enseignement\Entity\VolumeHoraireListe; use Application\Filter\FloatFromString; use Application\Form\AbstractForm; -use Enseignement\Hydrator\ListeFilterHydrator; use Application\Service\Traits\MotifNonPaiementServiceAwareTrait; use Application\Service\Traits\PeriodeServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use UnicaenApp\Service\EntityManagerAwareTrait; -use UnicaenApp\Util; +use Application\Service\Traits\TagServiceAwareTrait; +use Enseignement\Entity\VolumeHoraireListe; +use Enseignement\Hydrator\ListeFilterHydrator; use Laminas\Form\Element\Hidden; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use UnicaenApp\Service\EntityManagerAwareTrait; +use UnicaenApp\Util; class VolumeHoraireSaisieForm extends AbstractForm { use MotifNonPaiementServiceAwareTrait; + use TagServiceAwareTrait; use TypeInterventionServiceAwareTrait; use PeriodeServiceAwareTrait; @@ -33,6 +35,15 @@ class VolumeHoraireSaisieForm extends AbstractForm */ protected $editMNP = false; + /** + * @var boolean + */ + protected $viewTag = false; + + /** + * @var boolean + */ + protected $editTag = false; /** @@ -46,7 +57,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - /** * @return TypeIntervention[] */ @@ -59,7 +69,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - /** * @return Periode[] */ @@ -72,7 +81,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - public function build() { $this->setAttributes([ @@ -117,11 +125,34 @@ class VolumeHoraireSaisieForm extends AbstractForm $this->add(new Hidden('motif-non-paiement')); } + //Gestion des tags + if ($this->canEditTag()) { + $this->add([ + 'type' => 'Select', + 'name' => 'tag', + 'options' => [ + 'label' => "Tag :", + 'empty_option' => "Aucun tag", + 'value_options' => Util::collectionAsOptions($this->getServiceTag()->getList()), + ], + 'attributes' => [ + 'value' => "", + 'title' => "Tag", + 'class' => 'volume-horaire volume-horaire-tag input-sm', + ], + ]); + } else { + $this->add(new Hidden('tag')); + } + + $this->add(new Hidden('service')); $this->add(new Hidden('periode')); $this->add(new Hidden('type-intervention')); $this->add(new Hidden('type-volume-horaire')); $this->add(new Hidden('ancien-motif-non-paiement')); + $this->add(new Hidden('ancien-tag')); + $this->add([ 'name' => 'submit', @@ -147,7 +178,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - /** * @return bool */ @@ -157,7 +187,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - /** * @param bool $viewMNP * @@ -171,7 +200,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - /** * @return bool */ @@ -181,7 +209,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - /** * @param bool $editMNP * @@ -194,6 +221,48 @@ class VolumeHoraireSaisieForm extends AbstractForm return $this; } + /** + * @return bool + */ + public function canViewTag(): bool + { + return $this->viewTag; + } + + + /** + * @param bool $viewTag + * + * @return Saisie + */ + public function setViewTag(bool $viewTag): self + { + $this->viewTag = $viewTag; + + return $this; + } + + + /** + * @return bool + */ + public function canEditTag(): bool + { + return $this->editTag; + } + + + /** + * @param bool $editTag + * + * @return Saisie + */ + public function setEditTag(bool $editTag): self + { + $this->editTag = $editTag; + + return $this; + } /** @@ -211,6 +280,12 @@ class VolumeHoraireSaisieForm extends AbstractForm 'ancien-motif-non-paiement' => [ 'required' => false, ], + 'tag' => [ + 'required' => false, + ], + 'ancien-tag' => [ + 'required' => false, + ], 'periode' => [ 'required' => false, ], @@ -225,9 +300,6 @@ class VolumeHoraireSaisieForm extends AbstractForm } - - - /** * * @@ -243,7 +315,6 @@ class SaisieHydrator implements HydratorInterface private $data; - private function getVal($key) { if (isset($this->data[$key])) { @@ -254,18 +325,17 @@ class SaisieHydrator implements HydratorInterface } - /** * Hydrate $object with the provided $data. * - * @param array $data + * @param array $data * @param VolumeHoraireListe $object * * @return object */ public function hydrate(array $data, $object) { - //$dumper = vhlDump($object); + $this->data = $data; @@ -279,19 +349,22 @@ class SaisieHydrator implements HydratorInterface $object->setPeriode($periode); $ancienMotifNonPaiement = $lfh->allToData(VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, $this->getVal('ancien-motif-non-paiement')); - $motifNonPaiement = $lfh->allToData(VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, $this->getVal('motif-non-paiement')); + $motifNonPaiement = $lfh->allToData(VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, $this->getVal('motif-non-paiement')); + + $ancienTag = $lfh->allToData(VolumeHoraireListe::FILTRE_TAG, $this->getVal('ancien-tag')); + $tag = $lfh->allToData(VolumeHoraireListe::FILTRE_TAG, $this->getVal('tag')); + $heures = (float)$this->getVal('heures'); $object->setMotifNonPaiement($motifNonPaiement); - $object->moveHeuresFromAncienMotifNonPaiement($heures, $ancienMotifNonPaiement); + $object->setTag($tag); + $object->moveHeuresFromAncienMotifNonPaiementOrTag($heures, $ancienMotifNonPaiement, $ancienTag); - //$dumper->dumpEndToFile(); return $object; } - /** * Extract values from an object * @@ -309,9 +382,11 @@ class SaisieHydrator implements HydratorInterface /* Ajout des heures */ $data['heures'] = $object->getHeures(); + /* Gestion des valeurs anciennes */ $anciens = [ 'motif-non-paiement', + 'tag', ]; foreach ($anciens as $ancien) { if (isset($data[$ancien])) { diff --git a/module/Enseignement/src/Form/VolumeHoraireSaisieMultipleFieldset.php b/module/Enseignement/src/Form/VolumeHoraireSaisieMultipleFieldset.php index 778873c96b822ed9de7f01107ca4c56098081485..00abadda2aa130fa5c060d5967c023b89cbe2f16 100755 --- a/module/Enseignement/src/Form/VolumeHoraireSaisieMultipleFieldset.php +++ b/module/Enseignement/src/Form/VolumeHoraireSaisieMultipleFieldset.php @@ -2,14 +2,14 @@ namespace Enseignement\Form; -use Enseignement\Entity\VolumeHoraireListe; use Application\Filter\FloatFromString; +use Application\Filter\StringFromFloat; use Application\Form\AbstractFieldset; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; +use Enseignement\Entity\Db\Service; +use Enseignement\Entity\VolumeHoraireListe; use Laminas\Form\Element\Hidden; -use Application\Filter\StringFromFloat; use Laminas\Hydrator\HydratorInterface; -use Enseignement\Entity\Db\Service; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; use UnicaenApp\Service\EntityManagerAwareTrait; @@ -26,7 +26,7 @@ class VolumeHoraireSaisieMultipleFieldset extends AbstractFieldset /** * - * @return \Application\Entity\Db\TypeIntervention[] + * @return \OffreFormation\Entity\Db\TypeIntervention[] */ public function getTypesInterventions() { @@ -116,7 +116,7 @@ class SaisieMultipleHydrator implements HydratorInterface /** * - * @return \Application\Service\TypeInterventionService[] + * @return \OffreFormation\Service\TypeInterventionService[] */ public function getTypesInterventions(Service $service) { diff --git a/module/Enseignement/src/Hydrator/ListeFilterHydrator.php b/module/Enseignement/src/Hydrator/ListeFilterHydrator.php index 37f15e13874b8310eb16c1547add63baadfbe493..627bbddce39f7a46273732e45cf777ebc01665a7 100644 --- a/module/Enseignement/src/Hydrator/ListeFilterHydrator.php +++ b/module/Enseignement/src/Hydrator/ListeFilterHydrator.php @@ -18,7 +18,6 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf private $filters; - /** * Extract values from an object * @@ -31,7 +30,7 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf $data = []; foreach (VolumeHoraireListe::FILTRES_LIST as $filter => $rule) { if ($this->hasFilter($filter)) { - $method = 'get' . $rule['accessor']; + $method = 'get' . $rule['accessor']; $data[$filter] = $object->$method(); } } @@ -40,7 +39,6 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf } - /** * -2 = false * -1 = true @@ -52,7 +50,7 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf * * @return int */ - public function dataToInt(string $filter, $value): int + public function dataToInt(string $filter, $value): ?int { if (false === $value) return -2; if (true === $value) return -1; @@ -65,11 +63,10 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf } - /** * @param string $filter * @param $value - * @param array $options + * @param array $options * * @return bool|\DateTime|int|null|object * @throws \Doctrine\ORM\ORMException @@ -78,6 +75,7 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf */ public function allToData(string $filter, $value, $options = []) { + if ( is_bool($value) || null === $value || is_object($value) ) { @@ -101,7 +99,7 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf $dateTime = new \DateTime; $dateTime->setTimestamp($valInt); } else { - $format = isset($options['format']) ? $options['format'] : Constants::DATETIME_FORMAT; + $format = isset($options['format']) ? $options['format'] : Constants::DATETIME_FORMAT; $dateTime = \DateTime::createFromFormat($format, $value); } @@ -116,7 +114,6 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf } - /** * Extract values from an object * @@ -140,28 +137,28 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf } - /** * Hydrate $object with the provided $data. * - * @param array $data + * @param array $data * @param VolumeHoraireListe $object * * @return object */ public function hydrate(array $data, $object) { + foreach ($data as $filter => $value) { if ($this->hasFilter($filter)) { - $rule = VolumeHoraireListe::FILTRES_LIST[$filter]; - $method = 'set' . $rule['accessor']; + $rule = VolumeHoraireListe::FILTRES_LIST[$filter]; + $method = 'set' . $rule['accessor']; + $val = $this->allToData($filter, $value); $data[$filter] = $object->$method($this->allToData($filter, $value)); } } } - /** * @return array */ @@ -171,7 +168,6 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf } - /** * @param array $filters * @@ -185,7 +181,6 @@ class ListeFilterHydrator implements HydratorInterface, EntityManagerAwareInterf } - public function hasFilter(string $filter): bool { $filtres = VolumeHoraireListe::FILTRE_LIST; diff --git a/module/Enseignement/src/Processus/EnseignementProcessus.php b/module/Enseignement/src/Processus/EnseignementProcessus.php index 2c14c127e8247582aad0a6de0393e42951e68a7a..7335f8cbf51be4878fdb94c067eb5638a5eb32fc 100755 --- a/module/Enseignement/src/Processus/EnseignementProcessus.php +++ b/module/Enseignement/src/Processus/EnseignementProcessus.php @@ -4,23 +4,23 @@ namespace Enseignement\Processus; use Application\Entity\Db\Intervenant; use Application\Processus\AbstractProcessus; +use Application\Service\IntervenantService; +use Application\Service\MotifNonPaiementService; +use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; +use Application\Service\Traits\PeriodeServiceAwareTrait; +use Application\Service\Traits\StructureServiceAwareTrait; use Enseignement\Entity\Db\Service; use Enseignement\Service\ServiceServiceAwareTrait; +use Enseignement\Service\VolumeHoraireServiceAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use OffreFormation\Service\TypeInterventionService; use Service\Entity\Db\TypeVolumeHoraire; use Service\Entity\Recherche; use Service\Service\EtatVolumeHoraireService; -use Application\Service\IntervenantService; -use Application\Service\MotifNonPaiementService; -use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; -use Application\Service\Traits\PeriodeServiceAwareTrait; -use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Enseignement\Service\VolumeHoraireServiceAwareTrait; -use Application\Service\TypeInterventionService; use Service\Service\TypeVolumeHoraireServiceAwareTrait; diff --git a/module/Enseignement/src/Service/ServiceService.php b/module/Enseignement/src/Service/ServiceService.php index e6af4ce3cc798df734c92a6fe9185e83de57530f..c8ad0b073a7fc6450df5bd40901e45fccdb6ada6 100755 --- a/module/Enseignement/src/Service/ServiceService.php +++ b/module/Enseignement/src/Service/ServiceService.php @@ -2,42 +2,39 @@ namespace Enseignement\Service; -use Application\Entity\Db\ElementPedagogique; use Application\Entity\Db\Etablissement; -use Application\Entity\Db\Etape; +use Application\Entity\Db\Intervenant; use Application\Entity\Db\Periode; +use Application\Entity\Db\Structure; +use Application\Entity\NiveauEtape; use Application\Service\AbstractEntityService; -use Application\Service\ElementPedagogiqueService; use Application\Service\EtablissementService; use Application\Service\PeriodeService; -use Application\Service\TypeInterventionService; -use Service\Entity\Db\EtatVolumeHoraire; -use Application\Entity\Db\Intervenant; -use Enseignement\Entity\Db\Service; -use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeIntervention; -use Intervenant\Entity\Db\TypeIntervenant; -use Service\Entity\Db\TypeVolumeHoraire; -use Application\Entity\NiveauEtape; -use Service\Entity\Recherche; -use Enseignement\Entity\VolumeHoraireListe; -use Application\Provider\Privilege\Privileges; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; use Application\Service\Traits\PeriodeServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; -use Intervenant\Service\StatutServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; -use Intervenant\Service\TypeIntervenantServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; use Application\Service\Traits\ValidationServiceAwareTrait; -use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Doctrine\ORM\QueryBuilder; -use Laminas\Session\Container as SessionContainer; +use Enseignement\Entity\Db\Service; +use Enseignement\Entity\VolumeHoraireListe; +use Intervenant\Entity\Db\TypeIntervenant; +use Intervenant\Service\StatutServiceAwareTrait; +use Intervenant\Service\TypeIntervenantServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\ElementPedagogiqueService; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use OffreFormation\Service\TypeInterventionService; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Service\EtatVolumeHoraireServiceAwareTrait; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; /** * Description of Service @@ -79,7 +76,6 @@ class ServiceService extends AbstractEntityService } - /** * Retourne l'alias d'entité courante * @@ -91,7 +87,6 @@ class ServiceService extends AbstractEntityService } - /** * Retourne une nouvelle entité de la classe donnée * @@ -112,19 +107,18 @@ class ServiceService extends AbstractEntityService } - /** * Retourne un service unique selon ses critères précis * - * @param Intervenant $intervenant + * @param Intervenant $intervenant * @param ElementPedagogique $elementPedagogique - * @param Etablissement $etablissement + * @param Etablissement $etablissement * * @return null|Service */ public function getBy( - Intervenant $intervenant, - $elementPedagogique, + Intervenant $intervenant, + $elementPedagogique, Etablissement $etablissement ) { @@ -149,7 +143,6 @@ class ServiceService extends AbstractEntityService } - /** * Sauvegarde une entité * @@ -237,12 +230,11 @@ class ServiceService extends AbstractEntityService } - /** * Supprime (historise par défaut) le service spécifié. * * @param Service $entity Entité à détruire - * @param bool $softDelete + * @param bool $softDelete * * @return self */ @@ -250,7 +242,7 @@ class ServiceService extends AbstractEntityService { if ($softDelete) { $vhListe = $entity->getVolumeHoraireListe(); - $listes = $vhListe->getSousListes([$vhListe::FILTRE_PERIODE, $vhListe::FILTRE_TYPE_INTERVENTION, $vhListe::FILTRE_HORAIRE_DEBUT, $vhListe::FILTRE_HORAIRE_FIN]); + $listes = $vhListe->getSousListes([$vhListe::FILTRE_PERIODE, $vhListe::FILTRE_TYPE_INTERVENTION, $vhListe::FILTRE_HORAIRE_DEBUT, $vhListe::FILTRE_HORAIRE_FIN]); foreach ($listes as $liste) { $liste->setHeures(0); } @@ -278,11 +270,10 @@ class ServiceService extends AbstractEntityService } - /** * Retourne la liste des services selon l'étape donnée * - * @param Etape $etape + * @param Etape $etape * @param QueryBuilder|null $queryBuilder * * @return QueryBuilder @@ -299,11 +290,10 @@ class ServiceService extends AbstractEntityService } - /** * Retourne la liste des services selon l'étape donnée * - * @param Etape $etape + * @param Etape $etape * @param QueryBuilder|null $queryBuilder * * @return QueryBuilder @@ -313,7 +303,7 @@ class ServiceService extends AbstractEntityService [$qb, $alias] = $this->initQuery($qb, $alias); if ($niveauEtape && $niveauEtape->getId() !== '|') { $serviceElement = $this->getServiceElementPedagogique(); - $serviceEtape = $this->getServiceEtape(); + $serviceEtape = $this->getServiceEtape(); $this->leftJoin($serviceElement, $qb, 'elementPedagogique'); $serviceElement->join($serviceEtape, $qb, 'etape'); @@ -324,12 +314,11 @@ class ServiceService extends AbstractEntityService } - /** * * @param TypeVolumeHoraire $typeVolumeHoraire - * @param QueryBuilder $qb - * @param string $alias + * @param QueryBuilder $qb + * @param string $alias * * @return QueryBuilder */ @@ -347,12 +336,11 @@ class ServiceService extends AbstractEntityService } - /** * * @param EtatVolumeHoraire $etatVolumeHoraire - * @param QueryBuilder $qb - * @param string $alias + * @param QueryBuilder $qb + * @param string $alias * * @return QueryBuilder */ @@ -370,7 +358,6 @@ class ServiceService extends AbstractEntityService } - /** * Retourne le query builder permettant de rechercher les services prévisionnels * selon la composante spécifiée. @@ -379,7 +366,7 @@ class ServiceService extends AbstractEntityService * - la structure d'enseignement (champ 'structure_ens') est la structure spécifiée; * - la structure d'affectation (champ 'structure_aff') est la structure spécifiée; * - * @param Structure $structure + * @param Structure $structure * @param QueryBuilder|null $queryBuilder * * @return QueryBuilder @@ -388,12 +375,12 @@ class ServiceService extends AbstractEntityService { [$qb, $alias] = $this->initQuery($qb, $alias); - $serviceStructure = $this->getServiceStructure(); - $serviceIntervenant = $this->getServiceIntervenant(); + $serviceStructure = $this->getServiceStructure(); + $serviceIntervenant = $this->getServiceIntervenant(); $serviceElementPedagogique = $this->getServiceElementPedagogique(); - $serviceStatut = $this->getServiceStatut(); - $iAlias = $serviceIntervenant->getAlias(); - $sAlias = $serviceStatut->getAlias(); + $serviceStatut = $this->getServiceStatut(); + $iAlias = $serviceIntervenant->getAlias(); + $sAlias = $serviceStatut->getAlias(); $this->join($serviceIntervenant, $qb, 'intervenant', false, $alias); $serviceIntervenant->join($serviceStatut, $qb, 'statut', false); @@ -408,11 +395,10 @@ class ServiceService extends AbstractEntityService } - /** * Utile pour la recherche de services * - * @param Structure $structure + * @param Structure $structure * @param QueryBuilder|null $queryBuilder * * @return QueryBuilder @@ -431,11 +417,10 @@ class ServiceService extends AbstractEntityService } - /** * Utile pour la recherche de services * - * @param Structure $structure + * @param Structure $structure * @param QueryBuilder|null $queryBuilder * * @return QueryBuilder @@ -452,12 +437,11 @@ class ServiceService extends AbstractEntityService } - /** * Filtre la liste des services selon lecontexte courant * * @param QueryBuilder|null $qb - * @param string|null $alias + * @param string|null $alias * * @return QueryBuilder */ @@ -478,11 +462,10 @@ class ServiceService extends AbstractEntityService } - /** * Retourne la liste des services selon l'étape donnée * - * @param TypeIntervenant $typeIntervenant + * @param TypeIntervenant $typeIntervenant * @param QueryBuilder|null $queryBuilder * * @return QueryBuilder @@ -499,7 +482,6 @@ class ServiceService extends AbstractEntityService } - /** * Prend les services d'un intervenant, année n-1, et reporte ces services (et les volumes horaires associés) * sur l'année n @@ -509,7 +491,7 @@ class ServiceService extends AbstractEntityService */ public function setPrevusFromPrevus(Intervenant $intervenant) { - $old = $this->getPrevusFromPrevusData($intervenant); + $old = $this->getPrevusFromPrevusData($intervenant); $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getPrevu(); // Enregistrement des services trouvés dans la nouvelle année @@ -524,10 +506,10 @@ class ServiceService extends AbstractEntityService foreach ($o['heures'] as $heures) { $volumeHoraire = $this->getServiceVolumeHoraire()->newEntity(); //@formatter:off - $volumeHoraire->setTypeVolumeHoraire( $typeVolumeHoraire ); - $volumeHoraire->setPeriode ( $heures['periode'] ); - $volumeHoraire->setTypeIntervention ( $heures['type-intervention'] ); - $volumeHoraire->setHeures ( $heures['heures'] ); + $volumeHoraire->setTypeVolumeHoraire($typeVolumeHoraire); + $volumeHoraire->setPeriode($heures['periode']); + $volumeHoraire->setTypeIntervention($heures['type-intervention']); + $volumeHoraire->setHeures($heures['heures']); //@formatter:on $volumeHoraire->setService($service); $service->addVolumeHoraire($volumeHoraire); @@ -545,10 +527,9 @@ class ServiceService extends AbstractEntityService } - public function getPrevusFromPrevusData(Intervenant $intervenant) { - $tvhPrevu = $this->getServiceTypeVolumeHoraire()->getPrevu(); + $tvhPrevu = $this->getServiceTypeVolumeHoraire()->getPrevu(); $tvhSource = $this->getServiceTypeVolumeHoraire()->getByCode($this->getServiceParametres()->get('report_service')); $evhValide = $this->getServiceEtatVolumeHoraire()->getValide(); @@ -556,16 +537,16 @@ class ServiceService extends AbstractEntityService $role = $this->getServiceContext()->getSelectedIdentityRole(); - $sVolumeHoraire = $this->getServiceVolumeHoraire(); + $sVolumeHoraire = $this->getServiceVolumeHoraire(); $sElementPedagogique = $this->getServiceElementPedagogique(); $qb = $this->select(['id', 'elementPedagogique', 'etablissement']); //@formatter:off - $this->join( EtablissementService::class, $qb, 'etablissement', true);//['id', 'sourceCode']); - $this->leftJoin(ElementPedagogiqueService::class, $qb, 'elementPedagogique', true);//['id', 'sourceCode']); - $this->leftJoin($sVolumeHoraire, $qb, 'volumeHoraire', true);//['id', 'periode', 'typeIntervention', 'heures']); - $sVolumeHoraire->leftJoin(PeriodeService::class, $qb, 'periode', true);//['id']); - $sVolumeHoraire->leftJoin(TypeInterventionService::class, $qb, 'typeIntervention', true);//['id']); + $this->join(EtablissementService::class, $qb, 'etablissement', true);//['id', 'sourceCode']); + $this->leftJoin(ElementPedagogiqueService::class, $qb, 'elementPedagogique', true);//['id', 'sourceCode']); + $this->leftJoin($sVolumeHoraire, $qb, 'volumeHoraire', true);//['id', 'periode', 'typeIntervention', 'heures']); + $sVolumeHoraire->leftJoin(PeriodeService::class, $qb, 'periode', true);//['id']); + $sVolumeHoraire->leftJoin(TypeInterventionService::class, $qb, 'typeIntervention', true);//['id']); //@formatter:on $this->finderByHistorique($qb); @@ -598,7 +579,7 @@ class ServiceService extends AbstractEntityService $newPeriode = $newElement ? $newElement->getPeriode() : null; if (empty($oldElement) || !empty($newElement)) { - $o = [ + $o = [ 'element-pedagogique' => $newElement, 'etablissement' => $service->getEtablissement(), 'heures' => [], @@ -609,7 +590,7 @@ class ServiceService extends AbstractEntityService $vhl = $service->getVolumeHoraireListe(); - $periodes = $vhl->getPeriodes(); + $periodes = $vhl->getPeriodes(); $typesIntervention = $vhl->getTypesIntervention(); foreach ($periodes as $periode) { /* @var $periode \Application\Entity\Db\Periode */ @@ -641,7 +622,7 @@ class ServiceService extends AbstractEntityService } if ($newHeures == 0) { // on n'insère pas le service si des heures ont déjà été saisies!! $o['service'] = $newService; - $old[$id] = $o; + $old[$id] = $o; } } } @@ -651,10 +632,9 @@ class ServiceService extends AbstractEntityService } - public function setRealisesFromPrevus(Service $service) { - $role = $this->getServiceContext()->getSelectedIdentityRole(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); $rStructure = $role ? $role->getStructure() : null; $sStructure = $service->getElementPedagogique() ? $service->getElementPedagogique()->getStructure() : null; @@ -676,11 +656,12 @@ class ServiceService extends AbstractEntityService VolumeHoraireListe::FILTRE_PERIODE, VolumeHoraireListe::FILTRE_TYPE_INTERVENTION, VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT, + VolumeHoraireListe::FILTRE_TAG, VolumeHoraireListe::FILTRE_HORAIRE_DEBUT, VolumeHoraireListe::FILTRE_HORAIRE_FIN, ]; - $listes = []; + $listes = []; $prevListes = $prevus->getSousListes($filtres); foreach ($prevListes as $id => $prevListe) { $listes[$id]['prev'] = $prevListe; @@ -708,7 +689,6 @@ class ServiceService extends AbstractEntityService } - /** * Détermine si un service est assuré localement (c'est-à-dire dans l'université) ou sur un autre établissement * @@ -725,7 +705,6 @@ class ServiceService extends AbstractEntityService } - /** * Retourne la période courante d'un service * @@ -742,7 +721,6 @@ class ServiceService extends AbstractEntityService } - /** * * @param Service $service @@ -761,7 +739,6 @@ class ServiceService extends AbstractEntityService } - /** * * @param Service|Service[] $services @@ -790,7 +767,6 @@ class ServiceService extends AbstractEntityService } - /** * Retourne le total HETD des enseignements (réalisés et validés) d'un intervenant. * @@ -808,10 +784,9 @@ class ServiceService extends AbstractEntityService } - /** * - * @param Service[] $services + * @param Service[] $services * @param TypeVolumeHoraire $typeVolumehoraire */ public function setTypeVolumehoraire($services, TypeVolumeHoraire $typeVolumeHoraire) diff --git a/module/Enseignement/src/Service/VolumeHoraireService.php b/module/Enseignement/src/Service/VolumeHoraireService.php index 418590c806c9ae9b384c62ebcf9960d22305dfd2..49704e98ac56bb7e64a9da6355b53dc4a00ab87b 100755 --- a/module/Enseignement/src/Service/VolumeHoraireService.php +++ b/module/Enseignement/src/Service/VolumeHoraireService.php @@ -5,7 +5,7 @@ namespace Enseignement\Service; use Application\Entity\Db\Contrat; use Application\Provider\Privilege\Privileges; use Application\Service\AbstractEntityService; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; use Service\Service\TypeVolumeHoraireServiceAwareTrait; diff --git a/module/Enseignement/src/View/Helper/EnseignementSaisieFormViewHelper.php b/module/Enseignement/src/View/Helper/EnseignementSaisieFormViewHelper.php index 0a3f8449f74d18207edcd69a384b5924259fb401..b711f4817690a2406301ead66d21add94742f5fa 100755 --- a/module/Enseignement/src/View/Helper/EnseignementSaisieFormViewHelper.php +++ b/module/Enseignement/src/View/Helper/EnseignementSaisieFormViewHelper.php @@ -3,15 +3,16 @@ namespace Enseignement\View\Helper; use Application\Entity\Db\Periode; +use Application\Service\Traits\ContextServiceAwareTrait; +use Application\Service\Traits\LocalContextServiceAwareTrait; +use Application\Service\Traits\PeriodeServiceAwareTrait; +use Application\View\Helper\AbstractViewHelper; use Enseignement\Entity\Db\Service; use Enseignement\Form\EnseignementSaisieForm; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; use Service\Entity\Db\TypeVolumeHoraire; -use Application\View\Helper\AbstractViewHelper; -use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\PeriodeServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; use Service\Service\EtatVolumeHoraireServiceAwareTrait; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; /** @@ -22,6 +23,7 @@ use Service\Service\EtatVolumeHoraireServiceAwareTrait; class EnseignementSaisieFormViewHelper extends AbstractViewHelper { use ContextServiceAwareTrait; + use LocalContextServiceAwareTrait; use PeriodeServiceAwareTrait; use TypeInterventionServiceAwareTrait; use TypeVolumeHoraireServiceAwareTrait; @@ -30,9 +32,8 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper protected EnseignementSaisieForm $form; - /** - * @return \Application\Entity\Db\ElementPedagogique|null + * @return \OffreFormation\Entity\Db\ElementPedagogique|null */ protected function getElementPedagogique() { @@ -43,7 +44,6 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - /** * @return \Application\Entity\Db\Etablissement|null */ @@ -56,13 +56,12 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - /** * @return bool */ protected function isEnseignementChoisi(): bool { - $etablissement = $this->getEtablissement(); + $etablissement = $this->getEtablissement(); $elementPedagogique = $this->getElementPedagogique(); if ($elementPedagogique) { @@ -79,7 +78,6 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - /** * * @return Periode[] @@ -95,7 +93,6 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - /** * * @param Saisie $form @@ -111,14 +108,12 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - public function __toString() { return $this->render(); } - public function getVolumesHorairesRefreshUrl() { $url = $this->getView()->url( @@ -131,7 +126,6 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - /** * Rendu du formulaire * @@ -154,9 +148,9 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } if ($fservice->has('interne-externe')) { $interne = $fservice->get('interne-externe')->getValue() == 'service-interne'; - $res .= $this->getView()->formControlGroup($fservice->get('interne-externe'), 'formButtonGroup'); - $res .= '<div id="element-interne" ' . (($interne) ? '' : 'style="display:none"') . '>' . $this->getView()->fieldsetElementPedagogiqueRecherche($fservice->get('element-pedagogique')) . '</div>'; - $res .= '<div id="element-externe" ' . (($interne) ? 'style="display:none"' : '') . '>' + $res .= $this->getView()->formControlGroup($fservice->get('interne-externe'), 'formButtonGroup'); + $res .= '<div id="element-interne" ' . (($interne) ? '' : 'style="display:none"') . '>' . $this->getView()->fieldsetElementPedagogiqueRecherche($fservice->get('element-pedagogique')) . '</div>'; + $res .= '<div id="element-externe" ' . (($interne) ? 'style="display:none"' : '') . '>' . $this->getView()->formControlGroup($fservice->get('etablissement')) . $this->getView()->formControlGroup($fservice->get('description')) . '</div>'; @@ -175,10 +169,10 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - public function renderVolumesHoraires() { - if (!$this->getServiceContext()->isModaliteServicesSemestriel($this->form->getTypeVolumeHoraire())) { + $intervenant = $this->getServiceLocalContext()->getIntervenant(); + if (!$this->getServiceContext()->isModaliteServicesSemestriel($intervenant)) { return null; } @@ -196,7 +190,6 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper } - public function renderVolumeHoraire($fieldset) { $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->get($fieldset->get('type-volume-horaire')->getValue()); @@ -234,9 +227,9 @@ class EnseignementSaisieFormViewHelper extends AbstractViewHelper $res .= $this->getView()->formLabel($element); if ($inRealise) { $heures = $vhl->setTypeIntervention($typeIntervention)->getHeures(); - $res .= '<br />Prévues : <span id="prev-' . $typeIntervention->getCode() . '" data-heures="' . $heures . '">'; - $res .= \UnicaenApp\Util::formattedNumber($heures); - $res .= '</span>'; + $res .= '<br />Prévues : <span id="prev-' . $typeIntervention->getCode() . '" data-heures="' . $heures . '">'; + $res .= \UnicaenApp\Util::formattedNumber($heures); + $res .= '</span>'; } $res .= '<br />'; $res .= $this->getView()->formText($element); diff --git a/module/Enseignement/src/View/Helper/EnseignementsViewHelper.php b/module/Enseignement/src/View/Helper/EnseignementsViewHelper.php index 4f6c728b4d6be047dbe0a9ab9f53392b7f9c3fdf..3bf9484e55f76cb3a47ca3a5a8990a62310d6681 100755 --- a/module/Enseignement/src/View/Helper/EnseignementsViewHelper.php +++ b/module/Enseignement/src/View/Helper/EnseignementsViewHelper.php @@ -2,22 +2,22 @@ namespace Enseignement\View\Helper; -use Application\Provider\Privilege\Privileges; -use Enseignement\Processus\EnseignementProcessusAwareTrait; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Traits\IntervenantAwareTrait; -use Service\Entity\Db\TypeVolumeHoraire; use Application\Processus\Traits\IntervenantProcessusAwareTrait; +use Application\Provider\Privilege\Privileges; use Application\Service\Traits\ContextServiceAwareTrait; -use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; use Application\View\Helper\AbstractViewHelper; use Enseignement\Entity\Db\Service; -use Application\Entity\Db\TypeIntervention; +use Enseignement\Processus\EnseignementProcessusAwareTrait; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; use Service\Entity\Db\TypeVolumeHoraireAwareTrait; +use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Service\Service\TypeVolumeHoraireServiceAwareTrait as ServiceTypeVolumeHoraireAwareTrait; /** @@ -154,7 +154,7 @@ class EnseignementsViewHelper extends AbstractViewHelper foreach ($typesIntervention as $ti) { $display = $this->getTypeInterventionVisibility($ti) ? '' : ';display:none'; $colspan++; - $out .= "<th class=\"heures type-intervention " . $ti->getCode() . "\" style=\"width:8%$display\"><abbr title=\"" . $ti->getLibelle() . "\">" . $ti->getCode() . "</abbr></th>\n"; + $out .= "<th class=\"heures type-intervention ti" . $ti->getId() . "\" style=\"width:8%$display\"><abbr title=\"" . $ti->getLibelle() . "\">" . $ti->getCode() . "</abbr></th>\n"; } $out .= "<th> </th>\n"; $out .= "</tr>\n"; @@ -219,10 +219,10 @@ class EnseignementsViewHelper extends AbstractViewHelper if ($typeVolumeHoraire = $this->getProcessusEnseignement()->initializePrevu($this->getIntervenant())) { $attribs = [ - 'class' => 'btn btn-warning prevu-to-prevu-show', - 'data-toggle' => 'modal', - 'data-target' => '#prevu-to-prevu-modal', - 'title' => "Initialiser le service prévisionnel avec le service prévisionnel validé l'année dernière", + 'class' => 'btn btn-warning prevu-to-prevu-show', + 'data-bs-toggle' => 'modal', + 'data-bs-target' => '#prevu-to-prevu-modal', + 'title' => "Initialiser le service prévisionnel avec le service prévisionnel validé l'année dernière", ]; $source = $typeVolumeHoraire->getLibelle(); $out .= '<button type="button" ' . $this->htmlAttribs($attribs) . '>' . $source . ' ' . $this->getServiceContext()->getAnneePrecedente() . ' <i class="fas fa-arrow-right"></i> Prévisionnel ' . $this->getServiceContext()->getAnnee() . '</button> '; @@ -230,7 +230,6 @@ class EnseignementsViewHelper extends AbstractViewHelper $out .= '<div class="modal-dialog modal-md">'; $out .= '<div class="modal-content">'; $out .= '<div class="modal-header">'; - $out .= '<button type="button" class="close" data-bs-dismiss="modal" aria-label="Annuler"><span aria-hidden="true">×</span></button>'; $out .= '<h4 class="modal-title">Reporter ici le service ' . strtolower($source) . ' validé de l\'année précédente.</h4>'; $out .= '</div>'; $out .= '<div class="modal-body">'; @@ -260,10 +259,10 @@ class EnseignementsViewHelper extends AbstractViewHelper if ($this->getProcessusEnseignement()->initializeRealise($this->getIntervenant())) { $attribs = [ - 'class' => 'btn btn-warning prevu-to-realise-show', - 'data-toggle' => 'modal', - 'data-target' => '#prevu-to-realise-modal', - 'title' => "Saisir comme réalisées l'ensemble des heures prévisionnelles" + 'class' => 'btn btn-warning prevu-to-realise-show', + 'data-bs-toggle' => 'modal', + 'data-bs-target' => '#prevu-to-realise-modal', + 'title' => "Saisir comme réalisées l'ensemble des heures prévisionnelles" . ". Attention toutefois : si des heures réalisées ont déjà été saisies alors ces dernières seront écrasées!", ]; $out .= '<button type="button" ' . $this->htmlAttribs($attribs) . '>Prévu <i class="fas fa-arrow-right"></i> réalisé</button> '; @@ -271,7 +270,6 @@ class EnseignementsViewHelper extends AbstractViewHelper $out .= '<div class="modal-dialog modal-md">'; $out .= '<div class="modal-content">'; $out .= '<div class="modal-header">'; - $out .= '<button type="button" class="close" data-bs-dismiss="modal" aria-label="Annuler"><span aria-hidden="true">×</span></button>'; $out .= '<h4 class="modal-title">Saisir comme réalisées l\'ensemble des heures prévisionnelles</h4>'; $out .= '</div>'; $out .= '<div class="modal-body">'; @@ -336,7 +334,8 @@ class EnseignementsViewHelper extends AbstractViewHelper $heures += $volumeHoraireListe->getHeures(); $volumeHoraireListe->setTypeVolumeHoraire($tvhRealise); $volumeHoraireListe->setEtatVolumeHoraire($evhSaisi); - $heures += $volumeHoraireListe->getHeures(); + // on met en absolu pour ne pas que des heures réalisées négatives non validées ne viennent s'annuler avec le nombre équivalent en prévisionnel + $heures += abs($volumeHoraireListe->getHeures()); } else { $volumeHoraireListe->setTypeVolumeHoraire($tvhPrevu); $volumeHoraireListe->setEtatVolumeHoraire($evhSaisi); @@ -404,6 +403,9 @@ class EnseignementsViewHelper extends AbstractViewHelper $volumeHoraireListe = $service->getVolumeHoraireListe(); $volumeHoraireListe->setTypeVolumeHoraire($typeVolumeHoraire); $volumeHoraireListe->setEtatVolumeHoraire($etatVolumeHoraire); + $statut = $service->getIntervenant()->getStatut(); + $code = $service->getIntervenant()->getStatut()->getCode(); + if ($this->getServiceContext()->isModaliteServicesSemestriel($typeVolumeHoraire)) { $vhlvh = $this->getView()->volumeHoraireListe($volumeHoraireListe); @@ -444,7 +446,7 @@ class EnseignementsViewHelper extends AbstractViewHelper } else { $display = ';display:none'; } - $out .= "<td id=\"" . $ti->getCode() . "\" class=\"type-intervention " . $ti->getCode() . "\" style=\"text-align:right$display\">" . \UnicaenApp\Util::formattedNumber($data[$ti->getCode()]) . "</td>\n"; + $out .= "<td id=\"" . $ti->getCode() . "\" class=\"type-intervention ti" . $ti->getId() . "\" style=\"text-align:right$display\">" . \UnicaenApp\Util::formattedNumber($data[$ti->getCode()]) . "</td>\n"; } $out .= "<td> </td>\n"; $out .= "</tr>\n"; diff --git a/module/Enseignement/src/View/Helper/LigneEnseignementViewHelper.php b/module/Enseignement/src/View/Helper/LigneEnseignementViewHelper.php index 4f47627eceb2bbe274481918293b61cc0fec096f..540b20161becd5859cf792027783d2c20c48d784 100755 --- a/module/Enseignement/src/View/Helper/LigneEnseignementViewHelper.php +++ b/module/Enseignement/src/View/Helper/LigneEnseignementViewHelper.php @@ -24,15 +24,7 @@ class LigneEnseignementViewHelper extends AbstractViewHelper - /** - * Helper entry point. - * - * @param Enseignements $enseignements - * @param Service $service - * - * @return self - */ - final public function __invoke(EnseignementsViewHelper $enseignements, Service $service) + final public function __invoke(EnseignementsViewHelper $enseignements, Service $service): self { $this->enseignements = $enseignements; $this->setService($service); @@ -42,12 +34,7 @@ class LigneEnseignementViewHelper extends AbstractViewHelper - /** - * Retourne le code HTML généré par cette aide de vue. - * - * @return string - */ - public function __toString() + public function __toString(): string { return $this->render(); } @@ -109,7 +96,7 @@ class LigneEnseignementViewHelper extends AbstractViewHelper if ($liste->getColumnVisibility('formation')) { $out .= '<td>'; if ($element && $element->getCheminPedagogique()->count() > 1) { - $out .= '<small class="badge" style="font-size:8pt" title="Enseignement mutualisé entre plusieures formations. Seule la formation principale est présentée ci-dessous">Enseignement mutualisé</small><br />'; + $out .= '<small class="badge bg-secondary" style="font-size:8pt" title="Enseignement mutualisé entre plusieures formations. Seule la formation principale est présentée ci-dessous">Enseignement mutualisé</small><br />'; } $out .= $this->renderEtape($element ? $element->getEtape() : null) . "</td>\n"; } @@ -236,11 +223,11 @@ class LigneEnseignementViewHelper extends AbstractViewHelper $display = $this->enseignements->getTypeInterventionVisibility($liste->getTypeIntervention()) ? '' : ';display:none'; $attribs = [ - 'class' => 'heures type-intervention ' . $liste->getTypeIntervention()->getCode(), - 'style' => 'text-align:right' . $display, - 'id' => 'service-' . $liste->getService()->getId() . '-ti-' . $liste->getTypeIntervention()->getId(), - 'data-value' => $heures, - 'data-type-intervention-code' => $liste->getTypeIntervention()->getCode(), + 'class' => 'heures type-intervention ti' . $liste->getTypeIntervention()->getId(), + 'style' => 'text-align:right' . $display, + 'id' => 'service-' . $liste->getService()->getId() . '-ti-' . $liste->getTypeIntervention()->getId(), + 'data-value' => $heures, + 'data-type-intervention-id' => $liste->getTypeIntervention()->getId(), ]; $out = '<td ' . $this->htmlAttribs($attribs) . '>'; if ($hasForbiddenPeriodes) $out .= '<abbr class="bg-danger" title="Des heures sont renseignées sur une période non conforme à la période de l\'enseignement">'; diff --git a/module/Enseignement/src/View/Helper/VolumeHoraire/ListeCalendaireViewHelper.php b/module/Enseignement/src/View/Helper/VolumeHoraire/ListeCalendaireViewHelper.php index 3b07d7614e4c5174f78d92dc1684d3e354cbd6f3..aaa9b04a892a769bb6ac1faab7d93607172d54b9 100644 --- a/module/Enseignement/src/View/Helper/VolumeHoraire/ListeCalendaireViewHelper.php +++ b/module/Enseignement/src/View/Helper/VolumeHoraire/ListeCalendaireViewHelper.php @@ -3,13 +3,14 @@ namespace Enseignement\View\Helper\VolumeHoraire; use Application\Constants; -use Application\Entity\Db\TypeIntervention; +use Application\Entity\Db\Tag; +use Application\Provider\Privilege\Privileges; +use Application\View\Helper\AbstractViewHelper; use Enseignement\Entity\VolumeHoraireListe; use Enseignement\Hydrator\ListeFilterHydrator; -use Application\Provider\Privilege\Privileges; use Enseignement\Service\ServiceServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Application\View\Helper\AbstractViewHelper; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; /** @@ -56,7 +57,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper protected $hasForbiddenPeriodes = false; - /** * * @return boolean @@ -67,7 +67,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - /** * * @param boolean $readOnly @@ -82,14 +81,12 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - public function hasForbiddenPeriodes() { return $this->hasForbiddenPeriodes; } - /** * Helper entry point. * @@ -106,7 +103,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - /** * Retourne le code HTML généré par cette aide de vue. * @@ -118,7 +114,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - public function getRefreshUrl() { $url = $this->getView()->url( @@ -134,7 +129,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - /** * Génère le code HTML. * @@ -143,20 +137,26 @@ class ListeCalendaireViewHelper extends AbstractViewHelper public function render() { $this->hasForbiddenPeriodes = false; - $service = $this->getVolumeHoraireListe()->getService(); + $service = $this->getVolumeHoraireListe()->getService(); $canViewMNP = $this->getView()->isAllowed($service->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_VISUALISATION); - $canEdit = $this->getView()->isAllowed($service, Privileges::ENSEIGNEMENT_PREVU_EDITION) || $this->getView()->isAllowed($service, Privileges::ENSEIGNEMENT_REALISE_EDITION); + $canViewTag = $this->getView()->isAllowed($service->getIntervenant(), Privileges::TAG_VISUALISATION); + $canEdit = $this->getView()->isAllowed($service, Privileges::ENSEIGNEMENT_PREVU_EDITION) || $this->getView()->isAllowed($service, Privileges::ENSEIGNEMENT_REALISE_EDITION); $filtres = [ VolumeHoraireListe::FILTRE_HORAIRE_DEBUT, VolumeHoraireListe::FILTRE_HORAIRE_FIN, VolumeHoraireListe::FILTRE_TYPE_INTERVENTION, VolumeHoraireListe::FILTRE_PERIODE, + VolumeHoraireListe::FILTRE_TAG, + ]; if ($canViewMNP) { $filtres[] = VolumeHoraireListe::FILTRE_MOTIF_NON_PAIEMENT; } + if ($canViewTag) { + $filtres[] = VolumeHoraireListe::FILTRE_TAG; + } $out = '<table class="table table-xs table-bordered volume-horaire">'; $out .= '<thead>'; @@ -169,6 +169,9 @@ class ListeCalendaireViewHelper extends AbstractViewHelper if ($canViewMNP) { $out .= "<th>Motif de non paiement</th>\n"; } + if ($canViewTag) { + $out .= "<th>Tag</th>\n"; + } if ($canEdit) { $out .= "<th style='text-align:center'>" . $this->renderAddAction($this->getVolumeHoraireListe()->createChild()->setNew(true)) . "</th>\n"; } @@ -177,7 +180,16 @@ class ListeCalendaireViewHelper extends AbstractViewHelper $out .= '<body>'; $vhls = $this->getVolumeHoraireListe()->getSousListes($filtres); + foreach ($vhls as $vhl) { + $motifNonPaiement = $vhl->getMotifNonPaiement(); + if (empty($motifNonPaiement)) { + $motifNonPaiement = false; + } + $tag = $vhl->getTag(); + if (empty($tag)) { + $tag = false; + } if ($vhl->getHeures() != 0) { $out .= '<tr>'; $out .= "<td>" . $this->renderHoraire($vhl->getHoraireDebut()) . "</td>\n"; @@ -186,7 +198,10 @@ class ListeCalendaireViewHelper extends AbstractViewHelper $out .= "<td>" . $this->renderHoraire($vhl->getHoraireFin()) . "</td>\n"; $out .= "<td>" . $vhl->getPeriode() . "</td>\n"; if ($canViewMNP) { - $out .= "<td>" . $this->renderMotifNonPaiement($vhl->getMotifNonPaiement()) . "</td>\n"; + $out .= "<td>" . $this->renderMotifNonPaiement($motifNonPaiement) . "</td>\n"; + } + if ($canViewTag) { + $out .= "<td>" . $this->renderTag($tag) . "</td>\n"; } if ($canEdit) { $out .= "<td style='width:1%;white-space:nowrap'>" . $this->renderActions($vhl) . "</td>\n"; @@ -201,7 +216,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - private function renderAddAction(VolumeHoraireListe $volumeHoraireListe) { $vhlph = new ListeFilterHydrator(); @@ -220,7 +234,6 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - private function renderActions(VolumeHoraireListe $volumeHoraireListe) { $vhlph = new ListeFilterHydrator(); @@ -251,14 +264,12 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - private function renderTypeIntervention(TypeIntervention $typeIntervention) { return "<abbr title=\"" . $typeIntervention->getLibelle() . "\">" . $typeIntervention->getCode() . "</abbr>"; } - private function renderHoraire($horaire) { if (!$horaire instanceof \DateTime) return null; @@ -267,17 +278,17 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - private function renderHeures(VolumeHoraireListe $volumeHoraireListe) { return \UnicaenApp\Util::formattedNumber($volumeHoraireListe->getHeures()); } - private function renderMotifNonPaiement($motifNonPaiement) { + if (!empty($motifNonPaiement)) { + $out = $motifNonPaiement->getLibelleLong(); } else { $out = ''; @@ -286,6 +297,20 @@ class ListeCalendaireViewHelper extends AbstractViewHelper return $out; } + protected function renderTag($tag) + { + /** + * @var Tag $tag + */ + + if (!empty($tag)) { + $out = $tag->getLibelleLong(); + } else { + $out = ''; + } + + return $out; + } /** @@ -298,13 +323,12 @@ class ListeCalendaireViewHelper extends AbstractViewHelper } - public function setVolumeHoraireListe(VolumeHoraireListe $volumeHoraireListe) { - $typeVolumeHoraire = $volumeHoraireListe->getTypeVolumeHoraire(); + $typeVolumeHoraire = $volumeHoraireListe->getTypeVolumeHoraire(); $this->volumeHoraireListe = $volumeHoraireListe; - $this->forcedReadOnly = !$this->getView()->isAllowed($volumeHoraireListe->getService(), $typeVolumeHoraire->getPrivilegeEnseignementEdition()); - $this->typesIntervention = null; + $this->forcedReadOnly = !$this->getView()->isAllowed($volumeHoraireListe->getService(), $typeVolumeHoraire->getPrivilegeEnseignementEdition()); + $this->typesIntervention = null; return $this; } diff --git a/module/Enseignement/src/View/Helper/VolumeHoraire/ListeViewHelper.php b/module/Enseignement/src/View/Helper/VolumeHoraire/ListeViewHelper.php index 16b3340da037636d5eed747e0b67e924889be3b8..0515933b4c0385422290e6f1d7909cf4e86e12d3 100755 --- a/module/Enseignement/src/View/Helper/VolumeHoraire/ListeViewHelper.php +++ b/module/Enseignement/src/View/Helper/VolumeHoraire/ListeViewHelper.php @@ -3,13 +3,14 @@ namespace Enseignement\View\Helper\VolumeHoraire; use Application\Entity\Db\MotifNonPaiement; -use Enseignement\Hydrator\ListeFilterHydrator; +use Application\Entity\Db\Tag; use Application\Provider\Privilege\Privileges; -use Enseignement\Service\ServiceServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; use Application\View\Helper\AbstractViewHelper; use Enseignement\Entity\VolumeHoraireListe; -use Application\Entity\Db\TypeIntervention; +use Enseignement\Hydrator\ListeFilterHydrator; +use Enseignement\Service\ServiceServiceAwareTrait; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; /** @@ -56,7 +57,6 @@ class ListeViewHelper extends AbstractViewHelper protected $hasForbiddenPeriodes = false; - /** * * @return boolean @@ -67,7 +67,6 @@ class ListeViewHelper extends AbstractViewHelper } - /** * * @param boolean $readOnly @@ -82,14 +81,12 @@ class ListeViewHelper extends AbstractViewHelper } - public function hasForbiddenPeriodes() { return $this->hasForbiddenPeriodes; } - /** * Helper entry point. * @@ -100,13 +97,13 @@ class ListeViewHelper extends AbstractViewHelper final public function __invoke(VolumeHoraireListe $volumeHoraireListe) { /* Initialisation */ + $this->setVolumeHoraireListe($volumeHoraireListe); return $this; } - /** * Retourne le code HTML généré par cette aide de vue. * @@ -118,7 +115,6 @@ class ListeViewHelper extends AbstractViewHelper } - public function getRefreshUrl() { $url = $this->getView()->url( @@ -134,7 +130,6 @@ class ListeViewHelper extends AbstractViewHelper } - /** * Génère le code HTML. * @@ -143,8 +138,11 @@ class ListeViewHelper extends AbstractViewHelper public function render() { $this->hasForbiddenPeriodes = false; - $canViewMNP = $this->getView()->isAllowed($this->getVolumeHoraireListe()->getService()->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_VISUALISATION); - $canEditMNP = $this->getView()->isAllowed($this->getVolumeHoraireListe()->getService()->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_EDITION); + $canViewMNP = $this->getView()->isAllowed($this->getVolumeHoraireListe()->getService()->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_VISUALISATION); + $canEditMNP = $this->getView()->isAllowed($this->getVolumeHoraireListe()->getService()->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_EDITION); + $canViewTag = $this->getView()->isAllowed($this->getVolumeHoraireListe()->getService()->getIntervenant(), Privileges::TAG_VISUALISATION); + $canEditTag = $this->getView()->isAllowed($this->getVolumeHoraireListe()->getService()->getIntervenant(), Privileges::TAG_EDITION); + $out = '<table class="table table-sm table-bordered volume-horaire">'; $out .= '<tr>'; @@ -155,10 +153,16 @@ class ListeViewHelper extends AbstractViewHelper if ($canViewMNP) { $out .= "<th style=\"width:25%\">Motif de non paiement</th>\n"; } - $out .= "</tr>\n"; + if ($canViewTag) { + $out .= "<th style=\"width:25%\">Tag</th>\n"; + } + $out .= "</tr>\n"; $periodes = $this->getPeriodes(); + foreach ($periodes as $periode) { $vhl = $this->getVolumeHoraireListe()->createChild()->setPeriode($periode)->setTypeIntervention(false); + $vhl = $this->getVolumeHoraireListe()->createChild()->setPeriode($periode)->setTag(false); + /* Gestion des mauvaises périodes */ $forbiddenPeriode = ($vhl->getService()?->getElementPedagogique()?->getPeriode() ?? $periode) !== $periode; @@ -168,6 +172,7 @@ class ListeViewHelper extends AbstractViewHelper /*Listage des motifs de non paiement */ $motifsNonPaiement = []; + if ($canViewMNP) { // découpage par motif de non paiement $motifsNonPaiement = $vhl->getMotifsNonPaiement(); if (!isset($motifsNonPaiement[0]) && !$canEditMNP) { @@ -178,33 +183,55 @@ class ListeViewHelper extends AbstractViewHelper $motifsNonPaiement = [0 => false]; } + $tags = []; + if ($canViewTag) { + $tags = $vhl->getTags(); + if (!isset($tags[0]) && !$canEditTag) { + $tags = [0 => null] + $tags; + } + } + if (empty($tags)) { + $tags = [0 => false]; + } + /* Affichage par motif de non paiement */ foreach ($motifsNonPaiement as $motifNonPaiement) { + $vhl->setMotifNonPaiement($motifNonPaiement); - if ($vhl->getHeures() == 0) continue; // rien à afficher - - $readOnly = $motifNonPaiement instanceof MotifNonPaiement && !$canEditMNP; - if ($forbiddenPeriode) { - $out .= '<tr class="bg-danger">'; - $out .= "<td><abbr title=\"La période n'est pas conforme à l'enseignement\">" . $this->renderPeriode($periode) . "</abbr></td>\n"; - } else { - $out .= '<tr>'; - $out .= "<td>" . $this->renderPeriode($periode) . "</td>\n"; - } + foreach ($tags as $tag) { + $vhl->setTag($tag); - foreach ($this->typesIntervention as $typeIntervention) { - $vhl->setTypeIntervention($typeIntervention); - if ($vhl->getHeures() == 0) { - $class = "heures-empty"; + if ($vhl->getHeures() == 0) continue; // rien à afficher + + $readOnly = $motifNonPaiement instanceof MotifNonPaiement && !$canEditMNP; + if ($forbiddenPeriode) { + $out .= '<tr class="bg-danger">'; + $out .= "<td><abbr title=\"La période n'est pas conforme à l'enseignement\">" . $this->renderPeriode($periode) . "</abbr></td>\n"; } else { - $class = "heures-not-empty"; + $out .= '<tr>'; + $out .= "<td>" . $this->renderPeriode($periode) . "</td>\n"; } - $out .= '<td style="text-align:right" class="' . $class . '">' . $this->renderHeures($vhl, $readOnly) . '</td>'; - } - if ($canViewMNP) { - $out .= "<td>" . $this->renderMotifNonPaiement($motifNonPaiement) . "</td>\n"; + + foreach ($this->typesIntervention as $typeIntervention) { + + $vhlt = $vhl->createChild()->setTypeIntervention($typeIntervention); + + if ($vhlt->getHeures() == 0) { + $class = "heures-empty"; + } else { + $class = "heures-not-empty"; + } + $out .= '<td style="text-align:right" class="' . $class . '">' . $this->renderHeures($vhlt, $readOnly) . '</td>'; + } + if ($canViewMNP) { + $out .= "<td>" . $this->renderMotifNonPaiement($motifNonPaiement) . "</td>\n"; + } + if ($canViewTag) { + $out .= "<td>" . $this->renderTag($tag) . "</td>"; + } + $out .= "</tr>\n"; } - $out .= "</tr>\n"; + } } $out .= '</table>' . "\n"; @@ -213,7 +240,6 @@ class ListeViewHelper extends AbstractViewHelper } - protected function renderPeriode($periode) { if (!$periode) return "Indéterminée"; @@ -223,7 +249,6 @@ class ListeViewHelper extends AbstractViewHelper } - public function renderHeures(VolumeHoraireListe $volumeHoraireListe, $readOnly = false) { $heures = $volumeHoraireListe->getHeures(); @@ -243,12 +268,11 @@ class ListeViewHelper extends AbstractViewHelper ['query' => $query] ); - return "<a class=\"pop-ajax volume-horaire\" data-submit-event=\"save-volume-horaire\" data-service=\"" . $volumeHoraireListe->getService()->getId() . "\" href=\"" . $url . "\" >$heures</a>"; + return "<a class=\"pop-ajax volume-horaire\" title=\"Modification du volume horaire\" data-submit-event=\"save-volume-horaire\" data-service=\"" . $volumeHoraireListe->getService()->getId() . "\" href=\"" . $url . "\" >$heures</a>"; } } - protected function renderMotifNonPaiement($motifNonPaiement) { if (!empty($motifNonPaiement)) { @@ -260,6 +284,20 @@ class ListeViewHelper extends AbstractViewHelper return $out; } + protected function renderTag($tag) + { + /** + * @var Tag $tag + */ + + if (!empty($tag)) { + $out = $tag->getLibelleLong(); + } else { + $out = ''; + } + + return $out; + } /** @@ -272,19 +310,17 @@ class ListeViewHelper extends AbstractViewHelper } - public function setVolumeHoraireListe(VolumeHoraireListe $volumeHoraireListe) { - $typeVolumeHoraire = $volumeHoraireListe->getTypeVolumeHoraire(); + $typeVolumeHoraire = $volumeHoraireListe->getTypeVolumeHoraire(); $this->volumeHoraireListe = $volumeHoraireListe; - $this->forcedReadOnly = !$this->getView()->isAllowed($volumeHoraireListe->getService(), $typeVolumeHoraire->getPrivilegeEnseignementEdition()); - $this->typesIntervention = null; + $this->forcedReadOnly = !$this->getView()->isAllowed($volumeHoraireListe->getService(), $typeVolumeHoraire->getPrivilegeEnseignementEdition()); + $this->typesIntervention = null; return $this; } - public function getTypesInterventions() { if (!$this->typesIntervention) { @@ -308,14 +344,13 @@ class ListeViewHelper extends AbstractViewHelper } - public function getPeriodes() { $vhl = $this->getVolumeHoraireListe()->createChild() ->setTypeIntervention(false) ->setPeriode(false); - $periodes = $this->getServiceService()->getPeriodes($vhl->getService()); + $periodes = $this->getServiceService()->getPeriodes($vhl->getService()); $vhPeriodes = $vhl->getPeriodes(); foreach ($vhPeriodes as $periode) { if (!isset($periodes[$periode->getId()])) $periodes[$periode->getId()] = $periode; diff --git a/module/Enseignement/view/enseignement/index.phtml b/module/Enseignement/view/enseignement/index.phtml index 7db610b6703b0a5ceaf2aa887d0c4e5d7fc84743..36d74601bc4c63f3ab129cb4ff14f13298582648 100755 --- a/module/Enseignement/view/enseignement/index.phtml +++ b/module/Enseignement/view/enseignement/index.phtml @@ -33,7 +33,7 @@ echo $this->feuilleDeRoute($intervenant)->renderNav($nextEtape); <script> /* $(function () { - WidgetInitializer.includeJs(Url('js/service.js')); + WidgetInitializer.includeJs(Util.url('js/service.js')); $('.enseignements').enseignements({ 'heures-change': function () { diff --git a/module/Enseignement/view/enseignement/volume-horaire/saisie-calendaire.phtml b/module/Enseignement/view/enseignement/volume-horaire/saisie-calendaire.phtml index 22eb0c702fba7f08c1d915defa0ebec87ea42a61..f927f6ffc6abe447f658579d6cc9b4308d1dfe76 100644 --- a/module/Enseignement/view/enseignement/volume-horaire/saisie-calendaire.phtml +++ b/module/Enseignement/view/enseignement/volume-horaire/saisie-calendaire.phtml @@ -6,42 +6,57 @@ * @var $form \Enseignement\Form\VolumeHoraireSaisieCalendaireForm */ -$horaireDebut = $this->formControlGroup($form->get('horaire-debut')); -$horaireFin = $this->formControlGroup($form->get('horaire-fin')); +$horaireDebut = $this->formControlGroup($form->get('horaire-debut')); +$horaireFin = $this->formControlGroup($form->get('horaire-fin')); + $typeIntervention = $this->formControlGroup($form->get('type-intervention')); -$periode = $this->formControlGroup($form->get('periode')); -$heures = $this->formControlGroup($form->get('heures')); +$periode = $this->formControlGroup($form->get('periode')); +$heures = $this->formControlGroup($form->get('heures')); + if ($form->canEditMNP()) { $motifNonPaiement = $this->formControlGroup($form->get('motif-non-paiement')); } -$submit = $this->formSubmit($form->get('submit')); +if ($form->canEditTag()) { + $tag = $this->formControlGroup($form->get('tag')); +} +$submit = $this->formSubmit($form->get('submit')); $annuler = $this->formButton($form->get('annuler')); $form->prepare(); echo $this->form()->openTag($form); ?> - <div class="row"> - <div class="col-md-6"><?= $horaireDebut ?></div> - <div class="col-md-6"><?= $horaireFin ?></div> - </div> - <div class="row"> -<?php if ($form->canEditMNP()): ?> - <div class="col-md-6"><?= $periode ?></div> - <div class="col-md-6"><?= $typeIntervention ?></div> - </div> - <div class="row"> - <div class="col-md-3"><?= $heures ?></div> - <div class="col-md-9"><?= $motifNonPaiement ?></div> -<?php else: ?> - <div class="col-md-4"><?= $periode ?></div> - <div class="col-md-5"><?= $typeIntervention ?></div> - <div class="col-md-3"><?= $heures ?></div> -<?php endif; ?> - </div> - <div class="row"> - <div class="col-md-12"><?= $submit ?><?= $annuler ?></div> - </div> + +<div class="row"> + <div class="col-md-6"><?= $horaireDebut ?></div> + <div class="col-md-6"><?= $horaireFin ?></div> +</div> + +<div class="row"> + <?php if ($form->canEditMNP() || $form->canEditTag()): ?> + <div class="row"> + <div class="col-md-4"><?= $periode ?></div> + <div class="col-md-5"><?= $typeIntervention ?></div> + <div class="col-md-3"><?= $heures ?></div> + </div> + + <div class="row"> + <?php if ($form->canEditMNP()): ?> + <div class="col-md-6"><?= $motifNonPaiement ?></div> + <?php endif; ?> + <?php if ($form->canEditTag()): ?> + <div class="col-md-6"><?= $tag ?></div> + <?php endif; ?> + </div> + <?php else: ?> + <div class="col-md-4"><?= $periode ?></div> + <div class="col-md-5"><?= $typeIntervention ?></div> + <div class="col-md-3"><?= $heures ?></div> + <?php endif; ?> +</div> +<div class="row"> + <div class="col-md-12"><?= $submit ?><?= $annuler ?></div> +</div> <?php echo $this->formHidden($form->get('type-volume-horaire')); @@ -49,7 +64,11 @@ echo $this->formHidden($form->get('service')); if (!$form->canEditMNP()) { echo $this->formHidden($form->get('motif-non-paiement')); } +if (!$form->canEditTag()) { + echo $this->formHidden($form->get('tag')); +} echo $this->formHidden($form->get('ancien-motif-non-paiement')); +echo $this->formHidden($form->get('ancien-tag')); echo $this->formHidden($form->get('ancien-horaire-debut')); echo $this->formHidden($form->get('ancien-horaire-fin')); echo $this->formHidden($form->get('ancien-periode')); @@ -57,4 +76,7 @@ echo $this->formHidden($form->get('ancien-type-intervention')); echo $this->formHidden($form->get('new')); echo $this->form()->closeTag(); echo $this->formErrors($form); -echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); \ No newline at end of file +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); + +?> + diff --git a/module/Enseignement/view/enseignement/volume-horaire/saisie.phtml b/module/Enseignement/view/enseignement/volume-horaire/saisie.phtml index b8bb0ff4be00ab35cef960a1d83bd5167cbe573b..ba410848bbf9dd2913086f7596b8ab6231ea21b9 100755 --- a/module/Enseignement/view/enseignement/volume-horaire/saisie.phtml +++ b/module/Enseignement/view/enseignement/volume-horaire/saisie.phtml @@ -5,10 +5,8 @@ * @var $form \Enseignement\Form\VolumeHoraireSaisieForm */ -if ($form->canEditMNP()) { - $motifNonPaiement = $this->formControlGroup($form->get('motif-non-paiement')); -} -$submit = $this->formSubmit($form->get('submit')); + +$submit = $this->formSubmit($form->get('submit')); $annuler = $this->formButton($form->get('annuler')); $form->prepare(); @@ -18,6 +16,10 @@ echo $this->formControlGroup($form->get('heures')); if ($form->canEditMNP()) { echo $this->formControlGroup($form->get('motif-non-paiement')); } + +if ($form->canEditTag()) { + echo $this->formControlGroup($form->get('tag')); +} echo '<hr /><div style="text-align:right">'; echo $this->formRow($form->get('submit')); echo ' '; @@ -31,7 +33,11 @@ echo $this->formHidden($form->get('service')); if (!$form->canEditMNP()) { echo $this->formHidden($form->get('motif-non-paiement')); } +if (!$form->canEditTag()) { + echo $this->formHidden($form->get('tag')); +} echo $this->formHidden($form->get('ancien-motif-non-paiement')); +echo $this->formHidden($form->get('ancien-tag')); echo $this->form()->closeTag(); echo $this->formErrors($form); echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); \ No newline at end of file diff --git a/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php b/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php index c668f2f19961759c4a88529c3e49b59065b2fe80..0e919635e0702657d4f1b633eee4a535711854b5 100644 --- a/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php +++ b/module/ExportRh/src/Connecteur/Siham/SihamConnecteur.php @@ -5,7 +5,7 @@ namespace ExportRh\Connecteur\Siham; use Application\Entity\Db\Intervenant; use Application\Service\Traits\AdresseNumeroComplServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Application\Service\Traits\VoirieServiceAwareTrait; use ExportRh\Connecteur\ConnecteurRhInterface; use ExportRh\Entity\IntervenantRh; @@ -27,12 +27,14 @@ class SihamConnecteur implements ConnecteurRhInterface public Siham $siham; + public function __construct(Siham $siham) { $this->siham = $siham; } + public function rechercherIntervenantRh($nomUsuel = '', $prenom = '', $insee = ''): array { $params = [ @@ -43,7 +45,7 @@ class SihamConnecteur implements ConnecteurRhInterface ]; $listIntervenantRh = []; - $result = $this->siham->recupererListeAgents($params); + $result = $this->siham->recupererListeAgents($params); if (!empty($result)) { foreach ($result as $v) { @@ -63,9 +65,10 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function recupererIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?IntervenantRh { - $agent = null; + $agent = null; $codeRh = $this->trouverCodeRhByInsee($intervenant); if (!empty($codeRh)) { $params = @@ -122,6 +125,7 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function recupererDonneesAdministrativesIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?array { try { @@ -136,7 +140,7 @@ class SihamConnecteur implements ConnecteurRhInterface if (!empty($codeRh)) { $dateObservation = $intervenant->getAnnee()->getDateDebut(); - $params = + $params = [ 'listeMatricules' => [$codeRh], 'dateObservation' => $intervenant->getAnnee()->getDateDebut()->format('Y-m-d'), @@ -156,9 +160,10 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function recupererAffectationEnCoursIntervenantRh(\Application\Entity\Db\Intervenant $intervenant): ?array { - $affectations = []; + $affectations = []; $donneesAdministratives = $this->recupererDonneesAdministrativesIntervenantRh($intervenant); @@ -169,8 +174,8 @@ class SihamConnecteur implements ConnecteurRhInterface //On prend uniquement les affectations fonctionnelles if ($affectation->codeTypeRattachement == 'FUN') { $dateDebutAffectation = new \DateTime($affectation->dateDebutAffectation); - $dateFinAffectation = new \DateTime($affectation->dateFinAffectation); - $currentDate = new \DateTime(); + $dateFinAffectation = new \DateTime($affectation->dateFinAffectation); + $currentDate = new \DateTime(); if ($currentDate > $dateDebutAffectation and $currentDate < $dateFinAffectation) { $affectations[] = $affectation; } @@ -182,9 +187,10 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function recupererContratEnCoursIntervenantRh(Intervenant $intervenant): ?array { - $contrats = []; + $contrats = []; $donneesAdministratives = $this->recupererDonneesAdministrativesIntervenantRh($intervenant); @@ -195,8 +201,8 @@ class SihamConnecteur implements ConnecteurRhInterface foreach ($listeContrats as $contrat) { $dateDebutContrat = new \DateTime($contrat->dateDebutContrat); - $dateFinContrat = new \DateTime($contrat->dateFinReelleContrat); - $currentDate = new \DateTime(); + $dateFinContrat = new \DateTime($contrat->dateFinReelleContrat); + $currentDate = new \DateTime(); if ($currentDate > $dateDebutContrat and $currentDate < $dateFinContrat) { $contrats[] = $contrat; } @@ -207,12 +213,13 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function synchroniserDonneesPersonnellesIntervenantRh(\Application\Entity\Db\Intervenant $intervenant, $datas): bool { try { - $intervenantRh = $this->recupererIntervenantRh($intervenant); + $intervenantRh = $this->recupererIntervenantRh($intervenant); $dossierIntervenant = $this->getServiceDossier()->getByIntervenant($intervenant); //Synchronisation Tel pro @@ -263,14 +270,14 @@ class SihamConnecteur implements ConnecteurRhInterface $numeroVoie = (!empty($dossierIntervenant->getAdresseNumero())) ? $dossierIntervenant->getAdresseNumero() : ' '; $natureVoie = (!empty($dossierIntervenant->getAdresseVoirie())) ? $dossierIntervenant->getAdresseVoirie()->getCodeRh() : ''; - $bisTer = (!empty($dossierIntervenant->getAdresseNumeroCompl())) ? $dossierIntervenant->getAdresseNumeroCompl()->getCodeRh() : ''; - $nomVoie = (!empty($dossierIntervenant->getAdresseVoie())) ? $dossierIntervenant->getAdresseVoie() : ' '; - $nomVoie = Util::stripAccents($nomVoie); - $nomVoie = substr($nomVoie, 0, 32); + $bisTer = (!empty($dossierIntervenant->getAdresseNumeroCompl())) ? $dossierIntervenant->getAdresseNumeroCompl()->getCodeRh() : ''; + $nomVoie = (!empty($dossierIntervenant->getAdresseVoie())) ? $dossierIntervenant->getAdresseVoie() : ' '; + $nomVoie = Util::stripAccents($nomVoie); + $nomVoie = substr($nomVoie, 0, 32); $complement = (!empty($dossierIntervenant->getAdresseLieuDit())) ? $dossierIntervenant->getAdresseLieuDit() . ' ' : ' '; $complement .= (!empty($dossierIntervenant->getAdressePrecisions())) ? $dossierIntervenant->getAdressePrecisions() : ' '; $complement = Util::stripAccents($complement); - $commune = Util::stripAccents($dossierIntervenant->getAdresseCommune()); + $commune = Util::stripAccents($dossierIntervenant->getAdresseCommune()); $codePostal = $dossierIntervenant->getAdresseCodePostal(); $params = [ @@ -280,8 +287,8 @@ class SihamConnecteur implements ConnecteurRhInterface 'bisTer' => $bisTer, 'noVoie' => $numeroVoie, 'natureVoie' => $natureVoie, - 'nomVoie' => $nomVoie, - 'complementAdresse' => substr($complement, 0, 37), + 'nomVoie' => self::cleanDatas(substr($nomVoie, 0, 32)), + 'complementAdresse' => self::cleanDatas(substr($complement, 0, 37)), 'ville' => $commune, 'codePostal' => $codePostal, 'codePays' => $dossierIntervenant->getAdressePays()->getCodeIso3(), @@ -324,10 +331,11 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function trouverCodeRhByInsee(\Application\Entity\Db\Intervenant $intervenant): ?string { $intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant); - $numeroInsee = (!empty($intervenant->getNumeroInsee())) ? $intervenant->getNumeroInsee() : $intervenantDossier->getNumeroInsee(); + $numeroInsee = (!empty($intervenant->getNumeroInsee())) ? $intervenant->getNumeroInsee() : $intervenantDossier->getNumeroInsee(); $params = [ @@ -335,7 +343,7 @@ class SihamConnecteur implements ConnecteurRhInterface ]; $listeAgents = $this->siham->recupererListeAgents($params); - $agent = current($listeAgents); + $agent = current($listeAgents); if (!empty($agent)) { @@ -346,6 +354,7 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function prendreEnChargeIntervenantRh(\Application\Entity\Db\Intervenant $intervenant, $datas): ?string { try { @@ -356,8 +365,8 @@ class SihamConnecteur implements ConnecteurRhInterface $dossierIntervenant = $this->getServiceDossier()->getByIntervenant($intervenant); $anneeUniversitaire = $intervenant->getAnnee();//$this->getServiceExportRh()->getAnneeUniversitaireEnCours(); - $dateEffet = $anneeUniversitaire->getDateDebut()->format('Y-m-d'); - $dateFin = $anneeUniversitaire->getDateFin()->format('Y-m-d'); + $dateEffet = $anneeUniversitaire->getDateDebut()->format('Y-m-d'); + $dateFin = $anneeUniversitaire->getDateFin()->format('Y-m-d'); /*CARRIERE*/ $carriere = [ @@ -408,22 +417,22 @@ class SihamConnecteur implements ConnecteurRhInterface /*COORDONNEES POSTALES*/ $numeroVoie = (!empty($dossierIntervenant->getAdresseNumero())) ? $dossierIntervenant->getAdresseNumero() : ''; $natureVoie = (!empty($dossierIntervenant->getAdresseVoirie())) ? $dossierIntervenant->getAdresseVoirie()->getCodeRh() : ''; - $bisTer = (!empty($dossierIntervenant->getAdresseNumeroCompl())) ? $dossierIntervenant->getAdresseNumeroCompl()->getCodeRh() : ''; - $nomVoie = (!empty($dossierIntervenant->getAdresseVoie())) ? $dossierIntervenant->getAdresseVoie() : ''; + $bisTer = (!empty($dossierIntervenant->getAdresseNumeroCompl())) ? $dossierIntervenant->getAdresseNumeroCompl()->getCodeRh() : ''; + $nomVoie = (!empty($dossierIntervenant->getAdresseVoie())) ? $dossierIntervenant->getAdresseVoie() : ''; $complement = (!empty($dossierIntervenant->getAdresseLieuDit())) ? $dossierIntervenant->getAdresseLieuDit() . ' ' : ' '; $complement .= (!empty($dossierIntervenant->getAdressePrecisions())) ? $dossierIntervenant->getAdressePrecisions() : ' '; - $nomVoie = Util::stripAccents($nomVoie); + $nomVoie = Util::stripAccents($nomVoie); $complement = Util::stripAccents($complement); - $commune = Util::stripAccents($dossierIntervenant->getAdresseCommune()); + $commune = Util::stripAccents($dossierIntervenant->getAdresseCommune()); $codePostal = $dossierIntervenant->getAdresseCodePostal(); $coordonneesPostales[] = [ 'bureauDistributeur' => $commune, 'bisTer' => $bisTer, 'natureVoie' => $natureVoie, - 'nomVoie' => substr($nomVoie, 0, 32), + 'nomVoie' => self::cleanDatas(substr($nomVoie, 0, 32)), 'numAdresse' => $numeroVoie, - 'complementAdresse' => substr($complement, 0, 37), + 'complementAdresse' => self::cleanDatas(substr($complement, 0, 37)), 'commune' => $commune, 'codePostal' => $codePostal, 'codePays' => $dossierIntervenant->getAdressePays()->getCodeIso3(), @@ -433,10 +442,10 @@ class SihamConnecteur implements ConnecteurRhInterface /*COORDONNEES BANCAIRES*/ $coordonneesBancaires[] = ''; if ($datas['generiqueFieldset']['iban']) { - $coordonnees = $this->siham->formatCoordoonneesBancairesForSiham($dossierIntervenant->getIBAN(), $dossierIntervenant->getBIC()); - $coordonnees['dateDebBanque'] = $dateEffet; + $coordonnees = $this->siham->formatCoordoonneesBancairesForSiham($dossierIntervenant->getIBAN(), $dossierIntervenant->getBIC()); + $coordonnees['dateDebBanque'] = $dateEffet; $coordonnees['temoinValidite'] = '1'; - $coordonnees['modePaiement'] = '25'; + $coordonnees['modePaiement'] = '25'; $coordonneesBancaires[] = $coordonnees; } @@ -487,13 +496,25 @@ class SihamConnecteur implements ConnecteurRhInterface $paysNaissance = ''; } + //Traitement du départmenent + $valueDepartement = ''; + if (!empty($dossierIntervenant->getDepartementNaissance())) { + $departementCode = $dossierIntervenant->getDepartementNaissance()->getCode(); + if (substr($departementCode, 0, 1) == '9') { + $valueDepartement = $departementCode; + } else { + $valueDepartement = substr($departementCode, 1, 2); + } + } + + $params = [ 'categorieEntree' => 'ACTIVE', 'civilite' => ($dossierIntervenant->getCivilite() == 'M.') ? '1' : '2', 'dateEmbauche' => $dateEffet, 'dateNaissance' => $dossierIntervenant->getDateNaissance()->format('Y-m-d'), - 'villeNaissance' => $dossierIntervenant->getCommuneNaissance(), - 'departementNaissance' => (!empty($dossierIntervenant->getDepartementNaissance())) ? substr($dossierIntervenant->getDepartementNaissance()->getCode(), 1, 2) : '', + 'villeNaissance' => self::cleanDatas($dossierIntervenant->getCommuneNaissance()), + 'departementNaissance' => $valueDepartement, 'paysNaissance' => $paysNaissance, 'emploi' => $datas['connecteurForm']['emploi'], 'listeCoordonneesPostales' => $coordonneesPostales, @@ -507,11 +528,11 @@ class SihamConnecteur implements ConnecteurRhInterface 'listeNumerosTelephoneFax' => $coordonneesTelMail, 'listePositions' => $position, 'motifEntree' => 'PEC', - 'nomPatronymique' => $dossierIntervenant->getNomPatronymique(), - 'nomUsuel' => $dossierIntervenant->getNomUsuel(), + 'nomPatronymique' => self::cleanDatas($dossierIntervenant->getNomPatronymique()), + 'nomUsuel' => self::cleanDatas($dossierIntervenant->getNomUsuel()), 'numeroInsee' => (!$dossierIntervenant->getNumeroInseeProvisoire()) ? $dossierIntervenant->getNumeroInsee() : '', 'numeroInseeProvisoire' => ($dossierIntervenant->getNumeroInseeProvisoire()) ? $dossierIntervenant->getNumeroInsee() : '', - 'prenom' => $dossierIntervenant->getPrenom(), + 'prenom' => self::cleanDatas($dossierIntervenant->getPrenom()), 'sexe' => ($dossierIntervenant->getCivilite() == 'M.') ? '1' : '2', 'temoinValidite' => 1, 'UO' => $datas['connecteurForm']['affectation'], @@ -529,6 +550,7 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function renouvellerIntervenantRH(\Application\Entity\Db\Intervenant $intervenant, $datas): ?string { try { @@ -540,7 +562,7 @@ class SihamConnecteur implements ConnecteurRhInterface $anneeUniversitaire = $intervenant->getAnnee();//$this->getServiceExportRh()->getAnneeUniversitaireEnCours(); $dateEffet = $anneeUniversitaire->getDateDebut()->format('Y-m-d'); - $dateFin = $anneeUniversitaire->getDateFin()->format('Y-m-d'); + $dateFin = $anneeUniversitaire->getDateFin()->format('Y-m-d'); /*Formatage du matricule*/ @@ -628,12 +650,13 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function cloreDossier(Intervenant $intervenant): ?bool { try { $anneeUniversitaire = $this->getServiceExportRh()->getAnneeUniversitaireEnCours(); - $dateSortie = $anneeUniversitaire->getDateFin()->format('Y-m-d'); + $dateSortie = $anneeUniversitaire->getDateFin()->format('Y-m-d'); $matricule = ''; //On récupére le code RH par le INSEE @@ -657,19 +680,20 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function recupererListeUO(): ?array { /*On récupére les UO avec le type paramétré*/ - $uo = []; + $uo = []; $typeUO = $this->siham->getConfig()['code-type-structure-affectation']; - $types = explode(',', $typeUO); + $types = explode(',', $typeUO); //On boucle sur les différents types UO nécessaire au module export siham foreach ($types as $code) { $params = [ 'codeAdministration' => '', 'listeUO' => [[ - 'typeUO' => $code, - ]], + 'typeUO' => $code, + ]], ]; $uo = array_merge($uo, $this->siham->recupererListeUO($params)); @@ -681,46 +705,79 @@ class SihamConnecteur implements ConnecteurRhInterface } + public function recupererListePositions(): ?array { return $this->siham->recupererListePositions(); } + public function recupererListeEmplois(): ?array { return $this->siham->recupererListeEmplois(); } + public function recupererListeStatuts(): ?array { return $this->siham->recupererListeStatuts(); } + public function recupererListeModalites(): ?array { return $this->siham->recupererListeModalites(); } + public function recupererListeContrats(): ?array { return $this->siham->recupererListeContrats(); } + public function getConnecteurName(): string { return 'siham'; } + public function recupererFieldsetConnecteur(): Fieldset { $fieldset = new SihamFieldset('connecteurForm', []); return $fieldset; } + + + + public static function cleanDatas($str, $strict = false, $encoding = 'UTF-8') + { + $from = 'ÀÁÂÃÄÅÇÐÈÉÊËÌÍÎÏÒÓÔÕÖØÙÚÛÜŸÑàáâãäåçðèéêëìíîïòóôõöøùúûüÿñ()…,<> /?€%!":’\'+.'; + $to = 'AAAAAACDEEEEIIIIOOOOOOUUUUYNaaaaaacdeeeeiiiioooooouuuuyn '; + + $rstr = ''; + $ok = true; + $len = mb_strlen($str, $encoding); + for ($i = 0; $i < $len; $i++) { + $char = mb_substr($str, $i, 1, $encoding); + $pos = mb_strpos($from, $char, 0, $encoding); + if (false === $pos) { + if ($strict) { + return false; + } else $rstr .= $char; + } else { + $rstr .= mb_substr($to, $pos, 1, $encoding); + } + } + + return $rstr; + } + } \ No newline at end of file diff --git a/module/ExportRh/src/Controller/ExportRhController.php b/module/ExportRh/src/Controller/ExportRhController.php index 4f7d6e586deac469221bd6ef673aef947f565a62..65765fd02e11668d84d6e08deb30b5f634ffccdb 100644 --- a/module/ExportRh/src/Controller/ExportRhController.php +++ b/module/ExportRh/src/Controller/ExportRhController.php @@ -4,20 +4,17 @@ namespace ExportRh\Controller; use Application\Controller\AbstractController; -use Application\Entity\Db\Contrat; use Application\Entity\Db\WfEtape; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; use Application\Service\Traits\WfEtapeServiceAwareTrait; use Application\Service\Traits\WorkflowServiceAwareTrait; -use ExportRh\Form\ExportRhForm; use ExportRh\Form\Traits\ExportRhFormAwareTrait; use ExportRh\Service\ExportRhService; use ExportRh\Service\ExportRhServiceAwareTrait; use UnicaenSiham\Exception\SihamException; -use Laminas\Validator\Date; use Laminas\View\Model\ViewModel; class ExportRhController extends AbstractController @@ -38,18 +35,22 @@ class ExportRhController extends AbstractController */ protected $exportRhService; + + public function __construct(ExportRhService $exportRhService) { $this->exportRhService = $exportRhService; } + public function indexAction() { return []; } + public function chercherIntervenantRhAction(): array { $connecteurRh = $this->getServiceExportRh(); @@ -65,9 +66,9 @@ class ExportRhController extends AbstractController if ($this->getRequest()->isPost()) { - $nomUsuel = $this->getRequest()->getPost('nomUsuel'); - $prenom = $this->getRequest()->getPost('prenom'); - $insee = $this->getRequest()->getPost('insee'); + $nomUsuel = $this->getRequest()->getPost('nomUsuel'); + $prenom = $this->getRequest()->getPost('prenom'); + $insee = $this->getRequest()->getPost('insee'); $listIntervenantRh = $connecteurRh->getListIntervenantRh($nomUsuel, $prenom, $insee); } } catch (SihamException $e) { @@ -78,17 +79,18 @@ class ExportRhController extends AbstractController } + public function exporterAction() { /* Initialisation */ - $role = $this->getServiceContext()->getSelectedIdentityRole(); - $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); - $intervenantRh = ''; - $form = ''; - $nameConnecteur = ''; + $role = $this->getServiceContext()->getSelectedIdentityRole(); + $intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant'); + $intervenantRh = ''; + $form = ''; + $nameConnecteur = ''; $affectationEnCours = ''; - $contratEnCours = ''; + $contratEnCours = ''; if (!$intervenant) { throw new \LogicException('Intervenant non précisé ou inexistant'); } @@ -96,14 +98,14 @@ class ExportRhController extends AbstractController $intervenantDossier = $this->getServiceDossier()->getByIntervenant($intervenant); /* Récupération de la validation du dossier si elle existe */ $intervenantDossierValidation = $this->getServiceDossier()->getValidation($intervenant); - $typeIntervenant = $intervenant->getStatut()->getTypeIntervenant()->getCode(); - $renouvellement = false; - $priseEnCharge = false; + $typeIntervenant = $intervenant->getStatut()->getTypeIntervenant()->getCode(); + $renouvellement = false; + $priseEnCharge = false; /*Vérifier si l'étape du worflow pour faire une PEC ou REN est franchie*/ - $canExport = false; + $canExport = false; $etapeFranchissementParametre = $this->getServiceParametres()->get('export_rh_franchissement'); - $etapeFranchissement = $this->getServiceWorkflow()?->getEtape($this->getServiceWfEtape()?->get($etapeFranchissementParametre), $intervenant); + $etapeFranchissement = $this->getServiceWorkflow()?->getEtape($this->getServiceWfEtape()?->get($etapeFranchissementParametre), $intervenant); $etapeFranchissementLibelle = ($etapeFranchissement?->getEtape()->getCode() == WfEtape::CODE_CONTRAT) ? $etapeFranchissement?->getEtape()?->getLibelle($role) . ' et une date de retour signé de renseignée' : $etapeFranchissement?->getEtape()?->getLibelle($role); if ($etapeFranchissement && $etapeFranchissement->getFranchie()) { @@ -141,7 +143,7 @@ class ExportRhController extends AbstractController if (!empty($intervenantRh)) { //On regarde si il a une affectation en cours pour l'année courante si oui alors on propose uniquement une synchronisation des données personnelles $affectationEnCours = current($this->exportRhService->getAffectationEnCoursIntervenantRh($intervenant)); - $contratEnCours = current($this->exportRhService->getContratEnCoursIntervenantRh($intervenant)); + $contratEnCours = current($this->exportRhService->getContratEnCoursIntervenantRh($intervenant)); $renouvellement = true; if (!empty($affectationEnCours)) { @@ -153,7 +155,7 @@ class ExportRhController extends AbstractController $nameConnecteur = $this->exportRhService->getConnecteurName(); - $form = $this->getFormExportRh($intervenant); + $form = $this->getFormExportRh($intervenant); $form->bind($intervenantDossier); } catch (\Exception $e) { $this->flashMessenger()->addErrorMessage($e->getMessage()); @@ -181,6 +183,7 @@ class ExportRhController extends AbstractController } + public function priseEnChargeAction() { try { @@ -191,7 +194,7 @@ class ExportRhController extends AbstractController throw new \LogicException('Intervenant non précisé ou inexistant'); } - $posts = $this->getRequest()->getPost(); + $posts = $this->getRequest()->getPost(); $result = $this->exportRhService->priseEnChargeIntrervenantRh($intervenant, $posts); if ($result !== false) { @@ -215,6 +218,7 @@ class ExportRhController extends AbstractController } + public function renouvellementAction() { try { @@ -224,7 +228,7 @@ class ExportRhController extends AbstractController if (!$intervenant) { throw new \LogicException('Intervenant non précisé ou inexistant'); } - $posts = $this->getRequest()->getPost(); + $posts = $this->getRequest()->getPost(); $missingArgument = 0; if (empty($posts['connecteurForm']['affectation'])) { $this->flashMessenger()->addErrorMessage('Vous n\'avez pas choisi d\'affectation pour l\'agent'); @@ -243,7 +247,6 @@ class ExportRhController extends AbstractController if ($this->exportRhService->haveToSyncCode()) { $this->getServiceIntervenant()->updateCode($intervenant, $result); } - } else { $this->flashMessenger()->addErrorMessage('Un problème est survenu lors de la tentative de renouvellement de l\'intervenant'); } @@ -257,6 +260,7 @@ class ExportRhController extends AbstractController } + public function synchroniserAction() { try { @@ -266,7 +270,7 @@ class ExportRhController extends AbstractController throw new \LogicException('Intervenant non précisé ou inexistant'); } - $posts = $this->getRequest()->getPost(); + $posts = $this->getRequest()->getPost(); $result = $this->exportRhService->synchroniserDonneesPersonnellesIntervenantRh($intervenant, $posts); if ($result !== false) { $this->flashMessenger()->addSuccessMessage('Les données personnelles ont bien été synchronisé'); diff --git a/module/ExportRh/src/Entity/IntervenantRh.php b/module/ExportRh/src/Entity/IntervenantRh.php index ab465ca8a3c08affce246659fe5f25a45d73a320..1f8ee8c636b22b60ab7e1ff4ed2b50aee13f52c0 100644 --- a/module/ExportRh/src/Entity/IntervenantRh.php +++ b/module/ExportRh/src/Entity/IntervenantRh.php @@ -5,13 +5,13 @@ namespace ExportRh\Entity; use Application\Entity\Db\AdresseNumeroCompl; use Application\Entity\Db\Civilite; use Application\Entity\Db\Departement; -use Application\Entity\Db\Discipline; use Application\Entity\Db\Grade; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Pays; -use Intervenant\Entity\Db\Statut; use Application\Entity\Db\Structure; use Application\Entity\Db\Voirie; +use Intervenant\Entity\Db\Statut; +use OffreFormation\Entity\Db\Discipline; class IntervenantRh { diff --git a/module/ExportRh/src/Hydrator/ExportRhHydrator.php b/module/ExportRh/src/Hydrator/ExportRhHydrator.php index 3f3cfef944406318c920b4012f1fe3b74f18767e..d4933e5992fb7760a137ce4f97e24d7170d810c8 100644 --- a/module/ExportRh/src/Hydrator/ExportRhHydrator.php +++ b/module/ExportRh/src/Hydrator/ExportRhHydrator.php @@ -3,6 +3,7 @@ namespace ExportRh\Hydrator; +use Dossier\Entity\Db\IntervenantDossier; use Laminas\Hydrator\HydratorInterface; /** diff --git a/module/ExportRh/view/export-rh/export-rh/exporter.phtml b/module/ExportRh/view/export-rh/export-rh/exporter.phtml index b543563cc1bee44f83e878c234e9fc05c8fbcc8c..52f673371b08fb24639590b6ecbb38932b8a58f7 100755 --- a/module/ExportRh/view/export-rh/export-rh/exporter.phtml +++ b/module/ExportRh/view/export-rh/export-rh/exporter.phtml @@ -2,7 +2,7 @@ /** * @var \Application\Entity\Db\Intervenant $intervenant * @var \ExportRh\Entity\IntervenantRh $intervenantRh - * @var \Application\Entity\Db\IntervenantDossier $intervenantDossier + * @var \Dossier\Entity\Db\IntervenantDossier $intervenantDossier * @var $this \Application\View\Renderer\PhpRenderer * */ diff --git a/module/ExportRh/view/export-rh/export-rh/siham/dataPEC.phtml b/module/ExportRh/view/export-rh/export-rh/siham/dataPEC.phtml index a7db0df97fd33a65187b2160c73f92cc1fc49b61..66c169a1dcc4a496ca8fa960ad56ec65f775fb02 100644 --- a/module/ExportRh/view/export-rh/export-rh/siham/dataPEC.phtml +++ b/module/ExportRh/view/export-rh/export-rh/siham/dataPEC.phtml @@ -1,8 +1,8 @@ <?php /** - * @var \Application\Entity\Db\Intervenant $intervenant - * @var \ExportRh\Entity\IntervenantRh $intervenantRh - * @var \Application\Entity\Db\IntervenantDossier $intervenantDossier + * @var \Application\Entity\Db\Intervenant $intervenant + * @var \ExportRh\Entity\IntervenantRh $intervenantRh + * @var \Dossier\Entity\Db\IntervenantDossier $intervenantDossier * @var $this \Application\View\Renderer\PhpRenderer * */ diff --git a/module/Indicateur/config/module.config.php b/module/Indicateur/config/module.config.php index 40183953a8af1968ff997ffe7fb2a08700c16b0d..a1f0dee0c34b1af974f78b7d822783b4bf58c8f6 100755 --- a/module/Indicateur/config/module.config.php +++ b/module/Indicateur/config/module.config.php @@ -114,13 +114,24 @@ return [ 'gestion' => [ 'pages' => [ 'indicateurs' => [ - 'label' => "Indicateurs", - 'icon' => 'fas fa-chart-line', - 'title' => "Indicateurs", - 'route' => 'indicateur', - 'resource' => PrivilegeController::getResourceId('Indicateur\Controller\Indicateur', 'index'), - 'order' => 10, - 'color' => '#217DD8', + 'label' => "Indicateurs", + 'icon' => 'fas fa-chart-line', + 'title' => "Indicateurs", + 'route' => 'indicateur', + 'resource' => PrivilegeController::getResourceId('Indicateur\Controller\Indicateur', 'index'), + 'order' => 10, + 'color' => '#217DD8', + 'pages' => [ + 'indicateurs' => [ + 'label' => "Indicateurs", + 'icon' => 'fas fa-chart-line', + 'title' => "Indicateurs", + 'route' => 'indicateur', + 'resource' => PrivilegeController::getResourceId('Indicateur\Controller\Indicateur', 'index'), + 'order' => 10, + 'color' => '#217DD8', + ], + ], ], ], ], diff --git a/module/Indicateur/src/Controller/IndicateurController.php b/module/Indicateur/src/Controller/IndicateurController.php index d822fcaff02d6b9b77c7423089845ede6551c5ca..89fb6acaa036b8f2087d2dd84883a96e4c870220 100755 --- a/module/Indicateur/src/Controller/IndicateurController.php +++ b/module/Indicateur/src/Controller/IndicateurController.php @@ -3,26 +3,20 @@ namespace Indicateur\Controller; use Application\Controller\AbstractController; -use Service\Entity\Db\TypeVolumeHoraire; -use Indicateur\Entity\Db\IndicateurDepassementCharges; use Application\Entity\Db\Intervenant; -use Indicateur\Entity\Db\TypeIndicateur; -use Indicateur\Processus\IndicateurProcessusAwareTrait; -use Indicateur\Entity\Db\Indicateur; use Application\Service\ContextService; use Application\Service\Traits\ContextServiceAwareTrait; -use Indicateur\Service\IndicateurServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; -use Indicateur\Service\NotificationIndicateurServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; -use Application\Service\Traits\PeriodeServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; -use Intervenant\Entity\Db\Note; +use Exception; +use Indicateur\Entity\Db\Indicateur; +use Indicateur\Entity\Db\IndicateurDepassementCharges; +use Indicateur\Entity\Db\TypeIndicateur; +use Indicateur\Processus\IndicateurProcessusAwareTrait; +use Indicateur\Service\IndicateurServiceAwareTrait; +use Indicateur\Service\NotificationIndicateurServiceAwareTrait; use Intervenant\Service\NoteServiceAwareTrait; use Laminas\Form\Element\Checkbox; -use Laminas\Router\Http\TreeRouteStack; -use Laminas\View\Renderer\PhpRenderer; -use Exception; use Laminas\Form\Element\Hidden; use Laminas\Form\Element\Text; use Laminas\Form\Element\Textarea; @@ -31,8 +25,12 @@ use Laminas\Mail\Message as MailMessage; use Laminas\Mime\Message as MimeMessage; use Laminas\Mime\Mime; use Laminas\Mime\Part as MimePart; +use Laminas\Router\Http\TreeRouteStack; use Laminas\View\Model\JsonModel; use Laminas\View\Model\ViewModel; +use Laminas\View\Renderer\PhpRenderer; +use Application\Service\Traits\PeriodeServiceAwareTrait; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; use Unicaen\Console\Console; use UnicaenApp\View\Model\CsvModel; @@ -90,7 +88,7 @@ class IndicateurController extends AbstractController /** * Liste des indicateurs. * - * @return ViewModel + * @return array */ public function indexAction() { @@ -191,7 +189,7 @@ class IndicateurController extends AbstractController /** * Réponse aux requêtes AJAX d'abonnement de l'utilisateur connecté aux notifications concernant un indicateur. * - * @return JsonModel + * @return \Laminas\Http\Response|JsonModel */ public function abonnerAction() { @@ -231,7 +229,7 @@ class IndicateurController extends AbstractController /** * Indicateurs auxquels est abonné l'utilisateur (un Personnel) spécifié dans la requête. * - * @return ViewModel + * @return array */ public function abonnementsAction() { @@ -279,6 +277,7 @@ class IndicateurController extends AbstractController $result = $this->getServiceIndicateur()->getResult($indicateur); $emails = []; + $emailsPro = []; $intervenantsWithNoEmail = []; foreach ($result as $intervenantId => $indicRes) { if (!in_array($intervenantId, $intervenantsIds)) { @@ -287,6 +286,9 @@ class IndicateurController extends AbstractController $email = $indicRes['intervenant-email-perso'] ?: $indicRes['intervenant-email-pro']; if ($email) { $emails[$email] = $indicRes['intervenant-nom'] . ' ' . $indicRes['intervenant-prenom']; + if ($email != $emailPro) { + $emailsPro[$emailPro] = $indicRes['intervenant-nom'] . ' ' . $indicRes['intervenant-prenom']; + } } else { $intervenantsWithNoEmail[$intervenantId] = $indicRes; } @@ -304,6 +306,7 @@ class IndicateurController extends AbstractController $form->add((new Text('subject'))->setValue($subject)); $form->add((new Textarea('body'))->setValue($body)); $form->add((new Checkbox('copy'))->setValue(1)); + $form->add((new Checkbox('cc-pro'))->setValue(0)); $form->add((new Hidden('intervenants'))->setValue($intervenantsStringIds)); $form->getInputFilter()->get('subject')->setRequired(true); $form->getInputFilter()->get('body')->setRequired(true); @@ -311,7 +314,13 @@ class IndicateurController extends AbstractController if ($this->getRequest()->isPost()) { $post = $this->getRequest()->getPost(); if ($form->setData($post)->isValid()) { - $mailer->send($emails, $post); + //Cas on je veux envoyer l'email également sur l'email pro de l'intervenant + if ($post['cc-pro']) { + $emailsList = array_merge($emails, $emailsPro); + } else { + $emailsList = $emails; + } + $mailer->send($emailsList, $post); //Création d'une note email pour chaque intervenant concerné foreach ($intervenantsIds as $id) { $intervenant = $this->getServiceIntervenant()->get($id); @@ -320,20 +329,20 @@ class IndicateurController extends AbstractController } } if ($post['copy']) { - //envoi une copie du mail à l'utilisateur si il l'a demandé + //envoi une copie du mail à l'utilisateur s'il l'a demandé $utilisateur = $this->getServiceContext()->getUtilisateur(); $emailUtilisateur[$utilisateur->getEmail()] = $utilisateur->getDisplayName(); - $mailer->sendCopyEmail($emailUtilisateur, $emails, $post); + $mailer->sendCopyEmail($emailUtilisateur, $emailsList, $post); } if ($post['cci'] && !empty($post['cci'])) { $emailsCci = explode(';', $post['cci']); foreach ($emailsCci as $emailCci) { $listEmailsCci = []; $listEmailsCci[$emailCci] = $emailCci; - $mailer->sendCopyEmail($listEmailsCci, $emails, $post); + $mailer->sendCopyEmail($listEmailsCci, $emailsList, $post); } } - $count = count($intervenantsIds); + $count = count($emailsList); $pluriel = $count > 1 ? 's' : ''; $this->flashMessenger()->addSuccessMessage("Le mail a été envoyé à $count intervenant$pluriel"); $this->redirect()->toRoute('indicateur/result', ['indicateur' => $indicateur->getId()]); diff --git a/module/Indicateur/src/Entity/Db/IndicateurDepassementCharges.php b/module/Indicateur/src/Entity/Db/IndicateurDepassementCharges.php index 1b4223568d361222af5ba1a9108695a38cdeff37..d5ca3026fce96cfc4ed7de1cfc9cb587873d232e 100755 --- a/module/Indicateur/src/Entity/Db/IndicateurDepassementCharges.php +++ b/module/Indicateur/src/Entity/Db/IndicateurDepassementCharges.php @@ -3,11 +3,11 @@ namespace Indicateur\Entity\Db; use Application\Entity\Db\Traits\AnneeAwareTrait; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use Application\Entity\Db\Traits\IntervenantAwareTrait; use Application\Entity\Db\Traits\PeriodeAwareTrait; use Application\Entity\Db\Traits\StructureAwareTrait; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; use Service\Entity\Db\TypeVolumeHoraireAwareTrait; diff --git a/module/Indicateur/src/Entity/Db/Mapping/Indicateur.Entity.Db.IndicateurDepassementCharges.dcm.xml b/module/Indicateur/src/Entity/Db/Mapping/Indicateur.Entity.Db.IndicateurDepassementCharges.dcm.xml index b7660ca124d8cef2a56fedf5ccab8a711c92de5c..cd485e655a13a3dd5ca80ab8f16699024ac6866c 100755 --- a/module/Indicateur/src/Entity/Db/Mapping/Indicateur.Entity.Db.IndicateurDepassementCharges.dcm.xml +++ b/module/Indicateur/src/Entity/Db/Mapping/Indicateur.Entity.Db.IndicateurDepassementCharges.dcm.xml @@ -22,11 +22,11 @@ <join-column name="STRUCTURE_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-one field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-column name="TYPE_INTERVENTION_ID" referenced-column-name="ID"/> </many-to-one> diff --git a/module/Indicateur/src/Service/IndicateurService.php b/module/Indicateur/src/Service/IndicateurService.php index 67b6506e09041eff6ce2c79501ff75910af66dd5..a50d96aa7f3677628dbcd1d70e6a753a14acb1f9 100755 --- a/module/Indicateur/src/Service/IndicateurService.php +++ b/module/Indicateur/src/Service/IndicateurService.php @@ -66,7 +66,7 @@ class IndicateurService extends AbstractService i.code \"intervenant-code\", i.prenom \"intervenant-prenom\", i.nom_usuel \"intervenant-nom\", - i.email_perso \"intervenant-email-perso\", + COALESCE(d.email_perso,i.email_perso) \"intervenant-email-perso\", i.email_pro \"intervenant-email-pro\", s.libelle_court \"structure-libelle\", indic.*"; @@ -79,6 +79,7 @@ class IndicateurService extends AbstractService ($viewDef) indic JOIN intervenant i ON i.id = indic.intervenant_id AND i.histo_destruction IS NULL JOIN statut si ON si.id = i.statut_id AND si.code <> 'NON_AUTORISE' + LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id and d.histo_destruction IS NULL LEFT JOIN structure s ON s.id = indic.structure_id WHERE i.annee_id = :annee diff --git a/module/Indicateur/view/indicateur/indicateur/envoi-mail-intervenants.phtml b/module/Indicateur/view/indicateur/indicateur/envoi-mail-intervenants.phtml index 42b21e493ad1a79c3501c0205060e64f4776d373..042a8fbab5e6881e5a8418c73ed891ce67bbff21 100755 --- a/module/Indicateur/view/indicateur/indicateur/envoi-mail-intervenants.phtml +++ b/module/Indicateur/view/indicateur/indicateur/envoi-mail-intervenants.phtml @@ -22,6 +22,7 @@ echo $this->form()->openTag($this->form->setAttribute('id', 'mail-form')); </div> </div> <?= $this->formControlGroup($this->form->get('cci')->setLabel("Cci (E-mails séparés par un point virgule)")) ?> +<?= $this->formControlGroup($this->form->get('cc-pro')->setLabel("Envoyer sur l'email professionnel et l'email personnel de l'intervenant")) ?> <?= $this->formControlGroup($this->form->get('subject')->setLabel("Objet du mail")) ?> <?= $this->formControlGroup($this->form->get('body')->setLabel("Corps du mail")->setAttributes(['rows' => 15, 'id' => 'body'])) ?> <?= $this->formControlGroup($this->form->get('copy')->setLabel("Recevoir une copie de l'email envoyé (incluant la liste des destinataires)")) ?> @@ -70,7 +71,7 @@ echo $this->form()->openTag($this->form->setAttribute('id', 'mail-form')); */ function installEditor(selector, form) { - WidgetInitializer.includeJs(Url('vendor/tinymce-4.4.1/js/tinymce/tinymce.min.js')); + WidgetInitializer.includeJs(Util.url('vendor/tinymce-4.4.1/js/tinymce/tinymce.min.js')); tinymce.editors = []; tinymce.init({ selector: selector, diff --git a/module/Indicateur/view/indicateur/indicateur/index.phtml b/module/Indicateur/view/indicateur/indicateur/index.phtml index 17a031ad595b3e3a7d9eaec8572083b302eb251a..d2585f78f5956c394512b06db8d7b3ce8b9c62ab 100755 --- a/module/Indicateur/view/indicateur/indicateur/index.phtml +++ b/module/Indicateur/view/indicateur/indicateur/index.phtml @@ -124,7 +124,7 @@ $noAbo = new \Indicateur\Entity\Db\NotificationIndicateur(); }, error: function (jqXHR) { if (jqXHR.responseText != null && jqXHR.responseText.toString() !== "") { - alertFlash(jqXHR.responseText, 'error', 5000); + Util.alert(jqXHR.responseText, 'error'); console.log(jqXHR); } that.calculerNextType(); @@ -179,7 +179,7 @@ $noAbo = new \Indicateur\Entity\Db\NotificationIndicateur(); notif.removeClass("loading"); var infos = $(".indicateur-info", notif.parent()).attr('title', data.infos).tooltip('destroy').tooltip(); notif.val() ? infos.show() : infos.hide(); - alertFlash(data.message, data.status, 5000); + Util.alert(data.message, data.status); } }); }, diff --git a/module/Indicateur/view/indicateur/indicateur/result.phtml b/module/Indicateur/view/indicateur/indicateur/result.phtml index fced552b27d5edb5e167cf02738efb81e93220bc..1650dc11f28f93d72cfc8a4ea8d053fb1e5a3429 100755 --- a/module/Indicateur/view/indicateur/indicateur/result.phtml +++ b/module/Indicateur/view/indicateur/indicateur/result.phtml @@ -43,15 +43,26 @@ echo $this->messenger()->addMessagesFromFlashMessenger(); // pour les envois de function printValue($value) { if (is_array($value)) { - echo '<ul>'; + echo '<td><ul>'; foreach ($value as $val) { echo '<li>' . $val . '</li>'; } - echo '</ul>'; + echo '</ul></td>'; } elseif ($value) { - echo $value; + $dt = DateTime::createFromFormat('Y-m-d H:i:s', $value); + if ($dt && $dt->format('Y-m-d H:i:s') === $value) { + // C'est une date + $dtOrder = $dt->format(\Application\Constants::DATE_SORT); + echo '<td data-order="' . $dtOrder . '">'; + echo $dt->format(\Application\Constants::DATE_FORMAT); + echo '</td>'; + } else { + echo '<td>'; + echo $value; + echo '</td>'; + } } else { - echo ' '; + echo '<td> </td>'; } } @@ -81,8 +92,10 @@ echo $this->messenger()->addMessagesFromFlashMessenger(); // pour les envois de class="indic-intervenant"/></th> <?php endif; ?> <td style="text-align: center"><?= $r['prioritaire'] ? '<i class="fas fa-star"></i>' : '' ?></td> - <td><?php printValue($r['structure-libelle']); ?></td> + <?php printValue($r['structure-libelle']); ?> <td> + + <a href="<?= $this->url($indicateur->getRoute(), ['intervenant' => $intervenantId]) ?>"> <?php if (!empty($r['intervenant-code-rh'])) { @@ -95,21 +108,9 @@ echo $this->messenger()->addMessagesFromFlashMessenger(); // pour les envois de </td> <?php - foreach ($supCols as $supCol): - if (!is_array($r[$supCol])) { - $dt = DateTime::createFromFormat('Y-m-d H:i:s', $r[$supCol]); - if ($dt && $dt->format('Y-m-d H:i:s') === $r[$supCol]) { - $dtOrder = $dt->format(\Application\Constants::DATE_SORT); ?> - <td data-order=<?php echo $dtOrder ?>><?php printValue($dt->format(\Application\Constants::DATE_FORMAT)); ?></td> - - <?php } - } else { - ?> - <td><?php printValue($r[$supCol]); ?></td> - - <?php } - ?> - <?php endforeach; ?> + foreach ($supCols as $supCol) { + printValue($r[$supCol]); + } ?> </tr> <?php endforeach; ?> </tbody> diff --git a/module/Intervenant/src/Entity/Db/Mapping/Intervenant.Entity.Db.Statut.dcm.xml b/module/Intervenant/src/Entity/Db/Mapping/Intervenant.Entity.Db.Statut.dcm.xml index 9aafa6cea07c820bc5658d99023141c0c77676e5..4bd21fbd617f0c954afc48f1e17c9750272cfc04 100755 --- a/module/Intervenant/src/Entity/Db/Mapping/Intervenant.Entity.Db.Statut.dcm.xml +++ b/module/Intervenant/src/Entity/Db/Mapping/Intervenant.Entity.Db.Statut.dcm.xml @@ -35,6 +35,7 @@ <field name="dossierAdresse" type="boolean" column="DOSSIER_ADRESSE" nullable="false"/> <field name="dossierBanque" type="boolean" column="DOSSIER_BANQUE" nullable="false"/> <field name="dossierInsee" type="boolean" column="DOSSIER_INSEE" nullable="false"/> + <field name="dossierStatut" type="boolean" column="DOSSIER_STATUT" nullable="false"/> <field name="dossierEmployeur" type="boolean" column="DOSSIER_EMPLOYEUR" nullable="false"/> <field name="dossierAutre1" type="boolean" column="DOSSIER_AUTRE_1" nullable="false"/> <field name="dossierAutre1Visualisation" type="boolean" column="DOSSIER_AUTRE_1_VISUALISATION" nullable="false"/> @@ -85,11 +86,13 @@ <field name="referentielRealiseVisualisation" type="boolean" column="REFERENTIEL_REALISE_VISU" nullable="false"/> <field name="referentielRealiseEdition" type="boolean" column="REFERENTIEL_REALISE_EDITION" nullable="false"/> + <field name="mission" type="boolean" column="MISSION" nullable="false"/> + <field name="missionRealiseEdition" type="boolean" column="MISSION_REALISE_EDITION" nullable="false"/> + <field name="cloture" type="boolean" column="CLOTURE" nullable="false"/> <field name="modificationServiceDu" type="boolean" column="MODIF_SERVICE_DU" nullable="false"/> <field name="modificationServiceDuVisualisation" type="boolean" column="MODIF_SERVICE_DU_VISUALISATION" nullable="false"/> - <field name="modificationServiceDuEdition" type="boolean" column="MODIF_SERVICE_DU_EDITION" nullable="false"/> <field name="paiementVisualisation" type="boolean" column="PAIEMENT_VISUALISATION" nullable="false"/> <field name="motifNonPaiement" type="boolean" column="MOTIF_NON_PAIEMENT" nullable="false"/> @@ -110,9 +113,10 @@ </many-to-one> <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> - <join-columns> - <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> - </join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="tauxRemu" target-entity="Paiement\Entity\Db\TauxRemu"> + <join-column name="TAUX_REMU_ID" referenced-column-name="ID"/> </many-to-one> </entity> </doctrine-mapping> diff --git a/module/Intervenant/src/Entity/Db/Statut.php b/module/Intervenant/src/Entity/Db/Statut.php index 7191a646216c990dfd62dc960048e36d9e2f3f11..0e781b67b4d041430316c552741d151e3991b47d 100755 --- a/module/Intervenant/src/Entity/Db/Statut.php +++ b/module/Intervenant/src/Entity/Db/Statut.php @@ -2,14 +2,14 @@ namespace Intervenant\Entity\Db; -use Application\Entity\Db\DossierAutre; +use Dossier\Entity\Db\DossierAutre; use Application\Entity\Db\EtatSortie; use Application\Interfaces\ParametreEntityInterface; use Application\Provider\Privilege\Privileges; use Application\Traits\ParametreEntityTrait; -use Doctrine\Persistence\Mapping\ClassMetadata; use Laminas\Permissions\Acl\Resource\ResourceInterface; use Laminas\Permissions\Acl\Role\RoleInterface; +use Paiement\Entity\Db\TauxRemu; use UnicaenApp\Service\EntityManagerAwareInterface; use UnicaenApp\Service\EntityManagerAwareTrait; @@ -66,6 +66,8 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa private bool $dossierInsee = true; + private bool $dossierStatut = true; + private bool $dossierEmployeur = false; private bool $dossierAutre1 = false; @@ -156,8 +158,6 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa private bool $modificationServiceDuVisualisation = true; - private bool $modificationServiceDuEdition = false; - private bool $paiementVisualisation = true; private bool $motifNonPaiement = true; @@ -172,6 +172,16 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa private ?string $codesCorresp4 = null; + private bool $mission = false; + + private bool $missionVisualisation = true; + + private bool $missionEdition = false; + + private bool $missionRealiseEdition = false; + + private ?TauxRemu $tauxRemu = null; + public function __toString(): string @@ -527,6 +537,22 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa + public function getDossierStatut(): bool + { + return $this->dossierStatut; + } + + + + public function setDossierStatut(bool $dossierStatut): Statut + { + $this->dossierStatut = $dossierStatut; + + return $this; + } + + + public function getDossierEmployeur(): bool { return $this->dossierEmployeur; @@ -1247,22 +1273,6 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa - public function getModificationServiceDuEdition(): bool - { - return $this->modificationServiceDuEdition; - } - - - - public function setModificationServiceDuEdition(bool $modificationServiceDuEdition): Statut - { - $this->modificationServiceDuEdition = $modificationServiceDuEdition; - - return $this; - } - - - public function getPaiementVisualisation(): bool { return $this->paiementVisualisation; @@ -1375,6 +1385,91 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa + public function getMission(): bool + { + return $this->mission; + } + + + + public function setMission(bool $mission): Statut + { + $this->mission = $mission; + + return $this; + } + + + + public function getMissionVisualisation(): bool + { + return $this->missionVisualisation; + } + + + + public function setMissionVisualisation(bool $missionVisualisation): Statut + { + $this->missionVisualisation = $missionVisualisation; + + return $this; + } + + + + public function getMissionEdition(): bool + { + return $this->missionEdition; + } + + + + public function setMissionEdition(bool $missionEdition): Statut + { + $this->missionEdition = $missionEdition; + + return $this; + } + + + + public function getMissionRealiseEdition(): bool + { + return $this->missionRealiseEdition; + } + + + + public function setMissionRealiseEdition(bool $missionRealiseEdition): Statut + { + $this->missionRealiseEdition = $missionRealiseEdition; + + return $this; + } + + + + public function getTauxRemu(): ?TauxRemu + { + return $this->tauxRemu; + } + + + + /** + * @param TauxRemu|null $tauxRemu + * + * @return $this + */ + public function setTauxRemu(?TauxRemu $tauxRemu): Statut + { + $this->tauxRemu = $tauxRemu; + + return $this; + } + + + /** * Retourne la liste des privilèges associés à un statut sous forme de tableau associatif : * @@ -1391,7 +1486,6 @@ class Statut implements ParametreEntityInterface, RoleInterface, ResourceInterfa Privileges::INTERVENANT_CALCUL_HETD => $this->formuleVisualisation, Privileges::MODIF_SERVICE_DU_ASSOCIATION => $this->modificationServiceDu, Privileges::MODIF_SERVICE_DU_VISUALISATION => $this->modificationServiceDu && $this->modificationServiceDuVisualisation, - Privileges::MODIF_SERVICE_DU_EDITION => $this->modificationServiceDu && $this->modificationServiceDuEdition, Privileges::DOSSIER_VISUALISATION => $this->dossier && $this->dossierVisualisation, Privileges::DOSSIER_EDITION => $this->dossier && $this->dossierEdition, Privileges::DOSSIER_ADRESSE_VISUALISATION => $this->dossier && $this->dossierVisualisation && $this->dossierAdresse, diff --git a/module/Intervenant/src/Form/MailerIntervenantForm.php b/module/Intervenant/src/Form/MailerIntervenantForm.php index 16693e7e9e879770893ced3d33f193c8383eb8e9..c9ef8e59f44d3d492ffa190a4d4a86ce50a78f3a 100755 --- a/module/Intervenant/src/Form/MailerIntervenantForm.php +++ b/module/Intervenant/src/Form/MailerIntervenantForm.php @@ -6,10 +6,10 @@ use Application\Entity\Db\Intervenant; use Application\Entity\Db\Traits\ParametreAwareTrait; use Application\Form\AbstractForm; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DossierServiceAwareTrait; +use Dossier\Service\Traits\DossierServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; use Intervenant\Entity\Db\Note; -use Application\Service\Traits\TypeIntervenantServiceAwareTrait; +use Intervenant\Entity\Db\TypeIntervenantAwareTrait; use Intervenant\Entity\Db\Statut; use Laminas\Form\Element\Checkbox; use Laminas\Form\Element\Hidden; diff --git a/module/Intervenant/src/Form/NoteSaisieForm.php b/module/Intervenant/src/Form/NoteSaisieForm.php index c1a715922b52580cbd586238824e824e121fb98d..1e5b181095009f0aa1467aa0d53e93cd2161d4a3 100755 --- a/module/Intervenant/src/Form/NoteSaisieForm.php +++ b/module/Intervenant/src/Form/NoteSaisieForm.php @@ -25,7 +25,7 @@ class NoteSaisieForm extends AbstractForm $this->build(); - $this->setAttribute('class', 'note'); + //$this->setAttribute('class', 'note'); $this->addSecurity(); $this->addSubmit(); diff --git a/module/Intervenant/src/Form/StatutSaisieForm.php b/module/Intervenant/src/Form/StatutSaisieForm.php index 95975981eb0dd5eef71f5b748cd5d4e85ca94d1c..ada2d7911299328c9d41ed7aea409aab24dd7915 100755 --- a/module/Intervenant/src/Form/StatutSaisieForm.php +++ b/module/Intervenant/src/Form/StatutSaisieForm.php @@ -4,10 +4,11 @@ namespace Intervenant\Form; use Application\Entity\Db\EtatSortie; use Application\Form\AbstractForm; -use Application\Service\Traits\DossierAutreServiceAwareTrait; +use Dossier\Service\Traits\DossierAutreServiceAwareTrait; use Intervenant\Entity\Db\Statut; use Application\Service\Traits\ParametresServiceAwareTrait; use Intervenant\Service\TypeIntervenantServiceAwareTrait; +use Paiement\Entity\Db\TauxRemu; /** * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr> @@ -40,6 +41,7 @@ class StatutSaisieForm extends AbstractForm 'dossierAdresse' => 'Adresse', 'dossierBanque' => 'Banque', 'dossierInsee' => 'Numéro INSEE', + 'dossierStatut' => 'Statut', 'dossierEmployeur' => 'Employeur', 'pieceJustificative' => '', 'conseilRestreint' => 'Conseil restreint', @@ -54,7 +56,10 @@ class StatutSaisieForm extends AbstractForm 'paiementVisualisation' => 'Visibilité par l\'intervenant des mises en paiement', 'motifNonPaiement' => 'Le gestionnaire peut déclarer des heures comme non payables', 'formuleVisualisation' => 'Visibilité par l\'intervenant du détail des heures pour le calcul des HETD', + 'tauxRemu' => 'Taux de rémunération', 'typeIntervenant' => 'Type d\'intervenant', + 'mission' => 'Visualisation/Modification de mission', + 'missionRealise' => 'Saisie du réalisé', ]; $dveElements = [ @@ -63,6 +68,7 @@ class StatutSaisieForm extends AbstractForm 'serviceRealise', 'referentielPrevu', 'referentielRealise', + 'mission', ]; $ignored = [ @@ -76,7 +82,7 @@ class StatutSaisieForm extends AbstractForm 'contratDepot', 'contratGeneration', 'modificationServiceDuVisualisation', - 'modificationServiceDuEdition', + 'missionRealiseEdition', ]; for ($i = 1; $i <= 5; $i++) { @@ -117,7 +123,7 @@ class StatutSaisieForm extends AbstractForm 'type' => 'Text', 'name' => 'tauxChargesPatronales', 'attributes' => [ - 'pattern' => '[0-9]*', + 'pattern' => '[0-9]+([,.][0-9]+)?', ], 'hydrator' => [ 'getter' => function (Statut $statut, string $name) { @@ -136,7 +142,7 @@ class StatutSaisieForm extends AbstractForm 'type' => 'Text', 'name' => 'tauxChargesTTC', 'attributes' => [ - 'pattern' => '[0-9]*', + 'pattern' => '[0-9]+([,.][0-9]+)?', ], 'hydrator' => [ 'getter' => function (Statut $statut, string $name) { @@ -151,6 +157,29 @@ class StatutSaisieForm extends AbstractForm ], ]]); + $this->spec(['missionRealise' => [ + 'type' => 'Select', + 'name' => 'missionRealise', + 'options' => [ + 'value_options' => [ + 'desactive' => 'Désactivé', + //'active' => 'Activé mais non visible par l\'intervenant', + //'visualisation' => 'Activé et visible par l\'intervenant', + 'edition' => 'Activé et modifiable par l\'intervenant', + ], + ], + 'hydrator' => [ + 'getter' => function (Statut $statut, string $name) { + $real = $statut->getMissionRealiseEdition() ? 'edition' : 'desactive'; + + return $real; + }, + 'setter' => function (Statut $statut, $value, string $name) { + $statut->setMissionRealiseEdition($value === 'edition'); + }, + ], + ]]); + foreach ($dveElements as $dveElement) { $this->spec([$dveElement => [ 'type' => 'Select', @@ -366,6 +395,12 @@ class StatutSaisieForm extends AbstractForm }, ], ], + //TODO : Créer un validateur pour le rendre false que quand contrat desactivé + 'contratEtatSortie' => [ + 'input' => [ + 'required' => false, + ], + ], 'modificationServiceDu' => [ 'type' => 'Select', 'name' => 'modificationServiceDu', @@ -374,18 +409,14 @@ class StatutSaisieForm extends AbstractForm 'desactive' => 'Désactivé', 'active' => 'Activé mais non visible par l\'intervenant', 'visualisation' => 'Activé et visible par l\'intervenant', - 'edition' => 'Activé et modifiable par l\'intervenant', ], ], 'hydrator' => [ 'getter' => function (Statut $statut, string $name) { - $access = $statut->getModificationServiceDu(); - $visu = $statut->getModificationServiceDuVisualisation(); - $edition = $statut->getModificationServiceDuEdition(); + $access = $statut->getModificationServiceDu(); + $visu = $statut->getModificationServiceDuVisualisation(); - if ($edition && $visu && $access) { - return 'edition'; - } elseif ($visu && $access) { + if ($visu && $access) { return 'visualisation'; } elseif ($access) { return 'active'; @@ -394,13 +425,9 @@ class StatutSaisieForm extends AbstractForm } }, 'setter' => function (Statut $statut, $value, string $name) { - $access = false; - $visu = false; - $edition = false; + $access = false; + $visu = false; switch ($value) { - - case 'edition': - $edition = true; case 'visualisation': $visu = true; case 'active': @@ -408,11 +435,14 @@ class StatutSaisieForm extends AbstractForm } $statut->setModificationServiceDu($access); $statut->setModificationServiceDuVisualisation($visu); - $statut->setModificationServiceDuEdition($edition); - }, ], ], + 'tauxRemu' => [ + 'input' => [ + 'required' => false, + ], + ], ]); $this->build(); @@ -428,7 +458,10 @@ class StatutSaisieForm extends AbstractForm $this->setValueOptions('typeIntervenant', $this->getServiceTypeIntervenant()->getList()); $this->setValueOptions('contratEtatSortie', 'SELECT es FROM ' . EtatSortie::class . ' es ORDER BY es.libelle'); + $this->setValueOptions('tauxRemu', 'SELECT tr FROM ' . TauxRemu::class . ' tr WHERE tr.histoDestruction is NULL'); + $this->get('contratEtatSortie')->setEmptyOption('- Aucun état de sortie n\'est spécifié -'); + $this->get('tauxRemu')->setEmptyOption('- Utilisation du taux légal standard -'); return $this; } diff --git a/module/Intervenant/src/Service/StatutService.php b/module/Intervenant/src/Service/StatutService.php index 0ba3e3450aafa8242e7ea2b42d1a5eb93f691cb8..07caeca829d673ebb5a5df11b3d9bcc711abb90a 100755 --- a/module/Intervenant/src/Service/StatutService.php +++ b/module/Intervenant/src/Service/StatutService.php @@ -83,14 +83,14 @@ class StatutService extends AbstractEntityService [$qb, $alias] = $this->initQuery($qb, $alias); // $qb->andWhere("$alias.dossierSelectionnable = 1"); $qb->andWhere("$alias.annee = " . $this->getServiceContext()->getAnnee()->getId()); + $qb->addOrderBy("$alias.code"); $statuts = $qb->getQuery()->execute(); - $qb->addOrderBy("$alias.code"); $result = []; foreach ($statuts as $value) { if ($value instanceof Statut) { - if (($value->estNonHistorise() && $value->getDossierSelectionnable()) || + if (($value->estNonHistorise() && $value->getDossierSelectionnable() && $value->getDossier()) || $statut->getCode() == $value->getCode()) { $result[] = $value; } diff --git a/module/Intervenant/view/intervenant/note/envoyer-email.phtml b/module/Intervenant/view/intervenant/note/envoyer-email.phtml index 99260865c0b370b3bf0b032466008fd32c42236b..a2451ed9e2be83ae59eed490216d6f13a633f4a7 100755 --- a/module/Intervenant/view/intervenant/note/envoyer-email.phtml +++ b/module/Intervenant/view/intervenant/note/envoyer-email.phtml @@ -45,8 +45,9 @@ echo $this->form()->closeTag(); * @param {string} selector * @param {object} form */ - function installEditor(selector, form) { - WidgetInitializer.includeJs(Url('vendor/tinymce-4.4.1/js/tinymce/tinymce.min.js')); + function installEditor(selector, form) + { + WidgetInitializer.includeJs(Util.url('vendor/tinymce-4.4.1/js/tinymce/tinymce.min.js')); tinymce.editors = []; tinymce.init({ selector: selector, diff --git a/module/Intervenant/view/intervenant/note/index.phtml b/module/Intervenant/view/intervenant/note/index.phtml index 8f40af6ef96f3fc943a9b4303b674f1c47f21e11..de83359c798ad918368e761b29302be8ce73a50b 100755 --- a/module/Intervenant/view/intervenant/note/index.phtml +++ b/module/Intervenant/view/intervenant/note/index.phtml @@ -10,8 +10,8 @@ use Application\Provider\Privilege\Privileges; */ -$canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_NOTE_AJOUT)); -$canSee = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_NOTE_VISUALISATION)); +$canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_NOTE_AJOUT)); +$canSee = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_NOTE_VISUALISATION)); $canSendEmail = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_NOTE_EMAIL)); echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); @@ -35,12 +35,12 @@ $this->headTitle()->append($title = "Notes sur l'intervenant"); <?php foreach ($notes as $note): ?> - <tr class="note" data-id="<?= $note->getId() ?>"> + <tr data-id="<?= $note->getId() ?>"> <td class="col-lg-2"><?= $note->getType()->getLibelle() ?></td> <td class="col-lg-4"><?= $note->getLibelle() ?></td> <td class="col-lg-5"><?= 'Par ' . $note->getHistoCreateur()->getDisplayName() . ' le ' . $note->getHistoCreation()->format(\Application\Constants::DATETIME_FORMAT) ?></td> <td class="col-lg-1"> - <div class="btn-group"> + <div> <?php if ($this->isAllowed($note, \Intervenant\Assertion\NoteAssertion::PRIV_EDITER_NOTE)): ?> <a class="ajax-modal" data-event="note-edition" href="<?= $this->url('note/saisir', ['intervenant' => $intervenant->getId(), 'note' => $note->getId()]); ?>"><i @@ -103,12 +103,12 @@ $this->headTitle()->append($title = "Notes sur l'intervenant"); <body> <?php if (!empty($emails)): ?> <?php foreach ($emails as $email): ?> - <tr class="note" data-id="<?= $email->getId() ?>"> + <tr data-id="<?= $email->getId() ?>"> <td class="col-lg-2"><?= $email->getType()->getLibelle() ?></td> <td class="col-lg-4"><?= $email->getLibelle() ?></td> <td class="col-lg-5"><?= 'Par ' . $email->getHistoCreateur()->getDisplayName() . ' le ' . $email->getHistoCreation()->format(\Application\Constants::DATETIME_FORMAT) ?></td> <td class="col-lg-1"> - <div class="btn-group"> + <div> <?php if ($this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_NOTE_VISUALISATION))): ?> <a class="ajax-modal" data-event="note-voir" href="<?= $this->url('note/voir', ['intervenant' => $intervenant->getId(), 'note' => $email->getId()]); ?>"><i @@ -164,7 +164,7 @@ $this->headTitle()->append($title = "Notes sur l'intervenant"); </head> <body> <?php foreach ($values as $v): ?> - <tr class="note" data-id="<?= $v['id'] ?>"> + <tr data-id="<?= $v['id'] ?>"> <td class="col-lg-6"><?= $v['label'] ?></td> <td class="col-lg-3"><?= $v['histo_date']->format(\Application\Constants::DATETIME_FORMAT) ?></td> <td class="col-lg-3"><?= $v['histo_user'] ?></td> @@ -202,7 +202,7 @@ $this->headTitle()->append($title = "Notes sur l'intervenant"); if (str.indexOf("tab=notes") !== -1) { window.location.reload(); } else { - window.location.assign(window.location.href + '?tab=notes'); + window.location.assign(window.location.href+'?tab=notes'); } @@ -213,7 +213,7 @@ $this->headTitle()->append($title = "Notes sur l'intervenant"); if (str.indexOf("tab=notes") !== -1) { window.location.reload(); } else { - window.location.assign(window.location.href + '?tab=notes'); + window.location.assign(window.location.href+'?tab=notes'); } @@ -226,7 +226,7 @@ $this->headTitle()->append($title = "Notes sur l'intervenant"); if (str.indexOf("tab=notes") !== -1) { window.location.reload(); } else { - window.location.assign(window.location.href + '?tab=notes'); + window.location.assign(window.location.href+'?tab=notes'); } }); diff --git a/module/Intervenant/view/intervenant/statut/index.phtml b/module/Intervenant/view/intervenant/statut/index.phtml index 9feb978d67beeff428cdff6afd241d87a10dbc4c..b208a4f9c978ff75ce7d76502c56606cf8336055 100755 --- a/module/Intervenant/view/intervenant/statut/index.phtml +++ b/module/Intervenant/view/intervenant/statut/index.phtml @@ -46,6 +46,7 @@ $this->headTitle()->append($title = "Statuts des intervenants"); </div> <?php if ($canEdit): ?> + <br> <a class="btn btn-primary" href="<?= $this->url('statut/saisie') ?>" title="Ajouter un statut"> <span class="fas fa-plus"></span> Ajouter un statut </a> diff --git a/module/Intervenant/view/intervenant/statut/saisie.phtml b/module/Intervenant/view/intervenant/statut/saisie.phtml index 93c29819620da10a669857c19ccf34e764af4798..49e1885e28181226455c30c3e0f4d2e26d8a5190 100755 --- a/module/Intervenant/view/intervenant/statut/saisie.phtml +++ b/module/Intervenant/view/intervenant/statut/saisie.phtml @@ -101,24 +101,32 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA <fieldset> <legend>Modules à activer :</legend> + <div class="row"> + <div class="col-md-4"> + <?= $this->formControlGroup($form->get('dossierStatut')); ?> + </div> <div class="col-md-4"> <?= $this->formControlGroup($form->get('dossierIdentiteComplementaire')); ?> </div> <div class="col-md-4"> <?= $this->formControlGroup($form->get('dossierContact')); ?> </div> + + </div> + <div class="row"> <div class="col-md-4"> <?= $this->formControlGroup($form->get('dossierAdresse')); ?> </div> - </div> - <div class="row"> <div class="col-md-4"> + <?= $this->formControlGroup($form->get('dossierBanque')); ?> </div> <div class="col-md-4"> <?= $this->formControlGroup($form->get('dossierInsee')); ?> </div> + </div> + <div class="row"> <div class="col-md-4"> <?= $this->formControlGroup($form->get('dossierEmployeur')); ?> </div> @@ -208,6 +216,22 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA </div> + <!-- Missions --> + <div class="card bg-default"> + <div class="card-header">Missions</div> + <div class="card-body"> + <div class="row"> + <div class="col-md-6"> + <?= $this->formControlGroup($form->get('mission')); ?> + </div> + <div class="col-md-6"> + <?= $this->formControlGroup($form->get('missionRealise')); ?> + </div> + </div> + </div> + </div> + + <!-- Agréments --> <div class="card bg-default"> <div class="card-header">Agréments</div> @@ -241,8 +265,9 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA <?= $this->formControlGroup($form->get('contrat')); ?> <div class="contratDetails"> <?= $this->formControlGroup($form->get('contratEtatSortie')); ?> - <?php if ($this->isAllowed(Privileges::getResourceId(Privileges::CONTRAT_MODELES_VISUALISATION))): ?> - <a target="_blank" href="<?= $this->url('etat-sortie'); ?>">Page d'administration des états de sortie</a> + <?php if ($this->isAllowed(Privileges::getResourceId(Privileges::ETAT_SORTIE_ADMINISTRATION_VISUALISATION))): ?> + <a target="_blank" href="<?= $this->url('etat-sortie'); ?>">Page d'administration des + états de sortie</a> <?php endif; ?> </div> </div> @@ -263,6 +288,12 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA <?= $this->formControlGroup($form->get('modificationServiceDu')); ?> </div> </div> + <div class="row"> + <div class="col-md-6"> + <?= $this->formControlGroup($form->get('tauxRemu')); ?> + </div> + </div> + <?= $this->formControlGroup($form->get('depassementServiceDuSansHC')); ?> <?= $this->formControlGroup($form->get('cloture')); ?> <?= $this->formControlGroup($form->get('motifNonPaiement')); ?> @@ -305,7 +336,8 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA title="Dupliquer le statut d'intervenant"> <i class="fas fa-rotate-right"></i> Dupliquer</a> <?php endif; ?> - <a href="<?= $this->url('plafond/construire-calculer') ?>" class="btn btn-info pop-ajax">Construction & calcul de tous les plafonds</a> + <a href="<?= $this->url('plafond/construire-calculer') ?>" class="btn btn-info pop-ajax">Construction & + calcul de tous les plafonds</a> <?php endif; ?> <?= $this->form()->closeTag(); ?> @@ -316,60 +348,52 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA <script type="text/javascript"> $(function () { - $("body").on("statut_delete", function (event, popAjax) - { + $("body").on("statut_delete", function (event, popAjax) { window.location.href = '<?= (string)$this->url('statut'); ?>'; }); WidgetInitializer.add('statut', { - donneesVisu: function () - { + donneesVisu: function () { var visible = this.el('dossier').val() != 'desactive'; this.element.find('.donneesDetails').toggle(visible); }, - donneesContactVisu: function () - { + donneesContactVisu: function () { var visible = this.el('dossierContact').is(':checked'); this.element.find('.donneesContactDetails').toggle(visible); }, - servicesVisu: function () - { + servicesVisu: function () { var visible = !(this.el('servicePrevu').val() == 'desactive' && this.el('serviceRealise').val() == 'desactive'); this.element.find('.servicesDetails').toggle(visible); }, - agrementCRVisu: function () - { + agrementCRVisu: function () { var visible = this.el('conseilRestreint').val() != 'desactive'; this.element.find('.agrementCRDetails').toggle(visible); }, - agrementCAVisu: function () - { + agrementCAVisu: function () { var visible = this.el('conseilAcademique').val() != 'desactive'; this.element.find('.agrementCADetails').toggle(visible); }, - contratVisu: function () - { + contratVisu: function () { var visible = this.el('contrat').val() != 'desactive'; this.element.find('.contratDetails').toggle(visible); }, - _create: function () - { + _create: function () { var that = this; that.donneesVisu(); @@ -379,19 +403,32 @@ $canAdd = $this->isAllowed(Privileges::getResourceId(Privileges::INTERVENANT_STA that.agrementCAVisu(); that.contratVisu(); - that.el('dossier').change(function () {that.donneesVisu()}); - that.el('dossierContact').change(function () {that.donneesContactVisu()}); - that.el('servicePrevu').change(function () {that.servicesVisu()}); - that.el('serviceRealise').change(function () {that.servicesVisu()}); - that.el('conseilRestreint').change(function () {that.agrementCRVisu()}); - that.el('conseilAcademique').change(function () {that.agrementCAVisu()}); - that.el('contrat').change(function () {that.contratVisu()}); + that.el('dossier').change(function () { + that.donneesVisu() + }); + that.el('dossierContact').change(function () { + that.donneesContactVisu() + }); + that.el('servicePrevu').change(function () { + that.servicesVisu() + }); + that.el('serviceRealise').change(function () { + that.servicesVisu() + }); + that.el('conseilRestreint').change(function () { + that.agrementCRVisu() + }); + that.el('conseilAcademique').change(function () { + that.agrementCAVisu() + }); + that.el('contrat').change(function () { + that.contratVisu() + }); }, - el: function (name) - { - return this.element.find('[name=' + name + ']'); + el: function (name) { + return this.element.find('[name='+name+']'); } }); }); diff --git a/module/Mission/Module.php b/module/Mission/Module.php new file mode 100755 index 0000000000000000000000000000000000000000..8fad0d178f1e9876b61e8d1e56266ba9f8afec1a --- /dev/null +++ b/module/Mission/Module.php @@ -0,0 +1,22 @@ +<?php + +namespace Mission; + +use Application\ConfigFactory; + +class Module +{ + + public function getConfig() + { + return ConfigFactory::configFromSimplified(__DIR__, __NAMESPACE__); + } + + + + public function getAutoloaderConfig() + { + return ConfigFactory::autoloaderConfig(__DIR__, __NAMESPACE__); + } + +} diff --git a/module/Mission/autoload_classmap.php b/module/Mission/autoload_classmap.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/Mission/autoload_classmap.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Mission/config/module.config.php b/module/Mission/config/module.config.php new file mode 100644 index 0000000000000000000000000000000000000000..d92658fc7566aee2f4022e133172abb3d4ade85f --- /dev/null +++ b/module/Mission/config/module.config.php @@ -0,0 +1,218 @@ +<?php + +namespace Mission; + +use Application\Entity\Db\WfEtape; +use Application\Provider\Privilege\Privileges; +use Mission\Controller\MissionController; +use Mission\Controller\MissionTypeController; +use Mission\Service\MissionTypeService; +use Mission\Service\MissionTypeServiceFactory; +use UnicaenAuth\Assertion\AssertionFactory; +use UnicaenAuth\Guard\PrivilegeController; + + +return [ + 'routes' => [ + 'intervenant' => [ + 'child_routes' => [ + 'missions' => [ + 'route' => '/:intervenant/missions', + 'controller' => MissionController::class, + 'action' => 'index', + 'privileges' => Privileges::MISSION_VISUALISATION, + //'assertion' => Assertion\MissionAssertion::class, + 'may_terminate' => true, + 'child_routes' => [ + 'modification' => [ + 'route' => '/modification', + 'controller' => MissionController::class, + 'action' => 'modification', + 'privileges' => Privileges::MISSION_EDITION, + //'assertion' => Assertion\MissionAssertion::class, + ], + ], + ], + ], + ], + 'mission' => [ + 'route' => '/mission', + 'may_terminate' => false, + 'child_routes' => [ + 'liste' => [ + 'route' => '/liste/:intervenant', + 'controller' => MissionController::class, + 'action' => 'liste', + 'privileges' => Privileges::MISSION_VISUALISATION, + //'assertion' => Assertion\MissionAssertion::class, + ], + 'get' => [ + 'route' => '/get/:mission', + 'controller' => MissionController::class, + 'action' => 'get', + 'privileges' => Privileges::MISSION_VISUALISATION, + //'assertion' => Assertion\MissionAssertion::class, + ], + 'ajout' => [ + 'route' => '/ajout/:intervenant', + 'controller' => MissionController::class, + 'action' => 'ajout', + 'privileges' => Privileges::MISSION_EDITION, + //'assertion' => Assertion\MissionAssertion::class, + ], + 'saisie' => [ + 'route' => '/saisie/:mission', + 'controller' => MissionController::class, + 'action' => 'saisie', + 'privileges' => Privileges::MISSION_EDITION, + //'assertion' => Assertion\MissionAssertion::class, + ], + 'suivi' => [ + 'route' => '/suivi/:intervenant', + 'controller' => MissionController::class, + 'action' => 'suivi', + ], + 'supprimer' => [ + 'route' => '/supprimer/:mission', + 'controller' => MissionController::class, + 'action' => 'supprimer', + 'privileges' => Privileges::MISSION_EDITION, + ], + 'valider' => [ + 'route' => '/valider/:mission', + 'controller' => MissionController::class, + 'action' => 'valider', + 'privileges' => Privileges::MISSION_VALIDATION, + ], + 'devalider' => [ + 'route' => '/devalider/:mission', + 'controller' => MissionController::class, + 'action' => 'devalider', + 'privileges' => Privileges::MISSION_DEVALIDATION, + ], + 'volume-horaire' => [ + 'route' => '/volume-horaire', + 'controller' => MissionController::class, + 'may_terminate' => false, + 'child_routes' => [ + 'supprimer' => [ + 'route' => '/supprimer/:volumeHoraireMission', + 'controller' => MissionController::class, + 'action' => 'volume-horaire-supprimer', + 'privileges' => Privileges::MISSION_EDITION, + ], + 'valider' => [ + 'route' => '/valider/:volumeHoraireMission', + 'controller' => MissionController::class, + 'action' => 'volume-horaire-valider', + 'privileges' => Privileges::MISSION_VALIDATION, + ], + 'devalider' => [ + 'route' => '/devalider/:volumeHoraireMission', + 'controller' => MissionController::class, + 'action' => 'volume-horaire-devalider', + 'privileges' => Privileges::MISSION_DEVALIDATION, + ], + ], + ], + ], + ], + 'missions-type' => [ + 'route' => '/missions-type', + 'controller' => MissionTypeController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'saisir' => [ + 'route' => '/saisir[/:typeMission]', + 'controller' => MissionTypeController::class, + 'action' => 'saisir', + ], + 'supprimer' => [ + 'route' => '/supprimer/:typeMission', + 'controller' => MissionTypeController::class, + 'action' => 'supprimer', + ], + ], + ], + ], + + + 'navigation' => [ + 'intervenant' => [ + 'pages' => [ + 'missions' => [ + 'label' => "Missions", + 'title' => "Missions", + 'route' => 'intervenant/missions', + 'paramsInject' => [ + 'intervenant', + ], + 'workflow-etape-code' => WfEtape::CODE_MISSION_SAISIE, + 'withtarget' => true, + 'visible' => Assertion\MissionAssertion::class, + 'order' => 8, + ], + ], + ], + 'administration' => [ + 'pages' => [ + 'intervenants' => [ + 'pages' => [ + 'missions-type' => [ + 'label' => "Type de mission", + 'route' => 'missions-type', + 'resource' => PrivilegeController::getResourceId(MissionTypeController::class, 'index'), + 'order' => 70, + ], + ], + ], + ], + ], + ], + + 'rules' => [ + ], + + 'guards' => [ + [ + 'controller' => MissionTypeController::class, + 'action' => ['index'], + 'privileges' => [ + Privileges::MISSION_VISUALISATION_TYPE, + ], + ], + [ + 'controller' => MissionTypeController::class, + 'action' => ['saisir'], + 'privileges' => [ + Privileges::MISSION_EDITION_TYPE, + ], + ], + [ + 'controller' => MissionTypeController::class, + 'action' => ['supprimer'], + 'privileges' => [ + Privileges::MISSION_SUPPRESSION_TYPE, + ], + ], + ], + + 'controllers' => [ + MissionController::class => Controller\MissionControllerFactory::class, + MissionTypeController::class => Controller\MissionTypeControllerFactory::class, + ], + + 'services' => [ + MissionTypeService::class => MissionTypeServiceFactory::class, + Assertion\MissionAssertion::class => AssertionFactory::class, + Service\MissionService::class => Service\MissionServiceFactory::class, + ], + + 'forms' => [ + Form\MissionForm::class => Form\MissionFormFactory::class, + ], + + 'view_helpers' => [ + ], +]; \ No newline at end of file diff --git a/module/Mission/src/Assertion/MissionAssertion.php b/module/Mission/src/Assertion/MissionAssertion.php new file mode 100755 index 0000000000000000000000000000000000000000..17c3b334e60114052cb33ad3fe8906f70549fdae --- /dev/null +++ b/module/Mission/src/Assertion/MissionAssertion.php @@ -0,0 +1,108 @@ +<?php + +namespace Mission\Assertion; + +use Application\Acl\Role; +use Application\Entity\Db\Intervenant; +use Application\Entity\Db\WfEtape; +use Application\Provider\Privilege\Privileges; +use Service\Entity\Db\TypeVolumeHoraire; +use UnicaenAuth\Assertion\AbstractAssertion; +use Laminas\Permissions\Acl\Resource\ResourceInterface; + + +/** + * Description of MissionAssertion + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionAssertion extends AbstractAssertion +{ + + /* ---- Routage général ---- */ + public function __invoke(array $page) // gestion des visibilités de menus + { + return $this->assertPage($page); + } + + + + protected function assertPage(array $page) + { + $role = $this->getRole(); + /* @var $role Role */ + + if (!$role) return false; + + $intervenant = null; + if (isset($page['workflow-etape-code'])) { + $etape = $page['workflow-etape-code']; + + /** @var Intervenant $intervenant */ + $intervenant = $this->getMvcEvent()->getParam('intervenant'); + + if (!$intervenant) return false; + + return $this->assertVisualisationMission($role, $intervenant); + } + + return false; + } + + + + /** + * Exemple + */ + protected function assertEntity(ResourceInterface $entity = null, $privilege = null) + { + +// switch (true) { +// case $entity instanceof VotreEntite: +// switch ($privilege) { +// case Privileges::VOTRE_PRIVILEGE: // Attention à bien avoir généré le fournisseur de privilèges si vous utilisez la gestion des privilèges d'UnicaenAuth +// return $this->assertVotreAssertion($role, $entity); +// } +// break; +// } + + return true; + } + + + + protected function assertController($controller, $action = null, $privilege = null) + { + $role = $this->getRole(); + + // Si le rôle n'est pas renseigné alors on s'en va... + if (!$role instanceof Role) return false; + // pareil si le rôle ne possède pas le privilège adéquat + if ($privilege && !$role->hasPrivilege($privilege)) return false; + + /* @var $intervenant Intervenant */ + $intervenant = $this->getMvcEvent()->getParam('intervenant'); + + if (!$intervenant) return false; + + // Si c'est bon alors on affine... + switch ($action) { + case 'index': + return $this->assertVisualisationMission($role, $intervenant); + break; + } + + return true; + } + + + + protected function assertVisualisationMission(Role $role, Intervenant $intervenant) + { + return $this->asserts([ + $role->hasPrivilege(Privileges::MISSION_VISUALISATION), + $intervenant->getStatut()->getMission(), + ]); + } + +} \ No newline at end of file diff --git a/module/Mission/src/Assertion/MissionAssertionFactory.php b/module/Mission/src/Assertion/MissionAssertionFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..a308e2cede969ee4c5db675720e9c2fc6aa8e60c --- /dev/null +++ b/module/Mission/src/Assertion/MissionAssertionFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace Mission\Assertion; + +use Psr\Container\ContainerInterface; + + + +/** + * Description of MissionAssertionFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionAssertionFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MissionAssertion + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionAssertion + { + $assertion = new MissionAssertion; + + /* Injectez vos dépendances ICI */ + + return $assertion; + } +} \ No newline at end of file diff --git a/module/Mission/src/Controller/MissionController.php b/module/Mission/src/Controller/MissionController.php new file mode 100755 index 0000000000000000000000000000000000000000..2c098de27dc054ca7e62d9e8c86dd7526f708452 --- /dev/null +++ b/module/Mission/src/Controller/MissionController.php @@ -0,0 +1,278 @@ +<?php + +namespace Mission\Controller; + +use Application\Constants; +use Application\Controller\AbstractController; +use Application\Entity\Db\Intervenant; +use Application\Provider\Privilege\Privileges; +use Application\Service\Traits\ContextServiceAwareTrait; +use Application\Service\Traits\TypeValidationServiceAwareTrait; +use Application\Service\Traits\ValidationServiceAwareTrait; +use Application\Service\Traits\WorkflowServiceAwareTrait; +use Laminas\View\Model\JsonModel; +use Laminas\View\Model\ViewModel; +use Mission\Entity\Db\Mission; +use Mission\Entity\Db\VolumeHoraireMission; +use Mission\Form\MissionFormAwareTrait; +use Mission\Service\MissionServiceAwareTrait; +use Service\Entity\Db\TypeVolumeHoraire; + + +/** + * Description of MissionController + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionController extends AbstractController +{ + use MissionServiceAwareTrait; + use MissionFormAwareTrait; + use ContextServiceAwareTrait; + use ValidationServiceAwareTrait; + use WorkflowServiceAwareTrait; + + + /** + * Page d'index des missions + * + * @return array|\Laminas\View\Model\ViewModel + */ + public function indexAction() + { + /* @var $intervenant Intervenant */ + $intervenant = $this->getEvent()->getParam('intervenant'); + + $canAddMission = true; + + return compact('intervenant', 'canAddMission'); + } + + + + public function suiviAction() + { + /* @var $intervenant Intervenant */ + $intervenant = $this->getEvent()->getParam('intervenant'); + + return compact('intervenant'); + } + + + + /** + * Ajoute une nouvelle mission (form) + * + * @return ViewModel + */ + public function ajoutAction(): ViewModel + { + /** @var Intervenant $intervenant */ + $intervenant = $this->getEvent()->getParam('intervenant'); + + $mission = $this->getServiceMission()->newEntity(); + $mission->setIntervenant($intervenant); + + $canAutoValidate = $this->isAllowed($mission, Privileges::MISSION_AUTOVALIDATION); + + if ($canAutoValidate) $mission->setAutoValidation(true); + + return $this->saisieAction($mission); + } + + + + /** + * Modifie une mission (form) + * + * @param Mission|null $mission + * + * @return ViewModel + */ + public function saisieAction(?Mission $mission = null): ViewModel + { + if (!$mission) { + /** @var Mission $mission */ + $mission = $this->getEvent()->getParam('mission'); + + $title = 'Modification d\'une mission'; + } else { + $title = 'Ajout d\'une mission'; + } + + $form = $this->getFormMission(); + + if ($this->getServiceContext()->getStructure()) { + $form->remove('structure'); + } + $form->bindRequestSave($mission, $this->getRequest(), function ($mission) { + $this->getServiceMission()->save($mission); + $this->updateTableauxBord($mission); + $this->flashMessenger()->addSuccessMessage('Mission bien enregistrée'); + }); + // on passe le data-id pour pouvoir le récupérer dans la vue et mettre à jour la liste + $form->setAttribute('data-id', $mission->getId()); + + $vm = new ViewModel(); + $vm->setTemplate('mission/saisie'); + $vm->setVariables(compact('form', 'title', 'mission')); + + return $vm; + } + + + + /** + * Retourne la liste des missions + * + * @return JsonModel + */ + public function listeAction() + { + /* @var $intervenant Intervenant */ + $intervenant = $this->getEvent()->getParam('intervenant'); + + $query = $this->getServiceMission()->query(['intervenant' => $intervenant]); + + return $this->axios()->send($query); + } + + + + /** + * Retourne les données pour une mission + * + * @return JsonModel + */ + public function getAction(?Mission $mission = null) + { + if (!$mission) { + /** @var Mission $mission */ + $mission = $this->getEvent()->getParam('mission'); + } + + // Vidage du cache d'exécution Doctrine pour être sûr de bien filter les données de la mission + $this->em()->clear(); + + $query = $this->getServiceMission()->query(['mission' => $mission]); + + return $this->axios()->send($this->axios()::extract($query)[0]); + } + + + + public function supprimerAction() + { + /** @var Mission $mission */ + $mission = $this->getEvent()->getParam('mission'); + + $this->getServiceMission()->delete($mission); + $this->updateTableauxBord($mission); + $this->flashMessenger()->addSuccessMessage("Mission supprimée avec succès."); + + return $this->axios()->send([]); + } + + + + public function validerAction() + { + /** @var Mission $mission */ + $mission = $this->getEvent()->getParam('mission'); + + if ($mission->isValide()) { + $this->flashMessenger()->addInfoMessage('La mission est déjà validée'); + } else { + $this->getServiceValidation()->validerMission($mission); + $this->getServiceMission()->save($mission); + $this->updateTableauxBord($mission); + $this->flashMessenger()->addSuccessMessage('Mission validée'); + } + + return $this->getAction($mission); + } + + + + public function devaliderAction() + { + /** @var Mission $mission */ + $mission = $this->getEvent()->getParam('mission'); + + $validation = $mission->getValidation(); + if ($validation) { + $mission->setAutoValidation(false); + $mission->removeValidation($validation); + $this->getServiceValidation()->delete($validation); + $this->updateTableauxBord($mission); + $this->flashMessenger()->addSuccessMessage("Validation de la mission <strong>retirée</strong> avec succès."); + } else { + $this->flashMessenger()->addInfoMessage("La mission n'était pas validée"); + } + + return $this->getAction($mission); + } + + + + public function volumeHoraireSupprimerAction() + { + /** @var VolumeHoraireMission $volumeHoraireMission */ + $volumeHoraireMission = $this->getEvent()->getParam('volumeHoraireMission'); + + $this->getServiceMission()->deleteVolumeHoraire($volumeHoraireMission); + $this->updateTableauxBord($volumeHoraireMission->getMission()); + $this->flashMessenger()->addSuccessMessage("Volume horaire supprimé avec succès."); + + return $this->getAction($volumeHoraireMission->getMission()); + } + + + + public function volumeHoraireValiderAction() + { + /** @var VolumeHoraireMission $volumeHoraireMission */ + $volumeHoraireMission = $this->getEvent()->getParam('volumeHoraireMission'); + + if ($volumeHoraireMission->isValide()) { + $this->flashMessenger()->addInfoMessage('Ce volume horaire est déjà validé'); + } else { + $this->getServiceValidation()->validerVolumeHoraireMission($volumeHoraireMission); + $this->getServiceMission()->saveVolumeHoraire($volumeHoraireMission); + $this->updateTableauxBord($volumeHoraireMission->getMission()); + $this->flashMessenger()->addSuccessMessage('Volume horaire validé'); + } + + return $this->getAction($volumeHoraireMission->getMission()); + } + + + + public function volumeHoraireDevaliderAction() + { + /** @var VolumeHoraireMission $volumeHoraireMission */ + $volumeHoraireMission = $this->getEvent()->getParam('volumeHoraireMission'); + + $validation = $volumeHoraireMission->getValidation(); + if ($validation) { + $volumeHoraireMission->setAutoValidation(false); + $volumeHoraireMission->removeValidation($validation); + $this->getServiceValidation()->delete($validation); + $this->updateTableauxBord($volumeHoraireMission->getMission()); + $this->flashMessenger()->addSuccessMessage("Validation du volume horaire <strong>retirée</strong> avec succès."); + } else { + $this->flashMessenger()->addInfoMessage("Ce volume horaire n'était pas validé"); + } + + return $this->getAction($volumeHoraireMission->getMission()); + } + + + + private function updateTableauxBord(Mission $mission) + { + $this->getServiceWorkflow()->calculerTableauxBord([ + 'mission', + ], $mission->getIntervenant()); + } +} \ No newline at end of file diff --git a/module/Mission/src/Controller/MissionControllerFactory.php b/module/Mission/src/Controller/MissionControllerFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..d5459b87f7866a29cd97f9f45d2b0e9c9c4413b0 --- /dev/null +++ b/module/Mission/src/Controller/MissionControllerFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace Mission\Controller; + +use Psr\Container\ContainerInterface; + + + +/** + * Description of MissionControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MissionController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionController + { + $controller = new MissionController; + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} \ No newline at end of file diff --git a/module/Mission/src/Controller/MissionTypeController.php b/module/Mission/src/Controller/MissionTypeController.php new file mode 100644 index 0000000000000000000000000000000000000000..68f263d777c3dab4552aabe345aed44aac1e1abe --- /dev/null +++ b/module/Mission/src/Controller/MissionTypeController.php @@ -0,0 +1,70 @@ +<?php + +namespace Mission\Controller; + +use Application\Controller\AbstractController; +use Mission\Entity\Db\TypeMission; +use Mission\Form\MissionTypeFormAwareTrait; +use Mission\Service\MissionTypeServiceAwareTrait; +use Application\Service\Traits\ContextServiceAwareTrait; +use UnicaenApp\View\Model\MessengerViewModel; + +/** + * Description of tauxRemuController + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class MissionTypeController extends AbstractController +{ + use MissionTypeServiceAwareTrait; + use ContextServiceAwareTrait; + use MissionTypeFormAwareTrait; + + public function indexAction() + { + $this->em()->getFilters()->enable('annee')->init([ + TypeMission::class, + ]); + $this->em()->getFilters()->enable('historique')->init([ + TypeMission::class, + ]); + $missionsType = $this->getServiceMissionType()->getTypes(); + + return compact('missionsType'); + } + + + + public function saisirAction() + { + + $typeMission = $this->getEvent()->getParam('typeMission'); + $form = $this->getFormMissionType(); + if (empty($typeMission)) { + $title = "Création d'un nouveau type"; + $typeMission = $this->getServiceMissionType()->newEntity(); + } else { + $title = "Édition d'un type"; + } + $form->bindRequestSave($typeMission, $this->getRequest(), function () use ($typeMission, $form) { + $this->getServiceMissionType()->save($typeMission); + + $this->flashMessenger()->addSuccessMessage( + "Ajout réussi" + ); + }); + + return compact('form', 'title'); + } + + + + public function supprimerAction(): MessengerViewModel + { + $type = $this->getEvent()->getParam('typeMission'); + $this->getServiceMissionType()->delete($type, true); + + return new MessengerViewModel(); + } +} + diff --git a/module/Mission/src/Controller/MissionTypeControllerFactory.php b/module/Mission/src/Controller/MissionTypeControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..301b22cb051bd43ffb15f8557829c548b707b66c --- /dev/null +++ b/module/Mission/src/Controller/MissionTypeControllerFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace Mission\Controller; + +use Application\Service\ContextService; +use Mission\Service\MissionTypeService; +use Psr\Container\ContainerInterface; + +/** + * Description of MissionTypeControllerFactory + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class MissionTypeControllerFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MissionTypeController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionTypeController + { + $controller = new MissionTypeController; + $controller->setServiceMissionType($container->get(MissionTypeService::class)); + $controller->setServiceContext($container->get(ContextService::class)); + return $controller; + } +} + diff --git a/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.Mission.dcm.xml b/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.Mission.dcm.xml new file mode 100755 index 0000000000000000000000000000000000000000..a76c1aae28b3623d3762b9670c3c06b89bd714ec --- /dev/null +++ b/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.Mission.dcm.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Mission\Entity\Db\Mission" table="MISSION"> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + </id> + <many-to-one field="intervenant" target-entity="Application\Entity\Db\Intervenant"> + <join-column name="INTERVENANT_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="structure" target-entity="Application\Entity\Db\Structure"> + <join-column name="STRUCTURE_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="typeMission" target-entity="Mission\Entity\Db\TypeMission"> + <join-column name="TYPE_MISSION_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="tauxRemu" target-entity="Paiement\Entity\Db\TauxRemu"> + <join-column name="TAUX_REMU_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="dateDebut" type="datetime" column="DATE_DEBUT" nullable="false"/> + <field name="dateFin" type="datetime" column="DATE_FIN" nullable="false"/> + <field name="description" type="string" column="DESCRIPTION" length="4000" nullable="true"/> + + <many-to-many field="etudiants" target-entity="Application\Entity\Db\Intervenant"> + <join-table name="MISSION_ETUDIANT"> + <join-columns> + <join-column name="MISSION_ID" referenced-column-name="ID"/> + </join-columns> + <inverse-join-columns> + <join-column name="INTERVENANT_ID" referenced-column-name="ID"/> + </inverse-join-columns> + </join-table> + </many-to-many> + + <field name="autoValidation" type="boolean" column="AUTO_VALIDATION" nullable="false"/> + <many-to-many field="validations" target-entity="Application\Entity\Db\Validation"> + <join-table name="VALIDATION_MISSION"> + <join-columns> + <join-column name="MISSION_ID" referenced-column-name="ID"/> + </join-columns> + <inverse-join-columns> + <join-column name="VALIDATION_ID" referenced-column-name="ID"/> + </inverse-join-columns> + </join-table> + </many-to-many> + <one-to-many field="volumesHoraires" target-entity="Mission\Entity\Db\VolumeHoraireMission" mapped-by="mission"> + </one-to-many> + + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + </entity> +</doctrine-mapping> \ No newline at end of file diff --git a/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.TypeMission.dcm.xml b/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.TypeMission.dcm.xml new file mode 100755 index 0000000000000000000000000000000000000000..ea08804693d3bf6f3d4392afb41cb76b1a7ac4e5 --- /dev/null +++ b/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.TypeMission.dcm.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Mission\Entity\Db\TypeMission" table="TYPE_MISSION"> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + </id> + <unique-constraints> + <unique-constraint name="TYPE_MISSION_UN" columns="CODE,ANNEE_ID,HISTO_DESTRUCTION"/> + </unique-constraints> + <field name="code" type="string" column="CODE" length="20" nullable="false"/> + <field name="libelle" type="string" column="LIBELLE" length="100" nullable="false"/> + <many-to-one field="tauxRemu" target-entity="Paiement\Entity\Db\TauxRemu"> + <join-column name="TAUX_REMU_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="annee" target-entity="Application\Entity\Db\Annee"> + <join-column name="ANNEE_ID" referenced-column-name="ID"/> + </many-to-one> + + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + </entity> +</doctrine-mapping> \ No newline at end of file diff --git a/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.VolumeHoraireMission.dcm.xml b/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.VolumeHoraireMission.dcm.xml new file mode 100755 index 0000000000000000000000000000000000000000..1386b5d3452a8e205006a7e4e45ce128d9464036 --- /dev/null +++ b/module/Mission/src/Entity/Db/Mapping/Mission.Entity.Db.VolumeHoraireMission.dcm.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Mission\Entity\Db\VolumeHoraireMission" table="VOLUME_HORAIRE_MISSION"> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + </id> + <many-to-one field="typeVolumeHoraire" target-entity="Service\Entity\Db\TypeVolumeHoraire"> + <join-column name="TYPE_VOLUME_HORAIRE_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="mission" target-entity="Mission\Entity\Db\Mission"> + <join-column name="MISSION_ID" referenced-column-name="ID"/> + <cascade> + <cascade-persist/> + </cascade> + </many-to-one> + <field name="heures" type="float" column="HEURES" precision="126" scale="0" nullable="false"/> + <many-to-one field="contrat" target-entity="Application\Entity\Db\Contrat"> + <join-column name="CONTRAT_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="autoValidation" type="boolean" column="AUTO_VALIDATION" nullable="false"/> + <field name="horaireDebut" type="datetime" column="HORAIRE_DEBUT" nullable="false"/> + <field name="horaireFin" type="datetime" column="HORAIRE_FIN" nullable="false"/> + <field name="nocturne" type="boolean" column="NOCTURNE" nullable="false"/> + + <many-to-many field="validations" target-entity="Application\Entity\Db\Validation"> + <join-table name="VALIDATION_VOL_HORAIRE_MISS"> + <join-columns> + <join-column name="VOLUME_HORAIRE_MISSION_ID" referenced-column-name="ID"/> + </join-columns> + <inverse-join-columns> + <join-column name="VALIDATION_ID" referenced-column-name="ID"/> + </inverse-join-columns> + </join-table> + </many-to-many> + + <many-to-one field="source" target-entity="UnicaenImport\Entity\Db\Source"> + <join-column name="SOURCE_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="sourceCode" type="string" column="SOURCE_CODE" length="100" nullable="false"/> + + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + </entity> +</doctrine-mapping> \ No newline at end of file diff --git a/module/Mission/src/Entity/Db/Mission.php b/module/Mission/src/Entity/Db/Mission.php new file mode 100755 index 0000000000000000000000000000000000000000..dc25ab9c945559ec8dab7e7097d437e7767d2443 --- /dev/null +++ b/module/Mission/src/Entity/Db/Mission.php @@ -0,0 +1,421 @@ +<?php + +namespace Mission\Entity\Db; + +use Application\Entity\Db\Intervenant; +use Application\Entity\Db\Traits\IntervenantAwareTrait; +use Application\Entity\Db\Traits\StructureAwareTrait; +use Application\Entity\Db\Validation; +use Application\Interfaces\AxiosExtractor; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use Paiement\Entity\Db\TauxRemu; +use UnicaenApp\Entity\HistoriqueAwareInterface; +use UnicaenApp\Entity\HistoriqueAwareTrait; + +class Mission implements HistoriqueAwareInterface, ResourceInterface, AxiosExtractor +{ + use HistoriqueAwareTrait; + use IntervenantAwareTrait; + use StructureAwareTrait; + + protected ?int $id = null; + + protected ?TypeMission $typeMission = null; + + protected ?TauxRemu $tauxRemu = null; + + protected ?\DateTime $dateDebut = null; + + protected ?\DateTime $dateFin = null; + + protected ?string $description = null; + + protected bool $autoValidation = false; + + private Collection $etudiants; + + private Collection $validations; + + private Collection $volumesHoraires; + + + + public function __construct() + { + $this->etudiants = new ArrayCollection(); + $this->validations = new ArrayCollection(); + $this->volumesHoraires = new ArrayCollection(); + } + + + + public function axiosDefinition(): array + { + return [ + 'typeMission', + 'dateDebut', + 'dateFin', + 'structure', + 'tauxRemu', + 'description', + 'histoCreation', + 'histoCreateur', + 'heures', + 'heuresValidees', + 'volumesHoraires', + 'contrat', + 'valide', + 'validation', + 'canSaisie', + 'canValider', + 'canDevalider', + 'canSupprimer', + ]; + } + + + + public function getResourceId() + { + return 'Mission'; + } + + + + public function getId(): ?int + { + return $this->id; + } + + + + public function getTypeMission(): ?TypeMission + { + return $this->typeMission; + } + + + + public function setTypeMission(?TypeMission $typeMission): self + { + $this->typeMission = $typeMission; + + return $this; + } + + + + public function getTauxRemu(): ?TauxRemu + { + return $this->tauxRemu; + } + + + + public function setTauxRemu(?TauxRemu $tauxRemu): self + { + $this->tauxRemu = $tauxRemu; + + return $this; + } + + + + public function getDateDebut(): ?\DateTime + { + return $this->dateDebut; + } + + + + public function setDateDebut(?\DateTime $dateDebut): self + { + $this->dateDebut = $dateDebut; + + return $this; + } + + + + public function getDateFin(): ?\DateTime + { + return $this->dateFin; + } + + + + public function setDateFin(?\DateTime $dateFin): self + { + $this->dateFin = $dateFin; + + return $this; + } + + + + public function getDescription(): ?string + { + return $this->description; + } + + + + public function setDescription(?string $description): self + { + $this->description = $description; + + return $this; + } + + + + /** + * @return bool + */ + public function isAutoValidation(): bool + { + return $this->autoValidation; + } + + + + /** + * @param bool $autoValidation + * + * @return Mission + */ + public function setAutoValidation(bool $autoValidation): Mission + { + $this->autoValidation = $autoValidation; + + return $this; + } + + + + public function getHeures(): ?float + { + $heures = null; + + /** @var VolumeHoraireMission[] $vhs */ + $vhs = $this->volumesHoraires; + foreach ($vhs as $vh) { + if ($vh->estNonHistorise() && $vh->getTypeVolumeHoraire()->isPrevu()) { + if ($heures === null) { + $heures = 0; + } + $heures += $vh->getHeures(); + } + } + + return $heures; + } + + + + public function getHeuresValidees(): float + { + $heures = 0; + + /** @var VolumeHoraireMission[] $vhs */ + $vhs = $this->volumesHoraires; + foreach ($vhs as $vh) { + if ($vh->estNonHistorise() && $vh->getTypeVolumeHoraire()->isPrevu() && $vh->isValide()) { + if ($heures === null) { + $heures = 0; + } + $heures += $vh->getHeures(); + } + } + + return $heures; + } + + + + public function setHeures(float $heures): self + { + $oldHeures = $this->getHeures() ?: 0; + $newHeures = $heures - $oldHeures; + + if ($newHeures != 0) { + $nvh = new VolumeHoraireMission(); + $nvh->setMission($this); + $this->addVolumeHoraire($nvh); + $nvh->setHeures($newHeures); + } + + return $this; + } + + + + /** + * @return Collection|Intervenant[] + */ + public function getEtudiants(): Collection + { + return $this->etudiants; + } + + + + public function addEtudiant(Intervenant $intervenant): self + { + $this->etudiants[] = $intervenant; + + return $this; + } + + + + public function removeEtudiant(Intervenant $intervenant): self + { + $this->etudiants->removeElement($intervenant); + + return $this; + } + + + + /** + * @return Collection|Validation[] + */ + public function getValidations(): Collection + { + return $this->validations; + } + + + + public function addValidation(Validation $validation): self + { + $this->validations[] = $validation; + foreach ($this->getVolumesHoraires() as $vh) { + if (!$vh->isValide()) { + $vh->addValidation($validation); + } + } + + return $this; + } + + + + public function removeValidation(Validation $validation): self + { + $this->validations->removeElement($validation); + foreach ($this->getVolumesHoraires() as $vh) { + $vh->removeValidation($validation); + } + + return $this; + } + + + + public function isValide(): bool + { + if ($this->isAutoValidation()) return true; + + if ($validations = $this->getValidations()) { + foreach ($validations as $validation) { + if ($validation->estNonHistorise()) return true; + } + } + + return false; + } + + + + public function getValidation(): ?Validation + { + if ($this->isAutoValidation()) { + return new Validation(); + } + + if ($validations = $this->getValidations()) { + foreach ($validations as $validation) { + if ($validation->estNonHistorise()) return $validation; + } + } + + return null; + } + + + + /** + * @return Collection|VolumeHoraireMission[] + */ + public function getVolumesHoraires(): Collection + { + return $this->volumesHoraires; + } + + + + public function addVolumeHoraire(VolumeHoraireMission $volumeHoraireMission): self + { + $this->volumesHoraires[] = $volumeHoraireMission; + + return $this; + } + + + + public function removeVolumeHoraire(VolumeHoraireMission $volumeHoraireMission): self + { + $this->volumesHoraires->removeElement($volumeHoraireMission); + + return $this; + } + + + + public function hasContrat(): bool + { + /** @var VolumeHoraireMission[] $vhs */ + $vhs = $this->getVolumesHoraires(); + + foreach ($vhs as $vh) { + if ($vh->estNonHistorise() && $vh->getContrat() && $vh->getContrat()->estNonHistorise()) { + return true; + } + } + + return false; + } + + + + public function canSaisie(): bool + { + return !$this->isValide(); + } + + + + public function canValider(): bool + { + return !$this->isValide(); + } + + + + public function canDevalider(): bool + { + return $this->isValide(); + } + + + + public function canSupprimer(): bool + { + return !$this->isValide(); + } + +} diff --git a/module/Mission/src/Entity/Db/TypeMission.php b/module/Mission/src/Entity/Db/TypeMission.php new file mode 100755 index 0000000000000000000000000000000000000000..c27263798da6c2d1b0fba27558493b72266b6c6a --- /dev/null +++ b/module/Mission/src/Entity/Db/TypeMission.php @@ -0,0 +1,82 @@ +<?php + +namespace Mission\Entity\Db; + +use Application\Interfaces\ParametreEntityInterface; +use Application\Traits\ParametreEntityTrait; +use Paiement\Entity\Db\TauxRemu; + +class TypeMission implements ParametreEntityInterface +{ + use ParametreEntityTrait; + + protected ?int $id = null; + + protected ?string $code = null; + + protected ?string $libelle = null; + + protected ?TauxRemu $tauxRemu = null; + + + + public function getId(): ?int + { + return $this->id; + } + + + + public function getCode(): ?string + { + return $this->code; + } + + + + public function setCode(?string $code): TypeMission + { + $this->code = $code; + + return $this; + } + + + + public function getLibelle(): ?string + { + return $this->libelle; + } + + + + public function setLibelle(?string $libelle): TypeMission + { + $this->libelle = $libelle; + + return $this; + } + + + + public function getTauxRemu(): ?TauxRemu + { + return $this->tauxRemu; + } + + + + public function setTauxRemu(?TauxRemu $tauxRemu): TypeMission + { + $this->tauxRemu = $tauxRemu; + + return $this; + } + + + + public function __toString(): string + { + return $this->getLibelle(); + } +} diff --git a/module/Mission/src/Entity/Db/VolumeHoraireMission.php b/module/Mission/src/Entity/Db/VolumeHoraireMission.php new file mode 100755 index 0000000000000000000000000000000000000000..b23212c111e2813f21b19337c2001b2df2f0bda1 --- /dev/null +++ b/module/Mission/src/Entity/Db/VolumeHoraireMission.php @@ -0,0 +1,245 @@ +<?php + +namespace Mission\Entity\Db; + +use Application\Entity\Db\Traits\ContratAwareTrait; +use Application\Entity\Db\Validation; +use Application\Interfaces\AxiosExtractor; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Service\Entity\Db\TypeVolumeHoraireAwareTrait; +use UnicaenApp\Entity\HistoriqueAwareInterface; +use UnicaenApp\Entity\HistoriqueAwareTrait; +use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; +use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; + +class VolumeHoraireMission implements HistoriqueAwareInterface, ImportAwareInterface, AxiosExtractor +{ + use HistoriqueAwareTrait; + use ImportAwareTrait; + use TypeVolumeHoraireAwareTrait; + use ContratAwareTrait; + + protected ?int $id = null; + + protected ?Mission $mission = null; + + protected float $heures = 0; + + protected bool $autoValidation = false; + + protected ?\DateTime $horaireDebut = null; + + protected ?\DateTime $horaireFin = null; + + protected bool $nocturne = false; + + private Collection $validations; + + + + public function __construct() + { + $this->validations = new ArrayCollection(); + } + + + + public function axiosDefinition(): array + { + return [ + 'heures', + 'valide', + 'validation', + 'histoCreation', + 'histoCreateur', + 'canValider', + 'canDevalider', + 'canSupprimer', + ]; + } + + + + public function getId(): ?int + { + return $this->id; + } + + + + public function getMission(): ?Mission + { + return $this->mission; + } + + + + public function setMission(?Mission $mission): VolumeHoraireMission + { + $this->mission = $mission; + + return $this; + } + + + + public function getHeures(): float + { + return $this->heures; + } + + + + public function setHeures(float $heures): VolumeHoraireMission + { + $this->heures = $heures; + + return $this; + } + + + + public function isAutoValidation(): bool + { + return $this->autoValidation; + } + + + + public function setAutoValidation(bool $autoValidation): VolumeHoraireMission + { + $this->autoValidation = $autoValidation; + + return $this; + } + + + + public function getHoraireDebut(): ?\DateTime + { + return $this->horaireDebut; + } + + + + public function setHoraireDebut(?\DateTime $horaireDebut): VolumeHoraireMission + { + $this->horaireDebut = $horaireDebut; + + return $this; + } + + + + public function getHoraireFin(): ?\DateTime + { + return $this->horaireFin; + } + + + + public function setHoraireFin(?\DateTime $horaireFin): VolumeHoraireMission + { + $this->horaireFin = $horaireFin; + + return $this; + } + + + + public function isNocturne(): bool + { + return $this->nocturne; + } + + + + public function setNocturne(bool $nocturne): VolumeHoraireMission + { + $this->nocturne = $nocturne; + + return $this; + } + + + + /** + * @return Collection|Validation[] + */ + public function getValidations(): Collection + { + return $this->validations; + } + + + + public function addValidation(Validation $validation): self + { + $this->validations[] = $validation; + + return $this; + } + + + + public function removeValidation(Validation $validation): self + { + $this->validations->removeElement($validation); + + return $this; + } + + + + public function isValide(): bool + { + if ($this->isAutoValidation()) return true; + + if ($validations = $this->getValidations()) { + foreach ($validations as $validation) { + if ($validation->estNonHistorise()) return true; + } + } + + return false; + } + + + + public function getValidation(): ?Validation + { + if ($this->isAutoValidation()) { + return new Validation(); + } + + if ($validations = $this->getValidations()) { + foreach ($validations as $validation) { + if ($validation->estNonHistorise()) return $validation; + } + } + + return null; + } + + + + public function canValider(): bool + { + return !$this->isValide(); + } + + + + public function canDevalider(): bool + { + return $this->isValide() && !$this->getMission()->isValide(); + } + + + + public function canSupprimer(): bool + { + return !$this->isValide() && !$this->getMission()->isValide(); + } +} diff --git a/module/Mission/src/Form/MissionForm.php b/module/Mission/src/Form/MissionForm.php new file mode 100755 index 0000000000000000000000000000000000000000..24e2b904763d824276d3670a2002cea99ca0857c --- /dev/null +++ b/module/Mission/src/Form/MissionForm.php @@ -0,0 +1,51 @@ +<?php + +namespace Mission\Form; + +use Application\Entity\Db\Structure; +use Application\Form\AbstractForm; +use Application\Service\Traits\ContextServiceAwareTrait; +use Mission\Entity\Db\Mission; +use Paiement\Entity\Db\TauxRemu; +use Mission\Entity\Db\TypeMission; + + +/** + * Description of MissionForm + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionForm extends AbstractForm +{ + use ContextServiceAwareTrait; + + public function init() + { + $this->spec(Mission::class, ['intervenant', 'autoValidation']); + + $this->spec(['description' => ['type' => 'Textarea']]); + + $this->build(); + + $tmDql = "SELECT tm FROM " . TypeMission::class . " tm WHERE tm.histoDestruction IS NULL AND tm.annee = :annee"; + $tmDqlParams = ['annee' => $this->getServiceContext()->getAnnee()]; + $this->setValueOptions('typeMission', $tmDql, $tmDqlParams); + + $trDql = "SELECT mtr FROM " . TauxRemu::class . " mtr"; + $this->setValueOptions('tauxRemu', $trDql); + + $sDql = "SELECT s FROM " . Structure::class . " s WHERE s.histoDestruction IS NULL"; + $this->setValueOptions('structure', $sDql); + + $this->setLabels([ + 'structure' => 'Composante en charge du suivi de mission', + 'typeMission' => 'Type de mission', + 'tauxRemu' => 'Taux de rémunération', + 'dateDebut' => 'Date de début', + 'dateFin' => 'Date de fin', + 'description' => 'Descriptif de la mission', + ]); + + $this->addSubmit(); + } +} \ No newline at end of file diff --git a/module/Mission/src/Form/MissionFormAwareTrait.php b/module/Mission/src/Form/MissionFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..9cfbccf81fa0f2021e2f80240008bfacf94ca17f --- /dev/null +++ b/module/Mission/src/Form/MissionFormAwareTrait.php @@ -0,0 +1,39 @@ +<?php + +namespace Mission\Form; + + +/** + * Description of MissionFormAwareTrait + * + * @author UnicaenCode + */ +trait MissionFormAwareTrait +{ + protected ?MissionForm $formMission = null; + + + + /** + * @param MissionForm $formMission + * + * @return self + */ + public function setFormMission(?MissionForm $formMission) + { + $this->formMission = $formMission; + + return $this; + } + + + + public function getFormMission(): ?MissionForm + { + if (!empty($this->formMission)) { + return $this->formMission; + } + + return \Application::$container->get('FormElementManager')->get(MissionForm::class); + } +} \ No newline at end of file diff --git a/module/Mission/src/Form/MissionFormFactory.php b/module/Mission/src/Form/MissionFormFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..44e88740f5e800da91a49b7d976ed2abfc87efe0 --- /dev/null +++ b/module/Mission/src/Form/MissionFormFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace Mission\Form; + +use Psr\Container\ContainerInterface; + + + +/** + * Description of MissionFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MissionForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionForm + { + $form = new MissionForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} \ No newline at end of file diff --git a/module/Mission/src/Form/MissionTypeForm.php b/module/Mission/src/Form/MissionTypeForm.php new file mode 100644 index 0000000000000000000000000000000000000000..fc9d7e51fe7ee09fac438b28ac8ef6fa0e96a0d0 --- /dev/null +++ b/module/Mission/src/Form/MissionTypeForm.php @@ -0,0 +1,47 @@ +<?php + +namespace Mission\Form; + +use Application\Form\AbstractForm; +use Laminas\Form\FormInterface; +use Mission\Entity\Db\TypeMission; +use Paiement\Service\TauxRemuServiceAwareTrait; +use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; + +class MissionTypeForm extends AbstractForm +{ + use SchemaServiceAwareTrait; + use TauxRemuServiceAwareTrait; + + public function init() + { + $ignore = []; + $this->spec(TypeMission::class, $ignore); + $this->spec([ + 'tauxRemu' => [ + 'input' => [ + 'required' => false, + ], + ], + ]); + $this->build(); + $this->setValueOptions('tauxRemu', $this->getServiceTauxRemu()->getTauxRemusAnneeWithValeur()); + $this->get('tauxRemu')->setEmptyOption(""); + $this->get('tauxRemu')->setLabel('Taux par défaut'); + + $this->addSecurity(); + $this->addSubmit(); + + return $this; + } + + + + public function bind($object, $flags = FormInterface::VALUES_NORMALIZED) + { + /* @var $object TypeMission */ + parent::bind($object, $flags); + + return $this; + } +} diff --git a/module/Mission/src/Form/MissionTypeFormAwareTrait.php b/module/Mission/src/Form/MissionTypeFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..28a63b46bba9938c1ea05ad6753b60a536db4bbb --- /dev/null +++ b/module/Mission/src/Form/MissionTypeFormAwareTrait.php @@ -0,0 +1,40 @@ +<?php + +namespace Mission\Form; + + + +/** + * Description of TauxFormAwareTrait + * + * @author UnicaenCode + */ +trait MissionTypeFormAwareTrait +{ + protected ?MissionTypeForm $formMissionType = null; + + + + /** + * @param MissionTypeForm $formMissionType + * + * @return self + */ + public function setFormMissionType(?MissionTypeForm $formMissionType) + { + $this->formMissionType = $formMissionType; + + return $this; + } + + + + public function getFormMissionType(): ?MissionTypeForm + { + if (!empty($this->formMissionType)) { + return $this->formMissionType; + } + + return \Application::$container->get('FormElementManager')->get(MissionTypeForm::class); + } +} \ No newline at end of file diff --git a/module/Mission/src/Form/MissionTypeFormFactory.php b/module/Mission/src/Form/MissionTypeFormFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..f2d5d909ffdbd1456e4d3eab6a4553a05977f3f1 --- /dev/null +++ b/module/Mission/src/Form/MissionTypeFormFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace Mission\Form; + +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionTypeFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MissionTypeForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionTypeForm + { + $form = new MissionTypeForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} \ No newline at end of file diff --git a/module/Mission/src/Service/MissionService.php b/module/Mission/src/Service/MissionService.php new file mode 100755 index 0000000000000000000000000000000000000000..d1b1bdd9f7fce8c98ffa90cf24e5fbcbe51c3241 --- /dev/null +++ b/module/Mission/src/Service/MissionService.php @@ -0,0 +1,128 @@ +<?php + +namespace Mission\Service; + +use Application\Service\AbstractEntityService; +use Application\Service\Traits\SourceServiceAwareTrait; +use Mission\Entity\Db\Mission; +use Mission\Entity\Db\VolumeHoraireMission; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; + +/** + * Description of MissionService + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + * + * @method Mission get($id) + * @method Mission[] getList(\Doctrine\ORM\QueryBuilder $qb = null, $alias = null) + * @method Mission newEntity() + * + */ +class MissionService extends AbstractEntityService +{ + use TypeVolumeHoraireServiceAwareTrait; + use SourceServiceAwareTrait; + + /** + * Retourne la classe des entités + * + * @return string + * @throws \RuntimeException + */ + public function getEntityClass(): string + { + return Mission::class; + } + + + + /** + * Retourne l'alias d'entité courante + * + * @return string + */ + public function getAlias(): string + { + return 'm'; + } + + + + public function query(array $parameters) + { + $dql = " + SELECT + m, tm, str, tr, valid, vh, vvh, ctr + FROM + " . Mission::class . " m + JOIN m.typeMission tm + JOIN m.structure str + JOIN m.tauxRemu tr + JOIN " . TypeVolumeHoraire::class . " tvh WITH tvh.code = :typeVolumeHorairePrevu + LEFT JOIN m.validations valid WITH valid.histoDestruction IS NULL + LEFT JOIN m.volumesHoraires vh WITH vh.histoDestruction IS NULL AND vh.typeVolumeHoraire = tvh + LEFT JOIN vh.validations vvh WITH vvh.histoDestruction IS NULL + LEFT JOIN vh.contrat ctr WITH ctr.histoDestruction IS NULL + WHERE + m.histoDestruction IS NULL + " . dqlAndWhere([ + 'intervenant' => 'm.intervenant', + 'mission' => 'm', + ], $parameters) . " + ORDER BY + m.dateDebut, + vh.histoCreation + "; + + $parameters['typeVolumeHorairePrevu'] = TypeVolumeHoraire::CODE_PREVU; + + return $this->getEntityManager()->createQuery($dql)->setParameters($parameters); + } + + + + /** + * @param Mission $entity + * + * @return Mission + */ + public function save($entity) + { + foreach ($entity->getVolumesHoraires() as $vh) { + $this->saveVolumeHoraire($vh); + } + + parent::save($entity); + + return $entity; + } + + + + public function saveVolumeHoraire(VolumeHoraireMission $vhm): self + { + if (!$vhm->getTypeVolumeHoraire()) { + $vhm->setTypeVolumeHoraire($this->getServiceTypeVolumeHoraire()->getPrevu()); + } + if (!$vhm->getSource()) { + $vhm->setSource($this->getServiceSource()->getOse()); + } + + $this->getEntityManager()->persist($vhm); + $this->getEntityManager()->flush($vhm); + + return $this; + } + + + + public function deleteVolumeHoraire(VolumeHoraireMission $volumeHoraireMission): self + { + $volumeHoraireMission->historiser(); + $this->saveVolumeHoraire($volumeHoraireMission); + + return $this; + } + +} \ No newline at end of file diff --git a/module/Mission/src/Service/MissionServiceAwareTrait.php b/module/Mission/src/Service/MissionServiceAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..28f9776bcb9abf13cb6ee9c801500fcbf817c4aa --- /dev/null +++ b/module/Mission/src/Service/MissionServiceAwareTrait.php @@ -0,0 +1,39 @@ +<?php + +namespace Mission\Service; + + +/** + * Description of MissionServiceAwareTrait + * + * @author UnicaenCode + */ +trait MissionServiceAwareTrait +{ + protected ?MissionService $serviceMission = null; + + + + /** + * @param MissionService $serviceMission + * + * @return self + */ + public function setServiceMission(?MissionService $serviceMission) + { + $this->serviceMission = $serviceMission; + + return $this; + } + + + + public function getServiceMission(): ?MissionService + { + if (empty($this->serviceMission)) { + $this->serviceMission = \Application::$container->get(MissionService::class); + } + + return $this->serviceMission; + } +} \ No newline at end of file diff --git a/module/Mission/src/Service/MissionServiceFactory.php b/module/Mission/src/Service/MissionServiceFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..8e30b1ca84bfc86ce9d52a5cd32a761347f5c885 --- /dev/null +++ b/module/Mission/src/Service/MissionServiceFactory.php @@ -0,0 +1,34 @@ +<?php + +namespace Mission\Service; + +use Application\Constants; +use Psr\Container\ContainerInterface; + + + +/** + * Description of MissionServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class MissionServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MissionService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionService + { + $service = new MissionService; + $service->setEntityManager($container->get(Constants::BDD)); + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/Mission/src/Service/MissionTypeService.php b/module/Mission/src/Service/MissionTypeService.php new file mode 100644 index 0000000000000000000000000000000000000000..c45f039e645b055e5e6fc9abef0c67549362c46e --- /dev/null +++ b/module/Mission/src/Service/MissionTypeService.php @@ -0,0 +1,59 @@ +<?php + +namespace Mission\Service; + + +use Application\Service\AbstractEntityService; +use Mission\Entity\Db\TypeMission; +use UnicaenApp\Traits\SessionContainerTrait; + +/** + * Description of MissionTypeService + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class MissionTypeService extends AbstractEntityService +{ + use SessionContainerTrait; + + /** + * retourne la classe des entités + * + * @throws RuntimeException + */ + public function getEntityClass(): string + { + return TypeMission::class; + } + + + + /** + * Retourne l'alias d'entité courante + * + * @return string + */ + public function getAlias() + { + return 'MissionType'; + } + + + + /** + * @return TypeMission[] + */ + public function getTypes(): array + { + $dql = "SELECT tm FROM " . TypeMission::class." tm"; + $query = $this->getEntityManager()->createQuery($dql); + + return $query->getResult(); + } +} + + + + + +?> \ No newline at end of file diff --git a/module/Mission/src/Service/MissionTypeServiceAwareTrait.php b/module/Mission/src/Service/MissionTypeServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..9baa55d6fa8793fbf2e3350829fafc7a9061b1e9 --- /dev/null +++ b/module/Mission/src/Service/MissionTypeServiceAwareTrait.php @@ -0,0 +1,40 @@ +<?php + +namespace Mission\Service; + + +/** + * Description of MissionTypeServiceAwareTrait + * + * @author UnicaenCode + */ +trait MissionTypeServiceAwareTrait +{ + protected ?MissionTypeService $serviceMissionType = null; + + + + /** + * @param MissionTypeService $serviceMissionType + * + * @return self + */ + public function setServiceMissionType(?MissionTypeService $serviceMissionType) + { + $this->serviceMissionType = $serviceMissionType; + + return $this; + } + + + + public function getServiceMissionType(): ?MissionTypeService + { + if (empty($this->serviceMissionType)) { + $this->serviceMissionType = \Application::$container->get(MissionTypeService::class); + } + + return $this->serviceMissionType; + } +} + diff --git a/module/Mission/src/Service/MissionTypeServiceFactory.php b/module/Mission/src/Service/MissionTypeServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..ace3a46b90cba1fe9291f4f1b03f6e136877824e --- /dev/null +++ b/module/Mission/src/Service/MissionTypeServiceFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace Mission\Service; + +use Psr\Container\ContainerInterface; + + +/** + * Description of MissionTypeServiceFactory + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class MissionTypeServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param null $options + * + * @return MissionTypeService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): MissionTypeService + { + $service = new MissionTypeService; + + /* Injectez vos dépendances ICI */ + return $service; + } +} + diff --git a/module/Mission/template_map.php b/module/Mission/template_map.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/Mission/template_map.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Mission/view/mission/mission-type/index.phtml b/module/Mission/view/mission/mission-type/index.phtml new file mode 100644 index 0000000000000000000000000000000000000000..b94565df2a2526b0d83061840645957bbf509707 --- /dev/null +++ b/module/Mission/view/mission/mission-type/index.phtml @@ -0,0 +1,82 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + */ + +use Application\Provider\Privilege\Privileges; + +$this->headTitle()->append("Gestion des types de missions"); +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); +$canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::MISSION_EDITION_TYPE)); +$canSupprimer = $this->isAllowed(Privileges::getResourceId(Privileges::MISSION_SUPPRESSION_TYPE)); +?> +<h1 class="page-header">Gestion des types de missions</h1> + +<table class="table table-bordered table-sm"> + <thead> + <tr> + <th style="text-align: center">Libelle</th> + <th style="text-align: center">Code</th> + <th style="text-align: center">Type de rémunération</th> + <?php if ($canSupprimer || $canEdit): ?> + <th style="text-align: center">Action</th> + <?php endif; ?> + </tr> + </thead> + <tbody> + <?php foreach ($missionsType as $missionType) : ?> + + <tr> + <td style="text-align: center"><?php echo $missionType->getLibelle(); ?></td> + <td style="text-align: center"><?php echo $missionType->getCode() ?></td> + <td style="text-align: center"> + <?php if ($missionType->getTauxRemu()): + echo $missionType->getTauxRemu()->getLibelle(); + endif; ?></td> + <?php if ($canSupprimer || $canEdit): ?> + <td style="text-align: center"> + <?php if ($canEdit): ?> + <a class="ajax-modal " data-event="type-edition" + href="<?= $this->url("missions-type/saisir", ['typeMission' => $missionType->getId()]) ?>" + title="Modifier le type"> + <i class="fas fa-pen-to-square"></i> + </a> + <?php endif; ?> + <?php if ($canSupprimer): ?> + <a class="pop-ajax" data-event="type-suppression" data-content="Êtes-vous sur de vouloir supprimer" + data-confirm="true" + data-submit-reload="true" + href="<?= $this->url("missions-type/supprimer", ['typeMission' => $missionType->getId()]) ?>" + title="Supprimer le type"> + <i class="fas fa-trash-can"></i> + </a> + <?php endif; ?> + </td> + <?php endif; ?> + </tr> + <?php endforeach; ?> + </tbody> +</table> +<?php if ($canEdit): ?> + <div> + <a class="btn btn-primary ajax-modal " data-event="type-edition" + href="<?= $this->url("missions-type/saisir", []) ?>" + title="Ajouter un Type"> + <i class="fas fa-plus"></i> Ajouter un type + </a> + </div> +<?php endif; ?> + +<script type="text/javascript"> + $(function () { + $("body").on("type-edition", function (event, data) { + window.location.reload(); + }); + }); + + $(function () { + $("body").on("type-edition", function (event, data) { + window.location.reload(); + }); + }); +</script> \ No newline at end of file diff --git a/module/Application/view/application/type-formation/saisie-groupe.phtml b/module/Mission/view/mission/mission-type/saisir.phtml similarity index 100% rename from module/Application/view/application/type-formation/saisie-groupe.phtml rename to module/Mission/view/mission/mission-type/saisir.phtml diff --git a/module/Mission/view/mission/mission/index.phtml b/module/Mission/view/mission/mission/index.phtml new file mode 100644 index 0000000000000000000000000000000000000000..7422ed6b37042eb594164af503f61286c46b6a01 --- /dev/null +++ b/module/Mission/view/mission/mission/index.phtml @@ -0,0 +1,23 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + * @var $intervenant \Application\Entity\Db\Intervenant + * @var $canAddMission bool + */ + +use Application\Entity\Db\WfEtape; + +$title = 'Missions'; +$nextEtape = WfEtape::CODE_SERVICE_SAISIE; + +$this->intervenant($intervenant)->renderTitle($title); + +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); + +echo $this->vue('mission/liste', [ + 'intervenant' => $intervenant->getId(), + 'canAddMission' => $canAddMission, +]); + +echo '<br />'; +echo $this->feuilleDeRoute($intervenant)->renderNav($nextEtape); \ No newline at end of file diff --git a/module/Mission/view/mission/mission/saisie.phtml b/module/Mission/view/mission/mission/saisie.phtml new file mode 100644 index 0000000000000000000000000000000000000000..cd3576304f7a861794e386f787d072002604086a --- /dev/null +++ b/module/Mission/view/mission/mission/saisie.phtml @@ -0,0 +1,40 @@ +<?php + +/** + * @var $this \Application\View\Renderer\PhpRenderer + * @var $title string + * @var $form \Mission\Form\MissionForm + */ + +echo $this->tag('h1', ['class' => 'page-header'])->html($title); +echo $this->messenger()->addCurrentMessagesFromFlashMessengerWithNoNamespace(); +echo $this->form()->openTag($form); + +if ($form->has('structure')) { + echo $this->formControlGroup($form->get('structure')); +} +echo $this->formControlGroup($form->get('typeMission')); +echo '<div class="row">'; +echo '<div class="col-md-6">'; +echo $this->formControlGroup($form->get('dateDebut')); +echo '</div>'; +echo '<div class="col-md-6">'; +echo $this->formControlGroup($form->get('dateFin')); +echo '</div>'; +echo '</div>'; + +echo '<div class="row">'; +echo '<div class="col-md-6">'; +echo $this->formControlGroup($form->get('tauxRemu')); +echo '</div>'; +echo '<div class="col-md-6">'; +echo $this->formControlGroup($form->get('heures')); + +echo '</div>'; +echo '</div>'; + +echo $this->formControlGroup($form->get('description')); + +echo $this->formSubmit($form->get('submit')); + +echo $this->form()->closeTag(); \ No newline at end of file diff --git a/module/Mission/view/mission/mission/suivi.phtml b/module/Mission/view/mission/mission/suivi.phtml new file mode 100644 index 0000000000000000000000000000000000000000..0ddf2749536d1822fd6028a74af014d4a05ec2b8 --- /dev/null +++ b/module/Mission/view/mission/mission/suivi.phtml @@ -0,0 +1,21 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + * @var $intervenant \Application\Entity\Db\Intervenant + */ + +use Application\Entity\Db\WfEtape; + +$title = 'Suivi de missions'; +$nextEtape = WfEtape::CODE_SERVICE_SAISIE; + +$this->intervenant($intervenant)->renderTitle($title); + +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); + +echo $this->vue('mission/suivi', [ + 'intervenant' => $intervenant->getId(), +]); + +echo '<br />'; +echo $this->feuilleDeRoute($intervenant)->renderNav($nextEtape); \ No newline at end of file diff --git a/module/OffreFormation/Module.php b/module/OffreFormation/Module.php new file mode 100755 index 0000000000000000000000000000000000000000..016e8a40d2bae95725c8d7101e0afe069c112e6e --- /dev/null +++ b/module/OffreFormation/Module.php @@ -0,0 +1,22 @@ +<?php + +namespace OffreFormation; + +use Application\ConfigFactory; + +class Module +{ + + public function getConfig() + { + return ConfigFactory::configFromSimplified(__DIR__, __NAMESPACE__); + } + + + + public function getAutoloaderConfig() + { + return ConfigFactory::autoloaderConfig(__DIR__, __NAMESPACE__); + } + +} diff --git a/module/OffreFormation/autoload_classmap.php b/module/OffreFormation/autoload_classmap.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/OffreFormation/autoload_classmap.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/OffreFormation/config/module.config.php b/module/OffreFormation/config/module.config.php new file mode 100755 index 0000000000000000000000000000000000000000..86a00cac943ed1d0047f3fe1d9140e457d63e477 --- /dev/null +++ b/module/OffreFormation/config/module.config.php @@ -0,0 +1,660 @@ +<?php + +namespace OffreFormation; + +use Application\Provider\Privilege\Privileges; +use OffreFormation\Controller\DisciplineController; +use OffreFormation\Controller\ElementPedagogiqueController; +use OffreFormation\Controller\EtapeCentreCoutController; +use OffreFormation\Controller\EtapeController; +use OffreFormation\Controller\EtapeTauxRemuController; +use OffreFormation\Controller\ModulateurController; +use OffreFormation\Controller\OffreFormationController; +use OffreFormation\Controller\TypeFormationController; +use OffreFormation\Controller\TypeInterventionController; +use UnicaenAuth\Guard\PrivilegeController; + +return [ + 'routes' => [ + 'aof' => [ + 'route' => '/administration-offre', + 'controller' => OffreFormationController::class, + 'action' => 'administrationOffre', + 'may_terminate' => true, + 'child_routes' => [ + 'reconduction' => [ + 'route' => '/reconduction', + 'controller' => OffreFormationController::class, + 'action' => 'reconduction', + ], + 'reconduction-centre-cout' => [ + 'route' => '/reconduction-centre-cout', + 'controller' => OffreFormationController::class, + 'action' => 'reconductionCentreCout', + ], + 'reconduction-modulateur' => [ + 'route' => '/reconduction-modulateur', + 'controller' => OffreFormationController::class, + 'action' => 'reconductionModulateur', + ], + ], + ], + 'of' => [ + 'route' => '/offre-de-formation', + 'order' => 2, + 'controller' => OffreFormationController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'default' => [ + 'action' => 'index', + 'route' => '/:action[/:id]', + 'constraints' => [ + 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', + 'id' => '[0-9]*', + ], + ], + 'element' => [ + 'route' => '/element', + 'controller' => ElementPedagogiqueController::class, + 'may_terminate' => false, + 'child_routes' => [ + 'voir' => [ + 'route' => '/voir/:elementPedagogique', + 'constraints' => ['elementPedagogique' => '[0-9]*'], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'voir', + ], + 'ajouter' => [ + 'route' => '/ajouter', + 'controller' => ElementPedagogiqueController::class, + 'action' => 'saisir', + ], + 'modifier' => [ + 'route' => '/modifier/:elementPedagogique', + 'constraints' => ['elementPedagogique' => '[0-9]*'], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'saisir', + ], + 'supprimer' => [ + 'route' => '/supprimer/:elementPedagogique', + 'constraints' => ['elementPedagogique' => '[0-9]*'], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'supprimer', + ], + 'search' => [ + 'route' => '/search', + 'controller' => ElementPedagogiqueController::class, + 'action' => 'search', + ], + + 'get-periode' => [ + 'route' => '/get-periode/:elementPedagogique', + 'constraints' => ['elementPedagogique' => '[0-9]*'], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'getPeriode', + ], + 'volume-horaire' => [ + 'route' => '/volume-horaire/:elementPedagogique', + 'constraints' => [ + 'elementPedagogique' => '[0-9]*', + ], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'volume-horaire', + ], + 'synchronisation' => [ + 'route' => '/synchronisation/:elementPedagogique', + 'constraints' => [ + 'elementPedagogique' => '[0-9]*', + ], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'synchronisation', + ], + 'synchronisation-par-code' => [ + 'route' => '/synchronisation-par-code', + 'controller' => ElementPedagogiqueController::class, + 'action' => 'synchronisation-par-code', + ], + 'modulateurs-centres-couts-taux-remu' => [ + 'route' => '/modulateurs-centres-couts-taux-remu/:elementPedagogique', + 'constraints' => [ + 'elementPedagogique' => '[0-9]*', + ], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'modulateurs-centres-couts-taux-remu', + ], + 'modifier-modulateurs' => [ + 'route' => '/modulateurs/modifier/:elementPedagogique', + 'constraints' => [ + 'elementPedagogique' => '[0-9]*', + ], + 'controller' => ElementPedagogiqueController::class, + 'action' => 'modifier-modulateur', + ], + ], + ], + 'etape' => [ + 'route' => '/etape', + 'controller' => EtapeController::class, + 'may_terminate' => false, + 'child_routes' => [ + 'voir' => [ + 'route' => '/voir/:etape', + 'constraints' => ['etape' => '[0-9]*'], + 'controller' => EtapeController::class, + 'action' => 'voir', + ], + 'ajouter' => [ + 'route' => '/ajouter/:structure', + 'constraints' => ['structure' => '[0-9]*'], + 'controller' => EtapeController::class, + 'action' => 'saisir', + ], + 'restaurer' => [ + 'route' => '/restaurer/:etape', + 'constraints' => ['etape' => '[0-9]*'], + 'controller' => EtapeController::class, + 'action' => 'restaurer', + ], + + 'modifier' => [ + 'route' => '/modifier/:etape', + 'constraints' => ['etape' => '[0-9]*'], + 'controller' => EtapeController::class, + 'action' => 'saisir', + ], + 'supprimer' => [ + 'route' => '/supprimer/:etape', + 'constraints' => ['etape' => '[0-9]*'], + 'controller' => EtapeController::class, + 'action' => 'supprimer', + ], + 'modulateurs' => [ + 'route' => '/modulateurs/:etape', + 'constraints' => ['etape' => '[0-9]*'], + 'controller' => ModulateurController::class, + 'action' => 'saisir', + ], + 'centres-couts' => [ + 'route' => '/centres-couts/:etape', + 'constraints' => [ + 'etape' => '[0-9]*', + ], + 'controller' => EtapeCentreCoutController::class, + 'action' => 'saisir', + ], + 'taux-remus' => [ + 'route' => '/taux-remus/:etape', + 'constraints' => [ + 'etape' => '[0-9]*', + ], + 'controller' => EtapeTauxRemuController::class, + 'action' => 'saisir', + ], + 'taux-mixite' => [ + 'route' => '/taux-mixite/:etape', + 'constraints' => [ + 'etape' => '[0-9]*', + ], + 'controller' => EtapeController::class, + 'action' => 'taux-mixite', + ], + ], + ], + ], + ], + 'discipline' => [ + 'route' => '/discipline', + 'controller' => DisciplineController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'voir' => [ + 'route' => '/voir/:discipline', + 'constraints' => [ + 'discipline' => '[0-9]*', + ], + 'action' => 'voir', + ], + 'saisir' => [ + 'route' => '/saisir[/:discipline]', + 'constraints' => [ + 'discipline' => '[0-9]*', + ], + 'action' => 'saisir', + ], + 'supprimer' => [ + 'route' => '/supprimer/:discipline', + 'constraints' => [ + 'discipline' => '[0-9]*', + ], + 'action' => 'supprimer', + ], + ], + ], + 'type-intervention' => [ + 'route' => '/type-intervention', + 'controller' => TypeInterventionController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'saisie' => [ + 'route' => '/saisie[/:typeIntervention]', + 'constraints' => [ + 'typeIntervention' => '[0-9]*', + ], + 'action' => 'saisie', + ], + 'statut' => [ + 'route' => '/statut/:typeIntervention', + 'constraints' => [ + 'typeIntervention' => '[0-9]*', + ], + 'action' => 'statut', + ], + 'delete' => [ + 'route' => '/delete/:typeIntervention', + 'constraints' => [ + 'typeIntervention' => '[0-9]*', + ], + 'action' => 'delete', + ], + 'type-intervention-trier' => [ + 'route' => '/type-intervention-trier', + 'action' => 'type-intervention-trier', + ], + 'type-intervention-structure-saisie' => [ + 'route' => '/type-intervention-structure-saisie/:typeIntervention[/:typeInterventionStructure]', + 'constraints' => [ + 'typeIntervention' => '[0-9]*', + 'typeInterventionStructure' => '[0-9]*', + ], + 'action' => 'type-intervention-structure-saisie', + ], + 'type-intervention-structure-delete' => [ + 'route' => '/type-intervention-structure-delete/:typeInterventionStructure', + 'constraints' => [ + 'typeInterventionStructure' => '[0-9]*', + ], + 'action' => 'type-intervention-structure-delete', + ], + 'statut-saisie' => [ + 'route' => '/statut-saisie/:typeIntervention[/:typeInterventionStatut]', + 'constraints' => [ + 'typeIntervention' => '[0-9]*', + 'typeInterventionStatut' => '[0-9]*', + ], + 'action' => 'statut-saisie', + ], + 'statut-delete' => [ + 'route' => '/statut-delete/:typeIntervention/:typeInterventionStatut', + 'constraints' => [ + 'typeInterventionStatut' => '[0-9]*', + ], + 'action' => 'statut-delete', + ], + ], + ], + 'type-formation' => [ + 'route' => '/type-formation', + 'controller' => TypeFormationController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'saisie' => [ + 'route' => '/saisie[/:typeFormation][/:groupeTypeFormation]', + 'constraints' => [ + 'typeFormation' => '[0-9]*', + ], + 'action' => 'saisie', + ], + 'supprimer' => [ + 'route' => '/supprimer/:typeFormation', + 'constraints' => [ + 'typeFormation' => '[0-9]*', + ], + 'action' => 'supprimer', + ], + 'saisie-groupe' => [ + 'route' => '/saisie-groupe[/:groupeTypeFormation]', + 'constraints' => [ + 'groupeTypeFormation' => '[0-9]*', + ], + 'action' => 'saisieGroupe', + ], + 'supprimer-groupe' => [ + 'route' => '/supprimer-groupe/:groupeTypeFormation', + 'constraints' => [ + 'groupeTypeFormation' => '[0-9]*', + ], + 'action' => 'supprimerGroupe', + ], + 'trier' => [ + 'route' => '/trier/', + 'action' => 'trier', + ], + ], + ], + ], + + 'navigation' => [ + 'of' => [ + 'label' => 'Offre de formation', + 'title' => "Gestion de l'offre de formation", + 'route' => 'of', + 'order' => 2, + 'resource' => PrivilegeController::getResourceId(OffreFormationController::class, 'index'), + ], + 'administration' => [ + 'pages' => [ + 'odf' => [ + 'pages' => [ + 'reconduction-offre' => [ + 'label' => 'Reconduction de l\'offre de formation complémentaire', + 'title' => 'Reconduction de l\'offre de formation complémentaire', + 'route' => 'aof/reconduction', + 'order' => 20, + 'resource' => PrivilegeController::getResourceId(OffreFormationController::class, 'reconduction'), + ], + 'reconduction-centre-cout' => [ + 'label' => 'Reconduction des centres de coûts', + 'title' => 'Reconduction des centres de coûts de l\'offre de formation', + 'route' => 'aof/reconduction-centre-cout', + 'order' => 30, + 'resource' => PrivilegeController::getResourceId(OffreFormationController::class, 'reconductionCentreCout'), + ], + 'reconduction-modulateur' => [ + 'label' => 'Reconduction des modulateurs', + 'title' => 'Reconduction des modulateurs de l\'offre de formation', + 'route' => 'aof/reconduction-modulateur', + 'order' => 40, + 'resource' => PrivilegeController::getResourceId(OffreFormationController::class, 'reconductionModulateur'), + ], + 'discipline' => [ + 'color' => '#9F491F', + 'label' => "Types de disciplines", + 'title' => "Gestion des disciplines", + 'route' => 'discipline', + 'resource' => PrivilegeController::getResourceId(DisciplineController::class, 'index'), + 'order' => 50, + ], + 'type-formation' => [ + 'label' => 'Types de formations', + 'route' => 'type-formation', + 'resource' => PrivilegeController::getResourceId(TypeFormationController::class, 'index'), + 'order' => 60, + 'border - color' => '#111', + ], + 'type-intervention' => [ + 'label' => 'Types d\'interventions', + 'route' => 'type-intervention', + 'resource' => PrivilegeController::getResourceId(TypeInterventionController::class, 'index'), + 'order' => 70, + 'color' => '#71DFD7', + ], + ], + ], + ], + ], + ], + + 'guards' => [ + /* Global */ + [ + 'controller' => OffreFormationController::class, + 'action' => ['index', 'administrationOffre'], + 'privileges' => Privileges::ODF_VISUALISATION, + ], + [ + 'controller' => OffreFormationController::class, + 'action' => ['export'], + 'privileges' => Privileges::ODF_EXPORT_CSV, + ], + [ + 'controller' => OffreFormationController::class, + 'action' => ['reconduction'], + 'privileges' => Privileges::ODF_RECONDUCTION_OFFRE, + ], + [ + 'controller' => OffreFormationController::class, + 'action' => ['reconductionCentreCout'], + 'privileges' => Privileges::ODF_RECONDUCTION_CENTRE_COUT, + ], + [ + 'controller' => OffreFormationController::class, + 'action' => ['reconductionModulateur'], + 'privileges' => Privileges::ODF_RECONDUCTION_MODULATEUR, + ], + + /* Etapes */ + [ + 'controller' => EtapeController::class, + 'action' => ['voir', 'search'], + 'privileges' => Privileges::ODF_ETAPE_VISUALISATION, + ], + [ + 'controller' => EtapeController::class, + 'action' => ['restaurer', 'saisir', 'supprimer'], + 'privileges' => Privileges::ODF_ETAPE_EDITION, + ], + + /* Éléments pédagogiques */ + [ + 'controller' => ElementPedagogiqueController::class, + 'action' => ['voir'], // getPeriode est utilisé pour la saisie de service!!! + 'privileges' => Privileges::ODF_ELEMENT_VISUALISATION, + ], + [ + 'controller' => ElementPedagogiqueController::class, + 'action' => ['search', 'getPeriode'], // getPeriode est utilisé pour la saisie de service!!! + 'privileges' => [ + Privileges::ODF_ELEMENT_VISUALISATION, + Privileges::ENSEIGNEMENT_PREVU_EDITION, + Privileges::ENSEIGNEMENT_REALISE_EDITION, + ], + ], + [ + 'controller' => ElementPedagogiqueController::class, + 'action' => ['volume-horaire'], + 'privileges' => [ + Privileges::ODF_ELEMENT_VH_VISUALISATION, + Privileges::ODF_ELEMENT_VH_EDITION, + ], + + ], + [ + 'controller' => ElementPedagogiqueController::class, + 'action' => ['modulateurs-centres-couts-taux-remu'], + 'privileges' => [ + Privileges::ODF_CENTRES_COUT_EDITION, + Privileges::ODF_MODULATEURS_EDITION, + ], + + ], + [ + 'controller' => ElementPedagogiqueController::class, + 'action' => ['saisir', 'supprimer'], + 'privileges' => Privileges::ODF_ELEMENT_EDITION, + ], + [ + 'controller' => ElementPedagogiqueController::class, + 'action' => ['synchronisation', 'synchronisation-par-code'], + 'privileges' => Privileges::ODF_ELEMENT_SYNCHRONISATION, + ], + /* Modulateurs */ + [ + 'controller' => ModulateurController::class, + 'action' => ['saisir'], + 'privileges' => Privileges::ODF_MODULATEURS_EDITION, + ], + /* Centres de coûts */ + [ + 'controller' => EtapeCentreCoutController::class, + 'action' => ['saisir'], + 'privileges' => Privileges::ODF_CENTRES_COUT_EDITION, + ], + /* Taux de remus */ + [ + 'controller' => EtapeTauxRemuController::class, + 'action' => ['saisir'], + 'privileges' => Privileges::ODF_CENTRES_COUT_EDITION, + ], + /* Taux de mixité */ + [ + 'controller' => EtapeController::class, + 'action' => ['taux-mixite'], + 'privileges' => Privileges::ODF_TAUX_MIXITE_EDITION, + ], + + /* discipline */ + [ + 'controller' => DisciplineController::class, + 'action' => ['index'], + 'privileges' => [ + Privileges::DISCIPLINE_GESTION, + ], + ], + [ + 'controller' => DisciplineController::class, + 'action' => ['voir'], + 'privileges' => [ + Privileges::DISCIPLINE_VISUALISATION, + ], + ], + [ + 'controller' => DisciplineController::class, + 'action' => ['saisir', 'supprimer'], + 'privileges' => [ + Privileges::DISCIPLINE_EDITION, + ], + ], + + /* type d'intervention */ + [ + 'controller' => TypeInterventionController::class, + 'action' => ['index', 'statut'], + 'privileges' => [Privileges::TYPE_INTERVENTION_VISUALISATION], + ], + [ + 'controller' => TypeInterventionController::class, + 'action' => ['saisie', 'delete', 'type-intervention-structure-saisie', 'type-intervention-structure-delete', + 'type-intervention-trier', 'statut-saisie', 'statut-delete'], + 'privileges' => [Privileges::TYPE_INTERVENTION_EDITION], + ], + + /* type formation */ + [ + 'controller' => TypeFormationController::class, + 'action' => ['index'], + 'privileges' => [Privileges::ODF_TYPE_FORMATION_VISUALISATION], + ], + [ + 'controller' => TypeFormationController::class, + 'action' => ['saisie', 'supprimer', 'saisieGroupe', 'supprimerGroupe', "trier"], + 'privileges' => [Privileges::ODF_TYPE_FORMATION_EDITION], + ], + ], + + 'rules' => [ + [ + 'privileges' => Privileges::ODF_ELEMENT_EDITION, + 'resources' => ['ElementPedagogique', 'Structure'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + [ + 'privileges' => Privileges::ODF_ETAPE_EDITION, + 'resources' => ['Etape', 'Structure'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + [ + 'privileges' => Privileges::ODF_CENTRES_COUT_EDITION, + 'resources' => ['Etape', 'Structure', 'ElementPedagogique', 'CentreCoutEp'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + [ + 'privileges' => Privileges::ODF_MODULATEURS_EDITION, + 'resources' => ['Etape', 'Structure', 'ElementPedagogique', 'ElementModulateur'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + [ + 'privileges' => Privileges::ODF_TAUX_MIXITE_EDITION, + 'resources' => ['Etape', 'Structure', 'ElementPedagogique'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + [ + 'privileges' => Privileges::ODF_ELEMENT_VH_EDITION, + 'resources' => ['Etape', 'Structure', 'ElementPedagogique', 'VolumeHoraireEns', 'TypeIntervention'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + [ + 'privileges' => Privileges::ODF_ELEMENT_SYNCHRONISATION, + 'resources' => ['ElementPedagogique'], + 'assertion' => Assertion\OffreDeFormationAssertion::class, + ], + + ], + 'controllers' => [ + Controller\DisciplineController::class => Controller\Factory\DisciplineControllerFactory::class, + Controller\EtapeController::class => Controller\Factory\EtapeControllerFactory::class, + Controller\ModulateurController::class => Controller\Factory\ModulateurControllerFactory::class, + Controller\EtapeCentreCoutController::class => Controller\Factory\EtapeCentreCoutControllerFactory::class, + Controller\EtapeTauxRemuController::class => Controller\Factory\EtapeTauxRemuControllerFactory::class, + OffreFormationController::class => Controller\Factory\OffreFormationControllerFactory::class, + ElementPedagogiqueController::class => Controller\Factory\ElementPedagogiqueControllerFactory::class, + Controller\TypeInterventionController::class => Controller\Factory\TypeInterventionControllerFactory::class, + TypeFormationController::class => Controller\Factory\TypeFormationControllerFactory::class, + ], + 'services' => [ + Service\DisciplineService::class => Service\Factory\DisciplineServiceFactory::class, + Service\ElementPedagogiqueService::class => Service\Factory\ElementPedagogiqueServiceFactory::class, + Service\CheminPedagogiqueService::class => Service\Factory\CheminPedagogiqueServiceFactory::class, + Service\EtapeService::class => Service\Factory\EtapeServiceFactory::class, + Service\TypeFormationService::class => Service\Factory\TypeFormationServiceFactory::class, + Service\GroupeTypeFormationService::class => Service\Factory\GroupeTypeFormationServiceFactory::class, + Service\NiveauEtapeService::class => Service\Factory\NiveauEtapeServiceFactory::class, + Service\NiveauFormationService::class => Service\Factory\NiveauFormationServiceFactory::class, + Service\ElementModulateurService::class => Service\Factory\ElementModulateurServiceFactory::class, + Service\DomaineFonctionnelService::class => Service\Factory\DomaineFonctionnelServiceFactory::class, + Service\OffreFormationService::class => Service\Factory\OffreFormationServiceFactory::class, + Assertion\OffreDeFormationAssertion::class => \UnicaenAuth\Assertion\AssertionFactory::class, + Service\VolumeHoraireEnsService::class => Service\Factory\VolumeHoraireEnsServiceFactory::class, + Processus\ReconductionProcessus::class => Processus\Factory\ReconductionProcessusFactory::class, + Service\TypeInterventionStructureService::class => Service\Factory\TypeInterventionStructureServiceFactory::class, + Service\TypeInterventionStatutService::class => Service\Factory\TypeInterventionStatutServiceFactory::class, + ], + 'forms' => [ + Form\DisciplineForm::class => Form\Factory\DisciplineFormFactory::class, + Form\ElementPedagogiqueRechercheFieldset::class => Form\Factory\ElementPedagogiqueRechercheFieldsetFactory::class, + Form\EtapeSaisie::class => Form\Factory\EtapeSaisieFactory::class, + Form\ElementPedagogiqueSaisie::class => Form\Factory\ElementPedagogiqueSaisieFactory::class, + Form\ElementPedagogiqueSynchronisationForm::class => Form\Factory\ElementPedagogiqueSynchronisationFormFactory::class, + Form\EtapeModulateursSaisie::class => Form\Factory\EtapeModulateursSaisieFactory::class, + Form\ElementModulateursFieldset::class => Form\Factory\ElementModulateursFieldsetFactory::class, + Form\EtapeCentreCout\EtapeCentreCoutForm::class => Form\EtapeCentreCout\EtapeCentreCoutFormFactory::class, + Form\EtapeTauxRemu\EtapeTauxRemuForm::class => Form\EtapeTauxRemu\EtapeTauxRemuFormFactory::class, + Form\EtapeCentreCout\ElementCentreCoutFieldset::class => Form\EtapeCentreCout\ElementCentreCoutFieldsetFactory::class, + Form\EtapeTauxRemu\ElementTauxRemuFieldset::class => Form\EtapeTauxRemu\ElementTauxRemuFieldsetFactory::class, + Form\TauxMixite\TauxMixiteForm::class => Form\TauxMixite\TauxMixiteFormFactory::class, + Form\TauxMixite\TauxMixiteFieldset::class => Form\TauxMixite\TauxMixiteFieldsetFactory::class, + Form\TypeIntervention\TypeInterventionSaisieForm::class => Form\TypeIntervention\Factory\TypeInterventionSaisieFormFactory::class, + Form\TypeIntervention\TypeInterventionStructureSaisieForm::class => Form\TypeIntervention\Factory\TypeInterventionStructureSaisieFormFactory::class, + Form\TypeIntervention\TypeInterventionStatutSaisieForm::class => Form\TypeIntervention\Factory\TypeInterventionStatutSaisieFormFactory::class, + Form\TypeIntervention\TypeInterventionStatutDeleteForm::class => Form\TypeIntervention\Factory\TypeInterventionStatutDeleteFormFactory::class, + Form\TypeFormation\TypeFormationSaisieForm::class => Form\TypeFormation\TypeFormationSaisieFormFactory::class, + Form\GroupeTypeFormation\GroupeTypeFormationSaisieForm::class => Form\GroupeTypeFormation\GroupeTypeFormationSaisieFormFactory::class, + ], + 'view_helpers' => [ + 'etape' => View\Helper\Factory\EtapeViewHelperFactory::class, + 'etapeModulateursSaisieForm' => View\Helper\Factory\EtapeModulateursSaisieFormFactory::class, + 'elementModulateursSaisieFieldset' => View\Helper\Factory\ElementModulateursSaisieFieldsetFactory::class, + 'etapeCentreCoutForm' => View\Helper\Factory\EtapeCentreCoutFormViewHelperFactory::class, + 'etapeTauxRemuForm' => View\Helper\Factory\EtapeTauxRemuFormViewHelperFactory::class, + 'elementCentreCoutFieldset' => View\Helper\Factory\ElementCentreCoutFieldsetViewHelperFactory::class, + 'elementTauxRemuFieldset' => View\Helper\Factory\ElementTauxRemuFieldsetViewHelperFactory::class, + 'etapeTauxMixiteForm' => View\Helper\Factory\EtapeTauxMixiteFormViewHelperFactory::class, + 'elementTauxMixiteFieldset' => View\Helper\Factory\ElementTauxMixiteFieldsetViewHelperFactory::class, + 'fieldsetElementPedagogiqueRecherche' => View\Helper\Factory\FieldsetElementPedagogiqueRechercheFactory::class, + 'elementPedagogique' => View\Helper\Factory\ElementPedagogiqueViewHelperFactory::class, + 'typeInterventionAdmin' => View\Helper\Factory\TypeInterventionAdminViewHelperFactory::class, + ], +]; \ No newline at end of file diff --git a/module/Application/src/Assertion/OffreDeFormationAssertion.php b/module/OffreFormation/src/Assertion/OffreDeFormationAssertion.php similarity index 97% rename from module/Application/src/Assertion/OffreDeFormationAssertion.php rename to module/OffreFormation/src/Assertion/OffreDeFormationAssertion.php index 0d5ff5c8a1506870165a5daa1a3944566431b123..16568fb433b8a5acfdad8a0000447359e52f8d54 100755 --- a/module/Application/src/Assertion/OffreDeFormationAssertion.php +++ b/module/OffreFormation/src/Assertion/OffreDeFormationAssertion.php @@ -1,22 +1,22 @@ <?php -namespace Application\Assertion; +namespace OffreFormation\Assertion; +use Application\Acl\Role; use Application\Entity\Db\Annee; -use Application\Entity\Db\TypeIntervention; -use Application\Entity\Db\VolumeHoraireEns; +use Application\Entity\Db\Structure; use Application\Provider\Privilege\Privileges; -use Application\Entity\Db\CentreCoutEp; -use Application\Entity\Db\ElementModulateur; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; -use UnicaenImport\Entity\Db\Source; -use Application\Entity\Db\Structure; -use UnicaenAuth\Assertion\AbstractAssertion; -use Application\Acl\Role; use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\CentreCoutEp; +use OffreFormation\Entity\Db\ElementModulateur; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\VolumeHoraireEns; +use UnicaenAuth\Assertion\AbstractAssertion; +use UnicaenImport\Entity\Db\Source; /** @@ -269,7 +269,6 @@ class OffreDeFormationAssertion extends AbstractAssertion if ($annee->getId() < $anneeMinimaleImportOdf) { return true; } - return !$source->getImportable(); } } \ No newline at end of file diff --git a/module/Application/src/Controller/DisciplineController.php b/module/OffreFormation/src/Controller/DisciplineController.php similarity index 91% rename from module/Application/src/Controller/DisciplineController.php rename to module/OffreFormation/src/Controller/DisciplineController.php index a3a5ab94baa67ed09fb2e19ba55ebd949ae59c36..111a1fa07d47a64ddf295c8ba5d92a4b1f7d1646 100755 --- a/module/Application/src/Controller/DisciplineController.php +++ b/module/OffreFormation/src/Controller/DisciplineController.php @@ -1,12 +1,13 @@ <?php -namespace Application\Controller; +namespace OffreFormation\Controller; -use Application\Entity\Db\Discipline; -use Application\Form\Traits\DisciplineFormAwareTrait; -use Application\Service\Traits\DisciplineServiceAwareTrait; +use Application\Controller\AbstractController; +use OffreFormation\Form\Traits\DisciplineFormAwareTrait; use Application\Service\Traits\ParametresServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; +use OffreFormation\Entity\Db\Discipline; +use OffreFormation\Service\Traits\DisciplineServiceAwareTrait; /** diff --git a/module/Application/src/Controller/OffreFormation/ElementPedagogiqueController.php b/module/OffreFormation/src/Controller/ElementPedagogiqueController.php similarity index 77% rename from module/Application/src/Controller/OffreFormation/ElementPedagogiqueController.php rename to module/OffreFormation/src/Controller/ElementPedagogiqueController.php index 436718ddc5421e97265959514a7ed44ab001d5be..ea461d4f68557d905c39385d1175aa3029e124d9 100755 --- a/module/Application/src/Controller/OffreFormation/ElementPedagogiqueController.php +++ b/module/OffreFormation/src/Controller/ElementPedagogiqueController.php @@ -1,21 +1,22 @@ <?php -namespace Application\Controller\OffreFormation; +namespace OffreFormation\Controller; use Application\Controller\AbstractController; -use Application\Entity\Db\ElementPedagogique; use Application\Filter\FloatFromString; -use Application\Form\OffreFormation\Traits\ElementModulateurCentreCoutFormAwareTrait; -use Application\Form\OffreFormation\Traits\ElementPedagogiqueSaisieAwareTrait; -use Application\Form\OffreFormation\Traits\ElementPedagogiqueSynchronisationFormAwareTrait; -use Application\Form\OffreFormation\Traits\VolumeHoraireEnsFormAwareTrait; use Application\Provider\Privilege\Privileges; use Application\Service\Traits\CentreCoutEpServiceAwareTrait; -use Application\Service\Traits\ElementModulateurServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\VolumeHoraireEnsServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Form\Traits\ElementModulateurCentreCoutTauxRemuFormAwareTrait; +use OffreFormation\Form\Traits\ElementPedagogiqueSaisieAwareTrait; +use OffreFormation\Form\Traits\ElementPedagogiqueSynchronisationFormAwareTrait; +use OffreFormation\Form\Traits\VolumeHoraireEnsFormAwareTrait; +use OffreFormation\Service\Traits\ElementModulateurServiceAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\VolumeHoraireEnsServiceAwareTrait; +use Paiement\Service\TauxRemuServiceAwareTrait; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; /** @@ -29,18 +30,18 @@ class ElementPedagogiqueController extends AbstractController use ElementPedagogiqueSaisieAwareTrait; use VolumeHoraireEnsFormAwareTrait; use VolumeHoraireEnsServiceAwareTrait; - use ElementModulateurCentreCoutFormAwareTrait; + use ElementModulateurCentreCoutTauxRemuFormAwareTrait; use ElementModulateurServiceAwareTrait; use CentreCoutEpServiceAwareTrait; use ElementPedagogiqueSynchronisationFormAwareTrait; use StructureServiceAwareTrait; use SchemaServiceAwareTrait; - + use TauxRemuServiceAwareTrait; public function voirAction() { $this->em()->getFilters()->enable('historique')->init([ - \Application\Entity\Db\CheminPedagogique::class, + \OffreFormation\Entity\Db\CheminPedagogique::class, \Enseignement\Entity\Db\VolumeHoraire::class, ]); $element = $this->getEvent()->getParam('elementPedagogique'); @@ -120,8 +121,8 @@ class ElementPedagogiqueController extends AbstractController public function searchAction() { $this->em()->getFilters()->enable('annee')->init([ - \Application\Entity\Db\ElementPedagogique::class, - \Application\Entity\Db\Etape::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\Etape::class, ]); $structure = $this->context()->structureFromQuery(); @@ -173,16 +174,34 @@ class ElementPedagogiqueController extends AbstractController $item['LIBELLE_ETAPE'] = 'Enseignement commun à plusieurs parcours'; } + + //TODO : verif sur has_type_intervention --> changer title and mettre bg-danger-light --> créer nouvelle regle CSS rouge claire $extra = ''; - if (!$niveau) { - $extra .= sprintf('<span class="niveau" title="%s">%s</span>', "Niveau", $item['LIBELLE_GTF'] . $item['NIVEAU']); - } - if (!$etape) { - $extra .= sprintf('<span class="etape" title="%s">%s</span>', "Formation", $item['LIBELLE_ETAPE']); + $template = ''; + if($item['HAS_TYPE_INTERVENTION'] == 1){ + if (!$niveau) { + $extra .= sprintf('<span class="niveau" title="%s">%s</span>', "Niveau", $item['LIBELLE_GTF'] . $item['NIVEAU']); + } + if (!$etape) { + $extra .= sprintf('<span class="etape" title="%s">%s</span>', "Formation", $item['LIBELLE_ETAPE']); + } + $extra .= "Année" !== $item['LIBELLE_PE'] ? sprintf('<span class="periode" title="%s">%s</span>', "Période", $item['LIBELLE_PE']) : null; + $template = sprintf('<span class="extra">{extra}</span><span class="element" title="%s">{label}</span>', "Enseignement"); + + }else{ + $SaisieImpossible = "Saisie impossible sur cet élément pédagogique : aucun type d'intervention associé"; + if (!$niveau) { + $extra .= sprintf('<span class="niveau" title="%s">%s</span>', $SaisieImpossible, $item['LIBELLE_GTF'] . $item['NIVEAU']); + } + if (!$etape) { + $extra .= sprintf('<span class="etape" title="%s">%s</span>', $SaisieImpossible, $item['LIBELLE_ETAPE']); + } + $extra .= "Année" !== $item['LIBELLE_PE'] ? sprintf('<span class="periode" title="%s">%s</span>', $SaisieImpossible, $item['LIBELLE_PE']) : null; + $template = sprintf('<span class="extra danger-light">{extra}</span><span class="element danger-light" title="%s">{label}</span>', $SaisieImpossible); } - $extra .= "Année" !== $item['LIBELLE_PE'] ? sprintf('<span class="periode" title="%s">%s</span>', "Période", $item['LIBELLE_PE']) : null; - $template = sprintf('<span class="extra">{extra}</span><span class="element" title="%s">{label}</span>', "Enseignement"); + + $result[] = [ 'id' => $item['ID'], 'label' => $item['CODE'] . ' ' . $item['LIBELLE'], @@ -218,7 +237,7 @@ class ElementPedagogiqueController extends AbstractController public function volumeHoraireAction() { $this->em()->getFilters()->enable('historique')->init([ - \Enseignement\Entity\Db\VolumeHoraireEns::class, + \OffreFormation\Entity\Db\VolumeHoraireEns::class, ]); $title = 'Volumes horaires'; @@ -277,16 +296,16 @@ class ElementPedagogiqueController extends AbstractController - public function modulateursCentresCoutsAction() + public function modulateursCentresCoutsTauxRemuAction() { $this->em()->getFilters()->enable('historique')->init([ - \Application\Entity\Db\ElementModulateur::class, + \OffreFormation\Entity\Db\ElementModulateur::class, \Application\Entity\Db\CentreCout::class, - \Application\Entity\Db\CentreCoutEp::class, + \OffreFormation\Entity\Db\CentreCoutEp::class, ]); $element = $this->getEvent()->getParam('elementPedagogique'); - $form = $this->getFormOffreFormationElementModulateurCentreCout(); + $form = $this->getFormElementModulateurCentreCoutTauxRemu(); //Traitement retour formulaire $request = $this->getRequest(); if ($request->isPost()) { @@ -304,10 +323,14 @@ class ElementPedagogiqueController extends AbstractController 'fc' => $datasPost['fc'], ]; $element = $this->getServiceCentreCoutEp()->addElementCentreCout($element, $centreCouts); + //Taux de remuneration + $tauxRemu = $datasPost['tauxRemu']; + + $this->getServiceElementPedagogique()->updateTauxRemu($element, $this->getServiceTauxRemu()->get($tauxRemu)); } $form->setElementPedagogique($element); - $form->setAttribute('action', $this->url()->fromRoute('of/element/modulateurs-centres-couts', ['elementPedagogique' => $element->getId()])); + $form->setAttribute('action', $this->url()->fromRoute('of/element/modulateurs-centres-couts-taux-remu', ['elementPedagogique' => $element->getId()])); $form->buildElements(); return [ diff --git a/module/Application/src/Controller/OffreFormation/EtapeCentreCoutController.php b/module/OffreFormation/src/Controller/EtapeCentreCoutController.php similarity index 76% rename from module/Application/src/Controller/OffreFormation/EtapeCentreCoutController.php rename to module/OffreFormation/src/Controller/EtapeCentreCoutController.php index bf66f1cb1959032f050f77de96a0e96a957794e3..9d0919d7814fb765e401746ce82f1eb8aa1613ac 100755 --- a/module/Application/src/Controller/OffreFormation/EtapeCentreCoutController.php +++ b/module/OffreFormation/src/Controller/EtapeCentreCoutController.php @@ -1,13 +1,12 @@ <?php -namespace Application\Controller\OffreFormation; +namespace OffreFormation\Controller; use Application\Controller\AbstractController; -use Application\Entity\Db\Etape; -use Application\Form\OffreFormation\EtapeCentreCout\Traits\EtapeCentreCoutFormAwareTrait; -use RuntimeException; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Form\EtapeCentreCout\Traits\EtapeCentreCoutFormAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; /** * @@ -23,18 +22,18 @@ class EtapeCentreCoutController extends AbstractController /** * - * @return type + * @return array * @throws RuntimeException */ protected function saisirAction() { $this->em()->getFilters()->enable('historique')->init([ - \Application\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, \Application\Entity\Db\CentreCout::class, - \Application\Entity\Db\CentreCoutEp::class + \OffreFormation\Entity\Db\CentreCoutEp::class ]); $this->em()->getFilters()->enable('annee')->init([ - \Application\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, ]); $etape = $this->getEvent()->getParam('etape'); diff --git a/module/Application/src/Controller/OffreFormation/EtapeController.php b/module/OffreFormation/src/Controller/EtapeController.php similarity index 86% rename from module/Application/src/Controller/OffreFormation/EtapeController.php rename to module/OffreFormation/src/Controller/EtapeController.php index fbb955b8bcb4cad4453e07df9b0b16b10403c5c7..c641b79a943d70a87474e86e9bd569830dd98945 100755 --- a/module/Application/src/Controller/OffreFormation/EtapeController.php +++ b/module/OffreFormation/src/Controller/EtapeController.php @@ -1,21 +1,21 @@ <?php -namespace Application\Controller\OffreFormation; +namespace OffreFormation\Controller; use Application\Controller\AbstractController; -use Application\Entity\Db\CheminPedagogique; use Application\Entity\Db\DomaineFonctionnel; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeFormation; -use Application\Form\OffreFormation\TauxMixite\Traits\TauxMixiteFormAwareTrait; -use Application\Form\OffreFormation\Traits\EtapeSaisieAwareTrait; -use Application\Service\Traits\CheminPedagogiqueServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; -use Application\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Form\TauxMixite\Traits\TauxMixiteFormAwareTrait; +use OffreFormation\Form\Traits\EtapeSaisieAwareTrait; +use OffreFormation\Service\Traits\CheminPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Entity\Db\CheminPedagogique; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeFormation; /** * Description of EtapeController @@ -128,10 +128,10 @@ class EtapeController extends AbstractController public function tauxMixiteAction() { $this->em()->getFilters()->enable('historique')->init([ - \Application\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, ]); $this->em()->getFilters()->enable('annee')->init([ - \Application\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, ]); $etape = $this->getEvent()->getParam('etape'); diff --git a/module/OffreFormation/src/Controller/EtapeTauxRemuController.php b/module/OffreFormation/src/Controller/EtapeTauxRemuController.php new file mode 100755 index 0000000000000000000000000000000000000000..bcebf962f29eac42b3d36d5ef38b6ce956aea594 --- /dev/null +++ b/module/OffreFormation/src/Controller/EtapeTauxRemuController.php @@ -0,0 +1,61 @@ +<?php + +namespace OffreFormation\Controller; + +use Application\Controller\AbstractController; +use Application\Service\Traits\ContextServiceAwareTrait; +use OffreFormation\Form\EtapeTauxRemu\EtapeTauxRemuFormAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Entity\Db\Etape; + +/** + * + * + */ +class EtapeTauxRemuController extends AbstractController +{ + use ElementPedagogiqueServiceAwareTrait; + use ContextServiceAwareTrait; + use EtapeTauxRemuFormAwareTrait; + + + + /** + * + * @return array + * @throws RuntimeException + */ + protected function saisirAction() + { + $this->em()->getFilters()->enable('historique')->init([ + \OffreFormation\Entity\Db\ElementPedagogique::class, + \Paiement\Entity\Db\TauxRemu::class, + ]); + $this->em()->getFilters()->enable('annee')->init([ + \OffreFormation\Entity\Db\ElementPedagogique::class, + ]); + + $etape = $this->getEvent()->getParam('etape'); + /* @var $etape Etape */ + $form = $this->getFormEtapeTauxRemuEtapeTauxRemu(); + $errors = []; + + $form->setAttribute('action', $this->url()->fromRoute(null, [], [], true)); + $form->bind($etape); + + $request = $this->getRequest(); + if ($request->isPost()) { + $form->setData($request->getPost()); + if ($form->isValid()) { + $this->em()->flush(); + $form->bind($etape); // on re-binde pour forcer la MAJ + } else { + $errors[] = 'La validation du formulaire a échoué. L\'enregistrement des données n\'a donc pas été fait.'; + } + } + $title = "Paramétrage des taux de rémunérations <br /><small>$etape</small>"; + + return compact('etape', 'title', 'form', 'errors'); + } + +} \ No newline at end of file diff --git a/module/OffreFormation/src/Controller/Factory/DisciplineControllerFactory.php b/module/OffreFormation/src/Controller/Factory/DisciplineControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..b77d461c7739cc13f942be1c8b6e300652097ee5 --- /dev/null +++ b/module/OffreFormation/src/Controller/Factory/DisciplineControllerFactory.php @@ -0,0 +1,34 @@ +<?php + + +namespace OffreFormation\Controller\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Controller\DisciplineController; + + +/** + * Description of DisciplineControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class DisciplineControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DisciplineController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DisciplineController + { + $controller = new DisciplineController; + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} + diff --git a/module/Application/src/Controller/OffreFormation/Factory/ElementPedagogiqueControllerFactory.php b/module/OffreFormation/src/Controller/Factory/ElementPedagogiqueControllerFactory.php similarity index 82% rename from module/Application/src/Controller/OffreFormation/Factory/ElementPedagogiqueControllerFactory.php rename to module/OffreFormation/src/Controller/Factory/ElementPedagogiqueControllerFactory.php index 8956a993cd76ff6f8ba56aa2b3196f449c058557..11d18e47b94d8a3927cbc4c084a3c8b882b1689e 100755 --- a/module/Application/src/Controller/OffreFormation/Factory/ElementPedagogiqueControllerFactory.php +++ b/module/OffreFormation/src/Controller/Factory/ElementPedagogiqueControllerFactory.php @@ -1,8 +1,8 @@ <?php -namespace Application\Controller\OffreFormation\Factory; +namespace OffreFormation\Controller\Factory; -use Application\Controller\OffreFormation\ElementPedagogiqueController; +use OffreFormation\Controller\ElementPedagogiqueController; use Psr\Container\ContainerInterface; use UnicaenImport\Service\SchemaService; diff --git a/module/OffreFormation/src/Controller/Factory/EtapeCentreCoutControllerFactory.php b/module/OffreFormation/src/Controller/Factory/EtapeCentreCoutControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..25a8dc158dc0051fecacc02ee3c5cf4e6d216c1c --- /dev/null +++ b/module/OffreFormation/src/Controller/Factory/EtapeCentreCoutControllerFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Controller\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Controller\EtapeCentreCoutController; + + +/** + * Description of EtapeCentreCoutControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeCentreCoutControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeCentreCoutController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeCentreCoutController + { + $controller = new EtapeCentreCoutController; + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} + diff --git a/module/OffreFormation/src/Controller/Factory/EtapeControllerFactory.php b/module/OffreFormation/src/Controller/Factory/EtapeControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..76c4ab8d2a168884f5b3eb7d3760fbb238013a3c --- /dev/null +++ b/module/OffreFormation/src/Controller/Factory/EtapeControllerFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Controller\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Controller\EtapeController; + + +/** + * Description of EtapeControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeController + { + $controller = new EtapeController; + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} + diff --git a/module/OffreFormation/src/Controller/Factory/EtapeTauxRemuControllerFactory.php b/module/OffreFormation/src/Controller/Factory/EtapeTauxRemuControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..f935b971917eb3211e785ef1babc8fedf27830b7 --- /dev/null +++ b/module/OffreFormation/src/Controller/Factory/EtapeTauxRemuControllerFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Controller\Factory; + +use OffreFormation\Controller\EtapeTauxRemuController; +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeTauxRemuControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeTauxRemuControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeTauxRemuController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeTauxRemuController + { + $controller = new EtapeTauxRemuController(); + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} + diff --git a/module/OffreFormation/src/Controller/Factory/ModulateurControllerFactory.php b/module/OffreFormation/src/Controller/Factory/ModulateurControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..7859a23abe2c4fef878ec6dbaacc93fb06264d7e --- /dev/null +++ b/module/OffreFormation/src/Controller/Factory/ModulateurControllerFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Controller\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Controller\ModulateurController; + + +/** + * Description of ModulateurControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ModulateurControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ModulateurController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ModulateurController + { + $controller = new ModulateurController; + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} + diff --git a/module/Application/src/Controller/Factory/OffreFormationControllerFactory.php b/module/OffreFormation/src/Controller/Factory/OffreFormationControllerFactory.php similarity index 86% rename from module/Application/src/Controller/Factory/OffreFormationControllerFactory.php rename to module/OffreFormation/src/Controller/Factory/OffreFormationControllerFactory.php index 629b61d80254ec9d50bda375f64124aa53d4951b..71b92cd50877e384670ead50a15345d0963bb5fd 100644 --- a/module/Application/src/Controller/Factory/OffreFormationControllerFactory.php +++ b/module/OffreFormation/src/Controller/Factory/OffreFormationControllerFactory.php @@ -2,10 +2,9 @@ /* * @author JORIOT Florian <florian.joriot at unicaen.fr> */ +namespace OffreFormation\Controller\Factory; -namespace Application\Controller\Factory; - -use Application\Controller\OffreFormationController; +use OffreFormation\Controller\OffreFormationController; use Psr\Container\ContainerInterface; use UnicaenImport\Service\SchemaService; diff --git a/module/Application/src/Controller/Factory/TypeFormationControllerFactory.php b/module/OffreFormation/src/Controller/Factory/TypeFormationControllerFactory.php similarity index 84% rename from module/Application/src/Controller/Factory/TypeFormationControllerFactory.php rename to module/OffreFormation/src/Controller/Factory/TypeFormationControllerFactory.php index 0d25ea542d23fe0a751351c57b07ce03b20bd846..04fd2982ee70547b0cbaae0bee09d685345eb749 100644 --- a/module/Application/src/Controller/Factory/TypeFormationControllerFactory.php +++ b/module/OffreFormation/src/Controller/Factory/TypeFormationControllerFactory.php @@ -3,9 +3,9 @@ * @author JORIOT Florian <florian.joriot at unicaen.fr> */ -namespace Application\Controller\Factory; +namespace OffreFormation\Controller\Factory; -use Application\Controller\TypeFormationController; +use OffreFormation\Controller\TypeFormationController; use Psr\Container\ContainerInterface; class TypeFormationControllerFactory diff --git a/module/OffreFormation/src/Controller/Factory/TypeInterventionControllerFactory.php b/module/OffreFormation/src/Controller/Factory/TypeInterventionControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..b7d14e0da7fb63833481ec05e40c475b1cd174e0 --- /dev/null +++ b/module/OffreFormation/src/Controller/Factory/TypeInterventionControllerFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Controller\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Controller\TypeInterventionController; + + +/** + * Description of TypeInterventionControllerFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionController + { + $controller = new TypeInterventionController; + + /* Injectez vos dépendances ICI */ + + return $controller; + } +} + diff --git a/module/Application/src/Controller/OffreFormation/ModulateurController.php b/module/OffreFormation/src/Controller/ModulateurController.php similarity index 81% rename from module/Application/src/Controller/OffreFormation/ModulateurController.php rename to module/OffreFormation/src/Controller/ModulateurController.php index 14bed47d0fe8f2611586cad03e941c436e660d32..ad69c961ac6cb18ed8e052ec739cd1fddc4d2e1d 100755 --- a/module/Application/src/Controller/OffreFormation/ModulateurController.php +++ b/module/OffreFormation/src/Controller/ModulateurController.php @@ -1,10 +1,10 @@ <?php -namespace Application\Controller\OffreFormation; +namespace OffreFormation\Controller; use Application\Controller\AbstractController; -use Application\Form\OffreFormation\Traits\EtapeModulateursSaisieAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Form\Traits\EtapeModulateursSaisieAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; /** * Description of ModulateurController @@ -21,14 +21,14 @@ class ModulateurController extends AbstractController protected function saisirAction() { $this->em()->getFilters()->enable('historique')->init([ - \Application\Entity\Db\ElementModulateur::class, + \OffreFormation\Entity\Db\ElementModulateur::class, ]); $this->em()->getFilters()->enable('annee')->init([ - \Application\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, ]); $etape = $this->getEvent()->getParam('etape'); - /* @var $etape \Application\Entity\Db\Etape */ + /* @var $etape \OffreFormation\Entity\Db\Etape */ if (!$etape) { throw new \RuntimeException('La formation n\'a pas été spécifiée ou bien elle est invalide.'); diff --git a/module/Application/src/Controller/OffreFormationController.php b/module/OffreFormation/src/Controller/OffreFormationController.php similarity index 94% rename from module/Application/src/Controller/OffreFormationController.php rename to module/OffreFormation/src/Controller/OffreFormationController.php index e8893aa5d9b5dcec4ecdac4eaebf7a4992745ed4..d8366371468d7a39f621b9e305cb6fded84b16af 100755 --- a/module/Application/src/Controller/OffreFormationController.php +++ b/module/OffreFormation/src/Controller/OffreFormationController.php @@ -1,23 +1,22 @@ <?php +namespace OffreFormation\Controller; -namespace Application\Controller; - -use Application\Entity\Db\CheminPedagogique; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; -use Application\Entity\Db\GroupeTypeFormation; -use Application\Entity\Db\TypeFormation; use Application\Entity\Db\TypeModulateur; -use Application\Entity\Db\VolumeHoraireEns; -use Application\Processus\Traits\ReconductionProcessusAwareTrait; use Application\Service\Traits\AnneeServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; -use Application\Service\Traits\NiveauEtapeServiceAwareTrait; -use Application\Service\Traits\OffreFormationServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; +use OffreFormation\Processus\Traits\ReconductionProcessusAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Service\Traits\OffreFormationServiceAwareTrait; +use OffreFormation\Entity\Db\CheminPedagogique; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\GroupeTypeFormation; +use OffreFormation\Entity\Db\TypeFormation; +use OffreFormation\Entity\Db\VolumeHoraireEns; use UnicaenApp\View\Model\CsvModel; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; @@ -27,7 +26,7 @@ use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; * * */ -class OffreFormationController extends AbstractController +class OffreFormationController extends \Application\Controller\AbstractController { use ContextServiceAwareTrait; use LocalContextServiceAwareTrait; @@ -380,6 +379,7 @@ class OffreFormationController extends AbstractController $structure = $this->context()->structureFromQuery() ?: $this->getServiceContext()->getStructure(); $niveau = $this->context()->niveauFromQuery(); $etape = $this->context()->etapeFromQuery(); + if ($etape) $etape = $this->getServiceEtape()->get($etape); // entité Niveau if ($niveau) $niveau = $this->getServiceNiveauEtape()->get($niveau); // entité Niveau return [$structure, $niveau, $etape]; diff --git a/module/Application/src/Controller/TypeFormationController.php b/module/OffreFormation/src/Controller/TypeFormationController.php similarity index 79% rename from module/Application/src/Controller/TypeFormationController.php rename to module/OffreFormation/src/Controller/TypeFormationController.php index 1ee775f5bb340a05f391c080bb477771f906530f..7bbb50c304335fb0c01ab18385097d9741d001f4 100644 --- a/module/Application/src/Controller/TypeFormationController.php +++ b/module/OffreFormation/src/Controller/TypeFormationController.php @@ -3,15 +3,16 @@ * @author JORIOT Florian <florian.joriot at unicaen.fr> */ -namespace Application\Controller; +namespace OffreFormation\Controller; -use Application\Entity\Db\GroupeTypeFormation; -use Application\Entity\Db\TypeFormation; -use Application\Form\GroupeTypeFormation\Traits\GroupeTypeFormationSaisieFormAwareTrait; -use Application\Form\TypeFormation\Traits\TypeFormationSaisieFormAwareTrait; -use Application\Service\Traits\GroupeTypeFormationServiceAwareTrait; -use Application\Service\Traits\TypeFormationServiceAwareTrait; +use Application\Controller\AbstractController; +use OffreFormation\Entity\Db\GroupeTypeFormation; +use OffreFormation\Entity\Db\TypeFormation; +use OffreFormation\Form\GroupeTypeFormation\Traits\GroupeTypeFormationSaisieFormAwareTrait; +use OffreFormation\Form\TypeFormation\Traits\TypeFormationSaisieFormAwareTrait; +use OffreFormation\Service\Traits\GroupeTypeFormationServiceAwareTrait; +use OffreFormation\Service\Traits\TypeFormationServiceAwareTrait; use UnicaenApp\Service\EntityManagerAwareTrait; use UnicaenApp\View\Model\MessengerViewModel; @@ -54,19 +55,23 @@ class TypeFormationController extends AbstractController GroupeTypeFormation::class, ]); - $typeFormations = $this->getEvent()->getParam('typeFormation'); + $typeFormation = $this->getEvent()->getParam('typeFormation'); + $form = $this->getFormTypeFormationTypeFormationSaisie(); - if (empty($typeFormations)) { + if (empty($typeFormation)) { $title = "Création d'un nouveau type de formation"; - $typeFormations = $this->getServiceTypeFormation()->newEntity(); + /** @var TypeFormation $typeFormation */ + $typeFormation = $this->getServiceTypeFormation()->newEntity(); + $groupeTypeFormation = $this->getEvent()->getParam('groupeTypeFormation'); + $typeFormation->setGroupe($groupeTypeFormation); } else { $title = "Édition d'un type de formation"; } - $form->bindRequestSave($typeFormations, $this->getRequest(), function () use ($typeFormations, $form) { + $form->bindRequestSave($typeFormation, $this->getRequest(), function () use ($typeFormation, $form) { - $this->getServiceTypeFormation()->save($typeFormations); + $this->getServiceTypeFormation()->save($typeFormation); $this->flashMessenger()->addSuccessMessage( "Ajout réussi" ); diff --git a/module/Application/src/Controller/TypeInterventionController.php b/module/OffreFormation/src/Controller/TypeInterventionController.php similarity index 88% rename from module/Application/src/Controller/TypeInterventionController.php rename to module/OffreFormation/src/Controller/TypeInterventionController.php index 817e3b828112b60702ccb081c3132036ded44b38..60514cdc02d023524d5e89307c24ea495928b660 100755 --- a/module/Application/src/Controller/TypeInterventionController.php +++ b/module/OffreFormation/src/Controller/TypeInterventionController.php @@ -1,19 +1,20 @@ <?php -namespace Application\Controller; +namespace OffreFormation\Controller; +use Application\Controller\AbstractController; use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeInterventionStatut; -use Application\Service\Traits\TypeInterventionStructureServiceAwareTrait; -use Application\Service\Traits\TypeInterventionStatutServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Application\Entity\Db\TypeIntervention; -use Application\Entity\Db\TypeInterventionStructure; -use Application\Form\TypeIntervention\Traits\TypeInterventionSaisieFormAwareTrait; -use Application\Form\TypeIntervention\Traits\TypeInterventionStructureSaisieFormAwareTrait; -use Application\Form\TypeIntervention\Traits\TypeInterventionStatutSaisieFormAwareTrait; -use UnicaenApp\View\Model\MessengerViewModel; use Application\Service\Traits\ContextServiceAwareTrait; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\TypeInterventionStatut; +use OffreFormation\Entity\Db\TypeInterventionStructure; +use OffreFormation\Form\TypeIntervention\Traits\TypeInterventionSaisieFormAwareTrait; +use OffreFormation\Form\TypeIntervention\Traits\TypeInterventionStatutSaisieFormAwareTrait; +use OffreFormation\Form\TypeIntervention\Traits\TypeInterventionStructureSaisieFormAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionStatutServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionStructureServiceAwareTrait; +use UnicaenApp\View\Model\MessengerViewModel; class TypeInterventionController extends AbstractController { @@ -31,6 +32,7 @@ class TypeInterventionController extends AbstractController $this->em()->getFilters()->enable('historique')->init([ TypeIntervention::class, TypeInterventionStructure::class, + TypeInterventionStatut::class, ]); $annee = $this->getServiceContext()->getAnnee(); @@ -50,10 +52,14 @@ class TypeInterventionController extends AbstractController public function statutAction() { + $this->em()->getFilters()->enable('historique')->init([ + TypeInterventionStatut::class, + ]); + /** @var TypeIntervention $typeIntervention */ $typeIntervention = $typeIntervention = $this->getEvent()->getParam('typeIntervention'); $typeInterventionStatuts = $typeIntervention->getTypeInterventionStatut($this->getServiceContext()->getAnnee()); - $title = "Statuts spécifique pour " . $typeIntervention; + $title = "Taux spécifiques par statuts pour " . $typeIntervention; return compact('typeIntervention', 'typeInterventionStatuts', 'title'); } @@ -108,8 +114,8 @@ class TypeInterventionController extends AbstractController public function typeInterventionStructureSaisieAction() { - /* @var $typeInterventionStructure TypeInterventionStructure - * @var $typeIntervention TypeIntervention + /* @var TypeInterventionStructure $typeInterventionStructure + * @var TypeIntervention $typeIntervention */ $this->em()->getFilters()->enable('historique')->init([ diff --git a/module/Application/src/Entity/Db/CentreCoutEp.php b/module/OffreFormation/src/Entity/Db/CentreCoutEp.php similarity index 76% rename from module/Application/src/Entity/Db/CentreCoutEp.php rename to module/OffreFormation/src/Entity/Db/CentreCoutEp.php index 3fc7fadfe44f5c201e661c1a1986d83b2ef28f27..857d3f75ef5a30af9a79f7a818d0d8c59670aaa5 100755 --- a/module/Application/src/Entity/Db/CentreCoutEp.php +++ b/module/OffreFormation/src/Entity/Db/CentreCoutEp.php @@ -1,12 +1,13 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; +use Application\Entity\Db\TypeHeuresEp; +use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * CentreCoutEp @@ -22,12 +23,12 @@ class CentreCoutEp implements HistoriqueAwareInterface, ResourceInterface, Impor private $id; /** - * @var \Application\Entity\Db\ElementPedagogique + * @var \OffreFormation\Entity\Db\ElementPedagogique */ private $elementPedagogique; /** - * @var \Application\Entity\Db\TypeHeures + * @var \OffreFormation\Entity\Db\TypeHeures */ private $typeHeures; @@ -53,11 +54,11 @@ class CentreCoutEp implements HistoriqueAwareInterface, ResourceInterface, Impor /** * Set elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique * * @return CentreCoutEp */ - public function setElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique = null) + public function setElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique = null) { $this->elementPedagogique = $elementPedagogique; @@ -69,7 +70,7 @@ class CentreCoutEp implements HistoriqueAwareInterface, ResourceInterface, Impor /** * Get elementPedagogique * - * @return \Application\Entity\Db\ElementPedagogique + * @return \OffreFormation\Entity\Db\ElementPedagogique */ public function getElementPedagogique() { @@ -81,11 +82,11 @@ class CentreCoutEp implements HistoriqueAwareInterface, ResourceInterface, Impor /** * Set typeHeures * - * @param \Application\Entity\Db\TypeHeures $typeHeures + * @param \OffreFormation\Entity\Db\TypeHeures $typeHeures * * @return TypeHeuresEp */ - public function setTypeHeures(\Application\Entity\Db\TypeHeures $typeHeures = null) + public function setTypeHeures(\OffreFormation\Entity\Db\TypeHeures $typeHeures = null) { $this->typeHeures = $typeHeures; @@ -97,7 +98,7 @@ class CentreCoutEp implements HistoriqueAwareInterface, ResourceInterface, Impor /** * Get typeHeures * - * @return \Application\Entity\Db\TypeHeures + * @return \OffreFormation\Entity\Db\TypeHeures */ public function getTypeHeures() { diff --git a/module/Application/src/Entity/Db/CheminPedagogique.php b/module/OffreFormation/src/Entity/Db/CheminPedagogique.php similarity index 74% rename from module/Application/src/Entity/Db/CheminPedagogique.php rename to module/OffreFormation/src/Entity/Db/CheminPedagogique.php index fd55355136d4fa47780136912d03dc83c73dc209..df445e1e20f6b751152653d7ef3ed3db4e45c537 100755 --- a/module/Application/src/Entity/Db/CheminPedagogique.php +++ b/module/OffreFormation/src/Entity/Db/CheminPedagogique.php @@ -1,6 +1,6 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; @@ -26,12 +26,12 @@ class CheminPedagogique implements HistoriqueAwareInterface, ImportAwareInterfac protected $id; /** - * @var \Application\Entity\Db\ElementPedagogique + * @var \OffreFormation\Entity\Db\ElementPedagogique */ protected $elementPedagogique; /** - * @var \Application\Entity\Db\Etape + * @var \OffreFormation\Entity\Db\Etape */ protected $etape; @@ -80,11 +80,11 @@ class CheminPedagogique implements HistoriqueAwareInterface, ImportAwareInterfac /** * Set elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique * * @return CheminPedagogique */ - public function setElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique = null) + public function setElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique = null) { $this->elementPedagogique = $elementPedagogique; @@ -96,7 +96,7 @@ class CheminPedagogique implements HistoriqueAwareInterface, ImportAwareInterfac /** * Get elementPedagogique * - * @return \Application\Entity\Db\ElementPedagogique + * @return \OffreFormation\Entity\Db\ElementPedagogique */ public function getElementPedagogique() { @@ -108,11 +108,11 @@ class CheminPedagogique implements HistoriqueAwareInterface, ImportAwareInterfac /** * Set etape * - * @param \Application\Entity\Db\Etape $etape + * @param \OffreFormation\Entity\Db\Etape $etape * * @return CheminPedagogique */ - public function setEtape(\Application\Entity\Db\Etape $etape = null) + public function setEtape(\OffreFormation\Entity\Db\Etape $etape = null) { $this->etape = $etape; @@ -124,7 +124,7 @@ class CheminPedagogique implements HistoriqueAwareInterface, ImportAwareInterfac /** * Get etape * - * @return \Application\Entity\Db\Etape + * @return \OffreFormation\Entity\Db\Etape */ public function getEtape() { diff --git a/module/Application/src/Entity/Db/Discipline.php b/module/OffreFormation/src/Entity/Db/Discipline.php similarity index 98% rename from module/Application/src/Entity/Db/Discipline.php rename to module/OffreFormation/src/Entity/Db/Discipline.php index 58f561f67760e452220d86714daa938f5695cab9..429eb4e2d26e28f440edaafd26889c6605e782ef 100755 --- a/module/Application/src/Entity/Db/Discipline.php +++ b/module/OffreFormation/src/Entity/Db/Discipline.php @@ -1,6 +1,6 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; diff --git a/module/Application/src/Entity/Db/Effectifs.php b/module/OffreFormation/src/Entity/Db/Effectifs.php similarity index 85% rename from module/Application/src/Entity/Db/Effectifs.php rename to module/OffreFormation/src/Entity/Db/Effectifs.php index a389df155b159b219d864154f99c53f990ee0ccf..c531e50dc66d47f41e93217a6405a6cb020f8fbb 100755 --- a/module/Application/src/Entity/Db/Effectifs.php +++ b/module/OffreFormation/src/Entity/Db/Effectifs.php @@ -1,6 +1,6 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; @@ -36,7 +36,7 @@ class Effectifs implements HistoriqueAwareInterface, ImportAwareInterface private $id; /** - * @var \Application\Entity\Db\ElementPedagogique + * @var \OffreFormation\Entity\Db\ElementPedagogique */ private $elementPedagogique; @@ -141,11 +141,11 @@ class Effectifs implements HistoriqueAwareInterface, ImportAwareInterface /** * Set elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique * * @return Effectifs */ - public function setElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique = null) + public function setElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique = null) { $this->elementPedagogique = $elementPedagogique; @@ -157,7 +157,7 @@ class Effectifs implements HistoriqueAwareInterface, ImportAwareInterface /** * Get elementPedagogique * - * @return \Application\Entity\Db\ElementPedagogique + * @return \OffreFormation\Entity\Db\ElementPedagogique */ public function getElementPedagogique() { diff --git a/module/Application/src/Entity/Db/ElementModulateur.php b/module/OffreFormation/src/Entity/Db/ElementModulateur.php similarity index 86% rename from module/Application/src/Entity/Db/ElementModulateur.php rename to module/OffreFormation/src/Entity/Db/ElementModulateur.php index eda5f15a949b725b2bdec6fa5a843f2572bbf5ff..7261c93ac476a5c64d751b465503d7c6457c3a39 100755 --- a/module/Application/src/Entity/Db/ElementModulateur.php +++ b/module/OffreFormation/src/Entity/Db/ElementModulateur.php @@ -1,10 +1,10 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; +use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * ElementModulateur @@ -24,7 +24,7 @@ class ElementModulateur implements HistoriqueAwareInterface, ResourceInterface protected $modulateur; /** - * @var \Application\Entity\Db\ElementPedagogique + * @var \OffreFormation\Entity\Db\ElementPedagogique */ protected $element; @@ -99,11 +99,11 @@ class ElementModulateur implements HistoriqueAwareInterface, ResourceInterface /** * Set element * - * @param \Application\Entity\Db\ElementPedagogique $element + * @param \OffreFormation\Entity\Db\ElementPedagogique $element * * @return ElementModulateur */ - public function setElement(\Application\Entity\Db\ElementPedagogique $element = null) + public function setElement(\OffreFormation\Entity\Db\ElementPedagogique $element = null) { $this->element = $element; @@ -115,7 +115,7 @@ class ElementModulateur implements HistoriqueAwareInterface, ResourceInterface /** * Get element * - * @return \Application\Entity\Db\ElementPedagogique + * @return \OffreFormation\Entity\Db\ElementPedagogique */ public function getElement() { diff --git a/module/Application/src/Entity/Db/ElementPedagogique.php b/module/OffreFormation/src/Entity/Db/ElementPedagogique.php similarity index 86% rename from module/Application/src/Entity/Db/ElementPedagogique.php rename to module/OffreFormation/src/Entity/Db/ElementPedagogique.php index 51302b22a0652de61d3a03e1b46432f629ee4909..56be1b05634a5ec3edb80a9c2495986a06e4f9e2 100755 --- a/module/Application/src/Entity/Db/ElementPedagogique.php +++ b/module/OffreFormation/src/Entity/Db/ElementPedagogique.php @@ -1,21 +1,22 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; use Application\Entity\Db\Traits\AnneeAwareTrait; -use Application\Entity\Db\Traits\DisciplineAwareTrait; -use Application\Entity\Db\Traits\EtapeAwareTrait; use Application\Entity\Db\Traits\PeriodeAwareTrait; -use Application\Entity\Db\Traits\SourceAwareTrait; use Application\Entity\Db\Traits\StructureAwareTrait; -use Doctrine\Persistence\Mapping\ClassMetadata; +use Enseignement\Entity\Db\Service; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\Traits\DisciplineAwareTrait; +use OffreFormation\Entity\Db\Traits\EtapeAwareTrait; +use Paiement\Entity\Db\TauxRemu; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenApp\Service\EntityManagerAwareInterface; use UnicaenApp\Service\EntityManagerAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; +use function count; /** @@ -139,10 +140,12 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, /** * @var \Doctrine\Common\Collections\Collection */ - private $centreCoutEp; + private $centreCoutEp; + + protected $tauxRemuEp = null; /** - * @var \Application\Entity\Db\Effectifs + * @var \OffreFormation\Entity\Db\Effectifs */ private $effectifs = false; @@ -169,7 +172,7 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, if (($chemins = $this->getCheminPedagogique())) { foreach ($this->getCheminPedagogique() as $cp) { - /* @var $cp \Application\Entity\Db\CheminPedagogique */ + /* @var $cp \OffreFormation\Entity\Db\CheminPedagogique */ if (!$principaleIncluse && $etapePrincipale === $cp->getEtape()) { continue; } @@ -261,6 +264,30 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, + /** + * Set un taux de rémunération + * + * @param TauxRemu|null $tauxRemuEp + */ + public function setTauxRemuEp(?TauxRemu $tauxRemuEp) + { + $this->tauxRemuEp = $tauxRemuEp; + } + + + + /** + * Get centreCout + * + * @return TauxRemu|null + */ + public function getTauxRemuEp(): ?TauxRemu + { + return $this->tauxRemuEp; + } + + + /** * Set tauxFoad * @@ -506,11 +533,11 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, /** * Add cheminPedagogique * - * @param \Application\Entity\Db\CheminPedagogique $cheminPedagogique + * @param \OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique * * @return Etape */ - public function addCheminPedagogique(\Application\Entity\Db\CheminPedagogique $cheminPedagogique) + public function addCheminPedagogique(\OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique) { $this->cheminPedagogique[] = $cheminPedagogique; @@ -522,9 +549,9 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, /** * Remove cheminPedagogique * - * @param \Application\Entity\Db\CheminPedagogique $cheminPedagogique + * @param \OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique */ - public function removeCheminPedagogique(\Application\Entity\Db\CheminPedagogique $cheminPedagogique) + public function removeCheminPedagogique(\OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique) { $this->cheminPedagogique->removeElement($cheminPedagogique); } @@ -702,11 +729,11 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, /** * Add centreCoutEp * - * @param \Application\Entity\Db\CentreCoutEp $centreCoutEp + * @param \OffreFormation\Entity\Db\CentreCoutEp $centreCoutEp * * @return CentreCoutEp */ - public function addCentreCoutEp(\Application\Entity\Db\CentreCoutEp $centreCoutEp) + public function addCentreCoutEp(\OffreFormation\Entity\Db\CentreCoutEp $centreCoutEp) { $this->centreCoutEp[] = $centreCoutEp; @@ -718,23 +745,50 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, /** * Remove centreCoutEp * - * @param \Application\Entity\Db\CentreCoutEp $centreCoutEp + * @param \OffreFormation\Entity\Db\CentreCoutEp $centreCoutEp */ - public function removeCentreCoutEp(\Application\Entity\Db\CentreCoutEp $centreCoutEp) + public function removeCentreCoutEp(\OffreFormation\Entity\Db\CentreCoutEp $centreCoutEp) { $this->centreCoutEp->removeElement($centreCoutEp); } + /** + * Add centreCoutEp + * + * @param \Paiement\Entity\Db\TauxRemu $tauxRemuEp + * + * @return ElementPedagogique + */ + public function addTauxRemuEp(\Paiement\Entity\Db\TauxRemu $tauxRemuEp) + { + $this->tauxRemuEp[] = $tauxRemuEp; + + return $this; + } + + + + /** + * Remove centreCoutEp + * + * @param \Paiement\Entity\Db\TauxRemu $tauxRemuEp + */ + public function removeTauxRemuEp(\Paiement\Entity\Db\TauxRemu $tauxRemuEp) + { + $this->tauxRemuEp->removeElement($tauxRemuEp); + } + + /** * Get centreCoutEp * - * @param \Application\Entity\Db\TypeHeures $th Eventuel seul type d'heures à prendre en compte + * @param \OffreFormation\Entity\Db\TypeHeures $th Eventuel seul type d'heures à prendre en compte * * @return \Doctrine\Common\Collections\Collection */ - public function getCentreCoutEp(TypeHeures $th = null) + public function getCentreCoutEp(TypeHeures $th = null): \Doctrine\Common\Collections\Collection { if (!$th) { return $this->centreCoutEp; @@ -760,7 +814,7 @@ class ElementPedagogique implements HistoriqueAwareInterface, ResourceInterface, /** * Get effectifs * - * @return \Application\Entity\Db\Effectifs + * @return \OffreFormation\Entity\Db\Effectifs */ public function getEffectifs() { diff --git a/module/Application/src/Entity/Db/ElementTauxRegimes.php b/module/OffreFormation/src/Entity/Db/ElementTauxRegimes.php similarity index 94% rename from module/Application/src/Entity/Db/ElementTauxRegimes.php rename to module/OffreFormation/src/Entity/Db/ElementTauxRegimes.php index f4d8881fae475197f7029682318c8a94b4e2c85c..792677b31b7cf0d46e3ab1f987f2769497b3097c 100755 --- a/module/Application/src/Entity/Db/ElementTauxRegimes.php +++ b/module/OffreFormation/src/Entity/Db/ElementTauxRegimes.php @@ -1,9 +1,9 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use Application\Entity\Db\Traits\SourceAwareTrait; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; diff --git a/module/Application/src/Entity/Db/Etape.php b/module/OffreFormation/src/Entity/Db/Etape.php similarity index 86% rename from module/Application/src/Entity/Db/Etape.php rename to module/OffreFormation/src/Entity/Db/Etape.php index d369b480ffc803f651e00ddc0942db0ddba885ac..515390ec5bb64d81dea38aa62f893732d52189f9 100755 --- a/module/Application/src/Entity/Db/Etape.php +++ b/module/OffreFormation/src/Entity/Db/Etape.php @@ -1,13 +1,13 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; use Application\Entity\Db\Traits\AnneeAwareTrait; +use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * Etape @@ -89,7 +89,7 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI protected $structure; /** - * @var \Application\Entity\Db\TypeFormation + * @var \OffreFormation\Entity\Db\TypeFormation */ protected $typeFormation; @@ -238,11 +238,11 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI /** * Add elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique * * @return Etape */ - public function addElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique) + public function addElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique) { $this->elementPedagogique[] = $elementPedagogique; @@ -254,9 +254,9 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI /** * Remove elementPedagogique * - * @param \Application\Entity\Db\ElementPedagogique $elementPedagogique + * @param \OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique */ - public function removeElementPedagogique(\Application\Entity\Db\ElementPedagogique $elementPedagogique) + public function removeElementPedagogique(\OffreFormation\Entity\Db\ElementPedagogique $elementPedagogique) { $this->elementPedagogique->removeElement($elementPedagogique); } @@ -278,11 +278,11 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI /** * Add cheminPedagogique * - * @param \Application\Entity\Db\CheminPedagogique $cheminPedagogique + * @param \OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique * * @return Etape */ - public function addCheminPedagogique(\Application\Entity\Db\CheminPedagogique $cheminPedagogique) + public function addCheminPedagogique(\OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique) { $this->cheminPedagogique[] = $cheminPedagogique; @@ -294,9 +294,9 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI /** * Remove cheminPedagogique * - * @param \Application\Entity\Db\CheminPedagogique $cheminPedagogique + * @param \OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique */ - public function removeCheminPedagogique(\Application\Entity\Db\CheminPedagogique $cheminPedagogique) + public function removeCheminPedagogique(\OffreFormation\Entity\Db\CheminPedagogique $cheminPedagogique) { $this->cheminPedagogique->removeElement($cheminPedagogique); } @@ -347,11 +347,11 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI /** * Set typeFormation * - * @param \Application\Entity\Db\TypeFormation $typeFormation + * @param \OffreFormation\Entity\Db\TypeFormation $typeFormation * * @return Etape */ - public function setTypeFormation(\Application\Entity\Db\TypeFormation $typeFormation = null) + public function setTypeFormation(\OffreFormation\Entity\Db\TypeFormation $typeFormation = null) { $this->typeFormation = $typeFormation; @@ -363,7 +363,7 @@ class Etape implements HistoriqueAwareInterface, ResourceInterface, ImportAwareI /** * Get typeFormation * - * @return \Application\Entity\Db\TypeFormation + * @return \OffreFormation\Entity\Db\TypeFormation */ public function getTypeFormation() { diff --git a/module/Application/src/Entity/Db/GroupeTypeFormation.php b/module/OffreFormation/src/Entity/Db/GroupeTypeFormation.php similarity index 98% rename from module/Application/src/Entity/Db/GroupeTypeFormation.php rename to module/OffreFormation/src/Entity/Db/GroupeTypeFormation.php index 0bd9fa9d72691cffec324df9ff0fb9194111ddad..434bafc4a5fba21bb84b2316bcdea83f8ca9669b 100755 --- a/module/Application/src/Entity/Db/GroupeTypeFormation.php +++ b/module/OffreFormation/src/Entity/Db/GroupeTypeFormation.php @@ -1,6 +1,6 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCoutEp.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.CentreCoutEp.dcm.xml similarity index 90% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCoutEp.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.CentreCoutEp.dcm.xml index 046e4c1690784f36d26c6f490a67fc9af9e67f4c..e0ca7241d3028086eeb3d7965fe162887717ee56 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CentreCoutEp.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.CentreCoutEp.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\CentreCoutEp" table="CENTRE_COUT_EP"> + <entity name="OffreFormation\Entity\Db\CentreCoutEp" table="CENTRE_COUT_EP"> <indexes> <index name="IDX_46E23E60F08DA511" columns="CENTRE_COUT_ID"/> <index name="IDX_46E23E608AB4A516" columns="ELEMENT_PEDAGOGIQUE_ID"/> @@ -36,12 +36,12 @@ <join-column name="SOURCE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-columns> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="typeHeures" target-entity="Application\Entity\Db\TypeHeures"> + <many-to-one field="typeHeures" target-entity="OffreFormation\Entity\Db\TypeHeures"> <join-columns> <join-column name="TYPE_HEURES_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CheminPedagogique.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.CheminPedagogique.dcm.xml similarity index 89% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CheminPedagogique.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.CheminPedagogique.dcm.xml index 953532a0e9ab5c172cd188c3165bd98e83796abb..5624aac7f57337fcf9dff1737ef16a33524c552c 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.CheminPedagogique.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.CheminPedagogique.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\CheminPedagogique" table="CHEMIN_PEDAGOGIQUE"> + <entity name="OffreFormation\Entity\Db\CheminPedagogique" table="CHEMIN_PEDAGOGIQUE"> <indexes> <index name="IDX_B1F283FEB4F27801" columns="ETAPE_ID"/> <index name="IDX_B1F283FE59860CDC" columns="HISTO_CREATEUR_ID"/> @@ -26,7 +26,7 @@ <join-column name="SOURCE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique" inversed-by="cheminPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique" inversed-by="cheminPedagogique"> <join-columns> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </join-columns> @@ -47,7 +47,7 @@ </join-columns> </many-to-one> <!-- NB inversed-by ajouté à la main --> - <many-to-one field="etape" target-entity="Application\Entity\Db\Etape" inversed-by="cheminPedagogique"> + <many-to-one field="etape" target-entity="OffreFormation\Entity\Db\Etape" inversed-by="cheminPedagogique"> <join-columns> <join-column name="ETAPE_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Discipline.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Discipline.dcm.xml similarity index 97% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Discipline.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Discipline.dcm.xml index 239150768219124b874e4baddb35ae33e1cb76f2..bd4d985cbe17798516f814647b0bd236b74f5bfc 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Discipline.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Discipline.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\Discipline" table="DISCIPLINE"> + <entity name="OffreFormation\Entity\Db\Discipline" table="DISCIPLINE"> <indexes> <index name="IDX_7E21F30059860CDC" columns="HISTO_CREATEUR_ID"/> <index name="IDX_7E21F3007E9E2204" columns="HISTO_DESTRUCTEUR_ID"/> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Effectifs.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Effectifs.dcm.xml similarity index 95% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Effectifs.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Effectifs.dcm.xml index fa7c55868b4716f3e18f78b2f4f0dd7f74127eb2..a4cce60912d7404d4ed72976dee3c4be3de5465f 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Effectifs.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Effectifs.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\Effectifs" table="EFFECTIFS"> + <entity name="OffreFormation\Entity\Db\Effectifs" table="EFFECTIFS"> <indexes> <index name="effectifs_element_fk_idx" columns="ELEMENT_PEDAGOGIQUE_ID"/> <index name="effectifs_fk" columns="ANNEE_ID"/> @@ -64,7 +64,7 @@ <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-columns> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementModulateur.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementModulateur.dcm.xml similarity index 92% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementModulateur.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementModulateur.dcm.xml index 496106a4db2c3deaea026c1869e3366c2f1f5dc5..a8ff0b47713a0083b79a93c593036379926cb247 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementModulateur.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementModulateur.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\ElementModulateur" table="ELEMENT_MODULATEUR"> + <entity name="OffreFormation\Entity\Db\ElementModulateur" table="ELEMENT_MODULATEUR"> <indexes> <index name="IDX_1E6102DC59860CDC" columns="HISTO_CREATEUR_ID"/> <index name="IDX_1E6102DC7E9E2204" columns="HISTO_DESTRUCTEUR_ID"/> @@ -22,7 +22,7 @@ <join-column name="MODULATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="element" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="element" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-columns> <join-column name="ELEMENT_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementPedagogique.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementPedagogique.dcm.xml similarity index 84% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementPedagogique.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementPedagogique.dcm.xml index ff20254fcd8410e52e5df4e2677e5a5e0ca2ab0c..32d398c32c0fbcb261ace4a74fe5135e721b24b5 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementPedagogique.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementPedagogique.dcm.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <!-- NB repository-class ajoutée à la main --> - <entity name="Application\Entity\Db\ElementPedagogique" table="ELEMENT_PEDAGOGIQUE"> + <entity name="OffreFormation\Entity\Db\ElementPedagogique" table="ELEMENT_PEDAGOGIQUE"> <indexes> <index name="IDX_CCADDAC0B4F27801" columns="ETAPE_ID"/> <index name="IDX_CCADDAC059860CDC" columns="HISTO_CREATEUR_ID"/> @@ -32,11 +32,14 @@ <field name="fi" type="boolean" column="FI" nullable="false"/> <field name="fc" type="boolean" column="FC" nullable="false"/> <field name="fa" type="boolean" column="FA" nullable="false"/> - <many-to-one field="discipline" target-entity="Application\Entity\Db\Discipline"> + <many-to-one field="discipline" target-entity="OffreFormation\Entity\Db\Discipline"> <join-columns> <join-column name="DISCIPLINE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> + <many-to-one field="tauxRemuEp" target-entity="Paiement\Entity\Db\TauxRemu"> + <join-column name="TAUX_REMU_ID" referenced-column-name="ID"/> + </many-to-one> <many-to-one field="source" target-entity="UnicaenImport\Entity\Db\Source"> <join-columns> <join-column name="SOURCE_ID" referenced-column-name="ID"/> @@ -73,27 +76,27 @@ <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="etape" target-entity="Application\Entity\Db\Etape" inversed-by="elementPedagogique"> + <many-to-one field="etape" target-entity="OffreFormation\Entity\Db\Etape" inversed-by="elementPedagogique"> <join-columns> <join-column name="ETAPE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <one-to-many field="cheminPedagogique" target-entity="Application\Entity\Db\CheminPedagogique" + <one-to-many field="cheminPedagogique" target-entity="OffreFormation\Entity\Db\CheminPedagogique" mapped-by="elementPedagogique"/> <!-- NB: Ajout de relations à la main --> <one-to-many field="service" target-entity="Enseignement\Entity\Db\Service" mapped-by="elementPedagogique"/> - <one-to-many field="elementModulateur" target-entity="Application\Entity\Db\ElementModulateur" mapped-by="element"> + <one-to-many field="elementModulateur" target-entity="OffreFormation\Entity\Db\ElementModulateur" mapped-by="element"> <cascade> <cascade-all/> </cascade> </one-to-many> - <one-to-many field="volumeHoraireEns" target-entity="Application\Entity\Db\VolumeHoraireEns" mapped-by="elementPedagogique"> + <one-to-many field="volumeHoraireEns" target-entity="OffreFormation\Entity\Db\VolumeHoraireEns" mapped-by="elementPedagogique"> <cascade> <cascade-all/> </cascade> </one-to-many> - <many-to-many field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-many field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-table name="V_ELEMENT_TYPE_INTERVENTION"> <join-columns> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> @@ -113,7 +116,7 @@ </inverse-join-columns> </join-table> </many-to-many> - <many-to-many field="typeHeures" target-entity="Application\Entity\Db\TypeHeures"> + <many-to-many field="typeHeures" target-entity="OffreFormation\Entity\Db\TypeHeures"> <join-table name="V_ELEMENT_TYPE_HEURES"> <join-columns> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID" on-delete="NO ACTION"/> @@ -123,6 +126,6 @@ </inverse-join-columns> </join-table> </many-to-many> - <one-to-many field="centreCoutEp" target-entity="Application\Entity\Db\CentreCoutEp" mapped-by="elementPedagogique"/> + <one-to-many field="centreCoutEp" target-entity="OffreFormation\Entity\Db\CentreCoutEp" mapped-by="elementPedagogique"/> </entity> </doctrine-mapping> \ No newline at end of file diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementTauxRegimes.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementTauxRegimes.dcm.xml similarity index 91% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementTauxRegimes.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementTauxRegimes.dcm.xml index ba5cfa2244933ac25abd722bd58c901a2ef4ebc4..30bc67d7430559a345fe9f45b3b69010161c3364 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.ElementTauxRegimes.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.ElementTauxRegimes.dcm.xml @@ -3,12 +3,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <!-- NB repository-class ajoutée à la main --> - <entity name="Application\Entity\Db\ElementTauxRegimes" table="ELEMENT_TAUX_REGIMES"> + <entity name="OffreFormation\Entity\Db\ElementTauxRegimes" table="ELEMENT_TAUX_REGIMES"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </many-to-one> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Etape.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Etape.dcm.xml similarity index 89% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Etape.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Etape.dcm.xml index 674a8100d0c08711738a763436c182e50158dedb..39c61408205cc73ff4c9a33019f46bbe6cbf23a9 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.Etape.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.Etape.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\Etape" table="ETAPE"> + <entity name="OffreFormation\Entity\Db\Etape" table="ETAPE"> <indexes> <index name="IDX_DF0BB76D59860CDC" columns="HISTO_CREATEUR_ID"/> <index name="IDX_DF0BB76D7E9E2204" columns="HISTO_DESTRUCTEUR_ID"/> @@ -35,7 +35,7 @@ <join-column name="STRUCTURE_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="typeFormation" target-entity="Application\Entity\Db\TypeFormation"> + <many-to-one field="typeFormation" target-entity="OffreFormation\Entity\Db\TypeFormation"> <join-columns> <join-column name="TYPE_FORMATION_ID" referenced-column-name="ID"/> </join-columns> @@ -60,10 +60,10 @@ <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <one-to-many field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique" mapped-by="etape"/> - <one-to-many field="cheminPedagogique" target-entity="Application\Entity\Db\CheminPedagogique" mapped-by="etape" + <one-to-many field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique" mapped-by="etape"/> + <one-to-many field="cheminPedagogique" target-entity="OffreFormation\Entity\Db\CheminPedagogique" mapped-by="etape" fetch="EXTRA_LAZY"/> - <many-to-many field="niveauFormation" target-entity="Application\Entity\Db\NiveauFormation"> + <many-to-many field="niveauFormation" target-entity="OffreFormation\Entity\Db\NiveauFormation"> <join-table name="V_ETAPE_NIVEAU_FORMATION"> <join-columns> <join-column name="ETAPE_ID" referenced-column-name="ID"/> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.GroupeTypeFormation.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.GroupeTypeFormation.dcm.xml similarity index 92% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.GroupeTypeFormation.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.GroupeTypeFormation.dcm.xml index a721af17c8b183db1f93a7bd41dc5cbd5ff6f193..738d2ac13513650b1a33c30a778c43677b60ec03 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.GroupeTypeFormation.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.GroupeTypeFormation.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\GroupeTypeFormation" table="GROUPE_TYPE_FORMATION"> + <entity name="OffreFormation\Entity\Db\GroupeTypeFormation" table="GROUPE_TYPE_FORMATION"> <indexes> <index name="IDX_F8D8D4AB59860CDC" columns="HISTO_CREATEUR_ID"/> <index name="IDX_F8D8D4AB7E9E2204" columns="HISTO_DESTRUCTEUR_ID"/> @@ -41,6 +41,6 @@ <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <one-to-many field="typeFormation" target-entity="Application\Entity\Db\TypeFormation" mapped-by="groupe"/> + <one-to-many field="typeFormation" target-entity="OffreFormation\Entity\Db\TypeFormation" mapped-by="groupe"/> </entity> </doctrine-mapping> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.NiveauFormation.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.NiveauFormation.dcm.xml similarity index 81% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.NiveauFormation.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.NiveauFormation.dcm.xml index 0f2d66bc82b5f2215064f3475c9efb94c4366712..10811534230759c1767f8b03b561a1eabdaa86bc 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.NiveauFormation.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.NiveauFormation.dcm.xml @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\NiveauFormation" table="V_NIVEAU_FORMATION"> + <entity name="OffreFormation\Entity\Db\NiveauFormation" table="V_NIVEAU_FORMATION"> <id name="id" type="integer" column="ID"></id> <field name="code" type="string" column="CODE" length="50" nullable="false"/> <field name="libelleLong" type="string" column="LIBELLE_LONG" length="250" nullable="false"/> <field name="niveau" type="integer" column="NIVEAU" nullable="true"/> - <many-to-one field="groupeTypeFormation" target-entity="Application\Entity\Db\GroupeTypeFormation"> + <many-to-one field="groupeTypeFormation" target-entity="OffreFormation\Entity\Db\GroupeTypeFormation"> <join-columns> <join-column name="GROUPE_TYPE_FORMATION_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-many field="etape" target-entity="Application\Entity\Db\Etape"> + <many-to-many field="etape" target-entity="OffreFormation\Entity\Db\Etape"> <join-table name="V_ETAPE_NIVEAU_FORMATION"> <join-columns> <join-column name="NIVEAU_FORMATION_ID" referenced-column-name="ID"/> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeFormation.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeFormation.dcm.xml similarity index 93% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeFormation.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeFormation.dcm.xml index 445b5d08df6e056b06084603541bcfacc2ee3529..43cab90022396aec9b38e803ee8c6a88715d7a55 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeFormation.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeFormation.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TypeFormation" table="TYPE_FORMATION"> + <entity name="OffreFormation\Entity\Db\TypeFormation" table="TYPE_FORMATION"> <indexes> <index name="IDX_50F319426CA6D83" columns="GROUPE_ID"/> <index name="IDX_50F3194259860CDC" columns="HISTO_CREATEUR_ID"/> @@ -41,7 +41,7 @@ <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="groupe" target-entity="Application\Entity\Db\GroupeTypeFormation"> + <many-to-one field="groupe" target-entity="OffreFormation\Entity\Db\GroupeTypeFormation"> <join-columns> <join-column name="GROUPE_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeHeures.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeHeures.dcm.xml similarity index 89% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeHeures.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeHeures.dcm.xml index d087d36b0e6306267325e38229e8ee9c944f0caf..e4b10c149ee0a15824fdc5a83cb2ef0b5a2a8626 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeHeures.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeHeures.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TypeHeures" table="TYPE_HEURES"> + <entity name="OffreFormation\Entity\Db\TypeHeures" table="TYPE_HEURES"> <indexes> <index name="IDX_BFCC471159860CDC" columns="HISTO_CREATEUR_ID"/> <index name="IDX_BFCC47117E9E2204" columns="HISTO_DESTRUCTEUR_ID"/> @@ -21,7 +21,7 @@ <field name="ordre" type="integer" column="ORDRE" nullable="false"/> <field name="eligibleCentreCoutEp" type="boolean" column="ELIGIBLE_CENTRE_COUT_EP" nullable="false"/> <field name="enseignement" type="boolean" column="ENSEIGNEMENT" nullable="false"/> - <many-to-one field="typeHeuresElement" target-entity="Application\Entity\Db\TypeHeures"> + <many-to-one field="typeHeuresElement" target-entity="OffreFormation\Entity\Db\TypeHeures"> <join-columns> <join-column name="TYPE_HEURES_ELEMENT_ID" referenced-column-name="ID"/> </join-columns> @@ -42,6 +42,6 @@ </join-columns> </many-to-one> <many-to-many field="centreCout" target-entity="Application\Entity\Db\CentreCout" mapped-by="typeHeures" /> - <many-to-many field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique" mapped-by="typeHeures" /> + <many-to-many field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique" mapped-by="typeHeures" /> </entity> </doctrine-mapping> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeIntervention.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeIntervention.dcm.xml similarity index 93% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeIntervention.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeIntervention.dcm.xml index 6f2d75803a2d71fc3c7462929f253f243751f0e2..9d82f11401b26f46d4a77b808176dcafe21babfe 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeIntervention.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeIntervention.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TypeIntervention" table="TYPE_INTERVENTION"> + <entity name="OffreFormation\Entity\Db\TypeIntervention" table="TYPE_INTERVENTION"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> </id> @@ -25,10 +25,10 @@ <field name="regleFOAD" type="boolean" column="REGLE_FOAD" nullable="false"/> <field name="regleFC" type="boolean" column="REGLE_FC" nullable="false"/> - <one-to-many field="typeInterventionStructure" target-entity="Application\Entity\Db\TypeInterventionStructure" + <one-to-many field="typeInterventionStructure" target-entity="OffreFormation\Entity\Db\TypeInterventionStructure" mapped-by="typeIntervention"/> - <one-to-many field="typeInterventionStatut" target-entity="Application\Entity\Db\TypeInterventionStatut" + <one-to-many field="typeInterventionStatut" target-entity="OffreFormation\Entity\Db\TypeInterventionStatut" mapped-by="typeIntervention"/> <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeInterventionStatut.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeInterventionStatut.dcm.xml similarity index 56% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeInterventionStatut.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeInterventionStatut.dcm.xml index 0b547d1b099452006f836a1c9fc7fdd2a0f2526d..02e01436c4a3eab81feb82f324e2e03e0c99b02c 100644 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeInterventionStatut.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeInterventionStatut.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TypeInterventionStatut" table="TYPE_INTERVENTION_STATUT"> + <entity name="OffreFormation\Entity\Db\TypeInterventionStatut" table="TYPE_INTERVENTION_STATUT"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> <sequence-generator sequence-name="TYPE_INTERVENTION_STATU_ID_SEQ" allocation-size="1"/> @@ -15,11 +15,24 @@ <many-to-one field="annee" target-entity="Application\Entity\Db\Annee"> <join-column name="ANNEE_ID" referenced-column-name="ID"/> </many-to-one> - <many-to-one field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-one field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-column name="TYPE_INTERVENTION_ID" referenced-column-name="ID"/> </many-to-one> <many-to-one field="statut" target-entity="Intervenant\Entity\Db\Statut"> <join-column name="STATUT_ID" referenced-column-name="ID"/> </many-to-one> + + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </many-to-one> </entity> </doctrine-mapping> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeInterventionStructure.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeInterventionStructure.dcm.xml similarity index 91% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeInterventionStructure.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeInterventionStructure.dcm.xml index b5a36f1d76a89c006a84570da3f449e6463f13f5..2461aa57d942a5599747ba7c4dd180fbb41a6826 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.TypeInterventionStructure.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.TypeInterventionStructure.dcm.xml @@ -2,7 +2,7 @@ <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\TypeInterventionStructure" table="TYPE_INTERVENTION_STRUCTURE"> + <entity name="OffreFormation\Entity\Db\TypeInterventionStructure" table="TYPE_INTERVENTION_STRUCTURE"> <id name="id" type="integer" column="ID"> <generator strategy="SEQUENCE"/> <sequence-generator sequence-name="TYPE_INTERVENTION_STRUC_ID_SEQ" allocation-size="1"/> @@ -10,7 +10,7 @@ <field name="visible" type="boolean" column="VISIBLE" nullable="false"/> - <many-to-one field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-one field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-column name="TYPE_INTERVENTION_ID" referenced-column-name="ID"/> </many-to-one> <many-to-one field="structure" target-entity="Application\Entity\Db\Structure"> diff --git a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.VolumeHoraireEns.dcm.xml b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.VolumeHoraireEns.dcm.xml similarity index 90% rename from module/Application/src/Entity/Db/Mapping/Application.Entity.Db.VolumeHoraireEns.dcm.xml rename to module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.VolumeHoraireEns.dcm.xml index 922beb7db82a365f97895e390e496f64e1db138e..86bba8db2f99cb4460920656ec77b6006047373a 100755 --- a/module/Application/src/Entity/Db/Mapping/Application.Entity.Db.VolumeHoraireEns.dcm.xml +++ b/module/OffreFormation/src/Entity/Db/Mapping/OffreFormation.Entity.Db.VolumeHoraireEns.dcm.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - <entity name="Application\Entity\Db\VolumeHoraireEns" table="VOLUME_HORAIRE_ENS"> + <entity name="OffreFormation\Entity\Db\VolumeHoraireEns" table="VOLUME_HORAIRE_ENS"> <indexes> <index name="IDX_8909650482E51E2E" columns="ELEMENT_DISCIPLINE_ID"/> <index name="IDX_890965046DA70281" columns="TYPE_INTERVENTION_ID"/> @@ -42,12 +42,12 @@ <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="typeIntervention" target-entity="Application\Entity\Db\TypeIntervention"> + <many-to-one field="typeIntervention" target-entity="OffreFormation\Entity\Db\TypeIntervention"> <join-columns> <join-column name="TYPE_INTERVENTION_ID" referenced-column-name="ID"/> </join-columns> </many-to-one> - <many-to-one field="elementPedagogique" target-entity="Application\Entity\Db\ElementPedagogique"> + <many-to-one field="elementPedagogique" target-entity="OffreFormation\Entity\Db\ElementPedagogique"> <join-columns> <join-column name="ELEMENT_PEDAGOGIQUE_ID" referenced-column-name="ID"/> </join-columns> diff --git a/module/Application/src/Entity/Db/NiveauFormation.php b/module/OffreFormation/src/Entity/Db/NiveauFormation.php similarity index 91% rename from module/Application/src/Entity/Db/NiveauFormation.php rename to module/OffreFormation/src/Entity/Db/NiveauFormation.php index 7d91354b5137fff8e2f7bd8bc452d1f12541bc15..c6e4c5ce28f30507c8ad6aec19ccab20b0c9bfe6 100755 --- a/module/Application/src/Entity/Db/NiveauFormation.php +++ b/module/OffreFormation/src/Entity/Db/NiveauFormation.php @@ -1,6 +1,6 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; /** * NiveauFormation @@ -28,7 +28,7 @@ class NiveauFormation private $id; /** - * @var \Application\Entity\Db\GroupeTypeFormation + * @var \OffreFormation\Entity\Db\GroupeTypeFormation */ private $groupeTypeFormation; @@ -101,7 +101,7 @@ class NiveauFormation /** * Get groupeTypeFormation * - * @return \Application\Entity\Db\GroupeTypeFormation + * @return \OffreFormation\Entity\Db\GroupeTypeFormation */ public function getGroupeTypeFormation() { diff --git a/module/Application/src/Entity/Db/Traits/CentreCoutEpAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/CentreCoutEpAwareTrait.php similarity index 85% rename from module/Application/src/Entity/Db/Traits/CentreCoutEpAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/CentreCoutEpAwareTrait.php index 69c8eb3993d2ac1681b1b728c87aa2039df456b6..8c2e694b3fdab22a44db3053b27a644affcff22b 100755 --- a/module/Application/src/Entity/Db/Traits/CentreCoutEpAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/CentreCoutEpAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\CentreCoutEp; +use OffreFormation\Entity\Db\CentreCoutEp; /** * Description of CentreCoutEpAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/CheminPedagogiqueAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/CheminPedagogiqueAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/CheminPedagogiqueAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/CheminPedagogiqueAwareTrait.php index 57f588e979f77851d89b69485e7ccf885a24b3d9..e9fe12642312ba94e37f62ae8335c3fe8320b473 100755 --- a/module/Application/src/Entity/Db/Traits/CheminPedagogiqueAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/CheminPedagogiqueAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\CheminPedagogique; +use OffreFormation\Entity\Db\CheminPedagogique; /** * Description of CheminPedagogiqueAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/DisciplineAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/DisciplineAwareTrait.php similarity index 85% rename from module/Application/src/Entity/Db/Traits/DisciplineAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/DisciplineAwareTrait.php index 6cb3d5e126361d696fbbb4d6c1b0e4d985621e0f..c4aa0db6fa5c73f0f32846b7bacc0d39f92a1b31 100755 --- a/module/Application/src/Entity/Db/Traits/DisciplineAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/DisciplineAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\Discipline; +use OffreFormation\Entity\Db\Discipline; /** * Description of DisciplineAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/EffectifsAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/EffectifsAwareTrait.php similarity index 84% rename from module/Application/src/Entity/Db/Traits/EffectifsAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/EffectifsAwareTrait.php index d3d5ed5df238172e04d0c511207c86212b91ea71..fd1764df558118796ee68c3c72501cca39e73273 100755 --- a/module/Application/src/Entity/Db/Traits/EffectifsAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/EffectifsAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\Effectifs; +use OffreFormation\Entity\Db\Effectifs; /** * Description of EffectifsAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/ElementModulateurAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/ElementModulateurAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/ElementModulateurAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/ElementModulateurAwareTrait.php index 8d3f467e4909bbf02228f7efb3b9d41f9466fa40..b79d08c9cc0edbbfcd85a0c1c681e53a838e2e7c 100755 --- a/module/Application/src/Entity/Db/Traits/ElementModulateurAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/ElementModulateurAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\ElementModulateur; +use OffreFormation\Entity\Db\ElementModulateur; /** * Description of ElementModulateurAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/ElementPedagogiqueAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/ElementPedagogiqueAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/ElementPedagogiqueAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/ElementPedagogiqueAwareTrait.php index cd8ff39dc66187a99a8115f506e516c34029dcf1..c2c0922391f9e8922585d52d82575c20e7b51dd8 100755 --- a/module/Application/src/Entity/Db/Traits/ElementPedagogiqueAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/ElementPedagogiqueAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\ElementPedagogique; /** * Description of ElementPedagogiqueAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/ElementTauxRegimesAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/ElementTauxRegimesAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/ElementTauxRegimesAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/ElementTauxRegimesAwareTrait.php index f524d06c93013bb45723e986944539a024f4969c..9edc65ccc345773fe7b4e9ecc1fa9e2c3e96c6d4 100755 --- a/module/Application/src/Entity/Db/Traits/ElementTauxRegimesAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/ElementTauxRegimesAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\ElementTauxRegimes; +use OffreFormation\Entity\Db\ElementTauxRegimes; /** * Description of ElementTauxRegimesAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/EtapeAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/EtapeAwareTrait.php similarity index 83% rename from module/Application/src/Entity/Db/Traits/EtapeAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/EtapeAwareTrait.php index 0526355b06a2321cfb80d80e88af4f73f13be761..99f6b62921c249ec0aeab06fe1208e7c650e1e70 100755 --- a/module/Application/src/Entity/Db/Traits/EtapeAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/EtapeAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\Etape; +use OffreFormation\Entity\Db\Etape; /** * Description of EtapeAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/GroupeTypeFormationAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/GroupeTypeFormationAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/GroupeTypeFormationAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/GroupeTypeFormationAwareTrait.php index 6659a651a631b6eefd3a33893bfaaf2972099455..ac12b86c85481e507936a63ae8d78257691556f6 100755 --- a/module/Application/src/Entity/Db/Traits/GroupeTypeFormationAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/GroupeTypeFormationAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\GroupeTypeFormation; +use OffreFormation\Entity\Db\GroupeTypeFormation; /** * Description of GroupeTypeFormationAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/NiveauFormationAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/NiveauFormationAwareTrait.php similarity index 85% rename from module/Application/src/Entity/Db/Traits/NiveauFormationAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/NiveauFormationAwareTrait.php index 47d4c25458e10a49bf63821e6b9089b5b4dc91d4..28b7701a09025d1159718a71606770e2335c657b 100755 --- a/module/Application/src/Entity/Db/Traits/NiveauFormationAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/NiveauFormationAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\NiveauFormation; +use OffreFormation\Entity\Db\NiveauFormation; /** * Description of NiveauFormationAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/TypeFormationAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/TypeFormationAwareTrait.php similarity index 85% rename from module/Application/src/Entity/Db/Traits/TypeFormationAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/TypeFormationAwareTrait.php index 665c64e9d38fadd6d711da40c36c065a33f42bb3..d5acdba1fcf6422f59f0b6c60a42ca1bce854952 100755 --- a/module/Application/src/Entity/Db/Traits/TypeFormationAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/TypeFormationAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\TypeFormation; +use OffreFormation\Entity\Db\TypeFormation; /** * Description of TypeFormationAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/TypeHeuresAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/TypeHeuresAwareTrait.php similarity index 85% rename from module/Application/src/Entity/Db/Traits/TypeHeuresAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/TypeHeuresAwareTrait.php index f788e44276e35bf124541fdd1b224da0ba671c02..2406bed4dc5d511cf22f5098bca5b02166c966a3 100755 --- a/module/Application/src/Entity/Db/Traits/TypeHeuresAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/TypeHeuresAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\TypeHeures; /** * Description of TypeHeuresAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/TypeInterventionAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/TypeInterventionAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/TypeInterventionAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/TypeInterventionAwareTrait.php index bbf9ec5bb5af647fb74e201e712ba80cbbabe398..430b557a741d4c1e92d269da82cbea9849c7cd0b 100755 --- a/module/Application/src/Entity/Db/Traits/TypeInterventionAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/TypeInterventionAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\TypeIntervention; /** * Description of TypeInterventionAwareTrait diff --git a/module/Application/src/Entity/Db/Traits/TypeInterventionStatutAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/TypeInterventionStatutAwareTrait.php similarity index 72% rename from module/Application/src/Entity/Db/Traits/TypeInterventionStatutAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/TypeInterventionStatutAwareTrait.php index 0310bcffeb3e7197207c452192248cdcb07ad970..0f67cb208bf156094d04d608948dd5f719706102 100755 --- a/module/Application/src/Entity/Db/Traits/TypeInterventionStatutAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/TypeInterventionStatutAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\TypeInterventionStatut; +use OffreFormation\Entity\Db\TypeInterventionStatut; /** * Description of TypeInterventionStatutAwareTrait @@ -16,7 +16,7 @@ trait TypeInterventionStatutAwareTrait /** - * @param TypeInterventionStatut $typeInterventionStatut + * @param TypeInterventionStatut|null $typeInterventionStatut * * @return self */ @@ -29,6 +29,9 @@ trait TypeInterventionStatutAwareTrait + /** + * @return TypeInterventionStatut|null + */ public function getTypeInterventionStatut(): ?TypeInterventionStatut { return $this->typeInterventionStatut; diff --git a/module/Application/src/Entity/Db/Traits/TypeInterventionStructureAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/TypeInterventionStructureAwareTrait.php similarity index 72% rename from module/Application/src/Entity/Db/Traits/TypeInterventionStructureAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/TypeInterventionStructureAwareTrait.php index ef7b13438a6e120d2a7f908bc4a1d6cbfd80acb3..9fe9cf1df74c31615bca69ca9818aaaf7c750fc6 100755 --- a/module/Application/src/Entity/Db/Traits/TypeInterventionStructureAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/TypeInterventionStructureAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\TypeInterventionStructure; +use OffreFormation\Entity\Db\TypeInterventionStructure; /** * Description of TypeInterventionStructureAwareTrait @@ -16,7 +16,7 @@ trait TypeInterventionStructureAwareTrait /** - * @param TypeInterventionStructure $typeInterventionStructure + * @param TypeInterventionStructure|null $typeInterventionStructure * * @return self */ @@ -29,6 +29,9 @@ trait TypeInterventionStructureAwareTrait + /** + * @return TypeInterventionStructure|null + */ public function getTypeInterventionStructure(): ?TypeInterventionStructure { return $this->typeInterventionStructure; diff --git a/module/Application/src/Entity/Db/Traits/VolumeHoraireEnsAwareTrait.php b/module/OffreFormation/src/Entity/Db/Traits/VolumeHoraireEnsAwareTrait.php similarity index 86% rename from module/Application/src/Entity/Db/Traits/VolumeHoraireEnsAwareTrait.php rename to module/OffreFormation/src/Entity/Db/Traits/VolumeHoraireEnsAwareTrait.php index bfdc5993df5df97e00fa816697d2613d2b935541..99ae12ae599a1f8af775ee67cbac356c8789b298 100755 --- a/module/Application/src/Entity/Db/Traits/VolumeHoraireEnsAwareTrait.php +++ b/module/OffreFormation/src/Entity/Db/Traits/VolumeHoraireEnsAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Entity\Db\Traits; +namespace OffreFormation\Entity\Db\Traits; -use Application\Entity\Db\VolumeHoraireEns; +use OffreFormation\Entity\Db\VolumeHoraireEns; /** * Description of VolumeHoraireEnsAwareTrait diff --git a/module/Application/src/Entity/Db/TypeFormation.php b/module/OffreFormation/src/Entity/Db/TypeFormation.php similarity index 67% rename from module/Application/src/Entity/Db/TypeFormation.php rename to module/OffreFormation/src/Entity/Db/TypeFormation.php index d48a2a837ff1ae77c1334b1c6d80ee99091f7367..9612136b4ba13b52eab501a4e51370a7c281fc92 100755 --- a/module/Application/src/Entity/Db/TypeFormation.php +++ b/module/OffreFormation/src/Entity/Db/TypeFormation.php @@ -1,7 +1,10 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; +use Application\Service\AbstractEntityService; +use Application\Service\Traits\SourceServiceAwareTrait; +use RuntimeException; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; @@ -10,11 +13,11 @@ use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; /** * TypeFormation */ -class TypeFormation implements HistoriqueAwareInterface, ImportAwareInterface +class TypeFormation extends AbstractEntityService implements HistoriqueAwareInterface, ImportAwareInterface { use HistoriqueAwareTrait; use ImportAwareTrait; - + use SourceServiceAwareTrait; /** * @var string */ @@ -31,7 +34,7 @@ class TypeFormation implements HistoriqueAwareInterface, ImportAwareInterface protected ?int $id = null; /** - * @var \Application\Entity\Db\GroupeTypeFormation + * @var \OffreFormation\Entity\Db\GroupeTypeFormation */ protected ?GroupeTypeFormation $groupe = null; @@ -41,6 +44,29 @@ class TypeFormation implements HistoriqueAwareInterface, ImportAwareInterface protected bool $serviceStatutaire = true; + /** + * retourne la classe des entités + * + * @return string + * @throws RuntimeException + */ + public function getEntityClass() + { + return TypeFormation::class; + } + + + + /** + * Retourne l'alias d'entité courante + * + * @return string + */ + public function getAlias() + { + return 'typeFormation'; + } + /** * @return string @@ -147,4 +173,17 @@ class TypeFormation implements HistoriqueAwareInterface, ImportAwareInterface return $this->getLibelleLong(); } + /** + * Retourne une nouvelle entité, initialisée avec les bons paramètres + * + * @return TypeFormation + */ + public function newEntity(): TypeFormation + { + $entity = parent::newEntity(); + // toutes les entités créées ont OSE pour source!! + $entity->setSource($this->getServiceSource()->getOse()); + + return $entity; + } } diff --git a/module/Application/src/Entity/Db/TypeHeures.php b/module/OffreFormation/src/Entity/Db/TypeHeures.php similarity index 95% rename from module/Application/src/Entity/Db/TypeHeures.php rename to module/OffreFormation/src/Entity/Db/TypeHeures.php index dd29ab38ce4d0745ea7932017a88c884bcc00892..30ac6e8cb36e66283671b2743f717cd4c0532b81 100755 --- a/module/Application/src/Entity/Db/TypeHeures.php +++ b/module/OffreFormation/src/Entity/Db/TypeHeures.php @@ -1,6 +1,7 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; +use Application\Entity\Db\type; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; @@ -283,9 +284,9 @@ class TypeHeures implements HistoriqueAwareInterface /** * - * @param \Application\Entity\Db\TypeHeures $typeHeuresElement + * @param \OffreFormation\Entity\Db\TypeHeures $typeHeuresElement * - * @return \Application\Entity\Db\TypeHeures + * @return \OffreFormation\Entity\Db\TypeHeures */ function setTypeHeuresElement(TypeHeures $typeHeuresElement) { diff --git a/module/Application/src/Entity/Db/TypeIntervention.php b/module/OffreFormation/src/Entity/Db/TypeIntervention.php similarity index 98% rename from module/Application/src/Entity/Db/TypeIntervention.php rename to module/OffreFormation/src/Entity/Db/TypeIntervention.php index 3f56f5c83423e8e4a818cb3246bbdfa9d79f5156..6cf19f72ada7707ce6d499e0d0b1908452ae8114 100755 --- a/module/Application/src/Entity/Db/TypeIntervention.php +++ b/module/OffreFormation/src/Entity/Db/TypeIntervention.php @@ -1,11 +1,12 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; +use Application\Entity\Db\Annee; +use Application\Entity\Db\Structure; +use Laminas\Permissions\Acl\Resource\ResourceInterface; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; -use Application\Entity\Db\TypeInterventionStatut; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * TypeIntervention diff --git a/module/Application/src/Entity/Db/TypeInterventionStatut.php b/module/OffreFormation/src/Entity/Db/TypeInterventionStatut.php similarity index 87% rename from module/Application/src/Entity/Db/TypeInterventionStatut.php rename to module/OffreFormation/src/Entity/Db/TypeInterventionStatut.php index c8feaf536bc719223ab7a139f006b4817a5b8730..36048e79a65bd134a7c19138cb0781b000bf9d1c 100644 --- a/module/Application/src/Entity/Db/TypeInterventionStatut.php +++ b/module/OffreFormation/src/Entity/Db/TypeInterventionStatut.php @@ -1,12 +1,11 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; use Application\Interfaces\ParametreEntityInterface; use Application\Traits\ParametreEntityTrait; use Intervenant\Entity\Db\StatutAwareTrait; -use Intervenant\Entity\Db\TypeIntervenantAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; class TypeInterventionStatut implements ParametreEntityInterface { diff --git a/module/Application/src/Entity/Db/TypeInterventionStructure.php b/module/OffreFormation/src/Entity/Db/TypeInterventionStructure.php similarity index 94% rename from module/Application/src/Entity/Db/TypeInterventionStructure.php rename to module/OffreFormation/src/Entity/Db/TypeInterventionStructure.php index 66634183bdc6fcd0c63bafa8414ff891775dfb2a..4dd3c720bf3aa36034f7bfa1d6b475aeb476d0aa 100755 --- a/module/Application/src/Entity/Db/TypeInterventionStructure.php +++ b/module/OffreFormation/src/Entity/Db/TypeInterventionStructure.php @@ -1,9 +1,10 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; +use Application\Entity\Db\Annee; use Application\Entity\Db\Traits\StructureAwareTrait; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; diff --git a/module/Application/src/Entity/Db/VolumeHoraireEns.php b/module/OffreFormation/src/Entity/Db/VolumeHoraireEns.php similarity index 91% rename from module/Application/src/Entity/Db/VolumeHoraireEns.php rename to module/OffreFormation/src/Entity/Db/VolumeHoraireEns.php index 5d9216944585061d18b0af068e3864b6946ef7f4..9a39e4609a63a0a67f17c15dc3ffe43f4faaecdf 100755 --- a/module/Application/src/Entity/Db/VolumeHoraireEns.php +++ b/module/OffreFormation/src/Entity/Db/VolumeHoraireEns.php @@ -1,15 +1,15 @@ <?php -namespace Application\Entity\Db; +namespace OffreFormation\Entity\Db; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use Application\Entity\Db\Traits\SourceAwareTrait; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; use UnicaenApp\Entity\HistoriqueAwareInterface; use UnicaenApp\Entity\HistoriqueAwareTrait; use UnicaenImport\Entity\Db\Interfaces\ImportAwareInterface; use UnicaenImport\Entity\Db\Traits\ImportAwareTrait; -use Laminas\Permissions\Acl\Resource\ResourceInterface; /** * VolumeHoraireEns diff --git a/module/Application/src/Form/DisciplineForm.php b/module/OffreFormation/src/Form/DisciplineForm.php similarity index 94% rename from module/Application/src/Form/DisciplineForm.php rename to module/OffreFormation/src/Form/DisciplineForm.php index f934ef30cd08ef672cafa00328da8ecec253cac4..7a270ba38ae29f4fca511c6d99d8219dd22374a3 100755 --- a/module/Application/src/Form/DisciplineForm.php +++ b/module/OffreFormation/src/Form/DisciplineForm.php @@ -1,7 +1,8 @@ <?php -namespace Application\Form; +namespace OffreFormation\Form; +use Application\Form\AbstractForm; use Application\Service\Traits\ParametresServiceAwareTrait; use Laminas\Hydrator\HydratorInterface; @@ -117,8 +118,8 @@ class DisciplineFormHydrator implements HydratorInterface { /** - * @param array $data - * @param \Application\Entity\Db\Discipline $object + * @param array $data + * @param \OffreFormation\Entity\Db\Discipline $object * * @return object */ @@ -138,7 +139,7 @@ class DisciplineFormHydrator implements HydratorInterface /** - * @param \Application\Entity\Db\Discipline $object + * @param \OffreFormation\Entity\Db\Discipline $object * * @return array */ diff --git a/module/Application/src/Form/OffreFormation/ElementModulateurCentreCoutForm.php b/module/OffreFormation/src/Form/ElementModulateurCentreCoutTauxRemuForm.php similarity index 51% rename from module/Application/src/Form/OffreFormation/ElementModulateurCentreCoutForm.php rename to module/OffreFormation/src/Form/ElementModulateurCentreCoutTauxRemuForm.php index ea03af9b6a89d1e8f47c9707bd9c73c317e89427..ab87095ae5b405518f403103a4a3c43dc08483d6 100755 --- a/module/Application/src/Form/OffreFormation/ElementModulateurCentreCoutForm.php +++ b/module/OffreFormation/src/Form/ElementModulateurCentreCoutTauxRemuForm.php @@ -1,35 +1,37 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; use Application\Entity\Db\CentreCout; -use Application\Entity\Db\ElementPedagogique; use Application\Form\AbstractForm; -use Application\Form\OffreFormation\Traits\ElementModulateursFieldsetAwareTrait; use Application\Service\Traits\CentreCoutServiceAwareTrait; use Application\Service\Traits\TypeModulateurServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Laminas\Form\Element\Select; +use OffreFormation\Form\Traits\ElementModulateursFieldsetAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use Paiement\Service\TauxRemuServiceAwareTrait; /** * Description of ElementModulateurSaisie * * @author Antony Le Courtes <antony.lecourtes@unicaen.fr> */ -class ElementModulateurCentreCoutForm extends AbstractForm +class ElementModulateurCentreCoutTauxRemuForm extends AbstractForm { use TypeModulateurServiceAwareTrait; use ElementPedagogiqueServiceAwareTrait; use TypeModulateurServiceAwareTrait; use ElementModulateursFieldsetAwareTrait; use CentreCoutServiceAwareTrait; + use TauxRemuServiceAwareTrait; /** * Element * - * @var Element + * @var ElementPedagogique */ - protected $elementPedagogiquePedagogique; + protected $elementPedagogique; @@ -104,6 +106,19 @@ class ElementModulateurCentreCoutForm extends AbstractForm $this->add($selectCentreCout); } + /* partie taux de rémuneration */ + //Formulaire partie Taux de rémunération de l'élément pédagogique en cours + $tauxRemu = $elementPedagogique->getTauxRemuEp(); + $selectTauxRemu = $this->createSelectElementTauxRemu($elementPedagogique); + + if (array_key_exists($tauxRemu && $tauxRemu->getId(), $selectTauxRemu->getValueOptions())){ + $selectTauxRemu->setValue($tauxRemu->getId()); + } + + + + $this->add($selectTauxRemu); + $this->add([ 'name' => 'id', @@ -113,64 +128,88 @@ class ElementModulateurCentreCoutForm extends AbstractForm - private function createSelectElementCentreCout(\Application\Entity\Db\TypeHeures $th, ElementPedagogique $elementPedagogique) - { - $filter = function (CentreCout $centreCout) use ($th) { - return $centreCout->getTypeHeures()->contains($th); - }; - $centresCouts = $elementPedagogique->getStructure()->getCentreCout()->filter($filter); - $valueOptions = []; - foreach ($centresCouts as $centreCout) { - $valueOptions[$centreCout->getCode()] = $centreCout->getCode() . ' - ' . $centreCout->getLibelle(); + private + function createSelectElementCentreCout(\OffreFormation\Entity\Db\TypeHeures $th, ElementPedagogique $elementPedagogique) + { + $filter = function (CentreCout $centreCout) use ($th) { + return $centreCout->getTypeHeures()->contains($th); + }; + $centresCouts = $elementPedagogique->getStructure()->getCentreCout()->filter($filter); + $valueOptions = []; + foreach ($centresCouts as $centreCout) { + $valueOptions[$centreCout->getCode()] = $centreCout->getCode() . ' - ' . $centreCout->getLibelle(); + } + $element = new Select($th->getCode()); + $element + ->setLabel($th->getLibelleCourt()) + ->setValueOptions(['' => '(Aucun)'] + $valueOptions) + ->setAttribute('class', 'type-heures selectpicker') + ->setAttribute('data-live-search', 'true'); + + return $element; } - $element = new Select($th->getCode()); - $element - ->setLabel($th->getLibelleCourt()) - ->setValueOptions(['' => '(Aucun)'] + $valueOptions) - ->setAttribute('class', 'type-heures selectpicker') - ->setAttribute('data-live-search', 'true'); - - return $element; - } - - /** - * Retourne la liste des types de modulateurs de l'element - * - * @return \Application\Entity\Db\Modulateur[] - */ - public function getTypesModulateurs() - { - - if (!$this->elementPedagogique) { - throw new \RuntimeException('Element non spécifié'); + /** + * @param ElementPedagogique $elementPedagogique + * + * @return Select + */ + private + function createSelectElementTauxRemu(ElementPedagogique $elementPedagogique) + { + $tauxRemus = $this->getServiceTauxRemu()->getTauxRemusAnneeWithValeur(); + $valueOptions = []; + foreach ($tauxRemus as $tauxRemu) { + $valueOptions[$tauxRemu->getId()] = $tauxRemu->getCode() . ' - ' . $tauxRemu->getLibelle(); + } + $element = new Select('tauxRemu'); + $element + ->setLabel('tauxRemu') + ->setValueOptions(['' => '(Aucun)'] + $valueOptions) + ->setAttribute('class', 'taux-remu selectpicker') + ->setAttribute('data-live-search', 'true'); + + return $element; } - return $this->getServiceTypeModulateur()->getList($this->getServiceTypeModulateur()->finderByElementPedagogique($this->elementPedagogique)); - } - + /** + * Retourne la liste des types de modulateurs de l'element + * + * @return \Application\Entity\Db\Modulateur[] + */ + public + function getTypesModulateurs() + { - public function getElementPedagogique() - { - return $this->elementPedagogique; - } + if (!$this->elementPedagogique) { + throw new \RuntimeException('Element non spécifié'); + } + return $this->getServiceTypeModulateur()->getList($this->getServiceTypeModulateur()->finderByElementPedagogique($this->elementPedagogique)); + } - public function setElementPedagogique(ElementPedagogique $elementPedagogique) - { - $this->elementPedagogique = $elementPedagogique; + public + function getElementPedagogique() + { + return $this->elementPedagogique; + } - return $this; - } + public + function setElementPedagogique(ElementPedagogique $elementPedagogique) + { + $this->elementPedagogique = $elementPedagogique; + return $this; + } - public function getInputFilterSpecification() - { - } + public + function getInputFilterSpecification() + { -} \ No newline at end of file + } + } \ No newline at end of file diff --git a/module/Application/src/Form/OffreFormation/ElementModulateursFieldset.php b/module/OffreFormation/src/Form/ElementModulateursFieldset.php similarity index 96% rename from module/Application/src/Form/OffreFormation/ElementModulateursFieldset.php rename to module/OffreFormation/src/Form/ElementModulateursFieldset.php index 395da75825977f7963fbe7f715a6038dfae3979b..b02d3acbe99fbce571ec999f94de16be23b2ed55 100755 --- a/module/Application/src/Form/OffreFormation/ElementModulateursFieldset.php +++ b/module/OffreFormation/src/Form/ElementModulateursFieldset.php @@ -1,15 +1,15 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use Application\Form\AbstractFieldset; -use Application\Service\Traits\ElementModulateurServiceAwareTrait; use Application\Service\Traits\ModulateurServiceAwareTrait; use Application\Service\Traits\TypeModulateurServiceAwareTrait; use Laminas\Form\Element\Select; -use Application\Entity\Db\ElementPedagogique; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Service\Traits\ElementModulateurServiceAwareTrait; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; /** * Description of ElementModulateursFieldset diff --git a/module/Application/src/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php b/module/OffreFormation/src/Form/ElementPedagogiqueRechercheFieldset.php similarity index 98% rename from module/Application/src/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php rename to module/OffreFormation/src/Form/ElementPedagogiqueRechercheFieldset.php index 945bf79d119187aa612a4d49a394a9cf97004aa5..648bd3d42b919775698402bf583976fc73a03b20 100755 --- a/module/Application/src/Form/OffreFormation/ElementPedagogiqueRechercheFieldset.php +++ b/module/OffreFormation/src/Form/ElementPedagogiqueRechercheFieldset.php @@ -1,14 +1,14 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; -use Application\Entity\Db\ElementPedagogique; use Application\Form\AbstractFieldset; use Application\Service\Traits\ContextServiceAwareTrait; -use UnicaenApp\Traits\SessionContainerTrait; use Doctrine\ORM\QueryBuilder; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use UnicaenApp\Traits\SessionContainerTrait; /** @@ -386,7 +386,7 @@ class ElementPedagogiqueRechercheHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\ElementPedagogique $object + * @param \OffreFormation\Entity\Db\ElementPedagogique $object * * @return array */ diff --git a/module/Application/src/Form/OffreFormation/ElementPedagogiqueSaisie.php b/module/OffreFormation/src/Form/ElementPedagogiqueSaisie.php similarity index 96% rename from module/Application/src/Form/OffreFormation/ElementPedagogiqueSaisie.php rename to module/OffreFormation/src/Form/ElementPedagogiqueSaisie.php index a88a89d45509985a28893f0351c19ac210aba014..07e13ae124f5d6d7246be6990cfe3be72f71947e 100755 --- a/module/Application/src/Form/OffreFormation/ElementPedagogiqueSaisie.php +++ b/module/OffreFormation/src/Form/ElementPedagogiqueSaisie.php @@ -1,16 +1,16 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; use Application\Filter\FloatFromString; use Application\Filter\StringFromFloat; use Application\Form\AbstractForm; -use Application\Service\Traits\DisciplineServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; use Application\Service\Traits\PeriodeServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Service\Traits\DisciplineServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; /** * Description of ElementPedagogiqueSaisie @@ -277,8 +277,8 @@ class ElementPedagogiqueSaisieHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data - * @param \Application\Entity\Db\ElementPedagogique $object + * @param array $data + * @param \OffreFormation\Entity\Db\ElementPedagogique $object * * @return object */ @@ -307,7 +307,7 @@ class ElementPedagogiqueSaisieHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\ElementPedagogique $object + * @param \OffreFormation\Entity\Db\ElementPedagogique $object * * @return array */ diff --git a/module/Application/src/Form/OffreFormation/ElementPedagogiqueSynchronisationForm.php b/module/OffreFormation/src/Form/ElementPedagogiqueSynchronisationForm.php similarity index 98% rename from module/Application/src/Form/OffreFormation/ElementPedagogiqueSynchronisationForm.php rename to module/OffreFormation/src/Form/ElementPedagogiqueSynchronisationForm.php index be5e072b7b33921ddbb467a6041e29995ba1c480..300bce0e0e4e8deca0de34864e6931fd448a60fd 100755 --- a/module/Application/src/Form/OffreFormation/ElementPedagogiqueSynchronisationForm.php +++ b/module/OffreFormation/src/Form/ElementPedagogiqueSynchronisationForm.php @@ -1,6 +1,6 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; use Application\Entity\Db\Traits\StructureAwareTrait; use Application\Form\AbstractForm; diff --git a/module/Application/src/Form/OffreFormation/EtapeCentreCout/ElementCentreCoutFieldset.php b/module/OffreFormation/src/Form/EtapeCentreCout/ElementCentreCoutFieldset.php similarity index 97% rename from module/Application/src/Form/OffreFormation/EtapeCentreCout/ElementCentreCoutFieldset.php rename to module/OffreFormation/src/Form/EtapeCentreCout/ElementCentreCoutFieldset.php index db9bf6f5d9fd57b35b39f692ad5c5bb06d097031..74d45046aff7dfb60f5d578ac41142e5784cffc0 100755 --- a/module/Application/src/Form/OffreFormation/EtapeCentreCout/ElementCentreCoutFieldset.php +++ b/module/OffreFormation/src/Form/EtapeCentreCout/ElementCentreCoutFieldset.php @@ -1,17 +1,17 @@ <?php -namespace Application\Form\OffreFormation\EtapeCentreCout; +namespace OffreFormation\Form\EtapeCentreCout; use Application\Entity\Db\CentreCout; use Application\Form\AbstractFieldset; -use Application\Service\Traits\CentreCoutServiceAwareTrait; use Application\Service\Traits\CentreCoutEpServiceAwareTrait; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\TypeHeures; -use RuntimeException; +use Application\Service\Traits\CentreCoutServiceAwareTrait; use Laminas\Form\Element\Select; -use Application\Entity\Db\CentreCoutEp; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\CentreCoutEp; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\TypeHeures; +use RuntimeException; /** * Fieldset de saisie d'un centre de coûts pour chacun des types d'heures éligibles diff --git a/module/OffreFormation/src/Form/EtapeCentreCout/ElementCentreCoutFieldsetFactory.php b/module/OffreFormation/src/Form/EtapeCentreCout/ElementCentreCoutFieldsetFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..9aac1f6253012d9231d42dc34b39b57fe55a4a80 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeCentreCout/ElementCentreCoutFieldsetFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Form\EtapeCentreCout; + +use Psr\Container\ContainerInterface; + + +/** + * Description of ElementCentreCoutFieldsetFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementCentreCoutFieldsetFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementCentreCoutFieldset + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementCentreCoutFieldset + { + $form = new ElementCentreCoutFieldset; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/Application/src/Form/OffreFormation/EtapeCentreCout/EtapeCentreCoutForm.php b/module/OffreFormation/src/Form/EtapeCentreCout/EtapeCentreCoutForm.php similarity index 95% rename from module/Application/src/Form/OffreFormation/EtapeCentreCout/EtapeCentreCoutForm.php rename to module/OffreFormation/src/Form/EtapeCentreCout/EtapeCentreCoutForm.php index 9de5447dfb58eb95886feae34734abf136db72b8..cdd4284559ed274486446c89e229c8811a8339ca 100755 --- a/module/Application/src/Form/OffreFormation/EtapeCentreCout/EtapeCentreCoutForm.php +++ b/module/OffreFormation/src/Form/EtapeCentreCout/EtapeCentreCoutForm.php @@ -1,18 +1,17 @@ <?php -namespace Application\Form\OffreFormation\EtapeCentreCout; +namespace OffreFormation\Form\EtapeCentreCout; use Application\Entity\Db\CentreCout; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; -use Application\Entity\Db\TypeHeures; use Application\Form\AbstractForm; -use Application\Form\OffreFormation\EtapeCentreCout\ElementCentreCoutSaisieFieldset; -use Application\Form\OffreFormation\EtapeCentreCout\Traits\ElementCentreCoutFieldsetAwareTrait; use Application\Service\Traits\CentreCoutServiceAwareTrait; -use RuntimeException; -use Laminas\Hydrator\HydratorInterface; use Laminas\Form\Element\Select; +use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Form\EtapeCentreCout\Traits\ElementCentreCoutFieldsetAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeHeures; +use RuntimeException; /** diff --git a/module/OffreFormation/src/Form/EtapeCentreCout/EtapeCentreCoutFormFactory.php b/module/OffreFormation/src/Form/EtapeCentreCout/EtapeCentreCoutFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..a4b71e88f771fc679c59d660110c8cdbc789da25 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeCentreCout/EtapeCentreCoutFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\EtapeCentreCout; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\EtapeCentreCout\EtapeCentreCoutForm; + + +/** + * Description of EtapeCentreCoutFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeCentreCoutFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeCentreCoutForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeCentreCoutForm + { + $form = new EtapeCentreCoutForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Interfaces/ElementCentreCoutFieldsetAwareInterface.php b/module/OffreFormation/src/Form/EtapeCentreCout/Interfaces/ElementCentreCoutFieldsetAwareInterface.php similarity index 79% rename from module/Application/src/Form/OffreFormation/EtapeCentreCout/Interfaces/ElementCentreCoutFieldsetAwareInterface.php rename to module/OffreFormation/src/Form/EtapeCentreCout/Interfaces/ElementCentreCoutFieldsetAwareInterface.php index 89eb8c58bafd084ae8cd52af9cc218b01be6f28c..a33a35b3f169d53310dfe747d028afb5bbc07113 100755 --- a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Interfaces/ElementCentreCoutFieldsetAwareInterface.php +++ b/module/OffreFormation/src/Form/EtapeCentreCout/Interfaces/ElementCentreCoutFieldsetAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\EtapeCentreCout\Interfaces; +namespace OffreFormation\Form\EtapeCentreCout\Interfaces; -use Application\Form\OffreFormation\EtapeCentreCout\ElementCentreCoutFieldset; +use OffreFormation\Form\EtapeCentreCout\ElementCentreCoutFieldset; /** * Description of ElementCentreCoutFieldsetAwareInterface diff --git a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Interfaces/EtapeCentreCoutFormAwareInterface.php b/module/OffreFormation/src/Form/EtapeCentreCout/Interfaces/EtapeCentreCoutFormAwareInterface.php similarity index 78% rename from module/Application/src/Form/OffreFormation/EtapeCentreCout/Interfaces/EtapeCentreCoutFormAwareInterface.php rename to module/OffreFormation/src/Form/EtapeCentreCout/Interfaces/EtapeCentreCoutFormAwareInterface.php index b9371eb2624f676f3c0f9c2bfbfc1f03cd143f0d..0cc128c10805b93dec1c13b360e8382873ea2189 100755 --- a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Interfaces/EtapeCentreCoutFormAwareInterface.php +++ b/module/OffreFormation/src/Form/EtapeCentreCout/Interfaces/EtapeCentreCoutFormAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\EtapeCentreCout\Interfaces; +namespace OffreFormation\Form\EtapeCentreCout\Interfaces; -use Application\Form\OffreFormation\EtapeCentreCout\EtapeCentreCoutForm; +use OffreFormation\Form\EtapeCentreCout\EtapeCentreCoutForm; /** * Description of EtapeCentreCoutFormAwareInterface diff --git a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Traits/ElementCentreCoutFieldsetAwareTrait.php b/module/OffreFormation/src/Form/EtapeCentreCout/Traits/ElementCentreCoutFieldsetAwareTrait.php similarity index 88% rename from module/Application/src/Form/OffreFormation/EtapeCentreCout/Traits/ElementCentreCoutFieldsetAwareTrait.php rename to module/OffreFormation/src/Form/EtapeCentreCout/Traits/ElementCentreCoutFieldsetAwareTrait.php index 455ec102478b4002c94a38e4a5bbe7e576c6ccf8..1e3422ee399ad207b11e4e273043d7088c1f185e 100755 --- a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Traits/ElementCentreCoutFieldsetAwareTrait.php +++ b/module/OffreFormation/src/Form/EtapeCentreCout/Traits/ElementCentreCoutFieldsetAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\EtapeCentreCout\Traits; +namespace OffreFormation\Form\EtapeCentreCout\Traits; -use Application\Form\OffreFormation\EtapeCentreCout\ElementCentreCoutFieldset; +use OffreFormation\Form\EtapeCentreCout\ElementCentreCoutFieldset; /** * Description of ElementCentreCoutFieldsetAwareTrait diff --git a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Traits/EtapeCentreCoutFormAwareTrait.php b/module/OffreFormation/src/Form/EtapeCentreCout/Traits/EtapeCentreCoutFormAwareTrait.php similarity index 88% rename from module/Application/src/Form/OffreFormation/EtapeCentreCout/Traits/EtapeCentreCoutFormAwareTrait.php rename to module/OffreFormation/src/Form/EtapeCentreCout/Traits/EtapeCentreCoutFormAwareTrait.php index da991c7830e085885314ce50e554c261acd267cd..2721152873ac8c6eb5badf8f1470da3ae31172ee 100755 --- a/module/Application/src/Form/OffreFormation/EtapeCentreCout/Traits/EtapeCentreCoutFormAwareTrait.php +++ b/module/OffreFormation/src/Form/EtapeCentreCout/Traits/EtapeCentreCoutFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\EtapeCentreCout\Traits; +namespace OffreFormation\Form\EtapeCentreCout\Traits; -use Application\Form\OffreFormation\EtapeCentreCout\EtapeCentreCoutForm; +use OffreFormation\Form\EtapeCentreCout\EtapeCentreCoutForm; /** * Description of EtapeCentreCoutFormAwareTrait diff --git a/module/Application/src/Form/OffreFormation/EtapeModulateursSaisie.php b/module/OffreFormation/src/Form/EtapeModulateursSaisie.php similarity index 92% rename from module/Application/src/Form/OffreFormation/EtapeModulateursSaisie.php rename to module/OffreFormation/src/Form/EtapeModulateursSaisie.php index 2331ea5ad01edf6c326b82a79420e642976c9781..97a55d8d5b4833aee335dbf4619d888d8bdc786a 100755 --- a/module/Application/src/Form/OffreFormation/EtapeModulateursSaisie.php +++ b/module/OffreFormation/src/Form/EtapeModulateursSaisie.php @@ -1,13 +1,13 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; use Application\Form\AbstractForm; -use Application\Form\OffreFormation\Traits\ElementModulateursFieldsetAwareTrait; use Application\Service\Traits\TypeModulateurServiceAwareTrait; -use Application\Entity\Db\Etape; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Form\Traits\ElementModulateursFieldsetAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Entity\Db\Etape; /** * Description of ElementModulateursSaisie @@ -187,8 +187,8 @@ class EtapeModulateursHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data - * @param \Application\Entity\Db\Etape $object + * @param array $data + * @param \OffreFormation\Entity\Db\Etape $object * * @return object */ @@ -202,7 +202,7 @@ class EtapeModulateursHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\Etape $object + * @param \OffreFormation\Entity\Db\Etape $object * * @return array */ diff --git a/module/Application/src/Form/OffreFormation/EtapeSaisie.php b/module/OffreFormation/src/Form/EtapeSaisie.php similarity index 95% rename from module/Application/src/Form/OffreFormation/EtapeSaisie.php rename to module/OffreFormation/src/Form/EtapeSaisie.php index a8736e177e08e5c1d34b0e69f3ac70aa1e132bcb..4c178fb1fadad3e1f56f45bb6ae3cdeb2c275c68 100755 --- a/module/Application/src/Form/OffreFormation/EtapeSaisie.php +++ b/module/OffreFormation/src/Form/EtapeSaisie.php @@ -1,14 +1,14 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; use Application\Form\AbstractForm; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\DomaineFonctionnelServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\TypeFormationServiceAwareTrait; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Service\Traits\DomaineFonctionnelServiceAwareTrait; +use OffreFormation\Service\Traits\TypeFormationServiceAwareTrait; /** * Description of EtapeSaisie @@ -163,7 +163,7 @@ class EtapeSaisie extends AbstractForm /** - * @return \Application\Entity\Db\TypeFormation[] + * @return \OffreFormation\Entity\Db\TypeFormation[] */ private function getTypesFormation() { @@ -189,7 +189,7 @@ class EtapeSaisie extends AbstractForm { $pertinencesNiveau = []; foreach ($this->getTypesFormation() as $tf) { - /* @var $tf \Application\Entity\Db\TypeFormation */ + /* @var $tf \OffreFormation\Entity\Db\TypeFormation */ $pertinencesNiveau[$tf->getId()] = (bool)$tf->getGroupe()->getPertinenceNiveau(); } @@ -266,8 +266,8 @@ class EtapeSaisieHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data - * @param \Application\Entity\Db\Etape $object + * @param array $data + * @param \OffreFormation\Entity\Db\Etape $object * * @return object */ @@ -296,7 +296,7 @@ class EtapeSaisieHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\Etape $object + * @param \OffreFormation\Entity\Db\Etape $object * * @return array */ diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldset.php b/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldset.php new file mode 100755 index 0000000000000000000000000000000000000000..9def8fe8c6212f4cfae477c363ed17979a4210dd --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldset.php @@ -0,0 +1,215 @@ +<?php + +namespace OffreFormation\Form\EtapeTauxRemu; + +use Application\Form\AbstractFieldset; +use Laminas\Form\Element\Select; +use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use Paiement\Entity\Db\TauxRemu; +use Paiement\Service\TauxRemuServiceAwareTrait; +use RuntimeException; + +/** + * Fieldset de saisie d'un taux de rémunération pour un élément pédagogique. + * + */ +class ElementTauxRemuFieldset extends AbstractFieldset +{ + use TauxRemuServiceAwareTrait; + use ElementPedagogiqueServiceAwareTrait; + + /** + * element pédagogique associé + * + * @var ElementPedagogique + */ + protected $elementPedagogique; + + /** + * @var array + */ + private $tauxRemus = []; + + + + /** + * + */ + public function init() + { + $hydrator = new ElementTauxRemusFieldsetHydrator(); + $hydrator->setServiceTauxRemu($this->getServiceTauxRemu()); + $hydrator->setServiceElementPedagogique($this->getServiceElementPedagogique()); + $this->setHydrator($hydrator); + $this->setAllowedObjectBindingClass(ElementPedagogique::class); + } + + + + /** + * Retourne la liste des taux de rémunération associés + * + * + * @return TauxRemu|null + */ + public function getTauxRemus() + { + if (!isset($this->tauxRemus['tauxRemu'])) { + + $this->tauxRemus['tauxRemu'] + = $this->getServiceTauxRemu()->getTauxRemusAnneeWithValeur(); + } + + return $this->tauxRemus['tauxRemu']; + } + + + + /** + * + */ + public function build() + { + $this->add($this->createSelectElement()); + } + + + + /** + * + * + * @return Select + */ + private function createSelectElement() + { + $element = new Select('tauxRemu'); + $element + ->setLabel('taux') + ->setValueOptions(['' => '(Aucun)'] + $this->getServiceTauxRemu()->formatTauxRemus($this->getTauxRemus())) + ->setAttribute('class', 'taux-remus selectpicker') + ->setAttribute('data-live-search', 'true'); + + return $element; + } + + + + /** + * Should return an array specification compatible with + * {@link Laminas\InputFilter\Factory::createInputFilter()}. + * + * @return array + */ + public function getInputFilterSpecification() + { + $filters = []; + $filters['tauxRemu'] = [ + 'required' => false, + ]; + + return $filters; + } + + + + /** + * + * @param ElementPedagogique $object + * + * @return self + */ + public function setObject($object) + { + if ($object instanceof ElementPedagogique) { + $this->setElementPedagogique($object); + $this->build(); + } + + return parent::setObject($object); + } + + + + /** + * Retourne l'élément pédagogique courant (si l'objet a été préalablement associé) + * + * @return ElementPedagogique + */ + public function getElementPedagogique() + { + if (!$this->elementPedagogique) { + throw new RuntimeException('Elément pédagogique non spécifié.'); + } + + return $this->elementPedagogique; + } + + + + /** + * @param ElementPedagogique $elementPedagogique + * + * @return $this + */ + public function setElementPedagogique(ElementPedagogique $elementPedagogique) + { + $this->elementPedagogique = $elementPedagogique; + + return $this; + } + +} + + + + + +/** + * + */ +class ElementTauxRemusFieldsetHydrator implements HydratorInterface +{ + use TauxRemuServiceAwareTrait; + use ElementPedagogiqueServiceAwareTrait; + + /** + * Hydrate $object with the provided $data. + * + * @param array $data + * @param ElementPedagogique $element + * + * @return object + */ + public function hydrate(array $data, $element) + { + $tauxRemu = null; + if ($data['tauxRemu']) { + $tauxRemu = $this->getServiceTauxRemu()->get((int)$data['tauxRemu']); + } + $this->getServiceElementPedagogique()->updateTauxRemu($element, $tauxRemu); + + return $element; + } + + + + /** + * Extract values from an object + * + * @param ElementPedagogique $element + * + * @return array + */ + public function extract($element): array + { + $data = []; + $trEp = $element->getTauxRemuEp(); + if ($trEp) { + $data['tauxRemu'] = $trEp->getId(); + } + + return $data; + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldsetAwareTrait.php b/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldsetAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..a1c92f31dfc8875e9f91da8e38ff93bd3bfd2959 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldsetAwareTrait.php @@ -0,0 +1,39 @@ +<?php +namespace OffreFormation\Form\EtapeTauxRemu; + + + +/** + * Description of ElementTauxRemuFieldsetAwareTrait + * + * @author UnicaenCode + */ +trait ElementTauxRemuFieldsetAwareTrait +{ + protected ?ElementTauxRemuFieldset $fieldsetEtapeTauxRemuElementTauxRemu = null; + + + + /** + * @param ElementTauxRemuFieldset $fieldsetEtapeTauxRemuElementTauxRemu + * + * @return self + */ + public function setFieldsetEtapeTauxRemuElementTauxRemu(?ElementTauxRemuFieldset $fieldsetEtapeTauxRemuElementTauxRemu) + { + $this->fieldsetEtapeTauxRemuElementTauxRemu = $fieldsetEtapeTauxRemuElementTauxRemu; + + return $this; + } + + + + public function getFieldsetEtapeTauxRemuElementTauxRemu(): ?ElementTauxRemuFieldset + { + if (!empty($this->fieldsetEtapeTauxRemuElementTauxRemu)) { + return $this->fieldsetEtapeTauxRemuElementTauxRemu; + } + + return \Application::$container->get('FormElementManager')->get(ElementTauxRemuFieldset::class); + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldsetFactory.php b/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldsetFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..36071cc7e3b38423edda48341018033542d449d1 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/ElementTauxRemuFieldsetFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Form\EtapeTauxRemu; + +use Psr\Container\ContainerInterface; + + +/** + * Description of ElementTauxRemuFieldsetFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementTauxRemuFieldsetFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementTauxRemuFieldset + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementTauxRemuFieldset + { + $form = new ElementTauxRemuFieldset(); + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuForm.php b/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuForm.php new file mode 100755 index 0000000000000000000000000000000000000000..b8934988ab750bde466ceff7ef6fd02053c2966a --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuForm.php @@ -0,0 +1,248 @@ +<?php + +namespace OffreFormation\Form\EtapeTauxRemu; + +use Application\Form\AbstractForm; +use Laminas\Form\Element\Select; +use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use Paiement\Entity\Db\TauxRemu; +use Paiement\Service\TauxRemuServiceAwareTrait; +use RuntimeException; + + +/** + * Formulaire de saisie, pour chacun des éléments d'une étape, des taux de rému + * + */ +class EtapeTauxRemuForm extends AbstractForm +{ + use TauxRemuServiceAwareTrait; + use ElementTauxRemuFieldsetAwareTrait; + + /** + * Etape + * + * @var Etape + */ + protected $etape; + + /** + * Centres de couts pour chaque (code de) type d'heures. + * + * @var TauxRemu[][] + */ + protected $tauxRemus = []; + + + + public function init() + { + $this->setName('etape-taux-remu'); + $this->setAttribute('class', 'etape-taux-remu'); + $hydrator = new EtapeTauxRemuFormHydrator; + $this->setHydrator($hydrator); + $this->setAllowedObjectBindingClass(Etape::class); + } + + + + public function build() + { + $elements = $this->getEtape()->getElementPedagogique(); + foreach ($elements as $element) { + $this->add($this->createFieldset($element)); + } + $this->add($this->createSelectElement()); + + + $this->add([ + 'name' => 'id', + 'type' => 'Hidden', + ]); + + $this->add([ + 'name' => 'submit', + 'type' => 'Submit', + 'attributes' => [ + 'value' => 'Enregistrer', + 'class' => 'btn btn-primary', + ], + ]); + } + + + + private function createFieldset(ElementPedagogique $element) + { + $f = $this->getFieldsetEtapeTauxRemuElementTauxRemu(); + /* @var $f ElementTauxRemuFieldset */ + $f->setName('EL' . $element->getId()); + $f->setElementPedagogique($element); + + return $f; + } + + + + /** + * + * @param Etape $object + * + * @return self + */ + public function setObject($object) + { + if ($object instanceof Etape) { + $this->setEtape($object); + $this->build(); + } + + return parent::setObject($object); + } + + + + /** + * Should return an array specification compatible with + * {@link Laminas\InputFilter\Factory::createInputFilter()}. + * + * @return array + */ + public function getInputFilterSpecification() + { + $elements = $this->getEtape()->getElementPedagogique(); + $filters = []; + $filters['tauxRemu'] = [ + 'required' => false, + ]; + foreach ($elements as $element) { + $filters['EL' . $element->getId()] = [ + 'required' => false, + ]; + } + + return $filters; + } + + + + /** + * Retourne les taux de rémunération possibles + * + * @return TauxRemu[] + */ + protected function getTauxRemus() + { + if (!array_key_exists('tauxRemu', $this->tauxRemus)) { + $tauxRems = []; + $elements = $this->getEtape()->getElementPedagogique(); + foreach ($elements as $element) { + $elFieldset = $this->get('EL' . $element->getId()); + /* @var $elFieldset ElementTauxRemuFieldset */ + + $elementTauxRemu = $elFieldset->getTauxRemus(); + foreach ($elementTauxRemu as $tauxRemu) { + if (!isset($tauxRems[$tauxRemu->getId()])) { + $tauxRems[$tauxRemu->getId()] = $tauxRemu; + } + } + } + $this->tauxRemus['tauxRemu'] = $tauxRems; + } + + return $this->tauxRemus['tauxRemu']; + } + + + + /** + * Retourne l'étape courante (si l'objet a été préalablement associé) + * + * @return Etape + */ + public + function getEtape() + { + if (!$this->etape) { + throw new RuntimeException('Aucune étape spécifiée.'); + } + + return $this->etape; + } + + + + public + function setEtape(Etape $etape) + { + $this->etape = $etape; + + return $this; + } + + + + /** + * + * + * @return Select + */ + private + function createSelectElement() + { + $element = new Select('tauxRemu'); + $element + ->setLabel('tauxRemu') + ->setValueOptions(['' => '(Aucun)'] + $this->getServiceTauxRemu()->formatTauxRemus($this->getTauxRemus())) + ->setAttribute('class', 'form-control taux-remus header-select selectpicker') + ->setAttribute('data-live-search', 'true'); + + return $element; + } +} + + + + + +class EtapeTauxRemuFormHydrator implements HydratorInterface +{ + + /** + * Hydrate $object with the provided $data. + * + * @param array $data + * @param Etape $object + * + * @return object + */ + public function hydrate(array $data, $object) + { + return $object; + } + + + + /** + * Extract values from an object + * + * @param Etape $object + * + * @return array + */ + public function extract($object): array + { + $data = [ + 'id' => $object->getId(), + ]; + + $elements = $object->getElementPedagogique(); + foreach ($elements as $element) { + $data['EL' . $element->getId()] = $element; + } + + return $data; + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuFormAwareTrait.php b/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..fa1467aadcabf37529f6a176f8d129ffb75623e4 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuFormAwareTrait.php @@ -0,0 +1,46 @@ +<?php + +namespace OffreFormation\Form\EtapeTauxRemu; + +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\NotFoundExceptionInterface; + +/** + * Description of EtapeTauxRemuFormAwareTrait + * + * @author UnicaenCode + */ +trait EtapeTauxRemuFormAwareTrait +{ + protected ?EtapeTauxRemuForm $formEtapeTauxRemuEtapeTauxRemu = null; + + + + /** + * @param EtapeTauxRemuForm|null $formEtapeTauxRemuEtapeTauxRemu + * + * @return self + */ + public function setFormEtapeTauxRemuEtapeTauxRemu(?EtapeTauxRemuForm $formEtapeTauxRemuEtapeTauxRemu) + { + $this->formEtapeTauxRemuEtapeTauxRemu = $formEtapeTauxRemuEtapeTauxRemu; + + return $this; + } + + + + /** + * @return EtapeTauxRemuForm|null + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + */ + public function getFormEtapeTauxRemuEtapeTauxRemu(): ?EtapeTauxRemuForm + { + if (!empty($this->formEtapeTauxRemuEtapeTauxRemu)) { + return $this->formEtapeTauxRemuEtapeTauxRemu; + } + + return \Application::$container->get('FormElementManager')->get(EtapeTauxRemuForm::class); + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuFormFactory.php b/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..e88e097a2068e08a9f6a9e27583960493ed3ea1c --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/EtapeTauxRemuFormFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Form\EtapeTauxRemu; + +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeTauxRemuFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeTauxRemuFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeTauxRemuForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeTauxRemuForm + { + $form = new EtapeTauxRemuForm(); + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/Interfaces/ElementTauxRemuFieldsetAwareInterface.php b/module/OffreFormation/src/Form/EtapeTauxRemu/Interfaces/ElementTauxRemuFieldsetAwareInterface.php new file mode 100755 index 0000000000000000000000000000000000000000..6a7e55c2933b8749616f5995008906e40d927cf0 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/Interfaces/ElementTauxRemuFieldsetAwareInterface.php @@ -0,0 +1,24 @@ +<?php + +namespace OffreFormation\Form\EtapeTauxRemu\Interfaces; + +use OffreFormation\Form\EtapeTauxRemu\ElementTauxRemuFieldset; + +/** + * Description of ElementTauxRemuFieldsetAwareInterface + * + * @author UnicaenCode + */ +interface ElementTauxRemuFieldsetAwareInterface +{ + /** + * @param ElementTauxRemuFieldset|null $formOffreFormationEtapeTauxRemuElementTauxRemuFieldset + * + * @return self + */ + public function setEtapeTauxRemuElementTauxRemuFieldset( ?ElementTauxRemuFieldset $formOffreFormationEtapeTauxRemuElementTauxRemuFieldset ); + + + + public function getEtapeTauxRemuElementTauxRemuFieldset(): ?ElementTauxRemuFieldset; +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/EtapeTauxRemu/Interfaces/EtapeTauxRemuFormAwareInterface.php b/module/OffreFormation/src/Form/EtapeTauxRemu/Interfaces/EtapeTauxRemuFormAwareInterface.php new file mode 100755 index 0000000000000000000000000000000000000000..33b2c2c43228e5cc0124185eb5308c89177daea3 --- /dev/null +++ b/module/OffreFormation/src/Form/EtapeTauxRemu/Interfaces/EtapeTauxRemuFormAwareInterface.php @@ -0,0 +1,24 @@ +<?php + +namespace OffreFormation\Form\EtapeCentreCout\Interfaces; + +use OffreFormation\Form\EtapeCentreCout\EtapeCentreCoutForm; + +/** + * Description of EtapeTauxRemuFormAwareInterface + * + * @author UnicaenCode + */ +interface EtapeTauxRemuFormAwareInterface +{ + /** + * @param EtapeCentreCoutForm|null $formOffreFormationEtapeCentreCoutEtapeCentreCout + * + * @return self + */ + public function setFormOffreFormationEtapeCentreCoutEtapeCentreCout( ?EtapeCentreCoutForm $formOffreFormationEtapeCentreCoutEtapeCentreCout ); + + + + public function getFormOffreFormationEtapeCentreCoutEtapeCentreCout(): ?EtapeCentreCoutForm; +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/Factory/DisciplineFormFactory.php b/module/OffreFormation/src/Form/Factory/DisciplineFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..16bcd0017081a42e20253ff9608a90ee6a604238 --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/DisciplineFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\DisciplineForm; + + +/** + * Description of DisciplineFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class DisciplineFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DisciplineForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DisciplineForm + { + $form = new DisciplineForm(); + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/Factory/ElementModulateursFieldsetFactory.php b/module/OffreFormation/src/Form/Factory/ElementModulateursFieldsetFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..aea6b0238cb30cd5cff46922654d10a92ae95a3d --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/ElementModulateursFieldsetFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\ElementModulateursFieldset; + + +/** + * Description of ElementModulateursFieldsetFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementModulateursFieldsetFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementModulateursFieldset + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementModulateursFieldset + { + $form = new ElementModulateursFieldset; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/Factory/ElementPedagogiqueRechercheFieldsetFactory.php b/module/OffreFormation/src/Form/Factory/ElementPedagogiqueRechercheFieldsetFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..c71eb9eae44dcb8a072466f54b402e5ec0d37aad --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/ElementPedagogiqueRechercheFieldsetFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\ElementPedagogiqueRechercheFieldset; + + +/** + * Description of ElementPedagogiqueRechercheFieldsetFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementPedagogiqueRechercheFieldsetFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementPedagogiqueRechercheFieldset + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementPedagogiqueRechercheFieldset + { + $form = new ElementPedagogiqueRechercheFieldset; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/Factory/ElementPedagogiqueSaisieFactory.php b/module/OffreFormation/src/Form/Factory/ElementPedagogiqueSaisieFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..8150ca26738bc36d12c6d8c278dfcaaedda2f60b --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/ElementPedagogiqueSaisieFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\ElementPedagogiqueSaisie; + + +/** + * Description of ElementPedagogiqueSaisieFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementPedagogiqueSaisieFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementPedagogiqueSaisie + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementPedagogiqueSaisie + { + $form = new ElementPedagogiqueSaisie; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/Factory/ElementPedagogiqueSynchronisationFormFactory.php b/module/OffreFormation/src/Form/Factory/ElementPedagogiqueSynchronisationFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..98bc06cb63a896ce376bb089aec42db8bc616778 --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/ElementPedagogiqueSynchronisationFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\ElementPedagogiqueSynchronisationForm; + + +/** + * Description of ElementPedagogiqueSynchronisationFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementPedagogiqueSynchronisationFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementPedagogiqueSynchronisationForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementPedagogiqueSynchronisationForm + { + $form = new ElementPedagogiqueSynchronisationForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/Factory/EtapeModulateursSaisieFactory.php b/module/OffreFormation/src/Form/Factory/EtapeModulateursSaisieFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..0a14c524331e46f71de6335a415d72aac654b68d --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/EtapeModulateursSaisieFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\EtapeModulateursSaisie; + + +/** + * Description of EtapeModulateursSaisieFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeModulateursSaisieFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeModulateursSaisie + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeModulateursSaisie + { + $form = new EtapeModulateursSaisie; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/Factory/EtapeSaisieFactory.php b/module/OffreFormation/src/Form/Factory/EtapeSaisieFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..3e5b7a5439723ce011264e05342324d4c4805437 --- /dev/null +++ b/module/OffreFormation/src/Form/Factory/EtapeSaisieFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\EtapeSaisie; + + +/** + * Description of EtapeSaisieFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeSaisieFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeSaisie + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeSaisie + { + $form = new EtapeSaisie; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/Application/src/Form/OffreFormation/Factory/VolumeHoraireEnsFormFactory.php b/module/OffreFormation/src/Form/Factory/VolumeHoraireEnsFormFactory.php similarity index 86% rename from module/Application/src/Form/OffreFormation/Factory/VolumeHoraireEnsFormFactory.php rename to module/OffreFormation/src/Form/Factory/VolumeHoraireEnsFormFactory.php index dc46957139a455bc730da2fb7a55d786ef2c1ead..88f06fd88cf769f8375690c6c4888cfd387a101a 100755 --- a/module/Application/src/Form/OffreFormation/Factory/VolumeHoraireEnsFormFactory.php +++ b/module/OffreFormation/src/Form/Factory/VolumeHoraireEnsFormFactory.php @@ -1,9 +1,9 @@ <?php -namespace Application\Form\OffreFormation\Factory; +namespace OffreFormation\Form\Factory; use Psr\Container\ContainerInterface; -use Application\Form\OffreFormation\VolumeHoraireEnsForm; +use OffreFormation\Form\VolumeHoraireEnsForm; /** diff --git a/module/Application/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieForm.php b/module/OffreFormation/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieForm.php similarity index 89% rename from module/Application/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieForm.php rename to module/OffreFormation/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieForm.php index 363c95d2e5418cb72bebdcffc2036c4728c3d290..7d97e6595f341701b9557a0b2a8cdb7b9a8afee8 100644 --- a/module/Application/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieForm.php +++ b/module/OffreFormation/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieForm.php @@ -1,12 +1,12 @@ <?php -namespace Application\Form\GroupeTypeFormation; +namespace OffreFormation\Form\GroupeTypeFormation; -use Application\Entity\Db\GroupeTypeFormation; use Application\Form\AbstractForm; use Application\Service\Traits\SourceServiceAwareTrait; use Laminas\Form\FormInterface; -use Application\Service\Traits\GroupeTypeFormationServiceAwareTrait; +use OffreFormation\Entity\Db\GroupeTypeFormation; +use OffreFormation\Service\Traits\GroupeTypeFormationServiceAwareTrait; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; diff --git a/module/Application/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieFormFactory.php b/module/OffreFormation/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieFormFactory.php similarity index 93% rename from module/Application/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieFormFactory.php rename to module/OffreFormation/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieFormFactory.php index 041bcaece4ebeea6de9b5ff714dbf6e3f0d523e0..531b2e3819d7b2063e266a6927063e498b7e39bb 100755 --- a/module/Application/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieFormFactory.php +++ b/module/OffreFormation/src/Form/GroupeTypeFormation/GroupeTypeFormationSaisieFormFactory.php @@ -1,6 +1,6 @@ <?php -namespace Application\Form\GroupeTypeFormation; +namespace OffreFormation\Form\GroupeTypeFormation; use Psr\Container\ContainerInterface; use UnicaenImport\Service\SchemaService; diff --git a/module/Application/src/Form/GroupeTypeFormation/Traits/GroupeTypeFormationSaisieFormAwareTrait.php b/module/OffreFormation/src/Form/GroupeTypeFormation/Traits/GroupeTypeFormationSaisieFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/GroupeTypeFormation/Traits/GroupeTypeFormationSaisieFormAwareTrait.php rename to module/OffreFormation/src/Form/GroupeTypeFormation/Traits/GroupeTypeFormationSaisieFormAwareTrait.php index bfde46003c9f00f31e560cc49804ea306b2471eb..9d020dff01061e76c7a01b56938b8c86f3e17df0 100755 --- a/module/Application/src/Form/GroupeTypeFormation/Traits/GroupeTypeFormationSaisieFormAwareTrait.php +++ b/module/OffreFormation/src/Form/GroupeTypeFormation/Traits/GroupeTypeFormationSaisieFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\GroupeTypeFormation\Traits; +namespace OffreFormation\Form\GroupeTypeFormation\Traits; -use Application\Form\GroupeTypeFormation\GroupeTypeFormationSaisieForm; +use OffreFormation\Form\GroupeTypeFormation\GroupeTypeFormationSaisieForm; /** * Description of GroupeTypeFormationSaisieFormAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Interfaces/ElementModulateursFieldsetAwareInterface.php b/module/OffreFormation/src/Form/Interfaces/ElementModulateursFieldsetAwareInterface.php similarity index 82% rename from module/Application/src/Form/OffreFormation/Interfaces/ElementModulateursFieldsetAwareInterface.php rename to module/OffreFormation/src/Form/Interfaces/ElementModulateursFieldsetAwareInterface.php index 9c7fa41999c22afc7efd3865cb1a8c925f47c9bb..e227f66ef2b4a12f2d6382a700b6198c6ffbb407 100755 --- a/module/Application/src/Form/OffreFormation/Interfaces/ElementModulateursFieldsetAwareInterface.php +++ b/module/OffreFormation/src/Form/Interfaces/ElementModulateursFieldsetAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Interfaces; +namespace OffreFormation\Form\Interfaces; -use Application\Form\OffreFormation\ElementModulateursFieldset; +use OffreFormation\Form\ElementModulateursFieldset; /** * Description of ElementModulateursFieldsetAwareInterface diff --git a/module/Application/src/Form/OffreFormation/Interfaces/ElementPedagogiqueRechercheFieldsetAwareInterface.php b/module/OffreFormation/src/Form/Interfaces/ElementPedagogiqueRechercheFieldsetAwareInterface.php similarity index 83% rename from module/Application/src/Form/OffreFormation/Interfaces/ElementPedagogiqueRechercheFieldsetAwareInterface.php rename to module/OffreFormation/src/Form/Interfaces/ElementPedagogiqueRechercheFieldsetAwareInterface.php index 36583f1a88153b2bf87c108dfb0ebd16170d491f..f08a67c43516358013952e3cd8ba7e26d9c4c660 100755 --- a/module/Application/src/Form/OffreFormation/Interfaces/ElementPedagogiqueRechercheFieldsetAwareInterface.php +++ b/module/OffreFormation/src/Form/Interfaces/ElementPedagogiqueRechercheFieldsetAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Interfaces; +namespace OffreFormation\Form\Interfaces; -use Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset; +use OffreFormation\Form\ElementPedagogiqueRechercheFieldset; /** * Description of ElementPedagogiqueRechercheFieldsetAwareInterface diff --git a/module/Application/src/Form/OffreFormation/Interfaces/ElementPedagogiqueSaisieAwareInterface.php b/module/OffreFormation/src/Form/Interfaces/ElementPedagogiqueSaisieAwareInterface.php similarity index 81% rename from module/Application/src/Form/OffreFormation/Interfaces/ElementPedagogiqueSaisieAwareInterface.php rename to module/OffreFormation/src/Form/Interfaces/ElementPedagogiqueSaisieAwareInterface.php index 6baf67721ea0fa52c138f9bfe2328a80fcfda250..687cd937cc7a675706d8daf4d7ff5b0a0df8d876 100755 --- a/module/Application/src/Form/OffreFormation/Interfaces/ElementPedagogiqueSaisieAwareInterface.php +++ b/module/OffreFormation/src/Form/Interfaces/ElementPedagogiqueSaisieAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Interfaces; +namespace OffreFormation\Form\Interfaces; -use Application\Form\OffreFormation\ElementPedagogiqueSaisie; +use OffreFormation\Form\ElementPedagogiqueSaisie; /** * Description of ElementPedagogiqueSaisieAwareInterface diff --git a/module/Application/src/Form/OffreFormation/Interfaces/EtapeModulateursSaisieAwareInterface.php b/module/OffreFormation/src/Form/Interfaces/EtapeModulateursSaisieAwareInterface.php similarity index 81% rename from module/Application/src/Form/OffreFormation/Interfaces/EtapeModulateursSaisieAwareInterface.php rename to module/OffreFormation/src/Form/Interfaces/EtapeModulateursSaisieAwareInterface.php index 8860018c96e4cd4dc78174ed0672d1b790c25582..aad86e9a53bbbb48b39cf0816ef93cc18e5e0b41 100755 --- a/module/Application/src/Form/OffreFormation/Interfaces/EtapeModulateursSaisieAwareInterface.php +++ b/module/OffreFormation/src/Form/Interfaces/EtapeModulateursSaisieAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Interfaces; +namespace OffreFormation\Form\Interfaces; -use Application\Form\OffreFormation\EtapeModulateursSaisie; +use OffreFormation\Form\EtapeModulateursSaisie; /** * Description of EtapeModulateursSaisieAwareInterface diff --git a/module/Application/src/Form/OffreFormation/Interfaces/EtapeSaisieAwareInterface.php b/module/OffreFormation/src/Form/Interfaces/EtapeSaisieAwareInterface.php similarity index 79% rename from module/Application/src/Form/OffreFormation/Interfaces/EtapeSaisieAwareInterface.php rename to module/OffreFormation/src/Form/Interfaces/EtapeSaisieAwareInterface.php index 8fe5fd465bf3faade9326c4342d5181d31110d1a..28761a508e11f5c69c035a926d9db2404ad4bea8 100755 --- a/module/Application/src/Form/OffreFormation/Interfaces/EtapeSaisieAwareInterface.php +++ b/module/OffreFormation/src/Form/Interfaces/EtapeSaisieAwareInterface.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Interfaces; +namespace OffreFormation\Form\Interfaces; -use Application\Form\OffreFormation\EtapeSaisie; +use OffreFormation\Form\EtapeSaisie; /** * Description of EtapeSaisieAwareInterface diff --git a/module/Application/src/Form/OffreFormation/TauxMixite/TauxMixiteFieldset.php b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFieldset.php similarity index 90% rename from module/Application/src/Form/OffreFormation/TauxMixite/TauxMixiteFieldset.php rename to module/OffreFormation/src/Form/TauxMixite/TauxMixiteFieldset.php index cf095f79f51d8e66fe31fc31fa82a8e77d464732..4e39eec78b87917afa7076d026462362557d34d7 100755 --- a/module/Application/src/Form/OffreFormation/TauxMixite/TauxMixiteFieldset.php +++ b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFieldset.php @@ -1,15 +1,15 @@ <?php -namespace Application\Form\OffreFormation\TauxMixite; +namespace OffreFormation\Form\TauxMixite; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use Application\Filter\FloatFromString; use Application\Filter\StringFromFloat; use Application\Form\AbstractFieldset; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\TypeHeures; use Laminas\Form\Element\Text; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; /** * Fieldset de saisie d'un centre de coûts pour chacun des types d'heures éligibles @@ -19,7 +19,7 @@ use Laminas\Hydrator\HydratorInterface; class TauxMixiteFieldset extends AbstractFieldset { use ElementPedagogiqueAwareTrait; - use \Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; + use \OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; public function init() @@ -116,7 +116,7 @@ class TauxMixiteFieldset extends AbstractFieldset class TauxMixiteFieldsetHydrator implements HydratorInterface { - use \Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; + use \OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; /** diff --git a/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFieldsetFactory.php b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFieldsetFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..55f905677744651ef5f889fa3525a8fece39d904 --- /dev/null +++ b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFieldsetFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Form\TauxMixite; + +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxMixiteFieldsetFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TauxMixiteFieldsetFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxMixiteFieldset + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxMixiteFieldset + { + $form = new TauxMixiteFieldset; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/Application/src/Form/OffreFormation/TauxMixite/TauxMixiteForm.php b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteForm.php similarity index 94% rename from module/Application/src/Form/OffreFormation/TauxMixite/TauxMixiteForm.php rename to module/OffreFormation/src/Form/TauxMixite/TauxMixiteForm.php index 9580bf484845eb8fe9bc57c74104b3ea85ed6148..6d62d6e8b18ce57a0f9c5670a72f341a97d09e0d 100755 --- a/module/Application/src/Form/OffreFormation/TauxMixite/TauxMixiteForm.php +++ b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteForm.php @@ -1,15 +1,15 @@ <?php -namespace Application\Form\OffreFormation\TauxMixite; +namespace OffreFormation\Form\TauxMixite; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; -use Application\Entity\Db\Traits\EtapeAwareTrait; -use Application\Entity\Db\TypeHeures; use Application\Form\AbstractForm; -use Application\Form\OffreFormation\TauxMixite\Traits\TauxMixiteFieldsetAwareTrait; use Laminas\Form\Element\Text; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use OffreFormation\Entity\Db\TypeHeures; +use OffreFormation\Form\TauxMixite\Traits\TauxMixiteFieldsetAwareTrait; +use OffreFormation\Entity\Db\Traits\EtapeAwareTrait; /** diff --git a/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFormFactory.php b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..415b85eaace8759260dcee68ff3f0826ee7cbd67 --- /dev/null +++ b/module/OffreFormation/src/Form/TauxMixite/TauxMixiteFormFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Form\TauxMixite; + +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxMixiteFormFactoryFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TauxMixiteFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxMixiteForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxMixiteForm + { + $form = new TauxMixiteForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/Application/src/Form/OffreFormation/TauxMixite/Traits/TauxMixiteFieldsetAwareTrait.php b/module/OffreFormation/src/Form/TauxMixite/Traits/TauxMixiteFieldsetAwareTrait.php similarity index 88% rename from module/Application/src/Form/OffreFormation/TauxMixite/Traits/TauxMixiteFieldsetAwareTrait.php rename to module/OffreFormation/src/Form/TauxMixite/Traits/TauxMixiteFieldsetAwareTrait.php index 94c48a839579155011b346c4ef96fe390f438616..3eabc567dd420534c591c8d8b8c24699988f9c49 100755 --- a/module/Application/src/Form/OffreFormation/TauxMixite/Traits/TauxMixiteFieldsetAwareTrait.php +++ b/module/OffreFormation/src/Form/TauxMixite/Traits/TauxMixiteFieldsetAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\TauxMixite\Traits; +namespace OffreFormation\Form\TauxMixite\Traits; -use Application\Form\OffreFormation\TauxMixite\TauxMixiteFieldset; +use OffreFormation\Form\TauxMixite\TauxMixiteFieldset; /** * Description of TauxMixiteFieldsetAwareTrait diff --git a/module/Application/src/Form/OffreFormation/TauxMixite/Traits/TauxMixiteFormAwareTrait.php b/module/OffreFormation/src/Form/TauxMixite/Traits/TauxMixiteFormAwareTrait.php similarity index 87% rename from module/Application/src/Form/OffreFormation/TauxMixite/Traits/TauxMixiteFormAwareTrait.php rename to module/OffreFormation/src/Form/TauxMixite/Traits/TauxMixiteFormAwareTrait.php index bf987251eccf26b7030fd80fb070e54c291fda84..9b1398dfe95be2b4d7ccd95f3d2659c74493dcce 100755 --- a/module/Application/src/Form/OffreFormation/TauxMixite/Traits/TauxMixiteFormAwareTrait.php +++ b/module/OffreFormation/src/Form/TauxMixite/Traits/TauxMixiteFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\TauxMixite\Traits; +namespace OffreFormation\Form\TauxMixite\Traits; -use Application\Form\OffreFormation\TauxMixite\TauxMixiteForm; +use OffreFormation\Form\TauxMixite\TauxMixiteForm; /** * Description of TauxMixiteFormAwareTrait diff --git a/module/Application/src/Form/Traits/DisciplineFormAwareTrait.php b/module/OffreFormation/src/Form/Traits/DisciplineFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/Traits/DisciplineFormAwareTrait.php rename to module/OffreFormation/src/Form/Traits/DisciplineFormAwareTrait.php index 07fb7d3e7ddf9a8098989a45d8152bec3cd4bea6..fdff9adf27b8e56f46a16426577861297f76a21d 100755 --- a/module/Application/src/Form/Traits/DisciplineFormAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/DisciplineFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\DisciplineForm; +use OffreFormation\Form\DisciplineForm; /** * Description of DisciplineFormAwareTrait diff --git a/module/OffreFormation/src/Form/Traits/ElementModulateurCentreCoutTauxRemuFormAwareTrait.php b/module/OffreFormation/src/Form/Traits/ElementModulateurCentreCoutTauxRemuFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..fdf9a2641837bf8114e17a836dcd51be591bc3b7 --- /dev/null +++ b/module/OffreFormation/src/Form/Traits/ElementModulateurCentreCoutTauxRemuFormAwareTrait.php @@ -0,0 +1,47 @@ +<?php + +namespace OffreFormation\Form\Traits; + +use OffreFormation\Form\ElementModulateurCentreCoutTauxRemuForm; +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\NotFoundExceptionInterface; + +/** + * Description of ElementModulateurCentreCoutTauxRemuFormAwareTrait + * + * @author UnicaenCode + */ +trait ElementModulateurCentreCoutTauxRemuFormAwareTrait +{ + protected ?ElementModulateurCentreCoutTauxRemuForm $formElementModulateurCentreCoutTauxRemu = null; + + + + /** + * @param ElementModulateurCentreCoutTauxRemuForm $formElementModulateurCentreCoutTauxRemu + * + * @return self + */ + public function setFormElementModulateurCentreCout(?ElementModulateurCentreCoutTauxRemuForm $formElementModulateurCentreCoutTauxRemu) + { + $this->formElementModulateurCentreCoutTauxRemu = $formElementModulateurCentreCoutTauxRemu; + + return $this; + } + + + + /** + * @return ElementModulateurCentreCoutTauxRemuForm|null + * + * + */ + public function getFormElementModulateurCentreCoutTauxRemu(): ?ElementModulateurCentreCoutTauxRemuForm + { + if (!empty($this->formElementModulateurCentreCoutTauxRemu)) { + return $this->formElementModulateurCentreCoutTauxRemu; + } + + return \Application::$container->get('FormElementManager')->get(ElementModulateurCentreCoutTauxRemuForm::class); + } +} \ No newline at end of file diff --git a/module/Application/src/Form/OffreFormation/Traits/ElementModulateursFieldsetAwareTrait.php b/module/OffreFormation/src/Form/Traits/ElementModulateursFieldsetAwareTrait.php similarity index 89% rename from module/Application/src/Form/OffreFormation/Traits/ElementModulateursFieldsetAwareTrait.php rename to module/OffreFormation/src/Form/Traits/ElementModulateursFieldsetAwareTrait.php index a762c651ebd5474c0f9219febe0535be94f9037d..565b8fc86abc0b11c7b9ef544d30a60797571bef 100755 --- a/module/Application/src/Form/OffreFormation/Traits/ElementModulateursFieldsetAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/ElementModulateursFieldsetAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\ElementModulateursFieldset; +use OffreFormation\Form\ElementModulateursFieldset; /** * Description of ElementModulateursFieldsetAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueRechercheFieldsetAwareTrait.php b/module/OffreFormation/src/Form/Traits/ElementPedagogiqueRechercheFieldsetAwareTrait.php similarity index 90% rename from module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueRechercheFieldsetAwareTrait.php rename to module/OffreFormation/src/Form/Traits/ElementPedagogiqueRechercheFieldsetAwareTrait.php index bc0a16a693981c019f64c7ed66bf02123579d002..aa68ee873d1cafd83e6b2544f90f9c107bd6f1d7 100755 --- a/module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueRechercheFieldsetAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/ElementPedagogiqueRechercheFieldsetAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset; +use OffreFormation\Form\ElementPedagogiqueRechercheFieldset; /** * Description of ElementPedagogiqueRechercheFieldsetAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueSaisieAwareTrait.php b/module/OffreFormation/src/Form/Traits/ElementPedagogiqueSaisieAwareTrait.php similarity index 90% rename from module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueSaisieAwareTrait.php rename to module/OffreFormation/src/Form/Traits/ElementPedagogiqueSaisieAwareTrait.php index e38f0ad800614768335c37a2ed950077f2bd1e29..b4057e7b402531f04e35d525f90332d9cccd1a40 100755 --- a/module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueSaisieAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/ElementPedagogiqueSaisieAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\ElementPedagogiqueSaisie; +use OffreFormation\Form\ElementPedagogiqueSaisie; /** * Description of ElementPedagogiqueSaisieAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueSynchronisationFormAwareTrait.php b/module/OffreFormation/src/Form/Traits/ElementPedagogiqueSynchronisationFormAwareTrait.php similarity index 90% rename from module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueSynchronisationFormAwareTrait.php rename to module/OffreFormation/src/Form/Traits/ElementPedagogiqueSynchronisationFormAwareTrait.php index 28a0b21bbf19e35fa700a0681762f8c6ca0bbdd5..dfbde01fe409e5541267bf12571d67ee99e040b0 100755 --- a/module/Application/src/Form/OffreFormation/Traits/ElementPedagogiqueSynchronisationFormAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/ElementPedagogiqueSynchronisationFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\ElementPedagogiqueSynchronisationForm; +use OffreFormation\Form\ElementPedagogiqueSynchronisationForm; /** * Description of ElementPedagogiqueSynchronisationFormAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Traits/EtapeModulateursSaisieAwareTrait.php b/module/OffreFormation/src/Form/Traits/EtapeModulateursSaisieAwareTrait.php similarity index 89% rename from module/Application/src/Form/OffreFormation/Traits/EtapeModulateursSaisieAwareTrait.php rename to module/OffreFormation/src/Form/Traits/EtapeModulateursSaisieAwareTrait.php index e2a05b72f1f95136d05060ffbd79494f1b38f13a..b70464589ed28a6731c704b57d259308830c6e74 100755 --- a/module/Application/src/Form/OffreFormation/Traits/EtapeModulateursSaisieAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/EtapeModulateursSaisieAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\EtapeModulateursSaisie; +use OffreFormation\Form\EtapeModulateursSaisie; /** * Description of EtapeModulateursSaisieAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Traits/EtapeSaisieAwareTrait.php b/module/OffreFormation/src/Form/Traits/EtapeSaisieAwareTrait.php similarity index 88% rename from module/Application/src/Form/OffreFormation/Traits/EtapeSaisieAwareTrait.php rename to module/OffreFormation/src/Form/Traits/EtapeSaisieAwareTrait.php index 2cf17722a8c716a79e649d104c5993488fd22a58..1a8079f043adcf9a9dbe7f1640be4e6e6a9463bc 100755 --- a/module/Application/src/Form/OffreFormation/Traits/EtapeSaisieAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/EtapeSaisieAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\EtapeSaisie; +use OffreFormation\Form\EtapeSaisie; /** * Description of EtapeSaisieAwareTrait diff --git a/module/Application/src/Form/OffreFormation/Traits/VolumeHoraireEnsFormAwareTrait.php b/module/OffreFormation/src/Form/Traits/VolumeHoraireEnsFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/OffreFormation/Traits/VolumeHoraireEnsFormAwareTrait.php rename to module/OffreFormation/src/Form/Traits/VolumeHoraireEnsFormAwareTrait.php index e176d71b52c1dfc092dcd8946aca846b7a9bc1c0..863e86fb4bf6b010e5e3ee991c814609ddd8d27d 100755 --- a/module/Application/src/Form/OffreFormation/Traits/VolumeHoraireEnsFormAwareTrait.php +++ b/module/OffreFormation/src/Form/Traits/VolumeHoraireEnsFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\OffreFormation\Traits; +namespace OffreFormation\Form\Traits; -use Application\Form\OffreFormation\VolumeHoraireEnsForm; +use OffreFormation\Form\VolumeHoraireEnsForm; /** * Description of VolumeHoraireEnsFormAwareTrait diff --git a/module/Application/src/Form/TypeFormation/Traits/TypeFormationSaisieFormAwareTrait.php b/module/OffreFormation/src/Form/TypeFormation/Traits/TypeFormationSaisieFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/TypeFormation/Traits/TypeFormationSaisieFormAwareTrait.php rename to module/OffreFormation/src/Form/TypeFormation/Traits/TypeFormationSaisieFormAwareTrait.php index 6b5b01fb0ad46dbd0f769cc3717f1851b5999eb2..8782141bb702c1a90e957cdd9ddd5a3fb48cac9e 100755 --- a/module/Application/src/Form/TypeFormation/Traits/TypeFormationSaisieFormAwareTrait.php +++ b/module/OffreFormation/src/Form/TypeFormation/Traits/TypeFormationSaisieFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\TypeFormation\Traits; +namespace OffreFormation\Form\TypeFormation\Traits; -use Application\Form\TypeFormation\TypeFormationSaisieForm; +use OffreFormation\Form\TypeFormation\TypeFormationSaisieForm; /** * Description of TypeFormationSaisieFormAwareTrait diff --git a/module/Application/src/Form/TypeFormation/TypeFormationSaisieForm.php b/module/OffreFormation/src/Form/TypeFormation/TypeFormationSaisieForm.php similarity index 89% rename from module/Application/src/Form/TypeFormation/TypeFormationSaisieForm.php rename to module/OffreFormation/src/Form/TypeFormation/TypeFormationSaisieForm.php index 0d8b9b01d3e3be0ac039f1133211b4ccf4aa1c55..0db32810519ef97ba8c188df44334d21ba5176ad 100644 --- a/module/Application/src/Form/TypeFormation/TypeFormationSaisieForm.php +++ b/module/OffreFormation/src/Form/TypeFormation/TypeFormationSaisieForm.php @@ -1,12 +1,12 @@ <?php -namespace Application\Form\TypeFormation; +namespace OffreFormation\Form\TypeFormation; -use Application\Entity\Db\TypeFormation; use Application\Form\AbstractForm; use Application\Service\Traits\SourceServiceAwareTrait; use Laminas\Form\FormInterface; -use Application\Service\Traits\GroupeTypeFormationServiceAwareTrait; +use OffreFormation\Entity\Db\TypeFormation; +use OffreFormation\Service\Traits\GroupeTypeFormationServiceAwareTrait; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; diff --git a/module/Application/src/Form/TypeFormation/TypeFormationSaisieFormFactory.php b/module/OffreFormation/src/Form/TypeFormation/TypeFormationSaisieFormFactory.php similarity index 93% rename from module/Application/src/Form/TypeFormation/TypeFormationSaisieFormFactory.php rename to module/OffreFormation/src/Form/TypeFormation/TypeFormationSaisieFormFactory.php index c34918af67a7aa94bc7a2539476ccd14fe083a4f..9fa4ced387f1cca0054394e72a98d02eb721384b 100755 --- a/module/Application/src/Form/TypeFormation/TypeFormationSaisieFormFactory.php +++ b/module/OffreFormation/src/Form/TypeFormation/TypeFormationSaisieFormFactory.php @@ -1,6 +1,6 @@ <?php -namespace Application\Form\TypeFormation; +namespace OffreFormation\Form\TypeFormation; use Psr\Container\ContainerInterface; use UnicaenImport\Service\SchemaService; diff --git a/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionSaisieFormFactory.php b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionSaisieFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..1ccc71fd37453465dd50c5d1a99e5f703b21b4e4 --- /dev/null +++ b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionSaisieFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\TypeIntervention\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\TypeIntervention\TypeInterventionSaisieForm; + + +/** + * Description of TypeInterventionSaisieFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionSaisieFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionSaisieForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionSaisieForm + { + $form = new TypeInterventionSaisieForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStatutDeleteFormFactory.php b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStatutDeleteFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..364781c18b4f11e48129b0f76360cb28db58336b --- /dev/null +++ b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStatutDeleteFormFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Form\TypeIntervention\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\TypeIntervention\TypeInterventionStatutDeleteForm; + + +/** + * Description of TypeInterventionStatutDeleteFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionStatutDeleteFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionStatutDeleteForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionStatutDeleteForm + { + $form = new TypeInterventionStatutDeleteForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStatutSaisieFormFactory.php b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStatutSaisieFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..87f29ec8d5f1984e741df78d3876f194a6aea84d --- /dev/null +++ b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStatutSaisieFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\TypeIntervention\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\TypeIntervention\TypeInterventionStatutSaisieForm; + + +/** + * Description of TypeInterventionStatutSaisieFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionStatutSaisieFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionStatutSaisieForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionStatutSaisieForm + { + $form = new TypeInterventionStatutSaisieForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStructureSaisieFormFactory.php b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStructureSaisieFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..f8b7d20954b359a0e1ea2cf698d91b2a8141cde1 --- /dev/null +++ b/module/OffreFormation/src/Form/TypeIntervention/Factory/TypeInterventionStructureSaisieFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Form\TypeIntervention\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Form\TypeIntervention\TypeInterventionStructureSaisieForm; + + +/** + * Description of TypeInterventionStructureSaisieFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionStructureSaisieFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionStructureSaisieForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionStructureSaisieForm + { + $form = new TypeInterventionStructureSaisieForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} + diff --git a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionSaisieFormAwareTrait.php b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionSaisieFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/TypeIntervention/Traits/TypeInterventionSaisieFormAwareTrait.php rename to module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionSaisieFormAwareTrait.php index bbe667c9880e57706cb395b7f81ef3fb5e5af7a5..6e692816bb1484402e3ef36ceb8631af515dca3b 100755 --- a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionSaisieFormAwareTrait.php +++ b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionSaisieFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\TypeIntervention\Traits; +namespace OffreFormation\Form\TypeIntervention\Traits; -use Application\Form\TypeIntervention\TypeInterventionSaisieForm; +use OffreFormation\Form\TypeIntervention\TypeInterventionSaisieForm; /** * Description of TypeInterventionSaisieFormAwareTrait diff --git a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStatutDeleteFormAwareTrait.php b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStatutDeleteFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStatutDeleteFormAwareTrait.php rename to module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStatutDeleteFormAwareTrait.php index 2a567e1ce9dd895dc5bcb0f5dffadb46ba3bbf9a..8793bfdceb32c8994759d59ecebbc61be0daa40a 100755 --- a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStatutDeleteFormAwareTrait.php +++ b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStatutDeleteFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\TypeIntervention\Traits; +namespace OffreFormation\Form\TypeIntervention\Traits; -use Application\Form\TypeIntervention\TypeInterventionStatutDeleteForm; +use OffreFormation\Form\TypeIntervention\TypeInterventionStatutDeleteForm; /** * Description of TypeInterventionStatutDeleteFormAwareTrait diff --git a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStatutSaisieFormAwareTrait.php b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStatutSaisieFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStatutSaisieFormAwareTrait.php rename to module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStatutSaisieFormAwareTrait.php index 46b98a9881e83d56d6c43ccdbbc272c372782ddf..2d94476cfdba94a42296f3067ce1d387d58b8528 100755 --- a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStatutSaisieFormAwareTrait.php +++ b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStatutSaisieFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\TypeIntervention\Traits; +namespace OffreFormation\Form\TypeIntervention\Traits; -use Application\Form\TypeIntervention\TypeInterventionStatutSaisieForm; +use OffreFormation\Form\TypeIntervention\TypeInterventionStatutSaisieForm; /** * Description of TypeInterventionStatutSaisieFormAwareTrait diff --git a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStructureSaisieFormAwareTrait.php b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStructureSaisieFormAwareTrait.php similarity index 89% rename from module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStructureSaisieFormAwareTrait.php rename to module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStructureSaisieFormAwareTrait.php index 02efc6f17f4a011bb14ef18a9ed472f690e5a5e6..fc0e7243d52b5ae533b42bd9f7e4d6c2ac62c25b 100755 --- a/module/Application/src/Form/TypeIntervention/Traits/TypeInterventionStructureSaisieFormAwareTrait.php +++ b/module/OffreFormation/src/Form/TypeIntervention/Traits/TypeInterventionStructureSaisieFormAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Form\TypeIntervention\Traits; +namespace OffreFormation\Form\TypeIntervention\Traits; -use Application\Form\TypeIntervention\TypeInterventionStructureSaisieForm; +use OffreFormation\Form\TypeIntervention\TypeInterventionStructureSaisieForm; /** * Description of TypeInterventionStructureSaisieFormAwareTrait diff --git a/module/Application/src/Form/TypeIntervention/TypeInterventionSaisieForm.php b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionSaisieForm.php similarity index 98% rename from module/Application/src/Form/TypeIntervention/TypeInterventionSaisieForm.php rename to module/OffreFormation/src/Form/TypeIntervention/TypeInterventionSaisieForm.php index 95a199e4d37dd1456586b6ab2bd09e9946669492..2df5e3ec85feb53584940c0c7b4240dce9181522 100755 --- a/module/Application/src/Form/TypeIntervention/TypeInterventionSaisieForm.php +++ b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionSaisieForm.php @@ -1,15 +1,15 @@ <?php -namespace Application\Form\TypeIntervention; +namespace OffreFormation\Form\TypeIntervention; -use Application\Entity\Db\Traits\TypeInterventionAwareTrait; -use Application\Entity\Db\TypeIntervention; -use Application\Form\AbstractForm; -use Laminas\Form\Element\Csrf; -use Laminas\Hydrator\HydratorInterface; use Application\Filter\FloatFromString; use Application\Filter\StringFromFloat; +use Application\Form\AbstractForm; use Application\Service\Traits\AnneeServiceAwareTrait; +use Laminas\Form\Element\Csrf; +use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\Traits\TypeInterventionAwareTrait; use UnicaenApp\Util; /** diff --git a/module/Application/src/Form/TypeIntervention/TypeInterventionStatutDeleteForm.php b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStatutDeleteForm.php similarity index 95% rename from module/Application/src/Form/TypeIntervention/TypeInterventionStatutDeleteForm.php rename to module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStatutDeleteForm.php index fb18fb5865b3e5420a8ee6962739231df58c757a..7fae0fb28ca5474967805d26fdaec2f8bd6d0108 100644 --- a/module/Application/src/Form/TypeIntervention/TypeInterventionStatutDeleteForm.php +++ b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStatutDeleteForm.php @@ -1,13 +1,13 @@ <?php -namespace Application\Form\TypeIntervention; +namespace OffreFormation\Form\TypeIntervention; -use Application\Entity\Db\Traits\TypeInterventionStatutAwareTrait; +use Application\Filter\FloatFromString; +use Application\Filter\StringFromFloat; use Application\Form\AbstractForm; use Intervenant\Service\StatutServiceAwareTrait; use Laminas\Form\Element\Csrf; -use Application\Filter\FloatFromString; -use Application\Filter\StringFromFloat; +use OffreFormation\Entity\Db\Traits\TypeInterventionStatutAwareTrait; /** * Description of TypeInterventionStatutDeleteForm diff --git a/module/Application/src/Form/TypeIntervention/TypeInterventionStatutSaisieForm.php b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStatutSaisieForm.php similarity index 91% rename from module/Application/src/Form/TypeIntervention/TypeInterventionStatutSaisieForm.php rename to module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStatutSaisieForm.php index 65380a534b09ff1395f29e3fc279fb28b1f19f59..e59923df92045a5c5c418d0342cfd6b0f86c326c 100644 --- a/module/Application/src/Form/TypeIntervention/TypeInterventionStatutSaisieForm.php +++ b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStatutSaisieForm.php @@ -1,15 +1,15 @@ <?php -namespace Application\Form\TypeIntervention; +namespace OffreFormation\Form\TypeIntervention; +use Application\Filter\FloatFromString; +use Application\Filter\StringFromFloat; use Application\Form\AbstractForm; -use Application\Entity\Db\Traits\TypeInterventionStatutAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; use Intervenant\Service\StatutServiceAwareTrait; use Laminas\Form\Element\Csrf; use Laminas\Hydrator\HydratorInterface; -use Application\Filter\FloatFromString; -use Application\Filter\StringFromFloat; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionStatutAwareTrait; use UnicaenApp\Service\EntityManagerAwareTrait; /** @@ -50,7 +50,7 @@ class TypeInterventionStatutSaisieForm extends AbstractForm $this->add([ 'name' => 'taux-hetd-service', 'options' => [ - 'label' => "Taux HETD service", + 'label' => "Taux HETD pour les heures de service", ], 'type' => 'text', ]); @@ -133,8 +133,8 @@ class TypeInterventionStatutHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data - * @param \Application\Entity\Db\TypeInterventionStatut $object + * @param array $data + * @param \OffreFormation\Entity\Db\TypeInterventionStatut $object * * @return object */ @@ -155,7 +155,7 @@ class TypeInterventionStatutHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\TypeInterventionStatut $object + * @param \OffreFormation\Entity\Db\TypeInterventionStatut $object * * @return array */ diff --git a/module/Application/src/Form/TypeIntervention/TypeInterventionStructureSaisieForm.php b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStructureSaisieForm.php similarity index 93% rename from module/Application/src/Form/TypeIntervention/TypeInterventionStructureSaisieForm.php rename to module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStructureSaisieForm.php index 6207c29b2f1bea802a10f0e38f055ba2d5e7e248..c151cef02a76255ec750ec68ccb5e578ef8fd89b 100755 --- a/module/Application/src/Form/TypeIntervention/TypeInterventionStructureSaisieForm.php +++ b/module/OffreFormation/src/Form/TypeIntervention/TypeInterventionStructureSaisieForm.php @@ -1,15 +1,15 @@ <?php -namespace Application\Form\TypeIntervention; +namespace OffreFormation\Form\TypeIntervention; -use Application\Entity\Db\Traits\TypeInterventionStructureAwareTrait; use Application\Form\AbstractForm; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; +use Application\Service\Traits\AnneeServiceAwareTrait; +use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; use Laminas\Form\Element\Csrf; use Laminas\Hydrator\HydratorInterface; -use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\AnneeServiceAwareTrait; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; +use OffreFormation\Entity\Db\Traits\TypeInterventionStructureAwareTrait; use UnicaenApp\Service\EntityManagerAwareTrait; use UnicaenApp\Util; @@ -146,8 +146,8 @@ class TypeInterventionStructureHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data - * @param \Application\Entity\Db\TypeInterventionStructure $object + * @param array $data + * @param \OffreFormation\Entity\Db\TypeInterventionStructure $object * * @return object */ @@ -173,7 +173,7 @@ class TypeInterventionStructureHydrator implements HydratorInterface /** * Extract values from an object * - * @param \Application\Entity\Db\TypeInterventionStructure $object + * @param \OffreFormation\Entity\Db\TypeInterventionStructure $object * * @return array */ diff --git a/module/Application/src/Form/OffreFormation/VolumeHoraireEnsForm.php b/module/OffreFormation/src/Form/VolumeHoraireEnsForm.php similarity index 95% rename from module/Application/src/Form/OffreFormation/VolumeHoraireEnsForm.php rename to module/OffreFormation/src/Form/VolumeHoraireEnsForm.php index 6b3076f6f60fd181f21145f86bf337fbe5a72378..d538ef953d0c58db788c25aaf119d07b4635681b 100755 --- a/module/Application/src/Form/OffreFormation/VolumeHoraireEnsForm.php +++ b/module/OffreFormation/src/Form/VolumeHoraireEnsForm.php @@ -1,11 +1,11 @@ <?php -namespace Application\Form\OffreFormation; +namespace OffreFormation\Form; -use Application\Entity\Db\VolumeHoraireEns; use Application\Filter\StringFromFloat; use Laminas\Form\Form; use Laminas\InputFilter\InputFilterProviderInterface; +use OffreFormation\Entity\Db\VolumeHoraireEns; /** diff --git a/module/Application/src/Processus/Factory/ReconductionProcessusFactory.php b/module/OffreFormation/src/Processus/Factory/ReconductionProcessusFactory.php similarity index 73% rename from module/Application/src/Processus/Factory/ReconductionProcessusFactory.php rename to module/OffreFormation/src/Processus/Factory/ReconductionProcessusFactory.php index 8499d07ef4be350087207e96e7397f2c886cfb24..b8d8a37926efc5cdf458e4372dd2d0927b009c0b 100755 --- a/module/Application/src/Processus/Factory/ReconductionProcessusFactory.php +++ b/module/OffreFormation/src/Processus/Factory/ReconductionProcessusFactory.php @@ -1,17 +1,15 @@ <?php -namespace Application\Processus\Factory; +namespace OffreFormation\Processus\Factory; -use Application\Processus\ReconductionProcessus; use Application\Service\AnneeService; -use Application\Service\CheminPedagogiqueService; use Application\Service\ContextService; -use Application\Service\ElementPedagogiqueService; -use Application\Service\EtapeService; -use Application\Service\VolumeHoraireEnsService; +use OffreFormation\Service\CheminPedagogiqueService; +use OffreFormation\Service\ElementPedagogiqueService; +use OffreFormation\Service\EtapeService; +use OffreFormation\Service\VolumeHoraireEnsService; +use OffreFormation\Processus\ReconductionProcessus; use Psr\Container\ContainerInterface; -use Laminas\ServiceManager\FactoryInterface; -use Laminas\ServiceManager\ServiceLocatorInterface; /** * diff --git a/module/Application/src/Processus/ReconductionProcessus.php b/module/OffreFormation/src/Processus/ReconductionProcessus.php similarity index 96% rename from module/Application/src/Processus/ReconductionProcessus.php rename to module/OffreFormation/src/Processus/ReconductionProcessus.php index 6715511f64844d3d1419cc8d05cf938c5d3fe58b..cb77c723588d7a543e1a9b83f814107d17c39902 100755 --- a/module/Application/src/Processus/ReconductionProcessus.php +++ b/module/OffreFormation/src/Processus/ReconductionProcessus.php @@ -1,18 +1,19 @@ <?php -namespace Application\Processus; +namespace OffreFormation\Processus; +use Application\Processus\AbstractProcessus; use Application\Service\Traits\AnneeServiceAwareTrait; use Application\Service\Traits\CentreCoutEpServiceAwareTrait; -use Application\Service\Traits\CheminPedagogiqueServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\ElementModulateurServiceAwareTrait; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Application\Service\Traits\EtapeServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; -use Application\Service\Traits\VolumeHoraireEnsServiceAwareTrait; use Doctrine\DBAL\Connection; use Doctrine\DBAL\ParameterType; +use OffreFormation\Service\Traits\CheminPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\ElementModulateurServiceAwareTrait; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Service\Traits\VolumeHoraireEnsServiceAwareTrait; /** * Description of ReconductionProcessus diff --git a/module/Application/src/Processus/Traits/ReconductionProcessusAwareTrait.php b/module/OffreFormation/src/Processus/Traits/ReconductionProcessusAwareTrait.php similarity index 89% rename from module/Application/src/Processus/Traits/ReconductionProcessusAwareTrait.php rename to module/OffreFormation/src/Processus/Traits/ReconductionProcessusAwareTrait.php index c83654108ec28351c7b32b908f83362bf94b4d14..e326654b6030c046cab819d07eb0817013e3a6bf 100755 --- a/module/Application/src/Processus/Traits/ReconductionProcessusAwareTrait.php +++ b/module/OffreFormation/src/Processus/Traits/ReconductionProcessusAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Processus\Traits; +namespace OffreFormation\Processus\Traits; -use Application\Processus\ReconductionProcessus; +use OffreFormation\Processus\ReconductionProcessus; /** * Description of ReconductionProcessusAwareTrait diff --git a/module/Application/src/Service/CentreCoutEpService.php b/module/OffreFormation/src/Service/CentreCoutEpService.php similarity index 94% rename from module/Application/src/Service/CentreCoutEpService.php rename to module/OffreFormation/src/Service/CentreCoutEpService.php index 051aa87ce4471f7eeba302725d657c7c0509c0f3..d32b472f35115fb6cab77dc6e07a7282c48da541 100755 --- a/module/Application/src/Service/CentreCoutEpService.php +++ b/module/OffreFormation/src/Service/CentreCoutEpService.php @@ -1,14 +1,15 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\CentreCoutEp; -use Application\Entity\Db\ElementPedagogique; use Application\Provider\Privilege\Privileges; +use Application\Service\AbstractEntityService; use Application\Service\Traits\CentreCoutServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; -use Application\Service\Traits\TypeHeuresServiceAwareTrait; use BjyAuthorize\Exception\UnAuthorizedException; +use OffreFormation\Entity\Db\CentreCoutEp; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Service\Traits\TypeHeuresServiceAwareTrait; /** * Description of CentreCoutEpService diff --git a/module/Application/src/Service/CheminPedagogiqueService.php b/module/OffreFormation/src/Service/CheminPedagogiqueService.php similarity index 88% rename from module/Application/src/Service/CheminPedagogiqueService.php rename to module/OffreFormation/src/Service/CheminPedagogiqueService.php index 96b1ce84d5975c25afe9a14a00bca0dc4ce592e9..3c579b4a6a010dcf5d898e056815f86b678632e2 100755 --- a/module/Application/src/Service/CheminPedagogiqueService.php +++ b/module/OffreFormation/src/Service/CheminPedagogiqueService.php @@ -1,8 +1,10 @@ <?php -namespace Application\Service; -use Application\Entity\Db\CheminPedagogique; +namespace OffreFormation\Service; + +use Application\Service\AbstractEntityService; use Application\Service\Traits\SourceServiceAwareTrait; +use OffreFormation\Entity\Db\CheminPedagogique; /** * Description of CheminPedagogique @@ -21,7 +23,7 @@ class CheminPedagogiqueService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\CheminPedagogique::class; + return \OffreFormation\Entity\Db\CheminPedagogique::class; } @@ -40,6 +42,7 @@ class CheminPedagogiqueService extends AbstractEntityService /** * Retourne une nouvelle entité, initialisée avec les bons paramètres + * * @return Etape */ public function newEntity() diff --git a/module/Application/src/Service/DisciplineService.php b/module/OffreFormation/src/Service/DisciplineService.php similarity index 82% rename from module/Application/src/Service/DisciplineService.php rename to module/OffreFormation/src/Service/DisciplineService.php index c8f9021cbe5be29049bcc614fd5049646ef765f9..9ce49ea3ee1ceb4812333f09b3047138100159cf 100755 --- a/module/Application/src/Service/DisciplineService.php +++ b/module/OffreFormation/src/Service/DisciplineService.php @@ -1,10 +1,12 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\Discipline; +use Application\Service\AbstractEntityService; +use Application\Service\RuntimeException; use Application\Service\Traits\SourceServiceAwareTrait; use Doctrine\ORM\QueryBuilder; +use OffreFormation\Entity\Db\Discipline; use UnicaenApp\Traits\SessionContainerTrait; /** @@ -35,7 +37,7 @@ class DisciplineService extends AbstractEntityService /** * Retourne une nouvelle entité, initialisée avec les bons paramètres * - * @return \Application\Entity\Db\Discipline + * @return \OffreFormation\Entity\Db\Discipline */ public function newEntity() { @@ -55,7 +57,7 @@ class DisciplineService extends AbstractEntityService */ public function orderBy(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->orderBy($alias . '.sourceCode'); diff --git a/module/Application/src/Service/DomaineFonctionnelService.php b/module/OffreFormation/src/Service/DomaineFonctionnelService.php similarity index 87% rename from module/Application/src/Service/DomaineFonctionnelService.php rename to module/OffreFormation/src/Service/DomaineFonctionnelService.php index 500325e2a9ac3c9676b6539ec316f98c4b0cb201..8d3403c76963148ee100809c9df62cda23461735 100755 --- a/module/Application/src/Service/DomaineFonctionnelService.php +++ b/module/OffreFormation/src/Service/DomaineFonctionnelService.php @@ -1,7 +1,10 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; +use Application\Service\AbstractEntityService; +use RuntimeException; +use Application\Service\Traits; use Doctrine\ORM\QueryBuilder; use Application\Entity\Db\DomaineFonctionnel; @@ -55,7 +58,7 @@ class DomaineFonctionnelService extends AbstractEntityService */ public function getList(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.libelle"); return parent::getList($qb, $alias); diff --git a/module/Application/src/Service/ElementModulateurService.php b/module/OffreFormation/src/Service/ElementModulateurService.php similarity index 88% rename from module/Application/src/Service/ElementModulateurService.php rename to module/OffreFormation/src/Service/ElementModulateurService.php index 08b1212116ea29ec84951cf7df269fca03f9af9b..b8a30f8d2650567e2e4782a88a3addee3c65b629 100755 --- a/module/Application/src/Service/ElementModulateurService.php +++ b/module/OffreFormation/src/Service/ElementModulateurService.php @@ -1,12 +1,12 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\ElementModulateur; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Modulateur; +use Application\Service\AbstractEntityService; use Application\Service\Traits\ModulateurServiceAwareTrait; use Doctrine\ORM\QueryBuilder; +use OffreFormation\Entity\Db\ElementPedagogique; +use RuntimeException; /** * Description of ElementModulateur @@ -15,7 +15,7 @@ use Doctrine\ORM\QueryBuilder; */ class ElementModulateurService extends AbstractEntityService { - use Traits\ElementPedagogiqueServiceAwareTrait; + use \OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; use ModulateurServiceAwareTrait; @@ -28,7 +28,7 @@ class ElementModulateurService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\ElementModulateur::class; + return \OffreFormation\Entity\Db\ElementModulateur::class; } @@ -55,7 +55,7 @@ class ElementModulateurService extends AbstractEntityService */ public function finderByContext(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $this->join($this->getServiceElementPedagogique(), $qb, 'elementPedagogique', false, $alias); diff --git a/module/Application/src/Service/ElementPedagogiqueService.php b/module/OffreFormation/src/Service/ElementPedagogiqueService.php similarity index 88% rename from module/Application/src/Service/ElementPedagogiqueService.php rename to module/OffreFormation/src/Service/ElementPedagogiqueService.php index 8be38af7bf0e2e42d19d165d1f5807273497e5d7..fdd0978bcf53c26e9952fcc063dd2f446259e937 100755 --- a/module/Application/src/Service/ElementPedagogiqueService.php +++ b/module/OffreFormation/src/Service/ElementPedagogiqueService.php @@ -1,18 +1,24 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\ElementTauxRegimes; -use Application\Entity\Db\Etape; +use Application\Entity\Db\Annee; use Application\Entity\NiveauEtape; use Application\Provider\Privilege\Privileges; -use Application\Service\Traits\CheminPedagogiqueServiceAwareTrait; -use Application\Service\Traits\ElementModulateurServiceAwareTrait; +use Application\Service\AbstractEntityService; use Application\Service\Traits\SourceServiceAwareTrait; use BjyAuthorize\Exception\UnAuthorizedException; +use Doctrine\ORM\Exception\ORMException; +use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\QueryBuilder; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Annee; +use OffreFormation\Service\Traits\CheminPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\ElementModulateurServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\ElementTauxRegimes; +use OffreFormation\Entity\Db\Etape; +use Paiement\Entity\Db\TauxRemu; +use RuntimeException; +use function count; /** * Description of ElementPedagogique @@ -108,7 +114,7 @@ class ElementPedagogiqueService extends AbstractEntityService $whereContext[] = 'CONCAT(gtf.libelle_court, e.niveau) = :niveau'; $params['niveau'] = $niveau; } - if (isset($filters['etape']) && $filters['etape'] instanceof \Application\Entity\Db\Etape) { + if (isset($filters['etape']) && $filters['etape'] instanceof \OffreFormation\Entity\Db\Etape) { $whereContext[] = 'cp.etape_id = :etape'; $params['etape'] = $filters['etape']->getId(); } @@ -133,7 +139,8 @@ select * from ( pe.libelle_long libelle_pe, gtf.libelle_court libelle_gtf, tf.libelle_long libelle_tf, - ep.source_code || ' ' || ep.libelle|| ' ' || e.source_code || ' ' || e.libelle || ' ' || gtf.LIBELLE_COURT || ' ' || e.NIVEAU || ' ' || tf.LIBELLE_COURT etape_info + ep.source_code || ' ' || ep.libelle|| ' ' || e.source_code || ' ' || e.libelle || ' ' || gtf.LIBELLE_COURT || ' ' || e.NIVEAU || ' ' || tf.LIBELLE_COURT etape_info, + CASE WHEN tiep.element_pedagogique_id is NULL THEN 0 ELSE 1 END has_type_intervention from chemin_pedagogique cp JOIN element_pedagogique ep ON$af cp.element_pedagogique_id = ep.id AND ep.histo_destruction IS NULL$orEp @@ -142,6 +149,7 @@ select * from ( JOIN GROUPE_TYPE_FORMATION gtf on tf.GROUPE_ID = gtf.ID JOIN structure s ON s.id = e.structure_id OR s.id = ep.structure_id LEFT JOIN periode pe ON ep.periode_id = pe.id + LEFT JOIN (SELECT DISTINCT element_pedagogique_id FROM type_intervention_ep WHERE histo_destruction IS NULL) tiep ON tiep.element_pedagogique_id = ep.id where (cp.histo_destruction IS NULL$orCp) and $whereTerm @@ -272,7 +280,7 @@ where rang = 1 /** * Retourne une nouvelle entité, initialisée avec les bons paramètres * - * @return \Application\Entity\Db\ElementPedagogique + * @return \OffreFormation\Entity\Db\ElementPedagogique */ public function newEntity() { @@ -290,7 +298,7 @@ where rang = 1 /** * Sauvegarde une entité * - * @param \Application\Entity\Db\ElementPedagogique $entity + * @param \OffreFormation\Entity\Db\ElementPedagogique $entity * * @return ElementPedagogique * @throws \RuntimeException @@ -304,7 +312,7 @@ where rang = 1 // si absence de chemin pédagogique, création du chemin if (!$entity->getCheminPedagogique()->count()) { $cp = $this->getServiceCheminPedagogique()->newEntity(); - /* @var $cp \Application\Entity\Db\CheminPedagogique */ + /* @var $cp \OffreFormation\Entity\Db\CheminPedagogique */ $cp ->setEtape($entity->getEtape()) ->setElementPedagogique($entity); @@ -322,8 +330,8 @@ where rang = 1 /** * Supprime (historise par défaut) le service spécifié. * - * @param \Application\Entity\Db\ElementPedagogique $entity Entité à détruire - * @param bool $softDelete + * @param \OffreFormation\Entity\Db\ElementPedagogique $entity Entité à détruire + * @param bool $softDelete * * @return self */ @@ -334,7 +342,7 @@ where rang = 1 } foreach ($entity->getCheminPedagogique() as $cp) { - /* @var $cp \Application\Entity\Db\CheminPedagogique */ + /* @var $cp \OffreFormation\Entity\Db\CheminPedagogique */ $cp->getEtape()->removeCheminPedagogique($cp); $entity->removeCheminPedagogique($cp); $this->getServiceCheminPedagogique()->delete($cp); @@ -345,6 +353,24 @@ where rang = 1 + /** + * @param ElementPedagogique $elementPedagogique + * @param TauxRemu|null $tauxRemu + * + * @return void + * @throws ORMException + * @throws OptimisticLockException + */ + public function updateTauxRemu(ElementPedagogique $elementPedagogique, ?TauxRemu $tauxRemu){ + + /** @var ElementPedagogique $elp */ + $elp = $this->get($elementPedagogique->getId()); + $elp->setTauxRemuEp($tauxRemu); + $this->getEntityManager()->persist($elp); + $this->getEntityManager()->flush($elp); + + } + public function forcerTauxMixite(ElementPedagogique $elementPedagogique, $tauxFi, $tauxFc, $tauxFa) { /** @var ElementTauxRegimes $etr */ diff --git a/module/Application/src/Service/EtapeService.php b/module/OffreFormation/src/Service/EtapeService.php similarity index 93% rename from module/Application/src/Service/EtapeService.php rename to module/OffreFormation/src/Service/EtapeService.php index 12c44897156d1e5db3cf3d6a265256b7ca9b640e..93ac453d88af2d78f7f7db409133aa126359ef58 100755 --- a/module/Application/src/Service/EtapeService.php +++ b/module/OffreFormation/src/Service/EtapeService.php @@ -1,17 +1,21 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; use Application\Entity\Db\Annee; use Application\Provider\Privilege\Privileges; -use Application\Service\Traits\CheminPedagogiqueServiceAwareTrait; +use Application\Service\AbstractEntityService; +use Application\Service\Traits; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\GroupeTypeFormationServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; -use Application\Service\Traits\TypeFormationServiceAwareTrait; use BjyAuthorize\Exception\UnAuthorizedException; use Doctrine\ORM\QueryBuilder; -use Application\Entity\Db\Etape; +use OffreFormation\Service\Traits\CheminPedagogiqueServiceAwareTrait; +use OffreFormation\Service\Traits\ElementModulateurServiceAwareTrait; +use OffreFormation\Service\Traits\GroupeTypeFormationServiceAwareTrait; +use OffreFormation\Service\Traits\TypeFormationServiceAwareTrait; +use OffreFormation\Entity\Db\Etape; +use RuntimeException; /** * Description of ElementPedagogique @@ -25,7 +29,7 @@ class EtapeService extends AbstractEntityService { use Traits\LocalContextServiceAwareTrait; use Traits\SourceServiceAwareTrait; - use Traits\ElementModulateurServiceAwareTrait; + use ElementModulateurServiceAwareTrait; use TypeFormationServiceAwareTrait; use GroupeTypeFormationServiceAwareTrait; use StructureServiceAwareTrait; @@ -302,7 +306,7 @@ class EtapeService extends AbstractEntityService foreach ($entity->getCheminPedagogique() as $cp) { if ($cp->estNonHistorise()) { - /* @var $cp \Application\Entity\Db\CheminPedagogique */ + /* @var $cp \OffreFormation\Entity\Db\CheminPedagogique */ $cp->getElementPedagogique()->removeCheminPedagogique($cp); $entity->removeCheminPedagogique($cp); $this->getServiceCheminPedagogique()->delete($cp); diff --git a/module/OffreFormation/src/Service/Factory/CheminPedagogiqueServiceFactory.php b/module/OffreFormation/src/Service/Factory/CheminPedagogiqueServiceFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..e24dc3799863cf6fa9494f119c625dd9acd5a566 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/CheminPedagogiqueServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\CheminPedagogiqueService; + + + +/** + * Description of CheminPedagogiqueServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class CheminPedagogiqueServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return CheminPedagogiqueService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): CheminPedagogiqueService + { + $service = new CheminPedagogiqueService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Service/Factory/DisciplineServiceFactory.php b/module/OffreFormation/src/Service/Factory/DisciplineServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..bd6b578d122b44173aafc32d4b5184494ebd21e6 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/DisciplineServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\DisciplineService; + + +/** + * Description of DisciplineServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class DisciplineServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DisciplineService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DisciplineService + { + $service = new DisciplineService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/DomaineFonctionnelServiceFactory.php b/module/OffreFormation/src/Service/Factory/DomaineFonctionnelServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..782b816bd23b288db7617417b3248f82f3e09add --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/DomaineFonctionnelServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\DomaineFonctionnelService; + + +/** + * Description of DomaineFonctionnelServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class DomaineFonctionnelServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return DomaineFonctionnelService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): DomaineFonctionnelService + { + $service = new DomaineFonctionnelService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/ElementModulateurServiceFactory.php b/module/OffreFormation/src/Service/Factory/ElementModulateurServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..0d1a780798a4abd510c99b76ac29412735651f98 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/ElementModulateurServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\ElementModulateurService; + + +/** + * Description of ElementModulateurServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementModulateurServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementModulateurService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementModulateurService + { + $service = new ElementModulateurService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/ElementPedagogiqueServiceFactory.php b/module/OffreFormation/src/Service/Factory/ElementPedagogiqueServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..9d66afa37a04aaeea48dab4a25da5226c54d8db3 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/ElementPedagogiqueServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\ElementPedagogiqueService; + + +/** + * Description of ElementPedagogiqueServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementPedagogiqueServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementPedagogiqueService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementPedagogiqueService + { + $service = new ElementPedagogiqueService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/EtapeServiceFactory.php b/module/OffreFormation/src/Service/Factory/EtapeServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..5a95de75428d9bc5577f08aad00bc2a39cf45d84 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/EtapeServiceFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\EtapeService; + + +/** + * Description of EtapeServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeService + { + $service = new EtapeService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} \ No newline at end of file diff --git a/module/OffreFormation/src/Service/Factory/GroupeTypeFormationServiceFactory.php b/module/OffreFormation/src/Service/Factory/GroupeTypeFormationServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..c06b99eea86ed09ad778098a70681c4ebecd1ab8 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/GroupeTypeFormationServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\GroupeTypeFormationService; + + +/** + * Description of GroupeTypeFormationServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class GroupeTypeFormationServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return GroupeTypeFormationService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): GroupeTypeFormationService + { + $service = new GroupeTypeFormationService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/NiveauEtapeServiceFactory.php b/module/OffreFormation/src/Service/Factory/NiveauEtapeServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..9fa3e71c323f243751656c17e3d33a274e8d3e64 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/NiveauEtapeServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\NiveauEtapeService; + + +/** + * Description of NiveauEtapeServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class NiveauEtapeServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return NiveauEtapeService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): NiveauEtapeService + { + $service = new NiveauEtapeService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/NiveauFormationServiceFactory.php b/module/OffreFormation/src/Service/Factory/NiveauFormationServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..1fa84a8e709b68b87e7e6d1901d661bfe4b62f13 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/NiveauFormationServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\NiveauFormationService; + + +/** + * Description of NiveauFormationServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class NiveauFormationServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return NiveauFormationService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): NiveauFormationService + { + $service = new NiveauFormationService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/OffreFormationServiceFactory.php b/module/OffreFormation/src/Service/Factory/OffreFormationServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..f420a9d6ec0184434edeafdc04adba8c90baa442 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/OffreFormationServiceFactory.php @@ -0,0 +1,34 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\OffreFormationService; + + + +/** + * Description of OffreFormationServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class OffreFormationServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return OffreFormationService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): OffreFormationService + { + $service = new OffreFormationService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/TypeFormationServiceFactory.php b/module/OffreFormation/src/Service/Factory/TypeFormationServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..8e676235895efa9c6c98298242e64ef166dee9fb --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/TypeFormationServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\TypeFormationService; + + +/** + * Description of TypeFormationServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeFormationServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeFormationService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeFormationService + { + $service = new TypeFormationService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/TypeInterventionStatutServiceFactory.php b/module/OffreFormation/src/Service/Factory/TypeInterventionStatutServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..479b350c13ba3a44fb7a91ec015d9c24817edf2f --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/TypeInterventionStatutServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\TypeInterventionStatutService; + + +/** + * Description of TypeInterventionStatutServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionStatutServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionStatutService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionStatutService + { + $service = new TypeInterventionStatutService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/TypeInterventionStructureServiceFactory.php b/module/OffreFormation/src/Service/Factory/TypeInterventionStructureServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..159ac213d9fcb033e1031526cac5e68293713af5 --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/TypeInterventionStructureServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\TypeInterventionStructureService; + + +/** + * Description of TypeInterventionStructureServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionStructureServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionStructureService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionStructureService + { + $service = new TypeInterventionStructureService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/OffreFormation/src/Service/Factory/VolumeHoraireEnsServiceFactory.php b/module/OffreFormation/src/Service/Factory/VolumeHoraireEnsServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..2478972e6f9dba6e5504b6058aa9918f2ea3321e --- /dev/null +++ b/module/OffreFormation/src/Service/Factory/VolumeHoraireEnsServiceFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\Service\Factory; + +use Psr\Container\ContainerInterface; +use OffreFormation\Service\VolumeHoraireEnsService; + + +/** + * Description of VolumeHoraireEnsServiceFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class VolumeHoraireEnsServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return VolumeHoraireEnsService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): VolumeHoraireEnsService + { + $service = new VolumeHoraireEnsService; + + /* Injectez vos dépendances ICI */ + + return $service; + } +} + diff --git a/module/Application/src/Service/GroupeTypeFormationService.php b/module/OffreFormation/src/Service/GroupeTypeFormationService.php similarity index 78% rename from module/Application/src/Service/GroupeTypeFormationService.php rename to module/OffreFormation/src/Service/GroupeTypeFormationService.php index 45c897add5560594408af224b9594478b8918e6e..276137d137e38635215ce704a15604e36377c3d6 100755 --- a/module/Application/src/Service/GroupeTypeFormationService.php +++ b/module/OffreFormation/src/Service/GroupeTypeFormationService.php @@ -1,8 +1,11 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\GroupeTypeFormation; +use Application\Service\AbstractEntityService; +use Application\Service\Periode; +use Application\Service\RuntimeException; +use OffreFormation\Entity\Db\GroupeTypeFormation; /** * Description of GroupeTypeFormation @@ -22,7 +25,7 @@ class GroupeTypeFormationService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\GroupeTypeFormation::class; + return \OffreFormation\Entity\Db\GroupeTypeFormation::class; } diff --git a/module/Application/src/Service/NiveauEtapeService.php b/module/OffreFormation/src/Service/NiveauEtapeService.php similarity index 92% rename from module/Application/src/Service/NiveauEtapeService.php rename to module/OffreFormation/src/Service/NiveauEtapeService.php index 3579de2135a624e36c69da4bb8e60df17c15b2a3..e5354e5d091f23fc1d75a6fb760c2cc6e2bf6608 100755 --- a/module/Application/src/Service/NiveauEtapeService.php +++ b/module/OffreFormation/src/Service/NiveauEtapeService.php @@ -1,8 +1,9 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; use Application\Entity\NiveauEtape; +use Application\Service\AbstractService; /** * Description of NiveauEtape diff --git a/module/Application/src/Service/NiveauFormationService.php b/module/OffreFormation/src/Service/NiveauFormationService.php similarity index 83% rename from module/Application/src/Service/NiveauFormationService.php rename to module/OffreFormation/src/Service/NiveauFormationService.php index 9c14f90c3b1210de3db1afe65f1a530256ffb1d3..44b66f98625f475c628979506c4a884656d6b4c8 100755 --- a/module/Application/src/Service/NiveauFormationService.php +++ b/module/OffreFormation/src/Service/NiveauFormationService.php @@ -1,8 +1,10 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\NiveauFormation; +use Application\Service\AbstractEntityService; +use OffreFormation\Entity\Db\NiveauFormation; +use RuntimeException; /** * Description of NiveauFormation diff --git a/module/Application/src/Service/OffreFormationService.php b/module/OffreFormation/src/Service/OffreFormationService.php similarity index 96% rename from module/Application/src/Service/OffreFormationService.php rename to module/OffreFormation/src/Service/OffreFormationService.php index 7339418541776893dfb7b3a96b3c68d7b138e0c9..bb819a66927413e6eb7c87f4587f19bd7a842fbb 100755 --- a/module/Application/src/Service/OffreFormationService.php +++ b/module/OffreFormation/src/Service/OffreFormationService.php @@ -1,16 +1,17 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\CheminPedagogique; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; use Application\Entity\NiveauEtape; +use Application\Service\AbstractEntityService; use Application\Service\Traits\AnneeServiceAwareTrait; use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; use Application\Service\Traits\SourceServiceAwareTrait; +use OffreFormation\Entity\Db\CheminPedagogique; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; /** * Description of OffreFormationService @@ -61,7 +62,7 @@ class OffreFormationService extends AbstractEntityService partial ep.{id,code,libelle,sourceCode,etape,periode,tauxFoad,fi,fc,fa,tauxFi,tauxFc,tauxFa}, partial vme.{id,heures, groupes} FROM - Application\Entity\Db\Etape e + OffreFormation\Entity\Db\Etape e JOIN e.structure s JOIN e.typeFormation tf JOIN tf.groupe gtf @@ -145,7 +146,7 @@ class OffreFormationService extends AbstractEntityService partial ep.{id,code,libelle,sourceCode,etape,periode,tauxFoad,fi,fc,fa,tauxFi,tauxFc,tauxFa}, partial vme.{id,heures, groupes} FROM - Application\Entity\Db\CheminPedagogique cp + OffreFormation\Entity\Db\CheminPedagogique cp JOIN cp.etape e JOIN cp.elementPedagogique ep LEFT JOIN ep.volumeHoraireEns vme diff --git a/module/OffreFormation/src/Service/Traits/CentreCoutEpServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/CentreCoutEpServiceAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..b61420d26b21e6a99b438a5948989e2528aab40f --- /dev/null +++ b/module/OffreFormation/src/Service/Traits/CentreCoutEpServiceAwareTrait.php @@ -0,0 +1,40 @@ +<?php + +namespace OffreFormation\Service\Traits; + +use OffreFormation\Service\CentreCoutEpService; + +/** + * Description of CentreCoutEpServiceAwareTrait + * + * @author UnicaenCode + */ +trait CentreCoutEpServiceAwareTrait +{ + protected ?CentreCoutEpService $serviceCentreCoutEp = null; + + + + /** + * @param CentreCoutEpService $serviceCentreCoutEp + * + * @return self + */ + public function setServiceCentreCoutEp(?CentreCoutEpService $serviceCentreCoutEp) + { + $this->serviceCentreCoutEp = $serviceCentreCoutEp; + + return $this; + } + + + + public function getServiceCentreCoutEp(): ?CentreCoutEpService + { + if (empty($this->serviceCentreCoutEp)) { + $this->serviceCentreCoutEp = \Application::$container->get(CentreCoutEpService::class); + } + + return $this->serviceCentreCoutEp; + } +} \ No newline at end of file diff --git a/module/Application/src/Service/Traits/CheminPedagogiqueServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/CheminPedagogiqueServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/CheminPedagogiqueServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/CheminPedagogiqueServiceAwareTrait.php index f93eaceb5064ebfd5f400f93aa86fd7fc5451435..6daac8d6031ef38ec210cbf80a307f45f5de740d 100755 --- a/module/Application/src/Service/Traits/CheminPedagogiqueServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/CheminPedagogiqueServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\CheminPedagogiqueService; +use OffreFormation\Service\CheminPedagogiqueService; /** * Description of CheminPedagogiqueServiceAwareTrait diff --git a/module/Application/src/Service/Traits/DisciplineServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/DisciplineServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/DisciplineServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/DisciplineServiceAwareTrait.php index 6e11073d71199e80e10c4d8305b570a8329fcb03..6754db1101811cd3d2af321591c912b97a50f112 100755 --- a/module/Application/src/Service/Traits/DisciplineServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/DisciplineServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\DisciplineService; +use OffreFormation\Service\DisciplineService; /** * Description of DisciplineServiceAwareTrait diff --git a/module/Application/src/Service/Traits/DomaineFonctionnelServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/DomaineFonctionnelServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/DomaineFonctionnelServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/DomaineFonctionnelServiceAwareTrait.php index 9de66f89a8d2fd90505f9c739205bda69d9c590b..5578bed94a78db3509dfeda146b459936759409d 100755 --- a/module/Application/src/Service/Traits/DomaineFonctionnelServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/DomaineFonctionnelServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\DomaineFonctionnelService; +use OffreFormation\Service\DomaineFonctionnelService; /** * Description of DomaineFonctionnelServiceAwareTrait diff --git a/module/Application/src/Service/Traits/ElementModulateurServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/ElementModulateurServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/ElementModulateurServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/ElementModulateurServiceAwareTrait.php index 8fbefe7cb390fcc867f803f638ffe755225358c5..4ac84e5582ec60f20f9ef9da19a9a28d905f68b1 100755 --- a/module/Application/src/Service/Traits/ElementModulateurServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/ElementModulateurServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\ElementModulateurService; +use OffreFormation\Service\ElementModulateurService; /** * Description of ElementModulateurServiceAwareTrait diff --git a/module/Application/src/Service/Traits/ElementPedagogiqueServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/ElementPedagogiqueServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/ElementPedagogiqueServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/ElementPedagogiqueServiceAwareTrait.php index 544f80b47cbc4d586132b93f9fa33dab47027b8a..9dedf4e9010d401fdc56b9359a11d4ed0096323a 100755 --- a/module/Application/src/Service/Traits/ElementPedagogiqueServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/ElementPedagogiqueServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\ElementPedagogiqueService; +use OffreFormation\Service\ElementPedagogiqueService; /** * Description of ElementPedagogiqueServiceAwareTrait diff --git a/module/Application/src/Service/Traits/EtapeServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/EtapeServiceAwareTrait.php similarity index 88% rename from module/Application/src/Service/Traits/EtapeServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/EtapeServiceAwareTrait.php index 13a8a86b673801884d78d5a6e698dfb2a381f3bf..9112d680abca030782caa0b27aecf3d598901f3b 100755 --- a/module/Application/src/Service/Traits/EtapeServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/EtapeServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\EtapeService; +use OffreFormation\Service\EtapeService; /** * Description of EtapeServiceAwareTrait @@ -37,4 +37,5 @@ trait EtapeServiceAwareTrait return $this->serviceEtape; } -} \ No newline at end of file +} + diff --git a/module/Application/src/Service/Traits/GroupeTypeFormationServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/GroupeTypeFormationServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/GroupeTypeFormationServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/GroupeTypeFormationServiceAwareTrait.php index 6bf8b2982a2f706ff41d55e47f11faa9026f8652..be3d1e7369213b54a4c55f148ecb8f2e516df260 100755 --- a/module/Application/src/Service/Traits/GroupeTypeFormationServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/GroupeTypeFormationServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\GroupeTypeFormationService; +use OffreFormation\Service\GroupeTypeFormationService; /** * Description of GroupeTypeFormationServiceAwareTrait diff --git a/module/Application/src/Service/Traits/NiveauEtapeServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/NiveauEtapeServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/NiveauEtapeServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/NiveauEtapeServiceAwareTrait.php index 765e7f0f543fb0bc249036d9c2de501a17f812c7..fb57cf829287d434fe3372c9e9bdebdfb9de909e 100755 --- a/module/Application/src/Service/Traits/NiveauEtapeServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/NiveauEtapeServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\NiveauEtapeService; +use OffreFormation\Service\NiveauEtapeService; /** * Description of NiveauEtapeServiceAwareTrait diff --git a/module/Application/src/Service/Traits/NiveauFormationServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/NiveauFormationServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/NiveauFormationServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/NiveauFormationServiceAwareTrait.php index b3bc4afd37acf37bcd2e5a41f29e66a0b51d74e6..5d8543e8c90e0303b50b8fd1de750960ca9a23ca 100755 --- a/module/Application/src/Service/Traits/NiveauFormationServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/NiveauFormationServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\NiveauFormationService; +use OffreFormation\Service\NiveauFormationService; /** * Description of NiveauFormationServiceAwareTrait diff --git a/module/Application/src/Service/Traits/OffreFormationServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/OffreFormationServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/OffreFormationServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/OffreFormationServiceAwareTrait.php index 9200c59125d0ad0f96abfb19f3a7c424d66f3412..86ecab1ec04c09cb5ab6041e57199c0894849bfb 100755 --- a/module/Application/src/Service/Traits/OffreFormationServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/OffreFormationServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\OffreFormationService; +use OffreFormation\Service\OffreFormationService; /** * Description of OffreFormationServiceAwareTrait diff --git a/module/Application/src/Service/Traits/TypeFormationServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/TypeFormationServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/TypeFormationServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/TypeFormationServiceAwareTrait.php index c2fc607ff6549e6ee41fc2e24eaf32ab9b1030ae..b4957a77042b2444806a06641528b95a22d2cf9b 100755 --- a/module/Application/src/Service/Traits/TypeFormationServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/TypeFormationServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\TypeFormationService; +use OffreFormation\Service\TypeFormationService; /** * Description of TypeFormationServiceAwareTrait diff --git a/module/Application/src/Service/Traits/TypeHeuresServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/TypeHeuresServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/TypeHeuresServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/TypeHeuresServiceAwareTrait.php index c2025e52e0702117bc64ef062332cc86f14835bd..c914f0707aa8993d7fb06b9881e920890d6ab317 100755 --- a/module/Application/src/Service/Traits/TypeHeuresServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/TypeHeuresServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\TypeHeuresService; +use OffreFormation\Service\TypeHeuresService; /** * Description of TypeHeuresServiceAwareTrait diff --git a/module/Application/src/Service/Traits/TypeInterventionServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/TypeInterventionServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/TypeInterventionServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/TypeInterventionServiceAwareTrait.php index 115acb16609ee6d57326f069cfb9b1c7c71b3b3b..417ce329c36762047a31d45c930a76e74e59482f 100755 --- a/module/Application/src/Service/Traits/TypeInterventionServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/TypeInterventionServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\TypeInterventionService; +use OffreFormation\Service\TypeInterventionService; /** * Description of TypeInterventionServiceAwareTrait diff --git a/module/Application/src/Service/Traits/TypeInterventionStatutAwareTrait.php b/module/OffreFormation/src/Service/Traits/TypeInterventionStatutAwareTrait.php similarity index 86% rename from module/Application/src/Service/Traits/TypeInterventionStatutAwareTrait.php rename to module/OffreFormation/src/Service/Traits/TypeInterventionStatutAwareTrait.php index c8bb4ccb96f4a333601fa85b8487bd60cafa8ec7..c868be5ffff52857e1c09a5e234233877e5e4a7a 100644 --- a/module/Application/src/Service/Traits/TypeInterventionStatutAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/TypeInterventionStatutAwareTrait.php @@ -1,15 +1,15 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\TypeInterventionStatutService; +use OffreFormation\Service\TypeInterventionStatutService; /** * Description of TypeInterventionStatutAwareTrait * * @author UnicaenCode */ -trait TypeInterventionStatutServiceAwareTrait +trait TypeInterventionStatutAwareTrait { /** * @var TypeInterventionStatutService diff --git a/module/Application/src/Service/Traits/TypeInterventionStatutServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/TypeInterventionStatutServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/TypeInterventionStatutServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/TypeInterventionStatutServiceAwareTrait.php index 9e5a75cd08549a14144a0c4cca06218cbc5662a6..7713863a1e006d1c2507a5a965c785b3489470e0 100755 --- a/module/Application/src/Service/Traits/TypeInterventionStatutServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/TypeInterventionStatutServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\TypeInterventionStatutService; +use OffreFormation\Service\TypeInterventionStatutService; /** * Description of TypeInterventionStatutServiceAwareTrait diff --git a/module/Application/src/Service/Traits/TypeInterventionStructureServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/TypeInterventionStructureServiceAwareTrait.php similarity index 90% rename from module/Application/src/Service/Traits/TypeInterventionStructureServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/TypeInterventionStructureServiceAwareTrait.php index 77cf66e103f5e1e4ae302c94e91007c4c484a6d8..cf5e52e10ab692174c45ad4c735e3aaf4629598d 100755 --- a/module/Application/src/Service/Traits/TypeInterventionStructureServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/TypeInterventionStructureServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\TypeInterventionStructureService; +use OffreFormation\Service\TypeInterventionStructureService; /** * Description of TypeInterventionStructureServiceAwareTrait diff --git a/module/Application/src/Service/Traits/VolumeHoraireEnsServiceAwareTrait.php b/module/OffreFormation/src/Service/Traits/VolumeHoraireEnsServiceAwareTrait.php similarity index 89% rename from module/Application/src/Service/Traits/VolumeHoraireEnsServiceAwareTrait.php rename to module/OffreFormation/src/Service/Traits/VolumeHoraireEnsServiceAwareTrait.php index b5806f59299a0bac9e95057e08f232eb35237306..88807d315696cc965fc6e9faf70e35a25dd74329 100755 --- a/module/Application/src/Service/Traits/VolumeHoraireEnsServiceAwareTrait.php +++ b/module/OffreFormation/src/Service/Traits/VolumeHoraireEnsServiceAwareTrait.php @@ -1,8 +1,8 @@ <?php -namespace Application\Service\Traits; +namespace OffreFormation\Service\Traits; -use Application\Service\VolumeHoraireEnsService; +use OffreFormation\Service\VolumeHoraireEnsService; /** * Description of VolumeHoraireEnsServiceAwareTrait diff --git a/module/Application/src/Service/TypeFormationService.php b/module/OffreFormation/src/Service/TypeFormationService.php similarity index 77% rename from module/Application/src/Service/TypeFormationService.php rename to module/OffreFormation/src/Service/TypeFormationService.php index 27e738da9cceca424756e6387f64bea0267384b9..92cd3b6ceed32b971cc3ee7dd026e284e28c5f05 100755 --- a/module/Application/src/Service/TypeFormationService.php +++ b/module/OffreFormation/src/Service/TypeFormationService.php @@ -1,8 +1,10 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; +use Application\Service\AbstractEntityService; use Doctrine\ORM\QueryBuilder; +use RuntimeException; /** * Description of TypeFormation @@ -20,7 +22,7 @@ class TypeFormationService extends AbstractEntityService */ public function getEntityClass() { - return \Application\Entity\Db\TypeFormation::class; + return \OffreFormation\Entity\Db\TypeFormation::class; } /** @@ -34,7 +36,7 @@ class TypeFormationService extends AbstractEntityService public function finderByNiveau(\Application\Entity\NiveauEtape $niveau, QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb ->join("$alias.groupe", "gtf") @@ -48,11 +50,12 @@ class TypeFormationService extends AbstractEntityService * Retourne la liste des types de formation * * @param QueryBuilder|null $queryBuilder - * @return Application\Entity\Db\TypeFormation[] + * + * @return \OffreFormation\Entity\Db\TypeFormation[] */ public function getList( QueryBuilder $qb=null, $alias=null ) { - list($qb,$alias) = $this->initQuery($qb, $alias); + [$qb,$alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.libelleLong"); return parent::getList($qb, $alias); } diff --git a/module/Application/src/Service/TypeHeuresService.php b/module/OffreFormation/src/Service/TypeHeuresService.php similarity index 85% rename from module/Application/src/Service/TypeHeuresService.php rename to module/OffreFormation/src/Service/TypeHeuresService.php index ece32058e724338734121e70f8407e8ca23804bb..4d3bdbace6202b007de14b77d9354cc4bee8a136 100755 --- a/module/Application/src/Service/TypeHeuresService.php +++ b/module/OffreFormation/src/Service/TypeHeuresService.php @@ -1,10 +1,12 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Doctrine\ORM\QueryBuilder; use Application\Entity\Db\ServiceAPayerInterface; -use Application\Entity\Db\TypeHeures; +use Application\Service\AbstractEntityService; +use Application\Service\RuntimeException; +use Doctrine\ORM\QueryBuilder; +use OffreFormation\Entity\Db\TypeHeures; /** * Description of TypeHeures @@ -43,7 +45,7 @@ class TypeHeuresService extends AbstractEntityService * * @param string $code * - * @return \Application\Entity\Db\TypeHeures + * @return \OffreFormation\Entity\Db\TypeHeures */ public function getByCode($code) { @@ -56,7 +58,7 @@ class TypeHeuresService extends AbstractEntityService public function finderByServiceaPayer(ServiceAPayerInterface $serviceAPayer, QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $codes = []; @@ -84,11 +86,11 @@ class TypeHeuresService extends AbstractEntityService * * @param QueryBuilder|null $queryBuilder * - * @return \Application\Entity\Db\TypeHeures[] + * @return \OffreFormation\Entity\Db\TypeHeures[] */ public function getList(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.ordre"); return parent::getList($qb, $alias); diff --git a/module/Application/src/Service/TypeInterventionService.php b/module/OffreFormation/src/Service/TypeInterventionService.php similarity index 86% rename from module/Application/src/Service/TypeInterventionService.php rename to module/OffreFormation/src/Service/TypeInterventionService.php index be24c941df5b64f43d11ba26edd306f0eda3408f..e700be38bbd4dcb2485d6575161dfa61815e19e7 100755 --- a/module/Application/src/Service/TypeInterventionService.php +++ b/module/OffreFormation/src/Service/TypeInterventionService.php @@ -1,10 +1,11 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; +use Application\Service\AbstractEntityService; +use Application\Service\RuntimeException; use Doctrine\ORM\QueryBuilder; -use Application\Entity\Db\TypeIntervention; -use Application\Entity\Db\TypeInterventionStatut; +use OffreFormation\Entity\Db\TypeIntervention; /** * Description of TypeIntervention @@ -48,7 +49,7 @@ class TypeInterventionService extends AbstractEntityService */ public function finderByContext(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $annee = $this->getServiceContext()->getAnnee(); @@ -71,7 +72,7 @@ class TypeInterventionService extends AbstractEntityService */ public function orderBy(QueryBuilder $qb = null, $alias = null) { - list($qb, $alias) = $this->initQuery($qb, $alias); + [$qb, $alias] = $this->initQuery($qb, $alias); $qb->addOrderBy("$alias.ordre"); return $qb; @@ -89,7 +90,7 @@ class TypeInterventionService extends AbstractEntityService public function getByCode($code) { if (is_array($code)) { - list($qb, $alias) = $this->initQuery(); + [$qb, $alias] = $this->initQuery(); $qb->andWhere($alias . '.code IN (:' . $alias . '_code)')->setParameter($alias . '_code', $code); return $this->getList($qb); diff --git a/module/Application/src/Service/TypeInterventionStatutService.php b/module/OffreFormation/src/Service/TypeInterventionStatutService.php similarity index 76% rename from module/Application/src/Service/TypeInterventionStatutService.php rename to module/OffreFormation/src/Service/TypeInterventionStatutService.php index 910d46df9464a8040bd7729f879aea2bc9922aae..15785c58ac7b3df6f0b706ca71b20170848c5910 100644 --- a/module/Application/src/Service/TypeInterventionStatutService.php +++ b/module/OffreFormation/src/Service/TypeInterventionStatutService.php @@ -1,9 +1,11 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\TypeInterventionStatut; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; +use Application\Service\AbstractEntityService; +use Application\Service\RuntimeException; +use OffreFormation\Entity\Db\TypeInterventionStatut; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; /** * Description of TypeInterventionStatutService diff --git a/module/Application/src/Service/TypeInterventionStructureService.php b/module/OffreFormation/src/Service/TypeInterventionStructureService.php similarity index 76% rename from module/Application/src/Service/TypeInterventionStructureService.php rename to module/OffreFormation/src/Service/TypeInterventionStructureService.php index cb60d4d1348cbfc2ae2861d5b799070964026915..a485beae29a17f070c47b68506e7c1deb4b8519c 100755 --- a/module/Application/src/Service/TypeInterventionStructureService.php +++ b/module/OffreFormation/src/Service/TypeInterventionStructureService.php @@ -1,9 +1,11 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\TypeInterventionStructure; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; +use Application\Service\AbstractEntityService; +use Application\Service\RuntimeException; +use OffreFormation\Entity\Db\TypeInterventionStructure; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; /** * Description of TypeInterventionStructureService diff --git a/module/Application/src/Service/VolumeHoraireEnsService.php b/module/OffreFormation/src/Service/VolumeHoraireEnsService.php similarity index 88% rename from module/Application/src/Service/VolumeHoraireEnsService.php rename to module/OffreFormation/src/Service/VolumeHoraireEnsService.php index 54c4f2b58bb6f02c5a4d4f75f2ceab09bb98ad71..eb6c9f94e79ef096b6054eb1d661c8d88f1df11f 100755 --- a/module/Application/src/Service/VolumeHoraireEnsService.php +++ b/module/OffreFormation/src/Service/VolumeHoraireEnsService.php @@ -1,11 +1,13 @@ <?php -namespace Application\Service; +namespace OffreFormation\Service; -use Application\Entity\Db\VolumeHoraireEns; +use Application\Service\AbstractEntityService; use Application\Service\Traits\SourceServiceAwareTrait; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Entity\Db\VolumeHoraireEns; +use RuntimeException; /** @@ -50,7 +52,7 @@ class VolumeHoraireEnsService extends AbstractEntityService /** * Retourne une nouvelle entité, initialisée avec les bons paramètres * - * @return \Application\Entity\Db\VolumeHoraireEns + * @return \OffreFormation\Entity\Db\VolumeHoraireEns */ public function newEntity(ElementPedagogique $elementPedagogique = null, TypeIntervention $typeIntervention = null) { diff --git a/module/Application/src/View/Helper/OffreFormation/ElementCentreCoutFieldsetViewHelper.php b/module/OffreFormation/src/View/Helper/ElementCentreCoutFieldsetViewHelper.php similarity index 92% rename from module/Application/src/View/Helper/OffreFormation/ElementCentreCoutFieldsetViewHelper.php rename to module/OffreFormation/src/View/Helper/ElementCentreCoutFieldsetViewHelper.php index 9de63ddb545e016285b7b55ee839f551346d6a11..8025ae036e1b60317a5cd669ba7151277c98cb6e 100755 --- a/module/Application/src/View/Helper/OffreFormation/ElementCentreCoutFieldsetViewHelper.php +++ b/module/OffreFormation/src/View/Helper/ElementCentreCoutFieldsetViewHelper.php @@ -1,9 +1,9 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\EtapeCentreCout\ElementCentreCoutFieldset; use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\EtapeCentreCout\ElementCentreCoutFieldset; /** * Dessine un fieldset de type ElementCentreCoutFieldsetViewHelper. diff --git a/module/Application/src/View/Helper/OffreFormation/ElementModulateurSaisieForm.php b/module/OffreFormation/src/View/Helper/ElementModulateurSaisieForm.php similarity index 90% rename from module/Application/src/View/Helper/OffreFormation/ElementModulateurSaisieForm.php rename to module/OffreFormation/src/View/Helper/ElementModulateurSaisieForm.php index 302aecfd61a789bff79a7b7d5704ef77b2d68cf8..a6a157362e84984cd8b061aebc879bd2f14f2d9f 100755 --- a/module/Application/src/View/Helper/OffreFormation/ElementModulateurSaisieForm.php +++ b/module/OffreFormation/src/View/Helper/ElementModulateurSaisieForm.php @@ -1,11 +1,9 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\EtapeModulateursSaisie; use Laminas\View\Helper\AbstractHelper; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; -use Laminas\Form\Element\Select; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; /** * Description of EtapeModulateursSaisieForm @@ -25,11 +23,11 @@ class ElementModulateurSaisieForm extends AbstractHelper /** * - * @param EtapeModulateursSaisie $form + * @param ElementModulateurSaisieForm|null $form * * @return self|string */ - public function __invoke(ElementModulateurSaisie $form = null) + public function __invoke(ElementModulateurSaisieForm $form = null) { if (null === $form) { return $this; @@ -47,7 +45,7 @@ class ElementModulateurSaisieForm extends AbstractHelper * * @return string */ - public function render(ElementModulateursSaisie $form) + public function render(ElementModulateurSaisieForm $form) { $elements = $form->getElement(); $typesModulateurs = $form->getTypesModulateurs(); diff --git a/module/Application/src/View/Helper/OffreFormation/ElementModulateursSaisieFieldset.php b/module/OffreFormation/src/View/Helper/ElementModulateursSaisieFieldset.php similarity index 93% rename from module/Application/src/View/Helper/OffreFormation/ElementModulateursSaisieFieldset.php rename to module/OffreFormation/src/View/Helper/ElementModulateursSaisieFieldset.php index 7ca84ade4e4197468f596963d7cb34c15c40506e..fadb600888ab7c85e1db42264e8a4447db822e93 100755 --- a/module/Application/src/View/Helper/OffreFormation/ElementModulateursSaisieFieldset.php +++ b/module/OffreFormation/src/View/Helper/ElementModulateursSaisieFieldset.php @@ -1,10 +1,10 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\ElementModulateursFieldset; -use Application\Service\Traits\TypeModulateurServiceAwareTrait; use Application\View\Helper\AbstractViewHelper; +use OffreFormation\Form\ElementModulateursFieldset; +use Application\Service\Traits\TypeModulateurServiceAwareTrait; /** diff --git a/module/Application/src/View/Helper/OffreFormation/ElementPedagogiqueViewHelper.php b/module/OffreFormation/src/View/Helper/ElementPedagogiqueViewHelper.php similarity index 96% rename from module/Application/src/View/Helper/OffreFormation/ElementPedagogiqueViewHelper.php rename to module/OffreFormation/src/View/Helper/ElementPedagogiqueViewHelper.php index 7d2d9ad6e44e9e317175ea9cfb061f63db08726f..5b17c7ed2c14b4157407604d725ae51244671167 100755 --- a/module/Application/src/View/Helper/OffreFormation/ElementPedagogiqueViewHelper.php +++ b/module/OffreFormation/src/View/Helper/ElementPedagogiqueViewHelper.php @@ -1,12 +1,12 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Entity\Db\ElementPedagogique as Entity; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use Application\Provider\Privilege\Privileges; -use Laminas\View\Helper\AbstractHtmlElement; use Application\Util; +use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Entity\Db\ElementPedagogique as Entity; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; /** diff --git a/module/Application/src/View/Helper/OffreFormation/ElementTauxMixiteFieldsetViewHelper.php b/module/OffreFormation/src/View/Helper/ElementTauxMixiteFieldsetViewHelper.php similarity index 93% rename from module/Application/src/View/Helper/OffreFormation/ElementTauxMixiteFieldsetViewHelper.php rename to module/OffreFormation/src/View/Helper/ElementTauxMixiteFieldsetViewHelper.php index aa05fd9c734a9aaed13498d245b7cbcd8d2964bb..152d0602012ad116f860faca1a70024d7f832146 100755 --- a/module/Application/src/View/Helper/OffreFormation/ElementTauxMixiteFieldsetViewHelper.php +++ b/module/OffreFormation/src/View/Helper/ElementTauxMixiteFieldsetViewHelper.php @@ -1,9 +1,9 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\TauxMixite\TauxMixiteFieldset; use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\TauxMixite\TauxMixiteFieldset; /** * ElementTauxMixiteFieldsetViewHelper * diff --git a/module/OffreFormation/src/View/Helper/ElementTauxRemuFieldsetViewHelper.php b/module/OffreFormation/src/View/Helper/ElementTauxRemuFieldsetViewHelper.php new file mode 100755 index 0000000000000000000000000000000000000000..7bc965be9c54caa609bd81a81568982a30267c33 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/ElementTauxRemuFieldsetViewHelper.php @@ -0,0 +1,59 @@ +<?php + +namespace OffreFormation\View\Helper; + +use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\EtapeTauxRemu\ElementTauxRemuFieldset; +use Paiement\Entity\Db\TauxRemu; + +/** + * Dessine un fieldset de type ElementTauxRemusFieldsetViewHelper. + * + * @see ElementTauxRemusFieldset + */ +class ElementTauxRemuFieldsetViewHelper extends AbstractHtmlElement +{ + + /** + * + * @param ElementTauxRemuFieldset $fieldset + * + * @return self|string + */ + public function __invoke(ElementTauxRemuFieldset $fieldset = null) + { + if (null === $fieldset) { + return $this; + } + + return $this->render($fieldset); + } + + + + /** + * Rendu du formulaire. + * + * @param ElementTauxRemuFieldset $fieldset + * @param boolean $inTable + * + * @return string + */ + public function render(ElementTauxRemuFieldset $fieldset, $inTable = false) + { + $res = ''; + + $vh = $this->getView()->formControlGroup(); + if ($inTable) { + $vh->setIncludeLabel(false); + $res .= '<td>'; + } + $res .= $vh->render($fieldset->get('tauxRemu')); + + if ($inTable) { + $res .= '</td>'; + } + + return $res; + } +} diff --git a/module/Application/src/View/Helper/OffreFormation/EtapeCentreCoutFormViewHelper.php b/module/OffreFormation/src/View/Helper/EtapeCentreCoutFormViewHelper.php similarity index 95% rename from module/Application/src/View/Helper/OffreFormation/EtapeCentreCoutFormViewHelper.php rename to module/OffreFormation/src/View/Helper/EtapeCentreCoutFormViewHelper.php index 3b6832403f8bd373fea7de04a97ba4d87319b22f..be0cd92e8f0a00e35fa1307be72fb0bb8b5d5f8e 100755 --- a/module/Application/src/View/Helper/OffreFormation/EtapeCentreCoutFormViewHelper.php +++ b/module/OffreFormation/src/View/Helper/EtapeCentreCoutFormViewHelper.php @@ -1,9 +1,9 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\EtapeCentreCout\EtapeCentreCoutForm; use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\EtapeCentreCout\EtapeCentreCoutForm; /** * Dessine le formulaire de type EtapeCentreCoutFormViewHelper. diff --git a/module/Application/src/View/Helper/OffreFormation/EtapeModulateursSaisieForm.php b/module/OffreFormation/src/View/Helper/EtapeModulateursSaisieForm.php similarity index 95% rename from module/Application/src/View/Helper/OffreFormation/EtapeModulateursSaisieForm.php rename to module/OffreFormation/src/View/Helper/EtapeModulateursSaisieForm.php index 1f3f75607ee6de16e0033a12c686a3f9913a46e7..cb8b7e39fac17e3f3effcacb172937df35ac0cf0 100755 --- a/module/Application/src/View/Helper/OffreFormation/EtapeModulateursSaisieForm.php +++ b/module/OffreFormation/src/View/Helper/EtapeModulateursSaisieForm.php @@ -1,11 +1,11 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\EtapeModulateursSaisie; -use Laminas\View\Helper\AbstractHelper; -use Application\Service\Traits\ElementPedagogiqueServiceAwareTrait; use Laminas\Form\Element\Select; +use Laminas\View\Helper\AbstractHelper; +use OffreFormation\Form\EtapeModulateursSaisie; +use OffreFormation\Service\Traits\ElementPedagogiqueServiceAwareTrait; /** * Description of EtapeModulateursSaisieForm diff --git a/module/Application/src/View/Helper/OffreFormation/EtapeTauxMixiteFormViewHelper.php b/module/OffreFormation/src/View/Helper/EtapeTauxMixiteFormViewHelper.php similarity index 96% rename from module/Application/src/View/Helper/OffreFormation/EtapeTauxMixiteFormViewHelper.php rename to module/OffreFormation/src/View/Helper/EtapeTauxMixiteFormViewHelper.php index db41eeffc8945776c9847b0183b80876792b1450..7c49b4a7e098af23bc746338a704aca99315f1f0 100755 --- a/module/Application/src/View/Helper/OffreFormation/EtapeTauxMixiteFormViewHelper.php +++ b/module/OffreFormation/src/View/Helper/EtapeTauxMixiteFormViewHelper.php @@ -1,9 +1,9 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\TauxMixite\TauxMixiteForm; use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\TauxMixite\TauxMixiteForm; /** * Dessine le formulaire de type EtapeTauxMixiteFormViewHelper. diff --git a/module/OffreFormation/src/View/Helper/EtapeTauxRemuFormViewHelper.php b/module/OffreFormation/src/View/Helper/EtapeTauxRemuFormViewHelper.php new file mode 100755 index 0000000000000000000000000000000000000000..c70261a097aeb7457809e7e0fefc7fb4302b4b95 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/EtapeTauxRemuFormViewHelper.php @@ -0,0 +1,89 @@ +<?php + +namespace OffreFormation\View\Helper; + +use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\EtapeTauxRemu\EtapeTauxRemuForm; + +/** + * Dessine le formulaire de type EtapetauxRemuFormViewHelper. + * + * @see EtapetauxRemuSaisieForm + */ +class EtapeTauxRemuFormViewHelper extends AbstractHtmlElement +{ + + /** + * @var EtapetauxRemuForm + */ + protected $form; + + + + /** + * + * @param EtapetauxRemuForm $form + * + * @return self|string + */ + public function __invoke(EtapetauxRemuForm $form = null) + { + if (null === $form) { + return $this; + } + + return $this->render($form); + } + + + + /** + * Rendu du formulaire + * + * @param EtapetauxRemuForm $form + * + * @return string + */ + public function render(EtapetauxRemuForm $form) + { + + $elements = $form->getEtape()->getElementPedagogique(); + + if (empty($elements)) { + return 'Aucun enseignement n\'est associé à cette formation. Il est donc impossible de paramétrer les centres de coûts.'; + } + + + $form->prepare(); + $res = $this->getView()->form()->openTag($form); + $res .= '<table class="table table-bordered table-xs">'; + + $res .= '<tr>'; + $res .= '<th rowspan="2" class="element-pedagogique">Elément</th>'; + + $res .= '</tr>'; + + $res .= '<tr>'; + $res .= '<th>'; + $res .= $this->getView()->formSelect($form->get('tauxRemu')); + $res .= ' <button type="button" class="btn btn-secondary btn-sm form-set-value float-end" data-code="" title="Appliquer à tous"><i class="fas fa-arrow-down"></i></button>'; + $res .= '</th>'; + $res .= '</tr>'; + + foreach ($elements as $element) { + $res .= '<tr>'; + $res .= '<th class="element-pedagogique">' . $element . '</th>'; + $formElement = $form->get('EL' . $element->getId()); + $res .= $this->getView()->elementTauxRemuFieldset()->render($formElement, true); + $res .= '</tr>'; + } + + $res .= '</table>'; + + $res .= $this->getView()->formHidden($form->get('id')); + $res .= $this->getView()->formRow($form->get('submit')); + $res .= $this->getView()->form()->closeTag(); + + return $res; + } +} \ No newline at end of file diff --git a/module/Application/src/View/Helper/OffreFormation/EtapeViewHelper.php b/module/OffreFormation/src/View/Helper/EtapeViewHelper.php similarity index 94% rename from module/Application/src/View/Helper/OffreFormation/EtapeViewHelper.php rename to module/OffreFormation/src/View/Helper/EtapeViewHelper.php index 5942bddb0806318cd4893afb35870f78262da5cd..adc45726049b56ed6e7ffc39ee3efcf6815435df 100755 --- a/module/Application/src/View/Helper/OffreFormation/EtapeViewHelper.php +++ b/module/OffreFormation/src/View/Helper/EtapeViewHelper.php @@ -1,14 +1,14 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Entity\Db\Etape as Entity; use Application\Entity\Db\Structure; -use Application\Entity\Db\Traits\EtapeAwareTrait; use Application\Provider\Privilege\Privileges; -use Application\Service\Traits\EtapeServiceAwareTrait as ServiceEtapeAwareTrait; use Application\Util; use Application\View\Helper\AbstractViewHelper; +use OffreFormation\Entity\Db\Etape as Entity; +use OffreFormation\Service\Traits\EtapeServiceAwareTrait; +use OffreFormation\Entity\Db\Traits\EtapeAwareTrait; /** * Description of ElementPedagogique @@ -18,7 +18,7 @@ use Application\View\Helper\AbstractViewHelper; class EtapeViewHelper extends AbstractViewHelper { use EtapeAwareTrait; - use ServiceEtapeAwareTrait; + use EtapeServiceAwareTrait; /** @@ -144,7 +144,6 @@ class EtapeViewHelper extends AbstractViewHelper public function renderAjouterLink(string $content, array $attributes, Structure $structure) { if (!$content) $content = '<i class="fas fa-plus"></i> Ajouter une formation'; - $default = [ 'href' => $this->getView()->url('of/etape/ajouter', ['structure' => $structure->getId()]), 'class' => ['etape-ajouter-link', 'ajax-modal', 'iconify', 'btn', 'btn-secondary'], diff --git a/module/OffreFormation/src/View/Helper/Factory/ElementCentreCoutFieldsetViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/ElementCentreCoutFieldsetViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..bcb623bbd2bba88df0417f509e73b475e38b2785 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/ElementCentreCoutFieldsetViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\ElementCentreCoutFieldsetViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of ElementCentreCoutFieldsetViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementCentreCoutFieldsetViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementCentreCoutFieldsetViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementCentreCoutFieldsetViewHelper + { + $viewHelper = new ElementCentreCoutFieldsetViewHelper; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/ElementModulateursSaisieFieldsetFactory.php b/module/OffreFormation/src/View/Helper/Factory/ElementModulateursSaisieFieldsetFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..857e9368cb9d37b4f75a7d7fb1af385b08218c48 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/ElementModulateursSaisieFieldsetFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\ElementModulateursSaisieFieldset; +use Psr\Container\ContainerInterface; + + +/** + * Description of ElementModulateursSaisieFieldsetFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementModulateursSaisieFieldsetFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementModulateursSaisieFieldset + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementModulateursSaisieFieldset + { + $viewHelper = new ElementModulateursSaisieFieldset; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/Application/src/View/Helper/OffreFormation/Factory/ElementPedagogiqueViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/ElementPedagogiqueViewHelperFactory.php similarity index 81% rename from module/Application/src/View/Helper/OffreFormation/Factory/ElementPedagogiqueViewHelperFactory.php rename to module/OffreFormation/src/View/Helper/Factory/ElementPedagogiqueViewHelperFactory.php index cac85afc23ff4f301cc73c12451d02cfafe7a5d9..088950f010a3b7a8d2b43c9e4a0c31b6123e1556 100644 --- a/module/Application/src/View/Helper/OffreFormation/Factory/ElementPedagogiqueViewHelperFactory.php +++ b/module/OffreFormation/src/View/Helper/Factory/ElementPedagogiqueViewHelperFactory.php @@ -3,10 +3,9 @@ * @author JORIOT Florian <florian.joriot at unicaen.fr> */ -namespace Application\View\Helper\OffreFormation\Factory; - -use Application\View\Helper\OffreFormation\ElementPedagogiqueViewHelper; +namespace OffreFormation\View\Helper\Factory; +use OffreFormation\View\Helper\ElementPedagogiqueViewHelper; use Psr\Container\ContainerInterface; use UnicaenImport\Service\SchemaService; diff --git a/module/OffreFormation/src/View/Helper/Factory/ElementTauxMixiteFieldsetViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/ElementTauxMixiteFieldsetViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..1dcc73e2c7610aa7e0b3208f9ced60f5845ed0b6 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/ElementTauxMixiteFieldsetViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\ElementTauxMixiteFieldsetViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of ElementTauxMixiteFieldsetViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementTauxMixiteFieldsetViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementTauxMixiteFieldsetViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementTauxMixiteFieldsetViewHelper + { + $viewHelper = new ElementTauxMixiteFieldsetViewHelper; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/ElementTauxRemuFieldsetViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/ElementTauxRemuFieldsetViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..6220734dbbb52a61b2a144ade1dda9f09e7eb677 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/ElementTauxRemuFieldsetViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\ElementTauxRemuFieldsetViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of ElementTauxRemusFieldsetViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class ElementTauxRemuFieldsetViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ElementTauxRemuFieldsetViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): ElementTauxRemuFieldsetViewHelper + { + $viewHelper = new ElementTauxRemuFieldsetViewHelper; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/EtapeCentreCoutFormViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/EtapeCentreCoutFormViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..b07260fe32137352c315907adf61d5e007301453 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/EtapeCentreCoutFormViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\EtapeCentreCoutFormViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeCentreCoutFormViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeCentreCoutFormViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeCentreCoutFormViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeCentreCoutFormViewHelper + { + $viewHelper = new EtapeCentreCoutFormViewHelper; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/EtapeModulateursSaisieFormFactory.php b/module/OffreFormation/src/View/Helper/Factory/EtapeModulateursSaisieFormFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..8fefbe27c98736076f8bf698c72c6df605495388 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/EtapeModulateursSaisieFormFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\EtapeModulateursSaisieForm; +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeModulateursSaisieFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeModulateursSaisieFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeModulateursSaisieForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeModulateursSaisieForm + { + $viewHelper = new EtapeModulateursSaisieForm; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/EtapeTauxMixiteFormViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/EtapeTauxMixiteFormViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..14445b2dd688ef1acc665726b3a8c701418eba23 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/EtapeTauxMixiteFormViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\EtapeTauxMixiteFormViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeTauxMixiteFormViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeTauxMixiteFormViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeTauxMixiteFormViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeTauxMixiteFormViewHelper + { + $viewHelper = new EtapeTauxMixiteFormViewHelper; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/EtapeTauxRemuFormViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/EtapeTauxRemuFormViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..271ccf99d8fb08e1d48078791c27cba23be2143a --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/EtapeTauxRemuFormViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\EtapeTauxRemuFormViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeCentreCoutFormViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeTauxRemuFormViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeTauxRemuFormViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeTauxRemuFormViewHelper + { + $viewHelper = new EtapeTauxRemuFormViewHelper(); + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/EtapeViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/EtapeViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..5001835676e3ccd2e2747833fabc34085b593462 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/EtapeViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\EtapeViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of EtapeViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class EtapeViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EtapeViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): EtapeViewHelper + { + $viewHelper = new EtapeViewHelper; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } + +} \ No newline at end of file diff --git a/module/OffreFormation/src/View/Helper/Factory/FieldsetElementPedagogiqueRechercheFactory.php b/module/OffreFormation/src/View/Helper/Factory/FieldsetElementPedagogiqueRechercheFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..442a4ade3131fda340487d26ec1b3a4d6099b8cf --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/FieldsetElementPedagogiqueRechercheFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\FieldsetElementPedagogiqueRecherche; +use Psr\Container\ContainerInterface; + + +/** + * Description of FieldsetElementPedagogiqueRechercheFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class FieldsetElementPedagogiqueRechercheFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return FieldsetElementPedagogiqueRecherche + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): FieldsetElementPedagogiqueRecherche + { + $viewHelper = new FieldsetElementPedagogiqueRecherche; + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } +} + diff --git a/module/OffreFormation/src/View/Helper/Factory/TypeInterventionAdminViewHelperFactory.php b/module/OffreFormation/src/View/Helper/Factory/TypeInterventionAdminViewHelperFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..313d5f2b86737eac1f8741aa06b7da253d497d00 --- /dev/null +++ b/module/OffreFormation/src/View/Helper/Factory/TypeInterventionAdminViewHelperFactory.php @@ -0,0 +1,33 @@ +<?php + +namespace OffreFormation\View\Helper\Factory; + +use OffreFormation\View\Helper\TypeInterventionAdminViewHelper; +use Psr\Container\ContainerInterface; + + +/** + * Description of TypeInterventionAdminViewHelperFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TypeInterventionAdminViewHelperFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TypeInterventionAdminViewHelper + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TypeInterventionAdminViewHelper + { + $viewHelper = new TypeInterventionAdminViewHelper(); + + /* Injectez vos dépendances ICI */ + + return $viewHelper; + } + +} \ No newline at end of file diff --git a/module/Application/src/View/Helper/OffreFormation/FieldsetElementPedagogiqueRecherche.php b/module/OffreFormation/src/View/Helper/FieldsetElementPedagogiqueRecherche.php similarity index 96% rename from module/Application/src/View/Helper/OffreFormation/FieldsetElementPedagogiqueRecherche.php rename to module/OffreFormation/src/View/Helper/FieldsetElementPedagogiqueRecherche.php index 9569e6b25880f274c46e209f533b0504ea471748..bd90a3aa2443729c13d5125781e3c55788991d92 100755 --- a/module/Application/src/View/Helper/OffreFormation/FieldsetElementPedagogiqueRecherche.php +++ b/module/OffreFormation/src/View/Helper/FieldsetElementPedagogiqueRecherche.php @@ -1,9 +1,9 @@ <?php -namespace Application\View\Helper\OffreFormation; +namespace OffreFormation\View\Helper; -use Application\Form\OffreFormation\ElementPedagogiqueRechercheFieldset; use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Form\ElementPedagogiqueRechercheFieldset; /** * Description of FieldsetElementPedagogiqueRecherche diff --git a/module/Application/src/View/Helper/TypeInterventionAdminViewHelper.php b/module/OffreFormation/src/View/Helper/TypeInterventionAdminViewHelper.php similarity index 84% rename from module/Application/src/View/Helper/TypeInterventionAdminViewHelper.php rename to module/OffreFormation/src/View/Helper/TypeInterventionAdminViewHelper.php index 8ea2a4a71dc3fb6abe11d9eda4f88dc29c47a62b..2d6175a570bcde71abd719d184f4c7b36df56d21 100644 --- a/module/Application/src/View/Helper/TypeInterventionAdminViewHelper.php +++ b/module/OffreFormation/src/View/Helper/TypeInterventionAdminViewHelper.php @@ -1,11 +1,12 @@ <?php -namespace Application\View\Helper; +namespace OffreFormation\View\Helper; -use Application\Entity\Db\TypeIntervention; use Application\Filter\StringFromFloat; use Application\Service\Traits\ContextServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; +use Application\View\Helper\AbstractViewHelper; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; /** * Aide de vue permettant d'afficher une liste de statuts @@ -94,8 +95,8 @@ class TypeInterventionAdminViewHelper extends AbstractViewHelper $title = ''; $statuts = $ti->getTypeInterventionStatut($this->getServiceContext()->getAnnee()); foreach ($statuts as $tis) { - if ($title) $title .= ' - '; - $title .= $tis->getStatut()->getLibelle(); + $title .= '∙ '; + $title .= $tis->getStatut()->getLibelle() . '<br>'; } $etoile = (strlen($title) ? '★' : ''); @@ -104,21 +105,23 @@ class TypeInterventionAdminViewHelper extends AbstractViewHelper $html = '<td>'; $html .= $this->getView()->tag('a', [ 'class' => 'ajax-modal', - 'data-bs-toggle' => 'tooltip', + 'data-bs-toggle' => 'tooltip', 'data-placement' => 'bottom', 'title' => $title, 'href' => $url, 'data-submit-reload' => 'true', + 'data-bs-html' => 'true', ])->text(StringFromFloat::run($ti->getTauxHetdService()) . $etoile); $html .= '</td><td>'; $html .= $this->getView()->tag('a', [ 'class' => 'ajax-modal', - 'data-bs-toggle' => 'tooltip', + 'data-bs-toggle' => 'tooltip', 'data-placement' => 'bottom', 'title' => $title, 'href' => $url, 'data-submit-reload' => 'true', + 'data-bs-html' => 'true', ])->text(StringFromFloat::run($ti->getTauxHetdComplementaire()) . $etoile); $html .= '</td>'; diff --git a/module/OffreFormation/template_map.php b/module/OffreFormation/template_map.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/OffreFormation/template_map.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Application/view/application/offre-formation/administration-offre.phtml b/module/OffreFormation/view/offre-formation/administration-offre.phtml similarity index 100% rename from module/Application/view/application/offre-formation/administration-offre.phtml rename to module/OffreFormation/view/offre-formation/administration-offre.phtml diff --git a/module/Application/view/application/discipline/index.phtml b/module/OffreFormation/view/offre-formation/discipline/index.phtml similarity index 98% rename from module/Application/view/application/discipline/index.phtml rename to module/OffreFormation/view/offre-formation/discipline/index.phtml index 359d70a94cf2f781b157188ea535b18557617d8b..9d570f05a540cf1fef1c5dc1099481fa92ab47a5 100755 --- a/module/Application/view/application/discipline/index.phtml +++ b/module/OffreFormation/view/offre-formation/discipline/index.phtml @@ -4,7 +4,7 @@ $this->headTitle()->append("Gestion des disciplines"); use Application\Provider\Privilege\Privileges; -/* @var $disciplines \Application\Entity\Db\Discipline[] */ +/* @var $disciplines \OffreFormation\Entity\Db\Discipline[] */ /* @var $libellesCodesCorresp string[] */ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::DISCIPLINE_EDITION)); diff --git a/module/Application/view/application/discipline/saisir.phtml b/module/OffreFormation/view/offre-formation/discipline/saisir.phtml similarity index 92% rename from module/Application/view/application/discipline/saisir.phtml rename to module/OffreFormation/view/offre-formation/discipline/saisir.phtml index 0b3ef92eb577c39fad49b270dbfaecb53c19bd32..8dc6ee55be037768de1e1b954341d93b470d8df4 100755 --- a/module/Application/view/application/discipline/saisir.phtml +++ b/module/OffreFormation/view/offre-formation/discipline/saisir.phtml @@ -1,6 +1,6 @@ <?php -/* @var $form Application\Form\DisciplineForm */ +/* @var $form OffreFormation\Form\DisciplineForm */ /* @var $errors array */ diff --git a/module/Application/view/application/discipline/supprimer.phtml b/module/OffreFormation/view/offre-formation/discipline/supprimer.phtml similarity index 87% rename from module/Application/view/application/discipline/supprimer.phtml rename to module/OffreFormation/view/offre-formation/discipline/supprimer.phtml index f708f86702743571345dbecd8042b03c17dfa5c1..122d0ee0735ca52cfce45bd3763c7a2ff05f84a8 100755 --- a/module/Application/view/application/discipline/supprimer.phtml +++ b/module/OffreFormation/view/offre-formation/discipline/supprimer.phtml @@ -3,7 +3,7 @@ /** * @var $this \Application\View\Renderer\PhpRenderer * @var $errors array - * @var $discipline \Application\Entity\Db\Discipline + * @var $discipline \OffreFormation\Entity\Db\Discipline * @var $form \Application\Form\Supprimer * @var $title string */ diff --git a/module/Application/view/application/discipline/voir.phtml b/module/OffreFormation/view/offre-formation/discipline/voir.phtml similarity index 100% rename from module/Application/view/application/discipline/voir.phtml rename to module/OffreFormation/view/offre-formation/discipline/voir.phtml diff --git a/module/Application/view/application/offre-formation/element-pedagogique/apercevoir.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/apercevoir.phtml similarity index 100% rename from module/Application/view/application/offre-formation/element-pedagogique/apercevoir.phtml rename to module/OffreFormation/view/offre-formation/element-pedagogique/apercevoir.phtml diff --git a/module/OffreFormation/view/offre-formation/element-pedagogique/modulateurs-centres-couts-taux-remu.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/modulateurs-centres-couts-taux-remu.phtml new file mode 100755 index 0000000000000000000000000000000000000000..923079af94b915f83a2b7500becaca3b944cb1ce --- /dev/null +++ b/module/OffreFormation/view/offre-formation/element-pedagogique/modulateurs-centres-couts-taux-remu.phtml @@ -0,0 +1,73 @@ +<div style="margin-top:10px;"> + <?= $this->form()->openTag($form); ?> + + <table class="table table-bordered table-xs"> + <thead> + <tr> + <th>Type(s) Modulateur(s)</th> + <th>Modulateur(s)</th> + </tr> + </thead> + <tbody> + <?php $hasModulateur = 0; ?> + <?php foreach ($form->getElements() as $element): ?> + <tr> + <?php if (!empty(strstr($element->getName(), 'modulateur'))): ?> + <td><?= $element->getLabel(); ?></td> + <td><?= $this->formSelect($form->get($element->getName())); ?></td> + <?php $hasModulateur = 0; ?> + <?php endif; ?> + </tr> + <?php endforeach; ?> + <?php if ($hasModulateur): ?> + <td colspan="2" class="text-center">Aucun modulateur ne correspond aux enseignements de cette formation.</td> + <?php endif; ?> + </tbody> + </table> + <table class="table table-bordered table-xs"> + <thead> + <tr> + <th colspan="2">Centre de coûts de l'élément pédagogique</th> + </tr> + </thead> + <tbody> + <?php if ($form->has('fi')): ?> + <tr> + <td class="text-center"><abbr title="Formation initiale"><?= $form->get('fi')->getLabel(); ?></abbr></td> + <td><?= $this->formSelect($form->get('fi')); ?></td> + </tr> + <?php endif; ?> + <?php if ($form->has('fa')): ?> + <tr> + <td class="text-center"><abbr title="Formation apprentissage"><?= $form->get('fa')->getLabel(); ?></abbr></td> + <td><?= $this->formSelect($form->get('fa')); ?></td> + </tr> + <?php endif; ?> + <?php if ($form->has('fc')): ?> + <tr> + <td class="text-center"><abbr title="Formation continue"><?= $form->get('fc')->getLabel(); ?></abbr></td> + <td><?= $this->formSelect($form->get('fc')); ?></td> + </tr> + <?php endif; ?> + </tbody> + </table> + <table class="table table-bordered table-xs"> + <thead> + <tr> + <th colspan="2">Taux de rémunération de l'élément pédagogique</th> + </tr> + </thead> + <?php if ($form->has('tauxRemu')): ?> + <tr> + <td><?= $this->formSelect($form->get('tauxRemu')); ?></td> + </tr> + <?php endif; ?> + </tbody> + </table> + <?= $this->formSubmit($form->get('submit')); ?> + + <?= $this->form()->closeTag($form); ?> + + +</div> + diff --git a/module/Application/view/application/offre-formation/element-pedagogique/saisir.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/saisir.phtml similarity index 96% rename from module/Application/view/application/offre-formation/element-pedagogique/saisir.phtml rename to module/OffreFormation/view/offre-formation/element-pedagogique/saisir.phtml index 573b97360a992a9f97b752289279ab15a93516e4..54c9be26db46f5c77885565e944bb0f045316baf 100755 --- a/module/Application/view/application/offre-formation/element-pedagogique/saisir.phtml +++ b/module/OffreFormation/view/offre-formation/element-pedagogique/saisir.phtml @@ -4,7 +4,7 @@ * @var $this \Application\View\Renderer\PhpRenderer */ -/* @var $form \Application\Form\OffreFormation\ElementPedagogiqueSaisie */ +/* @var $form \OffreFormation\Form\ElementPedagogiqueSaisie */ /* @var $errors array */ echo $this->form()->openTag($form->prepare()); diff --git a/module/Application/view/application/offre-formation/element-pedagogique/supprimer.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/supprimer.phtml similarity index 75% rename from module/Application/view/application/offre-formation/element-pedagogique/supprimer.phtml rename to module/OffreFormation/view/offre-formation/element-pedagogique/supprimer.phtml index 165b89146111b6b78a0be7d7eecae9f0e7ed9f9a..caa9736230d107e71a8535a826614c891b31cdb4 100755 --- a/module/Application/view/application/offre-formation/element-pedagogique/supprimer.phtml +++ b/module/OffreFormation/view/offre-formation/element-pedagogique/supprimer.phtml @@ -2,9 +2,9 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $element \Application\Entity\Db\ElementPedagogique + * @var $element \OffreFormation\Entity\Db\ElementPedagogique * @var $title string - * @var $form Application\Form\OffreFormation\ElementPedagogiqueSaisie + * @var $form OffreFormation\Form\ElementPedagogiqueSaisie */ $this->messenger()->addCurrentMessagesFromFlashMessenger(); diff --git a/module/Application/view/application/offre-formation/element-pedagogique/synchronisation-par-code.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/synchronisation-par-code.phtml similarity index 76% rename from module/Application/view/application/offre-formation/element-pedagogique/synchronisation-par-code.phtml rename to module/OffreFormation/view/offre-formation/element-pedagogique/synchronisation-par-code.phtml index 998439914ea756dfecc057a2f559bbcb0bca0b8d..600b5d66c2dae092c87d69807631ee2943105a77 100644 --- a/module/Application/view/application/offre-formation/element-pedagogique/synchronisation-par-code.phtml +++ b/module/OffreFormation/view/offre-formation/element-pedagogique/synchronisation-par-code.phtml @@ -3,7 +3,7 @@ /** * @var $this \Application\View\Renderer\PhpRenderer * - * @var $form \Application\Form\OffreFormation\ElementPedagogiqueSynchronisationForm + * @var $form \OffreFormation\Form\ElementPedagogiqueSynchronisationForm * @var $errors array */ diff --git a/module/Application/view/application/offre-formation/element-pedagogique/voir.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/voir.phtml similarity index 85% rename from module/Application/view/application/offre-formation/element-pedagogique/voir.phtml rename to module/OffreFormation/view/offre-formation/element-pedagogique/voir.phtml index 6f41c8154230cf3f2ba06e01f27fbdd1169934b7..90dd9dfdf6c85b42c59a231fdfc9087bd35ba059 100755 --- a/module/Application/view/application/offre-formation/element-pedagogique/voir.phtml +++ b/module/OffreFormation/view/offre-formation/element-pedagogique/voir.phtml @@ -22,8 +22,8 @@ if ($this->isAllowed(Privileges::getResourceId(Privileges::ODF_MODULATEURS_EDITI $this->isAllowed(Privileges::getResourceId(Privileges::ODF_CENTRES_COUT_EDITION))) { $tabs[] = [ 'id' => 'modulateur-cc', - 'label' => '<i class="fas fa-clock"></i> Modulateurs et Centres de coûts', - 'url' => $this->url('of/element/modulateurs-centres-couts', ['elementPedagogique' => $element->getId()]), + 'label' => '<i class="fas fa-clock"></i> Modulateurs, Centres de coûts et Taux', + 'url' => $this->url('of/element/modulateurs-centres-couts-taux-remu', ['elementPedagogique' => $element->getId()]), ]; } diff --git a/module/Application/view/application/offre-formation/element-pedagogique/volume-horaire.phtml b/module/OffreFormation/view/offre-formation/element-pedagogique/volume-horaire.phtml similarity index 94% rename from module/Application/view/application/offre-formation/element-pedagogique/volume-horaire.phtml rename to module/OffreFormation/view/offre-formation/element-pedagogique/volume-horaire.phtml index 6cf64437405dccf8d83ea95f2fd7c80a0f153340..8f679649289e0551550fbccdb5f7047e060197b3 100755 --- a/module/Application/view/application/offre-formation/element-pedagogique/volume-horaire.phtml +++ b/module/OffreFormation/view/offre-formation/element-pedagogique/volume-horaire.phtml @@ -1,8 +1,8 @@ <?php -use Application\Entity\Db\VolumeHoraireEns; use Application\Filter\StringFromFloat; -use Application\Form\OffreFormation\VolumeHoraireEnsForm; +use OffreFormation\Form\VolumeHoraireEnsForm; +use OffreFormation\Entity\Db\VolumeHoraireEns; /** * @var $this \Application\View\Renderer\PhpRenderer diff --git a/module/Application/view/application/offre-formation/etape-centre-cout/saisir.phtml b/module/OffreFormation/view/offre-formation/etape-centre-cout/saisir.phtml similarity index 99% rename from module/Application/view/application/offre-formation/etape-centre-cout/saisir.phtml rename to module/OffreFormation/view/offre-formation/etape-centre-cout/saisir.phtml index c2633b1e1ee6067d220a84e5400a6b185a090727..cf716c2086e626a1a60109116e66885f330d4708 100755 --- a/module/Application/view/application/offre-formation/etape-centre-cout/saisir.phtml +++ b/module/OffreFormation/view/offre-formation/etape-centre-cout/saisir.phtml @@ -3,7 +3,6 @@ <?php echo $this->etapeCentreCoutForm($form); - echo $this->formErrors($form); if ($errors) { echo $this->messenger()->setMessages([UnicaenApp\View\Helper\Messenger::ERROR => $errors]); diff --git a/module/OffreFormation/view/offre-formation/etape-taux-remu/saisir.phtml b/module/OffreFormation/view/offre-formation/etape-taux-remu/saisir.phtml new file mode 100755 index 0000000000000000000000000000000000000000..b5174fa3c5376951dc6f2720f8d69a357e8658ce --- /dev/null +++ b/module/OffreFormation/view/offre-formation/etape-taux-remu/saisir.phtml @@ -0,0 +1,20 @@ +<?php $this->headTitle($title); ?> + +<?php + +echo $this->etapeTauxRemuForm($form); +echo $this->formErrors($form); +if ($errors) { + echo $this->messenger()->setMessages([UnicaenApp\View\Helper\Messenger::ERROR => $errors]); +} + +?> +<style> + div.bootstrap-select.header-select { + width: 85% !important; + } + + button.form-set-value { + width: 10% !important; + } +</style> diff --git a/module/Application/view/application/offre-formation/etape/saisir.phtml b/module/OffreFormation/view/offre-formation/etape/saisir.phtml similarity index 96% rename from module/Application/view/application/offre-formation/etape/saisir.phtml rename to module/OffreFormation/view/offre-formation/etape/saisir.phtml index 4100c60542cdb73feb85926b7d925f8bbfb64dec..7ef5972ff566431ffea178f5abfdbe55597bb77e 100755 --- a/module/Application/view/application/offre-formation/etape/saisir.phtml +++ b/module/OffreFormation/view/offre-formation/etape/saisir.phtml @@ -2,7 +2,7 @@ /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\OffreFormation\EtapeSaisie + * @var $form \OffreFormation\Form\EtapeSaisie * @var $title string */ echo $this->tag('h1', ['class' => 'page-header'])->html($title); diff --git a/module/Application/view/application/offre-formation/etape/supprimer.phtml b/module/OffreFormation/view/offre-formation/etape/supprimer.phtml similarity index 100% rename from module/Application/view/application/offre-formation/etape/supprimer.phtml rename to module/OffreFormation/view/offre-formation/etape/supprimer.phtml diff --git a/module/Application/view/application/offre-formation/etape/taux-mixite.phtml b/module/OffreFormation/view/offre-formation/etape/taux-mixite.phtml similarity index 100% rename from module/Application/view/application/offre-formation/etape/taux-mixite.phtml rename to module/OffreFormation/view/offre-formation/etape/taux-mixite.phtml diff --git a/module/Application/view/application/offre-formation/etape/voir.phtml b/module/OffreFormation/view/offre-formation/etape/voir.phtml similarity index 74% rename from module/Application/view/application/offre-formation/etape/voir.phtml rename to module/OffreFormation/view/offre-formation/etape/voir.phtml index 7be39e2e77146c724199e27bc0b7a9242673240d..107d1b80e883d6de3c63b4af8dc89db872ffe2d4 100755 --- a/module/Application/view/application/offre-formation/etape/voir.phtml +++ b/module/OffreFormation/view/offre-formation/etape/voir.phtml @@ -2,8 +2,8 @@ use Application\Provider\Privilege\Privileges; -/* @var $serviceEtape \Application\Service\EtapeService - * @var $etape \Application\Entity\Db\Etape +/* @var $serviceEtape \OffreFormation\Service\EtapeService + * @var $etape \OffreFormation\Entity\Db\Etape * @var $title string */ @@ -25,6 +25,15 @@ if ($this->isAllowed($etape, Privileges::ODF_CENTRES_COUT_EDITION)) { ]; } +if ($this->isAllowed($etape, Privileges::ODF_CENTRES_COUT_EDITION)) { + $tabs[] = [ + 'id' => 'taux-remus', + 'label' => '<i class="fas fa-euro-sign"></i> Taux de rémunération', + 'url' => $this->url('of/etape/taux-remus', ['etape' => $etape->getId()]), + ]; +} + + if ($this->isAllowed($etape, Privileges::ODF_TAUX_MIXITE_EDITION)) { $tabs[] = [ 'id' => 'taux-mixite', diff --git a/module/Application/view/application/offre-formation/modulateur/saisir.phtml b/module/OffreFormation/view/offre-formation/modulateur/saisir.phtml similarity index 100% rename from module/Application/view/application/offre-formation/modulateur/saisir.phtml rename to module/OffreFormation/view/offre-formation/modulateur/saisir.phtml diff --git a/module/Application/view/application/offre-formation/index.phtml b/module/OffreFormation/view/offre-formation/offre-formation/index.phtml similarity index 93% rename from module/Application/view/application/offre-formation/index.phtml rename to module/OffreFormation/view/offre-formation/offre-formation/index.phtml index 01020cb7f3d638ea41c7c40dd70aa6436d382c6d..1f0555fd9171fecc067d32900c2cb0ef1e2dc130 100755 --- a/module/Application/view/application/offre-formation/index.phtml +++ b/module/OffreFormation/view/offre-formation/offre-formation/index.phtml @@ -4,20 +4,20 @@ * @var $this \Application\View\Renderer\PhpRenderer * @var $structure \Application\Entity\Db\Structure * @var $niveau \Application\Entity\NiveauEtape - * @var $etape \Application\Entity\Db\Etape + * @var $etape \OffreFormation\Entity\Db\Etape * @var $structures \Application\Entity\Db\Structure[] * @var $niveaux \Application\Entity\NiveauEtape[] - * @var $etapes \Application\Entity\Db\Etape[] - * @var $elements \Application\Entity\Db\ElementPedagogique[] + * @var $etapes \OffreFormation\Entity\Db\Etape[] + * @var $elements \OffreFormation\Entity\Db\ElementPedagogique[] */ use Application\Provider\Privilege\Privileges; /** - * @param \Application\Entity\Db\Structure $structure - * @param \Application\Entity\NiveauEtape $niveau - * @param \Application\Entity\Db\Etape $etape + * @param \Application\Entity\Db\Structure $structure + * @param \Application\Entity\NiveauEtape $niveau + * @param \OffreFormation\Entity\Db\Etape $etape */ function makeQuery($structure = null, $niveau = null, $etape = null) { @@ -77,10 +77,10 @@ if ($structure) { } $this->headTitle()->append("Offre de formation"); -$canExport = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_EXPORT_CSV)) && count($elements); -$canViewEtape = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ETAPE_VISUALISATION)); +$canExport = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_EXPORT_CSV)) && count($elements); +$canViewEtape = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ETAPE_VISUALISATION)); $canEditElement = $this->isAllowed($structure, Privileges::ODF_ELEMENT_EDITION); -$canEditEtape = $this->isAllowed($structure, Privileges::ODF_ETAPE_EDITION); +$canEditEtape = $this->isAllowed($structure, Privileges::ODF_ETAPE_EDITION); $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELEMENT_SYNCHRONISATION)); ?> <style> @@ -105,7 +105,6 @@ $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELE </style> <?php ?> - <h1 class="page-header">Offre de formation <?= $structure ? '<small>' . $structure . '</small>' : null ?></h1> <div class="row"> @@ -245,7 +244,7 @@ $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELE echo $this->tag('a', $attrs)->html('<i class="fas fa-plus"></i> Nouvel enseignement'); } if ($canExport) { - $params = [ + $params = [ 'structure' => $structure ? $structure->getId() : null, 'niveau' => $niveau ? $niveau->getId() : null, 'etape' => $etape ? $etape->getId() : null, @@ -268,11 +267,12 @@ $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELE <table class="table table-bordered table-sm table-hover table-sort"> <thead> <tr> - <th colspan="2">Formation</th> + <th colspan="3">Formation</th> <th colspan="5">Enseignement</th> </tr> <tr> <th>Niveau</th> + <th>Code Etape</th> <th>Libellé</th> <th>Code</th> <th>Libellé</th> @@ -283,9 +283,10 @@ $canSyncElement = $this->isAllowed(Privileges::getResourceId(Privileges::ODF_ELE </thead> <tbody> - <?php foreach ($elements as $ep): /* @var $ep \Application\Entity\Db\ElementPedagogique */ ?> + <?php foreach ($elements as $ep): /* @var $ep \OffreFormation\Entity\Db\ElementPedagogique */ ?> <tr id="<?= $ep->getId() ?>"> <td><?= $ep->getEtape()->getNiveauToString() ?></td> + <td class="etape"><?= $ep->getEtape()->getCode() ?></td> <td class="etape"><?= $this->etape($ep->getEtape())->renderLink() ?></td> <td class="element"><?= $ep->getCode() ?></td> <td class="element"><?= $this->elementPedagogique($ep)->renderLink($ep->getLibelle()) ?></td> diff --git a/module/Application/view/application/offre-formation/reconduction-centre-cout.phtml b/module/OffreFormation/view/offre-formation/offre-formation/reconduction-centre-cout.phtml similarity index 90% rename from module/Application/view/application/offre-formation/reconduction-centre-cout.phtml rename to module/OffreFormation/view/offre-formation/offre-formation/reconduction-centre-cout.phtml index b4536c345b8093a24b343e744dcb87a398101ef1..f5fa380074042b64281a05ad82504d05d657ea7f 100644 --- a/module/Application/view/application/offre-formation/reconduction-centre-cout.phtml +++ b/module/OffreFormation/view/offre-formation/offre-formation/reconduction-centre-cout.phtml @@ -13,11 +13,11 @@ $this->headScript()->offsetSetFile(130, $this->basePath('/js/reconduction-centre $selectStructure ->setValueOptions(['' => "(Sélectionnez une composante)"] + \UnicaenApp\Util::collectionAsOptions($structures)) ->setValue($structure ? $structure->getId() : null) - ->setAttributes(['class' => 'structure', + ->setAttributes(['class' => 'structure form-select', 'style' => 'width:250px;']); echo $this->formSelect($selectStructure); ?> - + </div> </div> </div> @@ -26,9 +26,11 @@ $this->headScript()->offsetSetFile(130, $this->basePath('/js/reconduction-centre <div class="alert alert-warning" role="alert"> <strong>IMPORTANT</strong><br/> - Seules les formations reconduites pour la prochaine année universitaire peuvent bénéficier de la reconduction des centres + Seules les formations reconduites pour la prochaine année universitaire peuvent bénéficier de la reconduction des + centres de coûts d'une année sur l'autre. - Si la formation n'est pas disponible dans la liste ci-dessous, veuillez vérifier qu'elle a bien été reconduit pour la + Si la formation n'est pas disponible dans la liste ci-dessous, veuillez vérifier qu'elle a bien été reconduit pour + la prochaine année universitaire. </div> @@ -77,7 +79,8 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger()->addMessagesFrom <?php foreach ($etapesReconduites as $er): ?> <tr> <td> - <input class="checkbox-element" type="checkbox" name="etapes[]" value="<?= $er['ETAPE_CODE'] ?>"> + <input class="checkbox-element" type="checkbox" name="etapes[]" + value="<?= $er['ETAPE_CODE'] ?>"> </td> <td><?= $er['ETAPE_CODE']; ?></td> <td><?= $er['ETAPE_LIBELLE']; ?></td> @@ -86,7 +89,8 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger()->addMessagesFrom <?php endforeach; ?> </tbody> </table> - <button disabled="disabled" id="reconduction-cc-button" class="btn btn-primary pop-ajax" type="button" data-content="Voulez-vous réellement reconduire ces centres de coût pour l'année prochaine ? + <button disabled="disabled" id="reconduction-cc-button" class="btn btn-primary pop-ajax" type="button" + data-content="Voulez-vous réellement reconduire ces centres de coût pour l'année prochaine ? <div class='alert alert-warning'> <button type='button' class='close' data-bs-dismiss='alert' aria-label='Close'><span aria-hidden='true'>×</span></button> Les centres de coûts seront reconduits uniquement sur les éléments pédagogiques / types heures non encore paramétrés. Les centres de coûts déjà positionnés ne seront pas modifiés. diff --git a/module/Application/view/application/offre-formation/reconduction-modulateur.phtml b/module/OffreFormation/view/offre-formation/offre-formation/reconduction-modulateur.phtml similarity index 94% rename from module/Application/view/application/offre-formation/reconduction-modulateur.phtml rename to module/OffreFormation/view/offre-formation/offre-formation/reconduction-modulateur.phtml index fe6a7f23d5b95bf7eafa78dab0c6ab4a6c7e196e..0af0717038956dddc8687125cbec237325d594b6 100644 --- a/module/Application/view/application/offre-formation/reconduction-modulateur.phtml +++ b/module/OffreFormation/view/offre-formation/offre-formation/reconduction-modulateur.phtml @@ -13,10 +13,11 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-modula $selectStructure ->setValueOptions(['' => "(Sélectionnez une composante)"] + \UnicaenApp\Util::collectionAsOptions($structures)) ->setValue($structure ? $structure->getId() : null) - ->setAttributes(['class' => 'structure', + ->setAttributes(['class' => 'structure form-select', 'style' => 'width:250px;']); echo $this->formSelect($selectStructure); ?> + </div> </div> @@ -27,7 +28,8 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-modula <strong>IMPORTANT</strong><br/> Seules les formations reconduites pour la prochaine année universitaire peuvent bénéficier de la reconduction des modulateurs d'une année sur l'autre. - Si la formation n'est pas disponible dans la liste ci-dessous, veuillez vérifier qu'elle a bien été reconduit pour la + Si la formation n'est pas disponible dans la liste ci-dessous, veuillez vérifier qu'elle a bien été reconduit pour + la prochaine année universitaire. </div> @@ -75,7 +77,8 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); <?php foreach ($etapesReconduites as $er): ?> <tr> <td> - <input class="checkbox-element" type="checkbox" name="etapes[]" value="<?= $er['ETAPE_CODE']; ?>"> + <input class="checkbox-element" type="checkbox" name="etapes[]" + value="<?= $er['ETAPE_CODE']; ?>"> </td> <td><?= $er['ETAPE_CODE']; ?></td> <td><?= $er['ETAPE_LIBELLE']; ?></td> diff --git a/module/Application/view/application/offre-formation/reconduction.phtml b/module/OffreFormation/view/offre-formation/offre-formation/reconduction.phtml similarity index 87% rename from module/Application/view/application/offre-formation/reconduction.phtml rename to module/OffreFormation/view/offre-formation/offre-formation/reconduction.phtml index c192fb0956220ddee629a834e75c101ab42dd2f0..a0ca1e26c9fb3448cb79f4768a193d3e60631a03 100644 --- a/module/Application/view/application/offre-formation/reconduction.phtml +++ b/module/OffreFormation/view/offre-formation/offre-formation/reconduction.phtml @@ -18,11 +18,12 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-offre. $selectStructure = new \Laminas\Form\Element\Select('structure'); $selectStructure ->setValueOptions(['' => "(Sélectionnez une composante)"] + \UnicaenApp\Util::collectionAsOptions($structures)) - ->setValue($structure?->getId()) - ->setAttributes(['class' => 'structure', + ->setValue($structure ? $structure->getId() : null) + ->setAttributes(['class' => 'structure form-select', 'style' => 'width:250px;']); echo $this->formSelect($selectStructure); ?> + </div> </div> @@ -66,7 +67,8 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-offre. </table> <?php else: ?> <?php if ($fromPost): ?> - <p><a href="<?= $this->url('aof/reconduction', [], ['query' => ['structure' => $structure->getId()]]) ?>">< + <p> + <a href="<?= $this->url('aof/reconduction', [], ['query' => ['structure' => $structure->getId()]]) ?>">< Retour à la liste des formations.</a></p> <?php else: ?> @@ -94,20 +96,24 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-offre. } ?>"> <?php if ($ec['reconduction'] == 'oui'): ?> <?php if ($ec['reconductionFait'] == 'oui'): ?> - <th><input title="Formation déjà reconduite pour l'année prochaine" type="checkbox" + <th><input title="Formation déjà reconduite pour l'année prochaine" + type="checkbox" class="checkbox-formation" disabled="disabled" name="etape[]" - value="<?= $ec['etape']->getId(); ?>"/> <span class="label label-warning" - style="margin:0 auto;">Reconduit</span> + value="<?= $ec['etape']->getId(); ?>"/> <span + class="badge bg-warning text-dark" + style="margin:0 auto;">Reconduit</span> </th> <?php else: ?> <th><input title="Formation non reconductible" type="checkbox" class="checkbox-formation" disabled="disabled" name="etape[]" - value="<?= $ec['etape']->getId(); ?>"/> <span class="label label-warning" - style="margin:0 auto;">Non reconductible</span> + value="<?= $ec['etape']->getId(); ?>"/> <span + class="badge bg-warning text-dark" + style="margin:0 auto;">Non reconductible</span> </th> <?php endif; ?> <?php else: ?> - <th><input type="checkbox" class="checkbox-formation" checked="checked" name="etape[]" + <th><input type="checkbox" class="checkbox-formation" checked="checked" + name="etape[]" value="<?= $ec['etape']->getId(); ?>"/></th> <?php endif; ?> <th colspan="6">Formation @@ -131,16 +137,17 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-offre. <?php } ?> <?php foreach ($ec['elements_pedagogique'] as $ep): ?> - <tr id="<?= $ep['element']->getId() ?>" class="<?php if ($ep['reconduction'] == 'oui') { - echo "active"; - } ?>"> + <tr id="<?= $ep['element']->getId() ?>" + class="<?php if ($ep['reconduction'] == 'oui') { + echo "active"; + } ?>"> <?php if ($ep['reconduction'] == 'oui'): ?> <td> <input title="Elément pédagogique déjà reconduit pour l'année prochaine" class="checkbox-element" disabled="disabled" type="checkbox" name="element[<?php echo $ec['etape']->getId(); ?>][]" value="<?= $ep['element']->getId(); ?>"/> - <span class="label label-warning">Reconduit</span> + <span class="badge bg-warning text-dark">Reconduit</span> </td> <?php else: ?> <td><input class="checkbox-element" type="checkbox" checked="checked" @@ -157,7 +164,8 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-offre. </tbody> </table> <?php endforeach; ?> - <button id="reconduction-button" class="btn btn-primary pop-ajax" type="button" data-content="Voulez-vous réellement reconduire ces offres pour l'année prochaine ? + <button id="reconduction-button" class="btn btn-primary pop-ajax" type="button" + data-content="Voulez-vous réellement reconduire ces offres pour l'année prochaine ? <div class='alert alert-warning'> <button type='button' class='close' data-bs-dismiss='alert' aria-label='Close'><span aria-hidden='true'>×</span></button> Les formations ainsi que les éléments pédagogiques sélectionnés seront reconduits pour l'année universitaire prochaine. @@ -192,4 +200,4 @@ $this->headScript()->offsetSetFile(100, $this->basePath('/js/reconduction-offre. </div> -</div> +</div> \ No newline at end of file diff --git a/module/Application/view/application/offre-formation/search-of.phtml b/module/OffreFormation/view/offre-formation/offre-formation/search-of.phtml similarity index 100% rename from module/Application/view/application/offre-formation/search-of.phtml rename to module/OffreFormation/view/offre-formation/offre-formation/search-of.phtml diff --git a/module/Application/view/application/type-formation/index.phtml b/module/OffreFormation/view/offre-formation/type-formation/index.phtml similarity index 65% rename from module/Application/view/application/type-formation/index.phtml rename to module/OffreFormation/view/offre-formation/type-formation/index.phtml index 48dadf2cac732cc32ec7b977d84b73f212a3d2e0..38b071c75d0b0cbd08e5ac1f9970ad25285492e5 100755 --- a/module/Application/view/application/type-formation/index.phtml +++ b/module/OffreFormation/view/offre-formation/type-formation/index.phtml @@ -33,7 +33,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); title="Modifier la collection"><i class="fas fa-pen-to-square"></i></a> <?php if (!$groupeTypeFormation->getSource()->getImportable()): ?> - <a class="pop-ajax " data-title="Suppression d'une collection" data-content="Êtes-vous sur de vouloir supprimer" + <a class="pop-ajax " data-title="Suppression d'une collection" data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('type-formation/supprimer-groupe', ['groupeTypeFormation' => $groupeTypeFormation->getId()]) ?>" @@ -45,45 +45,53 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); </div> <?php endif; ?> </div> - - <table class="table table-bordered table-sm"> - <thead> - <tr> - <th style="text-align: center" width="20%">Libellé court</th> - <th style="text-align: center" width="60%">Libellé long</th> - <th style="text-align: center">Source</th> - <?php if ($canEdit): ?> - <th style="text-align: center">Actions</th> - <?php endif; ?> - </tr> - </thead> - <tbody class="triables ui-sortable"> - <?php foreach ($groupeTypeFormation->getTypeFormation() as $typeFormation): ?> - <tr class="champ-triable" data-id= <?php echo $typeFormation->getId() ?>> - <td style=""><?= $typeFormation->getLibelleCourt(); ?></td> - <td><?= $typeFormation->getLibelleLong(); ?></td> - <td style="text-align: center"><?= $typeFormation->getSource()->getLibelle(); ?></td> + <div class="card-body"> + <table class="table table-bordered table-sm"> + <thead> + <tr> + <th style="text-align: center" width="20%">Libellé court</th> + <th style="text-align: center" width="60%">Libellé long</th> + <th style="text-align: center">Source</th> <?php if ($canEdit): ?> - <td style="text-align: center"> - <a class="ajax-modal" data-event="type-formation-edition" - href="<?= $this->url('type-formation/saisie', ['typeFormation' => $typeFormation->getId()], ['query' => ['tab' => 'edition']]) ?>" - title="Modifier le type de formation"><i class="fas fa-pen-to-square"></i></a> - <?php if (!$typeFormation->getSource()->getImportable()): ?> - <a class="pop-ajax" data-title="Suppression du type de formation" data-content="Êtes-vous sur de vouloir supprimer" - data-confirm="true" - data-submit-reload="true" - href="<?= $this->url('type-formation/supprimer', ['typeFormation' => $typeFormation->getId()]) ?>" - title="Supprimer le type de formation"><i class="fas fa-trash-can"></i></a> - <?php endif; ?> - </td> + <th style="text-align: center">Actions</th> <?php endif; ?> - </tr> - <?php endforeach; ?> - </tbody> - </table> - - + </thead> + <tbody class="triables ui-sortable"> + <?php foreach ($groupeTypeFormation->getTypeFormation() as $typeFormation): ?> + <tr class="champ-triable" data-id= <?php echo $typeFormation->getId() ?>> + <td style=""><?= $typeFormation->getLibelleCourt(); ?></td> + <td><?= $typeFormation->getLibelleLong(); ?></td> + <td style="text-align: center"><?= $typeFormation->getSource()->getLibelle(); ?></td> + <?php if ($canEdit): ?> + <td style="text-align: center"> + <a class="ajax-modal" data-event="type-formation-edition" + href="<?= $this->url('type-formation/saisie', ['typeFormation' => $typeFormation->getId(), 'groupeTypeFormation' => $groupeTypeFormation->getId()], ['query' => ['tab' => 'edition']]) ?>" + title="Modifier le type de formation"><i class="fas fa-pen-to-square"></i></a> + <?php if (!$typeFormation->getSource()->getImportable()): ?> + <a class="pop-ajax" data-title="Suppression du type de formation" + data-content="Êtes-vous sur de vouloir supprimer ?" + data-confirm="true" + data-submit-reload="true" + href="<?= $this->url('type-formation/supprimer', ['typeFormation' => $typeFormation->getId()]) ?>" + title="Supprimer le type de formation"><i class="fas fa-trash-can"></i></a> + <?php endif; ?> + </td> + <?php endif; ?> + + </tr> + <?php endforeach; ?> + </tbody> + </table> + <?php if ($canEdit): ?> + <tr class="champ-triable"> + <a class="btn btn-primary ajax-modal " data-event="type-formation-edition" + href="<?= $this->url('type-formation/saisie', ['typeFormation' => '', 'groupeTypeFormation' => $groupeTypeFormation->getId()]); ?>"><i + class="fas fa-plus"></i> + Ajout d'un nouveau type de formation</a> + </tr> + <?php endif; ?> + </div> </div> </div> <?php endforeach; ?> @@ -115,7 +123,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); href="<?= $this->url('type-formation/saisie', ['typeFormation' => $typeFormationWithoutGroupe->getId()], ['query' => ['tab' => 'edition']]) ?>" title="Modifier le type de formation"><i class="fas fa-pen-to-square"></i></a> <?php if (!$typeFormationWithoutGroupe->getSource()->getImportable()): ?> - <a class="pop-ajax" data-title="Suppression du type de formation" data-content="Êtes-vous sur de vouloir supprimer" + <a class="pop-ajax" data-title="Suppression du type de formation" data-content="Êtes-vous sur de vouloir supprimer ?" data-confirm="true" data-submit-reload="true" href="<?= $this->url('type-formation/supprimer', ['typeFormation' => $typeFormationWithoutGroupe->getId()]) ?>" @@ -139,14 +147,6 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); </a> </tr> <?php endif; ?> -<?php if ($canEdit): ?> - <tr class="champ-triable"> - <a class="btn btn-primary ajax-modal " data-event="type-formation-edition" href="<?= $this->url('type-formation/saisie'); ?>"><i - class="fas fa-plus"></i> - Ajout d'un nouveau type de formation</a> - </tr> -<?php endif; ?> - <script type="text/javascript"> $(function () { @@ -164,7 +164,7 @@ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); type: 'POST', url: "<?= $this->url('type-formation/trier')?>", data: {champsIds: champsIds}, - success: function () { alertFlash("Tri effectué", 'success', 3000); }, + success: function () { Util.alert("Tri effectué", 'success'); }, }); } }); diff --git a/module/Application/view/application/type-formation/saisie.phtml b/module/OffreFormation/view/offre-formation/type-formation/saisie-groupe.phtml similarity index 100% rename from module/Application/view/application/type-formation/saisie.phtml rename to module/OffreFormation/view/offre-formation/type-formation/saisie-groupe.phtml diff --git a/module/OffreFormation/view/offre-formation/type-formation/saisie.phtml b/module/OffreFormation/view/offre-formation/type-formation/saisie.phtml new file mode 100755 index 0000000000000000000000000000000000000000..ac28762d2c392f055cf83ceaa86f7de06e74155e --- /dev/null +++ b/module/OffreFormation/view/offre-formation/type-formation/saisie.phtml @@ -0,0 +1,7 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + */ + +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); +echo $this->form($form); diff --git a/module/Application/view/application/type-intervention/index.phtml b/module/OffreFormation/view/offre-formation/type-intervention/index.phtml similarity index 97% rename from module/Application/view/application/type-intervention/index.phtml rename to module/OffreFormation/view/offre-formation/type-intervention/index.phtml index fafd4bb20c32059a952e2c16b4016e6e380d511a..069a29a74bc476f9d1e1261d2937ac529442cf09 100755 --- a/module/Application/view/application/type-intervention/index.phtml +++ b/module/OffreFormation/view/offre-formation/type-intervention/index.phtml @@ -1,9 +1,8 @@ <?php use Application\Entity\Db\Annee; -use Application\Entity\Db\TypeIntervention; use Application\Provider\Privilege\Privileges; -use UnicaenApp\Util; +use OffreFormation\Entity\Db\TypeIntervention; /** * @var $this \Application\View\Renderer\PhpRenderer @@ -145,10 +144,10 @@ $canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::TYPE_INTERVENT console.debug(champsIds); $.ajax({ type: 'POST', - url: Url('type-intervention/type-intervention-trier'), + url: Util.url('type-intervention/type-intervention-trier'), data: {champsIds: champsIds}, success: function (res) { - alertFlash('Tri des champs effectué', 'success', 3000); + Util.alert('Tri des champs effectué', 'success'); }, }); } diff --git a/module/Application/view/application/type-intervention/saisie.phtml b/module/OffreFormation/view/offre-formation/type-intervention/saisie.phtml similarity index 100% rename from module/Application/view/application/type-intervention/saisie.phtml rename to module/OffreFormation/view/offre-formation/type-intervention/saisie.phtml diff --git a/module/Application/view/application/type-intervention/statut-delete.phtml b/module/OffreFormation/view/offre-formation/type-intervention/statut-delete.phtml similarity index 84% rename from module/Application/view/application/type-intervention/statut-delete.phtml rename to module/OffreFormation/view/offre-formation/type-intervention/statut-delete.phtml index 1090d1726d31c1857203e6f9647f15c6aadad412..db662f17125f1b04837b9959814efdd85a8916fb 100644 --- a/module/Application/view/application/type-intervention/statut-delete.phtml +++ b/module/OffreFormation/view/offre-formation/type-intervention/statut-delete.phtml @@ -5,7 +5,7 @@ * @var $errors array * @var $form \Application\Form\Supprimer * @var $title string - * /* @var $typeIntervention \Application\Entity\Db\TypeIntervention + * /* @var $typeIntervention \OffreFormation\Entity\Db\TypeIntervention */ $this->messenger()->addCurrentMessagesFromFlashMessenger(); diff --git a/module/Application/view/application/type-intervention/statut-saisie.phtml b/module/OffreFormation/view/offre-formation/type-intervention/statut-saisie.phtml similarity index 100% rename from module/Application/view/application/type-intervention/statut-saisie.phtml rename to module/OffreFormation/view/offre-formation/type-intervention/statut-saisie.phtml diff --git a/module/Application/view/application/type-intervention/statut.phtml b/module/OffreFormation/view/offre-formation/type-intervention/statut.phtml similarity index 97% rename from module/Application/view/application/type-intervention/statut.phtml rename to module/OffreFormation/view/offre-formation/type-intervention/statut.phtml index 30caaba552d30ed64d06db2e794f6d23f20f929c..1475a02ddc854ea5f356934544158abb8b9b7be0 100644 --- a/module/Application/view/application/type-intervention/statut.phtml +++ b/module/OffreFormation/view/offre-formation/type-intervention/statut.phtml @@ -1,9 +1,8 @@ <?php -use Application\Entity\Db\TypeInterventionStatut; -use Application\Provider\Privilege\Privileges; -use UnicaenApp\Util; use Application\Filter\StringFromFloat; +use Application\Provider\Privilege\Privileges; +use OffreFormation\Entity\Db\TypeInterventionStatut; /** * @var $this \Application\View\Renderer\PhpRenderer diff --git a/module/Application/view/application/type-intervention/type-intervention-structure-saisie.phtml b/module/OffreFormation/view/offre-formation/type-intervention/type-intervention-structure-saisie.phtml similarity index 90% rename from module/Application/view/application/type-intervention/type-intervention-structure-saisie.phtml rename to module/OffreFormation/view/offre-formation/type-intervention/type-intervention-structure-saisie.phtml index f171b654094bf891177b6fd65001ef7df65c354c..0007501e73a8187d2e0a424d1204d3c41f73a2c1 100755 --- a/module/Application/view/application/type-intervention/type-intervention-structure-saisie.phtml +++ b/module/OffreFormation/view/offre-formation/type-intervention/type-intervention-structure-saisie.phtml @@ -1,7 +1,7 @@ <?php /** * @var $this \Application\View\Renderer\PhpRenderer - * @var $form \Application\Form\TypeIntervention\TypeInterventionStructureSaisieForm + * @var $form \OffreFormation\Form\TypeIntervention\TypeInterventionStructureSaisieForm */ echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); diff --git a/module/Paiement/Module.php b/module/Paiement/Module.php new file mode 100755 index 0000000000000000000000000000000000000000..92a3eb14457f99574d372229f7ea381a7d802f9a --- /dev/null +++ b/module/Paiement/Module.php @@ -0,0 +1,22 @@ +<?php + +namespace Paiement; + +use Application\ConfigFactory; + +class Module +{ + + public function getConfig() + { + return ConfigFactory::configFromSimplified(__DIR__, __NAMESPACE__); + } + + + + public function getAutoloaderConfig() + { + return ConfigFactory::autoloaderConfig(__DIR__, __NAMESPACE__); + } + +} diff --git a/module/Paiement/autoload_classmap.php b/module/Paiement/autoload_classmap.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/Paiement/autoload_classmap.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Paiement/config/module.config.php b/module/Paiement/config/module.config.php new file mode 100644 index 0000000000000000000000000000000000000000..b815b6ac27690dcd544aaa96bcb8e756c36d1e8c --- /dev/null +++ b/module/Paiement/config/module.config.php @@ -0,0 +1,129 @@ +<?php + +namespace Paiement; + +use Application\Provider\Privilege\Privileges; +use Paiement\Controller\TauxRemuController; +use Paiement\Service\TauxRemuService; +use Paiement\Service\TauxRemuServiceFactory; +use UnicaenAuth\Guard\PrivilegeController; + + +return [ + 'routes' => [ + 'taux' => [ + 'route' => '/taux', + 'controller' => TauxRemuController::class, + 'action' => 'index', + 'may_terminate' => true, + 'child_routes' => [ + 'saisir' => [ + 'route' => '/saisir[/:tauxRemu]', + 'controller' => TauxRemuController::class, + 'action' => 'saisir', + ], + 'get' => [ + 'route' => '/get/:tauxRemu', + 'controller' => TauxRemuController::class, + 'action' => 'get', + ], + 'liste-taux' => [ + 'route' => '/liste-taux', + 'controller' => TauxRemuController::class, + 'action' => 'getListeTaux', + ], + 'supprimer' => [ + 'route' => '/supprimer/:tauxRemu', + 'controller' => TauxRemuController::class, + 'action' => 'supprimer', + ], + 'saisir-valeur' => [ + 'route' => '/saisir-valeur[/:tauxRemu][/:tauxRemuValeur]', + 'controller' => TauxRemuController::class, + 'action' => 'saisirValeur', + ], + 'supprimer-valeur' => [ + 'route' => '/supprimer-valeur/:tauxRemuValeur', + 'controller' => TauxRemuController::class, + 'action' => 'supprimerValeur', + ], + ], + ], + ], + + + 'navigation' => [ + 'administration' => [ + 'pages' => [ + 'intervenants' => [ + 'pages' => [ + 'taux' => [ + 'label' => "Taux de rémunération", + 'route' => 'taux', + 'resource' => PrivilegeController::getResourceId(TauxRemuController::class, 'index'), + 'order' => 60, + ], + ], + ], + ], + ], + ], + + 'rules' => [ + [ + 'privileges' => Privileges::TAUX_EDITION, + 'resources' => 'TauxRemu', + 'assertion' => Assertion\TauxRemuAssertion::class, + ], + [ + 'privileges' => Privileges::TAUX_SUPPRESSION, + 'resources' => 'TauxRemu', + 'assertion' => Assertion\TauxRemuAssertion::class, + ], + ], + + 'guards' => [ + [ + 'controller' => TauxRemuController::class, + 'action' => ['index', 'get', 'getListeTaux'], + 'privileges' => [ + Privileges::TAUX_VISUALISATION, + ], + ], + [ + 'controller' => TauxRemuController::class, + 'action' => ['saisir', 'saisirValeur'], + 'privileges' => [ + Privileges::TAUX_EDITION, + ], + 'assertion' => Assertion\TauxRemuAssertion::class, + + ], + [ + 'controller' => TauxRemuController::class, + 'action' => ['supprimer', 'supprimerValeur'], + 'privileges' => [ + Privileges::TAUX_SUPPRESSION, + ], + + ], + ], + + 'controllers' => [ + TauxRemuController::class => Controller\TauxRemuControllerFactory::class, + ], + + 'services' => [ + TauxRemuService::class => TauxRemuServiceFactory::class, + Assertion\TauxRemuAssertion::class => Assertion\TauxRemuAssertionFactory::class, + ], + + 'forms' => [ + Form\TauxForm::class => Form\TauxFormFactory::class, + ], + + 'view_helpers' => [ + ], + + +]; \ No newline at end of file diff --git a/module/Paiement/src/Assertion/TauxRemuAssertion.php b/module/Paiement/src/Assertion/TauxRemuAssertion.php new file mode 100644 index 0000000000000000000000000000000000000000..ff2be18792190562450d44be0c5fdd2a15ba589b --- /dev/null +++ b/module/Paiement/src/Assertion/TauxRemuAssertion.php @@ -0,0 +1,80 @@ +<?php + +namespace Paiement\Assertion; + +use Application\Acl\Role; +use Application\Entity\Db\Agrement; +use Application\Provider\Privilege\Privileges; +use Paiement\Entity\Db\TauxRemu; +use phpDocumentor\Reflection\Types\Boolean; +use UnicaenAuth\Assertion\AbstractAssertion; +use Laminas\Permissions\Acl\Resource\ResourceInterface; + + +/** + * Description of TauxRemuAssertion + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TauxRemuAssertion extends AbstractAssertion +{ + + /** + * Exemple + */ + protected function assertEntity(ResourceInterface $entity = null, $privilege = null) + { + + $role = $this->getRole(); + + // Si le rôle n'est pas renseigné alors on s'en va... + if (!$role instanceof Role) return false; + // pareil si le rôle ne possède pas le privilège adéquat + if ($privilege && !$role->hasPrivilege($privilege)) return false; + + // Si c'est bon alors on affine... + switch (true) { + case + $entity instanceof TauxRemu: + switch ($privilege) { + case Privileges::TAUX_SUPPRESSION: + return $this->assertTauxRemuSuppression($entity); + break; + case Privileges::TAUX_EDITION: + return $this->assertTauxRemuEdition($entity); + break; + } + break; + } + + return true; + } + + + + /** + * @param Role $role + * @param TauxRemu $entity + * + * @return bool + */ + private function assertTauxRemuEdition(TauxRemu $entity): bool + { + return !$entity->isDefaut(); + } + + + + /** + * @param Role $role + * @param TauxRemu $entity + * + * @return bool + */ + private function assertTauxRemuSuppression(TauxRemu $entity): bool + { + return !$entity->isDefaut() & !$entity->hasChildren(); + } + +} + diff --git a/module/Paiement/src/Assertion/TauxRemuAssertionFactory.php b/module/Paiement/src/Assertion/TauxRemuAssertionFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..8885a6f305538ecf0daa4f988b9bbe1ed141ce6a --- /dev/null +++ b/module/Paiement/src/Assertion/TauxRemuAssertionFactory.php @@ -0,0 +1,28 @@ +<?php + +namespace Paiement\Assertion; + +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxRemuAssertionFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TauxRemuAssertionFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxRemuAssertion + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxRemuAssertion + { + return new TauxRemuAssertion(); + } +} + diff --git a/module/Paiement/src/Controller/TauxRemuController.php b/module/Paiement/src/Controller/TauxRemuController.php new file mode 100644 index 0000000000000000000000000000000000000000..537ac5b71b17e69d08aab1fa0a31082aa7b8a799 --- /dev/null +++ b/module/Paiement/src/Controller/TauxRemuController.php @@ -0,0 +1,159 @@ +<?php + +namespace Paiement\Controller; + +use Application\Controller\AbstractController; +use Application\Provider\Privilege\Privileges; +use Paiement\Entity\Db\TauxRemu; +use Paiement\Form\TauxFormAwareTrait; +use Paiement\Form\TauxValeurFormAwareTrait; +use Paiement\Service\TauxRemuServiceAwareTrait; +use Application\Service\Traits\ContextServiceAwareTrait; +use UnicaenApp\View\Model\MessengerViewModel; + +/** + * Description of TauxRemuController + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class TauxRemuController extends AbstractController +{ + use TauxRemuServiceAwareTrait; + use ContextServiceAwareTrait; + use TauxFormAwareTrait; + use TauxValeurFormAwareTrait; + + public function indexAction() + { + $annee = $this->getServiceContext()->getAnnee(); + + return compact('annee'); + } + + + + public function getListeTauxAction() + { + $this->em()->getFilters()->enable('historique')->init([ + TauxRemu::class, + ]); + + + $tauxListe = $this->getServiceTauxRemu()->getTauxRemusAnnee(); + + $liste = []; + /** @var TauxRemu $taux */ + foreach ($tauxListe as $taux) { + //Calcul de la liste des taux + $liste[$taux->getId()] = $this->getServiceTauxRemu()->tauxWs($taux); + $liste[$taux->getId()]['canEdit'] = $this->isAllowed($taux,Privileges::TAUX_EDITION); + $liste[$taux->getId()]['canDeleteValeur'] = $this->isAllowed($taux,Privileges::TAUX_SUPPRESSION); + $liste[$taux->getId()]['canDelete'] = $liste[$taux->getId()]['canDeleteValeur'] && !$taux->hasChildren(); + } + + + return $this->axios()->send($liste); + } + + + + public function saisirAction() + { + + $tauxRemu = $this->getEvent()->getParam('tauxRemu'); + $form = $this->getFormTaux(); + if (empty($tauxRemu)) { + $title = "Création d'un nouveau taux"; + $tauxRemu = $this->getServiceTauxRemu()->newEntity(); + } else { + $title = "Édition d'un taux"; + } + $form->bindRequestSave($tauxRemu, $this->getRequest(), function () use ($tauxRemu, $form) { + + $this->em()->persist($tauxRemu); + $tauxRemuValeurs = $tauxRemu->getTauxRemuValeurs(); + foreach ($tauxRemuValeurs as $tauxRemuValeur) { + $tauxRemuValeur->setTauxRemu($tauxRemu); + $this->em()->persist($tauxRemuValeur); + } + $this->em()->flush($tauxRemu); + foreach ($tauxRemuValeurs as $tauxRemuValeur) { + $this->em()->flush($tauxRemuValeur); + } + $this->flashMessenger()->addSuccessMessage( + "Ajout réussi" + ); + }); + + return compact('form', 'title'); + } + + + + public function saisirValeurAction(): array + { + + $tauxRemuValeurId = $this->params()->fromRoute('tauxRemuValeur'); + $form = $this->getFormTauxValeur(); + + if (empty($tauxRemuValeurId)) { + $title = "Création d'une nouvelle valeur"; + $tauxRemuValeur = $this->getServiceTauxRemu()->newEntityValeur(); + } else { + $tauxRemuValeur = $this->getServiceTauxRemu()->getTauxRemuValeur($tauxRemuValeurId); + $title = "Édition d'une valeur"; + } + + if ($tauxRemuValeur->getTauxRemu() == null) { + $tauxRemu = $this->getEvent()->getParam('tauxRemu'); + $tauxRemuValeur->setTauxRemu($tauxRemu); + } + + + $form->bindRequestSave($tauxRemuValeur, $this->getRequest(), function () use ($tauxRemuValeur, $form) { + $this->em()->persist($tauxRemuValeur); + $this->em()->flush($tauxRemuValeur); + $this->flashMessenger()->addSuccessMessage( + "Ajout réussi" + ); + }); + + return compact('form', 'title'); + } + + + + public function supprimerAction(): \Laminas\View\Model\JsonModel + { + $tauxRemu = $this->getEvent()->getParam('tauxRemu'); + $this->getServiceTauxRemu()->delete($tauxRemu, true); + + $this->flashMessenger()->addSuccessMessage("Taux supprimée avec succès."); + + return $this->axios()->send([]); + } + + /** + * Retourne les données pour un taux + * + * @return \Laminas\View\Model\JsonModel + */ + public function getAction() + { + $tauxRemu = $this->getEvent()->getParam('tauxRemu'); + + return $this->axios()->send($tauxRemu); + } + + public function supprimerValeurAction(): MessengerViewModel + { + $tauxRemuValeurId = $this->params()->fromRoute('tauxRemuValeur'); + $tauxRemuValeur = $this->getServiceTauxRemu()->getTauxRemuValeur($tauxRemuValeurId); + $this->em()->remove($tauxRemuValeur); + $this->em()->flush(); + + + return new MessengerViewModel(); + } +} + diff --git a/module/Paiement/src/Controller/TauxRemuControllerFactory.php b/module/Paiement/src/Controller/TauxRemuControllerFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..8dbd677225edd13c950238eedfea2cddcae092e6 --- /dev/null +++ b/module/Paiement/src/Controller/TauxRemuControllerFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace Paiement\Controller; + +use Application\Service\ContextService; +use Paiement\Service\TauxRemuService; +use Psr\Container\ContainerInterface; + +/** + * Description of TauxRemuControllerFactory + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class TauxRemuControllerFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxRemuController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxRemuController + { + $controller = new TauxRemuController; + $controller->setServiceTauxRemu($container->get(TauxRemuService::class)); + $controller->setServiceContext($container->get(ContextService::class)); + + return $controller; + } +} + diff --git a/module/Paiement/src/Entity/Db/Mapping/Paiement.Entity.Db.TauxRemu.dcm.xml b/module/Paiement/src/Entity/Db/Mapping/Paiement.Entity.Db.TauxRemu.dcm.xml new file mode 100755 index 0000000000000000000000000000000000000000..65a7460a18eddf9f338a5437d298bc2462359bbd --- /dev/null +++ b/module/Paiement/src/Entity/Db/Mapping/Paiement.Entity.Db.TauxRemu.dcm.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Paiement\Entity\Db\TauxRemu" table="TAUX_REMU"> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + </id> + <field name="code" type="string" column="CODE" length="20" nullable="false"/> + <field name="libelle" type="string" column="LIBELLE" length="50" nullable="false"/> + + <many-to-one field="tauxRemu" target-entity="Paiement\Entity\Db\TauxRemu"> + <join-column name="TAUX_REMU_ID" referenced-column-name="ID"/> + </many-to-one> + <one-to-many field="sousTauxRemu" target-entity="Paiement\Entity\Db\TauxRemu" mapped-by="tauxRemu"> + </one-to-many> + + <one-to-many field="tauxRemuValeurs" target-entity="Paiement\Entity\Db\TauxRemuValeur" mapped-by="tauxRemu"> + <order-by> + <order-by-field name="dateEffet" direction="DESC"/> + </order-by> + </one-to-many> + + <one-to-many field="statuts" target-entity="Intervenant\Entity\Db\Statut" mapped-by="tauxRemu"> + <order-by> + <order-by-field name="ordre" direction="ASC"/> + </order-by> + </one-to-many> + + <field name="histoCreation" type="datetime" column="HISTO_CREATION" nullable="false"/> + <many-to-one field="histoCreateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_CREATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> + <many-to-one field="histoModificateur" target-entity="Application\Entity\Db\Utilisateur"> + <join-column name="HISTO_MODIFICATEUR_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="histoDestruction" type="datetime" column="HISTO_DESTRUCTION" nullable="true"/> + <many-to-one field="histoDestructeur" target-entity="Application\Entity\Db\Utilisateur"> + <join-columns> + <join-column name="HISTO_DESTRUCTEUR_ID" referenced-column-name="ID"/> + </join-columns> + </many-to-one> + </entity> +</doctrine-mapping> \ No newline at end of file diff --git a/module/Paiement/src/Entity/Db/Mapping/Paiement.Entity.Db.TauxRemuValeur.dcm.xml b/module/Paiement/src/Entity/Db/Mapping/Paiement.Entity.Db.TauxRemuValeur.dcm.xml new file mode 100755 index 0000000000000000000000000000000000000000..d88f75e1c849c0f507112211f49551837a5abc90 --- /dev/null +++ b/module/Paiement/src/Entity/Db/Mapping/Paiement.Entity.Db.TauxRemuValeur.dcm.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> + <entity name="Paiement\Entity\Db\TauxRemuValeur" table="TAUX_REMU_VALEUR"> + <id name="id" type="integer" column="ID"> + <generator strategy="SEQUENCE"/> + <sequence-generator sequence-name="TAUX_REMU_VALEUR_ID_SEQ" allocation-size="1" initial-value="1"/> + </id> + <many-to-one field="tauxRemu" target-entity="Paiement\Entity\Db\TauxRemu"> + <join-column name="TAUX_REMU_ID" referenced-column-name="ID"/> + </many-to-one> + <field name="dateEffet" type="datetime" column="DATE_EFFET" nullable="false"/> + <field name="valeur" type="float" column="VALEUR" precision="126" scale="0" nullable="false"/> + </entity> +</doctrine-mapping> \ No newline at end of file diff --git a/module/Paiement/src/Entity/Db/TauxRemu.php b/module/Paiement/src/Entity/Db/TauxRemu.php new file mode 100755 index 0000000000000000000000000000000000000000..4f05a5da0daf197720e5c27f7f68ed5b2b0a22f2 --- /dev/null +++ b/module/Paiement/src/Entity/Db/TauxRemu.php @@ -0,0 +1,366 @@ +<?php + +namespace Paiement\Entity\Db; + +use Application\Entity\Db\Annee; +use Application\Service\Traits\ContextServiceAwareTrait; +use DateTime; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Laminas\Permissions\Acl\Resource\ResourceInterface; +use Paiement\Service\TauxRemuServiceAwareTrait; +use UnicaenApp\Entity\HistoriqueAwareInterface; +use UnicaenApp\Entity\HistoriqueAwareTrait; +use UnicaenApp\Util; + +class TauxRemu implements HistoriqueAwareInterface, ResourceInterface +{ + + const CODE_DEFAUT = 'TLD'; + + use HistoriqueAwareTrait; + use TauxRemuServiceAwareTrait; + use ContextServiceAwareTrait; + + protected ?int $id = null; + + protected ?string $code = null; + + protected ?string $libelle = null; + + protected ?TauxRemu $tauxRemu = null; + + protected Collection $tauxRemuValeurs; + + protected Collection $statuts; + + protected Collection $sousTauxRemu; + + + + + public function __construct() + { + $this->tauxRemuValeurs = new ArrayCollection(); + $this->sousTauxRemu = new ArrayCollection(); + } + + + /** + * @return Collection + */ + public function getSousTauxRemu(): Collection + { + return $this->sousTauxRemu; + } + + + + public function getId(): ?int + { + return $this->id; + } + + + + public function getCode(): ?string + { + return $this->code; + } + + + + public function setCode(?string $code): TauxRemu + { + $this->code = $code; + + return $this; + } + + + + public function getLibelle(): ?string + { + return $this->libelle; + } + + + + public function setLibelle(?string $libelle): TauxRemu + { + $this->libelle = $libelle; + + return $this; + } + + + + /** + * @return bool + */ + public function isDefaut(): bool + { + return self::CODE_DEFAUT == $this->getCode(); + } + + + + public function hasChildren(): bool + { + return !$this->sousTauxRemu->isEmpty(); + } + + + + /** + * @return array|null + */ + public function getTauxRemuValeursIndex(): ?array + { + $tauxRemuindex = $this->getTauxRemu(); + if (!$tauxRemuindex) { + return []; + } + $indexResult = []; + $valeur = []; + $annee = $this->getServiceContext()->getAnnee(); + $valeursIndex = $tauxRemuindex->getValeurAnnee($annee); + $valeurs = $this->getValeurAnnee($annee); + $sizeIndex = sizeof($valeursIndex); + $sizeTaux = sizeof($valeurs); + $i = 0; + $j = 0; + + + while ($sizeIndex != 0 && $sizeTaux != 0 && ($i < $sizeIndex || $j < $sizeTaux)) { + if ($valeursIndex[$i]->getDateEffet() == $valeurs[$j]->getDateEffet()) { + $valeur['valeur'] = $valeursIndex[$i]->getValeur() * $valeurs[$j]->getValeur(); + $valeur['date'] = $valeursIndex[$i]->getDateEffet(); + } else { + if ($valeursIndex[$i]->getDateEffet() > $valeurs[$j]->getDateEffet()) { + $valeur['date'] = $valeursIndex[$i]->getDateEffet(); + } else { + $valeur['date'] = $valeurs[$j]->getDateEffet(); + } + $valeur['valeur'] = $valeursIndex[$i]->getValeur() * $valeurs[$j]->getValeur(); + } + if (!array_key_exists($valeur['date']->format(Util::DATE_FORMAT), $indexResult)) { + $indexResult[$valeur['date']->format(Util::DATE_FORMAT)] = $valeur; + } + //rechercher le plus proche + if ($i + 1 < $sizeIndex && $j + 1 < $sizeTaux) { + if ($valeursIndex[$i]->getDateEffet() == $valeurs[$j]->getDateEffet()) { + if ($valeursIndex[$i + 1]->getDateEffet() > $valeurs[$j + 1]->getDateEffet()) { + $i++; + } else { + $j++; + } + } else { + if ($valeursIndex[$i]->getDateEffet() > $valeurs[$j]->getDateEffet()) { + $i++; + } else { + $j++; + } + } + } else { + if ($i + 1 < $sizeIndex) { + $i++; + } else { + if ($j + 1 < $sizeTaux) { + $j++; + } else { + break; + } + } + } + $valeur = []; + } + + + return $indexResult; + } + + + + public function getTauxRemu(): ?TauxRemu + { + return $this->tauxRemu; + } + + + + public function setTauxRemu(?TauxRemu $tauxRemu): TauxRemu + { + $this->tauxRemu = $tauxRemu; + + return $this; + } + + + + /** + * @return Collection|TauxRemuValeur[] + */ + public function getTauxRemuValeurs(): Collection + { + return $this->tauxRemuValeurs; + } + + + + public function addTauxRemuValeur(TauxRemuValeur $tauxRemuValeur): self + { + $this->tauxRemuValeurs[] = $tauxRemuValeur; + + return $this; + } + + + + public function removeTauxRemuValeur(TauxRemuValeur $tauxRemuValeur): self + { + $this->tauxRemuValeurs->removeElement($tauxRemuValeur); + + return $this; + } + + + + public function getTauxRemuValeur(?\DateTime $date = null): ?TauxRemuValeur + { + if (empty($date)) { + $date = new \DateTime(); + } + + foreach ($this->tauxRemuValeurs as $valeur) { + if ($valeur->getDateEffet() > $date) { + continue; + } + + return $valeur; + } + + return null; + } + + + + public function getValeur(?\DateTime $date = null): ?float + { + $tauxRemuValeur = $this->getTauxRemuValeur($date); + if ($tauxRemuValeur) { + return $tauxRemuValeur->getValeur(); + } else { + return null; + } + } + + + + public function getValeurs(): Collection + { + return $this->tauxRemuValeurs; + } + + + + public + function __toString(): string + { + return $this->getLibelle(); + } + + + + public function getDerniereValeur() + { + $valeurRetour = null; + $valeurRetourDate = null; + $valeurs = $this->tauxRemuValeurs->getValues(); + foreach ($valeurs as $valeur) { + if ($valeurRetourDate == null || $valeur->getDateEffet() > $valeurRetourDate) { + $valeurRetour = $valeur->getValeur(); + $valeurRetourDate = $valeur->getDateEffet(); + } + } + + return $valeurRetour; + } + + + + public function getDerniereValeurDate() + { + $valeurRetourDate = null; + $valeurs = $this->tauxRemuValeurs->getValues(); + foreach ($valeurs as $valeur) { + if ($valeurRetourDate == null || $valeur->getDateEffet() > $valeurRetourDate) { + $valeurRetourDate = $valeur->getDateEffet(); + } + } + + return $valeurRetourDate; + } + + + + public function setValeurs($tauxRemuValeurs) + { + $this->tauxRemuValeurs = new ArrayCollection(); + foreach ($tauxRemuValeurs as $tauxRemuValeur) { + $this->tauxRemuValeurs[] = $tauxRemuValeur; + } + } + + + + public function getValeurAnnee(Annee $annee): array //Entitée Annee + { + $valeurs = []; + $dateDebutAnnee = $annee->getDateDebut(); + $dateFinAnnee = $annee->getDateFin(); + $temp = null; + $testValeur = $this->getValeurs(); + foreach ($testValeur as $valeur) { + $date = $valeur->getDateEffet(); + if (($temp == null || $temp > $dateDebutAnnee) && $date < $dateDebutAnnee) { + $valeurs[] = $valeur; + break; + } + if ($date >= $dateDebutAnnee && $date < $dateFinAnnee) { + $valeurs[] = $valeur; + $temp = $date; + } + } + + return $valeurs; + } + + + + public function setValeur(DateTime $date, float $valeur) + { + $tauxRemuValeurProche = $this->getTauxRemuValeur($date); + if ($tauxRemuValeurProche != null && $tauxRemuValeurProche->getDateEffet() == $date) { + $tauxRemuValeurProche->setValeur($valeur); + } else { + //new tauxremu + $newTauxRemu = new TauxRemuValeur(); + $newTauxRemu->setValeur($valeur); + $newTauxRemu->setDateEffet($date); + $this->addTauxRemuValeur($newTauxRemu); + } + } + + + + /** + * Returns the string identifier of the Resource + * + * @return string + */ + public function getResourceId() + { + return 'TauxRemu'; + } +} diff --git a/module/Paiement/src/Entity/Db/TauxRemuValeur.php b/module/Paiement/src/Entity/Db/TauxRemuValeur.php new file mode 100755 index 0000000000000000000000000000000000000000..eea91710955d06bc7fd26bf16c82239ff28ca868 --- /dev/null +++ b/module/Paiement/src/Entity/Db/TauxRemuValeur.php @@ -0,0 +1,69 @@ +<?php + +namespace Paiement\Entity\Db; + +class TauxRemuValeur +{ + protected ?int $id = null; + + protected ?\DateTime $dateEffet = null; + + protected ?TauxRemu $tauxRemu = null; + + protected float $valeur = 0; + + + + public function getId(): ?int + { + return $this->id; + } + + + + public function getDateEffet(): ?\DateTime + { + return $this->dateEffet; + } + + + + public function setDateEffet(?\DateTime $dateEffet): TauxRemuValeur + { + $this->dateEffet = $dateEffet; + + return $this; + } + + + + public function getTauxRemu(): ?TauxRemu + { + return $this->tauxRemu; + } + + + + public function setTauxRemu(?TauxRemu $tauxRemu): TauxRemuValeur + { + $this->tauxRemu = $tauxRemu; + + return $this; + } + + + + public function getValeur(): float + { + return $this->valeur; + } + + + + public function setValeur(float $valeur): TauxRemuValeur + { + $this->valeur = $valeur; + + return $this; + } +} diff --git a/module/Paiement/src/Form/TauxForm.php b/module/Paiement/src/Form/TauxForm.php new file mode 100644 index 0000000000000000000000000000000000000000..59b6c7f6dfefbb114144a10dab648ebaaef23c69 --- /dev/null +++ b/module/Paiement/src/Form/TauxForm.php @@ -0,0 +1,89 @@ +<?php + +namespace Paiement\Form; + +use Application\Filter\DateTimeFromString; +use Application\Form\AbstractForm; +use Application\Hydrator\GenericHydrator; +use Paiement\Entity\Db\TauxRemu; +use Paiement\Service\TauxRemuServiceAwareTrait; +use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; + +class TauxForm extends AbstractForm +{ + use SchemaServiceAwareTrait; + use TauxRemuServiceAwareTrait; + + public function init() + { + $hydratorForm = new tauxRemuHydrator($this->getEntityManager()); + $this->setHydrator($hydratorForm); + + $this->spec(TauxRemu::class); + $this->spec([ + 'tauxRemu' => [ + 'input' => [ + 'required' => false, + ], + ], + ]); + $this->build(); + + $this->setValueOptions('tauxRemu', $this->getServiceTauxRemu()->getTauxRemusIndexable()); + $this->get('tauxRemu')->setEmptyOption(""); + $this->get('tauxRemu')->setLabel('Taux de référence'); + + $this->add([ + 'name' => 'date', + 'type' => 'Date', + 'options' => [ + 'label' => 'Date d\'effet', + ], + ]); + $this->add([ + 'name' => 'submit', + 'type' => 'Submit', + 'attributes' => [ + 'value' => 'Enregistrer', + 'class' => 'btn btn-primary btn-save', + ], + ]); + + return $this; + } +} + + + + + +class tauxRemuHydrator extends GenericHydrator +{ + use TauxRemuServiceAwareTrait; + + public function extract($object): array + { + + $data = [ + 'id' => $object->getId(), + 'code' => $object->getCode(), + 'libelle' => $object->getLibelle(), + 'valeur' => $object->getDerniereValeur(), + 'date' => $object->getDerniereValeurDate(), + 'tauxRemu' => $object->getTauxRemu()?->getId(), + ]; + + + return $data; + } + + + + public function hydrate(array $data, $object) + { + $object->setValeur(DateTimeFromString::run($data['date']), $data['valeur']); + $object->setCode($data['code']); + $object->setLibelle($data['libelle']); + $object->setTauxRemu($this->getServiceTauxRemu()->get($data['tauxRemu'])); + } +} diff --git a/module/Paiement/src/Form/TauxFormAwareTrait.php b/module/Paiement/src/Form/TauxFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..e95404e11ce94073ef65e1b7915a4bb8be3b082f --- /dev/null +++ b/module/Paiement/src/Form/TauxFormAwareTrait.php @@ -0,0 +1,39 @@ +<?php + +namespace Paiement\Form; + + +/** + * Description of TauxFormAwareTrait + * + * @author UnicaenCode + */ +trait TauxFormAwareTrait +{ + protected ?TauxForm $formTaux = null; + + + + /** + * @param TauxForm $formTaux + * + * @return self + */ + public function setFormTaux(?TauxForm $formTaux) + { + $this->formTaux = $formTaux; + + return $this; + } + + + + public function getFormTaux(): ?TauxForm + { + if (!empty($this->formTaux)) { + return $this->formTaux; + } + + return \Application::$container->get('FormElementManager')->get(TauxForm::class); + } +} \ No newline at end of file diff --git a/module/Paiement/src/Form/TauxFormFactory.php b/module/Paiement/src/Form/TauxFormFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..f430a7ad40c0a160297ecd965dee1b70ba6382f0 --- /dev/null +++ b/module/Paiement/src/Form/TauxFormFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace Paiement\Form; + +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TauxFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxForm + { + $form = new TauxForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} \ No newline at end of file diff --git a/module/Paiement/src/Form/TauxValeurForm.php b/module/Paiement/src/Form/TauxValeurForm.php new file mode 100644 index 0000000000000000000000000000000000000000..5f7fb448619d34751928d8e48927535261eb5b65 --- /dev/null +++ b/module/Paiement/src/Form/TauxValeurForm.php @@ -0,0 +1,34 @@ +<?php + +namespace Paiement\Form; + +use Application\Form\AbstractForm; +use Laminas\Form\FormInterface; +use Paiement\Entity\Db\TauxRemuValeur; +use UnicaenImport\Service\Traits\SchemaServiceAwareTrait; + +class TauxValeurForm extends AbstractForm +{ + use SchemaServiceAwareTrait; + + public function init() + { + $ignore = ['tauxRemu']; + $this->spec(TauxRemuValeur::class, $ignore); + $this->build(); + $this->addSecurity(); + $this->addSubmit(); + + return $this; + } + + + + public function bind($object, $flags = FormInterface::VALUES_NORMALIZED) + { + /* @var $object TauxRemuValeur */ + parent::bind($object, $flags); + + return $this; + } +} diff --git a/module/Paiement/src/Form/TauxValeurFormAwareTrait.php b/module/Paiement/src/Form/TauxValeurFormAwareTrait.php new file mode 100755 index 0000000000000000000000000000000000000000..6f9e50e7e5cd084e3df30414ba307bb433dadbe7 --- /dev/null +++ b/module/Paiement/src/Form/TauxValeurFormAwareTrait.php @@ -0,0 +1,39 @@ +<?php + +namespace Paiement\Form; + + +/** + * Description of TauxFormAwareTrait + * + * @author UnicaenCode + */ +trait TauxValeurFormAwareTrait +{ + protected ?TauxValeurForm $formTauxValeur = null; + + + + /** + * @param TauxForm|null $formTauxValeur + * + * @return self + */ + public function setFormTauxValeur(?TauxForm $formTauxValeur) + { + $this->formTauxValeur = $formTauxValeur; + + return $this; + } + + + + public function getFormTauxValeur(): ?TauxValeurForm + { + if (!empty($this->formTauxValeur)) { + return $this->formTauxValeur; + } + + return \Application::$container->get('FormElementManager')->get(TauxValeurForm::class); + } +} \ No newline at end of file diff --git a/module/Paiement/src/Form/TauxValeurFormFactory.php b/module/Paiement/src/Form/TauxValeurFormFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..35946a3f33f6b79da0d2b9b00d1e45daf830ef3a --- /dev/null +++ b/module/Paiement/src/Form/TauxValeurFormFactory.php @@ -0,0 +1,31 @@ +<?php + +namespace Paiement\Form; + +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxFormFactory + * + * @author Laurent Lécluse <laurent.lecluse at unicaen.fr> + */ +class TauxValeurFormFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxValeurForm + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxValeurForm + { + $form = new TauxValeurForm; + + /* Injectez vos dépendances ICI */ + + return $form; + } +} \ No newline at end of file diff --git a/module/Paiement/src/Service/TauxRemuService.php b/module/Paiement/src/Service/TauxRemuService.php new file mode 100644 index 0000000000000000000000000000000000000000..1035c5f53131b18d9a35207db4f343fe2aebcfba --- /dev/null +++ b/module/Paiement/src/Service/TauxRemuService.php @@ -0,0 +1,237 @@ +<?php + +namespace Paiement\Service; + + +use Application\Controller\Plugin\Axios; +use Application\Service\AbstractEntityService; +use Doctrine\Common\Collections\ArrayCollection; +use Paiement\Entity\Db\TauxRemu; +use Paiement\Entity\Db\TauxRemuValeur; +use UnicaenApp\Traits\SessionContainerTrait; + +/** + * Description of TauxService + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class TauxRemuService extends AbstractEntityService +{ + use SessionContainerTrait; + + /** + * retourne la classe des entités + * + * @throws RuntimeException + */ + public function getEntityClass(): string + { + return TauxRemu::class; + } + + + + /** + * Retourne l'alias d'entité courante + * + * @return string + */ + public function getAlias() + { + return 'Taux'; + } + + + + /** + * Retourne tous les taux de rémunération non historisé + * + * @return TauxRemu[] + */ + public function getTauxRemus(): array + { + $dql = "SELECT tr, trv, trp, str + FROM " . TauxRemu::class . " tr + LEFT JOIN tr.tauxRemu trp + LEFT JOIN tr.tauxRemuValeurs trv + LEFT JOIN tr.sousTauxRemu str WITH str.histoDestruction IS NULL + WHERE tr.histoDestruction IS NULL + ORDER BY tr.id"; + $query = $this->getEntityManager()->createQuery($dql); + + return $query->getResult(); + } + + + + /** + * Return les taux de rémunérations qui n'ont pas de taux de rémunération parents + * + * @return array + */ + public function getTauxRemusIndexable(): array + { + $dql = "SELECT mtr, mtrv + FROM " . TauxRemu::class . " mtr + LEFT JOIN mtr.tauxRemuValeurs mtrv + WHERE mtr.histoDestruction IS NULL + AND mtr.tauxRemu IS NULL + ORDER BY mtr.id"; + $query = $this->getEntityManager()->createQuery($dql); + + return $query->getResult(); + } + + + + /** + * @param int $tauxRemuValeurId + * + * @return TauxRemuValeur|null + */ + public function getTauxRemuValeur(int $tauxRemuValeurId): ?TauxRemuValeur + { + $dql = "SELECT mtr + FROM " . TauxRemuValeur::class . " mtr + WHERE mtr.id =" . $tauxRemuValeurId + . " ORDER BY mtr.id"; + $query = $this->getEntityManager()->createQuery($dql); + $result = $query->getResult(); + if (!empty($result)) { + return $result[0]; + } + + return null; + } + + + + /** + * Retourne un JSON du tauxRemu + * + * @param TauxRemu $tauxRemu + * + * @return array|null + */ + public function tauxWs(TauxRemu $tauxRemu): ?array + { + $json = Axios::extract($tauxRemu, [ + 'code', + 'libelle', + 'tauxRemu', + ['tauxRemuValeurs', ['dateEffet', 'valeur']], + 'tauxRemuValeursIndex', + ]); + + return $json; + } + + + + /** + * Renvoie tous les tauxRemu non historisé et les valeurs concernant l'année en cours + * + * @return array|null + */ + public function getTauxRemusAnnee(): ?array + { + $dql = "SELECT tr, trv, trp + FROM " . TauxRemu::class . " tr + LEFT JOIN tr.tauxRemu trp + LEFT JOIN tr.tauxRemuValeurs trv + WHERE tr.histoDestruction IS NULL + ORDER BY tr.id"; + $query = $this->getEntityManager()->createQuery($dql); + + $tauxRemus = $query->getResult(); + $annee = $this->getServiceContext()->getAnnee(); + + + $result = []; + /** @var TauxRemu $tauxRemu */ + foreach ($tauxRemus as $tauxRemu) { + /** @var TauxRemuValeur $valeur */ + /** @var TauxRemuValeur $temp */ + $valeurs = $tauxRemu->getValeurAnnee($annee); + $tauxRemu->setValeurs($valeurs); + $result[$tauxRemu->getId()] = $tauxRemu; + } + + return $result; + } + + + + /** + * Retourne les taux Remu qui possèdent une valeurs sur l'année + * @return array|null + */ + public function getTauxRemusAnneeWithValeur(): ?array + { + + $dql = "SELECT tr, trv, trp + FROM " . TauxRemu::class . " tr + LEFT JOIN tr.tauxRemu trp + LEFT JOIN tr.tauxRemuValeurs trv + WHERE tr.histoDestruction IS NULL + ORDER BY tr.id"; + $query = $this->getEntityManager()->createQuery($dql); + + $tauxRemus = $query->getResult(); + $annee = $this->getServiceContext()->getAnnee(); + + + $result = []; + /** @var TauxRemu $tauxRemu */ + foreach ($tauxRemus as $tauxRemu) { + /** @var TauxRemuValeur[] $valeurs */ + $valeurs = $tauxRemu->getValeurAnnee($annee); + if($valeurs){ + $tauxRemu->setValeurs($valeurs); + $result[$tauxRemu->getId()] = $tauxRemu; + } + } + + return $result; + } + + + + /** + * Formatte une liste d'entités TauxRemus + * en tableau attendu par l'aide de vue FormSelect. + * + * + * @param TauxRemu[] $tauxRemus + * + * @return array + */ + public + function formatTauxRemus(array $tauxRemus) + { + $result = []; + foreach ($tauxRemus as $tr) { + $id = $tr->getId(); + + $result[$id] = (string)$tr; + } + + ksort($result); + + return $result; + } + + + + public + function newEntityValeur(): TauxRemuValeur + { + return new tauxRemuValeur(); + } +} + + + + + +?> \ No newline at end of file diff --git a/module/Paiement/src/Service/TauxRemuServiceAwareTrait.php b/module/Paiement/src/Service/TauxRemuServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..762f44e65c264bec8c80dc6980524e7f8cbdceaa --- /dev/null +++ b/module/Paiement/src/Service/TauxRemuServiceAwareTrait.php @@ -0,0 +1,40 @@ +<?php + +namespace Paiement\Service; + + +/** + * Description of TauxServiceAwareTrait + * + * @author UnicaenCode + */ +trait TauxRemuServiceAwareTrait +{ + protected ?TauxRemuService $serviceTaux = null; + + + + /** + * @param TauxRemuService|null $serviceTaux + * + * @return self + */ + public function setServiceTauxRemu(?TauxRemuService $serviceTaux) + { + $this->serviceTaux = $serviceTaux; + + return $this; + } + + + + public function getServiceTauxRemu(): ?TauxRemuService + { + if (empty($this->serviceTaux)) { + $this->serviceTaux = \Application::$container->get(TauxRemuService::class); + } + + return $this->serviceTaux; + } +} + diff --git a/module/Paiement/src/Service/TauxRemuServiceFactory.php b/module/Paiement/src/Service/TauxRemuServiceFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..6bf5c8e6005a5add582badd7fe74e30fcb1fd889 --- /dev/null +++ b/module/Paiement/src/Service/TauxRemuServiceFactory.php @@ -0,0 +1,32 @@ +<?php + +namespace Paiement\Service; + +use Paiement\Entity\Db\TauxRemu; +use Psr\Container\ContainerInterface; + + +/** + * Description of TauxServiceFactory + * + * @author Florian Joriot <florian.joriot at unicaen.fr> + */ +class TauxRemuServiceFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TauxRemuService + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null): TauxRemuService + { + $service = new TauxRemuService; + + /* Injectez vos dépendances ICI */ + return $service; + } +} + diff --git a/module/Paiement/template_map.php b/module/Paiement/template_map.php new file mode 100755 index 0000000000000000000000000000000000000000..6d68f28f35435c3bebb82ebf69fa9a47f572c673 --- /dev/null +++ b/module/Paiement/template_map.php @@ -0,0 +1,4 @@ +<?php +// Generated by UnicaenCode +return [ +]; \ No newline at end of file diff --git a/module/Paiement/view/paiement/taux-remu/index.phtml b/module/Paiement/view/paiement/taux-remu/index.phtml new file mode 100644 index 0000000000000000000000000000000000000000..ee9e9060f2e6037633651100aeca483924192038 --- /dev/null +++ b/module/Paiement/view/paiement/taux-remu/index.phtml @@ -0,0 +1,26 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + */ + +use Application\Provider\Privilege\Privileges; +use Paiement\Entity\Db\TauxRemu; + + +$this->headTitle()->append("Gestion des taux"); +$canEdit = $this->isAllowed(Privileges::getResourceId(Privileges::TAUX_EDITION)); +$canSupprimer = $this->isAllowed(Privileges::getResourceId(Privileges::TAUX_SUPPRESSION)); +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); +?> + <h1 class="page-header">Gestion des taux</h1> + +<?php +/** @var TauxRemu[] $tauxMissions */ +/** @var string $annee */ +$anneeSplit = explode('/', $annee); + + +echo $this->vue('paiement/liste-taux', [ + 'canEditTaux' => $canEdit, + 'canDeleteTaux' => $canSupprimer, +]); \ No newline at end of file diff --git a/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml b/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml new file mode 100755 index 0000000000000000000000000000000000000000..1d6219f959723458a113f079f2ff117197a8b570 --- /dev/null +++ b/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml @@ -0,0 +1,7 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + */ + +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); +echo $this->form($form); \ No newline at end of file diff --git a/module/Paiement/view/paiement/taux-remu/saisir.phtml b/module/Paiement/view/paiement/taux-remu/saisir.phtml new file mode 100755 index 0000000000000000000000000000000000000000..ac28762d2c392f055cf83ceaa86f7de06e74155e --- /dev/null +++ b/module/Paiement/view/paiement/taux-remu/saisir.phtml @@ -0,0 +1,7 @@ +<?php +/** + * @var $this \Application\View\Renderer\PhpRenderer + */ + +echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); +echo $this->form($form); diff --git a/module/Plafond/src/Processus/PlafondProcessus.php b/module/Plafond/src/Processus/PlafondProcessus.php index e4a2a33ee681c6919dc8d77653a5f31037fc5822..b3b64f5719bb5fe01b1bf708b5269ef1056c668c 100755 --- a/module/Plafond/src/Processus/PlafondProcessus.php +++ b/module/Plafond/src/Processus/PlafondProcessus.php @@ -2,16 +2,16 @@ namespace Plafond\Processus; -use Application\Entity\Db\ElementPedagogique; -use Referentiel\Entity\Db\FonctionReferentiel; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Structure; -use Service\Entity\Db\TypeVolumeHoraire; use Enseignement\Entity\Db\VolumeHoraire; +use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; +use OffreFormation\Entity\Db\ElementPedagogique; use Plafond\Service\PlafondServiceAwareTrait; +use Referentiel\Entity\Db\FonctionReferentiel; +use Service\Entity\Db\TypeVolumeHoraire; use UnicaenApp\Service\EntityManagerAwareInterface; use UnicaenApp\Service\EntityManagerAwareTrait; -use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger; /** diff --git a/module/Plafond/src/Service/PlafondService.php b/module/Plafond/src/Service/PlafondService.php index bb5d038f05c06ad22d0ab910a0f5decf663383c4..2cf021158a69b0ada99492c118994cf51aaaee64 100755 --- a/module/Plafond/src/Service/PlafondService.php +++ b/module/Plafond/src/Service/PlafondService.php @@ -2,18 +2,14 @@ namespace Plafond\Service; -use Application\Entity\Db\ElementPedagogique; -use Referentiel\Entity\Db\FonctionReferentiel; use Application\Entity\Db\Intervenant; -use Enseignement\Entity\Db\Service; -use Referentiel\Entity\Db\ServiceReferentiel; -use Intervenant\Entity\Db\Statut; use Application\Entity\Db\Structure; -use Enseignement\Entity\Db\VolumeHoraire; use Application\Service\AbstractEntityService; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; +use Enseignement\Entity\Db\Service; +use Enseignement\Entity\Db\VolumeHoraire; +use Intervenant\Entity\Db\Statut; +use OffreFormation\Entity\Db\ElementPedagogique; use Plafond\Entity\Db\Plafond; -use Service\Entity\Db\TypeVolumeHoraire; use Plafond\Entity\Db\PlafondEtat; use Plafond\Entity\Db\PlafondPerimetre; use Plafond\Entity\Db\PlafondReferentiel; @@ -21,6 +17,10 @@ use Plafond\Entity\Db\PlafondStatut; use Plafond\Entity\Db\PlafondStructure; use Plafond\Entity\PlafondControle; use Plafond\Interfaces\PlafondConfigInterface; +use Referentiel\Entity\Db\FonctionReferentiel; +use Referentiel\Entity\Db\ServiceReferentiel; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; use UnicaenTbl\Service\Traits\QueryGeneratorServiceAwareTrait; use UnicaenTbl\Service\Traits\TableauBordServiceAwareTrait; @@ -440,7 +440,7 @@ class PlafondService extends AbstractEntityService } return $return; - } catch (Exception $e) { + } catch (\Exception $e) { $return['success'] = false; $return['error'] = $e->getMessage(); diff --git a/module/Plafond/src/View/Helper/PlafondConfigElementViewHelper.php b/module/Plafond/src/View/Helper/PlafondConfigElementViewHelper.php index 70a50628057b34b1d973c2d857c133026016d966..b3871cfcca1aa9825f6c9d32b52fcf86b4cde06e 100755 --- a/module/Plafond/src/View/Helper/PlafondConfigElementViewHelper.php +++ b/module/Plafond/src/View/Helper/PlafondConfigElementViewHelper.php @@ -129,10 +129,10 @@ class PlafondConfigElementViewHelper extends AbstractHtmlElement entityId: <?= $entityId ?: 'null' ?> }, success: function () { - alertFlash('Votre modification a bien été prise en compte', 'success', 3000); + Util.alert('Votre modification a bien été prise en compte', 'success'); }, error: function (jqXHR) { - alertFlash(jqXHR.responseText, 'error', 3000); + Util.alert(jqXHR.responseText, 'error'); } }); }, diff --git a/module/Plafond/src/View/Helper/PlafondsViewHelper.php b/module/Plafond/src/View/Helper/PlafondsViewHelper.php index f4a781592c034402f7ede7c1f0c3cebb4e5e9baf..0fdc0e39a184287760e7c1c52309294a6d764c78 100755 --- a/module/Plafond/src/View/Helper/PlafondsViewHelper.php +++ b/module/Plafond/src/View/Helper/PlafondsViewHelper.php @@ -2,15 +2,15 @@ namespace Plafond\View\Helper; -use Application\Entity\Db\ElementPedagogique; -use Referentiel\Entity\Db\FonctionReferentiel; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Structure; -use Service\Entity\Db\TypeVolumeHoraire; use Enseignement\Entity\Db\VolumeHoraire; use Laminas\View\Helper\AbstractHtmlElement; +use OffreFormation\Entity\Db\ElementPedagogique; use Plafond\Entity\PlafondControle; use Plafond\Service\PlafondServiceAwareTrait; +use Referentiel\Entity\Db\FonctionReferentiel; +use Service\Entity\Db\TypeVolumeHoraire; /** @@ -149,16 +149,20 @@ class PlafondsViewHelper extends AbstractHtmlElement } if (!$text) { - if ($progression > 49) { - $text = floatToString($plafond->getHeures()) . 'h, ' - . floatToString($max - $plafond->getHeures()) . ' dispo.'; - } elseif ($progression > 10) { - $text = floatToString($plafond->getHeures()) . 'h'; - } + $text = floatToString($plafond->getHeures()) . 'h, ' + . floatToString($max - $plafond->getHeures()) . ' dispo.'; } $html = ''; + if ($progression > 49) { + $text1 = $text; + $text2 = ''; + } else { + $text1 = ''; + $text2 = ' ' . $text; + } + $html .= $t('div', ['class' => 'col-md-4'])->html( $t('div', [ 'class' => 'progress', @@ -170,7 +174,7 @@ class PlafondsViewHelper extends AbstractHtmlElement 'aria-valuemin' => 0, 'aria-valuemax' => 100, 'style' => 'width:' . $progression . '%', - ])->text($text) + ])->text($text1) . $text2 ) ); diff --git a/module/Plafond/view/plafond/plafond/plafonds.phtml b/module/Plafond/view/plafond/plafond/plafonds.phtml index 35625c237da7678eb5d8ec243f03ba3e12fc35ef..c215e160b745f8fc4c9033e0147eb930cc451a2d 100644 --- a/module/Plafond/view/plafond/plafond/plafonds.phtml +++ b/module/Plafond/view/plafond/plafond/plafonds.phtml @@ -1,10 +1,10 @@ <?php -use Application\Entity\Db\ElementPedagogique; -use Referentiel\Entity\Db\FonctionReferentiel; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Structure; use Enseignement\Entity\Db\VolumeHoraire; +use OffreFormation\Entity\Db\ElementPedagogique; +use Referentiel\Entity\Db\FonctionReferentiel; /** * @var $this \Application\View\Renderer\PhpRenderer diff --git a/module/Referentiel/config/module.config.php b/module/Referentiel/config/module.config.php index 92dcfd2c4ceff26ff34f0fe2c4da4c37a091c484..870f4731cb778ee66987f157560114a23ecd9867 100644 --- a/module/Referentiel/config/module.config.php +++ b/module/Referentiel/config/module.config.php @@ -179,11 +179,11 @@ return [ 'rh' => [ 'pages' => [ 'fonction-referentiel' => [ - 'label' => 'Référentiel fonctions', - 'route' => 'fonction-referentiel', - 'resource' => PrivilegeController::getResourceId(FonctionReferentielController::class, 'index'), - 'order' => 70, - 'color' => '#BBCF55', + 'label' => 'Référentiel fonctions', + 'route' => 'fonction-referentiel', + 'resource' => PrivilegeController::getResourceId(FonctionReferentielController::class, 'index'), + 'order' => 70, + 'color' => '#BBCF55', ], ], ], @@ -198,6 +198,7 @@ return [ Privileges::REFERENTIEL_PREVU_EDITION, Privileges::REFERENTIEL_REALISE_VISUALISATION, Privileges::REFERENTIEL_REALISE_EDITION, + Privileges::MOTIF_NON_PAIEMENT_VISUALISATION, ], 'resources' => ['ServiceReferentiel', 'Intervenant'], 'assertion' => Assertion\ReferentielAssertion::class, @@ -228,7 +229,7 @@ return [ [ 'controller' => FonctionReferentielController::class, 'action' => ['saisie', 'delete'], - 'privileges' => [Privileges::REFERENTIEL_ADMIN_EDITION], + 'privileges' => [Privileges::REFERENTIEL_ADMIN_EDITION,], ], [ 'controller' => ServiceReferentielController::class, @@ -252,6 +253,7 @@ return [ 'privileges' => [ Privileges::REFERENTIEL_PREVU_EDITION, Privileges::REFERENTIEL_REALISE_EDITION, + Privileges::MOTIF_NON_PAIEMENT_VISUALISATION, ], 'assertion' => Assertion\ReferentielAssertion::class, ], diff --git a/module/Referentiel/src/Assertion/ReferentielAssertion.php b/module/Referentiel/src/Assertion/ReferentielAssertion.php index e7bca46f21be5a544a249007ae27d66bd9bc312e..59270dd8b382cd07d94b3c72fe28ce293574ba80 100755 --- a/module/Referentiel/src/Assertion/ReferentielAssertion.php +++ b/module/Referentiel/src/Assertion/ReferentielAssertion.php @@ -48,7 +48,6 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertPage(array $page) { $role = $this->getRole(); @@ -56,7 +55,7 @@ class ReferentielAssertion extends AbstractAssertion $intervenant = null; if (isset($page['workflow-etape-code'])) { - $etape = $page['workflow-etape-code']; + $etape = $page['workflow-etape-code']; $intervenant = $this->getMvcEvent()->getParam('intervenant'); if ( @@ -78,16 +77,16 @@ class ReferentielAssertion extends AbstractAssertion switch ($page['route']) { case 'intervenant/validation/referentiel/prevu': return $this->assertEntity($intervenant, Privileges::REFERENTIEL_PREVU_VISUALISATION); - break; + break; case 'intervenant/validation/referentiel/realise': return $this->assertEntity($intervenant, Privileges::REFERENTIEL_REALISE_VISUALISATION); - break; + break; case 'intervenant/referentiel-prevu': return $this->assertPageReferentiel($role, $intervenant, TypeVolumeHoraire::CODE_PREVU); - break; + break; case 'intervenant/referentiel-realise': return $this->assertPageReferentiel($role, $intervenant, TypeVolumeHoraire::CODE_REALISE); - break; + break; } } @@ -95,10 +94,9 @@ class ReferentielAssertion extends AbstractAssertion } - /** * @param ResourceInterface $entity - * @param string $privilege + * @param string $privilege * * @return boolean */ @@ -125,14 +123,14 @@ class ReferentielAssertion extends AbstractAssertion case Privileges::REFERENTIEL_REALISE_VALIDATION: return $this->assertServiceReferentielValidation($role, $entity); } - break; + break; case $entity instanceof VolumeHoraireReferentiel: switch ($privilege) { case Privileges::REFERENTIEL_PREVU_VALIDATION: case Privileges::REFERENTIEL_REALISE_VALIDATION: return $this->assertVolumeHoraireReferentielValidation($role, $entity); } - break; + break; case $entity instanceof Intervenant: switch ($privilege) { case Privileges::REFERENTIEL_PREVU_VISUALISATION: @@ -147,7 +145,7 @@ class ReferentielAssertion extends AbstractAssertion case Privileges::REFERENTIEL_REALISE_EDITION: return $this->assertIntervenantReferentiel($role, $entity, TypeVolumeHoraire::CODE_REALISE, true); } - break; + break; case $entity instanceof Validation: switch ($privilege) { case Privileges::REFERENTIEL_PREVU_VALIDATION: @@ -156,14 +154,13 @@ class ReferentielAssertion extends AbstractAssertion case Privileges::REFERENTIEL_DEVALIDATION: return $this->assertValidationDevalidation($role, $entity); } - break; + break; } return true; } - /** * @param string $controller * @param string $action @@ -173,7 +170,7 @@ class ReferentielAssertion extends AbstractAssertion */ protected function assertController($controller, $action = null, $privilege = null) { - $role = $this->getRole(); + $role = $this->getRole(); $intervenant = $this->getMvcEvent()->getParam('intervenant'); /* @var $intervenant Intervenant */ @@ -186,20 +183,19 @@ class ReferentielAssertion extends AbstractAssertion case ServiceReferentielController::class . '.validation': return $role->hasPrivilege(Privileges::REFERENTIEL_PREVU_VISUALISATION) || $role->hasPrivilege(Privileges::REFERENTIEL_REALISE_VISUALISATION); - break; + break; case ServiceReferentielController::class . '.referentiel-prevu': return $this->assertPageReferentiel($role, $intervenant, TypeVolumeHoraire::CODE_PREVU); - break; + break; case ServiceReferentielController::class . '.referentiel-realise': return $this->assertPageReferentiel($role, $intervenant, TypeVolumeHoraire::CODE_REALISE); - break; + break; } return true; } - protected function assertPageReferentiel(Role $role, Intervenant $intervenant = null, string $typeVolumeHoraireCode) { if (!$intervenant) return true; @@ -223,12 +219,11 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertServiceReferentielVisualisation(Role $role, ServiceReferentiel $serviceReferentiel) { $typeVolumeHoraire = $serviceReferentiel->getTypeVolumeHoraire(); - $intervenant = $serviceReferentiel->getIntervenant(); - $statut = $intervenant->getStatut(); + $intervenant = $serviceReferentiel->getIntervenant(); + $statut = $intervenant->getStatut(); $asserts = [ $this->getAssertionService()->assertIntervenant($role, $intervenant), @@ -245,14 +240,13 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertServiceReferentielEdition(Role $role, ServiceReferentiel $serviceReferentiel) { $asserts = []; if (!$role->hasPrivilege(Privileges::REFERENTIEL_SAISIE_TOUTES_COMPOSANTES)) { // Si on n'a pas le privilège pour pouvoir du référentiel dans toutes les composantes sans restriction if ($structure = $role->getStructure()) { - $structureAffectation = $serviceReferentiel->getIntervenant() ? $serviceReferentiel->getIntervenant()->getStructure() : null; + $structureAffectation = $serviceReferentiel->getIntervenant() ? $serviceReferentiel->getIntervenant()->getStructure() : null; $structureEnseignement = $serviceReferentiel->getStructure(); if ($structureAffectation && $structureEnseignement) { @@ -276,10 +270,9 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertHasReferentiel(Intervenant $intervenant, Structure $structure, string $etape, Role $role) { - $services = $intervenant->getServiceReferentiel(); + $services = $intervenant->getServiceReferentiel(); $typeIntervenant = $intervenant->getStatut()->getTypeIntervenant(); $nbServices = 0; @@ -322,7 +315,6 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertVolumeHoraireReferentielValidation(Role $role, VolumeHoraireReferentiel $volumeHoraireReferentiel) { $serviceReferentiel = $volumeHoraireReferentiel->getServiceReferentiel(); @@ -331,14 +323,12 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertServiceReferentielValidation(Role $role, ServiceReferentiel $serviceReferentiel) { return $this->assert($role, $serviceReferentiel->getIntervenant(), $serviceReferentiel->getStructure()); } - protected function assertValidationValidation(Role $role, Validation $validation) { return $this->asserts([ @@ -348,7 +338,6 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertValidation(Role $role, Intervenant $intervenant, ?Structure $structure) { return $this->asserts([ @@ -358,7 +347,6 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertValidationDevalidation(Role $role, Validation $validation) { return $this->asserts([ @@ -369,12 +357,11 @@ class ReferentielAssertion extends AbstractAssertion } - protected function assertIntervenantReferentiel( - Role $role, + Role $role, Intervenant $intervenant, - string $typeVolumeHoraireCode, - bool $edition = false + string $typeVolumeHoraireCode, + bool $edition = false ) { if (!$this->getAssertionService()->assertIntervenant($role, $intervenant)) return false; // si on n'est pas le bon intervenant!! diff --git a/module/Referentiel/src/Controller/ServiceReferentielController.php b/module/Referentiel/src/Controller/ServiceReferentielController.php index cf1387bfe973630c1a39d1da88f973dc55ba4bb9..68dc1591e1d51e17f9f83c018a8761d7ea581fd0 100755 --- a/module/Referentiel/src/Controller/ServiceReferentielController.php +++ b/module/Referentiel/src/Controller/ServiceReferentielController.php @@ -52,7 +52,6 @@ class ServiceReferentielController extends AbstractController } - public function prevuAction() { $prevu = $this->getServiceTypeVolumeHoraire()->getPrevu(); @@ -61,7 +60,6 @@ class ServiceReferentielController extends AbstractController } - public function realiseAction() { $realise = $this->getServiceTypeVolumeHoraire()->getRealise(); @@ -70,7 +68,6 @@ class ServiceReferentielController extends AbstractController } - public function indexAction(?TypeVolumeHoraire $typeVolumeHoraire = null) { $this->initFilters(); @@ -92,14 +89,14 @@ class ServiceReferentielController extends AbstractController } - public function saisieAction() { $this->initFilters(); $this->em()->getFilters()->enable('historique')->init([ \Application\Entity\Db\Structure::class, ]); - $id = (int)$this->params()->fromRoute('id'); + $id = (int)$this->params()->fromRoute('id'); + $typeVolumeHoraire = $this->params()->fromQuery('type-volume-horaire', $this->params()->fromPost('type-volume-horaire')); if (empty($typeVolumeHoraire)) { $typeVolumeHoraire = $this->getServiceTypeVolumehoraire()->getPrevu(); @@ -107,8 +104,8 @@ class ServiceReferentielController extends AbstractController $typeVolumeHoraire = $this->getServiceTypeVolumehoraire()->get($typeVolumeHoraire); } $service = $this->getServiceServiceReferentiel(); - $role = $this->getServiceContext()->getSelectedIdentityRole(); - $form = $this->getFormServiceReferentielSaisie(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); + $form = $this->getFormServiceReferentielSaisie(); $form->get('type-volume-horaire')->setValue($typeVolumeHoraire->getId()); $intervenant = $this->getServiceLocalContext()->getIntervenant(); @@ -137,7 +134,7 @@ class ServiceReferentielController extends AbstractController if (!$this->isAllowed($assertionEntity, $typeVolumeHoraire->getPrivilegeReferentielEdition())) { throw new \LogicException("Cette opération n'est pas autorisée."); } - $hDeb = $entity->getVolumeHoraireReferentielListe()->getHeures(); + $hDeb = $entity->getVolumeHoraireReferentielListe()->getHeures(); $request = $this->getRequest(); if ($request->isPost()) { $form->setData($request->getPost()); @@ -169,15 +166,14 @@ class ServiceReferentielController extends AbstractController } - public function rafraichirLigneAction() { $this->initFilters(); - $params = $this->params()->fromPost('params', $this->params()->fromQuery('params')); - $details = 1 == (int)$this->params()->fromQuery('details', (int)$this->params()->fromPost('details', 0)); + $params = $this->params()->fromPost('params', $this->params()->fromQuery('params')); + $details = 1 == (int)$this->params()->fromQuery('details', (int)$this->params()->fromPost('details', 0)); $onlyContent = 1 == (int)$this->params()->fromQuery('only-content', 0); - $service = $this->getEvent()->getParam('serviceReferentiel'); + $service = $this->getEvent()->getParam('serviceReferentiel'); /* @var $service ServiceReferentiel */ if (isset($params['type-volume-horaire'])) { @@ -193,7 +189,6 @@ class ServiceReferentielController extends AbstractController } - public function initialisationAction() { $intervenant = $this->getEvent()->getParam('intervenant'); @@ -207,7 +202,6 @@ class ServiceReferentielController extends AbstractController } - public function constatationAction() { $this->initFilters(); @@ -228,9 +222,11 @@ class ServiceReferentielController extends AbstractController } } - return new MessengerViewModel; - } + $vm = new ViewModel(); + $vm->setTemplate('enseignement/constatation'); + return $vm; + } public function suppressionAction() @@ -241,7 +237,7 @@ class ServiceReferentielController extends AbstractController } else { $typeVolumeHoraire = $this->getServiceTypeVolumehoraire()->get($typeVolumeHoraire); } - $id = (int)$this->params()->fromRoute('id', null); + $id = (int)$this->params()->fromRoute('id', null); $service = $this->getServiceServiceReferentiel()->get($id); /* @var $service ServiceReferentiel */ @@ -268,7 +264,6 @@ class ServiceReferentielController extends AbstractController } - public function validationPrevuAction() { $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getPrevu(); @@ -277,7 +272,6 @@ class ServiceReferentielController extends AbstractController } - public function validationRealiseAction() { $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getRealise(); @@ -286,7 +280,6 @@ class ServiceReferentielController extends AbstractController } - private function validationAction(TypeVolumeHoraire $typeVolumeHoraire) { $this->initFilters(); @@ -316,9 +309,9 @@ class ServiceReferentielController extends AbstractController $validations = $this->getProcessusValidationReferentiel()->lister($typeVolumeHoraire, $intervenant, $filterStructure); foreach ($validations as $validation) { - $key = $validation->getId() ? 'valides' : 'non-valides'; - $vid = $this->getProcessusValidationReferentiel()->getValidationId($validation); - $sList = $this->getProcessusValidationReferentiel()->getServices($typeVolumeHoraire, $validation); + $key = $validation->getId() ? 'valides' : 'non-valides'; + $vid = $this->getProcessusValidationReferentiel()->getValidationId($validation); + $sList = $this->getProcessusValidationReferentiel()->getServices($typeVolumeHoraire, $validation); $services[$key][$vid] = $sList; } @@ -347,7 +340,6 @@ class ServiceReferentielController extends AbstractController } - public function validerAction() { $this->initFilters(); @@ -384,7 +376,6 @@ class ServiceReferentielController extends AbstractController } - public function devaliderAction() { $this->initFilters(); @@ -412,7 +403,6 @@ class ServiceReferentielController extends AbstractController } - private function updateTableauxBord(Intervenant $intervenant, $validation = false) { $this->getServiceWorkflow()->calculerTableauxBord(['formule', 'validation_referentiel', 'referentiel'], $intervenant); diff --git a/module/Referentiel/src/Entity/Db/Mapping/Referentiel.Entity.Db.ServiceReferentiel.dcm.xml b/module/Referentiel/src/Entity/Db/Mapping/Referentiel.Entity.Db.ServiceReferentiel.dcm.xml index d01289805427c0c0fadd9b106b2d970d76c327ba..88b0d31b6a87d3c8b5f175633af87971689fce24 100755 --- a/module/Referentiel/src/Entity/Db/Mapping/Referentiel.Entity.Db.ServiceReferentiel.dcm.xml +++ b/module/Referentiel/src/Entity/Db/Mapping/Referentiel.Entity.Db.ServiceReferentiel.dcm.xml @@ -12,12 +12,19 @@ <field name="histoModification" type="datetime" column="HISTO_MODIFICATION" nullable="false"/> <field name="commentaires" type="string" column="COMMENTAIRES" length="256" nullable="true"/> <field name="formation" type="string" column="FORMATION" length="256" nullable="true"/> - <many-to-one field="intervenant" target-entity="Application\Entity\Db\Intervenant" inversed-by="serviceReferentiel"> + <many-to-one field="intervenant" target-entity="Application\Entity\Db\Intervenant" + inversed-by="serviceReferentiel"> <join-column name="INTERVENANT_ID" referenced-column-name="ID"/> </many-to-one> <many-to-one field="structure" target-entity="Application\Entity\Db\Structure"> <join-column name="STRUCTURE_ID" referenced-column-name="ID"/> </many-to-one> + <many-to-one field="tag" target-entity="Application\Entity\Db\Tag"> + <join-column name="TAG_ID" referenced-column-name="ID"/> + </many-to-one> + <many-to-one field="motifNonPaiement" target-entity="Application\Entity\Db\MotifNonPaiement"> + <join-column name="MOTIF_NON_PAIEMENT_ID" referenced-column-name="ID"/> + </many-to-one> <many-to-one field="fonctionReferentiel" target-entity="Referentiel\Entity\Db\FonctionReferentiel"> <join-column name="FONCTION_ID" referenced-column-name="ID"/> </many-to-one> @@ -37,7 +44,8 @@ </cascade> </one-to-many> <one-to-many field="formuleResultatServiceReferentiel" - target-entity="Application\Entity\Db\FormuleResultatServiceReferentiel" mapped-by="serviceReferentiel"/> + target-entity="Application\Entity\Db\FormuleResultatServiceReferentiel" + mapped-by="serviceReferentiel"/> <many-to-one field="source" target-entity="UnicaenImport\Entity\Db\Source"> <join-column name="SOURCE_ID" referenced-column-name="ID"/> diff --git a/module/Referentiel/src/Entity/Db/ServiceReferentiel.php b/module/Referentiel/src/Entity/Db/ServiceReferentiel.php index 0131642c336321db36a56b3c853dfb5c025a4b77..1c18d2dc43de69e74814da8e03705a6e74df0842 100755 --- a/module/Referentiel/src/Entity/Db/ServiceReferentiel.php +++ b/module/Referentiel/src/Entity/Db/ServiceReferentiel.php @@ -4,7 +4,9 @@ namespace Referentiel\Entity\Db; use Application\Entity\Db\FormuleResultatServiceReferentiel; use Application\Entity\Db\Traits\IntervenantAwareTrait; +use Application\Entity\Db\Traits\MotifNonPaiementAwareTrait; use Application\Entity\Db\Traits\StructureAwareTrait; +use Application\Entity\Db\Traits\TagAwareTrait; use Service\Entity\Db\EtatVolumeHoraire; use Service\Entity\Db\TypeVolumeHoraire; use Service\Entity\Db\TypeVolumeHoraireAwareTrait; @@ -29,33 +31,32 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, use StructureAwareTrait; use TypeVolumeHoraireAwareTrait; use ImportAwareTrait; + use TagAwareTrait; + use MotifNonPaiementAwareTrait; - protected ?int $id = null; + protected ?int $id = null; - protected ?string $commentaires = null; + protected ?string $commentaires = null; - protected ?string $formation = null; + protected ?string $formation = null; private Collection $volumeHoraireReferentiel; private Collection $formuleResultatServiceReferentiel; - public function getId(): ?int { return $this->id; } - public function getCommentaires(): ?string { return $this->commentaires; } - public function setCommentaires(?string $commentaires): ServiceReferentiel { $this->commentaires = $commentaires; @@ -64,14 +65,12 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function getFormation(): ?string { return $this->formation; } - public function setFormation(?string $formation): ServiceReferentiel { $this->formation = $formation; @@ -80,7 +79,6 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function __toString(): string { $heures = Util::formattedFloat($this->getHeures(), \NumberFormatter::DECIMAL, -1); @@ -92,15 +90,13 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function __construct() { - $this->volumeHoraireReferentiel = new ArrayCollection(); + $this->volumeHoraireReferentiel = new ArrayCollection(); $this->formuleResultatServiceReferentiel = new ArrayCollection(); } - public function addVolumeHoraireReferentiel(VolumeHoraireReferentiel $volumeHoraireReferentiel): ServiceReferentiel { $this->volumeHoraireReferentiel[] = $volumeHoraireReferentiel; @@ -109,7 +105,6 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function removeVolumeHoraireReferentiel(VolumeHoraireReferentiel $volumeHoraireReferentiel): ServiceReferentiel { $this->volumeHoraireReferentiel->removeElement($volumeHoraireReferentiel); @@ -118,7 +113,6 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - /** * Get volumeHoraireReferentiel * @@ -130,7 +124,6 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - /** * Détermine si le VHR a une validation ou non * @@ -150,7 +143,6 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function getVolumeHoraireReferentielListe(): VolumeHoraireReferentielListe { $volumeHoraireListe = new VolumeHoraireReferentielListe($this); @@ -163,7 +155,6 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function getFormuleResultatServiceReferentiel(TypeVolumeHoraire $typeVolumeHoraire = null, EtatVolumeHoraire $etatVolumeHoraire = null): Collection { $filter = function (FormuleResultatServiceReferentiel $formuleResultatServiceReferentiel) use ($typeVolumeHoraire, $etatVolumeHoraire) { @@ -181,14 +172,12 @@ class ServiceReferentiel implements HistoriqueAwareInterface, ResourceInterface, } - public function getUniqueFormuleResultatServiceReferentiel(TypeVolumeHoraire $typeVolumeHoraire, EtatVolumeHoraire $etatVolumeHoraire): FormuleResultatServiceReferentiel { return $this->getFormuleResultatServiceReferentiel($typeVolumeHoraire, $etatVolumeHoraire)->first(); } - public function getResourceId(): string { return 'ServiceReferentiel'; diff --git a/module/Referentiel/src/Form/FonctionReferentielSaisieForm.php b/module/Referentiel/src/Form/FonctionReferentielSaisieForm.php index a0b340e5bc4018699f00807c94f799fb66dfeb84..78834e2cace20aa2cd0fae1137413df4f9bebb9e 100755 --- a/module/Referentiel/src/Form/FonctionReferentielSaisieForm.php +++ b/module/Referentiel/src/Form/FonctionReferentielSaisieForm.php @@ -2,15 +2,17 @@ namespace Referentiel\Form; +use Application\Provider\Privilege\Privileges; use Referentiel\Entity\Db\FonctionReferentiel; use Application\Form\AbstractForm; -use Application\Service\Traits\DomaineFonctionnelServiceAwareTrait; +use OffreFormation\Service\Traits\DomaineFonctionnelServiceAwareTrait; use Referentiel\Service\FonctionReferentielServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; use UnicaenApp\Util; use Laminas\Form\Element\Csrf; use Laminas\Hydrator\HydratorInterface; use Application\Service\Traits\ContextServiceAwareTrait; +use UnicaenAuth\Service\Traits\AuthorizeServiceAwareTrait; /** * Description of FonctionReferentielSaisieForm @@ -23,6 +25,7 @@ class FonctionReferentielSaisieForm extends AbstractForm use DomaineFonctionnelServiceAwareTrait; use StructureServiceAwareTrait; use ContextServiceAwareTrait; + use AuthorizeServiceAwareTrait; public function init() @@ -33,6 +36,7 @@ class FonctionReferentielSaisieForm extends AbstractForm $this->setAttribute('action', $this->getCurrentUrl()); + $this->add([ 'name' => 'parent', 'options' => [ @@ -130,7 +134,6 @@ class FonctionReferentielSaisieForm extends AbstractForm } - /** * @return FonctionReferentiel[] */ @@ -145,12 +148,11 @@ class FonctionReferentielSaisieForm extends AbstractForm } - public function getStructures() { - $role = $this->getServiceContext()->getSelectedIdentityRole(); + $role = $this->getServiceContext()->getSelectedIdentityRole(); $serviceStructure = $this->getServiceStructure(); - $qb = $serviceStructure->finderByHistorique(); + $qb = $serviceStructure->finderByHistorique(); if ($role && $role->getStructure()) { $serviceStructure->finderById($role->getStructure()->getId(), $qb); // Filtre } @@ -161,7 +163,6 @@ class FonctionReferentielSaisieForm extends AbstractForm } - /** * Should return an array specification compatible with * {@link Laminas\InputFilter\Factory::createInputFilter()}. @@ -195,9 +196,6 @@ class FonctionReferentielSaisieForm extends AbstractForm } - - - class FonctionReferentielHydrator implements HydratorInterface { use FonctionReferentielServiceAwareTrait; @@ -208,7 +206,7 @@ class FonctionReferentielHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data + * @param array $data * @param \Referentiel\Entity\Db\FonctionReferentiel $object * * @return object @@ -233,7 +231,6 @@ class FonctionReferentielHydrator implements HydratorInterface } - /** * Extract values from an object * diff --git a/module/Referentiel/src/Form/SaisieFieldset.php b/module/Referentiel/src/Form/SaisieFieldset.php index 26a28050b23ca439ce756366bfb96954a9e33cd3..58b5de15ebadeba6aa01754a8002f2805a966ca1 100755 --- a/module/Referentiel/src/Form/SaisieFieldset.php +++ b/module/Referentiel/src/Form/SaisieFieldset.php @@ -2,6 +2,13 @@ namespace Referentiel\Form; +use Application\Entity\Db\MotifNonPaiement; +use Application\Entity\Db\Tag; +use Application\Provider\Privilege\Privileges; +use Application\Service\Traits\MotifNonPaiementServiceAwareTrait; +use Application\Service\Traits\TagServiceAwareTrait; +use Laminas\Form\Element\Hidden; +use phpDocumentor\Reflection\Types\Array_; use Referentiel\Entity\Db\FonctionReferentiel; use Application\Entity\Db\Intervenant; use Referentiel\Entity\Db\ServiceReferentiel; @@ -20,6 +27,7 @@ use Laminas\Validator\NotEmpty; use Application\Filter\FloatFromString; use Application\Filter\StringFromFloat; use Laminas\Hydrator\HydratorInterface; +use UnicaenAuth\Service\Traits\AuthorizeServiceAwareTrait; /** @@ -33,6 +41,10 @@ class SaisieFieldset extends AbstractFieldset use LocalContextServiceAwareTrait; use StructureServiceAwareTrait; use FonctionReferentielServiceAwareTrait; + use TagServiceAwareTrait; + use MotifNonPaiementServiceAwareTrait; + use AuthorizeServiceAwareTrait; + use ContextServiceAwareTrait; /** * @var Structure[] @@ -40,14 +52,12 @@ class SaisieFieldset extends AbstractFieldset protected $structures; - public function __construct($name = null, $options = []) { parent::__construct('service', $options); } - public function init() { @@ -57,24 +67,25 @@ class SaisieFieldset extends AbstractFieldset $this->setHydrator($hydrator) ->setAllowedObjectBindingClass(ServiceReferentiel::class); + $role = $this->getServiceContext()->getSelectedIdentityRole(); + + $canViewMNP = $role->hasPrivilege(Privileges::MOTIF_NON_PAIEMENT_VISUALISATION); + $canEditMNP = $role->hasPrivilege(Privileges::MOTIF_NON_PAIEMENT_EDITION); + $canViewTag = $role->hasPrivilege(Privileges::TAG_VISUALISATION); + $canEditTag = $role->hasPrivilege(Privileges::TAG_EDITION); + $this->add([ 'name' => 'id', 'type' => 'Hidden', ]); + $this->add([ + 'name' => 'idPrev', + 'type' => 'Hidden', + ]); + $role = $this->getServiceContext()->getSelectedIdentityRole(); - /* if (!($role && $role->getIntervenant())) { - $intervenant = new SearchAndSelect('intervenant'); - $intervenant->setRequired(true) - ->setSelectionRequired(true) - ->setAutocompleteSource( - $this->getUrl('recherche', ['action' => 'intervenantFind']) - ) - ->setLabel("Intervenant :") - ->setAttributes(['title' => "Saisissez le nom suivi éventuellement du prénom (2 lettres au moins)"]); - $this->add($intervenant); - }*/ $this->add([ 'name' => 'structure', @@ -125,6 +136,47 @@ class SaisieFieldset extends AbstractFieldset ], 'type' => 'Text', ]); + if ($canEditMNP) { + $this->add([ + 'type' => 'Select', + 'name' => 'motif-non-paiement', + 'options' => [ + 'label' => "Motif de non paiement :", + 'empty_option' => "Aucun motif : paiement prévu", + 'value_options' => Util::collectionAsOptions($this->getMotifsNonPaiement()), + ], + 'attributes' => [ + 'value' => "", + 'title' => "Motif de non paiement", + 'class' => 'volume-horaire volume-horaire-motif-non-paiement input-sm', + ], + ]); + } else { + $this->add(new Hidden('motif-non-paiement')); + + } + + + //Gestion des tags + if ($canEditTag) { + $this->add([ + 'type' => 'Select', + 'name' => 'tag', + 'options' => [ + 'label' => "Tag :", + 'empty_option' => "Aucun tag", + 'value_options' => Util::collectionAsOptions($this->getServiceTag()->getList()), + ], + 'attributes' => [ + 'value' => "", + 'title' => "Tag", + 'class' => 'volume-horaire volume-horaire-tag input-sm', + ], + ]); + } else { + $this->add(new Hidden('tag')); + } + $this->add([ 'name' => 'commentaires', @@ -143,7 +195,6 @@ class SaisieFieldset extends AbstractFieldset } - protected function getStructures() { if (!$this->structures) { @@ -159,10 +210,9 @@ class SaisieFieldset extends AbstractFieldset } - public function getFonctions() { - $fncs = $this->getServiceFonctionReferentiel()->getList($this->getServiceFonctionReferentiel()->finderByHistorique()); + $fncs = $this->getServiceFonctionReferentiel()->getList($this->getServiceFonctionReferentiel()->finderByHistorique()); $fonctions = []; foreach ($fncs as $id => $fonction) { if ($fonction->getFille()->count() > 0) { @@ -171,27 +221,21 @@ class SaisieFieldset extends AbstractFieldset foreach ($fonction->getFille() as $fille) { $filles[$fille->getId()] = (string)$fille; } + asort($filles); $fonctions[$fonction->getId()] = ['label' => (string)$fonction, 'options' => $filles]; } elseif (!$fonction->getParent()) { $fonctions[$id] = (string)$fonction; } } - + asort($fonctions); return $fonctions; } - public function initFromContext() { /* Peuple le formulaire avec les valeurs issues du contexte local */ $cl = $this->getServiceLocalContext(); -// if ($this->has('intervenant') && $cl->getIntervenant()) { -// $this->get('intervenant')->setValue([ -// 'id' => $cl->getIntervenant()->getId(), -// 'label' => (string)$cl->getIntervenant(), -// ]); -// } if ($structure = $this->getServiceContext()->getSelectedIdentityRole()->getStructure() ?: $cl->getStructure()) { $this->get('structure')->setValue($structure->getId()); @@ -199,7 +243,6 @@ class SaisieFieldset extends AbstractFieldset } - public function saveToContext() { $cl = $this->getServiceLocalContext(); @@ -211,6 +254,15 @@ class SaisieFieldset extends AbstractFieldset } } + /** + * @return MotifNonPaiement[] + */ + protected function getMotifsNonPaiement() + { + $qb = $this->getServiceMotifNonPaiement()->finderByHistorique(); + + return $this->getServiceMotifNonPaiement()->getList($qb); + } /** @@ -220,15 +272,15 @@ class SaisieFieldset extends AbstractFieldset protected function getValidatorStructure() { // recherche de la FonctionReferentiel sélectionnée pour connaître la structure associée éventuelle - $value = $this->get('fonction')->getValue(); + $value = $this->get('fonction')->getValue(); $fonctionSaisie = $this->getServiceFonctionReferentiel()->get($value); if (!$fonctionSaisie) { return null; } // recherche de la Structure sélectionnée - $structures = $this->getStructures(); - $value = $this->get('structure')->getValue(); + $structures = $this->getStructures(); + $value = $this->get('structure')->getValue(); $structureSaisie = isset($structures[$value]) ? $structures[$value] : null; if (!$structureSaisie) { return null; @@ -242,13 +294,13 @@ class SaisieFieldset extends AbstractFieldset $callback = function () use ($structureSaisie) { return true; }; - $message = "Composante d'enseignement requise"; + $message = "Composante d'enseignement requise"; } // si une structure est associée à la fonction, la structure sélectionnée soit être celle-là else { $callback = function () use ($structureSaisie, $structureFonction) { return $structureSaisie === $structureFonction; }; - $message = sprintf("Structure obligatoire : '%s'", $structureFonction); + $message = sprintf("Structure obligatoire : '%s'", $structureFonction); } $v = new Callback($callback); @@ -258,7 +310,6 @@ class SaisieFieldset extends AbstractFieldset } - /** * Should return an array specification compatible with * {@link Laminas\InputFilter\Factory::createInputFilter()}. @@ -268,8 +319,14 @@ class SaisieFieldset extends AbstractFieldset public function getInputFilterSpecification() { $specs = [ - 'structure' => [ - 'required' => true, + 'motif-non-paiement' => [ + 'required' => false, + ], + 'tag' => [ + 'required' => false, + ], + 'structure' => [ + 'required' => false, 'validators' => [ [ 'name' => 'Laminas\Validator\NotEmpty', @@ -281,7 +338,7 @@ class SaisieFieldset extends AbstractFieldset ], ], ], - 'fonction' => [ + 'fonction' => [ 'required' => true, 'validators' => [ [ @@ -294,20 +351,20 @@ class SaisieFieldset extends AbstractFieldset ], ], ], - 'heures' => [ + 'heures' => [ 'required' => true, 'filters' => [ ['name' => 'Laminas\Filter\StringTrim'], new PregReplace(['pattern' => '/,/', 'replacement' => '.']), ], ], - 'commentaires' => [ + 'commentaires' => [ 'required' => false, 'filters' => [ ['name' => 'Laminas\Filter\StringTrim'], ], ], - 'formation' => [ + 'formation' => [ 'required' => false, 'filters' => [ ['name' => 'Laminas\Filter\StringTrim'], @@ -325,9 +382,6 @@ class SaisieFieldset extends AbstractFieldset } - - - /** * * @@ -341,7 +395,7 @@ class SaisieFieldsetHydrator implements HydratorInterface /** * Hydrate $object with the provided $data. * - * @param array $data + * @param array $data * @param ServiceReferentiel $object * * @return object @@ -362,6 +416,12 @@ class SaisieFieldsetHydrator implements HydratorInterface $heures = isset($data['heures']) ? FloatFromString::run($data['heures']) : 0; $object->getVolumeHoraireReferentielListe()->setHeures($heures); + $tag = isset($data['tag']) ? (int)$data['tag'] : null; + $object->setTag($tag ? $em->find(Tag::class, $tag) : null); + + $motifNonPaiement = isset($data['motif-non-paiement']) ? (int)$data['motif-non-paiement'] : null; + $object->setMotifNonPaiement($motifNonPaiement ? $em->find(MotifNonPaiement::class, $motifNonPaiement) : null); + $commentaires = isset($data['commentaires']) ? $data['commentaires'] : null; $object->setCommentaires($commentaires); @@ -372,7 +432,6 @@ class SaisieFieldsetHydrator implements HydratorInterface } - /** * Extract values from an object * @@ -386,6 +445,7 @@ class SaisieFieldsetHydrator implements HydratorInterface if ($object) { $data['id'] = $object->getId(); + $data['idPrev'] = $object->getId(); } // if ($object->getIntervenant()) { @@ -409,10 +469,23 @@ class SaisieFieldsetHydrator implements HydratorInterface $data['fonction'] = null; } + if ($object->getTag()) { + $data['tag'] = $object->getTag()->getId(); + } else { + $data['tag'] = null; + } + + if ($object->getMotifNonPaiement()) { + $data['motif-non-paiement'] = $object->getMotifNonPaiement()->getId(); + } else { + $data['motif-non-paiement'] = null; + } + + $data['heures'] = StringFromFloat::run($object->getVolumeHoraireReferentielListe()->getHeures()); $data['commentaires'] = $object->getCommentaires(); - $data['formation'] = $object->getFormation(); + $data['formation'] = $object->getFormation(); return $data; } diff --git a/module/Referentiel/src/Processus/ServiceReferentielProcessus.php b/module/Referentiel/src/Processus/ServiceReferentielProcessus.php index 4e0ec1c06785b4ecd6666860f4128fbc20de1f07..66649f0bc42883358b0af1d0eb0d90601e6e4fcd 100755 --- a/module/Referentiel/src/Processus/ServiceReferentielProcessus.php +++ b/module/Referentiel/src/Processus/ServiceReferentielProcessus.php @@ -32,7 +32,7 @@ class ServiceReferentielProcessus extends AbstractProcessus { $role = $this->getServiceContext()->getSelectedIdentityRole(); - $serviceReferentiel = $this->getServiceServiceReferentiel(); + $serviceReferentiel = $this->getServiceServiceReferentiel(); $volumeHoraireReferentielService = $this->getServiceVolumeHoraireReferentiel(); $qb = $serviceReferentiel->initQuery()[0]; @@ -60,6 +60,7 @@ class ServiceReferentielProcessus extends AbstractProcessus $service->setTypeVolumeHoraire($recherche->getTypeVolumehoraire()); } + return $services; } } \ No newline at end of file diff --git a/module/Referentiel/src/Service/ServiceReferentielService.php b/module/Referentiel/src/Service/ServiceReferentielService.php index 8490d13efeacdf908ed79560dabc341749537f6d..53bf2b400ffcda1f3d94dd09d4aaa31742db6cb5 100755 --- a/module/Referentiel/src/Service/ServiceReferentielService.php +++ b/module/Referentiel/src/Service/ServiceReferentielService.php @@ -2,8 +2,11 @@ namespace Referentiel\Service; +use Application\Entity\Db\MotifNonPaiement; +use Application\Entity\Db\Tag; use Application\Service\AbstractEntityService; use Application\Service\StructureService; +use Application\Service\Traits\TagServiceAwareTrait; use Referentiel\Entity\Db\FonctionReferentiel; use Application\Provider\Privilege\Privileges; use Service\Service\EtatVolumeHoraireServiceAwareTrait; @@ -29,6 +32,7 @@ class ServiceReferentielService extends AbstractEntityService { use IntervenantServiceAwareTrait; use StructureServiceAwareTrait; + use TagServiceAwareTrait; use FonctionReferentielServiceAwareTrait; use TypeVolumeHoraireServiceAwareTrait; use EtatVolumeHoraireServiceAwareTrait; @@ -81,6 +85,7 @@ class ServiceReferentielService extends AbstractEntityService ->join($this->getServiceFonctionReferentiel(), $qb, 'fonctionReferentiel', true, $alias) ->join($this->getServiceIntervenant(), $qb, 'intervenant', true, $alias); + return [$qb, $alias]; } @@ -146,6 +151,8 @@ class ServiceReferentielService extends AbstractEntityService Intervenant $intervenant, FonctionReferentiel $fonction, Structure $structure, + ?Tag $tag, + ?MotifNonPaiement $motifNonPaiement, $commentaires = null ) { @@ -153,6 +160,8 @@ class ServiceReferentielService extends AbstractEntityService 'intervenant' => $intervenant, 'fonctionReferentiel' => $fonction, 'structure' => $structure, + 'tag' => $tag, + 'motifNonPaiement' => $motifNonPaiement, ]); /* Retourne le premier NON historisé */ @@ -245,16 +254,26 @@ class ServiceReferentielService extends AbstractEntityService } $serviceAllreadyExists = null; - if (!$entity->getId()) { // uniquement pour les nouveaux services!! - $serviceAllreadyExists = $this->getBy( - $entity->getIntervenant(), - $entity->getFonctionReferentiel(), - $entity->getStructure(), - $entity->getCommentaires() - ); - } + + $serviceAllreadyExists = $this->getBy( + $entity->getIntervenant(), + $entity->getFonctionReferentiel(), + $entity->getStructure(), + $entity->getTag(), + $entity->getMotifNonPaiement(), + $entity->getCommentaires() + ); + + //@TODO probleme de supression + //On regarde dans le cas d'un modification d'un service reférentiel + + if ($serviceAllreadyExists) { $result = $serviceAllreadyExists; + if ($result->getId() != $entity->getId()) { + //on remove l'ancien service puisque les volumes horaires vont être accrochés sur un service déjà existant + parent::delete($entity); + } } else { $sourceOse = $this->getServiceSource()->getOse(); if (!$entity->getSource()) { @@ -361,8 +380,8 @@ class ServiceReferentielService extends AbstractEntityService } $volumeHoraire = $this->getServiceVolumeHoraireReferentiel()->newEntity(); //@formatter:off - $volumeHoraire->setTypeVolumeHoraire( $o['type-volume-horaire'] ); - $volumeHoraire->setHeures ( $o['heures'] ); + $volumeHoraire->setTypeVolumeHoraire($o['type-volume-horaire']); + $volumeHoraire->setHeures($o['heures']); //@formatter:on $volumeHoraire->setServiceReferentiel($service); $service->addVolumeHoraireReferentiel($volumeHoraire); @@ -387,9 +406,9 @@ class ServiceReferentielService extends AbstractEntityService $qb = $this->select(['id', 'fonctionReferentiel', 'structure', 'commentaires']); //@formatter:off - $this->join(FonctionReferentielService::class, $qb, 'fonctionReferentiel', true); - $this->Join(StructureService::class, $qb, 'structure', true); - $this->Join($sVolumeHoraireReferentiel, $qb, 'volumeHoraireReferentiel',true); + $this->join(FonctionReferentielService::class, $qb, 'fonctionReferentiel', true); + $this->Join(StructureService::class, $qb, 'structure', true); + $this->Join($sVolumeHoraireReferentiel, $qb, 'volumeHoraireReferentiel', true); //@formatter:on $this->finderByHistorique($qb); @@ -420,7 +439,9 @@ class ServiceReferentielService extends AbstractEntityService 'service' => $this->getBy( $intervenant, $service->getFonctionReferentiel(), - $service->getStructure() + $service->getStructure(), + $service->getTag(), + $service->getMotifNonPaiement() ), ]; diff --git a/module/Referentiel/src/View/Helper/FormSaisieViewHelper.php b/module/Referentiel/src/View/Helper/FormSaisieViewHelper.php index e17c6410cf4b3e01d28d455e2557393b7f7077c3..71f03bba9c537e54bb1597b56baaadd97e4833b7 100755 --- a/module/Referentiel/src/View/Helper/FormSaisieViewHelper.php +++ b/module/Referentiel/src/View/Helper/FormSaisieViewHelper.php @@ -24,7 +24,6 @@ class FormSaisieViewHelper extends AbstractViewHelper protected $form; - /** * * @param SaisieForm $form @@ -41,14 +40,12 @@ class FormSaisieViewHelper extends AbstractViewHelper } - public function __toString() { return $this->render(); } - public function getVolumesHorairesRefreshUrl() { $url = $this->getView()->url( @@ -61,7 +58,6 @@ class FormSaisieViewHelper extends AbstractViewHelper } - /** * Rendu du formulaire * @@ -76,21 +72,11 @@ class FormSaisieViewHelper extends AbstractViewHelper $part = $this->getView()->form()->openTag($this->form); -// if (!$this->getServiceContext()->getSelectedIdentityRole()->getIntervenant()) { -// $template = <<<EOS -//<div> -// %s -//</div> -//EOS; -// $part .= sprintf( -// $template, -// $this->getView()->formControlGroup($fservice->get('intervenant'))); -// } $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->get($this->form->get('type-volume-horaire')->getValue()); - $inRealise = TypeVolumeHoraire::CODE_REALISE === $typeVolumeHoraire->getCode(); - $rappelPrevu = null; - $buttonMarkup = null; + $inRealise = TypeVolumeHoraire::CODE_REALISE === $typeVolumeHoraire->getCode(); + $rappelPrevu = null; + $buttonMarkup = null; if ($inRealise) { /** @@ -102,7 +88,7 @@ class FormSaisieViewHelper extends AbstractViewHelper $vhl->setEtatVolumeHoraire($this->getServiceEtatVolumeHoraire()->getValide()); $heures = $vhl->getHeures(); - $template = <<<EOS + $template = <<<EOS <div class="float-end" style="opacity: 0.5"> <strong>Prévu :</strong> <span id="rappel-heures-prevu" data-heures="%s">%s</span> </div> @@ -145,7 +131,7 @@ EOS; </div> </div> EOS; - $part .= sprintf( + $part .= sprintf( $template, $this->getView()->formControlGroup($fservice->get('fonction')), $this->getView()->formControlGroup($fservice->get('structure')), @@ -153,12 +139,28 @@ EOS; $this->getView()->formControlGroup($fservice->get('heures')) ); + $template = <<<EOS +<div class="row"> +<div class="col-md-6"> + %s +</div> +<div class="col-md-6"> + %s +</div> +</div> +EOS; + $part .= sprintf( + $template, + $this->getView()->formControlGroup($fservice->get('tag')), + $this->getView()->formControlGroup($fservice->get('motif-non-paiement'))); + + $template = <<<EOS <div> %s </div> EOS; - $part .= sprintf( + $part .= sprintf( $template, $this->getView()->formControlGroup($fservice->get('formation'))); @@ -167,6 +169,7 @@ EOS; $this->getView()->formControlGroup($fservice->get('commentaires'))); $part .= $this->getView()->formHidden($fservice->get('id')); + $part .= $this->getView()->formHidden($fservice->get('idPrev')); $part .= '<br />'; $part .= $this->getView()->formRow($this->form->get('submit')); $part .= $this->getView()->formHidden($this->form->get('type-volume-horaire')); diff --git a/module/Referentiel/src/View/Helper/LigneViewHelper.php b/module/Referentiel/src/View/Helper/LigneViewHelper.php index ab88eb459f9afa3252ca96263c54c088c1451aba..4f3e03b9c5ed17558d2d392a8f9c49e805160bf6 100755 --- a/module/Referentiel/src/View/Helper/LigneViewHelper.php +++ b/module/Referentiel/src/View/Helper/LigneViewHelper.php @@ -2,6 +2,7 @@ namespace Referentiel\View\Helper; +use Application\Entity\Db\MotifNonPaiement; use Application\Provider\Privilege\Privileges; use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Service\Service\TypeVolumeHoraireServiceAwareTrait; @@ -34,12 +35,11 @@ class LigneViewHelper extends AbstractViewHelper protected $forcedReadOnly = false; - /** * Helper entry point. * * @param ReferentielsViewHelper $liste - * @param ServiceReferentiel $service + * @param ServiceReferentiel $service * * @return self */ @@ -52,7 +52,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * Retourne le code HTML généré par cette aide de vue. * @@ -64,7 +63,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * @return string */ @@ -86,7 +84,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * Génère le code HTML. * @@ -96,10 +93,10 @@ class LigneViewHelper extends AbstractViewHelper */ public function render($details = false) { - $liste = $this->getListe(); - $service = $this->getServiceReferentiel(); - $vhlListe = $service->getVolumeHoraireReferentielListe(); - $heuresTVH = $vhlListe + $liste = $this->getListe(); + $service = $this->getServiceReferentiel(); + $vhlListe = $service->getVolumeHoraireReferentielListe(); + $heuresTVH = $vhlListe ->setTypeVolumeHoraire($this->getListe()->getTypeVolumeHoraire()) ->setEtatVolumeHoraire($this->getServiceEtatVolumeHoraire()->getSaisi()) ->getHeures(); @@ -107,7 +104,7 @@ class LigneViewHelper extends AbstractViewHelper ->setTypeVolumeHoraire($this->getServiceTypeVolumeHoraire()->getPrevu()) ->setEtatVolumeHoraire($this->getServiceEtatVolumeHoraire()->getValide()) ->getHeures(); - $out = ''; + $out = ''; if ($liste->getColumnVisibility('intervenant')) { $out .= '<td>' . $this->renderIntervenant($service->getIntervenant()) . '</td>'; } @@ -120,6 +117,15 @@ class LigneViewHelper extends AbstractViewHelper if ($liste->getColumnVisibility('commentaires')) { $out .= '<td>' . $this->renderCommentaires($service->getCommentaires()) . "</td>\n"; } + if ($liste->getColumnVisibility('motif-non-paiement')) { + + $out .= '<td>' . $this->renderMotifNonPaiement($service->getMotifNonPaiement()) . "</td>\n"; + } + if ($liste->getColumnVisibility('tags')) { + + $out .= '<td>' . $this->renderTag($service->getTag()) . "</td>\n"; + } + if ($liste->getColumnVisibility('heures')) { $out .= $this->getView()->tag('td', [ 'style' => "text-align:right", @@ -143,14 +149,12 @@ class LigneViewHelper extends AbstractViewHelper } - protected function renderIntervenant($intervenant) { return $this->getView()->intervenant($intervenant)->renderLink(); } - protected function renderStructure($structure) { if (!$structure) return ''; @@ -159,7 +163,6 @@ class LigneViewHelper extends AbstractViewHelper } - protected function renderFonction($fonction) { if (!$fonction) return ''; @@ -169,7 +172,6 @@ class LigneViewHelper extends AbstractViewHelper } - protected function renderCommentaires($commentaires) { if (!$commentaires) return ''; @@ -179,6 +181,25 @@ class LigneViewHelper extends AbstractViewHelper } + protected function renderTag($tag) + { + if (!$tag) return ''; + $out = $tag->getLibelleLong(); + + return $out; + } + + protected function renderMotifNonPaiement($motifNonPaiement) + { + /** + * @var $motifNonPaiement MotifNonPaiement + */ + if (!$motifNonPaiement) return ''; + $out = $motifNonPaiement->getLibelleLong(); + + return $out; + } + protected function renderHeures(ServiceReferentiel $service) { @@ -197,7 +218,7 @@ class LigneViewHelper extends AbstractViewHelper ->setEtatVolumeHoraire($etat = $this->getServiceEtatVolumeHoraire()->getValide()); $out .= sprintf( - '<tr style="opacity: 0.5"><td><strong>Prévisionnel %s :</strong></td><td class="heures">' . \UnicaenApp\Util::formattedNumber($vhlListe->getHeures()) . '</td></tr>', + '<tr style="opacity: 0.5"><td><strong>Prévisionnel %s :</strong></td><td class="heures">' . \UnicaenApp\Util::formattedNumber($vhlListe->getHeures()) . '</td></tr>', $etat); /** @@ -206,7 +227,7 @@ class LigneViewHelper extends AbstractViewHelper $vhlListe ->setTypeVolumeHoraire($this->getListe()->getTypeVolumeHoraire()) ->setEtatVolumeHoraire($this->getServiceEtatVolumeHoraire()->getSaisi()); - $out .= '<tr><td><strong>Réalisé :</strong></td><td class="heures">' . \UnicaenApp\Util::formattedNumber($vhlListe->getHeures()) . '</td></tr>'; + $out .= '<tr><td><strong>Réalisé :</strong></td><td id="heures-realises-' . $service->getId() . '" class="heures">' . \UnicaenApp\Util::formattedNumber($vhlListe->getHeures()) . '</td></tr>'; $out .= '</table>'; } else { @@ -220,7 +241,6 @@ class LigneViewHelper extends AbstractViewHelper } - protected function renderAnnee($annee) { $out = $annee->getLibelle(); @@ -229,7 +249,6 @@ class LigneViewHelper extends AbstractViewHelper } - protected function renderModifier() { $url = $this->getView()->url('referentiel/saisie', ['id' => $this->getServiceReferentiel()->getId()], ['query' => ['type-volume-horaire' => $this->getListe()->getTypeVolumeHoraire()->getId()]]); @@ -238,7 +257,6 @@ class LigneViewHelper extends AbstractViewHelper } - protected function renderSupprimer() { $url = $this->getView()->url('referentiel/suppression', ['id' => $this->getServiceReferentiel()->getId()], ['query' => ['type-volume-horaire' => $this->getListe()->getTypeVolumeHoraire()->getId()]]); @@ -255,7 +273,6 @@ class LigneViewHelper extends AbstractViewHelper } - protected function toQuery($param) { if (null === $param) { @@ -267,7 +284,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * Détermine si nous sommes en service réalisé ou non * @@ -279,7 +295,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * * @return ReferentielsViewHelper @@ -290,7 +305,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * * @param ReferentielsViewHelper $liste @@ -305,7 +319,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * * @return boolean @@ -316,7 +329,6 @@ class LigneViewHelper extends AbstractViewHelper } - /** * * @param ServiceReferentiel $serviceReferentiel @@ -325,8 +337,8 @@ class LigneViewHelper extends AbstractViewHelper */ public function setServiceReferentiel(ServiceReferentiel $serviceReferentiel = null) { - $typeVolumeHoraire = $serviceReferentiel->getTypeVolumeHoraire(); - $this->forcedReadOnly = !$this->getView()->isAllowed($serviceReferentiel, $typeVolumeHoraire->getPrivilegeReferentielEdition()); + $typeVolumeHoraire = $serviceReferentiel->getTypeVolumeHoraire(); + $this->forcedReadOnly = !$this->getView()->isAllowed($serviceReferentiel, $typeVolumeHoraire->getPrivilegeReferentielEdition()); $this->serviceReferentiel = $serviceReferentiel; return $this; diff --git a/module/Referentiel/src/View/Helper/ReferentielsViewHelper.php b/module/Referentiel/src/View/Helper/ReferentielsViewHelper.php index e102bb1af20d5aa1048b0c3b83e965652ba2e2ec..7f580f8a6d33f67fe567043bcbde7e16f92affd9 100755 --- a/module/Referentiel/src/View/Helper/ReferentielsViewHelper.php +++ b/module/Referentiel/src/View/Helper/ReferentielsViewHelper.php @@ -29,43 +29,50 @@ class ReferentielsViewHelper extends AbstractViewHelper use ParametresServiceAwareTrait; use IntervenantAwareTrait; - private string $id = 'referentiels'; + private string $id = 'referentiels'; - private array $totaux = []; + private array $totaux = []; - private bool $addButtonVisibility = true; + private bool $addButtonVisibility = true; - private bool $horodatage = false; + private bool $horodatage = false; - private array $columns = [ - 'intervenant' => [ + private array $columns = [ + 'intervenant' => [ 'visibility' => false, 'head-text' => "<th>Intervenant</th>", ], - 'structure' => [ + 'structure' => [ 'visibility' => true, 'head-text' => "<th title=\"Structure\">Structure</th>", ], - 'fonction' => [ + 'fonction' => [ 'visibility' => true, 'head-text' => "<th title=\"Fonction référentiel\">Fonction</th>", ], - 'commentaires' => [ + 'commentaires' => [ 'visibility' => true, 'head-text' => "<th title=\">Commentaires éventuels\">Commentaires</th>", ], - 'heures' => [ + 'motif-non-paiement' => [ + 'visibility' => false, + 'head-text' => "<th title=\"Nombre d'heures\">Motif de non paiement</th>", + ], + 'tags' => [ + 'visibility' => false, + 'head-text' => "<th>Tag</th>", + ], + 'heures' => [ 'visibility' => true, 'head-text' => "<th title=\"Nombre d'heures\">Heures</th>", ], - 'annee' => [ + 'annee' => [ 'visibility' => false, 'head-text' => "<th>Année univ.</th>", ], ]; - private bool $readOnly = false; - + private bool $readOnly = false; /** @@ -86,7 +93,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * Retourne le code HTML généré par cette aide de vue. * @@ -98,7 +104,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function getTotalRefreshUrl(): string { if ($this->isInRealise()) { @@ -114,14 +119,12 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function getAddUrl() { return $this->getView()->url('referentiel/saisie', [], ['query' => ['type-volume-horaire' => $this->getTypeVolumeHoraire()->getId()]]); } - /** * Génère le code HTML. * @@ -131,6 +134,15 @@ class ReferentielsViewHelper extends AbstractViewHelper { $colspan = 2; + $canViewMNP = $this->getView()->isAllowed($this->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_VISUALISATION); + $canEditMNP = $this->getView()->isAllowed($this->getIntervenant(), Privileges::MOTIF_NON_PAIEMENT_EDITION); + $canViewTag = $this->getView()->isAllowed($this->getIntervenant(), Privileges::TAG_VISUALISATION); + $canEditTag = $this->getView()->isAllowed($this->getIntervenant(), Privileges::TAG_EDITION); + + $this->columns['tags']['visibility'] = ($canEditTag || $canViewTag) ? true : false; + $this->columns['motif-non-paiement']['visibility'] = ($canEditMNP || $canViewMNP) ? true : false; + + $attribs = [ 'id' => $this->getId(true), 'class' => 'referentiels', @@ -148,6 +160,8 @@ class ReferentielsViewHelper extends AbstractViewHelper $out .= '<table class="table table-bordered table-xs service-referentiel">'; $out .= '<tr>'; + /*On rend les colonnes visibles selon les privileges*/ + foreach ($this->getColumnsList() as $columnName) { if ($this->getColumnVisibility($columnName)) { $out .= $this->getColumnHeadText($columnName) . "\n"; @@ -178,7 +192,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - protected function renderActionButtons() { if ($this->getReadOnly()) return ''; @@ -205,90 +218,85 @@ class ReferentielsViewHelper extends AbstractViewHelper } } - $out .= $this->renderActionSaisie(); + $out .= $this->renderActionSaisie() . "<br/><br/>"; return $out; } - public function renderActionPrevuToPrevu(): string { $out = ''; if ($this->getServiceServiceReferentiel()->getPrevusFromPrevusData($this->getIntervenant())) { $attribs = [ - 'class' => 'btn btn-warning referentiel-prevu-to-prevu-show', - 'data-toggle' => 'modal', - 'data-target' => '#referentiel-prevu-to-prevu-modal', + 'class' => 'btn btn-warning referentiel-prevu-to-prevu-show', + 'data-bs-toggle' => 'modal', + 'data-bs-target' => '#referentiel-prevu-to-prevu-modal', //'data-event' => 'service-constatation', //'href' => $this->getAddUrl(), - 'title' => "Initialiser le service référentiel prévisionnel avec le service référentiel prévisionnel validé l'année dernière", + 'title' => "Initialiser le service référentiel prévisionnel avec le service référentiel prévisionnel validé l'année dernière", ]; - $source = $this->getServiceTypeVolumeHoraire()->getByCode($this->getServiceParametres()->get('report_service'))->getLibelle(); - $out .= '<button type="button" ' . $this->htmlAttribs($attribs) . '>' . $source . ' ' . $this->getServiceContext()->getAnneePrecedente() . ' <i class="fas fa-arrow-right"></i> Prévisionnel ' . $this->getServiceContext()->getAnnee() . '</button> '; - $out .= '<div class="modal fade" id="referentiel-prevu-to-prevu-modal" tabindex="-1" role="dialog" aria-hidden="true">'; - $out .= '<div class="modal-dialog modal-md">'; - $out .= '<div class="modal-content">'; - $out .= '<div class="modal-header">'; - $out .= '<button type="button" class="close" data-bs-dismiss="modal" aria-label="Annuler"><span aria-hidden="true">×</span></button>'; - $out .= '<h4 class="modal-title">Reporter ici le service ' . strtolower($source) . ' validé de l\'année précédente.</h4>'; - $out .= '</div>'; - $out .= '<div class="modal-body">'; - $out .= '<p>Souhaitez-vous réellement initialiser votre service prévisionnel à partir de votre service ' . strtolower($source) . ' validé de l\'an dernier ?</p>'; - $out .= '</div>'; - $out .= '<div class="modal-footer">'; - $out .= '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>'; - $out .= '<button type="button" class="btn btn-primary referentiel-prevu-to-prevu" data-intervenant="' . $this->getIntervenant()->getId() . '">OK</button>'; - $out .= '</div>'; - $out .= '</div>'; - $out .= '</div>'; - $out .= '</div>'; + $source = $this->getServiceTypeVolumeHoraire()->getByCode($this->getServiceParametres()->get('report_service'))->getLibelle(); + $out .= '<button type="button" ' . $this->htmlAttribs($attribs) . '>' . $source . ' ' . $this->getServiceContext()->getAnneePrecedente() . ' <i class="fas fa-arrow-right"></i> Prévisionnel ' . $this->getServiceContext()->getAnnee() . '</button> '; + $out .= '<div class="modal fade" id="referentiel-prevu-to-prevu-modal" tabindex="-1" role="dialog" aria-hidden="true">'; + $out .= '<div class="modal-dialog modal-md">'; + $out .= '<div class="modal-content">'; + $out .= '<div class="modal-header">'; + $out .= '<h4 class="modal-title">Reporter ici le service ' . strtolower($source) . ' validé de l\'année précédente.</h4>'; + $out .= '</div>'; + $out .= '<div class="modal-body">'; + $out .= '<p>Souhaitez-vous réellement initialiser votre service prévisionnel à partir de votre service ' . strtolower($source) . ' validé de l\'an dernier ?</p>'; + $out .= '</div>'; + $out .= '<div class="modal-footer">'; + $out .= '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>'; + $out .= '<button type="button" class="btn btn-primary referentiel-prevu-to-prevu" data-intervenant="' . $this->getIntervenant()->getId() . '">OK</button>'; + $out .= '</div>'; + $out .= '</div>'; + $out .= '</div>'; + $out .= '</div>'; } return $out; } - public function renderActionPrevuToRealise(): string { $out = ''; $attribs = [ - 'class' => 'btn btn-warning referentiel-prevu-to-realise-show', - 'data-toggle' => 'modal', - 'data-target' => '#referentiel-prevu-to-realise-modal', + 'class' => 'btn btn-warning referentiel-prevu-to-realise-show', + 'data-bs-toggle' => 'modal', + 'data-bs-target' => '#referentiel-prevu-to-realise-modal', //'data-event' => 'service-constatation', //'href' => $this->getAddUrl(), - 'title' => "Saisir comme réalisées l'ensemble des heures prévisionnelles de référentiel" + 'title' => "Saisir comme réalisées l'ensemble des heures prévisionnelles de référentiel" . ". Attention toutefois : si des heures réalisées ont déjà été saisies alors ces dernières seront écrasées!", ]; - $out .= '<button type="button" ' . $this->htmlAttribs($attribs) . '>Prévu <i class="fas fa-arrow-right"></i> réalisé</button> '; - $out .= '<div class="modal fade" id="referentiel-prevu-to-realise-modal" tabindex="-1" role="dialog" aria-hidden="true">'; - $out .= '<div class="modal-dialog modal-md">'; - $out .= '<div class="modal-content">'; - $out .= '<div class="modal-header">'; - $out .= '<button type="button" class="close" data-bs-dismiss="modal" aria-label="Annuler"><span aria-hidden="true">×</span></button>'; - $out .= '<h4 class="modal-title">Saisir comme réalisées l\'ensemble des heures prévisionnelles</h4>'; - $out .= '</div>'; - $out .= '<div class="modal-body">'; - $out .= '<p>Souhaitez-vous réellement saisir comme réalisées l\'ensemble des heures prévisionnelles ?</p>'; - $out .= '<div class="alert alert-warning" role="alert">Attention : si des heures réalisées ont déjà été saisies alors ces dernières seront écrasées!</div>'; - $out .= '</div>'; - $out .= '<div class="modal-footer">'; - $out .= '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>'; - $out .= '<button type="button" class="btn btn-primary referentiel-prevu-to-realise">OK</button>'; - $out .= '</div>'; - $out .= '</div>'; - $out .= '</div>'; - $out .= '</div>'; + $out .= '<button type="button" ' . $this->htmlAttribs($attribs) . '>Prévu <i class="fas fa-arrow-right"></i> réalisé</button> '; + $out .= '<div class="modal fade" id="referentiel-prevu-to-realise-modal" tabindex="-1" role="dialog" aria-hidden="true">'; + $out .= '<div class="modal-dialog modal-md">'; + $out .= '<div class="modal-content">'; + $out .= '<div class="modal-header">'; + $out .= '<h4 class="modal-title">Saisir comme réalisées l\'ensemble des heures prévisionnelles de référentiel</h4>'; + $out .= '</div>'; + $out .= '<div class="modal-body">'; + $out .= '<p>Souhaitez-vous réellement saisir comme réalisées l\'ensemble des heures prévisionnelles de référentiel ?</p>'; + $out .= '<div class="alert alert-warning" role="alert">Attention : si des heures réalisées ont déjà été saisies alors ces dernières seront écrasées!</div>'; + $out .= '</div>'; + $out .= '<div class="modal-footer">'; + $out .= '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>'; + $out .= '<button type="button" class="btn btn-primary referentiel-prevu-to-realise">OK</button>'; + $out .= '</div>'; + $out .= '</div>'; + $out .= '</div>'; + $out .= '</div>'; return $out; } - public function renderActionSaisie(): string { $attribs = [ @@ -302,10 +310,9 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function mustRenderLigne(ServiceReferentiel $service) { - $vhSum = 0; + $vhSum = 0; $vhSum2 = 0; $vhs = $service->getVolumeHoraireReferentiel(); @@ -328,7 +335,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function renderLigne(ServiceReferentiel $service, $details = false, $show = true) { $ligneView = $this->getView()->serviceReferentielLigne($this, $service); @@ -348,7 +354,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function renderTotaux() { $colspan = 0; @@ -362,18 +367,17 @@ class ReferentielsViewHelper extends AbstractViewHelper $data = $this->getTotaux(); $typesInterventionDisplayed = 0; - $out = ''; - $out .= '<tr>'; - $out .= "<th colspan=\"$colspan\" style=\"text-align:right\">Total des heures de référentiel :</th>\n"; - $out .= "<td id=\"total-referentiel\" style=\"text-align:right\" colspan=\"" . $typesInterventionDisplayed . "\">" . \UnicaenApp\Util::formattedNumber($data['total_general']) . "</td>\n"; - $out .= "<td> </td>\n"; - $out .= "</tr>\n"; + $out = ''; + $out .= '<tr>'; + $out .= "<th colspan=\"$colspan\" style=\"text-align:right\">Total des heures de référentiel :</th>\n"; + $out .= "<td id=\"total-referentiel\" style=\"text-align:right\" colspan=\"" . $typesInterventionDisplayed . "\">" . \UnicaenApp\Util::formattedNumber($data['total_general']) . "</td>\n"; + $out .= "<td> </td>\n"; + $out .= "</tr>\n"; return $out; } - public function renderShowHide() { return @@ -384,7 +388,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * Détermine si nous sommes en service réalisé ou non * @@ -396,7 +399,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * @return string */ @@ -410,7 +412,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - protected function getTotaux(): array { if (!$this->totaux) { @@ -418,7 +419,7 @@ class ReferentielsViewHelper extends AbstractViewHelper 'total_general' => 0, ]; foreach ($this->getServices() as $service) { - $h = $service->getVolumeHoraireReferentielListe()->setTypeVolumeHoraire($this->getTypeVolumehoraire())->getHeures(); + $h = $service->getVolumeHoraireReferentielListe()->setTypeVolumeHoraire($this->getTypeVolumehoraire())->getHeures(); $data['total_general'] += $h; } $this->totaux = $data; @@ -428,7 +429,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * Retourne les paramètres de configuration du View Helper sous forme de tableau transformable en JSON * @@ -450,7 +450,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * Copnfigure le View Helper selon les paramètres transmis * @@ -476,16 +475,15 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function calcDefaultColumnsVisibility(): self { $services = $this->getServices(); // si plusieurs années différentes sont détectées alors on prévoit d'afficher la colonne année par défaut // si plusieurs intervenants différents alors on prévoit d'afficher la colonne intervenant par défaut - $annee = null; - $multiAnnees = false; - $intervenant = null; + $annee = null; + $multiAnnees = false; + $intervenant = null; $multiIntervenants = false; foreach ($services as $service) { if (empty($intervenant)) { @@ -509,7 +507,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * @return @string[] */ @@ -519,10 +516,9 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * - * @param string $columnName + * @param string $columnName * @param boolean $visibility * * @return self @@ -535,7 +531,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @param string $columnName @@ -552,7 +547,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @param string $columnName @@ -570,7 +564,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * Retourne le type de volume horaire concerné. * @@ -586,7 +579,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @return boolean @@ -597,7 +589,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @param boolean $readOnly @@ -612,7 +603,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @return ServiceReferentiel[] @@ -623,7 +613,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @param Service[] $services @@ -638,7 +627,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @return boolean @@ -649,7 +637,6 @@ class ReferentielsViewHelper extends AbstractViewHelper } - /** * * @param boolean $addButtonVisibility @@ -664,14 +651,12 @@ class ReferentielsViewHelper extends AbstractViewHelper } - public function hasHorodatage(): bool { return $this->horodatage; } - public function setHorodatage(bool $horodatage): self { $this->horodatage = $horodatage; diff --git a/module/Referentiel/view/referentiel/index.phtml b/module/Referentiel/view/referentiel/index.phtml index 859cd9091fa2f7edcc9ec6df2e1a71b94f26058d..7089aed72557066ad024eb53326a46c5a3adab94 100755 --- a/module/Referentiel/view/referentiel/index.phtml +++ b/module/Referentiel/view/referentiel/index.phtml @@ -36,7 +36,7 @@ echo $this->feuilleDeRoute($intervenant)->renderNav($nextEtape); <script> /* $(function () { - WidgetInitializer.includeJs(Url('js/service-referentiel.js')); + WidgetInitializer.includeJs(Util.url('js/service-referentiel.js')); $('.referentiels').referentiels({ 'heures-change': function () { diff --git a/module/Service/config/modification-service.config.php b/module/Service/config/modification-service.config.php index c4c798c6e6b4a3538f1c2023d605f1e4fdaa668a..3d04e7c82d8c18f645dc0bb5054c22b91e3e45e3 100644 --- a/module/Service/config/modification-service.config.php +++ b/module/Service/config/modification-service.config.php @@ -57,29 +57,17 @@ return [ ], 'navigation' => [ - 'gestion' => [ - 'pages' => [ - 'modification-service-du-export-csv' => [ - 'label' => "Modifications de service dû (CSV)", - 'icon' => 'fas fa-fill', - 'title' => "Modifications de service dû (CSV)", - 'route' => 'modification-service-du/export-csv', - 'resource' => PrivilegeController::getResourceId(ModificationServiceDuController::class, 'export-csv'), - 'order' => 45, - 'color' => '#45DAE0', - ], - ], - ], + 'administration' => [ 'pages' => [ 'rh' => [ 'pages' => [ 'motif-modification-service' => [ - 'label' => 'Motifs de modification du service dû', - 'route' => 'motif-modification-service', - 'resource' => PrivilegeController::getResourceId(MotifModificationServiceController::class, 'index'), - 'order' => 40, - 'color' => '#BBCF55', + 'label' => 'Motifs de modification du service dû', + 'route' => 'motif-modification-service', + 'resource' => PrivilegeController::getResourceId(MotifModificationServiceController::class, 'index'), + 'order' => 40, + 'color' => '#BBCF55', ], ], ], diff --git a/module/Service/src/Assertion/ServiceAssertion.php b/module/Service/src/Assertion/ServiceAssertion.php index 4dee062fc7aaef7fa5f1b3e9eebd463281908744..9912c9f1cd03f0421542d1de1a277dae28c5f3ae 100755 --- a/module/Service/src/Assertion/ServiceAssertion.php +++ b/module/Service/src/Assertion/ServiceAssertion.php @@ -107,6 +107,7 @@ class ServiceAssertion extends AbstractAssertion if (!$this->assertIntervenant($role, $intervenant)) return false; // si on n'est pas le bon intervenant!! switch ($controller . '.' . $action) { + case ServiceController::class . '.index': case ServiceController::class . '.resume': return $this->assertResume($role); break; diff --git a/module/Service/src/Controller/ServiceController.php b/module/Service/src/Controller/ServiceController.php index 20aca76133956b7f1beccdcf9e190ae5712a8288..25c581ff43e7443862d631ba4c2ed7ee9d36e385 100755 --- a/module/Service/src/Controller/ServiceController.php +++ b/module/Service/src/Controller/ServiceController.php @@ -3,29 +3,28 @@ namespace Service\Controller; use Application\Controller\AbstractController; -use Application\Entity\Db\ElementPedagogique; -use Application\Service\Traits\ValidationServiceAwareTrait; -use Enseignement\Entity\Db\Service; +use Application\Entity\Db\Intervenant; use Application\Entity\Db\Validation; -use Referentiel\Processus\ServiceReferentielProcessusAwareTrait; -use Service\Form\RechercheFormAwareTrait; -use Enseignement\Processus\EnseignementProcessusAwareTrait; -use Laminas\View\Model\ViewModel; use Application\Provider\Privilege\Privileges; +use Application\Service\Traits\ContextServiceAwareTrait; use Application\Service\Traits\EtatSortieServiceAwareTrait; use Application\Service\Traits\LocalContextServiceAwareTrait; +use Application\Service\Traits\ValidationServiceAwareTrait; +use Application\Service\Traits\WorkflowServiceAwareTrait; +use Enseignement\Processus\EnseignementProcessusAwareTrait; +use Laminas\Http\Request; +use Laminas\View\Model\ViewModel; +use OffreFormation\Entity\Db\ElementPedagogique; +use Referentiel\Processus\ServiceReferentielProcessusAwareTrait; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Entity\Recherche; +use Service\Form\RechercheFormAwareTrait; use Service\Service\CampagneSaisieServiceAwareTrait; use Service\Service\EtatVolumeHoraireServiceAwareTrait; -use Application\Service\Traits\WorkflowServiceAwareTrait; use Service\Service\RechercheServiceAwareTrait; use Service\Service\ResumeServiceAwareTrait; use Service\Service\TypeVolumeHoraireServiceAwareTrait; use UnicaenApp\View\Model\MessengerViewModel; -use Laminas\Http\Request; -use Application\Entity\Db\Intervenant; -use Service\Entity\Db\TypeVolumeHoraire; -use Service\Entity\Recherche; -use Application\Service\Traits\ContextServiceAwareTrait; /** * Description of ServiceController @@ -187,13 +186,13 @@ class ServiceController extends AbstractController $this->em()->getFilters()->enable('historique')->init([ \Enseignement\Entity\Db\Service::class, \Enseignement\Entity\Db\VolumeHoraire::class, - \Application\Entity\Db\CheminPedagogique::class, + \OffreFormation\Entity\Db\CheminPedagogique::class, \Referentiel\Entity\Db\ServiceReferentiel::class, \Referentiel\Entity\Db\VolumeHoraireReferentiel::class, \Application\Entity\Db\Validation::class, ]); $this->em()->getFilters()->enable('annee')->init([ - \Application\Entity\Db\ElementPedagogique::class, + \OffreFormation\Entity\Db\ElementPedagogique::class, ]); /* @var $intervenant Intervenant */ diff --git a/module/Service/src/Entity/Db/CampagneSaisie.php b/module/Service/src/Entity/Db/CampagneSaisie.php index 7f36ce0fe72fb2e8b7c66bbe5cdf12f18c2a2c34..d89d76a35d13d219ef63f127e5f2ca8a2a33d017 100755 --- a/module/Service/src/Entity/Db/CampagneSaisie.php +++ b/module/Service/src/Entity/Db/CampagneSaisie.php @@ -148,11 +148,4 @@ class CampagneSaisie return true; } - - - public function __toString(): string - { - return $this->getMessage(); - } - } \ No newline at end of file diff --git a/module/Service/src/Entity/Db/MotifModificationServiceDu.php b/module/Service/src/Entity/Db/MotifModificationServiceDu.php index 17f1b162848febfe63ef8e6a8b0f5f375a1fcfaa..6ba8bb81ed0ab5875b31603e0a208dcfee5e872c 100755 --- a/module/Service/src/Entity/Db/MotifModificationServiceDu.php +++ b/module/Service/src/Entity/Db/MotifModificationServiceDu.php @@ -9,32 +9,29 @@ class MotifModificationServiceDu implements HistoriqueAwareInterface { use HistoriqueAwareTrait; - protected ?int $id = null; + protected ?int $id = null; - protected ?string $code = null; + protected ?string $code = null; - protected ?string $libelle = null; + protected ?string $libelle = null; - protected bool $decharge = false; + protected bool $decharge = false; - protected float $multiplicateur = -1; + protected float $multiplicateur = -1; - - public function getId(): int + public function getId(): ?int { return $this->id; } - public function getCode(): ?string { return $this->code; } - public function setCode(?string $code): MotifModificationServiceDu { $this->code = $code; @@ -43,14 +40,12 @@ class MotifModificationServiceDu implements HistoriqueAwareInterface } - public function getLibelle(): ?string { return $this->libelle; } - public function setLibelle(?string $libelle): MotifModificationServiceDu { $this->libelle = $libelle; @@ -59,14 +54,12 @@ class MotifModificationServiceDu implements HistoriqueAwareInterface } - public function getDecharge(): bool { return $this->decharge; } - public function setDecharge(bool $decharge): MotifModificationServiceDu { $this->decharge = $decharge; @@ -75,14 +68,12 @@ class MotifModificationServiceDu implements HistoriqueAwareInterface } - public function getMultiplicateur(): float|int { return $this->multiplicateur; } - public function setMultiplicateur(float|int $multiplicateur): MotifModificationServiceDu { $this->multiplicateur = $multiplicateur; @@ -91,7 +82,6 @@ class MotifModificationServiceDu implements HistoriqueAwareInterface } - public function __toString(): string { return $this->getLibelle(); diff --git a/module/Service/src/Entity/Recherche.php b/module/Service/src/Entity/Recherche.php index 78f97d7990d72da4bf9de43782b640886cedcbc5..91c90c058336228bbe06cd2adcbf4ee44586448b 100755 --- a/module/Service/src/Entity/Recherche.php +++ b/module/Service/src/Entity/Recherche.php @@ -2,16 +2,16 @@ namespace Service\Entity; -use Service\Entity\Db\EtatVolumeHoraire; -use Intervenant\Entity\Db\TypeIntervenantAwareTrait; +use Application\Entity\Db\Structure; use Application\Entity\Db\Traits\IntervenantAwareTrait; -use Service\Entity\Db\TypeVolumeHoraire; use Application\Traits\NiveauEtapeAwareTrait; -use Application\Entity\Db\Traits\EtapeAwareTrait; -use Application\Entity\Db\Traits\ElementPedagogiqueAwareTrait; -use Service\Entity\Db\TypeVolumeHoraireAwareTrait; +use Intervenant\Entity\Db\TypeIntervenantAwareTrait; +use OffreFormation\Entity\Db\Traits\ElementPedagogiqueAwareTrait; +use OffreFormation\Entity\Db\Traits\EtapeAwareTrait; +use Service\Entity\Db\EtatVolumeHoraire; use Service\Entity\Db\EtatVolumeHoraireAwareTrait; -use Application\Entity\Db\Structure; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraireAwareTrait; class Recherche { diff --git a/module/Service/src/Form/CampagneSaisieForm.php b/module/Service/src/Form/CampagneSaisieForm.php index 3adb0bc0e766134226841b85b6eac7ce4e430e9f..34d210b3311c75eb13e0318503d94a7fa0ee3027 100755 --- a/module/Service/src/Form/CampagneSaisieForm.php +++ b/module/Service/src/Form/CampagneSaisieForm.php @@ -3,7 +3,9 @@ namespace Service\Form; use Application\Constants; +use Application\Filter\DateTimeFromString; use Application\Form\AbstractForm; +use Laminas\Filter\DateTimeFormatter; use Service\Entity\Db\CampagneSaisie; use Laminas\Hydrator\HydratorInterface; use UnicaenApp\Form\Element\Date; @@ -40,26 +42,18 @@ class CampagneSaisieForm extends AbstractForm ]); $this->add([ - 'type' => 'DateTime', - 'name' => 'dateDebut', - 'options' => [ - 'label' => 'Date de début', - 'format' => 'd/m/Y', - ], - 'attributes' => [ - 'step' => '1', + 'type' => 'Date', + 'name' => 'dateDebut', + 'options' => [ + 'label' => 'Date de début', ], ]); $this->add([ - 'type' => 'DateTime', - 'name' => 'dateFin', - 'options' => [ - 'label' => 'Date de fin', - 'format' => 'd/m/Y', - ], - 'attributes' => [ - 'step' => '1', + 'type' => 'Date', + 'name' => 'dateFin', + 'options' => [ + 'label' => 'Date de fin', ], ]); @@ -132,8 +126,8 @@ class CampagneSaisieFormHydrator implements HydratorInterface */ public function hydrate(array $data, $object) { - $object->setDateDebut($data['dateDebut'] ? \DateTime::createFromFormat(Constants::DATE_FORMAT, $data['dateDebut']) : null); - $object->setDateFin($data['dateFin'] ? \DateTime::createFromFormat(Constants::DATE_FORMAT, $data['dateFin']) : null); + $object->setDateDebut(DateTimeFromString::run($data['dateDebut'] ?? null)); + $object->setDateFin(DateTimeFromString::run($data['dateFin'] ?? null)); $object->setMessageIntervenant($data['messageIntervenant']); $object->setMessageAutres($data['messageAutres']); @@ -153,8 +147,8 @@ class CampagneSaisieFormHydrator implements HydratorInterface 'id' => $object->getId(), 'typeIntervenant' => $object->getTypeIntervenant()->getId(), 'typeVolumeHoraire' => $object->getTypeVolumeHoraire()->getId(), - 'dateDebut' => $object->getDateDebut() ? $object->getDateDebut()->format(Constants::DATE_FORMAT) : null, - 'dateFin' => $object->getDateFin() ? $object->getDateFin()->format(Constants::DATE_FORMAT) : null, + 'dateDebut' => $object->getDateDebut(), + 'dateFin' => $object->getDateFin(), 'messageIntervenant' => $object->getMessageIntervenant(), 'messageAutres' => $object->getMessageAutres(), ]; diff --git a/module/Service/src/Form/RechercheForm.php b/module/Service/src/Form/RechercheForm.php index c69116375032133354b8a9f92ac256d505d12366..765e619068e8ea53a8881d0c600edb3a3d1fed00 100755 --- a/module/Service/src/Form/RechercheForm.php +++ b/module/Service/src/Form/RechercheForm.php @@ -2,32 +2,31 @@ namespace Service\Form; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Structure; -use Intervenant\Entity\Db\TypeIntervenant; -use Service\Entity\Db\TypeVolumeHoraire; use Application\Entity\NiveauEtape; -use Service\Entity\Recherche; use Application\Form\AbstractForm; -use Application\Form\OffreFormation\Traits\ElementPedagogiqueRechercheFieldsetAwareTrait; use Application\Provider\Privilege\Privileges; -use Service\Service\EtatVolumeHoraireServiceAwareTrait; use Application\Service\Traits\IntervenantServiceAwareTrait; -use Application\Service\Traits\NiveauEtapeServiceAwareTrait; use Application\Service\Traits\StructureServiceAwareTrait; +use Intervenant\Entity\Db\TypeIntervenant; use Intervenant\Service\TypeIntervenantServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; -use UnicaenApp\Service\EntityManagerAwareInterface; -use UnicaenApp\Service\EntityManagerAwareTrait; -use UnicaenAuth\Service\Traits\AuthorizeServiceAwareTrait; -use Laminas\Form\Element\Select; use Laminas\Form\Element\Hidden; -use UnicaenApp\Form\Element\SearchAndSelect; +use Laminas\Form\Element\Select; use Laminas\Form\ElementInterface; use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Form\Traits\ElementPedagogiqueRechercheFieldsetAwareTrait; +use OffreFormation\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use Service\Entity\Db\EtatVolumeHoraire; +use Service\Entity\Db\TypeVolumeHoraire; +use Service\Entity\Recherche; +use Service\Service\EtatVolumeHoraireServiceAwareTrait; +use Service\Service\TypeVolumeHoraireServiceAwareTrait; +use UnicaenApp\Form\Element\SearchAndSelect; +use UnicaenApp\Service\EntityManagerAwareTrait; +use UnicaenAuth\Service\Traits\AuthorizeServiceAwareTrait; /** diff --git a/module/Service/src/Hydrator/RechercheHydrator.php b/module/Service/src/Hydrator/RechercheHydrator.php index 24dd73112b577a113df185ebca8957bd3b0ed453..afa7a6cbf20a8eaa2f34bc338cec827ecbf9359c 100755 --- a/module/Service/src/Hydrator/RechercheHydrator.php +++ b/module/Service/src/Hydrator/RechercheHydrator.php @@ -2,17 +2,18 @@ namespace Service\Hydrator; -use Application\Entity\Db\ElementPedagogique; -use Application\Entity\Db\Etape; -use Service\Entity\Db\EtatVolumeHoraire; use Application\Entity\Db\Intervenant; use Application\Entity\Db\Structure; use Intervenant\Entity\Db\TypeIntervenant; +use Laminas\Hydrator\HydratorInterface; +use OffreFormation\Service\Traits\NiveauEtapeServiceAwareTrait; +use OffreFormation\Entity\Db\ElementPedagogique; +use OffreFormation\Entity\Db\Etape; +use Service\Entity\Db\EtatVolumeHoraire; use Service\Entity\Db\TypeVolumeHoraire; -use Application\Service\Traits\NiveauEtapeServiceAwareTrait; +use Service\Entity\Recherche; use UnicaenApp\Service\EntityManagerAwareInterface; use UnicaenApp\Service\EntityManagerAwareTrait; -use Laminas\Hydrator\HydratorInterface; /** @@ -72,7 +73,7 @@ class RechercheHydrator implements EntityManagerAwareInterface, HydratorInterfac /** * Extract values from an object * - * @param \Application\Entity\Db\ElementPedagogique $object + * @param \OffreFormation\Entity\Db\ElementPedagogique $object * * @return array */ diff --git a/module/Service/src/Service/ResumeService.php b/module/Service/src/Service/ResumeService.php index 1efc5157e6575e3012c443ca49371bb6ac860f4e..eb66a9fffa728478e96f874dfc22e743466f4b21 100644 --- a/module/Service/src/Service/ResumeService.php +++ b/module/Service/src/Service/ResumeService.php @@ -3,9 +3,9 @@ namespace Service\Service; use Application\Entity\Db\Structure; -use Application\Entity\Db\TypeIntervention; use Application\Service\AbstractService; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; +use OffreFormation\Entity\Db\TypeIntervention; +use OffreFormation\Service\Traits\TypeInterventionServiceAwareTrait; use Service\Entity\Recherche; class ResumeService extends AbstractService diff --git a/module/Service/view/service/intervenant/saisie.phtml b/module/Service/view/service/intervenant/saisie.phtml index 0571c9c1e58fce3d0be160ddfa61dda7c31b9d24..b62d87ea2d5ea915af99a3c12ae7cb88725a26eb 100755 --- a/module/Service/view/service/intervenant/saisie.phtml +++ b/module/Service/view/service/intervenant/saisie.phtml @@ -63,8 +63,8 @@ if ($enseignements !== false || $referentiels !== false): ?> $(function () { - WidgetInitializer.includeJs(Url('js/service.js')); - WidgetInitializer.includeJs(Url('js/service-referentiel.js')); + WidgetInitializer.includeJs(Util.url('js/service.js')); + WidgetInitializer.includeJs(Util.url('js/service-referentiel.js')); <?php if ($enseignements !== false): ?>$('.enseignements').enseignements({ 'heures-change-exists': function () diff --git a/module/Service/view/service/service/recherche.phtml b/module/Service/view/service/service/recherche.phtml index 4fca3bb347696b5e8ae90134cf459847dd33dfd6..85aa5e3436cb85acc12acd398d5a9e83c6667679 100755 --- a/module/Service/view/service/service/recherche.phtml +++ b/module/Service/view/service/service/recherche.phtml @@ -11,7 +11,7 @@ if ($rechercheForm): } </style> - <?= $this->getView()->inlineScript()->appendFile($this->getView()->basePath() . '/js/service.js'); ?> + <?= $this->inlineScript()->appendFile($this->basePath('js/service.js')); ?> <div class="service-filtres"> <div class="card bg-default filter"> diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000000000000000000000000000000000..687df9cc928a3f3bafb36b8df28bff33b9f7a94f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,978 @@ +{ + "name": "ose", + "version": "21.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ose", + "version": "21.0.0", + "license": "ISC", + "dependencies": { + "vue": "^3.2.45" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.0.0", + "@vue/compiler-sfc": "^3.2.45", + "sass": "^1.57.1", + "vite": "^4.0.0", + "vite-plugin-live-reload": "^3.0.1" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", + "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", + "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", + "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", + "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", + "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", + "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", + "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", + "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", + "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", + "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", + "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", + "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", + "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", + "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", + "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", + "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", + "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", + "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", + "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", + "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", + "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", + "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz", + "integrity": "sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz", + "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz", + "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==", + "dependencies": { + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz", + "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-ssr": "3.2.45", + "@vue/reactivity-transform": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz", + "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz", + "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==", + "dependencies": { + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz", + "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.45", + "@vue/shared": "3.2.45", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz", + "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==", + "dependencies": { + "@vue/reactivity": "3.2.45", + "@vue/shared": "3.2.45" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz", + "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==", + "dependencies": { + "@vue/runtime-core": "3.2.45", + "@vue/shared": "3.2.45", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz", + "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==", + "dependencies": { + "@vue/compiler-ssr": "3.2.45", + "@vue/shared": "3.2.45" + }, + "peerDependencies": { + "vue": "3.2.45" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz", + "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "node_modules/esbuild": { + "version": "0.16.16", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", + "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.16", + "@esbuild/android-arm64": "0.16.16", + "@esbuild/android-x64": "0.16.16", + "@esbuild/darwin-arm64": "0.16.16", + "@esbuild/darwin-x64": "0.16.16", + "@esbuild/freebsd-arm64": "0.16.16", + "@esbuild/freebsd-x64": "0.16.16", + "@esbuild/linux-arm": "0.16.16", + "@esbuild/linux-arm64": "0.16.16", + "@esbuild/linux-ia32": "0.16.16", + "@esbuild/linux-loong64": "0.16.16", + "@esbuild/linux-mips64el": "0.16.16", + "@esbuild/linux-ppc64": "0.16.16", + "@esbuild/linux-riscv64": "0.16.16", + "@esbuild/linux-s390x": "0.16.16", + "@esbuild/linux-x64": "0.16.16", + "@esbuild/netbsd-x64": "0.16.16", + "@esbuild/openbsd-x64": "0.16.16", + "@esbuild/sunos-x64": "0.16.16", + "@esbuild/win32-arm64": "0.16.16", + "@esbuild/win32-ia32": "0.16.16", + "@esbuild/win32-x64": "0.16.16" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/immutable": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", + "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sass": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/vite": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "dependencies": { + "esbuild": "^0.16.3", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-live-reload": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-live-reload/-/vite-plugin-live-reload-3.0.1.tgz", + "integrity": "sha512-ERZTRHnU50R7nRfKVMCNrkSyXIcxKv87INWmPPmnOF3fcaOKFbLQ5zdO6hfPb6bl03fmENtMByfz0OiEAsFF+g==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.0", + "picocolors": "^1.0.0" + } + }, + "node_modules/vue": { + "version": "3.2.45", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz", + "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==", + "dependencies": { + "@vue/compiler-dom": "3.2.45", + "@vue/compiler-sfc": "3.2.45", + "@vue/runtime-dom": "3.2.45", + "@vue/server-renderer": "3.2.45", + "@vue/shared": "3.2.45" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..d5ea33c2518e3d363702f372d707ac471305bb5a --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "ose", + "version": "21.0.0", + "author": "Université de Caen Normandie", + "description": "Organisation des Services d'Enseignement", + "license": "ISC", + "private": true, + "scripts": { + "dev": "APP_ENV=development vite dev", + "build": "vite build" + }, + "dependencies": { + "vue": "^3.2.45" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.0.0", + "@vue/compiler-sfc": "^3.2.45", + "vite": "^4.0.0", + "vite-plugin-live-reload": "^3.0.1", + "sass": "^1.57.1" + } +} diff --git a/public/css/app.css b/public/css/app.css index 55e12f6f30ac7598c9d712d27b4fa4678878eb6e..f48bff7f0281ab99ef2c2713111c95033e22b80e 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -27270,6 +27270,18 @@ textarea.form-control-lg { margin-left: -2px; } +.card.bg-success { + background-color: #80c299 !important; +} + +.card.bg-danger { + background-color: #e35858 !important; +} + +.card.bg-warning { + background-color: #e3a72f !important; +} + /* -------------- DataTables -------------- */ .dt-bootstrap5 .page-link { border-radius: 0px; @@ -27351,6 +27363,10 @@ table thead th { max-width: 600px; } } +.popover .popover-body.alert { + margin-bottom: 0px; +} + /* -------------- Listes de définition -------------- */ dl { margin-top: 0; @@ -27392,6 +27408,11 @@ dd, dt { background-image: none; } +.danger-light { + background-color: #dc4c64; + color: #fff; +} + /* -------------- Personnalisation du bootstrap-select -------------- */ .bootstrap-select .btn { box-shadow: none; @@ -28774,6 +28795,11 @@ form#service div.volume-horaire-saisie-multiple-fin { color: darkgrey; } +.seuils-dedoublement .form-control { + padding-left: 2px; + padding-right: 2px; +} + .chargens-formation-edit.form-lien #actif { line-height: 2rem; width: 2rem; @@ -28858,6 +28884,10 @@ ul.privileges-form li label { margin-top: 2px; } +.etape-taux-remu { + margin-top: 2px; +} + .etape-taux-mixite { margin-top: 2px; } @@ -28994,10 +29024,6 @@ form.statut fieldset legend { } /* Texte & nombres */ -* { - font-family: Open Sans; -} - h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 { font-family: "Open Sans", Helvetica, Arial, sans-serif; font-weight: 200; @@ -29015,6 +29041,7 @@ span.number span.number-dec-00 { /* Structure principale de page */ body { background-color: #f8f8fa; + font-family: "Open Sans"; } body.wait * { @@ -29078,6 +29105,21 @@ div#contenu-principal { border-radius: 4px; } +/* forms */ +.form-inline .mb-2 { + display: inline; +} + +.form-inline .form-control { + width: auto; + display: inline; +} + +.form-inline .form-select { + width: auto; + display: inline; +} + /* Multi checkbox */ div.multicheckbox label input[type=checkbox], div.multicheckbox label input[type=radio] { diff --git a/public/css/app.css.map b/public/css/app.css.map index add06e3f69e991b06ac908fd1c20414887aaa51f..46104bf2e42d5eadaa047af2c073363f696aae97 100644 --- a/public/css/app.css.map +++ b/public/css/app.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["app.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_root.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/vendor/_rfs.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_reboot.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_variables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_variables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_border-radius.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_type.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_lists.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_images.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_image.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_box-shadow.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_containers.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_container.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_breakpoints.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_grid.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_grid.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_tables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_table-variants.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_labels.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-text.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-control.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_transition.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_gradients.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-select.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-check.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-range.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_floating-labels.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_input-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_forms.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_transitions.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_dropdown.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_caret.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_button-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_nav.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_navbar.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_card.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_breadcrumb.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_pagination.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_pagination.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_badge.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_alert.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_alert.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_accordion.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_progress.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_placeholders.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_list-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_list-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_close.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_toasts.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_modal.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_backdrop.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_popover.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_reset-text.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_carousel.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_clearfix.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_spinners.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_offcanvas.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_tooltip.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_color-bg.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_colored-links.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_ratio.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_position.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_stacks.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_visually-hidden.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_visually-hidden.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_stretched-link.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_text-truncation.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_text-truncate.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_vr.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_utilities.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_utilities.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/utilities/_api.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_root.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_reboot.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_type.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_colors.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_flag.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_images.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-control.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-select.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-check.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-file.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_input-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_validation.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-range.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_tables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/mixins/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_deprecated.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_dropdown.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_button-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_nav.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_navbar.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_card.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_breadcrumb.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_pagination.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_badge.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_alert.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_progress.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_list-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_close.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_modal.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_toasts.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_tooltip.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_popover.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_scrollspy.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_ripple.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/mixins/_ripple.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_range.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_accordion.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_carousel.scss","../vendor/bootstrap-5.0.2/scss/bootstrap.scss","../vendor/bootstrap-5.0.2/scss/_root.scss","../vendor/bootstrap-5.0.2/scss/_reboot.scss","../vendor/bootstrap-5.0.2/scss/vendor/_rfs.scss","../vendor/bootstrap-5.0.2/scss/mixins/_border-radius.scss","../vendor/bootstrap-5.0.2/scss/_type.scss","../vendor/bootstrap-5.0.2/scss/mixins/_lists.scss","../vendor/bootstrap-5.0.2/scss/_images.scss","../vendor/bootstrap-5.0.2/scss/mixins/_image.scss","../vendor/bootstrap-5.0.2/scss/mixins/_box-shadow.scss","../vendor/bootstrap-5.0.2/scss/_containers.scss","../vendor/bootstrap-5.0.2/scss/mixins/_container.scss","../vendor/bootstrap-5.0.2/scss/mixins/_breakpoints.scss","../vendor/bootstrap-5.0.2/scss/_grid.scss","../vendor/bootstrap-5.0.2/scss/mixins/_grid.scss","../vendor/bootstrap-5.0.2/scss/_tables.scss","../vendor/bootstrap-5.0.2/scss/mixins/_table-variants.scss","../vendor/bootstrap-5.0.2/scss/forms/_labels.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-text.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-control.scss","../vendor/bootstrap-5.0.2/scss/mixins/_transition.scss","../vendor/bootstrap-5.0.2/scss/mixins/_gradients.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-select.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-check.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-range.scss","../vendor/bootstrap-5.0.2/scss/forms/_floating-labels.scss","../vendor/bootstrap-5.0.2/scss/forms/_input-group.scss","../vendor/bootstrap-5.0.2/scss/mixins/_forms.scss","../vendor/bootstrap-5.0.2/scss/_buttons.scss","../vendor/bootstrap-5.0.2/scss/mixins/_buttons.scss","../vendor/bootstrap-5.0.2/scss/_transitions.scss","../vendor/bootstrap-5.0.2/scss/_dropdown.scss","../vendor/bootstrap-5.0.2/scss/mixins/_caret.scss","../vendor/bootstrap-5.0.2/scss/_button-group.scss","../vendor/bootstrap-5.0.2/scss/_nav.scss","../vendor/bootstrap-5.0.2/scss/_navbar.scss","../vendor/bootstrap-5.0.2/scss/_card.scss","../vendor/bootstrap-5.0.2/scss/_accordion.scss","../vendor/bootstrap-5.0.2/scss/_breadcrumb.scss","../vendor/bootstrap-5.0.2/scss/_pagination.scss","../vendor/bootstrap-5.0.2/scss/mixins/_pagination.scss","../vendor/bootstrap-5.0.2/scss/_badge.scss","../vendor/bootstrap-5.0.2/scss/_alert.scss","../vendor/bootstrap-5.0.2/scss/mixins/_alert.scss","../vendor/bootstrap-5.0.2/scss/_progress.scss","../vendor/bootstrap-5.0.2/scss/_list-group.scss","../vendor/bootstrap-5.0.2/scss/mixins/_list-group.scss","../vendor/bootstrap-5.0.2/scss/_close.scss","../vendor/bootstrap-5.0.2/scss/_toasts.scss","../vendor/bootstrap-5.0.2/scss/_modal.scss","../vendor/bootstrap-5.0.2/scss/_tooltip.scss","../vendor/bootstrap-5.0.2/scss/_variables.scss","../vendor/bootstrap-5.0.2/scss/mixins/_reset-text.scss","../vendor/bootstrap-5.0.2/scss/_popover.scss","../vendor/bootstrap-5.0.2/scss/_carousel.scss","../vendor/bootstrap-5.0.2/scss/mixins/_clearfix.scss","../vendor/bootstrap-5.0.2/scss/_spinners.scss","../vendor/bootstrap-5.0.2/scss/_offcanvas.scss","../vendor/bootstrap-5.0.2/scss/helpers/_colored-links.scss","../vendor/bootstrap-5.0.2/scss/helpers/_ratio.scss","../vendor/bootstrap-5.0.2/scss/helpers/_position.scss","../vendor/bootstrap-5.0.2/scss/helpers/_visually-hidden.scss","../vendor/bootstrap-5.0.2/scss/mixins/_visually-hidden.scss","../vendor/bootstrap-5.0.2/scss/helpers/_stretched-link.scss","../vendor/bootstrap-5.0.2/scss/helpers/_text-truncation.scss","../vendor/bootstrap-5.0.2/scss/mixins/_text-truncate.scss","../vendor/bootstrap-5.0.2/scss/mixins/_utilities.scss","../vendor/bootstrap-5.0.2/scss/utilities/_api.scss","bootstrap.scss","../vendor/bootstrap-select-1.14.0/sass/bootstrap-select.scss","../vendor/bootstrap-select-1.14.0/sass/variables.scss","unicaen-icon.scss","tableaux.scss","cartridge.scss","print.scss","callout.scss","budget.scss","paiement.scss","agrement.scss","acceuil.scss","piece-jointe.scss","intervenant-recherche.scss","service.scss","chargens.scss","droits.scss","plafonds.scss","odf.scss","indicateurs.scss","intervenant.scss","intervenant-statut.scss"],"names":[],"mappings":";AAAA;ACAA;EAQI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EACA;EACA;EACA;EAMA;EACA;EACA;EAOA;EC0PI,sBALI;EDnPR;EACA;EACA;EAIA;EAIA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAEA;EAEA;;;AE1DF;AAAA;AAAA;EAGE;;;AAcE;EANJ;IAOM;;;;AAaN;EACE;EACA;EDqPI,WALI;EC9OR;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA,OCqjBS;EDpjBT;EACA;EACA,SC2jBW;;;ADljBb;EACE;EACA,eC6fuB;ED1fvB,aC6fqB;ED5frB,aC6fqB;;;ADzfvB;EDgNQ;;AA/JJ;ECjDJ;IDuNQ;;;;AClNR;ED2MQ;;AA/JJ;EC5CJ;IDkNQ;;;;AC7MR;EDsMQ;;AA/JJ;ECvCJ;ID6MQ;;;;ACxMR;EDiMQ;;AA/JJ;EClCJ;IDwMQ;;;;ACnMR;EDyLM,WALI;;;AC/KV;EDoLM,WALI;;;ACrKV;EACE;EACA,eC0SwB;;;ADjS1B;EACE;EACA;EACA;;;AAKF;EACE;EACA;EACA;;;AAKF;AAAA;EAEE;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE,aCsYiB;;;ADjYnB;EACE;EACA;;;AAKF;EACE;;;AAOF;AAAA;EAEE,aCiXmB;;;AD1WrB;ED8FM,WALI;;;ACnFV;EACE,SC4ba;ED3bb;;;AAQF;AAAA;EAEE;ED4EI,WALI;ECrER;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAKF;EACE;EACA,iBE6bgB;;AF3bhB;EACE;EACA,iBE6boB;;;AFnbtB;EAEE;EACA;;;AAMJ;AAAA;AAAA;AAAA;EAIE,aC8RiB;EF9Pb,WALI;;;ACnBV;EACE;EACA;EACA;EACA;EDoBI,WALI;;ACVR;EDeI,WALI;ECRN;EACA;;;AAIJ;EDQM,WALI;ECDR;EACA;;AAGA;EACE;;;AAIJ;EACE;EDJI,WALI;ECWR,OCizCU;EDhzCV,kBCizCO;EExkDL;;AH0RF;EACE;EDXE,WALI;;;AC0BV;EACE;;;AAKF;AAAA;EAEE;;;AAOF;EACE;EACA;;;AAGF;EACE,aEwfqB;EFvfrB,gBEufqB;EFtfrB,OEnUS;EFoUT;;;AAOF;EAEE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;;;AAOF;EACE;;;AAMF;EAEE;;;AAQF;EACE;;;AAKF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EDtGI,WALI;EC6GR;;;AAIF;AAAA;EAEE;;;AAKF;EACE;;;AAGF;EAGE;;AAGA;EACE;;;AAOJ;EACE;;;AAQF;AAAA;AAAA;AAAA;EAIE;;AAGE;AAAA;AAAA;AAAA;EACE;;;AAON;EACE;EACA;;;AAKF;EACE;;;AAUF;EACE;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA,eC8JqB;EF1Vf;EC+LN;;AD9VE;ECuVJ;IDjLQ;;;AC0LN;EACE;;;AAOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;;;AASF;EACE;EACA;;;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;EACE;;;AAKF;EACE;;;AAMF;EACE;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAOF;EACE;;;AAOF;EACE;;;AIjjBF;ELwQM,WALI;EKjQR,aHwkBiB;;;AGnkBjB;ELoQM;EKhQJ,aHyjBkB;EGxjBlB,aHwiBmB;;AFxcnB;EKrGF;IL2QM;;;;AK3QN;ELoQM;EKhQJ,aHyjBkB;EGxjBlB,aHwiBmB;;AFxcnB;EKrGF;IL2QM;;;;AK3QN;ELoQM;EKhQJ,aHyjBkB;EGxjBlB,aHwiBmB;;AFxcnB;EKrGF;IL2QM;;;;AK3QN;ELoQM;EKhQJ,aHyjBkB;EGxjBlB,aHwiBmB;;AFxcnB;EKrGF;IL2QM;;;;AK3QN;ELoQM;EKhQJ,aHyjBkB;EGxjBlB,aHwiBmB;;AFxcnB;EKrGF;IL2QM;;;;AK3QN;ELoQM;EKhQJ,aHyjBkB;EGxjBlB,aHwiBmB;;AFxcnB;EKrGF;IL2QM;;;;AKnPR;ECtDE;EACA;;;AD0DF;EC3DE;EACA;;;AD6DF;EACE;;AAEA;EACE,cHgkBkB;;;AGvjBtB;ELoNM,WALI;EK7MR;;;AAIF;EACE,eH+RO;EFlFH,WALI;;AKrMR;EACE;;;AAIJ;EACE;EACA,eHqRO;EFlFH,WALI;EK5LR,OFtFS;;AEwFT;EACE;;;AE9FJ;ECGE;EAGA;;;ADDF;EACE,SL+8CkB;EK98ClB,kBJTM;EIUN;EHIE;EKLE,YARW;EDIf;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EP8PM,WALI;EOvPR,OJ3BS;;;AONT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECHA;EACA;EACA;EACA;EAGA;EAGA;EACA;;;ACsDE;EFhDE;IACE,WR2ae;;;AU5XnB;EFhDE;IACE,WR2ae;;;AU5XnB;EFhDE;IACE,WR2ae;;;AU5XnB;EFhDE;IACE,WR2ae;;;AU5XnB;EFhDE;IACE,WR2ae;;;AW1brB;ECAA;EACA;EACA;EACA;EAEA;EAGA;EAGA;;ADRE;ECuBF;EACA;EACA;EACA;EAGA;EAGA;;;AAkDI;EACE;;;AAGF;EAxCJ;EACA;;;AAcA;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAmCE;EApDJ;EACA;;;AAyDQ;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AAkEM;EAnEN;EACA;;;AA2EQ;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AA6DU;EA7DV;;;AAwEM;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AFxEN;EEuBE;IACE;;EAGF;IAxCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAmCE;IApDJ;IACA;;EAyDQ;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EA2EQ;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EAwEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AFxEN;EEuBE;IACE;;EAGF;IAxCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAmCE;IApDJ;IACA;;EAyDQ;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EA2EQ;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EAwEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AFxEN;EEuBE;IACE;;EAGF;IAxCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAmCE;IApDJ;IACA;;EAyDQ;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EA2EQ;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EAwEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AFxEN;EEuBE;IACE;;EAGF;IAxCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAmCE;IApDJ;IACA;;EAyDQ;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EA2EQ;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EAwEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AFxEN;EEuBE;IACE;;EAGF;IAxCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAmCE;IApDJ;IACA;;EAyDQ;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EAkEM;IAnEN;IACA;;EA2EQ;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EAwEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;ACvIV;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,eboWO;EanWP;EACA,gBbmoB0B;EaloB1B;;AAOA;EACE;EACA;EACA,qBb6bW;Ea5bX;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AAOF;EACE;;;AASA;EACE;;;AAcF;EACE;;AAGA;EACE;;;AAOJ;EACE;;AAGF;EACE;;;AAUF;EACE;EACA;;;AAMF;EACE;EACA;;;AAQJ;EACE;EACA;;;AAQA;EACE;EACA;;;ACnIF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;ADuIA;EACE;EACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AEzJN;EACE,ef0xByB;EetxBzB,Od6lCiB;;;AcxlCnB;EACE;EACA;EACA;EjBkRI,WALI;EiBzQR,adwvBiB;EcvvBjB,OdglCiB;;;Ac7kCnB;EACE;EACA;EjBwQI,WALI;;;AiB/PV;EACE;EACA;EjBkQI,WALI;;;AkB1RV;EACE,YhBkxBqB;EFpfjB,WALI;EkBrRR,OfGS;;;AgBRX;EACE;EACA;EACA;EnB4RI,WALI;EmBpRR,ajBkiBmB;EiBjiBnB,ahBkwBiB;EgBjwBjB,OhBES;EgBDT,kBhBRM;EgBSN;EACA;EACA;EfGE;EKLE,YARW;EWUX,YDMJ;;ACFI;EDhBN;ICiBQ;;;ADGN;EACE;;AAEA;EACE;;AAKJ;EACE,OhBpBO;EgBqBP,kBhB9BI;EgB+BJ,chBmlBM;EgBllBN;EVvBE,YARW;;AU2Cf;EAEE;;AAIF;EACE,OhB5CO;EgB8CP;;AAQF;EAEE,kBhB5DO;EgB+DP;;AAIF;EACE;EACA;EACA,mBjB6nBkB;EiB5nBlB,OhBjEO;EkBVT,kBlBIS;EgByEP;EACA;EACA;EACA;EACA,yBjBsYW;EiBrYX;ECtEE,YDuEF;;ACnEE;EDuDJ;ICtDM;;;ADqEN;EACE,kBjB64BwB;;;AiBp4B5B;EACE;EACA;EACA;EACA;EACA,ahBoqBiB;EgBnqBjB,OhB5FS;EgB6FT;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;;AAWJ;EACE,YjBqtBgB;EiBptBhB;EnBgKI,WALI;EI3QN;;AeoHF;EACE;EACA;EACA,mBjB6kBqB;;;AiBzkBzB;EACE,YjB4sBgB;EiB3sBhB;EnBmJI,WALI;EI3QN;;AeiIF;EACE;EACA;EACA,mBjBokBqB;;;AiB5jBvB;EACE,YjBmrBW;;AiBhrBb;EACE,YjBmrBc;;AiBhrBhB;EACE,YjBmrBc;;;AiB9qBlB;EACE,OjBorBiB;EiBnrBjB,QjBoqBa;EiBnqBb,SjB0hBoB;;AiBxhBpB;EACE;;AAGF;EACE;EfpKA;;AewKF;EfxKE;;Ae4KF;EACE,QjBupBc;;AiBrpBhB;EACE,QjBwpBc;;;AoBt1BlB;EACE;EACA;EACA;EAEA;EtByRI,WALI;EsB9QR,apB4hBmB;EoB3hBnB,anB4vBiB;EmB3vBjB,OnBJS;EmBKT,kBnBdM;EmBeN;EACA;EACA,qBpBy5BwB;EoBx5BxB,iBpBy5BoB;EoBx5BpB;ElBLE;EKLE,YARW;EWUX,YEWJ;EACA;;AFRI;EEfN;IFgBQ;;;AESN;EACE,cnBwlBM;EmBvlBN;EblBE,YARW;;AamCf;EAEE,epBgqBkB;EoB/pBlB;;AAGF;EAEE,kBnBzCO;;AmB8CT;EACE;EACA;;;AAIJ;EACE,apBypBuB;EoBxpBvB,gBpBwpBuB;EoBvpBvB,cpBwpBuB;EFpbnB,WALI;EI3QN;;;AkBiDJ;EACE,apBqpBuB;EoBppBvB,gBpBopBuB;EoBnpBvB,cpBopBuB;EFxbnB,WALI;EI3QN;;;AmBfJ;EACE;EACA,YrBi2BsB;EqBh2BtB,crBi2ByB;EqBh2BzB,erBi2ByB;;AqB/1BzB;EACE;EACA;;;AAIJ;EACE,erBu1ByB;EqBt1BzB;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE,OrBy0BuB;EqBx0BvB,QrBw0BuB;EqBv0BvB;EACA;EACA,kBpB5BM;EoB6BN;EACA;EACA;EACA,QrB40BwB;EqB30BxB;EACA;;AAGA;EnBvBE;;AmB2BF;EAEE,erBm0B6B;;AqBh0B/B;EACE,QrB0zB6B;;AqBvzB/B;EACE,cpB+jBM;EoB9jBN;EACA,YrB0pByB;;AqBvpB3B;EACE,kBpByjBM;EoBxjBN,cpBwjBM;;AoBtjBN;EAII;;AAIJ;EAII;;AAKN;EACE,kBpBoiBM;EoBniBN,cpBxEO;EoB8EL;;AAIJ;EACE;EACA;EACA,SrBiyBgC;;AqB1xBhC;EACE;EACA,SrBwxB8B;;;AqB1wBpC;EACE,crBmxB0B;;AqBjxB1B;EACE,OrB+wBgB;EqB9wBhB;EACA;EACA;EnB5GA;EgBHE,YGiHF;;AH7GE;EGuGJ;IHtGM;;;AG8GJ;EACE;;AAGF;EACE,qBrB8wB4B;EqBzwB1B;;AAKN;EACE,erByvBwB;EqBxvBxB;;AAEA;EACE;EACA;;;AAKN;EACE;EACA,crBuuB6B;;;AqBpuB/B;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SrB+kBiB;;;AsBrvBvB;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EACE,YtB08B8B;;AsBx8BhC;EACE,YtBu8B8B;;AsBn8BlC;EACE;;AAGF;EACE,OtBw7BqB;EsBv7BrB,QtBu7BqB;EsBt7BrB;EH7BF,kBlBmnBQ;EqBplBN,QtBu7BsB;EEv8BtB;EKLE,YARW;EWUX,YIsBF;EACA;;AJnBE;EIUJ;IJTM;;;AIoBJ;EHrCF,kBlBiuD8B;;AqBvrD9B;EACE,OtBi6BqB;EsBh6BrB,QtBi6BsB;EsBh6BtB;EACA,QtBg6BsB;EsB/5BtB,kBrB1CO;EqB2CP;EpBjCA;EKLE,YARW;;AemDf;EACE,OtB65BqB;EsB55BrB,QtB45BqB;EmBn9BvB,kBlBmnBQ;EqB1jBN,QtB65BsB;EEv8BtB;EKLE,YARW;EWUX,YIgDF;EACA;;AJ7CE;EIqCJ;IJpCM;;;AI8CJ;EH/DF,kBlBiuD8B;;AqB7pD9B;EACE,OtBu4BqB;EsBt4BrB,QtBu4BsB;EsBt4BtB;EACA,QtBs4BsB;EsBr4BtB,kBrBpEO;EqBqEP;EpB3DA;EKLE,YARW;;Ae6Ef;EACE;;AAEA;EACE,kBrB5EK;;AqB+EP;EACE,kBrBhFK;;;AsBXX;EACE;;AAEA;AAAA;AAAA;EAGE,QvBs+BmB;EuBr+BnB,avBs+BwB;;AuBn+B1B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELPE,YKQF;;ALJE;EKVJ;ILWM;;;AKMN;AAAA;EAEE;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,avB28B0B;EuB18B1B,gBvB28B0B;;AuBx8B5B;AAAA;EACE,avBs8B0B;EuBr8B1B,gBvBs8B0B;;AuBl8B9B;EACE,avBg8B4B;EuB/7B5B,gBvBg8B4B;;AuBz7B5B;AAAA;AAAA;AAAA;EACE,SvBy7BwB;EuBx7BxB,WvBy7B0B;;AuBp7B5B;EACE,SvBk7BwB;EuBj7BxB,WvBk7B0B;;AuB76B5B;EACE;;;ACnEN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAIF;AAAA;AAAA;EAGE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAUN;EACE;EACA;EACA;E1BmPI,WALI;E0B5OR,axB0fmB;EwBzfnB,avB0tBiB;EuBztBjB,OvBtCS;EuBuCT;EACA;EACA,kBvB/CS;EuBgDT;EtBrCE;;;AsB8CJ;AAAA;AAAA;AAAA;EAIE;E1B8NI,WALI;EI3QN;;;AsBuDJ;AAAA;AAAA;AAAA;EAIE;E1BqNI,WALI;EI3QN;;;AsBgEJ;AAAA;EAEE;;;AAYE;AAAA;AAAA;AAAA;EtB/DA;EACA;;AsBuEA;AAAA;AAAA;AAAA;EtBxEA;EACA;;AsB0FF;EACE;EtB9EA;EACA;;AsBiFF;AAAA;EtBlFE;EACA;;;AuBvBF;EACE;EACA;EACA,YzB0vBmB;EFpfjB,WALI;E2B9PN,OzBu+BqB;;;AyBp+BvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E3ByPE,WALI;E2BjPN,OAxBc;EAyBd,kBAxBiB;EvBHjB;;;AuBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,czB48BmB;EyBz8BjB,ezBixBa;EyBhxBb;EACA;EACA;EACA;;AAGF;EACE,czBi8BiB;EyBh8BjB,YAhDa;;;AAjBjB;EA0EI,ezB+vBa;EyB9vBb;;;AA3EJ;EAkFE,czB+6BmB;;AyB56BjB;EAEE,ezBu1B8B;EyBt1B9B;EACA;EACA;;AAIJ;EACE,czBk6BiB;EyBj6BjB,YA/Ea;;;AAjBjB;EAwGI;;;AAxGJ;EA+GE,czBk5BmB;;AyBh5BnB;EACE,kBzB+4BiB;;AyB54BnB;EACE,YArGa;;AAwGf;EACE,OzBu4BiB;;;AyBl4BrB;EACE;;;AAhIF;AAAA;AAAA;AAAA;AAAA;EA0IM;;;AAtHR;EACE;EACA;EACA,YzB0vBmB;EFpfjB,WALI;E2B9PN,OzBu+BqB;;;AyBp+BvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E3ByPE,WALI;E2BjPN,OAxBc;EAyBd,kBAxBiB;EvBHjB;;;AuBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,czB48BmB;EyBz8BjB,ezBixBa;EyBhxBb;EACA;EACA;EACA;;AAGF;EACE,czBi8BiB;EyBh8BjB,YAhDa;;;AAjBjB;EA0EI,ezB+vBa;EyB9vBb;;;AA3EJ;EAkFE,czB+6BmB;;AyB56BjB;EAEE,ezBu1B8B;EyBt1B9B;EACA;EACA;;AAIJ;EACE,czBk6BiB;EyBj6BjB,YA/Ea;;;AAjBjB;EAwGI;;;AAxGJ;EA+GE,czBk5BmB;;AyBh5BnB;EACE,kBzB+4BiB;;AyB54BnB;EACE,YArGa;;AAwGf;EACE,OzBu4BiB;;;AyBl4BrB;EACE;;;AAhIF;AAAA;AAAA;AAAA;AAAA;EA4IM;;;AC9IV;EAEE;EACA;EACA;E5B2RI,qBALI;E4BpRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E5B0QI,WALI;E4BnQR;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ExBjBE;EiBfF,kBOkCqB;EnBxBjB,YARW;EWUX,YQwBJ;;ARpBI;EQhBN;IRiBQ;;;AQqBN;EACE;EAEA;EACA;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;EPrDF,kBOsDuB;EACrB;EACA;EAGE;;AAMJ;EACE;EACA;EAGE;;AAMJ;EAKE;EACA;EAGA;EnB3EE,YARW;;AmBsFb;EAGI;;AAON;EAGE;EACA;EACA;EAEA;EACA;EnBhGE,YARW;;;AmBmHf;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AD8FA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADgFF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,iBzByfgB;;AyBpfhB;EAEE,iBzBsfoB;;AyBnftB;EACE;;AAGF;EACE;;;AAUJ;ECjHE;EACA;E7B8MI,qBALI;E6BvMR;;;ADuHF;EC1HE;EACA;E7B8MI,qBALI;E6BvMR;;;ACvFF;EVgBM,YUfJ;;AVmBI;EUpBN;IVqBQ;;;AUlBN;EACE;;;AAMF;EACE;;;AAIJ;EACE;EACA;EVDI,YUEJ;;AVEI;EULN;IVMQ;;;AUDN;EACE;EACA;EVNE,YUOF;;AVHE;EUAJ;IVCM;;;;AWpBR;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;EACE;;ACmBE;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;EAhCJ;EACA;EACA;EACA;;AAqDE;EACE;;;ADzCN;EAEE;EACA;EACA;EACA;EACA;E/B2QI,0BALI;E+BpQR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;E/B8OI,WALI;E+BvOR;EACA;EACA;EACA;EACA;EACA;E3BzCE;EKLE,YARW;;AsB0Df;EACE;EACA;EACA;;;AAuBA;EACE;;AAEA;EACE;EACA;;;AAIJ;EACE;;AAEA;EACE;EACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AAUN;EACE;EACA;EACA;EACA;;ACxFA;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;EAzBJ;EACA;EACA;EACA;;AA8CE;EACE;;;ADoEJ;EACE;EACA;EACA;EACA;EACA;;ACtGA;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;EAlBJ;EACA;EACA;EACA;;AAuCE;EACE;;AD8EF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;;ACvHA;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;;AAWA;EACE;;AAGF;EACE;EACA,c9B4cQ;E8B3cR,gB9B0ce;E8Bzcf;EA9BN;EACA;EACA;;AAiCE;EACE;;AD+FF;EACE;;;AAMN;EACE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA,a7B2XmB;E6B1XnB;EACA;EAEA;EACA;EACA;;AAEA;EAEE;EVvLF,kBUyLuB;;AAGvB;EAEE;EACA;EV/LF,kBUgMuB;;AAGvB;EAEE;EACA;EACA;;;AAMJ;EACE;;;AAIF;EACE;EACA;EACA;E/B0EI,WALI;E+BnER;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AEnPF;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;EACA;;AAKF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;E7BhBI;;A6BoBF;AAAA;EAEE;;AAIF;AAAA;AAAA;E7BXE;EACA;;A6BoBF;AAAA;AAAA;E7BPE;EACA;;;A6B4BJ;EACE;EACA;;AAEA;EAGE;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAKF;ExB1FM,YARW;;AwBsGf;ExB9FI,YARW;;;AwB+GjB;EACE;EACA;EACA;;AAEA;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAIF;AAAA;E7B5FE;EACA;;A6BgGF;AAAA;E7B/GE;EACA;;;A8BvBJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;ElC0QI,WALI;EkCnQR;EACA;EdZI,YccJ;;AdVI;EcGN;IdFQ;;;AcWN;EAEE;;AAKF;EACE;EACA;EACA;;;AAQJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;EAGA;EACA;E9BzCA;EACA;;A8B2CA;EAGE;EACA;;AAGF;EAEE;EACA;EACA;;AAIJ;AAAA;EAEE;EACA;EACA;;AAGF;EAEE;E9BpEA;EACA;;;A8B+EJ;EAEE;EACA;EACA;;AAGA;EACE;EACA;E9BjGA;;A8BoGA;EACE;EACA;EACA;;AAIJ;AAAA;EAEE;Eb5HF,kBa6HuB;;;AASvB;AAAA;EAEE;EACA;;;AAKF;AAAA;EAEE;EACA;EACA;;;AAMF;AAAA;EACE;;;AASF;EACE;;AAEF;EACE;;;ACrKJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAmBJ;EACE;EACA;EACA;EnCiOI,WALI;EmC1NR;EAEA;;AAEA;EAEE;;;AASJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;;AAGF;EACE;;;AAQJ;EACE,ajCq7BmB;EiCp7BnB,gBjCo7BmB;EiCn7BnB;;AAEA;AAAA;AAAA;EAGE;;;AAYJ;EACE;EACA;EAGA;;;AAIF;EACE;EnCmJI,WALI;EmC5IR;EACA;EACA;EACA;E/BlIE;EgBHE,YeuIJ;;AfnII;Ee2HN;If1HQ;;;AeoIN;EACE;;AAGF;EACE;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AvBhHE;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AAtDR;EAEI;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E1B1NJ,YARW;EWUX,Ye0NI;;AAGA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAiBZ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC3QF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EhCdE;EKLE,YARW;;A2B+Bf;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EhCpBF;EACA;;AgCuBA;EACE;EhCXF;EACA;;AgCiBF;AAAA;EAEE;;;AAIJ;EAGE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EAGA;;;AAGF;EACE;;;AAQA;EACE;;;AAQJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EhC1FE;;;AgCiGJ;EACE;EACA;EACA;EACA;;AAEA;EhCvGE;;;AgCkHJ;EACE;EAGA;EAGA;EAGA;;AAEA;EACE;EACA;;;AAIJ;EACE;EAGA;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EhCpJE;;;AgCwJJ;AAAA;AAAA;EAGE;;;AAGF;AAAA;EhCtJI;EACA;;;AgC0JJ;AAAA;EhC7II;EACA;;;AgCwJF;EACE;;AxBhIA;EwB4HJ;IAQI;IACA;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;IhCrLJ;IACA;;EgCuLM;AAAA;IAGE;;EAEF;AAAA;IAGE;;EAIJ;IhCtLJ;IACA;;EgCwLM;AAAA;IAGE;;EAEF;AAAA;IAGE;;;;ACjPZ;EAEE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ErCmRI,WALI;EqC5QR;EACA;EjCAE;;;AiCMF;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAOJ;EACE;;;ACxCJ;EAEE;EACA;EtCgSI,4BALI;EsCzRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EhCpBA;EACA;;;AgCuBF;EACE;EACA;EACA;EtCoQI,WALI;EsC7PR;EAEA;EACA;ElBpBI,YkBqBJ;;AlBjBI;EkBQN;IlBPQ;;;AkBkBN;EACE;EACA;EAEA;EACA;;AAGF;EACE;EACA;EACA;EACA,SpCooCuB;EoCnoCvB;;AAGF;EAEE;EACA;EjBtDF,kBiBuDuB;EACrB;;AAGF;EAEE;EACA;EACA;EACA;;;AAKF;EACE,apCumCsB;;AoClmCpB;ElC/BF;EACA;;AkCoCE;ElCnDF;EACA;;;AkCkEJ;ECjGE;EACA;EvC8RI,4BALI;EuCvRR;;;ADuGF;EC1GE;EACA;EvC8RI,4BALI;EuCvRR;;;ACFF;EAEE;EACA;ExC2RI,uBALI;EwCpRR;EACA;EACA;EAGA;EACA;ExCmRI,WALI;EwC5QR;EACA;EACA;EACA;EACA;EACA;EpCJE;;AoCSF;EACE;;;AAKJ;EACE;EACA;;;AChCF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;ErCFE;;;AqCOJ;EAEE;;;AAIF;EACE,avC6gBiB;;;AuCtgBnB;EACE,evCk4C4B;;AuC/3C5B;EACE;EACA;EACA;EACA;EACA;;;AAeF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ACPJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;E3C+PI,WALI;E2CxPR;EACA;EACA;EACA;EvCtBE;EuCwBF;EvB3BI,YuB4BJ;;AvBxBI;EuBWN;IvBVQ;;;AuByBN;EACE;EACA;EACA;;AAGA;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EvBnDE,YuBoDF;;AvBhDE;EuBuCJ;IvBtCM;;;AuBkDN;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EvCjEE;EACA;;AuCmEA;EvCpEA;EACA;;AuCwEF;EACE;;AAIF;EvChEE;EACA;;AuCmEE;EvCpEF;EACA;;AuCwEA;EvCzEA;EACA;;;AuC8EJ;EACE;;;AAQA;EACE;;AAGF;EACE;EACA;EvCpHA;;AuCuHA;EACE;;AAEF;EACE;;AAIA;EvC/HF;;;AwCfF;EACE;IACE,uBzCqtDY;;;AyC/sDlB;EAEE;E5CqRI,0BALI;E4C9QR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E5CyQI,WALI;E4ClQR;ExCTE;EKLE,YARW;;;AmC2BjB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ExBzBI,YwB0BJ;;AxBtBI;EwBaN;IxBZQ;;;;AwBwBR;EvBuBE;EuBrBA;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;ACxDR;EACE;EACA;EACA;EACA;EACA;EACA,S1C07CwB;;A0Cx7CxB;EACE;EACA;;;AAKJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKA;EACE;;;AAIJ;EACE;IACE,S1C65CsB;;;A0Cz5C1B;EACE;EAMA;EACA;;;AAGF;EACE;IACE;;;ACjDJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;E1CXE;;;A0CeJ;EACE;EACA;;AAEA;EAEE;EACA;;;AASJ;EACE;EACA;EACA;;AAGA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAQJ;EACE;EACA;EACA;EACA;EAEA;EACA;;AAEA;E1CxDE;EACA;;A0C2DF;E1C9CE;EACA;;A0CiDF;EAEE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;AAEA;EACE;EAGA;;;AAaF;EACE;;AAGE;E1C1DJ;EAZA;;A0C2EI;E1C3EJ;EAYA;;A0CoEI;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AAaZ;E1CnJI;;A0CsJF;EACE;;AAEA;EACE;;;ACzKJ;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODuL2B;ECtL3B,kBDmLsB;;AChLpB;EAEE,ODiLuB;EChLvB;;AAGF;EACE,O5CXA;E4CYA,kBD2KuB;EC1KvB,cD0KuB;;;ACxL7B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;AErL7B;EACE;EACA,O9C2iDgB;E8C1iDhB,Q9C0iDgB;E8CziDhB;EACA,O7CMM;E6CLN;EACA;E5COE;E4CLF,S9C2iDkB;;A8CxiDlB;EACE,O7CFI;E6CGJ;EACA,S9CsiDsB;;A8CniDxB;EACE;EACA,Y9C2rByB;E8C1rBzB,S9CiiDsB;;A8C9hDxB;EAEE;EACA;EACA,S9C2hDyB;;;A8CvhD7B;EACE,Q9CuhDuB;;;A+C7jDzB;EAEE;EACA;EACA;EACA;EACA;EjD6RI,uBALI;EiDtRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EjD+QI,WALI;EiDxQR;EACA;EACA;EACA;EACA;EACA;E7CRE;;A6CWF;EACE;;AAGF;EACE;;;AAIJ;EACE;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E7CjCE;EACA;;A6CsCF;EACE;EAGA;;;AAIJ;EACE;EACA;;;ACpEF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;;AAOF;EACE;EACA;EACA;EAEA;;AAGA;E9B3CI,Y8B4CF;EACA,WhD01CmB;;AkBn4CjB;E8BuCJ;I9BtCM;;;A8B0CN;EACE,WhDw1CmB;;AgDp1CrB;EACE,WhDq1CoB;;;AgDj1CxB;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;E9CpFE;EKLE,YARW;EyCqGf;;;AAIF;EAEE;EACA;EACA;ECjHA;EACA;EACA;EACA,SDkHE;ECjHF;EACA;EACA,kBDgHE;;AC7GF;EACE;;AAEF;EACE,SD0GA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;E9C1GE;EACA;;A8C6GF;EACE;EAEA;;;AAOJ;EACE;EACA;;;AAKF;EACE;EAGA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E9ClIE;EACA;;A8CwIF;EACE;;;AtChHA;EsCwHF;IACE;IACA;;EAIF;IACE;IACA;IACA;;EAGF;IACE;;;AtCrIA;EsC0IF;AAAA;IAEE;;;AtC5IA;EsCiJF;IACE;;;AAUA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;E9CpNJ;;A8CwNE;AAAA;E9CxNF;;A8C6NE;EACE;;;AtCjKJ;EsC+IA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I9CpNJ;;E8CwNE;AAAA;I9CxNF;;E8C6NE;IACE;;;AtCjKJ;EsC+IA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I9CpNJ;;E8CwNE;AAAA;I9CxNF;;E8C6NE;IACE;;;AtCjKJ;EsC+IA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I9CpNJ;;E8CwNE;AAAA;I9CxNF;;E8C6NE;IACE;;;AtCjKJ;EsC+IA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I9CpNJ;;E8CwNE;AAAA;I9CxNF;;E8C6NE;IACE;;;AtCjKJ;EsC+IA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I9CpNJ;;E8CwNE;AAAA;I9CxNF;;E8C6NE;IACE;;;AEjPR;EAEE;EACA;EpDgSI,yBALI;EoDzRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EpDuRI,gCALI;EoDhRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;ECzBA,alDuwBiB;EkDrwBjB;EACA,anDwiBmB;EmDviBnB,alDwwBiB;EkDvwBjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ErDoRI,WALI;EoD9PR;EACA;EACA;EACA;EhDhBE;EKLE,YARW;;A2CiCf;EACE;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;;AAIA;EAEE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAEE;EACE;EAGA;EACA;;AAEA;EAEE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAGE;EACE;;AAIA;EAEE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAIJ;AAEE;EACE;EAGA;EACA;;AAEA;EAEE;;AAIF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAkBA;EACE;EACA;EpDiGI,WALI;EoD1FR;EACA;EACA;EhD3KE;EACA;;AgD6KF;EACE;;;AAIJ;EACE;EACA;;;AEnMF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;ACtBA;EACE;EACA;EACA;;;ADuBJ;EACE;EACA;EACA;EACA;EACA;EACA;ElClBI,YkCmBJ;;AlCfI;EkCQN;IlCPQ;;;;AkCiBR;AAAA;AAAA;EAGE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAGF;AAOE;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EAGE;EACA;;AAGF;AAAA;EAEE;EACA;ElC9DE,YkC+DF;;AlC3DE;EkCuDJ;AAAA;IlCtDM;;;;AkCkER;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA,OpD85CuB;EoD75CvB;EACA,OnD9FM;EmD+FN;EACA;EACA;EACA,SpDy5CyB;EkBh/CrB,YkCwFJ;;AlCpFI;EkCmEN;AAAA;IlClEQ;;;AkCsFN;AAAA;AAAA;EAEE,OnDxGI;EmDyGJ;EACA;EACA,SpDi5C6B;;;AoD94CjC;EACE;;;AAOF;EACE;;;AASF;AAAA;EAEE;EACA,OpD04C4B;EoDz4C5B,QpDy4C4B;EoDx4C5B;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;;;AAEF;EACE;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,cpDk1CuB;EoDj1CvB;EACA,apDg1CuB;EoD/0CvB;;AAEA;EACE;EACA;EACA,OpD+0CuB;EoD90CvB,QpD+0CwB;EoD90CxB;EACA,cpD+0CwB;EoD90CxB,apD80CwB;EoD70CxB;EACA;EACA,kBnDvLI;EmDwLJ;EACA;EAEA;EACA;EACA,SpDs0CyB;EkBx/CvB,YkCmLF;;AlC/KE;EkC8JJ;IlC7JM;;;AkCiLN;EACE,SpDm0CgC;;;AoD3zCpC;EACE;EACA;EACA,QpD8zCwB;EoD7zCxB;EACA,apD2zC2B;EoD1zC3B,gBpD0zC2B;EoDzzC3B,OnDjNM;EmDkNN;;;AAMA;AAAA;EAEE,QpD+zCgC;;AoD5zClC;EACE,kBnDnNI;;AmDsNN;EACE,OnDvNI;;;AqDZR;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;;;AAKF;EACE;IACE;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAGF;EAEE;EACA;EACA;;;AASF;EACE;IACE;;EAEF;IACE;IACA;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;AAAA;IAEE;;;AClFN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;A7CmEE;E6ClDF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IhD5BA,YARW;IWUX,YqC4BA;;;ArCxBA;EqCUJ;IrCTM;;;AR2DJ;E6ClCE;IACE;IACA;IACA;IACA;IAEA;;;A7C4BJ;E6CzBE;IACE;IACA;IACA;IACA;IAEA;;;A7CmBJ;E6ChBE;IACE;IACA;IACA;IACA;IACA;IACA;IAEA;;;A7CQJ;E6CLE;IACE;IACA;IACA;IACA;IACA;IAEA;;;A7CFJ;E6CKE;IAEE;;;A7CPJ;E6CUE;IAGE;;;A7C1BJ;E6CrCF;IAqEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A7CjCN;E6ClDF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IhD5BA,YARW;IWUX,YqC4BA;;;ArCxBA;EqCUJ;IrCTM;;;AR2DJ;E6ClCE;IACE;IACA;IACA;IACA;IAEA;;;A7C4BJ;E6CzBE;IACE;IACA;IACA;IACA;IAEA;;;A7CmBJ;E6ChBE;IACE;IACA;IACA;IACA;IACA;IACA;IAEA;;;A7CQJ;E6CLE;IACE;IACA;IACA;IACA;IACA;IAEA;;;A7CFJ;E6CKE;IAEE;;;A7CPJ;E6CUE;IAGE;;;A7C1BJ;E6CrCF;IAqEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A7CjCN;E6ClDF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IhD5BA,YARW;IWUX,YqC4BA;;;ArCxBA;EqCUJ;IrCTM;;;AR2DJ;E6ClCE;IACE;IACA;IACA;IACA;IAEA;;;A7C4BJ;E6CzBE;IACE;IACA;IACA;IACA;IAEA;;;A7CmBJ;E6ChBE;IACE;IACA;IACA;IACA;IACA;IACA;IAEA;;;A7CQJ;E6CLE;IACE;IACA;IACA;IACA;IACA;IAEA;;;A7CFJ;E6CKE;IAEE;;;A7CPJ;E6CUE;IAGE;;;A7C1BJ;E6CrCF;IAqEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A7CjCN;E6ClDF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IhD5BA,YARW;IWUX,YqC4BA;;;ArCxBA;EqCUJ;IrCTM;;;AR2DJ;E6ClCE;IACE;IACA;IACA;IACA;IAEA;;;A7C4BJ;E6CzBE;IACE;IACA;IACA;IACA;IAEA;;;A7CmBJ;E6ChBE;IACE;IACA;IACA;IACA;IACA;IACA;IAEA;;;A7CQJ;E6CLE;IACE;IACA;IACA;IACA;IACA;IAEA;;;A7CFJ;E6CKE;IAEE;;;A7CPJ;E6CUE;IAGE;;;A7C1BJ;E6CrCF;IAqEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A7CjCN;E6ClDF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IhD5BA,YARW;IWUX,YqC4BA;;;ArCxBA;EqCUJ;IrCTM;;;AR2DJ;E6ClCE;IACE;IACA;IACA;IACA;IAEA;;;A7C4BJ;E6CzBE;IACE;IACA;IACA;IACA;IAEA;;;A7CmBJ;E6ChBE;IACE;IACA;IACA;IACA;IACA;IACA;IAEA;;;A7CQJ;E6CLE;IACE;IACA;IACA;IACA;IACA;IAEA;;;A7CFJ;E6CKE;IAEE;;;A7CPJ;E6CUE;IAGE;;;A7C1BJ;E6CrCF;IAqEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;AAnFR;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EhD5BA,YARW;EWUX,YqC4BA;;ArCxBA;EqCUJ;IrCTM;;;AqCyBF;EACE;EACA;EACA;EACA;EAEA;;AAGF;EACE;EACA;EACA;EACA;EAEA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;;AAGF;EACE;EACA;EACA;EACA;EACA;EAEA;;AAGF;EAEE;;AAGF;EAGE;;;AA2BR;ENtHE;EACA;EACA;EACA,SjDuhC0B;EiDthC1B;EACA;EACA,kBhDQM;;AgDLN;EACE;;AAEF;EACE,SjDu3CqB;;;AuDtwCzB;EACE;EACA;EACA;EACA;;AAEA;EACE;EAEA;EACA;EACA;;;AAIJ;EACE;EACA,atD4nBiB;;;AsDznBnB;EACE;EACA;EACA;;;ACtJF;EAEE;EACA;EACA;EACA;EACA;E1D4RI,yBALI;E0DrRR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ELnBA,alDuwBiB;EkDrwBjB;EACA,anDwiBmB;EmDviBnB,alDwwBiB;EkDvwBjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ErDoRI,WALI;E0DnQR;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKN;EACE;;AAEA;EACE;EACA;EAEA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EAEA;;;AAIJ;AAEA;EACE;;AAEA;EACE;EACA;EAEA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EAEA;;;AAIJ;AAkBA;EACE;EACA;EACA;EACA;EACA;EtDxGE;;;AmDjBF;EACE;EACA;EACA;;;AIAF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;ACNF;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;ACLR;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACrBJ;EACE;EACA;EACA;EACA;EACA,S5DohCa;;;A4DjhCf;EACE;EACA;EACA;EACA;EACA,S5D4gCa;;;A4DpgCX;EACE;EACA;EACA,S5DggCU;;;A4D7/BZ;EACE;EACA;EACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;A6DzhChB;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACRF;AAAA;ECIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACXA;EACE;EACA;EACA;EACA;EACA;EACA,ShEoZqB;EgEnZrB;;;ACRJ;ECAE;EACA;EACA;;;ACNF;EACE;EACA;EACA;EACA;EACA;EACA,SnEwnBW;;;AoEviBb;AACA;EACE;;;AAGF;AACA;EACE;EAEA;;;AAGF;AACA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAEF;EACE;;;AAwFA;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACpII;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;E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IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IA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EF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAGE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAGE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAE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E4EyNA;;AAIF;EACE,c5E9NA;E4E+NA;;AAIF;EACE,O5E85BuB;;A4E55BzB;EAGE,kB5E05BkB;;;A6EpoCtB;EACE;;;AAKN;EACE,Y7EqxCuB;;;A6ElxCzB;EACE,c7EwmBQ;E6EvmBR;EACA,Y7EixCoC;;;A8E9xCtC;EACE;;;AAGF;EACE;EACA,O9EkoC0B;E8EjoC1B,Q9EioC0B;E8EhoC1B,kB9EPM;E8EQN;;AAEA;EACE;EACA;EACA,Y9EgoCiC;E8E/nCjC,e9EgoCoC;E8E/nCpC,O9EgoC4B;E8E/nC5B,Q9E+nC4B;E8E9nC5B;EACA;EACA;EACA,W9E6nCgC;;A8E1nClC;EACE;;AAEA;EACE,S9EwnCkC;E8EvnClC,Y9EwnCqC;;A8EpnCzC;EACE;EACA,c9EymC4B;E8ExmC5B,Y9EonCgC;;A8ElnChC;EACE,S9EmnCkC;E8ElnClC,Y9E6mCqC;E8E5mCrC,W9EmnCoC;E8ElnCpC,Y9EmnCqC;;A8E/mCzC;EACE,c9EokBM;;A8ElkBN;EACE,S9E8mCoC;;A8E3mCtC;EACE;EACA;;AAGF;EACE,c9EwjBI;;A8EtjBJ;EACE,Y9EomC2C;E8EnmC3C,W9E6lCkC;E8E5lClC,Y9E6lCmC;;A8EtlCrC;EACE,Y9E6mCiD;;A8ExmCvD;EACE,e9EwlCsC;E8EvlCtC;EACA;;AAGE;EACE;EACA;EACA,O9EilCsC;E8EhlCtC,Q9EglCsC;E8E/kCtC;EACA;EACA;EACA,kB9E1FA;;A8E8FJ;EACE;EACA,kB9EkhBI;;A8EhhBJ;EACE;EACA;EACA,c9EwkC+C;E8EvkC/C,c9EtGA;E8EuGA,O9EwkCwC;E8EvkCxC,Q9EwkCyC;E8EvkCzC;EACA;EACA;EACA,a9EqkC8C;E8EpkC9C,Y9EqkC6C;E8EpkC7C;;AAGF;EACE,kB9EggBE;;A8E5fN;EACE,c9E2fI;;A8EvfR;EACE,e9EokCmC;E8EnkCnC,O9EokC2B;E8EnkC3B,Q9EmkC2B;E8ElkC3B;EACA;;AAEA;EACE,O9EikCgC;E8EhkChC,Q9EgkCgC;;A8E7jClC;EACE;EACA;EACA,O9E0jCgC;E8EzjChC,Q9EyjCgC;E8ExjChC;EACA;EACA,e9EkjCiC;E8EjjCjC,kB9E/IE;;A8EkJJ;EACE;EACA,kB9EpJE;;A8EsJF;EACE,e9EyiC+B;E8ExiC/B,O9EsjCqC;E8ErjCrC,Q9EqjCqC;E8EpjCrC,c9EwdE;E8EvdF,kB9EudE;E8EtdF,Y9EwjC0C;E8EvjC1C;EACA;EACA;EACA;;AAGF;EACE,kB9EpKA;;;A8E0KR;EACE;;AACA;EACE;;;AASF;EACE;EACA;EACA,e9E+hCyC;E8E9hCzC,O9E+hCiC;E8E9hCjC,Q9E+hCkC;E8E9hClC,kB9E+hC4C;E8E9hC5C;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA,e9E0hC6C;E8EzhC7C,O9E0hCqC;E8EzhCrC,Q9EyhCqC;E8ExhCrC,kB9ExME;E8EyMF,Y9E0hC0C;E8EzhC1C,Y9EufS;E8EtfT,Y9E0hC0C;;A8EvhC5C;EACE;;AAEA;EACE,Y9EqhC+C;E8EphC/C,W9EqhC8C;E8EphC9C,Y9EqhC+C;;A8ElhCjD;EACE,e9EugC2C;E8EtgC3C,O9EmhCyC;E8ElhCzC,Q9EkhCyC;;A8E9gC7C;EACE;;AAEA;EACE;;AAEA;EACE,a9E0gCsD;E8EzgCtD,Y9E0gCqD;E8EzgCrD,W9E0gCoD;E8EzgCpD,Y9E0gCqD;;A8EtgCzD;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA,e9EggC0D;E8E//B1D,O9EggCkD;E8E//BlD,Q9EggCmD;E8E//BnD,kB9E2XA;E8E1XA,Y9EggCuD;E8E//BvD,a9EggCwD;E8E//BxD,Y9EggCuD;E8E//BvD,Y9EigCuD;;;A+E/vC7D;EACE;;AAIF;EACE;;;ACJN;EACE;;AAEA;EACE,YhF+xCiB;EgF9xCjB,QhF8xCiB;EgF7xCjB,ahF+xCoB;EgF9xCpB,gBhF8xCoB;EgF7xCpB,YhF8xCqB;;AgF5xCrB;EACE,YhF2xCmB;EgF1xCnB,chFumBI;EgFtmBJ;EACA,YhF4xCyB;;;AgFvxC/B;EACE;EACA,ahFuxC2B;EgFtxC3B,gBhFsxC2B;;AgFrxC3B;EACE;EACA;;AAEF;EACE;;;AAKF;EACE,QhF4wCoB;EgF3wCpB,WhF4wC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EACA;;AAGF;EACE;EACA;;AAGF;EACE;;;ACzCJ;EACE;EACA;EAEA;;AAEA;EACE,anFiwBiB;;AmF9vBnB;EACE,apF6hBiB;;AoF1hBnB;EACE,qBnF4zB0B;;;Aa70B5B;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AsEQF;EACE,YnFgzBqB;;AmF9yBvB;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;ACvCF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EnFFE;EmFIF;;AAEA;EAIE;;AAGF;EAGE;;AAGF;EAKE;;AAEA;EACE;;AAIJ;EAGE;;;AAQJ;EAEE;EACA;EACA;EACA;EACA;EAGA;EAEA;EACA;EACA;;AAEA;EAIE;;AAGF;EAGE;;AAGF;EAKE;;AAEA;EACE;;AAIJ;EAGE;;AAGF;ECrDA;EACA;EACA;ExF2OI,qBALI;EwFpOR;;AD2DA;EC/DA;EACA;EACA;ExF2OI,qBALI;EwFpOR;;;AD2EF;EACE;;AAEA;EAIE;;AAGF;EAGE;;AAGF;EAKE;;AAEA;EACE;;AAIJ;EAGE;;;AAOF;EC1JA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AD+JE;EAIE;;AAKF;EAGE;EAGA;;AAMF;EAKE;;A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ACE;EACA;;AAIJ;EAGE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA,iBpFwUgB;EoFvUhB;;AAEA;EAIE,iBpFqUoB;EoFpUpB;;AAGF;EAGE;EACA;;AAGF;EAKE;EACA;;AAEA;EACE;EACA;;AAIJ;EAGE;;;AAQJ;EC5VE;EACA;EACA;ExFqPI,qBALI;EwF9OR;;;ADkWF;ECtWE;EACA;EACA;ExFqPI,qBALI;EwF9OR;;;ADgXF;EACE;EAEA;;;AAOF;AAAA;EAEE;EAEA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;;AAGF;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;AAIJ;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;;AAIA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;AAKF;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;;AAEA;EACE;;AAMR;EACE;;;AAQJ;EACE;EAEA;EACA;;AAGA;EACE;;;AE5lBJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AC1BF;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAKF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAKN;EACE;EACA;EAEA;AACA;EACA;EACA;;;AAIJ;EACE;EACA;EAEA;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EAEE;EACA;;;AAKF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;AAIJ;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EAEA;EAEA;;;AAIA;AAAA;AAAA;EAGE;;;AC7IJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE;;AAGF;AAAA;AAAA;EAEE;;AAEA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;EAGE;EACA;;AAGF;AAAA;EACE;;AAEA;AAAA;AAAA;AAAA;AAAA;EAIE;;AAGF;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;EAGE;;AAIJ;AAAA;EACE;;AAKA;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;;AAKN;AAAA;AAAA;EAGE;EAEA;;;AC1FF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;;AAIJ;AAAA;EAEE;EACA;;;AAQJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EAEA;EACA;;;AAQA;AAAA;EACE;;;AC5FN;EACE;EACA;EACA;EAEA;EACA;;;AAGF;EACE;;AAEA;EACE;;;AAIJ;AAAA;EAEE;;;AAGF;EACE;EACA;;AACA;EACE;;;AAIJ;EACE;;;AAKA;EACE;;;AAKF;EACE;;;AC3CJ;EACE;;AAEA;EACE;EACA;;AAIA;EACE;EAEA;;AAEF;EACE;EAEA;;;AAKN;EACE;EACA;EAEA;;;AAKA;EACE;EACA;;;AAIJ;EACE;EACA;EAEA;;;AAIF;EACE;EACA;;;AC9CA;EAEE;EACA;EACA;EACA;EAGA;EACA;;AAGE;EACE;EACA;;AAEA;EAEE;;AAKF;EACE;;;ACzBV;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;EACA;;;AAMA;EACE;;AAKF;EACE;EACA;;AAKF;EACE;EACA;;;AAYA;EACE;;AAKF;EACE;;AAKN;EACE;EACA;EACA;;AAIA;EACE;EACA;;AAKF;EACE;EACA;;;ACzFN;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKJ;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;;AAKA;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AC7CN;EACE;;;AAGF;EACE;;;AAGF;EACE;EAEA;EACA;;;AAGF;EACE;;;AAIA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AChCR;EACE;EACA;;;ACAF;EACE;;;AAGF;EACE;;AAGA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEF;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEF;EACE;;;AAKN;EACE;;AACA;EACE;;;AAKF;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AC1DJ;EACE;;;ACHJ;EAEE;EAGA;EACA;;;ACNF;EAEE;EACA;EACA;EACA;EAGA;;AAEA;EACE;;;AAIJ;EACE;;AAEA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AC9CN;EACE;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;;;ACXF;EAEE;;AAGA;EACE;;;AAIJ;EACE;;;ACXE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;;AAGF;EA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GA;EACE;;;AAOJ;EACE;;;AAQF;AAAA;AAAA;AAAA;EAIE;;AAGE;AAAA;AAAA;AAAA;EACE;;;AAON;EACE;EACA;;;AAKF;EACE;;;AAUF;EACE;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA,ehHwIqB;EiHvVf;EDkNN;;ACpXE;ED6WJ;ICpMQ;;;AD6MN;EACE;;;AAOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;;;AASF;EACE;EACA;;;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;EACE;;;AAKF;EACE;;;AAMF;EACE;;;AAMF;EACE;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAQF;EACE;;;AAQF;EACE;;;AG/kBF;EFyQM,WALI;EElQR,anHukBiB;;;AmHlkBjB;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AEvPR;ECrDE;EACA;;;ADyDF;EC1DE;EACA;;;AD4DF;EACE;;AAEA;EACE,cnHikBkB;;;AmHvjBtB;EFsNM,WALI;EE/MR;;;AAIF;EACE,enH+RO;EiHhFH,WALI;;AEvMR;EACE;;;AAIJ;EACE;EACA,enHqRO;EiHhFH,WALI;EE9LR,OlHtFS;;AkHwFT;EACE;;;AE9FJ;ECIE;EAGA;;;ADDF;EACE,SrH88CkB;EqH78ClB,kBpHVM;EoHWN;EHGE;EKLE,YARW;EDKf;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EJ+PM,WALI;EIxPR,OpH5BS;;;AuHNT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECHA;EACA;EACA;EACA;EACA;;;ACwDE;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A2H1brB;ECAA;EACA;EACA;EACA;EACA;EACA;EACA;;ADHE;ECYF;EACA;EACA;EACA;EACA;EACA;;;AA+CI;EACE;;;AAGF;EApCJ;EACA;;;AAcA;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AAqCE;EAtDJ;EACA;;;AA2DQ;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AA6EQ;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AA8DU;EA9DV;;;AAyEM;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AF/DN;EE+BE;IAtDJ;IACA;;EA2DQ;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EA6EQ;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EAyEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF/DN;EE+BE;IAtDJ;IACA;;EA2DQ;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EA6EQ;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EAyEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF/DN;EE+BE;IAtDJ;IACA;;EA2DQ;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EA6EQ;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EAyEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF/DN;EE+BE;IAtDJ;IACA;;EA2DQ;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EA6EQ;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EAyEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF/DN;EE+BE;IAtDJ;IACA;;EA2DQ;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EAqEM;IAtEN;IACA;;EA6EQ;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EA8DU;IA9DV;;EAyEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AC1HV;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,e7HsWO;E6HrWP,O5H0zBY;E4HzzBZ,gB7HqoB0B;E6HpoB1B,c7H0pBmB;;A6HnpBnB;EACE;EACA;EACA,qB7H+bW;E6H9bX;;AAGF;EACE;;AAGF;EACE;;AAIF;EACE,qB5HqyB0B;;;A4H5xB9B;EACE;;;AAUA;EACE;;;AAeF;EACE;;AAGA;EACE;;;AAOJ;EACE;;;AASF;EACE;EACA;;;AAQJ;EACE;EACA;;;AAQA;EACE;EACA;;;ACxHF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;AAfF;EAME;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,OAbQ;EAcR;;;ADgIA;EACE;EACA;;;AHvEF;EGqEA;IACE;IACA;;;AHvEF;EGqEA;IACE;IACA;;;AHvEF;EGqEA;IACE;IACA;;;AHvEF;EGqEA;IACE;IACA;;;AHvEF;EGqEA;IACE;IACA;;;AE/IN;EACE,e/H0xByB;E+HtxBzB,O9H6lCiB;;;A8HxlCnB;EACE;EACA;EACA;EdoRI,WALI;Ec3QR,a9HwvBiB;E8HvvBjB,O9HglCiB;;;A8H7kCnB;EACE;EACA;Ed0QI,WALI;;;AcjQV;EACE;EACA;EdoQI,WALI;;;Ae5RV;EACE,YhIkxBqB;EiHlfjB,WALI;EevRR,O/HGS;;;AgIRX;EACE;EACA;EACA;EhB8RI,WALI;EgBtRR,ajIkiBmB;EiIjiBnB,ahIkwBiB;EgIjwBjB,OhIES;EgIDT,kBhIRM;EgISN;EACA;EACA;EfGE;EKLE,YARW;EWUX,YDMJ;;ACFI;EDhBN;ICiBQ;;;ADGN;EACE;;AAEA;EACE;;AAKJ;EACE,OhIpBO;EgIqBP,kBhI9BI;EgI+BJ,chImlBM;EgIllBN;EVvBE,YARW;;AU2Cf;EAEE;;AAIF;EACE,OhI5CO;EgI8CP;;AAQF;EAEE,kBhI5DO;EgI+DP;;AAIF;EACE;EACA;EACA,mBjI6nBkB;EiI5nBlB,OhIjEO;EkIVT,kBlIIS;EgIyEP;EACA;EACA;EACA;EACA,yBjIsYW;EiIrYX;ECtEE,YDuEF;;ACnEE;EDuDJ;ICtDM;;;ADqEN;EACE,kBjI64BwB;;AiI14B1B;EACE;EACA;EACA,mBjI0mBkB;EiIzmBlB,OhIpFO;EkIVT,kBlIIS;EgI4FP;EACA;EACA;EACA;EACA,yBjImXW;EiIlXX;ECzFE,YD0FF;;ACtFE;ED0EJ;ICzEM;;;ADwFN;EACE,kBjI03BwB;;;AiIj3B5B;EACE;EACA;EACA;EACA;EACA,ahIipBiB;EgIhpBjB,OhI/GS;EgIgHT;EACA;EACA;;AAEA;EAEE;EACA;;;AAWJ;EACE,YjIssBgB;EiIrsBhB;EhBmJI,WALI;EC7QN;;AemIF;EACE;EACA;EACA,mBjI8jBqB;;AiI3jBvB;EACE;EACA;EACA,mBjIwjBqB;;;AiIpjBzB;EACE,YjIurBgB;EiItrBhB;EhBgII,WALI;EC7QN;;AesJF;EACE;EACA;EACA,mBjI+iBqB;;AiI5iBvB;EACE;EACA;EACA,mBjIyiBqB;;;AiIjiBvB;EACE,YjIwpBW;;AiIrpBb;EACE,YjIwpBc;;AiIrpBhB;EACE,YjIwpBc;;;AiInpBlB;EACE;EACA;EACA,SjI+foB;;AiI7fpB;EACE;;AAGF;EACE;Ef/LA;;AemMF;EACE;EfpMA;;;AkBdJ;EACE;EACA;EACA;EAEA;EnB2RI,WALI;EmBnRR,apI+hBmB;EoI9hBnB,anI+vBiB;EmI9vBjB,OnIDS;EmIET,kBnIXM;EmIYN;EACA;EACA,qBpI45BwB;EoI35BxB,iBpI45BoB;EoI35BpB;ElBFE;EKLE,YARW;EWUX,YEQJ;EACA;;AFLI;EEfN;IFgBQ;;;AEMN;EACE,cnI2lBM;EmI1lBN;EbfE,YARW;;AagCf;EAEE,epImqBkB;EoIlqBlB;;AAGF;EAEE,kBnItCO;;AmI2CT;EACE;EACA;;;AAIJ;EACE,apI4pBuB;EoI3pBvB,gBpI2pBuB;EoI1pBvB,cpI2pBuB;EiHlbnB,WALI;;;AmBhOV;EACE,apIypBuB;EoIxpBvB,gBpIwpBuB;EoIvpBvB,cpIwpBuB;EiHtbnB,WALI;;;AoB5RV;EACE;EACA,YrIi2BsB;EqIh2BtB,crIi2ByB;EqIh2BzB,erIi2ByB;;AqI/1BzB;EACE;EACA;;;AAIJ;EACE,OrIq1BuB;EqIp1BvB,QrIo1BuB;EqIn1BvB;EACA;EACA,kBpIhBM;EoIiBN;EACA;EACA;EACA,QrIw1BwB;EqIv1BxB;EACA;;AAGA;EnBXE;;AmBeF;EAEE,erI+0B6B;;AqI50B/B;EACE,QrIs0B6B;;AqIn0B/B;EACE,cpI2kBM;EoI1kBN;EACA,YrIsqByB;;AqInqB3B;EACE,kBpIqkBM;EoIpkBN,cpIokBM;;AoIlkBN;EAII;;AAIJ;EAII;;AAKN;EACE,kBpIgjBM;EoI/iBN,cpI5DO;EoIiEL;;AAIJ;EACE;EACA;EACA,SrI8yBgC;;AqIvyBhC;EACE,SrIsyB8B;;;AqIxxBpC;EACE,crIiyB0B;;AqI/xB1B;EACE,OrI6xBgB;EqI5xBhB;EACA;EACA;EnB9FA;EgBHE,YGmGF;;AH/FE;EGyFJ;IHxFM;;;AGgGJ;EACE;;AAGF;EACE,qBrI4xB4B;EqIvxB1B;;;AAMR;EACE;EACA,crI+vB6B;;;AqI5vB/B;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SrIumBiB;;;AsIrvBvB;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YtI28BM;;AsI18BhC;EAA0B,YtI08BM;;AsIv8BlC;EACE;;AAGF;EACE,OtI47BqB;EsI37BrB,QtI27BqB;EsI17BrB;EHzBF,kBlImnBQ;EqIxlBN,QtI27BsB;EkHv8BtB;EKLE,YARW;EWUX,YIkBF;EACA;;AJfE;EIMJ;IJLM;;;AIgBJ;EHjCF,kBlIiuD8B;;AqI3rD9B;EACE,OtIq6BqB;EsIp6BrB,QtIq6BsB;EsIp6BtB;EACA,QtIo6BsB;EsIn6BtB,kBrItCO;EqIuCP;EpB7BA;EKLE,YARW;;Ae+Cf;EACE,OtIi6BqB;EsIh6BrB,QtIg6BqB;EmIn9BvB,kBlImnBQ;EqI9jBN,QtIi6BsB;EkHv8BtB;EKLE,YARW;EWUX,YI4CF;EACA;;AJzCE;EIiCJ;IJhCM;;;AI0CJ;EH3DF,kBlIiuD8B;;AqIjqD9B;EACE,OtI24BqB;EsI14BrB,QtI24BsB;EsI14BtB;EACA,QtI04BsB;EsIz4BtB,kBrIhEO;EqIiEP;EpBvDA;EKLE,YARW;;AeyEf;EACE;;AAEA;EACE,kBrIxEK;;AqI2EP;EACE,kBrI5EK;;;AsIXX;EACE;;AAEA;AAAA;EAEE,QvIu+BmB;EuIt+BnB,avIu+BwB;;AuIp+B1B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELDE,YKEF;;ALEE;EKXJ;ILYM;;;AKCN;EACE;;AAEA;EACE;;AAGF;EAEE,avIi9B0B;EuIh9B1B,gBvIi9B0B;;AuI98B5B;EACE,avI48B0B;EuI38B1B,gBvI48B0B;;AuIx8B9B;EACE,avIs8B4B;EuIr8B5B,gBvIs8B4B;;AuIh8B5B;AAAA;AAAA;EACE,SvIg8BwB;EuI/7BxB,WvIg8B0B;;AuI37B5B;EACE,SvIy7BwB;EuIx7BxB,WvIy7B0B;;;AwI/+BhC;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;;AAIF;AAAA;EAEE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAWN;EACE;EACA;EACA;EvBsPI,WALI;EuB/OR,axI2fmB;EwI1fnB,avI2tBiB;EuI1tBjB,OvIrCS;EuIsCT;EACA;EACA,kBvI9CS;EuI+CT;EtBpCE;;;AsB8CJ;AAAA;AAAA;AAAA;EAIE;EvBgOI,WALI;EC7QN;;;AsBuDJ;AAAA;AAAA;AAAA;EAIE;EvBuNI,WALI;EC7QN;;;AsBgEJ;AAAA;EAEE;;;AAaE;AAAA;EtB/DA;EACA;;AsBqEA;AAAA;EtBtEA;EACA;;AsBgFF;EACE;EtBpEA;EACA;;;AuBzBF;EACE;EACA;EACA,YzI2vBmB;EiHlfjB,WALI;EwBjQN,OzIw+BqB;;;AyIr+BvB;EACE;EACA;EACA;EACA;EACA;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0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb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F;;AjBpBE;EiBWJ;IjBVM;;;AiBsBN;EACE;;AAGF;EACE;EACA,clJskBM;EkJrkBN;EACA,YlJw6CgC;;;AkJp6CpC;EACE;;;AAGF;EACE,kBlJvDM;EkJwDN;;AAEA;EjCnCE;EACA;;AiCqCA;EjCtCA;EACA;;AiC0CF;EACE;;AAIF;EjClCE;EACA;;AiCqCE;EjCtCF;EACA;;AiC0CA;EjC3CA;EACA;;;AiCgDJ;EACE;;;AASA;EACE;;AAGF;EACE;EACA;EjCxFA;;AiC2FA;EAAgB;;AAChB;EAAe;;AAEf;EjC9FA;;;AkCnBJ;EACE;EACA;EACA;EACA,epJ8+CyB;EoJ5+CzB;;;AAOA;EACE,cpJm+CwB;;AoJj+CxB;EACE;EACA,epJ+9CsB;EoJ99CtB,OnJPK;EmJQL;;AAIJ;EACE,OnJbO;;;AoJZX;EACE;EjCGA;EACA;;;AiCAF;EACE;EACA;EACA,OpJMS;EoJJT,kBpJLM;EoJMN;EnBKI,YmBJJ;;AnBQI;EmBfN;InBgBQ;;;AmBPN;EACE;EACA,OpJFO;EoJIP,kBpJVO;EoJWP,cpJVO;;AoJaT;EACE;EACA,OrJ4pCqB;EqJ3pCrB,kBpJjBO;EoJkBP,SrJ6pCuB;EqJ5pCvB,YrJyrByB;;;AqJprB3B;EACE,arJgpCsB;;AqJ7oCxB;EACE;EACA,OpJk5CsB;EkIp7CxB,kBlIm7CqB;EoJ/4CnB,cpJ+4CmB;;AoJ54CrB;EACE,OpJhCO;EoJiCP;EACA,kBpJzCI;EoJ0CJ,cpJtCO;;;AqJLT;EACE;;;AAOI;EpCqCJ;EACA;;AoChCI;EpCiBJ;EACA;;;AoChCF;EACE;ErCgSE,WALI;;AqCpRF;EpCqCJ;EACA;;AoChCI;EpCiBJ;EACA;;;AoChCF;EACE;ErCgSE,WALI;;AqCpRF;EpCqCJ;EACA;;AoChCI;EpCiBJ;EACA;;;AqC/BJ;EACE;EACA;EtC8RI,WALI;EsCvRR,avJqiBiB;EuJpiBjB;EACA,OtJNM;EsJON;EACA;EACA;ErCKE;;AqCAF;EACE;;;AAKJ;EACE;EACA;;;ACvBF;EACE;EACA;EACA,exJ65CoB;EwJ55CpB;EtCWE;;;AsCNJ;EAEE;;;AAIF;EACE,axJ0hBiB;;;AwJlhBnB;EACE,exJ84C4B;;AwJ34C5B;EACE;EACA;EACA;EACA;EACA;;;AAeF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,ODgDgB;ErB9ChB,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;ACHF;EACE;IAAK,uBzJstDS;;;AyJjtDlB;EACE;EACA,QzJ+sDgB;EyJ9sDhB;EzCwRI,WALI;EyCjRR,kBzJPS;EiHWP;EKLE,YARW;;;AmCcjB;EACE;EACA;EACA;EACA;EACA,OzJpBM;EyJqBN;EACA;EACA,kBzJ2lBQ;EiIvmBJ,YwBaJ;;AxBTI;EwBAN;IxBCQ;;;;AwBWR;EvBYE;EuBVA;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;ACvCR;EACE;EACA;EAGA;EACA;EzCSE;;;AyCLJ;EACE;EACA;;AAEA;EAEE;EACA;;;AAUJ;EACE;EACA,O1JpBS;E0JqBT;;AAGA;EAEE;EACA,O1J3BO;E0J4BP;EACA,kB1JnCO;;A0JsCT;EACE,O1JhCO;E0JiCP,kB1JvCO;;;A0JgDX;EACE;EACA;EACA;EACA,O1J9CS;E0JgDT,kB1JzDM;E0J0DN;;AAEA;EzCrCE;EACA;;AyCwCF;EzC3BE;EACA;;AyC8BF;EAEE,O1J/DO;E0JgEP;EACA,kB1JxEI;;A0J4EN;EACE;EACA,O1JkrDsB;E0JjrDtB,kB1JgrDmB;E0J/qDnB,c1J+qDmB;;A0J5qDrB;EACE;;AAEA;EACE;EACA,kB3J8XS;;;A2JhXX;EACE;;AAGE;EzCrCJ;EAZA;;AyCsDI;EzCtDJ;EAYA;;AyC+CI;EACE;;AAGF;EACE,kB3J6VK;E2J5VL;;AAEA;EACE;EACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A2J1Uf;EzC9HI;;AyCiIF;EACE;;AAEA;EACE;;;ACpJJ;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODmK2B;EClK3B,kBD+JsB;;AC5JpB;EAEE,OD6JuB;EC5JvB;;AAGF;EACE,O3JXA;E2JYA,kBDuJuB;ECtJvB,cDsJuB;;;ACpK7B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AEjK7B;EACE;EACA,O7J2iDgB;E6J1iDhB,Q7J0iDgB;E6JziDhB;EACA,O5JMM;E4JLN;EACA;E3COE;E2CLF,S7J2iDkB;;A6JxiDlB;EACE,O5JFI;E4JGJ;EACA,S7JsiDsB;;A6JniDxB;EACE;EACA,Y7J2rByB;E6J1rBzB,S7JiiDsB;;A6J9hDxB;EAEE;EACA;EACA,S7J2hDyB;;;A6JvhD7B;EACE,Q7JuhDuB;;;A8J7jDzB;EACE,O9Jg1CgB;E8J/0ChB;E7CmSI,WALI;E6C3RR;EACA,kB7JDM;E6JEN;EACA;EACA,Y7J+rBa;EiHrrBX;;A4CPF;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE,e9JobgB;;;A8JhbpB;EACE;EACA;EACA;EACA,O7JvBS;E6JwBT,kB7J/BM;E6JgCN;EACA;E5CVE;EACA;;A4CYF;EACE;EACA,a7Js9Cc;;;A6Jl9ClB;EACE,S7Ji9CgB;E6Jh9ChB;;;AC1CF;EACE;EACA;EACA;EACA,S/JohCa;E+JnhCb;EACA;EACA;EACA;EACA;EAGA;;;AAOF;EACE;EACA;EACA,Q/Ju1CoB;E+Jr1CpB;;AAGA;E7BlBI,Y6BmBF;EACA,W/Jm3CmB;;AkIn4CjB;E6BcJ;I7BbM;;;A6BiBN;EACE,W/Ji3CmB;;A+J7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AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAJF;AAEF;EAEI;EAAA;;;AAYF;AAdF;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AChCV;ED8BM;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ACbV;EDWM;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AEzCV;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAKF;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAKF;AAEA;EACE;;;AAKF;AAEA;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAKF;AACA;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;;AAMJ;AAEA;EACE;IACE;;;AAKJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AAKJ;EACE;IACE;;;AAMJ;AAEA;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;ACzQF;EACE;IAAI;;EACJ;IAAM;;;AA2BR;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;;AAGA;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACE;;AAIA;EAIE,OCrDkB;;AD8DlB;EAIE,OCjEoB;;ADuE5B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EAIE,cC3Gc;;AD8GhB;EAEE,cC/GkB;;ADkHpB;EACE;;AAGF;EACE,OCpHY;;ADuHd;AAAA;EAEE;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EAEE;;AAGF;EAEE;EACA;EACA;;AAOA;EACE;;AAIJ;EAGE;;AAGF;EAEE;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;AAAA;EAxMA;;AA4ME;AAAA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE,SC5NmB;;ADkOrB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAES;EACP;;;AAGO;EACP;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKN;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAES;EACP;;;AAGF;EACE;EACA;EACA;;AAES;EACP;;;AAKN;EACE;;AAIJ;EACE;;AAGF;EACE;;AAIF;EACE;EA/SF,oBAgTsB;EA/SnB,iBA+SmB;EA9Sd,YA8Sc;;AAEpB;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAGF;EA3UJ;;AA+UI;EACE;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EApWJ,oBAqWwB;EApWhB,YAoWgB;EACpB;EACA;EA7WJ,oBA8WwB;EA7WrB,iBA6WqB;EA5WhB,YA4WgB;;AAEpB;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EAEE;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;;AAGF;EACE;EACA;;AAMF;EAEE;;;AAKN;AAAA;AAAA;EAGE;;;AAGF;EACE;EAxfA,oBAyfoB;EAxfjB,iBAwfiB;EAvfZ,YAufY;;AAEpB;EACE;;AAEA;EACE;;;AAKN;EACE;EACA;EAtgBA,oBAugBoB;EAtgBjB,iBAsgBiB;EArgBZ,YAqgBY;;AAEpB;EACE;;AAEA;EACE;;;AAMJ;EACE;;AAGF;EACE;EACA;EACA;;;AEviBJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAEJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;AAAA;EAGI;;;ACrPJ;EACE;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;EACA;EACA;EACA,cJzBoB;;;AI4BtB;AACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAIF;EACE;;;AAIF;EACE;EACA;EACA;EACA;;;ACnGF;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EAEA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;AAEA;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAIJ;AAEA;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAIJ;AAEA;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAIJ;AAEA;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACxKJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;ACrBJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EA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","file":"app.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["app.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_root.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/vendor/_rfs.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_reboot.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_variables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_variables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_border-radius.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_type.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_lists.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_images.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_image.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_box-shadow.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_containers.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_container.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_breakpoints.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_grid.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_grid.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_tables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_table-variants.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_labels.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-text.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-control.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_transition.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_gradients.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-select.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-check.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_form-range.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_floating-labels.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/forms/_input-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_forms.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_transitions.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_dropdown.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_caret.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_button-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_nav.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_navbar.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_card.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_breadcrumb.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_pagination.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_pagination.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_badge.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_alert.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_alert.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_accordion.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_progress.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_placeholders.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_list-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_list-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_close.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_toasts.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_modal.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_backdrop.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_popover.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_reset-text.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_carousel.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_clearfix.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_spinners.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_offcanvas.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/_tooltip.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_color-bg.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_colored-links.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_ratio.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_position.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_stacks.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_visually-hidden.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_visually-hidden.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_stretched-link.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_text-truncation.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_text-truncate.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/helpers/_vr.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_utilities.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/mixins/_utilities.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/bootstrap-rtl-fix/utilities/_api.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_root.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_reboot.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_type.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_colors.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_flag.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_images.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-control.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-select.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-check.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-file.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_input-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_validation.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/forms/_form-range.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_tables.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/mixins/_buttons.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_deprecated.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_dropdown.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_button-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_nav.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_navbar.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_card.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_breadcrumb.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_pagination.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_badge.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_alert.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_progress.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_list-group.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_close.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_modal.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_toasts.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_tooltip.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_popover.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_scrollspy.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_ripple.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/mixins/_ripple.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_range.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_accordion.scss","../vendor/MDB5-STANDARD-UI-KIT-Free-6.0.0/src/scss/free/_carousel.scss","../vendor/bootstrap-5.0.2/scss/bootstrap.scss","../vendor/bootstrap-5.0.2/scss/_root.scss","../vendor/bootstrap-5.0.2/scss/_reboot.scss","../vendor/bootstrap-5.0.2/scss/vendor/_rfs.scss","../vendor/bootstrap-5.0.2/scss/mixins/_border-radius.scss","../vendor/bootstrap-5.0.2/scss/_type.scss","../vendor/bootstrap-5.0.2/scss/mixins/_lists.scss","../vendor/bootstrap-5.0.2/scss/_images.scss","../vendor/bootstrap-5.0.2/scss/mixins/_image.scss","../vendor/bootstrap-5.0.2/scss/mixins/_box-shadow.scss","../vendor/bootstrap-5.0.2/scss/_containers.scss","../vendor/bootstrap-5.0.2/scss/mixins/_container.scss","../vendor/bootstrap-5.0.2/scss/mixins/_breakpoints.scss","../vendor/bootstrap-5.0.2/scss/_grid.scss","../vendor/bootstrap-5.0.2/scss/mixins/_grid.scss","../vendor/bootstrap-5.0.2/scss/_tables.scss","../vendor/bootstrap-5.0.2/scss/mixins/_table-variants.scss","../vendor/bootstrap-5.0.2/scss/forms/_labels.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-text.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-control.scss","../vendor/bootstrap-5.0.2/scss/mixins/_transition.scss","../vendor/bootstrap-5.0.2/scss/mixins/_gradients.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-select.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-check.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-range.scss","../vendor/bootstrap-5.0.2/scss/forms/_floating-labels.scss","../vendor/bootstrap-5.0.2/scss/forms/_input-group.scss","../vendor/bootstrap-5.0.2/scss/mixins/_forms.scss","../vendor/bootstrap-5.0.2/scss/_buttons.scss","../vendor/bootstrap-5.0.2/scss/mixins/_buttons.scss","../vendor/bootstrap-5.0.2/scss/_transitions.scss","../vendor/bootstrap-5.0.2/scss/_dropdown.scss","../vendor/bootstrap-5.0.2/scss/mixins/_caret.scss","../vendor/bootstrap-5.0.2/scss/_button-group.scss","../vendor/bootstrap-5.0.2/scss/_nav.scss","../vendor/bootstrap-5.0.2/scss/_navbar.scss","../vendor/bootstrap-5.0.2/scss/_card.scss","../vendor/bootstrap-5.0.2/scss/_accordion.scss","../vendor/bootstrap-5.0.2/scss/_breadcrumb.scss","../vendor/bootstrap-5.0.2/scss/_pagination.scss","../vendor/bootstrap-5.0.2/scss/mixins/_pagination.scss","../vendor/bootstrap-5.0.2/scss/_badge.scss","../vendor/bootstrap-5.0.2/scss/_alert.scss","../vendor/bootstrap-5.0.2/scss/mixins/_alert.scss","../vendor/bootstrap-5.0.2/scss/_progress.scss","../vendor/bootstrap-5.0.2/scss/_list-group.scss","../vendor/bootstrap-5.0.2/scss/mixins/_list-group.scss","../vendor/bootstrap-5.0.2/scss/_close.scss","../vendor/bootstrap-5.0.2/scss/_toasts.scss","../vendor/bootstrap-5.0.2/scss/_modal.scss","../vendor/bootstrap-5.0.2/scss/_tooltip.scss","../vendor/bootstrap-5.0.2/scss/_variables.scss","../vendor/bootstrap-5.0.2/scss/mixins/_reset-text.scss","../vendor/bootstrap-5.0.2/scss/_popover.scss","../vendor/bootstrap-5.0.2/scss/_carousel.scss","../vendor/bootstrap-5.0.2/scss/mixins/_clearfix.scss","../vendor/bootstrap-5.0.2/scss/_spinners.scss","../vendor/bootstrap-5.0.2/scss/_offcanvas.scss","../vendor/bootstrap-5.0.2/scss/helpers/_colored-links.scss","../vendor/bootstrap-5.0.2/scss/helpers/_ratio.scss","../vendor/bootstrap-5.0.2/scss/helpers/_position.scss","../vendor/bootstrap-5.0.2/scss/helpers/_visually-hidden.scss","../vendor/bootstrap-5.0.2/scss/mixins/_visually-hidden.scss","../vendor/bootstrap-5.0.2/scss/helpers/_stretched-link.scss","../vendor/bootstrap-5.0.2/scss/helpers/_text-truncation.scss","../vendor/bootstrap-5.0.2/scss/mixins/_text-truncate.scss","../vendor/bootstrap-5.0.2/scss/mixins/_utilities.scss","../vendor/bootstrap-5.0.2/scss/utilities/_api.scss","bootstrap.scss","../vendor/bootstrap-select-1.14.0/sass/bootstrap-select.scss","../vendor/bootstrap-select-1.14.0/sass/variables.scss","unicaen-icon.scss","tableaux.scss","cartridge.scss","print.scss","callout.scss","budget.scss","paiement.scss","agrement.scss","acceuil.scss","piece-jointe.scss","intervenant-recherche.scss","service.scss","chargens.scss","droits.scss","plafonds.scss","odf.scss","indicateurs.scss","intervenant.scss","intervenant-statut.scss"],"names":[],"mappings":"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A7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EA6DU;IA7DV;;EAwEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;ACvIV;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,eboWO;EanWP;EACA,gBbmoB0B;EaloB1B;;AAOA;EACE;EACA;EACA,qBb6bW;Ea5bX;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AAOF;EACE;;;AASA;EACE;;;AAcF;EACE;;AAGA;EACE;;;AAOJ;EACE;;AAGF;EACE;;;AAUF;EACE;EACA;;;AAMF;EACE;EACA;;;AAQJ;EACE;EACA;;;AAQA;EACE;EACA;;;ACnIF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;ADuIA;EACE;EACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AH7EF;EG2EA;IACE;IACA;;;AEzJN;EACE,ef0xByB;EetxBzB,Od6lCiB;;;AcxlCnB;EACE;EACA;EACA;EjBkRI,WALI;EiBzQR,adwvBiB;EcvvBjB,OdglCiB;;;Ac7kCnB;EACE;EACA;EjBwQI,WALI;;;AiB/PV;EACE;EACA;EjBkQI,WALI;;;AkB1RV;EACE,YhBkxBqB;EFpfjB,WALI;EkBrRR,OfGS;;;AgBRX;EACE;EACA;EACA;EnB4RI,WALI;EmBpRR,ajBkiBmB;EiBjiBnB,ahBkwBiB;EgBjwBjB,OhBES;EgBDT,kBhBRM;EgBSN;EACA;EACA;EfGE;EKLE,YARW;EWUX,YDMJ;;ACFI;EDhBN;ICiBQ;;;ADGN;EACE;;AAEA;EACE;;AAKJ;EACE,OhBpBO;EgBqBP,kBhB9BI;EgB+BJ,chBmlBM;EgBllBN;EVvBE,YARW;;AU2Cf;EAEE;;AAIF;EACE,OhB5CO;EgB8CP;;AAQF;EAEE,kBhB5DO;EgB+DP;;AAIF;EACE;EACA;EACA,mBjB6nBkB;EiB5nBlB,OhBjEO;EkBVT,kBlBIS;EgByEP;EACA;EACA;EACA;EACA,yBjBsYW;EiBrYX;ECtEE,YDuEF;;ACnEE;EDuDJ;ICtDM;;;ADqEN;EACE,kBjB64BwB;;;AiBp4B5B;EACE;EACA;EACA;EACA;EACA,ahBoqBiB;EgBnqBjB,OhB5FS;EgB6FT;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;;AAWJ;EACE,YjBqtBgB;EiBptBhB;EnBgKI,WALI;EI3QN;;AeoHF;EACE;EACA;EACA,mBjB6kBqB;;;AiBzkBzB;EACE,YjB4sBgB;EiB3sBhB;EnBmJI,WALI;EI3QN;;AeiIF;EACE;EACA;EACA,mBjBokBqB;;;AiB5jBvB;EACE,YjBmrBW;;AiBhrBb;EACE,YjBmrBc;;AiBhrBhB;EACE,YjBmrBc;;;AiB9qBlB;EACE,OjBorBiB;EiBnrBjB,QjBoqBa;EiBnqBb,SjB0hBoB;;AiBxhBpB;EACE;;AAGF;EACE;EfpKA;;AewKF;EfxKE;;Ae4KF;EACE,QjBupBc;;AiBrpBhB;EACE,QjBwpBc;;;AoBt1BlB;EACE;EACA;EACA;EAEA;EtByRI,WALI;EsB9QR,apB4hBmB;EoB3hBnB,anB4vBiB;EmB3vBjB,OnBJS;EmBKT,kBnBdM;EmBeN;EACA;EACA,qBpBy5BwB;EoBx5BxB,iBpBy5BoB;EoBx5BpB;ElBLE;EKLE,YARW;EWUX,YEWJ;EACA;;AFRI;EEfN;IFgBQ;;;AESN;EACE,cnBwlBM;EmBvlBN;EblBE,YARW;;AamCf;EAEE,epBgqBkB;EoB/pBlB;;AAGF;EAEE,kBnBzCO;;AmB8CT;EACE;EACA;;;AAIJ;EACE,apBypBuB;EoBxpBvB,gBpBwpBuB;EoBvpBvB,cpBwpBuB;EFpbnB,WALI;EI3QN;;;AkBiDJ;EACE,apBqpBuB;EoBppBvB,gBpBopBuB;EoBnpBvB,cpBopBuB;EFxbnB,WALI;EI3QN;;;AmBfJ;EACE;EACA,YrBi2BsB;EqBh2BtB,crBi2ByB;EqBh2BzB,erBi2ByB;;AqB/1BzB;EACE;EACA;;;AAIJ;EACE,erBu1ByB;EqBt1BzB;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE,OrBy0BuB;EqBx0BvB,QrBw0BuB;EqBv0BvB;EACA;EACA,kBpB5BM;EoB6BN;EACA;EACA;EACA,QrB40BwB;EqB30BxB;EACA;;AAGA;EnBvBE;;AmB2BF;EAEE,erBm0B6B;;AqBh0B/B;EACE,QrB0zB6B;;AqBvzB/B;EACE,cpB+jBM;EoB9jBN;EACA,YrB0pByB;;AqBvpB3B;EACE,kBpByjBM;EoBxjBN,cpBwjBM;;AoBtjBN;EAII;;AAIJ;EAII;;AAKN;EACE,kBpBoiBM;EoBniBN,cpBxEO;EoB8EL;;AAIJ;EACE;EACA;EACA,SrBiyBgC;;AqB1xBhC;EACE;EACA,SrBwxB8B;;;AqB1wBpC;EACE,crBmxB0B;;AqBjxB1B;EACE,OrB+wBgB;EqB9wBhB;EACA;EACA;EnB5GA;EgBHE,YGiHF;;AH7GE;EGuGJ;IHtGM;;;AG8GJ;EACE;;AAGF;EACE,qBrB8wB4B;EqBzwB1B;;AAKN;EACE,erByvBwB;EqBxvBxB;;AAEA;EACE;EACA;;;AAKN;EACE;EACA,crBuuB6B;;;AqBpuB/B;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SrB+kBiB;;;AsBrvBvB;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EACE,YtB08B8B;;AsBx8BhC;EACE,YtBu8B8B;;AsBn8BlC;EACE;;AAGF;EACE,OtBw7BqB;EsBv7BrB,QtBu7BqB;EsBt7BrB;EH7BF,kBlBmnBQ;EqBplBN,QtBu7BsB;EEv8BtB;EKLE,YARW;EWUX,YIsBF;EACA;;AJnBE;EIUJ;IJTM;;;AIoBJ;EHrCF,kBlBiuD8B;;AqBvrD9B;EACE,OtBi6BqB;EsBh6BrB,QtBi6BsB;EsBh6BtB;EACA,QtBg6BsB;EsB/5BtB,kBrB1CO;EqB2CP;EpBjCA;EKLE,YARW;;AemDf;EACE,OtB65BqB;EsB55BrB,QtB45BqB;EmBn9BvB,kBlBmnBQ;EqB1jBN,QtB65BsB;EEv8BtB;EKLE,YARW;EWUX,YIgDF;EACA;;AJ7CE;EIqCJ;IJpCM;;;AI8CJ;EH/DF,kBlBiuD8B;;AqB7pD9B;EACE,OtBu4BqB;EsBt4BrB,QtBu4BsB;EsBt4BtB;EACA,QtBs4BsB;EsBr4BtB,kBrBpEO;EqBqEP;EpB3DA;EKLE,YARW;;Ae6Ef;EACE;;AAEA;EACE,kBrB5EK;;AqB+EP;EACE,kBrBhFK;;;AsBXX;EACE;;AAEA;AAAA;AAAA;EAGE,QvBs+BmB;EuBr+BnB,avBs+BwB;;AuBn+B1B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELPE,YKQF;;ALJE;EKVJ;ILWM;;;AKMN;AAAA;EAEE;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,avB28B0B;EuB18B1B,gBvB28B0B;;AuBx8B5B;AAAA;EACE,avBs8B0B;EuBr8B1B,gBvBs8B0B;;AuBl8B9B;EACE,avBg8B4B;EuB/7B5B,gBvBg8B4B;;AuBz7B5B;AAAA;AAAA;AAAA;EACE,SvBy7BwB;EuBx7BxB,WvBy7B0B;;AuBp7B5B;EACE,SvBk7BwB;EuBj7BxB,WvBk7B0B;;AuB76B5B;EACE;;;ACnEN;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAIF;AAAA;AAAA;EAGE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAUN;EACE;EACA;EACA;E1BmPI,WALI;E0B5OR,axB0fmB;EwBzfnB,avB0tBiB;EuBztBjB,OvBtCS;EuBuCT;EACA;EACA,kBvB/CS;EuBgDT;EtBrCE;;;AsB8CJ;AAAA;AAAA;AAAA;EAIE;E1B8NI,WALI;EI3QN;;;AsBuDJ;AAAA;AAAA;AAAA;EAIE;E1BqNI,WALI;EI3QN;;;AsBgEJ;AAAA;EAEE;;;AAYE;AAAA;AAAA;AAAA;EtB/DA;EACA;;AsBuEA;AAAA;AAAA;AAAA;EtBxEA;EACA;;AsB0FF;EACE;EtB9EA;EACA;;AsBiFF;AAAA;EtBlFE;EACA;;;AuBvBF;EACE;EACA;EACA,YzB0vBmB;EFpfjB,WALI;E2B9PN,OzBu+BqB;;;AyBp+BvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E3ByPE,WALI;E2BjPN,OAxBc;EAyBd,kBAxBiB;EvBHjB;;;AuBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,czB48BmB;EyBz8BjB,ezBixBa;EyBhxBb;EACA;EACA;EACA;;AAGF;EACE,czBi8BiB;EyBh8BjB,YAhDa;;;AAjBjB;EA0EI,ezB+vBa;EyB9vBb;;;AA3EJ;EAkFE,czB+6BmB;;AyB56BjB;EAEE,ezBu1B8B;EyBt1B9B;EACA;EACA;;AAIJ;EACE,czBk6BiB;EyBj6BjB,YA/Ea;;;AAjBjB;EAwGI;;;AAxGJ;EA+GE,czBk5BmB;;AyBh5BnB;EACE,kBzB+4BiB;;AyB54BnB;EACE,YArGa;;AAwGf;EACE,OzBu4BiB;;;AyBl4BrB;EACE;;;AAhIF;AAAA;AAAA;AAAA;AAAA;EA0IM;;;AAtHR;EACE;EACA;EACA,YzB0vBmB;EFpfjB,WALI;E2B9PN,OzBu+BqB;;;AyBp+BvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E3ByPE,WALI;E2BjPN,OAxBc;EAyBd,kBAxBiB;EvBHjB;;;AuBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,czB48BmB;EyBz8BjB,ezBixBa;EyBhxBb;EACA;EACA;EACA;;AAGF;EACE,czBi8BiB;EyBh8BjB,YAhDa;;;AAjBjB;EA0EI,ezB+vBa;EyB9vBb;;;AA3EJ;EAkFE,czB+6BmB;;AyB56BjB;EAEE,ezBu1B8B;EyBt1B9B;EACA;EACA;;AAIJ;EACE,czBk6BiB;EyBj6BjB,YA/Ea;;;AAjBjB;EAwGI;;;AAxGJ;EA+GE,czBk5BmB;;AyBh5BnB;EACE,kBzB+4BiB;;AyB54BnB;EACE,YArGa;;AAwGf;EACE,OzBu4BiB;;;AyBl4BrB;EACE;;;AAhIF;AAAA;AAAA;AAAA;AAAA;EA4IM;;;AC9IV;EAEE;EACA;EACA;E5B2RI,qBALI;E4BpRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E5B0QI,WALI;E4BnQR;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ExBjBE;EiBfF,kBOkCqB;EnBxBjB,YARW;EWUX,YQwBJ;;ARpBI;EQhBN;IRiBQ;;;AQqBN;EACE;EAEA;EACA;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;EPrDF,kBOsDuB;EACrB;EACA;EAGE;;AAMJ;EACE;EACA;EAGE;;AAMJ;EAKE;EACA;EAGA;EnB3EE,YARW;;AmBsFb;EAGI;;AAON;EAGE;EACA;EACA;EAEA;EACA;EnBhGE,YARW;;;AmBmHf;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADoEA;ECjFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AD8FA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADqEA;EClFA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADgFF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,iBzByfgB;;AyBpfhB;EAEE,iBzBsfoB;;AyBnftB;EACE;;AAGF;EACE;;;AAUJ;ECjHE;EACA;E7B8MI,qBALI;E6BvMR;;;ADuHF;EC1HE;EACA;E7B8MI,qBALI;E6BvMR;;;ACvFF;EVgBM,YUfJ;;AVmBI;EUpBN;IVqBQ;;;AUlBN;EACE;;;AAMF;EACE;;;AAIJ;EACE;EACA;EVDI,YUEJ;;AVEI;EULN;IVMQ;;;AUDN;EACE;EACA;EVNE,YUOF;;AVHE;EUAJ;IVCM;;;;AWpBR;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;EACE;;ACmBE;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;EAhCJ;EACA;EACA;EACA;;AAqDE;EACE;;;ADzCN;EAEE;EACA;EACA;EACA;EACA;E/B2QI,0BALI;E+BpQR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;E/B8OI,WALI;E+BvOR;EACA;EACA;EACA;EACA;EACA;E3BzCE;EKLE,YARW;;AsB0Df;EACE;EACA;EACA;;;AAuBA;EACE;;AAEA;EACE;EACA;;;AAIJ;EACE;;AAEA;EACE;EACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnBrCJ;EmBuBA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AAUN;EACE;EACA;EACA;EACA;;ACxFA;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;EAzBJ;EACA;EACA;EACA;;AA8CE;EACE;;;ADoEJ;EACE;EACA;EACA;EACA;EACA;;ACtGA;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;EAlBJ;EACA;EACA;EACA;;AAuCE;EACE;;AD8EF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;;ACvHA;EACE;EACA,a9B+dU;E8B9dV,gB9B6diB;E8B5djB;;AAWA;EACE;;AAGF;EACE;EACA,c9B4cQ;E8B3cR,gB9B0ce;E8Bzcf;EA9BN;EACA;EACA;;AAiCE;EACE;;AD+FF;EACE;;;AAMN;EACE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA,a7B2XmB;E6B1XnB;EACA;EAEA;EACA;EACA;;AAEA;EAEE;EVvLF,kBUyLuB;;AAGvB;EAEE;EACA;EV/LF,kBUgMuB;;AAGvB;EAEE;EACA;EACA;;;AAMJ;EACE;;;AAIF;EACE;EACA;EACA;E/B0EI,WALI;E+BnER;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AEnPF;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;EACA;;AAKF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;E7BhBI;;A6BoBF;AAAA;EAEE;;AAIF;AAAA;AAAA;E7BXE;EACA;;A6BoBF;AAAA;AAAA;E7BPE;EACA;;;A6B4BJ;EACE;EACA;;AAEA;EAGE;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAKF;ExB1FM,YARW;;AwBsGf;ExB9FI,YARW;;;AwB+GjB;EACE;EACA;EACA;;AAEA;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAIF;AAAA;E7B5FE;EACA;;A6BgGF;AAAA;E7B/GE;EACA;;;A8BvBJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;ElC0QI,WALI;EkCnQR;EACA;EdZI,YccJ;;AdVI;EcGN;IdFQ;;;AcWN;EAEE;;AAKF;EACE;EACA;EACA;;;AAQJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;EAGA;EACA;E9BzCA;EACA;;A8B2CA;EAGE;EACA;;AAGF;EAEE;EACA;EACA;;AAIJ;AAAA;EAEE;EACA;EACA;;AAGF;EAEE;E9BpEA;EACA;;;A8B+EJ;EAEE;EACA;EACA;;AAGA;EACE;EACA;E9BjGA;;A8BoGA;EACE;EACA;EACA;;AAIJ;AAAA;EAEE;Eb5HF,kBa6HuB;;;AASvB;AAAA;EAEE;EACA;;;AAKF;AAAA;EAEE;EACA;EACA;;;AAMF;AAAA;EACE;;;AASF;EACE;;AAEF;EACE;;;ACrKJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAmBJ;EACE;EACA;EACA;EnCiOI,WALI;EmC1NR;EAEA;;AAEA;EAEE;;;AASJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;;AAGF;EACE;;;AAQJ;EACE,ajCq7BmB;EiCp7BnB,gBjCo7BmB;EiCn7BnB;;AAEA;AAAA;AAAA;EAGE;;;AAYJ;EACE;EACA;EAGA;;;AAIF;EACE;EnCmJI,WALI;EmC5IR;EACA;EACA;EACA;E/BlIE;EgBHE,YeuIJ;;AfnII;Ee2HN;If1HQ;;;AeoIN;EACE;;AAGF;EACE;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AvBhHE;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvBlLR;EuB4HA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;I1B1NJ,YARW;IWUX,Ye0NI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AAtDR;EAEI;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E1B1NJ,YARW;EWUX,Ye0NI;;AAGA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAiBZ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC3QF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EhCdE;EKLE,YARW;;A2B+Bf;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EhCpBF;EACA;;AgCuBA;EACE;EhCXF;EACA;;AgCiBF;AAAA;EAEE;;;AAIJ;EAGE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EAGA;;;AAGF;EACE;;;AAQA;EACE;;;AAQJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EhC1FE;;;AgCiGJ;EACE;EACA;EACA;EACA;;AAEA;EhCvGE;;;AgCkHJ;EACE;EAGA;EAGA;EAGA;;AAEA;EACE;EACA;;;AAIJ;EACE;EAGA;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EhCpJE;;;AgCwJJ;AAAA;AAAA;EAGE;;;AAGF;AAAA;EhCtJI;EACA;;;AgC0JJ;AAAA;EhC7II;EACA;;;AgCwJF;EACE;;AxBhIA;EwB4HJ;IAQI;IACA;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;IhCrLJ;IACA;;EgCuLM;AAAA;IAGE;;EAEF;AAAA;IAGE;;EAIJ;IhCtLJ;IACA;;EgCwLM;AAAA;IAGE;;EAEF;AAAA;IAGE;;;;ACjPZ;EAEE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ErCmRI,WALI;EqC5QR;EACA;EjCAE;;;AiCMF;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAOJ;EACE;;;ACxCJ;EAEE;EACA;EtCgSI,4BALI;EsCzRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EhCpBA;EACA;;;AgCuBF;EACE;EACA;EACA;EtCoQI,WALI;EsC7PR;EAEA;EACA;ElBpBI,YkBqBJ;;AlBjBI;EkBQN;IlBPQ;;;AkBkBN;EACE;EACA;EAEA;EACA;;AAGF;EACE;EACA;EACA;EACA,SpCooCuB;EoCnoCvB;;AAGF;EAEE;EACA;EjBtDF,kBiBuDuB;EACrB;;AAGF;EAEE;EACA;EACA;EACA;;;AAKF;EACE,apCumCsB;;AoClmCpB;ElC/BF;EACA;;AkCoCE;ElCnDF;EACA;;;AkCkEJ;ECjGE;EACA;EvC8RI,4BALI;EuCvRR;;;ADuGF;EC1GE;EACA;EvC8RI,4BALI;EuCvRR;;;ACFF;EAEE;EACA;ExC2RI,uBALI;EwCpRR;EACA;EACA;EAGA;EACA;ExCmRI,WALI;EwC5QR;EACA;EACA;EACA;EACA;EACA;EpCJE;;AoCSF;EACE;;;AAKJ;EACE;EACA;;;AChCF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;ErCFE;;;AqCOJ;EAEE;;;AAIF;EACE,avC6gBiB;;;AuCtgBnB;EACE,evCk4C4B;;AuC/3C5B;EACE;EACA;EACA;EACA;EACA;;;AAeF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ADqDF;EC9DA;EACA;EACA;;AAMA;EACE;;;ACPJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;E3C+PI,WALI;E2CxPR;EACA;EACA;EACA;EvCtBE;EuCwBF;EvB3BI,YuB4BJ;;AvBxBI;EuBWN;IvBVQ;;;AuByBN;EACE;EACA;EACA;;AAGA;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EvBnDE,YuBoDF;;AvBhDE;EuBuCJ;IvBtCM;;;AuBkDN;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EvCjEE;EACA;;AuCmEA;EvCpEA;EACA;;AuCwEF;EACE;;AAIF;EvChEE;EACA;;AuCmEE;EvCpEF;EACA;;AuCwEA;EvCzEA;EACA;;;AuC8EJ;EACE;;;AAQA;EACE;;AAGF;EACE;EACA;EvCpHA;;AuCuHA;EACE;;AAEF;EACE;;AAIA;EvC/HF;;;AwCfF;EACE;IACE,uBzCqtDY;;;AyC/sDlB;EAEE;E5CqRI,0BALI;E4C9QR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E5CyQI,WALI;E4ClQR;ExCTE;EKLE,YARW;;;AmC2BjB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ExBzBI,YwB0BJ;;AxBtBI;EwBaN;IxBZQ;;;;AwBwBR;EvBuBE;EuBrBA;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;ACxDR;EACE;EACA;EACA;EACA;EACA;EACA,S1C07CwB;;A0Cx7CxB;EACE;EACA;;;AAKJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKA;EACE;;;AAIJ;EACE;IACE,S1C65CsB;;;A0Cz5C1B;EACE;EAMA;EACA;;;AAGF;EACE;IACE;;;ACjDJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;E1CXE;;;A0CeJ;EACE;EACA;;AAEA;EAEE;EACA;;;AASJ;EACE;EACA;EACA;;AAGA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAQJ;EACE;EACA;EACA;EACA;EAEA;EACA;;AAEA;E1CxDE;EACA;;A0C2DF;E1C9CE;EACA;;A0CiDF;EAEE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;AAEA;EACE;EAGA;;;AAaF;EACE;;AAGE;E1C1DJ;EAZA;;A0C2EI;E1C3EJ;EAYA;;A0CoEI;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AlCtFR;EkC4DA;IACE;;EAGE;I1C1DJ;IAZA;;E0C2EI;I1C3EJ;IAYA;;E0CoEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IAGA;;;AAaZ;E1CnJI;;A0CsJF;EACE;;AAEA;EACE;;;ACzKJ;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;ACtL3B;EACE,ODuL2B;ECtL3B,kBDmLsB;;AChLpB;EAEE,ODiLuB;EChLvB;;AAGF;EACE,O5CXA;E4CYA,kBD2KuB;EC1KvB,cD0KuB;;;ACxL7B;EACE,ODqLyB;ECpLzB,kBDmLsB;;AChLpB;EAEE,OD+KqB;EC9KrB;;AAGF;EACE,O5CXA;E4CYA,kBDyKqB;ECxKrB,cDwKqB;;;AErL7B;EACE;EACA,O9C2iDgB;E8C1iDhB,Q9C0iDgB;E8CziDhB;EACA,O7CMM;E6CLN;EACA;E5COE;E4CLF,S9C2iDkB;;A8CxiDlB;EACE,O7CFI;E6CGJ;EACA,S9CsiDsB;;A8CniDxB;EACE;EACA,Y9C2rByB;E8C1rBzB,S9CiiDsB;;A8C9hDxB;EAEE;EACA;EACA,S9C2hDyB;;;A8CvhD7B;EACE,Q9CuhDuB;;;A+C7jDzB;EAEE;EACA;EACA;EACA;EACA;EjD6RI,uBALI;EiDtRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EjD+QI,WALI;EiDxQR;EACA;EACA;EACA;EACA;EACA;E7CRE;;A6CWF;EACE;;AAGF;EACE;;;AAIJ;EACE;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E7CjCE;EACA;;A6CsCF;EACE;EAGA;;;AAIJ;EACE;EACA;;;ACpEF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;;AAOF;EACE;EACA;EACA;EAEA;;AAGA;E9B3CI,Y8B4CF;EACA,WhD01CmB;;AkBn4CjB;E8BuCJ;I9BtCM;;;A8B0CN;EACE,WhDw1CmB;;AgDp1CrB;EACE,WhDq1CoB;;;AgDj1CxB;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;E9CpFE;EKLE,YARW;EyCqGf;;;AAIF;EAEE;EACA;EACA;ECjHA;EACA;EACA;EACA,SDkHE;ECjHF;EACA;EACA,kBDgHE;;AC7GF;EACE;;AAEF;EACE,SD0GA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;E9C1GE;EACA;;A8C6GF;EACE;EAEA;;;AAOJ;EACE;EACA;;;AAKF;EACE;EAGA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E9ClIE;EACA;;A8CwIF;EACE;;;AtChHA;EsCwHF;IACE;IACA;;EAIF;IACE;IACA;IACA;;EAGF;IACE;;;AtCrIA;EsC0IF;AAAA;IAEE;;;AtC5IA;EsCiJF;IACE;;;AAUA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA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CA;EACA;EACA;EACA;EhD5BA,YARW;EWUX,YqC4BA;;ArCxBA;EqCUJ;IrCTM;;;AqCyBF;EACE;EACA;EACA;EACA;EAEA;;AAGF;EACE;EACA;EACA;EACA;EAEA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;;AAGF;EACE;EACA;EACA;EACA;EACA;EAEA;;AAGF;EAEE;;AAGF;EAGE;;;AA2BR;ENtHE;EACA;EACA;EACA,SjDuhC0B;EiDthC1B;EACA;EACA,kBhDQM;;AgDLN;EACE;;AAEF;EACE,SjDu3CqB;;;AuDtwCzB;EACE;EACA;EACA;EACA;;AAEA;EACE;EAEA;EACA;EACA;;;AAIJ;EACE;EACA,atD4nBiB;;;AsDznBnB;EACE;EACA;EACA;;;ACtJF;EAEE;EACA;EACA;EACA;EACA;E1D4RI,yBALI;E0DrRR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ELnBA,alDuwBiB;EkDrwBjB;EACA,anDwiBmB;EmDviBnB,alDwwBiB;EkDvwBjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ErDoRI,WALI;E0DnQR;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKN;EACE;;AAEA;EACE;EACA;EAEA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EAEA;;;AAIJ;AAEA;EACE;;AAEA;EACE;EACA;EAEA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EAEA;;;AAIJ;AAkBA;EACE;EACA;EACA;EACA;EACA;EtDxGE;;;AmDjBF;EACE;EACA;EACA;;;AIAF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;ACNF;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;AANN;EACE;;AAGE;EAEE;;;ACLR;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACrBJ;EACE;EACA;EACA;EACA;EACA,S5DohCa;;;A4DjhCf;EACE;EACA;EACA;EACA;EACA,S5D4gCa;;;A4DpgCX;EACE;EACA;EACA,S5DggCU;;;A4D7/BZ;EACE;EACA;EACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;AUv9BZ;EkD5CA;IACE;IACA;IACA,S5DggCU;;E4D7/BZ;IACE;IACA;IACA,S5D0/BU;;;A6DzhChB;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACRF;AAAA;ECIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACXA;EACE;EACA;EACA;EACA;EACA;EACA,ShEoZqB;EgEnZrB;;;ACRJ;ECAE;EACA;EACA;;;ACNF;EACE;EACA;EACA;EACA;EACA;EACA,SnEwnBW;;;AoEviBb;AACA;EACE;;;AAGF;AACA;EACE;EAEA;;;AAGF;AACA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAEF;EACE;;;AAwFA;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACpII;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;E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IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A3DrBR;E2DcI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IA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EF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAGE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAGE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAEF;EAEE;;AAE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E4EyNA;;AAIF;EACE,c5E9NA;E4E+NA;;AAIF;EACE,O5E85BuB;;A4E55BzB;EAGE,kB5E05BkB;;;A6EpoCtB;EACE;;;AAKN;EACE,Y7EqxCuB;;;A6ElxCzB;EACE,c7EwmBQ;E6EvmBR;EACA,Y7EixCoC;;;A8E9xCtC;EACE;;;AAGF;EACE;EACA,O9EkoC0B;E8EjoC1B,Q9EioC0B;E8EhoC1B,kB9EPM;E8EQN;;AAEA;EACE;EACA;EACA,Y9EgoCiC;E8E/nCjC,e9EgoCoC;E8E/nCpC,O9EgoC4B;E8E/nC5B,Q9E+nC4B;E8E9nC5B;EACA;EACA;EACA,W9E6nCgC;;A8E1nClC;EACE;;AAEA;EACE,S9EwnCkC;E8EvnClC,Y9EwnCqC;;A8EpnCzC;EACE;EACA,c9EymC4B;E8ExmC5B,Y9EonCgC;;A8ElnChC;EACE,S9EmnCkC;E8ElnClC,Y9E6mCqC;E8E5mCrC,W9EmnCoC;E8ElnCpC,Y9EmnCqC;;A8E/mCzC;EACE,c9EokBM;;A8ElkBN;EACE,S9E8mCoC;;A8E3mCtC;EACE;EACA;;AAGF;EACE,c9EwjBI;;A8EtjBJ;EACE,Y9EomC2C;E8EnmC3C,W9E6lCkC;E8E5lClC,Y9E6lCmC;;A8EtlCrC;EACE,Y9E6mCiD;;A8ExmCvD;EACE,e9EwlCsC;E8EvlCtC;EACA;;AAGE;EACE;EACA;EACA,O9EilCsC;E8EhlCtC,Q9EglCsC;E8E/kCtC;EACA;EACA;EACA,kB9E1FA;;A8E8FJ;EACE;EACA,kB9EkhBI;;A8EhhBJ;EACE;EACA;EACA,c9EwkC+C;E8EvkC/C,c9EtGA;E8EuGA,O9EwkCwC;E8EvkCxC,Q9EwkCyC;E8EvkCzC;EACA;EACA;EACA,a9EqkC8C;E8EpkC9C,Y9EqkC6C;E8EpkC7C;;AAGF;EACE,kB9EggBE;;A8E5fN;EACE,c9E2fI;;A8EvfR;EACE,e9EokCmC;E8EnkCnC,O9EokC2B;E8EnkC3B,Q9EmkC2B;E8ElkC3B;EACA;;AAEA;EACE,O9EikCgC;E8EhkChC,Q9EgkCgC;;A8E7jClC;EACE;EACA;EACA,O9E0jCgC;E8EzjChC,Q9EyjCgC;E8ExjChC;EACA;EACA,e9EkjCiC;E8EjjCjC,kB9E/IE;;A8EkJJ;EACE;EACA,kB9EpJE;;A8EsJF;EACE,e9EyiC+B;E8ExiC/B,O9EsjCqC;E8ErjCrC,Q9EqjCqC;E8EpjCrC,c9EwdE;E8EvdF,kB9EudE;E8EtdF,Y9EwjC0C;E8EvjC1C;EACA;EACA;EACA;;AAGF;EACE,kB9EpKA;;;A8E0KR;EACE;;AACA;EACE;;;AASF;EACE;EACA;EACA,e9E+hCyC;E8E9hCzC,O9E+hCiC;E8E9hCjC,Q9E+hCkC;E8E9hClC,kB9E+hC4C;E8E9hC5C;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA,e9E0hC6C;E8EzhC7C,O9E0hCqC;E8EzhCrC,Q9EyhCqC;E8ExhCrC,kB9ExME;E8EyMF,Y9E0hC0C;E8EzhC1C,Y9EufS;E8EtfT,Y9E0hC0C;;A8EvhC5C;EACE;;AAEA;EACE,Y9EqhC+C;E8EphC/C,W9EqhC8C;E8EphC9C,Y9EqhC+C;;A8ElhCjD;EACE,e9EugC2C;E8EtgC3C,O9EmhCyC;E8ElhCzC,Q9EkhCyC;;A8E9gC7C;EACE;;AAEA;EACE;;AAEA;EACE,a9E0gCsD;E8EzgCtD,Y9E0gCqD;E8EzgCrD,W9E0gCoD;E8EzgCpD,Y9E0gCqD;;A8EtgCzD;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA,e9EggC0D;E8E//B1D,O9EggCkD;E8E//BlD,Q9EggCmD;E8E//BnD,kB9E2XA;E8E1XA,Y9EggCuD;E8E//BvD,a9EggCwD;E8E//BxD,Y9EggCuD;E8E//BvD,Y9EigCuD;;;A+E/vC7D;EACE;;AAIF;EACE;;;ACJN;EACE;;AAEA;EACE,YhF+xCiB;EgF9xCjB,QhF8xCiB;EgF7xCjB,ahF+xCoB;EgF9xCpB,gBhF8xCoB;EgF7xCpB,YhF8xCqB;;AgF5xCrB;EACE,YhF2xCmB;EgF1xCnB,chFumBI;EgFtmBJ;EACA,YhF4xCyB;;;AgFvxC/B;EACE;EACA,ahFuxC2B;EgFtxC3B,gBhFsxC2B;;AgFrxC3B;EACE;EACA;;AAEF;EACE;;;AAKF;EACE,QhF4wCoB;EgF3wCpB,WhF4wC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EACA;;AAGF;EACE;EACA;;AAGF;EACE;;;ACzCJ;EACE;EACA;EAEA;;AAEA;EACE,anFiwBiB;;AmF9vBnB;EACE,apF6hBiB;;AoF1hBnB;EACE,qBnF4zB0B;;;Aa70B5B;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AsEQF;EACE,YnFgzBqB;;AmF9yBvB;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;ACvCF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EnFFE;EmFIF;;AAEA;EAIE;;AAGF;EAGE;;AAGF;EAKE;;AAEA;EACE;;AAIJ;EAGE;;;AAQJ;EAEE;EACA;EACA;EACA;EACA;EAGA;EAEA;EACA;EACA;;AAEA;EAIE;;AAGF;EAGE;;AAGF;EAKE;;AAEA;EACE;;AAIJ;EAGE;;AAGF;ECrDA;EACA;EACA;ExF2OI,qBALI;EwFpOR;;AD2DA;EC/DA;EACA;EACA;ExF2OI,qBALI;EwFpOR;;;AD2EF;EACE;;AAEA;EAIE;;AAGF;EAGE;;AAGF;EAKE;;AAEA;EACE;;AAIJ;EAGE;;;AAOF;EC1JA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AD+JE;EAIE;;AAKF;EAGE;EAGA;;AAMF;EAKE;;A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ACE;EACA;;AAIJ;EAGE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA,iBpFwUgB;EoFvUhB;;AAEA;EAIE,iBpFqUoB;EoFpUpB;;AAGF;EAGE;EACA;;AAGF;EAKE;EACA;;AAEA;EACE;EACA;;AAIJ;EAGE;;;AAQJ;EC5VE;EACA;EACA;ExFqPI,qBALI;EwF9OR;;;ADkWF;ECtWE;EACA;EACA;ExFqPI,qBALI;EwF9OR;;;ADgXF;EACE;EAEA;;;AAOF;AAAA;EAEE;EAEA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;;AAGF;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;AAIJ;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;;AAIA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;AAKF;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;;AAEA;EACE;;AAMR;EACE;;;AAQJ;EACE;EAEA;EACA;;AAGA;EACE;;;AE5lBJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AC1BF;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAKF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAKN;EACE;EACA;EAEA;AACA;EACA;EACA;;;AAIJ;EACE;EACA;EAEA;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EAEE;EACA;;;AAKF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;AAIJ;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EAEA;EAEA;;;AAIA;AAAA;AAAA;EAGE;;;AC7IJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE;;AAGF;AAAA;AAAA;EAEE;;AAEA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;EAGE;EACA;;AAGF;AAAA;EACE;;AAEA;AAAA;AAAA;AAAA;AAAA;EAIE;;AAGF;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;EAGE;;AAIJ;AAAA;EACE;;AAKA;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;;AAKN;AAAA;AAAA;EAGE;EAEA;;;AC1FF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;;AAIJ;AAAA;EAEE;EACA;;;AAQJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EAEA;EACA;;;AAQA;AAAA;EACE;;;AC5FN;EACE;EACA;EACA;EAEA;EACA;;;AAGF;EACE;;AAEA;EACE;;;AAIJ;AAAA;EAEE;;;AAGF;EACE;EACA;;AACA;EACE;;;AAIJ;EACE;;;AAKA;EACE;;;AAKF;EACE;;;AC3CJ;EACE;;AAEA;EACE;EACA;;AAIA;EACE;EAEA;;AAEF;EACE;EAEA;;;AAKN;EACE;EACA;EAEA;;;AAKA;EACE;EACA;;;AAIJ;EACE;EACA;EAEA;;;AAIF;EACE;EACA;;;AC9CA;EAEE;EACA;EACA;EACA;EAGA;EACA;;AAGE;EACE;EACA;;AAEA;EAEE;;AAKF;EACE;;;ACzBV;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;EACA;EACA;;;AAMA;EACE;;AAKF;EACE;EACA;;AAKF;EACE;EACA;;;AAYA;EACE;;AAKF;EACE;;AAKN;EACE;EACA;EACA;;AAIA;EACE;EACA;;AAKF;EACE;EACA;;;ACzFN;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKJ;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;;AAKA;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AC7CN;EACE;;;AAGF;EACE;;;AAGF;EACE;EAEA;EACA;;;AAGF;EACE;;;AAIA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AAZN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;;AChCR;EACE;EACA;;;ACAF;EACE;;;AAGF;EACE;;AAGA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEF;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEF;EACE;;;AAKN;EACE;;AACA;EACE;;;AAKF;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AALJ;EACE;EACA;;AAEA;EACE;;;AC1DJ;EACE;;;ACHJ;EAEE;EAGA;EACA;;;ACNF;EAEE;EACA;EACA;EACA;EAGA;;AAEA;EACE;;;AAIJ;EACE;;AAEA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAIA;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AANJ;EACE;EACA;EACA;;AAEA;EACE;;;AC9CN;EACE;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;;;ACXF;EAEE;;AAGA;EACE;;;AAIJ;EACE;;;ACXE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;;AAGF;EA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GA;EACE;;;AAOJ;EACE;;;AAQF;AAAA;AAAA;AAAA;EAIE;;AAGE;AAAA;AAAA;AAAA;EACE;;;AAON;EACE;EACA;;;AAKF;EACE;;;AAUF;EACE;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA,ehHwIqB;EiHvVf;EDkNN;;ACpXE;ED6WJ;ICpMQ;;;AD6MN;EACE;;;AAOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;;;AASF;EACE;EACA;;;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;EACE;;;AAKF;EACE;;;AAMF;EACE;;;AAMF;EACE;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAQF;EACE;;;AAQF;EACE;;;AG/kBF;EFyQM,WALI;EElQR,anHukBiB;;;AmHlkBjB;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AE7QN;EFsQM;EEpQJ,anH0jBkB;EmHzjBlB,anHyiBmB;;AiHxcnB;EEpGF;IF6QM;;;;AEvPR;ECrDE;EACA;;;ADyDF;EC1DE;EACA;;;AD4DF;EACE;;AAEA;EACE,cnHikBkB;;;AmHvjBtB;EFsNM,WALI;EE/MR;;;AAIF;EACE,enH+RO;EiHhFH,WALI;;AEvMR;EACE;;;AAIJ;EACE;EACA,enHqRO;EiHhFH,WALI;EE9LR,OlHtFS;;AkHwFT;EACE;;;AE9FJ;ECIE;EAGA;;;ADDF;EACE,SrH88CkB;EqH78ClB,kBpHVM;EoHWN;EHGE;EKLE,YARW;EDKf;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EJ+PM,WALI;EIxPR,OpH5BS;;;AuHNT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECHA;EACA;EACA;EACA;EACA;;;ACwDE;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A0HhYnB;EF5CE;IACE,WxH2ae;;;A2H1brB;ECAA;EACA;EACA;EACA;EACA;EACA;EACA;;ADHE;ECYF;EACA;EACA;EACA;EACA;EACA;;;AA+CI;EACE;;;AAGF;EApCJ;EACA;;;AAcA;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AFMA;EESE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;;AAqCE;EAtDJ;EACA;;;AA2DQ;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;;;AAqEM;EAtEN;EACA;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gI+BJ,chImlBM;EgIllBN;EVvBE,YARW;;AU2Cf;EAEE;;AAIF;EACE,OhI5CO;EgI8CP;;AAQF;EAEE,kBhI5DO;EgI+DP;;AAIF;EACE;EACA;EACA,mBjI6nBkB;EiI5nBlB,OhIjEO;EkIVT,kBlIIS;EgIyEP;EACA;EACA;EACA;EACA,yBjIsYW;EiIrYX;ECtEE,YDuEF;;ACnEE;EDuDJ;ICtDM;;;ADqEN;EACE,kBjI64BwB;;AiI14B1B;EACE;EACA;EACA,mBjI0mBkB;EiIzmBlB,OhIpFO;EkIVT,kBlIIS;EgI4FP;EACA;EACA;EACA;EACA,yBjImXW;EiIlXX;ECzFE,YD0FF;;ACtFE;ED0EJ;ICzEM;;;ADwFN;EACE,kBjI03BwB;;;AiIj3B5B;EACE;EACA;EACA;EACA;EACA,ahIipBiB;EgIhpBjB,OhI/GS;EgIgHT;EACA;EACA;;AAEA;EAEE;EACA;;;AAWJ;EACE,YjIssBgB;EiIrsBhB;EhBmJI,WALI;EC7QN;;AemIF;EACE;EACA;EACA,mBjI8jBqB;;AiI3jBvB;EACE;EACA;EACA,mBjIwjBqB;;;AiIpjBzB;EACE,YjIurBgB;EiItrBhB;EhBgII,WALI;EC7QN;;AesJF;EACE;EACA;EACA,mBjI+iBqB;;AiI5iBvB;EACE;EACA;EACA,mBjIyiBqB;;;AiIjiBvB;EACE,YjIwpBW;;AiIrpBb;EACE,YjIwpBc;;AiIrpBhB;EACE,YjIwpBc;;;AiInpBlB;EACE;EACA;EACA,SjI+foB;;AiI7fpB;EACE;;AAGF;EACE;Ef/LA;;AemMF;EACE;EfpMA;;;AkBdJ;EACE;EACA;EACA;EAEA;EnB2RI,WALI;EmBnRR,apI+hBmB;EoI9hBnB,anI+vBiB;EmI9vBjB,OnIDS;EmIET,kBnIXM;EmIYN;EACA;EACA,qBpI45BwB;EoI35BxB,iBpI45BoB;EoI35BpB;ElBFE;EKLE,YARW;EWUX,YEQJ;EACA;;AFLI;EEfN;IFgBQ;;;AEMN;EACE,cnI2lBM;EmI1lBN;EbfE,YARW;;AagCf;EAEE,epImqBkB;EoIlqBlB;;AAGF;EAEE,kBnItCO;;AmI2CT;EACE;EACA;;;AAIJ;EACE,apI4pBuB;EoI3pBvB,gBpI2pBuB;EoI1pBvB,cpI2pBuB;EiHlbnB,WALI;;;AmBhOV;EACE,apIypBuB;EoIxpBvB,gBpIwpBuB;EoIvpBvB,cpIwpBuB;EiHtbnB,WALI;;;AoB5RV;EACE;EACA,YrIi2BsB;EqIh2BtB,crIi2ByB;EqIh2BzB,erIi2ByB;;AqI/1BzB;EACE;EACA;;;AAIJ;EACE,OrIq1BuB;EqIp1BvB,QrIo1BuB;EqIn1BvB;EACA;EACA,kBpIhBM;EoIiBN;EACA;EACA;EACA,QrIw1BwB;EqIv1BxB;EACA;;AAGA;EnBXE;;AmBeF;EAEE,erI+0B6B;;AqI50B/B;EACE,QrIs0B6B;;AqIn0B/B;EACE,cpI2kBM;EoI1kBN;EACA,YrIsqByB;;AqInqB3B;EACE,kBpIqkBM;EoIpkBN,cpIokBM;;AoIlkBN;EAII;;AAIJ;EAII;;AAKN;EACE,kBpIgjBM;EoI/iBN,cpI5DO;EoIiEL;;AAIJ;EACE;EACA;EACA,SrI8yBgC;;AqIvyBhC;EACE,SrIsyB8B;;;AqIxxBpC;EACE,crIiyB0B;;AqI/xB1B;EACE,OrI6xBgB;EqI5xBhB;EACA;EACA;EnB9FA;EgBHE,YGmGF;;AH/FE;EGyFJ;IHxFM;;;AGgGJ;EACE;;AAGF;EACE,qBrI4xB4B;EqIvxB1B;;;AAMR;EACE;EACA,crI+vB6B;;;AqI5vB/B;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SrIumBiB;;;AsIrvBvB;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YtI28BM;;AsI18BhC;EAA0B,YtI08BM;;AsIv8BlC;EACE;;AAGF;EACE,OtI47BqB;EsI37BrB,QtI27BqB;EsI17BrB;EHzBF,kBlImnBQ;EqIxlBN,QtI27BsB;EkHv8BtB;EKLE,YARW;EWUX,YIkBF;EACA;;AJfE;EIMJ;IJLM;;;AIgBJ;EHjCF,kBlIiuD8B;;AqI3rD9B;EACE,OtIq6BqB;EsIp6BrB,QtIq6BsB;EsIp6BtB;EACA,QtIo6BsB;EsIn6BtB,kBrItCO;EqIuCP;EpB7BA;EKLE,YARW;;Ae+Cf;EACE,OtIi6BqB;EsIh6BrB,QtIg6BqB;EmIn9BvB,kBlImnBQ;EqI9jBN,QtIi6BsB;EkHv8BtB;EKLE,YARW;EWUX,YI4CF;EACA;;AJzCE;EIiCJ;IJhCM;;;AI0CJ;EH3DF,kBlIiuD8B;;AqIjqD9B;EACE,OtI24BqB;EsI14BrB,QtI24BsB;EsI14BtB;EACA,QtI04BsB;EsIz4BtB,kBrIhEO;EqIiEP;EpBvDA;EKLE,YARW;;AeyEf;EACE;;AAEA;EACE,kBrIxEK;;AqI2EP;EACE,kBrI5EK;;;AsIXX;EACE;;AAEA;AAAA;EAEE,QvIu+BmB;EuIt+BnB,avIu+BwB;;AuIp+B1B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELDE,YKEF;;ALEE;EKXJ;ILYM;;;AKCN;EACE;;AAEA;EACE;;AAGF;EAEE,avIi9B0B;EuIh9B1B,gBvIi9B0B;;AuI98B5B;EACE,avI48B0B;EuI38B1B,gBvI48B0B;;AuIx8B9B;EACE,avIs8B4B;EuIr8B5B,gBvIs8B4B;;AuIh8B5B;AAAA;AAAA;EACE,SvIg8BwB;EuI/7BxB,WvIg8B0B;;AuI37B5B;EACE,SvIy7BwB;EuIx7BxB,WvIy7B0B;;;AwI/+BhC;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;;AAIF;AAAA;EAEE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAWN;EACE;EACA;EACA;EvBsPI,WALI;EuB/OR,axI2fmB;EwI1fnB,avI2tBiB;EuI1tBjB,OvIrCS;EuIsCT;EACA;EACA,kBvI9CS;EuI+CT;EtBpCE;;;AsB8CJ;AAAA;AAAA;AAAA;EAIE;EvBgOI,WALI;EC7QN;;;AsBuDJ;AAAA;AAAA;AAAA;EAIE;EvBuNI,WALI;EC7QN;;;AsBgEJ;AAAA;EAEE;;;AAaE;AAAA;EtB/DA;EACA;;AsBqEA;AAAA;EtBtEA;EACA;;AsBgFF;EACE;EtBpEA;EACA;;;AuBzBF;EACE;EACA;EACA,YzI2vBmB;EiHlfjB,WALI;EwBjQN,OzIw+BqB;;;AyIr+BvB;EACE;EACA;EACA;EACA;EACA;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0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1I0hBW;E0IzhBX,c1IyhBW;;A0IvhBX;EpB7FE,YARW;;AoB+Gf;EAEE,O1I2gBW;E0I1gBX;;;ADvDF;ECmBA,O1I8iBa;E0I7iBb,c1I6iBa;;A0I3iBb;EACE,OATY;EAUZ,kB1IyiBW;E0IxiBX,c1IwiBW;;A0IriBb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F;;AjBpBE;EiBWJ;IjBVM;;;AiBsBN;EACE;;AAGF;EACE;EACA,clJskBM;EkJrkBN;EACA,YlJw6CgC;;;AkJp6CpC;EACE;;;AAGF;EACE,kBlJvDM;EkJwDN;;AAEA;EjCnCE;EACA;;AiCqCA;EjCtCA;EACA;;AiC0CF;EACE;;AAIF;EjClCE;EACA;;AiCqCE;EjCtCF;EACA;;AiC0CA;EjC3CA;EACA;;;AiCgDJ;EACE;;;AASA;EACE;;AAGF;EACE;EACA;EjCxFA;;AiC2FA;EAAgB;;AAChB;EAAe;;AAEf;EjC9FA;;;AkCnBJ;EACE;EACA;EACA;EACA,epJ8+CyB;EoJ5+CzB;;;AAOA;EACE,cpJm+CwB;;AoJj+CxB;EACE;EACA,epJ+9CsB;EoJ99CtB,OnJPK;EmJQL;;AAIJ;EACE,OnJbO;;;AoJZX;EACE;EjCGA;EACA;;;AiCAF;EACE;EACA;EACA,OpJMS;EoJJT,kBpJLM;EoJMN;EnBKI,YmBJJ;;AnBQI;EmBfN;InBgBQ;;;AmBPN;EACE;EACA,OpJFO;EoJIP,kBpJVO;EoJWP,cpJVO;;AoJaT;EACE;EACA,OrJ4pCqB;EqJ3pCrB,kBpJjBO;EoJkBP,SrJ6pCuB;EqJ5pCvB,YrJyrByB;;;AqJprB3B;EACE,arJgpCsB;;AqJ7oCxB;EACE;EACA,OpJk5CsB;EkIp7CxB,kBlIm7CqB;EoJ/4CnB,cpJ+4CmB;;AoJ54CrB;EACE,OpJhCO;EoJiCP;EACA,kBpJzCI;EoJ0CJ,cpJtCO;;;AqJLT;EACE;;;AAOI;EpCqCJ;EACA;;AoChCI;EpCiBJ;EACA;;;AoChCF;EACE;ErCgSE,WALI;;AqCpRF;EpCqCJ;EACA;;AoChCI;EpCiBJ;EACA;;;AoChCF;EACE;ErCgSE,WALI;;AqCpRF;EpCqCJ;EACA;;AoChCI;EpCiBJ;EACA;;;AqC/BJ;EACE;EACA;EtC8RI,WALI;EsCvRR,avJqiBiB;EuJpiBjB;EACA,OtJNM;EsJON;EACA;EACA;ErCKE;;AqCAF;EACE;;;AAKJ;EACE;EACA;;;ACvBF;EACE;EACA;EACA,exJ65CoB;EwJ55CpB;EtCWE;;;AsCNJ;EAEE;;;AAIF;EACE,axJ0hBiB;;;AwJlhBnB;EACE,exJ84C4B;;AwJ34C5B;EACE;EACA;EACA;EACA;EACA;;;AAeF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,ODgDgB;ErB9ChB,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;ACHF;EACE;IAAK,uBzJstDS;;;AyJjtDlB;EACE;EACA,QzJ+sDgB;EyJ9sDhB;EzCwRI,WALI;EyCjRR,kBzJPS;EiHWP;EKLE,YARW;;;AmCcjB;EACE;EACA;EACA;EACA;EACA,OzJpBM;EyJqBN;EACA;EACA,kBzJ2lBQ;EiIvmBJ,YwBaJ;;AxBTI;EwBAN;IxBCQ;;;;AwBWR;EvBYE;EuBVA;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;ACvCR;EACE;EACA;EAGA;EACA;EzCSE;;;AyCLJ;EACE;EACA;;AAEA;EAEE;EACA;;;AAUJ;EACE;EACA,O1JpBS;E0JqBT;;AAGA;EAEE;EACA,O1J3BO;E0J4BP;EACA,kB1JnCO;;A0JsCT;EACE,O1JhCO;E0JiCP,kB1JvCO;;;A0JgDX;EACE;EACA;EACA;EACA,O1J9CS;E0JgDT,kB1JzDM;E0J0DN;;AAEA;EzCrCE;EACA;;AyCwCF;EzC3BE;EACA;;AyC8BF;EAEE,O1J/DO;E0JgEP;EACA,kB1JxEI;;A0J4EN;EACE;EACA,O1JkrDsB;E0JjrDtB,kB1JgrDmB;E0J/qDnB,c1J+qDmB;;A0J5qDrB;EACE;;AAEA;EACE;EACA,kB3J8XS;;;A2JhXX;EACE;;AAGE;EzCrCJ;EAZA;;AyCsDI;EzCtDJ;EAYA;;AyC+CI;EACE;;AAGF;EACE,kB3J6VK;E2J5VL;;AAEA;EACE;EACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A0H5ZX;EiC4CA;IACE;;EAGE;IzCrCJ;IAZA;;EyCsDI;IzCtDJ;IAYA;;EyC+CI;IACE;;EAGF;IACE,kB3J6VK;I2J5VL;;EAEA;IACE;IACA,mB3JwVG;;;A2J1Uf;EzC9HI;;AyCiIF;EACE;;AAEA;EACE;;;ACpJJ;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODmK2B;EClK3B,kBD+JsB;;AC5JpB;EAEE,OD6JuB;EC5JvB;;AAGF;EACE,O3JXA;E2JYA,kBDuJuB;ECtJvB,cDsJuB;;;ACpK7B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3JXA;E2JYA,kBDqJqB;ECpJrB,cDoJqB;;;AEjK7B;EACE;EACA,O7J2iDgB;E6J1iDhB,Q7J0iDgB;E6JziDhB;EACA,O5JMM;E4JLN;EACA;E3COE;E2CLF,S7J2iDkB;;A6JxiDlB;EACE,O5JFI;E4JGJ;EACA,S7JsiDsB;;A6JniDxB;EACE;EACA,Y7J2rByB;E6J1rBzB,S7JiiDsB;;A6J9hDxB;EAEE;EACA;EACA,S7J2hDyB;;;A6JvhD7B;EACE,Q7JuhDuB;;;A8J7jDzB;EACE,O9Jg1CgB;E8J/0ChB;E7CmSI,WALI;E6C3RR;EACA,kB7JDM;E6JEN;EACA;EACA,Y7J+rBa;EiHrrBX;;A4CPF;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE,e9JobgB;;;A8JhbpB;EACE;EACA;EACA;EACA,O7JvBS;E6JwBT,kB7J/BM;E6JgCN;EACA;E5CVE;EACA;;A4CYF;EACE;EACA,a7Js9Cc;;;A6Jl9ClB;EACE,S7Ji9CgB;E6Jh9ChB;;;AC1CF;EACE;EACA;EACA;EACA,S/JohCa;E+JnhCb;EACA;EACA;EACA;EACA;EAGA;;;AAOF;EACE;EACA;EACA,Q/Ju1CoB;E+Jr1CpB;;AAGA;E7BlBI,Y6BmBF;EACA,W/Jm3CmB;;AkIn4CjB;E6BcJ;I7BbM;;;A6BiBN;EACE,W/Ji3CmB;;A+J7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AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAJF;AAEF;EAEI;EAAA;;;AAYF;AAdF;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AtDYN;EsDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AChCV;ED8BM;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ACbV;EDWM;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AEzCV;AAEA;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAKF;AAEA;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;;;AAKF;AAEA;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAKF;AACA;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;;AAMJ;AAEA;EACE;IACE;;;AAKJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AAKJ;EACE;IACE;;;AAIJ;EACE;;;AAIF;AAEA;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AC5RF;EACE;IAAI;;EACJ;IAAM;;;AA2BR;AAAA;AAAA;EAGE;;;AAGF;EACE;EACA;;AAGA;EACE;EACA;EAEA;EACA;EAEA;EACA;EACA;;AAEA;EACE;;AAIA;EAIE,OCrDkB;;AD8DlB;EAIE,OCjEoB;;ADuE5B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAKJ;EAIE,cC3Gc;;AD8GhB;EAEE,cC/GkB;;ADkHpB;EACE;;AAGF;EACE,OCpHY;;ADuHd;AAAA;EAEE;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EAEE;;AAGF;EAEE;EACA;EACA;;AAOA;EACE;;AAIJ;EAGE;;AAGF;EAEE;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAKF;EACE;;AAGF;AAAA;EAxMA;;AA4ME;AAAA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE,SC5NmB;;ADkOrB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAES;EACP;;;AAGO;EACP;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKN;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAES;EACP;;;AAGF;EACE;EACA;EACA;;AAES;EACP;;;AAKN;EACE;;AAIJ;EACE;;AAGF;EACE;;AAIF;EACE;EA/SF,oBAgTsB;EA/SnB,iBA+SmB;EA9Sd,YA8Sc;;AAEpB;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAGF;EA3UJ;;AA+UI;EACE;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EApWJ,oBAqWwB;EApWhB,YAoWgB;EACpB;EACA;EA7WJ,oBA8WwB;EA7WrB,iBA6WqB;EA5WhB,YA4WgB;;AAEpB;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EAEE;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;;AAGF;EACE;EACA;;AAMF;EAEE;;;AAKN;AAAA;AAAA;EAGE;;;AAGF;EACE;EAxfA,oBAyfoB;EAxfjB,iBAwfiB;EAvfZ,YAufY;;AAEpB;EACE;;AAEA;EACE;;;AAKN;EACE;EACA;EAtgBA,oBAugBoB;EAtgBjB,iBAsgBiB;EArgBZ,YAqgBY;;AAEpB;EACE;;AAEA;EACE;;;AAMJ;EACE;;AAGF;EACE;EACA;EACA;;;AEviBJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAEJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;AAAA;EAGI;;;ACrPJ;EACE;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;AAEA;EACE;EACA;EACA;EACA,cJzBoB;;;AI4BtB;AACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAIF;EACE;;;AAIF;EACE;EACA;EACA;EACA;;;ACnGF;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EAEA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;AAEA;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAIJ;AAEA;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAIJ;AAEA;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAIJ;AAEA;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;ACxKJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;ACrBJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EAC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","file":"app.css"} \ No newline at end of file diff --git a/public/css/app.scss b/public/css/app.scss index 496dc73b13d5572609eb19b7b3338bfc7f9c3bb6..740fd605da2b9fcd731ecca73d01609dbc618892 100755 --- a/public/css/app.scss +++ b/public/css/app.scss @@ -10,7 +10,6 @@ @import "cartridge"; @import "print"; @import "callout"; -@import "main"; /* Parties applicatives */ @@ -33,10 +32,6 @@ /* Texte & nombres */ -* { - font-family: Open Sans; -} - h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-family: "Open Sans", Helvetica, Arial, sans-serif; font-weight: 200; @@ -57,6 +52,7 @@ span.number span.number-dec-00 { body { background-color: #f8f8fa; + font-family: "Open Sans"; } body.wait * { @@ -126,6 +122,23 @@ div#contenu-principal { } +/* forms */ +.form-inline .mb-2 +{ + display: inline; +} + +.form-inline .form-control +{ + width: auto; + display: inline; +} + +.form-inline .form-select +{ + width: auto; + display: inline; +} /* Multi checkbox */ diff --git a/public/css/bootstrap.css b/public/css/bootstrap.css deleted file mode 100644 index 8b98dc950428f29784fca34380f83a8c395a9aff..0000000000000000000000000000000000000000 --- a/public/css/bootstrap.css +++ /dev/null @@ -1,9785 +0,0 @@ -@charset "UTF-8"; -/*! - * Bootstrap v5.0.2 (https://getbootstrap.com/) - * Copyright 2011-2021 The Bootstrap Authors - * Copyright 2011-2021 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -:root { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -@media (prefers-reduced-motion: no-preference) { - :root { - scroll-behavior: smooth; - } -} - -body { - margin: 0; - font-family: var(--bs-font-sans-serif); - font-size: 0.9rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - background-color: #fff; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -hr { - margin: 1rem 0; - color: inherit; - background-color: currentColor; - border: 0; - opacity: 0.25; -} - -hr:not([size]) { - height: 1px; -} - -h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { - margin-top: 0; - margin-bottom: 0.5rem; - font-weight: 500; - line-height: 1.2; -} - -h1, .h1 { - font-size: calc(1.35rem + 1.2vw); -} -@media (min-width: 1200px) { - h1, .h1 { - font-size: 2.25rem; - } -} - -h2, .h2 { - font-size: calc(1.305rem + 0.66vw); -} -@media (min-width: 1200px) { - h2, .h2 { - font-size: 1.8rem; - } -} - -h3, .h3 { - font-size: calc(1.2825rem + 0.39vw); -} -@media (min-width: 1200px) { - h3, .h3 { - font-size: 1.575rem; - } -} - -h4, .h4 { - font-size: calc(1.26rem + 0.12vw); -} -@media (min-width: 1200px) { - h4, .h4 { - font-size: 1.35rem; - } -} - -h5, .h5 { - font-size: 1.125rem; -} - -h6, .h6 { - font-size: 0.9rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -abbr[title], -abbr[data-bs-original-title] { - text-decoration: underline dotted; - cursor: help; - text-decoration-skip-ink: none; -} - -address { - margin-bottom: 1rem; - font-style: normal; - line-height: inherit; -} - -ol, -ul { - padding-left: 2rem; -} - -ol, -ul, -dl { - margin-top: 0; - margin-bottom: 1rem; -} - -ol ol, -ul ul, -ol ul, -ul ol { - margin-bottom: 0; -} - -dt { - font-weight: 700; -} - -dd { - margin-bottom: 0.5rem; - margin-left: 0; -} - -blockquote { - margin: 0 0 1rem; -} - -b, -strong { - font-weight: bolder; -} - -small, .small { - font-size: 0.875em; -} - -mark, .mark { - padding: 0.2em; - background-color: #fcf8e3; -} - -sub, -sup { - position: relative; - font-size: 0.75em; - line-height: 0; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -a { - color: #0d6efd; - text-decoration: underline; -} -a:hover { - color: #0a58ca; -} - -a:not([href]):not([class]), a:not([href]):not([class]):hover { - color: inherit; - text-decoration: none; -} - -pre, -code, -kbd, -samp { - font-family: var(--bs-font-monospace); - font-size: 1em; - direction: ltr /* rtl:ignore */; - unicode-bidi: bidi-override; -} - -pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - overflow: auto; - font-size: 0.875em; -} -pre code { - font-size: inherit; - color: inherit; - word-break: normal; -} - -code { - font-size: 0.875em; - color: #d63384; - word-wrap: break-word; -} -a > code { - color: inherit; -} - -kbd { - padding: 0.2rem 0.4rem; - font-size: 0.875em; - color: #fff; - background-color: #212529; - border-radius: 0.2rem; -} -kbd kbd { - padding: 0; - font-size: 1em; - font-weight: 700; -} - -figure { - margin: 0 0 1rem; -} - -img, -svg { - vertical-align: middle; -} - -table { - caption-side: bottom; - border-collapse: collapse; -} - -caption { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - color: #6c757d; - text-align: left; -} - -th { - text-align: inherit; - text-align: -webkit-match-parent; -} - -thead, -tbody, -tfoot, -tr, -td, -th { - border-color: inherit; - border-style: solid; - border-width: 0; -} - -label { - display: inline-block; -} - -button { - border-radius: 0; -} - -button:focus:not(:focus-visible) { - outline: 0; -} - -input, -button, -select, -optgroup, -textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -select { - text-transform: none; -} - -[role=button] { - cursor: pointer; -} - -select { - word-wrap: normal; -} -select:disabled { - opacity: 1; -} - -[list]::-webkit-calendar-picker-indicator { - display: none; -} - -button, -[type=button], -[type=reset], -[type=submit] { - -webkit-appearance: button; -} -button:not(:disabled), -[type=button]:not(:disabled), -[type=reset]:not(:disabled), -[type=submit]:not(:disabled) { - cursor: pointer; -} - -::-moz-focus-inner { - padding: 0; - border-style: none; -} - -textarea { - resize: vertical; -} - -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} - -legend { - float: left; - width: 100%; - padding: 0; - margin-bottom: 0.5rem; - font-size: calc(1.275rem + 0.3vw); - line-height: inherit; -} -@media (min-width: 1200px) { - legend { - font-size: 1.5rem; - } -} -legend + * { - clear: left; -} - -::-webkit-datetime-edit-fields-wrapper, -::-webkit-datetime-edit-text, -::-webkit-datetime-edit-minute, -::-webkit-datetime-edit-hour-field, -::-webkit-datetime-edit-day-field, -::-webkit-datetime-edit-month-field, -::-webkit-datetime-edit-year-field { - padding: 0; -} - -::-webkit-inner-spin-button { - height: auto; -} - -[type=search] { - outline-offset: -2px; - -webkit-appearance: textfield; -} - -/* rtl:raw: -[type="tel"], -[type="url"], -[type="email"], -[type="number"] { - direction: ltr; -} -*/ -::-webkit-search-decoration { - -webkit-appearance: none; -} - -::-webkit-color-swatch-wrapper { - padding: 0; -} - -::file-selector-button { - font: inherit; -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button; -} - -output { - display: inline-block; -} - -iframe { - border: 0; -} - -summary { - display: list-item; - cursor: pointer; -} - -progress { - vertical-align: baseline; -} - -[hidden] { - display: none !important; -} - -.lead { - font-size: 1.125rem; - font-weight: 300; -} - -.display-1 { - font-size: calc(1.625rem + 4.5vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-1 { - font-size: 5rem; - } -} - -.display-2 { - font-size: calc(1.575rem + 3.9vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-2 { - font-size: 4.5rem; - } -} - -.display-3 { - font-size: calc(1.525rem + 3.3vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-3 { - font-size: 4rem; - } -} - -.display-4 { - font-size: calc(1.475rem + 2.7vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-4 { - font-size: 3.5rem; - } -} - -.display-5 { - font-size: calc(1.425rem + 2.1vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-5 { - font-size: 3rem; - } -} - -.display-6 { - font-size: calc(1.375rem + 1.5vw); - font-weight: 300; - line-height: 1.2; -} -@media (min-width: 1200px) { - .display-6 { - font-size: 2.5rem; - } -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline-item { - display: inline-block; -} -.list-inline-item:not(:last-child) { - margin-right: 0.5rem; -} - -.initialism { - font-size: 0.875em; - text-transform: uppercase; -} - -.blockquote { - margin-bottom: 1rem; - font-size: 1.125rem; -} -.blockquote > :last-child { - margin-bottom: 0; -} - -.blockquote-footer { - margin-top: -1rem; - margin-bottom: 1rem; - font-size: 0.875em; - color: #6c757d; -} -.blockquote-footer::before { - content: "— "; -} - -.img-fluid { - max-width: 100%; - height: auto; -} - -.img-thumbnail { - padding: 0.25rem; - background-color: #fff; - border: 1px solid #dee2e6; - border-radius: 0.25rem; - max-width: 100%; - height: auto; -} - -.figure { - display: inline-block; -} - -.figure-img { - margin-bottom: 0.5rem; - line-height: 1; -} - -.figure-caption { - font-size: 0.875em; - color: #6c757d; -} - -.container, -.container-fluid, -.container-xxl, -.container-xl, -.container-lg, -.container-md, -.container-sm { - width: 100%; - padding-right: var(--bs-gutter-x, 0.75rem); - padding-left: var(--bs-gutter-x, 0.75rem); - margin-right: auto; - margin-left: auto; -} - -@media (min-width: 576px) { - .container-sm, .container { - max-width: 540px; - } -} -@media (min-width: 768px) { - .container-md, .container-sm, .container { - max-width: 720px; - } -} -@media (min-width: 992px) { - .container-lg, .container-md, .container-sm, .container { - max-width: 960px; - } -} -@media (min-width: 1200px) { - .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1140px; - } -} -@media (min-width: 1400px) { - .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1320px; - } -} -.row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; - display: flex; - flex-wrap: wrap; - margin-top: calc(var(--bs-gutter-y) * -1); - margin-right: calc(var(--bs-gutter-x) * -0.5); - margin-left: calc(var(--bs-gutter-x) * -0.5); -} -.row > * { - flex-shrink: 0; - width: 100%; - max-width: 100%; - padding-right: calc(var(--bs-gutter-x) * 0.5); - padding-left: calc(var(--bs-gutter-x) * 0.5); - margin-top: var(--bs-gutter-y); -} - -.col { - flex: 1 0 0%; -} - -.row-cols-auto > * { - flex: 0 0 auto; - width: auto; -} - -.row-cols-1 > * { - flex: 0 0 auto; - width: 100%; -} - -.row-cols-2 > * { - flex: 0 0 auto; - width: 50%; -} - -.row-cols-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; -} - -.row-cols-4 > * { - flex: 0 0 auto; - width: 25%; -} - -.row-cols-5 > * { - flex: 0 0 auto; - width: 20%; -} - -.row-cols-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; -} - -@media (min-width: 576px) { - .col-sm { - flex: 1 0 0%; - } - .row-cols-sm-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-sm-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-sm-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-sm-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-sm-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-sm-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-sm-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } -} -@media (min-width: 768px) { - .col-md { - flex: 1 0 0%; - } - .row-cols-md-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-md-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-md-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-md-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-md-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-md-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-md-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } -} -@media (min-width: 992px) { - .col-lg { - flex: 1 0 0%; - } - .row-cols-lg-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-lg-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-lg-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-lg-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-lg-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-lg-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-lg-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } -} -@media (min-width: 1200px) { - .col-xl { - flex: 1 0 0%; - } - .row-cols-xl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } -} -@media (min-width: 1400px) { - .col-xxl { - flex: 1 0 0%; - } - .row-cols-xxl-auto > * { - flex: 0 0 auto; - width: auto; - } - .row-cols-xxl-1 > * { - flex: 0 0 auto; - width: 100%; - } - .row-cols-xxl-2 > * { - flex: 0 0 auto; - width: 50%; - } - .row-cols-xxl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - .row-cols-xxl-4 > * { - flex: 0 0 auto; - width: 25%; - } - .row-cols-xxl-5 > * { - flex: 0 0 auto; - width: 20%; - } - .row-cols-xxl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } -} -.col-auto { - flex: 0 0 auto; - width: auto; -} - -.col-1 { - flex: 0 0 auto; - width: 8.33333333%; -} - -.col-2 { - flex: 0 0 auto; - width: 16.66666667%; -} - -.col-3 { - flex: 0 0 auto; - width: 25%; -} - -.col-4 { - flex: 0 0 auto; - width: 33.33333333%; -} - -.col-5 { - flex: 0 0 auto; - width: 41.66666667%; -} - -.col-6 { - flex: 0 0 auto; - width: 50%; -} - -.col-7 { - flex: 0 0 auto; - width: 58.33333333%; -} - -.col-8 { - flex: 0 0 auto; - width: 66.66666667%; -} - -.col-9 { - flex: 0 0 auto; - width: 75%; -} - -.col-10 { - flex: 0 0 auto; - width: 83.33333333%; -} - -.col-11 { - flex: 0 0 auto; - width: 91.66666667%; -} - -.col-12 { - flex: 0 0 auto; - width: 100%; -} - -.offset-1 { - margin-left: 8.33333333%; -} - -.offset-2 { - margin-left: 16.66666667%; -} - -.offset-3 { - margin-left: 25%; -} - -.offset-4 { - margin-left: 33.33333333%; -} - -.offset-5 { - margin-left: 41.66666667%; -} - -.offset-6 { - margin-left: 50%; -} - -.offset-7 { - margin-left: 58.33333333%; -} - -.offset-8 { - margin-left: 66.66666667%; -} - -.offset-9 { - margin-left: 75%; -} - -.offset-10 { - margin-left: 83.33333333%; -} - -.offset-11 { - margin-left: 91.66666667%; -} - -.g-0, -.gx-0 { - --bs-gutter-x: 0; -} - -.g-0, -.gy-0 { - --bs-gutter-y: 0; -} - -.g-1, -.gx-1 { - --bs-gutter-x: 0.25rem; -} - -.g-1, -.gy-1 { - --bs-gutter-y: 0.25rem; -} - -.g-2, -.gx-2 { - --bs-gutter-x: 0.5rem; -} - -.g-2, -.gy-2 { - --bs-gutter-y: 0.5rem; -} - -.g-3, -.gx-3 { - --bs-gutter-x: 1rem; -} - -.g-3, -.gy-3 { - --bs-gutter-y: 1rem; -} - -.g-4, -.gx-4 { - --bs-gutter-x: 1.5rem; -} - -.g-4, -.gy-4 { - --bs-gutter-y: 1.5rem; -} - -.g-5, -.gx-5 { - --bs-gutter-x: 3rem; -} - -.g-5, -.gy-5 { - --bs-gutter-y: 3rem; -} - -@media (min-width: 576px) { - .col-sm-auto { - flex: 0 0 auto; - width: auto; - } - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-sm-3 { - flex: 0 0 auto; - width: 25%; - } - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-sm-6 { - flex: 0 0 auto; - width: 50%; - } - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-sm-9 { - flex: 0 0 auto; - width: 75%; - } - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-sm-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-sm-0 { - margin-left: 0; - } - .offset-sm-1 { - margin-left: 8.33333333%; - } - .offset-sm-2 { - margin-left: 16.66666667%; - } - .offset-sm-3 { - margin-left: 25%; - } - .offset-sm-4 { - margin-left: 33.33333333%; - } - .offset-sm-5 { - margin-left: 41.66666667%; - } - .offset-sm-6 { - margin-left: 50%; - } - .offset-sm-7 { - margin-left: 58.33333333%; - } - .offset-sm-8 { - margin-left: 66.66666667%; - } - .offset-sm-9 { - margin-left: 75%; - } - .offset-sm-10 { - margin-left: 83.33333333%; - } - .offset-sm-11 { - margin-left: 91.66666667%; - } - .g-sm-0, -.gx-sm-0 { - --bs-gutter-x: 0; - } - .g-sm-0, -.gy-sm-0 { - --bs-gutter-y: 0; - } - .g-sm-1, -.gx-sm-1 { - --bs-gutter-x: 0.25rem; - } - .g-sm-1, -.gy-sm-1 { - --bs-gutter-y: 0.25rem; - } - .g-sm-2, -.gx-sm-2 { - --bs-gutter-x: 0.5rem; - } - .g-sm-2, -.gy-sm-2 { - --bs-gutter-y: 0.5rem; - } - .g-sm-3, -.gx-sm-3 { - --bs-gutter-x: 1rem; - } - .g-sm-3, -.gy-sm-3 { - --bs-gutter-y: 1rem; - } - .g-sm-4, -.gx-sm-4 { - --bs-gutter-x: 1.5rem; - } - .g-sm-4, -.gy-sm-4 { - --bs-gutter-y: 1.5rem; - } - .g-sm-5, -.gx-sm-5 { - --bs-gutter-x: 3rem; - } - .g-sm-5, -.gy-sm-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 768px) { - .col-md-auto { - flex: 0 0 auto; - width: auto; - } - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-md-3 { - flex: 0 0 auto; - width: 25%; - } - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-md-6 { - flex: 0 0 auto; - width: 50%; - } - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-md-9 { - flex: 0 0 auto; - width: 75%; - } - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-md-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-md-0 { - margin-left: 0; - } - .offset-md-1 { - margin-left: 8.33333333%; - } - .offset-md-2 { - margin-left: 16.66666667%; - } - .offset-md-3 { - margin-left: 25%; - } - .offset-md-4 { - margin-left: 33.33333333%; - } - .offset-md-5 { - margin-left: 41.66666667%; - } - .offset-md-6 { - margin-left: 50%; - } - .offset-md-7 { - margin-left: 58.33333333%; - } - .offset-md-8 { - margin-left: 66.66666667%; - } - .offset-md-9 { - margin-left: 75%; - } - .offset-md-10 { - margin-left: 83.33333333%; - } - .offset-md-11 { - margin-left: 91.66666667%; - } - .g-md-0, -.gx-md-0 { - --bs-gutter-x: 0; - } - .g-md-0, -.gy-md-0 { - --bs-gutter-y: 0; - } - .g-md-1, -.gx-md-1 { - --bs-gutter-x: 0.25rem; - } - .g-md-1, -.gy-md-1 { - --bs-gutter-y: 0.25rem; - } - .g-md-2, -.gx-md-2 { - --bs-gutter-x: 0.5rem; - } - .g-md-2, -.gy-md-2 { - --bs-gutter-y: 0.5rem; - } - .g-md-3, -.gx-md-3 { - --bs-gutter-x: 1rem; - } - .g-md-3, -.gy-md-3 { - --bs-gutter-y: 1rem; - } - .g-md-4, -.gx-md-4 { - --bs-gutter-x: 1.5rem; - } - .g-md-4, -.gy-md-4 { - --bs-gutter-y: 1.5rem; - } - .g-md-5, -.gx-md-5 { - --bs-gutter-x: 3rem; - } - .g-md-5, -.gy-md-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 992px) { - .col-lg-auto { - flex: 0 0 auto; - width: auto; - } - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-lg-3 { - flex: 0 0 auto; - width: 25%; - } - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-lg-6 { - flex: 0 0 auto; - width: 50%; - } - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-lg-9 { - flex: 0 0 auto; - width: 75%; - } - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-lg-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-lg-0 { - margin-left: 0; - } - .offset-lg-1 { - margin-left: 8.33333333%; - } - .offset-lg-2 { - margin-left: 16.66666667%; - } - .offset-lg-3 { - margin-left: 25%; - } - .offset-lg-4 { - margin-left: 33.33333333%; - } - .offset-lg-5 { - margin-left: 41.66666667%; - } - .offset-lg-6 { - margin-left: 50%; - } - .offset-lg-7 { - margin-left: 58.33333333%; - } - .offset-lg-8 { - margin-left: 66.66666667%; - } - .offset-lg-9 { - margin-left: 75%; - } - .offset-lg-10 { - margin-left: 83.33333333%; - } - .offset-lg-11 { - margin-left: 91.66666667%; - } - .g-lg-0, -.gx-lg-0 { - --bs-gutter-x: 0; - } - .g-lg-0, -.gy-lg-0 { - --bs-gutter-y: 0; - } - .g-lg-1, -.gx-lg-1 { - --bs-gutter-x: 0.25rem; - } - .g-lg-1, -.gy-lg-1 { - --bs-gutter-y: 0.25rem; - } - .g-lg-2, -.gx-lg-2 { - --bs-gutter-x: 0.5rem; - } - .g-lg-2, -.gy-lg-2 { - --bs-gutter-y: 0.5rem; - } - .g-lg-3, -.gx-lg-3 { - --bs-gutter-x: 1rem; - } - .g-lg-3, -.gy-lg-3 { - --bs-gutter-y: 1rem; - } - .g-lg-4, -.gx-lg-4 { - --bs-gutter-x: 1.5rem; - } - .g-lg-4, -.gy-lg-4 { - --bs-gutter-y: 1.5rem; - } - .g-lg-5, -.gx-lg-5 { - --bs-gutter-x: 3rem; - } - .g-lg-5, -.gy-lg-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1200px) { - .col-xl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xl-0 { - margin-left: 0; - } - .offset-xl-1 { - margin-left: 8.33333333%; - } - .offset-xl-2 { - margin-left: 16.66666667%; - } - .offset-xl-3 { - margin-left: 25%; - } - .offset-xl-4 { - margin-left: 33.33333333%; - } - .offset-xl-5 { - margin-left: 41.66666667%; - } - .offset-xl-6 { - margin-left: 50%; - } - .offset-xl-7 { - margin-left: 58.33333333%; - } - .offset-xl-8 { - margin-left: 66.66666667%; - } - .offset-xl-9 { - margin-left: 75%; - } - .offset-xl-10 { - margin-left: 83.33333333%; - } - .offset-xl-11 { - margin-left: 91.66666667%; - } - .g-xl-0, -.gx-xl-0 { - --bs-gutter-x: 0; - } - .g-xl-0, -.gy-xl-0 { - --bs-gutter-y: 0; - } - .g-xl-1, -.gx-xl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xl-1, -.gy-xl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xl-2, -.gx-xl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xl-2, -.gy-xl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xl-3, -.gx-xl-3 { - --bs-gutter-x: 1rem; - } - .g-xl-3, -.gy-xl-3 { - --bs-gutter-y: 1rem; - } - .g-xl-4, -.gx-xl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xl-4, -.gy-xl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xl-5, -.gx-xl-5 { - --bs-gutter-x: 3rem; - } - .g-xl-5, -.gy-xl-5 { - --bs-gutter-y: 3rem; - } -} -@media (min-width: 1400px) { - .col-xxl-auto { - flex: 0 0 auto; - width: auto; - } - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - .col-xxl-3 { - flex: 0 0 auto; - width: 25%; - } - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - .col-xxl-6 { - flex: 0 0 auto; - width: 50%; - } - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - .col-xxl-9 { - flex: 0 0 auto; - width: 75%; - } - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - .col-xxl-12 { - flex: 0 0 auto; - width: 100%; - } - .offset-xxl-0 { - margin-left: 0; - } - .offset-xxl-1 { - margin-left: 8.33333333%; - } - .offset-xxl-2 { - margin-left: 16.66666667%; - } - .offset-xxl-3 { - margin-left: 25%; - } - .offset-xxl-4 { - margin-left: 33.33333333%; - } - .offset-xxl-5 { - margin-left: 41.66666667%; - } - .offset-xxl-6 { - margin-left: 50%; - } - .offset-xxl-7 { - margin-left: 58.33333333%; - } - .offset-xxl-8 { - margin-left: 66.66666667%; - } - .offset-xxl-9 { - margin-left: 75%; - } - .offset-xxl-10 { - margin-left: 83.33333333%; - } - .offset-xxl-11 { - margin-left: 91.66666667%; - } - .g-xxl-0, -.gx-xxl-0 { - --bs-gutter-x: 0; - } - .g-xxl-0, -.gy-xxl-0 { - --bs-gutter-y: 0; - } - .g-xxl-1, -.gx-xxl-1 { - --bs-gutter-x: 0.25rem; - } - .g-xxl-1, -.gy-xxl-1 { - --bs-gutter-y: 0.25rem; - } - .g-xxl-2, -.gx-xxl-2 { - --bs-gutter-x: 0.5rem; - } - .g-xxl-2, -.gy-xxl-2 { - --bs-gutter-y: 0.5rem; - } - .g-xxl-3, -.gx-xxl-3 { - --bs-gutter-x: 1rem; - } - .g-xxl-3, -.gy-xxl-3 { - --bs-gutter-y: 1rem; - } - .g-xxl-4, -.gx-xxl-4 { - --bs-gutter-x: 1.5rem; - } - .g-xxl-4, -.gy-xxl-4 { - --bs-gutter-y: 1.5rem; - } - .g-xxl-5, -.gx-xxl-5 { - --bs-gutter-x: 3rem; - } - .g-xxl-5, -.gy-xxl-5 { - --bs-gutter-y: 3rem; - } -} -.table { - --bs-table-bg: transparent; - --bs-table-accent-bg: transparent; - --bs-table-striped-color: #212529; - --bs-table-striped-bg: rgba(0, 0, 0, 0.05); - --bs-table-active-color: #212529; - --bs-table-active-bg: rgba(0, 0, 0, 0.1); - --bs-table-hover-color: #212529; - --bs-table-hover-bg: rgba(0, 0, 0, 0.075); - width: 100%; - margin-bottom: 1rem; - color: #212529; - vertical-align: top; - border-color: #dee2e6; -} -.table > :not(caption) > * > * { - padding: 0.5rem 0.5rem; - background-color: var(--bs-table-bg); - border-bottom-width: 1px; - box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); -} -.table > tbody { - vertical-align: inherit; -} -.table > thead { - vertical-align: bottom; -} -.table > :not(:last-child) > :last-child > * { - border-bottom-color: currentColor; -} - -.caption-top { - caption-side: top; -} - -.table-sm > :not(caption) > * > * { - padding: 0.25rem 0.25rem; -} - -.table-bordered > :not(caption) > * { - border-width: 1px 0; -} -.table-bordered > :not(caption) > * > * { - border-width: 0 1px; -} - -.table-borderless > :not(caption) > * > * { - border-bottom-width: 0; -} - -.table-striped > tbody > tr:nth-of-type(odd) { - --bs-table-accent-bg: var(--bs-table-striped-bg); - color: var(--bs-table-striped-color); -} - -.table-active { - --bs-table-accent-bg: var(--bs-table-active-bg); - color: var(--bs-table-active-color); -} - -.table-hover > tbody > tr:hover { - --bs-table-accent-bg: var(--bs-table-hover-bg); - color: var(--bs-table-hover-color); -} - -.table-primary { - --bs-table-bg: #cfe2ff; - --bs-table-striped-bg: #c5d7f2; - --bs-table-striped-color: #000; - --bs-table-active-bg: #bacbe6; - --bs-table-active-color: #000; - --bs-table-hover-bg: #bfd1ec; - --bs-table-hover-color: #000; - color: #000; - border-color: #bacbe6; -} - -.table-secondary { - --bs-table-bg: #e2e3e5; - --bs-table-striped-bg: #d7d8da; - --bs-table-striped-color: #000; - --bs-table-active-bg: #cbccce; - --bs-table-active-color: #000; - --bs-table-hover-bg: #d1d2d4; - --bs-table-hover-color: #000; - color: #000; - border-color: #cbccce; -} - -.table-success { - --bs-table-bg: #d1e7dd; - --bs-table-striped-bg: #c7dbd2; - --bs-table-striped-color: #000; - --bs-table-active-bg: #bcd0c7; - --bs-table-active-color: #000; - --bs-table-hover-bg: #c1d6cc; - --bs-table-hover-color: #000; - color: #000; - border-color: #bcd0c7; -} - -.table-info { - --bs-table-bg: #cff4fc; - --bs-table-striped-bg: #c5e8ef; - --bs-table-striped-color: #000; - --bs-table-active-bg: #badce3; - --bs-table-active-color: #000; - --bs-table-hover-bg: #bfe2e9; - --bs-table-hover-color: #000; - color: #000; - border-color: #badce3; -} - -.table-warning { - --bs-table-bg: #fff3cd; - --bs-table-striped-bg: #f2e7c3; - --bs-table-striped-color: #000; - --bs-table-active-bg: #e6dbb9; - --bs-table-active-color: #000; - --bs-table-hover-bg: #ece1be; - --bs-table-hover-color: #000; - color: #000; - border-color: #e6dbb9; -} - -.table-danger { - --bs-table-bg: #f8d7da; - --bs-table-striped-bg: #eccccf; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dfc2c4; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e5c7ca; - --bs-table-hover-color: #000; - color: #000; - border-color: #dfc2c4; -} - -.table-light { - --bs-table-bg: #f8f9fa; - --bs-table-striped-bg: #ecedee; - --bs-table-striped-color: #000; - --bs-table-active-bg: #dfe0e1; - --bs-table-active-color: #000; - --bs-table-hover-bg: #e5e6e7; - --bs-table-hover-color: #000; - color: #000; - border-color: #dfe0e1; -} - -.table-dark { - --bs-table-bg: #212529; - --bs-table-striped-bg: #2c3034; - --bs-table-striped-color: #fff; - --bs-table-active-bg: #373b3e; - --bs-table-active-color: #fff; - --bs-table-hover-bg: #323539; - --bs-table-hover-color: #fff; - color: #fff; - border-color: #373b3e; -} - -.table-responsive { - overflow-x: auto; - -webkit-overflow-scrolling: touch; -} - -@media (max-width: 575.98px) { - .table-responsive-sm { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 767.98px) { - .table-responsive-md { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 991.98px) { - .table-responsive-lg { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 1199.98px) { - .table-responsive-xl { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -@media (max-width: 1399.98px) { - .table-responsive-xxl { - overflow-x: auto; - -webkit-overflow-scrolling: touch; - } -} -.form-label { - margin-bottom: 0.5rem; -} - -.col-form-label { - padding-top: calc(0.375rem + 1px); - padding-bottom: calc(0.375rem + 1px); - margin-bottom: 0; - font-size: inherit; - line-height: 1.5; -} - -.col-form-label-lg { - padding-top: calc(0.5rem + 1px); - padding-bottom: calc(0.5rem + 1px); - font-size: 1.125rem; -} - -.col-form-label-sm { - padding-top: calc(0.25rem + 1px); - padding-bottom: calc(0.25rem + 1px); - font-size: 0.7875rem; -} - -.form-text { - margin-top: 0.25rem; - font-size: 0.875em; - color: #6c757d; -} - -.form-control { - display: block; - width: 100%; - padding: 0.375rem 0.75rem; - font-size: 0.9rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - appearance: none; - border-radius: 0.25rem; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-control { - transition: none; - } -} -.form-control[type=file] { - overflow: hidden; -} -.form-control[type=file]:not(:disabled):not([readonly]) { - cursor: pointer; -} -.form-control:focus { - color: #212529; - background-color: #fff; - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-control::-webkit-date-and-time-value { - height: 1.5em; -} -.form-control::placeholder { - color: #6c757d; - opacity: 1; -} -.form-control:disabled, .form-control[readonly] { - background-color: #e9ecef; - opacity: 1; -} -.form-control::file-selector-button { - padding: 0.375rem 0.75rem; - margin: -0.375rem -0.75rem; - margin-inline-end: 0.75rem; - color: #212529; - background-color: #e9ecef; - pointer-events: none; - border-color: inherit; - border-style: solid; - border-width: 0; - border-inline-end-width: 1px; - border-radius: 0; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-control::file-selector-button { - transition: none; - } -} -.form-control:hover:not(:disabled):not([readonly])::file-selector-button { - background-color: #dde0e3; -} -.form-control::-webkit-file-upload-button { - padding: 0.375rem 0.75rem; - margin: -0.375rem -0.75rem; - margin-inline-end: 0.75rem; - color: #212529; - background-color: #e9ecef; - pointer-events: none; - border-color: inherit; - border-style: solid; - border-width: 0; - border-inline-end-width: 1px; - border-radius: 0; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-control::-webkit-file-upload-button { - transition: none; - } -} -.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { - background-color: #dde0e3; -} - -.form-control-plaintext { - display: block; - width: 100%; - padding: 0.375rem 0; - margin-bottom: 0; - line-height: 1.5; - color: #212529; - background-color: transparent; - border: solid transparent; - border-width: 1px 0; -} -.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { - padding-right: 0; - padding-left: 0; -} - -.form-control-sm { - min-height: calc(1.5em + (0.5rem + 2px)); - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - border-radius: 0.2rem; -} -.form-control-sm::file-selector-button { - padding: 0.25rem 0.5rem; - margin: -0.25rem -0.5rem; - margin-inline-end: 0.5rem; -} -.form-control-sm::-webkit-file-upload-button { - padding: 0.25rem 0.5rem; - margin: -0.25rem -0.5rem; - margin-inline-end: 0.5rem; -} - -.form-control-lg { - min-height: calc(1.5em + (1rem + 2px)); - padding: 0.5rem 1rem; - font-size: 1.125rem; - border-radius: 0.3rem; -} -.form-control-lg::file-selector-button { - padding: 0.5rem 1rem; - margin: -0.5rem -1rem; - margin-inline-end: 1rem; -} -.form-control-lg::-webkit-file-upload-button { - padding: 0.5rem 1rem; - margin: -0.5rem -1rem; - margin-inline-end: 1rem; -} - -textarea.form-control { - min-height: calc(1.5em + (0.75rem + 2px)); -} -textarea.form-control-sm { - min-height: calc(1.5em + (0.5rem + 2px)); -} -textarea.form-control-lg { - min-height: calc(1.5em + (1rem + 2px)); -} - -.form-control-color { - max-width: 3rem; - height: auto; - padding: 0.375rem; -} -.form-control-color:not(:disabled):not([readonly]) { - cursor: pointer; -} -.form-control-color::-moz-color-swatch { - height: 1.5em; - border-radius: 0.25rem; -} -.form-control-color::-webkit-color-swatch { - height: 1.5em; - border-radius: 0.25rem; -} - -.form-select { - display: block; - width: 100%; - padding: 0.375rem 2.25rem 0.375rem 0.75rem; - -moz-padding-start: calc(0.75rem - 3px); - font-size: 0.9rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - background-color: #fff; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right 0.75rem center; - background-size: 16px 12px; - border: 1px solid #ced4da; - border-radius: 0.25rem; - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - appearance: none; -} -@media (prefers-reduced-motion: reduce) { - .form-select { - transition: none; - } -} -.form-select:focus { - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-select[multiple], .form-select[size]:not([size="1"]) { - padding-right: 0.75rem; - background-image: none; -} -.form-select:disabled { - background-color: #e9ecef; -} -.form-select:-moz-focusring { - color: transparent; - text-shadow: 0 0 0 #212529; -} - -.form-select-sm { - padding-top: 0.25rem; - padding-bottom: 0.25rem; - padding-left: 0.5rem; - font-size: 0.7875rem; -} - -.form-select-lg { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - font-size: 1.125rem; -} - -.form-check { - display: block; - min-height: 1.35rem; - padding-left: 1.5em; - margin-bottom: 0.125rem; -} -.form-check .form-check-input { - float: left; - margin-left: -1.5em; -} - -.form-check-input { - width: 1em; - height: 1em; - margin-top: 0.25em; - vertical-align: top; - background-color: #fff; - background-repeat: no-repeat; - background-position: center; - background-size: contain; - border: 1px solid rgba(0, 0, 0, 0.25); - appearance: none; - color-adjust: exact; -} -.form-check-input[type=checkbox] { - border-radius: 0.25em; -} -.form-check-input[type=radio] { - border-radius: 50%; -} -.form-check-input:active { - filter: brightness(90%); -} -.form-check-input:focus { - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-check-input:checked { - background-color: #0d6efd; - border-color: #0d6efd; -} -.form-check-input:checked[type=checkbox] { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"); -} -.form-check-input:checked[type=radio] { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); -} -.form-check-input[type=checkbox]:indeterminate { - background-color: #0d6efd; - border-color: #0d6efd; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); -} -.form-check-input:disabled { - pointer-events: none; - filter: none; - opacity: 0.5; -} -.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { - opacity: 0.5; -} - -.form-switch { - padding-left: 2.5em; -} -.form-switch .form-check-input { - width: 2em; - margin-left: -2.5em; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); - background-position: left center; - border-radius: 2em; - transition: background-position 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-switch .form-check-input { - transition: none; - } -} -.form-switch .form-check-input:focus { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); -} -.form-switch .form-check-input:checked { - background-position: right center; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); -} - -.form-check-inline { - display: inline-block; - margin-right: 1rem; -} - -.btn-check { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.btn-check[disabled] + .btn, .btn-check:disabled + .btn { - pointer-events: none; - filter: none; - opacity: 0.65; -} - -.form-range { - width: 100%; - height: 1.5rem; - padding: 0; - background-color: transparent; - appearance: none; -} -.form-range:focus { - outline: 0; -} -.form-range:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-range:focus::-moz-range-thumb { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.form-range::-moz-focus-outer { - border: 0; -} -.form-range::-webkit-slider-thumb { - width: 1rem; - height: 1rem; - margin-top: -0.25rem; - background-color: #0d6efd; - border: 0; - border-radius: 1rem; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - appearance: none; -} -@media (prefers-reduced-motion: reduce) { - .form-range::-webkit-slider-thumb { - transition: none; - } -} -.form-range::-webkit-slider-thumb:active { - background-color: #b6d4fe; -} -.form-range::-webkit-slider-runnable-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} -.form-range::-moz-range-thumb { - width: 1rem; - height: 1rem; - background-color: #0d6efd; - border: 0; - border-radius: 1rem; - transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - appearance: none; -} -@media (prefers-reduced-motion: reduce) { - .form-range::-moz-range-thumb { - transition: none; - } -} -.form-range::-moz-range-thumb:active { - background-color: #b6d4fe; -} -.form-range::-moz-range-track { - width: 100%; - height: 0.5rem; - color: transparent; - cursor: pointer; - background-color: #dee2e6; - border-color: transparent; - border-radius: 1rem; -} -.form-range:disabled { - pointer-events: none; -} -.form-range:disabled::-webkit-slider-thumb { - background-color: #adb5bd; -} -.form-range:disabled::-moz-range-thumb { - background-color: #adb5bd; -} - -.form-floating { - position: relative; -} -.form-floating > .form-control, -.form-floating > .form-select { - height: calc(3.5rem + 2px); - line-height: 1.25; -} -.form-floating > label { - position: absolute; - top: 0; - left: 0; - height: 100%; - padding: 1rem 0.75rem; - pointer-events: none; - border: 1px solid transparent; - transform-origin: 0 0; - transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .form-floating > label { - transition: none; - } -} -.form-floating > .form-control { - padding: 1rem 0.75rem; -} -.form-floating > .form-control::placeholder { - color: transparent; -} -.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-control:-webkit-autofill { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-select { - padding-top: 1.625rem; - padding-bottom: 0.625rem; -} -.form-floating > .form-control:focus ~ label, -.form-floating > .form-control:not(:placeholder-shown) ~ label, -.form-floating > .form-select ~ label { - opacity: 0.65; - transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); -} -.form-floating > .form-control:-webkit-autofill ~ label { - opacity: 0.65; - transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); -} - -.input-group { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: stretch; - width: 100%; -} -.input-group > .form-control, -.input-group > .form-select { - position: relative; - flex: 1 1 auto; - width: 1%; - min-width: 0; -} -.input-group > .form-control:focus, -.input-group > .form-select:focus { - z-index: 3; -} -.input-group .btn { - position: relative; - z-index: 2; -} -.input-group .btn:focus { - z-index: 3; -} - -.input-group-text { - display: flex; - align-items: center; - padding: 0.375rem 0.75rem; - font-size: 0.9rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: 0.25rem; -} - -.input-group-lg > .form-control, -.input-group-lg > .form-select, -.input-group-lg > .input-group-text, -.input-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.125rem; - border-radius: 0.3rem; -} - -.input-group-sm > .form-control, -.input-group-sm > .form-select, -.input-group-sm > .input-group-text, -.input-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - border-radius: 0.2rem; -} - -.input-group-lg > .form-select, -.input-group-sm > .form-select { - padding-right: 3rem; -} - -.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), -.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), -.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { - margin-left: -1px; - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.valid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 0.875em; - color: #198754; -} - -.valid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: 0.1rem; - font-size: 0.7875rem; - color: #fff; - background-color: rgba(25, 135, 84, 0.9); - border-radius: 0.25rem; -} - -.was-validated :valid ~ .valid-feedback, -.was-validated :valid ~ .valid-tooltip, -.is-valid ~ .valid-feedback, -.is-valid ~ .valid-tooltip { - display: block; -} - -.was-validated .form-control:valid, .form-control.is-valid { - border-color: #198754; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-control:valid:focus, .form-control.is-valid:focus { - border-color: #198754; - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); -} - -.was-validated textarea.form-control:valid, textarea.form-control.is-valid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .form-select:valid, .form-select.is-valid { - border-color: #198754; -} -.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { - padding-right: 4.125rem; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); - background-position: right 0.75rem center, center right 2.25rem; - background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-select:valid:focus, .form-select.is-valid:focus { - border-color: #198754; - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); -} - -.was-validated .form-check-input:valid, .form-check-input.is-valid { - border-color: #198754; -} -.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { - background-color: #198754; -} -.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); -} -.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { - color: #198754; -} - -.form-check-inline .form-check-input ~ .valid-feedback { - margin-left: 0.5em; -} - -.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, -.was-validated .input-group .form-select:valid, -.input-group .form-select.is-valid { - z-index: 1; -} -.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, -.was-validated .input-group .form-select:valid:focus, -.input-group .form-select.is-valid:focus { - z-index: 3; -} - -.invalid-feedback { - display: none; - width: 100%; - margin-top: 0.25rem; - font-size: 0.875em; - color: #dc3545; -} - -.invalid-tooltip { - position: absolute; - top: 100%; - z-index: 5; - display: none; - max-width: 100%; - padding: 0.25rem 0.5rem; - margin-top: 0.1rem; - font-size: 0.7875rem; - color: #fff; - background-color: rgba(220, 53, 69, 0.9); - border-radius: 0.25rem; -} - -.was-validated :invalid ~ .invalid-feedback, -.was-validated :invalid ~ .invalid-tooltip, -.is-invalid ~ .invalid-feedback, -.is-invalid ~ .invalid-tooltip { - display: block; -} - -.was-validated .form-control:invalid, .form-control.is-invalid { - border-color: #dc3545; - padding-right: calc(1.5em + 0.75rem); - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-position: right calc(0.375em + 0.1875rem) center; - background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); -} - -.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { - padding-right: calc(1.5em + 0.75rem); - background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); -} - -.was-validated .form-select:invalid, .form-select.is-invalid { - border-color: #dc3545; -} -.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { - padding-right: 4.125rem; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); - background-position: right 0.75rem center, center right 2.25rem; - background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); -} -.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { - border-color: #dc3545; - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); -} - -.was-validated .form-check-input:invalid, .form-check-input.is-invalid { - border-color: #dc3545; -} -.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { - background-color: #dc3545; -} -.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); -} -.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { - color: #dc3545; -} - -.form-check-inline .form-check-input ~ .invalid-feedback { - margin-left: 0.5em; -} - -.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, -.was-validated .input-group .form-select:invalid, -.input-group .form-select.is-invalid { - z-index: 2; -} -.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, -.was-validated .input-group .form-select:invalid:focus, -.input-group .form-select.is-invalid:focus { - z-index: 3; -} - -.btn { - display: inline-block; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 0.9rem; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} -.btn:hover { - color: #212529; -} -.btn-check:focus + .btn, .btn:focus { - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.btn:disabled, .btn.disabled, fieldset:disabled .btn { - pointer-events: none; - opacity: 0.65; -} - -.btn-primary { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.btn-primary:hover { - color: #fff; - background-color: #0b5ed7; - border-color: #0a58ca; -} -.btn-check:focus + .btn-primary, .btn-primary:focus { - color: #fff; - background-color: #0b5ed7; - border-color: #0a58ca; - box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); -} -.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #0a58ca; - border-color: #0a53be; -} -.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); -} -.btn-primary:disabled, .btn-primary.disabled { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} - -.btn-secondary { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} -.btn-secondary:hover { - color: #fff; - background-color: #5c636a; - border-color: #565e64; -} -.btn-check:focus + .btn-secondary, .btn-secondary:focus { - color: #fff; - background-color: #5c636a; - border-color: #565e64; - box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); -} -.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle { - color: #fff; - background-color: #565e64; - border-color: #51585e; -} -.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); -} -.btn-secondary:disabled, .btn-secondary.disabled { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} - -.btn-success { - color: #fff; - background-color: #198754; - border-color: #198754; -} -.btn-success:hover { - color: #fff; - background-color: #157347; - border-color: #146c43; -} -.btn-check:focus + .btn-success, .btn-success:focus { - color: #fff; - background-color: #157347; - border-color: #146c43; - box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); -} -.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle { - color: #fff; - background-color: #146c43; - border-color: #13653f; -} -.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); -} -.btn-success:disabled, .btn-success.disabled { - color: #fff; - background-color: #198754; - border-color: #198754; -} - -.btn-info { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-info:hover { - color: #000; - background-color: #31d2f2; - border-color: #25cff2; -} -.btn-check:focus + .btn-info, .btn-info:focus { - color: #000; - background-color: #31d2f2; - border-color: #25cff2; - box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); -} -.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle { - color: #000; - background-color: #3dd5f3; - border-color: #25cff2; -} -.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); -} -.btn-info:disabled, .btn-info.disabled { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; -} - -.btn-warning { - color: #000; - background-color: #ffc107; - border-color: #ffc107; -} -.btn-warning:hover { - color: #000; - background-color: #ffca2c; - border-color: #ffc720; -} -.btn-check:focus + .btn-warning, .btn-warning:focus { - color: #000; - background-color: #ffca2c; - border-color: #ffc720; - box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); -} -.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle { - color: #000; - background-color: #ffcd39; - border-color: #ffc720; -} -.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); -} -.btn-warning:disabled, .btn-warning.disabled { - color: #000; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -.btn-danger:hover { - color: #fff; - background-color: #bb2d3b; - border-color: #b02a37; -} -.btn-check:focus + .btn-danger, .btn-danger:focus { - color: #fff; - background-color: #bb2d3b; - border-color: #b02a37; - box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); -} -.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle { - color: #fff; - background-color: #b02a37; - border-color: #a52834; -} -.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); -} -.btn-danger:disabled, .btn-danger.disabled { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} - -.btn-light { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-light:hover { - color: #000; - background-color: #f9fafb; - border-color: #f9fafb; -} -.btn-check:focus + .btn-light, .btn-light:focus { - color: #000; - background-color: #f9fafb; - border-color: #f9fafb; - box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); -} -.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle { - color: #000; - background-color: #f9fafb; - border-color: #f9fafb; -} -.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); -} -.btn-light:disabled, .btn-light.disabled { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; -} - -.btn-dark { - color: #fff; - background-color: #212529; - border-color: #212529; -} -.btn-dark:hover { - color: #fff; - background-color: #1c1f23; - border-color: #1a1e21; -} -.btn-check:focus + .btn-dark, .btn-dark:focus { - color: #fff; - background-color: #1c1f23; - border-color: #1a1e21; - box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); -} -.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle { - color: #fff; - background-color: #1a1e21; - border-color: #191c1f; -} -.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); -} -.btn-dark:disabled, .btn-dark.disabled { - color: #fff; - background-color: #212529; - border-color: #212529; -} - -.btn-outline-primary { - color: #0d6efd; - border-color: #0d6efd; -} -.btn-outline-primary:hover { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); -} -.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); -} -.btn-outline-primary:disabled, .btn-outline-primary.disabled { - color: #0d6efd; - background-color: transparent; -} - -.btn-outline-secondary { - color: #6c757d; - border-color: #6c757d; -} -.btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} -.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus { - box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); -} -.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} -.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); -} -.btn-outline-secondary:disabled, .btn-outline-secondary.disabled { - color: #6c757d; - background-color: transparent; -} - -.btn-outline-success { - color: #198754; - border-color: #198754; -} -.btn-outline-success:hover { - color: #fff; - background-color: #198754; - border-color: #198754; -} -.btn-check:focus + .btn-outline-success, .btn-outline-success:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); -} -.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { - color: #fff; - background-color: #198754; - border-color: #198754; -} -.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); -} -.btn-outline-success:disabled, .btn-outline-success.disabled { - color: #198754; - background-color: transparent; -} - -.btn-outline-info { - color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-outline-info:hover { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-check:focus + .btn-outline-info, .btn-outline-info:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); -} -.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); -} -.btn-outline-info:disabled, .btn-outline-info.disabled { - color: #0dcaf0; - background-color: transparent; -} - -.btn-outline-warning { - color: #ffc107; - border-color: #ffc107; -} -.btn-outline-warning:hover { - color: #000; - background-color: #ffc107; - border-color: #ffc107; -} -.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus { - box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); -} -.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { - color: #000; - background-color: #ffc107; - border-color: #ffc107; -} -.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); -} -.btn-outline-warning:disabled, .btn-outline-warning.disabled { - color: #ffc107; - background-color: transparent; -} - -.btn-outline-danger { - color: #dc3545; - border-color: #dc3545; -} -.btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); -} -.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); -} -.btn-outline-danger:disabled, .btn-outline-danger.disabled { - color: #dc3545; - background-color: transparent; -} - -.btn-outline-light { - color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-outline-light:hover { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-check:focus + .btn-outline-light, .btn-outline-light:focus { - box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); -} -.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); -} -.btn-outline-light:disabled, .btn-outline-light.disabled { - color: #f8f9fa; - background-color: transparent; -} - -.btn-outline-dark { - color: #212529; - border-color: #212529; -} -.btn-outline-dark:hover { - color: #fff; - background-color: #212529; - border-color: #212529; -} -.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus { - box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); -} -.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { - color: #fff; - background-color: #212529; - border-color: #212529; -} -.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); -} -.btn-outline-dark:disabled, .btn-outline-dark.disabled { - color: #212529; - background-color: transparent; -} - -.btn-link { - font-weight: 400; - color: #0d6efd; - text-decoration: underline; -} -.btn-link:hover { - color: #0a58ca; -} -.btn-link:disabled, .btn-link.disabled { - color: #6c757d; -} - -.btn-lg, .btn-group-lg > .btn { - padding: 0.5rem 1rem; - font-size: 1.125rem; - border-radius: 0.3rem; -} - -.btn-sm, .btn-group-sm > .btn { - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; - border-radius: 0.2rem; -} - -.fade { - transition: opacity 0.15s linear; -} -@media (prefers-reduced-motion: reduce) { - .fade { - transition: none; - } -} -.fade:not(.show) { - opacity: 0; -} - -.collapse:not(.show) { - display: none; -} - -.collapsing { - height: 0; - overflow: hidden; - transition: height 0.35s ease; -} -@media (prefers-reduced-motion: reduce) { - .collapsing { - transition: none; - } -} - -.dropup, -.dropend, -.dropdown, -.dropstart { - position: relative; -} - -.dropdown-toggle { - white-space: nowrap; -} -.dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid; - border-right: 0.3em solid transparent; - border-bottom: 0; - border-left: 0.3em solid transparent; -} -.dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropdown-menu { - position: absolute; - z-index: 1000; - display: none; - min-width: 10rem; - padding: 0.5rem 0; - margin: 0; - font-size: 0.9rem; - color: #212529; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; -} -.dropdown-menu[data-bs-popper] { - top: 100%; - left: 0; - margin-top: 0.125rem; -} - -.dropdown-menu-start { - --bs-position: start; -} -.dropdown-menu-start[data-bs-popper] { - right: auto; - left: 0; -} - -.dropdown-menu-end { - --bs-position: end; -} -.dropdown-menu-end[data-bs-popper] { - right: 0; - left: auto; -} - -@media (min-width: 576px) { - .dropdown-menu-sm-start { - --bs-position: start; - } - .dropdown-menu-sm-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-sm-end { - --bs-position: end; - } - .dropdown-menu-sm-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 768px) { - .dropdown-menu-md-start { - --bs-position: start; - } - .dropdown-menu-md-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-md-end { - --bs-position: end; - } - .dropdown-menu-md-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 992px) { - .dropdown-menu-lg-start { - --bs-position: start; - } - .dropdown-menu-lg-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-lg-end { - --bs-position: end; - } - .dropdown-menu-lg-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 1200px) { - .dropdown-menu-xl-start { - --bs-position: start; - } - .dropdown-menu-xl-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-xl-end { - --bs-position: end; - } - .dropdown-menu-xl-end[data-bs-popper] { - right: 0; - left: auto; - } -} -@media (min-width: 1400px) { - .dropdown-menu-xxl-start { - --bs-position: start; - } - .dropdown-menu-xxl-start[data-bs-popper] { - right: auto; - left: 0; - } - .dropdown-menu-xxl-end { - --bs-position: end; - } - .dropdown-menu-xxl-end[data-bs-popper] { - right: 0; - left: auto; - } -} -.dropup .dropdown-menu[data-bs-popper] { - top: auto; - bottom: 100%; - margin-top: 0; - margin-bottom: 0.125rem; -} -.dropup .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0; - border-right: 0.3em solid transparent; - border-bottom: 0.3em solid; - border-left: 0.3em solid transparent; -} -.dropup .dropdown-toggle:empty::after { - margin-left: 0; -} - -.dropend .dropdown-menu[data-bs-popper] { - top: 0; - right: auto; - left: 100%; - margin-top: 0; - margin-left: 0.125rem; -} -.dropend .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0; - border-bottom: 0.3em solid transparent; - border-left: 0.3em solid; -} -.dropend .dropdown-toggle:empty::after { - margin-left: 0; -} -.dropend .dropdown-toggle::after { - vertical-align: 0; -} - -.dropstart .dropdown-menu[data-bs-popper] { - top: 0; - right: 100%; - left: auto; - margin-top: 0; - margin-right: 0.125rem; -} -.dropstart .dropdown-toggle::after { - display: inline-block; - margin-left: 0.255em; - vertical-align: 0.255em; - content: ""; -} -.dropstart .dropdown-toggle::after { - display: none; -} -.dropstart .dropdown-toggle::before { - display: inline-block; - margin-right: 0.255em; - vertical-align: 0.255em; - content: ""; - border-top: 0.3em solid transparent; - border-right: 0.3em solid; - border-bottom: 0.3em solid transparent; -} -.dropstart .dropdown-toggle:empty::after { - margin-left: 0; -} -.dropstart .dropdown-toggle::before { - vertical-align: 0; -} - -.dropdown-divider { - height: 0; - margin: 0.5rem 0; - overflow: hidden; - border-top: 1px solid rgba(0, 0, 0, 0.15); -} - -.dropdown-item { - display: block; - width: 100%; - padding: 0.25rem 1rem; - clear: both; - font-weight: 400; - color: #212529; - text-align: inherit; - text-decoration: none; - white-space: nowrap; - background-color: transparent; - border: 0; -} -.dropdown-item:hover, .dropdown-item:focus { - color: #1e2125; - background-color: #e9ecef; -} -.dropdown-item.active, .dropdown-item:active { - color: #fff; - text-decoration: none; - background-color: #0d6efd; -} -.dropdown-item.disabled, .dropdown-item:disabled { - color: #adb5bd; - pointer-events: none; - background-color: transparent; -} - -.dropdown-menu.show { - display: block; -} - -.dropdown-header { - display: block; - padding: 0.5rem 1rem; - margin-bottom: 0; - font-size: 0.7875rem; - color: #6c757d; - white-space: nowrap; -} - -.dropdown-item-text { - display: block; - padding: 0.25rem 1rem; - color: #212529; -} - -.dropdown-menu-dark { - color: #dee2e6; - background-color: #343a40; - border-color: rgba(0, 0, 0, 0.15); -} -.dropdown-menu-dark .dropdown-item { - color: #dee2e6; -} -.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { - color: #fff; - background-color: rgba(255, 255, 255, 0.15); -} -.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { - color: #fff; - background-color: #0d6efd; -} -.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { - color: #adb5bd; -} -.dropdown-menu-dark .dropdown-divider { - border-color: rgba(0, 0, 0, 0.15); -} -.dropdown-menu-dark .dropdown-item-text { - color: #dee2e6; -} -.dropdown-menu-dark .dropdown-header { - color: #adb5bd; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-flex; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - flex: 1 1 auto; -} -.btn-group > .btn-check:checked + .btn, -.btn-group > .btn-check:focus + .btn, -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn-check:checked + .btn, -.btn-group-vertical > .btn-check:focus + .btn, -.btn-group-vertical > .btn:hover, -.btn-group-vertical > .btn:focus, -.btn-group-vertical > .btn:active, -.btn-group-vertical > .btn.active { - z-index: 1; -} - -.btn-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: flex-start; -} -.btn-toolbar .input-group { - width: auto; -} - -.btn-group > .btn:not(:first-child), -.btn-group > .btn-group:not(:first-child) { - margin-left: -1px; -} -.btn-group > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:nth-child(n+3), -.btn-group > :not(.btn-check) + .btn, -.btn-group > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.dropdown-toggle-split { - padding-right: 0.5625rem; - padding-left: 0.5625rem; -} -.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { - margin-left: 0; -} -.dropstart .dropdown-toggle-split::before { - margin-right: 0; -} - -.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { - padding-right: 0.375rem; - padding-left: 0.375rem; -} - -.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { - padding-right: 0.75rem; - padding-left: 0.75rem; -} - -.btn-group-vertical { - flex-direction: column; - align-items: flex-start; - justify-content: center; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - width: 100%; -} -.btn-group-vertical > .btn:not(:first-child), -.btn-group-vertical > .btn-group:not(:first-child) { - margin-top: -1px; -} -.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), -.btn-group-vertical > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn ~ .btn, -.btn-group-vertical > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav { - display: flex; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav-link { - display: block; - padding: 0.5rem 1rem; - color: #0d6efd; - text-decoration: none; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .nav-link { - transition: none; - } -} -.nav-link:hover, .nav-link:focus { - color: #0a58ca; -} -.nav-link.disabled { - color: #6c757d; - pointer-events: none; - cursor: default; -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6; -} -.nav-tabs .nav-link { - margin-bottom: -1px; - background: none; - border: 1px solid transparent; - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { - border-color: #e9ecef #e9ecef #dee2e6; - isolation: isolate; -} -.nav-tabs .nav-link.disabled { - color: #6c757d; - background-color: transparent; - border-color: transparent; -} -.nav-tabs .nav-link.active, -.nav-tabs .nav-item.show .nav-link { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.nav-pills .nav-link { - background: none; - border: 0; - border-radius: 0.25rem; -} -.nav-pills .nav-link.active, -.nav-pills .show > .nav-link { - color: #fff; - background-color: #0d6efd; -} - -.nav-fill > .nav-link, -.nav-fill .nav-item { - flex: 1 1 auto; - text-align: center; -} - -.nav-justified > .nav-link, -.nav-justified .nav-item { - flex-basis: 0; - flex-grow: 1; - text-align: center; -} - -.nav-fill .nav-item .nav-link, -.nav-justified .nav-item .nav-link { - width: 100%; -} - -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} - -.navbar { - position: relative; - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: space-between; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.navbar > .container, -.navbar > .container-fluid, -.navbar > .container-sm, -.navbar > .container-md, -.navbar > .container-lg, -.navbar > .container-xl, -.navbar > .container-xxl { - display: flex; - flex-wrap: inherit; - align-items: center; - justify-content: space-between; -} -.navbar-brand { - padding-top: 0.33125rem; - padding-bottom: 0.33125rem; - margin-right: 1rem; - font-size: 1.125rem; - text-decoration: none; - white-space: nowrap; -} -.navbar-nav { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.navbar-nav .nav-link { - padding-right: 0; - padding-left: 0; -} -.navbar-nav .dropdown-menu { - position: static; -} - -.navbar-text { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} - -.navbar-collapse { - flex-basis: 100%; - flex-grow: 1; - align-items: center; -} - -.navbar-toggler { - padding: 0.25rem 0.75rem; - font-size: 1.125rem; - line-height: 1; - background-color: transparent; - border: 1px solid transparent; - border-radius: 0.25rem; - transition: box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .navbar-toggler { - transition: none; - } -} -.navbar-toggler:hover { - text-decoration: none; -} -.navbar-toggler:focus { - text-decoration: none; - outline: 0; - box-shadow: 0 0 0 0.25rem; -} - -.navbar-toggler-icon { - display: inline-block; - width: 1.5em; - height: 1.5em; - vertical-align: middle; - background-repeat: no-repeat; - background-position: center; - background-size: 100%; -} - -.navbar-nav-scroll { - max-height: var(--bs-scroll-height, 75vh); - overflow-y: auto; -} - -@media (min-width: 576px) { - .navbar-expand-sm { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-sm .navbar-nav { - flex-direction: row; - } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-sm .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-sm .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-sm .navbar-toggler { - display: none; - } -} -@media (min-width: 768px) { - .navbar-expand-md { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-md .navbar-nav { - flex-direction: row; - } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-md .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-md .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-md .navbar-toggler { - display: none; - } -} -@media (min-width: 992px) { - .navbar-expand-lg { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-lg .navbar-nav { - flex-direction: row; - } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-lg .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-lg .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-lg .navbar-toggler { - display: none; - } -} -@media (min-width: 1200px) { - .navbar-expand-xl { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-xl .navbar-nav { - flex-direction: row; - } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-xl .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-xl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-xl .navbar-toggler { - display: none; - } -} -@media (min-width: 1400px) { - .navbar-expand-xxl { - flex-wrap: nowrap; - justify-content: flex-start; - } - .navbar-expand-xxl .navbar-nav { - flex-direction: row; - } - .navbar-expand-xxl .navbar-nav .dropdown-menu { - position: absolute; - } - .navbar-expand-xxl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; - } - .navbar-expand-xxl .navbar-nav-scroll { - overflow: visible; - } - .navbar-expand-xxl .navbar-collapse { - display: flex !important; - flex-basis: auto; - } - .navbar-expand-xxl .navbar-toggler { - display: none; - } -} -.navbar-expand { - flex-wrap: nowrap; - justify-content: flex-start; -} -.navbar-expand .navbar-nav { - flex-direction: row; -} -.navbar-expand .navbar-nav .dropdown-menu { - position: absolute; -} -.navbar-expand .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; -} -.navbar-expand .navbar-nav-scroll { - overflow: visible; -} -.navbar-expand .navbar-collapse { - display: flex !important; - flex-basis: auto; -} -.navbar-expand .navbar-toggler { - display: none; -} - -.navbar-light .navbar-brand { - color: rgba(0, 0, 0, 0.9); -} -.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { - color: rgba(0, 0, 0, 0.9); -} -.navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.55); -} -.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { - color: rgba(0, 0, 0, 0.7); -} -.navbar-light .navbar-nav .nav-link.disabled { - color: rgba(0, 0, 0, 0.3); -} -.navbar-light .navbar-nav .show > .nav-link, -.navbar-light .navbar-nav .nav-link.active { - color: rgba(0, 0, 0, 0.9); -} -.navbar-light .navbar-toggler { - color: rgba(0, 0, 0, 0.55); - border-color: rgba(0, 0, 0, 0.1); -} -.navbar-light .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} -.navbar-light .navbar-text { - color: rgba(0, 0, 0, 0.55); -} -.navbar-light .navbar-text a, -.navbar-light .navbar-text a:hover, -.navbar-light .navbar-text a:focus { - color: rgba(0, 0, 0, 0.9); -} - -.navbar-dark .navbar-brand { - color: #fff; -} -.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { - color: #fff; -} -.navbar-dark .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.55); -} -.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.75); -} -.navbar-dark .navbar-nav .nav-link.disabled { - color: rgba(255, 255, 255, 0.25); -} -.navbar-dark .navbar-nav .show > .nav-link, -.navbar-dark .navbar-nav .nav-link.active { - color: #fff; -} -.navbar-dark .navbar-toggler { - color: rgba(255, 255, 255, 0.55); - border-color: rgba(255, 255, 255, 0.1); -} -.navbar-dark .navbar-toggler-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); -} -.navbar-dark .navbar-text { - color: rgba(255, 255, 255, 0.55); -} -.navbar-dark .navbar-text a, -.navbar-dark .navbar-text a:hover, -.navbar-dark .navbar-text a:focus { - color: #fff; -} - -.card { - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25rem; -} -.card > hr { - margin-right: 0; - margin-left: 0; -} -.card > .list-group { - border-top: inherit; - border-bottom: inherit; -} -.card > .list-group:first-child { - border-top-width: 0; - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} -.card > .list-group:last-child { - border-bottom-width: 0; - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} -.card > .card-header + .list-group, -.card > .list-group + .card-footer { - border-top: 0; -} - -.card-body { - flex: 1 1 auto; - padding: 1rem 1rem; -} - -.card-title { - margin-bottom: 0.5rem; -} - -.card-subtitle { - margin-top: -0.25rem; - margin-bottom: 0; -} - -.card-text:last-child { - margin-bottom: 0; -} - -.card-link:hover { - text-decoration: none; -} -.card-link + .card-link { - margin-left: 1rem; -} - -.card-header { - padding: 0.5rem 1rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 1px solid rgba(0, 0, 0, 0.125); -} -.card-header:first-child { - border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; -} - -.card-footer { - padding: 0.5rem 1rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 1px solid rgba(0, 0, 0, 0.125); -} -.card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); -} - -.card-header-tabs { - margin-right: -0.5rem; - margin-bottom: -0.5rem; - margin-left: -0.5rem; - border-bottom: 0; -} - -.card-header-pills { - margin-right: -0.5rem; - margin-left: -0.5rem; -} - -.card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1rem; - border-radius: calc(0.25rem - 1px); -} - -.card-img, -.card-img-top, -.card-img-bottom { - width: 100%; -} - -.card-img, -.card-img-top { - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} - -.card-img, -.card-img-bottom { - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} - -.card-group > .card { - margin-bottom: 0.75rem; -} -@media (min-width: 576px) { - .card-group { - display: flex; - flex-flow: row wrap; - } - .card-group > .card { - flex: 1 0 0%; - margin-bottom: 0; - } - .card-group > .card + .card { - margin-left: 0; - border-left: 0; - } - .card-group > .card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-top, -.card-group > .card:not(:last-child) .card-header { - border-top-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-bottom, -.card-group > .card:not(:last-child) .card-footer { - border-bottom-right-radius: 0; - } - .card-group > .card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-top, -.card-group > .card:not(:first-child) .card-header { - border-top-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-bottom, -.card-group > .card:not(:first-child) .card-footer { - border-bottom-left-radius: 0; - } -} - -.accordion-button { - position: relative; - display: flex; - align-items: center; - width: 100%; - padding: 1rem 1.25rem; - font-size: 0.9rem; - color: #212529; - text-align: left; - background-color: #fff; - border: 0; - border-radius: 0; - overflow-anchor: none; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; -} -@media (prefers-reduced-motion: reduce) { - .accordion-button { - transition: none; - } -} -.accordion-button:not(.collapsed) { - color: #0c63e4; - background-color: #e7f1ff; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125); -} -.accordion-button:not(.collapsed)::after { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - transform: rotate(-180deg); -} -.accordion-button::after { - flex-shrink: 0; - width: 1.25rem; - height: 1.25rem; - margin-left: auto; - content: ""; - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); - background-repeat: no-repeat; - background-size: 1.25rem; - transition: transform 0.2s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .accordion-button::after { - transition: none; - } -} -.accordion-button:hover { - z-index: 2; -} -.accordion-button:focus { - z-index: 3; - border-color: #86b7fe; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} - -.accordion-header { - margin-bottom: 0; -} - -.accordion-item { - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); -} -.accordion-item:first-of-type { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.accordion-item:first-of-type .accordion-button { - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} -.accordion-item:not(:first-of-type) { - border-top: 0; -} -.accordion-item:last-of-type { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} -.accordion-item:last-of-type .accordion-button.collapsed { - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); -} -.accordion-item:last-of-type .accordion-collapse { - border-bottom-right-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} - -.accordion-body { - padding: 1rem 1.25rem; -} - -.accordion-flush .accordion-collapse { - border-width: 0; -} -.accordion-flush .accordion-item { - border-right: 0; - border-left: 0; - border-radius: 0; -} -.accordion-flush .accordion-item:first-child { - border-top: 0; -} -.accordion-flush .accordion-item:last-child { - border-bottom: 0; -} -.accordion-flush .accordion-item .accordion-button { - border-radius: 0; -} - -.breadcrumb { - display: flex; - flex-wrap: wrap; - padding: 0 0; - margin-bottom: 1rem; - list-style: none; -} - -.breadcrumb-item + .breadcrumb-item { - padding-left: 0.5rem; -} -.breadcrumb-item + .breadcrumb-item::before { - float: left; - padding-right: 0.5rem; - color: #6c757d; - content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; -} -.breadcrumb-item.active { - color: #6c757d; -} - -.pagination { - display: flex; - padding-left: 0; - list-style: none; -} - -.page-link { - position: relative; - display: block; - color: #0d6efd; - text-decoration: none; - background-color: #fff; - border: 1px solid #dee2e6; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .page-link { - transition: none; - } -} -.page-link:hover { - z-index: 2; - color: #0a58ca; - background-color: #e9ecef; - border-color: #dee2e6; -} -.page-link:focus { - z-index: 3; - color: #0a58ca; - background-color: #e9ecef; - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} - -.page-item:not(:first-child) .page-link { - margin-left: -1px; -} -.page-item.active .page-link { - z-index: 3; - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.page-item.disabled .page-link { - color: #6c757d; - pointer-events: none; - background-color: #fff; - border-color: #dee2e6; -} - -.page-link { - padding: 0.375rem 0.75rem; -} - -.page-item:first-child .page-link { - border-top-left-radius: 0.25rem; - border-bottom-left-radius: 0.25rem; -} -.page-item:last-child .page-link { - border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; -} - -.pagination-lg .page-link { - padding: 0.75rem 1.5rem; - font-size: 1.125rem; -} -.pagination-lg .page-item:first-child .page-link { - border-top-left-radius: 0.3rem; - border-bottom-left-radius: 0.3rem; -} -.pagination-lg .page-item:last-child .page-link { - border-top-right-radius: 0.3rem; - border-bottom-right-radius: 0.3rem; -} - -.pagination-sm .page-link { - padding: 0.25rem 0.5rem; - font-size: 0.7875rem; -} -.pagination-sm .page-item:first-child .page-link { - border-top-left-radius: 0.2rem; - border-bottom-left-radius: 0.2rem; -} -.pagination-sm .page-item:last-child .page-link { - border-top-right-radius: 0.2rem; - border-bottom-right-radius: 0.2rem; -} - -.badge { - display: inline-block; - padding: 0.35em 0.65em; - font-size: 0.75em; - font-weight: 700; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25rem; -} -.badge:empty { - display: none; -} - -.btn .badge { - position: relative; - top: -1px; -} - -.alert { - position: relative; - padding: 1rem 1rem; - margin-bottom: 1rem; - border: 1px solid transparent; - border-radius: 0.25rem; -} - -.alert-heading { - color: inherit; -} - -.alert-link { - font-weight: 700; -} - -.alert-dismissible { - padding-right: 3rem; -} -.alert-dismissible .btn-close { - position: absolute; - top: 0; - right: 0; - z-index: 2; - padding: 1.25rem 1rem; -} - -.alert-primary { - color: #084298; - background-color: #cfe2ff; - border-color: #b6d4fe; -} -.alert-primary .alert-link { - color: #06357a; -} - -.alert-secondary { - color: #41464b; - background-color: #e2e3e5; - border-color: #d3d6d8; -} -.alert-secondary .alert-link { - color: #34383c; -} - -.alert-success { - color: #0f5132; - background-color: #d1e7dd; - border-color: #badbcc; -} -.alert-success .alert-link { - color: #0c4128; -} - -.alert-info { - color: #055160; - background-color: #cff4fc; - border-color: #b6effb; -} -.alert-info .alert-link { - color: #04414d; -} - -.alert-warning { - color: #664d03; - background-color: #fff3cd; - border-color: #ffecb5; -} -.alert-warning .alert-link { - color: #523e02; -} - -.alert-danger { - color: #842029; - background-color: #f8d7da; - border-color: #f5c2c7; -} -.alert-danger .alert-link { - color: #6a1a21; -} - -.alert-light { - color: #636464; - background-color: #fefefe; - border-color: #fdfdfe; -} -.alert-light .alert-link { - color: #4f5050; -} - -.alert-dark { - color: #141619; - background-color: #d3d3d4; - border-color: #bcbebf; -} -.alert-dark .alert-link { - color: #101214; -} - -@keyframes progress-bar-stripes { - 0% { - background-position-x: 1rem; - } -} -.progress { - display: flex; - height: 1rem; - overflow: hidden; - font-size: 0.675rem; - background-color: #e9ecef; - border-radius: 0.25rem; -} - -.progress-bar { - display: flex; - flex-direction: column; - justify-content: center; - overflow: hidden; - color: #fff; - text-align: center; - white-space: nowrap; - background-color: #0d6efd; - transition: width 0.6s ease; -} -@media (prefers-reduced-motion: reduce) { - .progress-bar { - transition: none; - } -} - -.progress-bar-striped { - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 1rem 1rem; -} - -.progress-bar-animated { - animation: 1s linear infinite progress-bar-stripes; -} -@media (prefers-reduced-motion: reduce) { - .progress-bar-animated { - animation: none; - } -} - -.list-group { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - border-radius: 0.25rem; -} - -.list-group-numbered { - list-style-type: none; - counter-reset: section; -} -.list-group-numbered > li::before { - content: counters(section, ".") ". "; - counter-increment: section; -} - -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; -} -.list-group-item-action:hover, .list-group-item-action:focus { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef; -} - -.list-group-item { - position: relative; - display: block; - padding: 0.5rem 1rem; - color: #212529; - text-decoration: none; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); -} -.list-group-item:first-child { - border-top-left-radius: inherit; - border-top-right-radius: inherit; -} -.list-group-item:last-child { - border-bottom-right-radius: inherit; - border-bottom-left-radius: inherit; -} -.list-group-item.disabled, .list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff; -} -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.list-group-item + .list-group-item { - border-top-width: 0; -} -.list-group-item + .list-group-item.active { - margin-top: -1px; - border-top-width: 1px; -} - -.list-group-horizontal { - flex-direction: row; -} -.list-group-horizontal > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; -} -.list-group-horizontal > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; -} -.list-group-horizontal > .list-group-item.active { - margin-top: 0; -} -.list-group-horizontal > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; -} -.list-group-horizontal > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; -} - -@media (min-width: 576px) { - .list-group-horizontal-sm { - flex-direction: row; - } - .list-group-horizontal-sm > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-sm > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-sm > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-sm > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-sm > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} -@media (min-width: 768px) { - .list-group-horizontal-md { - flex-direction: row; - } - .list-group-horizontal-md > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-md > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-md > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-md > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-md > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} -@media (min-width: 992px) { - .list-group-horizontal-lg { - flex-direction: row; - } - .list-group-horizontal-lg > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-lg > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-lg > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-lg > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-lg > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} -@media (min-width: 1200px) { - .list-group-horizontal-xl { - flex-direction: row; - } - .list-group-horizontal-xl > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-xl > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-xl > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xl > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-xl > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} -@media (min-width: 1400px) { - .list-group-horizontal-xxl { - flex-direction: row; - } - .list-group-horizontal-xxl > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-xxl > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-xxl > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xxl > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } -} -.list-group-flush { - border-radius: 0; -} -.list-group-flush > .list-group-item { - border-width: 0 0 1px; -} -.list-group-flush > .list-group-item:last-child { - border-bottom-width: 0; -} - -.list-group-item-primary { - color: #084298; - background-color: #cfe2ff; -} -.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { - color: #084298; - background-color: #bacbe6; -} -.list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #084298; - border-color: #084298; -} - -.list-group-item-secondary { - color: #41464b; - background-color: #e2e3e5; -} -.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { - color: #41464b; - background-color: #cbccce; -} -.list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #41464b; - border-color: #41464b; -} - -.list-group-item-success { - color: #0f5132; - background-color: #d1e7dd; -} -.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { - color: #0f5132; - background-color: #bcd0c7; -} -.list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #0f5132; - border-color: #0f5132; -} - -.list-group-item-info { - color: #055160; - background-color: #cff4fc; -} -.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { - color: #055160; - background-color: #badce3; -} -.list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #055160; - border-color: #055160; -} - -.list-group-item-warning { - color: #664d03; - background-color: #fff3cd; -} -.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { - color: #664d03; - background-color: #e6dbb9; -} -.list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #664d03; - border-color: #664d03; -} - -.list-group-item-danger { - color: #842029; - background-color: #f8d7da; -} -.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { - color: #842029; - background-color: #dfc2c4; -} -.list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #842029; - border-color: #842029; -} - -.list-group-item-light { - color: #636464; - background-color: #fefefe; -} -.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { - color: #636464; - background-color: #e5e5e5; -} -.list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #636464; - border-color: #636464; -} - -.list-group-item-dark { - color: #141619; - background-color: #d3d3d4; -} -.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { - color: #141619; - background-color: #bebebf; -} -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #141619; - border-color: #141619; -} - -.btn-close { - box-sizing: content-box; - width: 1em; - height: 1em; - padding: 0.25em 0.25em; - color: #000; - background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; - border: 0; - border-radius: 0.25rem; - opacity: 0.5; -} -.btn-close:hover { - color: #000; - text-decoration: none; - opacity: 0.75; -} -.btn-close:focus { - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); - opacity: 1; -} -.btn-close:disabled, .btn-close.disabled { - pointer-events: none; - user-select: none; - opacity: 0.25; -} - -.btn-close-white { - filter: invert(1) grayscale(100%) brightness(200%); -} - -.toast { - width: 350px; - max-width: 100%; - font-size: 0.875rem; - pointer-events: auto; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.1); - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; -} -.toast:not(.showing):not(.show) { - opacity: 0; -} -.toast.hide { - display: none; -} - -.toast-container { - width: max-content; - max-width: 100%; - pointer-events: none; -} -.toast-container > :not(:last-child) { - margin-bottom: 0.75rem; -} - -.toast-header { - display: flex; - align-items: center; - padding: 0.5rem 0.75rem; - color: #6c757d; - background-color: rgba(255, 255, 255, 0.85); - background-clip: padding-box; - border-bottom: 1px solid rgba(0, 0, 0, 0.05); - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); -} -.toast-header .btn-close { - margin-right: -0.375rem; - margin-left: 0.75rem; -} - -.toast-body { - padding: 0.75rem; - word-wrap: break-word; -} - -.modal { - position: fixed; - top: 0; - left: 0; - z-index: 1060; - display: none; - width: 100%; - height: 100%; - overflow-x: hidden; - overflow-y: auto; - outline: 0; -} - -.modal-dialog { - position: relative; - width: auto; - margin: 0.5rem; - pointer-events: none; -} -.modal.fade .modal-dialog { - transition: transform 0.3s ease-out; - transform: translate(0, -50px); -} -@media (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } -} -.modal.show .modal-dialog { - transform: none; -} -.modal.modal-static .modal-dialog { - transform: scale(1.02); -} - -.modal-dialog-scrollable { - height: calc(100% - 1rem); -} -.modal-dialog-scrollable .modal-content { - max-height: 100%; - overflow: hidden; -} -.modal-dialog-scrollable .modal-body { - overflow-y: auto; -} - -.modal-dialog-centered { - display: flex; - align-items: center; - min-height: calc(100% - 1rem); -} - -.modal-content { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - outline: 0; -} - -.modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1040; - width: 100vw; - height: 100vh; - background-color: #000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop.show { - opacity: 0.5; -} - -.modal-header { - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: space-between; - padding: 1rem 1rem; - border-bottom: 1px solid #dee2e6; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} -.modal-header .btn-close { - padding: 0.5rem 0.5rem; - margin: -0.5rem -0.5rem -0.5rem auto; -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5; -} - -.modal-body { - position: relative; - flex: 1 1 auto; - padding: 1rem; -} - -.modal-footer { - display: flex; - flex-wrap: wrap; - flex-shrink: 0; - align-items: center; - justify-content: flex-end; - padding: 0.75rem; - border-top: 1px solid #dee2e6; - border-bottom-right-radius: calc(0.3rem - 1px); - border-bottom-left-radius: calc(0.3rem - 1px); -} -.modal-footer > * { - margin: 0.25rem; -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } - .modal-dialog-scrollable { - height: calc(100% - 3.5rem); - } - .modal-dialog-centered { - min-height: calc(100% - 3.5rem); - } - .modal-sm { - max-width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg, -.modal-xl { - max-width: 800px; - } -} -@media (min-width: 1200px) { - .modal-xl { - max-width: 1140px; - } -} -.modal-fullscreen { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; -} -.modal-fullscreen .modal-content { - height: 100%; - border: 0; - border-radius: 0; -} -.modal-fullscreen .modal-header { - border-radius: 0; -} -.modal-fullscreen .modal-body { - overflow-y: auto; -} -.modal-fullscreen .modal-footer { - border-radius: 0; -} - -@media (max-width: 575.98px) { - .modal-fullscreen-sm-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-sm-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-sm-down .modal-header { - border-radius: 0; - } - .modal-fullscreen-sm-down .modal-body { - overflow-y: auto; - } - .modal-fullscreen-sm-down .modal-footer { - border-radius: 0; - } -} -@media (max-width: 767.98px) { - .modal-fullscreen-md-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-md-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-md-down .modal-header { - border-radius: 0; - } - .modal-fullscreen-md-down .modal-body { - overflow-y: auto; - } - .modal-fullscreen-md-down .modal-footer { - border-radius: 0; - } -} -@media (max-width: 991.98px) { - .modal-fullscreen-lg-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-lg-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-lg-down .modal-header { - border-radius: 0; - } - .modal-fullscreen-lg-down .modal-body { - overflow-y: auto; - } - .modal-fullscreen-lg-down .modal-footer { - border-radius: 0; - } -} -@media (max-width: 1199.98px) { - .modal-fullscreen-xl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-xl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-xl-down .modal-header { - border-radius: 0; - } - .modal-fullscreen-xl-down .modal-body { - overflow-y: auto; - } - .modal-fullscreen-xl-down .modal-footer { - border-radius: 0; - } -} -@media (max-width: 1399.98px) { - .modal-fullscreen-xxl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } - .modal-fullscreen-xxl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } - .modal-fullscreen-xxl-down .modal-header { - border-radius: 0; - } - .modal-fullscreen-xxl-down .modal-body { - overflow-y: auto; - } - .modal-fullscreen-xxl-down .modal-footer { - border-radius: 0; - } -} -.tooltip { - position: absolute; - z-index: 1080; - display: block; - margin: 0; - font-family: var(--bs-font-sans-serif); - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.7875rem; - word-wrap: break-word; - opacity: 0; -} -.tooltip.show { - opacity: 0.9; -} -.tooltip .tooltip-arrow { - position: absolute; - display: block; - width: 0.8rem; - height: 0.4rem; -} -.tooltip .tooltip-arrow::before { - position: absolute; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] { - padding: 0.4rem 0; -} -.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { - bottom: 0; -} -.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { - top: -1px; - border-width: 0.4rem 0.4rem 0; - border-top-color: #000; -} - -.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] { - padding: 0 0.4rem; -} -.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { - left: 0; - width: 0.4rem; - height: 0.8rem; -} -.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { - right: -1px; - border-width: 0.4rem 0.4rem 0.4rem 0; - border-right-color: #000; -} - -.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] { - padding: 0.4rem 0; -} -.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { - top: 0; -} -.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { - bottom: -1px; - border-width: 0 0.4rem 0.4rem; - border-bottom-color: #000; -} - -.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] { - padding: 0 0.4rem; -} -.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { - right: 0; - width: 0.4rem; - height: 0.8rem; -} -.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { - left: -1px; - border-width: 0.4rem 0 0.4rem 0.4rem; - border-left-color: #000; -} - -.tooltip-inner { - max-width: 200px; - padding: 0.25rem 0.5rem; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 0.25rem; -} - -.popover { - position: absolute; - top: 0; - left: 0 /* rtl:ignore */; - z-index: 1070; - display: block; - max-width: 276px; - font-family: var(--bs-font-sans-serif); - font-style: normal; - font-weight: 400; - line-height: 1.5; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - white-space: normal; - line-break: auto; - font-size: 0.7875rem; - word-wrap: break-word; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; -} -.popover .popover-arrow { - position: absolute; - display: block; - width: 1rem; - height: 0.5rem; -} -.popover .popover-arrow::before, .popover .popover-arrow::after { - position: absolute; - display: block; - content: ""; - border-color: transparent; - border-style: solid; -} - -.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { - bottom: calc(-0.5rem - 1px); -} -.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { - bottom: 0; - border-width: 0.5rem 0.5rem 0; - border-top-color: rgba(0, 0, 0, 0.25); -} -.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { - bottom: 1px; - border-width: 0.5rem 0.5rem 0; - border-top-color: #fff; -} - -.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { - left: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; -} -.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { - left: 0; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: rgba(0, 0, 0, 0.25); -} -.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { - left: 1px; - border-width: 0.5rem 0.5rem 0.5rem 0; - border-right-color: #fff; -} - -.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { - top: calc(-0.5rem - 1px); -} -.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { - top: 0; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: rgba(0, 0, 0, 0.25); -} -.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { - top: 1px; - border-width: 0 0.5rem 0.5rem 0.5rem; - border-bottom-color: #fff; -} -.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { - position: absolute; - top: 0; - left: 50%; - display: block; - width: 1rem; - margin-left: -0.5rem; - content: ""; - border-bottom: 1px solid #f0f0f0; -} - -.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { - right: calc(-0.5rem - 1px); - width: 0.5rem; - height: 1rem; -} -.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { - right: 0; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: rgba(0, 0, 0, 0.25); -} -.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { - right: 1px; - border-width: 0.5rem 0 0.5rem 0.5rem; - border-left-color: #fff; -} - -.popover-header { - padding: 0.5rem 1rem; - margin-bottom: 0; - font-size: 0.9rem; - background-color: #f0f0f0; - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); -} -.popover-header:empty { - display: none; -} - -.popover-body { - padding: 1rem 1rem; - color: #212529; -} - -.carousel { - position: relative; -} - -.carousel.pointer-event { - touch-action: pan-y; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner::after { - display: block; - clear: both; - content: ""; -} - -.carousel-item { - position: relative; - display: none; - float: left; - width: 100%; - margin-right: -100%; - backface-visibility: hidden; - transition: transform 0.6s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .carousel-item { - transition: none; - } -} - -.carousel-item.active, -.carousel-item-next, -.carousel-item-prev { - display: block; -} - -/* rtl:begin:ignore */ -.carousel-item-next:not(.carousel-item-start), -.active.carousel-item-end { - transform: translateX(100%); -} - -.carousel-item-prev:not(.carousel-item-end), -.active.carousel-item-start { - transform: translateX(-100%); -} - -/* rtl:end:ignore */ -.carousel-fade .carousel-item { - opacity: 0; - transition-property: opacity; - transform: none; -} -.carousel-fade .carousel-item.active, -.carousel-fade .carousel-item-next.carousel-item-start, -.carousel-fade .carousel-item-prev.carousel-item-end { - z-index: 1; - opacity: 1; -} -.carousel-fade .active.carousel-item-start, -.carousel-fade .active.carousel-item-end { - z-index: 0; - opacity: 0; - transition: opacity 0s 0.6s; -} -@media (prefers-reduced-motion: reduce) { - .carousel-fade .active.carousel-item-start, -.carousel-fade .active.carousel-item-end { - transition: none; - } -} - -.carousel-control-prev, -.carousel-control-next { - position: absolute; - top: 0; - bottom: 0; - z-index: 1; - display: flex; - align-items: center; - justify-content: center; - width: 15%; - padding: 0; - color: #fff; - text-align: center; - background: none; - border: 0; - opacity: 0.5; - transition: opacity 0.15s ease; -} -@media (prefers-reduced-motion: reduce) { - .carousel-control-prev, -.carousel-control-next { - transition: none; - } -} -.carousel-control-prev:hover, .carousel-control-prev:focus, -.carousel-control-next:hover, -.carousel-control-next:focus { - color: #fff; - text-decoration: none; - outline: 0; - opacity: 0.9; -} - -.carousel-control-prev { - left: 0; -} - -.carousel-control-next { - right: 0; -} - -.carousel-control-prev-icon, -.carousel-control-next-icon { - display: inline-block; - width: 2rem; - height: 2rem; - background-repeat: no-repeat; - background-position: 50%; - background-size: 100% 100%; -} - -/* rtl:options: { - "autoRename": true, - "stringMap":[ { - "name" : "prev-next", - "search" : "prev", - "replace" : "next" - } ] -} */ -.carousel-control-prev-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); -} - -.carousel-control-next-icon { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); -} - -.carousel-indicators { - position: absolute; - right: 0; - bottom: 0; - left: 0; - z-index: 2; - display: flex; - justify-content: center; - padding: 0; - margin-right: 15%; - margin-bottom: 1rem; - margin-left: 15%; - list-style: none; -} -.carousel-indicators [data-bs-target] { - box-sizing: content-box; - flex: 0 1 auto; - width: 30px; - height: 3px; - padding: 0; - margin-right: 3px; - margin-left: 3px; - text-indent: -999px; - cursor: pointer; - background-color: #fff; - background-clip: padding-box; - border: 0; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - opacity: 0.5; - transition: opacity 0.6s ease; -} -@media (prefers-reduced-motion: reduce) { - .carousel-indicators [data-bs-target] { - transition: none; - } -} -.carousel-indicators .active { - opacity: 1; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 1.25rem; - left: 15%; - padding-top: 1.25rem; - padding-bottom: 1.25rem; - color: #fff; - text-align: center; -} - -.carousel-dark .carousel-control-prev-icon, -.carousel-dark .carousel-control-next-icon { - filter: invert(1) grayscale(100); -} -.carousel-dark .carousel-indicators [data-bs-target] { - background-color: #000; -} -.carousel-dark .carousel-caption { - color: #000; -} - -@keyframes spinner-border { - to { - transform: rotate(360deg) /* rtl:ignore */; - } -} -.spinner-border { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: -0.125em; - border: 0.25em solid currentColor; - border-right-color: transparent; - border-radius: 50%; - animation: 0.75s linear infinite spinner-border; -} - -.spinner-border-sm { - width: 1rem; - height: 1rem; - border-width: 0.2em; -} - -@keyframes spinner-grow { - 0% { - transform: scale(0); - } - 50% { - opacity: 1; - transform: none; - } -} -.spinner-grow { - display: inline-block; - width: 2rem; - height: 2rem; - vertical-align: -0.125em; - background-color: currentColor; - border-radius: 50%; - opacity: 0; - animation: 0.75s linear infinite spinner-grow; -} - -.spinner-grow-sm { - width: 1rem; - height: 1rem; -} - -@media (prefers-reduced-motion: reduce) { - .spinner-border, -.spinner-grow { - animation-duration: 1.5s; - } -} -.offcanvas { - position: fixed; - bottom: 0; - z-index: 1050; - display: flex; - flex-direction: column; - max-width: 100%; - visibility: hidden; - background-color: #fff; - background-clip: padding-box; - outline: 0; - transition: transform 0.3s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .offcanvas { - transition: none; - } -} - -.offcanvas-header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 1rem 1rem; -} -.offcanvas-header .btn-close { - padding: 0.5rem 0.5rem; - margin-top: -0.5rem; - margin-right: -0.5rem; - margin-bottom: -0.5rem; -} - -.offcanvas-title { - margin-bottom: 0; - line-height: 1.5; -} - -.offcanvas-body { - flex-grow: 1; - padding: 1rem 1rem; - overflow-y: auto; -} - -.offcanvas-start { - top: 0; - left: 0; - width: 400px; - border-right: 1px solid rgba(0, 0, 0, 0.2); - transform: translateX(-100%); -} - -.offcanvas-end { - top: 0; - right: 0; - width: 400px; - border-left: 1px solid rgba(0, 0, 0, 0.2); - transform: translateX(100%); -} - -.offcanvas-top { - top: 0; - right: 0; - left: 0; - height: 30vh; - max-height: 100%; - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - transform: translateY(-100%); -} - -.offcanvas-bottom { - right: 0; - left: 0; - height: 30vh; - max-height: 100%; - border-top: 1px solid rgba(0, 0, 0, 0.2); - transform: translateY(100%); -} - -.offcanvas.show { - transform: none; -} - -.clearfix::after { - display: block; - clear: both; - content: ""; -} - -.link-primary { - color: #0d6efd; -} -.link-primary:hover, .link-primary:focus { - color: #0a58ca; -} - -.link-secondary { - color: #6c757d; -} -.link-secondary:hover, .link-secondary:focus { - color: #565e64; -} - -.link-success { - color: #198754; -} -.link-success:hover, .link-success:focus { - color: #146c43; -} - -.link-info { - color: #0dcaf0; -} -.link-info:hover, .link-info:focus { - color: #3dd5f3; -} - -.link-warning { - color: #ffc107; -} -.link-warning:hover, .link-warning:focus { - color: #ffcd39; -} - -.link-danger { - color: #dc3545; -} -.link-danger:hover, .link-danger:focus { - color: #b02a37; -} - -.link-light { - color: #f8f9fa; -} -.link-light:hover, .link-light:focus { - color: #f9fafb; -} - -.link-dark { - color: #212529; -} -.link-dark:hover, .link-dark:focus { - color: #1a1e21; -} - -.ratio { - position: relative; - width: 100%; -} -.ratio::before { - display: block; - padding-top: var(--bs-aspect-ratio); - content: ""; -} -.ratio > * { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} - -.ratio-1x1 { - --bs-aspect-ratio: 100%; -} - -.ratio-4x3 { - --bs-aspect-ratio: 75%; -} - -.ratio-16x9 { - --bs-aspect-ratio: 56.25%; -} - -.ratio-21x9 { - --bs-aspect-ratio: 42.8571428571%; -} - -.fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} - -.fixed-bottom { - position: fixed; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; -} - -.sticky-top { - position: sticky; - top: 0; - z-index: 1020; -} - -@media (min-width: 576px) { - .sticky-sm-top { - position: sticky; - top: 0; - z-index: 1020; - } -} -@media (min-width: 768px) { - .sticky-md-top { - position: sticky; - top: 0; - z-index: 1020; - } -} -@media (min-width: 992px) { - .sticky-lg-top { - position: sticky; - top: 0; - z-index: 1020; - } -} -@media (min-width: 1200px) { - .sticky-xl-top { - position: sticky; - top: 0; - z-index: 1020; - } -} -@media (min-width: 1400px) { - .sticky-xxl-top { - position: sticky; - top: 0; - z-index: 1020; - } -} -.visually-hidden, -.visually-hidden-focusable:not(:focus):not(:focus-within) { - position: absolute !important; - width: 1px !important; - height: 1px !important; - padding: 0 !important; - margin: -1px !important; - overflow: hidden !important; - clip: rect(0, 0, 0, 0) !important; - white-space: nowrap !important; - border: 0 !important; -} - -.stretched-link::after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - content: ""; -} - -.text-truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.align-baseline { - vertical-align: baseline !important; -} - -.align-top { - vertical-align: top !important; -} - -.align-middle { - vertical-align: middle !important; -} - -.align-bottom { - vertical-align: bottom !important; -} - -.align-text-bottom { - vertical-align: text-bottom !important; -} - -.align-text-top { - vertical-align: text-top !important; -} - -.float-start { - float: left !important; -} - -.float-end { - float: right !important; -} - -.float-none { - float: none !important; -} - -.overflow-auto { - overflow: auto !important; -} - -.overflow-hidden { - overflow: hidden !important; -} - -.overflow-visible { - overflow: visible !important; -} - -.overflow-scroll { - overflow: scroll !important; -} - -.d-inline { - display: inline !important; -} - -.d-inline-block { - display: inline-block !important; -} - -.d-block { - display: block !important; -} - -.d-grid { - display: grid !important; -} - -.d-table { - display: table !important; -} - -.d-table-row { - display: table-row !important; -} - -.d-table-cell { - display: table-cell !important; -} - -.d-flex { - display: flex !important; -} - -.d-inline-flex { - display: inline-flex !important; -} - -.d-none { - display: none !important; -} - -.shadow { - box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; -} - -.shadow-sm { - box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; -} - -.shadow-lg { - box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; -} - -.shadow-none { - box-shadow: none !important; -} - -.position-static { - position: static !important; -} - -.position-relative { - position: relative !important; -} - -.position-absolute { - position: absolute !important; -} - -.position-fixed { - position: fixed !important; -} - -.position-sticky { - position: sticky !important; -} - -.top-0 { - top: 0 !important; -} - -.top-50 { - top: 50% !important; -} - -.top-100 { - top: 100% !important; -} - -.bottom-0 { - bottom: 0 !important; -} - -.bottom-50 { - bottom: 50% !important; -} - -.bottom-100 { - bottom: 100% !important; -} - -.start-0 { - left: 0 !important; -} - -.start-50 { - left: 50% !important; -} - -.start-100 { - left: 100% !important; -} - -.end-0 { - right: 0 !important; -} - -.end-50 { - right: 50% !important; -} - -.end-100 { - right: 100% !important; -} - -.translate-middle { - transform: translate(-50%, -50%) !important; -} - -.translate-middle-x { - transform: translateX(-50%) !important; -} - -.translate-middle-y { - transform: translateY(-50%) !important; -} - -.border { - border: 1px solid #dee2e6 !important; -} - -.border-0 { - border: 0 !important; -} - -.border-top { - border-top: 1px solid #dee2e6 !important; -} - -.border-top-0 { - border-top: 0 !important; -} - -.border-end { - border-right: 1px solid #dee2e6 !important; -} - -.border-end-0 { - border-right: 0 !important; -} - -.border-bottom { - border-bottom: 1px solid #dee2e6 !important; -} - -.border-bottom-0 { - border-bottom: 0 !important; -} - -.border-start { - border-left: 1px solid #dee2e6 !important; -} - -.border-start-0 { - border-left: 0 !important; -} - -.border-primary { - border-color: #0d6efd !important; -} - -.border-secondary { - border-color: #6c757d !important; -} - -.border-success { - border-color: #198754 !important; -} - -.border-info { - border-color: #0dcaf0 !important; -} - -.border-warning { - border-color: #ffc107 !important; -} - -.border-danger { - border-color: #dc3545 !important; -} - -.border-light { - border-color: #f8f9fa !important; -} - -.border-dark { - border-color: #212529 !important; -} - -.border-white { - border-color: #fff !important; -} - -.border-1 { - border-width: 1px !important; -} - -.border-2 { - border-width: 2px !important; -} - -.border-3 { - border-width: 3px !important; -} - -.border-4 { - border-width: 4px !important; -} - -.border-5 { - border-width: 5px !important; -} - -.w-25 { - width: 25% !important; -} - -.w-50 { - width: 50% !important; -} - -.w-75 { - width: 75% !important; -} - -.w-100 { - width: 100% !important; -} - -.w-auto { - width: auto !important; -} - -.mw-100 { - max-width: 100% !important; -} - -.vw-100 { - width: 100vw !important; -} - -.min-vw-100 { - min-width: 100vw !important; -} - -.h-25 { - height: 25% !important; -} - -.h-50 { - height: 50% !important; -} - -.h-75 { - height: 75% !important; -} - -.h-100 { - height: 100% !important; -} - -.h-auto { - height: auto !important; -} - -.mh-100 { - max-height: 100% !important; -} - -.vh-100 { - height: 100vh !important; -} - -.min-vh-100 { - min-height: 100vh !important; -} - -.flex-fill { - flex: 1 1 auto !important; -} - -.flex-row { - flex-direction: row !important; -} - -.flex-column { - flex-direction: column !important; -} - -.flex-row-reverse { - flex-direction: row-reverse !important; -} - -.flex-column-reverse { - flex-direction: column-reverse !important; -} - -.flex-grow-0 { - flex-grow: 0 !important; -} - -.flex-grow-1 { - flex-grow: 1 !important; -} - -.flex-shrink-0 { - flex-shrink: 0 !important; -} - -.flex-shrink-1 { - flex-shrink: 1 !important; -} - -.flex-wrap { - flex-wrap: wrap !important; -} - -.flex-nowrap { - flex-wrap: nowrap !important; -} - -.flex-wrap-reverse { - flex-wrap: wrap-reverse !important; -} - -.gap-0 { - gap: 0 !important; -} - -.gap-1 { - gap: 0.25rem !important; -} - -.gap-2 { - gap: 0.5rem !important; -} - -.gap-3 { - gap: 1rem !important; -} - -.gap-4 { - gap: 1.5rem !important; -} - -.gap-5 { - gap: 3rem !important; -} - -.justify-content-start { - justify-content: flex-start !important; -} - -.justify-content-end { - justify-content: flex-end !important; -} - -.justify-content-center { - justify-content: center !important; -} - -.justify-content-between { - justify-content: space-between !important; -} - -.justify-content-around { - justify-content: space-around !important; -} - -.justify-content-evenly { - justify-content: space-evenly !important; -} - -.align-items-start { - align-items: flex-start !important; -} - -.align-items-end { - align-items: flex-end !important; -} - -.align-items-center { - align-items: center !important; -} - -.align-items-baseline { - align-items: baseline !important; -} - -.align-items-stretch { - align-items: stretch !important; -} - -.align-content-start { - align-content: flex-start !important; -} - -.align-content-end { - align-content: flex-end !important; -} - -.align-content-center { - align-content: center !important; -} - -.align-content-between { - align-content: space-between !important; -} - -.align-content-around { - align-content: space-around !important; -} - -.align-content-stretch { - align-content: stretch !important; -} - -.align-self-auto { - align-self: auto !important; -} - -.align-self-start { - align-self: flex-start !important; -} - -.align-self-end { - align-self: flex-end !important; -} - -.align-self-center { - align-self: center !important; -} - -.align-self-baseline { - align-self: baseline !important; -} - -.align-self-stretch { - align-self: stretch !important; -} - -.order-first { - order: -1 !important; -} - -.order-0 { - order: 0 !important; -} - -.order-1 { - order: 1 !important; -} - -.order-2 { - order: 2 !important; -} - -.order-3 { - order: 3 !important; -} - -.order-4 { - order: 4 !important; -} - -.order-5 { - order: 5 !important; -} - -.order-last { - order: 6 !important; -} - -.m-0 { - margin: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.m-3 { - margin: 1rem !important; -} - -.m-4 { - margin: 1.5rem !important; -} - -.m-5 { - margin: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mx-0 { - margin-right: 0 !important; - margin-left: 0 !important; -} - -.mx-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; -} - -.mx-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; -} - -.mx-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; -} - -.mx-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; -} - -.mx-auto { - margin-right: auto !important; - margin-left: auto !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.my-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.my-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.my-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mt-3 { - margin-top: 1rem !important; -} - -.mt-4 { - margin-top: 1.5rem !important; -} - -.mt-5 { - margin-top: 3rem !important; -} - -.mt-auto { - margin-top: auto !important; -} - -.me-0 { - margin-right: 0 !important; -} - -.me-1 { - margin-right: 0.25rem !important; -} - -.me-2 { - margin-right: 0.5rem !important; -} - -.me-3 { - margin-right: 1rem !important; -} - -.me-4 { - margin-right: 1.5rem !important; -} - -.me-5 { - margin-right: 3rem !important; -} - -.me-auto { - margin-right: auto !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.mb-3 { - margin-bottom: 1rem !important; -} - -.mb-4 { - margin-bottom: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 3rem !important; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ms-0 { - margin-left: 0 !important; -} - -.ms-1 { - margin-left: 0.25rem !important; -} - -.ms-2 { - margin-left: 0.5rem !important; -} - -.ms-3 { - margin-left: 1rem !important; -} - -.ms-4 { - margin-left: 1.5rem !important; -} - -.ms-5 { - margin-left: 3rem !important; -} - -.ms-auto { - margin-left: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.p-3 { - padding: 1rem !important; -} - -.p-4 { - padding: 1.5rem !important; -} - -.p-5 { - padding: 3rem !important; -} - -.px-0 { - padding-right: 0 !important; - padding-left: 0 !important; -} - -.px-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; -} - -.px-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; -} - -.px-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; -} - -.px-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; -} - -.px-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.py-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.py-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.py-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pt-3 { - padding-top: 1rem !important; -} - -.pt-4 { - padding-top: 1.5rem !important; -} - -.pt-5 { - padding-top: 3rem !important; -} - -.pe-0 { - padding-right: 0 !important; -} - -.pe-1 { - padding-right: 0.25rem !important; -} - -.pe-2 { - padding-right: 0.5rem !important; -} - -.pe-3 { - padding-right: 1rem !important; -} - -.pe-4 { - padding-right: 1.5rem !important; -} - -.pe-5 { - padding-right: 3rem !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pb-3 { - padding-bottom: 1rem !important; -} - -.pb-4 { - padding-bottom: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 3rem !important; -} - -.ps-0 { - padding-left: 0 !important; -} - -.ps-1 { - padding-left: 0.25rem !important; -} - -.ps-2 { - padding-left: 0.5rem !important; -} - -.ps-3 { - padding-left: 1rem !important; -} - -.ps-4 { - padding-left: 1.5rem !important; -} - -.ps-5 { - padding-left: 3rem !important; -} - -.font-monospace { - font-family: var(--bs-font-monospace) !important; -} - -.fs-1 { - font-size: calc(1.35rem + 1.2vw) !important; -} - -.fs-2 { - font-size: calc(1.305rem + 0.66vw) !important; -} - -.fs-3 { - font-size: calc(1.2825rem + 0.39vw) !important; -} - -.fs-4 { - font-size: calc(1.26rem + 0.12vw) !important; -} - -.fs-5 { - font-size: 1.125rem !important; -} - -.fs-6 { - font-size: 0.9rem !important; -} - -.fst-italic { - font-style: italic !important; -} - -.fst-normal { - font-style: normal !important; -} - -.fw-light { - font-weight: 300 !important; -} - -.fw-lighter { - font-weight: lighter !important; -} - -.fw-normal { - font-weight: 400 !important; -} - -.fw-bold { - font-weight: 700 !important; -} - -.fw-bolder { - font-weight: bolder !important; -} - -.lh-1 { - line-height: 1 !important; -} - -.lh-sm { - line-height: 1.25 !important; -} - -.lh-base { - line-height: 1.5 !important; -} - -.lh-lg { - line-height: 2 !important; -} - -.text-start { - text-align: left !important; -} - -.text-end { - text-align: right !important; -} - -.text-center { - text-align: center !important; -} - -.text-decoration-none { - text-decoration: none !important; -} - -.text-decoration-underline { - text-decoration: underline !important; -} - -.text-decoration-line-through { - text-decoration: line-through !important; -} - -.text-lowercase { - text-transform: lowercase !important; -} - -.text-uppercase { - text-transform: uppercase !important; -} - -.text-capitalize { - text-transform: capitalize !important; -} - -.text-wrap { - white-space: normal !important; -} - -.text-nowrap { - white-space: nowrap !important; -} - -/* rtl:begin:remove */ -.text-break { - word-wrap: break-word !important; - word-break: break-word !important; -} - -/* rtl:end:remove */ -.text-primary { - color: #0d6efd !important; -} - -.text-secondary { - color: #6c757d !important; -} - -.text-success { - color: #198754 !important; -} - -.text-info { - color: #0dcaf0 !important; -} - -.text-warning { - color: #ffc107 !important; -} - -.text-danger { - color: #dc3545 !important; -} - -.text-light { - color: #f8f9fa !important; -} - -.text-dark { - color: #212529 !important; -} - -.text-white { - color: #fff !important; -} - -.text-body { - color: #212529 !important; -} - -.text-muted { - color: #6c757d !important; -} - -.text-black-50 { - color: rgba(0, 0, 0, 0.5) !important; -} - -.text-white-50 { - color: rgba(255, 255, 255, 0.5) !important; -} - -.text-reset { - color: inherit !important; -} - -.bg-primary { - background-color: #0d6efd !important; -} - -.bg-secondary { - background-color: #6c757d !important; -} - -.bg-success { - background-color: #198754 !important; -} - -.bg-info { - background-color: #0dcaf0 !important; -} - -.bg-warning { - background-color: #ffc107 !important; -} - -.bg-danger { - background-color: #dc3545 !important; -} - -.bg-light { - background-color: #f8f9fa !important; -} - -.bg-dark { - background-color: #212529 !important; -} - -.bg-body { - background-color: #fff !important; -} - -.bg-white { - background-color: #fff !important; -} - -.bg-transparent { - background-color: transparent !important; -} - -.bg-gradient { - background-image: var(--bs-gradient) !important; -} - -.user-select-all { - user-select: all !important; -} - -.user-select-auto { - user-select: auto !important; -} - -.user-select-none { - user-select: none !important; -} - -.pe-none { - pointer-events: none !important; -} - -.pe-auto { - pointer-events: auto !important; -} - -.rounded { - border-radius: 0.25rem !important; -} - -.rounded-0 { - border-radius: 0 !important; -} - -.rounded-1 { - border-radius: 0.2rem !important; -} - -.rounded-2 { - border-radius: 0.25rem !important; -} - -.rounded-3 { - border-radius: 0.3rem !important; -} - -.rounded-circle { - border-radius: 50% !important; -} - -.rounded-pill { - border-radius: 50rem !important; -} - -.rounded-top { - border-top-left-radius: 0.25rem !important; - border-top-right-radius: 0.25rem !important; -} - -.rounded-end { - border-top-right-radius: 0.25rem !important; - border-bottom-right-radius: 0.25rem !important; -} - -.rounded-bottom { - border-bottom-right-radius: 0.25rem !important; - border-bottom-left-radius: 0.25rem !important; -} - -.rounded-start { - border-bottom-left-radius: 0.25rem !important; - border-top-left-radius: 0.25rem !important; -} - -.visible { - visibility: visible !important; -} - -.invisible { - visibility: hidden !important; -} - -@media (min-width: 576px) { - .float-sm-start { - float: left !important; - } - .float-sm-end { - float: right !important; - } - .float-sm-none { - float: none !important; - } - .d-sm-inline { - display: inline !important; - } - .d-sm-inline-block { - display: inline-block !important; - } - .d-sm-block { - display: block !important; - } - .d-sm-grid { - display: grid !important; - } - .d-sm-table { - display: table !important; - } - .d-sm-table-row { - display: table-row !important; - } - .d-sm-table-cell { - display: table-cell !important; - } - .d-sm-flex { - display: flex !important; - } - .d-sm-inline-flex { - display: inline-flex !important; - } - .d-sm-none { - display: none !important; - } - .flex-sm-fill { - flex: 1 1 auto !important; - } - .flex-sm-row { - flex-direction: row !important; - } - .flex-sm-column { - flex-direction: column !important; - } - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - .flex-sm-wrap { - flex-wrap: wrap !important; - } - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .gap-sm-0 { - gap: 0 !important; - } - .gap-sm-1 { - gap: 0.25rem !important; - } - .gap-sm-2 { - gap: 0.5rem !important; - } - .gap-sm-3 { - gap: 1rem !important; - } - .gap-sm-4 { - gap: 1.5rem !important; - } - .gap-sm-5 { - gap: 3rem !important; - } - .justify-content-sm-start { - justify-content: flex-start !important; - } - .justify-content-sm-end { - justify-content: flex-end !important; - } - .justify-content-sm-center { - justify-content: center !important; - } - .justify-content-sm-between { - justify-content: space-between !important; - } - .justify-content-sm-around { - justify-content: space-around !important; - } - .justify-content-sm-evenly { - justify-content: space-evenly !important; - } - .align-items-sm-start { - align-items: flex-start !important; - } - .align-items-sm-end { - align-items: flex-end !important; - } - .align-items-sm-center { - align-items: center !important; - } - .align-items-sm-baseline { - align-items: baseline !important; - } - .align-items-sm-stretch { - align-items: stretch !important; - } - .align-content-sm-start { - align-content: flex-start !important; - } - .align-content-sm-end { - align-content: flex-end !important; - } - .align-content-sm-center { - align-content: center !important; - } - .align-content-sm-between { - align-content: space-between !important; - } - .align-content-sm-around { - align-content: space-around !important; - } - .align-content-sm-stretch { - align-content: stretch !important; - } - .align-self-sm-auto { - align-self: auto !important; - } - .align-self-sm-start { - align-self: flex-start !important; - } - .align-self-sm-end { - align-self: flex-end !important; - } - .align-self-sm-center { - align-self: center !important; - } - .align-self-sm-baseline { - align-self: baseline !important; - } - .align-self-sm-stretch { - align-self: stretch !important; - } - .order-sm-first { - order: -1 !important; - } - .order-sm-0 { - order: 0 !important; - } - .order-sm-1 { - order: 1 !important; - } - .order-sm-2 { - order: 2 !important; - } - .order-sm-3 { - order: 3 !important; - } - .order-sm-4 { - order: 4 !important; - } - .order-sm-5 { - order: 5 !important; - } - .order-sm-last { - order: 6 !important; - } - .m-sm-0 { - margin: 0 !important; - } - .m-sm-1 { - margin: 0.25rem !important; - } - .m-sm-2 { - margin: 0.5rem !important; - } - .m-sm-3 { - margin: 1rem !important; - } - .m-sm-4 { - margin: 1.5rem !important; - } - .m-sm-5 { - margin: 3rem !important; - } - .m-sm-auto { - margin: auto !important; - } - .mx-sm-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-sm-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-sm-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-sm-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-sm-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-sm-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-sm-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-sm-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-sm-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-sm-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-sm-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-sm-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-sm-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-sm-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-sm-0 { - margin-top: 0 !important; - } - .mt-sm-1 { - margin-top: 0.25rem !important; - } - .mt-sm-2 { - margin-top: 0.5rem !important; - } - .mt-sm-3 { - margin-top: 1rem !important; - } - .mt-sm-4 { - margin-top: 1.5rem !important; - } - .mt-sm-5 { - margin-top: 3rem !important; - } - .mt-sm-auto { - margin-top: auto !important; - } - .me-sm-0 { - margin-right: 0 !important; - } - .me-sm-1 { - margin-right: 0.25rem !important; - } - .me-sm-2 { - margin-right: 0.5rem !important; - } - .me-sm-3 { - margin-right: 1rem !important; - } - .me-sm-4 { - margin-right: 1.5rem !important; - } - .me-sm-5 { - margin-right: 3rem !important; - } - .me-sm-auto { - margin-right: auto !important; - } - .mb-sm-0 { - margin-bottom: 0 !important; - } - .mb-sm-1 { - margin-bottom: 0.25rem !important; - } - .mb-sm-2 { - margin-bottom: 0.5rem !important; - } - .mb-sm-3 { - margin-bottom: 1rem !important; - } - .mb-sm-4 { - margin-bottom: 1.5rem !important; - } - .mb-sm-5 { - margin-bottom: 3rem !important; - } - .mb-sm-auto { - margin-bottom: auto !important; - } - .ms-sm-0 { - margin-left: 0 !important; - } - .ms-sm-1 { - margin-left: 0.25rem !important; - } - .ms-sm-2 { - margin-left: 0.5rem !important; - } - .ms-sm-3 { - margin-left: 1rem !important; - } - .ms-sm-4 { - margin-left: 1.5rem !important; - } - .ms-sm-5 { - margin-left: 3rem !important; - } - .ms-sm-auto { - margin-left: auto !important; - } - .p-sm-0 { - padding: 0 !important; - } - .p-sm-1 { - padding: 0.25rem !important; - } - .p-sm-2 { - padding: 0.5rem !important; - } - .p-sm-3 { - padding: 1rem !important; - } - .p-sm-4 { - padding: 1.5rem !important; - } - .p-sm-5 { - padding: 3rem !important; - } - .px-sm-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-sm-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-sm-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-sm-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-sm-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-sm-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-sm-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-sm-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-sm-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-sm-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-sm-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-sm-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-sm-0 { - padding-top: 0 !important; - } - .pt-sm-1 { - padding-top: 0.25rem !important; - } - .pt-sm-2 { - padding-top: 0.5rem !important; - } - .pt-sm-3 { - padding-top: 1rem !important; - } - .pt-sm-4 { - padding-top: 1.5rem !important; - } - .pt-sm-5 { - padding-top: 3rem !important; - } - .pe-sm-0 { - padding-right: 0 !important; - } - .pe-sm-1 { - padding-right: 0.25rem !important; - } - .pe-sm-2 { - padding-right: 0.5rem !important; - } - .pe-sm-3 { - padding-right: 1rem !important; - } - .pe-sm-4 { - padding-right: 1.5rem !important; - } - .pe-sm-5 { - padding-right: 3rem !important; - } - .pb-sm-0 { - padding-bottom: 0 !important; - } - .pb-sm-1 { - padding-bottom: 0.25rem !important; - } - .pb-sm-2 { - padding-bottom: 0.5rem !important; - } - .pb-sm-3 { - padding-bottom: 1rem !important; - } - .pb-sm-4 { - padding-bottom: 1.5rem !important; - } - .pb-sm-5 { - padding-bottom: 3rem !important; - } - .ps-sm-0 { - padding-left: 0 !important; - } - .ps-sm-1 { - padding-left: 0.25rem !important; - } - .ps-sm-2 { - padding-left: 0.5rem !important; - } - .ps-sm-3 { - padding-left: 1rem !important; - } - .ps-sm-4 { - padding-left: 1.5rem !important; - } - .ps-sm-5 { - padding-left: 3rem !important; - } - .text-sm-start { - text-align: left !important; - } - .text-sm-end { - text-align: right !important; - } - .text-sm-center { - text-align: center !important; - } -} -@media (min-width: 768px) { - .float-md-start { - float: left !important; - } - .float-md-end { - float: right !important; - } - .float-md-none { - float: none !important; - } - .d-md-inline { - display: inline !important; - } - .d-md-inline-block { - display: inline-block !important; - } - .d-md-block { - display: block !important; - } - .d-md-grid { - display: grid !important; - } - .d-md-table { - display: table !important; - } - .d-md-table-row { - display: table-row !important; - } - .d-md-table-cell { - display: table-cell !important; - } - .d-md-flex { - display: flex !important; - } - .d-md-inline-flex { - display: inline-flex !important; - } - .d-md-none { - display: none !important; - } - .flex-md-fill { - flex: 1 1 auto !important; - } - .flex-md-row { - flex-direction: row !important; - } - .flex-md-column { - flex-direction: column !important; - } - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - .flex-md-grow-0 { - flex-grow: 0 !important; - } - .flex-md-grow-1 { - flex-grow: 1 !important; - } - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - .flex-md-wrap { - flex-wrap: wrap !important; - } - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .gap-md-0 { - gap: 0 !important; - } - .gap-md-1 { - gap: 0.25rem !important; - } - .gap-md-2 { - gap: 0.5rem !important; - } - .gap-md-3 { - gap: 1rem !important; - } - .gap-md-4 { - gap: 1.5rem !important; - } - .gap-md-5 { - gap: 3rem !important; - } - .justify-content-md-start { - justify-content: flex-start !important; - } - .justify-content-md-end { - justify-content: flex-end !important; - } - .justify-content-md-center { - justify-content: center !important; - } - .justify-content-md-between { - justify-content: space-between !important; - } - .justify-content-md-around { - justify-content: space-around !important; - } - .justify-content-md-evenly { - justify-content: space-evenly !important; - } - .align-items-md-start { - align-items: flex-start !important; - } - .align-items-md-end { - align-items: flex-end !important; - } - .align-items-md-center { - align-items: center !important; - } - .align-items-md-baseline { - align-items: baseline !important; - } - .align-items-md-stretch { - align-items: stretch !important; - } - .align-content-md-start { - align-content: flex-start !important; - } - .align-content-md-end { - align-content: flex-end !important; - } - .align-content-md-center { - align-content: center !important; - } - .align-content-md-between { - align-content: space-between !important; - } - .align-content-md-around { - align-content: space-around !important; - } - .align-content-md-stretch { - align-content: stretch !important; - } - .align-self-md-auto { - align-self: auto !important; - } - .align-self-md-start { - align-self: flex-start !important; - } - .align-self-md-end { - align-self: flex-end !important; - } - .align-self-md-center { - align-self: center !important; - } - .align-self-md-baseline { - align-self: baseline !important; - } - .align-self-md-stretch { - align-self: stretch !important; - } - .order-md-first { - order: -1 !important; - } - .order-md-0 { - order: 0 !important; - } - .order-md-1 { - order: 1 !important; - } - .order-md-2 { - order: 2 !important; - } - .order-md-3 { - order: 3 !important; - } - .order-md-4 { - order: 4 !important; - } - .order-md-5 { - order: 5 !important; - } - .order-md-last { - order: 6 !important; - } - .m-md-0 { - margin: 0 !important; - } - .m-md-1 { - margin: 0.25rem !important; - } - .m-md-2 { - margin: 0.5rem !important; - } - .m-md-3 { - margin: 1rem !important; - } - .m-md-4 { - margin: 1.5rem !important; - } - .m-md-5 { - margin: 3rem !important; - } - .m-md-auto { - margin: auto !important; - } - .mx-md-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-md-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-md-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-md-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-md-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-md-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-md-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-md-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-md-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-md-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-md-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-md-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-md-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-md-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-md-0 { - margin-top: 0 !important; - } - .mt-md-1 { - margin-top: 0.25rem !important; - } - .mt-md-2 { - margin-top: 0.5rem !important; - } - .mt-md-3 { - margin-top: 1rem !important; - } - .mt-md-4 { - margin-top: 1.5rem !important; - } - .mt-md-5 { - margin-top: 3rem !important; - } - .mt-md-auto { - margin-top: auto !important; - } - .me-md-0 { - margin-right: 0 !important; - } - .me-md-1 { - margin-right: 0.25rem !important; - } - .me-md-2 { - margin-right: 0.5rem !important; - } - .me-md-3 { - margin-right: 1rem !important; - } - .me-md-4 { - margin-right: 1.5rem !important; - } - .me-md-5 { - margin-right: 3rem !important; - } - .me-md-auto { - margin-right: auto !important; - } - .mb-md-0 { - margin-bottom: 0 !important; - } - .mb-md-1 { - margin-bottom: 0.25rem !important; - } - .mb-md-2 { - margin-bottom: 0.5rem !important; - } - .mb-md-3 { - margin-bottom: 1rem !important; - } - .mb-md-4 { - margin-bottom: 1.5rem !important; - } - .mb-md-5 { - margin-bottom: 3rem !important; - } - .mb-md-auto { - margin-bottom: auto !important; - } - .ms-md-0 { - margin-left: 0 !important; - } - .ms-md-1 { - margin-left: 0.25rem !important; - } - .ms-md-2 { - margin-left: 0.5rem !important; - } - .ms-md-3 { - margin-left: 1rem !important; - } - .ms-md-4 { - margin-left: 1.5rem !important; - } - .ms-md-5 { - margin-left: 3rem !important; - } - .ms-md-auto { - margin-left: auto !important; - } - .p-md-0 { - padding: 0 !important; - } - .p-md-1 { - padding: 0.25rem !important; - } - .p-md-2 { - padding: 0.5rem !important; - } - .p-md-3 { - padding: 1rem !important; - } - .p-md-4 { - padding: 1.5rem !important; - } - .p-md-5 { - padding: 3rem !important; - } - .px-md-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-md-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-md-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-md-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-md-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-md-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-md-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-md-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-md-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-md-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-md-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-md-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-md-0 { - padding-top: 0 !important; - } - .pt-md-1 { - padding-top: 0.25rem !important; - } - .pt-md-2 { - padding-top: 0.5rem !important; - } - .pt-md-3 { - padding-top: 1rem !important; - } - .pt-md-4 { - padding-top: 1.5rem !important; - } - .pt-md-5 { - padding-top: 3rem !important; - } - .pe-md-0 { - padding-right: 0 !important; - } - .pe-md-1 { - padding-right: 0.25rem !important; - } - .pe-md-2 { - padding-right: 0.5rem !important; - } - .pe-md-3 { - padding-right: 1rem !important; - } - .pe-md-4 { - padding-right: 1.5rem !important; - } - .pe-md-5 { - padding-right: 3rem !important; - } - .pb-md-0 { - padding-bottom: 0 !important; - } - .pb-md-1 { - padding-bottom: 0.25rem !important; - } - .pb-md-2 { - padding-bottom: 0.5rem !important; - } - .pb-md-3 { - padding-bottom: 1rem !important; - } - .pb-md-4 { - padding-bottom: 1.5rem !important; - } - .pb-md-5 { - padding-bottom: 3rem !important; - } - .ps-md-0 { - padding-left: 0 !important; - } - .ps-md-1 { - padding-left: 0.25rem !important; - } - .ps-md-2 { - padding-left: 0.5rem !important; - } - .ps-md-3 { - padding-left: 1rem !important; - } - .ps-md-4 { - padding-left: 1.5rem !important; - } - .ps-md-5 { - padding-left: 3rem !important; - } - .text-md-start { - text-align: left !important; - } - .text-md-end { - text-align: right !important; - } - .text-md-center { - text-align: center !important; - } -} -@media (min-width: 992px) { - .float-lg-start { - float: left !important; - } - .float-lg-end { - float: right !important; - } - .float-lg-none { - float: none !important; - } - .d-lg-inline { - display: inline !important; - } - .d-lg-inline-block { - display: inline-block !important; - } - .d-lg-block { - display: block !important; - } - .d-lg-grid { - display: grid !important; - } - .d-lg-table { - display: table !important; - } - .d-lg-table-row { - display: table-row !important; - } - .d-lg-table-cell { - display: table-cell !important; - } - .d-lg-flex { - display: flex !important; - } - .d-lg-inline-flex { - display: inline-flex !important; - } - .d-lg-none { - display: none !important; - } - .flex-lg-fill { - flex: 1 1 auto !important; - } - .flex-lg-row { - flex-direction: row !important; - } - .flex-lg-column { - flex-direction: column !important; - } - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - .flex-lg-wrap { - flex-wrap: wrap !important; - } - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .gap-lg-0 { - gap: 0 !important; - } - .gap-lg-1 { - gap: 0.25rem !important; - } - .gap-lg-2 { - gap: 0.5rem !important; - } - .gap-lg-3 { - gap: 1rem !important; - } - .gap-lg-4 { - gap: 1.5rem !important; - } - .gap-lg-5 { - gap: 3rem !important; - } - .justify-content-lg-start { - justify-content: flex-start !important; - } - .justify-content-lg-end { - justify-content: flex-end !important; - } - .justify-content-lg-center { - justify-content: center !important; - } - .justify-content-lg-between { - justify-content: space-between !important; - } - .justify-content-lg-around { - justify-content: space-around !important; - } - .justify-content-lg-evenly { - justify-content: space-evenly !important; - } - .align-items-lg-start { - align-items: flex-start !important; - } - .align-items-lg-end { - align-items: flex-end !important; - } - .align-items-lg-center { - align-items: center !important; - } - .align-items-lg-baseline { - align-items: baseline !important; - } - .align-items-lg-stretch { - align-items: stretch !important; - } - .align-content-lg-start { - align-content: flex-start !important; - } - .align-content-lg-end { - align-content: flex-end !important; - } - .align-content-lg-center { - align-content: center !important; - } - .align-content-lg-between { - align-content: space-between !important; - } - .align-content-lg-around { - align-content: space-around !important; - } - .align-content-lg-stretch { - align-content: stretch !important; - } - .align-self-lg-auto { - align-self: auto !important; - } - .align-self-lg-start { - align-self: flex-start !important; - } - .align-self-lg-end { - align-self: flex-end !important; - } - .align-self-lg-center { - align-self: center !important; - } - .align-self-lg-baseline { - align-self: baseline !important; - } - .align-self-lg-stretch { - align-self: stretch !important; - } - .order-lg-first { - order: -1 !important; - } - .order-lg-0 { - order: 0 !important; - } - .order-lg-1 { - order: 1 !important; - } - .order-lg-2 { - order: 2 !important; - } - .order-lg-3 { - order: 3 !important; - } - .order-lg-4 { - order: 4 !important; - } - .order-lg-5 { - order: 5 !important; - } - .order-lg-last { - order: 6 !important; - } - .m-lg-0 { - margin: 0 !important; - } - .m-lg-1 { - margin: 0.25rem !important; - } - .m-lg-2 { - margin: 0.5rem !important; - } - .m-lg-3 { - margin: 1rem !important; - } - .m-lg-4 { - margin: 1.5rem !important; - } - .m-lg-5 { - margin: 3rem !important; - } - .m-lg-auto { - margin: auto !important; - } - .mx-lg-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-lg-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-lg-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-lg-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-lg-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-lg-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-lg-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-lg-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-lg-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-lg-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-lg-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-lg-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-lg-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-lg-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-lg-0 { - margin-top: 0 !important; - } - .mt-lg-1 { - margin-top: 0.25rem !important; - } - .mt-lg-2 { - margin-top: 0.5rem !important; - } - .mt-lg-3 { - margin-top: 1rem !important; - } - .mt-lg-4 { - margin-top: 1.5rem !important; - } - .mt-lg-5 { - margin-top: 3rem !important; - } - .mt-lg-auto { - margin-top: auto !important; - } - .me-lg-0 { - margin-right: 0 !important; - } - .me-lg-1 { - margin-right: 0.25rem !important; - } - .me-lg-2 { - margin-right: 0.5rem !important; - } - .me-lg-3 { - margin-right: 1rem !important; - } - .me-lg-4 { - margin-right: 1.5rem !important; - } - .me-lg-5 { - margin-right: 3rem !important; - } - .me-lg-auto { - margin-right: auto !important; - } - .mb-lg-0 { - margin-bottom: 0 !important; - } - .mb-lg-1 { - margin-bottom: 0.25rem !important; - } - .mb-lg-2 { - margin-bottom: 0.5rem !important; - } - .mb-lg-3 { - margin-bottom: 1rem !important; - } - .mb-lg-4 { - margin-bottom: 1.5rem !important; - } - .mb-lg-5 { - margin-bottom: 3rem !important; - } - .mb-lg-auto { - margin-bottom: auto !important; - } - .ms-lg-0 { - margin-left: 0 !important; - } - .ms-lg-1 { - margin-left: 0.25rem !important; - } - .ms-lg-2 { - margin-left: 0.5rem !important; - } - .ms-lg-3 { - margin-left: 1rem !important; - } - .ms-lg-4 { - margin-left: 1.5rem !important; - } - .ms-lg-5 { - margin-left: 3rem !important; - } - .ms-lg-auto { - margin-left: auto !important; - } - .p-lg-0 { - padding: 0 !important; - } - .p-lg-1 { - padding: 0.25rem !important; - } - .p-lg-2 { - padding: 0.5rem !important; - } - .p-lg-3 { - padding: 1rem !important; - } - .p-lg-4 { - padding: 1.5rem !important; - } - .p-lg-5 { - padding: 3rem !important; - } - .px-lg-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-lg-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-lg-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-lg-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-lg-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-lg-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-lg-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-lg-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-lg-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-lg-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-lg-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-lg-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-lg-0 { - padding-top: 0 !important; - } - .pt-lg-1 { - padding-top: 0.25rem !important; - } - .pt-lg-2 { - padding-top: 0.5rem !important; - } - .pt-lg-3 { - padding-top: 1rem !important; - } - .pt-lg-4 { - padding-top: 1.5rem !important; - } - .pt-lg-5 { - padding-top: 3rem !important; - } - .pe-lg-0 { - padding-right: 0 !important; - } - .pe-lg-1 { - padding-right: 0.25rem !important; - } - .pe-lg-2 { - padding-right: 0.5rem !important; - } - .pe-lg-3 { - padding-right: 1rem !important; - } - .pe-lg-4 { - padding-right: 1.5rem !important; - } - .pe-lg-5 { - padding-right: 3rem !important; - } - .pb-lg-0 { - padding-bottom: 0 !important; - } - .pb-lg-1 { - padding-bottom: 0.25rem !important; - } - .pb-lg-2 { - padding-bottom: 0.5rem !important; - } - .pb-lg-3 { - padding-bottom: 1rem !important; - } - .pb-lg-4 { - padding-bottom: 1.5rem !important; - } - .pb-lg-5 { - padding-bottom: 3rem !important; - } - .ps-lg-0 { - padding-left: 0 !important; - } - .ps-lg-1 { - padding-left: 0.25rem !important; - } - .ps-lg-2 { - padding-left: 0.5rem !important; - } - .ps-lg-3 { - padding-left: 1rem !important; - } - .ps-lg-4 { - padding-left: 1.5rem !important; - } - .ps-lg-5 { - padding-left: 3rem !important; - } - .text-lg-start { - text-align: left !important; - } - .text-lg-end { - text-align: right !important; - } - .text-lg-center { - text-align: center !important; - } -} -@media (min-width: 1200px) { - .float-xl-start { - float: left !important; - } - .float-xl-end { - float: right !important; - } - .float-xl-none { - float: none !important; - } - .d-xl-inline { - display: inline !important; - } - .d-xl-inline-block { - display: inline-block !important; - } - .d-xl-block { - display: block !important; - } - .d-xl-grid { - display: grid !important; - } - .d-xl-table { - display: table !important; - } - .d-xl-table-row { - display: table-row !important; - } - .d-xl-table-cell { - display: table-cell !important; - } - .d-xl-flex { - display: flex !important; - } - .d-xl-inline-flex { - display: inline-flex !important; - } - .d-xl-none { - display: none !important; - } - .flex-xl-fill { - flex: 1 1 auto !important; - } - .flex-xl-row { - flex-direction: row !important; - } - .flex-xl-column { - flex-direction: column !important; - } - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xl-wrap { - flex-wrap: wrap !important; - } - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .gap-xl-0 { - gap: 0 !important; - } - .gap-xl-1 { - gap: 0.25rem !important; - } - .gap-xl-2 { - gap: 0.5rem !important; - } - .gap-xl-3 { - gap: 1rem !important; - } - .gap-xl-4 { - gap: 1.5rem !important; - } - .gap-xl-5 { - gap: 3rem !important; - } - .justify-content-xl-start { - justify-content: flex-start !important; - } - .justify-content-xl-end { - justify-content: flex-end !important; - } - .justify-content-xl-center { - justify-content: center !important; - } - .justify-content-xl-between { - justify-content: space-between !important; - } - .justify-content-xl-around { - justify-content: space-around !important; - } - .justify-content-xl-evenly { - justify-content: space-evenly !important; - } - .align-items-xl-start { - align-items: flex-start !important; - } - .align-items-xl-end { - align-items: flex-end !important; - } - .align-items-xl-center { - align-items: center !important; - } - .align-items-xl-baseline { - align-items: baseline !important; - } - .align-items-xl-stretch { - align-items: stretch !important; - } - .align-content-xl-start { - align-content: flex-start !important; - } - .align-content-xl-end { - align-content: flex-end !important; - } - .align-content-xl-center { - align-content: center !important; - } - .align-content-xl-between { - align-content: space-between !important; - } - .align-content-xl-around { - align-content: space-around !important; - } - .align-content-xl-stretch { - align-content: stretch !important; - } - .align-self-xl-auto { - align-self: auto !important; - } - .align-self-xl-start { - align-self: flex-start !important; - } - .align-self-xl-end { - align-self: flex-end !important; - } - .align-self-xl-center { - align-self: center !important; - } - .align-self-xl-baseline { - align-self: baseline !important; - } - .align-self-xl-stretch { - align-self: stretch !important; - } - .order-xl-first { - order: -1 !important; - } - .order-xl-0 { - order: 0 !important; - } - .order-xl-1 { - order: 1 !important; - } - .order-xl-2 { - order: 2 !important; - } - .order-xl-3 { - order: 3 !important; - } - .order-xl-4 { - order: 4 !important; - } - .order-xl-5 { - order: 5 !important; - } - .order-xl-last { - order: 6 !important; - } - .m-xl-0 { - margin: 0 !important; - } - .m-xl-1 { - margin: 0.25rem !important; - } - .m-xl-2 { - margin: 0.5rem !important; - } - .m-xl-3 { - margin: 1rem !important; - } - .m-xl-4 { - margin: 1.5rem !important; - } - .m-xl-5 { - margin: 3rem !important; - } - .m-xl-auto { - margin: auto !important; - } - .mx-xl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xl-0 { - margin-top: 0 !important; - } - .mt-xl-1 { - margin-top: 0.25rem !important; - } - .mt-xl-2 { - margin-top: 0.5rem !important; - } - .mt-xl-3 { - margin-top: 1rem !important; - } - .mt-xl-4 { - margin-top: 1.5rem !important; - } - .mt-xl-5 { - margin-top: 3rem !important; - } - .mt-xl-auto { - margin-top: auto !important; - } - .me-xl-0 { - margin-right: 0 !important; - } - .me-xl-1 { - margin-right: 0.25rem !important; - } - .me-xl-2 { - margin-right: 0.5rem !important; - } - .me-xl-3 { - margin-right: 1rem !important; - } - .me-xl-4 { - margin-right: 1.5rem !important; - } - .me-xl-5 { - margin-right: 3rem !important; - } - .me-xl-auto { - margin-right: auto !important; - } - .mb-xl-0 { - margin-bottom: 0 !important; - } - .mb-xl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xl-3 { - margin-bottom: 1rem !important; - } - .mb-xl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xl-5 { - margin-bottom: 3rem !important; - } - .mb-xl-auto { - margin-bottom: auto !important; - } - .ms-xl-0 { - margin-left: 0 !important; - } - .ms-xl-1 { - margin-left: 0.25rem !important; - } - .ms-xl-2 { - margin-left: 0.5rem !important; - } - .ms-xl-3 { - margin-left: 1rem !important; - } - .ms-xl-4 { - margin-left: 1.5rem !important; - } - .ms-xl-5 { - margin-left: 3rem !important; - } - .ms-xl-auto { - margin-left: auto !important; - } - .p-xl-0 { - padding: 0 !important; - } - .p-xl-1 { - padding: 0.25rem !important; - } - .p-xl-2 { - padding: 0.5rem !important; - } - .p-xl-3 { - padding: 1rem !important; - } - .p-xl-4 { - padding: 1.5rem !important; - } - .p-xl-5 { - padding: 3rem !important; - } - .px-xl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xl-0 { - padding-top: 0 !important; - } - .pt-xl-1 { - padding-top: 0.25rem !important; - } - .pt-xl-2 { - padding-top: 0.5rem !important; - } - .pt-xl-3 { - padding-top: 1rem !important; - } - .pt-xl-4 { - padding-top: 1.5rem !important; - } - .pt-xl-5 { - padding-top: 3rem !important; - } - .pe-xl-0 { - padding-right: 0 !important; - } - .pe-xl-1 { - padding-right: 0.25rem !important; - } - .pe-xl-2 { - padding-right: 0.5rem !important; - } - .pe-xl-3 { - padding-right: 1rem !important; - } - .pe-xl-4 { - padding-right: 1.5rem !important; - } - .pe-xl-5 { - padding-right: 3rem !important; - } - .pb-xl-0 { - padding-bottom: 0 !important; - } - .pb-xl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xl-3 { - padding-bottom: 1rem !important; - } - .pb-xl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xl-5 { - padding-bottom: 3rem !important; - } - .ps-xl-0 { - padding-left: 0 !important; - } - .ps-xl-1 { - padding-left: 0.25rem !important; - } - .ps-xl-2 { - padding-left: 0.5rem !important; - } - .ps-xl-3 { - padding-left: 1rem !important; - } - .ps-xl-4 { - padding-left: 1.5rem !important; - } - .ps-xl-5 { - padding-left: 3rem !important; - } - .text-xl-start { - text-align: left !important; - } - .text-xl-end { - text-align: right !important; - } - .text-xl-center { - text-align: center !important; - } -} -@media (min-width: 1400px) { - .float-xxl-start { - float: left !important; - } - .float-xxl-end { - float: right !important; - } - .float-xxl-none { - float: none !important; - } - .d-xxl-inline { - display: inline !important; - } - .d-xxl-inline-block { - display: inline-block !important; - } - .d-xxl-block { - display: block !important; - } - .d-xxl-grid { - display: grid !important; - } - .d-xxl-table { - display: table !important; - } - .d-xxl-table-row { - display: table-row !important; - } - .d-xxl-table-cell { - display: table-cell !important; - } - .d-xxl-flex { - display: flex !important; - } - .d-xxl-inline-flex { - display: inline-flex !important; - } - .d-xxl-none { - display: none !important; - } - .flex-xxl-fill { - flex: 1 1 auto !important; - } - .flex-xxl-row { - flex-direction: row !important; - } - .flex-xxl-column { - flex-direction: column !important; - } - .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - .flex-xxl-grow-0 { - flex-grow: 0 !important; - } - .flex-xxl-grow-1 { - flex-grow: 1 !important; - } - .flex-xxl-shrink-0 { - flex-shrink: 0 !important; - } - .flex-xxl-shrink-1 { - flex-shrink: 1 !important; - } - .flex-xxl-wrap { - flex-wrap: wrap !important; - } - .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - .gap-xxl-0 { - gap: 0 !important; - } - .gap-xxl-1 { - gap: 0.25rem !important; - } - .gap-xxl-2 { - gap: 0.5rem !important; - } - .gap-xxl-3 { - gap: 1rem !important; - } - .gap-xxl-4 { - gap: 1.5rem !important; - } - .gap-xxl-5 { - gap: 3rem !important; - } - .justify-content-xxl-start { - justify-content: flex-start !important; - } - .justify-content-xxl-end { - justify-content: flex-end !important; - } - .justify-content-xxl-center { - justify-content: center !important; - } - .justify-content-xxl-between { - justify-content: space-between !important; - } - .justify-content-xxl-around { - justify-content: space-around !important; - } - .justify-content-xxl-evenly { - justify-content: space-evenly !important; - } - .align-items-xxl-start { - align-items: flex-start !important; - } - .align-items-xxl-end { - align-items: flex-end !important; - } - .align-items-xxl-center { - align-items: center !important; - } - .align-items-xxl-baseline { - align-items: baseline !important; - } - .align-items-xxl-stretch { - align-items: stretch !important; - } - .align-content-xxl-start { - align-content: flex-start !important; - } - .align-content-xxl-end { - align-content: flex-end !important; - } - .align-content-xxl-center { - align-content: center !important; - } - .align-content-xxl-between { - align-content: space-between !important; - } - .align-content-xxl-around { - align-content: space-around !important; - } - .align-content-xxl-stretch { - align-content: stretch !important; - } - .align-self-xxl-auto { - align-self: auto !important; - } - .align-self-xxl-start { - align-self: flex-start !important; - } - .align-self-xxl-end { - align-self: flex-end !important; - } - .align-self-xxl-center { - align-self: center !important; - } - .align-self-xxl-baseline { - align-self: baseline !important; - } - .align-self-xxl-stretch { - align-self: stretch !important; - } - .order-xxl-first { - order: -1 !important; - } - .order-xxl-0 { - order: 0 !important; - } - .order-xxl-1 { - order: 1 !important; - } - .order-xxl-2 { - order: 2 !important; - } - .order-xxl-3 { - order: 3 !important; - } - .order-xxl-4 { - order: 4 !important; - } - .order-xxl-5 { - order: 5 !important; - } - .order-xxl-last { - order: 6 !important; - } - .m-xxl-0 { - margin: 0 !important; - } - .m-xxl-1 { - margin: 0.25rem !important; - } - .m-xxl-2 { - margin: 0.5rem !important; - } - .m-xxl-3 { - margin: 1rem !important; - } - .m-xxl-4 { - margin: 1.5rem !important; - } - .m-xxl-5 { - margin: 3rem !important; - } - .m-xxl-auto { - margin: auto !important; - } - .mx-xxl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - .mx-xxl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - .mx-xxl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - .mx-xxl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - .mx-xxl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - .mx-xxl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - .mx-xxl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - .my-xxl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .my-xxl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - .my-xxl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - .my-xxl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - .my-xxl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - .my-xxl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - .my-xxl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - .mt-xxl-0 { - margin-top: 0 !important; - } - .mt-xxl-1 { - margin-top: 0.25rem !important; - } - .mt-xxl-2 { - margin-top: 0.5rem !important; - } - .mt-xxl-3 { - margin-top: 1rem !important; - } - .mt-xxl-4 { - margin-top: 1.5rem !important; - } - .mt-xxl-5 { - margin-top: 3rem !important; - } - .mt-xxl-auto { - margin-top: auto !important; - } - .me-xxl-0 { - margin-right: 0 !important; - } - .me-xxl-1 { - margin-right: 0.25rem !important; - } - .me-xxl-2 { - margin-right: 0.5rem !important; - } - .me-xxl-3 { - margin-right: 1rem !important; - } - .me-xxl-4 { - margin-right: 1.5rem !important; - } - .me-xxl-5 { - margin-right: 3rem !important; - } - .me-xxl-auto { - margin-right: auto !important; - } - .mb-xxl-0 { - margin-bottom: 0 !important; - } - .mb-xxl-1 { - margin-bottom: 0.25rem !important; - } - .mb-xxl-2 { - margin-bottom: 0.5rem !important; - } - .mb-xxl-3 { - margin-bottom: 1rem !important; - } - .mb-xxl-4 { - margin-bottom: 1.5rem !important; - } - .mb-xxl-5 { - margin-bottom: 3rem !important; - } - .mb-xxl-auto { - margin-bottom: auto !important; - } - .ms-xxl-0 { - margin-left: 0 !important; - } - .ms-xxl-1 { - margin-left: 0.25rem !important; - } - .ms-xxl-2 { - margin-left: 0.5rem !important; - } - .ms-xxl-3 { - margin-left: 1rem !important; - } - .ms-xxl-4 { - margin-left: 1.5rem !important; - } - .ms-xxl-5 { - margin-left: 3rem !important; - } - .ms-xxl-auto { - margin-left: auto !important; - } - .p-xxl-0 { - padding: 0 !important; - } - .p-xxl-1 { - padding: 0.25rem !important; - } - .p-xxl-2 { - padding: 0.5rem !important; - } - .p-xxl-3 { - padding: 1rem !important; - } - .p-xxl-4 { - padding: 1.5rem !important; - } - .p-xxl-5 { - padding: 3rem !important; - } - .px-xxl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - .px-xxl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - .px-xxl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - .px-xxl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - .px-xxl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - .px-xxl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - .py-xxl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .py-xxl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - .py-xxl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - .py-xxl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - .py-xxl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - .py-xxl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - .pt-xxl-0 { - padding-top: 0 !important; - } - .pt-xxl-1 { - padding-top: 0.25rem !important; - } - .pt-xxl-2 { - padding-top: 0.5rem !important; - } - .pt-xxl-3 { - padding-top: 1rem !important; - } - .pt-xxl-4 { - padding-top: 1.5rem !important; - } - .pt-xxl-5 { - padding-top: 3rem !important; - } - .pe-xxl-0 { - padding-right: 0 !important; - } - .pe-xxl-1 { - padding-right: 0.25rem !important; - } - .pe-xxl-2 { - padding-right: 0.5rem !important; - } - .pe-xxl-3 { - padding-right: 1rem !important; - } - .pe-xxl-4 { - padding-right: 1.5rem !important; - } - .pe-xxl-5 { - padding-right: 3rem !important; - } - .pb-xxl-0 { - padding-bottom: 0 !important; - } - .pb-xxl-1 { - padding-bottom: 0.25rem !important; - } - .pb-xxl-2 { - padding-bottom: 0.5rem !important; - } - .pb-xxl-3 { - padding-bottom: 1rem !important; - } - .pb-xxl-4 { - padding-bottom: 1.5rem !important; - } - .pb-xxl-5 { - padding-bottom: 3rem !important; - } - .ps-xxl-0 { - padding-left: 0 !important; - } - .ps-xxl-1 { - padding-left: 0.25rem !important; - } - .ps-xxl-2 { - padding-left: 0.5rem !important; - } - .ps-xxl-3 { - padding-left: 1rem !important; - } - .ps-xxl-4 { - padding-left: 1.5rem !important; - } - .ps-xxl-5 { - padding-left: 3rem !important; - } - .text-xxl-start { - text-align: left !important; - } - .text-xxl-end { - text-align: right !important; - } - .text-xxl-center { - text-align: center !important; - } -} -@media (min-width: 1200px) { - .fs-1 { - font-size: 2.25rem !important; - } - .fs-2 { - font-size: 1.8rem !important; - } - .fs-3 { - font-size: 1.575rem !important; - } - .fs-4 { - font-size: 1.35rem !important; - } -} -@media print { - .d-print-inline { - display: inline !important; - } - .d-print-inline-block { - display: inline-block !important; - } - .d-print-block { - display: block !important; - } - .d-print-grid { - display: grid !important; - } - .d-print-table { - display: table !important; - } - .d-print-table-row { - display: table-row !important; - } - .d-print-table-cell { - display: table-cell !important; - } - .d-print-flex { - display: flex !important; - } - .d-print-inline-flex { - display: inline-flex !important; - } - .d-print-none { - display: none !important; - } -} -.navbar { - border: 1px solid transparent; - padding-top: 0rem; - padding-bottom: 0rem; -} - -.navbar .navbar-brand { - padding-top: 0; - padding-bottom: 0; -} - -.navbar .navbar-brand h1.title, .navbar .navbar-brand .title.h1 { - margin-bottom: 0; -} - -.navbar .container { - padding-left: 0px; - padding-right: 0px; -} - -a { - text-decoration: none; -} - -.card { - margin-bottom: 20px; -} - -.card-body { - background-color: white; -} - -.page-header { - border-bottom: 1px solid #eee; - padding-bottom: 9px; - margin: 40px 0 20px; -} - -h1.page-header, .page-header.h1 { - margin-top: 10px; -} - -table thead th { - border-bottom: 1px solid #ddd !important; -} - -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/public/css/bootstrap.css.map b/public/css/bootstrap.css.map deleted file mode 100644 index 57aa0142ca95e209b1b9ae631f1b417dc6cfca34..0000000000000000000000000000000000000000 --- a/public/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["../vendor/bootstrap-5.0.2/scss/bootstrap.scss","../vendor/bootstrap-5.0.2/scss/_root.scss","../vendor/bootstrap-5.0.2/scss/_reboot.scss","../vendor/bootstrap-5.0.2/scss/_variables.scss","../vendor/bootstrap-5.0.2/scss/vendor/_rfs.scss","../vendor/bootstrap-5.0.2/scss/mixins/_border-radius.scss","../vendor/bootstrap-5.0.2/scss/_type.scss","../vendor/bootstrap-5.0.2/scss/mixins/_lists.scss","../vendor/bootstrap-5.0.2/scss/_images.scss","../vendor/bootstrap-5.0.2/scss/mixins/_image.scss","../vendor/bootstrap-5.0.2/scss/_containers.scss","../vendor/bootstrap-5.0.2/scss/mixins/_container.scss","../vendor/bootstrap-5.0.2/scss/mixins/_breakpoints.scss","../vendor/bootstrap-5.0.2/scss/_grid.scss","../vendor/bootstrap-5.0.2/scss/mixins/_grid.scss","../vendor/bootstrap-5.0.2/scss/_tables.scss","../vendor/bootstrap-5.0.2/scss/mixins/_table-variants.scss","../vendor/bootstrap-5.0.2/scss/forms/_labels.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-text.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-control.scss","../vendor/bootstrap-5.0.2/scss/mixins/_transition.scss","../vendor/bootstrap-5.0.2/scss/mixins/_gradients.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-select.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-check.scss","../vendor/bootstrap-5.0.2/scss/forms/_form-range.scss","../vendor/bootstrap-5.0.2/scss/forms/_floating-labels.scss","../vendor/bootstrap-5.0.2/scss/forms/_input-group.scss","../vendor/bootstrap-5.0.2/scss/mixins/_forms.scss","../vendor/bootstrap-5.0.2/scss/_buttons.scss","../vendor/bootstrap-5.0.2/scss/mixins/_buttons.scss","../vendor/bootstrap-5.0.2/scss/_transitions.scss","../vendor/bootstrap-5.0.2/scss/_dropdown.scss","../vendor/bootstrap-5.0.2/scss/mixins/_caret.scss","../vendor/bootstrap-5.0.2/scss/_button-group.scss","../vendor/bootstrap-5.0.2/scss/_nav.scss","../vendor/bootstrap-5.0.2/scss/_navbar.scss","../vendor/bootstrap-5.0.2/scss/_card.scss","../vendor/bootstrap-5.0.2/scss/_accordion.scss","../vendor/bootstrap-5.0.2/scss/_breadcrumb.scss","../vendor/bootstrap-5.0.2/scss/_pagination.scss","../vendor/bootstrap-5.0.2/scss/mixins/_pagination.scss","../vendor/bootstrap-5.0.2/scss/_badge.scss","../vendor/bootstrap-5.0.2/scss/_alert.scss","../vendor/bootstrap-5.0.2/scss/mixins/_alert.scss","../vendor/bootstrap-5.0.2/scss/_progress.scss","../vendor/bootstrap-5.0.2/scss/_list-group.scss","../vendor/bootstrap-5.0.2/scss/mixins/_list-group.scss","../vendor/bootstrap-5.0.2/scss/_close.scss","../vendor/bootstrap-5.0.2/scss/_toasts.scss","../vendor/bootstrap-5.0.2/scss/_modal.scss","../vendor/bootstrap-5.0.2/scss/_tooltip.scss","../vendor/bootstrap-5.0.2/scss/mixins/_reset-text.scss","../vendor/bootstrap-5.0.2/scss/_popover.scss","../vendor/bootstrap-5.0.2/scss/_carousel.scss","../vendor/bootstrap-5.0.2/scss/mixins/_clearfix.scss","../vendor/bootstrap-5.0.2/scss/_spinners.scss","../vendor/bootstrap-5.0.2/scss/_offcanvas.scss","../vendor/bootstrap-5.0.2/scss/helpers/_colored-links.scss","../vendor/bootstrap-5.0.2/scss/helpers/_ratio.scss","../vendor/bootstrap-5.0.2/scss/helpers/_position.scss","../vendor/bootstrap-5.0.2/scss/helpers/_visually-hidden.scss","../vendor/bootstrap-5.0.2/scss/mixins/_visually-hidden.scss","../vendor/bootstrap-5.0.2/scss/helpers/_stretched-link.scss","../vendor/bootstrap-5.0.2/scss/helpers/_text-truncation.scss","../vendor/bootstrap-5.0.2/scss/mixins/_text-truncate.scss","../vendor/bootstrap-5.0.2/scss/mixins/_utilities.scss","../vendor/bootstrap-5.0.2/scss/utilities/_api.scss","bootstrap.scss"],"names":[],"mappings":"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VX;EACE;EACA;EACA;Ef8RI,WALI;EetRR,ahBua4B;EgBta5B,ahB4a4B;EgB3a5B,OhBKS;EgBJT,kBhBLS;EgBMT;EACA;EACA;EdGE;EeHE,YDMJ;;ACFI;EDhBN;ICiBQ;;;ADGN;EACE;;AAEA;EACE;;AAKJ;EACE,OhBjBO;EgBkBP,kBhB3BO;EgB4BP,chBgqBoC;EgB/pBpC;EAKE,YhByiB0B;;AgBliB9B;EAEE;;AAIF;EACE,OhB1CO;EgB4CP;;AAQF;EAEE,kBhB1DO;EgB6DP;;AAIF;EACE;EACA;EACA,mBhB4f0B;EgB3f1B,OhB9DO;EkBbT,kBlBMS;EgBuEP;EACA;EACA;EACA;EACA,yBhBmR0B;EgBlR1B;ECtEE,YDuEF;;ACnEE;EDuDJ;ICtDM;;;ADqEN;EACE,kBhB6vB8B;;AgB1vBhC;EACE;EACA;EACA,mBhBye0B;EgBxe1B,OhBjFO;EkBbT,kBlBMS;EgB0FP;EACA;EACA;EACA;EACA,yBhBgQ0B;EgB/P1B;ECzFE,YD0FF;;ACtFE;ED0EJ;ICzEM;;;ADwFN;EACE,kBhB0uB8B;;;AgBjuBlC;EACE;EACA;EACA;EACA;EACA,ahB2T4B;EgB1T5B,OhB5GS;EgB6GT;EACA;EACA;;AAEA;EAEE;EACA;;;AAWJ;EACE,YhBkkBsC;EgBjkBtC;EfmJI,WALI;EC7QN;;AcmIF;EACE;EACA;EACA,mBhB6b0B;;AgB1b5B;EACE;EACA;EACA,mBhBub0B;;;AgBnb9B;EACE,YhBgjBsC;EgB/iBtC;EfgII,WALI;EC7QN;;AcsJF;EACE;EACA;EACA,mBhB8a0B;;AgB3a5B;EACE;EACA;EACA,mBhBwa0B;;;AgBha5B;EACE,YhBuhBoC;;AgBphBtC;EACE,YhBohBoC;;AgBjhBtC;EACE,YhBihBoC;;;AgB5gBxC;EACE;EACA;EACA,ShB8X4B;;AgB5X5B;EACE;;AAGF;EACE;Ed/LA;;AcmMF;EACE;EdpMA;;;AiBdJ;EACE;EACA;EACA;EAEA;ElB2RI,WALI;EkBnRR,anBoa4B;EmBna5B,anBya4B;EmBxa5B,OnBES;EmBDT,kBnBRS;EmBST;EACA;EACA,qBnBgxBkC;EmB/wBlC,iBnBgxBkC;EmB/wBlC;EjBFE;EeHE,YEQJ;EACA;;AFLI;EEfN;IFgBQ;;;AEMN;EACE,cnBwqBoC;EmBvqBpC;EAKE,YnBixB4B;;AmB7wBhC;EAEE,enBkiB0B;EmBjiB1B;;AAGF;EAEE,kBnBpCO;;AmByCT;EACE;EACA;;;AAIJ;EACE,anB2hB4B;EmB1hB5B,gBnB0hB4B;EmBzhB5B,cnB0hB4B;ECjTxB,WALI;;;AkBhOV;EACE,anBwhB4B;EmBvhB5B,gBnBuhB4B;EmBthB5B,cnBuhB4B;ECrTxB,WALI;;;AmB5RV;EACE;EACA,YpBqtBwC;EoBptBxC,cpBqtBwC;EoBptBxC,epBqtBwC;;AoBntBxC;EACE;EACA;;;AAIJ;EACE,OpBysBwC;EoBxsBxC,QpBwsBwC;EoBvsBxC;EACA;EACA,kBpBbS;EoBcT;EACA;EACA;EACA,QpB4sBwC;EoB3sBxC;EACA;;AAGA;ElBXE;;AkBeF;EAEE,epBmsBsC;;AoBhsBxC;EACE,QpB0rBsC;;AoBvrBxC;EACE,cpBwpBoC;EoBvpBpC;EACA,YpBqiB4B;;AoBliB9B;EACE,kBpBZM;EoBaN,cpBbM;;AoBeN;EAII;;AAIJ;EAII;;AAKN;EACE,kBpBjCM;EoBkCN,cpBlCM;EoBuCJ;;AAIJ;EACE;EACA;EACA,SpBkqBuC;;AoB3pBvC;EACE,SpB0pBqC;;;AoB5oB3C;EACE,cpBqpBgC;;AoBnpBhC;EACE,OpBipB8B;EoBhpB9B;EACA;EACA;ElB9FA;EeHE,YGmGF;;AH/FE;EGyFJ;IHxFM;;;AGgGJ;EACE;;AAGF;EACE,qBpBgpB4B;EoB3oB1B;;;AAMR;EACE;EACA,cpBmnBgC;;;AoBhnBlC;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SpBuewB;;;AqBrnB9B;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YrB4zBa;;AqB3zBvC;EAA0B,YrB2zBa;;AqBxzBzC;EACE;;AAGF;EACE,OrB6yBuC;EqB5yBvC,QrB4yBuC;EqB3yBvC;EHzBF,kBlBkCQ;EqBPN,QrB4yBuC;EExzBvC;EeHE,YIkBF;EACA;;AJfE;EIMJ;IJLM;;;AIgBJ;EHjCF,kBlB40ByC;;AqBtyBzC;EACE,OrBsxB8B;EqBrxB9B,QrBsxB8B;EqBrxB9B;EACA,QrBqxB8B;EqBpxB9B,kBrBpCO;EqBqCP;EnB7BA;;AmBkCF;EACE,OrBkxBuC;EqBjxBvC,QrBixBuC;EkBp0BzC,kBlBkCQ;EqBmBN,QrBkxBuC;EExzBvC;EeHE,YI4CF;EACA;;AJzCE;EIiCJ;IJhCM;;;AI0CJ;EH3DF,kBlB40ByC;;AqB5wBzC;EACE,OrB4vB8B;EqB3vB9B,QrB4vB8B;EqB3vB9B;EACA,QrB2vB8B;EqB1vB9B,kBrB9DO;EqB+DP;EnBvDA;;AmB4DF;EACE;;AAEA;EACE,kBrBtEK;;AqByEP;EACE,kBrB1EK;;;AsBbX;EACE;;AAEA;AAAA;EAEE,QtBu1B8B;EsBt1B9B,atBu1B8B;;AsBp1BhC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELDE,YKEF;;ALEE;EKXJ;ILYM;;;AKCN;EACE;;AAEA;EACE;;AAGF;EAEE,atBi0B4B;EsBh0B5B,gBtBi0B4B;;AsB9zB9B;EACE,atB4zB4B;EsB3zB5B,gBtB4zB4B;;AsBxzBhC;EACE,atBszB8B;EsBrzB9B,gBtBszB8B;;AsBhzB9B;AAAA;AAAA;EACE,StBgzB4B;EsB/yB5B,WtBgzB4B;;AsB3yB9B;EACE,StByyB4B;EsBxyB5B,WtByyB4B;;;AuB/1BlC;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;;AAIF;AAAA;EAEE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAWN;EACE;EACA;EACA;EtBsPI,WALI;EsB/OR,avBgY4B;EuB/X5B,avBqY4B;EuBpY5B,OvBlCS;EuBmCT;EACA;EACA,kBvB5CS;EuB6CT;ErBpCE;;;AqB8CJ;AAAA;AAAA;AAAA;EAIE;EtBgOI,WALI;EC7QN;;;AqBuDJ;AAAA;AAAA;AAAA;EAIE;EtBuNI,WALI;EC7QN;;;AqBgEJ;AAAA;EAEE;;;AAaE;AAAA;ErB/DA;EACA;;AqBqEA;AAAA;ErBtEA;EA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O1BvCW;E0BwCX;;;ADvDF;ECmBA,O1BJa;E0BKb,c1BLa;;A0BOb;EACE,OATY;EAUZ,kB1BTW;E0BUX,c1BVW;;A0Bab;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1BxBW;E0ByBX,c1BzBW;;A0B2BX;EAKI;;AAKN;EAEE,O1BvCW;E0BwCX;;;ADvDF;ECmBA,O1BJa;E0BKb,c1BLa;;A0BOb;EACE,OATY;EAUZ,kB1BTW;E0BUX,c1BVW;;A0Bab;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1BxBW;E0ByBX,c1BzBW;;A0B2BX;EAKI;;AAKN;EAEE,O1BvCW;E0BwCX;;;ADvDF;ECmBA,O1BJa;E0BKb,c1BLa;;A0BOb;EACE,OATY;EAUZ,kB1BTW;E0BUX,c1BVW;;A0Bab;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1BxBW;E0ByBX,c1BzBW;;A0B2BX;EAKI;;AAKN;EAEE,O1BvCW;E0BwCX;;;ADvDF;ECmBA,O1BJa;E0BKb,c1BLa;;A0BOb;EACE,OATY;EAUZ,kB1BTW;E0BUX,c1BVW;;A0Bab;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1BxBW;E0ByBX,c1BzBW;;A0B2BX;EAKI;;AAKN;EAEE,O1BvCW;E0BwCX;;;ADvDF;ECmBA,O1BJa;E0BKb,c1BLa;;A0BOb;EACE,OATY;EAUZ,kB1BTW;E0BUX,c1BVW;;A0Bab;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1BxBW;E0ByBX,c1BzBW;;A0B2BX;EAKI;;AAKN;EAEE,O1BvCW;E0BwCX;;;ADvDF;ECmBA,O1BJa;E0BKb,c1BLa;;A0BOb;EACE,OATY;EAUZ,kB1BTW;E0BUX,c1BVW;;A0Bab;EAEE;;AAGF;EAKE,OArBa;EAsBb,kB1BxBW;E0ByBX,c1BzBW;;A0B2BX;EAKI;;AAKN;EAEE,O1BvCW;E0BwCX;;;AD3CJ;EACE,azBmW4B;EyBlW5B,OzBzCQ;EyB0CR,iBzBgNwC;;AyB9MxC;EACE,OzB+MsC;;AyBvMxC;EAEE,OzB/EO;;;AyB0FX;ECuBE;EzBsKI,WALI;EC7QN;;;AuByFJ;ECmBE;EzBsKI,WALI;EC7QN;;;AyBnBJ;EVgBM,YU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nBgBQ;;;AmBPN;EACE;EACA,OpCkRsC;EoChRtC,kBpCRO;EoCSP,cpCRO;;AoCWT;EACE;EACA,OpC0QsC;EoCzQtC,kBpCfO;EoCgBP,SpCygCgC;EoCxgChC,YpCwjB4B;;;AoCnjB9B;EACE,apC4/BgC;;AoCz/BlC;EACE;EACA,OpC9BO;EkBJT,kBlBkCQ;EoCEN,cpCFM;;AoCKR;EACE,OpC9BO;EoC+BP;EACA,kBpCtCO;EoCuCP,cpCpCO;;;AqCPT;EACE;;;AAOI;EnCqCJ;EACA;;AmChCI;EnCiBJ;EACA;;;AmChCF;EACE;EpCgSE,WALI;;AoCpRF;EnCqCJ;EACA;;AmChCI;EnCiBJ;EACA;;;AmChCF;EACE;EpCgSE,WALI;;AoCpRF;EnCqCJ;EACA;;AmChCI;EnCiBJ;EACA;;;AoC/BJ;EACE;EACA;ErC8RI,WALI;EqCvRR,atCya4B;EsCxa5B;EACA,OtCHS;EsCIT;EACA;EACA;EpCKE;;AoCAF;EACE;;;AAKJ;EACE;EACA;;;ACvBF;EACE;EACA;EACA,evCuvC8B;EuCtvC9B;ErCWE;;;AqCNJ;EAEE;;;AAIF;EACE,avC8Z4B;;;AuCtZ9B;EACE,evCwuC8B;;AuCruC9B;EACE;EACA;EACA;EACA;EACA;;;AAeF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,ODgDgB;ErB9ChB,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,ODgDgB;ErB9ChB,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,ODgDgB;ErB9ChB,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;AD6CF;EClDA,OD8Cc;ErB5Cd,kBqB0CmB;EC1CnB,cD2Ce;;ACzCf;EACE;;;ACHF;EACE;IAAK,uBzCuwC2B;;;AyClwCpC;EACE;EACA,QzCgwCkC;EyC/vClC;ExCwRI,WALI;EwCjRR,kBzCLS;EESP;;;AuCCJ;EACE;EACA;EACA;EACA;EACA,OzCjBS;EyCkBT;EACA;EACA,kBzCUQ;EiBtBJ,YwBaJ;;AxBTI;EwBAN;IxBCQ;;;;AwBWR;EvBYE;EuBVA;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;ACvCR;EACE;EACA;EAGA;EACA;ExCSE;;;AwCLJ;EACE;EACA;;AAEA;EAEE;EACA;;;AAUJ;EACE;EACA,O1ClBS;E0CmBT;;AAGA;EAEE;EACA,O1CzBO;E0C0BP;EACA,kB1CjCO;;A0CoCT;EACE,O1C7BO;E0C8BP,kB1CrCO;;;A0C8CX;EACE;EACA;EACA;EACA,O1C3CS;E0C4CT;EACA,kB1CtDS;E0CuDT;;AAEA;ExCrCE;EACA;;AwCwCF;ExC3BE;EACA;;AwC8BF;EAEE,O1C7DO;E0C8DP;EACA,kB1CrEO;;A0CyET;EACE;EACA,O1C3EO;E0C4EP,kB1C9CM;E0C+CN,c1C/CM;;A0CkDR;EACE;;AAEA;EACE;EACA,kB1C2QwB;;;A0C7P1B;EACE;;AAGE;ExCrCJ;EAZA;;AwCsDI;ExCtDJ;EAYA;;AwC+CI;EACE;;AAGF;EACE,kB1C0OoB;E0CzOpB;;AAEA;EACE;EACA,mB1CqOkB;;;ASzS1B;EiC4CA;IACE;;EAGE;IxCrCJ;IAZA;;EwCsDI;IxCtDJ;IAYA;;EwC+CI;IACE;;EAGF;IACE,kB1C0OoB;I0CzOpB;;EAEA;IACE;IACA,mB1CqOkB;;;ASzS1B;EiC4CA;IACE;;EAGE;IxCrCJ;IAZA;;EwCsDI;IxCtDJ;IAYA;;EwC+CI;IACE;;EAGF;IACE,kB1C0OoB;I0CzOpB;;EAEA;IACE;IACA,mB1CqOkB;;;ASzS1B;EiC4CA;IACE;;EAGE;IxCrCJ;IAZA;;EwCsDI;IxCtDJ;IAYA;;EwC+CI;IACE;;EAGF;IACE,kB1C0OoB;I0CzOpB;;EAEA;IACE;IACA,mB1CqOkB;;;ASzS1B;EiC4CA;IACE;;EAGE;IxCrCJ;IAZA;;EwCsDI;IxCtDJ;IAYA;;EwC+CI;IACE;;EAGF;IACE,kB1C0OoB;I0CzOpB;;EAEA;IACE;IACA,mB1CqOkB;;;ASzS1B;EiC4CA;IACE;;EAGE;IxCrCJ;IAZA;;EwCsDI;IxCtDJ;IAYA;;EwC+CI;IACE;;EAGF;IACE,kB1C0OoB;I0CzOpB;;EAEA;IACE;IACA,mB1CqOkB;;;A0CvN9B;ExC9HI;;AwCiIF;EACE;;AAEA;EACE;;;ACpJJ;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3CRG;E2CSH,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3CRG;E2CSH,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3CRG;E2CSH,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODmK2B;EClK3B,kBD+JsB;;AC5JpB;EAEE,OD6JuB;EC5JvB;;AAGF;EACE,O3CRG;E2CSH,kBDuJuB;ECtJvB,cDsJuB;;;ACpK7B;EACE,ODmK2B;EClK3B,kBD+JsB;;AC5JpB;EAEE,OD6JuB;EC5JvB;;AAGF;EACE,O3CRG;E2CSH,kBDuJuB;ECtJvB,cDsJuB;;;ACpK7B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3CRG;E2CSH,kBDqJqB;ECpJrB,cDoJqB;;;AClK3B;EACE,ODmK2B;EClK3B,kBD+JsB;;AC5JpB;EAEE,OD6JuB;EC5JvB;;AAGF;EACE,O3CRG;E2CSH,kBDuJuB;ECtJvB,cDsJuB;;;ACpK7B;EACE,ODiKyB;EChKzB,kBD+JsB;;AC5JpB;EAEE,OD2JqB;EC1JrB;;AAGF;EACE,O3CRG;E2CSH,kBDqJqB;ECpJrB,cDoJqB;;;AEjK7B;EACE;EACA,O5C04C2B;E4Cz4C3B,Q5Cy4C2B;E4Cx4C3B;EACA,O5CQS;E4CPT;EACA;E1COE;E0CLF,S5C04C2B;;A4Cv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1CxB;EAEA;EACA;EACA;;;AAGF;EACE,OpD+0CwB;EoD90CxB,QpD80CwB;;;AoD10CxB;EACE;AAAA;IAEE;;;ACjEN;EACE;EACA;EACA,SrD04BkC;EqDz4BlC;EACA;EACA;EAEA;EACA,kBrDDS;EqDET;EACA;EpCKI,YoCHJ;;ApCOI;EoCpBN;IpCqBQ;;;;AoCLR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA,arDuZ4B;;;AqDpZ9B;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA,OrDy3CkC;EqDx3ClC;EACA;;;AAGF;EACE;EACA;EACA,OrDi3CkC;EqDh3ClC;EACA;;;AAGF;EACE;EACA;EACA;EACA,QrDy2CkC;EqDx2ClC;EACA;EACA;;;AAGF;EACE;EACA;EACA,QrDg2CkC;EqD/1ClC;EACA;EACA;;;AAGF;EACE;;;AF3EA;EACE;EACA;EACA;;;AGJF;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;AANN;EACE,OtD8EW;;AsD3ET;EAEE;;;ACLR;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACrBJ;EACE;EACA;EACA;EACA;EACA,SxDo4BkC;;;AwDj4BpC;EACE;EACA;EACA;EACA;EACA,SxD43BkC;;;AwDp3BhC;EACE;EACA;EACA,SxDg3B8B;;;AS30BhC;E+CxCA;IACE;IACA;IACA,SxDg3B8B;;;AS30BhC;E+CxCA;IACE;IACA;IACA,SxDg3B8B;;;AS30BhC;E+CxCA;IACE;IACA;IACA,SxDg3B8B;;;AS30BhC;E+CxCA;IACE;IACA;IACA,SxDg3B8B;;;AS30BhC;E+CxCA;IACE;IACA;IACA,SxDg3B8B;;;AyDt4BpC;AAAA;ECIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACXA;EACE;EACA;EACA;EACA;EACA;EACA,S3D2RsC;E2D1RtC;;;ACRJ;ECAE;EACA;EACA;;;AC2CI;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAJF;AAEF;EAEI;EAAA;;;AAYF;AAdF;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;EAAA;;;AAFJ;EAEI;;;AAFJ;EAEI;;;ArDYN;EqDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ArDYN;EqDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ArDYN;EqDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ArDYN;EqDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ArDYN;EqDdE;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;IAAA;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AChCV;ED8BM;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;ACbV;EDWM;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;EAFJ;IAEI;;;AExCV;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","file":"bootstrap.css"} \ No newline at end of file diff --git a/public/css/bootstrap.scss b/public/css/bootstrap.scss index 94420c59f16ad0903df8448ca9c220a4bf548c71..4b8a4202b160299697d2bbcfb6b08d367f9ca465 100644 --- a/public/css/bootstrap.scss +++ b/public/css/bootstrap.scss @@ -94,6 +94,19 @@ $font-size-base: .9rem; } +.card.bg-success { + background-color: #80c299 !important; +} + +.card.bg-danger { + background-color: #e35858 !important; +} + +.card.bg-warning { + background-color: #e3a72f !important; +} + + /* -------------- DataTables -------------- */ @@ -196,6 +209,9 @@ table thead th { } } +.popover .popover-body.alert { + margin-bottom: 0px; +} /* -------------- Listes de définition -------------- */ @@ -241,7 +257,10 @@ dd, dt { background-image: none; } - +.danger-light{ + background-color: #dc4c64; + color: #fff; +} /* -------------- Personnalisation du bootstrap-select -------------- */ diff --git a/public/css/chargens.scss b/public/css/chargens.scss index 140efcf68d0647bcf0c257b1b0b1d6434c64f29b..7e626aa130aff6b518bae451930d84d057ee7bf0 100755 --- a/public/css/chargens.scss +++ b/public/css/chargens.scss @@ -76,8 +76,14 @@ color: darkgrey; } +.seuils-dedoublement .form-control { + padding-left: 2px; + padding-right: 2px; +} + .chargens-formation-edit.form-lien #actif { line-height: 2rem; width: 2rem; height:2rem; -} \ No newline at end of file +} + diff --git a/public/css/fileinput.css b/public/css/fileinput.css deleted file mode 100644 index 9b9e426d3047000412ae8a4662e1339ee1c59c0d..0000000000000000000000000000000000000000 --- a/public/css/fileinput.css +++ /dev/null @@ -1,144 +0,0 @@ -/*! - * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - * @package bootstrap-fileinput - * @version 2.0.0 - * - * File input styling for Bootstrap 3.0 - * Built for Yii Framework 2.0 - * Author: Kartik Visweswaran - * Year: 2013 - * For more Yii related demos visit http://demos.krajee.com - */ -.file-input { - overflow-x: auto; -} - -.file-loading { - top: 0; - right: 0; - width: 25px; - height: 25px; - font-size: 999px; - text-align: right; - color: #fff; - background: transparent url(../img/loading.gif) top left no-repeat; - border: none; -} - -.btn-file { - position: relative; - overflow: hidden; -} - -.btn-file input[type=file] { - position: absolute; - top: 0; - right: 0; - min-width: 100%; - min-height: 100%; - text-align: right; - filter: alpha(opacity=0); - opacity: 0; - background: none repeat scroll 0 0 transparent; - cursor: inherit; - display: block; -} - -.file-caption .glyphicon { - display: inline-block; - min-width: 18px; - float: left; - margin-top: 2px; -} - -.file-caption-name { - display: inline-block; - float: left; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - width: 85%; -} - -.file-error-message { - background-color: #f2dede; - color: #a94442; - text-align: center; - border-radius: 5px; - padding: 5px; -} - -.file-caption-disabled { - background-color: #EEE; - cursor: not-allowed; - opacity: 1; -} - -.file-input .btn .disabled, .file-input .btn[disabled] { - cursor: not-allowed; -} - -.file-preview { - border-radius: 5px; - border: 1px solid #ddd; - padding: 5px; - width: 100%; - margin-bottom: 5px; -} - -.file-preview-frame { - display: table; - margin: 8px; - height: 160px; - border: 1px solid #ddd; - box-shadow: 1px 1px 5px 0 #a2958a; - padding: 6px; - float: left; - text-align: center; -} - -.file-preview-frame:hover { - background-color: #eee; - box-shadow: 2px 2px 5px 0 #333; -} - -.file-preview-image { - height: 150px; - vertical-align: text-center; -} - -.file-preview-text { - display: table-cell; - width: 150px; - height: 150px; - color: #428bca; - font-size: 11px; - vertical-align: middle; - text-align: center; -} - -.file-preview-other { - display: table-cell; - width: 150px; - height: 150px; - font-family: Monaco, Consolas, monospace; - font-size: 11px; - vertical-align: middle; - text-align: center; -} - -.file-input-new .close, .file-input-new .file-preview, .file-input-new .fileinput-remove-button, .file-input-new .fileinput-upload-button, .file-input-new .glyphicon-file { - display: none; -} - -.loading { - background: transparent url(../img/loading.gif) no-repeat scroll center center content-box !important; -} - -.wrap-indicator { - font-weight: 700; - color: #245269; - cursor: pointer; -} - -/*# sourceMappingURL=fileinput.css.map */ diff --git a/public/css/fileinput.css.map b/public/css/fileinput.css.map deleted file mode 100644 index ba9a75a1abc9f767027754514bb26067df16aec8..0000000000000000000000000000000000000000 --- a/public/css/fileinput.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["fileinput.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUG;EAAY;;;AAAgB;EAAc;EAAM;EAAQ;EAAW;EAAY;EAAgB;EAAiB;EAAW;EAAkE;;;AAAY;EAAU;EAAkB;;;AAAgB;EAA2B;EAAkB;EAAM;EAAQ;EAAe;EAAgB;EAAiB;EAAwB;EAAU;EAA8C;EAAe;;;AAAc;EAAyB;EAAqB;EAAe;EAAW;;;AAAe;EAAmB;EAAqB;EAAW;EAAgB;EAAmB;EAAuB;;;AAAU;EAAoB;EAAyB;EAAc;EAAkB;EAAkB;;;AAAY;EAAuB;EAAsB;EAAmB;;;AAAU;EAAsD;;;AAAmB;EAAc;EAAkB;EAAsB;EAAY;EAAW;;;AAAkB;EAAoB;EAAc;EAAW;EAAa;EAAsB;EAAiC;EAAY;EAAW;;;AAAkB;EAA0B;EAAsB;;;AAA8B;EAAoB;EAAa;;;AAA2B;EAAmB;EAAmB;EAAY;EAAa;EAAc;EAAe;EAAsB;;;AAAkB;EAAoB;EAAmB;EAAY;EAAa;EAAsC;EAAe;EAAsB;;;AAAkB;EAAuK;;;AAAa;EAAS;;;AAAoG;EAAgB;EAAgB;EAAc","file":"fileinput.css"} \ No newline at end of file diff --git a/public/css/fileinput.scss b/public/css/fileinput.scss deleted file mode 100755 index 708473da6056d4000573d03a336f8384d4a05707..0000000000000000000000000000000000000000 --- a/public/css/fileinput.scss +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - * @package bootstrap-fileinput - * @version 2.0.0 - * - * File input styling for Bootstrap 3.0 - * Built for Yii Framework 2.0 - * Author: Kartik Visweswaran - * Year: 2013 - * For more Yii related demos visit http://demos.krajee.com - */.file-input{overflow-x:auto}.file-loading{top:0;right:0;width:25px;height:25px;font-size:999px;text-align:right;color:#fff;background:transparent url(../img/loading.gif) top left no-repeat;border:none}.btn-file{position:relative;overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;text-align:right;filter:alpha(opacity=0);opacity:0;background:none repeat scroll 0 0 transparent;cursor:inherit;display:block}.file-caption .glyphicon{display:inline-block;min-width:18px;float:left;margin-top:2px}.file-caption-name{display:inline-block;float:left;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:85%}.file-error-message{background-color:#f2dede;color:#a94442;text-align:center;border-radius:5px;padding:5px}.file-caption-disabled{background-color:#EEE;cursor:not-allowed;opacity:1}.file-input .btn .disabled,.file-input .btn[disabled]{cursor:not-allowed}.file-preview{border-radius:5px;border:1px solid #ddd;padding:5px;width:100%;margin-bottom:5px}.file-preview-frame{display:table;margin:8px;height:160px;border:1px solid #ddd;box-shadow:1px 1px 5px 0 #a2958a;padding:6px;float:left;text-align:center}.file-preview-frame:hover{background-color:#eee;box-shadow:2px 2px 5px 0 #333}.file-preview-image{height:150px;vertical-align:text-center}.file-preview-text{display:table-cell;width:150px;height:150px;color:#428bca;font-size:11px;vertical-align:middle;text-align:center}.file-preview-other{display:table-cell;width:150px;height:150px;font-family:Monaco,Consolas,monospace;font-size:11px;vertical-align:middle;text-align:center}.file-input-new .close,.file-input-new .file-preview,.file-input-new .fileinput-remove-button,.file-input-new .fileinput-upload-button,.file-input-new .glyphicon-file{display:none}.loading{background:transparent url(../img/loading.gif) no-repeat scroll center center content-box!important}.wrap-indicator{font-weight:700;color:#245269;cursor:pointer} \ No newline at end of file diff --git a/public/css/main.css b/public/css/main.css deleted file mode 100644 index 76bc4ecf9a267c7db86710d44d76a6d177357a89..0000000000000000000000000000000000000000 --- a/public/css/main.css +++ /dev/null @@ -1,3 +0,0 @@ - - -/*# sourceMappingURL=main.css.map */ diff --git a/public/css/main.css.map b/public/css/main.css.map deleted file mode 100644 index 241a135de9259da5284d32dd0cfe7873e495265a..0000000000000000000000000000000000000000 --- a/public/css/main.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"main.css"} \ No newline at end of file diff --git a/public/css/main.scss b/public/css/main.scss deleted file mode 100644 index 3f2ff2d6cc8f257ffcade7ead1ca4042c0e884b9..0000000000000000000000000000000000000000 --- a/public/css/main.scss +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/public/css/odf.scss b/public/css/odf.scss index cb5a6f475db749fe0713c0e1818506f5fc09bcc8..19a3205e10098aa0e76fea2bc0be66e39776f95d 100644 --- a/public/css/odf.scss +++ b/public/css/odf.scss @@ -7,6 +7,10 @@ margin-top: 2px; } +.etape-taux-remu { + margin-top: 2px; +} + .etape-taux-mixite { margin-top: 2px; } diff --git a/public/css/print.css b/public/css/print.css deleted file mode 100644 index 2f5c878bdfaa343abae5e9b9b24dadec62adca5c..0000000000000000000000000000000000000000 --- a/public/css/print.css +++ /dev/null @@ -1,25 +0,0 @@ -@media print { - #footer.container { - display: none; - } - .card .collapse { - display: block; - } - .card-well { - border: none; - margin: none; - padding: none; - background: none; - } - .container { - width: 100%; - } - #sidebar { - display: none; - } - .noprint { - display: none; - } -} - -/*# sourceMappingURL=print.css.map */ diff --git a/public/css/print.css.map b/public/css/print.css.map deleted file mode 100644 index dac4f741e59e8555e4d81a37c6d3594bee1c8452..0000000000000000000000000000000000000000 --- a/public/css/print.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["print.scss"],"names":[],"mappings":"AAAA;EACE;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE","file":"print.css"} \ No newline at end of file diff --git a/public/css/tableaux.css b/public/css/tableaux.css deleted file mode 100644 index 57301895cd1e27b49fdf95b3c9d4ddadbe51e4d2..0000000000000000000000000000000000000000 --- a/public/css/tableaux.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined variable. - * , - * 27 | border-color: $border-bottom-color; - * | ^^^^^^^^^^^^^^^^^^^^ - * ' - * tableaux.scss 27:17 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined variable.\a \2577 \a 27 \2502 border-color: $border-bottom-color;\a \2502 ^^^^^^^^^^^^^^^^^^^^\a \2575 \a tableaux.scss 27:17 root stylesheet"; -} diff --git a/public/css/tableaux.css.map b/public/css/tableaux.css.map deleted file mode 100644 index d21d7b3622d295e185d85491d6c4f509bacb26da..0000000000000000000000000000000000000000 --- a/public/css/tableaux.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"tableaux.css"} \ No newline at end of file diff --git a/public/css/unicaen-icon.css b/public/css/unicaen-icon.css deleted file mode 100644 index 171889687308e24e2e4683bfa44310026365f820..0000000000000000000000000000000000000000 --- a/public/css/unicaen-icon.css +++ /dev/null @@ -1,251 +0,0 @@ -.icon:before { - font-family: "Font Awesome 5 Free"; - display: inline-block; - vertical-align: middle; - font-weight: 900; -} - -.icon { - padding-right: 3px; -} - -.icon.iconly { - padding-right: 0; -} - -.icon.icon-voir:before, -.icon.icon-view:before { - content: "\f06e"; -} - -.icon.icon-ajouter:before { - content: "\f0fe"; -} - -.icon.icon-edit:before, -.icon.icon-editer:before, -.icon.icon-modifier:before { - content: "\f303"; -} - -.icon.icon-historiser:before { - content: "\f1f8"; -} - -.icon.icon-restaurer:before { - content: "\f829"; -} - -.icon.icon-monter:before { - content: "\f062"; -} - -.icon.icon-descendre:before { - content: "\f063"; -} - -.icon.icon-user:before, -.icon.icon-utilisateur:before { - content: "\f007"; -} - -.icon.icon-user-add:before, -.icon.icon-utilisateur-ajouter:before { - content: "\f234"; -} - -.icon.icon-user-delete:before, -.icon.icon-utilisateur-supprimer:before { - content: "\f503"; -} - -.icon.icon-listing:before, -.icon.icon-lister:before { - content: "\f0ae"; -} - -.icon.icon-selectionner:before { - content: "\f65e"; -} - -.icon.icon-fichier:before, -.icon.icon-file:before { - content: "\f15b"; -} - -.icon.icon-fichiers:before, -.icon.icon-files:before { - content: "\f0c5"; -} - -.icon.icon-dossier:before { - content: "\f07c"; -} - -.icon.icon-power:before { - content: "\f011"; -} - -.icon.icon-plus:before { - content: "\f067"; -} - -.icon.icon-minus:before { - content: "\f068"; -} - -.icon.icon-retour:before { - content: "\f053"; -} - -.icon.icon-supprimer:before, -.icon.icon-historiser:before, -.icon.icon-delete:before { - content: "\f1f8"; -} - -.icon.icon-detruire:before, -.icon.icon-destroy:before { - content: "\f1e2"; -} - -.icon.icon-importer:before, -.icon.icon-import:before { - content: "\f56f"; -} - -.icon.icon-exporter:before, -.icon.icon-export:before { - content: "\f56e"; -} - -.icon.icon-checked:before, -.icon.icon-oui:before, -.icon.icon-yes:before { - content: "\f00c"; -} - -.icon.icon-unchecked:before, -.icon.icon-non:before, -.icon.icon-no:before { - content: "\f00d"; -} - -.icon.icon-succes:before, -.icon.icon-success:before, -.icon.icon-ok:before { - content: "\f164"; -} - -.icon.icon-echec:before, -.icon.icon-failure:before, -.icon.icon-ko:before { - content: "\f165"; -} - -.icon.icon-info:before, -.icon.icon-information:before { - content: "\f05a"; -} - -.icon.icon-warning:before, -.icon.icon-attention:before, -.icon.icon-avertissement:before { - content: "\f071"; -} - -.icon.icon-question:before { - content: "\f059"; -} - -.icon.icon-cloner:before { - content: "\f24d"; -} - -.icon.icon-toggle-on:before { - content: "\f205"; -} - -.icon.icon-toggle-off:before { - content: "\f204"; -} - -.icon.icon-pdf:before { - content: "\f1c1"; -} - -.icon.icon-csv:before { - content: "\f6dd"; -} - -.icon.icon-code:before { - content: "\f1c9"; -} - -.icon.icon-valider:before { - content: "\f00c"; -} - -.icon.icon-recharger:before, -.icon.icon-refresh:before { - content: "\f021"; -} - -.icon.icon-notify:before, -.icon.icon-notifier:before { - content: "\f0e0"; -} - -.icon.icon-telecharger:before, -.icon.icon-download:before { - content: "\f019"; -} - -.icon.icon-televerser:before, -.icon.icon-upload:before { - content: "\f093"; -} - -.icon.icon-euro:before { - content: "\f153"; -} - -.icon.icon-filtrer:before, -.icon.icon-filter:before { - content: "\f0b0"; -} - -.icon.icon-clef:before { - content: "\f084"; -} - -.icon.icon-diagramme:before { - content: "\f080"; -} - -.icon.icon-star:before { - content: "\f005"; -} - -.icon.icon-calendrier:before { - content: "\f133"; -} - -.icon.icon-chercher:before, -.icon.icon-search:before { - content: "\f002"; -} - -.icon.icon-compresser:before, -.icon.icon-archive:before, -.icon.icon-zip:before { - content: "\f1c6"; -} - -.icon.icon-attente, -.icon.icon-wait, -.icon.icon-hourglass { - content: "\f252"; -} - -/*# sourceMappingURL=unicaen-icon.css.map */ diff --git a/public/css/unicaen-icon.css.map b/public/css/unicaen-icon.css.map deleted file mode 100644 index 5e5341de23ab9541044794e0f0a3955015408223..0000000000000000000000000000000000000000 --- a/public/css/unicaen-icon.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["unicaen-icon.scss"],"names":[],"mappings":"AAAA;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAEJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;AAAA;EAGI;;;AAEJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;AAAA;AAAA;EAGI;;;AAGJ;AAAA;AAAA;EAGI","file":"unicaen-icon.css"} \ No newline at end of file diff --git a/public/dist/assets/main-cd791875.css b/public/dist/assets/main-cd791875.css new file mode 100644 index 0000000000000000000000000000000000000000..c3eda95474ef86b038b21a44ff3f52fcabb3b590 --- /dev/null +++ b/public/dist/assets/main-cd791875.css @@ -0,0 +1 @@ +.card-header h5[data-v-e757a735]{font-weight:500}.btn[data-v-e757a735]{margin-left:2px;margin-right:2px} diff --git a/public/dist/assets/main-fe799c87.js b/public/dist/assets/main-fe799c87.js new file mode 100644 index 0000000000000000000000000000000000000000..6f12bec411fe26a86f5939d44e8579eb39f057eb --- /dev/null +++ b/public/dist/assets/main-fe799c87.js @@ -0,0 +1 @@ +import{c as a,o as r,n as T,a as e,t as d,r as M,w as j,v as V,b as h,F as b,d as k,e as m,f,g as v,h as S,i as H,j as U,p as O,k as D,l as E}from"./vendor-f378f3a9.js";const y=(i,t)=>{const s=i.__vccOpts||i;for(const[_,o]of t)s[_]=o;return s},N={name:"UIcon",props:{valeur:{required:!0,type:Float64Array}},computed:{affichage:function(){return Util.formattedHeures(this.valeur,!0)}}},q=["innerHTML"];function F(i,t,s,_,o,n){return r(),a("span",{class:"heures",innerHTML:n.affichage},null,8,q)}const z=y(N,[["render",F]]),B=Object.freeze(Object.defineProperty({__proto__:null,default:z},Symbol.toStringTag,{value:"Module"})),$={name:"UIcon",props:{name:{required:!0,type:String},variant:{required:!1,type:String}}};function K(i,t,s,_,o,n){return r(),a("i",{class:T(`fas fa-${s.name} text-${s.variant}`)},null,2)}const w=y($,[["render",K]]),G=Object.freeze(Object.defineProperty({__proto__:null,default:w},Symbol.toStringTag,{value:"Module"})),J={name:"UModal",props:{id:{required:!0,type:String},title:{required:!0,type:String}}},Q=["id"],W={class:"modal-dialog"},X={class:"modal-content"},Y={class:"modal-header"},Z={class:"modal-title"},ee=e("button",{type:"button",class:"btn-close","data-bs-dismiss":"modal","aria-label":"Close"},null,-1),te={class:"modal-body"},ie={class:"modal-footer"},se=e("button",{type:"button",class:"btn btn-secondary","data-bs-dismiss":"modal"},"Fermer",-1);function ne(i,t,s,_,o,n){return r(),a("div",{class:"modal fade",id:s.id,tabindex:"-1","aria-hidden":"true"},[e("div",W,[e("div",X,[e("div",Y,[e("h5",Z,d(s.title),1),ee]),e("div",te,[M(i.$slots,"body")]),e("div",ie,[M(i.$slots,"footer"),se])])])],8,Q)}const re=y(J,[["render",ne]]),ae=Object.freeze(Object.defineProperty({__proto__:null,default:re},Symbol.toStringTag,{value:"Module"})),le={name:"Utilisateur",props:{nom:String,mail:String}},oe=["href"];function ue(i,t,s,_,o,n){return r(),a("a",{href:`mailto:${s.mail}`},d(s.nom),9,oe)}const de=y(le,[["render",ue]]),ce=Object.freeze(Object.defineProperty({__proto__:null,default:de},Symbol.toStringTag,{value:"Module"})),me={name:"Recherche",data(){return{searchTerm:"",noResult:0,intervenants:[],checkedTypes:["vacataire","permanent","etudiant"]}},methods:{rechercher:function(i){this.searchTerm=i.currentTarget.value,this.searchTerm==""&&(this.noResult=0),this.searchTerm!=""&&this.reload()},urlFiche(i){return"/intervenant/code:"+i+"/voir"},reload(){this.timer&&(clearTimeout(this.timer),this.timer=null),this.timer=setTimeout(()=>{axios.post(Util.url("intervenant/recherche-json"),{term:this.searchTerm}).then(i=>{let t=i.data,s=[];for(const _ in t){if(t[_].typeIntervenantCode=="E"&&this.checkedTypes.includes("vacataire")){s.push(t[_]);continue}if(t[_].typeIntervenantCode=="P"&&this.checkedTypes.includes("permanent")){s.push(t[_]);continue}if(t[_].typeIntervenantCode=="S"&&this.checkedTypes.includes("etudiant")){s.push(t[_]);continue}}this.intervenants=s,this.intervenants.length==0?this.noResult=1:this.noResult=0}).catch(i=>{console.log(i.message)})},800)}}},he=e("h3",null,"Saisissez le nom suivi éventuellement du prénom (2 lettres minimum)",-1),_e={class:"intervenant-recherche"},ve={class:"critere"},pe=e("br",null,null,-1),fe=e("span",{class:"fw-bold"},"Types d'intervenant : ",-1),be=e("br",null,null,-1),xe={key:0,class:"table table-bordered table-hover"},ye=e("thead",null,[e("tr",null,[e("th",{style:{width:"90px"}}),e("th",null,"Civilité"),e("th",null,"Nom"),e("th",null,"Prenom"),e("th",null,"Structure"),e("th",null,"Statut"),e("th",null,"Date de naissance"),e("th",null,"N° Personnel")])],-1),ge=["title"],ke={style:{}},Ue=["href"],Ce=e("i",{class:"fas fa-eye"},null,-1),Te={key:1,class:"table table-bordered table-hover"},Se=e("thead",null,[e("tr",null,[e("th",{style:{width:"90px"}}),e("th",null,"Civilité"),e("th",null,"Nom"),e("th",null,"Prenom"),e("th",null,"Structure"),e("th",null,"Statut"),e("th",null,"Date de naissance"),e("th",null,"N° Personnel")])],-1),je=e("tbody",null,[e("tr",null,[e("td",{style:{"text-align":"center"},colspan:"8"},"Aucun intervenant trouvé")])],-1),Ve=[Se,je];function Re(i,t,s,_,o,n){return r(),a(b,null,[he,e("div",_e,[e("div",ve,[e("div",null,[e("input",{id:"term",onKeyup:t[0]||(t[0]=(...l)=>n.rechercher&&n.rechercher(...l)),class:"form-control input",type:"text",placeholder:"votre recherche..."},null,32),pe]),e("div",null,[fe,j(e("input",{onChange:t[1]||(t[1]=l=>n.reload()),type:"checkbox",name:"type[]",value:"permanent",checked:"checked","onUpdate:modelValue":t[2]||(t[2]=l=>o.checkedTypes=l)},null,544),[[V,o.checkedTypes]]),h(" Permanent "),j(e("input",{onChange:t[3]||(t[3]=l=>n.reload()),type:"checkbox",name:"type[]",value:"vacataire",checked:"checked","onUpdate:modelValue":t[4]||(t[4]=l=>o.checkedTypes=l)},null,544),[[V,o.checkedTypes]]),h(" Vacataire "),j(e("input",{onChange:t[5]||(t[5]=l=>n.reload()),type:"checkbox",name:"type[]",value:"etudiant",checked:"checked","onUpdate:modelValue":t[6]||(t[6]=l=>o.checkedTypes=l)},null,544),[[V,o.checkedTypes]]),h(" Etudiant ")]),be])]),o.intervenants.length>0?(r(),a("table",xe,[ye,e("tbody",null,[(r(!0),a(b,null,k(o.intervenants,(l,p)=>(r(),a("tr",{class:T({"bg-danger":l.destruction!==null}),title:l.destruction!==null?"Fiche historisé":""},[e("td",ke,[e("a",{href:n.urlFiche(l.code)},[Ce,h(" Fiche")],8,Ue)]),e("td",null,d(l.civilite),1),e("td",null,d(l.nom),1),e("td",null,d(l.prenom),1),e("td",null,d(l.structure),1),e("td",null,d(l.statut),1),e("td",null,d(l["date-naissance"]),1),e("td",null,d(l["numero-personnel"]),1)],10,ge))),256))])])):m("",!0),o.intervenants.length==0&&o.noResult==1?(r(),a("table",Te,Ve)):m("",!0)],64)}const Me=y(me,[["render",Re]]),He=Object.freeze(Object.defineProperty({__proto__:null,default:Me},Symbol.toStringTag,{value:"Module"}));const Ae={name:"Mission",props:{mission:{required:!0}},data(){return{validationText:this.calcValidation(this.mission.validation),saisieUrl:Util.url("mission/saisie/:mission",{mission:this.mission.id}),validerUrl:Util.url("mission/valider/:mission",{mission:this.mission.id}),devaliderUrl:Util.url("mission/devalider/:mission",{mission:this.mission.id}),supprimerUrl:Util.url("mission/supprimer/:mission",{mission:this.mission.id})}},watch:{"mission.validation"(i){this.validationText=this.calcValidation(i)}},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)":Util.formattedHeures(this.mission.heures)+" heures ("+Util.formattedHeures(this.mission.heuresValidees)+" validées)"}},methods:{calcValidation(i){return i===null?"A valider":i.id===null?"Autovalidée":"Validation du "+i.histoCreation+" par "},saisie(i){modAjax(i.target,t=>{this.refresh()})},supprimer(i){popConfirm(i.target,t=>{this.$emit("supprimer",this.mission)})},valider(i){popConfirm(i.target,t=>{this.$emit("refresh",t.data)})},devalider(i){popConfirm(i.target,t=>{this.$emit("refresh",t.data)})},volumeHoraireSupprimer(i){i.target.href=Util.url("mission/volume-horaire/supprimer/:missionVolumeHoraire",{missionVolumeHoraire:i.target.dataset.id}),popConfirm(i.target,t=>{this.$emit("refresh",t.data)})},volumeHoraireValider(i){i.target.href=Util.url("mission/volume-horaire/valider/:missionVolumeHoraire",{missionVolumeHoraire:i.target.dataset.id}),popConfirm(i.target,t=>{this.$emit("refresh",t.data)})},volumeHoraireDevalider(i){i.target.href=Util.url("mission/volume-horaire/devalider/:missionVolumeHoraire",{missionVolumeHoraire:i.target.dataset.id}),popConfirm(i.target,t=>{this.$emit("refresh",t.data)})},refresh(){axios.get(Util.url("mission/get/:mission",{mission:this.mission.id})).then(i=>{this.$emit("refresh",i.data)})}}},g=i=>(O("data-v-e757a735"),i=i(),D(),i),Le=["id"],we={class:"card-header card-header-h3"},Ie={class:"float-end"},Pe={class:"card-body"},Oe={class:"row"},De={class:"col-md-8"},Ee={class:"row"},Ne={class:"col-md-12"},qe=g(()=>e("label",{class:"form-label"},"Composante en charge du suivi",-1)),Fe={class:"form-control"},ze={class:"row"},Be={class:"col-md-5"},$e=g(()=>e("label",{class:"form-label"},"Taux de rémunération",-1)),Ke={class:"form-control"},Ge={class:"col-md-7"},Je=g(()=>e("label",{class:"form-label"},"Nombre d'heures prévisionnelles",-1)),Qe={class:"input-group mb-3"},We=["innerHTML"],Xe=["data-bs-target"],Ye={class:"row"},Ze={class:"col-md-12"},et=g(()=>e("label",{class:"form-label"},"Descriptif de la mission",-1)),tt={class:"form-control"},it=g(()=>e("div",{class:"row"},[e("div",{class:"col-md-12"}," ")],-1)),st={class:"row"},nt={class:"col-md-12"},rt=["href"],at=["href"],lt=["href"],ot=["href"],ut={class:"col-md-4"},dt=g(()=>e("div",null,[e("label",{class:"form-label"},"Suivi")],-1)),ct=g(()=>e("div",null," Aucune heure réalisée ",-1)),mt={class:"table table-bordered table-condensed"},ht=g(()=>e("thead",null,[e("tr",null,[e("th",null,"Heures"),e("th",null,"Statut"),e("th",null,"Actions")])],-1)),_t={style:{"text-align":"right"}},vt=g(()=>e("br",null,null,-1)),pt={key:0},ft=["data-id"],bt=["data-id"],xt=["data-id"];function yt(i,t,s,_,o,n){const l=U("u-icon"),p=U("utilisateur"),c=U("u-heures"),x=U("u-modal");return r(),a(b,null,[e("div",{id:s.mission.id,class:T(["card",{"bg-success":s.mission.valide,"bg-default":!s.mission.valide}])},[e("form",{onSubmit:t[4]||(t[4]=f((...u)=>i.submitForm&&i.submitForm(...u),["prevent"]))},[e("div",we,[e("h5",null,[h(d(s.mission.typeMission.libelle)+" ",1),e("span",Ie,"Du "+d(s.mission.dateDebut)+" au "+d(s.mission.dateFin),1)])]),e("div",Pe,[e("div",Oe,[e("div",De,[e("div",Ee,[e("div",Ne,[qe,e("div",Fe,d(s.mission.structure.libelle),1)])]),e("div",ze,[e("div",Be,[$e,e("div",Ke,d(s.mission.tauxRemu.libelle),1)]),e("div",Ge,[Je,e("div",Qe,[e("div",{class:"form-control",innerHTML:n.heuresLib},null,8,We),e("button",{class:"input-group-btn btn btn-secondary","data-bs-toggle":"modal","data-bs-target":`#details-${s.mission.id}`},[v(l,{name:""}),h(" Détails ")],8,Xe)])])]),e("div",Ye,[e("div",Ze,[et,e("div",tt,d(s.mission.description),1)])]),it,e("div",st,[e("div",nt,[s.mission.canSaisie?(r(),a("a",{key:0,href:o.saisieUrl,class:"btn btn-primary",onClick:t[0]||(t[0]=f((...u)=>n.saisie&&n.saisie(...u),["prevent"]))},"Modifier",8,rt)):m("",!0),s.mission.canValider?(r(),a("a",{key:1,href:o.validerUrl,class:"btn btn-secondary","data-title":"Validation de la mission","data-content":"Êtes-vous sur de vouloir valider la mission ?",onClick:t[1]||(t[1]=f((...u)=>n.valider&&n.valider(...u),["prevent"]))},"Valider",8,at)):m("",!0),s.mission.canDevalider?(r(),a("a",{key:2,href:o.devaliderUrl,class:"btn btn-danger","data-title":"Dévalidation de la mission","data-content":"Êtes-vous sur de vouloir dévalider la mission ?",onClick:t[2]||(t[2]=f((...u)=>n.devalider&&n.devalider(...u),["prevent"]))},"Dévalider",8,lt)):m("",!0),s.mission.canSupprimer?(r(),a("a",{key:3,href:o.supprimerUrl,class:"btn btn-danger","data-title":"Suppression de la mission","data-content":"Êtes-vous sur de vouloir supprimer la mission ?",onClick:t[3]||(t[3]=f((...u)=>n.supprimer&&n.supprimer(...u),["prevent"]))},"Supprimer",8,ot)):m("",!0)])])]),e("div",ut,[dt,e("div",null,[v(l,{name:"thumbs-up",variant:"success"}),h(" Créé le "+d(s.mission.histoCreation)+" par ",1),v(p,{nom:s.mission.histoCreateur.displayName,mail:s.mission.histoCreateur.email},null,8,["nom","mail"])]),e("div",null,[v(l,{name:s.mission.valide?"thumbs-up":"thumbs-down",variant:s.mission.valide?"success":"info"},null,8,["name","variant"]),h(" "+d(o.validationText)+" ",1),s.mission.validation&&s.mission.validation.histoCreateur?(r(),S(p,{key:0,nom:s.mission.validation.histoCreateur.displayName,mail:s.mission.validation.histoCreateur.email},null,8,["nom","mail"])):m("",!0)]),e("div",null,[v(l,{name:s.mission.contrat?"thumbs-up":"thumbs-down",variant:s.mission.contrat?"success":"info"},null,8,["name","variant"]),h(" "+d(s.mission.contrat?"Contrat établi":"Pas de contrat"),1)]),ct])])])],32)],10,Le),v(x,{id:`details-${s.mission.id}`,title:"Détail des heures prévisionnelles"},{body:H(()=>[e("table",mt,[ht,e("tbody",null,[(r(!0),a(b,null,k(s.mission.volumesHoraires,u=>(r(),a("tr",{key:u.id},[e("td",_t,[v(c,{valeur:u.heures},null,8,["valeur"])]),e("td",null,[v(l,{name:"thumbs-up",variant:"success"}),h(" Saisi par "),v(p,{nom:u.histoCreateur.displayName,mail:u.histoCreateur.email},null,8,["nom","mail"]),h(" le "+d(u.histoCreation)+" ",1),vt,v(l,{name:u.valide?"thumbs-up":"thumbs-down",variant:u.valide?"success":"info"},null,8,["name","variant"]),h(" "+d(u.validation&&u.validation.id==null?"Autovalidé":u.validation?"":"à valider")+" ",1),u.validation&&u.validation.histoCreateur?(r(),a("span",pt,[h(" Validé par "),v(p,{nom:u.validation.histoCreateur.displayName,mail:u.validation.histoCreateur.email},null,8,["nom","mail"]),h(" le "+d(u.validation.histoCreation),1)])):m("",!0)]),e("td",null,[u.canValider?(r(),a("a",{key:0,class:"btn btn-secondary","data-id":u.id,"data-title":"Validation du volume horaire","data-content":"Êtes-vous sur de vouloir valider ce volume horaire ?",onClick:t[5]||(t[5]=f((...C)=>n.volumeHoraireValider&&n.volumeHoraireValider(...C),["prevent"]))},"Valider",8,ft)):m("",!0),u.canDevalider?(r(),a("a",{key:1,class:"btn btn-danger","data-id":u.id,"data-title":"Dévalidation du volume horaire","data-content":"Êtes-vous sur de vouloir dévalider ce volume horaire ?",onClick:t[6]||(t[6]=f((...C)=>n.volumeHoraireDevalider&&n.volumeHoraireDevalider(...C),["prevent"]))},"Dévalider",8,bt)):m("",!0),u.canSupprimer?(r(),a("a",{key:2,class:"btn btn-danger","data-id":u.id,"data-title":"Suppression du volume horaire","data-content":"Êtes-vous sur de vouloir supprimer le volume horaire ?",onClick:t[7]||(t[7]=f((...C)=>n.volumeHoraireSupprimer&&n.volumeHoraireSupprimer(...C),["prevent"]))},"Supprimer",8,xt)):m("",!0)])]))),128))])])]),footer:H(()=>[]),_:1},8,["id"])],64)}const I=y(Ae,[["render",yt],["__scopeId","data-v-e757a735"]]),gt=Object.freeze(Object.defineProperty({__proto__:null,default:I},Symbol.toStringTag,{value:"Module"})),kt={components:{mission:I},props:{intervenant:{type:Number,required:!0},canAddMission:{type:Boolean,required:!0}},data(){return{missions:[],ajoutUrl:Util.url("mission/ajout/:intervenant",{intervenant:this.intervenant})}},mounted(){this.reload()},methods:{ajout(i){modAjax(i.target,t=>{this.reload()})},supprimer(i){this.reload()},refresh(i){console.log(i);let t=Util.json.indexById(this.missions,i.id);this.missions[t]=i},reload(){axios.get(Util.url("mission/liste/:intervenant",{intervenant:this.intervenant})).then(i=>{this.missions=i.data})}}},Ut=["href"];function Ct(i,t,s,_,o,n){const l=U("mission");return r(),a(b,null,[(r(!0),a(b,null,k(o.missions,p=>(r(),S(l,{onSupprimer:n.supprimer,onRefresh:n.refresh,key:p.id,mission:p},null,8,["onSupprimer","onRefresh","mission"]))),128)),s.canAddMission?(r(),a("a",{key:0,class:"btn btn-primary",href:o.ajoutUrl,onClick:t[0]||(t[0]=f((...p)=>n.ajout&&n.ajout(...p),["prevent"]))},"Ajout d'une nouvelle mission",8,Ut)):m("",!0)],64)}const Tt=y(kt,[["render",Ct]]),St=Object.freeze(Object.defineProperty({__proto__:null,default:Tt},Symbol.toStringTag,{value:"Module"})),jt={name:"Taux",components:{UIcon:w},props:{taux:{required:!0},listeTaux:{required:!0}},data(){return{saisieUrl:Util.url("taux/saisir/:tauxRemu",{tauxRemu:this.taux.id}),supprimerUrl:Util.url("taux/supprimer/:tauxRemu",{tauxRemu:this.taux.id}),ajoutValeurUrl:Util.url("taux/saisir-valeur/:tauxRemu",{tauxRemu:this.taux.id})}},methods:{saisie(i){modAjax(i.target,t=>{this.$emit("refreshListe")})},ajoutValeur(i){modAjax(i.target,t=>{this.$emit("refreshListe")})},saisieValeur(i){let t=i.target.parentElement;t.href=Util.url("taux/saisir-valeur/:tauxRemu/:tauxRemuValeur",{tauxRemu:this.taux.id,tauxRemuValeur:t.dataset.id}),modAjax(t,s=>{this.$emit("refreshListe")})},refreshListe(i){this.$emit("refreshListe")},supprimer(i){popConfirm(i.target,t=>{this.$emit("refreshListe")})},supprimerValeur(i){let t=i.target.parentElement;t.href=Util.url("taux/supprimer-valeur/:tauxRemuValeur",{tauxRemuValeur:t.dataset.id}),popConfirm(t,s=>{this.$emit("refreshListe")})},refresh(i){axios.get(Util.url("taux/get/:tauxRemu",{tauxRemu:i.id})).then(t=>{this.$emit("refresh",t.data)})}}},Vt={class:"card-header"},Rt={style:{display:"inline"}},Mt={class:"float-end"},Ht=["href"],At=["href"],Lt={class:"card-body"},wt={key:0},It=e("br",null,null,-1),Pt={class:""},Ot={class:"row align-items-start"},Dt={class:"col-md-4"},Et={class:"col"},Nt=["data-id"],qt=["data-id"],Ft=["href"],zt={key:1,class:"row"},Bt={class:"col-md-7"},$t=e("br",null,null,-1),Kt={class:"row align-items-start"},Gt={class:"col-md-8"},Jt={class:"col-md-auto"},Qt=["data-id"],Wt=["data-id"],Xt=["href"],Yt={class:"col"},Zt=e("br",null,null,-1),ei={key:0},ti={key:0};function ii(i,t,s,_,o,n){const l=U("u-icon"),p=U("taux",!0);return r(),a(b,null,[e("div",{class:T(["card",{"ms-5":s.taux.tauxRemu}])},[e("div",Vt,[e("h3",Rt,d(s.taux.libelle)+" ("+d(s.taux.code)+")",1),e("div",Mt,[s.taux.canEdit?(r(),a("a",{key:0,href:o.saisieUrl,class:"btn btn-primary",onClick:t[0]||(t[0]=f((...c)=>n.saisie&&n.saisie(...c),["prevent"]))},[v(l,{name:"pen-to-square"}),h(" Modifier")],8,Ht)):m("",!0),h(" "),s.taux.canDelete?(r(),a("a",{key:1,href:o.supprimerUrl,class:"btn btn-danger",onClick:t[1]||(t[1]=f((...c)=>n.supprimer&&n.supprimer(...c),["prevent"]))},[v(l,{name:"trash-can"}),h(" Supprimer")],8,At)):m("",!0)])]),e("div",Lt,[s.taux.tauxRemu?m("",!0):(r(),a("div",wt,[h(" Modification :"),It,e("ul",null,[(r(!0),a(b,null,k(s.taux.tauxRemuValeurs,c=>(r(),a("div",{key:c.id},[e("li",Pt,[e("div",Ot,[e("div",Dt,d(c.valeur)+"€/h à partir du "+d(c.dateEffet),1),e("div",Et,[s.taux.canEdit?(r(),a("a",{key:0,class:"text-primary",onClick:t[2]||(t[2]=f((...x)=>n.saisieValeur&&n.saisieValeur(...x),["prevent"])),"data-id":c.id},[v(l,{name:"pen-to-square"})],8,Nt)):m("",!0),h(" "),s.taux.canEdit?(r(),a("a",{key:1,class:"text-primary",onClick:t[3]||(t[3]=f((...x)=>n.supprimerValeur&&n.supprimerValeur(...x),["prevent"])),"data-id":c.id},[v(l,{name:"trash-can"})],8,qt)):m("",!0)])])])]))),128))]),s.taux.canEdit?(r(),a("a",{key:0,href:o.ajoutValeurUrl,class:"btn btn-primary btn-sm",onClick:t[4]||(t[4]=f((...c)=>n.ajoutValeur&&n.ajoutValeur(...c),["prevent"]))},[v(l,{name:"plus"}),h(" Ajouter une valeur ")],8,Ft)):m("",!0)])),s.taux.tauxRemu?(r(),a("div",zt,[e("div",Bt,[h(" Modification :"),$t,e("ul",null,[(r(!0),a(b,null,k(s.taux.tauxRemuValeurs,c=>(r(),a("div",null,[e("li",null,[e("div",Kt,[e("div",Gt," Coéfficient de "+d(c.valeur)+" à partir du "+d(c.dateEffet),1),e("div",Jt,[s.taux.canEdit?(r(),a("a",{key:0,class:"text-primary",onClick:t[5]||(t[5]=f((...x)=>n.saisieValeur&&n.saisieValeur(...x),["prevent"])),"data-id":c.id},[v(l,{name:"pen-to-square"})],8,Qt)):m("",!0),h(" "),s.taux.canEdit?(r(),a("a",{key:1,class:"text-primary",onClick:t[6]||(t[6]=f((...x)=>n.supprimerValeur&&n.supprimerValeur(...x),["prevent"])),"data-id":c.id},[v(l,{name:"trash-can"})],8,Wt)):m("",!0)])])])]))),256))]),s.taux.canEdit?(r(),a("a",{key:0,href:o.ajoutValeurUrl,class:"btn btn-primary btn-sm",onClick:t[7]||(t[7]=f((...c)=>n.ajoutValeur&&n.ajoutValeur(...c),["prevent"]))},[v(l,{name:"plus"})],8,Xt)):m("",!0)]),e("div",Yt,[h(" Valeurs calculées (indexées sur le taux "+d(s.taux.tauxRemu.libelle)+") : ",1),e("ul",null,[(r(!0),a(b,null,k(s.taux.tauxRemuValeursIndex,c=>(r(),a("div",null,[e("li",null,d(c.valeur)+"€/h à partir du "+d(c.date),1)]))),256))]),Zt])])):m("",!0)])],2),s.taux.tauxRemu?m("",!0):(r(),a("div",ei,[(r(!0),a(b,null,k(s.listeTaux,c=>(r(),a("div",{key:c},[c.tauxRemu&&c.tauxRemu.id===s.taux.id?(r(),a("div",ti,[(r(),S(p,{onSupprimer:n.supprimer,onRefreshListe:n.refreshListe,key:s.taux.id,taux:c,listeTaux:s.listeTaux},null,8,["onSupprimer","onRefreshListe","taux","listeTaux"]))])):m("",!0)]))),128))]))],64)}const P=y(jt,[["render",ii]]),si=Object.freeze(Object.defineProperty({__proto__:null,default:P},Symbol.toStringTag,{value:"Module"})),ni={components:{taux:P},props:{canEditTaux:{type:Boolean,required:!0}},data(){return{listeTaux:[],ajoutUrl:Util.url("taux/saisir")}},mounted(){this.reload()},methods:{ajout(i){modAjax(i.target,t=>{this.reload()})},supprimer(){this.reload()},refreshListe(){this.reload()},refresh(i){let t=Util.json.indexById(this.listeTaux,i.id);this.listeTaux[t]=i},reload(){axios.get(Util.url("taux/liste-taux")).then(i=>{this.listeTaux=i.data})}}},ri=["href"];function ai(i,t,s,_,o,n){const l=U("taux");return r(),a(b,null,[(r(!0),a(b,null,k(o.listeTaux,p=>(r(),a("div",null,[p.tauxRemu?m("",!0):(r(),S(l,{onSupprimer:n.supprimer,onRefreshListe:n.refreshListe,key:p.id,taux:p,listeTaux:o.listeTaux},null,8,["onSupprimer","onRefreshListe","taux","listeTaux"]))]))),256)),s.canEditTaux?(r(),a("a",{key:0,class:"btn btn-primary",href:o.ajoutUrl,onClick:t[0]||(t[0]=f((...p)=>n.ajout&&n.ajout(...p),["prevent"]))},"Ajout d'un nouveau taux",8,ri)):m("",!0)],64)}const li=y(ni,[["render",ai]]),oi=Object.freeze(Object.defineProperty({__proto__:null,default:li},Symbol.toStringTag,{value:"Module"})),A={uIcon:"Application/UI/UIcon",uHeures:"Application/UI/UHeures",uModal:"Application/UI/UModal",utilisateur:"Application/Utilisateur"},L=Object.assign({"./Application/UI/UHeures.vue":B,"./Application/UI/UIcon.vue":G,"./Application/UI/UModal.vue":ae,"./Application/Utilisateur.vue":ce,"./Intervenant/Recherche.vue":He,"./Mission/Liste.vue":St,"./Mission/Mission.vue":gt,"./Paiement/ListeTaux.vue":oi,"./Paiement/Taux.vue":si});let ui="./";const R={};for(const i in L){let s=i.slice(ui.length,-4).replace("/","");R[s]=L[i].default}for(const i of document.getElementsByClassName("vue-app")){let t=E({template:i.innerHTML,components:R});for(const s in A){let _=A[s].replace("/","");t.component(s,R[_])}t.mount(i)} diff --git a/public/dist/assets/vendor-f378f3a9.js b/public/dist/assets/vendor-f378f3a9.js new file mode 100644 index 0000000000000000000000000000000000000000..739ce85faf8d235898d350a6b76cb2b9d0a15f02 --- /dev/null +++ b/public/dist/assets/vendor-f378f3a9.js @@ -0,0 +1,7 @@ +function Ae(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r<s.length;r++)n[s[r]]=!0;return t?r=>!!n[r.toLowerCase()]:r=>!!n[r]}const Cf="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt",Tf=Ae(Cf);function Hn(e){if(j(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=J(s)?Zl(s):Hn(s);if(r)for(const i in r)t[i]=r[i]}return t}else{if(J(e))return e;if(ie(e))return e}}const vf=/;(?![^(]*\))/g,Sf=/:([^]+)/,wf=/\/\*.*?\*\//gs;function Zl(e){const t={};return e.replace(wf,"").split(vf).forEach(n=>{if(n){const s=n.split(Sf);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Vn(e){let t="";if(J(e))t=e;else if(j(e))for(let n=0;n<e.length;n++){const s=Vn(e[n]);s&&(t+=s+" ")}else if(ie(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}function Nf(e){if(!e)return null;let{class:t,style:n}=e;return t&&!J(t)&&(e.class=Vn(t)),n&&(e.style=Hn(n)),e}const Of="html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot",Pf="svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view",Af="area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr",If=Ae(Of),Mf=Ae(Pf),Rf=Ae(Af),kf="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Ff=Ae(kf);function Xl(e){return!!e||e===""}function Lf(e,t){if(e.length!==t.length)return!1;let n=!0;for(let s=0;n&&s<e.length;s++)n=gt(e[s],t[s]);return n}function gt(e,t){if(e===t)return!0;let n=zi(e),s=zi(t);if(n||s)return n&&s?e.getTime()===t.getTime():!1;if(n=mt(e),s=mt(t),n||s)return e===t;if(n=j(e),s=j(t),n||s)return n&&s?Lf(e,t):!1;if(n=ie(e),s=ie(t),n||s){if(!n||!s)return!1;const r=Object.keys(e).length,i=Object.keys(t).length;if(r!==i)return!1;for(const l in e){const o=e.hasOwnProperty(l),c=t.hasOwnProperty(l);if(o&&!c||!o&&c||!gt(e[l],t[l]))return!1}}return String(e)===String(t)}function Fs(e,t){return e.findIndex(n=>gt(n,t))}const Bf=e=>J(e)?e:e==null?"":j(e)||ie(e)&&(e.toString===Gl||!W(e.toString))?JSON.stringify(e,Ql,2):String(e),Ql=(e,t)=>t&&t.__v_isRef?Ql(e,t.value):Xt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:Kt(t)?{[`Set(${t.size})`]:[...t.values()]}:ie(t)&&!j(t)&&!eo(t)?String(t):t,se={},Zt=[],we=()=>{},ps=()=>!1,$f=/^on[^a-z]/,jt=e=>$f.test(e),xr=e=>e.startsWith("onUpdate:"),G=Object.assign,Wr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Df=Object.prototype.hasOwnProperty,X=(e,t)=>Df.call(e,t),j=Array.isArray,Xt=e=>jn(e)==="[object Map]",Kt=e=>jn(e)==="[object Set]",zi=e=>jn(e)==="[object Date]",W=e=>typeof e=="function",J=e=>typeof e=="string",mt=e=>typeof e=="symbol",ie=e=>e!==null&&typeof e=="object",qr=e=>ie(e)&&W(e.then)&&W(e.catch),Gl=Object.prototype.toString,jn=e=>Gl.call(e),Hf=e=>jn(e).slice(8,-1),eo=e=>jn(e)==="[object Object]",Jr=e=>J(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,It=Ae(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Vf=Ae("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Ls=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},jf=/-(\w)/g,be=Ls(e=>e.replace(jf,(t,n)=>n?n.toUpperCase():"")),Kf=/\B([A-Z])/g,ke=Ls(e=>e.replace(Kf,"-$1").toLowerCase()),Ut=Ls(e=>e.charAt(0).toUpperCase()+e.slice(1)),Qt=Ls(e=>e?`on${Ut(e)}`:""),nn=(e,t)=>!Object.is(e,t),Gt=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},_s=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},it=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Yi;const Uf=()=>Yi||(Yi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Me;class zr{constructor(t=!1){this.detached=t,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Me,!t&&Me&&(this.index=(Me.scopes||(Me.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Me;try{return Me=this,t()}finally{Me=n}}}on(){Me=this}off(){Me=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.scopes)for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);if(!this.detached&&this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0,this.active=!1}}}function xf(e){return new zr(e)}function to(e,t=Me){t&&t.active&&t.effects.push(e)}function Wf(){return Me}function qf(e){Me&&Me.cleanups.push(e)}const Yr=e=>{const t=new Set(e);return t.w=0,t.n=0,t},no=e=>(e.w&yt)>0,so=e=>(e.n&yt)>0,Jf=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=yt},zf=e=>{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s<t.length;s++){const r=t[s];no(r)&&!so(r)?r.delete(e):t[n++]=r,r.w&=~yt,r.n&=~yt}t.length=n}},yr=new WeakMap;let yn=0,yt=1;const _r=30;let We;const Mt=Symbol(""),br=Symbol("");class Kn{constructor(t,n=null,s){this.fn=t,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,to(this,s)}run(){if(!this.active)return this.fn();let t=We,n=dt;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=We,We=this,dt=!0,yt=1<<++yn,yn<=_r?Jf(this):Zi(this),this.fn()}finally{yn<=_r&&zf(this),yt=1<<--yn,We=this.parent,dt=n,this.parent=void 0,this.deferStop&&this.stop()}}stop(){We===this?this.deferStop=!0:this.active&&(Zi(this),this.onStop&&this.onStop(),this.active=!1)}}function Zi(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}function Yf(e,t){e.effect&&(e=e.effect.fn);const n=new Kn(e);t&&(G(n,t),t.scope&&to(n,t.scope)),(!t||!t.lazy)&&n.run();const s=n.run.bind(n);return s.effect=n,s}function Zf(e){e.effect.stop()}let dt=!0;const ro=[];function an(){ro.push(dt),dt=!1}function pn(){const e=ro.pop();dt=e===void 0?!0:e}function Be(e,t,n){if(dt&&We){let s=yr.get(e);s||yr.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=Yr()),io(r)}}function io(e,t){let n=!1;yn<=_r?so(e)||(e.n|=yt,n=!no(e)):n=!e.has(We),n&&(e.add(We),We.deps.push(e))}function lt(e,t,n,s,r,i){const l=yr.get(e);if(!l)return;let o=[];if(t==="clear")o=[...l.values()];else if(n==="length"&&j(e)){const c=it(s);l.forEach((f,a)=>{(a==="length"||a>=c)&&o.push(f)})}else switch(n!==void 0&&o.push(l.get(n)),t){case"add":j(e)?Jr(n)&&o.push(l.get("length")):(o.push(l.get(Mt)),Xt(e)&&o.push(l.get(br)));break;case"delete":j(e)||(o.push(l.get(Mt)),Xt(e)&&o.push(l.get(br)));break;case"set":Xt(e)&&o.push(l.get(Mt));break}if(o.length===1)o[0]&&Er(o[0]);else{const c=[];for(const f of o)f&&c.push(...f);Er(Yr(c))}}function Er(e,t){const n=j(e)?e:[...e];for(const s of n)s.computed&&Xi(s);for(const s of n)s.computed||Xi(s)}function Xi(e,t){(e!==We||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const Xf=Ae("__proto__,__v_isRef,__isVue"),lo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mt)),Qf=Bs(),Gf=Bs(!1,!0),eu=Bs(!0),tu=Bs(!0,!0),Qi=nu();function nu(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=Q(this);for(let i=0,l=this.length;i<l;i++)Be(s,"get",i+"");const r=s[t](...n);return r===-1||r===!1?s[t](...n.map(Q)):r}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...n){an();const s=Q(this)[t].apply(this,n);return pn(),s}}),e}function Bs(e=!1,t=!1){return function(s,r,i){if(r==="__v_isReactive")return!e;if(r==="__v_isReadonly")return e;if(r==="__v_isShallow")return t;if(r==="__v_raw"&&i===(e?t?ho:po:t?ao:uo).get(s))return s;const l=j(s);if(!e&&l&&X(Qi,r))return Reflect.get(Qi,r,i);const o=Reflect.get(s,r,i);return(mt(r)?lo.has(r):Xf(r))||(e||Be(s,"get",r),t)?o:ge(o)?l&&Jr(r)?o:o.value:ie(o)?e?Xr(o):Hs(o):o}}const su=oo(),ru=oo(!0);function oo(e=!1){return function(n,s,r,i){let l=n[s];if(Bt(l)&&ge(l)&&!ge(r))return!1;if(!e&&(!On(r)&&!Bt(r)&&(l=Q(l),r=Q(r)),!j(n)&&ge(l)&&!ge(r)))return l.value=r,!0;const o=j(n)&&Jr(s)?Number(s)<n.length:X(n,s),c=Reflect.set(n,s,r,i);return n===Q(i)&&(o?nn(r,l)&<(n,"set",s,r):lt(n,"add",s,r)),c}}function iu(e,t){const n=X(e,t);e[t];const s=Reflect.deleteProperty(e,t);return s&&n&<(e,"delete",t,void 0),s}function lu(e,t){const n=Reflect.has(e,t);return(!mt(t)||!lo.has(t))&&Be(e,"has",t),n}function ou(e){return Be(e,"iterate",j(e)?"length":Mt),Reflect.ownKeys(e)}const co={get:Qf,set:su,deleteProperty:iu,has:lu,ownKeys:ou},fo={get:eu,set(e,t){return!0},deleteProperty(e,t){return!0}},cu=G({},co,{get:Gf,set:ru}),fu=G({},fo,{get:tu}),Zr=e=>e,$s=e=>Reflect.getPrototypeOf(e);function Qn(e,t,n=!1,s=!1){e=e.__v_raw;const r=Q(e),i=Q(t);n||(t!==i&&Be(r,"get",t),Be(r,"get",i));const{has:l}=$s(r),o=s?Zr:n?ei:Pn;if(l.call(r,t))return o(e.get(t));if(l.call(r,i))return o(e.get(i));e!==r&&e.get(t)}function Gn(e,t=!1){const n=this.__v_raw,s=Q(n),r=Q(e);return t||(e!==r&&Be(s,"has",e),Be(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function es(e,t=!1){return e=e.__v_raw,!t&&Be(Q(e),"iterate",Mt),Reflect.get(e,"size",e)}function Gi(e){e=Q(e);const t=Q(this);return $s(t).has.call(t,e)||(t.add(e),lt(t,"add",e,e)),this}function el(e,t){t=Q(t);const n=Q(this),{has:s,get:r}=$s(n);let i=s.call(n,e);i||(e=Q(e),i=s.call(n,e));const l=r.call(n,e);return n.set(e,t),i?nn(t,l)&<(n,"set",e,t):lt(n,"add",e,t),this}function tl(e){const t=Q(this),{has:n,get:s}=$s(t);let r=n.call(t,e);r||(e=Q(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&<(t,"delete",e,void 0),i}function nl(){const e=Q(this),t=e.size!==0,n=e.clear();return t&<(e,"clear",void 0,void 0),n}function ts(e,t){return function(s,r){const i=this,l=i.__v_raw,o=Q(l),c=t?Zr:e?ei:Pn;return!e&&Be(o,"iterate",Mt),l.forEach((f,a)=>s.call(r,c(f),c(a),i))}}function ns(e,t,n){return function(...s){const r=this.__v_raw,i=Q(r),l=Xt(i),o=e==="entries"||e===Symbol.iterator&&l,c=e==="keys"&&l,f=r[e](...s),a=n?Zr:t?ei:Pn;return!t&&Be(i,"iterate",c?br:Mt),{next(){const{value:u,done:d}=f.next();return d?{value:u,done:d}:{value:o?[a(u[0]),a(u[1])]:a(u),done:d}},[Symbol.iterator](){return this}}}}function ct(e){return function(...t){return e==="delete"?!1:this}}function uu(){const e={get(i){return Qn(this,i)},get size(){return es(this)},has:Gn,add:Gi,set:el,delete:tl,clear:nl,forEach:ts(!1,!1)},t={get(i){return Qn(this,i,!1,!0)},get size(){return es(this)},has:Gn,add:Gi,set:el,delete:tl,clear:nl,forEach:ts(!1,!0)},n={get(i){return Qn(this,i,!0)},get size(){return es(this,!0)},has(i){return Gn.call(this,i,!0)},add:ct("add"),set:ct("set"),delete:ct("delete"),clear:ct("clear"),forEach:ts(!0,!1)},s={get(i){return Qn(this,i,!0,!0)},get size(){return es(this,!0)},has(i){return Gn.call(this,i,!0)},add:ct("add"),set:ct("set"),delete:ct("delete"),clear:ct("clear"),forEach:ts(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=ns(i,!1,!1),n[i]=ns(i,!0,!1),t[i]=ns(i,!1,!0),s[i]=ns(i,!0,!0)}),[e,n,t,s]}const[au,pu,du,hu]=uu();function Ds(e,t){const n=t?e?hu:du:e?pu:au;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(X(n,r)&&r in s?n:s,r,i)}const gu={get:Ds(!1,!1)},mu={get:Ds(!1,!0)},yu={get:Ds(!0,!1)},_u={get:Ds(!0,!0)},uo=new WeakMap,ao=new WeakMap,po=new WeakMap,ho=new WeakMap;function bu(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Eu(e){return e.__v_skip||!Object.isExtensible(e)?0:bu(Hf(e))}function Hs(e){return Bt(e)?e:Vs(e,!1,co,gu,uo)}function go(e){return Vs(e,!1,cu,mu,ao)}function Xr(e){return Vs(e,!0,fo,yu,po)}function Cu(e){return Vs(e,!0,fu,_u,ho)}function Vs(e,t,n,s,r){if(!ie(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const l=Eu(e);if(l===0)return e;const o=new Proxy(e,l===2?s:n);return r.set(e,o),o}function Rt(e){return Bt(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function Bt(e){return!!(e&&e.__v_isReadonly)}function On(e){return!!(e&&e.__v_isShallow)}function Qr(e){return Rt(e)||Bt(e)}function Q(e){const t=e&&e.__v_raw;return t?Q(t):e}function Gr(e){return _s(e,"__v_skip",!0),e}const Pn=e=>ie(e)?Hs(e):e,ei=e=>ie(e)?Xr(e):e;function ti(e){dt&&We&&(e=Q(e),io(e.dep||(e.dep=Yr())))}function js(e,t){e=Q(e),e.dep&&Er(e.dep)}function ge(e){return!!(e&&e.__v_isRef===!0)}function ds(e){return mo(e,!1)}function Tu(e){return mo(e,!0)}function mo(e,t){return ge(e)?e:new vu(e,t)}class vu{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Q(t),this._value=n?t:Pn(t)}get value(){return ti(this),this._value}set value(t){const n=this.__v_isShallow||On(t)||Bt(t);t=n?t:Q(t),nn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Pn(t),js(this))}}function Su(e){js(e)}function yo(e){return ge(e)?e.value:e}const wu={get:(e,t,n)=>yo(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ge(r)&&!ge(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ni(e){return Rt(e)?e:new Proxy(e,wu)}class Nu{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>ti(this),()=>js(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Ou(e){return new Nu(e)}function Pu(e){const t=j(e)?new Array(e.length):{};for(const n in e)t[n]=_o(e,n);return t}class Au{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function _o(e,t,n){const s=e[t];return ge(s)?s:new Au(e,t,n)}var bo;class Iu{constructor(t,n,s,r){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[bo]=!1,this._dirty=!0,this.effect=new Kn(t,()=>{this._dirty||(this._dirty=!0,js(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=Q(this);return ti(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}bo="__v_isReadonly";function Mu(e,t,n=!1){let s,r;const i=W(e);return i?(s=e,r=we):(s=e.get,r=e.set),new Iu(s,r,i||!r,n)}function Ru(e,...t){}function st(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){xt(i,t,n)}return r}function Fe(e,t,n,s){if(W(e)){const i=st(e,t,n,s);return i&&qr(i)&&i.catch(l=>{xt(l,t,n)}),i}const r=[];for(let i=0;i<e.length;i++)r.push(Fe(e[i],t,n,s));return r}function xt(e,t,n,s=!0){const r=t?t.vnode:null;if(t){let i=t.parent;const l=t.proxy,o=n;for(;i;){const f=i.ec;if(f){for(let a=0;a<f.length;a++)if(f[a](e,l,o)===!1)return}i=i.parent}const c=t.appContext.config.errorHandler;if(c){st(c,null,10,[e,l,o]);return}}ku(e,n,r,s)}function ku(e,t,n,s=!0){console.error(e)}let An=!1,Cr=!1;const Ee=[];let Ze=0;const en=[];let tt=null,Nt=0;const Eo=Promise.resolve();let si=null;function ri(e){const t=si||Eo;return e?t.then(this?e.bind(this):e):t}function Fu(e){let t=Ze+1,n=Ee.length;for(;t<n;){const s=t+n>>>1;In(Ee[s])<e?t=s+1:n=s}return t}function Ks(e){(!Ee.length||!Ee.includes(e,An&&e.allowRecurse?Ze+1:Ze))&&(e.id==null?Ee.push(e):Ee.splice(Fu(e.id),0,e),Co())}function Co(){!An&&!Cr&&(Cr=!0,si=Eo.then(To))}function Lu(e){const t=Ee.indexOf(e);t>Ze&&Ee.splice(t,1)}function ii(e){j(e)?en.push(...e):(!tt||!tt.includes(e,e.allowRecurse?Nt+1:Nt))&&en.push(e),Co()}function sl(e,t=An?Ze+1:0){for(;t<Ee.length;t++){const n=Ee[t];n&&n.pre&&(Ee.splice(t,1),t--,n())}}function bs(e){if(en.length){const t=[...new Set(en)];if(en.length=0,tt){tt.push(...t);return}for(tt=t,tt.sort((n,s)=>In(n)-In(s)),Nt=0;Nt<tt.length;Nt++)tt[Nt]();tt=null,Nt=0}}const In=e=>e.id==null?1/0:e.id,Bu=(e,t)=>{const n=In(e)-In(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function To(e){Cr=!1,An=!0,Ee.sort(Bu);const t=we;try{for(Ze=0;Ze<Ee.length;Ze++){const n=Ee[Ze];n&&n.active!==!1&&st(n,null,14)}}finally{Ze=0,Ee.length=0,bs(),An=!1,si=null,(Ee.length||en.length)&&To()}}let zt,ss=[];function vo(e,t){var n,s;zt=e,zt?(zt.enabled=!0,ss.forEach(({event:r,args:i})=>zt.emit(r,...i)),ss=[]):typeof window<"u"&&window.HTMLElement&&!(!((s=(n=window.navigator)===null||n===void 0?void 0:n.userAgent)===null||s===void 0)&&s.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{vo(i,t)}),setTimeout(()=>{zt||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,ss=[])},3e3)):ss=[]}function $u(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||se;let r=n;const i=t.startsWith("update:"),l=i&&t.slice(7);if(l&&l in s){const a=`${l==="modelValue"?"model":l}Modifiers`,{number:u,trim:d}=s[a]||se;d&&(r=n.map(m=>J(m)?m.trim():m)),u&&(r=n.map(it))}let o,c=s[o=Qt(t)]||s[o=Qt(be(t))];!c&&i&&(c=s[o=Qt(ke(t))]),c&&Fe(c,e,6,r);const f=s[o+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[o])return;e.emitted[o]=!0,Fe(f,e,6,r)}}function So(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let l={},o=!1;if(!W(e)){const c=f=>{const a=So(f,t,!0);a&&(o=!0,G(l,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!o?(ie(e)&&s.set(e,null),null):(j(i)?i.forEach(c=>l[c]=null):G(l,i),ie(e)&&s.set(e,l),l)}function Us(e,t){return!e||!jt(t)?!1:(t=t.slice(2).replace(/Once$/,""),X(e,t[0].toLowerCase()+t.slice(1))||X(e,ke(t))||X(e,t))}let _e=null,xs=null;function Mn(e){const t=_e;return _e=e,xs=e&&e.type.__scopeId||null,t}function Du(e){xs=e}function Hu(){xs=null}const Vu=e=>li;function li(e,t=_e,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&Pr(-1);const i=Mn(t);let l;try{l=e(...r)}finally{Mn(i),s._d&&Pr(1)}return l};return s._n=!0,s._c=!0,s._d=!0,s}function hs(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[l],slots:o,attrs:c,emit:f,render:a,renderCache:u,data:d,setupState:m,ctx:E,inheritAttrs:T}=e;let I,y;const h=Mn(e);try{if(n.shapeFlag&4){const w=r||s;I=Re(a.call(w,w,u,i,m,d,E)),y=c}else{const w=t;I=Re(w.length>1?w(i,{attrs:c,slots:o,emit:f}):w(i,null)),y=t.props?c:Ku(c)}}catch(w){vn.length=0,xt(w,e,1),I=ce(Te)}let b=I;if(y&&T!==!1){const w=Object.keys(y),{shapeFlag:A}=b;w.length&&A&7&&(l&&w.some(xr)&&(y=Uu(y,l)),b=Qe(b,y))}return n.dirs&&(b=Qe(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),I=b,Mn(h),I}function ju(e){let t;for(let n=0;n<e.length;n++){const s=e[n];if(_t(s)){if(s.type!==Te||s.children==="v-if"){if(t)return;t=s}}else return}return t}const Ku=e=>{let t;for(const n in e)(n==="class"||n==="style"||jt(n))&&((t||(t={}))[n]=e[n]);return t},Uu=(e,t)=>{const n={};for(const s in e)(!xr(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function xu(e,t,n){const{props:s,children:r,component:i}=e,{props:l,children:o,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?rl(s,l,f):!!l;if(c&8){const a=t.dynamicProps;for(let u=0;u<a.length;u++){const d=a[u];if(l[d]!==s[d]&&!Us(f,d))return!0}}}else return(r||o)&&(!o||!o.$stable)?!0:s===l?!1:s?l?rl(s,l,f):!0:!!l;return!1}function rl(e,t,n){const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let r=0;r<s.length;r++){const i=s[r];if(t[i]!==e[i]&&!Us(n,i))return!0}return!1}function oi({vnode:e,parent:t},n){for(;t&&t.subTree===e;)(e=t.vnode).el=n,t=t.parent}const wo=e=>e.__isSuspense,Wu={name:"Suspense",__isSuspense:!0,process(e,t,n,s,r,i,l,o,c,f){e==null?Ju(t,n,s,r,i,l,o,c,f):zu(e,t,n,s,r,l,o,c,f)},hydrate:Yu,create:ci,normalize:Zu},qu=Wu;function Rn(e,t){const n=e.props&&e.props[t];W(n)&&n()}function Ju(e,t,n,s,r,i,l,o,c){const{p:f,o:{createElement:a}}=c,u=a("div"),d=e.suspense=ci(e,r,s,t,u,n,i,l,o,c);f(null,d.pendingBranch=e.ssContent,u,null,s,d,i,l),d.deps>0?(Rn(e,"onPending"),Rn(e,"onFallback"),f(null,e.ssFallback,t,n,s,null,i,l),tn(d,e.ssFallback)):d.resolve()}function zu(e,t,n,s,r,i,l,o,{p:c,um:f,o:{createElement:a}}){const u=t.suspense=e.suspense;u.vnode=t,t.el=e.el;const d=t.ssContent,m=t.ssFallback,{activeBranch:E,pendingBranch:T,isInFallback:I,isHydrating:y}=u;if(T)u.pendingBranch=d,Xe(d,T)?(c(T,d,u.hiddenContainer,null,r,u,i,l,o),u.deps<=0?u.resolve():I&&(c(E,m,n,s,r,null,i,l,o),tn(u,m))):(u.pendingId++,y?(u.isHydrating=!1,u.activeBranch=T):f(T,r,u),u.deps=0,u.effects.length=0,u.hiddenContainer=a("div"),I?(c(null,d,u.hiddenContainer,null,r,u,i,l,o),u.deps<=0?u.resolve():(c(E,m,n,s,r,null,i,l,o),tn(u,m))):E&&Xe(d,E)?(c(E,d,n,s,r,u,i,l,o),u.resolve(!0)):(c(null,d,u.hiddenContainer,null,r,u,i,l,o),u.deps<=0&&u.resolve()));else if(E&&Xe(d,E))c(E,d,n,s,r,u,i,l,o),tn(u,d);else if(Rn(t,"onPending"),u.pendingBranch=d,u.pendingId++,c(null,d,u.hiddenContainer,null,r,u,i,l,o),u.deps<=0)u.resolve();else{const{timeout:h,pendingId:b}=u;h>0?setTimeout(()=>{u.pendingId===b&&u.fallback(m)},h):h===0&&u.fallback(m)}}function ci(e,t,n,s,r,i,l,o,c,f,a=!1){const{p:u,m:d,um:m,n:E,o:{parentNode:T,remove:I}}=f,y=it(e.props&&e.props.timeout),h={vnode:e,parent:t,parentComponent:n,isSVG:l,container:s,hiddenContainer:r,anchor:i,deps:0,pendingId:0,timeout:typeof y=="number"?y:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:a,isUnmounted:!1,effects:[],resolve(b=!1){const{vnode:w,activeBranch:A,pendingBranch:H,pendingId:O,effects:_,parentComponent:R,container:F}=h;if(h.isHydrating)h.isHydrating=!1;else if(!b){const V=A&&H.transition&&H.transition.mode==="out-in";V&&(A.transition.afterLeave=()=>{O===h.pendingId&&d(H,F,B,0)});let{anchor:B}=h;A&&(B=E(A),m(A,R,h,!0)),V||d(H,F,B,0)}tn(h,H),h.pendingBranch=null,h.isInFallback=!1;let M=h.parent,P=!1;for(;M;){if(M.pendingBranch){M.effects.push(..._),P=!0;break}M=M.parent}P||ii(_),h.effects=[],Rn(w,"onResolve")},fallback(b){if(!h.pendingBranch)return;const{vnode:w,activeBranch:A,parentComponent:H,container:O,isSVG:_}=h;Rn(w,"onFallback");const R=E(A),F=()=>{h.isInFallback&&(u(null,b,O,R,H,null,_,o,c),tn(h,b))},M=b.transition&&b.transition.mode==="out-in";M&&(A.transition.afterLeave=F),h.isInFallback=!0,m(A,H,null,!0),M||F()},move(b,w,A){h.activeBranch&&d(h.activeBranch,b,w,A),h.container=b},next(){return h.activeBranch&&E(h.activeBranch)},registerDep(b,w){const A=!!h.pendingBranch;A&&h.deps++;const H=b.vnode.el;b.asyncDep.catch(O=>{xt(O,b,0)}).then(O=>{if(b.isUnmounted||h.isUnmounted||h.pendingId!==b.suspenseId)return;b.asyncResolved=!0;const{vnode:_}=b;Ar(b,O,!1),H&&(_.el=H);const R=!H&&b.subTree.el;w(b,_,T(H||b.subTree.el),H?null:E(b.subTree),h,l,c),R&&I(R),oi(b,_.el),A&&--h.deps===0&&h.resolve()})},unmount(b,w){h.isUnmounted=!0,h.activeBranch&&m(h.activeBranch,n,b,w),h.pendingBranch&&m(h.pendingBranch,n,b,w)}};return h}function Yu(e,t,n,s,r,i,l,o,c){const f=t.suspense=ci(t,s,n,e.parentNode,document.createElement("div"),null,r,i,l,o,!0),a=c(e,f.pendingBranch=t.ssContent,n,f,i,l);return f.deps===0&&f.resolve(),a}function Zu(e){const{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=il(s?n.default:n),e.ssFallback=s?il(n.fallback):ce(Te)}function il(e){let t;if(W(e)){const n=Ht&&e._c;n&&(e._d=!1,Zs()),e=e(),n&&(e._d=!0,t=Oe,Go())}return j(e)&&(e=ju(e)),e=Re(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function No(e,t){t&&t.pendingBranch?j(e)?t.effects.push(...e):t.effects.push(e):ii(e)}function tn(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e,r=n.el=t.el;s&&s.subTree===n&&(s.vnode.el=r,oi(s,r))}function Oo(e,t){if(de){let n=de.provides;const s=de.parent&&de.parent.provides;s===n&&(n=de.provides=Object.create(s)),n[e]=t}}function bn(e,t,n=!1){const s=de||_e;if(s){const r=s.parent==null?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides;if(r&&e in r)return r[e];if(arguments.length>1)return n&&W(t)?t.call(s.proxy):t}}function Xu(e,t){return Un(e,null,t)}function Po(e,t){return Un(e,null,{flush:"post"})}function Qu(e,t){return Un(e,null,{flush:"sync"})}const rs={};function En(e,t,n){return Un(e,t,n)}function Un(e,t,{immediate:n,deep:s,flush:r,onTrack:i,onTrigger:l}=se){const o=de;let c,f=!1,a=!1;if(ge(e)?(c=()=>e.value,f=On(e)):Rt(e)?(c=()=>e,s=!0):j(e)?(a=!0,f=e.some(b=>Rt(b)||On(b)),c=()=>e.map(b=>{if(ge(b))return b.value;if(Rt(b))return Pt(b);if(W(b))return st(b,o,2)})):W(e)?t?c=()=>st(e,o,2):c=()=>{if(!(o&&o.isUnmounted))return u&&u(),Fe(e,o,3,[d])}:c=we,t&&s){const b=c;c=()=>Pt(b())}let u,d=b=>{u=y.onStop=()=>{st(b,o,4)}},m;if(rn)if(d=we,t?n&&Fe(t,o,3,[c(),a?[]:void 0,d]):c(),r==="sync"){const b=hc();m=b.__watcherHandles||(b.__watcherHandles=[])}else return we;let E=a?new Array(e.length).fill(rs):rs;const T=()=>{if(y.active)if(t){const b=y.run();(s||f||(a?b.some((w,A)=>nn(w,E[A])):nn(b,E)))&&(u&&u(),Fe(t,o,3,[b,E===rs?void 0:a&&E[0]===rs?[]:E,d]),E=b)}else y.run()};T.allowRecurse=!!t;let I;r==="sync"?I=T:r==="post"?I=()=>me(T,o&&o.suspense):(T.pre=!0,o&&(T.id=o.uid),I=()=>Ks(T));const y=new Kn(c,I);t?n?T():E=y.run():r==="post"?me(y.run.bind(y),o&&o.suspense):y.run();const h=()=>{y.stop(),o&&o.scope&&Wr(o.scope.effects,y)};return m&&m.push(h),h}function Gu(e,t,n){const s=this.proxy,r=J(e)?e.includes(".")?Ao(s,e):()=>s[e]:e.bind(s,s);let i;W(t)?i=t:(i=t.handler,n=t);const l=de;bt(this);const o=Un(r,i.bind(s),n);return l?bt(l):ht(),o}function Ao(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r<n.length&&s;r++)s=s[n[r]];return s}}function Pt(e,t){if(!ie(e)||e.__v_skip||(t=t||new Set,t.has(e)))return e;if(t.add(e),ge(e))Pt(e.value,t);else if(j(e))for(let n=0;n<e.length;n++)Pt(e[n],t);else if(Kt(e)||Xt(e))e.forEach(n=>{Pt(n,t)});else if(eo(e))for(const n in e)Pt(e[n],t);return e}function fi(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Wn(()=>{e.isMounted=!0}),zs(()=>{e.isUnmounting=!0}),e}const De=[Function,Array],ea={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:De,onEnter:De,onAfterEnter:De,onEnterCancelled:De,onBeforeLeave:De,onLeave:De,onAfterLeave:De,onLeaveCancelled:De,onBeforeAppear:De,onAppear:De,onAfterAppear:De,onAppearCancelled:De},setup(e,{slots:t}){const n=Ct(),s=fi();let r;return()=>{const i=t.default&&Ws(t.default(),!0);if(!i||!i.length)return;let l=i[0];if(i.length>1){for(const T of i)if(T.type!==Te){l=T;break}}const o=Q(e),{mode:c}=o;if(s.isLeaving)return or(l);const f=ll(l);if(!f)return or(l);const a=sn(f,o,s,n);$t(f,a);const u=n.subTree,d=u&&ll(u);let m=!1;const{getTransitionKey:E}=f.type;if(E){const T=E();r===void 0?r=T:T!==r&&(r=T,m=!0)}if(d&&d.type!==Te&&(!Xe(f,d)||m)){const T=sn(d,o,s,n);if($t(d,T),c==="out-in")return s.isLeaving=!0,T.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&n.update()},or(l);c==="in-out"&&f.type!==Te&&(T.delayLeave=(I,y,h)=>{const b=Io(s,d);b[String(d.key)]=d,I._leaveCb=()=>{y(),I._leaveCb=void 0,delete a.delayedLeave},a.delayedLeave=h})}return l}}},ui=ea;function Io(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function sn(e,t,n,s){const{appear:r,mode:i,persisted:l=!1,onBeforeEnter:o,onEnter:c,onAfterEnter:f,onEnterCancelled:a,onBeforeLeave:u,onLeave:d,onAfterLeave:m,onLeaveCancelled:E,onBeforeAppear:T,onAppear:I,onAfterAppear:y,onAppearCancelled:h}=t,b=String(e.key),w=Io(n,e),A=(_,R)=>{_&&Fe(_,s,9,R)},H=(_,R)=>{const F=R[1];A(_,R),j(_)?_.every(M=>M.length<=1)&&F():_.length<=1&&F()},O={mode:i,persisted:l,beforeEnter(_){let R=o;if(!n.isMounted)if(r)R=T||o;else return;_._leaveCb&&_._leaveCb(!0);const F=w[b];F&&Xe(e,F)&&F.el._leaveCb&&F.el._leaveCb(),A(R,[_])},enter(_){let R=c,F=f,M=a;if(!n.isMounted)if(r)R=I||c,F=y||f,M=h||a;else return;let P=!1;const V=_._enterCb=B=>{P||(P=!0,B?A(M,[_]):A(F,[_]),O.delayedLeave&&O.delayedLeave(),_._enterCb=void 0)};R?H(R,[_,V]):V()},leave(_,R){const F=String(e.key);if(_._enterCb&&_._enterCb(!0),n.isUnmounting)return R();A(u,[_]);let M=!1;const P=_._leaveCb=V=>{M||(M=!0,R(),V?A(E,[_]):A(m,[_]),_._leaveCb=void 0,w[F]===e&&delete w[F])};w[F]=e,d?H(d,[_,P]):P()},clone(_){return sn(_,t,n,s)}};return O}function or(e){if(xn(e))return e=Qe(e),e.children=null,e}function ll(e){return xn(e)?e.children?e.children[0]:void 0:e}function $t(e,t){e.shapeFlag&6&&e.component?$t(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Ws(e,t=!1,n){let s=[],r=0;for(let i=0;i<e.length;i++){let l=e[i];const o=n==null?l.key:String(n)+String(l.key!=null?l.key:i);l.type===ye?(l.patchFlag&128&&r++,s=s.concat(Ws(l.children,t,o))):(t||l.type!==Te)&&s.push(o!=null?Qe(l,{key:o}):l)}if(r>1)for(let i=0;i<s.length;i++)s[i].patchFlag=-2;return s}function ai(e){return W(e)?{setup:e,name:e.name}:e}const kt=e=>!!e.type.__asyncLoader;function ta(e){W(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,timeout:i,suspensible:l=!0,onError:o}=e;let c=null,f,a=0;const u=()=>(a++,c=null,d()),d=()=>{let m;return c||(m=c=t().catch(E=>{if(E=E instanceof Error?E:new Error(String(E)),o)return new Promise((T,I)=>{o(E,()=>T(u()),()=>I(E),a+1)});throw E}).then(E=>m!==c&&c?c:(E&&(E.__esModule||E[Symbol.toStringTag]==="Module")&&(E=E.default),f=E,E)))};return ai({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return f},setup(){const m=de;if(f)return()=>cr(f,m);const E=h=>{c=null,xt(h,m,13,!s)};if(l&&m.suspense||rn)return d().then(h=>()=>cr(h,m)).catch(h=>(E(h),()=>s?ce(s,{error:h}):null));const T=ds(!1),I=ds(),y=ds(!!r);return r&&setTimeout(()=>{y.value=!1},r),i!=null&&setTimeout(()=>{if(!T.value&&!I.value){const h=new Error(`Async component timed out after ${i}ms.`);E(h),I.value=h}},i),d().then(()=>{T.value=!0,m.parent&&xn(m.parent.vnode)&&Ks(m.parent.update)}).catch(h=>{E(h),I.value=h}),()=>{if(T.value&&f)return cr(f,m);if(I.value&&s)return ce(s,{error:I.value});if(n&&!y.value)return ce(n)}}})}function cr(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,l=ce(e,s,r);return l.ref=n,l.ce=i,delete t.vnode.ce,l}const xn=e=>e.type.__isKeepAlive,na={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=Ct(),s=n.ctx;if(!s.renderer)return()=>{const h=t.default&&t.default();return h&&h.length===1?h[0]:h};const r=new Map,i=new Set;let l=null;const o=n.suspense,{renderer:{p:c,m:f,um:a,o:{createElement:u}}}=s,d=u("div");s.activate=(h,b,w,A,H)=>{const O=h.component;f(h,b,w,0,o),c(O.vnode,h,b,w,O,o,A,h.slotScopeIds,H),me(()=>{O.isDeactivated=!1,O.a&&Gt(O.a);const _=h.props&&h.props.onVnodeMounted;_&&Ne(_,O.parent,h)},o)},s.deactivate=h=>{const b=h.component;f(h,d,null,1,o),me(()=>{b.da&&Gt(b.da);const w=h.props&&h.props.onVnodeUnmounted;w&&Ne(w,b.parent,h),b.isDeactivated=!0},o)};function m(h){fr(h),a(h,n,o,!0)}function E(h){r.forEach((b,w)=>{const A=Mr(b.type);A&&(!h||!h(A))&&T(w)})}function T(h){const b=r.get(h);!l||b.type!==l.type?m(b):l&&fr(l),r.delete(h),i.delete(h)}En(()=>[e.include,e.exclude],([h,b])=>{h&&E(w=>_n(h,w)),b&&E(w=>!_n(b,w))},{flush:"post",deep:!0});let I=null;const y=()=>{I!=null&&r.set(I,ur(n.subTree))};return Wn(y),Js(y),zs(()=>{r.forEach(h=>{const{subTree:b,suspense:w}=n,A=ur(b);if(h.type===A.type){fr(A);const H=A.component.da;H&&me(H,w);return}m(h)})}),()=>{if(I=null,!t.default)return null;const h=t.default(),b=h[0];if(h.length>1)return l=null,h;if(!_t(b)||!(b.shapeFlag&4)&&!(b.shapeFlag&128))return l=null,b;let w=ur(b);const A=w.type,H=Mr(kt(w)?w.type.__asyncResolved||{}:A),{include:O,exclude:_,max:R}=e;if(O&&(!H||!_n(O,H))||_&&H&&_n(_,H))return l=w,b;const F=w.key==null?A:w.key,M=r.get(F);return w.el&&(w=Qe(w),b.shapeFlag&128&&(b.ssContent=w)),I=F,M?(w.el=M.el,w.component=M.component,w.transition&&$t(w,w.transition),w.shapeFlag|=512,i.delete(F),i.add(F)):(i.add(F),R&&i.size>parseInt(R,10)&&T(i.values().next().value)),w.shapeFlag|=256,l=w,wo(b.type)?b:w}}},sa=na;function _n(e,t){return j(e)?e.some(n=>_n(n,t)):J(e)?e.split(",").includes(t):e.test?e.test(t):!1}function Mo(e,t){ko(e,"a",t)}function Ro(e,t){ko(e,"da",t)}function ko(e,t,n=de){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(qs(t,s,n),n){let r=n.parent;for(;r&&r.parent;)xn(r.parent.vnode)&&ra(s,t,n,r),r=r.parent}}function ra(e,t,n,s){const r=qs(t,e,s,!0);Ys(()=>{Wr(s[t],r)},n)}function fr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ur(e){return e.shapeFlag&128?e.ssContent:e}function qs(e,t,n=de,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...l)=>{if(n.isUnmounted)return;an(),bt(n);const o=Fe(t,n,e,l);return ht(),pn(),o});return s?r.unshift(i):r.push(i),i}}const ot=e=>(t,n=de)=>(!rn||e==="sp")&&qs(e,(...s)=>t(...s),n),Fo=ot("bm"),Wn=ot("m"),Lo=ot("bu"),Js=ot("u"),zs=ot("bum"),Ys=ot("um"),Bo=ot("sp"),$o=ot("rtg"),Do=ot("rtc");function Ho(e,t=de){qs("ec",e,t)}function ia(e,t){const n=_e;if(n===null)return e;const s=Qs(n)||n.proxy,r=e.dirs||(e.dirs=[]);for(let i=0;i<t.length;i++){let[l,o,c,f=se]=t[i];l&&(W(l)&&(l={mounted:l,updated:l}),l.deep&&Pt(o),r.push({dir:l,instance:s,value:o,oldValue:void 0,arg:c,modifiers:f}))}return e}function Ye(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let l=0;l<r.length;l++){const o=r[l];i&&(o.oldValue=i[l].value);let c=o.dir[s];c&&(an(),Fe(c,n,8,[e.el,o,e,t]),pn())}}const pi="components",la="directives";function oa(e,t){return di(pi,e,!0,t)||e}const Vo=Symbol();function ca(e){return J(e)?di(pi,e,!1)||e:e||Vo}function fa(e){return di(la,e)}function di(e,t,n=!0,s=!1){const r=_e||de;if(r){const i=r.type;if(e===pi){const o=Mr(i,!1);if(o&&(o===t||o===be(t)||o===Ut(be(t))))return i}const l=ol(r[e]||i[e],t)||ol(r.appContext[e],t);return!l&&s?i:l}}function ol(e,t){return e&&(e[t]||e[be(t)]||e[Ut(be(t))])}function ua(e,t,n,s){let r;const i=n&&n[s];if(j(e)||J(e)){r=new Array(e.length);for(let l=0,o=e.length;l<o;l++)r[l]=t(e[l],l,void 0,i&&i[l])}else if(typeof e=="number"){r=new Array(e);for(let l=0;l<e;l++)r[l]=t(l+1,l,void 0,i&&i[l])}else if(ie(e))if(e[Symbol.iterator])r=Array.from(e,(l,o)=>t(l,o,void 0,i&&i[o]));else{const l=Object.keys(e);r=new Array(l.length);for(let o=0,c=l.length;o<c;o++){const f=l[o];r[o]=t(e[f],f,o,i&&i[o])}}else r=[];return n&&(n[s]=r),r}function aa(e,t){for(let n=0;n<t.length;n++){const s=t[n];if(j(s))for(let r=0;r<s.length;r++)e[s[r].name]=s[r].fn;else s&&(e[s.name]=s.key?(...r)=>{const i=s.fn(...r);return i&&(i.key=s.key),i}:s.fn)}return e}function pa(e,t,n={},s,r){if(_e.isCE||_e.parent&&kt(_e.parent)&&_e.parent.isCE)return t!=="default"&&(n.name=t),ce("slot",n,s&&s());let i=e[t];i&&i._c&&(i._d=!1),Zs();const l=i&&jo(i(n)),o=yi(ye,{key:n.key||l&&l.key||`_${t}`},l||(s?s():[]),l&&e._===1?64:-2);return!r&&o.scopeId&&(o.slotScopeIds=[o.scopeId+"-s"]),i&&i._c&&(i._d=!0),o}function jo(e){return e.some(t=>_t(t)?!(t.type===Te||t.type===ye&&!jo(t.children)):!0)?e:null}function da(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:Qt(s)]=e[s];return n}const Tr=e=>e?ic(e)?Qs(e)||e.proxy:Tr(e.parent):null,Cn=G(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Tr(e.parent),$root:e=>Tr(e.root),$emit:e=>e.emit,$options:e=>hi(e),$forceUpdate:e=>e.f||(e.f=()=>Ks(e.update)),$nextTick:e=>e.n||(e.n=ri.bind(e.proxy)),$watch:e=>Gu.bind(e)}),ar=(e,t)=>e!==se&&!e.__isScriptSetup&&X(e,t),vr={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:l,type:o,appContext:c}=e;let f;if(t[0]!=="$"){const m=l[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ar(s,t))return l[t]=1,s[t];if(r!==se&&X(r,t))return l[t]=2,r[t];if((f=e.propsOptions[0])&&X(f,t))return l[t]=3,i[t];if(n!==se&&X(n,t))return l[t]=4,n[t];Sr&&(l[t]=0)}}const a=Cn[t];let u,d;if(a)return t==="$attrs"&&Be(e,"get",t),a(e);if((u=o.__cssModules)&&(u=u[t]))return u;if(n!==se&&X(n,t))return l[t]=4,n[t];if(d=c.config.globalProperties,X(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ar(r,t)?(r[t]=n,!0):s!==se&&X(s,t)?(s[t]=n,!0):X(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},l){let o;return!!n[l]||e!==se&&X(e,l)||ar(t,l)||(o=i[0])&&X(o,l)||X(s,l)||X(Cn,l)||X(r.config.globalProperties,l)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:X(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},ha=G({},vr,{get(e,t){if(t!==Symbol.unscopables)return vr.get(e,t,e)},has(e,t){return t[0]!=="_"&&!Tf(t)}});let Sr=!0;function ga(e){const t=hi(e),n=e.proxy,s=e.ctx;Sr=!1,t.beforeCreate&&cl(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:l,watch:o,provide:c,inject:f,created:a,beforeMount:u,mounted:d,beforeUpdate:m,updated:E,activated:T,deactivated:I,beforeDestroy:y,beforeUnmount:h,destroyed:b,unmounted:w,render:A,renderTracked:H,renderTriggered:O,errorCaptured:_,serverPrefetch:R,expose:F,inheritAttrs:M,components:P,directives:V,filters:B}=t;if(f&&ma(f,s,null,e.appContext.config.unwrapInjectedRef),l)for(const oe in l){const te=l[oe];W(te)&&(s[oe]=te.bind(n))}if(r){const oe=r.call(n,n);ie(oe)&&(e.data=Hs(oe))}if(Sr=!0,i)for(const oe in i){const te=i[oe],Ue=W(te)?te.bind(n,n):W(te.get)?te.get.bind(n,n):we,Zn=!W(te)&&W(te.set)?te.set.bind(n):we,Tt=uc({get:Ue,set:Zn});Object.defineProperty(s,oe,{enumerable:!0,configurable:!0,get:()=>Tt.value,set:Je=>Tt.value=Je})}if(o)for(const oe in o)Ko(o[oe],s,n,oe);if(c){const oe=W(c)?c.call(n):c;Reflect.ownKeys(oe).forEach(te=>{Oo(te,oe[te])})}a&&cl(a,e,"c");function Z(oe,te){j(te)?te.forEach(Ue=>oe(Ue.bind(n))):te&&oe(te.bind(n))}if(Z(Fo,u),Z(Wn,d),Z(Lo,m),Z(Js,E),Z(Mo,T),Z(Ro,I),Z(Ho,_),Z(Do,H),Z($o,O),Z(zs,h),Z(Ys,w),Z(Bo,R),j(F))if(F.length){const oe=e.exposed||(e.exposed={});F.forEach(te=>{Object.defineProperty(oe,te,{get:()=>n[te],set:Ue=>n[te]=Ue})})}else e.exposed||(e.exposed={});A&&e.render===we&&(e.render=A),M!=null&&(e.inheritAttrs=M),P&&(e.components=P),V&&(e.directives=V)}function ma(e,t,n=we,s=!1){j(e)&&(e=wr(e));for(const r in e){const i=e[r];let l;ie(i)?"default"in i?l=bn(i.from||r,i.default,!0):l=bn(i.from||r):l=bn(i),ge(l)&&s?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>l.value,set:o=>l.value=o}):t[r]=l}}function cl(e,t,n){Fe(j(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ko(e,t,n,s){const r=s.includes(".")?Ao(n,s):()=>n[s];if(J(e)){const i=t[e];W(i)&&En(r,i)}else if(W(e))En(r,e.bind(n));else if(ie(e))if(j(e))e.forEach(i=>Ko(i,t,n,s));else{const i=W(e.handler)?e.handler.bind(n):t[e.handler];W(i)&&En(r,i,e)}}function hi(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:l}}=e.appContext,o=i.get(t);let c;return o?c=o:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Es(c,f,l,!0)),Es(c,t,l)),ie(t)&&i.set(t,c),c}function Es(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Es(e,i,n,!0),r&&r.forEach(l=>Es(e,l,n,!0));for(const l in t)if(!(s&&l==="expose")){const o=ya[l]||n&&n[l];e[l]=o?o(e[l],t[l]):t[l]}return e}const ya={data:fl,props:wt,emits:wt,methods:wt,computed:wt,beforeCreate:Se,created:Se,beforeMount:Se,mounted:Se,beforeUpdate:Se,updated:Se,beforeDestroy:Se,beforeUnmount:Se,destroyed:Se,unmounted:Se,activated:Se,deactivated:Se,errorCaptured:Se,serverPrefetch:Se,components:wt,directives:wt,watch:ba,provide:fl,inject:_a};function fl(e,t){return t?e?function(){return G(W(e)?e.call(this,this):e,W(t)?t.call(this,this):t)}:t:e}function _a(e,t){return wt(wr(e),wr(t))}function wr(e){if(j(e)){const t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function Se(e,t){return e?[...new Set([].concat(e,t))]:t}function wt(e,t){return e?G(G(Object.create(null),e),t):t}function ba(e,t){if(!e)return t;if(!t)return e;const n=G(Object.create(null),e);for(const s in t)n[s]=Se(e[s],t[s]);return n}function Ea(e,t,n,s=!1){const r={},i={};_s(i,Xs,1),e.propsDefaults=Object.create(null),Uo(e,t,r,i);for(const l in e.propsOptions[0])l in r||(r[l]=void 0);n?e.props=s?r:go(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Ca(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:l}}=e,o=Q(r),[c]=e.propsOptions;let f=!1;if((s||l>0)&&!(l&16)){if(l&8){const a=e.vnode.dynamicProps;for(let u=0;u<a.length;u++){let d=a[u];if(Us(e.emitsOptions,d))continue;const m=t[d];if(c)if(X(i,d))m!==i[d]&&(i[d]=m,f=!0);else{const E=be(d);r[E]=Nr(c,o,E,m,e,!1)}else m!==i[d]&&(i[d]=m,f=!0)}}}else{Uo(e,t,r,i)&&(f=!0);let a;for(const u in o)(!t||!X(t,u)&&((a=ke(u))===u||!X(t,a)))&&(c?n&&(n[u]!==void 0||n[a]!==void 0)&&(r[u]=Nr(c,o,u,void 0,e,!0)):delete r[u]);if(i!==o)for(const u in i)(!t||!X(t,u))&&(delete i[u],f=!0)}f&<(e,"set","$attrs")}function Uo(e,t,n,s){const[r,i]=e.propsOptions;let l=!1,o;if(t)for(let c in t){if(It(c))continue;const f=t[c];let a;r&&X(r,a=be(c))?!i||!i.includes(a)?n[a]=f:(o||(o={}))[a]=f:Us(e.emitsOptions,c)||(!(c in s)||f!==s[c])&&(s[c]=f,l=!0)}if(i){const c=Q(n),f=o||se;for(let a=0;a<i.length;a++){const u=i[a];n[u]=Nr(r,c,u,f[u],e,!X(f,u))}}return l}function Nr(e,t,n,s,r,i){const l=e[n];if(l!=null){const o=X(l,"default");if(o&&s===void 0){const c=l.default;if(l.type!==Function&&W(c)){const{propsDefaults:f}=r;n in f?s=f[n]:(bt(r),s=f[n]=c.call(null,t),ht())}else s=c}l[0]&&(i&&!o?s=!1:l[1]&&(s===""||s===ke(n))&&(s=!0))}return s}function xo(e,t,n=!1){const s=t.propsCache,r=s.get(e);if(r)return r;const i=e.props,l={},o=[];let c=!1;if(!W(e)){const a=u=>{c=!0;const[d,m]=xo(u,t,!0);G(l,d),m&&o.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ie(e)&&s.set(e,Zt),Zt;if(j(i))for(let a=0;a<i.length;a++){const u=be(i[a]);ul(u)&&(l[u]=se)}else if(i)for(const a in i){const u=be(a);if(ul(u)){const d=i[a],m=l[u]=j(d)||W(d)?{type:d}:Object.assign({},d);if(m){const E=dl(Boolean,m.type),T=dl(String,m.type);m[0]=E>-1,m[1]=T<0||E<T,(E>-1||X(m,"default"))&&o.push(u)}}}const f=[l,o];return ie(e)&&s.set(e,f),f}function ul(e){return e[0]!=="$"}function al(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function pl(e,t){return al(e)===al(t)}function dl(e,t){return j(t)?t.findIndex(n=>pl(n,e)):W(t)&&pl(t,e)?0:-1}const Wo=e=>e[0]==="_"||e==="$stable",gi=e=>j(e)?e.map(Re):[Re(e)],Ta=(e,t,n)=>{if(t._n)return t;const s=li((...r)=>gi(t(...r)),n);return s._c=!1,s},qo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Wo(r))continue;const i=e[r];if(W(i))t[r]=Ta(r,i,s);else if(i!=null){const l=gi(i);t[r]=()=>l}}},Jo=(e,t)=>{const n=gi(t);e.slots.default=()=>n},va=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Q(t),_s(t,"_",n)):qo(t,e.slots={})}else e.slots={},t&&Jo(e,t);_s(e.slots,Xs,1)},Sa=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,l=se;if(s.shapeFlag&32){const o=t._;o?n&&o===1?i=!1:(G(r,t),!n&&o===1&&delete r._):(i=!t.$stable,qo(t,r)),l=t}else t&&(Jo(e,t),l={default:1});if(i)for(const o in r)!Wo(o)&&!(o in l)&&delete r[o]};function zo(){return{app:null,config:{isNativeTag:ps,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let wa=0;function Na(e,t){return function(s,r=null){W(s)||(s=Object.assign({},s)),r!=null&&!ie(r)&&(r=null);const i=zo(),l=new Set;let o=!1;const c=i.app={_uid:wa++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:mc,get config(){return i.config},set config(f){},use(f,...a){return l.has(f)||(f&&W(f.install)?(l.add(f),f.install(c,...a)):W(f)&&(l.add(f),f(c,...a))),c},mixin(f){return i.mixins.includes(f)||i.mixins.push(f),c},component(f,a){return a?(i.components[f]=a,c):i.components[f]},directive(f,a){return a?(i.directives[f]=a,c):i.directives[f]},mount(f,a,u){if(!o){const d=ce(s,r);return d.appContext=i,a&&t?t(d,f):e(d,f,u),o=!0,c._container=f,f.__vue_app__=c,Qs(d.component)||d.component.proxy}},unmount(){o&&(e(null,c._container),delete c._container.__vue_app__)},provide(f,a){return i.provides[f]=a,c}};return c}}function Cs(e,t,n,s,r=!1){if(j(e)){e.forEach((d,m)=>Cs(d,t&&(j(t)?t[m]:t),n,s,r));return}if(kt(s)&&!r)return;const i=s.shapeFlag&4?Qs(s.component)||s.component.proxy:s.el,l=r?null:i,{i:o,r:c}=e,f=t&&t.r,a=o.refs===se?o.refs={}:o.refs,u=o.setupState;if(f!=null&&f!==c&&(J(f)?(a[f]=null,X(u,f)&&(u[f]=null)):ge(f)&&(f.value=null)),W(c))st(c,o,12,[l,a]);else{const d=J(c),m=ge(c);if(d||m){const E=()=>{if(e.f){const T=d?X(u,c)?u[c]:a[c]:c.value;r?j(T)&&Wr(T,i):j(T)?T.includes(i)||T.push(i):d?(a[c]=[i],X(u,c)&&(u[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else d?(a[c]=l,X(u,c)&&(u[c]=l)):m&&(c.value=l,e.k&&(a[e.k]=l))};l?(E.id=-1,me(E,n)):E()}}}let ft=!1;const is=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",ls=e=>e.nodeType===8;function Oa(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:l,remove:o,insert:c,createComment:f}}=e,a=(y,h)=>{if(!h.hasChildNodes()){n(null,y,h),bs(),h._vnode=y;return}ft=!1,u(h.firstChild,y,null,null,null),bs(),h._vnode=y,ft&&console.error("Hydration completed but contains mismatches.")},u=(y,h,b,w,A,H=!1)=>{const O=ls(y)&&y.data==="[",_=()=>T(y,h,b,w,A,O),{type:R,ref:F,shapeFlag:M,patchFlag:P}=h;let V=y.nodeType;h.el=y,P===-2&&(H=!1,h.dynamicChildren=null);let B=null;switch(R){case Dt:V!==3?h.children===""?(c(h.el=r(""),l(y),y),B=y):B=_():(y.data!==h.children&&(ft=!0,y.data=h.children),B=i(y));break;case Te:V!==8||O?B=_():B=i(y);break;case Ft:if(O&&(y=i(y),V=y.nodeType),V===1||V===3){B=y;const ee=!h.children.length;for(let Z=0;Z<h.staticCount;Z++)ee&&(h.children+=B.nodeType===1?B.outerHTML:B.data),Z===h.staticCount-1&&(h.anchor=B),B=i(B);return O?i(B):B}else _();break;case ye:O?B=E(y,h,b,w,A,H):B=_();break;default:if(M&1)V!==1||h.type.toLowerCase()!==y.tagName.toLowerCase()?B=_():B=d(y,h,b,w,A,H);else if(M&6){h.slotScopeIds=A;const ee=l(y);if(t(h,ee,null,b,w,is(ee),H),B=O?I(y):i(y),B&&ls(B)&&B.data==="teleport end"&&(B=i(B)),kt(h)){let Z;O?(Z=ce(ye),Z.anchor=B?B.previousSibling:ee.lastChild):Z=y.nodeType===3?bi(""):ce("div"),Z.el=y,h.component.subTree=Z}}else M&64?V!==8?B=_():B=h.type.hydrate(y,h,b,w,A,H,e,m):M&128&&(B=h.type.hydrate(y,h,b,w,is(l(y)),A,H,e,u))}return F!=null&&Cs(F,null,w,h),B},d=(y,h,b,w,A,H)=>{H=H||!!h.dynamicChildren;const{type:O,props:_,patchFlag:R,shapeFlag:F,dirs:M}=h,P=O==="input"&&M||O==="option";if(P||R!==-1){if(M&&Ye(h,null,b,"created"),_)if(P||!H||R&48)for(const B in _)(P&&B.endsWith("value")||jt(B)&&!It(B))&&s(y,B,null,_[B],!1,void 0,b);else _.onClick&&s(y,"onClick",null,_.onClick,!1,void 0,b);let V;if((V=_&&_.onVnodeBeforeMount)&&Ne(V,b,h),M&&Ye(h,null,b,"beforeMount"),((V=_&&_.onVnodeMounted)||M)&&No(()=>{V&&Ne(V,b,h),M&&Ye(h,null,b,"mounted")},w),F&16&&!(_&&(_.innerHTML||_.textContent))){let B=m(y.firstChild,h,y,b,w,A,H);for(;B;){ft=!0;const ee=B;B=B.nextSibling,o(ee)}}else F&8&&y.textContent!==h.children&&(ft=!0,y.textContent=h.children)}return y.nextSibling},m=(y,h,b,w,A,H,O)=>{O=O||!!h.dynamicChildren;const _=h.children,R=_.length;for(let F=0;F<R;F++){const M=O?_[F]:_[F]=Re(_[F]);if(y)y=u(y,M,w,A,H,O);else{if(M.type===Dt&&!M.children)continue;ft=!0,n(null,M,b,null,w,A,is(b),H)}}return y},E=(y,h,b,w,A,H)=>{const{slotScopeIds:O}=h;O&&(A=A?A.concat(O):O);const _=l(y),R=m(i(y),h,_,b,w,A,H);return R&&ls(R)&&R.data==="]"?i(h.anchor=R):(ft=!0,c(h.anchor=f("]"),_,R),R)},T=(y,h,b,w,A,H)=>{if(ft=!0,h.el=null,H){const R=I(y);for(;;){const F=i(y);if(F&&F!==R)o(F);else break}}const O=i(y),_=l(y);return o(y),n(null,h,_,O,b,w,is(_),A),O},I=y=>{let h=0;for(;y;)if(y=i(y),y&&ls(y)&&(y.data==="["&&h++,y.data==="]")){if(h===0)return i(y);h--}return y};return[a,u]}const me=No;function Yo(e){return Xo(e)}function Zo(e){return Xo(e,Oa)}function Xo(e,t){const n=Uf();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:l,createText:o,createComment:c,setText:f,setElementText:a,parentNode:u,nextSibling:d,setScopeId:m=we,insertStaticContent:E}=e,T=(p,g,C,S=null,v=null,L=null,D=!1,k=null,$=!!g.dynamicChildren)=>{if(p===g)return;p&&!Xe(p,g)&&(S=Xn(p),Je(p,v,L,!0),p=null),g.patchFlag===-2&&($=!1,g.dynamicChildren=null);const{type:N,ref:U,shapeFlag:K}=g;switch(N){case Dt:I(p,g,C,S);break;case Te:y(p,g,C,S);break;case Ft:p==null&&h(g,C,S,D);break;case ye:P(p,g,C,S,v,L,D,k,$);break;default:K&1?A(p,g,C,S,v,L,D,k,$):K&6?V(p,g,C,S,v,L,D,k,$):(K&64||K&128)&&N.process(p,g,C,S,v,L,D,k,$,Wt)}U!=null&&v&&Cs(U,p&&p.ref,L,g||p,!g)},I=(p,g,C,S)=>{if(p==null)s(g.el=o(g.children),C,S);else{const v=g.el=p.el;g.children!==p.children&&f(v,g.children)}},y=(p,g,C,S)=>{p==null?s(g.el=c(g.children||""),C,S):g.el=p.el},h=(p,g,C,S)=>{[p.el,p.anchor]=E(p.children,g,C,S,p.el,p.anchor)},b=({el:p,anchor:g},C,S)=>{let v;for(;p&&p!==g;)v=d(p),s(p,C,S),p=v;s(g,C,S)},w=({el:p,anchor:g})=>{let C;for(;p&&p!==g;)C=d(p),r(p),p=C;r(g)},A=(p,g,C,S,v,L,D,k,$)=>{D=D||g.type==="svg",p==null?H(g,C,S,v,L,D,k,$):R(p,g,v,L,D,k,$)},H=(p,g,C,S,v,L,D,k)=>{let $,N;const{type:U,props:K,shapeFlag:x,transition:q,dirs:Y}=p;if($=p.el=l(p.type,L,K&&K.is,K),x&8?a($,p.children):x&16&&_(p.children,$,null,S,v,L&&U!=="foreignObject",D,k),Y&&Ye(p,null,S,"created"),K){for(const re in K)re!=="value"&&!It(re)&&i($,re,null,K[re],L,p.children,S,v,Ge);"value"in K&&i($,"value",null,K.value),(N=K.onVnodeBeforeMount)&&Ne(N,S,p)}O($,p,p.scopeId,D,S),Y&&Ye(p,null,S,"beforeMount");const le=(!v||v&&!v.pendingBranch)&&q&&!q.persisted;le&&q.beforeEnter($),s($,g,C),((N=K&&K.onVnodeMounted)||le||Y)&&me(()=>{N&&Ne(N,S,p),le&&q.enter($),Y&&Ye(p,null,S,"mounted")},v)},O=(p,g,C,S,v)=>{if(C&&m(p,C),S)for(let L=0;L<S.length;L++)m(p,S[L]);if(v){let L=v.subTree;if(g===L){const D=v.vnode;O(p,D,D.scopeId,D.slotScopeIds,v.parent)}}},_=(p,g,C,S,v,L,D,k,$=0)=>{for(let N=$;N<p.length;N++){const U=p[N]=k?pt(p[N]):Re(p[N]);T(null,U,g,C,S,v,L,D,k)}},R=(p,g,C,S,v,L,D)=>{const k=g.el=p.el;let{patchFlag:$,dynamicChildren:N,dirs:U}=g;$|=p.patchFlag&16;const K=p.props||se,x=g.props||se;let q;C&&vt(C,!1),(q=x.onVnodeBeforeUpdate)&&Ne(q,C,g,p),U&&Ye(g,p,C,"beforeUpdate"),C&&vt(C,!0);const Y=v&&g.type!=="foreignObject";if(N?F(p.dynamicChildren,N,k,C,S,Y,L):D||te(p,g,k,null,C,S,Y,L,!1),$>0){if($&16)M(k,g,K,x,C,S,v);else if($&2&&K.class!==x.class&&i(k,"class",null,x.class,v),$&4&&i(k,"style",K.style,x.style,v),$&8){const le=g.dynamicProps;for(let re=0;re<le.length;re++){const ae=le[re],xe=K[ae],qt=x[ae];(qt!==xe||ae==="value")&&i(k,ae,xe,qt,v,p.children,C,S,Ge)}}$&1&&p.children!==g.children&&a(k,g.children)}else!D&&N==null&&M(k,g,K,x,C,S,v);((q=x.onVnodeUpdated)||U)&&me(()=>{q&&Ne(q,C,g,p),U&&Ye(g,p,C,"updated")},S)},F=(p,g,C,S,v,L,D)=>{for(let k=0;k<g.length;k++){const $=p[k],N=g[k],U=$.el&&($.type===ye||!Xe($,N)||$.shapeFlag&70)?u($.el):C;T($,N,U,null,S,v,L,D,!0)}},M=(p,g,C,S,v,L,D)=>{if(C!==S){if(C!==se)for(const k in C)!It(k)&&!(k in S)&&i(p,k,C[k],null,D,g.children,v,L,Ge);for(const k in S){if(It(k))continue;const $=S[k],N=C[k];$!==N&&k!=="value"&&i(p,k,N,$,D,g.children,v,L,Ge)}"value"in S&&i(p,"value",C.value,S.value)}},P=(p,g,C,S,v,L,D,k,$)=>{const N=g.el=p?p.el:o(""),U=g.anchor=p?p.anchor:o("");let{patchFlag:K,dynamicChildren:x,slotScopeIds:q}=g;q&&(k=k?k.concat(q):q),p==null?(s(N,C,S),s(U,C,S),_(g.children,C,U,v,L,D,k,$)):K>0&&K&64&&x&&p.dynamicChildren?(F(p.dynamicChildren,x,C,v,L,D,k),(g.key!=null||v&&g===v.subTree)&&mi(p,g,!0)):te(p,g,C,U,v,L,D,k,$)},V=(p,g,C,S,v,L,D,k,$)=>{g.slotScopeIds=k,p==null?g.shapeFlag&512?v.ctx.activate(g,C,S,D,$):B(g,C,S,v,L,D,$):ee(p,g,$)},B=(p,g,C,S,v,L,D)=>{const k=p.component=rc(p,S,v);if(xn(p)&&(k.ctx.renderer=Wt),lc(k),k.asyncDep){if(v&&v.registerDep(k,Z),!p.el){const $=k.subTree=ce(Te);y(null,$,g,C)}return}Z(k,p,g,C,v,L,D)},ee=(p,g,C)=>{const S=g.component=p.component;if(xu(p,g,C))if(S.asyncDep&&!S.asyncResolved){oe(S,g,C);return}else S.next=g,Lu(S.update),S.update();else g.el=p.el,S.vnode=g},Z=(p,g,C,S,v,L,D)=>{const k=()=>{if(p.isMounted){let{next:U,bu:K,u:x,parent:q,vnode:Y}=p,le=U,re;vt(p,!1),U?(U.el=Y.el,oe(p,U,D)):U=Y,K&&Gt(K),(re=U.props&&U.props.onVnodeBeforeUpdate)&&Ne(re,q,U,Y),vt(p,!0);const ae=hs(p),xe=p.subTree;p.subTree=ae,T(xe,ae,u(xe.el),Xn(xe),p,v,L),U.el=ae.el,le===null&&oi(p,ae.el),x&&me(x,v),(re=U.props&&U.props.onVnodeUpdated)&&me(()=>Ne(re,q,U,Y),v)}else{let U;const{el:K,props:x}=g,{bm:q,m:Y,parent:le}=p,re=kt(g);if(vt(p,!1),q&&Gt(q),!re&&(U=x&&x.onVnodeBeforeMount)&&Ne(U,le,g),vt(p,!0),K&&lr){const ae=()=>{p.subTree=hs(p),lr(K,p.subTree,p,v,null)};re?g.type.__asyncLoader().then(()=>!p.isUnmounted&&ae()):ae()}else{const ae=p.subTree=hs(p);T(null,ae,C,S,p,v,L),g.el=ae.el}if(Y&&me(Y,v),!re&&(U=x&&x.onVnodeMounted)){const ae=g;me(()=>Ne(U,le,ae),v)}(g.shapeFlag&256||le&&kt(le.vnode)&&le.vnode.shapeFlag&256)&&p.a&&me(p.a,v),p.isMounted=!0,g=C=S=null}},$=p.effect=new Kn(k,()=>Ks(N),p.scope),N=p.update=()=>$.run();N.id=p.uid,vt(p,!0),N()},oe=(p,g,C)=>{g.component=p;const S=p.vnode.props;p.vnode=g,p.next=null,Ca(p,g.props,S,C),Sa(p,g.children,C),an(),sl(),pn()},te=(p,g,C,S,v,L,D,k,$=!1)=>{const N=p&&p.children,U=p?p.shapeFlag:0,K=g.children,{patchFlag:x,shapeFlag:q}=g;if(x>0){if(x&128){Zn(N,K,C,S,v,L,D,k,$);return}else if(x&256){Ue(N,K,C,S,v,L,D,k,$);return}}q&8?(U&16&&Ge(N,v,L),K!==N&&a(C,K)):U&16?q&16?Zn(N,K,C,S,v,L,D,k,$):Ge(N,v,L,!0):(U&8&&a(C,""),q&16&&_(K,C,S,v,L,D,k,$))},Ue=(p,g,C,S,v,L,D,k,$)=>{p=p||Zt,g=g||Zt;const N=p.length,U=g.length,K=Math.min(N,U);let x;for(x=0;x<K;x++){const q=g[x]=$?pt(g[x]):Re(g[x]);T(p[x],q,C,null,v,L,D,k,$)}N>U?Ge(p,v,L,!0,!1,K):_(g,C,S,v,L,D,k,$,K)},Zn=(p,g,C,S,v,L,D,k,$)=>{let N=0;const U=g.length;let K=p.length-1,x=U-1;for(;N<=K&&N<=x;){const q=p[N],Y=g[N]=$?pt(g[N]):Re(g[N]);if(Xe(q,Y))T(q,Y,C,null,v,L,D,k,$);else break;N++}for(;N<=K&&N<=x;){const q=p[K],Y=g[x]=$?pt(g[x]):Re(g[x]);if(Xe(q,Y))T(q,Y,C,null,v,L,D,k,$);else break;K--,x--}if(N>K){if(N<=x){const q=x+1,Y=q<U?g[q].el:S;for(;N<=x;)T(null,g[N]=$?pt(g[N]):Re(g[N]),C,Y,v,L,D,k,$),N++}}else if(N>x)for(;N<=K;)Je(p[N],v,L,!0),N++;else{const q=N,Y=N,le=new Map;for(N=Y;N<=x;N++){const Ie=g[N]=$?pt(g[N]):Re(g[N]);Ie.key!=null&&le.set(Ie.key,N)}let re,ae=0;const xe=x-Y+1;let qt=!1,Wi=0;const dn=new Array(xe);for(N=0;N<xe;N++)dn[N]=0;for(N=q;N<=K;N++){const Ie=p[N];if(ae>=xe){Je(Ie,v,L,!0);continue}let ze;if(Ie.key!=null)ze=le.get(Ie.key);else for(re=Y;re<=x;re++)if(dn[re-Y]===0&&Xe(Ie,g[re])){ze=re;break}ze===void 0?Je(Ie,v,L,!0):(dn[ze-Y]=N+1,ze>=Wi?Wi=ze:qt=!0,T(Ie,g[ze],C,null,v,L,D,k,$),ae++)}const qi=qt?Pa(dn):Zt;for(re=qi.length-1,N=xe-1;N>=0;N--){const Ie=Y+N,ze=g[Ie],Ji=Ie+1<U?g[Ie+1].el:S;dn[N]===0?T(null,ze,C,Ji,v,L,D,k,$):qt&&(re<0||N!==qi[re]?Tt(ze,C,Ji,2):re--)}}},Tt=(p,g,C,S,v=null)=>{const{el:L,type:D,transition:k,children:$,shapeFlag:N}=p;if(N&6){Tt(p.component.subTree,g,C,S);return}if(N&128){p.suspense.move(g,C,S);return}if(N&64){D.move(p,g,C,Wt);return}if(D===ye){s(L,g,C);for(let K=0;K<$.length;K++)Tt($[K],g,C,S);s(p.anchor,g,C);return}if(D===Ft){b(p,g,C);return}if(S!==2&&N&1&&k)if(S===0)k.beforeEnter(L),s(L,g,C),me(()=>k.enter(L),v);else{const{leave:K,delayLeave:x,afterLeave:q}=k,Y=()=>s(L,g,C),le=()=>{K(L,()=>{Y(),q&&q()})};x?x(L,Y,le):le()}else s(L,g,C)},Je=(p,g,C,S=!1,v=!1)=>{const{type:L,props:D,ref:k,children:$,dynamicChildren:N,shapeFlag:U,patchFlag:K,dirs:x}=p;if(k!=null&&Cs(k,null,C,p,!0),U&256){g.ctx.deactivate(p);return}const q=U&1&&x,Y=!kt(p);let le;if(Y&&(le=D&&D.onVnodeBeforeUnmount)&&Ne(le,g,p),U&6)Ef(p.component,C,S);else{if(U&128){p.suspense.unmount(C,S);return}q&&Ye(p,null,g,"beforeUnmount"),U&64?p.type.remove(p,g,C,v,Wt,S):N&&(L!==ye||K>0&&K&64)?Ge(N,g,C,!1,!0):(L===ye&&K&384||!v&&U&16)&&Ge($,g,C),S&&Ui(p)}(Y&&(le=D&&D.onVnodeUnmounted)||q)&&me(()=>{le&&Ne(le,g,p),q&&Ye(p,null,g,"unmounted")},C)},Ui=p=>{const{type:g,el:C,anchor:S,transition:v}=p;if(g===ye){bf(C,S);return}if(g===Ft){w(p);return}const L=()=>{r(C),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(p.shapeFlag&1&&v&&!v.persisted){const{leave:D,delayLeave:k}=v,$=()=>D(C,L);k?k(p.el,L,$):$()}else L()},bf=(p,g)=>{let C;for(;p!==g;)C=d(p),r(p),p=C;r(g)},Ef=(p,g,C)=>{const{bum:S,scope:v,update:L,subTree:D,um:k}=p;S&&Gt(S),v.stop(),L&&(L.active=!1,Je(D,p,g,C)),k&&me(k,g),me(()=>{p.isUnmounted=!0},g),g&&g.pendingBranch&&!g.isUnmounted&&p.asyncDep&&!p.asyncResolved&&p.suspenseId===g.pendingId&&(g.deps--,g.deps===0&&g.resolve())},Ge=(p,g,C,S=!1,v=!1,L=0)=>{for(let D=L;D<p.length;D++)Je(p[D],g,C,S,v)},Xn=p=>p.shapeFlag&6?Xn(p.component.subTree):p.shapeFlag&128?p.suspense.next():d(p.anchor||p.el),xi=(p,g,C)=>{p==null?g._vnode&&Je(g._vnode,null,null,!0):T(g._vnode||null,p,g,null,null,null,C),sl(),bs(),g._vnode=p},Wt={p:T,um:Je,m:Tt,r:Ui,mt:B,mc:_,pc:te,pbc:F,n:Xn,o:e};let ir,lr;return t&&([ir,lr]=t(Wt)),{render:xi,hydrate:ir,createApp:Na(xi,ir)}}function vt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function mi(e,t,n=!1){const s=e.children,r=t.children;if(j(s)&&j(r))for(let i=0;i<s.length;i++){const l=s[i];let o=r[i];o.shapeFlag&1&&!o.dynamicChildren&&((o.patchFlag<=0||o.patchFlag===32)&&(o=r[i]=pt(r[i]),o.el=l.el),n||mi(l,o)),o.type===Dt&&(o.el=l.el)}}function Pa(e){const t=e.slice(),n=[0];let s,r,i,l,o;const c=e.length;for(s=0;s<c;s++){const f=e[s];if(f!==0){if(r=n[n.length-1],e[r]<f){t[s]=r,n.push(s);continue}for(i=0,l=n.length-1;i<l;)o=i+l>>1,e[n[o]]<f?i=o+1:l=o;f<e[n[i]]&&(i>0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,l=n[i-1];i-- >0;)n[i]=l,l=t[l];return n}const Aa=e=>e.__isTeleport,Tn=e=>e&&(e.disabled||e.disabled===""),hl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Or=(e,t)=>{const n=e&&e.to;return J(n)?t?t(n):null:n},Ia={__isTeleport:!0,process(e,t,n,s,r,i,l,o,c,f){const{mc:a,pc:u,pbc:d,o:{insert:m,querySelector:E,createText:T,createComment:I}}=f,y=Tn(t.props);let{shapeFlag:h,children:b,dynamicChildren:w}=t;if(e==null){const A=t.el=T(""),H=t.anchor=T("");m(A,n,s),m(H,n,s);const O=t.target=Or(t.props,E),_=t.targetAnchor=T("");O&&(m(_,O),l=l||hl(O));const R=(F,M)=>{h&16&&a(b,F,M,r,i,l,o,c)};y?R(n,H):O&&R(O,_)}else{t.el=e.el;const A=t.anchor=e.anchor,H=t.target=e.target,O=t.targetAnchor=e.targetAnchor,_=Tn(e.props),R=_?n:H,F=_?A:O;if(l=l||hl(H),w?(d(e.dynamicChildren,w,R,r,i,l,o),mi(e,t,!0)):c||u(e,t,R,F,r,i,l,o,!1),y)_||os(t,n,A,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const M=t.target=Or(t.props,E);M&&os(t,M,null,f,0)}else _&&os(t,H,O,f,1)}Qo(t)},remove(e,t,n,s,{um:r,o:{remove:i}},l){const{shapeFlag:o,children:c,anchor:f,targetAnchor:a,target:u,props:d}=e;if(u&&i(a),(l||!Tn(d))&&(i(f),o&16))for(let m=0;m<c.length;m++){const E=c[m];r(E,t,n,!0,!!E.dynamicChildren)}},move:os,hydrate:Ma};function os(e,t,n,{o:{insert:s},m:r},i=2){i===0&&s(e.targetAnchor,t,n);const{el:l,anchor:o,shapeFlag:c,children:f,props:a}=e,u=i===2;if(u&&s(l,t,n),(!u||Tn(a))&&c&16)for(let d=0;d<f.length;d++)r(f[d],t,n,2);u&&s(o,t,n)}function Ma(e,t,n,s,r,i,{o:{nextSibling:l,parentNode:o,querySelector:c}},f){const a=t.target=Or(t.props,c);if(a){const u=a._lpa||a.firstChild;if(t.shapeFlag&16)if(Tn(t.props))t.anchor=f(l(e),t,o(e),n,s,r,i),t.targetAnchor=u;else{t.anchor=l(e);let d=u;for(;d;)if(d=l(d),d&&d.nodeType===8&&d.data==="teleport anchor"){t.targetAnchor=d,a._lpa=t.targetAnchor&&l(t.targetAnchor);break}f(u,t,a,n,s,r,i)}Qo(t)}return t.anchor&&l(t.anchor)}const Ra=Ia;function Qo(e){const t=e.ctx;if(t&&t.ut){let n=e.children[0].el;for(;n!==e.targetAnchor;)n.nodeType===1&&n.setAttribute("data-v-owner",t.uid),n=n.nextSibling;t.ut()}}const ye=Symbol(void 0),Dt=Symbol(void 0),Te=Symbol(void 0),Ft=Symbol(void 0),vn=[];let Oe=null;function Zs(e=!1){vn.push(Oe=e?null:[])}function Go(){vn.pop(),Oe=vn[vn.length-1]||null}let Ht=1;function Pr(e){Ht+=e}function ec(e){return e.dynamicChildren=Ht>0?Oe||Zt:null,Go(),Ht>0&&Oe&&Oe.push(e),e}function ka(e,t,n,s,r,i){return ec(_i(e,t,n,s,r,i,!0))}function yi(e,t,n,s,r){return ec(ce(e,t,n,s,r,!0))}function _t(e){return e?e.__v_isVNode===!0:!1}function Xe(e,t){return e.type===t.type&&e.key===t.key}function Fa(e){}const Xs="__vInternal",tc=({key:e})=>e??null,gs=({ref:e,ref_key:t,ref_for:n})=>e!=null?J(e)||ge(e)||W(e)?{i:_e,r:e,k:t,f:!!n}:e:null;function _i(e,t=null,n=null,s=0,r=null,i=e===ye?0:1,l=!1,o=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&tc(t),ref:t&&gs(t),scopeId:xs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:_e};return o?(Ei(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=J(n)?8:16),Ht>0&&!l&&Oe&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Oe.push(c),c}const ce=La;function La(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Vo)&&(e=Te),_t(e)){const o=Qe(e,t,!0);return n&&Ei(o,n),Ht>0&&!i&&Oe&&(o.shapeFlag&6?Oe[Oe.indexOf(e)]=o:Oe.push(o)),o.patchFlag|=-2,o}if(Ua(e)&&(e=e.__vccOpts),t){t=nc(t);let{class:o,style:c}=t;o&&!J(o)&&(t.class=Vn(o)),ie(c)&&(Qr(c)&&!j(c)&&(c=G({},c)),t.style=Hn(c))}const l=J(e)?1:wo(e)?128:Aa(e)?64:ie(e)?4:W(e)?2:0;return _i(e,t,n,s,r,l,i,!0)}function nc(e){return e?Qr(e)||Xs in e?G({},e):e:null}function Qe(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:l}=e,o=t?sc(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:o,key:o&&tc(o),ref:t&&t.ref?n&&r?j(r)?r.concat(gs(t)):[r,gs(t)]:gs(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx}}function bi(e=" ",t=0){return ce(Dt,null,e,t)}function Ba(e,t){const n=ce(Ft,null,e);return n.staticCount=t,n}function $a(e="",t=!1){return t?(Zs(),yi(Te,null,e)):ce(Te,null,e)}function Re(e){return e==null||typeof e=="boolean"?ce(Te):j(e)?ce(ye,null,e.slice()):typeof e=="object"?pt(e):ce(Dt,null,String(e))}function pt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Ei(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(j(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Ei(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Xs in t)?t._ctx=_e:r===3&&_e&&(_e.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:_e},n=32):(t=String(t),s&64?(n=16,t=[bi(t)]):n=8);e.children=t,e.shapeFlag|=n}function sc(...e){const t={};for(let n=0;n<e.length;n++){const s=e[n];for(const r in s)if(r==="class")t.class!==s.class&&(t.class=Vn([t.class,s.class]));else if(r==="style")t.style=Hn([t.style,s.style]);else if(jt(r)){const i=t[r],l=s[r];l&&i!==l&&!(j(i)&&i.includes(l))&&(t[r]=i?[].concat(i,l):l)}else r!==""&&(t[r]=s[r])}return t}function Ne(e,t,n,s=null){Fe(e,t,7,[n,s])}const Da=zo();let Ha=0;function rc(e,t,n){const s=e.type,r=(t?t.appContext:e.appContext)||Da,i={uid:Ha++,vnode:e,type:s,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,scope:new zr(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:xo(s,r),emitsOptions:So(s,r),emit:null,emitted:null,propsDefaults:se,inheritAttrs:s.inheritAttrs,ctx:se,data:se,props:se,attrs:se,slots:se,refs:se,setupState:se,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx={_:i},i.root=t?t.root:i,i.emit=$u.bind(null,i),e.ce&&e.ce(i),i}let de=null;const Ct=()=>de||_e,bt=e=>{de=e,e.scope.on()},ht=()=>{de&&de.scope.off(),de=null};function ic(e){return e.vnode.shapeFlag&4}let rn=!1;function lc(e,t=!1){rn=t;const{props:n,children:s}=e.vnode,r=ic(e);Ea(e,n,r,t),va(e,s);const i=r?Va(e,t):void 0;return rn=!1,i}function Va(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Gr(new Proxy(e.ctx,vr));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?fc(e):null;bt(e),an();const i=st(s,e,0,[e.props,r]);if(pn(),ht(),qr(i)){if(i.then(ht,ht),t)return i.then(l=>{Ar(e,l,t)}).catch(l=>{xt(l,e,0)});e.asyncDep=i}else Ar(e,i,t)}else cc(e,t)}function Ar(e,t,n){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ie(t)&&(e.setupState=ni(t)),cc(e,n)}let Ts,Ir;function oc(e){Ts=e,Ir=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,ha))}}const ja=()=>!Ts;function cc(e,t,n){const s=e.type;if(!e.render){if(!t&&Ts&&!s.render){const r=s.template||hi(e).template;if(r){const{isCustomElement:i,compilerOptions:l}=e.appContext.config,{delimiters:o,compilerOptions:c}=s,f=G(G({isCustomElement:i,delimiters:o},l),c);s.render=Ts(r,f)}}e.render=s.render||we,Ir&&Ir(e)}bt(e),an(),ga(e),pn(),ht()}function Ka(e){return new Proxy(e.attrs,{get(t,n){return Be(e,"get","$attrs"),t[n]}})}function fc(e){const t=s=>{e.exposed=s||{}};let n;return{get attrs(){return n||(n=Ka(e))},slots:e.slots,emit:e.emit,expose:t}}function Qs(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ni(Gr(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cn)return Cn[n](e)},has(t,n){return n in t||n in Cn}}))}function Mr(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function Ua(e){return W(e)&&"__vccOpts"in e}const uc=(e,t)=>Mu(e,t,rn);function xa(){return null}function Wa(){return null}function qa(e){}function Ja(e,t){return null}function za(){return ac().slots}function Ya(){return ac().attrs}function ac(){const e=Ct();return e.setupContext||(e.setupContext=fc(e))}function Za(e,t){const n=j(e)?e.reduce((s,r)=>(s[r]={},s),{}):e;for(const s in t){const r=n[s];r?j(r)||W(r)?n[s]={type:r,default:t[s]}:r.default=t[s]:r===null&&(n[s]={default:t[s]})}return n}function Xa(e,t){const n={};for(const s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n}function Qa(e){const t=Ct();let n=e();return ht(),qr(n)&&(n=n.catch(s=>{throw bt(t),s})),[n,()=>bt(t)]}function pc(e,t,n){const s=arguments.length;return s===2?ie(t)&&!j(t)?_t(t)?ce(e,null,[t]):ce(e,t):ce(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&_t(n)&&(n=[n]),ce(e,t,n))}const dc=Symbol(""),hc=()=>bn(dc);function Ga(){}function ep(e,t,n,s){const r=n[s];if(r&&gc(r,e))return r;const i=t();return i.memo=e.slice(),n[s]=i}function gc(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s<n.length;s++)if(nn(n[s],t[s]))return!1;return Ht>0&&Oe&&Oe.push(e),!0}const mc="3.2.45",tp={createComponentInstance:rc,setupComponent:lc,renderComponentRoot:hs,setCurrentRenderingInstance:Mn,isVNode:_t,normalizeVNode:Re},np=tp,sp=null,rp=null,ip="http://www.w3.org/2000/svg",Ot=typeof document<"u"?document:null,gl=Ot&&Ot.createElement("template"),lp={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t?Ot.createElementNS(ip,e):Ot.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ot.createTextNode(e),createComment:e=>Ot.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ot.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const l=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{gl.innerHTML=s?`<svg>${e}</svg>`:e;const o=gl.content;if(s){const c=o.firstChild;for(;c.firstChild;)o.appendChild(c.firstChild);o.removeChild(c)}t.insertBefore(o,n)}return[l?l.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function op(e,t,n){const s=e._vtc;s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function cp(e,t,n){const s=e.style,r=J(n);if(n&&!r){for(const i in n)Rr(s,i,n[i]);if(t&&!J(t))for(const i in t)n[i]==null&&Rr(s,i,"")}else{const i=s.display;r?t!==n&&(s.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(s.display=i)}}const ml=/\s*!important$/;function Rr(e,t,n){if(j(n))n.forEach(s=>Rr(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=fp(e,t);ml.test(n)?e.setProperty(ke(s),n.replace(ml,""),"important"):e[s]=n}}const yl=["Webkit","Moz","ms"],pr={};function fp(e,t){const n=pr[t];if(n)return n;let s=be(t);if(s!=="filter"&&s in e)return pr[t]=s;s=Ut(s);for(let r=0;r<yl.length;r++){const i=yl[r]+s;if(i in e)return pr[t]=i}return t}const _l="http://www.w3.org/1999/xlink";function up(e,t,n,s,r){if(s&&t.startsWith("xlink:"))n==null?e.removeAttributeNS(_l,t.slice(6,t.length)):e.setAttributeNS(_l,t,n);else{const i=Ff(t);n==null||i&&!Xl(n)?e.removeAttribute(t):e.setAttribute(t,i?"":n)}}function ap(e,t,n,s,r,i,l){if(t==="innerHTML"||t==="textContent"){s&&l(s,r,i),e[t]=n??"";return}if(t==="value"&&e.tagName!=="PROGRESS"&&!e.tagName.includes("-")){e._value=n;const c=n??"";(e.value!==c||e.tagName==="OPTION")&&(e.value=c),n==null&&e.removeAttribute(t);return}let o=!1;if(n===""||n==null){const c=typeof e[t];c==="boolean"?n=Xl(n):n==null&&c==="string"?(n="",o=!0):c==="number"&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(t)}function nt(e,t,n,s){e.addEventListener(t,n,s)}function pp(e,t,n,s){e.removeEventListener(t,n,s)}function dp(e,t,n,s,r=null){const i=e._vei||(e._vei={}),l=i[t];if(s&&l)l.value=s;else{const[o,c]=hp(t);if(s){const f=i[t]=yp(s,r);nt(e,o,f,c)}else l&&(pp(e,o,l,c),i[t]=void 0)}}const bl=/(?:Once|Passive|Capture)$/;function hp(e){let t;if(bl.test(e)){t={};let s;for(;s=e.match(bl);)e=e.slice(0,e.length-s[0].length),t[s[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):ke(e.slice(2)),t]}let dr=0;const gp=Promise.resolve(),mp=()=>dr||(gp.then(()=>dr=0),dr=Date.now());function yp(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Fe(_p(s,n.value),t,5,[s])};return n.value=e,n.attached=mp(),n}function _p(e,t){if(j(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const El=/^on[a-z]/,bp=(e,t,n,s,r=!1,i,l,o,c)=>{t==="class"?op(e,s,r):t==="style"?cp(e,n,s):jt(t)?xr(t)||dp(e,t,n,s,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ep(e,t,s,r))?ap(e,t,s,i,l,o,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),up(e,t,s,r))};function Ep(e,t,n,s){return s?!!(t==="innerHTML"||t==="textContent"||t in e&&El.test(t)&&W(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||El.test(t)&&J(n)?!1:t in e}function yc(e,t){const n=ai(e);class s extends Gs{constructor(i){super(n,i,t)}}return s.def=n,s}const Cp=e=>yc(e,Rc),Tp=typeof HTMLElement<"u"?HTMLElement:class{};class Gs extends Tp{constructor(t,n={},s){super(),this._def=t,this._props=n,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this.shadowRoot&&s?s(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,ri(()=>{this._connected||(Lr(null,this.shadowRoot),this._instance=null)})}_resolveDef(){this._resolved=!0;for(let s=0;s<this.attributes.length;s++)this._setAttr(this.attributes[s].name);new MutationObserver(s=>{for(const r of s)this._setAttr(r.attributeName)}).observe(this,{attributes:!0});const t=(s,r=!1)=>{const{props:i,styles:l}=s;let o;if(i&&!j(i))for(const c in i){const f=i[c];(f===Number||f&&f.type===Number)&&(c in this._props&&(this._props[c]=it(this._props[c])),(o||(o=Object.create(null)))[be(c)]=!0)}this._numberProps=o,r&&this._resolveProps(s),this._applyStyles(l),this._update()},n=this._def.__asyncLoader;n?n().then(s=>t(s,!0)):t(this._def)}_resolveProps(t){const{props:n}=t,s=j(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!=="_"&&s.includes(r)&&this._setProp(r,this[r],!0,!1);for(const r of s.map(be))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(i){this._setProp(r,i)}})}_setAttr(t){let n=this.getAttribute(t);const s=be(t);this._numberProps&&this._numberProps[s]&&(n=it(n)),this._setProp(s,n,!1)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,r=!0){n!==this._props[t]&&(this._props[t]=n,r&&this._instance&&this._update(),s&&(n===!0?this.setAttribute(ke(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(ke(t),n+""):n||this.removeAttribute(ke(t))))}_update(){Lr(this._createVNode(),this.shadowRoot)}_createVNode(){const t=ce(this._def,G({},this._props));return this._instance||(t.ce=n=>{this._instance=n,n.isCE=!0;const s=(i,l)=>{this.dispatchEvent(new CustomEvent(i,{detail:l}))};n.emit=(i,...l)=>{s(i,l),ke(i)!==i&&s(ke(i),l)};let r=this;for(;r=r&&(r.parentNode||r.host);)if(r instanceof Gs){n.parent=r._instance,n.provides=r._instance.provides;break}}),t}_applyStyles(t){t&&t.forEach(n=>{const s=document.createElement("style");s.textContent=n,this.shadowRoot.appendChild(s)})}}function vp(e="$style"){{const t=Ct();if(!t)return se;const n=t.type.__cssModules;if(!n)return se;const s=n[e];return s||se}}function Sp(e){const t=Ct();if(!t)return;const n=t.ut=(r=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Fr(i,r))},s=()=>{const r=e(t.proxy);kr(t.subTree,r),n(r)};Po(s),Wn(()=>{const r=new MutationObserver(s);r.observe(t.subTree.el.parentNode,{childList:!0}),Ys(()=>r.disconnect())})}function kr(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{kr(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Fr(e.el,t);else if(e.type===ye)e.children.forEach(n=>kr(n,t));else if(e.type===Ft){let{el:n,anchor:s}=e;for(;n&&(Fr(n,t),n!==s);)n=n.nextSibling}}function Fr(e,t){if(e.nodeType===1){const n=e.style;for(const s in t)n.setProperty(`--${s}`,t[s])}}const ut="transition",hn="animation",Ci=(e,{slots:t})=>pc(ui,bc(e),t);Ci.displayName="Transition";const _c={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},wp=Ci.props=G({},ui.props,_c),St=(e,t=[])=>{j(e)?e.forEach(n=>n(...t)):e&&e(...t)},Cl=e=>e?j(e)?e.some(t=>t.length>1):e.length>1:!1;function bc(e){const t={};for(const P in e)P in _c||(t[P]=e[P]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:l=`${n}-enter-active`,enterToClass:o=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=l,appearToClass:a=o,leaveFromClass:u=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,E=Np(r),T=E&&E[0],I=E&&E[1],{onBeforeEnter:y,onEnter:h,onEnterCancelled:b,onLeave:w,onLeaveCancelled:A,onBeforeAppear:H=y,onAppear:O=h,onAppearCancelled:_=b}=t,R=(P,V,B)=>{at(P,V?a:o),at(P,V?f:l),B&&B()},F=(P,V)=>{P._isLeaving=!1,at(P,u),at(P,m),at(P,d),V&&V()},M=P=>(V,B)=>{const ee=P?O:h,Z=()=>R(V,P,B);St(ee,[V,Z]),Tl(()=>{at(V,P?c:i),et(V,P?a:o),Cl(ee)||vl(V,s,T,Z)})};return G(t,{onBeforeEnter(P){St(y,[P]),et(P,i),et(P,l)},onBeforeAppear(P){St(H,[P]),et(P,c),et(P,f)},onEnter:M(!1),onAppear:M(!0),onLeave(P,V){P._isLeaving=!0;const B=()=>F(P,V);et(P,u),Cc(),et(P,d),Tl(()=>{P._isLeaving&&(at(P,u),et(P,m),Cl(w)||vl(P,s,I,B))}),St(w,[P,B])},onEnterCancelled(P){R(P,!1),St(b,[P])},onAppearCancelled(P){R(P,!0),St(_,[P])},onLeaveCancelled(P){F(P),St(A,[P])}})}function Np(e){if(e==null)return null;if(ie(e))return[hr(e.enter),hr(e.leave)];{const t=hr(e);return[t,t]}}function hr(e){return it(e)}function et(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function at(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Tl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Op=0;function vl(e,t,n,s){const r=e._endId=++Op,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:l,timeout:o,propCount:c}=Ec(e,t);if(!l)return s();const f=l+"end";let a=0;const u=()=>{e.removeEventListener(f,d),i()},d=m=>{m.target===e&&++a>=c&&u()};setTimeout(()=>{a<c&&u()},o+1),e.addEventListener(f,d)}function Ec(e,t){const n=window.getComputedStyle(e),s=E=>(n[E]||"").split(", "),r=s(`${ut}Delay`),i=s(`${ut}Duration`),l=Sl(r,i),o=s(`${hn}Delay`),c=s(`${hn}Duration`),f=Sl(o,c);let a=null,u=0,d=0;t===ut?l>0&&(a=ut,u=l,d=i.length):t===hn?f>0&&(a=hn,u=f,d=c.length):(u=Math.max(l,f),a=u>0?l>f?ut:hn:null,d=a?a===ut?i.length:c.length:0);const m=a===ut&&/\b(transform|all)(,|$)/.test(s(`${ut}Property`).toString());return{type:a,timeout:u,propCount:d,hasTransform:m}}function Sl(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((n,s)=>wl(n)+wl(e[s])))}function wl(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function Cc(){return document.body.offsetHeight}const Tc=new WeakMap,vc=new WeakMap,Pp={name:"TransitionGroup",props:G({},wp,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Ct(),s=fi();let r,i;return Js(()=>{if(!r.length)return;const l=e.moveClass||`${e.name||"v"}-move`;if(!kp(r[0].el,n.vnode.el,l))return;r.forEach(Ip),r.forEach(Mp);const o=r.filter(Rp);Cc(),o.forEach(c=>{const f=c.el,a=f.style;et(f,l),a.transform=a.webkitTransform=a.transitionDuration="";const u=f._moveCb=d=>{d&&d.target!==f||(!d||/transform$/.test(d.propertyName))&&(f.removeEventListener("transitionend",u),f._moveCb=null,at(f,l))};f.addEventListener("transitionend",u)})}),()=>{const l=Q(e),o=bc(l);let c=l.tag||ye;r=i,i=t.default?Ws(t.default()):[];for(let f=0;f<i.length;f++){const a=i[f];a.key!=null&&$t(a,sn(a,o,s,n))}if(r)for(let f=0;f<r.length;f++){const a=r[f];$t(a,sn(a,o,s,n)),Tc.set(a,a.el.getBoundingClientRect())}return ce(c,null,i)}}},Ap=Pp;function Ip(e){const t=e.el;t._moveCb&&t._moveCb(),t._enterCb&&t._enterCb()}function Mp(e){vc.set(e,e.el.getBoundingClientRect())}function Rp(e){const t=Tc.get(e),n=vc.get(e),s=t.left-n.left,r=t.top-n.top;if(s||r){const i=e.el.style;return i.transform=i.webkitTransform=`translate(${s}px,${r}px)`,i.transitionDuration="0s",e}}function kp(e,t,n){const s=e.cloneNode();e._vtc&&e._vtc.forEach(l=>{l.split(/\s+/).forEach(o=>o&&s.classList.remove(o))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const r=t.nodeType===1?t:t.parentNode;r.appendChild(s);const{hasTransform:i}=Ec(s);return r.removeChild(s),i}const Et=e=>{const t=e.props["onUpdate:modelValue"]||!1;return j(t)?n=>Gt(t,n):t};function Fp(e){e.target.composing=!0}function Nl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vs={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e._assign=Et(r);const i=s||r.props&&r.props.type==="number";nt(e,t?"change":"input",l=>{if(l.target.composing)return;let o=e.value;n&&(o=o.trim()),i&&(o=it(o)),e._assign(o)}),n&&nt(e,"change",()=>{e.value=e.value.trim()}),t||(nt(e,"compositionstart",Fp),nt(e,"compositionend",Nl),nt(e,"change",Nl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:s,number:r}},i){if(e._assign=Et(i),e.composing||document.activeElement===e&&e.type!=="range"&&(n||s&&e.value.trim()===t||(r||e.type==="number")&&it(e.value)===t))return;const l=t??"";e.value!==l&&(e.value=l)}},Ti={deep:!0,created(e,t,n){e._assign=Et(n),nt(e,"change",()=>{const s=e._modelValue,r=ln(e),i=e.checked,l=e._assign;if(j(s)){const o=Fs(s,r),c=o!==-1;if(i&&!c)l(s.concat(r));else if(!i&&c){const f=[...s];f.splice(o,1),l(f)}}else if(Kt(s)){const o=new Set(s);i?o.add(r):o.delete(r),l(o)}else l(wc(e,i))})},mounted:Ol,beforeUpdate(e,t,n){e._assign=Et(n),Ol(e,t,n)}};function Ol(e,{value:t,oldValue:n},s){e._modelValue=t,j(t)?e.checked=Fs(t,s.props.value)>-1:Kt(t)?e.checked=t.has(s.props.value):t!==n&&(e.checked=gt(t,wc(e,!0)))}const vi={created(e,{value:t},n){e.checked=gt(t,n.props.value),e._assign=Et(n),nt(e,"change",()=>{e._assign(ln(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e._assign=Et(s),t!==n&&(e.checked=gt(t,s.props.value))}},Sc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const r=Kt(t);nt(e,"change",()=>{const i=Array.prototype.filter.call(e.options,l=>l.selected).map(l=>n?it(ln(l)):ln(l));e._assign(e.multiple?r?new Set(i):i:i[0])}),e._assign=Et(s)},mounted(e,{value:t}){Pl(e,t)},beforeUpdate(e,t,n){e._assign=Et(n)},updated(e,{value:t}){Pl(e,t)}};function Pl(e,t){const n=e.multiple;if(!(n&&!j(t)&&!Kt(t))){for(let s=0,r=e.options.length;s<r;s++){const i=e.options[s],l=ln(i);if(n)j(t)?i.selected=Fs(t,l)>-1:i.selected=t.has(l);else if(gt(ln(i),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function ln(e){return"_value"in e?e._value:e.value}function wc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Nc={created(e,t,n){cs(e,t,n,null,"created")},mounted(e,t,n){cs(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){cs(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){cs(e,t,n,s,"updated")}};function Oc(e,t){switch(e){case"SELECT":return Sc;case"TEXTAREA":return vs;default:switch(t){case"checkbox":return Ti;case"radio":return vi;default:return vs}}}function cs(e,t,n,s,r){const l=Oc(e.tagName,n.props&&n.props.type)[r];l&&l(e,t,n,s)}function Lp(){vs.getSSRProps=({value:e})=>({value:e}),vi.getSSRProps=({value:e},t)=>{if(t.props&>(t.props.value,e))return{checked:!0}},Ti.getSSRProps=({value:e},t)=>{if(j(e)){if(t.props&&Fs(e,t.props.value)>-1)return{checked:!0}}else if(Kt(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Nc.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=Oc(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const Bp=["ctrl","shift","alt","meta"],$p={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Bp.some(n=>e[`${n}Key`]&&!t.includes(n))},Dp=(e,t)=>(n,...s)=>{for(let r=0;r<t.length;r++){const i=$p[t[r]];if(i&&i(n,t))return}return e(n,...s)},Hp={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Vp=(e,t)=>n=>{if(!("key"in n))return;const s=ke(n.key);if(t.some(r=>r===s||Hp[r]===s))return e(n)},Pc={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):gn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),gn(e,!0),s.enter(e)):s.leave(e,()=>{gn(e,!1)}):gn(e,t))},beforeUnmount(e,{value:t}){gn(e,t)}};function gn(e,t){e.style.display=t?e._vod:"none"}function jp(){Pc.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const Ac=G({patchProp:bp},lp);let Sn,Al=!1;function Ic(){return Sn||(Sn=Yo(Ac))}function Mc(){return Sn=Al?Sn:Zo(Ac),Al=!0,Sn}const Lr=(...e)=>{Ic().render(...e)},Rc=(...e)=>{Mc().hydrate(...e)},Kp=(...e)=>{const t=Ic().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=kc(s);if(!r)return;const i=t._component;!W(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.innerHTML="";const l=n(r,!1,r instanceof SVGElement);return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),l},t},Up=(...e)=>{const t=Mc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=kc(s);if(r)return n(r,!0,r instanceof SVGElement)},t};function kc(e){return J(e)?document.querySelector(e):e}let Il=!1;const xp=()=>{Il||(Il=!0,Lp(),jp())},Wp=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:ui,Comment:Te,EffectScope:zr,Fragment:ye,KeepAlive:sa,ReactiveEffect:Kn,Static:Ft,Suspense:qu,Teleport:Ra,Text:Dt,Transition:Ci,TransitionGroup:Ap,VueElement:Gs,callWithAsyncErrorHandling:Fe,callWithErrorHandling:st,camelize:be,capitalize:Ut,cloneVNode:Qe,compatUtils:rp,computed:uc,createApp:Kp,createBlock:yi,createCommentVNode:$a,createElementBlock:ka,createElementVNode:_i,createHydrationRenderer:Zo,createPropsRestProxy:Xa,createRenderer:Yo,createSSRApp:Up,createSlots:aa,createStaticVNode:Ba,createTextVNode:bi,createVNode:ce,customRef:Ou,defineAsyncComponent:ta,defineComponent:ai,defineCustomElement:yc,defineEmits:Wa,defineExpose:qa,defineProps:xa,defineSSRCustomElement:Cp,get devtools(){return zt},effect:Yf,effectScope:xf,getCurrentInstance:Ct,getCurrentScope:Wf,getTransitionRawChildren:Ws,guardReactiveProps:nc,h:pc,handleError:xt,hydrate:Rc,initCustomFormatter:Ga,initDirectivesForSSR:xp,inject:bn,isMemoSame:gc,isProxy:Qr,isReactive:Rt,isReadonly:Bt,isRef:ge,isRuntimeOnly:ja,isShallow:On,isVNode:_t,markRaw:Gr,mergeDefaults:Za,mergeProps:sc,nextTick:ri,normalizeClass:Vn,normalizeProps:Nf,normalizeStyle:Hn,onActivated:Mo,onBeforeMount:Fo,onBeforeUnmount:zs,onBeforeUpdate:Lo,onDeactivated:Ro,onErrorCaptured:Ho,onMounted:Wn,onRenderTracked:Do,onRenderTriggered:$o,onScopeDispose:qf,onServerPrefetch:Bo,onUnmounted:Ys,onUpdated:Js,openBlock:Zs,popScopeId:Hu,provide:Oo,proxyRefs:ni,pushScopeId:Du,queuePostFlushCb:ii,reactive:Hs,readonly:Xr,ref:ds,registerRuntimeCompiler:oc,render:Lr,renderList:ua,renderSlot:pa,resolveComponent:oa,resolveDirective:fa,resolveDynamicComponent:ca,resolveFilter:sp,resolveTransitionHooks:sn,setBlockTracking:Pr,setDevtoolsHook:vo,setTransitionHooks:$t,shallowReactive:go,shallowReadonly:Cu,shallowRef:Tu,ssrContextKey:dc,ssrUtils:np,stop:Zf,toDisplayString:Bf,toHandlerKey:Qt,toHandlers:da,toRaw:Q,toRef:_o,toRefs:Pu,transformVNodeArgs:Fa,triggerRef:Su,unref:yo,useAttrs:Ya,useCssModule:vp,useCssVars:Sp,useSSRContext:hc,useSlots:za,useTransitionState:fi,vModelCheckbox:Ti,vModelDynamic:Nc,vModelRadio:vi,vModelSelect:Sc,vModelText:vs,vShow:Pc,version:mc,warn:Ru,watch:En,watchEffect:Xu,watchPostEffect:Po,watchSyncEffect:Qu,withAsyncContext:Qa,withCtx:li,withDefaults:Ja,withDirectives:ia,withKeys:Vp,withMemo:ep,withModifiers:Dp,withScopeId:Vu},Symbol.toStringTag,{value:"Module"}));function Si(e){throw e}function Fc(e){}function fe(e,t,n,s){const r=e,i=new SyntaxError(String(r));return i.code=e,i.loc=t,i}const kn=Symbol(""),wn=Symbol(""),wi=Symbol(""),Ss=Symbol(""),Lc=Symbol(""),Vt=Symbol(""),Bc=Symbol(""),$c=Symbol(""),Ni=Symbol(""),Oi=Symbol(""),qn=Symbol(""),Pi=Symbol(""),Dc=Symbol(""),Ai=Symbol(""),ws=Symbol(""),Ii=Symbol(""),Mi=Symbol(""),Ri=Symbol(""),ki=Symbol(""),Hc=Symbol(""),Vc=Symbol(""),er=Symbol(""),Ns=Symbol(""),Fi=Symbol(""),Li=Symbol(""),Fn=Symbol(""),Jn=Symbol(""),Bi=Symbol(""),Br=Symbol(""),qp=Symbol(""),$r=Symbol(""),Os=Symbol(""),Jp=Symbol(""),zp=Symbol(""),$i=Symbol(""),Yp=Symbol(""),Zp=Symbol(""),Di=Symbol(""),jc=Symbol(""),on={[kn]:"Fragment",[wn]:"Teleport",[wi]:"Suspense",[Ss]:"KeepAlive",[Lc]:"BaseTransition",[Vt]:"openBlock",[Bc]:"createBlock",[$c]:"createElementBlock",[Ni]:"createVNode",[Oi]:"createElementVNode",[qn]:"createCommentVNode",[Pi]:"createTextVNode",[Dc]:"createStaticVNode",[Ai]:"resolveComponent",[ws]:"resolveDynamicComponent",[Ii]:"resolveDirective",[Mi]:"resolveFilter",[Ri]:"withDirectives",[ki]:"renderList",[Hc]:"renderSlot",[Vc]:"createSlots",[er]:"toDisplayString",[Ns]:"mergeProps",[Fi]:"normalizeClass",[Li]:"normalizeStyle",[Fn]:"normalizeProps",[Jn]:"guardReactiveProps",[Bi]:"toHandlers",[Br]:"camelize",[qp]:"capitalize",[$r]:"toHandlerKey",[Os]:"setBlockTracking",[Jp]:"pushScopeId",[zp]:"popScopeId",[$i]:"withCtx",[Yp]:"unref",[Zp]:"isRef",[Di]:"withMemo",[jc]:"isMemoSame"};function Xp(e){Object.getOwnPropertySymbols(e).forEach(t=>{on[t]=e[t]})}const $e={source:"",start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function Qp(e,t=$e){return{type:0,children:e,helpers:[],components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:t}}function Ln(e,t,n,s,r,i,l,o=!1,c=!1,f=!1,a=$e){return e&&(o?(e.helper(Vt),e.helper(un(e.inSSR,f))):e.helper(fn(e.inSSR,f)),l&&e.helper(Ri)),{type:13,tag:t,props:n,children:s,patchFlag:r,dynamicProps:i,directives:l,isBlock:o,disableTracking:c,isComponent:f,loc:a}}function zn(e,t=$e){return{type:17,loc:t,elements:e}}function Ve(e,t=$e){return{type:15,loc:t,properties:e}}function ue(e,t){return{type:16,loc:$e,key:J(e)?z(e,!0):e,value:t}}function z(e,t=!1,n=$e,s=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:s}}function qe(e,t=$e){return{type:8,loc:t,children:e}}function pe(e,t=[],n=$e){return{type:14,loc:n,callee:e,arguments:t}}function cn(e,t=void 0,n=!1,s=!1,r=$e){return{type:18,params:e,returns:t,newline:n,isSlot:s,loc:r}}function Dr(e,t,n,s=!0){return{type:19,test:e,consequent:t,alternate:n,newline:s,loc:$e}}function Gp(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:$e}}function ed(e){return{type:21,body:e,loc:$e}}const Pe=e=>e.type===4&&e.isStatic,Yt=(e,t)=>e===t||e===ke(t);function Kc(e){if(Yt(e,"Teleport"))return wn;if(Yt(e,"Suspense"))return wi;if(Yt(e,"KeepAlive"))return Ss;if(Yt(e,"BaseTransition"))return Lc}const td=/^\d|[^\$\w]/,Hi=e=>!td.test(e),nd=/[A-Za-z_$\xA0-\uFFFF]/,sd=/[\.\?\w$\xA0-\uFFFF]/,rd=/\s+[.[]\s*|\s*[.[]\s+/g,id=e=>{e=e.trim().replace(rd,l=>l.trim());let t=0,n=[],s=0,r=0,i=null;for(let l=0;l<e.length;l++){const o=e.charAt(l);switch(t){case 0:if(o==="[")n.push(t),t=1,s++;else if(o==="(")n.push(t),t=2,r++;else if(!(l===0?nd:sd).test(o))return!1;break;case 1:o==="'"||o==='"'||o==="`"?(n.push(t),t=3,i=o):o==="["?s++:o==="]"&&(--s||(t=n.pop()));break;case 2:if(o==="'"||o==='"'||o==="`")n.push(t),t=3,i=o;else if(o==="(")r++;else if(o===")"){if(l===e.length-1)return!1;--r||(t=n.pop())}break;case 3:o===i&&(t=n.pop(),i=null);break}}return!s&&!r},Uc=id;function xc(e,t,n){const r={source:e.source.slice(t,t+n),start:Ps(e.start,e.source,t),end:e.end};return n!=null&&(r.end=Ps(e.start,e.source,t+n)),r}function Ps(e,t,n=t.length){return As(G({},e),t,n)}function As(e,t,n=t.length){let s=0,r=-1;for(let i=0;i<n;i++)t.charCodeAt(i)===10&&(s++,r=i);return e.offset+=n,e.line+=s,e.column=r===-1?e.column+n:n-r,e}function He(e,t,n=!1){for(let s=0;s<e.props.length;s++){const r=e.props[s];if(r.type===7&&(n||r.exp)&&(J(t)?r.name===t:t.test(r.name)))return r}}function tr(e,t,n=!1,s=!1){for(let r=0;r<e.props.length;r++){const i=e.props[r];if(i.type===6){if(n)continue;if(i.name===t&&(i.value||s))return i}else if(i.name==="bind"&&(i.exp||s)&&At(i.arg,t))return i}}function At(e,t){return!!(e&&Pe(e)&&e.content===t)}function ld(e){return e.props.some(t=>t.type===7&&t.name==="bind"&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function gr(e){return e.type===5||e.type===2}function od(e){return e.type===7&&e.name==="slot"}function Is(e){return e.type===1&&e.tagType===3}function Ms(e){return e.type===1&&e.tagType===2}function fn(e,t){return e||t?Ni:Oi}function un(e,t){return e||t?Bc:$c}const cd=new Set([Fn,Jn]);function Wc(e,t=[]){if(e&&!J(e)&&e.type===14){const n=e.callee;if(!J(n)&&cd.has(n))return Wc(e.arguments[0],t.concat(e))}return[e,t]}function Rs(e,t,n){let s,r=e.type===13?e.props:e.arguments[2],i=[],l;if(r&&!J(r)&&r.type===14){const o=Wc(r);r=o[0],i=o[1],l=i[i.length-1]}if(r==null||J(r))s=Ve([t]);else if(r.type===14){const o=r.arguments[0];!J(o)&&o.type===15?Ml(t,o)||o.properties.unshift(t):r.callee===Bi?s=pe(n.helper(Ns),[Ve([t]),r]):r.arguments.unshift(Ve([t])),!s&&(s=r)}else r.type===15?(Ml(t,r)||r.properties.unshift(t),s=r):(s=pe(n.helper(Ns),[Ve([t]),r]),l&&l.callee===Jn&&(l=i[i.length-2]));e.type===13?l?l.arguments[0]=s:e.props=s:l?l.arguments[0]=s:e.arguments[2]=s}function Ml(e,t){let n=!1;if(e.key.type===4){const s=e.key.content;n=t.properties.some(r=>r.key.type===4&&r.key.content===s)}return n}function Bn(e,t){return`_${t}_${e.replace(/[^\w]/g,(n,s)=>n==="-"?"_":e.charCodeAt(s).toString())}`}function fd(e){return e.type===14&&e.callee===Di?e.arguments[1].returns:e}function Vi(e,{helper:t,removeHelper:n,inSSR:s}){e.isBlock||(e.isBlock=!0,n(fn(s,e.isComponent)),t(Vt),t(un(s,e.isComponent)))}function Rl(e,t){const n=t.options?t.options.compatConfig:t.compatConfig,s=n&&n[e];return e==="MODE"?s||3:s}function Lt(e,t){const n=Rl("MODE",t),s=Rl(e,t);return n===3?s===!0:s!==!1}function $n(e,t,n,...s){return Lt(e,t)}const ud=/&(gt|lt|amp|apos|quot);/g,ad={gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},kl={delimiters:["{{","}}"],getNamespace:()=>0,getTextMode:()=>0,isVoidTag:ps,isPreTag:ps,isCustomElement:ps,decodeEntities:e=>e.replace(ud,(t,n)=>ad[n]),onError:Si,onWarn:Fc,comments:!1};function pd(e,t={}){const n=dd(e,t),s=Le(n);return Qp(ji(n,0,[]),Ke(n,s))}function dd(e,t){const n=G({},kl);let s;for(s in t)n[s]=t[s]===void 0?kl[s]:t[s];return{options:n,column:1,line:1,offset:0,originalSource:e,source:e,inPre:!1,inVPre:!1,onWarn:n.onWarn}}function ji(e,t,n){const s=nr(n),r=s?s.ns:0,i=[];for(;!Td(e,t,n);){const o=e.source;let c;if(t===0||t===1){if(!e.inVPre&&Ce(o,e.options.delimiters[0]))c=Ed(e,t);else if(t===0&&o[0]==="<")if(o.length===1)ne(e,5,1);else if(o[1]==="!")Ce(o,"<!--")?c=gd(e):Ce(o,"<!DOCTYPE")?c=mn(e):Ce(o,"<![CDATA[")?r!==0?c=hd(e,n):(ne(e,1),c=mn(e)):(ne(e,11),c=mn(e));else if(o[1]==="/")if(o.length===2)ne(e,5,2);else if(o[2]===">"){ne(e,14,2),he(e,3);continue}else if(/[a-z]/i.test(o[2])){ne(e,23),Hr(e,1,s);continue}else ne(e,12,2),c=mn(e);else/[a-z]/i.test(o[1])?(c=md(e,n),Lt("COMPILER_NATIVE_TEMPLATE",e)&&c&&c.tag==="template"&&!c.props.some(f=>f.type===7&&qc(f.name))&&(c=c.children)):o[1]==="?"?(ne(e,21,1),c=mn(e)):ne(e,12,1)}if(c||(c=Cd(e,t)),j(c))for(let f=0;f<c.length;f++)Fl(i,c[f]);else Fl(i,c)}let l=!1;if(t!==2&&t!==1){const o=e.options.whitespace!=="preserve";for(let c=0;c<i.length;c++){const f=i[c];if(f.type===2)if(e.inPre)f.content=f.content.replace(/\r\n/g,` +`);else if(/[^\t\r\n\f ]/.test(f.content))o&&(f.content=f.content.replace(/[\t\r\n\f ]+/g," "));else{const a=i[c-1],u=i[c+1];!a||!u||o&&(a.type===3&&u.type===3||a.type===3&&u.type===1||a.type===1&&u.type===3||a.type===1&&u.type===1&&/[\r\n]/.test(f.content))?(l=!0,i[c]=null):f.content=" "}else f.type===3&&!e.options.comments&&(l=!0,i[c]=null)}if(e.inPre&&s&&e.options.isPreTag(s.tag)){const c=i[0];c&&c.type===2&&(c.content=c.content.replace(/^\r?\n/,""))}}return l?i.filter(Boolean):i}function Fl(e,t){if(t.type===2){const n=nr(e);if(n&&n.type===2&&n.loc.end.offset===t.loc.start.offset){n.content+=t.content,n.loc.end=t.loc.end,n.loc.source+=t.loc.source;return}}e.push(t)}function hd(e,t){he(e,9);const n=ji(e,3,t);return e.source.length===0?ne(e,6):he(e,3),n}function gd(e){const t=Le(e);let n;const s=/--(\!)?>/.exec(e.source);if(!s)n=e.source.slice(4),he(e,e.source.length),ne(e,7);else{s.index<=3&&ne(e,0),s[1]&&ne(e,10),n=e.source.slice(4,s.index);const r=e.source.slice(0,s.index);let i=1,l=0;for(;(l=r.indexOf("<!--",i))!==-1;)he(e,l-i+1),l+4<r.length&&ne(e,16),i=l+1;he(e,s.index+s[0].length-i+1)}return{type:3,content:n,loc:Ke(e,t)}}function mn(e){const t=Le(e),n=e.source[1]==="?"?1:2;let s;const r=e.source.indexOf(">");return r===-1?(s=e.source.slice(n),he(e,e.source.length)):(s=e.source.slice(n,r),he(e,r+1)),{type:3,content:s,loc:Ke(e,t)}}function md(e,t){const n=e.inPre,s=e.inVPre,r=nr(t),i=Hr(e,0,r),l=e.inPre&&!n,o=e.inVPre&&!s;if(i.isSelfClosing||e.options.isVoidTag(i.tag))return l&&(e.inPre=!1),o&&(e.inVPre=!1),i;t.push(i);const c=e.options.getTextMode(i,r),f=ji(e,c,t);t.pop();{const a=i.props.find(u=>u.type===6&&u.name==="inline-template");if(a&&$n("COMPILER_INLINE_TEMPLATE",e,a.loc)){const u=Ke(e,i.loc.end);a.value={type:2,content:u.source,loc:u}}}if(i.children=f,Vr(e.source,i.tag))Hr(e,1,r);else if(ne(e,24,0,i.loc.start),e.source.length===0&&i.tag.toLowerCase()==="script"){const a=f[0];a&&Ce(a.loc.source,"<!--")&&ne(e,8)}return i.loc=Ke(e,i.loc.start),l&&(e.inPre=!1),o&&(e.inVPre=!1),i}const qc=Ae("if,else,else-if,for,slot");function Hr(e,t,n){const s=Le(e),r=/^<\/?([a-z][^\t\r\n\f />]*)/i.exec(e.source),i=r[1],l=e.options.getNamespace(i,n);he(e,r[0].length),Dn(e);const o=Le(e),c=e.source;e.options.isPreTag(i)&&(e.inPre=!0);let f=Ll(e,t);t===0&&!e.inVPre&&f.some(d=>d.type===7&&d.name==="pre")&&(e.inVPre=!0,G(e,o),e.source=c,f=Ll(e,t).filter(d=>d.name!=="v-pre"));let a=!1;if(e.source.length===0?ne(e,9):(a=Ce(e.source,"/>"),t===1&&a&&ne(e,4),he(e,a?2:1)),t===1)return;let u=0;return e.inVPre||(i==="slot"?u=2:i==="template"?f.some(d=>d.type===7&&qc(d.name))&&(u=3):yd(i,f,e)&&(u=1)),{type:1,ns:l,tag:i,tagType:u,props:f,isSelfClosing:a,children:[],loc:Ke(e,s),codegenNode:void 0}}function yd(e,t,n){const s=n.options;if(s.isCustomElement(e))return!1;if(e==="component"||/^[A-Z]/.test(e)||Kc(e)||s.isBuiltInComponent&&s.isBuiltInComponent(e)||s.isNativeTag&&!s.isNativeTag(e))return!0;for(let r=0;r<t.length;r++){const i=t[r];if(i.type===6){if(i.name==="is"&&i.value){if(i.value.content.startsWith("vue:"))return!0;if($n("COMPILER_IS_ON_ELEMENT",n,i.loc))return!0}}else{if(i.name==="is")return!0;if(i.name==="bind"&&At(i.arg,"is")&&$n("COMPILER_IS_ON_ELEMENT",n,i.loc))return!0}}}function Ll(e,t){const n=[],s=new Set;for(;e.source.length>0&&!Ce(e.source,">")&&!Ce(e.source,"/>");){if(Ce(e.source,"/")){ne(e,22),he(e,1),Dn(e);continue}t===1&&ne(e,3);const r=_d(e,s);r.type===6&&r.value&&r.name==="class"&&(r.value.content=r.value.content.replace(/\s+/g," ").trim()),t===0&&n.push(r),/^[^\t\r\n\f />]/.test(e.source)&&ne(e,15),Dn(e)}return n}function _d(e,t){const n=Le(e),r=/^[^\t\r\n\f />][^\t\r\n\f />=]*/.exec(e.source)[0];t.has(r)&&ne(e,2),t.add(r),r[0]==="="&&ne(e,19);{const o=/["'<]/g;let c;for(;c=o.exec(r);)ne(e,17,c.index)}he(e,r.length);let i;/^[\t\r\n\f ]*=/.test(e.source)&&(Dn(e),he(e,1),Dn(e),i=bd(e),i||ne(e,13));const l=Ke(e,n);if(!e.inVPre&&/^(v-[A-Za-z0-9-]|:|\.|@|#)/.test(r)){const o=/(?:^v-([a-z0-9-]+))?(?:(?::|^\.|^@|^#)(\[[^\]]+\]|[^\.]+))?(.+)?$/i.exec(r);let c=Ce(r,"."),f=o[1]||(c||Ce(r,":")?"bind":Ce(r,"@")?"on":"slot"),a;if(o[2]){const d=f==="slot",m=r.lastIndexOf(o[2]),E=Ke(e,Bl(e,n,m),Bl(e,n,m+o[2].length+(d&&o[3]||"").length));let T=o[2],I=!0;T.startsWith("[")?(I=!1,T.endsWith("]")?T=T.slice(1,T.length-1):(ne(e,27),T=T.slice(1))):d&&(T+=o[3]||""),a={type:4,content:T,isStatic:I,constType:I?3:0,loc:E}}if(i&&i.isQuoted){const d=i.loc;d.start.offset++,d.start.column++,d.end=Ps(d.start,i.content),d.source=d.source.slice(1,-1)}const u=o[3]?o[3].slice(1).split("."):[];return c&&u.push("prop"),f==="bind"&&a&&u.includes("sync")&&$n("COMPILER_V_BIND_SYNC",e,l,a.loc.source)&&(f="model",u.splice(u.indexOf("sync"),1)),{type:7,name:f,exp:i&&{type:4,content:i.content,isStatic:!1,constType:0,loc:i.loc},arg:a,modifiers:u,loc:l}}return!e.inVPre&&Ce(r,"v-")&&ne(e,26),{type:6,name:r,value:i&&{type:2,content:i.content,loc:i.loc},loc:l}}function bd(e){const t=Le(e);let n;const s=e.source[0],r=s==='"'||s==="'";if(r){he(e,1);const i=e.source.indexOf(s);i===-1?n=Nn(e,e.source.length,4):(n=Nn(e,i,4),he(e,1))}else{const i=/^[^\t\r\n\f >]+/.exec(e.source);if(!i)return;const l=/["'<=`]/g;let o;for(;o=l.exec(i[0]);)ne(e,18,o.index);n=Nn(e,i[0].length,4)}return{content:n,isQuoted:r,loc:Ke(e,t)}}function Ed(e,t){const[n,s]=e.options.delimiters,r=e.source.indexOf(s,n.length);if(r===-1){ne(e,25);return}const i=Le(e);he(e,n.length);const l=Le(e),o=Le(e),c=r-n.length,f=e.source.slice(0,c),a=Nn(e,c,t),u=a.trim(),d=a.indexOf(u);d>0&&As(l,f,d);const m=c-(a.length-u.length-d);return As(o,f,m),he(e,s.length),{type:5,content:{type:4,isStatic:!1,constType:0,content:u,loc:Ke(e,l,o)},loc:Ke(e,i)}}function Cd(e,t){const n=t===3?["]]>"]:["<",e.options.delimiters[0]];let s=e.source.length;for(let l=0;l<n.length;l++){const o=e.source.indexOf(n[l],1);o!==-1&&s>o&&(s=o)}const r=Le(e);return{type:2,content:Nn(e,s,t),loc:Ke(e,r)}}function Nn(e,t,n){const s=e.source.slice(0,t);return he(e,t),n===2||n===3||!s.includes("&")?s:e.options.decodeEntities(s,n===4)}function Le(e){const{column:t,line:n,offset:s}=e;return{column:t,line:n,offset:s}}function Ke(e,t,n){return n=n||Le(e),{start:t,end:n,source:e.originalSource.slice(t.offset,n.offset)}}function nr(e){return e[e.length-1]}function Ce(e,t){return e.startsWith(t)}function he(e,t){const{source:n}=e;As(e,n,t),e.source=n.slice(t)}function Dn(e){const t=/^[\t\r\n\f ]+/.exec(e.source);t&&he(e,t[0].length)}function Bl(e,t,n){return Ps(t,e.originalSource.slice(t.offset,n),n)}function ne(e,t,n,s=Le(e)){n&&(s.offset+=n,s.column+=n),e.options.onError(fe(t,{start:s,end:s,source:""}))}function Td(e,t,n){const s=e.source;switch(t){case 0:if(Ce(s,"</")){for(let r=n.length-1;r>=0;--r)if(Vr(s,n[r].tag))return!0}break;case 1:case 2:{const r=nr(n);if(r&&Vr(s,r.tag))return!0;break}case 3:if(Ce(s,"]]>"))return!0;break}return!s}function Vr(e,t){return Ce(e,"</")&&e.slice(2,2+t.length).toLowerCase()===t.toLowerCase()&&/[\t\r\n\f />]/.test(e[2+t.length]||">")}function vd(e,t){ms(e,t,Jc(e,e.children[0]))}function Jc(e,t){const{children:n}=e;return n.length===1&&t.type===1&&!Ms(t)}function ms(e,t,n=!1){const{children:s}=e,r=s.length;let i=0;for(let l=0;l<s.length;l++){const o=s[l];if(o.type===1&&o.tagType===0){const c=n?0:je(o,t);if(c>0){if(c>=2){o.codegenNode.patchFlag=-1+"",o.codegenNode=t.hoist(o.codegenNode),i++;continue}}else{const f=o.codegenNode;if(f.type===13){const a=Xc(f);if((!a||a===512||a===1)&&Yc(o,t)>=2){const u=Zc(o);u&&(f.props=t.hoist(u))}f.dynamicProps&&(f.dynamicProps=t.hoist(f.dynamicProps))}}}if(o.type===1){const c=o.tagType===1;c&&t.scopes.vSlot++,ms(o,t),c&&t.scopes.vSlot--}else if(o.type===11)ms(o,t,o.children.length===1);else if(o.type===9)for(let c=0;c<o.branches.length;c++)ms(o.branches[c],t,o.branches[c].children.length===1)}i&&t.transformHoist&&t.transformHoist(s,t,e),i&&i===r&&e.type===1&&e.tagType===0&&e.codegenNode&&e.codegenNode.type===13&&j(e.codegenNode.children)&&(e.codegenNode.children=t.hoist(zn(e.codegenNode.children)))}function je(e,t){const{constantCache:n}=t;switch(e.type){case 1:if(e.tagType!==0)return 0;const s=n.get(e);if(s!==void 0)return s;const r=e.codegenNode;if(r.type!==13||r.isBlock&&e.tag!=="svg"&&e.tag!=="foreignObject")return 0;if(Xc(r))return n.set(e,0),0;{let o=3;const c=Yc(e,t);if(c===0)return n.set(e,0),0;c<o&&(o=c);for(let f=0;f<e.children.length;f++){const a=je(e.children[f],t);if(a===0)return n.set(e,0),0;a<o&&(o=a)}if(o>1)for(let f=0;f<e.props.length;f++){const a=e.props[f];if(a.type===7&&a.name==="bind"&&a.exp){const u=je(a.exp,t);if(u===0)return n.set(e,0),0;u<o&&(o=u)}}if(r.isBlock){for(let f=0;f<e.props.length;f++)if(e.props[f].type===7)return n.set(e,0),0;t.removeHelper(Vt),t.removeHelper(un(t.inSSR,r.isComponent)),r.isBlock=!1,t.helper(fn(t.inSSR,r.isComponent))}return n.set(e,o),o}case 2:case 3:return 3;case 9:case 11:case 10:return 0;case 5:case 12:return je(e.content,t);case 4:return e.constType;case 8:let l=3;for(let o=0;o<e.children.length;o++){const c=e.children[o];if(J(c)||mt(c))continue;const f=je(c,t);if(f===0)return 0;f<l&&(l=f)}return l;default:return 0}}const Sd=new Set([Fi,Li,Fn,Jn]);function zc(e,t){if(e.type===14&&!J(e.callee)&&Sd.has(e.callee)){const n=e.arguments[0];if(n.type===4)return je(n,t);if(n.type===14)return zc(n,t)}return 0}function Yc(e,t){let n=3;const s=Zc(e);if(s&&s.type===15){const{properties:r}=s;for(let i=0;i<r.length;i++){const{key:l,value:o}=r[i],c=je(l,t);if(c===0)return c;c<n&&(n=c);let f;if(o.type===4?f=je(o,t):o.type===14?f=zc(o,t):f=0,f===0)return f;f<n&&(n=f)}}return n}function Zc(e){const t=e.codegenNode;if(t.type===13)return t.props}function Xc(e){const t=e.patchFlag;return t?parseInt(t,10):void 0}function wd(e,{filename:t="",prefixIdentifiers:n=!1,hoistStatic:s=!1,cacheHandlers:r=!1,nodeTransforms:i=[],directiveTransforms:l={},transformHoist:o=null,isBuiltInComponent:c=we,isCustomElement:f=we,expressionPlugins:a=[],scopeId:u=null,slotted:d=!0,ssr:m=!1,inSSR:E=!1,ssrCssVars:T="",bindingMetadata:I=se,inline:y=!1,isTS:h=!1,onError:b=Si,onWarn:w=Fc,compatConfig:A}){const H=t.replace(/\?.*$/,"").match(/([^/\\]+)\.\w+$/),O={selfName:H&&Ut(be(H[1])),prefixIdentifiers:n,hoistStatic:s,cacheHandlers:r,nodeTransforms:i,directiveTransforms:l,transformHoist:o,isBuiltInComponent:c,isCustomElement:f,expressionPlugins:a,scopeId:u,slotted:d,ssr:m,inSSR:E,ssrCssVars:T,bindingMetadata:I,inline:y,isTS:h,onError:b,onWarn:w,compatConfig:A,root:e,helpers:new Map,components:new Set,directives:new Set,hoists:[],imports:[],constantCache:new Map,temps:0,cached:0,identifiers:Object.create(null),scopes:{vFor:0,vSlot:0,vPre:0,vOnce:0},parent:null,currentNode:e,childIndex:0,inVOnce:!1,helper(_){const R=O.helpers.get(_)||0;return O.helpers.set(_,R+1),_},removeHelper(_){const R=O.helpers.get(_);if(R){const F=R-1;F?O.helpers.set(_,F):O.helpers.delete(_)}},helperString(_){return`_${on[O.helper(_)]}`},replaceNode(_){O.parent.children[O.childIndex]=O.currentNode=_},removeNode(_){const R=O.parent.children,F=_?R.indexOf(_):O.currentNode?O.childIndex:-1;!_||_===O.currentNode?(O.currentNode=null,O.onNodeRemoved()):O.childIndex>F&&(O.childIndex--,O.onNodeRemoved()),O.parent.children.splice(F,1)},onNodeRemoved:()=>{},addIdentifiers(_){},removeIdentifiers(_){},hoist(_){J(_)&&(_=z(_)),O.hoists.push(_);const R=z(`_hoisted_${O.hoists.length}`,!1,_.loc,2);return R.hoisted=_,R},cache(_,R=!1){return Gp(O.cached++,_,R)}};return O.filters=new Set,O}function Nd(e,t){const n=wd(e,t);sr(e,n),t.hoistStatic&&vd(e,n),t.ssr||Od(e,n),e.helpers=[...n.helpers.keys()],e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.filters=[...n.filters]}function Od(e,t){const{helper:n}=t,{children:s}=e;if(s.length===1){const r=s[0];if(Jc(e,r)&&r.codegenNode){const i=r.codegenNode;i.type===13&&Vi(i,t),e.codegenNode=i}else e.codegenNode=r}else if(s.length>1){let r=64;e.codegenNode=Ln(t,n(kn),void 0,e.children,r+"",void 0,void 0,!0,void 0,!1)}}function Pd(e,t){let n=0;const s=()=>{n--};for(;n<e.children.length;n++){const r=e.children[n];J(r)||(t.parent=e,t.childIndex=n,t.onNodeRemoved=s,sr(r,t))}}function sr(e,t){t.currentNode=e;const{nodeTransforms:n}=t,s=[];for(let i=0;i<n.length;i++){const l=n[i](e,t);if(l&&(j(l)?s.push(...l):s.push(l)),t.currentNode)e=t.currentNode;else return}switch(e.type){case 3:t.ssr||t.helper(qn);break;case 5:t.ssr||t.helper(er);break;case 9:for(let i=0;i<e.branches.length;i++)sr(e.branches[i],t);break;case 10:case 11:case 1:case 0:Pd(e,t);break}t.currentNode=e;let r=s.length;for(;r--;)s[r]()}function Qc(e,t){const n=J(e)?s=>s===e:s=>e.test(s);return(s,r)=>{if(s.type===1){const{props:i}=s;if(s.tagType===3&&i.some(od))return;const l=[];for(let o=0;o<i.length;o++){const c=i[o];if(c.type===7&&n(c.name)){i.splice(o,1),o--;const f=t(s,c,r);f&&l.push(f)}}return l}}}const rr="/*#__PURE__*/",Gc=e=>`${on[e]}: _${on[e]}`;function Ad(e,{mode:t="function",prefixIdentifiers:n=t==="module",sourceMap:s=!1,filename:r="template.vue.html",scopeId:i=null,optimizeImports:l=!1,runtimeGlobalName:o="Vue",runtimeModuleName:c="vue",ssrRuntimeModuleName:f="vue/server-renderer",ssr:a=!1,isTS:u=!1,inSSR:d=!1}){const m={mode:t,prefixIdentifiers:n,sourceMap:s,filename:r,scopeId:i,optimizeImports:l,runtimeGlobalName:o,runtimeModuleName:c,ssrRuntimeModuleName:f,ssr:a,isTS:u,inSSR:d,source:e.loc.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(T){return`_${on[T]}`},push(T,I){m.code+=T},indent(){E(++m.indentLevel)},deindent(T=!1){T?--m.indentLevel:E(--m.indentLevel)},newline(){E(m.indentLevel)}};function E(T){m.push(` +`+" ".repeat(T))}return m}function Id(e,t={}){const n=Ad(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:s,push:r,prefixIdentifiers:i,indent:l,deindent:o,newline:c,scopeId:f,ssr:a}=n,u=e.helpers.length>0,d=!i&&s!=="module";Md(e,n);const E=a?"ssrRender":"render",I=(a?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ");if(r(`function ${E}(${I}) {`),l(),d&&(r("with (_ctx) {"),l(),u&&(r(`const { ${e.helpers.map(Gc).join(", ")} } = _Vue`),r(` +`),c())),e.components.length&&(mr(e.components,"component",n),(e.directives.length||e.temps>0)&&c()),e.directives.length&&(mr(e.directives,"directive",n),e.temps>0&&c()),e.filters&&e.filters.length&&(c(),mr(e.filters,"filter",n),c()),e.temps>0){r("let ");for(let y=0;y<e.temps;y++)r(`${y>0?", ":""}_temp${y}`)}return(e.components.length||e.directives.length||e.temps)&&(r(` +`),c()),a||r("return "),e.codegenNode?ve(e.codegenNode,n):r("null"),d&&(o(),r("}")),o(),r("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function Md(e,t){const{ssr:n,prefixIdentifiers:s,push:r,newline:i,runtimeModuleName:l,runtimeGlobalName:o,ssrRuntimeModuleName:c}=t,f=o;if(e.helpers.length>0&&(r(`const _Vue = ${f} +`),e.hoists.length)){const a=[Ni,Oi,qn,Pi,Dc].filter(u=>e.helpers.includes(u)).map(Gc).join(", ");r(`const { ${a} } = _Vue +`)}Rd(e.hoists,t),i(),r("return ")}function mr(e,t,{helper:n,push:s,newline:r,isTS:i}){const l=n(t==="filter"?Mi:t==="component"?Ai:Ii);for(let o=0;o<e.length;o++){let c=e[o];const f=c.endsWith("__self");f&&(c=c.slice(0,-6)),s(`const ${Bn(c,t)} = ${l}(${JSON.stringify(c)}${f?", true":""})${i?"!":""}`),o<e.length-1&&r()}}function Rd(e,t){if(!e.length)return;t.pure=!0;const{push:n,newline:s,helper:r,scopeId:i,mode:l}=t;s();for(let o=0;o<e.length;o++){const c=e[o];c&&(n(`const _hoisted_${o+1} = `),ve(c,t),s())}t.pure=!1}function Ki(e,t){const n=e.length>3||!1;t.push("["),n&&t.indent(),Yn(e,t,n),n&&t.deindent(),t.push("]")}function Yn(e,t,n=!1,s=!0){const{push:r,newline:i}=t;for(let l=0;l<e.length;l++){const o=e[l];J(o)?r(o):j(o)?Ki(o,t):ve(o,t),l<e.length-1&&(n?(s&&r(","),i()):s&&r(", "))}}function ve(e,t){if(J(e)){t.push(e);return}if(mt(e)){t.push(t.helper(e));return}switch(e.type){case 1:case 9:case 11:ve(e.codegenNode,t);break;case 2:kd(e,t);break;case 4:ef(e,t);break;case 5:Fd(e,t);break;case 12:ve(e.codegenNode,t);break;case 8:tf(e,t);break;case 3:Bd(e,t);break;case 13:$d(e,t);break;case 14:Hd(e,t);break;case 15:Vd(e,t);break;case 17:jd(e,t);break;case 18:Kd(e,t);break;case 19:Ud(e,t);break;case 20:xd(e,t);break;case 21:Yn(e.body,t,!0,!1);break}}function kd(e,t){t.push(JSON.stringify(e.content),e)}function ef(e,t){const{content:n,isStatic:s}=e;t.push(s?JSON.stringify(n):n,e)}function Fd(e,t){const{push:n,helper:s,pure:r}=t;r&&n(rr),n(`${s(er)}(`),ve(e.content,t),n(")")}function tf(e,t){for(let n=0;n<e.children.length;n++){const s=e.children[n];J(s)?t.push(s):ve(s,t)}}function Ld(e,t){const{push:n}=t;if(e.type===8)n("["),tf(e,t),n("]");else if(e.isStatic){const s=Hi(e.content)?e.content:JSON.stringify(e.content);n(s,e)}else n(`[${e.content}]`,e)}function Bd(e,t){const{push:n,helper:s,pure:r}=t;r&&n(rr),n(`${s(qn)}(${JSON.stringify(e.content)})`,e)}function $d(e,t){const{push:n,helper:s,pure:r}=t,{tag:i,props:l,children:o,patchFlag:c,dynamicProps:f,directives:a,isBlock:u,disableTracking:d,isComponent:m}=e;a&&n(s(Ri)+"("),u&&n(`(${s(Vt)}(${d?"true":""}), `),r&&n(rr);const E=u?un(t.inSSR,m):fn(t.inSSR,m);n(s(E)+"(",e),Yn(Dd([i,l,o,c,f]),t),n(")"),u&&n(")"),a&&(n(", "),ve(a,t),n(")"))}function Dd(e){let t=e.length;for(;t--&&e[t]==null;);return e.slice(0,t+1).map(n=>n||"null")}function Hd(e,t){const{push:n,helper:s,pure:r}=t,i=J(e.callee)?e.callee:s(e.callee);r&&n(rr),n(i+"(",e),Yn(e.arguments,t),n(")")}function Vd(e,t){const{push:n,indent:s,deindent:r,newline:i}=t,{properties:l}=e;if(!l.length){n("{}",e);return}const o=l.length>1||!1;n(o?"{":"{ "),o&&s();for(let c=0;c<l.length;c++){const{key:f,value:a}=l[c];Ld(f,t),n(": "),ve(a,t),c<l.length-1&&(n(","),i())}o&&r(),n(o?"}":" }")}function jd(e,t){Ki(e.elements,t)}function Kd(e,t){const{push:n,indent:s,deindent:r}=t,{params:i,returns:l,body:o,newline:c,isSlot:f}=e;f&&n(`_${on[$i]}(`),n("(",e),j(i)?Yn(i,t):i&&ve(i,t),n(") => "),(c||o)&&(n("{"),s()),l?(c&&n("return "),j(l)?Ki(l,t):ve(l,t)):o&&ve(o,t),(c||o)&&(r(),n("}")),f&&(e.isNonScopedSlot&&n(", undefined, true"),n(")"))}function Ud(e,t){const{test:n,consequent:s,alternate:r,newline:i}=e,{push:l,indent:o,deindent:c,newline:f}=t;if(n.type===4){const u=!Hi(n.content);u&&l("("),ef(n,t),u&&l(")")}else l("("),ve(n,t),l(")");i&&o(),t.indentLevel++,i||l(" "),l("? "),ve(s,t),t.indentLevel--,i&&f(),i||l(" "),l(": ");const a=r.type===19;a||t.indentLevel++,ve(r,t),a||t.indentLevel--,i&&c(!0)}function xd(e,t){const{push:n,helper:s,indent:r,deindent:i,newline:l}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(r(),n(`${s(Os)}(-1),`),l()),n(`_cache[${e.index}] = `),ve(e.value,t),e.isVNode&&(n(","),l(),n(`${s(Os)}(1),`),l(),n(`_cache[${e.index}]`),i()),n(")")}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments,typeof,void".split(",").join("\\b|\\b")+"\\b");const Wd=Qc(/^(if|else|else-if)$/,(e,t,n)=>qd(e,t,n,(s,r,i)=>{const l=n.parent.children;let o=l.indexOf(s),c=0;for(;o-->=0;){const f=l[o];f&&f.type===9&&(c+=f.branches.length)}return()=>{if(i)s.codegenNode=Dl(r,c,n);else{const f=Jd(s.codegenNode);f.alternate=Dl(r,c+s.branches.length-1,n)}}}));function qd(e,t,n,s){if(t.name!=="else"&&(!t.exp||!t.exp.content.trim())){const r=t.exp?t.exp.loc:e.loc;n.onError(fe(28,t.loc)),t.exp=z("true",!1,r)}if(t.name==="if"){const r=$l(e,t),i={type:9,loc:e.loc,branches:[r]};if(n.replaceNode(i),s)return s(i,r,!0)}else{const r=n.parent.children;let i=r.indexOf(e);for(;i-->=-1;){const l=r[i];if(l&&l.type===3){n.removeNode(l);continue}if(l&&l.type===2&&!l.content.trim().length){n.removeNode(l);continue}if(l&&l.type===9){t.name==="else-if"&&l.branches[l.branches.length-1].condition===void 0&&n.onError(fe(30,e.loc)),n.removeNode();const o=$l(e,t);l.branches.push(o);const c=s&&s(l,o,!1);sr(o,n),c&&c(),n.currentNode=null}else n.onError(fe(30,e.loc));break}}}function $l(e,t){const n=e.tagType===3;return{type:10,loc:e.loc,condition:t.name==="else"?void 0:t.exp,children:n&&!He(e,"for")?e.children:[e],userKey:tr(e,"key"),isTemplateIf:n}}function Dl(e,t,n){return e.condition?Dr(e.condition,Hl(e,t,n),pe(n.helper(qn),['""',"true"])):Hl(e,t,n)}function Hl(e,t,n){const{helper:s}=n,r=ue("key",z(`${t}`,!1,$e,2)),{children:i}=e,l=i[0];if(i.length!==1||l.type!==1)if(i.length===1&&l.type===11){const c=l.codegenNode;return Rs(c,r,n),c}else{let c=64;return Ln(n,s(kn),Ve([r]),i,c+"",void 0,void 0,!0,!1,!1,e.loc)}else{const c=l.codegenNode,f=fd(c);return f.type===13&&Vi(f,n),Rs(f,r,n),c}}function Jd(e){for(;;)if(e.type===19)if(e.alternate.type===19)e=e.alternate;else return e;else e.type===20&&(e=e.value)}const zd=Qc("for",(e,t,n)=>{const{helper:s,removeHelper:r}=n;return Yd(e,t,n,i=>{const l=pe(s(ki),[i.source]),o=Is(e),c=He(e,"memo"),f=tr(e,"key"),a=f&&(f.type===6?z(f.value.content,!0):f.exp),u=f?ue("key",a):null,d=i.source.type===4&&i.source.constType>0,m=d?64:f?128:256;return i.codegenNode=Ln(n,s(kn),void 0,l,m+"",void 0,void 0,!0,!d,!1,e.loc),()=>{let E;const{children:T}=i,I=T.length!==1||T[0].type!==1,y=Ms(e)?e:o&&e.children.length===1&&Ms(e.children[0])?e.children[0]:null;if(y?(E=y.codegenNode,o&&u&&Rs(E,u,n)):I?E=Ln(n,s(kn),u?Ve([u]):void 0,e.children,64+"",void 0,void 0,!0,void 0,!1):(E=T[0].codegenNode,o&&u&&Rs(E,u,n),E.isBlock!==!d&&(E.isBlock?(r(Vt),r(un(n.inSSR,E.isComponent))):r(fn(n.inSSR,E.isComponent))),E.isBlock=!d,E.isBlock?(s(Vt),s(un(n.inSSR,E.isComponent))):s(fn(n.inSSR,E.isComponent))),c){const h=cn(jr(i.parseResult,[z("_cached")]));h.body=ed([qe(["const _memo = (",c.exp,")"]),qe(["if (_cached",...a?[" && _cached.key === ",a]:[],` && ${n.helperString(jc)}(_cached, _memo)) return _cached`]),qe(["const _item = ",E]),z("_item.memo = _memo"),z("return _item")]),l.arguments.push(h,z("_cache"),z(String(n.cached++)))}else l.arguments.push(cn(jr(i.parseResult),E,!0))}})});function Yd(e,t,n,s){if(!t.exp){n.onError(fe(31,t.loc));return}const r=nf(t.exp);if(!r){n.onError(fe(32,t.loc));return}const{addIdentifiers:i,removeIdentifiers:l,scopes:o}=n,{source:c,value:f,key:a,index:u}=r,d={type:11,loc:t.loc,source:c,valueAlias:f,keyAlias:a,objectIndexAlias:u,parseResult:r,children:Is(e)?e.children:[e]};n.replaceNode(d),o.vFor++;const m=s&&s(d);return()=>{o.vFor--,m&&m()}}const Zd=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Vl=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Xd=/^\(|\)$/g;function nf(e,t){const n=e.loc,s=e.content,r=s.match(Zd);if(!r)return;const[,i,l]=r,o={source:fs(n,l.trim(),s.indexOf(l,i.length)),value:void 0,key:void 0,index:void 0};let c=i.trim().replace(Xd,"").trim();const f=i.indexOf(c),a=c.match(Vl);if(a){c=c.replace(Vl,"").trim();const u=a[1].trim();let d;if(u&&(d=s.indexOf(u,f+c.length),o.key=fs(n,u,d)),a[2]){const m=a[2].trim();m&&(o.index=fs(n,m,s.indexOf(m,o.key?d+u.length:f+c.length)))}}return c&&(o.value=fs(n,c,f)),o}function fs(e,t,n){return z(t,!1,xc(e,n,t.length))}function jr({value:e,key:t,index:n},s=[]){return Qd([e,t,n,...s])}function Qd(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map((n,s)=>n||z("_".repeat(s+1),!1))}const jl=z("undefined",!1),Gd=(e,t)=>{if(e.type===1&&(e.tagType===1||e.tagType===3)){const n=He(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},eh=(e,t,n)=>cn(e,t,!1,!0,t.length?t[0].loc:n);function th(e,t,n=eh){t.helper($i);const{children:s,loc:r}=e,i=[],l=[];let o=t.scopes.vSlot>0||t.scopes.vFor>0;const c=He(e,"slot",!0);if(c){const{arg:I,exp:y}=c;I&&!Pe(I)&&(o=!0),i.push(ue(I||z("default",!0),n(y,s,r)))}let f=!1,a=!1;const u=[],d=new Set;let m=0;for(let I=0;I<s.length;I++){const y=s[I];let h;if(!Is(y)||!(h=He(y,"slot",!0))){y.type!==3&&u.push(y);continue}if(c){t.onError(fe(37,h.loc));break}f=!0;const{children:b,loc:w}=y,{arg:A=z("default",!0),exp:H,loc:O}=h;let _;Pe(A)?_=A?A.content:"default":o=!0;const R=n(H,b,w);let F,M,P;if(F=He(y,"if"))o=!0,l.push(Dr(F.exp,us(A,R,m++),jl));else if(M=He(y,/^else(-if)?$/,!0)){let V=I,B;for(;V--&&(B=s[V],B.type===3););if(B&&Is(B)&&He(B,"if")){s.splice(I,1),I--;let ee=l[l.length-1];for(;ee.alternate.type===19;)ee=ee.alternate;ee.alternate=M.exp?Dr(M.exp,us(A,R,m++),jl):us(A,R,m++)}else t.onError(fe(30,M.loc))}else if(P=He(y,"for")){o=!0;const V=P.parseResult||nf(P.exp);V?l.push(pe(t.helper(ki),[V.source,cn(jr(V),us(A,R),!0)])):t.onError(fe(32,P.loc))}else{if(_){if(d.has(_)){t.onError(fe(38,O));continue}d.add(_),_==="default"&&(a=!0)}i.push(ue(A,R))}}if(!c){const I=(y,h)=>{const b=n(y,h,r);return t.compatConfig&&(b.isNonScopedSlot=!0),ue("default",b)};f?u.length&&u.some(y=>sf(y))&&(a?t.onError(fe(39,u[0].loc)):i.push(I(void 0,u))):i.push(I(void 0,s))}const E=o?2:ys(e.children)?3:1;let T=Ve(i.concat(ue("_",z(E+"",!1))),r);return l.length&&(T=pe(t.helper(Vc),[T,zn(l)])),{slots:T,hasDynamicSlots:o}}function us(e,t,n){const s=[ue("name",e),ue("fn",t)];return n!=null&&s.push(ue("key",z(String(n),!0))),Ve(s)}function ys(e){for(let t=0;t<e.length;t++){const n=e[t];switch(n.type){case 1:if(n.tagType===2||ys(n.children))return!0;break;case 9:if(ys(n.branches))return!0;break;case 10:case 11:if(ys(n.children))return!0;break}}return!1}function sf(e){return e.type!==2&&e.type!==12?!0:e.type===2?!!e.content.trim():sf(e.content)}const rf=new WeakMap,nh=(e,t)=>function(){if(e=t.currentNode,!(e.type===1&&(e.tagType===0||e.tagType===1)))return;const{tag:s,props:r}=e,i=e.tagType===1;let l=i?sh(e,t):`"${s}"`;const o=ie(l)&&l.callee===ws;let c,f,a,u=0,d,m,E,T=o||l===wn||l===wi||!i&&(s==="svg"||s==="foreignObject");if(r.length>0){const I=lf(e,t,void 0,i,o);c=I.props,u=I.patchFlag,m=I.dynamicPropNames;const y=I.directives;E=y&&y.length?zn(y.map(h=>ih(h,t))):void 0,I.shouldUseBlock&&(T=!0)}if(e.children.length>0)if(l===Ss&&(T=!0,u|=1024),i&&l!==wn&&l!==Ss){const{slots:y,hasDynamicSlots:h}=th(e,t);f=y,h&&(u|=1024)}else if(e.children.length===1&&l!==wn){const y=e.children[0],h=y.type,b=h===5||h===8;b&&je(y,t)===0&&(u|=1),b||h===2?f=y:f=e.children}else f=e.children;u!==0&&(a=String(u),m&&m.length&&(d=lh(m))),e.codegenNode=Ln(t,l,c,f,a,d,E,!!T,!1,i,e.loc)};function sh(e,t,n=!1){let{tag:s}=e;const r=Kr(s),i=tr(e,"is");if(i)if(r||Lt("COMPILER_IS_ON_ELEMENT",t)){const c=i.type===6?i.value&&z(i.value.content,!0):i.exp;if(c)return pe(t.helper(ws),[c])}else i.type===6&&i.value.content.startsWith("vue:")&&(s=i.value.content.slice(4));const l=!r&&He(e,"is");if(l&&l.exp)return pe(t.helper(ws),[l.exp]);const o=Kc(s)||t.isBuiltInComponent(s);return o?(n||t.helper(o),o):(t.helper(Ai),t.components.add(s),Bn(s,"component"))}function lf(e,t,n=e.props,s,r,i=!1){const{tag:l,loc:o,children:c}=e;let f=[];const a=[],u=[],d=c.length>0;let m=!1,E=0,T=!1,I=!1,y=!1,h=!1,b=!1,w=!1;const A=[],H=R=>{f.length&&(a.push(Ve(Kl(f),o)),f=[]),R&&a.push(R)},O=({key:R,value:F})=>{if(Pe(R)){const M=R.content,P=jt(M);if(P&&(!s||r)&&M.toLowerCase()!=="onclick"&&M!=="onUpdate:modelValue"&&!It(M)&&(h=!0),P&&It(M)&&(w=!0),F.type===20||(F.type===4||F.type===8)&&je(F,t)>0)return;M==="ref"?T=!0:M==="class"?I=!0:M==="style"?y=!0:M!=="key"&&!A.includes(M)&&A.push(M),s&&(M==="class"||M==="style")&&!A.includes(M)&&A.push(M)}else b=!0};for(let R=0;R<n.length;R++){const F=n[R];if(F.type===6){const{loc:M,name:P,value:V}=F;let B=!0;if(P==="ref"&&(T=!0,t.scopes.vFor>0&&f.push(ue(z("ref_for",!0),z("true")))),P==="is"&&(Kr(l)||V&&V.content.startsWith("vue:")||Lt("COMPILER_IS_ON_ELEMENT",t)))continue;f.push(ue(z(P,!0,xc(M,0,P.length)),z(V?V.content:"",B,V?V.loc:M)))}else{const{name:M,arg:P,exp:V,loc:B}=F,ee=M==="bind",Z=M==="on";if(M==="slot"){s||t.onError(fe(40,B));continue}if(M==="once"||M==="memo"||M==="is"||ee&&At(P,"is")&&(Kr(l)||Lt("COMPILER_IS_ON_ELEMENT",t))||Z&&i)continue;if((ee&&At(P,"key")||Z&&d&&At(P,"vue:before-update"))&&(m=!0),ee&&At(P,"ref")&&t.scopes.vFor>0&&f.push(ue(z("ref_for",!0),z("true"))),!P&&(ee||Z)){if(b=!0,V)if(ee){if(H(),Lt("COMPILER_V_BIND_OBJECT_ORDER",t)){a.unshift(V);continue}a.push(V)}else H({type:14,loc:B,callee:t.helper(Bi),arguments:s?[V]:[V,"true"]});else t.onError(fe(ee?34:35,B));continue}const oe=t.directiveTransforms[M];if(oe){const{props:te,needRuntime:Ue}=oe(F,e,t);!i&&te.forEach(O),Z&&P&&!Pe(P)?H(Ve(te,o)):f.push(...te),Ue&&(u.push(F),mt(Ue)&&rf.set(F,Ue))}else Vf(M)||(u.push(F),d&&(m=!0))}}let _;if(a.length?(H(),a.length>1?_=pe(t.helper(Ns),a,o):_=a[0]):f.length&&(_=Ve(Kl(f),o)),b?E|=16:(I&&!s&&(E|=2),y&&!s&&(E|=4),A.length&&(E|=8),h&&(E|=32)),!m&&(E===0||E===32)&&(T||w||u.length>0)&&(E|=512),!t.inSSR&&_)switch(_.type){case 15:let R=-1,F=-1,M=!1;for(let B=0;B<_.properties.length;B++){const ee=_.properties[B].key;Pe(ee)?ee.content==="class"?R=B:ee.content==="style"&&(F=B):ee.isHandlerKey||(M=!0)}const P=_.properties[R],V=_.properties[F];M?_=pe(t.helper(Fn),[_]):(P&&!Pe(P.value)&&(P.value=pe(t.helper(Fi),[P.value])),V&&(y||V.value.type===4&&V.value.content.trim()[0]==="["||V.value.type===17)&&(V.value=pe(t.helper(Li),[V.value])));break;case 14:break;default:_=pe(t.helper(Fn),[pe(t.helper(Jn),[_])]);break}return{props:_,directives:u,patchFlag:E,dynamicPropNames:A,shouldUseBlock:m}}function Kl(e){const t=new Map,n=[];for(let s=0;s<e.length;s++){const r=e[s];if(r.key.type===8||!r.key.isStatic){n.push(r);continue}const i=r.key.content,l=t.get(i);l?(i==="style"||i==="class"||jt(i))&&rh(l,r):(t.set(i,r),n.push(r))}return n}function rh(e,t){e.value.type===17?e.value.elements.push(t.value):e.value=zn([e.value,t.value],e.loc)}function ih(e,t){const n=[],s=rf.get(e);s?n.push(t.helperString(s)):(t.helper(Ii),t.directives.add(e.name),n.push(Bn(e.name,"directive")));const{loc:r}=e;if(e.exp&&n.push(e.exp),e.arg&&(e.exp||n.push("void 0"),n.push(e.arg)),Object.keys(e.modifiers).length){e.arg||(e.exp||n.push("void 0"),n.push("void 0"));const i=z("true",!1,r);n.push(Ve(e.modifiers.map(l=>ue(l,i)),r))}return zn(n,e.loc)}function lh(e){let t="[";for(let n=0,s=e.length;n<s;n++)t+=JSON.stringify(e[n]),n<s-1&&(t+=", ");return t+"]"}function Kr(e){return e==="component"||e==="Component"}const oh=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ch=/-(\w)/g,Ul=oh(e=>e.replace(ch,(t,n)=>n?n.toUpperCase():"")),fh=(e,t)=>{if(Ms(e)){const{children:n,loc:s}=e,{slotName:r,slotProps:i}=uh(e,t),l=[t.prefixIdentifiers?"_ctx.$slots":"$slots",r,"{}","undefined","true"];let o=2;i&&(l[2]=i,o=3),n.length&&(l[3]=cn([],n,!1,!1,s),o=4),t.scopeId&&!t.slotted&&(o=5),l.splice(o),e.codegenNode=pe(t.helper(Hc),l,s)}};function uh(e,t){let n='"default"',s;const r=[];for(let i=0;i<e.props.length;i++){const l=e.props[i];l.type===6?l.value&&(l.name==="name"?n=JSON.stringify(l.value.content):(l.name=Ul(l.name),r.push(l))):l.name==="bind"&&At(l.arg,"name")?l.exp&&(n=l.exp):(l.name==="bind"&&l.arg&&Pe(l.arg)&&(l.arg.content=Ul(l.arg.content)),r.push(l))}if(r.length>0){const{props:i,directives:l}=lf(e,t,r,!1,!1);s=i,l.length&&t.onError(fe(36,l[0].loc))}return{slotName:n,slotProps:s}}const ah=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,of=(e,t,n,s)=>{const{loc:r,modifiers:i,arg:l}=e;!e.exp&&!i.length&&n.onError(fe(35,r));let o;if(l.type===4)if(l.isStatic){let u=l.content;u.startsWith("vue:")&&(u=`vnode-${u.slice(4)}`);const d=t.tagType!==0||u.startsWith("vnode")||!/[A-Z]/.test(u)?Qt(be(u)):`on:${u}`;o=z(d,!0,l.loc)}else o=qe([`${n.helperString($r)}(`,l,")"]);else o=l,o.children.unshift(`${n.helperString($r)}(`),o.children.push(")");let c=e.exp;c&&!c.content.trim()&&(c=void 0);let f=n.cacheHandlers&&!c&&!n.inVOnce;if(c){const u=Uc(c.content),d=!(u||ah.test(c.content)),m=c.content.includes(";");(d||f&&u)&&(c=qe([`${d?"$event":"(...args)"} => ${m?"{":"("}`,c,m?"}":")"]))}let a={props:[ue(o,c||z("() => {}",!1,r))]};return s&&(a=s(a)),f&&(a.props[0].value=n.cache(a.props[0].value)),a.props.forEach(u=>u.key.isHandlerKey=!0),a},ph=(e,t,n)=>{const{exp:s,modifiers:r,loc:i}=e,l=e.arg;return l.type!==4?(l.children.unshift("("),l.children.push(') || ""')):l.isStatic||(l.content=`${l.content} || ""`),r.includes("camel")&&(l.type===4?l.isStatic?l.content=be(l.content):l.content=`${n.helperString(Br)}(${l.content})`:(l.children.unshift(`${n.helperString(Br)}(`),l.children.push(")"))),n.inSSR||(r.includes("prop")&&xl(l,"."),r.includes("attr")&&xl(l,"^")),!s||s.type===4&&!s.content.trim()?(n.onError(fe(34,i)),{props:[ue(l,z("",!0,i))]}):{props:[ue(l,s)]}},xl=(e,t)=>{e.type===4?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},dh=(e,t)=>{if(e.type===0||e.type===1||e.type===11||e.type===10)return()=>{const n=e.children;let s,r=!1;for(let i=0;i<n.length;i++){const l=n[i];if(gr(l)){r=!0;for(let o=i+1;o<n.length;o++){const c=n[o];if(gr(c))s||(s=n[i]=qe([l],l.loc)),s.children.push(" + ",c),n.splice(o,1),o--;else{s=void 0;break}}}}if(!(!r||n.length===1&&(e.type===0||e.type===1&&e.tagType===0&&!e.props.find(i=>i.type===7&&!t.directiveTransforms[i.name])&&e.tag!=="template")))for(let i=0;i<n.length;i++){const l=n[i];if(gr(l)||l.type===8){const o=[];(l.type!==2||l.content!==" ")&&o.push(l),!t.ssr&&je(l,t)===0&&o.push(1+""),n[i]={type:12,content:l,loc:l.loc,codegenNode:pe(t.helper(Pi),o)}}}}},Wl=new WeakSet,hh=(e,t)=>{if(e.type===1&&He(e,"once",!0))return Wl.has(e)||t.inVOnce?void 0:(Wl.add(e),t.inVOnce=!0,t.helper(Os),()=>{t.inVOnce=!1;const n=t.currentNode;n.codegenNode&&(n.codegenNode=t.cache(n.codegenNode,!0))})},cf=(e,t,n)=>{const{exp:s,arg:r}=e;if(!s)return n.onError(fe(41,e.loc)),as();const i=s.loc.source,l=s.type===4?s.content:i,o=n.bindingMetadata[i];if(o==="props"||o==="props-aliased")return n.onError(fe(44,s.loc)),as();const c=!1;if(!l.trim()||!Uc(l)&&!c)return n.onError(fe(42,s.loc)),as();const f=r||z("modelValue",!0),a=r?Pe(r)?`onUpdate:${r.content}`:qe(['"onUpdate:" + ',r]):"onUpdate:modelValue";let u;const d=n.isTS?"($event: any)":"$event";u=qe([`${d} => ((`,s,") = $event)"]);const m=[ue(f,e.exp),ue(a,u)];if(e.modifiers.length&&t.tagType===1){const E=e.modifiers.map(I=>(Hi(I)?I:JSON.stringify(I))+": true").join(", "),T=r?Pe(r)?`${r.content}Modifiers`:qe([r,' + "Modifiers"']):"modelModifiers";m.push(ue(T,z(`{ ${E} }`,!1,e.loc,2)))}return as(m)};function as(e=[]){return{props:e}}const gh=/[\w).+\-_$\]]/,mh=(e,t)=>{Lt("COMPILER_FILTER",t)&&(e.type===5&&ks(e.content,t),e.type===1&&e.props.forEach(n=>{n.type===7&&n.name!=="for"&&n.exp&&ks(n.exp,t)}))};function ks(e,t){if(e.type===4)ql(e,t);else for(let n=0;n<e.children.length;n++){const s=e.children[n];typeof s=="object"&&(s.type===4?ql(s,t):s.type===8?ks(e,t):s.type===5&&ks(s.content,t))}}function ql(e,t){const n=e.content;let s=!1,r=!1,i=!1,l=!1,o=0,c=0,f=0,a=0,u,d,m,E,T=[];for(m=0;m<n.length;m++)if(d=u,u=n.charCodeAt(m),s)u===39&&d!==92&&(s=!1);else if(r)u===34&&d!==92&&(r=!1);else if(i)u===96&&d!==92&&(i=!1);else if(l)u===47&&d!==92&&(l=!1);else if(u===124&&n.charCodeAt(m+1)!==124&&n.charCodeAt(m-1)!==124&&!o&&!c&&!f)E===void 0?(a=m+1,E=n.slice(0,m).trim()):I();else{switch(u){case 34:r=!0;break;case 39:s=!0;break;case 96:i=!0;break;case 40:f++;break;case 41:f--;break;case 91:c++;break;case 93:c--;break;case 123:o++;break;case 125:o--;break}if(u===47){let y=m-1,h;for(;y>=0&&(h=n.charAt(y),h===" ");y--);(!h||!gh.test(h))&&(l=!0)}}E===void 0?E=n.slice(0,m).trim():a!==0&&I();function I(){T.push(n.slice(a,m).trim()),a=m+1}if(T.length){for(m=0;m<T.length;m++)E=yh(E,T[m],t);e.content=E}}function yh(e,t,n){n.helper(Mi);const s=t.indexOf("(");if(s<0)return n.filters.add(t),`${Bn(t,"filter")}(${e})`;{const r=t.slice(0,s),i=t.slice(s+1);return n.filters.add(r),`${Bn(r,"filter")}(${e}${i!==")"?","+i:i}`}}const Jl=new WeakSet,_h=(e,t)=>{if(e.type===1){const n=He(e,"memo");return!n||Jl.has(e)?void 0:(Jl.add(e),()=>{const s=e.codegenNode||t.currentNode.codegenNode;s&&s.type===13&&(e.tagType!==1&&Vi(s,t),e.codegenNode=pe(t.helper(Di),[n.exp,cn(void 0,s),"_cache",String(t.cached++)]))})}};function bh(e){return[[hh,Wd,_h,zd,mh,fh,nh,Gd,dh],{on:of,bind:ph,model:cf}]}function Eh(e,t={}){const n=t.onError||Si,s=t.mode==="module";t.prefixIdentifiers===!0?n(fe(47)):s&&n(fe(48));const r=!1;t.cacheHandlers&&n(fe(49)),t.scopeId&&!s&&n(fe(50));const i=J(e)?pd(e,t):e,[l,o]=bh();return Nd(i,G({},t,{prefixIdentifiers:r,nodeTransforms:[...l,...t.nodeTransforms||[]],directiveTransforms:G({},o,t.directiveTransforms||{})})),Id(i,G({},t,{prefixIdentifiers:r}))}const Ch=()=>({props:[]}),ff=Symbol(""),uf=Symbol(""),af=Symbol(""),pf=Symbol(""),Ur=Symbol(""),df=Symbol(""),hf=Symbol(""),gf=Symbol(""),mf=Symbol(""),yf=Symbol("");Xp({[ff]:"vModelRadio",[uf]:"vModelCheckbox",[af]:"vModelText",[pf]:"vModelSelect",[Ur]:"vModelDynamic",[df]:"withModifiers",[hf]:"withKeys",[gf]:"vShow",[mf]:"Transition",[yf]:"TransitionGroup"});let Jt;function Th(e,t=!1){return Jt||(Jt=document.createElement("div")),t?(Jt.innerHTML=`<div foo="${e.replace(/"/g,""")}">`,Jt.children[0].getAttribute("foo")):(Jt.innerHTML=e,Jt.textContent)}const vh=Ae("style,iframe,script,noscript",!0),Sh={isVoidTag:Rf,isNativeTag:e=>If(e)||Mf(e),isPreTag:e=>e==="pre",decodeEntities:Th,isBuiltInComponent:e=>{if(Yt(e,"Transition"))return mf;if(Yt(e,"TransitionGroup"))return yf},getNamespace(e,t){let n=t?t.ns:0;if(t&&n===2)if(t.tag==="annotation-xml"){if(e==="svg")return 1;t.props.some(s=>s.type===6&&s.name==="encoding"&&s.value!=null&&(s.value.content==="text/html"||s.value.content==="application/xhtml+xml"))&&(n=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&e!=="mglyph"&&e!=="malignmark"&&(n=0);else t&&n===1&&(t.tag==="foreignObject"||t.tag==="desc"||t.tag==="title")&&(n=0);if(n===0){if(e==="svg")return 1;if(e==="math")return 2}return n},getTextMode({tag:e,ns:t}){if(t===0){if(e==="textarea"||e==="title")return 1;if(vh(e))return 2}return 0}},wh=e=>{e.type===1&&e.props.forEach((t,n)=>{t.type===6&&t.name==="style"&&t.value&&(e.props[n]={type:7,name:"bind",arg:z("style",!0,t.loc),exp:Nh(t.value.content,t.loc),modifiers:[],loc:t.loc})})},Nh=(e,t)=>{const n=Zl(e);return z(JSON.stringify(n),!1,t,3)};function rt(e,t){return fe(e,t)}const Oh=(e,t,n)=>{const{exp:s,loc:r}=e;return s||n.onError(rt(51,r)),t.children.length&&(n.onError(rt(52,r)),t.children.length=0),{props:[ue(z("innerHTML",!0,r),s||z("",!0))]}},Ph=(e,t,n)=>{const{exp:s,loc:r}=e;return s||n.onError(rt(53,r)),t.children.length&&(n.onError(rt(54,r)),t.children.length=0),{props:[ue(z("textContent",!0),s?je(s,n)>0?s:pe(n.helperString(er),[s],r):z("",!0))]}},Ah=(e,t,n)=>{const s=cf(e,t,n);if(!s.props.length||t.tagType===1)return s;e.arg&&n.onError(rt(56,e.arg.loc));const{tag:r}=t,i=n.isCustomElement(r);if(r==="input"||r==="textarea"||r==="select"||i){let l=af,o=!1;if(r==="input"||i){const c=tr(t,"type");if(c){if(c.type===7)l=Ur;else if(c.value)switch(c.value.content){case"radio":l=ff;break;case"checkbox":l=uf;break;case"file":o=!0,n.onError(rt(57,e.loc));break}}else ld(t)&&(l=Ur)}else r==="select"&&(l=pf);o||(s.needRuntime=n.helper(l))}else n.onError(rt(55,e.loc));return s.props=s.props.filter(l=>!(l.key.type===4&&l.key.content==="modelValue")),s},Ih=Ae("passive,once,capture"),Mh=Ae("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),Rh=Ae("left,right"),_f=Ae("onkeyup,onkeydown,onkeypress",!0),kh=(e,t,n,s)=>{const r=[],i=[],l=[];for(let o=0;o<t.length;o++){const c=t[o];c==="native"&&$n("COMPILER_V_ON_NATIVE",n)||Ih(c)?l.push(c):Rh(c)?Pe(e)?_f(e.content)?r.push(c):i.push(c):(r.push(c),i.push(c)):Mh(c)?i.push(c):r.push(c)}return{keyModifiers:r,nonKeyModifiers:i,eventOptionModifiers:l}},zl=(e,t)=>Pe(e)&&e.content.toLowerCase()==="onclick"?z(t,!0):e.type!==4?qe(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,Fh=(e,t,n)=>of(e,t,n,s=>{const{modifiers:r}=e;if(!r.length)return s;let{key:i,value:l}=s.props[0];const{keyModifiers:o,nonKeyModifiers:c,eventOptionModifiers:f}=kh(i,r,n,e.loc);if(c.includes("right")&&(i=zl(i,"onContextmenu")),c.includes("middle")&&(i=zl(i,"onMouseup")),c.length&&(l=pe(n.helper(df),[l,JSON.stringify(c)])),o.length&&(!Pe(i)||_f(i.content))&&(l=pe(n.helper(hf),[l,JSON.stringify(o)])),f.length){const a=f.map(Ut).join("");i=Pe(i)?z(`${i.content}${a}`,!0):qe(["(",i,`) + "${a}"`])}return{props:[ue(i,l)]}}),Lh=(e,t,n)=>{const{exp:s,loc:r}=e;return s||n.onError(rt(59,r)),{props:[],needRuntime:n.helper(gf)}},Bh=(e,t)=>{e.type===1&&e.tagType===0&&(e.tag==="script"||e.tag==="style")&&(t.onError(rt(61,e.loc)),t.removeNode())},$h=[wh],Dh={cloak:Ch,html:Oh,text:Ph,model:Ah,on:Fh,show:Lh};function Hh(e,t={}){return Eh(e,G({},Sh,t,{nodeTransforms:[Bh,...$h,...t.nodeTransforms||[]],directiveTransforms:G({},Dh,t.directiveTransforms||{}),transformHoist:null}))}const Yl=Object.create(null);function Vh(e,t){if(!J(e))if(e.nodeType)e=e.innerHTML;else return we;const n=e,s=Yl[n];if(s)return s;if(e[0]==="#"){const o=document.querySelector(e);e=o?o.innerHTML:""}const r=G({hoistStatic:!0,onError:void 0,onWarn:we},t);!r.isCustomElement&&typeof customElements<"u"&&(r.isCustomElement=o=>!!customElements.get(o));const{code:i}=Hh(e,r),l=new Function("Vue",i)(Wp);return l._rc=!0,Yl[n]=l}oc(Vh);export{ye as F,_i as a,bi as b,ka as c,ua as d,$a as e,Dp as f,ce as g,yi as h,li as i,oa as j,Hu as k,Kp as l,Vn as n,Zs as o,Du as p,pa as r,Bf as t,Ti as v,ia as w}; diff --git a/public/dist/manifest.json b/public/dist/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..d150a0a39927bbb53595be54071c764866ef9bff --- /dev/null +++ b/public/dist/manifest.json @@ -0,0 +1,20 @@ +{ + "main.css": { + "file": "assets/main-cd791875.css", + "src": "main.css" + }, + "main.js": { + "file": "assets/main-fe799c87.js", + "src": "main.js", + "isEntry": true, + "imports": [ + "_vendor-f378f3a9.js" + ], + "css": [ + "assets/main-cd791875.css" + ] + }, + "_vendor-f378f3a9.js": { + "file": "assets/vendor-f378f3a9.js" + } +} \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index f643a5d8011262850b37e85a5bf3b76aae0b88df..a9fe6bb735e4f265d71d388b7a0d775a41f3c193 100755 --- a/public/js/app.js +++ b/public/js/app.js @@ -1,20 +1,20 @@ $(function () { WidgetInitializer.add('intervenant-recherche', 'intervenantRecherche', function () { - WidgetInitializer.includeJs(Url('js/intervenant-recherche.js')); + WidgetInitializer.includeJs(Util.url('js/intervenant-recherche.js')); }); WidgetInitializer.add('jstree', 'jstree', function () { - WidgetInitializer.includeJs(Url('vendor/vakata-jstree-3.3.8/dist/jstree.min.js')); - WidgetInitializer.includeCss(Url('vendor/vakata-jstree-3.3.8/dist/themes/default/style.min.css')); + WidgetInitializer.includeJs(Util.url('vendor/vakata-jstree-3.3.8/dist/jstree.min.js')); + WidgetInitializer.includeCss(Util.url('vendor/vakata-jstree-3.3.8/dist/themes/default/style.min.css')); }); WidgetInitializer.add('table-sort', 'tableSort', function () { - WidgetInitializer.includeJs(Url('vendor/DataTables-1.12.1/js/jquery.dataTables.min.js')); - WidgetInitializer.includeJs(Url('vendor/DataTables-1.12.1/js/dataTables.bootstrap5.min.js')); - WidgetInitializer.includeJs(Url('table-sort/widget.js')); + WidgetInitializer.includeJs(Util.url('vendor/DataTables-1.12.1/js/jquery.dataTables.min.js')); + WidgetInitializer.includeJs(Util.url('vendor/DataTables-1.12.1/js/dataTables.bootstrap5.min.js')); + WidgetInitializer.includeJs(Util.url('js/table-sort.js')); (function () { @@ -60,54 +60,52 @@ $(function () /* Service référentiel */ WidgetInitializer.add('referentiels', 'referentiels', function () { - WidgetInitializer.includeJs(Url('js/service-referentiel.js')); + WidgetInitializer.includeJs(Util.url('js/service-referentiel.js')); }); WidgetInitializer.add('service-referentiel-form', 'serviceReferentielForm', function () { - WidgetInitializer.includeJs(Url('js/service-referentiel.js')); + WidgetInitializer.includeJs(Util.url('js/service-referentiel.js')); }); /* Offre de formation */ WidgetInitializer.add('element-pedagogique-recherche', 'elementPedagogiqueRecherche', function () { - WidgetInitializer.includeJs(Url('js/offre-formation.js')); + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); }); WidgetInitializer.add('etape-centre-cout', 'etapeCentreCout', function () { - WidgetInitializer.includeJs(Url('js/offre-formation.js')); + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); + }); + WidgetInitializer.add('etape-taux-remu', 'etapeTauxRemu', function () { + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); }); WidgetInitializer.add('etape-taux-mixite', 'etapeTauxMixite', function () { - WidgetInitializer.includeJs(Url('js/offre-formation.js')); + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); }); WidgetInitializer.add('etape-modulateurs', 'etapeModulateurs', function () { - WidgetInitializer.includeJs(Url('js/offre-formation.js')); + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); }); WidgetInitializer.add('etape-saisie', 'etapeSaisie', function () { - WidgetInitializer.includeJs(Url('js/offre-formation.js')); + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); }); WidgetInitializer.add('element-pedagogique-saisie', 'elementPedagogiqueSaisie', function () { - WidgetInitializer.includeJs(Url('js/offre-formation.js')); + WidgetInitializer.includeJs(Util.url('js/offre-formation.js')); }); /* Charges d'enseignement */ WidgetInitializer.add('chargens', 'chargens', function () { - WidgetInitializer.includeJs(Url('vendor/go.js')); - // WidgetInitializer.includeJs(Url('js/chargens.js')); + WidgetInitializer.includeJs(Util.url('vendor/go.js')); + // WidgetInitializer.includeJs(Util.url('js/chargens.js')); }); WidgetInitializer.add('chargens-filtre', 'chargensFiltre', function () { - // WidgetInitializer.includeJs(Url('js/chargens.js')); + // WidgetInitializer.includeJs(Util.url('js/chargens.js')); }); /* Droits */ WidgetInitializer.add('droits-tbl', 'droitsTbl', function () { - WidgetInitializer.includeJs(Url('js/droits.js')); + WidgetInitializer.includeJs(Util.url('js/droits.js')); }); WidgetInitializer.add('affectation-form', 'affectationForm', function () { - WidgetInitializer.includeJs(Url('js/droits.js')); - }); - - /* DateTime Picker */ - WidgetInitializer.add('bootstrap-datetimepicker', 'bootstrapDatetimepicker', function () { - WidgetInitializer.includeJs(Url('vendor/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js')); + WidgetInitializer.includeJs(Util.url('js/droits.js')); }); // installation de tooltip Bootstrap sur les icônes d'information (i) @@ -116,198 +114,46 @@ $(function () // Bootstrap Select insensible aux accents $('.selectpicker').data('liveSearchNormalize', true); $('.selectpicker').data('size', 'auto'); -}); - -$(document).ajaxSuccess(function () { - // correction d'un bug de bootstrap-select à la MAJ AJAX d'une page - $('.selectpicker').selectpicker('render'); - -}); - -$(document).ajaxError(function (event, request, settings) { - if (!(typeof settings.error === 'function')) { - alertFlash(request.responseText, 'error', 3000); - } - -}); - -function Url(route, data) -{ - var getArgs = data ? $.param(data) : null; - return Url.getBase() + route + (getArgs ? '?' + getArgs : ''); -} -Url.getBase = function () -{ - return $('body').data('base-url'); -} -Util = { - formattedHeures: function (heures, html) - { - heures = parseFloat(heures); + $(document).ajaxSuccess((event, xhr, settings) => { + if (xhr.responseJSON && xhr.responseJSON.messages && xhr.responseJSON.data) { + let messages = xhr.responseJSON.messages; + xhr.responseJSON = xhr.responseJSON.data; - if (false === html) { - var snd0 = ',00'; - var sn = ''; - var snf = ''; - } else { - var snd0 = '<span class="number-dec-00">,00</span>'; - var sn = '<span class="number number-' + ((heures < 0) ? 'negatif' : 'positif') + '">'; - var snf = '</span>'; + Util.alerts(messages); } - heures = Math.round(heures * 100) / 100; - var parts = heures.toString().split("."); - if (undefined === parts[1]) { - parts[1] = snd0; - } else { - parts[1] = ',' + parts[1]; - } - return sn + parts[0] + parts[1] + snf; - }, - - json: { - - count: function (tab) - { - var key, result = 0; - for (key in tab) { - if (tab.hasOwnProperty(key)) { - result++; - } - } - return result; - }, - - first: function (tab) - { - for (var key in tab) { - return tab[key]; - } - } - - }, - - changementAnnee: function (annee) - { - $.get( - Url('changement-annee/' + annee), - {}, - function () - { - //Préférable pour éviter de re-soumettre des posts lors d'un changement d'année - window.location = window.location.href; - //window.location.reload(); - } - ); - }, - - filterSelectPicker: function (select, values) - { - var ul = select.parent().find('ul'); - var shown = 0; - var lastShown = null; - - select.find('option').each(function () - { - if (values === 'all' || Util.inArray(this.value, values) || this.value == '') { - $(this).show(); - shown++; - lastShown = this.value; - } else { - if (select.val() == this.value) { - select.selectpicker('val', ''); - } - $(this).hide(); - } - }); - - select.selectpicker('destroy'); - select.selectpicker(); - if (1 == shown) { - select.selectpicker('val', lastShown); - } - }, + // correction d'un bug de bootstrap-select à la MAJ AJAX d'une page + $('.selectpicker').selectpicker('render'); + }); - inArray: function (needle, haystack, strict) - { - for (var i in haystack) { - if (strict) { - if (haystack[i] === needle) return true; - } else { - if (haystack[i] == needle) return true; - } + $(document).ajaxError((event, xhr, settings) => { + if (!(typeof settings.error === 'function')) { + Util.alert(xhr.responseText, 'error'); } - return false; - }, - - fractions: { - 0.333333: '1/3', - 0.166667: '1/6', - 0.142857: '1/7', - 0.111111: '1/9', - 0.666667: '2/3', - 0.285714: '2/7', - 0.222222: '2/9', - 0.428571: '3/7', - 1.333333: '4/3', - 0.571429: '4/7', - 0.444444: '4/9', - 1.666667: '5/3', - 0.833333: '5/6', - 0.714286: '5/7', - 0.555556: '5/9', - 0.857143: '6/7', - 2.333333: '7/3', - 1.166667: '7/6', - 0.777778: '7/9', - 2.666667: '8/3', - 1.142857: '8/7', - 0.888889: '8/9', - 1.285714: '9/7', - }, + }); /** + * Rafraichit un élément en fonction d'une url donnée. + * Se base sur l'attribut data-url de l'élément + * Si l'attribut data-url n'est pas renseigné alors il ne se passe rien * - * @param float value - * - * @return string + * @param array|FormElement|null data (json) à transmettre + * @param function onEnd Fonction de callback à passer, si besoin. S'exécute une fois le rafraichissement terminé + * @returns Element */ - floatToString: function (value) + $.fn.refresh = function (data, onEnd) { - var test = Math.round(value * 1000000) / 1000000; - if (undefined !== this.fractions[test]) { - return this.fractions[test]; + var that = $(this); + var url = this.data('url'); + if (data instanceof jQuery) { + data = data.serialize(); } - var locale = 'fr'; - var options = {minimumFractionDigits: 0, maximumFractionDigits: 2, useGrouping: false}; - var formatter = new Intl.NumberFormat(locale, options); - - return formatter.format(value); - }, - - stringToFloat: function (value) - { - if (null === value || '' === value || undefined === value) return null; - - if (value.indexOf('/') !== -1) { - value = value.split('/'); - value = Util.stringToFloat(value[0]) / Util.stringToFloat(value[1]); - } else { - value = parseFloat(value.replace(',', '.')); - } - - return value; - }, - - nl2br: function (str, is_xhtml) - { - if (typeof str === 'undefined' || str === null) { - return ''; + if ("" !== url && undefined !== url) { + that.load(url, data, onEnd); } - var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>'; - return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2'); + return that; } -}; \ No newline at end of file +}); \ No newline at end of file diff --git a/public/js/chargens.js b/public/js/chargens.js index 502915f15b5f721a75d06a841b19667c4e57f647..c9f24be14d873658af2580badbb8d47005c6db22 100755 --- a/public/js/chargens.js +++ b/public/js/chargens.js @@ -698,17 +698,17 @@ $.widget("ose.chargens", { success: function (data) { if (data.erreur) { - alertFlash(data.erreur, 'error', 5000); + Util.alert(data.erreur, 'error'); } else if (data.noeuds) { that.chargerDonnees(p.etape, p.scenario, data); } else { - alertFlash(data, 'error', 15000); + Util.alert(data, 'error'); } }, error: function (jqXHR) { - alertFlash(jqXHR.responseText, 'error', 5000); + Util.alert(jqXHR.responseText, 'error'); console.log(jqXHR); } }); diff --git a/public/js/datepicker-fr.js b/public/js/datepicker-fr.js deleted file mode 100755 index 6b6e0b35fc76f40d900dd45fef476bd1a7df1c6c..0000000000000000000000000000000000000000 --- a/public/js/datepicker-fr.js +++ /dev/null @@ -1,39 +0,0 @@ -/* French initialisation for the jQuery UI date picker plugin. */ -/* Written by Keith Wood (kbwood{at}iinet.com.au), - Stéphane Nahmani (sholby@sholby.net), - Stéphane Raimbault <stephane.raimbault@gmail.com> */ -(function( factory ) { - if ( typeof define === "function" && define.amd ) { - - // AMD. Register as an anonymous module. - define([ "../datepicker" ], factory ); - } else { - - // Browser globals - factory( jQuery.datepicker ); - } -}(function( datepicker ) { - -datepicker.regional['fr'] = { - closeText: 'Fermer', - prevText: 'Précédent', - nextText: 'Suivant', - currentText: 'Aujourd\'hui', - monthNames: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', - 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'], - monthNamesShort: ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', - 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'], - dayNames: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'], - dayNamesShort: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'], - dayNamesMin: ['D','L','M','M','J','V','S'], - weekHeader: 'Sem.', - dateFormat: 'dd/mm/yy', - firstDay: 1, - isRTL: false, - showMonthAfterYear: false, - yearSuffix: ''}; -datepicker.setDefaults(datepicker.regional['fr']); - -return datepicker.regional['fr']; - -})); diff --git a/public/js/droits.js b/public/js/droits.js index 5b3abf61208763fcd19736f2ac5e8e90ab6bec84..c88c672eac6645098a98d5948ff0c320ee03200e 100755 --- a/public/js/droits.js +++ b/public/js/droits.js @@ -10,7 +10,7 @@ $.widget("ose.droitsTbl", { { var that = this; td.html("<div class=\"loading\"> </div>"); - td.load(Url('droits/privileges/modifier'), { + td.load(Util.url('droits/privileges/modifier'), { role: td.data("role"), privilege: td.data("privilege"), action: action diff --git a/public/js/intranavigator.js b/public/js/intranavigator.js index f3c22edb0e339223788f35cbec716180942ade41..9e057e6fae78542dc247613512a7593f5ca9e579 100644 --- a/public/js/intranavigator.js +++ b/public/js/intranavigator.js @@ -35,6 +35,8 @@ IntraNavigator = { if (typeof element === 'string') { element = $('<div>' + element + '</div>'); + } else { + element = $('<div></div>'); } var extractedTitle = element.find('.title,.modal-title,.popover-title,.page-header'); diff --git a/public/js/mod-ajax.js b/public/js/mod-ajax.js index e74b5629e43f929c486b47f9df6cd3d7a026269d..308b4223290ddfaea63149cc370da28d77a35210 100644 --- a/public/js/mod-ajax.js +++ b/public/js/mod-ajax.js @@ -263,7 +263,12 @@ $.widget("unicaen.modAjax", { this._trigger('error', null, this); } else { if (this.options.submitEvent) { - $("body").trigger(this.options.submitEvent, this); + if (this.options.submitEvent instanceof Function) { + this.options.submitEvent(this); + this.hide(); + } else { + $("body").trigger(this.options.submitEvent, this); + } } if (this.options.submitClose) { this.hide(); @@ -348,4 +353,21 @@ $.widget("unicaen.modAjax", { $(function () { WidgetInitializer.add('mod-ajax', 'modAjax'); -}); \ No newline at end of file +}); + + +function modAjax(element, onSubmit) +{ + var widget = $(element).data('unicaenModAjax'); + + if (!widget) { + $(element).modAjax(); + widget = $(element).data('unicaenModAjax'); + if (onSubmit) { + widget.options.submitEvent = onSubmit; + } + widget.show(); + } + + return widget; +} \ No newline at end of file diff --git a/public/js/offre-formation.js b/public/js/offre-formation.js index cc9fb29e568670fb286a69197125cc815dcb2da5..a46506cee69ea5eb2fb226853a3221577b5be5ff 100755 --- a/public/js/offre-formation.js +++ b/public/js/offre-formation.js @@ -202,7 +202,47 @@ $.widget("ose.etapeCentreCout", { }); +/** + * etapeTauxRemu + */ +$.widget("ose.etapeTauxRemu", { + + _create: function () + { + var that = this; + + this.element.find("button.form-set-value").click(function (e) + { + console.log("test"); + + var value = that.getElementEtapeSelect('tauxRemu').val(); + that.setFormValues('tauxRemu', value); + e.stopPropagation(); + }); + }, + + setFormValues: function (type, value) + { + this.getElementElementSelects(type).each(function () + { + var canSetValue = value == "" || $(this).find("option[value=" + value + "]").length > 0; + if (canSetValue) { + $(this).selectpicker('val', value); + } + }); + }, + getElementEtapeSelect: function (type) + { + return this.element.find('select[name="' + type + '"]'); + }, + + getElementElementSelects: function (type) + { + return this.element.find('select[name$="\\[' + type + '\\]"]'); + } + +}); /** @@ -291,14 +331,25 @@ $.widget("ose.etapeModulateurs", { */ $.widget("ose.etapeSaisie", { + updateQueryStringParameter: function (uri, key, value) + { + var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); + var separator = uri.indexOf('?') !== -1 ? "&" : "?"; + if (uri.match(re)) { + return uri.replace(re, '$1' + key + "=" + value + '$2'); + } else { + return uri + separator + key + "=" + value; + } + }, + onAjouter: function (event) { - window.location = updateQueryStringParameter(window.location.href, "etape", this.getId()); + window.location = this.updateQueryStringParameter(window.location.href, "etape", this.getId()); }, onModifier: function (event) { - window.location = updateQueryStringParameter(window.location.href, "etape", this.getId()); + window.location = this.updateQueryStringParameter(window.location.href, "etape", this.getId()); }, getId: function () diff --git a/public/js/paiement.js b/public/js/paiement.js index 4a9a137b38ebf21a15cf93c893d05dc42cf22b74..a269f673b451910064051f8bbd73047402c1f77f 100755 --- a/public/js/paiement.js +++ b/public/js/paiement.js @@ -294,8 +294,8 @@ function MiseEnPaiementListe(demandeMiseEnPaiement, element) this.element.append(this.renderMiseEnPaiement(id)); - WidgetInitializer.includeJs(Url('vendor/bootstrap-select-1.14.0/dist/js/bootstrap-select.min.js')); - WidgetInitializer.includeCss(Url('vendor/bootstrap-select-1.14.0/dist/css/bootstrap-select.min.css')); + WidgetInitializer.includeJs(Util.url('vendor/bootstrap-select-1.14.0/dist/js/bootstrap-select.min.js')); + WidgetInitializer.includeCss(Util.url('vendor/bootstrap-select-1.14.0/dist/css/bootstrap-select.min.css')); $('.selectpicker').selectpicker(); if (isNew) { @@ -850,7 +850,9 @@ $.widget("ose.paiementMiseEnPaiementForm", { _create: function () { var that = this; - this.getPeriodeElement().change(function () { that.onPeriodeChange() }); + this.getPeriodeElement().change(function () { + that.onPeriodeChange() + }); }, @@ -895,7 +897,9 @@ $.widget("ose.dmepBudget", { this.updateBlocageDepassement(); - setTimeout(function () { that.update() }, 5000); + setTimeout(function () { + that.update() + }, 5000); }, @@ -931,7 +935,9 @@ $.widget("ose.dmepBudget", { that.updateBlocageDepassement(); }); - setTimeout(function () { that.update() }, 5000); + setTimeout(function () { + that.update() + }, 5000); }, diff --git a/public/js/pop-ajax.js b/public/js/pop-ajax.js index a3ab30be5efb3b382773d306576df097e66fb38e..8872206d5c0d98264fccc1676e8f9f2a46e9d9b6 100644 --- a/public/js/pop-ajax.js +++ b/public/js/pop-ajax.js @@ -218,7 +218,12 @@ $.widget("unicaen.popAjax", { this._trigger('error', null, this); } else { if (this.options.submitEvent) { - $("body").trigger(this.options.submitEvent, this); + if (this.options.submitEvent instanceof Function) { + this.options.submitEvent(this); + this.hide(); + } else { + $("body").trigger(this.options.submitEvent, this); + } } if (this.options.submitClose) { this.hide(); @@ -261,7 +266,7 @@ $.widget("unicaen.popAjax", { var p = popEl[0].getBoundingClientRect(); var horsZonePop = e.clientX < p.left || e.clientX > p.left + p.width || e.clientY < p.top || e.clientY > p.top + p.height; - var horsElementFils = $(e.target).parents('.popover-content,.ui-autocomplete').length == 0; + var horsElementFils = $(e.target).parents('.popover-content,.popover-body,.ui-autocomplete').length == 0; if ($(e.target).hasClass('pop-ajax-hide')) { this.hide(); @@ -290,4 +295,75 @@ $.widget("unicaen.popAjax", { $(function () { WidgetInitializer.add('pop-ajax', 'popAjax'); -}); \ No newline at end of file +}); + + +function popConfirm(element, options) +{ + var popConfirm = bootstrap.Popover.getInstance(element); + if (!popConfirm) { + if (typeof options == 'function') { + options = { + confirm: options + }; + } + + if (!options) { + options = {}; + } + if (!options.title) { + options.title = $(element).data('title'); + } + if (!options.title) { + options.title = "Demande de confirmation"; + } + + if (!options.content) { + options.content = $(element).data('content'); + } + if (!options.content) { + options.content = "Confirmez-vous cette action ?"; + } + + if (!options.confirm) { + options.confirm = function () {}; + } + if (!options.url) { + options.url = element.href; + } + + if (element.nodeName == 'A') { + goFunc = function () { + axios.get(options.url).then(response => { + options.confirm(response, element); + }); + }; + } else { + goFunc = function () { + options.confirm(element); + } + } + + let popoptions = { + html: true, + sanitize: false, + trigger: "focus", + title: options.title, + content: options.content + '<div class="btn-goup" style="text-align:right;padding-top: 10px" role="group"><button class="btn btn-secondary" id="nogo">Non</button><button class="btn btn-primary" id="go">Oui</button></div>', + }; + popConfirm = new bootstrap.Popover(element, popoptions); + element.addEventListener('shown.bs.popover', (eventShown) => { + let popDivId = $(eventShown.target).attr('aria-describedby'); + $("#" + popDivId).find("button#go").click(() => { + popConfirm.hide(); + goFunc(); + }); + + $("#" + popDivId).find("button#nogo").click(() => { + popConfirm.hide(); + }); + }); + } + + popConfirm.show(); +} \ No newline at end of file diff --git a/public/js/reconduction-offre.js b/public/js/reconduction-offre.js index 998d8a0d9f3d1af36a7a1c2b03e5da922a1f9f01..8fa3edbffd18ce4a1dd0c8e34c982aff59a8e0da 100755 --- a/public/js/reconduction-offre.js +++ b/public/js/reconduction-offre.js @@ -2,7 +2,6 @@ $("document").ready(function () { $("body").on("click", "#confirm-reconduction", function () { - $("#form-reconduction").submit(); }); diff --git a/public/js/service-referentiel.js b/public/js/service-referentiel.js index 254bcf83396688857dec2ebb57cd4e04a1290622..ebdd4d44ea5eca5b9115b959626cf72b4745dba7 100755 --- a/public/js/service-referentiel.js +++ b/public/js/service-referentiel.js @@ -4,14 +4,11 @@ $.widget("ose.referentiels", { total: 0, - - calculTotaux: function () - { + calculTotaux: function () { var that = this; this.total = 0; - this.element.find("table.service-referentiel td.sr-heures").each(function () - { + this.element.find("table.service-referentiel td.sr-heures").each(function () { var value = $(this).data('value'); that.total += value; }); @@ -21,30 +18,22 @@ $.widget("ose.referentiels", { }, - - hasHeures: function () - { + hasHeures: function () { return this.total > 0; }, - - getHeures: function (serviceId) - { + getHeures: function (serviceId) { return this.element.find("#referentiel-" + serviceId + "-ligne td.sr-heures").data('value'); }, - - getHeuresPrevues: function (serviceId) - { + getHeuresPrevues: function (serviceId) { return this.element.find("tr#referentiel-" + serviceId + "-ligne td.sr-heures").data('prevues'); }, - - onAfterChange: function () - { + onAfterChange: function () { var exHasHeures = this.hasHeures(); var exHeures = this.total; @@ -63,36 +52,42 @@ $.widget("ose.referentiels", { }, - - onAfterSaisie: function (serviceId) - { + onAfterSaisie: function (serviceId) { var that = this; if (that.element.find("#referentiel-" + serviceId + "-ligne").length) { // simple modification that.element.find("#referentiel-" + serviceId + "-ligne").refresh({ details: $('#referentiel-' + serviceId + '-volume-horaire-tr').css('display') == 'none' ? '0' : '1', params: that.params - }, function () - { + }, function () { that.onAfterChange(); + //Si total heure realisées sur la ligne égal à 0 alors on supprime la ligne + heures = that.getHeures(serviceId); + if (heures == 0) { + $('tr#referentiel-' + serviceId + '-ligne').remove(); + } }); that.element.find("#referentiel-" + serviceId + "-volume-horaire-td").refresh(); } else { // nouveau service - var url = Url("referentiel/rafraichir-ligne/" + serviceId, { + var url = Util.url("referentiel/rafraichir-ligne/:service", {service: serviceId}, { 'only-content': 0, 'details': 1, params: that.params }); - $.get(url, function (data) - { + $.get(url, function (data) { + //Si total heure realisées sur la ligne égal à 0 alors on supprime la ligne + heures = that.getHeures(serviceId); + if (heures == 0) { + $('tr#referentiel-' + serviceId + '-ligne').remove(); + } that.element.find("table.service-referentiel > tbody:last").append(data); that.onAfterChange(); }); } + }, - onAfterDelete: function (serviceId) - { + onAfterDelete: function (serviceId) { if (this.params['in-realise'] && this.getHeuresPrevues(serviceId) > 0) { // si on est dans le réalisé alors les lignes apparaissent toujours, même si les heures réalisées ont été supprimées this.onAfterSaisie(serviceId); } else { @@ -102,29 +97,35 @@ $.widget("ose.referentiels", { } }, - setRealisesFromPrevus: function () - { + setRealisesFromPrevus: function () { var services = ''; - this.element.find("table.service-referentiel tr.referentiel-ligne").each(function () - { + var that = this; + + this.element.find("table.service-referentiel tr.referentiel-ligne").each(function () { if (services != '') services += ','; services += $(this).data('id'); }); $.get( - Url("referentiel/constatation"), + Util.url("referentiel/constatation"), {services: services}, - function () { window.location.reload(); } - ); + function (data) { + if (data != 'OK') { + that.element.find("#referentiel-prevu-to-realise-modal").modal('hide'); + that.element.find("#referentiel-prevu-to-realise-modal").after('<div style="margin-top:.5em">' + data + '</div>'); + } else { + window.location.reload(); + } + } + ) + ; }, - setPrevusFromPrevus: function () - { + setPrevusFromPrevus: function () { var that = this; $.get( - Url("referentiel/initialisation/" + this.getElementPrevuToPrevu().data('intervenant')), + Util.url("referentiel/initialisation/" + this.getElementPrevuToPrevu().data('intervenant')), {}, - function (data) - { + function (data) { if (data != 'OK') { that.element.find("#referentiel-prevu-to-prevu-modal").modal('hide'); that.element.find("#referentiel-prevu-to-prevu-modal").after('<div style="margin-top:.5em">' + data + '</div>'); @@ -135,33 +136,45 @@ $.widget("ose.referentiels", { ); }, - _create: function () - { + _create: function () { var that = this; - this.params = this.element.data('params'); - this.element.find(".referentiel-prevu-to-realise").on('click', function () { that.setRealisesFromPrevus(); }); - this.getElementPrevuToPrevu().on('click', function () { that.setPrevusFromPrevus(); }); - $("body").on("service-referentiel-modify-message", function (event, data) - { + this.element.find(".referentiel-prevu-to-realise").on('click', function () { + that.setRealisesFromPrevus(); + }); + this.getElementPrevuToPrevu().on('click', function () { + that.setPrevusFromPrevus(); + }); + + $("body").on("service-referentiel-modify-message", function (event, data) { + var serviceId = null; if ($("div .messenger, div .alert", event.div).length ? false : true) { event.div.modal('hide'); // ferme la fenêtre modale } + for (i in data) { if (data[i].name == 'service[id]') { serviceId = data[i].value; } + if (data[i].name == 'service[idPrev]') { + serviceIdPrev = data[i].value; + if (serviceId != serviceIdPrev) { + that.onAfterSaisie(serviceIdPrev); + + } + } } + if (serviceId) { + heuresPrev = $("heures-realises-" + serviceId + " span").html(); that.onAfterSaisie(serviceId); } }); - $("body").on("service-referentiel-add-message", function (event, data) - { + $("body").on("service-referentiel-add-message", function (event, data) { if ($("div .messenger, div .alert", event.div).length ? false : true) { event.div.modal('hide'); // ferme la fenêtre modale } @@ -175,14 +188,8 @@ $.widget("ose.referentiels", { } }); - $("body").tooltip({ - selector: 'a.volume-horaire', - placement: 'top', - title: "Cliquez pour ouvrir/fermer le formulaire de modification..." - }); - $("body").on('save-volume-horaire-referentiel', function (event, data) - { + $("body").on('save-volume-horaire-referentiel', function (event, data) { var serviceId = event.a.data('service'); event.a.popover('hide'); that.onAfterSaisie(serviceId); @@ -191,13 +198,11 @@ $.widget("ose.referentiels", { this.init(); }, - init: function () - { + init: function () { var that = this; this.element.find('.referentiel-delete').popAjax({ - submit: function (event, popAjax) - { + submit: function (event, popAjax) { if (!popAjax.hasErrors()) { var serviceId = popAjax.element.parents('tr.referentiel-ligne').data('id'); popAjax.hide(); @@ -207,51 +212,46 @@ $.widget("ose.referentiels", { }); this.calculTotaux(); - }, - - getElementPrevuToPrevu: function () { return this.element.find(".referentiel-prevu-to-prevu") } -}); - - + } + , + getElementPrevuToPrevu: function () { + return this.element.find(".referentiel-prevu-to-prevu") + } +}) +; $.widget("ose.serviceReferentielForm", { - prevuToRealise: function () - { + prevuToRealise: function () { this.element.find("input.fonction-referentiel-heures", this.element).val( Util.formattedHeures(this.element.find("#rappel-heures-prevu", this.element).data('heures'), false) ); }, - - _create: function () - { + _create: function () { var that = this; - this.element.find("button.referentiel-prevu-to-realise", this.element).on('click', function () - { + this.element.find("button.referentiel-prevu-to-realise", this.element).on('click', function () { that.prevuToRealise(); }); - this.element.find('select.fonction-referentiel-fonction').change(function () { that.majDisplay(); }); + this.element.find('select.fonction-referentiel-fonction').change(function () { + that.majDisplay(); + }); that.majDisplay(); }, - - majDisplay: function () - { + majDisplay: function () { this.majDisplayStructure(); this.majDisplayFormation(); }, - - majDisplayFormation: function () - { + majDisplayFormation: function () { var currentFonction = this.element.find('select.fonction-referentiel-fonction').val(); var aPreciser = this.element.data('fonctions')['etape-requise']; var divFormation = this.getDivFormationElement(); @@ -266,9 +266,7 @@ $.widget("ose.serviceReferentielForm", { }, - - majDisplayStructure: function () - { + majDisplayStructure: function () { var currentFonction = this.element.find('select.fonction-referentiel-fonction').val(); var structures = this.element.data('fonctions')['structures']; @@ -279,20 +277,17 @@ $.widget("ose.serviceReferentielForm", { this.getStructureElement().val(structure); $('option:not(:selected)', this.getStructureElement()).attr('disabled', true); } - this.getStructureElement().selectpicker('refresh'); + this.getStructureElement().selectpicker('destroy'); + this.getStructureElement().selectpicker(); }, - - getDivFormationElement: function () - { + getDivFormationElement: function () { return this.element.find('.fonction-referentiel-formation').parent(); }, - - getStructureElement: function () - { + getStructureElement: function () { return this.element.find('select.fonction-referentiel-structure'); } diff --git a/public/js/service.js b/public/js/service.js index 14b5f628ca27155523975976c491db5605f7b7cd..6296c4ccfe557dc7dc12d4ca39e83f55cb4fff2b 100755 --- a/public/js/service.js +++ b/public/js/service.js @@ -11,17 +11,18 @@ $.widget("ose.enseignements", { for (var i in this.totaux) { if (this.totaux[i] != 0) { count++; - this.element.find("table.service tr th." + i).show(); // entête - this.element.find("table.service tr.service-ligne td.type-intervention." + i).show(); - this.element.find("table.service tfoot tr td." + i).show(); // total + this.element.find("table.service tr th.ti" + i).show(); // entête + this.element.find("table.service tr.service-ligne td.type-intervention.ti" + i).show(); + this.element.find("table.service tfoot tr td.ti" + i).show(); // total } else { - this.element.find("table.service tr th." + i).hide(); // entête - this.element.find("table.service tr.service-ligne td.type-intervention." + i).hide(); - this.element.find("table.service tfoot tr td." + i).hide(); // total + this.element.find("table.service tr th.ti" + i).hide(); // entête + this.element.find("table.service tr.service-ligne td.type-intervention.ti" + i).hide(); + this.element.find("table.service tfoot tr td.ti" + i).hide(); // total } } this.element.find("table.service #total-general").attr('colspan', count); if (count == 0) { + this.element.find("table.service tr th.type-intervention").hide(); // entête this.element.find("table.service tfoot").hide(); } else { this.element.find("table.service tfoot").show(); @@ -35,18 +36,18 @@ $.widget("ose.enseignements", { this.total = 0; this.element.find("table.service tr.service-ligne td.type-intervention").each(function () { - var typeInterventionCode = $(this).data('type-intervention-code'); + var typeInterventionId = $(this).data('type-intervention-id'); var value = $(this).data('value'); - if (that.totaux[typeInterventionCode] == undefined) that.totaux[typeInterventionCode] = 0; + if (that.totaux[typeInterventionId] == undefined) that.totaux[typeInterventionId] = 0; - that.totaux[typeInterventionCode] += value; + that.totaux[typeInterventionId] += value; that.total += value; }); // on met à jour aussi les entêtes et les totaux for (var ti in this.totaux) { var heures = this.totaux[ti]; - this.element.find("table.service tfoot tr td." + ti).html(Util.formattedHeures(heures)); + this.element.find("table.service tfoot tr td.ti" + ti).html(Util.formattedHeures(heures)); } this.element.find("table.service #total-general").html(Util.formattedHeures(this.total)); }, @@ -108,8 +109,7 @@ $.widget("ose.enseignements", { if (this.heures != exHeures) { this._trigger('heures-change', null, this); } - console.log(this.element.find(".horodatage")); - console.log(this.element.find(".horodatage2")); + this.element.find(".horodatage").each(function () { $(this).refresh(); @@ -123,7 +123,6 @@ $.widget("ose.enseignements", { onAfterSaisie: function (serviceId) { var that = this; - console.log('onAfterSaisie'); if (that.element.find("#service-" + serviceId + "-ligne").length) { // simple modification that.element.find("#service-" + serviceId + "-ligne").refresh({ details: that.element.find('#service-' + serviceId + '-volume-horaire-tr').css('display') == 'none' ? '0' : '1', @@ -133,12 +132,11 @@ $.widget("ose.enseignements", { }); that.element.find("#service-" + serviceId + "-volume-horaire-td div#vhl").refresh(); } else { // nouveau service - var url = Url("enseignement/rafraichir-ligne/" + serviceId, { + var url = Util.url("enseignement/rafraichir-ligne/:service", {service: serviceId}, { 'only-content': 0, 'details': 1, params: that.params }); - console.log('nouveau'); $.get(url, function (data) { that.element.find("table:first > tbody:last").append(data); that.onAfterChange(); @@ -166,7 +164,7 @@ $.widget("ose.enseignements", { services += $(this).data('id'); }); $.get( - Url("enseignement/constatation"), + Util.url("enseignement/constatation"), {services: services}, function (data) { if (data != 'OK') { @@ -184,7 +182,7 @@ $.widget("ose.enseignements", { var that = this; that.element.find('#prevu-to-prevu-attente').show(); $.get( - Url("enseignement/initialisation/" + this.getElementPrevuToPrevu().data('intervenant')), + Util.url("enseignement/initialisation/:intervenant", {intervenant: this.getElementPrevuToPrevu().data('intervenant')}), {}, function (data) { if (data != 'OK') { @@ -290,11 +288,11 @@ $.widget("ose.enseignements", { }); - $("body").tooltip({ - selector: 'a.volume-horaire', - placement: 'top', - title: "Cliquez pour ouvrir/fermer le formulaire de modification..." - }); + /* this.element.find('a.volume-horaire').tooltip({ + selector: 'a.volume-horaire', + placement: 'top', + title: "Cliquez pour ouvrir/fermer le formulaire de modification..." + });*/ $("body").on('save-volume-horaire', function (event, popAjax) { var serviceId = popAjax.element.data('service'); diff --git a/public/table-sort/widget.js b/public/js/table-sort.js similarity index 100% rename from public/table-sort/widget.js rename to public/js/table-sort.js diff --git a/public/js/util.js b/public/js/util.js index 1d0715641c787485063d73722fa3609890a202e2..007523e5170acabcc9a1218cef997d7d4d673158 100644 --- a/public/js/util.js +++ b/public/js/util.js @@ -1,54 +1,66 @@ -/** - * Définition d'une nouvelle fonction jQuery permettant de sérializer un formulaire - * ou des éléments de formulaire au format tableau compatible JSON. - * Même utilisation que "serializeArray()". - */ -(function ($) -{ - /** - * Rafraichit un élément en fonction d'une url donnée. - * Se base sur l'attribut data-url de l'élément - * Si l'attribut data-url n'est pas renseigné alors il ne se passe rien - * - * @param array|FormElement|null data (json) à transmettre - * @param function onEnd Fonction de callback à passer, si besoin. S'exécute une fois le rafraichissement terminé - * @returns Element - */ - $.fn.refresh = function (data, onEnd) - { - var that = $(this); - var url = this.data('url'); - if (data instanceof jQuery) { - data = data.serialize(); +/* Tunning d'Axios pour gérer l'interconnexion avec le serveur avec gestion des alertes */ +axios.interceptors.request.use(config => { + if (config.submitter) { + let msg = config.msg ? config.msg : 'Action en cours'; + if (config.popover != undefined) { + config.popover.dispose(); } - if ("" !== url && undefined !== url) { - that.load(url, data, onEnd); - } - return that; + config.popover = new bootstrap.Popover(config.submitter, { + content: "<div class=\"spinner-border text-primary\" role=\"status\">\n" + + " <span class=\"visually-hidden\">Loading...</span>\n" + + "</div> " + msg, + html: true, + trigger: 'focus' + }); + config.popover.show(); } + return config; +}); -})(jQuery); +axios.interceptors.response.use(response => { + response.messages = response.data.messages; + response.data = response.data.data; + response.hasErrors = response.messages && response.messages.error && response.messages.error.length > 0 ? true : false; + if (response.config.popover) { + var popover = response.config.popover; + let content = ''; + for (ns in response.messages) { + for (mid in response.messages[ns]) { + content += '<div class="alert fade show alert-' + (ns == 'error' ? 'danger' : ns) + '" role="alert">' + response.messages[ns][mid] + '</div>'; + } + } -/** - * Ajoute/remplace un paramètre GET à une URL. - * - * @param String uri - * @param String key - * @param String value - * @returns String - */ -function updateQueryStringParameter(uri, key, value) -{ - var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); - var separator = uri.indexOf('?') !== -1 ? "&" : "?"; - if (uri.match(re)) { - return uri.replace(re, '$1' + key + "=" + value + '$2'); - } else { - return uri + separator + key + "=" + value; + // S'il y a un truc à afficher + if (content) { + popover._config.content = content; + popover.setContent(); + setTimeout(() => { + popover.dispose(); + }, 3000) + } else { + // la popover est masquée si tout est fini + popover.dispose(); + } } -} + if (response.messages) { + Util.alerts(response.messages); + } + + return response; +}, (error) => { + var text = $("<div>").html(error.response.data); + + text.find('i.fas').hide(); + + Util.alert(text.find('.alert').html(), 'error'); +}); + +axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + + + /** * Affiche une alerte temporaire. @@ -57,46 +69,12 @@ function updateQueryStringParameter(uri, key, value) * @param string severity 'info', 'success', 'warning' ou 'error' * @param int duration Durée d'affichage de l'alerte en ms * @returns void + * + * @deprecated */ function alertFlash(message, severity, duration) { - var alertClasses = { - info: 'info', - success: 'success', - warning: 'warning', - error: 'danger' - }; - var iconClasses = { - info: 'info-sign', - success: 'ok-sign', - warning: 'warning-sign', - error: 'exclamation-sign' - }; - var alertClass = 'alert-' + alertClasses[severity]; - var divId = "alert-div-" + Math.floor((Math.random() * 100000) + 1); - - var alertDiv = $( - '<div id="' + divId + '" class="alert fade in navbar-fixed-bottom" role="alert" style="display: none;">' + - ' <div class="container">' + - ' <p class="text-center"><span class="icon glyphicon"></span> <span class="message"></span></p>' + - ' </div>' + - '</div>' - ).appendTo("body"); - - alertDiv.addClass(alertClass); - $("p .message", alertDiv).html(message); - $("p .icon", alertDiv).addClass('glyphicon-' + iconClasses[severity]); - - alertDiv.slideToggle(500, function () - { - window.setTimeout(function () - { - alertDiv.slideToggle(500, function () - { - $(this).removeClass(alertClass) - }); - }, duration); - }); + Util.alert(message, severity); } /** @@ -172,3 +150,294 @@ Formatter = { } }; + + + + +Util = { + + alerts: function (messages) + { + for (s in messages) { + for (m in messages[s]) { + Util.alert(messages[s][m], s); + } + } + }, + + + + alert: function (message, severity) + { + var alertClasses = { + info: 'info', + success: 'success', + warning: 'warning', + error: 'danger' + }; + var iconClasses = { + info: 'info-circle', + success: 'check-circle', + warning: 'exclamation-circle', + error: 'exclamation-triangle' + }; + var alertClass = 'alert-' + alertClasses[severity]; + var divId = "alert-div-" + Math.floor((Math.random() * 100000) + 1); + + var alertDiv = $( + '<div id="' + divId + '" class="alert navbar-fixed-bottom" role="alert" style="display: none">' + + ' <button type="button" class="btn-close float-md-end" data-bs-dismiss="alert" aria-label="Close"></button>' + + ' <div class="container">' + + ' <p class="text-center"><span class="icon fas fa-' + iconClasses[severity] + '"></span> <span class="message"></span></p>' + + ' </div>' + + '</div>' + ); + + + + alertDiv.addClass(alertClass); + $("p .message", alertDiv).html(message); + + $('body').append(alertDiv); + alertDiv.slideToggle(500, function () + { + if ('error' != severity) { + window.setTimeout(function () + { + alertDiv.slideToggle(500, function () + { + $(this).removeClass(alertClass) + }); + }, 3000); + } + }); + }, + + + + url: function (route, params, query) + { + let baseUrl = $('body').data('base-url'); + + // Remplacement des paramètres de routes par leurs valeurs + if (params) { + for (var p in params) { + route = route.replace(':' + p, params[p]); + } + } + + // traitement de la requête GET + let getArgs = query ? $.param(query) : null; + + // Construction et retour de l'URL + return baseUrl + route + (getArgs ? '?' + getArgs : ''); + }, + + + + formattedHeures: function (heures, html) + { + heures = parseFloat(heures); + + if (false === html) { + var snd0 = ',00'; + var sn = ''; + var snf = ''; + } else { + var snd0 = '<span class="number-dec-00">,00</span>'; + var sn = '<span class="number number-' + ((heures < 0) ? 'negatif' : 'positif') + '">'; + var snf = '</span>'; + } + + heures = Math.round(heures * 100) / 100; + var parts = heures.toString().split("."); + if (undefined === parts[1]) { + parts[1] = snd0; + } else { + parts[1] = ',' + parts[1]; + } + return sn + parts[0] + parts[1] + snf; + }, + + + + json: { + + count: function (tab) + { + var key, result = 0; + for (key in tab) { + if (tab.hasOwnProperty(key)) { + result++; + } + } + return result; + }, + + first: function (tab) + { + for (var key in tab) { + return tab[key]; + } + }, + + indexById: function (tab, id) + { + for (var key in tab) { + if (tab[key].id && tab[key].id === id) { + return key; + } + } + return null; + } + + }, + + + + changementAnnee: function (annee) + { + $.get( + Util.url('changement-annee/:annee', {annee: annee}), + {}, + function () + { + //Préférable pour éviter de re-soumettre des posts lors d'un changement d'année + window.location = window.location.href; + //window.location.reload(); + } + ); + }, + + + + userProfileStructureChange: function (select) + { + var roleInput = $(select).parent().find('input.user-profile-select-input'); + if (!roleInput.attr("checked")) { + roleInput.attr("checked", "checked"); + } + var event = new Event('change', {bubbles: true}); + roleInput[0].dispatchEvent(event); + }, + + + + filterSelectPicker: function (select, values) + { + var ul = select.parent().find('ul'); + var shown = 0; + var lastShown = null; + + select.find('option').each(function () + { + if (values === 'all' || Util.inArray(this.value, values) || this.value == '') { + $(this).show(); + shown++; + lastShown = this.value; + } else { + if (select.val() == this.value) { + select.selectpicker('val', ''); + } + $(this).hide(); + } + }); + + select.selectpicker('destroy'); + select.selectpicker(); + if (1 == shown) { + select.selectpicker('val', lastShown); + } + }, + + + + inArray: function (needle, haystack, strict) + { + for (var i in haystack) { + if (strict) { + if (haystack[i] === needle) return true; + } else { + if (haystack[i] == needle) return true; + } + } + return false; + }, + + + + fractions: { + 0.333333: '1/3', + 0.166667: '1/6', + 0.142857: '1/7', + 0.111111: '1/9', + 0.666667: '2/3', + 0.285714: '2/7', + 0.222222: '2/9', + 0.428571: '3/7', + 1.333333: '4/3', + 0.571429: '4/7', + 0.444444: '4/9', + 1.666667: '5/3', + 0.833333: '5/6', + 0.714286: '5/7', + 0.555556: '5/9', + 0.857143: '6/7', + 2.333333: '7/3', + 1.166667: '7/6', + 0.777778: '7/9', + 2.666667: '8/3', + 1.142857: '8/7', + 0.888889: '8/9', + 1.285714: '9/7', + }, + + + + /** + * + * @param float value + * + * @return string + */ + floatToString: function (value) + { + var test = Math.round(value * 1000000) / 1000000; + if (undefined !== this.fractions[test]) { + return this.fractions[test]; + } + var locale = 'fr'; + var options = {minimumFractionDigits: 0, maximumFractionDigits: 2, useGrouping: false}; + var formatter = new Intl.NumberFormat(locale, options); + + return formatter.format(value); + }, + + + + stringToFloat: function (value) + { + if (null === value || '' === value || undefined === value) return null; + + if (value.indexOf('/') !== -1) { + value = value.split('/'); + value = Util.stringToFloat(value[0]) / Util.stringToFloat(value[1]); + } else { + value = parseFloat(value.replace(',', '.')); + } + + return value; + }, + + + + nl2br: function (str, is_xhtml) + { + if (typeof str === 'undefined' || str === null) { + return ''; + } + var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>'; + return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2'); + } + +}; \ No newline at end of file diff --git a/public/vendor/axios/axios.min.js b/public/vendor/axios/axios.min.js new file mode 100644 index 0000000000000000000000000000000000000000..57946c79aada58042bb7c5ee3c625ca48e4fd509 --- /dev/null +++ b/public/vendor/axios/axios.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).axios=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,i=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){s=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){return function(){return e.apply(t,arguments)}}var s,u=Object.prototype.toString,c=Object.getPrototypeOf,f=(s=Object.create(null),function(e){var t=u.call(e);return s[t]||(s[t]=t.slice(8,-1).toLowerCase())}),l=function(e){return e=e.toLowerCase(),function(t){return f(t)===e}},d=function(t){return function(n){return e(n)===t}},h=Array.isArray,p=d("undefined");var m=l("ArrayBuffer");var y=d("string"),v=d("function"),b=d("number"),g=function(t){return null!==t&&"object"===e(t)},w=function(e){if("object"!==f(e))return!1;var t=c(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},E=l("Date"),O=l("File"),S=l("Blob"),R=l("FileList"),A=l("URLSearchParams");function T(t,n){var r,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=i.allOwnKeys,s=void 0!==a&&a;if(null!=t)if("object"!==e(t)&&(t=[t]),h(t))for(r=0,o=t.length;r<o;r++)n.call(null,t[r],r,t);else{var u,c=s?Object.getOwnPropertyNames(t):Object.keys(t),f=c.length;for(r=0;r<f;r++)u=c[r],n.call(null,t[u],u,t)}}function j(e,t){t=t.toLowerCase();for(var n,r=Object.keys(e),o=r.length;o-- >0;)if(t===(n=r[o]).toLowerCase())return n;return null}var N="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,x=function(e){return!p(e)&&e!==N};var C,P=(C="undefined"!=typeof Uint8Array&&c(Uint8Array),function(e){return C&&e instanceof C}),k=l("HTMLFormElement"),U=function(e){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),_=l("RegExp"),F=function(e,t){var n=Object.getOwnPropertyDescriptors(e),r={};T(n,(function(n,o){!1!==t(n,o,e)&&(r[o]=n)})),Object.defineProperties(e,r)},B={isArray:h,isArrayBuffer:m,isBuffer:function(e){return null!==e&&!p(e)&&null!==e.constructor&&!p(e.constructor)&&v(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:function(e){var t="[object FormData]";return e&&("function"==typeof FormData&&e instanceof FormData||u.call(e)===t||v(e.toString)&&e.toString()===t)},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer)},isString:y,isNumber:b,isBoolean:function(e){return!0===e||!1===e},isObject:g,isPlainObject:w,isUndefined:p,isDate:E,isFile:O,isBlob:S,isRegExp:_,isFunction:v,isStream:function(e){return g(e)&&v(e.pipe)},isURLSearchParams:A,isTypedArray:P,isFileList:R,forEach:T,merge:function e(){for(var t=x(this)&&this||{},n=t.caseless,r={},o=function(t,o){var i=n&&j(r,o)||o;w(r[i])&&w(t)?r[i]=e(r[i],t):w(t)?r[i]=e({},t):h(t)?r[i]=t.slice():r[i]=t},i=0,a=arguments.length;i<a;i++)arguments[i]&&T(arguments[i],o);return r},extend:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.allOwnKeys;return T(t,(function(t,r){n&&v(t)?e[r]=a(t,n):e[r]=t}),{allOwnKeys:o}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var o,i,a,s={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],r&&!r(a,e,t)||s[a]||(t[a]=e[a],s[a]=!0);e=!1!==n&&c(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:f,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(h(e))return e;var t=e.length;if(!b(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},forEachEntry:function(e,t){for(var n,r=(e&&e[Symbol.iterator]).call(e);(n=r.next())&&!n.done;){var o=n.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:k,hasOwnProperty:U,hasOwnProp:U,reduceDescriptors:F,freezeMethods:function(e){F(e,(function(t,n){if(v(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;var r=e[n];v(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=function(){throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:function(e,t){var n={},r=function(e){e.forEach((function(e){n[e]=!0}))};return h(e)?r(e):r(String(e).split(t)),n},toCamelCase:function(e){return e.toLowerCase().replace(/[_-\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n}))},noop:function(){},toFiniteNumber:function(e,t){return e=+e,Number.isFinite(e)?e:t},findKey:j,global:N,isContextDefined:x,toJSONObject:function(e){var t=new Array(10);return function e(n,r){if(g(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[r]=n;var o=h(n)?[]:{};return T(n,(function(t,n){var i=e(t,r+1);!p(i)&&(o[n]=i)})),t[r]=void 0,o}}return n}(e,0)}};function D(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}B.inherits(D,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:B.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var L=D.prototype,q={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){q[e]={value:e}})),Object.defineProperties(D,q),Object.defineProperty(L,"isAxiosError",{value:!0}),D.from=function(e,t,n,r,o,i){var a=Object.create(L);return B.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(function(e){return"isAxiosError"!==e})),D.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};var I="object"==("undefined"==typeof self?"undefined":e(self))?self.FormData:window.FormData;function M(e){return B.isPlainObject(e)||B.isArray(e)}function z(e){return B.endsWith(e,"[]")?e.slice(0,-2):e}function J(e,t,n){return e?e.concat(t).map((function(e,t){return e=z(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}var H=B.toFlatObject(B,{},null,(function(e){return/^is[A-Z]/.test(e)}));function W(t,n,r){if(!B.isObject(t))throw new TypeError("target must be an object");n=n||new(I||FormData);var o,i=(r=B.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!B.isUndefined(t[e])}))).metaTokens,a=r.visitor||l,s=r.dots,u=r.indexes,c=(r.Blob||"undefined"!=typeof Blob&&Blob)&&((o=n)&&B.isFunction(o.append)&&"FormData"===o[Symbol.toStringTag]&&o[Symbol.iterator]);if(!B.isFunction(a))throw new TypeError("visitor must be a function");function f(e){if(null===e)return"";if(B.isDate(e))return e.toISOString();if(!c&&B.isBlob(e))throw new D("Blob is not supported. Use a Buffer instead.");return B.isArrayBuffer(e)||B.isTypedArray(e)?c&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(t,r,o){var a=t;if(t&&!o&&"object"===e(t))if(B.endsWith(r,"{}"))r=i?r:r.slice(0,-2),t=JSON.stringify(t);else if(B.isArray(t)&&function(e){return B.isArray(e)&&!e.some(M)}(t)||B.isFileList(t)||B.endsWith(r,"[]")&&(a=B.toArray(t)))return r=z(r),a.forEach((function(e,t){!B.isUndefined(e)&&null!==e&&n.append(!0===u?J([r],t,s):null===u?r:r+"[]",f(e))})),!1;return!!M(t)||(n.append(J(o,r,s),f(t)),!1)}var d=[],h=Object.assign(H,{defaultVisitor:l,convertValue:f,isVisitable:M});if(!B.isObject(t))throw new TypeError("data must be an object");return function e(t,r){if(!B.isUndefined(t)){if(-1!==d.indexOf(t))throw Error("Circular reference detected in "+r.join("."));d.push(t),B.forEach(t,(function(t,o){!0===(!(B.isUndefined(t)||null===t)&&a.call(n,t,B.isString(o)?o.trim():o,r,h))&&e(t,r?r.concat(o):[o])})),d.pop()}}(t),n}function K(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function V(e,t){this._pairs=[],e&&W(e,this,t)}var G=V.prototype;function $(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function X(e,t,n){if(!t)return e;var r,o=n&&n.encode||$,i=n&&n.serialize;if(r=i?i(t,n):B.isURLSearchParams(t)?t.toString():new V(t,n).toString(o)){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e}G.append=function(e,t){this._pairs.push([e,t])},G.toString=function(e){var t=e?function(t){return e.call(this,t,K)}:K;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Q,Z=function(){function e(){t(this,e),this.handlers=[]}return r(e,[{key:"use",value:function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(e){B.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}]),e}(),Y={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ee="undefined"!=typeof URLSearchParams?URLSearchParams:V,te=FormData,ne=("undefined"==typeof navigator||"ReactNative"!==(Q=navigator.product)&&"NativeScript"!==Q&&"NS"!==Q)&&"undefined"!=typeof window&&"undefined"!=typeof document,re="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,oe={isBrowser:!0,classes:{URLSearchParams:ee,FormData:te,Blob:Blob},isStandardBrowserEnv:ne,isStandardBrowserWebWorkerEnv:re,protocols:["http","https","file","blob","url","data"]};function ie(e){function t(e,n,r,o){var i=e[o++],a=Number.isFinite(+i),s=o>=e.length;return i=!i&&B.isArray(r)?r.length:i,s?(B.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a):(r[i]&&B.isObject(r[i])||(r[i]=[]),t(e,n,r[i],o)&&B.isArray(r[i])&&(r[i]=function(e){var t,n,r={},o=Object.keys(e),i=o.length;for(t=0;t<i;t++)r[n=o[t]]=e[n];return r}(r[i])),!a)}if(B.isFormData(e)&&B.isFunction(e.entries)){var n={};return B.forEachEntry(e,(function(e,r){t(function(e){return B.matchAll(/\w+|\[(\w*)]/g,e).map((function(e){return"[]"===e[0]?"":e[1]||e[0]}))}(e),r,n,0)})),n}return null}var ae={"Content-Type":void 0};var se={transitional:Y,adapter:["xhr","http"],transformRequest:[function(e,t){var n,r=t.getContentType()||"",o=r.indexOf("application/json")>-1,i=B.isObject(e);if(i&&B.isHTMLForm(e)&&(e=new FormData(e)),B.isFormData(e))return o&&o?JSON.stringify(ie(e)):e;if(B.isArrayBuffer(e)||B.isBuffer(e)||B.isStream(e)||B.isFile(e)||B.isBlob(e))return e;if(B.isArrayBufferView(e))return e.buffer;if(B.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return W(e,new oe.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return oe.isNode&&B.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((n=B.isFileList(e))||r.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return W(n?{"files[]":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType("application/json",!1),function(e,t,n){if(B.isString(e))try{return(t||JSON.parse)(e),B.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||se.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&B.isString(e)&&(n&&!this.responseType||r)){var o=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw D.from(e,D.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:oe.classes.FormData,Blob:oe.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};B.forEach(["delete","get","head"],(function(e){se.headers[e]={}})),B.forEach(["post","put","patch"],(function(e){se.headers[e]=B.merge(ae)}));var ue=se,ce=B.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),fe=Symbol("internals");function le(e){return e&&String(e).trim().toLowerCase()}function de(e){return!1===e||null==e?e:B.isArray(e)?e.map(de):String(e)}function he(e,t,n,r){return B.isFunction(r)?r.call(this,t,n):B.isString(t)?B.isString(r)?-1!==t.indexOf(r):B.isRegExp(r)?r.test(t):void 0:void 0}var pe=function(e,n){function i(e){t(this,i),e&&this.set(e)}return r(i,[{key:"set",value:function(e,t,n){var r=this;function o(e,t,n){var o=le(t);if(!o)throw new Error("header name must be a non-empty string");var i=B.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=de(e))}var i,a,s,u,c,f=function(e,t){return B.forEach(e,(function(e,n){return o(e,n,t)}))};return B.isPlainObject(e)||e instanceof this.constructor?f(e,t):B.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z]+$/.test(e.trim())?f((c={},(i=e)&&i.split("\n").forEach((function(e){u=e.indexOf(":"),a=e.substring(0,u).trim().toLowerCase(),s=e.substring(u+1).trim(),!a||c[a]&&ce[a]||("set-cookie"===a?c[a]?c[a].push(s):c[a]=[s]:c[a]=c[a]?c[a]+", "+s:s)})),c),t):null!=e&&o(t,e,n),this}},{key:"get",value:function(e,t){if(e=le(e)){var n=B.findKey(this,e);if(n){var r=this[n];if(!t)return r;if(!0===t)return function(e){for(var t,n=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;t=r.exec(e);)n[t[1]]=t[2];return n}(r);if(B.isFunction(t))return t.call(this,r,n);if(B.isRegExp(t))return t.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(e,t){if(e=le(e)){var n=B.findKey(this,e);return!(!n||t&&!he(0,this[n],n,t))}return!1}},{key:"delete",value:function(e,t){var n=this,r=!1;function o(e){if(e=le(e)){var o=B.findKey(n,e);!o||t&&!he(0,n[o],o,t)||(delete n[o],r=!0)}}return B.isArray(e)?e.forEach(o):o(e),r}},{key:"clear",value:function(){return Object.keys(this).forEach(this.delete.bind(this))}},{key:"normalize",value:function(e){var t=this,n={};return B.forEach(this,(function(r,o){var i=B.findKey(n,o);if(i)return t[i]=de(r),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n}))}(o):String(o).trim();a!==o&&delete t[o],t[a]=de(r),n[a]=!0})),this}},{key:"concat",value:function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=this.constructor).concat.apply(e,[this].concat(n))}},{key:"toJSON",value:function(e){var t=Object.create(null);return B.forEach(this,(function(n,r){null!=n&&!1!==n&&(t[r]=e&&B.isArray(n)?n.join(", "):n)})),t}},{key:Symbol.iterator,value:function(){return Object.entries(this.toJSON())[Symbol.iterator]()}},{key:"toString",value:function(){return Object.entries(this.toJSON()).map((function(e){var t=o(e,2);return t[0]+": "+t[1]})).join("\n")}},{key:Symbol.toStringTag,get:function(){return"AxiosHeaders"}}],[{key:"from",value:function(e){return e instanceof this?e:new this(e)}},{key:"concat",value:function(e){for(var t=new this(e),n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach((function(e){return t.set(e)})),t}},{key:"accessor",value:function(e){var t=(this[fe]=this[fe]={accessors:{}}).accessors,n=this.prototype;function r(e){var r=le(e);t[r]||(!function(e,t){var n=B.toCamelCase(" "+t);["get","set","has"].forEach((function(r){Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return B.isArray(e)?e.forEach(r):r(e),this}}]),i}();pe.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent"]),B.freezeMethods(pe.prototype),B.freezeMethods(pe);var me=pe;function ye(e,t){var n=this||ue,r=t||n,o=me.from(r.headers),i=r.data;return B.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function ve(e){return!(!e||!e.__CANCEL__)}function be(e,t,n){D.call(this,null==e?"canceled":e,D.ERR_CANCELED,t,n),this.name="CanceledError"}B.inherits(be,D,{__CANCEL__:!0});var ge=oe.isStandardBrowserEnv?{write:function(e,t,n,r,o,i){var a=[];a.push(e+"="+encodeURIComponent(t)),B.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),B.isString(r)&&a.push("path="+r),B.isString(o)&&a.push("domain="+o),!0===i&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function we(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var Ee=oe.isStandardBrowserEnv?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=B.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0};function Oe(e,t){var n=0,r=function(e,t){e=e||10;var n,r=new Array(e),o=new Array(e),i=0,a=0;return t=void 0!==t?t:1e3,function(s){var u=Date.now(),c=o[a];n||(n=u),r[i]=s,o[i]=u;for(var f=a,l=0;f!==i;)l+=r[f++],f%=e;if((i=(i+1)%e)===a&&(a=(a+1)%e),!(u-n<t)){var d=c&&u-c;return d?Math.round(1e3*l/d):void 0}}}(50,250);return function(o){var i=o.loaded,a=o.lengthComputable?o.total:void 0,s=i-n,u=r(s);n=i;var c={loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&i<=a?(a-i)/u:void 0,event:o};c[t?"download":"upload"]=!0,e(c)}}var Se={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){var r,o=e.data,i=me.from(e.headers).normalize(),a=e.responseType;function s(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener("abort",r)}B.isFormData(o)&&(oe.isStandardBrowserEnv||oe.isStandardBrowserWebWorkerEnv)&&i.setContentType(!1);var u=new XMLHttpRequest;if(e.auth){var c=e.auth.username||"",f=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(c+":"+f))}var l=we(e.baseURL,e.url);function d(){if(u){var r=me.from("getAllResponseHeaders"in u&&u.getAllResponseHeaders());!function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new D("Request failed with status code "+n.status,[D.ERR_BAD_REQUEST,D.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),s()}),(function(e){n(e),s()}),{data:a&&"text"!==a&&"json"!==a?u.response:u.responseText,status:u.status,statusText:u.statusText,headers:r,config:e,request:u}),u=null}}if(u.open(e.method.toUpperCase(),X(l,e.params,e.paramsSerializer),!0),u.timeout=e.timeout,"onloadend"in u?u.onloadend=d:u.onreadystatechange=function(){u&&4===u.readyState&&(0!==u.status||u.responseURL&&0===u.responseURL.indexOf("file:"))&&setTimeout(d)},u.onabort=function(){u&&(n(new D("Request aborted",D.ECONNABORTED,e,u)),u=null)},u.onerror=function(){n(new D("Network Error",D.ERR_NETWORK,e,u)),u=null},u.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",r=e.transitional||Y;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new D(t,r.clarifyTimeoutError?D.ETIMEDOUT:D.ECONNABORTED,e,u)),u=null},oe.isStandardBrowserEnv){var h=(e.withCredentials||Ee(l))&&e.xsrfCookieName&&ge.read(e.xsrfCookieName);h&&i.set(e.xsrfHeaderName,h)}void 0===o&&i.setContentType(null),"setRequestHeader"in u&&B.forEach(i.toJSON(),(function(e,t){u.setRequestHeader(t,e)})),B.isUndefined(e.withCredentials)||(u.withCredentials=!!e.withCredentials),a&&"json"!==a&&(u.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&u.addEventListener("progress",Oe(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&u.upload&&u.upload.addEventListener("progress",Oe(e.onUploadProgress)),(e.cancelToken||e.signal)&&(r=function(t){u&&(n(!t||t.type?new be(null,e,u):t),u.abort(),u=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener("abort",r)));var p,m=(p=/^([-+\w]{1,25})(:?\/\/|:)/.exec(l))&&p[1]||"";m&&-1===oe.protocols.indexOf(m)?n(new D("Unsupported protocol "+m+":",D.ERR_BAD_REQUEST,e)):u.send(o||null)}))}};B.forEach(Se,(function(e,t){if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));var Re=function(e){for(var t,n,r=(e=B.isArray(e)?e:[e]).length,o=0;o<r&&(t=e[o],!(n=B.isString(t)?Se[t.toLowerCase()]:t));o++);if(!n){if(!1===n)throw new D("Adapter ".concat(t," is not supported by the environment"),"ERR_NOT_SUPPORT");throw new Error(B.hasOwnProp(Se,t)?"Adapter '".concat(t,"' is not available in the build"):"Unknown adapter '".concat(t,"'"))}if(!B.isFunction(n))throw new TypeError("adapter is not a function");return n};function Ae(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new be(null,e)}function Te(e){return Ae(e),e.headers=me.from(e.headers),e.data=ye.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Re(e.adapter||ue.adapter)(e).then((function(t){return Ae(e),t.data=ye.call(e,e.transformResponse,t),t.headers=me.from(t.headers),t}),(function(t){return ve(t)||(Ae(e),t&&t.response&&(t.response.data=ye.call(e,e.transformResponse,t.response),t.response.headers=me.from(t.response.headers))),Promise.reject(t)}))}var je=function(e){return e instanceof me?e.toJSON():e};function Ne(e,t){t=t||{};var n={};function r(e,t,n){return B.isPlainObject(e)&&B.isPlainObject(t)?B.merge.call({caseless:n},e,t):B.isPlainObject(t)?B.merge({},t):B.isArray(t)?t.slice():t}function o(e,t,n){return B.isUndefined(t)?B.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!B.isUndefined(t))return r(void 0,t)}function a(e,t){return B.isUndefined(t)?B.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}var u={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:function(e,t){return o(je(e),je(t),!0)}};return B.forEach(Object.keys(e).concat(Object.keys(t)),(function(r){var i=u[r]||o,a=i(e[r],t[r],r);B.isUndefined(a)&&i!==s||(n[r]=a)})),n}var xe="1.2.3",Ce={};["object","boolean","number","function","string","symbol"].forEach((function(t,n){Ce[t]=function(r){return e(r)===t||"a"+(n<1?"n ":" ")+t}}));var Pe={};Ce.transitional=function(e,t,n){function r(e,t){return"[Axios v1.2.3] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,o,i){if(!1===e)throw new D(r(o," has been removed"+(t?" in "+t:"")),D.ERR_DEPRECATED);return t&&!Pe[o]&&(Pe[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}};var ke={assertOptions:function(t,n,r){if("object"!==e(t))throw new D("options must be an object",D.ERR_BAD_OPTION_VALUE);for(var o=Object.keys(t),i=o.length;i-- >0;){var a=o[i],s=n[a];if(s){var u=t[a],c=void 0===u||s(u,a,t);if(!0!==c)throw new D("option "+a+" must be "+c,D.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new D("Unknown option "+a,D.ERR_BAD_OPTION)}},validators:Ce},Ue=ke.validators,_e=function(){function e(n){t(this,e),this.defaults=n,this.interceptors={request:new Z,response:new Z}}return r(e,[{key:"request",value:function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{};var n,r=t=Ne(this.defaults,t),o=r.transitional,i=r.paramsSerializer,a=r.headers;void 0!==o&&ke.assertOptions(o,{silentJSONParsing:Ue.transitional(Ue.boolean),forcedJSONParsing:Ue.transitional(Ue.boolean),clarifyTimeoutError:Ue.transitional(Ue.boolean)},!1),void 0!==i&&ke.assertOptions(i,{encode:Ue.function,serialize:Ue.function},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase(),(n=a&&B.merge(a.common,a[t.method]))&&B.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete a[e]})),t.headers=me.concat(n,a);var s=[],u=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));var c,f=[];this.interceptors.response.forEach((function(e){f.push(e.fulfilled,e.rejected)}));var l,d=0;if(!u){var h=[Te.bind(this),void 0];for(h.unshift.apply(h,s),h.push.apply(h,f),l=h.length,c=Promise.resolve(t);d<l;)c=c.then(h[d++],h[d++]);return c}l=s.length;var p=t;for(d=0;d<l;){var m=s[d++],y=s[d++];try{p=m(p)}catch(e){y.call(this,e);break}}try{c=Te.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,l=f.length;d<l;)c=c.then(f[d++],f[d++]);return c}},{key:"getUri",value:function(e){return X(we((e=Ne(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}]),e}();B.forEach(["delete","get","head","options"],(function(e){_e.prototype[e]=function(t,n){return this.request(Ne(n||{},{method:e,url:t,data:(n||{}).data}))}})),B.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(Ne(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}_e.prototype[e]=t(),_e.prototype[e+"Form"]=t(!0)}));var Fe=_e,Be=function(){function e(n){if(t(this,e),"function"!=typeof n)throw new TypeError("executor must be a function.");var r;this.promise=new Promise((function(e){r=e}));var o=this;this.promise.then((function(e){if(o._listeners){for(var t=o._listeners.length;t-- >0;)o._listeners[t](e);o._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){o.subscribe(e),t=e})).then(e);return n.cancel=function(){o.unsubscribe(t)},n},n((function(e,t,n){o.reason||(o.reason=new be(e,t,n),r(o.reason))}))}return r(e,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:"unsubscribe",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}}],[{key:"source",value:function(){var t;return{token:new e((function(e){t=e})),cancel:t}}}]),e}();var De={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(De).forEach((function(e){var t=o(e,2),n=t[0],r=t[1];De[r]=n}));var Le=De;var qe=function e(t){var n=new Fe(t),r=a(Fe.prototype.request,n);return B.extend(r,Fe.prototype,n,{allOwnKeys:!0}),B.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Ne(t,n))},r}(ue);return qe.Axios=Fe,qe.CanceledError=be,qe.CancelToken=Be,qe.isCancel=ve,qe.VERSION=xe,qe.toFormData=W,qe.AxiosError=D,qe.Cancel=qe.CanceledError,qe.all=function(e){return Promise.all(e)},qe.spread=function(e){return function(t){return e.apply(null,t)}},qe.isAxiosError=function(e){return B.isObject(e)&&!0===e.isAxiosError},qe.mergeConfig=Ne,qe.AxiosHeaders=me,qe.formToJSON=function(e){return ie(B.isHTMLForm(e)?new FormData(e):e)},qe.HttpStatusCode=Le,qe.default=qe,qe})); +//# sourceMappingURL=axios.min.js.map diff --git a/public/vendor/axios/axios.min.js.map b/public/vendor/axios/axios.min.js.map new file mode 100644 index 0000000000000000000000000000000000000000..c013aaa95fd6a9542985a8b4896137108e7d78af --- /dev/null +++ b/public/vendor/axios/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../node_modules/form-data/lib/browser.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/platform/browser/index.js","../lib/defaults/transitional.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/helpers/formDataToJSON.js","../lib/defaults/index.js","../lib/helpers/toURLEncodedForm.js","../lib/helpers/parseHeaders.js","../lib/core/AxiosHeaders.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/cancel/CanceledError.js","../lib/helpers/cookies.js","../lib/core/buildFullPath.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/helpers/isURLSameOrigin.js","../lib/adapters/xhr.js","../lib/helpers/speedometer.js","../lib/adapters/adapters.js","../lib/helpers/null.js","../lib/core/settle.js","../lib/helpers/parseProtocol.js","../lib/core/dispatchRequest.js","../lib/core/mergeConfig.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/helpers/HttpStatusCode.js","../lib/axios.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n const pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[_-\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n if (reducer(descriptor, name, obj) !== false) {\n reducedDescriptors[name] = descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n toJSONObject\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport envFormData from '../env/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliant(thing) {\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\n}\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (envFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && isSpecCompliant(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst isStandardBrowserEnv = (() => {\n let product;\n if (typeof navigator !== 'undefined' && (\n (product = navigator.product) === 'ReactNative' ||\n product === 'NativeScript' ||\n product === 'NS')\n ) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n})();\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\n const isStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n isStandardBrowserEnv,\n isStandardBrowserWebWorkerEnv,\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default FormData;\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\nconst DEFAULT_CONTENT_TYPE = {\n 'Content-Type': undefined\n};\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nfunction isValidHeaderName(str) {\n return /^[-_a-zA-Z]+$/.test(str.trim());\n}\n\nfunction matchHeaderValue(context, value, header, filter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear() {\n return Object.keys(this).forEach(this.delete.bind(this));\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent']);\n\nutils.freezeMethods(AxiosHeaders.prototype);\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n const cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n// Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })();\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n const responseType = config.responseType;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && (platform.isStandardBrowserEnv || platform.isStandardBrowserWebWorkerEnv)) {\n requestHeaders.setContentType(false); // Let the browser set it\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.isStandardBrowserEnv) {\n // Add xsrf header\n const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath))\n && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if(fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) {\n break;\n }\n }\n\n if (!adapter) {\n if (adapter === false) {\n throw new AxiosError(\n `Adapter ${nameOrAdapter} is not supported by the environment`,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n throw new Error(\n utils.hasOwnProp(knownAdapters, nameOrAdapter) ?\n `Adapter '${nameOrAdapter}' is not available in the build` :\n `Unknown adapter '${nameOrAdapter}'`\n );\n }\n\n if (!utils.isFunction(adapter)) {\n throw new TypeError('adapter is not a function');\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.2.3\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer !== undefined) {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n let contextHeaders;\n\n // Flatten headers\n contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n contextHeaders && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n"],"names":["bind","fn","thisArg","apply","arguments","cache","toString","Object","prototype","getPrototypeOf","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","val","Symbol","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","forEach","obj","i","l","_ref","length","undefined","_ref$allOwnKeys","allOwnKeys","key","keys","getOwnPropertyNames","len","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","_ref4","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","defineProperties","utils","isBuffer","constructor","isFormData","pattern","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","this","caseless","result","assignValue","targetKey","extend","a","b","_ref3","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","forEachEntry","next","done","pair","matchAll","regExp","matches","exec","push","hasOwnProp","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","toJSONObject","stack","visit","source","target","reducedValue","AxiosError","message","code","config","request","response","captureStackTrace","toJSON","description","number","fileName","lineNumber","columnNumber","status","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","concat","map","token","join","predicates","test","toFormData","formData","options","TypeError","envFormData","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","append","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","serializedParams","_encode","serializeFn","serialize","hashmarkIndex","encoder","product","InterceptorManager$1","InterceptorManager","_classCallCheck","handlers","_createClass","fulfilled","rejected","synchronous","runWhen","id","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams$1","URLSearchParams","FormData$1","isStandardBrowserEnv","navigator","document","isStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","platform","isBrowser","classes","protocols","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","DEFAULT_CONTENT_TYPE","defaults","transitional","adapter","transformRequest","data","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","e","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","AxiosHeaders","_Symbol$iterator","_Symbol$toStringTag","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","rawHeaders","parsed","setHeaders","line","substring","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","_len","targets","asStrings","_ref2","_slicedToArray","get","first","computed","_len2","_key2","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","configurable","buildAccessors","accessor","AxiosHeaders$1","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","write","expires","domain","secure","cookie","Date","toGMTString","read","RegExp","decodeURIComponent","remove","now","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","originURL","msie","userAgent","urlParsingNode","createElement","resolveURL","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","location","requestURL","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","startedAt","bytesCount","passed","Math","round","speedometer","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","knownAdapters","http","xhr","XMLHttpRequest","Promise","resolve","reject","onCanceled","requestData","requestHeaders","cancelToken","unsubscribe","signal","removeEventListener","auth","username","password","unescape","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","ERR_BAD_REQUEST","floor","settle","err","responseText","statusText","open","paramsSerializer","onreadystatechange","readyState","responseURL","setTimeout","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","xsrfValue","withCredentials","isURLSameOrigin","cookies","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancel","abort","subscribe","aborted","send","adapters","nameOrAdapter","throwIfCancellationRequested","throwIfRequested","dispatchRequest","then","reason","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validators$1","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","contextHeaders","_config","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","newConfig","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios$1","CancelToken$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","c","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","axios","createInstance","defaultConfig","instance","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON"],"mappings":"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"} \ No newline at end of file diff --git a/public/vendor/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css b/public/vendor/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css deleted file mode 100644 index 5950ad272e30752ca7f21f6a6ac1013fae02e91a..0000000000000000000000000000000000000000 --- a/public/vendor/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Datetimepicker for Bootstrap 3 - * version : 4.17.47 - * https://github.com/Eonasdan/bootstrap-datetimepicker/ - */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:before,.bootstrap-datetimepicker-widget.dropdown-menu:after{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid white;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid white;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:bold;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action="today"]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0;content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.old,.bootstrap-datetimepicker-widget table td.new{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,0.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em !important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0} \ No newline at end of file diff --git a/public/vendor/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js b/public/vendor/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js deleted file mode 100644 index d040b73ff675ff000162231b7f8b5fa08822ec4e..0000000000000000000000000000000000000000 --- a/public/vendor/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js +++ /dev/null @@ -1,21 +0,0 @@ -$.widget("unicaen.bootstrapDatetimepicker", { - _create: function () - { - var options = this.element.data('options'); - if (!options.locale){ - options.locale = 'fr'; - } - if (!options.allowInputToggle){ - options.allowInputToggle = true; - } - this.element.datetimepicker(options); - }, -}); - -// moment.js + version française -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function m(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function _(e,t){for(var n in t)m(t,n)&&(e[n]=t[n]);return m(t,"toString")&&(e.toString=t.toString),m(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,s){return Ot(e,t,n,s,!0).utc()}function g(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function p(e){if(null==e._isValid){var t=g(e),n=i.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function v(e){var t=y(NaN);return null!=e?_(g(t),e):g(t).userInvalidated=!0,t}i=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var r=c.momentProperties=[];function w(e,t){var n,s,i;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=g(t)),l(t._locale)||(e._locale=t._locale),0<r.length)for(n=0;n<r.length;n++)l(i=t[s=r[n]])||(e[s]=i);return e}var t=!1;function M(e){w(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===t&&(t=!0,c.updateOffset(this),t=!1)}function S(e){return e instanceof M||null!=e&&null!=e._isAMomentObject}function D(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function k(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=D(t)),n}function a(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&k(e[s])!==k(t[s]))&&a++;return a+r}function Y(e){!1===c.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function n(i,r){var a=!0;return _(function(){if(null!=c.deprecationHandler&&c.deprecationHandler(null,i),a){for(var e,t=[],n=0;n<arguments.length;n++){if(e="","object"==typeof arguments[n]){for(var s in e+="\n["+n+"] ",arguments[0])e+=s+": "+arguments[0][s]+", ";e=e.slice(0,-2)}else e=arguments[n];t.push(e)}Y(i+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),a=!1}return r.apply(this,arguments)},r)}var s,O={};function T(e,t){null!=c.deprecationHandler&&c.deprecationHandler(e,t),O[e]||(Y(t),O[e]=!0)}function x(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,t){var n,s=_({},e);for(n in t)m(t,n)&&(u(e[n])&&u(t[n])?(s[n]={},_(s[n],e[n]),_(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)m(e,n)&&!m(t,n)&&u(e[n])&&(s[n]=_({},s[n]));return s}function P(e){null!=e&&this.set(e)}c.suppressDeprecationWarnings=!1,c.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)m(e,t)&&n.push(t);return n};var W={};function H(e,t){var n=e.toLowerCase();W[n]=W[n+"s"]=W[t]=e}function R(e){return"string"==typeof e?W[e]||W[e.toLowerCase()]:void 0}function C(e){var t,n,s={};for(n in e)m(e,n)&&(t=R(n))&&(s[t]=e[n]);return s}var F={};function L(e,t){F[e]=t}function U(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,G=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,V={},E={};function I(e,t,n,s){var i=s;"string"==typeof s&&(i=function(){return this[s]()}),e&&(E[e]=i),t&&(E[t[0]]=function(){return U(i.apply(this,arguments),t[1],t[2])}),n&&(E[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function A(e,t){return e.isValid()?(t=j(t,e.localeData()),V[t]=V[t]||function(s){var e,i,t,r=s.match(N);for(e=0,i=r.length;e<i;e++)E[r[e]]?r[e]=E[r[e]]:r[e]=(t=r[e]).match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"");return function(e){var t,n="";for(t=0;t<i;t++)n+=x(r[t])?r[t].call(e,s):r[t];return n}}(t),V[t](e)):e.localeData().invalidDate()}function j(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(G.lastIndex=0;0<=n&&G.test(e);)e=e.replace(G,s),G.lastIndex=0,n-=1;return e}var Z=/\d/,z=/\d\d/,$=/\d{3}/,q=/\d{4}/,J=/[+-]?\d{6}/,B=/\d\d?/,Q=/\d\d\d\d?/,X=/\d\d\d\d\d\d?/,K=/\d{1,3}/,ee=/\d{1,4}/,te=/[+-]?\d{1,6}/,ne=/\d+/,se=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,re=/Z|[+-]\d\d(?::?\d\d)?/gi,ae=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,oe={};function ue(e,n,s){oe[e]=x(n)?n:function(e,t){return e&&s?s:n}}function le(e,t){return m(oe,e)?oe[e](t._strict,t._locale):new RegExp(de(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function de(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var he={};function ce(e,n){var t,s=n;for("string"==typeof e&&(e=[e]),d(n)&&(s=function(e,t){t[n]=k(e)}),t=0;t<e.length;t++)he[e[t]]=s}function fe(e,i){ce(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var me=0,_e=1,ye=2,ge=3,pe=4,ve=5,we=6,Me=7,Se=8;function De(e){return ke(e)?366:365}function ke(e){return e%4==0&&e%100!=0||e%400==0}I("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),I(0,["YY",2],0,function(){return this.year()%100}),I(0,["YYYY",4],0,"year"),I(0,["YYYYY",5],0,"year"),I(0,["YYYYYY",6,!0],0,"year"),H("year","y"),L("year",1),ue("Y",se),ue("YY",B,z),ue("YYYY",ee,q),ue("YYYYY",te,J),ue("YYYYYY",te,J),ce(["YYYYY","YYYYYY"],me),ce("YYYY",function(e,t){t[me]=2===e.length?c.parseTwoDigitYear(e):k(e)}),ce("YY",function(e,t){t[me]=c.parseTwoDigitYear(e)}),ce("Y",function(e,t){t[me]=parseInt(e,10)}),c.parseTwoDigitYear=function(e){return k(e)+(68<k(e)?1900:2e3)};var Ye,Oe=Te("FullYear",!0);function Te(t,n){return function(e){return null!=e?(be(this,t,e),c.updateOffset(this,n),this):xe(this,t)}}function xe(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function be(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&ke(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Pe(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function Pe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,s=(t%(n=12)+n)%n;return e+=(t-s)/12,1===s?ke(e)?29:28:31-s%7%2}Ye=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},I("M",["MM",2],"Mo",function(){return this.month()+1}),I("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),I("MMMM",0,0,function(e){return this.localeData().months(this,e)}),H("month","M"),L("month",8),ue("M",B),ue("MM",B,z),ue("MMM",function(e,t){return t.monthsShortRegex(e)}),ue("MMMM",function(e,t){return t.monthsRegex(e)}),ce(["M","MM"],function(e,t){t[_e]=k(e)-1}),ce(["MMM","MMMM"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[_e]=i:g(n).invalidMonth=e});var We=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,He="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var Re="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=k(t);else if(!d(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Pe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function Fe(e){return null!=e?(Ce(this,e),c.updateOffset(this,!0),this):xe(this,"Month")}var Le=ae;var Ue=ae;function Ne(){function e(e,t){return t.length-e.length}var t,n,s=[],i=[],r=[];for(t=0;t<12;t++)n=y([2e3,t]),s.push(this.monthsShort(n,"")),i.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(s.sort(e),i.sort(e),r.sort(e),t=0;t<12;t++)s[t]=de(s[t]),i[t]=de(i[t]);for(t=0;t<24;t++)r[t]=de(r[t]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Ge(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&0<=e&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ve(e,t,n){var s=7+t-n;return-((7+Ge(e,0,s).getUTCDay()-t)%7)+s-1}function Ee(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+Ve(e,s,i);return o<=0?a=De(r=e-1)+o:o>De(e)?(r=e+1,a=o-De(e)):(r=e,a=o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,require("./locale/"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null!==t){var n,s=nt;if(t.abbr=e,null!=st[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}return delete st[e],null}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=rt(e[r]).split("-")).length,n=(n=rt(e[r+1]))?n.split("-"):null;0<t;){if(s=at(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11<n[_e]?_e:n[ye]<1||n[ye]>Pe(n[me],n[_e])?ye:n[ge]<0||24<n[ge]||24===n[ge]&&(0!==n[pe]||0!==n[ve]||0!==n[we])?ge:n[pe]<0||59<n[pe]?pe:n[ve]<0||59<n[ve]?ve:n[we]<0||999<n[we]?we:-1,g(e)._overflowDayOfYear&&(t<me||ye<t)&&(t=ye),g(e)._overflowWeeks&&-1===t&&(t=Me),g(e)._overflowWeekday&&-1===t&&(t=Se),g(e).overflow=t),e}function ht(e,t,n){return null!=e?e:null!=t?t:n}function ct(e){var t,n,s,i,r,a=[];if(!e._d){var o,u;for(o=e,u=new Date(c.now()),s=o._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()],e._w&&null==e._a[ye]&&null==e._a[_e]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=ht(t.GG,e._a[me],Ie(Tt(),1,4).year),s=ht(t.W,1),((i=ht(t.E,1))<1||7<i)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=Ie(Tt(),r,a);n=ht(t.gg,e._a[me],l.year),s=ht(t.w,l.week),null!=t.d?((i=t.d)<0||6<i)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||6<t.e)&&(u=!0)):i=r}s<1||s>Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pt=/^\/?Date\((\-?\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;t<n;t++)if(yt[t][1].exec(u[1])){i=yt[t][0],s=!1!==yt[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=gt.length;t<n;t++)if(gt[t][1].exec(u[3])){r=(u[2]||" ")+gt[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!_t.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),kt(e)}else e._isValid=!1}var wt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function Mt(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Re.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}var St={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Dt(e){var t,n,s,i=wt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(i){var r=Mt(i[4],i[3],i[2],i[5],i[6],i[7]);if(t=i[1],n=r,s=e,t&&Ze.indexOf(t)!==new Date(n[0],n[1],n[2]).getDay()&&(g(s).weekdayMismatch=!0,!(s._isValid=!1)))return;e._a=r,e._tzm=function(e,t,n){if(e)return St[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return(s-i)/100*60+i}(i[8],i[9],i[10]),e._d=Ge.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),g(e).rfc2822=!0}else e._isValid=!1}function kt(e){if(e._f!==c.ISO_8601)if(e._f!==c.RFC_2822){e._a=[],g(e).empty=!0;var t,n,s,i,r,a,o,u,l=""+e._i,d=l.length,h=0;for(s=j(e._f,e._locale).match(N)||[],t=0;t<s.length;t++)i=s[t],(n=(l.match(le(i,e))||[])[0])&&(0<(r=l.substr(0,l.indexOf(n))).length&&g(e).unusedInput.push(r),l=l.slice(l.indexOf(n)+n.length),h+=n.length),E[i]?(n?g(e).empty=!1:g(e).unusedTokens.push(i),a=i,u=e,null!=(o=n)&&m(he,a)&&he[a](o,u._a,u,a)):e._strict&&!n&&g(e).unusedTokens.push(i);g(e).charsLeftOver=d-h,0<l.length&&g(e).unusedInput.push(l),e._a[ge]<=12&&!0===g(e).bigHour&&0<e._a[ge]&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[ge]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):(null!=e.isPM&&((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0)),t)}(e._locale,e._a[ge],e._meridiem),ct(e),dt(e)}else Dt(e);else vt(e)}function Yt(e){var t,n,s,i,r=e._i,a=e._f;return e._locale=e._locale||lt(e._l),null===r||void 0===a&&""===r?v({nullInput:!0}):("string"==typeof r&&(e._i=r=e._locale.preparse(r)),S(r)?new M(dt(r)):(h(r)?e._d=r:o(a)?function(e){var t,n,s,i,r;if(0===e._f.length)return g(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<e._f.length;i++)r=0,t=w({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],kt(t),p(t)&&(r+=g(t).charsLeftOver,r+=10*g(t).unusedTokens.length,g(t).score=r,(null==s||r<s)&&(s=r,n=t));_(e,n||t)}(e):a?kt(e):l(n=(t=e)._i)?t._d=new Date(c.now()):h(n)?t._d=new Date(n.valueOf()):"string"==typeof n?(s=t,null===(i=pt.exec(s._i))?(vt(s),!1===s._isValid&&(delete s._isValid,Dt(s),!1===s._isValid&&(delete s._isValid,c.createFromInputFallback(s)))):s._d=new Date(+i[1])):o(n)?(t._a=f(n.slice(0),function(e){return parseInt(e,10)}),ct(t)):u(n)?function(e){if(!e._d){var t=C(e._i);e._a=f([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),ct(e)}}(t):d(n)?t._d=new Date(n):c.createFromInputFallback(t),p(e)||(e._d=null),e))}function Ot(e,t,n,s,i){var r,a={};return!0!==n&&!1!==n||(s=n,n=void 0),(u(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||o(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=i,a._l=n,a._i=e,a._f=t,a._strict=s,(r=new M(dt(Yt(a))))._nextDay&&(r.add(1,"d"),r._nextDay=void 0),r}function Tt(e,t,n,s){return Ot(e,t,n,s,!1)}c.createFromInputFallback=n("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),c.ISO_8601=function(){},c.RFC_2822=function(){};var xt=n("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()}),bt=n("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Tt.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:v()});function Pt(e,t){var n,s;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Tt();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ht(e){var t=C(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,d=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Ye.call(Wt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,s=0;s<Wt.length;++s)if(e[Wt[s]]){if(n)return!1;parseFloat(e[Wt[s]])!==k(e[Wt[s]])&&(n=!0)}return!0}(t),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=lt(),this._bubble()}function Rt(e){return e instanceof Ht}function Ct(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){I(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+U(~~(e/60),2)+n+U(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),ue("Z",re),ue("ZZ",re),ce(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Ut(re,e)});var Lt=/([\+\-]|\d\d)/gi;function Ut(e,t){var n=(t||"").match(e);if(null===n)return null;var s=((n[n.length-1]||[])+"").match(Lt)||["-",0,0],i=60*s[1]+k(s[2]);return 0===i?0:"+"===s[0]?i:-i}function Nt(e,t){var n,s;return t._isUTC?(n=t.clone(),s=(S(e)||h(e)?e.valueOf():Tt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+s),c.updateOffset(n,!1),n):Tt(e).local()}function Gt(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Vt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}c.updateOffset=function(){};var Et=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,It=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function At(e,t){var n,s,i,r=e,a=null;return Rt(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:d(e)?(r={},t?r[t]=e:r.milliseconds=e):(a=Et.exec(e))?(n="-"===a[1]?-1:1,r={y:0,d:k(a[ye])*n,h:k(a[ge])*n,m:k(a[pe])*n,s:k(a[ve])*n,ms:k(Ct(1e3*a[we]))*n}):(a=It.exec(e))?(n="-"===a[1]?-1:(a[1],1),r={y:jt(a[2],n),M:jt(a[3],n),w:jt(a[4],n),d:jt(a[5],n),h:jt(a[6],n),m:jt(a[7],n),s:jt(a[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(i=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Nt(t,e),e.isBefore(t)?n=Zt(e,t):((n=Zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(Tt(r.from),Tt(r.to)),(r={}).ms=i.milliseconds,r.M=i.months),s=new Ht(r),Rt(e)&&m(e,"_locale")&&(s._locale=e._locale),s}function jt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Zt(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function zt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(T(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),$t(this,At(e="string"==typeof e?+e:e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ct(t._days),a=Ct(t._months);e.isValid()&&(s=null==s||s,a&&Ce(e,xe(e,"Month")+a*n),r&&be(e,"Date",xe(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&c.updateOffset(e,r||a))}At.fn=Ht.prototype,At.invalid=function(){return At(NaN)};var qt=zt(1,"add"),Jt=zt(-1,"subtract");function Bt(e,t){var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months");return-(n+(t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(n+1,"months")-s)))||0}function Qt(e){var t;return void 0===e?this._locale._abbr:(null!=(t=lt(e))&&(this._locale=t),this)}c.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",c.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Xt=n("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}function en(e,t){I(0,[e,e.length],0,t)}function tn(e,t,n,s,i){var r;return null==e?Ie(this,s,i).year:((r=Ae(e,s,i))<t&&(t=r),function(e,t,n,s,i){var r=Ee(e,t,n,s,i),a=Ge(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}I(0,["gg",2],0,function(){return this.weekYear()%100}),I(0,["GG",2],0,function(){return this.isoWeekYear()%100}),en("gggg","weekYear"),en("ggggg","weekYear"),en("GGGG","isoWeekYear"),en("GGGGG","isoWeekYear"),H("weekYear","gg"),H("isoWeekYear","GG"),L("weekYear",1),L("isoWeekYear",1),ue("G",se),ue("g",se),ue("GG",B,z),ue("gg",B,z),ue("GGGG",ee,q),ue("gggg",ee,q),ue("GGGGG",te,J),ue("ggggg",te,J),fe(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=k(e)}),fe(["gg","GG"],function(e,t,n,s){t[s]=c.parseTwoDigitYear(e)}),I("Q",0,"Qo","quarter"),H("quarter","Q"),L("quarter",7),ue("Q",Z),ce("Q",function(e,t){t[_e]=3*(k(e)-1)}),I("D",["DD",2],"Do","date"),H("date","D"),L("date",9),ue("D",B),ue("DD",B,z),ue("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),ce(["D","DD"],ye),ce("Do",function(e,t){t[ye]=k(e.match(B)[0])});var nn=Te("Date",!0);I("DDD",["DDDD",3],"DDDo","dayOfYear"),H("dayOfYear","DDD"),L("dayOfYear",4),ue("DDD",K),ue("DDDD",$),ce(["DDD","DDDD"],function(e,t,n){n._dayOfYear=k(e)}),I("m",["mm",2],0,"minute"),H("minute","m"),L("minute",14),ue("m",B),ue("mm",B,z),ce(["m","mm"],pe);var sn=Te("Minutes",!1);I("s",["ss",2],0,"second"),H("second","s"),L("second",15),ue("s",B),ue("ss",B,z),ce(["s","ss"],ve);var rn,an=Te("Seconds",!1);for(I("S",0,0,function(){return~~(this.millisecond()/100)}),I(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),I(0,["SSS",3],0,"millisecond"),I(0,["SSSS",4],0,function(){return 10*this.millisecond()}),I(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),I(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),I(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),I(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),I(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),H("millisecond","ms"),L("millisecond",16),ue("S",K,Z),ue("SS",K,z),ue("SSS",K,$),rn="SSSS";rn.length<=9;rn+="S")ue(rn,ne);function on(e,t){t[we]=k(1e3*("0."+e))}for(rn="S";rn.length<=9;rn+="S")ce(rn,on);var un=Te("Milliseconds",!1);I("z",0,0,"zoneAbbr"),I("zz",0,0,"zoneName");var ln=M.prototype;function dn(e){return e}ln.add=qt,ln.calendar=function(e,t){var n=e||Tt(),s=Nt(n,this).startOf("day"),i=c.calendarFormat(this,s)||"sameElse",r=t&&(x(t[i])?t[i].call(this,n):t[i]);return this.format(r||this.localeData().calendar(i,this,Tt(n)))},ln.clone=function(){return new M(this)},ln.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Nt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=R(t)){case"year":r=Bt(this,s)/12;break;case"month":r=Bt(this,s);break;case"quarter":r=Bt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:D(r)},ln.endOf=function(e){return void 0===(e=R(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},ln.format=function(e){e||(e=this.isUtc()?c.defaultFormatUtc:c.defaultFormat);var t=A(this,e);return this.localeData().postformat(t)},ln.from=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.fromNow=function(e){return this.from(Tt(),e)},ln.to=function(e,t){return this.isValid()&&(S(e)&&e.isValid()||Tt(e).isValid())?At({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},ln.toNow=function(e){return this.to(Tt(),e)},ln.get=function(e){return x(this[e=R(e)])?this[e]():this},ln.invalidAt=function(){return g(this).overflow},ln.isAfter=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=R(l(t)?"millisecond":t))?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},ln.isBefore=function(e,t){var n=S(e)?e:Tt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=R(l(t)?"millisecond":t))?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},ln.isBetween=function(e,t,n,s){return("("===(s=s||"()")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},ln.isSame=function(e,t){var n,s=S(e)?e:Tt(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(t=R(t||"millisecond"))?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},ln.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},ln.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},ln.isValid=function(){return p(this)},ln.lang=Xt,ln.locale=Qt,ln.localeData=Kt,ln.max=bt,ln.min=xt,ln.parsingFlags=function(){return _({},g(this))},ln.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:F[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=C(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(x(this[e=R(e)]))return this[e](t);return this},ln.startOf=function(e){switch(e=R(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},ln.subtract=Jt,ln.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},ln.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},ln.toDate=function(){return new Date(this.valueOf())},ln.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||9999<n.year()?A(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):x(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",A(n,"Z")):A(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},ln.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',s=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=t+'[")]';return this.format(n+s+"-MM-DD[T]HH:mm:ss.SSS"+i)},ln.toJSON=function(){return this.isValid()?this.toISOString():null},ln.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},ln.unix=function(){return Math.floor(this.valueOf()/1e3)},ln.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},ln.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},ln.year=Oe,ln.isLeapYear=function(){return ke(this.year())},ln.weekYear=function(e){return tn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},ln.isoWeekYear=function(e){return tn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},ln.quarter=ln.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},ln.month=Fe,ln.daysInMonth=function(){return Pe(this.year(),this.month())},ln.week=ln.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},ln.isoWeek=ln.isoWeeks=function(e){var t=Ie(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},ln.weeksInYear=function(){var e=this.localeData()._week;return Ae(this.year(),e.dow,e.doy)},ln.isoWeeksInYear=function(){return Ae(this.year(),1,4)},ln.date=nn,ln.day=ln.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},ln.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},ln.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=(n=e,s=this.localeData(),"string"==typeof n?s.weekdaysParse(n)%7||7:isNaN(n)?null:n);return this.day(this.day()%7?t:t-7)}return this.day()||7;var n,s},ln.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},ln.hour=ln.hours=tt,ln.minute=ln.minutes=sn,ln.second=ln.seconds=an,ln.millisecond=ln.milliseconds=un,ln.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=Ut(re,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Gt(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?$t(this,At(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,c.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Gt(this)},ln.utc=function(e){return this.utcOffset(0,e)},ln.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Gt(this),"m")),this},ln.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Ut(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},ln.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?Tt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},ln.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.isValid()&&0<a(e._a,t.toArray())}else this._isDSTShifted=!1;return this._isDSTShifted});var hn=P.prototype;function cn(e,t,n,s){var i=lt(),r=y().set(s,t);return i[n](r,e)}function fn(e,t,n){if(d(e)&&(t=e,e=void 0),e=e||"",null!=t)return cn(e,t,n,"month");var s,i=[];for(s=0;s<12;s++)i[s]=cn(e,s,n,"month");return i}function mn(e,t,n,s){"boolean"==typeof e?d(t)&&(n=t,t=void 0):(t=e,e=!1,d(n=t)&&(n=t,t=void 0)),t=t||"";var i,r=lt(),a=e?r._week.dow:0;if(null!=n)return cn(t,(n+a)%7,s,"day");var o=[];for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,"day");return o}hn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return x(s)?s.call(t,n):s},hn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(e){return this._ordinal.replace("%d",e)},hn.preparse=dn,hn.postformat=dn,hn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return x(i)?i(e,t,n,s):i.replace(/%d/i,e)},hn.pastFuture=function(e,t){var n=this._relativeTime[0<e?"future":"past"];return x(n)?n(t):n.replace(/%s/i,t)},hn.set=function(e){var t,n;for(n in e)x(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},hn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||We).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},hn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[We.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=y([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=Ye.call(this._shortMonthsParse,a))?i:-1!==(i=Ye.call(this._longMonthsParse,a))?i:null:-1!==(i=Ye.call(this._longMonthsParse,a))?i:-1!==(i=Ye.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=y([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},hn.monthsRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Ne.call(this),e?this._monthsStrictRegex:this._monthsRegex):(m(this,"_monthsRegex")||(this._monthsRegex=Ue),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(e){return this._monthsParseExact?(m(this,"_monthsRegex")||Ne.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(m(this,"_monthsShortRegex")||(this._monthsShortRegex=Le),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(e){return Ie(e,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(e,t){return e?o(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone},hn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},hn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},hn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=y([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Ye.call(this._minWeekdaysParse,a))?i:-1!==(i=Ye.call(this._weekdaysParse,a))?i:-1!==(i=Ye.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=y([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},hn.weekdaysRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(m(this,"_weekdaysRegex")||(this._weekdaysRegex=$e),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(m(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(m(this,"_weekdaysRegex")||Be.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(m(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Je),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},hn.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},ot("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===k(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),c.lang=n("moment.lang is deprecated. Use moment.locale instead.",ot),c.langData=n("moment.langData is deprecated. Use moment.localeData instead.",lt);var _n=Math.abs;function yn(e,t,n,s){var i=At(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function pn(e){return 4800*e/146097}function vn(e){return 146097*e/4800}function wn(e){return function(){return this.as(e)}}var Mn=wn("ms"),Sn=wn("s"),Dn=wn("m"),kn=wn("h"),Yn=wn("d"),On=wn("w"),Tn=wn("M"),xn=wn("y");function bn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Pn=bn("milliseconds"),Wn=bn("seconds"),Hn=bn("minutes"),Rn=bn("hours"),Cn=bn("days"),Fn=bn("months"),Ln=bn("years");var Un=Math.round,Nn={ss:44,s:45,m:45,h:22,d:26,M:11};var Gn=Math.abs;function Vn(e){return(0<e)-(e<0)||+e}function En(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Gn(this._milliseconds)/1e3,s=Gn(this._days),i=Gn(this._months);t=D((e=D(n/60))/60),n%=60,e%=60;var r=D(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=Vn(this._months)!==Vn(h)?"-":"",m=Vn(this._days)!==Vn(h)?"-":"",_=Vn(this._milliseconds)!==Vn(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(o?m+o+"D":"")+(u||l||d?"T":"")+(u?_+u+"H":"")+(l?_+l+"M":"")+(d?_+d+"S":"")}var In=Ht.prototype;return In.isValid=function(){return this._isValid},In.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},In.add=function(e,t){return yn(this,e,t,1)},In.subtract=function(e,t){return yn(this,e,t,-1)},In.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=R(e))||"year"===e)return t=this._days+s/864e5,n=this._months+pn(t),"month"===e?n:n/12;switch(t=this._days+Math.round(vn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},In.asMilliseconds=Mn,In.asSeconds=Sn,In.asMinutes=Dn,In.asHours=kn,In.asDays=Yn,In.asWeeks=On,In.asMonths=Tn,In.asYears=xn,In.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12):NaN},In._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return 0<=r&&0<=a&&0<=o||r<=0&&a<=0&&o<=0||(r+=864e5*gn(vn(o)+a),o=a=0),u.milliseconds=r%1e3,e=D(r/1e3),u.seconds=e%60,t=D(e/60),u.minutes=t%60,n=D(t/60),u.hours=n%24,o+=i=D(pn(a+=D(n/24))),a-=gn(vn(i)),s=D(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},In.clone=function(){return At(this)},In.get=function(e){return e=R(e),this.isValid()?this[e+"s"]():NaN},In.milliseconds=Pn,In.seconds=Wn,In.minutes=Hn,In.hours=Rn,In.days=Cn,In.weeks=function(){return D(this.days()/7)},In.months=Fn,In.years=Ln,In.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t,n,s,i,r,a,o,u,l,d,h,c=this.localeData(),f=(n=!e,s=c,i=At(t=this).abs(),r=Un(i.as("s")),a=Un(i.as("m")),o=Un(i.as("h")),u=Un(i.as("d")),l=Un(i.as("M")),d=Un(i.as("y")),(h=r<=Nn.ss&&["s",r]||r<Nn.s&&["ss",r]||a<=1&&["m"]||a<Nn.m&&["mm",a]||o<=1&&["h"]||o<Nn.h&&["hh",o]||u<=1&&["d"]||u<Nn.d&&["dd",u]||l<=1&&["M"]||l<Nn.M&&["MM",l]||d<=1&&["y"]||["yy",d])[2]=n,h[3]=0<+t,h[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,h));return e&&(f=c.pastFuture(+this,f)),c.postformat(f)},In.toISOString=En,In.toString=En,In.toJSON=En,In.locale=Qt,In.localeData=Kt,In.toIsoString=n("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",En),In.lang=Xt,I("X",0,0,"unix"),I("x",0,0,"valueOf"),ue("x",se),ue("X",/[+-]?\d+(\.\d{1,3})?/),ce("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),ce("x",function(e,t,n){n._d=new Date(k(e))}),c.version="2.22.2",e=Tt,c.fn=ln,c.min=function(){return Pt("isBefore",[].slice.call(arguments,0))},c.max=function(){return Pt("isAfter",[].slice.call(arguments,0))},c.now=function(){return Date.now?Date.now():+new Date},c.utc=y,c.unix=function(e){return Tt(1e3*e)},c.months=function(e,t){return fn(e,t,"months")},c.isDate=h,c.locale=ot,c.invalid=v,c.duration=At,c.isMoment=S,c.weekdays=function(e,t,n){return mn(e,t,n,"weekdays")},c.parseZone=function(){return Tt.apply(null,arguments).parseZone()},c.localeData=lt,c.isDuration=Rt,c.monthsShort=function(e,t){return fn(e,t,"monthsShort")},c.weekdaysMin=function(e,t,n){return mn(e,t,n,"weekdaysMin")},c.defineLocale=ut,c.updateLocale=function(e,t){if(null!=t){var n,s,i=nt;null!=(s=at(e))&&(i=s._config),(n=new P(t=b(i,t))).parentLocale=st[e],st[e]=n,ot(e)}else null!=st[e]&&(null!=st[e].parentLocale?st[e]=st[e].parentLocale:null!=st[e]&&delete st[e]);return st[e]},c.locales=function(){return s(st)},c.weekdaysShort=function(e,t,n){return mn(e,t,n,"weekdaysShort")},c.normalizeUnits=R,c.relativeTimeRounding=function(e){return void 0===e?Un:"function"==typeof e&&(Un=e,!0)},c.relativeTimeThreshold=function(e,t){return void 0!==Nn[e]&&(void 0===t?Nn[e]:(Nn[e]=t,"s"===e&&(Nn.ss=t-1),!0))},c.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},c.prototype=ln,c.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"YYYY-[W]WW",MONTH:"YYYY-MM"},c}); -!function(e,d){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?d(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],d):d(e.moment)}(this,function(e){"use strict";return e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,d){switch(d){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}); - -// bootstrap-datetimepicker -!function(a){"use strict";if("function"==typeof define&&define.amd)define(["jquery","moment"],a);else if("object"==typeof exports)module.exports=a(require("jquery"),require("moment"));else{if("undefined"==typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";if("undefined"==typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";a(jQuery,moment)}}(function(a,b){"use strict";if(!b)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");var c=function(c,d){var e,f,g,h,i,j,k,l={},m=!0,n=!1,o=!1,p=0,q=[{clsName:"days",navFnc:"M",navStep:1},{clsName:"months",navFnc:"y",navStep:1},{clsName:"years",navFnc:"y",navStep:10},{clsName:"decades",navFnc:"y",navStep:100}],r=["days","months","years","decades"],s=["top","bottom","auto"],t=["left","right","auto"],u=["default","top","bottom"],v={up:38,38:"up",down:40,40:"down",left:37,37:"left",right:39,39:"right",tab:9,9:"tab",escape:27,27:"escape",enter:13,13:"enter",pageUp:33,33:"pageUp",pageDown:34,34:"pageDown",shift:16,16:"shift",control:17,17:"control",space:32,32:"space",t:84,84:"t",delete:46,46:"delete"},w={},x=function(){return void 0!==b.tz&&void 0!==d.timeZone&&null!==d.timeZone&&""!==d.timeZone},y=function(a){var c;return c=void 0===a||null===a?b():b.isDate(a)||b.isMoment(a)?b(a):x()?b.tz(a,j,d.useStrict,d.timeZone):b(a,j,d.useStrict),x()&&c.tz(d.timeZone),c},z=function(a){if("string"!=typeof a||a.length>1)throw new TypeError("isEnabled expects a single character string parameter");switch(a){case"y":return i.indexOf("Y")!==-1;case"M":return i.indexOf("M")!==-1;case"d":return i.toLowerCase().indexOf("d")!==-1;case"h":case"H":return i.toLowerCase().indexOf("h")!==-1;case"m":return i.indexOf("m")!==-1;case"s":return i.indexOf("s")!==-1;default:return!1}},A=function(){return z("h")||z("m")||z("s")},B=function(){return z("y")||z("M")||z("d")},C=function(){var b=a("<thead>").append(a("<tr>").append(a("<th>").addClass("prev").attr("data-action","previous").append(a("<span>").addClass(d.icons.previous))).append(a("<th>").addClass("picker-switch").attr("data-action","pickerSwitch").attr("colspan",d.calendarWeeks?"6":"5")).append(a("<th>").addClass("next").attr("data-action","next").append(a("<span>").addClass(d.icons.next)))),c=a("<tbody>").append(a("<tr>").append(a("<td>").attr("colspan",d.calendarWeeks?"8":"7")));return[a("<div>").addClass("datepicker-days").append(a("<table>").addClass("table-condensed").append(b).append(a("<tbody>"))),a("<div>").addClass("datepicker-months").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-years").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())),a("<div>").addClass("datepicker-decades").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone()))]},D=function(){var b=a("<tr>"),c=a("<tr>"),e=a("<tr>");return z("h")&&(b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementHour}).addClass("btn").attr("data-action","incrementHours").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-hour").attr({"data-time-component":"hours",title:d.tooltips.pickHour}).attr("data-action","showHours"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementHour}).addClass("btn").attr("data-action","decrementHours").append(a("<span>").addClass(d.icons.down))))),z("m")&&(z("h")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementMinute}).addClass("btn").attr("data-action","incrementMinutes").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-minute").attr({"data-time-component":"minutes",title:d.tooltips.pickMinute}).attr("data-action","showMinutes"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementMinute}).addClass("btn").attr("data-action","decrementMinutes").append(a("<span>").addClass(d.icons.down))))),z("s")&&(z("m")&&(b.append(a("<td>").addClass("separator")),c.append(a("<td>").addClass("separator").html(":")),e.append(a("<td>").addClass("separator"))),b.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.incrementSecond}).addClass("btn").attr("data-action","incrementSeconds").append(a("<span>").addClass(d.icons.up)))),c.append(a("<td>").append(a("<span>").addClass("timepicker-second").attr({"data-time-component":"seconds",title:d.tooltips.pickSecond}).attr("data-action","showSeconds"))),e.append(a("<td>").append(a("<a>").attr({href:"#",tabindex:"-1",title:d.tooltips.decrementSecond}).addClass("btn").attr("data-action","decrementSeconds").append(a("<span>").addClass(d.icons.down))))),h||(b.append(a("<td>").addClass("separator")),c.append(a("<td>").append(a("<button>").addClass("btn btn-primary").attr({"data-action":"togglePeriod",tabindex:"-1",title:d.tooltips.togglePeriod}))),e.append(a("<td>").addClass("separator"))),a("<div>").addClass("timepicker-picker").append(a("<table>").addClass("table-condensed").append([b,c,e]))},E=function(){var b=a("<div>").addClass("timepicker-hours").append(a("<table>").addClass("table-condensed")),c=a("<div>").addClass("timepicker-minutes").append(a("<table>").addClass("table-condensed")),d=a("<div>").addClass("timepicker-seconds").append(a("<table>").addClass("table-condensed")),e=[D()];return z("h")&&e.push(b),z("m")&&e.push(c),z("s")&&e.push(d),e},F=function(){var b=[];return d.showTodayButton&&b.push(a("<td>").append(a("<a>").attr({"data-action":"today",title:d.tooltips.today}).append(a("<span>").addClass(d.icons.today)))),!d.sideBySide&&B()&&A()&&b.push(a("<td>").append(a("<a>").attr({"data-action":"togglePicker",title:d.tooltips.selectTime}).append(a("<span>").addClass(d.icons.time)))),d.showClear&&b.push(a("<td>").append(a("<a>").attr({"data-action":"clear",title:d.tooltips.clear}).append(a("<span>").addClass(d.icons.clear)))),d.showClose&&b.push(a("<td>").append(a("<a>").attr({"data-action":"close",title:d.tooltips.close}).append(a("<span>").addClass(d.icons.close)))),a("<table>").addClass("table-condensed").append(a("<tbody>").append(a("<tr>").append(b)))},G=function(){var b=a("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"),c=a("<div>").addClass("datepicker").append(C()),e=a("<div>").addClass("timepicker").append(E()),f=a("<ul>").addClass("list-unstyled"),g=a("<li>").addClass("picker-switch"+(d.collapse?" accordion-toggle":"")).append(F());return d.inline&&b.removeClass("dropdown-menu"),h&&b.addClass("usetwentyfour"),z("s")&&!h&&b.addClass("wider"),d.sideBySide&&B()&&A()?(b.addClass("timepicker-sbs"),"top"===d.toolbarPlacement&&b.append(g),b.append(a("<div>").addClass("row").append(c.addClass("col-md-6")).append(e.addClass("col-md-6"))),"bottom"===d.toolbarPlacement&&b.append(g),b):("top"===d.toolbarPlacement&&f.append(g),B()&&f.append(a("<li>").addClass(d.collapse&&A()?"collapse in":"").append(c)),"default"===d.toolbarPlacement&&f.append(g),A()&&f.append(a("<li>").addClass(d.collapse&&B()?"collapse":"").append(e)),"bottom"===d.toolbarPlacement&&f.append(g),b.append(f))},H=function(){var b,e={};return b=c.is("input")||d.inline?c.data():c.find("input").data(),b.dateOptions&&b.dateOptions instanceof Object&&(e=a.extend(!0,e,b.dateOptions)),a.each(d,function(a){var c="date"+a.charAt(0).toUpperCase()+a.slice(1);void 0!==b[c]&&(e[a]=b[c])}),e},I=function(){var b,e=(n||c).position(),f=(n||c).offset(),g=d.widgetPositioning.vertical,h=d.widgetPositioning.horizontal;if(d.widgetParent)b=d.widgetParent.append(o);else if(c.is("input"))b=c.after(o).parent();else{if(d.inline)return void(b=c.append(o));b=c,c.children().first().after(o)}if("auto"===g&&(g=f.top+1.5*o.height()>=a(window).height()+a(window).scrollTop()&&o.height()+c.outerHeight()<f.top?"top":"bottom"),"auto"===h&&(h=b.width()<f.left+o.outerWidth()/2&&f.left+o.outerWidth()>a(window).width()?"right":"left"),"top"===g?o.addClass("top").removeClass("bottom"):o.addClass("bottom").removeClass("top"),"right"===h?o.addClass("pull-right"):o.removeClass("pull-right"),"static"===b.css("position")&&(b=b.parents().filter(function(){return"static"!==a(this).css("position")}).first()),0===b.length)throw new Error("datetimepicker component should be placed within a non-static positioned container");o.css({top:"top"===g?"auto":e.top+c.outerHeight(),bottom:"top"===g?b.outerHeight()-(b===c?0:e.top):"auto",left:"left"===h?b===c?0:e.left:"auto",right:"left"===h?"auto":b.outerWidth()-c.outerWidth()-(b===c?0:e.left)})},J=function(a){"dp.change"===a.type&&(a.date&&a.date.isSame(a.oldDate)||!a.date&&!a.oldDate)||c.trigger(a)},K=function(a){"y"===a&&(a="YYYY"),J({type:"dp.update",change:a,viewDate:f.clone()})},L=function(a){o&&(a&&(k=Math.max(p,Math.min(3,k+a))),o.find(".datepicker > div").hide().filter(".datepicker-"+q[k].clsName).show())},M=function(){var b=a("<tr>"),c=f.clone().startOf("w").startOf("d");for(d.calendarWeeks===!0&&b.append(a("<th>").addClass("cw").text("#"));c.isBefore(f.clone().endOf("w"));)b.append(a("<th>").addClass("dow").text(c.format("dd"))),c.add(1,"d");o.find(".datepicker-days thead").append(b)},N=function(a){return d.disabledDates[a.format("YYYY-MM-DD")]===!0},O=function(a){return d.enabledDates[a.format("YYYY-MM-DD")]===!0},P=function(a){return d.disabledHours[a.format("H")]===!0},Q=function(a){return d.enabledHours[a.format("H")]===!0},R=function(b,c){if(!b.isValid())return!1;if(d.disabledDates&&"d"===c&&N(b))return!1;if(d.enabledDates&&"d"===c&&!O(b))return!1;if(d.minDate&&b.isBefore(d.minDate,c))return!1;if(d.maxDate&&b.isAfter(d.maxDate,c))return!1;if(d.daysOfWeekDisabled&&"d"===c&&d.daysOfWeekDisabled.indexOf(b.day())!==-1)return!1;if(d.disabledHours&&("h"===c||"m"===c||"s"===c)&&P(b))return!1;if(d.enabledHours&&("h"===c||"m"===c||"s"===c)&&!Q(b))return!1;if(d.disabledTimeIntervals&&("h"===c||"m"===c||"s"===c)){var e=!1;if(a.each(d.disabledTimeIntervals,function(){if(b.isBetween(this[0],this[1]))return e=!0,!1}),e)return!1}return!0},S=function(){for(var b=[],c=f.clone().startOf("y").startOf("d");c.isSame(f,"y");)b.push(a("<span>").attr("data-action","selectMonth").addClass("month").text(c.format("MMM"))),c.add(1,"M");o.find(".datepicker-months td").empty().append(b)},T=function(){var b=o.find(".datepicker-months"),c=b.find("th"),g=b.find("tbody").find("span");c.eq(0).find("span").attr("title",d.tooltips.prevYear),c.eq(1).attr("title",d.tooltips.selectYear),c.eq(2).find("span").attr("title",d.tooltips.nextYear),b.find(".disabled").removeClass("disabled"),R(f.clone().subtract(1,"y"),"y")||c.eq(0).addClass("disabled"),c.eq(1).text(f.year()),R(f.clone().add(1,"y"),"y")||c.eq(2).addClass("disabled"),g.removeClass("active"),e.isSame(f,"y")&&!m&&g.eq(e.month()).addClass("active"),g.each(function(b){R(f.clone().month(b),"M")||a(this).addClass("disabled")})},U=function(){var a=o.find(".datepicker-years"),b=a.find("th"),c=f.clone().subtract(5,"y"),g=f.clone().add(6,"y"),h="";for(b.eq(0).find("span").attr("title",d.tooltips.prevDecade),b.eq(1).attr("title",d.tooltips.selectDecade),b.eq(2).find("span").attr("title",d.tooltips.nextDecade),a.find(".disabled").removeClass("disabled"),d.minDate&&d.minDate.isAfter(c,"y")&&b.eq(0).addClass("disabled"),b.eq(1).text(c.year()+"-"+g.year()),d.maxDate&&d.maxDate.isBefore(g,"y")&&b.eq(2).addClass("disabled");!c.isAfter(g,"y");)h+='<span data-action="selectYear" class="year'+(c.isSame(e,"y")&&!m?" active":"")+(R(c,"y")?"":" disabled")+'">'+c.year()+"</span>",c.add(1,"y");a.find("td").html(h)},V=function(){var a,c=o.find(".datepicker-decades"),g=c.find("th"),h=b({y:f.year()-f.year()%100-1}),i=h.clone().add(100,"y"),j=h.clone(),k=!1,l=!1,m="";for(g.eq(0).find("span").attr("title",d.tooltips.prevCentury),g.eq(2).find("span").attr("title",d.tooltips.nextCentury),c.find(".disabled").removeClass("disabled"),(h.isSame(b({y:1900}))||d.minDate&&d.minDate.isAfter(h,"y"))&&g.eq(0).addClass("disabled"),g.eq(1).text(h.year()+"-"+i.year()),(h.isSame(b({y:2e3}))||d.maxDate&&d.maxDate.isBefore(i,"y"))&&g.eq(2).addClass("disabled");!h.isAfter(i,"y");)a=h.year()+12,k=d.minDate&&d.minDate.isAfter(h,"y")&&d.minDate.year()<=a,l=d.maxDate&&d.maxDate.isAfter(h,"y")&&d.maxDate.year()<=a,m+='<span data-action="selectDecade" class="decade'+(e.isAfter(h)&&e.year()<=a?" active":"")+(R(h,"y")||k||l?"":" disabled")+'" data-selection="'+(h.year()+6)+'">'+(h.year()+1)+" - "+(h.year()+12)+"</span>",h.add(12,"y");m+="<span></span><span></span><span></span>",c.find("td").html(m),g.eq(1).text(j.year()+1+"-"+h.year())},W=function(){var b,c,g,h=o.find(".datepicker-days"),i=h.find("th"),j=[],k=[];if(B()){for(i.eq(0).find("span").attr("title",d.tooltips.prevMonth),i.eq(1).attr("title",d.tooltips.selectMonth),i.eq(2).find("span").attr("title",d.tooltips.nextMonth),h.find(".disabled").removeClass("disabled"),i.eq(1).text(f.format(d.dayViewHeaderFormat)),R(f.clone().subtract(1,"M"),"M")||i.eq(0).addClass("disabled"),R(f.clone().add(1,"M"),"M")||i.eq(2).addClass("disabled"),b=f.clone().startOf("M").startOf("w").startOf("d"),g=0;g<42;g++)0===b.weekday()&&(c=a("<tr>"),d.calendarWeeks&&c.append('<td class="cw">'+b.week()+"</td>"),j.push(c)),k=["day"],b.isBefore(f,"M")&&k.push("old"),b.isAfter(f,"M")&&k.push("new"),b.isSame(e,"d")&&!m&&k.push("active"),R(b,"d")||k.push("disabled"),b.isSame(y(),"d")&&k.push("today"),0!==b.day()&&6!==b.day()||k.push("weekend"),J({type:"dp.classify",date:b,classNames:k}),c.append('<td data-action="selectDay" data-day="'+b.format("L")+'" class="'+k.join(" ")+'">'+b.date()+"</td>"),b.add(1,"d");h.find("tbody").empty().append(j),T(),U(),V()}},X=function(){var b=o.find(".timepicker-hours table"),c=f.clone().startOf("d"),d=[],e=a("<tr>");for(f.hour()>11&&!h&&c.hour(12);c.isSame(f,"d")&&(h||f.hour()<12&&c.hour()<12||f.hour()>11);)c.hour()%4===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectHour" class="hour'+(R(c,"h")?"":" disabled")+'">'+c.format(h?"HH":"hh")+"</td>"),c.add(1,"h");b.empty().append(d)},Y=function(){for(var b=o.find(".timepicker-minutes table"),c=f.clone().startOf("h"),e=[],g=a("<tr>"),h=1===d.stepping?5:d.stepping;f.isSame(c,"h");)c.minute()%(4*h)===0&&(g=a("<tr>"),e.push(g)),g.append('<td data-action="selectMinute" class="minute'+(R(c,"m")?"":" disabled")+'">'+c.format("mm")+"</td>"),c.add(h,"m");b.empty().append(e)},Z=function(){for(var b=o.find(".timepicker-seconds table"),c=f.clone().startOf("m"),d=[],e=a("<tr>");f.isSame(c,"m");)c.second()%20===0&&(e=a("<tr>"),d.push(e)),e.append('<td data-action="selectSecond" class="second'+(R(c,"s")?"":" disabled")+'">'+c.format("ss")+"</td>"),c.add(5,"s");b.empty().append(d)},$=function(){var a,b,c=o.find(".timepicker span[data-time-component]");h||(a=o.find(".timepicker [data-action=togglePeriod]"),b=e.clone().add(e.hours()>=12?-12:12,"h"),a.text(e.format("A")),R(b,"h")?a.removeClass("disabled"):a.addClass("disabled")),c.filter("[data-time-component=hours]").text(e.format(h?"HH":"hh")),c.filter("[data-time-component=minutes]").text(e.format("mm")),c.filter("[data-time-component=seconds]").text(e.format("ss")),X(),Y(),Z()},_=function(){o&&(W(),$())},aa=function(a){var b=m?null:e;if(!a)return m=!0,g.val(""),c.data("date",""),J({type:"dp.change",date:!1,oldDate:b}),void _();if(a=a.clone().locale(d.locale),x()&&a.tz(d.timeZone),1!==d.stepping)for(a.minutes(Math.round(a.minutes()/d.stepping)*d.stepping).seconds(0);d.minDate&&a.isBefore(d.minDate);)a.add(d.stepping,"minutes");R(a)?(e=a,f=e.clone(),g.val(e.format(i)),c.data("date",e.format(i)),m=!1,_(),J({type:"dp.change",date:e.clone(),oldDate:b})):(d.keepInvalid?J({type:"dp.change",date:a,oldDate:b}):g.val(m?"":e.format(i)),J({type:"dp.error",date:a,oldDate:b}))},ba=function(){var b=!1;return o?(o.find(".collapse").each(function(){var c=a(this).data("collapse");return!c||!c.transitioning||(b=!0,!1)}),b?l:(n&&n.hasClass("btn")&&n.toggleClass("active"),o.hide(),a(window).off("resize",I),o.off("click","[data-action]"),o.off("mousedown",!1),o.remove(),o=!1,J({type:"dp.hide",date:e.clone()}),g.blur(),f=e.clone(),l)):l},ca=function(){aa(null)},da=function(a){return void 0===d.parseInputDate?(!b.isMoment(a)||a instanceof Date)&&(a=y(a)):a=d.parseInputDate(a),a},ea={next:function(){var a=q[k].navFnc;f.add(q[k].navStep,a),W(),K(a)},previous:function(){var a=q[k].navFnc;f.subtract(q[k].navStep,a),W(),K(a)},pickerSwitch:function(){L(1)},selectMonth:function(b){var c=a(b.target).closest("tbody").find("span").index(a(b.target));f.month(c),k===p?(aa(e.clone().year(f.year()).month(f.month())),d.inline||ba()):(L(-1),W()),K("M")},selectYear:function(b){var c=parseInt(a(b.target).text(),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDecade:function(b){var c=parseInt(a(b.target).data("selection"),10)||0;f.year(c),k===p?(aa(e.clone().year(f.year())),d.inline||ba()):(L(-1),W()),K("YYYY")},selectDay:function(b){var c=f.clone();a(b.target).is(".old")&&c.subtract(1,"M"),a(b.target).is(".new")&&c.add(1,"M"),aa(c.date(parseInt(a(b.target).text(),10))),A()||d.keepOpen||d.inline||ba()},incrementHours:function(){var a=e.clone().add(1,"h");R(a,"h")&&aa(a)},incrementMinutes:function(){var a=e.clone().add(d.stepping,"m");R(a,"m")&&aa(a)},incrementSeconds:function(){var a=e.clone().add(1,"s");R(a,"s")&&aa(a)},decrementHours:function(){var a=e.clone().subtract(1,"h");R(a,"h")&&aa(a)},decrementMinutes:function(){var a=e.clone().subtract(d.stepping,"m");R(a,"m")&&aa(a)},decrementSeconds:function(){var a=e.clone().subtract(1,"s");R(a,"s")&&aa(a)},togglePeriod:function(){aa(e.clone().add(e.hours()>=12?-12:12,"h"))},togglePicker:function(b){var c,e=a(b.target),f=e.closest("ul"),g=f.find(".in"),h=f.find(".collapse:not(.in)");if(g&&g.length){if(c=g.data("collapse"),c&&c.transitioning)return;g.collapse?(g.collapse("hide"),h.collapse("show")):(g.removeClass("in"),h.addClass("in")),e.is("span")?e.toggleClass(d.icons.time+" "+d.icons.date):e.find("span").toggleClass(d.icons.time+" "+d.icons.date)}},showPicker:function(){o.find(".timepicker > div:not(.timepicker-picker)").hide(),o.find(".timepicker .timepicker-picker").show()},showHours:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-hours").show()},showMinutes:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){o.find(".timepicker .timepicker-picker").hide(),o.find(".timepicker .timepicker-seconds").show()},selectHour:function(b){var c=parseInt(a(b.target).text(),10);h||(e.hours()>=12?12!==c&&(c+=12):12===c&&(c=0)),aa(e.clone().hours(c)),ea.showPicker.call(l)},selectMinute:function(b){aa(e.clone().minutes(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},selectSecond:function(b){aa(e.clone().seconds(parseInt(a(b.target).text(),10))),ea.showPicker.call(l)},clear:ca,today:function(){var a=y();R(a,"d")&&aa(a)},close:ba},fa=function(b){return!a(b.currentTarget).is(".disabled")&&(ea[a(b.currentTarget).data("action")].apply(l,arguments),!1)},ga=function(){var b,c={year:function(a){return a.month(0).date(1).hours(0).seconds(0).minutes(0)},month:function(a){return a.date(1).hours(0).seconds(0).minutes(0)},day:function(a){return a.hours(0).seconds(0).minutes(0)},hour:function(a){return a.seconds(0).minutes(0)},minute:function(a){return a.seconds(0)}};return g.prop("disabled")||!d.ignoreReadonly&&g.prop("readonly")||o?l:(void 0!==g.val()&&0!==g.val().trim().length?aa(da(g.val().trim())):m&&d.useCurrent&&(d.inline||g.is("input")&&0===g.val().trim().length)&&(b=y(),"string"==typeof d.useCurrent&&(b=c[d.useCurrent](b)),aa(b)),o=G(),M(),S(),o.find(".timepicker-hours").hide(),o.find(".timepicker-minutes").hide(),o.find(".timepicker-seconds").hide(),_(),L(),a(window).on("resize",I),o.on("click","[data-action]",fa),o.on("mousedown",!1),n&&n.hasClass("btn")&&n.toggleClass("active"),I(),o.show(),d.focusOnShow&&!g.is(":focus")&&g.focus(),J({type:"dp.show"}),l)},ha=function(){return o?ba():ga()},ia=function(a){var b,c,e,f,g=null,h=[],i={},j=a.which,k="p";w[j]=k;for(b in w)w.hasOwnProperty(b)&&w[b]===k&&(h.push(b),parseInt(b,10)!==j&&(i[b]=!0));for(b in d.keyBinds)if(d.keyBinds.hasOwnProperty(b)&&"function"==typeof d.keyBinds[b]&&(e=b.split(" "),e.length===h.length&&v[j]===e[e.length-1])){for(f=!0,c=e.length-2;c>=0;c--)if(!(v[e[c]]in i)){f=!1;break}if(f){g=d.keyBinds[b];break}}g&&(g.call(l,o),a.stopPropagation(),a.preventDefault())},ja=function(a){w[a.which]="r",a.stopPropagation(),a.preventDefault()},ka=function(b){var c=a(b.target).val().trim(),d=c?da(c):null;return aa(d),b.stopImmediatePropagation(),!1},la=function(){g.on({change:ka,blur:d.debug?"":ba,keydown:ia,keyup:ja,focus:d.allowInputToggle?ga:""}),c.is("input")?g.on({focus:ga}):n&&(n.on("click",ha),n.on("mousedown",!1))},ma=function(){g.off({change:ka,blur:blur,keydown:ia,keyup:ja,focus:d.allowInputToggle?ba:""}),c.is("input")?g.off({focus:ga}):n&&(n.off("click",ha),n.off("mousedown",!1))},na=function(b){var c={};return a.each(b,function(){var a=da(this);a.isValid()&&(c[a.format("YYYY-MM-DD")]=!0)}),!!Object.keys(c).length&&c},oa=function(b){var c={};return a.each(b,function(){c[this]=!0}),!!Object.keys(c).length&&c},pa=function(){var a=d.format||"L LT";i=a.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){var b=e.localeData().longDateFormat(a)||a;return b.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,function(a){return e.localeData().longDateFormat(a)||a})}),j=d.extraFormats?d.extraFormats.slice():[],j.indexOf(a)<0&&j.indexOf(i)<0&&j.push(i),h=i.toLowerCase().indexOf("a")<1&&i.replace(/\[.*?\]/g,"").indexOf("h")<1,z("y")&&(p=2),z("M")&&(p=1),z("d")&&(p=0),k=Math.max(p,k),m||aa(e)};if(l.destroy=function(){ba(),ma(),c.removeData("DateTimePicker"),c.removeData("date")},l.toggle=ha,l.show=ga,l.hide=ba,l.disable=function(){return ba(),n&&n.hasClass("btn")&&n.addClass("disabled"),g.prop("disabled",!0),l},l.enable=function(){return n&&n.hasClass("btn")&&n.removeClass("disabled"),g.prop("disabled",!1),l},l.ignoreReadonly=function(a){if(0===arguments.length)return d.ignoreReadonly;if("boolean"!=typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");return d.ignoreReadonly=a,l},l.options=function(b){if(0===arguments.length)return a.extend(!0,{},d);if(!(b instanceof Object))throw new TypeError("options() options parameter should be an object");return a.extend(!0,d,b),a.each(d,function(a,b){if(void 0===l[a])throw new TypeError("option "+a+" is not recognized!");l[a](b)}),l},l.date=function(a){if(0===arguments.length)return m?null:e.clone();if(!(null===a||"string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");return aa(null===a?null:da(a)),l},l.format=function(a){if(0===arguments.length)return d.format;if("string"!=typeof a&&("boolean"!=typeof a||a!==!1))throw new TypeError("format() expects a string or boolean:false parameter "+a);return d.format=a,i&&pa(),l},l.timeZone=function(a){if(0===arguments.length)return d.timeZone;if("string"!=typeof a)throw new TypeError("newZone() expects a string parameter");return d.timeZone=a,l},l.dayViewHeaderFormat=function(a){if(0===arguments.length)return d.dayViewHeaderFormat;if("string"!=typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");return d.dayViewHeaderFormat=a,l},l.extraFormats=function(a){if(0===arguments.length)return d.extraFormats;if(a!==!1&&!(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");return d.extraFormats=a,j&&pa(),l},l.disabledDates=function(b){if(0===arguments.length)return d.disabledDates?a.extend({},d.disabledDates):d.disabledDates;if(!b)return d.disabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");return d.disabledDates=na(b),d.enabledDates=!1,_(),l},l.enabledDates=function(b){if(0===arguments.length)return d.enabledDates?a.extend({},d.enabledDates):d.enabledDates;if(!b)return d.enabledDates=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");return d.enabledDates=na(b),d.disabledDates=!1,_(),l},l.daysOfWeekDisabled=function(a){if(0===arguments.length)return d.daysOfWeekDisabled.splice(0);if("boolean"==typeof a&&!a)return d.daysOfWeekDisabled=!1,_(),l;if(!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");if(d.daysOfWeekDisabled=a.reduce(function(a,b){return b=parseInt(b,10),b>6||b<0||isNaN(b)?a:(a.indexOf(b)===-1&&a.push(b),a)},[]).sort(),d.useCurrent&&!d.keepInvalid){for(var b=0;!R(e,"d");){if(e.add(1,"d"),31===b)throw"Tried 31 times to find a valid date";b++}aa(e)}return _(),l},l.maxDate=function(a){if(0===arguments.length)return d.maxDate?d.maxDate.clone():d.maxDate;if("boolean"==typeof a&&a===!1)return d.maxDate=!1,_(),l;"string"==typeof a&&("now"!==a&&"moment"!==a||(a=y()));var b=da(a);if(!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: "+a);if(d.minDate&&b.isBefore(d.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: "+b.format(i));return d.maxDate=b,d.useCurrent&&!d.keepInvalid&&e.isAfter(a)&&aa(d.maxDate),f.isAfter(b)&&(f=b.clone().subtract(d.stepping,"m")),_(),l},l.minDate=function(a){if(0===arguments.length)return d.minDate?d.minDate.clone():d.minDate;if("boolean"==typeof a&&a===!1)return d.minDate=!1,_(),l;"string"==typeof a&&("now"!==a&&"moment"!==a||(a=y()));var b=da(a);if(!b.isValid())throw new TypeError("minDate() Could not parse date parameter: "+a);if(d.maxDate&&b.isAfter(d.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: "+b.format(i));return d.minDate=b,d.useCurrent&&!d.keepInvalid&&e.isBefore(a)&&aa(d.minDate),f.isBefore(b)&&(f=b.clone().add(d.stepping,"m")),_(),l},l.defaultDate=function(a){if(0===arguments.length)return d.defaultDate?d.defaultDate.clone():d.defaultDate;if(!a)return d.defaultDate=!1,l;"string"==typeof a&&(a="now"===a||"moment"===a?y():y(a));var b=da(a);if(!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: "+a);if(!R(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");return d.defaultDate=b,(d.defaultDate&&d.inline||""===g.val().trim())&&aa(d.defaultDate),l},l.locale=function(a){if(0===arguments.length)return d.locale;if(!b.localeData(a))throw new TypeError("locale() locale "+a+" is not loaded from moment locales!");return d.locale=a,e.locale(d.locale),f.locale(d.locale),i&&pa(),o&&(ba(),ga()),l},l.stepping=function(a){return 0===arguments.length?d.stepping:(a=parseInt(a,10),(isNaN(a)||a<1)&&(a=1),d.stepping=a,l)},l.useCurrent=function(a){var b=["year","month","day","hour","minute"];if(0===arguments.length)return d.useCurrent;if("boolean"!=typeof a&&"string"!=typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");if("string"==typeof a&&b.indexOf(a.toLowerCase())===-1)throw new TypeError("useCurrent() expects a string parameter of "+b.join(", "));return d.useCurrent=a,l},l.collapse=function(a){if(0===arguments.length)return d.collapse;if("boolean"!=typeof a)throw new TypeError("collapse() expects a boolean parameter");return d.collapse===a?l:(d.collapse=a,o&&(ba(),ga()),l)},l.icons=function(b){if(0===arguments.length)return a.extend({},d.icons);if(!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");return a.extend(d.icons,b),o&&(ba(),ga()),l},l.tooltips=function(b){if(0===arguments.length)return a.extend({},d.tooltips);if(!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");return a.extend(d.tooltips,b),o&&(ba(),ga()),l},l.useStrict=function(a){if(0===arguments.length)return d.useStrict;if("boolean"!=typeof a)throw new TypeError("useStrict() expects a boolean parameter");return d.useStrict=a,l},l.sideBySide=function(a){if(0===arguments.length)return d.sideBySide;if("boolean"!=typeof a)throw new TypeError("sideBySide() expects a boolean parameter");return d.sideBySide=a,o&&(ba(),ga()),l},l.viewMode=function(a){if(0===arguments.length)return d.viewMode;if("string"!=typeof a)throw new TypeError("viewMode() expects a string parameter");if(r.indexOf(a)===-1)throw new TypeError("viewMode() parameter must be one of ("+r.join(", ")+") value");return d.viewMode=a,k=Math.max(r.indexOf(a),p),L(),l},l.toolbarPlacement=function(a){if(0===arguments.length)return d.toolbarPlacement;if("string"!=typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");if(u.indexOf(a)===-1)throw new TypeError("toolbarPlacement() parameter must be one of ("+u.join(", ")+") value");return d.toolbarPlacement=a,o&&(ba(),ga()),l},l.widgetPositioning=function(b){if(0===arguments.length)return a.extend({},d.widgetPositioning);if("[object Object]"!=={}.toString.call(b))throw new TypeError("widgetPositioning() expects an object variable");if(b.horizontal){if("string"!=typeof b.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");if(b.horizontal=b.horizontal.toLowerCase(),t.indexOf(b.horizontal)===-1)throw new TypeError("widgetPositioning() expects horizontal parameter to be one of ("+t.join(", ")+")");d.widgetPositioning.horizontal=b.horizontal}if(b.vertical){if("string"!=typeof b.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");if(b.vertical=b.vertical.toLowerCase(),s.indexOf(b.vertical)===-1)throw new TypeError("widgetPositioning() expects vertical parameter to be one of ("+s.join(", ")+")");d.widgetPositioning.vertical=b.vertical}return _(),l},l.calendarWeeks=function(a){if(0===arguments.length)return d.calendarWeeks;if("boolean"!=typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");return d.calendarWeeks=a,_(),l},l.showTodayButton=function(a){if(0===arguments.length)return d.showTodayButton;if("boolean"!=typeof a)throw new TypeError("showTodayButton() expects a boolean parameter");return d.showTodayButton=a,o&&(ba(),ga()),l},l.showClear=function(a){if(0===arguments.length)return d.showClear;if("boolean"!=typeof a)throw new TypeError("showClear() expects a boolean parameter");return d.showClear=a,o&&(ba(),ga()),l},l.widgetParent=function(b){if(0===arguments.length)return d.widgetParent;if("string"==typeof b&&(b=a(b)),null!==b&&"string"!=typeof b&&!(b instanceof a))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");return d.widgetParent=b,o&&(ba(),ga()),l},l.keepOpen=function(a){if(0===arguments.length)return d.keepOpen;if("boolean"!=typeof a)throw new TypeError("keepOpen() expects a boolean parameter");return d.keepOpen=a,l},l.focusOnShow=function(a){if(0===arguments.length)return d.focusOnShow;if("boolean"!=typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");return d.focusOnShow=a,l},l.inline=function(a){if(0===arguments.length)return d.inline;if("boolean"!=typeof a)throw new TypeError("inline() expects a boolean parameter");return d.inline=a,l},l.clear=function(){return ca(),l},l.keyBinds=function(a){return 0===arguments.length?d.keyBinds:(d.keyBinds=a,l)},l.getMoment=function(a){return y(a)},l.debug=function(a){if("boolean"!=typeof a)throw new TypeError("debug() expects a boolean parameter");return d.debug=a,l},l.allowInputToggle=function(a){if(0===arguments.length)return d.allowInputToggle;if("boolean"!=typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");return d.allowInputToggle=a,l},l.showClose=function(a){if(0===arguments.length)return d.showClose;if("boolean"!=typeof a)throw new TypeError("showClose() expects a boolean parameter");return d.showClose=a,l},l.keepInvalid=function(a){if(0===arguments.length)return d.keepInvalid;if("boolean"!=typeof a)throw new TypeError("keepInvalid() expects a boolean parameter"); -return d.keepInvalid=a,l},l.datepickerInput=function(a){if(0===arguments.length)return d.datepickerInput;if("string"!=typeof a)throw new TypeError("datepickerInput() expects a string parameter");return d.datepickerInput=a,l},l.parseInputDate=function(a){if(0===arguments.length)return d.parseInputDate;if("function"!=typeof a)throw new TypeError("parseInputDate() sholud be as function");return d.parseInputDate=a,l},l.disabledTimeIntervals=function(b){if(0===arguments.length)return d.disabledTimeIntervals?a.extend({},d.disabledTimeIntervals):d.disabledTimeIntervals;if(!b)return d.disabledTimeIntervals=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");return d.disabledTimeIntervals=b,_(),l},l.disabledHours=function(b){if(0===arguments.length)return d.disabledHours?a.extend({},d.disabledHours):d.disabledHours;if(!b)return d.disabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("disabledHours() expects an array parameter");if(d.disabledHours=oa(b),d.enabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.enabledHours=function(b){if(0===arguments.length)return d.enabledHours?a.extend({},d.enabledHours):d.enabledHours;if(!b)return d.enabledHours=!1,_(),l;if(!(b instanceof Array))throw new TypeError("enabledHours() expects an array parameter");if(d.enabledHours=oa(b),d.disabledHours=!1,d.useCurrent&&!d.keepInvalid){for(var c=0;!R(e,"h");){if(e.add(1,"h"),24===c)throw"Tried 24 times to find a valid date";c++}aa(e)}return _(),l},l.viewDate=function(a){if(0===arguments.length)return f.clone();if(!a)return f=e.clone(),l;if(!("string"==typeof a||b.isMoment(a)||a instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");return f=da(a),K(),l},c.is("input"))g=c;else if(g=c.find(d.datepickerInput),0===g.length)g=c.find("input");else if(!g.is("input"))throw new Error('CSS class "'+d.datepickerInput+'" cannot be applied to non input element');if(c.hasClass("input-group")&&(n=0===c.find(".datepickerbutton").length?c.find(".input-group-addon"):c.find(".datepickerbutton")),!d.inline&&!g.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");return e=y(),f=e.clone(),a.extend(!0,d,H()),l.options(d),pa(),la(),g.prop("disabled")&&l.disable(),g.is("input")&&0!==g.val().trim().length?aa(da(g.val().trim())):d.defaultDate&&void 0===g.attr("placeholder")&&aa(d.defaultDate),d.inline&&ga(),l};return a.fn.datetimepicker=function(b){b=b||{};var d,e=Array.prototype.slice.call(arguments,1),f=!0,g=["destroy","hide","show","toggle"];if("object"==typeof b)return this.each(function(){var d,e=a(this);e.data("DateTimePicker")||(d=a.extend(!0,{},a.fn.datetimepicker.defaults,b),e.data("DateTimePicker",c(e,d)))});if("string"==typeof b)return this.each(function(){var c=a(this),g=c.data("DateTimePicker");if(!g)throw new Error('bootstrap-datetimepicker("'+b+'") method was called on an element that is not using DateTimePicker');d=g[b].apply(g,e),f=d===g}),f||a.inArray(b,g)>-1?this:d;throw new TypeError("Invalid arguments for DateTimePicker: "+b)},a.fn.datetimepicker.defaults={timeZone:"",format:!1,dayViewHeaderFormat:"MMMM YYYY",extraFormats:!1,stepping:1,minDate:!1,maxDate:!1,useCurrent:!0,collapse:!0,locale:b.locale(),defaultDate:!1,disabledDates:!1,enabledDates:!1,icons:{time:"glyphicon glyphicon-time",date:"glyphicon glyphicon-calendar",up:"glyphicon glyphicon-chevron-up",down:"glyphicon glyphicon-chevron-down",previous:"glyphicon glyphicon-chevron-left",next:"glyphicon glyphicon-chevron-right",today:"glyphicon glyphicon-screenshot",clear:"glyphicon glyphicon-trash",close:"glyphicon glyphicon-remove"},tooltips:{today:"Go to today",clear:"Clear selection",close:"Close the picker",selectMonth:"Select Month",prevMonth:"Previous Month",nextMonth:"Next Month",selectYear:"Select Year",prevYear:"Previous Year",nextYear:"Next Year",selectDecade:"Select Decade",prevDecade:"Previous Decade",nextDecade:"Next Decade",prevCentury:"Previous Century",nextCentury:"Next Century",pickHour:"Pick Hour",incrementHour:"Increment Hour",decrementHour:"Decrement Hour",pickMinute:"Pick Minute",incrementMinute:"Increment Minute",decrementMinute:"Decrement Minute",pickSecond:"Pick Second",incrementSecond:"Increment Second",decrementSecond:"Decrement Second",togglePeriod:"Toggle Period",selectTime:"Select Time"},useStrict:!1,sideBySide:!1,daysOfWeekDisabled:!1,calendarWeeks:!1,viewMode:"days",toolbarPlacement:"default",showTodayButton:!1,showClear:!1,showClose:!1,widgetPositioning:{horizontal:"auto",vertical:"auto"},widgetParent:null,ignoreReadonly:!1,keepOpen:!1,focusOnShow:!0,inline:!1,keepInvalid:!1,datepickerInput:".datepickerinput",keyBinds:{up:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(7,"d")):this.date(b.clone().add(this.stepping(),"m"))}},down:function(a){if(!a)return void this.show();var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(7,"d")):this.date(b.clone().subtract(this.stepping(),"m"))},"control up":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().subtract(1,"y")):this.date(b.clone().add(1,"h"))}},"control down":function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")?this.date(b.clone().add(1,"y")):this.date(b.clone().subtract(1,"h"))}},left:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"d"))}},right:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"d"))}},pageUp:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().subtract(1,"M"))}},pageDown:function(a){if(a){var b=this.date()||this.getMoment();a.find(".datepicker").is(":visible")&&this.date(b.clone().add(1,"M"))}},enter:function(){this.hide()},escape:function(){this.hide()},"control space":function(a){a&&a.find(".timepicker").is(":visible")&&a.find('.btn[data-action="togglePeriod"]').click()},t:function(){this.date(this.getMoment())},delete:function(){this.clear()}},debug:!1,allowInputToggle:!1,disabledTimeIntervals:!1,disabledHours:!1,enabledHours:!1,viewDate:!1},a.fn.datetimepicker}); \ No newline at end of file diff --git a/public/vendor/bootstrap-select-1.14.0/js/bootstrap-select.min.js b/public/vendor/bootstrap-select-1.14.0/js/bootstrap-select.min.js index 041a03c222f600d530d7df810834af35aee42314..25eb7e75c4fc8474d30545a4a1fcbc1bde8e0afc 100755 --- a/public/vendor/bootstrap-select-1.14.0/js/bootstrap-select.min.js +++ b/public/vendor/bootstrap-select-1.14.0/js/bootstrap-select.min.js @@ -4,5 +4,4 @@ * Copyright 2012-2022 SnapAppointments, LLC * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE) */ -!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){!function($){"use strict";var M=["sanitize","whiteList","sanitizeFn"],W=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],P={"*":["class","dir","id","lang","role","tabindex","style",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},B=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,R=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i,U=["title","placeholder"];function S(e,t,i){if(i&&"function"==typeof i)return i(e);for(var s=Object.keys(t),n=0,o=e.length;n<o;n++)for(var l=e[n].querySelectorAll("*"),r=0,a=l.length;r<a;r++){var c=l[r],d=c.nodeName.toLowerCase();if(-1===s.indexOf(d))c.parentNode.removeChild(c);else for(var h=[].slice.call(c.attributes),p=[].concat(t["*"]||[],t[d]||[]),u=0,f=h.length;u<f;u++){var m=h[u];!function(e,t){var i=e.nodeName.toLowerCase();if(-1!==$.inArray(i,t))return-1===$.inArray(i,W)||Boolean(e.nodeValue.match(B)||e.nodeValue.match(R));for(var s=$(t).filter(function(e,t){return t instanceof RegExp}),n=0,o=s.length;n<o;n++)if(i.match(s[n]))return 1}(m,p)&&c.removeAttribute(m.nodeName)}}}function d(t){var i,s={};return U.forEach(function(e){(i=t.attr(e))&&(s[e]=i)}),!s.placeholder&&s.title&&(s.placeholder=s.title),s}if(!("classList"in document.createElement("_"))&&"Element"in(i=window)){var t="classList",e="prototype",i=i.Element[e],s=Object,n=function(){var i=$(this);return{add:function(e){return e=Array.prototype.slice.call(arguments).join(" "),i.addClass(e)},remove:function(e){return e=Array.prototype.slice.call(arguments).join(" "),i.removeClass(e)},toggle:function(e,t){return i.toggleClass(e,t)},contains:function(e){return i.hasClass(e)}}};if(s.defineProperty){var o={get:n,enumerable:!0,configurable:!0};try{s.defineProperty(i,t,o)}catch(e){void 0!==e.number&&-2146823252!==e.number||(o.enumerable=!1,s.defineProperty(i,t,o))}}else s[e].__defineGetter__&&i.__defineGetter__(t,n)}var l,r,a,c,o=document.createElement("_");function h(e){if(null==this)throw new TypeError;var t=String(this);if(e&&"[object RegExp]"==c.call(e))throw new TypeError;var i=t.length,s=String(e),n=s.length,e=1<arguments.length?arguments[1]:void 0,e=e?Number(e):0,o=(e!=e&&(e=0),Math.min(Math.max(e,0),i));if(i<n+o)return!1;for(var l=-1;++l<n;)if(t.charCodeAt(o+l)!=s.charCodeAt(l))return!1;return!0}function y(){var e=this.selectpicker.main.data,t=(e=this.options.source.data||this.options.source.search?Object.values(this.selectpicker.optionValuesDataMap):e).filter(function(e){return!!e.selected&&(!this.options.hideDisabled||!e.disabled)},this);if(this.options.source.data&&!this.multiple&&1<t.length){for(var i=0;i<t.length-1;i++)t[i].selected=!1;t=[t[t.length-1]]}return t}function x(e){for(var t,i=[],s=e||y.call(this),n=0,o=s.length;n<o;n++)(t=s[n]).disabled||i.push(void 0===t.value?t.text:t.value);return this.multiple?i:i.length?i[0]:null}o.classList.add("c1","c2"),o.classList.contains("c2")||(l=DOMTokenList.prototype.add,r=DOMTokenList.prototype.remove,DOMTokenList.prototype.add=function(){Array.prototype.forEach.call(arguments,l.bind(this))},DOMTokenList.prototype.remove=function(){Array.prototype.forEach.call(arguments,r.bind(this))}),o.classList.toggle("c3",!1),o.classList.contains("c3")&&(a=DOMTokenList.prototype.toggle,DOMTokenList.prototype.toggle=function(e,t){return 1 in arguments&&!this.contains(e)==!t?t:a.call(this,e)}),o=null,Object.values="function"==typeof Object.values?Object.values:function(t){return Object.keys(t).map(function(e){return t[e]})},String.prototype.startsWith||(c={}.toString,Object.defineProperty?Object.defineProperty(String.prototype,"startsWith",{value:h,configurable:!0,writable:!0}):String.prototype.startsWith=h);var p={useDefault:!1,_set:$.valHooks.select.set},E=($.valHooks.select.set=function(e,t){return t&&!p.useDefault&&$(e).data("selected",!0),p._set.apply(this,arguments)},null),V=function(){try{return new Event("change"),!0}catch(e){return!1}}();function b(e,t,i,s){for(var n=["display","subtext","tokens"],o=!1,l=0;l<n.length;l++){var r=n[l],a=e[r];if(a&&(a=a.toString(),"display"===r&&(a=a.replace(/<[^>]+>/g,"")),a=(a=s?u(a):a).toUpperCase(),o="function"==typeof i?i(a,t):"contains"===i?0<=a.indexOf(t):a.startsWith(t)))break}return o}function v(e){return parseInt(e,10)||0}$.fn.triggerNative=function(e){var t,i=this[0];i.dispatchEvent&&(V?t=new Event(e,{bubbles:!0}):(t=document.createEvent("Event")).initEvent(e,!0,!1),i.dispatchEvent(t))};var j={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"},_=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,F=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\u1ab0-\\u1aff\\u1dc0-\\u1dff]","g");function G(e){return j[e]}function u(e){return(e=e.toString())&&e.replace(_,G).replace(F,"")}f={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},s="(?:"+Object.keys(f).join("|")+")",q=RegExp(s),K=RegExp(s,"g");var f,q,K,k=function(e){return q.test(e=null==e?"":""+e)?e.replace(K,Q):e};function Q(e){return f[e]}var Y={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"},Z=27,J=13,w=32,I=9,C=38,O=40,m=window.Dropdown||bootstrap.Dropdown;function X(){var t;try{t=$.fn.dropdown.Constructor.VERSION}catch(e){t=m.VERSION}return t}var g={success:!1,major:"3"};try{g.full=(X()||"").split(" ")[0].split("."),g.major=g.full[0],g.success=!0}catch(e){}var ee=0,A=".bs.select",T={DISABLED:"disabled",DIVIDER:"divider",SHOW:"open",DROPUP:"dropup",MENU:"dropdown-menu",MENURIGHT:"dropdown-menu-right",MENULEFT:"dropdown-menu-left",BUTTONCLASS:"btn-default",POPOVERHEADER:"popover-title",ICONBASE:"glyphicon",TICKICON:"glyphicon-ok"},z={MENU:"."+T.MENU,DATA_TOGGLE:'data-bs-toggle="dropdown"'},D={div:document.createElement("div"),span:document.createElement("span"),i:document.createElement("i"),subtext:document.createElement("small"),a:document.createElement("a"),li:document.createElement("li"),whitespace:document.createTextNode("\xa0"),fragment:document.createDocumentFragment(),option:document.createElement("option")},te=(D.selectedOption=D.option.cloneNode(!1),D.selectedOption.setAttribute("selected",!0),D.noResults=D.li.cloneNode(!1),D.noResults.className="no-results",D.a.setAttribute("role","option"),D.a.className="dropdown-item",D.subtext.className="text-muted",D.text=D.span.cloneNode(!1),D.text.className="text",D.checkMark=D.span.cloneNode(!1),new RegExp(C+"|"+O)),ie=new RegExp("^"+I+"$|"+Z),L={li:function(e,t,i){var s=D.li.cloneNode(!1);return e&&(1===e.nodeType||11===e.nodeType?s.appendChild(e):s.innerHTML=e),void 0!==t&&""!==t&&(s.className=t),null!=i&&s.classList.add("optgroup-"+i),s},a:function(e,t,i){var s=D.a.cloneNode(!0);return e&&(11===e.nodeType?s.appendChild(e):s.insertAdjacentHTML("beforeend",e)),void 0!==t&&""!==t&&s.classList.add.apply(s.classList,t.split(/\s+/)),i&&s.setAttribute("style",i),s},text:function(e,t){var i,s,n=D.text.cloneNode(!1);if(e.content?n.innerHTML=e.content:(n.textContent=e.text,e.icon&&(i=D.whitespace.cloneNode(!1),(s=(!0===t?D.i:D.span).cloneNode(!1)).className=this.options.iconBase+" "+e.icon,D.fragment.appendChild(s),D.fragment.appendChild(i)),e.subtext&&((s=D.subtext.cloneNode(!1)).textContent=e.subtext,n.appendChild(s))),!0===t)for(;0<n.childNodes.length;)D.fragment.appendChild(n.childNodes[0]);else D.fragment.appendChild(n);return D.fragment},label:function(e){var t,i,s=D.text.cloneNode(!1);return s.innerHTML=e.display,e.icon&&(t=D.whitespace.cloneNode(!1),(i=D.span.cloneNode(!1)).className=this.options.iconBase+" "+e.icon,D.fragment.appendChild(i),D.fragment.appendChild(t)),e.subtext&&((i=D.subtext.cloneNode(!1)).textContent=e.subtext,s.appendChild(i)),D.fragment.appendChild(s),D.fragment}},N={fromOption:function(e,t){var i;switch(t){case"divider":i="true"===e.getAttribute("data-divider");break;case"text":i=e.textContent;break;case"label":i=e.label;break;case"style":i=e.style.cssText;break;case"title":i=e.title;break;default:i=e.getAttribute("data-"+t.replace(/[A-Z]+(?![a-z])|[A-Z]/g,function(e,t){return(t?"-":"")+e.toLowerCase()}))}return i},fromDataSource:function(e,t){var i;switch(t){case"text":case"label":i=e.text||e.value||"";break;default:i=e[t]}return i}};function se(e,t){e.length||(D.noResults.innerHTML=this.options.noneResultsText.replace("{0}",'"'+k(t)+'"'),this.$menuInner[0].firstChild.appendChild(D.noResults))}function ne(e){return!(e.hidden||this.options.hideDisabled&&e.disabled)}function H(e,t){var i=this;p.useDefault||($.valHooks.select.set=p._set,p.useDefault=!0),this.$element=$(e),this.$newElement=null,this.$button=null,this.$menu=null,this.options=t,this.selectpicker={main:{data:[],optionQueue:D.fragment.cloneNode(!1),hasMore:!1},search:{data:[],hasMore:!1},current:{},view:{},optionValuesDataMap:{},isSearching:!1,keydown:{keyHistory:"",resetKeyHistory:{start:function(){return setTimeout(function(){i.selectpicker.keydown.keyHistory=""},800)}}}},this.sizeInfo={},"number"==typeof(e=this.options.windowPadding)&&(this.options.windowPadding=[e,e,e,e]),this.val=H.prototype.val,this.render=H.prototype.render,this.refresh=H.prototype.refresh,this.setStyle=H.prototype.setStyle,this.selectAll=H.prototype.selectAll,this.deselectAll=H.prototype.deselectAll,this.destroy=H.prototype.destroy,this.remove=H.prototype.remove,this.show=H.prototype.show,this.hide=H.prototype.hide,this.init()}function oe(e){var r,a=arguments,c=e;if([].shift.apply(a),!g.success){try{g.full=(X()||"").split(" ")[0].split(".")}catch(e){H.BootstrapVersion?g.full=H.BootstrapVersion.split(" ")[0].split("."):(g.full=[g.major,"0","0"],console.warn("There was an issue retrieving Bootstrap's version. Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.",e))}g.major=g.full[0],g.success=!0}if("4"<=g.major){var t=[];H.DEFAULTS.style===T.BUTTONCLASS&&t.push({name:"style",className:"BUTTONCLASS"}),H.DEFAULTS.iconBase===T.ICONBASE&&t.push({name:"iconBase",className:"ICONBASE"}),H.DEFAULTS.tickIcon===T.TICKICON&&t.push({name:"tickIcon",className:"TICKICON"}),T.DIVIDER="dropdown-divider",T.SHOW="show",T.BUTTONCLASS="btn-light",T.POPOVERHEADER="popover-header",T.ICONBASE="",T.TICKICON="bs-ok-default";for(var i=0;i<t.length;i++){e=t[i];H.DEFAULTS[e.name]=T[e.className]}}"4"<g.major&&(z.DATA_TOGGLE='data-bs-toggle="dropdown"');var s=this.each(function(){var e=$(this);if(e.is("select")){var t=e.data("selectpicker"),i="object"==typeof c&&c;if(i.title&&(i.placeholder=i.title),t){if(i)for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t.options[s]=i[s])}else{var n,o=e.data();for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&-1!==$.inArray(n,M)&&delete o[n];var l=$.extend({},H.DEFAULTS,$.fn.selectpicker.defaults||{},d(e),o,i);l.template=$.extend({},H.DEFAULTS.template,$.fn.selectpicker.defaults?$.fn.selectpicker.defaults.template:{},o.template,i.template),l.source=$.extend({},H.DEFAULTS.source,$.fn.selectpicker.defaults?$.fn.selectpicker.defaults.source:{},i.source),e.data("selectpicker",t=new H(this,l))}"string"==typeof c&&(r=t[c]instanceof Function?t[c].apply(t,a):t.options[c])}});return void 0!==r?r:s}H.VERSION="1.14.0-beta3",H.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results matched {0}",countSelectedText:function(e,t){return 1==e?"{0} item selected":"{0} items selected"},maxOptionsText:function(e,t){return[1==e?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==t?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",source:{pageSize:40},chunkSize:40,doneButton:!1,doneButtonText:"Close",multipleSeparator:", ",styleBase:"btn",style:T.BUTTONCLASS,size:"auto",title:null,placeholder:null,allowClear:!1,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,liveSearchNormalize:!1,liveSearchStyle:"contains",actionsBox:!1,iconBase:T.ICONBASE,tickIcon:T.TICKICON,showTick:!1,template:{caret:'<span class="caret"></span>'},maxOptions:!1,mobile:!1,selectOnTab:!0,dropdownAlignRight:!1,windowPadding:0,virtualScroll:600,display:!1,sanitize:!0,sanitizeFn:null,whiteList:P},H.prototype={constructor:H,init:function(){var i=this,e=this.$element.attr("id"),t=this.$element[0],s=t.form;ee++,this.selectId="bs-select-"+ee,t.classList.add("bs-select-hidden"),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),t.classList.contains("show-tick")&&(this.options.showTick=!0),this.$newElement=this.createDropdown(),this.$element.after(this.$newElement).prependTo(this.$newElement),s&&null===t.form&&(s.id||(s.id="form-"+this.selectId),t.setAttribute("form",s.id)),this.$button=this.$newElement.children("button"),this.options.allowClear&&(this.$clearButton=this.$button.children(".bs-select-clear-selected")),this.$menu=this.$newElement.children(z.MENU),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),t.classList.remove("bs-select-hidden"),this.fetchData(function(){i.render(!0),i.buildList(),requestAnimationFrame(function(){i.$element.trigger("loaded"+A)})}),!0===this.options.dropdownAlignRight&&this.$menu[0].classList.add(T.MENURIGHT),void 0!==e&&this.$button.attr("data-id",e),this.checkDisabled(),this.clickListener(),4<g.major&&(this.dropdown=new m(this.$button[0])),this.options.liveSearch?(this.liveSearchListener(),this.focusedParent=this.$searchbox[0]):this.focusedParent=this.$menuInner[0],this.setStyle(),this.setWidth(),this.options.container?this.selectPosition():this.$element.on("hide"+A,function(){var e,t;i.isVirtual()&&(t=(e=i.$menuInner[0]).firstChild.cloneNode(!1),e.replaceChild(t,e.firstChild),e.scrollTop=0)}),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(e){i.$element.trigger("hide"+A,e)},"hidden.bs.dropdown":function(e){i.$element.trigger("hidden"+A,e)},"show.bs.dropdown":function(e){i.$element.trigger("show"+A,e)},"shown.bs.dropdown":function(e){i.$element.trigger("shown"+A,e)}}),t.hasAttribute("required")&&this.$element.on("invalid"+A,function(){i.$button[0].classList.add("bs-invalid"),i.$element.on("shown"+A+".invalid",function(){i.$element.val(i.$element.val()).off("shown"+A+".invalid")}).on("rendered"+A,function(){this.validity.valid&&i.$button[0].classList.remove("bs-invalid"),i.$element.off("rendered"+A)}),i.$button.on("blur"+A,function(){i.$element.trigger("focus").trigger("blur"),i.$button.off("blur"+A)})}),s&&$(s).on("reset"+A,function(){requestAnimationFrame(function(){i.render()})})},createDropdown:function(){var e=this.multiple||this.options.showTick?" show-tick":"",t=this.multiple?' aria-multiselectable="true"':"",i="",s=this.autofocus?" autofocus":"";g.major<4&&this.$element.parent().hasClass("input-group")&&(i=" input-group-btn");var n="",o="",l="",r="",a="";return this.options.header&&(n='<div class="'+T.POPOVERHEADER+'"><button type="button" class="close" aria-hidden="true">×</button>'+this.options.header+"</div>"),this.options.liveSearch&&(o='<div class="bs-searchbox"><input type="search" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+k(this.options.liveSearchPlaceholder)+'"')+' role="combobox" aria-label="Search" aria-controls="'+this.selectId+'" aria-autocomplete="list"></div>'),this.multiple&&this.options.actionsBox&&(l='<div class="bs-actionsbox"><div class="btn-group btn-group-sm"><button type="button" class="actions-btn bs-select-all btn '+T.BUTTONCLASS+'">'+this.options.selectAllText+'</button><button type="button" class="actions-btn bs-deselect-all btn '+T.BUTTONCLASS+'">'+this.options.deselectAllText+"</button></div></div>"),this.multiple&&this.options.doneButton&&(r='<div class="bs-donebutton"><div class="btn-group"><button type="button" class="btn btn-sm '+T.BUTTONCLASS+'">'+this.options.doneButtonText+"</button></div></div>"),this.options.allowClear&&(a='<span class="close bs-select-clear-selected" title="'+this.options.deselectAllText+'"><span>×</span>'),e='<div class="dropdown bootstrap-select'+e+i+'"><button type="button" tabindex="-1" class="'+this.options.styleBase+' dropdown-toggle" '+("static"===this.options.display?'data-display="static"':"")+z.DATA_TOGGLE+s+' role="combobox" aria-owns="'+this.selectId+'" aria-haspopup="listbox" aria-expanded="false"><div class="filter-option"><div class="filter-option-inner"><div class="filter-option-inner-inner"> </div></div> </div>'+a+"</span>"+("4"<=g.major?"":'<span class="bs-caret">'+this.options.template.caret+"</span>")+'</button><div class="'+T.MENU+" "+("4"<=g.major?"":T.SHOW)+'">'+n+o+l+'<div class="inner '+T.SHOW+'" role="listbox" id="'+this.selectId+'" tabindex="-1" '+t+'><ul class="'+T.MENU+" inner "+("4"<=g.major?T.SHOW:"")+'" role="presentation"></ul></div>'+r+"</div></div>",$(e)},setPositionData:function(){this.selectpicker.view.canHighlight=[],this.selectpicker.view.size=0,this.selectpicker.view.firstHighlightIndex=!1;for(var e=0;e<this.selectpicker.current.data.length;e++){var t=this.selectpicker.current.data[e],i=!0;"divider"===t.type?(i=!1,t.height=this.sizeInfo.dividerHeight):"optgroup-label"===t.type?(i=!1,t.height=this.sizeInfo.dropdownHeaderHeight):t.height=this.sizeInfo.liHeight,t.disabled&&(i=!1),this.selectpicker.view.canHighlight.push(i),i&&(this.selectpicker.view.size++,t.posinset=this.selectpicker.view.size,!1===this.selectpicker.view.firstHighlightIndex&&(this.selectpicker.view.firstHighlightIndex=e)),t.position=(0===e?0:this.selectpicker.current.data[e-1].position)+t.height}},isVirtual:function(){return!1!==this.options.virtualScroll&&this.selectpicker.main.data.length>=this.options.virtualScroll||!0===this.options.virtualScroll},createView:function(y,e,t){var x=this,i=0;function E(e,t){var i,s=x.selectpicker.current.data.length,n=[],o=!0,l=x.isVirtual();x.selectpicker.view.scrollTop=e;for(var r,a=x.options.chunkSize,c=Math.ceil(s/a)||1,d=0;d<c;d++){var h=d===c-1?s:(d+1)*a;if(n[d]=[d*a+(d?1:0),h],!s)break;void 0===i&&e-1<=x.selectpicker.current.data[h-1].position-x.sizeInfo.menuInnerHeight&&(i=d)}if(void 0===i&&(i=0),g=[x.selectpicker.view.position0,x.selectpicker.view.position1],p=Math.max(0,i-1),f=Math.min(c-1,i+1),x.selectpicker.view.position0=!1!==l&&Math.max(0,n[p][0])||0,x.selectpicker.view.position1=!1===l?s:Math.min(s,n[f][1])||0,p=g[0]!==x.selectpicker.view.position0||g[1]!==x.selectpicker.view.position1,void 0!==x.activeElement&&(t&&(x.activeElement!==x.selectedElement&&x.defocusItem(x.activeElement),x.activeElement=void 0),x.activeElement!==x.selectedElement&&x.defocusItem(x.selectedElement)),void 0!==x.prevActiveElement&&x.prevActiveElement!==x.activeElement&&x.prevActiveElement!==x.selectedElement&&x.defocusItem(x.prevActiveElement),t||p||x.selectpicker.current.hasMore){if(f=x.selectpicker.view.visibleElements?x.selectpicker.view.visibleElements.slice():[],x.selectpicker.view.visibleElements=!1===l?x.selectpicker.current.elements:x.selectpicker.current.elements.slice(x.selectpicker.view.position0,x.selectpicker.view.position1),x.setOptionStatus(),(y||!1===l&&t)&&(g=f,r=x.selectpicker.view.visibleElements,o=!(g.length===r.length&&g.every(function(e,t){return e===r[t]}))),(t||!0===l)&&o){var p=x.$menuInner[0],u=document.createDocumentFragment(),f=p.firstChild.cloneNode(!1),m=x.selectpicker.view.visibleElements,v=[];p.replaceChild(f,p.firstChild);for(var g,d=0,b=m.length;d<b;d++){var w,k,I=m[d];x.options.sanitize&&(w=I.lastChild)&&(k=x.selectpicker.current.data[d+x.selectpicker.view.position0])&&k.content&&!k.sanitized&&(v.push(w),k.sanitized=!0),u.appendChild(I)}x.options.sanitize&&v.length&&S(v,x.options.whiteList,x.options.sanitizeFn),!0===l?(g=0===x.selectpicker.view.position0?0:x.selectpicker.current.data[x.selectpicker.view.position0-1].position,o=x.selectpicker.view.position1>s-1?0:x.selectpicker.current.data[s-1].position-x.selectpicker.current.data[x.selectpicker.view.position1-1].position,p.firstChild.style.marginTop=g+"px",p.firstChild.style.marginBottom=o+"px"):(p.firstChild.style.marginTop=0,p.firstChild.style.marginBottom=0),p.firstChild.appendChild(u),!0===l&&x.sizeInfo.hasScrollBar&&(f=p.firstChild.offsetWidth,t&&f<x.sizeInfo.menuInnerInnerWidth&&x.sizeInfo.totalMenuWidth>x.sizeInfo.selectWidth?p.firstChild.style.minWidth=x.sizeInfo.menuInnerInnerWidth+"px":f>x.sizeInfo.menuInnerInnerWidth&&(x.$menu[0].style.minWidth=0,(g=p.firstChild.offsetWidth)>x.sizeInfo.menuInnerInnerWidth&&(x.sizeInfo.menuInnerInnerWidth=g,p.firstChild.style.minWidth=x.sizeInfo.menuInnerInnerWidth+"px"),x.$menu[0].style.minWidth=""))}(!y&&x.options.source.data||y&&x.options.source.search)&&x.selectpicker.current.hasMore&&i===c-1&&0<e&&(o=Math.floor(i*x.options.chunkSize/x.options.source.pageSize)+2,x.fetchData(function(){x.render(),x.buildList(s,y),x.setPositionData(),E(e)},y?"search":"data",o,y?x.selectpicker.search.previousValue:void 0))}x.prevActiveElement=x.activeElement,x.options.liveSearch?y&&t&&(x.selectpicker.view.canHighlight[l=0]||(l=1+x.selectpicker.view.canHighlight.slice(1).indexOf(!0)),f=x.selectpicker.view.visibleElements[l],x.defocusItem(x.selectpicker.view.currentActive),x.activeElement=(x.selectpicker.current.data[l]||{}).element,x.focusItem(f)):x.$menuInner.trigger("focus")}this.selectpicker.isSearching=y,this.selectpicker.current=y?this.selectpicker.search:this.selectpicker.main,this.setPositionData(),e&&(t?i=this.$menuInner[0].scrollTop:x.multiple||"number"==typeof(t=((e=x.$element[0]).options[e.selectedIndex]||{}).liIndex)&&!1!==x.options.size&&(t=(e=x.selectpicker.main.data[t])&&e.position)&&(i=t-(x.sizeInfo.menuInnerHeight+x.sizeInfo.liHeight)/2)),E(i,!0),this.$menuInner.off("scroll.createView").on("scroll.createView",function(e,t){x.noScroll||E(this.scrollTop,t),x.noScroll=!1}),$(window).off("resize"+A+"."+this.selectId+".createView").on("resize"+A+"."+this.selectId+".createView",function(){x.$newElement.hasClass(T.SHOW)&&E(x.$menuInner[0].scrollTop)})},focusItem:function(e,t,i){var s;e&&(t=t||this.selectpicker.current.data[this.selectpicker.current.elements.indexOf(this.activeElement)],(s=e.firstChild)&&(s.setAttribute("aria-setsize",this.selectpicker.view.size),s.setAttribute("aria-posinset",t.posinset),!0!==i&&(this.focusedParent.setAttribute("aria-activedescendant",s.id),e.classList.add("active"),s.classList.add("active"))))},defocusItem:function(e){e&&(e.classList.remove("active"),e.firstChild&&e.firstChild.classList.remove("active"))},setPlaceholder:function(){var e,t,i,s,n,o,l,r=this,a=!1;return!this.options.placeholder&&!this.options.allowClear||this.multiple||(this.selectpicker.view.titleOption||(this.selectpicker.view.titleOption=document.createElement("option")),e=this.$element[0],t=!(a=!0),i=!this.selectpicker.view.titleOption.parentNode,s=e.selectedIndex,n=e.options[s],o=(o=e.querySelector("select > *:not(:disabled)"))?o.index:0,l=(l=window.performance&&window.performance.getEntriesByType("navigation"))&&l.length?"back_forward"!==l[0].type:2!==window.performance.navigation.type,i&&(this.selectpicker.view.titleOption.className="bs-title-option",this.selectpicker.view.titleOption.value="",t=!n||s===o&&!1===n.defaultSelected&&void 0===this.$element.data("selected")),!i&&0===this.selectpicker.view.titleOption.index||e.insertBefore(this.selectpicker.view.titleOption,e.firstChild),t&&l?e.selectedIndex=0:"complete"!==document.readyState&&window.addEventListener("pageshow",function(){r.selectpicker.view.displayedValue!==e.value&&r.render()})),a},fetchData:function(n,o,e,t){e=e||1,o=o||"data";var l,r=this,i=this.options.source[o];i?(this.options.virtualScroll=!0,"function"==typeof i?i.call(this,function(e,t,i){var s=r.selectpicker["search"===o?"search":"main"];s.hasMore=t,s.totalItems=i,l=r.buildData(e,o),n.call(r,l),r.$element.trigger("fetched"+A)},e,t):Array.isArray(i)&&(l=r.buildData(i,o),n.call(r,l))):(l=this.buildData(!1,o),n.call(r,l))},buildData:function(h,e){var o=this,p=!1===h?N.fromOption:N.fromDataSource,u=':not([hidden]):not([data-hidden="true"]):not([style*="display: none"])',f=[],l=this.selectpicker.main.data?this.selectpicker.main.data.length:0,m=0,v=this.setPlaceholder()&&!h?1:0,t=("search"===e&&(l=this.selectpicker.search.data.length),this.options.hideDisabled&&(u+=":not(:disabled)"),h?h.filter(ne,this):this.$element[0].querySelectorAll("select > *"+u));function g(e){var t=f[f.length-1];t&&"divider"===t.type&&(t.optID||e.optID)||((e=e||{}).type="divider",f.push(e))}function b(e,t){var i,s,n;(t=t||{}).divider=p(e,"divider"),!0===t.divider?g({optID:t.optID}):(i=f.length+l,s=(s=p(e,"style"))?k(s):"",n=(e.className||"")+(t.optgroupClass||""),t.optID&&(n="opt "+n),t.optionClass=n.trim(),t.inlineStyle=s,t.text=p(e,"text"),t.title=p(e,"title"),t.content=p(e,"content"),t.tokens=p(e,"tokens"),t.subtext=p(e,"subtext"),t.icon=p(e,"icon"),t.display=t.content||t.text,t.value=void 0===e.value?e.text:e.value,t.type="option",t.index=i,t.option=e.option||e,t.option.liIndex=i,t.selected=!!e.selected,t.disabled=t.disabled||!!e.disabled,!1!==h&&(o.selectpicker.optionValuesDataMap[t.value]?t=$.extend(o.selectpicker.optionValuesDataMap[t.value],t):o.selectpicker.optionValuesDataMap[t.value]=t),f.push(t))}function i(e,t){var i=t[e],s=!(e-1<v)&&t[e-1],t=t[e+1],n=h?i.children.filter(ne,this):i.querySelectorAll("option"+u);if(n.length){var o,l,r={display:k(p(w,"label")),subtext:p(i,"subtext"),icon:p(i,"icon"),type:"optgroup-label",optgroupClass:" "+(i.className||""),optgroup:i};m++,s&&g({optID:m}),r.optID=m,f.push(r);for(var a=0,c=n.length;a<c;a++){var d=n[a];0===a&&(l=(o=f.length-1)+c),b(d,{headerIndex:o,lastIndex:l,optID:r.optID,optgroupClass:r.optgroupClass,disabled:i.disabled})}t&&g({optID:m})}}for(var s=t.length,n=v;n<s;n++){var w=t[n],r=w.children;r&&r.length?i.call(this,n,t):b.call(this,w,{})}switch(e){case"data":this.selectpicker.main.data||(this.selectpicker.main.data=[]),Array.prototype.push.apply(this.selectpicker.main.data,f),this.selectpicker.current.data=this.selectpicker.main.data;break;case"search":Array.prototype.push.apply(this.selectpicker.search.data,f)}return f},buildList:function(e,t){var i=this,s=(t?this.selectpicker.search:this.selectpicker.main).data,n=[],o=0;!i.options.showTick&&!i.multiple||D.checkMark.parentNode||(D.checkMark.className=this.options.iconBase+" "+i.options.tickIcon+" check-mark",D.a.appendChild(D.checkMark));for(var l=s.length,r=e||0;r<l;r++){var a,c=s[r],d=(p=a=h=d=void 0,n),h=c,p=0;switch(h.type){case"divider":a=L.li(!1,T.DIVIDER,h.optID?h.optID+"div":void 0);break;case"option":(a=L.li(L.a(L.text.call(i,h),h.optionClass,h.inlineStyle),"",h.optID)).firstChild&&(a.firstChild.id=i.selectId+"-"+h.index);break;case"optgroup-label":a=L.li(L.label.call(i,h),"dropdown-header"+h.optgroupClass,h.optID)}h.element?h.element.innerHTML=a.innerHTML:h.element=a,d.push(h.element),h.display&&(p+=h.display.length),h.subtext&&(p+=h.subtext.length),h.icon&&(p+=1),o<p&&(o=p,i.selectpicker.view.widestOption=d[d.length-1])}e?t?Array.prototype.push.apply(this.selectpicker.search.elements,n):(Array.prototype.push.apply(this.selectpicker.main.elements,n),this.selectpicker.current.elements=this.selectpicker.main.elements):t?this.selectpicker.search.elements=n:this.selectpicker.main.elements=this.selectpicker.current.elements=n},findLis:function(){return this.$menuInner.find(".inner > li")},render:function(e){var i=this,t=this.$element[0],s=this.setPlaceholder()&&0===t.selectedIndex,n=y.call(this),o=n.length,l=x.call(this,n),r=this.$button[0],a=r.querySelector(".filter-option-inner-inner"),c=document.createTextNode(this.options.multipleSeparator),d=D.fragment.cloneNode(!1),h=!1;if(this.options.source.data&&e&&(n.map(function e(t){t.selected?i.createOption(t,!0):t.children&&t.children.length&&t.children.map(e)}),t.appendChild(this.selectpicker.main.optionQueue),s=s&&0===t.selectedIndex),r.classList.toggle("bs-placeholder",i.multiple?!o:!l&&0!==l),i.multiple||1!==n.length||(i.selectpicker.view.displayedValue=l),"static"===this.options.selectedTextFormat)d=L.text.call(this,{text:this.options.placeholder},!0);else if(!1===(this.multiple&&-1!==this.options.selectedTextFormat.indexOf("count")&&0<o&&(1<(e=this.options.selectedTextFormat.split(">")).length&&o>e[1]||1===e.length&&2<=o))){if(!s){for(var p=0;p<o&&p<50;p++){var u=n[p],f={};u&&(this.multiple&&0<p&&d.appendChild(c.cloneNode(!1)),u.title?f.text=u.title:u.content&&i.options.showContent?(f.content=u.content.toString(),h=!0):(i.options.showIcon&&(f.icon=u.icon),i.options.showSubtext&&!i.multiple&&u.subtext&&(f.subtext=" "+u.subtext),f.text=u.text.trim()),d.appendChild(L.text.call(this,f,!0)))}49<o&&d.appendChild(document.createTextNode("..."))}}else var t=':not([hidden]):not([data-hidden="true"]):not([data-divider="true"]):not([style*="display: none"])',l=(this.options.hideDisabled&&(t+=":not(:disabled)"),this.$element[0].querySelectorAll("select > option"+t+", optgroup"+t+" option"+t).length),e="function"==typeof this.options.countSelectedText?this.options.countSelectedText(o,l):this.options.countSelectedText,d=L.text.call(this,{text:e.replace("{0}",o.toString()).replace("{1}",l.toString())},!0);d.childNodes.length||(d=L.text.call(this,{text:this.options.placeholder||this.options.noneSelectedText},!0)),r.title=d.textContent.replace(/<[^>]*>?/g,"").trim(),this.options.sanitize&&h&&S([d],i.options.whiteList,i.options.sanitizeFn),a.innerHTML="",a.appendChild(d),g.major<4&&this.$newElement[0].classList.contains("bs3-has-addon")&&(s=r.querySelector(".filter-expand"),(t=a.cloneNode(!0)).className="filter-expand",s?r.replaceChild(t,s):r.appendChild(t)),this.$element.trigger("rendered"+A)},setStyle:function(e,t){var i=this.$button[0],s=this.$newElement[0],n=this.options.style.trim();this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,"")),g.major<4&&(s.classList.add("bs3"),s.parentNode.classList&&s.parentNode.classList.contains("input-group")&&(s.previousElementSibling||s.nextElementSibling)&&(s.previousElementSibling||s.nextElementSibling).classList.contains("input-group-addon")&&s.classList.add("bs3-has-addon")),s=e?e.trim():n,"add"==t?s&&i.classList.add.apply(i.classList,s.split(" ")):"remove"==t?s&&i.classList.remove.apply(i.classList,s.split(" ")):(n&&i.classList.remove.apply(i.classList,n.split(" ")),s&&i.classList.add.apply(i.classList,s.split(" ")))},liHeight:function(e){if(e||!1!==this.options.size&&!Object.keys(this.sizeInfo).length){var t,e=D.div.cloneNode(!1),i=D.div.cloneNode(!1),s=D.div.cloneNode(!1),n=document.createElement("ul"),o=D.li.cloneNode(!1),l=D.li.cloneNode(!1),r=D.a.cloneNode(!1),a=D.span.cloneNode(!1),c=this.options.header&&0<this.$menu.find("."+T.POPOVERHEADER).length?this.$menu.find("."+T.POPOVERHEADER)[0].cloneNode(!0):null,d=this.options.liveSearch?D.div.cloneNode(!1):null,h=this.options.actionsBox&&this.multiple&&0<this.$menu.find(".bs-actionsbox").length?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,p=this.options.doneButton&&this.multiple&&0<this.$menu.find(".bs-donebutton").length?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null,u=this.$element[0].options[0];if(this.sizeInfo.selectWidth=this.$newElement[0].offsetWidth,a.className="text",r.className="dropdown-item "+(u?u.className:""),e.className=this.$menu[0].parentNode.className+" "+T.SHOW,e.style.width=0,"auto"===this.options.width&&(i.style.minWidth=0),i.className=T.MENU+" "+T.SHOW,s.className="inner "+T.SHOW,n.className=T.MENU+" inner "+("4"<=g.major?T.SHOW:""),o.className=T.DIVIDER,l.className="dropdown-header",a.appendChild(document.createTextNode("\u200b")),this.selectpicker.current.data.length)for(var f=0;f<this.selectpicker.current.data.length;f++){var m=this.selectpicker.current.data[f];if("option"===m.type&&"none"!==$(m.element.firstChild).css("display")){t=m.element;break}}else t=D.li.cloneNode(!1),r.appendChild(a),t.appendChild(r);l.appendChild(a.cloneNode(!0)),this.selectpicker.view.widestOption&&n.appendChild(this.selectpicker.view.widestOption.cloneNode(!0)),n.appendChild(t),n.appendChild(o),n.appendChild(l),c&&i.appendChild(c),d&&(u=document.createElement("input"),d.className="bs-searchbox",u.className="form-control",d.appendChild(u),i.appendChild(d)),h&&i.appendChild(h),s.appendChild(n),i.appendChild(s),p&&i.appendChild(p),e.appendChild(i),document.body.appendChild(e);r=t.offsetHeight,a=l?l.offsetHeight:0,u=c?c.offsetHeight:0,n=d?d.offsetHeight:0,l=h?h.offsetHeight:0,c=p?p.offsetHeight:0,d=$(o).outerHeight(!0),h=window.getComputedStyle(i),p=i.offsetWidth,o={vert:v(h.paddingTop)+v(h.paddingBottom)+v(h.borderTopWidth)+v(h.borderBottomWidth),horiz:v(h.paddingLeft)+v(h.paddingRight)+v(h.borderLeftWidth)+v(h.borderRightWidth)},h={vert:o.vert+v(h.marginTop)+v(h.marginBottom)+2,horiz:o.horiz+v(h.marginLeft)+v(h.marginRight)+2};s.style.overflowY="scroll",s=i.offsetWidth-p,document.body.removeChild(e),this.sizeInfo.liHeight=r,this.sizeInfo.dropdownHeaderHeight=a,this.sizeInfo.headerHeight=u,this.sizeInfo.searchHeight=n,this.sizeInfo.actionsHeight=l,this.sizeInfo.doneButtonHeight=c,this.sizeInfo.dividerHeight=d,this.sizeInfo.menuPadding=o,this.sizeInfo.menuExtras=h,this.sizeInfo.menuWidth=p,this.sizeInfo.menuInnerInnerWidth=p-o.horiz,this.sizeInfo.totalMenuWidth=this.sizeInfo.menuWidth,this.sizeInfo.scrollBarWidth=s,this.sizeInfo.selectHeight=this.$newElement[0].offsetHeight,this.setPositionData()}},getSelectPosition:function(){var e,t=$(window),i=this.$newElement.offset(),s=$(this.options.container),s=(this.options.container&&s.length&&!s.is("body")?((e=s.offset()).top+=parseInt(s.css("borderTopWidth")),e.left+=parseInt(s.css("borderLeftWidth"))):e={top:0,left:0},this.options.windowPadding);this.sizeInfo.selectOffsetTop=i.top-e.top-t.scrollTop(),this.sizeInfo.selectOffsetBot=t.height()-this.sizeInfo.selectOffsetTop-this.sizeInfo.selectHeight-e.top-s[2],this.sizeInfo.selectOffsetLeft=i.left-e.left-t.scrollLeft(),this.sizeInfo.selectOffsetRight=t.width()-this.sizeInfo.selectOffsetLeft-this.sizeInfo.selectWidth-e.left-s[1],this.sizeInfo.selectOffsetTop-=s[0],this.sizeInfo.selectOffsetLeft-=s[3]},setMenuSize:function(e){this.getSelectPosition();var t,i,s,n,o,l,r=this.sizeInfo.selectWidth,a=this.sizeInfo.liHeight,c=this.sizeInfo.headerHeight,d=this.sizeInfo.searchHeight,h=this.sizeInfo.actionsHeight,p=this.sizeInfo.doneButtonHeight,u=this.sizeInfo.dividerHeight,f=this.sizeInfo.menuPadding,m=0;if(this.options.dropupAuto&&(l=a*this.selectpicker.current.data.length+f.vert,l=this.sizeInfo.selectOffsetTop-this.sizeInfo.selectOffsetBot>this.sizeInfo.menuExtras.vert&&l+this.sizeInfo.menuExtras.vert+50>this.sizeInfo.selectOffsetBot,!0===this.selectpicker.isSearching&&(l=this.selectpicker.dropup),this.$newElement.toggleClass(T.DROPUP,l),this.selectpicker.dropup=l),"auto"===this.options.size)l=3<this.selectpicker.current.data.length?3*this.sizeInfo.liHeight+this.sizeInfo.menuExtras.vert-2:0,i=this.sizeInfo.selectOffsetBot-this.sizeInfo.menuExtras.vert,s=l+c+d+h+p,o=Math.max(l-f.vert,0),t=(n=i=this.$newElement.hasClass(T.DROPUP)?this.sizeInfo.selectOffsetTop-this.sizeInfo.menuExtras.vert:i)-c-d-h-p-f.vert;else if(this.options.size&&"auto"!=this.options.size&&this.selectpicker.current.elements.length>this.options.size){for(var v=0;v<this.options.size;v++)"divider"===this.selectpicker.current.data[v].type&&m++;t=(i=a*this.options.size+m*u+f.vert)-f.vert,n=i+c+d+h+p,s=o=""}this.$menu.css({"max-height":n+"px",overflow:"hidden","min-height":s+"px"}),this.$menuInner.css({"max-height":t+"px",overflow:"hidden auto","min-height":o+"px"}),this.sizeInfo.menuInnerHeight=Math.max(t,1),this.selectpicker.current.data.length&&this.selectpicker.current.data[this.selectpicker.current.data.length-1].position>this.sizeInfo.menuInnerHeight&&(this.sizeInfo.hasScrollBar=!0,this.sizeInfo.totalMenuWidth=this.sizeInfo.menuWidth+this.sizeInfo.scrollBarWidth),"auto"===this.options.dropdownAlignRight&&this.$menu.toggleClass(T.MENURIGHT,this.sizeInfo.selectOffsetLeft>this.sizeInfo.selectOffsetRight&&this.sizeInfo.selectOffsetRight<this.sizeInfo.totalMenuWidth-r),this.dropdown&&this.dropdown._popper&&this.dropdown._popper.update()},setSize:function(e){var t,i;this.liHeight(e),this.options.header&&this.$menu.css("padding-top",0),!1!==this.options.size&&(t=this,i=$(window),this.setMenuSize(),this.options.liveSearch&&this.$searchbox.off("input.setMenuSize propertychange.setMenuSize").on("input.setMenuSize propertychange.setMenuSize",function(){return t.setMenuSize()}),"auto"===this.options.size?i.off("resize"+A+"."+this.selectId+".setMenuSize scroll"+A+"."+this.selectId+".setMenuSize").on("resize"+A+"."+this.selectId+".setMenuSize scroll"+A+"."+this.selectId+".setMenuSize",function(){return t.setMenuSize()}):this.options.size&&"auto"!=this.options.size&&this.selectpicker.current.elements.length>this.options.size&&i.off("resize"+A+"."+this.selectId+".setMenuSize scroll"+A+"."+this.selectId+".setMenuSize")),this.createView(!1,!0,e)},setWidth:function(){var i=this;"auto"===this.options.width?requestAnimationFrame(function(){i.$menu.css("min-width","0"),i.$element.on("loaded"+A,function(){i.liHeight(),i.setMenuSize();var e=i.$newElement.clone().appendTo("body"),t=e.css("width","auto").children("button").outerWidth();e.remove(),i.sizeInfo.selectWidth=Math.max(i.sizeInfo.totalMenuWidth,t),i.$newElement.css("width",i.sizeInfo.selectWidth+"px")})}):"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width","")),this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement[0].classList.remove("fit-width")},selectPosition:function(){this.$bsContainer=$('<div class="bs-container" />');function e(e){var t={},i=l.options.display||!!$.fn.dropdown.Constructor.Default&&$.fn.dropdown.Constructor.Default.display;l.$bsContainer.addClass(e.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass(T.DROPUP,e.hasClass(T.DROPUP)),s=e.offset(),r.is("body")?n={top:0,left:0}:((n=r.offset()).top+=parseInt(r.css("borderTopWidth"))-r.scrollTop(),n.left+=parseInt(r.css("borderLeftWidth"))-r.scrollLeft()),o=e.hasClass(T.DROPUP)?0:e[0].offsetHeight,(g.major<4||"static"===i)&&(t.top=s.top-n.top+o,t.left=s.left-n.left),t.width=e[0].offsetWidth,l.$bsContainer.css(t)}var s,n,o,l=this,r=$(this.options.container);this.$button.on("click.bs.dropdown.data-api",function(){l.isDisabled()||(e(l.$newElement),l.$bsContainer.appendTo(l.options.container).toggleClass(T.SHOW,!l.$button.hasClass(T.SHOW)).append(l.$menu))}),$(window).off("resize"+A+"."+this.selectId+" scroll"+A+"."+this.selectId).on("resize"+A+"."+this.selectId+" scroll"+A+"."+this.selectId,function(){l.$newElement.hasClass(T.SHOW)&&e(l.$newElement)}),this.$element.on("hide"+A,function(){l.$menu.data("height",l.$menu.height()),l.$bsContainer.detach()})},createOption:function(e,t){var i,s=e.option||e;s&&1!==s.nodeType&&(i=(t?D.selectedOption:D.option).cloneNode(!0),void 0!==s.value&&(i.value=s.value),i.textContent=s.text,i.selected=!0,void 0!==s.liIndex?i.liIndex=s.liIndex:t||(i.liIndex=e.index),e.option=i,this.selectpicker.main.optionQueue.appendChild(i))},setOptionStatus:function(e){var t=this;if(t.noScroll=!1,t.selectpicker.view.visibleElements&&t.selectpicker.view.visibleElements.length){for(var i=0;i<t.selectpicker.view.visibleElements.length;i++){var s=t.selectpicker.current.data[i+t.selectpicker.view.position0];s.option&&(!0!==e&&t.setDisabled(s),t.setSelected(s))}this.options.source.data&&this.$element[0].appendChild(this.selectpicker.main.optionQueue)}},setSelected:function(e,t){t=void 0===t?e.selected:t;var i,s=e.element,n=void 0!==this.activeElement,o=this.activeElement===s||t&&!this.multiple&&!n;s&&(void 0!==t&&(e.selected=t,e.option&&(e.option.selected=t)),t&&this.options.source.data&&this.createOption(e,!1),i=s.firstChild,t&&(this.selectedElement=s),s.classList.toggle("selected",t),o?(this.focusItem(s,e),this.selectpicker.view.currentActive=s,this.activeElement=s):this.defocusItem(s),i&&(i.classList.toggle("selected",t),t?i.setAttribute("aria-selected",!0):this.multiple?i.setAttribute("aria-selected",!1):i.removeAttribute("aria-selected")),o||n||!t||void 0===this.prevActiveElement||(e=this.prevActiveElement,this.defocusItem(e)))},setDisabled:function(e){var t,i=e.disabled,e=e.element;e&&(t=e.firstChild,e.classList.toggle(T.DISABLED,i),t&&("4"<=g.major&&t.classList.toggle(T.DISABLED,i),i?(t.setAttribute("aria-disabled",i),t.setAttribute("tabindex",-1)):(t.removeAttribute("aria-disabled"),t.setAttribute("tabindex",0))))},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){this.isDisabled()?(this.$newElement[0].classList.add(T.DISABLED),this.$button.addClass(T.DISABLED).attr("aria-disabled",!0)):this.$button[0].classList.contains(T.DISABLED)&&(this.$newElement[0].classList.remove(T.DISABLED),this.$button.removeClass(T.DISABLED).attr("aria-disabled",!1))},clickListener:function(){var I=this,t=$(document);function e(){(I.options.liveSearch?I.$searchbox:I.$menuInner).trigger("focus")}function i(){I.dropdown&&I.dropdown._popper&&I.dropdown._popper.state?e():requestAnimationFrame(i)}t.data("spaceSelect",!1),this.$button.on("keyup",function(e){/(32)/.test(e.keyCode.toString(10))&&t.data("spaceSelect")&&(e.preventDefault(),t.data("spaceSelect",!1))}),this.$newElement.on("show.bs.dropdown",function(){I.dropdown||"4"!==g.major||(I.dropdown=I.$button.data("bs.dropdown"),I.dropdown._menu=I.$menu[0])}),this.$button.on("click.bs.dropdown.data-api",function(e){var t,i,s;I.options.allowClear&&(t=e.target,i=I.$clearButton[0],(t=/MSIE|Trident/.test(window.navigator.userAgent)?document.elementFromPoint(e.clientX,e.clientY):t)!==i&&t.parentElement!==i||(e.stopImmediatePropagation(),I.multiple?I.deselectAll():(i=(t=I.$element[0]).value,e=t.selectedIndex,(s=!!(s=t.options[e])&&I.selectpicker.main.data[s.liIndex])&&I.setSelected(s,!1),t.selectedIndex=0,E=[e,!1,i],I.$element.triggerNative("change")),I.$newElement.hasClass(T.SHOW)&&(I.options.liveSearch&&I.$searchbox.trigger("focus"),I.createView(!1)))),I.$newElement.hasClass(T.SHOW)||I.setSize()}),this.$element.on("shown"+A,function(){I.$menuInner[0].scrollTop!==I.selectpicker.view.scrollTop&&(I.$menuInner[0].scrollTop=I.selectpicker.view.scrollTop),3<g.major?requestAnimationFrame(i):e()}),this.$menuInner.on("mouseenter","li a",function(e){var t=this.parentElement,i=I.isVirtual()?I.selectpicker.view.position0:0,s=Array.prototype.indexOf.call(t.parentElement.children,t),s=I.selectpicker.current.data[s+i];I.focusItem(t,s,!0)}),this.$menuInner.on("click","li a",function(e,t){var i=$(this),s=I.$element[0],n=I.isVirtual()?I.selectpicker.view.position0:0,o=I.selectpicker.current.data[i.parent().index()+n],n=o.element,l=x.call(I),r=s.selectedIndex,a=s.options[r],a=!!a&&I.selectpicker.main.data[a.liIndex],c=!0;if(I.multiple&&1!==I.options.maxOptions&&e.stopPropagation(),e.preventDefault(),!I.isDisabled()&&!i.parent().hasClass(T.DISABLED)){var e=o.option,i=$(e),d=e.selected,h=I.selectpicker.current.data.find(function(e){return e.optID===o.optID&&"optgroup-label"===e.type}),p=h?h.optgroup:void 0,h=p instanceof Element?N.fromOption:N.fromDataSource,u=p&&p.children,f=parseInt(I.options.maxOptions),h=p&&parseInt(h(p,"maxOptions"))||!1;if((t=n===I.activeElement?!0:t)||(I.prevActiveElement=I.activeElement,I.activeElement=void 0),I.multiple&&1!==f){if(I.setSelected(o,!d),I.focusedParent.focus(),!1!==f||!1!==h){var n=f<y.call(I).length,m=0;if(p&&p.children)for(var v=0;v<p.children.length;v++)p.children[v].selected&&m++;t=h<m;if(f&&n||h&&t)if(f&&1===f)s.selectedIndex=-1,I.setOptionStatus(!0);else if(h&&1===h){for(v=0;v<u.length;v++){var g=u[v];I.setSelected(I.selectpicker.current.data[g.liIndex],!1)}I.setSelected(o,!0)}else{var d="string"==typeof I.options.maxOptionsText?[I.options.maxOptionsText,I.options.maxOptionsText]:I.options.maxOptionsText,d="function"==typeof d?d(f,h):d,b=d[0].replace("{n}",f),w=d[1].replace("{n}",h),k=$('<div class="notify"></div>');d[2]&&(b=b.replace("{var}",d[2][1<f?0:1]),w=w.replace("{var}",d[2][1<h?0:1])),I.$menu.append(k),f&&n&&(k.append($("<div>"+b+"</div>")),c=!1,I.$element.trigger("maxReached"+A)),h&&t&&(k.append($("<div>"+w+"</div>")),c=!1,I.$element.trigger("maxReachedGrp"+A)),setTimeout(function(){I.setSelected(o,!1)},10),k[0].classList.add("fadeOut"),setTimeout(function(){k.remove()},1050)}}}else a&&I.setSelected(a,!1),I.setSelected(o,!0);I.options.source.data&&I.$element[0].appendChild(I.selectpicker.main.optionQueue),!I.multiple||I.multiple&&1===I.options.maxOptions?I.$button.trigger("focus"):I.options.liveSearch&&I.$searchbox.trigger("focus"),!c||!I.multiple&&r===s.selectedIndex||(E=[e.index,i.prop("selected"),l],I.$element.triggerNative("change"))}}),this.$menu.on("click","li."+T.DISABLED+" a, ."+T.POPOVERHEADER+", ."+T.POPOVERHEADER+" :not(.close)",function(e){e.currentTarget==this&&(e.preventDefault(),e.stopPropagation(),(I.options.liveSearch&&!$(e.target).hasClass("close")?I.$searchbox:I.$button).trigger("focus"))}),this.$menuInner.on("click",".divider, .dropdown-header",function(e){e.preventDefault(),e.stopPropagation(),(I.options.liveSearch?I.$searchbox:I.$button).trigger("focus")}),this.$menu.on("click","."+T.POPOVERHEADER+" .close",function(){I.$button.trigger("click")}),this.$searchbox.on("click",function(e){e.stopPropagation()}),this.$menu.on("click",".actions-btn",function(e){(I.options.liveSearch?I.$searchbox:I.$button).trigger("focus"),e.preventDefault(),e.stopPropagation(),$(this).hasClass("bs-select-all")?I.selectAll():I.deselectAll()}),this.$button.on("focus"+A,function(e){var t=I.$element[0].getAttribute("tabindex");void 0!==t&&e.originalEvent&&e.originalEvent.isTrusted&&(this.setAttribute("tabindex",t),I.$element[0].setAttribute("tabindex",-1),I.selectpicker.view.tabindex=t)}).on("blur"+A,function(e){void 0!==I.selectpicker.view.tabindex&&e.originalEvent&&e.originalEvent.isTrusted&&(I.$element[0].setAttribute("tabindex",I.selectpicker.view.tabindex),this.setAttribute("tabindex",-1),I.selectpicker.view.tabindex=void 0)}),this.$element.on("change"+A,function(){I.render(),I.$element.trigger("changed"+A,E),E=null}).on("focus"+A,function(){I.options.mobile||I.$button[0].focus()})},liveSearchListener:function(){var p=this;this.$button.on("click.bs.dropdown.data-api",function(){p.$searchbox.val()&&(p.$searchbox.val(""),p.selectpicker.search.previousValue=void 0)}),this.$searchbox.on("click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api",function(e){e.stopPropagation()}),this.$searchbox.on("input propertychange",function(){var t=p.$searchbox[0].value;if(p.selectpicker.search.elements=[],p.selectpicker.search.data=[],t)if(p.selectpicker.search.previousValue=t,p.options.source.search)p.fetchData(function(e){p.render(),p.buildList(void 0,!0),p.noScroll=!0,p.$menuInner.scrollTop(0),p.createView(!0),se.call(p,e,t)},"search",0,t);else{var e=[],i=t.toUpperCase(),s={},n=[],o=p._searchStyle(),l=p.options.liveSearchNormalize;l&&(i=u(i));for(var r=0;r<p.selectpicker.main.data.length;r++){var a=p.selectpicker.main.data[r];s[r]||(s[r]=b(a,i,o,l)),s[r]&&void 0!==a.headerIndex&&-1===n.indexOf(a.headerIndex)&&(0<a.headerIndex&&(s[a.headerIndex-1]=!0,n.push(a.headerIndex-1)),s[a.headerIndex]=!0,n.push(a.headerIndex),s[a.lastIndex+1]=!0),s[r]&&"optgroup-label"!==a.type&&n.push(r)}for(var r=0,c=n.length;r<c;r++){var d=n[r],h=n[r-1],a=p.selectpicker.main.data[d],h=p.selectpicker.main.data[h];("divider"!==a.type||"divider"===a.type&&h&&"divider"!==h.type&&c-1!==r)&&(p.selectpicker.search.data.push(a),e.push(p.selectpicker.main.elements[d]))}p.activeElement=void 0,p.noScroll=!0,p.$menuInner.scrollTop(0),p.selectpicker.search.elements=e,p.createView(!0),se.call(p,e,t)}else p.selectpicker.search.previousValue&&(p.$menuInner.scrollTop(0),p.createView(!1))})},_searchStyle:function(){return this.options.liveSearchStyle||"contains"},val:function(t){var e=this.$element[0];if(void 0===t)return this.$element.val();var i=y.call(this),s=x.call(this,i);E=[null,null,s],(t=Array.isArray(t)?t:[t]).map(String);for(var n=0;n<i.length;n++){var o=i[n];o&&-1===t.indexOf(String(o.value))&&this.setSelected(o,!1)}return this.selectpicker.main.data.filter(function(e){return-1!==t.indexOf(String(e.value))&&(this.setSelected(e,!0),!0)},this),this.options.source.data&&e.appendChild(this.selectpicker.main.optionQueue),this.$element.trigger("changed"+A,E),this.$newElement.hasClass(T.SHOW)&&(this.multiple?this.setOptionStatus(!0):"number"==typeof(s=(e.options[e.selectedIndex]||{}).liIndex)&&this.setSelected(this.selectpicker.current.data[s],!0)),this.render(),E=null,this.$element},changeAll:function(e){if(this.multiple){void 0===e&&(e=!0);var t=this.$element[0],i=0,s=0,n=x.call(this);t.classList.add("bs-select-hidden");for(var o=0,l=this.selectpicker.current.data,r=l.length;o<r;o++){var a=l[o],c=a.option;c&&!a.disabled&&"divider"!==a.type&&(a.selected&&i++,c.selected=e,!0===(a.selected=e)&&s++)}t.classList.remove("bs-select-hidden"),i!==s&&(this.setOptionStatus(),E=[null,null,n],this.$element.triggerNative("change"))}},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},toggle:function(e,t){var i=void 0===t;(e=e||window.event)&&e.stopPropagation(),!1===i&&(e=this.$newElement[0].classList.contains(T.SHOW),i=!0===t&&!1===e||!1===t&&!0===e),i&&this.$button.trigger("click.bs.dropdown.data-api")},open:function(e){this.toggle(e,!0)},close:function(e){this.toggle(e,!1)},keydown:function(e){var t,i,s,n,o=$(this),l=o.hasClass("dropdown-toggle"),r=(l?o.closest(".dropdown"):o.closest(z.MENU)).data("this"),a=r.findLis(),c=!1,l=e.which===I&&!l&&!r.options.selectOnTab,d=te.test(e.which)||l,h=r.$menuInner[0].scrollTop,p=!0===r.isVirtual()?r.selectpicker.view.position0:0;if(!(112<=e.which&&e.which<=123))if(!(t=r.$menu.hasClass(T.SHOW))&&(d||48<=e.which&&e.which<=57||96<=e.which&&e.which<=105||65<=e.which&&e.which<=90)&&(r.$button.trigger("click.bs.dropdown.data-api"),r.options.liveSearch))r.$searchbox.trigger("focus");else{if(e.which===Z&&t&&(e.preventDefault(),r.$button.trigger("click.bs.dropdown.data-api").trigger("focus")),d){if(!a.length)return;-1!==(d=(i=r.activeElement)?Array.prototype.indexOf.call(i.parentElement.children,i):-1)&&r.defocusItem(i),e.which===C?(-1!==d&&d--,d+p<0&&(d+=a.length),r.selectpicker.view.canHighlight[d+p]||-1===(d=r.selectpicker.view.canHighlight.slice(0,d+p).lastIndexOf(!0)-p)&&(d=a.length-1)):e.which!==O&&!l||(++d+p>=r.selectpicker.view.canHighlight.length&&(d=r.selectpicker.view.firstHighlightIndex),r.selectpicker.view.canHighlight[d+p]||(d=d+1+r.selectpicker.view.canHighlight.slice(d+p+1).indexOf(!0))),e.preventDefault();var u=p+d;e.which===C?0===p&&d===a.length-1?(r.$menuInner[0].scrollTop=r.$menuInner[0].scrollHeight,u=r.selectpicker.current.elements.length-1):(s=r.selectpicker.current.data[u])&&(c=(n=s.position-s.height)<h):e.which!==O&&!l||(d===r.selectpicker.view.firstHighlightIndex?(r.$menuInner[0].scrollTop=0,u=r.selectpicker.view.firstHighlightIndex):(s=r.selectpicker.current.data[u])&&(c=h<(n=s.position-r.sizeInfo.menuInnerHeight))),i=r.selectpicker.current.elements[u],r.activeElement=(r.selectpicker.current.data[u]||{}).element,r.focusItem(i),r.selectpicker.view.currentActive=i,c&&(r.$menuInner[0].scrollTop=n),(r.options.liveSearch?r.$searchbox:o).trigger("focus")}else if(!o.is("input")&&!ie.test(e.which)||e.which===w&&r.selectpicker.keydown.keyHistory){var f,m=[];e.preventDefault(),r.selectpicker.keydown.keyHistory+=Y[e.which],r.selectpicker.keydown.resetKeyHistory.cancel&&clearTimeout(r.selectpicker.keydown.resetKeyHistory.cancel),r.selectpicker.keydown.resetKeyHistory.cancel=r.selectpicker.keydown.resetKeyHistory.start(),f=r.selectpicker.keydown.keyHistory,/^(.)\1+$/.test(f)&&(f=f.charAt(0));for(var v=0;v<r.selectpicker.current.data.length;v++){var g=r.selectpicker.current.data[v];b(g,f,"startsWith",!0)&&r.selectpicker.view.canHighlight[v]&&m.push(g.element)}m.length&&(p=0,a.removeClass("active").find("a").removeClass("active"),1===f.length&&(-1===(p=m.indexOf(r.activeElement))||p===m.length-1?p=0:p++),l=m[p],c=0<h-(s=r.selectpicker.main.data[l]).position?(n=s.position-s.height,!0):(n=s.position-r.sizeInfo.menuInnerHeight,s.position>h+r.sizeInfo.menuInnerHeight),i=r.selectpicker.main.elements[l],r.activeElement=i,r.focusItem(i),i&&i.firstChild.focus(),c&&(r.$menuInner[0].scrollTop=n),o.trigger("focus"))}t&&(e.which===w&&!r.selectpicker.keydown.keyHistory||e.which===J||e.which===I&&r.options.selectOnTab)&&(e.which!==w&&e.preventDefault(),r.options.liveSearch&&e.which===w||(r.$menuInner.find(".active a").trigger("click",!0),o.trigger("focus"),r.options.liveSearch||(e.preventDefault(),$(document).data("spaceSelect",!0))))}},mobile:function(){this.options.mobile=!0,this.$element[0].classList.add("mobile-device")},refresh:function(){var e=this,t=$.extend({},this.options,d(this.$element),this.$element.data());this.options=t,this.options.source.data?(this.render(),this.buildList()):this.fetchData(function(){e.render(),e.buildList()}),this.checkDisabled(),this.setStyle(),this.setWidth(),this.setSize(!0),this.$element.trigger("refreshed"+A)},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),(this.$bsContainer||this.$menu).remove(),this.selectpicker.view.titleOption&&this.selectpicker.view.titleOption.parentNode&&this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption),this.$element.off(A).removeData("selectpicker").removeClass("bs-select-hidden selectpicker mobile-device"),$(window).off(A+"."+this.selectId)}};var le=$.fn.selectpicker;function re(){return g.major<5?$.fn.dropdown?($.fn.dropdown.Constructor._dataApiKeydownHandler||$.fn.dropdown.Constructor.prototype.keydown).apply(this,arguments):void 0:m.dataApiKeydownHandler}$.fn.selectpicker=oe,$.fn.selectpicker.Constructor=H,$.fn.selectpicker.noConflict=function(){return $.fn.selectpicker=le,this},$(document).off("keydown.bs.dropdown.data-api").on("keydown.bs.dropdown.data-api",":not(.bootstrap-select) > ["+z.DATA_TOGGLE+"]",re).on("keydown.bs.dropdown.data-api",":not(.bootstrap-select) > .dropdown-menu",re).on("keydown"+A,".bootstrap-select ["+z.DATA_TOGGLE+'], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input',H.prototype.keydown).on("focusin.modal",".bootstrap-select ["+z.DATA_TOGGLE+'], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input',function(e){e.stopPropagation()}),document.addEventListener("DOMContentLoaded",function(){$(".selectpicker").each(function(){var e=$(this);oe.call(e,e.data())})})}(e)}); -//# sourceMappingURL=bootstrap-select.min.js.map \ No newline at end of file +!function(e,t){void 0===e&&void 0!==window&&(e=window),"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(e.jQuery)}(this,function(e){!function($){"use strict";var M=["sanitize","whiteList","sanitizeFn"],W=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],P={"*":["class","dir","id","lang","role","tabindex","style",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},B=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,R=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i,U=["title","placeholder"];function S(e,t,i){if(i&&"function"==typeof i)return i(e);for(var s=Object.keys(t),n=0,o=e.length;n<o;n++)for(var l=e[n].querySelectorAll("*"),r=0,a=l.length;r<a;r++){var c=l[r],d=c.nodeName.toLowerCase();if(-1===s.indexOf(d))c.parentNode.removeChild(c);else for(var h=[].slice.call(c.attributes),p=[].concat(t["*"]||[],t[d]||[]),u=0,f=h.length;u<f;u++){var m=h[u];!function(e,t){var i=e.nodeName.toLowerCase();if(-1!==$.inArray(i,t))return-1===$.inArray(i,W)||Boolean(e.nodeValue.match(B)||e.nodeValue.match(R));for(var s=$(t).filter(function(e,t){return t instanceof RegExp}),n=0,o=s.length;n<o;n++)if(i.match(s[n]))return 1}(m,p)&&c.removeAttribute(m.nodeName)}}}function d(t){var i,s={};return U.forEach(function(e){(i=t.attr(e))&&(s[e]=i)}),!s.placeholder&&s.title&&(s.placeholder=s.title),s}if(!("classList"in document.createElement("_"))&&"Element"in(i=window)){var t="classList",e="prototype",i=i.Element[e],s=Object,n=function(){var i=$(this);return{add:function(e){return e=Array.prototype.slice.call(arguments).join(" "),i.addClass(e)},remove:function(e){return e=Array.prototype.slice.call(arguments).join(" "),i.removeClass(e)},toggle:function(e,t){return i.toggleClass(e,t)},contains:function(e){return i.hasClass(e)}}};if(s.defineProperty){var o={get:n,enumerable:!0,configurable:!0};try{s.defineProperty(i,t,o)}catch(e){void 0!==e.number&&-2146823252!==e.number||(o.enumerable=!1,s.defineProperty(i,t,o))}}else s[e].__defineGetter__&&i.__defineGetter__(t,n)}var l,r,a,c,o=document.createElement("_");function h(e){if(null==this)throw new TypeError;var t=String(this);if(e&&"[object RegExp]"==c.call(e))throw new TypeError;var i=t.length,s=String(e),n=s.length,e=1<arguments.length?arguments[1]:void 0,e=e?Number(e):0,o=(e!=e&&(e=0),Math.min(Math.max(e,0),i));if(i<n+o)return!1;for(var l=-1;++l<n;)if(t.charCodeAt(o+l)!=s.charCodeAt(l))return!1;return!0}function y(){var e=this.selectpicker.main.data,t=(e=this.options.source.data||this.options.source.search?Object.values(this.selectpicker.optionValuesDataMap):e).filter(function(e){return!!e.selected&&(!this.options.hideDisabled||!e.disabled)},this);if(this.options.source.data&&!this.multiple&&1<t.length){for(var i=0;i<t.length-1;i++)t[i].selected=!1;t=[t[t.length-1]]}return t}function x(e){for(var t,i=[],s=e||y.call(this),n=0,o=s.length;n<o;n++)(t=s[n]).disabled||i.push(void 0===t.value?t.text:t.value);return this.multiple?i:i.length?i[0]:null}o.classList.add("c1","c2"),o.classList.contains("c2")||(l=DOMTokenList.prototype.add,r=DOMTokenList.prototype.remove,DOMTokenList.prototype.add=function(){Array.prototype.forEach.call(arguments,l.bind(this))},DOMTokenList.prototype.remove=function(){Array.prototype.forEach.call(arguments,r.bind(this))}),o.classList.toggle("c3",!1),o.classList.contains("c3")&&(a=DOMTokenList.prototype.toggle,DOMTokenList.prototype.toggle=function(e,t){return 1 in arguments&&!this.contains(e)==!t?t:a.call(this,e)}),o=null,Object.values="function"==typeof Object.values?Object.values:function(t){return Object.keys(t).map(function(e){return t[e]})},String.prototype.startsWith||(c={}.toString,Object.defineProperty?Object.defineProperty(String.prototype,"startsWith",{value:h,configurable:!0,writable:!0}):String.prototype.startsWith=h);var p={useDefault:!1,_set:$.valHooks.select.set},E=($.valHooks.select.set=function(e,t){return t&&!p.useDefault&&$(e).data("selected",!0),p._set.apply(this,arguments)},null),V=function(){try{return new Event("change"),!0}catch(e){return!1}}();function b(e,t,i,s){for(var n=["display","subtext","tokens"],o=!1,l=0;l<n.length;l++){var r=n[l],a=e[r];if(a&&(a=a.toString(),"display"===r&&(a=a.replace(/<[^>]+>/g,"")),a=(a=s?u(a):a).toUpperCase(),o="function"==typeof i?i(a,t):"contains"===i?0<=a.indexOf(t):a.startsWith(t)))break}return o}function v(e){return parseInt(e,10)||0}$.fn.triggerNative=function(e){var t,i=this[0];i.dispatchEvent&&(V?t=new Event(e,{bubbles:!0}):(t=document.createEvent("Event")).initEvent(e,!0,!1),i.dispatchEvent(t))};var j={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"},_=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,F=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\u1ab0-\\u1aff\\u1dc0-\\u1dff]","g");function G(e){return j[e]}function u(e){return(e=e.toString())&&e.replace(_,G).replace(F,"")}f={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},s="(?:"+Object.keys(f).join("|")+")",q=RegExp(s),K=RegExp(s,"g");var f,q,K,k=function(e){return q.test(e=null==e?"":""+e)?e.replace(K,Q):e};function Q(e){return f[e]}var Y={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"},Z=27,J=13,w=32,I=9,C=38,O=40,m=window.Dropdown||bootstrap.Dropdown;function X(){var t;try{t=$.fn.dropdown.Constructor.VERSION}catch(e){t=m.VERSION}return t}var g={success:!1,major:"3"};try{g.full=(X()||"").split(" ")[0].split("."),g.major=g.full[0],g.success=!0}catch(e){}var ee=0,A=".bs.select",T={DISABLED:"disabled",DIVIDER:"divider",SHOW:"open",DROPUP:"dropup",MENU:"dropdown-menu",MENURIGHT:"dropdown-menu-right",MENULEFT:"dropdown-menu-left",BUTTONCLASS:"btn-default",POPOVERHEADER:"popover-title",ICONBASE:"glyphicon",TICKICON:"glyphicon-ok"},z={MENU:"."+T.MENU,DATA_TOGGLE:'data-bs-toggle="dropdown"'},D={div:document.createElement("div"),span:document.createElement("span"),i:document.createElement("i"),subtext:document.createElement("small"),a:document.createElement("a"),li:document.createElement("li"),whitespace:document.createTextNode("\xa0"),fragment:document.createDocumentFragment(),option:document.createElement("option")},te=(D.selectedOption=D.option.cloneNode(!1),D.selectedOption.setAttribute("selected",!0),D.noResults=D.li.cloneNode(!1),D.noResults.className="no-results",D.a.setAttribute("role","option"),D.a.className="dropdown-item",D.subtext.className="text-muted",D.text=D.span.cloneNode(!1),D.text.className="text",D.checkMark=D.span.cloneNode(!1),new RegExp(C+"|"+O)),ie=new RegExp("^"+I+"$|"+Z),L={li:function(e,t,i){var s=D.li.cloneNode(!1);return e&&(1===e.nodeType||11===e.nodeType?s.appendChild(e):s.innerHTML=e),void 0!==t&&""!==t&&(s.className=t),null!=i&&s.classList.add("optgroup-"+i),s},a:function(e,t,i){var s=D.a.cloneNode(!0);return e&&(11===e.nodeType?s.appendChild(e):s.insertAdjacentHTML("beforeend",e)),void 0!==t&&""!==t&&s.classList.add.apply(s.classList,t.split(/\s+/)),i&&s.setAttribute("style",i),s},text:function(e,t){var i,s,n=D.text.cloneNode(!1);if(e.content?n.innerHTML=e.content:(n.textContent=e.text,e.icon&&(i=D.whitespace.cloneNode(!1),(s=(!0===t?D.i:D.span).cloneNode(!1)).className=this.options.iconBase+" "+e.icon,D.fragment.appendChild(s),D.fragment.appendChild(i)),e.subtext&&((s=D.subtext.cloneNode(!1)).textContent=e.subtext,n.appendChild(s))),!0===t)for(;0<n.childNodes.length;)D.fragment.appendChild(n.childNodes[0]);else D.fragment.appendChild(n);return D.fragment},label:function(e){var t,i,s=D.text.cloneNode(!1);return s.innerHTML=e.display,e.icon&&(t=D.whitespace.cloneNode(!1),(i=D.span.cloneNode(!1)).className=this.options.iconBase+" "+e.icon,D.fragment.appendChild(i),D.fragment.appendChild(t)),e.subtext&&((i=D.subtext.cloneNode(!1)).textContent=e.subtext,s.appendChild(i)),D.fragment.appendChild(s),D.fragment}},N={fromOption:function(e,t){var i;switch(t){case"divider":i="true"===e.getAttribute("data-divider");break;case"text":i=e.textContent;break;case"label":i=e.label;break;case"style":i=e.style.cssText;break;case"title":i=e.title;break;default:i=e.getAttribute("data-"+t.replace(/[A-Z]+(?![a-z])|[A-Z]/g,function(e,t){return(t?"-":"")+e.toLowerCase()}))}return i},fromDataSource:function(e,t){var i;switch(t){case"text":case"label":i=e.text||e.value||"";break;default:i=e[t]}return i}};function se(e,t){e.length||(D.noResults.innerHTML=this.options.noneResultsText.replace("{0}",'"'+k(t)+'"'),this.$menuInner[0].firstChild.appendChild(D.noResults))}function ne(e){return!(e.hidden||this.options.hideDisabled&&e.disabled)}function H(e,t){var i=this;p.useDefault||($.valHooks.select.set=p._set,p.useDefault=!0),this.$element=$(e),this.$newElement=null,this.$button=null,this.$menu=null,this.options=t,this.selectpicker={main:{data:[],optionQueue:D.fragment.cloneNode(!1),hasMore:!1},search:{data:[],hasMore:!1},current:{},view:{},optionValuesDataMap:{},isSearching:!1,keydown:{keyHistory:"",resetKeyHistory:{start:function(){return setTimeout(function(){i.selectpicker.keydown.keyHistory=""},800)}}}},this.sizeInfo={},"number"==typeof(e=this.options.windowPadding)&&(this.options.windowPadding=[e,e,e,e]),this.val=H.prototype.val,this.render=H.prototype.render,this.refresh=H.prototype.refresh,this.setStyle=H.prototype.setStyle,this.selectAll=H.prototype.selectAll,this.deselectAll=H.prototype.deselectAll,this.destroy=H.prototype.destroy,this.remove=H.prototype.remove,this.show=H.prototype.show,this.hide=H.prototype.hide,this.init()}function oe(e){var r,a=arguments,c=e;if([].shift.apply(a),!g.success){try{g.full=(X()||"").split(" ")[0].split(".")}catch(e){H.BootstrapVersion?g.full=H.BootstrapVersion.split(" ")[0].split("."):(g.full=[g.major,"0","0"],console.warn("There was an issue retrieving Bootstrap's version. Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.",e))}g.major=g.full[0],g.success=!0}if("4"<=g.major){var t=[];H.DEFAULTS.style===T.BUTTONCLASS&&t.push({name:"style",className:"BUTTONCLASS"}),H.DEFAULTS.iconBase===T.ICONBASE&&t.push({name:"iconBase",className:"ICONBASE"}),H.DEFAULTS.tickIcon===T.TICKICON&&t.push({name:"tickIcon",className:"TICKICON"}),T.DIVIDER="dropdown-divider",T.SHOW="show",T.BUTTONCLASS="btn-light",T.POPOVERHEADER="popover-header",T.ICONBASE="",T.TICKICON="bs-ok-default";for(var i=0;i<t.length;i++){e=t[i];H.DEFAULTS[e.name]=T[e.className]}}"4"<g.major&&(z.DATA_TOGGLE='data-bs-toggle="dropdown"');var s=this.each(function(){var e=$(this);if(e.is("select")){var t=e.data("selectpicker"),i="object"==typeof c&&c;if(i.title&&(i.placeholder=i.title),t){if(i)for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t.options[s]=i[s])}else{var n,o=e.data();for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&-1!==$.inArray(n,M)&&delete o[n];var l=$.extend({},H.DEFAULTS,$.fn.selectpicker.defaults||{},d(e),o,i);l.template=$.extend({},H.DEFAULTS.template,$.fn.selectpicker.defaults?$.fn.selectpicker.defaults.template:{},o.template,i.template),l.source=$.extend({},H.DEFAULTS.source,$.fn.selectpicker.defaults?$.fn.selectpicker.defaults.source:{},i.source),e.data("selectpicker",t=new H(this,l))}"string"==typeof c&&(r=t[c]instanceof Function?t[c].apply(t,a):t.options[c])}});return void 0!==r?r:s}H.VERSION="1.14.0-beta3",H.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results matched {0}",countSelectedText:function(e,t){return 1==e?"{0} item selected":"{0} items selected"},maxOptionsText:function(e,t){return[1==e?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==t?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",source:{pageSize:40},chunkSize:40,doneButton:!1,doneButtonText:"Close",multipleSeparator:", ",styleBase:"btn",style:T.BUTTONCLASS,size:"auto",title:null,placeholder:null,allowClear:!1,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,liveSearchNormalize:!1,liveSearchStyle:"contains",actionsBox:!1,iconBase:T.ICONBASE,tickIcon:T.TICKICON,showTick:!1,template:{caret:'<span class="caret"></span>'},maxOptions:!1,mobile:!1,selectOnTab:!0,dropdownAlignRight:!1,windowPadding:0,virtualScroll:600,display:!1,sanitize:!0,sanitizeFn:null,whiteList:P},H.prototype={constructor:H,init:function(){var i=this,e=this.$element.attr("id"),t=this.$element[0],s=t.form;ee++,this.selectId="bs-select-"+ee,t.classList.add("bs-select-hidden"),this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),t.classList.contains("show-tick")&&(this.options.showTick=!0),this.$newElement=this.createDropdown(),this.$element.after(this.$newElement).prependTo(this.$newElement),s&&null===t.form&&(s.id||(s.id="form-"+this.selectId),t.setAttribute("form",s.id)),this.$button=this.$newElement.children("button"),this.options.allowClear&&(this.$clearButton=this.$button.children(".bs-select-clear-selected")),this.$menu=this.$newElement.children(z.MENU),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),t.classList.remove("bs-select-hidden"),this.fetchData(function(){i.render(!0),i.buildList(),requestAnimationFrame(function(){i.$element.trigger("loaded"+A)})}),!0===this.options.dropdownAlignRight&&this.$menu[0].classList.add(T.MENURIGHT),void 0!==e&&this.$button.attr("data-id",e),this.checkDisabled(),this.clickListener(),4<g.major&&(this.dropdown=new m(this.$button[0])),this.options.liveSearch?(this.liveSearchListener(),this.focusedParent=this.$searchbox[0]):this.focusedParent=this.$menuInner[0],this.setStyle(),this.setWidth(),this.options.container?this.selectPosition():this.$element.on("hide"+A,function(){var e,t;i.isVirtual()&&(t=(e=i.$menuInner[0]).firstChild.cloneNode(!1),e.replaceChild(t,e.firstChild),e.scrollTop=0)}),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(e){i.$element.trigger("hide"+A,e)},"hidden.bs.dropdown":function(e){i.$element.trigger("hidden"+A,e)},"show.bs.dropdown":function(e){i.$element.trigger("show"+A,e)},"shown.bs.dropdown":function(e){i.$element.trigger("shown"+A,e)}}),t.hasAttribute("required")&&this.$element.on("invalid"+A,function(){i.$button[0].classList.add("bs-invalid"),i.$element.on("shown"+A+".invalid",function(){i.$element.val(i.$element.val()).off("shown"+A+".invalid")}).on("rendered"+A,function(){this.validity.valid&&i.$button[0].classList.remove("bs-invalid"),i.$element.off("rendered"+A)}),i.$button.on("blur"+A,function(){i.$element.trigger("focus").trigger("blur"),i.$button.off("blur"+A)})}),s&&$(s).on("reset"+A,function(){requestAnimationFrame(function(){i.render()})})},createDropdown:function(){var e=this.multiple||this.options.showTick?" show-tick":"",t=this.multiple?' aria-multiselectable="true"':"",i="",s=this.autofocus?" autofocus":"";g.major<4&&this.$element.parent().hasClass("input-group")&&(i=" input-group-btn");var n="",o="",l="",r="",a="";return this.options.header&&(n='<div class="'+T.POPOVERHEADER+'"><button type="button" class="close" aria-hidden="true">×</button>'+this.options.header+"</div>"),this.options.liveSearch&&(o='<div class="bs-searchbox"><input type="search" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+k(this.options.liveSearchPlaceholder)+'"')+' role="combobox" aria-label="Search" aria-controls="'+this.selectId+'" aria-autocomplete="list"></div>'),this.multiple&&this.options.actionsBox&&(l='<div class="bs-actionsbox"><div class="btn-group btn-group-sm"><button type="button" class="actions-btn bs-select-all btn '+T.BUTTONCLASS+'">'+this.options.selectAllText+'</button><button type="button" class="actions-btn bs-deselect-all btn '+T.BUTTONCLASS+'">'+this.options.deselectAllText+"</button></div></div>"),this.multiple&&this.options.doneButton&&(r='<div class="bs-donebutton"><div class="btn-group"><button type="button" class="btn btn-sm '+T.BUTTONCLASS+'">'+this.options.doneButtonText+"</button></div></div>"),this.options.allowClear&&(a='<span class="close bs-select-clear-selected" title="'+this.options.deselectAllText+'"><span>×</span>'),e='<div class="dropdown bootstrap-select'+e+i+'"><button type="button" tabindex="-1" class="'+this.options.styleBase+' dropdown-toggle" '+("static"===this.options.display?'data-display="static"':"")+z.DATA_TOGGLE+s+' role="combobox" aria-owns="'+this.selectId+'" aria-haspopup="listbox" aria-expanded="false"><div class="filter-option"><div class="filter-option-inner"><div class="filter-option-inner-inner"> </div></div> </div>'+a+"</span>"+("4"<=g.major?"":'<span class="bs-caret">'+this.options.template.caret+"</span>")+'</button><div class="'+T.MENU+" "+("4"<=g.major?"":T.SHOW)+'">'+n+o+l+'<div class="inner '+T.SHOW+'" role="listbox" id="'+this.selectId+'" tabindex="-1" '+t+'><ul class="'+T.MENU+" inner "+("4"<=g.major?T.SHOW:"")+'" role="presentation"></ul></div>'+r+"</div></div>",$(e)},setPositionData:function(){this.selectpicker.view.canHighlight=[],this.selectpicker.view.size=0,this.selectpicker.view.firstHighlightIndex=!1;for(var e=0;e<this.selectpicker.current.data.length;e++){var t=this.selectpicker.current.data[e],i=!0;"divider"===t.type?(i=!1,t.height=this.sizeInfo.dividerHeight):"optgroup-label"===t.type?(i=!1,t.height=this.sizeInfo.dropdownHeaderHeight):t.height=this.sizeInfo.liHeight,t.disabled&&(i=!1),this.selectpicker.view.canHighlight.push(i),i&&(this.selectpicker.view.size++,t.posinset=this.selectpicker.view.size,!1===this.selectpicker.view.firstHighlightIndex&&(this.selectpicker.view.firstHighlightIndex=e)),t.position=(0===e?0:this.selectpicker.current.data[e-1].position)+t.height}},isVirtual:function(){return!1!==this.options.virtualScroll&&this.selectpicker.main.data.length>=this.options.virtualScroll||!0===this.options.virtualScroll},createView:function(y,e,t){var x=this,i=0;function E(e,t){var i,s=x.selectpicker.current.data.length,n=[],o=!0,l=x.isVirtual();x.selectpicker.view.scrollTop=e;for(var r,a=x.options.chunkSize,c=Math.ceil(s/a)||1,d=0;d<c;d++){var h=d===c-1?s:(d+1)*a;if(n[d]=[d*a+(d?1:0),h],!s)break;void 0===i&&e-1<=x.selectpicker.current.data[h-1].position-x.sizeInfo.menuInnerHeight&&(i=d)}if(void 0===i&&(i=0),g=[x.selectpicker.view.position0,x.selectpicker.view.position1],p=Math.max(0,i-1),f=Math.min(c-1,i+1),x.selectpicker.view.position0=!1!==l&&Math.max(0,n[p][0])||0,x.selectpicker.view.position1=!1===l?s:Math.min(s,n[f][1])||0,p=g[0]!==x.selectpicker.view.position0||g[1]!==x.selectpicker.view.position1,void 0!==x.activeElement&&(t&&(x.activeElement!==x.selectedElement&&x.defocusItem(x.activeElement),x.activeElement=void 0),x.activeElement!==x.selectedElement&&x.defocusItem(x.selectedElement)),void 0!==x.prevActiveElement&&x.prevActiveElement!==x.activeElement&&x.prevActiveElement!==x.selectedElement&&x.defocusItem(x.prevActiveElement),t||p||x.selectpicker.current.hasMore){if(f=x.selectpicker.view.visibleElements?x.selectpicker.view.visibleElements.slice():[],x.selectpicker.view.visibleElements=!1===l?x.selectpicker.current.elements:x.selectpicker.current.elements.slice(x.selectpicker.view.position0,x.selectpicker.view.position1),x.setOptionStatus(),(y||!1===l&&t)&&(g=f,r=x.selectpicker.view.visibleElements,o=!(g.length===r.length&&g.every(function(e,t){return e===r[t]}))),(t||!0===l)&&o){var p=x.$menuInner[0],u=document.createDocumentFragment(),f=p.firstChild.cloneNode(!1),m=x.selectpicker.view.visibleElements,v=[];p.replaceChild(f,p.firstChild);for(var g,d=0,b=m.length;d<b;d++){var w,k,I=m[d];x.options.sanitize&&(w=I.lastChild)&&(k=x.selectpicker.current.data[d+x.selectpicker.view.position0])&&k.content&&!k.sanitized&&(v.push(w),k.sanitized=!0),u.appendChild(I)}x.options.sanitize&&v.length&&S(v,x.options.whiteList,x.options.sanitizeFn),!0===l?(g=0===x.selectpicker.view.position0?0:x.selectpicker.current.data[x.selectpicker.view.position0-1].position,o=x.selectpicker.view.position1>s-1?0:x.selectpicker.current.data[s-1].position-x.selectpicker.current.data[x.selectpicker.view.position1-1].position,p.firstChild.style.marginTop=g+"px",p.firstChild.style.marginBottom=o+"px"):(p.firstChild.style.marginTop=0,p.firstChild.style.marginBottom=0),p.firstChild.appendChild(u),!0===l&&x.sizeInfo.hasScrollBar&&(f=p.firstChild.offsetWidth,t&&f<x.sizeInfo.menuInnerInnerWidth&&x.sizeInfo.totalMenuWidth>x.sizeInfo.selectWidth?p.firstChild.style.minWidth=x.sizeInfo.menuInnerInnerWidth+"px":f>x.sizeInfo.menuInnerInnerWidth&&(x.$menu[0].style.minWidth=0,(g=p.firstChild.offsetWidth)>x.sizeInfo.menuInnerInnerWidth&&(x.sizeInfo.menuInnerInnerWidth=g,p.firstChild.style.minWidth=x.sizeInfo.menuInnerInnerWidth+"px"),x.$menu[0].style.minWidth=""))}(!y&&x.options.source.data||y&&x.options.source.search)&&x.selectpicker.current.hasMore&&i===c-1&&0<e&&(o=Math.floor(i*x.options.chunkSize/x.options.source.pageSize)+2,x.fetchData(function(){x.render(),x.buildList(s,y),x.setPositionData(),E(e)},y?"search":"data",o,y?x.selectpicker.search.previousValue:void 0))}x.prevActiveElement=x.activeElement,x.options.liveSearch?y&&t&&(x.selectpicker.view.canHighlight[l=0]||(l=1+x.selectpicker.view.canHighlight.slice(1).indexOf(!0)),f=x.selectpicker.view.visibleElements[l],x.defocusItem(x.selectpicker.view.currentActive),x.activeElement=(x.selectpicker.current.data[l]||{}).element,x.focusItem(f)):x.$menuInner.trigger("focus")}this.selectpicker.isSearching=y,this.selectpicker.current=y?this.selectpicker.search:this.selectpicker.main,this.setPositionData(),e&&(t?i=this.$menuInner[0].scrollTop:x.multiple||"number"==typeof(t=((e=x.$element[0]).options[e.selectedIndex]||{}).liIndex)&&!1!==x.options.size&&(t=(e=x.selectpicker.main.data[t])&&e.position)&&(i=t-(x.sizeInfo.menuInnerHeight+x.sizeInfo.liHeight)/2)),E(i,!0),this.$menuInner.off("scroll.createView").on("scroll.createView",function(e,t){x.noScroll||E(this.scrollTop,t),x.noScroll=!1}),$(window).off("resize"+A+"."+this.selectId+".createView").on("resize"+A+"."+this.selectId+".createView",function(){x.$newElement.hasClass(T.SHOW)&&E(x.$menuInner[0].scrollTop)})},focusItem:function(e,t,i){var s;e&&(t=t||this.selectpicker.current.data[this.selectpicker.current.elements.indexOf(this.activeElement)],(s=e.firstChild)&&(s.setAttribute("aria-setsize",this.selectpicker.view.size),s.setAttribute("aria-posinset",t.posinset),!0!==i&&(this.focusedParent.setAttribute("aria-activedescendant",s.id),e.classList.add("active"),s.classList.add("active"))))},defocusItem:function(e){e&&(e.classList.remove("active"),e.firstChild&&e.firstChild.classList.remove("active"))},setPlaceholder:function(){var e,t,i,s,n,o,l,r=this,a=!1;return!this.options.placeholder&&!this.options.allowClear||this.multiple||(this.selectpicker.view.titleOption||(this.selectpicker.view.titleOption=document.createElement("option")),e=this.$element[0],t=!(a=!0),i=!this.selectpicker.view.titleOption.parentNode,s=e.selectedIndex,n=e.options[s],o=(o=e.querySelector("select > *:not(:disabled)"))?o.index:0,l=(l=window.performance&&window.performance.getEntriesByType("navigation"))&&l.length?"back_forward"!==l[0].type:2!==window.performance.navigation.type,i&&(this.selectpicker.view.titleOption.className="bs-title-option",this.selectpicker.view.titleOption.value="",t=!n||s===o&&!1===n.defaultSelected&&void 0===this.$element.data("selected")),!i&&0===this.selectpicker.view.titleOption.index||e.insertBefore(this.selectpicker.view.titleOption,e.firstChild),t&&l?e.selectedIndex=0:"complete"!==document.readyState&&window.addEventListener("pageshow",function(){r.selectpicker.view.displayedValue!==e.value&&r.render()})),a},fetchData:function(n,o,e,t){e=e||1,o=o||"data";var l,r=this,i=this.options.source[o];i?(this.options.virtualScroll=!0,"function"==typeof i?i.call(this,function(e,t,i){var s=r.selectpicker["search"===o?"search":"main"];s.hasMore=t,s.totalItems=i,l=r.buildData(e,o),n.call(r,l),r.$element.trigger("fetched"+A)},e,t):Array.isArray(i)&&(l=r.buildData(i,o),n.call(r,l))):(l=this.buildData(!1,o),n.call(r,l))},buildData:function(h,e){var o=this,p=!1===h?N.fromOption:N.fromDataSource,u=':not([hidden]):not([data-hidden="true"]):not([style*="display: none"])',f=[],l=this.selectpicker.main.data?this.selectpicker.main.data.length:0,m=0,v=this.setPlaceholder()&&!h?1:0,t=("search"===e&&(l=this.selectpicker.search.data.length),this.options.hideDisabled&&(u+=":not(:disabled)"),h?h.filter(ne,this):this.$element[0].querySelectorAll("select > *"+u));function g(e){var t=f[f.length-1];t&&"divider"===t.type&&(t.optID||e.optID)||((e=e||{}).type="divider",f.push(e))}function b(e,t){var i,s,n;(t=t||{}).divider=p(e,"divider"),!0===t.divider?g({optID:t.optID}):(i=f.length+l,s=(s=p(e,"style"))?k(s):"",n=(e.className||"")+(t.optgroupClass||""),t.optID&&(n="opt "+n),t.optionClass=n.trim(),t.inlineStyle=s,t.text=p(e,"text"),t.title=p(e,"title"),t.content=p(e,"content"),t.tokens=p(e,"tokens"),t.subtext=p(e,"subtext"),t.icon=p(e,"icon"),t.display=t.content||t.text,t.value=void 0===e.value?e.text:e.value,t.type="option",t.index=i,t.option=e.option||e,t.option.liIndex=i,t.selected=!!e.selected,t.disabled=t.disabled||!!e.disabled,!1!==h&&(o.selectpicker.optionValuesDataMap[t.value]?t=$.extend(o.selectpicker.optionValuesDataMap[t.value],t):o.selectpicker.optionValuesDataMap[t.value]=t),f.push(t))}function i(e,t){var i=t[e],s=!(e-1<v)&&t[e-1],t=t[e+1],n=h?i.children.filter(ne,this):i.querySelectorAll("option"+u);if(n.length){var o,l,r={display:k(p(w,"label")),subtext:p(i,"subtext"),icon:p(i,"icon"),type:"optgroup-label",optgroupClass:" "+(i.className||""),optgroup:i};m++,s&&g({optID:m}),r.optID=m,f.push(r);for(var a=0,c=n.length;a<c;a++){var d=n[a];0===a&&(l=(o=f.length-1)+c),b(d,{headerIndex:o,lastIndex:l,optID:r.optID,optgroupClass:r.optgroupClass,disabled:i.disabled})}t&&g({optID:m})}}for(var s=t.length,n=v;n<s;n++){var w=t[n],r=w.children;r&&r.length?i.call(this,n,t):b.call(this,w,{})}switch(e){case"data":this.selectpicker.main.data||(this.selectpicker.main.data=[]),Array.prototype.push.apply(this.selectpicker.main.data,f),this.selectpicker.current.data=this.selectpicker.main.data;break;case"search":Array.prototype.push.apply(this.selectpicker.search.data,f)}return f},buildList:function(e,t){var i=this,s=(t?this.selectpicker.search:this.selectpicker.main).data,n=[],o=0;!i.options.showTick&&!i.multiple||D.checkMark.parentNode||(D.checkMark.className=this.options.iconBase+" "+i.options.tickIcon+" check-mark",D.a.appendChild(D.checkMark));for(var l=s.length,r=e||0;r<l;r++){var a,c=s[r],d=(p=a=h=d=void 0,n),h=c,p=0;switch(h.type){case"divider":a=L.li(!1,T.DIVIDER,h.optID?h.optID+"div":void 0);break;case"option":(a=L.li(L.a(L.text.call(i,h),h.optionClass,h.inlineStyle),"",h.optID)).firstChild&&(a.firstChild.id=i.selectId+"-"+h.index);break;case"optgroup-label":a=L.li(L.label.call(i,h),"dropdown-header"+h.optgroupClass,h.optID)}h.element?h.element.innerHTML=a.innerHTML:h.element=a,d.push(h.element),h.display&&(p+=h.display.length),h.subtext&&(p+=h.subtext.length),h.icon&&(p+=1),o<p&&(o=p,i.selectpicker.view.widestOption=d[d.length-1])}e?t?Array.prototype.push.apply(this.selectpicker.search.elements,n):(Array.prototype.push.apply(this.selectpicker.main.elements,n),this.selectpicker.current.elements=this.selectpicker.main.elements):t?this.selectpicker.search.elements=n:this.selectpicker.main.elements=this.selectpicker.current.elements=n},findLis:function(){return this.$menuInner.find(".inner > li")},render:function(e){var i=this,t=this.$element[0],s=this.setPlaceholder()&&0===t.selectedIndex,n=y.call(this),o=n.length,l=x.call(this,n),r=this.$button[0],a=r.querySelector(".filter-option-inner-inner"),c=document.createTextNode(this.options.multipleSeparator),d=D.fragment.cloneNode(!1),h=!1;if(this.options.source.data&&e&&(n.map(function e(t){t.selected?i.createOption(t,!0):t.children&&t.children.length&&t.children.map(e)}),t.appendChild(this.selectpicker.main.optionQueue),s=s&&0===t.selectedIndex),r.classList.toggle("bs-placeholder",i.multiple?!o:!l&&0!==l),i.multiple||1!==n.length||(i.selectpicker.view.displayedValue=l),"static"===this.options.selectedTextFormat)d=L.text.call(this,{text:this.options.placeholder},!0);else if(!1===(this.multiple&&-1!==this.options.selectedTextFormat.indexOf("count")&&0<o&&(1<(e=this.options.selectedTextFormat.split(">")).length&&o>e[1]||1===e.length&&2<=o))){if(!s){for(var p=0;p<o&&p<50;p++){var u=n[p],f={};u&&(this.multiple&&0<p&&d.appendChild(c.cloneNode(!1)),u.title?f.text=u.title:u.content&&i.options.showContent?(f.content=u.content.toString(),h=!0):(i.options.showIcon&&(f.icon=u.icon),i.options.showSubtext&&!i.multiple&&u.subtext&&(f.subtext=" "+u.subtext),f.text=u.text.trim()),d.appendChild(L.text.call(this,f,!0)))}49<o&&d.appendChild(document.createTextNode("..."))}}else var t=':not([hidden]):not([data-hidden="true"]):not([data-divider="true"]):not([style*="display: none"])',l=(this.options.hideDisabled&&(t+=":not(:disabled)"),this.$element[0].querySelectorAll("select > option"+t+", optgroup"+t+" option"+t).length),e="function"==typeof this.options.countSelectedText?this.options.countSelectedText(o,l):this.options.countSelectedText,d=L.text.call(this,{text:e.replace("{0}",o.toString()).replace("{1}",l.toString())},!0);d.childNodes.length||(d=L.text.call(this,{text:this.options.placeholder||this.options.noneSelectedText},!0)),r.title=d.textContent.replace(/<[^>]*>?/g,"").trim(),this.options.sanitize&&h&&S([d],i.options.whiteList,i.options.sanitizeFn),a.innerHTML="",a.appendChild(d),g.major<4&&this.$newElement[0].classList.contains("bs3-has-addon")&&(s=r.querySelector(".filter-expand"),(t=a.cloneNode(!0)).className="filter-expand",s?r.replaceChild(t,s):r.appendChild(t)),this.$element.trigger("rendered"+A)},setStyle:function(e,t){var i=this.$button[0],s=this.$newElement[0],n=this.options.style.trim();this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,"")),g.major<4&&(s.classList.add("bs3"),s.parentNode.classList&&s.parentNode.classList.contains("input-group")&&(s.previousElementSibling||s.nextElementSibling)&&(s.previousElementSibling||s.nextElementSibling).classList.contains("input-group-addon")&&s.classList.add("bs3-has-addon")),s=e?e.trim():n,"add"==t?s&&i.classList.add.apply(i.classList,s.split(" ")):"remove"==t?s&&i.classList.remove.apply(i.classList,s.split(" ")):(n&&i.classList.remove.apply(i.classList,n.split(" ")),s&&i.classList.add.apply(i.classList,s.split(" ")))},liHeight:function(e){if(e||!1!==this.options.size&&!Object.keys(this.sizeInfo).length){var t,e=D.div.cloneNode(!1),i=D.div.cloneNode(!1),s=D.div.cloneNode(!1),n=document.createElement("ul"),o=D.li.cloneNode(!1),l=D.li.cloneNode(!1),r=D.a.cloneNode(!1),a=D.span.cloneNode(!1),c=this.options.header&&0<this.$menu.find("."+T.POPOVERHEADER).length?this.$menu.find("."+T.POPOVERHEADER)[0].cloneNode(!0):null,d=this.options.liveSearch?D.div.cloneNode(!1):null,h=this.options.actionsBox&&this.multiple&&0<this.$menu.find(".bs-actionsbox").length?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,p=this.options.doneButton&&this.multiple&&0<this.$menu.find(".bs-donebutton").length?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null,u=this.$element[0].options[0];if(this.sizeInfo.selectWidth=this.$newElement[0].offsetWidth,a.className="text",r.className="dropdown-item "+(u?u.className:""),e.className=this.$menu[0].parentNode.className+" "+T.SHOW,e.style.width=0,"auto"===this.options.width&&(i.style.minWidth=0),i.className=T.MENU+" "+T.SHOW,s.className="inner "+T.SHOW,n.className=T.MENU+" inner "+("4"<=g.major?T.SHOW:""),o.className=T.DIVIDER,l.className="dropdown-header",a.appendChild(document.createTextNode("\u200b")),this.selectpicker.current.data.length)for(var f=0;f<this.selectpicker.current.data.length;f++){var m=this.selectpicker.current.data[f];if("option"===m.type&&"none"!==$(m.element.firstChild).css("display")){t=m.element;break}}else t=D.li.cloneNode(!1),r.appendChild(a),t.appendChild(r);l.appendChild(a.cloneNode(!0)),this.selectpicker.view.widestOption&&n.appendChild(this.selectpicker.view.widestOption.cloneNode(!0)),n.appendChild(t),n.appendChild(o),n.appendChild(l),c&&i.appendChild(c),d&&(u=document.createElement("input"),d.className="bs-searchbox",u.className="form-control",d.appendChild(u),i.appendChild(d)),h&&i.appendChild(h),s.appendChild(n),i.appendChild(s),p&&i.appendChild(p),e.appendChild(i),document.body.appendChild(e);r=t.offsetHeight,a=l?l.offsetHeight:0,u=c?c.offsetHeight:0,n=d?d.offsetHeight:0,l=h?h.offsetHeight:0,c=p?p.offsetHeight:0,d=$(o).outerHeight(!0),h=window.getComputedStyle(i),p=i.offsetWidth,o={vert:v(h.paddingTop)+v(h.paddingBottom)+v(h.borderTopWidth)+v(h.borderBottomWidth),horiz:v(h.paddingLeft)+v(h.paddingRight)+v(h.borderLeftWidth)+v(h.borderRightWidth)},h={vert:o.vert+v(h.marginTop)+v(h.marginBottom)+2,horiz:o.horiz+v(h.marginLeft)+v(h.marginRight)+2};s.style.overflowY="scroll",s=i.offsetWidth-p,document.body.removeChild(e),this.sizeInfo.liHeight=r,this.sizeInfo.dropdownHeaderHeight=a,this.sizeInfo.headerHeight=u,this.sizeInfo.searchHeight=n,this.sizeInfo.actionsHeight=l,this.sizeInfo.doneButtonHeight=c,this.sizeInfo.dividerHeight=d,this.sizeInfo.menuPadding=o,this.sizeInfo.menuExtras=h,this.sizeInfo.menuWidth=p,this.sizeInfo.menuInnerInnerWidth=p-o.horiz,this.sizeInfo.totalMenuWidth=this.sizeInfo.menuWidth,this.sizeInfo.scrollBarWidth=s,this.sizeInfo.selectHeight=this.$newElement[0].offsetHeight,this.setPositionData()}},getSelectPosition:function(){var e,t=$(window),i=this.$newElement.offset(),s=$(this.options.container),s=(this.options.container&&s.length&&!s.is("body")?((e=s.offset()).top+=parseInt(s.css("borderTopWidth")),e.left+=parseInt(s.css("borderLeftWidth"))):e={top:0,left:0},this.options.windowPadding);this.sizeInfo.selectOffsetTop=i.top-e.top-t.scrollTop(),this.sizeInfo.selectOffsetBot=t.height()-this.sizeInfo.selectOffsetTop-this.sizeInfo.selectHeight-e.top-s[2],this.sizeInfo.selectOffsetLeft=i.left-e.left-t.scrollLeft(),this.sizeInfo.selectOffsetRight=t.width()-this.sizeInfo.selectOffsetLeft-this.sizeInfo.selectWidth-e.left-s[1],this.sizeInfo.selectOffsetTop-=s[0],this.sizeInfo.selectOffsetLeft-=s[3]},setMenuSize:function(e){this.getSelectPosition();var t,i,s,n,o,l,r=this.sizeInfo.selectWidth,a=this.sizeInfo.liHeight,c=this.sizeInfo.headerHeight,d=this.sizeInfo.searchHeight,h=this.sizeInfo.actionsHeight,p=this.sizeInfo.doneButtonHeight,u=this.sizeInfo.dividerHeight,f=this.sizeInfo.menuPadding,m=0;if(this.options.dropupAuto&&(l=a*this.selectpicker.current.data.length+f.vert,l=this.sizeInfo.selectOffsetTop-this.sizeInfo.selectOffsetBot>this.sizeInfo.menuExtras.vert&&l+this.sizeInfo.menuExtras.vert+50>this.sizeInfo.selectOffsetBot,!0===this.selectpicker.isSearching&&(l=this.selectpicker.dropup),this.$newElement.toggleClass(T.DROPUP,l),this.selectpicker.dropup=l),"auto"===this.options.size)l=3<this.selectpicker.current.data.length?3*this.sizeInfo.liHeight+this.sizeInfo.menuExtras.vert-2:0,i=this.sizeInfo.selectOffsetBot-this.sizeInfo.menuExtras.vert,s=l+c+d+h+p,o=Math.max(l-f.vert,0),t=(n=i=this.$newElement.hasClass(T.DROPUP)?this.sizeInfo.selectOffsetTop-this.sizeInfo.menuExtras.vert:i)-c-d-h-p-f.vert;else if(this.options.size&&"auto"!=this.options.size&&this.selectpicker.current.elements.length>this.options.size){for(var v=0;v<this.options.size;v++)"divider"===this.selectpicker.current.data[v].type&&m++;t=(i=a*this.options.size+m*u+f.vert)-f.vert,n=i+c+d+h+p,s=o=""}this.$menu.css({"max-height":n+"px",overflow:"hidden","min-height":s+"px"}),this.$menuInner.css({"max-height":t+"px",overflow:"hidden auto","min-height":o+"px"}),this.sizeInfo.menuInnerHeight=Math.max(t,1),this.selectpicker.current.data.length&&this.selectpicker.current.data[this.selectpicker.current.data.length-1].position>this.sizeInfo.menuInnerHeight&&(this.sizeInfo.hasScrollBar=!0,this.sizeInfo.totalMenuWidth=this.sizeInfo.menuWidth+this.sizeInfo.scrollBarWidth),"auto"===this.options.dropdownAlignRight&&this.$menu.toggleClass(T.MENURIGHT,this.sizeInfo.selectOffsetLeft>this.sizeInfo.selectOffsetRight&&this.sizeInfo.selectOffsetRight<this.sizeInfo.totalMenuWidth-r),this.dropdown&&this.dropdown._popper&&this.dropdown._popper.update()},setSize:function(e){var t,i;this.liHeight(e),this.options.header&&this.$menu.css("padding-top",0),!1!==this.options.size&&(t=this,i=$(window),this.setMenuSize(),this.options.liveSearch&&this.$searchbox.off("input.setMenuSize propertychange.setMenuSize").on("input.setMenuSize propertychange.setMenuSize",function(){return t.setMenuSize()}),"auto"===this.options.size?i.off("resize"+A+"."+this.selectId+".setMenuSize scroll"+A+"."+this.selectId+".setMenuSize").on("resize"+A+"."+this.selectId+".setMenuSize scroll"+A+"."+this.selectId+".setMenuSize",function(){return t.setMenuSize()}):this.options.size&&"auto"!=this.options.size&&this.selectpicker.current.elements.length>this.options.size&&i.off("resize"+A+"."+this.selectId+".setMenuSize scroll"+A+"."+this.selectId+".setMenuSize")),this.createView(!1,!0,e)},setWidth:function(){var i=this;"auto"===this.options.width?requestAnimationFrame(function(){i.$menu.css("min-width","0"),i.$element.on("loaded"+A,function(){i.liHeight(),i.setMenuSize();var e=i.$newElement.clone().appendTo("body"),t=e.css("width","auto").children("button").outerWidth();e.remove(),i.sizeInfo.selectWidth=Math.max(i.sizeInfo.totalMenuWidth,t),i.$newElement.css("width",i.sizeInfo.selectWidth+"px")})}):"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width","")),this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement[0].classList.remove("fit-width")},selectPosition:function(){this.$bsContainer=$('<div class="bs-container" />');function e(e){var t={},i=l.options.display||!!$.fn.dropdown.Constructor.Default&&$.fn.dropdown.Constructor.Default.display;l.$bsContainer.addClass(e.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass(T.DROPUP,e.hasClass(T.DROPUP)),s=e.offset(),r.is("body")?n={top:0,left:0}:((n=r.offset()).top+=parseInt(r.css("borderTopWidth"))-r.scrollTop(),n.left+=parseInt(r.css("borderLeftWidth"))-r.scrollLeft()),o=e.hasClass(T.DROPUP)?0:e[0].offsetHeight,(g.major<4||"static"===i)&&(t.top=s.top-n.top+o,t.left=s.left-n.left),t.width=e[0].offsetWidth,l.$bsContainer.css(t)}var s,n,o,l=this,r=$(this.options.container);this.$button.on("click.bs.dropdown.data-api",function(){l.isDisabled()||(e(l.$newElement),l.$bsContainer.appendTo(l.options.container).toggleClass(T.SHOW,!l.$button.hasClass(T.SHOW)).append(l.$menu))}),$(window).off("resize"+A+"."+this.selectId+" scroll"+A+"."+this.selectId).on("resize"+A+"."+this.selectId+" scroll"+A+"."+this.selectId,function(){l.$newElement.hasClass(T.SHOW)&&e(l.$newElement)}),this.$element.on("hide"+A,function(){l.$menu.data("height",l.$menu.height()),l.$bsContainer.detach()})},createOption:function(e,t){var i,s=e.option||e;s&&1!==s.nodeType&&(i=(t?D.selectedOption:D.option).cloneNode(!0),void 0!==s.value&&(i.value=s.value),i.textContent=s.text,i.selected=!0,void 0!==s.liIndex?i.liIndex=s.liIndex:t||(i.liIndex=e.index),e.option=i,this.selectpicker.main.optionQueue.appendChild(i))},setOptionStatus:function(e){var t=this;if(t.noScroll=!1,t.selectpicker.view.visibleElements&&t.selectpicker.view.visibleElements.length){for(var i=0;i<t.selectpicker.view.visibleElements.length;i++){var s=t.selectpicker.current.data[i+t.selectpicker.view.position0];s.option&&(!0!==e&&t.setDisabled(s),t.setSelected(s))}this.options.source.data&&this.$element[0].appendChild(this.selectpicker.main.optionQueue)}},setSelected:function(e,t){t=void 0===t?e.selected:t;var i,s=e.element,n=void 0!==this.activeElement,o=this.activeElement===s||t&&!this.multiple&&!n;s&&(void 0!==t&&(e.selected=t,e.option&&(e.option.selected=t)),t&&this.options.source.data&&this.createOption(e,!1),i=s.firstChild,t&&(this.selectedElement=s),s.classList.toggle("selected",t),o?(this.focusItem(s,e),this.selectpicker.view.currentActive=s,this.activeElement=s):this.defocusItem(s),i&&(i.classList.toggle("selected",t),t?i.setAttribute("aria-selected",!0):this.multiple?i.setAttribute("aria-selected",!1):i.removeAttribute("aria-selected")),o||n||!t||void 0===this.prevActiveElement||(e=this.prevActiveElement,this.defocusItem(e)))},setDisabled:function(e){var t,i=e.disabled,e=e.element;e&&(t=e.firstChild,e.classList.toggle(T.DISABLED,i),t&&("4"<=g.major&&t.classList.toggle(T.DISABLED,i),i?(t.setAttribute("aria-disabled",i),t.setAttribute("tabindex",-1)):(t.removeAttribute("aria-disabled"),t.setAttribute("tabindex",0))))},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){this.isDisabled()?(this.$newElement[0].classList.add(T.DISABLED),this.$button.addClass(T.DISABLED).attr("aria-disabled",!0)):this.$button[0].classList.contains(T.DISABLED)&&(this.$newElement[0].classList.remove(T.DISABLED),this.$button.removeClass(T.DISABLED).attr("aria-disabled",!1))},clickListener:function(){var I=this,t=$(document);function e(){(I.options.liveSearch?I.$searchbox:I.$menuInner).trigger("focus")}function i(){I.dropdown&&I.dropdown._popper&&I.dropdown._popper.state?e():requestAnimationFrame(i)}t.data("spaceSelect",!1),this.$button.on("keyup",function(e){/(32)/.test(e.keyCode.toString(10))&&t.data("spaceSelect")&&(e.preventDefault(),t.data("spaceSelect",!1))}),this.$newElement.on("show.bs.dropdown",function(){I.dropdown||"4"!==g.major||(I.dropdown=I.$button.data("bs.dropdown"),I.dropdown._menu=I.$menu[0])}),this.$button.on("click.bs.dropdown.data-api",function(e){var t,i,s;I.options.allowClear&&(t=e.target,i=I.$clearButton[0],(t=/MSIE|Trident/.test(window.navigator.userAgent)?document.elementFromPoint(e.clientX,e.clientY):t)!==i&&t.parentElement!==i||(e.stopImmediatePropagation(),I.multiple?I.deselectAll():(i=(t=I.$element[0]).value,e=t.selectedIndex,(s=!!(s=t.options[e])&&I.selectpicker.main.data[s.liIndex])&&I.setSelected(s,!1),t.selectedIndex=0,E=[e,!1,i],I.$element.triggerNative("change")),I.$newElement.hasClass(T.SHOW)&&(I.options.liveSearch&&I.$searchbox.trigger("focus"),I.createView(!1)))),I.$newElement.hasClass(T.SHOW)||I.setSize()}),this.$element.on("shown"+A,function(){I.$menuInner[0].scrollTop!==I.selectpicker.view.scrollTop&&(I.$menuInner[0].scrollTop=I.selectpicker.view.scrollTop),3<g.major?requestAnimationFrame(i):e()}),this.$menuInner.on("mouseenter","li a",function(e){var t=this.parentElement,i=I.isVirtual()?I.selectpicker.view.position0:0,s=Array.prototype.indexOf.call(t.parentElement.children,t),s=I.selectpicker.current.data[s+i];I.focusItem(t,s,!0)}),this.$menuInner.on("click","li a",function(e,t){var i=$(this),s=I.$element[0],n=I.isVirtual()?I.selectpicker.view.position0:0,o=I.selectpicker.current.data[i.parent().index()+n],n=o.element,l=x.call(I),r=s.selectedIndex,a=s.options[r],a=!!a&&I.selectpicker.main.data[a.liIndex],c=!0;if(I.multiple&&1!==I.options.maxOptions&&e.stopPropagation(),e.preventDefault(),!I.isDisabled()&&!i.parent().hasClass(T.DISABLED)){var e=o.option,i=$(e),d=e.selected,h=I.selectpicker.current.data.find(function(e){return e.optID===o.optID&&"optgroup-label"===e.type}),p=h?h.optgroup:void 0,h=p instanceof Element?N.fromOption:N.fromDataSource,u=p&&p.children,f=parseInt(I.options.maxOptions),h=p&&parseInt(h(p,"maxOptions"))||!1;if((t=n===I.activeElement?!0:t)||(I.prevActiveElement=I.activeElement,I.activeElement=void 0),I.multiple&&1!==f){if(I.setSelected(o,!d),I.focusedParent.focus(),!1!==f||!1!==h){var n=f<y.call(I).length,m=0;if(p&&p.children)for(var v=0;v<p.children.length;v++)p.children[v].selected&&m++;t=h<m;if(f&&n||h&&t)if(f&&1===f)s.selectedIndex=-1,I.setOptionStatus(!0);else if(h&&1===h){for(v=0;v<u.length;v++){var g=u[v];I.setSelected(I.selectpicker.current.data[g.liIndex],!1)}I.setSelected(o,!0)}else{var d="string"==typeof I.options.maxOptionsText?[I.options.maxOptionsText,I.options.maxOptionsText]:I.options.maxOptionsText,d="function"==typeof d?d(f,h):d,b=d[0].replace("{n}",f),w=d[1].replace("{n}",h),k=$('<div class="notify"></div>');d[2]&&(b=b.replace("{var}",d[2][1<f?0:1]),w=w.replace("{var}",d[2][1<h?0:1])),I.$menu.append(k),f&&n&&(k.append($("<div>"+b+"</div>")),c=!1,I.$element.trigger("maxReached"+A)),h&&t&&(k.append($("<div>"+w+"</div>")),c=!1,I.$element.trigger("maxReachedGrp"+A)),setTimeout(function(){I.setSelected(o,!1)},10),k[0].classList.add("fadeOut"),setTimeout(function(){k.remove()},1050)}}}else a&&I.setSelected(a,!1),I.setSelected(o,!0);I.options.source.data&&I.$element[0].appendChild(I.selectpicker.main.optionQueue),!I.multiple||I.multiple&&1===I.options.maxOptions?I.$button.trigger("focus"):I.options.liveSearch&&I.$searchbox.trigger("focus"),!c||!I.multiple&&r===s.selectedIndex||(E=[e.index,i.prop("selected"),l],I.$element.triggerNative("change"))}}),this.$menu.on("click","li."+T.DISABLED+" a, ."+T.POPOVERHEADER+", ."+T.POPOVERHEADER+" :not(.close)",function(e){e.currentTarget==this&&(e.preventDefault(),e.stopPropagation(),(I.options.liveSearch&&!$(e.target).hasClass("close")?I.$searchbox:I.$button).trigger("focus"))}),this.$menuInner.on("click",".divider, .dropdown-header",function(e){e.preventDefault(),e.stopPropagation(),(I.options.liveSearch?I.$searchbox:I.$button).trigger("focus")}),this.$menu.on("click","."+T.POPOVERHEADER+" .close",function(){I.$button.trigger("click")}),this.$searchbox.on("click",function(e){e.stopPropagation()}),this.$menu.on("click",".actions-btn",function(e){(I.options.liveSearch?I.$searchbox:I.$button).trigger("focus"),e.preventDefault(),e.stopPropagation(),$(this).hasClass("bs-select-all")?I.selectAll():I.deselectAll()}),this.$button.on("focus"+A,function(e){var t=I.$element[0].getAttribute("tabindex");void 0!==t&&e.originalEvent&&e.originalEvent.isTrusted&&(this.setAttribute("tabindex",t),I.$element[0].setAttribute("tabindex",-1),I.selectpicker.view.tabindex=t)}).on("blur"+A,function(e){void 0!==I.selectpicker.view.tabindex&&e.originalEvent&&e.originalEvent.isTrusted&&(I.$element[0].setAttribute("tabindex",I.selectpicker.view.tabindex),this.setAttribute("tabindex",-1),I.selectpicker.view.tabindex=void 0)}),this.$element.on("change"+A,function(){I.render(),I.$element.trigger("changed"+A,E),E=null}).on("focus"+A,function(){I.options.mobile||I.$button[0].focus()})},liveSearchListener:function(){var p=this;this.$button.on("click.bs.dropdown.data-api",function(){p.$searchbox.val()&&(p.$searchbox.val(""),p.selectpicker.search.previousValue=void 0)}),this.$searchbox.on("click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api",function(e){e.stopPropagation()}),this.$searchbox.on("input propertychange",function(){var t=p.$searchbox[0].value;if(p.selectpicker.search.elements=[],p.selectpicker.search.data=[],t)if(p.selectpicker.search.previousValue=t,p.options.source.search)p.fetchData(function(e){p.render(),p.buildList(void 0,!0),p.noScroll=!0,p.$menuInner.scrollTop(0),p.createView(!0),se.call(p,e,t)},"search",0,t);else{var e=[],i=t.toUpperCase(),s={},n=[],o=p._searchStyle(),l=p.options.liveSearchNormalize;l&&(i=u(i));for(var r=0;r<p.selectpicker.main.data.length;r++){var a=p.selectpicker.main.data[r];s[r]||(s[r]=b(a,i,o,l)),s[r]&&void 0!==a.headerIndex&&-1===n.indexOf(a.headerIndex)&&(0<a.headerIndex&&(s[a.headerIndex-1]=!0,n.push(a.headerIndex-1)),s[a.headerIndex]=!0,n.push(a.headerIndex),s[a.lastIndex+1]=!0),s[r]&&"optgroup-label"!==a.type&&n.push(r)}for(var r=0,c=n.length;r<c;r++){var d=n[r],h=n[r-1],a=p.selectpicker.main.data[d],h=p.selectpicker.main.data[h];("divider"!==a.type||"divider"===a.type&&h&&"divider"!==h.type&&c-1!==r)&&(p.selectpicker.search.data.push(a),e.push(p.selectpicker.main.elements[d]))}p.activeElement=void 0,p.noScroll=!0,p.$menuInner.scrollTop(0),p.selectpicker.search.elements=e,p.createView(!0),se.call(p,e,t)}else p.selectpicker.search.previousValue&&(p.$menuInner.scrollTop(0),p.createView(!1))})},_searchStyle:function(){return this.options.liveSearchStyle||"contains"},val:function(t){var e=this.$element[0];if(void 0===t)return this.$element.val();var i=y.call(this),s=x.call(this,i);E=[null,null,s],(t=Array.isArray(t)?t:[t]).map(String);for(var n=0;n<i.length;n++){var o=i[n];o&&-1===t.indexOf(String(o.value))&&this.setSelected(o,!1)}return this.selectpicker.main.data.filter(function(e){return-1!==t.indexOf(String(e.value))&&(this.setSelected(e,!0),!0)},this),this.options.source.data&&e.appendChild(this.selectpicker.main.optionQueue),this.$element.trigger("changed"+A,E),this.$newElement.hasClass(T.SHOW)&&(this.multiple?this.setOptionStatus(!0):"number"==typeof(s=(e.options[e.selectedIndex]||{}).liIndex)&&this.setSelected(this.selectpicker.current.data[s],!0)),this.render(),E=null,this.$element},changeAll:function(e){if(this.multiple){void 0===e&&(e=!0);var t=this.$element[0],i=0,s=0,n=x.call(this);t.classList.add("bs-select-hidden");for(var o=0,l=this.selectpicker.current.data,r=l.length;o<r;o++){var a=l[o],c=a.option;c&&!a.disabled&&"divider"!==a.type&&(a.selected&&i++,c.selected=e,!0===(a.selected=e)&&s++)}t.classList.remove("bs-select-hidden"),i!==s&&(this.setOptionStatus(),E=[null,null,n],this.$element.triggerNative("change"))}},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},toggle:function(e,t){var i=void 0===t;(e=e||window.event)&&e.stopPropagation(),!1===i&&(e=this.$newElement[0].classList.contains(T.SHOW),i=!0===t&&!1===e||!1===t&&!0===e),i&&this.$button.trigger("click.bs.dropdown.data-api")},open:function(e){this.toggle(e,!0)},close:function(e){this.toggle(e,!1)},keydown:function(e){var t,i,s,n,o=$(this),l=o.hasClass("dropdown-toggle"),r=(l?o.closest(".dropdown"):o.closest(z.MENU)).data("this"),a=r.findLis(),c=!1,l=e.which===I&&!l&&!r.options.selectOnTab,d=te.test(e.which)||l,h=r.$menuInner[0].scrollTop,p=!0===r.isVirtual()?r.selectpicker.view.position0:0;if(!(112<=e.which&&e.which<=123))if(!(t=r.$menu.hasClass(T.SHOW))&&(d||48<=e.which&&e.which<=57||96<=e.which&&e.which<=105||65<=e.which&&e.which<=90)&&(r.$button.trigger("click.bs.dropdown.data-api"),r.options.liveSearch))r.$searchbox.trigger("focus");else{if(e.which===Z&&t&&(e.preventDefault(),r.$button.trigger("click.bs.dropdown.data-api").trigger("focus")),d){if(!a.length)return;-1!==(d=(i=r.activeElement)?Array.prototype.indexOf.call(i.parentElement.children,i):-1)&&r.defocusItem(i),e.which===C?(-1!==d&&d--,d+p<0&&(d+=a.length),r.selectpicker.view.canHighlight[d+p]||-1===(d=r.selectpicker.view.canHighlight.slice(0,d+p).lastIndexOf(!0)-p)&&(d=a.length-1)):e.which!==O&&!l||(++d+p>=r.selectpicker.view.canHighlight.length&&(d=r.selectpicker.view.firstHighlightIndex),r.selectpicker.view.canHighlight[d+p]||(d=d+1+r.selectpicker.view.canHighlight.slice(d+p+1).indexOf(!0))),e.preventDefault();var u=p+d;e.which===C?0===p&&d===a.length-1?(r.$menuInner[0].scrollTop=r.$menuInner[0].scrollHeight,u=r.selectpicker.current.elements.length-1):(s=r.selectpicker.current.data[u])&&(c=(n=s.position-s.height)<h):e.which!==O&&!l||(d===r.selectpicker.view.firstHighlightIndex?(r.$menuInner[0].scrollTop=0,u=r.selectpicker.view.firstHighlightIndex):(s=r.selectpicker.current.data[u])&&(c=h<(n=s.position-r.sizeInfo.menuInnerHeight))),i=r.selectpicker.current.elements[u],r.activeElement=(r.selectpicker.current.data[u]||{}).element,r.focusItem(i),r.selectpicker.view.currentActive=i,c&&(r.$menuInner[0].scrollTop=n),(r.options.liveSearch?r.$searchbox:o).trigger("focus")}else if(!o.is("input")&&!ie.test(e.which)||e.which===w&&r.selectpicker.keydown.keyHistory){var f,m=[];e.preventDefault(),r.selectpicker.keydown.keyHistory+=Y[e.which],r.selectpicker.keydown.resetKeyHistory.cancel&&clearTimeout(r.selectpicker.keydown.resetKeyHistory.cancel),r.selectpicker.keydown.resetKeyHistory.cancel=r.selectpicker.keydown.resetKeyHistory.start(),f=r.selectpicker.keydown.keyHistory,/^(.)\1+$/.test(f)&&(f=f.charAt(0));for(var v=0;v<r.selectpicker.current.data.length;v++){var g=r.selectpicker.current.data[v];b(g,f,"startsWith",!0)&&r.selectpicker.view.canHighlight[v]&&m.push(g.element)}m.length&&(p=0,a.removeClass("active").find("a").removeClass("active"),1===f.length&&(-1===(p=m.indexOf(r.activeElement))||p===m.length-1?p=0:p++),l=m[p],c=0<h-(s=r.selectpicker.main.data[l]).position?(n=s.position-s.height,!0):(n=s.position-r.sizeInfo.menuInnerHeight,s.position>h+r.sizeInfo.menuInnerHeight),i=r.selectpicker.main.elements[l],r.activeElement=i,r.focusItem(i),i&&i.firstChild.focus(),c&&(r.$menuInner[0].scrollTop=n),o.trigger("focus"))}t&&(e.which===w&&!r.selectpicker.keydown.keyHistory||e.which===J||e.which===I&&r.options.selectOnTab)&&(e.which!==w&&e.preventDefault(),r.options.liveSearch&&e.which===w||(r.$menuInner.find(".active a").trigger("click",!0),o.trigger("focus"),r.options.liveSearch||(e.preventDefault(),$(document).data("spaceSelect",!0))))}},mobile:function(){this.options.mobile=!0,this.$element[0].classList.add("mobile-device")},refresh:function(){var e=this,t=$.extend({},this.options,d(this.$element),this.$element.data());this.options=t,this.options.source.data?(this.render(),this.buildList()):this.fetchData(function(){e.render(),e.buildList()}),this.checkDisabled(),this.setStyle(),this.setWidth(),this.setSize(!0),this.$element.trigger("refreshed"+A)},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.before(this.$element).remove(),(this.$bsContainer||this.$menu).remove(),this.selectpicker.view.titleOption&&this.selectpicker.view.titleOption.parentNode&&this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption),this.$element.off(A).removeData("selectpicker").removeClass("bs-select-hidden selectpicker mobile-device"),$(window).off(A+"."+this.selectId)}};var le=$.fn.selectpicker;function re(){return g.major<5?$.fn.dropdown?($.fn.dropdown.Constructor._dataApiKeydownHandler||$.fn.dropdown.Constructor.prototype.keydown).apply(this,arguments):void 0:m.dataApiKeydownHandler}$.fn.selectpicker=oe,$.fn.selectpicker.Constructor=H,$.fn.selectpicker.noConflict=function(){return $.fn.selectpicker=le,this},$(document).off("keydown.bs.dropdown.data-api").on("keydown.bs.dropdown.data-api",":not(.bootstrap-select) > ["+z.DATA_TOGGLE+"]",re).on("keydown.bs.dropdown.data-api",":not(.bootstrap-select) > .dropdown-menu",re).on("keydown"+A,".bootstrap-select ["+z.DATA_TOGGLE+'], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input',H.prototype.keydown).on("focusin.modal",".bootstrap-select ["+z.DATA_TOGGLE+'], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input',function(e){e.stopPropagation()}),document.addEventListener("DOMContentLoaded",function(){$(".selectpicker").each(function(){var e=$(this);oe.call(e,e.data())})})}(e)}); \ No newline at end of file diff --git a/public/vendor/vue.js b/public/vendor/vue.js new file mode 100644 index 0000000000000000000000000000000000000000..1e3da7951d81b39647917dff675364724fd16b34 --- /dev/null +++ b/public/vendor/vue.js @@ -0,0 +1,11841 @@ +/*! + * Vue.js v2.7.8 + * (c) 2014-2022 Evan You + * Released under the MIT License. + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Vue = factory()); +})(this, (function () { 'use strict'; + + var emptyObject = Object.freeze({}); + var isArray = Array.isArray; + // These helpers produce better VM code in JS engines due to their + // explicitness and function inlining. + function isUndef(v) { + return v === undefined || v === null; + } + function isDef(v) { + return v !== undefined && v !== null; + } + function isTrue(v) { + return v === true; + } + function isFalse(v) { + return v === false; + } + /** + * Check if value is primitive. + */ + function isPrimitive(value) { + return (typeof value === 'string' || + typeof value === 'number' || + // $flow-disable-line + typeof value === 'symbol' || + typeof value === 'boolean'); + } + function isFunction(value) { + return typeof value === 'function'; + } + /** + * Quick object check - this is primarily used to tell + * objects from primitive values when we know the value + * is a JSON-compliant type. + */ + function isObject(obj) { + return obj !== null && typeof obj === 'object'; + } + /** + * Get the raw type string of a value, e.g., [object Object]. + */ + var _toString = Object.prototype.toString; + function toRawType(value) { + return _toString.call(value).slice(8, -1); + } + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ + function isPlainObject(obj) { + return _toString.call(obj) === '[object Object]'; + } + function isRegExp(v) { + return _toString.call(v) === '[object RegExp]'; + } + /** + * Check if val is a valid array index. + */ + function isValidArrayIndex(val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val); + } + function isPromise(val) { + return (isDef(val) && + typeof val.then === 'function' && + typeof val.catch === 'function'); + } + /** + * Convert a value to a string that is actually rendered. + */ + function toString(val) { + return val == null + ? '' + : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString) + ? JSON.stringify(val, null, 2) + : String(val); + } + /** + * Convert an input value to a number for persistence. + * If the conversion fails, return original string. + */ + function toNumber(val) { + var n = parseFloat(val); + return isNaN(n) ? val : n; + } + /** + * Make a map and return a function for checking if a key + * is in that map. + */ + function makeMap(str, expectsLowerCase) { + var map = Object.create(null); + var list = str.split(','); + for (var i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; }; + } + /** + * Check if a tag is a built-in tag. + */ + var isBuiltInTag = makeMap('slot,component', true); + /** + * Check if an attribute is a reserved attribute. + */ + var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); + /** + * Remove an item from an array. + */ + function remove$2(arr, item) { + if (arr.length) { + var index = arr.indexOf(item); + if (index > -1) { + return arr.splice(index, 1); + } + } + } + /** + * Check whether an object has the property. + */ + var hasOwnProperty = Object.prototype.hasOwnProperty; + function hasOwn(obj, key) { + return hasOwnProperty.call(obj, key); + } + /** + * Create a cached version of a pure function. + */ + function cached(fn) { + var cache = Object.create(null); + return function cachedFn(str) { + var hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; + } + /** + * Camelize a hyphen-delimited string. + */ + var camelizeRE = /-(\w)/g; + var camelize = cached(function (str) { + return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); }); + }); + /** + * Capitalize a string. + */ + var capitalize = cached(function (str) { + return str.charAt(0).toUpperCase() + str.slice(1); + }); + /** + * Hyphenate a camelCase string. + */ + var hyphenateRE = /\B([A-Z])/g; + var hyphenate = cached(function (str) { + return str.replace(hyphenateRE, '-$1').toLowerCase(); + }); + /** + * Simple bind polyfill for environments that do not support it, + * e.g., PhantomJS 1.x. Technically, we don't need this anymore + * since native bind is now performant enough in most browsers. + * But removing it would mean breaking code that was able to run in + * PhantomJS 1.x, so this must be kept for backward compatibility. + */ + /* istanbul ignore next */ + function polyfillBind(fn, ctx) { + function boundFn(a) { + var l = arguments.length; + return l + ? l > 1 + ? fn.apply(ctx, arguments) + : fn.call(ctx, a) + : fn.call(ctx); + } + boundFn._length = fn.length; + return boundFn; + } + function nativeBind(fn, ctx) { + return fn.bind(ctx); + } + // @ts-expect-error bind cannot be `undefined` + var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind; + /** + * Convert an Array-like object to a real Array. + */ + function toArray(list, start) { + start = start || 0; + var i = list.length - start; + var ret = new Array(i); + while (i--) { + ret[i] = list[i + start]; + } + return ret; + } + /** + * Mix properties into target object. + */ + function extend(to, _from) { + for (var key in _from) { + to[key] = _from[key]; + } + return to; + } + /** + * Merge an Array of Objects into a single Object. + */ + function toObject(arr) { + var res = {}; + for (var i = 0; i < arr.length; i++) { + if (arr[i]) { + extend(res, arr[i]); + } + } + return res; + } + /* eslint-disable no-unused-vars */ + /** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). + */ + function noop(a, b, c) { } + /** + * Always return false. + */ + var no = function (a, b, c) { return false; }; + /* eslint-enable no-unused-vars */ + /** + * Return the same value. + */ + var identity = function (_) { return _; }; + /** + * Generate a string containing static keys from compiler modules. + */ + function genStaticKeys$1(modules) { + return modules + .reduce(function (keys, m) { + return keys.concat(m.staticKeys || []); + }, []) + .join(','); + } + /** + * Check if two values are loosely equal - that is, + * if they are plain objects, do they have the same shape? + */ + function looseEqual(a, b) { + if (a === b) + return true; + var isObjectA = isObject(a); + var isObjectB = isObject(b); + if (isObjectA && isObjectB) { + try { + var isArrayA = Array.isArray(a); + var isArrayB = Array.isArray(b); + if (isArrayA && isArrayB) { + return (a.length === b.length && + a.every(function (e, i) { + return looseEqual(e, b[i]); + })); + } + else if (a instanceof Date && b instanceof Date) { + return a.getTime() === b.getTime(); + } + else if (!isArrayA && !isArrayB) { + var keysA = Object.keys(a); + var keysB = Object.keys(b); + return (keysA.length === keysB.length && + keysA.every(function (key) { + return looseEqual(a[key], b[key]); + })); + } + else { + /* istanbul ignore next */ + return false; + } + } + catch (e) { + /* istanbul ignore next */ + return false; + } + } + else if (!isObjectA && !isObjectB) { + return String(a) === String(b); + } + else { + return false; + } + } + /** + * Return the first index at which a loosely equal value can be + * found in the array (if value is a plain object, the array must + * contain an object of the same shape), or -1 if it is not present. + */ + function looseIndexOf(arr, val) { + for (var i = 0; i < arr.length; i++) { + if (looseEqual(arr[i], val)) + return i; + } + return -1; + } + /** + * Ensure a function is called only once. + */ + function once(fn) { + var called = false; + return function () { + if (!called) { + called = true; + fn.apply(this, arguments); + } + }; + } + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill + function hasChanged(x, y) { + if (x === y) { + return x === 0 && 1 / x !== 1 / y; + } + else { + return x === x || y === y; + } + } + + var SSR_ATTR = 'data-server-rendered'; + var ASSET_TYPES = ['component', 'directive', 'filter']; + var LIFECYCLE_HOOKS = [ + 'beforeCreate', + 'created', + 'beforeMount', + 'mounted', + 'beforeUpdate', + 'updated', + 'beforeDestroy', + 'destroyed', + 'activated', + 'deactivated', + 'errorCaptured', + 'serverPrefetch', + 'renderTracked', + 'renderTriggered' + ]; + + var config = { + /** + * Option merge strategies (used in core/util/options) + */ + // $flow-disable-line + optionMergeStrategies: Object.create(null), + /** + * Whether to suppress warnings. + */ + silent: false, + /** + * Show production mode tip message on boot? + */ + productionTip: true, + /** + * Whether to enable devtools + */ + devtools: true, + /** + * Whether to record perf + */ + performance: false, + /** + * Error handler for watcher errors + */ + errorHandler: null, + /** + * Warn handler for watcher warns + */ + warnHandler: null, + /** + * Ignore certain custom elements + */ + ignoredElements: [], + /** + * Custom user key aliases for v-on + */ + // $flow-disable-line + keyCodes: Object.create(null), + /** + * Check if a tag is reserved so that it cannot be registered as a + * component. This is platform-dependent and may be overwritten. + */ + isReservedTag: no, + /** + * Check if an attribute is reserved so that it cannot be used as a component + * prop. This is platform-dependent and may be overwritten. + */ + isReservedAttr: no, + /** + * Check if a tag is an unknown element. + * Platform-dependent. + */ + isUnknownElement: no, + /** + * Get the namespace of an element + */ + getTagNamespace: noop, + /** + * Parse the real tag name for the specific platform. + */ + parsePlatformTagName: identity, + /** + * Check if an attribute must be bound using property, e.g. value + * Platform-dependent. + */ + mustUseProp: no, + /** + * Perform updates asynchronously. Intended to be used by Vue Test Utils + * This will significantly reduce performance if set to false. + */ + async: true, + /** + * Exposed for legacy reasons + */ + _lifecycleHooks: LIFECYCLE_HOOKS + }; + + /** + * unicode letters used for parsing html tags, component names and property paths. + * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname + * skipping \u10000-\uEFFFF due to it freezing up PhantomJS + */ + var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; + /** + * Check if a string starts with $ or _ + */ + function isReserved(str) { + var c = (str + '').charCodeAt(0); + return c === 0x24 || c === 0x5f; + } + /** + * Define a property. + */ + function def(obj, key, val, enumerable) { + Object.defineProperty(obj, key, { + value: val, + enumerable: !!enumerable, + writable: true, + configurable: true + }); + } + /** + * Parse simple path. + */ + var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]")); + function parsePath(path) { + if (bailRE.test(path)) { + return; + } + var segments = path.split('.'); + return function (obj) { + for (var i = 0; i < segments.length; i++) { + if (!obj) + return; + obj = obj[segments[i]]; + } + return obj; + }; + } + + // can we use __proto__? + var hasProto = '__proto__' in {}; + // Browser environment sniffing + var inBrowser = typeof window !== 'undefined'; + var UA = inBrowser && window.navigator.userAgent.toLowerCase(); + var isIE = UA && /msie|trident/.test(UA); + var isIE9 = UA && UA.indexOf('msie 9.0') > 0; + var isEdge = UA && UA.indexOf('edge/') > 0; + UA && UA.indexOf('android') > 0; + var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); + UA && /chrome\/\d+/.test(UA) && !isEdge; + UA && /phantomjs/.test(UA); + var isFF = UA && UA.match(/firefox\/(\d+)/); + // Firefox has a "watch" function on Object.prototype... + // @ts-expect-error firebox support + var nativeWatch = {}.watch; + var supportsPassive = false; + if (inBrowser) { + try { + var opts = {}; + Object.defineProperty(opts, 'passive', { + get: function () { + /* istanbul ignore next */ + supportsPassive = true; + } + }); // https://github.com/facebook/flow/issues/285 + window.addEventListener('test-passive', null, opts); + } + catch (e) { } + } + // this needs to be lazy-evaled because vue may be required before + // vue-server-renderer can set VUE_ENV + var _isServer; + var isServerRendering = function () { + if (_isServer === undefined) { + /* istanbul ignore if */ + if (!inBrowser && typeof global !== 'undefined') { + // detect presence of vue-server-renderer and avoid + // Webpack shimming the process + _isServer = + global['process'] && global['process'].env.VUE_ENV === 'server'; + } + else { + _isServer = false; + } + } + return _isServer; + }; + // detect devtools + var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + /* istanbul ignore next */ + function isNative(Ctor) { + return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); + } + var hasSymbol = typeof Symbol !== 'undefined' && + isNative(Symbol) && + typeof Reflect !== 'undefined' && + isNative(Reflect.ownKeys); + var _Set; // $flow-disable-line + /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) { + // use native Set when available. + _Set = Set; + } + else { + // a non-standard Set polyfill that only works with primitive keys. + _Set = /** @class */ (function () { + function Set() { + this.set = Object.create(null); + } + Set.prototype.has = function (key) { + return this.set[key] === true; + }; + Set.prototype.add = function (key) { + this.set[key] = true; + }; + Set.prototype.clear = function () { + this.set = Object.create(null); + }; + return Set; + }()); + } + + var currentInstance = null; + /** + * This is exposed for compatibility with v3 (e.g. some functions in VueUse + * relies on it). Do not use this internally, just use `currentInstance`. + * + * @internal this function needs manual type declaration because it relies + * on previously manually authored types from Vue 2 + */ + function getCurrentInstance() { + return currentInstance && { proxy: currentInstance }; + } + /** + * @internal + */ + function setCurrentInstance(vm) { + if (vm === void 0) { vm = null; } + if (!vm) + currentInstance && currentInstance._scope.off(); + currentInstance = vm; + vm && vm._scope.on(); + } + + /** + * @internal + */ + var VNode = /** @class */ (function () { + function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { + this.tag = tag; + this.data = data; + this.children = children; + this.text = text; + this.elm = elm; + this.ns = undefined; + this.context = context; + this.fnContext = undefined; + this.fnOptions = undefined; + this.fnScopeId = undefined; + this.key = data && data.key; + this.componentOptions = componentOptions; + this.componentInstance = undefined; + this.parent = undefined; + this.raw = false; + this.isStatic = false; + this.isRootInsert = true; + this.isComment = false; + this.isCloned = false; + this.isOnce = false; + this.asyncFactory = asyncFactory; + this.asyncMeta = undefined; + this.isAsyncPlaceholder = false; + } + Object.defineProperty(VNode.prototype, "child", { + // DEPRECATED: alias for componentInstance for backwards compat. + /* istanbul ignore next */ + get: function () { + return this.componentInstance; + }, + enumerable: false, + configurable: true + }); + return VNode; + }()); + var createEmptyVNode = function (text) { + if (text === void 0) { text = ''; } + var node = new VNode(); + node.text = text; + node.isComment = true; + return node; + }; + function createTextVNode(val) { + return new VNode(undefined, undefined, undefined, String(val)); + } + // optimized shallow clone + // used for static nodes and slot nodes because they may be reused across + // multiple renders, cloning them avoids errors when DOM manipulations rely + // on their elm reference. + function cloneVNode(vnode) { + var cloned = new VNode(vnode.tag, vnode.data, + // #7975 + // clone children array to avoid mutating original in case of cloning + // a child. + vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); + cloned.ns = vnode.ns; + cloned.isStatic = vnode.isStatic; + cloned.key = vnode.key; + cloned.isComment = vnode.isComment; + cloned.fnContext = vnode.fnContext; + cloned.fnOptions = vnode.fnOptions; + cloned.fnScopeId = vnode.fnScopeId; + cloned.asyncMeta = vnode.asyncMeta; + cloned.isCloned = true; + return cloned; + } + + /* not type checking this file because flow doesn't play well with Proxy */ + var initProxy; + { + var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + + 'require' // for Webpack/Browserify + ); + var warnNonPresent_1 = function (target, key) { + warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + + 'referenced during render. Make sure that this property is reactive, ' + + 'either in the data option, or for class-based components, by ' + + 'initializing the property. ' + + 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); + }; + var warnReservedPrefix_1 = function (target, key) { + warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + + 'prevent conflicts with Vue internals. ' + + 'See: https://vuejs.org/v2/api/#data', target); + }; + var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy); + if (hasProxy_1) { + var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); + config.keyCodes = new Proxy(config.keyCodes, { + set: function (target, key, value) { + if (isBuiltInModifier_1(key)) { + warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key)); + return false; + } + else { + target[key] = value; + return true; + } + } + }); + } + var hasHandler_1 = { + has: function (target, key) { + var has = key in target; + var isAllowed = allowedGlobals_1(key) || + (typeof key === 'string' && + key.charAt(0) === '_' && + !(key in target.$data)); + if (!has && !isAllowed) { + if (key in target.$data) + warnReservedPrefix_1(target, key); + else + warnNonPresent_1(target, key); + } + return has || !isAllowed; + } + }; + var getHandler_1 = { + get: function (target, key) { + if (typeof key === 'string' && !(key in target)) { + if (key in target.$data) + warnReservedPrefix_1(target, key); + else + warnNonPresent_1(target, key); + } + return target[key]; + } + }; + initProxy = function initProxy(vm) { + if (hasProxy_1) { + // determine which proxy handler to use + var options = vm.$options; + var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1; + vm._renderProxy = new Proxy(vm, handlers); + } + else { + vm._renderProxy = vm; + } + }; + } + + /****************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + var uid$2 = 0; + /** + * A dep is an observable that can have multiple + * directives subscribing to it. + * @internal + */ + var Dep = /** @class */ (function () { + function Dep() { + this.id = uid$2++; + this.subs = []; + } + Dep.prototype.addSub = function (sub) { + this.subs.push(sub); + }; + Dep.prototype.removeSub = function (sub) { + remove$2(this.subs, sub); + }; + Dep.prototype.depend = function (info) { + if (Dep.target) { + Dep.target.addDep(this); + if (info && Dep.target.onTrack) { + Dep.target.onTrack(__assign({ effect: Dep.target }, info)); + } + } + }; + Dep.prototype.notify = function (info) { + // stabilize the subscriber list first + var subs = this.subs.slice(); + if (!config.async) { + // subs aren't sorted in scheduler if not running async + // we need to sort them now to make sure they fire in correct + // order + subs.sort(function (a, b) { return a.id - b.id; }); + } + for (var i = 0, l = subs.length; i < l; i++) { + if (info) { + var sub = subs[i]; + sub.onTrigger && + sub.onTrigger(__assign({ effect: subs[i] }, info)); + } + subs[i].update(); + } + }; + return Dep; + }()); + // The current target watcher being evaluated. + // This is globally unique because only one watcher + // can be evaluated at a time. + Dep.target = null; + var targetStack = []; + function pushTarget(target) { + targetStack.push(target); + Dep.target = target; + } + function popTarget() { + targetStack.pop(); + Dep.target = targetStack[targetStack.length - 1]; + } + + /* + * not type checking this file because flow doesn't play well with + * dynamically accessing methods on Array prototype + */ + var arrayProto = Array.prototype; + var arrayMethods = Object.create(arrayProto); + var methodsToPatch = [ + 'push', + 'pop', + 'shift', + 'unshift', + 'splice', + 'sort', + 'reverse' + ]; + /** + * Intercept mutating methods and emit events + */ + methodsToPatch.forEach(function (method) { + // cache original method + var original = arrayProto[method]; + def(arrayMethods, method, function mutator() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var result = original.apply(this, args); + var ob = this.__ob__; + var inserted; + switch (method) { + case 'push': + case 'unshift': + inserted = args; + break; + case 'splice': + inserted = args.slice(2); + break; + } + if (inserted) + ob.observeArray(inserted); + // notify change + { + ob.dep.notify({ + type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */, + target: this, + key: method + }); + } + return result; + }); + }); + + var arrayKeys = Object.getOwnPropertyNames(arrayMethods); + var NO_INIITIAL_VALUE = {}; + /** + * In some cases we may want to disable observation inside a component's + * update computation. + */ + var shouldObserve = true; + function toggleObserving(value) { + shouldObserve = value; + } + // ssr mock dep + var mockDep = { + notify: noop, + depend: noop, + addSub: noop, + removeSub: noop + }; + /** + * Observer class that is attached to each observed + * object. Once attached, the observer converts the target + * object's property keys into getter/setters that + * collect dependencies and dispatch updates. + */ + var Observer = /** @class */ (function () { + function Observer(value, shallow, mock) { + if (shallow === void 0) { shallow = false; } + if (mock === void 0) { mock = false; } + this.value = value; + this.shallow = shallow; + this.mock = mock; + // this.value = value + this.dep = mock ? mockDep : new Dep(); + this.vmCount = 0; + def(value, '__ob__', this); + if (isArray(value)) { + if (!mock) { + if (hasProto) { + value.__proto__ = arrayMethods; + /* eslint-enable no-proto */ + } + else { + for (var i = 0, l = arrayKeys.length; i < l; i++) { + var key = arrayKeys[i]; + def(value, key, arrayMethods[key]); + } + } + } + if (!shallow) { + this.observeArray(value); + } + } + else { + /** + * Walk through all properties and convert them into + * getter/setters. This method should only be called when + * value type is Object. + */ + var keys = Object.keys(value); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock); + } + } + } + /** + * Observe a list of Array items. + */ + Observer.prototype.observeArray = function (value) { + for (var i = 0, l = value.length; i < l; i++) { + observe(value[i], false, this.mock); + } + }; + return Observer; + }()); + // helpers + /** + * Attempt to create an observer instance for a value, + * returns the new observer if successfully observed, + * or the existing observer if the value already has one. + */ + function observe(value, shallow, ssrMockReactivity) { + if (!isObject(value) || isRef(value) || value instanceof VNode) { + return; + } + var ob; + if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { + ob = value.__ob__; + } + else if (shouldObserve && + (ssrMockReactivity || !isServerRendering()) && + (isArray(value) || isPlainObject(value)) && + Object.isExtensible(value) && + !value.__v_skip /* ReactiveFlags.SKIP */) { + ob = new Observer(value, shallow, ssrMockReactivity); + } + return ob; + } + /** + * Define a reactive property on an Object. + */ + function defineReactive(obj, key, val, customSetter, shallow, mock) { + var dep = new Dep(); + var property = Object.getOwnPropertyDescriptor(obj, key); + if (property && property.configurable === false) { + return; + } + // cater for pre-defined getter/setters + var getter = property && property.get; + var setter = property && property.set; + if ((!getter || setter) && + (val === NO_INIITIAL_VALUE || arguments.length === 2)) { + val = obj[key]; + } + var childOb = !shallow && observe(val, false, mock); + Object.defineProperty(obj, key, { + enumerable: true, + configurable: true, + get: function reactiveGetter() { + var value = getter ? getter.call(obj) : val; + if (Dep.target) { + { + dep.depend({ + target: obj, + type: "get" /* TrackOpTypes.GET */, + key: key + }); + } + if (childOb) { + childOb.dep.depend(); + if (isArray(value)) { + dependArray(value); + } + } + } + return isRef(value) && !shallow ? value.value : value; + }, + set: function reactiveSetter(newVal) { + var value = getter ? getter.call(obj) : val; + if (!hasChanged(value, newVal)) { + return; + } + if (customSetter) { + customSetter(); + } + if (setter) { + setter.call(obj, newVal); + } + else if (getter) { + // #7981: for accessor properties without setter + return; + } + else if (!shallow && isRef(value) && !isRef(newVal)) { + value.value = newVal; + return; + } + else { + val = newVal; + } + childOb = !shallow && observe(newVal, false, mock); + { + dep.notify({ + type: "set" /* TriggerOpTypes.SET */, + target: obj, + key: key, + newValue: newVal, + oldValue: value + }); + } + } + }); + return dep; + } + function set(target, key, val) { + if ((isUndef(target) || isPrimitive(target))) { + warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target)); + } + if (isReadonly(target)) { + warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); + return; + } + var ob = target.__ob__; + if (isArray(target) && isValidArrayIndex(key)) { + target.length = Math.max(target.length, key); + target.splice(key, 1, val); + // when mocking for SSR, array methods are not hijacked + if (ob && !ob.shallow && ob.mock) { + observe(val, false, true); + } + return val; + } + if (key in target && !(key in Object.prototype)) { + target[key] = val; + return val; + } + if (target._isVue || (ob && ob.vmCount)) { + warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + + 'at runtime - declare it upfront in the data option.'); + return val; + } + if (!ob) { + target[key] = val; + return val; + } + defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock); + { + ob.dep.notify({ + type: "add" /* TriggerOpTypes.ADD */, + target: target, + key: key, + newValue: val, + oldValue: undefined + }); + } + return val; + } + function del(target, key) { + if ((isUndef(target) || isPrimitive(target))) { + warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target)); + } + if (isArray(target) && isValidArrayIndex(key)) { + target.splice(key, 1); + return; + } + var ob = target.__ob__; + if (target._isVue || (ob && ob.vmCount)) { + warn$2('Avoid deleting properties on a Vue instance or its root $data ' + + '- just set it to null.'); + return; + } + if (isReadonly(target)) { + warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly.")); + return; + } + if (!hasOwn(target, key)) { + return; + } + delete target[key]; + if (!ob) { + return; + } + { + ob.dep.notify({ + type: "delete" /* TriggerOpTypes.DELETE */, + target: target, + key: key + }); + } + } + /** + * Collect dependencies on array elements when the array is touched, since + * we cannot intercept array element access like property getters. + */ + function dependArray(value) { + for (var e = void 0, i = 0, l = value.length; i < l; i++) { + e = value[i]; + if (e && e.__ob__) { + e.__ob__.dep.depend(); + } + if (isArray(e)) { + dependArray(e); + } + } + } + + function reactive(target) { + makeReactive(target, false); + return target; + } + /** + * Return a shallowly-reactive copy of the original object, where only the root + * level properties are reactive. It also does not auto-unwrap refs (even at the + * root level). + */ + function shallowReactive(target) { + makeReactive(target, true); + def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); + return target; + } + function makeReactive(target, shallow) { + // if trying to observe a readonly proxy, return the readonly version. + if (!isReadonly(target)) { + { + if (isArray(target)) { + warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation.")); + } + var existingOb = target && target.__ob__; + if (existingOb && existingOb.shallow !== shallow) { + warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow.")); + } + } + var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */); + if (!ob) { + if (target == null || isPrimitive(target)) { + warn$2("value cannot be made reactive: ".concat(String(target))); + } + if (isCollectionType(target)) { + warn$2("Vue 2 does not support reactive collection types such as Map or Set."); + } + } + } + } + function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]); + } + return !!(value && value.__ob__); + } + function isShallow(value) { + return !!(value && value.__v_isShallow); + } + function isReadonly(value) { + return !!(value && value.__v_isReadonly); + } + function isProxy(value) { + return isReactive(value) || isReadonly(value); + } + function toRaw(observed) { + var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */]; + return raw ? toRaw(raw) : observed; + } + function markRaw(value) { + def(value, "__v_skip" /* ReactiveFlags.SKIP */, true); + return value; + } + /** + * @internal + */ + function isCollectionType(value) { + var type = toRawType(value); + return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'); + } + + /** + * @internal + */ + var RefFlag = "__v_isRef"; + function isRef(r) { + return !!(r && r.__v_isRef === true); + } + function ref$1(value) { + return createRef(value, false); + } + function shallowRef(value) { + return createRef(value, true); + } + function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + var ref = {}; + def(ref, RefFlag, true); + def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow); + def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())); + return ref; + } + function triggerRef(ref) { + if (!ref.dep) { + warn$2("received object is not a triggerable ref."); + } + { + ref.dep && + ref.dep.notify({ + type: "set" /* TriggerOpTypes.SET */, + target: ref, + key: 'value' + }); + } + } + function unref(ref) { + return isRef(ref) ? ref.value : ref; + } + function proxyRefs(objectWithRefs) { + if (isReactive(objectWithRefs)) { + return objectWithRefs; + } + var proxy = {}; + var keys = Object.keys(objectWithRefs); + for (var i = 0; i < keys.length; i++) { + proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]); + } + return proxy; + } + function proxyWithRefUnwrap(target, source, key) { + Object.defineProperty(target, key, { + enumerable: true, + configurable: true, + get: function () { + var val = source[key]; + if (isRef(val)) { + return val.value; + } + else { + var ob = val && val.__ob__; + if (ob) + ob.dep.depend(); + return val; + } + }, + set: function (value) { + var oldValue = source[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + } + else { + source[key] = value; + } + } + }); + } + function customRef(factory) { + var dep = new Dep(); + var _a = factory(function () { + { + dep.depend({ + target: ref, + type: "get" /* TrackOpTypes.GET */, + key: 'value' + }); + } + }, function () { + { + dep.notify({ + target: ref, + type: "set" /* TriggerOpTypes.SET */, + key: 'value' + }); + } + }), get = _a.get, set = _a.set; + var ref = { + get value() { + return get(); + }, + set value(newVal) { + set(newVal); + } + }; + def(ref, RefFlag, true); + return ref; + } + function toRefs(object) { + if (!isReactive(object)) { + warn$2("toRefs() expects a reactive object but received a plain one."); + } + var ret = isArray(object) ? new Array(object.length) : {}; + for (var key in object) { + ret[key] = toRef(object, key); + } + return ret; + } + function toRef(object, key, defaultValue) { + var val = object[key]; + if (isRef(val)) { + return val; + } + var ref = { + get value() { + var val = object[key]; + return val === undefined ? defaultValue : val; + }, + set value(newVal) { + object[key] = newVal; + } + }; + def(ref, RefFlag, true); + return ref; + } + + var rawToReadonlyFlag = "__v_rawToReadonly"; + var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly"; + function readonly(target) { + return createReadonly(target, false); + } + function createReadonly(target, shallow) { + if (!isPlainObject(target)) { + { + if (isArray(target)) { + warn$2("Vue 2 does not support readonly arrays."); + } + else if (isCollectionType(target)) { + warn$2("Vue 2 does not support readonly collection types such as Map or Set."); + } + else { + warn$2("value cannot be made readonly: ".concat(typeof target)); + } + } + return target; + } + // already a readonly object + if (isReadonly(target)) { + return target; + } + // already has a readonly proxy + var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag; + var existingProxy = target[existingFlag]; + if (existingProxy) { + return existingProxy; + } + var proxy = Object.create(Object.getPrototypeOf(target)); + def(target, existingFlag, proxy); + def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true); + def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target); + if (isRef(target)) { + def(proxy, RefFlag, true); + } + if (shallow || isShallow(target)) { + def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); + } + var keys = Object.keys(target); + for (var i = 0; i < keys.length; i++) { + defineReadonlyProperty(proxy, target, keys[i], shallow); + } + return proxy; + } + function defineReadonlyProperty(proxy, target, key, shallow) { + Object.defineProperty(proxy, key, { + enumerable: true, + configurable: true, + get: function () { + var val = target[key]; + return shallow || !isPlainObject(val) ? val : readonly(val); + }, + set: function () { + warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); + } + }); + } + /** + * Returns a reactive-copy of the original object, where only the root level + * properties are readonly, and does NOT unwrap refs nor recursively convert + * returned properties. + * This is used for creating the props proxy object for stateful components. + */ + function shallowReadonly(target) { + return createReadonly(target, true); + } + + function computed(getterOrOptions, debugOptions) { + var getter; + var setter; + var onlyGetter = isFunction(getterOrOptions); + if (onlyGetter) { + getter = getterOrOptions; + setter = function () { + warn$2('Write operation failed: computed value is readonly'); + } + ; + } + else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + var watcher = isServerRendering() + ? null + : new Watcher(currentInstance, getter, noop, { lazy: true }); + if (watcher && debugOptions) { + watcher.onTrack = debugOptions.onTrack; + watcher.onTrigger = debugOptions.onTrigger; + } + var ref = { + // some libs rely on the presence effect for checking computed refs + // from normal refs, but the implementation doesn't matter + effect: watcher, + get value() { + if (watcher) { + if (watcher.dirty) { + watcher.evaluate(); + } + if (Dep.target) { + if (Dep.target.onTrack) { + Dep.target.onTrack({ + effect: Dep.target, + target: ref, + type: "get" /* TrackOpTypes.GET */, + key: 'value' + }); + } + watcher.depend(); + } + return watcher.value; + } + else { + return getter(); + } + }, + set value(newVal) { + setter(newVal); + } + }; + def(ref, RefFlag, true); + def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter); + return ref; + } + + var mark; + var measure; + { + var perf_1 = inBrowser && window.performance; + /* istanbul ignore if */ + if (perf_1 && + // @ts-ignore + perf_1.mark && + // @ts-ignore + perf_1.measure && + // @ts-ignore + perf_1.clearMarks && + // @ts-ignore + perf_1.clearMeasures) { + mark = function (tag) { return perf_1.mark(tag); }; + measure = function (name, startTag, endTag) { + perf_1.measure(name, startTag, endTag); + perf_1.clearMarks(startTag); + perf_1.clearMarks(endTag); + // perf.clearMeasures(name) + }; + } + } + + var normalizeEvent = cached(function (name) { + var passive = name.charAt(0) === '&'; + name = passive ? name.slice(1) : name; + var once = name.charAt(0) === '~'; // Prefixed last, checked first + name = once ? name.slice(1) : name; + var capture = name.charAt(0) === '!'; + name = capture ? name.slice(1) : name; + return { + name: name, + once: once, + capture: capture, + passive: passive + }; + }); + function createFnInvoker(fns, vm) { + function invoker() { + var fns = invoker.fns; + if (isArray(fns)) { + var cloned = fns.slice(); + for (var i = 0; i < cloned.length; i++) { + invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler"); + } + } + else { + // return handler return value for single handlers + return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); + } + } + invoker.fns = fns; + return invoker; + } + function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) { + var name, cur, old, event; + for (name in on) { + cur = on[name]; + old = oldOn[name]; + event = normalizeEvent(name); + if (isUndef(cur)) { + warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm); + } + else if (isUndef(old)) { + if (isUndef(cur.fns)) { + cur = on[name] = createFnInvoker(cur, vm); + } + if (isTrue(event.once)) { + cur = on[name] = createOnceHandler(event.name, cur, event.capture); + } + add(event.name, cur, event.capture, event.passive, event.params); + } + else if (cur !== old) { + old.fns = cur; + on[name] = old; + } + } + for (name in oldOn) { + if (isUndef(on[name])) { + event = normalizeEvent(name); + remove(event.name, oldOn[name], event.capture); + } + } + } + + function mergeVNodeHook(def, hookKey, hook) { + if (def instanceof VNode) { + def = def.data.hook || (def.data.hook = {}); + } + var invoker; + var oldHook = def[hookKey]; + function wrappedHook() { + hook.apply(this, arguments); + // important: remove merged hook to ensure it's called only once + // and prevent memory leak + remove$2(invoker.fns, wrappedHook); + } + if (isUndef(oldHook)) { + // no existing hook + invoker = createFnInvoker([wrappedHook]); + } + else { + /* istanbul ignore if */ + if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { + // already a merged invoker + invoker = oldHook; + invoker.fns.push(wrappedHook); + } + else { + // existing plain hook + invoker = createFnInvoker([oldHook, wrappedHook]); + } + } + invoker.merged = true; + def[hookKey] = invoker; + } + + function extractPropsFromVNodeData(data, Ctor, tag) { + // we are only extracting raw values here. + // validation and default values are handled in the child + // component itself. + var propOptions = Ctor.options.props; + if (isUndef(propOptions)) { + return; + } + var res = {}; + var attrs = data.attrs, props = data.props; + if (isDef(attrs) || isDef(props)) { + for (var key in propOptions) { + var altKey = hyphenate(key); + { + var keyInLowerCase = key.toLowerCase(); + if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { + tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + + "".concat(formatComponentName( + // @ts-expect-error tag is string + tag || Ctor), ", but the declared prop name is") + + " \"".concat(key, "\". ") + + "Note that HTML attributes are case-insensitive and camelCased " + + "props need to use their kebab-case equivalents when using in-DOM " + + "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\".")); + } + } + checkProp(res, props, key, altKey, true) || + checkProp(res, attrs, key, altKey, false); + } + } + return res; + } + function checkProp(res, hash, key, altKey, preserve) { + if (isDef(hash)) { + if (hasOwn(hash, key)) { + res[key] = hash[key]; + if (!preserve) { + delete hash[key]; + } + return true; + } + else if (hasOwn(hash, altKey)) { + res[key] = hash[altKey]; + if (!preserve) { + delete hash[altKey]; + } + return true; + } + } + return false; + } + + // The template compiler attempts to minimize the need for normalization by + // statically analyzing the template at compile time. + // + // For plain HTML markup, normalization can be completely skipped because the + // generated render function is guaranteed to return Array<VNode>. There are + // two cases where extra normalization is needed: + // 1. When the children contains components - because a functional component + // may return an Array instead of a single root. In this case, just a simple + // normalization is needed - if any child is an Array, we flatten the whole + // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep + // because functional components already normalize their own children. + function simpleNormalizeChildren(children) { + for (var i = 0; i < children.length; i++) { + if (isArray(children[i])) { + return Array.prototype.concat.apply([], children); + } + } + return children; + } + // 2. When the children contains constructs that always generated nested Arrays, + // e.g. <template>, <slot>, v-for, or when the children is provided by user + // with hand-written render functions / JSX. In such cases a full normalization + // is needed to cater to all possible types of children values. + function normalizeChildren(children) { + return isPrimitive(children) + ? [createTextVNode(children)] + : isArray(children) + ? normalizeArrayChildren(children) + : undefined; + } + function isTextNode(node) { + return isDef(node) && isDef(node.text) && isFalse(node.isComment); + } + function normalizeArrayChildren(children, nestedIndex) { + var res = []; + var i, c, lastIndex, last; + for (i = 0; i < children.length; i++) { + c = children[i]; + if (isUndef(c) || typeof c === 'boolean') + continue; + lastIndex = res.length - 1; + last = res[lastIndex]; + // nested + if (isArray(c)) { + if (c.length > 0) { + c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i)); + // merge adjacent text nodes + if (isTextNode(c[0]) && isTextNode(last)) { + res[lastIndex] = createTextVNode(last.text + c[0].text); + c.shift(); + } + res.push.apply(res, c); + } + } + else if (isPrimitive(c)) { + if (isTextNode(last)) { + // merge adjacent text nodes + // this is necessary for SSR hydration because text nodes are + // essentially merged when rendered to HTML strings + res[lastIndex] = createTextVNode(last.text + c); + } + else if (c !== '') { + // convert primitive to vnode + res.push(createTextVNode(c)); + } + } + else { + if (isTextNode(c) && isTextNode(last)) { + // merge adjacent text nodes + res[lastIndex] = createTextVNode(last.text + c.text); + } + else { + // default key for nested array children (likely generated by v-for) + if (isTrue(children._isVList) && + isDef(c.tag) && + isUndef(c.key) && + isDef(nestedIndex)) { + c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__"); + } + res.push(c); + } + } + } + return res; + } + + var SIMPLE_NORMALIZE = 1; + var ALWAYS_NORMALIZE = 2; + // wrapper function for providing a more flexible interface + // without getting yelled at by flow + function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) { + if (isArray(data) || isPrimitive(data)) { + normalizationType = children; + children = data; + data = undefined; + } + if (isTrue(alwaysNormalize)) { + normalizationType = ALWAYS_NORMALIZE; + } + return _createElement(context, tag, data, children, normalizationType); + } + function _createElement(context, tag, data, children, normalizationType) { + if (isDef(data) && isDef(data.__ob__)) { + warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context); + return createEmptyVNode(); + } + // object syntax in v-bind + if (isDef(data) && isDef(data.is)) { + tag = data.is; + } + if (!tag) { + // in case of component :is set to falsy value + return createEmptyVNode(); + } + // warn against non-primitive key + if (isDef(data) && isDef(data.key) && !isPrimitive(data.key)) { + warn$2('Avoid using non-primitive value as key, ' + + 'use string/number value instead.', context); + } + // support single function children as default scoped slot + if (isArray(children) && isFunction(children[0])) { + data = data || {}; + data.scopedSlots = { default: children[0] }; + children.length = 0; + } + if (normalizationType === ALWAYS_NORMALIZE) { + children = normalizeChildren(children); + } + else if (normalizationType === SIMPLE_NORMALIZE) { + children = simpleNormalizeChildren(children); + } + var vnode, ns; + if (typeof tag === 'string') { + var Ctor = void 0; + ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag); + if (config.isReservedTag(tag)) { + // platform built-in elements + if (isDef(data) && + isDef(data.nativeOn) && + data.tag !== 'component') { + warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context); + } + vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context); + } + else if ((!data || !data.pre) && + isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) { + // component + vnode = createComponent(Ctor, data, context, children, tag); + } + else { + // unknown or unlisted namespaced elements + // check at runtime because it may get assigned a namespace when its + // parent normalizes children + vnode = new VNode(tag, data, children, undefined, undefined, context); + } + } + else { + // direct component options / constructor + vnode = createComponent(tag, data, context, children); + } + if (isArray(vnode)) { + return vnode; + } + else if (isDef(vnode)) { + if (isDef(ns)) + applyNS(vnode, ns); + if (isDef(data)) + registerDeepBindings(data); + return vnode; + } + else { + return createEmptyVNode(); + } + } + function applyNS(vnode, ns, force) { + vnode.ns = ns; + if (vnode.tag === 'foreignObject') { + // use default namespace inside foreignObject + ns = undefined; + force = true; + } + if (isDef(vnode.children)) { + for (var i = 0, l = vnode.children.length; i < l; i++) { + var child = vnode.children[i]; + if (isDef(child.tag) && + (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) { + applyNS(child, ns, force); + } + } + } + } + // ref #5318 + // necessary to ensure parent re-render when deep bindings like :style and + // :class are used on slot nodes + function registerDeepBindings(data) { + if (isObject(data.style)) { + traverse(data.style); + } + if (isObject(data.class)) { + traverse(data.class); + } + } + + /** + * Runtime helper for rendering v-for lists. + */ + function renderList(val, render) { + var ret = null, i, l, keys, key; + if (isArray(val) || typeof val === 'string') { + ret = new Array(val.length); + for (i = 0, l = val.length; i < l; i++) { + ret[i] = render(val[i], i); + } + } + else if (typeof val === 'number') { + ret = new Array(val); + for (i = 0; i < val; i++) { + ret[i] = render(i + 1, i); + } + } + else if (isObject(val)) { + if (hasSymbol && val[Symbol.iterator]) { + ret = []; + var iterator = val[Symbol.iterator](); + var result = iterator.next(); + while (!result.done) { + ret.push(render(result.value, ret.length)); + result = iterator.next(); + } + } + else { + keys = Object.keys(val); + ret = new Array(keys.length); + for (i = 0, l = keys.length; i < l; i++) { + key = keys[i]; + ret[i] = render(val[key], key, i); + } + } + } + if (!isDef(ret)) { + ret = []; + } + ret._isVList = true; + return ret; + } + + /** + * Runtime helper for rendering <slot> + */ + function renderSlot(name, fallbackRender, props, bindObject) { + var scopedSlotFn = this.$scopedSlots[name]; + var nodes; + if (scopedSlotFn) { + // scoped slot + props = props || {}; + if (bindObject) { + if (!isObject(bindObject)) { + warn$2('slot v-bind without argument expects an Object', this); + } + props = extend(extend({}, bindObject), props); + } + nodes = + scopedSlotFn(props) || + (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); + } + else { + nodes = + this.$slots[name] || + (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); + } + var target = props && props.slot; + if (target) { + return this.$createElement('template', { slot: target }, nodes); + } + else { + return nodes; + } + } + + /** + * Runtime helper for resolving filters + */ + function resolveFilter(id) { + return resolveAsset(this.$options, 'filters', id, true) || identity; + } + + function isKeyNotMatch(expect, actual) { + if (isArray(expect)) { + return expect.indexOf(actual) === -1; + } + else { + return expect !== actual; + } + } + /** + * Runtime helper for checking keyCodes from config. + * exposed as Vue.prototype._k + * passing in eventKeyName as last argument separately for backwards compat + */ + function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { + var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; + if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { + return isKeyNotMatch(builtInKeyName, eventKeyName); + } + else if (mappedKeyCode) { + return isKeyNotMatch(mappedKeyCode, eventKeyCode); + } + else if (eventKeyName) { + return hyphenate(eventKeyName) !== key; + } + return eventKeyCode === undefined; + } + + /** + * Runtime helper for merging v-bind="object" into a VNode's data. + */ + function bindObjectProps(data, tag, value, asProp, isSync) { + if (value) { + if (!isObject(value)) { + warn$2('v-bind without argument expects an Object or Array value', this); + } + else { + if (isArray(value)) { + value = toObject(value); + } + var hash = void 0; + var _loop_1 = function (key) { + if (key === 'class' || key === 'style' || isReservedAttribute(key)) { + hash = data; + } + else { + var type = data.attrs && data.attrs.type; + hash = + asProp || config.mustUseProp(tag, type, key) + ? data.domProps || (data.domProps = {}) + : data.attrs || (data.attrs = {}); + } + var camelizedKey = camelize(key); + var hyphenatedKey = hyphenate(key); + if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { + hash[key] = value[key]; + if (isSync) { + var on = data.on || (data.on = {}); + on["update:".concat(key)] = function ($event) { + value[key] = $event; + }; + } + } + }; + for (var key in value) { + _loop_1(key); + } + } + } + return data; + } + + /** + * Runtime helper for rendering static trees. + */ + function renderStatic(index, isInFor) { + var cached = this._staticTrees || (this._staticTrees = []); + var tree = cached[index]; + // if has already-rendered static tree and not inside v-for, + // we can reuse the same tree. + if (tree && !isInFor) { + return tree; + } + // otherwise, render a fresh tree. + tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates + ); + markStatic$1(tree, "__static__".concat(index), false); + return tree; + } + /** + * Runtime helper for v-once. + * Effectively it means marking the node as static with a unique key. + */ + function markOnce(tree, index, key) { + markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true); + return tree; + } + function markStatic$1(tree, key, isOnce) { + if (isArray(tree)) { + for (var i = 0; i < tree.length; i++) { + if (tree[i] && typeof tree[i] !== 'string') { + markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce); + } + } + } + else { + markStaticNode(tree, key, isOnce); + } + } + function markStaticNode(node, key, isOnce) { + node.isStatic = true; + node.key = key; + node.isOnce = isOnce; + } + + function bindObjectListeners(data, value) { + if (value) { + if (!isPlainObject(value)) { + warn$2('v-on without argument expects an Object value', this); + } + else { + var on = (data.on = data.on ? extend({}, data.on) : {}); + for (var key in value) { + var existing = on[key]; + var ours = value[key]; + on[key] = existing ? [].concat(existing, ours) : ours; + } + } + } + return data; + } + + function resolveScopedSlots(fns, res, + // the following are added in 2.6 + hasDynamicKeys, contentHashKey) { + res = res || { $stable: !hasDynamicKeys }; + for (var i = 0; i < fns.length; i++) { + var slot = fns[i]; + if (isArray(slot)) { + resolveScopedSlots(slot, res, hasDynamicKeys); + } + else if (slot) { + // marker for reverse proxying v-slot without scope on this.$slots + // @ts-expect-error + if (slot.proxy) { + // @ts-expect-error + slot.fn.proxy = true; + } + res[slot.key] = slot.fn; + } + } + if (contentHashKey) { + res.$key = contentHashKey; + } + return res; + } + + // helper to process dynamic keys for dynamic arguments in v-bind and v-on. + function bindDynamicKeys(baseObj, values) { + for (var i = 0; i < values.length; i += 2) { + var key = values[i]; + if (typeof key === 'string' && key) { + baseObj[values[i]] = values[i + 1]; + } + else if (key !== '' && key !== null) { + // null is a special value for explicitly removing a binding + warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this); + } + } + return baseObj; + } + // helper to dynamically append modifier runtime markers to event names. + // ensure only append when value is already string, otherwise it will be cast + // to string and cause the type check to miss. + function prependModifier(value, symbol) { + return typeof value === 'string' ? symbol + value : value; + } + + function installRenderHelpers(target) { + target._o = markOnce; + target._n = toNumber; + target._s = toString; + target._l = renderList; + target._t = renderSlot; + target._q = looseEqual; + target._i = looseIndexOf; + target._m = renderStatic; + target._f = resolveFilter; + target._k = checkKeyCodes; + target._b = bindObjectProps; + target._v = createTextVNode; + target._e = createEmptyVNode; + target._u = resolveScopedSlots; + target._g = bindObjectListeners; + target._d = bindDynamicKeys; + target._p = prependModifier; + } + + /** + * Runtime helper for resolving raw children VNodes into a slot object. + */ + function resolveSlots(children, context) { + if (!children || !children.length) { + return {}; + } + var slots = {}; + for (var i = 0, l = children.length; i < l; i++) { + var child = children[i]; + var data = child.data; + // remove slot attribute if the node is resolved as a Vue slot node + if (data && data.attrs && data.attrs.slot) { + delete data.attrs.slot; + } + // named slots should only be respected if the vnode was rendered in the + // same context. + if ((child.context === context || child.fnContext === context) && + data && + data.slot != null) { + var name_1 = data.slot; + var slot = slots[name_1] || (slots[name_1] = []); + if (child.tag === 'template') { + slot.push.apply(slot, child.children || []); + } + else { + slot.push(child); + } + } + else { + (slots.default || (slots.default = [])).push(child); + } + } + // ignore slots that contains only whitespace + for (var name_2 in slots) { + if (slots[name_2].every(isWhitespace)) { + delete slots[name_2]; + } + } + return slots; + } + function isWhitespace(node) { + return (node.isComment && !node.asyncFactory) || node.text === ' '; + } + + function isAsyncPlaceholder(node) { + // @ts-expect-error not really boolean type + return node.isComment && node.asyncFactory; + } + + function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) { + var res; + var hasNormalSlots = Object.keys(normalSlots).length > 0; + var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots; + var key = scopedSlots && scopedSlots.$key; + if (!scopedSlots) { + res = {}; + } + else if (scopedSlots._normalized) { + // fast path 1: child component re-render only, parent did not change + return scopedSlots._normalized; + } + else if (isStable && + prevScopedSlots && + prevScopedSlots !== emptyObject && + key === prevScopedSlots.$key && + !hasNormalSlots && + !prevScopedSlots.$hasNormal) { + // fast path 2: stable scoped slots w/ no normal slots to proxy, + // only need to normalize once + return prevScopedSlots; + } + else { + res = {}; + for (var key_1 in scopedSlots) { + if (scopedSlots[key_1] && key_1[0] !== '$') { + res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]); + } + } + } + // expose normal slots on scopedSlots + for (var key_2 in normalSlots) { + if (!(key_2 in res)) { + res[key_2] = proxyNormalSlot(normalSlots, key_2); + } + } + // avoriaz seems to mock a non-extensible $scopedSlots object + // and when that is passed down this would cause an error + if (scopedSlots && Object.isExtensible(scopedSlots)) { + scopedSlots._normalized = res; + } + def(res, '$stable', isStable); + def(res, '$key', key); + def(res, '$hasNormal', hasNormalSlots); + return res; + } + function normalizeScopedSlot(vm, normalSlots, key, fn) { + var normalized = function () { + var cur = currentInstance; + setCurrentInstance(vm); + var res = arguments.length ? fn.apply(null, arguments) : fn({}); + res = + res && typeof res === 'object' && !isArray(res) + ? [res] // single vnode + : normalizeChildren(res); + var vnode = res && res[0]; + setCurrentInstance(cur); + return res && + (!vnode || + (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391 + ? undefined + : res; + }; + // this is a slot using the new v-slot syntax without scope. although it is + // compiled as a scoped slot, render fn users would expect it to be present + // on this.$slots because the usage is semantically a normal slot. + if (fn.proxy) { + Object.defineProperty(normalSlots, key, { + get: normalized, + enumerable: true, + configurable: true + }); + } + return normalized; + } + function proxyNormalSlot(slots, key) { + return function () { return slots[key]; }; + } + + function initSetup(vm) { + var options = vm.$options; + var setup = options.setup; + if (setup) { + var ctx = (vm._setupContext = createSetupContext(vm)); + setCurrentInstance(vm); + pushTarget(); + var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup"); + popTarget(); + setCurrentInstance(); + if (isFunction(setupResult)) { + // render function + // @ts-ignore + options.render = setupResult; + } + else if (isObject(setupResult)) { + // bindings + if (setupResult instanceof VNode) { + warn$2("setup() should not return VNodes directly - " + + "return a render function instead."); + } + vm._setupState = setupResult; + // __sfc indicates compiled bindings from <script setup> + if (!setupResult.__sfc) { + for (var key in setupResult) { + if (!isReserved(key)) { + proxyWithRefUnwrap(vm, setupResult, key); + } + else { + warn$2("Avoid using variables that start with _ or $ in setup()."); + } + } + } + else { + // exposed for compiled render fn + var proxy = (vm._setupProxy = {}); + for (var key in setupResult) { + if (key !== '__sfc') { + proxyWithRefUnwrap(proxy, setupResult, key); + } + } + } + } + else if (setupResult !== undefined) { + warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult)); + } + } + } + function createSetupContext(vm) { + var exposeCalled = false; + return { + get attrs() { + if (!vm._attrsProxy) { + var proxy = (vm._attrsProxy = {}); + def(proxy, '_v_attr_proxy', true); + syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs'); + } + return vm._attrsProxy; + }, + get listeners() { + if (!vm._listenersProxy) { + var proxy = (vm._listenersProxy = {}); + syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners'); + } + return vm._listenersProxy; + }, + get slots() { + return initSlotsProxy(vm); + }, + emit: bind$1(vm.$emit, vm), + expose: function (exposed) { + { + if (exposeCalled) { + warn$2("expose() should be called only once per setup().", vm); + } + exposeCalled = true; + } + if (exposed) { + Object.keys(exposed).forEach(function (key) { + return proxyWithRefUnwrap(vm, exposed, key); + }); + } + } + }; + } + function syncSetupProxy(to, from, prev, instance, type) { + var changed = false; + for (var key in from) { + if (!(key in to)) { + changed = true; + defineProxyAttr(to, key, instance, type); + } + else if (from[key] !== prev[key]) { + changed = true; + } + } + for (var key in to) { + if (!(key in from)) { + changed = true; + delete to[key]; + } + } + return changed; + } + function defineProxyAttr(proxy, key, instance, type) { + Object.defineProperty(proxy, key, { + enumerable: true, + configurable: true, + get: function () { + return instance[type][key]; + } + }); + } + function initSlotsProxy(vm) { + if (!vm._slotsProxy) { + syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots); + } + return vm._slotsProxy; + } + function syncSetupSlots(to, from) { + for (var key in from) { + to[key] = from[key]; + } + for (var key in to) { + if (!(key in from)) { + delete to[key]; + } + } + } + /** + * @internal use manual type def because public setup context type relies on + * legacy VNode types + */ + function useSlots() { + return getContext().slots; + } + /** + * @internal use manual type def because public setup context type relies on + * legacy VNode types + */ + function useAttrs() { + return getContext().attrs; + } + /** + * Vue 2 only + * @internal use manual type def because public setup context type relies on + * legacy VNode types + */ + function useListeners() { + return getContext().listeners; + } + function getContext() { + if (!currentInstance) { + warn$2("useContext() called without active instance."); + } + var vm = currentInstance; + return vm._setupContext || (vm._setupContext = createSetupContext(vm)); + } + /** + * Runtime helper for merging default declarations. Imported by compiled code + * only. + * @internal + */ + function mergeDefaults(raw, defaults) { + var props = isArray(raw) + ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {}) + : raw; + for (var key in defaults) { + var opt = props[key]; + if (opt) { + if (isArray(opt) || isFunction(opt)) { + props[key] = { type: opt, default: defaults[key] }; + } + else { + opt.default = defaults[key]; + } + } + else if (opt === null) { + props[key] = { default: defaults[key] }; + } + else { + warn$2("props default key \"".concat(key, "\" has no corresponding declaration.")); + } + } + return props; + } + + function initRender(vm) { + vm._vnode = null; // the root of the child tree + vm._staticTrees = null; // v-once cached trees + var options = vm.$options; + var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree + var renderContext = parentVnode && parentVnode.context; + vm.$slots = resolveSlots(options._renderChildren, renderContext); + vm.$scopedSlots = parentVnode + ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) + : emptyObject; + // bind the createElement fn to this instance + // so that we get proper render context inside it. + // args order: tag, data, children, normalizationType, alwaysNormalize + // internal version is used by render functions compiled from templates + // @ts-expect-error + vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); }; + // normalization is always applied for the public version, used in + // user-written render functions. + // @ts-expect-error + vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); }; + // $attrs & $listeners are exposed for easier HOC creation. + // they need to be reactive so that HOCs using them are always updated + var parentData = parentVnode && parentVnode.data; + /* istanbul ignore else */ + { + defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () { + !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm); + }, true); + defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () { + !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm); + }, true); + } + } + var currentRenderingInstance = null; + function renderMixin(Vue) { + // install runtime convenience helpers + installRenderHelpers(Vue.prototype); + Vue.prototype.$nextTick = function (fn) { + return nextTick(fn, this); + }; + Vue.prototype._render = function () { + var vm = this; + var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode; + if (_parentVnode && vm._isMounted) { + vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots); + if (vm._slotsProxy) { + syncSetupSlots(vm._slotsProxy, vm.$scopedSlots); + } + } + // set parent vnode. this allows render functions to have access + // to the data on the placeholder node. + vm.$vnode = _parentVnode; + // render self + var vnode; + try { + // There's no need to maintain a stack because all render fns are called + // separately from one another. Nested component's render fns are called + // when parent component is patched. + setCurrentInstance(vm); + currentRenderingInstance = vm; + vnode = render.call(vm._renderProxy, vm.$createElement); + } + catch (e) { + handleError(e, vm, "render"); + // return error render result, + // or previous vnode to prevent render error causing blank component + /* istanbul ignore else */ + if (vm.$options.renderError) { + try { + vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); + } + catch (e) { + handleError(e, vm, "renderError"); + vnode = vm._vnode; + } + } + else { + vnode = vm._vnode; + } + } + finally { + currentRenderingInstance = null; + setCurrentInstance(); + } + // if the returned array contains only a single node, allow it + if (isArray(vnode) && vnode.length === 1) { + vnode = vnode[0]; + } + // return empty vnode in case the render function errored out + if (!(vnode instanceof VNode)) { + if (isArray(vnode)) { + warn$2('Multiple root nodes returned from render function. Render function ' + + 'should return a single root node.', vm); + } + vnode = createEmptyVNode(); + } + // set parent + vnode.parent = _parentVnode; + return vnode; + }; + } + + function ensureCtor(comp, base) { + if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) { + comp = comp.default; + } + return isObject(comp) ? base.extend(comp) : comp; + } + function createAsyncPlaceholder(factory, data, context, children, tag) { + var node = createEmptyVNode(); + node.asyncFactory = factory; + node.asyncMeta = { data: data, context: context, children: children, tag: tag }; + return node; + } + function resolveAsyncComponent(factory, baseCtor) { + if (isTrue(factory.error) && isDef(factory.errorComp)) { + return factory.errorComp; + } + if (isDef(factory.resolved)) { + return factory.resolved; + } + var owner = currentRenderingInstance; + if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { + // already pending + factory.owners.push(owner); + } + if (isTrue(factory.loading) && isDef(factory.loadingComp)) { + return factory.loadingComp; + } + if (owner && !isDef(factory.owners)) { + var owners_1 = (factory.owners = [owner]); + var sync_1 = true; + var timerLoading_1 = null; + var timerTimeout_1 = null; + owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); }); + var forceRender_1 = function (renderCompleted) { + for (var i = 0, l = owners_1.length; i < l; i++) { + owners_1[i].$forceUpdate(); + } + if (renderCompleted) { + owners_1.length = 0; + if (timerLoading_1 !== null) { + clearTimeout(timerLoading_1); + timerLoading_1 = null; + } + if (timerTimeout_1 !== null) { + clearTimeout(timerTimeout_1); + timerTimeout_1 = null; + } + } + }; + var resolve = once(function (res) { + // cache resolved + factory.resolved = ensureCtor(res, baseCtor); + // invoke callbacks only if this is not a synchronous resolve + // (async resolves are shimmed as synchronous during SSR) + if (!sync_1) { + forceRender_1(true); + } + else { + owners_1.length = 0; + } + }); + var reject_1 = once(function (reason) { + warn$2("Failed to resolve async component: ".concat(String(factory)) + + (reason ? "\nReason: ".concat(reason) : '')); + if (isDef(factory.errorComp)) { + factory.error = true; + forceRender_1(true); + } + }); + var res_1 = factory(resolve, reject_1); + if (isObject(res_1)) { + if (isPromise(res_1)) { + // () => Promise + if (isUndef(factory.resolved)) { + res_1.then(resolve, reject_1); + } + } + else if (isPromise(res_1.component)) { + res_1.component.then(resolve, reject_1); + if (isDef(res_1.error)) { + factory.errorComp = ensureCtor(res_1.error, baseCtor); + } + if (isDef(res_1.loading)) { + factory.loadingComp = ensureCtor(res_1.loading, baseCtor); + if (res_1.delay === 0) { + factory.loading = true; + } + else { + // @ts-expect-error NodeJS timeout type + timerLoading_1 = setTimeout(function () { + timerLoading_1 = null; + if (isUndef(factory.resolved) && isUndef(factory.error)) { + factory.loading = true; + forceRender_1(false); + } + }, res_1.delay || 200); + } + } + if (isDef(res_1.timeout)) { + // @ts-expect-error NodeJS timeout type + timerTimeout_1 = setTimeout(function () { + timerTimeout_1 = null; + if (isUndef(factory.resolved)) { + reject_1("timeout (".concat(res_1.timeout, "ms)") ); + } + }, res_1.timeout); + } + } + } + sync_1 = false; + // return in case resolved synchronously + return factory.loading ? factory.loadingComp : factory.resolved; + } + } + + function getFirstComponentChild(children) { + if (isArray(children)) { + for (var i = 0; i < children.length; i++) { + var c = children[i]; + if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { + return c; + } + } + } + } + + function initEvents(vm) { + vm._events = Object.create(null); + vm._hasHookEvent = false; + // init parent attached events + var listeners = vm.$options._parentListeners; + if (listeners) { + updateComponentListeners(vm, listeners); + } + } + var target$1; + function add$1(event, fn) { + target$1.$on(event, fn); + } + function remove$1(event, fn) { + target$1.$off(event, fn); + } + function createOnceHandler$1(event, fn) { + var _target = target$1; + return function onceHandler() { + var res = fn.apply(null, arguments); + if (res !== null) { + _target.$off(event, onceHandler); + } + }; + } + function updateComponentListeners(vm, listeners, oldListeners) { + target$1 = vm; + updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm); + target$1 = undefined; + } + function eventsMixin(Vue) { + var hookRE = /^hook:/; + Vue.prototype.$on = function (event, fn) { + var vm = this; + if (isArray(event)) { + for (var i = 0, l = event.length; i < l; i++) { + vm.$on(event[i], fn); + } + } + else { + (vm._events[event] || (vm._events[event] = [])).push(fn); + // optimize hook:event cost by using a boolean flag marked at registration + // instead of a hash lookup + if (hookRE.test(event)) { + vm._hasHookEvent = true; + } + } + return vm; + }; + Vue.prototype.$once = function (event, fn) { + var vm = this; + function on() { + vm.$off(event, on); + fn.apply(vm, arguments); + } + on.fn = fn; + vm.$on(event, on); + return vm; + }; + Vue.prototype.$off = function (event, fn) { + var vm = this; + // all + if (!arguments.length) { + vm._events = Object.create(null); + return vm; + } + // array of events + if (isArray(event)) { + for (var i_1 = 0, l = event.length; i_1 < l; i_1++) { + vm.$off(event[i_1], fn); + } + return vm; + } + // specific event + var cbs = vm._events[event]; + if (!cbs) { + return vm; + } + if (!fn) { + vm._events[event] = null; + return vm; + } + // specific handler + var cb; + var i = cbs.length; + while (i--) { + cb = cbs[i]; + if (cb === fn || cb.fn === fn) { + cbs.splice(i, 1); + break; + } + } + return vm; + }; + Vue.prototype.$emit = function (event) { + var vm = this; + { + var lowerCaseEvent = event.toLowerCase(); + if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { + tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + + "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") + + "Note that HTML attributes are case-insensitive and you cannot use " + + "v-on to listen to camelCase events when using in-DOM templates. " + + "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\".")); + } + } + var cbs = vm._events[event]; + if (cbs) { + cbs = cbs.length > 1 ? toArray(cbs) : cbs; + var args = toArray(arguments, 1); + var info = "event handler for \"".concat(event, "\""); + for (var i = 0, l = cbs.length; i < l; i++) { + invokeWithErrorHandling(cbs[i], vm, args, vm, info); + } + } + return vm; + }; + } + + var activeInstance = null; + var isUpdatingChildComponent = false; + function setActiveInstance(vm) { + var prevActiveInstance = activeInstance; + activeInstance = vm; + return function () { + activeInstance = prevActiveInstance; + }; + } + function initLifecycle(vm) { + var options = vm.$options; + // locate first non-abstract parent + var parent = options.parent; + if (parent && !options.abstract) { + while (parent.$options.abstract && parent.$parent) { + parent = parent.$parent; + } + parent.$children.push(vm); + } + vm.$parent = parent; + vm.$root = parent ? parent.$root : vm; + vm.$children = []; + vm.$refs = {}; + vm._provided = parent ? parent._provided : Object.create(null); + vm._watcher = null; + vm._inactive = null; + vm._directInactive = false; + vm._isMounted = false; + vm._isDestroyed = false; + vm._isBeingDestroyed = false; + } + function lifecycleMixin(Vue) { + Vue.prototype._update = function (vnode, hydrating) { + var vm = this; + var prevEl = vm.$el; + var prevVnode = vm._vnode; + var restoreActiveInstance = setActiveInstance(vm); + vm._vnode = vnode; + // Vue.prototype.__patch__ is injected in entry points + // based on the rendering backend used. + if (!prevVnode) { + // initial render + vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */); + } + else { + // updates + vm.$el = vm.__patch__(prevVnode, vnode); + } + restoreActiveInstance(); + // update __vue__ reference + if (prevEl) { + prevEl.__vue__ = null; + } + if (vm.$el) { + vm.$el.__vue__ = vm; + } + // if parent is an HOC, update its $el as well + if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) { + vm.$parent.$el = vm.$el; + } + // updated hook is called by the scheduler to ensure that children are + // updated in a parent's updated hook. + }; + Vue.prototype.$forceUpdate = function () { + var vm = this; + if (vm._watcher) { + vm._watcher.update(); + } + }; + Vue.prototype.$destroy = function () { + var vm = this; + if (vm._isBeingDestroyed) { + return; + } + callHook$1(vm, 'beforeDestroy'); + vm._isBeingDestroyed = true; + // remove self from parent + var parent = vm.$parent; + if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { + remove$2(parent.$children, vm); + } + // teardown scope. this includes both the render watcher and other + // watchers created + vm._scope.stop(); + // remove reference from data ob + // frozen object may not have observer. + if (vm._data.__ob__) { + vm._data.__ob__.vmCount--; + } + // call the last hook... + vm._isDestroyed = true; + // invoke destroy hooks on current rendered tree + vm.__patch__(vm._vnode, null); + // fire destroyed hook + callHook$1(vm, 'destroyed'); + // turn off all instance listeners. + vm.$off(); + // remove __vue__ reference + if (vm.$el) { + vm.$el.__vue__ = null; + } + // release circular reference (#6759) + if (vm.$vnode) { + vm.$vnode.parent = null; + } + }; + } + function mountComponent(vm, el, hydrating) { + vm.$el = el; + if (!vm.$options.render) { + // @ts-expect-error invalid type + vm.$options.render = createEmptyVNode; + { + /* istanbul ignore if */ + if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') || + vm.$options.el || + el) { + warn$2('You are using the runtime-only build of Vue where the template ' + + 'compiler is not available. Either pre-compile the templates into ' + + 'render functions, or use the compiler-included build.', vm); + } + else { + warn$2('Failed to mount component: template or render function not defined.', vm); + } + } + } + callHook$1(vm, 'beforeMount'); + var updateComponent; + /* istanbul ignore if */ + if (config.performance && mark) { + updateComponent = function () { + var name = vm._name; + var id = vm._uid; + var startTag = "vue-perf-start:".concat(id); + var endTag = "vue-perf-end:".concat(id); + mark(startTag); + var vnode = vm._render(); + mark(endTag); + measure("vue ".concat(name, " render"), startTag, endTag); + mark(startTag); + vm._update(vnode, hydrating); + mark(endTag); + measure("vue ".concat(name, " patch"), startTag, endTag); + }; + } + else { + updateComponent = function () { + vm._update(vm._render(), hydrating); + }; + } + var watcherOptions = { + before: function () { + if (vm._isMounted && !vm._isDestroyed) { + callHook$1(vm, 'beforeUpdate'); + } + } + }; + { + watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); }; + watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); }; + } + // we set this to vm._watcher inside the watcher's constructor + // since the watcher's initial patch may call $forceUpdate (e.g. inside child + // component's mounted hook), which relies on vm._watcher being already defined + new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */); + hydrating = false; + // flush buffer for flush: "pre" watchers queued in setup() + var preWatchers = vm._preWatchers; + if (preWatchers) { + for (var i = 0; i < preWatchers.length; i++) { + preWatchers[i].run(); + } + } + // manually mounted instance, call mounted on self + // mounted is called for render-created child components in its inserted hook + if (vm.$vnode == null) { + vm._isMounted = true; + callHook$1(vm, 'mounted'); + } + return vm; + } + function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) { + { + isUpdatingChildComponent = true; + } + // determine whether component has slot children + // we need to do this before overwriting $options._renderChildren. + // check if there are dynamic scopedSlots (hand-written or compiled but with + // dynamic slot names). Static scoped slots compiled from template has the + // "$stable" marker. + var newScopedSlots = parentVnode.data.scopedSlots; + var oldScopedSlots = vm.$scopedSlots; + var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) || + (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) || + (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) || + (!newScopedSlots && vm.$scopedSlots.$key)); + // Any static slot children from the parent may have changed during parent's + // update. Dynamic scoped slots may also have changed. In such cases, a forced + // update is necessary to ensure correctness. + var needsForceUpdate = !!(renderChildren || // has new static slots + vm.$options._renderChildren || // has old static slots + hasDynamicScopedSlot); + var prevVNode = vm.$vnode; + vm.$options._parentVnode = parentVnode; + vm.$vnode = parentVnode; // update vm's placeholder node without re-render + if (vm._vnode) { + // update child tree's parent + vm._vnode.parent = parentVnode; + } + vm.$options._renderChildren = renderChildren; + // update $attrs and $listeners hash + // these are also reactive so they may trigger child update if the child + // used them during render + var attrs = parentVnode.data.attrs || emptyObject; + if (vm._attrsProxy) { + // force update if attrs are accessed and has changed since it may be + // passed to a child component. + if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) { + needsForceUpdate = true; + } + } + vm.$attrs = attrs; + // update listeners + listeners = listeners || emptyObject; + var prevListeners = vm.$options._parentListeners; + if (vm._listenersProxy) { + syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners'); + } + vm.$listeners = vm.$options._parentListeners = listeners; + updateComponentListeners(vm, listeners, prevListeners); + // update props + if (propsData && vm.$options.props) { + toggleObserving(false); + var props = vm._props; + var propKeys = vm.$options._propKeys || []; + for (var i = 0; i < propKeys.length; i++) { + var key = propKeys[i]; + var propOptions = vm.$options.props; // wtf flow? + props[key] = validateProp(key, propOptions, propsData, vm); + } + toggleObserving(true); + // keep a copy of raw propsData + vm.$options.propsData = propsData; + } + // resolve slots + force update if has children + if (needsForceUpdate) { + vm.$slots = resolveSlots(renderChildren, parentVnode.context); + vm.$forceUpdate(); + } + { + isUpdatingChildComponent = false; + } + } + function isInInactiveTree(vm) { + while (vm && (vm = vm.$parent)) { + if (vm._inactive) + return true; + } + return false; + } + function activateChildComponent(vm, direct) { + if (direct) { + vm._directInactive = false; + if (isInInactiveTree(vm)) { + return; + } + } + else if (vm._directInactive) { + return; + } + if (vm._inactive || vm._inactive === null) { + vm._inactive = false; + for (var i = 0; i < vm.$children.length; i++) { + activateChildComponent(vm.$children[i]); + } + callHook$1(vm, 'activated'); + } + } + function deactivateChildComponent(vm, direct) { + if (direct) { + vm._directInactive = true; + if (isInInactiveTree(vm)) { + return; + } + } + if (!vm._inactive) { + vm._inactive = true; + for (var i = 0; i < vm.$children.length; i++) { + deactivateChildComponent(vm.$children[i]); + } + callHook$1(vm, 'deactivated'); + } + } + function callHook$1(vm, hook, args, setContext) { + if (setContext === void 0) { setContext = true; } + // #7573 disable dep collection when invoking lifecycle hooks + pushTarget(); + var prev = currentInstance; + setContext && setCurrentInstance(vm); + var handlers = vm.$options[hook]; + var info = "".concat(hook, " hook"); + if (handlers) { + for (var i = 0, j = handlers.length; i < j; i++) { + invokeWithErrorHandling(handlers[i], vm, args || null, vm, info); + } + } + if (vm._hasHookEvent) { + vm.$emit('hook:' + hook); + } + setContext && setCurrentInstance(prev); + popTarget(); + } + + var MAX_UPDATE_COUNT = 100; + var queue = []; + var activatedChildren = []; + var has = {}; + var circular = {}; + var waiting = false; + var flushing = false; + var index$1 = 0; + /** + * Reset the scheduler's state. + */ + function resetSchedulerState() { + index$1 = queue.length = activatedChildren.length = 0; + has = {}; + { + circular = {}; + } + waiting = flushing = false; + } + // Async edge case #6566 requires saving the timestamp when event listeners are + // attached. However, calling performance.now() has a perf overhead especially + // if the page has thousands of event listeners. Instead, we take a timestamp + // every time the scheduler flushes and use that for all event listeners + // attached during that flush. + var currentFlushTimestamp = 0; + // Async edge case fix requires storing an event listener's attach timestamp. + var getNow = Date.now; + // Determine what event timestamp the browser is using. Annoyingly, the + // timestamp can either be hi-res (relative to page load) or low-res + // (relative to UNIX epoch), so in order to compare time we have to use the + // same timestamp type when saving the flush timestamp. + // All IE versions use low-res event timestamps, and have problematic clock + // implementations (#9632) + if (inBrowser && !isIE) { + var performance_1 = window.performance; + if (performance_1 && + typeof performance_1.now === 'function' && + getNow() > document.createEvent('Event').timeStamp) { + // if the event timestamp, although evaluated AFTER the Date.now(), is + // smaller than it, it means the event is using a hi-res timestamp, + // and we need to use the hi-res version for event listener timestamps as + // well. + getNow = function () { return performance_1.now(); }; + } + } + var sortCompareFn = function (a, b) { + if (a.post) { + if (!b.post) + return 1; + } + else if (b.post) { + return -1; + } + return a.id - b.id; + }; + /** + * Flush both queues and run the watchers. + */ + function flushSchedulerQueue() { + currentFlushTimestamp = getNow(); + flushing = true; + var watcher, id; + // Sort queue before flush. + // This ensures that: + // 1. Components are updated from parent to child. (because parent is always + // created before the child) + // 2. A component's user watchers are run before its render watcher (because + // user watchers are created before the render watcher) + // 3. If a component is destroyed during a parent component's watcher run, + // its watchers can be skipped. + queue.sort(sortCompareFn); + // do not cache length because more watchers might be pushed + // as we run existing watchers + for (index$1 = 0; index$1 < queue.length; index$1++) { + watcher = queue[index$1]; + if (watcher.before) { + watcher.before(); + } + id = watcher.id; + has[id] = null; + watcher.run(); + // in dev build, check and stop circular updates. + if (has[id] != null) { + circular[id] = (circular[id] || 0) + 1; + if (circular[id] > MAX_UPDATE_COUNT) { + warn$2('You may have an infinite update loop ' + + (watcher.user + ? "in watcher with expression \"".concat(watcher.expression, "\"") + : "in a component render function."), watcher.vm); + break; + } + } + } + // keep copies of post queues before resetting state + var activatedQueue = activatedChildren.slice(); + var updatedQueue = queue.slice(); + resetSchedulerState(); + // call component updated and activated hooks + callActivatedHooks(activatedQueue); + callUpdatedHooks(updatedQueue); + // devtool hook + /* istanbul ignore if */ + if (devtools && config.devtools) { + devtools.emit('flush'); + } + } + function callUpdatedHooks(queue) { + var i = queue.length; + while (i--) { + var watcher = queue[i]; + var vm = watcher.vm; + if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { + callHook$1(vm, 'updated'); + } + } + } + /** + * Queue a kept-alive component that was activated during patch. + * The queue will be processed after the entire tree has been patched. + */ + function queueActivatedComponent(vm) { + // setting _inactive to false here so that a render function can + // rely on checking whether it's in an inactive tree (e.g. router-view) + vm._inactive = false; + activatedChildren.push(vm); + } + function callActivatedHooks(queue) { + for (var i = 0; i < queue.length; i++) { + queue[i]._inactive = true; + activateChildComponent(queue[i], true /* true */); + } + } + /** + * Push a watcher into the watcher queue. + * Jobs with duplicate IDs will be skipped unless it's + * pushed when the queue is being flushed. + */ + function queueWatcher(watcher) { + var id = watcher.id; + if (has[id] != null) { + return; + } + if (watcher === Dep.target && watcher.noRecurse) { + return; + } + has[id] = true; + if (!flushing) { + queue.push(watcher); + } + else { + // if already flushing, splice the watcher based on its id + // if already past its id, it will be run next immediately. + var i = queue.length - 1; + while (i > index$1 && queue[i].id > watcher.id) { + i--; + } + queue.splice(i + 1, 0, watcher); + } + // queue the flush + if (!waiting) { + waiting = true; + if (!config.async) { + flushSchedulerQueue(); + return; + } + nextTick(flushSchedulerQueue); + } + } + + var WATCHER = "watcher"; + var WATCHER_CB = "".concat(WATCHER, " callback"); + var WATCHER_GETTER = "".concat(WATCHER, " getter"); + var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup"); + // Simple effect. + function watchEffect(effect, options) { + return doWatch(effect, null, options); + } + function watchPostEffect(effect, options) { + return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'post' }) )); + } + function watchSyncEffect(effect, options) { + return doWatch(effect, null, (__assign(__assign({}, options), { flush: 'sync' }) )); + } + // initial value for watchers to trigger on undefined initial values + var INITIAL_WATCHER_VALUE = {}; + // implementation + function watch(source, cb, options) { + if (typeof cb !== 'function') { + warn$2("`watch(fn, options?)` signature has been moved to a separate API. " + + "Use `watchEffect(fn, options?)` instead. `watch` now only " + + "supports `watch(source, cb, options?) signature."); + } + return doWatch(source, cb, options); + } + function doWatch(source, cb, _a) { + var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger; + if (!cb) { + if (immediate !== undefined) { + warn$2("watch() \"immediate\" option is only respected when using the " + + "watch(source, callback, options?) signature."); + } + if (deep !== undefined) { + warn$2("watch() \"deep\" option is only respected when using the " + + "watch(source, callback, options?) signature."); + } + } + var warnInvalidSource = function (s) { + warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") + + "function, a ref, a reactive object, or an array of these types."); + }; + var instance = currentInstance; + var call = function (fn, type, args) { + if (args === void 0) { args = null; } + return invokeWithErrorHandling(fn, null, args, instance, type); + }; + var getter; + var forceTrigger = false; + var isMultiSource = false; + if (isRef(source)) { + getter = function () { return source.value; }; + forceTrigger = isShallow(source); + } + else if (isReactive(source)) { + getter = function () { + source.__ob__.dep.depend(); + return source; + }; + deep = true; + } + else if (isArray(source)) { + isMultiSource = true; + forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); }); + getter = function () { + return source.map(function (s) { + if (isRef(s)) { + return s.value; + } + else if (isReactive(s)) { + return traverse(s); + } + else if (isFunction(s)) { + return call(s, WATCHER_GETTER); + } + else { + warnInvalidSource(s); + } + }); + }; + } + else if (isFunction(source)) { + if (cb) { + // getter with cb + getter = function () { return call(source, WATCHER_GETTER); }; + } + else { + // no cb -> simple effect + getter = function () { + if (instance && instance._isDestroyed) { + return; + } + if (cleanup) { + cleanup(); + } + return call(source, WATCHER, [onCleanup]); + }; + } + } + else { + getter = noop; + warnInvalidSource(source); + } + if (cb && deep) { + var baseGetter_1 = getter; + getter = function () { return traverse(baseGetter_1()); }; + } + var cleanup; + var onCleanup = function (fn) { + cleanup = watcher.onStop = function () { + call(fn, WATCHER_CLEANUP); + }; + }; + // in SSR there is no need to setup an actual effect, and it should be noop + // unless it's eager + if (isServerRendering()) { + // we will also not call the invalidate callback (+ runner is not set up) + onCleanup = noop; + if (!cb) { + getter(); + } + else if (immediate) { + call(cb, WATCHER_CB, [ + getter(), + isMultiSource ? [] : undefined, + onCleanup + ]); + } + return noop; + } + var watcher = new Watcher(currentInstance, getter, noop, { + lazy: true + }); + watcher.noRecurse = !cb; + var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE; + // overwrite default run + watcher.run = function () { + if (!watcher.active && + !(flush === 'pre' && instance && instance._isBeingDestroyed)) { + return; + } + if (cb) { + // watch(source, cb) + var newValue = watcher.get(); + if (deep || + forceTrigger || + (isMultiSource + ? newValue.some(function (v, i) { + return hasChanged(v, oldValue[i]); + }) + : hasChanged(newValue, oldValue))) { + // cleanup before running cb again + if (cleanup) { + cleanup(); + } + call(cb, WATCHER_CB, [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, + onCleanup + ]); + oldValue = newValue; + } + } + else { + // watchEffect + watcher.get(); + } + }; + if (flush === 'sync') { + watcher.update = watcher.run; + } + else if (flush === 'post') { + watcher.post = true; + watcher.update = function () { return queueWatcher(watcher); }; + } + else { + // pre + watcher.update = function () { + if (instance && instance === currentInstance && !instance._isMounted) { + // pre-watcher triggered before + var buffer = instance._preWatchers || (instance._preWatchers = []); + if (buffer.indexOf(watcher) < 0) + buffer.push(watcher); + } + else { + queueWatcher(watcher); + } + }; + } + { + watcher.onTrack = onTrack; + watcher.onTrigger = onTrigger; + } + // initial run + if (cb) { + if (immediate) { + watcher.run(); + } + else { + oldValue = watcher.get(); + } + } + else if (flush === 'post' && instance) { + instance.$once('hook:mounted', function () { return watcher.get(); }); + } + else { + watcher.get(); + } + return function () { + watcher.teardown(); + }; + } + + var activeEffectScope; + var EffectScope = /** @class */ (function () { + function EffectScope(detached) { + if (detached === void 0) { detached = false; } + /** + * @internal + */ + this.active = true; + /** + * @internal + */ + this.effects = []; + /** + * @internal + */ + this.cleanups = []; + if (!detached && activeEffectScope) { + this.parent = activeEffectScope; + this.index = + (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; + } + } + EffectScope.prototype.run = function (fn) { + if (this.active) { + var currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } + finally { + activeEffectScope = currentEffectScope; + } + } + else { + warn$2("cannot run an inactive effect scope."); + } + }; + /** + * This should only be called on non-detached scopes + * @internal + */ + EffectScope.prototype.on = function () { + activeEffectScope = this; + }; + /** + * This should only be called on non-detached scopes + * @internal + */ + EffectScope.prototype.off = function () { + activeEffectScope = this.parent; + }; + EffectScope.prototype.stop = function (fromParent) { + if (this.active) { + var i = void 0, l = void 0; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].teardown(); + } + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + } + // nested scope, dereference from parent to avoid memory leaks + if (this.parent && !fromParent) { + // optimized O(1) removal + var last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.active = false; + } + }; + return EffectScope; + }()); + function effectScope(detached) { + return new EffectScope(detached); + } + /** + * @internal + */ + function recordEffectScope(effect, scope) { + if (scope === void 0) { scope = activeEffectScope; } + if (scope && scope.active) { + scope.effects.push(effect); + } + } + function getCurrentScope() { + return activeEffectScope; + } + function onScopeDispose(fn) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } + else { + warn$2("onScopeDispose() is called when there is no active effect scope" + + " to be associated with."); + } + } + + function provide(key, value) { + if (!currentInstance) { + { + warn$2("provide() can only be used inside setup()."); + } + } + else { + // TS doesn't allow symbol as index type + resolveProvided(currentInstance)[key] = value; + } + } + function resolveProvided(vm) { + // by default an instance inherits its parent's provides object + // but when it needs to provide values of its own, it creates its + // own provides object using parent provides object as prototype. + // this way in `inject` we can simply look up injections from direct + // parent and let the prototype chain do the work. + var existing = vm._provided; + var parentProvides = vm.$parent && vm.$parent._provided; + if (parentProvides === existing) { + return (vm._provided = Object.create(parentProvides)); + } + else { + return existing; + } + } + function inject(key, defaultValue, treatDefaultAsFactory) { + if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; } + // fallback to `currentRenderingInstance` so that this can be called in + // a functional component + var instance = currentInstance; + if (instance) { + // #2400 + // to support `app.use` plugins, + // fallback to appContext's `provides` if the instance is at root + var provides = instance.$parent && instance.$parent._provided; + if (provides && key in provides) { + // TS doesn't allow symbol as index type + return provides[key]; + } + else if (arguments.length > 1) { + return treatDefaultAsFactory && isFunction(defaultValue) + ? defaultValue.call(instance) + : defaultValue; + } + else { + warn$2("injection \"".concat(String(key), "\" not found.")); + } + } + else { + warn$2("inject() can only be used inside setup() or functional components."); + } + } + + /** + * @internal this function needs manual public type declaration because it relies + * on previously manually authored types from Vue 2 + */ + function h(type, props, children) { + if (!currentInstance) { + warn$2("globally imported h() can only be invoked when there is an active " + + "component instance, e.g. synchronously in a component's render or setup function."); + } + return createElement$1(currentInstance, type, props, children, 2, true); + } + + function handleError(err, vm, info) { + // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. + // See: https://github.com/vuejs/vuex/issues/1505 + pushTarget(); + try { + if (vm) { + var cur = vm; + while ((cur = cur.$parent)) { + var hooks = cur.$options.errorCaptured; + if (hooks) { + for (var i = 0; i < hooks.length; i++) { + try { + var capture = hooks[i].call(cur, err, vm, info) === false; + if (capture) + return; + } + catch (e) { + globalHandleError(e, cur, 'errorCaptured hook'); + } + } + } + } + } + globalHandleError(err, vm, info); + } + finally { + popTarget(); + } + } + function invokeWithErrorHandling(handler, context, args, vm, info) { + var res; + try { + res = args ? handler.apply(context, args) : handler.call(context); + if (res && !res._isVue && isPromise(res) && !res._handled) { + res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); }); + res._handled = true; + } + } + catch (e) { + handleError(e, vm, info); + } + return res; + } + function globalHandleError(err, vm, info) { + if (config.errorHandler) { + try { + return config.errorHandler.call(null, err, vm, info); + } + catch (e) { + // if the user intentionally throws the original error in the handler, + // do not log it twice + if (e !== err) { + logError(e, null, 'config.errorHandler'); + } + } + } + logError(err, vm, info); + } + function logError(err, vm, info) { + { + warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm); + } + /* istanbul ignore else */ + if (inBrowser && typeof console !== 'undefined') { + console.error(err); + } + else { + throw err; + } + } + + /* globals MutationObserver */ + var isUsingMicroTask = false; + var callbacks = []; + var pending = false; + function flushCallbacks() { + pending = false; + var copies = callbacks.slice(0); + callbacks.length = 0; + for (var i = 0; i < copies.length; i++) { + copies[i](); + } + } + // Here we have async deferring wrappers using microtasks. + // In 2.5 we used (macro) tasks (in combination with microtasks). + // However, it has subtle problems when state is changed right before repaint + // (e.g. #6813, out-in transitions). + // Also, using (macro) tasks in event handler would cause some weird behaviors + // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). + // So we now use microtasks everywhere, again. + // A major drawback of this tradeoff is that there are some scenarios + // where microtasks have too high a priority and fire in between supposedly + // sequential events (e.g. #4521, #6690, which have workarounds) + // or even between bubbling of the same event (#6566). + var timerFunc; + // The nextTick behavior leverages the microtask queue, which can be accessed + // via either native Promise.then or MutationObserver. + // MutationObserver has wider support, however it is seriously bugged in + // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It + // completely stops working after triggering a few times... so, if native + // Promise is available, we will use it: + /* istanbul ignore next, $flow-disable-line */ + if (typeof Promise !== 'undefined' && isNative(Promise)) { + var p_1 = Promise.resolve(); + timerFunc = function () { + p_1.then(flushCallbacks); + // In problematic UIWebViews, Promise.then doesn't completely break, but + // it can get stuck in a weird state where callbacks are pushed into the + // microtask queue but the queue isn't being flushed, until the browser + // needs to do some other work, e.g. handle a timer. Therefore we can + // "force" the microtask queue to be flushed by adding an empty timer. + if (isIOS) + setTimeout(noop); + }; + isUsingMicroTask = true; + } + else if (!isIE && + typeof MutationObserver !== 'undefined' && + (isNative(MutationObserver) || + // PhantomJS and iOS 7.x + MutationObserver.toString() === '[object MutationObserverConstructor]')) { + // Use MutationObserver where native Promise is not available, + // e.g. PhantomJS, iOS7, Android 4.4 + // (#6466 MutationObserver is unreliable in IE11) + var counter_1 = 1; + var observer = new MutationObserver(flushCallbacks); + var textNode_1 = document.createTextNode(String(counter_1)); + observer.observe(textNode_1, { + characterData: true + }); + timerFunc = function () { + counter_1 = (counter_1 + 1) % 2; + textNode_1.data = String(counter_1); + }; + isUsingMicroTask = true; + } + else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { + // Fallback to setImmediate. + // Technically it leverages the (macro) task queue, + // but it is still a better choice than setTimeout. + timerFunc = function () { + setImmediate(flushCallbacks); + }; + } + else { + // Fallback to setTimeout. + timerFunc = function () { + setTimeout(flushCallbacks, 0); + }; + } + /** + * @internal + */ + function nextTick(cb, ctx) { + var _resolve; + callbacks.push(function () { + if (cb) { + try { + cb.call(ctx); + } + catch (e) { + handleError(e, ctx, 'nextTick'); + } + } + else if (_resolve) { + _resolve(ctx); + } + }); + if (!pending) { + pending = true; + timerFunc(); + } + // $flow-disable-line + if (!cb && typeof Promise !== 'undefined') { + return new Promise(function (resolve) { + _resolve = resolve; + }); + } + } + + function useCssModule(name) { + /* istanbul ignore else */ + { + { + warn$2("useCssModule() is not supported in the global build."); + } + return emptyObject; + } + } + + /** + * Runtime helper for SFC's CSS variable injection feature. + * @private + */ + function useCssVars(getter) { + if (!inBrowser && !false) + return; + var instance = currentInstance; + if (!instance) { + warn$2("useCssVars is called without current active component instance."); + return; + } + watchPostEffect(function () { + var el = instance.$el; + var vars = getter(instance, instance._setupProxy); + if (el && el.nodeType === 1) { + var style = el.style; + for (var key in vars) { + style.setProperty("--".concat(key), vars[key]); + } + } + }); + } + + /** + * v3-compatible async component API. + * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts + * because it relies on existing manual types + */ + function defineAsyncComponent(source) { + if (isFunction(source)) { + source = { loader: source }; + } + var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out + _b = source.suspensible, // undefined = never times out + suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true + userOnError = source.onError; + if (suspensible) { + warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored."); + } + var pendingRequest = null; + var retries = 0; + var retry = function () { + retries++; + pendingRequest = null; + return load(); + }; + var load = function () { + var thisRequest; + return (pendingRequest || + (thisRequest = pendingRequest = + loader() + .catch(function (err) { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise(function (resolve, reject) { + var userRetry = function () { return resolve(retry()); }; + var userFail = function () { return reject(err); }; + userOnError(err, userRetry, userFail, retries + 1); + }); + } + else { + throw err; + } + }) + .then(function (comp) { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (!comp) { + warn$2("Async component loader resolved to undefined. " + + "If you are using retry(), make sure to return its return value."); + } + // interop module default + if (comp && + (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { + comp = comp.default; + } + if (comp && !isObject(comp) && !isFunction(comp)) { + throw new Error("Invalid async component load result: ".concat(comp)); + } + return comp; + }))); + }; + return function () { + var component = load(); + return { + component: component, + delay: delay, + timeout: timeout, + error: errorComponent, + loading: loadingComponent + }; + }; + } + + function createLifeCycle(hookName) { + return function (fn, target) { + if (target === void 0) { target = currentInstance; } + if (!target) { + warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") + + "associated with. " + + "Lifecycle injection APIs can only be used during execution of setup()."); + return; + } + return injectHook(target, hookName, fn); + }; + } + function formatName(name) { + if (name === 'beforeDestroy') { + name = 'beforeUnmount'; + } + else if (name === 'destroyed') { + name = 'unmounted'; + } + return "on".concat(name[0].toUpperCase() + name.slice(1)); + } + function injectHook(instance, hookName, fn) { + var options = instance.$options; + options[hookName] = mergeLifecycleHook(options[hookName], fn); + } + var onBeforeMount = createLifeCycle('beforeMount'); + var onMounted = createLifeCycle('mounted'); + var onBeforeUpdate = createLifeCycle('beforeUpdate'); + var onUpdated = createLifeCycle('updated'); + var onBeforeUnmount = createLifeCycle('beforeDestroy'); + var onUnmounted = createLifeCycle('destroyed'); + var onErrorCaptured = createLifeCycle('errorCaptured'); + var onActivated = createLifeCycle('activated'); + var onDeactivated = createLifeCycle('deactivated'); + var onServerPrefetch = createLifeCycle('serverPrefetch'); + var onRenderTracked = createLifeCycle('renderTracked'); + var onRenderTriggered = createLifeCycle('renderTriggered'); + + /** + * Note: also update dist/vue.runtime.mjs when adding new exports to this file. + */ + var version = '2.7.8'; + /** + * @internal type is manually declared in <root>/types/v3-define-component.d.ts + */ + function defineComponent(options) { + return options; + } + + var vca = /*#__PURE__*/Object.freeze({ + __proto__: null, + version: version, + defineComponent: defineComponent, + ref: ref$1, + shallowRef: shallowRef, + isRef: isRef, + toRef: toRef, + toRefs: toRefs, + unref: unref, + proxyRefs: proxyRefs, + customRef: customRef, + triggerRef: triggerRef, + reactive: reactive, + isReactive: isReactive, + isReadonly: isReadonly, + isShallow: isShallow, + isProxy: isProxy, + shallowReactive: shallowReactive, + markRaw: markRaw, + toRaw: toRaw, + readonly: readonly, + shallowReadonly: shallowReadonly, + computed: computed, + watch: watch, + watchEffect: watchEffect, + watchPostEffect: watchPostEffect, + watchSyncEffect: watchSyncEffect, + EffectScope: EffectScope, + effectScope: effectScope, + onScopeDispose: onScopeDispose, + getCurrentScope: getCurrentScope, + provide: provide, + inject: inject, + h: h, + getCurrentInstance: getCurrentInstance, + useSlots: useSlots, + useAttrs: useAttrs, + useListeners: useListeners, + mergeDefaults: mergeDefaults, + nextTick: nextTick, + set: set, + del: del, + useCssModule: useCssModule, + useCssVars: useCssVars, + defineAsyncComponent: defineAsyncComponent, + onBeforeMount: onBeforeMount, + onMounted: onMounted, + onBeforeUpdate: onBeforeUpdate, + onUpdated: onUpdated, + onBeforeUnmount: onBeforeUnmount, + onUnmounted: onUnmounted, + onErrorCaptured: onErrorCaptured, + onActivated: onActivated, + onDeactivated: onDeactivated, + onServerPrefetch: onServerPrefetch, + onRenderTracked: onRenderTracked, + onRenderTriggered: onRenderTriggered + }); + + var seenObjects = new _Set(); + /** + * Recursively traverse an object to evoke all converted + * getters, so that every nested property inside the object + * is collected as a "deep" dependency. + */ + function traverse(val) { + _traverse(val, seenObjects); + seenObjects.clear(); + return val; + } + function _traverse(val, seen) { + var i, keys; + var isA = isArray(val); + if ((!isA && !isObject(val)) || + Object.isFrozen(val) || + val instanceof VNode) { + return; + } + if (val.__ob__) { + var depId = val.__ob__.dep.id; + if (seen.has(depId)) { + return; + } + seen.add(depId); + } + if (isA) { + i = val.length; + while (i--) + _traverse(val[i], seen); + } + else if (isRef(val)) { + _traverse(val.value, seen); + } + else { + keys = Object.keys(val); + i = keys.length; + while (i--) + _traverse(val[keys[i]], seen); + } + } + + var uid$1 = 0; + /** + * A watcher parses an expression, collects dependencies, + * and fires callback when the expression value changes. + * This is used for both the $watch() api and directives. + * @internal + */ + var Watcher = /** @class */ (function () { + function Watcher(vm, expOrFn, cb, options, isRenderWatcher) { + recordEffectScope(this, activeEffectScope || (vm ? vm._scope : undefined)); + if ((this.vm = vm)) { + if (isRenderWatcher) { + vm._watcher = this; + } + } + // options + if (options) { + this.deep = !!options.deep; + this.user = !!options.user; + this.lazy = !!options.lazy; + this.sync = !!options.sync; + this.before = options.before; + { + this.onTrack = options.onTrack; + this.onTrigger = options.onTrigger; + } + } + else { + this.deep = this.user = this.lazy = this.sync = false; + } + this.cb = cb; + this.id = ++uid$1; // uid for batching + this.active = true; + this.post = false; + this.dirty = this.lazy; // for lazy watchers + this.deps = []; + this.newDeps = []; + this.depIds = new _Set(); + this.newDepIds = new _Set(); + this.expression = expOrFn.toString() ; + // parse expression for getter + if (isFunction(expOrFn)) { + this.getter = expOrFn; + } + else { + this.getter = parsePath(expOrFn); + if (!this.getter) { + this.getter = noop; + warn$2("Failed watching path: \"".concat(expOrFn, "\" ") + + 'Watcher only accepts simple dot-delimited paths. ' + + 'For full control, use a function instead.', vm); + } + } + this.value = this.lazy ? undefined : this.get(); + } + /** + * Evaluate the getter, and re-collect dependencies. + */ + Watcher.prototype.get = function () { + pushTarget(this); + var value; + var vm = this.vm; + try { + value = this.getter.call(vm, vm); + } + catch (e) { + if (this.user) { + handleError(e, vm, "getter for watcher \"".concat(this.expression, "\"")); + } + else { + throw e; + } + } + finally { + // "touch" every property so they are all tracked as + // dependencies for deep watching + if (this.deep) { + traverse(value); + } + popTarget(); + this.cleanupDeps(); + } + return value; + }; + /** + * Add a dependency to this directive. + */ + Watcher.prototype.addDep = function (dep) { + var id = dep.id; + if (!this.newDepIds.has(id)) { + this.newDepIds.add(id); + this.newDeps.push(dep); + if (!this.depIds.has(id)) { + dep.addSub(this); + } + } + }; + /** + * Clean up for dependency collection. + */ + Watcher.prototype.cleanupDeps = function () { + var i = this.deps.length; + while (i--) { + var dep = this.deps[i]; + if (!this.newDepIds.has(dep.id)) { + dep.removeSub(this); + } + } + var tmp = this.depIds; + this.depIds = this.newDepIds; + this.newDepIds = tmp; + this.newDepIds.clear(); + tmp = this.deps; + this.deps = this.newDeps; + this.newDeps = tmp; + this.newDeps.length = 0; + }; + /** + * Subscriber interface. + * Will be called when a dependency changes. + */ + Watcher.prototype.update = function () { + /* istanbul ignore else */ + if (this.lazy) { + this.dirty = true; + } + else if (this.sync) { + this.run(); + } + else { + queueWatcher(this); + } + }; + /** + * Scheduler job interface. + * Will be called by the scheduler. + */ + Watcher.prototype.run = function () { + if (this.active) { + var value = this.get(); + if (value !== this.value || + // Deep watchers and watchers on Object/Arrays should fire even + // when the value is the same, because the value may + // have mutated. + isObject(value) || + this.deep) { + // set new value + var oldValue = this.value; + this.value = value; + if (this.user) { + var info = "callback for watcher \"".concat(this.expression, "\""); + invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info); + } + else { + this.cb.call(this.vm, value, oldValue); + } + } + } + }; + /** + * Evaluate the value of the watcher. + * This only gets called for lazy watchers. + */ + Watcher.prototype.evaluate = function () { + this.value = this.get(); + this.dirty = false; + }; + /** + * Depend on all deps collected by this watcher. + */ + Watcher.prototype.depend = function () { + var i = this.deps.length; + while (i--) { + this.deps[i].depend(); + } + }; + /** + * Remove self from all dependencies' subscriber list. + */ + Watcher.prototype.teardown = function () { + if (this.vm && !this.vm._isBeingDestroyed) { + remove$2(this.vm._scope.effects, this); + } + if (this.active) { + var i = this.deps.length; + while (i--) { + this.deps[i].removeSub(this); + } + this.active = false; + if (this.onStop) { + this.onStop(); + } + } + }; + return Watcher; + }()); + + var sharedPropertyDefinition = { + enumerable: true, + configurable: true, + get: noop, + set: noop + }; + function proxy(target, sourceKey, key) { + sharedPropertyDefinition.get = function proxyGetter() { + return this[sourceKey][key]; + }; + sharedPropertyDefinition.set = function proxySetter(val) { + this[sourceKey][key] = val; + }; + Object.defineProperty(target, key, sharedPropertyDefinition); + } + function initState(vm) { + var opts = vm.$options; + if (opts.props) + initProps$1(vm, opts.props); + // Composition API + initSetup(vm); + if (opts.methods) + initMethods(vm, opts.methods); + if (opts.data) { + initData(vm); + } + else { + var ob = observe((vm._data = {})); + ob && ob.vmCount++; + } + if (opts.computed) + initComputed$1(vm, opts.computed); + if (opts.watch && opts.watch !== nativeWatch) { + initWatch(vm, opts.watch); + } + } + function initProps$1(vm, propsOptions) { + var propsData = vm.$options.propsData || {}; + var props = (vm._props = shallowReactive({})); + // cache prop keys so that future props updates can iterate using Array + // instead of dynamic object key enumeration. + var keys = (vm.$options._propKeys = []); + var isRoot = !vm.$parent; + // root instance props should be converted + if (!isRoot) { + toggleObserving(false); + } + var _loop_1 = function (key) { + keys.push(key); + var value = validateProp(key, propsOptions, propsData, vm); + /* istanbul ignore else */ + { + var hyphenatedKey = hyphenate(key); + if (isReservedAttribute(hyphenatedKey) || + config.isReservedAttr(hyphenatedKey)) { + warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm); + } + defineReactive(props, key, value, function () { + if (!isRoot && !isUpdatingChildComponent) { + warn$2("Avoid mutating a prop directly since the value will be " + + "overwritten whenever the parent component re-renders. " + + "Instead, use a data or computed property based on the prop's " + + "value. Prop being mutated: \"".concat(key, "\""), vm); + } + }); + } + // static props are already proxied on the component's prototype + // during Vue.extend(). We only need to proxy props defined at + // instantiation here. + if (!(key in vm)) { + proxy(vm, "_props", key); + } + }; + for (var key in propsOptions) { + _loop_1(key); + } + toggleObserving(true); + } + function initData(vm) { + var data = vm.$options.data; + data = vm._data = isFunction(data) ? getData(data, vm) : data || {}; + if (!isPlainObject(data)) { + data = {}; + warn$2('data functions should return an object:\n' + + 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm); + } + // proxy data on instance + var keys = Object.keys(data); + var props = vm.$options.props; + var methods = vm.$options.methods; + var i = keys.length; + while (i--) { + var key = keys[i]; + { + if (methods && hasOwn(methods, key)) { + warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm); + } + } + if (props && hasOwn(props, key)) { + warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") + + "Use prop default value instead.", vm); + } + else if (!isReserved(key)) { + proxy(vm, "_data", key); + } + } + // observe data + var ob = observe(data); + ob && ob.vmCount++; + } + function getData(data, vm) { + // #7573 disable dep collection when invoking data getters + pushTarget(); + try { + return data.call(vm, vm); + } + catch (e) { + handleError(e, vm, "data()"); + return {}; + } + finally { + popTarget(); + } + } + var computedWatcherOptions = { lazy: true }; + function initComputed$1(vm, computed) { + // $flow-disable-line + var watchers = (vm._computedWatchers = Object.create(null)); + // computed properties are just getters during SSR + var isSSR = isServerRendering(); + for (var key in computed) { + var userDef = computed[key]; + var getter = isFunction(userDef) ? userDef : userDef.get; + if (getter == null) { + warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm); + } + if (!isSSR) { + // create internal watcher for the computed property. + watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions); + } + // component-defined computed properties are already defined on the + // component prototype. We only need to define computed properties defined + // at instantiation here. + if (!(key in vm)) { + defineComputed(vm, key, userDef); + } + else { + if (key in vm.$data) { + warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm); + } + else if (vm.$options.props && key in vm.$options.props) { + warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm); + } + else if (vm.$options.methods && key in vm.$options.methods) { + warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm); + } + } + } + } + function defineComputed(target, key, userDef) { + var shouldCache = !isServerRendering(); + if (isFunction(userDef)) { + sharedPropertyDefinition.get = shouldCache + ? createComputedGetter(key) + : createGetterInvoker(userDef); + sharedPropertyDefinition.set = noop; + } + else { + sharedPropertyDefinition.get = userDef.get + ? shouldCache && userDef.cache !== false + ? createComputedGetter(key) + : createGetterInvoker(userDef.get) + : noop; + sharedPropertyDefinition.set = userDef.set || noop; + } + if (sharedPropertyDefinition.set === noop) { + sharedPropertyDefinition.set = function () { + warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this); + }; + } + Object.defineProperty(target, key, sharedPropertyDefinition); + } + function createComputedGetter(key) { + return function computedGetter() { + var watcher = this._computedWatchers && this._computedWatchers[key]; + if (watcher) { + if (watcher.dirty) { + watcher.evaluate(); + } + if (Dep.target) { + if (Dep.target.onTrack) { + Dep.target.onTrack({ + effect: Dep.target, + target: this, + type: "get" /* TrackOpTypes.GET */, + key: key + }); + } + watcher.depend(); + } + return watcher.value; + } + }; + } + function createGetterInvoker(fn) { + return function computedGetter() { + return fn.call(this, this); + }; + } + function initMethods(vm, methods) { + var props = vm.$options.props; + for (var key in methods) { + { + if (typeof methods[key] !== 'function') { + warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") + + "Did you reference the function correctly?", vm); + } + if (props && hasOwn(props, key)) { + warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm); + } + if (key in vm && isReserved(key)) { + warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") + + "Avoid defining component methods that start with _ or $."); + } + } + vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm); + } + } + function initWatch(vm, watch) { + for (var key in watch) { + var handler = watch[key]; + if (isArray(handler)) { + for (var i = 0; i < handler.length; i++) { + createWatcher(vm, key, handler[i]); + } + } + else { + createWatcher(vm, key, handler); + } + } + } + function createWatcher(vm, expOrFn, handler, options) { + if (isPlainObject(handler)) { + options = handler; + handler = handler.handler; + } + if (typeof handler === 'string') { + handler = vm[handler]; + } + return vm.$watch(expOrFn, handler, options); + } + function stateMixin(Vue) { + // flow somehow has problems with directly declared definition object + // when using Object.defineProperty, so we have to procedurally build up + // the object here. + var dataDef = {}; + dataDef.get = function () { + return this._data; + }; + var propsDef = {}; + propsDef.get = function () { + return this._props; + }; + { + dataDef.set = function () { + warn$2('Avoid replacing instance root $data. ' + + 'Use nested data properties instead.', this); + }; + propsDef.set = function () { + warn$2("$props is readonly.", this); + }; + } + Object.defineProperty(Vue.prototype, '$data', dataDef); + Object.defineProperty(Vue.prototype, '$props', propsDef); + Vue.prototype.$set = set; + Vue.prototype.$delete = del; + Vue.prototype.$watch = function (expOrFn, cb, options) { + var vm = this; + if (isPlainObject(cb)) { + return createWatcher(vm, expOrFn, cb, options); + } + options = options || {}; + options.user = true; + var watcher = new Watcher(vm, expOrFn, cb, options); + if (options.immediate) { + var info = "callback for immediate watcher \"".concat(watcher.expression, "\""); + pushTarget(); + invokeWithErrorHandling(cb, vm, [watcher.value], vm, info); + popTarget(); + } + return function unwatchFn() { + watcher.teardown(); + }; + }; + } + + function initProvide(vm) { + var provideOption = vm.$options.provide; + if (provideOption) { + var provided = isFunction(provideOption) + ? provideOption.call(vm) + : provideOption; + if (!isObject(provided)) { + return; + } + var source = resolveProvided(vm); + // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to + // iterate the keys ourselves. + var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key)); + } + } + } + function initInjections(vm) { + var result = resolveInject(vm.$options.inject, vm); + if (result) { + toggleObserving(false); + Object.keys(result).forEach(function (key) { + /* istanbul ignore else */ + { + defineReactive(vm, key, result[key], function () { + warn$2("Avoid mutating an injected value directly since the changes will be " + + "overwritten whenever the provided component re-renders. " + + "injection being mutated: \"".concat(key, "\""), vm); + }); + } + }); + toggleObserving(true); + } + } + function resolveInject(inject, vm) { + if (inject) { + // inject is :any because flow is not smart enough to figure out cached + var result = Object.create(null); + var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + // #6574 in case the inject object is observed... + if (key === '__ob__') + continue; + var provideKey = inject[key].from; + if (provideKey in vm._provided) { + result[key] = vm._provided[provideKey]; + } + else if ('default' in inject[key]) { + var provideDefault = inject[key].default; + result[key] = isFunction(provideDefault) + ? provideDefault.call(vm) + : provideDefault; + } + else { + warn$2("Injection \"".concat(key, "\" not found"), vm); + } + } + return result; + } + } + + var uid = 0; + function initMixin$1(Vue) { + Vue.prototype._init = function (options) { + var vm = this; + // a uid + vm._uid = uid++; + var startTag, endTag; + /* istanbul ignore if */ + if (config.performance && mark) { + startTag = "vue-perf-start:".concat(vm._uid); + endTag = "vue-perf-end:".concat(vm._uid); + mark(startTag); + } + // a flag to mark this as a Vue instance without having to do instanceof + // check + vm._isVue = true; + // avoid instances from being observed + vm.__v_skip = true; + // effect scope + vm._scope = new EffectScope(true /* detached */); + // merge options + if (options && options._isComponent) { + // optimize internal component instantiation + // since dynamic options merging is pretty slow, and none of the + // internal component options needs special treatment. + initInternalComponent(vm, options); + } + else { + vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm); + } + /* istanbul ignore else */ + { + initProxy(vm); + } + // expose real self + vm._self = vm; + initLifecycle(vm); + initEvents(vm); + initRender(vm); + callHook$1(vm, 'beforeCreate', undefined, false /* setContext */); + initInjections(vm); // resolve injections before data/props + initState(vm); + initProvide(vm); // resolve provide after data/props + callHook$1(vm, 'created'); + /* istanbul ignore if */ + if (config.performance && mark) { + vm._name = formatComponentName(vm, false); + mark(endTag); + measure("vue ".concat(vm._name, " init"), startTag, endTag); + } + if (vm.$options.el) { + vm.$mount(vm.$options.el); + } + }; + } + function initInternalComponent(vm, options) { + var opts = (vm.$options = Object.create(vm.constructor.options)); + // doing this because it's faster than dynamic enumeration. + var parentVnode = options._parentVnode; + opts.parent = options.parent; + opts._parentVnode = parentVnode; + var vnodeComponentOptions = parentVnode.componentOptions; + opts.propsData = vnodeComponentOptions.propsData; + opts._parentListeners = vnodeComponentOptions.listeners; + opts._renderChildren = vnodeComponentOptions.children; + opts._componentTag = vnodeComponentOptions.tag; + if (options.render) { + opts.render = options.render; + opts.staticRenderFns = options.staticRenderFns; + } + } + function resolveConstructorOptions(Ctor) { + var options = Ctor.options; + if (Ctor.super) { + var superOptions = resolveConstructorOptions(Ctor.super); + var cachedSuperOptions = Ctor.superOptions; + if (superOptions !== cachedSuperOptions) { + // super option changed, + // need to resolve new options. + Ctor.superOptions = superOptions; + // check if there are any late-modified/attached options (#4976) + var modifiedOptions = resolveModifiedOptions(Ctor); + // update base extend options + if (modifiedOptions) { + extend(Ctor.extendOptions, modifiedOptions); + } + options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); + if (options.name) { + options.components[options.name] = Ctor; + } + } + } + return options; + } + function resolveModifiedOptions(Ctor) { + var modified; + var latest = Ctor.options; + var sealed = Ctor.sealedOptions; + for (var key in latest) { + if (latest[key] !== sealed[key]) { + if (!modified) + modified = {}; + modified[key] = latest[key]; + } + } + return modified; + } + + function FunctionalRenderContext(data, props, children, parent, Ctor) { + var _this = this; + var options = Ctor.options; + // ensure the createElement function in functional components + // gets a unique context - this is necessary for correct named slot check + var contextVm; + if (hasOwn(parent, '_uid')) { + contextVm = Object.create(parent); + contextVm._original = parent; + } + else { + // the context vm passed in is a functional context as well. + // in this case we want to make sure we are able to get a hold to the + // real context instance. + contextVm = parent; + // @ts-ignore + parent = parent._original; + } + var isCompiled = isTrue(options._compiled); + var needNormalization = !isCompiled; + this.data = data; + this.props = props; + this.children = children; + this.parent = parent; + this.listeners = data.on || emptyObject; + this.injections = resolveInject(options.inject, parent); + this.slots = function () { + if (!_this.$slots) { + normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent))); + } + return _this.$slots; + }; + Object.defineProperty(this, 'scopedSlots', { + enumerable: true, + get: function () { + return normalizeScopedSlots(parent, data.scopedSlots, this.slots()); + } + }); + // support for compiled functional template + if (isCompiled) { + // exposing $options for renderStatic() + this.$options = options; + // pre-resolve slots for renderSlot() + this.$slots = this.slots(); + this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots); + } + if (options._scopeId) { + this._c = function (a, b, c, d) { + var vnode = createElement$1(contextVm, a, b, c, d, needNormalization); + if (vnode && !isArray(vnode)) { + vnode.fnScopeId = options._scopeId; + vnode.fnContext = parent; + } + return vnode; + }; + } + else { + this._c = function (a, b, c, d) { + return createElement$1(contextVm, a, b, c, d, needNormalization); + }; + } + } + installRenderHelpers(FunctionalRenderContext.prototype); + function createFunctionalComponent(Ctor, propsData, data, contextVm, children) { + var options = Ctor.options; + var props = {}; + var propOptions = options.props; + if (isDef(propOptions)) { + for (var key in propOptions) { + props[key] = validateProp(key, propOptions, propsData || emptyObject); + } + } + else { + if (isDef(data.attrs)) + mergeProps(props, data.attrs); + if (isDef(data.props)) + mergeProps(props, data.props); + } + var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor); + var vnode = options.render.call(null, renderContext._c, renderContext); + if (vnode instanceof VNode) { + return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); + } + else if (isArray(vnode)) { + var vnodes = normalizeChildren(vnode) || []; + var res = new Array(vnodes.length); + for (var i = 0; i < vnodes.length; i++) { + res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); + } + return res; + } + } + function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { + // #7817 clone node before setting fnContext, otherwise if the node is reused + // (e.g. it was from a cached normal slot) the fnContext causes named slots + // that should not be matched to match. + var clone = cloneVNode(vnode); + clone.fnContext = contextVm; + clone.fnOptions = options; + { + (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = + renderContext; + } + if (data.slot) { + (clone.data || (clone.data = {})).slot = data.slot; + } + return clone; + } + function mergeProps(to, from) { + for (var key in from) { + to[camelize(key)] = from[key]; + } + } + + function getComponentName(options) { + return options.name || options.__name || options._componentTag; + } + // inline hooks to be invoked on component VNodes during patch + var componentVNodeHooks = { + init: function (vnode, hydrating) { + if (vnode.componentInstance && + !vnode.componentInstance._isDestroyed && + vnode.data.keepAlive) { + // kept-alive components, treat as a patch + var mountedNode = vnode; // work around flow + componentVNodeHooks.prepatch(mountedNode, mountedNode); + } + else { + var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance)); + child.$mount(hydrating ? vnode.elm : undefined, hydrating); + } + }, + prepatch: function (oldVnode, vnode) { + var options = vnode.componentOptions; + var child = (vnode.componentInstance = oldVnode.componentInstance); + updateChildComponent(child, options.propsData, // updated props + options.listeners, // updated listeners + vnode, // new parent vnode + options.children // new children + ); + }, + insert: function (vnode) { + var context = vnode.context, componentInstance = vnode.componentInstance; + if (!componentInstance._isMounted) { + componentInstance._isMounted = true; + callHook$1(componentInstance, 'mounted'); + } + if (vnode.data.keepAlive) { + if (context._isMounted) { + // vue-router#1212 + // During updates, a kept-alive component's child components may + // change, so directly walking the tree here may call activated hooks + // on incorrect children. Instead we push them into a queue which will + // be processed after the whole patch process ended. + queueActivatedComponent(componentInstance); + } + else { + activateChildComponent(componentInstance, true /* direct */); + } + } + }, + destroy: function (vnode) { + var componentInstance = vnode.componentInstance; + if (!componentInstance._isDestroyed) { + if (!vnode.data.keepAlive) { + componentInstance.$destroy(); + } + else { + deactivateChildComponent(componentInstance, true /* direct */); + } + } + } + }; + var hooksToMerge = Object.keys(componentVNodeHooks); + function createComponent(Ctor, data, context, children, tag) { + if (isUndef(Ctor)) { + return; + } + var baseCtor = context.$options._base; + // plain options object: turn it into a constructor + if (isObject(Ctor)) { + Ctor = baseCtor.extend(Ctor); + } + // if at this stage it's not a constructor or an async component factory, + // reject. + if (typeof Ctor !== 'function') { + { + warn$2("Invalid Component definition: ".concat(String(Ctor)), context); + } + return; + } + // async component + var asyncFactory; + // @ts-expect-error + if (isUndef(Ctor.cid)) { + asyncFactory = Ctor; + Ctor = resolveAsyncComponent(asyncFactory, baseCtor); + if (Ctor === undefined) { + // return a placeholder node for async component, which is rendered + // as a comment node but preserves all the raw information for the node. + // the information will be used for async server-rendering and hydration. + return createAsyncPlaceholder(asyncFactory, data, context, children, tag); + } + } + data = data || {}; + // resolve constructor options in case global mixins are applied after + // component constructor creation + resolveConstructorOptions(Ctor); + // transform component v-model data into props & events + if (isDef(data.model)) { + // @ts-expect-error + transformModel(Ctor.options, data); + } + // extract props + // @ts-expect-error + var propsData = extractPropsFromVNodeData(data, Ctor, tag); + // functional component + // @ts-expect-error + if (isTrue(Ctor.options.functional)) { + return createFunctionalComponent(Ctor, propsData, data, context, children); + } + // extract listeners, since these needs to be treated as + // child component listeners instead of DOM listeners + var listeners = data.on; + // replace with listeners with .native modifier + // so it gets processed during parent component patch. + data.on = data.nativeOn; + // @ts-expect-error + if (isTrue(Ctor.options.abstract)) { + // abstract components do not keep anything + // other than props & listeners & slot + // work around flow + var slot = data.slot; + data = {}; + if (slot) { + data.slot = slot; + } + } + // install component management hooks onto the placeholder node + installComponentHooks(data); + // return a placeholder vnode + // @ts-expect-error + var name = getComponentName(Ctor.options) || tag; + var vnode = new VNode( + // @ts-expect-error + "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, + // @ts-expect-error + { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory); + return vnode; + } + function createComponentInstanceForVnode( + // we know it's MountedComponentVNode but flow doesn't + vnode, + // activeInstance in lifecycle state + parent) { + var options = { + _isComponent: true, + _parentVnode: vnode, + parent: parent + }; + // check inline-template render functions + var inlineTemplate = vnode.data.inlineTemplate; + if (isDef(inlineTemplate)) { + options.render = inlineTemplate.render; + options.staticRenderFns = inlineTemplate.staticRenderFns; + } + return new vnode.componentOptions.Ctor(options); + } + function installComponentHooks(data) { + var hooks = data.hook || (data.hook = {}); + for (var i = 0; i < hooksToMerge.length; i++) { + var key = hooksToMerge[i]; + var existing = hooks[key]; + var toMerge = componentVNodeHooks[key]; + // @ts-expect-error + if (existing !== toMerge && !(existing && existing._merged)) { + hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge; + } + } + } + function mergeHook(f1, f2) { + var merged = function (a, b) { + // flow complains about extra args which is why we use any + f1(a, b); + f2(a, b); + }; + merged._merged = true; + return merged; + } + // transform component v-model info (value and callback) into + // prop and event handler respectively. + function transformModel(options, data) { + var prop = (options.model && options.model.prop) || 'value'; + var event = (options.model && options.model.event) || 'input'; + (data.attrs || (data.attrs = {}))[prop] = data.model.value; + var on = data.on || (data.on = {}); + var existing = on[event]; + var callback = data.model.callback; + if (isDef(existing)) { + if (isArray(existing) + ? existing.indexOf(callback) === -1 + : existing !== callback) { + on[event] = [callback].concat(existing); + } + } + else { + on[event] = callback; + } + } + + var warn$2 = noop; + var tip = noop; + var generateComponentTrace; // work around flow check + var formatComponentName; + { + var hasConsole_1 = typeof console !== 'undefined'; + var classifyRE_1 = /(?:^|[-_])(\w)/g; + var classify_1 = function (str) { + return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, ''); + }; + warn$2 = function (msg, vm) { + if (vm === void 0) { vm = currentInstance; } + var trace = vm ? generateComponentTrace(vm) : ''; + if (config.warnHandler) { + config.warnHandler.call(null, msg, vm, trace); + } + else if (hasConsole_1 && !config.silent) { + console.error("[Vue warn]: ".concat(msg).concat(trace)); + } + }; + tip = function (msg, vm) { + if (hasConsole_1 && !config.silent) { + console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : '')); + } + }; + formatComponentName = function (vm, includeFile) { + if (vm.$root === vm) { + return '<Root>'; + } + var options = isFunction(vm) && vm.cid != null + ? vm.options + : vm._isVue + ? vm.$options || vm.constructor.options + : vm; + var name = getComponentName(options); + var file = options.__file; + if (!name && file) { + var match = file.match(/([^/\\]+)\.vue$/); + name = match && match[1]; + } + return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") + + (file && includeFile !== false ? " at ".concat(file) : '')); + }; + var repeat_1 = function (str, n) { + var res = ''; + while (n) { + if (n % 2 === 1) + res += str; + if (n > 1) + str += str; + n >>= 1; + } + return res; + }; + generateComponentTrace = function (vm) { + if (vm._isVue && vm.$parent) { + var tree = []; + var currentRecursiveSequence = 0; + while (vm) { + if (tree.length > 0) { + var last = tree[tree.length - 1]; + if (last.constructor === vm.constructor) { + currentRecursiveSequence++; + vm = vm.$parent; + continue; + } + else if (currentRecursiveSequence > 0) { + tree[tree.length - 1] = [last, currentRecursiveSequence]; + currentRecursiveSequence = 0; + } + } + tree.push(vm); + vm = vm.$parent; + } + return ('\n\nfound in\n\n' + + tree + .map(function (vm, i) { + return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm) + ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)") + : formatComponentName(vm)); + }) + .join('\n')); + } + else { + return "\n\n(found in ".concat(formatComponentName(vm), ")"); + } + }; + } + + /** + * Option overwriting strategies are functions that handle + * how to merge a parent option value and a child option + * value into the final value. + */ + var strats = config.optionMergeStrategies; + /** + * Options with restrictions + */ + { + strats.el = strats.propsData = function (parent, child, vm, key) { + if (!vm) { + warn$2("option \"".concat(key, "\" can only be used during instance ") + + 'creation with the `new` keyword.'); + } + return defaultStrat(parent, child); + }; + } + /** + * Helper that recursively merges two data objects together. + */ + function mergeData(to, from) { + if (!from) + return to; + var key, toVal, fromVal; + var keys = hasSymbol + ? Reflect.ownKeys(from) + : Object.keys(from); + for (var i = 0; i < keys.length; i++) { + key = keys[i]; + // in case the object is already observed... + if (key === '__ob__') + continue; + toVal = to[key]; + fromVal = from[key]; + if (!hasOwn(to, key)) { + set(to, key, fromVal); + } + else if (toVal !== fromVal && + isPlainObject(toVal) && + isPlainObject(fromVal)) { + mergeData(toVal, fromVal); + } + } + return to; + } + /** + * Data + */ + function mergeDataOrFn(parentVal, childVal, vm) { + if (!vm) { + // in a Vue.extend merge, both should be functions + if (!childVal) { + return parentVal; + } + if (!parentVal) { + return childVal; + } + // when parentVal & childVal are both present, + // we need to return a function that returns the + // merged result of both functions... no need to + // check if parentVal is a function here because + // it has to be a function to pass previous merges. + return function mergedDataFn() { + return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal); + }; + } + else { + return function mergedInstanceDataFn() { + // instance merge + var instanceData = isFunction(childVal) + ? childVal.call(vm, vm) + : childVal; + var defaultData = isFunction(parentVal) + ? parentVal.call(vm, vm) + : parentVal; + if (instanceData) { + return mergeData(instanceData, defaultData); + } + else { + return defaultData; + } + }; + } + } + strats.data = function (parentVal, childVal, vm) { + if (!vm) { + if (childVal && typeof childVal !== 'function') { + warn$2('The "data" option should be a function ' + + 'that returns a per-instance value in component ' + + 'definitions.', vm); + return parentVal; + } + return mergeDataOrFn(parentVal, childVal); + } + return mergeDataOrFn(parentVal, childVal, vm); + }; + /** + * Hooks and props are merged as arrays. + */ + function mergeLifecycleHook(parentVal, childVal) { + var res = childVal + ? parentVal + ? parentVal.concat(childVal) + : isArray(childVal) + ? childVal + : [childVal] + : parentVal; + return res ? dedupeHooks(res) : res; + } + function dedupeHooks(hooks) { + var res = []; + for (var i = 0; i < hooks.length; i++) { + if (res.indexOf(hooks[i]) === -1) { + res.push(hooks[i]); + } + } + return res; + } + LIFECYCLE_HOOKS.forEach(function (hook) { + strats[hook] = mergeLifecycleHook; + }); + /** + * Assets + * + * When a vm is present (instance creation), we need to do + * a three-way merge between constructor options, instance + * options and parent options. + */ + function mergeAssets(parentVal, childVal, vm, key) { + var res = Object.create(parentVal || null); + if (childVal) { + assertObjectType(key, childVal, vm); + return extend(res, childVal); + } + else { + return res; + } + } + ASSET_TYPES.forEach(function (type) { + strats[type + 's'] = mergeAssets; + }); + /** + * Watchers. + * + * Watchers hashes should not overwrite one + * another, so we merge them as arrays. + */ + strats.watch = function (parentVal, childVal, vm, key) { + // work around Firefox's Object.prototype.watch... + //@ts-expect-error work around + if (parentVal === nativeWatch) + parentVal = undefined; + //@ts-expect-error work around + if (childVal === nativeWatch) + childVal = undefined; + /* istanbul ignore if */ + if (!childVal) + return Object.create(parentVal || null); + { + assertObjectType(key, childVal, vm); + } + if (!parentVal) + return childVal; + var ret = {}; + extend(ret, parentVal); + for (var key_1 in childVal) { + var parent_1 = ret[key_1]; + var child = childVal[key_1]; + if (parent_1 && !isArray(parent_1)) { + parent_1 = [parent_1]; + } + ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child]; + } + return ret; + }; + /** + * Other object hashes. + */ + strats.props = + strats.methods = + strats.inject = + strats.computed = + function (parentVal, childVal, vm, key) { + if (childVal && true) { + assertObjectType(key, childVal, vm); + } + if (!parentVal) + return childVal; + var ret = Object.create(null); + extend(ret, parentVal); + if (childVal) + extend(ret, childVal); + return ret; + }; + strats.provide = mergeDataOrFn; + /** + * Default strategy. + */ + var defaultStrat = function (parentVal, childVal) { + return childVal === undefined ? parentVal : childVal; + }; + /** + * Validate component names + */ + function checkComponents(options) { + for (var key in options.components) { + validateComponentName(key); + } + } + function validateComponentName(name) { + if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) { + warn$2('Invalid component name: "' + + name + + '". Component names ' + + 'should conform to valid custom element name in html5 specification.'); + } + if (isBuiltInTag(name) || config.isReservedTag(name)) { + warn$2('Do not use built-in or reserved HTML elements as component ' + + 'id: ' + + name); + } + } + /** + * Ensure all props option syntax are normalized into the + * Object-based format. + */ + function normalizeProps(options, vm) { + var props = options.props; + if (!props) + return; + var res = {}; + var i, val, name; + if (isArray(props)) { + i = props.length; + while (i--) { + val = props[i]; + if (typeof val === 'string') { + name = camelize(val); + res[name] = { type: null }; + } + else { + warn$2('props must be strings when using array syntax.'); + } + } + } + else if (isPlainObject(props)) { + for (var key in props) { + val = props[key]; + name = camelize(key); + res[name] = isPlainObject(val) ? val : { type: val }; + } + } + else { + warn$2("Invalid value for option \"props\": expected an Array or an Object, " + + "but got ".concat(toRawType(props), "."), vm); + } + options.props = res; + } + /** + * Normalize all injections into Object-based format + */ + function normalizeInject(options, vm) { + var inject = options.inject; + if (!inject) + return; + var normalized = (options.inject = {}); + if (isArray(inject)) { + for (var i = 0; i < inject.length; i++) { + normalized[inject[i]] = { from: inject[i] }; + } + } + else if (isPlainObject(inject)) { + for (var key in inject) { + var val = inject[key]; + normalized[key] = isPlainObject(val) + ? extend({ from: key }, val) + : { from: val }; + } + } + else { + warn$2("Invalid value for option \"inject\": expected an Array or an Object, " + + "but got ".concat(toRawType(inject), "."), vm); + } + } + /** + * Normalize raw function directives into object format. + */ + function normalizeDirectives$1(options) { + var dirs = options.directives; + if (dirs) { + for (var key in dirs) { + var def = dirs[key]; + if (isFunction(def)) { + dirs[key] = { bind: def, update: def }; + } + } + } + } + function assertObjectType(name, value, vm) { + if (!isPlainObject(value)) { + warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") + + "but got ".concat(toRawType(value), "."), vm); + } + } + /** + * Merge two option objects into a new one. + * Core utility used in both instantiation and inheritance. + */ + function mergeOptions(parent, child, vm) { + { + checkComponents(child); + } + if (isFunction(child)) { + // @ts-expect-error + child = child.options; + } + normalizeProps(child, vm); + normalizeInject(child, vm); + normalizeDirectives$1(child); + // Apply extends and mixins on the child options, + // but only if it is a raw options object that isn't + // the result of another mergeOptions call. + // Only merged options has the _base property. + if (!child._base) { + if (child.extends) { + parent = mergeOptions(parent, child.extends, vm); + } + if (child.mixins) { + for (var i = 0, l = child.mixins.length; i < l; i++) { + parent = mergeOptions(parent, child.mixins[i], vm); + } + } + } + var options = {}; + var key; + for (key in parent) { + mergeField(key); + } + for (key in child) { + if (!hasOwn(parent, key)) { + mergeField(key); + } + } + function mergeField(key) { + var strat = strats[key] || defaultStrat; + options[key] = strat(parent[key], child[key], vm, key); + } + return options; + } + /** + * Resolve an asset. + * This function is used because child instances need access + * to assets defined in its ancestor chain. + */ + function resolveAsset(options, type, id, warnMissing) { + /* istanbul ignore if */ + if (typeof id !== 'string') { + return; + } + var assets = options[type]; + // check local registration variations first + if (hasOwn(assets, id)) + return assets[id]; + var camelizedId = camelize(id); + if (hasOwn(assets, camelizedId)) + return assets[camelizedId]; + var PascalCaseId = capitalize(camelizedId); + if (hasOwn(assets, PascalCaseId)) + return assets[PascalCaseId]; + // fallback to prototype chain + var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; + if (warnMissing && !res) { + warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id); + } + return res; + } + + function validateProp(key, propOptions, propsData, vm) { + var prop = propOptions[key]; + var absent = !hasOwn(propsData, key); + var value = propsData[key]; + // boolean casting + var booleanIndex = getTypeIndex(Boolean, prop.type); + if (booleanIndex > -1) { + if (absent && !hasOwn(prop, 'default')) { + value = false; + } + else if (value === '' || value === hyphenate(key)) { + // only cast empty string / same name to boolean if + // boolean has higher priority + var stringIndex = getTypeIndex(String, prop.type); + if (stringIndex < 0 || booleanIndex < stringIndex) { + value = true; + } + } + } + // check default value + if (value === undefined) { + value = getPropDefaultValue(vm, prop, key); + // since the default value is a fresh copy, + // make sure to observe it. + var prevShouldObserve = shouldObserve; + toggleObserving(true); + observe(value); + toggleObserving(prevShouldObserve); + } + { + assertProp(prop, key, value, vm, absent); + } + return value; + } + /** + * Get the default value of a prop. + */ + function getPropDefaultValue(vm, prop, key) { + // no default, return undefined + if (!hasOwn(prop, 'default')) { + return undefined; + } + var def = prop.default; + // warn against non-factory defaults for Object & Array + if (isObject(def)) { + warn$2('Invalid default value for prop "' + + key + + '": ' + + 'Props with type Object/Array must use a factory function ' + + 'to return the default value.', vm); + } + // the raw prop value was also undefined from previous render, + // return previous default value to avoid unnecessary watcher trigger + if (vm && + vm.$options.propsData && + vm.$options.propsData[key] === undefined && + vm._props[key] !== undefined) { + return vm._props[key]; + } + // call factory function for non-Function types + // a value is Function if its prototype is function even across different execution context + return isFunction(def) && getType(prop.type) !== 'Function' + ? def.call(vm) + : def; + } + /** + * Assert whether a prop is valid. + */ + function assertProp(prop, name, value, vm, absent) { + if (prop.required && absent) { + warn$2('Missing required prop: "' + name + '"', vm); + return; + } + if (value == null && !prop.required) { + return; + } + var type = prop.type; + var valid = !type || type === true; + var expectedTypes = []; + if (type) { + if (!isArray(type)) { + type = [type]; + } + for (var i = 0; i < type.length && !valid; i++) { + var assertedType = assertType(value, type[i], vm); + expectedTypes.push(assertedType.expectedType || ''); + valid = assertedType.valid; + } + } + var haveExpectedTypes = expectedTypes.some(function (t) { return t; }); + if (!valid && haveExpectedTypes) { + warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm); + return; + } + var validator = prop.validator; + if (validator) { + if (!validator(value)) { + warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm); + } + } + } + var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; + function assertType(value, type, vm) { + var valid; + var expectedType = getType(type); + if (simpleCheckRE.test(expectedType)) { + var t = typeof value; + valid = t === expectedType.toLowerCase(); + // for primitive wrapper objects + if (!valid && t === 'object') { + valid = value instanceof type; + } + } + else if (expectedType === 'Object') { + valid = isPlainObject(value); + } + else if (expectedType === 'Array') { + valid = isArray(value); + } + else { + try { + valid = value instanceof type; + } + catch (e) { + warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm); + valid = false; + } + } + return { + valid: valid, + expectedType: expectedType + }; + } + var functionTypeCheckRE = /^\s*function (\w+)/; + /** + * Use function string name to check built-in types, + * because a simple equality check will fail when running + * across different vms / iframes. + */ + function getType(fn) { + var match = fn && fn.toString().match(functionTypeCheckRE); + return match ? match[1] : ''; + } + function isSameType(a, b) { + return getType(a) === getType(b); + } + function getTypeIndex(type, expectedTypes) { + if (!isArray(expectedTypes)) { + return isSameType(expectedTypes, type) ? 0 : -1; + } + for (var i = 0, len = expectedTypes.length; i < len; i++) { + if (isSameType(expectedTypes[i], type)) { + return i; + } + } + return -1; + } + function getInvalidTypeMessage(name, value, expectedTypes) { + var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + + " Expected ".concat(expectedTypes.map(capitalize).join(', ')); + var expectedType = expectedTypes[0]; + var receivedType = toRawType(value); + // check if we need to specify expected value + if (expectedTypes.length === 1 && + isExplicable(expectedType) && + isExplicable(typeof value) && + !isBoolean(expectedType, receivedType)) { + message += " with value ".concat(styleValue(value, expectedType)); + } + message += ", got ".concat(receivedType, " "); + // check if we need to specify received value + if (isExplicable(receivedType)) { + message += "with value ".concat(styleValue(value, receivedType), "."); + } + return message; + } + function styleValue(value, type) { + if (type === 'String') { + return "\"".concat(value, "\""); + } + else if (type === 'Number') { + return "".concat(Number(value)); + } + else { + return "".concat(value); + } + } + var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; + function isExplicable(value) { + return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; }); + } + function isBoolean() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; }); + } + + function Vue(options) { + if (!(this instanceof Vue)) { + warn$2('Vue is a constructor and should be called with the `new` keyword'); + } + this._init(options); + } + //@ts-expect-error Vue has function type + initMixin$1(Vue); + //@ts-expect-error Vue has function type + stateMixin(Vue); + //@ts-expect-error Vue has function type + eventsMixin(Vue); + //@ts-expect-error Vue has function type + lifecycleMixin(Vue); + //@ts-expect-error Vue has function type + renderMixin(Vue); + + function initUse(Vue) { + Vue.use = function (plugin) { + var installedPlugins = this._installedPlugins || (this._installedPlugins = []); + if (installedPlugins.indexOf(plugin) > -1) { + return this; + } + // additional parameters + var args = toArray(arguments, 1); + args.unshift(this); + if (isFunction(plugin.install)) { + plugin.install.apply(plugin, args); + } + else if (isFunction(plugin)) { + plugin.apply(null, args); + } + installedPlugins.push(plugin); + return this; + }; + } + + function initMixin(Vue) { + Vue.mixin = function (mixin) { + this.options = mergeOptions(this.options, mixin); + return this; + }; + } + + function initExtend(Vue) { + /** + * Each instance constructor, including Vue, has a unique + * cid. This enables us to create wrapped "child + * constructors" for prototypal inheritance and cache them. + */ + Vue.cid = 0; + var cid = 1; + /** + * Class inheritance + */ + Vue.extend = function (extendOptions) { + extendOptions = extendOptions || {}; + var Super = this; + var SuperId = Super.cid; + var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); + if (cachedCtors[SuperId]) { + return cachedCtors[SuperId]; + } + var name = getComponentName(extendOptions) || getComponentName(Super.options); + if (name) { + validateComponentName(name); + } + var Sub = function VueComponent(options) { + this._init(options); + }; + Sub.prototype = Object.create(Super.prototype); + Sub.prototype.constructor = Sub; + Sub.cid = cid++; + Sub.options = mergeOptions(Super.options, extendOptions); + Sub['super'] = Super; + // For props and computed properties, we define the proxy getters on + // the Vue instances at extension time, on the extended prototype. This + // avoids Object.defineProperty calls for each instance created. + if (Sub.options.props) { + initProps(Sub); + } + if (Sub.options.computed) { + initComputed(Sub); + } + // allow further extension/mixin/plugin usage + Sub.extend = Super.extend; + Sub.mixin = Super.mixin; + Sub.use = Super.use; + // create asset registers, so extended classes + // can have their private assets too. + ASSET_TYPES.forEach(function (type) { + Sub[type] = Super[type]; + }); + // enable recursive self-lookup + if (name) { + Sub.options.components[name] = Sub; + } + // keep a reference to the super options at extension time. + // later at instantiation we can check if Super's options have + // been updated. + Sub.superOptions = Super.options; + Sub.extendOptions = extendOptions; + Sub.sealedOptions = extend({}, Sub.options); + // cache constructor + cachedCtors[SuperId] = Sub; + return Sub; + }; + } + function initProps(Comp) { + var props = Comp.options.props; + for (var key in props) { + proxy(Comp.prototype, "_props", key); + } + } + function initComputed(Comp) { + var computed = Comp.options.computed; + for (var key in computed) { + defineComputed(Comp.prototype, key, computed[key]); + } + } + + function initAssetRegisters(Vue) { + /** + * Create asset registration methods. + */ + ASSET_TYPES.forEach(function (type) { + // @ts-expect-error function is not exact same type + Vue[type] = function (id, definition) { + if (!definition) { + return this.options[type + 's'][id]; + } + else { + /* istanbul ignore if */ + if (type === 'component') { + validateComponentName(id); + } + if (type === 'component' && isPlainObject(definition)) { + // @ts-expect-error + definition.name = definition.name || id; + definition = this.options._base.extend(definition); + } + if (type === 'directive' && isFunction(definition)) { + definition = { bind: definition, update: definition }; + } + this.options[type + 's'][id] = definition; + return definition; + } + }; + }); + } + + function _getComponentName(opts) { + return opts && (getComponentName(opts.Ctor.options) || opts.tag); + } + function matches(pattern, name) { + if (isArray(pattern)) { + return pattern.indexOf(name) > -1; + } + else if (typeof pattern === 'string') { + return pattern.split(',').indexOf(name) > -1; + } + else if (isRegExp(pattern)) { + return pattern.test(name); + } + /* istanbul ignore next */ + return false; + } + function pruneCache(keepAliveInstance, filter) { + var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode; + for (var key in cache) { + var entry = cache[key]; + if (entry) { + var name_1 = entry.name; + if (name_1 && !filter(name_1)) { + pruneCacheEntry(cache, key, keys, _vnode); + } + } + } + } + function pruneCacheEntry(cache, key, keys, current) { + var entry = cache[key]; + if (entry && (!current || entry.tag !== current.tag)) { + // @ts-expect-error can be undefined + entry.componentInstance.$destroy(); + } + cache[key] = null; + remove$2(keys, key); + } + var patternTypes = [String, RegExp, Array]; + // TODO defineComponent + var KeepAlive = { + name: 'keep-alive', + abstract: true, + props: { + include: patternTypes, + exclude: patternTypes, + max: [String, Number] + }, + methods: { + cacheVNode: function () { + var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache; + if (vnodeToCache) { + var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions; + cache[keyToCache] = { + name: _getComponentName(componentOptions), + tag: tag, + componentInstance: componentInstance + }; + keys.push(keyToCache); + // prune oldest entry + if (this.max && keys.length > parseInt(this.max)) { + pruneCacheEntry(cache, keys[0], keys, this._vnode); + } + this.vnodeToCache = null; + } + } + }, + created: function () { + this.cache = Object.create(null); + this.keys = []; + }, + destroyed: function () { + for (var key in this.cache) { + pruneCacheEntry(this.cache, key, this.keys); + } + }, + mounted: function () { + var _this = this; + this.cacheVNode(); + this.$watch('include', function (val) { + pruneCache(_this, function (name) { return matches(val, name); }); + }); + this.$watch('exclude', function (val) { + pruneCache(_this, function (name) { return !matches(val, name); }); + }); + }, + updated: function () { + this.cacheVNode(); + }, + render: function () { + var slot = this.$slots.default; + var vnode = getFirstComponentChild(slot); + var componentOptions = vnode && vnode.componentOptions; + if (componentOptions) { + // check pattern + var name_2 = _getComponentName(componentOptions); + var _a = this, include = _a.include, exclude = _a.exclude; + if ( + // not included + (include && (!name_2 || !matches(include, name_2))) || + // excluded + (exclude && name_2 && matches(exclude, name_2))) { + return vnode; + } + var _b = this, cache = _b.cache, keys = _b.keys; + var key = vnode.key == null + ? // same constructor may get registered as different local components + // so cid alone is not enough (#3269) + componentOptions.Ctor.cid + + (componentOptions.tag ? "::".concat(componentOptions.tag) : '') + : vnode.key; + if (cache[key]) { + vnode.componentInstance = cache[key].componentInstance; + // make current key freshest + remove$2(keys, key); + keys.push(key); + } + else { + // delay setting the cache until update + this.vnodeToCache = vnode; + this.keyToCache = key; + } + // @ts-expect-error can vnode.data can be undefined + vnode.data.keepAlive = true; + } + return vnode || (slot && slot[0]); + } + }; + + var builtInComponents = { + KeepAlive: KeepAlive + }; + + function initGlobalAPI(Vue) { + // config + var configDef = {}; + configDef.get = function () { return config; }; + { + configDef.set = function () { + warn$2('Do not replace the Vue.config object, set individual fields instead.'); + }; + } + Object.defineProperty(Vue, 'config', configDef); + // exposed util methods. + // NOTE: these are not considered part of the public API - avoid relying on + // them unless you are aware of the risk. + Vue.util = { + warn: warn$2, + extend: extend, + mergeOptions: mergeOptions, + defineReactive: defineReactive + }; + Vue.set = set; + Vue.delete = del; + Vue.nextTick = nextTick; + // 2.6 explicit observable API + Vue.observable = function (obj) { + observe(obj); + return obj; + }; + Vue.options = Object.create(null); + ASSET_TYPES.forEach(function (type) { + Vue.options[type + 's'] = Object.create(null); + }); + // this is used to identify the "base" constructor to extend all plain-object + // components with in Weex's multi-instance scenarios. + Vue.options._base = Vue; + extend(Vue.options.components, builtInComponents); + initUse(Vue); + initMixin(Vue); + initExtend(Vue); + initAssetRegisters(Vue); + } + + initGlobalAPI(Vue); + Object.defineProperty(Vue.prototype, '$isServer', { + get: isServerRendering + }); + Object.defineProperty(Vue.prototype, '$ssrContext', { + get: function () { + /* istanbul ignore next */ + return this.$vnode && this.$vnode.ssrContext; + } + }); + // expose FunctionalRenderContext for ssr runtime helper installation + Object.defineProperty(Vue, 'FunctionalRenderContext', { + value: FunctionalRenderContext + }); + Vue.version = version; + + // these are reserved for web because they are directly compiled away + // during template compilation + var isReservedAttr = makeMap('style,class'); + // attributes that should be using props for binding + var acceptValue = makeMap('input,textarea,option,select,progress'); + var mustUseProp = function (tag, type, attr) { + return ((attr === 'value' && acceptValue(tag) && type !== 'button') || + (attr === 'selected' && tag === 'option') || + (attr === 'checked' && tag === 'input') || + (attr === 'muted' && tag === 'video')); + }; + var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); + var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); + var convertEnumeratedValue = function (key, value) { + return isFalsyAttrValue(value) || value === 'false' + ? 'false' + : // allow arbitrary string value for contenteditable + key === 'contenteditable' && isValidContentEditableValue(value) + ? value + : 'true'; + }; + var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + + 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + + 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + + 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + + 'required,reversed,scoped,seamless,selected,sortable,' + + 'truespeed,typemustmatch,visible'); + var xlinkNS = 'http://www.w3.org/1999/xlink'; + var isXlink = function (name) { + return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'; + }; + var getXlinkProp = function (name) { + return isXlink(name) ? name.slice(6, name.length) : ''; + }; + var isFalsyAttrValue = function (val) { + return val == null || val === false; + }; + + function genClassForVnode(vnode) { + var data = vnode.data; + var parentNode = vnode; + var childNode = vnode; + while (isDef(childNode.componentInstance)) { + childNode = childNode.componentInstance._vnode; + if (childNode && childNode.data) { + data = mergeClassData(childNode.data, data); + } + } + // @ts-expect-error parentNode.parent not VNodeWithData + while (isDef((parentNode = parentNode.parent))) { + if (parentNode && parentNode.data) { + data = mergeClassData(data, parentNode.data); + } + } + return renderClass(data.staticClass, data.class); + } + function mergeClassData(child, parent) { + return { + staticClass: concat(child.staticClass, parent.staticClass), + class: isDef(child.class) ? [child.class, parent.class] : parent.class + }; + } + function renderClass(staticClass, dynamicClass) { + if (isDef(staticClass) || isDef(dynamicClass)) { + return concat(staticClass, stringifyClass(dynamicClass)); + } + /* istanbul ignore next */ + return ''; + } + function concat(a, b) { + return a ? (b ? a + ' ' + b : a) : b || ''; + } + function stringifyClass(value) { + if (Array.isArray(value)) { + return stringifyArray(value); + } + if (isObject(value)) { + return stringifyObject(value); + } + if (typeof value === 'string') { + return value; + } + /* istanbul ignore next */ + return ''; + } + function stringifyArray(value) { + var res = ''; + var stringified; + for (var i = 0, l = value.length; i < l; i++) { + if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') { + if (res) + res += ' '; + res += stringified; + } + } + return res; + } + function stringifyObject(value) { + var res = ''; + for (var key in value) { + if (value[key]) { + if (res) + res += ' '; + res += key; + } + } + return res; + } + + var namespaceMap = { + svg: 'http://www.w3.org/2000/svg', + math: 'http://www.w3.org/1998/Math/MathML' + }; + var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + + 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + + 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + + 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + + 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + + 'embed,object,param,source,canvas,script,noscript,del,ins,' + + 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + + 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + + 'output,progress,select,textarea,' + + 'details,dialog,menu,menuitem,summary,' + + 'content,element,shadow,template,blockquote,iframe,tfoot'); + // this map is intentionally selective, only covering SVG elements that may + // contain child elements. + var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + + 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + + 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true); + var isPreTag = function (tag) { return tag === 'pre'; }; + var isReservedTag = function (tag) { + return isHTMLTag(tag) || isSVG(tag); + }; + function getTagNamespace(tag) { + if (isSVG(tag)) { + return 'svg'; + } + // basic support for MathML + // note it doesn't support other MathML elements being component roots + if (tag === 'math') { + return 'math'; + } + } + var unknownElementCache = Object.create(null); + function isUnknownElement(tag) { + /* istanbul ignore if */ + if (!inBrowser) { + return true; + } + if (isReservedTag(tag)) { + return false; + } + tag = tag.toLowerCase(); + /* istanbul ignore if */ + if (unknownElementCache[tag] != null) { + return unknownElementCache[tag]; + } + var el = document.createElement(tag); + if (tag.indexOf('-') > -1) { + // http://stackoverflow.com/a/28210364/1070244 + return (unknownElementCache[tag] = + el.constructor === window.HTMLUnknownElement || + el.constructor === window.HTMLElement); + } + else { + return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString())); + } + } + var isTextInputType = makeMap('text,number,password,search,email,tel,url'); + + /** + * Query an element selector if it's not an element already. + */ + function query(el) { + if (typeof el === 'string') { + var selected = document.querySelector(el); + if (!selected) { + warn$2('Cannot find element: ' + el); + return document.createElement('div'); + } + return selected; + } + else { + return el; + } + } + + function createElement(tagName, vnode) { + var elm = document.createElement(tagName); + if (tagName !== 'select') { + return elm; + } + // false or null will remove the attribute but undefined will not + if (vnode.data && + vnode.data.attrs && + vnode.data.attrs.multiple !== undefined) { + elm.setAttribute('multiple', 'multiple'); + } + return elm; + } + function createElementNS(namespace, tagName) { + return document.createElementNS(namespaceMap[namespace], tagName); + } + function createTextNode(text) { + return document.createTextNode(text); + } + function createComment(text) { + return document.createComment(text); + } + function insertBefore(parentNode, newNode, referenceNode) { + parentNode.insertBefore(newNode, referenceNode); + } + function removeChild(node, child) { + node.removeChild(child); + } + function appendChild(node, child) { + node.appendChild(child); + } + function parentNode(node) { + return node.parentNode; + } + function nextSibling(node) { + return node.nextSibling; + } + function tagName(node) { + return node.tagName; + } + function setTextContent(node, text) { + node.textContent = text; + } + function setStyleScope(node, scopeId) { + node.setAttribute(scopeId, ''); + } + + var nodeOps = /*#__PURE__*/Object.freeze({ + __proto__: null, + createElement: createElement, + createElementNS: createElementNS, + createTextNode: createTextNode, + createComment: createComment, + insertBefore: insertBefore, + removeChild: removeChild, + appendChild: appendChild, + parentNode: parentNode, + nextSibling: nextSibling, + tagName: tagName, + setTextContent: setTextContent, + setStyleScope: setStyleScope + }); + + var ref = { + create: function (_, vnode) { + registerRef(vnode); + }, + update: function (oldVnode, vnode) { + if (oldVnode.data.ref !== vnode.data.ref) { + registerRef(oldVnode, true); + registerRef(vnode); + } + }, + destroy: function (vnode) { + registerRef(vnode, true); + } + }; + function registerRef(vnode, isRemoval) { + var ref = vnode.data.ref; + if (!isDef(ref)) + return; + var vm = vnode.context; + var refValue = vnode.componentInstance || vnode.elm; + var value = isRemoval ? null : refValue; + var $refsValue = isRemoval ? undefined : refValue; + if (isFunction(ref)) { + invokeWithErrorHandling(ref, vm, [value], vm, "template ref function"); + return; + } + var isFor = vnode.data.refInFor; + var _isString = typeof ref === 'string' || typeof ref === 'number'; + var _isRef = isRef(ref); + var refs = vm.$refs; + if (_isString || _isRef) { + if (isFor) { + var existing = _isString ? refs[ref] : ref.value; + if (isRemoval) { + isArray(existing) && remove$2(existing, refValue); + } + else { + if (!isArray(existing)) { + if (_isString) { + refs[ref] = [refValue]; + setSetupRef(vm, ref, refs[ref]); + } + else { + ref.value = [refValue]; + } + } + else if (!existing.includes(refValue)) { + existing.push(refValue); + } + } + } + else if (_isString) { + if (isRemoval && refs[ref] !== refValue) { + return; + } + refs[ref] = $refsValue; + setSetupRef(vm, ref, value); + } + else if (_isRef) { + if (isRemoval && ref.value !== refValue) { + return; + } + ref.value = value; + } + else { + warn$2("Invalid template ref type: ".concat(typeof ref)); + } + } + } + function setSetupRef(_a, key, val) { + var _setupState = _a._setupState; + if (_setupState && hasOwn(_setupState, key)) { + if (isRef(_setupState[key])) { + _setupState[key].value = val; + } + else { + _setupState[key] = val; + } + } + } + + /** + * Virtual DOM patching algorithm based on Snabbdom by + * Simon Friis Vindum (@paldepind) + * Licensed under the MIT License + * https://github.com/paldepind/snabbdom/blob/master/LICENSE + * + * modified by Evan You (@yyx990803) + * + * Not type-checking this because this file is perf-critical and the cost + * of making flow understand it is not worth it. + */ + var emptyNode = new VNode('', {}, []); + var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; + function sameVnode(a, b) { + return (a.key === b.key && + a.asyncFactory === b.asyncFactory && + ((a.tag === b.tag && + a.isComment === b.isComment && + isDef(a.data) === isDef(b.data) && + sameInputType(a, b)) || + (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error)))); + } + function sameInputType(a, b) { + if (a.tag !== 'input') + return true; + var i; + var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type; + var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type; + return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB)); + } + function createKeyToOldIdx(children, beginIdx, endIdx) { + var i, key; + var map = {}; + for (i = beginIdx; i <= endIdx; ++i) { + key = children[i].key; + if (isDef(key)) + map[key] = i; + } + return map; + } + function createPatchFunction(backend) { + var i, j; + var cbs = {}; + var modules = backend.modules, nodeOps = backend.nodeOps; + for (i = 0; i < hooks.length; ++i) { + cbs[hooks[i]] = []; + for (j = 0; j < modules.length; ++j) { + if (isDef(modules[j][hooks[i]])) { + cbs[hooks[i]].push(modules[j][hooks[i]]); + } + } + } + function emptyNodeAt(elm) { + return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm); + } + function createRmCb(childElm, listeners) { + function remove() { + if (--remove.listeners === 0) { + removeNode(childElm); + } + } + remove.listeners = listeners; + return remove; + } + function removeNode(el) { + var parent = nodeOps.parentNode(el); + // element may have already been removed due to v-html / v-text + if (isDef(parent)) { + nodeOps.removeChild(parent, el); + } + } + function isUnknownElement(vnode, inVPre) { + return (!inVPre && + !vnode.ns && + !(config.ignoredElements.length && + config.ignoredElements.some(function (ignore) { + return isRegExp(ignore) + ? ignore.test(vnode.tag) + : ignore === vnode.tag; + })) && + config.isUnknownElement(vnode.tag)); + } + var creatingElmInVPre = 0; + function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { + if (isDef(vnode.elm) && isDef(ownerArray)) { + // This vnode was used in a previous render! + // now it's used as a new node, overwriting its elm would cause + // potential patch errors down the road when it's used as an insertion + // reference node. Instead, we clone the node on-demand before creating + // associated DOM element for it. + vnode = ownerArray[index] = cloneVNode(vnode); + } + vnode.isRootInsert = !nested; // for transition enter check + if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { + return; + } + var data = vnode.data; + var children = vnode.children; + var tag = vnode.tag; + if (isDef(tag)) { + { + if (data && data.pre) { + creatingElmInVPre++; + } + if (isUnknownElement(vnode, creatingElmInVPre)) { + warn$2('Unknown custom element: <' + + tag + + '> - did you ' + + 'register the component correctly? For recursive components, ' + + 'make sure to provide the "name" option.', vnode.context); + } + } + vnode.elm = vnode.ns + ? nodeOps.createElementNS(vnode.ns, tag) + : nodeOps.createElement(tag, vnode); + setScope(vnode); + createChildren(vnode, children, insertedVnodeQueue); + if (isDef(data)) { + invokeCreateHooks(vnode, insertedVnodeQueue); + } + insert(parentElm, vnode.elm, refElm); + if (data && data.pre) { + creatingElmInVPre--; + } + } + else if (isTrue(vnode.isComment)) { + vnode.elm = nodeOps.createComment(vnode.text); + insert(parentElm, vnode.elm, refElm); + } + else { + vnode.elm = nodeOps.createTextNode(vnode.text); + insert(parentElm, vnode.elm, refElm); + } + } + function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) { + var i = vnode.data; + if (isDef(i)) { + var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; + if (isDef((i = i.hook)) && isDef((i = i.init))) { + i(vnode, false /* hydrating */); + } + // after calling the init hook, if the vnode is a child component + // it should've created a child instance and mounted it. the child + // component also has set the placeholder vnode's elm. + // in that case we can just return the element and be done. + if (isDef(vnode.componentInstance)) { + initComponent(vnode, insertedVnodeQueue); + insert(parentElm, vnode.elm, refElm); + if (isTrue(isReactivated)) { + reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); + } + return true; + } + } + } + function initComponent(vnode, insertedVnodeQueue) { + if (isDef(vnode.data.pendingInsert)) { + insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); + vnode.data.pendingInsert = null; + } + vnode.elm = vnode.componentInstance.$el; + if (isPatchable(vnode)) { + invokeCreateHooks(vnode, insertedVnodeQueue); + setScope(vnode); + } + else { + // empty component root. + // skip all element-related modules except for ref (#3455) + registerRef(vnode); + // make sure to invoke the insert hook + insertedVnodeQueue.push(vnode); + } + } + function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) { + var i; + // hack for #4339: a reactivated component with inner transition + // does not trigger because the inner node's created hooks are not called + // again. It's not ideal to involve module-specific logic in here but + // there doesn't seem to be a better way to do it. + var innerNode = vnode; + while (innerNode.componentInstance) { + innerNode = innerNode.componentInstance._vnode; + if (isDef((i = innerNode.data)) && isDef((i = i.transition))) { + for (i = 0; i < cbs.activate.length; ++i) { + cbs.activate[i](emptyNode, innerNode); + } + insertedVnodeQueue.push(innerNode); + break; + } + } + // unlike a newly created component, + // a reactivated keep-alive component doesn't insert itself + insert(parentElm, vnode.elm, refElm); + } + function insert(parent, elm, ref) { + if (isDef(parent)) { + if (isDef(ref)) { + if (nodeOps.parentNode(ref) === parent) { + nodeOps.insertBefore(parent, elm, ref); + } + } + else { + nodeOps.appendChild(parent, elm); + } + } + } + function createChildren(vnode, children, insertedVnodeQueue) { + if (isArray(children)) { + { + checkDuplicateKeys(children); + } + for (var i_1 = 0; i_1 < children.length; ++i_1) { + createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1); + } + } + else if (isPrimitive(vnode.text)) { + nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); + } + } + function isPatchable(vnode) { + while (vnode.componentInstance) { + vnode = vnode.componentInstance._vnode; + } + return isDef(vnode.tag); + } + function invokeCreateHooks(vnode, insertedVnodeQueue) { + for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) { + cbs.create[i_2](emptyNode, vnode); + } + i = vnode.data.hook; // Reuse variable + if (isDef(i)) { + if (isDef(i.create)) + i.create(emptyNode, vnode); + if (isDef(i.insert)) + insertedVnodeQueue.push(vnode); + } + } + // set scope id attribute for scoped CSS. + // this is implemented as a special case to avoid the overhead + // of going through the normal attribute patching process. + function setScope(vnode) { + var i; + if (isDef((i = vnode.fnScopeId))) { + nodeOps.setStyleScope(vnode.elm, i); + } + else { + var ancestor = vnode; + while (ancestor) { + if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) { + nodeOps.setStyleScope(vnode.elm, i); + } + ancestor = ancestor.parent; + } + } + // for slot content they should also get the scopeId from the host instance. + if (isDef((i = activeInstance)) && + i !== vnode.context && + i !== vnode.fnContext && + isDef((i = i.$options._scopeId))) { + nodeOps.setStyleScope(vnode.elm, i); + } + } + function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { + for (; startIdx <= endIdx; ++startIdx) { + createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); + } + } + function invokeDestroyHook(vnode) { + var i, j; + var data = vnode.data; + if (isDef(data)) { + if (isDef((i = data.hook)) && isDef((i = i.destroy))) + i(vnode); + for (i = 0; i < cbs.destroy.length; ++i) + cbs.destroy[i](vnode); + } + if (isDef((i = vnode.children))) { + for (j = 0; j < vnode.children.length; ++j) { + invokeDestroyHook(vnode.children[j]); + } + } + } + function removeVnodes(vnodes, startIdx, endIdx) { + for (; startIdx <= endIdx; ++startIdx) { + var ch = vnodes[startIdx]; + if (isDef(ch)) { + if (isDef(ch.tag)) { + removeAndInvokeRemoveHook(ch); + invokeDestroyHook(ch); + } + else { + // Text node + removeNode(ch.elm); + } + } + } + } + function removeAndInvokeRemoveHook(vnode, rm) { + if (isDef(rm) || isDef(vnode.data)) { + var i_3; + var listeners = cbs.remove.length + 1; + if (isDef(rm)) { + // we have a recursively passed down rm callback + // increase the listeners count + rm.listeners += listeners; + } + else { + // directly removing + rm = createRmCb(vnode.elm, listeners); + } + // recursively invoke hooks on child component root node + if (isDef((i_3 = vnode.componentInstance)) && + isDef((i_3 = i_3._vnode)) && + isDef(i_3.data)) { + removeAndInvokeRemoveHook(i_3, rm); + } + for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) { + cbs.remove[i_3](vnode, rm); + } + if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) { + i_3(vnode, rm); + } + else { + rm(); + } + } + else { + removeNode(vnode.elm); + } + } + function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { + var oldStartIdx = 0; + var newStartIdx = 0; + var oldEndIdx = oldCh.length - 1; + var oldStartVnode = oldCh[0]; + var oldEndVnode = oldCh[oldEndIdx]; + var newEndIdx = newCh.length - 1; + var newStartVnode = newCh[0]; + var newEndVnode = newCh[newEndIdx]; + var oldKeyToIdx, idxInOld, vnodeToMove, refElm; + // removeOnly is a special flag used only by <transition-group> + // to ensure removed elements stay in correct relative positions + // during leaving transitions + var canMove = !removeOnly; + { + checkDuplicateKeys(newCh); + } + while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { + if (isUndef(oldStartVnode)) { + oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left + } + else if (isUndef(oldEndVnode)) { + oldEndVnode = oldCh[--oldEndIdx]; + } + else if (sameVnode(oldStartVnode, newStartVnode)) { + patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); + oldStartVnode = oldCh[++oldStartIdx]; + newStartVnode = newCh[++newStartIdx]; + } + else if (sameVnode(oldEndVnode, newEndVnode)) { + patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); + oldEndVnode = oldCh[--oldEndIdx]; + newEndVnode = newCh[--newEndIdx]; + } + else if (sameVnode(oldStartVnode, newEndVnode)) { + // Vnode moved right + patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); + canMove && + nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); + oldStartVnode = oldCh[++oldStartIdx]; + newEndVnode = newCh[--newEndIdx]; + } + else if (sameVnode(oldEndVnode, newStartVnode)) { + // Vnode moved left + patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); + canMove && + nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); + oldEndVnode = oldCh[--oldEndIdx]; + newStartVnode = newCh[++newStartIdx]; + } + else { + if (isUndef(oldKeyToIdx)) + oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); + idxInOld = isDef(newStartVnode.key) + ? oldKeyToIdx[newStartVnode.key] + : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); + if (isUndef(idxInOld)) { + // New element + createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); + } + else { + vnodeToMove = oldCh[idxInOld]; + if (sameVnode(vnodeToMove, newStartVnode)) { + patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); + oldCh[idxInOld] = undefined; + canMove && + nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); + } + else { + // same key but different element. treat as new element + createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); + } + } + newStartVnode = newCh[++newStartIdx]; + } + } + if (oldStartIdx > oldEndIdx) { + refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; + addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); + } + else if (newStartIdx > newEndIdx) { + removeVnodes(oldCh, oldStartIdx, oldEndIdx); + } + } + function checkDuplicateKeys(children) { + var seenKeys = {}; + for (var i_4 = 0; i_4 < children.length; i_4++) { + var vnode = children[i_4]; + var key = vnode.key; + if (isDef(key)) { + if (seenKeys[key]) { + warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context); + } + else { + seenKeys[key] = true; + } + } + } + } + function findIdxInOld(node, oldCh, start, end) { + for (var i_5 = start; i_5 < end; i_5++) { + var c = oldCh[i_5]; + if (isDef(c) && sameVnode(node, c)) + return i_5; + } + } + function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { + if (oldVnode === vnode) { + return; + } + if (isDef(vnode.elm) && isDef(ownerArray)) { + // clone reused vnode + vnode = ownerArray[index] = cloneVNode(vnode); + } + var elm = (vnode.elm = oldVnode.elm); + if (isTrue(oldVnode.isAsyncPlaceholder)) { + if (isDef(vnode.asyncFactory.resolved)) { + hydrate(oldVnode.elm, vnode, insertedVnodeQueue); + } + else { + vnode.isAsyncPlaceholder = true; + } + return; + } + // reuse element for static trees. + // note we only do this if the vnode is cloned - + // if the new node is not cloned it means the render functions have been + // reset by the hot-reload-api and we need to do a proper re-render. + if (isTrue(vnode.isStatic) && + isTrue(oldVnode.isStatic) && + vnode.key === oldVnode.key && + (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) { + vnode.componentInstance = oldVnode.componentInstance; + return; + } + var i; + var data = vnode.data; + if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) { + i(oldVnode, vnode); + } + var oldCh = oldVnode.children; + var ch = vnode.children; + if (isDef(data) && isPatchable(vnode)) { + for (i = 0; i < cbs.update.length; ++i) + cbs.update[i](oldVnode, vnode); + if (isDef((i = data.hook)) && isDef((i = i.update))) + i(oldVnode, vnode); + } + if (isUndef(vnode.text)) { + if (isDef(oldCh) && isDef(ch)) { + if (oldCh !== ch) + updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); + } + else if (isDef(ch)) { + { + checkDuplicateKeys(ch); + } + if (isDef(oldVnode.text)) + nodeOps.setTextContent(elm, ''); + addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); + } + else if (isDef(oldCh)) { + removeVnodes(oldCh, 0, oldCh.length - 1); + } + else if (isDef(oldVnode.text)) { + nodeOps.setTextContent(elm, ''); + } + } + else if (oldVnode.text !== vnode.text) { + nodeOps.setTextContent(elm, vnode.text); + } + if (isDef(data)) { + if (isDef((i = data.hook)) && isDef((i = i.postpatch))) + i(oldVnode, vnode); + } + } + function invokeInsertHook(vnode, queue, initial) { + // delay insert hooks for component root nodes, invoke them after the + // element is really inserted + if (isTrue(initial) && isDef(vnode.parent)) { + vnode.parent.data.pendingInsert = queue; + } + else { + for (var i_6 = 0; i_6 < queue.length; ++i_6) { + queue[i_6].data.hook.insert(queue[i_6]); + } + } + } + var hydrationBailed = false; + // list of modules that can skip create hook during hydration because they + // are already rendered on the client or has no need for initialization + // Note: style is excluded because it relies on initial clone for future + // deep updates (#7063). + var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); + // Note: this is a browser-only function so we can assume elms are DOM nodes. + function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { + var i; + var tag = vnode.tag, data = vnode.data, children = vnode.children; + inVPre = inVPre || (data && data.pre); + vnode.elm = elm; + if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { + vnode.isAsyncPlaceholder = true; + return true; + } + // assert node match + { + if (!assertNodeMatch(elm, vnode, inVPre)) { + return false; + } + } + if (isDef(data)) { + if (isDef((i = data.hook)) && isDef((i = i.init))) + i(vnode, true /* hydrating */); + if (isDef((i = vnode.componentInstance))) { + // child component. it should have hydrated its own tree. + initComponent(vnode, insertedVnodeQueue); + return true; + } + } + if (isDef(tag)) { + if (isDef(children)) { + // empty element, allow client to pick up and populate children + if (!elm.hasChildNodes()) { + createChildren(vnode, children, insertedVnodeQueue); + } + else { + // v-html and domProps: innerHTML + if (isDef((i = data)) && + isDef((i = i.domProps)) && + isDef((i = i.innerHTML))) { + if (i !== elm.innerHTML) { + /* istanbul ignore if */ + if (typeof console !== 'undefined' && + !hydrationBailed) { + hydrationBailed = true; + console.warn('Parent: ', elm); + console.warn('server innerHTML: ', i); + console.warn('client innerHTML: ', elm.innerHTML); + } + return false; + } + } + else { + // iterate and compare children lists + var childrenMatch = true; + var childNode = elm.firstChild; + for (var i_7 = 0; i_7 < children.length; i_7++) { + if (!childNode || + !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) { + childrenMatch = false; + break; + } + childNode = childNode.nextSibling; + } + // if childNode is not null, it means the actual childNodes list is + // longer than the virtual children list. + if (!childrenMatch || childNode) { + /* istanbul ignore if */ + if (typeof console !== 'undefined' && + !hydrationBailed) { + hydrationBailed = true; + console.warn('Parent: ', elm); + console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); + } + return false; + } + } + } + } + if (isDef(data)) { + var fullInvoke = false; + for (var key in data) { + if (!isRenderedModule(key)) { + fullInvoke = true; + invokeCreateHooks(vnode, insertedVnodeQueue); + break; + } + } + if (!fullInvoke && data['class']) { + // ensure collecting deps for deep class bindings for future updates + traverse(data['class']); + } + } + } + else if (elm.data !== vnode.text) { + elm.data = vnode.text; + } + return true; + } + function assertNodeMatch(node, vnode, inVPre) { + if (isDef(vnode.tag)) { + return (vnode.tag.indexOf('vue-component') === 0 || + (!isUnknownElement(vnode, inVPre) && + vnode.tag.toLowerCase() === + (node.tagName && node.tagName.toLowerCase()))); + } + else { + return node.nodeType === (vnode.isComment ? 8 : 3); + } + } + return function patch(oldVnode, vnode, hydrating, removeOnly) { + if (isUndef(vnode)) { + if (isDef(oldVnode)) + invokeDestroyHook(oldVnode); + return; + } + var isInitialPatch = false; + var insertedVnodeQueue = []; + if (isUndef(oldVnode)) { + // empty mount (likely as component), create new root element + isInitialPatch = true; + createElm(vnode, insertedVnodeQueue); + } + else { + var isRealElement = isDef(oldVnode.nodeType); + if (!isRealElement && sameVnode(oldVnode, vnode)) { + // patch existing root node + patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); + } + else { + if (isRealElement) { + // mounting to a real element + // check if this is server-rendered content and if we can perform + // a successful hydration. + if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { + oldVnode.removeAttribute(SSR_ATTR); + hydrating = true; + } + if (isTrue(hydrating)) { + if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { + invokeInsertHook(vnode, insertedVnodeQueue, true); + return oldVnode; + } + else { + warn$2('The client-side rendered virtual DOM tree is not matching ' + + 'server-rendered content. This is likely caused by incorrect ' + + 'HTML markup, for example nesting block-level elements inside ' + + '<p>, or missing <tbody>. Bailing hydration and performing ' + + 'full client-side render.'); + } + } + // either not server-rendered, or hydration failed. + // create an empty node and replace it + oldVnode = emptyNodeAt(oldVnode); + } + // replacing existing element + var oldElm = oldVnode.elm; + var parentElm = nodeOps.parentNode(oldElm); + // create new node + createElm(vnode, insertedVnodeQueue, + // extremely rare edge case: do not insert if old element is in a + // leaving transition. Only happens when combining transition + + // keep-alive + HOCs. (#4590) + oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)); + // update parent placeholder node element, recursively + if (isDef(vnode.parent)) { + var ancestor = vnode.parent; + var patchable = isPatchable(vnode); + while (ancestor) { + for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) { + cbs.destroy[i_8](ancestor); + } + ancestor.elm = vnode.elm; + if (patchable) { + for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) { + cbs.create[i_9](emptyNode, ancestor); + } + // #6513 + // invoke insert hooks that may have been merged by create hooks. + // e.g. for directives that uses the "inserted" hook. + var insert_1 = ancestor.data.hook.insert; + if (insert_1.merged) { + // start at index 1 to avoid re-invoking component mounted hook + for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) { + insert_1.fns[i_10](); + } + } + } + else { + registerRef(ancestor); + } + ancestor = ancestor.parent; + } + } + // destroy old node + if (isDef(parentElm)) { + removeVnodes([oldVnode], 0, 0); + } + else if (isDef(oldVnode.tag)) { + invokeDestroyHook(oldVnode); + } + } + } + invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); + return vnode.elm; + }; + } + + var directives$1 = { + create: updateDirectives, + update: updateDirectives, + destroy: function unbindDirectives(vnode) { + // @ts-expect-error emptyNode is not VNodeWithData + updateDirectives(vnode, emptyNode); + } + }; + function updateDirectives(oldVnode, vnode) { + if (oldVnode.data.directives || vnode.data.directives) { + _update(oldVnode, vnode); + } + } + function _update(oldVnode, vnode) { + var isCreate = oldVnode === emptyNode; + var isDestroy = vnode === emptyNode; + var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context); + var newDirs = normalizeDirectives(vnode.data.directives, vnode.context); + var dirsWithInsert = []; + var dirsWithPostpatch = []; + var key, oldDir, dir; + for (key in newDirs) { + oldDir = oldDirs[key]; + dir = newDirs[key]; + if (!oldDir) { + // new directive, bind + callHook(dir, 'bind', vnode, oldVnode); + if (dir.def && dir.def.inserted) { + dirsWithInsert.push(dir); + } + } + else { + // existing directive, update + dir.oldValue = oldDir.value; + dir.oldArg = oldDir.arg; + callHook(dir, 'update', vnode, oldVnode); + if (dir.def && dir.def.componentUpdated) { + dirsWithPostpatch.push(dir); + } + } + } + if (dirsWithInsert.length) { + var callInsert = function () { + for (var i = 0; i < dirsWithInsert.length; i++) { + callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode); + } + }; + if (isCreate) { + mergeVNodeHook(vnode, 'insert', callInsert); + } + else { + callInsert(); + } + } + if (dirsWithPostpatch.length) { + mergeVNodeHook(vnode, 'postpatch', function () { + for (var i = 0; i < dirsWithPostpatch.length; i++) { + callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); + } + }); + } + if (!isCreate) { + for (key in oldDirs) { + if (!newDirs[key]) { + // no longer present, unbind + callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); + } + } + } + } + var emptyModifiers = Object.create(null); + function normalizeDirectives(dirs, vm) { + var res = Object.create(null); + if (!dirs) { + // $flow-disable-line + return res; + } + var i, dir; + for (i = 0; i < dirs.length; i++) { + dir = dirs[i]; + if (!dir.modifiers) { + // $flow-disable-line + dir.modifiers = emptyModifiers; + } + res[getRawDirName(dir)] = dir; + if (vm._setupState && vm._setupState.__sfc) { + dir.def = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name); + } + dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true); + } + // $flow-disable-line + return res; + } + function getRawDirName(dir) { + return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.'))); + } + function callHook(dir, hook, vnode, oldVnode, isDestroy) { + var fn = dir.def && dir.def[hook]; + if (fn) { + try { + fn(vnode.elm, dir, vnode, oldVnode, isDestroy); + } + catch (e) { + handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook")); + } + } + } + + var baseModules = [ref, directives$1]; + + function updateAttrs(oldVnode, vnode) { + var opts = vnode.componentOptions; + if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { + return; + } + if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { + return; + } + var key, cur, old; + var elm = vnode.elm; + var oldAttrs = oldVnode.data.attrs || {}; + var attrs = vnode.data.attrs || {}; + // clone observed objects, as the user probably wants to mutate it + if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) { + attrs = vnode.data.attrs = extend({}, attrs); + } + for (key in attrs) { + cur = attrs[key]; + old = oldAttrs[key]; + if (old !== cur) { + setAttr(elm, key, cur, vnode.data.pre); + } + } + // #4391: in IE9, setting type can reset value for input[type=radio] + // #6666: IE/Edge forces progress value down to 1 before setting a max + /* istanbul ignore if */ + if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { + setAttr(elm, 'value', attrs.value); + } + for (key in oldAttrs) { + if (isUndef(attrs[key])) { + if (isXlink(key)) { + elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); + } + else if (!isEnumeratedAttr(key)) { + elm.removeAttribute(key); + } + } + } + } + function setAttr(el, key, value, isInPre) { + if (isInPre || el.tagName.indexOf('-') > -1) { + baseSetAttr(el, key, value); + } + else if (isBooleanAttr(key)) { + // set attribute for blank value + // e.g. <option disabled>Select one</option> + if (isFalsyAttrValue(value)) { + el.removeAttribute(key); + } + else { + // technically allowfullscreen is a boolean attribute for <iframe>, + // but Flash expects a value of "true" when used on <embed> tag + value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key; + el.setAttribute(key, value); + } + } + else if (isEnumeratedAttr(key)) { + el.setAttribute(key, convertEnumeratedValue(key, value)); + } + else if (isXlink(key)) { + if (isFalsyAttrValue(value)) { + el.removeAttributeNS(xlinkNS, getXlinkProp(key)); + } + else { + el.setAttributeNS(xlinkNS, key, value); + } + } + else { + baseSetAttr(el, key, value); + } + } + function baseSetAttr(el, key, value) { + if (isFalsyAttrValue(value)) { + el.removeAttribute(key); + } + else { + // #7138: IE10 & 11 fires input event when setting placeholder on + // <textarea>... block the first input event and remove the blocker + // immediately. + /* istanbul ignore if */ + if (isIE && + !isIE9 && + el.tagName === 'TEXTAREA' && + key === 'placeholder' && + value !== '' && + !el.__ieph) { + var blocker_1 = function (e) { + e.stopImmediatePropagation(); + el.removeEventListener('input', blocker_1); + }; + el.addEventListener('input', blocker_1); + // $flow-disable-line + el.__ieph = true; /* IE placeholder patched */ + } + el.setAttribute(key, value); + } + } + var attrs = { + create: updateAttrs, + update: updateAttrs + }; + + function updateClass(oldVnode, vnode) { + var el = vnode.elm; + var data = vnode.data; + var oldData = oldVnode.data; + if (isUndef(data.staticClass) && + isUndef(data.class) && + (isUndef(oldData) || + (isUndef(oldData.staticClass) && isUndef(oldData.class)))) { + return; + } + var cls = genClassForVnode(vnode); + // handle transition classes + var transitionClass = el._transitionClasses; + if (isDef(transitionClass)) { + cls = concat(cls, stringifyClass(transitionClass)); + } + // set the class + if (cls !== el._prevClass) { + el.setAttribute('class', cls); + el._prevClass = cls; + } + } + var klass$1 = { + create: updateClass, + update: updateClass + }; + + var validDivisionCharRE = /[\w).+\-_$\]]/; + function parseFilters(exp) { + var inSingle = false; + var inDouble = false; + var inTemplateString = false; + var inRegex = false; + var curly = 0; + var square = 0; + var paren = 0; + var lastFilterIndex = 0; + var c, prev, i, expression, filters; + for (i = 0; i < exp.length; i++) { + prev = c; + c = exp.charCodeAt(i); + if (inSingle) { + if (c === 0x27 && prev !== 0x5c) + inSingle = false; + } + else if (inDouble) { + if (c === 0x22 && prev !== 0x5c) + inDouble = false; + } + else if (inTemplateString) { + if (c === 0x60 && prev !== 0x5c) + inTemplateString = false; + } + else if (inRegex) { + if (c === 0x2f && prev !== 0x5c) + inRegex = false; + } + else if (c === 0x7c && // pipe + exp.charCodeAt(i + 1) !== 0x7c && + exp.charCodeAt(i - 1) !== 0x7c && + !curly && + !square && + !paren) { + if (expression === undefined) { + // first filter, end of expression + lastFilterIndex = i + 1; + expression = exp.slice(0, i).trim(); + } + else { + pushFilter(); + } + } + else { + switch (c) { + case 0x22: + inDouble = true; + break; // " + case 0x27: + inSingle = true; + break; // ' + case 0x60: + inTemplateString = true; + break; // ` + case 0x28: + paren++; + break; // ( + case 0x29: + paren--; + break; // ) + case 0x5b: + square++; + break; // [ + case 0x5d: + square--; + break; // ] + case 0x7b: + curly++; + break; // { + case 0x7d: + curly--; + break; // } + } + if (c === 0x2f) { + // / + var j = i - 1; + var p + // find first non-whitespace prev char + = void 0; + // find first non-whitespace prev char + for (; j >= 0; j--) { + p = exp.charAt(j); + if (p !== ' ') + break; + } + if (!p || !validDivisionCharRE.test(p)) { + inRegex = true; + } + } + } + } + if (expression === undefined) { + expression = exp.slice(0, i).trim(); + } + else if (lastFilterIndex !== 0) { + pushFilter(); + } + function pushFilter() { + (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); + lastFilterIndex = i + 1; + } + if (filters) { + for (i = 0; i < filters.length; i++) { + expression = wrapFilter(expression, filters[i]); + } + } + return expression; + } + function wrapFilter(exp, filter) { + var i = filter.indexOf('('); + if (i < 0) { + // _f: resolveFilter + return "_f(\"".concat(filter, "\")(").concat(exp, ")"); + } + else { + var name_1 = filter.slice(0, i); + var args = filter.slice(i + 1); + return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args); + } + } + + /* eslint-disable no-unused-vars */ + function baseWarn(msg, range) { + console.error("[Vue compiler]: ".concat(msg)); + } + /* eslint-enable no-unused-vars */ + function pluckModuleFunction(modules, key) { + return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : []; + } + function addProp(el, name, value, range, dynamic) { + (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); + el.plain = false; + } + function addAttr(el, name, value, range, dynamic) { + var attrs = dynamic + ? el.dynamicAttrs || (el.dynamicAttrs = []) + : el.attrs || (el.attrs = []); + attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)); + el.plain = false; + } + // add a raw attr (use this in preTransforms) + function addRawAttr(el, name, value, range) { + el.attrsMap[name] = value; + el.attrsList.push(rangeSetItem({ name: name, value: value }, range)); + } + function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { + (el.directives || (el.directives = [])).push(rangeSetItem({ + name: name, + rawName: rawName, + value: value, + arg: arg, + isDynamicArg: isDynamicArg, + modifiers: modifiers + }, range)); + el.plain = false; + } + function prependModifierMarker(symbol, name, dynamic) { + return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured + } + function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { + modifiers = modifiers || emptyObject; + // warn prevent and passive modifier + /* istanbul ignore if */ + if (warn && modifiers.prevent && modifiers.passive) { + warn("passive and prevent can't be used together. " + + "Passive handler can't prevent default event.", range); + } + // normalize click.right and click.middle since they don't actually fire + // this is technically browser-specific, but at least for now browsers are + // the only target envs that have right/middle clicks. + if (modifiers.right) { + if (dynamic) { + name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")"); + } + else if (name === 'click') { + name = 'contextmenu'; + delete modifiers.right; + } + } + else if (modifiers.middle) { + if (dynamic) { + name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")"); + } + else if (name === 'click') { + name = 'mouseup'; + } + } + // check capture modifier + if (modifiers.capture) { + delete modifiers.capture; + name = prependModifierMarker('!', name, dynamic); + } + if (modifiers.once) { + delete modifiers.once; + name = prependModifierMarker('~', name, dynamic); + } + /* istanbul ignore if */ + if (modifiers.passive) { + delete modifiers.passive; + name = prependModifierMarker('&', name, dynamic); + } + var events; + if (modifiers.native) { + delete modifiers.native; + events = el.nativeEvents || (el.nativeEvents = {}); + } + else { + events = el.events || (el.events = {}); + } + var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range); + if (modifiers !== emptyObject) { + newHandler.modifiers = modifiers; + } + var handlers = events[name]; + /* istanbul ignore if */ + if (Array.isArray(handlers)) { + important ? handlers.unshift(newHandler) : handlers.push(newHandler); + } + else if (handlers) { + events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; + } + else { + events[name] = newHandler; + } + el.plain = false; + } + function getRawBindingAttr(el, name) { + return (el.rawAttrsMap[':' + name] || + el.rawAttrsMap['v-bind:' + name] || + el.rawAttrsMap[name]); + } + function getBindingAttr(el, name, getStatic) { + var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name); + if (dynamicValue != null) { + return parseFilters(dynamicValue); + } + else if (getStatic !== false) { + var staticValue = getAndRemoveAttr(el, name); + if (staticValue != null) { + return JSON.stringify(staticValue); + } + } + } + // note: this only removes the attr from the Array (attrsList) so that it + // doesn't get processed by processAttrs. + // By default it does NOT remove it from the map (attrsMap) because the map is + // needed during codegen. + function getAndRemoveAttr(el, name, removeFromMap) { + var val; + if ((val = el.attrsMap[name]) != null) { + var list = el.attrsList; + for (var i = 0, l = list.length; i < l; i++) { + if (list[i].name === name) { + list.splice(i, 1); + break; + } + } + } + if (removeFromMap) { + delete el.attrsMap[name]; + } + return val; + } + function getAndRemoveAttrByRegex(el, name) { + var list = el.attrsList; + for (var i = 0, l = list.length; i < l; i++) { + var attr = list[i]; + if (name.test(attr.name)) { + list.splice(i, 1); + return attr; + } + } + } + function rangeSetItem(item, range) { + if (range) { + if (range.start != null) { + item.start = range.start; + } + if (range.end != null) { + item.end = range.end; + } + } + return item; + } + + /** + * Cross-platform code generation for component v-model + */ + function genComponentModel(el, value, modifiers) { + var _a = modifiers || {}, number = _a.number, trim = _a.trim; + var baseValueExpression = '$$v'; + var valueExpression = baseValueExpression; + if (trim) { + valueExpression = + "(typeof ".concat(baseValueExpression, " === 'string'") + + "? ".concat(baseValueExpression, ".trim()") + + ": ".concat(baseValueExpression, ")"); + } + if (number) { + valueExpression = "_n(".concat(valueExpression, ")"); + } + var assignment = genAssignmentCode(value, valueExpression); + el.model = { + value: "(".concat(value, ")"), + expression: JSON.stringify(value), + callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}") + }; + } + /** + * Cross-platform codegen helper for generating v-model value assignment code. + */ + function genAssignmentCode(value, assignment) { + var res = parseModel(value); + if (res.key === null) { + return "".concat(value, "=").concat(assignment); + } + else { + return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")"); + } + } + /** + * Parse a v-model expression into a base path and a final key segment. + * Handles both dot-path and possible square brackets. + * + * Possible cases: + * + * - test + * - test[key] + * - test[test1[key]] + * - test["a"][key] + * - xxx.test[a[a].test1[key]] + * - test.xxx.a["asa"][test1[key]] + * + */ + var len, str, chr, index, expressionPos, expressionEndPos; + function parseModel(val) { + // Fix https://github.com/vuejs/vue/pull/7730 + // allow v-model="obj.val " (trailing whitespace) + val = val.trim(); + len = val.length; + if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { + index = val.lastIndexOf('.'); + if (index > -1) { + return { + exp: val.slice(0, index), + key: '"' + val.slice(index + 1) + '"' + }; + } + else { + return { + exp: val, + key: null + }; + } + } + str = val; + index = expressionPos = expressionEndPos = 0; + while (!eof()) { + chr = next(); + /* istanbul ignore if */ + if (isStringStart(chr)) { + parseString(chr); + } + else if (chr === 0x5b) { + parseBracket(chr); + } + } + return { + exp: val.slice(0, expressionPos), + key: val.slice(expressionPos + 1, expressionEndPos) + }; + } + function next() { + return str.charCodeAt(++index); + } + function eof() { + return index >= len; + } + function isStringStart(chr) { + return chr === 0x22 || chr === 0x27; + } + function parseBracket(chr) { + var inBracket = 1; + expressionPos = index; + while (!eof()) { + chr = next(); + if (isStringStart(chr)) { + parseString(chr); + continue; + } + if (chr === 0x5b) + inBracket++; + if (chr === 0x5d) + inBracket--; + if (inBracket === 0) { + expressionEndPos = index; + break; + } + } + } + function parseString(chr) { + var stringQuote = chr; + while (!eof()) { + chr = next(); + if (chr === stringQuote) { + break; + } + } + } + + var warn$1; + // in some cases, the event used has to be determined at runtime + // so we used some reserved tokens during compile. + var RANGE_TOKEN = '__r'; + var CHECKBOX_RADIO_TOKEN = '__c'; + function model$1(el, dir, _warn) { + warn$1 = _warn; + var value = dir.value; + var modifiers = dir.modifiers; + var tag = el.tag; + var type = el.attrsMap.type; + { + // inputs with type="file" are read only and setting the input's + // value will throw an error. + if (tag === 'input' && type === 'file') { + warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") + + "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']); + } + } + if (el.component) { + genComponentModel(el, value, modifiers); + // component v-model doesn't need extra runtime + return false; + } + else if (tag === 'select') { + genSelect(el, value, modifiers); + } + else if (tag === 'input' && type === 'checkbox') { + genCheckboxModel(el, value, modifiers); + } + else if (tag === 'input' && type === 'radio') { + genRadioModel(el, value, modifiers); + } + else if (tag === 'input' || tag === 'textarea') { + genDefaultModel(el, value, modifiers); + } + else if (!config.isReservedTag(tag)) { + genComponentModel(el, value, modifiers); + // component v-model doesn't need extra runtime + return false; + } + else { + warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + + "v-model is not supported on this element type. " + + "If you are working with contenteditable, it's recommended to " + + 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']); + } + // ensure runtime directive metadata + return true; + } + function genCheckboxModel(el, value, modifiers) { + var number = modifiers && modifiers.number; + var valueBinding = getBindingAttr(el, 'value') || 'null'; + var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; + var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; + addProp(el, 'checked', "Array.isArray(".concat(value, ")") + + "?_i(".concat(value, ",").concat(valueBinding, ")>-1") + + (trueValueBinding === 'true' + ? ":(".concat(value, ")") + : ":_q(".concat(value, ",").concat(trueValueBinding, ")"))); + addHandler(el, 'change', "var $$a=".concat(value, ",") + + '$$el=$event.target,' + + "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") + + 'if(Array.isArray($$a)){' + + "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") + + '$$i=_i($$a,$$v);' + + "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") + + "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") + + "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true); + } + function genRadioModel(el, value, modifiers) { + var number = modifiers && modifiers.number; + var valueBinding = getBindingAttr(el, 'value') || 'null'; + valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding; + addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")")); + addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); + } + function genSelect(el, value, modifiers) { + var number = modifiers && modifiers.number; + var selectedVal = "Array.prototype.filter" + + ".call($event.target.options,function(o){return o.selected})" + + ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + + "return ".concat(number ? '_n(val)' : 'val', "})"); + var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; + var code = "var $$selectedVal = ".concat(selectedVal, ";"); + code = "".concat(code, " ").concat(genAssignmentCode(value, assignment)); + addHandler(el, 'change', code, null, true); + } + function genDefaultModel(el, value, modifiers) { + var type = el.attrsMap.type; + // warn if v-bind:value conflicts with v-model + // except for inputs with v-bind:type + { + var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; + var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; + if (value_1 && !typeBinding) { + var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; + warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") + + 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]); + } + } + var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim; + var needCompositionGuard = !lazy && type !== 'range'; + var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'; + var valueExpression = '$event.target.value'; + if (trim) { + valueExpression = "$event.target.value.trim()"; + } + if (number) { + valueExpression = "_n(".concat(valueExpression, ")"); + } + var code = genAssignmentCode(value, valueExpression); + if (needCompositionGuard) { + code = "if($event.target.composing)return;".concat(code); + } + addProp(el, 'value', "(".concat(value, ")")); + addHandler(el, event, code, null, true); + if (trim || number) { + addHandler(el, 'blur', '$forceUpdate()'); + } + } + + // normalize v-model event tokens that can only be determined at runtime. + // it's important to place the event as the first in the array because + // the whole point is ensuring the v-model callback gets called before + // user-attached handlers. + function normalizeEvents(on) { + /* istanbul ignore if */ + if (isDef(on[RANGE_TOKEN])) { + // IE input[type=range] only supports `change` event + var event_1 = isIE ? 'change' : 'input'; + on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []); + delete on[RANGE_TOKEN]; + } + // This was originally intended to fix #4521 but no longer necessary + // after 2.5. Keeping it for backwards compat with generated code from < 2.4 + /* istanbul ignore if */ + if (isDef(on[CHECKBOX_RADIO_TOKEN])) { + on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); + delete on[CHECKBOX_RADIO_TOKEN]; + } + } + var target; + function createOnceHandler(event, handler, capture) { + var _target = target; // save current target element in closure + return function onceHandler() { + var res = handler.apply(null, arguments); + if (res !== null) { + remove(event, onceHandler, capture, _target); + } + }; + } + // #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp + // implementation and does not fire microtasks in between event propagation, so + // safe to exclude. + var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); + function add(name, handler, capture, passive) { + // async edge case #6566: inner click event triggers patch, event handler + // attached to outer element during patch, and triggered again. This + // happens because browsers fire microtask ticks between event propagation. + // the solution is simple: we save the timestamp when a handler is attached, + // and the handler would only fire if the event passed to it was fired + // AFTER it was attached. + if (useMicrotaskFix) { + var attachedTimestamp_1 = currentFlushTimestamp; + var original_1 = handler; + //@ts-expect-error + handler = original_1._wrapper = function (e) { + if ( + // no bubbling, should always fire. + // this is just a safety net in case event.timeStamp is unreliable in + // certain weird environments... + e.target === e.currentTarget || + // event is fired after handler attachment + e.timeStamp >= attachedTimestamp_1 || + // bail for environments that have buggy event.timeStamp implementations + // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState + // #9681 QtWebEngine event.timeStamp is negative value + e.timeStamp <= 0 || + // #9448 bail if event is fired in another document in a multi-page + // electron/nw.js app, since event.timeStamp will be using a different + // starting reference + e.target.ownerDocument !== document) { + return original_1.apply(this, arguments); + } + }; + } + target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture); + } + function remove(name, handler, capture, _target) { + (_target || target).removeEventListener(name, + //@ts-expect-error + handler._wrapper || handler, capture); + } + function updateDOMListeners(oldVnode, vnode) { + if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { + return; + } + var on = vnode.data.on || {}; + var oldOn = oldVnode.data.on || {}; + // vnode is empty when removing all listeners, + // and use old vnode dom element + target = vnode.elm || oldVnode.elm; + normalizeEvents(on); + updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context); + target = undefined; + } + var events = { + create: updateDOMListeners, + update: updateDOMListeners, + // @ts-expect-error emptyNode has actually data + destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); } + }; + + var svgContainer; + function updateDOMProps(oldVnode, vnode) { + if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { + return; + } + var key, cur; + var elm = vnode.elm; + var oldProps = oldVnode.data.domProps || {}; + var props = vnode.data.domProps || {}; + // clone observed objects, as the user probably wants to mutate it + if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) { + props = vnode.data.domProps = extend({}, props); + } + for (key in oldProps) { + if (!(key in props)) { + elm[key] = ''; + } + } + for (key in props) { + cur = props[key]; + // ignore children if the node has textContent or innerHTML, + // as these will throw away existing DOM nodes and cause removal errors + // on subsequent patches (#3360) + if (key === 'textContent' || key === 'innerHTML') { + if (vnode.children) + vnode.children.length = 0; + if (cur === oldProps[key]) + continue; + // #6601 work around Chrome version <= 55 bug where single textNode + // replaced by innerHTML/textContent retains its parentNode property + if (elm.childNodes.length === 1) { + elm.removeChild(elm.childNodes[0]); + } + } + if (key === 'value' && elm.tagName !== 'PROGRESS') { + // store value as _value as well since + // non-string values will be stringified + elm._value = cur; + // avoid resetting cursor position when value is the same + var strCur = isUndef(cur) ? '' : String(cur); + if (shouldUpdateValue(elm, strCur)) { + elm.value = strCur; + } + } + else if (key === 'innerHTML' && + isSVG(elm.tagName) && + isUndef(elm.innerHTML)) { + // IE doesn't support innerHTML for SVG elements + svgContainer = svgContainer || document.createElement('div'); + svgContainer.innerHTML = "<svg>".concat(cur, "</svg>"); + var svg = svgContainer.firstChild; + while (elm.firstChild) { + elm.removeChild(elm.firstChild); + } + while (svg.firstChild) { + elm.appendChild(svg.firstChild); + } + } + else if ( + // skip the update if old and new VDOM state is the same. + // `value` is handled separately because the DOM value may be temporarily + // out of sync with VDOM state due to focus, composition and modifiers. + // This #4521 by skipping the unnecessary `checked` update. + cur !== oldProps[key]) { + // some property updates can throw + // e.g. `value` on <progress> w/ non-finite value + try { + elm[key] = cur; + } + catch (e) { } + } + } + } + function shouldUpdateValue(elm, checkVal) { + return ( + //@ts-expect-error + !elm.composing && + (elm.tagName === 'OPTION' || + isNotInFocusAndDirty(elm, checkVal) || + isDirtyWithModifiers(elm, checkVal))); + } + function isNotInFocusAndDirty(elm, checkVal) { + // return true when textbox (.number and .trim) loses focus and its value is + // not equal to the updated value + var notInFocus = true; + // #6157 + // work around IE bug when accessing document.activeElement in an iframe + try { + notInFocus = document.activeElement !== elm; + } + catch (e) { } + return notInFocus && elm.value !== checkVal; + } + function isDirtyWithModifiers(elm, newVal) { + var value = elm.value; + var modifiers = elm._vModifiers; // injected by v-model runtime + if (isDef(modifiers)) { + if (modifiers.number) { + return toNumber(value) !== toNumber(newVal); + } + if (modifiers.trim) { + return value.trim() !== newVal.trim(); + } + } + return value !== newVal; + } + var domProps = { + create: updateDOMProps, + update: updateDOMProps + }; + + var parseStyleText = cached(function (cssText) { + var res = {}; + var listDelimiter = /;(?![^(]*\))/g; + var propertyDelimiter = /:(.+)/; + cssText.split(listDelimiter).forEach(function (item) { + if (item) { + var tmp = item.split(propertyDelimiter); + tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); + } + }); + return res; + }); + // merge static and dynamic style data on the same vnode + function normalizeStyleData(data) { + var style = normalizeStyleBinding(data.style); + // static style is pre-processed into an object during compilation + // and is always a fresh object, so it's safe to merge into it + return data.staticStyle ? extend(data.staticStyle, style) : style; + } + // normalize possible array / string values into Object + function normalizeStyleBinding(bindingStyle) { + if (Array.isArray(bindingStyle)) { + return toObject(bindingStyle); + } + if (typeof bindingStyle === 'string') { + return parseStyleText(bindingStyle); + } + return bindingStyle; + } + /** + * parent component style should be after child's + * so that parent component's style could override it + */ + function getStyle(vnode, checkChild) { + var res = {}; + var styleData; + if (checkChild) { + var childNode = vnode; + while (childNode.componentInstance) { + childNode = childNode.componentInstance._vnode; + if (childNode && + childNode.data && + (styleData = normalizeStyleData(childNode.data))) { + extend(res, styleData); + } + } + } + if ((styleData = normalizeStyleData(vnode.data))) { + extend(res, styleData); + } + var parentNode = vnode; + // @ts-expect-error parentNode.parent not VNodeWithData + while ((parentNode = parentNode.parent)) { + if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { + extend(res, styleData); + } + } + return res; + } + + var cssVarRE = /^--/; + var importantRE = /\s*!important$/; + var setProp = function (el, name, val) { + /* istanbul ignore if */ + if (cssVarRE.test(name)) { + el.style.setProperty(name, val); + } + else if (importantRE.test(val)) { + el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); + } + else { + var normalizedName = normalize(name); + if (Array.isArray(val)) { + // Support values array created by autoprefixer, e.g. + // {display: ["-webkit-box", "-ms-flexbox", "flex"]} + // Set them one by one, and the browser will only set those it can recognize + for (var i = 0, len = val.length; i < len; i++) { + el.style[normalizedName] = val[i]; + } + } + else { + el.style[normalizedName] = val; + } + } + }; + var vendorNames = ['Webkit', 'Moz', 'ms']; + var emptyStyle; + var normalize = cached(function (prop) { + emptyStyle = emptyStyle || document.createElement('div').style; + prop = camelize(prop); + if (prop !== 'filter' && prop in emptyStyle) { + return prop; + } + var capName = prop.charAt(0).toUpperCase() + prop.slice(1); + for (var i = 0; i < vendorNames.length; i++) { + var name_1 = vendorNames[i] + capName; + if (name_1 in emptyStyle) { + return name_1; + } + } + }); + function updateStyle(oldVnode, vnode) { + var data = vnode.data; + var oldData = oldVnode.data; + if (isUndef(data.staticStyle) && + isUndef(data.style) && + isUndef(oldData.staticStyle) && + isUndef(oldData.style)) { + return; + } + var cur, name; + var el = vnode.elm; + var oldStaticStyle = oldData.staticStyle; + var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; + // if static style exists, stylebinding already merged into it when doing normalizeStyleData + var oldStyle = oldStaticStyle || oldStyleBinding; + var style = normalizeStyleBinding(vnode.data.style) || {}; + // store normalized style under a different key for next diff + // make sure to clone it if it's reactive, since the user likely wants + // to mutate it. + vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; + var newStyle = getStyle(vnode, true); + for (name in oldStyle) { + if (isUndef(newStyle[name])) { + setProp(el, name, ''); + } + } + for (name in newStyle) { + cur = newStyle[name]; + if (cur !== oldStyle[name]) { + // ie9 setting to null has no effect, must use empty string + setProp(el, name, cur == null ? '' : cur); + } + } + } + var style$1 = { + create: updateStyle, + update: updateStyle + }; + + var whitespaceRE$1 = /\s+/; + /** + * Add class with compatibility for SVG since classList is not supported on + * SVG elements in IE + */ + function addClass(el, cls) { + /* istanbul ignore if */ + if (!cls || !(cls = cls.trim())) { + return; + } + /* istanbul ignore else */ + if (el.classList) { + if (cls.indexOf(' ') > -1) { + cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); }); + } + else { + el.classList.add(cls); + } + } + else { + var cur = " ".concat(el.getAttribute('class') || '', " "); + if (cur.indexOf(' ' + cls + ' ') < 0) { + el.setAttribute('class', (cur + cls).trim()); + } + } + } + /** + * Remove class with compatibility for SVG since classList is not supported on + * SVG elements in IE + */ + function removeClass(el, cls) { + /* istanbul ignore if */ + if (!cls || !(cls = cls.trim())) { + return; + } + /* istanbul ignore else */ + if (el.classList) { + if (cls.indexOf(' ') > -1) { + cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); }); + } + else { + el.classList.remove(cls); + } + if (!el.classList.length) { + el.removeAttribute('class'); + } + } + else { + var cur = " ".concat(el.getAttribute('class') || '', " "); + var tar = ' ' + cls + ' '; + while (cur.indexOf(tar) >= 0) { + cur = cur.replace(tar, ' '); + } + cur = cur.trim(); + if (cur) { + el.setAttribute('class', cur); + } + else { + el.removeAttribute('class'); + } + } + } + + function resolveTransition(def) { + if (!def) { + return; + } + /* istanbul ignore else */ + if (typeof def === 'object') { + var res = {}; + if (def.css !== false) { + extend(res, autoCssTransition(def.name || 'v')); + } + extend(res, def); + return res; + } + else if (typeof def === 'string') { + return autoCssTransition(def); + } + } + var autoCssTransition = cached(function (name) { + return { + enterClass: "".concat(name, "-enter"), + enterToClass: "".concat(name, "-enter-to"), + enterActiveClass: "".concat(name, "-enter-active"), + leaveClass: "".concat(name, "-leave"), + leaveToClass: "".concat(name, "-leave-to"), + leaveActiveClass: "".concat(name, "-leave-active") + }; + }); + var hasTransition = inBrowser && !isIE9; + var TRANSITION = 'transition'; + var ANIMATION = 'animation'; + // Transition property/event sniffing + var transitionProp = 'transition'; + var transitionEndEvent = 'transitionend'; + var animationProp = 'animation'; + var animationEndEvent = 'animationend'; + if (hasTransition) { + /* istanbul ignore if */ + if (window.ontransitionend === undefined && + window.onwebkittransitionend !== undefined) { + transitionProp = 'WebkitTransition'; + transitionEndEvent = 'webkitTransitionEnd'; + } + if (window.onanimationend === undefined && + window.onwebkitanimationend !== undefined) { + animationProp = 'WebkitAnimation'; + animationEndEvent = 'webkitAnimationEnd'; + } + } + // binding to window is necessary to make hot reload work in IE in strict mode + var raf = inBrowser + ? window.requestAnimationFrame + ? window.requestAnimationFrame.bind(window) + : setTimeout + : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); }; + function nextFrame(fn) { + raf(function () { + // @ts-expect-error + raf(fn); + }); + } + function addTransitionClass(el, cls) { + var transitionClasses = el._transitionClasses || (el._transitionClasses = []); + if (transitionClasses.indexOf(cls) < 0) { + transitionClasses.push(cls); + addClass(el, cls); + } + } + function removeTransitionClass(el, cls) { + if (el._transitionClasses) { + remove$2(el._transitionClasses, cls); + } + removeClass(el, cls); + } + function whenTransitionEnds(el, expectedType, cb) { + var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount; + if (!type) + return cb(); + var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; + var ended = 0; + var end = function () { + el.removeEventListener(event, onEnd); + cb(); + }; + var onEnd = function (e) { + if (e.target === el) { + if (++ended >= propCount) { + end(); + } + } + }; + setTimeout(function () { + if (ended < propCount) { + end(); + } + }, timeout + 1); + el.addEventListener(event, onEnd); + } + var transformRE = /\b(transform|all)(,|$)/; + function getTransitionInfo(el, expectedType) { + var styles = window.getComputedStyle(el); + // JSDOM may return undefined for transition properties + var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); + var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); + var transitionTimeout = getTimeout(transitionDelays, transitionDurations); + var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); + var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); + var animationTimeout = getTimeout(animationDelays, animationDurations); + var type; + var timeout = 0; + var propCount = 0; + /* istanbul ignore if */ + if (expectedType === TRANSITION) { + if (transitionTimeout > 0) { + type = TRANSITION; + timeout = transitionTimeout; + propCount = transitionDurations.length; + } + } + else if (expectedType === ANIMATION) { + if (animationTimeout > 0) { + type = ANIMATION; + timeout = animationTimeout; + propCount = animationDurations.length; + } + } + else { + timeout = Math.max(transitionTimeout, animationTimeout); + type = + timeout > 0 + ? transitionTimeout > animationTimeout + ? TRANSITION + : ANIMATION + : null; + propCount = type + ? type === TRANSITION + ? transitionDurations.length + : animationDurations.length + : 0; + } + var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']); + return { + type: type, + timeout: timeout, + propCount: propCount, + hasTransform: hasTransform + }; + } + function getTimeout(delays, durations) { + /* istanbul ignore next */ + while (delays.length < durations.length) { + delays = delays.concat(delays); + } + return Math.max.apply(null, durations.map(function (d, i) { + return toMs(d) + toMs(delays[i]); + })); + } + // Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers + // in a locale-dependent way, using a comma instead of a dot. + // If comma is not replaced with a dot, the input will be rounded down (i.e. acting + // as a floor function) causing unexpected behaviors + function toMs(s) { + return Number(s.slice(0, -1).replace(',', '.')) * 1000; + } + + function enter(vnode, toggleDisplay) { + var el = vnode.elm; + // call leave callback now + if (isDef(el._leaveCb)) { + el._leaveCb.cancelled = true; + el._leaveCb(); + } + var data = resolveTransition(vnode.data.transition); + if (isUndef(data)) { + return; + } + /* istanbul ignore if */ + if (isDef(el._enterCb) || el.nodeType !== 1) { + return; + } + var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration; + // activeInstance will always be the <transition> component managing this + // transition. One edge case to check is when the <transition> is placed + // as the root node of a child component. In that case we need to check + // <transition>'s parent for appear check. + var context = activeInstance; + var transitionNode = activeInstance.$vnode; + while (transitionNode && transitionNode.parent) { + context = transitionNode.context; + transitionNode = transitionNode.parent; + } + var isAppear = !context._isMounted || !vnode.isRootInsert; + if (isAppear && !appear && appear !== '') { + return; + } + var startClass = isAppear && appearClass ? appearClass : enterClass; + var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass; + var toClass = isAppear && appearToClass ? appearToClass : enterToClass; + var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter; + var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter; + var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter; + var enterCancelledHook = isAppear + ? appearCancelled || enterCancelled + : enterCancelled; + var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); + if (explicitEnterDuration != null) { + checkDuration(explicitEnterDuration, 'enter', vnode); + } + var expectsCSS = css !== false && !isIE9; + var userWantsControl = getHookArgumentsLength(enterHook); + var cb = (el._enterCb = once(function () { + if (expectsCSS) { + removeTransitionClass(el, toClass); + removeTransitionClass(el, activeClass); + } + // @ts-expect-error + if (cb.cancelled) { + if (expectsCSS) { + removeTransitionClass(el, startClass); + } + enterCancelledHook && enterCancelledHook(el); + } + else { + afterEnterHook && afterEnterHook(el); + } + el._enterCb = null; + })); + if (!vnode.data.show) { + // remove pending leave element on enter by injecting an insert hook + mergeVNodeHook(vnode, 'insert', function () { + var parent = el.parentNode; + var pendingNode = parent && parent._pending && parent._pending[vnode.key]; + if (pendingNode && + pendingNode.tag === vnode.tag && + pendingNode.elm._leaveCb) { + pendingNode.elm._leaveCb(); + } + enterHook && enterHook(el, cb); + }); + } + // start enter transition + beforeEnterHook && beforeEnterHook(el); + if (expectsCSS) { + addTransitionClass(el, startClass); + addTransitionClass(el, activeClass); + nextFrame(function () { + removeTransitionClass(el, startClass); + // @ts-expect-error + if (!cb.cancelled) { + addTransitionClass(el, toClass); + if (!userWantsControl) { + if (isValidDuration(explicitEnterDuration)) { + setTimeout(cb, explicitEnterDuration); + } + else { + whenTransitionEnds(el, type, cb); + } + } + } + }); + } + if (vnode.data.show) { + toggleDisplay && toggleDisplay(); + enterHook && enterHook(el, cb); + } + if (!expectsCSS && !userWantsControl) { + cb(); + } + } + function leave(vnode, rm) { + var el = vnode.elm; + // call enter callback now + if (isDef(el._enterCb)) { + el._enterCb.cancelled = true; + el._enterCb(); + } + var data = resolveTransition(vnode.data.transition); + if (isUndef(data) || el.nodeType !== 1) { + return rm(); + } + /* istanbul ignore if */ + if (isDef(el._leaveCb)) { + return; + } + var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration; + var expectsCSS = css !== false && !isIE9; + var userWantsControl = getHookArgumentsLength(leave); + var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); + if (isDef(explicitLeaveDuration)) { + checkDuration(explicitLeaveDuration, 'leave', vnode); + } + var cb = (el._leaveCb = once(function () { + if (el.parentNode && el.parentNode._pending) { + el.parentNode._pending[vnode.key] = null; + } + if (expectsCSS) { + removeTransitionClass(el, leaveToClass); + removeTransitionClass(el, leaveActiveClass); + } + // @ts-expect-error + if (cb.cancelled) { + if (expectsCSS) { + removeTransitionClass(el, leaveClass); + } + leaveCancelled && leaveCancelled(el); + } + else { + rm(); + afterLeave && afterLeave(el); + } + el._leaveCb = null; + })); + if (delayLeave) { + delayLeave(performLeave); + } + else { + performLeave(); + } + function performLeave() { + // the delayed leave may have already been cancelled + // @ts-expect-error + if (cb.cancelled) { + return; + } + // record leaving element + if (!vnode.data.show && el.parentNode) { + (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = + vnode; + } + beforeLeave && beforeLeave(el); + if (expectsCSS) { + addTransitionClass(el, leaveClass); + addTransitionClass(el, leaveActiveClass); + nextFrame(function () { + removeTransitionClass(el, leaveClass); + // @ts-expect-error + if (!cb.cancelled) { + addTransitionClass(el, leaveToClass); + if (!userWantsControl) { + if (isValidDuration(explicitLeaveDuration)) { + setTimeout(cb, explicitLeaveDuration); + } + else { + whenTransitionEnds(el, type, cb); + } + } + } + }); + } + leave && leave(el, cb); + if (!expectsCSS && !userWantsControl) { + cb(); + } + } + } + // only used in dev mode + function checkDuration(val, name, vnode) { + if (typeof val !== 'number') { + warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") + + "got ".concat(JSON.stringify(val), "."), vnode.context); + } + else if (isNaN(val)) { + warn$2("<transition> explicit ".concat(name, " duration is NaN - ") + + 'the duration expression might be incorrect.', vnode.context); + } + } + function isValidDuration(val) { + return typeof val === 'number' && !isNaN(val); + } + /** + * Normalize a transition hook's argument length. The hook may be: + * - a merged hook (invoker) with the original in .fns + * - a wrapped component method (check ._length) + * - a plain function (.length) + */ + function getHookArgumentsLength(fn) { + if (isUndef(fn)) { + return false; + } + // @ts-expect-error + var invokerFns = fn.fns; + if (isDef(invokerFns)) { + // invoker + return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns); + } + else { + // @ts-expect-error + return (fn._length || fn.length) > 1; + } + } + function _enter(_, vnode) { + if (vnode.data.show !== true) { + enter(vnode); + } + } + var transition = inBrowser + ? { + create: _enter, + activate: _enter, + remove: function (vnode, rm) { + /* istanbul ignore else */ + if (vnode.data.show !== true) { + // @ts-expect-error + leave(vnode, rm); + } + else { + rm(); + } + } + } + : {}; + + var platformModules = [attrs, klass$1, events, domProps, style$1, transition]; + + // the directive module should be applied last, after all + // built-in modules have been applied. + var modules$1 = platformModules.concat(baseModules); + var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 }); + + /** + * Not type checking this file because flow doesn't like attaching + * properties to Elements. + */ + /* istanbul ignore if */ + if (isIE9) { + // http://www.matts411.com/post/internet-explorer-9-oninput/ + document.addEventListener('selectionchange', function () { + var el = document.activeElement; + // @ts-expect-error + if (el && el.vmodel) { + trigger(el, 'input'); + } + }); + } + var directive = { + inserted: function (el, binding, vnode, oldVnode) { + if (vnode.tag === 'select') { + // #6903 + if (oldVnode.elm && !oldVnode.elm._vOptions) { + mergeVNodeHook(vnode, 'postpatch', function () { + directive.componentUpdated(el, binding, vnode); + }); + } + else { + setSelected(el, binding, vnode.context); + } + el._vOptions = [].map.call(el.options, getValue); + } + else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { + el._vModifiers = binding.modifiers; + if (!binding.modifiers.lazy) { + el.addEventListener('compositionstart', onCompositionStart); + el.addEventListener('compositionend', onCompositionEnd); + // Safari < 10.2 & UIWebView doesn't fire compositionend when + // switching focus before confirming composition choice + // this also fixes the issue where some browsers e.g. iOS Chrome + // fires "change" instead of "input" on autocomplete. + el.addEventListener('change', onCompositionEnd); + /* istanbul ignore if */ + if (isIE9) { + el.vmodel = true; + } + } + } + }, + componentUpdated: function (el, binding, vnode) { + if (vnode.tag === 'select') { + setSelected(el, binding, vnode.context); + // in case the options rendered by v-for have changed, + // it's possible that the value is out-of-sync with the rendered options. + // detect such cases and filter out values that no longer has a matching + // option in the DOM. + var prevOptions_1 = el._vOptions; + var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue)); + if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) { + // trigger change event if + // no matching option found for at least one value + var needReset = el.multiple + ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); }) + : binding.value !== binding.oldValue && + hasNoMatchingOption(binding.value, curOptions_1); + if (needReset) { + trigger(el, 'change'); + } + } + } + } + }; + function setSelected(el, binding, vm) { + actuallySetSelected(el, binding, vm); + /* istanbul ignore if */ + if (isIE || isEdge) { + setTimeout(function () { + actuallySetSelected(el, binding, vm); + }, 0); + } + } + function actuallySetSelected(el, binding, vm) { + var value = binding.value; + var isMultiple = el.multiple; + if (isMultiple && !Array.isArray(value)) { + warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") + + "expects an Array value for its binding, but got ".concat(Object.prototype.toString + .call(value) + .slice(8, -1)), vm); + return; + } + var selected, option; + for (var i = 0, l = el.options.length; i < l; i++) { + option = el.options[i]; + if (isMultiple) { + selected = looseIndexOf(value, getValue(option)) > -1; + if (option.selected !== selected) { + option.selected = selected; + } + } + else { + if (looseEqual(getValue(option), value)) { + if (el.selectedIndex !== i) { + el.selectedIndex = i; + } + return; + } + } + } + if (!isMultiple) { + el.selectedIndex = -1; + } + } + function hasNoMatchingOption(value, options) { + return options.every(function (o) { return !looseEqual(o, value); }); + } + function getValue(option) { + return '_value' in option ? option._value : option.value; + } + function onCompositionStart(e) { + e.target.composing = true; + } + function onCompositionEnd(e) { + // prevent triggering an input event for no reason + if (!e.target.composing) + return; + e.target.composing = false; + trigger(e.target, 'input'); + } + function trigger(el, type) { + var e = document.createEvent('HTMLEvents'); + e.initEvent(type, true, true); + el.dispatchEvent(e); + } + + // recursively search for possible transition defined inside the component root + function locateNode(vnode) { + // @ts-expect-error + return vnode.componentInstance && (!vnode.data || !vnode.data.transition) + ? locateNode(vnode.componentInstance._vnode) + : vnode; + } + var show = { + bind: function (el, _a, vnode) { + var value = _a.value; + vnode = locateNode(vnode); + var transition = vnode.data && vnode.data.transition; + var originalDisplay = (el.__vOriginalDisplay = + el.style.display === 'none' ? '' : el.style.display); + if (value && transition) { + vnode.data.show = true; + enter(vnode, function () { + el.style.display = originalDisplay; + }); + } + else { + el.style.display = value ? originalDisplay : 'none'; + } + }, + update: function (el, _a, vnode) { + var value = _a.value, oldValue = _a.oldValue; + /* istanbul ignore if */ + if (!value === !oldValue) + return; + vnode = locateNode(vnode); + var transition = vnode.data && vnode.data.transition; + if (transition) { + vnode.data.show = true; + if (value) { + enter(vnode, function () { + el.style.display = el.__vOriginalDisplay; + }); + } + else { + leave(vnode, function () { + el.style.display = 'none'; + }); + } + } + else { + el.style.display = value ? el.__vOriginalDisplay : 'none'; + } + }, + unbind: function (el, binding, vnode, oldVnode, isDestroy) { + if (!isDestroy) { + el.style.display = el.__vOriginalDisplay; + } + } + }; + + var platformDirectives = { + model: directive, + show: show + }; + + // Provides transition support for a single element/component. + var transitionProps = { + name: String, + appear: Boolean, + css: Boolean, + mode: String, + type: String, + enterClass: String, + leaveClass: String, + enterToClass: String, + leaveToClass: String, + enterActiveClass: String, + leaveActiveClass: String, + appearClass: String, + appearActiveClass: String, + appearToClass: String, + duration: [Number, String, Object] + }; + // in case the child is also an abstract component, e.g. <keep-alive> + // we want to recursively retrieve the real component to be rendered + function getRealChild(vnode) { + var compOptions = vnode && vnode.componentOptions; + if (compOptions && compOptions.Ctor.options.abstract) { + return getRealChild(getFirstComponentChild(compOptions.children)); + } + else { + return vnode; + } + } + function extractTransitionData(comp) { + var data = {}; + var options = comp.$options; + // props + for (var key in options.propsData) { + data[key] = comp[key]; + } + // events. + // extract listeners and pass them directly to the transition methods + var listeners = options._parentListeners; + for (var key in listeners) { + data[camelize(key)] = listeners[key]; + } + return data; + } + function placeholder(h, rawChild) { + // @ts-expect-error + if (/\d-keep-alive$/.test(rawChild.tag)) { + return h('keep-alive', { + props: rawChild.componentOptions.propsData + }); + } + } + function hasParentTransition(vnode) { + while ((vnode = vnode.parent)) { + if (vnode.data.transition) { + return true; + } + } + } + function isSameChild(child, oldChild) { + return oldChild.key === child.key && oldChild.tag === child.tag; + } + var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); }; + var isVShowDirective = function (d) { return d.name === 'show'; }; + var Transition = { + name: 'transition', + props: transitionProps, + abstract: true, + render: function (h) { + var _this = this; + var children = this.$slots.default; + if (!children) { + return; + } + // filter out text nodes (possible whitespaces) + children = children.filter(isNotTextNode); + /* istanbul ignore if */ + if (!children.length) { + return; + } + // warn multiple elements + if (children.length > 1) { + warn$2('<transition> can only be used on a single element. Use ' + + '<transition-group> for lists.', this.$parent); + } + var mode = this.mode; + // warn invalid mode + if (mode && mode !== 'in-out' && mode !== 'out-in') { + warn$2('invalid <transition> mode: ' + mode, this.$parent); + } + var rawChild = children[0]; + // if this is a component root node and the component's + // parent container node also has transition, skip. + if (hasParentTransition(this.$vnode)) { + return rawChild; + } + // apply transition data to child + // use getRealChild() to ignore abstract components e.g. keep-alive + var child = getRealChild(rawChild); + /* istanbul ignore if */ + if (!child) { + return rawChild; + } + if (this._leaving) { + return placeholder(h, rawChild); + } + // ensure a key that is unique to the vnode type and to this transition + // component instance. This key will be used to remove pending leaving nodes + // during entering. + var id = "__transition-".concat(this._uid, "-"); + child.key = + child.key == null + ? child.isComment + ? id + 'comment' + : id + child.tag + : isPrimitive(child.key) + ? String(child.key).indexOf(id) === 0 + ? child.key + : id + child.key + : child.key; + var data = ((child.data || (child.data = {})).transition = + extractTransitionData(this)); + var oldRawChild = this._vnode; + var oldChild = getRealChild(oldRawChild); + // mark v-show + // so that the transition module can hand over the control to the directive + if (child.data.directives && child.data.directives.some(isVShowDirective)) { + child.data.show = true; + } + if (oldChild && + oldChild.data && + !isSameChild(child, oldChild) && + !isAsyncPlaceholder(oldChild) && + // #6687 component root is a comment node + !(oldChild.componentInstance && + oldChild.componentInstance._vnode.isComment)) { + // replace old child transition data with fresh one + // important for dynamic transitions! + var oldData = (oldChild.data.transition = extend({}, data)); + // handle transition mode + if (mode === 'out-in') { + // return placeholder node and queue update when leave finishes + this._leaving = true; + mergeVNodeHook(oldData, 'afterLeave', function () { + _this._leaving = false; + _this.$forceUpdate(); + }); + return placeholder(h, rawChild); + } + else if (mode === 'in-out') { + if (isAsyncPlaceholder(child)) { + return oldRawChild; + } + var delayedLeave_1; + var performLeave = function () { + delayedLeave_1(); + }; + mergeVNodeHook(data, 'afterEnter', performLeave); + mergeVNodeHook(data, 'enterCancelled', performLeave); + mergeVNodeHook(oldData, 'delayLeave', function (leave) { + delayedLeave_1 = leave; + }); + } + } + return rawChild; + } + }; + + // Provides transition support for list items. + var props = extend({ + tag: String, + moveClass: String + }, transitionProps); + delete props.mode; + var TransitionGroup = { + props: props, + beforeMount: function () { + var _this = this; + var update = this._update; + this._update = function (vnode, hydrating) { + var restoreActiveInstance = setActiveInstance(_this); + // force removing pass + _this.__patch__(_this._vnode, _this.kept, false, // hydrating + true // removeOnly (!important, avoids unnecessary moves) + ); + _this._vnode = _this.kept; + restoreActiveInstance(); + update.call(_this, vnode, hydrating); + }; + }, + render: function (h) { + var tag = this.tag || this.$vnode.data.tag || 'span'; + var map = Object.create(null); + var prevChildren = (this.prevChildren = this.children); + var rawChildren = this.$slots.default || []; + var children = (this.children = []); + var transitionData = extractTransitionData(this); + for (var i = 0; i < rawChildren.length; i++) { + var c = rawChildren[i]; + if (c.tag) { + if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { + children.push(c); + map[c.key] = c; + (c.data || (c.data = {})).transition = transitionData; + } + else { + var opts = c.componentOptions; + var name_1 = opts + ? getComponentName(opts.Ctor.options) || opts.tag || '' + : c.tag; + warn$2("<transition-group> children must be keyed: <".concat(name_1, ">")); + } + } + } + if (prevChildren) { + var kept = []; + var removed = []; + for (var i = 0; i < prevChildren.length; i++) { + var c = prevChildren[i]; + c.data.transition = transitionData; + // @ts-expect-error .getBoundingClientRect is not typed in Node + c.data.pos = c.elm.getBoundingClientRect(); + if (map[c.key]) { + kept.push(c); + } + else { + removed.push(c); + } + } + this.kept = h(tag, null, kept); + this.removed = removed; + } + return h(tag, null, children); + }, + updated: function () { + var children = this.prevChildren; + var moveClass = this.moveClass || (this.name || 'v') + '-move'; + if (!children.length || !this.hasMove(children[0].elm, moveClass)) { + return; + } + // we divide the work into three loops to avoid mixing DOM reads and writes + // in each iteration - which helps prevent layout thrashing. + children.forEach(callPendingCbs); + children.forEach(recordPosition); + children.forEach(applyTranslation); + // force reflow to put everything in position + // assign to this to avoid being removed in tree-shaking + // $flow-disable-line + this._reflow = document.body.offsetHeight; + children.forEach(function (c) { + if (c.data.moved) { + var el_1 = c.elm; + var s = el_1.style; + addTransitionClass(el_1, moveClass); + s.transform = s.WebkitTransform = s.transitionDuration = ''; + el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) { + if (e && e.target !== el_1) { + return; + } + if (!e || /transform$/.test(e.propertyName)) { + el_1.removeEventListener(transitionEndEvent, cb); + el_1._moveCb = null; + removeTransitionClass(el_1, moveClass); + } + })); + } + }); + }, + methods: { + hasMove: function (el, moveClass) { + /* istanbul ignore if */ + if (!hasTransition) { + return false; + } + /* istanbul ignore if */ + if (this._hasMove) { + return this._hasMove; + } + // Detect whether an element with the move class applied has + // CSS transitions. Since the element may be inside an entering + // transition at this very moment, we make a clone of it and remove + // all other transition classes applied to ensure only the move class + // is applied. + var clone = el.cloneNode(); + if (el._transitionClasses) { + el._transitionClasses.forEach(function (cls) { + removeClass(clone, cls); + }); + } + addClass(clone, moveClass); + clone.style.display = 'none'; + this.$el.appendChild(clone); + var info = getTransitionInfo(clone); + this.$el.removeChild(clone); + return (this._hasMove = info.hasTransform); + } + } + }; + function callPendingCbs(c) { + /* istanbul ignore if */ + if (c.elm._moveCb) { + c.elm._moveCb(); + } + /* istanbul ignore if */ + if (c.elm._enterCb) { + c.elm._enterCb(); + } + } + function recordPosition(c) { + c.data.newPos = c.elm.getBoundingClientRect(); + } + function applyTranslation(c) { + var oldPos = c.data.pos; + var newPos = c.data.newPos; + var dx = oldPos.left - newPos.left; + var dy = oldPos.top - newPos.top; + if (dx || dy) { + c.data.moved = true; + var s = c.elm.style; + s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)"); + s.transitionDuration = '0s'; + } + } + + var platformComponents = { + Transition: Transition, + TransitionGroup: TransitionGroup + }; + + // install platform specific utils + Vue.config.mustUseProp = mustUseProp; + Vue.config.isReservedTag = isReservedTag; + Vue.config.isReservedAttr = isReservedAttr; + Vue.config.getTagNamespace = getTagNamespace; + Vue.config.isUnknownElement = isUnknownElement; + // install platform runtime directives & components + extend(Vue.options.directives, platformDirectives); + extend(Vue.options.components, platformComponents); + // install platform patch function + Vue.prototype.__patch__ = inBrowser ? patch : noop; + // public mount method + Vue.prototype.$mount = function (el, hydrating) { + el = el && inBrowser ? query(el) : undefined; + return mountComponent(this, el, hydrating); + }; + // devtools global hook + /* istanbul ignore next */ + if (inBrowser) { + setTimeout(function () { + if (config.devtools) { + if (devtools) { + devtools.emit('init', Vue); + } + else { + // @ts-expect-error + console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + + 'https://github.com/vuejs/vue-devtools'); + } + } + if (config.productionTip !== false && + typeof console !== 'undefined') { + // @ts-expect-error + console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + + "Make sure to turn on production mode when deploying for production.\n" + + "See more tips at https://vuejs.org/guide/deployment.html"); + } + }, 0); + } + + var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; + var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; + var buildRegex = cached(function (delimiters) { + var open = delimiters[0].replace(regexEscapeRE, '\\$&'); + var close = delimiters[1].replace(regexEscapeRE, '\\$&'); + return new RegExp(open + '((?:.|\\n)+?)' + close, 'g'); + }); + function parseText(text, delimiters) { + //@ts-expect-error + var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; + if (!tagRE.test(text)) { + return; + } + var tokens = []; + var rawTokens = []; + var lastIndex = (tagRE.lastIndex = 0); + var match, index, tokenValue; + while ((match = tagRE.exec(text))) { + index = match.index; + // push text token + if (index > lastIndex) { + rawTokens.push((tokenValue = text.slice(lastIndex, index))); + tokens.push(JSON.stringify(tokenValue)); + } + // tag token + var exp = parseFilters(match[1].trim()); + tokens.push("_s(".concat(exp, ")")); + rawTokens.push({ '@binding': exp }); + lastIndex = index + match[0].length; + } + if (lastIndex < text.length) { + rawTokens.push((tokenValue = text.slice(lastIndex))); + tokens.push(JSON.stringify(tokenValue)); + } + return { + expression: tokens.join('+'), + tokens: rawTokens + }; + } + + function transformNode$1(el, options) { + var warn = options.warn || baseWarn; + var staticClass = getAndRemoveAttr(el, 'class'); + if (staticClass) { + var res = parseText(staticClass, options.delimiters); + if (res) { + warn("class=\"".concat(staticClass, "\": ") + + 'Interpolation inside attributes has been removed. ' + + 'Use v-bind or the colon shorthand instead. For example, ' + + 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']); + } + } + if (staticClass) { + el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim()); + } + var classBinding = getBindingAttr(el, 'class', false /* getStatic */); + if (classBinding) { + el.classBinding = classBinding; + } + } + function genData$2(el) { + var data = ''; + if (el.staticClass) { + data += "staticClass:".concat(el.staticClass, ","); + } + if (el.classBinding) { + data += "class:".concat(el.classBinding, ","); + } + return data; + } + var klass = { + staticKeys: ['staticClass'], + transformNode: transformNode$1, + genData: genData$2 + }; + + function transformNode(el, options) { + var warn = options.warn || baseWarn; + var staticStyle = getAndRemoveAttr(el, 'style'); + if (staticStyle) { + /* istanbul ignore if */ + { + var res = parseText(staticStyle, options.delimiters); + if (res) { + warn("style=\"".concat(staticStyle, "\": ") + + 'Interpolation inside attributes has been removed. ' + + 'Use v-bind or the colon shorthand instead. For example, ' + + 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']); + } + } + el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); + } + var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); + if (styleBinding) { + el.styleBinding = styleBinding; + } + } + function genData$1(el) { + var data = ''; + if (el.staticStyle) { + data += "staticStyle:".concat(el.staticStyle, ","); + } + if (el.styleBinding) { + data += "style:(".concat(el.styleBinding, "),"); + } + return data; + } + var style = { + staticKeys: ['staticStyle'], + transformNode: transformNode, + genData: genData$1 + }; + + var decoder; + var he = { + decode: function (html) { + decoder = decoder || document.createElement('div'); + decoder.innerHTML = html; + return decoder.textContent; + } + }; + + var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + + 'link,meta,param,source,track,wbr'); + // Elements that you can, intentionally, leave open + // (and which close themselves) + var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'); + // HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 + // Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content + var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + + 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + + 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + + 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + + 'title,tr,track'); + + /** + * Not type-checking this file because it's mostly vendor code. + */ + // Regular Expressions for parsing tags and attributes + var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; + var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; + var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*"); + var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")"); + var startTagOpen = new RegExp("^<".concat(qnameCapture)); + var startTagClose = /^\s*(\/?)>/; + var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>")); + var doctype = /^<!DOCTYPE [^>]+>/i; + // #7298: escape - to avoid being passed as HTML comment when inlined in page + var comment = /^<!\--/; + var conditionalComment = /^<!\[/; + // Special Elements (can contain anything) + var isPlainTextElement = makeMap('script,style,textarea', true); + var reCache = {}; + var decodingMap = { + '<': '<', + '>': '>', + '"': '"', + '&': '&', + ' ': '\n', + '	': '\t', + ''': "'" + }; + var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; + var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; + // #5992 + var isIgnoreNewlineTag = makeMap('pre,textarea', true); + var shouldIgnoreFirstNewline = function (tag, html) { + return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; + }; + function decodeAttr(value, shouldDecodeNewlines) { + var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; + return value.replace(re, function (match) { return decodingMap[match]; }); + } + function parseHTML(html, options) { + var stack = []; + var expectHTML = options.expectHTML; + var isUnaryTag = options.isUnaryTag || no; + var canBeLeftOpenTag = options.canBeLeftOpenTag || no; + var index = 0; + var last, lastTag; + var _loop_1 = function () { + last = html; + // Make sure we're not in a plaintext content element like script/style + if (!lastTag || !isPlainTextElement(lastTag)) { + var textEnd = html.indexOf('<'); + if (textEnd === 0) { + // Comment: + if (comment.test(html)) { + var commentEnd = html.indexOf('-->'); + if (commentEnd >= 0) { + if (options.shouldKeepComment && options.comment) { + options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); + } + advance(commentEnd + 3); + return "continue"; + } + } + // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment + if (conditionalComment.test(html)) { + var conditionalEnd = html.indexOf(']>'); + if (conditionalEnd >= 0) { + advance(conditionalEnd + 2); + return "continue"; + } + } + // Doctype: + var doctypeMatch = html.match(doctype); + if (doctypeMatch) { + advance(doctypeMatch[0].length); + return "continue"; + } + // End tag: + var endTagMatch = html.match(endTag); + if (endTagMatch) { + var curIndex = index; + advance(endTagMatch[0].length); + parseEndTag(endTagMatch[1], curIndex, index); + return "continue"; + } + // Start tag: + var startTagMatch = parseStartTag(); + if (startTagMatch) { + handleStartTag(startTagMatch); + if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { + advance(1); + } + return "continue"; + } + } + var text = void 0, rest = void 0, next = void 0; + if (textEnd >= 0) { + rest = html.slice(textEnd); + while (!endTag.test(rest) && + !startTagOpen.test(rest) && + !comment.test(rest) && + !conditionalComment.test(rest)) { + // < in plain text, be forgiving and treat it as text + next = rest.indexOf('<', 1); + if (next < 0) + break; + textEnd += next; + rest = html.slice(textEnd); + } + text = html.substring(0, textEnd); + } + if (textEnd < 0) { + text = html; + } + if (text) { + advance(text.length); + } + if (options.chars && text) { + options.chars(text, index - text.length, index); + } + } + else { + var endTagLength_1 = 0; + var stackedTag_1 = lastTag.toLowerCase(); + var reStackedTag = reCache[stackedTag_1] || + (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i')); + var rest = html.replace(reStackedTag, function (all, text, endTag) { + endTagLength_1 = endTag.length; + if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') { + text = text + .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 + .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); + } + if (shouldIgnoreFirstNewline(stackedTag_1, text)) { + text = text.slice(1); + } + if (options.chars) { + options.chars(text); + } + return ''; + }); + index += html.length - rest.length; + html = rest; + parseEndTag(stackedTag_1, index - endTagLength_1, index); + } + if (html === last) { + options.chars && options.chars(html); + if (!stack.length && options.warn) { + options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), { + start: index + html.length + }); + } + return "break"; + } + }; + while (html) { + var state_1 = _loop_1(); + if (state_1 === "break") + break; + } + // Clean up any remaining tags + parseEndTag(); + function advance(n) { + index += n; + html = html.substring(n); + } + function parseStartTag() { + var start = html.match(startTagOpen); + if (start) { + var match = { + tagName: start[1], + attrs: [], + start: index + }; + advance(start[0].length); + var end = void 0, attr = void 0; + while (!(end = html.match(startTagClose)) && + (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { + attr.start = index; + advance(attr[0].length); + attr.end = index; + match.attrs.push(attr); + } + if (end) { + match.unarySlash = end[1]; + advance(end[0].length); + match.end = index; + return match; + } + } + } + function handleStartTag(match) { + var tagName = match.tagName; + var unarySlash = match.unarySlash; + if (expectHTML) { + if (lastTag === 'p' && isNonPhrasingTag(tagName)) { + parseEndTag(lastTag); + } + if (canBeLeftOpenTag(tagName) && lastTag === tagName) { + parseEndTag(tagName); + } + } + var unary = isUnaryTag(tagName) || !!unarySlash; + var l = match.attrs.length; + var attrs = new Array(l); + for (var i = 0; i < l; i++) { + var args = match.attrs[i]; + var value = args[3] || args[4] || args[5] || ''; + var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' + ? options.shouldDecodeNewlinesForHref + : options.shouldDecodeNewlines; + attrs[i] = { + name: args[1], + value: decodeAttr(value, shouldDecodeNewlines) + }; + if (options.outputSourceRange) { + attrs[i].start = args.start + args[0].match(/^\s*/).length; + attrs[i].end = args.end; + } + } + if (!unary) { + stack.push({ + tag: tagName, + lowerCasedTag: tagName.toLowerCase(), + attrs: attrs, + start: match.start, + end: match.end + }); + lastTag = tagName; + } + if (options.start) { + options.start(tagName, attrs, unary, match.start, match.end); + } + } + function parseEndTag(tagName, start, end) { + var pos, lowerCasedTagName; + if (start == null) + start = index; + if (end == null) + end = index; + // Find the closest opened tag of the same type + if (tagName) { + lowerCasedTagName = tagName.toLowerCase(); + for (pos = stack.length - 1; pos >= 0; pos--) { + if (stack[pos].lowerCasedTag === lowerCasedTagName) { + break; + } + } + } + else { + // If no tag name is provided, clean shop + pos = 0; + } + if (pos >= 0) { + // Close all the open elements, up the stack + for (var i = stack.length - 1; i >= pos; i--) { + if ((i > pos || !tagName) && options.warn) { + options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), { + start: stack[i].start, + end: stack[i].end + }); + } + if (options.end) { + options.end(stack[i].tag, start, end); + } + } + // Remove the open elements from the stack + stack.length = pos; + lastTag = pos && stack[pos - 1].tag; + } + else if (lowerCasedTagName === 'br') { + if (options.start) { + options.start(tagName, [], true, start, end); + } + } + else if (lowerCasedTagName === 'p') { + if (options.start) { + options.start(tagName, [], false, start, end); + } + if (options.end) { + options.end(tagName, start, end); + } + } + } + } + + var onRE = /^@|^v-on:/; + var dirRE = /^v-|^@|^:|^#/; + var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; + var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; + var stripParensRE = /^\(|\)$/g; + var dynamicArgRE = /^\[.*\]$/; + var argRE = /:(.*)$/; + var bindRE = /^:|^\.|^v-bind:/; + var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; + var slotRE = /^v-slot(:|$)|^#/; + var lineBreakRE = /[\r\n]/; + var whitespaceRE = /[ \f\t\r\n]+/g; + var invalidAttributeRE = /[\s"'<>\/=]/; + var decodeHTMLCached = cached(he.decode); + var emptySlotScopeToken = "_empty_"; + // configurable state + var warn; + var delimiters; + var transforms; + var preTransforms; + var postTransforms; + var platformIsPreTag; + var platformMustUseProp; + var platformGetTagNamespace; + var maybeComponent; + function createASTElement(tag, attrs, parent) { + return { + type: 1, + tag: tag, + attrsList: attrs, + attrsMap: makeAttrsMap(attrs), + rawAttrsMap: {}, + parent: parent, + children: [] + }; + } + /** + * Convert HTML string to AST. + */ + function parse(template, options) { + warn = options.warn || baseWarn; + platformIsPreTag = options.isPreTag || no; + platformMustUseProp = options.mustUseProp || no; + platformGetTagNamespace = options.getTagNamespace || no; + var isReservedTag = options.isReservedTag || no; + maybeComponent = function (el) { + return !!(el.component || + el.attrsMap[':is'] || + el.attrsMap['v-bind:is'] || + !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))); + }; + transforms = pluckModuleFunction(options.modules, 'transformNode'); + preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); + postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); + delimiters = options.delimiters; + var stack = []; + var preserveWhitespace = options.preserveWhitespace !== false; + var whitespaceOption = options.whitespace; + var root; + var currentParent; + var inVPre = false; + var inPre = false; + var warned = false; + function warnOnce(msg, range) { + if (!warned) { + warned = true; + warn(msg, range); + } + } + function closeElement(element) { + trimEndingWhitespace(element); + if (!inVPre && !element.processed) { + element = processElement(element, options); + } + // tree management + if (!stack.length && element !== root) { + // allow root elements with v-if, v-else-if and v-else + if (root.if && (element.elseif || element.else)) { + { + checkRootConstraints(element); + } + addIfCondition(root, { + exp: element.elseif, + block: element + }); + } + else { + warnOnce("Component template should contain exactly one root element. " + + "If you are using v-if on multiple elements, " + + "use v-else-if to chain them instead.", { start: element.start }); + } + } + if (currentParent && !element.forbidden) { + if (element.elseif || element.else) { + processIfConditions(element, currentParent); + } + else { + if (element.slotScope) { + // scoped slot + // keep it in the children list so that v-else(-if) conditions can + // find it as the prev node. + var name_1 = element.slotTarget || '"default"'; + (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element; + } + currentParent.children.push(element); + element.parent = currentParent; + } + } + // final children cleanup + // filter out scoped slots + element.children = element.children.filter(function (c) { return !c.slotScope; }); + // remove trailing whitespace node again + trimEndingWhitespace(element); + // check pre state + if (element.pre) { + inVPre = false; + } + if (platformIsPreTag(element.tag)) { + inPre = false; + } + // apply post-transforms + for (var i = 0; i < postTransforms.length; i++) { + postTransforms[i](element, options); + } + } + function trimEndingWhitespace(el) { + // remove trailing whitespace node + if (!inPre) { + var lastNode = void 0; + while ((lastNode = el.children[el.children.length - 1]) && + lastNode.type === 3 && + lastNode.text === ' ') { + el.children.pop(); + } + } + } + function checkRootConstraints(el) { + if (el.tag === 'slot' || el.tag === 'template') { + warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") + + 'contain multiple nodes.', { start: el.start }); + } + if (el.attrsMap.hasOwnProperty('v-for')) { + warnOnce('Cannot use v-for on stateful component root element because ' + + 'it renders multiple elements.', el.rawAttrsMap['v-for']); + } + } + parseHTML(template, { + warn: warn, + expectHTML: options.expectHTML, + isUnaryTag: options.isUnaryTag, + canBeLeftOpenTag: options.canBeLeftOpenTag, + shouldDecodeNewlines: options.shouldDecodeNewlines, + shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, + shouldKeepComment: options.comments, + outputSourceRange: options.outputSourceRange, + start: function (tag, attrs, unary, start, end) { + // check namespace. + // inherit parent ns if there is one + var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag); + // handle IE svg bug + /* istanbul ignore if */ + if (isIE && ns === 'svg') { + attrs = guardIESVGBug(attrs); + } + var element = createASTElement(tag, attrs, currentParent); + if (ns) { + element.ns = ns; + } + { + if (options.outputSourceRange) { + element.start = start; + element.end = end; + element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { + cumulated[attr.name] = attr; + return cumulated; + }, {}); + } + attrs.forEach(function (attr) { + if (invalidAttributeRE.test(attr.name)) { + warn("Invalid dynamic argument expression: attribute names cannot contain " + + "spaces, quotes, <, >, / or =.", options.outputSourceRange + ? { + start: attr.start + attr.name.indexOf("["), + end: attr.start + attr.name.length + } + : undefined); + } + }); + } + if (isForbiddenTag(element) && !isServerRendering()) { + element.forbidden = true; + warn('Templates should only be responsible for mapping the state to the ' + + 'UI. Avoid placing tags with side-effects in your templates, such as ' + + "<".concat(tag, ">") + + ', as they will not be parsed.', { start: element.start }); + } + // apply pre-transforms + for (var i = 0; i < preTransforms.length; i++) { + element = preTransforms[i](element, options) || element; + } + if (!inVPre) { + processPre(element); + if (element.pre) { + inVPre = true; + } + } + if (platformIsPreTag(element.tag)) { + inPre = true; + } + if (inVPre) { + processRawAttrs(element); + } + else if (!element.processed) { + // structural directives + processFor(element); + processIf(element); + processOnce(element); + } + if (!root) { + root = element; + { + checkRootConstraints(root); + } + } + if (!unary) { + currentParent = element; + stack.push(element); + } + else { + closeElement(element); + } + }, + end: function (tag, start, end) { + var element = stack[stack.length - 1]; + // pop stack + stack.length -= 1; + currentParent = stack[stack.length - 1]; + if (options.outputSourceRange) { + element.end = end; + } + closeElement(element); + }, + chars: function (text, start, end) { + if (!currentParent) { + { + if (text === template) { + warnOnce('Component template requires a root element, rather than just text.', { start: start }); + } + else if ((text = text.trim())) { + warnOnce("text \"".concat(text, "\" outside root element will be ignored."), { + start: start + }); + } + } + return; + } + // IE textarea placeholder bug + /* istanbul ignore if */ + if (isIE && + currentParent.tag === 'textarea' && + currentParent.attrsMap.placeholder === text) { + return; + } + var children = currentParent.children; + if (inPre || text.trim()) { + text = isTextTag(currentParent) + ? text + : decodeHTMLCached(text); + } + else if (!children.length) { + // remove the whitespace-only node right after an opening tag + text = ''; + } + else if (whitespaceOption) { + if (whitespaceOption === 'condense') { + // in condense mode, remove the whitespace node if it contains + // line break, otherwise condense to a single space + text = lineBreakRE.test(text) ? '' : ' '; + } + else { + text = ' '; + } + } + else { + text = preserveWhitespace ? ' ' : ''; + } + if (text) { + if (!inPre && whitespaceOption === 'condense') { + // condense consecutive whitespaces into single space + text = text.replace(whitespaceRE, ' '); + } + var res = void 0; + var child = void 0; + if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { + child = { + type: 2, + expression: res.expression, + tokens: res.tokens, + text: text + }; + } + else if (text !== ' ' || + !children.length || + children[children.length - 1].text !== ' ') { + child = { + type: 3, + text: text + }; + } + if (child) { + if (options.outputSourceRange) { + child.start = start; + child.end = end; + } + children.push(child); + } + } + }, + comment: function (text, start, end) { + // adding anything as a sibling to the root node is forbidden + // comments should still be allowed, but ignored + if (currentParent) { + var child = { + type: 3, + text: text, + isComment: true + }; + if (options.outputSourceRange) { + child.start = start; + child.end = end; + } + currentParent.children.push(child); + } + } + }); + return root; + } + function processPre(el) { + if (getAndRemoveAttr(el, 'v-pre') != null) { + el.pre = true; + } + } + function processRawAttrs(el) { + var list = el.attrsList; + var len = list.length; + if (len) { + var attrs = (el.attrs = new Array(len)); + for (var i = 0; i < len; i++) { + attrs[i] = { + name: list[i].name, + value: JSON.stringify(list[i].value) + }; + if (list[i].start != null) { + attrs[i].start = list[i].start; + attrs[i].end = list[i].end; + } + } + } + else if (!el.pre) { + // non root node in pre blocks with no attributes + el.plain = true; + } + } + function processElement(element, options) { + processKey(element); + // determine whether this is a plain element after + // removing structural attributes + element.plain = + !element.key && !element.scopedSlots && !element.attrsList.length; + processRef(element); + processSlotContent(element); + processSlotOutlet(element); + processComponent(element); + for (var i = 0; i < transforms.length; i++) { + element = transforms[i](element, options) || element; + } + processAttrs(element); + return element; + } + function processKey(el) { + var exp = getBindingAttr(el, 'key'); + if (exp) { + { + if (el.tag === 'template') { + warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key')); + } + if (el.for) { + var iterator = el.iterator2 || el.iterator1; + var parent_1 = el.parent; + if (iterator && + iterator === exp && + parent_1 && + parent_1.tag === 'transition-group') { + warn("Do not use v-for index as key on <transition-group> children, " + + "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */); + } + } + } + el.key = exp; + } + } + function processRef(el) { + var ref = getBindingAttr(el, 'ref'); + if (ref) { + el.ref = ref; + el.refInFor = checkInFor(el); + } + } + function processFor(el) { + var exp; + if ((exp = getAndRemoveAttr(el, 'v-for'))) { + var res = parseFor(exp); + if (res) { + extend(el, res); + } + else { + warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']); + } + } + } + function parseFor(exp) { + var inMatch = exp.match(forAliasRE); + if (!inMatch) + return; + var res = {}; + res.for = inMatch[2].trim(); + var alias = inMatch[1].trim().replace(stripParensRE, ''); + var iteratorMatch = alias.match(forIteratorRE); + if (iteratorMatch) { + res.alias = alias.replace(forIteratorRE, '').trim(); + res.iterator1 = iteratorMatch[1].trim(); + if (iteratorMatch[2]) { + res.iterator2 = iteratorMatch[2].trim(); + } + } + else { + res.alias = alias; + } + return res; + } + function processIf(el) { + var exp = getAndRemoveAttr(el, 'v-if'); + if (exp) { + el.if = exp; + addIfCondition(el, { + exp: exp, + block: el + }); + } + else { + if (getAndRemoveAttr(el, 'v-else') != null) { + el.else = true; + } + var elseif = getAndRemoveAttr(el, 'v-else-if'); + if (elseif) { + el.elseif = elseif; + } + } + } + function processIfConditions(el, parent) { + var prev = findPrevElement(parent.children); + if (prev && prev.if) { + addIfCondition(prev, { + exp: el.elseif, + block: el + }); + } + else { + warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") + + "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']); + } + } + function findPrevElement(children) { + var i = children.length; + while (i--) { + if (children[i].type === 1) { + return children[i]; + } + else { + if (children[i].text !== ' ') { + warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") + + "will be ignored.", children[i]); + } + children.pop(); + } + } + } + function addIfCondition(el, condition) { + if (!el.ifConditions) { + el.ifConditions = []; + } + el.ifConditions.push(condition); + } + function processOnce(el) { + var once = getAndRemoveAttr(el, 'v-once'); + if (once != null) { + el.once = true; + } + } + // handle content being passed to a component as slot, + // e.g. <template slot="xxx">, <div slot-scope="xxx"> + function processSlotContent(el) { + var slotScope; + if (el.tag === 'template') { + slotScope = getAndRemoveAttr(el, 'scope'); + /* istanbul ignore if */ + if (slotScope) { + warn("the \"scope\" attribute for scoped slots have been deprecated and " + + "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + + "can also be used on plain elements in addition to <template> to " + + "denote scoped slots.", el.rawAttrsMap['scope'], true); + } + el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); + } + else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) { + /* istanbul ignore if */ + if (el.attrsMap['v-for']) { + warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") + + "(v-for takes higher priority). Use a wrapper <template> for the " + + "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true); + } + el.slotScope = slotScope; + } + // slot="xxx" + var slotTarget = getBindingAttr(el, 'slot'); + if (slotTarget) { + el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; + el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); + // preserve slot as an attribute for native shadow DOM compat + // only for non-scoped slots. + if (el.tag !== 'template' && !el.slotScope) { + addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); + } + } + // 2.6 v-slot syntax + { + if (el.tag === 'template') { + // v-slot on <template> + var slotBinding = getAndRemoveAttrByRegex(el, slotRE); + if (slotBinding) { + { + if (el.slotTarget || el.slotScope) { + warn("Unexpected mixed usage of different slot syntaxes.", el); + } + if (el.parent && !maybeComponent(el.parent)) { + warn("<template v-slot> can only appear at the root level inside " + + "the receiving component", el); + } + } + var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic; + el.slotTarget = name_2; + el.slotTargetDynamic = dynamic; + el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf + } + } + else { + // v-slot on component, denotes default slot + var slotBinding = getAndRemoveAttrByRegex(el, slotRE); + if (slotBinding) { + { + if (!maybeComponent(el)) { + warn("v-slot can only be used on components or <template>.", slotBinding); + } + if (el.slotScope || el.slotTarget) { + warn("Unexpected mixed usage of different slot syntaxes.", el); + } + if (el.scopedSlots) { + warn("To avoid scope ambiguity, the default slot should also use " + + "<template> syntax when there are other named slots.", slotBinding); + } + } + // add the component's children to its default slot + var slots = el.scopedSlots || (el.scopedSlots = {}); + var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic; + var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el)); + slotContainer_1.slotTarget = name_3; + slotContainer_1.slotTargetDynamic = dynamic; + slotContainer_1.children = el.children.filter(function (c) { + if (!c.slotScope) { + c.parent = slotContainer_1; + return true; + } + }); + slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken; + // remove children as they are returned from scopedSlots now + el.children = []; + // mark el non-plain so data gets generated + el.plain = false; + } + } + } + } + function getSlotName(binding) { + var name = binding.name.replace(slotRE, ''); + if (!name) { + if (binding.name[0] !== '#') { + name = 'default'; + } + else { + warn("v-slot shorthand syntax requires a slot name.", binding); + } + } + return dynamicArgRE.test(name) + ? // dynamic [name] + { name: name.slice(1, -1), dynamic: true } + : // static name + { name: "\"".concat(name, "\""), dynamic: false }; + } + // handle <slot/> outlets + function processSlotOutlet(el) { + if (el.tag === 'slot') { + el.slotName = getBindingAttr(el, 'name'); + if (el.key) { + warn("`key` does not work on <slot> because slots are abstract outlets " + + "and can possibly expand into multiple elements. " + + "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key')); + } + } + } + function processComponent(el) { + var binding; + if ((binding = getBindingAttr(el, 'is'))) { + el.component = binding; + } + if (getAndRemoveAttr(el, 'inline-template') != null) { + el.inlineTemplate = true; + } + } + function processAttrs(el) { + var list = el.attrsList; + var i, l, name, rawName, value, modifiers, syncGen, isDynamic; + for (i = 0, l = list.length; i < l; i++) { + name = rawName = list[i].name; + value = list[i].value; + if (dirRE.test(name)) { + // mark element as dynamic + el.hasBindings = true; + // modifiers + modifiers = parseModifiers(name.replace(dirRE, '')); + // support .foo shorthand syntax for the .prop modifier + if (modifiers) { + name = name.replace(modifierRE, ''); + } + if (bindRE.test(name)) { + // v-bind + name = name.replace(bindRE, ''); + value = parseFilters(value); + isDynamic = dynamicArgRE.test(name); + if (isDynamic) { + name = name.slice(1, -1); + } + if (value.trim().length === 0) { + warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\"")); + } + if (modifiers) { + if (modifiers.prop && !isDynamic) { + name = camelize(name); + if (name === 'innerHtml') + name = 'innerHTML'; + } + if (modifiers.camel && !isDynamic) { + name = camelize(name); + } + if (modifiers.sync) { + syncGen = genAssignmentCode(value, "$event"); + if (!isDynamic) { + addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]); + if (hyphenate(name) !== camelize(name)) { + addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]); + } + } + else { + // handler w/ dynamic event name + addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic + ); + } + } + } + if ((modifiers && modifiers.prop) || + (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) { + addProp(el, name, value, list[i], isDynamic); + } + else { + addAttr(el, name, value, list[i], isDynamic); + } + } + else if (onRE.test(name)) { + // v-on + name = name.replace(onRE, ''); + isDynamic = dynamicArgRE.test(name); + if (isDynamic) { + name = name.slice(1, -1); + } + addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic); + } + else { + // normal directives + name = name.replace(dirRE, ''); + // parse arg + var argMatch = name.match(argRE); + var arg = argMatch && argMatch[1]; + isDynamic = false; + if (arg) { + name = name.slice(0, -(arg.length + 1)); + if (dynamicArgRE.test(arg)) { + arg = arg.slice(1, -1); + isDynamic = true; + } + } + addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); + if (name === 'model') { + checkForAliasModel(el, value); + } + } + } + else { + // literal attribute + { + var res = parseText(value, delimiters); + if (res) { + warn("".concat(name, "=\"").concat(value, "\": ") + + 'Interpolation inside attributes has been removed. ' + + 'Use v-bind or the colon shorthand instead. For example, ' + + 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]); + } + } + addAttr(el, name, JSON.stringify(value), list[i]); + // #6887 firefox doesn't update muted state if set via attribute + // even immediately after element creation + if (!el.component && + name === 'muted' && + platformMustUseProp(el.tag, el.attrsMap.type, name)) { + addProp(el, name, 'true', list[i]); + } + } + } + } + function checkInFor(el) { + var parent = el; + while (parent) { + if (parent.for !== undefined) { + return true; + } + parent = parent.parent; + } + return false; + } + function parseModifiers(name) { + var match = name.match(modifierRE); + if (match) { + var ret_1 = {}; + match.forEach(function (m) { + ret_1[m.slice(1)] = true; + }); + return ret_1; + } + } + function makeAttrsMap(attrs) { + var map = {}; + for (var i = 0, l = attrs.length; i < l; i++) { + if (map[attrs[i].name] && !isIE && !isEdge) { + warn('duplicate attribute: ' + attrs[i].name, attrs[i]); + } + map[attrs[i].name] = attrs[i].value; + } + return map; + } + // for script (e.g. type="x/template") or style, do not decode content + function isTextTag(el) { + return el.tag === 'script' || el.tag === 'style'; + } + function isForbiddenTag(el) { + return (el.tag === 'style' || + (el.tag === 'script' && + (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'))); + } + var ieNSBug = /^xmlns:NS\d+/; + var ieNSPrefix = /^NS\d+:/; + /* istanbul ignore next */ + function guardIESVGBug(attrs) { + var res = []; + for (var i = 0; i < attrs.length; i++) { + var attr = attrs[i]; + if (!ieNSBug.test(attr.name)) { + attr.name = attr.name.replace(ieNSPrefix, ''); + res.push(attr); + } + } + return res; + } + function checkForAliasModel(el, value) { + var _el = el; + while (_el) { + if (_el.for && _el.alias === value) { + warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + + "You are binding v-model directly to a v-for iteration alias. " + + "This will not be able to modify the v-for source array because " + + "writing to the alias is like modifying a function local variable. " + + "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']); + } + _el = _el.parent; + } + } + + /** + * Expand input[v-model] with dynamic type bindings into v-if-else chains + * Turn this: + * <input v-model="data[type]" :type="type"> + * into this: + * <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]"> + * <input v-else-if="type === 'radio'" type="radio" v-model="data[type]"> + * <input v-else :type="type" v-model="data[type]"> + */ + function preTransformNode(el, options) { + if (el.tag === 'input') { + var map = el.attrsMap; + if (!map['v-model']) { + return; + } + var typeBinding = void 0; + if (map[':type'] || map['v-bind:type']) { + typeBinding = getBindingAttr(el, 'type'); + } + if (!map.type && !typeBinding && map['v-bind']) { + typeBinding = "(".concat(map['v-bind'], ").type"); + } + if (typeBinding) { + var ifCondition = getAndRemoveAttr(el, 'v-if', true); + var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : ""; + var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; + var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); + // 1. checkbox + var branch0 = cloneASTElement(el); + // process for on the main node + processFor(branch0); + addRawAttr(branch0, 'type', 'checkbox'); + processElement(branch0, options); + branch0.processed = true; // prevent it from double-processed + branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra; + addIfCondition(branch0, { + exp: branch0.if, + block: branch0 + }); + // 2. add radio else-if condition + var branch1 = cloneASTElement(el); + getAndRemoveAttr(branch1, 'v-for', true); + addRawAttr(branch1, 'type', 'radio'); + processElement(branch1, options); + addIfCondition(branch0, { + exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra, + block: branch1 + }); + // 3. other + var branch2 = cloneASTElement(el); + getAndRemoveAttr(branch2, 'v-for', true); + addRawAttr(branch2, ':type', typeBinding); + processElement(branch2, options); + addIfCondition(branch0, { + exp: ifCondition, + block: branch2 + }); + if (hasElse) { + branch0.else = true; + } + else if (elseIfCondition) { + branch0.elseif = elseIfCondition; + } + return branch0; + } + } + } + function cloneASTElement(el) { + return createASTElement(el.tag, el.attrsList.slice(), el.parent); + } + var model = { + preTransformNode: preTransformNode + }; + + var modules = [klass, style, model]; + + function text(el, dir) { + if (dir.value) { + addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir); + } + } + + function html(el, dir) { + if (dir.value) { + addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir); + } + } + + var directives = { + model: model$1, + text: text, + html: html + }; + + var baseOptions = { + expectHTML: true, + modules: modules, + directives: directives, + isPreTag: isPreTag, + isUnaryTag: isUnaryTag, + mustUseProp: mustUseProp, + canBeLeftOpenTag: canBeLeftOpenTag, + isReservedTag: isReservedTag, + getTagNamespace: getTagNamespace, + staticKeys: genStaticKeys$1(modules) + }; + + var isStaticKey; + var isPlatformReservedTag; + var genStaticKeysCached = cached(genStaticKeys); + /** + * Goal of the optimizer: walk the generated template AST tree + * and detect sub-trees that are purely static, i.e. parts of + * the DOM that never needs to change. + * + * Once we detect these sub-trees, we can: + * + * 1. Hoist them into constants, so that we no longer need to + * create fresh nodes for them on each re-render; + * 2. Completely skip them in the patching process. + */ + function optimize(root, options) { + if (!root) + return; + isStaticKey = genStaticKeysCached(options.staticKeys || ''); + isPlatformReservedTag = options.isReservedTag || no; + // first pass: mark all non-static nodes. + markStatic(root); + // second pass: mark static roots. + markStaticRoots(root, false); + } + function genStaticKeys(keys) { + return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + + (keys ? ',' + keys : '')); + } + function markStatic(node) { + node.static = isStatic(node); + if (node.type === 1) { + // do not make component slot content static. this avoids + // 1. components not able to mutate slot nodes + // 2. static slot content fails for hot-reloading + if (!isPlatformReservedTag(node.tag) && + node.tag !== 'slot' && + node.attrsMap['inline-template'] == null) { + return; + } + for (var i = 0, l = node.children.length; i < l; i++) { + var child = node.children[i]; + markStatic(child); + if (!child.static) { + node.static = false; + } + } + if (node.ifConditions) { + for (var i = 1, l = node.ifConditions.length; i < l; i++) { + var block = node.ifConditions[i].block; + markStatic(block); + if (!block.static) { + node.static = false; + } + } + } + } + } + function markStaticRoots(node, isInFor) { + if (node.type === 1) { + if (node.static || node.once) { + node.staticInFor = isInFor; + } + // For a node to qualify as a static root, it should have children that + // are not just static text. Otherwise the cost of hoisting out will + // outweigh the benefits and it's better off to just always render it fresh. + if (node.static && + node.children.length && + !(node.children.length === 1 && node.children[0].type === 3)) { + node.staticRoot = true; + return; + } + else { + node.staticRoot = false; + } + if (node.children) { + for (var i = 0, l = node.children.length; i < l; i++) { + markStaticRoots(node.children[i], isInFor || !!node.for); + } + } + if (node.ifConditions) { + for (var i = 1, l = node.ifConditions.length; i < l; i++) { + markStaticRoots(node.ifConditions[i].block, isInFor); + } + } + } + } + function isStatic(node) { + if (node.type === 2) { + // expression + return false; + } + if (node.type === 3) { + // text + return true; + } + return !!(node.pre || + (!node.hasBindings && // no dynamic bindings + !node.if && + !node.for && // not v-if or v-for or v-else + !isBuiltInTag(node.tag) && // not a built-in + isPlatformReservedTag(node.tag) && // not a component + !isDirectChildOfTemplateFor(node) && + Object.keys(node).every(isStaticKey))); + } + function isDirectChildOfTemplateFor(node) { + while (node.parent) { + node = node.parent; + if (node.tag !== 'template') { + return false; + } + if (node.for) { + return true; + } + } + return false; + } + + var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; + var fnInvokeRE = /\([^)]*?\);*$/; + var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; + // KeyboardEvent.keyCode aliases + var keyCodes = { + esc: 27, + tab: 9, + enter: 13, + space: 32, + up: 38, + left: 37, + right: 39, + down: 40, + delete: [8, 46] + }; + // KeyboardEvent.key aliases + var keyNames = { + // #7880: IE11 and Edge use `Esc` for Escape key name. + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + // #9112: IE11 uses `Spacebar` for Space key name. + space: [' ', 'Spacebar'], + // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + // #9112: IE11 uses `Del` for Delete key name. + delete: ['Backspace', 'Delete', 'Del'] + }; + // #4868: modifiers that prevent the execution of the listener + // need to explicitly return null so that we can determine whether to remove + // the listener for .once + var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); }; + var modifierCode = { + stop: '$event.stopPropagation();', + prevent: '$event.preventDefault();', + self: genGuard("$event.target !== $event.currentTarget"), + ctrl: genGuard("!$event.ctrlKey"), + shift: genGuard("!$event.shiftKey"), + alt: genGuard("!$event.altKey"), + meta: genGuard("!$event.metaKey"), + left: genGuard("'button' in $event && $event.button !== 0"), + middle: genGuard("'button' in $event && $event.button !== 1"), + right: genGuard("'button' in $event && $event.button !== 2") + }; + function genHandlers(events, isNative) { + var prefix = isNative ? 'nativeOn:' : 'on:'; + var staticHandlers = ""; + var dynamicHandlers = ""; + for (var name_1 in events) { + var handlerCode = genHandler(events[name_1]); + //@ts-expect-error + if (events[name_1] && events[name_1].dynamic) { + dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ","); + } + else { + staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ","); + } + } + staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}"); + if (dynamicHandlers) { + return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])"); + } + else { + return prefix + staticHandlers; + } + } + function genHandler(handler) { + if (!handler) { + return 'function(){}'; + } + if (Array.isArray(handler)) { + return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]"); + } + var isMethodPath = simplePathRE.test(handler.value); + var isFunctionExpression = fnExpRE.test(handler.value); + var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); + if (!handler.modifiers) { + if (isMethodPath || isFunctionExpression) { + return handler.value; + } + return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement + } + else { + var code = ''; + var genModifierCode = ''; + var keys = []; + var _loop_1 = function (key) { + if (modifierCode[key]) { + genModifierCode += modifierCode[key]; + // left/right + if (keyCodes[key]) { + keys.push(key); + } + } + else if (key === 'exact') { + var modifiers_1 = handler.modifiers; + genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'] + .filter(function (keyModifier) { return !modifiers_1[keyModifier]; }) + .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); }) + .join('||')); + } + else { + keys.push(key); + } + }; + for (var key in handler.modifiers) { + _loop_1(key); + } + if (keys.length) { + code += genKeyFilter(keys); + } + // Make sure modifiers like prevent and stop get executed after key filtering + if (genModifierCode) { + code += genModifierCode; + } + var handlerCode = isMethodPath + ? "return ".concat(handler.value, ".apply(null, arguments)") + : isFunctionExpression + ? "return (".concat(handler.value, ").apply(null, arguments)") + : isFunctionInvocation + ? "return ".concat(handler.value) + : handler.value; + return "function($event){".concat(code).concat(handlerCode, "}"); + } + } + function genKeyFilter(keys) { + return ( + // make sure the key filters only apply to KeyboardEvents + // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake + // key events that do not have keyCode property... + "if(!$event.type.indexOf('key')&&" + + "".concat(keys.map(genFilterCode).join('&&'), ")return null;")); + } + function genFilterCode(key) { + var keyVal = parseInt(key, 10); + if (keyVal) { + return "$event.keyCode!==".concat(keyVal); + } + var keyCode = keyCodes[key]; + var keyName = keyNames[key]; + return ("_k($event.keyCode," + + "".concat(JSON.stringify(key), ",") + + "".concat(JSON.stringify(keyCode), ",") + + "$event.key," + + "".concat(JSON.stringify(keyName)) + + ")"); + } + + function on(el, dir) { + if (dir.modifiers) { + warn$2("v-on without argument does not support modifiers."); + } + el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); }; + } + + function bind(el, dir) { + el.wrapData = function (code) { + return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")"); + }; + } + + var baseDirectives = { + on: on, + bind: bind, + cloak: noop + }; + + var CodegenState = /** @class */ (function () { + function CodegenState(options) { + this.options = options; + this.warn = options.warn || baseWarn; + this.transforms = pluckModuleFunction(options.modules, 'transformCode'); + this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); + this.directives = extend(extend({}, baseDirectives), options.directives); + var isReservedTag = options.isReservedTag || no; + this.maybeComponent = function (el) { + return !!el.component || !isReservedTag(el.tag); + }; + this.onceId = 0; + this.staticRenderFns = []; + this.pre = false; + } + return CodegenState; + }()); + function generate(ast, options) { + var state = new CodegenState(options); + // fix #11483, Root level <script> tags should not be rendered. + var code = ast + ? ast.tag === 'script' + ? 'null' + : genElement(ast, state) + : '_c("div")'; + return { + render: "with(this){return ".concat(code, "}"), + staticRenderFns: state.staticRenderFns + }; + } + function genElement(el, state) { + if (el.parent) { + el.pre = el.pre || el.parent.pre; + } + if (el.staticRoot && !el.staticProcessed) { + return genStatic(el, state); + } + else if (el.once && !el.onceProcessed) { + return genOnce(el, state); + } + else if (el.for && !el.forProcessed) { + return genFor(el, state); + } + else if (el.if && !el.ifProcessed) { + return genIf(el, state); + } + else if (el.tag === 'template' && !el.slotTarget && !state.pre) { + return genChildren(el, state) || 'void 0'; + } + else if (el.tag === 'slot') { + return genSlot(el, state); + } + else { + // component or element + var code = void 0; + if (el.component) { + code = genComponent(el.component, el, state); + } + else { + var data = void 0; + var maybeComponent = state.maybeComponent(el); + if (!el.plain || (el.pre && maybeComponent)) { + data = genData(el, state); + } + var tag + // check if this is a component in <script setup> + = void 0; + // check if this is a component in <script setup> + var bindings = state.options.bindings; + if (maybeComponent && bindings && bindings.__isScriptSetup !== false) { + tag = checkBindingType(bindings, el.tag); + } + if (!tag) + tag = "'".concat(el.tag, "'"); + var children = el.inlineTemplate ? null : genChildren(el, state, true); + code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data + ).concat(children ? ",".concat(children) : '' // children + , ")"); + } + // module transforms + for (var i = 0; i < state.transforms.length; i++) { + code = state.transforms[i](el, code); + } + return code; + } + } + function checkBindingType(bindings, key) { + var camelName = camelize(key); + var PascalName = capitalize(camelName); + var checkType = function (type) { + if (bindings[key] === type) { + return key; + } + if (bindings[camelName] === type) { + return camelName; + } + if (bindings[PascalName] === type) { + return PascalName; + } + }; + var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) || + checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */); + if (fromConst) { + return fromConst; + } + var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) || + checkType("setup-ref" /* BindingTypes.SETUP_REF */) || + checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */); + if (fromMaybeRef) { + return fromMaybeRef; + } + } + // hoist static sub-trees out + function genStatic(el, state) { + el.staticProcessed = true; + // Some elements (templates) need to behave differently inside of a v-pre + // node. All pre nodes are static roots, so we can use this as a location to + // wrap a state change and reset it upon exiting the pre node. + var originalPreState = state.pre; + if (el.pre) { + state.pre = el.pre; + } + state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}")); + state.pre = originalPreState; + return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")"); + } + // v-once + function genOnce(el, state) { + el.onceProcessed = true; + if (el.if && !el.ifProcessed) { + return genIf(el, state); + } + else if (el.staticInFor) { + var key = ''; + var parent_1 = el.parent; + while (parent_1) { + if (parent_1.for) { + key = parent_1.key; + break; + } + parent_1 = parent_1.parent; + } + if (!key) { + state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']); + return genElement(el, state); + } + return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")"); + } + else { + return genStatic(el, state); + } + } + function genIf(el, state, altGen, altEmpty) { + el.ifProcessed = true; // avoid recursion + return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty); + } + function genIfConditions(conditions, state, altGen, altEmpty) { + if (!conditions.length) { + return altEmpty || '_e()'; + } + var condition = conditions.shift(); + if (condition.exp) { + return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty)); + } + else { + return "".concat(genTernaryExp(condition.block)); + } + // v-if with v-once should generate code like (a)?_m(0):_m(1) + function genTernaryExp(el) { + return altGen + ? altGen(el, state) + : el.once + ? genOnce(el, state) + : genElement(el, state); + } + } + function genFor(el, state, altGen, altHelper) { + var exp = el.for; + var alias = el.alias; + var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : ''; + var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : ''; + if (state.maybeComponent(el) && + el.tag !== 'slot' && + el.tag !== 'template' && + !el.key) { + state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") + + "v-for should have explicit keys. " + + "See https://vuejs.org/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */); + } + el.forProcessed = true; // avoid recursion + return ("".concat(altHelper || '_l', "((").concat(exp, "),") + + "function(".concat(alias).concat(iterator1).concat(iterator2, "){") + + "return ".concat((altGen || genElement)(el, state)) + + '})'); + } + function genData(el, state) { + var data = '{'; + // directives first. + // directives may mutate the el's other properties before they are generated. + var dirs = genDirectives(el, state); + if (dirs) + data += dirs + ','; + // key + if (el.key) { + data += "key:".concat(el.key, ","); + } + // ref + if (el.ref) { + data += "ref:".concat(el.ref, ","); + } + if (el.refInFor) { + data += "refInFor:true,"; + } + // pre + if (el.pre) { + data += "pre:true,"; + } + // record original tag name for components using "is" attribute + if (el.component) { + data += "tag:\"".concat(el.tag, "\","); + } + // module data generation functions + for (var i = 0; i < state.dataGenFns.length; i++) { + data += state.dataGenFns[i](el); + } + // attributes + if (el.attrs) { + data += "attrs:".concat(genProps(el.attrs), ","); + } + // DOM props + if (el.props) { + data += "domProps:".concat(genProps(el.props), ","); + } + // event handlers + if (el.events) { + data += "".concat(genHandlers(el.events, false), ","); + } + if (el.nativeEvents) { + data += "".concat(genHandlers(el.nativeEvents, true), ","); + } + // slot target + // only for non-scoped slots + if (el.slotTarget && !el.slotScope) { + data += "slot:".concat(el.slotTarget, ","); + } + // scoped slots + if (el.scopedSlots) { + data += "".concat(genScopedSlots(el, el.scopedSlots, state), ","); + } + // component v-model + if (el.model) { + data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},"); + } + // inline-template + if (el.inlineTemplate) { + var inlineTemplate = genInlineTemplate(el, state); + if (inlineTemplate) { + data += "".concat(inlineTemplate, ","); + } + } + data = data.replace(/,$/, '') + '}'; + // v-bind dynamic argument wrap + // v-bind with dynamic arguments must be applied using the same v-bind object + // merge helper so that class/style/mustUseProp attrs are handled correctly. + if (el.dynamicAttrs) { + data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")"); + } + // v-bind data wrap + if (el.wrapData) { + data = el.wrapData(data); + } + // v-on data wrap + if (el.wrapListeners) { + data = el.wrapListeners(data); + } + return data; + } + function genDirectives(el, state) { + var dirs = el.directives; + if (!dirs) + return; + var res = 'directives:['; + var hasRuntime = false; + var i, l, dir, needRuntime; + for (i = 0, l = dirs.length; i < l; i++) { + dir = dirs[i]; + needRuntime = true; + var gen = state.directives[dir.name]; + if (gen) { + // compile-time directive that manipulates AST. + // returns true if it also needs a runtime counterpart. + needRuntime = !!gen(el, dir, state.warn); + } + if (needRuntime) { + hasRuntime = true; + res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value + ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value)) + : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},"); + } + } + if (hasRuntime) { + return res.slice(0, -1) + ']'; + } + } + function genInlineTemplate(el, state) { + var ast = el.children[0]; + if ((el.children.length !== 1 || ast.type !== 1)) { + state.warn('Inline-template components must have exactly one child element.', { start: el.start }); + } + if (ast && ast.type === 1) { + var inlineRenderFns = generate(ast, state.options); + return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns + .map(function (code) { return "function(){".concat(code, "}"); }) + .join(','), "]}"); + } + } + function genScopedSlots(el, slots, state) { + // by default scoped slots are considered "stable", this allows child + // components with only scoped slots to skip forced updates from parent. + // but in some cases we have to bail-out of this optimization + // for example if the slot contains dynamic names, has v-if or v-for on them... + var needsForceUpdate = el.for || + Object.keys(slots).some(function (key) { + var slot = slots[key]; + return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic + ); + }); + // #9534: if a component with scoped slots is inside a conditional branch, + // it's possible for the same component to be reused but with different + // compiled slot content. To avoid that, we generate a unique key based on + // the generated code of all the slot contents. + var needsKey = !!el.if; + // OR when it is inside another scoped slot or v-for (the reactivity may be + // disconnected due to the intermediate scope variable) + // #9438, #9506 + // TODO: this can be further optimized by properly analyzing in-scope bindings + // and skip force updating ones that do not actually use scope variables. + if (!needsForceUpdate) { + var parent_2 = el.parent; + while (parent_2) { + if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) || + parent_2.for) { + needsForceUpdate = true; + break; + } + if (parent_2.if) { + needsKey = true; + } + parent_2 = parent_2.parent; + } + } + var generatedSlots = Object.keys(slots) + .map(function (key) { return genScopedSlot(slots[key], state); }) + .join(','); + return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")"); + } + function hash(str) { + var hash = 5381; + var i = str.length; + while (i) { + hash = (hash * 33) ^ str.charCodeAt(--i); + } + return hash >>> 0; + } + function containsSlotChild(el) { + if (el.type === 1) { + if (el.tag === 'slot') { + return true; + } + return el.children.some(containsSlotChild); + } + return false; + } + function genScopedSlot(el, state) { + var isLegacySyntax = el.attrsMap['slot-scope']; + if (el.if && !el.ifProcessed && !isLegacySyntax) { + return genIf(el, state, genScopedSlot, "null"); + } + if (el.for && !el.forProcessed) { + return genFor(el, state, genScopedSlot); + } + var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope); + var fn = "function(".concat(slotScope, "){") + + "return ".concat(el.tag === 'template' + ? el.if && isLegacySyntax + ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined") + : genChildren(el, state) || 'undefined' + : genElement(el, state), "}"); + // reverse proxy v-slot without scope on this.$slots + var reverseProxy = slotScope ? "" : ",proxy:true"; + return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}"); + } + function genChildren(el, state, checkSkip, altGenElement, altGenNode) { + var children = el.children; + if (children.length) { + var el_1 = children[0]; + // optimize single v-for + if (children.length === 1 && + el_1.for && + el_1.tag !== 'template' && + el_1.tag !== 'slot') { + var normalizationType_1 = checkSkip + ? state.maybeComponent(el_1) + ? ",1" + : ",0" + : ""; + return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1); + } + var normalizationType = checkSkip + ? getNormalizationType(children, state.maybeComponent) + : 0; + var gen_1 = altGenNode || genNode; + return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : ''); + } + } + // determine the normalization needed for the children array. + // 0: no normalization needed + // 1: simple normalization needed (possible 1-level deep nested array) + // 2: full normalization needed + function getNormalizationType(children, maybeComponent) { + var res = 0; + for (var i = 0; i < children.length; i++) { + var el = children[i]; + if (el.type !== 1) { + continue; + } + if (needsNormalization(el) || + (el.ifConditions && + el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) { + res = 2; + break; + } + if (maybeComponent(el) || + (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) { + res = 1; + } + } + return res; + } + function needsNormalization(el) { + return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'; + } + function genNode(node, state) { + if (node.type === 1) { + return genElement(node, state); + } + else if (node.type === 3 && node.isComment) { + return genComment(node); + } + else { + return genText(node); + } + } + function genText(text) { + return "_v(".concat(text.type === 2 + ? text.expression // no need for () because already wrapped in _s() + : transformSpecialNewlines(JSON.stringify(text.text)), ")"); + } + function genComment(comment) { + return "_e(".concat(JSON.stringify(comment.text), ")"); + } + function genSlot(el, state) { + var slotName = el.slotName || '"default"'; + var children = genChildren(el, state); + var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : ''); + var attrs = el.attrs || el.dynamicAttrs + ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({ + // slot props are camelized + name: camelize(attr.name), + value: attr.value, + dynamic: attr.dynamic + }); })) + : null; + var bind = el.attrsMap['v-bind']; + if ((attrs || bind) && !children) { + res += ",null"; + } + if (attrs) { + res += ",".concat(attrs); + } + if (bind) { + res += "".concat(attrs ? '' : ',null', ",").concat(bind); + } + return res + ')'; + } + // componentName is el.component, take it as argument to shun flow's pessimistic refinement + function genComponent(componentName, el, state) { + var children = el.inlineTemplate ? null : genChildren(el, state, true); + return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")"); + } + function genProps(props) { + var staticProps = ""; + var dynamicProps = ""; + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + var value = transformSpecialNewlines(prop.value); + if (prop.dynamic) { + dynamicProps += "".concat(prop.name, ",").concat(value, ","); + } + else { + staticProps += "\"".concat(prop.name, "\":").concat(value, ","); + } + } + staticProps = "{".concat(staticProps.slice(0, -1), "}"); + if (dynamicProps) { + return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])"); + } + else { + return staticProps; + } + } + // #3895, #4268 + function transformSpecialNewlines(text) { + return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); + } + + // these keywords should not appear inside expressions, but operators like + // typeof, instanceof and in are allowed + var prohibitedKeywordRE = new RegExp('\\b' + + ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + + 'super,throw,while,yield,delete,export,import,return,switch,default,' + + 'extends,finally,continue,debugger,function,arguments') + .split(',') + .join('\\b|\\b') + + '\\b'); + // these unary operators should not be used as property/method names + var unaryOperatorsRE = new RegExp('\\b' + + 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + + '\\s*\\([^\\)]*\\)'); + // strip strings in expressions + var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; + // detect problematic expressions in a template + function detectErrors(ast, warn) { + if (ast) { + checkNode(ast, warn); + } + } + function checkNode(node, warn) { + if (node.type === 1) { + for (var name_1 in node.attrsMap) { + if (dirRE.test(name_1)) { + var value = node.attrsMap[name_1]; + if (value) { + var range = node.rawAttrsMap[name_1]; + if (name_1 === 'v-for') { + checkFor(node, "v-for=\"".concat(value, "\""), warn, range); + } + else if (name_1 === 'v-slot' || name_1[0] === '#') { + checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); + } + else if (onRE.test(name_1)) { + checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); + } + else { + checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); + } + } + } + } + if (node.children) { + for (var i = 0; i < node.children.length; i++) { + checkNode(node.children[i], warn); + } + } + } + else if (node.type === 2) { + checkExpression(node.expression, node.text, warn, node); + } + } + function checkEvent(exp, text, warn, range) { + var stripped = exp.replace(stripStringRE, ''); + var keywordMatch = stripped.match(unaryOperatorsRE); + if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { + warn("avoid using JavaScript unary operator as property name: " + + "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range); + } + checkExpression(exp, text, warn, range); + } + function checkFor(node, text, warn, range) { + checkExpression(node.for || '', text, warn, range); + checkIdentifier(node.alias, 'v-for alias', text, warn, range); + checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); + checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); + } + function checkIdentifier(ident, type, text, warn, range) { + if (typeof ident === 'string') { + try { + new Function("var ".concat(ident, "=_")); + } + catch (e) { + warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range); + } + } + } + function checkExpression(exp, text, warn, range) { + try { + new Function("return ".concat(exp)); + } + catch (e) { + var keywordMatch = exp + .replace(stripStringRE, '') + .match(prohibitedKeywordRE); + if (keywordMatch) { + warn("avoid using JavaScript keyword as property name: " + + "\"".concat(keywordMatch[0], "\"\n Raw expression: ").concat(text.trim()), range); + } + else { + warn("invalid expression: ".concat(e.message, " in\n\n") + + " ".concat(exp, "\n\n") + + " Raw expression: ".concat(text.trim(), "\n"), range); + } + } + } + function checkFunctionParameterExpression(exp, text, warn, range) { + try { + new Function(exp, ''); + } + catch (e) { + warn("invalid function parameter expression: ".concat(e.message, " in\n\n") + + " ".concat(exp, "\n\n") + + " Raw expression: ".concat(text.trim(), "\n"), range); + } + } + + var range = 2; + function generateCodeFrame(source, start, end) { + if (start === void 0) { start = 0; } + if (end === void 0) { end = source.length; } + var lines = source.split(/\r?\n/); + var count = 0; + var res = []; + for (var i = 0; i < lines.length; i++) { + count += lines[i].length + 1; + if (count >= start) { + for (var j = i - range; j <= i + range || end > count; j++) { + if (j < 0 || j >= lines.length) + continue; + res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "| ").concat(lines[j])); + var lineLength = lines[j].length; + if (j === i) { + // push underline + var pad = start - (count - lineLength) + 1; + var length_1 = end > count ? lineLength - pad : end - start; + res.push(" | " + repeat(" ", pad) + repeat("^", length_1)); + } + else if (j > i) { + if (end > count) { + var length_2 = Math.min(end - count, lineLength); + res.push(" | " + repeat("^", length_2)); + } + count += lineLength + 1; + } + } + break; + } + } + return res.join('\n'); + } + function repeat(str, n) { + var result = ''; + if (n > 0) { + // eslint-disable-next-line no-constant-condition + while (true) { + // eslint-disable-line + if (n & 1) + result += str; + n >>>= 1; + if (n <= 0) + break; + str += str; + } + } + return result; + } + + function createFunction(code, errors) { + try { + return new Function(code); + } + catch (err) { + errors.push({ err: err, code: code }); + return noop; + } + } + function createCompileToFunctionFn(compile) { + var cache = Object.create(null); + return function compileToFunctions(template, options, vm) { + options = extend({}, options); + var warn = options.warn || warn$2; + delete options.warn; + /* istanbul ignore if */ + { + // detect possible CSP restriction + try { + new Function('return 1'); + } + catch (e) { + if (e.toString().match(/unsafe-eval|CSP/)) { + warn('It seems you are using the standalone build of Vue.js in an ' + + 'environment with Content Security Policy that prohibits unsafe-eval. ' + + 'The template compiler cannot work in this environment. Consider ' + + 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + + 'templates into render functions.'); + } + } + } + // check cache + var key = options.delimiters + ? String(options.delimiters) + template + : template; + if (cache[key]) { + return cache[key]; + } + // compile + var compiled = compile(template, options); + // check compilation errors/tips + { + if (compiled.errors && compiled.errors.length) { + if (options.outputSourceRange) { + compiled.errors.forEach(function (e) { + warn("Error compiling template:\n\n".concat(e.msg, "\n\n") + + generateCodeFrame(template, e.start, e.end), vm); + }); + } + else { + warn("Error compiling template:\n\n".concat(template, "\n\n") + + compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') + + '\n', vm); + } + } + if (compiled.tips && compiled.tips.length) { + if (options.outputSourceRange) { + compiled.tips.forEach(function (e) { return tip(e.msg, vm); }); + } + else { + compiled.tips.forEach(function (msg) { return tip(msg, vm); }); + } + } + } + // turn code into functions + var res = {}; + var fnGenErrors = []; + res.render = createFunction(compiled.render, fnGenErrors); + res.staticRenderFns = compiled.staticRenderFns.map(function (code) { + return createFunction(code, fnGenErrors); + }); + // check function generation errors. + // this should only happen if there is a bug in the compiler itself. + // mostly for codegen development use + /* istanbul ignore if */ + { + if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { + warn("Failed to generate render function:\n\n" + + fnGenErrors + .map(function (_a) { + var err = _a.err, code = _a.code; + return "".concat(err.toString(), " in\n\n").concat(code, "\n"); + }) + .join('\n'), vm); + } + } + return (cache[key] = res); + }; + } + + function createCompilerCreator(baseCompile) { + return function createCompiler(baseOptions) { + function compile(template, options) { + var finalOptions = Object.create(baseOptions); + var errors = []; + var tips = []; + var warn = function (msg, range, tip) { + (tip ? tips : errors).push(msg); + }; + if (options) { + if (options.outputSourceRange) { + // $flow-disable-line + var leadingSpaceLength_1 = template.match(/^\s*/)[0].length; + warn = function (msg, range, tip) { + var data = typeof msg === 'string' ? { msg: msg } : msg; + if (range) { + if (range.start != null) { + data.start = range.start + leadingSpaceLength_1; + } + if (range.end != null) { + data.end = range.end + leadingSpaceLength_1; + } + } + (tip ? tips : errors).push(data); + }; + } + // merge custom modules + if (options.modules) { + finalOptions.modules = (baseOptions.modules || []).concat(options.modules); + } + // merge custom directives + if (options.directives) { + finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives); + } + // copy other options + for (var key in options) { + if (key !== 'modules' && key !== 'directives') { + finalOptions[key] = options[key]; + } + } + } + finalOptions.warn = warn; + var compiled = baseCompile(template.trim(), finalOptions); + { + detectErrors(compiled.ast, warn); + } + compiled.errors = errors; + compiled.tips = tips; + return compiled; + } + return { + compile: compile, + compileToFunctions: createCompileToFunctionFn(compile) + }; + }; + } + + // `createCompilerCreator` allows creating compilers that use alternative + // parser/optimizer/codegen, e.g the SSR optimizing compiler. + // Here we just export a default compiler using the default parts. + var createCompiler = createCompilerCreator(function baseCompile(template, options) { + var ast = parse(template.trim(), options); + if (options.optimize !== false) { + optimize(ast, options); + } + var code = generate(ast, options); + return { + ast: ast, + render: code.render, + staticRenderFns: code.staticRenderFns + }; + }); + + var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions; + + // check whether current browser encodes a char inside attribute values + var div; + function getShouldDecode(href) { + div = div || document.createElement('div'); + div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; + return div.innerHTML.indexOf(' ') > 0; + } + // #3663: IE encodes newlines inside attribute values while other browsers don't + var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; + // #6828: chrome encodes content in a[href] + var shouldDecodeNewlinesForHref = inBrowser + ? getShouldDecode(true) + : false; + + var idToTemplate = cached(function (id) { + var el = query(id); + return el && el.innerHTML; + }); + var mount = Vue.prototype.$mount; + Vue.prototype.$mount = function (el, hydrating) { + el = el && query(el); + /* istanbul ignore if */ + if (el === document.body || el === document.documentElement) { + warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead."); + return this; + } + var options = this.$options; + // resolve template/el and convert to render function + if (!options.render) { + var template = options.template; + if (template) { + if (typeof template === 'string') { + if (template.charAt(0) === '#') { + template = idToTemplate(template); + /* istanbul ignore if */ + if (!template) { + warn$2("Template element not found or is empty: ".concat(options.template), this); + } + } + } + else if (template.nodeType) { + template = template.innerHTML; + } + else { + { + warn$2('invalid template option:' + template, this); + } + return this; + } + } + else if (el) { + // @ts-expect-error + template = getOuterHTML(el); + } + if (template) { + /* istanbul ignore if */ + if (config.performance && mark) { + mark('compile'); + } + var _a = compileToFunctions(template, { + outputSourceRange: true, + shouldDecodeNewlines: shouldDecodeNewlines, + shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, + delimiters: options.delimiters, + comments: options.comments + }, this), render = _a.render, staticRenderFns = _a.staticRenderFns; + options.render = render; + options.staticRenderFns = staticRenderFns; + /* istanbul ignore if */ + if (config.performance && mark) { + mark('compile end'); + measure("vue ".concat(this._name, " compile"), 'compile', 'compile end'); + } + } + } + return mount.call(this, el, hydrating); + }; + /** + * Get outerHTML of elements, taking care + * of SVG elements in IE as well. + */ + function getOuterHTML(el) { + if (el.outerHTML) { + return el.outerHTML; + } + else { + var container = document.createElement('div'); + container.appendChild(el.cloneNode(true)); + return container.innerHTML; + } + } + Vue.compile = compileToFunctions; + + // export type EffectScheduler = (...args: any[]) => any + /** + * @internal since we are not exposing this in Vue 2, it's used only for + * internal testing. + */ + function effect(fn, scheduler) { + var watcher = new Watcher(currentInstance, fn, noop, { + sync: true + }); + if (scheduler) { + watcher.update = function () { + scheduler(function () { return watcher.run(); }); + }; + } + } + + extend(Vue, vca); + Vue.effect = effect; + + return Vue; + +})); diff --git a/public/vendor/vue.min.js b/public/vendor/vue.min.js new file mode 100644 index 0000000000000000000000000000000000000000..babbe05f402e4642fc497aecf570b2226ecd8daf --- /dev/null +++ b/public/vendor/vue.min.js @@ -0,0 +1,11 @@ +/*! + * Vue.js v2.7.8 + * (c) 2014-2022 Evan You + * Released under the MIT License. + */ +/*! + * Vue.js v2.7.8 + * (c) 2014-2022 Evan You + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Vue=e()}(this,(function(){"use strict";var t=Object.freeze({}),e=Array.isArray;function n(t){return null==t}function r(t){return null!=t}function o(t){return!0===t}function i(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function a(t){return"function"==typeof t}function s(t){return null!==t&&"object"==typeof t}var c=Object.prototype.toString;function u(t){return"[object Object]"===c.call(t)}function l(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return r(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function p(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}var h=v("slot,component",!0),m=v("key,ref,slot,slot-scope,is");function g(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}var y=Object.prototype.hasOwnProperty;function _(t,e){return y.call(t,e)}function b(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var $=/-(\w)/g,w=b((function(t){return t.replace($,(function(t,e){return e?e.toUpperCase():""}))})),x=b((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,k=b((function(t){return t.replace(C,"-$1").toLowerCase()}));var S=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function T(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n<t.length;n++)t[n]&&T(e,t[n]);return e}function j(t,e,n){}var E=function(t,e,n){return!1},N=function(t){return t};function P(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{var o=Array.isArray(t),i=Array.isArray(e);if(o&&i)return t.length===e.length&&t.every((function(t,n){return P(t,e[n])}));if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(o||i)return!1;var a=Object.keys(t),c=Object.keys(e);return a.length===c.length&&a.every((function(n){return P(t[n],e[n])}))}catch(t){return!1}}function D(t,e){for(var n=0;n<t.length;n++)if(P(t[n],e))return n;return-1}function M(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function I(t,e){return t===e?0===t&&1/t!=1/e:t==t||e==e}var L="data-server-rendered",R=["component","directive","filter"],F=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],H={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:j,parsePlatformTagName:N,mustUseProp:E,async:!0,_lifecycleHooks:F},B=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function U(t){var e=(t+"").charCodeAt(0);return 36===e||95===e}function z(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var V=new RegExp("[^".concat(B.source,".$_\\d]"));var K="__proto__"in{},J="undefined"!=typeof window,q=J&&window.navigator.userAgent.toLowerCase(),W=q&&/msie|trident/.test(q),Z=q&&q.indexOf("msie 9.0")>0,G=q&&q.indexOf("edge/")>0;q&&q.indexOf("android");var X=q&&/iphone|ipad|ipod|ios/.test(q);q&&/chrome\/\d+/.test(q),q&&/phantomjs/.test(q);var Y,Q=q&&q.match(/firefox\/(\d+)/),tt={}.watch,et=!1;if(J)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===Y&&(Y=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),Y},ot=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function it(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&it(Symbol)&&"undefined"!=typeof Reflect&&it(Reflect.ownKeys);at="undefined"!=typeof Set&&it(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=null;function ut(t){void 0===t&&(t=null),t||ct&&ct._scope.off(),ct=t,t&&t._scope.on()}var lt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ft=function(t){void 0===t&&(t="");var e=new lt;return e.text=t,e.isComment=!0,e};function dt(t){return new lt(void 0,void 0,void 0,String(t))}function pt(t){var e=new lt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var vt=0,ht=function(){function t(){this.id=vt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){g(this.subs,t)},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){for(var e=this.subs.slice(),n=0,r=e.length;n<r;n++)e[n].update()},t}();ht.target=null;var mt=[];function gt(t){mt.push(t),ht.target=t}function yt(){mt.pop(),ht.target=mt[mt.length-1]}var _t=Array.prototype,bt=Object.create(_t);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){var e=_t[t];z(bt,t,(function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o,i=e.apply(this,n),a=this.__ob__;switch(t){case"push":case"unshift":o=n;break;case"splice":o=n.slice(2)}return o&&a.observeArray(o),a.dep.notify(),i}))}));var $t=Object.getOwnPropertyNames(bt),wt={},xt=!0;function Ct(t){xt=t}var kt={notify:j,depend:j,addSub:j,removeSub:j},St=function(){function t(t,n,r){if(void 0===n&&(n=!1),void 0===r&&(r=!1),this.value=t,this.shallow=n,this.mock=r,this.dep=r?kt:new ht,this.vmCount=0,z(t,"__ob__",this),e(t)){if(!r)if(K)t.__proto__=bt;else for(var o=0,i=$t.length;o<i;o++){z(t,s=$t[o],bt[s])}n||this.observeArray(t)}else{var a=Object.keys(t);for(o=0;o<a.length;o++){var s;Tt(t,s=a[o],wt,void 0,n,r)}}}return t.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)Ot(t[e],!1,this.mock)},t}();function Ot(t,n,r){var o;if(!(!s(t)||Rt(t)||t instanceof lt))return _(t,"__ob__")&&t.__ob__ instanceof St?o=t.__ob__:!xt||!r&&rt()||!e(t)&&!u(t)||!Object.isExtensible(t)||t.__v_skip||(o=new St(t,n,r)),o}function Tt(t,n,r,o,i,a){var s=new ht,c=Object.getOwnPropertyDescriptor(t,n);if(!c||!1!==c.configurable){var u=c&&c.get,l=c&&c.set;u&&!l||r!==wt&&2!==arguments.length||(r=t[n]);var f=!i&&Ot(r,!1,a);return Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var n=u?u.call(t):r;return ht.target&&(s.depend(),f&&(f.dep.depend(),e(n)&&Et(n))),Rt(n)&&!i?n.value:n},set:function(e){var n=u?u.call(t):r;if(I(n,e)){if(l)l.call(t,e);else{if(u)return;if(!i&&Rt(n)&&!Rt(e))return void(n.value=e);r=e}f=!i&&Ot(e,!1,a),s.notify()}}}),s}}function At(t,n,r){if(!It(t)){var o=t.__ob__;return e(t)&&l(n)?(t.length=Math.max(t.length,n),t.splice(n,1,r),o&&!o.shallow&&o.mock&&Ot(r,!1,!0),r):n in t&&!(n in Object.prototype)?(t[n]=r,r):t._isVue||o&&o.vmCount?r:o?(Tt(o.value,n,r,void 0,o.shallow,o.mock),o.dep.notify(),r):(t[n]=r,r)}}function jt(t,n){if(e(t)&&l(n))t.splice(n,1);else{var r=t.__ob__;t._isVue||r&&r.vmCount||It(t)||_(t,n)&&(delete t[n],r&&r.dep.notify())}}function Et(t){for(var n=void 0,r=0,o=t.length;r<o;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),e(n)&&Et(n)}function Nt(t){return Pt(t,!0),z(t,"__v_isShallow",!0),t}function Pt(t,e){It(t)||Ot(t,e,rt())}function Dt(t){return It(t)?Dt(t.__v_raw):!(!t||!t.__ob__)}function Mt(t){return!(!t||!t.__v_isShallow)}function It(t){return!(!t||!t.__v_isReadonly)}var Lt="__v_isRef";function Rt(t){return!(!t||!0!==t.__v_isRef)}function Ft(t,e){if(Rt(t))return t;var n={};return z(n,Lt,!0),z(n,"__v_isShallow",e),z(n,"dep",Tt(n,"value",t,null,e,rt())),n}function Ht(t,e,n){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var t=e[n];if(Rt(t))return t.value;var r=t&&t.__ob__;return r&&r.dep.depend(),t},set:function(t){var r=e[n];Rt(r)&&!Rt(t)?r.value=t:e[n]=t}})}function Bt(t,e,n){var r=t[e];if(Rt(r))return r;var o={get value(){var r=t[e];return void 0===r?n:r},set value(n){t[e]=n}};return z(o,Lt,!0),o}function Ut(t){return zt(t,!1)}function zt(t,e){if(!u(t))return t;if(It(t))return t;var n=e?"__v_rawToShallowReadonly":"__v_rawToReadonly",r=t[n];if(r)return r;var o=Object.create(Object.getPrototypeOf(t));z(t,n,o),z(o,"__v_isReadonly",!0),z(o,"__v_raw",t),Rt(t)&&z(o,Lt,!0),(e||Mt(t))&&z(o,"__v_isShallow",!0);for(var i=Object.keys(t),a=0;a<i.length;a++)Vt(o,t,i[a],e);return o}function Vt(t,e,n,r){Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var t=e[n];return r||!u(t)?t:Ut(t)},set:function(){}})}var Kt=b((function(t){var e="&"===t.charAt(0),n="~"===(t=e?t.slice(1):t).charAt(0),r="!"===(t=n?t.slice(1):t).charAt(0);return{name:t=r?t.slice(1):t,once:n,capture:r,passive:e}}));function Jt(t,n){function r(){var t=r.fns;if(!e(t))return fn(t,null,arguments,n,"v-on handler");for(var o=t.slice(),i=0;i<o.length;i++)fn(o[i],null,arguments,n,"v-on handler")}return r.fns=t,r}function qt(t,e,r,i,a,s){var c,u,l,f;for(c in t)u=t[c],l=e[c],f=Kt(c),n(u)||(n(l)?(n(u.fns)&&(u=t[c]=Jt(u,s)),o(f.once)&&(u=t[c]=a(f.name,u,f.capture)),r(f.name,u,f.capture,f.passive,f.params)):u!==l&&(l.fns=u,t[c]=l));for(c in e)n(t[c])&&i((f=Kt(c)).name,e[c],f.capture)}function Wt(t,e,i){var a;t instanceof lt&&(t=t.data.hook||(t.data.hook={}));var s=t[e];function c(){i.apply(this,arguments),g(a.fns,c)}n(s)?a=Jt([c]):r(s.fns)&&o(s.merged)?(a=s).fns.push(c):a=Jt([s,c]),a.merged=!0,t[e]=a}function Zt(t,e,n,o,i){if(r(e)){if(_(e,n))return t[n]=e[n],i||delete e[n],!0;if(_(e,o))return t[n]=e[o],i||delete e[o],!0}return!1}function Gt(t){return i(t)?[dt(t)]:e(t)?Yt(t):void 0}function Xt(t){return r(t)&&r(t.text)&&!1===t.isComment}function Yt(t,a){var s,c,u,l,f=[];for(s=0;s<t.length;s++)n(c=t[s])||"boolean"==typeof c||(l=f[u=f.length-1],e(c)?c.length>0&&(Xt((c=Yt(c,"".concat(a||"","_").concat(s)))[0])&&Xt(l)&&(f[u]=dt(l.text+c[0].text),c.shift()),f.push.apply(f,c)):i(c)?Xt(l)?f[u]=dt(l.text+c):""!==c&&f.push(dt(c)):Xt(c)&&Xt(l)?f[u]=dt(l.text+c.text):(o(t._isVList)&&r(c.tag)&&n(c.key)&&r(a)&&(c.key="__vlist".concat(a,"_").concat(s,"__")),f.push(c)));return f}function Qt(t,n,c,u,l,f){return(e(c)||i(c))&&(l=u,u=c,c=void 0),o(f)&&(l=2),function(t,n,o,i,c){if(r(o)&&r(o.__ob__))return ft();r(o)&&r(o.is)&&(n=o.is);if(!n)return ft();e(i)&&a(i[0])&&((o=o||{}).scopedSlots={default:i[0]},i.length=0);2===c?i=Gt(i):1===c&&(i=function(t){for(var n=0;n<t.length;n++)if(e(t[n]))return Array.prototype.concat.apply([],t);return t}(i));var u,l;if("string"==typeof n){var f=void 0;l=t.$vnode&&t.$vnode.ns||H.getTagNamespace(n),u=H.isReservedTag(n)?new lt(H.parsePlatformTagName(n),o,i,void 0,void 0,t):o&&o.pre||!r(f=gr(t.$options,"components",n))?new lt(n,o,i,void 0,void 0,t):sr(f,o,t,i,n)}else u=sr(n,o,t,i);return e(u)?u:r(u)?(r(l)&&te(u,l),r(o)&&function(t){s(t.style)&&Hn(t.style);s(t.class)&&Hn(t.class)}(o),u):ft()}(t,n,c,u,l)}function te(t,e,i){if(t.ns=e,"foreignObject"===t.tag&&(e=void 0,i=!0),r(t.children))for(var a=0,s=t.children.length;a<s;a++){var c=t.children[a];r(c.tag)&&(n(c.ns)||o(i)&&"svg"!==c.tag)&&te(c,e,i)}}function ee(t,n){var o,i,a,c,u=null;if(e(t)||"string"==typeof t)for(u=new Array(t.length),o=0,i=t.length;o<i;o++)u[o]=n(t[o],o);else if("number"==typeof t)for(u=new Array(t),o=0;o<t;o++)u[o]=n(o+1,o);else if(s(t))if(st&&t[Symbol.iterator]){u=[];for(var l=t[Symbol.iterator](),f=l.next();!f.done;)u.push(n(f.value,u.length)),f=l.next()}else for(a=Object.keys(t),u=new Array(a.length),o=0,i=a.length;o<i;o++)c=a[o],u[o]=n(t[c],c,o);return r(u)||(u=[]),u._isVList=!0,u}function ne(t,e,n,r){var o,i=this.$scopedSlots[t];i?(n=n||{},r&&(n=T(T({},r),n)),o=i(n)||(a(e)?e():e)):o=this.$slots[t]||(a(e)?e():e);var s=n&&n.slot;return s?this.$createElement("template",{slot:s},o):o}function re(t){return gr(this.$options,"filters",t)||N}function oe(t,n){return e(t)?-1===t.indexOf(n):t!==n}function ie(t,e,n,r,o){var i=H.keyCodes[e]||n;return o&&r&&!H.keyCodes[e]?oe(o,r):i?oe(i,t):r?k(r)!==e:void 0===t}function ae(t,n,r,o,i){if(r)if(s(r)){e(r)&&(r=A(r));var a=void 0,c=function(e){if("class"===e||"style"===e||m(e))a=t;else{var s=t.attrs&&t.attrs.type;a=o||H.mustUseProp(n,s,e)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var c=w(e),u=k(e);c in a||u in a||(a[e]=r[e],i&&((t.on||(t.on={}))["update:".concat(e)]=function(t){r[e]=t}))};for(var u in r)c(u)}else;return t}function se(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];return r&&!e||ue(r=n[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),"__static__".concat(t),!1),r}function ce(t,e,n){return ue(t,"__once__".concat(e).concat(n?"_".concat(n):""),!0),t}function ue(t,n,r){if(e(t))for(var o=0;o<t.length;o++)t[o]&&"string"!=typeof t[o]&&le(t[o],"".concat(n,"_").concat(o),r);else le(t,n,r)}function le(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function fe(t,e){if(e)if(u(e)){var n=t.on=t.on?T({},t.on):{};for(var r in e){var o=n[r],i=e[r];n[r]=o?[].concat(o,i):i}}else;return t}function de(t,n,r,o){n=n||{$stable:!r};for(var i=0;i<t.length;i++){var a=t[i];e(a)?de(a,n,r):a&&(a.proxy&&(a.fn.proxy=!0),n[a.key]=a.fn)}return o&&(n.$key=o),n}function pe(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeof r&&r&&(t[e[n]]=e[n+1])}return t}function ve(t,e){return"string"==typeof t?e+t:t}function he(t){t._o=ce,t._n=p,t._s=d,t._l=ee,t._t=ne,t._q=P,t._i=D,t._m=se,t._f=re,t._k=ie,t._b=ae,t._v=dt,t._e=ft,t._u=de,t._g=fe,t._d=pe,t._p=ve}function me(t,e){if(!t||!t.length)return{};for(var n={},r=0,o=t.length;r<o;r++){var i=t[r],a=i.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,i.context!==e&&i.fnContext!==e||!a||null==a.slot)(n.default||(n.default=[])).push(i);else{var s=a.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var u in n)n[u].every(ge)&&delete n[u];return n}function ge(t){return t.isComment&&!t.asyncFactory||" "===t.text}function ye(t){return t.isComment&&t.asyncFactory}function _e(e,n,r,o){var i,a=Object.keys(r).length>0,s=n?!!n.$stable:!a,c=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&o&&o!==t&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},n)n[u]&&"$"!==u[0]&&(i[u]=be(e,r,u,n[u]))}else i={};for(var l in r)l in i||(i[l]=$e(r,l));return n&&Object.isExtensible(n)&&(n._normalized=i),z(i,"$stable",s),z(i,"$key",c),z(i,"$hasNormal",a),i}function be(t,n,r,o){var i=function(){var n=ct;ut(t);var r=arguments.length?o.apply(null,arguments):o({}),i=(r=r&&"object"==typeof r&&!e(r)?[r]:Gt(r))&&r[0];return ut(n),r&&(!i||1===r.length&&i.isComment&&!ye(i))?void 0:r};return o.proxy&&Object.defineProperty(n,r,{get:i,enumerable:!0,configurable:!0}),i}function $e(t,e){return function(){return t[e]}}function we(e){return{get attrs(){if(!e._attrsProxy){var n=e._attrsProxy={};z(n,"_v_attr_proxy",!0),xe(n,e.$attrs,t,e,"$attrs")}return e._attrsProxy},get listeners(){e._listenersProxy||xe(e._listenersProxy={},e.$listeners,t,e,"$listeners");return e._listenersProxy},get slots(){return function(t){t._slotsProxy||ke(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:S(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ht(e,t,n)}))}}}function xe(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,Ce(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function Ce(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function ke(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}function Se(){var t=ct;return t._setupContext||(t._setupContext=we(t))}var Oe,Te=null;function Ae(t,e){return(t.__esModule||st&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?e.extend(t):t}function je(t){if(e(t))for(var n=0;n<t.length;n++){var o=t[n];if(r(o)&&(r(o.componentOptions)||ye(o)))return o}}function Ee(t,e){Oe.$on(t,e)}function Ne(t,e){Oe.$off(t,e)}function Pe(t,e){var n=Oe;return function r(){var o=e.apply(null,arguments);null!==o&&n.$off(t,r)}}function De(t,e,n){Oe=t,qt(e,n||{},Ee,Ne,Pe,t),Oe=void 0}var Me=null;function Ie(t){var e=Me;return Me=t,function(){Me=e}}function Le(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Re(t,e){if(e){if(t._directInactive=!1,Le(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)Re(t.$children[n]);He(t,"activated")}}function Fe(t,e){if(!(e&&(t._directInactive=!0,Le(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)Fe(t.$children[n]);He(t,"deactivated")}}function He(t,e,n,r){void 0===r&&(r=!0),gt();var o=ct;r&&ut(t);var i=t.$options[e],a="".concat(e," hook");if(i)for(var s=0,c=i.length;s<c;s++)fn(i[s],t,n||null,t,a);t._hasHookEvent&&t.$emit("hook:"+e),r&&ut(o),yt()}var Be=[],Ue=[],ze={},Ve=!1,Ke=!1,Je=0;var qe=0,We=Date.now;if(J&&!W){var Ze=window.performance;Ze&&"function"==typeof Ze.now&&We()>document.createEvent("Event").timeStamp&&(We=function(){return Ze.now()})}var Ge=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Xe(){var t,e;for(qe=We(),Ke=!0,Be.sort(Ge),Je=0;Je<Be.length;Je++)(t=Be[Je]).before&&t.before(),e=t.id,ze[e]=null,t.run();var n=Ue.slice(),r=Be.slice();Je=Be.length=Ue.length=0,ze={},Ve=Ke=!1,function(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,Re(t[e],!0)}(n),function(t){var e=t.length;for(;e--;){var n=t[e],r=n.vm;r&&r._watcher===n&&r._isMounted&&!r._isDestroyed&&He(r,"updated")}}(r),ot&&H.devtools&&ot.emit("flush")}function Ye(t){var e=t.id;if(null==ze[e]&&(t!==ht.target||!t.noRecurse)){if(ze[e]=!0,Ke){for(var n=Be.length-1;n>Je&&Be[n].id>t.id;)n--;Be.splice(n+1,0,t)}else Be.push(t);Ve||(Ve=!0,xn(Xe))}}var Qe="watcher",tn="".concat(Qe," callback"),en="".concat(Qe," getter"),nn="".concat(Qe," cleanup");function rn(t,e){return sn(t,null,{flush:"post"})}var on,an={};function sn(n,r,o){var i=void 0===o?t:o,s=i.immediate,c=i.deep,u=i.flush,l=void 0===u?"pre":u;i.onTrack,i.onTrigger;var f,d,p=ct,v=function(t,e,n){return void 0===n&&(n=null),fn(t,null,n,p,e)},h=!1,m=!1;if(Rt(n)?(f=function(){return n.value},h=Mt(n)):Dt(n)?(f=function(){return n.__ob__.dep.depend(),n},c=!0):e(n)?(m=!0,h=n.some((function(t){return Dt(t)||Mt(t)})),f=function(){return n.map((function(t){return Rt(t)?t.value:Dt(t)?Hn(t):a(t)?v(t,en):void 0}))}):f=a(n)?r?function(){return v(n,en)}:function(){if(!p||!p._isDestroyed)return d&&d(),v(n,Qe,[y])}:j,r&&c){var g=f;f=function(){return Hn(g())}}var y=function(t){d=_.onStop=function(){v(t,nn)}};if(rt())return y=j,r?s&&v(r,tn,[f(),m?[]:void 0,y]):f(),j;var _=new zn(ct,f,j,{lazy:!0});_.noRecurse=!r;var b=m?[]:an;return _.run=function(){if(_.active||"pre"===l&&p&&p._isBeingDestroyed)if(r){var t=_.get();(c||h||(m?t.some((function(t,e){return I(t,b[e])})):I(t,b)))&&(d&&d(),v(r,tn,[t,b===an?void 0:b,y]),b=t)}else _.get()},"sync"===l?_.update=_.run:"post"===l?(_.post=!0,_.update=function(){return Ye(_)}):_.update=function(){if(p&&p===ct&&!p._isMounted){var t=p._preWatchers||(p._preWatchers=[]);t.indexOf(_)<0&&t.push(_)}else Ye(_)},r?s?_.run():b=_.get():"post"===l&&p?p.$once("hook:mounted",(function(){return _.get()})):_.get(),function(){_.teardown()}}var cn=function(){function t(t){void 0===t&&(t=!1),this.active=!0,this.effects=[],this.cleanups=[],!t&&on&&(this.parent=on,this.index=(on.scopes||(on.scopes=[])).push(this)-1)}return t.prototype.run=function(t){if(this.active){var e=on;try{return on=this,t()}finally{on=e}}},t.prototype.on=function(){on=this},t.prototype.off=function(){on=this.parent},t.prototype.stop=function(t){if(this.active){var e=void 0,n=void 0;for(e=0,n=this.effects.length;e<n;e++)this.effects[e].teardown();for(e=0,n=this.cleanups.length;e<n;e++)this.cleanups[e]();if(this.scopes)for(e=0,n=this.scopes.length;e<n;e++)this.scopes[e].stop(!0);if(this.parent&&!t){var r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.active=!1}},t}();function un(t){var e=t._provided,n=t.$parent&&t.$parent._provided;return n===e?t._provided=Object.create(n):e}function ln(t,e,n){gt();try{if(e)for(var r=e;r=r.$parent;){var o=r.$options.errorCaptured;if(o)for(var i=0;i<o.length;i++)try{if(!1===o[i].call(r,t,e,n))return}catch(t){dn(t,r,"errorCaptured hook")}}dn(t,e,n)}finally{yt()}}function fn(t,e,n,r,o){var i;try{(i=n?t.apply(e,n):t.call(e))&&!i._isVue&&f(i)&&!i._handled&&(i.catch((function(t){return ln(t,r,o+" (Promise/async)")})),i._handled=!0)}catch(t){ln(t,r,o)}return i}function dn(t,e,n){if(H.errorHandler)try{return H.errorHandler.call(null,t,e,n)}catch(e){e!==t&&pn(e)}pn(t)}function pn(t,e,n){if(!J||"undefined"==typeof console)throw t;console.error(t)}var vn,hn=!1,mn=[],gn=!1;function yn(){gn=!1;var t=mn.slice(0);mn.length=0;for(var e=0;e<t.length;e++)t[e]()}if("undefined"!=typeof Promise&&it(Promise)){var _n=Promise.resolve();vn=function(){_n.then(yn),X&&setTimeout(j)},hn=!0}else if(W||"undefined"==typeof MutationObserver||!it(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())vn="undefined"!=typeof setImmediate&&it(setImmediate)?function(){setImmediate(yn)}:function(){setTimeout(yn,0)};else{var bn=1,$n=new MutationObserver(yn),wn=document.createTextNode(String(bn));$n.observe(wn,{characterData:!0}),vn=function(){bn=(bn+1)%2,wn.data=String(bn)},hn=!0}function xn(t,e){var n;if(mn.push((function(){if(t)try{t.call(e)}catch(t){ln(t,e,"nextTick")}else n&&n(e)})),gn||(gn=!0,vn()),!t&&"undefined"!=typeof Promise)return new Promise((function(t){n=t}))}function Cn(t){return function(e,n){if(void 0===n&&(n=ct),n)return function(t,e,n){var r=t.$options;r[e]=pr(r[e],n)}(n,t,e)}}var kn=Cn("beforeMount"),Sn=Cn("mounted"),On=Cn("beforeUpdate"),Tn=Cn("updated"),An=Cn("beforeDestroy"),jn=Cn("destroyed"),En=Cn("errorCaptured"),Nn=Cn("activated"),Pn=Cn("deactivated"),Dn=Cn("serverPrefetch"),Mn=Cn("renderTracked"),In=Cn("renderTriggered"),Ln="2.7.8";var Rn=Object.freeze({__proto__:null,version:Ln,defineComponent:function(t){return t},ref:function(t){return Ft(t,!1)},shallowRef:function(t){return Ft(t,!0)},isRef:Rt,toRef:Bt,toRefs:function(t){var n=e(t)?new Array(t.length):{};for(var r in t)n[r]=Bt(t,r);return n},unref:function(t){return Rt(t)?t.value:t},proxyRefs:function(t){if(Dt(t))return t;for(var e={},n=Object.keys(t),r=0;r<n.length;r++)Ht(e,t,n[r]);return e},customRef:function(t){var e=new ht,n=t((function(){e.depend()}),(function(){e.notify()})),r=n.get,o=n.set,i={get value(){return r()},set value(t){o(t)}};return z(i,Lt,!0),i},triggerRef:function(t){t.dep&&t.dep.notify()},reactive:function(t){return Pt(t,!1),t},isReactive:Dt,isReadonly:It,isShallow:Mt,isProxy:function(t){return Dt(t)||It(t)},shallowReactive:Nt,markRaw:function(t){return z(t,"__v_skip",!0),t},toRaw:function t(e){var n=e&&e.__v_raw;return n?t(n):e},readonly:Ut,shallowReadonly:function(t){return zt(t,!0)},computed:function(t,e){var n,r,o=a(t);o?(n=t,r=j):(n=t.get,r=t.set);var i=rt()?null:new zn(ct,n,j,{lazy:!0}),s={effect:i,get value(){return i?(i.dirty&&i.evaluate(),ht.target&&i.depend(),i.value):n()},set value(t){r(t)}};return z(s,Lt,!0),z(s,"__v_isReadonly",o),s},watch:function(t,e,n){return sn(t,e,n)},watchEffect:function(t,e){return sn(t,null,e)},watchPostEffect:rn,watchSyncEffect:function(t,e){return sn(t,null,{flush:"sync"})},EffectScope:cn,effectScope:function(t){return new cn(t)},onScopeDispose:function(t){on&&on.cleanups.push(t)},getCurrentScope:function(){return on},provide:function(t,e){ct&&(un(ct)[t]=e)},inject:function(t,e,n){void 0===n&&(n=!1);var r=ct;if(r){var o=r.$parent&&r.$parent._provided;if(o&&t in o)return o[t];if(arguments.length>1)return n&&a(e)?e.call(r):e}},h:function(t,e,n){return Qt(ct,t,e,n,2,!0)},getCurrentInstance:function(){return ct&&{proxy:ct}},useSlots:function(){return Se().slots},useAttrs:function(){return Se().attrs},useListeners:function(){return Se().listeners},mergeDefaults:function(t,n){var r=e(t)?t.reduce((function(t,e){return t[e]={},t}),{}):t;for(var o in n){var i=r[o];i?e(i)||a(i)?r[o]={type:i,default:n[o]}:i.default=n[o]:null===i&&(r[o]={default:n[o]})}return r},nextTick:xn,set:At,del:jt,useCssModule:function(e){return t},useCssVars:function(t){if(J){var e=ct;e&&rn((function(){var n=e.$el,r=t(e,e._setupProxy);if(n&&1===n.nodeType){var o=n.style;for(var i in r)o.setProperty("--".concat(i),r[i])}}))}},defineAsyncComponent:function(t){a(t)&&(t={loader:t});var e=t.loader,n=t.loadingComponent,r=t.errorComponent,o=t.delay,i=void 0===o?200:o,s=t.timeout;t.suspensible;var c=t.onError,u=null,l=0,f=function(){var t;return u||(t=u=e().catch((function(t){if(t=t instanceof Error?t:new Error(String(t)),c)return new Promise((function(e,n){c(t,(function(){return e((l++,u=null,f()))}),(function(){return n(t)}),l+1)}));throw t})).then((function(e){return t!==u&&u?u:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e)})))};return function(){return{component:f(),delay:i,timeout:s,error:r,loading:n}}},onBeforeMount:kn,onMounted:Sn,onBeforeUpdate:On,onUpdated:Tn,onBeforeUnmount:An,onUnmounted:jn,onErrorCaptured:En,onActivated:Nn,onDeactivated:Pn,onServerPrefetch:Dn,onRenderTracked:Mn,onRenderTriggered:In}),Fn=new at;function Hn(t){return Bn(t,Fn),Fn.clear(),t}function Bn(t,n){var r,o,i=e(t);if(!(!i&&!s(t)||Object.isFrozen(t)||t instanceof lt)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)Bn(t[r],n);else if(Rt(t))Bn(t.value,n);else for(r=(o=Object.keys(t)).length;r--;)Bn(t[o[r]],n)}}var Un=0,zn=function(){function t(t,e,n,r,o){!function(t,e){void 0===e&&(e=on),e&&e.active&&e.effects.push(t)}(this,on||(t?t._scope:void 0)),(this.vm=t)&&o&&(t._watcher=this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Un,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new at,this.newDepIds=new at,this.expression="",a(e)?this.getter=e:(this.getter=function(t){if(!V.test(t)){var e=t.split(".");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}(e),this.getter||(this.getter=j)),this.value=this.lazy?void 0:this.get()}return t.prototype.get=function(){var t;gt(this);var e=this.vm;try{t=this.getter.call(e,e)}catch(t){if(!this.user)throw t;ln(t,e,'getter for watcher "'.concat(this.expression,'"'))}finally{this.deep&&Hn(t),yt(),this.cleanupDeps()}return t},t.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},t.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var e=this.deps[t];this.newDepIds.has(e.id)||e.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},t.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Ye(this)},t.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'.concat(this.expression,'"');fn(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},t.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},t.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},t.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&g(this.vm._scope.effects,this),this.active){for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},t}(),Vn={enumerable:!0,configurable:!0,get:j,set:j};function Kn(t,e,n){Vn.get=function(){return this[e][n]},Vn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Vn)}function Jn(t){var n=t.$options;if(n.props&&function(t,e){var n=t.$options.propsData||{},r=t._props=Nt({}),o=t.$options._propKeys=[];t.$parent&&Ct(!1);var i=function(i){o.push(i);var a=yr(i,e,n,t);Tt(r,i,a),i in t||Kn(t,"_props",i)};for(var a in e)i(a);Ct(!0)}(t,n.props),function(t){var e=t.$options,n=e.setup;if(n){var r=t._setupContext=we(t);ut(t),gt();var o=fn(n,null,[t._props||Nt({}),r],t,"setup");if(yt(),ut(),a(o))e.render=o;else if(s(o))if(t._setupState=o,o.__sfc){var i=t._setupProxy={};for(var c in o)"__sfc"!==c&&Ht(i,o,c)}else for(var c in o)U(c)||Ht(t,o,c)}}(t),n.methods&&function(t,e){for(var n in t.$options.props,e)t[n]="function"!=typeof e[n]?j:S(e[n],t)}(t,n.methods),n.data)!function(t){var e=t.$options.data;u(e=t._data=a(e)?function(t,e){gt();try{return t.call(e,e)}catch(t){return ln(t,e,"data()"),{}}finally{yt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props;t.$options.methods;var o=n.length;for(;o--;){var i=n[o];r&&_(r,i)||U(i)||Kn(t,"_data",i)}var s=Ot(e);s&&s.vmCount++}(t);else{var r=Ot(t._data={});r&&r.vmCount++}n.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var o in e){var i=e[o],s=a(i)?i:i.get;r||(n[o]=new zn(t,s||j,j,qn)),o in t||Wn(t,o,i)}}(t,n.computed),n.watch&&n.watch!==tt&&function(t,n){for(var r in n){var o=n[r];if(e(o))for(var i=0;i<o.length;i++)Xn(t,r,o[i]);else Xn(t,r,o)}}(t,n.watch)}var qn={lazy:!0};function Wn(t,e,n){var r=!rt();a(n)?(Vn.get=r?Zn(e):Gn(n),Vn.set=j):(Vn.get=n.get?r&&!1!==n.cache?Zn(e):Gn(n.get):j,Vn.set=n.set||j),Object.defineProperty(t,e,Vn)}function Zn(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),ht.target&&e.depend(),e.value}}function Gn(t){return function(){return t.call(this,this)}}function Xn(t,e,n,r){return u(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function Yn(t,e){if(t){for(var n=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),o=0;o<r.length;o++){var i=r[o];if("__ob__"!==i){var s=t[i].from;if(s in e._provided)n[i]=e._provided[s];else if("default"in t[i]){var c=t[i].default;n[i]=a(c)?c.call(e):c}}}return n}}var Qn=0;function tr(t){var e=t.options;if(t.super){var n=tr(t.super);if(n!==t.superOptions){t.superOptions=n;var r=function(t){var e,n=t.options,r=t.sealedOptions;for(var o in n)n[o]!==r[o]&&(e||(e={}),e[o]=n[o]);return e}(t);r&&T(t.extendOptions,r),(e=t.options=mr(n,t.extendOptions)).name&&(e.components[e.name]=t)}}return e}function er(n,r,i,a,s){var c,u=this,l=s.options;_(a,"_uid")?(c=Object.create(a))._original=a:(c=a,a=a._original);var f=o(l._compiled),d=!f;this.data=n,this.props=r,this.children=i,this.parent=a,this.listeners=n.on||t,this.injections=Yn(l.inject,a),this.slots=function(){return u.$slots||_e(a,n.scopedSlots,u.$slots=me(i,a)),u.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return _e(a,n.scopedSlots,this.slots())}}),f&&(this.$options=l,this.$slots=this.slots(),this.$scopedSlots=_e(a,n.scopedSlots,this.$slots)),l._scopeId?this._c=function(t,n,r,o){var i=Qt(c,t,n,r,o,d);return i&&!e(i)&&(i.fnScopeId=l._scopeId,i.fnContext=a),i}:this._c=function(t,e,n,r){return Qt(c,t,e,n,r,d)}}function nr(t,e,n,r,o){var i=pt(t);return i.fnContext=n,i.fnOptions=r,e.slot&&((i.data||(i.data={})).slot=e.slot),i}function rr(t,e){for(var n in e)t[w(n)]=e[n]}function or(t){return t.name||t.__name||t._componentTag}he(er.prototype);var ir={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var n=t;ir.prepatch(n,n)}else{(t.componentInstance=function(t,e){var n={_isComponent:!0,_parentVnode:t,parent:e},o=t.data.inlineTemplate;r(o)&&(n.render=o.render,n.staticRenderFns=o.staticRenderFns);return new t.componentOptions.Ctor(n)}(t,Me)).$mount(e?t.elm:void 0,e)}},prepatch:function(e,n){var r=n.componentOptions;!function(e,n,r,o,i){var a=o.data.scopedSlots,s=e.$scopedSlots,c=!!(a&&!a.$stable||s!==t&&!s.$stable||a&&e.$scopedSlots.$key!==a.$key||!a&&e.$scopedSlots.$key),u=!!(i||e.$options._renderChildren||c),l=e.$vnode;e.$options._parentVnode=o,e.$vnode=o,e._vnode&&(e._vnode.parent=o),e.$options._renderChildren=i;var f=o.data.attrs||t;e._attrsProxy&&xe(e._attrsProxy,f,l.data&&l.data.attrs||t,e,"$attrs")&&(u=!0),e.$attrs=f,r=r||t;var d=e.$options._parentListeners;if(e._listenersProxy&&xe(e._listenersProxy,r,d||t,e,"$listeners"),e.$listeners=e.$options._parentListeners=r,De(e,r,d),n&&e.$options.props){Ct(!1);for(var p=e._props,v=e.$options._propKeys||[],h=0;h<v.length;h++){var m=v[h],g=e.$options.props;p[m]=yr(m,g,n,e)}Ct(!0),e.$options.propsData=n}u&&(e.$slots=me(i,o.context),e.$forceUpdate())}(n.componentInstance=e.componentInstance,r.propsData,r.listeners,n,r.children)},insert:function(t){var e,n=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,He(r,"mounted")),t.data.keepAlive&&(n._isMounted?((e=r)._inactive=!1,Ue.push(e)):Re(r,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?Fe(e,!0):e.$destroy())}},ar=Object.keys(ir);function sr(i,a,c,u,l){if(!n(i)){var d=c.$options._base;if(s(i)&&(i=d.extend(i)),"function"==typeof i){var p;if(n(i.cid)&&(i=function(t,e){if(o(t.error)&&r(t.errorComp))return t.errorComp;if(r(t.resolved))return t.resolved;var i=Te;if(i&&r(t.owners)&&-1===t.owners.indexOf(i)&&t.owners.push(i),o(t.loading)&&r(t.loadingComp))return t.loadingComp;if(i&&!r(t.owners)){var a=t.owners=[i],c=!0,u=null,l=null;i.$on("hook:destroyed",(function(){return g(a,i)}));var d=function(t){for(var e=0,n=a.length;e<n;e++)a[e].$forceUpdate();t&&(a.length=0,null!==u&&(clearTimeout(u),u=null),null!==l&&(clearTimeout(l),l=null))},p=M((function(n){t.resolved=Ae(n,e),c?a.length=0:d(!0)})),v=M((function(e){r(t.errorComp)&&(t.error=!0,d(!0))})),h=t(p,v);return s(h)&&(f(h)?n(t.resolved)&&h.then(p,v):f(h.component)&&(h.component.then(p,v),r(h.error)&&(t.errorComp=Ae(h.error,e)),r(h.loading)&&(t.loadingComp=Ae(h.loading,e),0===h.delay?t.loading=!0:u=setTimeout((function(){u=null,n(t.resolved)&&n(t.error)&&(t.loading=!0,d(!1))}),h.delay||200)),r(h.timeout)&&(l=setTimeout((function(){l=null,n(t.resolved)&&v(null)}),h.timeout)))),c=!1,t.loading?t.loadingComp:t.resolved}}(p=i,d),void 0===i))return function(t,e,n,r,o){var i=ft();return i.asyncFactory=t,i.asyncMeta={data:e,context:n,children:r,tag:o},i}(p,a,c,u,l);a=a||{},tr(i),r(a.model)&&function(t,n){var o=t.model&&t.model.prop||"value",i=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[o]=n.model.value;var a=n.on||(n.on={}),s=a[i],c=n.model.callback;r(s)?(e(s)?-1===s.indexOf(c):s!==c)&&(a[i]=[c].concat(s)):a[i]=c}(i.options,a);var v=function(t,e,o){var i=e.options.props;if(!n(i)){var a={},s=t.attrs,c=t.props;if(r(s)||r(c))for(var u in i){var l=k(u);Zt(a,c,u,l,!0)||Zt(a,s,u,l,!1)}return a}}(a,i);if(o(i.options.functional))return function(n,o,i,a,s){var c=n.options,u={},l=c.props;if(r(l))for(var f in l)u[f]=yr(f,l,o||t);else r(i.attrs)&&rr(u,i.attrs),r(i.props)&&rr(u,i.props);var d=new er(i,u,s,a,n),p=c.render.call(null,d._c,d);if(p instanceof lt)return nr(p,i,d.parent,c);if(e(p)){for(var v=Gt(p)||[],h=new Array(v.length),m=0;m<v.length;m++)h[m]=nr(v[m],i,d.parent,c);return h}}(i,v,a,c,u);var h=a.on;if(a.on=a.nativeOn,o(i.options.abstract)){var m=a.slot;a={},m&&(a.slot=m)}!function(t){for(var e=t.hook||(t.hook={}),n=0;n<ar.length;n++){var r=ar[n],o=e[r],i=ir[r];o===i||o&&o._merged||(e[r]=o?cr(i,o):i)}}(a);var y=or(i.options)||l;return new lt("vue-component-".concat(i.cid).concat(y?"-".concat(y):""),a,void 0,void 0,void 0,c,{Ctor:i,propsData:v,listeners:h,tag:l,children:u},p)}}}function cr(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}var ur=j,lr=H.optionMergeStrategies;function fr(t,e){if(!e)return t;for(var n,r,o,i=st?Reflect.ownKeys(e):Object.keys(e),a=0;a<i.length;a++)"__ob__"!==(n=i[a])&&(r=t[n],o=e[n],_(t,n)?r!==o&&u(r)&&u(o)&&fr(r,o):At(t,n,o));return t}function dr(t,e,n){return n?function(){var r=a(e)?e.call(n,n):e,o=a(t)?t.call(n,n):t;return r?fr(r,o):o}:e?t?function(){return fr(a(e)?e.call(this,this):e,a(t)?t.call(this,this):t)}:e:t}function pr(t,n){var r=n?t?t.concat(n):e(n)?n:[n]:t;return r?function(t){for(var e=[],n=0;n<t.length;n++)-1===e.indexOf(t[n])&&e.push(t[n]);return e}(r):r}function vr(t,e,n,r){var o=Object.create(t||null);return e?T(o,e):o}lr.data=function(t,e,n){return n?dr(t,e,n):e&&"function"!=typeof e?t:dr(t,e)},F.forEach((function(t){lr[t]=pr})),R.forEach((function(t){lr[t+"s"]=vr})),lr.watch=function(t,n,r,o){if(t===tt&&(t=void 0),n===tt&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;var i={};for(var a in T(i,t),n){var s=i[a],c=n[a];s&&!e(s)&&(s=[s]),i[a]=s?s.concat(c):e(c)?c:[c]}return i},lr.props=lr.methods=lr.inject=lr.computed=function(t,e,n,r){if(!t)return e;var o=Object.create(null);return T(o,t),e&&T(o,e),o},lr.provide=dr;var hr=function(t,e){return void 0===e?t:e};function mr(t,n,r){if(a(n)&&(n=n.options),function(t,n){var r=t.props;if(r){var o,i,a={};if(e(r))for(o=r.length;o--;)"string"==typeof(i=r[o])&&(a[w(i)]={type:null});else if(u(r))for(var s in r)i=r[s],a[w(s)]=u(i)?i:{type:i};t.props=a}}(n),function(t,n){var r=t.inject;if(r){var o=t.inject={};if(e(r))for(var i=0;i<r.length;i++)o[r[i]]={from:r[i]};else if(u(r))for(var a in r){var s=r[a];o[a]=u(s)?T({from:a},s):{from:s}}}}(n),function(t){var e=t.directives;if(e)for(var n in e){var r=e[n];a(r)&&(e[n]={bind:r,update:r})}}(n),!n._base&&(n.extends&&(t=mr(t,n.extends,r)),n.mixins))for(var o=0,i=n.mixins.length;o<i;o++)t=mr(t,n.mixins[o],r);var s,c={};for(s in t)l(s);for(s in n)_(t,s)||l(s);function l(e){var o=lr[e]||hr;c[e]=o(t[e],n[e],r,e)}return c}function gr(t,e,n,r){if("string"==typeof n){var o=t[e];if(_(o,n))return o[n];var i=w(n);if(_(o,i))return o[i];var a=x(i);return _(o,a)?o[a]:o[n]||o[i]||o[a]}}function yr(t,e,n,r){var o=e[t],i=!_(n,t),s=n[t],c=wr(Boolean,o.type);if(c>-1)if(i&&!_(o,"default"))s=!1;else if(""===s||s===k(t)){var u=wr(String,o.type);(u<0||c<u)&&(s=!0)}if(void 0===s){s=function(t,e,n){if(!_(e,"default"))return;var r=e.default;if(t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n])return t._props[n];return a(r)&&"Function"!==br(e.type)?r.call(t):r}(r,o,t);var l=xt;Ct(!0),Ot(s),Ct(l)}return s}var _r=/^\s*function (\w+)/;function br(t){var e=t&&t.toString().match(_r);return e?e[1]:""}function $r(t,e){return br(t)===br(e)}function wr(t,n){if(!e(n))return $r(n,t)?0:-1;for(var r=0,o=n.length;r<o;r++)if($r(n[r],t))return r;return-1}function xr(t){this._init(t)}function Cr(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=or(t)||or(n.options),a=function(t){this._init(t)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=e++,a.options=mr(n.options,t),a.super=n,a.options.props&&function(t){var e=t.options.props;for(var n in e)Kn(t.prototype,"_props",n)}(a),a.options.computed&&function(t){var e=t.options.computed;for(var n in e)Wn(t.prototype,n,e[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,R.forEach((function(t){a[t]=n[t]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=T({},a.options),o[r]=a,a}}function kr(t){return t&&(or(t.Ctor.options)||t.tag)}function Sr(t,n){return e(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(r=t,"[object RegExp]"===c.call(r)&&t.test(n));var r}function Or(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Tr(n,i,r,o)}}}function Tr(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,g(n,e)}!function(e){e.prototype._init=function(e){var n=this;n._uid=Qn++,n._isVue=!0,n.__v_skip=!0,n._scope=new cn(!0),e&&e._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=mr(tr(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&De(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,r=e.$vnode=n._parentVnode,o=r&&r.context;e.$slots=me(n._renderChildren,o),e.$scopedSlots=r?_e(e.$parent,r.data.scopedSlots,e.$slots):t,e._c=function(t,n,r,o){return Qt(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Qt(e,t,n,r,o,!0)};var i=r&&r.data;Tt(e,"$attrs",i&&i.attrs||t,null,!0),Tt(e,"$listeners",n._parentListeners||t,null,!0)}(n),He(n,"beforeCreate",void 0,!1),function(t){var e=Yn(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),Ct(!0))}(n),Jn(n),function(t){var e=t.$options.provide;if(e){var n=a(e)?e.call(t):e;if(!s(n))return;for(var r=un(t),o=st?Reflect.ownKeys(n):Object.keys(n),i=0;i<o.length;i++){var c=o[i];Object.defineProperty(r,c,Object.getOwnPropertyDescriptor(n,c))}}}(n),He(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(xr),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=At,t.prototype.$delete=jt,t.prototype.$watch=function(t,e,n){var r=this;if(u(e))return Xn(r,t,e,n);(n=n||{}).user=!0;var o=new zn(r,t,e,n);if(n.immediate){var i='callback for immediate watcher "'.concat(o.expression,'"');gt(),fn(e,r,[o.value],r,i),yt()}return function(){o.teardown()}}}(xr),function(t){var n=/^hook:/;t.prototype.$on=function(t,r){var o=this;if(e(t))for(var i=0,a=t.length;i<a;i++)o.$on(t[i],r);else(o._events[t]||(o._events[t]=[])).push(r),n.test(t)&&(o._hasHookEvent=!0);return o},t.prototype.$once=function(t,e){var n=this;function r(){n.$off(t,r),e.apply(n,arguments)}return r.fn=e,n.$on(t,r),n},t.prototype.$off=function(t,n){var r=this;if(!arguments.length)return r._events=Object.create(null),r;if(e(t)){for(var o=0,i=t.length;o<i;o++)r.$off(t[o],n);return r}var a,s=r._events[t];if(!s)return r;if(!n)return r._events[t]=null,r;for(var c=s.length;c--;)if((a=s[c])===n||a.fn===n){s.splice(c,1);break}return r},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?O(n):n;for(var r=O(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;i<a;i++)fn(n[i],e,r,e,o)}return e}}(xr),function(t){t.prototype._update=function(t,e){var n=this,r=n.$el,o=n._vnode,i=Ie(n);n._vnode=t,n.$el=o?n.__patch__(o,t):n.__patch__(n.$el,t,e,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){He(t,"beforeDestroy"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||g(e.$children,t),t._scope.stop(),t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),He(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(xr),function(t){he(t.prototype),t.prototype.$nextTick=function(t){return xn(t,this)},t.prototype._render=function(){var t,n=this,r=n.$options,o=r.render,i=r._parentVnode;i&&n._isMounted&&(n.$scopedSlots=_e(n.$parent,i.data.scopedSlots,n.$slots,n.$scopedSlots),n._slotsProxy&&ke(n._slotsProxy,n.$scopedSlots)),n.$vnode=i;try{ut(n),Te=n,t=o.call(n._renderProxy,n.$createElement)}catch(e){ln(e,n,"render"),t=n._vnode}finally{Te=null,ut()}return e(t)&&1===t.length&&(t=t[0]),t instanceof lt||(t=ft()),t.parent=i,t}}(xr);var Ar=[String,RegExp,Array],jr={name:"keep-alive",abstract:!0,props:{include:Ar,exclude:Ar,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,n=t.keys,r=t.vnodeToCache,o=t.keyToCache;if(r){var i=r.tag,a=r.componentInstance,s=r.componentOptions;e[o]={name:kr(s),tag:i,componentInstance:a},n.push(o),this.max&&n.length>parseInt(this.max)&&Tr(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Tr(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Or(t,(function(t){return Sr(e,t)}))})),this.$watch("exclude",(function(e){Or(t,(function(t){return!Sr(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=je(t),n=e&&e.componentOptions;if(n){var r=kr(n),o=this.include,i=this.exclude;if(o&&(!r||!Sr(o,r))||i&&r&&Sr(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,g(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}},Er={KeepAlive:jr};!function(t){var e={get:function(){return H}};Object.defineProperty(t,"config",e),t.util={warn:ur,extend:T,mergeOptions:mr,defineReactive:Tt},t.set=At,t.delete=jt,t.nextTick=xn,t.observable=function(t){return Ot(t),t},t.options=Object.create(null),R.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Er),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=O(arguments,1);return n.unshift(this),a(t.install)?t.install.apply(t,n):a(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=mr(this.options,t),this}}(t),Cr(t),function(t){R.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&a(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(xr),Object.defineProperty(xr.prototype,"$isServer",{get:rt}),Object.defineProperty(xr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(xr,"FunctionalRenderContext",{value:er}),xr.version=Ln;var Nr=v("style,class"),Pr=v("input,textarea,option,select,progress"),Dr=function(t,e,n){return"value"===n&&Pr(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Mr=v("contenteditable,draggable,spellcheck"),Ir=v("events,caret,typing,plaintext-only"),Lr=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Rr="http://www.w3.org/1999/xlink",Fr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Hr=function(t){return Fr(t)?t.slice(6,t.length):""},Br=function(t){return null==t||!1===t};function Ur(t){for(var e=t.data,n=t,o=t;r(o.componentInstance);)(o=o.componentInstance._vnode)&&o.data&&(e=zr(o.data,e));for(;r(n=n.parent);)n&&n.data&&(e=zr(e,n.data));return function(t,e){if(r(t)||r(e))return Vr(t,Kr(e));return""}(e.staticClass,e.class)}function zr(t,e){return{staticClass:Vr(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Vr(t,e){return t?e?t+" "+e:t:e||""}function Kr(t){return Array.isArray(t)?function(t){for(var e,n="",o=0,i=t.length;o<i;o++)r(e=Kr(t[o]))&&""!==e&&(n&&(n+=" "),n+=e);return n}(t):s(t)?function(t){var e="";for(var n in t)t[n]&&(e&&(e+=" "),e+=n);return e}(t):"string"==typeof t?t:""}var Jr={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},qr=v("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Wr=v("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Zr=function(t){return qr(t)||Wr(t)};function Gr(t){return Wr(t)?"svg":"math"===t?"math":void 0}var Xr=Object.create(null);var Yr=v("text,number,password,search,email,tel,url");function Qr(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}var to=Object.freeze({__proto__:null,createElement:function(t,e){var n=document.createElement(t);return"select"!==t||e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n},createElementNS:function(t,e){return document.createElementNS(Jr[t],e)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,e,n){t.insertBefore(e,n)},removeChild:function(t,e){t.removeChild(e)},appendChild:function(t,e){t.appendChild(e)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,e){t.textContent=e},setStyleScope:function(t,e){t.setAttribute(e,"")}}),eo={create:function(t,e){no(e)},update:function(t,e){t.data.ref!==e.data.ref&&(no(t,!0),no(e))},destroy:function(t){no(t,!0)}};function no(t,n){var o=t.data.ref;if(r(o)){var i=t.context,s=t.componentInstance||t.elm,c=n?null:s,u=n?void 0:s;if(a(o))fn(o,i,[c],i,"template ref function");else{var l=t.data.refInFor,f="string"==typeof o||"number"==typeof o,d=Rt(o),p=i.$refs;if(f||d)if(l){var v=f?p[o]:o.value;n?e(v)&&g(v,s):e(v)?v.includes(s)||v.push(s):f?(p[o]=[s],ro(i,o,p[o])):o.value=[s]}else if(f){if(n&&p[o]!==s)return;p[o]=u,ro(i,o,c)}else if(d){if(n&&o.value!==s)return;o.value=c}}}}function ro(t,e,n){var r=t._setupState;r&&_(r,e)&&(Rt(r[e])?r[e].value=n:r[e]=n)}var oo=new lt("",{},[]),io=["create","activate","update","remove","destroy"];function ao(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&r(t.data)===r(e.data)&&function(t,e){if("input"!==t.tag)return!0;var n,o=r(n=t.data)&&r(n=n.attrs)&&n.type,i=r(n=e.data)&&r(n=n.attrs)&&n.type;return o===i||Yr(o)&&Yr(i)}(t,e)||o(t.isAsyncPlaceholder)&&n(e.asyncFactory.error))}function so(t,e,n){var o,i,a={};for(o=e;o<=n;++o)r(i=t[o].key)&&(a[i]=o);return a}var co={create:uo,update:uo,destroy:function(t){uo(t,oo)}};function uo(t,e){(t.data.directives||e.data.directives)&&function(t,e){var n,r,o,i=t===oo,a=e===oo,s=fo(t.data.directives,t.context),c=fo(e.data.directives,e.context),u=[],l=[];for(n in c)r=s[n],o=c[n],r?(o.oldValue=r.value,o.oldArg=r.arg,vo(o,"update",e,t),o.def&&o.def.componentUpdated&&l.push(o)):(vo(o,"bind",e,t),o.def&&o.def.inserted&&u.push(o));if(u.length){var f=function(){for(var n=0;n<u.length;n++)vo(u[n],"inserted",e,t)};i?Wt(e,"insert",f):f()}l.length&&Wt(e,"postpatch",(function(){for(var n=0;n<l.length;n++)vo(l[n],"componentUpdated",e,t)}));if(!i)for(n in s)c[n]||vo(s[n],"unbind",t,t,a)}(t,e)}var lo=Object.create(null);function fo(t,e){var n,r,o=Object.create(null);if(!t)return o;for(n=0;n<t.length;n++)(r=t[n]).modifiers||(r.modifiers=lo),o[po(r)]=r,e._setupState&&e._setupState.__sfc&&(r.def=r.def||gr(e,"_setupState","v-"+r.name)),r.def=r.def||gr(e.$options,"directives",r.name);return o}function po(t){return t.rawName||"".concat(t.name,".").concat(Object.keys(t.modifiers||{}).join("."))}function vo(t,e,n,r,o){var i=t.def&&t.def[e];if(i)try{i(n.elm,t,n,r,o)}catch(r){ln(r,n.context,"directive ".concat(t.name," ").concat(e," hook"))}}var ho=[eo,co];function mo(t,e){var i=e.componentOptions;if(!(r(i)&&!1===i.Ctor.options.inheritAttrs||n(t.data.attrs)&&n(e.data.attrs))){var a,s,c=e.elm,u=t.data.attrs||{},l=e.data.attrs||{};for(a in(r(l.__ob__)||o(l._v_attr_proxy))&&(l=e.data.attrs=T({},l)),l)s=l[a],u[a]!==s&&go(c,a,s,e.data.pre);for(a in(W||G)&&l.value!==u.value&&go(c,"value",l.value),u)n(l[a])&&(Fr(a)?c.removeAttributeNS(Rr,Hr(a)):Mr(a)||c.removeAttribute(a))}}function go(t,e,n,r){r||t.tagName.indexOf("-")>-1?yo(t,e,n):Lr(e)?Br(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Mr(e)?t.setAttribute(e,function(t,e){return Br(e)||"false"===e?"false":"contenteditable"===t&&Ir(e)?e:"true"}(e,n)):Fr(e)?Br(n)?t.removeAttributeNS(Rr,Hr(e)):t.setAttributeNS(Rr,e,n):yo(t,e,n)}function yo(t,e,n){if(Br(n))t.removeAttribute(e);else{if(W&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var _o={create:mo,update:mo};function bo(t,e){var o=e.elm,i=e.data,a=t.data;if(!(n(i.staticClass)&&n(i.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=Ur(e),c=o._transitionClasses;r(c)&&(s=Vr(s,Kr(c))),s!==o._prevClass&&(o.setAttribute("class",s),o._prevClass=s)}}var $o,wo,xo,Co,ko,So,Oo={create:bo,update:bo},To=/[\w).+\-_$\]]/;function Ao(t){var e,n,r,o,i,a=!1,s=!1,c=!1,u=!1,l=0,f=0,d=0,p=0;for(r=0;r<t.length;r++)if(n=e,e=t.charCodeAt(r),a)39===e&&92!==n&&(a=!1);else if(s)34===e&&92!==n&&(s=!1);else if(c)96===e&&92!==n&&(c=!1);else if(u)47===e&&92!==n&&(u=!1);else if(124!==e||124===t.charCodeAt(r+1)||124===t.charCodeAt(r-1)||l||f||d){switch(e){case 34:s=!0;break;case 39:a=!0;break;case 96:c=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:l++;break;case 125:l--}if(47===e){for(var v=r-1,h=void 0;v>=0&&" "===(h=t.charAt(v));v--);h&&To.test(h)||(u=!0)}}else void 0===o?(p=r+1,o=t.slice(0,r).trim()):m();function m(){(i||(i=[])).push(t.slice(p,r).trim()),p=r+1}if(void 0===o?o=t.slice(0,r).trim():0!==p&&m(),i)for(r=0;r<i.length;r++)o=jo(o,i[r]);return o}function jo(t,e){var n=e.indexOf("(");if(n<0)return'_f("'.concat(e,'")(').concat(t,")");var r=e.slice(0,n),o=e.slice(n+1);return'_f("'.concat(r,'")(').concat(t).concat(")"!==o?","+o:o)}function Eo(t,e){console.error("[Vue compiler]: ".concat(t))}function No(t,e){return t?t.map((function(t){return t[e]})).filter((function(t){return t})):[]}function Po(t,e,n,r,o){(t.props||(t.props=[])).push(Uo({name:e,value:n,dynamic:o},r)),t.plain=!1}function Do(t,e,n,r,o){(o?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(Uo({name:e,value:n,dynamic:o},r)),t.plain=!1}function Mo(t,e,n,r){t.attrsMap[e]=n,t.attrsList.push(Uo({name:e,value:n},r))}function Io(t,e,n,r,o,i,a,s){(t.directives||(t.directives=[])).push(Uo({name:e,rawName:n,value:r,arg:o,isDynamicArg:i,modifiers:a},s)),t.plain=!1}function Lo(t,e,n){return n?"_p(".concat(e,',"').concat(t,'")'):t+e}function Ro(e,n,r,o,i,a,s,c){var u;(o=o||t).right?c?n="(".concat(n,")==='click'?'contextmenu':(").concat(n,")"):"click"===n&&(n="contextmenu",delete o.right):o.middle&&(c?n="(".concat(n,")==='click'?'mouseup':(").concat(n,")"):"click"===n&&(n="mouseup")),o.capture&&(delete o.capture,n=Lo("!",n,c)),o.once&&(delete o.once,n=Lo("~",n,c)),o.passive&&(delete o.passive,n=Lo("&",n,c)),o.native?(delete o.native,u=e.nativeEvents||(e.nativeEvents={})):u=e.events||(e.events={});var l=Uo({value:r.trim(),dynamic:c},s);o!==t&&(l.modifiers=o);var f=u[n];Array.isArray(f)?i?f.unshift(l):f.push(l):u[n]=f?i?[l,f]:[f,l]:l,e.plain=!1}function Fo(t,e,n){var r=Ho(t,":"+e)||Ho(t,"v-bind:"+e);if(null!=r)return Ao(r);if(!1!==n){var o=Ho(t,e);if(null!=o)return JSON.stringify(o)}}function Ho(t,e,n){var r;if(null!=(r=t.attrsMap[e]))for(var o=t.attrsList,i=0,a=o.length;i<a;i++)if(o[i].name===e){o.splice(i,1);break}return n&&delete t.attrsMap[e],r}function Bo(t,e){for(var n=t.attrsList,r=0,o=n.length;r<o;r++){var i=n[r];if(e.test(i.name))return n.splice(r,1),i}}function Uo(t,e){return e&&(null!=e.start&&(t.start=e.start),null!=e.end&&(t.end=e.end)),t}function zo(t,e,n){var r=n||{},o=r.number,i="$$v",a=i;r.trim&&(a="(typeof ".concat(i," === 'string'")+"? ".concat(i,".trim()")+": ".concat(i,")")),o&&(a="_n(".concat(a,")"));var s=Vo(e,a);t.model={value:"(".concat(e,")"),expression:JSON.stringify(e),callback:"function (".concat(i,") {").concat(s,"}")}}function Vo(t,e){var n=function(t){if(t=t.trim(),$o=t.length,t.indexOf("[")<0||t.lastIndexOf("]")<$o-1)return(Co=t.lastIndexOf("."))>-1?{exp:t.slice(0,Co),key:'"'+t.slice(Co+1)+'"'}:{exp:t,key:null};wo=t,Co=ko=So=0;for(;!Jo();)qo(xo=Ko())?Zo(xo):91===xo&&Wo(xo);return{exp:t.slice(0,ko),key:t.slice(ko+1,So)}}(t);return null===n.key?"".concat(t,"=").concat(e):"$set(".concat(n.exp,", ").concat(n.key,", ").concat(e,")")}function Ko(){return wo.charCodeAt(++Co)}function Jo(){return Co>=$o}function qo(t){return 34===t||39===t}function Wo(t){var e=1;for(ko=Co;!Jo();)if(qo(t=Ko()))Zo(t);else if(91===t&&e++,93===t&&e--,0===e){So=Co;break}}function Zo(t){for(var e=t;!Jo()&&(t=Ko())!==e;);}var Go,Xo="__r";function Yo(t,e,n){var r=Go;return function o(){var i=e.apply(null,arguments);null!==i&&ei(t,o,n,r)}}var Qo=hn&&!(Q&&Number(Q[1])<=53);function ti(t,e,n,r){if(Qo){var o=qe,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Go.addEventListener(t,e,et?{capture:n,passive:r}:n)}function ei(t,e,n,r){(r||Go).removeEventListener(t,e._wrapper||e,n)}function ni(t,e){if(!n(t.data.on)||!n(e.data.on)){var o=e.data.on||{},i=t.data.on||{};Go=e.elm||t.elm,function(t){if(r(t.__r)){var e=W?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}r(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(o),qt(o,i,ti,ei,Yo,e.context),Go=void 0}}var ri,oi={create:ni,update:ni,destroy:function(t){return ni(t,oo)}};function ii(t,e){if(!n(t.data.domProps)||!n(e.data.domProps)){var i,a,s=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(i in(r(u.__ob__)||o(u._v_attr_proxy))&&(u=e.data.domProps=T({},u)),c)i in u||(s[i]="");for(i in u){if(a=u[i],"textContent"===i||"innerHTML"===i){if(e.children&&(e.children.length=0),a===c[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=a;var l=n(a)?"":String(a);ai(s,l)&&(s.value=l)}else if("innerHTML"===i&&Wr(s.tagName)&&n(s.innerHTML)){(ri=ri||document.createElement("div")).innerHTML="<svg>".concat(a,"</svg>");for(var f=ri.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;f.firstChild;)s.appendChild(f.firstChild)}else if(a!==c[i])try{s[i]=a}catch(t){}}}}function ai(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,o=t._vModifiers;if(r(o)){if(o.number)return p(n)!==p(e);if(o.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var si={create:ii,update:ii},ci=b((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function ui(t){var e=li(t.style);return t.staticStyle?T(t.staticStyle,e):e}function li(t){return Array.isArray(t)?A(t):"string"==typeof t?ci(t):t}var fi,di=/^--/,pi=/\s*!important$/,vi=function(t,e,n){if(di.test(e))t.style.setProperty(e,n);else if(pi.test(n))t.style.setProperty(k(e),n.replace(pi,""),"important");else{var r=mi(e);if(Array.isArray(n))for(var o=0,i=n.length;o<i;o++)t.style[r]=n[o];else t.style[r]=n}},hi=["Webkit","Moz","ms"],mi=b((function(t){if(fi=fi||document.createElement("div").style,"filter"!==(t=w(t))&&t in fi)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<hi.length;n++){var r=hi[n]+e;if(r in fi)return r}}));function gi(t,e){var o=e.data,i=t.data;if(!(n(o.staticStyle)&&n(o.style)&&n(i.staticStyle)&&n(i.style))){var a,s,c=e.elm,u=i.staticStyle,l=i.normalizedStyle||i.style||{},f=u||l,d=li(e.data.style)||{};e.data.normalizedStyle=r(d.__ob__)?T({},d):d;var p=function(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)(o=o.componentInstance._vnode)&&o.data&&(n=ui(o.data))&&T(r,n);(n=ui(t.data))&&T(r,n);for(var i=t;i=i.parent;)i.data&&(n=ui(i.data))&&T(r,n);return r}(e,!0);for(s in f)n(p[s])&&vi(c,s,"");for(s in p)(a=p[s])!==f[s]&&vi(c,s,null==a?"":a)}}var yi={create:gi,update:gi},_i=/\s+/;function bi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(_i).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function $i(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(_i).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function wi(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,xi(t.name||"v")),T(e,t),e}return"string"==typeof t?xi(t):void 0}}var xi=b((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),Ci=J&&!Z,ki="transition",Si="animation",Oi="transition",Ti="transitionend",Ai="animation",ji="animationend";Ci&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Oi="WebkitTransition",Ti="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ai="WebkitAnimation",ji="webkitAnimationEnd"));var Ei=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Ni(t){Ei((function(){Ei(t)}))}function Pi(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),bi(t,e))}function Di(t,e){t._transitionClasses&&g(t._transitionClasses,e),$i(t,e)}function Mi(t,e,n){var r=Li(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===ki?Ti:ji,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c<a&&u()}),i+1),t.addEventListener(s,l)}var Ii=/\b(transform|all)(,|$)/;function Li(t,e){var n,r=window.getComputedStyle(t),o=(r[Oi+"Delay"]||"").split(", "),i=(r[Oi+"Duration"]||"").split(", "),a=Ri(o,i),s=(r[Ai+"Delay"]||"").split(", "),c=(r[Ai+"Duration"]||"").split(", "),u=Ri(s,c),l=0,f=0;return e===ki?a>0&&(n=ki,l=a,f=i.length):e===Si?u>0&&(n=Si,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?ki:Si:null)?n===ki?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===ki&&Ii.test(r[Oi+"Property"])}}function Ri(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map((function(e,n){return Fi(e)+Fi(t[n])})))}function Fi(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Hi(t,e){var o=t.elm;r(o._leaveCb)&&(o._leaveCb.cancelled=!0,o._leaveCb());var i=wi(t.data.transition);if(!n(i)&&!r(o._enterCb)&&1===o.nodeType){for(var c=i.css,u=i.type,l=i.enterClass,f=i.enterToClass,d=i.enterActiveClass,v=i.appearClass,h=i.appearToClass,m=i.appearActiveClass,g=i.beforeEnter,y=i.enter,_=i.afterEnter,b=i.enterCancelled,$=i.beforeAppear,w=i.appear,x=i.afterAppear,C=i.appearCancelled,k=i.duration,S=Me,O=Me.$vnode;O&&O.parent;)S=O.context,O=O.parent;var T=!S._isMounted||!t.isRootInsert;if(!T||w||""===w){var A=T&&v?v:l,j=T&&m?m:d,E=T&&h?h:f,N=T&&$||g,P=T&&a(w)?w:y,D=T&&x||_,I=T&&C||b,L=p(s(k)?k.enter:k),R=!1!==c&&!Z,F=zi(P),H=o._enterCb=M((function(){R&&(Di(o,E),Di(o,j)),H.cancelled?(R&&Di(o,A),I&&I(o)):D&&D(o),o._enterCb=null}));t.data.show||Wt(t,"insert",(function(){var e=o.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),P&&P(o,H)})),N&&N(o),R&&(Pi(o,A),Pi(o,j),Ni((function(){Di(o,A),H.cancelled||(Pi(o,E),F||(Ui(L)?setTimeout(H,L):Mi(o,u,H)))}))),t.data.show&&(e&&e(),P&&P(o,H)),R||F||H()}}}function Bi(t,e){var o=t.elm;r(o._enterCb)&&(o._enterCb.cancelled=!0,o._enterCb());var i=wi(t.data.transition);if(n(i)||1!==o.nodeType)return e();if(!r(o._leaveCb)){var a=i.css,c=i.type,u=i.leaveClass,l=i.leaveToClass,f=i.leaveActiveClass,d=i.beforeLeave,v=i.leave,h=i.afterLeave,m=i.leaveCancelled,g=i.delayLeave,y=i.duration,_=!1!==a&&!Z,b=zi(v),$=p(s(y)?y.leave:y),w=o._leaveCb=M((function(){o.parentNode&&o.parentNode._pending&&(o.parentNode._pending[t.key]=null),_&&(Di(o,l),Di(o,f)),w.cancelled?(_&&Di(o,u),m&&m(o)):(e(),h&&h(o)),o._leaveCb=null}));g?g(x):x()}function x(){w.cancelled||(!t.data.show&&o.parentNode&&((o.parentNode._pending||(o.parentNode._pending={}))[t.key]=t),d&&d(o),_&&(Pi(o,u),Pi(o,f),Ni((function(){Di(o,u),w.cancelled||(Pi(o,l),b||(Ui($)?setTimeout(w,$):Mi(o,c,w)))}))),v&&v(o,w),_||b||w())}}function Ui(t){return"number"==typeof t&&!isNaN(t)}function zi(t){if(n(t))return!1;var e=t.fns;return r(e)?zi(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function Vi(t,e){!0!==e.data.show&&Hi(e)}var Ki=function(t){var a,s,c={},u=t.modules,l=t.nodeOps;for(a=0;a<io.length;++a)for(c[io[a]]=[],s=0;s<u.length;++s)r(u[s][io[a]])&&c[io[a]].push(u[s][io[a]]);function f(t){var e=l.parentNode(t);r(e)&&l.removeChild(e,t)}function d(t,e,n,i,a,s,u){if(r(t.elm)&&r(s)&&(t=s[u]=pt(t)),t.isRootInsert=!a,!function(t,e,n,i){var a=t.data;if(r(a)){var s=r(t.componentInstance)&&a.keepAlive;if(r(a=a.hook)&&r(a=a.init)&&a(t,!1),r(t.componentInstance))return p(t,e),h(n,t.elm,i),o(s)&&function(t,e,n,o){var i,a=t;for(;a.componentInstance;)if(r(i=(a=a.componentInstance._vnode).data)&&r(i=i.transition)){for(i=0;i<c.activate.length;++i)c.activate[i](oo,a);e.push(a);break}h(n,t.elm,o)}(t,e,n,i),!0}}(t,e,n,i)){var f=t.data,d=t.children,v=t.tag;r(v)?(t.elm=t.ns?l.createElementNS(t.ns,v):l.createElement(v,t),_(t),m(t,d,e),r(f)&&y(t,e),h(n,t.elm,i)):o(t.isComment)?(t.elm=l.createComment(t.text),h(n,t.elm,i)):(t.elm=l.createTextNode(t.text),h(n,t.elm,i))}}function p(t,e){r(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,g(t)?(y(t,e),_(t)):(no(t),e.push(t))}function h(t,e,n){r(t)&&(r(n)?l.parentNode(n)===t&&l.insertBefore(t,e,n):l.appendChild(t,e))}function m(t,n,r){if(e(n))for(var o=0;o<n.length;++o)d(n[o],r,t.elm,null,!0,n,o);else i(t.text)&&l.appendChild(t.elm,l.createTextNode(String(t.text)))}function g(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return r(t.tag)}function y(t,e){for(var n=0;n<c.create.length;++n)c.create[n](oo,t);r(a=t.data.hook)&&(r(a.create)&&a.create(oo,t),r(a.insert)&&e.push(t))}function _(t){var e;if(r(e=t.fnScopeId))l.setStyleScope(t.elm,e);else for(var n=t;n;)r(e=n.context)&&r(e=e.$options._scopeId)&&l.setStyleScope(t.elm,e),n=n.parent;r(e=Me)&&e!==t.context&&e!==t.fnContext&&r(e=e.$options._scopeId)&&l.setStyleScope(t.elm,e)}function b(t,e,n,r,o,i){for(;r<=o;++r)d(n[r],i,t,e,!1,n,r)}function $(t){var e,n,o=t.data;if(r(o))for(r(e=o.hook)&&r(e=e.destroy)&&e(t),e=0;e<c.destroy.length;++e)c.destroy[e](t);if(r(e=t.children))for(n=0;n<t.children.length;++n)$(t.children[n])}function w(t,e,n){for(;e<=n;++e){var o=t[e];r(o)&&(r(o.tag)?(x(o),$(o)):f(o.elm))}}function x(t,e){if(r(e)||r(t.data)){var n,o=c.remove.length+1;for(r(e)?e.listeners+=o:e=function(t,e){function n(){0==--n.listeners&&f(t)}return n.listeners=e,n}(t.elm,o),r(n=t.componentInstance)&&r(n=n._vnode)&&r(n.data)&&x(n,e),n=0;n<c.remove.length;++n)c.remove[n](t,e);r(n=t.data.hook)&&r(n=n.remove)?n(t,e):e()}else f(t.elm)}function C(t,e,n,o){for(var i=n;i<o;i++){var a=e[i];if(r(a)&&ao(t,a))return i}}function k(t,e,i,a,s,u){if(t!==e){r(e.elm)&&r(a)&&(e=a[s]=pt(e));var f=e.elm=t.elm;if(o(t.isAsyncPlaceholder))r(e.asyncFactory.resolved)?T(t.elm,e,i):e.isAsyncPlaceholder=!0;else if(o(e.isStatic)&&o(t.isStatic)&&e.key===t.key&&(o(e.isCloned)||o(e.isOnce)))e.componentInstance=t.componentInstance;else{var p,v=e.data;r(v)&&r(p=v.hook)&&r(p=p.prepatch)&&p(t,e);var h=t.children,m=e.children;if(r(v)&&g(e)){for(p=0;p<c.update.length;++p)c.update[p](t,e);r(p=v.hook)&&r(p=p.update)&&p(t,e)}n(e.text)?r(h)&&r(m)?h!==m&&function(t,e,o,i,a){for(var s,c,u,f=0,p=0,v=e.length-1,h=e[0],m=e[v],g=o.length-1,y=o[0],_=o[g],$=!a;f<=v&&p<=g;)n(h)?h=e[++f]:n(m)?m=e[--v]:ao(h,y)?(k(h,y,i,o,p),h=e[++f],y=o[++p]):ao(m,_)?(k(m,_,i,o,g),m=e[--v],_=o[--g]):ao(h,_)?(k(h,_,i,o,g),$&&l.insertBefore(t,h.elm,l.nextSibling(m.elm)),h=e[++f],_=o[--g]):ao(m,y)?(k(m,y,i,o,p),$&&l.insertBefore(t,m.elm,h.elm),m=e[--v],y=o[++p]):(n(s)&&(s=so(e,f,v)),n(c=r(y.key)?s[y.key]:C(y,e,f,v))?d(y,i,t,h.elm,!1,o,p):ao(u=e[c],y)?(k(u,y,i,o,p),e[c]=void 0,$&&l.insertBefore(t,u.elm,h.elm)):d(y,i,t,h.elm,!1,o,p),y=o[++p]);f>v?b(t,n(o[g+1])?null:o[g+1].elm,o,p,g,i):p>g&&w(e,f,v)}(f,h,m,i,u):r(m)?(r(t.text)&&l.setTextContent(f,""),b(f,null,m,0,m.length-1,i)):r(h)?w(h,0,h.length-1):r(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),r(v)&&r(p=v.hook)&&r(p=p.postpatch)&&p(t,e)}}}function S(t,e,n){if(o(n)&&r(t.parent))t.parent.data.pendingInsert=e;else for(var i=0;i<e.length;++i)e[i].data.hook.insert(e[i])}var O=v("attrs,class,staticClass,staticStyle,key");function T(t,e,n,i){var a,s=e.tag,c=e.data,u=e.children;if(i=i||c&&c.pre,e.elm=t,o(e.isComment)&&r(e.asyncFactory))return e.isAsyncPlaceholder=!0,!0;if(r(c)&&(r(a=c.hook)&&r(a=a.init)&&a(e,!0),r(a=e.componentInstance)))return p(e,n),!0;if(r(s)){if(r(u))if(t.hasChildNodes())if(r(a=c)&&r(a=a.domProps)&&r(a=a.innerHTML)){if(a!==t.innerHTML)return!1}else{for(var l=!0,f=t.firstChild,d=0;d<u.length;d++){if(!f||!T(f,u[d],n,i)){l=!1;break}f=f.nextSibling}if(!l||f)return!1}else m(e,u,n);if(r(c)){var v=!1;for(var h in c)if(!O(h)){v=!0,y(e,n);break}!v&&c.class&&Hn(c.class)}}else t.data!==e.text&&(t.data=e.text);return!0}return function(t,e,i,a){if(!n(e)){var s,u=!1,f=[];if(n(t))u=!0,d(e,f);else{var p=r(t.nodeType);if(!p&&ao(t,e))k(t,e,f,null,null,a);else{if(p){if(1===t.nodeType&&t.hasAttribute(L)&&(t.removeAttribute(L),i=!0),o(i)&&T(t,e,f))return S(e,f,!0),t;s=t,t=new lt(l.tagName(s).toLowerCase(),{},[],void 0,s)}var v=t.elm,h=l.parentNode(v);if(d(e,f,v._leaveCb?null:h,l.nextSibling(v)),r(e.parent))for(var m=e.parent,y=g(e);m;){for(var _=0;_<c.destroy.length;++_)c.destroy[_](m);if(m.elm=e.elm,y){for(var b=0;b<c.create.length;++b)c.create[b](oo,m);var x=m.data.hook.insert;if(x.merged)for(var C=1;C<x.fns.length;C++)x.fns[C]()}else no(m);m=m.parent}r(h)?w([t],0,0):r(t.tag)&&$(t)}}return S(e,f,u),e.elm}r(t)&&$(t)}}({nodeOps:to,modules:[_o,Oo,oi,si,yi,J?{create:Vi,activate:Vi,remove:function(t,e){!0!==t.data.show?Bi(t,e):e()}}:{}].concat(ho)});Z&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&Qi(t,"input")}));var Ji={inserted:function(t,e,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?Wt(n,"postpatch",(function(){Ji.componentUpdated(t,e,n)})):qi(t,e,n.context),t._vOptions=[].map.call(t.options,Gi)):("textarea"===n.tag||Yr(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",Xi),t.addEventListener("compositionend",Yi),t.addEventListener("change",Yi),Z&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if("select"===n.tag){qi(t,e,n.context);var r=t._vOptions,o=t._vOptions=[].map.call(t.options,Gi);if(o.some((function(t,e){return!P(t,r[e])})))(t.multiple?e.value.some((function(t){return Zi(t,o)})):e.value!==e.oldValue&&Zi(e.value,o))&&Qi(t,"change")}}};function qi(t,e,n){Wi(t,e),(W||G)&&setTimeout((function(){Wi(t,e)}),0)}function Wi(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,c=t.options.length;s<c;s++)if(a=t.options[s],o)i=D(r,Gi(a))>-1,a.selected!==i&&(a.selected=i);else if(P(Gi(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Zi(t,e){return e.every((function(e){return!P(e,t)}))}function Gi(t){return"_value"in t?t._value:t.value}function Xi(t){t.target.composing=!0}function Yi(t){t.target.composing&&(t.target.composing=!1,Qi(t.target,"input"))}function Qi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ta(t){return!t.componentInstance||t.data&&t.data.transition?t:ta(t.componentInstance._vnode)}var ea={bind:function(t,e,n){var r=e.value,o=(n=ta(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Hi(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=ta(n)).data&&n.data.transition?(n.data.show=!0,r?Hi(n,(function(){t.style.display=t.__vOriginalDisplay})):Bi(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},na={model:Ji,show:ea},ra={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function oa(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?oa(je(e.children)):t}function ia(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[w(r)]=o[r];return e}function aa(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var sa=function(t){return t.tag||ye(t)},ca=function(t){return"show"===t.name},ua={name:"transition",props:ra,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(sa)).length){var r=this.mode,o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var a=oa(o);if(!a)return o;if(this._leaving)return aa(t,o);var s="__transition-".concat(this._uid,"-");a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=ia(this),u=this._vnode,l=oa(u);if(a.data.directives&&a.data.directives.some(ca)&&(a.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(a,l)&&!ye(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=T({},c);if("out-in"===r)return this._leaving=!0,Wt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),aa(t,o);if("in-out"===r){if(ye(a))return u;var d,p=function(){d()};Wt(c,"afterEnter",p),Wt(c,"enterCancelled",p),Wt(f,"delayLeave",(function(t){d=t}))}}return o}}},la=T({tag:String,moveClass:String},ra);delete la.mode;var fa={props:la,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ie(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=ia(this),s=0;s<o.length;s++){(l=o[s]).tag&&null!=l.key&&0!==String(l.key).indexOf("__vlist")&&(i.push(l),n[l.key]=l,(l.data||(l.data={})).transition=a)}if(r){var c=[],u=[];for(s=0;s<r.length;s++){var l;(l=r[s]).data.transition=a,l.data.pos=l.elm.getBoundingClientRect(),n[l.key]?c.push(l):u.push(l)}this.kept=t(e,null,c),this.removed=u}return t(e,null,i)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,e)&&(t.forEach(da),t.forEach(pa),t.forEach(va),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var n=t.elm,r=n.style;Pi(n,e),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Ti,n._moveCb=function t(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ti,t),n._moveCb=null,Di(n,e))})}})))},methods:{hasMove:function(t,e){if(!Ci)return!1;if(this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){$i(n,t)})),bi(n,e),n.style.display="none",this.$el.appendChild(n);var r=Li(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}};function da(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function pa(t){t.data.newPos=t.elm.getBoundingClientRect()}function va(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}var ha={Transition:ua,TransitionGroup:fa};xr.config.mustUseProp=Dr,xr.config.isReservedTag=Zr,xr.config.isReservedAttr=Nr,xr.config.getTagNamespace=Gr,xr.config.isUnknownElement=function(t){if(!J)return!0;if(Zr(t))return!1;if(t=t.toLowerCase(),null!=Xr[t])return Xr[t];var e=document.createElement(t);return t.indexOf("-")>-1?Xr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Xr[t]=/HTMLUnknownElement/.test(e.toString())},T(xr.options.directives,na),T(xr.options.components,ha),xr.prototype.__patch__=J?Ki:j,xr.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ft),He(t,"beforeMount"),r=function(){t._update(t._render(),n)},new zn(t,r,j,{before:function(){t._isMounted&&!t._isDestroyed&&He(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i<o.length;i++)o[i].run();return null==t.$vnode&&(t._isMounted=!0,He(t,"mounted")),t}(this,t=t&&J?Qr(t):void 0,e)},J&&setTimeout((function(){H.devtools&&ot&&ot.emit("init",xr)}),0);var ma=/\{\{((?:.|\r?\n)+?)\}\}/g,ga=/[-.*+?^${}()|[\]\/\\]/g,ya=b((function(t){var e=t[0].replace(ga,"\\$&"),n=t[1].replace(ga,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var _a={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var n=Ho(t,"class");n&&(t.staticClass=JSON.stringify(n.replace(/\s+/g," ").trim()));var r=Fo(t,"class",!1);r&&(t.classBinding=r)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:".concat(t.staticClass,",")),t.classBinding&&(e+="class:".concat(t.classBinding,",")),e}};var ba,$a={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var n=Ho(t,"style");n&&(t.staticStyle=JSON.stringify(ci(n)));var r=Fo(t,"style",!1);r&&(t.styleBinding=r)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:".concat(t.staticStyle,",")),t.styleBinding&&(e+="style:(".concat(t.styleBinding,"),")),e}},wa=function(t){return(ba=ba||document.createElement("div")).innerHTML=t,ba.textContent},xa=v("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Ca=v("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),ka=v("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Sa=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Oa=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ta="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(B.source,"]*"),Aa="((?:".concat(Ta,"\\:)?").concat(Ta,")"),ja=new RegExp("^<".concat(Aa)),Ea=/^\s*(\/?)>/,Na=new RegExp("^<\\/".concat(Aa,"[^>]*>")),Pa=/^<!DOCTYPE [^>]+>/i,Da=/^<!\--/,Ma=/^<!\[/,Ia=v("script,style,textarea",!0),La={},Ra={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},Fa=/&(?:lt|gt|quot|amp|#39);/g,Ha=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ba=v("pre,textarea",!0),Ua=function(t,e){return t&&Ba(t)&&"\n"===e[0]};function za(t,e){var n=e?Ha:Fa;return t.replace(n,(function(t){return Ra[t]}))}function Va(t,e){for(var n,r,o=[],i=e.expectHTML,a=e.isUnaryTag||E,s=e.canBeLeftOpenTag||E,c=0,u=function(){if(n=t,r&&Ia(r)){var u=0,d=r.toLowerCase(),p=La[d]||(La[d]=new RegExp("([\\s\\S]*?)(</"+d+"[^>]*>)","i"));w=t.replace(p,(function(t,n,r){return u=r.length,Ia(d)||"noscript"===d||(n=n.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Ua(d,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""}));c+=t.length-w.length,t=w,f(d,c-u,c)}else{var v=t.indexOf("<");if(0===v){if(Da.test(t)){var h=t.indexOf("--\x3e");if(h>=0)return e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,h),c,c+h+3),l(h+3),"continue"}if(Ma.test(t)){var m=t.indexOf("]>");if(m>=0)return l(m+2),"continue"}var g=t.match(Pa);if(g)return l(g[0].length),"continue";var y=t.match(Na);if(y){var _=c;return l(y[0].length),f(y[1],_,c),"continue"}var b=function(){var e=t.match(ja);if(e){var n={tagName:e[1],attrs:[],start:c};l(e[0].length);for(var r=void 0,o=void 0;!(r=t.match(Ea))&&(o=t.match(Oa)||t.match(Sa));)o.start=c,l(o[0].length),o.end=c,n.attrs.push(o);if(r)return n.unarySlash=r[1],l(r[0].length),n.end=c,n}}();if(b)return function(t){var n=t.tagName,c=t.unarySlash;i&&("p"===r&&ka(n)&&f(r),s(n)&&r===n&&f(n));for(var u=a(n)||!!c,l=t.attrs.length,d=new Array(l),p=0;p<l;p++){var v=t.attrs[p],h=v[3]||v[4]||v[5]||"",m="a"===n&&"href"===v[1]?e.shouldDecodeNewlinesForHref:e.shouldDecodeNewlines;d[p]={name:v[1],value:za(h,m)}}u||(o.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:d,start:t.start,end:t.end}),r=n);e.start&&e.start(n,d,u,t.start,t.end)}(b),Ua(b.tagName,t)&&l(1),"continue"}var $=void 0,w=void 0,x=void 0;if(v>=0){for(w=t.slice(v);!(Na.test(w)||ja.test(w)||Da.test(w)||Ma.test(w)||(x=w.indexOf("<",1))<0);)v+=x,w=t.slice(v);$=t.substring(0,v)}v<0&&($=t),$&&l($.length),e.chars&&$&&e.chars($,c-$.length,c)}if(t===n)return e.chars&&e.chars(t),"break"};t;){if("break"===u())break}function l(e){c+=e,t=t.substring(e)}function f(t,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),t)for(s=t.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=o.length-1;u>=a;u--)e.end&&e.end(o[u].tag,n,i);o.length=a,r=a&&o[a-1].tag}else"br"===s?e.start&&e.start(t,[],!0,n,i):"p"===s&&(e.start&&e.start(t,[],!1,n,i),e.end&&e.end(t,n,i))}f()}var Ka,Ja,qa,Wa,Za,Ga,Xa,Ya,Qa=/^@|^v-on:/,ts=/^v-|^@|^:|^#/,es=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ns=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,rs=/^\(|\)$/g,os=/^\[.*\]$/,is=/:(.*)$/,as=/^:|^\.|^v-bind:/,ss=/\.[^.\]]+(?=[^\]]*$)/g,cs=/^v-slot(:|$)|^#/,us=/[\r\n]/,ls=/[ \f\t\r\n]+/g,fs=b(wa),ds="_empty_";function ps(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:bs(e),rawAttrsMap:{},parent:n,children:[]}}function vs(t,e){Ka=e.warn||Eo,Ga=e.isPreTag||E,Xa=e.mustUseProp||E,Ya=e.getTagNamespace||E,e.isReservedTag,qa=No(e.modules,"transformNode"),Wa=No(e.modules,"preTransformNode"),Za=No(e.modules,"postTransformNode"),Ja=e.delimiters;var n,r,o=[],i=!1!==e.preserveWhitespace,a=e.whitespace,s=!1,c=!1;function u(t){if(l(t),s||t.processed||(t=hs(t,e)),o.length||t===n||n.if&&(t.elseif||t.else)&&gs(n,{exp:t.elseif,block:t}),r&&!t.forbidden)if(t.elseif||t.else)a=t,u=function(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}(r.children),u&&u.if&&gs(u,{exp:a.elseif,block:a});else{if(t.slotScope){var i=t.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[i]=t}r.children.push(t),t.parent=r}var a,u;t.children=t.children.filter((function(t){return!t.slotScope})),l(t),t.pre&&(s=!1),Ga(t.tag)&&(c=!1);for(var f=0;f<Za.length;f++)Za[f](t,e)}function l(t){if(!c)for(var e=void 0;(e=t.children[t.children.length-1])&&3===e.type&&" "===e.text;)t.children.pop()}return Va(t,{warn:Ka,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,i,a,l,f){var d=r&&r.ns||Ya(t);W&&"svg"===d&&(i=function(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];$s.test(r.name)||(r.name=r.name.replace(ws,""),e.push(r))}return e}(i));var p,v=ps(t,i,r);d&&(v.ns=d),"style"!==(p=v).tag&&("script"!==p.tag||p.attrsMap.type&&"text/javascript"!==p.attrsMap.type)||rt()||(v.forbidden=!0);for(var h=0;h<Wa.length;h++)v=Wa[h](v,e)||v;s||(!function(t){null!=Ho(t,"v-pre")&&(t.pre=!0)}(v),v.pre&&(s=!0)),Ga(v.tag)&&(c=!0),s?function(t){var e=t.attrsList,n=e.length;if(n)for(var r=t.attrs=new Array(n),o=0;o<n;o++)r[o]={name:e[o].name,value:JSON.stringify(e[o].value)},null!=e[o].start&&(r[o].start=e[o].start,r[o].end=e[o].end);else t.pre||(t.plain=!0)}(v):v.processed||(ms(v),function(t){var e=Ho(t,"v-if");if(e)t.if=e,gs(t,{exp:e,block:t});else{null!=Ho(t,"v-else")&&(t.else=!0);var n=Ho(t,"v-else-if");n&&(t.elseif=n)}}(v),function(t){null!=Ho(t,"v-once")&&(t.once=!0)}(v)),n||(n=v),a?u(v):(r=v,o.push(v))},end:function(t,e,n){var i=o[o.length-1];o.length-=1,r=o[o.length-1],u(i)},chars:function(t,e,n){if(r&&(!W||"textarea"!==r.tag||r.attrsMap.placeholder!==t)){var o,u=r.children;if(t=c||t.trim()?"script"===(o=r).tag||"style"===o.tag?t:fs(t):u.length?a?"condense"===a&&us.test(t)?"":" ":i?" ":"":""){c||"condense"!==a||(t=t.replace(ls," "));var l=void 0,f=void 0;!s&&" "!==t&&(l=function(t,e){var n=e?ya(e):ma;if(n.test(t)){for(var r,o,i,a=[],s=[],c=n.lastIndex=0;r=n.exec(t);){(o=r.index)>c&&(s.push(i=t.slice(c,o)),a.push(JSON.stringify(i)));var u=Ao(r[1].trim());a.push("_s(".concat(u,")")),s.push({"@binding":u}),c=o+r[0].length}return c<t.length&&(s.push(i=t.slice(c)),a.push(JSON.stringify(i))),{expression:a.join("+"),tokens:s}}}(t,Ja))?f={type:2,expression:l.expression,tokens:l.tokens,text:t}:" "===t&&u.length&&" "===u[u.length-1].text||(f={type:3,text:t}),f&&u.push(f)}}},comment:function(t,e,n){if(r){var o={type:3,text:t,isComment:!0};r.children.push(o)}}}),n}function hs(t,e){var n,r;(r=Fo(n=t,"key"))&&(n.key=r),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){var e=Fo(t,"ref");e&&(t.ref=e,t.refInFor=function(t){var e=t;for(;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}(t))}(t),function(t){var e;"template"===t.tag?(e=Ho(t,"scope"),t.slotScope=e||Ho(t,"slot-scope")):(e=Ho(t,"slot-scope"))&&(t.slotScope=e);var n=Fo(t,"slot");n&&(t.slotTarget='""'===n?'"default"':n,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||Do(t,"slot",n,function(t,e){return t.rawAttrsMap[":"+e]||t.rawAttrsMap["v-bind:"+e]||t.rawAttrsMap[e]}(t,"slot")));if("template"===t.tag){if(a=Bo(t,cs)){var r=ys(a),o=r.name,i=r.dynamic;t.slotTarget=o,t.slotTargetDynamic=i,t.slotScope=a.value||ds}}else{var a;if(a=Bo(t,cs)){var s=t.scopedSlots||(t.scopedSlots={}),c=ys(a),u=c.name,l=(i=c.dynamic,s[u]=ps("template",[],t));l.slotTarget=u,l.slotTargetDynamic=i,l.children=t.children.filter((function(t){if(!t.slotScope)return t.parent=l,!0})),l.slotScope=a.value||ds,t.children=[],t.plain=!1}}}(t),function(t){"slot"===t.tag&&(t.slotName=Fo(t,"name"))}(t),function(t){var e;(e=Fo(t,"is"))&&(t.component=e);null!=Ho(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(var o=0;o<qa.length;o++)t=qa[o](t,e)||t;return function(t){var e,n,r,o,i,a,s,c,u=t.attrsList;for(e=0,n=u.length;e<n;e++)if(r=o=u[e].name,i=u[e].value,ts.test(r))if(t.hasBindings=!0,(a=_s(r.replace(ts,"")))&&(r=r.replace(ss,"")),as.test(r))r=r.replace(as,""),i=Ao(i),(c=os.test(r))&&(r=r.slice(1,-1)),a&&(a.prop&&!c&&"innerHtml"===(r=w(r))&&(r="innerHTML"),a.camel&&!c&&(r=w(r)),a.sync&&(s=Vo(i,"$event"),c?Ro(t,'"update:"+('.concat(r,")"),s,null,!1,0,u[e],!0):(Ro(t,"update:".concat(w(r)),s,null,!1,0,u[e]),k(r)!==w(r)&&Ro(t,"update:".concat(k(r)),s,null,!1,0,u[e])))),a&&a.prop||!t.component&&Xa(t.tag,t.attrsMap.type,r)?Po(t,r,i,u[e],c):Do(t,r,i,u[e],c);else if(Qa.test(r))r=r.replace(Qa,""),(c=os.test(r))&&(r=r.slice(1,-1)),Ro(t,r,i,a,!1,0,u[e],c);else{var l=(r=r.replace(ts,"")).match(is),f=l&&l[1];c=!1,f&&(r=r.slice(0,-(f.length+1)),os.test(f)&&(f=f.slice(1,-1),c=!0)),Io(t,r,o,i,f,c,a,u[e])}else Do(t,r,JSON.stringify(i),u[e]),!t.component&&"muted"===r&&Xa(t.tag,t.attrsMap.type,r)&&Po(t,r,"true",u[e])}(t),t}function ms(t){var e;if(e=Ho(t,"v-for")){var n=function(t){var e=t.match(es);if(!e)return;var n={};n.for=e[2].trim();var r=e[1].trim().replace(rs,""),o=r.match(ns);o?(n.alias=r.replace(ns,"").trim(),n.iterator1=o[1].trim(),o[2]&&(n.iterator2=o[2].trim())):n.alias=r;return n}(e);n&&T(t,n)}}function gs(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function ys(t){var e=t.name.replace(cs,"");return e||"#"!==t.name[0]&&(e="default"),os.test(e)?{name:e.slice(1,-1),dynamic:!0}:{name:'"'.concat(e,'"'),dynamic:!1}}function _s(t){var e=t.match(ss);if(e){var n={};return e.forEach((function(t){n[t.slice(1)]=!0})),n}}function bs(t){for(var e={},n=0,r=t.length;n<r;n++)e[t[n].name]=t[n].value;return e}var $s=/^xmlns:NS\d+/,ws=/^NS\d+:/;function xs(t){return ps(t.tag,t.attrsList.slice(),t.parent)}var Cs=[_a,$a,{preTransformNode:function(t,e){if("input"===t.tag){var n=t.attrsMap;if(!n["v-model"])return;var r=void 0;if((n[":type"]||n["v-bind:type"])&&(r=Fo(t,"type")),n.type||r||!n["v-bind"]||(r="(".concat(n["v-bind"],").type")),r){var o=Ho(t,"v-if",!0),i=o?"&&(".concat(o,")"):"",a=null!=Ho(t,"v-else",!0),s=Ho(t,"v-else-if",!0),c=xs(t);ms(c),Mo(c,"type","checkbox"),hs(c,e),c.processed=!0,c.if="(".concat(r,")==='checkbox'")+i,gs(c,{exp:c.if,block:c});var u=xs(t);Ho(u,"v-for",!0),Mo(u,"type","radio"),hs(u,e),gs(c,{exp:"(".concat(r,")==='radio'")+i,block:u});var l=xs(t);return Ho(l,"v-for",!0),Mo(l,":type",r),hs(l,e),gs(c,{exp:o,block:l}),a?c.else=!0:s&&(c.elseif=s),c}}}}];var ks,Ss,Os={model:function(t,e,n){var r=e.value,o=e.modifiers,i=t.tag,a=t.attrsMap.type;if(t.component)return zo(t,r,o),!1;if("select"===i)!function(t,e,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;'+"return ".concat(r?"_n(val)":"val","})"),i="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",a="var $$selectedVal = ".concat(o,";");a="".concat(a," ").concat(Vo(e,i)),Ro(t,"change",a,null,!0)}(t,r,o);else if("input"===i&&"checkbox"===a)!function(t,e,n){var r=n&&n.number,o=Fo(t,"value")||"null",i=Fo(t,"true-value")||"true",a=Fo(t,"false-value")||"false";Po(t,"checked","Array.isArray(".concat(e,")")+"?_i(".concat(e,",").concat(o,")>-1")+("true"===i?":(".concat(e,")"):":_q(".concat(e,",").concat(i,")"))),Ro(t,"change","var $$a=".concat(e,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(i,"):(").concat(a,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(r?"_n("+o+")":o,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(Vo(e,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(Vo(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(Vo(e,"$$c"),"}"),null,!0)}(t,r,o);else if("input"===i&&"radio"===a)!function(t,e,n){var r=n&&n.number,o=Fo(t,"value")||"null";o=r?"_n(".concat(o,")"):o,Po(t,"checked","_q(".concat(e,",").concat(o,")")),Ro(t,"change",Vo(e,o),null,!0)}(t,r,o);else if("input"===i||"textarea"===i)!function(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c=!i&&"range"!==r,u=i?"change":"range"===r?Xo:"input",l="$event.target.value";s&&(l="$event.target.value.trim()");a&&(l="_n(".concat(l,")"));var f=Vo(e,l);c&&(f="if($event.target.composing)return;".concat(f));Po(t,"value","(".concat(e,")")),Ro(t,u,f,null,!0),(s||a)&&Ro(t,"blur","$forceUpdate()")}(t,r,o);else if(!H.isReservedTag(i))return zo(t,r,o),!1;return!0},text:function(t,e){e.value&&Po(t,"textContent","_s(".concat(e.value,")"),e)},html:function(t,e){e.value&&Po(t,"innerHTML","_s(".concat(e.value,")"),e)}},Ts={expectHTML:!0,modules:Cs,directives:Os,isPreTag:function(t){return"pre"===t},isUnaryTag:xa,mustUseProp:Dr,canBeLeftOpenTag:Ca,isReservedTag:Zr,getTagNamespace:Gr,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(Cs)},As=b((function(t){return v("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function js(t,e){t&&(ks=As(e.staticKeys||""),Ss=e.isReservedTag||E,Es(t),Ns(t,!1))}function Es(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||h(t.tag)||!Ss(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(ks)))}(t),1===t.type){if(!Ss(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];Es(r),r.static||(t.static=!1)}if(t.ifConditions)for(e=1,n=t.ifConditions.length;e<n;e++){var o=t.ifConditions[e].block;Es(o),o.static||(t.static=!1)}}}function Ns(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)Ns(t.children[n],e||!!t.for);if(t.ifConditions)for(n=1,r=t.ifConditions.length;n<r;n++)Ns(t.ifConditions[n].block,e)}}var Ps=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,Ds=/\([^)]*?\);*$/,Ms=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Is={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ls={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Rs=function(t){return"if(".concat(t,")return null;")},Fs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Rs("$event.target !== $event.currentTarget"),ctrl:Rs("!$event.ctrlKey"),shift:Rs("!$event.shiftKey"),alt:Rs("!$event.altKey"),meta:Rs("!$event.metaKey"),left:Rs("'button' in $event && $event.button !== 0"),middle:Rs("'button' in $event && $event.button !== 1"),right:Rs("'button' in $event && $event.button !== 2")};function Hs(t,e){var n=e?"nativeOn:":"on:",r="",o="";for(var i in t){var a=Bs(t[i]);t[i]&&t[i].dynamic?o+="".concat(i,",").concat(a,","):r+='"'.concat(i,'":').concat(a,",")}return r="{".concat(r.slice(0,-1),"}"),o?n+"_d(".concat(r,",[").concat(o.slice(0,-1),"])"):n+r}function Bs(t){if(!t)return"function(){}";if(Array.isArray(t))return"[".concat(t.map((function(t){return Bs(t)})).join(","),"]");var e=Ms.test(t.value),n=Ps.test(t.value),r=Ms.test(t.value.replace(Ds,""));if(t.modifiers){var o="",i="",a=[],s=function(e){if(Fs[e])i+=Fs[e],Is[e]&&a.push(e);else if("exact"===e){var n=t.modifiers;i+=Rs(["ctrl","shift","alt","meta"].filter((function(t){return!n[t]})).map((function(t){return"$event.".concat(t,"Key")})).join("||"))}else a.push(e)};for(var c in t.modifiers)s(c);a.length&&(o+=function(t){return"if(!$event.type.indexOf('key')&&"+"".concat(t.map(Us).join("&&"),")return null;")}(a)),i&&(o+=i);var u=e?"return ".concat(t.value,".apply(null, arguments)"):n?"return (".concat(t.value,").apply(null, arguments)"):r?"return ".concat(t.value):t.value;return"function($event){".concat(o).concat(u,"}")}return e||n?t.value:"function($event){".concat(r?"return ".concat(t.value):t.value,"}")}function Us(t){var e=parseInt(t,10);if(e)return"$event.keyCode!==".concat(e);var n=Is[t],r=Ls[t];return"_k($event.keyCode,"+"".concat(JSON.stringify(t),",")+"".concat(JSON.stringify(n),",")+"$event.key,"+"".concat(JSON.stringify(r))+")"}var zs={on:function(t,e){t.wrapListeners=function(t){return"_g(".concat(t,",").concat(e.value,")")}},bind:function(t,e){t.wrapData=function(n){return"_b(".concat(n,",'").concat(t.tag,"',").concat(e.value,",").concat(e.modifiers&&e.modifiers.prop?"true":"false").concat(e.modifiers&&e.modifiers.sync?",true":"",")")}},cloak:j},Vs=function(t){this.options=t,this.warn=t.warn||Eo,this.transforms=No(t.modules,"transformCode"),this.dataGenFns=No(t.modules,"genData"),this.directives=T(T({},zs),t.directives);var e=t.isReservedTag||E;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ks(t,e){var n=new Vs(e),r=t?"script"===t.tag?"null":Js(t,n):'_c("div")';return{render:"with(this){return ".concat(r,"}"),staticRenderFns:n.staticRenderFns}}function Js(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return qs(t,e);if(t.once&&!t.onceProcessed)return Ws(t,e);if(t.for&&!t.forProcessed)return Xs(t,e);if(t.if&&!t.ifProcessed)return Zs(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',r=ec(t,e),o="_t(".concat(n).concat(r?",function(){return ".concat(r,"}"):""),i=t.attrs||t.dynamicAttrs?oc((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:w(t.name),value:t.value,dynamic:t.dynamic}}))):null,a=t.attrsMap["v-bind"];!i&&!a||r||(o+=",null");i&&(o+=",".concat(i));a&&(o+="".concat(i?"":",null",",").concat(a));return o+")"}(t,e);var n=void 0;if(t.component)n=function(t,e,n){var r=e.inlineTemplate?null:ec(e,n,!0);return"_c(".concat(t,",").concat(Ys(e,n)).concat(r?",".concat(r):"",")")}(t.component,t,e);else{var r=void 0,o=e.maybeComponent(t);(!t.plain||t.pre&&o)&&(r=Ys(t,e));var i=void 0,a=e.options.bindings;o&&a&&!1!==a.__isScriptSetup&&(i=function(t,e){var n=w(e),r=x(n),o=function(o){return t[e]===o?e:t[n]===o?n:t[r]===o?r:void 0},i=o("setup-const")||o("setup-reactive-const");if(i)return i;var a=o("setup-let")||o("setup-ref")||o("setup-maybe-ref");if(a)return a}(a,t.tag)),i||(i="'".concat(t.tag,"'"));var s=t.inlineTemplate?null:ec(t,e,!0);n="_c(".concat(i).concat(r?",".concat(r):"").concat(s?",".concat(s):"",")")}for(var c=0;c<e.transforms.length;c++)n=e.transforms[c](t,n);return n}return ec(t,e)||"void 0"}function qs(t,e){t.staticProcessed=!0;var n=e.pre;return t.pre&&(e.pre=t.pre),e.staticRenderFns.push("with(this){return ".concat(Js(t,e),"}")),e.pre=n,"_m(".concat(e.staticRenderFns.length-1).concat(t.staticInFor?",true":"",")")}function Ws(t,e){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return Zs(t,e);if(t.staticInFor){for(var n="",r=t.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?"_o(".concat(Js(t,e),",").concat(e.onceId++,",").concat(n,")"):Js(t,e)}return qs(t,e)}function Zs(t,e,n,r){return t.ifProcessed=!0,Gs(t.ifConditions.slice(),e,n,r)}function Gs(t,e,n,r){if(!t.length)return r||"_e()";var o=t.shift();return o.exp?"(".concat(o.exp,")?").concat(i(o.block),":").concat(Gs(t,e,n,r)):"".concat(i(o.block));function i(t){return n?n(t,e):t.once?Ws(t,e):Js(t,e)}}function Xs(t,e,n,r){var o=t.for,i=t.alias,a=t.iterator1?",".concat(t.iterator1):"",s=t.iterator2?",".concat(t.iterator2):"";return t.forProcessed=!0,"".concat(r||"_l","((").concat(o,"),")+"function(".concat(i).concat(a).concat(s,"){")+"return ".concat((n||Js)(t,e))+"})"}function Ys(t,e){var n="{",r=function(t,e){var n=t.directives;if(!n)return;var r,o,i,a,s="directives:[",c=!1;for(r=0,o=n.length;r<o;r++){i=n[r],a=!0;var u=e.directives[i.name];u&&(a=!!u(t,i,e.warn)),a&&(c=!0,s+='{name:"'.concat(i.name,'",rawName:"').concat(i.rawName,'"').concat(i.value?",value:(".concat(i.value,"),expression:").concat(JSON.stringify(i.value)):"").concat(i.arg?",arg:".concat(i.isDynamicArg?i.arg:'"'.concat(i.arg,'"')):"").concat(i.modifiers?",modifiers:".concat(JSON.stringify(i.modifiers)):"","},"))}if(c)return s.slice(0,-1)+"]"}(t,e);r&&(n+=r+","),t.key&&(n+="key:".concat(t.key,",")),t.ref&&(n+="ref:".concat(t.ref,",")),t.refInFor&&(n+="refInFor:true,"),t.pre&&(n+="pre:true,"),t.component&&(n+='tag:"'.concat(t.tag,'",'));for(var o=0;o<e.dataGenFns.length;o++)n+=e.dataGenFns[o](t);if(t.attrs&&(n+="attrs:".concat(oc(t.attrs),",")),t.props&&(n+="domProps:".concat(oc(t.props),",")),t.events&&(n+="".concat(Hs(t.events,!1),",")),t.nativeEvents&&(n+="".concat(Hs(t.nativeEvents,!0),",")),t.slotTarget&&!t.slotScope&&(n+="slot:".concat(t.slotTarget,",")),t.scopedSlots&&(n+="".concat(function(t,e,n){var r=t.for||Object.keys(e).some((function(t){var n=e[t];return n.slotTargetDynamic||n.if||n.for||Qs(n)})),o=!!t.if;if(!r)for(var i=t.parent;i;){if(i.slotScope&&i.slotScope!==ds||i.for){r=!0;break}i.if&&(o=!0),i=i.parent}var a=Object.keys(e).map((function(t){return tc(e[t],n)})).join(",");return"scopedSlots:_u([".concat(a,"]").concat(r?",null,true":"").concat(!r&&o?",null,false,".concat(function(t){var e=5381,n=t.length;for(;n;)e=33*e^t.charCodeAt(--n);return e>>>0}(a)):"",")")}(t,t.scopedSlots,e),",")),t.model&&(n+="model:{value:".concat(t.model.value,",callback:").concat(t.model.callback,",expression:").concat(t.model.expression,"},")),t.inlineTemplate){var i=function(t,e){var n=t.children[0];if(n&&1===n.type){var r=Ks(n,e.options);return"inlineTemplate:{render:function(){".concat(r.render,"},staticRenderFns:[").concat(r.staticRenderFns.map((function(t){return"function(){".concat(t,"}")})).join(","),"]}")}}(t,e);i&&(n+="".concat(i,","))}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b(".concat(n,',"').concat(t.tag,'",').concat(oc(t.dynamicAttrs),")")),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Qs(t){return 1===t.type&&("slot"===t.tag||t.children.some(Qs))}function tc(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Zs(t,e,tc,"null");if(t.for&&!t.forProcessed)return Xs(t,e,tc);var r=t.slotScope===ds?"":String(t.slotScope),o="function(".concat(r,"){")+"return ".concat("template"===t.tag?t.if&&n?"(".concat(t.if,")?").concat(ec(t,e)||"undefined",":undefined"):ec(t,e)||"undefined":Js(t,e),"}"),i=r?"":",proxy:true";return"{key:".concat(t.slotTarget||'"default"',",fn:").concat(o).concat(i,"}")}function ec(t,e,n,r,o){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?e.maybeComponent(a)?",1":",0":"";return"".concat((r||Js)(a,e)).concat(s)}var c=n?function(t,e){for(var n=0,r=0;r<t.length;r++){var o=t[r];if(1===o.type){if(nc(o)||o.ifConditions&&o.ifConditions.some((function(t){return nc(t.block)}))){n=2;break}(e(o)||o.ifConditions&&o.ifConditions.some((function(t){return e(t.block)})))&&(n=1)}}return n}(i,e.maybeComponent):0,u=o||rc;return"[".concat(i.map((function(t){return u(t,e)})).join(","),"]").concat(c?",".concat(c):"")}}function nc(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function rc(t,e){return 1===t.type?Js(t,e):3===t.type&&t.isComment?function(t){return"_e(".concat(JSON.stringify(t.text),")")}(t):function(t){return"_v(".concat(2===t.type?t.expression:ic(JSON.stringify(t.text)),")")}(t)}function oc(t){for(var e="",n="",r=0;r<t.length;r++){var o=t[r],i=ic(o.value);o.dynamic?n+="".concat(o.name,",").concat(i,","):e+='"'.concat(o.name,'":').concat(i,",")}return e="{".concat(e.slice(0,-1),"}"),n?"_d(".concat(e,",[").concat(n.slice(0,-1),"])"):e}function ic(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function ac(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),j}}function sc(t){var e=Object.create(null);return function(n,r,o){(r=T({},r)).warn,delete r.warn;var i=r.delimiters?String(r.delimiters)+n:n;if(e[i])return e[i];var a=t(n,r),s={},c=[];return s.render=ac(a.render,c),s.staticRenderFns=a.staticRenderFns.map((function(t){return ac(t,c)})),e[i]=s}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)");var cc,uc,lc=(cc=function(t,e){var n=vs(t.trim(),e);!1!==e.optimize&&js(n,e);var r=Ks(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}},function(t){function e(e,n){var r=Object.create(t),o=[],i=[];if(n)for(var a in n.modules&&(r.modules=(t.modules||[]).concat(n.modules)),n.directives&&(r.directives=T(Object.create(t.directives||null),n.directives)),n)"modules"!==a&&"directives"!==a&&(r[a]=n[a]);r.warn=function(t,e,n){(n?i:o).push(t)};var s=cc(e.trim(),r);return s.errors=o,s.tips=i,s}return{compile:e,compileToFunctions:sc(e)}}),fc=lc(Ts).compileToFunctions;function dc(t){return(uc=uc||document.createElement("div")).innerHTML=t?'<a href="\n"/>':'<div a="\n"/>',uc.innerHTML.indexOf(" ")>0}var pc=!!J&&dc(!1),vc=!!J&&dc(!0),hc=b((function(t){var e=Qr(t);return e&&e.innerHTML})),mc=xr.prototype.$mount;return xr.prototype.$mount=function(t,e){if((t=t&&Qr(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=hc(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(r){var o=fc(r,{outputSourceRange:!1,shouldDecodeNewlines:pc,shouldDecodeNewlinesForHref:vc,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return mc.call(this,t,e)},xr.compile=fc,T(xr,Rn),xr.effect=function(t,e){var n=new zn(ct,t,j,{sync:!0});e&&(n.update=function(){e((function(){return n.run()}))})},xr})); \ No newline at end of file diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php deleted file mode 100755 index 84899a76a0f75912fbff705f093a5bae14b1176e..0000000000000000000000000000000000000000 --- a/tests/Bootstrap.php +++ /dev/null @@ -1,132 +0,0 @@ -<?php - -namespace OSETest; - -use Laminas\Loader\AutoloaderFactory; -use Laminas\Mvc\Service\ServiceManagerConfig; -use Laminas\ServiceManager\ServiceManager; -use RuntimeException; - -error_reporting(E_ALL | E_STRICT); -chdir(__DIR__); - -define('CONFIG_DIR', realpath(__DIR__ . '/config')); - - - - - -/** - * Test bootstrap, for setting up autoloading - */ -class Bootstrap -{ - protected static $serviceManager; - - - - public static function init() - { - $zf2ModulePaths = [dirname(dirname(__DIR__))]; - if (($path = static::findParentPath('vendor'))) { - $zf2ModulePaths[] = $path; - } - if (($path = static::findParentPath('module')) !== $zf2ModulePaths[0]) { - $zf2ModulePaths[] = $path; - } - - static::initAutoloader(); - - // use ModuleManager to load this module and it's dependencies - $config = [ - 'module_listener_options' => [ - 'module_paths' => $zf2ModulePaths, - ], - ]; - $config = \Laminas\Stdlib\ArrayUtils::merge($config, require 'config/application.config.php'); - - $smConfig = isset($config['service_manager']) ? $config['service_manager'] : []; - $serviceManager = new ServiceManager(new ServiceManagerConfig($smConfig)); - $serviceManager->setService('ApplicationConfig', $config); - $serviceManager->get('ModuleManager')->loadModules(); - static::$serviceManager = $serviceManager; - } - - - - public static function chroot() - { - $rootPath = dirname(static::findParentPath('module')); - chdir($rootPath); - } - - - - public static function getServiceManager() - { - return static::$serviceManager; - } - - - - protected static function initAutoloader() - { - $vendorPath = static::findParentPath('vendor'); - - $zf2Path = getenv('ZF2_PATH'); - if (!$zf2Path) { - if (defined('ZF2_PATH')) { - $zf2Path = ZF2_PATH; - } elseif (is_dir($vendorPath . '/ZF2/library')) { - $zf2Path = $vendorPath . '/ZF2/library'; - } elseif (is_dir($vendorPath . '/Laminas/Laminas-loader')) { - $zf2Path = $vendorPath . '/Laminas/Laminas-loader'; - } - } - - if (!$zf2Path) { - throw new RuntimeException( - 'Unable to load ZF2. Run `php composer.phar install` or' - . ' define a ZF2_PATH environment variable.' - ); - } - - if (file_exists($vendorPath . '/autoload.php')) { - include $vendorPath . '/autoload.php'; - } - - include $zf2Path . '/Laminas/Loader/AutoloaderFactory.php'; - AutoloaderFactory::factory([ - 'Laminas\Loader\StandardAutoloader' => [ - 'autoregister_zf' => true, - 'namespaces' => [ - __NAMESPACE__ => __DIR__ . '/' . __NAMESPACE__, - ], - ], - ]); - } - - - - protected static function findParentPath($path) - { - $dir = __DIR__; - $previousDir = '.'; - while (!is_dir($dir . '/' . $path)) { - $dir = dirname($dir); - if ($previousDir === $dir) { - return false; - } - $previousDir = $dir; - } - - return $dir . '/' . $path; - } -} - - - - - -Bootstrap::init(); -Bootstrap::chroot(); \ No newline at end of file diff --git a/tests/OSETest/BaseTestCase.php b/tests/OSETest/BaseTestCase.php deleted file mode 100755 index 7568b35281b0baa7b88f0c56476d38aff7f73a1b..0000000000000000000000000000000000000000 --- a/tests/OSETest/BaseTestCase.php +++ /dev/null @@ -1,104 +0,0 @@ -<?php - -namespace OSETest; - -use Doctrine\ORM\EntityManager; -use OSETest\Bootstrap; -use OSETest\Entity\Db\EntityProvider; -use PHPUnit_Framework_TestCase; -use Laminas\ServiceManager\ServiceManager; - -/** - * Classe mère abstraite de toutes nos classes de tests unitaires/fonctionnels. - * - * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> - */ -class BaseTestCase extends PHPUnit_Framework_TestCase -{ - protected $em; - protected $eventm; - protected $user; - - /** - * @var EntityProvider - */ - protected $entityProvider; - - /** - * Sets up the fixture, for example, open a network connection. - * This method is called before a test is executed. - */ - protected function setUp() - { - $em = $this->getEntityManager(); - - if (!($this->user = $em->find("Application\Entity\Db\Utilisateur", $id = 1))) { - $this->markTestIncomplete("Utilisateur (id = $id) introuvable."); - } - - // recherche du listener de gestion de l'historique pour lui transmettre l'utilisateur - foreach ($this->getEventManager()->getListeners() as $event => $listeners) { - foreach ($listeners as $listener) { - if ($listener instanceof \Common\ORM\Event\Listeners\HistoriqueListener) { - $listener->setIdentity(['db' => $this->user]); - } - } - } - } - - /** - * - * @param string $name - * @return EntityProvider - */ - public function getEntityProvider($name = 'orm_default') - { - if (null === $this->entityProvider) { - $this->entityProvider = new EntityProvider($this->getEntityManager($name)); - $this->entityProvider->setTestClassName(get_class($this)); - } - - return $this->entityProvider; - } - - /** - * - * @param string $name - * @return EntityManager - */ - protected function getEntityManager($name = 'orm_default') - { - if (null === $this->em) { - $this->em = $this->getServiceManager()->get("doctrine.entitymanager.$name"); - } - return $this->em; - } - - /** - * - * @param string $name - * @return EventManager - */ - protected function getEventManager($name = 'orm_default') - { - if (null === $this->eventm) { - $this->eventm = $this->getServiceManager()->get("doctrine.eventmanager.$name"); - } - return $this->eventm; - } - - /** - * Retourne le gestionnaire de service. - * - * @return ServiceManager - */ - protected function getServiceManager() - { - return Bootstrap::getServiceManager(); - } - - protected function tearDown() - { - parent::tearDown(); - } -} \ No newline at end of file diff --git a/tests/OSETest/Controller/BaseTest.php b/tests/OSETest/Controller/BaseTest.php deleted file mode 100755 index f77c44002daddcb633c5648465f3fc308669e5bf..0000000000000000000000000000000000000000 --- a/tests/OSETest/Controller/BaseTest.php +++ /dev/null @@ -1,51 +0,0 @@ -<?php - -namespace OSETest\Controller; - -use OSETest\Bootstrap; -use Doctrine\ORM\EntityManager; -use Laminas\ServiceManager\ServiceManager; -use Laminas\Test\PHPUnit\Controller\AbstractHttpControllerTestCase; - -/** - * Classe mère des tests de contrôleur. - * - * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> - */ -abstract class BaseTest extends AbstractHttpControllerTestCase -{ - protected $traceError = true; - protected $em; - - /** - * - */ - public function setUp() - { - $this->setApplicationConfig(include CONFIG_DIR . '/application.config.php'); - parent::setUp(); - } - - /** - * - * @param string $name - * @return EntityManager - */ - protected function getEntityManager($name = 'orm_default') - { - if (null === $this->em) { - $this->em = $this->getServiceManager()->get("doctrine.entitymanager.$name"); - } - return $this->em; - } - - /** - * Retourne le gestionnaire de service. - * - * @return ServiceManager - */ - protected function getServiceManager() - { - return Bootstrap::getServiceManager(); - } -} \ No newline at end of file diff --git a/tests/OSETest/Entity/Db/Asset.php b/tests/OSETest/Entity/Db/Asset.php deleted file mode 100755 index 74dc34554a66cf75eb35d67eabc743ed56b6e417..0000000000000000000000000000000000000000 --- a/tests/OSETest/Entity/Db/Asset.php +++ /dev/null @@ -1,376 +0,0 @@ -<?php - -namespace OSETest\Entity\Db; - -use Application\Entity\Db\Civilite; -use Application\Entity\Db\Corps; -use Intervenant\Entity\Db\Statut; -use Application\Entity\Db\Etablissement; -use Application\Entity\Db\Intervenant; -use Application\Entity\Db\IntervenantExterieur; -use Application\Entity\Db\IntervenantPermanent; -use Application\Entity\Db\RegimeSecu; -use Application\Entity\Db\Utilisateur; -use Application\Entity\Db\Structure; -use Intervenant\Entity\Db\TypeIntervenant; -use Application\Entity\Db\Dossier; -use Enseignement\Entity\Db\Service; -use Referentiel\Entity\Db\ServiceReferentiel; -use Application\Entity\Db\Annee; -use Application\Entity\Db\Etape; -use Application\Entity\Db\ElementPedagogique; -use Enseignement\Entity\Db\VolumeHoraire; -use Application\Entity\Db\Periode; -use Service\Entity\Db\TypeVolumeHoraire; -use Application\Entity\Db\TypeIntervention; -use Referentiel\Entity\Db\FonctionReferentiel; -use Application\Entity\Db\PieceJointe; -use Application\Entity\Db\TypePieceJointeStatut; -use Application\Entity\Db\TypePieceJointe; -use Application\Entity\Db\Fichier; -use Application\Entity\Db\Agrement; -use Application\Entity\Db\TypeAgrement; -use Application\Entity\Db\TypeValidation; -use Application\Entity\Db\Validation; -use Application\Entity\Db\Contrat; -use Application\Entity\Db\TypeContrat; -use DateTime; - -/** - * Données de tests. - * - * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> - */ -class Asset -{ - const SOURCE_TEST = 'Test'; - - - - static public function newUser() - { - $e = new Utilisateur(); - $e - ->setDisplayName('Alco TEST') - ->setEmail('test@domain.fr') - ->setPassword('azerty') - ->setState(1) - ->setUsername(uniqid()); - - return $e; - } - - - - static public function newEtablissement() - { - $e = new Etablissement(); - $e - ->setLibelle('Établissement de test') - ->setSource(static::getSource()) - ->setSourceCode(uniqid()); - - return $e; - } - - - - static public function newStructure() - { - $e = new Structure(); - $e - ->setLibelleCourt(uniqid('TEST ')) - ->setLibelleLong(uniqid('Structure de test')) - ->setSource(static::getSource()) - ->setSourceCode(uniqid()); - - return $e; - } - - - - static public function newStatut(TypeIntervenant $typeIntervenant) - { - $e = new Statut(); - $e - ->setLibelle("Statut TEST " . $typeIntervenant) - ->setTypeIntervenant($typeIntervenant) - ->setServiceStatutaire(100) - ->setDossier(true) - ->setOrdre(1) - ->setCode(uniqid()); - - return $e; - } - - - - static public function newTypeIntervenant() - { - $e = new TypeIntervenant(); - $e - ->setCode('|') - ->setLibelle(uniqid("Type Intervenant ")); - - return $e; - } - - - - static public function newCorps() - { - $e = new Corps(); - $e - ->setLibelleCourt("C1") - ->setLibelleLong("Corps de test") - ->setSource(static::getSource()) - ->setSourceCode(uniqid()); - - return $e; - } - - - - static public function newRegimeSecu() - { - $e = new RegimeSecu(); - $e - ->setCode('' . rand(1, 99)) - ->setLibelle("Taux de test") - ->setTauxTaxe(5.5); - - return $e; - } - - - - static public function newCivilite() - { - $e = new Civilite(); - $e - ->setLibelle("Mister") - ->setSexe('M'); - - return $e; - } - - - - static public function newDossier( - Civilite $civilite, - $premierRecrutement, - $perteEmploi, - Statut $statut) - { - $e = new Dossier(); - $e - ->setNomPatronymique(uniqid('Nom patro ')) - ->setNomUsuel(uniqid('Nom ')) - ->setPrenom(uniqid('Prénom ')) - ->setEmail(uniqid() . '@unicaen.fr') - ->setCivilite($civilite) - ->setNumeroInsee("16511146232746") - ->setNumeroInseeEstProvisoire(false) - ->setAdresse("16-18 rue de l'Equerre - 75019 Paris") - ->setTelephone("0102030405") - ->setRib("YYYYFRPPXXX-FR6541107987540063147191234") - ->setPremierRecrutement($premierRecrutement) - ->setPerteEmploi($perteEmploi) - ->setStatut($statut); - - return $e; - } - - - - static public function newService( - Intervenant $intervenant, - Structure $structureEns, - ElementPedagogique $elementPedagogique, - TypeVolumeHoraire $typeVolumeHoraire, - Annee $annee) - { - $e = new Service(); - $e - ->setElementPedagogique($elementPedagogique) - ->setIntervenant($intervenant) - ->setTypeVolumeHoraire($typeVolumeHoraire); - - return $e; - } - - - - static public function newServiceReferentiel( - Intervenant $intervenant, - FonctionReferentiel $fonction, - Structure $structure, - Annee $annee) - { - $e = new ServiceReferentiel(); - $e - ->setFonctionReferentiel($fonction) - ->setHeures(rand(1, 50)) - ->setIntervenant($intervenant) - ->setStructure($structure); - - return $e; - } - - - - static public function newElementPedagogique( - Structure $structure, - Etape $etape, - Periode $periode) - { - $e = new ElementPedagogique(); - $e - ->setEtape($etape) - ->setLibelle(uniqid("EP ")) - ->setPeriode($periode) - ->setSource(self::getSource()) - ->setSourceCode(uniqid()) - ->setStructure($structure); - - return $e; - } - - - - static public function newVolumeHoraire( - Service $service, - TypeIntervention $typeIntervention, - Periode $periode, - $heures) - { - $e = new VolumeHoraire(); - $e - ->setHeures($heures) - ->setContrat(null) - ->setMotifNonPaiement(null) - ->setPeriode($periode) - ->setService($service) - ->setTypeIntervention($typeIntervention) - ->setTypeVolumeHoraire($service->getTypeVolumeHoraire()); - - return $e; - } - - - - static public function newTypePieceJointe() - { - $e = new TypePieceJointe(); - $e - ->setCode(uniqid()) - ->setLibelle(uniqid("TPJ ")); - - return $e; - } - - - - static public function newTypePieceJointeStatut(Statut $statut, TypePieceJointe $type) - { - $e = new TypePieceJointeStatut(); - $e - ->setType($type) - ->setStatut($statut); - - return $e; - } - - - - static public function newPieceJointe(TypePieceJointe $type, Dossier $dossier = null) - { - $e = new PieceJointe(); - $e - ->setType($type) - ->setDossier($dossier); - - return $e; - } - - - - static public function newFichier() - { - $e = new Fichier(); - $e - ->setNom(uniqid('Fichier ')) - ->setDescription(null) - ->setType("image/png") - ->setTaille(1024) - ->setContenu("binary data"); - - return $e; - } - - - - static public function newTypeAgrement() - { - $e = new TypeAgrement(); - $e - ->setCode(uniqid()) - ->setLibelle(uniqid("TA ")); - - return $e; - } - - - - static public function newAgrement(TypeAgrement $type, Intervenant $intervenant, Structure $structure, Annee $annee) - { - $e = new Agrement(); - $e - ->setType($type) - ->setAnnee($annee) - ->setIntervenant($intervenant) - ->setStructure($structure) - ->setDateDecision(new \DateTime()); - - return $e; - } - - - - static public function newValidation(TypeValidation $type, Intervenant $intervenant, Structure $structure = null) - { - $e = new Validation(); - $e - ->setIntervenant($intervenant) - ->setStructure($structure ?: $intervenant->getStructure()) - ->setTypeValidation($type); - - return $e; - } - - - - static public function newContrat(TypeContrat $type, Intervenant $intervenant, Structure $structure) - { - $e = new Contrat(); - $e - ->setTypeContrat($type) - ->setIntervenant($intervenant) - ->setStructure($structure) - ->setNumeroAvenant($type->estUnAvenant() ? 1 : 0); - - return $e; - } - - - - static public function newTypeContrat($avenant = false) - { - $e = new TypeContrat(); - $e - ->setCode($avenant ? TypeContrat::CODE_AVENANT : TypeContrat::CODE_CONTRAT) - ->setLibelle(uniqid("TC ")); - - return $e; - } -} \ No newline at end of file diff --git a/tests/OSETest/Entity/Db/BaseTest.php b/tests/OSETest/Entity/Db/BaseTest.php deleted file mode 100755 index c1b32b78df7f73107e021497af61657ea1c5e99d..0000000000000000000000000000000000000000 --- a/tests/OSETest/Entity/Db/BaseTest.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - -namespace OSETest\Entity\Db; - -use PHPUnit_Framework_TestCase; - -/** - * Description of BaseTest - * - * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> - */ -abstract class BaseTest extends PHPUnit_Framework_TestCase -{ - use \OSETest\EntityManagerAwareTrait; - - /** - * @var EntityProvider - */ - protected $entityProvider; - - /** - * - * @return EntityProvider - */ - public function getEntityProvider() - { - if (null === $this->entityProvider) { - $this->entityProvider = new EntityProvider($this->getEntityManager()); - } - - return $this->entityProvider; - } -} \ No newline at end of file diff --git a/tests/OSETest/Entity/Db/EntityProvider.php b/tests/OSETest/Entity/Db/EntityProvider.php deleted file mode 100755 index 0ffc604910c8cf3df63200a75443489fef8c6b8d..0000000000000000000000000000000000000000 --- a/tests/OSETest/Entity/Db/EntityProvider.php +++ /dev/null @@ -1,916 +0,0 @@ -<?php - -namespace OSETest\Entity\Db; - -use Application\Entity\Db\Civilite; -use Application\Entity\Db\Corps; -use Application\Entity\Db\Etablissement; -use Application\Entity\Db\IntervenantDossier; -use Application\Entity\Db\RegimeSecu; -use Application\Entity\Db\Intervenant; -use Application\Entity\Db\IntervenantPermanent; -use Application\Entity\Db\IntervenantExterieur; -use Intervenant\Entity\Db\TypeIntervenant; -use Intervenant\Entity\Db\Statut; -use Application\Entity\Db\Structure; -use Enseignement\Entity\Db\Service; -use Referentiel\Entity\Db\ServiceReferentiel; -use Enseignement\Entity\Db\VolumeHoraire; -use Service\Entity\Db\TypeVolumeHoraire; -use Application\Entity\Db\TypeIntervention; -use Application\Entity\Db\Periode; -use Application\Entity\Db\Annee; -use Application\Entity\Db\Etape; -use Application\Entity\Db\ElementPedagogique; -use Referentiel\Entity\Db\FonctionReferentiel; -use Application\Entity\Db\PieceJointe; -use Application\Entity\Db\TypePieceJointeStatut; -use Application\Entity\Db\TypePieceJointe; -use Application\Entity\Db\Dossier; -use Application\Entity\Db\Agrement; -use Application\Entity\Db\TypeAgrement; -use Application\Entity\Db\TypeValidation; -use Application\Entity\Db\Validation; -use Application\Entity\Db\Contrat; -use Application\Entity\Db\TypeContrat; -use Doctrine\ORM\EntityManager; -use RuntimeException; -use LogicException; -use SplStack; - -/** - * Description of EntityProvider - * - * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> - */ -class EntityProvider -{ - use \UnicaenApp\Service\EntityManagerAwareTrait; - - /** - * @var array - */ - private $newEntities; - - /** - * @var Annee - */ - private $annee; - - /** - * @var Etablissement - */ - private $etablissement; - - /** - * @var Civilite - */ - private $civilite; - - /** - * @var Structure - */ - private $structureRacine; - - /** - * @var Structure - */ - private $structureEns; - - /** - * @var Statut[] - */ - private $statuts; - - /** - * @var TypeAgrement[] - */ - private $typesAgrement; - - /** - * @var TypeContrat[] - */ - private $typesContrat; - - /** - * @var TypeValidation[] - */ - private $typesValidation; - - /** - * @var TypeIntervention[] - */ - private $typesIntervention; - - /** - * @var Corps - */ - private $corps; - - /** - * @var RegimeSecu - */ - private $regimeSecu; - - /** - * @var FonctionReferentiel - */ - private $fonction; - - /** - * @var Etape - */ - private $etape; - - /** - * @var TypeVolumeHoraire - */ - private $typeVolumeHoraire; - - /** - * @var TypeIntervenant[] - */ - private $typesIntervenant; - - /** - * @var TypeIntervention - */ - private $typeIntervention; - - /** - * @var Periode - */ - private $periode; - - - - /** - * - * @param EntityManager $entityManager - */ - public function __construct(EntityManager $entityManager) - { - $this->setEntityManager($entityManager); - - //Asset::setSource($this->getSource()); - - // recherche du pseudo-utilisateur OSE - if (!($param = $this->getEntityManager()->getRepository("Application\Entity\Db\Parametre")->findOneByNom($nom = 'oseuser'))) { - throw new RuntimeException("Paramètre '$nom' introuvable."); - } - if (!($oseuser = $this->getEntityManager()->find("Application\Entity\Db\Utilisateur", $id = $param->getValeur()))) { - throw new RuntimeException("Utilisateur OSE (id = $id) introuvable."); - } - // recherche du listener de gestion de l'historique pour lui transmettre le pseudo-utilisateur OSE - foreach ($this->getEntityManager()->getEventManager()->getListeners() as $listeners) { - foreach ($listeners as $listener) { - if ($listener instanceof HistoriqueListener) { - $listener->setIdentity(['db' => $oseuser]); - } - } - } - - $this->newEntities = new SplStack(); - } - - - - /** - * @var string - */ - protected $testClassName; - - - - /** - * - * @param string $className - * - * @return self - */ - public function setTestClassName($className) - { - $this->testClassName = $className; - - return $this; - } - - - - /** - * SUpprime du gestionnaire d'entité les éventuelles nouvelles instances d'entités créées. - * - * @return self - */ - public function removeNewEntities($flush = true) - { - $this->newEntities->rewind(); - - while ($this->newEntities->valid()) { - $entity = $this->newEntities->current(); - if ($entity instanceof ElementPedagogique) { - // On historise les EP à la main car on n'arrive pas à éviter l'erreur suivante : - // Doctrine\DBAL\DBALException: An exception occurred while executing - // 'DELETE FROM V_ELEMENT_TYPE_INTERVENTION WHERE ELEMENT_PEDAGOGIQUE_ID = ?' with params [17970]: - // ORA-01752: cannot delete from view without exactly one key-preserved table - $entity->setHistoDestruction(new \DateTime()); - } else { - $this->getEntityManager()->remove($entity); - } - $this->newEntities->next(); - } - - if ($flush) { - $this->getEntityManager()->flush(); - } - - return $this; - } - - - - /** - * Recherche et retourne l'année en cours. - * - * @return Annee - */ - public function getAnnee() - { - if (null === $this->annee) { - if (!($param = $this->getEntityManager()->getRepository("Application\Entity\Db\Parametre")->findOneByNom($nom = 'annee'))) { - throw new RuntimeException("Paramètre '$nom' introuvable."); - } - $this->annee = $this->getEntityManager()->find('Application\Entity\Db\Annee', $id = $param->getValeur()); - if (!$this->annee) { - throw new RuntimeException("Année $id introuvable."); - } - } - - return $this->annee; - } - - - - /** - * Recherche et retourne l'Etablissement par défaut. - * - * @return Etablissement - */ - public function getEtablissement() - { - if (null === $this->etablissement) { - if (!($param = $this->getEntityManager()->getRepository("Application\Entity\Db\Parametre")->findOneByNom($nom = 'etablissement'))) { - throw new RuntimeException("Paramètre '$nom' introuvable."); - } - $this->etablissement = $this->getEntityManager()->find('Application\Entity\Db\Etablissement', $id = $param->getValeur()); - if (!$this->etablissement) { - throw new RuntimeException("Etablissement $id introuvable."); - } - } - - return $this->etablissement; - } - - - - /** - * Recherche et retourne la première Civilite trouvée. - * - * @return Civilite - */ - public function getCivilite() - { - if (null === $this->civilite) { - $qb = $this->getEntityManager()->getRepository('Application\Entity\Db\Civilite')->createQueryBuilder("c"); - $this->civilite = $qb->getQuery()->setMaxResults(1)->getSingleResult(); - if (!$this->civilite) { - throw new RuntimeException("Aucune civilité trouvée."); - } - } - - return $this->civilite; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de Structure persistée. - * - * @return Structure - */ - public function getStructure() - { - return null; - } - - - - /** - * Recherche et retourne la structure racine, i.e. qui n'a aucun structure mère. - * - * @return Structure - * @throws RuntimeException StructureService racine introuvable - */ - public function getStructureRacine() - { - if (null !== $this->structureRacine) { - return $this->structureRacine; - } - - $this->structureRacine = $this->getEntityManager()->getRepository("Application\Entity\Db\Structure")->findOneByParente(null); - if (!$this->structureRacine) { - throw new RuntimeException("Structure racine introuvable."); - } - - return $this->structureRacine; - } - - - - /** - * Retourne : - * - soit une Structure d'enseignement quelconque ; - * - soit à chaque appel une nouvelle instance de Structure d'enseignement persistée. - * - * @param boolean $quelconque - * - * @return Structure - */ - public function getStructureEns($quelconque = true) - { - if ($quelconque) { - if (null === $this->structureEns) { - $qb = $this->getEntityManager()->getRepository('Application\Entity\Db\Structure')->createQueryBuilder("s") - ->join("s.type", "ts") - ->andWhere("ts.enseignement = 1"); - $this->structureEns = $qb->getQuery()->setMaxResults(1)->getSingleResult(); - if (!$this->structureEns) { - throw new RuntimeException("Structure d'enseignement quelconque introuvable."); - } - } - - return $this->structureEns; - } - - $structureEns = Asset::newStructure(); - - $this->getEntityManager()->persist($structureEns); - - $this->newEntities->push($structureEns); - - return $structureEns; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de Statut persistée. - * - * @param boolean $permanent - * - * @return Statut - */ - public function getStatut($permanent = true) - { - $typeIntervenant = $this->getTypeIntervenant($permanent); - $statut = Asset::newStatut($typeIntervenant); - - $this->getEntityManager()->persist($statut); - - $this->newEntities->push($statut); - - return $statut; - } - - - - /** - * Recherche et retourne le Statut correspondant au code spécifié. - * - * @param string $sourceCode Code "source" du statut, ex: Statut::SALAR_PRIVE - * - * @return Statut - */ - public function getStatutByCode($sourceCode) - { - if (!$sourceCode) { - throw new LogicException("Un code de statut intervenant est requis."); - } - - if (!isset($this->statuts[$sourceCode])) { - $this->statuts[$sourceCode] = $this->getEntityManager()->getRepository('Intervenant\Entity\Db\Statut') - ->findOneBySourceCode($sourceCode); - if (!$this->statuts[$sourceCode]) { - throw new RuntimeException("Statut intervenant introuvable avec le code '$sourceCode'."); - } - } - - return $this->statuts[$sourceCode]; - } - - - - /** - * Retourne une nouvelle instance UNIQUE de Corps. - * - * @return Corps - */ - public function getCorps() - { - if (null === $this->corps) { - $this->corps = Asset::newCorps(); - $this->getEntityManager()->persist($this->corps); - - $this->newEntities->push($this->corps); - } - - return $this->corps; - } - - - - /** - * Retourne une nouvelle instance UNIQUE de RegimeSecu. - * - * @return RegimeSecu - */ - public function getRegimeSecu() - { - if (null === $this->regimeSecu) { - $this->regimeSecu = Asset::newRegimeSecu(); - $this->getEntityManager()->persist($this->regimeSecu); - - $this->newEntities->push($this->regimeSecu); - } - - return $this->regimeSecu; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de Service. - * - * @param Intervenant $intervenant - * @param Structure $structureEns - * @param ElementPedagogique $ep - * - * @return Service - */ - public function getService(Intervenant $intervenant, Structure $structureEns = null, ElementPedagogique $ep = null) - { - $service = Asset::newService( - $intervenant, - $structureEns ?: $this->getStructureEns(), - $ep ?: $this->getElementPedagogique(), - $this->getTypeVolumeHoraire(), - $this->getAnnee() - ); - $this->getEntityManager()->persist($service); - - $this->newEntities->push($service); - - return $service; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de VolumeHoraire. - * - * @param Service $v - * @param float $heures - * @param TypeIntervention $typeIntervention - * - * @return VolumeHoraire - */ - public function getVolumeHoraire(Service $v, $heures, TypeIntervention $typeIntervention = null, Periode $periode = null) - { - $vh = Asset::newVolumeHoraire( - $v, - $typeIntervention ?: $this->getTypeIntervention(), - $periode ?: $this->getPeriode(), - $heures); - $this->getEntityManager()->persist($vh); - - $this->newEntities->push($vh); - - return $vh; - } - - - - /** - * Recherche et retourne un TypeIntervention quelconque. - * - * @return TypeIntervention - */ - public function getTypeIntervention() - { - if (null === $this->typeIntervention) { - $qb = $this->getEntityManager()->getRepository('Application\Entity\Db\TypeIntervention')->createQueryBuilder("ti"); - $this->typeIntervention = $qb->getQuery()->setMaxResults(1)->getOneOrNullResult(); - if (!$this->typeIntervention) { - throw new RuntimeException("TypeIntervention quelconque introuvable."); - } - } - - return $this->typeIntervention; - } - - - - /** - * Recherche et retourne le TypeIntervention correspondant au code spécifié. - * - * @param string $code Code du TypeIntervention, ex: TypeIntervention::CODE_PIECE_JOINTE - * - * @return TypeIntervention - */ - public function getTypeInterventionByCode($code) - { - if (!$code) { - throw new LogicException("Un code de TypeIntervention est requis."); - } - - if (!isset($this->typesIntervention[$code])) { - $this->typesIntervention[$code] = $this->getEntityManager()->getRepository('Application\Entity\Db\TypeIntervention') - ->findOneByCode($code); - if (!$this->typesIntervention[$code]) { - throw new RuntimeException("TypeIntervention introuvable avec le code '$code'."); - } - } - - return $this->typesIntervention[$code]; - } - - - - /** - * Recherche et retourne une Periode quelconque. - * - * @return Periode - */ - public function getPeriode() - { - if (null === $this->periode) { - $qb = $this->getEntityManager()->getRepository('Application\Entity\Db\Periode')->createQueryBuilder("p"); - $qb->where("p.enseignement = 1"); - $this->periode = $qb->getQuery()->setMaxResults(1)->getOneOrNullResult(); - if (!$this->periode) { - throw new RuntimeException("Periode quelconque introuvable."); - } - } - - return $this->periode; - } - - - - /** - * Recherche et retourne une Etape quelconque. - * - * @return Etape - */ - public function getEtape() - { - if (null === $this->etape) { - $qb = $this->getEntityManager()->getRepository('Application\Entity\Db\Etape')->createQueryBuilder("e"); - $this->etape = $qb->getQuery()->setMaxResults(1)->getSingleResult(); - if (!$this->etape) { - throw new RuntimeException("Etape quelconque introuvable."); - } - } - - return $this->etape; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de ElementPedagogique persistée. - * - * @return ElementPedagogique - */ - public function getElementPedagogique(Structure $structure = null) - { - $ep = Asset::newElementPedagogique( - $structure ?: $this->getStructureEns(), - $this->getEtape(), - $this->getPeriode() - ); - $this->getEntityManager()->persist($ep); - - $this->newEntities->push($ep); - - return $ep; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de ServiceReferentiel persistée. - * - * @param Intervenant $intervenant - * @param Structure $structure - * - * @return ServiceReferentiel - */ - public function getServiceReferentiel(Intervenant $intervenant, Structure $structure = null) - { - $service = Asset::newServiceReferentiel( - $intervenant, - $this->getFonctionReferentiel(), - $structure ?: $this->getStructureEns(), - $this->getAnnee() - ); - $this->getEntityManager()->persist($service); - - $this->newEntities->push($service); - - return $service; - } - - - - /** - * Recherche et retourne une FonctionReferentiel quelconque. - * - * @return FonctionReferentiel - */ - public function getFonctionReferentiel() - { - if (null === $this->fonction) { - $qb = $this->getEntityManager()->getRepository('Referentiel\Entity\Db\FonctionReferentiel')->createQueryBuilder("fr"); - $this->fonction = $qb->getQuery()->setMaxResults(1)->getSingleResult(); - if (!$this->fonction) { - throw new RuntimeException("Fonction Referentiel quelconque introuvable."); - } - } - - return $this->fonction; - } - - - - /** - * Recherche et retourne le TypeVolumeHoraire "Prévu". - * - * @return TypeVolumeHoraire - */ - public function getTypeVolumeHoraire() - { - if (null === $this->typeVolumeHoraire) { - $this->typeVolumeHoraire = $this->getEntityManager()->getRepository('Service\Entity\Db\TypeVolumeHoraire') - ->findOneByCode($code = TypeVolumeHoraire::CODE_PREVU); - if (!$this->typeVolumeHoraire) { - throw new RuntimeException(sprintf("Type de volume horaire '%s' introuvable.", $code)); - } - } - - return $this->typeVolumeHoraire; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de TypePieceJointe persistée. - * - * @return TypePieceJointe - */ - public function getTypePieceJointe() - { - $type = Asset::newTypePieceJointe(); - - $this->getEntityManager()->persist($type); - - $this->newEntities->push($type); - - return $type; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de TypePieceJointeStatut persistée. - * - * @param Statut $statut - * @param TypePieceJointe $type - * - * @return TypePieceJointeStatut - */ - public function getTypePieceJointeStatut(Statut $statut, TypePieceJointe $type = null) - { - $tpjs = Asset::newTypePieceJointeStatut( - $statut, - $type ?: $this->getTypePieceJointe()); - - $this->getEntityManager()->persist($tpjs); - - $this->newEntities->push($tpjs); - - return $tpjs; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de PieceJointe persistée. - * - * @param TypePieceJointe $type - * @param IntervenantDossier $dossier - * - * @return PieceJointe - */ - public function getPieceJointe(TypePieceJointe $type, IntervenantDossier $dossier = null) - { - $pj = Asset::newPieceJointe($type, $dossier); - - $this->getEntityManager()->persist($pj); - - $this->newEntities->push($pj); - - return $pj; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de Fichier persistée. - * - * @return Fichier - */ - public function getFichier() - { - $fichier = Asset::newFichier(); - - $this->getEntityManager()->persist($fichier); - - $this->newEntities->push($fichier); - - return $fichier; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de TypeAgrement persistée. - * - * @return TypeAgrement - */ - public function getTypeAgrement() - { - $type = Asset::newTypeAgrement(); - - $this->getEntityManager()->persist($type); - - $this->newEntities->push($type); - - return $type; - } - - - - /** - * Retourne à chaque appel une nouvelle instance d'AgrementService persistée. - * - * @param TypeAgrement $type - * @param Intervenant $intervenant - * @param Structure $structure - * - * @return Agrement - */ - public function getAgrement(TypeAgrement $type, Intervenant $intervenant, Structure $structure = null) - { - $a = Asset::newAgrement( - $type, - $intervenant, - $structure ?: $intervenant->getStructure(), - $this->getAnnee()); - - $this->getEntityManager()->persist($a); - - $this->newEntities->push($a); - - return $a; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de Validation persistée. - * - * @return Validation - */ - public function getValidation(TypeValidation $type, Intervenant $intervenant) - { - $validation = Asset::newValidation($type, $intervenant); - - $this->getEntityManager()->persist($validation); - - $this->newEntities->push($validation); - - return $validation; - } - - - - /** - * Recherche et retourne le TypeValidation correspondant au code spécifié. - * - * @param string $sourceCode Code du TypeValidation, ex: TypeValidation::CODE_PIECE_JOINTE - * - * @return TypeValidation - */ - public function getTypeValidationByCode($sourceCode) - { - if (!$sourceCode) { - throw new LogicException("Un code de TypeValidation est requis."); - } - - if (!isset($this->typesValidation[$sourceCode])) { - $this->typesValidation[$sourceCode] = $this->getEntityManager()->getRepository('Application\Entity\Db\TypeValidation') - ->findOneByCode($sourceCode); - if (!$this->typesValidation[$sourceCode]) { - throw new RuntimeException("TypeValidation introuvable avec le code '$sourceCode'."); - } - } - - return $this->typesValidation[$sourceCode]; - } - - - - /** - * Recherche et retourne le TypeAgrement correspondant au code spécifié. - * - * @param string $sourceCode Code du TypeAgrement, ex: TypeAgrement::CODE_CONSEIL_RESTREINT - * - * @return TypeAgrement - */ - public function getTypeAgrementByCode($sourceCode) - { - if (!$sourceCode) { - throw new LogicException("Un code de TypeAgrement est requis."); - } - - if (!isset($this->typesAgrement[$sourceCode])) { - $this->typesAgrement[$sourceCode] = $this->getEntityManager()->getRepository('Application\Entity\Db\TypeAgrement') - ->findOneByCode($sourceCode); - if (!$this->typesAgrement[$sourceCode]) { - throw new RuntimeException("TypeAgrement introuvable avec le code '$sourceCode'."); - } - } - - return $this->typesAgrement[$sourceCode]; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de Contrat persistée. - * - * @param TypeContrat $type - * @param Intervenant $intervenant - * @param Structure $structure - * - * @return Contrat - */ - public function getContrat(TypeContrat $type, Intervenant $intervenant, Structure $structure = null) - { - $a = Asset::newContrat( - $type, - $intervenant, - $structure ?: $intervenant->getStructure()); - - $this->getEntityManager()->persist($a); - - $this->newEntities->push($a); - - return $a; - } - - - - /** - * Retourne à chaque appel une nouvelle instance de TypeContrat persistée. - * - * @param boolean $avenant - * - * @return TypeContrat - */ - public function getTypeContrat($avenant = false) - { - $code = $avenant ? TypeContrat::CODE_AVENANT : TypeContrat::CODE_CONTRAT; - - if (!isset($this->typesContrat[$code])) { - $this->typesContrat[$code] = $this->getEntityManager()->getRepository('Application\Entity\Db\TypeContrat') - ->findOneByCode($code); - if (!$this->typesContrat[$code]) { - throw new RuntimeException("TypeContrat introuvable avec le code '$code'."); - } - } - - return $this->typesContrat[$code]; - } -} \ No newline at end of file diff --git a/tests/OSETest/EntityManagerAwareTrait.php b/tests/OSETest/EntityManagerAwareTrait.php deleted file mode 100755 index 40a52745121e027d3dbd62002ac328e21f31753e..0000000000000000000000000000000000000000 --- a/tests/OSETest/EntityManagerAwareTrait.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -namespace OSETest; - -use Doctrine\ORM\EntityManager; - -/** - * Code commun aux classes utilisant le gestionnaire d'entité Doctrine. - * - * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> - */ -trait EntityManagerAwareTrait -{ - /** - * @var EntityManager - */ - protected $em; - - /** - * - * @param string $name - * @return EntityManager - */ - protected function getEntityManager($name = 'orm_default') - { - if (null === $this->em) { - $this->em = Bootstrap::getServiceManager()->get(\Application\Constants::BDD); - } - - return $this->em; - } -} \ No newline at end of file diff --git a/tests/OSETest/VolumeHoraireListeTest.php b/tests/OSETest/VolumeHoraireListeTest.php deleted file mode 100644 index 9e1e1b20710734429ba14a04ee3affec03518e67..0000000000000000000000000000000000000000 --- a/tests/OSETest/VolumeHoraireListeTest.php +++ /dev/null @@ -1,721 +0,0 @@ -<?php - -namespace OSETest; - -use Service\Entity\Db\EtatVolumeHoraire; -use Application\Entity\Db\MotifNonPaiement; -use Application\Entity\Db\Periode; -use Enseignement\Entity\Db\Service; -use Application\Entity\Db\TypeIntervention; -use Service\Entity\Db\TypeVolumeHoraire; -use Enseignement\Entity\Db\VolumeHoraire; -use Enseignement\Entity\VolumeHoraireListe; -use Application\Service\Traits\MotifNonPaiementServiceAwareTrait; -use Application\Service\Traits\PeriodeServiceAwareTrait; -use Enseignement\Service\ServiceServiceAwareTrait; -use Application\Service\Traits\SourceServiceAwareTrait; -use Application\Service\Traits\TypeInterventionServiceAwareTrait; -use Service\Service\TypeVolumeHoraireServiceAwareTrait; -use DoctrineORMModule\Proxy\__CG__\UnicaenImport\Entity\Db\Source; - -class VolumeHoraireListeTest -{ - use MotifNonPaiementServiceAwareTrait; - use TypeVolumeHoraireServiceAwareTrait; - use PeriodeServiceAwareTrait; - use TypeInterventionServiceAwareTrait; - use SourceServiceAwareTrait; - use ServiceServiceAwareTrait; - - const DT_FORMAT = 'd/m/Y à H:i'; - - /** - * @var Service - */ - private $service; - - /** - * @var array - */ - private $scenario; - - /** - * @var TypeVolumeHoraire - */ - private $typeVolumeHoraire; - - /** - * @var Periode - */ - private $periode; - - /** - * @var TypeIntervention - */ - private $typeIntervention; - - /** - * @var VolumeHoraireListe - */ - private $volumeHoraireListe; - - /** - * @var - */ - private $dumping = false; - - - - /** - * @return Service - */ - public function getService(): Service - { - return $this->service; - } - - - - /** - * @param Service $service - * - * @return VolumeHoraireListeTest - */ - public function setService(Service $service): VolumeHoraireListeTest - { - $this->service = $service; - - return $this; - } - - - - /** - * @return TypeVolumeHoraire - */ - public function getTypeVolumeHoraire(): TypeVolumeHoraire - { - if (!$this->typeVolumeHoraire) { - $this->typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getPrevu(); - } - - return $this->typeVolumeHoraire; - } - - - - /** - * @return Periode - */ - public function getPeriode(): Periode - { - if (!$this->periode) { - $this->periode = $this->getServicePeriode()->getSemestre1(); - } - - return $this->periode; - } - - - - /** - * @return TypeIntervention - */ - public function getTypeIntervention(): TypeIntervention - { - if (!$this->typeIntervention) { - $this->typeIntervention = $this->getServiceTypeIntervention()->getByCode('CM'); - } - - return $this->typeIntervention; - } - - - - /** - * @return VolumeHoraireListe - */ - public function getVolumeHoraireListe(): VolumeHoraireListe - { - return $this->volumeHoraireListe; - } - - - - /** - * @return float - */ - public function getHeures(): float - { - return array_sum($this->heuresAttendues); - } - - - - /** - * @param array|float $vhData - * @param integer $id - * - * @return VolumeHoraire - */ - protected function dataToVolumeHoraire($vhData, $id) - { - $volumeHoraire = new VolumeHoraire(); - $volumeHoraire->setId($id); - - if (is_array($vhData)) { - if (isset($vhData['horaireDebut']) && $vhData['horaireDebut']) { - $volumeHoraire->setHoraireDebut(\DateTime::createFromFormat(self::DT_FORMAT, $vhData['horaireDebut'])); - } - if (isset($vhData['motifNonPaiement']) && $vhData['motifNonPaiement']) { - if (is_int($vhData['motifNonPaiement'])) { - $motifNonPaiement = $this->getServiceMotifNonPaiement()->get($vhData['motifNonPaiement']); - } else { - $motifNonPaiement = $this->getServiceMotifNonPaiement()->getRepo()->findOneBy(['libelleCourt' => $vhData['motifNonPaiement']]); - } - $volumeHoraire->setMotifNonPaiement($motifNonPaiement); - } - if (isset($vhData['histoCreation']) && $vhData['HistoCreation']) { - $volumeHoraire->setHistoCreation(\DateTime::createFromFormat(self::DT_FORMAT, $vhData['HistoCreation'])); - } - if (isset($vhData['heures'])) { - $volumeHoraire->setHeures((float)$vhData['heures']); - } - if (isset($vhData['valide'])) { - $volumeHoraire->setAutoValidation($vhData['valide']); - } - if (isset($vhData['source'])) { - if (is_int($vhData['source'])) { - $source = $this->getServiceSource()->get($vhData['source']); - } else { - $source = $this->getServiceSource()->getByCode($vhData['source']); - } - $volumeHoraire->setSource($source); - } - if (isset($vhData['removed'])) { - $volumeHoraire->setRemove($vhData['removed']); - } - } else { - $volumeHoraire->setHeures((float)$vhData); - } - - return $volumeHoraire; - } - - - - private function normalizedData($vhData, $autoDeleteDefaults = false) - { - $nd = [ - 'horaireDebut' => null, - 'motifNonPaiement' => null, - 'heures' => null, - 'removed' => null, - 'valide' => null, - 'source' => null, - ]; - - if (is_array($vhData)) { - if (isset($vhData['horaireDebut'])) { - $nd['horaireDebut'] = $vhData['horaireDebut']; - } - if (isset($vhData['motifNonPaiement'])) { - if (is_int($vhData['motifNonPaiement'])) { - $vhData['motifNonPaiement'] = $this->getServiceMotifNonPaiement()->get($vhData['motifNonPaiement'])->getLibelleCourt(); - } - $nd['motifNonPaiement'] = $vhData['motifNonPaiement']; - } - if (isset($vhData['heures'])) { - $nd['heures'] = (float)$vhData['heures']; - } - if (isset($vhData['removed'])) { - $nd['removed'] = (bool)$vhData['removed']; - } - if (isset($vhData['valide'])) { - $nd['valide'] = (bool)$vhData['valide']; - } - if (isset($vhData['source'])) { - $nd['source'] = is_int($vhData['source']) ? $this->getServiceSource()->get($vhData['source'])->getLibelle() : $vhData['source']; - } - } elseif ($vhData instanceof VolumeHoraire) { - if ($vhData->getHoraireDebut()) { - $nd['horaireDebut'] = $vhData->getHoraireDebut()->format(self::DT_FORMAT); - } - if ($vhData->getMotifNonPaiement()) { - $nd['motifNonPaiement'] = $vhData->getMotifNonPaiement()->getLibelleCourt(); - } - $nd['heures'] = $vhData->getHeures(); - $nd['removed'] = $vhData->getRemove() || (!$vhData->estNonHistorise()); - $nd['valide'] = $vhData->isValide(); - $nd['source'] = $vhData->getSource() ? $vhData->getSource()->getLibelle() : null; - } elseif ($vhData) { - $nd['heures'] = (float)$vhData; - } - - if ($autoDeleteDefaults) { - if ($nd['horaireDebut'] === null) unset($nd['horaireDebut']); - if ($nd['motifNonPaiement'] === null) unset($nd['motifNonPaiement']); - if ($nd['heures'] === null) unset($nd['heures']); - if ($nd['removed'] === null) unset($nd['removed']); - if ($nd['removed'] === false) unset($nd['removed']); - if ($nd['valide'] === null) unset($nd['valide']); - if ($nd['valide'] === false) unset($nd['valide']); - if ($nd['source'] === null) unset($nd['source']); - if ($nd['source'] === 'OSE') unset($nd['source']); - } - - return $nd; - } - - - - protected function addVolumeHoraire(VolumeHoraire $volumeHoraire) - { - if (!$volumeHoraire->getId() && $volumeHoraire->getId() !== 0) { - throw new \Exception('Un ID doit être fourni pour chaque volume horaire'); - } - if (!$volumeHoraire->getTypeIntervention()) { - $volumeHoraire->setTypeIntervention($this->getTypeIntervention()); - } - if (!$volumeHoraire->getPeriode()) { - $volumeHoraire->setPeriode($this->getPeriode()); - } - if (!$volumeHoraire->getTypeVolumeHoraire()) { - $volumeHoraire->setTypeVolumeHoraire($this->getTypeVolumeHoraire()); - } - $this->service->addVolumeHoraire($volumeHoraire); - $volumeHoraire->setService($this->service); - - return $this; - } - - - - /** - * @return array|null - */ - public function getScenario() - { - return $this->scenario; - } - - - - /** - * @param array $scenario - * - * @return VolumeHoraireListeTest - */ - public function setScenario(array $scenario): VolumeHoraireListeTest - { - $this->scenario = $scenario; - $this->applyScenario($scenario); - - return $this; - } - - - - public function dumpBegin(VolumeHoraireListe $volumeHoraireListe): VolumeHoraireListeTest - { - $this->dumping = $this->createScenarioFromVolumeHoraireListe($volumeHoraireListe); - - return $this; - } - - - - public function dumpAction(...$args): VolumeHoraireListeTest - { - foreach ($args as $i => $arg) { - switch (true) { - case $arg instanceof \DateTime: - $args[$i] = $arg->format(self::DT_FORMAT); - break; - case $arg instanceof TypeIntervention: - case $arg instanceof Periode: - case $arg instanceof Source: - case $arg instanceof MotifNonPaiement: - $args[$i] = $arg->getCode(); - break; - } - } - - if ($this->dumping !== false) { - $this->dumping['actions'][] = $args; - } - - return $this; - } - - - - public function dumping(): bool - { - return $this->dumping !== false; - } - - - - /** - * @return bool|array - */ - public function dumpEnd() - { - $dumping = $this->dumping; - $this->dumping = false; - - return $dumping; - } - - - - public function dumpEndToFile($filename = null) - { - if (null === $filename) { - $filename = getcwd() . '/cache/vhl-' . uniqid(); - } - - file_put_contents($filename, var_export($this->dumpEnd(), true)); - } - - - - public function createScenarioFromVolumeHoraireListe(VolumeHoraireListe $volumeHoraireListe) - { - $volumesHoraires = []; - /** @var VolumeHoraire[] $vhs */ - $vhs = $volumeHoraireListe->getService()->getVolumeHoraire()->toArray(); - foreach ($vhs as $volumeHoraire) { - if ( - $volumeHoraire->getTypeVolumeHoraire() == $volumeHoraireListe->getTypeVolumeHoraire() - && $volumeHoraire->estNonHistorise() - && $volumeHoraire->getTypeIntervention() == $volumeHoraireListe->getTypeIntervention() - && $volumeHoraire->getPeriode() == $volumeHoraireListe->getPeriode() - ) { - $volumesHoraires[$volumeHoraire->getId()] = $this->normalizedData($volumeHoraire, true); - } - } - $scenario = [ - 'input' => $volumesHoraires, - 'output' => [], - 'actions' => [], - ]; - - return $scenario; - } - - - - public function createScenarioFromService($serviceId, $typeVolumeHoraireCode, $periodeCode, $typeInterventionCode) - { - $service = $this->getServiceService()->get($serviceId); - $typeVolumeHoraire = $this->getServiceTypeVolumeHoraire()->getByCode($typeVolumeHoraireCode); - $periode = $this->getServicePeriode()->getByCode($periodeCode); - $typeIntervention = $this->getServiceTypeIntervention()->getByCode($typeInterventionCode); - - $vhl = new VolumeHoraireListe($service); - $vhl->setTypeVolumeHoraire($typeVolumeHoraire); - $vhl->setPeriode($periode); - $vhl->setTypeIntervention($typeIntervention); - - return $this->createScenarioFromVolumeHoraireListe($vhl); - } - - - - private function applyScenario(array $scenario) - { - $this->service = new Service; - if (isset($scenario['input'])) { - if (is_array($scenario['input'])) { - foreach ($scenario['input'] as $id => $vhData) { - $volumeHoraire = $this->dataToVolumeHoraire($vhData, $id); - $this->addVolumeHoraire($volumeHoraire); - } - } elseif ($scenario['input'] instanceof VolumeHoraire) { - $this->addVolumeHoraire($scenario['input']); - } - } - } - - - - public function calc(array $scenario = null) - { - if ($scenario) { - $this->setScenario($scenario); - } - - if (!$this->scenario) { - throw new \Exception('Scénario non fourni'); - } - - $this->volumeHoraireListe = new VolumeHoraireListe($this->service); - $this->volumeHoraireListe->setTypeVolumeHoraire($this->getTypeVolumeHoraire()); - $this->volumeHoraireListe->setPeriode($this->getPeriode()); - $this->volumeHoraireListe->setTypeIntervention($this->getTypeIntervention()); - - if (isset($this->scenario['actions']) && is_array($this->scenario['actions'])) { - foreach ($this->scenario['actions'] as $action) { - $method = $action[0]; - unset($action[0]); - $args = array_values($action); - $this->callVhlMethod($method, $args); - } - } - - /* on Ajoute des ID aux nouveaux volumes horaires ! */ - /** @var VolumeHoraire[] $vhs */ - $vhs = $this->service->getVolumeHoraire(); - $nid = 1; - foreach ($vhs as $volumeHoraire) { - if (!$volumeHoraire->getId()) { - $volumeHoraire->setId('n' . $nid); - $nid++; - } - } - - return $this; - } - - - - private function callVhlMethod($method, array $args) - { - $formats = [ - 'setMotifNonPaiement' => [MotifNonPaiement::class], - 'moveHeuresFromAncienMotifNonPaiement' => [null, MotifNonPaiement::class], - 'changeAll' => [\DateTime::class, \DateTime::class, TypeIntervention::class, Periode::class, MotifNonPaiement::class], - 'setTypeIntervention' => [TypeIntervention::class], - 'setPeriode' => [Periode::class], - 'setSource' => [Source::class], - 'setHoraireDebut' => [\DateTime::class], - 'setHoraireFin' => [\DateTime::class], - ]; - - if (isset($formats[$method])) { - foreach ($args as $i => $arg) { - $args[$i] = $this->argToObject($arg, $formats[$method][$i]); - } - } - - call_user_func_array([$this->volumeHoraireListe, $method], $args); - } - - - - private function argToObject($arg, $type) - { - switch ($type) { - case TypeIntervention::class: - if (is_int($arg)) { - return $this->getServiceTypeIntervention()->get($arg); - } elseif (is_string($arg)) { - return $this->getServiceTypeIntervention()->getByCode($arg); - } - case Periode::class: - if (is_int($arg)) { - return $this->getServicePeriode()->get($arg); - } elseif (is_string($arg)) { - return $this->getServicePeriode()->getByCode($arg); - } - case Source::class: - if (is_int($arg)) { - return $this->getServiceSource()->get($arg); - } elseif (is_string($arg)) { - return $this->getServiceSource()->getByCode($arg); - } - case \DateTime::class: - if (is_int($arg)) { - $dateTime = new \DateTime(); - $dateTime->setTimestamp($arg); - - return $dateTime; - } elseif (is_string($arg)) { - return \DateTime::createFromFormat(self::DT_FORMAT, $arg); - } - case MotifNonPaiement::class: - if (is_int($arg)) { - return $this->getServiceMotifNonPaiement()->get($arg); - } elseif (is_string($arg)) { - return $this->getServiceMotifNonPaiement()->getRepo()->findOneBy(['libelleCourt' => $arg]); - } - } - - return $arg; - } - - - - private function objectToArg($data) - { - switch (true) { - case $data instanceof \DateTime: - return $data->format(self::DT_FORMAT); - - case $data instanceof TypeIntervention: - case $data instanceof Periode: - case $data instanceof Source: - return $data->getCode(); - - case $data instanceof MotifNonPaiement: - return $data->getLibelleCourt(); - } - - return $data; - } - - - - public function getResultArray() - { - $ids = []; - - /* Recherche des IDS */ - if (isset($this->scenario['input']) && is_array($this->scenario['input'])) { - $ids = array_keys($this->scenario['input']); - } - if (isset($this->scenario['output']) && is_array($this->scenario['output'])) { - foreach ($this->scenario['output'] as $id => $null) { - if (!in_array($id, $ids)) { - $ids[] = $id; - } - } - } - /** @var VolumeHoraire[] $vhs */ - $vhs = $this->service->getVolumeHoraire(); - foreach ($vhs as $volumeHoraire) { - if (!in_array($volumeHoraire->getId(), $ids)) { - $ids[] = $volumeHoraire->getId(); - } - } - - - /* Confection du tableau de sortie */ - $res = []; - foreach ($ids as $id) { - $input = $this->normalizedData(isset($this->scenario['input'][$id]) ? $this->scenario['input'][$id] : null); - $output = $this->normalizedData(isset($this->scenario['output'][$id]) ? $this->scenario['output'][$id] : null); - $calc = $this->normalizedData(null); - - foreach ($input as $k => $v) { - if (null === $output[$k]) { - $output[$k] = $v; - } - } - - foreach ($vhs as $vh) { - if ($vh->getId() == $id) { - $calc = $this->normalizedData($vh); - } - } - - $res[$id] = compact('input', 'output', 'calc'); - } - - return $res; - } - - - - public function displayResult() - { - $r = $this->getResultArray(); - - $heuresInput = 0; - $heuresOutput = 0; - $heuresCalc = 0; - - foreach ($r as $vhData) { - $heuresInput += $vhData['input']['removed'] ? 0 : (float)$vhData['input']['heures']; - $heuresOutput += $vhData['output']['removed'] ? 0 : (float)$vhData['output']['heures']; - $heuresCalc += $vhData['calc']['removed'] ? 0 : (float)$vhData['calc']['heures']; - } - - ?> - <h3>Heures : (Sources=<?= $heuresInput ?>, Attendues=<?= $heuresOutput ?>, Calculées=<?= $heuresCalc ?>)</h3> - <?php foreach ($this->scenario['actions'] as $action): - foreach ($action as $ak => $av) { - if (false === $av) $action[$ak] = '<i>false</i>'; - if (null === $av) $action[$ak] = '<i>null</i>'; - if (true === $av) $action[$ak] = '<i>true</i>'; - } - ?> - <div> - <b><?= $action[0] ?></b> - <span style="color:gray">(</span><?php unset($action[0]); - echo implode('<span style="color:gray">, </span>', $action) ?><span style="color:gray">);</span> - </div> - <?php endforeach; ?> - <table class="table table-bordered table-sm"> - <thead> - <tr> - <th>Id</th> - <th> </th> - <th>Horaire début</th> - <th>Non paiement</th> - <th>Validé</th> - <th>Source</th> - <th>Heures</th> - <th>Supprimé</th> - </tr> - </thead> - <tbody> - <?php foreach ($r as $id => $vhData): ?> - <tr> - <th><?= $id ?></th> - <th>Source<br/>Attendu<br/>Calculé</th> - <?= $this->displayCell($vhData, 'horaireDebut') ?> - <?= $this->displayCell($vhData, 'motifNonPaiement') ?> - <?= $this->displayCell($vhData, 'valide') ?> - <?= $this->displayCell($vhData, 'source') ?> - <?= $this->displayCell($vhData, 'heures') ?> - <?= $this->displayCell($vhData, 'removed') ?> - </tr> - <?php endforeach; ?> - </tbody> - </table> - <?php - } - - - - private function displayCell(array $vhData, $column) - { - $input = $vhData['input'][$column]; - $output = $vhData['output'][$column]; - $calc = $vhData['calc'][$column]; - - $style = ''; - if ($output != $calc) { - $style = ' style="background-color:#FFD3C1"'; - } elseif ($output != $input) { - $style = ' style="background-color:#CAFFD1"'; - } - - return '<td' . $style . '>' - . $this->formatDisplayCell($input, $column) . '<br />' - . $this->formatDisplayCell($output, $column) . '<br />' - . $this->formatDisplayCell($calc, $column) . '</td>'; - } - - - - private function formatDisplayCell($data, $column) - { - switch ($column) { - case 'removed': - return $data ? 'Supprimé' : ''; - break; - case 'valide': - return $data ? 'Validé' : ''; - break; - case 'heures': - return (float)$data; - break; - } - - return $data; - } -} \ No newline at end of file diff --git a/tests/config/application.config.php b/tests/config/application.config.php deleted file mode 100755 index b6d176169830f5635f5f2d3440ff4fdd8853c669..0000000000000000000000000000000000000000 --- a/tests/config/application.config.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - -$env = getenv('APP_ENV') ?: 'prod'; - -$modules = [ - 'ZfcBase', 'DoctrineModule', 'DoctrineORMModule', 'ZfcUser', 'ZfcUserDoctrineORM', 'BjyAuthorize', - 'UnicaenApp', - 'UnicaenAuth', - 'UnicaenLdap', - 'Common', - 'Import', - 'Application' -]; - -if ($env == 'dev') { - if ( 'dig-40' == getenv('HTTP_HOST')){ - $modules[] = 'Test'; - } -} - -return [ - 'modules' => $modules, - 'module_listener_options' => [ - 'config_glob_paths' => [ - 'config/autoload/{,*.}{global,local}.php', - ], - 'module_paths' => [ - './module', - './vendor', - ], - ], -]; diff --git a/tests/config/autoload/global.php b/tests/config/autoload/global.php deleted file mode 100755 index 823bb91afcf995dc469bd5c1c29e61109091ba7b..0000000000000000000000000000000000000000 --- a/tests/config/autoload/global.php +++ /dev/null @@ -1,6 +0,0 @@ -<?php -return [ - 'translator' => [ - 'locale' => 'fr_FR', - ], -]; diff --git a/tests/config/autoload/local.php.dist b/tests/config/autoload/local.php.dist deleted file mode 100755 index 594b84551dc991880acc4b127b3fa105739d4c5e..0000000000000000000000000000000000000000 --- a/tests/config/autoload/local.php.dist +++ /dev/null @@ -1,7 +0,0 @@ -<?php -return [ - 'view_manager' => [ - 'display_not_found_reason' => false, - 'display_exceptions' => false, - ], -]; diff --git a/tests/config/autoload/unicaen-app.global.php b/tests/config/autoload/unicaen-app.global.php deleted file mode 100755 index ecc6b90b8ab779043f97a25ef44c088050468b2e..0000000000000000000000000000000000000000 --- a/tests/config/autoload/unicaen-app.global.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php -/** - * UnicaenApp Global Configuration - * - * If you have a ./config/autoload/ directory set up for your project, - * drop this config file in it and change the values as you wish. - */ -$settings = [ - /** - * Informations concernant cette application - */ - 'app_infos' => [ - 'nom' => "OSE", - 'desc' => "Organisation des Services d'Enseignement", - 'version' => "1.2.2", - 'date' => "30/09/2014", - 'contact' => ['mail' => "Contactez votre composante.", /*'tel' => "01 02 03 04 05"*/], - 'mentionsLegales' => "http://www.unicaen.fr/outils-portail-institutionnel/mentions-legales/", - 'informatiqueEtLibertes' => "http://www.unicaen.fr/outils-portail-institutionnel/informatique-et-libertes/", - ], -]; - -/** - * You do not need to edit below this line - */ -return [ - 'unicaen-app' => $settings, -]; \ No newline at end of file diff --git a/tests/config/autoload/unicaen-auth.global.php b/tests/config/autoload/unicaen-auth.global.php deleted file mode 100755 index a615ba42222da20e4c25ffabb3f955d14f6946bb..0000000000000000000000000000000000000000 --- a/tests/config/autoload/unicaen-auth.global.php +++ /dev/null @@ -1,30 +0,0 @@ -<?php -/** - * UnicaenAuth Global Configuration - * - * If you have a ./config/autoload/ directory set up for your project, you can - * drop this config file in it and change the values as you wish. - */ -$settings = [ - /** - * Flag indiquant si l'utilisateur authenitifié avec succès via l'annuaire LDAP doit - * être enregistré/mis à jour dans la table des utilisateurs de l'appli. - */ - 'save_ldap_user_in_database' => true, - /** - * Enable registration - * Allows users to register through the website. - * Accepted values: boolean true or false - */ - 'enable_registration' => false, -]; - -/** - * You do not need to edit below this line - */ -return [ - 'unicaen-auth' => $settings, - 'zfcuser' => [ - $k='enable_registration' => isset($settings[$k]) ? $settings[$k] : false, - ], -]; \ No newline at end of file diff --git a/tests/config/autoload/unicaen-ldap.global.php b/tests/config/autoload/unicaen-ldap.global.php deleted file mode 100755 index 1620188226b078eb187759350fe87f6342b24594..0000000000000000000000000000000000000000 --- a/tests/config/autoload/unicaen-ldap.global.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php - -$settings = [ -]; - -return [ - 'unicaen-ldap' => $settings -]; diff --git a/tests/phpunit.xml b/tests/phpunit.xml deleted file mode 100755 index 38468e60b522c58df101aac8c88147be59f0957a..0000000000000000000000000000000000000000 --- a/tests/phpunit.xml +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<phpunit bootstrap="./Bootstrap.php" colors="true"> - <testsuites> - <testsuite name="entity"> - <directory>./OSETest/Entity</directory> - </testsuite> - <testsuite name="rule"> - <directory>./OSETest/Rule</directory> - </testsuite> - </testsuites> - - <logging> - <!--<log type="junit" target="/tmp/phpunit/logs/junit.xml" />--> - <!--<log type="coverage-clover" target="/tmp/phpunit/logs/clover.xml" />--> - <!--<log type="coverage-html" target="/tmp/phpunit/coverage" />--> - </logging> - - <filter> - <whitelist processUncoveredFilesFromWhitelist="true"> - <directory suffix=".php">../src</directory> - </whitelist> - </filter> - - <groups> - - </groups> - <!-- - <groups> - <exclude> - <group>disable</group> - <group>integration</group> - <group>integration-sqlserver</group> - </exclude> - </groups> - --> -</phpunit> \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..221094896cb5c864ff6aaec4e9065e50ccd32b9e --- /dev/null +++ b/vite.config.js @@ -0,0 +1,55 @@ +import {defineConfig, splitVendorChunkPlugin} from 'vite' +import vue from '@vitejs/plugin-vue' +import liveReload from 'vite-plugin-live-reload' +import path from 'path' + +/* Directives de configuration */ + +const config = { + root: 'front', + entry: 'front/main.js', + outDir: 'public/dist', + port: 5133, + liveReloadPaths: [ + 'public/js/**/*.js', + 'public/css/**/*.css' + ] +} + + +/* Configuration de Vite */ + +// absolute paths for hot-loading +let liveReloadPaths = []; +for (p in config.liveReloadPaths) { + liveReloadPaths[p] = path.resolve(__dirname, config.liveReloadPaths[p]); +} + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + liveReload(liveReloadPaths), + splitVendorChunkPlugin() + ], + root: config.root, + build: { + // output dir for production build + outDir: path.resolve(__dirname, config.outDir), + emptyOutDir: true, + manifest: true, + rollupOptions: { + input: path.resolve(__dirname, config.entry), + } + }, + server: { + strictPort: true, + port: config.port + }, + resolve: { + alias: { + vue: 'vue/dist/vue.esm-bundler.js', + '@': path.resolve(__dirname, config.root) + } + } +}); \ No newline at end of file