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