-- MàJ de la version en BDD
UPDATE om_version SET om_version = '6.15.0' WHERE exists(SELECT 1 FROM om_version) = true;
INSERT INTO om_version
SELECT ('6.15.0') WHERE exists(SELECT 1 FROM om_version) = false;

--
-- BEGIN / [#10687][MC0049707] Définir pour l'envoi au parapheur des "validateurs" et un signataire
--

ALTER TABLE signataire_arrete ADD COLUMN IF NOT EXISTS habilitation_parapheur character varying(40) DEFAULT 'signer';
COMMENT ON COLUMN signataire_arrete.habilitation_parapheur IS 'Habilitation de validation et/ou de signature pour le signataire arrêté';

-- UPDATE signataire_arrete SET habilitation_parapheur = 'signer' WHERE habilitation_parapheur IS NULL;

CREATE TABLE IF NOT EXISTS lien_instruction_signataire_validateur (
    lien_instruction_signataire_validateur integer NOT NULL,
    instruction integer NOT NULL,
    signataire_arrete integer NOT NULL,
    rang integer DEFAULT 0 NOT NULL,
    CONSTRAINT lien_instruction_signataire_validateur_pkey PRIMARY KEY (lien_instruction_signataire_validateur)
);

--
-- Name: COLUMN lien_instruction_signataire_validateur.lien_instruction_signataire_validateur; Type: COMMENT; Schema: openads; Owner: -
--
COMMENT ON COLUMN lien_instruction_signataire_validateur.lien_instruction_signataire_validateur IS 'Identifiant unique interne.';
--
-- Name: COLUMN lien_instruction_signataire_validateur.instruction; Type: COMMENT; Schema: openads; Owner: -
--
COMMENT ON COLUMN lien_instruction_signataire_validateur.instruction IS 'Identifiant de l''instruction avec circuit de validation';
--
-- Name: COLUMN lien_instruction_signataire_validateur.signataire_arrete; Type: COMMENT; Schema: openads; Owner: -
--
COMMENT ON COLUMN lien_instruction_signataire_validateur.signataire_arrete IS 'Identifiant du signataire, désigné validateur de l''instruction';
--
-- Name: COLUMN lien_instruction_signataire_validateur.rang; Type: COMMENT; Schema: openads; Owner: -
--
COMMENT ON COLUMN lien_instruction_signataire_validateur.rang IS 'Rang du validateur dans le circuit de validation';

--
-- Clef primaire et des clefs étrangères
--
ALTER TABLE lien_instruction_signataire_validateur
    DROP CONSTRAINT IF EXISTS lien_instruction_signataire_validateur_oc_fkey,
    DROP CONSTRAINT IF EXISTS lien_instruction_signataire_validateur_ctc_fkey;

ALTER TABLE lien_instruction_signataire_validateur
    ADD CONSTRAINT lien_instruction_signataire_validateur_oc_fkey FOREIGN KEY (instruction) REFERENCES instruction(instruction),
    ADD CONSTRAINT lien_instruction_signataire_validateur_ctc_fkey FOREIGN KEY (signataire_arrete) REFERENCES signataire_arrete(signataire_arrete);

--
-- Name: lien_instruction_signataire_validateur_seq; Type: SEQUENCE; Schema: openads; Owner: -
--
CREATE SEQUENCE IF NOT EXISTS lien_instruction_signataire_validateur_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
--
-- Name: lien_instruction_signataire_validateur_seq; Type: SEQUENCE OWNED BY; Schema: openads; Owner: -
--
ALTER SEQUENCE lien_instruction_signataire_validateur_seq OWNED BY lien_instruction_signataire_validateur.lien_instruction_signataire_validateur;

-- ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'lien_instruction_signataire_validateur', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'lien_instruction_signataire_validateur' AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
    );
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR TECHNIQUE ET FONCTIONNEL')
    );

-- ADMINISTRATEUR GENERAL
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ADMINISTRATEUR GENERAL')
    );

-- INSTRUCTEUR
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR')
    );

-- QUALIFICATEUR
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'QUALIFICATEUR')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'QUALIFICATEUR')
    );

-- DIVISIONNAIRE
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'DIVISIONNAIRE')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'DIVISIONNAIRE')
    );

-- CHEF DE SERVICE
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'CHEF DE SERVICE')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'CHEF DE SERVICE')
    );

-- INSTRUCTEUR SERVICE
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR SERVICE')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR SERVICE')
    );

-- INSTRUCTEUR POLYVALENT
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'INSTRUCTEUR POLYVALENT')
    );

-- ASSISTANTE
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'ASSISTANTE')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'ASSISTANTE')
    );

-- CHEF DE SERVICE CONTENTIEUX
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'CHEF DE SERVICE CONTENTIEUX')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'CHEF DE SERVICE CONTENTIEUX')
    );

-- JURISTE
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'JURISTE')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'JURISTE')
    );

-- TECHNICIEN
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'TECHNICIEN')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'TECHNICIEN')
    );

-- RESPONSABLE DIVISION INFRACTION
INSERT INTO om_droit (om_droit, libelle, om_profil)
    SELECT nextval('om_droit_seq'), 'instruction_selection_validateurs', (SELECT om_profil FROM om_profil WHERE libelle = 'RESPONSABLE DIVISION INFRACTION')
    WHERE NOT EXISTS (
        SELECT om_droit FROM om_droit WHERE libelle = 'instruction_selection_validateurs'
        AND om_profil = (SELECT om_profil FROM om_profil WHERE libelle = 'RESPONSABLE DIVISION INFRACTION')
    );

--
-- END / [#10687][MC0049707] Définir pour l'envoi au parapheur des "validateurs" et un signataire
--

