package com.ejie.m62fb.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.codehaus.jackson.map.annotate.JsonSerialize;

import com.ejie.m62fb.model.base.AbstractM62FBModel;
import com.ejie.m62fb.model.tipos.EstadoTramitacion;
import com.ejie.x38.serialization.JsonDateDeserializer;
import com.ejie.x38.serialization.JsonDateSerializer;

/**
 * SolicitudReserva.
 * 
XXXX
 */
public class SolicitudReserva extends AbstractM62FBModel implements
		java.io.Serializable {

	private static final long serialVersionUID = 1L;
	// Identificador Solicitud Reserva
	private Integer idM62r38t0;
	// Numero Expediente (folderNumber) Platea
	private String numExpedientePlatea;
	// Identificador (folderId) Platea
	private String idExpedientePlatea;
	// Fecha Solicitud
	private Date fecSolicitud;
	// Descripcion Entidad Solicitud
	private String desEntidadSolic;
	// Descripcion Departamento Solicitud
	private String desDptoSolic;
	// Descripcion Interlocutor
	private String desInterlocutor;
	// Estado
	private EstadoTramitacion estado;
	// Numero de viviendas
	private Long numViviendas;
	// Descripcion Direccion
	private String desDireccion;
	// Direccion Email
	private String dirEmail;
	// Telefono
	private String numTelefono;

	// Campos para el filtro (rango fecSolicitud)
	private Date fecSolicitudDesde;
	private Date fecSolicitudHasta;

	private List<ViviendaSolicitada> listViviendasSolicitadas = new ArrayList<ViviendaSolicitada>();

	/**
	 * Method 'SolicitudReserva'.
	 */
	public SolicitudReserva() {
	}

	/**
	 * Method 'SolicitudReserva(Integer idM62r38t0)'.
	 */
	public SolicitudReserva(Integer idM62r38t0) {
		this.idM62r38t0 = idM62r38t0;
	}

	/**
	 * Method 'SolicitudesReserva'.
	 * 
	 * @param numExpedientePlatea
	 *            String
	 * @param idExpedientePlatea
	 *            String
	 * @param fecSolicitud
	 *            Date
	 * @param desEntidadSolic
	 *            String
	 * @param desDptoSolic
	 *            String
	 * @param desInterlocutor
	 *            String
	 * @param estado
	 *            String
	 * @param numViviendas
	 *            BigDecimal
	 * @param desDireccion
	 *            String
	 * @param idM62r38t0
	 *            Integer
	 */
	public SolicitudReserva(Integer idM62r38t0, String numExpedientePlatea,
			String idExpedientePlatea, Date fecSolicitud,
			String desEntidadSolic, String desDptoSolic,
			String desInterlocutor, EstadoTramitacion estado,
			Long numViviendas, String desDireccion, String dirEmail,
			String numTelefono) {
		this.idM62r38t0 = idM62r38t0;
		this.numExpedientePlatea = numExpedientePlatea;
		this.idExpedientePlatea = idExpedientePlatea;
		this.fecSolicitud = fecSolicitud;
		this.desEntidadSolic = desEntidadSolic;
		this.desDptoSolic = desDptoSolic;
		this.desInterlocutor = desInterlocutor;
		this.estado = estado;
		this.numViviendas = numViviendas;
		this.desDireccion = desDireccion;
		this.dirEmail = dirEmail;
		this.numTelefono = numTelefono;
	}

	/**
	 * Method 'getIdM62r38t0'
	 * 
	 * @return idM62r38t0
	 */
	public Integer getIdM62r38t0() {
		return this.idM62r38t0;
	}

	/**
	 * Method 'setIdM62r38t0'
	 * 
	 * @param idM62r38t0
	 *            Integer
	 */
	public void setIdM62r38t0(Integer idM62r38t0) {
		this.idM62r38t0 = idM62r38t0;
	}

	/**
	 * Method 'getNumExpedientePlatea'
	 * 
	 * @return numExpedientePlatea
	 */
	public String getNumExpedientePlatea() {
		return this.numExpedientePlatea;
	}

	/**
	 * Method 'setNumExpedientePlatea'
	 * 
	 * @param numExpedientePlatea
	 *            String
	 */
	public void setNumExpedientePlatea(String numExpedientePlatea) {
		this.numExpedientePlatea = numExpedientePlatea;
	}

	/**
	 * Method 'getIdExpedientePlatea'
	 * 
	 * @return idExpedientePlatea
	 */
	public String getIdExpedientePlatea() {
		return this.idExpedientePlatea;
	}

	/**
	 * Method 'setIdExpedientePlatea'
	 * 
	 * @param idExpedientePlatea
	 *            String
	 */
	public void setIdExpedientePlatea(String idExpedientePlatea) {
		this.idExpedientePlatea = idExpedientePlatea;
	}

	/**
	 * Method 'getFecSolicitud'.
	 * 
	 * @return Date
	 */

	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFecSolicitud() {
		return this.fecSolicitud;
	}

	/**
	 * Method 'setFecSolicitud'.
	 * 
	 * @param fecSolicitud
	 *            Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFecSolicitud(Date fecSolicitud) {
		this.fecSolicitud = fecSolicitud;
	}

	/**
	 * Method 'getDesEntidadSolic'.
	 * 
	 * @return String
	 */

	public String getDesEntidadSolic() {
		return this.desEntidadSolic;
	}

	/**
	 * Method 'setDesEntidadSolic'.
	 * 
	 * @param desEntidadSolic
	 *            String
	 * @return
	 */

	public void setDesEntidadSolic(String desEntidadSolic) {
		this.desEntidadSolic = desEntidadSolic;
	}

	/**
	 * Method 'getDesDptoSolic'.
	 * 
	 * @return String
	 */

	public String getDesDptoSolic() {
		return this.desDptoSolic;
	}

	/**
	 * Method 'setDesDptoSolic'.
	 * 
	 * @param desDptoSolic
	 *            String
	 * @return
	 */

	public void setDesDptoSolic(String desDptoSolic) {
		this.desDptoSolic = desDptoSolic;
	}

	/**
	 * Method 'getDesInterlocutor'.
	 * 
	 * @return String
	 */

	public String getDesInterlocutor() {
		return this.desInterlocutor;
	}

	/**
	 * Method 'setDesInterlocutor'.
	 * 
	 * @param desInterlocutor
	 *            String
	 * @return
	 */

	public void setDesInterlocutor(String desInterlocutor) {
		this.desInterlocutor = desInterlocutor;
	}

	/**
	 * Method 'getEstado'.
	 * 
	 * @return EstadoTramitacion
	 */

	public EstadoTramitacion getEstado() {
		return this.estado;
	}

	/**
	 * Method 'setEstado'.
	 * 
	 * @param estado
	 *            EstadoTramitacion
	 * @return
	 */

	public void setEstado(EstadoTramitacion estado) {
		this.estado = estado;
	}

	/**
	 * Method 'getNumViviendas'.
	 * 
	 * @return Long
	 */

	public Long getNumViviendas() {
		return this.numViviendas;
	}

	/**
	 * Method 'setNumViviendas'.
	 * 
	 * @param numViviendas
	 *            Long
	 * @return
	 */

	public void setNumViviendas(Long numViviendas) {
		this.numViviendas = numViviendas;
	}

	/**
	 * Method 'getDesDireccion'.
	 * 
	 * @return String
	 */

	public String getDesDireccion() {
		return this.desDireccion;
	}

	/**
	 * Method 'setDesDireccion'.
	 * 
	 * @param desDireccion
	 *            String
	 * @return
	 */

	public void setDesDireccion(String desDireccion) {
		this.desDireccion = desDireccion;
	}

	// Campos para el filtro

	/**
	 * Method 'getFecSolicitudDesde'
	 * 
	 * @return fecSolicitudDesde
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFecSolicitudDesde() {
		return this.fecSolicitudDesde;
	}

	/**
	 * Method 'setFecSolicitudDesde'
	 * 
	 * @param fecSolicitudDesde
	 *            Date
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFecSolicitudDesde(Date fecSolicitudDesde) {
		this.fecSolicitudDesde = fecSolicitudDesde;
	}

	/**
	 * Method 'getFecSolicitudHasta'
	 * 
	 * @return fecSolicitudHasta
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFecSolicitudHasta() {
		return this.fecSolicitudHasta;
	}

	/**
	 * Method 'setFecSolicitudHasta'
	 * 
	 * @param fecSolicitudHasta
	 *            Date
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFecSolicitudHasta(Date fecSolicitudHasta) {
		this.fecSolicitudHasta = fecSolicitudHasta;
	}

	/**
	 * Method 'getDirEmail'
	 * 
	 * @return dirEmail
	 */
	public String getDirEmail() {
		return this.dirEmail;
	}

	/**
	 * Method 'setDirEmail'
	 * 
	 * @param dirEmail
	 *            String
	 */
	public void setDirEmail(String dirEmail) {
		this.dirEmail = dirEmail;
	}

	/**
	 * Method 'getNumTelefono'
	 * 
	 * @return numTelefono
	 */
	public String getNumTelefono() {
		return this.numTelefono;
	}

	/**
	 * Method 'setNumTelefono'
	 * 
	 * @param numTelefono
	 *            String
	 */
	public void setNumTelefono(String numTelefono) {
		this.numTelefono = numTelefono;
	}

	/**
	 * Method 'getListViviendasSolicitadas'
	 * 
	 * @return listViviendasSolicitadas
	 */
	@JsonIgnore
	public List<ViviendaSolicitada> getListViviendasSolicitadas() {
		return this.listViviendasSolicitadas;
	}

	/**
	 * Method 'setListViviendasSolicitadas'
	 * 
	 * @param listViviendasSolicitadas
	 *            List<ViviendaSolicitada>
	 */
	public void setListViviendasSolicitadas(
			List<ViviendaSolicitada> listViviendasSolicitadas) {
		this.listViviendasSolicitadas = listViviendasSolicitadas;
	}

	/**
	 * Intended only for logging and debugging.
	 * 
	 * Here, the contents of every main field are placed into the result.
	 * 
	 * @return String
	 */
	@Override
	public String toString() {
		StringBuilder result = new StringBuilder();
		result.append(this.getClass().getName()).append(" Object { ");
		// Clave compuesta
		result.append("[ numExpedientePlatea: ")
				.append(this.numExpedientePlatea).append(" ]");
		result.append(", [ idExpedientePlatea: ")
				.append(this.idExpedientePlatea).append(" ]");
		result.append(", [ fecSolicitud: ").append(this.fecSolicitud)
				.append(" ]");
		result.append(", [ desEntidadSolic: ").append(this.desEntidadSolic)
				.append(" ]");
		result.append(", [ desDptoSolic: ").append(this.desDptoSolic)
				.append(" ]");
		result.append(", [ desInterlocutor: ").append(this.desInterlocutor)
				.append(" ]");
		result.append(", [ estado: ").append(this.estado).append(" ]");
		result.append(", [ numViviendas: ").append(this.numViviendas)
				.append(" ]");
		result.append(", [ desDireccion: ").append(this.desDireccion)
				.append(" ]");
		result.append(", [ idM62r38t0: ").append(this.idM62r38t0).append(" ]");
		result.append(", [ dirEmail: ").append(this.dirEmail).append(" ]");
		result.append(", [ numTelefono: ").append(this.numTelefono)
				.append(" ]");
		result.append("}");
		return result.toString();
	}
}