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

it.cnr.contab.docamm00.actions.CRUDDocumentoGenericoAction 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.docamm00.actions;

import it.cnr.contab.config00.pdcfin.bulk.Elemento_voceBulk;
import it.cnr.contab.doccont00.core.bulk.*;

import java.math.*;
import java.rmi.RemoteException;
import java.sql.Date;
import java.sql.SQLException;
import java.util.GregorianCalendar;
import java.util.Iterator;

import javax.ejb.EJBException;

import it.cnr.contab.doccont00.core.bulk.OptionRequestParameter;
import it.cnr.contab.docamm00.docs.bulk.*;
import it.cnr.contab.anagraf00.core.bulk.*;
import it.cnr.contab.docamm00.tabrif.bulk.*;
import it.cnr.contab.docamm00.bp.*;
import it.cnr.contab.docamm00.ejb.DocumentoGenericoComponentSession;
import it.cnr.contab.docamm00.ejb.FatturaAttivaSingolaComponentSession;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.doccont00.core.bulk.Accertamento_scadenzarioBulk;
import it.cnr.contab.inventario00.bp.AssBeneFatturaBP;
import it.cnr.contab.inventario00.docs.bulk.Ass_inv_bene_fatturaBulk;
import it.cnr.contab.inventario00.docs.bulk.V_ass_inv_bene_fatturaBulk;
import it.cnr.contab.inventario01.bp.CRUDCaricoInventarioBP;
import it.cnr.contab.inventario01.bp.CRUDScaricoInventarioBP;
import it.cnr.contab.inventario01.bulk.Buono_carico_scaricoBulk;
import it.cnr.contab.inventario01.ejb.BuonoCaricoScaricoComponentSession;
import it.cnr.contab.inventario01.ejb.NumerazioneTempBuonoComponentSession;
import it.cnr.contab.utenze00.bp.CNRUserContext;
import it.cnr.contab.utenze00.bulk.CNRUserInfo;
import it.cnr.contab.utenze00.bulk.UtenteBulk;
import it.cnr.contab.util.Utility;
import it.cnr.contab.anagraf00.tabrif.bulk.Rif_modalita_pagamentoBulk;
import it.cnr.jada.action.*;
import it.cnr.jada.bulk.*;
import it.cnr.jada.comp.ApplicationException;
import it.cnr.jada.comp.ComponentException;
import it.cnr.jada.persistency.IntrospectionException;
import it.cnr.jada.persistency.PersistencyException;
import it.cnr.jada.util.action.*;
import it.cnr.jada.util.ejb.EJBCommonServices;

public class CRUDDocumentoGenericoAction extends it.cnr.jada.util.action.CRUDAction {

public CRUDDocumentoGenericoAction() {
        super();
    }
private Documento_genericoBulk basicCalcolaTotale(ActionContext context) throws it.cnr.jada.comp.ApplicationException {

    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
    try {
        DocumentoGenericoComponentSession component= null;
        if (!documentoGenerico.isGenericoAttivo())
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
        else
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
        return (Documento_genericoBulk) component.calcoloConsuntivi(context.getUserContext(), documentoGenerico);
    } catch (it.cnr.jada.comp.ComponentException e) {
        throw new it.cnr.jada.comp.ApplicationException(e);
    } catch (Throwable t) {
        throw new it.cnr.jada.comp.ApplicationException(t);
    }
}
/**
 * effettua i controlli post-selezione dell'accertamento
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @param newAccert	
 * @return Il Forward alla pagina di risposta
 */
protected Forward basicDoBringBackOpenAccertamentiWindow(ActionContext context, Accertamento_scadenzarioBulk newAccert) {
//effettua i controlli post-selezione dell'accertamento

	CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
    try {
        Accertamento_scadenzarioBulk accertamento= (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel();
        if (accertamento != null) {
            resyncAccertamento(context, accertamento, newAccert);
        } else {
            basicDoContabilizzaAccertamenti(context, newAccert, null);
        }
    } catch (Throwable t) {
		it.cnr.contab.doccont00.core.bulk.IDefferUpdateSaldi defSaldiBulk = bp.getDefferedUpdateSaldiParentBP().getDefferedUpdateSaldiBulk();
		if (newAccert.getAccertamento().getPg_ver_rec().equals((Long)newAccert.getAccertamento().getSaldiInfo().get("pg_ver_rec")))
			defSaldiBulk.removeFromDefferredSaldi(newAccert.getAccertamento());
		try {
			it.cnr.contab.doccont00.bp.CRUDVirtualAccertamentoBP.rollbackToSafePoint(context);
		} catch (Exception e) {
			handleException(context, e);
		}
		return handleException(context, t);
    }
    return context.findDefaultForward();
}
/**
 * effettua i controlli post-selezione dell'obbligazione
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @param newObblig	
 * @return Il Forward alla pagina di risposta
 */
protected Forward basicDoBringBackOpenObbligazioniWindow(ActionContext context, Obbligazione_scadenzarioBulk newObblig) {
//effettua i controlli post-selezione dell'obbligazione
	CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
    try {
        Obbligazione_scadenzarioBulk obbligazione= (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel();
        if (obbligazione != null) {
            resyncObbligazione(context, obbligazione, newObblig);
        } else {
            basicDoContabilizza(context, newObblig, null);
        }
    } catch (Throwable t) {
		it.cnr.contab.doccont00.core.bulk.IDefferUpdateSaldi defSaldiBulk = bp.getDefferedUpdateSaldiParentBP().getDefferedUpdateSaldiBulk();
		if (newObblig.getObbligazione().getPg_ver_rec().equals((Long)newObblig.getObbligazione().getSaldiInfo().get("pg_ver_rec")))
			defSaldiBulk.removeFromDefferredSaldi(newObblig.getObbligazione());
		try {
			it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
		} catch (Exception e) {
			handleException(context, e);
		}
	    return handleException(context, t);
    }
    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.
 */
protected Forward basicDoCerca(ActionContext context) throws java.rmi.RemoteException,InstantiationException,javax.ejb.RemoveException {
//per spesa	
	try {
		fillModel(context);
		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);
	} 
}
    private void basicDoContabilizza(ActionContext context, it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk obbligazione, java.util.List selectedModels)
        throws it.cnr.jada.comp.ComponentException {

        if (obbligazione != null && selectedModels != null) {
            //// controlla l'obbligazione selezionata
            //if (obbligazione.getIm_associato_doc_amm().compareTo(new java.math.BigDecimal(0))!=0 || 
            //obbligazione.getIm_associato_doc_contabile().compareTo(new java.math.BigDecimal(0))!=0 ||
            //obbligazione.getIm_scadenza().compareTo(new java.math.BigDecimal(0))==0)
            //throw new it.cnr.jada.comp.ApplicationException("L'obbligazione selezionata non è valida");
            CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();

            try {
	            //richiama il metodo della component per la contabilizzazione
                DocumentoGenericoComponentSession h= (DocumentoGenericoComponentSession) bp.createComponentSession();
                Documento_genericoBulk doc= h.contabilizzaDettagliSelezionati(context.getUserContext(), (Documento_genericoBulk) bp.getModel(), selectedModels, obbligazione);
                try {
                    bp.setModel(context, doc);
                    bp.resyncChildren(context);
                } catch (BusinessProcessException e) {
                }
            } catch (java.rmi.RemoteException e) {
                bp.handleException(e);
            } catch (BusinessProcessException e) {
                bp.handleException(e);
            }

            doCalcolaTotalePerObbligazione(context, obbligazione);
        }
    }
    private void basicDoContabilizzaAccertamenti(ActionContext context, it.cnr.contab.doccont00.core.bulk.Accertamento_scadenzarioBulk accertamento, java.util.List selectedModels)
        throws it.cnr.jada.comp.ComponentException {

        if (accertamento != null && selectedModels != null) {
            //if (accertamento.getIm_associato_doc_amm().compareTo(new java.math.BigDecimal(0))!=0 || 
            //accertamento.getIm_associato_doc_contabile().compareTo(new java.math.BigDecimal(0))!=0 ||
            //accertamento.getIm_scadenza().compareTo(new java.math.BigDecimal(0))==0)
            //throw new it.cnr.jada.comp.ApplicationException("L'accertamento selezionato non è valida");

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

            try {
	            //richiama il metodo della component per la contabilizzazione
                DocumentoGenericoComponentSession h= (DocumentoGenericoComponentSession) bp.createComponentSession();

                Documento_genericoBulk doc= h.contabilizzaDettagliSelezionati(context.getUserContext(), (Documento_genericoBulk) bp.getModel(), selectedModels, accertamento);
                try {
                    bp.setModel(context, doc);
                    bp.resyncChildren(context);
                } catch (BusinessProcessException e) {
                }
            } catch (java.rmi.RemoteException e) {
                bp.handleException(e);
            } catch (BusinessProcessException e) {
                bp.handleException(e);
            }

            doCalcolaTotalePerAccertamento(context, accertamento);
        }
    }
/**
* Inizializza il terzo e per i generici passivi inizializza i riferimenti bancari
* Creation date: (27/11/2001 17.04.56)
* @param context it.cnr.jada.action.ActionContext
* @return it.cnr.jada.action.Forward
*/

public Documento_generico_rigaBulk basicDoResetTerzo(ActionContext context, Documento_generico_rigaBulk documentoGenericoRiga) throws java.rmi.RemoteException {

    //inizializza il terzo
    it.cnr.contab.anagraf00.core.bulk.TerzoBulk terzo = new it.cnr.contab.anagraf00.core.bulk.TerzoBulk();
    terzo.setAnagrafico(new AnagraficoBulk());
    documentoGenericoRiga.setTerzo(terzo);
    documentoGenericoRiga.setNome(null);
    documentoGenericoRiga.setCognome(null);
    documentoGenericoRiga.setRagione_sociale(null);
    documentoGenericoRiga.setCodice_fiscale(null);
    documentoGenericoRiga.setPartita_iva(null);
    //per i generici passivi inizializza i riferimenti bancari
    if (!documentoGenericoRiga.getDocumento_generico().isGenericoAttivo()) {
        documentoGenericoRiga.setBanca(null);
        documentoGenericoRiga.setModalita(null);
        documentoGenericoRiga.setRiferimenti_bancari(null);
        documentoGenericoRiga.setTermini(null);
        documentoGenericoRiga.setModalita_pagamento(null);
        documentoGenericoRiga.setCessionario(null);
    }
    return documentoGenericoRiga;
}
private Forward basicDoRicercaAccertamento(ActionContext context, Documento_genericoBulk doc, java.util.List models) {

    try {
        //controlla che gli importi dei dettagli siano diversi da 0
        //e che sia stato selezionato il terzo per i dettagli selezionati
        Documento_generico_rigaBulk riga= null;
        boolean diversi= false;
        Integer cd_terzo= null;

        //controlla se sono diversi i terzi
        if (models != null)
            for (java.util.Iterator i= models.iterator(); i.hasNext();) {
                riga= (Documento_generico_rigaBulk) i.next();
                if (cd_terzo == null)
                    cd_terzo= riga.getTerzo().getCd_terzo();
                if (riga.getTerzo().getCd_terzo() == null)
                    throw new it.cnr.jada.comp.ApplicationException("Non è possibile contabilizzare poiché su un dettaglio\n non è stato selezionato alcun terzo.");
//                if (riga.getIm_imponibile() == null || riga.getIm_imponibile().compareTo(new java.math.BigDecimal(0)) == 0)
//                    throw new it.cnr.jada.comp.ApplicationException("Non è possibile contabilizzare poiché un dettaglio\nselezionato ha un importo pari a 0.");
                if (!diversi && ((!riga.getTerzo().getCd_terzo().equals(cd_terzo))))
                    diversi= true;
            }

        //imposta il filtro per la ricerca
        Filtro_ricerca_accertamentiVBulk filtro= new Filtro_ricerca_accertamentiVBulk();

        //passivo per l'ente
        filtro.setPassivo_ente(doc.isPassivo_ente());

        //data scadenza
        filtro.setData_scadenziario(doc.getDt_scadenza());

        //se sono diversi i terzi viene passato una nuova istanza di terzobulk altrimenti il primo
        //calcola il totale dei dettagli selezionati
        if (models != null) {
	        if (!diversi) {
            	filtro.setCliente(((Documento_generico_rigaBulk) models.get(0)).getTerzo());
	        } else {
		        TerzoBulk nuovoTerzo = new TerzoBulk();
		        nuovoTerzo.setAnagrafico(new AnagraficoBulk());
            	filtro.setCliente(nuovoTerzo);
            }
            filtro.setIm_importo(calcolaTotaleSelezionati(models));
        }

        //unità organizzativa
        filtro.setCd_unita_organizzativa(doc.getCd_unita_organizzativa());
        //unità organizzativa di origine
        filtro.setCd_uo_origine(doc.getCd_uo_origine());

        //competenza coge
        filtro.setHasDocumentoCompetenzaCOGEInAnnoPrecedente(doc.hasCompetenzaCOGEInAnnoPrecedente());
        filtro.setHasDocumentoCompetenzaCOGESoloInAnnoCorrente(
	        !doc.hasCompetenzaCOGEInAnnoPrecedente() &&
	        doc.getDateCalendar(doc.getDt_a_competenza_coge()).get(java.util.Calendar.YEAR) == doc.getEsercizio().intValue());
		filtro.setCompetenzaCOGESuEnte(doc.isFlagEnte());

		if (!doc.isFlagEnte() && doc.isGenericoAttivo() &&
			(filtro.hasDocumentoCompetenzaCOGEInAnnoPrecedente() ||
				!filtro.hasDocumentoCompetenzaCOGESoloInAnnoCorrente()))
			throw new it.cnr.jada.comp.ApplicationException("Non è possibile contabilizzare alcun dettaglio\nper un CdS con competenza NON appartenente all'esercizio corrente");

		//imposta i flag per l'importo e la scadenza
        if (models == null || models.isEmpty())
            filtro.setFl_importo(Boolean.FALSE);
        if (filtro.getData_scadenziario() == null)
            filtro.setFl_data_scadenziario(Boolean.FALSE);

        filtro.setAttivoCds(!doc.isFlagEnte() && doc.isGenericoAttivo());
        
        //richiama il filtro RicercaAccertamentiBP 
        it.cnr.jada.util.action.BulkBP bp= (it.cnr.jada.util.action.BulkBP) context.getUserInfo().createBusinessProcess(context, "RicercaAccertamentiBP");
        bp.setModel(context, filtro);
        //imposta il bringback su doContabilizzaAccertamenti
        //if (!((SimpleCRUDBP)context.getBusinessProcess()).getTab("tab").equals("tabDocumentoGenericoAccertamenti"))
	        context.addHookForward("bringback", this, "doContabilizzaAccertamenti");
     	//else
            //context.addHookForward("bringback", this, "doAggiungiAccertamenti");
     	HookForward hook= (HookForward) context.findForward("bringback");
        return context.addBusinessProcess(bp);
    } catch (Throwable e) {
        return handleException(context, e);
    }

}
private Forward basicDoRicercaObbligazione(ActionContext context, Documento_genericoBulk doc, java.util.List models) {

    try {
        //controlla che gli importi dei dettagli siano diversi da 0
        //e che sia stato selezionato il terzo per i dettagli selezionati
        Documento_generico_rigaBulk riga= null;
        boolean diversi= false;
        Integer cd_terzo= null;

        //controlla se sono diversi i terzi
        if (models != null)
            for (java.util.Iterator i= models.iterator(); i.hasNext();) {
                riga= (Documento_generico_rigaBulk) i.next();
                if (riga.getTerzo().getCd_terzo() == null)
                    throw new it.cnr.jada.comp.ApplicationException("Non è possibile contabilizzare poiché su un dettaglio\ns non è stato selezionato alcun terzo");
                if (cd_terzo == null)
                    cd_terzo= riga.getTerzo().getCd_terzo();
                if (riga.getIm_imponibile() == null || riga.getIm_imponibile().compareTo(new java.math.BigDecimal(0)) == 0)
                    throw new it.cnr.jada.comp.ApplicationException("Non è possibile contabilizzare poiché un dettaglio\nselezionato ha un importo pari a 0");
                if (!diversi && ((!riga.getTerzo().getCd_terzo().equals(cd_terzo))))
                    diversi= true;
            }

        //imposta il filtro per la ricerca
        Filtro_ricerca_obbligazioniVBulk filtro= new Filtro_ricerca_obbligazioniVBulk();

        CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
//        filtro.setSoloVociSenzaIndicazioneTrovato(true);
        //Documento_genericoBulk documento = ((Documento_genericoBulk) bp.getModel());

        //imposta il tipo documento
        if (doc.getTipo_documento()!=null)
        	filtro.setTipo_documento(doc.getTipo_documento());
        	
        //passivo per l'ente
        filtro.setPassivo_ente(doc.isPassivo_ente());


        //data scadenza
        filtro.setData_scadenziario(doc.getDt_scadenza());

        //se sono diversi i terzi viene passato una nuova istanza di terzobulk altrimenti il primo
        //calcola il totale dei dettagli selezionati
        if (models != null) {
	        if (!diversi) {
            	filtro.setFornitore(((Documento_generico_rigaBulk) models.get(0)).getTerzo());
	        } else {
		        TerzoBulk nuovoTerzo = new TerzoBulk();
		        nuovoTerzo.setAnagrafico(new AnagraficoBulk());
            	filtro.setFornitore(nuovoTerzo);
            }
            filtro.setIm_importo(calcolaTotaleSelezionati(models));
        }
        //unità organizzativa e unità organizzativa di origine
        filtro.setCd_unita_organizzativa(doc.getCd_unita_organizzativa());
        filtro.setCd_uo_origine(doc.getCd_uo_origine());

        //competenza coge
        filtro.setHasDocumentoCompetenzaCOGEInAnnoPrecedente(doc.hasCompetenzaCOGEInAnnoPrecedente());
        filtro.setHasDocumentoCompetenzaCOGESoloInAnnoCorrente(
	        !doc.hasCompetenzaCOGEInAnnoPrecedente() &&
	        doc.getDateCalendar(doc.getDt_a_competenza_coge()).get(java.util.Calendar.YEAR) == doc.getEsercizio().intValue());
		filtro.setCompetenzaCOGESuEnte(doc.isFlagEnte());

		//if (doc.isPassivo_ente() &&
			//filtro.hasDocumentoCompetenzaCOGEInAnnoPrecedente() &&
			//((doc.getUo_CNR() != null && !doc.getUo_CNR().equalsIgnoreCase(doc.getCd_uo_origine())) &&
			 //(doc.getCds_CNR() != null && !doc.getCds_CNR().equalsIgnoreCase(doc.getCd_cds_origine()))))
			//throw new it.cnr.jada.comp.ApplicationException("Non è possibile contabilizzare alcun dettaglio\nper un documento passivo dell'Ente con competenza appartenente all'anno precedente.");
		
        //imposta i flag per l'importo e la scadenza
        if (models == null || models.isEmpty())
            filtro.setFl_importo(Boolean.FALSE);
        if (filtro.getData_scadenziario() == null)
            filtro.setFl_data_scadenziario(Boolean.FALSE);

        //richiama il filtro RicercaAccertamentiBP 
        it.cnr.jada.util.action.BulkBP robp= (it.cnr.jada.util.action.BulkBP) context.getUserInfo().createBusinessProcess(context, "RicercaObbligazioniBP");
        robp.setModel(context, filtro);
        //imposta il bringback su doContabilizzaAccertamenti
        context.addHookForward("bringback", this, "doContabilizzaObbligazioni");
        HookForward hook= (HookForward) context.findForward("bringback");
        return context.addBusinessProcess(robp);
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * 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 {

	//per spesa
	try {
		if (selezione != null) {
			CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
			bp.edit(context,selezione);
			Documento_genericoBulk selezioneBulk = (Documento_genericoBulk)bp.getModel();

			// Borriello: integrazione Err. CNR 775
			Integer esScriv = it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext());
			
			if ( (selezioneBulk.getEsercizio().compareTo(esScriv) == 0) && selezioneBulk.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 ( (selezioneBulk.getEsercizio().compareTo(esScriv) != 0) && (!Documento_genericoBulk.COMPLETAMENTE_RIPORTATO.equalsIgnoreCase(selezioneBulk.getRiportataInScrivania())) ){					
				throw new it.cnr.jada.comp.ApplicationException("Il documento amministrativo non risulta completamente riportato! Operazione annullata.");
			}
			//richiamo del terzo di default per la spesa..
			DocumentoGenericoComponentSession h= (DocumentoGenericoComponentSession) bp.createComponentSession();
			if(h.getTerzoUnivoco(context.getUserContext(),selezioneBulk)!= null)
					selezioneBulk.setTerzo_spesa(h.getTerzoUnivoco(context.getUserContext(),selezioneBulk));
			else
					selezioneBulk.setTerzo_spesa(h.getTerzoDefault(context.getUserContext()));
            
			context.closeBusinessProcess();
			HookForward forward = (HookForward)context.findForward("bringback");
			forward.addParameter("documentoAmministrativoSelezionato", selezioneBulk);
			return forward;
		}
	} catch(Exception e) {
		return handleException(context,e);
	}		
	return context.findDefaultForward();
}
/**
 * Calcola l'importo totale delle riche selezionate
 * 
 *
 * @param selectedModels	
 * @return 
 * @throws ApplicationException	
 */
protected java.math.BigDecimal calcolaTotaleSelezionati(java.util.List selectedModels) throws it.cnr.jada.comp.ApplicationException {
//calcola l'importo totale delle riche selezionate
    java.math.BigDecimal importo= new java.math.BigDecimal(0);

    if (selectedModels != null) {
        for (java.util.Iterator i= selectedModels.iterator(); i.hasNext();) {
            Documento_generico_rigaBulk rigaSelected= (Documento_generico_rigaBulk) i.next();
            java.math.BigDecimal imTotale= rigaSelected.getIm_riga();
           if (imTotale != null)
                importo= importo.add(imTotale);
        }
    }

    importo= importo.setScale(2, java.math.BigDecimal.ROUND_HALF_UP);
    return importo;
}
private void controllaQuadraturaAccertamenti(ActionContext context, Documento_genericoBulk doc) throws it.cnr.jada.comp.ComponentException {
//controllo di quadratura tra la scadenza e le righe associate
    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();

    try {
	    //richiamo della component
        DocumentoGenericoComponentSession h= (DocumentoGenericoComponentSession) bp.createComponentSession();
        h.controllaQuadraturaAccertamenti(context.getUserContext(), doc);
    } catch (java.rmi.RemoteException e) {
        bp.handleException(e);
    } catch (BusinessProcessException e) {
        bp.handleException(e);
    }
}
private void controllaQuadraturaObbligazioni(ActionContext context, Documento_genericoBulk doc) throws it.cnr.jada.comp.ComponentException {
//controllo di quadratura tra la scadenza e le righe associate

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

    try {
	    //richiamo della component
        DocumentoGenericoComponentSession h= (DocumentoGenericoComponentSession) bp.createComponentSession();
        h.controllaQuadraturaObbligazioni(context.getUserContext(), doc);
    } catch (java.rmi.RemoteException e) {
        bp.handleException(e);
    } catch (BusinessProcessException e) {
        bp.handleException(e);
    }
}
    /**
     * Controlla che le righe siano non Annullate e non associate a Mandati
     */
    private void controllaRighePerMandatieAnnullati(java.util.List models, Accertamento_scadenzarioBulk scadenza, boolean dettagli) throws it.cnr.jada.comp.ApplicationException {
        String emsg;
        for (java.util.Iterator it= models.iterator(); it.hasNext();) {
            Documento_generico_rigaBulk riga= (Documento_generico_rigaBulk) it.next();
            if (riga.getTi_associato_manrev() != null && riga.ASSOCIATO_A_MANDATO.equalsIgnoreCase(riga.getTi_associato_manrev())) {
                if (!dettagli)
                    emsg=
                        "Impossibile scollegare l'accertamento \""
							+ scadenza.getEsercizio_originale().intValue()
                        	+ "/" + scadenza.getPg_accertamento().longValue()
                            + "\" perchè il dettaglio collegato \""
                            + ((riga.getDs_riga() != null) ? riga.getDs_riga() : String.valueOf(riga.getProgressivo_riga().longValue()))
                            + "\" è associato a mandato.";
                else
                    emsg= "Impossibile scollegare il dettaglio \"" + ((riga.getDs_riga() != null) ? riga.getDs_riga() : String.valueOf(riga.getProgressivo_riga().longValue())) + "\" perchè associato a mandato.";
                throw new it.cnr.jada.comp.ApplicationException(emsg);
            }
            if (riga.isAnnullato()) {
                if (!dettagli)
                    emsg=
                        "Impossibile scollegare l'accertamento \""
                            + scadenza.getEsercizio_originale().intValue()
                        	+ "/" + scadenza.getPg_accertamento().longValue()
                            + "\" perchè il dettaglio collegato \""
                            + ((riga.getDs_riga() != null) ? riga.getDs_riga() : String.valueOf(riga.getProgressivo_riga().longValue()))
                            + "\" è in stato "
                            + riga.STATO_ANNULLATO
                            + ".";
                else
                    emsg=
                        "Impossibile scollegare il dettaglio \""
                            + ((riga.getDs_riga() != null) ? riga.getDs_riga() : String.valueOf(riga.getProgressivo_riga().longValue()))
                            + "\" perchè è in stato "
                            + riga.STATO_ANNULLATO
                            + ".";
                throw new it.cnr.jada.comp.ApplicationException(emsg);
            }
        }
    }
    /**
     * Controlla che le righe siano non Annullate e non associate a Mandati
     */
    private void controllaRighePerMandatieAnnullati(java.util.List models, Obbligazione_scadenzarioBulk scadenza) throws it.cnr.jada.comp.ApplicationException {
        String emsg;
        for (java.util.Iterator it= models.iterator(); it.hasNext();) {
            Documento_generico_rigaBulk riga= (Documento_generico_rigaBulk) it.next();
            if (riga.getTi_associato_manrev() != null && riga.ASSOCIATO_A_MANDATO.equalsIgnoreCase(riga.getTi_associato_manrev())) {
                emsg=
                    "Impossibile scollegare l'impegno \""
						+ scadenza.getEsercizio_originale().intValue()
						+ "/" + scadenza.getPg_obbligazione().longValue()
                        + "\" perchè il dettaglio collegato \""
                        + ((riga.getDs_riga() != null) ? riga.getDs_riga() : String.valueOf(riga.getProgressivo_riga().longValue()))
                        + "\" è associato a mandato.";
                throw new it.cnr.jada.comp.ApplicationException(emsg);
            }
            if (riga.isAnnullato()) {
                emsg=
                    "Impossibile scollegare il dettaglio \""
                        + ((riga.getDs_riga() != null) ? riga.getDs_riga() : String.valueOf(riga.getProgressivo_riga().longValue()))
                        + "\" perchè è in stato "
                        + riga.STATO_ANNULLATO
                        + ".";
            }
        }
    }
/**
 * Controlla le righe selezionate per la contabilizzazione
 * 
 *
 * @param selectedModels	
 * @throws ApplicationException	
 */
protected void controllaSelezione(java.util.Iterator selectedModels) throws it.cnr.jada.comp.ApplicationException {
//controlla le righe selezionate per la contabilizzazione
    if (selectedModels != null) {
        while (selectedModels.hasNext()) {
            Documento_generico_rigaBulk rigaSelected= (Documento_generico_rigaBulk) selectedModels.next();
            if (!Documento_generico_rigaBulk.STATO_INIZIALE.equals(rigaSelected.getStato_cofi()))
                throw new it.cnr.jada.comp.ApplicationException("Il dettaglio \"" + rigaSelected.getDs_riga() + "\" non può essere contabilizzato poiché è in stato " + rigaSelected.getStato_cofi() + ".");
            if (rigaSelected.getTerzo()==null || rigaSelected.getTerzo().getAnagrafico()==null)
                throw new it.cnr.jada.comp.ApplicationException("Il dettaglio \"" + rigaSelected.getDs_riga() + "\" non può essere contabilizzato poiché il suo terzo non e' valido");
			try {
				rigaSelected.validaDateCompetenza();
			} catch (ValidationException e) {
				throw new it.cnr.jada.comp.ApplicationException(e.getMessage());
			}
        }
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doAddToCRUD(ActionContext context, String tableName) {

    return super.doAddToCRUD(context, tableName);
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doAddToCRUDMain_Accertamenti(ActionContext context) {
    //imposta l'azione di aggiunta di una scadenza
    try {
        CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
        bp.getDettaglio().getSelection().clearSelection();
        fillModel(context);
        Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
        return basicDoRicercaAccertamento(context, doc, null);
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doAddToCRUDMain_Accertamenti_DettaglioAccertamenti(ActionContext context) {
    //imposta l'azione di aggiunta di un dettaglio ad una scadenza
    try {
        CRUDDocumentoGenericoAttivoBP bp =
            (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
        bp.getDettaglio().getSelection().clearSelection();
        fillModel(context);
        Accertamento_scadenzarioBulk scadenza =
            (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel();
        //controlla che sia stata selezionata una scadenza sulla quale si vuole aggiungere il dettaglio
        if (scadenza == null)
            throw new it.cnr.jada.comp.ApplicationException(
                "Selezionare l'accertamento a cui associare i dettagli.");

        //estrae solo le righe contabilizzabili, che abbiano anche il terzo della scadenza selezionata
        java.util.Vector selectedModels = new java.util.Vector();
        for (java.util.Enumeration e = bp.getDettaglio().getElements();
            e.hasMoreElements();
            ) {
            Documento_generico_rigaBulk riga =
                (Documento_generico_rigaBulk) e.nextElement();
            //se la scadenza ha un debitore di tipo diversi prendo tutte le righe in stato iniziale
            if (riga.STATO_INIZIALE.equals(riga.getStato_cofi())
	            && scadenza.getAccertamento().getDebitore().getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI))
         		selectedModels.add(riga);
         	else
         	//altrimenti prendo quelle in stato iniziale e con lo stesso terzo o di tipo diversi
            if (riga.STATO_INIZIALE.equals(riga.getStato_cofi())
                && riga.getTerzo() != null
                && riga.getTerzo().getCd_terzo() != null
                && (riga.getTerzo().getCd_terzo().equals(scadenza.getAccertamento().getCd_terzo())
                    || (riga.getAccertamento_scadenziario() != null
                        && riga
                            .getAccertamento_scadenziario()
                            .getAccertamento()
                            .getDebitore()
                            .getAnagrafico()
                            .getTi_entita()
                            .equals(AnagraficoBulk.DIVERSI)))
                || (riga.getTerzo().getAnagrafico() != null
                    && riga.getTerzo().getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI)))
                selectedModels.add(riga);
        }
        //controlla che ci sia almeno una riga non contabilizzata
        if (selectedModels.isEmpty())
            throw new it.cnr.jada.comp.ApplicationException(
                "Tutti i dettagli sono già stati contabilizzati oppure non sono compatibili i terzi.");
        //richiama il selezionatore con selezione multipla
        it.cnr.jada.util.action.SelezionatoreListaBP slbp =
            (it.cnr.jada.util.action.SelezionatoreListaBP) select(context,
                new it.cnr.jada.util.ListRemoteIterator(selectedModels),
                it.cnr.jada.bulk.BulkInfo.getBulkInfo(Documento_generico_rigaBulk.class),
                "righiSet",
                "doBringBackAddToCRUDMain_Accertamenti_DettaglioAccertamenti");
        slbp.setMultiSelection(true);
        return slbp;
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doAddToCRUDMain_Dettaglio(ActionContext context) {
    //imposta l'azione di aggiunta di un dettaglio (riga)
    try {

        it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        DocumentoGenericoComponentSession component= null;
        //controlla che il documento non sia pagato
        //forse è un controllo superfluo...
        if (documentoGenerico.getStato_cofi() != null && documentoGenerico.getStato_cofi().equals(documentoGenerico.STATO_PAGATO))
            throw new it.cnr.jada.comp.ApplicationException("Non è possibile inserire righe in un documento pagato");

        //per gli attivi... 
        if (documentoGenerico.isGenericoAttivo()) {
            //aggiunge la riga di dettaglio
             ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().add(context);
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
            //aggiorna le modalità di pagamento
            documentoGenerico=
                (Documento_genericoBulk) component.aggiornaModalita(
                    context.getUserContext(),
                    documentoGenerico,
                    (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().getModel(),
                    documentoGenerico.getTerzo_uo_cds());

            bp.setModel(context, documentoGenerico);

        } else {
            //aggiunge la riga di dettaglio
             ((CRUDDocumentoGenericoPassivoBP) bp).getDettaglio().add(context);
        }

        return context.findDefaultForward();
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doAddToCRUDMain_Obbligazioni(ActionContext context) {
    //aggiunge una scadenza dell'obbligazione
    try {
        CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
        bp.getDettaglio().getSelection().clearSelection();
        fillModel(context);
        Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
        //richiama il metodo che gestisce la ricerca
        return basicDoRicercaObbligazione(context, doc, null);
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doAddToCRUDMain_Obbligazioni_DettaglioObbligazioni(ActionContext context) {
    //imposta l'azione di aggiunta di un dettaglio ad una scadenza
    try {
        CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
        bp.getDettaglio().getSelection().clearSelection();
        fillModel(context);
        Obbligazione_scadenzarioBulk obbligazione= (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel();
        Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();

        //controlla che sia stata selezionata una scadenza sulla quale si vuole aggiungere il dettaglio
        if (doc.getDocumento_generico_obbligazioniHash() != null && doc.getDocumento_generico_obbligazioniHash().isEmpty() || obbligazione == null)
            throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno a cui associare i dettagli.");

        //estrae solo le righe contabilizzabili e con terzi associati
        java.util.Vector selectedModels= new java.util.Vector();
        for (java.util.Enumeration e= bp.getDettaglio().getElements(); e.hasMoreElements();) {
            Documento_generico_rigaBulk riga= (Documento_generico_rigaBulk) e.nextElement();
            //se la scadenza ha un creditore di tipo diversi prendo tutte le righe in stato iniziale
            if (riga.STATO_INIZIALE.equals(riga.getStato_cofi())
	            && obbligazione.getObbligazione().getCreditore().getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI))
         		selectedModels.add(riga);
         	else
         	//altrimenti prendo quelle in stato iniziale e con lo stesso terzo o di tipo diversi
            if (riga.STATO_INIZIALE.equals(riga.getStato_cofi())
                && riga.getTerzo() != null
                && riga.getTerzo().getCd_terzo() != null
                && (riga.getTerzo().getCd_terzo().equals(obbligazione.getObbligazione().getCd_terzo())
                    || (riga.getObbligazione_scadenziario()!=null && riga.getObbligazione_scadenziario().getObbligazione().getCreditore().getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI)))
                || (riga.getTerzo().getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI)))
                selectedModels.add(riga);
        }
        //controlla che ci sia almeno una riga non contabilizzata
        if (selectedModels.isEmpty())
            throw new it.cnr.jada.comp.ApplicationException("Tutti i dettagli sono già stati contabilizzati oppure non sono compatibili i terzi.");

        //richiama il selezionatore con selezione multipla
        it.cnr.jada.util.action.SelezionatoreListaBP slbp=
            (it.cnr.jada.util.action.SelezionatoreListaBP) select(context,
                new it.cnr.jada.util.ListRemoteIterator(selectedModels),
                it.cnr.jada.bulk.BulkInfo.getBulkInfo(Documento_generico_rigaBulk.class),
                "righiSet",
                "doBringBackAddToCRUDMain_Obbligazioni_DettaglioObbligazioni");
        slbp.setMultiSelection(true);
        return slbp;
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
* Inizializza i valori per il sospeso
* Creation date: (27/11/2001 17.04.56)
* @param context it.cnr.jada.action.ActionContext
* @param doc Documento_genericoBulk
* @return it.cnr.jada.action.Forward
*/
public Forward doBlankSearchSospeso(ActionContext context,
	Documento_genericoBulk doc) 
	throws java.rmi.RemoteException {
		
	try{
		Lettera_pagam_esteroBulk lettera = doc.getLettera_pagamento_estero();
		SospesoBulk vecchioSospeso = lettera.getSospeso();
		if (vecchioSospeso != null)
			lettera.addToSospesiCancellati(vecchioSospeso);
		
		SospesoBulk sospeso = new SospesoBulk();
		sospeso.setEsercizio(lettera.getEsercizio());
		if (!Utility.createParametriCnrComponentSession().getParametriCnr(context.getUserContext(),lettera.getEsercizio()).getFl_tesoreria_unica().booleanValue())
			sospeso.setCd_cds(lettera.getCd_cds());
		sospeso.setTi_entrata_spesa(sospeso.TIPO_SPESA);
		sospeso.setTi_sospeso_riscontro(sospeso.TI_SOSPESO);
		lettera.setSospeso(sospeso);
		java.math.BigDecimal zero = new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP);
		lettera.setIm_pagamento(zero);
		//lettera.setIm_commissioni(zero);
		//lettera.setDt_registrazione(new java.sql.Timestamp(System.currentTimeMillis()));
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		return context.findDefaultForward();

	} catch(Exception e) {
		return handleException(context,e);
	}
}
/**
* Inizializza i valori per il terzo
* Creation date: (27/11/2001 17.04.56)
* @param context it.cnr.jada.action.ActionContext
* @param doc Documento_genericoBulk
* @return it.cnr.jada.action.Forward
*/
public Forward doBlankSearchTerzo(ActionContext context, Documento_generico_rigaBulk documentoGenericoRiga) throws java.rmi.RemoteException {

    try {
        //inizializza il terzo
        basicDoResetTerzo(context, documentoGenericoRiga);

        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doBringBackAddToCRUDMain_Accertamenti_DettaglioAccertamenti(ActionContext context) {
//dopo la selezione di una scadenza si occupa di contabilizzare le righe associate
//e calcolare il totale su di questa
    try {
        HookForward fwd= (HookForward) context.getCaller();
        java.util.List selectedModels= (java.util.List) fwd.getParameter("selectedElements");
        if (selectedModels != null && !selectedModels.isEmpty()) {
            CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
            Accertamento_scadenzarioBulk accertamento= (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel();
            if (accertamento != null) {
                //if (accertamento.getAccertamento().getCd_terzo()!=((Documento_generico_rigaBulk)selectedModels.get(0)).getTerzo().getCd_terzo())
                //throw new it.cnr.jada.comp.ApplicationException("La riga selezionata ha un cliente diverso dall'accertamento");
                basicDoContabilizzaAccertamenti(context, accertamento, selectedModels);
                bp.setDirty(true);

            }
            doCalcolaTotalePerAccertamento(context, accertamento);
        }
        return context.findDefaultForward();
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doBringBackAddToCRUDMain_Obbligazioni_DettaglioObbligazioni(ActionContext context) {
//dopo la selezione di una scadenza si occupa di contabilizzare le righe associate
//e calcolare il totale su di questa
    try {
        HookForward fwd= (HookForward) context.getCaller();
        java.util.List selectedModels= (java.util.List) fwd.getParameter("selectedElements");
        if (selectedModels != null && !selectedModels.isEmpty()) {
            CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
            Obbligazione_scadenzarioBulk obbligazione= (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel();
            if (obbligazione != null) {
                basicDoContabilizza(context, obbligazione, selectedModels);
                bp.setDirty(true);

            }
            doCalcolaTotalePerObbligazione(context, obbligazione);
        }
        return context.findDefaultForward();
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce una richiesta di assegnamento al crudtool "crea_terzo"
 *
 * @param context	L'ActionContext della richiesta
 * @param documentoGenericoRiga	
 * @param terzo	
 * @return Il Forward alla pagina di risposta
 * @throws RemoteException	Se si verifica qualche eccezione di sistema per cui non è possibile effettuare l'operazione
 */
public Forward doBringBackCRUDCrea_terzo(ActionContext context, Documento_generico_rigaBulk documentoGenericoRiga, TerzoBulk terzo) throws java.rmi.RemoteException {
//controlla il terzo dopo averlo riportato dall'anagrafica
    try {

        return doBringBackSearchTerzo(context, documentoGenericoRiga, terzo);

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackCRUDTerzo(ActionContext context, Documento_generico_rigaBulk documentoGenericoRiga, TerzoBulk terzo) throws java.rmi.RemoteException {
    return doBringBackCRUDCrea_terzo(context, documentoGenericoRiga, terzo);
}
/**
 * Gestisce un operazione bringback sull'accertamento
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doBringBackOpenAccertamentoWindow(ActionContext context) {
//gestisce un operazione bringback sull'accertamento
    HookForward caller= (HookForward) context.getCaller();
    Accertamento_scadenzarioBulk accertamento= (Accertamento_scadenzarioBulk) caller.getParameter("bringback");
    if (accertamento != null) {
        try {
            basicDoBringBackOpenAccertamentiWindow(context, accertamento);

            CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
            bp.getAccertamentiController().reset(context);
            bp.getAccertamentiController().setModelIndex(context, it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(bp.getAccertamentiController().getDetails(), accertamento));

            doCalcolaTotalePerAccertamento(context, (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel());

            bp.setDirty(true);
        } catch (Throwable t) {
            return handleException(context, t);
        }
    }
    return context.findDefaultForward();
}
/**
 * Gestisce un operazione bringback sull'obbligazione
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doBringBackOpenObbligazioniWindow(ActionContext context) {
//gestisce un operazione bringback sull'obbligazione

    HookForward caller= (HookForward) context.getCaller();
    Obbligazione_scadenzarioBulk obblig= (Obbligazione_scadenzarioBulk) caller.getParameter("bringback");
    if (obblig != null) {
        try {
            basicDoBringBackOpenObbligazioniWindow(context, obblig);

            CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
            bp.getObbligazioniController().reset(context);
            bp.getObbligazioniController().setModelIndex(context, it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(bp.getObbligazioniController().getDetails(), obblig));

            doCalcolaTotalePerObbligazione(context, (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel());

            bp.setDirty(true);
        } catch (Throwable t) {
            return handleException(context, t);
        }
    }
    return context.findDefaultForward();
}
/**
 * Gestisce il comando di rimozione di un dettaglio su un CRUDController
 * figlio del ricevente
 */
public Forward doBringBackRemoveToCRUDMain_Dettaglio(ActionContext context) {
//rimozione di un dettaglio
    try {
        HookForward fwd= (HookForward) context.getCaller();
        java.util.List selectedModels= (java.util.List) fwd.getParameter("selectedElements");
        if (selectedModels != null && !selectedModels.isEmpty()) {
            CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
            Obbligazione_scadenzarioBulk obbligazione= (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel();
            if (obbligazione != null) {
                basicDoContabilizza(context, obbligazione, selectedModels);
                bp.setDirty(true);
            }
            doCalcolaTotalePerObbligazione(context, obbligazione);
        }
        return context.findDefaultForward();
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce una richiesta di ricerca del searchtool "listabanche"
 *
 * @param context	L'ActionContext della richiesta
 * @param documentoGenericoRiga	L'OggettoBulk padre del searchtool
 * @param banca	L'OggettoBulk selezionato dall'utente
 * @return Il Forward alla pagina di risposta
 * @throws RemoteException	Se si verifica qualche eccezione di sistema per cui non è possibile effettuare l'operazione
 */
public Forward doBringBackSearchListabanche(ActionContext context, Documento_generico_rigaBulk documentoGenericoRiga, BancaBulk banca) throws java.rmi.RemoteException {
//imposta la banca selezionata
    try {
    	fillModel(context);
		it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
		DocumentoGenericoComponentSession component= null;

		Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
		if (!documentoGenerico.isGenericoAttivo()) {
			component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
		} else {
			component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
		}

	    if (banca != null) {//per attivi la banca è quella sulla uo
	        if (documentoGenericoRiga.getDocumento_generico().isGenericoAttivo()) {
	            documentoGenericoRiga.setBanca_uo_cds(banca);
	        } else
	        //per passivi è quella del terzo
	            documentoGenericoRiga.setBanca(banca);
	        	documentoGenericoRiga.setCessionario(component.findCessionario(context.getUserContext(), documentoGenericoRiga));
	    }
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce una richiesta di ricerca del searchtool "sospeso"
 *
 * @param context	L'ActionContext della richiesta
 * @param doc	L'OggettoBulk padre del searchtool
 * @param sospesoTrovato	L'OggettoBulk selezionato dall'utente
 * @return Il Forward alla pagina di risposta
 * @throws RemoteException	Se si verifica qualche eccezione di sistema per cui non è possibile effettuare l'operazione
 */
public Forward doBringBackSearchSospeso(ActionContext context,
	Documento_genericoBulk doc,
	SospesoBulk sospesoTrovato) 
	throws java.rmi.RemoteException {
		
	try{
		Lettera_pagam_esteroBulk lettera = doc.getLettera_pagamento_estero();
		if (sospesoTrovato!=null && lettera != null) {
			lettera.removeFromSospesiCancellati(sospesoTrovato);
			lettera.setSospeso(sospesoTrovato);
			lettera.setIm_pagamento(sospesoTrovato.getIm_sospeso());
			//lettera.setDt_registrazione(sospesoTrovato.getDt_registrazione());
			((CRUDBP)context.getBusinessProcess()).setDirty(true);
		}
		return context.findDefaultForward();

	} catch(Exception e) {
		return handleException(context,e);
	}
}
/**
 * Gestisce una richiesta di ricerca del searchtool "terzo"
 *
 * @param context	L'ActionContext della richiesta
 * @param documentoGenericoRiga	L'OggettoBulk padre del searchtool
 * @param terzo	L'OggettoBulk selezionato dall'utente
 * @return Il Forward alla pagina di risposta
 * @throws RemoteException	Se si verifica qualche eccezione di sistema per cui non è possibile effettuare l'operazione
 */
public Forward doBringBackSearchTerzo(ActionContext context, Documento_generico_rigaBulk documentoGenericoRiga, TerzoBulk terzo) throws java.rmi.RemoteException {
//effettua una serie di controlli di validazione del terzo selezionato
//che può essere o da ricerca o da riporta dell'anagrafica
    try {
        if (terzo != null) {
            //inizializza il terzo
            basicDoResetTerzo(context, documentoGenericoRiga);
            //if (!documentoGenericoRiga.getDocumento_generico().isGenericoAttivo()) {
            //if (terzo.getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI) || terzo.getTi_terzo().equals(TerzoBulk.CREDITORE)) {
            //throw new it.cnr.jada.comp.ApplicationException("Il terzo selezionato non è un debitore");
            //}
            //} else if (terzo.getAnagrafico().getTi_entita().equals(AnagraficoBulk.DIVERSI) || terzo.getTi_terzo().equals(TerzoBulk.DEBITORE)) {
            //throw new it.cnr.jada.comp.ApplicationException("Il terzo selezionato non è un creditore");
            //}
            
            //per passivi controlla che non siano 'creditori'
            if (!documentoGenericoRiga.getDocumento_generico().isGenericoAttivo()) {
                if (terzo.getTi_terzo().equals(TerzoBulk.DEBITORE)) {
                    throw new it.cnr.jada.comp.ApplicationException("Il terzo selezionato non può essere un debitore");
                }            
            //per attivi controlla che non siano 'debitori'
            } else if (terzo.getTi_terzo().equals(TerzoBulk.CREDITORE)) {
                throw new it.cnr.jada.comp.ApplicationException("Il terzo selezionato non può essere un creditore");
            }

            //il terzo selezionato ha la data di fine rapporto antecedente alla data di registrazione
            if (terzo.getDt_fine_rapporto() != null
                && documentoGenericoRiga.getDocumento_generico().getData_registrazione() != null
                && terzo.getDt_fine_rapporto().before(documentoGenericoRiga.getDocumento_generico().getData_registrazione()))
                throw new it.cnr.jada.comp.ApplicationException("Attenzione, il terzo selezionato ha la data di fine rapporto antecedente alla data di registrazione");

            // richiama il component per il generico attivo o il passivo
            it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
            Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
            DocumentoGenericoComponentSession component= null;
            if (!documentoGenerico.isGenericoAttivo())
                component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
            else
                component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();

            //gestisce i valori da inserire dalla component
            documentoGenerico= (Documento_genericoBulk) component.completaTerzo(context.getUserContext(), documentoGenerico, documentoGenericoRiga, terzo);
            bp.setModel(context, documentoGenerico);
        }

        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
/**
 *calcola il totale dei dettagli per la scadenza selezionata
 *il valore è visualizzato del tab accertamento/obbligazioni
 *e viene preso come riferimento per l'aggiornamento in automatico
 *
 * @param context	L'ActionContext della richiesta
 * @param accertamento	
 * @return Il Forward alla pagina di risposta
 */
public Forward doCalcolaTotalePerAccertamento(ActionContext context, it.cnr.contab.doccont00.core.bulk.Accertamento_scadenzarioBulk accertamento) {
//calcola il totale dei dettagli per la scadenza selezionata
//il valore è visualizzato del tab accertamento/obbligazioni
//e viene preso come riferimento per l'aggiornamento in automatico

    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
    if (documentoGenerico.getDocumento_generico_accertamentiHash() != null)
        try {
	        //utilizza il metodo calcolaTotaleSelezionati
            documentoGenerico.setImportoTotalePerAccertamento(calcolaTotaleSelezionati((java.util.List) documentoGenerico.getDocumento_generico_accertamentiHash().get(accertamento)));
        } catch (it.cnr.jada.comp.ApplicationException e) {
	        //imposta 0
            documentoGenerico.setImportoTotalePerAccertamento(new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP));
        }
    return context.findDefaultForward();
}
/**
 *Calcola il totale dei dettagli per la scadenza selezionata
 *il valore è visualizzato del tab accertamento/obbligazioni
 *e viene preso come riferimento per l'aggiornamento in automatico
 *
 * @param context	L'ActionContext della richiesta
 * @param obbligazione	
 * @return Il Forward alla pagina di risposta
 */
public Forward doCalcolaTotalePerObbligazione(ActionContext context, it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk obbligazione) {
//calcola il totale dei dettagli per la scadenza selezionata
//il valore è visualizzato del tab accertamento/obbligazioni
//e viene preso come riferimento per l'aggiornamento in automatico

    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
    if (documentoGenerico.getDocumento_generico_obbligazioniHash() != null)
        try {
            documentoGenerico.setImportoTotalePerObbligazione(calcolaTotaleSelezionati((java.util.List) documentoGenerico.getDocumento_generico_obbligazioniHash().get(obbligazione)));
        } catch (it.cnr.jada.comp.ApplicationException e) {
            documentoGenerico.setImportoTotalePerObbligazione(new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP));
        }
    return context.findDefaultForward();
}
/**
 * Calcola i totali di riga
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doCalcolaTotaliDiRiga(ActionContext context) {

    // richiama il component per il generico attivo o il passivo
    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    DocumentoGenericoComponentSession component= null;
    Documento_generico_rigaBulk riga= null;
    Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
    try {
        //DivisaBulk divisa= documentoGenerico.getValuta();
        fillModel(context);

        if (!documentoGenerico.isGenericoAttivo()) {
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
            riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoPassivoBP) bp).getDettaglio().getModel();
        } else {
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
            riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().getModel();
        }
        //imposta la valuta

        if (riga.getIm_riga_divisa()==null)
        	riga.setIm_riga_divisa(new BigDecimal(0));

        //richiama il metodo del bulk per il calcolo del totale
        //java.math.BigDecimal pu= riga.getIm_riga();
        riga.calcolaCampiDiRiga();

        //chiama i metodi dove vengono calcolati i totali per le obbl/acc
        //if (!documentoGenerico.isGenericoAttivo()) {
            //doSelectObbligazioni(context);
        //} else {
            //doSelectAccertamenti(context);
        //}
        documentoGenerico=(Documento_genericoBulk)component.calcoloConsuntivi(context.getUserContext(),documentoGenerico);
        bp.setModel(context, documentoGenerico);
        fillModel(context);

    } catch (Throwable e) {
        return handleException(context, e);
    }
    return context.findDefaultForward();
}
/**
 * Viene richiamato nel momento in cui si seleziona una valuta dal combo Valuta nella 
 * testata del documento.
 * Richiama a sua volta il metodo cercaCambio dalla component.
 */
public Forward doCambiaDataPagamento(ActionContext context) {
    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    java.sql.Timestamp dataPagamentoOld= ((Documento_genericoBulk) bp.getModel()).getData_registrazione();

    try {
        // richiama il component per il generico attivo o il passivo
        DocumentoGenericoComponentSession component= null;

        fillModel(context);

        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        java.sql.Timestamp dataPagamento= documentoGenerico.getData_registrazione();
        if (dataPagamento == null) {
            documentoGenerico.setData_registrazione(dataPagamentoOld);
            throw new it.cnr.jada.comp.ApplicationException("Inserire una data di registrazione valida!");
        }

        //controlla se esiste un cambio relativo alla data di registrazione del documento generico
        if (dataPagamento != null && !dataPagamento.equals(documentoGenerico.getInizio_validita_valuta()) && !dataPagamento.equals(documentoGenerico.getFine_validita_valuta())) {
            if (documentoGenerico.getInizio_validita_valuta() == null
                || documentoGenerico.getFine_validita_valuta() == null
                || !(dataPagamento.after(documentoGenerico.getInizio_validita_valuta()) && dataPagamento.before(documentoGenerico.getFine_validita_valuta()))) {
                try {
                    if (!documentoGenerico.isGenericoAttivo())
                        component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
                    else
                        component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();

                    documentoGenerico= component.cercaCambio(context.getUserContext(), documentoGenerico);
                    return context.findDefaultForward();
                } catch (Throwable e) {
                    ((Documento_genericoBulk) bp.getModel()).setData_registrazione(dataPagamentoOld);
                    return handleException(context, e);
                }
            }
        }

        //controlla che sulle righe siano impostati terzi con data fine rapporto valide
        if (dataPagamento != null && !documentoGenerico.getDocumento_generico_dettColl().isEmpty()) {
            for (java.util.Iterator i= documentoGenerico.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
                Documento_generico_rigaBulk riga= (Documento_generico_rigaBulk) i.next();
                if (riga.getTerzo().getDt_fine_rapporto() != null && riga.getTerzo().getDt_fine_rapporto().before(documentoGenerico.getData_registrazione())) {
                    documentoGenerico.setData_registrazione(dataPagamentoOld);
                    throw new it.cnr.jada.comp.ApplicationException(
                        "La data di registrazione non è valida poiche' il terzo impostato per " + ((riga.getDs_riga() == null) ? "una riga" : "la riga '" + riga.getDs_riga() + "'") + " ha una data fine rapporto precedente");
                }
            }
        }

        return context.findDefaultForward();
    } catch (Throwable e) {
        ((Documento_genericoBulk) bp.getModel()).setData_registrazione(dataPagamentoOld);
        return handleException(context, e);
    }

}
/**
 * Crea e imposta la lettera di pagamento estero
 */ 
public Forward doCancellaLettera(ActionContext context) {

	try {
		fillModel(context);
		CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
		Documento_genericoBulk model = (Documento_genericoBulk)bp.getModel();
		if (model != null) {
			if (model.getLettera_pagamento_estero() == null)
				return handleException(
							context,
							new it.cnr.jada.comp.ApplicationException("Lettera di pagamento estero NON presente!"));

			Lettera_pagam_esteroBulk lettera = model.getLettera_pagamento_estero();
			int status = lettera.getCrudStatus();
			if (status == OggettoBulk.UNDEFINED || status == OggettoBulk.TO_BE_CREATED) {
				model.setLettera_pagamento_estero(null);
			
			} else {
				model = ((DocumentoGenericoComponentSession)bp.createComponentSession()).eliminaLetteraPagamentoEstero(context.getUserContext(), model);
				bp.setModel(context, model);
			}
		}
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
/**
 * 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 {

	//per spesa
	if (context.getBusinessProcess() instanceof CRUDDocumentoGenericoPassivoBP){
		CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
		if (bp instanceof IDocumentoAmministrativoSpesaBP && ((IDocumentoAmministrativoSpesaBP)bp).isSpesaBP())
			return basicDoCerca(context);
	}
	return super.doCerca(context);
}
/**
 * Contabilizza gli accertamenti
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doContabilizzaAccertamenti(ActionContext context) {

    HookForward caller= (HookForward) context.getCaller();
    Accertamento_scadenzarioBulk scadenza= (Accertamento_scadenzarioBulk) caller.getParameter("accertamentoSelezionato");
    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();
    java.util.List selectedModels= null;
    try {
        selectedModels= bp.getDettaglio().getSelectedModels(context);
        bp.getDettaglio().getSelection().clearSelection();
    } catch (Throwable e) {
    }

    if (scadenza != null) {
        try {
	        Documento_genericoBulk doc = (Documento_genericoBulk)bp.getModel();
			Accertamento_scadenzarioBulk accertamento = null;
			AccertamentiTable accHash = doc.getAccertamentiHash();
			if (accHash != null && !accHash.isEmpty())
				accertamento = accHash.getKey(scadenza);
			if (accertamento != null && scadenza.getAccertamento().isTemporaneo()) {
				java.util.Vector models = ((java.util.Vector)accHash.get(accertamento));
				java.util.Vector clone = (java.util.Vector)models.clone();
				if (!clone.isEmpty()) {
					scollegaDettagliDaAccertamento(context, clone);
					clone.addAll(selectedModels);
					basicDoContabilizzaAccertamenti(context, scadenza, selectedModels);
				} else {
					accHash.remove(accertamento);
					basicDoContabilizzaAccertamenti(context, scadenza, selectedModels);
				}
			} else {
				basicDoContabilizzaAccertamenti(context, scadenza, selectedModels);
			}            
        } catch (it.cnr.jada.comp.ComponentException e) {
            return handleException(context, e);
        }
        bp.getAccertamentiController().getSelection().clear();
        bp.getAccertamentiController().setModelIndex(context, -1);
        bp.getAccertamentiController().setModelIndex(context, it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(bp.getAccertamentiController().getDetails(), scadenza));

        bp.setDirty(true);
        if (!"tabDocumentoGenericoAccertamenti".equals(bp.getTab("tab")))
            bp.setTab("tab", "tabDocumentoGenericoAccertamenti");
    }
    return context.findDefaultForward();
}
/**
 * Contabilizza le obbligazioni
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doContabilizzaObbligazioni(ActionContext context) {

	HookForward caller = (HookForward) context.getCaller();
	Obbligazione_scadenzarioBulk scadenza =
		(Obbligazione_scadenzarioBulk) caller.getParameter("obbligazioneSelezionata");
	CRUDDocumentoGenericoPassivoBP bp =
		(CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
	java.util.List selectedModels = null;
	try {
		selectedModels = bp.getDettaglio().getSelectedModels(context);
		bp.getDettaglio().getSelection().clearSelection();
	} catch (Throwable e) {
	}
	if (scadenza != null) {
		try {
			Documento_genericoBulk doc = (Documento_genericoBulk) bp.getModel();
			Obbligazione_scadenzarioBulk obbligazione = null;
			/***** Correzzione Err. 823 - Borriello Gennaro *****/
			if (bp.isEditing()) {
				java.util.Enumeration e = doc.getDocumentiContabiliCancellati().elements();
				while (e.hasMoreElements()) {
					Obbligazione_scadenzarioBulk scad_cancellata =
						(Obbligazione_scadenzarioBulk) e.nextElement();
					if (scad_cancellata.equalsByPrimaryKey(scadenza)) {
						return handleException(
							context,
							new it.cnr.jada.bulk.ValidationException(
								"Attenzione: Operazione non consentita.\nLa scadenza selezionata è stata precedentemente scollegata da questo documento."));
					}
				}
			}
			/****************************************************/
			ObbligazioniTable obbHash = doc.getObbligazioniHash();
			if (obbHash != null && !obbHash.isEmpty())
				obbligazione = obbHash.getKey(scadenza);
			if (obbligazione != null && obbligazione.getObbligazione().isTemporaneo()) {
				java.util.Vector models = ((java.util.Vector) obbHash.get(obbligazione));
				java.util.Vector clone = (java.util.Vector) models.clone();
				if (!clone.isEmpty()) {
					scollegaDettagliDaObbligazione(context, clone);
					clone.addAll(selectedModels);
					basicDoContabilizza(context, scadenza, clone);
				} else {
					obbHash.remove(obbligazione);
					basicDoContabilizza(context, scadenza, selectedModels);
				}
			} else {
				basicDoContabilizza(context, scadenza, selectedModels);
			}
		} catch (it.cnr.jada.comp.ComponentException e) {
			return handleException(context, e);
		}
		bp.getObbligazioniController().getSelection().clear();
		bp.getObbligazioniController().setModelIndex(context, -1);
		bp.getObbligazioniController().setModelIndex(
			context,
			it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(
				bp.getObbligazioniController().getDetails(),
				scadenza));

		bp.setDirty(true);
		if (!"tabDocumentoGenericoObbligazioni".equals(bp.getTab("tab")))
			bp.setTab("tab", "tabDocumentoGenericoObbligazioni");
	}
	return context.findDefaultForward();
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */ 
public Forward doCreaLettera(ActionContext context) {

	try {
		fillModel(context);
		CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
		Documento_genericoBulk model = (Documento_genericoBulk)bp.getModel();
		if (model != null) {
			if (model.getLettera_pagamento_estero() == null) {
				Lettera_pagam_esteroBulk lettera = new Lettera_pagam_esteroBulk(
															model.getCd_cds(),
											 				model.getCd_unita_organizzativa(),
															it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext()),
															null);
				lettera.completeFrom(context);
				lettera.setToBeCreated();
				model.setLettera_pagamento_estero(lettera);
				//Annullo la selezione sul fondo economale nel caso in cui venga
				//creata la lettera 1210
				model.setStato_pagamento_fondo_eco(model.NO_FONDO_ECO);
			} else {
				return handleException(
							context,
							new it.cnr.jada.comp.ApplicationException("La lettera per il pagamento estero è già stata creata!"));
			}
		}
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doDisassociaLettera(ActionContext context) {

	try {
		fillModel(context);
			CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
			Documento_genericoBulk model = (Documento_genericoBulk)bp.getModel();
			CNRUserInfo ui = (CNRUserInfo)context.getUserInfo();
			UtenteBulk utente = ui.getUtente();
			if (utente.isSupervisore()){
				if (model != null) {
					if (model.getLettera_pagamento_estero() != null) {
						model = ((DocumentoGenericoComponentSession)bp.createComponentSession()).eliminaLetteraPagamentoEstero(context.getUserContext(), model,false);
						bp.setModel(context, model);
					}
				}
			}else throw new it.cnr.jada.comp.ApplicationException("Utente non abilitato!");
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doElimina(ActionContext context) throws java.rmi.RemoteException {

    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();

    if (!documentoGenerico.isGenericoAttivo()) {

        try {
            fillModel(context);

            if (!bp.isEditing()) {
                bp.setMessage("Non è possibile cancellare in questo momento");
            } else {
                bp.delete(context);
                bp.commitUserTransaction();
                if (documentoGenerico.isVoidable()) {
                    bp.setMessage("Annullamento effettuato.");
                    bp.edit(context, bp.getModel());
                } else {
                    bp.reset(context);
                    bp.setMessage("Cancellazione effettuata.");
                }
            }
            return context.findDefaultForward();
        } catch (Throwable e) {
            try {
                bp.rollbackUserTransaction();
                bp.edit(context, bp.getModel());
            } catch (it.cnr.jada.action.BusinessProcessException ex) {
                return handleException(context, ex);
            }
            return handleException(context, e);
        }
    } else if (documentoGenerico.isGenericoAttivo()) {
        try {
            fillModel(context);

            if (!bp.isEditing()) {
                bp.setMessage("Non è possibile cancellare in questo momento");
            } else {
                bp.delete(context);
                bp.commitUserTransaction();
                if (documentoGenerico.isVoidable()) {
                    bp.setMessage("Annullamento effettuato.");
                    bp.edit(context, bp.getModel());
                } else {
                    bp.reset(context);
                    bp.setMessage("Cancellazione effettuata.");
                }
            }
            return context.findDefaultForward();

        } catch (Throwable e) {
            try {
                bp.rollbackUserTransaction();
                bp.edit(context, bp.getModel());
            } catch (it.cnr.jada.action.BusinessProcessException ex) {
                return handleException(context, ex);
            }
            return handleException(context, e);
        }
    }
    return context.findDefaultForward();
}
/**
 * Modifica le scadenze in automatico
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @param prefix	
 * @return Il Forward alla pagina di risposta
 */
public Forward doModificaScadenzaInAutomatico(ActionContext context, String prefix) {

    try {
        fillModel(context);
        it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        DocumentoGenericoComponentSession component= null;
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();

        if (!documentoGenerico.isGenericoAttivo()) {
            if (documentoGenerico.getTipo_documento() != null && documentoGenerico.getTipo_documento().getFl_solo_partita_giro().booleanValue())
                throw new it.cnr.jada.comp.ApplicationException("Operazione non consentita per generici solo su partite di giro");

            if (documentoGenerico.isPassivo_ente())
                throw new it.cnr.jada.comp.ApplicationException("Impossibile modificare in automatico per generici passivi su ente!");
            Obbligazione_scadenzarioBulk scadenza= (Obbligazione_scadenzarioBulk) ((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController().getModel();
            if (scadenza == null)
                throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno da modificare in automatico!");
            java.math.BigDecimal importoScadenza=
                getImportoPerAggiornamentoScadenzaObbligazioniInAutomatico(context, scadenza, documentoGenerico, new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP));

            java.util.Vector righeAssociate= (java.util.Vector) documentoGenerico.getDocumento_generico_obbligazioniHash().get(scadenza);
            if (righeAssociate == null || righeAssociate.isEmpty())
                throw new it.cnr.jada.comp.ApplicationException("Associare dei dettagli prima di aggiornare in automatico la scadenza dell'impegno!");

            if (!scadenza.getIm_scadenza().setScale(2).equals(importoScadenza)) {

                it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession h= it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);
                scadenza=
                    (Obbligazione_scadenzarioBulk) h.modificaScadenzaInAutomatico(
                        context.getUserContext(),
                        scadenza,
                        getImportoPerAggiornamentoScadenzaObbligazioniInAutomatico(context, scadenza, documentoGenerico, new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP)),
                        false);
                documentoGenerico.addToDefferredSaldi(scadenza.getObbligazione(), scadenza.getObbligazione().getSaldiInfo());
                Forward fwd= basicDoBringBackOpenObbligazioniWindow(context, scadenza);

                ((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController().getSelection().clear();
                ((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController().setModelIndex(context, -1);
                ((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController().setModelIndex(
                    context,
                    it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController().getDetails(), scadenza));
                ((CRUDDocumentoGenericoPassivoBP) bp).setDirty(true);
                return fwd;
            } else
                throw new it.cnr.jada.comp.ApplicationException("La scadenza non ha bisogno di essere aggiornata!");

        } else {
            Accertamento_scadenzarioBulk scadenza= (Accertamento_scadenzarioBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getAccertamentiController().getModel();
            if (scadenza == null)
                throw new it.cnr.jada.comp.ApplicationException("Selezionare l'accertamento da modificare in automatico!");
            if (documentoGenerico.isFlagEnte() && Numerazione_doc_contBulk.TIPO_ACR_RES.equalsIgnoreCase(scadenza.getAccertamento().getCd_tipo_documento_cont()))
                throw new it.cnr.jada.comp.ApplicationException("Impossibile modificare in automatico documenti contabili di tipo \"accertamenti residui\"!");
            java.math.BigDecimal importoScadenza=
                getImportoPerAggiornamentoScadenzaAccertamentiInAutomatico(context, scadenza, documentoGenerico, new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP));
            java.util.Vector righeAssociate= (java.util.Vector) documentoGenerico.getDocumento_generico_accertamentiHash().get(scadenza);
            if (righeAssociate == null || righeAssociate.isEmpty())
                throw new it.cnr.jada.comp.ApplicationException("Associare dei dettagli prima di aggiornare in automatico la scadenza dell'accertamento!");

            if (!scadenza.getIm_scadenza().setScale(2).equals(importoScadenza)) {
                it.cnr.contab.doccont00.ejb.AccertamentoAbstractComponentSession h= it.cnr.contab.doccont00.bp.CRUDVirtualAccertamentoBP.getVirtualComponentSession(context, true);
                scadenza=
                    (Accertamento_scadenzarioBulk) h.modificaScadenzaInAutomatico(
                        context.getUserContext(),
                        scadenza,
                        getImportoPerAggiornamentoScadenzaAccertamentiInAutomatico(context, scadenza, documentoGenerico, new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP)),
                        false);
                documentoGenerico.addToDefferredSaldi(scadenza.getAccertamento(), scadenza.getAccertamento().getSaldiInfo());
                Forward fwd= basicDoBringBackOpenAccertamentiWindow(context, scadenza);

                ((CRUDDocumentoGenericoAttivoBP) bp).getAccertamentiController().getSelection().clear();
                ((CRUDDocumentoGenericoAttivoBP) bp).getAccertamentiController().setModelIndex(
                    context,
                    it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(((CRUDDocumentoGenericoAttivoBP) bp).getAccertamentiController().getDetails(), scadenza));
                ((CRUDDocumentoGenericoAttivoBP) bp).setDirty(true);
                return fwd;

            } else
                throw new it.cnr.jada.comp.ApplicationException("La scadenza non ha bisogno di essere aggiornata!");
        }
    } catch (Exception e) {
        return handleException(context, e);
    }
}
/**
 * Viene richiamato nel momento in cui si seleziona una valuta dal combo Valuta nella 
 * testata deli documenti generici passivi.
 * Richiama a sua volta il metodo cercaCambio dalla component.
 */
public Forward doOnChangeModified(ActionContext context) {
    try {
        CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        //it.cnr.jada.bulk.PrimaryKeyHashtable vecchiTotali= new it.cnr.jada.bulk.PrimaryKeyHashtable();
        //for (java.util.Iterator i= doc.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
            //Documento_generico_rigaBulk dettaglio= (Documento_generico_rigaBulk) i.next();
            ////java.math.BigDecimal vecchioTotale= dettaglio.getIm_imponibile().add(dettaglio.getIm_iva());
            ////vecchioTotale= vecchioTotale.add(dettaglio.getIm_totale_addebiti());
            ////vecchiTotali.put(dettaglio, vecchioTotale);
        //}
        BigDecimal vecchioCambio=documentoGenerico.getCambio();
        fillModel(context);
        BigDecimal cambioAttuale = documentoGenerico.getCambio();
        if (cambioAttuale == null)
        	documentoGenerico.setCambio((cambioAttuale = new java.math.BigDecimal(0)));
        cambioAttuale = cambioAttuale.setScale(4,BigDecimal.ROUND_HALF_UP);
        documentoGenerico.setCambio(cambioAttuale);
        if (cambioAttuale.compareTo(new java.math.BigDecimal(0))==0){
        	documentoGenerico.setCambio(vecchioCambio);
        	throw new it.cnr.jada.comp.ApplicationException("Non è stato inserito un cambio valido (>0)");
        }
        documentoGenerico= basicCalcolaTotale(context);
        bp.setModel(context, documentoGenerico);
    } catch (Throwable t) {
        return handleException(context, t);
    }
    return context.findDefaultForward();
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */ 
public Forward doOnCheckDisponibilitaCassaFailed(
	ActionContext context,
	int option) {

	if (option == it.cnr.jada.util.action.OptionBP.OK_BUTTON) {
		CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)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 if (bp.isCarryingThrough())
				doRiportaAvanti(context);
			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){
    	it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        try 
        {
            boolean modified = fillModel(context);
            OptionRequestParameter userConfirmation = new OptionRequestParameter();
            userConfirmation.setCheckDisponibilitaContrattoRequired(Boolean.FALSE);
            if (documentoGenerico.isGenericoAttivo()){
            	((CRUDDocumentoGenericoAttivoBP)bp).setUserConfirm(userConfirmation);
            	if (bp.isBringBack())
            		doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
  				else if (((CRUDDocumentoGenericoAttivoBP)bp).isCarryingThrough())
  					doRiportaAvanti(context);
  				else
  					doSalva(context);
            }else{
              ((CRUDDocumentoGenericoPassivoBP)bp).setUserConfirm(userConfirmation);
              if (bp.isBringBack())
            	  doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
              else if (((CRUDDocumentoGenericoPassivoBP)bp).isCarryingThrough())
            	  doRiportaAvanti(context);
              else
            	  doSalva(context);              
            }
        } 
        catch(Throwable e){
            return handleException(context,e);
        }
    }
    return context.findDefaultForward();
}

/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */

public Forward doOnFlagEnteChange(ActionContext context) {

    try {
        fillModel(context);

        //to be modify
        it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        DocumentoGenericoComponentSession component= null;
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        if (documentoGenerico.isGenericoAttivo())
	        component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
	    else
	    	component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();

	    if (documentoGenerico.getTipo_documento()!=null &&
		    documentoGenerico.getTipo_documento().getFl_solo_partita_giro().booleanValue()){
			documentoGenerico.setFlagEnte(false);
			throw new it.cnr.jada.comp.ApplicationException("Non è possibile generare dei documenti generici su ente per il tipo selezionato");
	    	//return context.findDefaultForward();
		}
        if (documentoGenerico.isFlagEnte()
            && ((documentoGenerico.isGenericoAttivo()
                && (documentoGenerico.getAccertamentiHash() == null || documentoGenerico.getAccertamentiHash().isEmpty()))
                || (!documentoGenerico.isGenericoAttivo()
                && (documentoGenerico.getObbligazioniHash() == null || documentoGenerico.getObbligazioniHash().isEmpty())))) {
            documentoGenerico= component.setEnte(context.getUserContext(), documentoGenerico);
            documentoGenerico.setPassivo_ente(true);
        } else {
            documentoGenerico.setCd_cds(documentoGenerico.getCd_cds_origine());
            documentoGenerico.setCd_unita_organizzativa(documentoGenerico.getCd_uo_origine());
            documentoGenerico.setFlagEnte(false);
            documentoGenerico.setPassivo_ente(false);
        }
        bp.setModel(context, documentoGenerico);
    } catch (Throwable t) {
        return handleException(context, t);
    }
    return context.findDefaultForward();
}
/**
 * Gestisce il cambiamento del tipo sezionale ricaricandoli
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
 
public Forward doOnIstituzionaleCommercialeChange(ActionContext context) {

	try {
		//CRUDBP bp = (CRUDBP)getBusinessProcess(context);
		fillModel( context );		
		return context.findDefaultForward();
	} catch (Throwable t) {
		return handleException(context, t);
	}
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */

public Forward doOnModalitaPagamentoChange(ActionContext context) {

	try {
		fillModel(context);
		it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
		DocumentoGenericoComponentSession component= null;
		Documento_generico_rigaBulk riga= null;
		Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
		if (!documentoGenerico.isGenericoAttivo()) {
			component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
			riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoPassivoBP) bp).getDettaglio().getModel();
		} else {
			component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
			riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().getModel();
		}

		//visualizza la prima banca della lista
		if (riga.getModalita_pagamento() != null) {
			java.util.Collection coll= component.findListabanche(context.getUserContext(), riga);
			riga.setBanca(getBancaDefaultForCdsFrom(context, riga, coll));
			riga.setCessionario(component.findCessionario(context.getUserContext(), riga));
		} else
			riga.setBanca(null);

		bp.setModel(context, documentoGenerico);
	} catch (Throwable t) {
		return handleException(context, t);
	}
	
	return context.findDefaultForward();
}
    /**
     * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
     * figlio del ricevente
     */

    public Forward doOnModalitaPagamentoUOCDSChange(ActionContext context) {

        try {
            fillModel(context);
            it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
            DocumentoGenericoComponentSession component= null;
            Documento_generico_rigaBulk riga= null;
            Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
            if (!documentoGenerico.isGenericoAttivo()) {
                component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
                riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoPassivoBP) bp).getDettaglio().getModel();
            } else {
                component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
                riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().getModel();
            }

            //visualizza la prima banca della lista
            if (riga.getModalita_pagamento_uo_cds() != null) {

                java.util.List coll= (java.util.List)component.findListabanche(context.getUserContext(), riga);
                if (coll == null || coll.isEmpty())
                    throw new it.cnr.jada.comp.ApplicationException("Non e' stato possibile trovare i riferimenti bancari");
                if (documentoGenerico.isGenericoAttivo()) {
                	((CRUDDocumentoGenericoAttivoBP)bp).setContoEnte(false);
					if (!Rif_modalita_pagamentoBulk.BANCARIO.equals(riga.getModalita_pagamento_uo_cds().getTi_pagamento()))
		            	riga.setBanca_uo_cds(getBancaDefaultForCdsFrom(context, riga, coll));
		            else {
			        	BancaBulk banca = component.setContoEnteIn(context.getUserContext(), riga, coll);
			        	((CRUDDocumentoGenericoAttivoBP)bp).setContoEnte(true);
			        	if (banca == null)
			        		banca = getBancaDefaultForCdsFrom(context, riga, coll);
			        	riga.setBanca_uo_cds(banca);
		            }
                } else
                    riga.setBanca(getBancaDefaultForCdsFrom(context, riga, coll));

            } else {
                riga.setBanca_uo_cds(null);
            }
            bp.setModel(context, documentoGenerico);
        } catch (Throwable t) {
            return handleException(context, t);
        }
        return context.findDefaultForward();
    }
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */

public Forward doOnTipoDocumentoChange(ActionContext context) {

    try {
        fillModel(context);

        
        it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        DocumentoGenericoComponentSession component= null;
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();        
        //if (documentoGenerico.isGenericoAttivo())
            //component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
        //else
            //component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();

        if (documentoGenerico.getCd_tipo_doc_amm() !=null && documentoGenerico.getCd_tipo_doc_amm().compareTo(documentoGenerico.GENERICO_S)!=0){
        	documentoGenerico.setStato_liquidazione(null);
        	documentoGenerico.setCausale(null);
        }else if (documentoGenerico.getCd_tipo_doc_amm() !=null && documentoGenerico.getCd_tipo_doc_amm().compareTo(documentoGenerico.GENERICO_S)==0){
        	if(documentoGenerico.getStato_liquidazione()==null){
        		documentoGenerico.setStato_liquidazione(documentoGenerico.SOSP);
        		documentoGenerico.setCausale(documentoGenerico.ATTLIQ);
        	}
        }
        if (documentoGenerico.getTipo_documento() != null && documentoGenerico.getTipo_documento().getFl_solo_partita_giro().booleanValue()) {

	        if (!documentoGenerico.isDefaultValuta()) {
		        documentoGenerico.setTipo_documento(null);
	        	throw new it.cnr.jada.comp.ApplicationException("Attenzione, non è possibile selezionare questo tipo di documento per la valuta selezionata.");
	        }

	        if (documentoGenerico.isFlagEnte() || documentoGenerico.isPassivo_ente()) {
		        documentoGenerico.setFlagEnte(false);
	            documentoGenerico.setPassivo_ente(false);
				documentoGenerico.setCd_cds(documentoGenerico.getCd_cds_origine());
	            documentoGenerico.setCd_unita_organizzativa(documentoGenerico.getCd_uo_origine());
	        }
             
            documentoGenerico.setStato_pagamento_fondo_eco(documentoGenerico.NO_FONDO_ECO);

            return context.findDefaultForward();
        }
    } catch (Throwable t) {
        return handleException(context, t);
    }
    return context.findDefaultForward();
}
/**
 * Gestisce l'apertura dell'accertamento
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doOpenAccertamentiWindow(ActionContext context) {

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

            Accertamento_scadenzarioBulk scadenza= (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel();
            if (scadenza == null)
                throw new it.cnr.jada.comp.ApplicationException("Selezionare un accertamento");

            if (scadenza.getAccertamento().getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_ACR_SIST))
	            throw new it.cnr.jada.comp.ApplicationException("Impossibile visualizzare l'accertamento selezionato");
	            
            boolean viewMode= bp.isViewing() || ((Documento_genericoBulk)bp.getModel()).isAnnullato();
            if (!viewMode && bp instanceof IDocumentoAmministrativoBP)
                viewMode= !((IDocumentoAmministrativoBP) bp).getDocumentoAmministrativoCorrente().isEditable();
            String status= viewMode ? "V" : "M";

            it.cnr.contab.doccont00.bp.CRUDVirtualAccertamentoBP nbp= it.cnr.contab.doccont00.bp.CRUDVirtualAccertamentoBP.getBusinessProcessFor(context, scadenza.getAccertamento(), status + "RSWTh");
            nbp.edit(context, scadenza.getAccertamento());
            nbp.selezionaScadenza(scadenza, context);

            context.addHookForward("bringback", this, "doBringBackOpenAccertamentoWindow");
            HookForward hook= (HookForward) context.findForward("bringback");
            return context.addBusinessProcess(nbp);
        } catch (Exception e) {
            return handleException(context, e);
        }
    }
/**
 * Gestisce l'apertura dell'accertamento
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doOpenObbligazioniWindow(ActionContext context) {

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

        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        Obbligazione_scadenzarioBulk scadenza= (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel();
        if (scadenza == null)
            throw new it.cnr.jada.comp.ApplicationException("Selezionare un'obbligazione");

        if ((scadenza.getObbligazione().getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_IMP) || 
	        scadenza.getObbligazione().getCd_tipo_documento_cont().equals(Numerazione_doc_contBulk.TIPO_IMP_RES)) &&
        	!scadenza.getObbligazione().getFl_pgiro().booleanValue())
			throw new it.cnr.jada.comp.ApplicationException("Impossibile visualizzare l'impegno selezionato");
				
        String status;
        if ((!(documentoGenerico.isPassivo_ente() && !scadenza.getObbligazione().getFl_pgiro().booleanValue())) || documentoGenerico.isAnnullato()) 
        {
            if (scadenza == null)
                return context.findDefaultForward();

            boolean viewMode= bp.isViewing() || documentoGenerico.isAnnullato();
            if (!viewMode && bp instanceof IDocumentoAmministrativoBP)
                viewMode= !((IDocumentoAmministrativoBP) bp).getDocumentoAmministrativoCorrente().isEditable();
            status= viewMode ? "V" : "M";

        }
        else
	        status= "V";
        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");
        HookForward hook= (HookForward) context.findForward("bringback");

        return context.addBusinessProcess(nbp);
    } catch (Exception e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce una richiesta di cancellazione dal controller "accertamenti"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRemoveFromCRUDMain_Accertamenti(ActionContext context) {

    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();
    it.cnr.jada.util.action.Selection selection= bp.getAccertamentiController().getSelection();
    try {
        if (selection.isEmpty())
            throw new it.cnr.jada.comp.ApplicationException("Selezionare le scadenze che si desidera eliminare!");
    } catch (it.cnr.jada.comp.ApplicationException e) {
        return handleException(context, e);
    }
    java.util.List accertamenti= bp.getAccertamentiController().getDetails();
    for (it.cnr.jada.util.action.SelectionIterator i= bp.getAccertamentiController().getSelection().iterator(); i.hasNext();) {
        Accertamento_scadenzarioBulk accertamento= (Accertamento_scadenzarioBulk) accertamenti.get(i.nextIndex());
        java.util.Vector models= (java.util.Vector) ((Documento_genericoBulk) bp.getModel()).getDocumento_generico_accertamentiHash().get(accertamento);
        try {
            if (models != null && models.isEmpty()) {
                Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
                doc.getDocumento_generico_accertamentiHash().remove(accertamento);
                doc.addToDocumentiContabiliCancellati(accertamento);
            } else {
                controllaRighePerMandatieAnnullati(models, accertamento, false);
                scollegaDettagliDaAccertamento(context, (java.util.List) models.clone());
            }
        } catch (it.cnr.jada.comp.ComponentException e) {
            return handleException(context, e);
        }

        doCalcolaTotalePerAccertamento(context, null);

        Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
        setAndVerifyStatusFor(context, doc);

        bp.getAccertamentiController().getSelection().clear();
        bp.getAccertamentiController().setModelIndex(context, -1);
        bp.setDirty(true);
    }
    return context.findDefaultForward();
}
/**
 * Gestisce una richiesta di cancellazione dal controller "accertamenti_DettaglioAccertamenti"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRemoveFromCRUDMain_Accertamenti_DettaglioAccertamenti(ActionContext context) {

    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();
    try {
        it.cnr.jada.util.action.Selection selection= bp.getDettaglioAccertamentoController().getSelection();
        if (selection.isEmpty())
            throw new it.cnr.jada.comp.ApplicationException("Selezionare i dettagli che si desidera scollegare!");
        java.util.List models= selection.select(bp.getDettaglioAccertamentoController().getDetails());
        controllaRighePerMandatieAnnullati(models, null, true);
        scollegaDettagliDaAccertamento(context, models);
    } catch (it.cnr.jada.comp.ComponentException e) {
        return handleException(context, e);
    }

    doCalcolaTotalePerAccertamento(context, (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel());

    Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
    setAndVerifyStatusFor(context, doc);

    bp.getDettaglioAccertamentoController().getSelection().clear();
    bp.getDettaglioAccertamentoController().setModelIndex(context, -1);
    java.util.List dettagli= bp.getDettaglioAccertamentoController().getDetails();
    if (dettagli == null || dettagli.isEmpty()) {
        bp.getAccertamentiController().getSelection().clear();
        bp.getAccertamentiController().setModelIndex(context, -1);
    }
    bp.setDirty(true);

    return context.findDefaultForward();
}
/**
 * Gestisce una richiesta di cancellazione dal controller "obbligazioni"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRemoveFromCRUDMain_Obbligazioni(ActionContext context) {

    CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
    it.cnr.jada.util.action.Selection selection = bp.getObbligazioniController().getSelection();
	try {
		if (selection.isEmpty())
			throw new it.cnr.jada.comp.ApplicationException("Selezionare le scadenze che si desidera eliminare!");
	} catch (it.cnr.jada.comp.ApplicationException e) {
		return handleException(context, e);
	}
    java.util.List obbligazioni= bp.getObbligazioniController().getDetails();
    for (it.cnr.jada.util.action.SelectionIterator i= bp.getObbligazioniController().getSelection().iterator(); i.hasNext();) {
        Obbligazione_scadenzarioBulk obbligazione= (Obbligazione_scadenzarioBulk) obbligazioni.get(i.nextIndex());
        java.util.Vector models= (java.util.Vector) ((Documento_genericoBulk) bp.getModel()).getDocumento_generico_obbligazioniHash().get(obbligazione);
        try {
            if (models != null && models.isEmpty()) {
                Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
                doc.getDocumento_generico_obbligazioniHash().remove(obbligazione);
                doc.addToDocumentiContabiliCancellati(obbligazione);
            } else {
                controllaRighePerMandatieAnnullati(models, obbligazione);
                java.util.List clone = (java.util.List) models.clone();
                scollegaDettagliDaObbligazione(context, clone);
		        resetImportoIniziale(context, clone);
            }
        } catch (it.cnr.jada.comp.ComponentException e) {
            return handleException(context, e);
        }

        doCalcolaTotalePerObbligazione(context, null);

        Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
        setAndVerifyStatusFor(context, doc);

        bp.getObbligazioniController().getSelection().clear();
        bp.getObbligazioniController().setModelIndex(context, -1);
        bp.setDirty(true);
    }
    return context.findDefaultForward();
}
/**
 * Gestisce una richiesta di cancellazione dal controller "obbligazioni_DettaglioObbligazioni"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRemoveFromCRUDMain_Obbligazioni_DettaglioObbligazioni(ActionContext context) {

    CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
    try {
        it.cnr.jada.util.action.Selection selection = bp.getDettaglioObbligazioneController().getSelection();
		if (selection.isEmpty())
			throw new it.cnr.jada.comp.ApplicationException("Selezionare i dettagli che si desidera scollegare!");
		java.util.List models = selection.select(bp.getDettaglioObbligazioneController().getDetails());
        controllaRighePerMandatieAnnullati(models, null, true);
        scollegaDettagliDaObbligazione(context, models);
        resetImportoIniziale(context, models);
    } catch (it.cnr.jada.comp.ComponentException e) {
        return handleException(context, e);
    }

    doCalcolaTotalePerObbligazione(context, (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel());

    Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
    setAndVerifyStatusFor(context, doc);

    bp.getDettaglioObbligazioneController().getSelection().clear();
    bp.getDettaglioObbligazioneController().setModelIndex(context, -1);
    java.util.List dettagli= bp.getDettaglioObbligazioneController().getDetails();
    if (dettagli == null || dettagli.isEmpty()) {
        bp.getObbligazioniController().getSelection().clear();
        bp.getObbligazioniController().setModelIndex(context, -1);
    }
    bp.setDirty(true);

    return context.findDefaultForward();
}
/**
 * Gestisce la ricerca degli accertamenti
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRicercaAccertamento(ActionContext context) {

        try {
            CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
            fillModel(context);
            java.util.List models= bp.getDettaglio().getSelectedModels(context);
            Forward forward= context.findDefaultForward();
            if (models == null || models.isEmpty())
                bp.setErrorMessage("Per procedere, selezionare i dettagli da contabilizzare!");
            else {
                controllaSelezione(models.iterator());
                Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
                forward= basicDoRicercaAccertamento(context, doc, models);
            }
            return forward;
        } catch (Throwable e) {
            return handleException(context, e);
        }
    }
/**
 * Gestisce la ricerca delle obbligazioni
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRicercaObbligazione(ActionContext context) {

        try {
            CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
            fillModel(context);
            java.util.List models= bp.getDettaglio().getSelectedModels(context);
            Forward forward= context.findDefaultForward();
            if (models == null || models.isEmpty())
                bp.setErrorMessage("Per procedere, selezionare i dettagli da contabilizzare!");
            else {
                controllaSelezione(models.iterator());
                Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
                forward= basicDoRicercaObbligazione(context, doc, models);
            }
            return forward;
        } catch (Throwable e) {
            return handleException(context, e);
        }
    }
public Forward doRiportaAvanti(ActionContext context) throws java.rmi.RemoteException {

	CRUDBP bp = getBusinessProcess(context);
	
	try {
		fillModel(context);
		if (((Documento_genericoBulk)bp.getModel()).isGenericoAttivo()) {
			((CRUDDocumentoGenericoAttivoBP)bp).salvaRiportandoAvanti(context);
			((CRUDDocumentoGenericoAttivoBP)bp).getAccertamentiController().setModelIndex(context, -1);
		} else {
			((CRUDDocumentoGenericoPassivoBP)bp).salvaRiportandoAvanti(context);
			((CRUDDocumentoGenericoPassivoBP)bp).getObbligazioniController().setModelIndex(context, -1);
		}
		return context.findDefaultForward();
	} catch(ValidationException e) {
		bp.setErrorMessage(e.getMessage());
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doRiportaIndietro(ActionContext context) throws java.rmi.RemoteException {

	try {
		fillModel(context);
		CRUDBP bp = getBusinessProcess(context);
		if (((Documento_genericoBulk)bp.getModel()).isGenericoAttivo())
			((CRUDDocumentoGenericoAttivoBP)bp).riportaIndietro(context);
		else
			((CRUDDocumentoGenericoPassivoBP)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 un HookForward di ritorno da un risultato di una ricerca (SelezionatoreBP)
 */
public Forward doRiportaSelezioneAccertamento(ActionContext context) throws java.rmi.RemoteException {
    HookForward caller= (HookForward) context.getCaller();
    Accertamento_scadenzarioBulk accertamento= (Accertamento_scadenzarioBulk) caller.getParameter("focusedElement");
    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();
    java.util.List selectedModels= null;
    try {
        selectedModels= bp.getDettaglio().getSelectedModels(context);
        bp.getDettaglio().getSelection().clearSelection();
    } catch (Throwable e) {
    }
    if (accertamento != null) {
        try {
            basicDoContabilizzaAccertamenti(context, accertamento, selectedModels);
        } catch (it.cnr.jada.comp.ComponentException e) {
            return handleException(context, e);
        }
        bp.getAccertamentiController().getSelection().clear();
        bp.getAccertamentiController().setModelIndex(context, -1);
        bp.getAccertamentiController().setModelIndex(context, it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(bp.getAccertamentiController().getDetails(), accertamento));

        bp.setDirty(true);
        if (!"tabDocumentoGenericoAccertamenti".equals(bp.getTab("tab")))
            bp.setTab("tab", "tabDocumentoGenericoAccertamenti");
    }
    return context.findDefaultForward();
    /*
    	try {
    		Forward fwd = super.doAnnullaRiporta(context);
    		return fwd;
    	} catch(Exception e) {
    		return handleException(context,e);
    	}
    */
}
/**
 * Gestisce un HookForward di ritorno da un risultato di una ricerca (SelezionatoreBP)
 */
public Forward doRiportaSelezioneObbligazione(ActionContext context) throws java.rmi.RemoteException {
    HookForward caller= (HookForward) context.getCaller();
    it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk obblig= (it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk) caller.getParameter("focusedElement");
    CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
    java.util.List selectedModels= null;
    try {
        selectedModels= bp.getDettaglio().getSelectedModels(context);
        bp.getDettaglio().getSelection().clearSelection();
    } catch (Throwable e) {
    }
    if (obblig != null) {
        try {
            basicDoContabilizza(context, obblig, selectedModels);
        } catch (it.cnr.jada.comp.ComponentException e) {
            return handleException(context, e);
        }
        bp.getObbligazioniController().getSelection().clear();
        bp.getObbligazioniController().setModelIndex(context, -1);
        bp.getObbligazioniController().setModelIndex(context, it.cnr.jada.bulk.BulkCollections.indexOfByPrimaryKey(bp.getObbligazioniController().getDetails(), obblig));

        bp.setDirty(true);
        if (!"tabDocumentoGenericoObbligazioni".equals(bp.getTab("tab")))
            bp.setTab("tab", "tabDocumentoGenericoObbligazioni");
    }
    return context.findDefaultForward();
    /*
    	try {
    		Forward fwd = super.doAnnullaRiporta(context);
    		return fwd;
    	} catch(Exception e) {
    		return handleException(context,e);
    	}
    */
}
/**
 * Gestisce un cambiamento di pagina su un controllo tabbed {@link it.cnr.jada.util.jsp.JSPUtils.tabbed}
 */
public Forward doSalva(ActionContext context) throws java.rmi.RemoteException {

    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documento= (Documento_genericoBulk) bp.getModel();
    if (documento.isGenericoAttivo() && ((CRUDDocumentoGenericoAttivoBP) bp).getAccertamentiController()!=null)
         ((CRUDDocumentoGenericoAttivoBP) bp).getAccertamentiController().setModelIndex(context, -1);
    if (!documento.isGenericoAttivo() && ((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController()!=null)
         ((CRUDDocumentoGenericoPassivoBP) bp).getObbligazioniController().setModelIndex(context, -1);
   	
    java.sql.Timestamp competenzaABck = documento.getDt_a_competenza_coge();
    java.sql.Timestamp competenzaDaBck = documento.getDt_da_competenza_coge();
    
	java.util.GregorianCalendar tsOdiernoGregorian = new GregorianCalendar();
	String cds = CNRUserContext.getCd_cds(context.getUserContext());
		
		try {
			fillModel(context);
			java.sql.Timestamp competenzaA = documento.getDt_a_competenza_coge();
			java.sql.Timestamp competenzaDa = documento.getDt_da_competenza_coge();
			
			if (bp instanceof CRUDDocumentoGenericoAttivoBP){
				CRUDDocumentoGenericoAttivoBP bpA= (CRUDDocumentoGenericoAttivoBP) bp;
				if (competenzaA != null && competenzaABck != null && competenzaA!=competenzaABck){
					tsOdiernoGregorian.setTime(new Date(competenzaA.getTime()));
					Integer esercizioCompetenzaA = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
					if (((DocumentoGenericoComponentSession)bpA.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");
				}
				if (competenzaDa != null && competenzaDaBck != null && competenzaDa!=competenzaDaBck){
					tsOdiernoGregorian.setTime(new Date(competenzaDa.getTime()));
					Integer esercizioCompetenzaDa = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
					if (((DocumentoGenericoComponentSession)bpA.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");
				}	
			}
			if (bp instanceof CRUDDocumentoGenericoPassivoBP){
				CRUDDocumentoGenericoPassivoBP bpP= (CRUDDocumentoGenericoPassivoBP) bp;
				if (competenzaA != null && competenzaABck != null && competenzaA!=competenzaABck){
						tsOdiernoGregorian.setTime(new Date(competenzaA.getTime()));
						Integer esercizioCompetenzaA = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
						if (((DocumentoGenericoComponentSession)bpP.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");
				}
				if (competenzaDa != null && competenzaDaBck != null && competenzaDa!=competenzaDaBck){
					tsOdiernoGregorian.setTime(new Date(competenzaDa.getTime()));
					Integer esercizioCompetenzaDa = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
					if (((DocumentoGenericoComponentSession)bpP.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");
				}
			}
		} catch (Throwable t) {
			documento.setDt_a_competenza_coge(competenzaABck);
			documento.setDt_da_competenza_coge(competenzaDaBck);
			return handleException(context, t);
		}
		
	return super.doSalva(context);
}
    /**
     * Viene richiamato nel momento in cui si seleziona la lista delle banche nella
     * riga del documento generico.
     * Viene passato un parametro relativo al tipo di banca.
     */
    public Forward doSearchListabanche(ActionContext context) {

        it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        Documento_generico_rigaBulk riga= null;
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        if (!documentoGenerico.isGenericoAttivo()) {
            riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoPassivoBP) bp).getDettaglio().getModel();
            return search(context, getFormField(context, "main.Dettaglio.listabanche"), riga.getModalita_pagamento().getTiPagamentoColumnSet());
        } else {
            riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().getModel();
            return search(context, getFormField(context, "main.Dettaglio.listabanche"), riga.getModalita_pagamento_uo_cds().getTiPagamentoColumnSet());
        }

    }
/**
 * Viene richiamato nel momento in cui si seleziona una valuta dal combo Valuta nella 
 * testata del documento
 * Richiama a sua volta il metodo cercaCambio dalla component.
 */
public Forward doSearchSospeso(ActionContext context) {

	Documento_genericoBulk documento = (Documento_genericoBulk)getBusinessProcess(context).getModel();
	if (documento != null && documento.getLettera_pagamento_estero() != null) {
		Lettera_pagam_esteroBulk lettera = documento.getLettera_pagamento_estero();
		if (lettera.getSospeso() == null)
			try {
				doBlankSearchSospeso(context, documento);
			} catch (Exception e) {
				return handleException(context, e);
			}
		return search(context, getFormField(context, "main.sospeso"), null);
	}
	return null;
}
    /**
     * Viene richiamato nel momento in cui si seleziona la lista delle banche nella
     * riga del documento generico.
     * Viene passato un parametro relativo al tipo di banca.
     */
    public Forward doSearchTerzo(ActionContext context) {

        it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
        Documento_generico_rigaBulk riga= null;
        Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
        if (!documentoGenerico.isGenericoAttivo()) {
            riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoPassivoBP) bp).getDettaglio().getModel();
        } else {
            riga= (Documento_generico_rigaBulk) ((CRUDDocumentoGenericoAttivoBP) bp).getDettaglio().getModel();
        }

        try {
            it.cnr.jada.util.action.FormField field= getFormField(context, "main.Dettaglio.terzo");
            it.cnr.jada.bulk.OggettoBulk model= field.getModel();
            it.cnr.jada.bulk.OggettoBulk value= (it.cnr.jada.bulk.OggettoBulk) field.getField().getValueFrom(model);
            if (value == null)
                value= createEmptyModelForSearchTool(context, field);
            it.cnr.jada.util.RemoteIterator selezione= bp.find(context, null, value, model, field.getField().getProperty());
            if (selezione.countElements() == 0) {
                riga.getTerzo().setCd_terzo(null);
            }
            //bp.fillModel(context);
            return super.selectFromSearchResult(context, field, selezione, null);
        } catch (Exception e) {
            return handleException(context, e);
        }

    }
/**
 * Gestisce una richiesta di selezione dal controller "accertamenti"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doSelectAccertamenti(ActionContext context) {

    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();
    try {
        bp.getAccertamentiController().setSelection(context);
    } catch (Throwable e) {
    }

    doCalcolaTotalePerAccertamento(context, (Accertamento_scadenzarioBulk) bp.getAccertamentiController().getModel());
    return context.findDefaultForward();
}
/**
 * Gestisce una richiesta di selezione dal controller "obbligazioni"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doSelectObbligazioni(ActionContext context) {

    CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
    try {
        bp.getObbligazioniController().setSelection(context);
    } catch (Throwable e) {
    }

    doCalcolaTotalePerObbligazione(context, (Obbligazione_scadenzarioBulk) bp.getObbligazioniController().getModel());
    return context.findDefaultForward();
}
/**
 * Viene richiamato nel momento in cui si seleziona una valuta dal combo Valuta nella 
 * riga del documento generico.
 * Richiama a sua volta il metodo cercaCambio dalla component.
 */
public Forward doSelezionaValuta(ActionContext context) throws it.cnr.jada.comp.ApplicationException {
    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
    try {
        DocumentoGenericoComponentSession component= null;
        if (documentoGenerico.getStato_cofi() != null && !documentoGenerico.getStato_cofi().equals(documentoGenerico.STATO_INIZIALE))
            throw new it.cnr.jada.comp.ApplicationException("Non è possibile modificare la valuta in un documento in stato non iniziale");
        if (!documentoGenerico.isGenericoAttivo())
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoPassivoBP) bp).createComponentSession();
        else
            component= (DocumentoGenericoComponentSession) ((CRUDDocumentoGenericoAttivoBP) bp).createComponentSession();
        DivisaBulk divisa= documentoGenerico.getValuta();
        fillModel(context);
        try {
            documentoGenerico= component.cercaCambio(context.getUserContext(), documentoGenerico);
        } catch (Throwable t) {
            documentoGenerico.setValuta(divisa);
            throw t;
        }
        bp.setModel(context, documentoGenerico);
        documentoGenerico= basicCalcolaTotale(context);
        bp.setModel(context, documentoGenerico);

    } catch (Throwable t) {
        return handleException(context, t);
    }
    return context.findDefaultForward();
}
/**
 * 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) {

    it.cnr.jada.util.action.CRUDBP bp= (it.cnr.jada.util.action.CRUDBP) getBusinessProcess(context);
    Documento_genericoBulk documento= (Documento_genericoBulk) bp.getModel();
    
	java.sql.Timestamp competenzaABck = documento.getDt_a_competenza_coge();
    java.sql.Timestamp competenzaDaBck = documento.getDt_da_competenza_coge();
    
    java.util.GregorianCalendar tsOdiernoGregorian = new GregorianCalendar();
	String cds = CNRUserContext.getCd_cds(context.getUserContext());
		
		try {
			fillModel(context);
			java.sql.Timestamp competenzaA = documento.getDt_a_competenza_coge();
			java.sql.Timestamp competenzaDa = documento.getDt_da_competenza_coge();
			
			if (bp instanceof CRUDDocumentoGenericoAttivoBP){
			CRUDDocumentoGenericoAttivoBP bpA= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
			
			if (competenzaA!=null )
				if(competenzaA!=competenzaABck){
				tsOdiernoGregorian.setTime(new Date(competenzaA.getTime()));
				Integer esercizioCompetenzaA = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
				if (((DocumentoGenericoComponentSession)bpA.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");
			
			}
			if (competenzaDa !=null)
				if ( competenzaDa!=competenzaDaBck){
				tsOdiernoGregorian.setTime(new Date(competenzaDa.getTime()));
				Integer esercizioCompetenzaDa = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
				if (((DocumentoGenericoComponentSession)bpA.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");
			}	
			}
			
			if (bp instanceof CRUDDocumentoGenericoPassivoBP){
				CRUDDocumentoGenericoPassivoBP bpP= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
			if (competenzaA!=null )	
			if (competenzaA!=competenzaABck){
					tsOdiernoGregorian.setTime(new Date(competenzaA.getTime()));
					Integer esercizioCompetenzaA = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
					if (((DocumentoGenericoComponentSession)bpP.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");
			}
			if (competenzaDa!=null )
			if (competenzaDa!=competenzaDaBck){
				tsOdiernoGregorian.setTime(new Date(competenzaDa.getTime()));
				Integer esercizioCompetenzaDa = new Integer (tsOdiernoGregorian.get(java.util.GregorianCalendar.YEAR));
				if (((DocumentoGenericoComponentSession)bpP.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");
			}
			}
		} catch (Throwable t) {
			documento.setDt_a_competenza_coge(competenzaABck);
			documento.setDt_da_competenza_coge(competenzaDaBck);
			return handleException(context, t);
		}
		
    try {
		fillModel(context);
		if (documento.getTipo_documento()==null || documento.getTipo_documento().getCd_tipo_documento_amm() == null)
			throw new ValidationException("Selezionare un tipo di documento");

        if (("tabDocumentoAttivo".equalsIgnoreCase(bp.getTab(tabName)) ||
	        "tabDocumentoPassivo".equalsIgnoreCase(bp.getTab(tabName))) &&
        	!bp.isSearching() && !bp.isViewing() && !documento.isRODateCompetenzaCOGE())
				documento.validaDateCompetenza();

		if ("tabDocumentoGenericoObbligazioni".equalsIgnoreCase(bp.getTab(tabName))) {
            try {
                fillModel(context);
                if (!documento.isPassivo_ente())
                    controllaQuadraturaObbligazioni(context, documento);
            } catch (it.cnr.jada.comp.ApplicationException e) {
                bp.setErrorMessage(e.getMessage());
            }
        }
        if ("tabDocumentoGenericoAccertamenti".equalsIgnoreCase(bp.getTab(tabName))) {
            try {
                fillModel(context);
                if (!Numerazione_doc_ammBulk.TIPO_REGOLA_E.equalsIgnoreCase(documento.getTipo_documento().getCd_tipo_documento_amm()) &&
	                !Numerazione_doc_ammBulk.TIPO_GEN_CH_FON.equalsIgnoreCase(documento.getTipo_documento().getCd_tipo_documento_amm()))
                    if (!documento.isPassivo_ente())
                    	controllaQuadraturaAccertamenti(context, documento);
            } catch (it.cnr.jada.comp.ApplicationException e) {
                bp.setErrorMessage(e.getMessage());
            }
        }
    		
        return super.doTab(context, tabName, pageName);
    } catch (Throwable e) {
        return handleException(context, e);
    }
}
/**
 * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
 * figlio del ricevente
 */

protected BancaBulk getBancaDefaultForCdsFrom(
	ActionContext context,
	Documento_generico_rigaBulk riga,
	java.util.Collection banche) {

	if (banche == null || banche.isEmpty())
		return null;
	BancaBulk primaBanca = (BancaBulk) new java.util.Vector(banche).firstElement();
	if (banche.size() == 1)
		return primaBanca;

	BancaBulk defaultBanca = null;
	if (riga.getDocumento_generico().isGenericoAttivo())
		for (java.util.Iterator i = banche.iterator(); i.hasNext();) {
			BancaBulk banca = (BancaBulk)i.next();
			if (defaultBanca == null) {
				if (banca.getFl_cc_cds() != null &&
					banca.getFl_cc_cds().booleanValue())
					defaultBanca = banca;
			}
		}

	if (defaultBanca == null)
		defaultBanca = primaBanca;
	return defaultBanca;
}
/**
 * Restituisce l'importo per l'aggiornamento automatico
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @param scadenza	
 * @param documento	
 * @param delta	
 * @return 
 */
protected java.math.BigDecimal getImportoPerAggiornamentoScadenzaAccertamentiInAutomatico(
        ActionContext context,
        Accertamento_scadenzarioBulk scadenza,
        Documento_genericoBulk documento,
        java.math.BigDecimal delta) {

        return documento.getImportoTotalePerAccertamento();
    }
/**
 * Restituisce l'importo per l'aggiornamento automatico
 * 
 *
 * @param context	L'ActionContext della richiesta
 * @param scadenza	
 * @param documento	
 * @param delta	
 * @return 
 */
protected java.math.BigDecimal getImportoPerAggiornamentoScadenzaObbligazioniInAutomatico(
        ActionContext context,
        Obbligazione_scadenzarioBulk scadenza,
        Documento_genericoBulk documento,
        java.math.BigDecimal delta) {

	    //if (documento.isDoc1210Associato()) {
		    //return documento.getLettera_pagamento_estero().getIm_pagamento();
	    //}
        return documento.getImportoTotalePerObbligazione();
    }
protected Forward handleException(ActionContext context, Throwable ex) {
	try {
		throw ex;
	} catch(it.cnr.contab.doccont00.comp.CheckDisponibilitaCassaFailed e) {
		CRUDBP bp = (CRUDBP)context.getBusinessProcess();
		if (bp instanceof CRUDDocumentoGenericoPassivoBP) {
			Documento_genericoBulk doc = (Documento_genericoBulk)bp.getModel();
			if (!doc.isGenericoAttivo() && doc.isDoc1210Associato()) {
				String msg = "L'importo della lettera di pagamento 1210 supera la disponiblità di cassa relativa al capitolo! Operazione interrotta.";
				return super.handleException(context, new it.cnr.jada.comp.ApplicationException(msg));
			}
		}
		return super.handleException(context,e);
	} catch(Throwable e) {
		return super.handleException(context,e);
	}
}
private void resetImportoIniziale(
	ActionContext context, 
	java.util.List models) {

	if (models != null) {
	    //CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
	    //Documento_genericoBulk doc = (Documento_genericoBulk)bp.getModel();
		for (java.util.Iterator i= models.iterator(); i.hasNext();) {
			Documento_generico_rigaBulk dettaglio= (Documento_generico_rigaBulk) i.next();
			if (dettaglio.getDocumento_generico().isPassivo_ente())
				dettaglio.setIm_riga_iniziale(null);
			//int idx = doc.getDocumento_generico_dettColl().indexOfByPrimaryKey(dettaglio);
			//((Documento_generico_rigaBulk)doc.getDocumento_generico_dettColl().get(idx)).setIm_riga_iniziale(null);
		}
	}
}
private void resyncAccertamento(ActionContext context, Accertamento_scadenzarioBulk oldAccert, Accertamento_scadenzarioBulk newAccert) throws it.cnr.jada.comp.ComponentException {

    CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
    Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
    java.util.Vector models= ((java.util.Vector) doc.getDocumento_generico_accertamentiHash().get(oldAccert));
    java.util.Vector clone= (java.util.Vector) models.clone();
    if (!clone.isEmpty())
        scollegaDettagliDaAccertamento(context, clone);
    else
        doc.getDocumento_generico_accertamentiHash().remove(oldAccert);
    basicDoContabilizzaAccertamenti(context, newAccert, clone);
}
    private void resyncObbligazione(ActionContext context, Obbligazione_scadenzarioBulk oldObblig, Obbligazione_scadenzarioBulk newObblig) throws it.cnr.jada.comp.ComponentException {

        CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) getBusinessProcess(context);
        Documento_genericoBulk doc= (Documento_genericoBulk) bp.getModel();
        java.util.Vector models= ((java.util.Vector) doc.getDocumento_generico_obbligazioniHash().get(oldObblig));
        java.util.Vector clone= (java.util.Vector) models.clone();
        if (!clone.isEmpty())
            scollegaDettagliDaObbligazione(context, clone);
        else
            doc.getDocumento_generico_obbligazioniHash().remove(oldObblig);
        basicDoContabilizza(context, newObblig, clone);
    }
    private void scollegaDettagliDaAccertamento(ActionContext context, java.util.List models) throws it.cnr.jada.comp.ComponentException {

        if (models != null) {
            try {
                for (java.util.Iterator i= models.iterator(); i.hasNext();) {
                    Documento_generico_rigaBulk dettaglio= (Documento_generico_rigaBulk) i.next();
                    if (!dettaglio.STATO_CONTABILIZZATO.equals(dettaglio.getStato_cofi()))
                        throw new it.cnr.jada.comp.ApplicationException(
                            "Non è possibile scollegare il dettaglio \"" + dettaglio.getDs_riga() + "\". Questa operazione è permessa solo per dettagli in stato contabilizzato ");
                    dettaglio.getDocumento_generico().removeFromDocumento_generico_accertamentiHash(dettaglio);
                    dettaglio.setStato_cofi(dettaglio.STATO_INIZIALE);
                    dettaglio.setAccertamento_scadenziario(null);
                    dettaglio.setToBeUpdated();
                }

	            CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) context.getBusinessProcess();
                Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
                boolean iniziale= true;
                for (java.util.Iterator i= documentoGenerico.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
                    Documento_generico_rigaBulk dettaglio= (Documento_generico_rigaBulk) i.next();
                    if (!dettaglio.getStato_cofi().equals(dettaglio.STATO_INIZIALE))
                        iniziale= false;
                }
                if (iniziale) {
                    documentoGenerico.setStato_cofi(documentoGenerico.STATO_INIZIALE);
                    documentoGenerico.setToBeUpdated();
                }

            } catch (it.cnr.jada.comp.ApplicationException e) {
                try {
                    it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
                } catch (Throwable t) {
                    throw new it.cnr.jada.comp.ComponentException(t);
                }
                throw e;
            }
        }
    }
    private void scollegaDettagliDaObbligazione(ActionContext context, java.util.List models) throws it.cnr.jada.comp.ComponentException {

        if (models != null) {
            try {
                for (java.util.Iterator i= models.iterator(); i.hasNext();) {
                    Documento_generico_rigaBulk dettaglio= (Documento_generico_rigaBulk) i.next();
                    if (!dettaglio.STATO_CONTABILIZZATO.equals(dettaglio.getStato_cofi()))
                        throw new it.cnr.jada.comp.ApplicationException(
                            "Non è possibile scollegare il dettaglio \"" + dettaglio.getDs_riga() + "\". Questa operazione è permessa solo per dettagli in stato contabilizzato ");
                    dettaglio.getDocumento_generico().removeFromDocumento_generico_obbligazioniHash(dettaglio);
                    dettaglio.setStato_cofi(dettaglio.STATO_INIZIALE);
                    dettaglio.setObbligazione_scadenziario(null);
                    dettaglio.setToBeUpdated();
                }
                CRUDDocumentoGenericoPassivoBP bp= (CRUDDocumentoGenericoPassivoBP) context.getBusinessProcess();
                Documento_genericoBulk documentoGenerico= (Documento_genericoBulk) bp.getModel();
                boolean iniziale= true;
                for (java.util.Iterator i= documentoGenerico.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
                    Documento_generico_rigaBulk dettaglio= (Documento_generico_rigaBulk) i.next();
                    if (!dettaglio.getStato_cofi().equals(dettaglio.STATO_INIZIALE))
                        iniziale= false;
                }
                if (iniziale) {
                    documentoGenerico.setStato_cofi(documentoGenerico.STATO_INIZIALE);
                    documentoGenerico.setToBeUpdated();
                }
            } catch (it.cnr.jada.comp.ApplicationException e) {
                try {
                    it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
                } catch (Throwable t) {
                    throw new it.cnr.jada.comp.ComponentException(t);
                }
                throw e;
            }
        }
    }
    /**
     * Gestisce il comando di aggiunta di un nuovo dettaglio su un CRUDController
     * figlio del ricevente
     */
    protected void setAndVerifyStatusFor(ActionContext context, Documento_genericoBulk doc) {

        //if (doc.getStato_cofi() != doc.STATO_PAGATO && doc.getCd_tipo_documento_amm().equalsIgnoreCase(doc.GENERICO_S) && doc.getDocumento_generico_obbligazioniHash() != null)
            //doc.setStato_cofi((doc.getDocumento_generico_obbligazioniHash().isEmpty()) ? doc.STATO_INIZIALE : doc.STATO_CONTABILIZZATO);
        //if (doc.getStato_cofi() != doc.STATO_PAGATO && doc.getCd_tipo_documento_amm().equalsIgnoreCase(doc.GENERICO_E) && doc.getDocumento_generico_obbligazioniHash() != null)
            //doc.setStato_cofi((doc.getDocumento_generico_accertamentiHash().isEmpty()) ? doc.STATO_INIZIALE : doc.STATO_CONTABILIZZATO);
        doc.setAndVerifyStatus();
    }
    /**
     * Gestisce lo sdoppiamento della riga di dettaglio
     * 
     *
     * @param context	L'ActionContext della richiesta
     * @return Il Forward alla pagina di risposta
     */
    public Forward doSdoppiaDettaglio(ActionContext context) {
       try {
            CRUDDocumentoGenericoAttivoBP bp= (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
            fillModel(context);
            Documento_generico_rigaBulk riga= (Documento_generico_rigaBulk)bp.getDettaglio().getModel();
            Forward forward= context.findDefaultForward();
            if (riga == null)
                bp.setErrorMessage("Per procedere, selezionare il dettaglio da sdoppiare!");
            else {
            	riga.setIm_riga_sdoppia(Utility.ZERO);
                bp.setDetailDoubling(true);
            }
            return forward;
        } catch (Throwable e) {
            return handleException(context, e);
        }
    }
    /**
     * Gestisce lo sdoppiamento della riga di dettaglio
     *
     * @param context	L'ActionContext della richiesta
     * @return Il Forward alla pagina di risposta
     */
    public Forward doConfirmSdoppiaDettaglio(ActionContext context) {
        try {
	        CRUDDocumentoGenericoAttivoBP bp = (CRUDDocumentoGenericoAttivoBP) getBusinessProcess(context);
	        fillModel(context);
	        
	        bp.sdoppiaDettaglioInAutomatico(context);

	        Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();

	        if (documento != null) {
	        	for (Iterator s = documento.getDocumento_generico_dettColl().iterator(); s.hasNext(); ) {
	        		Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)s.next();
	        		if ((riga.isToBeCreated() || riga.isToBeUpdated()) && riga.getAccertamento_scadenziario()!=null)
	    				basicDoBringBackOpenAccertamentiWindow(context, riga.getAccertamento_scadenziario());
	        	}
	        }

	        bp.setDirty(true);
	   		return context.findDefaultForward();
        } catch (Throwable e) {
            return handleException(context, e);
        }
    }
       	/**
    	 * Inventaria i dettagli
    	 * Richiesta la quadratura tra dettagli e testata
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */
    	public Forward doInventariaDettagli(ActionContext context) {
    	
    		try {
    			CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
    			fillModel(context);
    			Documento_genericoBulk doc = (Documento_genericoBulk)bp.getModel();
    				java.util.List dettagliDaInventariare = getDettagliDaInventariare(context, bp.getDettaglio().getDetails().iterator());
    			if (dettagliDaInventariare != null && !dettagliDaInventariare.isEmpty()  ) 
    				return basicDoInventariaDettagli(context,doc.getTi_entrate_spese());
    			else
    				bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    				return context.findDefaultForward();
    			
    		} catch(Exception e) {
    			return handleException(context,e);
    		}
    		
    	}
    	/**
    	 * Inventaria i dettagli
    	 * 
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */
    	public Forward doInventariaDettagliAtt(ActionContext context) {
//    	inventario
    		try {
    			CRUDDocumentoGenericoAttivoBP bp = (CRUDDocumentoGenericoAttivoBP)getBusinessProcess(context);
    			fillModel(context);
    			Documento_genericoBulk doc = (Documento_genericoBulk)bp.getModel();
				java.util.List dettagliDaInventariare = getDettagliDaInventariare(context, bp.getDettaglio().getDetails().iterator());
			if (dettagliDaInventariare != null && !dettagliDaInventariare.isEmpty()  ) 
				return basicDoInventariaDettagli(context,doc.getTi_entrate_spese());
			else
				bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
				return context.findDefaultForward();
    		} catch(Exception e) {
    			return handleException(context,e);
    		}
    		
    	}
    	/**
    	 * Inventaria i dettagli per aumento di valore
    	 * Richiesta la quadratura tra dettagli e testata
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */				
    	public Forward doInventariaDettagliPerAumentoValore(ActionContext context) {
    	
    		try {
    			CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
    			fillModel(context);
    				
    			java.util.List dettagliDaInventariare = getDettagliDaInventariare(context, bp.getDettaglio().getDetails().iterator());
    			if (dettagliDaInventariare != null && !dettagliDaInventariare.isEmpty()) {
    				AssBeneFatturaBP ibp = (AssBeneFatturaBP)context.getUserInfo().createBusinessProcess(context,"AssBeneFatturaBP",new Object[] { "MRSWTh" });
    				Ass_inv_bene_fatturaBulk associa = new Ass_inv_bene_fatturaBulk();			
    				associa.setLocal_transactionID(ibp.getLocalTransactionID(context.getUserContext(),true));
    				associa.completeFrom(dettagliDaInventariare);
    				associa.setPerAumentoValoreDoc(Boolean.TRUE);
    				// Crea ed inizializza il Buono di Carico
    				Buono_carico_scaricoBulk buonoC = new Buono_carico_scaricoBulk();
    				buonoC.setToBeCreated();
    				buonoC.setByDocumentoPerAumentoValore(Boolean.TRUE);
    				buonoC.setTi_documento(Buono_carico_scaricoBulk.CARICO);
    				buonoC = (Buono_carico_scaricoBulk)ibp.createComponentSession().inizializzaBulkPerInserimento(context.getUserContext(), buonoC);
    				associa.setTest_buono(buonoC);
    				associa.setInventario(buonoC.getInventario());
    				try{
    					associa.getTest_buono().setPg_buono_c_s(((NumerazioneTempBuonoComponentSession)EJBCommonServices.createEJB(
    								"CNRINVENTARIO01_EJB_NumerazioneTempBuonoComponentSession",
    								NumerazioneTempBuonoComponentSession.class)).getNextTempPG(context.getUserContext(),associa.getTest_buono()));
    					}catch (Throwable e){
    						throw new ComponentException (e);
    					}
    				ibp.setModel(context,associa);			
    				ibp.setDirty(false);
    				ibp.setPerAumentoValoreDoc(Boolean.TRUE);
    				
    				context.addHookForward("bringback",this,"doBringBackAssociaInventario");
    				HookForward hook = (HookForward)context.findForward("bringback");
    				hook.addParameter("dettagliDaInventariare", dettagliDaInventariare);
    				return context.addBusinessProcess(ibp);
    			}
    			bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    			return context.findDefaultForward();
    		} catch(Exception e) {
    			return handleException(context,e);
    		}
    	}
    	/**
    	 * Associa ad un buono di carico già creato i dettagli selezionati in fattura
    	 * 
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */
    	public Forward doAssociaInventario(ActionContext context) {
    	
    		try {
    			CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
    			fillModel(context);
    	
    			Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
    			
    			if ((documento.getAssociazioniInventarioHash() != null && !documento.getAssociazioniInventarioHash().isEmpty())||(documento.getHa_beniColl()))
    				return openConfirm(context,"Alcuni dettagli sono già stati associati. Si vuole continuare?",it.cnr.jada.util.action.OptionBP.CONFIRM_YES_NO,"doConfermaAssocia");
    					
    			return basicDoAssociaDettagli(context);
    							
    		} catch(Exception e) {
    				return handleException(context,e);
    			}
    	}
    	/**
    	 * Associa ad un buono di carico già creato i dettagli selezionati in fattura
    	 * 
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */
    	public Forward doAssociaInventarioAtt(ActionContext context) {
    	
    		try {
    			CRUDDocumentoGenericoAttivoBP bp = (CRUDDocumentoGenericoAttivoBP)getBusinessProcess(context);
    			fillModel(context);
    	
    			Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
    			
    			if ((documento.getAssociazioniInventarioHash() != null && !documento.getAssociazioniInventarioHash().isEmpty())||(documento.getHa_beniColl()))
    				return openConfirm(context,"Alcuni dettagli sono già stati associati. Si vuole continuare?",it.cnr.jada.util.action.OptionBP.CONFIRM_YES_NO,"doConfermaAssocia");
    					
    			return basicDoAssociaDettagli(context);
    							
    		} catch(Exception e) {
    				return handleException(context,e);
    			}
    	}
    	public Forward doBeni_coll(ActionContext context) {
    		Documento_genericoBulk doc=null;
    		CRUDDocumentoGenericoPassivoBP bp=null;
    		CRUDDocumentoGenericoAttivoBP bp_att=null;
    		it.cnr.jada.util.RemoteIterator ri=null;
    	 if (getBusinessProcess(context) instanceof CRUDDocumentoGenericoPassivoBP)
    		bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
    	 else
    		bp_att = (CRUDDocumentoGenericoAttivoBP)getBusinessProcess(context);
    	 try{
    	 if (bp!=null){
    		 doc = (Documento_genericoBulk)bp.getModel();
    		 ri = ((DocumentoGenericoComponentSession)bp.createComponentSession()).selectBeniFor(context.getUserContext(),doc);
    	 }
    	 else{
    		 doc = (Documento_genericoBulk)bp_att.getModel();
    		 ri = ((DocumentoGenericoComponentSession)bp_att.createComponentSession()).selectBeniFor(context.getUserContext(),doc);
    	 }
    				
    			ri = it.cnr.jada.util.ejb.EJBCommonServices.openRemoteIterator(context,ri);
    			if (ri.countElements() == 0) {
    				it.cnr.jada.util.ejb.EJBCommonServices.closeRemoteIterator(context,ri);
    				throw new it.cnr.jada.comp.ApplicationException("Attenzione: Nessun dato disponibile.");
    			}
    			SelezionatoreListaBP nbp = (SelezionatoreListaBP)context.createBusinessProcess("Selezionatore");
    			nbp.setIterator(context,ri);   			
    			nbp.disableSelection();
    			nbp.setBulkInfo(it.cnr.jada.bulk.BulkInfo.getBulkInfo(V_ass_inv_bene_fatturaBulk.class));		
    			HookForward hook = (HookForward)context.findForward("seleziona");		
    			return context.addBusinessProcess(nbp);		
    		}
    		catch (Throwable e){		
    			return handleException(context,e);
    		}
    	 }
    	/**
    	 * Restituisce un vettore di dettagli ancora da inventariare
    	 * 
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @param dettagli	
    	 * @return 
    	 * @throws SQLException  
    	 * @throws PersistencyException 
    	 * @throws RemoteException 
    	 * @throws ComponentException 
    	 */
    	protected java.util.List getDettagliDaInventariare(
    		ActionContext context,
    		java.util.Iterator dettagli) throws EJBException, SQLException, PersistencyException, ComponentException, RemoteException  {

    		java.util.Vector coll = new java.util.Vector();
    		if (dettagli != null) {
    			while (dettagli.hasNext()) {
    				Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)dettagli.next();
    				if (riga.getDocumento_generico().getTi_entrate_spese()==Documento_genericoBulk.SPESE){
    					if (riga.getObbligazione_scadenziario() !=null && riga.getObbligazione_scadenziario().getObbligazione()!= null &&
    								riga.getObbligazione_scadenziario().getObbligazione().getElemento_voce()!=null &&
    								riga.getObbligazione_scadenziario().getObbligazione().getElemento_voce().getFl_inv_beni_patr().booleanValue() &&
    								!riga.isInventariato())
    							coll.add(riga);
    				}else{
    					if (riga.getAccertamento_scadenziario() !=null && riga.getAccertamento_scadenziario().getAccertamento()!= null &&
								riga.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce()!=null){ 
    							Elemento_voceBulk elem_voce = new Elemento_voceBulk(riga.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce(),
    																			riga.getAccertamento_scadenziario().getAccertamento().getEsercizio(),
    																			riga.getAccertamento_scadenziario().getAccertamento().getTi_appartenenza(),
    																			riga.getAccertamento_scadenziario().getAccertamento().getTi_gestione());
    							elem_voce =((Elemento_voceBulk)(((FatturaAttivaSingolaComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession",FatturaAttivaSingolaComponentSession.class)).completaOggetto(context.getUserContext(),elem_voce)));    							
								if (elem_voce.getFl_inv_beni_patr().booleanValue() && !riga.isInventariato())
									coll.add(riga);
    							}
    			   				 }
    					}							
    				}
    		return coll;
    	}
    	/**
    	 * Aggiunge, una volta terminata l'operazione di associazione, tale elenco nel
    	 * modello
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */
    	public Forward doBringBackAssociaInventario(ActionContext context) {
    	
    		try {
    			HookForward hook = (HookForward)context.getCaller();
    			CRUDDocumentoGenericoPassivoBP bp=null;
    			CRUDDocumentoGenericoAttivoBP bp_att=null;
    			Documento_genericoBulk doc =null;
    			Ass_inv_bene_fatturaBulk ass = (Ass_inv_bene_fatturaBulk)hook.getParameter("bringback");	
    			if (ass != null) {
    				java.util.List dettagliInventariati = (java.util.List)hook.getParameter("dettagliDaInventariare");
    				if(context.getBusinessProcess() instanceof CRUDDocumentoGenericoPassivoBP){
    					bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
    					doc = (Documento_genericoBulk)bp.getModel();
    					for (java.util.Iterator i = dettagliInventariati.iterator(); i.hasNext();) {
        					Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)i.next();
        					if (ass.getPg_riga()== null) {
        							BuonoCaricoScaricoComponentSession h = (BuonoCaricoScaricoComponentSession)bp.createComponentSession(
        									"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
        									BuonoCaricoScaricoComponentSession.class);
        							ass.setPg_riga(h.findMaxAssociazione(context.getUserContext(),ass));
        					}
        					doc.addToAssociazioniInventarioHash(ass, dettaglio);
        					dettaglio.setInventariato(true);
        				}
    				}
    				else{
    					bp_att = (CRUDDocumentoGenericoAttivoBP)context.getBusinessProcess();
    					doc= (Documento_genericoBulk)bp_att.getModel();
    					for (java.util.Iterator i = dettagliInventariati.iterator(); i.hasNext();) {
        					Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)i.next();
        					if (ass.getPg_riga()== null) {
        							BuonoCaricoScaricoComponentSession h = (BuonoCaricoScaricoComponentSession)bp_att.createComponentSession(
        									"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
        									BuonoCaricoScaricoComponentSession.class);
        							ass.setPg_riga(h.findMaxAssociazione(context.getUserContext(),ass));
        					}
        					doc.addToAssociazioniInventarioHash(ass, dettaglio);
        					dettaglio.setInventariato(true);
        				}
    				}
    				
    			}
    			else{
    				java.util.List dettagliInventariati = (java.util.List)hook.getParameter("dettagliDaInventariare");
    				if(context.getBusinessProcess() instanceof CRUDDocumentoGenericoPassivoBP){
    					bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
    					doc = (Documento_genericoBulk)bp.getModel();
    					for (java.util.Iterator i = dettagliInventariati.iterator(); i.hasNext();) {
        					Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)i.next();
        					if (((DocumentoGenericoComponentSession)bp.createComponentSession()).ha_beniColl(context.getUserContext(), dettaglio))
        						dettaglio.setInventariato(true);
        					else
        						dettaglio.setInventariato(false);
        				}
    				}
    				else{
    					bp_att = (CRUDDocumentoGenericoAttivoBP)context.getBusinessProcess();
    					doc =(Documento_genericoBulk)bp_att.getModel();
    					for (java.util.Iterator i = dettagliInventariati.iterator(); i.hasNext();) {
        					Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)i.next();
        					if (((DocumentoGenericoComponentSession)bp_att.createComponentSession()).ha_beniColl(context.getUserContext(), dettaglio))
        						dettaglio.setInventariato(true);
        					else
        						dettaglio.setInventariato(false);
        				}
    				}
    				
    			}
    			
    			return context.findDefaultForward();
    		} catch(Exception e) {
    			return handleException(context,e);
    		}
    	}
    	/**
    	 * Aggiunge, una volta terminata l'operazione di creazione di buono di carico,
    	 * tale buono al modello
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 */
    	public Forward doBringBackInventariaDettagli(ActionContext context) {
    	
    		try {
    			HookForward hook = (HookForward)context.getCaller();
    			Buono_carico_scaricoBulk buonoCS = (Buono_carico_scaricoBulk)hook.getParameter("bringback");
    			
    			if (buonoCS != null) {
    				buonoCS.setByDocumento(true);
    				java.util.List dettagliInventariati = (java.util.List)hook.getParameter("dettagliDaInventariare");
    				if (buonoCS.getTi_documento().compareTo(Buono_carico_scaricoBulk.CARICO)==0){
    					CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
	    				Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
	    				for (java.util.Iterator i = dettagliInventariati.iterator(); i.hasNext();) {
	    					Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)i.next();
	    					documento.addToCarichiInventarioHash(buonoCS, dettaglio);
	    					dettaglio.setInventariato(true);
	    				}
    			}else{
    				CRUDDocumentoGenericoAttivoBP bp = (CRUDDocumentoGenericoAttivoBP)context.getBusinessProcess();
    				Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
    				for (java.util.Iterator i = dettagliInventariati.iterator(); i.hasNext();) {
    					Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)i.next();
    					documento.addToCarichiInventarioHash(buonoCS, dettaglio);
    					dettaglio.setInventariato(true);
    				}
    			}
    		}
    			return context.findDefaultForward();
    		} catch(Exception e) {
    			return handleException(context,e);
    		}
    	}
   	public Forward basicDoAssociaDettagli(ActionContext context) 
  	throws BusinessProcessException,
  			ComponentException, 
  			java.rmi.RemoteException, PersistencyException, IntrospectionException, EJBException, SQLException {
    		
    		CRUDDocumentoGenericoPassivoBP bp=null;
    		CRUDDocumentoGenericoAttivoBP bp_att=null;
    		Documento_genericoBulk documento =null;
    		
    		if(context.getBusinessProcess() instanceof  CRUDDocumentoGenericoPassivoBP){
    			bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
    			documento = (Documento_genericoBulk)bp.getModel();
    		}
    		else{
    			bp_att = (CRUDDocumentoGenericoAttivoBP)context.getBusinessProcess();
    			documento = (Documento_genericoBulk)bp_att.getModel();
    		}
    			
    		
    		for (java.util.Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
    			Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)i.next();
    			AssociazioniInventarioTable associazioni = documento.getAssociazioniInventarioHash();	
    			if ((associazioni != null && !associazioni.isEmpty())|| (riga.getCrudStatus()!=OggettoBulk.TO_BE_CREATED)) {
    				Ass_inv_bene_fatturaBulk ass = documento.getAssociationWithInventarioFor(riga);
    				if ((ass != null) && !ass.isPerAumentoValore()) {
    					if (riga.isInventariato()) riga.setInventariato(false);
    				}
    				else if (riga.getCrudStatus()!=OggettoBulk.TO_BE_CREATED && documento.getTi_entrate_spese()==Documento_genericoBulk.SPESE &&
    						(riga.getObbligazione_scadenziario() !=null && riga.getObbligazione_scadenziario().getObbligazione()!= null && 
    						 riga.getObbligazione_scadenziario().getObbligazione().getElemento_voce()!=null &&
    						riga.getObbligazione_scadenziario().getObbligazione().getElemento_voce().getFl_inv_beni_patr().booleanValue())){
    					riga.setInventariato(false);
    				}
    				else if (riga.getCrudStatus()!=OggettoBulk.TO_BE_CREATED && documento.getTi_entrate_spese()==Documento_genericoBulk.ENTRATE &&
    						riga.getAccertamento_scadenziario() !=null && riga.getAccertamento_scadenziario().getAccertamento()!= null &&
    						riga.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce()!=null){ 
        							Elemento_voceBulk elem_voce = new Elemento_voceBulk(riga.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce(),
        																			riga.getAccertamento_scadenziario().getAccertamento().getEsercizio(),
        																			riga.getAccertamento_scadenziario().getAccertamento().getTi_appartenenza(),
        																			riga.getAccertamento_scadenziario().getAccertamento().getTi_gestione());
        							elem_voce =((Elemento_voceBulk)(((FatturaAttivaSingolaComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession",FatturaAttivaSingolaComponentSession.class)).completaOggetto(context.getUserContext(),elem_voce)));
    								if (elem_voce.getFl_inv_beni_patr().booleanValue())
    									riga.setInventariato(false);
        			}							
    			}			
    		}//ricerca
    		java.util.List dettagliDaInventariare =null;
    		if (bp!=null)
    			dettagliDaInventariare = getDettagliDaInventariare(context, bp.getDettaglio().getDetails().iterator());
    		else
    			dettagliDaInventariare = getDettagliDaInventariare(context, bp_att.getDettaglio().getDetails().iterator());
    		if (dettagliDaInventariare != null && !dettagliDaInventariare.isEmpty()) {
    			AssBeneFatturaBP ibp = (AssBeneFatturaBP)context.getUserInfo().createBusinessProcess(context,"AssBeneFatturaBP",new Object[] { "MRSWTh" });
    			Ass_inv_bene_fatturaBulk associa = new Ass_inv_bene_fatturaBulk();
    			associa.setLocal_transactionID(ibp.getLocalTransactionID(context.getUserContext(),true));
    			associa.completeFrom(dettagliDaInventariare);
    			associa.setInventario(((BuonoCaricoScaricoComponentSession)EJBCommonServices.createEJB(
    									"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession",
    									BuonoCaricoScaricoComponentSession.class)).caricaInventario(context.getUserContext()));
    				
    			ibp.setModel(context,associa);
    			ibp.setDaDocumento(true);
    			ibp.setDirty(false);		
    			context.addHookForward("bringback",this,"doBringBackAssociaInventario");
    			HookForward hook = (HookForward)context.findForward("bringback");
    			hook.addParameter("dettagliDaInventariare", dettagliDaInventariare);
    			return context.addBusinessProcess(ibp);
    		}else
    		{  //R.P. MODIFICA BENI già ASSOCIATI(IN SOSPESO)
    			if (documento.getCrudStatus()!=OggettoBulk.TO_BE_CREATED){
    				java.util.List dettagli=null;
    				if(bp!=null)
    				    dettagli = bp.getDettaglio().getDetails();
    				else
    					 dettagli = bp_att.getDettaglio().getDetails();
    				   for(Iterator i=dettagli.iterator();i.hasNext();){
    					   Documento_generico_rigaBulk riga=(Documento_generico_rigaBulk)i.next();
    						if (documento.getTi_entrate_spese()==Documento_genericoBulk.SPESE &&  riga.getObbligazione_scadenziario() !=null && riga.getObbligazione_scadenziario().getObbligazione()!= null && 
    								riga.getObbligazione_scadenziario().getObbligazione().getElemento_voce()!=null &&
    								riga.getObbligazione_scadenziario().getObbligazione().getElemento_voce().getFl_inv_beni_patr().booleanValue() &&
    								!riga.isInventariato())
    					   			dettagliDaInventariare.add(riga);
    						else{
    							if(riga.getAccertamento_scadenziario() !=null && riga.getAccertamento_scadenziario().getAccertamento()!= null &&
    							   riga.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce()!=null){ 
            							Elemento_voceBulk elem_voce = new Elemento_voceBulk(riga.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce(),
            																			riga.getAccertamento_scadenziario().getAccertamento().getEsercizio(),
            																			riga.getAccertamento_scadenziario().getAccertamento().getTi_appartenenza(),
            																			riga.getAccertamento_scadenziario().getAccertamento().getTi_gestione());
            							elem_voce =((Elemento_voceBulk)(((FatturaAttivaSingolaComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession",FatturaAttivaSingolaComponentSession.class)).completaOggetto(context.getUserContext(),elem_voce)));
        								if (elem_voce.getFl_inv_beni_patr().booleanValue() && !riga.isInventariato())
        									dettagliDaInventariare.add(riga);
    						}
    					 }
    				   }
    				if (dettagliDaInventariare.size()==0 && bp!=null){
    					bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    					return context.findDefaultForward();
    				}
    				else if (dettagliDaInventariare.size()==0 && bp_att!=null){
    					bp_att.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    					return context.findDefaultForward();
    				}
    					
    				AssBeneFatturaBP ibp = (AssBeneFatturaBP)context.getUserInfo().createBusinessProcess(context,"AssBeneFatturaBP",new Object[] { "MRSWTh" });
    				Ass_inv_bene_fatturaBulk associa = new Ass_inv_bene_fatturaBulk();
    				associa.setLocal_transactionID(ibp.getLocalTransactionID(context.getUserContext(),true));
    				associa.completeFrom(dettagliDaInventariare);
    				associa.setInventario(((BuonoCaricoScaricoComponentSession)EJBCommonServices.createEJB(
    						"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession",
    						BuonoCaricoScaricoComponentSession.class)).caricaInventario(context.getUserContext()));
    			
    				ibp.setModel(context,associa);			
    				ibp.setDirty(false);		
    					
    				context.addHookForward("bringback",this,"doBringBackAssociaInventario");
    				HookForward hook = (HookForward)context.findForward("bringback");
    				hook.addParameter("dettagliDaInventariare", dettagliDaInventariare);
    				return context.addBusinessProcess(ibp);
    			}
    			else{
    				if (bp!=null){
    					bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    					return context.findDefaultForward();
    				}
    				else if( bp_att!=null){
    					bp_att.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    					return context.findDefaultForward();
    				}else
       					return context.findDefaultForward();        				
    			}
    		}
    	}
    	/**
    	 * creo una nuova istanza di buono di carico; lo inizializzo, aggiungo i dettagli
    	 * selezionati e ne richiedo l'apertura. Se esistevano già dei buoni di carico, li
    	 * elimino
    	 *
    	 * @param context	L'ActionContext della richiesta
    	 * @return Il Forward alla pagina di risposta
    	 * @throws BusinessProcessException	
    	 * @throws ComponentException	
    	 * @throws RemoteException	Se si verifica qualche eccezione di sistema per cui non è possibile effettuare l'operazione
    	 * @throws SQLException 
    	 * @throws PersistencyException 
    	 */
    	public Forward basicDoInventariaDettagli(ActionContext context,char tipo) 
    		throws BusinessProcessException,
    				ComponentException, 
    				java.rmi.RemoteException, PersistencyException, SQLException {
    	if (tipo==Documento_genericoBulk.SPESE){
    		CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)context.getBusinessProcess();
    		Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
    		CarichiInventarioTable carichi = documento.getCarichiInventarioHash();
    		if (carichi != null && !carichi.isEmpty()) {
    			BuonoCaricoScaricoComponentSession h = (BuonoCaricoScaricoComponentSession)bp.createComponentSession(
    														"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
    														BuonoCaricoScaricoComponentSession.class);
    			for (java.util.Enumeration e = ((CarichiInventarioTable)carichi.clone()).keys(); e.hasMoreElements();) {
    				Buono_carico_scaricoBulk buono = (Buono_carico_scaricoBulk)e.nextElement();
    				buono.setToBeDeleted();
    				h.eliminaConBulk(context.getUserContext(), buono);
    				carichi.remove(buono);
    			}
    			for (java.util.Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
    				Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)i.next();
    				if (riga.isInventariato() && !documento.getHa_beniColl()) riga.setInventariato(false);
    			}
    		}
    	
    		java.util.List dettagliDaInventariare = getDettagliDaInventariare(context, bp.getDettaglio().getDetails().iterator());
    		if (dettagliDaInventariare != null && !dettagliDaInventariare.isEmpty()) {
    			CRUDCaricoInventarioBP ibp = (CRUDCaricoInventarioBP)context.createBusinessProcess("CRUDCaricoInventarioBP",new Object[] { "MRSWTh" });
    			Buono_carico_scaricoBulk bcs = new Buono_carico_scaricoBulk();
    		
    			bcs.setTi_documento(Buono_carico_scaricoBulk.CARICO);
    			bcs.setByDocumento(Boolean.TRUE);
    			bcs.initializeForInsert(ibp,context);
    			
    			bcs = (it.cnr.contab.inventario01.bulk.Buono_carico_scaricoBulk)ibp.createComponentSession().inizializzaBulkPerInserimento(context.getUserContext(),bcs);
    			bcs.completeFrom(dettagliDaInventariare);
    			try{
    				
    				bcs.setPg_buono_c_s(((NumerazioneTempBuonoComponentSession)EJBCommonServices.createEJB(
    									"CNRINVENTARIO01_EJB_NumerazioneTempBuonoComponentSession",
    									NumerazioneTempBuonoComponentSession.class)).getNextTempPG(context.getUserContext(),bcs));
    				
    				}catch (Throwable e){
    					throw new ComponentException (e);
    				}
    			ibp.setModel(context,bcs);
    			ibp.setStatus(ibp.INSERT);
    			ibp.setDirty(false);
    			ibp.setBy_documento(Boolean.TRUE);
    			ibp.resetChildren(context);
    			
    			context.addHookForward("bringback",this,"doBringBackInventariaDettagli");
    			HookForward hook = (HookForward)context.findForward("bringback");
    			hook.addParameter("dettagliDaInventariare", dettagliDaInventariare);
    			return context.addBusinessProcess(ibp);
    		}
    		bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    		return context.findDefaultForward();
    	}else{
    		CRUDDocumentoGenericoAttivoBP bp = (CRUDDocumentoGenericoAttivoBP)context.getBusinessProcess();
    		Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
    		CarichiInventarioTable carichi = documento.getCarichiInventarioHash();
    		if (carichi != null && !carichi.isEmpty()) {
    			BuonoCaricoScaricoComponentSession h = (BuonoCaricoScaricoComponentSession)bp.createComponentSession(
    														"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
    														BuonoCaricoScaricoComponentSession.class);
    			for (java.util.Enumeration e = ((CarichiInventarioTable)carichi.clone()).keys(); e.hasMoreElements();) {
    				Buono_carico_scaricoBulk buono = (Buono_carico_scaricoBulk)e.nextElement();
    				buono.setToBeDeleted();
    				h.eliminaConBulk(context.getUserContext(), buono);
    				carichi.remove(buono);
    			}
    			for (java.util.Iterator i = documento.getDocumento_generico_dettColl().iterator(); i.hasNext();) {
    				Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)i.next();
    				if (riga.isInventariato() && !documento.getHa_beniColl()) riga.setInventariato(false);
    			}
    		}
    	
    		java.util.List dettagliDaInventariare = getDettagliDaInventariare(context, bp.getDettaglio().getDetails().iterator());
    		if (dettagliDaInventariare != null && !dettagliDaInventariare.isEmpty()) {
    			CRUDScaricoInventarioBP ibp = (CRUDScaricoInventarioBP)context.createBusinessProcess("CRUDScaricoInventarioBP",new Object[] { "MRSWTh" });
    			Buono_carico_scaricoBulk bcs = new Buono_carico_scaricoBulk();
    		
    			bcs.setTi_documento(Buono_carico_scaricoBulk.SCARICO);
    			bcs.setByDocumento(Boolean.TRUE);
    			bcs.setPerVendita(Boolean.TRUE);
    			bcs.initializeForInsert(ibp,context);
    			
    			bcs = (it.cnr.contab.inventario01.bulk.Buono_carico_scaricoBulk)ibp.createComponentSession().inizializzaBulkPerInserimento(context.getUserContext(),bcs);
    			bcs.completeFrom(dettagliDaInventariare);
    			bcs.setUser(documento.getUser());
    			try{
    				
    				bcs.setPg_buono_c_s(((NumerazioneTempBuonoComponentSession)EJBCommonServices.createEJB(
    									"CNRINVENTARIO01_EJB_NumerazioneTempBuonoComponentSession",
    									NumerazioneTempBuonoComponentSession.class)).getNextTempPG(context.getUserContext(),bcs));
    				
    				}catch (Throwable e){
    					throw new ComponentException (e);
    				}
    			ibp.setModel(context,bcs);
    			ibp.setStatus(ibp.INSERT);
    			ibp.setDirty(false);
    			ibp.setBy_documento(Boolean.TRUE);
    			ibp.resetChildren(context);
    			
    			context.addHookForward("bringback",this,"doBringBackInventariaDettagli");
    			HookForward hook = (HookForward)context.findForward("bringback");
    			hook.addParameter("dettagliDaInventariare", dettagliDaInventariare);
    			return context.addBusinessProcess(ibp);
    		}
    		bp.setMessage("Nessun dettaglio è inventariabile o tutti i dettagli inventariabili sono già stati caricati!");
    		return context.findDefaultForward();
    	}
    }
    public Forward doRemoveFromCRUDMain_Dettaglio(ActionContext context) {
    		try {
    			CRUDDocumentoGenericoAttivoBP bp_att=null;
    			CRUDDocumentoGenericoPassivoBP bp=null;
    			if (getBusinessProcess(context)instanceof CRUDDocumentoGenericoPassivoBP)
    				 bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
    			else 
    				 bp_att = (CRUDDocumentoGenericoAttivoBP)getBusinessProcess(context);
    			if (bp!=null){
    				Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
    				java.util.Vector dettagliInventariatiEliminati = new java.util.Vector();
    				for (it.cnr.jada.util.action.SelectionIterator i = bp.getDettaglio().getSelection().iterator(); i.hasNext();) {
    					Documento_generico_rigaBulk dett = (Documento_generico_rigaBulk)bp.getDettaglio().getDetails().get(i.nextIndex());
    				
    					if (dett.getObbligazione_scadenziario() !=null && dett.getObbligazione_scadenziario().getObbligazione()!= null && 
							dett.getObbligazione_scadenziario().getObbligazione().getElemento_voce()!=null &&
							dett.getObbligazione_scadenziario().getObbligazione().getElemento_voce().getFl_inv_beni_patr().booleanValue() &&
							dett.isInventariato()){
    						dettagliInventariatiEliminati.add(dett);
    					}
    				}
	    			bp.getDettaglio().remove(context);
	    			if(dettagliInventariatiEliminati.size()!=0){
	    			for (java.util.Iterator i = dettagliInventariatiEliminati.iterator(); i.hasNext();) {
	    				Documento_generico_rigaBulk dett = (Documento_generico_rigaBulk)i.next();
	    				AssociazioniInventarioTable associazioni = documento.getAssociazioniInventarioHash();
	    				if (associazioni != null && !associazioni.isEmpty() && dett instanceof Documento_generico_rigaBulk) {
	    					Ass_inv_bene_fatturaBulk ass = documento.getAssociationWithInventarioFor(dett);
	    						if (ass != null && !ass.isPerAumentoValoreDoc()) {
	    							Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)dett;
	    							DocumentoGenericoComponentSession h = (DocumentoGenericoComponentSession)bp.createComponentSession();
	    							h.rimuoviDaAssociazioniInventario(
	    													context.getUserContext(),
	    													dettaglio,
	    													ass);
	    							documento.removeFromAssociazioniInventarioHash(ass, dettaglio);
	    						
	    					    }else if (ass !=null && ass.isPerAumentoValoreDoc()){ 
	    									BuonoCaricoScaricoComponentSession buono_session = (BuonoCaricoScaricoComponentSession)bp.createComponentSession(
	    									"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
	    									BuonoCaricoScaricoComponentSession.class);
	    									Buono_carico_scaricoBulk buono=ass.getTest_buono();
	    									buono.setToBeDeleted();
	    									buono_session.eliminaConBulk(context.getUserContext(), buono);
	    									for (java.util.Iterator iter = documento.getDocumento_generico_dettColl().iterator(); iter.hasNext();) {
	    										Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)iter.next();
	    										if (riga.isInventariato() && !documento.getHa_beniColl()) riga.setInventariato(false);
	    									}
	    									Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)dett;
	    									DocumentoGenericoComponentSession h = (DocumentoGenericoComponentSession)bp.createComponentSession();
	    									h.rimuoviDaAssociazioniInventario(
	    																context.getUserContext(),
	    																dettaglio,
	    																ass);
	    									documento.removeFromAssociazioniInventarioHash(ass, dettaglio);
	    						}
	    					 }
	    					 else{
    							CarichiInventarioTable carichi = documento.getCarichiInventarioHash();
    							if (carichi != null && !carichi.isEmpty()) {
    								BuonoCaricoScaricoComponentSession h = (BuonoCaricoScaricoComponentSession)bp.createComponentSession(
    																		"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
    																		BuonoCaricoScaricoComponentSession.class);
    								for (java.util.Enumeration e = ((CarichiInventarioTable)carichi.clone()).keys(); e.hasMoreElements();) {
    									Buono_carico_scaricoBulk buono = (Buono_carico_scaricoBulk)e.nextElement();
    									buono.setToBeDeleted();
    									h.eliminaConBulk(context.getUserContext(), buono);
    									carichi.remove(buono);
    								}
    								for (java.util.Iterator iter = documento.getDocumento_generico_dettColl().iterator(); iter.hasNext();) {
    									Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)iter.next();
    									if (riga.isInventariato() && !documento.getHa_beniColl()) riga.setInventariato(false);
    								}
    							}
    							
	    					 }
    					}
	    			}
    			}// Generici attivi
	    		else{
	    			Documento_genericoBulk documento = (Documento_genericoBulk)bp_att.getModel();
	    			java.util.Vector dettagliInventariatiEliminati = new java.util.Vector();
	    			for (it.cnr.jada.util.action.SelectionIterator i = bp_att.getDettaglio().getSelection().iterator(); i.hasNext();) {
	    				Documento_generico_rigaBulk dett = (Documento_generico_rigaBulk)bp_att.getDettaglio().getDetails().get(i.nextIndex());
    					if (dett.getAccertamento_scadenziario() !=null && dett.getAccertamento_scadenziario().getAccertamento()!= null &&
        						dett.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce()!=null){ 
    							Elemento_voceBulk elem_voce = new Elemento_voceBulk(dett.getAccertamento_scadenziario().getAccertamento().getCd_elemento_voce(),
    									dett.getAccertamento_scadenziario().getAccertamento().getEsercizio(),
    									dett.getAccertamento_scadenziario().getAccertamento().getTi_appartenenza(),
    									dett.getAccertamento_scadenziario().getAccertamento().getTi_gestione());
    							elem_voce =((Elemento_voceBulk)(((FatturaAttivaSingolaComponentSession)it.cnr.jada.util.ejb.EJBCommonServices.createEJB("CNRDOCAMM00_EJB_FatturaAttivaSingolaComponentSession",FatturaAttivaSingolaComponentSession.class)).completaOggetto(context.getUserContext(),elem_voce)));
    							if (elem_voce.getFl_inv_beni_patr().booleanValue() && dett.isInventariato())
    								dettagliInventariatiEliminati.add(dett);
    					}
    				}
	    			
	    			bp_att.getDettaglio().remove(context);
	    			for (java.util.Iterator i = dettagliInventariatiEliminati.iterator(); i.hasNext();) {
	    				Documento_generico_rigaBulk dett = (Documento_generico_rigaBulk)i.next();
	    				AssociazioniInventarioTable associazioni = documento.getAssociazioniInventarioHash();
	    				if (associazioni != null && !associazioni.isEmpty()) {
	    					Ass_inv_bene_fatturaBulk ass = documento.getAssociationWithInventarioFor(dett);
	    					if (ass != null && !ass.isPerAumentoValore()) {
	    						Documento_generico_rigaBulk dettaglio = (Documento_generico_rigaBulk)dett;
	    						DocumentoGenericoComponentSession h = (DocumentoGenericoComponentSession)bp_att.createComponentSession();
	    						h.rimuoviDaAssociazioniInventario(
	    													context.getUserContext(),
	    													dettaglio,
	    													ass);
	    						documento.removeFromAssociazioniInventarioHash(ass, dettaglio);
	    					
	    				}else if (ass !=null && ass.isPerAumentoValore()){ 
	    								BuonoCaricoScaricoComponentSession buono_session = (BuonoCaricoScaricoComponentSession)bp_att.createComponentSession(
	    								"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
	    								BuonoCaricoScaricoComponentSession.class);
	    								Buono_carico_scaricoBulk buono=ass.getTest_buono();
	    								buono.setToBeDeleted();
	    								buono_session.eliminaConBulk(context.getUserContext(), buono);
	    								for (java.util.Iterator iter = documento.getDocumento_generico_dettColl().iterator(); iter.hasNext();) {
	    									Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)iter.next();
	    									if (riga.isInventariato() && !documento.getHa_beniColl()) riga.setInventariato(false);
	    								}
	    								
	    								DocumentoGenericoComponentSession h = (DocumentoGenericoComponentSession)bp_att.createComponentSession();
	    								h.rimuoviDaAssociazioniInventario(
	    															context.getUserContext(),
	    															dett,
	    															ass);
	    								documento.removeFromAssociazioniInventarioHash(ass, dett);
	    					}
	    				}
	    					else{
	    						CarichiInventarioTable carichi = documento.getCarichiInventarioHash();
	    						if (carichi != null && !carichi.isEmpty()) {
	    							BuonoCaricoScaricoComponentSession h = (BuonoCaricoScaricoComponentSession)bp_att.createComponentSession(
	    																	"CNRINVENTARIO01_EJB_BuonoCaricoScaricoComponentSession", 
	    																	BuonoCaricoScaricoComponentSession.class);
	    							for (java.util.Enumeration e = ((CarichiInventarioTable)carichi.clone()).keys(); e.hasMoreElements();) {
	    								Buono_carico_scaricoBulk buono = (Buono_carico_scaricoBulk)e.nextElement();
	    								buono.setToBeDeleted();
	    								h.eliminaConBulk(context.getUserContext(), buono);
	    								carichi.remove(buono);
	    							}
	    							for (java.util.Iterator iter = documento.getDocumento_generico_dettColl().iterator(); iter.hasNext();) {
	    								Documento_generico_rigaBulk riga = (Documento_generico_rigaBulk)iter.next();
	    								if (riga.isInventariato() && !documento.getHa_beniColl()) riga.setInventariato(false);
	    							}
	    						}
	    			  }			
	    			}	
	    		}
    			return context.findDefaultForward();
    		} catch(Throwable e) {
    			return handleException(context,e);
    		}
    	}
    public Forward doConfermaAssocia(ActionContext context,int option) {

    	try {
    		//CRUDDocumentoGenericoPassivoBP bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
    		if (option == it.cnr.jada.util.action.OptionBP.YES_BUTTON) {
    			return basicDoAssociaDettagli(context);
    		}
    	} catch (Throwable t) {
    		return handleException(context, t);
    	}
    	return context.findDefaultForward();
    } 
   public Forward doOnStatoLiquidazioneChange(ActionContext context) {
		 try { 
			 CRUDDocumentoGenericoPassivoBP bp=null; 
	  		if (getBusinessProcess(context)instanceof CRUDDocumentoGenericoPassivoBP)
				 bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
	  		if (bp!=null){ 
				Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
				//if (documento.getTipo_documento().getCd_tipo_documento_amm().compareTo(documento.GENERICO_S)==0)
	  		 String oldCausale=documento.getCausale();
	  		 fillModel(context);
			 if(documento.getStato_liquidazione()!=null && documento.getStato_liquidazione().equals(documento.LIQ)){
		       	if(documento.getCausale()!=null){ 
		       		documento.setCausale(null);
		       	} 
		     }else if(documento.getStato_liquidazione()!=null && documento.getStato_liquidazione().equals(documento.SOSP)){
		    	 documento.setCausale(documento.ATTLIQ);
		     } else if(documento.getStato_liquidazione()!=null && documento.getStato_liquidazione().equals(documento.NOLIQ)){
		    	 documento.setCausale(documento.CONT);
		     }
		     bp.setModel(context, documento);
	  		}
		   } catch (Throwable t) {
		        return handleException(context, t);
		  }
	return context.findDefaultForward();
   }
	public Forward doOnCausaleChange(ActionContext context) {
		try {
			  CRUDDocumentoGenericoPassivoBP bp=null; 
		  		if (getBusinessProcess(context)instanceof CRUDDocumentoGenericoPassivoBP)
					 bp = (CRUDDocumentoGenericoPassivoBP)getBusinessProcess(context);
		  		if (bp!=null){
					Documento_genericoBulk documento = (Documento_genericoBulk)bp.getModel();
		  		 String oldCausale=documento.getCausale();
		  		 fillModel(context);
		         if(documento.getStato_liquidazione()!=null && documento.getStato_liquidazione().equals(documento.LIQ)){
		        	if(documento.getCausale()!=null){ 
		        		documento.setCausale(null);
		        		throw new ApplicationException("Causale non valida, per lo stato della Liquidazione");
		        	}
		         }else if(documento.getStato_liquidazione()!=null && documento.getStato_liquidazione().equals(documento.NOLIQ)){
		        	
		        	if (documento.getCausale()!= null && !documento.getCausale().equals(documento.CONT)){
		        		if(oldCausale!=null)
		        			documento.setCausale(oldCausale);
		        		else
		        			documento.setCausale(null);
		        		throw new ApplicationException("Causale non valida, per lo stato della Liquidazione");
		        	}
		         }else if(documento.getStato_liquidazione()!=null && documento.getStato_liquidazione().equals(documento.SOSP)){
		        	if (documento.getCausale()!= null && (!documento.getCausale().equals(documento.ATTLIQ)&&!documento.getCausale().equals(documento.CONT))){
		        		if(oldCausale!=null )
		        			documento.setCausale(oldCausale);
		        		else
		        			documento.setCausale(null);
	        		  throw new ApplicationException("Causale non valida, per lo stato della Liquidazione");
		        	}
		        }
		 	       
		        bp.setModel(context, documento);
		  	}
		  } catch (Throwable t) {
		      return handleException(context, t);
		  }
		 return context.findDefaultForward();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy