expsigladb.Package.CNRCTB075_BODY.sql Maven / Gradle / Ivy
--------------------------------------------------------
-- DDL for Package Body CNRCTB075
--------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY "CNRCTB075" is
procedure apreFrameVarPdg(aPdgAggregato pdg_aggregato%rowtype) is
aPdgPreventivoVar pdg_preventivo_var%rowtype;
aPdgPreventivoVarTmp pdg_preventivo_var%rowtype;
cdrValido cdr%rowtype;
aTSNow date;
begin
aTSNow:=sysdate;
cdrValido:=CNRCTB020.GETCDRVALIDO(aPdgAggregato.esercizio, aPdgAggregato.cd_centro_responsabilita);
begin
select * into aPdgPreventivoVarTmp from pdg_preventivo_var where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
stato = CNRCTB070.VARIAZIONE_APERTA for update nowait;
IBMERR001.RAISE_ERR_GENERICO('Esiste giא un frame di variazione aperto per il cdr:'||cdrValido.cd_centro_responsabilita);
exception when NO_DATA_FOUND then
null;
end;
begin
select * into aPdgPreventivoVar from pdg_preventivo_var where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
pg_variazione_pdg = ( select max(b.pg_variazione_pdg) from pdg_preventivo_var b where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita )
for update nowait;
aPdgPreventivoVar.ESERCIZIO := aPdgAggregato.ESERCIZIO;
aPdgPreventivoVar.CD_CENTRO_RESPONSABILITA := cdrValido.CD_CENTRO_RESPONSABILITA;
aPdgPreventivoVar.STATO := CNRCTB070.VARIAZIONE_APERTA;
aPdgPreventivoVar.DACR := aTSNow;
aPdgPreventivoVar.UTCR := aPdgAggregato.UTUV;
aPdgPreventivoVar.DUVA := aTSNow;
aPdgPreventivoVar.UTUV := aPdgAggregato.UTUV;
aPdgPreventivoVar.PG_VER_REC := 1;
aPdgPreventivoVar.PG_VARIAZIONE_PDG := aPdgPreventivoVar.pg_variazione_pdg+1;
CNRCTB070.INS_PDG_PREVENTIVO_VAR(aPdgPreventivoVar);
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Non ט possibile aprire il pdg per variazioni prima di averlo chiuso.');
end;
end;
procedure chiudeFrameVarPdg(aPdgAggregato pdg_aggregato%rowtype) is
aPdgPreventivoVar pdg_preventivo_var%rowtype;
cdrValido cdr%rowtype;
aTSNow date;
begin
aTSNow:=sysdate;
cdrValido:=CNRCTB020.GETCDRVALIDO(aPdgAggregato.esercizio, aPdgAggregato.cd_centro_responsabilita);
begin
select * into aPdgPreventivoVar from pdg_preventivo_var where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
stato = CNRCTB070.VARIAZIONE_APERTA for update nowait;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Nessun frame di variazione aperto da chiudere per il cdr:'||cdrValido.cd_centro_responsabilita);
end;
update pdg_preventivo_var
set
stato = CNRCTB070.VARIAZIONE_CHIUSA,
utuv = aPdgAggregato.utuv,
duva = aTSNow,
pg_ver_rec=pg_ver_rec+1
where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
stato = CNRCTB070.VARIAZIONE_APERTA;
end;
procedure generaFrameVarPdg(aPdg pdg_preventivo%rowtype) is
aPgVariazionePdg number;
aPdgPreventivoVar pdg_preventivo_var%rowtype;
aPdgPreventivoEtrVar pdg_preventivo_etr_var%rowtype;
aPdgPreventivoSpeVar pdg_preventivo_spe_var%rowtype;
cdrValido cdr%rowtype;
aTSNow date;
begin
aTSNow:=sysdate;
cdrValido:=CNRCTB020.GETCDRVALIDO(aPdg.esercizio, aPdg.cd_centro_responsabilita);
begin
-- Lettura lockante del prossimo pg_variazione_pdg
select * into aPdgPreventivoVar from pdg_preventivo_var where
esercizio = aPdg.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
stato = CNRCTB070.VARIAZIONE_APERTA
for update nowait;
aPgVariazionePdg := aPdgPreventivoVar.pg_variazione_pdg;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Non ט possibile chiudere la variazione del pdg prima di aver aperto l''aggregato in M');
end;
-- Ciclo su tutti i cdr dipendenti dal cdr di 1^ livello
for aCdr in ( select * from V_PDG_CDR_FIGLI_PADRE where
esercizio = aPdg.esercizio and
cd_cdr_root = cdrValido.cd_centro_responsabilita) loop
-- Inserisco i dettagli di entrata nello storico delle variazioni
for aPdgPreventivoEtrDet in ( select * from pdg_preventivo_etr_det where
esercizio = aCdr.esercizio and
cd_centro_responsabilita = aCdr.cd_centro_responsabilita and
origine = CNRCTB070.ORIGINE_VARIAZIONE
for update nowait ) loop
aPdgPreventivoEtrVar.ESERCIZIO := aPdgPreventivoEtrDet.ESERCIZIO;
aPdgPreventivoEtrVar.CD_CDR_RESPONSABILE := aPdg.CD_CENTRO_RESPONSABILITA;
aPdgPreventivoEtrVar.CD_CENTRO_RESPONSABILITA := aPdgPreventivoEtrDet.CD_CENTRO_RESPONSABILITA;
aPdgPreventivoEtrVar.CD_LINEA_ATTIVITA := aPdgPreventivoEtrDet.CD_LINEA_ATTIVITA;
aPdgPreventivoEtrVar.TI_APPARTENENZA := aPdgPreventivoEtrDet.TI_APPARTENENZA;
aPdgPreventivoEtrVar.TI_GESTIONE := aPdgPreventivoEtrDet.TI_GESTIONE;
aPdgPreventivoEtrVar.CD_ELEMENTO_VOCE := aPdgPreventivoEtrDet.CD_ELEMENTO_VOCE;
aPdgPreventivoEtrVar.PG_ENTRATA := aPdgPreventivoEtrDet.PG_ENTRATA;
aPdgPreventivoEtrVar.PG_VARIAZIONE_PDG := aPgVariazionePdg;
aPdgPreventivoEtrVar.DACR := aPdgPreventivoEtrDet.DACR;
aPdgPreventivoEtrVar.UTCR := aPdgPreventivoEtrDet.UTCR;
aPdgPreventivoEtrVar.DUVA := aPdgPreventivoEtrDet.DUVA;
aPdgPreventivoEtrVar.UTUV := aPdgPreventivoEtrDet.UTUV;
aPdgPreventivoEtrVar.PG_VER_REC := aPdgPreventivoEtrDet.PG_VER_REC;
CNRCTB070.INS_PDG_PREVENTIVO_ETR_VAR(aPdgPreventivoEtrVar);
end loop;
-- Inserisco i dettagli di spesa nello storico delle variazioni
for aPdgPreventivoSpeDet in ( select * from pdg_preventivo_spe_det where
esercizio = aCdr.esercizio and
cd_centro_responsabilita = aCdr.cd_centro_responsabilita and
origine = CNRCTB070.ORIGINE_VARIAZIONE
for update nowait ) loop
aPdgPreventivoSpeVar.ESERCIZIO := aPdgPreventivoSpeDet.ESERCIZIO;
aPdgPreventivoSpeVar.CD_CDR_RESPONSABILE := aPdg.CD_CENTRO_RESPONSABILITA;
aPdgPreventivoSpeVar.CD_CENTRO_RESPONSABILITA := aPdgPreventivoSpeDet.CD_CENTRO_RESPONSABILITA;
aPdgPreventivoSpeVar.CD_LINEA_ATTIVITA := aPdgPreventivoSpeDet.CD_LINEA_ATTIVITA;
aPdgPreventivoSpeVar.TI_APPARTENENZA := aPdgPreventivoSpeDet.TI_APPARTENENZA;
aPdgPreventivoSpeVar.TI_GESTIONE := aPdgPreventivoSpeDet.TI_GESTIONE;
aPdgPreventivoSpeVar.CD_ELEMENTO_VOCE := aPdgPreventivoSpeDet.CD_ELEMENTO_VOCE;
aPdgPreventivoSpeVar.PG_SPESA := aPdgPreventivoSpeDet.PG_SPESA;
aPdgPreventivoSpeVar.PG_VARIAZIONE_PDG := aPgVariazionePdg;
aPdgPreventivoSpeVar.DACR := aPdgPreventivoSpeDet.DACR;
aPdgPreventivoSpeVar.UTCR := aPdgPreventivoSpeDet.UTCR;
aPdgPreventivoSpeVar.DUVA := aPdgPreventivoSpeDet.DUVA;
aPdgPreventivoSpeVar.UTUV := aPdgPreventivoSpeDet.UTUV;
aPdgPreventivoSpeVar.PG_VER_REC := aPdgPreventivoSpeDet.PG_VER_REC;
CNRCTB070.INS_PDG_PREVENTIVO_SPE_VAR(aPdgPreventivoSpeVar);
end loop;
-- Aggiorno i dettagli di entrata con origine VARIAZIONE in origine DIRETTA
update pdg_preventivo_etr_det set origine = CNRCTB050.ORIGINE_DIRETTA where
esercizio = aCdr.esercizio and
cd_centro_responsabilita = aCdr.cd_centro_responsabilita and
origine = CNRCTB070.ORIGINE_VARIAZIONE;
-- Aggiorno i dettagli di spesa con origine VARIAZIONE in origine DIRETTA
update pdg_preventivo_spe_det set origine = CNRCTB050.ORIGINE_DIRETTA where
esercizio = aCdr.esercizio and
cd_centro_responsabilita = aCdr.cd_centro_responsabilita and
origine = CNRCTB070.ORIGINE_VARIAZIONE;
end loop;
end;
procedure generaFrameVarPdgAggregato(aPdgAggregato pdg_aggregato%rowtype) is
aPgVariazionePdg number;
aPdgPreventivoVar pdg_preventivo_var%rowtype;
aPdgAggregatoEtrVar pdg_aggregato_etr_var%rowtype;
aPdgAggregatoSpeVar pdg_aggregato_spe_var%rowtype;
cdrValido cdr%rowtype;
aTSNow date;
begin
aTSNow:=sysdate;
cdrValido:=CNRCTB020.GETCDRVALIDO(aPdgAggregato.esercizio, aPdgAggregato.cd_centro_responsabilita);
-- Lock della testata del pdg_preventivo
CNRCTB050.lockPdg(aPdgAggregato.esercizio,cdrValido.cd_centro_responsabilita);
begin
-- Lettura lockante del prossimo pg_variazione_pdg
select * into aPdgPreventivoVar from pdg_preventivo_var where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
stato = CNRCTB070.VARIAZIONE_APERTA
for update nowait;
exception when NO_DATA_FOUND then
-- Se non trovo nessun record in pdg_preventivo_var comincio da 0
-- (Vuol dire che il pdg_preventivo ט ancora in stato C)
aPdgPreventivoVar.ESERCIZIO := aPdgAggregato.ESERCIZIO;
aPdgPreventivoVar.CD_CENTRO_RESPONSABILITA := cdrValido.CD_CENTRO_RESPONSABILITA;
aPdgPreventivoVar.STATO := CNRCTB070.VARIAZIONE_CHIUSA;
aPdgPreventivoVar.DACR := aTSNow;
aPdgPreventivoVar.UTCR := aPdgAggregato.UTUV;
aPdgPreventivoVar.DUVA := aTSNow;
aPdgPreventivoVar.UTUV := aPdgAggregato.UTUV;
aPdgPreventivoVar.PG_VER_REC := 1;
aPdgPreventivoVar.PG_VARIAZIONE_PDG := 0;
CNRCTB070.INS_PDG_PREVENTIVO_VAR(aPdgPreventivoVar);
end;
aPgVariazionePdg := aPdgPreventivoVar.PG_VARIAZIONE_PDG;
-- Inserisco i dettagli di entrata nello storico delle variazioni
for aPdgAggregatoEtrDet in ( select * from pdg_aggregato_etr_det where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
ti_aggregato = CNRCTB050.TI_AGGREGATO_MODIFICATO
for update nowait ) loop
aPdgAggregatoEtrVar.ESERCIZIO := aPdgAggregatoEtrDet.ESERCIZIO;
aPdgAggregatoEtrVar.CD_CENTRO_RESPONSABILITA := aPdgAggregatoEtrDet.CD_CENTRO_RESPONSABILITA;
aPdgAggregatoEtrVar.CD_NATURA := aPdgAggregatoEtrDet.CD_NATURA;
aPdgAggregatoEtrVar.TI_APPARTENENZA := aPdgAggregatoEtrDet.TI_APPARTENENZA;
aPdgAggregatoEtrVar.TI_GESTIONE := aPdgAggregatoEtrDet.TI_GESTIONE;
aPdgAggregatoEtrVar.CD_ELEMENTO_VOCE := aPdgAggregatoEtrDet.CD_ELEMENTO_VOCE;
aPdgAggregatoEtrVar.IM_RA_RCE := aPdgAggregatoEtrDet.IM_RA_RCE;
aPdgAggregatoEtrVar.IM_RB_RSE := aPdgAggregatoEtrDet.IM_RB_RSE;
aPdgAggregatoEtrVar.IM_RC_ESR := aPdgAggregatoEtrDet.IM_RC_ESR;
aPdgAggregatoEtrVar.IM_RD_A2_RICAVI := aPdgAggregatoEtrDet.IM_RD_A2_RICAVI;
aPdgAggregatoEtrVar.IM_RE_A2_ENTRATE := aPdgAggregatoEtrDet.IM_RE_A2_ENTRATE;
aPdgAggregatoEtrVar.IM_RF_A3_RICAVI := aPdgAggregatoEtrDet.IM_RF_A3_RICAVI;
aPdgAggregatoEtrVar.IM_RG_A3_ENTRATE := aPdgAggregatoEtrDet.IM_RG_A3_ENTRATE;
aPdgAggregatoEtrVar.PG_VARIAZIONE_PDG := aPgVariazionePdg;
aPdgAggregatoEtrVar.DACR := aPdgAggregatoEtrDet.DACR;
aPdgAggregatoEtrVar.UTCR := aPdgAggregatoEtrDet.UTCR;
aPdgAggregatoEtrVar.DUVA := aPdgAggregatoEtrDet.DUVA;
aPdgAggregatoEtrVar.UTUV := aPdgAggregatoEtrDet.UTUV;
aPdgAggregatoEtrVar.PG_VER_REC := aPdgAggregatoEtrDet.PG_VER_REC;
CNRCTB070.INS_PDG_AGGREGATO_ETR_VAR(aPdgAggregatoEtrVar);
end loop;
-- Inserisco i dettagli di spesa nello storico delle variazioni
for aPdgAggregatoSpeDet in ( select * from pdg_aggregato_spe_det where
esercizio = aPdgAggregato.esercizio and
cd_centro_responsabilita = cdrValido.cd_centro_responsabilita and
ti_aggregato = CNRCTB050.TI_AGGREGATO_MODIFICATO
for update nowait ) loop
aPdgAggregatoSpeVar.ESERCIZIO := aPdgAggregatoSpeDet.ESERCIZIO;
aPdgAggregatoSpeVar.CD_CENTRO_RESPONSABILITA := aPdgAggregatoSpeDet.CD_CENTRO_RESPONSABILITA;
aPdgAggregatoSpeVar.TI_APPARTENENZA := aPdgAggregatoSpeDet.TI_APPARTENENZA;
aPdgAggregatoSpeVar.TI_GESTIONE := aPdgAggregatoSpeDet.TI_GESTIONE;
aPdgAggregatoSpeVar.CD_ELEMENTO_VOCE := aPdgAggregatoSpeDet.CD_ELEMENTO_VOCE;
aPdgAggregatoSpeVar.CD_FUNZIONE := aPdgAggregatoSpeDet.CD_FUNZIONE;
aPdgAggregatoSpeVar.CD_NATURA := aPdgAggregatoSpeDet.CD_NATURA;
aPdgAggregatoSpeVar.CD_CDS := aPdgAggregatoSpeDet.CD_CDS;
aPdgAggregatoSpeVar.IM_RH_CCS_COSTI := aPdgAggregatoSpeDet.IM_RH_CCS_COSTI;
aPdgAggregatoSpeVar.IM_RI_CCS_SPESE_ODC := aPdgAggregatoSpeDet.IM_RI_CCS_SPESE_ODC;
aPdgAggregatoSpeVar.IM_RJ_CCS_SPESE_ODC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RJ_CCS_SPESE_ODC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RK_CCS_SPESE_OGC := aPdgAggregatoSpeDet.IM_RK_CCS_SPESE_OGC;
aPdgAggregatoSpeVar.IM_RL_CCS_SPESE_OGC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RL_CCS_SPESE_OGC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RM_CSS_AMMORTAMENTI := aPdgAggregatoSpeDet.IM_RM_CSS_AMMORTAMENTI;
aPdgAggregatoSpeVar.IM_RN_CSS_RIMANENZE := aPdgAggregatoSpeDet.IM_RN_CSS_RIMANENZE;
aPdgAggregatoSpeVar.IM_RO_CSS_ALTRI_COSTI := aPdgAggregatoSpeDet.IM_RO_CSS_ALTRI_COSTI;
aPdgAggregatoSpeVar.IM_RP_CSS_VERSO_ALTRO_CDR := aPdgAggregatoSpeDet.IM_RP_CSS_VERSO_ALTRO_CDR;
aPdgAggregatoSpeVar.IM_RQ_SSC_COSTI_ODC := aPdgAggregatoSpeDet.IM_RQ_SSC_COSTI_ODC;
aPdgAggregatoSpeVar.IM_RR_SSC_COSTI_ODC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RR_SSC_COSTI_ODC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RS_SSC_COSTI_OGC := aPdgAggregatoSpeDet.IM_RS_SSC_COSTI_OGC;
aPdgAggregatoSpeVar.IM_RT_SSC_COSTI_OGC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RT_SSC_COSTI_OGC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RU_SPESE_COSTI_ALTRUI := aPdgAggregatoSpeDet.IM_RU_SPESE_COSTI_ALTRUI;
aPdgAggregatoSpeVar.IM_RV_PAGAMENTI := aPdgAggregatoSpeDet.IM_RV_PAGAMENTI;
aPdgAggregatoSpeVar.IM_RAA_A2_COSTI_FINALI := aPdgAggregatoSpeDet.IM_RAA_A2_COSTI_FINALI;
aPdgAggregatoSpeVar.IM_RAB_A2_COSTI_ALTRO_CDR := aPdgAggregatoSpeDet.IM_RAB_A2_COSTI_ALTRO_CDR;
aPdgAggregatoSpeVar.IM_RAC_A2_SPESE_ODC := aPdgAggregatoSpeDet.IM_RAC_A2_SPESE_ODC;
aPdgAggregatoSpeVar.IM_RAD_A2_SPESE_ODC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RAD_A2_SPESE_ODC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RAE_A2_SPESE_OGC := aPdgAggregatoSpeDet.IM_RAE_A2_SPESE_OGC;
aPdgAggregatoSpeVar.IM_RAF_A2_SPESE_OGC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RAF_A2_SPESE_OGC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RAG_A2_SPESE_COSTI_ALTRUI := aPdgAggregatoSpeDet.IM_RAG_A2_SPESE_COSTI_ALTRUI;
aPdgAggregatoSpeVar.IM_RAH_A3_COSTI_FINALI := aPdgAggregatoSpeDet.IM_RAH_A3_COSTI_FINALI;
aPdgAggregatoSpeVar.IM_RAI_A3_COSTI_ALTRO_CDR := aPdgAggregatoSpeDet.IM_RAI_A3_COSTI_ALTRO_CDR;
aPdgAggregatoSpeVar.IM_RAL_A3_SPESE_ODC := aPdgAggregatoSpeDet.IM_RAL_A3_SPESE_ODC;
aPdgAggregatoSpeVar.IM_RAM_A3_SPESE_ODC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RAM_A3_SPESE_ODC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RAN_A3_SPESE_OGC := aPdgAggregatoSpeDet.IM_RAN_A3_SPESE_OGC;
aPdgAggregatoSpeVar.IM_RAO_A3_SPESE_OGC_ALTRA_UO := aPdgAggregatoSpeDet.IM_RAO_A3_SPESE_OGC_ALTRA_UO;
aPdgAggregatoSpeVar.IM_RAP_A3_SPESE_COSTI_ALTRUI := aPdgAggregatoSpeDet.IM_RAP_A3_SPESE_COSTI_ALTRUI;
aPdgAggregatoSpeVar.PG_VARIAZIONE_PDG := aPgVariazionePdg;
aPdgAggregatoSpeVar.DACR := aPdgAggregatoSpeDet.DACR;
aPdgAggregatoSpeVar.UTCR := aPdgAggregatoSpeDet.UTCR;
aPdgAggregatoSpeVar.DUVA := aPdgAggregatoSpeDet.DUVA;
aPdgAggregatoSpeVar.UTUV := aPdgAggregatoSpeDet.UTUV;
aPdgAggregatoSpeVar.PG_VER_REC := aPdgAggregatoSpeDet.PG_VER_REC;
CNRCTB070.INS_PDG_AGGREGATO_SPE_VAR(aPdgAggregatoSpeVar);
end loop;
end;
procedure checkAggrPdgEtrDetPositivo(aEsercizio number, aCdCdr varchar2, aCdLA varchar2, aTiAppartenenza varchar2, aTiGestione varchar2, aCdVoce varchar2,colonna in out varchar2,importo in out number) is
begin
for aggrPdgEtrDet in (
select
sum(IM_RA_RCE) IM_RA_RCE,
sum(IM_RB_RSE) IM_RB_RSE,
sum(IM_RC_ESR) IM_RC_ESR,
sum(IM_RD_A2_RICAVI) IM_RD_A2_RICAVI,
sum(IM_RE_A2_ENTRATE) IM_RE_A2_ENTRATE,
sum(IM_RF_A3_RICAVI) IM_RF_A3_RICAVI,
sum(IM_RG_A3_ENTRATE) IM_RG_A3_ENTRATE
from
pdg_preventivo_etr_det
where
esercizio = aEsercizio and
cd_centro_responsabilita = aCdCdr and
cd_linea_attivita = aCdLA and
ti_appartenenza = aTiAppartenenza and
ti_gestione = aTiGestione and
cd_elemento_voce = aCdVoce And
stato = 'Y' And
categoria_dettaglio <> 'CAR' )
loop
if aggrPdgEtrDet.IM_RA_RCE < 0 then
colonna := 'IM_RA_RCE';
importo := aggrPdgEtrDet.IM_RA_RCE;
elsif aggrPdgEtrDet.IM_RB_RSE < 0 then
colonna := 'IM_RB_RSE';
importo := aggrPdgEtrDet.IM_RB_RSE;
elsif aggrPdgEtrDet.IM_RC_ESR < 0 then
colonna := 'IM_RC_ESR';
importo := aggrPdgEtrDet.IM_RC_ESR;
elsif aggrPdgEtrDet.IM_RD_A2_RICAVI < 0 then
colonna := 'IM_RD_A2_RICAVI';
importo := aggrPdgEtrDet.IM_RD_A2_RICAVI;
elsif aggrPdgEtrDet.IM_RE_A2_ENTRATE < 0 then
colonna := 'IM_RE_A2_ENTRATE';
importo := aggrPdgEtrDet.IM_RE_A2_ENTRATE;
elsif aggrPdgEtrDet.IM_RF_A3_RICAVI < 0 then
colonna := 'IM_RF_A3_RICAVI';
importo := aggrPdgEtrDet.IM_RF_A3_RICAVI;
elsif aggrPdgEtrDet.IM_RG_A3_ENTRATE < 0 then
colonna := 'IM_RG_A3_ENTRATE';
importo := aggrPdgEtrDet.IM_RG_A3_ENTRATE;
end if;
end loop;
end;
procedure checkAggrPdgSpeDetPositivo(aEsercizio number, aCdCdr varchar2, aCdLA varchar2, aTiAppartenenza varchar2, aTiGestione varchar2, aCdVoce varchar2, aPgSpesa number,colonna in out varchar2,importo in out number) is
aExists number;
statoVar VARCHAR2(3);
esercizioVar NUMBER(4);
progressivoVar NUMBER(9);
cdrPrimoLivello CDR.Cd_centro_responsabilita%Type;
Begin
Begin
Select v.STATO, v.ESERCIZIO, v.PG_VARIAZIONE_PDG Into statoVar, esercizioVar, progressivoVar
From PDG_VARIAZIONE v, PDG_PREVENTIVO_SPE_DET b
Where b.esercizio = aEsercizio
And b.cd_centro_responsabilita = aCdCdr
And b.cd_linea_attivita = aCdLA
And b.ti_appartenenza = aTiAppartenenza
And b.ti_gestione = aTiGestione
And b.cd_elemento_voce = aCdVoce
And b.pg_spesa = aPgSpesa
And v.ESERCIZIO = b.ESERCIZIO_PDG_VARIAZIONE
And v.PG_VARIAZIONE_PDG = b.PG_VARIAZIONE_PDG;
Select Nvl(Cd_cdr_afferenza,Cd_centro_responsabilita)
Into cdrPrimoLivello
From Cdr
Where Cd_centro_responsabilita = aCdCdr;
Exception
When No_Data_Found Then
Null;
End;
If statoVar Is Not Null And statoVar = 'PRD' Then
Savepoint VARIAZIONE_DEFINITIVA;
CNRCTB053.ribaltaSuAreaPDGVar(aEsercizio,cdrPrimoLivello,'CED',esercizioVar,progressivoVar);
End If;
-- Se il nuovo dettaglio contiene valori negativi sulle colonne degli scarichi verso altro cdr/altra uo
-- controllo che NON esistano altri dettagli di scarico verso lo stesso cdr/uo in stato 'X'
begin
select 1 into aExists from dual where exists (
select
1
from
pdg_preventivo_spe_det a,pdg_preventivo_spe_det b
where
b.esercizio = aEsercizio and
b.cd_centro_responsabilita = aCdCdr and
b.cd_linea_attivita = aCdLA and
b.ti_appartenenza = aTiAppartenenza and
b.ti_gestione = aTiGestione and
b.cd_elemento_voce = aCdVoce and
b.pg_spesa = aPgSpesa and
( b.IM_RJ_CCS_SPESE_ODC_ALTRA_UO < 0 or
b.IM_RL_CCS_SPESE_OGC_ALTRA_UO < 0 or
b.IM_RP_CSS_VERSO_ALTRO_CDR < 0 or
b.IM_RR_SSC_COSTI_ODC_ALTRA_UO < 0 or
b.IM_RT_SSC_COSTI_OGC_ALTRA_UO < 0 or
b.IM_RAB_A2_COSTI_ALTRO_CDR < 0 or
b.IM_RAD_A2_SPESE_ODC_ALTRA_UO < 0 or
b.IM_RAF_A2_SPESE_OGC_ALTRA_UO < 0 or
b.IM_RAI_A3_COSTI_ALTRO_CDR < 0 or
b.IM_RAM_A3_SPESE_ODC_ALTRA_UO < 0 or
b.IM_RAO_A3_SPESE_OGC_ALTRA_UO < 0) and
a.ESERCIZIO = b.ESERCIZIO and
a.CD_CENTRO_RESPONSABILITA = b.CD_CENTRO_RESPONSABILITA and
a.CD_LINEA_ATTIVITA = b.CD_LINEA_ATTIVITA and
a.TI_APPARTENENZA = b.TI_APPARTENENZA and
a.TI_GESTIONE = b.TI_GESTIONE and
a.CD_ELEMENTO_VOCE = b.CD_ELEMENTO_VOCE and
a.PG_SPESA <> b.PG_SPESA and
( ( a.CD_CENTRO_RESPONSABILITA_CLGE IS NULL and b.CD_CENTRO_RESPONSABILITA_CLGE IS NULL ) or
a.CD_CENTRO_RESPONSABILITA_CLGE = b.CD_CENTRO_RESPONSABILITA_CLGE ) and
( ( a.CD_CENTRO_RESPONSABILITA_CLGS IS NULL and b.CD_CENTRO_RESPONSABILITA_CLGS IS NULL ) or
a.CD_CENTRO_RESPONSABILITA_CLGS = b.CD_CENTRO_RESPONSABILITA_CLGS ) and
a.categoria_dettaglio = 'SCR' and
a.stato = 'X' );
exception when NO_DATA_FOUND then
aExists := 0;
end;
if aExists = 1 then
IBMERR001.RAISE_ERR_GENERICO('Non ט possibile inserire dettagli di scarico negativi perchט esistono altri dettagli di scarico verso lo stesso cdr/uo non ancora confermati.');
end if;
-- Controllo che la somma di tutti i dettagli di spesa non caricati e non annullati
-- raggruppati per l.a., voce del piano, clge e clgs sia positiva.
for aggrPdgSpeDet in (
select
SUM(a.IM_RI_CCS_SPESE_ODC) IM_RI_CCS_SPESE_ODC,
SUM(a.IM_RJ_CCS_SPESE_ODC_ALTRA_UO) IM_RJ_CCS_SPESE_ODC_ALTRA_UO,
SUM(a.IM_RK_CCS_SPESE_OGC) IM_RK_CCS_SPESE_OGC,
SUM(a.IM_RL_CCS_SPESE_OGC_ALTRA_UO) IM_RL_CCS_SPESE_OGC_ALTRA_UO,
SUM(a.IM_RM_CSS_AMMORTAMENTI) IM_RM_CSS_AMMORTAMENTI,
SUM(a.IM_RN_CSS_RIMANENZE) IM_RN_CSS_RIMANENZE,
SUM(a.IM_RO_CSS_ALTRI_COSTI) IM_RO_CSS_ALTRI_COSTI,
SUM(a.IM_RP_CSS_VERSO_ALTRO_CDR) IM_RP_CSS_VERSO_ALTRO_CDR,
SUM(a.IM_RQ_SSC_COSTI_ODC) IM_RQ_SSC_COSTI_ODC,
SUM(a.IM_RR_SSC_COSTI_ODC_ALTRA_UO) IM_RR_SSC_COSTI_ODC_ALTRA_UO,
SUM(a.IM_RS_SSC_COSTI_OGC) IM_RS_SSC_COSTI_OGC,
SUM(a.IM_RT_SSC_COSTI_OGC_ALTRA_UO) IM_RT_SSC_COSTI_OGC_ALTRA_UO,
SUM(a.IM_RV_PAGAMENTI) IM_RV_PAGAMENTI,
SUM(a.IM_RAA_A2_COSTI_FINALI) IM_RAA_A2_COSTI_FINALI,
SUM(a.IM_RAB_A2_COSTI_ALTRO_CDR) IM_RAB_A2_COSTI_ALTRO_CDR,
SUM(a.IM_RAC_A2_SPESE_ODC) IM_RAC_A2_SPESE_ODC,
SUM(a.IM_RAD_A2_SPESE_ODC_ALTRA_UO) IM_RAD_A2_SPESE_ODC_ALTRA_UO,
SUM(a.IM_RAE_A2_SPESE_OGC) IM_RAE_A2_SPESE_OGC,
SUM(a.IM_RAF_A2_SPESE_OGC_ALTRA_UO) IM_RAF_A2_SPESE_OGC_ALTRA_UO,
SUM(a.IM_RAH_A3_COSTI_FINALI) IM_RAH_A3_COSTI_FINALI,
SUM(a.IM_RAI_A3_COSTI_ALTRO_CDR) IM_RAI_A3_COSTI_ALTRO_CDR,
SUM(a.IM_RAL_A3_SPESE_ODC) IM_RAL_A3_SPESE_ODC,
SUM(a.IM_RAM_A3_SPESE_ODC_ALTRA_UO) IM_RAM_A3_SPESE_ODC_ALTRA_UO,
SUM(a.IM_RAN_A3_SPESE_OGC) IM_RAN_A3_SPESE_OGC,
SUM(a.IM_RAO_A3_SPESE_OGC_ALTRA_UO) IM_RAO_A3_SPESE_OGC_ALTRA_UO
from
pdg_preventivo_spe_det a,pdg_preventivo_spe_det b
where
b.esercizio = aEsercizio and
b.cd_centro_responsabilita = aCdCdr and
b.cd_linea_attivita = aCdLA and
b.ti_appartenenza = aTiAppartenenza and
b.ti_gestione = aTiGestione and
b.cd_elemento_voce = aCdVoce and
b.pg_spesa = aPgSpesa and
a.ESERCIZIO = b.ESERCIZIO and
a.CD_CENTRO_RESPONSABILITA = b.CD_CENTRO_RESPONSABILITA and
a.CD_LINEA_ATTIVITA = b.CD_LINEA_ATTIVITA and
a.TI_APPARTENENZA = b.TI_APPARTENENZA and
a.TI_GESTIONE = b.TI_GESTIONE and
a.CD_ELEMENTO_VOCE = b.CD_ELEMENTO_VOCE and
( ( a.CD_CENTRO_RESPONSABILITA_CLGE IS NULL and b.CD_CENTRO_RESPONSABILITA_CLGE IS NULL ) or
a.CD_CENTRO_RESPONSABILITA_CLGE = b.CD_CENTRO_RESPONSABILITA_CLGE ) and
( ( a.CD_CENTRO_RESPONSABILITA_CLGS IS NULL and b.CD_CENTRO_RESPONSABILITA_CLGS IS NULL ) or
a.CD_CENTRO_RESPONSABILITA_CLGS = b.CD_CENTRO_RESPONSABILITA_CLGS ) and
a.categoria_dettaglio <> 'CAR' and
a.stato <> 'N' And
((a.ESERCIZIO_PDG_VARIAZIONE Is Not Null And 'PRP' != (Select stato From PDG_VARIAZIONE
Where PDG_VARIAZIONE.ESERCIZIO = a.ESERCIZIO_PDG_VARIAZIONE
And PDG_VARIAZIONE.PG_VARIAZIONE_PDG = a.PG_VARIAZIONE_PDG))
Or a.ESERCIZIO_PDG_VARIAZIONE Is Null)
)
loop
if aggrPdgSpeDet.IM_RI_CCS_SPESE_ODC < 0 then
colonna := 'IM_RI_CCS_SPESE_ODC';
importo := aggrPdgSpeDet.IM_RI_CCS_SPESE_ODC;
elsif aggrPdgSpeDet.IM_RJ_CCS_SPESE_ODC_ALTRA_UO < 0 then
colonna := 'IM_RJ_CCS_SPESE_ODC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RJ_CCS_SPESE_ODC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RK_CCS_SPESE_OGC < 0 then
colonna := 'IM_RK_CCS_SPESE_OGC';
importo := aggrPdgSpeDet.IM_RK_CCS_SPESE_OGC;
elsif aggrPdgSpeDet.IM_RL_CCS_SPESE_OGC_ALTRA_UO < 0 then
colonna := 'IM_RL_CCS_SPESE_OGC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RL_CCS_SPESE_OGC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RM_CSS_AMMORTAMENTI < 0 then
colonna := 'IM_RM_CSS_AMMORTAMENTI';
importo := aggrPdgSpeDet.IM_RM_CSS_AMMORTAMENTI;
elsif aggrPdgSpeDet.IM_RN_CSS_RIMANENZE < 0 then
colonna := 'IM_RN_CSS_RIMANENZE';
importo := aggrPdgSpeDet.IM_RN_CSS_RIMANENZE;
elsif aggrPdgSpeDet.IM_RO_CSS_ALTRI_COSTI < 0 then
colonna := 'IM_RO_CSS_ALTRI_COSTI';
importo := aggrPdgSpeDet.IM_RO_CSS_ALTRI_COSTI;
elsif aggrPdgSpeDet.IM_RP_CSS_VERSO_ALTRO_CDR < 0 then
colonna := 'IM_RP_CSS_VERSO_ALTRO_CDR';
importo := aggrPdgSpeDet.IM_RP_CSS_VERSO_ALTRO_CDR;
elsif aggrPdgSpeDet.IM_RQ_SSC_COSTI_ODC < 0 then
colonna := 'IM_RQ_SSC_COSTI_ODC';
importo := aggrPdgSpeDet.IM_RQ_SSC_COSTI_ODC;
elsif aggrPdgSpeDet.IM_RR_SSC_COSTI_ODC_ALTRA_UO < 0 then
colonna := 'IM_RR_SSC_COSTI_ODC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RR_SSC_COSTI_ODC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RS_SSC_COSTI_OGC < 0 then
colonna := 'IM_RS_SSC_COSTI_OGC';
importo := aggrPdgSpeDet.IM_RS_SSC_COSTI_OGC;
elsif aggrPdgSpeDet.IM_RT_SSC_COSTI_OGC_ALTRA_UO < 0 then
colonna := 'IM_RT_SSC_COSTI_OGC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RT_SSC_COSTI_OGC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RV_PAGAMENTI < 0 then
colonna := 'IM_RV_PAGAMENTI';
importo := aggrPdgSpeDet.IM_RV_PAGAMENTI;
elsif aggrPdgSpeDet.IM_RAA_A2_COSTI_FINALI < 0 then
colonna := 'IM_RAA_A2_COSTI_FINALI';
importo := aggrPdgSpeDet.IM_RAA_A2_COSTI_FINALI;
elsif aggrPdgSpeDet.IM_RAB_A2_COSTI_ALTRO_CDR < 0 then
colonna := 'IM_RAB_A2_COSTI_ALTRO_CDR';
importo := aggrPdgSpeDet.IM_RAB_A2_COSTI_ALTRO_CDR;
elsif aggrPdgSpeDet.IM_RAC_A2_SPESE_ODC < 0 then
colonna := 'IM_RAC_A2_SPESE_ODC';
importo := aggrPdgSpeDet.IM_RAC_A2_SPESE_ODC;
elsif aggrPdgSpeDet.IM_RAD_A2_SPESE_ODC_ALTRA_UO < 0 then
colonna := 'IM_RAD_A2_SPESE_ODC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RAD_A2_SPESE_ODC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RAE_A2_SPESE_OGC < 0 then
colonna := 'IM_RAE_A2_SPESE_OGC';
importo := aggrPdgSpeDet.IM_RAE_A2_SPESE_OGC;
elsif aggrPdgSpeDet.IM_RAF_A2_SPESE_OGC_ALTRA_UO < 0 then
colonna := 'IM_RAF_A2_SPESE_OGC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RAF_A2_SPESE_OGC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RAH_A3_COSTI_FINALI < 0 then
colonna := 'IM_RAH_A3_COSTI_FINALI';
importo := aggrPdgSpeDet.IM_RAH_A3_COSTI_FINALI;
elsif aggrPdgSpeDet.IM_RAI_A3_COSTI_ALTRO_CDR < 0 then
colonna := 'IM_RAI_A3_COSTI_ALTRO_CDR';
importo := aggrPdgSpeDet.IM_RAI_A3_COSTI_ALTRO_CDR;
elsif aggrPdgSpeDet.IM_RAL_A3_SPESE_ODC < 0 then
colonna := 'IM_RAL_A3_SPESE_ODC';
importo := aggrPdgSpeDet.IM_RAL_A3_SPESE_ODC;
elsif aggrPdgSpeDet.IM_RAM_A3_SPESE_ODC_ALTRA_UO < 0 then
colonna := 'IM_RAM_A3_SPESE_ODC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RAM_A3_SPESE_ODC_ALTRA_UO;
elsif aggrPdgSpeDet.IM_RAN_A3_SPESE_OGC < 0 then
colonna := 'IM_RAN_A3_SPESE_OGC';
importo := aggrPdgSpeDet.IM_RAN_A3_SPESE_OGC;
elsif aggrPdgSpeDet.IM_RAO_A3_SPESE_OGC_ALTRA_UO < 0 then
colonna := 'IM_RAO_A3_SPESE_OGC_ALTRA_UO';
importo := aggrPdgSpeDet.IM_RAO_A3_SPESE_OGC_ALTRA_UO;
end if;
end loop;
If statoVar Is Not Null And statoVar = 'PRD' Then
Rollback To Savepoint VARIAZIONE_DEFINITIVA;
End If;
end;
-- FUNZIONE CHE, PER IL 2005, RECUPERA LA VOCE SPESA CNR DALLA VOCE SPESA CDS
Function getvocecnrfromvocecds (aEs_residuo NUMBER,
aCDR linea_attivita.CD_CENTRO_RESPONSABILITA%Type,
acdLinea linea_attivita.CD_LINEA_ATTIVITA%Type,
aEs_voce elemento_voce.esercizio%Type,
ti_gest elemento_voce.ti_gestione%Type,
ti_app elemento_voce.ti_appartenenza%Type,
aElem_voce elemento_voce.cd_elemento_voce%Type)
Return Voce_f.CD_VOCE%Type Is
aLinea linea_attivita%Rowtype;
aEV_in elemento_voce%Rowtype;
Begin
Select *
Into aLinea
From linea_attivita
Where CD_CENTRO_RESPONSABILITA = aCDR And
CD_LINEA_ATTIVITA = acdLinea;
Select *
Into aEV_in
From elemento_voce
Where esercizio = aEs_voce and
ti_gestione = ti_gest and
ti_appartenenza = ti_app and
cd_elemento_voce = aElem_voce;
Return cnrctb075.getvocecnrfromvocecds (aEs_residuo, aLinea, aEV_in);
End;
Function getvocecnrfromvocecds (aEs_residuo NUMBER,
aLinea linea_attivita%Rowtype,
aEV_in elemento_voce%Rowtype)
Return Voce_f.CD_VOCE%Type Is
aLineaPrimo cdr%rowtype;
aUO unita_organizzativa%rowtype;
aUOCDS unita_organizzativa%rowtype;
aVoce voce_f%rowtype;
aCodiceCDSCap varchar2(30);
aCodiceCDSSottoart varchar2(30);
aCDSPresidenteArea unita_organizzativa%rowtype;
aLineaArea cdr%rowtype;
aUOArea unita_organizzativa%rowtype;
aCodiceVoce varchar2(50);
aAss ass_ev_ev%rowtype;
aTemp varchar2(50);
aCategoria varchar2(1);
anno_2006 NUMBER;
aCDS_voce unita_organizzativa.cd_unita_organizzativa%Type;
ACD_TIT_CAP_FISSO VOCE_F.CD_TITOLO_CAPITOLO%Type;
aUOPresidenteArea unita_organizzativa.cd_unita_organizzativa%Type;
aCdsSAC unita_organizzativa%Rowtype;
CD_CDS_PADRE unita_organizzativa.cd_unita_organizzativa%Type;
TIPO_CDR unita_organizzativa.CD_TIPO_UNITA%Type;
TIPO_NATURA NATURA.TIPO%Type;
Begin
Select Min(esercizio)
Into anno_2006
From parametri_cnr
Where FL_REGOLAMENTO_2006 = 'Y';
If aEs_residuo < ANNO_2006 Then
-- Le regole di imputazione su bilancio finanziario CNR parte spese sono:
-- CDR di I livello e dettaglio di natura 1-4 -> Sottoarticolo proprio del capitolo
-- CDR di I livello e dettaglio di natura 5 -> Sottoarticolo nat. 5 area del CDS pres. dell' area
-- CDR di II livello (CDS area) natura 1-4 -> Sottoarticolo nat. 1-4 area del CDS pres. area
Dbms_Output.PUT_LINE (' 2005 ');
aLineaPrimo := CNRCTB020.GETCDRVALIDO(aEv_in.esercizio,aLinea.cd_centro_responsabilita);
-- Leggo l'UO del CDR DI PRIMO LIVELLO DI QUELLO CHE PASSO E NE DERIVO IL CDS
aUO := CNRCTB020.GETUOVALIDA(aEv_in.esercizio,aLineaPrimo.cd_unita_organizzativa);
select *
into aUOCDS
from unita_organizzativa
Where cd_unita_padre = aUO.cd_unita_padre
and fl_uo_cds = 'Y';
Dbms_Output.PUT_LINE (' 2005 a');
aUOCDS := CNRCTB020.GETUOVALIDA(aEv_in.esercizio,aUOCDS.cd_unita_organizzativa);
aCodiceCDSCap:=aUOCDS.cd_unita_padre; -- Di default il capitolo e il CDS del CDR di primo livello che aggrega
aCodiceCDSSottoart := aUOCDS.cd_unita_padre; -- Di default il Codice proprio del sottoarticolo ט = al codice del CDS
Dbms_Output.PUT_LINE (' 2005 b');
if aUOCDS.cd_tipo_unita = CNRCTB020.TIPO_AREA then
Dbms_Output.PUT_LINE (' 2005 c');
aCDSPresidenteArea:=CNRCTB020.getCDSPresidenteArea(aEv_in.esercizio, aLineaPrimo);
if aCDSPresidenteArea.cd_unita_organizzativa is not null then
aCodiceCDSCap := aCDSPresidenteArea.cd_unita_organizzativa;
else
IBMERR001.RAISE_ERR_GENERICO('(1) Cds presidente dell''AREA: '''||aUOCDS.cd_unita_padre||''' non trovato!!!');
end if;
end if;
if aLinea.cd_natura = CNRCTB001.NATURA_5 Then
Dbms_Output.PUT_LINE (' 2005 d');
-- Se i dettagli sono di natura 5 devo recuperare il CDS presidente di area
-- Estraggo l'area da cd_cds del dettaglio di aggregazione
begin
select * into aUOArea
from unita_organizzativa where
cd_unita_padre = CNRUTL001.GETCDSFROMCDR(aLinea.cd_centro_responsabilita)
and fl_uo_cds = 'Y';
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Area di ricerca con codice '''||CNRUTL001.GETCDSFROMCDR(aLinea.cd_centro_responsabilita)||''' non trovata!');
end;
Dbms_Output.PUT_LINE (' 2005 e');
aUOArea := CNRCTB020.GETUOVALIDA(aEv_in.esercizio,aUOArea.cd_unita_organizzativa);
select *
into aLineaArea
from cdr
where cd_unita_organizzativa = aUOArea.cd_unita_organizzativa
and to_number(cd_proprio_cdr) = 0;
aLineaArea := CNRCTB020.GETCDRVALIDO(aEv_in.esercizio, aLineaArea.cd_centro_responsabilita);
Dbms_Output.PUT_LINE (' 2005 f');
-- Dall'area estraggo il presidente dell'area
aCDSPresidenteArea:=CNRCTB020.getCDSPresidenteArea(aEv_in.esercizio, aLineaArea);
if aCDSPresidenteArea.cd_unita_organizzativa is not null then
aCodiceCDSCap:=aCDSPresidenteArea.cd_unita_organizzativa;
aCodiceCDSSottoart:= CNRUTL001.GETCDSFROMCDR(aLinea.cd_centro_responsabilita);
else
IBMERR001.RAISE_ERR_GENERICO('(2) Cds presidente dell''AREA: '''||aUOArea.cd_unita_padre||''' non trovato!!!');
end if;
end if; -- natura 5
Dbms_Output.PUT_LINE (' 2005 g');
-- Leggo la voce_f su cui mettere i valori
-- Si tratta di sottoarticolo spesa CNR dove entro con
-- cd_proprio_voce = codice cds (Sottoarticolo proprio del CDS)
-- cd_cds codice del CDS
-- cd_natura = quella dell'aggregato
-- cd_funzione = quella dell'aggregato
-- ti_voce = 'E' (Sottoarticolo)
-- cd_categoria = '1' per MACROISTITUTI e '2' per SAC
-- cd_voce like cd_titolo.%
-- Se il dettaglio ט del SAC e non ט di natura 5
if aUOCDS.cd_tipo_unita = CNRCTB001.TIPOCDS_SAC and not aLinea.cd_natura = CNRCTB001.NATURA_5 then
Dbms_Output.PUT_LINE (' 2005 h');
-- in aCodiceVoce c'ט la tipologia di intervento (che va in CATEGORIA 2 parte 1 spesa CNR)
aCodiceVoce := aEV_in.cd_elemento_PADRE;
Else
Dbms_Output.PUT_LINE (' 2005 i');
aTemp := aEV_in.cd_elemento_PADRE;
begin
select *
into aAss
from ass_ev_ev
Where esercizio = aEv_in.esercizio
and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR
and ti_gestione = CNRCTB001.GESTIONE_SPESE
and ti_elemento_voce = CNRCTB001.TITOLO
and ti_appartenenza_coll = CNRCTB001.APPARTENENZA_CDS
and ti_gestione_coll = CNRCTB001.GESTIONE_SPESE
and ti_elemento_voce_coll = CNRCTB001.TITOLO
and cd_elemento_voce_coll = aTemp;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Nessuna associazione con titolo spesa CNR trovata per titolo spesa CDS: '||aEv_in.cd_elemento_voce||' atemp: '||aTemp);
end;
aCodiceVoce:=aAss.cd_elemento_voce;
Dbms_Output.PUT_LINE (' 2005 j');
end if;
begin
Dbms_Output.PUT_LINE (' 2005 k');
-- Se il dettaglio ט del SAC e non ט di natura 5 la categoria ט 2, altrimenti 1
if aUOCDS.cd_tipo_unita = CNRCTB001.TIPOCDS_SAC and aLinea.cd_natura != CNRCTB001.NATURA_5 then
Dbms_Output.PUT_LINE (' 2005 k 1');
aCategoria := CNRCTB001.CATEGORIA2_SPESE_CNR;
Dbms_Output.PUT_LINE (' 2005 k 1.1 '||aEv_in.esercizio||' '||CNRCTB001.APPARTENENZA_CDS||' '||
CNRCTB001.GESTIONE_SPESE||' '||
CNRCTB001.APPARTENENZA_CNR||' '||
aEv_in.cd_elemento_voce);
select cd_elemento_voce_coll
into aCodiceVoce
from ass_ev_ev
Where esercizio = aEv_in.esercizio
and ti_appartenenza = CNRCTB001.APPARTENENZA_CDS
and ti_gestione = CNRCTB001.GESTIONE_SPESE
-- and ti_elemento_voce = CNRCTB001.TITOLO
and ti_appartenenza_coll = CNRCTB001.APPARTENENZA_CNR
and ti_gestione_coll = CNRCTB001.GESTIONE_SPESE
-- and ti_elemento_voce_coll = CNRCTB001.TITOLO
and cd_elemento_voce = aEv_in.cd_elemento_voce;
Else
Dbms_Output.PUT_LINE (' 2005 k 2');
aCategoria := CNRCTB001.CATEGORIA1_SPESE_CNR;
end if;
Dbms_Output.PUT_LINE (' 2005 l ');
select *
into aVoce
from voce_f
Where esercizio = aEv_in.esercizio And
ti_gestione = CNRCTB001.GESTIONE_SPESE And
ti_appartenenza = CNRCTB001.APPARTENENZA_CNR And
cd_proprio_voce = aCodiceCDSSottoart And
cd_cds = aCodiceCDSCap And
cd_natura = aLinea.cd_natura And
cd_funzione = aLinea.cd_funzione And
ti_voce = CNRCTB001.SOTTOARTICOLO And
cd_categoria = aCategoria
-- Per la categoria 1 entro con una cd_voce like aCodiceVoce=titolo
-- Per la categoria 2 identifico la voce dal campo cd_titolo_capitolo = aCodiceVoce=tipologia di intervento
and ((aCategoria = CNRCTB001.CATEGORIA2_SPESE_CNR and cd_titolo_capitolo = aCodiceVoce) Or
(aCategoria = CNRCTB001.CATEGORIA1_SPESE_CNR and cd_voce like aCodiceVoce||'.%'));
Return aVoce.CD_VOCE;
exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('Sottoarticolo di spesa non trovata per voce del piano: '||aCodiceVoce||
' cd_cds = '||aCodiceCDSCap||
' AND CD_PROPRIO_VOCE = '||aCodiceCDSSottoart||
' AND CD_natura = '||aLinea.cd_natura||
' AND CD_funzione = '||aLinea.cd_funzione||
' ti_voce: '||CNRCTB001.SOTTOARTICOLO||
' AND cd_categoria ='||aCategoria||
' aCodiceVoce: '||aCodiceVoce
);
End;
Else
----------------------------------------------------------------------------------------------
-------------------------------------- PER IL 2006 ------------------------------------------
----------------------------------------------------------------------------------------------
Begin
-- recupero il TIPO NATURA (INT/EST)
select NATURA.TIPO
into TIPO_NATURA
from NATURA, LINEA_ATTIVITA
Where LINEA_ATTIVITA.CD_CENTRO_RESPONSABILITA = aLinea.CD_CENTRO_RESPONSABILITA And
LINEA_ATTIVITA.CD_LINEA_ATTIVITA = aLinea.CD_LINEA_ATTIVITA And
LINEA_ATTIVITA.CD_NATURA = NATURA.CD_NATURA;
-- recupero il CDS della SAC
aCdsSAC := CNRCTB020.GETCDSSACVALIDO(aEV_in.ESERCIZIO);
------------------------------- NUOVA GESTIONE ---------------------------------
-- Le regole di imputazione su bilancio finanziario CNR parte spese sono:
-- I livello: CDS di origine (o Presidente dell'Area indicata da me)
-- II livello: La natura, "1" per Fonti Interne e "2" per Fonti Esterne
-- III livello: CDS/Area a seconda dei casi
-- estraggo il CDS del CdR di Origine per il primo livello della voce
-- estraggo la Natura per il secondo livello della voce
-- estraggo l'area per il terzo livello della voce
-- estraggo il CDS del CdR di I livello originale (per l'identificazione della voce)
Begin
Select CDS.CD_UNITA_ORGANIZZATIVA, CDS.CD_TIPO_UNITA
Into CD_CDS_PADRE, TIPO_CDR
From CDR, UNITA_ORGANIZZATIVA UO, UNITA_ORGANIZZATIVA CDS
Where CDR.CD_CENTRO_RESPONSABILITA = aLinea.CD_CENTRO_RESPONSABILITA And
CDR.CD_UNITA_ORGANIZZATIVA = UO.CD_UNITA_ORGANIZZATIVA And
UO.CD_UNITA_PADRE = CDS.CD_UNITA_ORGANIZZATIVA;
Exception
When No_Data_Found Then
CD_CDS_PADRE := Null;
TIPO_CDR := Null;
End;
/***** inizio controllo CdR / CDS / AREE ********/
If TIPO_CDR = CNRCTB001.TIPOCDS_SAC Then
aCDS_voce := aCdsSAC.cd_unita_organizzativa;
aCodiceCDSSottoart := aCdsSAC.cd_unita_organizzativa;
-- RECUPERO PARTE/TITOLO/CATEGORIA FISSA DALLA CONFIGURAZIONE_CNR PER LA SAC
ACD_TIT_CAP_FISSO := CNRCTB015.GETVAL01PERCHIAVE(aEV_in.ESERCIZIO, 'ELEMENTO_VOCE_SPECIALE', 'CD_TITOLO_CAPITOLO_BIL_CNR_SAC');
aCategoria := CNRCTB001.CATEGORIA2_SPESE_CNR;
Elsif TIPO_CDR In (CNRCTB001.TIPOCDS_IST, CNRCTB001.TIPOCDS_PNIR) Then
aCDS_voce := CNRUTL001.getCdsFromCdr(aLinea.cd_centro_responsabilita);
aCodiceCDSSottoart := CNRUTL001.getCdsFromCdr(aLinea.cd_centro_responsabilita);
-- RECUPERO PARTE/TITOLO/CATEGORIA FISSA DALLA CONFIGURAZIONE_CNR PER LA NON SAC
ACD_TIT_CAP_FISSO := CNRCTB015.GETVAL01PERCHIAVE(aEV_in.ESERCIZIO, 'ELEMENTO_VOCE_SPECIALE', 'CD_TITOLO_CAPITOLO_BIL_CNR_NO_SAC');
aCategoria := CNRCTB001.CATEGORIA1_SPESE_CNR;
Elsif TIPO_CDR = CNRCTB001.TIPOCDS_AREA Then -- Se il dettaglio ט di un'area,
-- vedo qual'ט la UO Presidente dell'AREA
Begin
Select CD_UNITA_ORGANIZZATIVA
Into aUOPresidenteArea
From ass_uo_area
Where esercizio = aEV_in.ESERCIZIO And
CD_AREA_RICERCA = CD_CDS_PADRE And
FL_PRESIDENTE_AREA = 'Y';
Exception
When No_Data_Found Then
IBMERR001.RAISE_ERR_GENERICO('UO presidente dell''AREA: '''||CD_CDS_PADRE||''' non trovata !!!');
End;
-- recupero il CDS presidente di Area
Select CDS.*
Into aCDSPresidenteAREA
From UNITA_ORGANIZZATIVA UO, UNITA_ORGANIZZATIVA CDS
Where UO.CD_UNITA_ORGANIZZATIVA = aUOPresidenteArea And
UO.CD_UNITA_PADRE = CDS.CD_UNITA_ORGANIZZATIVA And
CDS.FL_CDS = 'Y';
Dbms_Output.PUT_LINE (' aCDSPresidenteAREA '||aCDSPresidenteAREA.cd_unita_organizzativa);
If aCDSPresidenteAREA.cd_unita_organizzativa = CNRUTL001.getCdsFromCdr(aLinea.cd_centro_responsabilita) Then -- se il CDS Presidente dell'Area sono io
aCDS_voce := CNRUTL001.getCdsFromCdr(aLinea.cd_centro_responsabilita);
aCodiceCDSSottoart := CD_CDS_PADRE;
Elsif CNRUTL001.getCdsFromCdr(aLinea.cd_centro_responsabilita) != aCDSPresidenteAREA.cd_unita_organizzativa Then -- se il CDS Presidente dell'Area NON sono io
aCDS_voce := aCDSPresidenteAREA.cd_unita_organizzativa;
aCodiceCDSSottoart := CD_CDS_PADRE;
End If;
ACD_TIT_CAP_FISSO := CNRCTB015.GETVAL01PERCHIAVE(aEV_in.ESERCIZIO, 'ELEMENTO_VOCE_SPECIALE', 'CD_TITOLO_CAPITOLO_BIL_CNR_NO_SAC');
aCategoria := CNRCTB001.CATEGORIA1_SPESE_CNR;
End If;
/***** fine controllo CdR / CDS / AREE ********/
If TIPO_NATURA = 'FIN' Then -- devo usare la voce con natura 1
-- Leggo la voce_f su cui mettere i valori
-- La ricerca ט per:
-- Esercizio
-- tipo gestione
-- tipo appartenenza
-- cd_cds: codice del CDS di origine o del presidente dell'Area
-- cd_natura = a seconda selle colonne del gestionale (Interna => Natura 1)
-- cd_funzione = fissa a '01', unica utilizzabile
-- ti_voce = 'E' (Sottoarticolo)
-- cd_categoria = '1' fissa per tutti (anche per la SAC)
-- cd_titolo_capitolo da configurazione (fisso a 1.01.1)
Begin
-- SELEZIONO LA VOCE PER LE SPESE INTERNE
select *
into aVoce
from voce_f
Where esercizio = aEV_in.ESERCIZIO
and ti_gestione = CNRCTB001.GESTIONE_SPESE
and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR
and cd_proprio_voce = aCodiceCDSSottoart
and cd_cds = aCDS_voce
And CD_TITOLO_CAPITOLO = ACD_TIT_CAP_FISSO
and cd_natura = '1' -- (FONTI INTERNE)
and cd_funzione = '01' -- DA SOSTITUIRE
and ti_voce = CNRCTB001.SOTTOARTICOLO
and cd_categoria = aCATEGORIA;
Exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('2. Voce non trovata per Esercizio: '||aEV_in.ESERCIZIO||
', Titolo/Capitolo: '||ACD_TIT_CAP_FISSO||', CDS: '||aCDS_voce||
', Propria Voce: '||aCodiceCDSSottoart||', natura: 1, funzione: 01, cat.:'||aCATEGORIA);
End;
End If;
-- SECONDO GIRO PER LE SPESE ESTERNE
If TIPO_NATURA = 'FES' Then
-- RECUPERO LA VOCE DA USARE PER LE SPESE ESTERNE (NAT 2)
Begin
select *
into aVoce
from voce_f
Where esercizio = aEV_in.ESERCIZIO
and ti_gestione = CNRCTB001.GESTIONE_SPESE
and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR
and cd_proprio_voce = aCodiceCDSSottoart
and cd_cds = aCDS_voce
And CD_TITOLO_CAPITOLO = ACD_TIT_CAP_FISSO
and cd_natura = '2' -- (FONTI ESTERNE)
and cd_funzione = '01' -- DA SOSTITUIRE
and ti_voce = CNRCTB001.SOTTOARTICOLO
and cd_categoria = aCATEGORIA;
Exception when NO_DATA_FOUND then
IBMERR001.RAISE_ERR_GENERICO('1. Voce non trovata per Esercizio: '||aEV_in.ESERCIZIO||
', Titolo/Capitolo: '||ACD_TIT_CAP_FISSO||', CDS: '||aCDS_voce||
', Propria Voce: '||aCodiceCDSSottoart||', natura: 1, funzione: 01, cat.:'||ACATEGORIA);
End;
End If;
Return AVOCE.CD_VOCE;
End;
End If;
End;
Procedure genera_varente_da_Varstanzres (aEsercizio NUMBER,
aPG_VARIAZIONE NUMBER,
aUser VARCHAR2,
cds_var_bil Out VARCHAR2,
es_var_bil Out NUMBER,
ti_app_var_bil Out CHAR,
pg_var_bil Out NUMBER) Is
aVar var_bilancio%rowtype;
aVarDet var_bilancio_det%rowtype;
aTotVar number(15,2);
aOldVoceAgg varchar2(30);
aVoceF voce_f%rowtype;
aPgVar number(10);
aTSNow DATE;
TESTATA_CREATA CHAR(1);
aSaldoCdrLinea voce_f_saldi_cdr_linea%Rowtype;
aVAR_STANZ_RES VAR_STANZ_RES%Rowtype;
variazione_da_fare NUMBER;
TIPO VAR_BILANCIO.TI_VARIAZIONE%Type;
CAUSALE VAR_BILANCIO.CD_CAUSALE_VAR_BILANCIO%Type;
recParametriCNR PARAMETRI_CNR%Rowtype;
Begin
recParametriCNR := CNRUTL001.getRecParametriCnr(aEsercizio);
--27/11/2015: RafPag: Se ט attiva la nuova gestione esco perchט non deve essere piש creata
--la variazione a livello Ente
If recParametriCNR.fl_nuovo_pdg='Y' Then
return;
End If;
Begin
Select *
Into aVAR_STANZ_RES
From VAR_STANZ_RES
Where ESERCIZIO = aEsercizio And
PG_VARIAZIONE = aPG_Variazione;
Exception
When No_Data_Found Then
IBMERR001.RAISE_ERR_GENERICO('Attenzione !!! Non esiste la Variazione allo Stanziamento Residuo '||aEsercizio||'/'||aPG_VARIAZIONE);
End;
aTSNow := sysdate;
Begin
Select 1
Into variazione_da_fare
From V_VAR_STANZ_RES_VOCE_CNR
Where ESERCIZIO = aVAR_STANZ_RES.ESERCIZIO And
PG_VARIAZIONE = aVAR_STANZ_RES.PG_VARIAZIONE
Group By ESERCIZIO_RES, ESERCIZIO_VOCE, /*TITOLO_CNR,*/ CD_CDS
Having Sum(IM_VARIAZIONE) != 0;
Exception
When No_Data_Found Then
variazione_da_fare := 0; -- la variazione allo stanziamento residuo non necessita di variazione al bilancio
Dbms_Output.PUT_LINE ('C');
When Too_Many_Rows Then
variazione_da_fare := 1;
End;
--------- LOOP SULLA VARIAZIONE ALLO STANZIAMENTO RESIDUO
If variazione_da_fare = 1 Then
-- DEVO CAPIRE CHE COS'E', SE UNO STORNO O UNA ECONOMIA
Declare
TOT_VARIAZIONE NUMBER;
Begin
Select Sum(IM_VARIAZIONE)
Into TOT_VARIAZIONE
From V_VAR_STANZ_RES_VOCE_CNR
Where ESERCIZIO = aVAR_STANZ_RES.ESERCIZIO And
PG_VARIAZIONE = aVAR_STANZ_RES.PG_VARIAZIONE;
If TOT_VARIAZIONE = 0 Then
TIPO := CNRCTB054.TI_VAR_STORNO_S;
CAUSALE := CNRCTB054.CAU_VAR_STO_STANZ_RES;
Elsif TOT_VARIAZIONE < 0 Then
TIPO := CNRCTB054.TI_VAR_ECO_RES_S;
CAUSALE := CNRCTB054.CAU_ECO_STANZ_RES;
Elsif TOT_VARIAZIONE > 0 Then
IBMERR001.RAISE_ERR_GENERICO('Attenzione !!! La Variazione allo Stanziamento Residuo '||aEsercizio||'/'||aPG_VARIAZIONE||' non puע avere saldo positivo (maggiori spese).');
End If;
End;
For VAR_STANZ_RAGGRUPPATE In (Select ESERCIZIO_RES, ESERCIZIO_VOCE, CD_VOCE_CNR,
Sum(IM_VARIAZIONE) VAR_ENTE
From V_VAR_STANZ_RES_VOCE_CNR
Where ESERCIZIO = aVAR_STANZ_RES.ESERCIZIO And
PG_VARIAZIONE = aVAR_STANZ_RES.PG_VARIAZIONE
Group By ESERCIZIO_RES, ESERCIZIO_VOCE, CD_VOCE_CNR
Having Sum(IM_VARIAZIONE) != 0) Loop
--------------------------- FASE FINALE, CREAZIONE DELLA VARIAZIONE ------------------------
-- Creo una variazione di bilancio con n dettagli corrispondenti ai dati di storno allo
-- Stanziamento Residuo
If Nvl(TESTATA_CREATA, 'N') = 'N' Then -- PER CREARE UNA SOLA TESTATA PER OGNI VARIAZIONE
aPgVar := CNRCTB055.getPgVariazione(aVAR_STANZ_RES.ESERCIZIO, CNRCTB020.GETCDCDSENTE (aVAR_STANZ_RES.ESERCIZIO));
-- Creo la TESTATA DELLA variazione
aVar.CD_CDS := CNRCTB020.GETCDCDSENTE (aVAR_STANZ_RES.ESERCIZIO);
aVar.ESERCIZIO := aVAR_STANZ_RES.ESERCIZIO;
aVar.ESERCIZIO_IMPORTI:= VAR_STANZ_RAGGRUPPATE.ESERCIZIO_RES;
aVar.TI_APPARTENENZA := CNRCTB001.APPARTENENZA_CNR;
aVar.PG_VARIAZIONE := aPgVar;
aVar.DS_VARIAZIONE := 'Variazione Automatica per approvazione Variazione allo stanziamento residuo '||aVAR_STANZ_RES.ESERCIZIO||'/'||aVAR_STANZ_RES.PG_VARIAZIONE;
aVar.DS_DELIBERA := null;
aVar.TI_VARIAZIONE := TIPO;
aVar.CD_CAUSALE_VAR_BILANCIO := CAUSALE;
aVar.STATO := CNRCTB054.STATO_VARIAZIONE_PROVVISORIA;
aVar.DUVA := aTSNow;
aVar.UTUV := aUser;
aVar.DACR := aTSNow;
aVar.UTCR := aUser;
aVar.PG_VER_REC := 1;
aVar.ESERCIZIO_VAR_STANZ_RES := aEsercizio;
aVar.PG_VAR_STANZ_RES := aPG_VARIAZIONE;
CNRCTB054.INS_VAR_BILANCIO(aVar);
TESTATA_CREATA := 'Y';
End If;
-- inserita la testata occorre inserire le righe
aVarDet := null;
aVarDet.CD_CDS := aVar.cd_cds;
aVarDet.ESERCIZIO := aVar.esercizio;
aVarDet.TI_APPARTENENZA := aVar.ti_appartenenza;
aVarDet.PG_VARIAZIONE := aVar.pg_variazione;
aVarDet.TI_GESTIONE := CNRCTB001.GESTIONE_SPESE;
aVarDet.CD_VOCE := VAR_STANZ_RAGGRUPPATE.CD_VOCE_CNR;
aVarDet.IM_VARIAZIONE := VAR_STANZ_RAGGRUPPATE.VAR_ENTE;
aVarDet.DUVA := aTSNow;
aVarDet.UTUV := aUser;
aVarDet.DACR := aTSNow;
aVarDet.UTCR := aUser;
aVarDet.PG_VER_REC := 1;
--Dbms_Output.put_line (aVar.cd_cds||' '||aVar.esercizio||' '||aVar.ti_appartenenza||' '||aVar.pg_variazione||' '||CNRCTB001.GESTIONE_SPESE||' '||VAR_STANZ_RAGGRUPPATE.CD_VOCE_CNR);
CNRCTB054.INS_VAR_BILANCIO_DET(aVarDet);
/* NON OCCORRE AGGIORNARE I SALDI PER CDR/LINEA */
End Loop;
End If;
cds_var_bil := aVar.cd_cds;
es_var_bil := aVar.esercizio;
ti_app_var_bil := aVar.ti_appartenenza;
pg_var_bil := aVar.pg_variazione;
End;
end;
© 2015 - 2024 Weber Informatics LLC | Privacy Policy