create or replace procedure P_REPORT_MONITORAGGIORECIPIENT(p_mese_comp varchar2) is
-- parametro in ingresso nel formato mm/yyyy
  v_ora_inizio number;
  v_ora_fine number;
begin
  -- estrazione fascia oraria per inserimento richiesta
  select to_number(replace(inizio,':')), to_number(replace(fine,':'))
  into v_ora_inizio, v_ora_fine
  from mnp.MNP_FASCIA_ORARIA_MONITOR_REC;
  
  -- popolamento tabella
  insert into MNP_DW_REPORT_MONITORAGGIO_REC
  (mese_comp, tipo_giorno_inserimento, fascia_oraria_richiesta, fascia_oraria_invio, tipo_cliente, numero_richieste)
  select p_mese_comp, tipo_giorno, tipologia, tipologia_invio, tipo_cliente, count(*) from (
  select rep.*,
         case 
         when to_char(DATA_RICHIESTA, 'HH24miss')<=v_ora_inizio then '1'
         when to_char(DATA_RICHIESTA, 'HH24miss')>v_ora_inizio and to_char(DATA_RICHIESTA, 'HH24miss')<= v_ora_fine then '2'
         when to_char(DATA_RICHIESTA, 'HH24miss')>v_ora_fine then '3'
         end tipologia,
         DECODE(DWH.FUN_GIORNI_LAVORATIVI(data_invio, data_richiesta), 0, 0, 1, 1, 2) tipologia_invio
  from (SELECT   ric."ID_RICHIESTA" ID_RICHIESTA,
              NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE") DATA_RICHIESTA,
              ric."COD_OP_DON" COD_OP_DON,
              xml_out.data_invio data_invio,
              rich_rec.tipo_cliente tipo_cliente,
              d.tip_gio tipo_giorno
        FROM (SELECT   msp.id_richiesta id_richiesta,
                       msp.data_richiesta data_richiesta,
                       msp.data_ricezione data_ricezione,
                       msp.codice_operatore_donating cod_op_don
              FROM mnp.mnp_msp_in_rec msp
              WHERE msp.progetto_ad_hoc = 'N'
              UNION
              SELECT msc.id_richiesta id_richiesta,
                     msc.data_richiesta data_richiesta,
                     msc.data_ricezione data_ricezione,
                     msc.codice_operatore_donating cod_op_don
              FROM  mnp.mnp_msc_in_rec msc
              WHERE msc.progetto_ad_hoc = 'N'
              UNION
              SELECT bit.id_richiesta id_richiesta,
                     NULL data_richiesta, -- DATA_RICHIESTA NON CONTENENTE ORE:MI:SS
                     bit.data_ricezione_file data_ricezione,
                     bit.donating_cod_op cod_op_don
               FROM mnp.mnp_bit_in_rec bit
              WHERE bit.progetto_ad_hoc IS null) ric,
              mnp.mnp_xml_out xml_out,
              mnp.mnp_xml_richiesta_out richieste_out,
              mnp.mnp_gestione_richiesta_rec rich_rec,
              MNP.S_DIM_TEMPO d
        WHERE xml_out.nome_file = richieste_out.nome_file
          AND xml_out.tipo_file = 1
          AND richieste_out.id_richiesta = ric.id_richiesta
          AND ric.id_richiesta = rich_rec.id_richiesta
          AND ric.cod_op_don IN 
            ( SELECT   id_operatore
              FROM   mnp.mnp_anagrafica_operatori
              WHERE   tipo_operatore = 'RETE')
          AND d.data = trunc(NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE"))
        UNION -- Donor Virtuale
        SELECT   ric."ID_RICHIESTA" ID_RICHIESTA,
                 NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE") DATA_RICHIESTA,
                 ric."COD_OP_DON" COD_OP_DON,
                 not_don_out.data_invio data_invio,
                 rich_don_virt.tipo_cliente tipo_cliente, 
                 d.tip_gio tipo_giorno                       
        FROM (SELECT  msp.id_richiesta id_richiesta,
                      msp.data_richiesta data_richiesta,
                      msp.data_ricezione data_ricezione,
                      msp.codice_operatore_donating cod_op_don
              FROM   mnp.mnp_msp_in_rec msp
              WHERE  msp.progetto_ad_hoc = 'N'
              UNION
              SELECT  msc.id_richiesta id_richiesta,
                      msc.data_richiesta data_richiesta,
                      msc.data_ricezione data_ricezione,
                      msc.codice_operatore_donating cod_op_don
              FROM   mnp.mnp_msc_in_rec msc
              WHERE  msc.progetto_ad_hoc = 'N'
              UNION
              SELECT  bit.id_richiesta id_richiesta,
                      NULL data_richiesta, -- DATA_RICHIESTA NON CONTENENTE ORE:MI:SS
                      bit.data_ricezione_file data_ricezione,
                      bit.donating_cod_op cod_op_don
              FROM   mnp.mnp_bit_in_rec bit
              WHERE  bit.progetto_ad_hoc IS null) ric,
              mnp.mnp_gest_rich_donor_virt rich_don_virt,
              mnp.mnp_mvno_notifica_don_out not_don_out,
              MNP.S_DIM_TEMPO d
        WHERE not_don_out.id_richiesta_dbc = ric.id_richiesta
          AND not_don_out.tipo_evento = '01'
          AND ric.id_richiesta = rich_don_virt.id_richiesta
          AND ric.cod_op_don IN
            (SELECT   id_operatore
                FROM   mnp.mnp_anagrafica_operatori
               WHERE   tipo_operatore = 'VIRT'
                       AND gestore_aom = 'TIMG')
          AND d.data = trunc(NVL(ric."DATA_RICHIESTA", ric."DATA_RICEZIONE"))) rep
  where data_richiesta between to_date('01/'||p_mese_comp,'dd/mm/yyyy') and last_day(to_date('01/'||p_mese_comp,'dd/mm/yyyy'))
  )
  group by tipo_giorno, tipologia, tipologia_invio, tipo_cliente;
  
  commit;

exception when others then

  DBMS_OUTPUT.put_line ('Errore nel popolamento della tabella MNP_DW_REPORT_MONITORAGGIO_REC ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
  
end P_REPORT_MONITORAGGIORECIPIENT;
/
