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

expsigladb.Procedure.spg_fondo_economale.prc Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
CREATE OR REPLACE PROCEDURE SPG_FONDO_ECONOMALE
--
--
-- Date 22/03/2011
-- Version: 1.12
--
--
-- History:
--
-- Date: 26/09/2005
-- Version: 1.8
-- Creazione
--
-- Date: 11/03/2003
-- Version: 1.1
-- Corretta la visualizzazione della Descrizione dell'ultima riga: eliminato il carattere dell' Euro.
--
-- Date: 13/03/2003
-- Version: 1.2
-- Corretto filtro su dettagli di spesa: vengono considerati solo quelli
-- con dt_spesa compresa nel periodo di riferimento
--
-- Date: 08/04/2003
-- Version: 1.3
-- Corretta estrazione dettagli di spese non documentate (null i campi di obbligazione)
--
-- Date: 09/04/2003
-- Version: 1.4
-- Gestione mandati di incremento ammontare iniziale del fondo
-- Corretto inserimento mandati di reitegro (lo stesso mandato pu? reitegrare pi? spese)
--
-- Date: 06/05/2003
-- Version: 1.5
-- Corretto ordinamento dettagli mandati di reintegro (segnalazione n.587)
--
-- Date: 20/05/2003
-- Version: 1.6
-- Corretta gestione mandati di reintegro (segnalazione n. 601)
-- (Record duplicato)
--
-- Date: 25/08/2003
-- Version: 1.7
-- Aggiunta la stampa della reversale di regolarizzazione
-- per modifiche alla gestione del fondo per chiusura contabile e per segnalazione n. 622)
--
-- Date: 18/07/2006
-- Version: 1.8
-- Gestione Impegni/Accertamenti Residui:
-- aggiornata la funzione per tener conto anche del campo Esercizio Originale Impegno/Accertamento
--
-- Date: 15/01/2007
-- Version: 1.9
-- Modificata procedura per conversione stampa da .rpt a .jasper
--
--
-- Date: 30/01/2007
-- Version: 1.9
-- Corretta la visualizzazione degli importi spese.
-- L'importo veniva preso da FONDO_SPESA e ora da V_DOC_AMM_OBBLIG (dettaglio)
--
--
-- Date 16/07/2007
-- Version: 1.10
-- Modificato l'importo della versione 1.9 se la spesa non ? documentata viene preso l'importo da FONDO_SPESA
-- altrimenti da V_DOC_AMM_OBBLIG. decode(aFsp.FL_DOCUMENTATA,'N',aFsp.IM_AMMONTARE_SPESA,aCd_Voce.IM_VOCE)
--
--
-- Date 22/01/2008
-- Version: 1.11
-- Modificato l'inserimento di 'D:ultima riga' - 'V'. Creato un loop.
--
--
-- Date 22/03/2011
-- Version: 1.12
-- Modificato, nel "ciclo sulle righe del FONDO_ECONOMALE per i REINTEGRI - loop 4", l'ordinamento
-- order by	fsp_R.PG_MANDATO,fsp_R.PG_FONDO_SPESA prima era solo per pg_fondo_spesa.
-- Body:
--
(
 aCd_cds in varchar2,
 aCd_unita_organizzativa in varchar2,
 aEs  number,
 aCd_codice_fondo in varchar2,
 aDt_da in varchar2,
 aDt_a in varchar2,
 aUtcr in varchar2
) is
 aId number;
 i number;
 aVar1 varchar2(300) := null;
 aVar2 varchar2(300) := null;
 aDt_emissione date;
 aIm0 number(15,2) := 0;
 aIm1 number(15,2) := 0;
 tmp number := 0;
 aDtNext date;
 aMand mandato%rowtype;
 v_im_residuo number(15,2);
 v_im_spese number(15,2);
 v_im_entrate number(15,2);
 v_im_residuo_new number(15,2);
 v_sequenza number:=1;
begin
 select IBMSEQ00_CR_PACKAGE.nextval into aId from dual;
 i:=0;

 -- Cerca il FONDO_ECONOMALE rispondente alla chiave data
 for aFec in (select * from FONDO_ECONOMALE fec
 	 	   	   where fec.CD_CDS         = aCd_cds
			     and fec.ESERCIZIO		= aEs
			     and fec.CD_UNITA_ORGANIZZATIVA = aCd_unita_organizzativa
			     and fec.CD_CODICE_FONDO	= aCd_codice_fondo) loop
	-- inizio loop 1

	i := i+1;

	-- inizio inserimento record P: testata e prima riga

	-- Cerca il mandato di apertura relativo al Fondo Economale trovato
	select mand.DT_EMISSIONE, mand.IM_MANDATO
	into aDt_emissione, aIm0
	from MANDATO mand
	where mand.CD_CDS     = aFec.CD_CDS
	and   mand.ESERCIZIO  = aFec.ESERCIZIO
	and   mand.PG_MANDATO = aFec.PG_MANDATO;

	if to_date(aDt_da,'yyyy/mm/dd') < trunc(aDt_emissione) then
	-- La stampa ? stata richiesta da una data ANTECEDENTE alla data di emissione del Mand. di Pag.
	-- di apertura del FE: i dati relativi alla prima riga saranno estrapolati dal mandato legato al Fondo Econoamale
		insert into VPG_FONDO_ECONOMALE (ID,
										CHIAVE,
										SEQUENZA,
										DESCRIZIONE,
										CD_CDS,
										ESERCIZIO,
										CD_UNITA_ORGANIZZATIVA,
										CD_CODICE_FONDO,
										TI_RECORD_L1,
										DS_FONDO,
										DS_UNITA_ORGANIZZATIVA,
										CD_TERZO,
										DENOMINAZIONE_SEDE,
										DT_SPESA,
										DS_SPESA,
										PG_MANDATO_FEC,
										IM_ENTRATE,
										IM_RESIDUO,
										UTCR,
										DACR)
		select  aId,
			    'A:testata',
			    i,
				'Stampa RPT',
				aFec.CD_CDS,
				aFec.ESERCIZIO,
				aFec.CD_UNITA_ORGANIZZATIVA,
				aFec.CD_CODICE_FONDO,
				'P',
				aFec.DS_FONDO,
				uo.DS_UNITA_ORGANIZZATIVA,
				aFec.CD_TERZO,
				t.DENOMINAZIONE_SEDE,
				mand.DT_EMISSIONE,
				mand.DS_MANDATO || ' - Mandato n. ' || aFec.PG_MANDATO,
				aFec.PG_MANDATO,
				mand.IM_MANDATO,
				mand.IM_MANDATO,
				aUtcr,
				sysdate
		from MANDATO mand,
			 UNITA_ORGANIZZATIVA uo,
	 	 	 TERZO t
		 where mand.CD_CDS    = aFec.CD_CDS
		 and   mand.ESERCIZIO = aFec.ESERCIZIO
		 and   mand.PG_MANDATO= aFec.PG_MANDATO
	  	 and   t.CD_TERZO 	  = aFec.CD_TERZO
		 and   uo.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA ;

		-- mandati di incremento ammontare iniziale del fondo
		for aMandato in (select man.* from ass_fondo_eco_mandato afem, mandato man
					   	   where afem.CD_CDS				 = aFec.CD_CDS
						     and afem.ESERCIZIO				 = aFec.ESERCIZIO
							 and afem.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
							 and afem.CD_CODICE_FONDO		 = aFec.CD_CODICE_FONDO
							 and man.CD_CDS					 = afem.CD_CDS_MANDATO
							 and man.ESERCIZIO				 = afem.ESERCIZIO_MANDATO
							 and man.PG_MANDATO				 = afem.PG_MANDATO
						    order by man.PG_MANDATO) loop

			i := i+1;


			aIm0 := aIm0 + aMandato.IM_MANDATO;

			insert into VPG_FONDO_ECONOMALE  (ID,
											CHIAVE,
											SEQUENZA,
											DESCRIZIONE,
											CD_CDS,
											ESERCIZIO,
											CD_UNITA_ORGANIZZATIVA,
											CD_CODICE_FONDO,
											TI_RECORD_L1,
											DS_SPESA,
											PG_MANDATO_FSP,
											IM_ENTRATE,
											UTCR,
											DACR)
			values (aId,
				    'A:testata',
				    i,
					'Stampa RPT',
					aFec.CD_CDS,
					aFec.ESERCIZIO,
					aFec.CD_UNITA_ORGANIZZATIVA,
					aFec.CD_CODICE_FONDO,
					'P',
					'Mandato n. ' || aMandato.PG_MANDATO || ' per incremento ammontare iniziale fondo economale',
					aMandato.PG_MANDATO,
					aMandato.IM_MANDATO,
					aUtcr,
					sysdate);

		end loop; -- fine loop sui mandati di incremento
	else
	-- La stampa ? stata richiesta da una data SUCCESSIVA alla data di emissione del Mand. di Pag.
	-- 	  di apertura del FE

		-- determino l'importo di incremento sul fondo tramite mandati con dt emissione
		-- precedente alla data di riferimento della stampa

		select sum(man.IM_MANDATO) into aIm0
		from ass_fondo_eco_mandato afem
			,mandato man
		where afem.CD_CDS				  = aFec.CD_CDS
		  and afem.ESERCIZIO			  = aFec.ESERCIZIO
		  and afem.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
		  and afem.CD_CODICE_FONDO		  = aFec.CD_CODICE_FONDO
		  and man.CD_CDS				  = afem.CD_CDS_MANDATO
		  and man.ESERCIZIO				  = afem.ESERCIZIO_MANDATO
		  and man.PG_MANDATO			  = afem.PG_MANDATO
		  and man.DT_EMISSIONE			  <= to_date(aDt_da,'yyyy/mm/dd');

		select (aFec.IM_AMMONTARE_INIZIALE - nvl(a.amm_sp,0) + nvl(b.im_mand,0) + aIm0)
		into aIm1
		from (select sum(nvl(fsp.IM_AMMONTARE_SPESA,0)) amm_sp
			 from FONDO_SPESA fsp
			 where fsp.CD_CDS 	 			  = aFec.CD_CDS
			 and   fsp.ESERCIZIO 			  = aFec.ESERCIZIO
			 and   fsp.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
			 and   fsp.CD_CODICE_FONDO 		  = aFec.CD_CODICE_FONDO
			 and   fsp.DT_SPESA	  < to_date(aDt_a,'YYYY/MM/DD')
			 ) a,
			 (select sum(nvl(mand.IM_MANDATO,0)) im_mand
					 from FONDO_SPESA fsp, MANDATO mand
					 where fsp.CD_CDS 	   		      = aFec.CD_CDS
					 and   fsp.ESERCIZIO 	 		  = aFec.ESERCIZIO
					 and   fsp.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
					 and   fsp.CD_CODICE_FONDO 		  = aFec.CD_CODICE_FONDO
					 and   fsp.DT_SPESA  < to_date(aDt_a,'YYYY/MM/DD')
					 and   fsp.CD_CDS_MANDATO 		  = mand.CD_CDS
					 and   fsp.ESERCIZIO_MANDATO 	  = mand.ESERCIZIO
					 and   fsp.PG_MANDATO 			  = mand.PG_MANDATO
					 and   mand.DT_EMISSIONE   to_date(aDt_da,'yyyy/mm/dd')) loop

			i:= i+1;

			aIm1 := aIm1 + aMandato.IM_MANDATO;

			insert into VPG_FONDO_ECONOMALE (ID,
											CHIAVE,
											SEQUENZA,
											DESCRIZIONE,
											CD_CDS,
											ESERCIZIO,
											CD_UNITA_ORGANIZZATIVA,
											CD_CODICE_FONDO,
											TI_RECORD_L1,
											DS_SPESA,
											PG_MANDATO_FSP,
											IM_ENTRATE,
											UTCR,
											DACR)
			values (aId,
				    'A:testata',
				    i,
					'Stampa RPT',
					aFec.CD_CDS,
					aFec.ESERCIZIO,
					aFec.CD_UNITA_ORGANIZZATIVA,
					aFec.CD_CODICE_FONDO,
					'P',
					'Mandato n. ' || aMandato.PG_MANDATO || ' per incremento ammontare iniziale fondo economale',
					aMandato.PG_MANDATO,
					aMandato.IM_MANDATO,
					aUtcr,
					sysdate);

		end loop; -- fine ciclo sui mandati di incremento dell'importo

	end if;
	-- fine inserimento record P: testata e prima riga

	-- estraggo le dt_spesa delle righe del FONDO_ECONOMALE - loop 2
	for aDt in (select distinct(dt_fsp.DT_SPESA) DT_SPESA FROM FONDO_SPESA dt_fsp
			   	where dt_fsp.CD_CDS 		 = aFec.CD_CDS
				and   dt_fsp.ESERCIZIO 	     = aFec.ESERCIZIO
				and   dt_fsp.CD_CODICE_FONDO = aFec.CD_CODICE_FONDO
				and   dt_fsp.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
				order by dt_fsp.DT_SPESA) loop

		-- ciclo sulle righe del FONDO_ECONOMALE per le SPESE - loop 3
		for aFsp in (select * from FONDO_SPESA fsp
	 	 	   	   where fsp.CD_CDS         = aFec.CD_CDS
				     and fsp.ESERCIZIO		= aFec.ESERCIZIO
				     and fsp.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
				     and fsp.CD_CODICE_FONDO= aFec.CD_CODICE_FONDO
					 and fsp.DT_SPESA 		= aDt.DT_SPESA
					 and fsp.DT_SPESA>= to_date(aDt_da,'YYYY/MM/DD')
					 and fsp.DT_SPESA	<= to_date(aDt_a,'YYYY/MM/DD')
					 order by fsp.PG_FONDO_SPESA) loop
		-- inizio loop 3

			-- inizio inserimento record S: spese
			if aFsp.FL_DOCUMENTATA = 'Y' then
			-- La riga di FONDO_SPESA ? associata a documenti amministrativi
			-- recupero le OBBLIGAZIONI relative alla riga di FONDO_SPESA.
			-- I dati relativi alle Obbligazioni legate ai Documenti Amministrativi sono recuperati
			-- 	 dalla vista V_DOC_AMM_OBBLIG
			   for aObb in (select distinct CD_CDS_OBBLIG, ESERCIZIO_OBBLIG, ESERCIZIO_ORI_OBBLIG, PG_OBBLIG, PG_OBBLIGAZIONE_SCADENZARIO
							from V_DOC_AMM_OBBLIG v_obblig
							where v_obblig.CD_CDS_DOC_AMM    = aFsp.CD_CDS_DOC_AMM
							and   v_obblig.CD_UO_DOC_AMM  	 = aFsp.CD_UO_DOC_AMM
							and   v_obblig.ESERCIZIO_DOC_AMM = aFsp.ESERCIZIO_DOC_AMM
							and   v_obblig.PG_DOC_AMM 		 = aFsp.PG_DOCUMENTO_AMM
							and   v_obblig.CD_TIPO_DOCUMENTO_AMM = aFsp.CD_TIPO_DOCUMENTO_AMM) loop

				 -- Ciclo sulle Obbligazioni trovate e recupero i dati relativi ai Capitoli per ogni singola
				 --	   Obbligazione.
			      for aCd_Voce in (select distinct CD_VOCE, sum(im_voce) im_voce --distinct(cd_voce)
				  	  		    from V_DOC_AMM_OBBLIG v_cap
				   	   			where v_cap.CD_CDS_DOC_AMM   = aFsp.CD_CDS_DOC_AMM
								and   v_cap.CD_UO_DOC_AMM  	 = aFsp.CD_UO_DOC_AMM
								and   v_cap.ESERCIZIO_DOC_AMM= aFsp.ESERCIZIO_DOC_AMM
								and   v_cap.PG_DOC_AMM 		 = aFsp.PG_DOCUMENTO_AMM
								and   v_cap.CD_TIPO_DOCUMENTO_AMM = aFsp.CD_TIPO_DOCUMENTO_AMM
								and   v_cap.CD_CDS_OBBLIG    = aObb.CD_CDS_OBBLIG
								and   v_cap.ESERCIZIO_OBBLIG = aObb.ESERCIZIO_OBBLIG
								and   v_cap.ESERCIZIO_ORI_OBBLIG = aObb.ESERCIZIO_ORI_OBBLIG
								and   v_cap.PG_OBBLIG		 = aObb.PG_OBBLIG
								and   v_cap.PG_OBBLIGAZIONE_SCADENZARIO = aObb.PG_OBBLIGAZIONE_SCADENZARIO
								and   v_cap.IM_VOCE>0
								group by v_cap.ESERCIZIO_OBBLIG,v_cap.ESERCIZIO_ORI_OBBLIG,
									  	 v_cap.PG_OBBLIG,v_cap.PG_OBBLIGAZIONE_SCADENZARIO,v_cap.CD_VOCE,v_cap.progressivo_riga
										 --aggiunta la group by e sum(im_voce)
								) loop


				     i := i+1;

					 insert into VPG_FONDO_ECONOMALE CD_TIPO_DOC_AMM (ID,
												CHIAVE,
												SEQUENZA,
												DESCRIZIONE,
												CD_CDS,
												ESERCIZIO,
												CD_UNITA_ORGANIZZATIVA,
												CD_CODICE_FONDO,
												TI_RECORD_L1,
												PG_FONDO_SPESA,
												DT_SPESA,
												FL_FORNITORE_SALTUARIO,
												CD_TERZO,
												DENOMINAZIONE_FORNITORE,
												FL_DOCUMENTATA,
												CD_TIPO_DOC_AMM,
												DS_SPESA,
												IM_NETTO_SPESA,
												ESERCIZIO_ORI_OBBLIGAZIONE,
												PG_OBBLIGAZIONE,
												ESERCIZIO_OBBLIGAZIONE,
												PG_OBBLIGAZIONE_SCAD,
												CD_VOCE,
												PG_DOC_AMM,
												ESERCIZIO_DOC_AMM,
												FL_REINTEGRATA,
												IM_SPESE,
												UTCR,
												DACR)
					VALUES (aId,
						    'B:spese',
						    i,
							'Stampa RPT',
							aFec.CD_CDS,
							aFec.ESERCIZIO,
							aFec.CD_UNITA_ORGANIZZATIVA,
							aFec.CD_CODICE_FONDO,
							'S',
							aFsp.PG_FONDO_SPESA,
							aFsp.DT_SPESA,
							aFsp.FL_FORNITORE_SALTUARIO,
							aFsp.CD_TERZO,
							aFsp.DENOMINAZIONE_FORNITORE,
							aFsp.FL_DOCUMENTATA,
							aFsp.CD_TIPO_DOCUMENTO_AMM,
							decode (aFsp.CD_TIPO_DOCUMENTO_AMM,'MISSIONE',aFsp.DS_SPESA||' - Importo netto: ? '||aFsp.IM_NETTO_SPESA,
								   							   'COMPENSO',aFsp.DS_SPESA||' - Importo netto: '||aFsp.IM_NETTO_SPESA,
															   aFsp.DS_SPESA),
							aFsp.IM_NETTO_SPESA,
							aObb.ESERCIZIO_ORI_OBBLIG,
							aObb.PG_OBBLIG,
							aObb.ESERCIZIO_OBBLIG,
							aObb.PG_OBBLIGAZIONE_SCADENZARIO,
							aCd_Voce.CD_VOCE,
							aFsp.PG_DOCUMENTO_AMM,
							aFsp.ESERCIZIO_DOC_AMM,
							aFsp.FL_REINTEGRATA,
							decode(aFsp.FL_DOCUMENTATA,'N',aFsp.IM_AMMONTARE_SPESA,aCd_Voce.IM_VOCE),
							--aCd_Voce.IM_VOCE,
							--aFsp.IM_AMMONTARE_SPESA,
							aUtcr,
							sysdate);
				 end loop; -- fine ciclo sui CAPITOLI
			   end loop; -- fine ciclo sulle OBBLIGAZIONI
			else
			-- La riga di FONDO_SPESA NON ? associata a documenti amministrativi: le informazioni relative
			-- all'Obbligazione sono presenti sulla riga del Fondo Spesa.
			-- FALSO! potrebbe non esserci ancora l'associazione!

			   if aFsp.CD_CDS_OBBLIGAZIONE is not null then
			   -- associazione gi? effettuata
				   for aCd_Voce in(select  CD_VOCE, sum(im_voce) im_voce --distinct(cd_voce)
				   	   			from OBBLIGAZIONE_SCAD_VOCE obb
				   	   			where obb.CD_CDS          = aFsp.CD_CDS_OBBLIGAZIONE
								and  obb.ESERCIZIO 	  = aFsp.ESERCIZIO_OBBLIGAZIONE
								and  obb.ESERCIZIO_ORIGINALE = aFsp.ESERCIZIO_ORI_OBBLIGAZIONE
								and  obb.PG_OBBLIGAZIONE = aFsp.PG_OBBLIGAZIONE
								and  obb.PG_OBBLIGAZIONE_SCADENZARIO = aFsp.PG_OBBLIGAZIONE_SCADENZARIO
								and  obb.IM_VOCE>0
								group by obb.ESERCIZIO, obb.ESERCIZIO_ORIGINALE,
								obb.PG_OBBLIGAZIONE,obb.PG_OBBLIGAZIONE_SCADENZARIO,obb.CD_VOCE
								--aggiunta la group by e sum(im_voce)
								) loop

						 i := i+1;

						 insert into VPG_FONDO_ECONOMALE  (ID,
													CHIAVE,
													SEQUENZA,
													DESCRIZIONE,
													CD_CDS,
													ESERCIZIO,
													CD_UNITA_ORGANIZZATIVA,
													CD_CODICE_FONDO,
													TI_RECORD_L1,
													PG_FONDO_SPESA,
													DT_SPESA,
													FL_FORNITORE_SALTUARIO,
													CD_TERZO,
													DENOMINAZIONE_FORNITORE,
													FL_DOCUMENTATA,
													DS_SPESA,
													ESERCIZIO_ORI_OBBLIGAZIONE,
													PG_OBBLIGAZIONE,
													ESERCIZIO_OBBLIGAZIONE,
													PG_OBBLIGAZIONE_SCAD,
													CD_VOCE,
													FL_REINTEGRATA,
													IM_SPESE,
													UTCR,
													DACR)
						VALUES (aId,
							    'B:spese',
							    i,
								'Stampa RPT',
								aFec.CD_CDS,
								aFec.ESERCIZIO,
								aFec.CD_UNITA_ORGANIZZATIVA,
								aFec.CD_CODICE_FONDO,
								'S',
								aFsp.PG_FONDO_SPESA,
								aFsp.DT_SPESA,
								aFsp.FL_FORNITORE_SALTUARIO,
								aFsp.CD_TERZO,
								aFsp.DENOMINAZIONE_FORNITORE,
								aFsp.FL_DOCUMENTATA,
								aFsp.DS_SPESA,
								aFsp.ESERCIZIO_ORI_OBBLIGAZIONE,
								aFsp.PG_OBBLIGAZIONE,
								aFsp.ESERCIZIO_OBBLIGAZIONE,
								aFsp.PG_OBBLIGAZIONE_SCADENZARIO,
								aCd_Voce.CD_VOCE,
								aFsp.FL_REINTEGRATA,
								decode(aFsp.FL_DOCUMENTATA,'N',aFsp.IM_AMMONTARE_SPESA,aCd_Voce.IM_VOCE),
								--aCd_Voce.IM_VOCE,
								--aFsp.IM_AMMONTARE_SPESA,
								aUtcr,
								sysdate);

					 end loop; -- fine loop sui capitoli per FL_DOCUMENTATA = 'N'
			   else -- associazione non ancora effettuata
					 i := i+1;

					 insert into VPG_FONDO_ECONOMALE  (ID,
												CHIAVE,
												SEQUENZA,
												DESCRIZIONE,
												CD_CDS,
												ESERCIZIO,
												CD_UNITA_ORGANIZZATIVA,
												CD_CODICE_FONDO,
												TI_RECORD_L1,
												PG_FONDO_SPESA,
												DT_SPESA,
												FL_FORNITORE_SALTUARIO,
												CD_TERZO,
												DENOMINAZIONE_FORNITORE,
												FL_DOCUMENTATA,
												DS_SPESA,
        	        	        						        ESERCIZIO_ORI_OBBLIGAZIONE,
												PG_OBBLIGAZIONE,
												ESERCIZIO_OBBLIGAZIONE,
												PG_OBBLIGAZIONE_SCAD,
												FL_REINTEGRATA,
												IM_SPESE,
												UTCR,
												DACR)
					VALUES (aId,
						    'B:spese',
						    i,
							'Stampa RPT',
							aFec.CD_CDS,
							aFec.ESERCIZIO,
							aFec.CD_UNITA_ORGANIZZATIVA,
							aFec.CD_CODICE_FONDO,
							'S',
							aFsp.PG_FONDO_SPESA,
							aFsp.DT_SPESA,
							aFsp.FL_FORNITORE_SALTUARIO,
							aFsp.CD_TERZO,
							aFsp.DENOMINAZIONE_FORNITORE,
							aFsp.FL_DOCUMENTATA,
							aFsp.DS_SPESA,
							aFsp.ESERCIZIO_ORI_OBBLIGAZIONE,
							aFsp.PG_OBBLIGAZIONE,
							aFsp.ESERCIZIO_OBBLIGAZIONE,
							aFsp.PG_OBBLIGAZIONE_SCADENZARIO,
							aFsp.FL_REINTEGRATA,
							aFsp.IM_AMMONTARE_SPESA,
							aUtcr,
							sysdate);
			   end if;

			end if;

		end loop; -- fine loop (3) per le spese

		-- determino la data di spesa successiva per corretto ordinamento dei
		-- mandati di reintegro

		select min(fsp.DT_SPESA) into aDtNext
		from fondo_spesa fsp
		where fsp.CD_CDS         	  	 = aFec.CD_CDS
		  and fsp.ESERCIZIO				 = aFec.ESERCIZIO
		  and fsp.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
		  and fsp.CD_CODICE_FONDO		 = aFec.CD_CODICE_FONDO
		  and fsp.DT_SPESA 				 > aDt.DT_SPESA;

		-- se ? l'ultima data, assegno al next l'upper bound del range definito
		-- dall'utente
		if aDtNext is null then aDtNext := to_date(aDt_a,'YYYY/MM/DD')+1; end if;

		-- ciclo sulle righe del FONDO_ECONOMALE per i REINTEGRI - loop 4
		for aFsp_R in (select *
					   from FONDO_SPESA fsp_R
	 	 	   	   	   where fsp_R.CD_CDS         = aFec.CD_CDS
				         and fsp_R.ESERCIZIO	  = aFec.ESERCIZIO
				     	 and fsp_R.CD_CODICE_FONDO= aFec.CD_CODICE_FONDO
				     	 and fsp_R.CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
					 	 and fsp_R.FL_REINTEGRATA 		  = 'Y'
						 and exists
						 	 (select 1
	 					 	  from mandato man
	 						  where man.cd_cds     = fsp_R.CD_CDS_MANDATO
	   						    and man.esercizio  = fsp_R.ESERCIZIO_MANDATO
	   							and man.PG_MANDATO = fsp_R.PG_MANDATO
								and man.DT_EMISSIONE>=to_date(aDt_da,'YYYY/MM/DD') -- DT_EMISSIONE compresa nelle date di
				  				and man.DT_EMISSIONE<=to_date(aDt_a ,'YYYY/MM/DD') --	 riferimento della stampa
				  				and man.DT_EMISSIONE >= aDt.DT_SPESA
				  				and man.DT_EMISSIONE < aDtNext
				  				and man.STATO		 <> 'A')
                  order by	fsp_R.PG_MANDATO,fsp_R.PG_FONDO_SPESA) loop
					 	 --order by fsp_R.PG_FONDO_SPESA) loop


		   -- lo stesso mandato pu? reintegrare pi? spese ---> non si deve duplicare l'informazione

   		   select max(sequenza) into tmp
		   from VPG_FONDO_ECONOMALE
		   where ID				        = aId
		     and CHIAVE 				= 'C:reintegri'
		  	 and SEQUENZA				<= i
		  	 and CD_CDS			     	= aFec.CD_CDS
		  	 and ESERCIZIO			    = aFec.ESERCIZIO
		  	 and CD_UNITA_ORGANIZZATIVA = aFec.CD_UNITA_ORGANIZZATIVA
		  	 and CD_CODICE_FONDO		= aFec.CD_CODICE_FONDO
		  	 and TI_RECORD_L1			= 'R'
		  	 and PG_MANDATO_FSP is not null
		  	 and PG_MANDATO_FSP		   	= aFsp_R.PG_MANDATO;

		   if tmp is null then
		   -- il record non ? stato inserito in riferimento ad altri dettagli di spesa

		   	    i := i+1;

				select * into aMand
				from mandato
				where CD_CDS       = aFsp_R.CD_CDS_MANDATO
				  and ESERCIZIO    = aFsp_R.ESERCIZIO_MANDATO
				  and PG_MANDATO   = aFsp_R.PG_MANDATO
				  and DT_EMISSIONE>=to_date(aDt_da,'YYYY/MM/DD') -- DT_EMISSIONE compresa nelle date di
				  and DT_EMISSIONE<=to_date(aDt_a ,'YYYY/MM/DD') --	 riferimento della stampa
				  and DT_EMISSIONE >= aDt.DT_SPESA
				  and DT_EMISSIONE < aDtNext
				  and STATO		   <> 'A'; -- esiste per condizione sul loop

			   -- inizio inserimento record R: reintegri
				insert into VPG_FONDO_ECONOMALE  (ID,
											CHIAVE,
											SEQUENZA,
											DESCRIZIONE,
											CD_CDS,
											ESERCIZIO,
											CD_UNITA_ORGANIZZATIVA,
											CD_CODICE_FONDO,
											TI_RECORD_L1,
											DT_SPESA,
											DS_SPESA,
											PG_MANDATO_FSP,
											IM_ENTRATE,
											UTCR,
											DACR)
				values (aId,
					    'C:reintegri',
					    i,
						'Stampa RPT',
						aFec.CD_CDS,
						aFec.ESERCIZIO,
						aFec.CD_UNITA_ORGANIZZATIVA,
						aFec.CD_CODICE_FONDO,
						'R',
						aMand.DT_EMISSIONE,
						aMand.DS_MANDATO || ' - Mandato n. ' || aFsp_R.PG_MANDATO,
						aFsp_R.PG_MANDATO,
						aMand.IM_MANDATO,
						aUtcr,
						sysdate);
				-- fine   inserimento record R: reintegri

		   end if; -- fine blocco if

		end loop; -- fine loop (4) per i REINTEGRI


	end loop; -- fine loop (2) sulle date

	-- inizio inserimento record U: ultima riga
	-- Controllo se il Fondo Economale ? in stato "Chiuso", (FL_APERTO = 'N'): in tal caso procedo.

	if aFec.FL_APERTO = 'N' then

		-- aMand ? il mandato di regolarizzazione di reintegro del fondo
		-- valorizzato nel loop precedente dei reintegri

		-- inserimento penultima riga 'V' della reversale di regolarizzazione


		for ult_riga in (select rev.DT_EMISSIONE,
								rev.DS_REVERSALE,
								rev.PG_REVERSALE,
								rev.IM_REVERSALE
						from ass_mandato_reversale amr,
							 REVERSALE rev
						where amr.CD_CDS_MANDATO    = aMand.cd_cds
						  and amr.ESERCIZIO_MANDATO = aMand.esercizio
						  and amr.PG_MANDATO		= aMand.pg_mandato
						  and rev.CD_CDS       		= amr.CD_CDS_reversale
						  and rev.ESERCIZIO    		= amr.ESERCIZIO_REVERSALE
						  and rev.PG_REVERSALE 		= amr.PG_REVERSALE
						  and rev.DT_EMISSIONE<= to_date(aDt_a,'YYYY/MM/DD') )loop
				i := i+1;

					insert into VPG_FONDO_ECONOMALE  (ID,
												CHIAVE,
												SEQUENZA,
												DESCRIZIONE,
												CD_CDS,
												ESERCIZIO,
												CD_UNITA_ORGANIZZATIVA,
												CD_CODICE_FONDO,
												TI_RECORD_L1,
												DT_SPESA,
												DS_SPESA,
												PG_REVERSALE,
												IM_SPESE,
												IM_RESIDUO,
												UTCR,
												DACR)
					values ( aId,
						    'D:ultima riga',
						    i,
							'Stampa RPT',
							aFec.CD_CDS,
							aFec.ESERCIZIO,
							aFec.CD_UNITA_ORGANIZZATIVA,
							aFec.CD_CODICE_FONDO,
							'V',
							ult_riga.DT_EMISSIONE,
							ult_riga.DS_REVERSALE || ' - Reversale n. ' || ult_riga.PG_REVERSALE,
							ult_riga.PG_REVERSALE,
							ult_riga.IM_REVERSALE,
							0,
							aUtcr,
							sysdate);

		  end loop;

		i := i+1;


		if aFec.FL_REV_DA_EMETTERE = 'N' and aFec.pg_reversale is not null then

		 -- ? stata emessa la reversale di chiusura
			insert into VPG_FONDO_ECONOMALE  (ID,
										CHIAVE,
										SEQUENZA,
										DESCRIZIONE,
										CD_CDS,
										ESERCIZIO,
										CD_UNITA_ORGANIZZATIVA,
										CD_CODICE_FONDO,
										TI_RECORD_L1,
										DT_SPESA,
										DS_SPESA,
										PG_REVERSALE,
										IM_SPESE,
										IM_RESIDUO,
										UTCR,
										DACR)
			select  aId,
				    'D:ultima riga',
				    i,
					'Stampa RPT',
					aFec.CD_CDS,
					aFec.ESERCIZIO,
					aFec.CD_UNITA_ORGANIZZATIVA,
					aFec.CD_CODICE_FONDO,
					'U',
					rev.DT_EMISSIONE,
					rev.DS_REVERSALE || ' - Reversale n. ' || rev.PG_REVERSALE,
					rev.PG_REVERSALE,
					rev.IM_REVERSALE,
					0,
					aUtcr,
					sysdate
			from REVERSALE rev
			where rev.CD_CDS       = aFec.CD_CDS
			and   rev.ESERCIZIO    = aFec.ESERCIZIO_REVERSALE
			and   rev.PG_REVERSALE = aFec.PG_REVERSALE
			and   rev.DT_EMISSIONE<= to_date(aDt_a,'YYYY/MM/DD');
		end if;


	end if;


	-- fine   inserimento record U: ultima riga

 end loop;  -- fine loop 1

 for rec_im_res in ( 	select *
 	 		from vpg_fondo_economale
 			where id = aId
 			order by sequenza
			) loop
				begin
				--dbms_output.put_line('v_sequenza :'||v_sequenza);
				--v_im_residuo := nvl(rec_im_res.IM_RESIDUO,0);

				select nvl(im_residuo,0) into v_im_residuo
				from vpg_fondo_economale
				where id = rec_im_res.id
				and sequenza = rec_im_res.sequenza;

				select nvl(im_spese,0), nvl(im_entrate,0) into v_im_spese,v_im_entrate
				from vpg_fondo_economale
				where id = aId
				and sequenza = v_sequenza+1;

				--dbms_output.put_line('v_sequenza :'||v_sequenza);
				--dbms_output.put_line('v_im_residuo :'||v_im_residuo||' - v_im_spese: '||v_im_spese||' v_im_entrate: '||v_im_entrate);

				v_im_residuo_new := nvl(v_im_residuo,0) - nvl(v_im_spese,0) + nvl(v_im_entrate,0);
				--dbms_output.put_line('v_sequenza :'||v_sequenza);
				--dbms_output.put_line('v_im_residuo - v_im_spese + v_im_entrate = v_im_residuo_new : '||v_im_residuo||' - '||v_im_spese||' + '||v_im_entrate||' = '||v_im_residuo_new);

					 update vpg_fondo_economale
 					 set im_residuo = v_im_residuo_new
 					 where sequenza = v_sequenza+1
					 and id = aId;

					 v_sequenza := v_sequenza + 1;

				exception
					when no_data_found then
						exit;
				end;
 end loop;

 -- Apro il cursore sulla vista VPG_FONDO_ECONOMALE
/* open tc for
  select * from VPG_FONDO_ECONOMALE where id = aId;*/

-- close tc; --- ELIMINARE PER RICHIAMARE DA CR !!!
end;
/






© 2015 - 2024 Weber Informatics LLC | Privacy Policy