package com.ejie.ab79.service.preguntasRespuestas;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ab79.comun.Constantes;
import com.ejie.ab79.dao.preguntasRespuestas.FicherosAdjExpDao;
import com.ejie.ab79.dao.preguntasRespuestas.RespuestasExpedienteDao;
import com.ejie.ab79.model.inspecciones.Inspecciones;
import com.ejie.ab79.model.preguntasRespuestas.FicherosAdjExp;
import com.ejie.ab79.model.preguntasRespuestas.PreguntasExpediente;
import com.ejie.ab79.model.preguntasRespuestas.PreguntasRespuestasExpediente;
import com.ejie.ab79.model.preguntasRespuestas.RespuestasExpediente;
import com.ejie.ab79.webservice.adaptadores.ab61WebServiceAdaptador;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableResponseDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * RespuestasExpedienteServiceImpl  
 * 
 *  
 */

@Service(value = "respuestasExpedienteService")
public class RespuestasExpedienteServiceImpl implements RespuestasExpedienteService {

	private static final Logger logger = LoggerFactory.getLogger(RespuestasExpedienteServiceImpl.class);

	@Autowired
	private RespuestasExpedienteDao respuestasExpedienteDao;

	@Autowired
	private FicherosAdjExpDao ficherosAdjExpDao;

	@Autowired
	private ab61WebServiceAdaptador ab61WebServiceAdaptadorService;

	/**
	 * Inserts a single row in the RespuestasExpediente table.
	 *
	 * @param respuestasExpediente
	 *            RespuestasExpediente
	 * @return RespuestasExpediente
	 */
	@Transactional(rollbackFor = Throwable.class)
	public RespuestasExpediente add(RespuestasExpediente respuestasExpediente) {
		return this.respuestasExpedienteDao.add(respuestasExpediente);
	}

	/**
	 * Updates a single row in the RespuestasExpediente table.
	 *
	 * @param respuestasExpediente
	 *            RespuestasExpediente
	 * @return RespuestasExpediente
	 */
	@Transactional(rollbackFor = Throwable.class)
	public RespuestasExpediente update(RespuestasExpediente respuestasExpediente) {
		return this.respuestasExpedienteDao.update(respuestasExpediente);
	}

	@Override
	public RespuestasExpediente updateRespuesta(RespuestasExpediente respValAux) {
		return this.respuestasExpedienteDao.updateRespuesta(respValAux);
	}

	/**
	 * Finds a single row in the RespuestasExpediente table.
	 *
	 * @param respuestasExpediente
	 *            RespuestasExpediente
	 * @return RespuestasExpediente
	 */
	public RespuestasExpediente find(RespuestasExpediente respuestasExpediente) {
		return (RespuestasExpediente) this.respuestasExpedienteDao.find(respuestasExpediente);
	}

	@Override
	public RespuestasExpediente findByIdPregunta(RespuestasExpediente respuestasExpediente) {
		return this.respuestasExpedienteDao.findByIdPregunta(respuestasExpediente);
	}

	public RespuestasExpediente findByInspeccionYPregunta(Inspecciones inspeccion,
			PreguntasExpediente preguntaExpediente) {
		return this.respuestasExpedienteDao.findByInspeccionYPregunta(inspeccion, preguntaExpediente);
	}

	/**
	 * Deletes a single row in the RespuestasExpediente table.
	 *
	 * @param respuestasExpediente
	 *            RespuestasExpediente
	 */
	@Transactional(rollbackFor = Throwable.class)
	public void remove(RespuestasExpediente respuestasExpediente) {
		this.respuestasExpedienteDao.remove(respuestasExpediente);
	}

	/**
	 * Finds a list of rows in the RespuestasExpediente table.
	 *
	 * @param respuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @return List<RespuestasExpediente>
	 */
	public List<RespuestasExpediente> findAll(RespuestasExpediente respuestasExpediente,
			TableRequestDto tableRequestDto) {
		return (List<RespuestasExpediente>) this.respuestasExpedienteDao.findAll(respuestasExpediente, tableRequestDto);
	}

	/**
	 * Finds rows in the RespuestasExpediente table using like.
	 *
	 * @param respuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<RespuestasExpediente>
	 */
	public List<RespuestasExpediente> findAllLike(RespuestasExpediente respuestasExpediente,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		return (List<RespuestasExpediente>) this.respuestasExpedienteDao.findAllLike(respuestasExpediente,
				tableRequestDto, startsWith);
	}

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Removes rows from the RespuestasExpediente table.
	 *
	 * @param filterRespuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 */
	public void removeMultiple(RespuestasExpediente filterRespuestasExpediente, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		this.respuestasExpedienteDao.removeMultiple(filterRespuestasExpediente, tableRequestDto, startsWith);
	}

	/**
	 * Filter method in the RespuestasExpediente table.
	 *
	 * @param filterRespuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return TableResponseDto<RespuestasExpediente>
	 */
	public TableResponseDto<RespuestasExpediente> filter(RespuestasExpediente filterRespuestasExpediente,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		List<RespuestasExpediente> listaRespuestasExpediente = this.respuestasExpedienteDao
				.findAllLike(filterRespuestasExpediente, tableRequestDto, false);
		Long recordNum = this.respuestasExpedienteDao.findAllLikeCount(
				filterRespuestasExpediente != null ? filterRespuestasExpediente : new RespuestasExpediente(), false);

		TableResponseDto<RespuestasExpediente> usuarioDto = new TableResponseDto<RespuestasExpediente>(tableRequestDto,
				recordNum, listaRespuestasExpediente);

		if (tableRequestDto.getMultiselection().getSelectedIds() != null) {
			List<TableRowDto<RespuestasExpediente>> reorderSelection = this.respuestasExpedienteDao
					.reorderSelection(filterRespuestasExpediente, tableRequestDto, startsWith);
			usuarioDto.setReorderedSelection(reorderSelection);
			usuarioDto.addAdditionalParam("reorderedSelection", reorderSelection);
			usuarioDto.addAdditionalParam("selectedAll", tableRequestDto.getMultiselection().getSelectedAll());
		}
		if (tableRequestDto.getSeeker().getSelectedIds() != null) {
			tableRequestDto.setMultiselection(tableRequestDto.getSeeker());
			List<TableRowDto<RespuestasExpediente>> reorderSeeker = this.respuestasExpedienteDao
					.reorderSelection(filterRespuestasExpediente, tableRequestDto, startsWith);
			usuarioDto.setReorderedSeeker(reorderSeeker);
			usuarioDto.addAdditionalParam("reorderedSeeker", reorderSeeker);
		}
		return usuarioDto;
	}

	/**
	 * Searches rows in the RespuestasExpediente table.
	 *
	 * @param filterRespuestasExpediente
	 *            RespuestasExpediente
	 * @param searchRespuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<RespuestasExpediente>>
	 */
	public List<TableRowDto<RespuestasExpediente>> search(RespuestasExpediente filterRespuestasExpediente,
			RespuestasExpediente searchRespuestasExpediente, TableRequestDto tableRequestDto, Boolean startsWith) {
		return this.respuestasExpedienteDao.search(filterRespuestasExpediente, searchRespuestasExpediente,
				tableRequestDto, startsWith);
	}

	/**
	 * Reorder the selection made in RespuestasExpediente table.
	 *
	 * @param filterRespuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return Object
	 */
	public Object reorderSelection(RespuestasExpediente filterRespuestasExpediente, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		return this.respuestasExpedienteDao.reorderSelection(filterRespuestasExpediente, tableRequestDto, startsWith);
	}

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

	/**
	 * Finder method in the hierarchical the RespuestasExpediente table.
	 *
	 * @param filterRespuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return TableResponseDto<JerarquiaDto<RespuestasExpediente>>
	 */
	public TableResponseDto<JerarquiaDto<RespuestasExpediente>> jerarquia(
			RespuestasExpediente filterRespuestasExpediente, TableRequestDto tableRequestDto, Boolean startsWith) {
		List<JerarquiaDto<RespuestasExpediente>> listaRespuestasExpediente = this.respuestasExpedienteDao
				.findAllLikeJerarquia(filterRespuestasExpediente, tableRequestDto);
		Long recordNum = this.respuestasExpedienteDao.findAllLikeCountJerarquia(filterRespuestasExpediente,
				tableRequestDto);
		return new TableResponseDto<JerarquiaDto<RespuestasExpediente>>(tableRequestDto, recordNum,
				listaRespuestasExpediente);
	}

	/**
	 * Finder method for siblings rows in the hierarchical the
	 * RespuestasExpediente table.
	 *
	 * @param filterRespuestasExpediente
	 *            RespuestasExpediente
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @return TableResponseDto<JerarquiaDto<RespuestasExpediente>>
	 */
	public TableResponseDto<JerarquiaDto<RespuestasExpediente>> jerarquiaChildren(
			RespuestasExpediente filterRespuestasExpediente, TableRequestDto tableRequestDto) {
		TableResponseDto<JerarquiaDto<RespuestasExpediente>> tableResponseDto = new TableResponseDto<JerarquiaDto<RespuestasExpediente>>();
		tableResponseDto.addAdditionalParam(TableResponseDto.CHILDREN,
				this.respuestasExpedienteDao.findAllChild(filterRespuestasExpediente, tableRequestDto));
		return tableResponseDto;
	}

	/**
	 * Exporta Datos al clipBoard
	 *
	 */
	public List<RespuestasExpediente> getMultiple(RespuestasExpediente filterRespuestasExpediente,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		return this.respuestasExpedienteDao.getMultiple(filterRespuestasExpediente, tableRequestDto, startsWith);
	}

	public PreguntasRespuestasExpediente parseRespuestasExcelValidar(PreguntasRespuestasExpediente preguntaRespuesta) {

		switch (preguntaRespuesta.getPreguntasExpediente().getIdTipoPregunta()) {
		case Constantes.TIPO_PREGUNTA_NUMERICO:
			if (!preguntaRespuesta.getRespuestasExpediente().getRespuesta().matches("-?\\d+")
					&& !"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		case Constantes.TIPO_PREGUNTA_FECHA:

			if (!preguntaRespuesta.getRespuestasExpediente().getRespuesta()
					.matches("^(3[01]|[12][0-9]|0[1-9])/(1[0-2]|0[1-9])/[0-9]{4}$")
					&& !preguntaRespuesta.getRespuestasExpediente().getRespuesta()
							.matches("^[0-9]{4}/(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])$")
					&& !"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		case Constantes.TIPO_PREGUNTA_SINO:
			if (Constantes.SINO_SI_CASTELLANO
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_CASTELLANO);
			} else if (Constantes.SINO_SI_EUSKERA
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_EUSKERA);
			} else if (Constantes.SINO_NO_CASTELLANO
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_CASTELLANO);
			} else if (Constantes.SINO_NO_EUSKERA
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_EUSKERA);
			} else if (Constantes.SINO_NP
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NP);
			} else if (!"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		}

		return preguntaRespuesta;

	}

	public PreguntasRespuestasExpediente parseRespuestasExcelExpediente(
			PreguntasRespuestasExpediente preguntaRespuesta) {
		switch (preguntaRespuesta.getPreguntasExpediente().getIdTipoPregunta()) {

		case Constantes.TIPO_PREGUNTA_NUMERICO:
			if (!preguntaRespuesta.getRespuestasExpediente().getRespuesta().matches("-?\\d+")
					&& !"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		case Constantes.TIPO_PREGUNTA_FECHA:

			if (!preguntaRespuesta.getRespuestasExpediente().getRespuesta()
					.matches("^(3[01]|[12][0-9]|0[1-9])/(1[0-2]|0[1-9])/[0-9]{4}$")
					&& !preguntaRespuesta.getRespuestasExpediente().getRespuesta()
							.matches("^[0-9]{4}/(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])$")
					&& !"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		case Constantes.TIPO_PREGUNTA_SINO:
			if (Constantes.SINO_SI_CASTELLANO
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_CASTELLANO);
			} else if (Constantes.SINO_SI_EUSKERA
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_EUSKERA);
			} else if (Constantes.SINO_NO_CASTELLANO
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_CASTELLANO);
			} else if (Constantes.SINO_NO_EUSKERA
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_EUSKERA);
			} else if (Constantes.SINO_NP
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NP);
			} else if (!"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		case Constantes.TIPO_PREGUNTA_CORRECTO_INCORRECTO:
			if (Constantes.CORRECTO_CASTELLANO
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.CORRECTO_CASTELLANO);
			} else if (Constantes.CORRECTO_EUSKERA
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.CORRECTO_EUSKERA);
			} else if (Constantes.INCORRECTO_CASTELLANO
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.INCORRECTO_CASTELLANO);
			} else if (Constantes.INCORRECTO_EUSKERA
					.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.INCORRECTO_EUSKERA);
			} else if (Constantes.NA.equalsIgnoreCase(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.NA);
			} else if (!"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
				return null;
			}
			break;

		case Constantes.TIPO_PREGUNTA_CHECKBOX:

			if (!"".equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {

				String[] opciones = preguntaRespuesta.getRespuestasExpediente().getRespuesta().trim().split(";");
				String respuestaOpciones = "";

				for (int i = 0; i < opciones.length; i++) {
					for (int j = 0; j < preguntaRespuesta.getPreguntasExpediente().getOpcionesPreExp().size(); j++) {

						if (preguntaRespuesta.getPreguntasExpediente().getOpcionesPreExp().get(j)
								.getDescripcionCastellano().equalsIgnoreCase(opciones[i].trim())) {
							respuestaOpciones += preguntaRespuesta.getPreguntasExpediente().getOpcionesPreExp().get(j)
									.getIdOpcionPreExp() + ";";
							break;
						}
					}
				}
				String[] numeroOpcionesCorrectas = respuestaOpciones.split(";");
				if (!"".equals(respuestaOpciones) && numeroOpcionesCorrectas.length == opciones.length) {
					preguntaRespuesta.getRespuestasExpediente().setRespuesta(respuestaOpciones);
				} else {
					return null;
				}
			}
			break;
		}

		return preguntaRespuesta;
	}

	@Override
	public List<PreguntasRespuestasExpediente> parseEnvioRespuestasExpediente(
			List<PreguntasRespuestasExpediente> preguntasRespuestasExpediente) {
		for (PreguntasRespuestasExpediente preguntaRespuesta : preguntasRespuestasExpediente) {

			if (preguntaRespuesta.getRespuestasExpediente() != null
					&& preguntaRespuesta.getRespuestasExpediente().getRespuesta() != null) {

				switch (preguntaRespuesta.getPreguntasExpediente().getIdTipoPregunta()) {
				case Constantes.TIPO_PREGUNTA_SINO:

					if (Constantes.SINO_SI_NUMERO.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {

						if (LocaleContextHolder.getLocale().toString().equals(Constantes.CASTELLANO)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_CASTELLANO);
						} else if (LocaleContextHolder.getLocale().toString().equals(Constantes.EUSKERA)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_EUSKERA);
						}

					} else if (Constantes.SINO_NO_NUMERO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {

						if (LocaleContextHolder.getLocale().toString().equals(Constantes.CASTELLANO)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_CASTELLANO);
						} else if (LocaleContextHolder.getLocale().toString().equals(Constantes.EUSKERA)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_EUSKERA);
						}

					} else if (Constantes.SINO_NP_NUMERO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NP);
					}

					break;

				case Constantes.TIPO_PREGUNTA_CORRECTO_INCORRECTO:

					if (Constantes.CORRECTO_NUMERO.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {

						if (LocaleContextHolder.getLocale().toString().equals(Constantes.CASTELLANO)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.CORRECTO_CASTELLANO);
						} else if (LocaleContextHolder.getLocale().toString().equals(Constantes.EUSKERA)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.CORRECTO_EUSKERA);
						}

					} else if (Constantes.INCORRECTO_NUMERO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {

						if (LocaleContextHolder.getLocale().toString().equals(Constantes.CASTELLANO)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.INCORRECTO_CASTELLANO);
						} else if (LocaleContextHolder.getLocale().toString().equals(Constantes.EUSKERA)) {
							preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.INCORRECTO_EUSKERA);
						}

					} else if (Constantes.NA_NUMERO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.NA);
					} else if (Constantes.NO_SELECCIONADO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(null);
					}

					break;
				}

			}

		}

		return preguntasRespuestasExpediente;
	}

	@Override
	public List<PreguntasRespuestasExpediente> parseRecogidaRespuestasExpediente(
			List<PreguntasRespuestasExpediente> preguntasRespuestasExpediente) {
		for (PreguntasRespuestasExpediente preguntaRespuesta : preguntasRespuestasExpediente) {

			if (preguntaRespuesta.getRespuestasExpediente() != null) {

				switch (preguntaRespuesta.getPreguntasExpediente().getIdTipoPregunta()) {
				case Constantes.TIPO_PREGUNTA_SINO:

					if (Constantes.SINO_SI_CASTELLANO.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())
							|| Constantes.SINO_SI_EUSKERA
									.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_SI_NUMERO);
					} else if (Constantes.SINO_NO_CASTELLANO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())
							|| Constantes.SINO_NO_EUSKERA
									.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NO_NUMERO);
					} else if (Constantes.SINO_NP.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.SINO_NP_NUMERO);
					}

					break;

				case Constantes.TIPO_PREGUNTA_CORRECTO_INCORRECTO:

					if (Constantes.CORRECTO_CASTELLANO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())
							|| Constantes.CORRECTO_EUSKERA
									.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.CORRECTO_NUMERO);
					} else if (Constantes.INCORRECTO_CASTELLANO
							.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())
							|| Constantes.INCORRECTO_EUSKERA
									.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.INCORRECTO_NUMERO);
					} else if (Constantes.NA.equals(preguntaRespuesta.getRespuestasExpediente().getRespuesta())) {
						preguntaRespuesta.getRespuestasExpediente().setRespuesta(Constantes.NA_NUMERO);
					}

					break;
				}

			}

		}

		return preguntasRespuestasExpediente;
	}

	@Override
	public RespuestasExpediente parseEnvioRespuestasTabla(RespuestasExpediente respuestaExpediente) {

		if (Constantes.CORRECTO_NUMERO.equals(respuestaExpediente.getRespuesta())) {

			if (LocaleContextHolder.getLocale().toString().equals(Constantes.CASTELLANO)) {
				respuestaExpediente.setRespuesta(Constantes.CORRECTO_CASTELLANO);
			} else if (LocaleContextHolder.getLocale().toString().equals(Constantes.EUSKERA)) {
				respuestaExpediente.setRespuesta(Constantes.CORRECTO_EUSKERA);
			}

		} else if (Constantes.INCORRECTO_NUMERO.equals(respuestaExpediente.getRespuesta())) {

			if (LocaleContextHolder.getLocale().toString().equals(Constantes.CASTELLANO)) {
				respuestaExpediente.setRespuesta(Constantes.INCORRECTO_CASTELLANO);
			} else if (LocaleContextHolder.getLocale().toString().equals(Constantes.EUSKERA)) {
				respuestaExpediente.setRespuesta(Constantes.INCORRECTO_EUSKERA);
			}

		} else if (Constantes.NA_NUMERO.equals(respuestaExpediente.getRespuesta())) {
			respuestaExpediente.setRespuesta(Constantes.NA);
		} else if (Constantes.NO_SELECCIONADO.equals(respuestaExpediente.getRespuesta())) {
			respuestaExpediente.setRespuesta(null);
		}

		if (respuestaExpediente.getObservacionesInspeccionCas() == "") {
			respuestaExpediente.setObservacionesInspeccionCas(null);
		}

		if (respuestaExpediente.getObservacionesInspeccionEus() == "") {
			respuestaExpediente.setObservacionesInspeccionEus(null);
		}

		return respuestaExpediente;
	}

	@Override
	@Transactional
	public void removeRespuestaFicheros(PreguntasExpediente preguntaExpediente) {

		RespuestasExpediente respuesta = new RespuestasExpediente();
		respuesta.setPreguntaExpediente(preguntaExpediente);

		respuesta = this.respuestasExpedienteDao.findByIdPregunta(respuesta);

		if (respuesta != null) {
			List<FicherosAdjExp> listaFicheros = this.ficherosAdjExpDao
					.findFicherosByIdRespuesta(respuesta.getIdRespuestaExpediente());

			for (FicherosAdjExp fichero : listaFicheros) {
				try {
					// Eliminamos el fichero del PID
					this.ab61WebServiceAdaptadorService.eliminarDocumentoPid(fichero.getOidPid());
					RespuestasExpedienteServiceImpl.logger.info("Eliminado fichero del PID - " + fichero.getOidPid());

					// Eliminamos el fichero de BBDD
					this.ficherosAdjExpDao.remove(fichero);
					RespuestasExpedienteServiceImpl.logger
							.info("Eliminado fichero de BBDD - " + fichero.getIdFicheroAdjExp());

				} catch (Exception e) {
					RespuestasExpedienteServiceImpl.logger
							.error("Error al eliminar las respuestas de protocolo - " + e.getMessage(), e);
				}
			}
			// Eliminamos la respuesta
			this.respuestasExpedienteDao.remove(respuesta);
		}
	}

}
