PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
104 stars 102 forks source link

Fonctions traduisant les id nomenclatures / utilisateurs #3124

Open marie-laure-cen opened 4 months ago

marie-laure-cen commented 4 months ago

Je ne sais pas si ça peut être utile à d'autres personnes mais pour traduire certains champs pour les vues à vocation "qgis" et l'import de données, j'ai ajouté les fonctions suivantes :

CREATE OR REPLACE FUNCTION utilisateurs.get_name_by_id_role(
    roleid integer)
    RETURNS character varying
    LANGUAGE 'plpgsql'
    COST 100
    IMMUTABLE PARALLEL UNSAFE
AS $BODY$
        BEGIN
            RETURN (
                SELECT nom_role || ' ' || prenom_role
                FROM utilisateurs.t_roles
                WHERE id_role = roleid -- nom_role = roleName
            );
        END;

$BODY$;

CREATE OR REPLACE FUNCTION ref_nomenclatures.get_id_nomenclature_by_mnemonique(
    mytype character varying,
    mymnemonique character varying)
    RETURNS integer
    LANGUAGE 'plpgsql'
    COST 100
    IMMUTABLE PARALLEL UNSAFE
AS $BODY$
DECLARE theidnomenclature integer;
  BEGIN
SELECT INTO theidnomenclature id_nomenclature
FROM ref_nomenclatures.t_nomenclatures n
WHERE n.id_type = ref_nomenclatures.get_id_nomenclature_type(mytype) AND mymnemonique = n.mnemonique;
return theidnomenclature;
  END;
$BODY$;

En passant, je ne sais pas quel processus utilise la fonction utilisateurs.get_id_role_by_name mais celle-ci peut présenter des erreurs en cas d'homonymie puisqu'elle ne se base que sur le nom et pas sur le prénom.

CREATE OR REPLACE FUNCTION utilisateurs.get_id_role_by_name(
    rolename character varying)
    RETURNS integer
    LANGUAGE 'plpgsql'
    COST 100
    IMMUTABLE PARALLEL UNSAFE
AS $BODY$
        BEGIN
            RETURN (
                SELECT id_role
                FROM utilisateurs.t_roles
                WHERE nom_role = roleName
            );
        END;

$BODY$;

=>

CREATE OR REPLACE FUNCTION utilisateurs.get_id_role_by_name(
    roleName character varying,
    roleFirstName character varying
    )
    RETURNS integer
    LANGUAGE 'plpgsql'
    COST 100
    IMMUTABLE PARALLEL UNSAFE
AS $BODY$
        BEGIN
            RETURN (
                SELECT id_role
                FROM utilisateurs.t_roles
                WHERE nom_role || prenom_role = roleName || roleFirstName 
            );
        END;

$BODY$;

?

camillemonchicourt commented 2 months ago

Merci.