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

it.cnr.contab.compensi00.actions.CRUDCompensoAction 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.compensi00.actions;

import it.cnr.contab.anagraf00.core.bulk.AnagraficoBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoBulk;
import it.cnr.contab.anagraf00.tabrif.bulk.Codici_rapporti_inpsBulk;
import it.cnr.contab.anagraf00.tabter.bulk.RegioneBulk;
import it.cnr.contab.compensi00.bp.CRUDCompensoBP;
import it.cnr.contab.compensi00.docs.bulk.CompensoBulk;
import it.cnr.contab.compensi00.docs.bulk.Contributo_ritenutaBulk;
import it.cnr.contab.compensi00.docs.bulk.Contributo_ritenuta_detBulk;
import it.cnr.contab.compensi00.docs.bulk.V_doc_cont_compBulk;
import it.cnr.contab.compensi00.docs.bulk.V_terzo_per_compensoBulk;
import it.cnr.contab.compensi00.ejb.CompensoComponentSession;
import it.cnr.contab.compensi00.tabrif.bulk.Tipologia_rischioBulk;
import it.cnr.contab.config00.bulk.CigBulk;
import it.cnr.contab.docamm00.bp.CRUDFatturaPassivaBP;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoSpesaBP;
import it.cnr.contab.docamm00.docs.bulk.Filtro_ricerca_obbligazioniVBulk;
import it.cnr.contab.docamm00.tabrif.bulk.Voce_ivaBulk;
import it.cnr.contab.doccont00.bp.CRUDMandatoBP;
import it.cnr.contab.doccont00.bp.CRUDReversaleBP;
import it.cnr.contab.doccont00.core.bulk.MandatoBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneOrdBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.doccont00.core.bulk.OptionRequestParameter;
import it.cnr.contab.doccont00.core.bulk.ReversaleBulk;
import it.cnr.contab.incarichi00.bulk.Incarichi_repertorio_annoBulk;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
import it.cnr.contab.util.Utility;
import it.cnr.jada.action.ActionContext;
import it.cnr.jada.action.BusinessProcessException;
import it.cnr.jada.action.Forward;
import it.cnr.jada.action.HookForward;
import it.cnr.jada.action.MessageToUser;
import it.cnr.jada.bulk.OggettoBulk;
import it.cnr.jada.util.action.BulkBP;
import it.cnr.jada.util.action.CRUDBP;
import it.cnr.jada.util.action.FormBP;
import it.cnr.jada.util.action.FormController;
import it.cnr.jada.util.action.OptionBP;

import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.sql.Date;
import java.util.GregorianCalendar;

/**
 * Insert the type's description here.
 * Creation date: (21/02/2002 16.13.08)
 * @author: Roberto Fantino
 */
public class CRUDCompensoAction extends it.cnr.jada.util.action.CRUDAction {
/**
 * CRUDCompensoAction constructor comment.
 */
public CRUDCompensoAction() {
	super();
}
public Forward basicDoBringBackOpenObbligazioniWindow(ActionContext context, Obbligazione_scadenzarioBulk scadenza) 
{
	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);	
	try
	{
		if (scadenza==null)
			return context.findDefaultForward();


		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		TerzoBulk creditore = scadenza.getObbligazione().getCreditore();
//        compenso.setCollegatoCapitoloPerTrovato(scadenza.getObbligazione().getElemento_voce().isVocePerTrovati());
		if (!compenso.getTerzo().equalsByPrimaryKey(creditore) &&
			!AnagraficoBulk.DIVERSI.equalsIgnoreCase(creditore.getAnagrafico().getTi_entita()))
			setMessage(context, FormBP.ERROR_MESSAGE, "La scadenza selezionata deve appartenere ad un'obbligazione che ha come creditore il fornitore del compenso!");

		Obbligazione_scadenzarioBulk oldScad = compenso.getObbligazioneScadenzario();
		bp.elaboraScadenze(context, oldScad, scadenza);

		return context.findDefaultForward();

	}
	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) 
		{
			handleException(context, e);
		}
		return handleException(context, t);
	}	
}
/**
 * Gestisce una richiesta di ricerca.
 *
 * L'implementazione di default utilizza il metodo astratto read
 * di CRUDBusinessProcess.
 * Se la ricerca fornisce più di un risultato viene creato un
 * nuovo SelezionatoreListaBP per la selezione di un elemento.
 * Al business process viene anche chiesto l'elenco delle colonne da
 * visualizzare.
 */
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);
		it.cnr.jada.bulk.OggettoBulk model = (it.cnr.jada.bulk.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) {
			//it.cnr.jada.bulk.OggettoBulk bulk = (it.cnr.jada.bulk.OggettoBulk)ri.nextElement();
			//return basicDoRiportaSelezione(context, bulk);
		} else {
			bp.setModel(context,model);
			it.cnr.jada.util.action.SelezionatoreListaBP nbp = (it.cnr.jada.util.action.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);
	} 
}
/**
 * Gestisce un comando di cancellazione.
 */
private Forward basicDoEliminaCompenso(ActionContext context) {

	try{
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.delete(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		CompensoComponentSession session = (CompensoComponentSession)bp.createComponentSession();
		if (session.isCompensoAnnullato(context.getUserContext(), compenso)){
			bp.edit(context, compenso);
			bp.setMessage("Annullamento effettuato");
		}else{
			bp.reset(context);
			bp.setMessage("Cancellazione effettuata");
		}
		return context.findDefaultForward();
	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
public Forward doVerificaEsistenzaTrovato(ActionContext context) {
	
	try {
		fillModel( context );
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.ricercaDatiTrovato(context);
	} catch (Exception e) {
		return handleException(context, e);
	}
	return context.findDefaultForward();
//	try {
//		CRUDFatturaPassivaBP bp = (CRUDFatturaPassivaBP)getBusinessProcess(context);
//		Fattura_passivaBulk fattura = (Fattura_passivaBulk)bp.getModel();
//		java.sql.Timestamp dataEmissione = fattura.getDt_fattura_fornitore();
//		try	{
//			fillModel( context );
//			if (!bp.isSearching())
//				fattura.validateDate();
//			creaEsercizioPerFatturaFornitore(context, fattura);
//			
//			return context.findDefaultForward();
//		} catch(Throwable e) {
//			fattura.setDt_fattura_fornitore(dataEmissione);
//			bp.setModel(context,fattura);
//			throw e;
//		}
//	} catch(Throwable e) {
//		return handleException(context, e);
//	}
}

private Forward basicDoLoadDocContAssociati(ActionContext context) throws BusinessProcessException{

	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
	CompensoBulk compenso = (CompensoBulk)bp.getModel();

	if (!compenso.STATO_PAGATO.equals(compenso.getStato_cofi()) || compenso.getDocContAssociati()!=null)
		return context.findDefaultForward();

	bp.loadDocContAssociati(context);
	return context.findDefaultForward();
}
/**
 * Gestisce un HookForward di ritorno da un risultato di una ricerca (SelezionatoreBP)
 */
protected Forward basicDoRiportaSelezione(ActionContext context, it.cnr.jada.bulk.OggettoBulk selezione)  throws java.rmi.RemoteException {

	try {
		if (selezione != null) {
			CRUDCompensoBP bp = (CRUDCompensoBP)context.getBusinessProcess();
			bp.edit(context,selezione);
			selezione = bp.getModel();
			//if (!CompensoBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(((CompensoBulk)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 ( (((CompensoBulk)selezione).getEsercizio().compareTo(esScriv) == 0) && ((CompensoBulk)selezione).isRiportata()){
				throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo risulta (parzialmente) riportato! Operazione annullata.");
			}

			//	Nuova gestione dello stato getRiportata()	
			if ( (((CompensoBulk)selezione).getEsercizio().compareTo(esScriv) != 0) && (!CompensoBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(((CompensoBulk)selezione).getRiportataInScrivania())) ){					
				throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo non risulta completamente riportato! Operazione annullata.");
			}				

			eliminaCompensoClone(context, (CompensoBulk)selezione);
			
			context.closeBusinessProcess();
			HookForward forward = (HookForward)context.findForward("bringback");
			forward.addParameter("documentoAmministrativoSelezionato", selezione);
			return forward;
		}
	} catch(Throwable e) {
		return handleException(context,e);
	}		
	return context.findDefaultForward();
}
private Forward basicDoVisualizzaMandato(ActionContext context, MandatoBulk mandato) throws BusinessProcessException{

	CRUDMandatoBP mandatoBP = (CRUDMandatoBP)context.getUserInfo().createBusinessProcess(context,"CRUDMandatoBP",new Object[] { "VRSWTh" });
	mandatoBP.edit(context, mandato);

	return context.addBusinessProcess(mandatoBP);
}
private Forward basicDoVisualizzaMandatoReversale(ActionContext context, V_doc_cont_compBulk docCont) throws BusinessProcessException{

	Forward fwd = null;
	if (docCont.TIPO_DOC_CONT_MANDATO.equals(docCont.getTipo_doc_cont()))
		fwd = basicDoVisualizzaMandato(context, (MandatoBulk)docCont.getManRev());
	if (docCont.TIPO_DOC_CONT_REVERSALE.equals(docCont.getTipo_doc_cont()))
		fwd = basicDoVisualizzaReversale(context, (ReversaleBulk)docCont.getManRev());

	if (fwd==null)
		return context.findDefaultForward();
	return fwd;
}
private Forward basicDoVisualizzaReversale(ActionContext context, ReversaleBulk reversale) throws BusinessProcessException{

	CRUDReversaleBP reversaleBP = (CRUDReversaleBP)context.getUserInfo().createBusinessProcess(context,"CRUDReversaleBP",new Object[] { "VRSWTh" });
	reversaleBP.edit(context, reversale);

	return context.addBusinessProcess(reversaleBP);
}
public Forward doAnnullaModificaCORI(ActionContext context){

	try {

		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.getContributiCRUDController().setModelIndex(context, -1);

		return context.findDefaultForward();

	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
/**
 * Gestisce un comando "riporta".
 */
public Forward doAnnullaRiporta(ActionContext context) {

	try{
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.rollbackToSavePoint(context, "COMP_DA_DOC_AMM_UNDO_SP");

		return super.doAnnullaRiporta(context);
	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
private void doAzzeraTipoRapporto(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		compenso.setTipiRapporto(null);
		compenso.setTipoRapporto(null);
		doAzzeraTipoTrattamento(context , compenso);
	}
}
private void doAzzeraTipoTrattamento(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		compenso.setTipiTrattamento(null);
		compenso.setTipoTrattamento(null);
		compenso.setTipiPrestazioneCompenso(null);
		compenso.setTipoPrestazioneCompenso(null);
		compenso.resetDatiLiquidazione();
	}
}
public Forward doBlankSearchFind_regione_irap(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		compenso.setRegioneIrap(new RegioneBulk());
		compenso.setStatoCompensoToEseguiCalcolo();
		bp.setDirty(true);
	}
	return context.findDefaultForward();

}
public Forward doBlankSearchFind_terzo(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		V_terzo_per_compensoBulk v_terzo = new V_terzo_per_compensoBulk();
		compenso.setV_terzo(v_terzo);
		compenso.setCd_terzo(null);
		compenso.setNome(null);
		compenso.setCognome(null);
		compenso.setRagione_sociale(null);
		compenso.setPartita_iva(null);
		compenso.setCodice_fiscale(null);
		compenso.setPg_comune_add(null);
		compenso.setCd_provincia_add(null);
		compenso.setCd_regione_add(null);

		compenso.setTermini(null);
		compenso.setTerminiPagamento(null);
		compenso.setModalita(null);
		compenso.setModalitaPagamento(null);
		compenso.setBanca(null);
		compenso.setTipiRapporto(null);
		compenso.setTipoRapporto(null);
		compenso.setTipiTrattamento(null);
		compenso.setTipoTrattamento(null);
		compenso.setTipoPrestazioneCompenso(null);
		compenso.setCodici_rapporti_inps(null);
		compenso.setVisualizzaCodici_rapporti_inps(false);
		compenso.setCodici_attivita_inps(null);
		compenso.setVisualizzaCodici_attivita_inps(false);
		compenso.setCodici_altra_forma_ass_inps(null);
		compenso.setVisualizzaCodici_altra_forma_ass_inps(false);
		compenso.setComune_inps(null);
		compenso.setIncarichi_repertorio_anno(null);
		compenso.setContratto(null);
		compenso.setOggetto_contratto(null);
		
		compenso.setPignorato(null);
		compenso.setVisualizzaPignorato(false);

		compenso.setStatoCompensoToEseguiCalcolo();
	}
	return context.findDefaultForward();
}

public Forward doBlankSearchCodici_rapporti_inps(ActionContext context, CompensoBulk compenso) {
	if (compenso!=null){
		compenso.setCodici_rapporti_inps(new Codici_rapporti_inpsBulk());
		compenso.setCodici_attivita_inps(null);
		compenso.setVisualizzaCodici_attivita_inps(false);
	}	
	return context.findDefaultForward();
}	
public Forward doBlankSearchFind_tipologia_rischio(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		compenso.setTipologiaRischio(new Tipologia_rischioBulk());
		compenso.setStatoCompensoToEseguiCalcolo();
		bp.setDirty(true);
	}
	return context.findDefaultForward();

}
public Forward doBlankSearchFind_voce_iva(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		compenso.setVoceIva(new Voce_ivaBulk());
		compenso.setStatoCompensoToEseguiCalcolo();
		bp.setDirty(true);
	}
	return context.findDefaultForward();

}
public Forward doBringBackCORIDett(ActionContext context) {

	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
	bp.getContributiCRUDController().getSelection().clear();
	bp.getContributiCRUDController().setModelIndex(context, -1);

	return context.findDefaultForward();
}
public Forward doBringBackOpenObbligazioniWindow(ActionContext context) {

	try {
		HookForward caller = (HookForward)context.getCaller();
		Obbligazione_scadenzarioBulk obblig = (Obbligazione_scadenzarioBulk)caller.getParameter("bringback");

		if (obblig!=null)
			return basicDoBringBackOpenObbligazioniWindow(context, obblig);

		return context.findDefaultForward();

	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doBringBackRicercaObbligazioniWindow(ActionContext context) {

	try {
		HookForward caller = (HookForward)context.getCaller();
		Obbligazione_scadenzarioBulk obblig = (Obbligazione_scadenzarioBulk)caller.getParameter("obbligazioneSelezionata");

		return basicDoBringBackOpenObbligazioniWindow(context, obblig);

	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doBringBackSearchFind_regione_irap(ActionContext context, CompensoBulk compenso, RegioneBulk reg) {

	if (reg!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		compenso.setRegioneIrap(reg);
		compenso.setStatoCompensoToEseguiCalcolo();
		bp.setDirty(true);
	}

	return context.findDefaultForward();

}
public Forward doBringBackSearchFind_terzo(ActionContext context, CompensoBulk compenso, V_terzo_per_compensoBulk vTerzo) {

	try {

		if(vTerzo != null) {
			doBlankSearchFind_terzo(context, compenso);
			CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);

			bp.completaTerzo(context, compenso, vTerzo);
			((CompensoBulk)bp.getModel()).setStatoCompensoToEseguiCalcolo();
		} 
		return context.findDefaultForward();

	} catch(BusinessProcessException e) {
		return handleException(context,e);
	}
}
public Forward doBringBackSearchFind_tipologia_rischio(ActionContext context, CompensoBulk compenso, Tipologia_rischioBulk rischio) {

	if (rischio!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		compenso.setTipologiaRischio(rischio);
		compenso.setStatoCompensoToEseguiCalcolo();
		bp.setDirty(true);
	}

	return context.findDefaultForward();

}
public Forward doBringBackSearchFind_voce_iva(ActionContext context, CompensoBulk compenso, Voce_ivaBulk voce) {

	if (voce!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		compenso.setVoceIva(voce);
		compenso.setStatoCompensoToEseguiCalcolo();
		bp.setDirty(true);
	}

	return context.findDefaultForward();

}
/**
 * Gestisce una richiesta di ricerca.
 *
 * L'implementazione di default utilizza il metodo astratto read
 * di CRUDBusinessProcess.
 * Se la ricerca fornisce più di un risultato viene creato un
 * nuovo SelezionatoreListaBP per la selezione di un elemento.
 * Al business process viene anche chiesto l'elenco delle colonne da
 * visualizzare.
 */
 public Forward doCerca(ActionContext context) throws java.rmi.RemoteException,InstantiationException,javax.ejb.RemoveException {

	CRUDCompensoBP bp = (CRUDCompensoBP)context.getBusinessProcess();

	if (bp instanceof IDocumentoAmministrativoSpesaBP && ((IDocumentoAmministrativoSpesaBP)bp).isSpesaBP())
		return basicDoCerca(context);
	return super.doCerca(context);
}
public Forward doConfermaModificaCORI(ActionContext context){

	try {

		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if (compenso.isStatoCompensoEseguiCalcolo()){
			setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "E' necessario eseguire il calcolo");
			return context.findDefaultForward();
		}
		fillModel(context);
		bp.doConfermaModificaCORI(context);
		impostaStatoCompenso(context);

		return context.findDefaultForward();

	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
/**
  * Significato dei codici di errore:
  * --> 1 terzo non valido
  * --> 2 tipo rapporto non valido
  * --> 3 tipo trattamento non valido
  *
  *
**/
public Forward doConfermaModificaDataCompetenzaCoge(ActionContext context, OptionBP optionBP){

	try{
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		java.sql.Timestamp oldDataCompCoge = (java.sql.Timestamp)optionBP.getAttribute("oldDataCompCoge");
		int errorCodeTerzo = ((Integer)optionBP.getAttribute("errorCodeTerzo")).intValue();
		
		if (optionBP.getOption() == OptionBP.YES_BUTTON){
			compenso.setStatoCompensoToEseguiCalcolo();
			switch (errorCodeTerzo) {
				case 6: {
					doAzzeraTipoRapporto(context, compenso);
					bp.findTipiRapporto(context);
					break;
				}
			}
		}else
			compenso.setDt_da_competenza_coge(oldDataCompCoge);

		return context.findDefaultForward();

	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
/**
  * Significato dei codici di errore:
  * --> 1 terzo non valido
  * --> 2 tipo rapporto non valido
  * --> 3 tipo trattamento non valido
  *
  *
**/
public Forward doConfermaModificaDataRegistrazione(ActionContext context, OptionBP optionBP){

	try{
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		java.sql.Timestamp oldDataReg= (java.sql.Timestamp)optionBP.getAttribute("dataReg");
		int errorCodeTerzo = ((Integer)optionBP.getAttribute("errorCodeTerzo")).intValue();
		
		if (optionBP.getOption() == OptionBP.YES_BUTTON){
			compenso.setStatoCompensoToEseguiCalcolo();
			switch (errorCodeTerzo) {
				case 2: {
					doBlankSearchFind_terzo(context, compenso);
					break;
				}case 8: {
					doAzzeraTipoTrattamento(context, compenso);
					bp.findTipiTrattamento(context);
					break;
				}
			}
		}else
			compenso.setDt_registrazione(oldDataReg);

		return context.findDefaultForward();

	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
/**
 * Gestisce un comando "close".
 */
public Forward doConfirmCloseForm(ActionContext context, int option) throws BusinessProcessException {

	if (option == OptionBP.YES_BUTTON) {

		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.rollbackToSavePoint(context, "COMP_DA_DOC_AMM_UNDO_SP");

		context.closeBusinessProcess();
		HookForward closeForward = (HookForward)context.findForward("close");
		if (closeForward != null)
			return closeForward;

	}
	return context.findDefaultForward();
}
public Forward doContabilizzaCompensoCOFI(ActionContext context){

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if (bp.isDirty()){
			setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Sono state effettuate delle modifiche. Prima di proseguire e' necessario salvare.");
			return context.findDefaultForward();
		}
		if (compenso.getFl_compenso_mcarriera_tassep())
		{
			if (!compenso.getMinicarriera().getEsercizio().equals(it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext())))
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Poichè la Minicarriera è a tassazione separata, l'esercizio della Minicarriera deve essere uguale a quello del pagamento.");
			    return context.findDefaultForward();	
			}
		}
		if (!compenso.getFl_compenso_mcarriera_tassep())
		{
			if (!bp.isAccontoAddComOkPerContabil(context.getUserContext(), compenso))
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Per un corretto calcolo dell'Acconto dell'Addizionale Comunale, prima di proseguire e' necessario eseguire nuovamente il calcolo del compenso.");
				compenso.setStatoCompensoToEseguiCalcolo();
				return context.findDefaultForward();
			}
		}
		if (compenso.getTipoTrattamento().getFl_utilizzabile_art35())
		{
			if (compenso.getPartita_iva() == null)
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Per la tipologia di trattamento utilizzata è necessario che il Terzo abbia la Partita Iva (Art.35 DL n.223/2006).");
				return context.findDefaultForward();			
			}
			if (compenso.getCodice_fiscale() == null)
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Per la tipologia di trattamento utilizzata è necessario che il Terzo abbia il Codice Fiscale valorizzato.");
				return context.findDefaultForward();			
			}			
			if (!compenso.getFl_generata_fattura())
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Per la tipologia di trattamento utilizzata è necessaria la generazione della fattura (Art.35 DL n.223/2006).");
				return context.findDefaultForward();			
			}
			if (!bp.isCompensoValidoXContabil(context,compenso))
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Compenso non valido (Art.35 DL n.223/2006).");
				return context.findDefaultForward();			
			}
		}

		if (bp.isIncaricoRequired(context, compenso) && (compenso.getIncarichi_repertorio_anno()==null || compenso.getIncarichi_repertorio_anno().getCrudStatus()== OggettoBulk.UNDEFINED))
		{
			setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Inserire il contratto.");
			return context.findDefaultForward();			
		}
		
		if (compenso.isContrattoEnabled() && (compenso.getContratto()==null || compenso.getContratto().getCrudStatus()== OggettoBulk.UNDEFINED))
		{
			setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Inserire il contratto.");
			return context.findDefaultForward();			
		}
		
		if (!compenso.getFl_compenso_conguaglio())
		{
			if (!bp.isSospensioneIrpefOkPerContabil(context.getUserContext(), compenso))
			{
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Per un corretto calcolo della Sospensione IRPEF, prima di proseguire e' necessario eseguire nuovamente il calcolo del compenso.");
				compenso.setStatoCompensoToEseguiCalcolo();
				return context.findDefaultForward();
			}
		}
//		else
//		{
//			if (!bp.isSospensioneIrpefOkPerContabil(context.getUserContext(), compenso))
//			{
//				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Per un corretto calcolo della Sospensione IRPEF, prima di proseguire e' necessario eliminare il conguaglio ed elaborarlo nuovamente.");
//				return context.findDefaultForward();
//			}
//		}	
		bp.contabilizzaCompensoCOFI(context);
		((CompensoBulk)bp.getModel()).setStatoCompensoToContabilizzaCofi();

		setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Contabilizzazione eseguita in modo corretto.");

		return context.findDefaultForward();
	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
public Forward doCreaObbligazione(ActionContext context){

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		context.addHookForward("bringback",this,"doBringBackOpenObbligazioniWindow");
		context.addHookForward("close",this,"doBringBackOpenObbligazioniWindow");

		it.cnr.contab.doccont00.bp.CRUDObbligazioneBP obbligazioneBP = (it.cnr.contab.doccont00.bp.CRUDObbligazioneBP)context.getUserInfo().createBusinessProcess(context,"CRUDObbligazioneBP",new Object[] { "MRSWTh" });
		obbligazioneBP.reset(context);

		ObbligazioneBulk obbligazione = (ObbligazioneBulk)obbligazioneBP.getModel();
		obbligazione.setStato_obbligazione(ObbligazioneOrdBulk.STATO_OBB_DEFINITIVO);
		obbligazione.setCreditore(compenso.getTerzo()!=null?compenso.getTerzo():new it.cnr.contab.anagraf00.core.bulk.TerzoBulk());
		obbligazione.setDs_obbligazione("Impegno per compenso");
		obbligazione.setDt_registrazione(it.cnr.jada.util.ejb.EJBCommonServices.getServerDate());
		obbligazione.setFl_calcolo_automatico(Boolean.TRUE);
		obbligazione.setIm_obbligazione(compenso.getImportoObbligazione());
		obbligazione.setRiportato("N");
		
		Obbligazione_scadenzarioBulk scadenza = new Obbligazione_scadenzarioBulk(obbligazione);
		obbligazione.addToObbligazione_scadenzarioColl(scadenza);
		scadenza.setDs_scadenza("Scadenza per compenso");
		scadenza.setDt_scadenza(new java.sql.Timestamp(System.currentTimeMillis()));
		scadenza.setIm_scadenza(compenso.getImportoObbligazione());
		scadenza.setUser(obbligazione.getUser());
		scadenza.setToBeCreated();
		
		return context.addBusinessProcess(obbligazioneBP);
	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
/**
 * Gestisce un comando di cancellazione.
 */
public Forward doElimina(ActionContext context) throws java.rmi.RemoteException {

	try {
		fillModel(context);
	} catch(it.cnr.jada.bulk.FillException e) {
		return handleException(context,e);
	}

	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
	return basicDoEliminaCompenso(context);
}
public Forward doEliminaObbligazione(ActionContext context){

	try {

		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = bp.doEliminaObbligazione(context);

		if (compenso.getImportoObbligazione().compareTo(new java.math.BigDecimal(0))<=0)
			compenso.setStatoCompensoToObbligazioneSincronizzata();
		else
			compenso.setStatoCompensoToSincronizzaObbligazione();

		setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Impegno scollegato.");
		return context.findDefaultForward();

	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
/**
 * Azione che si scatena al clicked del bottone ESEGUI CALCOLO
 *
 * Chiama la Procedura Oracle e eseguo le seguenti operazioni:
 *		1. Importo Lordo <= 0 e non esiste obblig.
 *				--> imposto STATO_COMPENSO_OBBLIGAZIONE_SINCORNIZZATA
 *		2. Importo Lordo <= 0 e esiste obblig.
 * 				--> Elimino obbligazione e imposto STATO_COMPENSO_OBBLIGAZIONE_SINCORNIZZATA
 *		3. Importo Lordo > 0 e esiste obblig. con importo uguale a importo lordo compenso
 * 				--> imposto STATO_COMPENSO_OBBLIGAZIONE_SINCORNIZZATA
 *		4. Importo Lordo > 0 e non esiste obblig. oppure obblig. ha importo diverso da importo lordo compenso
 * 				--> imposto STATO_COMPENSO_SINCORNIZZA_OBBLIGAZIONE
 *
**/

public Forward doEseguiCalcolo(ActionContext context){
	try {
		fillModel(context);		
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.completeSearchTools(context,bp);
		bp.eseguiCalcolo(context);

		impostaStatoCompenso(context);

		setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Calcolo eseguito in modo corretto.");
		  return context.findDefaultForward();
	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
public Forward doLoadDocContAssociati(ActionContext context) {

	try{
		
		return basicDoLoadDocContAssociati(context);

	}catch(BusinessProcessException ex){
		return handleException(context, ex);
	}
}
public Forward doModificaAutomaticaObbligazione(ActionContext context) {

	try {
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		fillModel(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)compenso.getObbligazioneScadenzario();

		if (scadenza == null)
			throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita! Obbligazione inesistente");

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

		try {
			if ( scadenza.getIm_scadenza().compareTo(compenso.getImportoObbligazione()) == 0 )
				compenso.setStatoCompensoToObbligazioneSincronizzata();

			scadenza = (Obbligazione_scadenzarioBulk)h.modificaScadenzaInAutomatico(context.getUserContext(), scadenza, compenso.getImportoObbligazione(), false);
			bp.getDefferedUpdateSaldiParentBP().getDefferedUpdateSaldiBulk().addToDefferredSaldi(
				scadenza.getObbligazione(), 
				scadenza.getObbligazione().getSaldiInfo());
			compenso.setObbligazioneScadenzario(scadenza);
			if (scadenza.getObbligazione() != null && scadenza.getObbligazione().getContratto() != null){
				compenso.setCig(scadenza.getObbligazione().getContratto().getCig());
			} else {
				compenso.setCig(null);
			}

			compenso.setStatoCompensoToObbligazioneSincronizzata();
			compenso.setStato_cofi(compenso.STATO_CONTABILIZZATO);

		} 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;
		}

		return context.findDefaultForward();
	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doModificaManualeObbligazione(ActionContext context){

	try {

		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		fillModel(context);

		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if (compenso.isStatoCompensoEseguiCalcolo())
			throw new it.cnr.jada.comp.ApplicationException("E' necessario eseguire il calcolo prima di continuare.");

		Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)compenso.getObbligazioneScadenzario();
		boolean viewMode = bp.isViewing();
		if (scadenza == null)
			throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita. Obbligazione inesistente.");

		if(compenso.isROPerChiusura())
			viewMode = true;
				
		String status = viewMode ?"V":"M";
		it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP nbp = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getBusinessProcessFor(context, scadenza.getObbligazione(), status + "RSWTh");
		nbp.edit(context,scadenza.getObbligazione());
		nbp.selezionaScadenza(scadenza, context);

		context.addHookForward("bringback",this,"doBringBackOpenObbligazioniWindow");
		context.addHookForward("close",this,"doBringBackRicercaObbligazioniWindow");

		HookForward hook = (HookForward)context.findForward("bringback");
		return context.addBusinessProcess(nbp);
	} catch(Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doOnCheckDisponibilitaCassaFailed(ActionContext context, int option) {

	if (option == it.cnr.jada.util.action.OptionBP.OK_BUTTON) {
		CRUDCompensoBP bp = (CRUDCompensoBP)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){
		CRUDCompensoBP bp = (CRUDCompensoBP)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();
}

public Forward doOnDtACompetenzaCogeChange(ActionContext context) {


	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
	CompensoBulk compenso = (CompensoBulk)bp.getModel();
	java.sql.Timestamp oldDataCompCoge = compenso.getDt_a_competenza_coge();
	java.sql.Timestamp competenzaABck = compenso.getDt_a_competenza_coge();

	try{
		try {
			fillModel(context);
			if (bp.isSearching())
				return context.findDefaultForward();
			
			if (compenso.getDt_a_competenza_coge() == null)
				throw new it.cnr.jada.comp.ApplicationException("Non è possibile annullare la data di competenza");
			
			GregorianCalendar data_a = (GregorianCalendar) GregorianCalendar.getInstance();
			GregorianCalendar old_data_a = (GregorianCalendar) GregorianCalendar.getInstance();
			data_a.setTime(((CompensoBulk)bp.getModel()).getDt_a_competenza_coge());
			if (oldDataCompCoge!=null)
				old_data_a.setTime(oldDataCompCoge);
			
			int annoCompetenzaA = data_a.get(java.util.GregorianCalendar.YEAR); 
			int annoOldCompetenzaA = old_data_a.get(java.util.GregorianCalendar.YEAR); 
			
			if (bp.isTerzoCervellone(context.getUserContext(),(CompensoBulk)bp.getModel()) &&
					annoCompetenzaA != annoOldCompetenzaA)
			{
				((CompensoBulk)bp.getModel()).setDt_a_competenza_coge(oldDataCompCoge);
				throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita. Non è possibile cambiare l'anno di competenza poichè il Terzo scelto potrebbe essere soggetto ad Agevolazioni per 'Rientro dei Cervelli'.");
			}
			//r.p. 20/10/2008 commentato perchè non vengono valorizzate in automatico data inizio e fine competenze
			//compenso.validaDate();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setDt_a_competenza_coge(oldDataCompCoge);
			throw e;
		} catch(it.cnr.jada.comp.ApplicationException e) {
			compenso.setDt_a_competenza_coge(oldDataCompCoge);
			throw e;
		}
		
		int errorCodeTerzo = bp.validaTerzo(context, false);
		if (errorCodeTerzo==6){
			String msg = null;
			switch (errorCodeTerzo) {
				case 6: {
					msg = "Il tipo rapporto selezionato non è più valido! I dati verranno persi. Vuoi continuare?";
					break;
				}
			}
				
			OptionBP option = openConfirm(context, msg , OptionBP.CONFIRM_YES_NO,"doConfermaModificaDataCompetenzaCoge");
			option.addAttribute("oldDataCompCoge", oldDataCompCoge);
			option.addAttribute("errorCodeTerzo", new Integer(errorCodeTerzo));
			return option;
		}

		((CompensoBulk)bp.getModel()).setStatoCompensoToEseguiCalcolo();
		bp.findTipiRapporto(context);
		bp.ripristinaSelezioneTipoRapporto();
		
			java.sql.Timestamp CompetenzaA = compenso.getDt_a_competenza_coge();
			java.util.GregorianCalendar tsOdiernoGregorian = new GregorianCalendar();
			tsOdiernoGregorian.setTime(new Date(CompetenzaA.getTime()));
			
			Integer esercizioCompetenzaA = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
			String cds = compenso.getCd_cds();
			
			if (((CompensoComponentSession)bp.createComponentSession()).isEsercizioChiusoPerDataCompetenza(context.getUserContext(),esercizioCompetenzaA,cds))
				throw new it.cnr.jada.comp.ApplicationException("Le date \"Competenza da\" e \"Competenza a\" non possono appartenere ad un esercizio chiuso");
		
		compenso.setStatoCompensoToEseguiCalcolo();
		return context.findDefaultForward();
	} catch(Throwable e) {
		compenso.setDt_a_competenza_coge(competenzaABck);
		return handleException(context, e);
	}
}
public Forward doOnDtDaCompetenzaCogeChange(ActionContext context) {
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.sql.Timestamp oldDataCompCoge = compenso.getDt_da_competenza_coge();
		java.sql.Timestamp competenzaDaBck = compenso.getDt_da_competenza_coge();
	try {
		
		fillModel(context);
		if (bp.isSearching())
			return context.findDefaultForward();
		if (compenso.getDt_da_competenza_coge() == null)
			throw new it.cnr.jada.comp.ApplicationException("Non è possibile annullare la data di competenza");
		
		GregorianCalendar data_da = (GregorianCalendar) GregorianCalendar.getInstance();
		GregorianCalendar old_data_da = (GregorianCalendar) GregorianCalendar.getInstance();
		data_da.setTime(((CompensoBulk)bp.getModel()).getDt_da_competenza_coge());
		if (oldDataCompCoge!=null)
				old_data_da.setTime(oldDataCompCoge);
		
		int annoCompetenzaDa = data_da.get(java.util.GregorianCalendar.YEAR); 
		int annoOldCompetenzaDa = old_data_da.get(java.util.GregorianCalendar.YEAR); 
		
		if (bp.isTerzoCervellone(context.getUserContext(),(CompensoBulk)bp.getModel()) &&
				annoCompetenzaDa != annoOldCompetenzaDa)
		{
			((CompensoBulk)bp.getModel()).setDt_da_competenza_coge(oldDataCompCoge);
			throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita. Non è possibile cambiare l'anno di competenza poichè il Terzo scelto potrebbe essere soggetto ad Agevolazioni per 'Rientro dei Cervelli'.");
		}
		//r.p. 20/10/2008 commentato perchè non vengono valorizzate in automatico data inizio e fine competenze
		/*try{
			((CompensoBulk)bp.getModel()).validaDate();
		} catch(it.cnr.jada.comp.ApplicationException e) {
			((CompensoBulk)bp.getModel()).setDt_da_competenza_coge(oldDataCompCoge);
			throw e;
		}*/
			
		int errorCodeTerzo = bp.validaTerzo(context, false);
		if (errorCodeTerzo==6){
			String msg = null;
			switch (errorCodeTerzo) {
				case 6: {
					msg = "Il tipo rapporto selezionato non è più valido! I dati verranno persi. Vuoi continuare?";
					break;
				}
			}
				
			OptionBP option = openConfirm(context, msg , OptionBP.CONFIRM_YES_NO,"doConfermaModificaDataCompetenzaCoge");
			option.addAttribute("oldDataCompCoge", oldDataCompCoge);
			option.addAttribute("errorCodeTerzo", new Integer(errorCodeTerzo));
			return option;
		}

		((CompensoBulk)bp.getModel()).setStatoCompensoToEseguiCalcolo();
		bp.findTipiRapporto(context);
		bp.ripristinaSelezioneTipoRapporto();
		
		
		
			java.sql.Timestamp CompetenzaDa = compenso.getDt_da_competenza_coge();
			java.util.GregorianCalendar tsOdiernoGregorian = new GregorianCalendar();
			tsOdiernoGregorian.setTime(new Date(CompetenzaDa.getTime()));
			
			Integer esercizioCompetenzaDa = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
			String cds = compenso.getCd_cds();
			
			if (((CompensoComponentSession)bp.createComponentSession()).isEsercizioChiusoPerDataCompetenza(context.getUserContext(),esercizioCompetenzaDa,cds))
				throw new it.cnr.jada.comp.ApplicationException("Le date \"Competenza da\" e \"Competenza a\" non possono appartenere ad un esercizio chiuso");
				
		
		return context.findDefaultForward();

	}catch (Throwable ex) {
		compenso.setDt_da_competenza_coge(competenzaDaBck);
		return handleException(context, ex);
	}
}
public Forward doOnDtRegistrazioneChange(ActionContext context) {

	try {
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		java.sql.Timestamp oldDataReg = ((CompensoBulk)bp.getModel()).getDt_registrazione();
		fillModel(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

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

		try{
			compenso.validaDate();
		} catch(it.cnr.jada.comp.ApplicationException e) {
			compenso.setDt_registrazione(oldDataReg);
			throw e;
		}

		int errorCodeTerzo = bp.validaTerzo(context, false);
		if (errorCodeTerzo==2 || errorCodeTerzo==8){
			String msg = null;
			switch (errorCodeTerzo) {
				case 2: {
					msg = "Il terzo selezionato non è più valido! I dati verranno persi. Vuoi continuare?";
					break;
				}case 8: {
					msg = "Il tipo trattamento selezionato non è più valido! I dati verranno persi. Vuoi continuare?";
					break;
				}
			}
				
			OptionBP option = openConfirm(context, msg , OptionBP.CONFIRM_YES_NO,"doConfermaModificaDataRegistrazione");
			option.addAttribute("dataReg", oldDataReg);
			option.addAttribute("errorCodeTerzo", new Integer(errorCodeTerzo));
			return option;
		}

		compenso.setStatoCompensoToEseguiCalcolo();
		bp.valorizzaInfoDocEle(context, compenso);
		compenso.resetDatiFattura();
		doAzzeraTipoTrattamento(context, compenso);
		bp.findTipiTrattamento(context);
		bp.ripristinaSelezioneTipoTrattamento(context);

		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doOnFlSenzaCalcoliChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

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

		compenso.setStatoCompensoToEseguiCalcolo();
		doAzzeraTipoTrattamento(context, compenso);
		bp.findTipiTrattamento(context);
		compenso.setIncarichi_repertorio_anno(null);
		compenso.setContratto(null);
		compenso.setOggetto_contratto(null);
		if(!compenso.getFl_generata_fattura())
			compenso.resetDatiFattura();

		// Puo' valere TRUE solo se il compenso è senza calcoli
		if(!compenso.isSenzaCalcoli() && compenso.getFl_recupero_rate().booleanValue())		
			compenso.setFl_recupero_rate(Boolean.FALSE);
		
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doOnFlGenerataFatturaChange(ActionContext context) {
	try{
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if(!compenso.getFl_generata_fattura())
			compenso.resetDatiFattura();
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}

}
public Forward doOnFlLiquidazioneDifferitaChange(ActionContext context){
	try{
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if(compenso.getFl_liquidazione_differita() && compenso.getDt_fattura_fornitore()!=null){
			java.sql.Timestamp data_limite = ((it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession", it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession.class)).getDt01(context.getUserContext(), new Integer(0), "*", "COSTANTI", "LIMITE_CREAZIONE_FATT_PASS_ES_DIF");
			java.sql.Timestamp data_limite_sup = ((it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRCONFIG00_EJB_Configurazione_cnrComponentSession", it.cnr.contab.config00.ejb.Configurazione_cnrComponentSession.class)).getDt02(context.getUserContext(), new Integer(0), "*", "COSTANTI", "LIMITE_CREAZIONE_FATT_PASS_ES_DIF");
			if(compenso.getDt_fattura_fornitore().compareTo(data_limite)<0||compenso.getDt_fattura_fornitore().compareTo(data_limite_sup)>0){
				compenso.setFl_liquidazione_differita(false);
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "Non è possibile indicare la liquidazione differita con la data fattura fornitore indicata.");
			}
		}
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
	
}
public Forward doOnImLordoPercipienteChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getIm_lordo_percipiente();

		try {
			fillModel(context);
			if (Utility.nvl(compenso.getQuota_esente_inps()).compareTo(Utility.nvl(compenso.getIm_lordo_percipiente())) == 1){
				compenso.setIm_lordo_percipiente(oldImp);
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'importo Lordo non può superare la Quota esente INPS.");
				return context.findDefaultForward();	
			}			
			compenso.setStatoCompensoToEseguiCalcolo();
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setIm_lordo_percipiente(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
public Forward doOnQuotaEsenteINPSChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getQuota_esente_inps();

		try {
			fillModel(context);
			if (Utility.nvl(compenso.getQuota_esente_inps()).compareTo(Utility.nvl(compenso.getIm_lordo_percipiente())) == 1){
				compenso.setQuota_esente_inps(oldImp);
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "La Quota esente INPS non può superare l'importo lordo.");
				return context.findDefaultForward();	
			}
			compenso.setStatoCompensoToEseguiCalcolo();
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setQuota_esente_inps(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
public Forward doOnImNoFiscaleChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getIm_no_fiscale();

		try {
			fillModel(context);
			compenso.setStatoCompensoToEseguiCalcolo();
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setIm_no_fiscale(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
public Forward doOnImponibileInailChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getImponibile_inail();

		try {
			fillModel(context);
			compenso.setStatoCompensoToEseguiCalcolo();
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setImponibile_inail(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
/**
  * Alla selezione della Modalita di Pagamento ricerco le banche
  */

public Forward doOnModalitaPagamentoChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		bp.findListaBanche(context);

		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doOnQuotaEsenteChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getQuota_esente();

		try {
			fillModel(context);
			compenso.setStatoCompensoToEseguiCalcolo();
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setQuota_esente(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
public Forward doOnQuotaEsenteNoIvaChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getQuota_esente_no_iva();

		try {
			fillModel(context);
			compenso.setStatoCompensoToEseguiCalcolo();
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setQuota_esente_no_iva(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
public Forward doOnTipoAnagraficoChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if(bp.isSearching())
			return context.findDefaultForward();
			
		compenso.setStatoCompensoToEseguiCalcolo();
		return doBlankSearchFind_terzo(context, compenso);

	} catch(Exception e) {
		return handleException(context,e);
	}
}
public Forward doOnTipoIstituzCommercChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		if (bp.isSearching())
			return context.findDefaultForward();
		compenso.setFl_liquidazione_differita(false);
		compenso.setStatoCompensoToEseguiCalcolo();
		doAzzeraTipoTrattamento(context, compenso);
		bp.findTipiTrattamento(context);
		compenso.setIncarichi_repertorio_anno(null);
		compenso.setContratto(null);
		compenso.setOggetto_contratto(null);
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doOnStatoPagamentoFondoEcoChange(ActionContext context) {
	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		if (bp.isSearching())
			return context.findDefaultForward();
		compenso.setFl_liquidazione_differita(false);
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}

}

/**
  * Alla selezione del Tipo Rapporto vengono caricati i relativi tipi trattamento
  */  

public Forward doOnTipoRapportoChange(ActionContext context) {

	try {
		fillModel(context);
		PostTipoRapportoChange(context);
		
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}
/**
  * Alla selezione del Tipo Trattamento imposta i dati relativi alla Liquidazione
  */

public Forward doOnTipoTrattamentoChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);

		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if(!compenso.getTipoTrattamento().getFl_visibile_a_tutti()&& !UtenteBulk.isAbilitatoAllTrattamenti(context.getUserContext()))
		{
			doAzzeraTipoTrattamento(context, compenso);
			bp.findTipiTrattamento(context);
			throw new it.cnr.jada.comp.ApplicationException(
		    "Utente non abilitato all'utilizzo del trattamento selezionato!");
		}	
		
		compenso.setTipoPrestazioneCompenso(null);
		compenso.setIncarichi_repertorio_anno(null);
		compenso.setImporto_utilizzato(null);
		compenso.setContratto(null);
		compenso.setOggetto_contratto(null);
		bp.findTipiPrestazioneCompenso(context);
		
		if (compenso.getTipoTrattamento()!=null && compenso.getTipoTrattamento().getFl_pignorato_obbl())
		{
			compenso.setVisualizzaPignorato(true);
		    compenso.setPignorato(new TerzoBulk());
		}
		else
		{
			compenso.setPignorato(null);
			compenso.setVisualizzaPignorato(false);
		}
		
		bp.onTipoTrattamentoChange(context);
		
		((CompensoBulk)bp.getModel()).setStatoCompensoToEseguiCalcolo();

		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}


public Forward doOnTipoPrestazioneCompensoChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);

		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		if(compenso.getTipoPrestazioneCompenso()== null) 
		{
			compenso.setIncarichi_repertorio_anno(null);
			compenso.setImporto_utilizzato(null);
			compenso.setContratto(null);
			compenso.setOggetto_contratto(null);
		} 
	    if (compenso.getTipoPrestazioneCompenso()!= null && !compenso.getTipoPrestazioneCompenso().getFl_incarico())
		{
		compenso.setIncarichi_repertorio_anno(null);
		compenso.setImporto_utilizzato(null);
		}
		
		if (compenso.getTipoPrestazioneCompenso()!= null && !compenso.getTipoPrestazioneCompenso().getFl_contratto())
		{
			compenso.setContratto(null);
			compenso.setOggetto_contratto(null);
		}
		
		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}
public Forward doBringBackSearchCodici_rapporti_inps(ActionContext context, CompensoBulk compenso, Codici_rapporti_inpsBulk codici_rapporti_inps) throws BusinessProcessException {

	if (codici_rapporti_inps!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		compenso.setCodici_rapporti_inps(codici_rapporti_inps);
		bp.onTipoRapportoInpsChange(context);
		bp.setDirty(true);
	}
	return context.findDefaultForward();

}
/*public Forward doOnTipoRapportoInpsChange(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);

		bp.onTipoRapportoInpsChange(context);

		return context.findDefaultForward();

	}catch (Throwable ex) {
		return handleException(context, ex);
	}
}*/
/**
  *	Gestisce la creazione/ricerca di un'obbligazione
  */
public Forward doRicercaObbligazione(ActionContext context) {

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		if (compenso.getTerzo() == null)
			throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario impostare un fornitore!");

		Filtro_ricerca_obbligazioniVBulk filtro = new Filtro_ricerca_obbligazioniVBulk();
		filtro.setFornitore(compenso.getTerzo());
		filtro.setIm_importo(compenso.getImportoObbligazione());
		filtro.setCd_unita_organizzativa(compenso.getCd_unita_organizzativa());
		filtro.setFl_importo(Boolean.TRUE);
		filtro.setData_scadenziario(null);
		filtro.setFl_data_scadenziario(Boolean.FALSE);		
		filtro.setDs_obbligazione("Impegno per compenso");
		filtro.setDs_scadenza("Scadenza per compenso");

		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 salvare il compenso,
  * riportare avanti l'obbligazione e committare
  */
public Forward doRiportaAvanti(ActionContext context) throws java.rmi.RemoteException 
{
	CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
	
	try 
	{
		fillModel(context);
		
		bp.salvaRiportandoAvanti(context);

		return context.findDefaultForward();
	} 
	catch(it.cnr.jada.bulk.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 riportare 
  * indietro l'obbligazione senza committare
  */
  
public Forward doRiportaIndietro(ActionContext context) throws java.rmi.RemoteException 
{
	try 
	{
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		
		bp.riportaIndietro(context);

		return context.findDefaultForward();
	} 
	catch (Throwable t) 
	{
		return handleException(context, t);
	}
	
}
/**
 * Gestisce un HookForward di ritorno da un risultato di una ricerca (SelezionatoreBP)
 */
public Forward doRiportaSelezione(ActionContext context)  throws java.rmi.RemoteException {

	CRUDBP bp = (CRUDBP)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);
}
/**
  * Gestisce la selezione del bottone di ricerca delle Banche
  */

public Forward doSearchListaBanche(ActionContext context) {
	
	CompensoBulk compenso = (CompensoBulk)getBusinessProcess(context).getModel();
	String columnSet = compenso.getModalitaPagamento().getTiPagamentoColumnSet();
	return search(context, getFormField(context, "main.listaBanche"), columnSet);
}
/**
 * Gestisce un cambiamento di pagina su un controllo tabbed {@link it.cnr.jada.util.jsp.JSPUtils.tabbed}
 */
public Forward doTab(ActionContext context,String tabName,String pageName) {

	try	{
			
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		if (!bp.isSearching()){

			if ("tabCompenso".equalsIgnoreCase(bp.getTab(tabName))){
				compenso.validaTestata();
			}
			if ("tabCompensoTerzo".equalsIgnoreCase(bp.getTab(tabName))){
			}
			if ("tabCompensoDatiLiquidazione".equalsIgnoreCase(bp.getTab(tabName))) {
			}
			if ("tabCompensoContributiRitenute".equalsIgnoreCase(bp.getTab(tabName))) {
				bp.getContributiCRUDController().setModelIndex(context, -1);
			}
			if ("tabCompensoObbligazioni".equalsIgnoreCase(bp.getTab(tabName))) {
			}
			if ("tabCompensoDocumentiAssociati".equalsIgnoreCase(pageName)) {
				basicDoLoadDocContAssociati(context);
			}
		}

		return super.doTab( context, tabName, pageName );

	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doVisualizzaDettagli(ActionContext context){

	try {
		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);

		Contributo_ritenutaBulk coriBulk = (Contributo_ritenutaBulk)bp.getContributiCRUDController().getModel();
		if (coriBulk==null)
			throw new MessageToUser("Selezionare un contributo/ritenuta valido");

		if (coriBulk.getDettagli().isEmpty())
			throw new MessageToUser("Il contributo/ritenuta selezionato non ha dettagli");

			
		it.cnr.jada.util.action.SelezionatoreListaBP slbp = (it.cnr.jada.util.action.SelezionatoreListaBP) select(
			context,
			new it.cnr.jada.util.ListRemoteIterator((java.util.List)coriBulk.getDettagli()),
			it.cnr.jada.bulk.BulkInfo.getBulkInfo(Contributo_ritenuta_detBulk.class),
			null,
			"doBringBackCORIDett");
		slbp.setMultiSelection(false);
		slbp.disableSelection();
		return slbp;

	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
public Forward doVisualizzaDocContPrincipale(ActionContext context){

	try {

		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();

		if (compenso==null)
			throw new MessageToUser("Non è stato creato il compenso");

		V_doc_cont_compBulk docContPrincipale = compenso.getDocContPrincipale();
		if (docContPrincipale == null)
			throw new MessageToUser("Non esiste il documento contabile principale");

		return basicDoVisualizzaMandatoReversale(context, docContPrincipale);

	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
public Forward doVisualizzaDocumentoContabile(ActionContext context){

	try {

		fillModel(context);
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		V_doc_cont_compBulk docCont = (V_doc_cont_compBulk)bp.getDocContAssociatiCRUDController().getModel();

		if (docCont==null)
			throw new MessageToUser("Selezionare un Mandato o una Reversale");

		if (docCont.getManRev()==null)
			throw new MessageToUser("Non esiste il Mandato/Reversale");

		return basicDoVisualizzaMandatoReversale(context, docCont);

	}catch(Throwable ex){
		return handleException(context, ex);
	}
}
private void eliminaCompensoClone(ActionContext context, CompensoBulk compenso) throws Throwable{

	if (compenso != null){
		Long pgCompensoClone = compenso.getPgCompensoPerClone();
		if (pgCompensoClone!=null){
			Long pgCompenso = compenso.getPg_compenso();
			CompensoComponentSession session = (CompensoComponentSession)((CRUDCompensoBP)getBusinessProcess(context)).createComponentSession();
			session.eliminaCompensoTemporaneo(context.getUserContext(), compenso, pgCompensoClone);
			compenso.setPg_compenso(pgCompenso);
			compenso.setPgCompensoPerClone(null);
		}
	}
}
private void eliminaCompensoTemporaneo(ActionContext context, CompensoBulk compenso) throws Throwable{

	if (compenso != null && compenso.isTemporaneo()){
		CompensoComponentSession session = (CompensoComponentSession)((CRUDCompensoBP)getBusinessProcess(context)).createComponentSession();
		session.eliminaCompensoTemporaneo(context.getUserContext(), compenso, compenso.getPg_compenso());
	}
}
private void impostaStatoCompenso(ActionContext context) throws BusinessProcessException{

	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
	CompensoBulk compenso = (CompensoBulk)bp.getModel();
	
	if (compenso.getImportoObbligazione().compareTo(new java.math.BigDecimal(0))<=0){
		if (compenso.getObbligazioneScadenzario()!=null)
			compenso = bp.doEliminaObbligazione(context);
		compenso.setStato_cofi(compenso.STATO_CONTABILIZZATO);
		compenso.setStatoCompensoToObbligazioneSincronizzata();
 	} else if (compenso.getObbligazioneScadenzario()!=null && compenso.getImportoObbligazione().compareTo(compenso.getObbligazioneScadenzario().getIm_scadenza())==0)
		compenso.setStatoCompensoToObbligazioneSincronizzata();
 	else{
		compenso.setStatoCompensoToSincronizzaObbligazione();
		compenso.setStato_cofi(compenso.STATO_INIZIALE);
 	}
}
/**
 * Gestisce un comando "riporta".
 */
protected Forward riporta(ActionContext context, it.cnr.jada.bulk.OggettoBulk model) {

	try{
		eliminaCompensoClone(context, (CompensoBulk)model);
	} catch(Throwable e) {
		return handleException(context,e);
	}
	
	return super.riporta(context, model);
}

public Forward doBringBackSearchIncarichi_repertorio_anno(ActionContext context, CompensoBulk compenso, Incarichi_repertorio_annoBulk incarico_anno) throws BusinessProcessException {
		if(incarico_anno != null)
		try 
		{
				fillModel(context);
				CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
				
				if (incarico_anno!=null)
					bp.validaIncaricoAnno(context, incarico_anno);
				
				if(compenso.getTipoRapporto()==null )
				{
					compenso.impostaTipoRapporto(incarico_anno.getIncarichi_repertorio().getTipo_rapporto());
					PostTipoRapportoChange(context);
					//P.R. Reinizializzo l'oggetto perchè il metodo precedente ha risettato
					//     il model
					compenso = (CompensoBulk)bp.getModel();
				}
				if(compenso.getTipoTrattamento()==null)
					bp.findTipiTrattamento(context);

				compenso.setIncarichi_repertorio_anno(incarico_anno);
				//compenso.setIncarichi_oggetto(incarico_anno.getIncarichi_repertorio().getOggetto());
				compenso.setImporto_utilizzato(bp.prendiUtilizzato(context, compenso, incarico_anno));
				if (compenso.getImporto_utilizzato().compareTo(compenso.getImporto_complessivo())>=0)
					setMessage(context, FormBP.ERROR_MESSAGE, "Contratto già completamente utilizzato. Non sarà possibile completare la registrazione del compenso.");

				//bp.completaIncarico(context, compenso,incarico_anno);
				bp.setDirty(true);
		}catch (Throwable ex) {
				return handleException(context, ex);
		}
		return context.findDefaultForward();
}
public Forward doBlankSearchIncarichi_repertorio_anno(ActionContext context, CompensoBulk compenso) {
	if (compenso!=null){
		compenso.setIncarichi_repertorio_anno(new Incarichi_repertorio_annoBulk());
	}	
	return context.findDefaultForward();
}
public void PostTipoRapportoChange(ActionContext context) {

	try {
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		
		//Azzero la quota esente INPS
        compenso.setQuota_esente_inps(new java.math.BigDecimal(0));
        	
		doAzzeraTipoTrattamento(context, compenso);
		bp.findTipiTrattamento(context);
		compenso.setTipiPrestazioneCompenso(null);
		compenso.setTipoPrestazioneCompenso(null);
		compenso.setIncarichi_repertorio_anno(null);
		compenso.setContratto(null);
		compenso.setOggetto_contratto(null);
		//P.R. Reinizializzo l'oggetto perchè il metodo precedente ha risettato
		//     il model
		compenso = (CompensoBulk)bp.getModel();

		compenso.setStatoCompensoToEseguiCalcolo();

		compenso.setCodici_rapporti_inps(null);
		compenso.setVisualizzaCodici_rapporti_inps(false);
		compenso.setCodici_attivita_inps(null);
		compenso.setVisualizzaCodici_attivita_inps(false);
		compenso.setCodici_altra_forma_ass_inps(null);
		compenso.setVisualizzaCodici_altra_forma_ass_inps(false);
		compenso.setComune_inps(null);
		
		compenso.setPignorato(null);
		compenso.setVisualizzaPignorato(false);

	}catch (Throwable ex) {
		handleException(context, ex);
	}
}
public Forward doOnImNettoDaTrattenereChange(ActionContext context) {

	try{	
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		CompensoBulk compenso = (CompensoBulk)bp.getModel();
		java.math.BigDecimal oldImp = compenso.getIm_netto_da_trattenere();

		try {
			fillModel(context);
			if (compenso.isStatoCompensoEseguiCalcolo())
			{
				compenso.setIm_netto_da_trattenere(oldImp);
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "E' necessario eseguire prima il calcolo.");
				return context.findDefaultForward();	
			}
			if (Utility.nvl(compenso.getIm_netto_da_trattenere()).compareTo(new BigDecimal(0)) < 0){
				compenso.setIm_netto_da_trattenere(new BigDecimal(0));
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'importo Netto da sospendere non può essere negativo.");
				return context.findDefaultForward();	
			}	
			if (Utility.nvl(compenso.getIm_netto_percipiente()).compareTo(Utility.nvl(compenso.getIm_netto_da_trattenere())) < 0){
				compenso.setIm_netto_da_trattenere(oldImp);
				setMessage(context, it.cnr.jada.util.action.FormBP.WARNING_MESSAGE, "L'importo Netto da sospendere non può superare l'importo netto da pagare.");
				return context.findDefaultForward();	
			}
			return context.findDefaultForward();
		} catch(it.cnr.jada.bulk.FillException e) {
			compenso.setIm_netto_da_trattenere(oldImp);
			bp.setModel(context,compenso);
			throw e;
		}
	} catch(Throwable e) {
		return handleException(context, e);
	}
}
public Forward doOnStatoLiquidazioneChange(ActionContext context) {
	 try {
		 CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		 CompensoBulk compenso = (CompensoBulk)bp.getModel();
		 fillModel(context);
		 if(compenso.getStato_liquidazione()!=null && compenso.getStato_liquidazione().equals(compenso.LIQ)){
	       	if(compenso.getCausale()!=null){ 
	       		compenso.setCausale(null);
	       	}
	     }else if(compenso.getStato_liquidazione()!=null && compenso.getStato_liquidazione().equals(compenso.SOSP)){
	        	compenso.setCausale(compenso.ATTLIQ);
	     } else if(compenso.getStato_liquidazione()!=null && compenso.getStato_liquidazione().equals(compenso.NOLIQ)){
	        	compenso.setCausale(compenso.CONT);
	     }
	     bp.setModel(context, compenso);
	   } catch (Throwable t) {
	        return handleException(context, t);
	  }
return context.findDefaultForward();
}
public Forward doOnCausaleChange(ActionContext context) {
	try {
		 CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		 CompensoBulk compenso = (CompensoBulk)bp.getModel();
		    String oldCausale=compenso.getCausale();
	        fillModel(context);
	         if(compenso.getStato_liquidazione()!=null && compenso.getStato_liquidazione().equals(compenso.LIQ)){
	        	if(compenso.getCausale()!=null){ 
	        		compenso.setCausale(null);
	        		throw new it.cnr.jada.comp.ApplicationException("Causale non valida, per lo stato della Liquidazione");
	        	}
	         }else if(compenso.getStato_liquidazione()!=null && compenso.getStato_liquidazione().equals(compenso.NOLIQ)){
	        	
	        	if (compenso.getCausale()!= null && !compenso.getCausale().equals(compenso.CONT)){
	        		if(oldCausale!=null)
	        			compenso.setCausale(oldCausale);
	        		else
	        			compenso.setCausale(null);
	        		throw new it.cnr.jada.comp.ApplicationException("Causale non valida, per lo stato della Liquidazione");
	        	}
	         }else if(compenso.getStato_liquidazione()!=null && compenso.getStato_liquidazione().equals(compenso.SOSP)){
	        	if (compenso.getCausale()!= null && (!compenso.getCausale().equals(compenso.ATTLIQ) &&!compenso.getCausale().equals(compenso.CONT))){
	        		if(oldCausale!=null )
	        			compenso.setCausale(oldCausale);
	        		else
	        			compenso.setCausale(null);
        		  throw new it.cnr.jada.comp.ApplicationException("Causale non valida, per lo stato della Liquidazione");
	        	}
	        }
	 	       
	        bp.setModel(context, compenso);
	  } catch (Throwable t) {
	      return handleException(context, t);
	  }
	 return context.findDefaultForward();
}
public Forward doBringBackCRUDCrea_cig(ActionContext context, CompensoBulk compenso, CigBulk cig) 
{
	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
	try 
	{
		if (cig != null )
		{
			compenso.setCig(cig);
		}	
		return context.findDefaultForward();
	}
	catch(it.cnr.jada.action.MessageToUser e) 
	{
		getBusinessProcess(context).setErrorMessage(e.getMessage());
		return context.findDefaultForward();
	}		

	catch(Throwable e) {return handleException(context,e);}
}

@Override
public Forward doSalva(ActionContext actioncontext) throws RemoteException {
	CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(actioncontext);
	if (bp.isViewing()){
        setMessage(actioncontext, FormBP.ERROR_MESSAGE, "Nessuna modifica da salvare.");
	}
	return super.doSalva(actioncontext);
}
public Forward doBringBackSearchCig(ActionContext context, CompensoBulk compenso, CigBulk cig) throws BusinessProcessException {

	if (cig!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP) getBusinessProcess(context);
		compenso.setCig(cig);
		bp.setDirty(true);
	} else {
		compenso.setCig(null);
	}
	return context.findDefaultForward();
}
public Forward doOnMotivoAssenzaCigChange(ActionContext context) {

	try {
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		fillModel(context);
	}catch (Throwable ex) {
		return handleException(context, ex);
	}
	return context.findDefaultForward();
}
public Forward doBlankSearchCig(ActionContext context, CompensoBulk compenso) {

	if (compenso!=null){
		CRUDCompensoBP bp = (CRUDCompensoBP)getBusinessProcess(context);
		compenso.setCig(null);
		bp.setDirty(true);
	}
	return context.findDefaultForward();

}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy