CREATE OR REPLACE PACKAGE 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_SLA3GG_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_SLA3GG_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_SLATC_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
  PROCEDURE CARICAMENTO_SLATC_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);

  PROCEDURE CARICAMENTO_SLA_SE(dataRif IN DATE);


END PKG_POPOLA_SLA_SE;
/
CREATE OR REPLACE package body PKG_POPOLA_SLA_SE as

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


proc_name constant varchar2(30) := 'CARICAMENTO_SLA3GG_DONOR_VIRT';
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,
  PROCESSO,
  TIPO_SLA,
  MESE,
  REC_EFF,
  DON_EFF,
  ID_RICHIESTA,
  MSISDN,
  TIPO_CLIENTE,
  NOME_OT,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  DATA_AGG
)
SELECT 
  SEQ_DW_SLA_SE_IN_OUT.NEXTVAL,
  a.processo,
  a.tipo_messaggio,
  a.mese_comp_finale,
  a.recipient_effettivo,
  a.donor_effettivo,
  a.id_richiesta,
  b.Msisdn,
  b.Tipo_cliente,
  b.Nome_ot,
  b.data_validazione_max,
  b.business_id,
  SYSDATE
FROM MNP_DW_SLA_3GG_OUT a, mnp.MNP_GEST_RICH_DONOR_VIRT b
WHERE
  a.mese_comp_finale= TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy')  AND   
  a.tipo_messaggio='SLA1' AND
  a.recipient_effettivo IN ('TIMG') AND
  a.donor_effettivo in ('NOVE', 'COOP', 'TISC') AND
  a.processo = ('V') AND
  a.id_richiesta  = b.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_SLA3GG_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_SLA3GG_DONOR_VIRT;



procedure CARICAMENTO_SLA3GG_REC_VIRT(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_SLA3GG_REC_VIRT';
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,
  PROCESSO,
  TIPO_SLA,
  MESE,
  REC_EFF,
  DON_EFF,
  ID_RICHIESTA,
  MSISDN,
  DESCR_STATO,
  TIPO_CLIENTE,
  NOME_OT,
  DATA_VALIDAZIONE_MAX,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  CAUSALE_RIF,
  DATA_RICEZIONE_RICHIESTA,
  DATA_CUT_OVER,
  DATA_ESPL_DON,
  DATA_ESPL_TP,
  DATA_ESPL_GISP,
  DATA_AGG
)
SELECT 
  SEQ_DW_SLA_SE_IN_OUT.NEXTVAL,
  a.processo,
  a.tipo_messaggio,
  a.mese_comp_finale,
  a.recipient_effettivo,
  a.donor_effettivo,
  a.id_richiesta,
  b.Msisdn,
  d.descr_stato,
  b.Tipo_cliente,
  b.Nome_ot,
  b.data_validazione_max,
  b.business_id_donating,
  b.business_id_recipient,
  b.Codice_rifiuto_validazione,
  b.Dataricezionerichiesta,
  b.Data_cut_over,
  c.data_i_o,
  c.data_i_o, -- tbv
  c.data_i_o, -- tbv
  SYSDATE
FROM MNP_DW_SLA_3GG_OUT a, mnp.MNP_GEST_RICH_REC_VIRT b, mnp.MNP_STORICO_RICH_REC_VIRT c, mnp.MNP_STATO_REC_VIRT d
WHERE
  a.mese_comp_finale=  TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND 
  a.recipient_effettivo IN ('NOVE', 'COOP', 'TISC') AND
  a.donor_effettivo in ('TIMG', 'NOVE', 'COOP', 'TISC') AND
  a.processo = ('V') AND
  d.id_stato = b.stato AND
  a.id_richiesta  = b.id_richiesta AND
  a.id_richiesta  = c.id_richiesta AND
  c.stato_a = 12;  -- EVASA



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_SLA3GG_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_SLA3GG_REC_VIRT;


procedure CARICAMENTO_SLATC_DONOR_VIRT(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_SLATC_DONOR_VIRT';
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,
  PROCESSO,
  TIPO_SLA,
  MESE,
  REC_EFF,
  DON_EFF,
  ID_RICHIESTA,
  MSISDN,
  TIPO_CLIENTE,
  DON_RETE,
  DATA_ESPL_DON,
  BUSINESS_ID_DONATING,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  DATA_AGG
)
SELECT 
  SEQ_DW_SLA_SE_IN_OUT.NEXTVAL,
  a.processo,
  a.tipo_messaggio,
  a.mese_comp_finale,
  a.recipient_effettivo,
  a.donor_effettivo,
  a.id_richiesta,
  b.Msisdn,
  b.Tipo_cliente,
  'TIMG',
  e.data_i_o,
  b.business_id,
  c.DESCR_STATO,
  d.credito,
  d.data_notifica_recipient,
  SYSDATE
FROM MNP_DW_SLA_TC_OUT a, mnp.MNP_GEST_RICH_DONOR_VIRT b, mnp.MNP_STATO_DON_VIRT c, mnp.MNP_GEST_RICH_DON_VIRT_TC d, mnp.MNP_STORICO_RICH_DON_VIRT e
WHERE
a.mese_comp_finale = TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND 
a.tipo_messaggio IN ('SLA X', 'SLA Y', 'SLA Z') AND
a.recipient_effettivo IN ('TIMG') AND
a.donor_effettivo in ('NOVE', 'COOP', 'TISC') AND
a.processo = ('V') AND
a.id_richiesta  = b.id_richiesta AND
a.id_richiesta=d.id_richiesta AND
a.id_richiesta=e.id_richiesta AND
c.ID_STATO= b.STATO AND
e.stato_a = 11;  -- EVASA;



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_SLATC_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_SLATC_DONOR_VIRT;


procedure CARICAMENTO_SLATC_REC_VIRT(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_SLATC_REC_VIRT';
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,
  PROCESSO,
  TIPO_SLA,
  MESE,
  REC_EFF,
  DON_EFF,
  ID_RICHIESTA,
  MSISDN,
  TIPO_CLIENTE,
  DON_RETE,
  DATA_ESPL_DON,
  BUSINESS_ID_DONATING,
  BUSINESS_ID_RECIPIENT,
  DESCR_STATO,
  CREDITO,
  DATA_NOTIF_RECIPIENT,
  DATA_CUT_OVER,
  DATA_AGG
)
SELECT 
  SEQ_DW_SLA_SE_IN_OUT.NEXTVAL,
  a.processo,
  a.tipo_messaggio,
  a.mese_comp_finale,
  a.recipient_effettivo,
  a.donor_effettivo,
  a.id_richiesta,
  b.Msisdn,
  b.Tipo_cliente,
  'TIMG',
  e.data_i_o,
  b.business_id_donating,
  b.business_id_recipient,
  c.DESCR_STATO,
  d.credito,
  d.data_notifica_recipient,
  b.data_cut_over,
  SYSDATE
FROM MNP_DW_SLA_TC_OUT a, mnp.MNP_GEST_RICH_REC_VIRT b, mnp.MNP_STATO_REC_VIRT c, mnp.MNP_GEST_RICH_REC_VIRT_TC d, mnp.MNP_STORICO_RICH_REC_VIRT e
WHERE
a.mese_comp_finale = TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy') AND
a.tipo_messaggio IN ('SLA X', 'SLA Y', 'SLA Z') AND
a.recipient_effettivo in ('NOVE', 'COOP', 'TISC') AND
a.donor_effettivo in ('TIMG','NOVE', 'COOP', 'TISC') AND
a.processo = ('V') AND
a.id_richiesta  = b.id_richiesta AND
a.id_richiesta=d.id_richiesta AND
a.id_richiesta=e.id_richiesta AND
c.ID_STATO= b.STATO AND
e.stato_a = 12;  -- EVASA;;



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_SLATC_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
      RETURN;
END CARICAMENTO_SLATC_REC_VIRT;



procedure CARICAMENTO_SLA_SE(dataRif IN Date) IS

  cod_errore  NUMBER (1);

  cod_errore_sla3GG_don_virt  NUMBER (1):=0;
  cod_errore_sla3GG_rec_virt  NUMBER (1):=0;
  cod_errore_slaTC_don_virt  NUMBER (1):=0;
  cod_errore_slaTC_rec_virt  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 TO_CHAR(MESE,'mm/yyyy')=TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy');

  cod_errore := 0;


-- caricamento dati:
 CARICAMENTO_SLA3GG_DONOR_VIRT (dataRif,cod_errore_sla3GG_don_virt);
 CARICAMENTO_SLA3GG_REC_VIRT (dataRif,cod_errore_sla3GG_rec_virt);
 CARICAMENTO_SLATC_DONOR_VIRT (dataRif,cod_errore_slaTC_don_virt);
 CARICAMENTO_SLATC_REC_VIRT (dataRif,cod_errore_slaTC_rec_virt);




  cod_errore := cod_errore_sla3GG_don_virt + cod_errore_sla3GG_rec_virt+cod_errore_slaTC_don_virt +cod_errore_slaTC_rec_virt;



  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;
/
