expsigladb.Package.CNRCTB545_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRCTB545
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRCTB545" AS
--==================================================================================================
-- Ritorna un record della tabella COMPENSO
--==================================================================================================
FUNCTION getCompenso
(
aCdCds COMPENSO.cd_cds%TYPE,
aCdUnitaOrganizzativa COMPENSO.cd_unita_organizzativa%TYPE,
aEsercizio COMPENSO.esercizio%TYPE,
aPgCompenso COMPENSO.pg_compenso%TYPE,
eseguiLock CHAR
) RETURN COMPENSO%ROWTYPE IS
aRecCompenso COMPENSO%ROWTYPE;
BEGIN
IF eseguiLock = 'Y' THEN
SELECT * INTO aRecCompenso
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso
FOR UPDATE NOWAIT;
ELSE
SELECT * INTO aRecCompenso
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
END IF;
RETURN aRecCompenso;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Compenso U.O. ' || aCdUnitaOrganizzativa ||
' numero ' || aEsercizio || '/' || aPgCompenso ||
' non trovata');
END getCompenso;
--==================================================================================================
-- Ritorna un record della tabella COMPENSO che risulta collegatom a missione
--==================================================================================================
FUNCTION getCompensoDaMissione
(
aCdCds MISSIONE.cd_cds%TYPE,
aCdUnitaOrganizzativa MISSIONE.cd_unita_organizzativa%TYPE,
aEsercizio MISSIONE.esercizio%TYPE,
aPgMissione MISSIONE.pg_missione%TYPE,
eseguiLock CHAR
) RETURN COMPENSO%ROWTYPE IS
aRecCompenso COMPENSO%ROWTYPE;
BEGIN
IF eseguiLock = 'Y' THEN
SELECT * INTO aRecCompenso
FROM COMPENSO
WHERE cd_cds_missione = aCdCds AND
cd_uo_missione = aCdUnitaOrganizzativa AND
esercizio_missione = aEsercizio AND
pg_missione = aPgMissione AND
pg_compenso > 0 AND
stato_cofi != 'A'
FOR UPDATE NOWAIT;
ELSE
SELECT * INTO aRecCompenso
FROM COMPENSO
WHERE cd_cds_missione = aCdCds AND
cd_uo_missione = aCdUnitaOrganizzativa AND
esercizio_missione = aEsercizio AND
pg_missione = aPgMissione AND
pg_compenso > 0 AND
stato_cofi != 'A';
END IF;
RETURN aRecCompenso;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Non è stato trovato alcun compenso asociato alla missione U.O. ' || aCdUnitaOrganizzativa ||
' numero ' || aEsercizio || '/' || aPgMissione);
END getCompensoDaMissione;
-- =================================================================================================
-- Ritorna un record della tabella TIPO_TRATTAMENTO
-- =================================================================================================
FUNCTION getTipoTrattamento
(
aCdTrattamento VARCHAR2,
aDataRif DATE
) RETURN TIPO_TRATTAMENTO%ROWTYPE IS
aRecTipoTrattamento TIPO_TRATTAMENTO%ROWTYPE;
BEGIN
SELECT * INTO aRecTipoTrattamento
FROM TIPO_TRATTAMENTO
WHERE cd_trattamento = aCdTrattamento AND
dt_ini_validita <= aDataRif AND
dt_fin_validita >= aDataRif;
RETURN aRecTipoTrattamento;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Tipo trattamento ' || aCdTrattamento ||
' data riferimento ' || TO_CHAR(aDataRif,'DD/MM/YYYY') ||
' non trovato');
END getTipoTrattamento;
-- =================================================================================================
-- Ritorna un record della tabella TIPO_TRATTAMENTO con gestione del trattamento chiuso
-- =================================================================================================
FUNCTION getTipoTrattamento
(
aCdTrattamento VARCHAR2,
aDataRif DATE,
aGestioneChiuso CHAR
) RETURN TIPO_TRATTAMENTO%ROWTYPE IS
aRecTipoTrattamento TIPO_TRATTAMENTO%ROWTYPE;
BEGIN
SELECT * INTO aRecTipoTrattamento
FROM TIPO_TRATTAMENTO
WHERE cd_trattamento = aCdTrattamento AND
dt_ini_validita <= aDataRif AND
dt_fin_validita >= aDataRif;
RETURN aRecTipoTrattamento;
EXCEPTION
WHEN no_data_found THEN
IF (aGestioneChiuso IS NOT NULL AND
aGestioneChiuso = 'Y') THEN
BEGIN
SELECT * INTO aRecTipoTrattamento
FROM TIPO_TRATTAMENTO A
WHERE A.cd_trattamento = aCdTrattamento AND
A.dt_fin_validita =
(SELECT MAX(B.dt_fin_validita)
FROM TIPO_TRATTAMENTO B
WHERE B.cd_trattamento = A.cd_trattamento);
RETURN aRecTipoTrattamento;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Tipo trattamento ' || aCdTrattamento ||
' data riferimento ' || TO_CHAR(aDataRif,'DD/MM/YYYY') || ' non trovato');
END;
ELSE
IBMERR001.RAISE_ERR_GENERICO
('Tipo trattamento ' || aCdTrattamento ||
' data riferimento ' || TO_CHAR(aDataRif,'DD/MM/YYYY') || ' non trovato');
END IF;
END getTipoTrattamento;
--==================================================================================================
-- Ritorna un record della tabella SCAGLIONE
--==================================================================================================
FUNCTION getScaglione
(
aCdContributoRitenuta SCAGLIONE.cd_contributo_ritenuta%TYPE,
aTiAnagrafico SCAGLIONE.ti_anagrafico%TYPE,
aDataRif DATE,
aImportoRif IN OUT SCAGLIONE.im_inferiore%TYPE,
aAliquota IN OUT SCAGLIONE.aliquota%TYPE,
aCdRegione SCAGLIONE.cd_regione%TYPE,
aCdProvincia SCAGLIONE.cd_provincia%TYPE,
aPgComune SCAGLIONE.pg_comune%TYPE
) RETURN V_PRE_SCAGLIONE%ROWTYPE IS
chkEsisteScaglione INTEGER;
isEnte SCAGLIONE.ti_ente_percipiente%TYPE;
isPercipiente SCAGLIONE.ti_ente_percipiente%TYPE;
aContatore BINARY_INTEGER;
gen_cur GenericCurTyp;
aRecTmpVPreScaglione V_PRE_SCAGLIONE%ROWTYPE;
aRecVPreScaglione V_PRE_SCAGLIONE%ROWTYPE;
BEGIN
-------------------------------------------------------------------------------------------------
-- Entro per aliquota quando questa è valorizzata. Generalmente solo IRPEF a scaglioni se
-- valorizzata in anagrafico
IF aAliquota != 0 THEN
SELECT COUNT(*) INTO chkEsisteScaglione
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM SCAGLIONE
WHERE cd_contributo_ritenuta = aCdContributoRitenuta AND
(ti_anagrafico = aTiAnagrafico OR
ti_anagrafico = '*') AND
dt_inizio_validita <=aDataRif AND
dt_fine_validita >= aDataRif AND
cd_regione = aCdRegione AND
cd_provincia = aCdProvincia AND
pg_comune = aPgComune AND
aliquota = aAliquota);
IF chkEsisteScaglione = 0 Then
IBMERR001.RAISE_ERR_GENERICO
('L''aliquota presente nei dati Anagrafici del percipiente non è valida.');
--aImportoRif:=0;
--aAliquota:=0;
END IF;
END IF;
-------------------------------------------------------------------------------------------------
-- Lettura degli scaglioni e controllo consistenza di questi
BEGIN
aContatore:=0;
isEnte:='N';
isPercipiente:='N';
IF aAliquota != 0 THEN
OPEN gen_cur FOR
SELECT *
FROM V_PRE_SCAGLIONE
WHERE cd_contributo_ritenuta = aCdContributoRitenuta AND
(ti_anagrafico = aTiAnagrafico OR
ti_anagrafico = '*') AND
dt_inizio_validita <=aDataRif AND
dt_fine_validita >= aDataRif AND
cd_regione = aCdRegione AND
cd_provincia = aCdProvincia AND
pg_comune = aPgComune AND
(aliquota_ente = aAliquota OR
aliquota_percip = aAliquota);
ELSE
OPEN gen_cur FOR
SELECT *
FROM V_PRE_SCAGLIONE
WHERE cd_contributo_ritenuta = aCdContributoRitenuta AND
(ti_anagrafico = aTiAnagrafico OR
ti_anagrafico = '*') AND
dt_inizio_validita <=aDataRif AND
dt_fine_validita >= aDataRif AND
cd_regione = aCdRegione AND
cd_provincia = aCdProvincia AND
pg_comune = aPgComune AND
im_inferiore <= aImportoRif AND
im_superiore >= aImportoRif;
END IF;
LOOP
FETCH gen_cur INTO
aRecTmpVPreScaglione;
EXIT WHEN gen_cur%NOTFOUND;
aContatore:=aContatore + 1;
IF aContatore = 1 THEN
aRecVPreScaglione:=aRecTmpVPreScaglione;
END IF;
IF aRecTmpVPreScaglione.ti_ente_percipiente = 'E' THEN
IF isEnte = 'Y' THEN
IBMERR001.RAISE_ERR_GENERICO
('Trovati più di un record riferito all''ente per il codice contributo ritenuta ' ||
aCdContributoRitenuta);
END IF;
isEnte:='Y';
aRecVPreScaglione.aliquota_ente:=aRecTmpVPreScaglione.aliquota_ente;
aRecVPreScaglione.base_calcolo_ente:=aRecTmpVPreScaglione.base_calcolo_ente;
ELSE
IF isPercipiente = 'Y' THEN
IBMERR001.RAISE_ERR_GENERICO
('Trovati più di un record riferito all percipiente per il codice contributo ritenuta ' ||
aCdContributoRitenuta);
END IF;
isPercipiente:='Y';
aRecVPreScaglione.aliquota_percip:=aRecTmpVPreScaglione.aliquota_percip;
aRecVPreScaglione.base_calcolo_percip:=aRecTmpVPreScaglione.base_calcolo_percip;
END IF;
END LOOP;
CLOSE gen_cur;
IF (isEnte = 'Y' AND
isPercipiente = 'Y') THEN
aRecVPreScaglione.ti_ente_percipiente:='*';
END IF;
-- Se non è stato trovato alcun record è sollevata un'eccezione
IF aContatore = 0 THEN
IBMERR001.RAISE_ERR_GENERICO
('Riferimento allo scaglione per contributo ritenuta ' || aCdContributoRitenuta || ' / Regione '||aCdRegione||' / Comune '||aPgComune||' non trovato'||aTiAnagrafico||' '||aDataRif||' '||aCdProvincia||' '||aImportoRif );
END IF;
END;
RETURN aRecVPreScaglione;
END getScaglione;
--==================================================================================================
-- Ritorna 'Y' o 'N' a seconda che esista o meno il compenso
--==================================================================================================
FUNCTION chkEsisteCompenso
(
aCdCds VARCHAR2,
aCdUnitaOrganizzativa VARCHAR2,
aEsercizio NUMBER,
aPgCompenso NUMBER
) RETURN CHAR IS
flEsisteCompenso CHAR(1);
BEGIN
SELECT DECODE(COUNT(*),0,'N','Y') INTO flEsisteCompenso
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso);
RETURN flEsisteCompenso;
END chkEsisteCompenso;
--==================================================================================================
-- Ritorna l'imponibile base di un tipo contributo ritenuta
--==================================================================================================
FUNCTION getImponibileBaseCori
(
aRecCompenso COMPENSO%ROWTYPE,
cdClassificazioneCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN NUMBER IS
aImponibile NUMBER(15,2);
BEGIN
IF cdClassificazioneCori = isCoriIva THEN
aImponibile:=aRecCompenso.im_lordo_percipiente - aRecCompenso.quota_esente_no_iva;
ELSIF (cdClassificazioneCori = isCoriFiscale OR
getIsAddTerritorio(cdClassificazioneCori) = 'Y') THEN
aImponibile:=aRecCompenso.im_lordo_percipiente - aRecCompenso.quota_esente - aRecCompenso.im_no_fiscale;
ELSIF getIsAddTerritorioRecRate(cdClassificazioneCori) = 'Y' THEN
aImponibile:=0;
Elsif cdClassificazioneCori = isCoriAddComAcconto Then
aImponibile:=0;
ELSE
aImponibile:=aRecCompenso.im_lordo_percipiente - aRecCompenso.quota_esente;
END IF;
RETURN aImponibile;
END getImponibileBaseCori;
--==================================================================================================
-- Elimina un intero COMPENSO
--==================================================================================================
PROCEDURE eliminaFisicoCompenso
(
aCdCds COMPENSO.cd_cds%TYPE,
aCdUnitaOrganizzativa COMPENSO.cd_unita_organizzativa%TYPE,
aEsercizio COMPENSO.esercizio%TYPE,
aPgCompenso COMPENSO.pg_compenso%TYPE
) IS
BEGIN
DELETE FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
END eliminaFisicoCompenso;
--==================================================================================================
-- Elimina logicamente un COMPENSO
--==================================================================================================
PROCEDURE eliminaLogicoCompenso
(
aCdCds COMPENSO.cd_cds%TYPE,
aCdUnitaOrganizzativa COMPENSO.cd_unita_organizzativa%TYPE,
aEsercizio COMPENSO.esercizio%TYPE,
aPgCompenso COMPENSO.pg_compenso%TYPE,
aUtente COMPENSO.utuv%TYPE,
aTiOrigineElimina CHAR
) IS
dataOdierna DATE;
BEGIN
dataOdierna:=SYSDATE;
-- Origine eliminazione logica = MISSIONE
IF aTiOrigineElimina = 'MI' THEN
UPDATE COMPENSO
SET stato_cofi = 'A',
dt_cancellazione = dataOdierna,
pg_missione = null,
cd_cds_missione = null,
esercizio_missione = null,
cd_uo_missione = null,
fl_diaria = 'N'
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
-- Origine eliminazione logica = CONGUAGLIO
ELSIF aTiOrigineElimina = 'GN' THEN
UPDATE COMPENSO
SET stato_cofi = 'A',
dt_cancellazione = dataOdierna,
duva = dataOdierna,
utuv = aUtente,
pg_ver_rec = pg_ver_rec + 1
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
ELSIF aTiOrigineElimina = 'G1' THEN
UPDATE COMPENSO
SET stato_cofi = 'A',
dt_cancellazione = dataOdierna,
stato_coge = CNRCTB100.STATO_COEP_DA_RIP,
duva = dataOdierna,
utuv = aUtente,
pg_ver_rec = pg_ver_rec + 1
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
ELSIF aTiOrigineElimina = 'G2' THEN
UPDATE COMPENSO
SET stato_cofi = 'A',
dt_cancellazione = dataOdierna,
stato_coan = CNRCTB100.STATO_COEP_DA_RIP,
duva = dataOdierna,
utuv = aUtente,
pg_ver_rec = pg_ver_rec + 1
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
ELSIF aTiOrigineElimina = 'GY' THEN
UPDATE COMPENSO
SET stato_cofi = 'A',
dt_cancellazione = dataOdierna,
stato_coge = CNRCTB100.STATO_COEP_DA_RIP,
stato_coan = CNRCTB100.STATO_COEP_DA_RIP,
duva = dataOdierna,
utuv = aUtente,
pg_ver_rec = pg_ver_rec + 1
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
END IF;
END eliminaLogicoCompenso;
--==================================================================================================
-- Elimina CONTRIBUTO_RITENUTA e CONTRIBUTO_RITENUTA_DET di un compenso
--==================================================================================================
PROCEDURE cancellaDetCompenso
(
aCdCds COMPENSO.cd_cds%TYPE,
aCdUnitaOrganizzativa COMPENSO.cd_unita_organizzativa%TYPE,
aEsercizio COMPENSO.esercizio%TYPE,
aPgCompenso COMPENSO.pg_compenso%TYPE
) IS
BEGIN
DELETE FROM CONTRIBUTO_RITENUTA
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso;
END cancellaDetCompenso;
--==================================================================================================
-- Inserimento in COMPENSO
--==================================================================================================
PROCEDURE insCompenso
(
aRecCompenso COMPENSO%ROWTYPE
) IS
BEGIN
INSERT INTO COMPENSO
(CD_CDS,
CD_UNITA_ORGANIZZATIVA,
ESERCIZIO,
PG_COMPENSO,
CD_CDS_ORIGINE,
CD_UO_ORIGINE,
DT_REGISTRAZIONE,
DS_COMPENSO,
TI_ANAGRAFICO,
CD_TERZO,
CD_TERZO_UO_CDS,
RAGIONE_SOCIALE,
NOME,
COGNOME,
CODICE_FISCALE,
PARTITA_IVA,
CD_TERMINI_PAG,
CD_TERMINI_PAG_UO_CDS,
CD_MODALITA_PAG,
CD_MODALITA_PAG_UO_CDS,
PG_BANCA,
PG_BANCA_UO_CDS,
CD_TIPO_RAPPORTO,
CD_TRATTAMENTO,
FL_SENZA_CALCOLI,
FL_DIARIA,
DT_CANCELLAZIONE,
STATO_COFI,
STATO_COGE,
STATO_COAN,
TI_ASSOCIATO_MANREV,
DT_EMISSIONE_MANDATO,
DT_TRASMISSIONE_MANDATO,
DT_PAGAMENTO_MANDATO,
DT_DA_COMPETENZA_COGE,
DT_A_COMPETENZA_COGE,
STATO_PAGAMENTO_FONDO_ECO,
DT_PAGAMENTO_FONDO_ECO,
IM_TOTALE_COMPENSO,
IM_LORDO_PERCIPIENTE,
IM_NETTO_PERCIPIENTE,
IM_CR_PERCIPIENTE,
IM_CR_ENTE,
QUOTA_ESENTE,
QUOTA_ESENTE_NO_IVA,
IM_NO_FISCALE,
IMPONIBILE_FISCALE,
CD_VOCE_IVA,
IMPONIBILE_IVA,
PG_COMUNE_ADD,
CD_PROVINCIA_ADD,
CD_REGIONE_ADD,
CD_REGIONE_IRAP,
CD_CDS_MISSIONE,
ESERCIZIO_MISSIONE,
PG_MISSIONE,
CD_UO_MISSIONE,
CD_CDS_OBBLIGAZIONE,
ESERCIZIO_OBBLIGAZIONE,
ESERCIZIO_ORI_OBBLIGAZIONE,
PG_OBBLIGAZIONE,
PG_OBBLIGAZIONE_SCADENZARIO,
CD_CDS_ACCERTAMENTO,
ESERCIZIO_ACCERTAMENTO,
ESERCIZIO_ORI_ACCERTAMENTO,
PG_ACCERTAMENTO,
PG_ACCERTAMENTO_SCADENZARIO,
DACR,
UTCR,
DUVA,
UTUV,
PG_VER_REC,
CD_TIPOLOGIA_RISCHIO,
DETRAZIONI_PERSONALI,
DETRAZIONI_LA,
DETRAZIONE_CONIUGE,
DETRAZIONE_FIGLI,
DETRAZIONE_ALTRI,
DETRAZIONE_RIDUZIONE_CUNEO,
DETRAZIONI_PERSONALI_NETTO,
DETRAZIONI_LA_NETTO,
DETRAZIONE_CONIUGE_NETTO,
DETRAZIONE_FIGLI_NETTO,
DETRAZIONE_ALTRI_NETTO,
DETRAZIONE_RID_CUNEO_NETTO,
CD_CDS_DOC_GENRC,
CD_UO_DOC_GENRC,
ESERCIZIO_DOC_GENRC,
CD_TIPO_DOC_GENRC,
PG_DOC_GENRC,
CD_CDR_GENRC,
CD_LINEA_ATTIVITA_GENRC,
TI_ISTITUZ_COMMERC,
IMPONIBILE_INAIL,
ESERCIZIO_FATTURA_FORNITORE,
DT_FATTURA_FORNITORE,
NR_FATTURA_FORNITORE,
FL_GENERATA_FATTURA,
FL_COMPENSO_STIPENDI,
FL_COMPENSO_CONGUAGLIO,
FL_COMPENSO_MINICARRIERA,
ALIQUOTA_IRPEF_DA_MISSIONE,
FL_COMPENSO_MCARRIERA_TASSEP,
ALIQUOTA_IRPEF_TASSEP,
IM_DEDUZIONE_IRPEF,
IMPONIBILE_FISCALE_NETTO,
NUMERO_GIORNI,
FL_ESCLUDI_QVARIA_DEDUZIONE,
FL_INTERA_QFISSA_DEDUZIONE,
IM_DETRAZIONE_PERSONALE_ANAG,
FL_RECUPERO_RATE,
ALIQUOTA_FISCALE,
FL_ACCANTONA_ADD_TERR)
VALUES (aRecCompenso.cd_cds,
aRecCompenso.cd_unita_organizzativa,
aRecCompenso.esercizio,
aRecCompenso.pg_compenso,
aRecCompenso.cd_cds_origine,
aRecCompenso.cd_uo_origine,
aRecCompenso.dt_registrazione,
aRecCompenso.ds_compenso,
aRecCompenso.ti_anagrafico,
aRecCompenso.cd_terzo,
aRecCompenso.cd_terzo_uo_cds,
aRecCompenso.ragione_sociale,
aRecCompenso.nome,
aRecCompenso.cognome,
aRecCompenso.codice_fiscale,
aRecCompenso.partita_iva,
aRecCompenso.cd_termini_pag,
aRecCompenso.cd_termini_pag_uo_cds,
aRecCompenso.cd_modalita_pag,
aRecCompenso.cd_modalita_pag_uo_cds,
aRecCompenso.pg_banca,
aRecCompenso.pg_banca_uo_cds,
aRecCompenso.cd_tipo_rapporto,
aRecCompenso.cd_trattamento,
aRecCompenso.fl_senza_calcoli,
aRecCompenso.fl_diaria,
aRecCompenso.dt_cancellazione,
aRecCompenso.stato_cofi,
aRecCompenso.stato_coge,
aRecCompenso.stato_coan,
aRecCompenso.ti_associato_manrev,
aRecCompenso.dt_emissione_mandato,
aRecCompenso.dt_trasmissione_mandato,
aRecCompenso.dt_pagamento_mandato,
aRecCompenso.dt_da_competenza_coge,
aRecCompenso.dt_a_competenza_coge,
aRecCompenso.stato_pagamento_fondo_eco,
aRecCompenso.dt_pagamento_fondo_eco,
aRecCompenso.im_totale_compenso,
aRecCompenso.im_lordo_percipiente,
aRecCompenso.im_netto_percipiente,
aRecCompenso.im_cr_percipiente,
aRecCompenso.im_cr_ente,
aRecCompenso.quota_esente,
aRecCompenso.quota_esente_no_iva,
aRecCompenso.im_no_fiscale,
aRecCompenso.imponibile_fiscale,
aRecCompenso.cd_voce_iva,
aRecCompenso.imponibile_iva,
aRecCompenso.pg_comune_add,
aRecCompenso.cd_provincia_add,
aRecCompenso.cd_regione_add,
aRecCompenso.cd_regione_irap,
aRecCompenso.cd_cds_missione,
aRecCompenso.esercizio_missione,
aRecCompenso.pg_missione,
aRecCompenso.cd_uo_missione,
aRecCompenso.cd_cds_obbligazione,
aRecCompenso.esercizio_obbligazione,
aRecCompenso.esercizio_ori_obbligazione,
aRecCompenso.pg_obbligazione,
aRecCompenso.pg_obbligazione_scadenzario,
aRecCompenso.cd_cds_accertamento,
aRecCompenso.esercizio_accertamento,
aRecCompenso.esercizio_ori_accertamento,
aRecCompenso.pg_accertamento,
aRecCompenso.pg_accertamento_scadenzario,
aRecCompenso.dacr,
aRecCompenso.utcr,
aRecCompenso.duva,
aRecCompenso.utuv,
aRecCompenso.pg_ver_rec,
aRecCompenso.cd_tipologia_rischio,
aRecCompenso.detrazioni_personali,
aRecCompenso.detrazioni_la,
aRecCompenso.detrazione_coniuge,
aRecCompenso.detrazione_figli,
aRecCompenso.detrazione_altri,
nvl(aRecCompenso.detrazione_riduzione_cuneo,0),
aRecCompenso.detrazioni_personali_netto,
aRecCompenso.detrazioni_la_netto,
aRecCompenso.detrazione_coniuge_netto,
aRecCompenso.detrazione_figli_netto,
aRecCompenso.detrazione_altri_netto,
nvl(aRecCompenso.detrazione_rid_cuneo_netto,0),
aRecCompenso.cd_cds_doc_genrc,
aRecCompenso.cd_uo_doc_genrc,
aRecCompenso.esercizio_doc_genrc,
aRecCompenso.cd_tipo_doc_genrc,
aRecCompenso.pg_doc_genrc,
aRecCompenso.cd_cdr_genrc,
aRecCompenso.cd_linea_attivita_genrc,
aRecCompenso.ti_istituz_commerc,
aRecCompenso.imponibile_inail,
aRecCompenso.esercizio_fattura_fornitore,
aRecCompenso.dt_fattura_fornitore,
aRecCompenso.nr_fattura_fornitore,
aRecCompenso.fl_generata_fattura,
aRecCompenso.fl_compenso_stipendi,
aRecCompenso.fl_compenso_conguaglio,
aRecCompenso.fl_compenso_minicarriera,
aRecCompenso.aliquota_irpef_da_missione,
aRecCompenso.fl_compenso_mcarriera_tassep,
aRecCompenso.aliquota_irpef_tassep,
aRecCompenso.im_deduzione_irpef,
aRecCompenso.imponibile_fiscale_netto,
aRecCompenso.numero_giorni,
aRecCompenso.fl_escludi_qvaria_deduzione,
aRecCompenso.fl_intera_qfissa_deduzione,
aRecCompenso.im_detrazione_personale_anag,
aRecCompenso.fl_recupero_rate,
aRecCompenso.aliquota_fiscale,
aRecCompenso.fl_accantona_add_terr);
END insCompenso;
--==================================================================================================
-- Inserimento in CONTRIBUTO_RITENUTA
--==================================================================================================
PROCEDURE insContributoRitenuta
(
aRecContributoRitenuta CONTRIBUTO_RITENUTA%ROWTYPE
) IS
BEGIN
INSERT INTO CONTRIBUTO_RITENUTA
(CD_CDS,
CD_UNITA_ORGANIZZATIVA,
ESERCIZIO,
PG_COMPENSO,
CD_CONTRIBUTO_RITENUTA,
TI_ENTE_PERCIPIENTE,
DT_INI_VALIDITA,
MONTANTE,
IMPONIBILE,
ALIQUOTA,
BASE_CALCOLO,
AMMONTARE,
STATO_COFI_CR,
CD_CDS_OBBLIGAZIONE,
ESERCIZIO_OBBLIGAZIONE,
ESERCIZIO_ORI_OBBLIGAZIONE,
PG_OBBLIGAZIONE,
PG_OBBLIGAZIONE_SCADENZARIO,
CD_CDS_ACCERTAMENTO,
ESERCIZIO_ACCERTAMENTO,
ESERCIZIO_ORI_ACCERTAMENTO,
PG_ACCERTAMENTO,
PG_ACCERTAMENTO_SCADENZARIO,
DACR,
UTCR,
DUVA,
UTUV,
PG_VER_REC,
AMMONTARE_LORDO,
IMPONIBILE_LORDO,
IM_DEDUZIONE_IRPEF,
IM_DEDUZIONE_FAMILY,
IM_CORI_SOSPESO,
fl_credito_pareggio_detrazioni)
VALUES (aRecContributoRitenuta.cd_cds,
aRecContributoRitenuta.cd_unita_organizzativa,
aRecContributoRitenuta.esercizio,
aRecContributoRitenuta.pg_compenso,
aRecContributoRitenuta.cd_contributo_ritenuta,
aRecContributoRitenuta.ti_ente_percipiente,
aRecContributoRitenuta.dt_ini_validita,
aRecContributoRitenuta.montante,
aRecContributoRitenuta.imponibile,
aRecContributoRitenuta.aliquota,
aRecContributoRitenuta.base_calcolo,
aRecContributoRitenuta.ammontare,
aRecContributoRitenuta.stato_cofi_cr,
aRecContributoRitenuta.cd_cds_obbligazione,
aRecContributoRitenuta.esercizio_obbligazione,
aRecContributoRitenuta.esercizio_ori_obbligazione,
aRecContributoRitenuta.pg_obbligazione,
aRecContributoRitenuta.pg_obbligazione_scadenzario,
aRecContributoRitenuta.cd_cds_accertamento,
aRecContributoRitenuta.esercizio_accertamento,
aRecContributoRitenuta.esercizio_ori_accertamento,
aRecContributoRitenuta.pg_accertamento,
aRecContributoRitenuta.pg_accertamento_scadenzario,
aRecContributoRitenuta.dacr,
aRecContributoRitenuta. utcr,
aRecContributoRitenuta.duva,
aRecContributoRitenuta.utuv,
aRecContributoRitenuta.pg_ver_rec,
aRecContributoRitenuta.ammontare_lordo,
aRecContributoRitenuta.imponibile_lordo,
aRecContributoRitenuta.im_deduzione_irpef,
aRecContributoRitenuta.im_deduzione_family,
aRecContributoRitenuta.im_cori_sospeso,
aRecContributoRitenuta.fl_credito_pareggio_detrazioni);
END insContributoRitenuta;
--==================================================================================================
-- Inserimento in CONTRIBUTO_RITENUTA_DET
--==================================================================================================
PROCEDURE insContributoRitenutaDet
(
aRecContributoRitenutaDet CONTRIBUTO_RITENUTA_DET%ROWTYPE
) IS
BEGIN
INSERT INTO CONTRIBUTO_RITENUTA_DET
(CD_CDS,
CD_UNITA_ORGANIZZATIVA,
ESERCIZIO,
PG_COMPENSO,
CD_CONTRIBUTO_RITENUTA,
TI_ENTE_PERCIPIENTE,
PG_RIGA,
IMPONIBILE,
ALIQUOTA,
BASE_CALCOLO,
AMMONTARE,
DACR,
UTCR,
DUVA,
UTUV,
PG_VER_REC)
VALUES (aRecContributoRitenutaDet.cd_cds,
aRecContributoRitenutaDet.cd_unita_organizzativa,
aRecContributoRitenutaDet.esercizio,
aRecContributoRitenutaDet.pg_compenso,
aRecContributoRitenutaDet.cd_contributo_ritenuta,
aRecContributoRitenutaDet.ti_ente_percipiente,
aRecContributoRitenutaDet.pg_riga,
aRecContributoRitenutaDet.imponibile,
aRecContributoRitenutaDet.aliquota,
aRecContributoRitenutaDet.base_calcolo,
aRecContributoRitenutaDet.ammontare,
aRecContributoRitenutaDet.dacr,
aRecContributoRitenutaDet.utcr,
aRecContributoRitenutaDet.duva,
aRecContributoRitenutaDet.utuv,
aRecContributoRitenutaDet.pg_ver_rec);
END insContributoRitenutaDet;
--==================================================================================================
-- Copia l'intera struttura dati di un compenso (utilizzato in modifica COMPENSO)
--==================================================================================================
PROCEDURE copiaCompenso
(
aCdCds VARCHAR2,
aCdUnitaOrganizzativa VARCHAR2,
aEsercizio NUMBER,
aPgCompenso NUMBER,
aCdCdsCopia VARCHAR2,
aCdUnitaOrganizzativaCopia VARCHAR2,
aEsercizioCopia NUMBER,
aPgCompensoCopia NUMBER
) IS
aRecCompenso COMPENSO%ROWTYPE;
aRecContributoRitenuta CONTRIBUTO_RITENUTA%ROWTYPE;
aRecContributoRitenutaDet CONTRIBUTO_RITENUTA_DET%ROWTYPE;
gen_cur GenericCurTyp;
BEGIN
BEGIN
-- Copia del compenso
INSERT INTO COMPENSO
(cd_cds,
cd_unita_organizzativa,
esercizio,
pg_compenso,
cd_cds_origine,
cd_uo_origine,
dt_registrazione,
ds_compenso,
ti_anagrafico,
cd_terzo,
cd_terzo_uo_cds,
ragione_sociale,
nome,
cognome,
codice_fiscale,
partita_iva,
cd_termini_pag,
cd_termini_pag_uo_cds,
cd_modalita_pag,
cd_modalita_pag_uo_cds,
pg_banca,
pg_banca_uo_cds,
cd_tipo_rapporto,
cd_trattamento,
fl_senza_calcoli,
fl_diaria,
dt_cancellazione,
stato_cofi,
stato_coge,
stato_coan,
ti_associato_manrev,
dt_emissione_mandato,
dt_trasmissione_mandato,
dt_pagamento_mandato,
dt_da_competenza_coge,
dt_a_competenza_coge,
stato_pagamento_fondo_eco,
dt_pagamento_fondo_eco,
im_totale_compenso,
im_lordo_percipiente,
im_netto_percipiente,
im_cr_percipiente,
im_cr_ente,
quota_esente,
quota_esente_no_iva,
im_no_fiscale,
imponibile_fiscale,
cd_voce_iva,
imponibile_iva,
pg_comune_add,
cd_provincia_add,
cd_regione_add,
cd_regione_irap,
cd_cds_missione,
esercizio_missione,
cd_uo_missione,
pg_missione,
cd_cds_obbligazione,
esercizio_obbligazione,
esercizio_ori_obbligazione,
pg_obbligazione,
pg_obbligazione_scadenzario,
cd_cds_accertamento,
esercizio_accertamento,
esercizio_ori_accertamento,
pg_accertamento,
pg_accertamento_scadenzario,
duva,
utcr,
dacr,
utuv,
pg_ver_rec,
cd_tipologia_rischio,
detrazioni_personali,
detrazioni_la,
detrazione_coniuge,
detrazione_figli,
detrazione_altri,
detrazione_riduzione_cuneo,
detrazioni_personali_netto,
detrazioni_la_netto,
detrazione_coniuge_netto,
detrazione_figli_netto,
detrazione_altri_netto,
detrazione_rid_cuneo_netto,
cd_cds_doc_genrc,
cd_uo_doc_genrc,
esercizio_doc_genrc,
cd_tipo_doc_genrc,
pg_doc_genrc,
cd_cdr_genrc,
cd_linea_attivita_genrc,
ti_istituz_commerc,
imponibile_inail,
esercizio_fattura_fornitore,
dt_fattura_fornitore,
nr_fattura_fornitore,
fl_generata_fattura,
fl_compenso_stipendi,
fl_compenso_conguaglio,
fl_compenso_minicarriera,
aliquota_irpef_da_missione,
fl_compenso_mcarriera_tassep,
aliquota_irpef_tassep,
im_deduzione_irpef,
imponibile_fiscale_netto,
numero_giorni,
fl_escludi_qvaria_deduzione,
fl_intera_qfissa_deduzione,
im_detrazione_personale_anag,
fl_recupero_rate,
aliquota_fiscale,
fl_accantona_add_terr,
quota_esente_inps,
cd_rapporto_inps,
cd_attivita_inps,
cd_altra_ass_inps,
pg_comune_inps,
im_reddito_complessivo,
im_reddito_abitaz_princ,
esercizio_rep,
pg_repertorio,
esercizio_limite_rep,
im_netto_da_trattenere,
ti_prestazione,
esercizio_bonus,
pg_bonus,
fl_liquidazione_differita,
cd_terzo_pignorato,
esercizio_contratto,
stato_contratto,
pg_contratto,
im_tot_reddito_complessivo,
PG_TROVATO,
DATA_PROTOCOLLO,
NUMERO_PROTOCOLLO,
DT_SCADENZA,
STATO_LIQUIDAZIONE,
CAUSALE,
fl_documento_ele )
SELECT aCdCdsCopia,
aCdUnitaOrganizzativaCopia,
aEsercizioCopia,
aPgCompensoCopia,
A.cd_cds_origine,
A.cd_uo_origine,
A.dt_registrazione,
A.ds_compenso,
A.ti_anagrafico,
A.cd_terzo,
A.cd_terzo_uo_cds,
A.ragione_sociale,
A.nome,
A.cognome,
A.codice_fiscale,
A.partita_iva,
A.cd_termini_pag,
A.cd_termini_pag_uo_cds,
A.cd_modalita_pag,
A.cd_modalita_pag_uo_cds,
A.pg_banca,
A.pg_banca_uo_cds,
A.cd_tipo_rapporto,
A.cd_trattamento,
A.fl_senza_calcoli,
A.fl_diaria,
A.dt_cancellazione,
A.stato_cofi,
A.stato_coge,
A.stato_coan,
A.ti_associato_manrev,
A.dt_emissione_mandato,
A.dt_trasmissione_mandato,
A.dt_pagamento_mandato,
A.dt_da_competenza_coge,
A.dt_a_competenza_coge,
A.stato_pagamento_fondo_eco,
A.dt_pagamento_fondo_eco,
A.im_totale_compenso,
A.im_lordo_percipiente,
A.im_netto_percipiente,
A.im_cr_percipiente,
A.im_cr_ente,
A.quota_esente,
A.quota_esente_no_iva,
A.im_no_fiscale,
A.imponibile_fiscale,
A.cd_voce_iva,
A.imponibile_iva,
A.pg_comune_add,
A.cd_provincia_add,
A.cd_regione_add,
A.cd_regione_irap,
A.cd_cds_missione,
A.esercizio_missione,
A.cd_uo_missione,
A.pg_missione,
A.cd_cds_obbligazione,
A.esercizio_obbligazione,
A.esercizio_ori_obbligazione,
A.pg_obbligazione,
A.pg_obbligazione_scadenzario,
A.cd_cds_accertamento,
A.esercizio_accertamento,
A.esercizio_ori_accertamento,
A.pg_accertamento,
A.pg_accertamento_scadenzario,
A.duva,
A.utcr,
A.dacr,
A.utuv,
A.pg_ver_rec,
A.cd_tipologia_rischio,
A.detrazioni_personali,
A.detrazioni_la,
A.detrazione_coniuge,
A.detrazione_figli,
A.detrazione_altri,
A.detrazione_riduzione_cuneo,
A.detrazioni_personali_netto,
A.detrazioni_la_netto,
A.detrazione_coniuge_netto,
A.detrazione_figli_netto,
A.detrazione_altri_netto,
A.detrazione_rid_cuneo_netto,
A.cd_cds_doc_genrc,
A.cd_uo_doc_genrc,
A.esercizio_doc_genrc,
A.cd_tipo_doc_genrc,
A.pg_doc_genrc,
A.cd_cdr_genrc,
A.cd_linea_attivita_genrc,
A.ti_istituz_commerc,
A.imponibile_inail,
A.esercizio_fattura_fornitore,
A.dt_fattura_fornitore,
A.nr_fattura_fornitore,
A.fl_generata_fattura,
A.fl_compenso_stipendi,
A.fl_compenso_conguaglio,
A.fl_compenso_minicarriera,
A.aliquota_irpef_da_missione,
A.fl_compenso_mcarriera_tassep,
A.aliquota_irpef_tassep,
A.im_deduzione_irpef,
A.imponibile_fiscale_netto,
A.numero_giorni,
A.fl_escludi_qvaria_deduzione,
A.fl_intera_qfissa_deduzione,
A.im_detrazione_personale_anag,
A.fl_recupero_rate,
A.aliquota_fiscale,
A.fl_accantona_add_terr,
A.quota_esente_inps,
A.cd_rapporto_inps,
A.cd_attivita_inps,
A.cd_altra_ass_inps,
A.pg_comune_inps,
A.im_reddito_complessivo,
A.im_reddito_abitaz_princ,
A.esercizio_rep,
A.pg_repertorio,
A.esercizio_limite_rep,
A.im_netto_da_trattenere,
A.ti_prestazione,
A.esercizio_bonus,
A.pg_bonus,
A.fl_liquidazione_differita,
A.cd_terzo_pignorato,
A.esercizio_contratto,
A.stato_contratto,
A.pg_contratto,
A.im_tot_reddito_complessivo,
A.pg_trovato,
A.data_protocollo,
A.numero_protocollo,
A.dt_scadenza,
A.stato_liquidazione,
A.causale,
A.fl_documento_ele
FROM COMPENSO A
WHERE A.cd_cds = aCdCds AND
A.esercizio = aEsercizio AND
A.cd_unita_organizzativa = aCdUnitaOrganizzativa AND
A.pg_compenso = aPgCompenso;
END;
BEGIN
-- Copia del CONTRIBUTO_RITENUTA
INSERT INTO CONTRIBUTO_RITENUTA
(cd_cds,
cd_unita_organizzativa,
esercizio,
pg_compenso,
cd_contributo_ritenuta,
ti_ente_percipiente,
dt_ini_validita,
montante,
imponibile,
aliquota,
base_calcolo,
ammontare,
stato_cofi_cr,
cd_cds_obbligazione,
esercizio_obbligazione,
esercizio_ori_obbligazione,
pg_obbligazione,
pg_obbligazione_scadenzario,
cd_cds_accertamento,
esercizio_accertamento,
esercizio_ori_accertamento,
pg_accertamento,
pg_accertamento_scadenzario,
dacr,
utcr,
duva,
utuv,
pg_ver_rec,
ammontare_lordo,
imponibile_lordo,
im_deduzione_irpef,
im_deduzione_family)
SELECT aCdCdsCopia,
aCdUnitaOrganizzativaCopia,
aEsercizioCopia,
aPgCompensoCopia,
A.cd_contributo_ritenuta,
A.ti_ente_percipiente,
A.dt_ini_validita,
A.montante,
A.imponibile,
A.aliquota,
A.base_calcolo,
A.ammontare,
A.stato_cofi_cr,
A.cd_cds_obbligazione,
A.esercizio_obbligazione,
A.esercizio_ori_obbligazione,
A.pg_obbligazione,
A.pg_obbligazione_scadenzario,
A.cd_cds_accertamento,
A.esercizio_accertamento,
A.esercizio_ori_accertamento,
A.pg_accertamento,
A.pg_accertamento_scadenzario,
A.dacr,
A.utcr,
A.duva,
A.utuv,
A.pg_ver_rec,
A.ammontare_lordo,
A.imponibile_lordo,
A.im_deduzione_irpef,
A.im_deduzione_family
FROM CONTRIBUTO_RITENUTA A
WHERE A.cd_cds = aCdCds AND
A.esercizio = aEsercizio AND
A.cd_unita_organizzativa = aCdUnitaOrganizzativa AND
A.pg_compenso = aPgCompenso;
END;
BEGIN
-- Copia del CONTRIBUTO_RITENUTA_DET
INSERT INTO CONTRIBUTO_RITENUTA_DET
(cd_cds,
cd_unita_organizzativa,
esercizio,
pg_compenso,
cd_contributo_ritenuta,
ti_ente_percipiente,
pg_riga,
imponibile,
aliquota,
base_calcolo,
ammontare,
dacr,
utcr,
duva,
utuv,
pg_ver_rec)
SELECT aCdCdsCopia,
aCdUnitaOrganizzativaCopia,
aEsercizioCopia,
aPgCompensoCopia,
A.cd_contributo_ritenuta,
A.ti_ente_percipiente,
A.pg_riga,
A.imponibile,
A.aliquota,
A.base_calcolo,
A.ammontare,
A.dacr,
A.utcr,
A.duva,
A.utuv,
A.pg_ver_rec
FROM CONTRIBUTO_RITENUTA_DET A
WHERE A.cd_cds = aCdCds AND
A.esercizio = aEsercizio AND
A.cd_unita_organizzativa = aCdUnitaOrganizzativa AND
A.pg_compenso = aPgCompenso;
END;
RETURN;
END copiaCompenso;
--==================================================================================================
-- Ritorna un record della tabella CONGUAGLIO
--==================================================================================================
FUNCTION getConguaglio
(
aCdCds CONGUAGLIO.cd_cds%TYPE,
aCdUnitaOrganizzativa CONGUAGLIO.cd_unita_organizzativa%TYPE,
aEsercizio CONGUAGLIO.esercizio%TYPE,
aPgConguaglio CONGUAGLIO.pg_conguaglio%TYPE,
eseguiLock CHAR
) RETURN CONGUAGLIO%ROWTYPE IS
aRecConguaglio CONGUAGLIO%ROWTYPE;
BEGIN
IF eseguiLock = 'Y' THEN
SELECT * INTO aRecConguaglio
FROM CONGUAGLIO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_conguaglio = aPgConguaglio
FOR UPDATE NOWAIT;
ELSE
SELECT * INTO aRecConguaglio
FROM CONGUAGLIO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUnitaOrganizzativa AND
esercizio = aEsercizio AND
pg_conguaglio = aPgConguaglio;
END IF;
RETURN aRecConguaglio;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Conguaglio U.O. ' || aCdUnitaOrganizzativa ||
' numero ' || aEsercizio || '/' || aPgConguaglio ||
' non trovato');
END getConguaglio;
--==================================================================================================
-- Inserimento in ASS_COMPENSO_CONGUAGLIO
--==================================================================================================
PROCEDURE insAssCompensoConguaglio
(
aRecAssCompensoConguaglio ASS_COMPENSO_CONGUAGLIO%ROWTYPE
) IS
BEGIN
INSERT INTO ASS_COMPENSO_CONGUAGLIO
(CD_CDS_CONGUAGLIO,
CD_UO_CONGUAGLIO,
ESERCIZIO_CONGUAGLIO,
PG_CONGUAGLIO,
CD_CDS_COMPENSO,
CD_UO_COMPENSO,
ESERCIZIO_COMPENSO,
PG_COMPENSO,
DACR,
UTCR,
DUVA,
UTUV,
PG_VER_REC)
VALUES (aRecAssCompensoConguaglio.cd_cds_conguaglio,
aRecAssCompensoConguaglio.cd_uo_conguaglio,
aRecAssCompensoConguaglio.esercizio_conguaglio,
aRecAssCompensoConguaglio.pg_conguaglio,
aRecAssCompensoConguaglio.cd_cds_compenso,
aRecAssCompensoConguaglio.cd_uo_compenso,
aRecAssCompensoConguaglio.esercizio_compenso,
aRecAssCompensoConguaglio.pg_compenso,
aRecAssCompensoConguaglio.dacr,
aRecAssCompensoConguaglio.utcr,
aRecAssCompensoConguaglio.duva,
aRecAssCompensoConguaglio.utuv,
aRecAssCompensoConguaglio.pg_ver_rec);
END insAssCompensoConguaglio;
--==================================================================================================
-- Costruisci intervallo date per detrazioni familiari
--==================================================================================================
PROCEDURE componiMatriceDate
(aIntervalloDate IN OUT intervalloDateTab,
aDataDa DATE,
aDataA DATE,
aTipoData CHAR,
flNoSchiacciaSovrapposti CHAR
) IS
dtRifDa DATE;
dtRifA DATE;
scritto CHAR(1);
i BINARY_INTEGER;
k BINARY_INTEGER;
BEGIN
-------------------------------------------------------------------------------------------------
-- Valorizzazione variabili
scritto:='N';
-- Se il calcolo è per date di detrazioni familiari normalizzo portando da e a rispettivamente a
-- inizio e fine mese
IF aTipoData = 'F' THEN
dtRifDa:=IBMUTL001.getFirstDayOfMonth(aDataDa);
dtRifA:=IBMUTL001.getLastDayOfMonth(aDataA);
ELSE
dtRifDa:=aDataDa;
dtRifA:=aDataA;
END IF;
-------------------------------------------------------------------------------------------------
-- Ciclo memorizzazione su matrice degli intervalli date escludendo le intersezioni
IF aIntervalloDate.FIRST IS NULL THEN
aIntervalloDate(1).tDataDa:=dtRifDa;
aIntervalloDate(1).tDataA:=dtRifA;
scritto:='Y';
ELSE
IF flNoSchiacciaSovrapposti = 'Y' THEN
scritto:='N';
ELSE
FOR i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST
LOOP
IF (dtRifDa >= aIntervalloDate(i).tDataDa AND
dtRifDa <= aIntervalloDate(i).tDataA) THEN
IF dtRifA > aIntervalloDate(i).tDataA THEN
aIntervalloDate(i).tDataA:=dtRifA;
scritto:='Y';
EXIT;
ELSE
scritto:='Y';
EXIT;
END IF;
ELSIF (dtRifA >= aIntervalloDate(i).tDataDa AND
dtRifA <= aIntervalloDate(i).tDataA) THEN
IF dtRifDa < aIntervalloDate(i).tDataDa THEN
aIntervalloDate(i).tDataDa:=dtRifDa;
scritto:='Y';
EXIT;
ELSE
scritto:='Y';
EXIT;
END IF;
ELSIF (dtRifDa < aIntervalloDate(i).tDataDa AND
dtRifA > aIntervalloDate(i).tDataA) THEN
aIntervalloDate(i).tDataDa:=dtRifDa;
aIntervalloDate(i).tDataA:=dtRifA;
scritto:='Y';
EXIT;
END IF;
END LOOP;
END IF;
END IF;
-- Inserisco un nuovo intervallo solo se non esistono intersezioni con le date precedentemente memorizzate
IF scritto = 'N' THEN
k:=aIntervalloDate.COUNT + 1;
aIntervalloDate(k).tDataDa:=dtRifDa;
aIntervalloDate(k).tDataA:=dtRifA;
END IF;
END componiMatriceDate;
-- ==================================================================================================
-- Ritorna il numero di giorni presenti in una matrice date
-- ==================================================================================================
FUNCTION getGiorniMatriceDate
(
aIntervalloDate intervalloDateTab
) RETURN INTEGER IS
aNumeroGG INTEGER;
i BINARY_INTEGER;
BEGIN
aNumeroGG:=0;
-- Abilito il calcolo solo se la matrice date è piena
IF aIntervalloDate.COUNT > 0 THEN
FOR i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST
LOOP
aNumeroGG:=aNumeroGG + IBMUTL001.getDaysBetween(aIntervalloDate(i).tDataDa,
aIntervalloDate(i).tDataA);
END LOOP;
END IF;
If (aNumeroGG>365) Then
aNumeroGG:=365;
End If;
RETURN aNumeroGG;
END getGiorniMatriceDate;
-- ==================================================================================================
-- Ritorna il numero di Mesi presenti in una matrice date
-- ==================================================================================================
FUNCTION getMesiMatriceDate
(
aIntervalloDate intervalloDateTab
) RETURN INTEGER IS
aNumeroMM INTEGER;
i BINARY_INTEGER;
BEGIN
aNumeroMM:=0;
-- Abilito il calcolo solo se la matrice date è piena
IF aIntervalloDate.COUNT > 0 THEN
FOR i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST
LOOP
aNumeroMM:=aNumeroMM + MONTHS_BETWEEN(aIntervalloDate(i).tDataA,aIntervalloDate(i).tDataDa);
END LOOP;
END IF;
RETURN aNumeroMM;
END getMesiMatriceDate;
-- ==================================================================================================
-- Ritorna la minima data presente in una matrice date
-- ==================================================================================================
FUNCTION getMinimaMatriceDate
(
aIntervalloDate intervalloDateTab
) RETURN date IS
dataMinima date := null;
i BINARY_INTEGER;
BEGIN
-- Abilito il calcolo solo se la matrice date è piena
IF aIntervalloDate.COUNT > 0 THEN
FOR i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST
LOOP
if dataMinima is null then
dataMinima := aIntervalloDate(i).tDataDa;
else
if dataMinima > aIntervalloDate(i).tDataDa then
dataMinima := aIntervalloDate(i).tDataDa;
end if;
end if;
END LOOP;
END IF;
RETURN dataMinima;
END getMinimaMatriceDate;
-- ==================================================================================================
-- Ritorna la massima data presente in una matrice date
-- ==================================================================================================
FUNCTION getMassimaMatriceDate
(
aIntervalloDate intervalloDateTab
) RETURN date IS
dataMassima date := null;
i BINARY_INTEGER;
BEGIN
-- Abilito il calcolo solo se la matrice date è piena
IF aIntervalloDate.COUNT > 0 THEN
FOR i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST
LOOP
if dataMassima is null then
dataMassima := aIntervalloDate(i).tDataA;
else
if dataMassima < aIntervalloDate(i).tDataA then
dataMassima := aIntervalloDate(i).tDataA;
end if;
end if;
END LOOP;
END IF;
RETURN dataMassima;
END getMassimaMatriceDate;
-- ==================================================================================================
-- Ritorna il numero di Mesi presenti in una matrice date in un dato Esercizio calcolandoli
-- e schiacciando i duplicati
-- ==================================================================================================
FUNCTION getMesiMatriceDateEsForDays
(
aIntervalloDate intervalloDateTab,
aEsercizio INTEGER
) RETURN INTEGER IS
aNumeroMM INTEGER;
i BINARY_INTEGER;
j BINARY_INTEGER;
y BINARY_INTEGER := 0;
k BINARY_INTEGER := 0;
tabella_mesi intervalloMesiTab;
tabella_mesiFin intervalloMesiTab;
Esci Exception;
DaData DATE;
AData DATE;
Begin
aNumeroMM:=0;
tabella_mesi.delete;
tabella_mesiFin.delete;
-- Abilito il calcolo solo se la matrice date è piena
If aIntervalloDate.COUNT > 0 THEN
For i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST Loop
If (IBMUTL001.getYearOfDate(aIntervalloDate(i).tDataA) = aEsercizio Or
IBMUTL001.getYearOfDate(aIntervalloDate(i).tDataDa) = aEsercizio) Then
If IBMUTL001.getYearOfDate(aIntervalloDate(i).tDataDa) = aEsercizio Then
k := k + 1;
tabella_mesi(k).tMesi:=IBMUTL001.getMonthOfDate(aIntervalloDate(i).tDataDa);
End If;
If IBMUTL001.getYearOfDate(aIntervalloDate(i).tDataA) = aEsercizio Then
k := k + 1;
tabella_mesi(k).tMesi:=IBMUTL001.getMonthOfDate(aIntervalloDate(i).tDataA);
End If;
DaData := aIntervalloDate(i).tDataDa;
AData := aIntervalloDate(i).tDataA;
While Ceil(MONTHS_BETWEEN(AData,DaData)) > 1 And
(IBMUTL001.getYearOfDate(DaData) = aEsercizio Or
IBMUTL001.getYearOfDate(AData) = aEsercizio) Loop
DaData := IBMUTL001.getAddMonth(DaData,1);
If IBMUTL001.getYearOfDate(DaData) = aEsercizio Then
k := k + 1;
tabella_mesi(k).tMesi:=IBMUTL001.getMonthOfDate(DaData);
End If;
End Loop;
End If;
End Loop;
i := 0;
j := 0;
--Schiaccio i duplicati
If tabella_mesi.COUNT > 0 Then
For i IN tabella_mesi.FIRST .. tabella_mesi.LAST Loop
If tabella_mesiFin.COUNT > 0 Then
Begin
For j IN tabella_mesiFin.FIRST .. tabella_mesiFin.LAST Loop
If tabella_mesiFin(j).tMesi = tabella_mesi(i).tMesi Then
Raise Esci;
End If;
End Loop;
y := y + 1;
tabella_mesiFin(y).tMesi:= tabella_mesi(i).tMesi;
Exception
When Esci Then
Null;
End;
Else
y := y + 1;
tabella_mesiFin(y).tMesi:= tabella_mesi(i).tMesi;
End If;
End Loop;
End If;
End If;
aNumeroMM := tabella_mesiFin.COUNT;
--pipe.send_message('aNumeroMM '||aNumeroMM);
Return aNumeroMM;
End getMesiMatriceDateEsForDays;
-- ==================================================================================================
-- Ritorna il numero di Mesi presenti in una matrice date in un dato Esercizio
-- ==================================================================================================
FUNCTION getMesiMatriceDateEsercizio
(
aIntervalloDate intervalloDateTab,
aEsercizio INTEGER
) RETURN INTEGER IS
aNumeroMM INTEGER;
i BINARY_INTEGER;
BEGIN
aNumeroMM:=0;
-- Abilito il calcolo solo se la matrice date è piena
IF aIntervalloDate.COUNT > 0 THEN
FOR i IN aIntervalloDate.FIRST .. aIntervalloDate.LAST
Loop
If (IBMUTL001.getYearOfDate(aIntervalloDate(i).tDataA) = aEsercizio Or
IBMUTL001.getYearOfDate(aIntervalloDate(i).tDataDa) = aEsercizio) Then
aNumeroMM:=aNumeroMM + MONTHS_BETWEEN(aIntervalloDate(i).tDataA,aIntervalloDate(i).tDataDa);
End If;
END LOOP;
END IF;
RETURN aNumeroMM;
END getMesiMatriceDateEsercizio;
--==================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come irpef a scaglioni
--==================================================================================================
FUNCTION getIsIrpefScaglioni
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE,
aPgClassifMontanti TIPO_CONTRIBUTO_RITENUTA.pg_classificazione_montanti%TYPE,
aFlScriviMontanti TIPO_CONTRIBUTO_RITENUTA.fl_scrivi_montanti%TYPE
) RETURN CHAR IS
isIrpefScaglioni CHAR(1);
BEGIN
IF (aCdClassifCori = isCoriFiscale AND
aPgClassifMontanti = 1 AND
aFlScriviMontanti = 'Y') THEN
isIrpefScaglioni:='Y';
ELSE
isIrpefScaglioni:='N';
END IF;
RETURN isIrpefScaglioni;
END getIsIrpefScaglioni;
-- =================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come addizionale territorio
-- =================================================================================================
FUNCTION getIsAddTerritorio
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN CHAR IS
isAddTerritorio CHAR(1);
BEGIN
IF (aCdClassifCori = isCoriAddReg OR
aCdClassifCori = isCoriAddPro OR
aCdClassifCori = isCoriAddCom) THEN
isAddTerritorio:='Y';
ELSE
isAddTerritorio:='N';
END IF;
RETURN isAddTerritorio;
END getIsAddTerritorio;
-- =================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come addizionale territorio
-- per recupero rate
-- =================================================================================================
FUNCTION getIsAddTerritorioRecRate
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN CHAR IS
isAddTerritorioRecRate CHAR(1);
BEGIN
IF (aCdClassifCori = isCoriAddRegRecRate OR
aCdClassifCori = isCoriAddProRecRate OR
aCdClassifCori = isCoriAddComRecRate) THEN
isAddTerritorioRecRate:='Y';
ELSE
isAddTerritorioRecRate:='N';
END IF;
RETURN isAddTerritorioRecRate;
END getIsAddTerritorioRecRate;
-- =================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come addizionale comunale acconto
-- =================================================================================================
FUNCTION getIsAddTerritorioAcconto
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN CHAR IS
isAddTerritorioAcconto CHAR(1);
BEGIN
IF aCdClassifCori = isCoriAddComAcconto THEN
isAddTerritorioAcconto:='Y';
ELSE
isAddTerritorioAcconto:='N';
END IF;
RETURN isAddTerritorioAcconto;
END getIsAddTerritorioAcconto;
-- =================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come previdenziale
-- =================================================================================================
FUNCTION getIsCoriPrevid
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN CHAR IS
isPrevidenziale CHAR(1);
BEGIN
IF aCdClassifCori = isCoriPrevid THEN
isPrevidenziale:='Y';
ELSE
isPrevidenziale:='N';
END IF;
RETURN isPrevidenziale;
END getIsCoriPrevid;
-- =================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come assicurativo
-- =================================================================================================
FUNCTION getIsCoriInail
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN CHAR IS
isInail CHAR(1);
BEGIN
IF aCdClassifCori = isCoriInail THEN
isInail:='Y';
ELSE
isInail:='N';
END IF;
RETURN isInail;
END getIsCoriInail;
-- =================================================================================================
-- Ritorna l'indicazione di un tipo contributo ritenuta classificato come Credito Irpef
-- =================================================================================================
FUNCTION IsCoriCreditoIrpef
(aCdCori TIPO_CONTRIBUTO_RITENUTA.cd_contributo_ritenuta%TYPE
) RETURN CHAR IS
isCoriCreditoIrpef CHAR(1);
dataOdierna DATE;
BEGIN
isCoriCreditoIrpef := 'N';
dataOdierna:=SYSDATE;
Begin
Select fl_credito_irpef
into isCoriCreditoIrpef
from tipo_contributo_ritenuta
where cd_contributo_ritenuta = aCdCori
and Trunc(dt_ini_validita) <= Trunc(dataOdierna)
And Trunc(dt_fin_validita) >= Trunc(dataOdierna);
Exception
when others then
RETURN isCoriCreditoIrpef;
End;
RETURN isCoriCreditoIrpef;
END IsCoriCreditoIrpef;
--==================================================================================================
-- Ritorna un record della tabella IVA
--==================================================================================================
FUNCTION getVoceIva
(
aCdVoceIva VOCE_IVA.cd_voce_iva%TYPE
) RETURN VOCE_IVA%ROWTYPE IS
aRecVoceIva VOCE_IVA%ROWTYPE;
BEGIN
SELECT * INTO aRecVoceIva
FROM VOCE_IVA
WHERE cd_voce_iva = aCdVoceIva;
RETURN aRecVoceIva;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Codice iva ' || aCdVoceIva || ' non trovato');
END getVoceIva;
--==================================================================================================
-- Ritorna un record della tabella TIPOLOGIA_RISCHIO
--==================================================================================================
FUNCTION getTipologiaRischio
(
aCdTipologiaRischio TIPOLOGIA_RISCHIO.cd_tipologia_rischio%TYPE,
aDataRif DATE
) RETURN TIPOLOGIA_RISCHIO%ROWTYPE IS
aRecTipologiaRischio TIPOLOGIA_RISCHIO%ROWTYPE;
BEGIN
SELECT * INTO aRecTipologiaRischio
FROM TIPOLOGIA_RISCHIO
WHERE cd_tipologia_rischio = aCdTipologiaRischio AND
dt_inizio_validita <= aDataRif AND
dt_fine_validita >= aDataRif;
RETURN aRecTipologiaRischio;
EXCEPTION
WHEN no_data_found THEN
IBMERR001.RAISE_ERR_GENERICO
('Codice tipologia rischio ' || aCdTipologiaRischio || ' non trovato');
END getTipologiaRischio;
--==================================================================================================
-- Ritorna la tipologia di origine di un compenso
--==================================================================================================
FUNCTION getTipoOrigineCompenso
(
aCdCds COMPENSO.cd_cds%TYPE,
aCdUo COMPENSO.cd_unita_organizzativa%TYPE,
aEsercizio COMPENSO.esercizio%TYPE,
aPgCompenso COMPENSO.pg_compenso%TYPE
) RETURN INTEGER IS
k BINARY_INTEGER;
aContatore INTEGER;
valoreRitorno INTEGER;
BEGIN
FOR k IN 1 .. 5
LOOP
-- Compenso generato da CONGUAGLIO
IF k = 1 THEN
valoreRitorno:=isCompensoConguaglio;
SELECT COUNT(*) INTO aContatore
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUo AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso AND
fl_compenso_conguaglio = 'Y');
-- Compenso associato a MISSIONE
ELSIF k = 2 THEN
valoreRitorno:=isCompensoMissione;
SELECT COUNT(*) INTO aContatore
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUo AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso AND
cd_cds_missione IS NOT NULL);
-- Compenso associato a MINICARRIERA
ELSIF k = 3 THEN
valoreRitorno:=isCompensoMinicarriera;
SELECT COUNT(*) INTO aContatore
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUo AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso AND
fl_compenso_minicarriera = 'Y');
-- Compenso senza calcoli
ELSIF k = 4 THEN
valoreRitorno:=isCompensoSenzaCalcoli;
SELECT COUNT(*) INTO aContatore
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM COMPENSO
WHERE cd_cds = aCdCds AND
cd_unita_organizzativa = aCdUo AND
esercizio = aEsercizio AND
pg_compenso = aPgCompenso AND
fl_senza_calcoli = 'Y');
-- Compenso normale
ELSIF k = 5 THEN
aContatore:=1;
valoreRitorno:=isCompensoNormale;
END IF;
IF aContatore = 1 THEN
EXIT;
END IF;
END LOOP;
-- Verifico se il compenso risulta essere anche associato ad un conguaglio. Tale gestione opera solo se
-- il compenso non è da conguaglio
IF valoreRitorno != isCompensoConguaglio THEN
SELECT COUNT(*) INTO aContatore
FROM DUAL
WHERE EXISTS
(SELECT 1
FROM ASS_COMPENSO_CONGUAGLIO
WHERE cd_cds_compenso = aCdCds AND
cd_uo_compenso = aCdUo AND
esercizio_compenso = aEsercizio AND
pg_compenso = aPgCompenso);
IF aContatore > 0 THEN
valoreRitorno:=(valoreRitorno * 10) + 1;
END IF;
END IF;
RETURN valoreRitorno;
END getTipoOrigineCompenso;
--==================================================================================================
-- Ritorna la clessificazione di un contributo ritenuta da una occorrenza di CONTRIBUTO_RITENUTA
--==================================================================================================
FUNCTION getTipoCoriDaRigaCompenso
(
aRecContributoRitenuta CONTRIBUTO_RITENUTA%ROWTYPE
) RETURN VARCHAR2 IS
aRecTipoCori TIPO_CONTRIBUTO_RITENUTA%ROWTYPE;
BEGIN
SELECT * INTO aRecTipoCori
FROM TIPO_CONTRIBUTO_RITENUTA A
WHERE A.cd_contributo_ritenuta = aRecContributoRitenuta.cd_contributo_ritenuta AND
A.dt_ini_validita = aRecContributoRitenuta.dt_ini_validita;
RETURN aRecTipoCori.cd_classificazione_cori;
END getTipoCoriDaRigaCompenso;
--==================================================================================================
-- Compone la generazione della fattura per un compenso sia in inserimento che in modifica
--==================================================================================================
PROCEDURE generaFatturaPassiva
(
aRecCompenso COMPENSO%ROWTYPE,
aRecCompensoOri COMPENSO%ROWTYPE,
aRecAnagrafico ANAGRAFICO%ROWTYPE
) IS
eseguiLock CHAR(1);
isCancella CHAR(1);
isInserimento CHAR(1);
dataOdierna DATE;
aCdBeneServizio FATTURA_PASSIVA_RIGA.cd_bene_servizio%TYPE;
aRecFatturaPassiva FATTURA_PASSIVA%ROWTYPE;
aRecFatturaPassivaRiga FATTURA_PASSIVA_RIGA%ROWTYPE;
aRecContributoRitenuta CONTRIBUTO_RITENUTA%ROWTYPE;
max_dt_registrazione date:=null;
aListRigheFatt CNRCTB100.fattPassRigaList;
BEGIN
-------------------------------------------------------------------------------------------------
-- Variabili generali
eseguiLock:='Y';
isCancella:='N';
isInserimento:='N';
dataOdierna:=sysdate;
-------------------------------------------------------------------------------------------------
-- Non deve essere fatto nulla. Si tratta di inserimento e non è stata chiesta la generazione della fattura.
IF (aRecCompensoOri.pg_compenso IS NULL AND
aRecCompenso.fl_generata_fattura = 'N') THEN
RETURN;
END IF;
-------------------------------------------------------------------------------------------------
-- Controllo se devo solo inserire o anche aggiornare una precedente fattura
-- Lettura della testata della fattura passiva associata al compenso origine in caso di modifica
IF (aRecCompensoOri.pg_compenso IS NOT NULL AND
aRecCompensoOri.fl_generata_fattura = 'Y') THEN
isCancella:='Y';
Begin
aRecFatturaPassiva:=CNRCTB120.getFatturaRiferimento(aRecCompensoOri.esercizio,
aRecCompensoOri.cd_cds,
aRecCompensoOri.cd_unita_organizzativa,
aRecCompensoOri.pg_compenso,
eseguiLock);
exception when no_data_found then
-- gestione pregressa all'inserimento degli estremi del compenso sulla fattura
aRecFatturaPassiva:=CNRCTB120.getTstFatturaDaRifTerzo(aRecCompensoOri.cd_terzo,
aRecCompensoOri.esercizio_fattura_fornitore,
CNRCTB100.TI_FATT_FATTURA,
aRecCompensoOri.nr_fattura_fornitore,
eseguiLock);
end;
END IF;
-- Lettura del cori IVA del compenso in elaborazione per decidere se fare o meno l'inserimento.
IF (aRecCompensoOri.pg_compenso IS NOT NULL AND
aRecCompensoOri.fl_generata_fattura = 'Y' And
aRecCompensoOri.pg_compenso = aRecCompenso.pg_compenso) THEN
isInserimento:='N';
Else
IF aRecCompenso.fl_generata_fattura = 'Y' Then
isInserimento:='Y';
aRecContributoRitenuta:=getCoriIva(aRecCompenso.cd_cds,
aRecCompenso.cd_unita_organizzativa,
aRecCompenso.esercizio,
aRecCompenso.pg_compenso);
END IF;
END IF;
-- Se devo sia inserire che modificare verifico che qualcosa sia cambiato. Se tutto uguale non
-- faccio nulla
IF (isCancella='Y' AND
isInserimento='Y') THEN
IF (aRecFatturaPassiva.cd_terzo = aRecCompenso.cd_terzo AND
aRecFatturaPassiva.esercizio_fattura_fornitore = aRecCompenso.esercizio_fattura_fornitore AND
aRecFatturaPassiva.nr_fattura_fornitore = aRecCompenso.nr_fattura_fornitore AND
aRecFatturaPassiva.dt_fattura_fornitore = aRecCompenso.dt_fattura_fornitore AND
aRecFatturaPassiva.ti_istituz_commerc = aRecCompenso.ti_istituz_commerc AND
aRecFatturaPassiva.cd_terzo = aRecCompenso.cd_terzo AND
aRecFatturaPassiva.dt_da_competenza_coge = aRecCompenso.dt_da_competenza_coge AND
aRecFatturaPassiva.dt_a_competenza_coge = aRecCompenso.dt_a_competenza_coge AND
aRecFatturaPassiva.im_totale_imponibile = aRecContributoRitenuta.imponibile AND
aRecFatturaPassiva.im_totale_iva = aRecContributoRitenuta.ammontare And
aRecFatturaPassiva.FL_LIQUIDAZIONE_DIFFERITA = aRecCompenso.FL_LIQUIDAZIONE_DIFFERITA) THEN
RETURN;
END IF;
END IF;
-- Non devo fare nulla
IF (isCancella='N' AND
isInserimento='N') THEN
RETURN;
END IF;
-------------------------------------------------------------------------------------------------
-- Test per cancellazione della fattura
IF isCancella = 'Y' THEN
-- Se devo cancellare la fattura verifico che non siano stati stampati i registri IVA
IF aRecFatturaPassiva.protocollo_iva IS NOT NULL THEN
IBMERR001.RAISE_ERR_GENERICO
('Impossibile eliminare una fattura già stampata in modo definitivo sui registri IVA' ||
'Fattura UO ' || aRecFatturaPassiva.cd_unita_organizzativa || ' numero ' ||
aRecFatturaPassiva.esercizio || '/' || aRecFatturaPassiva.pg_fattura_passiva);
END IF;
IF aRecFatturaPassiva.progr_univoco IS NOT NULL THEN
IBMERR001.RAISE_ERR_GENERICO
('Impossibile eliminare una fattura già inserita nel registro unico delle fatture - ' ||
'Fattura UO ' || aRecFatturaPassiva.cd_unita_organizzativa || ' numero ' ||
aRecFatturaPassiva.esercizio || '/' || aRecFatturaPassiva.pg_fattura_passiva);
END IF;
-- Cancellazione della fattura
CNRCTB120.eliminaFatturaPassiva(aRecFatturaPassiva.cd_cds,
aRecFatturaPassiva.cd_unita_organizzativa,
aRecFatturaPassiva.esercizio,
aRecFatturaPassiva.pg_fattura_passiva);
END IF;
-------------------------------------------------------------------------------------------------
-- Inserimento della fattura
IF isInserimento = 'Y' THEN
aCdBeneServizio:=CNRCTB015.getVal01PerChiave('BENE_SERVIZIO_SPECIALE','FATTURA_DA_COMPENSO');
-- Testata
aRecFatturaPassiva:=NULL;
aRecFatturaPassiva.cd_cds:=aRecCompenso.cd_cds;
aRecFatturaPassiva.cd_unita_organizzativa:=aRecCompenso.cd_unita_organizzativa;
aRecFatturaPassiva.esercizio:=aRecCompenso.esercizio;
aRecFatturaPassiva.pg_fattura_passiva:=0;
aRecFatturaPassiva.cd_cds_origine:=aRecCompenso.cd_cds;
aRecFatturaPassiva.cd_uo_origine:=aRecCompenso.cd_unita_organizzativa;
aRecFatturaPassiva.cd_tipo_sezionale:=CNRCTB120.getSezionaleOrdinarioAcq(aRecCompenso.cd_cds,
aRecCompenso.cd_unita_organizzativa,
aRecCompenso.ti_istituz_commerc,
aRecCompenso.esercizio);
aRecFatturaPassiva.ti_fattura:=CNRCTB100.TI_FATT_FATTURA;
-- aRecFatturaPassiva.dt_registrazione:=aRecCompenso.dt_registrazione;
-- la fattura, se emessa con data di registrazione uguale alla data di registrazione
-- del compenso, aggiungeva un'altra fattura ad un periodo già chiuso nel registro.
-- correzione, stani 3.5.2005
aRecFatturaPassiva.dt_registrazione := Nvl(aRecCompenso.DT_EMISSIONE_MANDATO, aRecCompenso.dt_registrazione);
aRecFatturaPassiva.nr_fattura_fornitore:=aRecCompenso.nr_fattura_fornitore;
aRecFatturaPassiva.dt_fattura_fornitore:=aRecCompenso.dt_fattura_fornitore;
aRecFatturaPassiva.esercizio_fattura_fornitore:=aRecCompenso.esercizio_fattura_fornitore;
aRecFatturaPassiva.ds_fattura_passiva:=aRecCompenso.ds_compenso||' - FATTURA DA COMPENSO ';
aRecFatturaPassiva.ti_istituz_commerc:=aRecCompenso.ti_istituz_commerc;
aRecFatturaPassiva.fl_intra_ue:='N';
aRecFatturaPassiva.fl_extra_ue:='N';
aRecFatturaPassiva.fl_san_marino_con_iva:='N';
aRecFatturaPassiva.fl_san_marino_senza_iva:='N';
aRecFatturaPassiva.fl_autofattura:='N';
aRecFatturaPassiva.fl_bolla_doganale:='N';
aRecFatturaPassiva.fl_spedizioniere:='N';
aRecFatturaPassiva.fl_fattura_compenso:='Y';
aRecFatturaPassiva.cd_terzo:=aRecCompenso.cd_terzo;
aRecFatturaPassiva.ragione_sociale:=aRecAnagrafico.ragione_sociale;
aRecFatturaPassiva.nome:=aRecAnagrafico.nome;
aRecFatturaPassiva.cognome:=aRecAnagrafico.cognome;
aRecFatturaPassiva.codice_fiscale:=aRecAnagrafico.codice_fiscale;
aRecFatturaPassiva.partita_iva:=aRecAnagrafico.partita_iva;
aRecFatturaPassiva.cd_termini_pag:=aRecCompenso.cd_termini_pag;
aRecFatturaPassiva.pg_banca:=aRecCompenso.pg_banca;
aRecFatturaPassiva.cd_modalita_pag:=aRecCompenso.cd_modalita_pag;
aRecFatturaPassiva.im_totale_imponibile_divisa:=aRecContributoRitenuta.imponibile;
aRecFatturaPassiva.im_totale_imponibile:=aRecContributoRitenuta.imponibile;
aRecFatturaPassiva.im_totale_iva:=aRecContributoRitenuta.ammontare;
aRecFatturaPassiva.im_totale_fattura:=aRecContributoRitenuta.imponibile + aRecContributoRitenuta.ammontare;
aRecFatturaPassiva.cd_divisa:='EURO';
aRecFatturaPassiva.cambio:=1;
aRecFatturaPassiva.stato_cofi:='C';
aRecFatturaPassiva.stato_coge:=CNRCTB100.STATO_COEP_EXC;
aRecFatturaPassiva.dt_da_competenza_coge:=aRecCompenso.dt_da_competenza_coge;
aRecFatturaPassiva.dt_a_competenza_coge:=aRecCompenso.dt_a_competenza_coge;
aRecFatturaPassiva.dacr:=dataOdierna;
aRecFatturaPassiva.utcr:=aRecCompenso.utuv;
aRecFatturaPassiva.duva:=dataOdierna;
aRecFatturaPassiva.utuv:=aRecCompenso.utuv;
aRecFatturaPassiva.pg_ver_rec:=1;
aRecFatturaPassiva.ti_associato_manrev:='N';
aRecFatturaPassiva.stato_coan:=CNRCTB100.STATO_COEP_EXC;
aRecFatturaPassiva.stato_pagamento_fondo_eco:='N';
aRecFatturaPassiva.im_totale_quadratura:=aRecContributoRitenuta.imponibile + aRecContributoRitenuta.ammontare;
aRecFatturaPassiva.ti_bene_servizio:=CNRCTB100.TI_FT_ACQ_INDIFFERENTE;
aRecFatturaPassiva.fl_congelata:='N';
aRecFatturaPassiva.fl_liquidazione_differita:=aRecCompenso.fl_liquidazione_differita;
aRecFatturaPassiva.dt_scadenza:=aRecCompenso.dt_scadenza;
aRecFatturaPassiva.data_protocollo:=aRecCompenso.data_protocollo;
aRecFatturaPassiva.numero_protocollo:=aRecCompenso.numero_protocollo;
aRecFatturaPassiva.esercizio_compenso:=aRecCompenso.esercizio;
aRecFatturaPassiva.cds_compenso:=aRecCompenso.cd_cds;
aRecFatturaPassiva.uo_compenso:=aRecCompenso.cd_unita_organizzativa;
aRecFatturaPassiva.pg_compenso:=aRecCompenso.pg_compenso;
-- Righe
aListRigheFatt.DELETE;
aRecFatturaPassivaRiga:=NULL;
aListRigheFatt(1):=aRecFatturaPassivaRiga;
aListRigheFatt(1).cd_cds:=aRecCompenso.cd_cds;
aListRigheFatt(1).cd_unita_organizzativa:=aRecCompenso.cd_unita_organizzativa;
aListRigheFatt(1).esercizio:=aRecCompenso.esercizio;
aListRigheFatt(1).pg_fattura_passiva:=0;
aListRigheFatt(1).progressivo_riga:=1;
aListRigheFatt(1).ti_istituz_commerc:=aRecCompenso.ti_istituz_commerc;
aListRigheFatt(1).cd_bene_servizio:=aCdBeneServizio;
aListRigheFatt(1).prezzo_unitario:=aRecContributoRitenuta.imponibile;
aListRigheFatt(1).quantita:=1;
aListRigheFatt(1).im_totale_divisa:=aRecContributoRitenuta.imponibile;
aListRigheFatt(1).im_imponibile:=aRecContributoRitenuta.imponibile;
aListRigheFatt(1).cd_voce_iva:=aRecCompenso.cd_voce_iva;
aListRigheFatt(1).fl_iva_forzata:='N';
aListRigheFatt(1).im_iva:=aRecContributoRitenuta.ammontare;
aListRigheFatt(1).im_diponibile_nc:=0;
aListRigheFatt(1).stato_cofi:='C';
aListRigheFatt(1).dt_da_competenza_coge:=aRecCompenso.dt_da_competenza_coge;
aListRigheFatt(1).dt_a_competenza_coge:=aRecCompenso.dt_a_competenza_coge;
aListRigheFatt(1).dacr:=dataOdierna;
aListRigheFatt(1).utcr:=aRecCompenso.utuv;
aListRigheFatt(1).duva:=dataOdierna;
aListRigheFatt(1).utuv:=aRecCompenso.utuv;
aListRigheFatt(1).pg_ver_rec:=1;
aListRigheFatt(1).ti_associato_manrev:='N';
aListRigheFatt(1).cd_terzo:=aRecCompenso.cd_terzo;
aListRigheFatt(1).cd_termini_pag:=aRecCompenso.cd_termini_pag;
aListRigheFatt(1).pg_banca:=aRecCompenso.pg_banca;
aListRigheFatt(1).cd_modalita_pag:=aRecCompenso.cd_modalita_pag;
If(aRecCompenso.fl_liquidazione_differita='N') Then
aListRigheFatt(1).data_esigibilita_iva:=aRecCompenso.dt_registrazione;
End If;
-- 02.02.2007 Stani - Inserito check data registro IVA
cnrctb100.chkDtRegistrazPerIva (aRecFatturaPassiva.cd_cds_origine, aRecFatturaPassiva.cd_uo_origine, aRecFatturaPassiva.esercizio,
aRecFatturaPassiva.cd_tipo_sezionale, aRecFatturaPassiva.dt_registrazione);
begin
SELECT TRUNC(MAX(DT_REGISTRAZIONE)) into max_dt_registrazione
from fattura_passiva
where
esercizio = aRecFatturaPassiva.esercizio and
cd_cds = aRecFatturaPassiva.cd_cds_origine and
cd_unita_organizzativa= aRecFatturaPassiva.cd_uo_origine;
exception when no_data_found then
max_dt_registrazione:=null;
end;
if max_dt_registrazione is not null and max_dt_registrazione > aRecFatturaPassiva.dt_registrazione then
IBMERR001.RAISE_ERR_GENERICO
('Impossibile inserire una fattura passiva con ' ||
'data registrazione anteriore al ' || TO_CHAR(max_dt_registrazione,'DD/MM/YYYY') || ' .');
end if;
CNRCTB120.creaFattura(aRecFatturaPassiva, aListRigheFatt);
END IF;
END generaFatturaPassiva;
--==================================================================================================
-- Ritorna il record di CONTRIBUTO_RITENUTA (uno solo) che rappresenta IVA
--==================================================================================================
FUNCTION getCoriIva
(
aCdCds COMPENSO.cd_cds%TYPE,
aCdUo COMPENSO.cd_unita_organizzativa%TYPE,
aEsercizio COMPENSO.esercizio%TYPE,
aPgCompenso COMPENSO.pg_compenso%TYPE
) RETURN CONTRIBUTO_RITENUTA%ROWTYPE IS
aRecContributoRitenuta CONTRIBUTO_RITENUTA%ROWTYPE;
BEGIN
SELECT A.* INTO aRecContributoRitenuta
FROM CONTRIBUTO_RITENUTA A,
TIPO_CONTRIBUTO_RITENUTA B
WHERE A.cd_cds = aCdCds AND
A.cd_unita_organizzativa = aCdUo AND
A.esercizio = aEsercizio AND
A.pg_compenso = aPgCompenso AND
B.cd_contributo_ritenuta = A.cd_contributo_ritenuta AND
B.dt_ini_validita = A.dt_ini_validita AND
B.cd_classificazione_cori = isCoriIva;
RETURN aRecContributoRitenuta;
EXCEPTION
WHEN NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO
('Impossibile trovare un CORI di tipo IVA per il compenso in elaborazione');
END getCoriIva;
-- ==================================================================================================
-- Ritorna la configurazione base della gestione deduzione IRPEF
-- ==================================================================================================
PROCEDURE getConfigDeduzioneIrpef
(
aEsercizio NUMBER,
aBaseDeduzione IN OUT NUMBER,
aQuotaFissaDeduzione IN OUT NUMBER,
aQuotaVariabileDeduzione IN OUT NUMBER
) IS
i BINARY_INTEGER;
BEGIN
FOR i IN 1 .. 3
LOOP
IF i = 1 THEN
aBaseDeduzione:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimaria,
isChiaveSecondariaBase);
ELSIF i = 2 THEN
aQuotaFissaDeduzione:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimaria,
isChiaveSecondariaQuota);
ELSIF i = 3 THEN
aQuotaVariabileDeduzione:=CNRCTB015.getIm02PerChiave(aEsercizio,
isChiavePrimaria,
isChiaveSecondariaQuota);
END IF;
END LOOP;
END getConfigDeduzioneIrpef;
-- ==================================================================================================
-- Ritorna la configurazione base della gestione deduzione FAMILY
-- ==================================================================================================
PROCEDURE getConfigDeduzioneFamily
(
aEsercizio NUMBER,
glbBaseDeduzioneFamily IN OUT NUMBER,
glbDFamilyConiuge IN OUT NUMBER,
glbDFamilyFiglio IN OUT NUMBER,
glbDFamilyAltro IN OUT NUMBER,
glbDFamilyFiglioMenoTre IN OUT NUMBER,
glbDFamilyFiglioSenzaConiuge IN OUT NUMBER,
glbDFamilyFiglioHandicap IN OUT NUMBER
) IS
i BINARY_INTEGER;
BEGIN
glbBaseDeduzioneFamily:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyBase);
glbDFamilyConiuge:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyConiuge);
glbDFamilyFiglio:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyFiglio);
glbDFamilyAltro:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyAltro);
glbDFamilyFiglioMenoTre:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyFiglioMenoTre);
glbDFamilyFiglioSenzaConiuge:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyFiglioSenzaConiuge);
glbDFamilyFiglioHandicap:=CNRCTB015.getIm01PerChiave(aEsercizio,
isChiavePrimariaFamily,
isCSDFamilyFiglioHandicap);
END getConfigDeduzioneFamily;
-- ==================================================================================================
-- Ritorna il valore minimo e massimo dello scaglione IRPEF in caso di gestione per aliquota
-- massima in anagrafica
-- ==================================================================================================
PROCEDURE getValMinMaxSclAlqMaxIrpef
(
aDataRegistrazione DATE,
aRecTipoTrattamento TIPO_TRATTAMENTO%ROWTYPE,
aAliquotaFiscaleAnag NUMBER,
aImportoscaglioneMin IN OUT NUMBER,
aImportoscaglioneMax IN OUT NUMBER
) IS
chkEsisteScaglione INTEGER;
aCdRegione COMPENSO.cd_regione_add%TYPE;
aCdProvincia COMPENSO.cd_provincia_add%TYPE;
aPgComune COMPENSO.pg_comune_add%TYPE;
aMontanteNetto NUMBER(15,2);
aAliquotaIrpefAnag SCAGLIONE.aliquota%TYPE;
aRecVTrattamento V_TIPO_TRATTAMENTO_TIPO_CORI%ROWTYPE;
aRecVPreScaglione V_PRE_SCAGLIONE%ROWTYPE;
BEGIN
--------------------------------------------------------------------------------------------------
-- Inizializzazione variabili
aCdRegione:='*';
aCdProvincia:='*';
aPgComune:=0;
aMontanteNetto:=0;
aAliquotaIrpefAnag:=aAliquotaFiscaleAnag;
--------------------------------------------------------------------------------------------------
-- Recupero del primo tipo contributo ritenuta di tipo irpef a scaglioni presente nel trattamento
BEGIN
SELECT * INTO aRecVTrattamento
FROM V_TIPO_TRATTAMENTO_TIPO_CORI
WHERE cd_trattamento = aRecTipoTrattamento.cd_trattamento AND
dt_ini_val_trattamento = aRecTipoTrattamento.dt_ini_validita AND
dt_fin_val_trattamento = aRecTipoTrattamento.dt_fin_validita AND
dt_ini_val_tratt_cori <= aDataRegistrazione AND
dt_fin_val_tratt_cori >= aDataRegistrazione AND
dt_ini_val_tipo_cori <= aDataRegistrazione AND
dt_fin_val_tipo_cori >= aDataRegistrazione AND
cd_classificazione_cori = isCoriFiscale AND
pg_classificazione_montanti = 1 AND
fl_scrivi_montanti = 'Y';
EXCEPTION
WHEN no_data_found THEN
aImportoscaglioneMin:=0;
aImportoscaglioneMax:=0;
RETURN;
END;
--------------------------------------------------------------------------------------------------
-- Recupero dello scaglione di riferimento
aRecVPreScaglione:=getScaglione(aRecVTrattamento.cd_cori,
aRecVTrattamento.ti_anagrafico,
aDataRegistrazione,
aMontanteNetto,
aAliquotaIrpefAnag,
aCdRegione,
aCdProvincia,
aPgComune);
aImportoscaglioneMin:=aRecVPreScaglione.im_inferiore;
aImportoscaglioneMax:=aRecVPreScaglione.im_superiore;
END getValMinMaxSclAlqMaxIrpef;
-- ==================================================================================================
-- Ritorna il record di RATEIZZA_CLASSIFIC_CORI presente nell'esercizio per l'anagrafico in calcolo di
-- compensi o conguagli
-- ==================================================================================================
FUNCTION getRateizzaClassificCori
(
aEsercizio NUMBER,
aCdAnag NUMBER,
isTemporaneo CHAR,
aCdClassificazioneCori CHAR,
eseguiLock CHAR
) RETURN RATEIZZA_CLASSIFIC_CORI%ROWTYPE IS
aRecRateizzaClassificCori RATEIZZA_CLASSIFIC_CORI%ROWTYPE;
BEGIN
aRecRateizzaClassificCori:=NULL;
IF eseguiLock = 'Y' THEN
SELECT * INTO aRecRateizzaClassificCori
FROM RATEIZZA_CLASSIFIC_CORI
WHERE esercizio = aEsercizio AND
cd_anag = aCdAnag AND
cd_classificazione_cori = aCdClassificazioneCori AND
fl_temporaneo = isTemporaneo
FOR UPDATE NOWAIT;
ELSE
SELECT * INTO aRecRateizzaClassificCori
FROM RATEIZZA_CLASSIFIC_CORI
WHERE esercizio = aEsercizio AND
cd_anag = aCdAnag AND
cd_classificazione_cori = aCdClassificazioneCori AND
fl_temporaneo = isTemporaneo;
END IF;
RETURN aRecRateizzaClassificCori;
EXCEPTION
WHEN no_data_found THEN
aRecRateizzaClassificCori.esercizio:=aEsercizio;
aRecRateizzaClassificCori.cd_anag:=aCdAnag;
aRecRateizzaClassificCori.cd_classificazione_cori:=aCdClassificazioneCori;
aRecRateizzaClassificCori.im_da_rateizzare:=0;
aRecRateizzaClassificCori.im_rateizzato:=0;
RETURN aRecRateizzaClassificCori;
END getRateizzaClassificCori;
-- ==================================================================================================
-- Ritorna il record di RATEIZZA_CLASSIFIC_CORI_S presente nell'esercizio per l'anagrafico in calcolo di
-- compensi o conguagli
-- ==================================================================================================
FUNCTION getRateizzaClassificCoriStr
(
aEsercizio NUMBER,
aCdsConguaglio CONGUAGLIO.cd_cds%TYPE,
aCdUoConguaglio CONGUAGLIO.cd_unita_organizzativa%TYPE,
aPgConguaglio CONGUAGLIO.pg_conguaglio%TYPE,
aCdAnag NUMBER,
isTemporaneo CHAR,
aCdClassificazioneCori CHAR,
eseguiLock CHAR
) RETURN RATEIZZA_CLASSIFIC_CORI%ROWTYPE IS
aRecRateizzaClassificCori RATEIZZA_CLASSIFIC_CORI%ROWTYPE;
BEGIN
aRecRateizzaClassificCori:=NULL;
IF eseguiLock = 'Y' THEN
SELECT * INTO aRecRateizzaClassificCori
FROM RATEIZZA_CLASSIFIC_CORI_S
WHERE esercizio = aEsercizio AND
cd_anag = aCdAnag AND
cd_classificazione_cori = aCdClassificazioneCori AND
fl_temporaneo = isTemporaneo AND
cd_cds_conguaglio = aCdsConguaglio AND
cd_uo_conguaglio = aCdUoConguaglio AND
pg_conguaglio = aPgConguaglio
FOR UPDATE NOWAIT;
ELSE
SELECT * INTO aRecRateizzaClassificCori
FROM RATEIZZA_CLASSIFIC_CORI_S
WHERE esercizio = aEsercizio AND
cd_anag = aCdAnag AND
cd_classificazione_cori = aCdClassificazioneCori AND
fl_temporaneo = isTemporaneo AND
cd_cds_conguaglio = aCdsConguaglio AND
cd_uo_conguaglio = aCdUoConguaglio AND
pg_conguaglio = aPgConguaglio;
END IF;
RETURN aRecRateizzaClassificCori;
EXCEPTION
WHEN no_data_found THEN
aRecRateizzaClassificCori.esercizio:=aEsercizio;
aRecRateizzaClassificCori.cd_anag:=aCdAnag;
aRecRateizzaClassificCori.cd_classificazione_cori:=aCdClassificazioneCori;
aRecRateizzaClassificCori.im_da_rateizzare:=0;
aRecRateizzaClassificCori.im_rateizzato:=0;
RETURN aRecRateizzaClassificCori;
END getRateizzaClassificCoriStr;
-- ==================================================================================================
-- Inserimento di un record in RATEIZZA_CLASSIFIC_CORI da conguaglio (sempre temporaneo)
-- ==================================================================================================
PROCEDURE generaRateizzaClassificCori
(aRecConguaglio CONGUAGLIO%ROWTYPE,
aAmmontareDaRateizzare NUMBER,
aRecRateizzaClassificCoriIn RATEIZZA_CLASSIFIC_CORI%ROWTYPE
) IS
isStorico CHAR(1);
aDescAddizionale VARCHAR2(100);
aRecRateizzaClassificCoriOut RATEIZZA_CLASSIFIC_CORI%ROWTYPE;
BEGIN
isStorico:='N';
aRecRateizzaClassificCoriOut:=aRecRateizzaClassificCoriIn;
aRecRateizzaClassificCoriOut.fl_temporaneo:='Y';
aRecRateizzaClassificCoriOut.cd_cds_conguaglio:=aRecConguaglio.cd_cds;
aRecRateizzaClassificCoriOut.cd_uo_conguaglio:=aRecConguaglio.cd_unita_organizzativa;
aRecRateizzaClassificCoriOut.pg_conguaglio:=aRecConguaglio.pg_conguaglio;
-- Determino se si tratta di primo inserimento o se vi sono stati precedenti accantonamenti
IF aRecRateizzaClassificCoriIn.cd_cds_conguaglio IS NULL THEN
aRecRateizzaClassificCoriOut.im_da_rateizzare:=aAmmontareDaRateizzare;
aRecRateizzaClassificCoriOut.im_rateizzato:=0;
aRecRateizzaClassificCoriOut.dacr:=aRecConguaglio.duva;
aRecRateizzaClassificCoriOut.utcr:=aRecConguaglio.utuv;
aRecRateizzaClassificCoriOut.duva:=aRecConguaglio.duva;
aRecRateizzaClassificCoriOut.utuv:=aRecConguaglio.utuv;
aRecRateizzaClassificCoriOut.pg_ver_rec:=1;
ELSE
aRecRateizzaClassificCoriOut.im_da_rateizzare:=aRecRateizzaClassificCoriOut.im_da_rateizzare + aAmmontareDaRateizzare;
aRecRateizzaClassificCoriOut.duva:=aRecConguaglio.duva;
aRecRateizzaClassificCoriOut.utuv:=aRecConguaglio.utuv;
aRecRateizzaClassificCoriOut.pg_ver_rec:=aRecRateizzaClassificCoriOut.pg_ver_rec + 1;
END IF;
-- Attivazione controlli di ammissione all'accantonamento
IF (aRecRateizzaClassificCoriOut.im_da_rateizzare < 0 OR
aRecRateizzaClassificCoriOut.im_da_rateizzare < aRecRateizzaClassificCoriOut.im_rateizzato )THEN
IF aRecRateizzaClassificCoriOut.cd_classificazione_cori = isCoriAddReg THEN
aDescAddizionale:='ADDIZIONALE REGIONALE';
ELSIF aRecRateizzaClassificCoriOut.cd_classificazione_cori = isCoriAddPro THEN
aDescAddizionale:='ADDIZIONALE PROVINCIALE';
ELSIF aRecRateizzaClassificCoriOut.cd_classificazione_cori = isCoriAddCom THEN
aDescAddizionale:='ADDIZIONALE COMUNALE';
END IF;
IF aRecRateizzaClassificCoriOut.im_da_rateizzare < 0 THEN
IBMERR001.RAISE_ERR_GENERICO
('Impossibile attivare il conguaglio in modalità accantonamento con ' || aDescAddizionale || ' ' ||
'negativa. ( ' || TO_CHAR(aRecRateizzaClassificCoriOut.im_da_rateizzare) || ')');
ELSE
IBMERR001.RAISE_ERR_GENERICO
('Conguaglio non ammissibile. L''ammontare rateizzato messo in pagamento in esercizi successivi per ' ||
aDescAddizionale || ' risulta maggiore dell''accantonamento stesso');
END IF;
END IF;
-- Inserimento del record temporaneo in RATEIZZA_CLASSIFIC_CORI
insRateizzaClassificCori(aRecRateizzaClassificCoriOut,
isStorico);
END generaRateizzaClassificCori;
-- ==================================================================================================
-- Inserimento di un record in RATEIZZA_CLASSIFIC_CORI
-- ==================================================================================================
PROCEDURE insRateizzaClassificCori
(
aRecRateizzaClassificCori RATEIZZA_CLASSIFIC_CORI%ROWTYPE,
isStorico CHAR
) IS
BEGIN
IF isStorico = 'N' THEN
INSERT INTO RATEIZZA_CLASSIFIC_CORI
(ESERCIZIO,
CD_ANAG,
CD_CLASSIFICAZIONE_CORI,
FL_TEMPORANEO,
CD_CDS_CONGUAGLIO,
CD_UO_CONGUAGLIO,
PG_CONGUAGLIO,
IM_DA_RATEIZZARE,
IM_RATEIZZATO,
DACR,
UTCR,
DUVA,
UTUV,
PG_VER_REC)
VALUES (aRecRateizzaClassificCori.esercizio,
aRecRateizzaClassificCori.cd_anag,
aRecRateizzaClassificCori.cd_classificazione_cori,
aRecRateizzaClassificCori.fl_temporaneo,
aRecRateizzaClassificCori.cd_cds_conguaglio,
aRecRateizzaClassificCori.cd_uo_conguaglio,
aRecRateizzaClassificCori.pg_conguaglio,
aRecRateizzaClassificCori.im_da_rateizzare,
aRecRateizzaClassificCori.im_rateizzato,
aRecRateizzaClassificCori.dacr,
aRecRateizzaClassificCori.utcr,
aRecRateizzaClassificCori.duva,
aRecRateizzaClassificCori.utuv,
aRecRateizzaClassificCori.pg_ver_rec);
ELSE
INSERT INTO RATEIZZA_CLASSIFIC_CORI_S
(ESERCIZIO,
CD_ANAG,
CD_CLASSIFICAZIONE_CORI,
FL_TEMPORANEO,
CD_CDS_CONGUAGLIO,
CD_UO_CONGUAGLIO,
PG_CONGUAGLIO,
IM_DA_RATEIZZARE,
IM_RATEIZZATO,
DACR,
UTCR,
DUVA,
UTUV,
PG_VER_REC)
VALUES (aRecRateizzaClassificCori.esercizio,
aRecRateizzaClassificCori.cd_anag,
aRecRateizzaClassificCori.cd_classificazione_cori,
aRecRateizzaClassificCori.fl_temporaneo,
aRecRateizzaClassificCori.cd_cds_conguaglio,
aRecRateizzaClassificCori.cd_uo_conguaglio,
aRecRateizzaClassificCori.pg_conguaglio,
aRecRateizzaClassificCori.im_da_rateizzare,
aRecRateizzaClassificCori.im_rateizzato,
aRecRateizzaClassificCori.dacr,
aRecRateizzaClassificCori.utcr,
aRecRateizzaClassificCori.duva,
aRecRateizzaClassificCori.utuv,
aRecRateizzaClassificCori.pg_ver_rec);
END IF;
END insRateizzaClassificCori;
FUNCTION getIsRegConAliqMax
(aCdRegione REGIONE.cd_regione%TYPE
) RETURN CHAR IS
isRegConAliqMax CHAR(1);
BEGIN
Begin
Select FL_ADDREG_ALIQMAX
Into isRegConAliqMax
From regione
Where cd_regione = aCdRegione;
Exception
When No_Data_Found Then
isRegConAliqMax := 'N';
End;
Return isRegConAliqMax;
END getIsRegConAliqMax;
FUNCTION getIsComConAliqMax
(aPgComune COMUNE.pg_comune%TYPE
) RETURN CHAR IS
isComConAliqMax CHAR(1);
BEGIN
Begin
Select FL_ADDCOM_ALIQMAX
Into isComConAliqMax
From comune
Where pg_comune = aPgComune;
Exception
When No_Data_Found Then
isComConAliqMax := 'N';
End;
Return isComConAliqMax;
END getIsComConAliqMax;
-- ==================================================================================================
-- Ritorna il record di ACCONTO_CLASSIFIC_CORI presente nell'esercizio per l'anagrafico in calcolo di
-- compensi o conguagli
-- ==================================================================================================
FUNCTION getAccontoClassificCori
(
aEsercizio NUMBER,
aCdAnag NUMBER,
isTemporaneo CHAR,
aCdClassificazioneCori CHAR,
eseguiLock CHAR
) RETURN ACCONTO_CLASSIFIC_CORI%ROWTYPE IS
aRecAccontoClassificCori ACCONTO_CLASSIFIC_CORI%ROWTYPE;
BEGIN
aRecAccontoClassificCori:=NULL;
IF eseguiLock = 'Y' THEN
SELECT * INTO aRecAccontoClassificCori
FROM ACCONTO_CLASSIFIC_CORI
WHERE esercizio = aEsercizio AND
cd_anag = aCdAnag AND
cd_classificazione_cori = aCdClassificazioneCori
FOR UPDATE NOWAIT;
ELSE
SELECT * INTO aRecAccontoClassificCori
FROM ACCONTO_CLASSIFIC_CORI
WHERE esercizio = aEsercizio AND
cd_anag = aCdAnag AND
cd_classificazione_cori = aCdClassificazioneCori;
END IF;
RETURN aRecAccontoClassificCori;
EXCEPTION
WHEN no_data_found THEN
aRecAccontoClassificCori.esercizio:=aEsercizio;
aRecAccontoClassificCori.cd_anag:=aCdAnag;
aRecAccontoClassificCori.cd_classificazione_cori:=aCdClassificazioneCori;
aRecAccontoClassificCori.im_acconto_calcolato:=0;
aRecAccontoClassificCori.im_acconto_trattenuto:=0;
RETURN aRecAccontoClassificCori;
END getAccontoClassificCori;
-- ==================================================================================================
-- Ritorna il record di ESENZIONI_ADDCOM relativo al comune di residenza e valido alla data odierna
-- ==================================================================================================
FUNCTION getEsenzioniAddcom
(
aPgComune NUMBER,
aDataOdierna DATE
) RETURN ESENZIONI_ADDCOM%Rowtype Is
aRecEsenzioniAddcom ESENZIONI_ADDCOM%ROWTYPE;
BEGIN
aRecEsenzioniAddcom:=NULL;
Select *
Into aRecEsenzioniAddcom
From ESENZIONI_ADDCOM
Where pg_comune = aPgComune
And Trunc(dt_inizio_validita) <= Trunc(aDataOdierna)
And Trunc(dt_fine_validita) >= Trunc(aDataOdierna);
RETURN aRecEsenzioniAddcom;
EXCEPTION
WHEN No_Data_Found THEN
aRecEsenzioniAddcom.pg_comune:=aPgComune;
aRecEsenzioniAddcom.dt_inizio_validita:=aDataOdierna;
aRecEsenzioniAddcom.dt_fine_validita:=aDataOdierna;
aRecEsenzioniAddcom.importo:=0;
RETURN aRecEsenzioniAddcom;
WHEN Too_Many_Rows THEN
aRecEsenzioniAddcom.pg_comune:=aPgComune;
aRecEsenzioniAddcom.dt_inizio_validita:=aDataOdierna;
aRecEsenzioniAddcom.dt_fine_validita:=aDataOdierna;
aRecEsenzioniAddcom.importo:=0;
RETURN aRecEsenzioniAddcom;
END getEsenzioniAddcom;
FUNCTION getIsAddComunale
(aCdClassifCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE
) RETURN CHAR IS
BEGIN
IF aCdClassifCori = isCoriAddComAcconto THEN
Return 'Y';
Elsif aCdClassifCori = isCoriAddComRecRate THEN
Return 'Y';
Elsif aCdClassifCori = isCoriAddCom THEN
Return 'Y';
ELSE
Return 'N';
END IF;
End getIsAddComunale;
END;
© 2015 - 2024 Weber Informatics LLC | Privacy Policy