package dao;

import java.io.StringReader;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.persistence.ParameterMode;

import org.apache.log4j.helpers.BoundedFIFO;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.procedure.ProcedureCall;
import org.hibernate.result.Outputs;
import org.hibernate.result.UpdateCountOutput;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import bean.AppVariables;
import bean.DisposizioniBonificiBean;
import bean.LogModificheBean;
import bean.LogVariazioniBean;
import bean.StoredProcResult;
import bean.filters.DisposizioniFiltroBean;
import bean.filters.RicercaDisposizioniFilterBean;
import bean.query.DisposizioniAeaDecoded;
import bean.query.DisposizioniBonificiDecoded;
import common.bean.UserData;
import common.dao.GenericDAO;
import common.dao.IDAO;
import common.utility.DateUtils;
import common.utility.StringUtilities;
import sicura.entities.ApAbi;
import sicura.entities.ComboDisposizioni;
import sicura.entities.DisposizioniAea;
import sicura.entities.DisposizioniBonifici;
import sicura.entities.DisposizioniBonificiConTipologia;
import sicura.entities.DisposizioniRid;
import sicura.entities.DistintaFlussiInput;
import utils.ConvalidaClass;
import utils.DettaglioErrori;

@Repository
public class DisposizioniBonificiDAO extends GenericDAO<DisposizioniBonifici, Integer> implements IDAO<DisposizioniBonifici, Integer> {

	@Autowired
	GenericComboDAO genericComboDAO;
	@Autowired
	LogVariazioniDAO logVariazioniDAO;
	
	public Integer count(DisposizioniFiltroBean filterBean,  AppVariables appVariables) {
		boolean tx = startTransaction();
		
		try {
			String sql = generateQuery(filterBean, appVariables, true, false);
			Query q = currentSession().createSQLQuery(sql);
			
			if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
				sql += " and d.id in (:ids) ";
			
			Integer res = ((Integer) q.uniqueResult());
	
			return res;
		} finally {
			if (tx)
				tx =commit();
		}
	}

	public List<DisposizioniBonifici> list(int startRecord, int length, DisposizioniFiltroBean filterBean, AppVariables appVariables) {
		boolean tx = startTransaction();
		try {
			String sql = generateQuery(filterBean, appVariables, false, false);
			if (filterBean.getOrderField()==null || "".equals(filterBean.getOrderField()))
				sql += " order by d.id";
			else
				sql += getSQLOrderBy(filterBean.getOrderField());
			
			Query q = currentSession().createSQLQuery(sql)
				.addEntity("d", DisposizioniBonifici.class);
			//if (!"DistinteBanca".equals(filterBean.getTipoChiamata()) && !"DistinteFlussiInput".equals(filterBean.getTipoChiamata()))
		//			((SQLQuery)q).addEntity("f", DistintaFlussiInput.class);
					//.addEntity("DistintaFlussiInput", DistintaFlussiInput.class)
					;
					
					
			
			if (startRecord!=-1)
				q.setFirstResult(startRecord);
			if(length!=-1)
				q.setMaxResults(length);
			
			if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
				q.setParameterList("ids", filterBean.getSelectedIds());
			
			/*
			q.setResultTransformer(new ResultTransformer() {				
				@Override
				public Object transformTuple(Object[] tuple, String[] aliases) {
					return new DisposizioniBonificiBean((DisposizioniBonifici) tuple[0], (DistintaFlussiInput) tuple[1]);
				}
				
				@Override
				public List transformList(List collection) {
					return collection;
				}
			});
			*/
			
			List<DisposizioniBonifici> res = q.list();
		
			
			return res;		
		} finally {
			if (tx)
				commit();
		}
	}
	
	private Criteria addFilters(Criteria crit, DisposizioniFiltroBean disposizioniFiltroBean, String profiloUtente, AppVariables appVariables) {
		if (!"".equals(disposizioniFiltroBean.getDestinatario()))
			crit.add(Restrictions.ilike("denominazioneDestinatario", "%" + disposizioniFiltroBean.getDestinatario() + "%"));
		if (!"".equals(disposizioniFiltroBean.getStatoDisposizioni()))
			crit.add(Restrictions.eq("statoDisposizione", disposizioniFiltroBean.getStatoDisposizioni()));
		if (!"".equals(disposizioniFiltroBean.getIdFunzioneOrdinante()))
			crit.add(Restrictions.eq("iddisposizioneFunzioneOrdinante", disposizioniFiltroBean.getIdFunzioneOrdinante()));
		String importo = toDouble(disposizioniFiltroBean.getImporto());
		if (!"0".equals(importo))
			crit.add(Restrictions.eq("importo",importo));
		if (!"".equals(disposizioniFiltroBean.getStatoConvalida()))
			crit.add(Restrictions.eq("statoConvalida", disposizioniFiltroBean.getStatoConvalida()));
		
		
		
		return crit;				
	}
	
	
	public List<String> export(DisposizioniFiltroBean filterBean, AppVariables appVariables)  {
		boolean tx = startTransaction();

		try {
			String sql = generateQuery(filterBean, appVariables, false, false);
			if (filterBean.getOrderField()==null || "".equals(filterBean.getOrderField()))
				sql += " order by d.id";
			else
				sql += getSQLOrderBy(filterBean.getOrderField());
			
			Query q = currentSession().createSQLQuery(sql)
					.addEntity("d",DisposizioniBonifici.class);
			
			if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
				q.setParameterList("ids", filterBean.getSelectedIds());
			
		
	
			List<DisposizioniBonifici> disposizioni = q.list();
			
			List<String> res = generateCsv(disposizioni);
				
			return res;
	
		} finally {
			if (tx)
				commit();
		}
	}

	private List<String> generateCsv(List<DisposizioniBonifici> disposizioni) {
		List<String> res = new ArrayList<String>();
		res.add("StatoConvalida;iddisposizione;DataInserimentoDisposizione;IDDisposizioneFunzioneOrdinante;" + 
				"Importo;Descrizione_Disposizione;Codice_Abi_Ordinante;Conto_Ordinante;Data_Valuta_Destinatario;" +
				"DenominazioneDestinatario;Codice_Fiscale_Destinatario;CodiceClienteDebitore;Codice_Abi_Destinatario;Cab_Destinatario;"+
				"CoordinateIBANbeneficiario;CodiceRiferimento;IDDistintaBanca;EsitoSepaRsnCode;EsitoSepaAddtlInf;BonificoHigPriority;"+
				"DataUltimoEsitoAcquisito;");
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		SimpleDateFormat sdfTime = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		
		for(DisposizioniBonifici disposizione: disposizioni)
			res.add(
				"\"" + safeString(decodificaStato(disposizione.getStatoConvalida()))+"\";" +
				"\"" + safeString(disposizione.getIddisposizione().toString())+"\";" +	
				"\"" + (disposizione.getDataInserimentoDisposizione()!=null?sdfTime.format(disposizione.getDataInserimentoDisposizione()):"")+"\";" +
				"\"" + safeString(disposizione.getIddisposizioneFunzioneOrdinante())+"\";" +
				"\"" + safeString(disposizione.getImporto())+"\";" +
				"\"" + safeString(disposizione.getDescrizioneDisposizione())+"\";" +
				"\"" + safeString(disposizione.getCodiceAbiOrdinante())+"\";" +
				"\"" + safeString(disposizione.getContoOrdinante())+"\";" +
				"\"" + (disposizione.getDataValutaDestinatario()!=null?sdfTime.format(disposizione.getDataValutaDestinatario()):"")+"\";" +
				"\"" + safeString(disposizione.getDenominazioneDestinatario())+"\";" +
				"\"" + safeString(disposizione.getCodiceFiscaleDestinatario())+"\";" +
				"\"" + safeString(disposizione.getCodiceClienteDebitore())+"\";" +
				"\"" + safeString(disposizione.getCodiceAbiDestinatario())+"\";" +
				"\"" + safeString(disposizione.getCabDestinatario())+"\";" +
				"\"" + safeString(disposizione.getCoordinateIbanbeneficiario())+"\";" +
				"\"" + safeString(disposizione.getCodiceRiferimento())+"\";" +
				"\"" + safeString(disposizione.getIddistintaBanca().toString())+"\";" +
				"\"" + safeString(decodeCombo("RID", "CodiceStornoSEPA", disposizione.getEsitoSepaRsnCode()))+"\";" +
				"\"" + safeString(disposizione.getEsitoSepaAddtlInf())+"\";" +
				"\"" + (disposizione.isBonificoHigPriority()?"SI":"NO")+"\";" +
				"\"" + (disposizione.getDataUltimoEsitoAcquisito()!=null? sdf.format(disposizione.getDataUltimoEsitoAcquisito()):"")+"\";" 
			);
		return res;
	}

	public List<String> exportFiltered(RicercaDisposizioniFilterBean ricercaDisposizioniFilterBean, String otherCode, AppVariables appVariables, String login) {

		List<DisposizioniBonifici> disposizioni = filter(-1,0,null, ricercaDisposizioniFilterBean,null);
		boolean tx = startTransaction();
		try {
			List<String> res = generateCsv(disposizioni);
			return res;
		} finally {
			if (tx)
				commit();
		}

	}

	
	private String decodeCombo(String tipologia, String campo, String codice) {
		return genericComboDAO.getComboValue("Combo_Disposizioni",  tipologia, campo, codice);
	}
	

	private String decodificaStato(Short statoConvalida) {
		switch(statoConvalida) {
		case -1: return "Corretta";
		case 2: return "Warning";
		default: return "Errata";
		}
	}
	
	public List<LogModificheBean> logStati(Integer id) {
		boolean tx = startTransaction();
		try {
			String sql = "select id, userId, data, ora, utente, nomeCampo, cast(campoPreModifica as varchar(255)) campoPreModifica, cast(campoPostModifica as varchar(255)) as campoPostModifica " +
						" from LogModificheDisposizioni where iddisposizione=:id and NomeCampo='StatoDisposizione'"+
						" order by Data, Ora, id";
					
			Query q = currentSession().createSQLQuery(sql);
			q.setResultTransformer(new AliasToBeanResultTransformer(LogModificheBean.class));
			
			q.setParameter("id", id);	
			@SuppressWarnings("unchecked")
			List<LogModificheBean> res = q.list();
			
			return res;
		} finally {
			if (tx)
				commit();
		}
	}
	
	public List<LogModificheBean> logVariazioni(Integer id) {
		boolean tx = startTransaction();
		
		try{
			String sql = "select id, userId, data, ora, utente, nomeCampo, cast(campoPreModifica as varchar(255)) campoPreModifica, cast(campoPostModifica as varchar(255)) as campoPostModifica " +
						" from LogModificheDisposizioni where iddisposizione=:id and NomeCampo<>'StatoDisposizione'"+
						" order by Data, Ora, id";
					
			Query q = currentSession().createSQLQuery(sql);
			q.setResultTransformer(new AliasToBeanResultTransformer(LogModificheBean.class));
			
			q.setParameter("id", id);	
			@SuppressWarnings("unchecked")
			List<LogModificheBean> res = q.list();
			
			return res;
		} finally {
			if (tx)
				commit();
		}
	}

	
	private String generateQuery(DisposizioniFiltroBean filterBean, AppVariables appVariables, boolean doCount, boolean addLookupFields) {
			
		String sql = "select " + (doCount  
				? "Count(*) "
				: "{d.*} "
			);
		
		//if (!doCount && !"DistinteBanca".equals(filterBean.getTipoChiamata()) && !"DistinteFlussiInput".equals(filterBean.getTipoChiamata()))
		//	sql +=", f.* ";
		
		if (!doCount && addLookupFields)
			sql += ", {cdCausale.*}, {cdStatoDisp.*}, {cdStatoAnom.*}, {cdScarto.*} ";
		
		sql+= " from Disposizioni_Bonifici d WITH (NOLOCK)";
		
		if (addLookupFields)
			sql += " left join Combo_Disposizioni cdCausale on cdCausale.Tipologia='BONIFICI' And cdCausale.Campo='Causale' And cdCausale.Codice=d.causale " +
					" left join Combo_Disposizioni cdStatoDisp on cdStatoDisp.Tipologia='BONIFICI' And cdStatoDisp.Campo='StatoDisposizioneSep' And cdStatoDisp.Codice=d.causale " +
					" left join Combo_Disposizioni cdStatoAnom on cdStatoAnom.Tipologia='BONIFICI' And cdStatoAnom.Campo='StatoAnomaliaSep' And cdStatoAnom.Codice=d.causale " +
					" left join Combo_Disposizioni cdScarto on cdScarto.Tipologia='BONIFICI' And cdScarto.Campo='CausaScartoSep' And cdScarto.Codice=d.causale ";
		
		//if(!"DistinteBanca".equals(filterBean.getTipoChiamata()) && !"DistinteFlussiInput".equals(filterBean.getTipoChiamata()))
				sql += " LEFT JOIN DistintaFlussiInput f WITH (NOLOCK) ON f.IDDistintaFlusso = d.IDDistintaFlussoInput";
		
		sql += " where 1=1 ";
		
		 //If TipoChiamata = "ListaDisposizioni" Or TipoChiamata = "ListaDisposizioniSinistri" Or TipoChiamata = "ListaDisposizioniVita" Then
		
		if ("ListaDisposizioni".equals(filterBean.getTipoChiamata()) || "ListaDisposizioniDom".equals(filterBean.getTipoChiamata()) || "ListaDisposizioniEst".equals(filterBean.getTipoChiamata()) || "assegniIntesa".equals(filterBean.getTipoChiamata())) {
			if ("UO".equals(appVariables.getProfiloLocale())) {
				sql += " and FunzioneOrdinante='" + appVariables.getFunzioneOrdinante() + "'";
				sql += " AND (StatoDisposizione='Inserita')";
				sql += " AND (ProvenienzaDisposizione='Manuale')";
				sql += " AND (ISNULL(f.MassiveLoadStatus,3) = 3)";
				
				if ("ListaDisposizioniDom".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='01002')";
				else if ("ListaDisposizioniEst".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='48020' and CircuitoPagamento=0)";
				else if ("assegniIntesa".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='27030' and CircuitoPagamento=3)";
				else
					sql += " AND (Causale<>'01002')";
				
			} else if ("UR".equals(appVariables.getProfiloLocale())) {
				sql += addUserFilters(appVariables.getUserId(), appVariables.getGuid());
				sql += " AND (StatoDisposizione='Inserita' OR StatoDisposizione='Approvata' OR StatoDisposizione='Confermata')";
				sql += " AND (ProvenienzaDisposizione='Manuale')";
				sql += " AND (ISNULL(f.MassiveLoadStatus,3) = 3)";
				
				if ("ListaDisposizioniDom".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='01002')";
				else if ("ListaDisposizioniEst".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='48020' and CircuitoPagamento=0)";
				else if ("assegniIntesa".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='27030' and CircuitoPagamento=3)";
				else
					sql += " AND (Causale<>'01002')";

			} else 	if ("TO".equals(appVariables.getProfiloLocale())||"TR".equals(appVariables.getProfiloLocale())||"VI".equals(appVariables.getProfiloLocale())) {
				sql += "and (StatoDisposizione='Approvata' OR StatoDisposizione='Confermata')";
				sql += " AND (ISNULL(f.MassiveLoadStatus,3) = 3)";

				if ("ListaDisposizioniDom".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='01002')";
				else if ("assegniIntesa".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='27030' and CircuitoPagamento=3)";
				else if ("ListaDisposizioniEst".equals(filterBean.getTipoChiamata()))
					sql += " AND (Causale='48020' and CircuitoPagamento=0) ";
				else
					sql += " AND (Causale<>'01002')";

			}
		} else if ("DistinteBanca".equals(filterBean.getTipoChiamata())) {
			sql += "and (StatoDisposizione='Predisposta' OR StatoDisposizione='Validata' OR StatoDisposizione='Disposta' OR StatoDisposizione='Inviata' OR StatoDisposizione='Scartata' OR StatoDisposizione='Esitata' OR StatoDisposizione='Cancellata'"+
					" OR StatoDisposizione='In Richiamo' OR StatoDisposizione='Richiamata' OR StatoDisposizione='Richiamo Errato')";
			sql += "and IDDistintaBanca=" + filterBean.getIdDistintaBanca();
		} else if ("DistinteFlussiInput".equals(filterBean.getTipoChiamata())) {
			sql += " and (StatoDisposizione='Approvata' OR StatoDisposizione='Confermata' OR StatoDisposizione='Predisposta' OR StatoDisposizione='Validata' OR StatoDisposizione='Scartata' OR StatoDisposizione='Disposta' OR StatoDisposizione='Inviata' OR StatoDisposizione='Esitata' OR StatoDisposizione='Cancellata'"+
					" OR StatoDisposizione='In Richiamo' OR StatoDisposizione='Richiamata' OR StatoDisposizione='Richiamo Errato')";
			sql += " and IDDistintaFlussoInput=" + filterBean.getIdDistintaFlusso();
		}
		
		sql += addFiltriDisposizione(filterBean);

		
		return sql;
	}

	private String addFiltriDisposizione(DisposizioniFiltroBean filterBean) {
		String sql="";
		if (filterBean.getInErrore()) {
			sql += " and StatoConvalida<>-1";
		} 
		
		if (filterBean.getDestinatario()!=null && !"".equals(filterBean.getDestinatario()))
			sql += " and denominazioneDestinatario like '%" + filterBean.getDestinatario() + "%'"; 
		if (!"".equals(filterBean.getStatoDisposizioni()))
			sql += " and statoDisposizione = '" + filterBean.getStatoDisposizioni() + "' ";
		if (!"".equals(filterBean.getIdFunzioneOrdinante()))
			sql += " and iddisposizioneFunzioneOrdinante =" + filterBean.getIdFunzioneOrdinante();
		String importo = toDouble(filterBean.getImporto());
		if (!"0".equals(importo))
			sql += " and importodbgrid=" + importo.replace(',','.');
		if (!"".equals(filterBean.getStatoConvalida()))
			 sql += " and statoConvalida='" +filterBean.getStatoConvalida() + "'";
		if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
			sql += " and d.id in (:ids) ";
		
		return sql;
	}
	
	public String toDouble(String importo) {
		DecimalFormat df = new DecimalFormat("#.00"); 
		try {
			Double dbl = Double.parseDouble(importo.replace(",", "."));
			String res = df.format(dbl);
			return res.replace(".", ",");
		} catch (Exception ex) {
			return "0";
		}
	}

	
	@SuppressWarnings("rawtypes")
	private String addUserFilters(String userID, String guid) {
		Query q = currentSession().createSQLQuery("EXEC spSecurityUtenteFunzioni :userid, :guid");
		q
			.setParameter("userid", userID)
			.setParameter("guid", guid)
		 	.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);		
		
		List res = q.list();
		
		String filters="";
		
		if (res.size()>0) {
			filters += "(FunzioneOrdinante='"+((Map)res.get(0)).get("FunzioneOrdinante")+"'";
			for (int i=1;i<res.size();i++) {
				
				Map row = (Map) res.get(i);
				filters += " OR (FunzioneOrdinante=" + row.get("FunzioneOrdinante") + "'";						
				
			}
			filters += ")";
		}
		
		return filters;
		
	
	}


	public List<DisposizioniBonifici> list(int startRecord, int length, String orderByField)  {
		boolean tx = startTransaction();
		
		try {
			Criteria crit = currentSession().createCriteria(DisposizioniBonifici.class);
			
			crit
				.setFirstResult(startRecord)
				.setMaxResults(length);
			if (orderByField!=null)
				crit.addOrder(getOrderBy(orderByField));
			
			List<DisposizioniBonifici> res = crit.list();
			
			return res;
		} finally {
			if (tx)
				commit();
		}
	}

	public Long count() {
		boolean tx = startTransaction();
		try {
			Criteria crit = currentSession().createCriteria(DisposizioniBonifici.class);
			
			crit.setProjection(Projections.count("id"));
			
			Long res = ((Long) crit.uniqueResult());
			return res;
		} finally {
			if (tx)
				commit();
		}
	}
	
	
	/********************** Filtro generale disposizioni ******************/
	
	public List<DisposizioniBonifici> filter(int startRecord, int length, String orderField, RicercaDisposizioniFilterBean filterBean, DisposizioniFiltroBean disposizioniFiltroBean){
		boolean tx = startTransaction();
		
		try {
			String sql = "select disposizioni_bonifici.* from disposizioni_Bonifici WITH (NOLOCK)"+
						" LEFT JOIN DistintaFlussiInput WITH (NOLOCK) ON DistintaFlussiInput.IDDistintaFlusso = Disposizioni_Bonifici.IDDistintaFlussoInput";
			sql += " where isNull(DistintaFlussiInput.MassiveLoadStatus,3) = 3";
		
			sql += addFiltersToQuery(filterBean);
			if (disposizioniFiltroBean!=null)
				sql += addFiltriDisposizione(disposizioniFiltroBean);
	
			if (orderField!=null)
				sql += getSQLOrderBy(orderField);
			else
				sql += " order by id";
			
			SQLQuery q=currentSession().createSQLQuery(sql);
			q=setQueryParameters(q, filterBean);
			q.addEntity(DisposizioniBonifici.class);
			
			if (startRecord>=0)
				q.setFirstResult(startRecord);
			if (length>0)
				q.setMaxResults(length);
			
			if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0  && filterBean.getSelectedIds()[0]!=-1)
				q.setParameterList("ids", filterBean.getSelectedIds());
			
			List<DisposizioniBonifici> res=null;
			
			try {
				res = q.list();
			} catch (Exception ex) {
				ex.printStackTrace();
				return new ArrayList<DisposizioniBonifici>();
			}
				
			return res;
		} finally {				
			if (tx)
				commit(); 
		}
	}
	
	
	public Integer countFilter(RicercaDisposizioniFilterBean filterBean, DisposizioniFiltroBean disposizioniFiltroBean) {
		boolean tx = startTransaction();
		try {
		
			String sql = "select count(*) from disposizioni_Bonifici WITH (NOLOCK)"+
						" LEFT JOIN DistintaFlussiInput WITH (NOLOCK) ON DistintaFlussiInput.IDDistintaFlusso = disposizioni_Bonifici.IDDistintaFlussoInput";
			sql += " where isNull(DistintaFlussiInput.MassiveLoadStatus,3) = 3";
		
			sql += addFiltersToQuery(filterBean);
			if (disposizioniFiltroBean!=null)
				sql += addFiltriDisposizione(disposizioniFiltroBean);
			
			SQLQuery q=currentSession().createSQLQuery(sql);
			q=setQueryParameters(q, filterBean);
			
			if (disposizioniFiltroBean.getSelectedIds()!=null && disposizioniFiltroBean.getSelectedIds().length>0  && disposizioniFiltroBean.getSelectedIds()[0]!=-1)
				q.setParameterList("ids", filterBean.getSelectedIds());
			
			Integer res = (Integer) q.uniqueResult();
			
			return res;
		} finally {
			if (tx)
				commit(); 
		}
	}
	
	
	private String addFiltersToQuery(RicercaDisposizioniFilterBean filterBean) {
		String sql = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		if (!StringUtilities.empty(filterBean.getFunzioneOrdinante()))
			sql +=" and funzioneOrdinante=:funzioneOrdinante";

		if (!StringUtilities.empty(filterBean.getStatoDisposizione()))
			sql += " and statoDisposizione=:statoDisposizione";
		
		if (!StringUtilities.empty(filterBean.getProvenienza()))
			sql += " and ProvenienzaDisposizione=:provenienza";
		
		if (!StringUtilities.empty(filterBean.getStatoConvalida()))
			sql += " and StatoConvalida=:StatoConvalida";
		
		if (filterBean.getFlagDaDataInserimento() && DateUtils.isDate(filterBean.getDaDataInserimento()))
			sql += " and DataInserimentoDisposizione>='"+sdf.format(filterBean.getDaDataInserimento())+" 00:00:00'";//:DaDataInserimentoDisposizione";
		
		if (filterBean.getFlagADataInserimento() && DateUtils.isDate(filterBean.getaDataInserimento()))
			sql += " and DataInserimentoDisposizione<='"+sdf.format(filterBean.getaDataInserimento())+" 23:59:59'";//:ADataInserimentoDisposizione";
		
		if (!StringUtilities.empty(filterBean.getDaDistinta()))
			sql += " and IDDistintaBanca>=:daDistintaBanca";
		
		if (!StringUtilities.empty(filterBean.getaDistinta()))
			sql += " and IDDistintaBanca<=:aDistintaBanca";

		if (!StringUtilities.empty(filterBean.getDestinatario()))
			sql += " and DenominazioneDestinatario like :destinatario";

		if(!StringUtilities.empty(filterBean.getCodiceFiscale()))
			sql += " and Codice_Fiscale_Destinatario like :codiceFiscale";
		
		if(!StringUtilities.empty(filterBean.getCodiceDestinatario()))
			sql += " and CodiceClienteDebitore = :codiceDestinatario";
	
		if (filterBean.getFlagDaValutaBeneficiario() && DateUtils.isDate(filterBean.getDaValutaBeneficiario()))
			sql += " and Data_Valuta_Destinatario>='"+sdf.format(filterBean.getDaValutaBeneficiario())+" 00:00:00'";//:DaDataValuta";
		
		if (filterBean.getFlagAValutaBeneficiario() && DateUtils.isDate(filterBean.getaValutaBeneficiario()))
			sql += " and Data_Valuta_Destinatario<='"+sdf.format(filterBean.getaValutaBeneficiario())+" 23:59:59'";//:aDataValuta";
		
		if(!StringUtilities.empty(filterBean.getDaImporto())) 
			sql += " and ImportoDBGrid>=:daImporto";
		
		if(!StringUtilities.empty(filterBean.getaImporto()))
			sql += " and ImportoDBGrid<=:aImporto";
		
		if(!StringUtilities.empty(filterBean.getCausaleMovimento()))
			sql += " and CausaleMovimento=:causaleMovimento";
		
		if(!StringUtilities.empty(filterBean.getIdUnivoco()))
			sql += " and IDDisposizione = :idUnivoco";
		
		if(!StringUtilities.empty(filterBean.getIdFunzione()))
			sql += " and IDDisposizioneFunzioneOrdinante = :idFunzione";
		
		if(!StringUtilities.empty(filterBean.getNumeroPolizza()))
			sql += " and NumeroPolizza = :numeroPolizza";
		
		if(!StringUtilities.empty(filterBean.getAbiOrdinante()))
			sql += " and Codice_Abi_Ordinante = :abiOrdinante";
		
		if(!StringUtilities.empty(filterBean.getCabOrdinante()))
			sql += " and Cab_Ordinante = :cabOrdinante";
		
		if(!StringUtilities.empty(filterBean.getContoOrdinante()))
			sql += " and Conto_Ordinante = :contoOrdinante";
		
		if(!StringUtilities.empty(filterBean.getAbiDestinatario()))
			sql += " and Codice_Abi_Destinatario = :abiDestinatario";
		
		if(!StringUtilities.empty(filterBean.getCabDestinatario()))
			sql += " and Cab_Destinatario = :cabDestinatario";
		
		if(!StringUtilities.empty(filterBean.getContoDestinatario()))
			sql += " and Conto_Destinatario = :contoDestinatario";
		
		if (filterBean.getFlagDaDataRicezioneEsito() && DateUtils.isDate(filterBean.getDaDataRicezioneEsito()))
			sql += " and DataUltimoEsitoAcquisito>='"+sdf.format(filterBean.getDaDataRicezioneEsito())+" 00:00:00'";//:DaDataRicezioneEsito";
		
		if (filterBean.getFlagADataRicezioneEsito() && DateUtils.isDate(filterBean.getaDataRicezioneEsito()))
			sql += " and DataUltimoEsitoAcquisito<='"+sdf.format(filterBean.getaDataRicezioneEsito())+" 23:59:59'";//:aDataRicezioneEsito";

		if (filterBean.getFlagDaDataEsecuzioneBanca() && DateUtils.isDate(filterBean.getDaDataEsecuzioneBanca()))
			sql += " and DataEsecuzione>='"+sdf.format(filterBean.getDaDataEsecuzioneBanca())+" 00:00:00'";//:daDataEsecuzione";
		
		if (filterBean.getFlagADataEsecuzioneBanca() && DateUtils.isDate(filterBean.getaDataEsecuzioneBanca()))
			sql += " and DataEsecuzione<='"+sdf.format(filterBean.getaDataEsecuzioneBanca())+" 23:59:59'";//aDataEsecuzione";
		
		
		if(!StringUtilities.empty(filterBean.getEsitoDisposizione()))
			if ("0".equals(filterBean.getEsitoDisposizione()))
				sql += " and Esito is null";
			else
				sql += " and Esito = :esitoDisposizione";
		
	
		if (!StringUtilities.empty(filterBean.getTrnBonificoSCT()))
			sql += " and CodiceRiferimento = :CodiceRiferimento";
		
		if(!StringUtilities.empty(filterBean.getNumeroAssegno()))
			sql += " and NumeroAssegnoEmesso = :numeroAssegno";

		if (filterBean.getTipoDisposizione().equalsIgnoreCase("Pagamenti SCT"))
			sql += " and causale<>'01002' ";
		
		if (filterBean.getTipoDisposizione().equalsIgnoreCase("Pagamenti DOM"))
			sql += " and causale='01002' ";
		
		if (filterBean.getTipoDisposizione().equalsIgnoreCase("Pagamenti INPS"))
			sql += " and causale='27010' ";

		if (filterBean.getTipoDisposizione().equalsIgnoreCase("Pagamenti INPS"))
			sql += " and causale='27010' ";

		if (filterBean.getTipoDisposizione().equalsIgnoreCase("Pagamenti SCT Esteri"))
			sql += " and causale='48020' and CircuitoPagamento=0 ";
		
		if (filterBean.getTipoDisposizione().equalsIgnoreCase("Assegni Intesa"))
			sql += " AND (Causale='27030' and CircuitoPagamento=3)";
		
		if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
			sql += " and d.id in (:ids) ";
		
		return sql;
		
	}

	private SQLQuery setQueryParameters(SQLQuery q, RicercaDisposizioniFilterBean filterBean) {
			
		if (!StringUtilities.empty(filterBean.getFunzioneOrdinante()))
			q.setParameter("funzioneOrdinante", filterBean.getFunzioneOrdinante());

		if (!StringUtilities.empty(filterBean.getStatoDisposizione()))
			q.setParameter("statoDisposizione", filterBean.getStatoDisposizione());
		
		if (!StringUtilities.empty(filterBean.getProvenienza()))
			q.setParameter("provenienza",filterBean.getProvenienza());
		
		if (!StringUtilities.empty(filterBean.getStatoConvalida()))
			q.setParameter("StatoConvalida",filterBean.getStatoConvalida());
		
//		if (filterBean.getFlagDaDataInserimento() && DateUtils.isDate(filterBean.getDaDataInserimento()))
//			q.setParameter("DaDataInserimentoDisposizione",startOfDay(filterBean.getDaDataInserimento()));
//		
//		if (filterBean.getFlagADataInserimento() && DateUtils.isDate(filterBean.getaDataInserimento()))
//			q.setParameter("ADataInserimentoDisposizione",endOfDay(filterBean.getaDataInserimento()));
		
		if (!StringUtilities.empty(filterBean.getDaDistinta()))
			q.setParameter("daDistintaBanca",filterBean.getDaDistinta());
		
		if (!StringUtilities.empty(filterBean.getaDistinta()))
			q.setParameter("aDistintaBanca",filterBean.getaDistinta());

		if (!StringUtilities.empty(filterBean.getDestinatario()))
			q.setParameter("destinatario",filterBean.getDestinatario()+"%");

//		if (filterBean.getFlagDaValutaBeneficiario() && DateUtils.isDate(filterBean.getDaValutaBeneficiario()))
//			q.setParameter("DaDataValuta",startOfDay(filterBean.getDaValutaBeneficiario()));
//		
//		if (filterBean.getFlagAValutaBeneficiario() && DateUtils.isDate(filterBean.getaValutaBeneficiario()))
//			q.setParameter("aDataValuta",endOfDay(filterBean.getaValutaBeneficiario()));
		
		if(!StringUtilities.empty(filterBean.getDaImporto()))
			q.setParameter("daImporto",filterBean.getDaImporto().replace(',', '.'));
		
		if(!StringUtilities.empty(filterBean.getaImporto()))
			q.setParameter("aImporto",filterBean.getaImporto().replace(',', '.'));
		
		if(!StringUtilities.empty(filterBean.getCausaleMovimento()))
			q.setParameter("causaleMovimento",filterBean.getCausaleMovimento());
		
		if(!StringUtilities.empty(filterBean.getCodiceFiscale()))
			q.setParameter("codiceFiscale", filterBean.getCodiceFiscale()+"%");
		
		if(!StringUtilities.empty(filterBean.getIdUnivoco()))
			q.setParameter("idUnivoco",filterBean.getIdUnivoco());
		
		if(!StringUtilities.empty(filterBean.getIdFunzione()))
			q.setParameter("idFunzione",filterBean.getIdFunzione());
		
		if(!StringUtilities.empty(filterBean.getNumeroPolizza()))
			q.setParameter("numeroPolizza",filterBean.getNumeroPolizza());
		
		if(!StringUtilities.empty(filterBean.getAbiOrdinante()))
			q.setParameter("abiOrdinante",filterBean.getAbiOrdinante());
		
		if(!StringUtilities.empty(filterBean.getCabOrdinante()))
			q.setParameter("cabOrdinante",filterBean.getCabOrdinante());
		
		if(!StringUtilities.empty(filterBean.getContoOrdinante()))
			q.setParameter("contoOrdinante",filterBean.getContoOrdinante());
		
		if(!StringUtilities.empty(filterBean.getAbiDestinatario()))
			q.setParameter("abiDestinatario",filterBean.getAbiDestinatario());
		
		if(!StringUtilities.empty(filterBean.getCabDestinatario()))
			q.setParameter("cabDestinatario",filterBean.getCabDestinatario());
		
		if(!StringUtilities.empty(filterBean.getContoDestinatario()))
			q.setParameter("contoDestinatario",filterBean.getContoDestinatario());
		
		if(!StringUtilities.empty(filterBean.getCodiceDestinatario()))
			q.setParameter("codiceDestinatario",filterBean.getCodiceDestinatario());

//		if (filterBean.getFlagDaDataRicezioneEsito() && DateUtils.isDate(filterBean.getDaDataRicezioneEsito()))
//			q.setParameter("DaDataRicezioneEsito",startOfDay(filterBean.getDaDataRicezioneEsito()));
//		
//		if (filterBean.getFlagADataRicezioneEsito() && DateUtils.isDate(filterBean.getaDataRicezioneEsito()))
//			q.setParameter("aDataRicezioneEsito",endOfDay(filterBean.getaDataRicezioneEsito()));
//
//		if (filterBean.getFlagDaDataEsecuzioneBanca() && DateUtils.isDate(filterBean.getDaDataEsecuzioneBanca()))
//			q.setParameter("daDataEsecuzione",startOfDay(filterBean.getDaDataEsecuzioneBanca()));
//		
//		if (filterBean.getFlagADataEsecuzioneBanca() && DateUtils.isDate(filterBean.getaDataEsecuzioneBanca()))
//			q.setParameter("aDataEsecuzione",endOfDay(filterBean.getaDataEsecuzioneBanca()));

		if(!StringUtilities.empty(filterBean.getEsitoDisposizione()))
			if (!"0".equals(filterBean.getEsitoDisposizione()))
				q.setParameter("esitoDisposizione",filterBean.getEsitoDisposizione());
		
		if (!StringUtilities.empty(filterBean.getTrnBonificoSCT()))
			q.setParameter("CodiceRiferimento", filterBean.getTrnBonificoSCT());
		
		if(!StringUtilities.empty(filterBean.getNumeroAssegno()))
			q.setParameter("numeroAssegno",filterBean.getNumeroAssegno());

		
		return q;
			
	}

	public DisposizioniBonifici fixDisposizione(DisposizioniBonifici disposizioneBonifici) {
		
	 	if ("Inserita".equalsIgnoreCase(disposizioneBonifici.getStatoDisposizione()) ||
			"Approvata".equalsIgnoreCase(disposizioneBonifici.getStatoDisposizione()) ||
			"Confermata".equalsIgnoreCase(disposizioneBonifici.getStatoDisposizione()) ) {
			if (!(
					 ("".equals(disposizioneBonifici.getCoordinateIbanbeneficiario())||disposizioneBonifici.getCoordinateIbanbeneficiario()==null) &&
					 ("1".equals(disposizioneBonifici.getCircuitoPagamento())) &&
					 ("".equals(disposizioneBonifici.getModalitaPagamento()) || "1".equals(disposizioneBonifici.getModalitaPagamento()))
				 )) {
					// Scorporo IBAN -> Abi-Cab-Conto-Cin-CodicePaese
					if (disposizioneBonifici.getCoordinateIbanbeneficiario()!=null) {
						if (disposizioneBonifici.getCoordinateIbanbeneficiario().replaceAll("\\s","").length()>30) {
							disposizioneBonifici.setCodiceAbiDestinatario(disposizioneBonifici.getCoordinateIbanbeneficiario().replaceAll("\\s","").substring(5,10));
							disposizioneBonifici.setCabDestinatario(disposizioneBonifici.getCoordinateIbanbeneficiario().replaceAll("\\s","").substring(10,15));
							disposizioneBonifici.setCin(disposizioneBonifici.getCoordinateIbanbeneficiario().substring(4,5));
							disposizioneBonifici.setBancaSportelloDomic(recuperaBanca(disposizioneBonifici.getCodiceAbiDestinatario()));
						}
					}
				}
		}
		disposizioneBonifici.setFlagStampa(false);
		
		if (causaleModificata(disposizioneBonifici) &&
			("34000".equals(disposizioneBonifici.getCausale()) ||
			"34001".equals(disposizioneBonifici.getCausale()) ||
			"79000".equals(disposizioneBonifici.getCausale()) ||
			"79001".equals(disposizioneBonifici.getCausale()))
			)  {
			disposizioneBonifici.setCodiceAbiDestinatario(null);
			disposizioneBonifici.setCabDestinatario(null);
			disposizioneBonifici.setContoDestinatario(null);
			disposizioneBonifici.setBancaSportelloDomic(null);
			disposizioneBonifici.setCin(null);
			disposizioneBonifici.setCoordinateIbanbeneficiario(null);
			
		}
		
		return disposizioneBonifici;
	}

	private boolean causaleModificata(DisposizioniBonifici disposizioneBonifici) {
		DisposizioniBonifici original = readNoTransaction(disposizioneBonifici.getId());
		
		if (original==null)
			return true;
		
		return !disposizioneBonifici.getCausale().equals(original.getCausale());
	}

	private String recuperaBanca(String codiceAbi) {
		Criteria crit = currentSession().createCriteria(ApAbi.class);
		crit.add(Restrictions.eq("abi", codiceAbi));

		List<ApAbi> res = crit.list();
		if (res.size()==0)
			return "";
		else
			return res.get(0).getDescri().substring(0,Math.min(res.get(0).getDescri().length(),50));
	}

	public Integer saveDisposizione(DisposizioniBonifici disposizione, UserData userData, AppVariables appVariables, ConvalidaClass convalidaClass) {
	
		// CREATE PROCEDURE [dbo].[spModifyDisposizioni]
			//		@SecurityUserId VARCHAR(15),
			//		@SecurityGuid UNIQUEIDENTIFIER,
			//		
			//		@ID	int,
			//		@IDDisposizione	int,
			//		@IDDistintaBanca	int,
			//		@FlagIDDistintaBanca	bit,
			//		@IDOrdinante	int,
			//		@IDDestinatario	int,
			//		@IDDistintaFlussoInput	int,
			//		@NumeroDisposizioneDistinta	int,
			//		@Data_Esecuzione_Disposizione	datetime,
			//		@FlagData_Esecuzione_Disposizione	bit,
			//		@Data_Valuta_Destinatario	datetime,
			//		@FlagData_Valuta_Destinatario	bit,
			//		@Causale	varchar(5),
			//		@FlagCausale	bit,
			//		@ModalitaPagamento	varchar,
			//		@FlagModalitaPagamento	bit,
			//		@Importo	varchar(15),
			//		@FlagImporto	bit,
			//		@ImportoDBGrid	float,
			//		@Codice_Abi_Ordinante	varchar(5),
			//		@FlagCodice_Abi_Ordinante	bit,
			//		@Cab_Ordinante	varchar(5),
			//		@FlagCab_Ordinante	bit,
			//		@Conto_Ordinante	varchar(12),
			//		@FlagConto_Ordinante	bit,
			//		@Codice_Abi_Destinatario	varchar(5),
			//		@FlagCodice_Abi_Destinatario	bit,
			//		@Cab_Destinatario	varchar(5),
			//		@FlagCab_Destinatario	bit,
			//		@Conto_Destinatario	varchar(12),
			//		@FlagConto_Destinatario	bit,
			//		@StatoConvalida	smallint,
			//		@Banca_Sportello_Domic	varchar(50),
			//		@FlagBanca_Sportello_Domic	bit,
			//		@Cin	varchar,
			//		@FlagCin	bit,
			//		@Codice_Sia_Ordinante	varchar(5),
			//		@FlagCodice_Sia_Ordinante	bit,
			//		@TipoCodice	varchar,
			//		@FlagTipoCodice	bit,
			//		@Indirizzo_Ordinante	varchar(30),
			//		@FlagIndirizzo_Ordinante	bit,
			//		@Località_Ordinante	varchar(30),
			//		@FlagLocalità_Ordinante	bit,
			//		@Codice_Fiscale_Ordinante	varchar(16),
			//		@FlagCodice_Fiscale_Ordinante	bit,
			//		@DenominazioneDestinatario	varchar(90),
			//		@FlagDenominazioneDestinatario	bit,
			//		@Codice_Fiscale_Destinatario	varchar(16),
			//		@FlagCodice_Fiscale_Destinatario	bit,
			//		@Indirizzo_Destinatario	varchar(30),
			//		@FlagIndirizzo_Destinatario	bit,
			//		@Continuazione_Indirizzo_Destinatario varchar(70),
			//		@FlagContinuazione_Indirizzo_Destinatario bit,
			//		@Cap_Destinatario	varchar(5),
			//		@FlagCap_Destinatario	bit,
			//		@Città_Destinatario	varchar(25),
			//		@FlagCittà_Destinatario	bit,
			//		@Provincia_Destinatario	varchar(2),
			//		@FlagProvincia_Destinatario	bit,
			//		@Domiciliazione_Destinatario	varchar(65),
			//		@FlagDomiciliazione_Destinatario	bit,
			//		@Descrizione_Disposizione	varchar(2000),
			//		@FlagDescrizione_Disposizione	bit,
			//		@CodiceClienteDebitore	varchar(16),
			//		@FlagCodiceClienteDebitore	bit,
			//		@Azienda_Ordinante	varchar(96),
			//		@FlagAzienda_Ordinante	bit,
			//		@FirmaEmittente	varchar(20),
			//		@FlagFirmaEmittente	bit,
			//		@CampoaDisposizione	varchar(8),
			//		@FlagCampoaDisposizione	bit,
			//		@ErroriCampiObbligatori	smallint,
			//		@ErroriCongruenza	smallint,
			//		@ErroriCampiData	smallint,
			//		@ErroriPiazzatura	smallint,
			//		@FlagStampa	bit,
			//		@CoordinateIBANordinante	varchar(42),
			//		@FlagCoordinateIBANordinante	bit,
			//		@CoordinateIBANbeneficiario	varchar(42),
			//		@FlagCoordinateIBANbeneficiario	bit,
			//		@DescrizioneConto	varchar(30),
			//		@FlagDescrizioneConto	bit,
			//		@RichiestaEsito	varchar,
			//		@FlagRichiestaEsito	bit,
			//		@Esito	varchar,
			//		@FlagEsito	bit,
			//		@TipoCodiceRiferimento	varchar,
			//		@FlagTipoCodiceRiferimento	bit,
			//		@CodiceRiferimento	varchar(35),
			//		@FlagCodiceRiferimento	bit,
			//		@TipoAnomalia	varchar,
			//		@FlagTipoAnomalia	bit,
			//		@ValutaOrdinante	datetime,
			//		@FlagValutaOrdinante	bit,
			//		@ValutaBeneficiario	datetime,
			//		@FlagValutaBeneficiario	bit,
			//		@DataOrdine	datetime,
			//		@FlagDataOrdine	bit,
			//		@DataContabileAddebito	datetime,
			//		@FlagDataContabileAddebito	bit,
			//		@DataEsecuzione	datetime,
			//		@FlagDataEsecuzione	bit,
			//		@ImportoCommissioni	varchar(15),
			//		@FlagImportoCommissioni	bit,
			//		@ImportoSpese	varchar(15),
			//		@FlagImportoSpese	bit,
			//		@ImportoPenali	varchar(15),
			//		@FlagImportoPenali	bit,
			//		@NumeroAssegnoEmesso	varchar(16),
			//		@FlagNumeroAssegnoEmesso	bit,
			//		@BancaGatewayMP	varchar(5),
			//		@FlagBancaGatewayMP	bit,
			//		@CodiceMarketPlace	varchar(5),
			//		@FlagCodiceMarketPlace	bit,
			//		@UserID	varchar(10),
			//		@ProvenienzaDisposizione	varchar(10),
			//		@TipoFlussoInput	varchar(2),
			//		@IDDisposizioneFunzioneOrdinante	varchar(30),
			//		@DataInserimentoDisposizione	datetime,
			//		@DataFlussoDisposizione	datetime,
			//		@DataEsitoDisposizione	datetime,
			//		@FlagDataEsitoDisposizione	bit,
			//		@DataUltimoEsitoAcquisito	datetime,
			//		@FlagDataUltimoEsitoAcquisito	bit,
			//		@StatoDisposizione	varchar(15),
			//		@FlagStatoDisposizione	bit,
			//		@CodiceSocietà	varchar(3),
			//		@FlagCodiceSocietà	bit,
			//		@CausaleMovimento	varchar(10),
			//		@FlagCausaleMovimento	bit,
			//		@DescrizioneOperazione	varchar(60),
			//		@FlagDescrizioneOperazione	bit,
			//		@TipoMovimento	varchar(10),
			//		@FlagTipoMovimento	bit,
			//		@FunzioneOrdinante	varchar(10),
			//		@FlagFunzioneOrdinante	bit,
			//		@DescrizioneMovimento	varchar(50),
			//		@FlagDescrizioneMovimento	bit,
			//		@ContabilizzazioneMovimento	bit,
			//		@FlagContabilizzazioneMovimento	bit,
			//		@ForzaStatoAR	bit,
			//		@RamoMinisteriale	varchar(10),
			//		@FlagRamoMinisteriale	bit,
			//		@RamoTecnico	varchar(2),
			//		@FlagRamoTecnico	bit,
			//		@AgenziaCDC	varchar(10),
			//		@FlagAgenziaCDC	bit,
			//		@DescrizioneAgenziaCDC	varchar(50),
			//		@FlagDescrizioneAgenziaCDC	bit,
			//		@Statistico1	varchar(10),
			//		@FlagStatistico1	bit,
			//		@Statistico2	varchar(10),
			//		@FlagStatistico2	bit,
			//		@NumeroSinistroDanni	varchar(10),
			//		@FlagNumeroSinistroDanni	bit,
			//		@LastSaved	timestamp,
			//		@Divisa_Conto_Ordinante varchar(3),
			//		@FlagDivisa_Conto_Ordinante bit,
			//		@NoteFunzioneOrdinante varchar(60),
			//		@FlagNoteFunzioneOrdinante bit,
			//		@NoteTesoreria	 varchar(60),
			//		@FlagNoteTesoreria bit,
			//		@NumeroPolizza varchar(13),
			//		@FlagNumeroPolizza bit,
			//		@NoContabilizzazioneEsito bit,
			//		@FlagNoContabilizzazioneEsito bit,
			//		@NoTabellaContabilizzazione bit,
			//		@FlagNoTabellaContabilizzazione bit,
			//		@ContoPerCassa bit,
			//		@FlagContoPerCassa bit,
			//		@CircuitoPagamento varchar(1),
			//		@FlagCircuitoPagamento bit,
			//		@UtenteNAS varchar(50),
			//		@FlagUtenteNAS bit,
			//		@TipoDisposizioneNAS varchar(3),
			//		@FlagTipoDisposizioneNAS bit,
			//		@CausaleDisposizioneNAS varchar(5),
			//		@FlagCausaleDisposizioneNAS bit,
			//		@NaturaPagamentoNAS varchar(1),
			//		@FlagNaturaPagamentoNAS bit,
			//		@DataSpossessamentoNAS datetime,
			//		@FlagDataSpossessamentoNAS bit,
			//		@DivisaImportoNAS varchar(3),
			//		@FlagDivisaImportoNAS bit,
			//		@RuoloBeneficiarioNAS varchar(50),
			//		@FlagRuoloBeneficiarioNAS bit,
			//		@DenominazionePosizioneNAS varchar(200),
			//		@FlagDenominazionePosizioneNAS bit,
			//		@RuoloPosizioneNAS varchar(50),
			//		@FlagRuoloPosizioneNAS bit,
			//		@Indirizzo_Domiciliazione_Destinatario varchar(30),
			//		@FlagIndirizzo_Domiciliazione_Destinatario bit,
			//		@Continuazione_Indirizzo_Domiciliazione_Destinatario varchar(70),
			//		@FlagContinuazione_Indirizzo_Domiciliazione_Destinatario bit,
			//		@CAP_Domiciliazione_Destinatario varchar(5),
			//		@FlagCAP_Domiciliazione_Destinatario bit,
			//		@Comune_Domiciliazione_Destinatario varchar(23),
			//		@FlagComune_Domiciliazione_Destinatario bit,
			//		@Provincia_Domiciliazione_Destinatario varchar(2),
			//		@FlagProvincia_Domiciliazione_Destinatario bit,
			//		@DataLuogoIstruzioni varchar(60),
			//		@FlagDataLuogoIstruzioni bit,
			//		@StreamFirmaDigitaleNAS text,
			//		@FlagStreamFirmaDigitaleNAS bit,
			//		@RamoMinisterialeEffettivo varchar(10),
			//		@FlagRamoMinisterialeEffettivo bit,
			//		@CausaleAntiriciclaggio bit,
			//		@FlagCausaleAntiriciclaggio bit,
			//		@CodiceRaccomandata varchar(12),
			//		@FlagCodiceRaccomandata bit,
			//		@DataIncassoAssegnoTraenza datetime,
			//		@FlagDataIncassoAssegnoTraenza bit,
			//		@CodiceFrazionarioPagamento varchar(5),
			//		@FlagCodiceFrazionarioPagamento bit,
			//		@DescrizioneFrazionarioPagamento varchar(35),
			//		@FlagDescrizioneFrazionarioPagamento bit,
			//		@SezioneFrazionarioPagamento varchar(2),
			//		@FlagSezioneFrazionarioPagamento bit,
			//		@OraPagamento varchar(6),
			//		@FlagOraPagamento bit,
			//		@IdentificativoLetteraBeneficiario varchar(30),
			//		@FlagIdentificativoLetteraBeneficiario bit,
			//		@DataCambioStatoDisposizioneNAS datetime,
			//		@StatoDisposizioneNAS varchar(3), 
			//		@FlagStatoDisposizioneNAS bit,
			//		@CausaScartoSep varchar(8),
			//		@FlagCausaScartoSep bit,
			//		@StatoDisposizioneSep varchar(8),
			//		@FlagStatoDisposizioneSep bit,
			//		@DataEmissioneSep datetime,
			//		@FlagDataEmissioneSep bit,
			//		@DataScadenzaSep datetime,
			//		@FlagDataScadenzaSep bit,
			//		@StatoAnomaliaSep varchar(8),
			//		@FlagStatoAnomaliaSep bit,
			//		@DataAnomaliaSep datetime,
			//		@FlagDataAnomaliaSep bit,
			//		@ImportoAddebitatoSep varchar(15),
			//		@FlagImportoAddebitatoSep bit,
			//		@CausaleStornoBonificoSep varchar(150),
			//		@FlagCausaleStornoBonificoSep bit,
			//		@CodiceStornoBonificoSep varchar(5),
			//		@FlagCodiceStornoBonificoSep bit,
			//		@AbiNegoziazioneAssegno varchar(5),
			//		@FlagAbiNegoziazioneAssegno bit,
			//		@CabNegoziazioneAssegno varchar(5),
			//		@FlagCabNegoziazioneAssegno bit,
			//		@TipoIncassoAssegno varchar(5),
			//		@FlagTipoIncassoAssegno bit,
			//		@NumeroRaccomandataDisguidata varchar(20),
			//		@FlagNumeroRaccomandataDisguidata bit,
			//		@UtenteTestWebService varchar(1),
			//		@FlagUtenteTestWebService bit,
			//		@TipoSpedizioneAssegno varchar(2),
			//		@FlagTipoSpedizioneAssegno bit,
			//		@NomeSupportoFlussoInputCBI varchar(20),
			//		@FlagNomeSupportoFlussoInputCBI bit,
			//		@Codice_CUC_Ordinante varchar(35),
			//		@FlagCodice_CUC_Ordinante bit,
			//		@BonificoHigPriority bit,
			//		@FlagBonificoHigPriority bit,
			//		@BIC_Creditore varchar(11),
			//		@FlagBIC_Creditore bit,
			//		@EsitoSepaRsnCode varchar(4),
			//		@FlagEsitoSepaRsnCode bit,
			//		@EsitoSepaPrtry varchar(35),
			//		@FlagEsitoSepaPrtry bit,
			//		@EsitoSepaAddtlInf varchar(105),
			//		@FlagEsitoSepaAddtlInf bit,
			//		@EsitoSepaElmRfc varchar(255),
			//		@FlagEsitoSepaElmRfc bit,
			//		@EsitoMsgId varchar(255),
			//		@FlagEsitoMsgId bit,
			//		@FirmaDelegato1 bit,
			//		@FirmaDelegato2 bit,
			//		@DisposizioneGuid uniqueidentifier
					
		
//		boolean tx = startTransaction();
		Integer res = -1;
		try {
			
			ProcedureCall call = currentSession().createStoredProcedureCall("spModifyDisposizioni");
			
			call.registerParameter("Result",  Integer.class, ParameterMode.OUT);
			
			call.registerParameter("SecurityUserId", String.class,ParameterMode.IN).bindValue(appVariables.getUserId());
			call.registerParameter("SecurityGuid", String.class, ParameterMode.IN).bindValue(appVariables.getGuid());
			call.registerParameter("ID", Integer.class, ParameterMode.IN).bindValue(disposizione.getId());
			call.registerParameter("IDDisposizione", Integer.class, ParameterMode.IN).bindValue(disposizione.getIddisposizione());
			call.registerParameter("IDDistintaBanca", Integer.class, ParameterMode.IN).bindValue(disposizione.getIddistintaBanca());
			call.registerParameter("FlagIDDistintaBanca", Boolean.class, ParameterMode.IN).bindValue(disposizione.getFlagIddistintaBanca());
			call.registerParameter("IDOrdinante", Integer.class, ParameterMode.IN).bindValue(disposizione.getIdordinante());
			call.registerParameter("IDDestinatario", Integer.class, ParameterMode.IN).bindValue(disposizione.getIddestinatario());
			call.registerParameter("IDDistintaFlussoInput", Integer.class, ParameterMode.IN).bindValue(disposizione.getIddistintaFlussoInput());
			call.registerParameter("NumeroDisposizioneDistinta", Integer.class, ParameterMode.IN).bindValue(disposizione.getNumeroDisposizioneDistinta());
			call.registerParameter("Data_Esecuzione_Disposizione", Date.class, ParameterMode.IN).bindValue(disposizione.getDataEsecuzioneDisposizione());
			call.registerParameter("FlagData_Esecuzione_Disposizione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataEsecuzioneDisposizione());
			call.registerParameter("Data_Valuta_Destinatario", Date.class, ParameterMode.IN).bindValue(disposizione.getDataValutaDestinatario());
			call.registerParameter("FlagData_Valuta_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataValutaDestinatario());
			call.registerParameter("Causale", String.class, ParameterMode.IN).bindValue(disposizione.getCausale());
			call.registerParameter("FlagCausale", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCausale());
			call.registerParameter("ModalitaPagamento", String.class, ParameterMode.IN).bindValue(disposizione.getModalitaPagamento());
			call.registerParameter("FlagModalitaPagamento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagModalitaPagamento());
			call.registerParameter("Importo", String.class, ParameterMode.IN).bindValue(disposizione.getImporto());
			call.registerParameter("FlagImporto", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagImporto());
			call.registerParameter("ImportoDBGrid",Double.class, ParameterMode.IN).bindValue(disposizione.getImportoDbgrid());
			call.registerParameter("Codice_Abi_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceAbiOrdinante());
			call.registerParameter("FlagCodice_Abi_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceAbiOrdinante());
			call.registerParameter("Cab_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getCabOrdinante());
			call.registerParameter("FlagCab_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCabOrdinante());
			call.registerParameter("Conto_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getContoOrdinante());
			call.registerParameter("FlagConto_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagContoOrdinante());
			call.registerParameter("Codice_Abi_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceAbiDestinatario());
			call.registerParameter("FlagCodice_Abi_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceAbiDestinatario());
			call.registerParameter("Cab_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getCabDestinatario());
			call.registerParameter("FlagCab_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCabDestinatario());
			call.registerParameter("Conto_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getContoDestinatario());
			call.registerParameter("FlagConto_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagContoDestinatario());
			call.registerParameter("StatoConvalida", Short.class, ParameterMode.IN).bindValue(disposizione.getStatoConvalida());
			call.registerParameter("Banca_Sportello_Domic", String.class, ParameterMode.IN).bindValue(disposizione.getBancaSportelloDomic());
			call.registerParameter("FlagBanca_Sportello_Domic", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagBancaSportelloDomic());
			call.registerParameter("Cin", String.class, ParameterMode.IN).bindValue(disposizione.getCin());
			call.registerParameter("FlagCin", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCin());
			call.registerParameter("Codice_Sia_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceSiaOrdinante());
			call.registerParameter("FlagCodice_Sia_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceSiaOrdinante());
			call.registerParameter("TipoCodice", String.class, ParameterMode.IN).bindValue(disposizione.getTipoCodice());
			call.registerParameter("FlagTipoCodice", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoCodice());
			call.registerParameter("Indirizzo_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getIndirizzoOrdinante());
			call.registerParameter("FlagIndirizzo_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagIndirizzoOrdinante());
			call.registerParameter("Località_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getLocalitaOrdinante());
			call.registerParameter("FlagLocalità_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagLocalitaOrdinante());
			call.registerParameter("Codice_Fiscale_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceFiscaleOrdinante());
			call.registerParameter("FlagCodice_Fiscale_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceFiscaleOrdinante());
			call.registerParameter("DenominazioneDestinatario", String.class, ParameterMode.IN).bindValue(disposizione.getDenominazioneDestinatario());
			call.registerParameter("FlagDenominazioneDestinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDenominazioneDestinatario());
			call.registerParameter("Codice_Fiscale_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceFiscaleDestinatario());
			call.registerParameter("FlagCodice_Fiscale_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceFiscaleDestinatario());
			call.registerParameter("Indirizzo_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getIndirizzoDestinatario());
			call.registerParameter("FlagIndirizzo_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagIndirizzoDestinatario());
			call.registerParameter("Continuazione_Indirizzo_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getContinuazioneIndirizzoDestinatario());
			call.registerParameter("FlagContinuazione_Indirizzo_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagContinuazioneIndirizzoDestinatario());
			call.registerParameter("Cap_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getCapDestinatario());
			call.registerParameter("FlagCap_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCapDestinatario());
			call.registerParameter("Città_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getCittaDestinatario());
			call.registerParameter("FlagCittà_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCittaDestinatario());
			call.registerParameter("Provincia_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getProvinciaDestinatario());
			call.registerParameter("FlagProvincia_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagProvinciaDestinatario());
			call.registerParameter("Domiciliazione_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getDomiciliazioneDestinatario());
			call.registerParameter("FlagDomiciliazione_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDomiciliazioneDestinatario());
			call.registerParameter("Descrizione_Disposizione", String.class, ParameterMode.IN).bindValue(disposizione.getDescrizioneDisposizione());
			call.registerParameter("FlagDescrizione_Disposizione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDescrizioneDisposizione());
			call.registerParameter("CodiceClienteDebitore", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceClienteDebitore());
			call.registerParameter("FlagCodiceClienteDebitore", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceClienteDebitore());
			call.registerParameter("Azienda_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getAziendaOrdinante());
			call.registerParameter("FlagAzienda_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagAziendaOrdinante());
			call.registerParameter("FirmaEmittente", String.class, ParameterMode.IN).bindValue(disposizione.getFirmaEmittente());
			call.registerParameter("FlagFirmaEmittente", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagFirmaEmittente());
			call.registerParameter("CampoaDisposizione", String.class, ParameterMode.IN).bindValue(disposizione.getCampoaDisposizione());
			call.registerParameter("FlagCampoaDisposizione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCampoaDisposizione());
			call.registerParameter("ErroriCampiObbligatori", Short.class, ParameterMode.IN).bindValue(disposizione.getErroriCampiObbligatori());
			call.registerParameter("ErroriCongruenza", Short.class, ParameterMode.IN).bindValue(disposizione.getErroriCongruenza());
			call.registerParameter("ErroriCampiData", Short.class, ParameterMode.IN).bindValue(disposizione.getErroriCampiData());
			call.registerParameter("ErroriPiazzatura", Short.class, ParameterMode.IN).bindValue(disposizione.getErroriPiazzatura());
			call.registerParameter("FlagStampa", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStampa());
			call.registerParameter("CoordinateIBANordinante", String.class, ParameterMode.IN).bindValue(disposizione.getCoordinateIbanordinante());
			call.registerParameter("FlagCoordinateIBANordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCoordinateIbanordinante());
			call.registerParameter("CoordinateIBANbeneficiario", String.class, ParameterMode.IN).bindValue(disposizione.getCoordinateIbanbeneficiario());
			call.registerParameter("FlagCoordinateIBANbeneficiario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCoordinateIbanbeneficiario());
			call.registerParameter("DescrizioneConto", String.class, ParameterMode.IN).bindValue(disposizione.getDescrizioneConto());
			call.registerParameter("FlagDescrizioneConto", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDescrizioneConto());
			call.registerParameter("RichiestaEsito", String.class, ParameterMode.IN).bindValue(disposizione.getRichiestaEsito());
			call.registerParameter("FlagRichiestaEsito", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagRichiestaEsito());
			call.registerParameter("Esito", String.class, ParameterMode.IN).bindValue(disposizione.getEsito());
			call.registerParameter("FlagEsito", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagEsito());
			call.registerParameter("TipoCodiceRiferimento", String.class, ParameterMode.IN).bindValue(disposizione.getTipoCodiceRiferimento());
			call.registerParameter("FlagTipoCodiceRiferimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoCodiceRiferimento());
			call.registerParameter("CodiceRiferimento", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceRiferimento());
			call.registerParameter("FlagCodiceRiferimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceRiferimento());
			call.registerParameter("TipoAnomalia", String.class, ParameterMode.IN).bindValue(disposizione.getTipoAnomalia());
			call.registerParameter("FlagTipoAnomalia", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoAnomalia());
			call.registerParameter("ValutaOrdinante",Date.class, ParameterMode.IN).bindValue(disposizione.getValutaOrdinante());
			call.registerParameter("FlagValutaOrdinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagValutaOrdinante());
			call.registerParameter("ValutaBeneficiario",Date.class, ParameterMode.IN).bindValue(disposizione.getValutaBeneficiario());
			call.registerParameter("FlagValutaBeneficiario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagValutaBeneficiario());
			call.registerParameter("DataOrdine",Date.class, ParameterMode.IN).bindValue(disposizione.getDataOrdine());
			call.registerParameter("FlagDataOrdine", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataOrdine());
			call.registerParameter("DataContabileAddebito",Date.class, ParameterMode.IN).bindValue(disposizione.getDataContabileAddebito());
			call.registerParameter("FlagDataContabileAddebito", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataContabileAddebito());
			call.registerParameter("DataEsecuzione",Date.class, ParameterMode.IN).bindValue(disposizione.getDataEsecuzione());
			call.registerParameter("FlagDataEsecuzione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataEsecuzione());
			call.registerParameter("ImportoCommissioni", String.class, ParameterMode.IN).bindValue(disposizione.getImportoCommissioni());
			call.registerParameter("FlagImportoCommissioni", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagImportoCommissioni());
			call.registerParameter("ImportoSpese", String.class, ParameterMode.IN).bindValue(disposizione.getImportoSpese());
			call.registerParameter("FlagImportoSpese", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagImportoSpese());
			call.registerParameter("ImportoPenali", String.class, ParameterMode.IN).bindValue(disposizione.getImportoPenali());
			call.registerParameter("FlagImportoPenali", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagImportoPenali());
			call.registerParameter("NumeroAssegnoEmesso", String.class, ParameterMode.IN).bindValue(disposizione.getNumeroAssegnoEmesso());
			call.registerParameter("FlagNumeroAssegnoEmesso", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNumeroAssegnoEmesso());
			call.registerParameter("BancaGatewayMP", String.class, ParameterMode.IN).bindValue(disposizione.getBancaGatewayMp());
			call.registerParameter("FlagBancaGatewayMP", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagBancaGatewayMp());
			call.registerParameter("CodiceMarketPlace", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceMarketPlace());
			call.registerParameter("FlagCodiceMarketPlace", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceMarketPlace());
			call.registerParameter("UserID", String.class, ParameterMode.IN).bindValue(disposizione.getUserId());
			call.registerParameter("ProvenienzaDisposizione", String.class, ParameterMode.IN).bindValue(disposizione.getProvenienzaDisposizione());
			call.registerParameter("TipoFlussoInput", String.class, ParameterMode.IN).bindValue(disposizione.getTipoFlussoInput());
			call.registerParameter("IDDisposizioneFunzioneOrdinante", String.class, ParameterMode.IN).bindValue(disposizione.getIddisposizioneFunzioneOrdinante());
			call.registerParameter("DataInserimentoDisposizione",Date.class, ParameterMode.IN).bindValue(disposizione.getDataInserimentoDisposizione());
			call.registerParameter("DataFlussoDisposizione",Date.class, ParameterMode.IN).bindValue(disposizione.getDataFlussoDisposizione());
			call.registerParameter("DataEsitoDisposizione",Date.class, ParameterMode.IN).bindValue(disposizione.getDataEsitoDisposizione());
			call.registerParameter("FlagDataEsitoDisposizione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataEsitoDisposizione());
			call.registerParameter("DataUltimoEsitoAcquisito",Date.class, ParameterMode.IN).bindValue(disposizione.getDataUltimoEsitoAcquisito());
			call.registerParameter("FlagDataUltimoEsitoAcquisito", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataUltimoEsitoAcquisito());
			call.registerParameter("StatoDisposizione", String.class, ParameterMode.IN).bindValue(disposizione.getStatoDisposizione());
			call.registerParameter("FlagStatoDisposizione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStatoDisposizione());
			call.registerParameter("CodiceSocietà", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceSocieta());
			call.registerParameter("FlagCodiceSocietà", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceSocieta());
			call.registerParameter("CausaleMovimento", String.class, ParameterMode.IN).bindValue(disposizione.getCausaleMovimento());
			call.registerParameter("FlagCausaleMovimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCausaleMovimento());
			call.registerParameter("DescrizioneOperazione", String.class, ParameterMode.IN).bindValue(disposizione.getDescrizioneOperazione());
			call.registerParameter("FlagDescrizioneOperazione",Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDescrizioneOperazione());
			call.registerParameter("TipoMovimento", String.class, ParameterMode.IN).bindValue(disposizione.getTipoMovimento());
			call.registerParameter("FlagTipoMovimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoMovimento());
			call.registerParameter("FunzioneOrdinante", String.class, ParameterMode.IN).bindValue(disposizione.getFunzioneOrdinante());
			call.registerParameter("FlagFunzioneOrdinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagFunzioneOrdinante());
			call.registerParameter("DescrizioneMovimento", String.class, ParameterMode.IN).bindValue(disposizione.getDescrizioneMovimento());
			call.registerParameter("FlagDescrizioneMovimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDescrizioneMovimento());
			call.registerParameter("ContabilizzazioneMovimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isContabilizzazioneMovimento());
			call.registerParameter("FlagContabilizzazioneMovimento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagContabilizzazioneMovimento());
			call.registerParameter("ForzaStatoAR", Boolean.class, ParameterMode.IN).bindValue(disposizione.isForzaStatoAr());
			call.registerParameter("RamoMinisteriale", String.class, ParameterMode.IN).bindValue(disposizione.getRamoMinisteriale());
			call.registerParameter("FlagRamoMinisteriale", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagRamoMinisteriale());
			call.registerParameter("RamoTecnico", String.class, ParameterMode.IN).bindValue(disposizione.getRamoTecnico());
			call.registerParameter("FlagRamoTecnico", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagRamoTecnico());
			call.registerParameter("AgenziaCDC", String.class, ParameterMode.IN).bindValue(disposizione.getAgenziaCdc());
			call.registerParameter("FlagAgenziaCDC", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagAgenziaCdc());
			call.registerParameter("DescrizioneAgenziaCDC", String.class, ParameterMode.IN).bindValue(disposizione.getDescrizioneAgenziaCdc());
			call.registerParameter("FlagDescrizioneAgenziaCDC", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDescrizioneAgenziaCdc());
			call.registerParameter("Statistico1", String.class, ParameterMode.IN).bindValue(disposizione.getStatistico1());
			call.registerParameter("FlagStatistico1", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStatistico1());
			call.registerParameter("Statistico2", String.class, ParameterMode.IN).bindValue(disposizione.getStatistico2());
			call.registerParameter("FlagStatistico2", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStatistico2());
			call.registerParameter("NumeroSinistroDanni", String.class, ParameterMode.IN).bindValue(disposizione.getNumeroSinistroDanni());
			call.registerParameter("FlagNumeroSinistroDanni", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNumeroSinistroDanni());
			call.registerParameter("LastSaved", byte[].class, ParameterMode.IN).bindValue(disposizione.getLastSaved());
			call.registerParameter("Divisa_Conto_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getDivisaContoOrdinante());
			call.registerParameter("FlagDivisa_Conto_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.getFlagDivisaContoOrdinante());
			call.registerParameter("NoteFunzioneOrdinante", String.class, ParameterMode.IN).bindValue(disposizione.getNoteFunzioneOrdinante());
			call.registerParameter("FlagNoteFunzioneOrdinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNoteFunzioneOrdinante());
			call.registerParameter("NoteTesoreria", String.class, ParameterMode.IN).bindValue(disposizione.getNoteTesoreria());
			call.registerParameter("FlagNoteTesoreria", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNoteTesoreria());
			call.registerParameter("NumeroPolizza", String.class, ParameterMode.IN).bindValue(disposizione.getNumeroPolizza());
			call.registerParameter("FlagNumeroPolizza", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNumeroPolizza());
			call.registerParameter("NoContabilizzazioneEsito", Boolean.class, ParameterMode.IN).bindValue(disposizione.isNoContabilizzazioneEsito());
			call.registerParameter("FlagNoContabilizzazioneEsito", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNoContabilizzazioneEsito());
			call.registerParameter("NoTabellaContabilizzazione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isNoTabellaContabilizzazione());
			call.registerParameter("FlagNoTabellaContabilizzazione", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNoTabellaContabilizzazione());
			call.registerParameter("ContoPerCassa", Boolean.class, ParameterMode.IN).bindValue(disposizione.isContoPerCassa());
			call.registerParameter("FlagContoPerCassa", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagContoPerCassa());
			call.registerParameter("CircuitoPagamento", String.class, ParameterMode.IN).bindValue(disposizione.getCircuitoPagamento());
			call.registerParameter("FlagCircuitoPagamento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCircuitoPagamento());
			call.registerParameter("UtenteNAS", String.class, ParameterMode.IN).bindValue(disposizione.getUtenteNas());
			call.registerParameter("FlagUtenteNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagUtenteNas());
			call.registerParameter("TipoDisposizioneNAS", String.class, ParameterMode.IN).bindValue(disposizione.getTipoDisposizioneNas());
			call.registerParameter("FlagTipoDisposizioneNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoDisposizioneNas());
			call.registerParameter("CausaleDisposizioneNAS", String.class, ParameterMode.IN).bindValue(disposizione.getCausaleDisposizioneNas());
			call.registerParameter("FlagCausaleDisposizioneNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCausaleDisposizioneNas());
			call.registerParameter("NaturaPagamentoNAS", String.class, ParameterMode.IN).bindValue(disposizione.getNaturaPagamentoNas());
			call.registerParameter("FlagNaturaPagamentoNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNaturaPagamentoNas());
			call.registerParameter("DataSpossessamentoNAS",Date.class, ParameterMode.IN).bindValue(disposizione.getDataSpossessamentoNas());
			call.registerParameter("FlagDataSpossessamentoNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataSpossessamentoNas());
			call.registerParameter("DivisaImportoNAS", String.class, ParameterMode.IN).bindValue(disposizione.getDivisaImportoNas());
			call.registerParameter("FlagDivisaImportoNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDivisaImportoNas());
			call.registerParameter("RuoloBeneficiarioNAS", String.class, ParameterMode.IN).bindValue(disposizione.getRuoloBeneficiarioNas());
			call.registerParameter("FlagRuoloBeneficiarioNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagRuoloBeneficiarioNas());
			call.registerParameter("DenominazionePosizioneNAS", String.class, ParameterMode.IN).bindValue(disposizione.getDenominazionePosizioneNas());
			call.registerParameter("FlagDenominazionePosizioneNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDenominazionePosizioneNas());
			call.registerParameter("RuoloPosizioneNAS", String.class, ParameterMode.IN).bindValue(disposizione.getRuoloPosizioneNas());
			call.registerParameter("FlagRuoloPosizioneNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagRuoloPosizioneNas());
			call.registerParameter("Indirizzo_Domiciliazione_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getIndirizzoDomiciliazioneDestinatario());
			call.registerParameter("FlagIndirizzo_Domiciliazione_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagIndirizzoDomiciliazioneDestinatario());
			call.registerParameter("Continuazione_Indirizzo_Domiciliazione_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getContinuazioneIndirizzoDomiciliazioneDestinatario());
			call.registerParameter("FlagContinuazione_Indirizzo_Domiciliazione_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagContinuazioneIndirizzoDomiciliazioneDestinatario());
			call.registerParameter("CAP_Domiciliazione_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getCapDomiciliazioneDestinatario());
			call.registerParameter("FlagCAP_Domiciliazione_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCapDomiciliazioneDestinatario());
			call.registerParameter("Comune_Domiciliazione_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getComuneDomiciliazioneDestinatario());
			call.registerParameter("FlagComune_Domiciliazione_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagComuneDomiciliazioneDestinatario());
			call.registerParameter("Provincia_Domiciliazione_Destinatario", String.class, ParameterMode.IN).bindValue(disposizione.getProvinciaDomiciliazioneDestinatario());
			call.registerParameter("FlagProvincia_Domiciliazione_Destinatario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagProvinciaDomiciliazioneDestinatario());
			call.registerParameter("DataLuogoIstruzioni", String.class, ParameterMode.IN).bindValue(disposizione.getDataLuogoIstruzioni());
			call.registerParameter("FlagDataLuogoIstruzioni", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataLuogoIstruzioni());
			call.registerParameter("StreamFirmaDigitaleNAS", String.class, ParameterMode.IN).bindValue(ClobToString(disposizione.getStreamFirmaDigitaleNas()));
			call.registerParameter("FlagStreamFirmaDigitaleNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStreamFirmaDigitaleNas());
			call.registerParameter("RamoMinisterialeEffettivo", String.class, ParameterMode.IN).bindValue(disposizione.getRamoMinisterialeEffettivo());
			call.registerParameter("FlagRamoMinisterialeEffettivo", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagRamoMinisterialeEffettivo());
			call.registerParameter("CausaleAntiriciclaggio", Boolean.class, ParameterMode.IN).bindValue(disposizione.getCausaleAntiriciclaggio());
			call.registerParameter("FlagCausaleAntiriciclaggio", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCausaleAntiriciclaggio());
			call.registerParameter("CodiceRaccomandata", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceRaccomandata());
			call.registerParameter("FlagCodiceRaccomandata", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceRaccomandata());
			call.registerParameter("DataIncassoAssegnoTraenza",Date.class, ParameterMode.IN).bindValue(disposizione.getDataIncassoAssegnoTraenza());
			call.registerParameter("FlagDataIncassoAssegnoTraenza", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataIncassoAssegnoTraenza());
			call.registerParameter("CodiceFrazionarioPagamento", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceFrazionarioPagamento());
			call.registerParameter("FlagCodiceFrazionarioPagamento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceFrazionarioPagamento());
			call.registerParameter("DescrizioneFrazionarioPagamento", String.class, ParameterMode.IN).bindValue(disposizione.getDescrizioneFrazionarioPagamento());
			call.registerParameter("FlagDescrizioneFrazionarioPagamento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDescrizioneFrazionarioPagamento());
			call.registerParameter("SezioneFrazionarioPagamento", String.class, ParameterMode.IN).bindValue(disposizione.getSezioneFrazionarioPagamento());
			call.registerParameter("FlagSezioneFrazionarioPagamento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagSezioneFrazionarioPagamento());
			call.registerParameter("OraPagamento", String.class, ParameterMode.IN).bindValue(disposizione.getOraPagamento());
			call.registerParameter("FlagOraPagamento", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagOraPagamento());
			call.registerParameter("IdentificativoLetteraBeneficiario", String.class, ParameterMode.IN).bindValue(disposizione.getIdentificativoLetteraBeneficiario());
			call.registerParameter("FlagIdentificativoLetteraBeneficiario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagIdentificativoLetteraBeneficiario());
			call.registerParameter("DataCambioStatoDisposizioneNAS",Date.class, ParameterMode.IN).bindValue(disposizione.getDataCambioStatoDisposizioneNas());
			call.registerParameter("StatoDisposizioneNAS", String.class, ParameterMode.IN).bindValue(disposizione.getStatoDisposizioneNas()); 
			call.registerParameter("FlagStatoDisposizioneNAS", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStatoDisposizioneNas());
			call.registerParameter("CausaScartoSep", String.class, ParameterMode.IN).bindValue(disposizione.getCausaScartoSep());
			call.registerParameter("FlagCausaScartoSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCausaScartoSep());
			call.registerParameter("StatoDisposizioneSep", String.class, ParameterMode.IN).bindValue(disposizione.getStatoDisposizioneSep());
			call.registerParameter("FlagStatoDisposizioneSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStatoDisposizioneSep());
			call.registerParameter("DataEmissioneSep",Date.class, ParameterMode.IN).bindValue(disposizione.getDataEmissioneSep());
			call.registerParameter("FlagDataEmissioneSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataEmissioneSep());
			call.registerParameter("DataScadenzaSep",Date.class, ParameterMode.IN).bindValue(disposizione.getDataScadenzaSep());
			call.registerParameter("FlagDataScadenzaSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataScadenzaSep());
			call.registerParameter("StatoAnomaliaSep", String.class, ParameterMode.IN).bindValue(disposizione.getStatoAnomaliaSep());
			call.registerParameter("FlagStatoAnomaliaSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagStatoAnomaliaSep());
			call.registerParameter("DataAnomaliaSep",Date.class, ParameterMode.IN).bindValue(disposizione.getDataAnomaliaSep());
			call.registerParameter("FlagDataAnomaliaSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagDataAnomaliaSep());
			call.registerParameter("ImportoAddebitatoSep", String.class, ParameterMode.IN).bindValue(disposizione.getImportoAddebitatoSep());
			call.registerParameter("FlagImportoAddebitatoSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagImportoAddebitatoSep());
			call.registerParameter("CausaleStornoBonificoSep", String.class, ParameterMode.IN).bindValue(disposizione.getCausaleStornoBonificoSep());
			call.registerParameter("FlagCausaleStornoBonificoSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCausaleStornoBonificoSep());
			call.registerParameter("CodiceStornoBonificoSep", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceStornoBonificoSep());
			call.registerParameter("FlagCodiceStornoBonificoSep", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceStornoBonificoSep());
			call.registerParameter("AbiNegoziazioneAssegno", String.class, ParameterMode.IN).bindValue(disposizione.getAbiNegoziazioneAssegno());
			call.registerParameter("FlagAbiNegoziazioneAssegno", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagAbiNegoziazioneAssegno());
			call.registerParameter("CabNegoziazioneAssegno", String.class, ParameterMode.IN).bindValue(disposizione.getCabNegoziazioneAssegno());
			call.registerParameter("FlagCabNegoziazioneAssegno", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCabNegoziazioneAssegno());
			call.registerParameter("TipoIncassoAssegno", String.class, ParameterMode.IN).bindValue(disposizione.getTipoIncassoAssegno());
			call.registerParameter("FlagTipoIncassoAssegno", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoIncassoAssegno());
			call.registerParameter("NumeroRaccomandataDisguidata", String.class, ParameterMode.IN).bindValue(disposizione.getNumeroRaccomandataDisguidata());
			call.registerParameter("FlagNumeroRaccomandataDisguidata", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNumeroRaccomandataDisguidata());
			call.registerParameter("UtenteTestWebService", String.class, ParameterMode.IN).bindValue(disposizione.getUtenteTestWebService());
			call.registerParameter("FlagUtenteTestWebService", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagUtenteTestWebService());
			call.registerParameter("TipoSpedizioneAssegno", String.class, ParameterMode.IN).bindValue(disposizione.getTipoSpedizioneAssegno());
			call.registerParameter("FlagTipoSpedizioneAssegno", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagTipoSpedizioneAssegno());
			call.registerParameter("NomeSupportoFlussoInputCBI", String.class, ParameterMode.IN).bindValue(disposizione.getNomeSupportoFlussoInputCbi());
			call.registerParameter("FlagNomeSupportoFlussoInputCBI", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagNomeSupportoFlussoInputCbi());
			call.registerParameter("Codice_CUC_Ordinante", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceCucOrdinante());
			call.registerParameter("FlagCodice_CUC_Ordinante", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceCucOrdinante());
			call.registerParameter("BonificoHigPriority", Boolean.class, ParameterMode.IN).bindValue(disposizione.isBonificoHigPriority());
			call.registerParameter("FlagBonificoHigPriority", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagBonificoHigPriority());
			call.registerParameter("BIC_Creditore", String.class, ParameterMode.IN).bindValue(disposizione.getBicCreditore());
			call.registerParameter("FlagBIC_Creditore", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagBicCreditore());
			call.registerParameter("EsitoSepaRsnCode", String.class, ParameterMode.IN).bindValue(disposizione.getEsitoSepaRsnCode());
			call.registerParameter("FlagEsitoSepaRsnCode", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagEsitoSepaRsnCode());
			call.registerParameter("EsitoSepaPrtry", String.class, ParameterMode.IN).bindValue(disposizione.getEsitoSepaPrtry());
			call.registerParameter("FlagEsitoSepaPrtry", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagEsitoSepaPrtry());
			call.registerParameter("EsitoSepaAddtlInf", String.class, ParameterMode.IN).bindValue(disposizione.getEsitoSepaAddtlInf());
			call.registerParameter("FlagEsitoSepaAddtlInf", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagEsitoSepaAddtlInf());
			call.registerParameter("EsitoSepaElmRfc", String.class, ParameterMode.IN).bindValue(disposizione.getEsitoSepaElmRfc());
			call.registerParameter("FlagEsitoSepaElmRfc", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagEsitoSepaElmRfc());
			call.registerParameter("EsitoMsgId", String.class, ParameterMode.IN).bindValue(disposizione.getEsitoMsgId());
			call.registerParameter("FlagEsitoMsgId", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagEsitoMsgId());
			call.registerParameter("FirmaDelegato1", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFirmaDelegato1());
			call.registerParameter("FirmaDelegato2", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFirmaDelegato2());
			call.registerParameter("DisposizioneGuid", String.class, ParameterMode.IN).bindValue(disposizione.getDisposizioneGuid());		
			call.registerParameter("CodiceBICbeneficiario", String.class, ParameterMode.IN).bindValue(disposizione.getCodiceBICbeneficiario());		
			call.registerParameter("FlagCodiceBICbeneficiario", Boolean.class, ParameterMode.IN).bindValue(disposizione.isFlagCodiceBICbeneficiario());		
			
			
			
			
			
			try {
				Integer result = (Integer)call.getOutputs().getOutputParameterValue("Result");
			
				if (result==1)
					res = 0;

				/*
				Outputs outputs = call.getOutputs();
				UpdateCountOutput output = (UpdateCountOutput) outputs.getCurrent();
			
				if (output.getUpdateCount()>0)
					res = 0;
				else
					res = 1;
				*/
			} catch (Exception ex) {
				res = 4;
			}
			
			
			
			
			
			
			
			
			
			
//			
//			
//			Connection connection = getConnection();
//			// 279 parametri
//			CallableStatement proc;
//			String sql = "{? = spModifyDisposizioni (" + 
//					"?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?,?" +
//					",?,?,?,?,?,?,?,?,?" +
//					 ")}";
//			
//			proc = connection.prepareCall(sql);
//		
//		proc.registerOutParameter(1, Types.INTEGER);
//			
//		proc.setString(2, appVariables.getUserId());//		@SecurityUserId VARCHAR(15),
//		proc.setString(3, appVariables.getGuid());//		@SecurityGuid UNIQUEIDENTIFIER,
//		proc.setObject(4, disposizioneBonifici.getId());//		@ID	int,
//		proc.setObject(5,  disposizioneBonifici.getIddisposizione());//		@IDDisposizione	int,
//		proc.setObject(6, disposizioneBonifici.getIddistintaBanca());//		@IDDistintaBanca	int,
//		proc.setBoolean(7, getBoolean(disposizioneBonifici.getFlagIddistintaBanca()));//		@FlagIDDistintaBanca	bit,
//		proc.setObject(8, disposizioneBonifici.getIdordinante());//		@IDOrdinante	int,
//		proc.setObject(9, disposizioneBonifici.getIddestinatario());//		@IDDestinatario	int,
//		proc.setObject(10, disposizioneBonifici.getIddistintaFlussoInput());//		@IDDistintaFlussoInput	int,
//		proc.setObject(11, disposizioneBonifici.getNumeroDisposizioneDistinta());//		@NumeroDisposizioneDistinta	int,
//		proc.setDate(12, dateToSqlDate(disposizioneBonifici.getDataEsecuzioneDisposizione()));//		@Data_Esecuzione_Disposizione	datetime,
//		proc.setBoolean(13, getBoolean(disposizioneBonifici.isFlagDataEsecuzioneDisposizione()));//		@FlagData_Esecuzione_Disposizione	bit,
//		proc.setDate(14, dateToSqlDate(disposizioneBonifici.getDataValutaDestinatario()));//		@Data_Valuta_Destinatario	datetime,
//		proc.setBoolean(15, getBoolean(disposizioneBonifici.isFlagDataValutaDestinatario()));//		@FlagData_Valuta_Destinatario	bit,
//		proc.setString(16, disposizioneBonifici.getCausale());//		@Causale	varchar(5),
//		proc.setBoolean(17, getBoolean(disposizioneBonifici.isFlagCausale()));//		@FlagCausale	bit,
//		proc.setString(18, disposizioneBonifici.getModalitaPagamento());//		@ModalitaPagamento	varchar,
//		proc.setBoolean(19, getBoolean(disposizioneBonifici.isFlagModalitaPagamento()));//		@FlagModalitaPagamento	bit,
//		proc.setString(20, disposizioneBonifici.getImporto());//		@Importo	varchar(15),
//		proc.setBoolean(21, getBoolean(disposizioneBonifici.isFlagImporto()));//		@FlagImporto	bit,
//		proc.setObject(22, disposizioneBonifici.getImportoDbgrid());//		@ImportoDBGrid	float,
//		proc.setString(23, disposizioneBonifici.getCodiceAbiOrdinante());//		@Codice_Abi_Ordinante	varchar(5),
//		proc.setBoolean(24, getBoolean(disposizioneBonifici.isFlagCodiceAbiOrdinante()));//		@FlagCodice_Abi_Ordinante	bit,
//		proc.setString(25, disposizioneBonifici.getCabOrdinante());//		@Cab_Ordinante	varchar(5),
//		proc.setBoolean(26, getBoolean(disposizioneBonifici.isFlagCabOrdinante()));//		@FlagCab_Ordinante	bit,
//		proc.setString(27, disposizioneBonifici.getContoOrdinante());//		@Conto_Ordinante	varchar(12),
//		proc.setBoolean(28, getBoolean(disposizioneBonifici.isFlagContoOrdinante()));//		@FlagConto_Ordinante	bit,
//		proc.setString(29, disposizioneBonifici.getCodiceAbiDestinatario());//		@Codice_Abi_Destinatario	varchar(5),
//		proc.setBoolean(30, getBoolean(disposizioneBonifici.isFlagCodiceAbiDestinatario()));//		@FlagCodice_Abi_Destinatario	bit,
//		proc.setString(31, disposizioneBonifici.getCabDestinatario());//		@Cab_Destinatario	varchar(5),
//		proc.setBoolean(32, getBoolean(disposizioneBonifici.isFlagCabDestinatario()));//		@FlagCab_Destinatario	bit,
//		proc.setString(33, disposizioneBonifici.getContoDestinatario());//		@Conto_Destinatario	varchar(12),
//		proc.setBoolean(34, getBoolean(disposizioneBonifici.isFlagContoDestinatario()));//		@FlagConto_Destinatario	bit,
//		proc.setShort(35, disposizioneBonifici.getStatoConvalida());//		@StatoConvalida	smallint,
//		proc.setString(36, disposizioneBonifici.getBancaSportelloDomic());//		@Banca_Sportello_Domic	varchar(50),
//		proc.setBoolean(37, getBoolean(disposizioneBonifici.isFlagBancaSportelloDomic()));//		@FlagBanca_Sportello_Domic	bit,
//		proc.setString(38, disposizioneBonifici.getCin());//		@Cin	varchar,
//		proc.setBoolean(39, getBoolean(disposizioneBonifici.isFlagCin()));//		@FlagCin	bit,
//		proc.setString(40, disposizioneBonifici.getCodiceSiaOrdinante());//		@Codice_Sia_Ordinante	varchar(5),
//		proc.setBoolean(41, getBoolean(disposizioneBonifici.isFlagCodiceSiaOrdinante()));//		@FlagCodice_Sia_Ordinante	bit,
//		proc.setString(42, disposizioneBonifici.getTipoCodice());//		@TipoCodice	varchar,
//		proc.setBoolean(43, getBoolean(disposizioneBonifici.isFlagTipoCodice()));//		@FlagTipoCodice	bit,
//		proc.setString(44, disposizioneBonifici.getIndirizzoOrdinante());//		@Indirizzo_Ordinante	varchar(30),
//		proc.setBoolean(45, getBoolean(disposizioneBonifici.isFlagIndirizzoOrdinante()));//		@FlagIndirizzo_Ordinante	bit,
//		proc.setString(46, disposizioneBonifici.getLocalitaOrdinante());//		@Località_Ordinante	varchar(30),
//		proc.setBoolean(47, getBoolean(disposizioneBonifici.isFlagLocalitaOrdinante()));//		@FlagLocalità_Ordinante	bit,
//		proc.setString(48, disposizioneBonifici.getCodiceFiscaleOrdinante());//		@Codice_Fiscale_Ordinante	varchar(16),
//		proc.setBoolean(49, getBoolean(disposizioneBonifici.isFlagCodiceFiscaleOrdinante()));//		@FlagCodice_Fiscale_Ordinante	bit,
//		proc.setString(50, disposizioneBonifici.getDenominazioneDestinatario());//		@DenominazioneDestinatario	varchar(90),
//		proc.setBoolean(51, getBoolean(disposizioneBonifici.isFlagDenominazioneDestinatario()));//		@FlagDenominazioneDestinatario	bit,
//		proc.setString(52, disposizioneBonifici.getCodiceFiscaleDestinatario());//		@Codice_Fiscale_Destinatario	varchar(16),
//		proc.setBoolean(53, getBoolean(disposizioneBonifici.isFlagCodiceFiscaleDestinatario()));//		@FlagCodice_Fiscale_Destinatario	bit,
//		proc.setString(54, disposizioneBonifici.getIndirizzoDestinatario());//		@Indirizzo_Destinatario	varchar(30),
//		proc.setBoolean(55, getBoolean(disposizioneBonifici.isFlagIndirizzoDestinatario()));//		@FlagIndirizzo_Destinatario	bit,
//		proc.setString(56, disposizioneBonifici.getContinuazioneIndirizzoDestinatario());//		@Continuazione_Indirizzo_Destinatario varchar(70),
//		proc.setBoolean(57, getBoolean(disposizioneBonifici.isFlagContinuazioneIndirizzoDestinatario()));//		@FlagContinuazione_Indirizzo_Destinatario bit,
//		proc.setString(58, disposizioneBonifici.getCapDestinatario());//		@Cap_Destinatario	varchar(5),
//		proc.setBoolean(59, getBoolean(disposizioneBonifici.isFlagCapDestinatario()));//		@FlagCap_Destinatario	bit,
//		proc.setString(60, disposizioneBonifici.getCittaDestinatario());//		@Città_Destinatario	varchar(25),
//		proc.setBoolean(61, getBoolean(disposizioneBonifici.isFlagCittaDestinatario()));//		@FlagCittà_Destinatario	bit,
//		proc.setString(62, disposizioneBonifici.getProvinciaDestinatario());		//		@Provincia_Destinatario	varchar(2),
//		proc.setBoolean(63, getBoolean(disposizioneBonifici.isFlagProvinciaDestinatario()));//		@FlagProvincia_Destinatario	bit,
//		proc.setString(64, disposizioneBonifici.getDomiciliazioneDestinatario());//		@Domiciliazione_Destinatario	varchar(65),
//		proc.setBoolean(65, getBoolean(disposizioneBonifici.isFlagDomiciliazioneDestinatario()));//		@FlagDomiciliazione_Destinatario	bit,
//		proc.setString(66, disposizioneBonifici.getDescrizioneDisposizione());//		@Descrizione_Disposizione	varchar(2000),
//		proc.setBoolean(67, getBoolean(disposizioneBonifici.isFlagDescrizioneDisposizione()));//		@FlagDescrizione_Disposizione	bit,
//		proc.setString(68, disposizioneBonifici.getCodiceClienteDebitore());//		@CodiceClienteDebitore	varchar(16),
//		proc.setBoolean(69, getBoolean(disposizioneBonifici.isFlagCodiceClienteDebitore()));//		@FlagCodiceClienteDebitore	bit,
//		proc.setString(70, disposizioneBonifici.getAziendaOrdinante());	//		@Azienda_Ordinante	varchar(96),
//		proc.setBoolean(71, getBoolean(disposizioneBonifici.isFlagAziendaOrdinante()));//		@FlagAzienda_Ordinante	bit,
//		proc.setString(72, disposizioneBonifici.getFirmaEmittente());//		@FirmaEmittente	varchar(20),
//		proc.setBoolean(73, getBoolean(disposizioneBonifici.isFlagFirmaEmittente()));//		@FlagFirmaEmittente	bit,
//		proc.setString(74, disposizioneBonifici.getCampoaDisposizione());		//		@CampoaDisposizione	varchar(8),
//		proc.setBoolean(75, getBoolean(disposizioneBonifici.isFlagCampoaDisposizione()));//		@FlagCampoaDisposizione	bit,
//		proc.setShort(76, disposizioneBonifici.getErroriCampiObbligatori());//		@ErroriCampiObbligatori	smallint,
//		proc.setShort(77, disposizioneBonifici.getErroriCongruenza());//		@ErroriCongruenza	smallint,
//		proc.setShort(78, disposizioneBonifici.getErroriCampiData());//		@ErroriCampiData	smallint,
//		proc.setShort(79, disposizioneBonifici.getErroriPiazzatura());//		@ErroriPiazzatura	smallint,
//		proc.setBoolean(80, getBoolean(disposizioneBonifici.isFlagStampa()));//		@FlagStampa	bit,
//		proc.setString(81, disposizioneBonifici.getCoordinateIbanordinante());//		@CoordinateIBANordinante	varchar(42),
//		proc.setBoolean(82, getBoolean(disposizioneBonifici.isFlagCoordinateIbanordinante()));//		@FlagCoordinateIBANordinante	bit,
//		proc.setString(83, disposizioneBonifici.getCoordinateIbanbeneficiario());//		@CoordinateIBANbeneficiario	varchar(42),
//		proc.setBoolean(84, getBoolean(disposizioneBonifici.isFlagCoordinateIbanbeneficiario()));	//		@FlagCoordinateIBANbeneficiario	bit,
//		proc.setString(85, disposizioneBonifici.getDescrizioneConto());//		@DescrizioneConto	varchar(30),
//		proc.setBoolean(86, getBoolean(disposizioneBonifici.isFlagDescrizioneConto()));//		@FlagDescrizioneConto	bit,
//		proc.setString(87, disposizioneBonifici.getRichiestaEsito());//		@RichiestaEsito	varchar,
//		proc.setBoolean(88, getgetOutputsBoolean(disposizioneBonifici.isFlagRichiestaEsito()));//		@FlagRichiestaEsito	bit,
//		proc.setString(89, disposizioneBonifici.getEsito());//		@Esito	varchar,
//		proc.setBoolean(90, getBoolean(disposizioneBonifici.isFlagEsito()));//		@FlagEsito	bit,
//		proc.setString(91, disposizioneBonifici.getTipoCodiceRiferimento());//		@TipoCodiceRiferimento	varchar,
//		proc.setBoolean(92, getBoolean(disposizioneBonifici.isFlagTipoCodiceRiferimento()));//		@FlagTipoCodiceRiferimento	bit,
//		proc.setString(93, disposizioneBonifici.getCodiceRiferimento());//		@CodiceRiferimento	varchar(35),
//		proc.setBoolean(94, getBoolean(disposizioneBonifici.isFlagCodiceRiferimento()));//		@FlagCodiceRiferimento	bit,
//		proc.setString(95, disposizioneBonifici.getTipoAnomalia());//		@TipoAnomalia	varchar,
//		proc.setBoolean(96, getBoolean(disposizioneBonifici.isFlagTipoAnomalia()));//		@FlagTipoAnomalia	bit,
//		proc.setDate(97, dateToSqlDate(disposizioneBonifici.getValutaOrdinante()));//		@ValutaOrdinante	datetime,
//		proc.setBoolean(98, getBoolean(disposizioneBonifici.isFlagValutaOrdinante()));//		@FlagValutaOrdinante	bit,
//		proc.setDate(99, dateToSqlDate(disposizioneBonifici.getValutaBeneficiario()));//		@ValutaBeneficiario	datetime,
//		proc.setBoolean(100, getBoolean(disposizioneBonifici.isFlagValutaBeneficiario()));//		@FlagValutaBeneficiario	bit,
//		proc.setDate(101, dateToSqlDate(disposizioneBonifici.getDataOrdine()));//		@DataOrdine	datetime,
//		proc.setBoolean(102, getBoolean(disposizioneBonifici.isFlagDataOrdine()));//		@FlagDataOrdine	bit,
//		proc.setDate(103, dateToSqlDate(disposizioneBonifici.getDataContabileAddebito()));//		@DataContabileAddebito	datetime,
//		proc.setBoolean(104, getBoolean(disposizioneBonifici.isFlagDataContabileAddebito()));//		@FlagDataContabileAddebito	bit,
//		proc.setDate(105, dateToSqlDate(disposizioneBonifici.getDataEsecuzione()));//		@DataEsecuzione	datetime,
//		proc.setBoolean(106, getBoolean(disposizioneBonifici.isFlagDataEsecuzione()));//		@FlagDataEsecuzione	bit,
//		proc.setString(107, disposizioneBonifici.getImportoCommissioni());//		@ImportoCommissioni	varchar(15),
//		proc.setBoolean(108, getBoolean(disposizioneBonifici.isFlagImportoCommissioni()));//		@FlagImportoCommissioni	bit,
//		proc.setString(109, disposizioneBonifici.getImportoSpese());//		@ImportoSpese	varchar(15),
//		proc.setBoolean(110, getBoolean(disposizioneBonifici.isFlagImportoSpese()));//		@FlagImportoSpese	bit,
//		proc.setString(111, disposizioneBonifici.getImportoPenali());//		@ImportoPenali	varchar(15),
//		proc.setBoolean(112, getBoolean(disposizioneBonifici.isFlagImportoPenali()));		//		@FlagImportoPenali	bit,
//		proc.setString(113, disposizioneBonifici.getNumeroAssegnoEmesso());//		@NumeroAssegnoEmesso	varchar(16),
//		proc.setBoolean(114, getBoolean(disposizioneBonifici.isFlagNumeroAssegnoEmesso()));//		@FlagNumeroAssegnoEmesso	bit,
//		proc.setString(115, disposizioneBonifici.getBancaGatewayMp());//		@BancaGatewayMP	varchar(5),
//		proc.setBoolean(116, getBoolean(disposizioneBonifici.isFlagBancaGatewayMp()));//		@FlagBancaGatewayMP	bit,
//		proc.setString(117, disposizioneBonifici.getCodiceMarketPlace());//		@CodiceMarketPlace	varchar(5),
//		proc.setBoolean(118, getBoolean(disposizioneBonifici.isFlagCodiceMarketPlace()));//		@FlagCodiceMarketPlace	bit,
//		proc.setString(119, disposizioneBonifici.getUserId());//		@UserID	varchar(10),
//		proc.setString(120, disposizioneBonifici.getProvenienzaDisposizione());			//		@ProvenienzaDisposizione	varchar(10),
//		proc.setString(121, disposizioneBonifici.getTipoFlussoInput());//		@TipoFlussoInput	varchar(2),
//		proc.setString(122, disposizioneBonifici.getIddisposizioneFunzioneOrdinante());//		@IDDisposizioneFunzioneOrdinante	varchar(30),
//		proc.setDate(123, dateToSqlDate(disposizioneBonifici.getDataInserimentoDisposizione()));//		@DataInserimentoDisposizione	datetime,
//		proc.setDate(124, dateToSqlDate(disposizioneBonifici.getDataFlussoDisposizione()));//		@DataFlussoDisposizione	datetime,
//		proc.setDate(125, dateToSqlDate(disposizioneBonifici.getDataEsitoDisposizione()));//		@DataEsitoDisposizione	datetime,
//		proc.setBoolean(126, getBoolean(disposizioneBonifici.isFlagDataEsitoDisposizione()));//		@FlagDataEsitoDisposizione	bit,
//		proc.setDate(127, dateToSqlDate(disposizioneBonifici.getDataUltimoEsitoAcquisito()));//		@DataUltimoEsitoAcquisito	datetime,
//		proc.setBoolean(128, getBoolean(disposizioneBonifici.isFlagDataUltimoEsitoAcquisito()));//		@FlagDataUltimoEsitoAcquisito	bit,
//		proc.setString(129, disposizioneBonifici.getStatoDisposizione());//		@StatoDisposizione	varchar(15),
//		proc.setBoolean(130, getBoolean(disposizioneBonifici.isFlagStatoDisposizione()));//		@FlagStatoDisposizione	bit,
//		proc.setString(131, disposizioneBonifici.getCodiceSocieta());//		@CodiceSocietà	varchar(3),
//		proc.setBoolean(132, getBoolean(disposizioneBonifici.isFlagCodiceSocieta()));//		@FlagCodiceSocietà	bit,
//		proc.setString(133, disposizioneBonifici.getCausaleMovimento());//		@CausaleMovimento	varchar(10),
//		proc.setBoolean(134, getBoolean(disposizioneBonifici.isFlagCausaleMovimento()));//		@FlagCausaleMovimento	bit,
//		proc.setString(135, disposizioneBonifici.getDescrizioneOperazione());//		@DescrizioneOperazione	varchar(60),
//		proc.setBoolean(136, getBoolean(disposizioneBonifici.isFlagDescrizioneOperazione()));//		@FlagDescrizioneOperazione	bit,
//		proc.setString(137, disposizioneBonifici.getTipoMovimento());//		@TipoMovimento	varchar(10),
//		proc.setBoolean(138, getBoolean(disposizioneBonifici.isFlagTipoMovimento()));//		@FlagTipoMovimento	bit,
//		proc.setString(139, disposizioneBonifici.getFunzioneOrdinante());//		@FunzioneOrdinante	varchar(10),
//		proc.setBoolean(140, getBoolean(disposizioneBonifici.isFlagFunzioneOrdinante()));	//		@FlagFunzioneOrdinante	bit,
//		proc.setString(141, disposizioneBonifici.getDescrizioneMovimento());//		@DescrizioneMovimento	varchar(50),
//		proc.setBoolean(142, getBoolean(disposizioneBonifici.isFlagDescrizioneMovimento()));//		@FlagDescrizioneMovimento	bit,
//		proc.setBoolean(143, getBoolean(disposizioneBonifici.isContabilizzazioneMovimento()));//		@ContabilizzazioneMovimento	bit,
//		proc.setBoolean(144, getBoolean(disposizioneBonifici.isFlagContabilizzazioneMovimento()));		//		@FlagContabilizzazioneMovimento	bit,
//		proc.setBoolean(145, getBoolean(disposizioneBonifici.isForzaStatoAr()));//		@ForzaStatoAR	bit,
//		proc.setString(146, disposizioneBonifici.getRamoMinisteriale());//		@RamoMinisteriale	varchar(10),
//		proc.setBoolean(147, getBoolean(disposizioneBonifici.isFlagRamoMinisteriale()));//		@FlagRamoMinisteriale	bit,
//		proc.setString(148, disposizioneBonifici.getRamoTecnico());//		@RamoTecnico	varchar(2),
//		proc.setBoolean(149, getBoolean(disposizioneBonifici.isFlagRamoTecnico()));	//		@FlagRamoTecnico	bit,
//		proc.setString(150, disposizioneBonifici.getAgenziaCdc());//		@AgenziaCDC	varchar(10),
//		proc.setBoolean(151, getBoolean(disposizioneBonifici.isFlagAgenziaCdc()));//		@FlagAgenziaCDC	bit,
//		proc.setString(152, disposizioneBonifici.getDescrizioneAgenziaCdc());//		@DescrizioneAgenziaCDC	varchar(50),
//		proc.setBoolean(153, getBoolean(disposizioneBonifici.isFlagDescrizioneAgenziaCdc()));//		@FlagDescrizioneAgenziaCDC	bit,
//		proc.setString(154, disposizioneBonifici.getStatistico1());//		@Statistico1	varchar(10),
//		proc.setBoolean(155, getBoolean(disposizioneBonifici.isFlagStatistico1()));//		@FlagStatistico1	bit,
//		proc.setString(156, disposizioneBonifici.getStatistico2());//		@Statistico2	varchar(10),
//		proc.setBoolean(157, getBoolean(disposizioneBonifici.isFlagStatistico2()));//		@FlagStatistico2	bit,
//		proc.setString(158, disposizioneBonifici.getNumeroSinistroDanni());//		@NumeroSinistroDanni	varchar(10),
//		proc.setBoolean(159, getBoolean(disposizioneBonifici.isFlagNumeroSinistroDanni()));//		@FlagNumeroSinistroDanni	bit,
//		proc.setBytes(160, disposizioneBonifici.getLastSaved());//		@LastSaved	timestamp,
//		proc.setString(161, disposizioneBonifici.getDivisaContoOrdinante());//		@Divisa_Conto_Ordinante varchar(3),
//		proc.setBoolean(162, getBoolean(disposizioneBonifici.getFlagDivisaContoOrdinante()));//		@FlagDivisa_Conto_Ordinante bit,
//		proc.setString(163, disposizioneBonifici.getNoteFunzioneOrdinante());//		@NoteFunzioneOrdinante varchar(60),
//		proc.setBoolean(164, getBoolean(disposizioneBonifici.isFlagNoteFunzioneOrdinante()));//		@FlagNoteFunzioneOrdinante bit,
//		proc.setString(165, disposizioneBonifici.getNoteTesoreria());//		@NoteTesoreria	 varchar(60),
//		proc.setBoolean(166, getBoolean(disposizioneBonifici.isFlagNoteTesoreria()));//		@FlagNoteTesoreria bit,
//		proc.setString(167, disposizioneBonifici.getNumeroPolizza()); //		@NumeroPolizza varchar(13),
//		proc.setBoolean(168, getBoolean(disposizioneBonifici.isFlagNumeroPolizza()));//		@FlagNumeroPolizza bit,
//		proc.setBoolean(169, getBoolean(disposizioneBonifici.isNoContabilizzazioneEsito()));//		@NoContabilizzazioneEsito bit,
//		proc.setBoolean(170, getBoolean(disposizioneBonifici.isFlagNoContabilizzazioneEsito()));//		@FlagNoContabilizzazioneEsito bit,
//		proc.setBoolean(171, getBoolean(disposizioneBonifici.isNoTabellaContabilizzazione()));//		@NoTabellaContabilizzazione bit,
//		proc.setBoolean(172, getBoolean(disposizioneBonifici.isFlagNoTabellaContabilizzazione()));//		@FlagNoTabellaContabilizzazione bit,
//		proc.setBoolean(173, getBoolean(disposizioneBonifici.isContoPerCassa()));//		@ContoPerCassa bit,
//		proc.setBoolean(174, getBoolean(disposizioneBonifici.isFlagContoPerCassa()));//		@FlagContoPerCassa bit,
//		proc.setString(175, disposizioneBonifici.getCircuitoPagamento());//		@CircuitoPagamento varchar(1),
//		proc.setBoolean(176, getBoolean(disposizioneBonifici.isFlagCircuitoPagamento()));//		@FlagCircuitoPagamento bit,
//		proc.setString(177, disposizioneBonifici.getUtenteNas());			//		@UtenteNAS varchar(50),
//		proc.setBoolean(178, disposizioneBonifici.isFlagUtenteNas());//		@FlagUtenteNAS bit,
//		proc.setString(179, disposizioneBonifici.getTipoDisposizioneNas());//		@TipoDisposizioneNAS varchar(3),
//		proc.setBoolean(180, getBoolean(disposizioneBonifici.isFlagTipoDisposizioneNas()));//		@FlagTipoDisposizioneNAS bit,
//		proc.setString(181, disposizioneBonifici.getCausaleDisposizioneNas());//		@CausaleDisposizioneNAS varchar(5),
//		proc.setBoolean(182, getBoolean(disposizioneBonifici.isFlagCausaleDisposizioneNas()));//		@FlagCausaleDisposizioneNAS bit,
//		proc.setString(183, disposizioneBonifici.getNaturaPagamentoNas());//		@NaturaPagamentoNAS varchar(1),
//		proc.setBoolean(184, getBoolean(disposizioneBonifici.isFlagNaturaPagamentoNas()));//		@FlagNaturaPagamentoNAS bit,
//		proc.setDate(185, dateToSqlDate(disposizioneBonifici.getDataSpossessamentoNas()));//		@DataSpossessamentoNAS datetime,
//		proc.setBoolean(186, getBoolean(disposizioneBonifici.isFlagDataSpossessamentoNas()));//		@FlagDataSpossessamentoNAS bit,
//		proc.setString(187, disposizioneBonifici.getDivisaImportoNas());//		@DivisaImportoNAS varchar(3),
//		proc.setBoolean(188, getBoolean(disposizioneBonifici.isFlagDivisaImportoNas()));//		@FlagDivisaImportoNAS bit,
//		proc.setString(189, disposizioneBonifici.getRuoloBeneficiarioNas());//		@RuoloBeneficiarioNAS varchar(50),
//		proc.setBoolean(190, getBoolean(disposizioneBonifici.isFlagRuoloBeneficiarioNas()));//		@FlagRuoloBeneficiarioNAS bit,
//		proc.setString(191, disposizioneBonifici.getDenominazionePosizioneNas());//		@DenominazionePosizioneNAS varchar(200),
//		proc.setBoolean(192, getBoolean(disposizioneBonifici.isFlagDenominazionePosizioneNas()));//		@FlagDenominazionePosizioneNAS bit,
//		proc.setString(193, disposizioneBonifici.getRuoloPosizioneNas());//		@RuoloPosizioneNAS varchar(50),
//		proc.setBoolean(194, getBoolean(disposizioneBonifici.isFlagRuoloPosizioneNas()));//		@FlagRuoloPosizioneNAS bit,
//		proc.setString(195, disposizioneBonifici.getIndirizzoDomiciliazioneDestinatario());//		@Indirizzo_Domiciliazione_Destinatario varchar(30),
//		proc.setBoolean(196, getBoolean(disposizioneBonifici.isFlagIndirizzoDomiciliazioneDestinatario()));//		@FlagIndirizzo_Domiciliazione_Destinatario bit,
//		proc.setString(197, disposizioneBonifici.getContinuazioneIndirizzoDomiciliazioneDestinatario());//		@Continuazione_Indirizzo_Domiciliazione_Destinatario varchar(70),
//		proc.setBoolean(198, getBoolean(disposizioneBonifici.isFlagContinuazioneIndirizzoDomiciliazioneDestinatario()));//		@FlagContinuazione_Indirizzo_Domiciliazione_Destinatario bit,
//		proc.setString(199, disposizioneBonifici.getCapDomiciliazioneDestinatario());//		@CAP_Domiciliazione_Destinatario varchar(5),
//		proc.setBoolean(200, getBoolean(disposizioneBonifici.isFlagCapDomiciliazioneDestinatario()));//		@FlagCAP_Domiciliazione_Destinatario bit,
//		proc.setString(201, disposizioneBonifici.getComuneDomiciliazioneDestinatario());//		@Comune_Domiciliazione_Destinatario varchar(23),
//		proc.setBoolean(202, getBoolean(disposizioneBonifici.isFlagComuneDomiciliazioneDestinatario()));	//		@FlagComune_Domiciliazione_Destinatario bit,
//		proc.setString(203, disposizioneBonifici.getProvinciaDomiciliazioneDestinatario());//		@Provincia_Domiciliazione_Destinatario varchar(2),
//		proc.setBoolean(204, getBoolean(disposizioneBonifici.isFlagProvinciaDomiciliazioneDestinatario()));//		@FlagProvincia_Domiciliazione_Destinatario bit,
//		proc.setString(205, disposizioneBonifici.getDataLuogoIstruzioni());//		@DataLuogoIstruzioni varchar(60),
//		proc.setBoolean(206, getBoolean(disposizioneBonifici.isFlagDataLuogoIstruzioni()));//		@FlagDataLuogoIstruzioni bit,
//		//proc.setString(207, "AAA");
//		proc.setString(207,ClobToString(disposizioneBonifici.getStreamFirmaDigitaleNas()));//		@StreamFirmaDigitaleNAS text,
//		//proc.setBytes(207, null); //disposizioneBonifici.getStreamFirmaDigitaleNas()));//		@StreamFirmaDigitaleNAS text,
//		proc.setBoolean(208, getBoolean(disposizioneBonifici.isFlagStreamFirmaDigitaleNas()));//		@FlagStreamFirmaDigitaleNAS bit,
//		proc.setString(209, disposizioneBonifici.getRamoMinisterialeEffettivo());//		@RamoMinisterialeEffettivo varchar(10),
//		proc.setBoolean(210, getBoolean(disposizioneBonifici.isFlagRamoMinisterialeEffettivo()));//		@FlagRamoMinisterialeEffettivo bit,
//		proc.setBoolean(211, getBoolean(disposizioneBonifici.getCausaleAntiriciclaggio()));//		@CausaleAntiriciclaggio bit,
//		proc.setBoolean(212, getBoolean(disposizioneBonifici.isFlagCausaleAntiriciclaggio()));//		@FlagCausaleAntiriciclaggio bit,
//		proc.setString(213, disposizioneBonifici.getCodiceRaccomandata());//		@CodiceRaccomandata varchar(12),
//		proc.setBoolean(214, getBoolean(disposizioneBonifici.isFlagCodiceRaccomandata()));//		@FlagCodiceRaccomandata bit,
//		proc.setDate(215, dateToSqlDate(disposizioneBonifici.getDataIncassoAssegnoTraenza()));//		@DataIncassoAssegnoTraenza datetime,
//		proc.setBoolean(216, getBoolean(disposizioneBonifici.isFlagDataIncassoAssegnoTraenza()));	//		@FlagDataIncassoAssegnoTraenza bit,
//		proc.setString(217, disposizioneBonifici.getCodiceFrazionarioPagamento());//		@CodiceFrazionarioPagamento varchar(5),
//		proc.setBoolean(218, getBoolean(disposizioneBonifici.isFlagCodiceFrazionarioPagamento()));//		@FlagCodiceFrazionarioPagamento bit,
//		proc.setString(219, disposizioneBonifici.getDescrizioneFrazionarioPagamento());//		@DescrizioneFrazionarioPagamento varchar(35),
//		proc.setBoolean(220, getBoolean(disposizioneBonifici.isFlagDescrizioneFrazionarioPagamento()));//		@FlagDescrizioneFrazionarioPagamento bit,
//		proc.setString(221, disposizioneBonifici.getSezioneFrazionarioPagamento());//		@SezioneFrazionarioPagamento varchar(2),
//		proc.setBoolean(222, getBoolean(disposizioneBonifici.isFlagSezioneFrazionarioPagamento()));//		@FlagSezioneFrazionarioPagamento bit,
//		proc.setString(223, disposizioneBonifici.getOraPagamento());//		@OraPagamento varchar(6),
//		proc.setBoolean(224, getBoolean(disposizioneBonifici.isFlagOraPagamento()));//		@FlagOraPagamento bit,
//		proc.setString(225, disposizioneBonifici.getIdentificativoLetteraBeneficiario());//		@IdentificativoLetteraBeneficiario varchar(30),
//		proc.setBoolean(226, getBoolean(disposizioneBonifici.isFlagIdentificativoLetteraBeneficiario()));//		@FlagIdentificativoLetteraBeneficiario bit,
//		proc.setDate(227, dateToSqlDate(disposizioneBonifici.getDataCambioStatoDisposizioneNas()));//		@DataCambioStatoDisposizioneNAS datetime,
//		proc.setString(228, disposizioneBonifici.getStatoDisposizioneNas());//		@StatoDisposizioneNAS varchar(3), 
//		proc.setBoolean(229, getBoolean(disposizioneBonifici.isFlagStatoDisposizioneNas()));//		@FlagStatoDisposizioneNAS bit,
//		proc.setString(230, disposizioneBonifici.getCausaScartoSep());//		@CausaScartoSep varchar(8),
//		proc.setBoolean(231, getBoolean(disposizioneBonifici.isFlagCausaScartoSep()));//		@FlagCausaScartoSep bit,
//		proc.setString(232, disposizioneBonifici.getStatoDisposizioneSep());//		@StatoDisposizioneSep varchar(8),
//		proc.setBoolean(233, getBoolean(disposizioneBonifici.isFlagStatoDisposizioneSep()));//		@FlagStatoDisposizioneSep bit,
//		proc.setDate(234, dateToSqlDate(disposizioneBonifici.getDataEmissioneSep()));//		@DataEmissioneSep datetime,
//		proc.setBoolean(235, getBoolean(disposizioneBonifici.isFlagDataEmissioneSep()));//		@FlagDataEmissioneSep bit,
//		proc.setDate(236, dateToSqlDate(disposizioneBonifici.getDataScadenzaSep()));//		@DataScadenzaSep datetime,
//		proc.setBoolean(237, getBoolean(disposizioneBonifici.isFlagDataScadenzaSep()));//		@FlagDataScadenzaSep bit,
//		proc.setString(238, disposizioneBonifici.getStatoAnomaliaSep());//		@StatoAnomaliaSep varchar(8),
//		proc.setBoolean(239, getBoolean(disposizioneBonifici.isFlagStatoAnomaliaSep()));//		@FlagStatoAnomaliaSep bit,
//		proc.setDate(240, dateToSqlDate(disposizioneBonifici.getDataAnomaliaSep()));//		@DataAnomaliaSep datetime,
//		proc.setBoolean(241, getBoolean(disposizioneBonifici.isFlagDataAnomaliaSep()));//		@FlagDataAnomaliaSep bit,
//		proc.setString(242, disposizioneBonifici.getImportoAddebitatoSep());//		@ImportoAddebitatoSep varchar(15),
//		proc.setBoolean(243, getBoolean(disposizioneBonifici.isFlagImportoAddebitatoSep()));//		@FlagImportoAddebitatoSep bit,
//		proc.setString(244, disposizioneBonifici.getCausaleStornoBonificoSep());//		@CausaleStornoBonificoSep varchar(150),
//		proc.setBoolean(245, getBoolean(disposizioneBonifici.isFlagCausaleStornoBonificoSep()));//		@FlagCausaleStornoBonificoSep bit,
//		proc.setString(246, disposizioneBonifici.getCodiceStornoBonificoSep());//		@CodiceStornoBonificoSep varchar(5),
//		proc.setBoolean(247, getBoolean(disposizioneBonifici.isFlagCodiceStornoBonificoSep()));//		@FlagCodiceStornoBonificoSep bit,
//		proc.setString(248, disposizioneBonifici.getAbiNegoziazioneAssegno());//		@AbiNegoziazioneAssegno varchar(5),
//		proc.setBoolean(249, getBoolean(disposizioneBonifici.isFlagAbiNegoziazioneAssegno()));//		@FlagAbiNegoziazioneAssegno bit,
//		proc.setString(250, disposizioneBonifici.getCabNegoziazioneAssegno());//		@CabNegoziazioneAssegno varchar(5),
//		proc.setBoolean(251, getBoolean(disposizioneBonifici.isFlagCabNegoziazioneAssegno()));//		@FlagCabNegoziazioneAssegno bit,
//		proc.setString(252, disposizioneBonifici.getTipoIncassoAssegno());//		@TipoIncassoAssegno varchar(5),
//		proc.setBoolean(253, getBoolean(disposizioneBonifici.isFlagTipoIncassoAssegno()));//		@FlagTipoIncassoAssegno bit,
//		proc.setString(254, disposizioneBonifici.getNumeroRaccomandataDisguidata());//		@NumeroRaccomandataDisguidata varchar(20),
//		proc.setBoolean(255, getBoolean(disposizioneBonifici.isFlagNumeroRaccomandataDisguidata()));//		@FlagNumeroRaccomandataDisguidata bit,
//		proc.setString(256, disposizioneBonifici.getUtenteTestWebService());//		@UtenteTestWebService varchar(1),
//		proc.setBoolean(257, getBoolean(disposizioneBonifici.isFlagUtenteTestWebService()));//		@FlagUtenteTestWebService bit,
//		proc.setString(258, disposizioneBonifici.getTipoSpedizioneAssegno());//		@TipoSpedizioneAssegno varchar(2),
//		proc.setBoolean(259, getBoolean(disposizioneBonifici.isFlagTipoSpedizioneAssegno()));//		@FlagTipoSpedizioneAssegno bit,
//		proc.setString(260, disposizioneBonifici.getNomeSupportoFlussoInputCbi());//		@NomeSupportoFlussoInputCBI varchar(20),
//		proc.setBoolean(261, getBoolean(disposizioneBonifici.isFlagNomeSupportoFlussoInputCbi()));//		@FlagNomeSupportoFlussoInputCBI bit,
//		proc.setString(262, disposizioneBonifici.getCodiceCucOrdinante());//		@Codice_CUC_Ordinante varchar(35),
//		proc.setBoolean(263, getBoolean(disposizioneBonifici.isFlagCodiceCucOrdinante()));//		@FlagCodice_CUC_Ordinante bit,
//		proc.setBoolean(264, getBoolean(disposizioneBonifici.isBonificoHigPriority()));//		@BonificoHigPriority bit,
//		proc.setBoolean(265, getBoolean(disposizioneBonifici.isFlagBonificoHigPriority()));//		@FlagBonificoHigPriority bit,
//		proc.setString(266, disposizioneBonifici.getBicCreditore());//		@BIC_Creditore varchar(11),
//		proc.setBoolean(267, getBoolean(disposizioneBonifici.isFlagBicCreditore()));//		@FlagBIC_Creditore bit,
//		proc.setString(268, disposizioneBonifici.getEsitoSepaRsnCode());//		@EsitoSepaRsnCode varchar(4),
//		proc.setBoolean(269, getBoolean(disposizioneBonifici.isFlagEsitoSepaRsnCode()));//		@FlagEsitoSepaRsnCode bit,
//		proc.setString(270, disposizioneBonifici.getEsitoSepaPrtry());//		@EsitoSepaPrtry varchar(35),
//		proc.setBoolean(271, getBoolean(disposizioneBonifici.isFlagEsitoSepaPrtry()));//		@FlagEsitoSepaPrtry bit,
//		proc.setString(272, disposizioneBonifici.getEsitoSepaAddtlInf());//		@EsitoSepaAddtlInf varchar(105),
//		proc.setBoolean(273, getBoolean(disposizioneBonifici.isFlagEsitoSepaAddtlInf()));//		@FlagEsitoSepaAddtlInf bit,
//		proc.setString(274, disposizioneBonifici.getEsitoSepaElmRfc());//		@EsitoSepaElmRfc varchar(255),
//		proc.setBoolean(275,getBoolean( disposizioneBonifici.isFlagEsitoSepaElmRfc()));//		@FlagEsitoSepaElmRfc bit,
//		proc.setString(276, disposizioneBonifici.getEsitoMsgId());//		@EsitoMsgId varchar(255),
//		proc.setBoolean(277, getBoolean(disposizioneBonifici.isFlagEsitoMsgId()));//		@FlagEsitoMsgId bit,
//		proc.setBoolean(278, getBoolean(disposizioneBonifici.isFirmaDelegato1()));//		@FirmaDelegato1 bit,
//		proc.setBoolean(279, getBoolean(disposizioneBonifici.isFirmaDelegato2()));//		@FirmaDelegato2 bit,
//		proc.setString(280,disposizioneBonifici.getDisposizioneGuid());//		@DisposizioneGuid uniqueidentifier
//		
//		
//		proc.execute();
//		
//		res = proc.getString(1);
//		
		if (disposizione.getIddistintaBanca()!=null && disposizione.getIddistintaBanca()!=0) {
			try {
				Connection connection = getConnection();
				CallableStatement proc = connection.prepareCall("{? = call spRecalcDistinta (?,?,?)}");
					
				proc.registerOutParameter(1, Types.VARCHAR);
				proc.setString(2, appVariables.getUserId());
				proc.setString(3, appVariables.getGuid());
				proc.setObject(4, disposizione.getIddistintaBanca());
				
				proc.execute();
				proc.getMoreResults();
					
				int ires = proc.getInt(1);
					
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
	 }
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//if (tx)
			//	rollback();
			return null;
		}
			
		return res;
	}

	public List<DisposizioniBonificiDecoded> listDecoded(DisposizioniFiltroBean filterBean, AppVariables appVariables) {
		boolean tx = startTransaction();
		try {
			String sql = generateQuery(filterBean, appVariables, false, true);
			sql += " order by d.id";
			
			Query q = currentSession().createSQLQuery(sql)
					.addEntity("d", DisposizioniBonifici.class)
					.addEntity("cdCausale",  ComboDisposizioni.class)
					.addEntity("cdStatoDisp",  ComboDisposizioni.class)
					.addEntity("cdStatoAnom",  ComboDisposizioni.class)
					.addEntity("cdScarto",  ComboDisposizioni.class);
	
			q.setResultTransformer(new ResultTransformer() {				
				@Override
				public Object transformTuple(Object[] tuple, String[] aliases) {
					return new DisposizioniBonificiDecoded((DisposizioniBonifici) tuple[0], (ComboDisposizioni) tuple[1], (ComboDisposizioni) tuple[2], (ComboDisposizioni) tuple[3], (ComboDisposizioni) tuple[4]);
				}
				
				@Override
				public List transformList(List collection) {
					return collection;
				}
			});
			
			
			if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
				q.setParameterList("ids", filterBean.getSelectedIds());
			
			List<DisposizioniBonificiDecoded> res = (List<DisposizioniBonificiDecoded>)q.list();
			
			return res;		
		} finally {
			if (tx)
				commit();
		}
	}

	public List<DisposizioniBonificiDecoded> filterDecoded(RicercaDisposizioniFilterBean filterBean) {
		boolean tx = startTransaction();
		
		try {
			String sql = "select {d.*}, {cdCausale.*}, {cdStatoDisp.*}, {cdStatoAnom.*}, {cdScarto.*} from disposizioni_Bonifici d WITH (NOLOCK)"+
						" LEFT JOIN DistintaFlussiInput WITH (NOLOCK) ON DistintaFlussiInput.IDDistintaFlusso = d.IDDistintaFlussoInput";
			sql += " left join Combo_Disposizioni cdCausale on cdCausale.Tipologia='BONIFICI' And cdCausale.Campo='Causale' And cdCausale.Codice=d.causale " +
					" left join Combo_Disposizioni cdStatoDisp on cdStatoDisp.Tipologia='BONIFICI' And cdStatoDisp.Campo='StatoDisposizioneSep' And cdStatoDisp.Codice=d.causale " +
					" left join Combo_Disposizioni cdStatoAnom on cdStatoAnom.Tipologia='BONIFICI' And cdStatoDisp.Campo='StatoAnomaliaSep' And cdStatoDisp.Codice=d.causale " +
					" left join Combo_Disposizioni cdScarto on cdScarto.Tipologia='BONIFICI' And cdScarto.Campo='CausaScartoSep' And cdScarto.Codice=d.causale ";
			
			sql += " where isNull(DistintaFlussiInput.MassiveLoadStatus,3) = 3";
		
			sql += addFiltersToQuery(filterBean);
	
			sql += " order by d.id";
			
			SQLQuery q=currentSession().createSQLQuery(sql)
					.addEntity("d", DisposizioniBonifici.class)
					.addEntity("cdCausale",  ComboDisposizioni.class)
					.addEntity("cdStatoDisp",  ComboDisposizioni.class)
					.addEntity("cdStatoAnom",  ComboDisposizioni.class)
					.addEntity("cdScarto",  ComboDisposizioni.class);
			

			q.setResultTransformer(new ResultTransformer() {				
				@Override
				public Object transformTuple(Object[] tuple, String[] aliases) {
					return new DisposizioniBonificiDecoded((DisposizioniBonifici) tuple[0], (ComboDisposizioni) tuple[1], (ComboDisposizioni) tuple[2], (ComboDisposizioni) tuple[3], (ComboDisposizioni) tuple[4]);
				}
				
				@Override
				public List transformList(List collection) {
					return collection;
				}
			});
			
			
			q=setQueryParameters(q, filterBean);

			if (filterBean.getSelectedIds()!=null && filterBean.getSelectedIds().length>0 && filterBean.getSelectedIds()[0]!=-1)
				q.setParameterList("ids", filterBean.getSelectedIds());

			
			List<DisposizioniBonificiDecoded> res=null;
			
			try {
				res = (List<DisposizioniBonificiDecoded>) q.list();
			} catch (Exception ex) {
				ex.printStackTrace();
				return new ArrayList<DisposizioniBonificiDecoded>();
			}
				
			return res;
		} finally {				
			if (tx)
				commit(); 
		}	}

	public List<DisposizioniBonifici> listByDistintaBancaNoTransaction(Integer idDistintaBanca) {
		Query q = currentSession().createSQLQuery("select {d.*} from Disposizioni_Bonifici d where iddistintabanca=" + idDistintaBanca)
			.addEntity("d", DisposizioniBonifici.class);
	
		List<DisposizioniBonifici> res = q.list();
		return res;
	}

	public Integer generaRichiamo(AppVariables appVariables, int idDistinta, int idDisposizione) throws SQLException {
		boolean tx = startTransaction();
		try {
			Connection connection = getConnection();
			CallableStatement proc = connection.prepareCall("{? = call spMI_RichiediRichiamoBonDom (?,?,?,?,?,?)}");
				
			proc.registerOutParameter(1, Types.VARCHAR);
			proc.setString(2, appVariables.getUserId());
			proc.setString(3, appVariables.getGuid());
			proc.setObject(4, idDistinta);
			proc.setObject(5, idDisposizione);
			proc.setObject(6, appVariables.getUserId());
			proc.setObject(7, appVariables.getDenominazioneUtente());
			
			proc.execute();
			proc.getMoreResults();
				
			Integer ires = proc.getInt(1);
			
			if (ires==-1 || ires==-99) {
				tx = false;
				rollback();
			}
			
			return ires;
		} finally {
			if (tx)
				commit();
		}
		
	}

	public Boolean cancellazioneMassiva(DisposizioniFiltroBean disposizioniFiltroBean, String profiloUtente, UserData userdata, AppVariables appVariables) {
		if (profiloUtente=="VI" || disposizioniFiltroBean.getSelectedIds()==null ||  disposizioniFiltroBean.getSelectedIds().length<1)
			return false;
		
		boolean res = true;
		List<DisposizioniBonifici> disposizioni = list(-1,-1,disposizioniFiltroBean, appVariables);
		
	
		try {
			for (int i=0;i<disposizioni.size();i++) {
				// verifica se la disposizione è cancellabile
				DisposizioniBonifici disposizione = disposizioni.get(i);
				
				if (disposizione.getStatoDisposizione().equalsIgnoreCase("Approvata")||
					disposizione.getStatoDisposizione().equalsIgnoreCase("Confermata")||
					disposizione.getStatoDisposizione().equalsIgnoreCase("Predisposta")) {
	
					// predisponi il log variazioni
					LogVariazioniBean logModifiche = new LogVariazioniBean();
					logModifiche.setFieldName("StatoDisposizione");
						logModifiche.setOldValue(disposizione.getStatoDisposizione());
						logModifiche.setNewValue("Cancellata");
						logModifiche.setTimestamp(new Date());

					List<LogVariazioniBean> listaVariazioni = new ArrayList<LogVariazioniBean>();
					listaVariazioni.add(logModifiche);				
				
					disposizione.setStatoDisposizione("Cancellata");
					boolean tx = startTransaction();	
					int saveResult;

					try {
						saveResult = saveDisposizione(disposizione, userdata, appVariables, null);
					} finally{
						if (tx)
							commit();
					}
					try {
						if (saveResult==0)
							logVariazioniDAO.saveAll(appVariables.getUserId(),appVariables.getDenominazioneUtente(), disposizione.getIddisposizione(),listaVariazioni);
					}catch(Exception ex) {
						// should never happen
						ex.printStackTrace();
					}
					res = saveResult == 0;
				} else
					res = false;
			}
			
		} finally {
			
		}
		return res;
	}

		
}
