expsigladb.Package.CNRCTB925_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRCTB925
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRCTB925" AS
-- =================================================================================================
-- Controllo congruenza parametri in input
-- =================================================================================================
PROCEDURE chkParametriInput
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2
) IS
Begin
-------------------------------------------------------------------------------------------------
-- Verifica congruenza parametri.
-- aEsercizio, aMese, repID e aUtente non possono essere nulli
IF (inEsercizio IS NULL Or
inMese IS NULL OR
inRepID IS NULL OR
inUtente IS NULL) THEN
IBMERR001.RAISE_ERR_GENERICO
('Valorizzazione parametri in input errata. ' ||
'Un identificativo (esercizio, mese, identificativo report, id utente) risulta non valorizzato');
END IF;
End chkParametriInput;
-- =================================================================================================
-- Memorizzazione parametri di uso della procedura di stampa
-- =================================================================================================
PROCEDURE valorizzaParametri
(
inEsercizio NUMBER
) IS
i BINARY_INTEGER;
aRecUnitaOrganizzativa UNITA_ORGANIZZATIVA%ROWTYPE;
BEGIN
------------------------------------------------------------------------------------------------
-- Azzeramento tabella parametri
parametri_tab.DELETE;
------------------------------------------------------------------------------------------------
-- Valorizzazione parametri
FOR i IN 1 .. 2
LOOP
BEGIN
IF i = 1 THEN
null;
-- Memorizzazione STATO_CONTABILE_LIQUIDAZIONE_CORI dell'Ateneo
ELSIF i = 2 THEN
parametri_tab(i).stringa:=CNRCTB015.getVal01PerChiave(inEsercizio,
'GESTIONE_CORI_SPECIALE',
'STATO_LIQUIDA_CORI');
END IF;
END;
END LOOP;
END valorizzaParametri;
-- =================================================================================================
-- Inserimento record in ESTRAZ_INPS_MENS_DETT
-- =================================================================================================
PROCEDURE insEstrazioneInpsMensileDett
(
aRecEstrazioneInpsMensileDett ESTRAZ_INPS_MENS_DETT%ROWTYPE
) IS
BEGIN
INSERT INTO ESTRAZ_INPS_MENS_DETT
(id_estrazione,
esercizio,
mese,
cd_cds_compenso,
cd_uo_compenso,
esercizio_compenso,
pg_compenso,
esercizio_pagamento,
fl_senza_calcoli,
stato_cofi,
dt_registrazione_compenso,
dt_cmp_da_compenso,
dt_cmp_a_compenso,
dt_emissione_mandato,
dt_trasmissione_mandato,
dt_pagamento_mandato,
ti_anagrafico,
cd_anag,
cd_terzo,
cd_trattamento,
cd_contributo_ritenuta,
ds_contributo_ritenuta,
pg_riga,
imponibile_cori,
imponibile_cori_dett,
aliquota_cori_dett,
ammontare_cori_dett,
tipo_rapporto,
codice_attivita,
altra_assic,
dacr,
utcr,
duva,
utuv,
pg_ver_rec,
ammontare_cori_dett_ente,
ammontare_cori_dett_perc,
codice_comune)
VALUES (aRecEstrazioneInpsMensileDett.id_estrazione,
aRecEstrazioneInpsMensileDett.esercizio,
aRecEstrazioneInpsMensileDett.mese,
aRecEstrazioneInpsMensileDett.cd_cds_compenso,
aRecEstrazioneInpsMensileDett.cd_uo_compenso,
aRecEstrazioneInpsMensileDett.esercizio_compenso,
aRecEstrazioneInpsMensileDett.pg_compenso,
aRecEstrazioneInpsMensileDett.esercizio_pagamento,
aRecEstrazioneInpsMensileDett.fl_senza_calcoli,
aRecEstrazioneInpsMensileDett.stato_cofi,
aRecEstrazioneInpsMensileDett.dt_registrazione_compenso,
aRecEstrazioneInpsMensileDett.dt_cmp_da_compenso,
aRecEstrazioneInpsMensileDett.dt_cmp_a_compenso,
aRecEstrazioneInpsMensileDett.dt_emissione_mandato,
aRecEstrazioneInpsMensileDett.dt_trasmissione_mandato,
aRecEstrazioneInpsMensileDett.dt_pagamento_mandato,
aRecEstrazioneInpsMensileDett.ti_anagrafico,
aRecEstrazioneInpsMensileDett.cd_anag,
aRecEstrazioneInpsMensileDett.cd_terzo,
aRecEstrazioneInpsMensileDett.cd_trattamento,
aRecEstrazioneInpsMensileDett.cd_contributo_ritenuta,
aRecEstrazioneInpsMensileDett.ds_contributo_ritenuta,
aRecEstrazioneInpsMensileDett.pg_riga,
aRecEstrazioneInpsMensileDett.imponibile_cori,
aRecEstrazioneInpsMensileDett.imponibile_cori_dett,
aRecEstrazioneInpsMensileDett.aliquota_cori_dett,
aRecEstrazioneInpsMensileDett.ammontare_cori_dett,
aRecEstrazioneInpsMensileDett.tipo_rapporto,
aRecEstrazioneInpsMensileDett.codice_attivita,
aRecEstrazioneInpsMensileDett.altra_assic,
aRecEstrazioneInpsMensileDett.dacr,
aRecEstrazioneInpsMensileDett.utcr,
aRecEstrazioneInpsMensileDett.duva,
aRecEstrazioneInpsMensileDett.utuv,
aRecEstrazioneInpsMensileDett.pg_ver_rec,
aRecEstrazioneInpsMensileDett.ammontare_cori_dett_ente,
aRecEstrazioneInpsMensileDett.ammontare_cori_dett_perc,
aRecEstrazioneInpsMensileDett.codice_comune);
END insEstrazioneInpsMensileDett;
-- =================================================================================================
-- Inserimento record in ESTRAZ_INPS_MENS
-- =================================================================================================
PROCEDURE insEstrazioneInpsMensile
(
aRecEstrazioneInpsMensile ESTRAZ_INPS_MENS%Rowtype
) IS
BEGIN
INSERT INTO ESTRAZ_INPS_MENS
(id_estrazione,
esercizio,
mese,
cd_anag,
chiave_inps,
progressivo,
tipo_rapporto,
codice_attivita,
imponibile,
segno_imponibile,
aliquota,
dt_inizio_attivita,
dt_fine_attivita,
altra_assic,
dacr,
utcr,
duva,
utuv,
pg_ver_rec,
contributi_dovuti,
segno_contributi_dovuti,
contributi_trattenuti,
segno_contributi_trattenuti,
contributi_versati,
segno_contributi_versati,
codice_comune)
VALUES (aRecEstrazioneInpsMensile.id_estrazione,
aRecEstrazioneInpsMensile.esercizio,
aRecEstrazioneInpsMensile.mese,
aRecEstrazioneInpsMensile.cd_anag,
aRecEstrazioneInpsMensile.chiave_inps,
aRecEstrazioneInpsMensile.progressivo,
aRecEstrazioneInpsMensile.tipo_rapporto,
aRecEstrazioneInpsMensile.codice_attivita,
aRecEstrazioneInpsMensile.imponibile,
aRecEstrazioneInpsMensile.segno_imponibile,
aRecEstrazioneInpsMensile.aliquota,
aRecEstrazioneInpsMensile.dt_inizio_attivita,
aRecEstrazioneInpsMensile.dt_fine_attivita,
aRecEstrazioneInpsMensile.altra_assic,
aRecEstrazioneInpsMensile.dacr,
aRecEstrazioneInpsMensile.utcr,
aRecEstrazioneInpsMensile.duva,
aRecEstrazioneInpsMensile.utuv,
aRecEstrazioneInpsMensile.pg_ver_rec,
aRecEstrazioneInpsMensile.contributi_dovuti,
aRecEstrazioneInpsMensile.segno_contributi_dovuti,
aRecEstrazioneInpsMensile.contributi_trattenuti,
aRecEstrazioneInpsMensile.segno_contributi_trattenuti,
aRecEstrazioneInpsMensile.contributi_versati,
aRecEstrazioneInpsMensile.segno_contributi_versati,
aRecEstrazioneInpsMensile.codice_comune);
END insEstrazioneInpsMensile;
-- =================================================================================================
-- Estrazione dati per file INPS (Inserimento record in ESTRAZIONE_INPS_MENSILE_DETT)
-- =================================================================================================
PROCEDURE inserisciDatiINPSMensileDett
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2
) IS
memChiaveCompenso VARCHAR2(500);
memPgRiga NUMBER(10);
memTiCoriEPPrec CHAR(1);
aRecVEstraiDatiInps V_ESTRAI_DATI_INPS%ROWTYPE;
aRecEstrazioneInpsMensileDett ESTRAZ_INPS_MENS_DETT%ROWTYPE;
gen_cur GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
-- Inizializza variabili
memChiaveCompenso:=NULL;
memPgRiga:=NULL;
memTiCoriEPPrec:=NULL;
-------------------------------------------------------------------------------------------------
-- Ciclo principale di lettura record per inserimento in ESTRAZIONE_INPS_MENSILE_DETT
BEGIN
IF parametri_tab(2).stringa = CNRCTB575.STATO_LIQUID_CORI_INV THEN
--UTILIZZATA SEMPRE V_ESTRAI_DATI_INPS, AGGIUNTA CONDIZIONE SUL MESE
Open gen_cur For
SELECT *
FROM V_ESTRAI_DATI_INPS
WHERE esercizio_pagamento = inEsercizio And
dt_trasmissione_mandato IS Not Null And
To_Char(dt_trasmissione_mandato,'MM') = inMese
ORDER BY cd_cds_compenso,
cd_uo_compenso,
esercizio_compenso,
pg_compenso,
pg_riga,
ti_ente_percipiente
FOR UPDATE OF pg_compenso NOWAIT;
ELSE
Open gen_cur For
SELECT *
FROM V_ESTRAI_DATI_INPS
WHERE esercizio_pagamento = inEsercizio And
To_Char(dt_emissione_mandato,'MM') = inMese
ORDER BY cd_cds_compenso,
cd_uo_compenso,
esercizio_compenso,
pg_compenso,
pg_riga,
ti_ente_percipiente
FOR UPDATE OF pg_compenso NOWAIT;
END IF;
LOOP
FETCH gen_cur INTO
aRecVEstraiDatiInps;
EXIT WHEN gen_cur%NOTFOUND;
-- Prima volta
IF memChiaveCompenso IS NULL THEN
aRecEstrazioneInpsMensileDett:=NULL;
memChiaveCompenso:=aRecVEstraiDatiInps.chiave_compenso;
memPgRiga:=aRecVEstraiDatiInps.pg_riga;
memTiCoriEPPrec:=TICORIPERCIP;
END IF;
-- Se il compenso letto è diverso dal precedente o se il progressivo di riga è diverso dal
-- precedente allora scrivo il compenso in ESTRAZ_INPS_MENS_DETT
IF (memChiaveCompenso != aRecVEstraiDatiInps.chiave_compenso OR
memPgRiga != aRecVEstraiDatiInps.pg_riga) THEN
insEstrazioneInpsMensileDett(aRecEstrazioneInpsMensileDett);
memChiaveCompenso:=aRecVEstraiDatiInps.chiave_compenso;
memPgRiga:=aRecVEstraiDatiInps.pg_riga;
END IF;
-- Controllo sequenza record ENTE --> PERCIPIENTE
IF aRecVEstraiDatiInps.ti_ente_percipiente = memTiCoriEPPrec THEN
IBMERR001.RAISE_ERR_GENERICO
('Errore in sequenza record. Un CORI ente non è precedute da uno percipiente o viceversa ' || CHR(10) ||
'Compenso UO ' || aRecVEstraiDatiInps.cd_uo_compenso ||
' esercizio ' || aRecVEstraiDatiInps.esercizio_compenso ||
' progressivo ' || aRecVEstraiDatiInps.pg_compenso);
END IF;
memTiCoriEPPrec:=aRecVEstraiDatiInps.ti_ente_percipiente;
-- Costruzione del record
If aRecVEstraiDatiInps.ti_ente_percipiente = TICORIENTE Then
aRecEstrazioneInpsMensileDett:=NULL;
aRecEstrazioneInpsMensileDett.id_estrazione:=inRepID;
aRecEstrazioneInpsMensileDett.esercizio:=inEsercizio;
aRecEstrazioneInpsMensileDett.mese:=inMese;
aRecEstrazioneInpsMensileDett.cd_cds_compenso:=aRecVEstraiDatiInps.cd_cds_compenso;
aRecEstrazioneInpsMensileDett.cd_uo_compenso:=aRecVEstraiDatiInps.cd_uo_compenso;
aRecEstrazioneInpsMensileDett.esercizio_compenso:=aRecVEstraiDatiInps.esercizio_compenso;
aRecEstrazioneInpsMensileDett.pg_compenso:=aRecVEstraiDatiInps.pg_compenso;
aRecEstrazioneInpsMensileDett.esercizio_pagamento:=aRecVEstraiDatiInps.esercizio_pagamento;
aRecEstrazioneInpsMensileDett.fl_senza_calcoli:=aRecVEstraiDatiInps.fl_senza_calcoli;
aRecEstrazioneInpsMensileDett.stato_cofi:=aRecVEstraiDatiInps.stato_cofi;
aRecEstrazioneInpsMensileDett.dt_registrazione_compenso:=aRecVEstraiDatiInps.dt_registrazione_compenso;
aRecEstrazioneInpsMensileDett.dt_cmp_da_compenso:=TRUNC(aRecVEstraiDatiInps.dt_cmp_da_compenso);
aRecEstrazioneInpsMensileDett.dt_cmp_a_compenso:=TRUNC(aRecVEstraiDatiInps.dt_cmp_a_compenso);
aRecEstrazioneInpsMensileDett.dt_emissione_mandato:=TRUNC(aRecVEstraiDatiInps.dt_emissione_mandato);
aRecEstrazioneInpsMensileDett.dt_trasmissione_mandato:=TRUNC(aRecVEstraiDatiInps.dt_trasmissione_mandato);
aRecEstrazioneInpsMensileDett.dt_pagamento_mandato:=TRUNC(aRecVEstraiDatiInps.dt_pagamento_mandato);
aRecEstrazioneInpsMensileDett.ti_anagrafico:=aRecVEstraiDatiInps.ti_anagrafico;
aRecEstrazioneInpsMensileDett.cd_anag:=aRecVEstraiDatiInps.cd_anag;
aRecEstrazioneInpsMensileDett.cd_terzo:=aRecVEstraiDatiInps.cd_terzo;
aRecEstrazioneInpsMensileDett.cd_trattamento:=aRecVEstraiDatiInps.cd_trattamento;
aRecEstrazioneInpsMensileDett.cd_contributo_ritenuta:=aRecVEstraiDatiInps.cd_contributo_ritenuta;
aRecEstrazioneInpsMensileDett.ds_contributo_ritenuta:=aRecVEstraiDatiInps.ds_contributo_ritenuta;
aRecEstrazioneInpsMensileDett.pg_riga:=aRecVEstraiDatiInps.pg_riga;
aRecEstrazioneInpsMensileDett.imponibile_cori:=aRecVEstraiDatiInps.imponibile;
If aRecVEstraiDatiInps.pg_riga = 0 Then
--aRecEstrazioneInpsDett.imponibile_cori_dett:=aRecVEstraiDatiInps.imponibile;
aRecEstrazioneInpsMensileDett.imponibile_cori_dett:=aRecEstrazioneInpsMensileDett.imponibile_cori;
aRecEstrazioneInpsMensileDett.aliquota_cori_dett:=aRecVEstraiDatiInps.aliquota;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett:=aRecVEstraiDatiInps.ammontare;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett_ente:=aRecVEstraiDatiInps.ammontare;
Else
aRecEstrazioneInpsMensileDett.imponibile_cori_dett:=aRecVEstraiDatiInps.imponibile_det;
aRecEstrazioneInpsMensileDett.aliquota_cori_dett:=aRecVEstraiDatiInps.aliquota_det;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett:=aRecVEstraiDatiInps.ammontare_det;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett_ente:=aRecVEstraiDatiInps.ammontare_det;
End If;
aRecEstrazioneInpsMensileDett.tipo_rapporto:=aRecVEstraiDatiInps.cd_rapporto_inps;
aRecEstrazioneInpsMensileDett.codice_attivita:=aRecVEstraiDatiInps.cd_attivita_inps;
-- Per i vecchi compensi in cui non sono valorizzate queste informazioni,
-- aggiunti valori fissi per non modificare la base dati
/* ormai non serve più
If aRecEstrazioneInpsMensileDett.tipo_rapporto Is Null Then
If aRecVEstraiDatiInps.cd_tipo_rapporto = 'COLL' Then
aRecEstrazioneInpsMensileDett.tipo_rapporto:='11';
aRecEstrazioneInpsMensileDett.codice_attivita:='17';
Else
aRecEstrazioneInpsMensileDett.tipo_rapporto:='09';
aRecEstrazioneInpsMensileDett.codice_attivita:=Null;
End If;
End If;
*/
--Aggiunto il comune presso il quale il lavoratore svolge la propria attività
--Se il comune è in Italia, viene inserito il codice catastale
--Se il comune è estero, viene inserito il codice fisco dello stato estero
If aRecVEstraiDatiInps.pg_comune_inps Is Not Null Then
Declare
italiano_estero VARCHAR2(1);
cod_com VARCHAR2(10);
cod_naz VARCHAR2(10);
Begin
Select c.ti_italiano_estero, c.cd_catastale, n.cd_catastale
Into italiano_estero, cod_com, cod_naz
From comune c, nazione n
Where c.pg_comune = aRecVEstraiDatiInps.pg_comune_inps
And c.pg_nazione = n.pg_nazione;
If italiano_estero = 'I' Then
aRecEstrazioneInpsMensileDett.codice_comune:=cod_com;
Else
aRecEstrazioneInpsMensileDett.codice_comune:=cod_naz;
End If;
Exception
When No_Data_Found Then
aRecEstrazioneInpsMensileDett.codice_comune:=Null;
End;
Else
aRecEstrazioneInpsMensileDett.codice_comune:=Null;
End If;
aRecEstrazioneInpsMensileDett.dacr:=dataOdierna;
aRecEstrazioneInpsMensileDett.utcr:=inUtente;
aRecEstrazioneInpsMensileDett.duva:=dataOdierna;
aRecEstrazioneInpsMensileDett.utuv:=inUtente;
aRecEstrazioneInpsMensileDett.pg_ver_rec:=1;
Else --gli imponibili non vanno sommati
If aRecVEstraiDatiInps.pg_riga = 0 Then
aRecEstrazioneInpsMensileDett.aliquota_cori_dett:=aRecEstrazioneInpsMensileDett.aliquota_cori_dett +
aRecVEstraiDatiInps.aliquota;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett:=aRecEstrazioneInpsMensileDett.ammontare_cori_dett +
aRecVEstraiDatiInps.ammontare;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett_perc:= aRecVEstraiDatiInps.ammontare;
Else
aRecEstrazioneInpsMensileDett.aliquota_cori_dett:=aRecEstrazioneInpsMensileDett.aliquota_cori_dett +
aRecVEstraiDatiInps.aliquota_det;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett:=aRecEstrazioneInpsMensileDett.ammontare_cori_dett +
aRecVEstraiDatiInps.ammontare_det;
aRecEstrazioneInpsMensileDett.ammontare_cori_dett_perc:= aRecVEstraiDatiInps.ammontare_det;
End If;
aRecEstrazioneInpsMensileDett.altra_assic := aRecVEstraiDatiInps.cd_altra_ass_inps;
-- Per i vecchi compensi in cui non e' valorizzato il campo altre_assic,
-- aggiunto valore fisso per non modificare la base dati
-- ma solo per le aliquote ridotte
If aRecEstrazioneInpsMensileDett.altra_assic Is Null Then
If (aRecEstrazioneInpsMensileDett.aliquota_cori_dett * 100) < 1780 Then
If (aRecEstrazioneInpsMensileDett.aliquota_cori_dett * 100) = 1500 Then
aRecEstrazioneInpsMensileDett.altra_assic:='002';
Else
aRecEstrazioneInpsMensileDett.altra_assic:='201';
End If;
Else
aRecEstrazioneInpsMensileDett.altra_assic:=Null;
End If;
End If;
--Per i vecchi compensi in cui c'e' ancora l'aliquota 17,80 e 18,80, forziamo
--i valori richiesti dall'INPS
If (aRecEstrazioneInpsMensileDett.aliquota_cori_dett * 100) = 1780 Then
aRecEstrazioneInpsMensileDett.aliquota_cori_dett := (1800 / 100);
End If;
If (aRecEstrazioneInpsMensileDett.aliquota_cori_dett * 100) = 1880 Then
aRecEstrazioneInpsMensileDett.aliquota_cori_dett := (1900 / 100);
End If;
End If;
END LOOP;
CLOSE gen_cur;
-- Scrittura ultimo record
-- ma solo se la fetch ha restituito dei valori
If memChiaveCompenso Is Not Null Then
insEstrazioneInpsMensileDett(aRecEstrazioneInpsMensileDett);
End If;
END;
END inserisciDatiINPSMensileDett;
-- =================================================================================================
-- Inserimento dati per FILE INPS - Aggregazione dati in ESTRAZ_INPS_MENS
-- =================================================================================================
PROCEDURE aggregaDatiInpsMensile
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2
) IS
memCdAnag NUMBER(8);
memTipoRapporto VARCHAR2(2);
memAliquota NUMBER;
memImportoConSegno NUMBER;
memContribDovutiConSegno NUMBER;
memContribTrattenutiConSegno NUMBER;
memContribVersatiConSegno NUMBER;
aRecEstrazioneINPSMensileDett ESTRAZ_INPS_MENS_DETT%ROWTYPE;
aRecEstrazioneINPSMensile ESTRAZ_INPS_MENS%ROWTYPE;
gen_cur GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
-- Inizializzazione variabili
memCdAnag:=NULL;
BEGIN
OPEN gen_cur FOR
SELECT *
FROM ESTRAZ_INPS_MENS_DETT
WHERE id_estrazione = inRepID AND
esercizio = inEsercizio And
mese = inMese
ORDER BY cd_anag,
tipo_rapporto,
aliquota_cori_dett;
LOOP
FETCH gen_cur INTO
aRecEstrazioneINPSMensileDett;
EXIT WHEN gen_cur%NOTFOUND;
-- E' la prima volta o il soggetto anagrafico letto è diverso dal precedente --------------
-- Devo inserire la riga ogni volta che cambia l'anagrafica, il tipo rapporto o l'aliquota
-- Devo costruire il record la prima volta oppure
-- se cambia l'anagrafica, il tipo rapporto o l'aliquota
If (memCdAnag IS NULL Or
memCdAnag != aRecEstrazioneINPSMensileDett.cd_anag Or
memTipoRapporto != aRecEstrazioneINPSMensileDett.tipo_rapporto Or
memAliquota != aRecEstrazioneINPSMensileDett.aliquota_cori_dett) THEN
-- inserisco il record solo se ci sono dati
If memCdAnag Is Not Null Then
insEstrazioneInpsMensile(aRecEstrazioneInpsMensile);
End If;
-- Costruisco il nuovo record
If (memCdAnag IS Null Or memCdAnag != aRecEstrazioneINPSMensileDett.cd_anag) Then
aRecEstrazioneInpsMensile.progressivo:= 1;
Else
aRecEstrazioneInpsMensile.progressivo:=aRecEstrazioneINPSMensile.progressivo + 1;
End If;
memCdAnag:=aRecEstrazioneINPSMensileDett.cd_anag;
memTipoRapporto:=aRecEstrazioneINPSMensileDett.tipo_rapporto;
memAliquota:=aRecEstrazioneINPSMensileDett.aliquota_cori_dett;
memImportoConSegno := 0;
memContribDovutiConSegno :=0;
memContribTrattenutiConSegno :=0;
memContribVersatiConSegno :=0;
aRecEstrazioneINPSMensile.id_estrazione:=aRecEstrazioneINPSMensileDett.id_estrazione;
aRecEstrazioneINPSMensile.esercizio:=aRecEstrazioneINPSMensileDett.esercizio;
aRecEstrazioneINPSMensile.mese:=aRecEstrazioneINPSMensileDett.mese;
aRecEstrazioneINPSMensile.cd_anag:=aRecEstrazioneINPSMensileDett.cd_anag;
aRecEstrazioneINPSMensile.chiave_inps:='999999999999999';
aRecEstrazioneINPSMensile.tipo_rapporto:=aRecEstrazioneINPSMensileDett.tipo_rapporto;
aRecEstrazioneINPSMensile.codice_attivita:=aRecEstrazioneINPSMensileDett.codice_attivita;
aRecEstrazioneINPSMensile.codice_comune:=aRecEstrazioneINPSMensileDett.codice_comune;
If Nvl(aRecEstrazioneINPSMensileDett.imponibile_cori_dett,0) >= 0 Then
aRecEstrazioneINPSMensile.segno_imponibile:= '+';
Else
aRecEstrazioneINPSMensile.segno_imponibile:= '-';
End If;
aRecEstrazioneINPSMensile.imponibile:=Abs(aRecEstrazioneINPSMensileDett.imponibile_cori_dett);
memImportoConSegno := aRecEstrazioneINPSMensileDett.imponibile_cori_dett;
aRecEstrazioneINPSMensile.aliquota:=aRecEstrazioneINPSMensileDett.aliquota_cori_dett;
-- Contributi Dovuti
If Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_ente,0) +
Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0) >= 0 Then
aRecEstrazioneINPSMensile.segno_contributi_dovuti:= '+';
Else
aRecEstrazioneINPSMensile.segno_contributi_dovuti:= '-';
End If;
aRecEstrazioneINPSMensile.contributi_dovuti:=Abs(Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_ente,0) +
Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0));
memContribDovutiConSegno := Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_ente,0) +
Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0);
-- Contributi Trattenuti
If Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0) >= 0 Then
aRecEstrazioneINPSMensile.segno_contributi_trattenuti:= '+';
Else
aRecEstrazioneINPSMensile.segno_contributi_trattenuti:= '-';
End If;
aRecEstrazioneINPSMensile.contributi_trattenuti:=Abs(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc);
memContribTrattenutiConSegno := Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0);
-- Contributi Versati sono uguali a quelli Dovuti
aRecEstrazioneINPSMensile.segno_contributi_versati := aRecEstrazioneINPSMensile.segno_contributi_dovuti;
aRecEstrazioneINPSMensile.contributi_versati := aRecEstrazioneINPSMensile.contributi_dovuti;
--le due date seguenti vengono aggiornate succesivamente
aRecEstrazioneINPSMensile.dt_inizio_attivita:=Null;
aRecEstrazioneINPSMensile.dt_fine_attivita:=Null;
aRecEstrazioneINPSMensile.altra_assic:=aRecEstrazioneINPSMensileDett.altra_assic;
aRecEstrazioneInpsMensile.dacr:=dataOdierna;
aRecEstrazioneInpsMensile.utcr:=inUtente;
aRecEstrazioneInpsMensile.duva:=dataOdierna;
aRecEstrazioneInpsMensile.utuv:=inUtente;
aRecEstrazioneInpsMensile.pg_ver_rec:=1;
Else
aRecEstrazioneINPSMensile.imponibile:= memImportoConSegno + aRecEstrazioneINPSMensileDett.imponibile_cori_dett;
If aRecEstrazioneINPSMensile.imponibile >= 0 Then
aRecEstrazioneINPSMensile.segno_imponibile:= '+';
Else
aRecEstrazioneINPSMensile.segno_imponibile:= '-';
End If;
memImportoConSegno := aRecEstrazioneINPSMensile.imponibile;
aRecEstrazioneINPSMensile.imponibile:=Abs( aRecEstrazioneINPSMensile.imponibile);
-- Contributi Dovuti
aRecEstrazioneINPSMensile.contributi_dovuti:= memContribDovutiConSegno +
Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_ente,0) +
Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0);
If aRecEstrazioneINPSMensile.contributi_dovuti >= 0 Then
aRecEstrazioneINPSMensile.segno_contributi_dovuti:= '+';
Else
aRecEstrazioneINPSMensile.segno_contributi_dovuti:= '-';
End If;
memContribDovutiConSegno := aRecEstrazioneINPSMensile.contributi_dovuti;
aRecEstrazioneINPSMensile.contributi_dovuti:=Abs( aRecEstrazioneINPSMensile.contributi_dovuti);
-- Contributi Trattenuti
aRecEstrazioneINPSMensile.contributi_trattenuti:= memContribTrattenutiConSegno +
Nvl(aRecEstrazioneINPSMensileDett.ammontare_cori_dett_perc,0);
If aRecEstrazioneINPSMensile.contributi_trattenuti >= 0 Then
aRecEstrazioneINPSMensile.segno_contributi_trattenuti:= '+';
Else
aRecEstrazioneINPSMensile.segno_contributi_trattenuti:= '-';
End If;
memContribTrattenutiConSegno := aRecEstrazioneINPSMensile.contributi_trattenuti;
aRecEstrazioneINPSMensile.contributi_trattenuti:=Abs( aRecEstrazioneINPSMensile.contributi_trattenuti);
-- Contributi Versati sono uguali a quelli Dovuti
aRecEstrazioneINPSMensile.segno_contributi_versati := aRecEstrazioneINPSMensile.segno_contributi_dovuti;
aRecEstrazioneINPSMensile.contributi_versati := aRecEstrazioneINPSMensile.contributi_dovuti;
End If;
END LOOP;
CLOSE gen_cur;
-- Scrittura ultimo record
-- ma solo se la fetch ha restituito dei valori
If memCdAnag IS Not Null Then
insEstrazioneInpsMensile(aRecEstrazioneInpsMensile);
End If;
END;
End aggregaDatiInpsMensile;
-- =================================================================================================
-- Inserimento dati anagrafici in ESTRAZ_INPS_MENS
-- =================================================================================================
PROCEDURE insDatiAnagInpsMensile
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER
) IS
cv_ti_entita CHAR(1);
cv_ti_entita_fisica CHAR(1);
cv_ti_entita_giuridica CHAR(1);
cv_cognome VARCHAR2(100);
cv_nome VARCHAR2(100);
cv_ragione_sociale VARCHAR2(100);
cv_fl_applic_aliquota_max CHAR(1);
cv_via_fiscale VARCHAR2(150);
cv_num_civico_fiscale VARCHAR2(10);
cv_dip_cap_domfisc VARCHAR(20);
memCdAnag ESTRAZ_INPS_MENS.cd_anag%TYPE;
aImAddRegRate NUMBER(15,2);
aImAddComRate NUMBER(15,2);
aRecEstrazioneINPSMensile ESTRAZ_INPS_MENS%ROWTYPE;
gen_cur GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
-- Aggiornamento dati dei soggetti anagrafici presenti in ESTRAZ_INPS_MENS
BEGIN
OPEN gen_cur FOR
SELECT A.cd_anag,
B.ti_entita,
B.ti_entita_fisica,
B.ti_entita_giuridica,
B.cognome,
B.nome,
B.ragione_sociale,
B.codice_fiscale,
B.ti_sesso,
TO_CHAR(B.dt_nascita,'DD'),
TO_CHAR(B.dt_nascita,'MM'),
TO_CHAR(B.dt_nascita,'YYYY'),
C.ds_comune,
C.cd_provincia,
D.ds_comune,
D.cd_provincia,
D.cd_catastale,
DECODE(B.aliquota_fiscale, NULL, 'N', 'Y'),
B.cap_comune_fiscale,
B.via_fiscale,
B.num_civico_fiscale
FROM ESTRAZ_INPS_MENS A, ANAGRAFICO B,
COMUNE C, COMUNE D
WHERE A.id_estrazione = inRepID AND
A.esercizio = inEsercizio And
A.mese = inMese And
B.cd_anag = A.cd_anag AND
C.pg_comune = B.pg_comune_nascita AND
D.pg_comune = B.pg_comune_fiscale;
LOOP
FETCH gen_cur INTO
aRecEstrazioneINPSMensile.cd_anag,
cv_ti_entita,
cv_ti_entita_fisica,
cv_ti_entita_giuridica,
cv_cognome,
cv_nome,
cv_ragione_sociale,
aRecEstrazioneINPSMensile.dip_codice_fiscale,
aRecEstrazioneINPSMensile.dip_sesso,
aRecEstrazioneINPSMensile.dip_gg_nascita,
aRecEstrazioneINPSMensile.dip_mm_nascita,
aRecEstrazioneINPSMensile.dip_aa_nascita,
aRecEstrazioneINPSMensile.dip_com_nascita,
aRecEstrazioneINPSMensile.dip_prv_nascita,
aRecEstrazioneINPSMensile.dip_com_domfisc,
aRecEstrazioneINPSMensile.dip_prv_domfisc,
aRecEstrazioneINPSMensile.dip_cod_com_domfisc,
cv_fl_applic_aliquota_max,
cv_dip_cap_domfisc,
cv_via_fiscale,
cv_num_civico_fiscale;
EXIT WHEN gen_cur%NOTFOUND;
-- Aggiornamento dati da ESTRAZ_INPS_MENS_DETT su ESTRAZ_INPS_MENS inclusi dati di testata
aRecEstrazioneINPSMensile.dip_cognome:=NULL;
aRecEstrazioneINPSMensile.dip_nome:=NULL;
IF cv_ti_entita = 'U' THEN
aRecEstrazioneINPSMensile.dip_cognome:=cv_ragione_sociale;
ELSIF cv_ti_entita = 'G' THEN
aRecEstrazioneINPSMensile.dip_cognome:=cv_ragione_sociale;
ELSIF cv_ti_entita = 'F' Then
-- anche per cv_ti_entita_fisica = 'D' deve essere passato il cognome ed il nome
--IF cv_ti_entita_fisica = 'D' THEN
--aRecEstrazioneINPSMensile.dip_cognome:=cv_ragione_sociale;
--ELSE
aRecEstrazioneINPSMensile.dip_cognome:=cv_cognome;
aRecEstrazioneINPSMensile.dip_nome:=cv_nome;
--END IF;
ELSIF cv_ti_entita = 'D' THEN
IF cv_ragione_sociale IS NOT NULL THEN
aRecEstrazioneINPSMensile.dip_cognome:=cv_ragione_sociale;
ELSE
aRecEstrazioneINPSMensile.dip_cognome:=cv_cognome;
aRecEstrazioneINPSMensile.dip_nome:=cv_nome;
END IF;
END IF;
IF cv_num_civico_fiscale IS NOT NULL THEN
cv_via_fiscale:=cv_via_fiscale || ', ' || cv_num_civico_fiscale;
END IF;
If Length(Nvl(cv_dip_cap_domfisc,'')) = 5 Then
aRecEstrazioneINPSMensile.dip_cap_domfisc := cv_dip_cap_domfisc;
Else
aRecEstrazioneINPSMensile.dip_cap_domfisc := Null;
End If;
-- Normalizzazione estrazioni per congruenza alla dimensione su db
BEGIN
UPDATE ESTRAZ_INPS_MENS
SET dip_codice_fiscale = aRecEstrazioneINPSMensile.dip_codice_fiscale,
dip_cognome = aRecEstrazioneINPSMensile.dip_cognome,
dip_nome = aRecEstrazioneINPSMensile.dip_nome,
dip_sesso = aRecEstrazioneINPSMensile.dip_sesso,
dip_gg_nascita = aRecEstrazioneINPSMensile.dip_gg_nascita,
dip_mm_nascita = aRecEstrazioneINPSMensile.dip_mm_nascita,
dip_aa_nascita = aRecEstrazioneINPSMensile.dip_aa_nascita,
dip_com_nascita = aRecEstrazioneINPSMensile.dip_com_nascita,
dip_prv_nascita = aRecEstrazioneINPSMensile.dip_prv_nascita,
dip_cap_domfisc = aRecEstrazioneINPSMensile.dip_cap_domfisc,
dip_ind_domfisc = cv_via_fiscale,
dip_com_domfisc = aRecEstrazioneINPSMensile.dip_com_domfisc,
dip_prv_domfisc = aRecEstrazioneINPSMensile.dip_prv_domfisc,
dip_cod_com_domfisc = aRecEstrazioneINPSMensile.dip_cod_com_domfisc
WHERE id_estrazione = inRepID AND
esercizio = inEsercizio And
mese =inMese And
cd_anag = aRecEstrazioneINPSMensile.cd_anag;
END;
END LOOP;
CLOSE gen_cur;
END;
END insDatiAnagInpsMensile;
-- =================================================================================================
-- Aggiornamento del numero di giorni lavorati
-- =================================================================================================
PROCEDURE scriviGiorniLavoro
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2,
aCdAnag NUMBER
) IS
aDataMinGenerale DATE;
aDataMaxGenerale DATE;
aDataFineAnno DATE;
i BINARY_INTEGER;
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizzazione costanti
aDataFineAnno:=TO_DATE('3112' || inEsercizio,'DDMMYYYY');
tabella_date_ok_tutte.DELETE;
-- Azzeramento tabella date negative per recupero rate se non ci sono intervalli ordinari
If tabella_date_tutte.COUNT = 0 THEN
tabella_date_tutte_neg.DELETE;
END IF;
-------------------------------------------------------------------------------------------------
-- Normalizzazione delle date per includere il recupero delle rate ed eliminare periodi di eventuale
-- sovrapposizione
-- Date tutti i compensi
IF tabella_date_tutte.COUNT > 0 THEN
CNRCTB650.scaricaRecuperoRate(tabella_date_tutte,
tabella_date_tutte_neg);
CNRCTB650.normalizzaMatriceDate(tabella_date_tutte,
tabella_date_ok_tutte);
CNRCTB650.chkSpuriRecuperoRate(tabella_date_tutte_neg);
END IF;
-------------------------------------------------------------------------------------------------
-- Calcolo della minima e massima data dei compensi ed aggiornamento delle annotazioni (DATE COMPENSI)
BEGIN
aDataMinGenerale:=NULL; -- devo considerare tutti i compensi (anche a tassazione separata)
aDataMaxGenerale:=NULL; -- devo considerare tutti i compensi (anche a tassazione separata)
IF tabella_date_ok_tutte.COUNT > 0 THEN
FOR i IN tabella_date_ok_tutte.FIRST .. tabella_date_ok_tutte.LAST
LOOP
-- Determino intervallo minino e massimo delle date compensi per CNR
IF aDataMinGenerale IS NULL THEN
aDataMinGenerale:=tabella_date_ok_tutte(i).tDataDa;
aDataMaxGenerale:=tabella_date_ok_tutte(i).tDataA;
ELSE
IF tabella_date_ok_tutte(i).tDataDa < aDataMinGenerale THEN
aDataMinGenerale:=tabella_date_ok_tutte(i).tDataDa;
END IF;
IF tabella_date_ok_tutte(i).tDataA > aDataMaxGenerale THEN
aDataMaxGenerale:=tabella_date_ok_tutte(i).tDataA;
END IF;
END IF;
END LOOP;
-- Normalizzazione date generali al 31/12/XXXX
-- 27/09/2012 MD - Eliminata normalizzazione date
/*
IF aDataMinGenerale > aDataFineAnno THEN
aDataMinGenerale:=aDataFineAnno;
END IF;
IF aDataMaxGenerale > aDataFineAnno THEN
aDataMaxGenerale:=aDataFineAnno;
END IF;
*/
END IF;
END;
-------------------------------------------------------------------------------------------------
-- Aggiornamento ESTRAZ_INPS_MENS per il periodo di competenza dei compensi
BEGIN
UPDATE ESTRAZ_INPS_MENS
SET cnr_data_assunzione = aDataMinGenerale,
dt_inizio_attivita = aDataMinGenerale,
cnr_data_cessazione = aDataMaxGenerale,
dt_fine_attivita = aDataMaxGenerale
WHERE id_estrazione = inRepID AND
esercizio = inEsercizio And
mese = inMese And
cd_anag = aCdAnag;
END;
END scriviGiorniLavoro;
-- =================================================================================================
-- Calcolo del numero di giorni di riferimento
-- =================================================================================================
PROCEDURE calcolaGiorniLavoro
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2
) IS
dataDa DATE;
dataA DATE;
memCdAnag ESTRAZ_INPS_MENS_DETT.cd_anag%TYPE;
i BINARY_INTEGER;
k BINARY_INTEGER;
aRecEstrazioneINPSMensile ESTRAZ_INPS_MENS%ROWTYPE;
aRecEstrazioneINPSMensileDett ESTRAZ_INPS_MENS_DETT%ROWTYPE;
gen_cur GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
BEGIN
memCdAnag:=NULL;
-- Apertura cursore e determinazione degli intervalli date di lavoro a parità di codice e tipo anagrafico
OPEN gen_cur FOR
SELECT A.cd_anag,
B.fl_recupero_rate,
A.dt_cmp_da_compenso,
A.dt_cmp_a_compenso
FROM ESTRAZ_INPS_MENS_DETT A,
COMPENSO B
WHERE A.id_estrazione = inRepID AND
A.esercizio = inEsercizio And
A.mese = inMese And
B.cd_cds = A.cd_cds_compenso AND
B.cd_unita_organizzativa = A.cd_uo_compenso AND
B.esercizio = A.esercizio_compenso AND
B.pg_compenso = A.pg_compenso
ORDER BY cd_anag;
LOOP
FETCH gen_cur INTO
aRecEstrazioneINPSMensileDett.cd_anag,
aRecEstrazioneINPSMensileDett.fl_recupero_rate,
aRecEstrazioneINPSMensileDett.dt_cmp_da_compenso,
aRecEstrazioneINPSMensileDett.dt_cmp_a_compenso;
EXIT WHEN gen_cur%NOTFOUND;
-- E' la prima volta che leggo un record dalla fetch
IF memCdAnag IS NULL THEN
tabella_date_tutte.DELETE;
tabella_date_tutte_neg.DELETE;
i:=0;
memCdAnag:=aRecEstrazioneINPSMensileDett.cd_anag;
END IF;
IF memCdAnag != aRecEstrazioneINPSMensileDett.cd_anag THEN
scriviGiorniLavoro(inEsercizio,
inMese,
inRepID,
inUtente,
memCdAnag);
tabella_date_tutte.DELETE;
tabella_date_tutte_neg.DELETE;
i:=0;
memCdAnag:=aRecEstrazioneINPSMensileDett.cd_anag;
END IF;
-- Aggiornamento della tabella di memorizzazione delle date lavorate
dataDa:= aRecEstrazioneINPSMensileDett.dt_cmp_da_compenso;
dataA:= aRecEstrazioneINPSMensileDett.dt_cmp_a_compenso;
IF dataDa IS NOT NULL THEN
If aRecEstrazioneINPSMensileDett.fl_recupero_rate= 'N' THEN
CNRCTB545.componiMatriceDate(tabella_date_tutte,
dataDa,
dataA,
'N',
'Y');
Else
CNRCTB545.componiMatriceDate(tabella_date_tutte_neg,
dataDa,
dataA,
'N',
'Y');
End If;
END IF;
END LOOP;
scriviGiorniLavoro(inEsercizio,
inMese,
inRepID,
inUtente,
memCdAnag);
CLOSE gen_cur;
END;
END calcolaGiorniLavoro;
-- =================================================================================================
-- Scrittura dei file
-- =================================================================================================
PROCEDURE scriviFileOutput
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2
) IS
mioCLOB CLOB;
mioCLOBAnag CLOB;
aStringaChiave1 VARCHAR2(5);
aStringaChiave2 VARCHAR2(8);
aStringaChiave3 VARCHAR2(6);
aStringa VARCHAR2(1000);
aDifferenza INTEGER;
aStringaImporto VARCHAR2(10);
i BINARY_INTEGER;
aRecBframeBlob BFRAME_BLOB%ROWTYPE;
aRecBframeBlobAnag BFRAME_BLOB%ROWTYPE;
aRecEstrazioneInpsMensile ESTRAZ_INPS_MENS%ROWTYPE;
gen_cur GenericCurTyp;
anag NUMBER;
BEGIN
-------------------------------------------------------------------------------------------------
-- Inizializzazione CLOB per dati Contabili
aRecBframeBlob.cd_tipo:=IDTIPOBLOB;
aRecBframeBlob.path:='fileoutINPS/' || inEsercizio || Lpad(inMese,2,'0')|| '/';
aRecBframeBlob.filename:='FILEOUT_INPS_' || inRepID || '.DAT';
aRecBframeBlob.ti_visibilita:='U';
aRecBframeBlob.ds_file:='FILE OUTPUT ESTRAZIONE INPS';
aRecBframeBlob.ds_utente:='FILE DETTAGLI CONTABILI';
-- Inizializzazione CLOB per dati Anagrafici
aRecBframeBlobAnag.cd_tipo:=IDTIPOBLOB;
aRecBframeBlobAnag.path:='fileoutINPS/' || inEsercizio || Lpad(inMese,2,'0')|| '/';
aRecBframeBlobAnag.filename:='FILEOUT_INPS_' || inRepID || '_ANAG.DAT';
aRecBframeBlobAnag.ti_visibilita:='U';
aRecBframeBlobAnag.ds_file:='FILE OUTPUT ESTRAZIONE INPS';
aRecBframeBlobAnag.ds_utente:='FILE DETTAGLI ANAGRAFICI';
IBMUTL005.ShIniCBlob(aRecBframeBlob.cd_tipo,
aRecBframeBlob.path,
aRecBframeBlob.filename,
aRecBframeBlob.ti_visibilita,
aRecBframeBlob.ds_file,
aRecBframeBlob.ds_utente,
inUtente,
mioCLOB);
IBMUTL005.ShIniCBlob(aRecBframeBlobAnag.cd_tipo,
aRecBframeBlobAnag.path,
aRecBframeBlobAnag.filename,
aRecBframeBlobAnag.ti_visibilita,
aRecBframeBlobAnag.ds_file,
aRecBframeBlobAnag.ds_utente,
inUtente,
mioCLOBAnag);
-------------------------------------------------------------------------------------------------
-- Scrittura CLOB (file output estrazione INPS)
BEGIN
-- Valorizzazione costanti della chiave file -------------------------------------------------
aStringaChiave2:='94109411';
-- Ciclo elaborazione dati INPS --------------------------------------------------------------
OPEN gen_cur FOR
SELECT *
FROM ESTRAZ_INPS_MENS
WHERE id_estrazione = inRepID AND
esercizio = inEsercizio And
mese = inMese And
Nvl(imponibile,0) > 0 And
(aliquota > 0 Or segno_imponibile = '-' or nvl(contributi_versati,0) != 0)
ORDER BY cd_anag;
LOOP
FETCH gen_cur INTO
aRecEstrazioneInpsMensile;
EXIT WHEN gen_cur%NOTFOUND;
-- Creazione di due diversi file (anagrafico e dettaglio)
FOR i IN 1 .. 2
LOOP
aStringa:=NULL;
-- Dettaglio anagrafico ----------------------------------------------------------------
IF i = 1 Then
--il record anagrafico lo metto una sola volta
If anag Is Null Or aRecEstrazioneInpsMensile.cd_anag != anag Then
-- Chiave
aStringaChiave1:='1010 ';
aStringaChiave3:=LPAD((300000 + aRecEstrazioneInpsMensile.cd_anag),6,'0');
aStringa:=aStringaChiave1 || aStringaChiave2 || aStringaChiave3;
-- Cognome
IF aRecEstrazioneInpsMensile.dip_cognome IS NULL THEN
aStringa:=aStringa || RPAD(' ', 24, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_cognome), 1, 24), 24, ' ');
END IF;
-- Nome
IF aRecEstrazioneInpsMensile.dip_nome IS NULL THEN
aStringa:=aStringa || RPAD(' ', 24, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_nome), 1, 24), 24, ' ');
END IF;
-- Data assunzione (data minima di inizio competenza dei compensi elaborati)
IF aRecEstrazioneInpsMensile.cnr_data_assunzione IS NULL THEN
aStringa:=aStringa || LPAD('0', 8, '0');
ELSE
aStringa:=aStringa ||
TO_CHAR(aRecEstrazioneInpsMensile.cnr_data_assunzione, 'DD') ||
TO_CHAR(aRecEstrazioneInpsMensile.cnr_data_assunzione, 'MM') ||
TO_CHAR(aRecEstrazioneInpsMensile.cnr_data_assunzione, 'YYYY');
END IF;
-- Codice fiscale
IF aRecEstrazioneInpsMensile.dip_codice_fiscale IS NULL THEN
aStringa:=aStringa || RPAD(' ', 16, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_codice_fiscale), 1, 16), 16, ' ');
END IF;
-- Data di nascita
IF (aRecEstrazioneInpsMensile.dip_gg_nascita IS NULL OR
aRecEstrazioneInpsMensile.dip_mm_nascita IS NULL OR
aRecEstrazioneInpsMensile.dip_aa_nascita IS NULL) THEN
aStringa:=aStringa || LPAD('0', 8, '0');
ELSE
aStringa:=aStringa || LPAD(aRecEstrazioneInpsMensile.dip_gg_nascita, 2, '0') ||
LPAD(aRecEstrazioneInpsMensile.dip_mm_nascita, 2, '0') ||
LPAD(aRecEstrazioneInpsMensile.dip_aa_nascita, 4, '0');
END IF;
-- Comune di nascita
IF aRecEstrazioneInpsMensile.dip_com_nascita IS NULL THEN
aStringa:=aStringa || RPAD(' ', 24, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_com_nascita), 1, 24), 24, ' ');
END IF;
-- Provincia di nascita
IF aRecEstrazioneInpsMensile.dip_prv_nascita IS NULL THEN
aStringa:=aStringa || RPAD(' ', 3, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_prv_nascita), 1, 3), 3, ' ');
END IF;
-- Sesso
IF aRecEstrazioneInpsMensile.dip_sesso IS NULL THEN
aStringa:=aStringa || ' ';
ELSE
aStringa:=aStringa || Upper(aRecEstrazioneInpsMensile.dip_sesso);
END IF;
-- Provincia di residenza
IF aRecEstrazioneInpsMensile.dip_prv_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 3, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_prv_domfisc), 1, 3), 3, ' ');
END IF;
-- Data cessazione (data massima di fine competenza dei compensi elaborati)
IF aRecEstrazioneInpsMensile.cnr_data_cessazione IS NULL THEN
aStringa:=aStringa || LPAD('0', 8, '0');
ELSE
aStringa:=aStringa ||
TO_CHAR(aRecEstrazioneInpsMensile.cnr_data_cessazione, 'DD') ||
TO_CHAR(aRecEstrazioneInpsMensile.cnr_data_cessazione, 'MM') ||
TO_CHAR(aRecEstrazioneInpsMensile.cnr_data_cessazione, 'YYYY');
END IF;
-- Filler
aStringa:=aStringa || RPAD(' ', 2, ' ');
-- Indirizzo del domicilio fiscale
IF aRecEstrazioneInpsMensile.dip_ind_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 24, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_ind_domfisc), 1, 24), 24, ' ');
END IF;
-- CAP del domicilio fiscale
IF aRecEstrazioneInpsMensile.dip_cap_domfisc IS NULL THEN
aStringa:=aStringa || LPAD('0', 5, '0');
ELSE
IF IBMUTL001.isNumeric(aRecEstrazioneInpsMensile.dip_cap_domfisc) = 'Y' THEN
aStringa:=aStringa || LPAD(aRecEstrazioneInpsMensile.dip_cap_domfisc, 5, '0');
ELSE
aStringa:=aStringa || LPAD('0', 5, '0');
END IF;
END IF;
-- Provincia del domicilio fiscale
IF aRecEstrazioneInpsMensile.dip_prv_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 3, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_prv_domfisc), 1, 3), 3, ' ');
END IF;
-- Comune del domicilio fiscale
IF aRecEstrazioneInpsMensile.dip_com_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 24, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_com_domfisc), 1, 24), 24, ' ');
END IF;
IF aRecEstrazioneInpsMensile.dip_com_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 24, ' ');
ELSE
IF LENGTH(aRecEstrazioneInpsMensile.dip_com_domfisc) > 24 THEN
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_com_domfisc), 25, 24), 24, ' ');
ELSE
aStringa:=aStringa || RPAD(' ', 24, ' ');
END IF;
END IF;
-- Qualifica 770/SA
aStringa:=aStringa || RPAD(' ', 5, ' ');
-- Codice comune
IF aRecEstrazioneInpsMensile.dip_cod_com_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 4, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_cod_com_domfisc), 1, 4), 4, ' ');
END IF;
-- Provincia lavoro
aStringa:=aStringa || LPAD('9', 6, '9');
-- Indirizzo Domicilio Fiscale completo solo per la stampa delle Etichette
IF aRecEstrazioneInpsMensile.dip_ind_domfisc IS NULL THEN
aStringa:=aStringa || RPAD(' ', 100, ' ');
ELSE
aStringa:=aStringa || RPAD(SUBSTR(Upper(aRecEstrazioneInpsMensile.dip_ind_domfisc), 1, 100), 100, ' ');
END IF;
IF LENGTH(aStringa) != 335 THEN
IBMERR001.RAISE_ERR_GENERICO
('Errore in lunghezza file in output tipo record 1010 lunghezza ' || LENGTH(aStringa));
END IF;
IBMUTL005.ShPutLine(aRecBframeBlobAnag.cd_tipo,
aRecBframeBlobAnag.path,
aRecBframeBlobAnag.filename,
mioCLOBAnag,
aStringa);
End If;
anag := aRecEstrazioneInpsMensile.cd_anag;
-- Dettaglio importi -------------------------------------------------------------------
ELSE
-- Chiave
aStringaChiave1:='50';
aStringaChiave3:=LPAD((300000 + aRecEstrazioneInpsMensile.cd_anag),6,'0');
aStringa:=aStringaChiave2 || aStringaChiave3;
-- Campi contabili
aStringa:=aStringa ||
LPAD(inEsercizio, 4, '0') ||
LPAD(inMese, 2, '0') ||
LPAD(aRecEstrazioneInpsMensile.chiave_inps, 15, '9') ||
LPAD('9', 2, '9') ||
aStringaChiave1 ||
LPAD(aRecEstrazioneInpsMensile.progressivo, 2, '0') ||
Rpad(Nvl(aRecEstrazioneInpsMensile.tipo_rapporto,' '),2,' ') ||
Rpad(Nvl(aRecEstrazioneInpsMensile.codice_attivita,'0'),2,'0') ||
Lpad((aRecEstrazioneInpsMensile.imponibile * 100), 9, '0') ||
Nvl(aRecEstrazioneInpsMensile.segno_imponibile, ' ') ||
Lpad((aRecEstrazioneInpsMensile.aliquota * 100), 4, '0') ||
Lpad(To_Char(aRecEstrazioneInpsMensile.dt_inizio_attivita,'ddmmyyyy'), 8, '0') ||
Lpad(To_Char(aRecEstrazioneInpsMensile.dt_fine_attivita,'ddmmyyyy'), 8, '0') ||
Lpad('0', 9, '0') || --importo agevolazione
' ' || --segno importo agevolazione
Lpad('0', 2, '0') || --tipo agevolazione
Lpad('0', 2, '0') || --codice calamita' naturale
Lpad(Nvl(aRecEstrazioneInpsMensile.altra_assic,'0'),3,'0') ||
Lpad('0', 3, '0') || --codice certificazione
Lpad((aRecEstrazioneInpsMensile.contributi_dovuti * 100), 9, '0') ||
Nvl(aRecEstrazioneInpsMensile.segno_contributi_dovuti, ' ') ||
Lpad((aRecEstrazioneInpsMensile.contributi_trattenuti * 100), 9, '0') ||
Nvl(aRecEstrazioneInpsMensile.segno_contributi_trattenuti, ' ') ||
Lpad((aRecEstrazioneInpsMensile.contributi_versati * 100), 9, '0') ||
Nvl(aRecEstrazioneInpsMensile.segno_contributi_versati, ' ') ||
Rpad(Substr(Nvl(aRecEstrazioneInpsMensile.codice_comune,' '),1,4),4,' ') ||
Rpad(' ', 119, ' ') || --spazio
'N' ||
'I';
IF LENGTH(aStringa) != 250 THEN
IBMERR001.RAISE_ERR_GENERICO
('Errore in lunghezza file in output tipo record 50 lunghezza ' || LENGTH(aStringa));
END IF;
IBMUTL005.ShPutLine(aRecBframeBlob.cd_tipo,
aRecBframeBlob.path,
aRecBframeBlob.filename,
mioCLOB,
aStringa);
END IF;
END LOOP;
END LOOP;
CLOSE gen_cur;
END;
-------------------------------------------------------------------------------------------------
-- Chiusura CLOB
IBMUTL005.ShCloseClob(aRecBframeBlob.cd_tipo,
aRecBframeBlob.path,
aRecBframeBlob.filename,
mioCLOB);
IBMUTL005.ShCloseClob(aRecBframeBlobAnag.cd_tipo,
aRecBframeBlobAnag.path,
aRecBframeBlobAnag.filename,
mioCLOBAnag);
END scriviFileOutput;
-- =================================================================================================
-- Estrazione dati per stampa INPS mensile
-- =================================================================================================
PROCEDURE estrazioneDatiINPSMensile
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inUtente VARCHAR2,
pg_exec NUMBER
) IS
BEGIN
-------------------------------------------------------------------------------------------------
-- Inizializzazione variabili
dataOdierna:=sysdate;
-------------------------------------------------------------------------------------------------
-- Inserimento in ESTRAZIONE_INPS_MENSILE_DETT dei compensi oggetto di esposizione nel GLA. Caricamento
-- dei dati relativi alla testata del compenso
IBMUTL200.LOGINF(pg_exec,
'Estrazione dati INPS mensile - Dettaglio elaborazione',
'FASE 1',
'FASE 1 - Inserimento compensi in ESTRAZ_INPS_MENS_DETT');
inserisciDatiINPSMensileDett(inEsercizio,
inMese,
inRepID,
inUtente);
COMMIT;
-------------------------------------------------------------------------------------------------
-- Aggregazione dati di ESTRAZ_INPS_MENS_DETT in ESTRAZ_INPS_MENS.
IBMUTL200.LOGINF(pg_exec,
'Estrazione dati INPS mensile - Dettaglio elaborazione',
'FASE 2',
'FASE 2 - Aggregazione dati di ESTRAZ_INPS_MENS_DETT in ESTRAZ_INPS_MENS');
aggregaDatiInpsMensile(inEsercizio,
inMese,
inRepID,
inUtente);
-------------------------------------------------------------------------------------------------
-- Aggiornamento dati anagrafici.
IBMUTL200.LOGINF(pg_exec,
'Estrazione dati INPS mensile - Dettaglio elaborazione',
'FASE 3',
'FASE 3 - Aggiornamento dati anagrafici in ESTRAZ_INPS_MENS');
insDatiAnagInpsMensile(inEsercizio,
inMese,
inRepID);
-------------------------------------------------------------------------------------------------
-- Calcolo del periodo di attivita'
IBMUTL200.LOGINF(pg_exec,
'Estrazione dati INPS mensile - Dettaglio elaborazione',
'FASE 4',
'FASE 4 - Calcolo giorni lavoro');
calcolaGiorniLavoro(inEsercizio,
inMese,
inRepID,
inUtente);
-------------------------------------------------------------------------------------------------
-- Scrittura dei due file INPS (anagrafico e contabile)
IBMUTL200.LOGINF(pg_exec,
'Estrazione dati INPS mensile - Dettaglio elaborazione',
'FASE 5',
'FASE 5 - creazione CLOB (file output)');
scriviFileOutput(inEsercizio,
inMese,
inRepID,
inUtente);
IBMUTL200.LOGINF(pg_exec,
'Estrazione dati INPS mensile - Dettaglio elaborazione',
'FASE 6',
'FASE 6 - Fine caricamento');
END estrazioneDatiINPSMensile;
-- =================================================================================================
-- Lancio estrazione INPS mensile
-- =================================================================================================
PROCEDURE estrazioneINPSMensileInterna
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inMsgError IN OUT VARCHAR2,
inUtente VARCHAR2,
pg_exec NUMBER
) IS
Begin
-------------------------------------------------------------------------------------------------
-- Controllo congruenza parametri in input
chkParametriInput(inEsercizio,
inMese,
inRepID,
inUtente);
-- Valorizzazione parametri utilizzati nell'estrazione
valorizzaParametri(inEsercizio);
-------------------------------------------------------------------------------------------------
-- Estrazione dati per INPS
estrazioneDatiINPSMensile(inEsercizio,
inMese,
inRepID,
inUtente,
pg_exec);
END estrazioneINPSMensileInterna;
-- =================================================================================================
-- Guscio per gestione estrazione INPS mensile in batch
-- =================================================================================================
PROCEDURE job_estrazioneINPSmensile
(
job NUMBER,
pg_exec NUMBER,
next_date DATE,
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inMsgError VARCHAR2,
inUtente VARCHAR2
) IS
aStringa VARCHAR2(2000);
i BINARY_INTEGER;
BEGIN
-- Lancio start esecuzione log
aStringa:=inMsgError;
IBMUTL210.logStartExecutionUpd(pg_exec, IDTIPOLOG, job, 'Richista utente:' || inUtente,
'Estrazione dati INPS mensile. Start:' || TO_CHAR(sysdate,'YYYY/MM/DD HH-MI-SS'));
BEGIN
estrazioneINPSMensileInterna(inEsercizio,
inMese,
inRepID,
aStringa,
inUtente,
pg_exec);
COMMIT;
-- Messaggio di operazione completata ad utente
IBMUTL205.LOGINF('Estrazione dati INPS mensile',
'Estrazione dati INPS mensile ' || TO_CHAR(sysdate,'DD/MM/YYYY HH:MI:SS'),
'Operazione completata con successo',
inUtente);
EXCEPTION
WHEN others THEN
ROLLBACK;
-- Messaggio di attenzione ad utente
IBMUTL205.LOGWAR('Estrazione dati INPS mensile ' || errori_tab.COUNT,
'Estrazione dati INPS mensile ' || TO_CHAR(sysdate,'DD/MM/YYYY HH:MI:SS') || ' ' ||
'(pg_exec = ' || pg_exec || ')', DBMS_UTILITY.FORMAT_ERROR_STACK, inUtente);
-- Scrittura degli eventuali altri errori
IF errori_tab.COUNT > 0 THEN
FOR i IN errori_tab.FIRST .. errori_tab.LAST
LOOP
IBMUTL200.LOGWAR(pg_exec,
'Estrazione dati INPS mensile - Dettaglio errori',
'Errore : ' || errori_tab(i).tStringaErr,
'Identificativo = ' || errori_tab(i).tStringaKey);
END LOOP;
END IF;
END;
END job_estrazioneINPSmensile;
-- =================================================================================================
-- Main estrazione INPS Mensile Standard
-- =================================================================================================
PROCEDURE estrazioneINPSmensile
(
inEsercizio NUMBER,
inMese NUMBER,
inRepID INTEGER,
inMsgError IN OUT VARCHAR2,
inUtente VARCHAR2
) IS
aProcedure VARCHAR2(2000);
aStringa VARCHAR2(2000);
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizza parametri
aStringa:=inMsgError;
-------------------------------------------------------------------------------------------------
-- Attivazione della gestione batch per estrazione INPS Mensile
aProcedure:='CNRCTB925.job_estrazioneINPSmensile(job, ' ||
'pg_exec, ' ||
'next_date, ' ||
inEsercizio || ',''' ||
inMese || ''',' ||
inRepID || ',''' ||
aStringa || ''',' ||
'''' || inUtente || ''');';
IBMUTL210.CREABATCHDINAMICO('Estrazione dati INPS Mensile',
aProcedure,
inUtente);
IBMUTL001.deferred_commit;
IBMERR001.RAISE_ERR_GENERICO
('Operazione sottomessa per esecuzione. Al completamento l''utente riceverà un messaggio di notifica ' ||
'dello stato dell''operazione');
END estrazioneINPSmensile;
-- =================================================================================================
END; -- PACKAGE END;
© 2015 - 2024 Weber Informatics LLC | Privacy Policy