|
|
return: text
|
|
|
lang: plpgsql
|
|
|
src: |
|
|
|
DECLARE
|
|
|
_nbPlanAna integer; -- Nb de plans analytiques possibles.
|
|
|
_templateName text; -- Nom de la vue SQL template.
|
|
|
_template text; -- source SQL template à compléter par cette fonction.
|
|
|
_opt_mode text; -- Option t_divers définissant quelle vue SQL source est à prendre
|
|
|
_viewName text; -- Nom de la vue à créer.
|
|
|
_sqlView text; -- SQL de la vue à créer.
|
|
|
_tmpRatio text; -- Ratio à appliquer.
|
|
|
_tmpSelectId text[]; -- Colonnes à ajouter.
|
|
|
_tmpSelectCode text[]; -- Colonnes à ajouter.
|
|
|
_tmpSelectTexte text[]; -- Colonnes à ajouter.
|
|
|
_tmpJoin text; -- Jointure à utiliser.
|
|
|
result text;
|
|
|
BEGIN
|
|
|
_nbPlanAna = 3; -- Actuellement on gère 3 plans analytiques maximum.
|
|
|
_templateName = 'v_historique_paie_0'; -- Par défaut, le template SQL à récupérer est situé dans cette vue.
|
|
|
_opt_mode = ''; -- Par défaut, on prend la vue standard.
|
|
|
|
|
|
-- Récupération de l'option.
|
|
|
SELECT CASE WHEN valeur != '0' THEN '_1' ELSE '' END INTO _opt_mode FROM rh.t_divers WHERE code = 'OPT_STD_HP';
|
|
|
|
|
|
-- Récupération du template.
|
|
|
SELECT pg_get_viewdef(c.oid, true) INTO _template FROM pg_class c JOIN pg_namespace as n on n.oid = c.relnamespace WHERE n.nspname = 'rh' AND c.relname = _templateName||coalesce(_opt_mode, ''::text);
|
|
|
|
|
|
-- La vue v_historique_paie_0 est un template dans lequel il faut remplace "* 999" et "JOIN ( SELECT 1) subq ON 1 = 1" par les bonnes valeurs.
|
|
|
FOR i IN 1..2^_nbPlanAna LOOP
|
|
|
_tmpRatio = '';
|
|
|
_tmpSelectId = null;
|
|
|
_tmpSelectCode = null;
|
|
|
_tmpSelectTexte = null;
|
|
|
_tmpJoin = '';
|
|
|
_sqlView = '';
|
|
|
|
|
|
IF (i::bit(3) = 0::bit(3)) THEN
|
|
|
_viewName = 'rh.v_historique_paie_1';
|
|
|
ELSE
|
|
|
_viewName = 'rh.v_historique_paie_1_' || i::bit(3)::text;
|
|
|
END IF;
|
|
|
|
|
|
FOR j IN 1.._nbPlanAna LOOP
|
|
|
IF (substr(i::bit(3)::text, j, 1) = '1') THEN
|
|
|
_tmpRatio = _tmpRatio || ' * v' || j::text || '.ratio';
|
|
|
_tmpSelectId[j] = 'v' || j::text || '.section_analytique_id as ng_section_analytique_' || j::text || '_id, v' || j::text || '.section_analytique_section_id as ng_section_analytique_' || j::text || '_section_id';
|
|
|
_tmpSelectCode[j] = 'v' || j::text || '.section_analytique_code as ng_section_analytique_' || j::text || '_code, v' || j::text || '.section_analytique_section_code as ng_section_analytique_' || j::text || '_section_code';
|
|
|
_tmpSelectTexte[j] = 'v' || j::text || '.section_analytique_texte as ng_section_analytique_' || j::text || '_texte, v' || j::text || '.section_analytique_section_texte as ng_section_analytique_' || j::text || '_section_texte';
|
|
|
_tmpJoin = _tmpJoin || ' JOIN rh.p_ventilation_section AS v' || j::text || ' ON v' || j::text || '.ventilation_id = p_historique_paie.ventilation_'|| j::text ||'_id';
|
|
|
ELSE
|
|
|
_tmpSelectId[j] = 'null::bigint as ng_section_analytique_' || j::text || '_id';
|
|
|
_tmpSelectCode[j] = 'null::text as ng_section_analytique_' || j::text || '_code';
|
|
|
_tmpSelectTexte[j] = 'null::text as ng_section_analytique_' || j::text || '_texte';
|
|
|
END IF;
|
|
|
END LOOP;
|
|
|
|
|
|
-- Remplacements
|
|
|
_sqlView = replace (_template, '* 999', _tmpRatio);
|
|
|
_sqlView = replace (_sqlView, '999::bigint', array_to_string(_tmpSelectId, ', ', 'null::bigint'));
|
|
|
_sqlView = replace (_sqlView, '''section_analytique_ng_code''::text', array_to_string(_tmpSelectCode, ', ', 'null::text'));
|
|
|
_sqlView = replace (_sqlView, '''section_analytique_ng_texte''::text', array_to_string(_tmpSelectTexte, ', ', 'null::text'));
|
|
|
_sqlView = replace (_sqlView, 'JOIN ( SELECT 1) subq ON 1 = 1', _tmpJoin);
|
|
|
_sqlView = replace (_sqlView, ' AS to_replace_id', '');
|
|
|
_sqlView = replace (_sqlView, ' AS to_replace_code', '');
|
|
|
_sqlView = replace (_sqlView, ' AS to_replace_texte', '');
|
|
|
|
|
|
-- Suppression de la vue si elle existe.
|
|
|
EXECUTE 'DROP VIEW IF EXISTS ' || _viewName;
|
|
|
|
|
|
-- Création de la vue.
|
|
|
EXECUTE 'CREATE VIEW ' || _viewName || ' AS ' || _sqlView;
|
|
|
END LOOP;
|
|
|
|
|
|
RETURN 'OK';
|
|
|
END;
|