Initial commit

This commit is contained in:
2025-11-28 10:59:10 +01:00
commit 14b3e965d0
540 changed files with 784121 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
# CLOB2BLOB
## Codice Sorgente
```sql
FUNCTION "CLOB2BLOB" (AClob CLOB) return BLOB is
Result BLOB;
o1 integer;
o2 integer;
c integer;
w integer;
begin
o1 := 1;
o2 := 1;
c := 0;
w := 0;
DBMS_LOB.CreateTemporary(Result, true);
DBMS_LOB.ConvertToBlob(Result, AClob, length(AClob), o1, o2, 0, c, w);
return(Result);
end clob2blob;
```

View File

@@ -0,0 +1,10 @@
# EXTDATE_GET_ITA
## Codice Sorgente
```sql
function extdate_get_ita( p_date date ) return varchar2
as
begin
return REGEXP_REPLACE(TO_CHAR(p_date, 'Day dd Month yyyy', 'NLS_DATE_LANGUAGE = ITALIAN'), ' [ ]+', ' ');
end;```

View File

@@ -0,0 +1,37 @@
# F_CI_SONO_EVENTI_CONFERMATI
## Codice Sorgente
```sql
FUNCTION F_CI_SONO_EVENTI_CONFERMATI
(
P_EVT_DATE IN DATE
, P_LOCATION_ID IN NUMBER
, P_BYPASS IN NUMBER
) RETURN NUMBER AS
v_evt_cnt number;
BEGIN
-- function bypass
if P_BYPASS > 0 then
return 0;
end if;
select
count(e.id) as evt_cnt
into v_evt_cnt
from eventi e
join vw_event_color c on c.id = e.id
where e.data = P_EVT_DATE
and e.id_location = P_LOCATION_ID
and c.status = 'Confermato';
if v_evt_cnt > 0 then
return 1;
else
return 0;
end if;
END F_CI_SONO_EVENTI_CONFERMATI;```

View File

@@ -0,0 +1,45 @@
# F_DAY_TO_NAME
## Codice Sorgente
```sql
FUNCTION F_DAY_TO_NAME
(
DAY_NUMBER IN NUMBER
) RETURN VARCHAR2 AS
v_day_number number := DAY_NUMBER;
v_language varchar2(255);
BEGIN
with t as (
select DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET',
'NLS_LANGUAGE', 'LANGUAGE',
'NLS_TERRITORY', 'TERRITORY') name,
value from v$nls_parameters
WHERE parameter IN ( 'NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY')
)
select value into v_language
from t
where name = 'LANGUAGE';
if v_language = 'AMERICAN' then
case v_day_number
when 1 then return 'Domenica';
when 2 then return 'Lunedì';
when 3 then return 'Martedì';
when 4 then return 'Mercoledì';
when 5 then return 'Giovedì';
when 6 then return 'Venerdì';
when 7 then return 'Sabato';
end case;
else
case v_day_number
when 1 then return 'Lunedì';
when 2 then return 'Martedì';
when 3 then return 'Mercoledì';
when 4 then return 'Giovedì';
when 5 then return 'Venerdì';
when 6 then return 'Sabato';
when 7 then return 'Domenica';
end case;
end if;
END F_DAY_TO_NAME;```

View File

@@ -0,0 +1,22 @@
# F_EVENTO_SCADUTO
## Codice Sorgente
```sql
FUNCTION F_EVENTO_SCADUTO
(
DATA_SCADENZA IN DATE,
STATO_EVENTO IN NUMBER,
STATO_FROM IN NUMBER,
STATO_TO IN NUMBER
) RETURN NUMBER AS
BEGIN
if trunc(DATA_SCADENZA) <= trunc(sysdate)
and STATO_EVENTO between STATO_FROM and STATO_TO
then
return 1;
else
return 0;
end if;
END F_EVENTO_SCADUTO;
```

View File

@@ -0,0 +1,31 @@
# F_GET_ANGOLO_ALLESTIMENTO
## Codice Sorgente
```sql
FUNCTION "F_GET_ANGOLO_ALLESTIMENTO" (
p_filtro VARCHAR2,
p_id NUMBER
) RETURN VARCHAR2 AS
TYPE ref_cur IS REF CURSOR;
c_data ref_cur;
v_val VARCHAR2(1000);
v_filtro VARCHAR2(100);
v_id NUMBER;
BEGIN
v_filtro := p_filtro;
v_id := p_id;
OPEN c_data FOR ' select substr(a.descrizione || '' - '' || p.note ,1,1000)
from eventi e
left join location l on e.id_location = l.id
join eventi_det_prel p on e.id=p.id_evento
join articoli a on p.cod_articolo=a.cod_articolo
where p.COD_ARTICOLO = :filtro -- AN-GELAT
and e.id = to_number(:id)'
USING v_filtro, v_id;
FETCH c_data INTO v_val;
CLOSE c_data;
RETURN v_val;
END;```

View File

@@ -0,0 +1,34 @@
# F_GET_ANGOLO_ALLESTIMENTO_OB
## Codice Sorgente
```sql
FUNCTION "F_GET_ANGOLO_ALLESTIMENTO_OB" (
p_filtro VARCHAR2,
p_id NUMBER
) RETURN VARCHAR2
--ANGOLI OPEN BAR
AS
TYPE ref_cur IS REF CURSOR;
c_data ref_cur;
v_val VARCHAR2(1000);
v_filtro VARCHAR2(100);
v_id NUMBER;
BEGIN
v_filtro := p_filtro;
v_id := p_id;
OPEN c_data FOR ' select substr(a.descrizione || '' - '' || p.note ,1,1000)
from eventi e
left join location l on e.id_location = l.id
join eventi_det_prel p on e.id=p.id_evento
join articoli a on p.cod_articolo=a.cod_articolo
where a.cod_categ = ''AN-FIN''
and a.descrizione like :filtro -- AN-GELAT
and e.id = to_number(:id)'
USING v_filtro, v_id;
FETCH c_data INTO v_val;
CLOSE c_data;
RETURN v_val;
END;```

View File

@@ -0,0 +1,37 @@
# F_GET_COSTO_ARTICOLO
## Codice Sorgente
```sql
function f_get_costo_articolo(p_cod_articolo varchar2, p_date date)
return number
as
v_costo number := null;
begin
-- Cerco il costo alla data
begin
SELECT a.costo_uni
into v_costo
FROM COSTI_ARTICOLI a
where a.data_costo = p_date
and a.cod_articolo = p_cod_articolo;
exception when no_data_found then
v_costo := null;
end;
-- Se non lo trovo prendo l'ultimo costo
begin
SELECT a.costo_uni
into v_costo
FROM COSTI_ARTICOLI a
WHERE a.DATA_COSTO = (SELECT max(b.DATA_COSTO) FROM COSTI_ARTICOLI b where b.cod_articolo = a.cod_articolo)
and a.cod_articolo = p_cod_articolo;
exception when no_data_found then
v_costo := null;
end;
-- se non trovo niente torno 0
return nvl(v_costo, 0);
end;
```

View File

@@ -0,0 +1,164 @@
# F_GET_OSPITI
## Codice Sorgente
```sql
FUNCTION "F_GET_OSPITI" (
p_id_evento IN NUMBER
) RETURN t_det_ospiti_tab
PIPELINED
AS
v_data DATE;
v_location VARCHAR2(100);
v_cliente VARCHAR2(100);
v_descrizione VARCHAR2(100);
v_ora_cerimonia VARCHAR2(10);
v_ora_evento VARCHAR2(10);
v_tot_adulti NUMBER;
v_tot_kinder NUMBER;
v_tot_baby NUMBER;
v_tot_staff NUMBER;
v_tot_invitati NUMBER;
v_allergie VARCHAR2(4000);
v_torta VARCHAR2(1000);
v_confettata VARCHAR2(100);
v_stampa_menu VARCHAR2(100);
v_angoli VARCHAR2(1000);
v_extra_info VARCHAR2(1000);
v_note_adulti VARCHAR2(1000);
v_note_kinder VARCHAR2(1000);
v_note_baby VARCHAR2(1000);
v_note_staff VARCHAR2(1000);
BEGIN
BEGIN
v_tot_adulti := 0;
v_tot_kinder := 0;
v_tot_baby := 0;
v_tot_staff := 0;
v_tot_invitati := 0;
v_angoli := 0;
v_note_adulti := '';
v_note_kinder := '';
v_note_baby := '';
v_note_staff := '';
--ospiti
SELECT
nvl(SUM(o.numero),
0)
INTO v_tot_adulti
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 8; -- adulti
BEGIN
SELECT
o.note
INTO v_note_adulti
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 8; -- adulti
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
SELECT
nvl(SUM(o.numero),
0)
INTO v_tot_kinder
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 5; --Kinder
BEGIN
SELECT
o.note
INTO v_note_kinder
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 5; --Kinder
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
SELECT
nvl(SUM(o.numero),
0)
INTO v_tot_baby
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 6; -- Baby
BEGIN
SELECT
o.note
INTO v_note_baby
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 6; -- Baby
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
SELECT
nvl(SUM(o.numero),
0)
INTO v_tot_staff
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 7; -- Staff
BEGIN
SELECT
o.note
INTO v_note_staff
FROM
eventi_det_ospiti o
WHERE
o.id_evento = p_id_evento
AND o.cod_tipo_ospite = 7; -- Staff
EXCEPTION
WHEN no_data_found THEN
NULL;
END;
SELECT
nvl(e.tot_ospiti, 0)
INTO v_tot_invitati
FROM
eventi e
WHERE
e.id = p_id_evento;
PIPE ROW ( t_det_ospiti_row(p_id_evento, v_tot_adulti, v_tot_kinder, v_tot_baby, v_tot_staff,
v_tot_invitati, v_note_adulti, v_note_kinder, v_note_baby, v_note_staff) );
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
RETURN;
END;```

View File

@@ -0,0 +1,36 @@
# F_GET_QTA_IMPEGNATA
## Codice Sorgente
```sql
FUNCTION "F_GET_QTA_IMPEGNATA" (
p_codart VARCHAR2,
p_data_from DATE,
p_data_to DATE DEFAULT NULL
) RETURN NUMBER AS
v_qta NUMBER;
v_data_to DATE := p_data_to;
BEGIN
v_qta := 0;
IF ( p_data_to IS NULL ) THEN
v_data_to := p_data_from;
END IF;
BEGIN
SELECT
nvl(SUM(qta_imp),
0)
INTO v_qta
FROM
v_impegni_articoli
WHERE
cod_articolo = p_codart
--and data <= p_data --
AND data BETWEEN p_data_from AND v_data_to; -- qta impegnata per quella data
EXCEPTION
WHEN OTHERS THEN
v_qta := 0;
END;
RETURN v_qta;
END;```

View File

@@ -0,0 +1,31 @@
# F_GET_TOT_OSPITI
## Codice Sorgente
```sql
FUNCTION "F_GET_TOT_OSPITI" (
p_id_evento IN NUMBER,
p_tipo_ospite IN NUMBER := -1
) RETURN NUMBER AS
v_tot NUMBER;
BEGIN
v_tot := 0;
BEGIN
SELECT
nvl(SUM(numero),
0)
INTO v_tot
FROM
eventi_det_ospiti
WHERE
id_evento = p_id_evento
AND ( cod_tipo_ospite = p_tipo_ospite
OR p_tipo_ospite = - 1 );
EXCEPTION
WHEN OTHERS THEN
v_tot := 0;
END;
RETURN v_tot;
END;```

View File

@@ -0,0 +1,34 @@
# F_GET_TOVAGLIATO_ALLESTIMENTO
## Codice Sorgente
```sql
FUNCTION "F_GET_TOVAGLIATO_ALLESTIMENTO" (
p_filtro VARCHAR2,
p_id NUMBER
) RETURN VARCHAR2 AS
TYPE ref_cur IS REF CURSOR;
c_data ref_cur;
v_val VARCHAR2(1000);
v_filtro VARCHAR2(100);
v_id NUMBER;
BEGIN
v_filtro := p_filtro;
v_id := p_id;
OPEN c_data FOR ' select substr(a.descrizione || '' - '' || p.note ,1,1000) as dato
from eventi e
left join location l on e.id_location = l.id
join eventi_det_prel p on e.id=p.id_evento
join articoli a on p.cod_articolo=a.cod_articolo
join TB_CODICI_CATEG c on a.cod_categ=c.cod_categ
--where c.COD_TIPO = ''TVB'' -- dividere tovagliolo da tovagliato con i codici categ
where c.COD_TIPO = :filtro
and rownum = 1 -- se esistono più articoli fare list_agg op loop
and e.id = to_number(:id)'
USING v_filtro, v_id;
FETCH c_data INTO v_val;
CLOSE c_data;
RETURN v_val;
END;```

View File

@@ -0,0 +1,84 @@
# F_LIST_PRELIEVO_ADD_ARTICOLO
## Codice Sorgente
```sql
function f_list_prelievo_add_articolo(
p_event_id number,
p_articolo_add varchar2,
p_qta_aperitivo NUMBER := 0,
p_qta_seduto NUMBER := 0,
p_qta_dolci NUMBER := 0
)
return varchar2
as
v_qta_imp number;
v_qta_giac number;
v_data_evento date;
v_cod_art varchar2(10);
v_error_json varchar2(4000);
v_qta_da_imp NUMBER;
v_qta_da_imp_test NUMBER;
v_num_evt_imp number;
BEGIN
v_cod_art := p_articolo_add;
v_qta_da_imp := nvl(p_qta_aperitivo, 0) + nvl(p_qta_seduto, 0) + nvl(p_qta_dolci, 0);
begin
select trunc(data) as data
into v_data_evento
from eventi where id = p_event_id;
exception when no_data_found then
rollback;
RETURN '{"type":"error","code":"'||SQLCODE||'","stack":"'||SQLERRM||'","message":"Evento non trovato"}';
end;
begin
select qta_giac
into v_qta_giac
from articoli
where COD_ARTICOLO = v_cod_art;
exception when no_data_found then
rollback;
RETURN '{"type":"error","code":"'||SQLCODE||'","stack":"'||SQLERRM||'","message":"Articolo non trovato"}';
end;
select count(*)
into v_num_evt_imp
from V_IMPEGNI_ARTICOLI
where COD_ARTICOLO = v_cod_art
and data between v_data_evento - 2 and v_data_evento + 2;
v_qta_imp := nvl(f_get_qta_impegnata (v_cod_art, v_data_evento - 2, v_data_evento + 2 ) , 0);
--insert impegno articolo
begin
insert into eventi_det_prel (id_evento, cod_articolo,QTA_MAN_APE,QTA_MAN_SEDU,QTA_MAN_BUFDOL, COSTO_ARTICOLO)
values (p_event_id, p_articolo_add, p_qta_aperitivo, p_qta_seduto, p_qta_dolci, f_get_costo_articolo(v_cod_art, v_data_evento));
-- aggiorna liste prelievo
EVENTI_AGGIORNA_QTA_LISTA(
P_ID_EVENTO => p_event_id
);
-- Controlla banalmente se sono stati prelevati su altri eventi
if v_qta_imp + v_qta_da_imp > v_qta_giac then
RETURN '{"type":"warning","message":"Attenzione: Non hai abbastanza articoli di questo tipo a magazzino"}';
end if;
-- Se trovo articoli già impegnati in quel giorno mostro un messaggio - 16/11/2022
-- Continuo lo stesso ma do un messaggio di errore anzichè di successo
if(v_qta_imp > 0 and v_num_evt_imp > 0) then
RETURN '{"type":"warning","code":"'||SQLCODE||'","stack":"'||SQLERRM||'","message":"Attenzione! Articolo '||p_articolo_add||' già impegnato '||v_num_evt_imp||' '||(case when v_num_evt_imp > 1 then 'volte' else 'volta' end)||' dal '||to_char(v_data_evento - 2, 'dd-mm-yyyy')||' al '||to_char(v_data_evento + 2, 'dd-mm-yyyy')||'"}';
end if;
RETURN '{"type":"success","message":"Articolo aggiunto con successo"}';
exception when others then
RETURN '{"type":"success","message":"Articolo aggiunto con errori: '||replace(replace(SQLERRM, 'ORA-20000: Errore:', ''), '-20000 - ', '')||'"}';
end;
rollback;
return '{"type":"error","code":"","stack":"","message":"Errore sconosciuto"}';
end f_list_prelievo_add_articolo;```

View File

@@ -0,0 +1,38 @@
# F_MAX_NUMERO_EVENTI_RAGGIUNTO
## Codice Sorgente
```sql
FUNCTION F_MAX_NUMERO_EVENTI_RAGGIUNTO
(
P_GIORNO IN DATE
) RETURN NUMBER AS
v_max_eventi TB_CALENDAR_LOCKS.max_eventi%TYPE; -- Variable to hold the max_eventi value from TB_CALENDAR_LOCKS
v_event_count NUMBER; -- Variable to hold the count of events from EVENTI
BEGIN
-- Step 1: Check if P_GIORNO is present in TB_CALENDAR_LOCKS and get the max_eventi value for that day
BEGIN
SELECT max_eventi
INTO v_max_eventi
FROM TB_CALENDAR_LOCKS
WHERE giorno = P_GIORNO;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- If the date is not found in TB_CALENDAR_LOCKS, return -1 (or some other code to indicate the absence)
RETURN -1;
END;
-- Step 2: Count how many events occurred on P_GIORNO in the EVENTI table
SELECT COUNT(*)
INTO v_event_count
FROM EVENTI
WHERE TRUNC(DATA) = TRUNC(P_GIORNO); -- Use TRUNC to compare only the date part
-- Step 3: Compare the event count with the max_eventi and return the appropriate result
IF v_event_count >= v_max_eventi THEN
RETURN 1; -- Maximum number of events has been reached or exceeded
ELSE
RETURN 0; -- Maximum number of events has not been reached
END IF;
END F_MAX_NUMERO_EVENTI_RAGGIUNTO;```

View File

@@ -0,0 +1,36 @@
# F_MAX_NUM_EVENTI_CONFERMATI
## Codice Sorgente
```sql
FUNCTION F_MAX_NUM_EVENTI_CONFERMATI
(
P_EVT_DATE IN DATE
, P_MAX_EVT_NUM NUMBER
, P_BYPASS IN NUMBER
) RETURN NUMBER AS
v_evt_cnt number;
BEGIN
-- function bypass
if P_BYPASS > 0 then
return 0;
end if;
select
count(e.id) as evt_cnt
into v_evt_cnt
from eventi e
join vw_event_color c on c.id = e.id
where e.data = P_EVT_DATE
and c.status = 'Confermato';
if v_evt_cnt >= P_MAX_EVT_NUM then
return 1;
else
return 0;
end if;
END F_MAX_NUM_EVENTI_CONFERMATI;```

View File

@@ -0,0 +1,433 @@
# F_REP_ALLESTIMENTI
## Codice Sorgente
```sql
FUNCTION "F_REP_ALLESTIMENTI" ( p_data_in IN varchar2 default to_char(sysdate,'YYYYMMD'),
p_data_fi IN varchar2 default to_char(sysdate + 30,'YYYYMMD')
)
RETURN t_rep_allestimenti_tab PIPELINED AS
v_data_in varchar2(100);
v_data_fi varchar2(100);
cursor c_evento is
with t as (--select e.id, e.data, l.location, e.torta, e.confettata, e.stampa_menu
select e.id, e.data, l.location, e.torta,
e.altro_a as confettata,
e.sedia as stampa_menu
from eventi e
left join location l on e.id_location = l.id
--where data >= sysdate
where e.data between to_date(v_data_in,'YYYYMMDD') and to_date(v_data_fi,'YYYYMMDD')
and e.stato in (300, 400) -- 300 Scheda Confermata, 400 Confermato (Lista)
and e.disabled = 0
and e.deleted = 0
order by data, to_number(to_char(e.ora_evento,'HH24MI'))
)
, q as (select t.* , rownum as order_id
from t
order by data
)
, r as (select
case when order_id =1 then id else null end as id1,
case when order_id =2 then id else null end as id2,
case when order_id =3 then id else null end as id3,
case when order_id =4 then id else null end as id4,
case when order_id =5 then id else null end as id5,
case when order_id =6 then id else null end as id6,
case when order_id =7 then id else null end as id7,
case when order_id =8 then id else null end as id8,
case when order_id =9 then id else null end as id9,
case when order_id =10 then id else null end as id10,
case when order_id =11 then id else null end as id11,
case when order_id =12 then id else null end as id12,
case when order_id =1 then data else null end as data1,
case when order_id =2 then data else null end as data2,
case when order_id =3 then data else null end as data3,
case when order_id =4 then data else null end as data4,
case when order_id =5 then data else null end as data5,
case when order_id =6 then data else null end as data6,
case when order_id =7 then data else null end as data7,
case when order_id =8 then data else null end as data8,
case when order_id =9 then data else null end as data9,
case when order_id =10 then data else null end as data10,
case when order_id =11 then data else null end as data11,
case when order_id =12 then data else null end as data12,
case when order_id =1 then location else null end as location1,
case when order_id =2 then location else null end as location2,
case when order_id =3 then location else null end as location3,
case when order_id =4 then location else null end as location4,
case when order_id =5 then location else null end as location5,
case when order_id =6 then location else null end as location6,
case when order_id =7 then location else null end as location7,
case when order_id =8 then location else null end as location8,
case when order_id =9 then location else null end as location9,
case when order_id =10 then location else null end as location10,
case when order_id =11 then location else null end as location11,
case when order_id =12 then location else null end as location12,
case when order_id =1 then torta else null end as torta1,
case when order_id =2 then torta else null end as torta2,
case when order_id =3 then torta else null end as torta3,
case when order_id =4 then torta else null end as torta4,
case when order_id =5 then torta else null end as torta5,
case when order_id =6 then torta else null end as torta6,
case when order_id =7 then torta else null end as torta7,
case when order_id =8 then torta else null end as torta8,
case when order_id =9 then torta else null end as torta9,
case when order_id =10 then torta else null end as torta10,
case when order_id =11 then torta else null end as torta11,
case when order_id =12 then torta else null end as torta12,
case when order_id =1 then confettata else null end as confettata1,
case when order_id =2 then confettata else null end as confettata2,
case when order_id =3 then confettata else null end as confettata3,
case when order_id =4 then confettata else null end as confettata4,
case when order_id =5 then confettata else null end as confettata5,
case when order_id =6 then confettata else null end as confettata6,
case when order_id =7 then confettata else null end as confettata7,
case when order_id =8 then confettata else null end as confettata8,
case when order_id =9 then confettata else null end as confettata9,
case when order_id =10 then confettata else null end as confettata10,
case when order_id =11 then confettata else null end as confettata11,
case when order_id =12 then confettata else null end as confettata12,
case when order_id =1 then stampa_menu else null end as stampa_menu1,
case when order_id =2 then stampa_menu else null end as stampa_menu2,
case when order_id =3 then stampa_menu else null end as stampa_menu3,
case when order_id =4 then stampa_menu else null end as stampa_menu4,
case when order_id =5 then stampa_menu else null end as stampa_menu5,
case when order_id =6 then stampa_menu else null end as stampa_menu6,
case when order_id =7 then stampa_menu else null end as stampa_menu7,
case when order_id =8 then stampa_menu else null end as stampa_menu8,
case when order_id =9 then stampa_menu else null end as stampa_menu9,
case when order_id =10 then stampa_menu else null end as stampa_menu10,
case when order_id =11 then stampa_menu else null end as stampa_menu11,
case when order_id =12 then stampa_menu else null end as stampa_menu12
from q
)
select min(id1) as id1,
min(id2) as id2,
min(id3) as id3,
min(id4) as id4,
min(id5) as id5,
min(id6) as id6,
min(id7) as id7,
min(id8) as id8,
min(id9) as id9,
min(id10) as id10,
min(id11) as id11,
min(id12) as id12,
min(data1) as d1,
min(data2) as d2,
min(data3) as d3,
min(data4) as d4,
min(data5) as d5,
min(data6) as d6,
min(data7) as d7,
min(data8) as d8,
min(data9) as d9,
min(data10) as d10,
min(data11) as d11,
min(data12) as d12,
min(location1) as l1,
min(location2) as l2,
min(location3) as l3,
min(location4) as l4,
min(location5) as l5,
min(location6) as l6,
min(location7) as l7,
min(location8) as l8,
min(location9) as l9,
min(location10) as l10,
min(location11) as l11,
min(location12) as l12,
min(torta1) as t1,
min(torta2) as t2,
min(torta3) as t3,
min(torta4) as t4,
min(torta5) as t5,
min(torta6) as t6,
min(torta7) as t7,
min(torta8) as t8,
min(torta9) as t9,
min(torta10) as t10,
min(torta11) as t11,
min(torta12) as t12,
min(confettata1) as c1,
min(confettata2) as c2,
min(confettata3) as c3,
min(confettata4) as c4,
min(confettata5) as c5,
min(confettata6) as c6,
min(confettata7) as c7,
min(confettata8) as c8,
min(confettata9) as c9,
min(confettata10) as c10,
min(confettata11) as c11,
min(confettata12) as c12,
min(stampa_menu1) as SM1,
min(stampa_menu2) as SM2,
min(stampa_menu3) as SM3,
min(stampa_menu4) as SM4,
min(stampa_menu5) as SM5,
min(stampa_menu6) as SM6,
min(stampa_menu7) as SM7,
min(stampa_menu8) as SM8,
min(stampa_menu9) as SM9,
min(stampa_menu10) as SM10,
min(stampa_menu11) as SM11,
min(stampa_menu12) as SM12
from r;
c_evt c_evento%ROWTYPE;
type v_TOVAGLIATO_AR IS VARRAY(12) OF VARCHAR2(4000);
v_TOVAGLIATO v_TOVAGLIATO_AR;
C1 varchar2(100);
C2 varchar2(100);
C3 varchar2(100);
C4 varchar2(100);
C5 varchar2(100);
C6 varchar2(100);
C7 varchar2(100);
C8 varchar2(100);
C9 varchar2(100);
C10 varchar2(100);
C11 varchar2(100);
C12 varchar2(100);
type v_TOVAGLIOLO_AR IS VARRAY(12) OF VARCHAR2(1000);
v_TOVAGLIOLO v_TOVAGLIOLO_AR;
type v_AN_GELATO_AR IS VARRAY(12) OF VARCHAR2(1000);
v_AN_GELATO v_AN_GELATO_AR;
type v_AN_GELATO2_AR IS VARRAY(12) OF VARCHAR2(1000);
v_AN_GELATO2 v_AN_GELATO2_AR;
type v_AN_OPENBAR_AR IS VARRAY(12) OF VARCHAR2(1000);
v_AN_OPENBAR v_AN_OPENBAR_AR;
type v_AN_RUM_AR IS VARRAY(12) OF VARCHAR2(1000);
v_AN_RUM v_AN_RUM_AR;
T1 varchar2(100);
T2 varchar2(100);
T3 varchar2(100);
T4 varchar2(100);
T5 varchar2(100);
T6 varchar2(100);
T7 varchar2(100);
T8 varchar2(100);
T9 varchar2(100);
T10 varchar2(100);
T11 varchar2(100);
T12 varchar2(100);
v_appo varchar2(100);
v_dato varchar2(100);
v_id_str varchar2(100);
v_id number;
v_qry varchar2(1000);
type v_IDEVT_AR IS VARRAY(12) OF number;
v_IDEVT v_IDEVT_AR;
BEGIN
--default su date
if p_data_in is null then
v_data_in := to_char(sysdate,'YYYYMMD');
else
v_data_in := p_data_in;
end if;
if p_data_fi is null then
v_data_fi := to_char(sysdate + 30,'YYYYMMD');
else
v_data_fi := p_data_fi;
end if;
v_TOVAGLIATO := v_TOVAGLIATO_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
v_TOVAGLIOLO := v_TOVAGLIOLO_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
v_AN_GELATO := v_AN_GELATO_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
v_AN_GELATO2 := v_AN_GELATO2_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
v_AN_OPENBAR := v_AN_OPENBAR_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
v_AN_RUM := v_AN_RUM_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
v_IDEVT := v_IDEVT_AR(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
open c_evento;
fetch c_evento into c_evt;
--exit when c_evento%NOTFOUND;
--caricare su vettore gli id:
v_IDEVT(1) := c_evt.id1;
v_IDEVT(2) := c_evt.id2;
v_IDEVT(3) := c_evt.id3;
v_IDEVT(4) := c_evt.id4;
v_IDEVT(5) := c_evt.id5;
v_IDEVT(6) := c_evt.id6;
v_IDEVT(7) := c_evt.id7;
v_IDEVT(8) := c_evt.id8;
v_IDEVT(9) := c_evt.id9;
v_IDEVT(10) := c_evt.id10;
v_IDEVT(11) := c_evt.id11;
v_IDEVT(12) := c_evt.id12;
FOR i in 1 .. 12 LOOP
v_dato := '';
v_id := to_char(v_IDEVT(i));
v_TOVAGLIATO(i) := f_get_tovagliato_allestimento ('TVB', v_IDEVT(i) ) ;
v_AN_GELATO(i) := f_get_angolo_allestimento ('AN-GELAT', v_IDEVT(i) ) ;
v_AN_GELATO2(i) := f_get_angolo_allestimento ('AN-GEL-BOM', v_IDEVT(i) ) ;
--v_AN_OPENBAR(i) := f_get_angolo_allestimento ('OPEN-B', v_IDEVT(i) ) ;
v_AN_OPENBAR(i) := f_get_angolo_allestimento_OB ('%OPEN BAR%', v_IDEVT(i) ) ;
v_AN_RUM(i) := f_get_angolo_allestimento ('AN-RUM-CI', v_IDEVT(i) ) ;
END LOOP;
PIPE ROW(t_rep_allestimenti_row(c_evt.D1 ,
c_evt.D2 ,
c_evt.D3 ,
c_evt.D4 ,
c_evt.D5 ,
c_evt.D6 ,
c_evt.D7 ,
c_evt.D8 ,
c_evt.D9 ,
c_evt.D10 ,
c_evt.D11 ,
c_evt.D12 ,
c_evt.L1 ,
c_evt.L2 ,
c_evt.L3 ,
c_evt.L4 ,
c_evt.L5 ,
c_evt.L6 ,
c_evt.L7 ,
c_evt.L8 ,
c_evt.L9 ,
c_evt.L10 ,
c_evt.L11 ,
c_evt.L12 ,
v_TOVAGLIATO(1),
v_TOVAGLIATO(2),
v_TOVAGLIATO(3),
v_TOVAGLIATO(4),
v_TOVAGLIATO(5),
v_TOVAGLIATO(6),
v_TOVAGLIATO(7),
v_TOVAGLIATO(8),
v_TOVAGLIATO(9),
v_TOVAGLIATO(10),
v_TOVAGLIATO(11),
v_TOVAGLIATO(12),
c_evt.C1 ,
c_evt.C2 ,
c_evt.C3 ,
c_evt.C4 ,
c_evt.C5 ,
c_evt.C6 ,
c_evt.C7 ,
c_evt.C8 ,
c_evt.C9 ,
c_evt.C10 ,
c_evt.C11 ,
c_evt.C12 ,
v_TOVAGLIOLO(1),
v_TOVAGLIOLO(2),
v_TOVAGLIOLO(3),
v_TOVAGLIOLO(4),
v_TOVAGLIOLO(5),
v_TOVAGLIOLO(6),
v_TOVAGLIOLO(7),
v_TOVAGLIOLO(8),
v_TOVAGLIOLO(9),
v_TOVAGLIOLO(10),
v_TOVAGLIOLO(11),
v_TOVAGLIOLO(12),
v_AN_GELATO(1) || ', ' || v_AN_GELATO2(1),
v_AN_GELATO(2) || ', ' || v_AN_GELATO2(2),
v_AN_GELATO(3) || ', ' || v_AN_GELATO2(3),
v_AN_GELATO(4) || ', ' || v_AN_GELATO2(4),
v_AN_GELATO(5) || ', ' || v_AN_GELATO2(5),
v_AN_GELATO(6) || ', ' || v_AN_GELATO2(6),
v_AN_GELATO(7) || ', ' || v_AN_GELATO2(7),
v_AN_GELATO(8) || ', ' || v_AN_GELATO2(8),
v_AN_GELATO(9) || ', ' || v_AN_GELATO2(9),
v_AN_GELATO(10) || ', ' || v_AN_GELATO2(10),
v_AN_GELATO(11) || ', ' || v_AN_GELATO2(11),
v_AN_GELATO(12) || ', ' || v_AN_GELATO2(12),
v_AN_OPENBAR(1),
v_AN_OPENBAR(2),
v_AN_OPENBAR(3),
v_AN_OPENBAR(4),
v_AN_OPENBAR(5),
v_AN_OPENBAR(6),
v_AN_OPENBAR(7),
v_AN_OPENBAR(8),
v_AN_OPENBAR(9),
v_AN_OPENBAR(10),
v_AN_OPENBAR(11),
v_AN_OPENBAR(12),
v_AN_RUM(1),
v_AN_RUM(2),
v_AN_RUM(3),
v_AN_RUM(4),
v_AN_RUM(5),
v_AN_RUM(6),
v_AN_RUM(7),
v_AN_RUM(8),
v_AN_RUM(9),
v_AN_RUM(10),
v_AN_RUM(11),
v_AN_RUM(12),
c_evt.T1 ,
c_evt.T2 ,
c_evt.T3 ,
c_evt.T4 ,
c_evt.T5 ,
c_evt.T6 ,
c_evt.T7 ,
c_evt.T8 ,
c_evt.T9 ,
c_evt.T10 ,
c_evt.T11 ,
c_evt.T12 ,
c_evt.SM1 ,
c_evt.SM2 ,
c_evt.SM3 ,
c_evt.SM4 ,
c_evt.SM5 ,
c_evt.SM6 ,
c_evt.SM7 ,
c_evt.SM8 ,
c_evt.SM9 ,
c_evt.SM10 ,
c_evt.SM11 ,
c_evt.SM12
));
close c_evento;
RETURN;
END;```

View File

@@ -0,0 +1,245 @@
# F_REP_CUCINA
## Codice Sorgente
```sql
FUNCTION "F_REP_CUCINA" (p_data_in IN varchar2,p_data_fi IN varchar2)
RETURN t_rep_cucina_tab PIPELINED AS
cursor c_evento is
select e.id,
e.data,
l.LOCATION,
e.cliente,
t.DESCRIZIONE,
e.ORA_CERIMONIA,
e.ORA_EVENTO,
e.ALLERGIE,
e.torta,
e.CONFETTATA,
e.STAMPA_MENU,
e.extra_info,
e.cliente_email,
e.cliente_tel,
e.referente_tel,
e.distanza_location,
e.buffet_iniziale,
e.buffet_finale,
e.primi,
e.secondi,
e.vini,
e.extra_costi
from eventi e
left join location l on e.id_location = l.id
join tb_tipi_evento t on e.cod_tipo = t.cod_tipo
where e.data between to_date(p_data_in,'YYYYMMDD') and to_date(p_data_fi,'YYYYMMDD')
and e.stato = 300 -- Considero soltanto le schede confermate
and e.disabled = 0
and e.deleted = 0;
v_data date;
v_LOCATION varchar2(4000);
v_cliente varchar2(4000);
v_DESCRIZIONE varchar2(4000);
v_ORA_CERIMONIA varchar2(4000);
v_ORA_EVENTO varchar2(4000);
v_TOT_ADULTI number;
v_TOT_KINDER number;
v_TOT_BABY number;
v_TOT_STAFF number;
v_TOT_INVITATI number;
v_ALLERGIE varchar2(4000);
v_TORTA varchar2(4000);
v_CONFETTATA varchar2(4000);
v_STAMPA_MENU varchar2(4000);
v_angoli varchar2(4000);
v_EXTRA_INFO varchar2(4000);
v_NOTE_ADULTI varchar2(4000);
v_NOTE_KINDER varchar2(4000);
v_NOTE_BABY varchar2(4000);
v_NOTE_STAFF varchar2(4000);
v_cliente_email varchar2(4000) := '';
v_cliente_tel varchar2(4000) := '';
v_referente_tel varchar2(4000) := '';
v_distanza_location varchar2(4000) := '';
v_buffet_iniziale varchar2(4000) := '';
v_buffet_finale varchar2(4000) := '';
v_primi varchar2(4000) := '';
v_secondi varchar2(4000) := '';
v_vini varchar2(4000) := '';
v_extra_costi varchar2(4000) := '';
v_event_id number;
BEGIN
for c in c_evento
loop
begin
v_TOT_ADULTI := 0;
v_TOT_KINDER := 0;
v_TOT_BABY := 0;
v_TOT_STAFF := 0;
v_TOT_INVITATI := 0;
v_angoli := 0;
v_NOTE_ADULTI := '';
v_NOTE_KINDER := '';
v_NOTE_BABY := '';
v_NOTE_STAFF := '';
v_cliente_email := c.cliente_email;
v_cliente_tel := c.cliente_tel;
v_referente_tel := c.referente_tel;
v_distanza_location := c.distanza_location;
v_buffet_iniziale := c.buffet_iniziale;
v_buffet_finale := c.buffet_finale;
v_primi := c.primi;
v_secondi := c.secondi;
v_vini := c.vini;
v_extra_costi := c.extra_costi;
v_event_id := c.id;
--ospiti
select nvl(sum(o.NUMERO),0)
into v_TOT_ADULTI
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
--join tb_tipi_ospiti tos on o.cod_tipo_ospite = tos.COD_TIPO
where e.id = c.id
and o.cod_tipo_ospite = 8; -- adulti
begin
select o.NOTE
into v_NOTE_ADULTI
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
where e.id = c.id
and o.cod_tipo_ospite = 8; -- adulti
exception when no_data_found then null;
end;
select nvl(sum(o.NUMERO),0)
into v_TOT_KINDER
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
--join tb_tipi_ospiti tos on o.cod_tipo_ospite = tos.COD_TIPO
where e.id = c.id
and o.cod_tipo_ospite = 5; --Kinder
begin
select o.NOTE
into v_NOTE_KINDER
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
where e.id = c.id
and o.cod_tipo_ospite = 5; --Kinder
exception when no_data_found then null;
end;
select nvl(sum(o.NUMERO),0)
into v_TOT_BABY
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
--join tb_tipi_ospiti tos on o.cod_tipo_ospite = tos.COD_TIPO
where e.id = c.id
and o.cod_tipo_ospite = 6; -- Baby
begin
select o.NOTE
into v_NOTE_BABY
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
where e.id = c.id
and o.cod_tipo_ospite = 6; -- Baby
exception when no_data_found then null;
end;
select nvl(sum(o.NUMERO),0)
into v_TOT_STAFF
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
--join tb_tipi_ospiti tos on o.cod_tipo_ospite = tos.COD_TIPO
where e.id = c.id
and o.cod_tipo_ospite = 7; -- Staff
begin
select o.NOTE
into v_NOTE_STAFF
from eventi e
join eventi_det_ospiti o on e.id = o.id_evento
where e.id = c.id
and o.cod_tipo_ospite = 7; -- Staff
exception when no_data_found then null;
end;
select nvl(e.tot_ospiti,0)
into v_TOT_INVITATI
from eventi e
where e.id = c.id;
--angoli "speciali"
v_angoli := '';
for a in ( select trim(substr(a.descrizione || ' - ' || p.note,1,1000)) descrizione from eventi e
join eventi_det_prel p on e.id=p.id_evento
join articoli a on p.cod_articolo=a.cod_articolo
where a.flg_cucina = 1
and e.id = c.id
)
loop
v_angoli := a.descrizione || ', ' || v_angoli ;
end loop;
PIPE ROW(t_rep_cucina_row( c.data,c.location,c.cliente,
c.DESCRIZIONE,
to_char(c.ORA_CERIMONIA,'HH24:MI'),
to_char(c.ORA_EVENTO,'HH24:MI'),
v_TOT_ADULTI ,
v_TOT_KINDER ,
v_TOT_BABY ,
v_TOT_STAFF ,
v_TOT_INVITATI ,
c.ALLERGIE ,
c.TORTA ,
c.CONFETTATA ,
c.STAMPA_MENU ,
v_angoli,
c.extra_info ,
v_NOTE_ADULTI ,
v_NOTE_KINDER ,
v_NOTE_BABY ,
v_NOTE_STAFF ,
v_cliente_email ,
v_cliente_tel ,
v_referente_tel ,
v_distanza_location ,
v_buffet_iniziale ,
v_buffet_finale ,
v_primi ,
v_secondi ,
v_vini ,
v_extra_costi ,
v_event_id
));
--exception when others
-- then null;
exception when others
then
RAISE_APPLICATION_ERROR(-20000, 'Errore: ' || SQLCODE || ' - ' || SUBSTR(SQLERRM, 1 , 64));
end;
end loop;
RETURN;
END;```

View File

@@ -0,0 +1,20 @@
# F_USER_IN_ROLE
## Codice Sorgente
```sql
FUNCTION F_USER_IN_ROLE
(
P_USER IN VARCHAR2
, P_ROLE IN VARCHAR2
) RETURN NUMBER AS
v_has_role number := 0;
BEGIN
select count(column_value)
into v_has_role
from tb_config, table(split(strvalue, ':'))
where upper(name) = upper(P_ROLE)
and upper(column_value) = upper(P_USER);
return case when v_has_role > 0 then 1 else 0 end;
END F_USER_IN_ROLE;```

View File

@@ -0,0 +1,15 @@
# F_USER_IN_ROLE_STR
## Codice Sorgente
```sql
FUNCTION F_USER_IN_ROLE_STR
(
P_USER IN VARCHAR2
, P_ROLE IN VARCHAR2
) RETURN VARCHAR2 AS
v_has_role number := 0;
BEGIN
return case when F_USER_IN_ROLE(P_USER, P_ROLE) > 0 then 'true' else 'false' end;
END F_USER_IN_ROLE_STR;
```

View File

@@ -0,0 +1,19 @@
# GET_PARAM_VALUE
## Codice Sorgente
```sql
function get_param_value(p_name varchar2)
return varchar2 as
v_result varchar2(255);
begin
select strvalue
into v_result
from tb_config
where upper(name) = upper(p_name);
return v_result;
exception when others then
return null;
end;
```

View File

@@ -0,0 +1,36 @@
# MY_INSTR
## Codice Sorgente
```sql
function my_instr( p_value varchar2,
p_delim varchar2 )
return number
as
i number;
l_length number;
begin
if p_value is null then
return null;
end if;
i := 1;
l_length := length(p_value);
for i in 1..l_length
loop
if substr(p_value, i, length(p_delim)) = p_delim then
return i;
end if;
end loop;
return 0;
end;
```

127
docs/functions/README.md Normal file
View File

@@ -0,0 +1,127 @@
# Funzioni Database
Questa cartella contiene la documentazione di tutte le 23 funzioni del database.
## Funzioni Calcolo Quantità e Disponibilità
| Funzione | Ritorno | Descrizione |
|----------|---------|-------------|
| [F_GET_QTA_IMPEGNATA](F_GET_QTA_IMPEGNATA.md) | NUMBER | Quantità impegnata di un articolo in un range di date |
| [F_GET_TOT_OSPITI](F_GET_TOT_OSPITI.md) | NUMBER | Totale ospiti per evento (opzionale per tipo) |
| [F_GET_OSPITI](F_GET_OSPITI.md) | TABLE | Dettaglio ospiti per evento (funzione pipelined) |
| [F_LIST_PRELIEVO_ADD_ARTICOLO](F_LIST_PRELIEVO_ADD_ARTICOLO.md) | VARCHAR2 (JSON) | Aggiunge articolo alla lista prelievo con validazioni |
## Funzioni Calcolo Costi
| Funzione | Ritorno | Descrizione |
|----------|---------|-------------|
| [F_GET_COSTO_ARTICOLO](F_GET_COSTO_ARTICOLO.md) | NUMBER | Costo unitario articolo a una data specifica |
## Funzioni Validazione
| Funzione | Ritorno | Descrizione |
|----------|---------|-------------|
| [F_EVENTO_SCADUTO](F_EVENTO_SCADUTO.md) | NUMBER (0/1) | Verifica se preventivo è scaduto |
| [F_MAX_NUMERO_EVENTI_RAGGIUNTO](F_MAX_NUMERO_EVENTI_RAGGIUNTO.md) | NUMBER (-1/0/1) | Verifica limite eventi giornaliero |
| [F_MAX_NUM_EVENTI_CONFERMATI](F_MAX_NUM_EVENTI_CONFERMATI.md) | NUMBER (0/1) | Verifica limite eventi confermati |
| [F_CI_SONO_EVENTI_CONFERMATI](F_CI_SONO_EVENTI_CONFERMATI.md) | NUMBER (0/1) | Check esistenza eventi confermati in data/location |
## Funzioni Report
| Funzione | Ritorno | Descrizione |
|----------|---------|-------------|
| [F_REP_ALLESTIMENTI](F_REP_ALLESTIMENTI.md) | TABLE | Dati per report allestimenti (pipelined) |
| [F_REP_CUCINA](F_REP_CUCINA.md) | TABLE | Dati per report cucina (pipelined) |
| [F_GET_ANGOLO_ALLESTIMENTO](F_GET_ANGOLO_ALLESTIMENTO.md) | VARCHAR2 | Descrizione angolo allestimento |
| [F_GET_ANGOLO_ALLESTIMENTO_OB](F_GET_ANGOLO_ALLESTIMENTO_OB.md) | VARCHAR2 | Descrizione angolo open bar |
| [F_GET_TOVAGLIATO_ALLESTIMENTO](F_GET_TOVAGLIATO_ALLESTIMENTO.md) | VARCHAR2 | Descrizione tovagliato |
## Funzioni Autorizzazione
| Funzione | Ritorno | Descrizione |
|----------|---------|-------------|
| [F_USER_IN_ROLE](F_USER_IN_ROLE.md) | NUMBER (0/1) | Verifica appartenenza utente a ruolo |
| [F_USER_IN_ROLE_STR](F_USER_IN_ROLE_STR.md) | VARCHAR2 | Verifica ruolo (ritorna stringa) |
## Funzioni Utility
| Funzione | Ritorno | Descrizione |
|----------|---------|-------------|
| [F_DAY_TO_NAME](F_DAY_TO_NAME.md) | VARCHAR2 | Converte numero giorno in nome italiano |
| [STRING_TO_TABLE_ENUM](STRING_TO_TABLE_ENUM.md) | TABLE | Converte stringa delimitata in tabella |
| [GET_PARAM_VALUE](GET_PARAM_VALUE.md) | VARCHAR2 | Recupera valore parametro da TB_CONFIG |
| [SPLIT](SPLIT.md) | TABLE | Split stringa in elementi |
| [MY_INSTR](MY_INSTR.md) | NUMBER | Funzione INSTR personalizzata |
| [CLOB2BLOB](CLOB2BLOB.md) | BLOB | Conversione CLOB → BLOB |
| [EXTDATE_GET_ITA](EXTDATE_GET_ITA.md) | VARCHAR2 | Formatta data in italiano esteso |
## Dettaglio Funzioni Critiche
### F_GET_QTA_IMPEGNATA
```sql
FUNCTION F_GET_QTA_IMPEGNATA(
p_codart VARCHAR2,
p_data_from DATE,
p_data_to DATE DEFAULT NULL
) RETURN NUMBER
```
**Logica:**
- Interroga `V_IMPEGNI_ARTICOLI`
- Somma quantità impegnate nel range di date
- Se `p_data_to` è NULL, usa `p_data_from`
### F_EVENT0_SCADUTO
```sql
FUNCTION F_EVENTO_SCADUTO(
DATA_SCADENZA IN DATE,
STATO_EVENTO IN NUMBER,
STATO_FROM IN NUMBER,
STATO_TO IN NUMBER
) RETURN NUMBER
```
**Logica:**
- Ritorna 1 se `TRUNC(DATA_SCADENZA) <= TRUNC(SYSDATE)`
AND `STATO_EVENTO BETWEEN STATO_FROM AND STATO_TO`
- Altrimenti ritorna 0
### F_LIST_PRELIEVO_ADD_ARTICOLO
```sql
FUNCTION F_LIST_PRELIEVO_ADD_ARTICOLO(
p_event_id NUMBER,
p_articolo_add VARCHAR2,
p_qta_aperitivo NUMBER := 0,
p_qta_seduto NUMBER := 0,
p_qta_dolci NUMBER := 0
) RETURN VARCHAR2
```
**Logica:**
1. Verifica esistenza evento
2. Verifica esistenza articolo
3. Recupera giacenza articolo
4. Controlla impegni in date vicine (±2 giorni)
5. Inserisce record in `EVENTI_DET_PREL`
6. Chiama `EVENTI_AGGIORNA_QTA_LISTA`
7. Ritorna JSON con esito:
- `{"type":"success","message":"..."}`
- `{"type":"warning","message":"..."}`
- `{"type":"error","code":"...","stack":"...","message":"..."}`
### F_GET_COSTO_ARTICOLO
```sql
FUNCTION F_GET_COSTO_ARTICOLO(
p_cod_articolo VARCHAR2,
p_date DATE
) RETURN NUMBER
```
**Logica:**
1. Cerca costo in `COSTI_ARTICOLI` alla data esatta
2. Se non trovato, prende ultimo costo disponibile
3. Se non trovato nulla, ritorna 0

46
docs/functions/SPLIT.md Normal file
View File

@@ -0,0 +1,46 @@
# SPLIT
## Codice Sorgente
```sql
FUNCTION "SPLIT"
(
p_list varchar2,
p_del varchar2 := ','
) return string_list
is
l_idx integer;
l_list varchar2(32767) := p_list;
l_value varchar2(32767);
l_retval string_list;
begin
l_retval := string_list();
loop
--l_idx := instr(l_list,p_del);
l_idx := my_instr(l_list,p_del);
l_retval.extend;
if l_idx > 0 then
--pipe row(substr(l_list,1,l_idx-1));
--l_list := substr(l_list,l_idx+length(p_del));
l_retval(l_retval.count) := substr(l_list, 1, l_idx - 1);
l_list := substr(l_list,l_idx+length(p_del));
else
--pipe row(l_list);
--exit;
l_retval(l_retval.count) := l_list;
exit;
end if;
end loop;
return l_retval;
end split;
```

View File

@@ -0,0 +1,26 @@
# STRING_TO_TABLE_ENUM
## Codice Sorgente
```sql
FUNCTION "STRING_TO_TABLE_ENUM" (p_string VARCHAR2, v_level in number default 0, p_separator varchar2 default ':') RETURN ENUM_TABLE_TYPE pipelined IS
conta number := 0;
BEGIN
FOR c IN ( select ROW_NUMBER() OVER (ORDER BY ROWNUM) id, result
from (
with test as (
select p_string col
from dual
)
select nvl(regexp_substr(col, '[^' || p_separator || ']+', 1, level), '') result
from test
connect by level <= length(regexp_replace(col, '[^' || p_separator || ']+')) + 1)
)
LOOP
conta := conta + 1;
if v_level = 0 or ( v_level = conta ) then
pipe row(enum_table_object(c.id,c.result));
end if;
END LOOP;
RETURN;
END STRING_TO_TABLE_ENUM;```