return: date lang: plpgsql parameters: p0: type: text name: i_code p1: type: text name: i_option src: | DECLARE _code text; _option text; _now date; BEGIN _code = i_code; IF _code NOT IN ('NOW', 'NOWCLOTURE') THEN _code = 'NOW'; END IF; _option = i_option; IF NOT EXISTS (SELECT * FROM rh.t_divers WHERE code = _code) THEN _option = 'FORCE'; END IF; IF _option = 'FORCE' THEN _now = CASE _code WHEN 'NOW' THEN (SELECT MAX(date_fin) FROM rh.p_contrats WHERE date_fin <= date(now()) ) WHEN 'NOWCLOTURE' THEN (SELECT CASE WHEN date(date_trunc('month',MAX(date_paie)) + interval '1 month' - interval '1 day') <= date(date_trunc('month',now() - interval '5 days')) THEN date(date_trunc('month',MAX(date_paie)) + interval '1 month' - interval '1 day') ELSE date(date_trunc('month',MAX(date_paie)) - interval '1 day') END FROM rh.p_historique_paie WHERE date_paie <= date(date_trunc('month',now()) + interval '1 month' - interval '1 day') ) ELSE date(now()) END; UPDATE rh.t_divers SET texte = CASE _code WHEN 'NOW' THEN 'Date en-cours' WHEN 'NOWCLOTURE' THEN 'Date clôture' ELSE 'Date en-cours' END, valeur = to_char(_now, 'YYYYMM'), valeur_date = _now, show_info_module = true WHERE code = _code; INSERT INTO rh.t_divers (code, texte, valeur, valeur_date, description, show_info_module) SELECT _code, CASE _code WHEN 'NOW' THEN 'Date en-cours' WHEN 'NOWCLOTURE' THEN 'Date clôture' ELSE 'Date en-cours' END, to_char(_now, 'YYYYMM'), _now, 'Date non modifiable', true WHERE _code NOT IN (SELECT code FROM rh.t_divers); ELSE _now = (SELECT valeur_date FROM rh.t_divers WHERE code = _code); END IF; RETURN _now; END;