package com.ejie.ad74a.ws.server.beneficiario.service;

import java.io.StringReader;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import com.ejie.ad74a.constantes.Constantes;
import com.ejie.ad74a.dao.SolicitantesDao;
import com.ejie.ad74a.model.BeneficiarioActividadWS;
import com.ejie.ad74a.model.BeneficiarioWS;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.ws.server.beneficiario.model.TipoComunicacionEnum;

@Service(value = "BeneficiarioProccesService")
public class BeneficiarioProccesServiceImpl implements BeneficiarioProccesService {

	/**
	 * Final static logger.
	 */
	private static final Logger logger = LoggerFactory.getLogger(BeneficiarioProccesServiceImpl.class);

	private static String DNI = "dni";

	@Autowired
	private SolicitantesDao solicitantesDao;

	@Override
	public String proccesMessage(TipoComunicacionEnum tipo, String message) throws Throwable {

		BeneficiarioProccesServiceImpl.logger
				.info("BeneficiarioProccesServiceImpl - proccesMessage - " + tipo + " - " + message);

		if (TipoComunicacionEnum.ES_BENEFICIARIO.compareTo(tipo) == 0) {
			return this.processEsBeneficiario(message);
		} else if (TipoComunicacionEnum.DATOS_BENEFICIARIO.compareTo(tipo) == 0) {
			return this.processDatosBeneficiario(message);
		}

		BeneficiarioProccesServiceImpl.logger.info("FIN BeneficiarioProccesServiceImpl - proccesMessage");

		return "";

	}

	private String processEsBeneficiario(String message) {

		StringBuffer res = new StringBuffer("");
		// abrimos el tag de respuesta
		res.append("<respuesta>");
		ArrayList<String[]> errores = new ArrayList<String[]>();

		String dni = "";
		try {
			// 1.- Parsear el mensaje
			DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			InputSource is = new InputSource(new StringReader(message));
			Document documento = documentBuilder.parse(is);
			documento.getDocumentElement().normalize();
			NodeList nodoBeneficiarioFS = documento.getElementsByTagName(DNI);
			dni = (nodoBeneficiarioFS.getLength() != 0 && nodoBeneficiarioFS.item(0).getChildNodes().getLength() != 0
					? nodoBeneficiarioFS.item(0).getChildNodes().item(0).getNodeValue()
					: "");

			// 2.- Hacer la query
			Solicitantes solFilter = new Solicitantes();
			solFilter.setIdentificador01(dni);
			Solicitantes solicitante = this.solicitantesDao.esBeneficiario(solFilter);

			// 3.- Preparar el String de con la respuesta
			if (solicitante != null && solicitante.getfBaja01() == null) {
				res.append("<BENEFICIARIO dni=\"" + dni.toUpperCase() + "\">");
				res.append("<ACTUAL>SI</ACTUAL>");
				res.append("<FECHAALTA>" + UtilidadesFecha.formatearDateToString(solicitante.getfAltaTeleasistencia01(),
						com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK) + "</FECHAALTA>");
				res.append("</BENEFICIARIO>");
			} else {
				res.append("<BENEFICIARIO dni=\"" + dni.toUpperCase() + "\">");
				res.append("<ACTUAL>NO</ACTUAL>");
				res.append("<FECHAALTA></FECHAALTA>");
				res.append("</BENEFICIARIO>");
			}

		} catch (Exception e) {
			String[] err = new String[3];
			err[0] = "-1";
			err[1] = dni;
			err[2] = "Error genérico";
			errores.add(err);

			if (errores.size() > 0) {

				res.append("<errores>");
				for (String[] error : errores) {
					res.append("<error>" + "<codigoError>" + error[0] + "</codigoError>" + "<DNI>" + error[1] + "</DNI>"
							+ "<descripcionError>" + e.getMessage() + "</descripcionError>" + "</error>");
				}
				res.append("</errores>");
			}

		}

		res.append("</respuesta>");

		return res.toString();
	}

	private String processDatosBeneficiario(String message) {

		StringBuilder res = new StringBuilder("");
		// abrimos el tag de respuesta
		res.append("<respuesta>");
		String[] err = new String[3];
		ArrayList<String[]> errores = new ArrayList<String[]>();
		String dni = "";
		try {
			// 1.- Parsear el mensaje
			DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			InputSource is = new InputSource(new StringReader(message));
			Document documento = documentBuilder.parse(is);
			documento.getDocumentElement().normalize();
			NodeList nodoBeneficiarioFS = documento.getElementsByTagName(DNI);
			dni = (nodoBeneficiarioFS.getLength() != 0 && nodoBeneficiarioFS.item(0).getChildNodes().getLength() != 0
					? nodoBeneficiarioFS.item(0).getChildNodes().item(0).getNodeValue()
					: "");

			// 2.- Comprobar si es beneficiario
			Solicitantes solFilter = new Solicitantes();
			solFilter.setIdentificador01(dni);
			solFilter.setBeneficiario01(Constantes.UNO);
			Solicitantes solicitante = this.solicitantesDao.esBeneficiario(solFilter);

//			if (solicitante == null || solicitante.getBeneficiario01() != Constantes.UNO) {
			if (solicitante == null) {
				err[0] = "1";
				err[1] = dni;
				err[2] = "Beneficiario no encontrado";
				errores.add(err);
			}

			if (errores == null || errores.size() == 0) {
				// 3.- Hacer la query
				BeneficiarioWS beneficiarioBean = this.solicitantesDao.datosBeneficiario(solicitante);
				List<BeneficiarioActividadWS> listaActividadesBeneficiario = this.solicitantesDao
						.datosActividadBeneficiario(solicitante);
				beneficiarioBean = informarActividades(listaActividadesBeneficiario, beneficiarioBean);

				// 4.- Preparar el String de con la respuesta
				if (beneficiarioBean != null) {
					res.append("<BENEFICIARIO dni=\"" + dni.toUpperCase() + "\">");
					res.append("<FECHA_ALTA_BENEFICIARIO>"
							+ Utilidades.convertirSiNullACadVacia(UtilidadesFecha.formatearDateToString(
									beneficiarioBean.getfInicio01(), com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</FECHA_ALTA_BENEFICIARIO>");
					res.append("<EXENTO_PAGO>" + Utilidades.convertirSiNullACadVacia(beneficiarioBean.getExentoPago())
							+ "</EXENTO_PAGO>");
					res.append("<FECHA_BAJA_BENEFICIARIO>"
							+ Utilidades.convertirSiNullACadVacia(UtilidadesFecha.formatearDateToString(
									beneficiarioBean.getfBaja01(), com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</FECHA_BAJA_BENEFICIARIO>");

					res.append("<MOTIVOBAJA>" + beneficiarioBean.getIdMotivoBaja01() + "</MOTIVOBAJA>");
					res.append("<CUENTA_ALARM_MOVILIDAD>" + beneficiarioBean.getCuentaAlarmMovilidad()
							+ "</CUENTA_ALARM_MOVILIDAD>");
					res.append("<ULTIMA_ALARM_MOVILIDAD>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmMovilidad(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_MOVILIDAD>");
					res.append("<CUENTA_ALARM_DETECTCAIDA>" + beneficiarioBean.getCuentaAlarmDetectCaida()
							+ "</CUENTA_ALARM_DETECTCAIDA>");
					res.append("<ULTIMA_ALARM_DETECTCAIDA>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmDetectCaida(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTCAIDA>");
					res.append("<CUENTA_ALARM_DETECTCO>" + beneficiarioBean.getCuentaAlarmDetectCo()
							+ "</CUENTA_ALARM_DETECTCO>");
					res.append("<ULTIMA_ALARM_DETECTCO>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmDetectCo(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTCO>");
					res.append("<CUENTA_ALARM_DETECTCONVUL>" + beneficiarioBean.getCuentaAlarmDetectConvul()
							+ "</CUENTA_ALARM_DETECTCONVUL>");
					res.append("<ULTIMA_ALARM_DETECTCONVUL>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmDetectConvul(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTCONVUL>");
					res.append("<CUENTA_ALARM_DETECTENEURESIS>" + beneficiarioBean.getCuentaAlarmDetectNeuresis()
							+ "</CUENTA_ALARM_DETECTENEURESIS>");
					res.append("<ULTIMA_ALARM_DETECTENEURESIS>"
							+ Utilidades.convertirSiNullACadVacia(UtilidadesFecha.formatearDateToString(
									beneficiarioBean.getUltimaAlarmDetectNeuresis(),
									com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTENEURESIS>");
					res.append("<CUENTA_ALARM_DETECTFUEGO>" + beneficiarioBean.getCuentaAlarmDetectFuego()
							+ "</CUENTA_ALARM_DETECTFUEGO>");
					res.append("<ULTIMA_ALARM_DETECTFUEGO>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmDetectFuego(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTFUEGO>");
					res.append("<CUENTA_ALARM_DETECTGAS>" + beneficiarioBean.getCuentaAlarmDetectGas()
							+ "</CUENTA_ALARM_DETECTGAS>");
					res.append("<ULTIMA_ALARM_DETECTGAS>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmDetectGas(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTGAS>");
					res.append("<CUENTA_ALARM_DETECTCAMA>" + beneficiarioBean.getCuentaAlarmDetectCama()
							+ "</CUENTA_ALARM_DETECTCAMA>");
					res.append("<ULTIMA_ALARM_DETECTCAMA>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmDetectCama(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_DETECTCAMA>");
					res.append("<CUENTA_ALARM_FALLOCALL>" + beneficiarioBean.getCuentaAlarmFalloCall()
							+ "</CUENTA_ALARM_FALLOCALL>");
					res.append("<ULTIMA_ALARM_FALLOCALL>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmFalloCall(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_FALLOCALL>");
					res.append("<CUENTA_ALARM_NORESP>" + beneficiarioBean.getCuentaAlarmNoResp()
							+ "</CUENTA_ALARM_NORESP>");
					res.append("<ULTIMA_ALARM_NORESP>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmNoResp(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_NORESP>");
					res.append("<CUENTA_EMERGSANIT>" + beneficiarioBean.getCuentaEmergSanit() + "</CUENTA_EMERGSANIT>");
					res.append(
							"<CUENTA_EMERGSOCIAL>" + beneficiarioBean.getCuentaEmergSocial() + "</CUENTA_EMERGSOCIAL>");
					res.append(
							"<CUENTA_PROBLSOCIAL>" + beneficiarioBean.getCuentaProblSocial() + "</CUENTA_PROBLSOCIAL>");
					res.append("<CUENTA_PROBLSALUD>" + beneficiarioBean.getCuentaProblSalud() + "</CUENTA_PROBLSALUD>");
					res.append("<CUENTA_EMERGOTRAS>" + beneficiarioBean.getCuentaEmergOtras() + "</CUENTA_EMERGOTRAS>");
					res.append(
							"<CUENTA_EMERGDETECT>" + beneficiarioBean.getCuentaEmergDetect() + "</CUENTA_EMERGDETECT>");
					res.append("<CUENTA_PROBLTECNICO>" + beneficiarioBean.getCuentaProblTecnico()
							+ "</CUENTA_PROBLTECNICO>");
					res.append("<CUENTA_CHARLASOLEDAD>" + beneficiarioBean.getCuentaCharlaSoledad()
							+ "</CUENTA_CHARLASOLEDAD>");
					res.append("<ULTIMA_CHARLASOLEDAD>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaCharlaSoledad(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_CHARLASOLEDAD>");
					res.append("<CUENTA_SEGUIMCUIDADOR>" + beneficiarioBean.getCuentaSeguimCuidador()
							+ "</CUENTA_SEGUIMCUIDADOR>");
					res.append("<ULTIMA_SEGUIMCUIDADOR>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaSeguimCuidador(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_SEGUIMCUIDADOR>");
					res.append("<CUENTA_SEGUIMEJCOGNIT>" + beneficiarioBean.getCuentaSeguimEjCognit()
							+ "</CUENTA_SEGUIMEJCOGNIT>");
					res.append("<ULTIMA_SEGUIMEJCOGNIT>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaSeguimEjCognit(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_SEGUIMEJCOGNIT>");
					res.append("<CUENTA_ALARM_AGENDA1>" + beneficiarioBean.getCuentaAlarmAgenda1()
							+ "</CUENTA_ALARM_AGENDA1>");
					res.append("<ULTIMA_ALARM_AGENDA1>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmAgenda1(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_AGENDA1>");
					res.append("<CUENTA_ALARM_AGENDA2>" + beneficiarioBean.getCuentaAlarmAgenda2()
							+ "</CUENTA_ALARM_AGENDA2>");
					res.append("<ULTIMA_ALARM_AGENDA2>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmAgenda2(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_AGENDA2>");
					res.append("<CUENTA_ALARM_AGENDA3>" + beneficiarioBean.getCuentaAlarmAgenda3()
							+ "</CUENTA_ALARM_AGENDA3>");
					res.append("<ULTIMA_ALARM_AGENDA3>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmAgenda3(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_AGENDA3>");
					res.append("<CUENTA_ALARM_AGENDA4>" + beneficiarioBean.getCuentaAlarmAgenda4()
							+ "</CUENTA_ALARM_AGENDA4>");
					res.append("<ULTIMA_ALARM_AGENDA4>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmAgenda4(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_AGENDA4>");
					res.append("<CUENTA_ALARM_CITA>" + beneficiarioBean.getCuentaAlarmCita() + "</CUENTA_ALARM_CITA>");
					res.append("<ULTIMA_ALARM_CITA>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmCita(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_CITA>");
					res.append("<CUENTA_ALARM_SEGUIM>" + beneficiarioBean.getCuentaAlarmSeguim()
							+ "</CUENTA_ALARM_SEGUIM>");
					res.append("<ULTIMA_ALARM_SEGUIM>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmSeguim(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_SEGUIM>");
					res.append("<CUENTA_ALARM_AGREVAL>" + beneficiarioBean.getCuentaAlarmAgreval()
							+ "</CUENTA_ALARM_AGREVAL>");
					res.append("<ULTIMA_ALARM_AGREVAL>"
							+ Utilidades.convertirSiNullACadVacia(
									UtilidadesFecha.formatearDateToString(beneficiarioBean.getUltimaAlarmAgreval(),
											com.ejie.ad74a.constantes.Constantes.ES_DATE_MASK))
							+ "</ULTIMA_ALARM_AGREVAL>");
					res.append("</BENEFICIARIO>");
				}
			} else if (errores.size() > 0) {
				res.append("<errores>");
				for (String[] error : errores) {
					res.append("<error>" + "<codigoError>" + error[0] + "</codigoError>" + "<DNI>" + error[1] + "</DNI>"
							+ "<descripcionError>" + error[2] + "</descripcionError>" + "</error>");
				}
				res.append("</errores>");

			}

		} catch (Exception e) {
			err[0] = "-1";
			err[1] = dni;
			err[2] = "Error genérico";
			errores.add(err);

			if (errores.size() > 0) {

				res.append("<errores>");
				for (String[] error : errores) {
					res.append("<error>" + "<codigoError>" + error[0] + "</codigoError>" + "<DNI>" + error[1] + "</DNI>"
							+ "<descripcionError>" + e.getMessage() + "</descripcionError>" + "</error>");
				}
				res.append("</errores>");
			}

		}

		StringBuffer res_logBD = new StringBuffer("");
		// TODO: revisar pq esto tiene que ser así
		// comprobamos el tamaño de la respuesta, que se debe de ajustar a 4000. Lo
		// cortamos a 3988 (+12 del cierre de etiqueta de respuesta) en caso de
		// necesidad
		if (res.length() > 3988) {
			res_logBD.append(res.toString()).setLength(3988);
			res_logBD.append("</respuesta>");
		} else {
			res_logBD.append(res.toString());
			res_logBD.append("</respuesta>");
		}
		BeneficiarioProccesServiceImpl.logger
				.info("BeneficiarioProccesServiceImpl - processDatosBeneficiario - respuesta:" + res_logBD.toString());
		return res_logBD.toString();
	}

	private BeneficiarioWS informarActividades(List<BeneficiarioActividadWS> listaActidades,
			BeneficiarioWS beneficiario) {

		for (BeneficiarioActividadWS actividad : listaActidades) {
			int contador = actividad.getContador();
			Date fecha = actividad.getUltimaFecha();
			if (actividad.getTipo().equals("D")) {
				actualizarDispositivo(actividad.getId(), contador, fecha, beneficiario);
			} else if (actividad.getTipo().equals("A")) {
				actualizarAlarma(actividad.getId(), contador, fecha, beneficiario);
			} else { // E
				actualizarEmergencia(actividad.getId(), contador, beneficiario);
			}
		}
		return beneficiario;
	}

	private void actualizarDispositivo(String id, int contador, Date fecha, BeneficiarioWS beneficiario) {
		if (id.equals(Constantes.ID_DISP_DETECT_FUEGO)) { // Detector fuego/humo
			beneficiario.setCuentaAlarmDetectFuego(contador);
			beneficiario.setUltimaAlarmDetectFuego(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_GAS)) { // Detector gas
			beneficiario.setCuentaAlarmDetectGas(contador);
			beneficiario.setUltimaAlarmDetectGas(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_C0)) { // Detector CO
			beneficiario.setCuentaAlarmDetectCo(contador);
			beneficiario.setUltimaAlarmDetectCo(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_MOVIL)) { // Detector Movil/Pasividad
			beneficiario.setCuentaAlarmMovilidad(contador);
			beneficiario.setUltimaAlarmMovilidad(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_CAIDAS)) { // Detector Caidas IVI/Vibby
			beneficiario.setCuentaAlarmDetectCaida(contador);
			beneficiario.setUltimaAlarmDetectCaida(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_CONVUL)) { // Detector convulsiones
			beneficiario.setCuentaAlarmDetectConvul(contador);
			beneficiario.setUltimaAlarmDetectConvul(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_NEURESIS)) { // Detector de control enuresis
			beneficiario.setCuentaAlarmDetectNeuresis(contador);
			beneficiario.setUltimaAlarmDetectNeuresis(fecha);
		} else if (id.equals(Constantes.ID_DISP_DETECT_OCUPACION)) { // Detector ocupación cama/sillon
			beneficiario.setCuentaAlarmDetectCama(contador);
			beneficiario.setUltimaAlarmDetectCama(fecha);
		}
	}

	private void actualizarAlarma(String id, int contador, Date fecha, BeneficiarioWS beneficiario) {
		if (id.equals(Constantes.ID_ALARMA_CHARLA_SOLEDAD)) { // Conversacion Soledad
			beneficiario.setCuentaCharlaSoledad(contador);
			beneficiario.setUltimaCharlaSoledad(fecha);
		} else if (id.equals(Constantes.ID_ALARMA_CITA)) { // Cita Previa
			beneficiario.setCuentaAlarmCita(contador);
			beneficiario.setUltimaAlarmCita(fecha);
		} else if (id.equals(Constantes.ID_ALARMA_NO_RESPONDE)) { // No responde
			beneficiario.setCuentaAlarmNoResp(contador);
			beneficiario.setUltimaAlarmNoResp(fecha);
		} else if (id.equals(Constantes.ID_ALARMA_AGENDA_REV)) { // Agenda De Revaloración
			beneficiario.setCuentaAlarmAgreval(contador);
			beneficiario.setUltimaAlarmAgreval(fecha);
		} else if (id.equals(Constantes.ID_ALARMA_AGENDA)) { // Aviso Agenda
			beneficiario.setCuentaAlarmAgenda1(contador);
			beneficiario.setUltimaAlarmAgenda1(fecha);
		} else if (id.equals(Constantes.ID_ALARMA_FALLO_CALL)) { // Llamada Fallida
			beneficiario.setCuentaAlarmFalloCall(contador);
			beneficiario.setUltimaAlarmFalloCall(fecha);
		} else if (id.equals(Constantes.ID_SEG_PUSUARIA)) { // Seguimiento p.usuaria
			beneficiario.setCuentaSeguimEjCognit(contador);
			beneficiario.setUltimaSeguimEjCognit(fecha);
		} else if (id.equals(Constantes.ID_SEG_CUIDADOR)) { // Seguimiento p cuidadora
			beneficiario.setCuentaSeguimCuidador(contador);
			beneficiario.setUltimaSeguimCuidador(fecha);
		}
	}

	private void actualizarEmergencia(String id, int contador, BeneficiarioWS beneficiario) {
		if (id.equals(Constantes.ID_EMERG_SANITARIA)) { // Emergencia Sanitaria
			beneficiario.setCuentaEmergSanit(contador);
		} else if (id.equals(Constantes.ID_EMERG_SOCIAL)) { // Emergencia Social
			beneficiario.setCuentaEmergSocial(contador);
		} else if (id.equals(Constantes.ID_EMERG_PROBLEMA_SOCIAL)) { // Problema social
			beneficiario.setCuentaProblSocial(contador);
		} else if (id.equals(Constantes.ID_EMERG_PROBLEMA_SALUD)) { // Problema de salud
			beneficiario.setCuentaProblSalud(contador);
		} else if (id.equals(Constantes.ID_EMERG_DETECTOR)) { // Emergencia de detector
			beneficiario.setCuentaEmergDetect(contador);
		} else if (id.equals(Constantes.ID_EMERG_PROBLEMA_TECNICO)) { // Problema tecnico
			beneficiario.setCuentaProblTecnico(contador);
		} else if (id.equals(Constantes.ID_EMERG_PROBLEMA_OTRAS)) { // Otras
			beneficiario.setCuentaEmergOtras(contador);
		}
	}
}