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

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

There is a newer version: 6.6.11
Show newest version
CREATE OR REPLACE PROCEDURE         SPG_MISSIONE
--
-- Date: 18/07/2006
-- Version: 1.13
--
-- Protocollo VPG per stampa massiva di note e prospetti di liquidazione missione
--
--
-- History:
--
-- Date: 03/02/2003
-- Version: 1.0
-- Creazione
--
-- Date: 26/02/2003
-- Version: 1.1
-- Corretta selezione missioni
--
-- Date: 03/03/2003
-- Version: 1.2
-- Estrazione MISSIONE_DIARIA.IM_DIARIA (segnalazione 503)
--
-- Date: 06/03/2003
-- Version: 1.3
-- Gestione eccezione per chiave duplicata in dettagli di diaria
--
-- Date: 13/03/2003
-- Version: 1.4
-- Corretta gestione testata per missioni provvisorie
--
-- Date: 08/04/2003
-- Version: 1.5
-- Corretta gestione rapporti anagrafico (segnalazione n.567)
--
-- Date: 15/04/2003
-- Version: 1.6
-- Completata correzione gestione rapporto
--
-- Date: 06/05/2003
-- Version: 1.7
-- Corretta tipizzazione record indennit? chilometrica (segnalazione n. 589)
--
-- Date: 08/05/2003
-- Version: 1.8
-- Inserito campo aliquota dei cori (segnalazione n. 593)
--
-- Date: 27/05/2003
-- Version: 1.9
-- Valorizzato ds_comune e cd_provincia per missioni associate a compenso
--
-- Date: 04/08/2003
-- Version: 1.10
-- Corretta valorizzazione pg_reversale del rimborso
--
-- Date: 29/09/2003
-- Version: 1.11
-- Inserito im_anticipo per im_anticipo = im_missione (no rimborso)
-- (segnalazione n.648)
-- Stampa riquadro anticipo anche nel caso questo transiti per il fondo
-- economale (segnalazione n. 649)
--
-- Date: 20/01/2004
-- Version: 1.12
-- Estrazione CIN dalla BANCA (richiesta n. 697)
--
-- Date: 18/07/2006
-- Version: 1.13
-- Gestione Impegni/Accertamenti Residui:
-- aggiornata la funzione per tener conto anche del campo Esercizio Originale Impegno/Accertamento
--
-- Body:
--
(
 aCd_cds in varchar2,
 aCd_uo in varchar2,
 aEs in number,
 aPg_da in number,
 aPg_a in number,
 aCd_terzo in varchar2
) is
 aId number;
 i number;
 aNum1 number := 0;
 aNum2 number := 0;
 aNum3 number := 0;
 aVar1 varchar2(300) := null;
 aVar2 varchar2(300) := null;
 aComp compenso%rowtype;
 aAnt anticipo%rowtype;
 aRim rimborso%rowtype;
begin
 select IBMSEQ00_CR_PACKAGE.nextval into aId from dual;
 i:=0;

 for aMiss in (select * from missione m
 	 	   	   where m.CD_CDS                 = aCd_cds
			     and m.CD_UNITA_ORGANIZZATIVA = aCd_uo
				 and m.ESERCIZIO			  = aEs
				 and m.PG_MISSIONE			  >= aPg_da
				 and m.PG_MISSIONE			  <= aPg_a
				 and m.STATO_COFI			  != 'A'
				 and to_char(m.CD_TERZO) like aCd_terzo) loop
	-- inizio loop 1

	i := i+1;

	if aMiss.FL_ASSOCIATO_COMPENSO = 'N' then
	--  missioni non associate a compenso

	--	inizio inserimento record (A,A) testata

		begin
			 select mriga.ESERCIZIO, mriga.PG_MANDATO into aNum1, aNum2
			 from mandato_riga mriga
			 where mriga.CD_CDS_DOC_AMM	  	   = aMiss.CD_CDS
	  		   and mriga.CD_UO_DOC_AMM	  	   = aMiss.CD_UNITA_ORGANIZZATIVA
	  		   and mriga.ESERCIZIO_DOC_AMM 	   = aMiss.ESERCIZIO
	  		   and mriga.PG_DOC_AMM		  	   = aMiss.PG_MISSIONE
	  		   and mriga.CD_TIPO_DOCUMENTO_AMM = 'MISSIONE'
	  		   and mriga.STATO				   <> 'A' ;
		exception when NO_DATA_FOUND then
			  aNum1 := 0;
			  aNum2 := 0;
		end;

		begin
			 select uo.DS_UNITA_ORGANIZZATIVA into aVar1
			 from unita_organizzativa uo
			 where uo.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA;
		exception when NO_DATA_FOUND then
			 aVar1 := null;
		end;

		select rif.DS_INQUADRAMENTO into aVar2
		from rif_inquadramento rif
		where rif.PG_RIF_INQUADRAMENTO = aMiss.PG_RIF_INQUADRAMENTO;

		select i+Count(1) Into i
		from terzo ter
			,rapporto rap
		where ter.CD_TERZO         = aMiss.CD_TERZO
		  and rap.CD_TIPO_RAPPORTO = aMiss.CD_TIPO_RAPPORTO
		  and rap.CD_ANAG		   = ter.CD_ANAG
		  and rap.DT_INI_VALIDITA <= Trunc(aMiss.DT_INIZIO_MISSIONE)
		  and rap.DT_FIN_VALIDITA >= Trunc(aMiss.DT_INIZIO_MISSIONE);

		insert into VPG_MISSIONE   (ID,
									CHIAVE,
									SEQUENZA,
									DESCRIZIONE,
									CD_CDS,
									CD_UNITA_ORGANIZZATIVA,
									ESERCIZIO,
									PG_MISSIONE,
									TI_RECORD_L1,
									TI_RECORD_L2,
									TI_PROVVISORIO_DEFINITIVO,
									ES_FINANZIARIO,
									DS_UNITA_ORGANIZZATIVA,
									FL_ASSOCIATO_COMPENSO,
									NOME,
									COGNOME,
									CD_TERZO,
									VIA_SEDE,
									NUMERO_CIVICO_SEDE,
									CAP_COMUNE_SEDE,
									TI_ANAGRAFICO,
									ESERCIZIO_ORI_OBBL_ACC,
									PG_OBBL_ACC,
									PG_OBBL_ACC_SCADENZARIO,
									PG_MAN_REV,
									MATRICOLA,
									QUALIFICA,
									DT_REGISTRAZIONE)
		select aId,
			   'AA:Testata',
			   i+Rownum,
			   'Stampa RPT',
			   aMiss.CD_CDS,
			   aMiss.CD_UNITA_ORGANIZZATIVA,
			   aMiss.ESERCIZIO,
			   aMiss.PG_MISSIONE,
			   'A',
			   'A',
			   aMiss.TI_PROVVISORIO_DEFINITIVO,
			   aNum1,
			   aVar1,
			   aMiss.FL_ASSOCIATO_COMPENSO,
			   aMiss.NOME,
			   aMiss.COGNOME,
			   aMiss.CD_TERZO,
			   ter.VIA_SEDE,
			   ter.NUMERO_CIVICO_SEDE,
			   ter.CAP_COMUNE_SEDE,
			   aMiss.TI_ANAGRAFICO,
			   aMiss.ESERCIZIO_ORI_OBBLIGAZIONE,
			   aMiss.PG_OBBLIGAZIONE,
			   aMiss.PG_OBBLIGAZIONE_SCADENZARIO,
			   aNum2,
			   decode(aMiss.TI_ANAGRAFICO,'D',rap.MATRICOLA_DIPENDENTE,aMiss.CD_TERZO),
			   aVar2,
			   aMiss.DT_REGISTRAZIONE
		from terzo ter
			,rapporto rap
		where ter.CD_TERZO         = aMiss.CD_TERZO
		  and rap.CD_TIPO_RAPPORTO = aMiss.CD_TIPO_RAPPORTO
		  and rap.CD_ANAG		   = ter.CD_ANAG
		  and rap.DT_INI_VALIDITA <= Trunc(aMiss.DT_INIZIO_MISSIONE)
		  and rap.DT_FIN_VALIDITA >= Trunc(aMiss.DT_INIZIO_MISSIONE);

		select ter.PG_COMUNE_SEDE into aNum1
		from terzo ter
		where ter.CD_TERZO = aMiss.CD_TERZO;

		update VPG_MISSIONE vpg
		set (DS_COMUNE,
			 CD_PROVINCIA)
		= (select com.DS_COMUNE
		  		 ,com.CD_PROVINCIA
		   from comune com
		   where com.PG_COMUNE = aNum1)
		where vpg.CD_CDS 	   	 	     = aMiss.CD_CDS
		  and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
		  and vpg.ESERCIZIO				 = aMiss.ESERCIZIO
		  and vpg.PG_MISSIONE			 = aMiss.PG_MISSIONE
		  and vpg.TI_RECORD_L1			 = 'A'
		  and vpg.TI_RECORD_L2			 = 'A'
		  and vpg.SEQUENZA				 = i+Rownum;

	-- fine inserimento record (A,A) testata

	-- inizio inserimento record (A,B2) capitoli della missione

	if aMiss.PG_OBBLIGAZIONE is not null then
	-- missioni con anticipo < missione => no rimborso

		begin
			 select mriga.ESERCIZIO, mriga.PG_MANDATO into aNum1, aNum2
			 from mandato_riga mriga
			 where mriga.CD_CDS_DOC_AMM	  	   = aMiss.CD_CDS
	  		   and mriga.CD_UO_DOC_AMM	  	   = aMiss.CD_UNITA_ORGANIZZATIVA
	  		   and mriga.ESERCIZIO_DOC_AMM 	   = aMiss.ESERCIZIO
	  		   and mriga.PG_DOC_AMM		  	   = aMiss.PG_MISSIONE
	  		   and mriga.CD_TIPO_DOCUMENTO_AMM = 'MISSIONE'
	  		   and mriga.STATO				   <> 'A' ;
		exception when NO_DATA_FOUND then
			  aNum1 := 0;
			  aNum2 := 0;
		end;

		begin
			 select ant.IM_ANTICIPO into aNum3
			 from anticipo ant
			 where ant.CD_CDS				   = aMiss.CD_CDS_ANTICIPO
  			   and ant.CD_UNITA_ORGANIZZATIVA  = aMiss.CD_UO_ANTICIPO
  			   and ant.ESERCIZIO			   = aMiss.ESERCIZIO_ANTICIPO
  			   and ant.PG_ANTICIPO			   = aMiss.PG_ANTICIPO;
		exception when NO_DATA_FOUND then
			 aNum3 := 0;
		end;

	   -- ciclo sui capitoli associati alla missione
	    for aVoce in (select * from obbligazione_scad_voce obbv
	   	   		 	  where obbv.CD_CDS				  	     = aMiss.CD_CDS_OBBLIGAZIONE
  					    and obbv.ESERCIZIO				     = aMiss.ESERCIZIO_OBBLIGAZIONE
  					    and obbv.ESERCIZIO_ORIGINALE		     = aMiss.ESERCIZIO_ORI_OBBLIGAZIONE
  					    and obbv.PG_OBBLIGAZIONE		  	 = aMiss.PG_OBBLIGAZIONE
  					    and obbv.PG_OBBLIGAZIONE_SCADENZARIO = aMiss.PG_OBBLIGAZIONE_SCADENZARIO) loop
	    -- inizio loop 3

	   	  i := i+1;

		  insert into VPG_MISSIONE (ID,
									CHIAVE,
									SEQUENZA,
									DESCRIZIONE,
									CD_CDS,
									CD_UNITA_ORGANIZZATIVA,
									ESERCIZIO,
									PG_MISSIONE,
									TI_RECORD_L1,
									TI_RECORD_L2,
									FL_RIMBORSO,
									TI_PROVVISORIO_DEFINITIVO,
									FL_ASSOCIATO_COMPENSO,
									ESERCIZIO_ORI_OBBL_ACC,
									PG_OBBL_ACC,
									PG_OBBL_ACC_SCADENZARIO,
									TI_COMPETENZA_RESIDUO,
									DT_SCADENZA,
									IM_ANTICIPO,
									CD_VOCE,
									PG_MAN_REV,
									DS_MODALITA_PAG,
									INTESTAZIONE,
									NUMERO_CONTO,
									CIN,
									ABI,
									CAB,
									IM_TOTALE_MISSIONE,
									IM_DIARIA_LORDA,
									IM_QUOTA_ESENTE,
									IM_DIARIA_NETTO,
									IM_SPESE,
									IM_LORDO_PERCEPIENTE,
									IM_NETTO_PECEPIENTE,
									DS_MISSIONE,
									DT_INIZIO_MISSIONE,
									DT_FINE_MISSIONE,
									IBAN)
		  select   aId,
	 			   'AB2:missione,capitoli',
	 			   i,
	 			   'Stampa RPT',
	 			   aMiss.CD_CDS,
	 			   aMiss.CD_UNITA_ORGANIZZATIVA,
	 			   aMiss.ESERCIZIO,
	 			   aMiss.PG_MISSIONE,
	 			   'A',
	 			   'B2',
	 			   'N',
	 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
	 			   aMiss.FL_ASSOCIATO_COMPENSO,
	 			   aMiss.ESERCIZIO_ORI_OBBLIGAZIONE,
	 			   aMiss.PG_OBBLIGAZIONE,
	 			   aMiss.PG_OBBLIGAZIONE_SCADENZARIO,
	 			   decode(obb.ESERCIZIO_ORI_RIPORTO,null,'C','R'),
	 			   obbs.DT_SCADENZA,
	 			   aNum3,
	 			   aVoce.CD_VOCE,
	 			   aNum2,
	 			   rif.DS_MODALITA_PAG,
	 			   ban.INTESTAZIONE,
	 			   ban.NUMERO_CONTO,
				   nvl(ban.CIN,' '),
	 			   ban.ABI,
	 			   ban.CAB,
	 			   aMiss.IM_TOTALE_MISSIONE,
	 			   aMiss.IM_DIARIA_LORDA,
	 			   aMiss.IM_QUOTA_ESENTE,
	 			   aMiss.IM_DIARIA_NETTO,
	 			   aMiss.IM_SPESE,
	 			   aMiss.IM_LORDO_PERCEPIENTE,
	 			   aMiss.IM_NETTO_PECEPIENTE,
	 			   aMiss.DS_MISSIONE,
	 			   aMiss.DT_INIZIO_MISSIONE,
	 			   aMiss.DT_FINE_MISSIONE,
	 			   ban.codice_iban
		  from obbligazione obb
			  ,obbligazione_scadenzario obbs
			  ,rif_modalita_pagamento rif
			  ,banca ban
		  where obb.CD_CDS			                 = aMiss.CD_CDS_OBBLIGAZIONE
			and obb.ESERCIZIO		   	   	 = aMiss.ESERCIZIO_OBBLIGAZIONE
			and obb.ESERCIZIO_ORIGINALE	   	   	 = aMiss.ESERCIZIO_ORI_OBBLIGAZIONE
  			and obb.PG_OBBLIGAZIONE	   		   	 = aMiss.PG_OBBLIGAZIONE
			and obbs.CD_CDS				   	 = aMiss.CD_CDS_OBBLIGAZIONE
			and obbs.ESERCIZIO		 	   	 = aMiss.ESERCIZIO_OBBLIGAZIONE
			and obbs.ESERCIZIO_ORIGINALE	  	   	 = aMiss.ESERCIZIO_ORI_OBBLIGAZIONE
			and obbs.PG_OBBLIGAZIONE		  	 = aMiss.PG_OBBLIGAZIONE
			and obbs.PG_OBBLIGAZIONE_SCADENZARIO = aMiss.PG_OBBLIGAZIONE_SCADENZARIO
			and rif.CD_MODALITA_PAG			   	 = aMiss.CD_MODALITA_PAG
			and ban.CD_TERZO					 = aMiss.CD_TERZO
			and ban.PG_BANCA					 = aMiss.PG_BANCA;

		  begin
			  update VPG_MISSIONE vpg
			  set (DS_ABICAB,
				   VIA_BANCA,
				   CAP_BANCA,
				   DS_COMUNE_BANCA,
				   CD_PROVINCIA_BANCA)
			  = (select   abi.DS_ABICAB,
				  		  abi.VIA,
						  abi.CAP,
						  com.DS_COMUNE,
						  com.CD_PROVINCIA
				 from abicab abi
				   	 ,comune com
				 where abi.ABI       = vpg.ABI
				   and abi.CAB	     = vpg.CAB
				   and com.PG_COMUNE = abi.PG_COMUNE)
			  where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
				and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
				and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
				and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
				and vpg.TI_RECORD_L1		   = 'A'
				and vpg.TI_RECORD_L2		   = 'B2'
				and vpg.SEQUENZA			   = i;
		  exception when NO_DATA_FOUND then
		  			null;
		  end;

	    end loop; -- fine loop 3
	else
	-- missioni con anticipo >= missione
	   	 declare
		 	esisteAnticipo boolean;
		 begin
		 	 begin
				 select * into aAnt
				 from anticipo ant
				 where ant.CD_CDS	              = aMiss.CD_CDS_ANTICIPO
	  			   and ant.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UO_ANTICIPO
	  			   and ant.ESERCIZIO			  = aMiss.ESERCIZIO_ANTICIPO
	  			   and ant.PG_ANTICIPO			  = aMiss.PG_ANTICIPO;
				 esisteAnticipo := true;
			 exception when NO_DATA_FOUND then
			 	 esisteAnticipo := false;
			 end;

			 if esisteAnticipo then
				 begin
				 	  select * into aRim
					  from rimborso rim
					  where rim.CD_CDS_ANTICIPO	   = aAnt.CD_CDS
  				   		and rim.CD_UO_ANTICIPO	   = aAnt.CD_UNITA_ORGANIZZATIVA
  				   		and rim.ESERCIZIO_ANTICIPO = aAnt.ESERCIZIO
  				   		and rim.PG_ANTICIPO	       = aAnt.PG_ANTICIPO;
				  	  insert into VPG_MISSIONE vpg (ID,
													CHIAVE,
													SEQUENZA,
													DESCRIZIONE,
													CD_CDS,
													CD_UNITA_ORGANIZZATIVA,
													ESERCIZIO,
													PG_MISSIONE,
													TI_RECORD_L1,
													TI_RECORD_L2,
													FL_RIMBORSO,
													TI_PROVVISORIO_DEFINITIVO,
													FL_ASSOCIATO_COMPENSO,
													ESERCIZIO_ORI_OBBL_ACC,
													PG_OBBL_ACC,
													PG_OBBL_ACC_SCADENZARIO,
													TI_COMPETENZA_RESIDUO,
													DT_SCADENZA,
													IM_ANTICIPO,
													IM_RIMBORSO,
													CD_VOCE,
													DS_MODALITA_PAG,
													INTESTAZIONE,
													NUMERO_CONTO,
													CIN,
													ABI,
													CAB,
													IM_TOTALE_MISSIONE,
													IM_DIARIA_LORDA,
													IM_QUOTA_ESENTE,
													IM_DIARIA_NETTO,
													IM_SPESE,
													IM_LORDO_PERCEPIENTE,
													IM_NETTO_PECEPIENTE,
													DS_MISSIONE,
													DT_INIZIO_MISSIONE,
													DT_FINE_MISSIONE,
													IBAN)
			  	     select    aId,
				 			   'AB2:missione,capitoli',
				 			   i,
				 			   'Stampa RPT',
				 			   aMiss.CD_CDS,
				 			   aMiss.CD_UNITA_ORGANIZZATIVA,
				 			   aMiss.ESERCIZIO,
				 			   aMiss.PG_MISSIONE,
				 			   'A',
				 			   'B2',
				 			   'Y',
				 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
				 			   aMiss.FL_ASSOCIATO_COMPENSO,
				 			   aRim.ESERCIZIO_ORI_ACCERTAMENTO,
				 			   aRim.PG_ACCERTAMENTO,
				 			   aRim.PG_ACCERTAMENTO_SCADENZARIO,
				 			   decode(acc.ESERCIZIO_ORI_RIPORTO,null,'C','R'),
				 			   accs.DT_SCADENZA_INCASSO,
				 			   aAnt.IM_ANTICIPO,
							   aRim.IM_RIMBORSO,
				 			   acc.CD_VOCE,
				 			   rif.DS_MODALITA_PAG,
				 			   ban.INTESTAZIONE,
				 			   ban.NUMERO_CONTO,
							   nvl(ban.CIN,' '),
				 			   ban.ABI,
				 			   ban.CAB,
				 			   aMiss.IM_TOTALE_MISSIONE,
				 			   aMiss.IM_DIARIA_LORDA,
				 			   aMiss.IM_QUOTA_ESENTE,
				 			   aMiss.IM_DIARIA_NETTO,
				 			   aMiss.IM_SPESE,
				 			   aMiss.IM_LORDO_PERCEPIENTE,
				 			   aMiss.IM_NETTO_PECEPIENTE,
				 			   aMiss.DS_MISSIONE,
				 			   aMiss.DT_INIZIO_MISSIONE,
				 			   aMiss.DT_FINE_MISSIONE,
	 			                          ban.codice_iban
			         from accertamento acc
				 	 	 ,accertamento_scadenzario accs
					 	 ,rif_modalita_pagamento rif
					 	 ,banca ban
     		 		 where acc.CD_CDS	  	   = aRim.CD_CDS_ACCERTAMENTO
	  			       and acc.ESERCIZIO	   = aRim.ESERCIZIO_ACCERTAMENTO
	  			       and acc.ESERCIZIO_ORIGINALE = aRim.ESERCIZIO_ORI_ACCERTAMENTO
	  			   	   and acc.PG_ACCERTAMENTO = aRim.PG_ACCERTAMENTO
				   	   and accs.CD_CDS 				        = aRim.CD_CDS_ACCERTAMENTO
	  			   	   and accs.ESERCIZIO			        = aRim.ESERCIZIO_ACCERTAMENTO
	  			   	   and accs.ESERCIZIO_ORIGINALE = aRim.ESERCIZIO_ORI_ACCERTAMENTO
	  			   	   and accs.PG_ACCERTAMENTO		        = aRim.PG_ACCERTAMENTO
	  			   	   and accs.PG_ACCERTAMENTO_SCADENZARIO = aRim.PG_ACCERTAMENTO_SCADENZARIO
				   	   and rif.CD_MODALITA_PAG				= aMiss.CD_MODALITA_PAG
				   	   and ban.CD_TERZO						= aMiss.CD_TERZO
				   	   and ban.PG_BANCA						= aMiss.PG_BANCA;

					 begin
						  update VPG_MISSIONE vpg
						  set (PG_MAN_REV)
						  = (select   rriga.PG_REVERSALE
							 from reversale_riga rriga
							 where rriga.CD_CDS_DOC_AMM	  	  	    = aRim.CD_CDS
		  			   		   and rriga.CD_UO_DOC_AMM	  	  	    = aRim.CD_UNITA_ORGANIZZATIVA
		  			   		   and rriga.ESERCIZIO_DOC_AMM 	  	    = aRim.ESERCIZIO
		  			   		   and rriga.PG_DOC_AMM		  	  	    = aRim.PG_RIMBORSO
		  			   		   and rriga.CD_TIPO_DOCUMENTO_AMM 	    = 'RIMBORSO'
		  			   		   and rriga.STATO				  	    <> 'A')
						  where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
							and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
							and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
							and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
							and vpg.TI_RECORD_L1		   = 'A'
							and vpg.TI_RECORD_L2		   = 'B2'
							and vpg.SEQUENZA			   = i;
					  exception when NO_DATA_FOUND then
					  			null;
					  end;

				 exception when NO_DATA_FOUND then  -- non esiste rimborso
			    	 insert into VPG_MISSIONE vpg  (ID,
													CHIAVE,
													SEQUENZA,
													DESCRIZIONE,
													CD_CDS,
													CD_UNITA_ORGANIZZATIVA,
													ESERCIZIO,
													PG_MISSIONE,
													TI_RECORD_L1,
													TI_RECORD_L2,
													FL_RIMBORSO,
													TI_PROVVISORIO_DEFINITIVO,
													FL_ASSOCIATO_COMPENSO,
													IM_ANTICIPO,
													DS_MODALITA_PAG,
													INTESTAZIONE,
													NUMERO_CONTO,
													CIN,
													ABI,
													CAB,
													IM_TOTALE_MISSIONE,
													IM_DIARIA_LORDA,
													IM_QUOTA_ESENTE,
													IM_DIARIA_NETTO,
													IM_SPESE,
													IM_LORDO_PERCEPIENTE,
													IM_NETTO_PECEPIENTE,
													DS_MISSIONE,
													DT_INIZIO_MISSIONE,
													DT_FINE_MISSIONE,
													IBAN)
				  	 select    aId,
				 			   'AB2:missione,capitoli',
				 			   i,
				 			   'Stampa RPT',
				 			   aMiss.CD_CDS,
				 			   aMiss.CD_UNITA_ORGANIZZATIVA,
				 			   aMiss.ESERCIZIO,
				 			   aMiss.PG_MISSIONE,
				 			   'A',
				 			   'B2',
				 			   'Y',
				 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
				 			   aMiss.FL_ASSOCIATO_COMPENSO,
				 			   aAnt.IM_ANTICIPO,
				 			   rif.DS_MODALITA_PAG,
				 			   ban.INTESTAZIONE,
				 			   ban.NUMERO_CONTO,
							   nvl(ban.CIN,' '),
				 			   ban.ABI,
				 			   ban.CAB,
				 			   aMiss.IM_TOTALE_MISSIONE,
				 			   aMiss.IM_DIARIA_LORDA,
				 			   aMiss.IM_QUOTA_ESENTE,
				 			   aMiss.IM_DIARIA_NETTO,
				 			   aMiss.IM_SPESE,
				 			   aMiss.IM_LORDO_PERCEPIENTE,
				 			   aMiss.IM_NETTO_PECEPIENTE,
				 			   aMiss.DS_MISSIONE,
				 			   aMiss.DT_INIZIO_MISSIONE,
				 			   aMiss.DT_FINE_MISSIONE,
	 			                          ban.codice_iban
				     from rif_modalita_pagamento rif
						 ,banca ban
				     where rif.CD_MODALITA_PAG				= aMiss.CD_MODALITA_PAG
					   and ban.CD_TERZO						= aMiss.CD_TERZO
					   and ban.PG_BANCA						= aMiss.PG_BANCA;

				 end;
			 else -- non esiste anticipo
		    	 insert into VPG_MISSIONE vpg  (ID,
												CHIAVE,
												SEQUENZA,
												DESCRIZIONE,
												CD_CDS,
												CD_UNITA_ORGANIZZATIVA,
												ESERCIZIO,
												PG_MISSIONE,
												TI_RECORD_L1,
												TI_RECORD_L2,
												FL_RIMBORSO,
												TI_PROVVISORIO_DEFINITIVO,
												FL_ASSOCIATO_COMPENSO,
												DS_MODALITA_PAG,
												INTESTAZIONE,
												NUMERO_CONTO,
												CIN,
												ABI,
												CAB,
												IM_TOTALE_MISSIONE,
												IM_DIARIA_LORDA,
												IM_QUOTA_ESENTE,
												IM_DIARIA_NETTO,
												IM_SPESE,
												IM_LORDO_PERCEPIENTE,
												IM_NETTO_PECEPIENTE,
												DS_MISSIONE,
												DT_INIZIO_MISSIONE,
												DT_FINE_MISSIONE,
												IBAN)
			  	 select    aId,
			 			   'AB2:missione,capitoli',
			 			   i,
			 			   'Stampa RPT',
			 			   aMiss.CD_CDS,
			 			   aMiss.CD_UNITA_ORGANIZZATIVA,
			 			   aMiss.ESERCIZIO,
			 			   aMiss.PG_MISSIONE,
			 			   'A',
			 			   'B2',
			 			   'Y',
			 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
			 			   aMiss.FL_ASSOCIATO_COMPENSO,
			 			   rif.DS_MODALITA_PAG,
			 			   ban.INTESTAZIONE,
			 			   ban.NUMERO_CONTO,
						   nvl(ban.CIN,' '),
			 			   ban.ABI,
			 			   ban.CAB,
			 			   aMiss.IM_TOTALE_MISSIONE,
			 			   aMiss.IM_DIARIA_LORDA,
			 			   aMiss.IM_QUOTA_ESENTE,
			 			   aMiss.IM_DIARIA_NETTO,
			 			   aMiss.IM_SPESE,
			 			   aMiss.IM_LORDO_PERCEPIENTE,
			 			   aMiss.IM_NETTO_PECEPIENTE,
			 			   aMiss.DS_MISSIONE,
			 			   aMiss.DT_INIZIO_MISSIONE,
			 			   aMiss.DT_FINE_MISSIONE,
	 			                   ban.codice_iban
			     from rif_modalita_pagamento rif
					 ,banca ban
			     where rif.CD_MODALITA_PAG				= aMiss.CD_MODALITA_PAG
				   and ban.CD_TERZO						= aMiss.CD_TERZO
				   and ban.PG_BANCA						= aMiss.PG_BANCA;

			end if;

		    begin
			     update VPG_MISSIONE vpg
			     set (DS_ABICAB,
				      VIA_BANCA,
				      CAP_BANCA,
				      DS_COMUNE_BANCA,
				      CD_PROVINCIA_BANCA)
			     = (select   abi.DS_ABICAB,
				    	     abi.VIA,
						  	 abi.CAP,
						  	 com.DS_COMUNE,
						  	 com.CD_PROVINCIA
				    from abicab abi
				   	    ,comune com
				 	where abi.ABI       = vpg.ABI
				      and abi.CAB	     = vpg.CAB
				   	  and com.PG_COMUNE = abi.PG_COMUNE)
			     where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
				   and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
				   and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
				   and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
				   and vpg.TI_RECORD_L1		   = 'A'
				   and vpg.TI_RECORD_L2		   = 'B2'
				   and vpg.SEQUENZA			   = i;
		    exception when NO_DATA_FOUND then
		  			null;
		  	end;

		end; -- fine blocco locale


	end if; -- fine distinzione missioni con/senza rimborso

	-- fine inserimento record (A,B2) capitoli della missione

 	else
	-- missioni associate a compenso

		 select * into aComp
		 from compenso comp
		 where comp.CD_CDS_MISSIONE		  = aMiss.CD_CDS
 			   and comp.ESERCIZIO_MISSIONE	  = aMiss.ESERCIZIO
 			   and comp.PG_MISSIONE			  = aMiss.PG_MISSIONE
 			   and comp.CD_UO_MISSIONE		  = aMiss.CD_UNITA_ORGANIZZATIVA
 			   and comp.STATO_COFI			  <> 'A' ;

		 begin
		 	  select mriga.ESERCIZIO, mriga.PG_MANDATO into aNum1, aNum2
			  from mandato_riga mriga
			  where mriga.CD_CDS_DOC_AMM	  	= aComp.CD_CDS
  		   	    and mriga.CD_UO_DOC_AMM	  	    = aComp.CD_UNITA_ORGANIZZATIVA
  		   		and mriga.ESERCIZIO_DOC_AMM 	= aComp.ESERCIZIO
  		   		and mriga.PG_DOC_AMM		  	= aComp.PG_COMPENSO
  		   		and mriga.CD_TIPO_DOCUMENTO_AMM = 'COMPENSO'
  		   		and mriga.STATO				   <> 'A' ;
		 exception when NO_DATA_FOUND then
		 		   aNum1 := 0;
				   aNum2 := 0;
		 end;

		 begin
			 select ant.IM_ANTICIPO into aNum3
			 from anticipo ant
			 where ant.CD_CDS				   = aMiss.CD_CDS_ANTICIPO
  			   and ant.CD_UNITA_ORGANIZZATIVA  = aMiss.CD_UO_ANTICIPO
  			   and ant.ESERCIZIO			   = aMiss.ESERCIZIO_ANTICIPO
  			   and ant.PG_ANTICIPO			   = aMiss.PG_ANTICIPO;
		 exception when NO_DATA_FOUND then
			 aNum3 := 0;
		 end;


	--	inizio inserimento record (A,A) testata
                 i := i+1;
		 insert into VPG_MISSIONE  (ID,
									CHIAVE,
									SEQUENZA,
									DESCRIZIONE,
									CD_CDS,
									CD_UNITA_ORGANIZZATIVA,
									ESERCIZIO,
									PG_MISSIONE,
									TI_RECORD_L1,
									TI_RECORD_L2,
									TI_PROVVISORIO_DEFINITIVO,
									ES_FINANZIARIO,
									DS_UNITA_ORGANIZZATIVA,
									FL_ASSOCIATO_COMPENSO,
									NOME,
									COGNOME,
									CD_TERZO,
									VIA_SEDE,
									NUMERO_CIVICO_SEDE,
									CAP_COMUNE_SEDE,
									TI_ANAGRAFICO,
									ESERCIZIO_ORI_OBBL_ACC,
									PG_OBBL_ACC,
									PG_OBBL_ACC_SCADENZARIO,
									PG_MAN_REV,
									MATRICOLA,
									QUALIFICA,
									DT_REGISTRAZIONE)
		 select aId,
			    'AA:Testata',
			    i,
			    'Stampa RPT',
			    aMiss.CD_CDS,
			    aMiss.CD_UNITA_ORGANIZZATIVA,
			    aMiss.ESERCIZIO,
			    aMiss.PG_MISSIONE,
			    'A',
			    'A',
			    aMiss.TI_PROVVISORIO_DEFINITIVO,
			    aNum1,
			    uo.DS_UNITA_ORGANIZZATIVA,
			    aMiss.FL_ASSOCIATO_COMPENSO,
			    aMiss.NOME,
			    aMiss.COGNOME,
			    aMiss.CD_TERZO,
			    ter.VIA_SEDE,
			    ter.NUMERO_CIVICO_SEDE,
			    ter.CAP_COMUNE_SEDE,
			    aMiss.TI_ANAGRAFICO,
			    aComp.ESERCIZIO_ORI_OBBLIGAZIONE,
			    aComp.PG_OBBLIGAZIONE,
			    aComp.PG_OBBLIGAZIONE_SCADENZARIO,
			    aNum2,
			    decode(aMiss.TI_ANAGRAFICO,'D',rap.MATRICOLA_DIPENDENTE,aMiss.CD_TERZO),
			    rif.DS_INQUADRAMENTO,
			    aMiss.DT_REGISTRAZIONE
		 from unita_organizzativa uo
		     ,terzo ter
			 ,rif_inquadramento rif
			 ,rapporto rap
		 where uo.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
		   and ter.CD_TERZO				 = aMiss.CD_TERZO
		   and rif.PG_RIF_INQUADRAMENTO  = aMiss.PG_RIF_INQUADRAMENTO
		   and rap.CD_TIPO_RAPPORTO 	 = aMiss.CD_TIPO_RAPPORTO
		   and rap.CD_ANAG		   		 = ter.CD_ANAG
		   and rap.DT_INI_VALIDITA 		 <= Trunc(aMiss.DT_INIZIO_MISSIONE)
		   and rap.DT_FIN_VALIDITA 		 >= Trunc(aMiss.DT_INIZIO_MISSIONE)
		   And Rownum <2;

		select ter.PG_COMUNE_SEDE into aNum1
		from terzo ter
		where ter.CD_TERZO = aMiss.CD_TERZO;

		update VPG_MISSIONE vpg
		set (DS_COMUNE,
			 CD_PROVINCIA)
		= (select com.DS_COMUNE
		  		 ,com.CD_PROVINCIA
		   from comune com
		   where com.PG_COMUNE = aNum1)
		where vpg.CD_CDS 	   	 	     = aMiss.CD_CDS
		  and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
		  and vpg.ESERCIZIO				 = aMiss.ESERCIZIO
		  and vpg.PG_MISSIONE			 = aMiss.PG_MISSIONE
		  and vpg.TI_RECORD_L1			 = 'A'
		  and vpg.TI_RECORD_L2			 = 'A'
		  and vpg.SEQUENZA				 = i;

	--	fine inserimento record (A,A) testata

	-- inizio inserimento record (A,B2) missione + capitoli

	   	 if aComp.PG_OBBLIGAZIONE is not null then
		 -- missioni con anticipo < missione => no rimborso

			-- ciclo sui capitoli
			for aVoce in (select * from obbligazione_scad_voce obbv
					  	  where obbv.CD_CDS		     = aComp.CD_CDS_OBBLIGAZIONE
						    and obbv.ESERCIZIO		     = aComp.ESERCIZIO_OBBLIGAZIONE
						    and obbv.ESERCIZIO_ORIGINALE     = aComp.ESERCIZIO_ORI_OBBLIGAZIONE
							and obbv.PG_OBBLIGAZIONE     = aComp.PG_OBBLIGAZIONE
  							and obbv.PG_OBBLIGAZIONE_SCADENZARIO = aComp.PG_OBBLIGAZIONE_SCADENZARIO) loop
			-- inizio loop 4

			   i := i+1;

		  	   insert into VPG_MISSIONE (ID,
										CHIAVE,
										SEQUENZA,
										DESCRIZIONE,
										CD_CDS,
										CD_UNITA_ORGANIZZATIVA,
										ESERCIZIO,
										PG_MISSIONE,
										TI_RECORD_L1,
										TI_RECORD_L2,
										FL_RIMBORSO,
										TI_PROVVISORIO_DEFINITIVO,
										FL_ASSOCIATO_COMPENSO,
										ESERCIZIO_ORI_OBBL_ACC,
										PG_OBBL_ACC,
										PG_OBBL_ACC_SCADENZARIO,
										TI_COMPETENZA_RESIDUO,
										DT_SCADENZA,
										PG_COMPENSO,
										IM_CR_ENTE,
										IM_ANTICIPO,
										CD_VOCE,
										PG_MAN_REV,
										DS_MODALITA_PAG,
										INTESTAZIONE,
										NUMERO_CONTO,
										CIN,
										ABI,
										CAB,
										IM_TOTALE_MISSIONE,
										IM_DIARIA_LORDA,
										IM_QUOTA_ESENTE,
										IM_DIARIA_NETTO,
										IM_SPESE,
										IM_LORDO_PERCEPIENTE,
										IM_NETTO_PECEPIENTE,
										DS_MISSIONE,
										DT_INIZIO_MISSIONE,
										DT_FINE_MISSIONE,
										IBAN)
			   select  aId,
		 			   'AB2:missione,capitoli',
		 			   i,
		 			   'Stampa RPT',
		 			   aMiss.CD_CDS,
		 			   aMiss.CD_UNITA_ORGANIZZATIVA,
		 			   aMiss.ESERCIZIO,
		 			   aMiss.PG_MISSIONE,
		 			   'A',
		 			   'B2',
		 			   'N',
		 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
		 			   aMiss.FL_ASSOCIATO_COMPENSO,
		 			   aComp.ESERCIZIO_ORI_OBBLIGAZIONE,
		 			   aComp.PG_OBBLIGAZIONE,
		 			   aComp.PG_OBBLIGAZIONE_SCADENZARIO,
		 			   decode(obb.ESERCIZIO_ORI_RIPORTO,null,'C','R'),
		 			   obbs.DT_SCADENZA,
					   aComp.PG_COMPENSO,
					   aComp.IM_CR_ENTE,
		 			   aNum3,
		 			   aVoce.CD_VOCE,
		 			   aNum2,
		 			   rif.DS_MODALITA_PAG,
		 			   ban.INTESTAZIONE,
		 			   ban.NUMERO_CONTO,
					   nvl(ban.CIN,' '),
		 			   ban.ABI,
		 			   ban.CAB,
		 			   aMiss.IM_TOTALE_MISSIONE,
		 			   aMiss.IM_DIARIA_LORDA,
		 			   aMiss.IM_QUOTA_ESENTE,
		 			   aMiss.IM_DIARIA_NETTO,
		 			   aMiss.IM_SPESE,
		 			   aMiss.IM_LORDO_PERCEPIENTE,
		 			   aMiss.IM_NETTO_PECEPIENTE,
		 			   aMiss.DS_MISSIONE,
		 			   aMiss.DT_INIZIO_MISSIONE,
		 			   aMiss.DT_FINE_MISSIONE,
	 			           ban.codice_iban
			   from obbligazione obb
				   ,obbligazione_scadenzario obbs
				   ,rif_modalita_pagamento rif
				   ,banca ban
			   where obb.CD_CDS			          = aComp.CD_CDS_OBBLIGAZIONE
				 and obb.ESERCIZIO		   	  = aComp.ESERCIZIO_OBBLIGAZIONE
				 and obb.ESERCIZIO_ORIGINALE  	   	  = aComp.ESERCIZIO_ORI_OBBLIGAZIONE
	  			 and obb.PG_OBBLIGAZIONE		  = aComp.PG_OBBLIGAZIONE
				 and obbs.CD_CDS			  = aComp.CD_CDS_OBBLIGAZIONE
				 and obbs.ESERCIZIO		   	  = aComp.ESERCIZIO_OBBLIGAZIONE
				 and obbs.ESERCIZIO_ORIGINALE	   	  = aComp.ESERCIZIO_ORI_OBBLIGAZIONE
				 and obbs.PG_OBBLIGAZIONE         	  = aComp.PG_OBBLIGAZIONE
				 and obbs.PG_OBBLIGAZIONE_SCADENZARIO = aComp.PG_OBBLIGAZIONE_SCADENZARIO
				 and rif.CD_MODALITA_PAG			  = aMiss.CD_MODALITA_PAG
				 and ban.CD_TERZO					  = aMiss.CD_TERZO
				 and ban.PG_BANCA					  = aMiss.PG_BANCA;

			   begin
				  update VPG_MISSIONE vpg
				  set (DS_ABICAB,
					   VIA_BANCA,
					   CAP_BANCA,
					   DS_COMUNE_BANCA,
					   CD_PROVINCIA_BANCA)
				  = (select   abi.DS_ABICAB,
					  		  abi.VIA,
							  abi.CAP,
							  com.DS_COMUNE,
							  com.CD_PROVINCIA
					 from abicab abi
					   	 ,comune com
					 where abi.ABI       = vpg.ABI
					   and abi.CAB	     = vpg.CAB
					   and com.PG_COMUNE = abi.PG_COMUNE)
				  where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
					and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
					and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
					and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
					and vpg.TI_RECORD_L1		   = 'A'
					and vpg.TI_RECORD_L2		   = 'B2'
					and vpg.SEQUENZA			   = i;
			   exception when NO_DATA_FOUND then
			  			null;
			   end;

			end loop; -- fine loop 4

		 else
		 -- missioni con anticipo > missione => rimborso

	 		declare
	 				aAnt anticipo%rowtype;
	 				aRim rimborso%rowtype;
	 		begin

	 			 begin
					 select * into aAnt
	 				 from anticipo ant
	 				 where ant.CD_CDS	              = aMiss.CD_CDS_ANTICIPO
	 	  			   and ant.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UO_ANTICIPO
	 	  			   and ant.ESERCIZIO			  = aMiss.ESERCIZIO_ANTICIPO
	 	  			   and ant.PG_ANTICIPO			  = aMiss.PG_ANTICIPO;

	 				 select * into aRim
	 				 from rimborso rim
	 				 where rim.CD_CDS_ANTICIPO	  = aAnt.CD_CDS
	   				   and rim.CD_UO_ANTICIPO	  = aAnt.CD_UNITA_ORGANIZZATIVA
	   				   and rim.ESERCIZIO_ANTICIPO = aAnt.ESERCIZIO
	   				   and rim.PG_ANTICIPO	      = aAnt.PG_ANTICIPO;

		 	    	 insert into VPG_MISSIONE vpg  (ID,
		 											CHIAVE,
		 											SEQUENZA,
		 											DESCRIZIONE,
		 											CD_CDS,
		 											CD_UNITA_ORGANIZZATIVA,
		 											ESERCIZIO,
		 											PG_MISSIONE,
		 											TI_RECORD_L1,
		 											TI_RECORD_L2,
		 											FL_RIMBORSO,
		 											TI_PROVVISORIO_DEFINITIVO,
		 											FL_ASSOCIATO_COMPENSO,
		 											ESERCIZIO_ORI_OBBL_ACC,
		 											PG_OBBL_ACC,
		 											PG_OBBL_ACC_SCADENZARIO,
		 											TI_COMPETENZA_RESIDUO,
													PG_COMPENSO,
		 											DT_SCADENZA,
		 											IM_ANTICIPO,
													IM_RIMBORSO,
		 											CD_VOCE,
		 											DS_MODALITA_PAG,
		 											INTESTAZIONE,
		 											NUMERO_CONTO,
													CIN,
		 											ABI,
		 											CAB,
		 											IM_TOTALE_MISSIONE,
		 											IM_DIARIA_LORDA,
		 											IM_QUOTA_ESENTE,
		 											IM_DIARIA_NETTO,
		 											IM_SPESE,
		 											IM_LORDO_PERCEPIENTE,
		 											IM_NETTO_PECEPIENTE,
		 											DS_MISSIONE,
		 											DT_INIZIO_MISSIONE,
		 											DT_FINE_MISSIONE,
		 											IBAN)
		 		  	 select    aId,
		 		 			   'AB2:missione,capitoli',
		 		 			   i,
		 		 			   'Stampa RPT',
		 		 			   aMiss.CD_CDS,
		 		 			   aMiss.CD_UNITA_ORGANIZZATIVA,
		 		 			   aMiss.ESERCIZIO,
		 		 			   aMiss.PG_MISSIONE,
		 		 			   'A',
		 		 			   'B2',
		 		 			   'Y',
		 		 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
		 		 			   aMiss.FL_ASSOCIATO_COMPENSO,
		   	  			   	   aRim.ESERCIZIO_ORI_ACCERTAMENTO,
		 		 			   aRim.PG_ACCERTAMENTO,
		 		 			   aRim.PG_ACCERTAMENTO_SCADENZARIO,
		 		 			   decode(acc.ESERCIZIO_ORI_RIPORTO,null,'C','R'),
							   aComp.PG_COMPENSO,
		 		 			   accs.DT_SCADENZA_INCASSO,
		 		 			   aAnt.IM_ANTICIPO,
							   aRim.IM_RIMBORSO,
		 		 			   acc.CD_VOCE,
		 		 			   rif.DS_MODALITA_PAG,
		 		 			   ban.INTESTAZIONE,
		 		 			   ban.NUMERO_CONTO,
							   nvl(ban.CIN,' '),
		 		 			   ban.ABI,
		 		 			   ban.CAB,
		 		 			   aMiss.IM_TOTALE_MISSIONE,
		 		 			   aMiss.IM_DIARIA_LORDA,
		 		 			   aMiss.IM_QUOTA_ESENTE,
		 		 			   aMiss.IM_DIARIA_NETTO,
		 		 			   aMiss.IM_SPESE,
		 		 			   aMiss.IM_LORDO_PERCEPIENTE,
		 		 			   aMiss.IM_NETTO_PECEPIENTE,
		 		 			   aMiss.DS_MISSIONE,
		 		 			   aMiss.DT_INIZIO_MISSIONE,
		 		 			   aMiss.DT_FINE_MISSIONE,
	 			                           ban.codice_iban
		 		     from accertamento acc
		 			 	 ,accertamento_scadenzario accs
		 				 ,rif_modalita_pagamento rif
		 				 ,banca ban
		 		     where acc.CD_CDS	  	    = aRim.CD_CDS_ACCERTAMENTO
		   			   and acc.ESERCIZIO	    = aRim.ESERCIZIO
	  			   	   and acc.ESERCIZIO_ORIGINALE = aRim.ESERCIZIO_ORI_ACCERTAMENTO
		   			   and acc.PG_ACCERTAMENTO  = aRim.PG_ACCERTAMENTO
		 			   and accs.CD_CDS 				        = aRim.CD_CDS_ACCERTAMENTO
		   			   and accs.ESERCIZIO			        = aRim.ESERCIZIO
	  			   	   and accs.ESERCIZIO_ORIGINALE = aRim.ESERCIZIO_ORI_ACCERTAMENTO
		   			   and accs.PG_ACCERTAMENTO		        = aRim.PG_ACCERTAMENTO
		   			   and accs.PG_ACCERTAMENTO_SCADENZARIO = aRim.PG_ACCERTAMENTO_SCADENZARIO
		 			   and rif.CD_MODALITA_PAG				= aMiss.CD_MODALITA_PAG
		 			   and ban.CD_TERZO						= aMiss.CD_TERZO
		 			   and ban.PG_BANCA						= aMiss.PG_BANCA;

				 begin
					  update VPG_MISSIONE vpg
					  set (PG_MAN_REV)
					  = (select   rriga.PG_REVERSALE
						 from reversale_riga rriga
						 where rriga.CD_CDS_DOC_AMM	  	  	    = aRim.CD_CDS
	  			   		   and rriga.CD_UO_DOC_AMM	  	  	    = aRim.CD_UNITA_ORGANIZZATIVA
	  			   		   and rriga.ESERCIZIO_DOC_AMM 	  	    = aRim.ESERCIZIO
	  			   		   and rriga.PG_DOC_AMM		  	  	    = aRim.PG_RIMBORSO
	  			   		   and rriga.CD_TIPO_DOCUMENTO_AMM 	    = 'RIMBORSO'
	  			   		   and rriga.STATO				  	    <> 'A')
					  where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
						and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
						and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
						and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
						and vpg.TI_RECORD_L1		   = 'A'
						and vpg.TI_RECORD_L2		   = 'B2'
						and vpg.SEQUENZA			   = i;
				  exception when NO_DATA_FOUND then
				  			null;
				  end;



	 			 exception when NO_DATA_FOUND then

		 	    	 insert into VPG_MISSIONE vpg  (ID,
		 											CHIAVE,
		 											SEQUENZA,
		 											DESCRIZIONE,
		 											CD_CDS,
		 											CD_UNITA_ORGANIZZATIVA,
		 											ESERCIZIO,
		 											PG_MISSIONE,
		 											TI_RECORD_L1,
		 											TI_RECORD_L2,
		 											FL_RIMBORSO,
		 											TI_PROVVISORIO_DEFINITIVO,
		 											FL_ASSOCIATO_COMPENSO,
													PG_COMPENSO,
		 											DS_MODALITA_PAG,
		 											INTESTAZIONE,
		 											NUMERO_CONTO,
													CIN,
		 											ABI,
		 											CAB,
		 											IM_TOTALE_MISSIONE,
		 											IM_DIARIA_LORDA,
		 											IM_QUOTA_ESENTE,
		 											IM_DIARIA_NETTO,
		 											IM_SPESE,
		 											IM_LORDO_PERCEPIENTE,
		 											IM_NETTO_PECEPIENTE,
		 											DS_MISSIONE,
		 											DT_INIZIO_MISSIONE,
		 											DT_FINE_MISSIONE,
		 											IM_ANTICIPO,
		 											IBAN)
		 		  	 select    aId,
		 		 			   'AB2:missione,capitoli',
		 		 			   i,
		 		 			   'Stampa RPT',
		 		 			   aMiss.CD_CDS,
		 		 			   aMiss.CD_UNITA_ORGANIZZATIVA,
		 		 			   aMiss.ESERCIZIO,
		 		 			   aMiss.PG_MISSIONE,
		 		 			   'A',
		 		 			   'B2',
		 		 			   'Y',
		 		 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
		 		 			   aMiss.FL_ASSOCIATO_COMPENSO,
							   aComp.PG_COMPENSO,
		 		 			   rif.DS_MODALITA_PAG,
		 		 			   ban.INTESTAZIONE,
		 		 			   ban.NUMERO_CONTO,
							   nvl(ban.CIN,' '),
		 		 			   ban.ABI,
		 		 			   ban.CAB,
		 		 			   aMiss.IM_TOTALE_MISSIONE,
		 		 			   aMiss.IM_DIARIA_LORDA,
		 		 			   aMiss.IM_QUOTA_ESENTE,
		 		 			   aMiss.IM_DIARIA_NETTO,
		 		 			   aMiss.IM_SPESE,
		 		 			   aMiss.IM_LORDO_PERCEPIENTE,
		 		 			   aMiss.IM_NETTO_PECEPIENTE,
		 		 			   aMiss.DS_MISSIONE,
		 		 			   aMiss.DT_INIZIO_MISSIONE,
		 		 			   aMiss.DT_FINE_MISSIONE,
		 		 			   aAnt.IM_ANTICIPO,
	 			                          ban.codice_iban
		 		     from rif_modalita_pagamento rif
		 				 ,banca ban
		 		     where rif.CD_MODALITA_PAG				= aMiss.CD_MODALITA_PAG
		 			   and ban.CD_TERZO						= aMiss.CD_TERZO
		 			   and ban.PG_BANCA						= aMiss.PG_BANCA;

	 			 end;


			     begin
	 			     update VPG_MISSIONE vpg
	 			     set (DS_ABICAB,
	 				      VIA_BANCA,
	 				      CAP_BANCA,
	 				      DS_COMUNE_BANCA,
	 				      CD_PROVINCIA_BANCA)
	 			     = (select   abi.DS_ABICAB,
	 				    	     abi.VIA,
	 						  	 abi.CAP,
	 						  	 com.DS_COMUNE,
	 						  	 com.CD_PROVINCIA
	 				    from abicab abi
	 				   	    ,comune com
	 				 	where abi.ABI       = vpg.ABI
	 				      and abi.CAB	    = vpg.CAB
	 				   	  and com.PG_COMUNE = abi.PG_COMUNE)
	 			     where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
	 				   and vpg.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
	 				   and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
	 				   and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
	 				   and vpg.TI_RECORD_L1		   = 'A'
	 				   and vpg.TI_RECORD_L2		   = 'B2'
	 				   and vpg.SEQUENZA			   = i;
	 		     exception when NO_DATA_FOUND then
	 		  			null;
			  	 end;

	 		end; -- fine blocco locale

		 end if; -- fine distinzione con/senza rimborso

	-- fine inserimento record (A,B2) missione + capitoli

	     -- loop sui cori
		 for aCori in (select * from contributo_ritenuta cori
		 	 	   	   where cori.CD_CDS				   = aComp.CD_CDS
  					     and cori.CD_UNITA_ORGANIZZATIVA   = aComp.CD_UNITA_ORGANIZZATIVA
  						 and cori.ESERCIZIO				   = aComp.ESERCIZIO
  						 and cori.PG_COMPENSO			   = aComp.PG_COMPENSO) loop
		 -- inizio loop 5

		 	  i := i+1;

		 -- inizio inserimento record (A,C) cori del compenso associato alla missione
			  insert into VPG_MISSIONE (ID,
										CHIAVE,
										SEQUENZA,
										DESCRIZIONE,
										CD_CDS,
										CD_UNITA_ORGANIZZATIVA,
										ESERCIZIO,
										PG_MISSIONE,
										TI_RECORD_L1,
										TI_RECORD_L2,
										TI_PROVVISORIO_DEFINITIVO,
										FL_ASSOCIATO_COMPENSO,
										ESERCIZIO_ORI_OBBL_ACC,
		 								PG_OBBL_ACC,
										PG_OBBL_ACC_SCADENZARIO,
										PG_COMPENSO,
										DS_MODALITA_PAG,
										INTESTAZIONE,
										NUMERO_CONTO,
										CIN,
										ABI,
										CAB,
										IM_TOTALE_MISSIONE,
										IM_DIARIA_LORDA,
										IM_QUOTA_ESENTE,
										IM_DIARIA_NETTO,
										IM_SPESE,
										IM_LORDO_PERCEPIENTE,
										IM_NETTO_PECEPIENTE,
										DS_MISSIONE,
										DT_INIZIO_MISSIONE,
										DT_FINE_MISSIONE,
										CD_CONTRIBUTO_RITENUTA,
										TI_ENTE_PERCIPIENTE,
										AMMONTARE,
										IBAN)
			  select   aId,
		 			   'AC:CORI',
		 			   i,
		 			   'Stampa RPT',
		 			   aMiss.CD_CDS,
		 			   aMiss.CD_UNITA_ORGANIZZATIVA,
		 			   aMiss.ESERCIZIO,
		 			   aMiss.PG_MISSIONE,
		 			   'A',
		 			   'C',
		 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
		 			   aMiss.FL_ASSOCIATO_COMPENSO,
		 			   aComp.ESERCIZIO_ORI_OBBLIGAZIONE,
		 			   aComp.PG_OBBLIGAZIONE,
		 			   aComp.PG_OBBLIGAZIONE_SCADENZARIO,
					   aComp.PG_COMPENSO,
		 			   rif.DS_MODALITA_PAG,
		 			   ban.INTESTAZIONE,
		 			   ban.NUMERO_CONTO,
					   nvl(ban.CIN,' '),
		 			   ban.ABI,
		 			   ban.CAB,
		 			   aMiss.IM_TOTALE_MISSIONE,
		 			   aMiss.IM_DIARIA_LORDA,
		 			   aMiss.IM_QUOTA_ESENTE,
		 			   aMiss.IM_DIARIA_NETTO,
		 			   aMiss.IM_SPESE,
		 			   aMiss.IM_LORDO_PERCEPIENTE,
		 			   aMiss.IM_NETTO_PECEPIENTE,
		 			   aMiss.DS_MISSIONE,
		 			   aMiss.DT_INIZIO_MISSIONE,
		 			   aMiss.DT_FINE_MISSIONE,
					   aCori.CD_CONTRIBUTO_RITENUTA,
					   aCori.TI_ENTE_PERCIPIENTE,
					   aCori.AMMONTARE,
	 			           ban.codice_iban
		 	  from rif_modalita_pagamento rif
			  	  ,banca ban
			  where rif.CD_MODALITA_PAG	= aMiss.CD_MODALITA_PAG
			    and ban.CD_TERZO		= aMiss.CD_TERZO
  				and ban.PG_BANCA	    = aMiss.PG_BANCA;

			  begin
	 			     update VPG_MISSIONE vpg
	 			     set (DS_ABICAB,
	 				      VIA_BANCA,
	 				      CAP_BANCA,
	 				      DS_COMUNE_BANCA,
	 				      CD_PROVINCIA_BANCA)
	 			     = (select   abi.DS_ABICAB,
	 				    	     abi.VIA,
	 						  	 abi.CAP,
	 						  	 com.DS_COMUNE,
	 						  	 com.CD_PROVINCIA
	 				    from abicab abi
	 				   	    ,comune com
	 				 	where abi.ABI       = vpg.ABI
	 				      and abi.CAB	    = vpg.CAB
	 				   	  and com.PG_COMUNE = abi.PG_COMUNE)
	 			     where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
	 				   and vpg.CD_UNITA_ORGANIZZATIVA  = aMiss.CD_UNITA_ORGANIZZATIVA
	 				   and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
	 				   and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
	 				   and vpg.TI_RECORD_L1		   = 'A'
	 				   and vpg.TI_RECORD_L2		   = 'C'
	 				   and vpg.SEQUENZA			   = i;
	 		  exception when NO_DATA_FOUND then
	 		  			null;
			  end;

		 	-- fine inserimento record (A,C) cori del compenso associato alla missione

			-- inizio inserimento record (E,A) dettaglio cori per prospetto

			  insert into VPG_MISSIONE (ID,
										CHIAVE,
										SEQUENZA,
										DESCRIZIONE,
										CD_CDS,
										CD_UNITA_ORGANIZZATIVA,
										ESERCIZIO,
										PG_MISSIONE,
										TI_RECORD_L1,
										TI_RECORD_L2,
										TI_PROVVISORIO_DEFINITIVO,
										FL_ASSOCIATO_COMPENSO,
										PG_COMPENSO,
										CD_CONTRIBUTO_RITENUTA,
										TI_ENTE_PERCIPIENTE,
										AMMONTARE,
										ALIQUOTA,
										IMPONIBILE,
										DS_CONTRIBUTO_RITENUTA,
										DETRAZIONE_ALTRI_NETTO,
										DETRAZIONE_CONIUGE_NETTO,
										DETRAZIONE_FIGLI_NETTO,
										DETRAZIONI_LA_NETTO,
										DETRAZIONI_PERSONALI_NETTO)
			  select aId,
			  		  'EA:dettaglio CORI',
					  i,
					  'Stampa RPT',
		 			   aMiss.CD_CDS,
		 			   aMiss.CD_UNITA_ORGANIZZATIVA,
		 			   aMiss.ESERCIZIO,
		 			   aMiss.PG_MISSIONE,
		 			   'E',
		 			   'A',
		 			   aMiss.TI_PROVVISORIO_DEFINITIVO,
		 			   aMiss.FL_ASSOCIATO_COMPENSO,
					   aComp.PG_COMPENSO,
					   aCori.CD_CONTRIBUTO_RITENUTA,
					   aCori.TI_ENTE_PERCIPIENTE,
					   aCori.AMMONTARE,
					   aCori.ALIQUOTA,
					   aCori.IMPONIBILE,
					   tcr.DS_CONTRIBUTO_RITENUTA,
					   aComp.DETRAZIONE_ALTRI_NETTO,
					   aComp.DETRAZIONE_CONIUGE_NETTO,
					   aComp.DETRAZIONE_FIGLI_NETTO,
					   aComp.DETRAZIONI_LA_NETTO,
					   aComp.DETRAZIONI_PERSONALI_NETTO
			  from tipo_contributo_ritenuta tcr
			  where tcr.CD_CONTRIBUTO_RITENUTA	   = aCori.CD_CONTRIBUTO_RITENUTA
  			    and tcr.DT_INI_VALIDITA			   = aCori.DT_INI_VALIDITA;

			-- fine inserimento record (E,A) dettaglio cori per prospetto

		 end loop;  -- fine loop 5

	end if; -- fine distinzione per missioni associate a compenso

	--	inizio inserimento record (A,B1) anticipo + capitoli

	begin
		select *
		into aAnt
		from anticipo ant
		where ant.CD_CDS                 = aMiss.CD_CDS_ANTICIPO
		  and ant.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UO_ANTICIPO
		  and ant.ESERCIZIO				 = aMiss.ESERCIZIO_ANTICIPO
		  and ant.PG_ANTICIPO			 = aMiss.PG_ANTICIPO;

		-- ciclo sui capitoli associati all'anticipo
		for aVoce in (select * from obbligazione_scad_voce obbv
				  	  where obbv.CD_CDS			 		   	 = aAnt.CD_CDS_OBBLIGAZIONE
					    and obbv.ESERCIZIO		   		   	 = aAnt.ESERCIZIO_OBBLIGAZIONE
					    and obbv.ESERCIZIO_ORIGINALE   		   	 = aAnt.ESERCIZIO_ORI_OBBLIGAZIONE
						and obbv.PG_OBBLIGAZIONE   		   	 = aAnt.PG_OBBLIGAZIONE
						and obbv.PG_OBBLIGAZIONE_SCADENZARIO = aAnt.PG_OBBLIGAZIONE_SCADENZARIO) loop
		-- inizio loop 2

			i := i+1;

			insert into VPG_MISSIONE   (ID,
										CHIAVE,
										SEQUENZA,
										DESCRIZIONE,
										CD_CDS,
										CD_UNITA_ORGANIZZATIVA,
										ESERCIZIO,
										PG_MISSIONE,
										TI_RECORD_L1,
										TI_RECORD_L2,
										TI_PROVVISORIO_DEFINITIVO,
										FL_ASSOCIATO_COMPENSO,
										ESERCIZIO_ORI_OBBL_ACC,
										PG_OBBL_ACC,
										PG_OBBL_ACC_SCADENZARIO,
										TI_COMPETENZA_RESIDUO,
										DT_SCADENZA,
										IM_ANTICIPO,
										CD_VOCE)
			select aId,
				   'AB1:anticipo,capitoli',
				   i,
				   'Stampa RPT',
				   aMiss.CD_CDS,
				   aMiss.CD_UNITA_ORGANIZZATIVA,
				   aMiss.ESERCIZIO,
				   aMiss.PG_MISSIONE,
				   'A',
				   'B1',
				   aMiss.TI_PROVVISORIO_DEFINITIVO,
				   aMiss.FL_ASSOCIATO_COMPENSO,
				   aAnt.ESERCIZIO_ORI_OBBLIGAZIONE,
				   aAnt.PG_OBBLIGAZIONE,
				   aAnt.PG_OBBLIGAZIONE_SCADENZARIO,
				   decode(obb.ESERCIZIO_ORI_RIPORTO,null,'C','R'),
				   obbs.DT_SCADENZA,
				   aAnt.IM_ANTICIPO,
				   aVoce.CD_VOCE
			from obbligazione obb
				,obbligazione_scadenzario obbs
			where obb.CD_CDS			 	   = aAnt.CD_CDS_OBBLIGAZIONE
			  and obb.ESERCIZIO			 	   = aAnt.ESERCIZIO_OBBLIGAZIONE
			  and obb.ESERCIZIO_ORIGINALE		 	   = aAnt.ESERCIZIO_ORI_OBBLIGAZIONE
	  		  and obb.PG_OBBLIGAZIONE		 	   = aAnt.PG_OBBLIGAZIONE
	  		  and obbs.CD_CDS				   = aAnt.CD_CDS_OBBLIGAZIONE
	  		  and obbs.ESERCIZIO			  	   = aAnt.ESERCIZIO_OBBLIGAZIONE
			  and obbs.ESERCIZIO_ORIGINALE		 	   = aAnt.ESERCIZIO_ORI_OBBLIGAZIONE
	  		  and obbs.PG_OBBLIGAZIONE		  	   = aAnt.PG_OBBLIGAZIONE
	  		  and obbs.PG_OBBLIGAZIONE_SCADENZARIO = aAnt.PG_OBBLIGAZIONE_SCADENZARIO;

			if aAnt.STATO_PAGAMENTO_FONDO_ECO = 'N' then
			  begin
 			     update VPG_MISSIONE vpg
 			     set (PG_MAN_REV)
 			     = (select mriga.pg_mandato
 				    from mandato_riga mriga
 				 	where mriga.CD_CDS_DOC_AMM			   = aAnt.cd_cds
			  		  and mriga.CD_UO_DOC_AMM			   = aAnt.cd_unita_organizzativa
			  		  and mriga.ESERCIZIO_DOC_AMM		   = aAnt.esercizio
			  		  and mriga.PG_DOC_AMM				   = aAnt.pg_anticipo
			  		  and mriga.CD_TIPO_DOCUMENTO_AMM 	   = 'ANTICIPO'
	  		  		  and mriga.STATO				  	   <> 'A')
 			     where vpg.CD_CDS 	   	 	       = aMiss.CD_CDS
 				   and vpg.CD_UNITA_ORGANIZZATIVA  = aMiss.CD_UNITA_ORGANIZZATIVA
 				   and vpg.ESERCIZIO			   = aMiss.ESERCIZIO
 				   and vpg.PG_MISSIONE			   = aMiss.PG_MISSIONE
 				   and vpg.TI_RECORD_L1		   = 'A'
 				   and vpg.TI_RECORD_L2		   = 'B1'
 				   and vpg.SEQUENZA			   = i;
	 		  exception when NO_DATA_FOUND then
	 		  			null;
			  end;
			end if;

		end loop; -- fine loop 2

	exception when NO_DATA_FOUND then
			  aVar1 := null;
			  aNum1 := 0;
			  aNum2 := 0;
			  aNum3 := 0;
			  -- non esiste anticipo
	end;

	--	fine inserimento record (A,B1) anticipo + capitoli

	-- inizio inserimento record (B,A) dettagli di spesa

	-- ciclo sui dettagli di spesa
	for aMdet in (select * from missione_dettaglio mdet
			 	  where mdet.CD_CDS			  	    = aMiss.CD_CDS
  				    and mdet.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
  				    and mdet.ESERCIZIO			    = aMiss.ESERCIZIO
  				    and mdet.PG_MISSIONE			= aMiss.PG_MISSIONE
  				    and mdet.TI_SPESA_DIARIA		= 'S'
  				    and mdet.TI_CD_TI_SPESA		    in ('A','N','P','T')) loop
	-- inizio loop 6

	    i := i+1;

		insert into VPG_MISSIONE (ID,
			   					  CHIAVE,
								  SEQUENZA,
								  DESCRIZIONE,
								  CD_CDS,
								  CD_UNITA_ORGANIZZATIVA,
								  ESERCIZIO,
								  PG_MISSIONE,
								  TI_RECORD_L1,
								  TI_RECORD_L2,
								  TI_PROVVISORIO_DEFINITIVO,
								  IM_SPESE,
								  PG_RIGA,
								  DT_INIZIO_TAPPA,
								  DS_SPESA,
								  FL_SPESA_ANTICIPATA,
								  CD_DIVISA_SPESA,
								  IM_SPESA_DIVISA,
								  CAMBIO_SPESA,
								  IM_BASE_MAGGIORAZIONE,
								  PERCENTUALE_MAGGIORAZIONE,
								  IM_MAGGIORAZIONE,
								  IM_SPESA_EURO,
								  IM_TOTALE_SPESA,
								  TI_AUTO,
								  CHILOMETRI,
								  INDENNITA_CHILOMETRICA,
								  IM_SPESE_ANTICIPATE)
	 	values  (aId,
			     'BA:spese dettagli',
				 i,
				 'Stampa RPT',
				 aMiss.CD_CDS,
				 aMiss.CD_UNITA_ORGANIZZATIVA,
				 aMiss.ESERCIZIO,
				 aMiss.PG_MISSIONE,
				 'B',
				 'A',
				 aMiss.TI_PROVVISORIO_DEFINITIVO,
				 aMiss.IM_SPESE,
				 aMdet.PG_RIGA,
				 aMdet.DT_INIZIO_TAPPA,
				 aMdet.DS_SPESA,
				 aMdet.FL_SPESA_ANTICIPATA,
				 aMdet.CD_DIVISA_SPESA,
				 aMdet.IM_SPESA_DIVISA,
				 aMdet.CAMBIO_SPESA,
				 aMdet.IM_BASE_MAGGIORAZIONE,
				 aMdet.PERCENTUALE_MAGGIORAZIONE,
				 aMdet.IM_MAGGIORAZIONE,
				 aMdet.IM_SPESA_EURO,
				 aMdet.IM_TOTALE_SPESA,
				 aMdet.TI_AUTO,
				 aMdet.CHILOMETRI,
				 aMdet.INDENNITA_CHILOMETRICA,
				 aMiss.IM_SPESE_ANTICIPATE);

	end loop; -- fine loop 6

	-- fine inserimento record (B,A) dettagli di spesa

	-- inizio inserimento record (B,B) dettagli di rimborso KM

	-- ciclo sui dettagli di spesa
	for aMdet in (select * from missione_dettaglio mdet
			 	  where mdet.CD_CDS			  	    = aMiss.CD_CDS
  				    and mdet.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
  				    and mdet.ESERCIZIO			    = aMiss.ESERCIZIO
  				    and mdet.PG_MISSIONE			= aMiss.PG_MISSIONE
  				    and mdet.TI_SPESA_DIARIA		= 'S'
  				    and mdet.TI_CD_TI_SPESA		    = 'R') loop
	-- inizio loop 7

	    i := i+1;

		insert into VPG_MISSIONE (ID,
			   					  CHIAVE,
								  SEQUENZA,
								  DESCRIZIONE,
								  CD_CDS,
								  CD_UNITA_ORGANIZZATIVA,
								  ESERCIZIO,
								  PG_MISSIONE,
								  TI_RECORD_L1,
								  TI_RECORD_L2,
								  TI_PROVVISORIO_DEFINITIVO,
								  IM_SPESE,
								  PG_RIGA,
								  DT_INIZIO_TAPPA,
								  DS_SPESA,
								  FL_SPESA_ANTICIPATA,
								  CD_DIVISA_SPESA,
								  IM_SPESA_DIVISA,
								  CAMBIO_SPESA,
								  IM_BASE_MAGGIORAZIONE,
								  PERCENTUALE_MAGGIORAZIONE,
								  IM_MAGGIORAZIONE,
								  IM_SPESA_EURO,
								  IM_TOTALE_SPESA,
								  TI_AUTO,
								  CHILOMETRI,
								  INDENNITA_CHILOMETRICA,
								  IM_SPESE_ANTICIPATE)
	 	values  (aId,
			     'BB:rimborso km',
				 i,
				 'Stampa RPT',
				 aMiss.CD_CDS,
				 aMiss.CD_UNITA_ORGANIZZATIVA,
				 aMiss.ESERCIZIO,
				 aMiss.PG_MISSIONE,
				 'B',
				 'B',
				 aMiss.TI_PROVVISORIO_DEFINITIVO,
				 aMiss.IM_SPESE,
				 aMDet.PG_RIGA,
				 aMDet.DT_INIZIO_TAPPA,
				 aMDet.DS_SPESA,
				 aMDet.FL_SPESA_ANTICIPATA,
				 aMDet.CD_DIVISA_SPESA,
				 aMDet.IM_SPESA_DIVISA,
				 aMDet.CAMBIO_SPESA,
				 aMDet.IM_BASE_MAGGIORAZIONE,
				 aMDet.PERCENTUALE_MAGGIORAZIONE,
				 aMDet.IM_MAGGIORAZIONE,
				 aMDet.IM_SPESA_EURO,
				 aMDet.IM_TOTALE_SPESA,
				 aMDet.TI_AUTO,
				 aMDet.CHILOMETRI,
				 aMDet.INDENNITA_CHILOMETRICA,
				 aMiss.IM_SPESE_ANTICIPATE);

	end loop; -- fine loop 7

	-- fine inserimento record (B,B) dettagli di rimborso KM

	-- inizio inserimento record (C,A) dettagli di diaria

	-- ciclo sulle tappe
	for aMtap in (select * from missione_tappa mtap
			 	  where mtap.CD_CDS			  	    = aMiss.CD_CDS
  				    and mtap.CD_UNITA_ORGANIZZATIVA = aMiss.CD_UNITA_ORGANIZZATIVA
  				    and mtap.ESERCIZIO			    = aMiss.ESERCIZIO
  				    and mtap.PG_MISSIONE			= aMiss.PG_MISSIONE
                    order by pg_missione,mtap.dt_inizio_tappa) loop
	-- inizio loop 8

	    i := i+1;

		select mdia.IM_DIARIA into aNum1
		from rif_inquadramento rif
			,missione_diaria mdia
		where rif.PG_RIF_INQUADRAMENTO	   = aMiss.PG_RIF_INQUADRAMENTO
		  and mdia.PG_NAZIONE			   = aMtap.PG_NAZIONE
  		  and mdia.CD_GRUPPO_INQUADRAMENTO = rif.CD_GRUPPO_INQUADRAMENTO
  		  and mdia.DT_INIZIO_VALIDITA 	   <= Trunc(aMiss.DT_INIZIO_MISSIONE)
  		  and mdia.DT_FINE_VALIDITA		   >= Trunc(aMiss.DT_INIZIO_MISSIONE);

		begin
			insert into VPG_MISSIONE (ID,
				   					  CHIAVE,
									  SEQUENZA,
									  DESCRIZIONE,
									  CD_CDS,
									  CD_UNITA_ORGANIZZATIVA,
									  ESERCIZIO,
									  PG_MISSIONE,
									  TI_RECORD_L1,
									  TI_RECORD_L2,
									  TI_PROVVISORIO_DEFINITIVO,
									  IM_DIARIA_LORDA,
									  IM_QUOTA_ESENTE,
									  IM_DIARIA_NETTO,
									  IM_SPESE,
									  DT_INIZIO_TAPPA,
									  DT_FINE_TAPPA,
									  CD_DIVISA_TAPPA,
									  CAMBIO_TAPPA,
									  IM_DIARIA,
									  IM_DIARIA_LORDA_DET,
									  IM_QUOTA_ESENTE_DET,
									  IM_DIARIA_NETTO_DET,
									  FL_DIARIA_MANUALE)
		 	select   aId,
				     'CA:diaria dettagli',
					 i,
					 'Stampa RPT',
					 aMiss.CD_CDS,
					 aMiss.CD_UNITA_ORGANIZZATIVA,
					 aMiss.ESERCIZIO,
					 aMiss.PG_MISSIONE,
					 'C',
					 'A',
					 aMiss.TI_PROVVISORIO_DEFINITIVO,
					 aMiss.IM_DIARIA_LORDA,
					 aMiss.IM_QUOTA_ESENTE,
					 aMiss.IM_DIARIA_NETTO,
					 aMiss.IM_SPESE,
					 aMtap.DT_INIZIO_TAPPA,
					 aMtap.DT_FINE_TAPPA,
					 aMtap.CD_DIVISA_TAPPA,
					 aMtap.CAMBIO_TAPPA,
					 aNum1,
					 mdet.IM_DIARIA_LORDA,
					 mdet.IM_QUOTA_ESENTE,
					 mdet.IM_DIARIA_NETTO,
					 mdet.FL_DIARIA_MANUALE
			from missione_dettaglio mdet
			where mdet.CD_CDS			   	  = aMtap.CD_CDS
			  and mdet.CD_UNITA_ORGANIZZATIVA = aMtap.CD_UNITA_ORGANIZZATIVA
	  		  and mdet.ESERCIZIO			  = aMtap.ESERCIZIO
	  		  and mdet.PG_MISSIONE			  = aMtap.PG_MISSIONE
	  		  and mdet.DT_INIZIO_TAPPA		  = aMtap.DT_INIZIO_TAPPA
	  		  and mdet.TI_SPESA_DIARIA		  = 'D';
		exception when DUP_VAL_ON_INDEX then
				  null;
		end;
	begin
	select IM_rimborso into aNum1
		from rif_inquadramento rif ,MISSIONE_QUOTA_RIMBORSO qrim ,nazione
		where rif.PG_RIF_INQUADRAMENTO	   = aMiss.PG_RIF_INQUADRAMENTO
		  and NAZIONE.PG_NAZIONE			   = aMtap.PG_NAZIONE
		  and qrim.cd_area_estera			   = nazione.cd_area_estera
  		and qrim.CD_GRUPPO_INQUADRAMENTO = rif.CD_GRUPPO_INQUADRAMENTO
  		and qrim.DT_INIZIO_VALIDITA 	   <= Trunc(aMiss.DT_INIZIO_MISSIONE)
  		and qrim.DT_FINE_VALIDITA		   >= Trunc(aMiss.DT_INIZIO_MISSIONE)
  		AND NAZIONE.TI_NAZIONE!='I';
  exception when NO_DATA_FOUND then
			  aNum1 := 0;
	end;
	begin
			insert into VPG_MISSIONE (ID,
				   					  CHIAVE,
									  SEQUENZA,
									  DESCRIZIONE,
									  CD_CDS,
									  CD_UNITA_ORGANIZZATIVA,
									  ESERCIZIO,
									  PG_MISSIONE,
									  TI_RECORD_L1,
									  TI_RECORD_L2,
									  TI_PROVVISORIO_DEFINITIVO,
									  TOT_QUOTA_RIMBORSO,
									  IM_QUOTA_ESENTE,
									  DT_INIZIO_TAPPA,
									  DT_FINE_TAPPA,
									  IM_TABELL_RIMB,
									  QUOTA_RIMBORSO,
									  IM_QUOTA_ESENTE_DET
									  )
		 	select   aId,
				     'DA:rimborso dettagli',
					 i,
					 'Stampa RPT',
					 aMiss.CD_CDS,
					 aMiss.CD_UNITA_ORGANIZZATIVA,
					 aMiss.ESERCIZIO,
					 aMiss.PG_MISSIONE,
					 'D',
					 'A',
					 aMiss.TI_PROVVISORIO_DEFINITIVO,
					 aMiss.IM_RIMBORSO,
					 aMiss.IM_QUOTA_ESENTE,
					 aMtap.DT_INIZIO_TAPPA,
					 aMtap.DT_FINE_TAPPA,
					 aNum1,
					 mdet.IM_RIMBORSO,
					 mdet.IM_QUOTA_ESENTE
			from missione_dettaglio mdet
			where mdet.CD_CDS			   	  = aMtap.CD_CDS
			  and mdet.CD_UNITA_ORGANIZZATIVA = aMtap.CD_UNITA_ORGANIZZATIVA
	  		  and mdet.ESERCIZIO			  = aMtap.ESERCIZIO
	  		  and mdet.PG_MISSIONE			  = aMtap.PG_MISSIONE
	  		  and mdet.DT_INIZIO_TAPPA		  = aMtap.DT_INIZIO_TAPPA
	  		  and mdet.TI_SPESA_DIARIA		  = 'R';
		exception when DUP_VAL_ON_INDEX then
				  null;
		end;
		-- fine inserimento record (D,A) dettagli rimborso

	end loop; -- fine loop 8
	-- fine inserimento record (C,A) dettagli di diaria

 end loop;  -- fine loop 1
End;
/






© 2015 - 2024 Weber Informatics LLC | Privacy Policy