expsigladb.Package.CNRCTB300_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRCTB300
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRCTB300" AS
-- =================================================================================================
-- Main procedura
-- =================================================================================================
PROCEDURE aggDaSospesoRiscontro
(
inCDSManrev VARCHAR2,
inEsercizioManrev NUMBER,
inPgManrev NUMBER,
inTipoManrev VARCHAR2,
inUtente VARCHAR2
) IS
BEGIN
NULL;
END aggDaSospesoRiscontro;
-- =================================================================================================
-- Main procedura
-- =================================================================================================
PROCEDURE leggiMandatoReversale
(
inCDSManrev VARCHAR2,
inEsercizioManrev NUMBER,
inPgManrev NUMBER,
inTipoManrev VARCHAR2,
inAzione VARCHAR2,
inUtente VARCHAR2
) IS
aRecManrev V_MANDATO_UPG_STATO_DOCAMM%ROWTYPE;
gen_cur GenericCurTyp;
BEGIN
-------------------------------------------------------------------------------------------------
-- Memorizzazione parametri generali della procedura
aUtente:=inUtente;
dataOdierna:=sysdate;
-- CONTROLLI BLOCCANTI INIZIALI
checkIniziale(
inCDSManrev,
inEsercizioManrev,
inPgManrev,
inTipoManrev,
inAzione,
inUtente
);
-------------------------------------------------------------------------------------------------
-- Lettura dei record di Mandato o Reversale in input con dettaglio riga
BEGIN
IF inTipoManrev = 'MAN' THEN
OPEN gen_cur FOR
SELECT *
FROM V_MANDATO_UPG_STATO_DOCAMM
WHERE cd_cds_mandato = inCDSManrev AND
esercizio_mandato = inEsercizioManrev AND
pg_mandato = inPgManrev
ORDER BY cd_cds_docamm,
cd_uo_docamm,
esercizio_docamm,
cd_tipo_docamm,
pg_docamm;
ELSE
OPEN gen_cur FOR
SELECT *
FROM V_REVERSALE_UPG_STATO_DOCAMM
WHERE cd_cds_reversale = inCDSManrev AND
esercizio_reversale = inEsercizioManrev AND
pg_reversale = inPgManrev
ORDER BY cd_cds_docamm,
cd_uo_docamm,
esercizio_docamm,
cd_tipo_docamm,
pg_docamm;
END IF;
LOOP
FETCH gen_cur INTO aRecManrev;
EXIT WHEN gen_cur%NOTFOUND;
-- Aggiornamento dei documenti amministrativi associati al mandato reversale a seguito del
-- suo inserimento o annullamento
aggiornaStatoDocamm(aRecManrev,
inTipoManrev,
inAzione);
-- Gestione effetti collaterali di inserimento/annullamento riga di mandato o reversale
effCollRigaManRev(aRecManrev,
inTipoManrev,
inAzione);
END LOOP;
CLOSE gen_cur;
END;
effCollFinale(
inCDSManrev,
inEsercizioManrev,
inPgManrev,
inTipoManrev,
inAzione,
inUtente
);
END leggiMandatoReversale;
-- =================================================================================================
-- Aggiornamento dei documenti amministrativi associati al mandato reversale a seguito del suo
-- inserimento o annullamento
-- =================================================================================================
PROCEDURE aggiornaStatoDocamm
(
aRecManrev V_MANDATO_UPG_STATO_DOCAMM%ROWTYPE,
inTipoManrev VARCHAR2,
inAzione VARCHAR2
) IS
aStatement VARCHAR2(10000);
aUpdateClause VARCHAR2(2000);
cv_cd_cds DOCUMENTO_GENERICO_RIGA.cd_cds%TYPE;
cv_cd_uo DOCUMENTO_GENERICO_RIGA.cd_unita_organizzativa%TYPE;
cv_esercizio DOCUMENTO_GENERICO_RIGA.esercizio%TYPE;
cv_tipo_docamm DOCUMENTO_GENERICO_RIGA.cd_tipo_documento_amm%TYPE;
cv_pg_docamm DOCUMENTO_GENERICO_RIGA.pg_documento_generico%TYPE;
cv_pg_riga DOCUMENTO_GENERICO_RIGA.progressivo_riga%TYPE;
cv_pg_ver_rec_det DOCUMENTO_GENERICO_RIGA.pg_ver_rec%TYPE;
cv_pg_ver_rec_tes DOCUMENTO_GENERICO_RIGA.pg_ver_rec%TYPE;
cv_stato_cofi_det DOCUMENTO_GENERICO_RIGA.stato_cofi%TYPE;
cv_stato_cofi_tes DOCUMENTO_GENERICO_RIGA.stato_cofi%TYPE;
cv_terzo DOCUMENTO_GENERICO_RIGA.cd_terzo%TYPE;
comp Compenso%Rowtype;
gen_cur_a GenericCurTyp;
liquidato NUMBER:=0;
aFlGestioneIvaDifferita CHAR(1);
conta NUMBER :=0;
BEGIN
-------------------------------------------------------------------------------------------------
-- Azzeramento variabili controllo rottura di documento
mem_cd_cds:=NULL;
mem_cd_uo:=NULL;
mem_esercizio:=NULL;
mem_tipo_docamm:=NULL;
mem_pg_docamm:=NULL;
mem_stato_cofi_tes:=NULL;
----------------------------------------------------------------------------------------------
-- Composizione della query di selezione delle righe dei documenti amministrativi associati
-- alla riga di mandato/reversale in lettura
aStatement:=componiLeggiDocamm (aRecManrev,
inTipoManrev);
BEGIN
----------------------------------------------------------------------------------------------
-- Lettura dei dati del documento amministrativo per aggiornamento degli attributi associati
-- all'inserimento o annullamento di un mandato o reversale
OPEN gen_cur_a FOR
aStatement;
LOOP
FETCH gen_cur_a INTO
cv_cd_cds,
cv_cd_uo,
cv_esercizio,
cv_tipo_docamm,
cv_pg_docamm,
cv_stato_cofi_tes,
cv_pg_riga,
cv_stato_cofi_det;
EXIT WHEN gen_cur_a%NOTFOUND;
BEGIN
----------------------------------------------------------------------------------------
-- Controllo rottura per documento amministrativo per aggiornamento testata dello stesso
-- E' la prima volta che entro nel ciclo
IF mem_cd_cds IS NULL THEN
mem_cd_cds:=cv_cd_cds;
mem_cd_uo:=cv_cd_uo;
mem_esercizio:=cv_esercizio;
mem_tipo_docamm:=cv_tipo_docamm;
mem_pg_docamm:=cv_pg_docamm;
mem_stato_cofi_tes:=cv_stato_cofi_tes;
END IF;
-- Se vi ? differenza aggiorno testata documento amministrativo
IF (mem_cd_cds != cv_cd_cds OR
mem_cd_uo != cv_cd_uo OR
mem_esercizio != cv_esercizio OR
mem_tipo_docamm != cv_tipo_docamm OR
mem_pg_docamm != cv_pg_docamm) THEN
aggiornaStatoTestataDocamm(aRecManrev,inTipoManrev,inAzione);
mem_cd_cds:=cv_cd_cds;
mem_cd_uo:=cv_cd_uo;
mem_esercizio:=cv_esercizio;
mem_tipo_docamm:=cv_tipo_docamm;
mem_pg_docamm:=cv_pg_docamm;
mem_stato_cofi_tes:=cv_stato_cofi_tes;
END IF;
----------------------------------------------------------------------------------------
-- Aggiornamento righe del documento amministrativo solo per i documenti che hanno RIGHE
IF CNRCTB100.GETTABELLADETT(cv_tipo_docamm) IS NOT NULL THEN
IF inAzione = 'I' THEN
aUpdateClause:='stato_cofi = ''P'', ti_associato_manrev = ''T''';
ELSE
IF (aRecManrev.ti_mandato = 'A' OR
mem_tipo_docamm = CNRCTB100.TI_GEN_REINTEGRO_FONDO OR
mem_tipo_docamm = CNRCTB100.TI_GEN_CORI_ACC_ENTRATA OR
mem_tipo_docamm = CNRCTB100.TI_GEN_CORI_ACC_SPESA OR
mem_tipo_docamm = CNRCTB100.TI_GENERICO_TRASF_S OR
mem_tipo_docamm = CNRCTB100.TI_GEN_CORI_VER_SPESA OR
mem_tipo_docamm = CNRCTB100.TI_GEN_CORI_VER_ENTRATA OR
mem_tipo_docamm = CNRCTB100.TI_GEN_IVA_ENTRATA OR
(aRecManrev.ti_mandato = 'R' AND
mem_tipo_docamm = CNRCTB100.TI_GENERICO_REGOLA_E)
) THEN
aUpdateClause:='stato_cofi = ''A'', dt_cancellazione = ' || IBMUTL001.ASDYNDATE(dataOdierna);
ELSIF inAzione = 'A' THEN
aUpdateClause:='stato_cofi = ''C'', ti_associato_manrev = ''N''';
ELSE
IF cv_stato_cofi_det = 'P' THEN
aUpdateClause:='stato_cofi = ''C''';
ELSE
aUpdateClause:='stato_cofi = ''C''';
END IF;
END IF;
END IF;
If mem_tipo_docamm = CNRCTB100.TI_FATTURA_PASSIVA And inAzione = 'A' THEN
aFlGestioneIvaDifferita:=CNRCTB120.getFtDiffConIvaPassiva(mem_cd_cds,
mem_cd_uo,
mem_esercizio,
mem_pg_docamm,
cv_pg_riga,
'Y');
If aFlGestioneIvaDifferita='Y' THEN
aUpdateClause:=aUpdateClause || ', data_esigibilita_iva = NULL';
End If;
End If;
If mem_tipo_docamm = CNRCTB100.TI_FATTURA_ATTIVA And inAzione = 'I' THEN
aFlGestioneIvaDifferita:=CNRCTB120.getFtAttivaDiffConIva(mem_cd_cds,
mem_cd_uo,
mem_esercizio,
mem_pg_docamm,
cv_pg_riga,
'Y');
If aFlGestioneIvaDifferita='Y' Then
Select Count(0) Into conta
From fattura_attiva_riga
WHERE
cd_cds = mem_cd_cds AND
cd_unita_organizzativa = mem_cd_uo AND
esercizio = mem_esercizio AND
pg_fattura_attiva = mem_pg_docamm And
progressivo_riga = cv_pg_riga And
data_esigibilita_iva is Null;
If(conta !=0) Then
aUpdateClause:=aUpdateClause || ', data_esigibilita_iva = '|| IBMUTL001.ASDYNDATE(aRecManrev.dt_emissione_mandato);
End If;
End If;
End If;
If mem_tipo_docamm = CNRCTB100.TI_FATTURA_ATTIVA And inAzione = 'A' THEN
aFlGestioneIvaDifferita:=CNRCTB120.getFtAttivaDiffConIva(mem_cd_cds,
mem_cd_uo,
mem_esercizio,
mem_pg_docamm,
cv_pg_riga,
'Y');
SELECT Count(0) Into liquidato
FROM REPORT_DETTAGLIO D
WHERE
d.esercizio = mem_esercizio and
d.cd_cds_altro = mem_cd_cds and
d.cd_uo_altro = mem_cd_uo and
d.pg_documento = mem_pg_docamm and
d.pg_riga_documento =cv_pg_riga And
D.tipo_report = 'LIQUIDAZIONE_VENDITE' ;
If aFlGestioneIvaDifferita='Y' And liquidato =0 Then
aUpdateClause:=aUpdateClause || ', data_esigibilita_iva = NULL';
End If;
End If;
CNRCTB100.UPDATEDOCAMMRIGA(cv_tipo_docamm,
cv_cd_cds,
cv_esercizio,
cv_cd_uo,
cv_pg_docamm,
cv_pg_riga,
aUpdateClause,
Null,
aUtente,
dataOdierna);
End If;
If (mem_tipo_docamm = CNRCTB100.TI_COMPENSO And inAzione = 'A') Then
Select * Into comp
From compenso
Where
esercizio = mem_esercizio And
cd_cds = mem_cd_cds And
cd_unita_organizzativa = mem_cd_uo And
pg_compenso = mem_pg_docamm;
If comp.fl_liquidazione_differita = 'Y' Then
Update fattura_passiva_riga Set data_esigibilita_iva = Null,utuv=aUtente,
duva=dataOdierna
Where
(esercizio,cd_cds,cd_unita_organizzativa,pg_fattura_passiva)In
(Select a.esercizio,a.cd_cds,a.cd_unita_organizzativa,a.pg_fattura_passiva
From fattura_passiva a
Where
a.esercizio = mem_esercizio And
a.cd_cds = mem_cd_cds And
a.cd_unita_organizzativa = mem_cd_uo And
a.ESERCIZIO_FATTURA_FORNITORE=Comp.ESERCIZIO_FATTURA_FORNITORE And
a.DT_FATTURA_FORNITORE=Comp.DT_FATTURA_FORNITORE And
a.NR_FATTURA_FORNITORE=Comp.NR_FATTURA_FORNITORE And
a.DT_REGISTRAZIONE=Comp.DT_REGISTRAZIONE And
a.fl_liquidazione_differita ='Y');
End If;
End IF;
END;
END LOOP;
CLOSE gen_cur_a;
-- Aggiornamento testata dell'ultimo documento amministrativo elaborato
aggiornaStatoTestataDocamm(aRecManrev,inTipoManrev,inAzione);
END;
END aggiornaStatoDocamm;
-- =================================================================================================
-- Composizione della query di selezione delle righe dei documenti amministrativi associati alla
-- riga di mandato/reversale in lettura
-- =================================================================================================
FUNCTION componiLeggiDocamm
(
aRecManrev V_MANDATO_UPG_STATO_DOCAMM%ROWTYPE,
inTipoManrev VARCHAR2
) RETURN VARCHAR2 IS
aStatement VARCHAR2(10000);
aTestata VARCHAR2(40);
aRiga VARCHAR2(40);
dettString VARCHAR2(2000);
dettStringTerzo VARCHAR2(1000);
aTabPrimiDoc VARCHAR2(40);
aJoinForKey VARCHAR2(2000);
BEGIN
-------------------------------------------------------------------------------------------------
-- Composizione dello statement di SELECT parte variabile in dipendenza del tipo di documento
-- amministrativo in elaborazione
aTestata:=CNRCTB100.GETTABELLA(aRecManrev.cd_tipo_docamm);
aRiga:=CNRCTB100.GETTABELLADETT(aRecManrev.cd_tipo_docamm);
dettString:=NULL;
dettStringTerzo:=NULL;
-- Documenti amministrativi con sola testata ----------------------------------------------------
IF aRiga IS NULL THEN
dettString:='NULL, NULL';
aTabPrimiDoc:=aTestata;
aJoinForKey:=CNRCTB100.getTstaFromCondForKey(aRecManrev.cd_tipo_docamm,
aRecManrev.cd_cds_docamm,
aRecManrev.esercizio_docamm,
aRecManrev.cd_uo_docamm,
aRecManrev.pg_docamm);
-- Documenti amministrativi con testata e dettagli ----------------------------------------------
ELSE
dettString:=aRiga || '.' || CNRCTB100.GETNOMEPGDETT(aRecManrev.cd_tipo_docamm) || ',' ||
aRiga || '.stato_cofi';
aTabPrimiDoc:=aRiga;
aJoinForKey:=CNRCTB100.getTstaRigaFromCondForKey(aRecManrev.cd_tipo_docamm,
aRecManrev.cd_cds_docamm,
aRecManrev.esercizio_docamm,
aRecManrev.cd_uo_docamm,
aRecManrev.pg_docamm);
-- Se si tratta di documento generico si aggiunge la condizione che il terzo della riga
-- deve corrispondere a quello del mandato o reversale tranne il caso in cui l'anagrafico del
-- documento sia un diversi, che lo stesso sia gestito tramite fondo economale o che la
-- riga di generico sia stata gestita con cessione di credito
IF CNRCTB100.isInTabellaGenerico(aRecManrev.cd_tipo_docamm) = 'Y' THEN
dettStringTerzo:='(' ||
'(' ||
aRiga || '.cd_terzo = ' || '''' || aRecManrev.cd_terzo_mandato || '''' ||
') OR ' ||
'(' ||
'EXISTS ' ||
'( SELECT 1 ' ||
'FROM TERZO B, ANAGRAFICO C ' ||
'WHERE B.cd_terzo = ' || aRiga || '.cd_terzo ' || ' AND ' ||
'C.cd_anag = B.cd_anag AND ' ||
'C.ti_entita = ' || ' ''D'' ' ||
') ' ||
') OR ' ||
'(' ||
aRiga || '.cd_tipo_documento_amm = ' ||
'''' || CNRCTB100.TI_GEN_REINTEGRO_FONDO || '''' ||
') OR ' ||
'(' ||
aRiga || '.cd_tipo_documento_amm = ' ||
'''' || CNRCTB100.TI_GEN_CORI_ACC_ENTRATA || '''' ||
') OR ' ||
'(' ||
aRiga || '.cd_tipo_documento_amm = ' ||
'''' || CNRCTB100.TI_GEN_CORI_ACC_SPESA || '''' ||
') OR ' ||
'(' ||
aTestata || '.stato_pagamento_fondo_eco IN ( ' || ' ''A'',''R'' )' ||
') OR ' ||
'(' ||
aRiga || '.cd_terzo_cessionario IS NOT NULL AND ' ||
aRiga || '.cd_terzo_cessionario = ' ||
'''' || aRecManrev.cd_terzo_mandato || '''' ||
')' ||
')';
END IF;
END IF;
aStatement:= 'SELECT ' ||
aTestata || '.cd_cds,' ||
aTestata || '.cd_unita_organizzativa,' ||
aTestata || '.esercizio, ' ||
'''' || aRecManrev.cd_tipo_docamm || ''',' ||
aTestata || '.' || CNRCTB100.GETNOMEPG(aRecManrev.cd_tipo_docamm) || ',' ||
aTestata || '.stato_cofi,' ||
dettString ||
aJoinForkey;
-- Differenzio per gestione mandati o reversali
IF inTipoManrev = 'MAN' Then
aStatement:=aStatement || ' AND ((' ||
aTabPrimiDoc||'.cd_cds_obbligazione = ' || '''' || aRecManrev.cd_cds_mandato || '''' || ' AND ' ||
aTabPrimiDoc||'.esercizio_obbligazione = ' || aRecManrev.esercizio_mandato || ' AND ' ||
aTabPrimiDoc||'.esercizio_ori_obbligazione = ' || aRecManrev.esercizio_ori_obbligazione || ' AND ' ||
aTabPrimiDoc||'.pg_obbligazione = ' || aRecManrev.pg_obbligazione || ' AND ' ||
aTabPrimiDoc||'.pg_obbligazione_scadenzario = ' || aRecManrev.pg_obbligazione_scadenzario;
If aRecManrev.cd_tipo_docamm = 'FATTURA_P' Then
aStatement:=aStatement || ' AND '||
'Nvl('||aTestata||'.fl_da_ordini,''N'') = ''N'' OR Nvl('||aTestata||'.fl_da_ordini,''N'') = ''Y'' AND '||
aTabPrimiDoc||'.PROGRESSIVO_RIGA in (Select FATTURA_ORDINE.PROGRESSIVO_RIGA '||
'From ORDINE_ACQ_CONSEGNA, FATTURA_ORDINE '||
'Where ORDINE_ACQ_CONSEGNA.cd_cds = FATTURA_ORDINE.cd_cds_ordine '||
' And ORDINE_ACQ_CONSEGNA.cd_unita_operativa = FATTURA_ORDINE.cd_unita_operativa '||
' And ORDINE_ACQ_CONSEGNA.esercizio = FATTURA_ORDINE.esercizio_ordine '||
' And ORDINE_ACQ_CONSEGNA.cd_numeratore = FATTURA_ORDINE.cd_numeratore '||
' And ORDINE_ACQ_CONSEGNA.numero = FATTURA_ORDINE.numero '||
' And ORDINE_ACQ_CONSEGNA.riga = FATTURA_ORDINE.riga '||
' And ORDINE_ACQ_CONSEGNA.consegna = FATTURA_ORDINE.consegna '||
' And ORDINE_ACQ_CONSEGNA.cd_cds_obbl = ' || '''' || aRecManrev.cd_cds_mandato || '''' ||
' And ORDINE_ACQ_CONSEGNA.esercizio_obbl = ' || aRecManrev.esercizio_mandato ||
' And ORDINE_ACQ_CONSEGNA.esercizio_orig_obbl = ' || aRecManrev.esercizio_ori_obbligazione ||
' And ORDINE_ACQ_CONSEGNA.pg_obbligazione = ' || aRecManrev.pg_obbligazione ||
' And ORDINE_ACQ_CONSEGNA.pg_obbligazione_scad = '|| aRecManrev.pg_obbligazione_scadenzario ||
' And FATTURA_ORDINE.CD_CDS = '||aTabPrimiDoc||'.CD_CDS '||
' And FATTURA_ORDINE.CD_UNITA_ORGANIZZATIVA = '||aTabPrimiDoc||'.CD_UNITA_ORGANIZZATIVA '||
' And FATTURA_ORDINE.ESERCIZIO = '||aTabPrimiDoc||'.ESERCIZIO '||
' And FATTURA_ORDINE.PG_FATTURA_PASSIVA = '||aTabPrimiDoc||'.PG_FATTURA_PASSIVA))) ';
Else
aStatement:=aStatement || '))';
End If;
ELSE
aStatement:=aStatement || ' AND ' ||
aTabPrimiDoc||'.cd_cds_accertamento = ' || '''' || aRecManrev.cd_cds_mandato || '''' || ' AND ' ||
aTabPrimiDoc||'.esercizio_accertamento = ' || aRecManrev.esercizio_mandato || ' AND ' ||
aTabPrimiDoc||'.esercizio_ori_accertamento = ' || aRecManrev.esercizio_ori_obbligazione || ' AND ' ||
aTabPrimiDoc||'.pg_accertamento = ' || aRecManrev.pg_obbligazione || ' AND ' ||
aTabPrimiDoc||'.pg_accertamento_scadenzario = ' || aRecManrev.pg_obbligazione_scadenzario;
END IF;
-- Aggiungo la clausola di filtro sul terzo
IF dettStringTerzo IS NOT NULL THEN
aStatement:=aStatement || ' AND ' || dettStringTerzo;
END IF;
-- Inserisco LOCK
aStatement:=aStatement || ' FOR UPDATE NOWAIT';
RETURN aStatement;
END componiLeggiDocamm;
-- =================================================================================================
-- Composizione della query di selezione dei diversi valori assunti da stato_cofi nelle righe dei
-- documenti amministrativi per l'aggiornamento relativo della testata
-- =================================================================================================
PROCEDURE aggiornaStatoTestataDocamm
(
aRecManrev V_MANDATO_UPG_STATO_DOCAMM%ROWTYPE,
inTipoManrev VARCHAR2,
inAzione VARCHAR2
) IS
aStatement VARCHAR2(10000);
aStatementRighe VARCHAR2(10000);
aBaseStatement VARCHAR2(2000);
aSetClause VARCHAR2(2000);
aTestata VARCHAR2(40);
aRiga VARCHAR2(40);
cv_stato_cofi_in DOCUMENTO_GENERICO_RIGA.stato_cofi%TYPE;
cv_stato_cofi_out DOCUMENTO_GENERICO_RIGA.stato_cofi%TYPE;
cv_ti_associato_manrev_in FATTURA_PASSIVA_RIGA.ti_associato_manrev%TYPE;
cv_ti_associato_manrev_out FATTURA_PASSIVA_RIGA.ti_associato_manrev%TYPE;
cv_cd_cds_obbacr OBBLIGAZIONE.cd_cds%TYPE;
cv_esercizio_obbacr OBBLIGAZIONE.esercizio%TYPE;
cv_esercizio_ori_obbacr OBBLIGAZIONE.esercizio_originale%TYPE;
cv_pg_obbacr OBBLIGAZIONE.pg_obbligazione%TYPE;
cv_pg_scad_obbacr OBBLIGAZIONE_SCADENZARIO.pg_obbligazione_scadenzario%TYPE;
cv_importo DOCUMENTO_GENERICO_RIGA.im_riga%TYPE;
isContabilizzato BOOLEAN;
isPagato BOOLEAN;
isCancellato BOOLEAN;
isAssociatoManrev BOOLEAN;
isNotAssociatoManrev BOOLEAN;
eseguiLock CHAR(1);
gen_cur_b GenericCurTyp;
BEGIN
isContabilizzato:=FALSE;
isPagato:=FALSE;
isCancellato:=FALSE;
isAssociatoManrev:=FALSE;
isNotAssociatoManrev:=FALSE;
cv_stato_cofi_out:=NULL;
cv_ti_associato_manrev_out:=NULL;
eseguiLock:='Y';
aTestata:=CNRCTB100.GETTABELLA(mem_tipo_docamm);
aRiga:=CNRCTB100.GETTABELLADETT(mem_tipo_docamm);
-------------------------------------------------------------------------------------------------
-- Composizione dello statement di SELECT di lettura dei valori di stato_cofi assunti dalle righe
-- di dettaglio del documento amministrativo in elaborazione
IF aRiga IS NOT NULL THEN
aStatement:='SELECT DISTINCT stato_cofi, ti_associato_manrev FROM ' ||
aRiga || ' ';
aBaseStatement:=CNRCTB100.getRigaWhereCondForKey(mem_tipo_docamm,
mem_cd_cds,
mem_esercizio,
mem_cd_uo,
mem_pg_docamm,
NULL);
aStatement:=aStatement || aBaseStatement;
if inTipoManRev = 'MAN' then
aStatementRighe:='SELECT cd_cds_obbligazione, esercizio_obbligazione, esercizio_ori_obbligazione, pg_obbligazione, pg_obbligazione_scadenzario, im_riga FROM '||aRiga || ' ';
else
aStatementRighe:='SELECT cd_cds_accertamento, esercizio_accertamento, esercizio_ori_accertamento, pg_accertamento, pg_accertamento_scadenzario, im_riga FROM '||aRiga || ' ';
end if;
aStatementRighe:=aStatementRighe || aBaseStatement;
ELSE
aStatement:='SELECT DISTINCT stato_cofi, ti_associato_manrev FROM ' ||
aTestata || ' ';
aBaseStatement:=CNRCTB100.getTstaWhereCondForKey(mem_tipo_docamm,
mem_cd_cds,
mem_esercizio,
mem_cd_uo,
mem_pg_docamm);
aStatement:=aStatement || aBaseStatement;
END IF;
-------------------------------------------------------------------------------------------------
-- Aggiornamento dello stato_cofi e di eventuali altri attributi della testata del documento
-- amministrativo associato al mandato o reversale in elaborazone
BEGIN
OPEN gen_cur_b FOR
aStatement;
LOOP
FETCH gen_cur_b INTO
cv_stato_cofi_in,
cv_ti_associato_manrev_in;
EXIT WHEN gen_cur_b%NOTFOUND;
BEGIN
-- Valorizzazione dello stato di associato a mandati e reversali da impostare in testata
-- del documento amministrativo
IF cv_ti_associato_manrev_in = 'T' THEN
isAssociatoManrev:=TRUE;
ELSE
IF aRiga IS NULL THEN
isAssociatoManrev:=TRUE;
ELSE
isNotAssociatoManrev:=TRUE;
END IF;
END IF;
-- Valorizzazione dello stato_cofi da impostare in testata del documento amministrativo
IF cv_stato_cofi_in = 'C' THEN
isContabilizzato:=TRUE;
ELSIF cv_stato_cofi_in = 'P' THEN
isPagato:=TRUE;
ELSIF cv_stato_cofi_in = 'A' THEN
isCancellato:=TRUE;
END IF;
END;
END LOOP;
CLOSE gen_cur_b;
-- Se la gestione ? per inserimento di mandato/reversale lo stato di cancellato
-- non conta; se la gestione ? per annullamento lo stato di cancellato conta solo
-- se ? l'unico estratto
IF aRiga IS NULL THEN
IF inAzione = 'I' THEN
cv_stato_cofi_out:='P';
ELSE
cv_stato_cofi_out:='C';
END IF;
ELSE
IF inAzione = 'I' THEN
IF (isContabilizzato=TRUE AND
isPagato=TRUE) THEN
cv_stato_cofi_out:='Q';
ELSIF (isContabilizzato=FALSE AND
isPagato=TRUE) THEN
cv_stato_cofi_out:='P';
END IF;
ELSE
IF isCancellato=TRUE THEN
IF (isContabilizzato=FALSE AND
isPagato=FALSE) THEN
cv_stato_cofi_out:='A';
END IF;
END IF;
IF (isContabilizzato=TRUE AND
isPagato=TRUE) THEN
cv_stato_cofi_out:='Q';
ELSIF (isContabilizzato=TRUE AND
isPagato=FALSE) THEN
cv_stato_cofi_out:='C';
ELSIF (isContabilizzato=FALSE AND
isPagato=TRUE) THEN
cv_stato_cofi_out:='P';
END IF;
END IF;
END IF;
-- Gestione dell'associazione on mandati o reversali
IF isAssociatoManrev = TRUE THEN
IF isNotAssociatoManrev = TRUE THEN
cv_ti_associato_manrev_out:='P';
ELSE
cv_ti_associato_manrev_out:='T';
END IF;
ELSE
cv_ti_associato_manrev_out:='N';
END IF;
END;
-------------------------------------------------------------------------------------------------
-- Composizione dello statement di UPDATE della testata del documento amministrativo
-- Composizione della parte set dello statement di UPDATE comune a tutte le gestioni
IF cv_stato_cofi_out = 'A' THEN
aSetClause:='stato_cofi = ''' || cv_stato_cofi_out || ''', dt_cancellazione = ' ||
IBMUTL001.ASDYNDATE(dataOdierna);
ELSE
aSetClause:='stato_cofi = ''' || cv_stato_cofi_out || ''', ti_associato_manrev = ''' ||
cv_ti_associato_manrev_out || '''';
END IF;
-------------------------------------------------------------------------------------------------
-- Aggiornamento della testata del documento amministrativo
BEGIN
CNRCTB100.updateDocAmm(mem_tipo_docamm,
mem_cd_cds,
mem_esercizio,
mem_cd_uo,
mem_pg_docamm,
aSetClause,
NULL,
aUtente,
dataOdierna);
END;
-------------------------------------------------------------------------------------------------
-- Aggiorna il saldo di collegamento con documenti amministrativi della scadenza di obbligazione o
-- accertamento
IF cv_stato_cofi_out = 'A' and aRiga is not null and aRiga = 'DOCUMENTO_GENERICO_RIGA' THEN
OPEN gen_cur_b FOR
aStatementRighe;
LOOP
FETCH gen_cur_b INTO
cv_cd_cds_obbacr,
cv_esercizio_obbacr,
cv_esercizio_ori_obbacr,
cv_pg_obbacr,
cv_pg_scad_obbacr,
cv_importo;
EXIT WHEN gen_cur_b%NOTFOUND;
BEGIN
if inTipoManRev = 'MAN' then
if not (mem_tipo_docamm = CNRCTB100.TI_GEN_REINTEGRO_FONDO) then
CNRCTB035.aggiornaSaldoDocammObb(cv_cd_cds_obbacr,
cv_esercizio_obbacr,
cv_esercizio_ori_obbacr,
cv_pg_obbacr,
cv_pg_scad_obbacr,
0-cv_importo,
aUtente);
end if;
else
CNRCTB035.aggiornaSaldoDocammAcc(cv_cd_cds_obbacr,
cv_esercizio_obbacr,
cv_esercizio_ori_obbacr,
cv_pg_obbacr,
cv_pg_scad_obbacr,
0-cv_importo,
aUtente);
end if;
END;
END LOOP;
CLOSE gen_cur_b;
-- Attiva gestione degli effetti collaterali del documento amministrativo
effCollAnnDocGen(aRecManrev,
inTipoManrev);
END IF;
END aggiornaStatoTestataDocamm;
-- =================================================================================================
-- Gestione effetti collaterali all'annullamento del documento amministrativo
-- =================================================================================================
PROCEDURE effCollAnnDocGen
(
aRecManrev V_MANDATO_UPG_STATO_DOCAMM%ROWTYPE,
inTipoManrev varchar2
) IS
aObb obbligazione%rowtype;
aAcc accertamento%rowtype;
aObbN obbligazione%rowtype;
aAccN accertamento%rowtype;
begin
-- Se i versamenti sono fatti su pratiche riportate, queste vengono deriportate
if aRecManrev.cd_tipo_docamm in (CNRCTB100.TI_GEN_CORI_VER_ENTRATA, CNRCTB100.TI_GEN_CORI_VER_SPESA ) THEN
if aRecManrev.cd_tipo_mandato = 'MAN' then
select * into aObbN from obbligazione where
cd_cds=aRecManrev.cd_cds_mandato
and esercizio = aRecManrev.esercizio_mandato
and esercizio_originale = aRecManrev.esercizio_ori_obbligazione
and pg_obbligazione =aRecManrev.pg_obbligazione
for update nowait;
if aObbN.pg_obbligazione_ori_riporto is not null then
CNRCTB046.ANNULLARIPPGIROCDS(aObbN,dataOdierna,aUtente);
end if;
elsif aRecManrev.cd_tipo_mandato = 'REV' then
select * into aAccN from accertamento where
cd_cds=aRecManrev.cd_cds_mandato
and esercizio = aRecManrev.esercizio_mandato
and esercizio_originale = aRecManrev.esercizio_ori_obbligazione
and pg_accertamento =aRecManrev.pg_obbligazione
for update nowait;
if aAccN.pg_accertamento_ori_riporto is not null then
CNRCTB046.ANNULLARIPPGIROCDS(aAccN,dataOdierna,aUtente);
end if;
end if;
end if;
-- Non vengono effettuate operazioni automatiche se non sugli accantonamenti
if aRecManrev.cd_tipo_docamm in (CNRCTB100.TI_GEN_CORI_ACC_ENTRATA, CNRCTB100.TI_GEN_CORI_ACC_SPESA ) THEN
-- In caso di annullamento del documento amministrativo collegato
-- Aggiorna le annotazioni a livello di importo associato a doc amministrativi
-- Si assume che le scadenze di annotazione siano totalemente collegate al documento in processo
-- e quindi il loro importo viene portato a 0
if inTipoManrev = 'MAN' then
CNRCTB035.annullaObbligazione(
aRecManrev.cd_cds_mandato,
aRecManrev.esercizio_mandato,
aRecManrev.esercizio_ori_obbligazione,
aRecManrev.pg_obbligazione,
aUtente
);
else
-- se la reversale ? quella di accantonamento CORI al centro, l'operazione viene bloccata
declare
aLACC accertamento%rowtype;
begin
select * into aLACC from accertamento a where
cd_cds = aRecManrev.cd_cds_mandato
and esercizio = aRecManrev.esercizio_mandato
and esercizio_originale = aRecManrev.esercizio_ori_obbligazione
and pg_accertamento = aRecManrev.pg_obbligazione
and exists (select 1 from ass_obb_acr_pgiro la, liquid_gruppo_centro l where
la.cd_cds = a.cd_cds
and la.esercizio = a.esercizio
and la.esercizio_ori_accertamento = a.esercizio_originale
and la.pg_accertamento = a.pg_accertamento
and l.cd_cds_obb_accentr = la.cd_cds
and l.esercizio_obb_accentr = la.esercizio
and l.esercizio_ori_obb_accentr = la.esercizio_ori_obbligazione
and l.pg_obb_accentr = la.pg_obbligazione
);
IBMERR001.RAISE_ERR_GENERICO('La Reversale di accantonamento CORI per versamento centralizzato non é cancellabile');
exception when NO_DATA_FOUND then
null;
end;
-- se la reversale ? quella di accantonamento LIQUIDAZIONE IVA al centro, l'operazione viene bloccata
declare
aLACC accertamento%rowtype;
begin
select * into aLACC from accertamento a where
cd_cds = aRecManrev.cd_cds_mandato
and esercizio = aRecManrev.esercizio_mandato
and esercizio_originale = aRecManrev.esercizio_ori_obbligazione
and pg_accertamento = aRecManrev.pg_obbligazione
and exists (select 1 from ass_obb_acr_pgiro la, liquidazione_iva_centro l where
la.cd_cds = a.cd_cds
and la.esercizio = a.esercizio
and la.esercizio_ori_accertamento = a.esercizio_originale
and la.pg_accertamento = a.pg_accertamento
and l.cd_cds_obb_accentr = la.cd_cds
and l.esercizio_obb_accentr = la.esercizio
and l.esercizio_ori_obb_accentr = la.esercizio_ori_obbligazione
and l.pg_obb_accentr = la.pg_obbligazione
);
IBMERR001.RAISE_ERR_GENERICO('La Reversale di accantonamento liquidazione IVA centro non é cancellabile');
exception when NO_DATA_FOUND then
null;
end;
CNRCTB035.annullaAccertamento(
aRecManrev.cd_cds_mandato,
aRecManrev.esercizio_mandato,
aRecManrev.esercizio_ori_obbligazione,
aRecManrev.pg_obbligazione,
aUtente
);
end if;
end if;
end effCollAnnDocGen;
PROCEDURE effCollRigaManRev(aRecManrev V_MANDATO_UPG_STATO_DOCAMM%ROWTYPE,
inTipoManrev varchar2,
inAzione varchar2
) is
begin
-- Tipo di documento reversale
if inTipoManrev = 'REV' then
-- Azione di annullamento
if inAzione = 'A' then
-- Non possibile annullare chiusura fondo economale
if aRecManrev.cd_tipo_docamm = CNRCTB100.TI_GEN_CHIUSURA_FONDO then
IBMERR001.RAISE_ERR_GENERICO('Il mandato di chiusura del fondo economale non é annullabile');
end if;
end if; -- Fine Annullamento
end if; -- Fine Reversale
-- Tipo di documento mandato
if inTipoManrev = 'MAN' then
-- Azione di annullamento
if inAzione = 'A' then
-- Eliminazione liquidazione IVA
begin
for aLIVAC in (select * from liquidazione_iva where
esercizio_doc_amm = aRecManrev.esercizio_docamm
and cd_tipo_documento = aRecManrev.cd_tipo_docamm
and cd_cds_doc_amm = aRecManrev.cd_cds_docamm
and cd_uo_doc_amm = aRecManrev.cd_uo_docamm
and pg_doc_amm = aRecManrev.pg_docamm
for update nowait
) loop
IBMERR001.RAISE_ERR_GENERICO('Operazione non permessa');
end loop;
end;
end if; -- Fine Annullamento
end if; -- Fine mandato
end effCollRigaManRev;
PROCEDURE effCollFinale (
inCDSManrev VARCHAR2,
inEsercizioManrev NUMBER,
inPgManrev NUMBER,
inTipoManrev VARCHAR2,
inAzione VARCHAR2,
inUtente VARCHAR2
) is
aCount number;
aMan mandato%rowtype;
aCompenso compenso%rowtype;
aCodaUpdateCompenso varchar2(500);
aAccScadCen accertamento_scadenzario%rowtype;
aAccCen accertamento%rowtype;
aDocGen documento_generico%rowtype;
begin
aCodaUpdateCompenso:='';
-- Se annullo un mandato o reversale CORI senza mandato principale devo riportare in stato C il compenso se non ? gi? in stato C
if inAzione = 'A' then
-- Le azioni di annullamento della liquidazione del compenso vanno fatte solo per compensi senza mandato principale
for aVASSComp in (select * from ass_comp_doc_cont_nmp where
cd_cds_doc = inCDSManrev
and esercizio_doc = inEsercizioManrev
and cd_tipo_doc = decode(inTipoManrev,'MAN','M','R')
and pg_doc = inPgManrev
for update nowait
) loop
begin
select * into aCompenso from compenso where
cd_cds = aVASSComp.cd_cds_compenso
and esercizio = aVASSComp.esercizio_compenso
and cd_unita_organizzativa = aVASSComp.cd_uo_compenso
and pg_compenso = aVASSComp.pg_compenso
for update nowait;
-- Se il compenso ? collegato a accertamento al centro con generico di recupero crediti da terzi, devo annullare tale accertamento ed eliminare il generico
if
aCompenso.stato_cofi = CNRCTB100.STATO_COM_COFI_TOT_MR
and aCompenso.pg_doc_genrc is not null
then
select * into aDocGen from documento_generico where
cd_tipo_documento_amm = aCompenso.cd_tipo_doc_genrc
and cd_cds = aCompenso.cd_cds_doc_genrc
and esercizio = aCompenso.esercizio_doc_genrc
and cd_unita_organizzativa = aCompenso.cd_uo_doc_genrc
and pg_documento_generico = aCompenso.pg_doc_genrc
for update nowait;
if aCompenso.pg_accertamento is not null then
-- Verifico che la pratica non sia con reversale al centro altrimenti sollevo errore
aAccCen.cd_cds:=aCompenso.cd_cds_accertamento;
aAccCen.esercizio:=aCompenso.esercizio_accertamento;
aAccCen.esercizio_originale:=aCompenso.esercizio_ori_accertamento;
aAccCen.pg_accertamento:=aCompenso.pg_accertamento;
CNRCTB035.LOCKDOCFULL(aAccCen);
if aAccCen.riportato='Y' then
IBMERR001.RAISE_ERR_GENERICO('L''accertamento di recupero crediti da terzi risulta riportato a nuovo esercizio');
end if;
select * into aAccScadCen from accertamento_scadenzario where
cd_cds =aAccCen.cd_cds
and esercizio =aAccCen.esercizio
and esercizio_originale =aAccCen.esercizio_originale
and pg_accertamento =aAccCen.pg_accertamento;
if aAccScadCen.im_associato_doc_contabile = 0 then
update accertamento_scadenzario set
im_associato_doc_amm = 0,
duva = dataOdierna,
utuv = aUtente,
pg_ver_rec=pg_ver_rec+1
where
cd_cds =aAccCen.cd_cds
and esercizio =aAccCen.esercizio
and esercizio_originale =aAccCen.esercizio_originale
and pg_accertamento =aAccCen.pg_accertamento;
if aAccCen.dt_cancellazione is null then
-- Elimino accertamento al centro e cancello il documento generico
CNRCTB035.annullaAccertamento(
aAccCen.cd_cds,
aAccCen.esercizio,
aAccCen.esercizio_originale,
aAccCen.pg_accertamento,
aUtente
);
-- Toglie in COMPENSO i riferimenti alla pratica al centro
CNRCTB100.updateDocAmm (CNRCTB100.TI_COMPENSO,
aCompenso.cd_cds,
aCompenso.esercizio,
aCompenso.cd_unita_organizzativa,
aCompenso.pg_compenso,
' esercizio_accertamento = null, cd_cds_accertamento = null, esercizio_ori_accertamento = null, pg_accertamento = null, pg_accertamento_scadenzario = null, cd_tipo_doc_genrc=null,cd_cds_doc_genrc = null, esercizio_doc_genrc = null,cd_uo_doc_genrc=null,pg_doc_genrc=null ',
NULL,
aUtente,
dataOdierna
);
-- Elimina fisicamente il documento_generico
delete from documento_generico_riga where
cd_tipo_documento_amm=aCompenso.cd_tipo_doc_genrc
and cd_cds=aCompenso.cd_cds_doc_genrc
and esercizio = aCompenso.esercizio_doc_genrc
and cd_unita_organizzativa = aCompenso.cd_uo_doc_genrc
and pg_documento_generico = aCompenso.pg_doc_genrc;
delete from documento_generico where
cd_tipo_documento_amm=aCompenso.cd_tipo_doc_genrc
and cd_cds=aCompenso.cd_cds_doc_genrc
and esercizio = aCompenso.esercizio_doc_genrc
and cd_unita_organizzativa = aCompenso.cd_uo_doc_genrc
and pg_documento_generico = aCompenso.pg_doc_genrc;
end if;
else
IBMERR001.RAISE_ERR_GENERICO('L''accertamento al centro per recupero crediti da terzi:'||aAccScadCen.pg_accertamento||' es.'||aAccScadCen.esercizio||' collegato a compenso:'||aCompenso.pg_compenso||' uo:'||aCompenso.cd_unita_organizzativa||' es:'||aCompenso.esercizio||' risulta associato a reversale.');
end if;
end if;
end if;
if
aCompenso.stato_cofi = CNRCTB100.STATO_COM_COFI_TOT_MR
then
CNRCTB100.updateDocAmm (CNRCTB100.TI_COMPENSO,
aCompenso.cd_cds,
aCompenso.esercizio,
aCompenso.cd_unita_organizzativa,
aCompenso.pg_compenso,
' stato_cofi = '''||CNRCTB100.STATO_COM_COFI_CONT||'''',
NULL,
aUtente,
dataOdierna
);
end if;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Compenso n.'||aVASSComp.pg_compenso||' cds '||aVASSComp.cd_cds_compenso||' uo '||aVASSComp.cd_uo_compenso||' es.'||aVASSComp.esercizio_compenso||' non trovato');
end;
delete from ass_comp_doc_cont_nmp where
cd_cds_doc = inCDSManrev
and esercizio_doc = inEsercizioManrev
and cd_tipo_doc = decode(inTipoManrev,'MAN','M','R')
and pg_doc = inPgManrev;
exit;
end loop;
end if;
-- Tipo di documento mandato
if inTipoManrev = 'MAN' then
-- Azione di annullamento
if inAzione = 'A' then
-- Se il mandato ? di reintegro di fondo economale
begin
select 1 into aCount from dual where exists (select 1 from fondo_spesa where
esercizio_mandato = inEsercizioManrev
and cd_cds_mandato = inCDSManrev
and pg_mandato = inPgManrev
);
begin
select * into aMan from mandato where
esercizio = inEsercizioManrev
and cd_cds = inCDSManrev
and pg_mandato = inPgManrev
for update nowait;
CNRCTB130.ANNULLAREINTEGROSPESEFONDO(
aMan.cd_cds,
aMan.esercizio,
aMan.pg_mandato,
aMan.im_mandato,
aUtente,
dataOdierna
);
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Documento autorizatorio non trovato');
end ;
exception when NO_DATA_FOUND then
null;
end;
-- Eliminazione mandato di liquidazione flusso stipendiale non permesso
begin
for aStipCofi in (select * from stipendi_cofi where
esercizio_mandato = inEsercizioManrev
and cd_cds_mandato = inCDSManrev
and pg_mandato = inPgManrev
) loop
IBMERR001.RAISE_ERR_GENERICO('Il mandato di liquidazione mensile degli stipendi non é annullabile');
end loop;
end;
-- Eliminazione liquidazione CORI (tranne che liquidazione accentrata)
begin
for aLGC in (select * from liquid_gruppo_cori where
esercizio_doc = inEsercizioManrev
and cd_cds_doc = inCDSManrev
and pg_doc = inPgManrev
) loop
CNRCTB570.annullaLiquidazione(aLGC, aUtente);
end loop;
end;
end if; -- Fine Annullamento
end if; -- Fine mandato
-- Tipo di documento reversale
if inTipoManrev = 'REV' then
-- Azione di annullamento
if inAzione = 'A' then
-- Eliminazione della reversale sciolta su gruppo negativo in UO di versamento accentrato (fix errore 722)
begin
for aLGC in (select * from liquid_gruppo_cori where
esercizio_rev = inEsercizioManrev
and cd_cds_rev = inCDSManrev
and pg_rev = inPgManrev
) loop
IBMERR001.RAISE_ERR_GENERICO('La reversale risulta collegata ad una liquidazione CORI del centro. Non é possibile annullarla');
end loop;
end;
end if; -- Fine Annullamento
end if; -- Fine reversale
end effCollFinale;
PROCEDURE checkIniziale(
inCDSManrev VARCHAR2,
inEsercizioManrev NUMBER,
inPgManrev NUMBER,
inTipoManrev VARCHAR2,
inAzione VARCHAR2,
inUtente VARCHAR2
) is
aMan mandato%rowtype;
aRev reversale%rowtype;
aCount number;
begin
-- Tipo di documento mandato
if inTipoManrev = 'MAN' then
-- Leggo il mandato
begin
select * into aMan from mandato where
esercizio =inEsercizioManrev
and cd_cds = inCDSManrev
and pg_mandato = inPgManrev
for update nowait;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Mandato non trovato');
end;
-- Azione di annullamento
if inAzione = 'A' then
-- Se il mandato ? di reintegro di fondo economale
begin
select 1 into aCount from dual where exists (select 1 from fondo_spesa where
esercizio_mandato = aMan.esercizio
and cd_cds_mandato = aMan.cd_cds
and pg_mandato = aMan.pg_mandato
);
-- Se il mandato ? di reintegro e di regolarizzazione non ? possibile annullarlo
if aMan.ti_mandato = CNRCTB038.TI_MAN_REG then
IBMERR001.RAISE_ERR_GENERICO('Il mandato di reintegro generato in chiusura del fondo economale non é annullabile');
end if;
exception when NO_DATA_FOUND then
null;
end;
-- Eliminazione mandato di liquidazione flusso stipendiale non permesso
begin
for aStipCofi in (select * from stipendi_cofi where
esercizio_mandato = aMan.esercizio
and cd_cds_mandato = aMan.cd_cds
and pg_mandato = aMan.pg_mandato
) loop
IBMERR001.RAISE_ERR_GENERICO('Il mandato di liquidazione mensile degli stipendi non é annullabile');
end loop;
end;
end if; -- Fine Annullamento
end if; -- Fine mandato
end checkIniziale;
procedure checkDocAmmCambiato (aTiDocAmm varchar2,aCdCds varchar2,aEs number,aCdUo varchar2,aPgDocAmm number, aPgVerRec number) is
aNewPgVerRec number;
begin
CNRCTB100.LOCKDOCAMM(aTiDocAmm,aCdCds,aEs,aCdUo,aPgDocAmm);
begin
select distinct pg_ver_rec into aNewPgVerRec from v_doc_passivo where
CD_CDS = aCdCds
AND CD_UNITA_ORGANIZZATIVA = aCdUo
AND ESERCIZIO = aEs
AND CD_TIPO_DOCUMENTO_AMM = aTiDocAmm
AND PG_DOCUMENTO_AMM = aPgDocAmm;
exception when NO_DATA_FOUND then
begin
select distinct pg_ver_rec into aNewPgVerRec from v_doc_attivo where
CD_CDS = aCdCds
AND CD_UNITA_ORGANIZZATIVA = aCdUo
AND ESERCIZIO = aEs
AND CD_TIPO_DOCUMENTO_AMM = aTiDocAmm
AND PG_DOCUMENTO_AMM = aPgDocAmm;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Documento amministrativo non trovato ('||aEs||'/'||aCdCds||'/'||aCdUo||'/'||aTiDocAmm||'/'||aPgDocAmm||')');
end;
end;
if
aNewPgVerRec is null
or aPgVerRec is null
or aNewPgVerRec <> aPgVerRec
then
IBMERR001.RAISE_ERR_GENERICO('Risorsa non piu'' valida');
end if;
end;
END;
© 2015 - 2024 Weber Informatics LLC | Privacy Policy