package com.ejie.ab63.util;

import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.ejie.ab63.comun.Constantes;
import com.ejie.ab63.model.Alojamiento;
import com.ejie.ab63.model.Aseo;
import com.ejie.ab63.model.AseoAlojamiento;
import com.ejie.ab63.model.EstablecimientoData;
import com.ejie.ab63.model.Habitacion;
import com.ejie.ab63.model.HabitacionAlojamiento;
import com.ejie.ab63.model.Parcela;
import com.ejie.ab63.model.Suite;
import com.ejie.ab63.model.TipoAseo;
import com.ejie.ab63.model.TipoHabitacion;

/**
 * Libreria de componentes para leer los excel de establecimientos
 */
public class ExcelUtil {

	public static XSSFWorkbook formarWorkbook(InputStream fis) throws IOException {
		return new XSSFWorkbook(fis);
	}

	public static List<Habitacion> leerExcelHabitaciones(XSSFWorkbook workbook, Integer idEstablecimiento,
			int hojaExcel) throws IOException {

		List<Habitacion> listaHabitaciones = new ArrayList<Habitacion>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				Habitacion habitacion = new Habitacion();
				EstablecimientoData est = new EstablecimientoData();
				est.setIdEstablecimiento(idEstablecimiento);
				habitacion.setEstablecimientoData(est);
				habitacion.setNumHabitacion((int) row.getCell(0).getNumericCellValue());
				habitacion.setTipoRegistro(Constantes.TIPO_REGISTRO_DETALLE);
				if (null != row.getCell(1)) {
					String[] descHabitacion = row.getCell(1).getStringCellValue().split("/");
					if (descHabitacion.length > 0) {
						habitacion.setDescTipoHab(descHabitacion[0]);
					}
				}
				if (null != row.getCell(2)) {
					habitacion.setNumPlazas((long) row.getCell(2).getNumericCellValue());
				}
				if (null != row.getCell(3)) {
					habitacion.setNumSupTotal(new BigDecimal(row.getCell(3).getNumericCellValue()));
				}
				if (null != row.getCell(4)) {
					String[] descAseo = row.getCell(4).getStringCellValue().split("/");
					if (descAseo.length > 0) {
						habitacion.setDescTipoAseo(descAseo[0]);
					}
				}
				if (null != row.getCell(5)) {
					habitacion.setNumSupBanyoCompleto(new BigDecimal(row.getCell(5).getNumericCellValue()));
				}

				if (null != row.getCell(6)) {
					habitacion.setNumSupDuchaLavaboIno(new BigDecimal(row.getCell(6).getNumericCellValue()));
				}
				if (null != row.getCell(7)) {
					habitacion.setNumSupBanyoLavabo(new BigDecimal(row.getCell(7).getNumericCellValue()));
				}
				if (null != row.getCell(8) && !row.getCell(8).getStringCellValue().isEmpty()) {
					habitacion.setLavabo(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(8).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(9) && !row.getCell(8).getStringCellValue().isEmpty()) {
					habitacion.setSalonPrivado(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(9).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(10)) {
					habitacion.setNumSupSalon(new BigDecimal(row.getCell(10).getNumericCellValue()));
				}
				if (null != row.getCell(11) && !row.getCell(11).getStringCellValue().isEmpty()) {
					habitacion.setTerraza(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(11).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(12)) {
					habitacion.setNumSupTerraza(new BigDecimal(row.getCell(12).getNumericCellValue()));
				}
				if (null != row.getCell(13) && !row.getCell(13).getStringCellValue().isEmpty()) {
					habitacion.setCamaSupletoria(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(13).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(14) && !row.getCell(14).getStringCellValue().isEmpty()) {
					habitacion.setAccesibilidad(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(14).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(15)) {
					row.getCell(15).setCellType(row.getCell(15).CELL_TYPE_STRING);
					habitacion.setOtrasCaracteristicas(row.getCell(15).getStringCellValue());
				}
				if (null != row.getCell(16)) {
					row.getCell(16).getNumericCellValue();
					habitacion.setIdHabitacion((int) (row.getCell(16).getNumericCellValue()));
				}
				listaHabitaciones.add(habitacion);
			}
		}
		return listaHabitaciones;
	}

	public static List<Suite> leerExcelSuites(XSSFWorkbook workbook, Integer idEstablecimiento, int hojaExcel)
			throws IOException {
		List<Suite> listaSuites = new ArrayList<Suite>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				Suite suite = new Suite();
				EstablecimientoData est = new EstablecimientoData();
				est.setIdEstablecimiento(idEstablecimiento);
				suite.setEstablecimientoData(est);
				suite.setNumSuite(new Double(row.getCell(0).getNumericCellValue()).longValue());
				suite.setTipoRegistro(Constantes.TIPO_REGISTRO_DETALLE);
				if (null != row.getCell(1)) {
					suite.setDescNombre(row.getCell(1).getStringCellValue());
				}
				if (null != row.getCell(2)) {
					suite.setNumPlazas((long) (row.getCell(2).getNumericCellValue()));
				}
				if (null != row.getCell(3)) {
					suite.setNumSupTotal(new BigDecimal(row.getCell(3).getNumericCellValue()));
				}
				if (null != row.getCell(4) && !row.getCell(4).getStringCellValue().isEmpty()) {
					suite.setSalonPrivado(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(4).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(5)) {
					suite.setNumSupSalon(new BigDecimal(row.getCell(5).getNumericCellValue()));
				}
				if (null != row.getCell(6) && !row.getCell(6).getStringCellValue().isEmpty()) {
					suite.setTerraza(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(6).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(7)) {
					suite.setNumSupTerraza(new BigDecimal(row.getCell(7).getNumericCellValue()));
				}
				if (null != row.getCell(8)) {
					suite.setNumHabDoble(new Double(row.getCell(8).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(9)) {
					suite.setNumHabIndividuales(new Double(row.getCell(9).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(10)) {
					suite.setNumSalones(new Double(row.getCell(10).getNumericCellValue()).longValue());
				}

				if (null != row.getCell(11) && !row.getCell(11).getStringCellValue().isEmpty()) {
					suite.setAccesibilidad(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(11).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(12)) {
					row.getCell(12).setCellType(row.getCell(12).CELL_TYPE_STRING);
					suite.setOtrasCaracteristicas(row.getCell(12).getStringCellValue());
				}
				if (null != row.getCell(13)) {
					row.getCell(13).getNumericCellValue();
					suite.setIdSuite((long) (row.getCell(13).getNumericCellValue()));
				}
				listaSuites.add(suite);
			}
		}
		return listaSuites;
	}

	public static List<Alojamiento> leerExcelAlojamiento(XSSFWorkbook workbook, Integer idEstablecimiento,
			int hojaExcel, boolean esAlbergue) throws IOException {
		List<Alojamiento> listaAlojamientos = new ArrayList<Alojamiento>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				Alojamiento alojamiento = new Alojamiento();
				EstablecimientoData est = new EstablecimientoData();
				est.setIdEstablecimiento(idEstablecimiento);
				alojamiento.setEstablecimientoData(est);
				alojamiento.setNumAlojamiento(new Double(row.getCell(0).getNumericCellValue()).longValue());
				alojamiento.setTipoRegistro(Constantes.TIPO_REGISTRO_DETALLE);
				if (esAlbergue) {
					alojamiento.setTipoAlojamiento(Constantes.TipoAlojamientoEnum.CONJUNTO.getIdTipoAlojamiento());
				} else if (null != row.getCell(1)) {
					alojamiento.setTipoAlojamiento(Constantes.TipoAlojamientoEnum
							.findByDescTipoAlojamiento(row.getCell(1).getStringCellValue()).getIdTipoAlojamiento());
				}
				if (null != row.getCell(2)) {
					alojamiento.setNumSupTotal(new BigDecimal(row.getCell(2).getNumericCellValue()));
				}
				if (null != row.getCell(3)) {
					alojamiento.setCapacidadTotal(new BigDecimal(row.getCell(3).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(4)) {
					alojamiento
							.setNumPlazasDormitorio(new BigDecimal(row.getCell(4).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(5)) {
					alojamiento
							.setNumPlazasConvertibles(new BigDecimal(row.getCell(5).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(6) && !row.getCell(6).getStringCellValue().isEmpty()) {
					alojamiento.setAccesibilidad(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(6).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(7)) {
					row.getCell(7).setCellType(row.getCell(7).CELL_TYPE_STRING);
					alojamiento.setOtrasCaracteristicas(row.getCell(7).getStringCellValue());
				}
				if (null != row.getCell(8) && row.getCell(8).getNumericCellValue() != 0) {
					row.getCell(8).getNumericCellValue();
					alojamiento.setIdAlojamiento((int) (row.getCell(8).getNumericCellValue()));
				}
				listaAlojamientos.add(alojamiento);
			}
		}
		return listaAlojamientos;
	}

	public static List<HabitacionAlojamiento> leerExcelHabitacionAlojamiento(XSSFWorkbook workbook,
			Integer idEstablecimiento, int hojaExcel) throws IOException {
		List<HabitacionAlojamiento> listaHabitacionAlojamiento = new ArrayList<HabitacionAlojamiento>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				HabitacionAlojamiento habitacionAlojamiento = new HabitacionAlojamiento();
				Alojamiento alojamiento = new Alojamiento();
				EstablecimientoData est = new EstablecimientoData();
				est.setIdEstablecimiento(idEstablecimiento);
				alojamiento.setEstablecimientoData(est);
				alojamiento.setNumAlojamiento(new Double(row.getCell(0).getNumericCellValue()).longValue());
				habitacionAlojamiento.setAlojamiento(alojamiento);
				habitacionAlojamiento.setNumHabitacion((int) row.getCell(1).getNumericCellValue());
				habitacionAlojamiento.setTipoRegistro(Constantes.TIPO_REGISTRO_DETALLE);
				if (null != row.getCell(2)) {
					String[] descHabitacion = row.getCell(2).getStringCellValue().split("/");
					if (descHabitacion.length > 0) {
						habitacionAlojamiento.setDescTipoHab(descHabitacion[0]);
					}
				}
				if (null != row.getCell(3)) {
					habitacionAlojamiento.setNumPlazas((long) (row.getCell(3).getNumericCellValue()));
				}
				if (null != row.getCell(4)) {
					habitacionAlojamiento.setNumSupTotal(new BigDecimal(row.getCell(4).getNumericCellValue()));
				}
				if (null != row.getCell(5)) {
					String[] descAseo = row.getCell(5).getStringCellValue().split("/");
					if (descAseo.length > 0) {
						habitacionAlojamiento.setDescTipoAseo(descAseo[0]);
					}
				}
				if (null != row.getCell(6)) {
					habitacionAlojamiento.setNumSupBanyoCompleto(new BigDecimal(row.getCell(6).getNumericCellValue()));
				}
				if (null != row.getCell(7)) {
					habitacionAlojamiento.setNumSupDuchaLavaboIno(new BigDecimal(row.getCell(7).getNumericCellValue()));
				}
				if (null != row.getCell(8)) {
					habitacionAlojamiento.setNumSupBanyoLavabo(new BigDecimal(row.getCell(8).getNumericCellValue()));
				}
				if (null != row.getCell(9) && !row.getCell(9).getStringCellValue().isEmpty()) {
					habitacionAlojamiento.setLavabo(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(9).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(10) && !row.getCell(10).getStringCellValue().isEmpty()) {
					habitacionAlojamiento.setSalonPrivado(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(10).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(11)) {
					habitacionAlojamiento.setNumSupSalon(new BigDecimal(row.getCell(11).getNumericCellValue()));
				}
				if (null != row.getCell(12) && !row.getCell(12).getStringCellValue().isEmpty()) {
					habitacionAlojamiento.setTerraza(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(12).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(13)) {
					habitacionAlojamiento.setNumSupTerraza(new BigDecimal(row.getCell(13).getNumericCellValue()));
				}
				if (null != row.getCell(14) && !row.getCell(14).getStringCellValue().isEmpty()) {
					habitacionAlojamiento.setCamaSupletoria(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(14).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(15) && !row.getCell(15).getStringCellValue().isEmpty()) {
					habitacionAlojamiento.setAccesibilidad(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(15).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(16)) {
					row.getCell(16).setCellType(row.getCell(16).CELL_TYPE_STRING);
					habitacionAlojamiento.setOtrasCaracteristicas(row.getCell(16).getStringCellValue());
				}
				if (null != row.getCell(17)) {
					row.getCell(17).getNumericCellValue();
					habitacionAlojamiento.setIdHabitacionAlo((int) (row.getCell(17).getNumericCellValue()));
				}
				listaHabitacionAlojamiento.add(habitacionAlojamiento);
			}
		}
		return listaHabitacionAlojamiento;
	}

	public static List<Aseo> leerExcelBañosGenerales(XSSFWorkbook workbook, Integer idEstablecimiento, int hojaExcel)
			throws IOException {
		List<Aseo> listaAseos = new ArrayList<Aseo>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				Aseo aseo = new Aseo();
				EstablecimientoData est = new EstablecimientoData();
				est.setIdEstablecimiento(idEstablecimiento);
				aseo.setEstablecimientoData(est);
				aseo.setNumAseo(new Double(row.getCell(0).getNumericCellValue()).longValue());
				aseo.setTipoRegistro(Constantes.TIPO_REGISTRO_DETALLE);
				if (null != row.getCell(1)) {
					String[] descAseo = row.getCell(1).getStringCellValue().split("/");
					if (descAseo.length > 0) {
						aseo.setDescTipoAseo(descAseo[0]);
					}
				}
				if (null != row.getCell(2)) {
					aseo.setNumSupTotal(new BigDecimal(row.getCell(2).getNumericCellValue()));
				}
				if (null != row.getCell(3)) {
					row.getCell(3).getNumericCellValue();
					aseo.setIdAseo((int) (row.getCell(3).getNumericCellValue()));
				}
				listaAseos.add(aseo);
			}
		}
		return listaAseos;
	}

	public static List<AseoAlojamiento> leerExcelBañosApartamento(XSSFWorkbook workbook, Integer idEstablecimiento,
			int hojaExcel) throws IOException {
		List<AseoAlojamiento> listaAseosAlojamiento = new ArrayList<AseoAlojamiento>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				AseoAlojamiento aseoAlojamiento = new AseoAlojamiento();

				Alojamiento alojamiento = new Alojamiento();
				alojamiento.setNumAlojamiento(new Double(row.getCell(0).getNumericCellValue()).longValue());
				aseoAlojamiento.setAlojamiento(alojamiento);

				if (null != row.getCell(1)) {
					aseoAlojamiento.setNumAseoAlojamiento(new Double(row.getCell(1).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(2)) {
					String[] descAseo = row.getCell(2).getStringCellValue().split("/");
					if (descAseo.length > 0) {
						aseoAlojamiento.setDescTipoAseo(descAseo[0]);
					}
				}
				if (null != row.getCell(3)) {
					aseoAlojamiento.setNumSuperficie(new BigDecimal(row.getCell(3).getNumericCellValue()));
				}
				if (null != row.getCell(4)) {
					row.getCell(4).getNumericCellValue();
					aseoAlojamiento.setIdAseoAlo((int) (row.getCell(4).getNumericCellValue()));
				}
				listaAseosAlojamiento.add(aseoAlojamiento);
			}
		}
		return listaAseosAlojamiento;
	}

	public static List<Parcela> leerExcelParcelas(XSSFWorkbook workbook, Integer idEstablecimiento, int hojaExcel)
			throws IOException {
		List<Parcela> listaParcelas = new ArrayList<Parcela>();
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		// Recorremos todas las filas para mostrar el contenido de cada celda
		for (int i = 7; i < sheet.getLastRowNum() + 1; i++) {
			Row row = sheet.getRow(i);
			if (null != row && null != row.getCell(0) && row.getCell(0).getNumericCellValue() != 0.0) {
				Parcela parcela = new Parcela();
				EstablecimientoData est = new EstablecimientoData();
				est.setIdEstablecimiento(idEstablecimiento);
				parcela.setEstablecimientoData(est);
				parcela.setNumParcela(new Double(row.getCell(0).getNumericCellValue()).longValue());
				parcela.setTipoRegistro(Constantes.TIPO_REGISTRO_DETALLE);
				if (null != row.getCell(1)) {
					parcela.setNombre(row.getCell(1).getStringCellValue());
				}
				if (null != row.getCell(2)) {
					parcela.setNumSuperficie(new BigDecimal(row.getCell(2).getNumericCellValue()));
				}
				if (null != row.getCell(3)) {
					parcela.setNumPlazas(new Double(row.getCell(3).getNumericCellValue()).longValue());
				}
				if (null != row.getCell(4) && !row.getCell(4).getStringCellValue().isEmpty()) {
					parcela.setElectricidad(Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(4).getStringCellValue())
							.getIdSiNo().toString());
				}
				if (null != row.getCell(5) && !row.getCell(5).getStringCellValue().isEmpty()) {
					parcela.setAgua(Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(5).getStringCellValue())
							.getIdSiNo().toString());
				}
				if (null != row.getCell(6) && !row.getCell(6).getStringCellValue().isEmpty()) {
					parcela.setDesague(Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(6).getStringCellValue())
							.getIdSiNo().toString());
				}
				if (null != row.getCell(7)) {
					parcela.setAlbergueFijo(Constantes.TipoAlbergueInstaladoEnum
							.findByDescTipoAlbergueInstalado(row.getCell(7).getStringCellValue())
							.getIdTipoAlbergueInstalado());
				}
				if (null != row.getCell(8)) {
					parcela.setNumPlazasTipo((int) row.getCell(8).getNumericCellValue());
				}
				if (null != row.getCell(9) && !row.getCell(9).getStringCellValue().isEmpty()) {
					parcela.setAccesibilidad(
							Constantes.SiNoEnum.findByDescTipoSiNo(row.getCell(9).getStringCellValue()).getIdSiNo());
				}
				if (null != row.getCell(10)) {
					row.getCell(10).setCellType(row.getCell(10).CELL_TYPE_STRING);
					parcela.setOtrasCaracteristicas(row.getCell(10).getStringCellValue());
				}
				if (null != row.getCell(11)) {
					row.getCell(11).getNumericCellValue();
					parcela.setIdParcela((long) (row.getCell(11).getNumericCellValue()));
				}
				listaParcelas.add(parcela);
			}
		}
		return listaParcelas;
	}

	public static void escribirHabitaciones(List<Habitacion> listaHabitaciones, XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaHabitaciones.size(); i++) {
			Habitacion habitacionRow = listaHabitaciones.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionRow.getNumHabitacion());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionRow.getTipoHabitacion().getDescTipoEs() + "/"
					+ habitacionRow.getTipoHabitacion().getDescTipoEu());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionRow.getNumPlazas());
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionRow.getNumSupTotal() ? habitacionRow.getNumSupTotal().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(4);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(
					habitacionRow.getTipoAseo().getDescTipoEs() + "/" + habitacionRow.getTipoAseo().getDescTipoEu());
			cell = row.createCell(5);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionRow.getNumSupBanyoCompleto()
					? habitacionRow.getNumSupBanyoCompleto().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(6);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionRow.getNumSupDuchaLavaboIno()
					? habitacionRow.getNumSupDuchaLavaboIno().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(7);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionRow.getNumSupBanyoLavabo()
					? habitacionRow.getNumSupBanyoLavabo().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(8);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionRow.getLavabo()).getDescSiNo());
			cell = row.createCell(9);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionRow.getSalonPrivado()).getDescSiNo());
			cell = row.createCell(10);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionRow.getNumSupSalon() ? habitacionRow.getNumSupSalon().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(11);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionRow.getTerraza()).getDescSiNo());
			cell = row.createCell(12);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionRow.getNumSupTerraza() ? habitacionRow.getNumSupTerraza().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(13);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionRow.getCamaSupletoria()).getDescSiNo());
			cell = row.createCell(14);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionRow.getAccesibilidad()).getDescSiNo());
			cell = row.createCell(15);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionRow.getOtrasCaracteristicas());
			cell = row.createCell(16);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionRow.getIdHabitacion());
		}
	}

	public static void escribirApartamentos(List<Alojamiento> listaAlojamientos, XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaAlojamientos.size(); i++) {
			Alojamiento alojamientoRow = listaAlojamientos.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(alojamientoRow.getNumAlojamiento());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.TipoAlojamientoEnum
					.findByIdTipoAlojamiento(alojamientoRow.getTipoAlojamiento()).getDescTipoAlojamiento());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != alojamientoRow.getNumSupTotal() ? alojamientoRow.getNumSupTotal().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(alojamientoRow.getCapacidadTotal());
			cell = row.createCell(4);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(alojamientoRow.getNumPlazasDormitorio());
			cell = row.createCell(5);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(alojamientoRow.getNumPlazasConvertibles());
			cell = row.createCell(6);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(alojamientoRow.getAccesibilidad()).getDescSiNo());
			cell = row.createCell(7);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(alojamientoRow.getOtrasCaracteristicas());
			cell = row.createCell(8);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(alojamientoRow.getIdAlojamiento());
		}
	}

	public static void escribirHabitacionesAlojamiento(List<HabitacionAlojamiento> listaHabitacionesAlojamiento,
			XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaHabitacionesAlojamiento.size(); i++) {
			HabitacionAlojamiento habitacionAlojamientoRow = listaHabitacionesAlojamiento.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getAlojamiento().getNumAlojamiento());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getNumHabitacion());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getTipoHabitacion().getDescTipoEs() + "/"
					+ habitacionAlojamientoRow.getTipoHabitacion().getDescTipoEu());
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getNumPlazas());
			cell = row.createCell(4);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionAlojamientoRow.getNumSupTotal()
					? habitacionAlojamientoRow.getNumSupTotal().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(5);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getTipoAseo().getDescTipoEs() + "/"
					+ habitacionAlojamientoRow.getTipoAseo().getDescTipoEu());
			cell = row.createCell(6);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionAlojamientoRow.getNumSupBanyoCompleto()
					? habitacionAlojamientoRow.getNumSupBanyoCompleto().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(7);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionAlojamientoRow.getNumSupDuchaLavaboIno()
					? habitacionAlojamientoRow.getNumSupDuchaLavaboIno().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(8);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionAlojamientoRow.getNumSupBanyoLavabo()
					? habitacionAlojamientoRow.getNumSupBanyoLavabo().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(9);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionAlojamientoRow.getLavabo()).getDescSiNo());
			cell = row.createCell(10);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(
					Constantes.SiNoEnum.findByIdSiNo(habitacionAlojamientoRow.getSalonPrivado()).getDescSiNo());
			cell = row.createCell(11);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionAlojamientoRow.getNumSupSalon()
					? habitacionAlojamientoRow.getNumSupSalon().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(12);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(habitacionAlojamientoRow.getTerraza()).getDescSiNo());
			cell = row.createCell(13);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != habitacionAlojamientoRow.getNumSupTerraza()
					? habitacionAlojamientoRow.getNumSupTerraza().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(14);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(
					Constantes.SiNoEnum.findByIdSiNo(habitacionAlojamientoRow.getCamaSupletoria()).getDescSiNo());
			cell = row.createCell(15);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(
					Constantes.SiNoEnum.findByIdSiNo(habitacionAlojamientoRow.getAccesibilidad()).getDescSiNo());
			cell = row.createCell(16);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getOtrasCaracteristicas());
			cell = row.createCell(17);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(habitacionAlojamientoRow.getIdHabitacionAlo());
		}
	}

	public static void escribirAseos(List<Aseo> listaAseo, XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaAseo.size(); i++) {
			Aseo aseoRow = listaAseo.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoRow.getNumAseo());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoRow.getTipoAseo().getDescTipoEs() + "/" + aseoRow.getTipoAseo().getDescTipoEu());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != aseoRow.getNumSupTotal() ? aseoRow.getNumSupTotal().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoRow.getIdAseo());
		}
	}

	public static void escribirAseosAlojamiento(List<AseoAlojamiento> listaAseosAlojamiento, XSSFWorkbook workbook,
			int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaAseosAlojamiento.size(); i++) {
			AseoAlojamiento aseoAlojamientoRow = listaAseosAlojamiento.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoAlojamientoRow.getAlojamiento().getNumAlojamiento());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoAlojamientoRow.getNumAseoAlojamiento());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoAlojamientoRow.getTipoAseo().getDescTipoEs() + "/"
					+ aseoAlojamientoRow.getTipoAseo().getDescTipoEu());
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != aseoAlojamientoRow.getNumSuperficie()
					? aseoAlojamientoRow.getNumSuperficie().doubleValue() : Double.parseDouble("0"));
			cell = row.createCell(4);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(aseoAlojamientoRow.getIdAseoAlo());
		}
	}

	public static void escribirSuites(List<Suite> listaSuites, XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaSuites.size(); i++) {
			Suite suiteRow = listaSuites.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getNumSuite());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getDescNombre());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getNumPlazas());
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != suiteRow.getNumSupTotal() ? suiteRow.getNumSupTotal().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(4);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(suiteRow.getSalonPrivado()).getDescSiNo());
			cell = row.createCell(5);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != suiteRow.getNumSupSalon() ? suiteRow.getNumSupSalon().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(6);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(suiteRow.getTerraza()).getDescSiNo());
			cell = row.createCell(7);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != suiteRow.getNumSupTerraza() ? suiteRow.getNumSupTerraza().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(8);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getNumHabDoble());
			cell = row.createCell(9);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getNumHabIndividuales());
			cell = row.createCell(10);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getNumSalones());
			cell = row.createCell(11);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(suiteRow.getAccesibilidad()).getDescSiNo());
			cell = row.createCell(12);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getOtrasCaracteristicas());
			cell = row.createCell(13);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(suiteRow.getIdSuite());
		}
	}

	public static void escribirParcelas(List<Parcela> listaParcelas, XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		CellStyle unlockedCellStyle = workbook.createCellStyle();
		unlockedCellStyle.setLocked(false);

		for (int i = 0; i < listaParcelas.size(); i++) {
			Parcela parcelaRow = listaParcelas.get(i);
			XSSFRow row = sheet.createRow(i + 7);
			XSSFCell cell = row.createCell(0);
			cell.setCellValue(parcelaRow.getNumParcela());
			cell = row.createCell(1);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(parcelaRow.getNombre());
			cell = row.createCell(2);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(null != parcelaRow.getNumSuperficie() ? parcelaRow.getNumSuperficie().doubleValue()
					: Double.parseDouble("0"));
			cell = row.createCell(3);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(parcelaRow.getNumPlazas());
			cell = row.createCell(4);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(
					Constantes.SiNoEnum.findByIdSiNo(Integer.valueOf(parcelaRow.getElectricidad())).getDescSiNo());
			cell = row.createCell(5);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(Integer.valueOf(parcelaRow.getAgua())).getDescSiNo());
			cell = row.createCell(6);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(Integer.valueOf(parcelaRow.getDesague())).getDescSiNo());
			cell = row.createCell(7);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.TipoAlbergueInstaladoEnum
					.findByIdTipoAlbergueInstalado(parcelaRow.getAlbergueFijo()).getDescTipoAlbergueInstalado());
			cell = row.createCell(8);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(parcelaRow.getNumPlazasTipo());
			cell = row.createCell(9);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(Constantes.SiNoEnum.findByIdSiNo(parcelaRow.getAccesibilidad()).getDescSiNo());
			cell = row.createCell(10);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(parcelaRow.getOtrasCaracteristicas());
			cell = row.createCell(11);
			cell.setCellStyle(unlockedCellStyle);
			cell.setCellValue(parcelaRow.getIdParcela());
		}
	}

	public static void escribirTipoAseoHabitacion(List<TipoAseo> listaTipoAseos,
			List<TipoHabitacion> listaTipoHabitacion, XSSFWorkbook workbook, int hojaExcel) {
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		XSSFRow row;

		for (int i = 0; i < listaTipoAseos.size(); i++) {
			TipoAseo tipoAseoRow = listaTipoAseos.get(i);
			if (null != sheet.getRow(i)) {
				row = sheet.getRow(i);
			} else {
				row = sheet.createRow(i);
			}
			XSSFCell cell = row.createCell(6);
			cell.setCellValue(tipoAseoRow.getDescTipoEs() + "/" + tipoAseoRow.getDescTipoEu());
		}
		for (int i = 0; i < listaTipoHabitacion.size(); i++) {
			TipoHabitacion tipoHabitacionRow = listaTipoHabitacion.get(i);
			if (null != sheet.getRow(i)) {
				row = sheet.getRow(i);
			} else {
				row = sheet.createRow(i);
			}
			XSSFCell cell = row.createCell(3);
			cell.setCellValue(tipoHabitacionRow.getDescTipoEs() + "/" + tipoHabitacionRow.getDescTipoEu());
		}
	}

	public static boolean comprobarPlantilla(XSSFWorkbook workbook, String idTipoEstablecimiento) {
		int hojaExcel = workbook.getNumberOfSheets() - 1;
		XSSFSheet sheet = workbook.getSheetAt(hojaExcel);
		XSSFRow row = sheet.getRow(0);

		XSSFCell cell = row.getCell(8);
		if (!cell.getStringCellValue().equalsIgnoreCase(idTipoEstablecimiento)) {
			return false;
		}
		return true;
	}
}