CREATE OR REPLACE PACKAGE DWH.PKG_POPOLA_SLA_SE AS
/******************************************************************************
   NAME:       PACKAGE PKG_POPOLA_SLA_SE
   PURPOSE:

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        02/11/2011             1. Created this package.
******************************************************************************/


  PROCEDURE CARICAMENTO_DONOR_SLA1 (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_DONOR_SLATC (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_RECIPIENT_SLA_TC (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_RECIPIENT_SLA_2 (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_RECIPIENT_SLA_2AOM (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_SLA_SE(dataRif IN DATE);


END PKG_POPOLA_SLA_SE;
/
CREATE OR REPLACE package body DWH.PKG_POPOLA_SLA_SE as

procedure CARICAMENTO_DONOR_SLA1(dataRif IN DATE,cod_errore   OUT      NUMBER) IS
--procedura per il caricamento dello SLA1 del DONOR VIRTUALE MVNO


proc_name constant varchar2(30) := 'CARICAMENTO_DONOR_SLA1';
D_ini DATE;
D_fine DATE;


BEGIN

cod_errore := 0;
D_ini:=sysdate;

DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.TIPO_CLIENTE
          ELSE 
              C.TIPO_CLIENTE
        END AS  TIPO_CLIENTE,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.NOME_OT
          ELSE 
              C.NOME_OT
        END AS NOME_OT,
         A.MSISDN,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATA_VALIDAZIONE_MAX
          ELSE 
              C.DATA_VALIDAZIONE_MAX
        END AS  DATA_VALIDAZIONE_MAX,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.BUSINESS_ID
          ELSE 
              C.BUSINESS_ID
        END AS BUSINESS_ID_DONATING, 
         NULL AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
          CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATARICEZIONERICHIESTA
          ELSE 
              C.DATARICEZIONERICHIESTA
        END AS DATA_RICEZIONE_RICHIESTA,
         A.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         NULL AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_3GG_OUT A,MNP.MNP_GEST_RICH_DONOR_VIRT B,MNP.MNP_GESTIONE_RICHIESTA C
 WHERE   A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy')   AND
         A.DONOR_EFFETTIVO IN 
           ('COOP', 'NOVE', 'TISC')
  AND    A.RECIPIENT_RETE IN
           ('H3GI', 'WIND', 'OPIV', 'NOVA', 'TIMG')
  AND    A.TIPO_MESSAGGIO IN ('SLA1', 'SLA2')
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+);

COMMIT;

D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE:  FINE  PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440));

EXCEPTION
   WHEN OTHERS
   THEN
      cod_errore := 1;
      DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_DONOR_SLA1 ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_DONOR_SLA1;



procedure CARICAMENTO_DONOR_SLATC(dataRif IN DATE,cod_errore   OUT      NUMBER) IS
--procedura per il caricamento dello degli SLA di:  RECIPIENT VIRTUALE MVNO, DONOR VIRTUALE M2M e RECIPIENT VIRTUALE M2M


proc_name constant varchar2(30) := 'CARICAMENTO_DONOR_SLATC';
D_ini DATE;
D_fine DATE;


BEGIN

cod_errore := 0;
D_ini:=sysdate;

DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.TIPO_CLIENTE
          ELSE 
              C.TIPO_CLIENTE
        END AS  TIPO_CLIENTE,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.NOME_OT
          ELSE 
              C.NOME_OT
        END AS NOME_OT,
         A.MSISDN,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATA_VALIDAZIONE_MAX
          ELSE 
              C.DATA_VALIDAZIONE_MAX
        END AS  DATA_VALIDAZIONE_MAX,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.BUSINESS_ID
          ELSE 
              C.BUSINESS_ID
        END AS BUSINESS_ID_DONATING, 
         NULL AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
          CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATARICEZIONERICHIESTA
          ELSE 
              C.DATARICEZIONERICHIESTA
        END AS DATA_RICEZIONE_RICHIESTA,
         A.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         NULL AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_3GG_OUT A,MNP.MNP_GEST_RICH_DONOR_VIRT B,MNP.MNP_GESTIONE_RICHIESTA C
 WHERE   A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
         A.DONOR_EFFETTIVO IN 
           ('COOP', 'NOVE', 'TISC')
 AND     A.TIPO_MESSAGGIO = 'SLA2' 
 AND     A.RECIPIENT_RETE IN ('H3GI', 'WIND', 'OPIV', 'NOVA', 'TIMG') 
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+) ;


INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.TIPO_CLIENTE
          ELSE 
              C.TIPO_CLIENTE
        END AS  TIPO_CLIENTE,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.NOME_OT
          ELSE 
              C.NOME_OT
        END AS NOME_OT,
         A.MSISDN,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATA_VALIDAZIONE_MAX
          ELSE 
              C.DATA_VALIDAZIONE_MAX
        END AS  DATA_VALIDAZIONE_MAX,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.BUSINESS_ID
          ELSE 
              C.BUSINESS_ID_DONATING
        END AS BUSINESS_ID_DONATING, 
          CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.BUSINESS_ID
          ELSE 
              C.BUSINESS_ID_RECIPIENT
        END  AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
          CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATARICEZIONERICHIESTA
          ELSE 
              C.DATARICEZIONERICHIESTA
        END AS DATA_RICEZIONE_RICHIESTA,
         CASE
          WHEN RECIPIENT_EFFETTIVO='TIMG' THEN 
              B.DATA_CUT_OVER
          ELSE 
              C.DATA_CUT_OVER
        END AS DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         CASE 
         WHEN RECIPIENT_EFFETTIVO='TIMG' THEN (SELECT Z.CREDITO FROM MNP.MNP_GEST_RICH_DON_VIRT_TC Z WHERE Z.ID_RICHIESTA=A.ID_RICHIESTA)
         ELSE  (SELECT Z.CREDITO FROM MNP.MNP_GEST_RICH_REC_VIRT_TC Z WHERE Z.ID_RICHIESTA=A.ID_RICHIESTA)        
         END AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_TC_OUT A,MNP.MNP_GEST_RICH_DONOR_VIRT B,MNP.MNP_GEST_RICH_REC_VIRT C
 WHERE   A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
         A.DONOR_EFFETTIVO IN 
           ('COOP', 'NOVE', 'TISC')
  AND    A.TIPO_MESSAGGIO IN ('SLA X','SLA Y','SLA Z')  
  AND    A.RECIPIENT_EFFETTIVO IN ('TIMG','COOP', 'NOVE', 'TISC') 
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+);
    
COMMIT;

D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE:  FINE  PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440));

EXCEPTION
   WHEN OTHERS
   THEN
      cod_errore := 1;
      DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_DONOR_SLATC ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_DONOR_SLATC;


procedure CARICAMENTO_RECIPIENT_SLA_TC(dataRif IN DATE,cod_errore   OUT      NUMBER) IS
--procedura per il caricamento dello degli SLA di TC:  DONOR VIRTUALE

proc_name constant varchar2(30) := 'CARICAMENTO_RECIPIENT_SLA_TC';
D_ini DATE;
D_fine DATE;


BEGIN

cod_errore := 0;
D_ini:=sysdate;

DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         B.TIPO_CLIENTE AS  TIPO_CLIENTE,
         B.NOME_OT AS NOME_OT,
         A.MSISDN,
         B.DATA_VALIDAZIONE_MAX AS  DATA_VALIDAZIONE_MAX,
         B.BUSINESS_ID_DONATING AS BUSINESS_ID_DONATING, 
         B.BUSINESS_ID_RECIPIENT AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
         B.DATARICEZIONERICHIESTA AS DATA_RICEZIONE_RICHIESTA,
         B.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         C.CREDITO AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_TC_OUT A,MNP.MNP_GEST_RICH_REC_VIRT B, MNP.MNP_GEST_RICH_REC_VIRT_TC C
  WHERE  A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
         A.RECIPIENT_EFFETTIVO IN ('COOP', 'NOVE', 'TISC')
 AND     A.TIPO_MESSAGGIO IN ('SLA X','SLA Y','SLA Z')
  AND    A.DONOR_EFFETTIVO IN('TIMG','COOP', 'NOVE', 'TISC')
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA= C.ID_RICHIESTA(+);
INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
  SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         B.TIPO_CLIENTE AS  TIPO_CLIENTE,
         B.NOME_OT AS NOME_OT,
         A.MSISDN,
         B.DATA_VALIDAZIONE_MAX AS  DATA_VALIDAZIONE_MAX,
         B.BUSINESS_ID AS BUSINESS_ID_DONATING, 
         B.BUSINESS_ID AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
         B.DATARICEZIONERICHIESTA AS DATA_RICEZIONE_RICHIESTA,
         B.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         C.CREDITO AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_TC_OUT A,MNP.MNP_GESTIONE_RICHIESTA_REC B, MNP.MNP_GEST_RICH_REC_TC C
  WHERE  A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
         A.RECIPIENT_EFFETTIVO IN ('COOP', 'NOVE', 'TISC')
 AND     A.TIPO_MESSAGGIO IN ('SLA X','SLA Y','SLA Z')
  AND    A.DONOR_RETE IN('H3GI', 'WIND', 'OPIV', 'NOVA')
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA= C.ID_RICHIESTA(+);


COMMIT;

D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE:  FINE  PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440));

EXCEPTION
   WHEN OTHERS
   THEN
      cod_errore := 1;
      DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_RECIPIENT_SLA_TC ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_RECIPIENT_SLA_TC;


procedure CARICAMENTO_RECIPIENT_SLA_2(dataRif IN DATE,cod_errore   OUT      NUMBER) IS
--procedura per il caricamento dello degli SLA di TC:  RECIPIENT VIRTUALE MVNO, DONOR VIRTUALE M2M e RECIPIENT VIRTUALE M2M

proc_name constant varchar2(30) := 'CARICAMENTO_RECIPIENT_SLA_2';
D_ini DATE;
D_fine DATE;


BEGIN

cod_errore := 0;
D_ini:=sysdate;

DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         B.TIPO_CLIENTE AS  TIPO_CLIENTE,
         B.NOME_OT AS NOME_OT,
         A.MSISDN,
         B.DATA_VALIDAZIONE_MAX  AS  DATA_VALIDAZIONE_MAX,
         B.BUSINESS_ID_DONATING  AS BUSINESS_ID_DONATING, 
         B.BUSINESS_ID_RECIPIENT  AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
         B.DATARICEZIONERICHIESTA AS DATA_RICEZIONE_RICHIESTA,
         A.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         C.CREDITO AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_3GG_OUT A,MNP.MNP_GEST_RICH_REC_VIRT B,MNP.MNP_GEST_RICH_REC_VIRT_TC C
  WHERE  A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
         A.RECIPIENT_EFFETTIVO IN  ('COOP', 'NOVE', 'TISC')
  AND    A.TIPO_MESSAGGIO IN ('SLA1','SLA2','SLA3') AND A.DONOR_EFFETTIVO IN ('TIMG','COOP', 'NOVE', 'TISC') 
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+);

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         B.TIPO_CLIENTE AS  TIPO_CLIENTE,
         B.NOME_OT AS NOME_OT,
         A.MSISDN,
         B.DATA_VALIDAZIONE_MAX  AS  DATA_VALIDAZIONE_MAX,
         B.BUSINESS_ID_DONATING  AS BUSINESS_ID_DONATING, 
         B.BUSINESS_ID_RECIPIENT  AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
         B.DATARICEZIONERICHIESTA AS DATA_RICEZIONE_RICHIESTA,
         B.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         C.CREDITO AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_TC_OUT A,MNP.MNP_GEST_RICH_REC_VIRT B,MNP.MNP_GEST_RICH_REC_VIRT_TC C
  WHERE  A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
         A.RECIPIENT_EFFETTIVO IN  ('COOP', 'NOVE', 'TISC')
 AND     A.TIPO_MESSAGGIO = 'SLA X' AND A.DONOR_EFFETTIVO = 'TIMG' 
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+);

COMMIT;

D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE:  FINE  PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440));

EXCEPTION
   WHEN OTHERS
   THEN
      cod_errore := 1;
      DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_RECIPIENT_SLA_2 ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_RECIPIENT_SLA_2;

procedure CARICAMENTO_RECIPIENT_SLA_2AOM(dataRif IN DATE,cod_errore   OUT      NUMBER) IS
--procedura per il caricamento dello degli SLA di TC:  RECIPIENT VIRTUALE MVNO, DONOR VIRTUALE M2M e RECIPIENT VIRTUALE M2M

proc_name constant varchar2(30) := 'CARICAMENTO_RECIPIENT_SLA_2AOM';
D_ini DATE;
D_fine DATE;


BEGIN

cod_errore := 0;
D_ini:=sysdate;

DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.TIPO_CLIENTE
          ELSE 
              C.TIPO_CLIENTE
        END AS  TIPO_CLIENTE,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.NOME_OT
          ELSE 
              C.NOME_OT
        END AS NOME_OT,
         A.MSISDN,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.DATA_VALIDAZIONE_MAX
          ELSE 
              C.DATA_VALIDAZIONE_MAX
        END AS  DATA_VALIDAZIONE_MAX,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.BUSINESS_ID_DONATING
          ELSE 
              C.BUSINESS_ID
        END AS BUSINESS_ID_DONATING, 
         CASE
         WHEN DONOR_EFFETTIVO='TIMG' THEN
             B.BUSINESS_ID_RECIPIENT
          ELSE 
             C.BUSINESS_ID
          END AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
          CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.DATARICEZIONERICHIESTA
          ELSE 
              C.DATARICEZIONERICHIESTA
        END AS DATA_RICEZIONE_RICHIESTA,
         A.DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         CASE
         WHEN DONOR_EFFETTIVO='TIMG' THEN (SELECT Z.CREDITO FROM MNP.MNP_GEST_RICH_REC_VIRT_TC Z WHERE Z.ID_RICHIESTA=A.ID_RICHIESTA)
         ELSE (SELECT Z.CREDITO FROM MNP.MNP_GEST_RICH_REC_TC Z WHERE Z.ID_RICHIESTA=A.ID_RICHIESTA)
         END AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_3GG_OUT A,MNP.MNP_GEST_RICH_REC_VIRT B,MNP.MNP_GESTIONE_RICHIESTA_REC C
  WHERE  A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
          A.RECIPIENT_EFFETTIVO IN ('COOP', 'NOVE', 'TISC')
  AND    A.DONOR_RETE IN ('H3GI', 'WIND', 'OPIV', 'NOVA', 'TIMG') 
  AND     A.TIPO_MESSAGGIO IN( 'SLA1','SLA2','SLA3')  
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+);

INSERT INTO MNP_DW_SLA_SE_IN_OUT
(
   UNIQUE_ID,
  TIPO_SLA,
  PROCESSO,
  ID_RICHIESTA,
  MESE,
  DON_EFF,
  REC_EFF,
  REC_RETE,
  DON_RETE,
  TIPO_CLIENTE,
  NOME_OT,
  MSISDN,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DATA_ESPL_DON,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_TP,
  DATA_ESPL_MSS,
  DATA_ESPL_GISP,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  CAUSALE_RIF)
SELECT   SEQ_DW_SLA_SE_IN_OUT.NEXTVAL AS UNIQUE_ID,
         A.TIPO_MESSAGGIO AS TIPO_SLA,
         A.PROCESSO,
         A.ID_RICHIESTA,
         A.MESE_COMP_FINALE AS MESE,
         A.DONOR_EFFETTIVO AS DON_EFF,
         A.RECIPIENT_EFFETTIVO AS REC_EFF,
         A.RECIPIENT_RETE AS REC_RETE,
         A.DONOR_RETE AS DON_RETE,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.TIPO_CLIENTE
          ELSE 
              C.TIPO_CLIENTE
        END AS  TIPO_CLIENTE,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.NOME_OT
          ELSE 
              C.NOME_OT
        END AS NOME_OT,
         A.MSISDN,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.DATA_VALIDAZIONE_MAX
          ELSE 
              C.DATA_VALIDAZIONE_MAX
        END AS  DATA_VALIDAZIONE_MAX,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.BUSINESS_ID_DONATING
          ELSE 
              C.BUSINESS_ID
        END AS BUSINESS_ID_DONATING, 
         CASE
         WHEN DONOR_EFFETTIVO='TIMG' THEN
             B.BUSINESS_ID_RECIPIENT
          ELSE 
             C.BUSINESS_ID
          END AS BUSINESS_ID_RECIPIENT,
         NULL AS DATA_ESPL_DON,
          CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.DATARICEZIONERICHIESTA
          ELSE 
              C.DATARICEZIONERICHIESTA
        END AS DATA_RICEZIONE_RICHIESTA,
         CASE
          WHEN DONOR_EFFETTIVO='TIMG' THEN 
              B.DATA_CUT_OVER
          ELSE 
              C.DATA_CUT_OVER
        END AS DATA_CUT_OVER,
         NULL AS DATA_ESPL_TP,
         NULL AS DATA_ESPL_MSS,
         NULL AS DATA_ESPL_GISP,
         NULL AS DESCR_STATO,
         CASE
         WHEN DONOR_EFFETTIVO='TIMG' THEN (SELECT Z.CREDITO FROM MNP.MNP_GEST_RICH_REC_VIRT_TC Z WHERE Z.ID_RICHIESTA=A.ID_RICHIESTA)
         ELSE (SELECT Z.CREDITO FROM MNP.MNP_GEST_RICH_REC_TC Z WHERE Z.ID_RICHIESTA=A.ID_RICHIESTA)
         END AS CREDITO,
         NULL AS DATA_NOTIF_RECIPIENT,
         NULL AS CAUSALE_RIF
  FROM   MNP_DW_SLA_TC_OUT A,MNP.MNP_GEST_RICH_REC_VIRT B,MNP.MNP_GESTIONE_RICHIESTA_REC C
  WHERE  A.MESE_COMP_FINALE= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
          A.RECIPIENT_EFFETTIVO IN ('COOP', 'NOVE', 'TISC')
  AND    A.DONOR_RETE IN ('H3GI', 'WIND', 'OPIV', 'NOVA', 'TIMG') 
  AND     A.TIPO_MESSAGGIO = 'SLA X'  
  AND    A.ID_RICHIESTA= B.ID_RICHIESTA(+)
  AND    A.ID_RICHIESTA=C.ID_RICHIESTA(+);

COMMIT;

D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE:  FINE  PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440));

EXCEPTION
   WHEN OTHERS
   THEN
      cod_errore := 1;
      DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_RECIPIENT_SLA_2AOM ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_RECIPIENT_SLA_2AOM;

procedure CARICAMENTO_SLA_SE(dataRif IN Date) IS

  cod_errore  NUMBER (1);

  err_donor_sla1          NUMBER (1):=0;
  err_donor_slatc         NUMBER (1):=0;
  err_recipient_sla_tc    NUMBER (1):=0;
  err_recipient_sla_2     NUMBER (1):=0;
  err_recipient_sla_2_aom NUMBER (1):=0;


proc_name constant varchar2(30) := 'CARICAMENTO_SLA_SE';
D_ini DATE;
D_fine DATE;



BEGIN
dbms_output.enable(9999999);
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE: INIZIO PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
   -----------------------------------------------------
   -- DELETE PREVENTIVA DELLA TABELLA
   -----------------------------------------------------
   DELETE MNP_DW_SLA_SE_IN_OUT WHERE MESE =TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy');

  cod_errore := 0;


-- caricamento dati:
 CARICAMENTO_DONOR_SLA1 (dataRif,err_donor_sla1);
 CARICAMENTO_DONOR_SLATC (dataRif,err_donor_slatc);
 CARICAMENTO_RECIPIENT_SLA_TC (dataRif,err_recipient_sla_tc);
 CARICAMENTO_RECIPIENT_SLA_2 (dataRif,err_recipient_sla_2);
 CARICAMENTO_RECIPIENT_SLA_2AOM(dataRif,err_recipient_sla_2_aom);



  cod_errore := err_donor_sla1 + err_donor_slatc+err_recipient_sla_tc +err_recipient_sla_2+err_recipient_sla_2_aom;



  IF cod_errore = 0
   THEN
    -- tutto a posto
    DBMS_OUTPUT.put_line ('Caricamento dati SLA avvenuto.');
    ELSE
 -- tutto na sola
 DBMS_OUTPUT.put_line ('CARICAMENTO DATI SLA PARZIALE: PROCESSO TERMINATO CON ERRORI VERIFICARE LOG!');
   END IF;

  COMMIT;
  D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_POPOLA_SLA_SE:  FINE  PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440));


EXCEPTION
WHEN OTHERS THEN
  cod_errore := 1;
  DBMS_OUTPUT.put_line ('Errore nel caricamento dati Sla ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
  RETURN;
END CARICAMENTO_SLA_SE;


END PKG_POPOLA_SLA_SE;
/