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

it.cnr.contab.ordmag.ordini.action.CRUDOrdineAcqAction 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.ordmag.ordini.action;

import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.persistence.PersistenceException;

import it.cnr.contab.anagraf00.core.bulk.AnagraficoBulk;
import it.cnr.contab.anagraf00.core.bulk.TerzoBulk;
import it.cnr.contab.config00.bp.CRUDConfigAnagContrattoBP;
import it.cnr.contab.config00.contratto.bulk.ContrattoBulk;
import it.cnr.contab.config00.pdcfin.bulk.Elemento_voceBulk;
import it.cnr.contab.config00.sto.bulk.Unita_organizzativaBulk;
import it.cnr.contab.docamm00.bp.IDocumentoAmministrativoBP;
import it.cnr.contab.docamm00.bp.TitoloDiCreditoDebitoBP;
import it.cnr.contab.docamm00.docs.bulk.Filtro_ricerca_obbligazioniVBulk;
import it.cnr.contab.docamm00.docs.bulk.IDocumentoAmministrativoBulk;
import it.cnr.contab.docamm00.docs.bulk.ObbligazioniTable;
import it.cnr.contab.docamm00.ejb.CategoriaGruppoInventComponentSession;
import it.cnr.contab.docamm00.tabrif.bulk.Bene_servizioBulk;
import it.cnr.contab.docamm00.tabrif.bulk.Categoria_gruppo_inventBulk;
import it.cnr.contab.docamm00.tabrif.bulk.Categoria_gruppo_voceBulk;
import it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP;
import it.cnr.contab.doccont00.core.bulk.ObbligazioneBulk;
import it.cnr.contab.doccont00.core.bulk.Obbligazione_scadenzarioBulk;
import it.cnr.contab.doccont00.core.bulk.OptionRequestParameter;
import it.cnr.contab.doccont00.ejb.ObbligazioneAbstractComponentSession;
import it.cnr.contab.ordmag.anag00.LuogoConsegnaMagBulk;
import it.cnr.contab.ordmag.anag00.MagazzinoBulk;
import it.cnr.contab.ordmag.anag00.NumerazioneOrdBulk;
import it.cnr.contab.ordmag.anag00.UnitaMisuraBulk;
import it.cnr.contab.ordmag.anag00.UnitaOperativaOrdBulk;
import it.cnr.contab.ordmag.ordini.bp.CRUDOrdineAcqBP;
import it.cnr.contab.ordmag.ordini.bulk.OrdineAcqBulk;
import it.cnr.contab.ordmag.ordini.bulk.OrdineAcqConsegnaBulk;
import it.cnr.contab.ordmag.ordini.bulk.OrdineAcqRigaBulk;
import it.cnr.contab.ordmag.ordini.ejb.OrdineAcqComponentSession;
import it.cnr.jada.action.ActionContext;
import it.cnr.jada.action.BusinessProcessException;
import it.cnr.jada.action.Forward;
import it.cnr.jada.action.HookForward;
import it.cnr.jada.bulk.ValidationException;
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.BulkBP;
import it.cnr.jada.util.action.CRUDBP;

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

public CRUDOrdineAcqAction() {
        super();
    }
///**
// * 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 doBringBackSearchFindUnitaMisura(ActionContext context,
	OrdineAcqRigaBulk riga,
	UnitaMisuraBulk unitaMisura) 
	throws java.rmi.RemoteException {

	riga.setUnitaMisura(unitaMisura);
	((CRUDBP)context.getBusinessProcess()).setDirty(true);
		
	try{
		if (unitaMisura!=null && riga.getBeneServizio() != null && riga.getBeneServizio().getUnitaMisura() != null && unitaMisura.getCdUnitaMisura().equals(riga.getBeneServizio().getUnitaMisura().getCdUnitaMisura())) {
			riga.setCoefConv(BigDecimal.ONE);
		} else {
			riga.setCoefConv(null);
		}
		return context.findDefaultForward();

	} catch(Exception e) {
		return handleException(context,e);
	}
}
public Forward doBringBackSearchFindNumerazioneOrd(ActionContext context,
		OrdineAcqBulk ordine,
		NumerazioneOrdBulk num) 
		throws java.rmi.RemoteException {

		ordine.setNumerazioneOrd(num);
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
			
		try{
			if (num!=null) {
				ordine.setTiAttivita(num.getTi_istituz_commerc());
				ordine.setPercProrata(num.getPercProrata());
			}
			return context.findDefaultForward();

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

public Forward doBlankSearchFind_contratto(ActionContext context, OrdineAcqBulk ordine) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
        ordine.setContratto(new ContrattoBulk());
		ordine.setResponsabileProcPers(null);
		ordine.setCup(null);
		ordine.setCig(null);
		ordine.setDirettorePers(null);
		ordine.setFirmatarioPers(null);
		ordine.setProcedureAmministrative(null);
		ordine.setTerzoCdr(null);
		ordine.setReferenteEsterno(null);
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackSearchFind_contratto(ActionContext context,
		OrdineAcqBulk ordine,
		ContrattoBulk contratto) 
		throws java.rmi.RemoteException {

		ordine.setContratto(contratto);
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		if (contratto != null){
			ordine.setResponsabileProcPers(contratto.getResponsabile());
			ordine.setCup(contratto.getCup());
			ordine.setCig(contratto.getCig());
			ordine.setDirettorePers(contratto.getDirettore());
			ordine.setFirmatarioPers(contratto.getFirmatario());
			ordine.setProcedureAmministrative(contratto.getProcedura_amministrativa());
			ordine.setTerzoCdr(contratto.getFigura_giuridica_interna());
			ordine.setReferenteEsterno(contratto.getResp_esterno());
			if(ordine.getFornitore() == null ||(ordine.getFornitore() != null && ordine.getFornitore().getCd_terzo()==null))
				ordine.setFornitore(contratto.getFigura_giuridica_esterna());
				doBringBackSearchFindFornitore(context, ordine, contratto.getFigura_giuridica_esterna());
			}
		return context.findDefaultForward();
}
public Forward doBlankSearchFindBeneServizio(ActionContext context, OrdineAcqRigaBulk riga) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
        riga.setBeneServizio(new Bene_servizioBulk());
        riga.setUnitaMisura(null);
        riga.setCoefConv(null);
        riga.setDspTipoConsegna(null);
        riga.setTipoConsegnaDefault(null);
        riga.setVoceIva(null);
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackSearchFindBeneServizio(ActionContext context,
		OrdineAcqRigaBulk riga,
		Bene_servizioBulk bene) 
		throws java.rmi.RemoteException {

		riga.setBeneServizio(bene);
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		if (bene != null){
			riga.setDsBeneServizio(bene.getDs_bene_servizio());
			riga.setCdBeneServizio(bene.getCd_bene_servizio());
			if (bene.getUnitaMisura() != null){
				riga.setUnitaMisura(bene.getUnitaMisura());
				riga.setCoefConv(BigDecimal.ONE);
			}
			if (bene.getTipoGestione() != null){
				riga.setDspTipoConsegna(bene.getTipoGestione());
		        riga.setTipoConsegnaDefault(bene.getTipoGestione());
			}
			if (bene.getVoce_iva() != null){
				riga.setVoceIva(bene.getVoce_iva());
			}
		}
		return context.findDefaultForward();
}
public Forward doBlankSearchFindObbligazioneScadenzario(ActionContext context, OrdineAcqConsegnaBulk cons) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		if (cons.getObbligazioneScadenzario() != null && cons.getObbligazioneScadenzario().getPg_obbligazione() != null ) {
			ordine.removeFromOrdineObbligazioniHash(cons);
	        cons.setObbligazioneScadenzario(new Obbligazione_scadenzarioBulk());
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackSearchFindObbligazioneScadenzario(ActionContext context,
		OrdineAcqConsegnaBulk cons,
		Obbligazione_scadenzarioBulk obblScad) 
		throws java.rmi.RemoteException {

		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		cons.setObbligazioneScadenzario(obblScad);
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		if (obblScad != null){
			OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
			ordine.addToOrdineObbligazioniHash(obblScad, cons);

			cons.setObbligazioneInseritaSuConsegna(true);
		}
		return context.findDefaultForward();
}
public Forward doBringBackSearchFindMagazzino(ActionContext context,
		OrdineAcqRigaBulk riga,
		MagazzinoBulk magazzino) 
		throws java.rmi.RemoteException {

		riga.setDspMagazzino(magazzino);
		gestioneConsegnaNonPresente(riga);
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setMagazzino(riga.getDspMagazzino());
			consegna.setToBeUpdated();
		}
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		if (magazzino != null){
			riga.setDspLuogoConsegna(magazzino.getLuogoConsegnaMag());
			for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
				OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
				consegna.setLuogoConsegnaMag(riga.getDspLuogoConsegna());
				consegna.setToBeUpdated();
			}
		}
		return context.findDefaultForward();
}

public Forward doBringBackSearchFindMagazzino(ActionContext context,
		OrdineAcqConsegnaBulk cons,
		MagazzinoBulk magazzino) 
		throws java.rmi.RemoteException {

		cons.setMagazzino(magazzino);
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			riga.setDspMagazzino(cons.getMagazzino());
		}
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		if (magazzino != null){
			cons.setLuogoConsegnaMag(magazzino.getLuogoConsegnaMag());
			if (riga.getRigheConsegnaColl().size() == 1){
				riga.setDspLuogoConsegna(cons.getLuogoConsegnaMag());
			}
		}
		return context.findDefaultForward();
}

public Forward doBlankSearchFindMagazzino(ActionContext context, OrdineAcqRigaBulk riga) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
        riga.setDspMagazzino(new MagazzinoBulk());
        riga.setDspLuogoConsegna(new LuogoConsegnaMagBulk());
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setMagazzino(riga.getDspMagazzino());
			consegna.setLuogoConsegnaMag(riga.getDspLuogoConsegna());
			consegna.setToBeUpdated();
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBlankSearchFindMagazzino(ActionContext context, OrdineAcqConsegnaBulk cons) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
    	cons.setMagazzino(new MagazzinoBulk());
    	cons.setLuogoConsegnaMag(new LuogoConsegnaMagBulk());
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			riga.setDspMagazzino(cons.getMagazzino());
			riga.setDspLuogoConsegna(cons.getLuogoConsegnaMag());
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackSearchFindUnitaOperativaOrdDest(ActionContext context,
		OrdineAcqRigaBulk riga,
		UnitaOperativaOrdBulk uop) 
		throws java.rmi.RemoteException {

		riga.setDspUopDest(uop);
		gestioneConsegnaNonPresente(riga);
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setUnitaOperativaOrd(riga.getDspUopDest());
			consegna.setToBeUpdated();
		}
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		return context.findDefaultForward();
}

public Forward doBringBackSearchFindUnitaOperativaOrdDest(ActionContext context,
		OrdineAcqConsegnaBulk cons,
		UnitaOperativaOrdBulk uop) 
		throws java.rmi.RemoteException {

		cons.setUnitaOperativaOrd(uop);
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			riga.setDspUopDest(cons.getUnitaOperativaOrd());
		}
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		return context.findDefaultForward();
}

public Forward doBlankSearchFindUnitaOperativaOrdDest(ActionContext context, OrdineAcqRigaBulk riga) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
        riga.setDspUopDest(new UnitaOperativaOrdBulk());
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setUnitaOperativaOrd(riga.getDspUopDest());
			consegna.setToBeUpdated();
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBlankSearchFindUnitaOperativaOrdDest(ActionContext context, OrdineAcqConsegnaBulk cons) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
    	cons.setUnitaOperativaOrd(new UnitaOperativaOrdBulk());
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			riga.setDspUopDest(cons.getUnitaOperativaOrd());
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackSearchFindLuogoConsegnaMag(ActionContext context,
		OrdineAcqRigaBulk riga,
		LuogoConsegnaMagBulk luogo) 
		throws java.rmi.RemoteException {

		riga.setDspLuogoConsegna(luogo);
		gestioneConsegnaNonPresente(riga);
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setLuogoConsegnaMag(riga.getDspLuogoConsegna());
			consegna.setToBeUpdated();
		}
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		return context.findDefaultForward();
}

public Forward doBringBackSearchFindLuogoConsegnaMag(ActionContext context,
		OrdineAcqConsegnaBulk cons,
		LuogoConsegnaMagBulk luogo) 
		throws java.rmi.RemoteException {

		cons.setLuogoConsegnaMag(luogo);
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			riga.setDspLuogoConsegna(cons.getLuogoConsegnaMag());
		}
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		return context.findDefaultForward();
}

public Forward doBlankSearchFindLuogoConsegnaMag(ActionContext context, OrdineAcqRigaBulk riga) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
        riga.setDspLuogoConsegna(new LuogoConsegnaMagBulk());
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setLuogoConsegnaMag(riga.getDspLuogoConsegna());
			consegna.setToBeUpdated();
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBlankSearchFindLuogoConsegnaMag(ActionContext context, OrdineAcqConsegnaBulk cons) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
    	cons.setLuogoConsegnaMag(new LuogoConsegnaMagBulk());
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			riga.setDspLuogoConsegna(cons.getLuogoConsegnaMag());
		}
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBlankSearchFindUnitaOperativaOrd(ActionContext context, OrdineAcqBulk ordine) throws java.rmi.RemoteException {

    try {
        //imposta i valori di default per il tariffario
    	ordine.setUnitaOperativaOrd(new UnitaOperativaOrdBulk());
    	ordine.setNumerazioneOrd(new NumerazioneOrdBulk());
		ordine.setTiAttivita(null);
		ordine.setPercProrata(null);
        return context.findDefaultForward();

    } catch (Exception e) {
        return handleException(context, e);
    }
}
public Forward doBringBackSearchFindUnitaOperativaOrd(ActionContext context,
		OrdineAcqBulk ordine,
		UnitaOperativaOrdBulk uop) 
		throws java.rmi.RemoteException {

		ordine.setUnitaOperativaOrd(uop);
		((CRUDBP)context.getBusinessProcess()).setDirty(true);
		if (uop != null){
			CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();

			try {
				OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
				h.completaOrdine(context.getUserContext(), ordine);
				try {
					bp.setModel(context,ordine);
				} catch (BusinessProcessException e) {
				}
			} catch (BusinessProcessException e) {
				return handleException(context,e);
			} catch (java.rmi.RemoteException e) {
				return handleException(context,e);
			} catch (PersistenceException e) {
				return handleException(context,e);
			} catch (PersistencyException e) {
				return handleException(context,e);
			} catch (ComponentException e) {
				return handleException(context,e);
			}
		}
//		try{
//			if (riga.getUnitaMisura()!=null && riga.getUnitaMisura().getCdUnitaMisura()!=null && riga.getBeneServizio() != null && riga.getBeneServizio().getUnitaMisura() != null && riga.getUnitaMisura().getCdUnitaMisura().equals(riga.getBeneServizio().getUnitaMisura().getCdUnitaMisura())) {
//				riga.setCoefConv(BigDecimal.ONE);
//			} else {
//				riga.setCoefConv(null);
//			}
//			return context.findDefaultForward();
//
//		} catch(Exception e) {
//			return handleException(context,e);
//		}
		return context.findDefaultForward();
}
public Forward doTab(ActionContext context,String tabName,String pageName) 
{
	try
	{
		fillModel( context );
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();

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

		if( bp.isEditable() && !bp.isSearching() && bp.getTab( tabName ).equalsIgnoreCase("tabOrdineAcq"))
		{
		}	
        if ("tabOrdineAllegati".equalsIgnoreCase(bp.getTab(tabName))) {
			fillModel( context );
		}
		if ("tabOrdineObbligazioni".equalsIgnoreCase(bp.getTab(tabName))) {
			try {
				fillModel( context );
				if (!bp.isSearching())
					controllaQuadraturaObbligazioni(context, ordine);
			} catch (it.cnr.jada.comp.ApplicationException e) {
				bp.setErrorMessage(e.getMessage());
			}
		}
		return super.doTab( context, tabName, pageName );		
	}
	catch(Throwable e) 
	{
		return handleException(context,e);
	}	
}

private void controllaQuadraturaObbligazioni(ActionContext context, OrdineAcqBulk ordine) 
		throws it.cnr.jada.comp.ComponentException {

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		
		try {
			OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
			h.controllaQuadraturaObbligazioni(context.getUserContext(), ordine);
		} catch (PersistencyException e) {
			bp.handleException(e);
		} catch (java.rmi.RemoteException e) {
			bp.handleException(e);
		} catch (BusinessProcessException e) {
			bp.handleException(e);
		}
	}

@Override
public Forward doSalva(ActionContext actioncontext) throws RemoteException {
	try
	{
		fillModel(actioncontext);
		gestioneSalvataggio(actioncontext);
		return actioncontext.findDefaultForward();
	}
	catch(ValidationException validationexception)
	{
		getBusinessProcess(actioncontext).setErrorMessage(validationexception.getMessage());
	}
	catch(Throwable throwable)
	{
		return handleException(actioncontext, throwable);
	}
	return actioncontext.findDefaultForward();
}
private void gestioneSalvataggio(ActionContext actioncontext) throws ValidationException, BusinessProcessException {
	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)actioncontext.getBusinessProcess();
	bp.getObbligazioniController().setModelIndex(actioncontext, -1);
	getBusinessProcess(actioncontext).save(actioncontext);
	postSalvataggio(actioncontext);
}

public Forward doSalvaDefinitivo(ActionContext actioncontext) throws RemoteException {
	try
	{
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(actioncontext);
		fillModel(actioncontext);
		OrdineAcqBulk ordine = (OrdineAcqBulk) bp.getModel();
		if (ordine.isStatoDefinitivo()){
			ordine.setStato(OrdineAcqBulk.STATO_DEFINITIVO);
		}
		if (ordine.isStatoInserito()){
			try {
				OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
				if (h.isUtenteAbilitatoValidazioneOrdine(actioncontext.getUserContext(), ordine)){
//					ordine.setStato(OrdineAcqBulk.STATO_INVIATA_ORDINE);
				} else {
				 	ordine.setStato(OrdineAcqBulk.STATO_DEFINITIVO);
				}
				try {
					bp.setModel(actioncontext,ordine);
				} catch (BusinessProcessException e) {
				}
			} catch (java.rmi.RemoteException e) {
				return handleException(actioncontext,e);
			} catch (PersistenceException e) {
				return handleException(actioncontext,e);
			}

		}
		gestioneSalvataggio(actioncontext);
		return actioncontext.findDefaultForward();
	}
	catch(ValidationException validationexception)
	{
		getBusinessProcess(actioncontext).setErrorMessage(validationexception.getMessage());
	}
	catch(Throwable throwable)
	{
		return handleException(actioncontext, throwable);
	}
	return actioncontext.findDefaultForward();
}
protected void postSalvataggio(ActionContext context) throws BusinessProcessException {
    CRUDOrdineAcqBP bp= (CRUDOrdineAcqBP) getBusinessProcess(context);
	bp.gestionePostSalvataggio(context);
}
public Forward doBringBackSearchFindFornitore(ActionContext context,
		OrdineAcqBulk ordine,
		TerzoBulk fornitoreTrovato) 
		throws java.rmi.RemoteException {
			
		try{
			if (fornitoreTrovato != null){
				ordine.setFornitore(fornitoreTrovato);
				ordine.setNome(fornitoreTrovato.getAnagrafico().getNome());
				ordine.setCognome(fornitoreTrovato.getAnagrafico().getCognome());
				ordine.setRagioneSociale(fornitoreTrovato.getAnagrafico().getRagione_sociale());
				ordine.setCodiceFiscale(fornitoreTrovato.getAnagrafico().getCodice_fiscale());
				ordine.setPartitaIva(fornitoreTrovato.getAnagrafico().getPartita_iva());
			}
		return context.findDefaultForward();

		} catch(Exception e) {
			return handleException(context,e);
		}
	}
public Forward doFreeSearchFindFornitore(ActionContext context) {
	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
	TerzoBulk tb = new TerzoBulk();
	tb.setAnagrafico(new AnagraficoBulk());
	return freeSearch(context,bp.getFormField("fornitore"),tb);
}
public Forward doBlankSearchFindFornitore(ActionContext context,
		OrdineAcqBulk ordine) 
		throws java.rmi.RemoteException {
			
		try{
			TerzoBulk tb = new TerzoBulk();
			tb.setAnagrafico(new AnagraficoBulk());
			ordine.setFornitore(tb);
			ordine.setNome(null);
			ordine.setCognome(null);
			ordine.setRagioneSociale(null);
			ordine.setCodiceFiscale(null);
			ordine.setPartitaIva(null);
			if (ordine.getContratto() != null && ordine.getContratto().getPg_contratto() != null){
				ordine.setContratto(new ContrattoBulk());
				doBlankSearchFind_contratto(context, ordine);
			}
			return context.findDefaultForward();

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

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		java.util.List models = bp.getRighe().getSelectedModels(context);
		Forward forward = context.findDefaultForward();
		if (models == null || models.isEmpty())
			bp.setErrorMessage("Per procedere, selezionare i dettagli da associare agli impegni!");
		else {
			OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
			if (ordine.getFornitore() == null || ordine.getFornitore().getCrudStatus() == it.cnr.jada.bulk.OggettoBulk.UNDEFINED)
				throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario impostare un fornitore!");

			controllaSelezionePerContabilizzazione(context, models.iterator());
			try{
			List lista = recuperoListaCapitoli(context, models.iterator());
			forward = basicDoRicercaObbligazione(context, ordine, models, lista);
			} catch(ApplicationException e) {
				throw new it.cnr.jada.comp.ApplicationException(e.getMessage());
			}		
		}
		return forward;
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
protected void controllaSelezionePerContabilizzazione(ActionContext context, java.util.Iterator selectedModels)
		throws it.cnr.jada.comp.ApplicationException {

		if (selectedModels != null) {
			while(selectedModels.hasNext()) {
				OrdineAcqRigaBulk rigaSelected = (OrdineAcqRigaBulk)selectedModels.next();
				if (rigaSelected.getDspObbligazioneScadenzario() != null && rigaSelected.getDspObbligazioneScadenzario().getEsercizio_originale() != null){
					throw new it.cnr.jada.comp.ApplicationException("Il dettaglio \"" + rigaSelected.getRiga() + "\" è già stato associato ad impegno! Modificare la selezione.");
				}
				if (rigaSelected.getRigheConsegnaColl() != null && !rigaSelected.getRigheConsegnaColl().isEmpty()){
					for (Object bulk : rigaSelected.getRigheConsegnaColl()){
						OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)bulk;
						if (cons.getObbligazioneScadenzario() != null && cons.getObbligazioneScadenzario().getEsercizio_originale() != null){
							throw new it.cnr.jada.comp.ApplicationException("Il dettaglio \"" + rigaSelected.getRiga() + "\" è già stato associato ad impegno! Modificare la selezione.");
						}
					}
					
				}
			}
		}
	}
protected java.util.List recuperoListaCapitoli(ActionContext context, java.util.Iterator selectedModels)
		throws ComponentException, PersistencyException, IntrospectionException, RemoteException, BusinessProcessException {
	
		if (selectedModels != null) {
			java.util.List titoliCapitoli=new ArrayList<>();
			java.util.Vector categorieGruppo = new java.util.Vector();
			int count = 0;
			
			while(selectedModels.hasNext()) {
				count += 1;
				OrdineAcqRigaBulk rigaSelected = (OrdineAcqRigaBulk)selectedModels.next();
				Bene_servizioBulk beneServizio = rigaSelected.getBeneServizio();
				if (beneServizio == null)
					throw new it.cnr.jada.comp.ApplicationException("Valorizzare il bene/servizio per il dettaglio " + ((rigaSelected.getRiga() == null) ? "" : "\"" + rigaSelected.getRiga() + "\"") + "! Operazione interrotta.");
				if (beneServizio.getCategoria_gruppo() == null)
					throw new it.cnr.jada.comp.ApplicationException("Il bene/servizio \"" + beneServizio.getDs_bene_servizio() + "\" non ha definito alcuna categoria di appartenenza! Operazione interrotta.");
				else
					if (categorieGruppo.isEmpty())
						categorieGruppo.add(beneServizio.getCategoria_gruppo());
					else 
						for (java.util.Iterator i = ((java.util.Vector)categorieGruppo.clone()).iterator(); i.hasNext();) {
							Categoria_gruppo_inventBulk cat = (Categoria_gruppo_inventBulk)i.next();
							if (!it.cnr.jada.bulk.BulkCollections.containsByPrimaryKey(categorieGruppo, beneServizio.getCategoria_gruppo()))
								categorieGruppo.add(beneServizio.getCategoria_gruppo());
						}

			}
			CategoriaGruppoInventComponentSession h= (CategoriaGruppoInventComponentSession)
					context.getBusinessProcess().createComponentSession(
								"CNRDOCAMM00_EJB_CategoriaGruppoInventComponentSession",
								CategoriaGruppoInventComponentSession.class);
			for (java.util.Iterator i = ((java.util.Vector)categorieGruppo.clone()).iterator(); i.hasNext();) {
				Categoria_gruppo_inventBulk cat = (Categoria_gruppo_inventBulk)i.next();
				java.util.List titoliCapitoliCatGrp = h.findAssVoceFList(context.getUserContext(), cat);
				if (titoliCapitoliCatGrp == null)
					throw new it.cnr.jada.comp.ApplicationException("Alla categoria " + cat.getCd_categoria_gruppo() + "\" non è stato attribuita l'associazione al capitolo di spesa");
				if (titoliCapitoli.isEmpty()){
					for (java.util.Iterator k = titoliCapitoliCatGrp.iterator(); k.hasNext();) {
						Categoria_gruppo_voceBulk assVoce = (Categoria_gruppo_voceBulk)k.next();
						titoliCapitoli.add(assVoce.getElemento_voce());
					}
				}
				else 
					for (java.util.Iterator k = titoliCapitoliCatGrp.iterator(); k.hasNext();) {
						Categoria_gruppo_voceBulk assVoce = (Categoria_gruppo_voceBulk)k.next();
						if (!it.cnr.jada.bulk.BulkCollections.containsByPrimaryKey(titoliCapitoli, assVoce.getElemento_voce()))
							titoliCapitoli.add(assVoce.getElemento_voce());
					}
			}
			
			if (titoliCapitoli !=null && !titoliCapitoli.isEmpty())
				return titoliCapitoli;		
		}
	return null;
	}
protected java.math.BigDecimal calcolaTotaleSelezionati(
		java.util.List selectedModels,
		boolean escludiIVA)
		throws it.cnr.jada.comp.ApplicationException {

		java.math.BigDecimal importo = new java.math.BigDecimal(0);
		boolean escludiIVAInt=false;
		boolean escludiIVAOld=escludiIVA;
		if (selectedModels != null) {
			for (java.util.Iterator i = selectedModels.iterator(); i.hasNext();) {
				escludiIVA=escludiIVAOld;
				OrdineAcqRigaBulk rigaSelected = (OrdineAcqRigaBulk)i.next();
					
				java.math.BigDecimal imTotale = (escludiIVA) ?
														rigaSelected.getImImponibile() :
														rigaSelected.getImTotaleRiga();
				importo = importo.add(imTotale);
			}
		}

		importo = importo.setScale(2, java.math.BigDecimal.ROUND_HALF_UP );
		return importo;
	}
protected java.math.BigDecimal calcolaTotaleObbligazioniAssociate(
		java.util.List selectedModels,
		boolean escludiIVA)
		throws it.cnr.jada.comp.ApplicationException {

		java.math.BigDecimal importo = new java.math.BigDecimal(0);
		boolean escludiIVAInt=false;
		boolean escludiIVAOld=escludiIVA;
		if (selectedModels != null) {
			for (java.util.Iterator i = selectedModels.iterator(); i.hasNext();) {
				escludiIVA=escludiIVAOld;
				OrdineAcqConsegnaBulk consSelected = (OrdineAcqConsegnaBulk)i.next();
					
				java.math.BigDecimal imTotale = (escludiIVA) ?
							consSelected.getImImponibile() :
							consSelected.getImTotaleConsegna();
				importo = importo.add(imTotale);
			}
		}

		importo = importo.setScale(2, java.math.BigDecimal.ROUND_HALF_UP );
		return importo;
	}
private Forward basicDoRicercaObbligazione(
		ActionContext context, 
		OrdineAcqBulk ordine,
		java.util.List models,
		java.util.List listaCapitoli) {

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		try {
			Unita_organizzativaBulk uoImpegno = null;
			Iterator righeSelezionate = models.iterator();
			if (righeSelezionate != null) {
				while(righeSelezionate.hasNext()) {
					OrdineAcqRigaBulk rigaSelected = (OrdineAcqRigaBulk)righeSelezionate.next();
					for (Object consegna : rigaSelected.getRigheConsegnaColl()){
						OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)consegna;
						OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
						Unita_organizzativaBulk uo = h.recuperoUoPerImpegno(context.getUserContext(), cons);
						if (uoImpegno == null){
							uoImpegno = uo;
						} else if (!uoImpegno.equalsByPrimaryKey(uo)){
							throw new it.cnr.jada.comp.ApplicationException("Selezione non valida. Esistono diverse unità organizzative collegate alle righe selezionate, correggere la selezione.");
						}
					}
					if (uoImpegno == null){
						throw new it.cnr.jada.comp.ApplicationException("Selezionare righe con un'unità organizzativa.");
					}
				}
			}

			Filtro_ricerca_obbligazioniVBulk filtro = new Filtro_ricerca_obbligazioniVBulk();
			filtro.setFornitore(ordine.getFornitore());
			filtro.setDs_obbligazione("Ordine");
			filtro.setIm_importo(calcolaTotaleSelezionati(models, false));
			filtro.setListaVociSelezionabili(listaCapitoli);
			filtro.setContratto(ordine.getContratto());
			filtro.setCd_unita_organizzativa(uoImpegno.getCd_unita_organizzativa());
			if (filtro.getData_scadenziario() == null)
				filtro.setFl_data_scadenziario(Boolean.FALSE);		
			if (models == null || models.isEmpty())
				filtro.setFl_importo(Boolean.FALSE);

			BulkBP robp = (BulkBP)context.getUserInfo().createBusinessProcess(context,"RicercaObbligazioniBP", new Object[] { "MRSWTh" });
			robp.setModel(context,filtro);
			context.addHookForward("bringback",this,"doContabilizza");
			HookForward hook = (HookForward)context.findForward("bringback");
			return context.addBusinessProcess(robp);
		} catch(Throwable e) {
			return handleException(context,e);
		}
	}

protected Forward basicDoBringBackOpenObbligazioniWindow(
		ActionContext context, 
		Obbligazione_scadenzarioBulk newObblig) {

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
	List righeModel = new ArrayList<>();
	try {
		TerzoBulk creditore = newObblig.getObbligazione().getCreditore();
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		if (!ordine.getFornitore().equalsByPrimaryKey(creditore) &&
			!AnagraficoBulk.DIVERSI.equalsIgnoreCase(creditore.getAnagrafico().getTi_entita()))
			throw new it.cnr.jada.comp.ApplicationException("La scadenza selezionata deve appartenere ad un'obbligazione che ha come creditore il fornitore dell'ordine!");
/* 	Rospuc 15/01/2015 Controllo SOSPESO  compatibilità dell'obbligazione con il titolo capitolo selezionato 
   	SOSPESO PER ESERCIZIO 2015	*/
			java.util.List dettagliDaContabilizzare = (java.util.List)ordine.getObbligazioniHash().get(newObblig);
			if (dettagliDaContabilizzare != null && !dettagliDaContabilizzare.isEmpty()) {
				for (java.util.Iterator i = dettagliDaContabilizzare.iterator(); i.hasNext();) {
					Object rigaObj = i.next();
					OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)rigaObj;
					righeModel.add(cons.getOrdineAcqRiga());
				}

				List titoloCapitoloValidolist = recuperoListaCapitoli(context, righeModel.iterator());
				Elemento_voceBulk titoloCapitoloObbligazione = newObblig.getObbligazione().getElemento_voce();
				//Controllo la compatibilità dell'obbligazione con il titolo capitolo selezionato
				Boolean compatibile=null;
				if (titoloCapitoloValidolist != null && titoloCapitoloValidolist.size()!=0)
					for(Iterator i=titoloCapitoloValidolist.iterator();(i.hasNext()&&(compatibile==null||!compatibile));){ 
						Elemento_voceBulk bulk=(Elemento_voceBulk)i.next();
						if(bulk.getCd_elemento_voce().compareTo(titoloCapitoloObbligazione.getCd_elemento_voce())==0)
							compatibile=new Boolean(true);
						else
							compatibile=new Boolean(false);
					}
				   if (compatibile!= null && !compatibile)
					throw new it.cnr.jada.comp.ApplicationException("L'impegno selezionato non è compatibile con il titolo capitolo della categoria" );//+ titoloCapitoloValido.getCd_ds_elemento_voce() + "\"!");
			}
	
		Obbligazione_scadenzarioBulk obbligazione = (Obbligazione_scadenzarioBulk)bp.getObbligazioniController().getModel();
		if (obbligazione != null) {
			resyncObbligazione(context, obbligazione, newObblig);
		} else {
			basicDoContabilizzaRiga(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 {
			CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
		} catch (Exception e) {
			handleException(context, e);
		}
		return handleException(context, t);
	}
	return context.findDefaultForward();
}
private void basicDoContabilizzaRiga(
		ActionContext context,
		Obbligazione_scadenzarioBulk obbligazione,
		java.util.List selectedModels)
		throws it.cnr.jada.comp.ComponentException {

		if (obbligazione != null && selectedModels != null) {
			CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
			
			java.util.Vector dettagliDaContabilizzare = new java.util.Vector();
			List consegneDaContabilizzare = new ArrayList<>();
			if (selectedModels != null && !selectedModels.isEmpty()) {
				for (java.util.Iterator i = selectedModels.iterator(); i.hasNext();) {
					Object rigaObj = i.next();
					OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)rigaObj;
					for (Object bulk : riga.getRigheConsegnaColl()){
						OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)bulk;
						dettagliDaContabilizzare.add(cons);
					}
				}
			}

			ObbligazioniTable obbs = ((OrdineAcqBulk)bp.getModel()).getObbligazioniHash();
			if (obbs != null) {
				java.util.List dettagliContabilizzati = (java.util.List)obbs.get(obbligazione);
				if (dettagliContabilizzati != null && !dettagliContabilizzati.isEmpty())
					dettagliDaContabilizzare.addAll(dettagliContabilizzati);
			}
//			Elemento_voceBulk titoloCapitoloValido = controllaSelezionePerTitoloCapitolo(context, dettagliDaContabilizzare.iterator());
			Elemento_voceBulk titoloCapitoloObbligazione = obbligazione.getObbligazione().getElemento_voce();

			// MI - controllo se l'obbligazione ha voce coerente con il tipo di bene
			if (selectedModels != null && !selectedModels.isEmpty()) {
				for (java.util.Iterator i = selectedModels.iterator(); i.hasNext();) {
					Object rigaObj = i.next();
					OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)rigaObj;
					if (!titoloCapitoloObbligazione.getFl_inv_beni_patr().equals(riga.getBeneServizio().getFl_gestione_inventario())) {
						if (riga.getBeneServizio().getFl_gestione_inventario().booleanValue())
							throw new it.cnr.jada.comp.ApplicationException("Il titolo capitolo dell'impegno selezionato non è utilizzabile per beni patrimoniali da inventariare!");
						else
							throw new it.cnr.jada.comp.ApplicationException("Il titolo capitolo dell'impegno selezionato non è utilizzabile per beni/servizi da non inventariare!");
					}
				}
			}
			try {
			List titoloCapitoloValidolist;
			if(dettagliDaContabilizzare!=null && !dettagliDaContabilizzare.isEmpty()){
				titoloCapitoloValidolist = recuperoListaCapitoli(context, selectedModels.iterator());
				
			//Controllo la compatibilità dell'obbligazione con il titolo capitolo selezionato
			Boolean compatibile=null;
			if (titoloCapitoloValidolist != null && titoloCapitoloValidolist.size()!=0)
				for(Iterator i=titoloCapitoloValidolist.iterator();(i.hasNext()&&(compatibile==null||!compatibile));){ 
					Elemento_voceBulk bulk=(Elemento_voceBulk)i.next();
					if(bulk.getCd_elemento_voce().compareTo(titoloCapitoloObbligazione.getCd_elemento_voce())==0)
						compatibile=new Boolean(true);
					else
						compatibile=new Boolean(false);
				}
			   if (compatibile!=null && !compatibile)
				throw new it.cnr.jada.comp.ApplicationException("L'impegno selezionato non è compatibile con il titolo capitolo della categoria" );//+ titoloCapitoloValido.getCd_ds_elemento_voce() + "\"!");
			}
			} catch (PersistencyException e1) {
				bp.handleException(e1);
			} catch (IntrospectionException e1) {
				bp.handleException(e1);
			} catch (RemoteException e1) {
				bp.handleException(e1);
			} catch (BusinessProcessException e1) {
				bp.handleException(e1);
			}
			//Controllo la compatibilità dell'obbligazione con il titolo capitolo selezionato
//			if (titoloCapitoloValido != null &&
//				!(titoloCapitoloObbligazione.getCd_elemento_voce().startsWith(titoloCapitoloValido.getCd_elemento_voce()) ||
//				titoloCapitoloValido.getCd_elemento_voce().startsWith(titoloCapitoloObbligazione.getCd_elemento_voce())))
//				throw new it.cnr.jada.comp.ApplicationException("L'impegno selezionato non è compatibile con il titolo capitolo \"" + titoloCapitoloValido.getCd_ds_elemento_voce() + "\"!");
			try {
				OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
				OrdineAcqBulk ordine = h.contabilizzaDettagliSelezionati(
													context.getUserContext(), 
													(OrdineAcqBulk)bp.getModel(), 
													selectedModels, 
													obbligazione);
				try {
					bp.setModel(context,ordine);
					bp.setDirty(true);
				} catch (BusinessProcessException e) {
				}
			} catch (java.rmi.RemoteException e) {
				bp.handleException(e);
			} catch (BusinessProcessException e) {
				bp.handleException(e);
			}
			
			doCalcolaTotalePerObbligazione(context, obbligazione);
		}
	}
private void basicDoContabilizzaConsegne(
		ActionContext context,
		Obbligazione_scadenzarioBulk obbligazione,
		java.util.List selectedModels)
		throws it.cnr.jada.comp.ComponentException {
		
		java.util.List righeModel = new ArrayList<>();
		
		if (obbligazione != null && selectedModels != null) {
			CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
			
			java.util.Vector dettagliDaContabilizzare = new java.util.Vector();
			dettagliDaContabilizzare.addAll(selectedModels);
			ObbligazioniTable obbs = ((OrdineAcqBulk)bp.getModel()).getObbligazioniHash();
			if (obbs != null) {
				java.util.List dettagliContabilizzati = (java.util.List)obbs.get(obbligazione);
				if (dettagliContabilizzati != null && !dettagliContabilizzati.isEmpty())
					dettagliDaContabilizzare.addAll(dettagliContabilizzati);
			}
//			Elemento_voceBulk titoloCapitoloValido = controllaSelezionePerTitoloCapitolo(context, dettagliDaContabilizzare.iterator());
			Elemento_voceBulk titoloCapitoloObbligazione = obbligazione.getObbligazione().getElemento_voce();

			// MI - controllo se l'obbligazione ha voce coerente con il tipo di bene
			if (selectedModels != null && !selectedModels.isEmpty()) {
				for (java.util.Iterator i = selectedModels.iterator(); i.hasNext();) {
					Object rigaObj = i.next();
					OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)rigaObj;
					righeModel.add(cons.getOrdineAcqRiga());
					if (!titoloCapitoloObbligazione.getFl_inv_beni_patr().equals(cons.getOrdineAcqRiga().getBeneServizio().getFl_gestione_inventario())) {
						if (cons.getOrdineAcqRiga().getBeneServizio().getFl_gestione_inventario().booleanValue())
							throw new it.cnr.jada.comp.ApplicationException("Il titolo capitolo dell'impegno selezionato non è utilizzabile per beni patrimoniali da inventariare!");
						else
							throw new it.cnr.jada.comp.ApplicationException("Il titolo capitolo dell'impegno selezionato non è utilizzabile per beni/servizi da non inventariare!");
					}
				}
			}
			try {
			List titoloCapitoloValidolist;
			if(dettagliDaContabilizzare!=null && !dettagliDaContabilizzare.isEmpty()){
				titoloCapitoloValidolist = recuperoListaCapitoli(context, righeModel.iterator());
				
			//Controllo la compatibilità dell'obbligazione con il titolo capitolo selezionato
			Boolean compatibile=null;
			if (titoloCapitoloValidolist != null && titoloCapitoloValidolist.size()!=0)
				for(Iterator i=titoloCapitoloValidolist.iterator();(i.hasNext()&&(compatibile==null||!compatibile));){ 
					Elemento_voceBulk bulk=(Elemento_voceBulk)i.next();
					if(bulk.getCd_elemento_voce().compareTo(titoloCapitoloObbligazione.getCd_elemento_voce())==0)
						compatibile=new Boolean(true);
					else
						compatibile=new Boolean(false);
				}
			   if (compatibile!=null && !compatibile)
				throw new it.cnr.jada.comp.ApplicationException("L'impegno selezionato non è compatibile con il titolo capitolo della categoria" );//+ titoloCapitoloValido.getCd_ds_elemento_voce() + "\"!");
			}
			} catch (PersistencyException e1) {
				bp.handleException(e1);
			} catch (IntrospectionException e1) {
				bp.handleException(e1);
			} catch (RemoteException e1) {
				bp.handleException(e1);
			} catch (BusinessProcessException e1) {
				bp.handleException(e1);
			}
			//Controllo la compatibilità dell'obbligazione con il titolo capitolo selezionato
//			if (titoloCapitoloValido != null &&
//				!(titoloCapitoloObbligazione.getCd_elemento_voce().startsWith(titoloCapitoloValido.getCd_elemento_voce()) ||
//				titoloCapitoloValido.getCd_elemento_voce().startsWith(titoloCapitoloObbligazione.getCd_elemento_voce())))
//				throw new it.cnr.jada.comp.ApplicationException("L'impegno selezionato non è compatibile con il titolo capitolo \"" + titoloCapitoloValido.getCd_ds_elemento_voce() + "\"!");
			try {
				OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
				OrdineAcqBulk ordine = h.contabilizzaConsegneSelezionate(
													context.getUserContext(), 
													(OrdineAcqBulk)bp.getModel(), 
													selectedModels, 
													obbligazione);
				try {
					bp.setModel(context,ordine);
					bp.setDirty(true);
				} catch (BusinessProcessException e) {
				}
			} catch (java.rmi.RemoteException e) {
				bp.handleException(e);
			} catch (BusinessProcessException e) {
				bp.handleException(e);
			}
			
			doCalcolaTotalePerObbligazione(context, obbligazione);
		}
	}
public Forward doAddToCRUDMain_Obbligazioni(ActionContext context) {

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		bp.getRighe().getSelection().clearSelection();
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();

		if (ordine.getFornitore() == null || ordine.getFornitore().getCrudStatus() == it.cnr.jada.bulk.OggettoBulk.UNDEFINED)
			throw new it.cnr.jada.comp.ApplicationException("Per eseguire questa operazione è necessario selezionare un fornitore!");
		recuperoListaCapitoli(context, ordine.getRigheOrdineColl().iterator());
		return basicDoRicercaObbligazione(context, ordine, null, 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) {

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		bp.getRighe().getSelection().clearSelection();
		fillModel(context);
		Obbligazione_scadenzarioBulk obbligazione = (Obbligazione_scadenzarioBulk)bp.getObbligazioniController().getModel();		
		if (obbligazione == null)
			throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno a cui associare i dettagli.");

		java.util.Vector selectedModels = new java.util.Vector();
		for (java.util.Enumeration e = bp.getRighe().getElements(); e.hasMoreElements();) {
			OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)e.nextElement();
			if (riga.getDspObbligazioneScadenzario() != null && riga.getDspObbligazioneScadenzario().getEsercizio_originale() != null )
				selectedModels.add(riga);
		}
		if (selectedModels.isEmpty())
			throw new it.cnr.jada.comp.ApplicationException("Tutti i dettagli sono già stati contabilizzati!");
		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(OrdineAcqRigaBulk.class),
					"righiSet",
					"doBringBackAddToCRUDMain_Obbligazioni_DettaglioObbligazioni");
		slbp.setMultiSelection(true);
		return slbp;
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doBringBackAddToCRUDMain_Obbligazioni_DettaglioObbligazioni(ActionContext context) {

	try {
		HookForward fwd = (HookForward)context.getCaller();
		java.util.List selectedModels = (java.util.List)fwd.getParameter("selectedElements");
		if (selectedModels != null && !selectedModels.isEmpty()) {
			CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
			Obbligazione_scadenzarioBulk obbligazione = (Obbligazione_scadenzarioBulk)bp.getObbligazioniController().getModel();		
			if (obbligazione != null) {
				basicDoContabilizzaRiga(context, obbligazione, selectedModels);
				bp.setDirty(true);
			}
			doCalcolaTotalePerObbligazione(context, obbligazione);
		}
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doBringBackOpenObbligazioniWindow(ActionContext context) {

	HookForward caller = (HookForward)context.getCaller();
	Obbligazione_scadenzarioBulk obblig = (Obbligazione_scadenzarioBulk)caller.getParameter("bringback");
	if (obblig != null) {
		try {
			basicDoBringBackOpenObbligazioniWindow(context, obblig);
			
			CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
			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);
			if (bp instanceof TitoloDiCreditoDebitoBP)
				((TitoloDiCreditoDebitoBP)bp).addToDocumentiContabiliModificati(obblig);
		} catch (Throwable t) {
			return handleException(context, t);
		}
	}
	return context.findDefaultForward();
}
public Forward doCalcolaTotalePerObbligazione(ActionContext context, Obbligazione_scadenzarioBulk obbligazione) {

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
	OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		if (ordine.getOrdineObbligazioniHash() != null && obbligazione != null) {
			try {
				ordine.setImportoTotalePerObbligazione(
						calcolaTotaleObbligazioniAssociate(
								(java.util.List)ordine.getOrdineObbligazioniHash().get(obbligazione),
								false));
			} catch (it.cnr.jada.comp.ApplicationException e) {
				ordine.setImportoTotalePerObbligazione(new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP ));
			}
		} else
			ordine.setImportoTotalePerObbligazione(new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP ));
	return context.findDefaultForward();
}
public Forward doContabilizza(ActionContext context) {

	HookForward caller = (HookForward)context.getCaller();
	Obbligazione_scadenzarioBulk obblig = (Obbligazione_scadenzarioBulk)caller.getParameter("obbligazioneSelezionata");
	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
	java.util.List selectedModels = null;
	java.util.List selectedModelsCons = new ArrayList<>();
	try {
		selectedModels = bp.getRighe().getSelectedModels(context);
		bp.getRighe().getSelection().clearSelection();
	} catch (Throwable e) {
	}
	
	if (selectedModels != null){
		for (Object oggetto : selectedModels){
			OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)oggetto;
			for (Object oggettoCons : riga.getRigheConsegnaColl()){
				OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)oggettoCons;
				selectedModelsCons.add(cons);
			}
		}
	}
	if (obblig != null) {
		try {
			OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
			TerzoBulk creditore = obblig.getObbligazione().getCreditore();
			if (!ordine.getFornitore().equalsByPrimaryKey(creditore) &&
				!AnagraficoBulk.DIVERSI.equalsIgnoreCase(creditore.getAnagrafico().getTi_entita())) {
				((IDocumentoAmministrativoBulk)ordine).addToDocumentiContabiliCancellati(obblig);
				throw new it.cnr.jada.comp.ApplicationException("La scadenza selezionata deve appartenere ad un'obbligazione che ha come creditore il fornitore dell'ordine!");
			}
			Filtro_ricerca_obbligazioniVBulk filtro = (Filtro_ricerca_obbligazioniVBulk)caller.getParameter("filtroRicercaUtilizzato");
			if (filtro != null) {
				Elemento_voceBulk ev = filtro.getElemento_voce();
				if (ev != null) {
					if (!obblig.getObbligazione().getElemento_voce().getCd_elemento_voce().startsWith(ev.getCd_elemento_voce())) {
						if (!ev.getCd_elemento_voce().startsWith(obblig.getObbligazione().getElemento_voce().getCd_elemento_voce())) {
							((IDocumentoAmministrativoBulk)ordine).addToDocumentiContabiliCancellati(obblig);
							throw new it.cnr.jada.comp.ApplicationException("Il titolo capitolo dell'impegno deve essere uguale o appartenere al titolo capitolo della categoria inventario dei beni selezionati (\"" + ev.getCd_elemento_voce() + "\")!");
						}
					}
				}
			}
			Obbligazione_scadenzarioBulk obbligazione = null;
			ObbligazioniTable obbHash = ordine.getObbligazioniHash();
			if (obbHash != null && !obbHash.isEmpty())
				obbligazione = obbHash.getKey(obblig);
			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(selectedModelsCons);
					basicDoContabilizzaConsegne(context, obblig, clone);
				} else {
					obbHash.remove(obbligazione);
					basicDoContabilizzaConsegne(context, obblig, selectedModelsCons);
				}
			} else {
				basicDoContabilizzaConsegne(context, obblig, selectedModelsCons);
			}
		} 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 (!"tabOrdineAcqObbligazioni".equals(bp.getTab("tab")))
			bp.setTab("tab", "tabOrdineAcqObbligazioni");
	}
	return context.findDefaultForward();
}
/**
 * Richiede all'obbligazione di modificare in automatico la sua scadenza (quella
 * selezionata) portando la stessa ad importo pari alla sommatoria degli importi 
 * di riga dei dettagli associati. Aggiorna la mappa dei saldi per le variazioni
 * subite dall'obbligazione
 *
 * @param context	L'ActionContext della richiesta
 * @param prefix	
 * @return Il Forward alla pagina di risposta
 */
public Forward doModificaScadenzaInAutomatico(ActionContext context, String prefix) {

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();

		Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)bp.getObbligazioniController().getModel();

		if (scadenza == null)
			throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno da modificare in automatico!");
		java.util.Vector righeAssociate = (java.util.Vector)ordine.getOrdineObbligazioniHash().get(scadenza);
		if (righeAssociate == null || righeAssociate.isEmpty())
			throw new it.cnr.jada.comp.ApplicationException("Associare dei dettagli prima di aggiornare in automatico la scadenza impegno!");
		if (bp.isDeleting() &&
			!bp.isViewing() &&
			!it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext()).equals(scadenza.getEsercizio()))
			throw new it.cnr.jada.comp.ApplicationException("La scadenza selezionata appartiene all'esercizio " + scadenza.getEsercizio().intValue() + "! Operazione annullata.");

		ObbligazioneAbstractComponentSession h = CRUDVirtualObbligazioneBP.getVirtualComponentSession(context, true);

		try {
			scadenza = (Obbligazione_scadenzarioBulk)h.modificaScadenzaInAutomatico(
														context.getUserContext(), 
														scadenza, 
														ordine.getImportoTotalePerObbligazione(),
														false);
			bp.getDefferedUpdateSaldiParentBP().getDefferedUpdateSaldiBulk().addToDefferredSaldi(
										scadenza.getObbligazione(), 
										scadenza.getObbligazione().getSaldiInfo());
		} catch (it.cnr.jada.comp.ComponentException e) {
			if (e.getDetail() instanceof it.cnr.contab.doccont00.comp.CheckDisponibilitaCassaFailed)
				throw new it.cnr.jada.comp.ApplicationException(e.getDetail().getMessage());
			if (e.getDetail() instanceof it.cnr.contab.doccont00.comp.SfondamentoPdGException)
				throw new it.cnr.jada.comp.ApplicationException(e.getDetail().getMessage());
			throw e;
		}
		
		Forward fwd = basicDoBringBackOpenObbligazioniWindow(context, scadenza);

		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);
	
		return fwd;
	} catch(Exception e) {
		return handleException(context,e);
	}
}
/**
 * Gestisce la variazione manuale del valore del cambio e ricalcola tutti i totali
 */
//public Forward doOnChangeModified(ActionContext context) 
//{
//	try {
//		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
//		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
//		it.cnr.jada.bulk.PrimaryKeyHashtable vecchiTotali = new it.cnr.jada.bulk.PrimaryKeyHashtable();
//		if (fp instanceof Fattura_passiva_IBulk) {
//			for (java.util.Iterator i = ordine.getFattura_passiva_dettColl().iterator(); i.hasNext();) {
//				Fattura_passiva_rigaIBulk dettaglio = (Fattura_passiva_rigaIBulk)i.next();
//				java.math.BigDecimal vecchioTotale = dettaglio.getIm_imponibile().add(dettaglio.getIm_iva());
//				vecchioTotale = vecchioTotale.add(dettaglio.getIm_totale_addebiti());
//				vecchiTotali.put(dettaglio, vecchioTotale);
//			}
//		}
//		java.math.BigDecimal vecchioCambio = fp.getCambio();
//		fillModel( context );
//		if (fp != null) {
//			java.math.BigDecimal cambioAttuale = fp.getCambio();
//			if (cambioAttuale == null)
//				fp.setCambio((cambioAttuale = new java.math.BigDecimal(0)));
//        	cambioAttuale = cambioAttuale.setScale(4,java.math.BigDecimal.ROUND_HALF_UP);
//        	fp.setCambio(cambioAttuale);
//	        if (cambioAttuale.compareTo(new java.math.BigDecimal(0))==0){
//	        	fp.setCambio(vecchioCambio);
//	        	throw new it.cnr.jada.comp.ApplicationException("Non è stato inserito un cambio valido (>0)");
//	        }
//			if (fp.getObbligazioniHash() != null && !fp.getObbligazioniHash().isEmpty())
//				bp.setErrorMessage("Attenzione: si ricorda che modificando il valore del cambio è necessario riportare in quadratura le scadenze delle obbligazioni!");
//			if (fp.getAccertamentiHash() != null && !fp.getAccertamentiHash().isEmpty())
//				bp.setErrorMessage("Attenzione: si ricorda che modificando il valore del cambio è necessario riportare in quadratura le scadenze degli accertamenti!");
//			fp.aggiornaImportiTotali();
//			basicDoCalcolaTotaleFatturaFornitoreInEur(fp);
//			for (java.util.Iterator i = fp.getFattura_passiva_dettColl().iterator(); i.hasNext();) {
//				Fattura_passiva_rigaBulk dettaglio = (Fattura_passiva_rigaBulk)i.next();
//				if (dettaglio instanceof Fattura_passiva_rigaIBulk) {
//					java.math.BigDecimal vecchioTotale = (java.math.BigDecimal)vecchiTotali.get(dettaglio);
//					if (vecchioTotale == null)
//						vecchioTotale = new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP);
//					basicCalcolaImportoDisponibileNC(context, (Fattura_passiva_rigaIBulk)dettaglio, vecchioTotale);
//				}
//			}
//		}
//	} catch (Throwable t) {
//		return handleException(context, t);
//	}
//	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){
    	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
        try 
        {
            boolean modified = fillModel(context);
            OptionRequestParameter userConfirmation = new OptionRequestParameter();
            userConfirmation.setCheckDisponibilitaContrattoRequired(Boolean.FALSE);
            bp.setUserConfirm(userConfirmation);
            if (bp.isBringBack())
                doConfermaRiporta(context, it.cnr.jada.util.action.OptionBP.OK_BUTTON);
            else
                doSalva(context);
        } 
        catch(Throwable e){
            return handleException(context,e);
        }
    }
    return context.findDefaultForward();
}
/**
 * richiede l'apertura del pannello dell'obbligazione per la modifica della
 * scadenza selezionata
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doOpenObbligazioniWindow(ActionContext context) {

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		fillModel(context);

		Obbligazione_scadenzarioBulk scadenza = (Obbligazione_scadenzarioBulk)bp.getObbligazioniController().getModel();
		boolean viewMode = bp.isViewing();
		if (scadenza == null)
			throw new it.cnr.jada.comp.ApplicationException("Selezionare l'impegno da " + (viewMode?"visualizzare":"modificare") + " in manuale!");
		if (bp.isDeleting() &&
			!bp.isViewing() &&
			!it.cnr.contab.utenze00.bp.CNRUserContext.getEsercizio(context.getUserContext()).equals(scadenza.getEsercizio()))
			throw new it.cnr.jada.comp.ApplicationException("La scadenza selezionata appartiene all'esercizio " + scadenza.getEsercizio().intValue() + "! Operazione annullata.");
			
		if (!viewMode && bp instanceof IDocumentoAmministrativoBP) {
			IDocumentoAmministrativoBP docAmmBP = (IDocumentoAmministrativoBP)bp;
			viewMode = !docAmmBP.getDocumentoAmministrativoCorrente().isEditable();
			viewMode = !((CRUDOrdineAcqBP)docAmmBP).isManualModify();
		}
		
		String status = viewMode ?"V":"M";
		it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP nbp = it.cnr.contab.doccont00.bp.CRUDVirtualObbligazioneBP.getBusinessProcessFor(context, scadenza.getObbligazione(), status + "RSWTh");
		nbp.edit(context,scadenza.getObbligazione());
		((ObbligazioneBulk)nbp.getModel()).setFromDocAmm(true);
		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 "obbligazioni"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
public Forward doRemoveFromCRUDMain_Obbligazioni(ActionContext context) {
	
	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)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 = selection.iterator();i.hasNext();) {
		Obbligazione_scadenzarioBulk obbligazione = (Obbligazione_scadenzarioBulk)obbligazioni.get(i.nextIndex());
		java.util.Vector models = (java.util.Vector)((OrdineAcqBulk)bp.getModel()).getOrdineObbligazioniHash().get(obbligazione);
		try {
			if (models != null && models.isEmpty()) {
				OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
				ordine.getOrdineObbligazioniHash().remove(obbligazione);
				ordine.addToDocumentiContabiliCancellati(obbligazione);
			} else {
				for (java.util.Iterator it = models.iterator(); it.hasNext();) {
					OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)it.next();
					if (cons.getStato() != null && cons.getStato().equals(OrdineAcqConsegnaBulk.STATO_EVASA)){
						throw new it.cnr.jada.comp.ApplicationException("Impossibile scollegare l'impegno \"" + 
								+ obbligazione.getEsercizio_originale().intValue()
								+ "/" + obbligazione.getPg_obbligazione().longValue() + 
								"\" perchè il dettaglio collegato \"" + 
								cons.getRiga() + "/" + cons.getConsegna() +
								"\" è già stato evaso.");
					}
				}
				scollegaDettagliDaObbligazione(context, (java.util.List)models.clone());
			}
		} catch (it.cnr.jada.comp.ComponentException e) {
			return handleException(context, e);
		}

		doCalcolaTotalePerObbligazione(context, null);

		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) {

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)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());
		for (java.util.Iterator i = models.iterator(); i.hasNext();) {
			OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)i.next();
			if (cons.getStato() != null && cons.getStato().equals(OrdineAcqConsegnaBulk.STATO_EVASA)){
				throw new it.cnr.jada.comp.ApplicationException("Impossibile scollegare il dettaglio \"" + 
						cons.getRiga() + "/" + cons.getConsegna() +
							"\" perchè esiste una consegna evasa.");
			}
		}
		scollegaDettagliDaObbligazione(context, models);
	} catch (it.cnr.jada.comp.ComponentException e) {
		return handleException(context, e);
	}

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

	OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
	
	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 una richiesta di selezione dal controller "obbligazioni"
 *
 * @param context	L'ActionContext della richiesta
 * @return Il Forward alla pagina di risposta
 */
/**
 * Viene richiamato nel momento in cui si seleziona una valuta dal combo Valuta nella 
 * testata della fattura.
 * Viene ricercato il cambio valido, vengono ricalcolati i totali e ricalcolato il
 * totale in eur
 */
//public Forward doSelezionaValuta(ActionContext context) 
//{
//	try {
//		CRUDFatturaPassivaBP bp = (CRUDFatturaPassivaBP)getBusinessProcess(context);
//		Fattura_passivaBulk fattura = (Fattura_passivaBulk)bp.getModel();
//		DivisaBulk divisa = fattura.getValuta();
//		it.cnr.jada.bulk.PrimaryKeyHashtable vecchiTotali = new it.cnr.jada.bulk.PrimaryKeyHashtable();
//		if (fattura instanceof Fattura_passiva_IBulk) {
//			for (java.util.Iterator i = fattura.getFattura_passiva_dettColl().iterator(); i.hasNext();) {
//				Fattura_passiva_rigaIBulk dettaglio = (Fattura_passiva_rigaIBulk)i.next();
//				java.math.BigDecimal vecchioTotale = dettaglio.getIm_imponibile().add(dettaglio.getIm_iva());
//				vecchioTotale = vecchioTotale.add(dettaglio.getIm_totale_addebiti());
//				vecchiTotali.put(dettaglio, vecchioTotale);
//			}
//		}
//		fillModel( context );		
//		try	{
//			if (!bp.isSearching()) {
//				FatturaPassivaComponentSession h = (FatturaPassivaComponentSession)bp.createComponentSession();
//				fattura = h.cercaCambio(context.getUserContext(),fattura);
//				basicDoCalcolaTotaleFatturaFornitoreInEur(fattura);
//				for (java.util.Iterator i = fattura.getFattura_passiva_dettColl().iterator(); i.hasNext();) {
//					Fattura_passiva_rigaBulk dettaglio = (Fattura_passiva_rigaBulk)i.next();
//					if (dettaglio instanceof Fattura_passiva_rigaIBulk) {
//						java.math.BigDecimal vecchioTotale = (java.math.BigDecimal)vecchiTotali.get(dettaglio);
//						if (vecchioTotale == null)
//							vecchioTotale = new java.math.BigDecimal(0).setScale(2, java.math.BigDecimal.ROUND_HALF_UP);
//						basicCalcolaImportoDisponibileNC(context, (Fattura_passiva_rigaIBulk)dettaglio, vecchioTotale);
//					}
//				}
//
//				bp.setModel(context,fattura);
//				if (fattura.getObbligazioniHash() != null && !fattura.getObbligazioniHash().isEmpty())
//					bp.setErrorMessage("Attenzione: si ricorda che modificando il valore del cambio è necessario riportare in quadratura le scadenze delle obbligazioni!");
//				if (fattura.getAccertamentiHash() != null && !fattura.getAccertamentiHash().isEmpty())
//					bp.setErrorMessage("Attenzione: si ricorda che modificando il valore del cambio è necessario riportare in quadratura le scadenze degli accertamenti!");
//			}
//			return context.findDefaultForward();
//		} catch(it.cnr.jada.comp.ComponentException e) {
//			fattura.setValuta(divisa);
//			throw e;
//		} 
//	} catch (Throwable t) {
//		return handleException(context, t);
//	}
//}
//public Fattura_passivaBulk doSelezionaValutaDefault(ActionContext context, Fattura_passivaBulk fattura) 
//		throws ComponentException {
//		
//		try {
//			CRUDFatturaPassivaBP bp = (CRUDFatturaPassivaBP)getBusinessProcess(context);
//			FatturaPassivaComponentSession h = (FatturaPassivaComponentSession)bp.createComponentSession();
//			fattura = h.selezionaValutaDiDefault(context.getUserContext(),fattura);
//			basicDoCalcolaTotaleFatturaFornitoreInEur(fattura);
//			if (fattura.getObbligazioniHash() != null && !fattura.getObbligazioniHash().isEmpty())
//				bp.setErrorMessage("Attenzione: si ricorda che modificando il valore del cambio è necessario riportare in quadratura le scadenze delle obbligazioni!");
//			if (fattura.getAccertamentiHash() != null && !fattura.getAccertamentiHash().isEmpty())
//				bp.setErrorMessage("Attenzione: si ricorda che modificando il valore del cambio è necessario riportare in quadratura le scadenze degli accertamenti!");
//			return fattura;
//		} catch (BusinessProcessException e) {
//			throw new ComponentException(e);
//		} catch (java.rmi.RemoteException e) {
//			throw new ComponentException(e);
//		}
//	}
/**
 * Risincronizza la collezione delle obbligazioni (richiamato dopo la modifica di
 * una scadenza associata al doc amm).
 * Se questa collezione contiene in chiave la oldObblig (scadenza vecchia), essa
 * viene eliminata e i dettagli ad essa associati vengono ricontabilizzati sulla
 * newObblig (scadenza modificata dall'utente); se non ha ancora dettagli associati
 * viene semplicemente eliminata 
 * ('scollegaDettagliDaObbligazione')
 */
 
private void resyncObbligazione(
	ActionContext context,
	Obbligazione_scadenzarioBulk oldObblig, 
	Obbligazione_scadenzarioBulk newObblig) 
	throws it.cnr.jada.comp.ComponentException {

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
	OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
	java.util.Vector models = ((java.util.Vector)ordine.getOrdineObbligazioniHash().get(oldObblig));
	java.util.Vector clone = (java.util.Vector)models.clone();
	if (!clone.isEmpty())
		scollegaDettagliDaObbligazione(context, clone);
	else
		ordine.getOrdineObbligazioniHash().remove(oldObblig);

	basicDoContabilizzaConsegne(context, newObblig, clone);
}
/**
 * Risincronizza la collezione delle obbligazioni (richiamato dopo la modifica di
 * una scadenza associata al doc amm).
 * Se questa collezione contiene in chiave la oldObblig (scadenza vecchia), essa
 * viene eliminata e i dettagli ad essa associati vengono ricontabilizzati sulla
 * newObblig (scadenza modificata dall'utente); se non ha ancora dettagli associati
 * viene semplicemente eliminata 
 * Se uno dei dettagli ha un'associazione con note di credito/debito e se non 
 * sono in fase di cancellazione della fattura passiva, l'operazione viene interrotta
 */

private void scollegaDettagliDaObbligazione(ActionContext context, java.util.List models)
	throws it.cnr.jada.comp.ComponentException {

	if (models != null) {

			for (java.util.Iterator i = models.iterator(); i.hasNext();) {
				OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)i.next();
//				if (riga.isConsegnaEvasa())
//					throw new it.cnr.jada.comp.ApplicationException("Non è possibile scollegare il dettaglio \"" + dettaglio.getDs_riga_fattura() + "\". Questa operazione è permessa solo per dettagli in stato \"" + dettaglio.STATO.get(dettaglio.STATO_CONTABILIZZATO) + "\".");
				CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
				OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
				ordine.removeFromOrdineObbligazioniHash(cons);
				cons.getOrdineAcqRiga().setDspObbligazioneScadenzario(null);
				cons.getOrdineAcqRiga().setToBeUpdated();
				cons.setObbligazioneScadenzario(null);
				cons.setToBeUpdated();
			}
//		} catch (it.cnr.jada.comp.ApplicationException e) {
//			try {
//				CRUDVirtualObbligazioneBP.rollbackToSafePoint(context);
//			} catch (Throwable t) {
//				throw new ComponentException(t);
//			}
//			throw e;
//		}
	}
}
public Forward doOnImportoChange(ActionContext context) {

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();

		calcolaTotaleOrdine(context, ordine);
		
		return context.findDefaultForward();

	} catch(Throwable e) {
		return handleException(context, e);
	}
}
private void calcolaTotaleOrdine(ActionContext context, OrdineAcqBulk ordine)
		throws BusinessProcessException, RemoteException, PersistencyException {
	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
	OrdineAcqComponentSession h = (OrdineAcqComponentSession)bp.createComponentSession();
	try {
		OrdineAcqBulk ordineAggiornato = h.calcolaImportoOrdine(context.getUserContext(), ordine);
		ordine.setImImponibile(ordine.getImImponibile());
		ordine.setImIva(ordine.getImIva());
		ordine.setImIvaD(ordine.getImIvaD());
		ordine.setImTotaleOrdine(ordine.getImTotaleOrdine());
		for (java.util.Iterator i = ordine.getRigheOrdineColl().iterator(); i.hasNext();) {
			OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)i.next();
			for (java.util.Iterator k = ordineAggiornato.getRigheOrdineColl().iterator(); k.hasNext();) {
				OrdineAcqRigaBulk rigaAggiornata = (OrdineAcqRigaBulk)k.next();
				if (riga.equalsByPrimaryKey(rigaAggiornata)){
					riga.setImImponibile(rigaAggiornata.getImImponibile());
					riga.setImImponibileDivisa(rigaAggiornata.getImImponibileDivisa());
					riga.setImIva(rigaAggiornata.getImIva());
					riga.setImIvaD(rigaAggiornata.getImIvaD());
					riga.setImIvaDivisa(rigaAggiornata.getImIvaDivisa());
					riga.setImIvaNd(rigaAggiornata.getImIvaNd());
					riga.setImTotaleRiga(rigaAggiornata.getImTotaleRiga());
					for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
						OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
						for (java.util.Iterator x = rigaAggiornata.getRigheConsegnaColl().iterator(); x.hasNext();) {
							OrdineAcqConsegnaBulk consegnaAggiornata = (OrdineAcqConsegnaBulk)x.next();
							if (consegna.equalsByPrimaryKey(consegnaAggiornata)){
								consegna.setImImponibile(consegnaAggiornata.getImImponibile());
								consegna.setImImponibileDivisa(consegnaAggiornata.getImImponibileDivisa());
								consegna.setImIva(consegnaAggiornata.getImIva());
								consegna.setImIvaD(consegnaAggiornata.getImIvaD());
								consegna.setImIvaDivisa(consegnaAggiornata.getImIvaDivisa());
								consegna.setImIvaNd(consegnaAggiornata.getImIvaNd());
								consegna.setImTotaleConsegna(consegnaAggiornata.getImTotaleConsegna());
								break;
							}
						}
					}
					break;
				}
			}
		}
		aggiornaObbligazioni(context);
	} catch (ComponentException e) {
	}
}
public Forward doOnDspQuantitaChange(ActionContext context) {

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		gestioneConsegnaNonPresente(riga);
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setQuantita(riga.getDspQuantita());
			consegna.setToBeUpdated();
		}
		calcolaTotaleOrdine(context, ordine);
		return context.findDefaultForward();

	} catch(Throwable e) {
		return handleException(context, e);
	}
}
private OrdineAcqRigaBulk gestioneConsegnaNonPresente(OrdineAcqRigaBulk riga) {
	if (riga.getRigheConsegnaColl() == null || riga.getRigheConsegnaColl().isEmpty()){
		OrdineAcqConsegnaBulk consegna = new OrdineAcqConsegnaBulk();
		consegna.inizializzaConsegnaNuovaRiga();
		consegna.setRiga(riga.getRiga());
		consegna.setTipoConsegna(riga.getDspTipoConsegna());
		consegna.setDtPrevConsegna(riga.getDspDtPrevConsegna());
		riga.addToRigheConsegnaColl(consegna);
	}
	return riga;
}
public Forward doOnDspTipoConsegnaChange(ActionContext context) {

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		gestioneConsegnaNonPresente(riga);
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setTipoConsegna(riga.getDspTipoConsegna());
			consegna.setToBeUpdated();
		}
		return context.findDefaultForward();

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

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		gestioneConsegnaNonPresente(riga);
		for (java.util.Iterator j = riga.getRigheConsegnaColl().iterator(); j.hasNext();) {
			OrdineAcqConsegnaBulk consegna = (OrdineAcqConsegnaBulk)j.next();
			consegna.setDtPrevConsegna(riga.getDspDtPrevConsegna());
			consegna.setToBeUpdated();
		}
		return context.findDefaultForward();

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

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)bp.getConsegne().getModel();
			riga.setDspQuantita(cons.getQuantita());
			riga.setToBeUpdated();
		}
		calcolaTotaleOrdine(context, ordine);
		return context.findDefaultForward();

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

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)bp.getConsegne().getModel();
			riga.setDspTipoConsegna(cons.getTipoConsegna());
			riga.setToBeUpdated();
		}
		return context.findDefaultForward();

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

	try{	
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)getBusinessProcess(context);
		fillModel(context);
		OrdineAcqRigaBulk riga = (OrdineAcqRigaBulk)bp.getRighe().getModel();
		if (riga.getRigheConsegnaColl().size() == 1){
			OrdineAcqConsegnaBulk cons = (OrdineAcqConsegnaBulk)bp.getConsegne().getModel();
			riga.setDspDtPrevConsegna(cons.getDtPrevConsegna());
			riga.setToBeUpdated();
		}
		return context.findDefaultForward();

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

	CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
	try {
		bp.getObbligazioniController().setSelection(context);
	} catch (Throwable e) {
		return handleException(context, e);
	}

	doCalcolaTotalePerObbligazione(context, (Obbligazione_scadenzarioBulk)bp.getObbligazioniController().getModel());
	return context.findDefaultForward();	
}

public Forward doRemoveFromCRUDMain_Righe(ActionContext context) {

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		bp.getRighe().remove(context);
		calcolaTotaleOrdine(context, ordine);
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doRemoveFromCRUDMain_Righe_Consegne(ActionContext context) {

	try {
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
		bp.getConsegne().remove(context);
		calcolaTotaleOrdine(context, ordine);
		return context.findDefaultForward();
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doVisualizzaContratto(ActionContext context) {

	try	{
		fillModel(context);
		CRUDOrdineAcqBP bp = (CRUDOrdineAcqBP)context.getBusinessProcess();
		OrdineAcqBulk ordine = (OrdineAcqBulk)bp.getModel();
				
		if (ordine == null || ordine.getContratto() == null || ordine.getContratto().getPg_contratto() == null)
			throw new it.cnr.jada.comp.ApplicationException("Non esiste alcun Contratto da visualizzare!");

		context.addHookForward("bringback",this,"doBringBackVisualizzaContratto");

		CRUDConfigAnagContrattoBP contrattoBP = (CRUDConfigAnagContrattoBP)context.createBusinessProcess(
											"CRUDConfigAnagContrattoBP",
											new Object[] { "V" ,  ordine.getContratto(), "V" });

		try {
			contrattoBP.setEditable(false);
		} catch (Throwable t) {
			throw t;
		}
			
		return context.addBusinessProcess(contrattoBP);
	} catch(Throwable e) {
		return handleException(context,e);
	}
}
public Forward doBringBackVisualizzaContratto(ActionContext context) {
		return context.findDefaultForward();
}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy