# 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;```