extracted objects
This commit is contained in:
419
docs/procedures/EVENTI_AGGIORNA_QTA_LISTA.md
Normal file
419
docs/procedures/EVENTI_AGGIORNA_QTA_LISTA.md
Normal file
@@ -0,0 +1,419 @@
|
||||
# EVENTI_AGGIORNA_QTA_LISTA
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "EVENTI_AGGIORNA_QTA_LISTA" (
|
||||
p_id_evento NUMBER
|
||||
) AS
|
||||
-- ricalcola tutte le qta della lista
|
||||
|
||||
v_cod_art VARCHAR2(10);
|
||||
v_coeff_a NUMBER;
|
||||
v_coeff_s NUMBER;
|
||||
v_coeff_b NUMBER;
|
||||
v_ospiti NUMBER;
|
||||
v_qta_a NUMBER;
|
||||
v_qta_s NUMBER;
|
||||
v_qta_b NUMBER;
|
||||
v_qta_std_a NUMBER;
|
||||
v_qta_std_s NUMBER;
|
||||
v_qta_std_b NUMBER;
|
||||
v_count_tov NUMBER;
|
||||
v_count_tov_buf NUMBER;
|
||||
v_qta_giac NUMBER;
|
||||
v_qta_imp NUMBER;
|
||||
v_data_evt DATE;
|
||||
v_qta_man VARCHAR2(100);
|
||||
BEGIN
|
||||
|
||||
-- Daniele Viti
|
||||
-- Scorre tutti gli articoli dell'evento
|
||||
---------
|
||||
FOR c IN (
|
||||
SELECT DISTINCT
|
||||
cod_articolo
|
||||
FROM
|
||||
eventi_det_prel
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
) LOOP
|
||||
BEGIN
|
||||
|
||||
--default su qta:
|
||||
|
||||
--verifica qta standard
|
||||
SELECT
|
||||
nvl(qta_std_a, 0),
|
||||
nvl(qta_std_s, 0),
|
||||
nvl(qta_std_b, 0)
|
||||
INTO
|
||||
v_qta_std_a,
|
||||
v_qta_std_s,
|
||||
v_qta_std_b
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = c.cod_articolo;
|
||||
|
||||
IF v_qta_std_a > 0 OR v_qta_std_s > 0 OR v_qta_std_b > 0 THEN
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
qta_ape = v_qta_std_a,
|
||||
qta_sedu = v_qta_std_s,
|
||||
qta_bufdol = v_qta_std_b,
|
||||
qta = qta_ape + qta_sedu + qta_bufdol + qta_man_ape + qta_man_sedu + qta_man_bufdol
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo;
|
||||
|
||||
COMMIT;
|
||||
CONTINUE; -- se esistono le qta standard aggiorna e passa il giro successivo!
|
||||
|
||||
END IF;
|
||||
|
||||
SELECT
|
||||
cod_relativo
|
||||
INTO v_cod_art
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = c.cod_articolo;
|
||||
|
||||
IF v_cod_art IS NULL THEN
|
||||
--Articolo Relativo assente
|
||||
|
||||
--verifica se cod_articolo è di tipo TOVAGLE O CARAFFE etc...
|
||||
SELECT
|
||||
COUNT(*)
|
||||
INTO v_count_tov
|
||||
FROM
|
||||
articoli a
|
||||
JOIN tb_codici_categ c ON a.cod_categ = c.cod_categ
|
||||
JOIN tb_tipi_mat t ON c.cod_tipo = t.cod_tipo
|
||||
WHERE
|
||||
( c.cod_tipo IN ( 'CA-CARAFFE' )
|
||||
-- or c.COD_CATEG in ('TOV-BUFF','TOV-SED')
|
||||
OR c.cod_categ IN ( 'TOV-SED' ) )
|
||||
AND a.cod_articolo = c.cod_articolo;
|
||||
|
||||
--verifica se cod_articolo è di tipo TOVAGLE BUFFET
|
||||
SELECT
|
||||
COUNT(*)
|
||||
INTO v_count_tov_buf
|
||||
FROM
|
||||
articoli a
|
||||
JOIN tb_codici_categ c ON a.cod_categ = c.cod_categ
|
||||
JOIN tb_tipi_mat t ON c.cod_tipo = t.cod_tipo
|
||||
WHERE
|
||||
c.cod_categ IN ( 'TOV-BUFF' )
|
||||
AND a.cod_articolo = c.cod_articolo; -- 'CM-DANI'
|
||||
|
||||
IF v_count_tov > 0 THEN
|
||||
--c.COD_ARTICOLO è di tipo TOVAGLE O CARAFFE etc...
|
||||
|
||||
-- reperisco le qta tot inserita per i tavoli
|
||||
SELECT
|
||||
nvl(SUM(qta_ape),
|
||||
0),
|
||||
nvl(SUM(qta_sedu),
|
||||
0),
|
||||
nvl(SUM(qta_bufdol),
|
||||
0)
|
||||
INTO
|
||||
v_qta_a,
|
||||
v_qta_s,
|
||||
v_qta_b
|
||||
FROM
|
||||
eventi_det_prel e
|
||||
JOIN articoli a ON e.cod_articolo = a.cod_articolo
|
||||
JOIN tb_codici_categ c ON a.cod_categ = c.cod_categ
|
||||
JOIN tb_tipi_mat t ON c.cod_tipo = t.cod_tipo
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND c.cod_tipo IN ( 'TA' );
|
||||
|
||||
--recupero il coefficente dell'atricolo (tovagliato o caraffe) e lo moltiplico x la qta tavoli
|
||||
SELECT
|
||||
nvl(coeff_a, 0),
|
||||
nvl(coeff_s, 0),
|
||||
nvl(coeff_b, 0)
|
||||
INTO
|
||||
v_coeff_a,
|
||||
v_coeff_s,
|
||||
v_coeff_b
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = c.cod_articolo;
|
||||
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
qta_ape = v_qta_a * v_coeff_a,
|
||||
qta_sedu = v_qta_s * v_coeff_s,
|
||||
qta_bufdol = v_qta_b * v_coeff_b,
|
||||
qta = qta_ape + qta_sedu + qta_bufdol + qta_man_ape + qta_man_sedu + qta_man_bufdol
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo;
|
||||
|
||||
COMMIT;
|
||||
ELSIF v_count_tov_buf > 0 THEN
|
||||
--c.COD_ARTICOLO è di tipo TOVAGLE BUFFET
|
||||
|
||||
-- reperisco le qta tot inserita per gli angoli buffet
|
||||
SELECT
|
||||
nvl(SUM(qta_ape),
|
||||
0),
|
||||
nvl(SUM(qta_sedu),
|
||||
0),
|
||||
nvl(SUM(qta_bufdol),
|
||||
0)
|
||||
INTO
|
||||
v_qta_a,
|
||||
v_qta_s,
|
||||
v_qta_b
|
||||
FROM
|
||||
eventi_det_prel e
|
||||
JOIN articoli a ON e.cod_articolo = a.cod_articolo
|
||||
JOIN tb_codici_categ c ON a.cod_categ = c.cod_categ
|
||||
JOIN tb_tipi_mat t ON c.cod_tipo = t.cod_tipo
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND c.cod_tipo IN ( 'AN' );
|
||||
|
||||
--recupero il coefficente dell'atricolo (tovagliato buffet) e lo moltiplico x la qta angoli
|
||||
SELECT
|
||||
nvl(coeff_a, 0),
|
||||
nvl(coeff_s, 0),
|
||||
nvl(coeff_b, 0)
|
||||
INTO
|
||||
v_coeff_a,
|
||||
v_coeff_s,
|
||||
v_coeff_b
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = c.cod_articolo;
|
||||
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
qta_ape = v_qta_a * v_coeff_a,
|
||||
qta_sedu = v_qta_s * v_coeff_s,
|
||||
qta_bufdol = v_qta_b * v_coeff_b,
|
||||
qta = qta_ape + qta_sedu + qta_bufdol + qta_man_ape + qta_man_sedu + qta_man_bufdol
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo;
|
||||
|
||||
COMMIT;
|
||||
ELSE
|
||||
BEGIN
|
||||
v_cod_art := c.cod_articolo;
|
||||
SELECT
|
||||
nvl(coeff_a, 0),
|
||||
nvl(coeff_s, 0),
|
||||
nvl(coeff_b, 0)
|
||||
INTO
|
||||
v_coeff_a,
|
||||
v_coeff_s,
|
||||
v_coeff_b
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = v_cod_art;
|
||||
|
||||
SELECT
|
||||
nvl(tot_ospiti, 0)
|
||||
INTO v_ospiti
|
||||
FROM
|
||||
eventi
|
||||
WHERE
|
||||
id = p_id_evento;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
raise_application_error(-20001, 'Errore: Coefficenti/Num Ospiti NON TROVATI - '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| substr(sqlerrm, 1, 64));
|
||||
END;
|
||||
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
qta_ape = trunc(v_coeff_a * v_ospiti),
|
||||
qta_sedu = trunc(v_coeff_s * v_ospiti),
|
||||
qta_bufdol = trunc(v_coeff_b * v_ospiti),
|
||||
qta = qta_ape + qta_sedu + qta_bufdol + qta_man_ape + qta_man_sedu + qta_man_bufdol
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo;
|
||||
|
||||
COMMIT;
|
||||
END IF;
|
||||
|
||||
ELSE
|
||||
-- cod relativo valorizzato
|
||||
BEGIN
|
||||
-- reperisco le qta inserite per il cod_relativo nella lista
|
||||
SELECT
|
||||
nvl(qta_ape, 0),
|
||||
nvl(qta_sedu, 0),
|
||||
nvl(qta_bufdol, 0)
|
||||
INTO
|
||||
v_qta_a,
|
||||
v_qta_s,
|
||||
v_qta_b
|
||||
FROM
|
||||
eventi_det_prel
|
||||
WHERE
|
||||
cod_articolo = v_cod_art
|
||||
AND id_evento = p_id_evento;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
CONTINUE;
|
||||
-- Disattivato temporaneamente per evitare spam
|
||||
--RAISE_APPLICATION_ERROR(-20000, 'Errore: Qta NON TROVATA !!! - v_cod_art: ' || v_cod_art || ' - ' || SQLCODE || ' - ' || SUBSTR(SQLERRM, 1 , 64));
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
-- reperisco i coefficenti
|
||||
SELECT
|
||||
nvl(coeff_a, 0),
|
||||
nvl(coeff_s, 0),
|
||||
nvl(coeff_b, 0)
|
||||
INTO
|
||||
v_coeff_a,
|
||||
v_coeff_s,
|
||||
v_coeff_b
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = c.cod_articolo;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
raise_application_error(-20001, 'Errore: Qta/Coefficenti del codice relativo NON TROVATI - '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| substr(sqlerrm, 1, 64));
|
||||
END;
|
||||
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
qta_ape = trunc(v_coeff_a * v_qta_a),
|
||||
qta_sedu = trunc(v_coeff_s * v_qta_s),
|
||||
qta_bufdol = trunc(v_coeff_b * v_qta_b),
|
||||
qta = qta_ape + qta_sedu + qta_bufdol + qta_man_ape + qta_man_sedu + qta_man_bufdol
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo;
|
||||
|
||||
COMMIT;
|
||||
END IF;
|
||||
|
||||
-- NOTE SE SUPERO LA QTA DISPONBILE !!!
|
||||
BEGIN
|
||||
SELECT
|
||||
data
|
||||
INTO v_data_evt
|
||||
FROM
|
||||
eventi
|
||||
WHERE
|
||||
id = p_id_evento;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
raise_application_error(-20001, 'v_data_evento - '
|
||||
|| v_data_evt
|
||||
|| ' - '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| substr(sqlerrm, 1, 64));
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
SELECT
|
||||
qta_giac
|
||||
INTO v_qta_giac
|
||||
FROM
|
||||
articoli
|
||||
WHERE
|
||||
cod_articolo = c.cod_articolo;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
raise_application_error(-20001, 'v_qta_giac - '
|
||||
|| v_qta_giac
|
||||
|| ' - '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| substr(sqlerrm, 1, 64));
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
SELECT
|
||||
nvl(f_get_qta_impegnata(c.cod_articolo, v_data_evt),
|
||||
0)
|
||||
INTO v_qta_imp
|
||||
FROM
|
||||
dual;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
raise_application_error(-20001, 'v_qta_imp - '
|
||||
|| v_qta_imp
|
||||
|| ' - '
|
||||
|| v_cod_art
|
||||
|| ', '
|
||||
|| v_data_evt
|
||||
|| ' - '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| substr(sqlerrm, 1, 64));
|
||||
END;
|
||||
|
||||
--RAISE_APPLICATION_ERROR(-20000, 'v_qta_giac - ' || v_qta_giac || ' - ' || SQLCODE || ' - ' || SUBSTR(SQLERRM, 1 , 64));
|
||||
dbms_output.put_line('CodArt: '
|
||||
|| c.cod_articolo
|
||||
|| '; Qta Imp: '
|
||||
|| v_qta_imp
|
||||
|| '; Qta Giac: '
|
||||
|| v_qta_giac);
|
||||
--NOTA: a differenza del trigger "BEFORE INSERT ON EVENTI_DET_PREL",
|
||||
-- in questo caso la qta_imp è già comprensiva della qta ricalcolata
|
||||
IF v_qta_imp > v_qta_giac THEN
|
||||
v_qta_man := v_qta_imp - v_qta_giac;
|
||||
--:NEW.NOTE := 'QTA TOT NON Disponibile, mancano: ' || to_char(v_qta_man);
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
note = 'QTA TOT NON Disponibile, mancano: ' || to_char(v_qta_man)
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo;
|
||||
|
||||
COMMIT;
|
||||
ELSE
|
||||
UPDATE eventi_det_prel
|
||||
SET
|
||||
note = NULL
|
||||
WHERE
|
||||
id_evento = p_id_evento
|
||||
AND cod_articolo = c.cod_articolo
|
||||
AND note LIKE '%QTA TOT NON Disponibile%';
|
||||
|
||||
COMMIT;
|
||||
END IF;
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
raise_application_error(-20001, 'Errore: '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| substr(sqlerrm, 1, 64));
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
RETURN;
|
||||
END eventi_aggiorna_qta_lista;```
|
||||
45
docs/procedures/EVENTI_AGGIORNA_TOT_OSPITI.md
Normal file
45
docs/procedures/EVENTI_AGGIORNA_TOT_OSPITI.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# EVENTI_AGGIORNA_TOT_OSPITI
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "EVENTI_AGGIORNA_TOT_OSPITI" (
|
||||
p_id_evento IN NUMBER DEFAULT 0
|
||||
) AS
|
||||
--aggiorna la qta toto ospiti
|
||||
--job aggiorna_tot_ospiti
|
||||
|
||||
CURSOR c_eventi IS
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
eventi
|
||||
WHERE
|
||||
id = p_id_evento;
|
||||
|
||||
v_tot_ospiti NUMBER;
|
||||
BEGIN
|
||||
/*
|
||||
for c in c_eventi
|
||||
loop
|
||||
*/
|
||||
BEGIN
|
||||
v_tot_ospiti := f_get_tot_ospiti(p_id_evento);
|
||||
UPDATE eventi
|
||||
SET
|
||||
tot_ospiti = v_tot_ospiti
|
||||
WHERE
|
||||
id = p_id_evento;
|
||||
|
||||
COMMIT;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
raise_application_error(-20000, 'Errore nel calcolo del totale ospiti: '
|
||||
|| sqlcode
|
||||
|| ' - '
|
||||
|| sqlerrm);
|
||||
END;
|
||||
|
||||
-- end loop;
|
||||
|
||||
END eventi_aggiorna_tot_ospiti;```
|
||||
214
docs/procedures/EVENTI_COPIA.md
Normal file
214
docs/procedures/EVENTI_COPIA.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# 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;```
|
||||
205
docs/procedures/EVENTI_RICALCOLA_ACCONTI.md
Normal file
205
docs/procedures/EVENTI_RICALCOLA_ACCONTI.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# EVENTI_RICALCOLA_ACCONTI
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
procedure EVENTI_RICALCOLA_ACCONTI(p_event_id number) as
|
||||
v_cnt number;
|
||||
v_calc_only_saldo number := 0;
|
||||
v_totale_tipi number;
|
||||
v_totale_degus number;
|
||||
v_totale_ris number;
|
||||
v_totale_ospiti number;
|
||||
v_totale_evento number;
|
||||
v_totale_altricosti number;
|
||||
v_primo_acconto number := 0;
|
||||
v_secondo_acconto number := 0;
|
||||
v_terzo_acconto number := 0;
|
||||
v_prima_perc number := 0.3;
|
||||
v_seconda_perc number := 0.5;
|
||||
v_terza_perc number := 0.2;
|
||||
begin
|
||||
|
||||
select count(*)
|
||||
into v_cnt
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and "DATA" is not null;
|
||||
/*
|
||||
if v_cnt > 0 then
|
||||
raise_application_error(-20001, 'Impossibile ricalcolare gli acconti per un evento già saldato o parzialmente saldato');
|
||||
end if;
|
||||
*/
|
||||
select count(*)
|
||||
into v_cnt
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and (ORDINE = 10 OR ORDINE = 20) -- primo acconto (o anche secondo) dato quindi evento confermato
|
||||
and "DATA" is not null;
|
||||
|
||||
if v_cnt > 0 then
|
||||
v_calc_only_saldo := 1;
|
||||
end if;
|
||||
|
||||
select sum(costo_ivato)
|
||||
into v_totale_tipi
|
||||
from get_costo_tipi_evt
|
||||
where id_evento = p_event_id;
|
||||
|
||||
select sum(costo)
|
||||
into v_totale_degus
|
||||
from get_costo_degus_evt
|
||||
where id_evento = p_event_id;
|
||||
|
||||
select sum(costo)
|
||||
into v_totale_ris
|
||||
from get_costo_ris_evt
|
||||
where id_evento = p_event_id;
|
||||
|
||||
select sum(costo+costo*0.10)
|
||||
into v_totale_ospiti
|
||||
from get_costo_ospiti_evt
|
||||
where id_evento = p_event_id;
|
||||
|
||||
select sum((costo * quantity)+(case when costo > 0 then costo * quantity * 0.10 else 0 end))
|
||||
into v_totale_altricosti
|
||||
from eventi_altricosti
|
||||
where id_evento = p_event_id;
|
||||
|
||||
v_totale_evento :=
|
||||
nvl(v_totale_tipi, 0) -
|
||||
nvl(v_totale_degus, 0) +
|
||||
nvl(v_totale_ris, 0) +
|
||||
nvl(v_totale_ospiti, 0) +
|
||||
nvl(v_totale_altricosti, 0);
|
||||
|
||||
if v_calc_only_saldo = 0 then
|
||||
-- Se nessun acconto è stato pagato allora ricalcola tutti gli acconti
|
||||
delete
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and ordine in (10, 20, 30);
|
||||
|
||||
insert into eventi_acconti
|
||||
(DESCRIZIONE, ACCONTO, ID_EVENTO, A_CONFERMA, ORDINE)
|
||||
values
|
||||
('PRIMA CAPARRA (art.7 punto A del contratto) a conferma evento nella cifra di euro:',
|
||||
v_totale_evento * v_prima_perc, p_event_id, 1, 10);
|
||||
|
||||
insert into eventi_acconti
|
||||
(DESCRIZIONE, ACCONTO, ID_EVENTO, A_CONFERMA, ORDINE)
|
||||
values
|
||||
('SECONDA CAPARRA (art. 7 punto B - circa 60 giorni prima dell''evento) nella cifra di euro:',
|
||||
v_totale_evento * v_seconda_perc, p_event_id, 0, 20);
|
||||
|
||||
insert into eventi_acconti
|
||||
(DESCRIZIONE, ACCONTO, ID_EVENTO, A_CONFERMA, ORDINE)
|
||||
values
|
||||
('SALDO A RICEVIMENTO CONSUNTIVO (art.7 punto c del contratto) 5 giorni prima dell''evento',
|
||||
v_totale_evento * v_terza_perc, p_event_id, 0, 30);
|
||||
|
||||
else
|
||||
-- Controllo se gli acconti sono stato pagati e in caso ricalcolo soltanto i saldi
|
||||
begin
|
||||
select acconto
|
||||
into v_primo_acconto
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and ORDINE = 10
|
||||
and data is not null; -- Il primo acconto è stato pagato
|
||||
exception when no_data_found then
|
||||
v_primo_acconto := 0;
|
||||
end;
|
||||
|
||||
begin
|
||||
select acconto
|
||||
into v_secondo_acconto
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and ORDINE = 20
|
||||
and data is not null; -- Il secondo acconto è stato pagato
|
||||
exception when no_data_found then
|
||||
v_secondo_acconto := 0;
|
||||
end;
|
||||
|
||||
begin
|
||||
select acconto
|
||||
into v_terzo_acconto
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and ORDINE = 30
|
||||
and data is not null; -- Il terzo acconto è stato pagato
|
||||
exception when no_data_found then
|
||||
v_terzo_acconto := 0;
|
||||
end;
|
||||
|
||||
-- Se non hanno pagato il primo acconto lo calcolo in automatico
|
||||
if v_primo_acconto = 0 then
|
||||
v_primo_acconto := v_totale_evento * v_prima_perc;
|
||||
end if;
|
||||
|
||||
-- Ricalcolo la percentuale del secondo acconto in base al primo se non è stato pagato
|
||||
if v_secondo_acconto = 0 then
|
||||
v_secondo_acconto := (v_totale_evento - v_primo_acconto) * (v_seconda_perc/(v_seconda_perc + v_terza_perc));
|
||||
end if;
|
||||
|
||||
-- Calcolo il terzo acconto come la rimanenza tra il totale e il primo + secondo se non è stato pagato
|
||||
if v_terzo_acconto = 0 then
|
||||
v_terzo_acconto := v_totale_evento - (v_primo_acconto + v_secondo_acconto);
|
||||
end if;
|
||||
|
||||
-- Controllo se i totali acconti superano il totale dell'evento
|
||||
if v_primo_acconto > v_totale_evento then
|
||||
raise_application_error(-20001, 'Attenzione! Il primo acconto supera il costo totale del''evento');
|
||||
end if;
|
||||
|
||||
if v_primo_acconto + v_secondo_acconto > v_totale_evento then
|
||||
raise_application_error(-20001, 'Attenzione! Il primo e il secondo acconto superano il costo totale del''evento');
|
||||
end if;
|
||||
|
||||
if v_primo_acconto + v_secondo_acconto + v_terzo_acconto > v_totale_evento then
|
||||
raise_application_error(-20001, 'Attenzione! Gli acconti superano il costo totale del''evento');
|
||||
end if;
|
||||
|
||||
-- Se gli acconti successivi sono validi allora li aggiorno, se l'acconto precendente salda tutto li elimino
|
||||
if v_secondo_acconto > 0 then
|
||||
update eventi_acconti
|
||||
set ACCONTO = v_secondo_acconto
|
||||
where id_evento = p_event_id
|
||||
and ordine = 20;
|
||||
|
||||
if SQL%ROWCOUNT = 0 then
|
||||
insert into eventi_acconti
|
||||
(DESCRIZIONE, ACCONTO, ID_EVENTO, A_CONFERMA, ORDINE)
|
||||
values
|
||||
('SECONDA CAPARRA (art. 7 punto B - circa 60 giorni prima dell''evento) nella cifra di euro:',
|
||||
v_secondo_acconto, p_event_id, 0, 20);
|
||||
end if;
|
||||
else
|
||||
delete
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and ordine = 20;
|
||||
end if;
|
||||
|
||||
if v_terzo_acconto > 0 then
|
||||
update eventi_acconti
|
||||
set ACCONTO = v_terzo_acconto
|
||||
where id_evento = p_event_id
|
||||
and ordine = 30;
|
||||
|
||||
if SQL%ROWCOUNT = 0 then
|
||||
insert into eventi_acconti
|
||||
(DESCRIZIONE, ACCONTO, ID_EVENTO, A_CONFERMA, ORDINE)
|
||||
values
|
||||
('SALDO A RICEVIMENTO CONSUNTIVO (art.7 punto c del contratto) ', v_terzo_acconto, p_event_id, 0, 30);
|
||||
end if;
|
||||
else
|
||||
delete
|
||||
from eventi_acconti
|
||||
where id_evento = p_event_id
|
||||
and ordine = 30;
|
||||
end if;
|
||||
|
||||
end if;
|
||||
end;```
|
||||
12
docs/procedures/EVENTO_ELIMINA_PRELIEVI.md
Normal file
12
docs/procedures/EVENTO_ELIMINA_PRELIEVI.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# EVENTO_ELIMINA_PRELIEVI
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE EVENTO_ELIMINA_PRELIEVI
|
||||
(
|
||||
P_ID_EVENTO IN NUMBER
|
||||
) AS
|
||||
BEGIN
|
||||
NULL;
|
||||
END EVENTO_ELIMINA_PRELIEVI;```
|
||||
22
docs/procedures/HTPPRN.md
Normal file
22
docs/procedures/HTPPRN.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# HTPPRN
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "HTPPRN" (pclob in out nocopy clob) is
|
||||
v_excel varchar2(32000);
|
||||
v_clob clob := pclob;
|
||||
begin
|
||||
while length(v_clob) > 0 loop begin
|
||||
if length(v_clob) > 32000 then v_excel:= substr(v_clob,1,32000);
|
||||
htp.prn(v_excel);
|
||||
v_clob:= substr(v_clob,length(v_excel)+1);
|
||||
else
|
||||
v_excel := v_clob;
|
||||
htp.prn(v_excel);
|
||||
v_clob:=''; v_excel := ''; end if;
|
||||
end;
|
||||
end loop;
|
||||
end;
|
||||
|
||||
```
|
||||
308
docs/procedures/LISTE_COPIA.md
Normal file
308
docs/procedures/LISTE_COPIA.md
Normal file
@@ -0,0 +1,308 @@
|
||||
# LISTE_COPIA
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE liste_copia (
|
||||
id_evento_from IN NUMBER,
|
||||
id_evento_to IN NUMBER,
|
||||
copia_degustazioni IN NUMBER DEFAULT 0,
|
||||
copia_prelievi IN NUMBER DEFAULT 0,
|
||||
copia_risorse IN NUMBER DEFAULT 0,
|
||||
copia_acconti IN NUMBER DEFAULT 0,
|
||||
copia_altricosti IN NUMBER DEFAULT 0
|
||||
) AS
|
||||
BEGIN
|
||||
-- Validate that mandatory parameters are provided
|
||||
IF id_evento_from IS NULL OR id_evento_to IS NULL THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'Both id_evento_from and id_evento_to must be provided.');
|
||||
END IF;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- Degustazioni (Tastings)
|
||||
----------------------------------------------------------------------------
|
||||
IF copia_degustazioni > 0 THEN
|
||||
FOR rec IN (
|
||||
SELECT
|
||||
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_from
|
||||
) LOOP
|
||||
-- Try to update using the unique key (assumed here as n_degustazione)
|
||||
UPDATE eventi_det_degust
|
||||
SET
|
||||
data = rec.data,
|
||||
ora = rec.ora,
|
||||
nome = rec.nome,
|
||||
telefono = rec.telefono,
|
||||
email = rec.email,
|
||||
location = rec.location,
|
||||
n_persone = rec.n_persone,
|
||||
menu = rec.menu,
|
||||
n_paganti = rec.n_paganti,
|
||||
note = rec.note,
|
||||
consumata = rec.consumata,
|
||||
costo_degustazione = rec.costo_degustazione
|
||||
WHERE id_evento = id_evento_to
|
||||
AND id = rec.id;
|
||||
|
||||
IF SQL%ROWCOUNT = 0 THEN
|
||||
INSERT INTO eventi_det_degust (
|
||||
id_evento,
|
||||
data,
|
||||
ora,
|
||||
nome,
|
||||
telefono,
|
||||
email,
|
||||
location,
|
||||
n_persone,
|
||||
menu,
|
||||
n_paganti,
|
||||
note,
|
||||
n_degustazione,
|
||||
consumata,
|
||||
costo_degustazione
|
||||
)
|
||||
VALUES (
|
||||
id_evento_to,
|
||||
rec.data,
|
||||
rec.ora,
|
||||
rec.nome,
|
||||
rec.telefono,
|
||||
rec.email,
|
||||
rec.location,
|
||||
rec.n_persone,
|
||||
rec.menu,
|
||||
rec.n_paganti,
|
||||
rec.note,
|
||||
rec.n_degustazione,
|
||||
rec.consumata,
|
||||
rec.costo_degustazione
|
||||
);
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- Ospiti (Guests)
|
||||
----------------------------------------------------------------------------
|
||||
FOR rec IN (
|
||||
SELECT
|
||||
cod_tipo_ospite,
|
||||
numero,
|
||||
note
|
||||
FROM eventi_det_ospiti
|
||||
WHERE id_evento = id_evento_from
|
||||
) LOOP
|
||||
UPDATE eventi_det_ospiti
|
||||
SET
|
||||
numero = rec.numero,
|
||||
note = rec.note
|
||||
WHERE id_evento = id_evento_to
|
||||
AND cod_tipo_ospite = rec.cod_tipo_ospite;
|
||||
|
||||
IF SQL%ROWCOUNT = 0 THEN
|
||||
INSERT INTO eventi_det_ospiti (
|
||||
id_evento,
|
||||
cod_tipo_ospite,
|
||||
numero,
|
||||
note
|
||||
)
|
||||
VALUES (
|
||||
id_evento_to,
|
||||
rec.cod_tipo_ospite,
|
||||
rec.numero,
|
||||
rec.note
|
||||
);
|
||||
END IF;
|
||||
END LOOP;
|
||||
END IF;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- Prelievi (Sampling): inserisce solo i record mancanti
|
||||
----------------------------------------------------------------------------
|
||||
IF copia_prelievi > 0 THEN
|
||||
MERGE INTO eventi_det_prel dest
|
||||
USING (
|
||||
SELECT
|
||||
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_from
|
||||
) src
|
||||
ON (
|
||||
dest.id_evento = id_evento_to
|
||||
AND dest.cod_articolo = src.cod_articolo
|
||||
)
|
||||
WHEN NOT MATCHED THEN
|
||||
INSERT (
|
||||
id_evento,
|
||||
cod_articolo,
|
||||
qta,
|
||||
note,
|
||||
qta_ape,
|
||||
qta_sedu,
|
||||
qta_bufdol,
|
||||
qta_man_ape,
|
||||
qta_man_sedu,
|
||||
qta_man_bufdol,
|
||||
costo_articolo
|
||||
)
|
||||
VALUES (
|
||||
id_evento_to,
|
||||
src.cod_articolo,
|
||||
src.qta,
|
||||
src.note,
|
||||
src.qta_ape,
|
||||
src.qta_sedu,
|
||||
src.qta_bufdol,
|
||||
src.qta_man_ape,
|
||||
src.qta_man_sedu,
|
||||
src.qta_man_bufdol,
|
||||
src.costo_articolo
|
||||
);
|
||||
END IF;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- Risorse (Resources)
|
||||
----------------------------------------------------------------------------
|
||||
IF copia_risorse > 0 THEN
|
||||
FOR rec IN (
|
||||
SELECT
|
||||
id,
|
||||
id_risorsa,
|
||||
ore_lav,
|
||||
costo,
|
||||
note
|
||||
FROM eventi_det_ris
|
||||
WHERE id_evento = id_evento_from
|
||||
) LOOP
|
||||
UPDATE eventi_det_ris
|
||||
SET
|
||||
ore_lav = rec.ore_lav,
|
||||
costo = rec.costo,
|
||||
note = rec.note
|
||||
WHERE id_evento = id_evento_to
|
||||
AND id = rec.id;
|
||||
|
||||
IF SQL%ROWCOUNT = 0 THEN
|
||||
INSERT INTO eventi_det_ris (
|
||||
id_evento,
|
||||
id_risorsa,
|
||||
ore_lav,
|
||||
costo,
|
||||
note
|
||||
)
|
||||
VALUES (
|
||||
id_evento_to,
|
||||
rec.id_risorsa,
|
||||
rec.ore_lav,
|
||||
rec.costo,
|
||||
rec.note
|
||||
);
|
||||
END IF;
|
||||
END LOOP;
|
||||
END IF;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- Acconti (Payments)
|
||||
----------------------------------------------------------------------------
|
||||
IF copia_acconti > 0 THEN
|
||||
FOR rec IN (
|
||||
SELECT
|
||||
id,
|
||||
data,
|
||||
acconto,
|
||||
a_conferma,
|
||||
ordine,
|
||||
descrizione
|
||||
FROM eventi_acconti
|
||||
WHERE id_evento = id_evento_from
|
||||
) LOOP
|
||||
UPDATE eventi_acconti
|
||||
SET
|
||||
data = rec.data,
|
||||
acconto = rec.acconto,
|
||||
a_conferma = rec.a_conferma,
|
||||
descrizione = rec.descrizione
|
||||
WHERE id_evento = id_evento_to
|
||||
AND id = rec.id;
|
||||
|
||||
IF SQL%ROWCOUNT = 0 THEN
|
||||
INSERT INTO eventi_acconti (
|
||||
data,
|
||||
acconto,
|
||||
id_evento,
|
||||
a_conferma,
|
||||
ordine,
|
||||
descrizione
|
||||
)
|
||||
VALUES (
|
||||
rec.data,
|
||||
rec.acconto,
|
||||
id_evento_to,
|
||||
rec.a_conferma,
|
||||
rec.ordine,
|
||||
rec.descrizione
|
||||
);
|
||||
END IF;
|
||||
END LOOP;
|
||||
END IF;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- Altri Costi (Other Costs)
|
||||
----------------------------------------------------------------------------
|
||||
IF copia_altricosti > 0 THEN
|
||||
FOR rec IN (
|
||||
SELECT
|
||||
id,
|
||||
descrizione,
|
||||
costo,
|
||||
quantity
|
||||
FROM eventi_altricosti
|
||||
WHERE id_evento = id_evento_from
|
||||
) LOOP
|
||||
UPDATE eventi_altricosti
|
||||
SET
|
||||
costo = rec.costo,
|
||||
quantity = rec.quantity
|
||||
WHERE id_evento = id_evento_to
|
||||
AND id = rec.id;
|
||||
|
||||
IF SQL%ROWCOUNT = 0 THEN
|
||||
INSERT INTO eventi_altricosti (
|
||||
id_evento,
|
||||
descrizione,
|
||||
costo,
|
||||
quantity
|
||||
)
|
||||
VALUES (
|
||||
id_evento_to,
|
||||
rec.descrizione,
|
||||
rec.costo,
|
||||
rec.quantity
|
||||
);
|
||||
END IF;
|
||||
END LOOP;
|
||||
END IF;
|
||||
END liste_copia;```
|
||||
41
docs/procedures/P_CANCEL_SAME_LOCATION_EVENTS.md
Normal file
41
docs/procedures/P_CANCEL_SAME_LOCATION_EVENTS.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# P_CANCEL_SAME_LOCATION_EVENTS
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "P_CANCEL_SAME_LOCATION_EVENTS" (p_good_event_id number) as
|
||||
-- ---------------------------
|
||||
-- Autore: Daniele Viti
|
||||
-- Data: 17/01/2020
|
||||
-- Descrizione: Controlla che ci siano più eventi con la stessa locazione e data di quello in esame e li annulla
|
||||
-- ---------------------------
|
||||
v_date date;
|
||||
v_idloc number;
|
||||
begin
|
||||
|
||||
begin
|
||||
-- Seleziono la data e la location per confrontarle dopo
|
||||
select data, id_location
|
||||
into v_date, v_idloc
|
||||
from eventi
|
||||
where id = p_good_event_id;
|
||||
exception when no_data_found then
|
||||
raise_application_error(-20001, 'Impossibile trovare l''evento da confermare');
|
||||
end;
|
||||
|
||||
for c in (
|
||||
select *
|
||||
from eventi
|
||||
where data = v_date
|
||||
and id_location = v_idloc
|
||||
and id != p_good_event_id
|
||||
) loop
|
||||
-- Imposta l'evento come obsoleto (annullato)
|
||||
UPDATE EVENTI
|
||||
SET
|
||||
FLG_SUPERATO = 1,
|
||||
STATO = 900
|
||||
WHERE ID = c.id;
|
||||
end loop;
|
||||
|
||||
end;```
|
||||
90
docs/procedures/README.md
Normal file
90
docs/procedures/README.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Stored Procedures
|
||||
|
||||
Questa cartella contiene la documentazione di tutte le 11 stored procedures del database.
|
||||
|
||||
## Procedures Business Logic
|
||||
|
||||
| Procedura | Descrizione |
|
||||
|-----------|-------------|
|
||||
| [EVENTI_AGGIORNA_QTA_LISTA](EVENTI_AGGIORNA_QTA_LISTA.md) | Ricalcola tutte le quantità della lista prelievo |
|
||||
| [EVENTI_AGGIORNA_TOT_OSPITI](EVENTI_AGGIORNA_TOT_OSPITI.md) | Aggiorna il totale ospiti in testata evento |
|
||||
| [EVENTI_COPIA](EVENTI_COPIA.md) | Duplica un evento con tutti i dettagli |
|
||||
| [EVENTI_RICALCOLA_ACCONTI](EVENTI_RICALCOLA_ACCONTI.md) | Ricalcola gli importi degli acconti |
|
||||
| [EVENTO_ELIMINA_PRELIEVI](EVENTO_ELIMINA_PRELIEVI.md) | Elimina i prelievi di un evento |
|
||||
| [LISTE_COPIA](LISTE_COPIA.md) | Copia selettiva di liste tra due eventi |
|
||||
| [P_CANCEL_SAME_LOCATION_EVENTS](P_CANCEL_SAME_LOCATION_EVENTS.md) | Annulla eventi nella stessa location/data |
|
||||
|
||||
## Procedures Utility
|
||||
|
||||
| Procedura | Descrizione |
|
||||
|-----------|-------------|
|
||||
| [ROWSORT_TIPI](ROWSORT_TIPI.md) | Riordina i tipi materiale |
|
||||
| [HTPPRN](HTPPRN.md) | Output HTTP per APEX |
|
||||
| [SEND_DATA_TO_DROPBOX](SEND_DATA_TO_DROPBOX.md) | Export dati verso Dropbox |
|
||||
| [XLOG](XLOG.md) | Procedura di logging |
|
||||
|
||||
## Dettaglio Procedures Critiche
|
||||
|
||||
### EVENTI_AGGIORNA_QTA_LISTA
|
||||
|
||||
**Parametri:**
|
||||
- `p_id_evento NUMBER` - ID dell'evento
|
||||
|
||||
**Logica:**
|
||||
1. Cicla su tutti gli articoli nella lista prelievo
|
||||
2. Per ogni articolo determina il metodo di calcolo:
|
||||
- **Quantità Standard**: Se `QTA_STD_A/S/B` sono valorizzate
|
||||
- **Tovagliato/Caraffe**: Moltiplica per quantità tavoli/angoli
|
||||
- **Codice Relativo**: Moltiplica per quantità articolo di riferimento
|
||||
- **Standard**: Moltiplica coefficienti per totale ospiti
|
||||
3. Verifica disponibilità rispetto alla giacenza
|
||||
4. Aggiorna note con warning se quantità insufficiente
|
||||
|
||||
### EVENTI_COPIA
|
||||
|
||||
**Parametri:**
|
||||
- `id_evento_old NUMBER` - ID evento da copiare
|
||||
- `nuova_versione NUMBER DEFAULT 0` - 1 per creare nuova versione
|
||||
- `id_evento_new OUT NUMBER` - ID nuovo evento creato
|
||||
|
||||
**Logica:**
|
||||
1. Copia testata evento
|
||||
2. Se nuova versione: imposta `ID_EVT_PADRE`, incrementa `VERS_NUMBER`
|
||||
3. Aggiorna evento vecchio con `ID_EVT_FIGLIO`
|
||||
4. Copia tutte le tabelle dettaglio:
|
||||
- `EVENTI_DET_DEGUST`
|
||||
- `EVENTI_DET_OSPITI` (via UPDATE, non INSERT)
|
||||
- `EVENTI_DET_PREL`
|
||||
- `EVENTI_DET_RIS`
|
||||
- `EVENTI_ACCONTI`
|
||||
- `EVENTI_ALTRICOSTI`
|
||||
5. In caso di errore: elimina evento creato e solleva eccezione
|
||||
|
||||
### EVENTI_RICALCOLA_ACCONTI
|
||||
|
||||
**Parametri:**
|
||||
- `p_event_id NUMBER` - ID evento
|
||||
|
||||
**Logica:**
|
||||
1. Calcola totale evento dalle viste costo
|
||||
2. Se nessun acconto pagato:
|
||||
- Elimina acconti esistenti
|
||||
- Inserisce nuovi acconti con percentuali 30%-50%-20%
|
||||
3. Se acconti parzialmente pagati:
|
||||
- Mantiene importi pagati
|
||||
- Ricalcola solo acconti non pagati
|
||||
- Verifica che totale acconti ≤ totale evento
|
||||
|
||||
### LISTE_COPIA
|
||||
|
||||
**Parametri:**
|
||||
- `id_evento_from NUMBER` - Evento sorgente
|
||||
- `id_evento_to NUMBER` - Evento destinazione
|
||||
- `copia_degustazioni NUMBER DEFAULT 0`
|
||||
- `copia_prelievi NUMBER DEFAULT 0`
|
||||
- `copia_risorse NUMBER DEFAULT 0`
|
||||
- `copia_acconti NUMBER DEFAULT 0`
|
||||
- `copia_altricosti NUMBER DEFAULT 0`
|
||||
|
||||
**Logica:**
|
||||
Per ogni flag > 0 esegue un MERGE (UPDATE se esiste, INSERT altrimenti).
|
||||
145
docs/procedures/ROWSORT_TIPI.md
Normal file
145
docs/procedures/ROWSORT_TIPI.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# ROWSORT_TIPI
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "ROWSORT_TIPI" (
|
||||
p_direc_cod IN VARCHAR2,
|
||||
o_return OUT CLOB
|
||||
) AS
|
||||
|
||||
v_direc VARCHAR2(4);
|
||||
v_cod_tipo VARCHAR2(10);
|
||||
v_cod_step NUMBER;
|
||||
v_cod_step_new NUMBER;
|
||||
v_return CLOB;
|
||||
BEGIN
|
||||
|
||||
-- Separo i valori in entrata su p_direc_cod 'direc_cod' in un array ( Es: 'desc_AN' => [ 'desc', 'AN' ] )
|
||||
---- Seleziono la direzione (asc o desc)
|
||||
SELECT
|
||||
upper(result)
|
||||
INTO v_direc
|
||||
FROM
|
||||
TABLE ( string_to_table_enum(p_string => p_direc_cod, v_level => 0, p_separator => '_') )
|
||||
WHERE
|
||||
id = 1;
|
||||
|
||||
---- Seleziono l'cod_tipo della riga da spostare
|
||||
|
||||
SELECT
|
||||
upper(result)
|
||||
INTO v_cod_tipo
|
||||
FROM
|
||||
TABLE ( string_to_table_enum(p_string => p_direc_cod, v_level => 0, p_separator => '_') )
|
||||
WHERE
|
||||
id = 2;
|
||||
|
||||
IF v_direc = 'ASC' THEN
|
||||
|
||||
-- Seleziono i numeri di riga
|
||||
SELECT
|
||||
cod_step,
|
||||
cod_step - 1
|
||||
INTO
|
||||
v_cod_step,
|
||||
v_cod_step_new
|
||||
FROM
|
||||
tb_tipi_mat
|
||||
WHERE
|
||||
upper(TRIM(cod_tipo)) = upper(TRIM(v_cod_tipo));
|
||||
|
||||
-- Libero i numeri di riga richiesti
|
||||
-- diminuendo il numero di riga di un valore inutilizzato (Es: 0.5)
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = cod_step - 0.5
|
||||
WHERE
|
||||
cod_tipo = v_cod_tipo;
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = cod_step - 0.5
|
||||
WHERE
|
||||
cod_step = v_cod_step_new;
|
||||
|
||||
-- Sposto la riga precedente al posto di quella selezionata (Es: row 1 diventerà row 2)
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = v_cod_step
|
||||
WHERE
|
||||
cod_step = v_cod_step_new - 0.5;
|
||||
|
||||
-- Sposto la riga selezionata al nuovo posto
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = v_cod_step_new
|
||||
WHERE
|
||||
cod_tipo = v_cod_tipo;
|
||||
|
||||
v_return := 'cod_tipo: '
|
||||
|| v_cod_tipo
|
||||
|| ' - From Row '
|
||||
|| v_cod_step
|
||||
|| ' - To Row '
|
||||
|| v_cod_step_new;
|
||||
|
||||
ELSIF v_direc = 'DESC' THEN
|
||||
|
||||
-- Seleziono i numeri di riga
|
||||
SELECT
|
||||
cod_step,
|
||||
cod_step + 1
|
||||
INTO
|
||||
v_cod_step,
|
||||
v_cod_step_new
|
||||
FROM
|
||||
tb_tipi_mat
|
||||
WHERE
|
||||
upper(TRIM(cod_tipo)) = upper(TRIM(v_cod_tipo));
|
||||
|
||||
-- Libero i numeri di riga richiesti
|
||||
-- diminuendo il numero di riga di un valore inutilizzato (Es: 0.5)
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = cod_step + 0.5
|
||||
WHERE
|
||||
cod_tipo = v_cod_tipo;
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = cod_step + 0.5
|
||||
WHERE
|
||||
cod_step = v_cod_step_new;
|
||||
|
||||
-- Sposto la riga precedente al posto di quella selezionata (Es: row 1 diventerà row 2)
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = v_cod_step
|
||||
WHERE
|
||||
cod_step = v_cod_step_new + 0.5;
|
||||
|
||||
-- Sposto la riga selezionata al nuovo posto
|
||||
|
||||
UPDATE tb_tipi_mat
|
||||
SET
|
||||
cod_step = v_cod_step_new
|
||||
WHERE
|
||||
cod_tipo = v_cod_tipo;
|
||||
|
||||
v_return := 'cod_tipo: '
|
||||
|| v_cod_tipo
|
||||
|| ' - From row. '
|
||||
|| v_cod_step
|
||||
|| ' - To row: '
|
||||
|| v_cod_step_new;
|
||||
|
||||
END IF;
|
||||
|
||||
o_return := v_return;
|
||||
END;```
|
||||
61
docs/procedures/SEND_DATA_TO_DROPBOX.md
Normal file
61
docs/procedures/SEND_DATA_TO_DROPBOX.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# SEND_DATA_TO_DROPBOX
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "SEND_DATA_TO_DROPBOX" (ondemand boolean := false) AS
|
||||
v_queryres clob := EMPTY_CLOB();
|
||||
v_file_name varchar2(255);
|
||||
|
||||
l_file UTL_FILE.FILE_TYPE;
|
||||
l_buffer RAW(32767);
|
||||
l_amount BINARY_INTEGER := 32767;
|
||||
l_pos INTEGER := 1;
|
||||
l_blob BLOB := EMPTY_BLOB();
|
||||
l_blob_len INTEGER;
|
||||
BEGIN
|
||||
|
||||
if ondemand then
|
||||
for c in (
|
||||
select 'test' as a from dual
|
||||
union all
|
||||
select 'test2' as a from dual
|
||||
) loop
|
||||
v_queryres := v_queryres || c.a;
|
||||
end loop;
|
||||
else
|
||||
v_queryres := 'test';
|
||||
end if;
|
||||
|
||||
l_blob := CLOB2BLOB(v_queryres);
|
||||
|
||||
l_blob_len := DBMS_LOB.getlength(l_blob);
|
||||
|
||||
if ondemand then
|
||||
v_file_name := 'backup_ondemand_'||to_char(sysdate, 'YYYYMMDDHH24MISS')||'.sql';
|
||||
else
|
||||
v_file_name := 'backup_'||to_char(sysdate, 'YYYYMMDD')||'.sql';
|
||||
end if;
|
||||
|
||||
l_file := UTL_FILE.fopen('DROPBOXBCK', v_file_name, 'wb', 32767);
|
||||
|
||||
-- Read chunks of the BLOB and write them to the file
|
||||
-- until complete.
|
||||
WHILE l_pos <= l_blob_len LOOP
|
||||
DBMS_LOB.read(l_blob, l_amount, l_pos, l_buffer);
|
||||
UTL_FILE.put_raw(l_file, l_buffer, TRUE);
|
||||
l_pos := l_pos + l_amount;
|
||||
END LOOP;
|
||||
|
||||
-- Close the file.
|
||||
UTL_FILE.fclose(l_file);
|
||||
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
-- Close the file if something goes wrong.
|
||||
IF UTL_FILE.is_open(l_file) THEN
|
||||
UTL_FILE.fclose(l_file);
|
||||
END IF;
|
||||
RAISE;
|
||||
|
||||
END SEND_DATA_TO_DROPBOX;```
|
||||
19
docs/procedures/XLOG.md
Normal file
19
docs/procedures/XLOG.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# XLOG
|
||||
|
||||
## Codice Sorgente
|
||||
|
||||
```sql
|
||||
PROCEDURE "XLOG" (
|
||||
p_module IN VARCHAR2,
|
||||
p_msg IN VARCHAR2,
|
||||
p_type IN VARCHAR2 DEFAULT 'DEBUG',
|
||||
p_level PLS_INTEGER DEFAULT 15
|
||||
)
|
||||
IS
|
||||
BEGIN
|
||||
xlib_log.m (p_module => p_module,
|
||||
p_msg => p_msg,
|
||||
p_type => p_type,
|
||||
p_level => p_level
|
||||
);
|
||||
END xlog;```
|
||||
Reference in New Issue
Block a user