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

3705 lines
151 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_ftempH CHAR(2);
min_fin_ftempH CHAR(2);
sec_fin_ftempH 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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_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.RICHIESTAADHOC AS richiestaAdHoc
,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_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 IN( 1, 9 ) ----ATTIVAZIONE progetti STD e HOC
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 9 ATTIVAZIONE P.HOC
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 9;
-- 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;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0)
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if flagCalcoloNumSim=0 then
BEGIN
-- 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 := dwh.FUN_DATE_FESTIVE_SUCC (rec.tIniziale);
END IF;
END;
ELSE
BEGIN
-- SE IL FILE '9' 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_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS')
THEN
temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1);
ELSE
temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC (rec.tIniziale);
END IF;
END;
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE E LA CHIUSURA E' ALLE 24.00, SIAMO GIA' AL GIORNO SUCCESSIVO.
-- NON E' NECESSARIO PERTANTO AGGIUNGERE GIORNATE. IL PRIMO CONTROLLO VERRA' ADOPERATO SOLO IN CASO DI VARIAZIONE DI FINESTRA TEMPORALE
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
-- FORSE IL FILE E' ARRIVATO A MEZZANOTTE E 20 DEL GIORNO DOPO..... MA FORSE IL GIORNO DOPO E' SABATO! CHE SFIGA!
temp_data_fin := FUN_DATE_FESTIVE_SUCC(rec.tFinale);
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 */
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *50;
-- if flagCalcoloNumSim = 1
-- THEN SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta_rec c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0);
-- ELSE
l_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
,l_giorni_ritardo
,l_penale
,l_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 AND DONOR_RETE=rec.donorRete;
-- 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=l_giorni_ritardo
,PENALE=l_penale
,NUMERO_SIM=l_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
AND DONOR_RETE=rec.donorRete;
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;
ackFinaleLetto VARCHAR2(27);
fileFinaleLetto 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);
ora_fin_ftempH CHAR(2);
min_fin_ftempH CHAR(2);
sec_fin_ftempH CHAR(2);
n_rec integer := 0;
flagStop integer :=0;
num_validazioni NUMBER(1):=0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_RECIPIENT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
-- @FATTO AGGIUNGERE UNA SOTTOQUERY CHE, PER XML_IN (FILE DI VALIDAZIONE) ESTRAGGA LA MAX SULLA DATA DEL NOME FILE
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.RICHIESTAADHOC AS richiestaAdHoc
,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_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 IN (1,9) ---ATTIVAZIONE progetti STD e HOC
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));
--and xml_in.NOME_FILE = (select MAX(X.NOME_FILE)
-- FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y
-- WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA
-- AND x.TIPO_FILE=2 --validazione
-- AND y.NOME_FILE = x.NOME_FILE
-- );
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;
-- @todoPROBABILMENTE NON E' IL MODO GIUSTO PER CALCOLARE LA FINESTRA CHE DOVREBBE ESSERE 04.00->10.00 (INFASAMENTO TABELLA?)
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 9 ATTIVAZIONE P.HOC
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 9;
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 AND TIPO_OPERATORE= 'AOM';
FOR rec IN record_sla LOOP
flagStop:=0;
n_rec := n_rec +1;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0)
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if flagCalcoloNumSim=0 then
begin
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
end;
else
begin
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS')
THEN
temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1);
ELSE
temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC (rec.tIniziale);
END IF;
end;
end if;
-- SE TFINALE FUORI FINESTRA USA LA DATA DEL FILE DI VALIDAZIONE
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
END IF;
if FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc(temp_data_in)) -1 >1
then
begin
IF (rec.richiestaadhocaom > 0 OR rec.richiestaadhoc > 0)
THEN
BEGIN
SELECT COUNT (*)
INTO num_validazioni
FROM mnp.mnp_xml_in xml,
mnp.mnp_xml_richiesta_in richin
WHERE richin.id_richiesta = rec.idrichiesta
AND xml.tipo_file = 2
AND xml.nome_file = richin.nome_file
AND xml.nome_file < rec.nomefilefinale;
IF num_validazioni > 0
THEN
BEGIN
flagstop := 1;
END;
END IF;
END;
END IF;
IF FLAgstop = 0 then
BEGIN --iniZXIA QUI
dataFinale:=fun_giorni_piu(temp_data_in,1); /*data attesa evento finale*/
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *50;
-- if flagCalcoloNumSim = 1
-- THEN
-- begin
-- SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta_rec c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0);
-- end;
-- ELSE
l_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
,l_giorni_ritardo
,l_penale
,l_numero_sim ,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT ACK_FINALE,NOME_FILE_FINALE
INTO ackFinaleLetto, fileFinaleLetto
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
AND DONOR_RETE=rec.donorRete;
-- gestisco la data di prima validazione
IF (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
OR
(to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
AND to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
THEN
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1
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=l_giorni_ritardo
,PENALE=l_penale
,NUMERO_SIM=l_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
AND DONOR_RETE = rec.donorRete;
ELSE
DELETE 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
AND DONOR_RETE = rec.donorRete;
END IF;
END IF;
END;
END; --FINISCE QUI
END IF;
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_in DATE;
temp_data_fin DATE;
ora_fin_ftemp CHAR(2);
min_fin_ftemp CHAR(2);
sec_fin_ftemp 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_RECIPIENT';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
-- @FATTO deve fare la max sul nome del file di xml_in (QUINDI LA MAX SU RICH_IN NOME FILE)
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.RICHIESTAADHOC AS richiestaAdHoc
,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_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 xml_in.TIPO_FILE =2----VALIDAZIONE
AND ack_out.NOME_FILE_RIFERITO = rich_in.NOME_FILE
AND ack_out.NOME_FILE = xml_out.nome_file
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))
and xml_in.NOME_FILE = (select MAX(X.NOME_FILE)
FROM mnp.MNP_XML_IN x, mnp.MNP_XML_RICHIESTA_IN y
WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA
AND x.TIPO_FILE=2 --validazione
AND y.NOME_FILE = x.NOME_FILE
);
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;
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_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 2 AND TIPO_OPERATORE= 'AOM';
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.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1);
ELSE
temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS') --data file espletamento
THEN
temp_data_fin := dwh.FUN_GIORNI_PIU(rec.tFinale, 1);
ELSE
temp_data_fin := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >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);
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *50;
-- if flagCalcoloNumSim = 1
-- THEN SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta_rec c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND c.RICHIESTAADHOCAOM > 0;
-- ELSE
l_numero_sim := 0;
-- END IF;
-- @FATTO deve gestire la chiave duplicata ed aggiornare quando la data dell'ack_in <20> minore della data dell'ack_in letto (primo ack)
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
,l_giorni_ritardo
,l_penale
,l_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 AND DONOR_RETE=rec.donorRete;
-- 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=l_giorni_ritardo
,PENALE=l_penale
,NUMERO_SIM=l_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
AND DONOR_RETE=rec.donorRete;
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_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_in DATE;
temp_data_fin DATE;
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
-- @FATTO su xml_out eliminare destinatario NPTS
CURSOR record_sla is
SELECT rich_out.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_rec.CODICE_OPERATORE_DON_EFF AS donorEffettivo -- rif. email Letizia 29/9/10 era null
,rich_rec.CODICE_OPERATORE_REC_EFF AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era rich_rec.CODICE_OPERATORE_DONOR
,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.RICHIESTAADHOC AS richiestaAdHoc
,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_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_out.DESTINATARIO <> 'NPTS'
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 xml_out.destinatario = xml_in.mittente
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'));
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_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
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_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.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftemp2 ||min_fin_ftemp2||sec_fin_ftemp2),'YYYYMMDDHH24MISS')
THEN
temp_data_in := dwh.FUN_GIORNI_PIU(rec.tIniziale, 1);
ELSE
temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
IF rec.tFinale > TO_DATE ((TO_CHAR (rec.tFinale, 'YYYYMMDD')||ora_fin_ftemp ||min_fin_ftemp||sec_fin_ftemp),'YYYYMMDDHH24MISS')
THEN
temp_data_fin := dwh.FUN_GIORNI_PIU(rec.tFinale, 1);
ELSE
temp_data_fin := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *10;
-- if flagCalcoloNumSim = 1
-- THEN SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta_rec c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0);
-- ELSE
l_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
,l_giorni_ritardo
,l_penale
,l_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 AND DONOR_RETE=rec.donorRete;
-- 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=l_giorni_ritardo
,PENALE=l_penale
,NUMERO_SIM=l_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
AND DONOR_RETE=rec.donorRete;
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
fileInizialeLetto VARCHAR2(27);
fileFinaleLetto VARCHAR2(27);
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_ftempH CHAR(2);
min_fin_ftempH CHAR(2);
sec_fin_ftempH 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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_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.RICHIESTAADHOC AS richiestaAdHoc
,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_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 IN(1,9) --ATTIVAZIONE progetti STD e HOC
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;
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 9;
-- per pic presa dal nome file out non sono previsti i 15 minuti
SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 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;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0)
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if flagCalcoloNumSim=0 then
BEGIN
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
END;
ELSE
BEGIN
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS')
THEN
temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1);
ELSE
temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
END;
end if;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE E LA CHIUSURA E' ALLE 24.00, SIAMO GIA' AL GIORNO SUCCESSIVO.
-- NON E' NECESSARIO PERTANTO AGGIUNGERE GIORNATE. IL PRIMO CONTROLLO VERRA' ADOPERATO SOLO IN CASO DI VARIAZIONE DI FINESTRA TEMPORALE
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
-- FORSE IL FILE E' ARRIVATO A MEZZANOTTE E 20 DEL GIORNO DOPO..... MA FORSE IL GIORNO DOPO E' SABATO! CHE SFIGA!
temp_data_fin := FUN_DATE_FESTIVE_SUCC(rec.tFinale);
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);
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *50;
-- if flagCalcoloNumSim = 1
-- THEN SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0);
-- ELSE
l_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
,l_giorni_ritardo
,l_penale
,l_numero_sim ,proc_name
);
--@@@ gestione del doppio invio di presa in carico e doppia ricezione dell'attivazione: in entrambi i casi si considera il primo invio/ricezione
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT NOME_FILE_INIZIALE, ACK_INIZIALE, NOME_FILE_FINALE
INTO fileInizialeLetto, ackInizialeLetto, fileFinaleLetto
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
AND DONOR_RETE='TIMG';
-- se data del file iniziale della nuova riga < data del file iniziale preesistente oppure se la data del file <20> la stessa e la data dell'ack della
-- nuova riga < data ack preesistente devo aggiornare
-- oppure se data del file finale della nuova riga < data del file finale preesistente, devo aggiornare
--2
IF (to_date( SUBSTR( rec.nomeFileIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(fileInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
OR
(to_date( SUBSTR( rec.nomeFileIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
AND to_date( SUBSTR( rec.ackIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
OR (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
THEN
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >0 --1
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,NOME_FILE = rec.nomeFile
,T_FINALE=temp_data_fin
,ACK_INIZIALE=rec.ackIniziale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NOME_FILE_INIZIALE=rec.nomeFileIniziale
,NUMERO_GIORNI_RITARDO=l_giorni_ritardo
,PENALE=l_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
AND DONOR_RETE='TIMG';
ELSE
DELETE 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
AND DONOR_RETE='TIMG';
END IF; --1
END IF; --2
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_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
ackFinaleLetto VARCHAR2(27);
fileFinaleLetto 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_ftempH CHAR(2);
min_fin_ftempH CHAR(2);
sec_fin_ftempH CHAR(2);
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
n_rec integer := 0;
flagStop integer := 0;
num_validazioni NUMBER(1):=0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA1_DONOR';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
-- @TODO BY ALE AGGIUNGERE UNA SOTTOQUERY CHE, PER XML_OUT (FILE DI VALIDAZIONE) ESTRAGGA LA MAX SULLA DATA DEL NOME FILE?
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.RICHIESTAADHOC AS richiestaAdHoc
,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_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 IN(1,9) --ATTIVAZIONE progetti STD e HOC
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));
/*and xml_out.NOME_FILE = (select MAX(X.NOME_FILE)
FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y
WHERE y.ID_RICHIESTA= rich_in.ID_RICHIESTA
AND x.TIPO_FILE=2 --validazione
AND y.NOME_FILE = x.NOME_FILE
); */
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;
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE 9 ATTIVAZIONE P.HOC
SELECT SUBSTR(T_FINALE_ACK, 1,2), SUBSTR(T_FINALE_ACK, 4,2), SUBSTR(T_FINALE_ACK, 7,2)
INTO ora_fin_ftempH,min_fin_ftempH,sec_fin_ftempH
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 9;
-- per validazione presa dal nome file out non sono previsti i 15 minuti
SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 7,2)
INTO ora_fin_ftemp2,min_fin_ftemp2,sec_fin_ftemp2
FROM mnp.MNP_ANAG_FINESTRE_TEMPORALI
WHERE TIPO_FILE = 2 AND TIPO_OPERATORE= 'AOM';
FOR rec IN record_sla LOOP
flagStop:=0;
n_rec := n_rec +1;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >0)
THEN
flagCalcoloNumSim:=1;
ELSE
flagCalcoloNumSim:=0;
END IF;
if flagCalcoloNumSim = 0 then
begin
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
end;
else
begin
IF rec.tIniziale > TO_DATE ((TO_CHAR (rec.tIniziale, 'YYYYMMDD')||ora_fin_ftempH ||min_fin_ftempH||sec_fin_ftempH),'YYYYMMDDHH24MISS')
THEN
temp_data_in := DWH.FUN_GIORNI_PIU (rec.tIniziale, 1);
ELSE
temp_data_in := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
end;
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
END IF;
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1
THEN
BEGIN
IF (rec.richiestaadhocaom > 0 OR rec.richiestaadhoc > 0)
THEN
BEGIN
SELECT count(*)
INTO num_validazioni
FROM mnp.MNP_XML_OUT xml, mnp.MNP_XML_RICHIESTA_OUT richOut
WHERE richOut.ID_RICHIESTA = rec.idRichiesta AND
xml.TIPO_FILE = 2 AND
xml.NOME_FILE = richOut.NOME_FILE AND
xml.NOME_FILE < rec.nomeFileFinale;
IF num_validazioni > 0
THEN
BEGIN
flagstop := 1;
END;
END IF;
END;
END IF;
IF flagStop = 0 THEN
BEGIN
dataFinale:=fun_giorni_piu( temp_data_in,1);
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *50;
-- if flagCalcoloNumSim = 1
-- THEN SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0);
-- ELSE
l_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
,l_giorni_ritardo
,l_penale
,l_numero_sim ,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT NOME_FILE_FINALE, ACK_FINALE
INTO fileFinaleLetto, ackFinaleLetto
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
AND DONOR_RETE='TIMG';
-- se data del file della nuova riga < data del file preesistente oppure se la data del file <20> la stessa e la data dell'ack della
-- nuova riga < data ack preesistente devo aggiornare
IF (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
OR
(to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
AND to_date( SUBSTR( rec.ackFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) < to_date( SUBSTR(ackFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
THEN
IF FUN_GIORNI_LAVORATIVI (trunc(temp_data_fin) , trunc( temp_data_in)) -1 >1
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET DATA_MESSAGGIO = rec.dataMessaggio
,FLAG_CALCOLO_NUMSIM = flagCalcoloNumSim
,NOME_FILE = rec.nomeFile
,T_FINALE=temp_data_fin
,DATA_CUT_OVER=rec.dataCutOver
,ACK_FINALE=rec.ackFinale
,DATA_ATTESA_EVENTO_FIN=dataFinale
,MESE_COMP_FINALE=rec.meseCompFinale
,NOME_FILE_FINALE=rec.nomeFileFinale
,NUMERO_GIORNI_RITARDO=l_giorni_ritardo
,PENALE=l_penale
,NUMERO_SIM=l_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
AND DONOR_RETE='TIMG';
ELSE
DELETE 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
AND DONOR_RETE='TIMG';
END IF;
END IF;
END;
END; --qui finisce il fuori sl
END IF; --qui finisce se flag stop = 0
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);
fileInizialeLetto 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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
--@TODO BY ALE AGGIUNGERE UNA SOTTOQUERY CHE, PER XML_OUT (FILE DI VALIDAZIONE) ESTRAGGA LA MAX SULLA DATA DEL NOME FILE?
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.RICHIESTAADHOC AS richiestaAdHoc
,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
,ack_in_fin.NOME_FILE AS ackFinale
,TO_CHAR ( TO_DATE( SUBSTR( xml_out_fin.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ), 'MM/YYYY') AS meseCompFinale
,ack_in.NOME_FILE_RIFERITO 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));
-- and xml_out.NOME_FILE = (select MAX(X.NOME_FILE)
-- FROM mnp.MNP_XML_OUT x, mnp.MNP_XML_RICHIESTA_OUT y
-- WHERE y.ID_RICHIESTA= rich_out.ID_RICHIESTA
-- AND x.TIPO_FILE=2 --validazione
-- AND y.NOME_FILE = x.NOME_FILE
-- );
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 AND TIPO_OPERATORE='AOM';
-- per espletamento preso dal nome file out non sono previsti i 15 minuti
SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 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 := dwh.FUN_DATE_FESTIVE_SUCC(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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
END IF;
-- VALORIZZAZIONE richiestaAdHocAom IN FUNZIONE DEL CODICE GRUPPO
IF TRIM(rec.codiceGruppo) IS NOT NULL AND (rec.richiestaAdHocAom > 0 or rec.richiestaAdHoc >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);
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:=l_giorni_ritardo*50;
-- if flagCalcoloNumSim = 1
-- THEN SELECT COUNT(*)
-- INTO l_numero_sim
-- FROM mnp.mnp_gestione_richiesta c
-- WHERE c.CODICE_GRUPPO=rec.codiceGruppo
-- AND (c.RICHIESTAADHOCAOM > 0 or c.RICHIESTAADHOC >0);
-- ELSE
l_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
,l_giorni_ritardo
,l_penale
,l_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, NOME_FILE_INIZIALE
INTO ackInizialeLetto, fileInizialeLetto
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 AND DONOR_RETE=rec.donorRete;
-- 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??
-- gestisco la data di secoda validazione
IF (to_date( SUBSTR( rec.nomeFileIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) > to_date( SUBSTR(fileInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
OR
(to_date( SUBSTR( rec.nomeFileIniziale, 5 , 14) ,'YYYYMMDDHH24MISS' ) = to_date( SUBSTR(fileInizialeLetto, 5 , 14) ,'YYYYMMDDHH24MISS' )
AND 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=l_giorni_ritardo
,PENALE=l_penale
,NUMERO_SIM=l_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
AND DONOR_RETE=rec.donorRete;
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
AND DONOR_RETE=rec.donorRete;
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);
fileFinaleLetto VARCHAR2(27);
n_rec integer := 0;
proc_name constant varchar2(30) := 'CARICAMENTO_SLA3_DONOR';
D_ini DATE;
D_fine DATE;
dataFinale DATE;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
--@FATTO FILTRATI I FLES DI NPTS. SUL TIPO 6 ESPLETAMENTO
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
,'TIMG' as donorRete -- rif. email Letizia 27/9 era porting.CODICE_OPERATORE_DONATING AS donorRete
,porting.CODICE_OPERATORE_RECIPIENT AS recipientRete
,'TIMG' AS terzaParte -- rif. email Letizia 29/9/10 era null
,'D' as processo --,xml_out.TIPO_PROCESSO AS processo
,0 AS richiestaAdHocAom --, 0 as richiestaAdHoc
,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_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 xml_out.DESTINATARIO <> 'NPTS' --email Letizia 27/9
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;
-- per espletamento preso dal nome file out non sono previsti i 15 minuti
SELECT SUBSTR(T_FINALE, 1,2), SUBSTR(T_FINALE, 4,2), SUBSTR(T_FINALE, 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 := dwh.FUN_DATE_FESTIVE_SUCC(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 := dwh.FUN_DATE_FESTIVE_SUCC(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);
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *10;
l_numero_sim:=0;
--@TODO BY ALE SLA3_RECIPIENT GESTISCE IL DUP_VAL_ON_INDEX SLA3_DONOR NO E' CORRETTO?
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
,l_giorni_ritardo
,l_penale
,l_numero_sim ,proc_name
);
EXCEPTION
WHEN dup_val_on_index
THEN BEGIN
-- lettura dati preesistenti
SELECT NOME_FILE_FINALE
INTO fileFinaleLetto
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
AND DONOR_RETE='TIMG';
-- se data del file della nuova riga > data del file preesistente
IF (to_date( SUBSTR( rec.nomeFileFinale, 5 , 14) ,'YYYYMMDDHH24MISS' ) > to_date( SUBSTR(fileFinaleLetto, 5 , 14) ,'YYYYMMDDHH24MISS' ))
THEN
UPDATE MNP_DW_SLA_3GG_OUT
SET ID_RICHIESTA = rec.idRichiesta
,TIPO_MESSAGGIO = rec.tipoMessaggio
,DONOR_EFFETTIVO = rec.donorEffettivo
,RECIPIENT_EFFETTIVO = rec.recipientEffettivo
,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 = l_giorni_ritardo
,PENALE = l_penale
,NUMERO_SIM = l_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
AND DONOR_RETE='TIMG';
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_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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
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);
temp_data_in DATE;
temp_data_fin DATE;
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
,'V' as processo
, 0 as richiestaAdHocAom --, 0 as richiestaAdHoc
, 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
,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
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;
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'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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 ?
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 AND TIPO_OPERATORE = 'MVNO';
cod_errore := 0;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
-- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '?' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *50;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
dataFinale 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);
temp_data_in DATE;
temp_data_fin 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
,'V' as processo
,0 as richiestaAdHocAom --, 0 as richiestaAdHoc
,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
,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
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;
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'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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 AND TIPO_OPERATORE = 'MVNO';
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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;
cod_errore := 0;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
-- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '?' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *50;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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_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);
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
dataFinale DATE;
--@TODO BY ALE FORSE ANDRANNO FILTRATI I FLES DI NPTS. SUL TIPO 6 ESPLETAMENTO O SUL TIPO 3 PORTING ?? O FORSE NO?
CURSOR record_sla is
/* vecchia query
SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era XML_IN.MITTENTE
,rich_don_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG'
,'TIMG' AS recipientRete
,xml_in.MITTENTE AS terzaParte
,'R' as processo
,0 as richiestaAdHocAom --, 0 as richiestaAdHoc
,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
,ack_out.nome_file as ackFinale
,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) as meseCompFinale
,NULL AS nomeFileIniziale
,xml_in.NOME_FILE 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));
*/
SELECT rich_don_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_don_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era XML_IN.MITTENTE
,rich_don_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,to_date( SUBSTR( rich_in.NOME_FILE, 5 , 8) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG'
,'TIMG' AS recipientRete
,xml_in.MITTENTE AS terzaParte
,'R' as processo
,0 as richiestaAdHocAom --, 0 as richiestaAdHoc
,NULL 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_don_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_don_virt.MSISDN AS msIsdn
,ack_in.NOME_FILE as ackIniziale
,ack_out.nome_file as ackFinale
,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
FROM mnp.MNP_GEST_RICH_DONOR_VIRT rich_don_virt ,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN rich_in,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out,
mnp.MNP_XML_OUT xml_out
where rich_out.id_richiesta = rich_in.id_richiesta
AND ack_in.nome_file_riferito=rich_out.nome_file
and rich_out.nome_file = xml_out.nome_file
and xml_out.tipo_file = 3 --porting
and xml_out.destinatario <> 'NPTS'
and xml_out.destinatario = xml_in.mittente
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;
temp_data_in := NULL;
temp_data_fin := 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;
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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;
cod_errore := 0;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
-- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *10;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
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);
temp_data_in DATE;
temp_data_fin DATE;
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 --,0 as richiestaAdHoc
,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
,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
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;
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'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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 ?
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 AND TIPO_OPERATORE = 'MVNO';
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *50;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
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);
temp_data_in DATE;
temp_data_fin DATE;
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 --,0 as richiestaAdHoc
,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
,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
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;
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'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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 AND TIPO_OPERATORE = 'MVNO';
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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;
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *50;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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_in DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
dataFinale DATE;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
CURSOR record_sla is
/* vecchia query
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) as dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG''
,'TIMG' AS recipientRete
,xml_in.MITTENTE as terzaParte
,'R' as processo
,0 as richiestaAdHocAom --,0 as richiestaAdHoc
,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
,ack_out.nome_file as ackFinale
,TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,xml_in.NOME_FILE 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));
*/
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING AS donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT AS recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) as dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG''
,'TIMG' AS recipientRete
,xml_in.MITTENTE as terzaParte
,'R' as processo
,0 as richiestaAdHocAom --,0 as richiestaAdHoc
,NULL 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_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,ack_in.NOME_FILE as ackIniziale
,ack_out.nome_file as ackFinale
,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 , 8) ,'YYYYMMDDHH24MISS' ) as dataRicIn
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN rich_in,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out,
mnp.MNP_XML_OUT xml_out
WHERE rich_out.id_richiesta = rich_in.id_richiesta
AND ack_in.nome_file_riferito=rich_out.nome_file
and rich_out.nome_file = xml_out.nome_file
and xml_out.tipo_file = 3 --porting
and xml_out.destinatario <> 'NPTS'
and xml_out.destinatario = xml_in.mittente
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;
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;
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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;
cod_errore := 0;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
-- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *10;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
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);
temp_data_in DATE;
temp_data_fin DATE;
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 --,0 as richiestaAdHoc
,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
,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
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;
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'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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 ?
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 AND TIPO_OPERATORE = 'MVNO';
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tFinale);
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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *50;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
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);
temp_data_in DATE;
temp_data_fin DATE;
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 --,0 as richiestaAdHoc
,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
,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
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;
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'));
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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 AND TIPO_OPERATORE = 'MVNO';
-- RICAVA FINESTRE TEMPORALI PER TIPO FILE ?
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;
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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(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); --qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) ); --qui
l_penale:= l_giorni_ritardo *50;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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_in DATE;
temp_data_fin DATE;
ora_fin_ftemp1 CHAR(2);
min_fin_ftemp1 CHAR(2);
sec_fin_ftemp1 CHAR(2);
dataFinale DATE;
l_penale NUMBER;
l_giorni_ritardo NUMBER;
l_numero_sim NUMBER;
ora_fin_ftemp2 CHAR(2);
min_fin_ftemp2 CHAR(2);
sec_fin_ftemp2 CHAR(2);
CURSOR record_sla is
/*
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG''
,'TIMG' AS recipientRete
,xml_in.MITTENTE as terzaParte
,'R' as processo
,0 as richiestaAdHocAom --,0 as richiestaAdHoc
,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
,ack_out.nome_file as ackFinale
, TO_CHAR( to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) ,'MM/YYYY' ) AS meseCompFinale
,NULL AS nomeFileIniziale
,xml_in.NOME_FILE 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));
*/
SELECT rich_rec_virt.ID_RICHIESTA AS idRichiesta
,'SLA3' as tipoMessaggio
,rich_rec_virt.CODICE_OPERATORE_DONATING as donorEffettivo -- rif. email Letizia 29/9/10 era xml_in.MITTENTE
,rich_rec_virt.CODICE_OPERATORE_RECIPIENT as recipientEffettivo
,to_date( SUBSTR( ack_out.NOME_FILE, 5 , 14) ,'YYYYMMDDHH24MISS' ) AS dataMessaggio
,xml_in.MITTENTE AS donorRete -- rif. email Letizia 29/9/10 era 'TIMG''
,'TIMG' AS recipientRete
,xml_in.MITTENTE as terzaParte
,'R' as processo
,0 as richiestaAdHocAom --,0 as richiestaAdHoc
,NULL 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_virt.DATA_CUT_OVER_CALC as dataCutOver
,rich_rec_virt.MSISDN as msIsdn
,ack_in.NOME_FILE as ackIniziale
,ack_out.nome_file as ackFinale
, 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 , 8) ,'YYYYMMDDHH24MISS' ) AS dataRicIn
FROM mnp.MNP_GEST_RICH_REC_VIRT rich_rec_virt ,
mnp.MNP_XML_ACK_OUT ack_out ,
mnp.MNP_XML_IN xml_in ,
mnp.MNP_XML_RICHIESTA_IN rich_in,
mnp.MNP_XML_ACK_IN ack_in ,
mnp.MNP_XML_RICHIESTA_OUT rich_out,
mnp.MNP_XML_OUT xml_out
WHERE rich_out.id_richiesta = rich_in.id_richiesta
AND ack_in.nome_file_riferito=rich_out.nome_file
and rich_out.nome_file = xml_out.nome_file
and xml_out.tipo_file = 3 --porting
and xml_out.destinatario <> 'NPTS'
and xml_out.destinatario = xml_in.mittente
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;
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 ?
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;
cod_errore := 0;
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;
FOR rec IN record_sla LOOP
n_rec := n_rec +1;
-- SE IL FILE '?' 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 := dwh.FUN_DATE_FESTIVE_SUCC(rec.tIniziale);
END IF;
-- SE IL FILE '5' E' ARRIVATO OLTRE L'ORA DI FINE FINESTRA TEMPORALE, IMPOSTA T_FINALE ALLA DATA DEL FILE TIPO '5'
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 := dwh.FUN_DATE_FESTIVE_SUCC(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);--qui
l_giorni_ritardo := TRUNC( trunc(temp_data_fin) - trunc(dataFinale) );
l_penale:= l_giorni_ritardo *10;
l_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
,temp_data_in
,temp_data_fin
,rec.dataCutOver
,rec.msIsdn
,rec.ackIniziale
,rec.ackFinale
,dataFinale
,rec.meseCompFinale
,rec.nomeFileIniziale
,rec.nomeFileFinale
,l_giorni_ritardo
,l_penale
,l_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):=0;
cod_errore_sla1_don NUMBER (1):=0;
cod_errore_sla2_don NUMBER (1):=0;
cod_errore_sla3_don NUMBER (1):=0;
cod_errore_sla0_rec NUMBER (1):=0;
cod_errore_sla1_rec NUMBER (1):=0;
cod_errore_sla2_rec NUMBER (1):=0;
cod_errore_sla3_rec NUMBER (1):=0;
cod_errore_sla1_don_virt NUMBER (1):=0;
cod_errore_sla2_don_virt NUMBER (1):=0;
cod_errore_sla3_don_virt NUMBER (1):=0;
cod_errore_sla1_rec_virt NUMBER (1):=0;
cod_errore_sla2_rec_virt NUMBER (1):=0;
cod_errore_sla3_rec_virt NUMBER (1):=0;
cod_errore_sla1_rec_virt_M2M NUMBER (1):=0;
cod_errore_sla2_rec_virt_M2M NUMBER (1):=0;
cod_errore_sla3_rec_virt_M2M NUMBER (1):=0;
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;
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;
/