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

246 lines
8.1 KiB
Markdown

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