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

it.cnr.contab.missioni00.actions.CRUDAnticipoAction Maven / Gradle / Ivy

/*
 * Copyright (C) 2019  Consiglio Nazionale delle Ricerche
 *
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU Affero General Public License as
 *     published by the Free Software Foundation, either version 3 of the
 *     License, or (at your option) any later version.
 *
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU Affero General Public License for more details.
 *
 *     You should have received a copy of the GNU Affero General Public License
 *     along with this program.  If not, see .
 */

package it.cnr.contab.missioni00.actions;

import it.cnr.contab.doccont00.core.bulk.*;
import it.cnr.contab.missioni00.docs.bulk.*;
import it.cnr.contab.missioni00.bp.CRUDAnticipoBP;
import it.cnr.contab.anagraf00.core.bulk.*;
import it.cnr.contab.missioni00.ejb.*;
import it.cnr.contab.compensi00.docs.bulk.V_terzo_per_compensoBulk;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoBP;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoSpesaBP;
import it.cnr.contab.docamm00.docs.bulk.Filtro_ricerca_obbligazioniVBulk;
import it.cnr.jada.action.*;
import it.cnr.jada.bulk.*;
import it.cnr.jada.util.action.*;
/**
 * Insert the type's description here.
 * Creation date: (21/05/2002 12.23.52)
 * @author: Paola sala
 */
public class CRUDAnticipoAction extends it.cnr.jada.util.action.CRUDAction {
/**
 * CRUDAnticipoAction constructor comment.
 */
public CRUDAnticipoAction() {
	super();
}
/**
  * Gestisco parte del rientro dall'aggiornamento manuale e dalla creazione della scadenza associata all'anticipo.
  * (Validazione terzo e lock alla scadenza)
  */

public Forward basicDoBringBackOpenObbligazioniWindow(ActionContext context, Obbligazione_scadenzarioBulk scadenza) throws BusinessProcessException
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
	AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();

	try
	{
		try
		{
			TerzoBulk creditore = scadenza.getObbligazione().getCreditore();
			if (!anticipo.getTerzo().equalsByPrimaryKey(creditore) &&
				!AnagraficoBulk.DIVERSI.equalsIgnoreCase(creditore.getAnagrafico().getTi_entita()))
				throw new it.cnr.jada.comp.ApplicationException("La scadenza selezionata deve appartenere ad un'obbligazione che ha come creditore il terzo dell'anticipo!");
			
			it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession h = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);
			h.lockScadenza(context.getUserContext(), scadenza);			
		}
		catch(Exception e) 
		{
			throw new BusinessProcessException(e);
		}		
		anticipo.gestisciCambioSelezioneScadenza(scadenza);	
	}
	catch (Throwable t) 
	{
		it.cnr.contab.doccont00.core.bulk.IDefferUpdateSaldi defSaldiBulk = bp.getDefferedUpdateSaldiParentBP().getDefferedUpdateSaldiBulk();
		if (scadenza.getObbligazione().getPg_ver_rec().equals((Long)scadenza.getObbligazione().getSaldiInfo().get("pg_ver_rec")))
			defSaldiBulk.removeFromDefferredSaldi(scadenza.getObbligazione());
		try 
		{
			it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
		} 
		catch (Exception e) 
		{
			throw new BusinessProcessException(e);
		}
		throw new BusinessProcessException(t);
	}		
	return context.findDefaultForward();
}
/**
  * Metodo chiamato dal Fondo Economale per cercare gli anticipi eleggibili da associare
  * alle spese del fondo.
  * Tale metodo chiama il metodo "find" dell'anticipo
  */ 

protected Forward basicDoCerca(ActionContext context) throws java.rmi.RemoteException,InstantiationException,javax.ejb.RemoveException 
{
	try 
	{
		fillModel(context);
		it.cnr.jada.util.action.CRUDBP bp = getBusinessProcess(context);
		OggettoBulk model = (OggettoBulk)bp.getModel();
		it.cnr.jada.util.RemoteIterator ri = bp.find(context,null,model);
		if (ri == null || ri.countElements() == 0) 
		{
			it.cnr.jada.util.ejb.EJBCommonServices.closeRemoteIterator(context, ri);
			bp.setMessage("La ricerca non ha fornito alcun risultato.");
			return context.findDefaultForward();
		//}
		//else if (ri.countElements() == 1) 
		//{
			//OggettoBulk bulk = (OggettoBulk)ri.nextElement();
			//return basicDoRiportaSelezione(context, bulk);
		} 
		else 
		{
			bp.setModel(context,model);
			SelezionatoreListaBP nbp = (SelezionatoreListaBP)context.createBusinessProcess("Selezionatore");
			nbp.setIterator(context,ri);
			nbp.setBulkInfo(bp.getBulkInfo());
			nbp.setColumns(getBusinessProcess(context).getSearchResultColumns());
			context.addHookForward("seleziona",this,"doRiportaSelezione");
			return context.addBusinessProcess(nbp);
		}
	} 
	catch(Throwable e) 
	{
		return handleException(context,e);
	} 
}
/**
  * Metodo chiamato dal Fonfo Economale per riportare l'Anticipo selezionato
  */

protected Forward basicDoRiportaSelezione(ActionContext context, it.cnr.jada.bulk.OggettoBulk selezione)  throws java.rmi.RemoteException 
{
	try 
	{
		if (selezione != null) 
		{
			CRUDAnticipoBP bp = (CRUDAnticipoBP)context.getBusinessProcess();
			bp.edit(context,selezione);
			selezione = bp.getModel();
			//if (!AnticipoBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(((AnticipoBulk)selezione).getRiportata()))
				//throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo risulta riportato! Operazione annullata.");

			// Borriello: integrazione Err. CNR 775
			Integer esScriv = it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext());
			
			if ( (((AnticipoBulk)selezione).getEsercizio().compareTo(esScriv) == 0) && ((AnticipoBulk)selezione).isRiportata()){
				throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo risulta (parzialmente) riportato! Operazione annullata.");
			}
			
			// Gennaro Borriello - (09/11/2004 18.08.57)
			//	Nuova gestione dello stato getRiportata()					
			if ( (((AnticipoBulk)selezione).getEsercizio().compareTo(esScriv) != 0) && (!AnticipoBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(((AnticipoBulk)selezione).getRiportataInScrivania())) ){					
				throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo non risulta completamente riportato! Operazione annullata.");
			}
			
			context.closeBusinessProcess();
			HookForward forward = (HookForward)context.findForward("bringback");
			forward.addParameter("documentoAmministrativoSelezionato", selezione);
			return forward;
		}
	} 
	catch(Exception e) 
	{
		return handleException(context,e);
	}		
	return context.findDefaultForward();
}
/**
  *	Inizializzazione dell'attributo "Linea di Attivita"
  */

public Forward doBlankSearchFind_latt(ActionContext context, AnticipoBulk anticipo) 
{	
	it.cnr.contab.config00.latt.bulk.WorkpackageBulk latt = new it.cnr.contab.config00.latt.bulk.WorkpackageBulk();
	latt.setCentro_responsabilita( new it.cnr.contab.config00.sto.bulk.CdrBulk());
	anticipo.setLattPerRimborso(latt);
		
	return context.findDefaultForward();
}
/**
  * Inizializzazione degli attributi relativi al terzo e ai riferimenti bancari del terzo
  */

public Forward doBlankSearchFind_terzo(ActionContext context, AnticipoBulk anticipo) 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
	anticipo.inizializzaTerzo();
	return context.findDefaultForward();
}
/**
  * Il metodo gestisce il rientro dall'aggiornamento manuale della scadenza associata all'anticipo. 
  * (Validazione terzo e Lock alla scadenza)
  */
  
public Forward doBringBackOpenObbligazioniWindow(ActionContext context)
{
	try
	{
		HookForward caller = (HookForward)context.getCaller();
		Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)caller.getParameter("bringback");
		
		if(scadenza == null)
			return context.findDefaultForward();
			
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();

		basicDoBringBackOpenObbligazioniWindow(context, scadenza);
				
		anticipo.setScadenza_obbligazione(scadenza);
		bp.setDirty(true);		
		bp.setModel(context, anticipo);
		
		return context.findDefaultForward();
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}	
}
/**
  * Il metodo gestisce il rientro dalla finestra di ricerca con filtri o creazione di obbligazioni.
  */
public Forward doBringBackRicercaObbligazioniWindow(ActionContext context) 
{
	try 
	{
		HookForward caller = (HookForward)context.getCaller();
		Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)caller.getParameter("obbligazioneSelezionata");
		
		if(scadenza == null)
			return context.findDefaultForward();
			
		CRUDAnticipoBP bp = (CRUDAnticipoBP)context.getBusinessProcess();
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();

		basicDoBringBackOpenObbligazioniWindow(context, scadenza);

		anticipo.setScadenza_obbligazione(scadenza);

		//	verifico se la scadenza appena associata l'avevo precedentemente slegata
		if(anticipo.isScadenzaDaRimuovereDaiCancellati())	
		{
			//  la rimuovo dalla collection altrimenti l'aggiornamento del suo 
			//	im_associato_doc_amm a zero mi cambierebbe il pg_ver_rec
			anticipo.removeFromDocumentiContabiliCancellati(scadenza); 
		}
		bp.setDirty(true);					
		bp.setModel(context, anticipo);
		
		return context.findDefaultForward();
	} 
	catch(Exception e) 
	{
		return handleException(context,e);
	}
}

/**
  * Il metodo gestisce l'inizializzazione di alcuni attributi dell'anticipo relativi al terzo e ai dati
  * bancari del terzo (nome, cognome, ragione sociale, codice fiscale, partita iva, modalita e termini di pagamento) 
  */

public Forward doBringBackSearchFind_terzo(ActionContext context, AnticipoBulk anticipo, V_terzo_per_compensoBulk aTerzo)
{			
	try
	{
		if(aTerzo == null)
			return context.findDefaultForward();		

		CRUDAnticipoBP bp = (CRUDAnticipoBP) getBusinessProcess(context);
		AnticipoComponentSession component = (AnticipoComponentSession) bp.createComponentSession();
		anticipo.inizializzaTerzo();
		anticipo = component.completaTerzo(context.getUserContext(), anticipo, aTerzo);
		
		bp.setModel(context, anticipo);

		return context.findDefaultForward();
	} 
	catch(Exception e) 
	{
		return handleException(context,e);
	}
}
/**
  *	Attiva la ricerca libera di un anticipo
  */
public Forward doCerca(ActionContext context) throws java.rmi.RemoteException,InstantiationException,javax.ejb.RemoveException 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)context.getBusinessProcess();

	//	Se chi invoca la ricerca degli anticipi e' il Fondo Economale
	if (bp instanceof IDocumentoAmministrativoSpesaBP && ((IDocumentoAmministrativoSpesaBP)bp).isSpesaBP())
		return basicDoCerca(context);
	return super.doCerca(context);
}
/**
  *	Il metodo attiva la creazione del Documento di Rimborso dell'anticipo
  */
public Forward doConfermaCreaRimborsoCompleto(ActionContext context, int option )
{
	try
	{
		if (option == OptionBP.YES_BUTTON) 
		{		
			CRUDAnticipoBP bp = (CRUDAnticipoBP)context.getBusinessProcess();
			bp.creaRimborsoCompleto( context );
		}	
		return context.findDefaultForward();
	}
	catch ( Exception e )
	{
		return handleException( context, e )	;
	}	
}
/**
  * Il metodo gestisce la modifica della data di registrazione nel caso il terzo non sia piu' valido 
  * alla nuova data :
  * - inizializzazione del terzo
  * - modifica delle date di competenza
  * - validazione della nuova data di registrazione
  */
  
public Forward doConfermaDataRegistrazioneChange(ActionContext context, OptionBP option)
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP) getBusinessProcess(context);
	AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
	
	java.sql.Timestamp dataIniziale = (java.sql.Timestamp) option.getAttribute( "dataIniziale" );
	
	if (option.getOption() == OptionBP.YES_BUTTON) 
	{
		try
		{
			anticipo.inizializzaTerzo();
			bp.gestisciCambioDataRegistrazione(context, anticipo);
								
			return context.findDefaultForward();
		} 
		catch (Throwable t) 
		{
			try
			{
				// In caso di errore ripropongo la data precedente
				anticipo.setDt_registrazione(dataIniziale);
				anticipo.setDt_a_competenza_coge(anticipo.getDt_registrazione());
				anticipo.setDt_da_competenza_coge(anticipo.getDt_registrazione());
				
				bp.setModel(context, anticipo);
				
				return handleException(context, t);			
			}
			catch (Throwable e) {return handleException(context, e);}
		}	
	}
	if(option.getOption() == OptionBP.NO_BUTTON)
	{
		try
		{
			anticipo.setDt_registrazione(dataIniziale);
			anticipo.setDt_a_competenza_coge(anticipo.getDt_registrazione());
			anticipo.setDt_da_competenza_coge(anticipo.getDt_registrazione());
			
			bp.setModel(context, anticipo);
		}
		catch (Throwable e) {return handleException(context, e);}		
	}	
	return context.findDefaultForward();
}
/**
  * Alla selezione del bottone di Ricerca il sistema visualizza il primo Tab
  */
public Forward doConfermaNuovaRicerca(ActionContext context,int option)
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);	
	bp.setTab("tab", "tabAnagrafico");
	
	return super.doConfermaNuovaRicerca(context, option);
}
/**
  *	Il metodo gestisce la selezione del bottone di "Creazione del rimborso dell'anticipo"
  */
public Forward doCreaRimborsoCompleto(ActionContext context)
{
	try
	{
		fillModel( context );
		return doConfermaCreaRimborsoCompleto(context,OptionBP.YES_BUTTON);					
	}
	catch ( Exception e )
	{
		return handleException( context, e )	;
	}	
}
/**
 * Il metodo gestisce un comando di cancellazione logica/fisica.
 * Metodo ridefinito per poter ricaricare l'anticipo annullato
 */
public Forward doElimina(ActionContext context) throws java.rmi.RemoteException 
{
	try 
	{
		fillModel(context);

		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();
		
		if (!bp.isEditing()) 
		{
			bp.setMessage("Non è possibile cancellare in questo momento");
		} 
		else 
		{
			if(AnticipoBulk.STATO_ANNULLATO.equals(anticipo.getStato_cofi()))
				throw new it.cnr.jada.comp.ApplicationException("L'anticipo e' gia' stato annullato!");
			if(anticipo.isPagata())
				throw new it.cnr.jada.comp.ApplicationException("Impossibile proseguire! L'anticipo risulta pagato.");				
			//	Il bottone di cancellazione anticipo verra' disabilitato se l'anticipo risulta collegato a missione
			//	o rimborsato	
					
			bp.delete(context);
			anticipo = (AnticipoBulk)bp.getModel();
			AnticipoComponentSession session = (AnticipoComponentSession)bp.createComponentSession();
			if(session.isAnticipoAnnullato(context.getUserContext(), anticipo))
			{
				bp.edit(context, anticipo);
				bp.setMessage("Annullamento effettuato");
			}
			else
			{
				bp.reset(context);
				bp.setMessage("Cancellazione effettuata");
			}
		}
		return context.findDefaultForward();

	} 
	catch(Throwable e) 
	{
		return handleException(context,e);
	}
}
/**
  * Il metodo gestisce l'eliminazione dell'associazione anticipo-scadenza :
  * - l'aggiornamento/inserimento a db di tale scadenza con im_associato_doc_amm=0
  * - se l'anticipo usa il fondo economale devo eliminare questa associazione
  */

public Forward doEliminaScadenzaObbligazione(ActionContext context)
{
	try
	{
		fillModel(context);
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
		
		if((anticipo.getPg_obbligazione_scadenzario() == null) || (anticipo.getPg_obbligazione() == null) || (anticipo.getEsercizio_ori_obbligazione() == null))
				throw new it.cnr.jada.comp.ApplicationException("Non esiste alcuna scadenza da eliminare!");		
			
		anticipo.addToDocumentiContabiliCancellati(anticipo.getScadenza_obbligazione());
		anticipo.setScadenza_obbligazione(new Obbligazione_scadenzarioBulk());
		if(anticipo.getStato_pagamento_fondo_eco().compareTo(AnticipoBulk.STATO_ASSEGNATO_FONDO_ECO)==0)
			anticipo.setStato_pagamento_fondo_eco(AnticipoBulk.STATO_LIBERO_FONDO_ECO);		
		bp.setDirty(true);
		
		return context.findDefaultForward();
	} 
	catch(Exception e) 
	{
		return handleException(context,e);
	}
}
/**
  * Il metodo verifica che, prima di effettuare una ricerca libera di un terzo, sia stata 
  * valorizzata la data di registrazione dell'anticipo. Tale data servira' per verificare
  * la validita' del terzo
  */

public Forward doFreeSearchFind_terzo(ActionContext context) 
{
	try 
	{
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);	
		bp.fillModel(context);
		
		AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();
		
		if(bp.isEditable() && !bp.isSearching() && anticipo.getDt_registrazione() == null)
			throw new it.cnr.jada.comp.ApplicationException("Impostare la data di registrazione");
		
		return freeSearch(context,bp.getFormField("find_terzo"));
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
}
/**
  * Il metodo gestisce la modifica automatica della scadenza associata all'anticipo.
  * Al termine dell'aggiornamento metto un lock alla scadenza
  */

public Forward doModificaScadenzaInAutomatico(ActionContext context) 
{
	try 
	{
		fillModel(context);		
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
		
		boolean viewMode = bp.isViewing();

		if((anticipo.getPg_obbligazione_scadenzario() == null) || (anticipo.getPg_obbligazione() == null) || (anticipo.getEsercizio_ori_obbligazione() == null))
			throw new it.cnr.jada.comp.ApplicationException("Selezionare la scadenza di obbligazione da modificare!");

		if((anticipo.getIm_anticipo_divisa() == null) || (anticipo.getIm_anticipo_divisa().compareTo(new java.math.BigDecimal(0))==0))
			throw new it.cnr.jada.comp.ApplicationException("Inserire l'importo dell'anticipo!");

		Obbligazione_scadenzarioBulk scadenza = anticipo.getScadenza_obbligazione();	
		it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession h = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);

		try 
		{
			scadenza = (Obbligazione_scadenzarioBulk)h.modificaScadenzaInAutomatico(
														context.getUserContext(), 
														scadenza, 
														anticipo.getIm_anticipo_divisa(),
														false);

			h.lockScadenza(context.getUserContext(), scadenza);						
			anticipo.addToDefferredSaldi(scadenza.getObbligazione(), scadenza.getObbligazione().getSaldiInfo());
			anticipo.gestisciCambioSelezioneScadenza(scadenza);	
			anticipo.setScadenza_obbligazione(scadenza);
			bp.setDirty(true);			
			bp.setModel(context, anticipo);
			
			return context.findDefaultForward();			
		} 
		catch (it.cnr.jada.comp.ComponentException e) 
		{
			if (e.getDetail() instanceof it.cnr.contab.doccont00.comp.CheckDisponibilitaCassaFailed)
				throw new it.cnr.jada.comp.ApplicationException(e.getDetail().getMessage());
			if (e.getDetail() instanceof it.cnr.contab.doccont00.comp.SfondamentoPdGException)
				throw new it.cnr.jada.comp.ApplicationException(e.getDetail().getMessage());
			throw e;
		}
	}
	catch(Exception e) 
	{
		return handleException(context,e);
	}
}
/**
  * Alla selezione del bottone "Nuovo" il sistema visualizza il primo Tab
  */

public Forward doNuovo(ActionContext context)
{
	super.doTab(context, "tab", "tabAnagrafico");
	return(super.doNuovo(context));
}
/**
  * Il metodo gestise la mancata disponibilita' di cassa in fase di associazione dell'anticipo ad
  * una scadenza.
  */
  
public Forward doOnCheckDisponibilitaCassaFailed(ActionContext context, int option) 
{
	if (option == it.cnr.jada.util.action.OptionBP.OK_BUTTON) 
	{
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		try 
		{
			boolean modified = fillModel(context);
			OptionRequestParameter userConfirmation = new OptionRequestParameter();
			userConfirmation.setCheckDisponibilitaDiCassaRequired(Boolean.FALSE);
			bp.setUserConfirm(userConfirmation);
			if (bp.isBringBack())
				doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
			else
				doSalva(context);
		} 
		catch(Throwable e) 
		{
			return handleException(context,e);
		}
	}
	return context.findDefaultForward();
}
/**
 * Metodo utilizzato per gestire la conferma dell'inserimento/modifica di una obbligazione che ha sfondato
 * la disponibilità per il contratto
 * @param context ActionContext in uso.
 * @param option Esito della risposta alla richiesta di sfondamento
 *
 * @return Forward
 *
 * @exception RemoteException
 *
 */

public Forward doOnCheckDisponibilitaContrattoFailed( ActionContext context, int option) {
	if (option == it.cnr.jada.util.action.OptionBP.OK_BUTTON) {
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		try 
		{
			boolean modified = fillModel(context);
			OptionRequestParameter userConfirmation = new OptionRequestParameter();
			userConfirmation.setCheckDisponibilitaContrattoRequired(Boolean.FALSE);
			bp.setUserConfirm(userConfirmation);
			if (bp.isBringBack())
				doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
			else
				doSalva(context);
		} 
		catch(Throwable e) 
		{
			return handleException(context,e);
		}
	}
	return context.findDefaultForward();
}

/**
  * Il metodo gestisce la modifica della data di registrazione facendo le opportune validazioni sulla
  * data e sul terzo
  */

public Forward doOnDataRegistrazioneChange(ActionContext context) 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);	
	AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();

	if ( anticipo.getFl_associato_missione() != null && anticipo.getFl_associato_missione().booleanValue() )
	{
		bp.setMessage( "Anticipo collegato a missione. Data non modificabile");
		return context.findDefaultForward();
	}			
	java.sql.Timestamp oldDate = null;
	if(anticipo.getDt_registrazione() != null)
		oldDate = (java.sql.Timestamp)anticipo.getDt_registrazione().clone();
	
	try
	{
		fillModel(context);
		anticipo = (AnticipoBulk)bp.getModel();

		if(bp.isSearching())
			return context.findDefaultForward();		

		anticipo.validaDataRegistrazione(context);
			
		if(	anticipo.getV_terzo() != null && anticipo.getV_terzo().getCd_terzo() != null &&
			!anticipo.isTerzoValido())
		{
			OptionBP option = openConfirm(context,"Il terzo selezionato verra' cancellato. Proseguire ?",OptionBP.CONFIRM_YES_NO,"doConfermaDataRegistrazioneChange");
			option.addAttribute("dataIniziale", oldDate);
			return option;
		}
			
		bp.gestisciCambioDataRegistrazione(context, anticipo);
					
		return context.findDefaultForward();
	} 
	catch (Throwable t) 
	{
		// In caso di errore ripropongo la data precedente
		anticipo.setDt_registrazione(oldDate);
		anticipo.setDt_a_competenza_coge(anticipo.getDt_registrazione());
		anticipo.setDt_da_competenza_coge(anticipo.getDt_registrazione());
			
		try
		{
			bp.setModel(context, anticipo);
			return handleException(context, t);			
		}
		catch (Throwable e) {return handleException(context, e);}
	}	
}
/**
  * Il metodo gestisce la modifica dell'importo dell'anticipo :
  * - se l'anticipo è legato alla missione non posso modificarne l'importo
  * - l'importo non deve essere negativo
  */

public Forward doOnImportoAnticipoChange(ActionContext context) 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);	
	AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();

	if ( anticipo.getFl_associato_missione() != null && anticipo.getFl_associato_missione().booleanValue() )
	{
		bp.setMessage( "Anticipo collegato a missione. Importo non modificabile");
		return context.findDefaultForward();
	}			
	try
	{
		fillModel(context);
		anticipo = (AnticipoBulk)bp.getModel();

		if(bp.isSearching())
			return context.findDefaultForward();
			
			
		if(anticipo.getIm_anticipo_divisa() == null)
			return context.findDefaultForward();
			
		if(anticipo.getIm_anticipo_divisa().compareTo(new java.math.BigDecimal(0)) == -1 )
		{
			anticipo.setIm_anticipo_divisa(null);
			throw new it.cnr.jada.comp.ApplicationException("L'importo non può essere negativo !");
		}
		return context.findDefaultForward();
	} 
	catch(Throwable e) 
	{
		return handleException(context,e);
	}
}
/**
  * Il metodo gestisce la selezione della Modalita di Pagamento ricercando le opportune banche
  */

public Forward doOnModalitaPagamentoChange(ActionContext context) 
{
	try 
	{
		fillModel(context);
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();
		if (anticipo.getModalita_pagamento() != null) 
		{
			AnticipoComponentSession component = (AnticipoComponentSession)bp.createComponentSession();
			java.util.Collection coll = component.findListabanche(context.getUserContext(), anticipo);

			//	Assegno di default la prima banca tra quelle selezionate
			if(coll == null || coll.isEmpty())
				anticipo.setBanca(null);
			else
				anticipo.setBanca((it.cnr.contab.anagraf00.core.bulk.BancaBulk)new java.util.Vector(coll).firstElement());
		} 
		else 
		{
			anticipo.setBanca(null);
		}
		bp.setModel(context, anticipo);
		bp.resyncChildren(context);
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
	return context.findDefaultForward();
}
/**
  * Il metodo gestisce la selezione del Tipo Anagrafico. Se l'utente ha gia' selezionato un terzo devo
  * re-inizializzare i dati relativi a tale terzo
  */

public Forward doOnTipoAnagraficoChange(ActionContext context)
{
	try 
	{
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipoIniziale = (AnticipoBulk) bp.getModel().clone();
		
		fillModel(context);	
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();

		if(	anticipoIniziale.getTi_anagrafico() == null ||
			anticipoIniziale.getTi_anagrafico().compareTo(anticipo.getTi_anagrafico())==0)
			return context.findDefaultForward();

		if(bp.isSearching())
			return context.findDefaultForward();			
			
		anticipo.inizializzaTerzo();
		
		return context.findDefaultForward();			
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
}
/**
  * Il metodo gestisce l'apertura dell'obbligazione per l' "Aggiornamento Manuale" 
  */

public Forward doOpenObbligazioniWindow(ActionContext context) 
{
	try 
	{
		fillModel(context);		
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
		
		boolean viewMode = bp.isViewing();

		// 	Se l'anticipo risulta pagato/legato a missione/rimborsato/
		//	non modificabile per chiusura contabile
		//	devo poter aprire l'obbligazione in visualizzazione
		if(!anticipo.isEditable() || anticipo.isROPerChiusura())		
			viewMode = true;
		
		if((anticipo.getPg_obbligazione_scadenzario() == null) || (anticipo.getPg_obbligazione() == null) || (anticipo.getEsercizio_ori_obbligazione() == null))
			throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno da " + (viewMode?"visualizzare":"modificare") + " in manuale!");
			
		if (!viewMode && bp instanceof IDocumentoAmministrativoBP)
				viewMode = !((IDocumentoAmministrativoBP)bp).getDocumentoAmministrativoCorrente().isEditable();
				
		String status = viewMode ?"V":"M";
		it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP nbp = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getBusinessProcessFor(context, anticipo.getScadenza_obbligazione().getObbligazione(), status + "RSWTh");
		nbp.edit(context, anticipo.getScadenza_obbligazione().getObbligazione());
		nbp.selezionaScadenza(anticipo.getScadenza_obbligazione(), context);

		context.addHookForward("bringback",this,"doBringBackOpenObbligazioniWindow");
		HookForward hook = (HookForward)context.findForward("bringback");
		return context.addBusinessProcess(nbp);
	} 
	catch(Exception e) 
	{
		return handleException(context,e);
	}
}
/**
  * Alla selezione del bottone "Ricerca Libera" il sistema visualizza il primo Tab
  */

public Forward doRicercaLibera(ActionContext context) 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);	
	bp.setTab("tab", "tabAnagrafico");
	
	return super.doRicercaLibera(context);
}
/**
  * Il metodo gestisce l'apertura della finestra di ricerca con filtri o creazione di obbligazioni
  * inizializzandone gli opportuni campi
  */

public Forward doRicercaScadenzaObbligazione(ActionContext context) 
{
	try 
	{
		fillModel(context);
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();

		if(anticipo.getTerzo() == null || anticipo.getCd_terzo() == null)
			throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario impostare un fornitore!");
		if(anticipo.getIm_anticipo_divisa() == null || anticipo.getIm_anticipo_divisa().compareTo(new java.math.BigDecimal(0)) == 0)
			throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario valorizzare l'importo!");
			
		Filtro_ricerca_obbligazioniVBulk filtro = new Filtro_ricerca_obbligazioniVBulk();
		filtro.setFornitore(anticipo.getTerzo());
		filtro.setIm_importo(anticipo.getIm_anticipo_divisa());
		filtro.setCd_unita_organizzativa(anticipo.getCd_unita_organizzativa());
		filtro.setFl_importo(Boolean.TRUE);
		filtro.setData_scadenziario(null);
		filtro.setFl_data_scadenziario(Boolean.FALSE);		
		filtro.setDs_obbligazione("Impegno per anticipo");
		filtro.setDs_scadenza("Scadenza per anticipo");

		BulkBP robp = (BulkBP)context.getUserInfo().createBusinessProcess(context,"RicercaObbligazioniBP", new Object[] { "MRSWTh" });
		robp.setModel(context,filtro);
		context.addHookForward("bringback",this,"doBringBackRicercaObbligazioniWindow");

		return context.addBusinessProcess(robp);
	} 
	catch(Throwable e) 
	{
		return handleException(context,e);
	}
}
/**
  * Il metodo gestisce la selezione del bottone "Riporta avanti". Ciò implica :
  * - se non ho rimborso : salvare l'anticipo, riportare avanti l'obbligazione e committare
  * - se ho rimborso : riportare avanti l'accertamento e committare
  */
  
public Forward doRiportaAvanti(ActionContext context) throws java.rmi.RemoteException 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
	
	try 
	{
		fillModel(context);
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
		
		if(!anticipo.hasRimborso())
			bp.salvaRiportandoAvanti(context);
		else	
			bp.riportaRimborsoAvanti(context);
			
		return context.findDefaultForward();
	} 
	catch(ValidationException e) 
	{
		bp.setErrorMessage(e.getMessage());
		return context.findDefaultForward();
	} 
	catch(Throwable e) 
	{
		return handleException(context,e);
	}
}
/**
  * Il metodo gestisce la selezione del bottone "Riporta indietro". Ciò implica :
  * - se non ho rimborso : riportare indietro l'obbligazione senza committare
  * - se ho rimborso : riportare indietro l'accertamento e committare
  */
  
public Forward doRiportaIndietro(ActionContext context) throws java.rmi.RemoteException 
{
	try 
	{
		fillModel(context);
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);

		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
		
		if(!anticipo.hasRimborso())
			bp.riportaIndietro(context);
		else
			bp.riportaRimborsoIndietro(context);				

		return context.findDefaultForward();
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
	
}
/**
 * Il metodo gestisce il riporto dell'anticipo selezionato.
 * Nel caso di apertura da spesa per fondo economale, viene riportato l'elemento nel fondo
 */
 
public Forward doRiportaSelezione(ActionContext context)  throws java.rmi.RemoteException 
{
	CRUDAnticipoBP bp = (CRUDAnticipoBP)context.getBusinessProcess();
	if (bp instanceof IDocumentoAmministrativoSpesaBP && ((IDocumentoAmministrativoSpesaBP)bp).isSpesaBP()) 
	{
		HookForward caller = (HookForward)context.getCaller();
		it.cnr.jada.bulk.OggettoBulk selezione = (it.cnr.jada.bulk.OggettoBulk)caller.getParameter("focusedElement");
		return basicDoRiportaSelezione(context, selezione);
	}
	return super.doRiportaSelezione(context);
} 
/**
  * Il metodo gestisce la ricerca di un terzo verificando che la data di registrazione 
  * sia gia' stata valorizzata. Tale data servirà per validare il terzo
  */

public Forward doSearchFind_terzo(ActionContext context) 
{
	try 
	{
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);	
		bp.fillModel(context);
		
		AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();

		if(bp.isEditable() && !bp.isSearching() && anticipo.getDt_registrazione() == null)
			throw new it.cnr.jada.comp.ApplicationException("Impostare la data di registrazione");

		return search(context,bp.getFormField("find_terzo"), null);
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
}
/**
  * Il metodo gestisce la selezione del bottone di ricerca delle Banche
  */

public Forward doSearchListabanche(ActionContext context) 
{
	try
	{
		fillModel(context);	
		AnticipoBulk anticipo = (AnticipoBulk)getBusinessProcess(context).getModel();
		return search(context, getFormField(context, "main.listabanche"), anticipo.getModalita_pagamento().getTiPagamentoColumnSet());
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
}
/**
  * Il metodo gestisce la selezione dei Tab dell'interfaccia "Anticipo"
  */
public Forward doTab(ActionContext context,String tabName,String pageName) 
{
	try
	{
		fillModel( context );
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk)bp.getModel();

		if(anticipo == null)
			return super.doTab( context, tabName, pageName );

		// Da tab anagrafico
		if(	bp.isEditable() && !bp.isSearching() &&	bp.getTab( tabName ).equalsIgnoreCase("tabAnagrafico"))
			anticipo.validaTabAnagrafico();

		return super.doTab( context, tabName, pageName );		
	}
	catch(Throwable e) 
	{
		return handleException(context,e);
	}	
}
/**
  * Il metodo gestisce l'apertura della missione in visualizzazione
  */

public Forward doVisualizzaMissione(ActionContext context) 
{
	try 
	{
		fillModel(context);		
		CRUDAnticipoBP bp = (CRUDAnticipoBP)getBusinessProcess(context);
		AnticipoBulk anticipo = (AnticipoBulk) bp.getModel();
		
		if(!anticipo.isAnticipoConMissione())
			throw new it.cnr.jada.comp.ApplicationException("L' anticipo non ha associato alcuna missione !");
			
		it.cnr.contab.missioni00.bp.CRUDMissioneBP bpMissione = (it.cnr.contab.missioni00.bp.CRUDMissioneBP)context.getUserInfo().createBusinessProcess(context,"CRUDMissioneBP",new Object[] { "VRSW" });		
		bpMissione.edit(context, anticipo.getMissione());

		return context.addBusinessProcess(bpMissione);
	} 
	catch(Exception e) 
	{
		return handleException(context,e);
	}	
}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy