expsigladb.Package.CNRMIG030_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRMIG030
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRMIG030" is
procedure migrazione_residui_attivi is
-- lResiduoAttSci cnr_residui_attivi%rowtype;
lNumResiduiAttSci number;
lContatore number;
lPgAccIniziale number;
lPgAccertamento number;
lDataMigrazione date;
lAccCir accertamento%rowtype;
lAccScadCir accertamento_scadenzario%rowtype;
lAccScadVoceCir accertamento_scad_voce%rowtype;
lCds unita_organizzativa%rowtype;
lCdr cdr%rowtype;
lElemVoce elemento_voce%rowtype;
lTerzo terzo%rowtype;
lCdTerzo cnr_residui_Attivi.cd_terzo%type;
lCdTerzoSpeciale terzo.cd_terzo%type;
lPgUltimoScarico number;
begin
gPgLog := ibmutl200.LOGSTART('Migrazione Residui Attivi ' , cgUtente, 1, 1);
begin
gMsgLog := 'Impossibile recuperare il pg_caricamento dalla tabella CNR_RESIDUI_ATTIVI';
-- Recuperiamo il pg_ultimo_caricamento SCI
select nvl(max(pg_caricamento),0)
into lPgUltimoScarico
from cnr_residui_attivi;
gMsgLog := 'Impossibile recuperare il CdS';
-- Recuperiamo il cds realtivo all'ente
select *
into lCds
from unita_organizzativa
where cd_tipo_unita = cnrctb020.tipo_ente
and fl_cds = 'Y';
gMsgLog := 'Impossibile recuperare il CDR';
-- Recuperiamo il cdr realtivo all'ente
lCdr := cnrctb020.GETCDRENTE;
gMsgLog := 'In Configurazione CNR manca il TERZO_SPECIALE, CODICE_DIVERSI_IMPEGNI';
select im01
into lCdTerzoSpeciale
from configurazione_cnr
where cd_chiave_primaria = 'TERZO_SPECIALE'
and cd_chiave_secondaria = 'CODICE_DIVERSI_IMPEGNI';
exception when no_data_found then
ibmutl200.logInf(gPgLog ,gMsgLog , '','');
end;
lDataMigrazione := sysdate;
lNumResiduiAttSci := 0;
lContatore :=0;
LOCK TABLE CNR_RESIDUI_ATTIVI IN EXCLUSIVE MODE NOWAIT;
for lResiduoAttSci in (SELECT * FROM CNR_RESIDUI_ATTIVI
where pg_caricamento = lPgUltimoScarico)
loop
begin
savepoint altro_accertamento;
lContatore := lContatore + 1;
gMsgLog := 'Impossibile recuperare il progressivo dell''accertamento cd _residuo = ' || lResiduoAttSci.cd_residuo ||' esercizio = '|| lResiduoAttSci.esercizio ;
ibmutl200.logInf(gPgLog ,'Processando residuo Attivo num '|| lContatore ||' Cds = '|| lResiduoAttSci.CD_CDS || ' - Uo = ' || lResiduoAttSci.CD_UNITA_ORGANIZZATIVA || ' - Esercizio = '|| lResiduoAttSci.ESERCIZIO || ' - residuo = ' || lResiduoAttSci.CD_RESIDUO || ' - Progressivo = ' || lResiduoAttSci.PG_CARICAMENTO, '', '');
-- Recuperiamo il progressivo iniziale da assegnare all'accertamento
select nvl(max(substr(to_char(pg_accertamento),5,6)),0) + 1
into lPgAccIniziale
from accertamento
where cd_Cds = lCds.cd_unita_organizzativa
and esercizio=gcEsercizio
and esercizio_originale=lResiduoAttSci.esercizio
and cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC
and riportato='Y'
and length(to_char(pg_accertamento))=10
and substr(to_char(pg_accertamento),1,4) = lResiduoAttSci.esercizio;
lCdTerzo := lResiduoAttSci.cd_terzo;
lterzo := getTerzo(lCdTerzo);
lNumResiduiAttSci := lNumResiduiAttSci + 1;
-- Recuperiamo l'elemento voce
gMsgLog := 'In elemento_voce manca la voce : appartenenza'||lResiduoAttSci.ti_appartenenza ||' gestione '||lResiduoAttSci.ti_gestione || ' elemento '||lResiduoAttSci.cd_elemento_voce;
select *
into lElemVoce
from elemento_voce
where esercizio = gcEsercizio
and ti_appartenenza = lResiduoAttSci.ti_appartenenza
and ti_gestione = lResiduoAttSci.ti_gestione
and cd_elemento_voce = lResiduoAttSci.cd_elemento_voce;
lPgAccertamento := to_number(to_char(lResiduoAttSci.esercizio) || lpad(to_char(lPgAccIniziale),6,'0'));
lAccCir.CD_CDS := lResiduoAttSci.cd_cds;
lAccCir.ESERCIZIO := gcEsercizio;
lAccCir.ESERCIZIO_ORIGINALE := lResiduoAttSci.esercizio;
lAccCir.PG_ACCERTAMENTO := lPgAccertamento;
lAccCir.CD_TIPO_DOCUMENTO_CONT := cnrctb018.TI_DOC_ACC;
lAccCir.CD_UNITA_ORGANIZZATIVA := lResiduoAttSci.CD_UNITA_ORGANIZZATIVA;
lAccCir.CD_CDS_ORIGINE := lResiduoAttSci.CD_CDS_ORIGINE;
lAccCir.CD_UO_ORIGINE := lResiduoAttSci.CD_UO_ORIGINE;
lAccCir.TI_APPARTENENZA := 'C';
lAccCir.TI_GESTIONE := 'E';
lAccCir.CD_ELEMENTO_VOCE := lResiduoAttSci.CD_ELEMENTO_VOCE;
lAccCir.CD_VOCE := lResiduoAttSci.CD_VOCE;
lAccCir.DT_REGISTRAZIONE := to_date('0101'||gcEsercizioDest,'ddmmyyyy');
lAccCir.DS_ACCERTAMENTO := substr(lResiduoAttSci.cd_terzo || ' - ' || lResiduoAttSci.ds_terzo || ' - ' || lResiduoAttSci.ds_accertamento_origine,1,300) ;
-- lAccCir.DS_ACCERTAMENTO := 'ACCERTAMENTO RESIDUO DA MIGRAZIONE';
-- if lResiduoAttSci.cd_terzo <> to_char(lCdTerzoSpeciale) then
-- lAccCir.DS_ACCERTAMENTO := lAccCir.DS_ACCERTAMENTO || ' '|| to_char(lCdTerzoSpeciale) || ' '|| lResiduoAttSci.ds_terzo;
-- end if;
lAccCir.NOTE_ACCERTAMENTO := NULL;
lAccCir.CD_TERZO := lterzo.cd_terzo; -- Terzi diversi per migrazione
lAccCir.IM_ACCERTAMENTO := lResiduoAttSci.IM_RESIDUO;
lAccCir.DT_CANCELLAZIONE := NULL;
lAccCir.CD_RIFERIMENTO_CONTRATTO := NULL;
lAccCir.DT_SCADENZA_CONTRATTO := NULL;
lAccCir.CD_FONDO_RICERCA := NULL;
lAccCir.FL_PGIRO := lElemVoce.FL_PARTITA_GIRO;
lAccCir.RIPORTATO := 'N';
lAccCir.DACR := lDataMigrazione;
lAccCir.UTCR := cgUtente;
lAccCir.DUVA := lDataMigrazione;
lAccCir.UTUV := cgUtente;
lAccCir.PG_VER_REC := 1;
lAccCir.CD_CDS_ORI_RIPORTO := NULL;
lAccCir.ESERCIZIO_ORI_RIPORTO := NULL;
lAccCir.ESERCIZIO_ORI_ORI_RIPORTO := NULL;
lAccCir.PG_ACCERTAMENTO_ORI_RIPORTO := NULL;
lAccCir.ESERCIZIO_COMPETENZA := gcEsercizio;
lAccCir.PG_ACCERTAMENTO_ORIGINE := lResiduoAttSci.cd_residuo;
lAccScadCir.CD_CDS := lAccCir.CD_CDS;
lAccScadCir.ESERCIZIO := lAccCir.ESERCIZIO;
lAccScadCir.ESERCIZIO_ORIGINALE := lAccCir.ESERCIZIO_ORIGINALE;
lAccScadCir.PG_ACCERTAMENTO := lAccCir.PG_ACCERTAMENTO;
lAccScadCir.PG_ACCERTAMENTO_SCADENZARIO := 1;
lAccScadCir.DT_SCADENZA_EMISSIONE_FATTURA := to_Date('3112'||gcEsercizio,'ddmmyyyy');
lAccScadCir.DT_SCADENZA_INCASSO := to_Date('3112'||gcEsercizio,'ddmmyyyy');
lAccScadCir.DS_SCADENZA := 'SCADENZA UNICA PER RESIDUO DI MIGRAZIONE';
lAccScadCir.IM_SCADENZA := lAccCir.IM_ACCERTAMENTO;
lAccScadCir.IM_ASSOCIATO_DOC_AMM := 0;
lAccScadCir.IM_ASSOCIATO_DOC_CONTABILE := 0;
lAccScadCir.DACR := lDataMigrazione;
lAccScadCir.UTCR := cgUtente;
lAccScadCir.DUVA := lDataMigrazione;
lAccScadCir.UTUV := cgUtente;
lAccScadCir.PG_VER_REC := 1;
lAccScadVoceCir.CD_CDS := lAccCir.CD_CDS;
lAccScadVoceCir.ESERCIZIO := lAccCir.ESERCIZIO;
lAccScadVoceCir.ESERCIZIO_ORIGINALE := lAccCir.ESERCIZIO_ORIGINALE;
lAccScadVoceCir.PG_ACCERTAMENTO := lAccCir.PG_ACCERTAMENTO;
lAccScadVoceCir.PG_ACCERTAMENTO_SCADENZARIO := lAccScadCir.PG_ACCERTAMENTO_SCADENZARIO;
lAccScadVoceCir.CD_CENTRO_RESPONSABILITA := lCdr.cd_centro_Responsabilita;
lAccScadVoceCir.CD_LINEA_ATTIVITA := CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE);
lAccScadVoceCir.IM_VOCE := lAccCir.IM_ACCERTAMENTO;
lAccScadVoceCir.CD_FONDO_RICERCA := NULL;
lAccScadVoceCir.DACR := lDataMigrazione;
lAccScadVoceCir.UTCR := cgUtente;
lAccScadVoceCir.DUVA := lDataMigrazione;
lAccScadVoceCir.UTUV := cgUtente;
lAccScadVoceCir.PG_VER_REC := 1;
-- Controllare che il residuo non sia gia stato migrato
if not ChkAccertamento2002(lAccCir, lAccCir.duva) then
cnrctb035.INS_ACCERTAMENTO(lAccCir);
cnrctb035.INS_ACCERTAMENTO_SCADENZARIO(lAccScadCir);
cnrctb035.INS_ACCERTAMENTO_SCAD_VOCE(lAccScadVoceCir);
crea_residuo_attivo(lAccCir,gcEsercizioDest,lDataMigrazione);
else
begin
gMsgLog := 'Impossibile recuperare l''accertamento precedentemente migrato, accertamento_origine ' || to_char(lAccCir.pg_accertamento_origine);
select *
into lAccCir
from accertamento
where pg_accertamento_origine = lAccCir.pg_accertamento_origine
and cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC
and esercizio = gcEsercizio
and esercizio_originale = lResiduoAttSci.esercizio
and substr(to_char(pg_accertamento),1,4) = lResiduoAttSci.esercizio
and length(to_char(pg_accertamento)) = 10;
crea_residuo_attivo(lAccCir,gcEsercizioDest,lDataMigrazione);
exception when no_Data_found then
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end;
end if;
exception when no_data_found then
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
when others then
ibmutl200.logInf(gPgLog ,'residuo origine '|| lResiduoAttSci.cd_residuo || ' accertamento '|| lAccCir.pg_accertamento || sqlerrm (sqlcode), '', '');
lNumResiduiAttSci := lNumResiduiAttSci - 1;
rollback to savepoint altro_accertamento;
end;
end loop;
-- Cancelliamo i residui attivi
SetResiduiAttiviCanc(lDataMigrazione);
end ;
------------------------------------------------------------------------
-- Controlla se il residuo risulta gia inserito
function ChkAccertamento2002(aAccertamento accertamento%rowtype, aSysdate date) return boolean is
lAcc2002 accertamento%rowtype;
lScadLibera accertamento_scadenzario%rowtype;
lScad accertamento_scadenzario%rowtype;
lScadVoce accertamento_scad_voce%rowtype;
lImportoLibero2003 number(15,2);
lGiaAssociato boolean;
lGiaInserito boolean;
lAccModificabile boolean;
lDelta number(15,2);
lTrovataScadenza boolean;
-- Tipo Cambio 1 : Creditore diverso => lTipoModifica = 1
-- Tipo Cambio 2 : Importo nuovo > vecchio => lTipoModifica = 2
-- Tipo Cambio 3 : Importo nuovo < vecchio => lTipoModifica = 3
-- Tipo Cambio 4 : Voce diversa => lTipoModifica = 4
-- Tipo Cambio 5 : UO diversa => lTipoModifica = 5
lTipoModifica number;
begin
begin
select *
into lAcc2002
from accertamento acc
where acc.pg_accertamento_origine = aAccertamento.pg_Accertamento_origine
and substr(to_char(acc.pg_accertamento),1,4) = substr(to_char(aAccertamento.pg_accertamento),1,4)
and length(to_char(acc.pg_accertamento)) = 10
and cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC
and esercizio = gcEsercizio
and esercizio_originale = To_Number(substr(to_char(acc.pg_accertamento),1,4))
for update nowait;
lGiaInserito := TRUE;
exception when no_data_found then
lGiaInserito := FALSE;
end ;
begin
if lGiaInserito then
-- Controlliamo se l'accertamento residuo principale risulta gia
-- associato a documenti amministrativi
lGiaAssociato := ResiduoAttAssociato(lAcc2002);
----------------------------------------------------------------------
-- Identificare il tipo di eventuale cambiamento del residuo --
----------------------------------------------------------------------
-- Tipo Cambio 1 : Creditore diverso se e solo se Residuo
-- principale non associato a documenti amministrativi
-- Tipo Cambio 2 : Importo diverso nuovo > vecchio
-- Tipo Cambio 3 : Importo diverso nuovo < vecchio
-- Tipo Cambio 4 : cd_voce diversa gestito se e solo se Residuo
-- principale non associato a documenti amministrativi
-- Tipo Cambio 5 : UO diversa se e solo se Residuo
-- principale non associato a documenti amministrativi
lTipoModifica :=0;
if aAccertamento.CD_TERZO != lAcc2002.CD_TERZO then
lTipoModifica := 1;
if not lGiaAssociato then
update accertamento
set cd_terzo = lAcc2002.cd_terzo,
utuv = lAcc2002.utuv,
duva = lAcc2002.duva,
pg_ver_rec = pg_ver_rec +1
where cd_cds = aAccertamento.cd_cds
and esercizio = aAccertamento.esercizio
and esercizio_originale = aAccertamento.esercizio_originale
and pg_accertamento = aAccertamento.pg_accertamento;
end if;
end if;
if aAccertamento.IM_ACCERTAMENTO > lAcc2002.IM_ACCERTAMENTO then
lTipoModifica := 2;
-- Siamo nel caso in cui stiamo inserendo un accertamento residuo
-- che risulta gia inserito nella tabella ACCERTAMENTI. Quindi
-- siccome risulta cambiato l'importo dell'accertamento occorre
-- seguire il seguente algoritmo :
-- Importo del accertamento NUOVO (che vogliamo inserire) risulta
-- MAGGIORE dell'importo dell'accertamento Principale
-- (gia presente nella tabella esercizio) in questo caso =>
-- viene modificato l'importo relativo alla prima scadenza
-- non associata a documenti amministrativi, se non esiste
-- tale scadenza allora se ne crea una nuova con importo pari
-- al delta IMPORTO ACC NUOVO - IMPORTO ACC PRINCIPALE
-- Recuperiamo l'unica scadenza scadenza
select *
into lScadLibera
from accertamento_scadenzario
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_accertamento
for update nowait;
-- Impostiamo i dati della scadenza libera
lScadLibera.IM_SCADENZA := aAccertamento.IM_ACCERTAMENTO;
lScadLibera.DUVA := aSysdate;
lScadLibera.UTUV := cgUtente;
lScadLibera.PG_VER_REC := lScadLibera.PG_VER_REC + 1;
-- Recuperiamo l'unico dettaglio voce associato alla scadenza
select *
into lScadVoce
from accertamento_scad_voce
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_accertamento_scadenzario
for update nowait;
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScadLibera.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Accertamento, scadenza, voce
update accertamento
set im_accertamento = aAccertamento.im_accertamento
,utuv = cgUtente
,duva = aSysdate
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_accertamento;
-- Aggiornamento scadenza
update accertamento_scadenzario
set IM_SCADENZA = lScadLibera.IM_SCADENZA
,DUVA = lScadLibera.DUVA
,UTUV = lScadLibera.UTUV
,PG_VER_REC = lScadLibera.PG_VER_REC
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
and esercizio_originale = lScadLibera.esercizio_originale
and pg_accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_Accertamento_scadenzario;
-- Aggiornamento scadenza voce
update accertamento_scad_voce
set IM_VOCE = lScadVoce.IM_VOCE
,DUVA = lScadVoce.DUVA
,UTUV = lScadVoce.UTUV
,PG_VER_REC = lScadVoce.PG_VER_REC
where cd_cds = lScadVoce.cd_cds
and esercizio = lScadVoce.esercizio
and esercizio_originale = lScadVoce.esercizio_originale
and pg_accertamento = lScadVoce.pg_accertamento
and pg_accertamento_scadenzario = lScadVoce.pg_Accertamento_scadenzario
and cd_centro_responsabilita = lScadVoce.cd_centro_responsabilita
and cd_linea_attivita = lScadVoce.cd_linea_attivita;
end if;
if aAccertamento.IM_ACCERTAMENTO < lAcc2002.IM_ACCERTAMENTO then
lTipoModifica := 3;
-- Siamo nel caso in cui stiamo inserendo un accertamento residuo
-- che risulta gia inserito nella tabella ACCERTAMENTI. Quindi
-- siccome risulta cambiato l'importo dell'accertamento occorre
-- seguire il seguente algoritmo :
-- Importo del accertamento NUOVO (che vogliamo inserire) risulta
-- minore dell'importo dell'accertamento Principale
-- (gia presente nella tabella esercizio) in questo caso =>
-- viene modificato l'importo relativo alla prima scadenza
-- non associata a documenti amministrativi, se cio non basta
-- allora si passa alla seconda scadenza libera e cosi via. Se
-- non ci sono sufficienti scadenze libere per soddisfare la
-- diminuzione dell'importo dell'accertamento allora si blocca
-- il riporto.
lDelta := lAcc2002.IM_ACCERTAMENTO - aAccertamento.IM_ACCERTAMENTO;
lTrovataScadenza := false;
-- Controlliamo se l'accertamento 2002 puo essere modificato
-- lAccModificabile
select nvl(sum(im_scadenza),0)
into lImportoLibero2003
from accertamento_scadenzario
where cd_cds = lAcc2002.cd_cds
and esercizio = gcEsercizioDest
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_Accertamento
and nvl(im_associato_doc_amm,0) = 0;
if lImportoLibero2003 >= lDelta then
lAccModificabile := true;
else
lAccModificabile := false;
gMsgLog := 'Impossibile riportare il residuo - non bastano le scadenze libere, esercizio = ' || substr(to_char(aAccertamento.pg_accertamento),1,4) || ' cd_residuo = '|| aAccertamento.pg_accertamento_origine;
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
if lAccModificabile then
select *
into lScad
from accertamento_scadenzario
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_Accertamento = lAcc2002.pg_Accertamento
and nvl(im_associato_doc_amm,0) = 0
for update nowait;
-- Impostiamo i dati della scadenza libera
if lScad.IM_SCADENZA >= lDelta then
lScad.IM_SCADENZA := lScad.IM_SCADENZA - lDelta;
lDelta := 0;
else
if lScad.IM_SCADENZA < lDelta then
lScad.IM_SCADENZA :=0;
lDelta := lDelta - lScad.IM_SCADENZA;
end if;
end if;
lScad.DUVA := aSysdate;
lScad.UTUV := cgUtente;
lScad.PG_VER_REC := lScad.PG_VER_REC + 1;
-- Recuperiamo l'unico dettaglio voce associato alla scadenza
select *
into lScadVoce
from accertamento_scad_voce
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_accertamento = lScad.pg_accertamento
and pg_accertamento_scadenzario = lScad.pg_accertamento_scadenzario
for update nowait;
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScad.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Accertamento, scadenza, voce
update accertamento
set im_accertamento = aAccertamento.im_accertamento
,utuv = cgUtente
,duva = aSysdate
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_accertamento;
-- Aggiornamento scadenza
update accertamento_scadenzario
set IM_SCADENZA = lScad.IM_SCADENZA
,DUVA = lScad.DUVA
,UTUV = lScad.UTUV
,PG_VER_REC = lScad.PG_VER_REC
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_accertamento = lScad.pg_accertamento
and pg_accertamento_scadenzario = lScad.pg_Accertamento_scadenzario;
-- Aggiornamento scadenza voce
update accertamento_scad_voce
set IM_VOCE = lScadVoce.IM_VOCE
,DUVA = lScadVoce.DUVA
,UTUV = lScadVoce.UTUV
,PG_VER_REC = lScadVoce.PG_VER_REC
where cd_cds = lScadVoce.cd_cds
and esercizio = lScadVoce.esercizio
and esercizio_originale = lScadVoce.esercizio_originale
and pg_accertamento = lScadVoce.pg_accertamento
and pg_accertamento_scadenzario = lScadVoce.pg_Accertamento_scadenzario
and cd_centro_responsabilita = lScadVoce.cd_centro_responsabilita
and cd_linea_attivita = lScadVoce.cd_linea_attivita;
end if; --lModificabile
end if;
if aAccertamento.CD_VOCE != lAcc2002.CD_VOCE then
lTipoModifica := 4;
if not lGiaAssociato then
update accertamento
set cd_voce = aAccertamento.CD_VOCE,
cd_elemento_voce = aAccertamento.CD_ELEMENTO_VOCE,
cd_cds_origine = aAccertamento.cd_cds_origine,
cd_uo_origine = aAccertamento.cd_uo_origine,
utuv = aAccertamento.utuv,
duva = aAccertamento.duva,
pg_ver_rec = pg_ver_rec +1
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_accertamento;
end if;
end if;
if aAccertamento.CD_UNITA_ORGANIZZATIVA != lAcc2002.CD_UNITA_ORGANIZZATIVA then
lTipoModifica := 5;
if not lGiaAssociato then
update accertamento
set cd_unita_organizzativa = lAcc2002.cd_unita_organizzativa,
utuv = lAcc2002.utuv,
duva = lAcc2002.duva,
pg_ver_rec = pg_ver_rec +1
where cd_cds = lAcc2002.cd_cds
and esercizio = lAcc2002.esercizio
and esercizio_originale = lAcc2002.esercizio_originale
and pg_accertamento = lAcc2002.pg_accertamento;
end if;
end if;
-- Condizioni di arresto del riporto.
if lTipoModifica = 0 AND lGiaAssociato then
gMsgLog := 'Accertamento non risulta in nessun modo cambiato dal precedente riporto esercizio = '|| substr(to_char(aAccertamento.pg_accertamento),1,4) || ' cd_residuo = '|| aAccertamento.pg_accertamento_origine;
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
if lTipoModifica in (1,5) AND lGiaAssociato then
gMsgLog := 'Accertamento residuo gia associato a documenti amministrativi esercizio = ' || substr(to_char(aAccertamento.pg_accertamento),1,4) || ' cd_residuo = '|| aAccertamento.pg_accertamento_origine ;
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
if lTipoModifica = 4 AND lGiaAssociato then
-- aggiungerre la condizione che le scadenze non devono essere state modificate
gMsgLog := 'Accertamento residuo gia associato a documenti amministrativi esercizio = '|| substr(to_char(aAccertamento.pg_accertamento),1,4) || ' cd_residuo = '|| aAccertamento.pg_accertamento_origine;
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
return TRUE;
else
-- In questo caso l'accertamento risulta essere mai stato inserito
-- precedentemente.
return FALSE;
end if;
end;
end ChkAccertamento2002;
----------------------------------------------------------
procedure crea_residuo_attivo (aAcc2002 accertamento%rowtype
,aEsercizio_destinazione esercizio.ESERCIZIO%type
,aSysdate date) is
lResiduo2003 accertamento%rowtype;
lAccOld accertamento%rowtype;
lDelta number (15,2):=0;
begin
begin
select *
into lAccOld
from accertamento
where cd_cds = aAcc2002.cd_cds
and esercizio = aAcc2002.esercizio
and esercizio_originale = aAcc2002.esercizio_originale
and pg_Accertamento = aAcc2002.pg_Accertamento
for update nowait;
exception when no_data_found then
gMsgLog := 'Accertamento Origine non trovato, pg_accertamento = '||to_char(aAcc2002.pg_Accertamento);
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end;
lResiduo2003.CD_TIPO_DOCUMENTO_CONT := cnrctb018.TI_DOC_ACC_RES;
lResiduo2003.CD_CDS := aAcc2002.CD_CDS;
lResiduo2003.ESERCIZIO := aEsercizio_destinazione;
lResiduo2003.ESERCIZIO_ORIGINALE := aAcc2002.ESERCIZIO_ORIGINALE;
lResiduo2003.PG_ACCERTAMENTO := aAcc2002.PG_ACCERTAMENTO;
lResiduo2003.CD_UNITA_ORGANIZZATIVA := aAcc2002.CD_UNITA_ORGANIZZATIVA;
lResiduo2003.CD_CDS_ORIGINE := aAcc2002.CD_CDS_ORIGINE;
lResiduo2003.CD_UO_ORIGINE := aAcc2002.CD_UO_ORIGINE;
lResiduo2003.TI_APPARTENENZA := aAcc2002.TI_APPARTENENZA;
lResiduo2003.TI_GESTIONE := aAcc2002.TI_GESTIONE;
lResiduo2003.CD_ELEMENTO_VOCE := aAcc2002.CD_ELEMENTO_VOCE;
lResiduo2003.CD_VOCE := aAcc2002.CD_VOCE;
lResiduo2003.DT_REGISTRAZIONE := aAcc2002.DT_REGISTRAZIONE;
lResiduo2003.DS_ACCERTAMENTO := aAcc2002.DS_ACCERTAMENTO;
lResiduo2003.NOTE_ACCERTAMENTO := aAcc2002.NOTE_ACCERTAMENTO;
lResiduo2003.CD_TERZO := aAcc2002.CD_TERZO;
lResiduo2003.IM_ACCERTAMENTO := aAcc2002.IM_ACCERTAMENTO;
lResiduo2003.DT_CANCELLAZIONE := aAcc2002.DT_CANCELLAZIONE;
lResiduo2003.CD_RIFERIMENTO_CONTRATTO := aAcc2002.CD_RIFERIMENTO_CONTRATTO;
lResiduo2003.DT_SCADENZA_CONTRATTO := aAcc2002.DT_SCADENZA_CONTRATTO;
lResiduo2003.CD_FONDO_RICERCA := aAcc2002.CD_FONDO_RICERCA;
lResiduo2003.FL_PGIRO := aAcc2002.FL_PGIRO;
lResiduo2003.RIPORTATO := 'N';
lResiduo2003.DACR := aAcc2002.DACR;
lResiduo2003.UTCR := aAcc2002.UTCR;
lResiduo2003.DUVA := aSysdate;
lResiduo2003.UTUV := cgutente;
lResiduo2003.PG_VER_REC := 1;
lResiduo2003.CD_CDS_ORI_RIPORTO := aAcc2002.CD_CDS;
lResiduo2003.ESERCIZIO_ORI_RIPORTO := aAcc2002.ESERCIZIO;
lResiduo2003.ESERCIZIO_ORI_ORI_RIPORTO := aAcc2002.ESERCIZIO_ORIGINALE;
lResiduo2003.PG_ACCERTAMENTO_ORI_RIPORTO := aAcc2002.PG_ACCERTAMENTO;
lResiduo2003.ESERCIZIO_COMPETENZA := aEsercizio_destinazione;
lResiduo2003.PG_ACCERTAMENTO_ORIGINE := aAcc2002.PG_ACCERTAMENTO_ORIGINE;
ChkResiduoAtt2003 (lResiduo2003);
lAccOld.RIPORTATO := 'Y';
lAccOld.DUVA := aSysdate;
lAccOld.UTUV := cgUtente;
lAccOld.PG_VER_REC := lAccOld.PG_VER_REC + 1;
update accertamento
set riportato = lAccOld.RIPORTATO
,duva = lAccOld.DUVA
,utuv = lAccOld.UTUV
,pg_ver_rec = pg_ver_rec + 1
where cd_cds = lAccOld.cd_cds
and esercizio = lAccOld.esercizio
and esercizio_originale = lAccOld.esercizio_originale
and pg_accertamento = lAccOld.pg_accertamento;
end ;
-- Controlla se il residuo risulta gia inserito
procedure ChkResiduoAtt2003(aResiduo2003 accertamento%rowtype) is
lResiduoOld accertamento%rowtype;
lScadVoce accertamento_scad_voce%rowtype;
lGiaAssociato boolean;
lGiaInserito boolean;
lDelta number(15,2) :=0 ;
lTrovataScadenza boolean;
-- Tipo Cambio 1 : Creditore diverso => lTipoModifica = 1
-- Tipo Cambio 2 : Importo nuovo > vecchio => lTipoModifica = 2
-- Tipo Cambio 3 : Importo nuovo < vecchio => lTipoModifica = 3
-- Tipo Cambio 4 : Voce diversa => lTipoModifica = 4
-- Tipo Cambio 5 : UO diversa => lTipoModifica = 5
lTipoModifica number;
lTotImpModificabile number(15,2):=0;
begin
begin
select *
into lResiduoOld
from accertamento acc
where acc.CD_CDS = aResiduo2003.CD_CDS
and acc.ESERCIZIO = aResiduo2003.ESERCIZIO
and acc.ESERCIZIO_ORIGINALE = aResiduo2003.ESERCIZIO_ORIGINALE
and acc.PG_ACCERTAMENTO = aResiduo2003.PG_ACCERTAMENTO
for update nowait;
lGiaInserito := TRUE;
exception when no_data_found then
lGiaInserito := FALSE;
end ;
begin
if lGiaInserito then
-- Controlliamo se l'accertamento residuo principale risulta gia
-- associato a documenti amministrativi
lGiaAssociato := ResiduoAttAssociato(lResiduoOld);
----------------------------------------------------------------------
-- Identificare il tipo di eventuale cambiamento del residuo --
----------------------------------------------------------------------
-- Tipo Cambio 1 : Creditore diverso se e solo se Residuo
-- principale non associato a documenti amministrativi
-- Tipo Cambio 2 : Importo diverso nuovo > vecchio
-- Tipo Cambio 3 : Importo diverso nuovo < vecchio
-- Tipo Cambio 4 : cd_voce diversa gestito se e solo se Residuo
-- principale non associato a documenti amministrativi
-- Tipo Cambio 5 : UO diversa se e solo se Residuo
-- principale non associato a documenti amministrativi
if aResiduo2003.CD_TERZO != lResiduoOld.CD_TERZO then
lTipoModifica := 1;
if not lGiaAssociato then
update accertamento
set cd_terzo = aResiduo2003.cd_terzo,
utuv = aResiduo2003.utuv,
duva = aResiduo2003.duva,
pg_ver_rec = pg_ver_rec +1
where cd_cds = aResiduo2003.cd_cds
and esercizio = aResiduo2003.esercizio
and esercizio_originale = aResiduo2003.esercizio_originale
and pg_accertamento = aResiduo2003.pg_accertamento;
end if;
end if;
if aResiduo2003.CD_VOCE != lResiduoOld.CD_VOCE then
lTipoModifica := 4;
if not lGiaAssociato then
update accertamento
set CD_VOCE = aResiduo2003.CD_VOCE,
cd_elemento_voce = aResiduo2003.CD_ELEMENTO_VOCE,
cd_cds_origine = aResiduo2003.cd_cds_origine,
cd_uo_origine = aResiduo2003.cd_uo_origine,
utuv = aResiduo2003.utuv,
duva = aResiduo2003.duva,
pg_ver_rec = pg_ver_rec +1
where cd_cds = aResiduo2003.cd_cds
and esercizio = aResiduo2003.esercizio
and esercizio_originale = aResiduo2003.esercizio_originale
and pg_accertamento = aResiduo2003.pg_accertamento;
-- Decrementiamo il saldo sul vecchio cd_voce del valore
-- pari all'importo del vecchio accertamento
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr - lResiduoOld.IM_ACCERTAMENTO,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr - lResiduoOld.IM_ACCERTAMENTO,
utuv=aResiduo2003.utuv,
duva=aResiduo2003.duva,
pg_ver_rec=pg_ver_rec + 1
where esercizio = lResiduoOld.esercizio
and cd_cds = lResiduoOld.cd_cds
and ti_appartenenza = lResiduoOld.ti_appartenenza
and ti_gestione = lResiduoOld.ti_gestione
and cd_voce = lResiduoOld.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
-- Aumentiamo il saldo sul nuovo cd_voce del valore
-- pari all'importo del vecchio accertamento
-- questo perchè gli aumenti e diminuzioni di valori
-- sono trattate di seguito
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr + lResiduoOld.IM_ACCERTAMENTO,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr + lResiduoOld.IM_ACCERTAMENTO,
utuv=aResiduo2003.utuv,
duva=aResiduo2003.duva,
pg_ver_rec=pg_ver_rec + 1
where esercizio = aResiduo2003.esercizio
and cd_cds = aResiduo2003.cd_cds
and ti_appartenenza = aResiduo2003.ti_appartenenza
and ti_gestione = aResiduo2003.ti_gestione
and cd_voce = aResiduo2003.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
end if;
end if;
if aResiduo2003.CD_UNITA_ORGANIZZATIVA != lResiduoOld.CD_UNITA_ORGANIZZATIVA then
lTipoModifica := 5;
if not lGiaAssociato then
update accertamento
set CD_UNITA_ORGANIZZATIVA = aResiduo2003.CD_UNITA_ORGANIZZATIVA,
utuv = aResiduo2003.utuv,
duva = aResiduo2003.duva,
pg_ver_rec = pg_ver_rec +1
where cd_cds = aResiduo2003.cd_cds
and esercizio = aResiduo2003.esercizio
and esercizio_originale = aResiduo2003.esercizio_originale
and pg_accertamento = aResiduo2003.pg_accertamento;
end if;
end if;
if aResiduo2003.IM_ACCERTAMENTO > lResiduoOld.IM_ACCERTAMENTO then
lTipoModifica := 2;
end if;
if aResiduo2003.IM_ACCERTAMENTO < lResiduoOld.IM_ACCERTAMENTO then
lTipoModifica := 3;
end if;
-- Condizioni di arresto del riporto.
if lTipoModifica =0 then
gMsgLog := 'Accertamento residuo replicato pg_accertamento =' || to_char(aResiduo2003.pg_accertamento);
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
if lTipoModifica in (1,4,5) AND lGiaAssociato then
gMsgLog := 'Accertamento residuo gia associato a documenti amministrativi pg_accertamento = ' || to_char(aResiduo2003.pg_accertamento);
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
else
if lTipoModifica = 2 then
-- Siamo nel caso in cui stiamo inserendo un accertamento residuo
-- che risulta gia inserito nella tabella ACCERTAMENTI. Quindi
-- siccome risulta cambiato l'importo dell'accertamento occorre
-- seguire il seguente algoritmo :
-- Importo del accertamento NUOVO (che vogliamo inserire) risulta
-- MAGGIORE dell'importo dell'accertamento Principale
-- (gia presente nella tabella esercizio) in questo caso =>
-- viene modificato l'importo relativo alla prima scadenza
-- non associata a documenti amministrativi, se non esiste
-- tale scadenza allora se ne crea una nuova con importo pari
-- al delta IMPORTO ACC NUOVO - IMPORTO ACC PRINCIPALE
-----------------------------------------------------------------------
ModPlusAcc2003(aResiduo2003, lResiduoOld);
-----------------------------------------------------------------------
end if; -- Modifica 2
if lTipoModifica = 3 then
gMsgLog := 'modifcare';
-- Siamo nel caso in cui stiamo inserendo un accertamento residuo
-- che risulta gia inserito nella tabella ACCERTAMENTI. Quindi
-- siccome risulta cambiato l'importo dell'accertamento occorre
-- seguire il seguente algoritmo :
-- Importo del accertamento NUOVO (che vogliamo inserire) risulta
-- minore dell'importo dell'accertamento Principale
-- (gia presente nella tabella esercizio) in questo caso =>
-- viene modificato l'importo relativo alla prima scadenza
-- non associata a documenti amministrativi, se cio non basta
-- allora si passa alla seconda scadenza libera e cosi via. Se
-- non ci sono sufficienti scadenze libere per soddisfare la
-- diminuzione dell'importo dell'accertamento allora si blocca
-- il riporto.
lDelta := lResiduoOld.im_accertamento - aResiduo2003.im_accertamento;
for lScadLibera in (select *
from accertamento_scadenzario
where cd_cds = aResiduo2003.cd_cds
and esercizio = aResiduo2003.esercizio
And esercizio_originale = aResiduo2003.esercizio_originale
and pg_accertamento = aResiduo2003.pg_accertamento
and im_associato_doc_amm = 0
for update nowait) loop
begin
-- Controlliamo se la scadenza puo essere modificata
select *
into lScadVoce
from accertamento_scad_voce
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
And esercizio_originale = lScadLibera.esercizio_originale
and pg_accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_accertamento_scadenzario
and im_voce = lScadLibera.im_scadenza;
lTotImpModificabile := lTotImpModificabile + lScadLibera.im_scadenza;
exception when no_data_found then
null;
end;
end loop;
if lTotImpModificabile >= lDelta then
-------------------------------------------------------------------
ModMinusAcc2003(aResiduo2003, lResiduoOld);
-------------------------------------------------------------------
else
gMsgLog := 'Residuo ' || to_char(aResiduo2003.pg_accertamento_origine) || ' non modificato';
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
end if; -- Modifica 3
end if; -- lTipoModifica in (1,4,5)
else -- lGiaInserito
-- In questo caso l'accertamento risulta essere mai stato inserito
-- precedentemente.
CreaResiduoAtt2003(aResiduo2003);
-- Aggiornare voce_f_saldi_cmp
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr + aResiduo2003.IM_ACCERTAMENTO,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr + aResiduo2003.IM_ACCERTAMENTO,
utuv=aResiduo2003.utuv,
duva=aResiduo2003.duva,
pg_ver_rec=pg_ver_rec + 1
where esercizio = aResiduo2003.esercizio
and cd_cds = aResiduo2003.cd_cds
and ti_appartenenza = aResiduo2003.ti_appartenenza
and ti_gestione = aResiduo2003.ti_gestione
and cd_voce = aResiduo2003.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
end if;
end;
end ChkResiduoAtt2003;
procedure CreaResiduoAtt2003 (aResiduo2003 accertamento%rowtype) IS
lScadLibera accertamento_scadenzario%rowtype;
lScadVoce accertamento_scad_voce%rowtype;
begin
-- Costruiamo uan scadenza libera per il residuo attivo
lScadLibera := CreaScad2003(aResiduo2003);
-- Costruiamo il dettaglio voce associato alla scadenza
lScadVoce := CreaScadVoce2003(lScadLibera);
-- Aggiornamento Accertamento, scadenza
cnrctb035.INS_ACCERTAMENTO(aResiduo2003);
cnrctb035.INS_ACCERTAMENTO_SCADENZARIO(lScadLibera);
cnrctb035.INS_ACCERTAMENTO_SCAD_VOCE(lScadVoce);
end;
function CreaScad2003(aResiduo2003 accertamento%rowtype) return accertamento_Scadenzario%rowtype is
lScadenzaLibera accertamento_Scadenzario%rowtype;
lPgScadenza number;
begin
-- creazione di una scadenza nuova
select nvl(max(pg_accertamento_scadenzario),0) +1
into lPgScadenza
from accertamento_scadenzario
where cd_cds = aResiduo2003.cd_cds
and esercizio = aResiduo2003.esercizio
and esercizio_originale = aResiduo2003.esercizio_originale
and pg_Accertamento = aResiduo2003.pg_Accertamento;
lScadenzaLibera.CD_CDS := aResiduo2003.cd_Cds;
lScadenzaLibera.ESERCIZIO := aResiduo2003.esercizio;
lScadenzaLibera.ESERCIZIO_ORIGINALE := aResiduo2003.esercizio_originale;
lScadenzaLibera.PG_ACCERTAMENTO := aResiduo2003.pg_Accertamento;
lScadenzaLibera.PG_ACCERTAMENTO_SCADENZARIO := lPgScadenza;
lScadenzaLibera.DT_SCADENZA_EMISSIONE_FATTURA := trunc(to_date('3112'||gcEsercizioDest,'ddmmyyyy')) ; -- chiedere
lScadenzaLibera.DT_SCADENZA_INCASSO := trunc(to_date('3112'||gcEsercizioDest,'ddmmyyyy')); -- chiedere
lScadenzaLibera.DS_SCADENZA := 'Scadenza per aumento di valore';
lScadenzaLibera.IM_SCADENZA := aResiduo2003.IM_ACCERTAMENTO;
lScadenzaLibera.IM_ASSOCIATO_DOC_AMM := 0;
lScadenzaLibera.IM_ASSOCIATO_DOC_CONTABILE := 0;
lScadenzaLibera.DACR := aResiduo2003.dacr;
lScadenzaLibera.UTCR := aResiduo2003.utcr;
lScadenzaLibera.DUVA := aResiduo2003.dacr;
lScadenzaLibera.UTUV := aResiduo2003.utcr;
lScadenzaLibera.PG_VER_REC := 1;
return lScadenzaLibera;
end;
function CreaScadVoce2003 (aScad accertamento_scadenzario%rowtype) return accertamento_scad_voce%rowtype is
lScadenzaVoce accertamento_scad_voce%rowtype;
aCdCdr varchar2(30);
aCdLa varchar2(10);
lNumeScdVoce number :=0;
begin
-- configurare la linea attivita in configurazione CNR
aCdCdr :=CNRCTB015.GETVAL01PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE);
aCdLa :=CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE);
lScadenzaVoce.CD_CDS := aScad.cd_cds;
lScadenzaVoce.ESERCIZIO := aScad.esercizio;
lScadenzaVoce.ESERCIZIO_ORIGINALE := aScad.esercizio_originale;
lScadenzaVoce.PG_ACCERTAMENTO := aScad.pg_accertamento;
lScadenzaVoce.PG_ACCERTAMENTO_SCADENZARIO := aScad.pg_Accertamento_Scadenzario;
lScadenzaVoce.CD_CENTRO_RESPONSABILITA := aCdCdr; -- chiedere
lScadenzaVoce.CD_LINEA_ATTIVITA := aCdLa; -- chiedere
lScadenzaVoce.IM_VOCE := aScad.IM_SCADENZA;
lScadenzaVoce.CD_FONDO_RICERCA := NULL;
lScadenzaVoce.DACR := aScad.dacr;
lScadenzaVoce.UTCR := aScad.utcr;
lScadenzaVoce.DUVA := aScad.dacr;
lScadenzaVoce.UTUV := aScad.utcr;
lScadenzaVoce.PG_VER_REC := 1;
return lScadenzaVoce;
end;
function ResiduoAttAssociato(aAcc accertamento%rowtype) return boolean is
lPgAcc accertamento.PG_ACCERTAMENTO%type;
lEsOriAcc accertamento.ESERCIZIO_ORIGINALE%type;
lSommaImDocAmm number(15,2);
lSommaImDocCont number(15,2);
lNumScad number;
begin
-- Controlliamo se il residuo/Accertamento Principale risulta associato a documenti
-- amministrativi
select count(*), esercizio_originale, pg_accertamento, sum(nvl(scad.IM_ASSOCIATO_DOC_AMM,0)), sum(nvl(scad.IM_ASSOCIATO_DOC_CONTABILE,0))
into lNumScad,lEsOriAcc,lPgAcc,lSommaImDocAmm,lSommaImDocCont
from accertamento_scadenzario scad
where scad.CD_CDS = aAcc.CD_CDS
and scad.ESERCIZIO = aAcc.ESERCIZIO
and scad.ESERCIZIO_ORIGINALE = aAcc.ESERCIZIO_ORIGINALE
and scad.PG_ACCERTAMENTO = aAcc.PG_ACCERTAMENTO
group by scad.CD_CDS
,scad.ESERCIZIO
,scad.ESERCIZIO_ORIGINALE
,scad.PG_ACCERTAMENTO;
if lNumScad = 0 then
return FALSE;
else
if (lSommaImDocAmm >0 or lSommaImDocCont>0) then
return true;
end if;
end if;
return FALSE;
end ResiduoAttAssociato;
procedure ModPlusAcc2003(aResiduo2003New accertamento%rowtype, lResiduo2003Old accertamento%rowtype) as
lScadVoce accertamento_scad_voce%rowtype;
lDelta number (15,2);
lNumScadMod number;
lScadModificabile accertamento_scadenzario%rowtype;
lScadVoceModificabile accertamento_scad_voce%rowtype;
lTotaleImDisp number(15,2) := 0;
begin
lock table accertamento_scadenzario in exclusive mode;
lock table accertamento_scad_voce in exclusive mode;
lock table voce_f_saldi_cmp in exclusive mode;
lDelta := aResiduo2003New.im_accertamento - lResiduo2003Old.im_accertamento;
lNumScadMod := 0;
for lScadLibere in (select *
from accertamento_scadenzario
where cd_cds = lResiduo2003Old.cd_cds
and esercizio = lResiduo2003Old.esercizio
and esercizio_originale = lResiduo2003Old.esercizio_originale
and pg_accertamento = lResiduo2003Old.pg_accertamento
and im_associato_doc_amm = 0
for update nowait) loop
begin
-- Controlliamo se la scadenza puo essere modificata
select *
into lScadVoce
from accertamento_scad_voce
where cd_cds = lScadLibere.cd_cds
and esercizio = lScadLibere.esercizio
and esercizio_originale = lScadLibere.esercizio_originale
and pg_accertamento = lScadLibere.pg_accertamento
and pg_accertamento_scadenzario = lScadLibere.pg_accertamento_scadenzario
and im_voce = lScadLibere.im_scadenza;
lNumScadMod := lNumScadMod + 1;
if lNumScadMod = 1 then
lScadModificabile := lScadLibere;
lScadVoceModificabile := lScadVoce;
end if;
exception when no_data_found then
null;
end;
end loop;
if lNumScadMod > 0 then
-- Si puo modificare
-- Aggiornamento Accertamento, scadenza, voce
update accertamento
set im_accertamento = aResiduo2003New.im_accertamento
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lResiduo2003Old.cd_cds
and esercizio = lResiduo2003Old.esercizio
and esercizio_originale = lResiduo2003Old.esercizio_originale
and pg_accertamento = lResiduo2003Old.pg_accertamento;
update accertamento_scadenzario
set im_scadenza = im_scadenza + lDelta,
duva = aResiduo2003New.duva,
utuv = aResiduo2003New.utuv,
pg_ver_rec = pg_ver_rec + 1
where cd_cds = lScadModificabile.cd_cds
and esercizio = lScadModificabile.esercizio
and esercizio_originale = lScadModificabile.esercizio_originale
and pg_accertamento = lScadModificabile.pg_accertamento
and pg_accertamento_scadenzario = lScadModificabile.pg_accertamento_scadenzario;
update accertamento_scad_voce
set im_voce = im_voce + lDelta,
duva = aResiduo2003New.duva,
utuv = aResiduo2003New.utuv,
pg_ver_rec = pg_ver_rec + 1
where cd_cds = lScadVoceModificabile.cd_cds
and esercizio = lScadVoceModificabile.esercizio
and esercizio_originale = lScadVoceModificabile.esercizio_originale
and pg_accertamento = lScadVoceModificabile.pg_accertamento
and pg_accertamento_scadenzario = lScadVoceModificabile.pg_accertamento_scadenzario
and cd_centro_responsabilita = lScadVoceModificabile.cd_centro_responsabilita
and cd_linea_attivita = lScadVoceModificabile.cd_linea_attivita;
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr + lDelta,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr + lDelta,
utuv = aResiduo2003New.utuv,
duva = aResiduo2003New.duva,
pg_ver_rec = pg_ver_rec + 1
where esercizio = aResiduo2003New.esercizio
and cd_cds = aResiduo2003New.cd_cds
and ti_appartenenza = aResiduo2003New.ti_appartenenza
and ti_gestione = aResiduo2003New.ti_gestione
and cd_voce = aResiduo2003New.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
else
CreaNuovaScad2003(aResiduo2003New, lResiduo2003Old);
update accertamento
set im_accertamento = aResiduo2003New.im_accertamento
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lResiduo2003Old.cd_cds
and esercizio = lResiduo2003Old.esercizio
and esercizio_originale = lResiduo2003Old.esercizio_originale
and pg_accertamento = lResiduo2003Old.pg_accertamento;
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr + lDelta,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr + lDelta,
utuv = aResiduo2003New.utuv,
duva = aResiduo2003New.duva,
pg_ver_rec = pg_ver_rec + 1
where esercizio = aResiduo2003New.esercizio
and cd_cds = aResiduo2003New.cd_cds
and ti_appartenenza = aResiduo2003New.ti_appartenenza
and ti_gestione = aResiduo2003New.ti_gestione
and cd_voce = aResiduo2003New.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
end if;
end;
procedure CreaNuovaScad2003(aResiduo2003New accertamento%rowtype, aResiduo2003Old accertamento%rowtype) as
lScadLibera accertamento_scadenzario%rowtype;
lPgScadenza number;
lDelta number(15,2);
lNumVoce number := 0;
lTrovataVoce boolean;
begin
lTrovataVoce := false;
lDelta := aResiduo2003New.im_accertamento - aResiduo2003Old.im_accertamento;
select max(pg_accertamento_scadenzario) + 1
into lPgScadenza
from accertamento_scadenzario
where cd_cds = aResiduo2003Old.cd_cds
and esercizio = aResiduo2003Old.esercizio
and esercizio_originale = aResiduo2003Old.esercizio_originale
and pg_accertamento = aResiduo2003Old.pg_accertamento;
lScadLibera.CD_CDS := aResiduo2003New.cd_Cds;
lScadLibera.ESERCIZIO := aResiduo2003New.esercizio;
lScadLibera.ESERCIZIO_ORIGINALE := aResiduo2003New.esercizio_originale;
lScadLibera.PG_ACCERTAMENTO := aResiduo2003New.pg_Accertamento;
lScadLibera.PG_ACCERTAMENTO_SCADENZARIO := lPgScadenza;
lScadLibera.DT_SCADENZA_EMISSIONE_FATTURA := trunc(to_date('3112'||gcEsercizioDest,'ddmmyyyy')) ; -- chiedere
lScadLibera.DT_SCADENZA_INCASSO := trunc(to_date('3112'||gcEsercizioDest,'ddmmyyyy')); -- chiedere
lScadLibera.DS_SCADENZA := 'Scadenza per aumento di valore';
lScadLibera.IM_SCADENZA := lDelta;
lScadLibera.IM_ASSOCIATO_DOC_AMM := 0;
lScadLibera.IM_ASSOCIATO_DOC_CONTABILE := 0;
lScadLibera.DACR := aResiduo2003New.dacr;
lScadLibera.UTCR := aResiduo2003New.utcr;
lScadLibera.DUVA := aResiduo2003New.dacr;
lScadLibera.UTUV := aResiduo2003New.utcr;
lScadLibera.PG_VER_REC := 1;
cnrctb035.INS_ACCERTAMENTO_SCADENZARIO(lScadLibera);
for lScadVoce in (select *
from accertamento_scad_voce
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
and esercizio_originale = lScadLibera.esercizio_originale
and pg_accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_accertamento_scadenzario - 1) loop
lNumVoce := lNumVoce + 1;
lScadVoce.CD_CDS := lScadVoce.cd_cds;
lScadVoce.ESERCIZIO := lScadVoce.esercizio;
lScadVoce.ESERCIZIO_ORIGINALE := lScadVoce.esercizio_originale;
lScadVoce.PG_ACCERTAMENTO := lScadVoce.pg_accertamento;
lScadVoce.PG_ACCERTAMENTO_SCADENZARIO := lPgScadenza;
-- Non cambiano
lScadVoce.CD_CENTRO_RESPONSABILITA := lScadVoce.CD_CENTRO_RESPONSABILITA;
lScadVoce.CD_LINEA_ATTIVITA := lScadVoce.CD_LINEA_ATTIVITA;
-- Non cambiano
if (not lTrovataVoce) and
substr(lScadVoce.CD_CENTRO_RESPONSABILITA,1,length(aResiduo2003New.CD_UO_ORIGINE)) = aResiduo2003New.CD_UO_ORIGINE then
lScadVoce.IM_VOCE := lScadLibera.IM_SCADENZA;
lTrovataVoce := true;
else
lScadVoce.IM_VOCE := 0;
end if;
lScadVoce.CD_FONDO_RICERCA := NULL;
lScadVoce.DACR := lScadLibera.dacr;
lScadVoce.UTCR := lScadLibera.utcr;
lScadVoce.DUVA := lScadLibera.duva;
lScadVoce.UTUV := lScadLibera.utuv;
lScadVoce.PG_VER_REC := 1;
cnrctb035.INS_ACCERTAMENTO_SCAD_VOCE(lScadVoce);
end loop;
end;
procedure ModMinusAcc2003(aResiduo2003New accertamento%rowtype, aResiduo2003Old accertamento%rowtype) as
lDelta number(15,2);
lTotImpModificabile number (15,2) := 0;
lScadVoce accertamento_scad_voce%rowtype;
begin
-- Questa procedura viene chiamata se e solo se e possibile effettuare
-- la diminuzione di importo dell'accertamwento
lDelta := aResiduo2003Old.IM_ACCERTAMENTO - aResiduo2003New.IM_ACCERTAMENTO;
update accertamento
set im_accertamento = aResiduo2003New.IM_ACCERTAMENTO
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = pg_ver_rec + 1
where cd_cds = aResiduo2003Old.cd_cds
and esercizio = aResiduo2003Old.esercizio
and esercizio_originale = aResiduo2003Old.esercizio_originale
and pg_Accertamento = aResiduo2003Old.pg_accertamento;
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr + (aResiduo2003New.im_accertamento - aResiduo2003Old.im_accertamento),
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr + (aResiduo2003New.im_accertamento - aResiduo2003Old.im_accertamento),
utuv = aResiduo2003New.utuv,
duva = aResiduo2003New.duva,
pg_ver_rec = pg_ver_rec + 1
where esercizio = aResiduo2003New.esercizio
and cd_cds = aResiduo2003New.cd_cds
and ti_appartenenza = aResiduo2003New.ti_appartenenza
and ti_gestione = aResiduo2003New.ti_gestione
and cd_voce = aResiduo2003New.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
for lScadLibera in (select *
from accertamento_scadenzario
where cd_cds = aResiduo2003New.cd_cds
and esercizio = aResiduo2003New.esercizio
and esercizio_originale = aResiduo2003New.esercizio_originale
and pg_accertamento = aResiduo2003New.pg_accertamento
and im_associato_doc_amm = 0
for update nowait) loop
begin
-- Controlliamo se la scadenza puo essere modificata
select *
into lScadVoce
from accertamento_scad_voce
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
and esercizio_originale = lScadLibera.esercizio_originale
and pg_accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_accertamento_scadenzario
and im_voce = lScadLibera.im_scadenza;
if (lDelta > 0 ) then
if (lScadLibera.im_scadenza >= lDelta) then
update accertamento_scadenzario
set im_scadenza = im_scadenza - lDelta
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = pg_ver_rec + 1
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
and esercizio_originale = lScadLibera.esercizio_originale
and pg_Accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_accertamento_scadenzario;
lScadLibera.im_scadenza := lScadLibera.im_scadenza - lDelta;
update accertamento_scad_voce
set im_voce = im_voce - lDelta
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = pg_ver_rec + 1
where cd_cds = lScadVoce.cd_cds
and esercizio = lScadVoce.esercizio
and esercizio_originale = lScadVoce.esercizio_originale
and pg_Accertamento = lScadVoce.pg_accertamento
and pg_accertamento_scadenzario = lScadVoce.pg_accertamento_scadenzario
and cd_centro_responsabilita = lScadVoce.cd_centro_responsabilita
and cd_linea_Attivita = lScadVoce.cd_linea_Attivita;
lDelta := 0;
else
lDelta := lDelta - lScadLibera.im_scadenza;
update accertamento_scadenzario
set im_scadenza = 0
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = pg_ver_rec + 1
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
and esercizio_originale = lScadLibera.esercizio_originale
and pg_Accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_accertamento_scadenzario;
lScadLibera.im_scadenza := 0;
update accertamento_scad_voce
set im_voce = 0
,utuv = aResiduo2003New.utuv
,duva = aResiduo2003New.duva
,pg_ver_rec = pg_ver_rec + 1
where cd_cds = lScadVoce.cd_cds
and esercizio = lScadVoce.esercizio
and esercizio_originale = lScadVoce.esercizio_originale
and pg_Accertamento = lScadVoce.pg_accertamento
and pg_accertamento_scadenzario = lScadVoce.pg_accertamento_scadenzario
and cd_centro_responsabilita = lScadVoce.cd_centro_responsabilita
and cd_linea_Attivita = lScadVoce.cd_linea_Attivita;
end if;
if (lScadLibera.im_scadenza = 0) then
-- Cancelliamo le scadenze e le relativer voci con importo a zero
delete accertamento_scad_voce
where cd_cds = lScadVoce.cd_cds
and esercizio = lScadVoce.esercizio
and esercizio_originale = lScadVoce.esercizio_originale
and pg_accertamento = lScadVoce.pg_accertamento
and pg_accertamento_scadenzario = lScadVoce.pg_Accertamento_scadenzario
and cd_linea_attivita = lScadVoce.cd_linea_attivita
and im_voce = 0;
delete accertamento_scadenzario
where cd_cds = lScadLibera.cd_cds
and esercizio = lScadLibera.esercizio
and esercizio_originale = lScadLibera.esercizio_originale
and pg_accertamento = lScadLibera.pg_accertamento
and pg_accertamento_scadenzario = lScadLibera.pg_Accertamento_scadenzario
and im_scadenza = 0;
end if;
end if; --(lDelta > 0 )
exception when no_data_found then
null;
end;
end loop;
end;
procedure migrazione_residui_passivi is
-- lResiduoPasSci cnr_residui_passivi%rowtype;
lNumResiduiPasSci number;
lContatore number;
lPgObbIniziale number;
lPgObbligazione number;
lDataMigrazione date;
lCdTerzo number;
lImpegno obbligazione%rowtype;
lImpegnoScad obbligazione_scadenzario%rowtype;
lImpegnoScadVoce obbligazione_scad_voce%rowtype;
lCds unita_organizzativa%rowtype;
lUo unita_organizzativa%rowtype;
lCdr cdr%rowtype;
lElemVoce elemento_voce%rowtype;
lCdTitoloCapitolo voce_f.cd_titolo_capitolo%type;
lPgUltimoCaricamento number;
begin
gPgLog := ibmutl200.LOGSTART('Migrazione Residui Passivi' , cgUtente, 1, 1);
gMsgLog := 'Impossibile recuperare il pg_caricamento dalla tabella CNR_RESIDUI_PASSIVI';
-- Recuperiamo il progressivo dell'ultimo caricamento
select nvl(max(pg_caricamento),0)
into lPgUltimoCaricamento
from cnr_residui_passivi;
gMsgLog := 'Impossibile recuperare il CdS per l''ENTE';
-- Recuperiamo il cds realtivo all'ente
select *
into lCds
from unita_organizzativa
where cd_tipo_unita = cnrctb020.tipo_ente
and fl_cds = 'Y';
gMsgLog := 'Impossibile recuperare la UO per l''ENTE';
-- Recuperiamo l'UO realtivo all'ente
select *
into lUo
from unita_organizzativa
where cd_tipo_unita = cnrctb020.tipo_ente
and fl_uo_cds = 'Y';
gMsgLog := 'Impossibile recuperare il CDR';
-- Recuperiamo il cdr realtivo all'ente
lCdr := cnrctb020.GETCDRENTE;
gMsgLog := 'Impossibile recuperare il progressivo per l''impegno';
-- Recuperiamo il progressivo dell'obbligazione che deve essere inserita
select nvl(max(substr(to_char(pg_obbligazione),5,6)),0)
into lPgObbIniziale
from obbligazione
where cd_Cds = lCds.cd_unita_organizzativa
and esercizio=gcEsercizio
and cd_tipo_documento_cont = CNRCTB018.TI_DOC_IMP
and riportato = 'Y';
-- and substr(to_char(pg_obbligazione),1,4) = lResiduoPasSci.esercizio ;
-- Recuperia il terzo di default.
begin
select im01
into lCdTerzo
from configurazione_cnr
where cd_chiave_primaria = 'TERZO_SPECIALE'
and cd_chiave_secondaria = 'CODICE_DIVERSI_IMPEGNI';
exception when no_data_found then
gMsgLog := 'Nella tabella CONFIGURAZIONE_CNR manca : TERZO_SPECIALE per CODICE_DIVERSI_IMPEGNI';
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end;
lDataMigrazione := sysdate;
lNumResiduiPasSci := 0;
lContatore :=0;
-- eseguire il lock della tabella CNR_RESIDUI_PASSIVI
LOCK TABLE CNR_RESIDUI_PASSIVI IN EXCLUSIVE MODE NOWAIT;
for lResiduoPasSci in (SELECT * FROM CNR_RESIDUI_PASSIVI
where pg_caricamento = lPgUltimoCaricamento
) loop
begin
-- Punto di ritorno
savepoint altro_impegno;
lContatore := lContatore + 1;
gMsgLog := 'Impossibile recuperare il progressivo per l''impegno ';
ibmutl200.logInf(gPgLog ,'Processando residuo Passivo num '|| lContatore ||' Esercizio = '|| lResiduoPasSci.ESERCIZIO || ' - Appart = ' || lResiduoPasSci.TI_APPARTENENZA || ' - Gest = '|| lResiduoPasSci.TI_GESTIONE || ' - voce = ' || lResiduoPasSci.CD_VOCE || ' - Progressivo = ' || lResiduoPasSci.PG_CARICAMENTO, '', '');
-- Recuperiamo il progressivo dell'obbligazione che deve essere inserita
select nvl(max(substr(to_char(pg_obbligazione),5,6)),0) + 1
into lPgObbIniziale
from obbligazione
where cd_Cds = lCds.cd_unita_organizzativa
and esercizio=gcEsercizio
and cd_tipo_documento_cont = CNRCTB018.TI_DOC_IMP
and riportato = 'Y'
and substr(to_char(pg_obbligazione),1,4) = lResiduoPasSci.esercizio
and esercizio_originale = lResiduoPasSci.esercizio;
-- Numero dei Impegni residui inserti in OBBLIGAZIONE
lNumResiduiPasSci := lNumResiduiPasSci + 1;
-- Recuperiamo l'elemento voce = cd_titolo_capitolo della tabella VOCE_F
gMsgLog := 'Voce finanziaria , cd_voce = ' || lResiduoPasSci.cd_voce || ' ti_appartenenza = ' || lResiduoPasSci.ti_appartenenza || ' ti_gestione = ' || lResiduoPasSci.ti_gestione || ' esercizio = ' || gcEsercizio || ' non trovata';
select cd_titolo_capitolo
into lCdTitoloCapitolo
from voce_f
where ESERCIZIO = gcEsercizio
and ti_appartenenza = lResiduoPasSci.ti_appartenenza
and ti_gestione = lResiduoPasSci.ti_gestione
and CD_VOCE = lResiduoPasSci.cd_voce
and fl_mastrino ='Y';
gMsgLog := 'Elemento Voce , cd_elemento_voce = ' || lCdTitoloCapitolo || ' ti_appartenenza = ' || lResiduoPasSci.ti_appartenenza || ' ti_gestione = ' || lResiduoPasSci.ti_gestione || ' esercizio = ' || gcEsercizio || ' non trovato';
select *
into lElemVoce
from elemento_voce
where ESERCIZIO = gcEsercizio
and ti_appartenenza = lResiduoPasSci.ti_appartenenza
and ti_gestione = lResiduoPasSci.ti_gestione
and cd_elemento_voce = lCdTitoloCapitolo;
lPgObbligazione := to_number(to_char(lResiduoPasSci.esercizio) || lpad(to_char(lPgObbIniziale ),6,'0'));
lImpegno.CD_CDS := lCds.cd_unita_organizzativa;
lImpegno.ESERCIZIO := gcEsercizio;
lImpegno.ESERCIZIO_ORIGINALE := lResiduoPasSci.esercizio;
lImpegno.PG_OBBLIGAZIONE := lPgObbligazione;
lImpegno.CD_TIPO_DOCUMENTO_CONT := CNRCTB018.TI_DOC_IMP;
lImpegno.CD_UNITA_ORGANIZZATIVA := lUo.cd_unita_organizzativa;
lImpegno.CD_CDS_ORIGINE := substr(lResiduoPasSci.cd_uo_origine,1,3);
lImpegno.CD_UO_ORIGINE := lResiduoPasSci.cd_uo_origine;
lImpegno.CD_TIPO_OBBLIGAZIONE := NULL;
lImpegno.TI_APPARTENENZA := lResiduoPasSci.TI_APPARTENENZA;
lImpegno.TI_GESTIONE := lResiduoPasSci.TI_GESTIONE;
lImpegno.CD_ELEMENTO_VOCE := lElemVoce.cd_elemento_voce; --- ?????????????
lImpegno.DT_REGISTRAZIONE := to_date('0101'||gcEsercizioDest,'ddmmyyyy');
lImpegno.DS_OBBLIGAZIONE := 'IMPEGNO RESIDUO DA MIGRAZIONE';
lImpegno.NOTE_OBBLIGAZIONE := NULL;
lImpegno.CD_TERZO := lCdTerzo;
lImpegno.IM_OBBLIGAZIONE := lResiduoPasSci.IM_RESIDUO;
lImpegno.IM_COSTI_ANTICIPATI := 0;
lImpegno.ESERCIZIO_COMPETENZA := gcEsercizio;
lImpegno.STATO_OBBLIGAZIONE := 'D';
lImpegno.DT_CANCELLAZIONE := NULL;
lImpegno.CD_RIFERIMENTO_CONTRATTO := NULL;
lImpegno.DT_SCADENZA_CONTRATTO := NULL;
lImpegno.FL_CALCOLO_AUTOMATICO := 'N';
lImpegno.CD_FONDO_RICERCA := NULL;
lImpegno.FL_SPESE_COSTI_ALTRUI := 'N';
lImpegno.FL_PGIRO := lElemVoce.FL_PARTITA_GIRO;
lImpegno.RIPORTATO := 'N';
lImpegno.DACR := lDataMigrazione;
lImpegno.UTCR := cgUtente;
lImpegno.DUVA := lDataMigrazione;
lImpegno.UTUV := cgUtente;
lImpegno.PG_VER_REC := 1;
lImpegno.CD_CDS_ORI_RIPORTO := NULL;
lImpegno.ESERCIZIO_ORI_RIPORTO := NULL;
lImpegno.ESERCIZIO_ORI_ORI_RIPORTO := NULL;
lImpegno.PG_OBBLIGAZIONE_ORI_RIPORTO := NULL;
lImpegnoScad.CD_CDS := lCds.cd_unita_organizzativa;
lImpegnoScad.ESERCIZIO := lImpegno.ESERCIZIO;
lImpegnoScad.ESERCIZIO_ORIGINALE := lImpegno.ESERCIZIO_ORIGINALE;
lImpegnoScad.PG_OBBLIGAZIONE := lImpegno.PG_OBBLIGAZIONE;
lImpegnoScad.PG_OBBLIGAZIONE_SCADENZARIO := 1;
lImpegnoScad.DT_SCADENZA := to_Date('3112'||gcEsercizio,'ddmmyyyy');
lImpegnoScad.DS_SCADENZA := 'SCADENZA UNICA PER RESIDUO DI MIGRAZIONE';
lImpegnoScad.IM_SCADENZA := lImpegno.IM_OBBLIGAZIONE;
lImpegnoScad.IM_ASSOCIATO_DOC_AMM := 0;
lImpegnoScad.IM_ASSOCIATO_DOC_CONTABILE := 0;
lImpegnoScad.DACR := lDataMigrazione;
lImpegnoScad.UTCR := cgUtente;
lImpegnoScad.DUVA := lDataMigrazione;
lImpegnoScad.UTUV := cgUtente;
lImpegnoScad.PG_VER_REC := 1;
lImpegnoScadVoce.CD_CDS := lCds.cd_unita_organizzativa;
lImpegnoScadVoce.ESERCIZIO := lImpegno.ESERCIZIO;
lImpegnoScadVoce.ESERCIZIO_ORIGINALE := lImpegno.ESERCIZIO_ORIGINALE;
lImpegnoScadVoce.PG_OBBLIGAZIONE := lImpegno.PG_OBBLIGAZIONE;
lImpegnoScadVoce.PG_OBBLIGAZIONE_SCADENZARIO := lImpegnoScad.PG_OBBLIGAZIONE_SCADENZARIO;
lImpegnoScadVoce.TI_APPARTENENZA := lResiduoPasSci.TI_APPARTENENZA;
lImpegnoScadVoce.TI_GESTIONE := lResiduoPasSci.TI_GESTIONE;
lImpegnoScadVoce.CD_VOCE := lResiduoPasSci.cd_voce;
lImpegnoScadVoce.CD_CENTRO_RESPONSABILITA := lCdr.cd_centro_Responsabilita;
lImpegnoScadVoce.CD_LINEA_ATTIVITA := CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE);
lImpegnoScadVoce.IM_VOCE := lImpegno.IM_OBBLIGAZIONE;
lImpegnoScadVoce.CD_FONDO_RICERCA := NULL;
lImpegnoScadVoce.DACR := lDataMigrazione;
lImpegnoScadVoce.UTCR := cgUtente;
lImpegnoScadVoce.DUVA := lDataMigrazione;
lImpegnoScadVoce.UTUV := cgUtente;
lImpegnoScadVoce.PG_VER_REC := 1;
-- La funzione ChkObbligazione controlla se l'impegno che vogliamo inserire
-- risulta gia presente, il controllo viene fatto in base all'easercizio
-- del residuo sci e al cd_voce.
-- Se l'impegno risulta gia inserito questo viene opportunamente modificato
if not ChkObbligazione(lImpegno,lResiduoPasSci,lDataMigrazione) then
cnrctb035.INS_OBBLIGAZIONE(lImpegno);
cnrctb035.INS_OBBLIGAZIONE_SCADENZARIO(lImpegnoScad);
cnrctb035.INS_OBBLIGAZIONE_SCAD_VOCE(lImpegnoScadVoce);
else
begin
gMsgLog := 'Impossibile recuperare l''imegno precedentemente migrato, cd_voce' || lResiduoPasSci.cd_voce;
-- Recuperiamo eventuale imegno gia inserito nel gcEsercizio
-- esercizio in cui e stato generato l'imegno = aResiduoSci.esercizio
-- l'impegno originale del 2002 se generato ha il pg_obbligazione= xxxxyyyyyy
-- dove xxxx=aResiduoSci.esercizio
select *
into lImpegno
from obbligazione
where (cd_cds, esercizio,esercizio_originale,pg_obbligazione) in
(select cd_cds, esercizio,esercizio_originale,pg_obbligazione
from obbligazione_scad_voce
where length(to_char(pg_obbligazione)) = 10
and esercizio = gcEsercizio
and esercizio_originale = lResiduoPasSci.esercizio
and substr(to_char(pg_obbligazione),1,4) = lResiduoPasSci.esercizio
and ti_appartenenza = lResiduoPasSci.ti_appartenenza
and ti_gestione = lResiduoPasSci.ti_gestione
and cd_voce = lResiduoPasSci.cd_voce);
exception when no_Data_found then
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end;
end if;
crea_residuo_passivo(lImpegno,lResiduoPasSci,lDataMigrazione);
exception when no_data_found then
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
-- when others then
-- ibmutl200.logInf(gPgLog ,'residuo origine Esercizio'|| lResiduoPasSci.esercizio || ' voce '|| lResiduoPasSci.cd_voce || ' - ' || sqlerrm (sqlcode), '', '');
-- lNumResiduiPasSci := lNumResiduiPasSci - 1;
-- rollback to savepoint altro_impegno;
end;
end loop;
-- Cancelliamo i residui attivi
SetResiduiPassiviCanc(lDataMigrazione);
end;
-- Questa funzione controlla se un residuo proveniente da SCI
-- risulta gia stato inserito come IMPEGNO in CIR
function ChkObbligazione(aImpegno in out obbligazione%rowtype, aResiduoSci cnr_residui_passivi%rowtype, aSysdate date) return boolean is
lImpegnoOld obbligazione%rowtype;
lScad obbligazione_scadenzario%rowtype;
lScadVoce obbligazione_scad_voce%rowtype;
lScad2003 obbligazione_scadenzario%rowtype;
lVoceF voce_f%rowtype;
lGiaAssociato boolean;
lGiaInserito boolean;
lDelta number(15,2);
lTipoModifica number;
begin
begin
-- Recuperiamo eventuale imegno gia inserito nel gcEsercizio
-- esercizio in cui e stato generato l'imegno = aResiduoSci.esercizio
-- l'impegno originale del 2002 se generato ha il pg_obbligazione= xxxxyyyyyy
-- dove xxxx=aResiduoSci.esercizio
select *
into lImpegnoOld
from obbligazione
where (cd_cds, esercizio, esercizio_originale, pg_obbligazione)
in (select cd_cds, esercizio, esercizio_originale, pg_obbligazione
from obbligazione_scad_voce
where length(to_char(pg_obbligazione)) = 10
and esercizio = gcEsercizio
and esercizio_originale = aResiduoSci.esercizio
and substr(to_char(pg_obbligazione),1,4) = aResiduoSci.esercizio
and ti_appartenenza = aResiduoSci.ti_appartenenza
and ti_gestione = aResiduoSci.ti_gestione
and cd_voce = aResiduoSci.cd_voce);
lGiaInserito:=true;
exception when no_Data_found then
lGiaInserito:=false;
end;
begin
if lGiaInserito then
-- Controlliamo se impegno risulta
-- associato a documenti amministrativi e recuperiamo la sua scadenza
ObbligazioneAssDocAmm(lImpegnoOld, lScad, lGiaAssociato);
----------------------------------------------------------------------
-- Identificare il tipo di eventuale cambiamento del residuo --
----------------------------------------------------------------------
-- Tipo Cambio 2 : Importo diverso nuovo > vecchio
-- Tipo Cambio 3 : Importo diverso nuovo < vecchio
lTipoModifica :=0;
if aImpegno.IM_OBBLIGAZIONE > lImpegnoOld.IM_OBBLIGAZIONE then
lTipoModifica := 2;
end if;
if aImpegno.IM_OBBLIGAZIONE < lImpegnoOld.IM_OBBLIGAZIONE then
lTipoModifica := 3;
end if;
-- Condizioni di arresto del riporto.
if lTipoModifica = 0 then
gMsgLog := 'Impegno non risulta in nessun modo cambiato dal precedente riporto, pg_obbligazione' || to_char(lImpegnoOld.pg_obbligazione);
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
if lTipoModifica = 2 then
-- Siamo nel caso in cui stiamo inserendo un impegno residuo
-- che risulta gia inserito nella tabella OBBLIGAZIONE. Quindi
-- siccome risulta cambiato l'importo dell'impegno occorre
-- seguire il seguente algoritmo :
-- Importo imegno NUOVO (che vogliamo inserire) risulta
-- MAGGIORE dell'imimpegno Principale
-- (gia presente nella tabella esercizio) in questo caso =>
-- viene modificato l'importo relativo alla scadenza
-- Impostiamo i dati della scadenza libera
lScad.IM_SCADENZA := aImpegno.IM_OBBLIGAZIONE;
lScad.DUVA := aSysdate;
lScad.UTUV := cgUtente;
lScad.PG_VER_REC := lScad.PG_VER_REC + 1;
-- Recuperiamo il dettaglio voce associato alla scadenza
select *
into lScadVoce
from obbligazione_scad_voce asv
where asv.CD_CDS = lScad.cd_cds
and asv.ESERCIZIO = lScad.esercizio
and asv.ESERCIZIO_ORIGINALE = lScad.esercizio_originale
and asv.PG_OBBLIGAZIONE = lScad.pg_obbligazione
and asv.pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScad.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Impegno Originario
update obbligazione
set im_obbligazione = aImpegno.im_obbligazione
,utuv = cgUtente
,duva = aSysdate
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lImpegnoOld.cd_cds
and esercizio = lImpegnoOld.esercizio
and esercizio_originale = lImpegnoOld.esercizio_originale
and pg_obbligazione = lImpegnoOld.pg_obbligazione;
-- Aggiornamento scadenza Originaria
update obbligazione_scadenzario
set IM_SCADENZA = lScad.IM_SCADENZA
,DUVA = lScad.DUVA
,UTUV = lScad.UTUV
,PG_VER_REC = lScad.PG_VER_REC
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Aggiornamento scadenza voce Originaria
update obbligazione_scad_voce
set IM_VOCE = lScadVoce.IM_VOCE
,DUVA = lScadVoce.DUVA
,UTUV = lScadVoce.UTUV
,PG_VER_REC = lScadVoce.PG_VER_REC
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario
and ti_appartenenza = lScadVoce.ti_appartenenza
and ti_gestione = lScadVoce.ti_gestione
and cd_voce = lScadVoce.cd_voce
and cd_centro_responsabilita = lScadVoce.cd_centro_responsabilita
and cd_linea_attivita = lScadVoce.cd_linea_attivita;
end if; --lTipoModifica = 2
if lTipoModifica = 3 then
-- Siamo nel caso in cui stiamo inserendo un accertamento residuo
-- che risulta gia inserito nella tabella OBBLIGAZIONE. Quindi
-- siccome risulta cambiato l'importo dell'accertamento occorre
-- seguire il seguente algoritmo :
-- Importo imegno NUOVO (che vogliamo inserire) risulta
-- minore dell'importo dell'impegno Principale
-- (gia presente nella tabella) in questo caso =>
-- viene modificato l'importo relativo alla scadenza
-- se e salo se resulta
-- (IM_SCADENZA-IM_ASSOCIATO_DOC_AMM)=> (lImpegnoOld.IM_OBBLIGAZIONE - aImpegno.IM_OBBLIGAZIONE )
-- Recuperiamo l'importo della scadenza dell'impegno residuo relativo
-- al 2003
-- Recuperiamo il dettaglio voce associato alla scadenza
select *
into lScad2003
from obbligazione_scadenzario asv
where asv.CD_CDS = lImpegnoOld.cd_cds
and asv.ESERCIZIO = gcEsercizioDest
and asv.ESERCIZIO_ORIGINALE = lImpegnoOld.esercizio_originale
and asv.PG_OBBLIGAZIONE = lImpegnoOld.pg_obbligazione;
if lScad2003.im_associato_doc_amm <= aImpegno.IM_OBBLIGAZIONE then
-- Impostiamo i dati della scadenza
lScad.IM_SCADENZA := aImpegno.IM_OBBLIGAZIONE;
lScad.DUVA := aSysdate;
lScad.UTUV := cgUtente;
lScad.PG_VER_REC := lScad.PG_VER_REC + 1;
-- Recuperiamo il dettaglio voce associato alla scadenza
select *
into lScadVoce
from obbligazione_scad_voce asv
where asv.CD_CDS = lScad.cd_cds
and asv.ESERCIZIO = lScad.esercizio
and asv.ESERCIZIO_ORIGINALE = lScad.esercizio_originale
and asv.PG_OBBLIGAZIONE = lScad.pg_obbligazione
and asv.pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScad.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Accertamento, scadenza, voce
update obbligazione
set im_obbligazione = aImpegno.im_obbligazione
,utuv = cgUtente
,duva = aSysdate
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lImpegnoOld.cd_cds
and esercizio = lImpegnoOld.esercizio
and esercizio_originale = lImpegnoOld.esercizio_originale
and pg_obbligazione = lImpegnoOld.pg_obbligazione;
-- Aggiornamento scadenza
update obbligazione_scadenzario
set IM_SCADENZA = lScad.IM_SCADENZA
,DUVA = lScad.DUVA
,UTUV = lScad.UTUV
,PG_VER_REC = PG_VER_REC + 1
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Aggiornamento scadenza voce
update obbligazione_scad_voce
set IM_VOCE = lScadVoce.IM_VOCE
,DUVA = lScadVoce.DUVA
,UTUV = lScadVoce.UTUV
,PG_VER_REC = PG_VER_REC + 1
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
else
gMsgLog := 'Impossibile modificare impegno ' || to_char(lImpegnoOld.pg_obbligazione) || ' importo residuo disponibile troppo basso';
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
end if; --lTipoModifica = 3
-- In questo caso l'impegno risulta gia inserito precedentemente
-- Inoltre risulta (se le condizioni lo permettono) modificato in importo
return TRUE;
else --Non presente
-- In questo caso l'accertamento risulta essere mai stato inserito
-- precedentemente.
return FALSE;
end if;
end;
end ChkObbligazione;
procedure crea_residuo_passivo (aImpegno obbligazione%rowtype
,aResiduoSci cnr_residui_passivi%rowtype
,aSysdate date) is
lImpegnoResiduo obbligazione%rowtype;
lDelta number (15,2);
begin
lImpegnoResiduo.CD_CDS := aImpegno.CD_CDS;
lImpegnoResiduo.ESERCIZIO := gcEsercizioDest;
lImpegnoResiduo.ESERCIZIO_ORIGINALE := aImpegno.ESERCIZIO_ORIGINALE;
lImpegnoResiduo.PG_OBBLIGAZIONE := aImpegno.PG_OBBLIGAZIONE;
lImpegnoResiduo.CD_TIPO_DOCUMENTO_CONT := cnrctb018.TI_DOC_IMP_RES;
lImpegnoResiduo.CD_UNITA_ORGANIZZATIVA := aImpegno.CD_UNITA_ORGANIZZATIVA;
lImpegnoResiduo.CD_CDS_ORIGINE := aImpegno.CD_CDS_ORIGINE;
lImpegnoResiduo.CD_UO_ORIGINE := aImpegno.CD_UO_ORIGINE;
lImpegnoResiduo.CD_TIPO_OBBLIGAZIONE := aImpegno.CD_TIPO_OBBLIGAZIONE;
lImpegnoResiduo.TI_APPARTENENZA := aImpegno.TI_APPARTENENZA;
lImpegnoResiduo.TI_GESTIONE := aImpegno.TI_GESTIONE;
lImpegnoResiduo.CD_ELEMENTO_VOCE := aImpegno.CD_ELEMENTO_VOCE;
lImpegnoResiduo.DT_REGISTRAZIONE := aImpegno.DT_REGISTRAZIONE;
lImpegnoResiduo.DS_OBBLIGAZIONE := aImpegno.DS_OBBLIGAZIONE;
lImpegnoResiduo.NOTE_OBBLIGAZIONE := aImpegno.NOTE_OBBLIGAZIONE;
lImpegnoResiduo.CD_TERZO := aImpegno.CD_TERZO;
lImpegnoResiduo.IM_OBBLIGAZIONE := aImpegno.IM_OBBLIGAZIONE;
lImpegnoResiduo.IM_COSTI_ANTICIPATI := aImpegno.IM_COSTI_ANTICIPATI;
lImpegnoResiduo.ESERCIZIO_COMPETENZA := gcEsercizioDest;
lImpegnoResiduo.STATO_OBBLIGAZIONE := aImpegno.STATO_OBBLIGAZIONE;
lImpegnoResiduo.DT_CANCELLAZIONE := aImpegno.DT_CANCELLAZIONE;
lImpegnoResiduo.CD_RIFERIMENTO_CONTRATTO := aImpegno.CD_RIFERIMENTO_CONTRATTO;
lImpegnoResiduo.DT_SCADENZA_CONTRATTO := aImpegno.DT_SCADENZA_CONTRATTO;
lImpegnoResiduo.FL_CALCOLO_AUTOMATICO := aImpegno.FL_CALCOLO_AUTOMATICO;
lImpegnoResiduo.CD_FONDO_RICERCA := aImpegno.CD_FONDO_RICERCA;
lImpegnoResiduo.FL_SPESE_COSTI_ALTRUI := aImpegno.FL_SPESE_COSTI_ALTRUI;
lImpegnoResiduo.FL_PGIRO := aImpegno.FL_PGIRO;
lImpegnoResiduo.RIPORTATO := 'N';
lImpegnoResiduo.DACR := aImpegno.DACR;
lImpegnoResiduo.UTCR := aImpegno.UTCR;
lImpegnoResiduo.DUVA := aSysdate;
lImpegnoResiduo.UTUV := cgUtente;
lImpegnoResiduo.PG_VER_REC := 1;
lImpegnoResiduo.CD_CDS_ORI_RIPORTO := aImpegno.CD_CDS;
lImpegnoResiduo.ESERCIZIO_ORI_RIPORTO := aImpegno.ESERCIZIO;
lImpegnoResiduo.ESERCIZIO_ORI_ORI_RIPORTO := aImpegno.ESERCIZIO_ORIGINALE;
lImpegnoResiduo.PG_OBBLIGAZIONE_ORI_RIPORTO := aImpegno.PG_OBBLIGAZIONE;
-- PreparaScadResiduoPas(lImpegnoResiduo, aUtente, aSysdate);
ChkPresenzaResiduoPas (lImpegnoResiduo, aSysdate, lDelta);
-- Aggiorniamo l'impegno
update obbligazione
set riportato = 'Y'
,duva = aSysdate
,utuv = cgUtente
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = aImpegno.cd_cds
and esercizio = aImpegno.esercizio
and esercizio_originale = aImpegno.esercizio_originale
and pg_obbligazione = aImpegno.pg_obbligazione;
-- Aggiornare voce_f_saldi_cmp
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr + lDelta,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr + lDelta,
utuv = lImpegnoResiduo.utuv,
duva = lImpegnoResiduo.duva,
pg_ver_rec = pg_ver_rec + 1
where esercizio = lImpegnoResiduo.esercizio
and cd_cds = lImpegnoResiduo.cd_cds
and ti_appartenenza = lImpegnoResiduo.ti_appartenenza
and ti_gestione = lImpegnoResiduo.ti_gestione
and cd_voce = aResiduoSci.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
end ;
-- Controlla se il residuo passivo risulta gia inserito
procedure ChkPresenzaResiduoPas(aImpegnoResiduo obbligazione%rowtype, aSysdate date, aDelta in out number) is
lImpegnoResiduoPre obbligazione%rowtype;
lScad obbligazione_scadenzario%rowtype;
lScadVoce obbligazione_scad_voce%rowtype;
lGiaAssociato boolean;
lGiaInserito boolean;
lTrovataScadenza boolean;
lTipoModifica number;
begin
aDelta := 0;
begin
select *
into lImpegnoResiduoPre
from obbligazione obb
where obb.CD_CDS = aImpegnoResiduo.CD_CDS
and obb.ESERCIZIO = gcEsercizioDest
and obb.ESERCIZIO_ORIGINALE = aImpegnoResiduo.ESERCIZIO_ORIGINALE
and obb.PG_OBBLIGAZIONE = aImpegnoResiduo.PG_OBBLIGAZIONE
for update nowait;
lGiaInserito := TRUE;
exception when no_data_found then
lGiaInserito := FALSE;
end ;
begin
if lGiaInserito then
-- Controlliamo se impegno risulta
-- associato a documenti amministrativi e recuperiamo la sua scadenza
ObbligazioneAssDocAmm(lImpegnoResiduoPre, lScad, lGiaAssociato);
----------------------------------------------------------------------
-- Identificare il tipo di eventuale cambiamento del residuo --
----------------------------------------------------------------------
-- Tipo Cambio 2 : Importo diverso nuovo > vecchio
-- Tipo Cambio 3 : Importo diverso nuovo < vecchio
lTipoModifica :=0;
if aImpegnoResiduo.IM_OBBLIGAZIONE > lImpegnoResiduoPre.IM_OBBLIGAZIONE then
lTipoModifica := 2;
end if;
if aImpegnoResiduo.IM_OBBLIGAZIONE < lImpegnoResiduoPre.IM_OBBLIGAZIONE then
lTipoModifica := 3;
end if;
-- Condizioni di arresto del riporto.
if lTipoModifica = 0 then
gMsgLog := 'Impegno non risulta in nessun modo cambiato dal precedente riporto, pg_obbligazione' || to_char(lImpegnoResiduoPre.pg_obbligazione);
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
if lTipoModifica = 2 then
-- Siamo nel caso in cui stiamo inserendo un impegno residuo
-- che risulta gia inserito nella tabella OBBLIGAZIONE. Quindi
-- siccome risulta cambiato l'importo dell'impegno occorre
-- seguire il seguente algoritmo :
-- Importo imegno NUOVO (che vogliamo inserire) risulta
-- MAGGIORE dell'imimpegno Principale
-- (gia presente nella tabella esercizio) in questo caso =>
-- viene modificato l'importo relativo alla scadenza
-- Impostiamo i dati della scadenza libera
lScad.IM_SCADENZA := aImpegnoResiduo.IM_OBBLIGAZIONE;
lScad.DUVA := aSysdate;
lScad.UTUV := cgUtente;
lScad.PG_VER_REC := lScad.PG_VER_REC + 1;
-- Recuperiamo il dettaglio voce associato alla scadenza
select *
into lScadVoce
from obbligazione_scad_voce asv
where asv.CD_CDS = lScad.cd_cds
and asv.ESERCIZIO = lScad.esercizio
and asv.ESERCIZIO_ORIGINALE = lScad.esercizio_originale
and asv.PG_OBBLIGAZIONE = lScad.pg_obbligazione
and asv.pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScad.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Impegno Originario
update obbligazione
set im_obbligazione = aImpegnoResiduo.im_obbligazione
,utuv = cgUtente
,duva = aSysdate
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lImpegnoResiduoPre.cd_cds
and esercizio = lImpegnoResiduoPre.esercizio
and esercizio_originale = lImpegnoResiduoPre.esercizio_originale
and pg_obbligazione = lImpegnoResiduoPre.pg_obbligazione;
-- Aggiornamento scadenza Originaria
update obbligazione_scadenzario
set IM_SCADENZA = lScad.IM_SCADENZA
,DUVA = lScad.DUVA
,UTUV = lScad.UTUV
,PG_VER_REC = lScad.PG_VER_REC
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Aggiornamento scadenza voce Originaria
update obbligazione_scad_voce
set IM_VOCE = lScadVoce.IM_VOCE
,DUVA = lScadVoce.DUVA
,UTUV = lScadVoce.UTUV
,PG_VER_REC = lScadVoce.PG_VER_REC
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario
and ti_appartenenza = lScadVoce.ti_appartenenza
and ti_gestione = lScadVoce.ti_gestione
and cd_voce = lScadVoce.cd_voce
and cd_centro_responsabilita = lScadVoce.cd_centro_responsabilita
and cd_linea_attivita = lScadVoce.cd_linea_attivita;
aDelta := aImpegnoResiduo.IM_OBBLIGAZIONE - lImpegnoResiduoPre.IM_OBBLIGAZIONE;
end if; --lTipoModifica = 2
if lTipoModifica = 3 then
-- Siamo nel caso in cui stiamo inserendo un accertamento residuo
-- che risulta gia inserito nella tabella OBBLIGAZIONE. Quindi
-- siccome risulta cambiato l'importo dell'accertamento occorre
-- seguire il seguente algoritmo :
-- Importo imegno NUOVO (che vogliamo inserire) risulta
-- minore dell'importo dell'impegno Principale
-- (gia presente nella tabella) in questo caso =>
-- viene modificato l'importo relativo alla scadenza
-- se e salo se resulta
-- (IM_SCADENZA-IM_ASSOCIATO_DOC_AMM)=> (lImpegnoResiduoPre.IM_OBBLIGAZIONE - aImpegnoResiduo.IM_OBBLIGAZIONE )
if lScad.im_associato_doc_amm <= aImpegnoResiduo.IM_OBBLIGAZIONE then
-- Impostiamo i dati della scadenza
lScad.IM_SCADENZA := aImpegnoResiduo.IM_OBBLIGAZIONE;
lScad.DUVA := aSysdate;
lScad.UTUV := cgUtente;
lScad.PG_VER_REC := lScad.PG_VER_REC + 1;
-- Recuperiamo il dettaglio voce associato alla scadenza
select *
into lScadVoce
from obbligazione_scad_voce asv
where asv.CD_CDS = lScad.cd_cds
and asv.ESERCIZIO = lScad.esercizio
and asv.ESERCIZIO_ORIGINALE = lScad.esercizio_originale
and asv.PG_OBBLIGAZIONE = lScad.pg_obbligazione
and asv.pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScad.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Accertamento, scadenza, voce
update obbligazione
set im_obbligazione = aImpegnoResiduo.im_obbligazione
,utuv = cgUtente
,duva = aSysdate
,pg_ver_rec = PG_VER_REC + 1
where cd_cds = lImpegnoResiduoPre.cd_cds
and esercizio = lImpegnoResiduoPre.esercizio
and esercizio_originale = lImpegnoResiduoPre.esercizio_originale
and pg_obbligazione = lImpegnoResiduoPre.pg_obbligazione;
-- Aggiornamento scadenza
update obbligazione_scadenzario
set IM_SCADENZA = lScad.IM_SCADENZA
,DUVA = lScad.DUVA
,UTUV = lScad.UTUV
,PG_VER_REC = PG_VER_REC + 1
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
-- Aggiornamento scadenza voce
update obbligazione_scad_voce
set IM_VOCE = lScadVoce.IM_VOCE
,DUVA = lScadVoce.DUVA
,UTUV = lScadVoce.UTUV
,PG_VER_REC = PG_VER_REC + 1
where cd_cds = lScad.cd_cds
and esercizio = lScad.esercizio
and esercizio_originale = lScad.esercizio_originale
and pg_obbligazione = lScad.pg_obbligazione
and pg_obbligazione_scadenzario = lScad.pg_obbligazione_scadenzario;
aDelta := aImpegnoResiduo.IM_OBBLIGAZIONE - lImpegnoResiduoPre.IM_OBBLIGAZIONE;
else
gMsgLog := 'Impossibile modificare impegno ' || to_char(lImpegnoResiduoPre.pg_obbligazione) || ' importo residuo disponibile troppo basso';
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
aDelta := 0;
end if;
end if; --lTipoModifica = 3
-- In questo caso l'impegno risulta gia inserito precedentemente
-- Inoltre risulta (se le condizioni lo permettono) modificato in importo
-- return TRUE;
else --Non presente
PreparaScadResiduoPas(aImpegnoResiduo, aSysdate);
aDelta := aImpegnoResiduo.IM_OBBLIGAZIONE;
end if;
end;
end ChkPresenzaResiduoPas;
procedure PreparaScadResiduoPas (aImpegnoResiduo obbligazione%rowtype, aSysdate date) IS
lScadLibera obbligazione_scadenzario%rowtype;
lScadVoce obbligazione_scad_voce%rowtype;
lNuovoImporto number(15,2);
begin
-- Recuperiamo la prima scadenza libera
lScadLibera := GetScadResPas(aImpegnoResiduo);
-- Impostiamo i dati della scadenza libera
lScadLibera.IM_SCADENZA := lScadLibera.IM_SCADENZA + (aImpegnoResiduo.IM_OBBLIGAZIONE);
lScadLibera.DUVA := aSysdate;
lScadLibera.UTUV := cgUtente;
lScadLibera.PG_VER_REC := lScadLibera.PG_VER_REC + 1;
-- Recuperiamo il dettaglio voce associato alla scadenza
lScadVoce := GetScadResPasVoce(lScadLibera, gcEsercizio);
-- Impostiamo i dati del dettaglio voce
lScadVoce.IM_VOCE := lScadLibera.IM_SCADENZA;
lScadVoce.DUVA := aSysdate;
lScadVoce.UTUV := cgUtente;
lScadVoce.PG_VER_REC := lScadVoce.PG_VER_REC + 1;
-- Aggiornamento Accertamento, scadenza
cnrctb035.INS_OBBLIGAZIONE(aImpegnoResiduo);
cnrctb035.INS_OBBLIGAZIONE_SCADENZARIO(lScadLibera);
cnrctb035.INS_OBBLIGAZIONE_SCAD_VOCE(lScadVoce);
end;
procedure ObbligazioneAssDocAmm(aObb obbligazione%rowtype,aObbScadenzario in out obbligazione_scadenzario%rowtype, aAssociato in out boolean) is
lPgObb obbligazione.PG_OBBLIGAZIONE%type;
begin
-- Controlliamo se il residuo risulta associato a documenti
-- amministrativi
begin
select *
into aObbScadenzario
from obbligazione_scadenzario scad
where scad.CD_CDS = aObb.CD_CDS
and scad.ESERCIZIO = aObb.ESERCIZIO
and scad.ESERCIZIO_ORIGINALE = aObb.ESERCIZIO_ORIGINALE
and scad.PG_OBBLIGAZIONE = aObb.PG_OBBLIGAZIONE;
exception when no_Data_found then
aAssociato := false;
end;
if (aObbScadenzario.im_associato_doc_amm >0) then
aAssociato := true;
else
aAssociato := false;
end if;
end ObbligazioneAssDocAmm;
-- Questa funzione ritorna la prima scadenza di obbligazione non associata a
-- documenti amministrativi,
-- nel caso in cui non trova scadenze associate all'obbligazione passatagli,
-- ristorna una scadenza nuova per l'obbligazione in esame.
function GetScadResPas(aResiduo obbligazione%rowtype) return obbligazione_Scadenzario%rowtype is
lScadenzaLibera obbligazione_Scadenzario%rowtype;
lPgScadenza number;
begin
select *
into lScadenzaLibera
from obbligazione_scadenzario
where cd_cds = aResiduo.cd_cds
and esercizio = aResiduo.esercizio
and esercizio_originale = aResiduo.esercizio_originale
and pg_obbligazione = aResiduo.pg_obbligazione
for update nowait;
return lScadenzaLibera;
exception when no_Data_found then
-- creazione di una scadenza nuova Libera
select nvl(max(pg_obbligazione_scadenzario),0) +1
into lPgScadenza
from obbligazione_scadenzario
where cd_cds = aResiduo.cd_cds
and esercizio = aResiduo.esercizio
and esercizio_originale = aResiduo.esercizio_originale
and pg_obbligazione = aResiduo.pg_obbligazione;
lScadenzaLibera.CD_CDS := aResiduo.cd_Cds;
lScadenzaLibera.ESERCIZIO := aResiduo.esercizio;
lScadenzaLibera.ESERCIZIO_ORIGINALE := aResiduo.esercizio_originale;
lScadenzaLibera.PG_OBBLIGAZIONE := aResiduo.pg_obbligazione;
lScadenzaLibera.PG_OBBLIGAZIONE_SCADENZARIO := lPgScadenza;
lScadenzaLibera.DT_SCADENZA := trunc(to_date('3112'||gcEsercizioDest,'ddmmyyyy')) ; -- chiedere
lScadenzaLibera.DS_SCADENZA := 'Scadenza riporto';
lScadenzaLibera.IM_SCADENZA := 0;
lScadenzaLibera.IM_ASSOCIATO_DOC_AMM := 0;
lScadenzaLibera.IM_ASSOCIATO_DOC_CONTABILE := 0;
lScadenzaLibera.DACR := aResiduo.dacr;
lScadenzaLibera.UTCR := aResiduo.utcr;
lScadenzaLibera.DUVA := aResiduo.dacr;
lScadenzaLibera.UTUV := aResiduo.utcr;
lScadenzaLibera.PG_VER_REC := 0;
-- cnrctb035.INS_OBBLIGAZIONE_SCADENZARIO (lScadenzaLibera);
return lScadenzaLibera;
end;
function GetScadResPasVoce (aScad obbligazione_scadenzario%rowtype, aEsercizioObbPrincipale esercizio.ESERCIZIO%type) return obbligazione_scad_voce%rowtype is
lScadenzaVoce obbligazione_scad_voce%rowtype;
lCdVoce obbligazione_scad_voce.CD_VOCE%type;
aCdCdr varchar2(30);
aCdLa varchar2(10);
begin
select *
into lScadenzaVoce
from obbligazione_scad_voce asv
where asv.CD_CDS = aScad.cd_cds
and asv.ESERCIZIO = aScad.esercizio
and asv.ESERCIZIO_ORIGINALE = aScad.esercizio_originale
and asv.PG_OBBLIGAZIONE = aScad.pg_obbligazione
and asv.pg_obbligazione_scadenzario = aScad.pg_obbligazione_scadenzario
for update nowait;
return lScadenzaVoce;
exception when no_data_found then
-- configurare la linea attivita in configurazione CNR
aCdCdr :=CNRCTB015.GETVAL01PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE);
aCdLa :=CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE);
-- per individuare la voce_f si fa riferimento
-- all'obbligazione scadenza vece dell'esercizio precedente
select distinct cd_voce
into lCdVoce
from obbligazione_scad_voce
where CD_CDS = aScad.cd_Cds
and esercizio =aEsercizioObbPrincipale
and esercizio_originale = aScad.esercizio_originale
and pg_obbligazione = aScad.pg_obbligazione
and pg_obbligazione_scadenzario = aScad.pg_obbligazione_scadenzario
and ti_appartenenza = 'C'
and ti_gestione = 'S';
lScadenzaVoce.CD_CDS := aScad.cd_cds;
lScadenzaVoce.ESERCIZIO := aScad.esercizio;
lScadenzaVoce.ESERCIZIO_ORIGINALE := aScad.esercizio_originale;
lScadenzaVoce.PG_OBBLIGAZIONE := aScad.pg_obbligazione;
lScadenzaVoce.PG_obbligazione_scadenzario := aScad.pg_obbligazione_Scadenzario;
lScadenzaVoce.CD_CENTRO_RESPONSABILITA := aCdCdr; -- chiedere
lScadenzaVoce.CD_LINEA_ATTIVITA := aCdLa; -- chiedere
lScadenzaVoce.TI_APPARTENENZA := 'C';
lScadenzaVoce.TI_GESTIONE := 'S';
-- bisogna recuperare la voce
lScadenzaVoce.CD_VOCE := lCdVoce;
lScadenzaVoce.IM_VOCE := 0;
lScadenzaVoce.CD_FONDO_RICERCA := NULL;
lScadenzaVoce.DACR := aScad.dacr;
lScadenzaVoce.UTCR := aScad.utcr;
lScadenzaVoce.DUVA := aScad.dacr;
lScadenzaVoce.UTUV := aScad.utcr;
lScadenzaVoce.PG_VER_REC := 0;
-- cnrctb035.INS_OBBLIGAZIONE_SCAD_VOCE(lScadenzaVoce);
return lScadenzaVoce;
end;
procedure SetResiduiAttiviCanc(aData date ) is
lResiduiSci cnr_residui_Attivi%rowtype;
-- lResiduoCir accertamento%rowtype;
lAccertamento accertamento%rowtype;
lNumResCancellati number := 0;
contatore number :=0;
lGiaAssociato boolean;
lImAccertamento number(15,2);
lPgUltimoCaricamento number;
begin
-- Recuperiamo il pg_ultimo_caricamento SCI
select nvl(max(pg_caricamento),0)
into lPgUltimoCaricamento
from cnr_residui_attivi;
for lResiduoCir in (SELECT * FROM ACCERTAMENTO
WHERE length(to_char(pg_accertamento)) = 10
and cd_tipo_documento_cont = cnrctb018.TI_DOC_ACC_RES
and riportato ='N'
and esercizio = gcEsercizioDest
and dt_cancellazione is null
for update nowait ) loop
begin
select *
into lResiduiSci
from cnr_residui_Attivi
where cd_cds = lResiduoCir.cd_cds
and esercizio = to_number(substr(to_char(lResiduoCir.pg_accertamento),1,4))
and cd_unita_organizzativa = lResiduoCir.cd_unita_organizzativa
and cd_residuo = lResiduoCir.pg_accertamento_origine
and pg_caricamento = lPgUltimoCaricamento;
exception when no_data_found then
-- Cancellare Residuo 2003 associato
lNumResCancellati := lNumResCancellati + 1;
lGiaAssociato := ResiduoAttAssociato(lResiduoCir);
if not lGiaAssociato then
--Aggiorniamo residuo 2003
lImAccertamento := lResiduoCir.im_accertamento;
begin
delete accertamento
where cd_cds = lResiduoCir.cd_cds
and esercizio = lResiduoCir.esercizio
and esercizio_originale = lResiduoCir.esercizio_originale
and pg_Accertamento = lResiduoCir.pg_accertamento;
delete accertamento_s
where cd_cds = lResiduoCir.cd_cds
and esercizio = lResiduoCir.esercizio
and esercizio_originale = lResiduoCir.esercizio_originale
and pg_Accertamento = lResiduoCir.pg_accertamento;
delete accertamento_scadenzario_s
where cd_cds = lResiduoCir.cd_cds
and esercizio = lResiduoCir.esercizio
and esercizio_originale = lResiduoCir.esercizio_originale
and pg_Accertamento = lResiduoCir.pg_accertamento;
delete accertamento_scad_voce_s
where cd_cds = lResiduoCir.cd_cds
and esercizio = lResiduoCir.esercizio
and esercizio_originale = lResiduoCir.esercizio_originale
and pg_Accertamento = lResiduoCir.pg_accertamento;
--Aggiorniamo accertamento 2002
select *
into lAccertamento
from accertamento
where esercizio = lResiduoCir.esercizio_ori_riporto
and cd_cds = lResiduoCir.cd_cds_ori_riporto
and esercizio_originale = lResiduoCir.esercizio_ori_ori_riporto
and pg_accertamento = lResiduoCir.pg_accertamento_ori_riporto
for update nowait;
delete accertamento
where esercizio = lResiduoCir.esercizio_ori_riporto
and cd_cds = lResiduoCir.cd_cds_ori_riporto
and esercizio_originale = lResiduoCir.esercizio_ori_ori_riporto
and pg_accertamento = lResiduoCir.pg_accertamento_ori_riporto;
delete accertamento_s
where esercizio = lResiduoCir.esercizio_ori_riporto
and cd_cds = lResiduoCir.cd_cds_ori_riporto
and esercizio_originale = lResiduoCir.esercizio_ori_ori_riporto
and pg_accertamento = lResiduoCir.pg_accertamento_ori_riporto;
delete accertamento_scadenzario_s
where esercizio = lResiduoCir.esercizio_ori_riporto
and cd_cds = lResiduoCir.cd_cds_ori_riporto
and esercizio_originale = lResiduoCir.esercizio_ori_ori_riporto
and pg_accertamento = lResiduoCir.pg_accertamento_ori_riporto;
delete accertamento_scad_voce_s
where esercizio = lResiduoCir.esercizio_ori_riporto
and cd_cds = lResiduoCir.cd_cds_ori_riporto
and esercizio_originale = lResiduoCir.esercizio_ori_ori_riporto
and pg_accertamento = lResiduoCir.pg_accertamento_ori_riporto;
exception
when others then
-- esiste un documento amministrativo associato
-- violazioen della FK
if sqlcode = -2292 then
-- annulliamo logicamente accertamento 2003
update accertamento
set dt_cancellazione = aData,
utuv = cgUtente,
duva = aData,
pg_ver_rec = pg_ver_rec + 1
where cd_cds = lResiduoCir.cd_cds
and esercizio = lResiduoCir.esercizio
and esercizio_originale = lResiduoCir.esercizio_originale
and pg_accertamento = lResiduoCir.pg_accertamento
and dt_cancellazione is null;
-- annulliamo logicamente accertamento 2002
update accertamento
set dt_cancellazione = aData,
utuv = cgUtente,
duva = aData,
pg_ver_rec = pg_ver_rec + 1
where esercizio = lResiduoCir.esercizio_ori_riporto
and cd_cds = lResiduoCir.cd_cds_ori_riporto
and esercizio_originale = lResiduoCir.esercizio_ori_ori_riporto
and pg_accertamento = lResiduoCir.pg_accertamento_ori_riporto
and dt_cancellazione is null;
end if;
end;
-- Aggiornare voce_f_saldi_cmp
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr - lImAccertamento,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr - lImAccertamento,
utuv = cgUtente,
duva = aData,
pg_ver_rec = pg_ver_rec + 1
where esercizio = lResiduoCir.esercizio
and cd_cds = lResiduoCir.cd_cds
and ti_appartenenza = lResiduoCir.ti_appartenenza
and ti_gestione = lResiduoCir.ti_gestione
and cd_voce = lResiduoCir.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
else
gMsgLog := 'Impossibile cancellare Accertamento, gia associato pg_accertamento = ' || lResiduoCir.pg_accertamento || ' ';
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
end;
end loop;
end;
procedure SetResiduiPassiviCanc(aData date) is
lResiduiSci cnr_residui_passivi%rowtype;
lImpegno obbligazione%rowtype;
lImpegnoScadenza obbligazione_scadenzario%rowtype;
lVoce obbligazione_scad_voce%rowtype;
lVoceF voce_F%rowtype;
lPgObbligazioneScad obbligazione_scadenzario.PG_OBBLIGAZIONE_SCADENZARIO%type;
lNumResCancellati number := 0;
lGiaAssociato boolean;
lImObbligazione number(15,2);
lPgUltimoCaricamento number;
begin
-- Recuperiamo il pg_ultimo_caricamento SCI
select nvl(max(pg_caricamento),0)
into lPgUltimoCaricamento
from cnr_residui_passivi;
-- Apriamo un cursore su tutti gli impegni residui presenti in CIR
for lImpegnoResiduo in (SELECT * FROM obbligazione
WHERE length(to_char(pg_obbligazione)) = 10
and cd_tipo_documento_cont = cnrctb018.TI_DOC_IMP_RES
and riportato = 'N'
and esercizio = gcEsercizioDest
and stato_obbligazione <> 'S'
) loop
begin
savepoint canc_altro_imp;
-- Recuperiamo la voce finanziaria (cd_voce da voce_f)
-- recuperare cd_voce da elemnto voce
-- Recuperiamo la scadenza legata all'imegno
gMsgLog := 'Impossibile recuperare (non essistono scadenze di obbligazione) la voce finanziaria per impegno pg_obbligazione = '|| to_char(lImpegnoResiduo.pg_obbligazione);
select *
into lImpegnoScadenza
from obbligazione_scadenzario
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = lImpegnoResiduo.esercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione;
-- Recuperiamo il codice della scadenza voce
gMsgLog := 'Impossibile recuperare la voce finanziaria (non essistono scadenze di obbligazione distribuite sulle voci f), pg_obbligazione = '|| to_char(lImpegnoResiduo.pg_obbligazione);
select *
into lVoce
from obbligazione_scad_voce obbsv
where obbsv.cd_cds = lImpegnoResiduo.cd_cds
and obbsv.esercizio = lImpegnoResiduo.esercizio
And obbsv.esercizio_originale = lImpegnoResiduo.esercizio_originale
and obbsv.pg_obbligazione = lImpegnoResiduo.pg_obbligazione
and obbsv.pg_obbligazione_scadenzario = lImpegnoScadenza.pg_obbligazione_scadenzario
and obbsv.ti_appartenenza = lImpegnoResiduo.ti_appartenenza
and obbsv.ti_gestione = lImpegnoResiduo.ti_gestione;
gMsgLog := 'Non trovata Voce Finanziaria, per impegno = ' || to_char(lImpegnoResiduo.pg_obbligazione);
select *
into lVoceF
from voce_f
where esercizio = lImpegnoResiduo.esercizio
and TI_APPARTENENZA = lImpegnoResiduo.TI_APPARTENENZA
and TI_GESTIONE = lImpegnoResiduo.TI_GESTIONE
and cd_voce = lVoce.cd_voce;
begin
select *
into lResiduiSci
from cnr_residui_passivi cnr
where pg_caricamento = lPgUltimoCaricamento
and esercizio = substr(to_char(lImpegnoResiduo.pg_obbligazione),1,4)
and ti_appartenenza = lImpegnoResiduo.ti_appartenenza
and ti_gestione = lImpegnoResiduo.ti_gestione
and cd_voce = lVoceF.cd_voce ;
exception when no_data_found then
-- Cancellare Residuo 2003 associato
lNumResCancellati := lNumResCancellati + 1;
-- controlliamo se l'impegno risulta associato a doc amministrativi
if lImpegnoScadenza.im_associato_doc_amm > 0 then
lGiaAssociato := true;
else
lGiaAssociato := false;
end if;
if not lGiaAssociato then
-- In questo caso il residuo risulta cancellato in SCI
-- ed e possibile cancellarlo anche da CIR
-- in quanto non risulta associato a doc amm
-- Cancelliamo imegno residuo 2003
lImObbligazione := lImpegnoResiduo.im_obbligazione;
begin
delete obbligazione
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = lImpegnoResiduo.esercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione;
delete obbligazione_s
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = lImpegnoResiduo.esercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione;
delete obbligazione_scadenzario_s
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = lImpegnoResiduo.esercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione;
delete obbligazione_scad_voce_s
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = lImpegnoResiduo.esercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione;
-- recuperiamo imegno originario 2002
select *
into lImpegno
from obbligazione
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = gcEsercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione
for update nowait;
delete obbligazione
where cd_cds = lImpegno.cd_cds
and esercizio = gcEsercizio
and esercizio_originale = lImpegno.esercizio_originale
and pg_obbligazione = lImpegno.pg_obbligazione;
delete obbligazione_s
where cd_cds = lImpegno.cd_cds
and esercizio = gcEsercizio
and esercizio_originale = lImpegno.esercizio_originale
and pg_obbligazione = lImpegno.pg_obbligazione;
delete obbligazione_scadenzario_s
where cd_cds = lImpegno.cd_cds
and esercizio = gcEsercizio
and esercizio_originale = lImpegno.esercizio_originale
and pg_obbligazione = lImpegno.pg_obbligazione;
delete obbligazione_scad_voce_s
where cd_cds = lImpegno.cd_cds
and esercizio = gcEsercizio
and esercizio_originale = lImpegno.esercizio_originale
and pg_obbligazione = lImpegno.pg_obbligazione;
exception
when others then
-- esiste un documento amministrativo associato
-- violazioen della FK
if sqlcode = -2292 then
-- annulliamo logicamente obbligazione 2003
update obbligazione
set dt_cancellazione = aData,
stato_obbligazione = 'S', -- STORNATO
pg_ver_rec = pg_ver_rec + 1
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = lImpegnoResiduo.esercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione
and stato_obbligazione <> 'S';
-- annulliamo logicamente obbligazione 2002
update obbligazione
set dt_cancellazione = aData,
stato_obbligazione = 'S', -- STORNATO
utuv = cgUtente,
duva =aData,
pg_ver_rec = pg_ver_rec + 1
where cd_cds = lImpegnoResiduo.cd_cds
and esercizio = gcEsercizio
and esercizio_originale = lImpegnoResiduo.esercizio_originale
and pg_obbligazione = lImpegnoResiduo.pg_obbligazione
and stato_obbligazione <> 'S';
end if;
end;
-- Aggiornare voce_f_saldi_cmp per il 2003
update voce_f_saldi_cmp
set im_obblig_imp_acr = im_obblig_imp_acr - lImObbligazione,
IM_STANZ_INIZIALE_A1 = im_obblig_imp_acr - lImObbligazione,
utuv = cgUtente,
duva = aData,
pg_ver_rec = pg_ver_rec + 1
where esercizio = lImpegnoResiduo.esercizio
and cd_cds = lImpegnoResiduo.cd_cds
and ti_appartenenza = lImpegnoResiduo.ti_appartenenza
and ti_gestione = lImpegnoResiduo.ti_gestione
and cd_voce = lVocef.cd_voce
and ti_competenza_residuo = CNRCTB054.TI_RESIDUI;
else
gMsgLog := 'Non cancellato Impegno residuo, pg_obbligazione ' || to_char(lImpegnoResiduo.pg_obbligazione) || ' risulta associato a doc amm' ;
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end if;
end;
exception when no_data_found then
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end;
end loop;
end;
function getTerzo(aCdTerzoSci cnr_residui_Attivi.cd_terzo%type) return terzo%rowtype is
lCdTerzo number;
lTerzo terzo%rowtype;
lTerzoDefault terzo%rowtype;
begin
begin
select im01
into lCdTerzo
from configurazione_cnr
where cd_chiave_primaria = 'TERZO_SPECIALE'
and cd_chiave_secondaria = 'CODICE_DIVERSI_IMPEGNI';
exception when no_data_found then
gMsgLog := 'TERZO_SPECIALE per CODICE_DIVERSI_IMPEGNI non trovalo in configurazione_cnr';
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
end;
begin
select *
into lTerzoDefault
from terzo
where cd_terzo = lCdTerzo ;
exception when no_data_found then
gMsgLog := 'TERZO_SPECIALE per CODICE_DIVERSI_IMPEGNI non trovalo in configurazione_cnr, il codice del terzo in esame risulta ' || to_char(lCdTerzo);
ibmutl200.logInf(gPgLog ,gMsgLog, '', '');
-- ibmerr001.RAISE_ERR_GENERICO('TERZO_SPECIALE per CODICE_DIVERSI_IMPEGNI non trovalo in configurazione_cnr, il codice del terzo in esame risulta ' || to_char(lCdTerzo) );
end;
if aCdTerzoSci <> to_char(lCdTerzo) then
begin
select *
into lTerzo
from terzo
where cd_precedente = aCdTerzoSci
and rownum = 1;
return lTerzo ;
exception when no_data_found then
return lTerzoDefault ;
end;
else
return lTerzoDefault ;
end if;
end;
END;
© 2015 - 2024 Weber Informatics LLC | Privacy Policy