All Downloads are FREE. Search and download functionalities are using the official Maven repository.

expsigladb.Package.CNRCTB047_BODY.sql Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
--------------------------------------------------------
--  DDL for Package Body CNRCTB047
--------------------------------------------------------

  CREATE OR REPLACE PACKAGE BODY "CNRCTB047" is

procedure delete_vsx(aPgCall number) is
begin
	 delete from vsx_chiusura
	 where pg_call = aPgCall;
end;

procedure inizializzaRiassunto is
begin
	-- inizializzo le variabili globali per il log riassuntivo
	totImp := 0;
	totImpRes := 0;
	totObb := 0;
	totObbResPro := 0;
	totObbPlur := 0;
	totAnnPGiro := 0;
	totAcc := 0;
	totAccPlur := 0;
	totAccRes := 0;
	totImpRip := 0;
	totImpResRip := 0;
	totObbRip := 0;
	totObbResPRoRip := 0;
	totObbPlurRip := 0;
	totAnnPGiroRip := 0;
	totAccRip := 0;
	totAccPlurRip := 0;
	totAccResRip := 0;
	imRiportatoSpesa := 0;
	imNonRiportatoSpesa := 0;
	imRiportatoEntrata := 0;
	imNonRiportatoEntrata := 0;
end;

procedure aggiornaRiassunto(aObb obbligazione%rowtype, docRiportato boolean) is
begin
	-- totale documenti processati
	if aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_IMP then
		totImp := totImp + 1;
	elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_IMP_RES then
		totImpRes := totImpRes + 1;
	elsif (aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB and aObb.esercizio = aObb.esercizio_competenza) then
		totObb := totObb + 1;
	elsif (aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB and aObb.esercizio <> aObb.esercizio_competenza) then
		totObbPlur := totObbPlur + 1;
	elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_RES_PRO Then
	        totObbResPro := totObbResPro + 1;
	elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_PGIRO then
		totAnnPGiro := totAnnPGiro + 1;
	end if;

	-- totale documenti riportati e im documenti riportati/non riportati
	if docRiportato then
		if aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_IMP then
			totImpRip := totImpRip + 1;
		elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_IMP_RES then
			totImpResRip := totImpResRip + 1;
		elsif (aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB and aObb.esercizio = aObb.esercizio_competenza) then
			totObbRip := totObbRip + 1;
		elsif (aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB and aObb.esercizio <> aObb.esercizio_competenza) then
			totObbPlurRip := totObbPlurRip + 1;
        	elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_RES_PRO Then
                        totObbResPRoRip := totObbResPRoRip + 1;
		elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_PGIRO then
			totAnnPGiroRip := totAnnPGiroRip + 1;
		end if;
		imRiportatoSpesa := imRiportatoSpesa + aObb.im_obbligazione;
	else -- doc non riportato
		imNonRiportatoSpesa := imNonriportatoSpesa + aObb.im_obbligazione;
	end if;
end;

procedure aggiornaRiassunto(aAcc accertamento%rowtype, docRiportato boolean) is
begin
	-- totale documenti processati
	if aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC then
	   totAcc := totAcc + 1;
	elsif aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_RES then
	   totAccRes := totAccRes + 1;
	elsif aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_PGIRO then
	   totAnnPGiro := totAnnPGiro + 1;
	elsif aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_PLUR then
	   totAccPlur := totAccPlur + 1;
	end if;

	-- totale documenti riportati e im documenti riportati/non riportati
	if docRiportato then
		if aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC then
		   totAccRip := totAccRip + 1;
		elsif aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_RES then
		   totAccResRip := totAccRip + 1;
		elsif aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_PGIRO then
		   totAnnPGiroRip := totAnnPGiroRip + 1;
		elsif aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_PLUR then
		   totAccPlurRip := totAccPlurRip + 1;
		end if;
		imRiportatoEntrata := imRiportatoEntrata + aAcc.im_accertamento;
	else -- doc non riportato
		imNonRiportatoEntrata := imNonriportatoEntrata + aAcc.im_accertamento;
	end if;
end;

function riassunto return varchar2 is
Str varchar2(4000);
begin
	Str :=      'Impegni residui processati: '||totImpRes||', ';
	Str := Str||'Impegni residui riportati: '||totImpResRip||', ';
	Str := Str||'Impegni processati: '||totImp||', ';
	Str := Str||'Impegni riportati: '||totImpRip||', ';
	Str := Str||cnrutil.getLabelObbligazioni()||' residue processate: '||totObbResPro||', ';
	Str := Str||cnrutil.getLabelObbligazioni()||' residue riportate: '||totObbResProRip||', ';
	Str := Str||cnrutil.getLabelObbligazioni()||' pluriennali processate: '||totObbPlur||', ';
	Str := Str||cnrutil.getLabelObbligazioni()||' pluriennali riportate: '||totObbPlurRip||', ';
	Str := Str||'Accertamenti processati: '||totAcc||', ';
	Str := Str||'Accertamenti riportati: '||totAccRip||', ';
	Str := Str||'Accertamenti pluriennali processati: '||totAccPlur||', ';
	Str := Str||'Accertamenti pluriennali riportati: '||totAccPlurRip||',';
	Str := Str||'Annotazioni su partita di giro processate: '||totAnnPGiro||', ';
	Str := Str||'Annotazioni su partita di giro riportate: '||totAnnPGiroRip||'. ';
	Str := Str||'Importo di spesa riportato: '||imRiportatoSpesa||', ';
	Str := Str||'Importo di spesa non riportato: '||imNonRiportatoSpesa||', ';
	Str := Str||'Importo di entrata riportato: '||imRiportatoEntrata||', ';
	Str := Str||'Importo di entrata non riportato: '||imNonRiportatoEntrata;
	return Str;
end;

-- vsx_annullamentoDocCont
-- -----------------------
-- pre-post name: annullamento massivo di documenti contabili - risorsa non piש valida
-- pre: il documento contabile in processo ט stato nel frattempo modificato
-- post: viene creata una riga di log di errore. La procedura procede al successivo,
--       se esiste, documento da processare
--
-- pre-post name: annullamento massivo di documenti contabili - esercizio non aperto
-- pre: l'esercizio del documento non ט aperto per il cds
-- post: viene creata una riga di log di errore. La procedura procede al successivo,
--       se esiste, documento da processare
--
--
-- pre-post name: annullamento massivo di documenti contabili - documento riportato
--                all'esercizio successivo, ma non riportabile indietro
-- pre: il documento contabile in processo ט ancora valido, risulta riportato all'esercizio
--      successivo, ma non soddisfa le condizione per essere riportato all'esercizio origine
-- post: viene creata una riga di log dell'errore sollevato. La procedura procede
--       al successivo, se esiste, documento da processare.
--
-- pre-post name: annullamento massivo di documenti contabili - errore nell'annullamento
-- pre: il documento contabile in processo ט ancora valido, non puע essere annullato
-- post: il documento viene riportato all'esercizio di partenza se risulta giא riportato, viene
--       generato un errore nella fase di annullamento, viene creata una riga di log
--       dell'errore sollevato. La procedura procede al successivo, se esiste, documento
--       da processare.
--
-- pre-post name: annullamento massivo di documenti contabili - operazione eseguita
-- pre: nessuna delle precedenti precondizioni ט soddisfatta
-- post: il documento viene riportato all'esercizio di partenza se risulta giא riportato,
--       viene annullato logicamente, viene creata una riga di log di avvenuto annullamento.
--       La procedura procede al successivo, se esiste, documento da processare.
--
-- Parametri:
-- aPgCall -> progressivo identificativo dei record nella vsx_chiusura
-- aPg_exec -> numero progressivo del batch
procedure vsx_annullamentoDocCont(aPgCall number, aPg_exec number) is
aObb obbligazione%rowtype;
aAcc accertamento%rowtype;
aDescDocCont varchar2(500);
aUser varchar2(20);
aEs number;
aDeltaSaldo voce_f_saldi_cdr_linea%Rowtype;
begin
	Select Distinct utcr, esercizio into aUser, aEs
	from vsx_chiusura
	where pg_call = aPgCall;

	for aCds in (select * from v_unita_organizzativa_valida
			 	 where esercizio = aEs
				   and fl_cds = 'Y'
				 order by cd_unita_organizzativa) loop
		for aDocCont in (select * from vsx_chiusura
					 	 where pg_call = aPgCall
						   and cd_cds_origine  = aCds.cd_unita_organizzativa) loop
			savepoint CNRCTB047_SP_002;
			begin
				if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
				    aAcc.cd_cds := aDocCont.cd_cds;
					aAcc.esercizio := aDocCont.esercizio;
					aAcc.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
					aAcc.pg_accertamento := aDocCont.pg_acc_obb;

					-- verifica della validitא della risorsa
					-- lock del documento
					CNRCTB035.LOCKDOCFULLCHECK(aAcc,aDocCont.pg_ver_rec_doc);

					aDescDocCont := 'Accertamento '||CNRCTB035.GETDESC(aAcc);

					-- verifico lo stato dell'esercizio
					if not cnrctb008.ISESERCIZIOAPERTO(aAcc.esercizio,aAcc.cd_cds) then
					   ibmerr001.RAISE_ERR_GENERICO('Esercizio '||aAcc.esercizio||' non aperto per il cds'||aAcc.cd_cds);
					end if;

					-- se il documento ט riportato, viene riportato indietro
					-- e quindi annullato
					if aAcc.riportato = 'Y' then
						CNRCTB046.DERIPORTOESNEXTACC(aAcc,aUser,sysdate);
					end if;

					CNRCTB035.ANNULLAACCERTAMENTO(aAcc.CD_CDS,
					                              aAcc.ESERCIZIO,
					                              aAcc.ESERCIZIO_ORIGINALE,
								      aAcc.PG_ACCERTAMENTO,
								      aUser);
				else
					aObb.cd_cds := aDocCont.cd_cds;
					aObb.esercizio := aDocCont.esercizio;
					aObb.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
					aObb.pg_obbligazione := aDocCont.pg_acc_obb;

					-- verifica della validitא della risorsa
					-- lock del documento
					CNRCTB035.LOCKDOCFULLCHECK(aObb,aDocCont.pg_ver_rec_doc);

					aDescDocCont := cnrutil.getLabelObbligazione()||' '||CNRCTB035.GETDESC(aObb);

					-- verifico lo stato dell'esercizio
					if not cnrctb008.ISESERCIZIOAPERTO(aObb.esercizio,aObb.cd_cds) then
					   ibmerr001.RAISE_ERR_GENERICO('Esercizio '||aObb.esercizio||' non aperto per il cds'||aObb.cd_cds);
					end if;

					-- se il documento ט riportato, viene riportato indietro
					-- e quindi annullato
					if aObb.riportato = 'Y' then
						CNRCTB046.DERIPORTOESNEXTOBB(aObb,aUser,sysdate);
					end if;

					CNRCTB035.ANNULLAOBBLIGAZIONE(aObb.CD_CDS,
					                              aObb.ESERCIZIO,
					                              aObb.ESERCIZIO_ORIGINALE,
								      aObb.PG_OBBLIGAZIONE,
								      aUser);
				end if;
				commit;
				ibmutl200.loginf(aPg_exec,DS_ANNULLAMENTO||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',aDescDocCont||': ט stato annullato','');
			exception when OTHERS then
				rollback to savepoint CNRCTB047_SP_002;
				IBMUTL200.LOGERR(aPg_exec,DS_ANNULLAMENTO||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',aDescDocCont||': '||DBMS_UTILITY.FORMAT_ERROR_STACK,'');
			end;

		end loop; -- ciclo sui documenti
	end loop; -- ciclo sui cds validi
end;


procedure job_annullamento_doc_cont(job number, pg_exec number, next_date date, aPgCall number, aUser varchar2) is
begin
-- updata batch_log_tsta e committa
	IBMUTL210.logStartExecutionUpd (pg_exec,
									LOG_TIPO_ANN_DOCCONT,
									job,
									'Richista utente: '||aUser,
									DS_ANNULLAMENTO||' Start:'||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'));
	begin
		vsx_annullamentoDocCont(aPgCall, pg_exec);
		delete_vsx(aPgCall);
		commit;
		-- Messaggio all'utente di operazione completata
		IBMUTL205.LOGINF(DS_ANNULLAMENTO, DS_ANNULLAMENTO||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),'Operazione completata (pg_exec='||pg_exec||')',aUser);
	exception when others then
		rollback;
		delete_vsx(aPgCall);
		commit;
		-- Messaggio di attenzione all'utente
		IBMUTL205.LOGWAR(DS_ANNULLAMENTO, DS_ANNULLAMENTO||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||')',DBMS_UTILITY.FORMAT_ERROR_STACK,aUser);
	end;
end;

-- vsx_riportoNextDocCont
-- ----------------------
-- pre-post name: riporto all'esercizio successivo - risorsa non piש valida
-- pre: il documento contabile in processo ט stato nel frattempo modificato
-- post: viene aggiornato il riassunto per il documento non riportato, e creata una
--       riga di log di errore. La procedura procede al successivo, se esiste,
--       documento da processare
--
-- pre-post name: riporto all'esercizio successivo - errore nel riportare il documento
-- pre: il documento contabile in processo ט ancora valido, viene sollevato un errore
--      nella procedura di riporto all'esercizio successivo
-- post: viene aggiornato il riassunto per il documento non riportato, e creata una
--       riga di log dell'errore sollevato. La procedura procede al successivo, se esiste,
--       documento da processare
--
-- pre-post name: riporto all'esercizio successivo - operazione eseguita
-- pre: nessuna delle pre condizioni precedenti
-- post: viene aggiornato il riassunto per il documento riportato, e crea una riga
--       di log di informazione all'utente di avvenuto ribaltamento. La procedura procede
--       al successivo, se esiste, documento da processare
--
-- Parametri:
-- aPgCall -> progressivo identificativo dei record nella vsx_chiusura
-- aPg_exec -> numero progressivo del batch

/* 02.01.2006 inizio procedura modificata */

procedure vsx_riportoNextDocCont(aPgCall number, aPg_exec NUMBER, inCDS VARCHAR2) is
aObb obbligazione%rowtype;
aAcc accertamento%rowtype;
aDescDocCont varchar2(500);
isRibaltabile char(1);
aUser varchar2(20);
aTSNow date;
aEs number;
aAccNew accertamento%rowtype;
aObbNew obbligazione%rowtype;
ERRORE CHAR(1) := 'N';
aCd_elemento_voce VARCHAR2(50);

Begin

select distinct esercizio_ribaltamento, utcr
into aEs, aUser
from vsx_chiusura
where pg_call = aPgCall;

aTSNow := sysdate;

-- 03.01.2006 STANI
IBMUTL001.LOCK_TRANSACTION;

Savepoint CNRCTB047_SP_001;

-- ciclo per tutti i CDS (per ribaltamento cds x cds, quindi nel nostro caso, inutile)

For aCds in (select * from v_unita_organizzativa_valida
	     where esercizio = aEs - 1 And
	           fl_cds = 'Y' And
	           cd_unita_organizzativa = inCDS
	     order by cd_unita_organizzativa) loop

-- prendo tutti i documenti presenti nel cursore da ribaltare per il CDS ciclato

For aDocCont in (select * from vsx_chiusura
	 	 where pg_call = aPgCall And
	 	       cd_cds_origine  = aCds.cd_unita_organizzativa) loop

--Savepoint CNRCTB047_SP_001;

Begin

  	if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then  -- accertamenti
 		aAcc.cd_cds := aDocCont.cd_cds;
  		aAcc.esercizio := aDocCont.esercizio;
  		aAcc.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
		aAcc.pg_accertamento := aDocCont.pg_acc_obb;
  		-- verifica della validitא del documento e lock della risorsa
  		CNRCTB035.LOCKDOCFULLCHECK(aAcc,aDocCont.pg_ver_rec_doc);
  		aDescDocCont := 'Accertamento '||CNRCTB035.GETDESC(aAcc);
  		cnrctb046.riportoEsNextAcc(aAcc, null,aUser, aTSNow);
  	else  -- obbligazioni
  		aObb.cd_cds := aDocCont.cd_cds;
  		aObb.esercizio := aDocCont.esercizio;
  		aObb.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
		aObb.pg_obbligazione := aDocCont.pg_acc_obb;
  		-- verifica della validitא del documento e lock della risorsa
  		CNRCTB035.LOCKDOCFULLCHECK(aObb,aDocCont.pg_ver_rec_doc);
  		aDescDocCont := cnrutil.getLabelObbligazione()||' '||CNRCTB035.GETDESC(aObb);
  		cnrctb046.riportoEsNextObb(aObb, null, null, aUser, aTSNow);
  	end if;

        -- logging
	if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
	  aAccNew := cnrctb048.GETDOCRIPORTATO(aAcc);
	     if aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_RES then
	 	declare
		  lNum number;
		begin
		  select 1 into lNum
		  from dual
		  where exists (select 1 from accertamento_scad_voce
			        where cd_cds  = aAcc.cd_cds And
                                      esercizio = aAcc.esercizio And
                                      esercizio_originale = aAcc.esercizio_originale And
                                      pg_accertamento = aAcc.pg_accertamento And
                                      cd_centro_responsabilita = CNRCTB015.GETVAL01PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE) And
                                      cd_linea_attivita = CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE));

  		  ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio con linea di attivitא di sistema. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
		exception when NO_DATA_FOUND then
		  ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
		end;
	     Elsif aAcc.cd_tipo_documento_cont in (CNRCTB018.TI_DOC_ACC, CNRCTB018.TI_DOC_ACC_PLUR) then
		   ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
	     Else  -- ACR_PGIRO
	           ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Annotazione su partita di giro '||aDescDocCont||': ט stato riportata al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
	     End if;

  	else -- spese
		aObbNew := cnrctb048.GETDOCRIPORTATO(aObb);
		if aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_PGIRO then
		   ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Annotazione su partita di giro '||aDescDocCont||': ט stato riportata al nuovo esercizio con numero '||aObbNew.pg_obbligazione||'. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
		elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB then
		   ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',cnrutil.getLabelObbligazione()||' '||aDescDocCont||': ט stato riportata al nuovo esercizio con numero '||aObbNew.pg_obbligazione||'. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
		elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_RES_PRO then
		   ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',cnrutil.getLabelObbligazione()||' di tipo "Residuo proprio" '||aDescDocCont||': ט stato riportata al nuovo esercizio con numero '||aObbNew.pg_obbligazione||'. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
		elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_RES_IMPRO then
		   ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',cnrutil.getLabelObbligazione()||' di tipo "Residuo improprio" '||aDescDocCont||': ט stato riportata al nuovo esercizio con numero '||aObbNew.pg_obbligazione||'. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
		else -- impegni
		   ibmutl200.LOGINF_TEMP(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Impegno '||aDescDocCont||': ט stato riportata al nuovo esercizio con numero '||aObbNew.pg_obbligazione||'. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
		end if;
	end if;

-- 	if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
-- 	   aggiornaRiassunto(aAcc, DOC_RIPORTATO);
-- 	else
-- 	   aggiornaRiassunto(aObb, DOC_RIPORTATO);
-- 	end if;

--        commit;

Exception when OTHERS then
--    rollback to savepoint CNRCTB047_SP_001;
    ERRORE := 'Y';
    if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
	  aggiornaRiassunto(aAcc, DOC_NON_RIPORTATO);
    else
	  aggiornaRiassunto(aObb, DOC_NON_RIPORTATO);
    end if;
    IBMUTL200.LOGERR_TEMP(aPg_exec,
                     DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',
                     'Riporto documento '||aDescDocCont||' fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,
                     '',
                     'N');

End;

End loop; -- ciclo sui documenti

Declare
  erroreDisp CHAR(1) := 'N';
  DISP_EXCEPTION   EXCEPTION;
Begin
If CNRCTB048.getcdsribaltato (aEs-1, inCDS) = 'N' Then
  ribalta_disp_improprie_int (aEs-1, inCDS, aUser,aPg_exec,erroreDisp);
  if erroreDisp='Y' Then
     RAISE DISP_EXCEPTION;
  End If;   
End If;

Update  parametri_cds
Set     fl_ribaltato = 'Y'
Where   ESERCIZIO = aEs-1 And
        CD_CDS = INcds;
Exception
When DISP_EXCEPTION Then
    ERRORE := 'Y';
When Others Then
    ERRORE := 'Y';
    IBMUTL200.LOGERR_TEMP(aPg_exec,
                     DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',
                     'Ribaltamento disponibilitא improprie fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,
                     '',
                     'N');
End;

End loop; -- ciclo sui cds

 If Nvl(ERRORE, 'N') = 'Y' Then
    rollback to savepoint CNRCTB047_SP_001;
 Else
    IBMUTL001.DEFERRED_COMMIT;
 End If;
End;

/* 02.01.2006 fine procedura modificata */

procedure job_riporto_next_doc_cont(job number, pg_exec number, next_date date, aPgCall number, aUser VARCHAR2, aCDS VARCHAR2) is
Str varchar2(4000);
begin
-- inserito il 09.01.2005
IBMUTL001.LOCK_TRANSACTION;

-- stani: questo committa all'interno
-- fa un update di BATCH_LOG_TSTA e poi committa

	IBMUTL210.logStartExecutionUpd_TEMP (pg_exec, LOG_TIPO_RIP_NEXT, job,
          'Richiesta utente: '||aUser,DS_RIPORTO_NEXT||' Start:'||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'));

-- mette una serie di variabili a 0
	inizializzaRiassunto;

	begin
		vsx_riportoNextDocCont(aPgCall, pg_exec, aCDS); -- ribaltamento vero e proprio
		delete_vsx(aPgCall);
-- stani: perchט non committa dentro
                IBMUTL001.DEFERRED_COMMIT;
		Str := riassunto;
		-- Messaggio all'utente di operazione completata

-- stani: anche questo committa dentro

  If IBMUTL200.get_err_batch_log_riga_temp Then
		IBMUTL205.LOGINF(DS_RIPORTO_NEXT,
		    DS_RIPORTO_NEXT||' '||
		    to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),'Operazione completata SENZA il ribaltamento dei documenti (verificare i documenti in errore nella funzione: '||
' "Funzionalitא di servizio/Logs Applicativi/Visualizzazione" per il Progressivo Esecuzione '||
		    pg_exec||')',
		    aUser);
  Else
		IBMUTL205.LOGINF(DS_RIPORTO_NEXT,
		    DS_RIPORTO_NEXT||' '||
		    to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),'Operazione completata CON il ribaltamento dei documenti (i documenti ribaltati sono consultabili nella funzione: '||
' "Funzionalitא di servizio/Logs Applicativi/Visualizzazione" per il Progressivo Esecuzione '||
		    pg_exec||')',
		    aUser);
  End If;

	exception when others then
		rollback;
		delete_vsx(aPgCall);
-- stani: perchט non committa dentro
                Commit;
		-- Messaggio di attenzione all'utente
		IBMUTL205.LOGWAR(DS_RIPORTO_NEXT,
		       DS_RIPORTO_NEXT||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||')',
		       DBMS_UTILITY.FORMAT_ERROR_STACK,
		       aUser);
	end;

--IBMUTL200.scarica_temp_in_BATCH_LOG_TSTA;
IBMUTL200.scarica_temp_in_BATCH_LOG_RIGA;
Commit;

end;

-- vsx_riportoPrevDocCont
-- ----------------------
-- pre-post name: riporto all'esercizio origine - risorsa non piש valida
-- pre: il documento contabile in processo ט stato nel frattempo modificato
-- post: viene creata una riga di log di errore. La procedura procede al successivo,
--       se esiste, documento da processare
--
-- pre-post name: riporto all'esercizio origine - errore nel riportare il documento
-- pre: il documento contabile in processo ט ancora valido, viene sollevato un errore
--      nella procedura di riporto all'esercizio origine
-- post: viene creata una riga di log dell'errore sollevato. La procedura procede
--       al successivo, se esiste, documento da processare.
--
-- pre-post name: riporto all'esercizio origine - operazione eseguita
-- pre: nessuna delle pre condizioni precedenti creata una riga di log di
--      informazione all'utente di avvenuto ribaltamento. La procedura procede al successivo,
--      se esiste, documento da processare
--
-- Parametri:
-- aPgCall -> progressivo identificativo dei record nella vsx_chiusura
-- aPg_exec -> numero progressivo del batch
procedure vsx_riportoPrevDocCont(aPgCall number, aPg_exec number) is
aObb obbligazione%rowtype;
aAcc accertamento%rowtype;
aDescDocCont varchar2(500);
aUser varchar2(20);
aTSNow date;
aEs number;
begin
	select distinct utcr, esercizio into aUser, aEs
	from vsx_chiusura
	where pg_call = aPgCall;

	aTSNow := sysdate;

	for aCds in (select * from v_unita_organizzativa_valida
			 	 where esercizio = aEs
				   and fl_cds = 'Y'
				 order by cd_unita_organizzativa) loop
		for aDocCont in (select * from vsx_chiusura
					 	 where pg_call = aPgCall
						   and cd_cds_origine  = aCds.cd_unita_organizzativa) loop
			savepoint CNRCTB047_SP_003;
			begin
				if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then  -- accertamenti
				    aAcc.cd_cds := aDocCont.cd_cds;
					aAcc.esercizio := aDocCont.esercizio;
					aAcc.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
					aAcc.pg_accertamento := aDocCont.pg_acc_obb;

					-- verifica della validitא della risorsa
					-- lock del documento
					CNRCTB035.LOCKDOCFULLCHECK(aAcc,aDocCont.pg_ver_rec_doc);

					aDescDocCont := 'Accertamento '||CNRCTB035.GETDESC(aAcc);

					cnrctb046.DERIPORTOESNEXTACC(aAcc,aUser,aTSNow);

				else  -- obbligazioni
					aObb.cd_cds := aDocCont.cd_cds;
					aObb.esercizio := aDocCont.esercizio;
					aObb.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
					aObb.pg_obbligazione := aDocCont.pg_acc_obb;

					-- verifica della validitא del documento
					-- e lock della risorsa
					CNRCTB035.LOCKDOCFULLCHECK(aObb,aDocCont.pg_ver_rec_doc);

					aDescDocCont := cnrutil.getLabelObbligazione()||' '||CNRCTB035.GETDESC(aObb);

					cnrctb046.DERIPORTOESNEXTOBB(aObb, aUser, aTSNow);

				end if;
				commit;
				ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_PREV||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',aDescDocCont||': ט stato riportato all''esercizio precedente','');
			exception when OTHERS then
				rollback to savepoint CNRCTB047_SP_003;
				IBMUTL200.LOGERR(aPg_exec,DS_RIPORTO_PREV||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',aDescDocCont||': '||DBMS_UTILITY.FORMAT_ERROR_STACK,'');
			end;
		end loop;  -- ciclo sui documenti
	end loop; -- ciclo sui cds

end;

procedure job_riporto_prev_doc_cont(job number, pg_exec number, next_date date, aPgCall number, aUser varchar2) is
begin
-- updata batch_log_tsta e committa
	IBMUTL210.logStartExecutionUpd (pg_exec,
									LOG_TIPO_RIP_PREV,
									job,
									'Richista utente: '||aUser,
									DS_RIPORTO_PREV||' Start:'||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'));
	begin
		vsx_riportoPrevDocCont(aPgCall, pg_exec);
		delete_vsx(aPgCall);
		commit;
		-- Messaggio all'utente di operazione completata
		IBMUTL205.LOGINF(DS_RIPORTO_PREV, DS_RIPORTO_PREV||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),'Operazione completata (pg_exec='||pg_exec||')',aUser);
	exception when others then
		rollback;
		delete_vsx(aPgCall);
		commit;
		-- Messaggio di attenzione all'utente
		IBMUTL205.LOGWAR(DS_RIPORTO_PREV, DS_RIPORTO_PREV||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||')',DBMS_UTILITY.FORMAT_ERROR_STACK,aUser);
	end;
end;

-- vsx_riportoNextDocContVoce
-- --------------------------
-- pre-post name: riporto all'esercizio successivo con cambio imputazione finanziaria -
--                elemento voce non valido
-- pre: l'elemento voce specificato nella chiamata alla procedura non esiste
-- post: viene creata un messaggio di errore all'utente, e vengono eliminati i record
--       dalla vista vsx_chiusura
--
-- pre-post name: riporto all'esercizio successivo con cambio imputazione finanziaria -
--                voce_f non valido
-- pre: la voce_f specificata nella chiamata alla procedura non esiste
-- post: viene creata un messaggio di errore all'utente, e vengono eliminati i record
--       dalla vista vsx_chiusura
--
-- pre-post name: riporto all'esercizio successivo con cambio imputazione finanziaria -
--                risorsa non piש valida
-- pre: il documento contabile in processo ט stato nel frattempo modificato
-- post: viene creata una riga di log di errore. La procedura procede al successivo,
--       se esiste, documento da processare
--
-- pre-post name: riporto all'esercizio successivo con cambio imputazione finanziaria -
--                errore nel riportare il documento
-- pre: il documento contabile in processo ט ancora valido, viene sollevato un errore
--      nella procedura di riporto all'esercizio origine
-- post: viene creata una riga di log dell'errore sollevato. La procedura procede
--       al successivo, se esiste, documento da processare.
--
-- pre-post name: riporto all'esercizio successivo con cambio imputazione finanziaria -
--                operazione eseguita
-- pre: nessuna delle pre condizioni precedenti creata una riga di log di
--      informazione all'utente di avvenuto ribaltamento. La procedura procede al successivo,
--      se esiste, documento da processare
--
-- Parametri:
-- aPgCall -> progressivo identificativo dei record nella vsx_chiusura
-- aPg_exec -> numero progressivo del batch
procedure vsx_riportoNextDocContVoce(aPgCall number, aPg_exec number) is
aObb obbligazione%rowtype;
aAcc accertamento%rowtype;
aDescDocCont varchar2(500);
isRibaltabile char(1);
aUser varchar2(20);
aTSNow date;
aEs number;
aEsDoc number;
aTiGestione char(1);
aTiAppartenenza char(1);
aCdElementoVoce varchar2(20);
aCdVoce varchar2(50);
aElementoVoce elemento_voce%rowtype;
aVoceF voce_f%rowtype;
aObbNew obbligazione%rowtype;
aAccNew accertamento%rowtype;
begin
	select distinct esercizio,
		   			ti_gestione,
					ti_appartenenza,
					cd_elemento_voce,
					cd_voce,
					esercizio_ribaltamento,
					utcr
	into aEsDoc,
		 aTiGestione,
		 aTiAppartenenza,
		 aCdElementoVoce,
		 aCdVoce,
		 aEs,
		 aUser
	from vsx_chiusura
	where pg_call = aPgCall;

	aTSNow := sysdate;

	if aCdVoce is null then
	-- ט un elemento_voce
	   begin
		   select * into aElementoVoce
		   from elemento_voce
		   where esercizio        = aEsDoc + 1
		     and ti_appartenenza  = aTiAppartenenza
			 and ti_gestione	  = aTiGestione
			 and cd_elemento_voce = aCdElementoVoce;
	   exception when NO_DATA_FOUND then
	   	   ibmerr001.RAISE_ERR_GENERICO('Elemento voce non valido');
	   end;
	else -- ט una voce_f, solo per impegni non pgiro
	   begin
	   	   select * into aVoceF
		   from voce_f
		   where esercizio        = aEsDoc + 1
		     and ti_appartenenza  = aTiAppartenenza
			 and ti_gestione		  = aTiGestione
			 and cd_voce 		  = aCdVoce;
	   exception when NO_DATA_FOUND then
	   	   ibmerr001.RAISE_ERR_GENERICO('Voce finanaziaria non valida');
	   end;
	end if;

	for aCds in (select * from v_unita_organizzativa_valida
			 	 where esercizio = aEsDoc
				   and fl_cds = 'Y'
				 order by cd_unita_organizzativa) loop
		for aDocCont in (select * from vsx_chiusura
					 	 where pg_call = aPgCall
						   and cd_cds_origine  = aCds.cd_unita_organizzativa) loop
			savepoint CNRCTB047_SP_004;
			begin
				if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then  -- accertamenti

					aAcc.cd_cds := aDocCont.cd_cds;
					aAcc.esercizio := aDocCont.esercizio;
					aAcc.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
					aAcc.pg_accertamento := aDocCont.pg_acc_obb;

					-- verifica della validitא del documento
					-- e lock della risorsa
					CNRCTB035.LOCKDOCFULLCHECK(aAcc,aDocCont.pg_ver_rec_doc);

					aDescDocCont := 'Accertamento '||CNRCTB035.GETDESC(aAcc);

					CNRCTB046.riportoEsNextAcc(aAcc,aElementoVoce,aUser,aTSNow);

				else  -- obbligazioni
					aObb.cd_cds := aDocCont.cd_cds;
					aObb.esercizio := aDocCont.esercizio;
					aObb.esercizio_originale := aDocCont.esercizio_ori_acc_obb;
					aObb.pg_obbligazione := aDocCont.pg_acc_obb;

					-- verifica della validitא del documento
					-- e lock della risorsa
					CNRCTB035.LOCKDOCFULLCHECK(aObb,aDocCont.pg_ver_rec_doc);

					aDescDocCont := cnrutil.getLabelObbligazione()||' '||CNRCTB035.GETDESC(aObb);

					CNRCTB046.riportoEsNextObb(aObb,aElementoVoce,aVoceF,aUser,aTSNow);

				end if;

				-- logging
				if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
				    aAccNew := cnrctb048.GETDOCRIPORTATO(aAcc);
					if aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_RES then
						declare
						  lNum number;
						begin
							select 1 into lNum
							from dual
						    where exists (select 1 from accertamento_scad_voce
						   		   Where cd_cds = aAcc.cd_cds
								     	 And esercizio 		  = aAcc.esercizio
									 And esercizio_originale  = aAcc.esercizio_originale
									 And pg_accertamento 	  = aAcc.pg_accertamento
									 And cd_centro_responsabilita  = CNRCTB015.GETVAL01PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE)
									 And cd_linea_attivita	  = CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE));
							ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio con linea di attivitא di sistema. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'');
						exception when NO_DATA_FOUND then
							ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'');
						end;
					elsif aAcc.cd_tipo_documento_cont in (CNRCTB018.TI_DOC_ACC, CNRCTB018.TI_DOC_ACC_PLUR) then
						ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'');
					else  -- ACR_PGIRO
						ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Annotazione su partita di giro '||aDescDocCont||': ט stato riportata al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'');
					end if;
				else -- spese
					aObbNew := cnrctb048.GETDOCRIPORTATO(aObb);
					if aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_PGIRO then
					   ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Annotazione su partita di giro '||aDescDocCont||': ט stata riportata al nuovo esercizio. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'');
					elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_RES_PRO then
					   ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',cnrutil.getLabelObbligazione()||' '||aDescDocCont||': ט stata riportata al nuovo esercizio. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'');
					else -- impegni
					   ibmutl200.LOGINF(aPg_exec,DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Impegno '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'');
					end if;
				end if;

-- 				if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
-- 				   aggiornaRiassunto(aAcc, DOC_RIPORTATO);
-- 				else
-- 				   aggiornaRiassunto(aObb, DOC_RIPORTATO);
-- 				end if;
				commit;
			exception when OTHERS then
			    rollback to savepoint CNRCTB047_SP_004;
				if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
				   aggiornaRiassunto(aAcc, DOC_NON_RIPORTATO);
				else
				   aggiornaRiassunto(aObb, DOC_NON_RIPORTATO);
				end if;
				IBMUTL200.LOGERR(aPg_exec,DS_RIPORTO_NEXT_VOCE||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Riporto documento '||aDescDocCont||': '||DBMS_UTILITY.FORMAT_ERROR_STACK,'');
			end;

		end loop; -- ciclo sui documenti
	end loop; -- ciclo sui cds
end;

procedure job_riporto_next_doc_cont_voce(job number, pg_exec number, next_date date, aPgCall number, aUser varchar2) is
Str varchar2(4000);
begin
-- updata batch_log_tsta e committa
	IBMUTL210.logStartExecutionUpd (pg_exec,
									LOG_TIPO_RIP_NEXT,
									job,
									'Richista utente: '||aUser,
									DS_RIPORTO_NEXT_VOCE||' Start:'||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'));
	inizializzaRiassunto;
	begin
		vsx_riportoNextDocContVoce(aPgCall, pg_exec);
		delete_vsx(aPgCall);
		commit;
		Str := riassunto;
		-- log riassuntivo
--		ibmutl200.LOGINF(pg_exec,DS_RIPORTO_NEXT_VOCE||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||') ',Str,'');
		-- Messaggio all'utente di operazione completata
		IBMUTL205.LOGINF(DS_RIPORTO_NEXT_VOCE, DS_RIPORTO_NEXT_VOCE||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),'Operazione completata (pg_exec='||pg_exec||')',aUser);
	exception when others then
		rollback;
		delete_vsx(aPgCall);
		commit;
		-- Messaggio di attenzione all'utente
		IBMUTL205.LOGWAR(DS_RIPORTO_NEXT_VOCE, DS_RIPORTO_NEXT_VOCE||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||')',DBMS_UTILITY.FORMAT_ERROR_STACK,aUser);
	end;
end;

procedure annullamentoDocCont(aPgCall number, aUser varchar2) is
aProcedure varchar2(4000);
begin
	aProcedure := 'CNRCTB047.job_annullamento_doc_cont(job, pg_exec, next_date, '||aPgCall||', '''||aUser||''');';
	IBMUTL210.CREABATCHDINAMICO(
		DS_ANNULLAMENTO,
		aProcedure,
		aUser);
	IBMUTL001.DEFERRED_COMMIT;
	IBMERR001.RAISE_ERR_GENERICO('Operazione sottomessa per esecuzione. Al completamento l''utente riceverא un messaggio di notifica dello stato dell''operazione');
end;


-- chiamata da java
procedure riportoNextEsDocCont(aPgCall number, aUser VARCHAR2, aCDS VARCHAR2) is
aProcedure varchar2(4000);
num_job   NUMBER;
pg_exec   NUMBER;

begin
	aProcedure := 'CNRCTB047.job_riporto_next_doc_cont(job, pg_exec, next_date, '||aPgCall||', '''||aUser||''', '''||aCDS||''');';

-- PER POTER DARE
Select ibmseq00_dyna_job.nextval into num_Job from dual;
select IBMSEQ00_BATCH_LOG.nextval into pg_Exec from dual;

	IBMUTL210.CREABATCHDINAMICO(
		DS_RIPORTO_NEXT,
		aProcedure,
		aUser);
	IBMUTL001.DEFERRED_COMMIT;
	IBMERR001.RAISE_ERR_GENERICO('Operazione sottomessa per esecuzione. Al completamento l''utente riceverא un messaggio di notifica con l''esito dell''operazione, CDS '||aCDS||'. '||
' L''operazione di ribaltamento andrא a buon fine solo se tutti i documenti saranno ribaltati. '||
' In caso contrario verificare le cause del mancato ribaltamento nella funzione: '||
' "Funzionalitא di servizio/Logs Applicativi/Gestione" per il Progressivo Esecuzione '||To_Char(pg_exec+1)||
' e Progressivo Job '||To_Char(num_job+1));
end;

procedure riportoPrevEsDocCont(aPgCall number, aUser varchar2) is
aProcedure varchar2(4000);
begin
	aProcedure := 'CNRCTB047.job_riporto_prev_doc_cont(job, pg_exec, next_date, '||aPgCall||', '''||aUser||''');';
	IBMUTL210.CREABATCHDINAMICO(
		DS_RIPORTO_PREV,
		aProcedure,
		aUser);
	IBMUTL001.DEFERRED_COMMIT;
	IBMERR001.RAISE_ERR_GENERICO('Operazione sottomessa per esecuzione. Al completamento l''utente riceverא un messaggio di notifica dello stato dell''operazione');
end;

procedure riportoNextEsDocContVoce(aPgCall number, aUser varchar2) is
aProcedure varchar2(4000);
begin
	aProcedure := 'CNRCTB047.job_riporto_next_doc_cont_voce(job, pg_exec, next_date, '||aPgCall||', '''||aUser||''');';
	IBMUTL210.CREABATCHDINAMICO(
		DS_RIPORTO_NEXT_VOCE,
		aProcedure,
		aUser);
	IBMUTL001.DEFERRED_COMMIT;
	IBMERR001.RAISE_ERR_GENERICO('Operazione sottomessa per esecuzione. Al completamento l''utente riceverא un messaggio di notifica dello stato dell''operazione');
end;

procedure ribaltamentoMassivo(aEs number) is
aUser varchar2(20) := '$$$$RIBALTAMENTO$$$$';
aTSNow date := sysdate;
aPg_exec number;
aObb obbligazione%rowtype;
aObbNew obbligazione%rowtype;
aAcc accertamento%rowtype;
aAccNew accertamento%rowtype;
esisteEsChiuso boolean;
aDescDocCont varchar2(500);
begin
	-- inizializza il log
-- inserisce in BATCH_LOG_TSTA e committa
	aPg_exec := ibmutl200.LOGSTART_temp(
					CNRCTB047.LOG_TIPO_RIP_NEXT,
					CNRCTB047.DS_RIPORTO_NEXT||' Start:'||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),
					'Richista utente: '||aUser,
					aUser,
					null,
					null);
	-- verifico che l'esercizio contabile per tutti i cds sia aperto
	esisteEsChiuso := false;
	for aCds in (select * from v_unita_organizzativa_valida
			 	 where esercizio = aEs
				   and fl_cds = 'Y') loop
		if cnrctb008.ISESERCIZIOCHIUSO(aEs,aCds.cd_unita_organizzativa) then
		   esisteEsChiuso := true;
		   ibmutl200.LOGWAR_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Esercizio '||aEs||' per cds '||aCds.cd_unita_organizzativa||' chiuso.','');
		end if;
	end loop; -- cds
	if esisteEsChiuso then
	   ibmerr001.RAISE_ERR_GENERICO('Esiste cds con esercizio chiuso');
	end if;

	for aCds in (select /*+ORDERED*/ * from v_unita_organizzativa_valida
			 	 where esercizio = aEs
				   and fl_cds 	 = 'Y'
				   and cnrctb008.GETSTATOESERCIZIO(aEs,cd_unita_organizzativa) = cnrctb008.STATO_APERTURA
				 order by cd_unita_organizzativa) loop
		for aDocCont in (select * from v_obb_acc_riporta
					 	 where cd_cds    = aCds.cd_unita_organizzativa
						   and esercizio = aEs) loop
		  begin
			savepoint SCRIPT_SP_001;
			if aDocCont.ti_gestione = CNRCTB001.GESTIONE_ENTRATE then
			   aAcc.cd_cds 			:= aDocCont.cd_cds;
			   aAcc.esercizio 		:= aDocCont.esercizio;
			   aAcc.esercizio_originale     := aDocCont.esercizio_ori_acc_obb;
			   aAcc.pg_accertamento := aDocCont.pg_acc_obb;
			   cnrctb035.LOCKDOCFULL(aAcc);
			   aDescDocCont := 'Accertamento '||CNRCTB035.GETDESC(aAcc);
			   cnrctb046.riportoEsNextAcc(aAcc, null,aUser, aTSNow);
			else -- spese
			   aObb.cd_cds 			:= aDocCont.cd_cds;
			   aObb.esercizio 		:= aDocCont.esercizio;
			   aObb.esercizio_originale     := aDocCont.esercizio_ori_acc_obb;
			   aObb.pg_obbligazione := aDocCont.pg_acc_obb;
			   cnrctb035.LOCKDOCFULL(aObb);
			   aDescDocCont := cnrutil.getLabelObbligazione()||' '||CNRCTB035.GETDESC(aObb);
			   cnrctb046.riportoEsNextObb(aObb, null, null, aUser, aTSNow);
			end if;

			-- logging
			if aDocCont.TI_GESTIONE = CNRCTB001.GESTIONE_ENTRATE then
			    aAccNew := cnrctb048.GETDOCRIPORTATO(aAcc);
				if aAcc.cd_tipo_documento_cont = CNRCTB018.TI_DOC_ACC_RES then
					declare
					  lNum number;
					begin
						select 1 into lNum
						from dual
					    where exists (select 1 from accertamento_scad_voce
					   		  where cd_cds 		= aAcc.cd_cds
							    And esercizio 	= aAcc.esercizio
							    And esercizio_originale = aAcc.esercizio_originale
						            And pg_accertamento = aAcc.pg_accertamento
							    And cd_centro_responsabilita  = CNRCTB015.GETVAL01PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE)
						            And cd_linea_attivita = CNRCTB015.GETVAL02PERCHIAVE(CNRCTB035.LA_SPECIALE,CNRCTB035.LA_ENTRATA_ENTE));
						ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio con linea di attivitא di sistema. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
					exception when NO_DATA_FOUND then
						ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
					end;
				elsif aAcc.cd_tipo_documento_cont in (CNRCTB018.TI_DOC_ACC, CNRCTB018.TI_DOC_ACC_PLUR) then
					ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Accertamento '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
				else  -- ACR_PGIRO
					ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Annotazione su partita di giro '||aDescDocCont||': ט stato riportata al nuovo esercizio. Importo accertamento origine '||aAcc.im_accertamento||' importo riportato '||aAccNew.im_accertamento,'', 'N');
				end if;
			else -- spese
				aObbNew := cnrctb048.GETDOCRIPORTATO(aObb);
				if aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_PGIRO then
				   ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Annotazione su partita di giro '||aDescDocCont||': ט stato riportata al nuovo esercizio. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
				elsif aObb.cd_tipo_documento_cont = CNRCTB018.TI_DOC_OBB_RES_PRO then
				   ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',cnrutil.getLabelObbligazione()||' '||aDescDocCont||': ט stata riportata al nuovo esercizio. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
				else -- impegni
				   ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Impegno '||aDescDocCont||': ט stato riportato al nuovo esercizio. Importo '||cnrutil.getLabelObbligazioneMin()||' origine '||aObb.im_obbligazione||' importo riportato '||aObbNew.im_obbligazione,'', 'N');
				end if;
			end if;
			commit;
		  exception when OTHERS then
		  	rollback to savepoint SCRIPT_SP_001;
			IBMUTL200.LOGERR_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Riporto documento '||aDescDocCont||' fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,'', 'N');
		  end;

		end loop; -- ciclo sui doc cont
	end loop; -- ciclo sui cds

	ibmutl200.LOGINF_TEMP(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ','Ribaltamento massivo documenti contabili completato','', 'N');

exception when OTHERS then
	ibmutl200.LOGERR(aPg_exec,cnrctb047.DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||aPg_exec||') ',DBMS_UTILITY.FORMAT_ERROR_STACK,'');
end;

procedure job_ribalta_massivo_doc_cont(job number, pg_exec number, next_date date, aPgCall number, aUser varchar2, aEs number) Is
Str varchar2(4000);
Begin
-- updata batch_log_tsta e committa
	IBMUTL210.logStartExecutionUpd_TEMP (pg_exec,
					LOG_TIPO_RIP_NEXT,
					job,
					'Richiesta utente: '||aUser,
					DS_RIPORTO_NEXT||' Start:'||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'));

	inizializzaRiassunto;
	begin
	   	cnrctb047.RIBALTAMENTOMASSIVO(aEs);
		--delete_vsx(aPgCall);
	    	commit;
	   	Str := riassunto;
		-- log riassuntivo
--		ibmutl200.LOGINF(pg_exec,DS_RIPORTO_NEXT||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||') ',Str,'');
		-- Messaggio all'utente di operazione completata
		IBMUTL205.LOGINF(DS_RIPORTO_NEXT, DS_RIPORTO_NEXT||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS'),'Operazione completata (pg_exec='||pg_exec||')',aUser);
	exception when others then
		rollback;
		delete_vsx(aPgCall);
		commit;
		-- Messaggio di attenzione all'utente
		IBMUTL205.LOGWAR(DS_RIPORTO_NEXT, DS_RIPORTO_NEXT||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_exec||')',DBMS_UTILITY.FORMAT_ERROR_STACK,aUser);
	end;
End;

procedure ribalta_disp_improprie (aEs NUMBER, aCDS VARCHAR2, aUser VARCHAR2,pg_esec number default null) Is
  ERROREIMP char(1) := 'N';
begin
  ribalta_disp_improprie_int(aEs, aCDS, aUser, pg_esec, ERROREIMP);
end;

procedure ribalta_disp_improprie_int (aEs NUMBER, aCDS VARCHAR2, aUser VARCHAR2,pg_esec number default null,ERROREIMP IN OUT char) Is
ADELTASALDO VOCE_F_SALDI_CDR_LINEA%Rowtype;
aSogliaPar      NUMBER;
livCofog        number:=0;
esisteCofog number:=0;
recParametriCNR      PARAMETRI_CNR%Rowtype;
errorDisp       EXCEPTION;
Begin
ERROREIMP := 'N';
recParametriCNR := CNRUTL001.getRecParametriCnr(aEs+1);

if recParametriCNR.esercizio is null Then
  ibmerr001.RAISE_ERR_GENERICO('Ribaltamento disponibilitא improprie fallito, manca la configurazione per esercizio '||to_char(aEs+1));
End If;

livCofog := recParametriCNR.LIVELLO_PDG_COFOG;

Select Nvl(IM_SOGLIA_RIBALTAMENTO_RES_IMP, 0)
Into   aSogliaPar
From   parametri_cds
Where  esercizio = aEs And
       cd_cds = aCDS;
For disp_imp_da_ribaltare In (Select ESERCIZIO, ESERCIZIO_RES, CD_CENTRO_RESPONSABILITA,
                                     CD_LINEA_ATTIVITA, TI_APPARTENENZA, TI_GESTIONE, CD_VOCE,
                                     Sum(TOT_IM_RESIDUI_RICOSTRUITI) TOT_IM_RESIDUI_RICOSTRUITI,
                                     Sum(TOT_IM_STANZ_INIZIALE_A1)   TOT_IM_STANZ_INIZIALE_A1,
                                     Sum(TOT_VARIAZIONI_PIU)         TOT_VARIAZIONI_PIU,
                                     Sum(TOT_VARIAZIONI_MENO)        TOT_VARIAZIONI_MENO,
                                     Sum(TOT_IM_OBBL_ACC_COMP)       TOT_IM_OBBL_ACC_COMP,
                                     Sum(TOT_IM_STANZ_RES_IMPROPRIO) TOT_IM_STANZ_RES_IMPROPRIO,
                                     Sum(TOT_VAR_PIU_STANZ_RES_IMP)  TOT_VAR_PIU_STANZ_RES_IMP,
                                     Sum(TOT_VAR_MENO_STANZ_RES_IMP) TOT_VAR_MENO_STANZ_RES_IMP,
                                     Sum(TOT_IM_OBBL_RES_IMP)        TOT_IM_OBBL_RES_IMP,
                                     Sum(TOT_VAR_PIU_OBBL_RES_IMP)   TOT_VAR_PIU_OBBL_RES_IMP,
                                     Sum(TOT_VAR_MENO_OBBL_RES_IMP)  TOT_VAR_MENO_OBBL_RES_IMP,
                                     Sum(TOT_VAR_PIU_OBBL_RES_PRO)   TOT_VAR_PIU_OBBL_RES_PRO,
                                     Sum(TOT_VAR_MENO_OBBL_RES_PRO)  TOT_VAR_MENO_OBBL_RES_PRO
                               From  v_disp_res_improprie
                               Where esercizio = aEs And
                                     TI_GESTIONE = CNRCTB001.GESTIONE_SPESE And
                                     CNRUTL001.GETCDSFROMCDR(CD_CENTRO_RESPONSABILITA) = aCDS
                               Group By ESERCIZIO, ESERCIZIO_RES, CD_CENTRO_RESPONSABILITA,
                                      CD_LINEA_ATTIVITA, TI_APPARTENENZA, TI_GESTIONE, CD_VOCE) Loop

--If disp_imp_da_ribaltare.ESERCIZIO = disp_imp_da_ribaltare.ESERCIZIO_RES Then
 -- COMPETENZA
Begin
  If  disp_imp_da_ribaltare.TOT_IM_RESIDUI_RICOSTRUITI +
      -- RESIDUO DELLA COMPETENZA: ASSESTATO - IMPEGNATO A COMPETENZA
      disp_imp_da_ribaltare.tot_IM_STANZ_INIZIALE_A1 + disp_imp_da_ribaltare.tot_VARIAZIONI_PIU - disp_imp_da_ribaltare.tot_VARIAZIONI_MENO -
      disp_imp_da_ribaltare.tot_IM_OBBL_ACC_COMP +
      -- RESIDUO DEI RESIDUI: STANZIAMENTO RESIDUO ASSESTATO +/- VARIAZIONI AI RESIDUI PROPRI INVERTITE
      disp_imp_da_ribaltare.TOT_IM_STANZ_RES_IMPROPRIO + disp_imp_da_ribaltare.TOT_VAR_PIU_STANZ_RES_IMP - disp_imp_da_ribaltare.TOT_VAR_MENO_STANZ_RES_IMP -
      disp_imp_da_ribaltare.TOT_IM_OBBL_RES_IMP + disp_imp_da_ribaltare.TOT_VAR_MENO_OBBL_RES_PRO - disp_imp_da_ribaltare.TOT_VAR_PIU_OBBL_RES_PRO != 0 And
      disp_imp_da_ribaltare.TOT_IM_RESIDUI_RICOSTRUITI +
      -- RESIDUO DELLA COMPETENZA: ASSESTATO - IMPEGNATO A COMPETENZA
      disp_imp_da_ribaltare.tot_IM_STANZ_INIZIALE_A1 + disp_imp_da_ribaltare.tot_VARIAZIONI_PIU - disp_imp_da_ribaltare.tot_VARIAZIONI_MENO -
      disp_imp_da_ribaltare.tot_IM_OBBL_ACC_COMP +
      -- RESIDUO DEI RESIDUI: STANZIAMENTO RESIDUO ASSESTATO +/- VARIAZIONI AI RESIDUI PROPRI INVERTITE
      disp_imp_da_ribaltare.TOT_IM_STANZ_RES_IMPROPRIO + disp_imp_da_ribaltare.TOT_VAR_PIU_STANZ_RES_IMP - disp_imp_da_ribaltare.TOT_VAR_MENO_STANZ_RES_IMP -
      disp_imp_da_ribaltare.TOT_IM_OBBL_RES_IMP + disp_imp_da_ribaltare.TOT_VAR_MENO_OBBL_RES_PRO - disp_imp_da_ribaltare.TOT_VAR_PIU_OBBL_RES_PRO > aSogliaPar Then

	if(disp_imp_da_ribaltare.cd_centro_responsabilita!= cnrctb020.getCdCdrEnte ) then
		 -- 06/11/2013 Rospuc controllo indicazione Cofog prima di procedere al ribaltamento
		if(livCofog!=0 ) then
		  	If (pg_esec is not null) then
				Begin
				  select count(0) into esisteCofog
				  from linea_attivita
          		  where cd_cofog is not null
          		  and 	cd_centro_responsabilita = disp_imp_da_ribaltare.cd_centro_responsabilita
          		  and  	cd_linea_attivita  = disp_imp_da_ribaltare.cd_linea_attivita;

			      if (esisteCofog=0 ) then
			      	ibmerr001.RAISE_ERR_GENERICO('Ribaltamento disponibilità improprie fallito manca il cofog sulla gae '||disp_imp_da_ribaltare.cd_centro_responsabilita||'/'||disp_imp_da_ribaltare.cd_linea_attivita);
			      end if;
			   	Exception
				  When Others Then
				    IBMUTL200.LOGERR_TEMP(pg_esec,
					      DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_esec||') ',
				          'Ribaltamento disponibilità improprie fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,
					      '',
					      'N');
				    raise errorDisp;
				End;
			Else
				-- andando in no_data_found eccezione gestita nella chiamata
				Begin
				  select 1 into livCofog from linea_attivita
		          where cd_cofog is not null
		          and   cd_centro_responsabilita = disp_imp_da_ribaltare.cd_centro_responsabilita
		          and   cd_linea_attivita  = disp_imp_da_ribaltare.cd_linea_attivita;
	        	Exception
		          when no_data_found then
		            IBMERR001.RAISE_ERR_GENERICO('Ribaltamento disponibilità improprie fallito: manca il cofog sulla gae '||disp_imp_da_ribaltare.cd_centro_responsabilita||'/'||disp_imp_da_ribaltare.cd_linea_attivita);
		      	End;
		    End if;
		End if;

		-- 27/11/2015 RafPag controllo presenza progetto
   	    Declare
		  esisteProgetto number:=0;
  	    Begin
		  select count(0) into esisteProgetto
	      from v_linea_attivita_valida
          where esercizio = aEs + 1
          and   cd_centro_responsabilita = disp_imp_da_ribaltare.cd_centro_responsabilita
          and   cd_linea_attivita  = disp_imp_da_ribaltare.cd_linea_attivita
          and   pg_progetto is not null;

 	      If (esisteProgetto=0 ) then
		  	If (pg_esec is not null) then
              Begin
  	        	ibmerr001.RAISE_ERR_GENERICO('Ribaltamento disponibilità improprie fallito manca il progetto sulla gae '||disp_imp_da_ribaltare.cd_centro_responsabilita||'/'||disp_imp_da_ribaltare.cd_linea_attivita||' nell''anno '||to_char(aEs + 1));
			  Exception
			    When Others Then
				  IBMUTL200.LOGERR_TEMP(pg_esec,
					                    DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_esec||') ',
					                    'Ribaltamento disponibilità improprie fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,
					                    '',
					                    'N');
				  raise errorDisp;
			  End;
		    Else
              IBMERR001.RAISE_ERR_GENERICO('Ribaltamento disponibilità improprie fallito: manca il progetto sulla gae '||disp_imp_da_ribaltare.cd_centro_responsabilita||'/'||disp_imp_da_ribaltare.cd_linea_attivita);
 	        End if;
		  End if;
		End;

		-- 04/01/2019 RafPag controllo progetto approvato
   	    Declare
		  esisteProgetto number:=0;
  	    Begin
		  select count(0) into esisteProgetto
	      from v_linea_attivita_valida, progetto_other_field, tipo_finanziamento
          where esercizio = aEs + 1
          and   v_linea_attivita_valida.cd_centro_responsabilita = disp_imp_da_ribaltare.cd_centro_responsabilita
          and   v_linea_attivita_valida.cd_linea_attivita  = disp_imp_da_ribaltare.cd_linea_attivita
          and   v_linea_attivita_valida.pg_progetto is not null
          and   v_linea_attivita_valida.pg_progetto = progetto_other_field.pg_progetto
          and   progetto_other_field.id_tipo_finanziamento = tipo_finanziamento.id
          and   (progetto_other_field.stato = 'APP'
          	     or 
          	     (tipo_finanziamento.fl_piano_eco_fin='N' and progetto_other_field.dt_fine is not null));

 	      If (esisteProgetto=0 ) then
		  	If (pg_esec is not null) then
              Begin
  	        	ibmerr001.RAISE_ERR_GENERICO('Ribaltamento disponibilità improprie fallito: non approvato il progetto sulla gae '||disp_imp_da_ribaltare.cd_centro_responsabilita||'/'||disp_imp_da_ribaltare.cd_linea_attivita||' nell''anno '||to_char(aEs + 1));
			  Exception
			    When Others Then
				  IBMUTL200.LOGERR_TEMP(pg_esec,
					                    DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_esec||') ',
					                    'Ribaltamento disponibilità improprie fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,
					                    '',
					                    'N');
			      raise errorDisp;
			  End;
		    Else
              IBMERR001.RAISE_ERR_GENERICO('Ribaltamento disponibilità improprie fallito: non approvato il progetto sulla gae '||disp_imp_da_ribaltare.cd_centro_responsabilita||'/'||disp_imp_da_ribaltare.cd_linea_attivita);
 	        End if;
		  End if;
		End;

      aDeltaSaldo.ESERCIZIO := aEs + 1;
      aDeltaSaldo.ESERCIZIO_RES := disp_imp_da_ribaltare.ESERCIZIO_RES;
      aDeltaSaldo.CD_CENTRO_RESPONSABILITA := disp_imp_da_ribaltare.CD_CENTRO_RESPONSABILITA;
      aDeltaSaldo.CD_LINEA_ATTIVITA := disp_imp_da_ribaltare.CD_LINEA_ATTIVITA;

      aDeltaSaldo.TI_APPARTENENZA := disp_imp_da_ribaltare.TI_APPARTENENZA;
      aDeltaSaldo.TI_GESTIONE := disp_imp_da_ribaltare.TI_GESTIONE;
      aDeltaSaldo.CD_VOCE := disp_imp_da_ribaltare.CD_VOCE;

	  if nvl(recParametriCNR.fl_nuovo_pdg, 'N') = 'Y' Then
        Declare
           recElementoVoceOld elemento_voce%rowtype;
           recElementoVoceNew elemento_voce%rowtype;
        Begin
          recElementoVoceOld.esercizio := aEs;
          recElementoVoceOld.ti_appartenenza := disp_imp_da_ribaltare.TI_APPARTENENZA;
          recElementoVoceOld.ti_gestione := disp_imp_da_ribaltare.TI_GESTIONE;

          Begin
            Select cd_elemento_voce
            into recElementoVoceOld.cd_elemento_voce
		    from voce_f
		    Where esercizio = aEs
		    And   ti_appartenenza = disp_imp_da_ribaltare.TI_APPARTENENZA
		    And   ti_gestione = disp_imp_da_ribaltare.TI_GESTIONE
		    And   cd_voce = disp_imp_da_ribaltare.CD_VOCE;
		  Exception
		    When no_data_found Then
              recElementoVoceOld.cd_elemento_voce := disp_imp_da_ribaltare.CD_VOCE;
          End;

          If pg_esec is not null then
            Begin
              recElementoVoceNew := CNRCTB046.getElementoVoceNew(recElementoVoceOld);
            Exception
              When Others Then
    			  IBMUTL200.LOGERR_TEMP(pg_esec,
  				                    DS_RIPORTO_NEXT||aEs||' '||to_char(sysdate,'DD/MM/YYYY HH:MI:SS')||' (pg_exec='||pg_esec||') ',
				                    'Ribaltamento disponibilità improprie fallito: '||DBMS_UTILITY.FORMAT_ERROR_STACK,
				                    '',
				                    'N');
				  raise errorDisp;

		    End;
		  Else
            recElementoVoceNew := CNRCTB046.getElementoVoceNew(recElementoVoceOld);
          End If;
          If recElementoVoceNew.TI_APPARTENENZA is not null Then
             aDeltaSaldo.TI_APPARTENENZA := recElementoVoceNew.TI_APPARTENENZA;
             aDeltaSaldo.TI_GESTIONE := recElementoVoceNew.TI_GESTIONE;
             aDeltaSaldo.CD_VOCE := recElementoVoceNew.CD_ELEMENTO_VOCE;
          End If;
        End;
      End If;
      aDeltaSaldo.UTUV := aUser;

      CNRCTB054.RESET_IMPORTI_SALDI (aDELTASALDO);

      aDeltaSaldo.IM_STANZ_RES_IMPROPRIO :=

        disp_imp_da_ribaltare.TOT_IM_RESIDUI_RICOSTRUITI +
        -- RESIDUO DELLA COMPETENZA: ASSESTATO - IMPEGNATO A COMPETENZA
        disp_imp_da_ribaltare.tot_IM_STANZ_INIZIALE_A1 + disp_imp_da_ribaltare.tot_VARIAZIONI_PIU - disp_imp_da_ribaltare.tot_VARIAZIONI_MENO -
        disp_imp_da_ribaltare.tot_IM_OBBL_ACC_COMP +
        -- RESIDUO DEI RESIDUI: STANZIAMENTO RESIDUO ASSESTATO +/- VARIAZIONI AI RESIDUI PROPRI INVERTITE
        disp_imp_da_ribaltare.TOT_IM_STANZ_RES_IMPROPRIO + disp_imp_da_ribaltare.TOT_VAR_PIU_STANZ_RES_IMP - disp_imp_da_ribaltare.TOT_VAR_MENO_STANZ_RES_IMP -
        disp_imp_da_ribaltare.TOT_IM_OBBL_RES_IMP + disp_imp_da_ribaltare.TOT_VAR_MENO_OBBL_RES_PRO - disp_imp_da_ribaltare.TOT_VAR_PIU_OBBL_RES_PRO;

      CNRCTB054.CREA_AGGIORNA_SALDI(aDELTASALDO, '047.ribalta_disp_improprie 1', 'N');
		end if;
  End If;
Exception
  WHEN errorDisp Then
     ERROREIMP := 'Y';
End;
End Loop;

End;
End;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy