Loading composer.json +1 −1 Changes for composer.json: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ "unicaen/bddadmin" : "1.5.0", "unicaen/signature" : "1.0.6", "connecteur-ose/actul" : "dev-master", "connecteur-ose/pegase" : "dev-master" "connecteur-ose/pegase" : "dev-pegase-webservice" }, "autoload" : { "psr-4": { Loading composer.lock +23 −16 Changes for composer.lock: 23 added lines, 16 removed lines. Original line number Diff line number Diff line Loading @@ -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": "e658865d19f567c81b0d7c9a6a1cad0a", "content-hash": "99a683296ca9417e5fe3f3a3a0c6cf29", "packages": [ { "name": "apereo/phpcas", Loading Loading @@ -300,20 +300,27 @@ }, { "name": "connecteur-ose/pegase", "version": "dev-master", "version": "dev-pegase-webservice", "source": { "type": "git", "url": "https://git.unicaen.fr/open-source/connecteur-ose/pegase.git", "reference": "720f974cbb6f89aad15264e6468674039803590c" "reference": "678bb5f827ad4e4ba8cf7ff5601f1e5298806907" }, "require": { "guzzlehttp/guzzle": "^7.3", "guzzlehttp/psr7": "^1.7 || ^2.0", "php": "^8.1", "unicaen/bddadmin": "^1" }, "type": "library", "autoload": { "psr-4": { "Connecteur\\Pegase\\": "src/" "Connecteur\\Pegase\\": "src/", "PegaseOdf\\": "src/pegase-odf/" } }, "description": "Connecteur Pégase pour OSE", "time": "2026-03-25T10:26:44+00:00" "time": "2026-06-15T09:33:58+00:00" }, { "name": "datatables.net/datatables.net", Loading Loading @@ -4301,32 +4308,32 @@ }, { "name": "laminas/laminas-mvc-plugin-prg", "version": "1.8.0", "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc-plugin-prg.git", "reference": "b51e7ba892e52c6a80ce8c7dc7f8c429e3937516" "reference": "4c2062ad9f19d6c2a4430357300d42ebc0485bd3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-prg/zipball/b51e7ba892e52c6a80ce8c7dc7f8c429e3937516", "reference": "b51e7ba892e52c6a80ce8c7dc7f8c429e3937516", "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-prg/zipball/4c2062ad9f19d6c2a4430357300d42ebc0485bd3", "reference": "4c2062ad9f19d6c2a4430357300d42ebc0485bd3", "shasum": "" }, "require": { "laminas/laminas-mvc": "^3.3.3", "laminas/laminas-session": "^2.12.1", "laminas/laminas-stdlib": "^3.10.1", "php": "~8.1.0 || ~8.2.0 || ~8.3.0" "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "conflict": { "zendframework/zend-mvc-plugin-prg": "*" }, "require-dev": { "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-coding-standard": "~3.1.0", "phpunit/phpunit": "^10.4", "psalm/plugin-phpunit": "^0.18.0", "vimeo/psalm": "^5.16" "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^6.16" }, "type": "library", "extra": { Loading Loading @@ -4359,11 +4366,11 @@ }, "funding": [ { "url": "https://funding.communitybridge.org/projects/laminas-project", "type": "community_bridge" "url": "https://crowdfunding.linuxfoundation.org/initiatives/laminas-project", "type": "custom" } ], "time": "2023-12-01T06:06:12+00:00" "time": "2026-06-23T12:20:39+00:00" }, { "name": "laminas/laminas-navigation", Loading data/plafonds-sql/15.sql +11 −13 Changes for data/plafonds-sql/15.sql: 11 added lines, 13 removed lines. Original line number Diff line number Diff line SELECT i.annee_id annee_id, vhr.type_volume_horaire_id type_volume_horaire_id, i.id intervenant_id, s.id structure_id, SUM(vhr.heures) heures i.annee_id, fr.type_volume_horaire_id type_volume_horaire_id, sr.structure_id structure_id, sum(frvr.total) heures FROM service_referentiel sr JOIN intervenant i ON i.id = sr.intervenant_id JOIN structure s ON s.id = sr.structure_id JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL WHERE sr.histo_destruction IS NULL GROUP BY i.annee_id, vhr.type_volume_horaire_id, i.id, s.id No newline at end of file formule_resultat_volume_horaire frvr JOIN formule_resultat_intervenant fr ON fr.id = frvr.formule_resultat_intervenant_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 JOIN intervenant i ON i.id = fr.intervenant_id JOIN etat_volume_horaire evh ON evh.code = 'saisi' AND evh.id = fr.etat_volume_horaire_id GROUP BY i.annee_id, fr.type_volume_horaire_id, sr.structure_id front/Formule/Test/Test.vue +31 −25 Changes for front/Formule/Test/Test.vue: 31 added lines, 25 removed lines. Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ <tr> <th>Formule</th> <td class="saisie"><select v-model="intervenant.formule" class="dinput"> <option v-for="formule in formules" :value="formule.id">{{ formule.libelle }}</option> <option v-for="formule in sortedFormules" :value="formule.id">{{ formule.libelle }}</option> </select></td> </tr> <tr> Loading Loading @@ -628,6 +628,7 @@ export default { return { indexUrl: unicaenVue.url('formule-test'), dataUrl: unicaenVue.url('formule-test/data'), currentId: this.id ? this.id : 0, tauxAutre1Visibility: true, tauxAutre2Visibility: false, tauxAutre3Visibility: false, Loading Loading @@ -703,6 +704,10 @@ export default { }, }, computed: { sortedFormules() { return Object.values(this.formules).sort((a, b) => a.libelle.localeCompare(b.libelle, 'fr', {sensitivity: 'base'})); }, filteredTypesIntervention() { let ti = Object.values(this.typesIntervention).filter(value => value); Loading @@ -722,57 +727,54 @@ export default { } }, methods: { charger() testUrl(route) { return unicaenVue.url(route + "/:id", {id: this.currentId}); }, updateData(response) { unicaenVue.axios.get( unicaenVue.url("formule-test/saisir-data/:id", {id: this.id ? this.id : this.intervenant.id ? this.intervenant.id : 0}) ).then(response => { this.intervenant = this.dropTauxNonUtilises(response.data.intervenant); this.volumesHoraires = response.data.volumesHoraires; this.currentId = this.intervenant.id ? this.intervenant.id : this.currentId; if (response.data.debug) { this.debug = response.data.debug; } else { this.debug = {}; } this.addVolumeHoraire(); this.updateStructures(); }, charger() { unicaenVue.axios.get( this.testUrl("formule-test/saisir-data") ).then(response => { this.updateData(response); }); }, enregistrer() { unicaenVue.axios.post( unicaenVue.url("formule-test/enregistrer/:id", {id: this.id ? this.id : this.intervenant.id ? this.intervenant.id : 0}), this.testUrl("formule-test/enregistrer"), { intervenant: this.intervenant, volumesHoraires: this.volumesHoraires, } ).then(response => { this.intervenant = this.dropTauxNonUtilises(response.data.intervenant); this.volumesHoraires = response.data.volumesHoraires; if (response.data.debug) { this.debug = response.data.debug; } else { this.debug = {}; } this.addVolumeHoraire(); this.updateStructures(); this.updateData(response); }); }, calculer() { unicaenVue.axios.post( unicaenVue.url("formule-test/enregistrer/:id", {id: this.id ? this.id : this.intervenant.id ? this.intervenant.id : 0}), this.testUrl("formule-test/enregistrer"), { intervenant: this.intervenant, volumesHoraires: this.volumesHoraires, simpleCalcul: true } ).then(response => { this.intervenant = this.dropTauxNonUtilises(response.data.intervenant); this.volumesHoraires = response.data.volumesHoraires; if (response.data.debug) { this.debug = response.data.debug; } else { this.debug = {}; } this.addVolumeHoraire(); this.updateStructures(); this.updateData(response); }); }, exporter: function () { Loading Loading @@ -861,6 +863,10 @@ export default { const jsonContent = JSON.parse(e.target.result); this.intervenant = jsonContent.intervenant; this.volumesHoraires = jsonContent.volumesHoraires; delete this.intervenant.id; this.volumesHoraires.forEach(volumeHoraire => { delete volumeHoraire.id; }); this.updateStructures(); } catch (error) { console.error("Erreur lors de l'analyse du contenu JSON :", error); Loading module/Contrat/src/Service/ContratService.php +2 −1 Changes for module/Contrat/src/Service/ContratService.php: 2 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -198,7 +198,6 @@ class ContratService extends AbstractEntityService $signatureFlowDatas['label'] .= " - " . $intervenant->__toString(); $recipients = []; //On regarde si on a le paramétrage hook_recepient dans la config //pour forcer l'envoie toujours à la même personne $recipientsHook = []; Loading @@ -217,6 +216,8 @@ class ContratService extends AbstractEntityService //On doit aller chercher les destinataires pour la signature électronique foreach ($signatureFlowDatas['steps'] as $key => $step) { $recipients = []; //Si l'étape de process concerne un rôle de l'application on va chercher les utilisateurs de ce role. if (in_array($step['recipient_method'], ['by_etablissement', 'by_etablissement_and_intervenant']) && empty($step['recipients'])) { $role = ''; Loading Loading
composer.json +1 −1 Changes for composer.json: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ "unicaen/bddadmin" : "1.5.0", "unicaen/signature" : "1.0.6", "connecteur-ose/actul" : "dev-master", "connecteur-ose/pegase" : "dev-master" "connecteur-ose/pegase" : "dev-pegase-webservice" }, "autoload" : { "psr-4": { Loading
composer.lock +23 −16 Changes for composer.lock: 23 added lines, 16 removed lines. Original line number Diff line number Diff line Loading @@ -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": "e658865d19f567c81b0d7c9a6a1cad0a", "content-hash": "99a683296ca9417e5fe3f3a3a0c6cf29", "packages": [ { "name": "apereo/phpcas", Loading Loading @@ -300,20 +300,27 @@ }, { "name": "connecteur-ose/pegase", "version": "dev-master", "version": "dev-pegase-webservice", "source": { "type": "git", "url": "https://git.unicaen.fr/open-source/connecteur-ose/pegase.git", "reference": "720f974cbb6f89aad15264e6468674039803590c" "reference": "678bb5f827ad4e4ba8cf7ff5601f1e5298806907" }, "require": { "guzzlehttp/guzzle": "^7.3", "guzzlehttp/psr7": "^1.7 || ^2.0", "php": "^8.1", "unicaen/bddadmin": "^1" }, "type": "library", "autoload": { "psr-4": { "Connecteur\\Pegase\\": "src/" "Connecteur\\Pegase\\": "src/", "PegaseOdf\\": "src/pegase-odf/" } }, "description": "Connecteur Pégase pour OSE", "time": "2026-03-25T10:26:44+00:00" "time": "2026-06-15T09:33:58+00:00" }, { "name": "datatables.net/datatables.net", Loading Loading @@ -4301,32 +4308,32 @@ }, { "name": "laminas/laminas-mvc-plugin-prg", "version": "1.8.0", "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc-plugin-prg.git", "reference": "b51e7ba892e52c6a80ce8c7dc7f8c429e3937516" "reference": "4c2062ad9f19d6c2a4430357300d42ebc0485bd3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-prg/zipball/b51e7ba892e52c6a80ce8c7dc7f8c429e3937516", "reference": "b51e7ba892e52c6a80ce8c7dc7f8c429e3937516", "url": "https://api.github.com/repos/laminas/laminas-mvc-plugin-prg/zipball/4c2062ad9f19d6c2a4430357300d42ebc0485bd3", "reference": "4c2062ad9f19d6c2a4430357300d42ebc0485bd3", "shasum": "" }, "require": { "laminas/laminas-mvc": "^3.3.3", "laminas/laminas-session": "^2.12.1", "laminas/laminas-stdlib": "^3.10.1", "php": "~8.1.0 || ~8.2.0 || ~8.3.0" "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "conflict": { "zendframework/zend-mvc-plugin-prg": "*" }, "require-dev": { "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-coding-standard": "~3.1.0", "phpunit/phpunit": "^10.4", "psalm/plugin-phpunit": "^0.18.0", "vimeo/psalm": "^5.16" "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^6.16" }, "type": "library", "extra": { Loading Loading @@ -4359,11 +4366,11 @@ }, "funding": [ { "url": "https://funding.communitybridge.org/projects/laminas-project", "type": "community_bridge" "url": "https://crowdfunding.linuxfoundation.org/initiatives/laminas-project", "type": "custom" } ], "time": "2023-12-01T06:06:12+00:00" "time": "2026-06-23T12:20:39+00:00" }, { "name": "laminas/laminas-navigation", Loading
data/plafonds-sql/15.sql +11 −13 Changes for data/plafonds-sql/15.sql: 11 added lines, 13 removed lines. Original line number Diff line number Diff line SELECT i.annee_id annee_id, vhr.type_volume_horaire_id type_volume_horaire_id, i.id intervenant_id, s.id structure_id, SUM(vhr.heures) heures i.annee_id, fr.type_volume_horaire_id type_volume_horaire_id, sr.structure_id structure_id, sum(frvr.total) heures FROM service_referentiel sr JOIN intervenant i ON i.id = sr.intervenant_id JOIN structure s ON s.id = sr.structure_id JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL WHERE sr.histo_destruction IS NULL GROUP BY i.annee_id, vhr.type_volume_horaire_id, i.id, s.id No newline at end of file formule_resultat_volume_horaire frvr JOIN formule_resultat_intervenant fr ON fr.id = frvr.formule_resultat_intervenant_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 JOIN intervenant i ON i.id = fr.intervenant_id JOIN etat_volume_horaire evh ON evh.code = 'saisi' AND evh.id = fr.etat_volume_horaire_id GROUP BY i.annee_id, fr.type_volume_horaire_id, sr.structure_id
front/Formule/Test/Test.vue +31 −25 Changes for front/Formule/Test/Test.vue: 31 added lines, 25 removed lines. Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ <tr> <th>Formule</th> <td class="saisie"><select v-model="intervenant.formule" class="dinput"> <option v-for="formule in formules" :value="formule.id">{{ formule.libelle }}</option> <option v-for="formule in sortedFormules" :value="formule.id">{{ formule.libelle }}</option> </select></td> </tr> <tr> Loading Loading @@ -628,6 +628,7 @@ export default { return { indexUrl: unicaenVue.url('formule-test'), dataUrl: unicaenVue.url('formule-test/data'), currentId: this.id ? this.id : 0, tauxAutre1Visibility: true, tauxAutre2Visibility: false, tauxAutre3Visibility: false, Loading Loading @@ -703,6 +704,10 @@ export default { }, }, computed: { sortedFormules() { return Object.values(this.formules).sort((a, b) => a.libelle.localeCompare(b.libelle, 'fr', {sensitivity: 'base'})); }, filteredTypesIntervention() { let ti = Object.values(this.typesIntervention).filter(value => value); Loading @@ -722,57 +727,54 @@ export default { } }, methods: { charger() testUrl(route) { return unicaenVue.url(route + "/:id", {id: this.currentId}); }, updateData(response) { unicaenVue.axios.get( unicaenVue.url("formule-test/saisir-data/:id", {id: this.id ? this.id : this.intervenant.id ? this.intervenant.id : 0}) ).then(response => { this.intervenant = this.dropTauxNonUtilises(response.data.intervenant); this.volumesHoraires = response.data.volumesHoraires; this.currentId = this.intervenant.id ? this.intervenant.id : this.currentId; if (response.data.debug) { this.debug = response.data.debug; } else { this.debug = {}; } this.addVolumeHoraire(); this.updateStructures(); }, charger() { unicaenVue.axios.get( this.testUrl("formule-test/saisir-data") ).then(response => { this.updateData(response); }); }, enregistrer() { unicaenVue.axios.post( unicaenVue.url("formule-test/enregistrer/:id", {id: this.id ? this.id : this.intervenant.id ? this.intervenant.id : 0}), this.testUrl("formule-test/enregistrer"), { intervenant: this.intervenant, volumesHoraires: this.volumesHoraires, } ).then(response => { this.intervenant = this.dropTauxNonUtilises(response.data.intervenant); this.volumesHoraires = response.data.volumesHoraires; if (response.data.debug) { this.debug = response.data.debug; } else { this.debug = {}; } this.addVolumeHoraire(); this.updateStructures(); this.updateData(response); }); }, calculer() { unicaenVue.axios.post( unicaenVue.url("formule-test/enregistrer/:id", {id: this.id ? this.id : this.intervenant.id ? this.intervenant.id : 0}), this.testUrl("formule-test/enregistrer"), { intervenant: this.intervenant, volumesHoraires: this.volumesHoraires, simpleCalcul: true } ).then(response => { this.intervenant = this.dropTauxNonUtilises(response.data.intervenant); this.volumesHoraires = response.data.volumesHoraires; if (response.data.debug) { this.debug = response.data.debug; } else { this.debug = {}; } this.addVolumeHoraire(); this.updateStructures(); this.updateData(response); }); }, exporter: function () { Loading Loading @@ -861,6 +863,10 @@ export default { const jsonContent = JSON.parse(e.target.result); this.intervenant = jsonContent.intervenant; this.volumesHoraires = jsonContent.volumesHoraires; delete this.intervenant.id; this.volumesHoraires.forEach(volumeHoraire => { delete volumeHoraire.id; }); this.updateStructures(); } catch (error) { console.error("Erreur lors de l'analyse du contenu JSON :", error); Loading
module/Contrat/src/Service/ContratService.php +2 −1 Changes for module/Contrat/src/Service/ContratService.php: 2 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -198,7 +198,6 @@ class ContratService extends AbstractEntityService $signatureFlowDatas['label'] .= " - " . $intervenant->__toString(); $recipients = []; //On regarde si on a le paramétrage hook_recepient dans la config //pour forcer l'envoie toujours à la même personne $recipientsHook = []; Loading @@ -217,6 +216,8 @@ class ContratService extends AbstractEntityService //On doit aller chercher les destinataires pour la signature électronique foreach ($signatureFlowDatas['steps'] as $key => $step) { $recipients = []; //Si l'étape de process concerne un rôle de l'application on va chercher les utilisateurs de ce role. if (in_array($step['recipient_method'], ['by_etablissement', 'by_etablissement_and_intervenant']) && empty($step['recipients'])) { $role = ''; Loading