Files
gateway-mnp-dbc/dbcmnpsrc/FE/mnpapp/script/dbUpDate/KitLuglio10/pkgSla3GG.sql
2024-05-13 12:54:14 +02:00

2841 lines
108 KiB
SQL
Raw Blame History

CREATE OR REPLACE PACKAGE PKG_CALCOLO_SLA_PENALI_3GG AS
/******************************************************************************
NAME: PKG_CALCOLO_SLA_PENALI_3GG
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 11/03/2010 1. Created this package.
******************************************************************************/
PROCEDURE CARICAMENTO_SLA0_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA1_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA2_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA3_RECIPIENT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA0_DONOR (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA1_DONOR (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA2_DONOR (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA3_DONOR (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA1_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA2_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA3_DONOR_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA1_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA2_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA3_REC_VIRT (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA1_REC_VIRT_M2M (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA2_REC_VIRT_M2M (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CARICAMENTO_SLA3_REC_VIRT_M2M (dataRif IN DATE,cod_errore OUT NUMBER);
PROCEDURE CALCOLO_SLA_PENALI(dataRif IN DATE);
END PKG_CALCOLO_SLA_PENALI_3GG;
/
CREATE OR REPLACE package body PKG_CALCOLO_SLA_PENALI_3GG as
procedure CARICAMENTO_SLA0_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS
temp_data_in DATE;
temp_data_fin DATE;
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_RECIPIENT';
D_ini DATE;
D_fine DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
dataFinale DATE;
CURSOR record_sla
IS
SELECT rich_out.ID_RICHIESTA AS idRichiesta
,'SLA0' AS tipoMessaggio
,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS dataMessaggio
,rich_rec.CODICE_OPERATORE_DONATING AS donorRete
,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL AS terzaParte
,xml_out.TIPO_PROCESSO AS processo
,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom
,rich_rec.codice_gruppo AS codiceGruppo
,ack_out.NOME_FILE AS nomeFile
,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS tIniziale
,to_date( SUBSTR(ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS tFinale
,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver
,rich_rec.MSISDN AS msIsdn
,ack_in.NOME_FILE AS ackIniziale
,ack_out.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
-- AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY')
AS meseCompFinale
,xml_out.NOME_FILE AS nomeFileIniziale
,xml_in.NOME_FILE AS nomeFileFinale
,to_date( SUBSTR( RICH_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS dataRicIn
FROM mnp.MNP_XML_RICHIESTA_OUT rich_out
,mnp.MNP_XML_ACK_IN ack_in
,mnp.MNP_XML_OUT xml_out
,mnp.MNP_XML_ACK_OUT ack_out
,mnp.MNP_XML_IN xml_in
,mnp.MNP_XML_RICHIESTA_IN RICH_in
,mnp.MNP_GESTIONE_RICHIESTA_REC RICH_rec
WHERE rich_out.NOME_FILE = xml_out.NOME_FILE
AND xml_in.NOME_FILE = rich_in.NOME_FILE ------calcolo pic
AND xml_in.TIPO_FILE = 5
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND ack_in.NOME_FILE_RIFERITO = rich_out.NOME_FILE
AND xml_out.TIPO_FILE =1 ----ATTIVAZIONE
AND rich_rec.ID_RICHIESTA = rich_in.ID_RICHIESTA
AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA
AND rich_rec.STATO = 5
AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' )
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) ;
BEGIN
temp_data_in := NULL;
temp_data_fin := NULL;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
ora_fin_ftemp2 := null;
min_fin_ftemp2 := null;
sec_fin_ftemp2 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE 1
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 1;
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE 5
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 5;
cod_errore := 0;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
-- SE IL FILE '1' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_INIZIALE AL GIORNO LAVORATIVO SUCCESSIVO
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1);
ELSE
temp_data_in := rec.tIniziale;
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE AL GIORNO LAVORATIVO SUCCESSIVO
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataRicIn;
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 > 0
then
begin
dataFinale:=fun_giorni_piu(temp_data_in,0); /*data attesa evento finale */
--giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,0) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta_rec c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT ACK_INIZIALE
INTO ackInizialeLetto
FROM MNP_DW_SLA_3GG_OUT
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
-- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta
IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,DONOR_RETE = rec.donorRete
,RECIPIENT_RETE = rec.recipientRete
,TERZA_PARTE = rec.terzaParte
,PROCESSO = rec.processo
,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim
,NOME_FILE = rec.nomeFile
,T_INIZIALE=temp_data_in
,T_FINALE=temp_data_fin
,DATA_CUT_OVER=rec.dataCutOver
,MSISDN=rec.msIsdn
,ACK_INIZIALE=rec.ackIniziale
,ACK_FINALE=rec.ackFinale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_INIZIALE=rec.nomeFileIniziale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NUMERO_GIORNI_RITARDO=giorni_ritardo
,PENALE=penale
,PROC_NAME=proc_name
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
END IF;
END;
end;
END IF;
END LOOP;
COMMIT;
D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA0_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA0_RECIPIENT;
procedure CARICAMENTO_SLA1_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS
temp_data_in DATE;
temp_data_fin DATE;
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_RECIPIENT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_out.ID_RICHIESTA AS idRichiesta
,'SLA1' AS tipoMessaggio
,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS dataMessaggio
,rich_rec.CODICE_OPERATORE_DONATING AS donorRete
,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL AS terzaParte
,xml_out.TIPO_PROCESSO AS processo
,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom
,rich_rec.codice_gruppo AS codiceGruppo
,ack_out.NOME_FILE AS nomeFile
,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS tIniziale
,to_date( SUBSTR(ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS tFinale
,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver
,rich_rec.MSISDN AS msIsdn
,ack_in.NOME_FILE AS ackIniziale
,ack_out.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) + 1
-- AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY')
AS meseCompFinale
,xml_out.NOME_FILE AS nomeFileIniziale
,xml_in.NOME_FILE AS nomeFileFinale
,to_date( SUBSTR( RICH_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )
AS dataRicIn
FROM mnp.MNP_XML_RICHIESTA_OUT rich_out,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_XML_OUT xml_out ,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_RICHIESTA_IN rich_in ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_GESTIONE_RICHIESTA_REC rich_rec
WHERE rich_out.NOME_FILE = xml_out.NOME_FILE
AND ack_in.NOME_FILE_RIFERITO = rich_out.NOME_FILE
AND xml_in.NOME_FILE =RICH_in.NOME_FILE
AND xml_out.TIPO_FILE = 1 ---ATTIVAZIONE
AND xml_in.NOME_FILE = rich_in.NOME_FILE
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND xml_in.TIPO_FILE =2 ----validazione
AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA
AND rich_rec.ID_RICHIESTA = rich_in.ID_RICHIESTA
AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' )
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS(dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
ora_fin_ftemp2 := null;
min_fin_ftemp2 := null;
sec_fin_ftemp2 := null;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 1;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 2;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1);
ELSE
temp_data_in := rec.tIniziale;
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataRicIn;
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >1
then
BEGIN
dataFinale:=fun_giorni_piu(temp_data_in,1); /*data attesa evento finale*/
--giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,1) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta_rec c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT ACK_INIZIALE
INTO ackInizialeLetto
FROM MNP_DW_SLA_3GG_OUT
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
-- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta
IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,DONOR_RETE = rec.donorRete
,RECIPIENT_RETE = rec.recipientRete
,TERZA_PARTE = rec.terzaParte
,PROCESSO = rec.processo
,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim
,NOME_FILE = rec.nomeFile
,T_INIZIALE=temp_data_in
,T_FINALE=temp_data_fin
,DATA_CUT_OVER=rec.dataCutOver
,MSISDN=rec.msIsdn
,ACK_INIZIALE=rec.ackIniziale
,ACK_FINALE=rec.ackFinale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_INIZIALE=rec.nomeFileIniziale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NUMERO_GIORNI_RITARDO=giorni_ritardo
,PENALE=penale
,NUMERO_SIM=numero_sim
,PROC_NAME=proc_name
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
END IF;
END;
END;
END IF;
END LOOP;
COMMIT;
D_finE:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA1_RECIPIENT;
procedure CARICAMENTO_SLA2_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
temp_data_fin DATE;
ora_fin_ftemp CHAR(2);
min_fin_ftemp CHAR(2);
sec_fin_ftemp CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_RECIPIENT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_in.ID_RICHIESTA AS idRichiesta
,'SLA2' AS tipoMessaggio
,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( ack_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,rich_rec.CODICE_OPERATORE_DONATING AS donorRete
,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL as terzaParte
,xml_out.TIPO_PROCESSO AS processo
,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom
,rich_rec.codice_gruppo AS codiceGruppo
,ack_out_fin.NOME_FILE as nomeFile
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale
,to_date( SUBSTR( ack_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver
,rich_rec.MSISDN AS msIsdn
,ack_out.NOME_FILE AS ackIniziale
,ack_out_fin.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( ack_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,xml_in.NOME_FILE AS nomeFileIniziale
,xml_in_fin.NOME_FILE AS nomeFileFinale
,to_date( SUBSTR( RICH_in_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataRicIn
FROM mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN RICH_in ,
mnp.MNP_GESTIONE_RICHIESTA_REC RICH_rec,
mnp.MNP_XML_ACK_OUT ack_out_fin ,
mnp.MNP_XML_IN xml_in_fin ,
mnp.MNP_XML_RICHIESTA_IN rich_in_fin ,
mnp.MNP_XML_OUT xml_out
WHERE xml_in.NOME_FILE = rich_in.NOME_FILE
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND ack_out.NOME_FILE = xml_out.nome_file
AND xml_in.TIPO_FILE =2----VALIDAZIONE
AND RICH_rec.ID_RICHIESTA = RICH_in.ID_RICHIESTA
--AND RICH_rec.STATO = 8
AND xml_in_fin.NOME_FILE = rich_in_fin.NOME_FILE
AND ack_out_fin.NOME_FILE_RIFERITO = rich_in_fin.NOME_FILE
AND xml_in_fin.TIPO_FILE =6----espletamento
AND RICH_rec.CODICE_OPERATORE_DONATING= xml_in_fin.MITTENTE
AND rich_rec.ID_RICHIESTA = RICH_in_fin.ID_RICHIESTA
AND to_date( SUBSTR( ack_out_fin.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1)) ;
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_ini,'YYYY-MM-DD HH24:MI:SS'));
ora_fin_ftemp := null;
min_fin_ftemp := null;
sec_fin_ftemp := null;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp,min_fin_ftemp,sec_fin_ftemp
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataRicIn;
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(rec.tIniziale)) -1 >2
THEN
BEGIN
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
--giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta_rec c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
begin
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
EXCEPTION WHEN dup_val_on_index THEN
begin
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT - CHIAVE DUPLICATA PER LA RICHIESTA ' || rec.idRichiesta||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
end;
end;
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_fine,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||n_rec);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA2_RECIPIENT;
procedure CARICAMENTO_SLA3_RECIPIENT(dataRif IN DATE,cod_errore OUT NUMBER) IS
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
temp_data_fin DATE;
ora_fin_ftemp CHAR(2);
min_fin_ftemp CHAR(2);
sec_fin_ftemp CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_RECIPIENT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_out.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,xml_in.MITTENTE AS donorEffettivo -- terza parte in donor EFFETTIVO x far funzionare dbcgo (al posto di rich_rec.CODICE_OPERATORE_DON_EFF)
,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,rich_rec.CODICE_OPERATORE_DONATING AS donorRete
,rich_rec.CODICE_OPERATORE_RECIPIENT AS recipientRete
,xml_in.MITTENTE as terzaParte
,xml_out.TIPO_PROCESSO AS processo
,rich_rec.RICHIESTAADHOCAOM AS richiestaAdHocAom
,rich_rec.codice_gruppo AS codiceGruppo
,ack_out.NOME_FILE as nomeFile
,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale
,to_date( SUBSTR(ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,rich_rec.DATA_CUT_OVER_CALC AS dataCutOver
,rich_rec.MSISDN AS msIsdn
,ack_in.NOME_FILE AS ackIniziale
,ack_out.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,xml_out.NOME_FILE AS nomeFileIniziale
,xml_in.NOME_FILE AS nomeFileFinale
,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataRicIn
FROM mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out,
mnp.MNP_XML_OUT xml_out ,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_RICHIESTA_IN rich_in ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_GESTIONE_RICHIESTA_REC rich_rec
WHERE rich_out.NOME_FILE = xml_out.NOME_FILE
AND ack_in.NOME_FILE_RIFERITO = rich_out.NOME_FILE
AND xml_out.TIPO_FILE =3 ----porting
AND xml_in.NOME_FILE = rich_in.NOME_FILE
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND RICH_rec.ID_RICHIESTA = RICH_in.ID_RICHIESTA
AND RICH_out.ID_RICHIESTA = RICH_in.ID_RICHIESTA
AND xml_in.TIPO_FILE =6
AND xml_in.MITTENTE <>rich_rec.CODICE_OPERATORE_DONATING
AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp := null;
min_fin_ftemp := null;
sec_fin_ftemp := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp,min_fin_ftemp,sec_fin_ftemp
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.dataRicIn, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataRicIn;
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(rec.tIniziale))-1>2
THEN
BEGIN
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
--giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *10;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta_rec c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT ACK_INIZIALE
INTO ackInizialeLetto
FROM MNP_DW_SLA_3GG_OUT
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
-- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta
IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,DONOR_RETE = rec.donorRete
,RECIPIENT_RETE = rec.recipientRete
,TERZA_PARTE = rec.terzaParte
,PROCESSO = rec.processo
,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim
,NOME_FILE = rec.nomeFile
,T_INIZIALE=rec.tIniziale
,T_FINALE=temp_data_fin
,DATA_CUT_OVER=rec.dataCutOver
,MSISDN=rec.msIsdn
,ACK_INIZIALE=rec.ackIniziale
,ACK_FINALE=rec.ackFinale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_INIZIALE=rec.nomeFileIniziale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NUMERO_GIORNI_RITARDO=giorni_ritardo
,PENALE=penale
,NUMERO_SIM=numero_sim
,PROC_NAME=proc_name
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
END IF;
END;
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA3_RECIPIENT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA3_RECIPIENT;
procedure CARICAMENTO_SLA0_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
temp_data_in DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA0_DONOR';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_in.ID_RICHIESTA AS idRichiesta
,'SLA0' AS tipoMessaggio
,g.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,g.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,g.CODICE_OPERATORE_DONATING AS donorRete
,g.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL as terzaParte
,xml_out.TIPO_PROCESSO as processo
,g.RICHIESTAADHOCAOM AS richiestaAdHocAom
,g.codice_gruppo AS codiceGruppo
,ack_out.NOME_FILE AS nomeFile
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale
,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,g.DATA_CUT_OVER AS dataCutOver
,g.MSISDN AS msIsdn
,ack_out.NOME_FILE AS ackIniziale
,ack_in.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,xml_in.NOME_FILE AS nomeFileIniziale
,rich_out.NOME_FILE AS nomeFileFinale
FROM mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_RICHIESTA_IN rich_in ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out ,
mnp.MNP_XML_OUT xml_out ,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_GESTIONE_RICHIESTA g
WHERE ack_out.NOME_FILE_RIFERITO= rich_in.NOME_FILE
AND xml_in.TIPO_FILE =1 --attivazione
AND rich_in.NOME_FILE = xml_in.NOME_FILE
AND ack_out.NOME_FILE_RIFERITO= xml_in.NOME_FILE
AND xml_out.TIPO_FILE =5 ---pic
AND xml_out.NOME_FILE =rich_out.NOME_FILE
AND g.STATO =4 ---scartata
AND g.ID_RICHIESTA = rich_out.ID_RICHIESTA
AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA
AND ack_in.NOME_FILE_RIFERITO = xml_out.NOME_FILE
AND to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
ora_fin_ftemp2 := null;
min_fin_ftemp2 := null;
sec_fin_ftemp2 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 1;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 5;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1);
ELSE
temp_data_in := rec.tIniziale;
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1);
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 > 0
THEN BEGIN
dataFinale:=fun_giorni_piu(temp_data_in,0);
--giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,0) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA0_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA0_DONOR;
procedure CARICAMENTO_SLA1_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
temp_data_in DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_DONOR';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_in.ID_RICHIESTA AS idRichiesta
,'SLA1' as tipoMessaggio
,g.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,g.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,g.CODICE_OPERATORE_DONATING AS donorRete
,g.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL as terzaParte
,xml_out.TIPO_PROCESSO AS processo
,g.RICHIESTAADHOCAOM AS richiestaAdHocAom
,g.codice_gruppo AS codiceGruppo
,xml_out.NOME_FILE as nomeFile
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale
,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,g.DATA_CUT_OVER_CALC AS dataCutOver
,g.MSISDN AS msIsdn
,ack_out.NOME_FILE AS ackIniziale
,ack_in.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+1 AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,xml_in.NOME_FILE AS nomeFileIniziale
,rich_out.NOME_FILE AS nomeFileFinale
FROM mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_RICHIESTA_IN rich_in ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out ,
mnp.MNP_XML_OUT xml_out ,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_GESTIONE_RICHIESTA g
WHERE ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND xml_in.TIPO_FILE =1 --attivazione
AND rich_in.NOME_FILE = xml_in.NOME_FILE
AND ack_out.NOME_FILE_RIFERITO = xml_in.NOME_FILE
AND xml_out.TIPO_FILE =2 ---VALIDAZIONE
AND xml_out.NOME_FILE =rich_out.NOME_FILE
AND rich_out.ID_RICHIESTA = rich_in.ID_RICHIESTA
AND ack_in.NOME_FILE_RIFERITO = xml_out.NOME_FILE
AND g.ID_RICHIESTA = rich_out.ID_RICHIESTA
AND to_date( SUBSTR( rich_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) ---PRENDO TUTTI GLI ACK A PARTIRE DAL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
ora_fin_ftemp2 := null;
min_fin_ftemp2 := null;
sec_fin_ftemp2 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 1;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 2;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1);
ELSE
temp_data_in := rec.tIniziale;
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1);
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1
THEN
BEGIN
dataFinale:=fun_giorni_piu( temp_data_in,1);
-- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu( temp_data_in,1) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT NOME_FILE_FINALE
INTO ackInizialeLetto
FROM MNP_DW_SLA_3GG_OUT
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
-- se data dell'ack della nuova riga < data ack preesistente aggiorna i dati altrimenti scarta
IF to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,DONOR_RETE = rec.donorRete
,RECIPIENT_RETE = rec.recipientRete
,TERZA_PARTE = rec.terzaParte
,PROCESSO = rec.processo
,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim
,NOME_FILE = rec.nomeFile
,T_INIZIALE=temp_data_in
,T_FINALE=temp_data_fin
,DATA_CUT_OVER=rec.dataCutOver
,MSISDN=rec.msIsdn
,ACK_INIZIALE=rec.ackIniziale
,ACK_FINALE=rec.ackFinale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_INIZIALE=rec.nomeFileIniziale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NUMERO_GIORNI_RITARDO=giorni_ritardo
,PENALE=penale
,NUMERO_SIM=numero_sim
,PROC_NAME=proc_name
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
END IF;
END;
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in CARICAMENTO_SLA1_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA1_DONOR;
procedure CARICAMENTO_SLA2_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS
ackInizialeLetto VARCHAR2(27);
flagCalcoloNumSim NUMBER(1):=0;
temp_data_in DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_DONOR';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_out.ID_RICHIESTA AS idRichiesta
,'SLA2' AS tipoMessaggio
,g.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,g.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( rich_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,g.CODICE_OPERATORE_DONATING AS donorRete
,g.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL as terzaParte
,xml_out.tipo_processo AS processo
,g.RICHIESTAADHOCAOM AS richiestaAdHocAom
,g.codice_gruppo AS codiceGruppo
,xml_out_fin.NOME_FILE as nomeFile
,to_date( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale
,to_date( SUBSTR(xml_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,g.DATA_CUT_OVER_CALC AS dataCutOver
,g.MSISDN AS msIsdn
,ack_in.NOME_FILE AS ackIniziale
,NULL AS ackFinale
--,TO_DATE( SUBSTR( ack_in.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( xml_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,ack_in.NOME_FILE AS nomeFileIniziale
,xml_out_fin.NOME_FILE AS nomeFileFinale
FROM mnp.MNP_XML_ACK_IN ack_in_fin ,
mnp.MNP_XML_RICHIESTA_OUT rich_out ,
mnp.MNP_XML_OUT xml_out ,
mnp.MNP_XML_RICHIESTA_OUT rich_out_fin,
mnp.MNP_XML_OUT xml_out_fin ,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_GESTIONE_RICHIESTA g
WHERE rich_out.NOME_FILE = xml_out.NOME_FILE
AND rich_out.NOME_FILE = ack_in.NOME_FILE_RIFERITO
AND xml_out.TIPO_FILE = 2 ----VALIDAZIONE
AND rich_out_fin.NOME_FILE = xml_out_fin.NOME_FILE
AND xml_out_fin.TIPO_FILE =6 ---ESPLETAMENTO
AND xml_out_fin.DESTINATARIO <> 'NPTS'
AND rich_out_fin.ID_RICHIESTA =rich_out.ID_RICHIESTA
AND g.ID_RICHIESTA = rich_out_fin.ID_RICHIESTA
AND ack_in_fin.NOME_FILE_RIFERITO = xml_out_fin.NOME_FILE
AND to_date( SUBSTR( rich_out_fin.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) ---PRENDO TUTTI GLI ACK A PARTIRE DAL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
ora_fin_ftemp2 := null;
min_fin_ftemp2 := null;
sec_fin_ftemp2 := null;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 2;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale , 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale , 1);
ELSE
temp_data_in := rec.tIniziale ;
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1);
ELSE
temp_data_fin := rec.tFinale;
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND rec.richiestaAdHocAom > 0
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >2
THEN
BEGIN
dataFinale:=fun_giorni_piu(temp_data_in,2);
-- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:=giorni_ritardo*50;
if flagCalcoloNumSim = 1
THEN SELECT COUNT(*)
INTO numero_sim
FROM mnp.mnp_gestione_richiesta c
WHERE c.CODICE_GRUPPO=rec.codiceGruppo
AND c.RICHIESTAADHOCAOM > 0;
ELSE
numero_sim := 0;
END IF;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
EXCEPTION /*@@@ con la max non funziona perch<63> restringe l'intervallo**/
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT ACK_INIZIALE
INTO ackInizialeLetto
FROM MNP_DW_SLA_3GG_OUT
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
-- se data dell'ack della nuova riga > data ack preesistente aggiorna i dati altrimenti scarta
IF to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) > to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ) --qua prende la massima??
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,DONOR_RETE = rec.donorRete
,RECIPIENT_RETE = rec.recipientRete
,TERZA_PARTE = rec.terzaParte
,PROCESSO = rec.processo
,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim
,NOME_FILE = rec.nomeFile
,T_INIZIALE=temp_data_in
,T_FINALE=temp_data_fin
,DATA_CUT_OVER=rec.dataCutOver
,MSISDN=rec.msIsdn
,ACK_INIZIALE=rec.ackIniziale
,ACK_FINALE=rec.ackFinale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_INIZIALE=rec.nomeFileIniziale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NUMERO_GIORNI_RITARDO=giorni_ritardo
,PENALE=penale
,NUMERO_SIM=numero_sim
,PROC_NAME=proc_name
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
END IF;
END;
END;
ELSE -- non e' fuori SLA pero' potrebbe esistere una riga relativa ad un precedente ACK, calcolata fuori SLA, da cancellare...
BEGIN
DELETE FROM MNP_DW_SLA_3GG_OUT
WHERE ID_RICHIESTA = rec.idRichiesta
AND TIPO_MESSAGGIO = rec.tipoMessaggio
AND DONOR_EFFETTIVO = rec.donorEffettivo
AND RECIPIENT_EFFETTIVO = rec.recipientEffettivo;
EXCEPTION
when no_data_found then NULL;
END;
end if;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA2_DONOR;
procedure CARICAMENTO_SLA3_DONOR(dataRif IN DATE,cod_errore OUT NUMBER) IS
flagCalcoloNumSim NUMBER(1):=0;
temp_data_in DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_DONOR';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_in.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,porting.CODICE_OPERATORE_DON_EFF AS donorEffettivo
,porting.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,porting.CODICE_OPERATORE_DONATING AS donorRete
,porting.CODICE_OPERATORE_RECIPIENT AS recipientRete
,NULL AS terzaParte
,'D' as processo --,xml_out.TIPO_PROCESSO AS processo
,0 AS richiestaAdHocAom
,NULL AS codiceGruppo
,xml_out.NOME_FILE as nomeFile
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tIniziale
,to_date( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,porting.DATA_CUT_OVER AS dataCutOver
,porting.MSISDN AS msIsdn
,ack_out.NOME_FILE AS ackIniziale
,ack_in.NOME_FILE AS ackFinale
--,TO_DATE( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' )+2 AS dataAttesaEventoFin
,TO_CHAR ( TO_DATE( SUBSTR( rich_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,xml_in.NOME_FILE AS nomeFileIniziale
,rich_out.NOME_FILE AS nomeFileFinale
FROM mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_RICHIESTA_IN rich_in ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out ,
mnp.MNP_GESTIONE_RICHIESTA_PORTING porting,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_XML_OUT xml_out
WHERE ack_out.NOME_FILE_RIFERITO= rich_in.NOME_FILE
AND xml_in.TIPO_FILE =3 --porting
AND rich_in.NOME_FILE = xml_in.NOME_FILE
AND ack_out.NOME_FILE_RIFERITO= xml_in.NOME_FILE
AND xml_out.TIPO_FILE =6 ---espletamento
AND rich_out.NOME_FILE = xml_out.NOME_FILE
AND porting.ID_RICHIESTA =rich_out.ID_RICHIESTA
AND rich_in.ID_RICHIESTA =rich_out.ID_RICHIESTA
AND ack_in.NOME_FILE_RIFERITO =xml_out.NOME_FILE
AND to_date( SUBSTR( rich_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
ora_fin_ftemp2 := null;
min_fin_ftemp2 := null;
sec_fin_ftemp2 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 3;
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1);
ELSE
temp_data_in := rec.tIniziale;
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := DWH.FUN_GIORNI_PIU (rec.tFinale, 1);
ELSE
temp_data_fin := rec.tFinale;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >2
THEN
BEGIN
dataFinale:=fun_giorni_piu(temp_data_in,2);
-- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(temp_data_in,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *10;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,flagCalcoloNumSim
,rec.nomeFile
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
end;
end if;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA3_DONOR ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA3_DONOR;
procedure CARICAMENTO_SLA1_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_DONOR_VIRT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta
,'SLA1' as tipoMessaggio
,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo
,rich_don_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo
,stor_don_virt_fin.DATA_I_O as dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,NULL as terzaParte
,'R' as processo
, 0 as richiestaAdHocAom
, NULL as codiceGruppo
, NULL as nomeFile
,stor_don_virt_ini.DATA_I_O AS tIniziale
,stor_don_virt_fin.DATA_I_O AS tFinale
,rich_don_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_don_virt.MSISDN AS msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_don_virt_ini.DATA_I_O + 1 AS dataAttesaEventoFin
,TO_CHAR( stor_don_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt ,
mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_ini,
mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_fin
WHERE rich_don_virt.ID_RICHIESTA = stor_don_virt_ini.ID_RICHIESTA
AND rich_don_virt.ID_RICHIESTA = stor_don_virt_fin.ID_RICHIESTA
AND stor_don_virt_ini.STATO_A = 2 ----LAVORABILE
AND stor_don_virt_fin.STATO_A IN (6,7) ----VALIDAZIONE OK/KO
AND stor_don_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >1
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,1);
-- giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,1) );
giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagcalcolonumsim
,rec.nomeFile
,rec.tIniziale
,rec.tFinale
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA1_DONOR_VIRT;
procedure CARICAMENTO_SLA2_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_DONOR_VIRT';
D_ini DATE;
D_fine DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
dataFinale DATE;
CURSOR record_sla is
SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta
,'SLA2' as tipoMessaggio
,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo
,rich_don_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo
,stor_don_virt_fin.DATA_I_O AS dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,NULL as terzaParte
,'R' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,NULL as nomeFile
,stor_don_virt_ini.DATA_I_O AS tIniziale
,stor_don_virt_fin.DATA_I_O AS tFinale
,rich_don_virt.DATA_CUT_OVER_CALC AS dataCutOver
,rich_don_virt.MSISDN AS msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_don_virt_ini.DATA_I_O+2 AS dataAttesaEventoFin
,TO_CHAR( stor_don_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt ,
mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_ini,
mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt_fin
WHERE rich_don_virt.ID_RICHIESTA = stor_don_virt_ini.ID_RICHIESTA
AND rich_don_virt.ID_RICHIESTA = stor_don_virt_fin.ID_RICHIESTA
AND stor_don_virt_ini.STATO_A = 6 ----VALIDAZIONE OK
AND stor_don_virt_fin.STATO_A =10 ----CESSATA
AND stor_don_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc(rec.tIniziale)) -1 > 2
then
begin
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
--giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagcalolonumsim
,rec.nomeFile
,rec.tIniziale
,rec.tFinale
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA2_DONOR_VIRT;
procedure CARICAMENTO_SLA3_DONOR_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_DONOR_VIRT';
D_ini DATE;
D_fine DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
dataFinale DATE;
CURSOR record_sla is
SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,xml_in.MITTENTE AS donorEffettivo --forzatura terza parte in donor EFFETTIVO (al posto di rich_don_virt.CODICE_OPERATORE_DONATING ) per dbcgo
,rich_don_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,xml_in.MITTENTE AS terzaParte
,'R' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,ack_out.NOME_FILE AS nomeFile
,stor_don_virt.DATA_I_O AS tIniziale
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,rich_don_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_don_virt.MSISDN AS msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_don_virt.DATA_I_O+2 AS dataAttesaEventoFin
,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) as meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt ,
mnp.MNP_STORICO_RICH_DON_VIRT stor_don_virt,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN rich_in
WHERE rich_don_virt.ID_RICHIESTA = stor_don_virt.ID_RICHIESTA
AND stor_don_virt.STATO_A = 13 ----ACCETTATA
AND xml_in.TIPO_FILE = 6 -- ESPLETAMENTO
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND xml_in.NOME_FILE = rich_in.NOME_FILE
AND rich_in.ID_RICHIESTA = rich_don_virt.ID_RICHIESTA
AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataMessaggio;
ELSE
temp_data_fin := rec.tFinale;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(rec.tIniziale)) -1 > 2
THEN BEGIN
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
--giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *10;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagcalcolonumsim
,rec.nomeFile
,rec.tIniziale
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_DONOR_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA3_DONOR_VIRT;
procedure CARICAMENTO_SLA1_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_REC_VIRT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA1' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,stor_rec_virt_fin.DATA_I_O AS dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,NULL as terzaParte
,'D' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,NULL as nomeFile
,stor_rec_virt_ini.DATA_I_O as tIniziale
,stor_rec_virt_fin.DATA_I_O as tFinale
,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN AS msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_rec_virt_ini.DATA_I_O+1 AS dataAttesaEventoFin
,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) as meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin
WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA
AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA
AND stor_rec_virt_ini.STATO_A = 2 ----LAVORABILE
AND stor_rec_virt_fin.STATO_A IN (6,7) ----VALIDAZIONE OK/KO
AND rich_rec_virt.CODICE_OPERATORE_DONATING = 'TIMG'
AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >1
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,1);
--giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,1) );
giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,rec.tFinale
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_REC_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA1_REC_VIRT;
procedure CARICAMENTO_SLA2_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_REC_VIRT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA2' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,stor_rec_virt_fin.DATA_I_O as dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,NULL as terzaParte
,'D' as processo
, 0 as richiestaAdHocAom
,NULL as codiceGruppo
,NULL as nomeFile
,stor_rec_virt_ini.DATA_I_O as tIniziale
,stor_rec_virt_fin.DATA_I_O as tFinale
,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_rec_virt_ini.DATA_I_O+2 AS dataAttesaEventoFin
,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) as meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin
WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA
AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA
AND stor_rec_virt_ini.STATO_A = 6 ----VALIDAZIONE OK
AND stor_rec_virt_fin.STATO_A =10 ----CESSATA
AND rich_rec_virt.CODICE_OPERATORE_DONATING = 'TIMG'
AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >2
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
-- giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,rec.tFinale
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA2_REC_VIRT;
procedure CARICAMENTO_SLA3_REC_VIRT(dataRif IN DATE,cod_errore OUT NUMBER) IS -- DA MODIFICARE!!!
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_REC_VIRT';
D_ini DATE;
D_fine DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,xml_in.MITTENTE AS donorEffettivo -- forzatura terzaParte nel donating EFFETTIVO (al posto di rich_rec_virt.CODICE_OPERATORE_DONATING) per dbcgo
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) as dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,xml_in.MITTENTE as terzaParte
,'D' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,ack_out.NOME_FILE as nomeFile
,stor_rec_virt.DATA_I_O as tIniziale
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_rec_virt.DATA_I_O+2 as dataAttesaEventoFin
,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) as dataRicIn
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN rich_in
WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt.ID_RICHIESTA
AND stor_rec_virt.STATO_A = 13 ----ACCETTATA
AND xml_in.TIPO_FILE = 6 -- ESPLETAMENTO
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND xml_in.NOME_FILE = rich_in.NOME_FILE
AND rich_in.ID_RICHIESTA = rich_rec_virt.ID_RICHIESTA
AND rich_rec_virt.CODICE_OPERATORE_DONATING = 'TIMG'
AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataRicIn;
ELSE
temp_data_fin := rec.tFinale;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( rec.tIniziale)) -1 >2
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
-- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *10;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA3_REC_VIRT;
procedure CARICAMENTO_SLA1_REC_VIRT_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_REC_VIRT_M2M';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA1' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,stor_rec_virt_fin.DATA_I_O as dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,NULL as terzaParte
,'V' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,NULL as nomeFile
,stor_rec_virt_ini.DATA_I_O as tIniziale
,stor_rec_virt_fin.DATA_I_O as tFinale
,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_rec_virt_ini.DATA_I_O+1 as dataAttesaEventoFin
,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin
WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA
AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA
AND stor_rec_virt_ini.STATO_A = 2 ----LAVORABILE
AND stor_rec_virt_fin.STATO_A IN (6,7) ----VALIDAZIONE OK/KO
AND rich_rec_virt.CODICE_OPERATORE_DONATING <> 'TIMG'
AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >1
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,1);
-- giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,1) );
giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,rec.tFinale
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA1_REC_VIRT_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA1_REC_VIRT_M2M;
procedure CARICAMENTO_SLA2_REC_VIRT_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA2_REC_VIRT_M2M';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA2' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,stor_rec_virt_fin.DATA_I_O as dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,NULL as terzaParte
,'V' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,NULL as nomeFile
,stor_rec_virt_ini.DATA_I_O as tIniziale
,stor_rec_virt_fin.DATA_I_O as tFinale
,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_rec_virt_ini.DATA_I_O+2 as dataAttesaEventoFin
,TO_CHAR( stor_rec_virt_fin.DATA_I_O ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_ini,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt_fin
WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt_ini.ID_RICHIESTA
AND rich_rec_virt.ID_RICHIESTA = stor_rec_virt_fin.ID_RICHIESTA
AND stor_rec_virt_ini.STATO_A = 6 ----VALIDAZIONE OK
AND stor_rec_virt_fin.STATO_A =10 ----CESSATA
AND rich_rec_virt.CODICE_OPERATORE_DONATING <> 'TIMG'
AND stor_rec_virt_fin.DATA_I_O ---PRENDO TUTTE LE TRANSIZIONI DEL 1-30 DEL MESE PRECEDENTE
BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF FUN_GIORNI_LAVORATIVI (trunc(rec.tFinale) , trunc( rec.tIniziale)) -1 >2
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
--giorni_ritardo := TRUNC(rec.tFinale- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(rec.tFinale) - trunc(dataFinale) );
penale:= giorni_ritardo *50;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,rec.tFinale
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA2_REC_VIRT_M2M;
procedure CARICAMENTO_SLA3_REC_VIRT_M2M(dataRif IN DATE,cod_errore OUT NUMBER) IS
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_REC_VIRT_M2M';
D_ini DATE;
D_fine DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
dataFinale DATE;
penale NUMBER;
giorni_ritardo NUMBER;
numero_sim NUMBER;
CURSOR record_sla is
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,xml_in.MITTENTE as donorEffettivo --forzatura terzaParte per dbcgo al posto di rich_rec_virt.CODICE_OPERATORE_DONATING
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,'TIMG' AS donorRete
,'TIMG' AS recipientRete
,xml_in.MITTENTE as terzaParte
,'V' as processo
,0 as richiestaAdHocAom
,NULL as codiceGruppo
,ack_out.NOME_FILE as nomeFile
,stor_rec_virt.DATA_I_O as tIniziale
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS tFinale
,rich_rec_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,NULL as ackIniziale
,NULL as ackFinale
--,stor_rec_virt.DATA_I_O+2 as dataAttesaEventoFin
, TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,NULL AS nomeFileFinale
,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataRicIn
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_STORICO_RICH_REC_VIRT stor_rec_virt,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN rich_in
WHERE rich_rec_virt.ID_RICHIESTA = stor_rec_virt.ID_RICHIESTA
AND stor_rec_virt.STATO_A = 13 ----ACCETTATA
AND xml_in.TIPO_FILE = 6 -- ESPLETAMENTO
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND xml_in.NOME_FILE = rich_in.NOME_FILE
AND rich_in.ID_RICHIESTA = rich_rec_virt.ID_RICHIESTA
AND rich_rec_virt.CODICE_OPERATORE_DONATING <> 'TIMG'
AND to_date( SUBSTR( ack_out.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) BETWEEN Last_Day(ADD_MONTHS(dataRif,-2))+1 AND Last_Day(ADD_MONTHS( dataRif,-1));
BEGIN
cod_errore := 0;
ora_fin_ftemp1 := null;
min_fin_ftemp1 := null;
sec_fin_ftemp1 := null;
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftemp1,min_fin_ftemp1,sec_fin_ftemp1
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 6;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp1 ||min_fin_ftemp1||sec_fin_ftemp1),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := rec.dataRicIn;
ELSE
temp_data_fin := rec.tFinale;
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( rec.tIniziale)) -1 >2
then begin
dataFinale:=fun_giorni_piu(rec.tIniziale,2);
-- giorni_ritardo := TRUNC(temp_data_fin- fun_giorni_piu(rec.tIniziale,2) );
giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
penale:= giorni_ritardo *10;
numero_sim:=0;
INSERT INTO MNP_DW_SLA_3GG_OUT (
ID_RICHIESTA, TIPO_MESSAGGIO, DONOR_EFFETTIVO,
RECIPIENT_EFFETTIVO, DATA_MESSAGGIO, DONOR_RETE,
RECIPIENT_RETE, TERZA_PARTE, PROCESSO,
FLAG_CALCOLO_NUMSIM, NOME_FILE, T_INIZIALE,
T_FINALE, DATA_CUT_OVER, MSISDN,
ACK_INIZIALE, ACK_FINALE, DATA_ATTESA_EVENTO_FIN,
MESE_COMP_FINALE, NOME_FILE_INIZIALE, NOME_FILE_FINALE,NUMERO_GIORNI_RITARDO,PENALE,NUMERO_SIM,PROC_NAME)
VALUES (
rec.idRichiesta
,rec.tipoMessaggio
,rec.donorEffettivo
,rec.recipientEffettivo
,rec.dataMessaggio
,rec.donorRete
,rec.recipientRete
,rec.terzaParte
,rec.processo
,0 --flagCalcoloNumSim
,rec.nomeFile
,rec.tIniziale
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,giorni_ritardo
,penale
,numero_sim ,proc_name
);
END;
END IF;
END LOOP;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: FINE PROCEDURA '||PROC_NAME||' - '||TO_CHAR(D_FINE,'YYYY-MM-DD HH24:MI:SS')||' - DURATA IN MINUTI:'||TRUNC((D_fine-D_ini)*1440)||' - RECORDS TRATTATI: '||N_REC);
EXCEPTION
WHEN OTHERS
THEN
if record_sla%ISOPEN then CLOSE record_sla;
end if;
cod_errore := 1;
DBMS_OUTPUT.put_line ('Errore in DWH.CARICAMENTO_SLA2_RECIPIENT_VIRT_M2M ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CARICAMENTO_SLA3_REC_VIRT_M2M;
procedure CALCOLO_SLA_PENALI(dataRif IN Date) IS
cod_errore NUMBER (1);
cod_errore_sla0_don NUMBER (1);
cod_errore_sla1_don NUMBER (1);
cod_errore_sla2_don NUMBER (1);
cod_errore_sla3_don NUMBER (1);
cod_errore_sla0_rec NUMBER (1);
cod_errore_sla1_rec NUMBER (1);
cod_errore_sla2_rec NUMBER (1);
cod_errore_sla3_rec NUMBER (1);
cod_errore_sla1_don_virt NUMBER (1);
cod_errore_sla2_don_virt NUMBER (1);
cod_errore_sla3_don_virt NUMBER (1);
cod_errore_sla1_rec_virt NUMBER (1);
cod_errore_sla2_rec_virt NUMBER (1);
cod_errore_sla3_rec_virt NUMBER (1);
cod_errore_sla1_rec_virt_M2M NUMBER (1);
cod_errore_sla2_rec_virt_M2M NUMBER (1);
cod_errore_sla3_rec_virt_M2M NUMBER (1);
errore_calcolo_sla0 NUMBER (1);
errore_calcolo_sla1 NUMBER (1);
errore_calcolo_sla2 NUMBER (1);
errore_calcolo_sla3 NUMBER (1);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CALCOLO_SLA_PENALI';
D_ini DATE;
D_fine DATE;
BEGIN
dbms_output.enable(9999999);
D_ini:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: INIZIO PROCESSO '||PROC_NAME||' - '||TO_CHAR(D_INI,'YYYY-MM-DD HH24:MI:SS'));
-----------------------------------------------------
-- DELETE PREVENTIVA DELLE TABELLA PENALI
-----------------------------------------------------
DELETE MNP_DW_SLA_3GG_OUT WHERE TO_CHAR(DATA_MESSAGGIO,'mm/yyyy')=TO_CHAR(ADD_MONTHS(dataRif,-1),'mm/yyyy');
cod_errore := 0;
-- caricamento dati per il processo donor nella tabella MNP_DW_SLA_3GG_OUT
caricamento_sla0_donor(dataRif,cod_errore_sla0_don);
caricamento_sla1_donor(dataRif,cod_errore_sla1_don);
caricamento_sla2_donor(dataRif,cod_errore_sla2_don);
caricamento_sla3_donor(dataRif,cod_errore_sla3_don);
-- caricamento dati per il processo recipient nella tabella MNP_DW_SLA_3GG_OUT
caricamento_sla0_recipient(dataRif,cod_errore_sla0_rec);
caricamento_sla1_recipient(dataRif,cod_errore_sla1_rec);
caricamento_sla2_recipient(dataRif,cod_errore_sla2_rec);
caricamento_sla3_recipient(dataRif,cod_errore_sla3_rec);
-- caricamento dati per il processo donor virtuale nella tabella MNP_DW_SLA_3GG_OUT
caricamento_sla1_donor_virt(dataRif,cod_errore_sla1_don_virt);
caricamento_sla2_donor_virt(dataRif,cod_errore_sla2_don_virt);
caricamento_sla3_donor_virt(dataRif,cod_errore_sla3_don_virt);
-- caricamento dati per il processo recipient virtuale nella tabella MNP_DW_SLA_3GG_OUT
caricamento_sla1_rec_virt(dataRif,cod_errore_sla1_rec_virt);
caricamento_sla2_rec_virt(dataRif,cod_errore_sla2_rec_virt);
caricamento_sla3_rec_virt(dataRif,cod_errore_sla3_rec_virt);
-- caricamento dati per il processo recipient virtuale nella tabella MNP_DW_SLA_3GG_OUT
caricamento_sla1_rec_virt_M2M(dataRif,cod_errore_sla1_rec_virt_M2M);
caricamento_sla2_rec_virt_M2M(dataRif,cod_errore_sla2_rec_virt_M2M);
caricamento_sla3_rec_virt_M2M(dataRif,cod_errore_sla3_rec_virt_M2M);
cod_errore := cod_errore_sla0_don + cod_errore_sla1_don+cod_errore_sla2_don +cod_errore_sla3_don +
cod_errore_sla0_rec + cod_errore_sla1_rec + cod_errore_sla2_rec + cod_errore_sla3_rec +
cod_errore_sla1_rec_virt + cod_errore_sla2_rec_virt + cod_errore_sla3_rec_virt +
cod_errore_sla1_rec_virt_M2M + cod_errore_sla2_rec_virt_M2M + cod_errore_sla3_rec_virt_M2M +
cod_errore_sla1_don_virt + cod_errore_sla2_don_virt + cod_errore_sla3_don_virt +
errore_calcolo_sla0 +errore_calcolo_sla1 +errore_calcolo_sla2 + errore_calcolo_sla3 ;
IF cod_errore = 0
THEN
-- tutto a posto
DBMS_OUTPUT.put_line ('Caricamento dati e calcolo SLA avvenuto.');
ELSE
-- tutto na sola
DBMS_OUTPUT.put_line ('CARICAMENTO DATI E CALCOLO SLA PARZIALE: PROCESSO TERMINATO CON ERRORI VERIFICARE LOG!');
END IF;
COMMIT;
D_fine:=sysdate;
DBMS_OUTPUT.put_line ('PKG_CALCOLO_SLA_PENALI_3GG: 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 e calcolo Sla ' || SQLERRM||' - '||to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'));
RETURN;
END CALCOLO_SLA_PENALI;
END PKG_CALCOLO_SLA_PENALI_3GG;
/