Vai al contenuto

EVENTI_COPIA

Codice Sorgente

```sql PROCEDURE eventi_copia ( id_evento_old IN NUMBER, nuova_versione IN NUMBER DEFAULT 0, id_evento_new OUT NUMBER ) AS r_evento eventi%rowtype; v_new_evt_id eventi.id%TYPE; BEGIN SELECT * INTO r_evento FROM eventi WHERE id = id_evento_old;

r_evento.id := NULL;
r_evento.is_template := 0;
IF nuova_versione = 1 THEN
    r_evento.id_evt_padre := id_evento_old;
    r_evento.vers_number := nvl(r_evento.vers_number, 0) + 1; -- aggiorno il numero versione
ELSE
    r_evento.id_evt_padre := NULL;
    r_evento.vers_number := 0;
END IF;

-- Copio l'evento facendo creare il nuovo id dal trigger
INSERT INTO eventi VALUES r_evento RETURNING id INTO v_new_evt_id;

IF nuova_versione = 1 THEN
    -- Aggiorno il vecchio evento col nuovo id
    UPDATE eventi
    SET
        id_evt_figlio = v_new_evt_id
    WHERE
        id = id_evento_old;

END IF;

COMMIT;

-- Aggiungo i figli alla nuova versione
-- Degustazioni
INSERT INTO eventi_det_degust (
    id_evento,
    data,
    ora,
    nome,
    telefono,
    email,
    location,
    n_persone,
    menu,
    n_paganti,
    note,
    n_degustazione,
    consumata,
    costo_degustazione
)
    SELECT
        v_new_evt_id,
        data,
        ora,
        nome,
        telefono,
        email,
        location,
        n_persone,
        menu,
        n_paganti,
        note,
        n_degustazione,
        consumata,
        costo_degustazione
    FROM
        eventi_det_degust
    WHERE
        id_evento = id_evento_old;

-- Ospiti
-- Devo fare una update... DIO TRIGGER
FOR c IN (
    SELECT
        id_evento,
        cod_tipo_ospite,
        numero,
        note
    FROM
        eventi_det_ospiti
    WHERE
        id_evento = id_evento_old
) LOOP
    UPDATE eventi_det_ospiti
    SET
        numero = c.numero,
        note = c.note
    WHERE
            id_evento = v_new_evt_id
        AND cod_tipo_ospite = c.cod_tipo_ospite;

END LOOP;
-- insert into eventi_det_ospiti (ID_EVENTO, COD_TIPO_OSPITE, NUMERO, NOTE)
-- select v_new_evt_id, COD_TIPO_OSPITE, NUMERO, NOTE
-- from eventi_det_ospiti
-- where id_evento = ID_EVENTO_OLD;

-- Prelievi
/* COME DA RICHIESTA DEL 01/2024 NON COPIO LA LISTA PRELIEVO NELLA NUOVA VERSIONE */
/* RIATTIVO NUOVAMENTE LA COPIA IL 12/02/2024 */
INSERT INTO eventi_det_prel (
    id_evento,
    cod_articolo,
    qta,
    note,
    qta_ape,
    qta_sedu,
    qta_bufdol,
    qta_man_ape,
    qta_man_sedu,
    qta_man_bufdol,
    costo_articolo
)
    SELECT
        v_new_evt_id,
        cod_articolo,
        qta,
        note,
        qta_ape,
        qta_sedu,
        qta_bufdol,
        qta_man_ape,
        qta_man_sedu,
        qta_man_bufdol,
        costo_articolo
    FROM
        eventi_det_prel
    WHERE
        id_evento = id_evento_old;

-- Risorse
INSERT INTO eventi_det_ris (
    id_evento,
    id_risorsa,
    ore_lav,
    costo,
    note
)
    SELECT
        v_new_evt_id,
        id_risorsa,
        ore_lav,
        costo,
        note
    FROM
        eventi_det_ris
    WHERE
        id_evento = id_evento_old;

-- Costi
INSERT INTO eventi_acconti (
    data,
    acconto,
    id_evento,
    a_conferma,
    ordine,
    descrizione
)
    SELECT
        data,
        acconto,
        v_new_evt_id,
        a_conferma,
        ordine,
        descrizione
    FROM
        eventi_acconti
    WHERE
        id_evento = id_evento_old;

-- Altri Costi
INSERT INTO eventi_altricosti (
    id_evento,
    descrizione,
    costo,
    quantity
)
    SELECT
        v_new_evt_id,
        descrizione,
        costo,
        quantity
    FROM
        eventi_altricosti
    WHERE
        id_evento = id_evento_old;

-- Carico il nuovo id nella pagina
id_evento_new := v_new_evt_id;

EXCEPTION WHEN OTHERS THEN DELETE FROM eventi WHERE id = v_new_evt_id;

    COMMIT;
    raise_application_error(-20001, sqlcode
                                    || ' - '
                                    || sqlerrm);

END eventi_copia;```