create or replace procedure CARICAMENTO_REPORT_TCR(P_DATA DATE) is
begin
  -- cancellazione del pregresso
  BEGIN
    
    DELETE MNP_DW_REPORT_TCR 
    WHERE data_di_riferimento < ADD_MONTHS(sysdate,-13);
    --
    COMMIT;
    
    DBMS_OUTPUT.put_line('CANCELLAZIONE DEL PREGRESSO (DATI PIU'' VECCHI DI 13 MESI) '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('ERRORE IN CANCELLAZIONE DEL PREGRESSO '|| SQLERRM
      || ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  END;

  BEGIN
    DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO RECIPIENT '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
    -- CARICAMENTO DATI AMBITO RECIPIENT
    INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2, 
      msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
    SELECT R.ID_RICHIESTA, 0 BLOCCO, SRTC.DATA_NOTIFICA_RECIPIENT, R.DATA_CUT_OVER_EFF,RTC.CREDITO, RTC.CREDITO,
      R.MSISDN, R.CODICE_PRE_POST_PAGATO, R.CODICE_OPERATORE_DON_EFF, R.CODICE_OPERATORE_REC_EFF
    FROM MNP.MNP_GESTIONE_RICHIESTA_REC R, MNP.MNP_GEST_RICH_REC_TC RTC, MNP.MNP_STOR_RICH_REC_TC SRTC
    WHERE R.ID_RICHIESTA = RTC.ID_RICHIESTA
      AND RTC.ID_RICHIESTA = SRTC.ID_RICHIESTA
      AND R.CODICE_OPERATORE_REC_EFF = 'TIMG'
      AND SRTC.STATO_DA = -1 --PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
      AND SRTC.STATO_A = 7   -- 
      AND SRTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
    UNION
    SELECT R.ID_RICHIESTA, 1 BLOCCO, SRTC.DATA_NOTIFICA_RECIPIENT, R.DATA_CUT_OVER_EFF, RTC.CREDITO, RTC.CREDITO,
      R.MSISDN, R.CODICE_PRE_POST_PAGATO, R.CODICE_OPERATORE_DON_EFF, R.CODICE_OPERATORE_REC_EFF
    FROM MNP.MNP_GESTIONE_RICHIESTA_REC R, MNP.MNP_GEST_RICH_REC_TC RTC, MNP.MNP_STOR_RICH_REC_TC SRTC
    WHERE R.ID_RICHIESTA = RTC.ID_RICHIESTA
      AND RTC.ID_RICHIESTA = SRTC.ID_RICHIESTA
      AND R.CODICE_OPERATORE_REC_EFF = 'TIMG'
      AND SRTC.STATO_DA = 2 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
      AND SRTC.STATO_A = 7  -- 
      AND SRTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
    UNION
    SELECT R.ID_RICHIESTA, 2 BLOCCO, SRTC.DATA_NOTIFICA_RECIPIENT, R.DATA_CUT_OVER_EFF, RTC.CREDITO, RTC.CREDITO,
      R.MSISDN, R.CODICE_PRE_POST_PAGATO, R.CODICE_OPERATORE_DON_EFF, R.CODICE_OPERATORE_REC_EFF
    FROM MNP.MNP_GESTIONE_RICHIESTA_REC R, MNP.MNP_GEST_RICH_REC_TC RTC, MNP.MNP_STOR_RICH_REC_TC SRTC
    WHERE R.ID_RICHIESTA = RTC.ID_RICHIESTA
      AND RTC.ID_RICHIESTA = SRTC.ID_RICHIESTA
      AND R.CODICE_OPERATORE_REC_EFF = 'TIMG'
      AND SRTC.STATO_DA = 3 -- PASSAGGIO DI STATO DELLE RICHIESTE CON VERIFICA CREDITO ANOMALO
      AND SRTC.STATO_A = 7  -- 
      AND SRTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
    --
    --
    COMMIT;
    --
    DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO RECIPIENT '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO RECIPIENT '|| SQLERRM
      || ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  END;
  
  BEGIN
    -- CARICAMENTO DATI AMBITO DONOR
    DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO DONOR '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
    --
    INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2, 
      msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
    SELECT D.ID_RICHIESTA, 0 BLOCCO, SDTC.DATA_NOTIFICA_RECIPIENT, D.DATA_CUT_OVER_EFF, DTC.CREDITO, DTC.CREDITO,
      D.MSISDN, D.CODICE_PRE_POST_PAGATO, D.CODICE_OPERATORE_DON_EFF, D.CODICE_OPERATORE_REC_EFF
    FROM MNP.MNP_GESTIONE_RICHIESTA D, MNP.MNP_GEST_RICH_DON_TC DTC, MNP.MNP_STOR_RICH_DON_TC SDTC
    WHERE D.ID_RICHIESTA = DTC.ID_RICHIESTA
      AND DTC.ID_RICHIESTA = SDTC.ID_RICHIESTA
      AND D.CODICE_OPERATORE_DON_EFF = 'TIMG'
      AND SDTC.STATO_DA = 1  -- PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
      AND SDTC.STATO_A = 7   -- 
      AND SDTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
    UNION
    SELECT D.ID_RICHIESTA, 1 BLOCCO, SDTC.DATA_NOTIFICA_RECIPIENT, D.DATA_CUT_OVER_EFF, DTC.CREDITO, DTC.CREDITO, 
      D.MSISDN, D.CODICE_PRE_POST_PAGATO, D.CODICE_OPERATORE_DON_EFF, D.CODICE_OPERATORE_REC_EFF
    FROM MNP.MNP_GESTIONE_RICHIESTA D, MNP.MNP_GEST_RICH_DON_TC DTC, MNP.MNP_STOR_RICH_DON_TC SDTC
    WHERE D.ID_RICHIESTA = DTC.ID_RICHIESTA
      AND DTC.ID_RICHIESTA = SDTC.ID_RICHIESTA
      AND D.CODICE_OPERATORE_DON_EFF = 'TIMG'
      AND SDTC.STATO_DA = 4 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
      AND SDTC.STATO_A = 7  -- 
      AND SDTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
    --
    COMMIT;
    --
    DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO DONOR '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));  
    --
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO DONOR '|| SQLERRM
      || ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  END;
  --
  --


  BEGIN
    DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO RECIPIENT VIRTULAE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
    -- CARICAMENTO DATI AMBITO RECIPIENT VIRTULAE
    INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2, 
      msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
    SELECT RV.ID_RICHIESTA, 0 BLOCCO, SRVTC.DATA_NOTIFICA_RECIPIENT, RV.DATA_CUT_OVER_EFF,RVTC.CREDITO, RVTC.CREDITO,
      RV.MSISDN, RV.CODICE_PRE_POST_PAGATO, RV.CODICE_OPERATORE_DONATING, RV.CODICE_OPERATORE_RECIPIENT
    FROM MNP.MNP_GEST_RICH_REC_VIRT RV, MNP.MNP_GEST_RICH_REC_VIRT_TC RVTC, MNP.MNP_STOR_RICH_REC_VIRT_TC  SRVTC
    WHERE RV.ID_RICHIESTA = RVTC.ID_RICHIESTA
      AND RVTC.ID_RICHIESTA = SRVTC.ID_RICHIESTA
      AND SRVTC.STATO_DA = 1 --PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
      AND SRVTC.STATO_A = 7   -- 
      AND SRVTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
    UNION
    SELECT RV.ID_RICHIESTA, 1 BLOCCO, SRVTC.DATA_NOTIFICA_RECIPIENT, RV.DATA_CUT_OVER_EFF, RVTC.CREDITO, RVTC.CREDITO,
      RV.MSISDN, RV.CODICE_PRE_POST_PAGATO, RV.CODICE_OPERATORE_DONATING, RV.CODICE_OPERATORE_RECIPIENT
    FROM MNP.MNP_GEST_RICH_REC_VIRT RV, MNP.MNP_GEST_RICH_REC_VIRT_TC RVTC, MNP.MNP_STOR_RICH_REC_VIRT_TC  SRVTC
    WHERE RV.ID_RICHIESTA = RVTC.ID_RICHIESTA
      AND RVTC.ID_RICHIESTA = SRVTC.ID_RICHIESTA
      AND SRVTC.STATO_DA = 4 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
      AND SRVTC.STATO_A = 7  -- 
      AND SRVTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
    --
    --
    COMMIT;
    --
    DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO RECIPIENT VIRTULAE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO RECIPIENT VIRTULAE '|| SQLERRM
      || ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  END;
  
  BEGIN
    -- CARICAMENTO DATI AMBITO DONOR VIRTUALE
    DBMS_OUTPUT.put_line('INIZIO CARICAMENTO TCR AMBITO DONOR VIRTUALE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
    --
    INSERT INTO MNP_DW_REPORT_TCR (id_richiesta, blocco, data_di_riferimento, data_dco_eff, tcr1, tcr2, 
      msisdn, codice_pre_post_pagato, codice_operatore_don_eff, codice_operatore_rec_eff)
    SELECT DV.ID_RICHIESTA, 0 BLOCCO, SDVTC.DATA_NOTIFICA_RECIPIENT, DV.DATA_CUT_OVER_EFF, DVTC.CREDITO, DVTC.CREDITO,
      DV.MSISDN, DV.CODICE_PRE_POST_PAGATO, DV.CODICE_OPERATORE_DONATING, DV.CODICE_OPERATORE_RECIPIENT
    FROM MNP.MNP_GEST_RICH_DONOR_VIRT  DV, MNP.MNP_GEST_RICH_DON_VIRT_TC  DVTC, MNP.MNP_STOR_RICH_DON_VIRT_TC SDVTC
    WHERE DV.ID_RICHIESTA = DVTC.ID_RICHIESTA
      AND DVTC.ID_RICHIESTA = SDVTC.ID_RICHIESTA
      AND SDVTC.STATO_DA = 6  -- PASSAGGIO DI STATO DELLE RICHIESTE SENZA BLOCCO
      AND SDVTC.STATO_A = 7   -- 
      AND SDVTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
    UNION
    SELECT DV.ID_RICHIESTA, 1 BLOCCO, SDVTC.DATA_NOTIFICA_RECIPIENT, DV.DATA_CUT_OVER_EFF, DVTC.CREDITO, DVTC.CREDITO, 
      DV.MSISDN, DV.CODICE_PRE_POST_PAGATO, DV.CODICE_OPERATORE_DONATING, DV.CODICE_OPERATORE_RECIPIENT
    FROM MNP.MNP_GEST_RICH_DONOR_VIRT  DV, MNP.MNP_GEST_RICH_DON_VIRT_TC  DVTC, MNP.MNP_STOR_RICH_DON_VIRT_TC SDVTC
    WHERE DV.ID_RICHIESTA = DVTC.ID_RICHIESTA
      AND DVTC.ID_RICHIESTA = SDVTC.ID_RICHIESTA
      AND SDVTC.STATO_DA = 2 -- PASSAGGIO DI STATO DELLE RICHIESTE CON BLOCCO IMPORTO
      AND SDVTC.STATO_A = 6  -- 
      AND SDVTC.DATA_LAVORAZIONE = TRUNC(P_DATA)
    UNION
      SELECT DV.ID_RICHIESTA, 2 BLOCCO, SDVTC.DATA_NOTIFICA_RECIPIENT, DV.DATA_CUT_OVER_EFF, DVTC.CREDITO, DVTC.CREDITO,
        DV.MSISDN, DV.CODICE_PRE_POST_PAGATO, DV.CODICE_OPERATORE_DONATING, DV.CODICE_OPERATORE_RECIPIENT
      FROM MNP.MNP_GEST_RICH_DONOR_VIRT  DV, MNP.MNP_GEST_RICH_DON_VIRT_TC  DVTC, MNP.MNP_STOR_RICH_DON_VIRT_TC SDVTC
      WHERE DV.ID_RICHIESTA = DVTC.ID_RICHIESTA
        AND DVTC.ID_RICHIESTA = SDVTC.ID_RICHIESTA
        AND SDVTC.STATO_DA = 3 -- PASSAGGIO DI STATO DELLE RICHIESTE CON VERIFICA CREDITO ANOMALO
        AND SDVTC.STATO_A = 6  -- 
        AND SDVTC.DATA_LAVORAZIONE = TRUNC(P_DATA);
    --
    COMMIT;
    --
    DBMS_OUTPUT.put_line('FINE CARICAMENTO TCR AMBITO DONOR VIRTUALE '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));  
    --
  EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.put_line('ERRORE CARICAMENTO TCR AMBITO DONOR VIRTUALE '|| SQLERRM
      || ' '|| TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  END;


  --
  DBMS_OUTPUT.put_line('CARICAMENTO REPORT TCR TERMINATO '||TO_CHAR(SYSDATE,'DD/MM/YYYY'));
  --

end CARICAMENTO_REPORT_TCR;
/
