-- =====================================================================
-- Divers traitements sur les données après l'installation des données
-- =====================================================================
    
-- Initilisation du mois de début de période comptable.
-- w_mois trouve le mois de début de période qui apparait le plus dans p_calendrier_mois
WITH w_mois AS (
    SELECT
        to_number(substring(to_char(exercice_mois_comptable_1, 'FM999999') from '..$'), '99') as mois_debut,
        count(*) as combien
    FROM base.p_calendrier_mois
    GROUP BY 1
    ORDER BY 2 DESC
    LIMIT 1
    )
INSERT INTO compta.t_divers(
    code,
    texte,
    valeur,
    valeur_date,
    description,
    show_info_module)
SELECT
    'MOIS_DEBUT',
    'Mois début période comptable.',
    w_mois.mois_debut::text,
        NULL,
    'Mois de début de la période comptable',
    true
FROM
    w_mois
WHERE (SELECT count(*) FROM compta.t_divers WHERE code = 'MOIS_DEBUT') = 0
;

UPDATE base.p_calendrier_mois SET
    exercice_comptable = to_char(date_debut - (subview.valeur::text || ' month'::text)::interval + '1 month'::interval, 'YYYY')::numeric,
    exercice_mois_comptable_1 = (to_char(date_debut - (subview.valeur::text || ' month'::text)::interval + '1 month'::interval, 'YYYY')||ltrim(to_char(subview.valeur::numeric, '00')))::numeric
FROM
    (SELECT max(valeur) as valeur FROM compta.t_divers WHERE code = 'MOIS_DEBUT') subview
;

-- Mise à jour des rubriques de rapports suite au passage des séquences sur deux digits 
UPDATE compta.t_rapports_rubriques SET viewlink_param = regexp_replace(viewlink_param, 'CLS([0-9][^0-9])', 'CLS0\1', 'g')
WHERE viewlink_param ~ '.*CLS[0-9][^0-9].*';

-- Réplication du code banque sur les comptes signés
WITH w_cpt AS (
    SELECT
        oid as compte_id,
        banque
    FROM
        compta.t_comptes
    WHERE
        banque = '1'
)
UPDATE compta.t_comptes SET
    banque = w_cpt.banque
    FROM
    w_cpt
WHERE 1=1
  AND t_comptes.compte_general_id = w_cpt.compte_id
  AND t_comptes.banque IS DISTINCT FROM w_cpt.banque;

-- Initialisation mois en cours/mois clôturé (NOW/NOWCLOTURE) lorsque pas déjà renseigné lors de l'import.
WITH subq as (
    SELECT date_ecriture
    FROM compta.p_historique_ecritures
    WHERE 1=1
      AND date_ecriture <= now()
      AND ajustement = '0'
      AND is_budget <> '1'
    ORDER BY date_ecriture DESC
    LIMIT 1)
INSERT INTO compta.t_divers(
    code,
    texte,
    valeur,
    valeur_date,
    description,
    show_info_module)
SELECT
    'NOW',
    'Mois en cours.',
    to_char(date_ecriture, 'YYYYMM'),
    date_ecriture,
    'Mois en cours.',
    true
FROM subq
WHERE (SELECT count(*) FROM compta.t_divers WHERE code = 'NOW') = 0
;

WITH subq as (
    SELECT ((mois_comptable||'01')::date + interval '1 month' - interval '1 day' - interval '1 month')::date as date_comptable
FROM compta.p_historique_ecritures
WHERE 1=1
  AND date_ecriture <= now()
  AND ajustement = '0'
  AND is_budget <> '1'
ORDER BY mois_comptable DESC
    LIMIT 1)
INSERT INTO compta.t_divers(
    code,
    texte,
    valeur,
    valeur_date,
    description,
    show_info_module)
SELECT
    'NOWCLOTURE',
    'Mois clôturé.',
    to_char(date_comptable, 'YYYYMM'),
    date_comptable,
    'Mois clôturé.',
    true
FROM subq
WHERE (SELECT count(*) FROM compta.t_divers WHERE code = 'NOWCLOTURE') = 0
;

--Maj table compta.t_pole
INSERT INTO compta.t_pole (oid, code, texte, texte_court)
SELECT 0, '**', 'Non renseigné', 'Non renseigné'
    WHERE 0 NOT IN (SELECT oid FROM compta.t_pole)
;