public void procesarAjaxChangeListener(GestorEstadoComponentes gestorEstados,
			GestorDatosComponentes gestorDatos) {
		// Id de usuario
		Integer intCodUsuario = ContextUtils.getUserIdAsInteger();
		// Usuarios concurrentes
		String strNumUsersConcurrentes = (String)gestorDatos.getValue("numUsuariosConcu");		
		Integer intNumUserConcurrentes = Integer.valueOf(strNumUsersConcurrentes);
		// Tiempo
		String strIdUnidadTiempo = (String)gestorDatos.getValue("idUnidadTiempo");		
		Integer intIdUnidadTiempo = Integer.valueOf(strIdUnidadTiempo);
		// Resolución
		String strIdResolution = (String)gestorDatos.getValue("resolution");		
		Integer intIdResolution = Integer.valueOf(strIdResolution);
		// Disponibilidad
		Boolean highAvailability = (Boolean)gestorDatos.getValue("checkAvailability");		
		Integer intHighAvailability = highAvailability?new Integer(1):new Integer(0);
		Float precioTotal = null;
		if(gestorDatos.getValue("precioTotal") != null && !"".equals(gestorDatos.getValue("precioTotal")) && !"0.0".equals(gestorDatos.getValue("precioTotal"))){
			precioTotal = (Float)gestorDatos.getValue("precioTotal");
			BigDecimal bidPrecioTotal = new BigDecimal(precioTotal);
			bidPrecioTotal = bidPrecioTotal.setScale(2, RoundingMode.HALF_EVEN);
			precioTotal = bidPrecioTotal.floatValue();		
		}else{
			if(gestorDatos.getValue("precioTotalTiempo") != null && !"".equals(gestorDatos.getValue("precioTotalTiempo")) & !"0.0".equals(gestorDatos.getValue("precioTotalTiempo"))){
				Float precioTotalTiempo = (Float)gestorDatos.getValue("precioTotalTiempo");
				BigDecimal bidPrecioTotal = new BigDecimal(precioTotalTiempo);
				bidPrecioTotal = bidPrecioTotal.setScale(2, RoundingMode.HALF_EVEN);
				precioTotal = bidPrecioTotal.floatValue();				
			}else{
				Float precioTotalUso = (Float)gestorDatos.getValue("precioTotalUso");
				Float precioHosting = (Float)gestorDatos.getValue("precioTotalHosting");
				BigDecimal bidPrecioTotal = new BigDecimal(precioTotalUso+precioHosting);
				bidPrecioTotal = bidPrecioTotal.setScale(2, RoundingMode.HALF_EVEN);
				precioTotal = bidPrecioTotal.floatValue();
			}
		}
		// TODO cambiar el segundo parámetro cuando podamos distinguir
		// entre ficheros de varias configuraciones
		try {
			String billingAgreementId = HelperContext.getInstance().getValueContext("SECURE_USER_BILLING_AGREEMENT_ID");
			String resultadoAcuerdo = "noAgreement";
			if(billingAgreementId != null && !"".equals(billingAgreementId)){
				// Hacemos llamada a Paypal para comprobar el estado del acuerdo
				String ppresponse = PaypalUtilities.getInstance().baUpdate(billingAgreementId);
				// NVPDecoder object is created
				NVPDecoder resultValues = new NVPDecoder();
				// decode method of NVPDecoder will parse the request and decode the
				// name and value pair
				resultValues.decode(ppresponse);
				// checks for Acknowledgement and redirects accordingly to display
				// error messages
				String strAck = resultValues.get("ACK");
				if (strAck != null
						&& !(strAck.equals("Success") || strAck
								.equals("SuccessWithWarning"))) {
					// TODO: Indicar al usuario que el acuerdo previo ha sido cancelado y será necesaria la creación de uno nuevo				
					resultadoAcuerdo = "noAgreement";
				} else {
					// En este punto todo ha ido bien así que obtenemos el status
					String status = resultValues.get("BILLINGAGREEMENTSTATUS");
					if(status.compareToIgnoreCase("Active")==0){
						resultadoAcuerdo = "agreement";						
					}
				}
			}
			// Comprobación del resultado del check del acuerdo
			String idAlert = "alertInfoUploadProduction";
			if(resultadoAcuerdo.compareToIgnoreCase("noAgreement")==0){
				idAlert = "alertInfoBillingAgreement";
				// Mostrar mensaje éxito
				// Asignar título y contenido adecuado
				handleModalAlert(gestorDatos, gestorEstados, idAlert, "info", getMessage("FIONA.alertBillAgreement.cabeceraPanel.valor", "Billing agreement needed!"),
						getMessage("FIONA.alertBillAgreement.mensajeOK.valor", "You need to sign a new billing agreement!!"), "", "");				
			}else if(resultadoAcuerdo.compareToIgnoreCase("agreement")==0){// Acuerdo activo
				IContexto[] salida = invokeUploadToProduction(intCodUsuario, null,intNumUserConcurrentes,intIdUnidadTiempo, intIdResolution,intHighAvailability, precioTotal);
				String mensaje = salida[0].getString("FIONEG003010");
				// Mostrar alert informando al usuario del problema				
				if(mensaje.compareToIgnoreCase("OK")==0){
					// Mostrar mensaje éxito
					// Asignar título y contenido adecuado
					handleModalAlert(gestorDatos, gestorEstados, idAlert, "info", getMessage("FIONA.alertUploadProdOk.cabeceraPanel.valor", "Success!"),
							getMessage("FIONA.alertUploadProdOk.mensajeOK.valor", "Request completed!!"), "", "");				
				}else{
					// Mostrar mensaje error
					// Asignar título y contenido adecuado
					handleModalAlert(gestorDatos, gestorEstados, idAlert, "error", getMessage("FIONA.alertUploadProdOk.cabeceraPanelError.valor", "Error!"),
							getMessage("FIONA.alertUploadProdOk.mensajeError.valor", "Something went wrong..."), "", "");
				}				
			}
			// Cerramos la ventana de confirmación
			gestorEstados.closeModalAlert("alertUploadConfirm");
			// Cerramos el diálogo de precios
			gestorEstados.closeModalAlert("dialogoPrecios");
		} catch (FactoriaDatosException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (PersistenciaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FawnaInvokerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(PayPalException ppEx){				
			ppEx.printStackTrace();
		}		
	}
public void procesarAjaxChangeListener(GestorEstadoComponentes gestorEstados,
			GestorDatosComponentes gestorDatos) {
	
		Integer intCodUsuario = ContextUtils.getUserIdAsInteger();
	
		String strNumUsersConcurrentes = (String)gestorDatos.getValue("numUsuariosConcu");		
		Integer intNumUserConcurrentes = Integer.valueOf(strNumUsersConcurrentes);
	
		String strIdUnidadTiempo = (String)gestorDatos.getValue("idUnidadTiempo");		
		Integer intIdUnidadTiempo = Integer.valueOf(strIdUnidadTiempo);
			String strIdResolution = (String)gestorDatos.getValue("resolution");		
		Integer intIdResolution = Integer.valueOf(strIdResolution);
	
		Boolean highAvailability = (Boolean)gestorDatos.getValue("checkAvailability");		
		Integer intHighAvailability = highAvailability?new Integer(1):new Integer(0);
		Float precioTotal = null;
		if(gestorDatos.getValue("precioTotal") != null && !"".equals(gestorDatos.getValue("precioTotal")) && !"0.0".equals(gestorDatos.getValue("precioTotal"))){
			precioTotal = (Float)gestorDatos.getValue("precioTotal");
			BigDecimal bidPrecioTotal = new BigDecimal(precioTotal);
			bidPrecioTotal = bidPrecioTotal.setScale(2, RoundingMode.HALF_EVEN);
			precioTotal = bidPrecioTotal.floatValue();		
		}else{
			if(gestorDatos.getValue("precioTotalTiempo") != null && !"".equals(gestorDatos.getValue("precioTotalTiempo")) & !"0.0".equals(gestorDatos.getValue("precioTotalTiempo"))){
				Float precioTotalTiempo = (Float)gestorDatos.getValue("precioTotalTiempo");
				BigDecimal bidPrecioTotal = new BigDecimal(precioTotalTiempo);
				bidPrecioTotal = bidPrecioTotal.setScale(2, RoundingMode.HALF_EVEN);
				precioTotal = bidPrecioTotal.floatValue();				
			}else{
				Float precioTotalUso = (Float)gestorDatos.getValue("precioTotalUso");
				Float precioHosting = (Float)gestorDatos.getValue("precioTotalHosting");
				BigDecimal bidPrecioTotal = new BigDecimal(precioTotalUso+precioHosting);
				bidPrecioTotal = bidPrecioTotal.setScale(2, RoundingMode.HALF_EVEN);
				precioTotal = bidPrecioTotal.floatValue();
			}
		}
		
		try {
			String billingAgreementId = HelperContext.getInstance().getValueContext("SECURE_USER_BILLING_AGREEMENT_ID");
			String resultadoAcuerdo = "noAgreement";
			if(billingAgreementId != null && !"".equals(billingAgreementId)){
			
				String ppresponse = PaypalUtilities.getInstance().baUpdate(billingAgreementId);
			
				NVPDecoder resultValues = new NVPDecoder();
			
			
				resultValues.decode(ppresponse);
			
			
				String strAck = resultValues.get("ACK");
				if (strAck != null
						&& !(strAck.equals("Success") || strAck
								.equals("SuccessWithWarning"))) {
								resultadoAcuerdo = "noAgreement";
				} else {
									String status = resultValues.get("BILLINGAGREEMENTSTATUS");
					if(status.compareToIgnoreCase("Active")==0){
						resultadoAcuerdo = "agreement";						
					}
				}
			}
					String idAlert = "alertInfoUploadProduction";
			if(resultadoAcuerdo.compareToIgnoreCase("noAgreement")==0){
				idAlert = "alertInfoBillingAgreement";
										handleModalAlert(gestorDatos, gestorEstados, idAlert, "info", getMessage("FIONA.alertBillAgreement.cabeceraPanel.valor", "Billing agreement needed!"),
						getMessage("FIONA.alertBillAgreement.mensajeOK.valor", "You need to sign a new billing agreement!!"), "", "");				
			}else if(resultadoAcuerdo.compareToIgnoreCase("agreement")==0)
				IContexto[] salida = invokeUploadToProduction(intCodUsuario, null,intNumUserConcurrentes,intIdUnidadTiempo, intIdResolution,intHighAvailability, precioTotal);
				String mensaje = salida[0].getString("FIONEG003010");
			
				if(mensaje.compareToIgnoreCase("OK")==0){
													handleModalAlert(gestorDatos, gestorEstados, idAlert, "info", getMessage("FIONA.alertUploadProdOk.cabeceraPanel.valor", "Success!"),
							getMessage("FIONA.alertUploadProdOk.mensajeOK.valor", "Request completed!!"), "", "");				
				}else{
				
									handleModalAlert(gestorDatos, gestorEstados, idAlert, "error", getMessage("FIONA.alertUploadProdOk.cabeceraPanelError.valor", "Error!"),
							getMessage("FIONA.alertUploadProdOk.mensajeError.valor", "Something went wrong..."), "", "");
				}				
			}
					gestorEstados.closeModalAlert("alertUploadConfirm");
					gestorEstados.closeModalAlert("dialogoPrecios");
		} catch (FactoriaDatosException e) {
		
			e.printStackTrace();
		} catch (PersistenciaException e) {
		
			e.printStackTrace();
		} catch (FawnaInvokerException e) {
		
			e.printStackTrace();
		}catch(PayPalException ppEx){				
			ppEx.printStackTrace();
		}		
	}
public void procesarajaxchangelistener(gestorestadocomponentes gestorestados, gestordatoscomponentes gestordatos) { integer intcodusuario = contextutils.getuseridasinteger(); string strnumusersconcurrentes = (string)gestordatos.getvalue("numusuariosconcu"); integer intnumuserconcurrentes = integer.valueof(strnumusersconcurrentes); string stridunidadtiempo = (string)gestordatos.getvalue("idunidadtiempo"); integer intidunidadtiempo = integer.valueof(stridunidadtiempo); string stridresolution = (string)gestordatos.getvalue("resolution"); integer intidresolution = integer.valueof(stridresolution); boolean highavailability = (boolean)gestordatos.getvalue("checkavailability"); integer inthighavailability = highavailability?new integer(1):new integer(0); float preciototal = null; if(gestordatos.getvalue("preciototal") != null && !"".equals(gestordatos.getvalue("preciototal")) && !"0.0".equals(gestordatos.getvalue("preciototal"))){ preciototal = (float)gestordatos.getvalue("preciototal"); bigdecimal bidpreciototal = new bigdecimal(preciototal); bidpreciototal = bidpreciototal.setscale(2, roundingmode.half_even); preciototal = bidpreciototal.floatvalue(); }else{ if(gestordatos.getvalue("preciototaltiempo") != null && !"".equals(gestordatos.getvalue("preciototaltiempo")) & !"0.0".equals(gestordatos.getvalue("preciototaltiempo"))){ float preciototaltiempo = (float)gestordatos.getvalue("preciototaltiempo"); bigdecimal bidpreciototal = new bigdecimal(preciototaltiempo); bidpreciototal = bidpreciototal.setscale(2, roundingmode.half_even); preciototal = bidpreciototal.floatvalue(); }else{ float preciototaluso = (float)gestordatos.getvalue("preciototaluso"); float preciohosting = (float)gestordatos.getvalue("preciototalhosting"); bigdecimal bidpreciototal = new bigdecimal(preciototaluso+preciohosting); bidpreciototal = bidpreciototal.setscale(2, roundingmode.half_even); preciototal = bidpreciototal.floatvalue(); } } try { string billingagreementid = helpercontext.getinstance().getvaluecontext("secure_user_billing_agreement_id"); string resultadoacuerdo = "noagreement"; if(billingagreementid != null && !"".equals(billingagreementid)){ string ppresponse = paypalutilities.getinstance().baupdate(billingagreementid); nvpdecoder resultvalues = new nvpdecoder(); resultvalues.decode(ppresponse); string strack = resultvalues.get("ack"); if (strack != null && !(strack.equals("success") || strack .equals("successwithwarning"))) { resultadoacuerdo = "noagreement"; } else { string status = resultvalues.get("billingagreementstatus"); if(status.comparetoignorecase("active")==0){ resultadoacuerdo = "agreement"; } } } string idalert = "alertinfouploadproduction"; if(resultadoacuerdo.comparetoignorecase("noagreement")==0){ idalert = "alertinfobillingagreement"; handlemodalalert(gestordatos, gestorestados, idalert, "info", getmessage("fiona.alertbillagreement.cabecerapanel.valor", "billing agreement needed!"), getmessage("fiona.alertbillagreement.mensajeok.valor", "you need to sign a new billing agreement!!"), "", ""); }else if(resultadoacuerdo.comparetoignorecase("agreement")==0) icontexto[] salida = invokeuploadtoproduction(intcodusuario, null,intnumuserconcurrentes,intidunidadtiempo, intidresolution,inthighavailability, preciototal); string mensaje = salida[0].getstring("fioneg003010"); if(mensaje.comparetoignorecase("ok")==0){ handlemodalalert(gestordatos, gestorestados, idalert, "info", getmessage("fiona.alertuploadprodok.cabecerapanel.valor", "success!"), getmessage("fiona.alertuploadprodok.mensajeok.valor", "request completed!!"), "", ""); }else{ handlemodalalert(gestordatos, gestorestados, idalert, "error", getmessage("fiona.alertuploadprodok.cabecerapanelerror.valor", "error!"), getmessage("fiona.alertuploadprodok.mensajeerror.valor", "something went wrong..."), "", ""); } } gestorestados.closemodalalert("alertuploadconfirm"); gestorestados.closemodalalert("dialogoprecios"); } catch (factoriadatosexception e) { e.printstacktrace(); } catch (persistenciaexception e) { e.printstacktrace(); } catch (fawnainvokerexception e) { e.printstacktrace(); }catch(paypalexception ppex){ ppex.printstacktrace(); } }