Files
apollinare-catering-software/docs/procedures/EVENTI_COPIA.md
2025-12-17 13:02:12 +01:00

215 lines
4.6 KiB
Markdown

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