Commit c0f8c95d authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Merge remote-tracking branch 'origin/b20' into b20

parents 4c667cda 32f743af
Loading
Loading
Loading
Loading
+27 −8
Original line number Diff line number Diff line
# Version stable

[OSE 19.7](#ose-197--16122022-)
[OSE 20.1](#ose-201--04042023-)


# OSE 21 (à venir)
@@ -8,29 +8,40 @@
## Nouveautés

* Nouvelle notion de mission, permettant de gérer les contrats étudiants
* Taux HETD personnalisables



# OSE 20.1 (à venir)
# OSE 20.1 (04/04/2023)

## Nouveautés

* Les jauges des plafonds affichent maintenant tout le temps les heures restantes
* Ajout de la date de clôture dans la page historique de l'intervenant 
* Possibilité de saisir une modification de service dû avec 0 heure (#49764)

## Améliorations

* Passage à 200 caractères max. pour les libellés longs des structures

## Corrections de bugs

* Les données suplémentaires des indicateurs s'affichent de nouveau correctement
* Correction d'une régression de la V20 sur le module Export Siham
* Suppression d'un message d'erreur sur l'envoi de mail via les indicateurs (#49873)
* Formule Paris 8 : correction d'un problème de code de composante
* Formule Poitiers : (#46805)
* Formule La Réunion : (#24229)
* Formule de Picardie:  (#47224)



# OSE 20 (fin février 2023)
# 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é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 "contrat de travail et avenants" pour laisser la possibilité à l'intervenant de télécharger son contrat en pdf
* 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)
@@ -57,6 +68,7 @@
* 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
@@ -81,6 +93,13 @@ A la **ligne 206** Ajouter le titre de colonne TAG dans le tableau $head :
  
    'tag' => 'Tags',

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)

@@ -160,7 +179,7 @@ A la **ligne 206** Ajouter le titre de colonne TAG dans le tableau $head :

# OSE 19.1 (21/07/2022)

## Nouveautés
## nouveautés

* Formule de calcul de Picardie
* Nouvel état de sortie pour les écarts des heures complémentaires, maintenant personnalisable (#45807)
@@ -186,7 +205,7 @@ A la **ligne 206** Ajouter le titre de colonne TAG dans le tableau $head :
* Ajout d'un paramètre général pour permettre de créer les contrats sans passer par un projet de contrat
* Ajout de date de dernière modification des données dans les indicateurs notifiant d'une validation en attente
* Nouvel état de sortie pour l'extraction des paiements dans le cadre de la pré-liquidation SIHAM
* Ajout d'un bouton de refus de pièce justificative avec envoie d'email à l'intervenant
* Ajout d'un bouton de refus de pièce justificative avec envoi d'email à l'intervenant
* Changement du bouton de cloture de service pour un libellé plus parlant et un style de bouton plus prononcé
* Formules nouvelles ou mises à jour : Rennes 2, Paris Saclay, Guyane, Côte d'Azur, La Réunion, Poitiers, Brest, Rouen
* Possibilité de créer un nouveau test de formule en téléversant une feuille de calcul au format tableur
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
        "unicaen/import"                              : "6.0.0",
        "unicaen/tbl"                                 : "6.0.0",
        "unicaen/open-document"                       : "6.0.0",
        "unicaen/siham"          : "^2.0",
        "unicaen/siham"                               : "2.5",
        "laminas/laminas-cache-storage-adapter-memory": "2.1.x-dev",
        "laminas/laminas-text"                        : "2.10.x-dev"
    },
+171 −123

File changed.

Preview size limit exceeded, changes collapsed.

+17 −17
Original line number Diff line number Diff line
CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS
  decalageLigne NUMERIC DEFAULT 20;

  decalageLigne NUMERIC DEFAULT 19;

  /* Stockage des valeurs intermédiaires */
  TYPE t_cell IS RECORD (
@@ -225,12 +224,12 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- AG=IF([.$H20]="Référentiel";0;IF(AND(MID([.$N20];1;4)="PRIO";MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0))
      -- AG=IF([.$H20]="Référentiel";0;IF(AND(MID([.$N20];1;4)="PRIO";MID([.$A20];1;5)<>"20595");[.$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
          IF COALESCE(SUBSTR(vh.param_1, 1, 4),' ') = 'PRIO' AND COALESCE(SUBSTR(vh.structure_code, 1, 5),' ') <> '20595' THEN
            RETURN vh.heures * cell('AD',l);
          ELSE
            RETURN 0;
@@ -293,9 +292,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- AM=IF(AND([.$H20]="Référentiel";[.$A20]=[.$K$10];MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0)
      -- AM=IF(AND([.$H20]="Référentiel";[.$A20]=[.$K$10];MID([.$A20];1;5)<>"20595");[.$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
        IF vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_univ AND COALESCE(SUBSTR(vh.structure_code, 1, 5),' ') <> '20595' THEN
          RETURN vh.heures * cell('AD',l);
        ELSE
          RETURN 0;
@@ -357,9 +356,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- AS=IF(AND([.$H20]<>"Référentiel";[.$A20]=i_structure_code;MID([.$N20];1;4)<>"PRIO";MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0)
      -- AS=IF(AND([.$H20]<>"Référentiel";[.$A20]=i_structure_code;MID([.$N20];1;4)<>"PRIO";MID([.$A20];1;5)<>"20595");[.$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
        IF vh.volume_horaire_ref_id IS NULL AND vh.structure_is_affectation AND COALESCE(SUBSTR(vh.param_1, 1, 4),' ') <> 'PRIO' AND COALESCE(SUBSTR(vh.structure_code, 1, 5),' ') <> '20595' THEN
          RETURN vh.heures * cell('AD',l);
        ELSE
          RETURN 0;
@@ -421,9 +420,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- AY=IF(AND(AND([.$H20]="Référentiel";[.$A20]=i_structure_code);( MID([.$A20];1;5))<>"15310");[.$M20]*[.$AD20];0)
      -- AY=IF(AND(AND([.$H20]="Référentiel";[.$A20]=i_structure_code);( MID([.$A20];1;5))<>"20595");[.$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
        IF (vh.volume_horaire_ref_id IS NOT NULL AND vh.structure_is_affectation) AND (COALESCE(SUBSTR(vh.structure_code, 1, 5),' ')) <> '20595' THEN
          RETURN vh.heures * cell('AD',l);
        ELSE
          RETURN 0;
@@ -485,9 +484,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- BE=IF(AND([.$H20]<>"Référentiel";[.$A20]<>i_structure_code;MID([.$N20];1;4)<>"PRIO";MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0)
      -- BE=IF(AND([.$H20]<>"Référentiel";[.$A20]<>i_structure_code;MID([.$N20];1;4)<>"PRIO";MID([.$A20];1;5)<>"20595");[.$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
        IF vh.volume_horaire_ref_id IS NULL AND NOT vh.structure_is_affectation AND COALESCE(SUBSTR(vh.param_1, 1, 4),' ') <> 'PRIO' AND COALESCE(SUBSTR(vh.structure_code, 1, 5),' ') <> '20595' THEN
          RETURN vh.heures * cell('AD',l);
        ELSE
          RETURN 0;
@@ -549,9 +548,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- BK=IF(AND([.$H20]="Référentiel";[.$A20]<>i_structure_code;[.$A20]<>[.$K$10];MID([.$A20];1;5)<>"15310");[.$M20]*[.$AD20];0)
      -- BK=IF(AND([.$H20]="Référentiel";[.$A20]<>i_structure_code;[.$A20]<>[.$K$10];MID([.$A20];1;5)<>"20595");[.$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
        IF vh.volume_horaire_ref_id IS NOT NULL AND NOT vh.structure_is_affectation AND NOT vh.structure_is_univ AND COALESCE(SUBSTR(vh.structure_code, 1, 5),' ') <> '20595' THEN
          RETURN vh.heures * cell('AD',l);
        ELSE
          RETURN 0;
@@ -613,9 +612,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS



      -- BQ=IF(MID([.$A20];1;25)="15310";[.$M20]*[.$AE20];0)
      -- BQ=IF(MID([.$A20];1;25)="20595";[.$M20]*[.$AE20];0)
      WHEN 'BQ' THEN
        IF SUBSTR(vh.structure_code, 1, 25) = '15310' THEN
        IF COALESCE(SUBSTR(vh.structure_code, 1, 25),' ') = '20595' THEN
          RETURN vh.heures * cell('AE',l);
        ELSE
          RETURN 0;
@@ -695,7 +694,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PARIS8 AS
      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';
      ordre
    ';
  END;

END FORMULE_PARIS8;
 No newline at end of file
+46 −24
Original line number Diff line number Diff line
@@ -218,10 +218,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AB=IF([.$H20]="Référentiel";[.$AQ20]+[.$BC20]+[.$BQ20];0)
      -- AB=IF([.$H20]="Référentiel";[.$BQ20]+[.$BS20];0)
      WHEN 'AB' THEN
        IF vh.volume_horaire_ref_id IS NOT NULL THEN
          RETURN cell('AQ',l) + cell('BC',l) + cell('BQ',l);
          RETURN cell('BQ',l) + cell('BS',l);
        ELSE
          RETURN 0;
        END IF;
@@ -284,9 +284,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AJ=IF([.AH$17]=0;([.AG20]-[.AI20])/[.$AD20];0)
      -- AJ=IF([.AI20]<[.AG20];([.AG20]-[.AI20])/[.$AD20];0)
      WHEN 'AJ' THEN
        IF cell('AH17') = 0 THEN
        IF cell('AI',l) < cell('AG',l) THEN
          RETURN (cell('AG',l) - cell('AI',l)) / cell('AD',l);
        ELSE
          RETURN 0;
@@ -314,12 +314,18 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AN15=SUM([.AM$1:.AM$1048576])
      WHEN 'AN15' THEN
      -- AN14=SUM([.AM$1:.AM$1048576])
      WHEN 'AN14' THEN
        RETURN calcFnc('somme','AM');



      -- AN15=MIN([.AN14];i_service_du/3)
      WHEN 'AN15' THEN
        RETURN LEAST(cell('AN14'), i.service_du / 3);



      -- AN16=MIN([.AN15];[.AH17])
      WHEN 'AN16' THEN
        RETURN LEAST(cell('AN15'), cell('AH17'));
@@ -332,10 +338,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AN=IF([.AN$15]>0;[.AM20]/[.AN$15];0)
      -- AN=IF([.AN$14]>0;[.AM20]/[.AN$14];0)
      WHEN 'AN' THEN
        IF cell('AN15') > 0 THEN
          RETURN cell('AM',l) / cell('AN15');
        IF cell('AN14') > 0 THEN
          RETURN cell('AM',l) / cell('AN14');
        ELSE
          RETURN 0;
        END IF;
@@ -348,9 +354,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AP=IF([.AN$17]=0;([.AM20]-[.AO20])/[.$AD20];0)
      -- AP=IF([.AO20]<[.AM20];([.AM20]-[.AO20])/[.$AD20];0)
      WHEN 'AP' THEN
        IF cell('AN17') = 0 THEN
        IF cell('AO',l) < cell('AM',l) THEN
          RETURN (cell('AM',l) - cell('AO',l)) / cell('AD',l);
        ELSE
          RETURN 0;
@@ -412,9 +418,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AV=IF([.AT$17]=0;([.AS20]-[.AU20])/[.$AD20];0)
      -- AV=IF([.AU20]<[.AS20];([.AS20]-[.AU20])/[.$AD20];0)
      WHEN 'AV' THEN
        IF cell('AT17') = 0 THEN
        IF cell('AU',l) < cell('AS',l) THEN
          RETURN (cell('AS',l) - cell('AU',l)) / cell('AD',l);
        ELSE
          RETURN 0;
@@ -442,12 +448,18 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AZ15=SUM([.AY$1:.AY$1048576])
      WHEN 'AZ15' THEN
      -- AZ14=SUM([.AY$1:.AY$1048576])
      WHEN 'AZ14' THEN
        RETURN calcFnc('somme','AY');



      -- AZ15=MIN([.AZ14];(i_service_du/3)-[.AN16])
      WHEN 'AZ15' THEN
        RETURN LEAST(cell('AZ14'), (i.service_du / 3) - cell('AN16'));



      -- AZ16=MIN([.AZ15];[.AT17])
      WHEN 'AZ16' THEN
        RETURN LEAST(cell('AZ15'), cell('AT17'));
@@ -460,10 +472,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- AZ=IF([.AZ$15]>0;[.AY20]/[.AZ$15];0)
      -- AZ=IF([.AZ$14]>0;[.AY20]/[.AZ$14];0)
      WHEN 'AZ' THEN
        IF cell('AZ15') > 0 THEN
          RETURN cell('AY',l) / cell('AZ15');
        IF cell('AZ14') > 0 THEN
          RETURN cell('AY',l) / cell('AZ14');
        ELSE
          RETURN 0;
        END IF;
@@ -476,9 +488,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- BB=IF([.AZ$17]=0;([.AY20]-[.BA20])/[.$AD20];0)
      -- BB=IF([.BA20]<[.AY20];([.AY20]-[.BA20])/[.$AD20];0)
      WHEN 'BB' THEN
        IF cell('AZ17') = 0 THEN
        IF cell('BA',l) < cell('AY',l) THEN
          RETURN (cell('AY',l) - cell('BA',l)) / cell('AD',l);
        ELSE
          RETURN 0;
@@ -540,9 +552,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- BH=IF([.BF$17]=0;([.BE20]-[.BG20])/[.$AD20];0)
      -- BH=IF([.BG20]<[.BE20];([.BE20]-[.BG20])/[.$AD20];0)
      WHEN 'BH' THEN
        IF cell('BF17') = 0 THEN
        IF cell('BG',l) < cell('BE',l) THEN
          RETURN (cell('BE',l) - cell('BG',l)) / cell('AD',l);
        ELSE
          RETURN 0;
@@ -604,9 +616,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- BN=IF([.BL$17]=0;([.BK20]-[.BM20])/[.$AD20];0)
      -- BN=IF([.BM20]<[.BK20];([.BK20]-[.BM20])/[.$AD20];0)
      WHEN 'BN' THEN
        IF cell('BL17') = 0 THEN
        IF cell('BM',l) < cell('BK',l) THEN
          RETURN (cell('BK',l) - cell('BM',l)) / cell('AD',l);
        ELSE
          RETURN 0;
@@ -634,6 +646,16 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_PICARDIE AS



      -- BS=IF(AND([.$D20]="Oui";[.$BL$17]=0;[.$H20]="Référentiel");([.AQ20]+[.BC20])*[.$AE20];0)
      WHEN 'BS' THEN
        IF vh.service_statutaire AND cell('BL17') = 0 AND vh.volume_horaire_ref_id IS NOT NULL THEN
          RETURN (cell('AQ',l) + cell('BC',l)) * cell('AE',l);
        ELSE
          RETURN 0;
        END IF;




    ELSE
      dbms_output.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!');
Loading