Commit c5ef9f4f authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[FIX] Module Substitutions : modification de la formule de caclul du NPD doctorant.

parent cc363e2d
Loading
Loading
Loading
Loading
+1 −0
Changes for CHANGELOG.md: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ Journal des modifications
- [FIX] Recherche de thèses : amélioration de l'affichage et du tri des structures dans les filtres.
- [FIX] Recherche autocomplete établissement/ED/UR : bug empêchant la recherche (systématiquement aucun résultat).
- [FIX] Page de modification d'une UR : paramètres de route erronés ; suppression de warnings PHP de variables inconnues.
- [FIX] Module Substitutions : modification de la formule de caclul du NPD doctorant.

7.0.0
-----
+42 −0
Changes for doc/release-notes/v7.0.1.md: 42 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -149,4 +149,46 @@ begin
  perform substit_insert_log(type, 'SUBSTITE_RESTORE', p_substitue_id, p_substituant_id, null, v_message);
end
$$;

create or replace function substit_npd_doctorant(doctorant doctorant) returns varchar
  language plpgsql
as
$$declare
  v_npd_individu varchar(256);
begin
  --
  -- Fonction de calcul du "NPD".
  --
  -- Important : Le NPD d'un doctorant "inclut" celui de l'individu lié. Cela permet de garantir qu'un doctorant
  -- ne peut être considéré comme un doublon si son individu lié ne l'est pas lui-même.
  --
  -- Attention !
  -- Modifier le calcul du NPD n'est pas une mince affaire car cela remet en question les substitutions existantes
  -- définies dans la table 'xxxx_substit'.
  -- > Dans les 2 cas qui suivent, il faudra absolument désactiver au préalable les triggers suivants :
  --   - 'substit_trigger_xxxx' sur la table 'xxxx'
  --   - 'substit_trigger_on_substit_xxxx' sur la table 'substit_xxxx'
  -- > Dans le cas où cela ne change rien du tout aux substitutions existantes, il faudra tout de même :
  --   - mettre à jour les valeurs dans la colonne 'npd' de la table 'substit_xxxx' en faisant appel
  --     à la fonction 'substit_npd_xxxx()';
  --   - mettre à jour manuellement les valeurs dans la colonne 'npd_force" de la table 'xxxx'.
  -- > Dans le cas où cela invalide des substitutions existantes, il faudra :
  --   - supprimer les substitutions concernées dans la table 'xxxx_substit' ;
  --   - mettre à jour manuellement les valeurs dans la colonne 'npd_force" de la table 'xxxx'.
  --

  select substit_npd_individu(i.*) into v_npd_individu from individu i where id = doctorant.individu_id;

  return v_npd_individu || ',' || normalized_string(trim(doctorant.ine));
end;
$$;

alter table substit_doctorant add npd_sav varchar(256);
alter table doctorant disable trigger substit_trigger_doctorant;
alter table substit_doctorant disable trigger substit_trigger_on_substit_doctorant;
update substit_doctorant set npd_sav = npd;
update substit_doctorant ss set npd = substit_npd_doctorant(d) from doctorant d where d.id = ss.from_id;
alter table doctorant enable trigger substit_trigger_doctorant;
alter table substit_doctorant enable trigger substit_trigger_on_substit_doctorant;

```