package com.ejie.m62fb.model;


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

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

import com.ejie.m62fb.utils.serializers.JsonBigDecimalDeserializer;
import com.ejie.m62fb.utils.serializers.JsonBigDecimalSerializer;
import com.ejie.m62fb.model.base.AbstractM62FBModel;
import com.ejie.m62fb.model.direccion.Direccion;
import com.ejie.m62fb.model.documento.Documento;
import com.ejie.m62fb.model.tipos.TipoElemento;
import com.ejie.m62fb.model.tipos.TipoSiNo;
import com.ejie.m62fb.model.tipos.TipoVinculacion;
import com.ejie.x38.serialization.JsonDateDeserializer;
import com.ejie.x38.serialization.JsonDateSerializer;

/**
 * M62r12t0- Table BD reference 
XXXX
 */

public class Elemento extends AbstractM62FBModel implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
            private BigDecimal ideElemento;
            //private M62a15t0 m62a15t0;
            private Direccion direccion;
            private Vivienda vivienda;
            private TipoElemento tipoElemento;

            private String codElemento;
            private String numFijoIbiElem;
            private BigDecimal superficieUtil;
           
			private TipoSiNo indUsoIndiv;
            private TipoVinculacion tipoVinculacion;

            private Date fecIniGestion;
            private Date fecFinGestion;
            private Long numOrganoGestor;
            private Date fecEnvOrgGestor;
            private String numExpediente;
            
            private RegistroPropiedad registroPropiedad;
            
            private Date fechaEscriturasSuelo;
            private String codRefCatastral;
            private InformacionSuelo informacionSuelo;
            //private List<Contrato> contratos = new ArrayList<Contrato>();
            private List<Documento> documentos = new ArrayList<Documento>();




			/**
			 * @return the ideElemento
			 */
			public BigDecimal getIdeElemento() {
				return ideElemento;
			}




			/**
			 * @param ideElemento the ideElemento to set
			 */
			public void setIdeElemento(BigDecimal ideElemento) {
				this.ideElemento = ideElemento;
			}




			/**
			 * @return the direccion
			 */
			public Direccion getDireccion() {
				return direccion;
			}




			/**
			 * @param direccion the direccion to set
			 */
			public void setDireccion(Direccion direccion) {
				this.direccion = direccion;
			}




			/**
			 * @return the vivienda
			 */
			public Vivienda getVivienda() {
				return vivienda;
			}




			/**
			 * @param vivienda the vivienda to set
			 */
			public void setVivienda(Vivienda vivienda) {
				this.vivienda = vivienda;
			}




			/**
			 * @return the tipoElemento
			 */
			public TipoElemento getTipoElemento() {
				return tipoElemento;
			}




			/**
			 * @param tipoElemento the tipoElemento to set
			 */
			public void setTipoElemento(TipoElemento tipoElemento) {
				this.tipoElemento = tipoElemento;
			}




			/**
			 * @return the codElemento
			 */
			public String getCodElemento() {
				return codElemento;
			}




			/**
			 * @param codElemento the codElemento to set
			 */
			public void setCodElemento(String codElemento) {
				this.codElemento = codElemento;
			}




			/**
			 * @return the numFijoIbiElem
			 */
			public String getNumFijoIbiElem() {
				return numFijoIbiElem;
			}




			/**
			 * @param numFijoIbiElem the numFijoIbiElem to set
			 */
			public void setNumFijoIbiElem(String numFijoIbiElem) {
				this.numFijoIbiElem = numFijoIbiElem;
			}




			/**
			 * @return the superficieUtil
			 */
			@JsonSerialize(using = JsonBigDecimalSerializer.class)
			public BigDecimal getSuperficieUtil() {
				return superficieUtil;
			}




			/**
			 * @param superficieUtil the superficieUtil to set
			 */
			@JsonDeserialize(using = JsonBigDecimalDeserializer.class)
			public void setSuperficieUtil(BigDecimal superficieUtil) {
				this.superficieUtil = superficieUtil;
			}




			/**
			 * @return the indUsoIndiv
			 */
			public TipoSiNo getIndUsoIndiv() {
				return indUsoIndiv;
			}




			/**
			 * @param indUsoIndiv the indUsoIndiv to set
			 */
			public void setIndUsoIndiv(TipoSiNo indUsoIndiv) {
				this.indUsoIndiv = indUsoIndiv;
			}




			/**
			 * @return the tipoVinculacion
			 */
			public TipoVinculacion getTipoVinculacion() {
				return tipoVinculacion;
			}




			/**
			 * @param tipoVinculacion the tipoVinculacion to set
			 */
			public void setTipoVinculacion(TipoVinculacion tipoVinculacion) {
				this.tipoVinculacion = tipoVinculacion;
			}




			/**
			 * @return the fecIniGestion
			 */
			@JsonSerialize(using = JsonDateSerializer.class)
			public Date getFecIniGestion() {
				return fecIniGestion;
			}




			/**
			 * @param fecIniGestion the fecIniGestion to set
			 */
			@JsonDeserialize(using = JsonDateDeserializer.class)
			public void setFecIniGestion(Date fecIniGestion) {
				this.fecIniGestion = fecIniGestion;
			}




			/**
			 * @return the fecFinGestion
			 */
			@JsonSerialize(using = JsonDateSerializer.class)
			public Date getFecFinGestion() {
				return fecFinGestion;
			}




			/**
			 * @param fecFinGestion the fecFinGestion to set
			 */
			@JsonDeserialize(using = JsonDateDeserializer.class)
			public void setFecFinGestion(Date fecFinGestion) {
				this.fecFinGestion = fecFinGestion;
			}




			/**
			 * @return the numOrganoGestor
			 */
			public Long getNumOrganoGestor() {
				return numOrganoGestor;
			}




			/**
			 * @param numOrganoGestor the numOrganoGestor to set
			 */
			public void setNumOrganoGestor(Long numOrganoGestor) {
				this.numOrganoGestor = numOrganoGestor;
			}




			/**
			 * @return the fecEnvOrgGestor
			 */
			@JsonSerialize(using = JsonDateSerializer.class)
			public Date getFecEnvOrgGestor() {
				return fecEnvOrgGestor;
			}




			/**
			 * @param fecEnvOrgGestor the fecEnvOrgGestor to set
			 */
			@JsonDeserialize(using = JsonDateDeserializer.class)
			public void setFecEnvOrgGestor(Date fecEnvOrgGestor) {
				this.fecEnvOrgGestor = fecEnvOrgGestor;
			}




			/**
			 * @return the numExpediente
			 */
			public String getNumExpediente() {
				return numExpediente!=null?numExpediente.toUpperCase():null;
			}




			/**
			 * @param numExpediente the numExpediente to set
			 */
			public void setNumExpediente(String numExpediente) {
				this.numExpediente = numExpediente!=null?numExpediente.toUpperCase():null;
			}




			/**
			 * @return the registroPropiedad
			 */
			public RegistroPropiedad getRegistroPropiedad() {
				return registroPropiedad;
			}




			/**
			 * @param registroPropiedad the registroPropiedad to set
			 */
			public void setRegistroPropiedad(RegistroPropiedad registroPropiedad) {
				this.registroPropiedad = registroPropiedad;
			}




			/**
			 * @return the fechaEscriturasSuelo
			 */
			@JsonSerialize(using = JsonDateSerializer.class)
			public Date getFechaEscriturasSuelo() {
				return fechaEscriturasSuelo;
			}




			/**
			 * @param fechaEscriturasSuelo the fechaEscriturasSuelo to set
			 */
			@JsonDeserialize(using = JsonDateDeserializer.class)
			public void setFechaEscriturasSuelo(Date fechaEscriturasSuelo) {
				this.fechaEscriturasSuelo = fechaEscriturasSuelo;
			}




			/**
			 * @return the codRefCatastral
			 */
			public String getCodRefCatastral() {
				return codRefCatastral;
			}




			/**
			 * @param codRefCatastral the codRefCatastral to set
			 */
			public void setCodRefCatastral(String codRefCatastral) {
				this.codRefCatastral = codRefCatastral;
			}




			/**
			 * @return the informacionSuelo
			 */
			public InformacionSuelo getInformacionSuelo() {
				return informacionSuelo;
			}




			/**
			 * @param informacionSuelo the informacionSuelo to set
			 */
			public void setInformacionSuelo(InformacionSuelo informacionSuelo) {
				this.informacionSuelo = informacionSuelo;
			}




			/**
			 * @return the documentos
			 */
			public List<Documento> getDocumentos() {
				return documentos;
			}




			/**
			 * @param documentos the documentos to set
			 */
			public void setDocumentos(List<Documento> documentos) {
				this.documentos = documentos;
			}


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


	
    
    /** 
     * Method 'Elemento'.
     * @param ideElemento Integer
     */    
     public Elemento(BigDecimal ideElemento) {
         this.ideElemento = ideElemento;
	}


     public Elemento(BigDecimal ideElemento, Direccion direccion,
				Vivienda vivienda, TipoElemento tipoElemento,
				String codElemento, String numFijoIbiElem,
				BigDecimal superficieUtil, TipoSiNo indUsoIndiv,
				TipoVinculacion tipoVinculacion, Date fecIniGestion,
				Date fecFinGestion, Long numOrganoGestor,
				Date fecEnvOrgGestor, String numExpediente,
				RegistroPropiedad registroPropiedad,
				Date fechaEscriturasSuelo, String codRefCatastral,
				List<Documento> documentos) {
			super();
			this.ideElemento = ideElemento;
			this.direccion = direccion;
			this.vivienda = vivienda;
			this.tipoElemento = tipoElemento;
			this.codElemento = codElemento;
			this.numFijoIbiElem = numFijoIbiElem;
			this.superficieUtil = superficieUtil;
			this.indUsoIndiv = indUsoIndiv;
			this.tipoVinculacion = tipoVinculacion;
			this.fecIniGestion = fecIniGestion;
			this.fecFinGestion = fecFinGestion;
			this.numOrganoGestor = numOrganoGestor;
			this.fecEnvOrgGestor = fecEnvOrgGestor;
			this.numExpediente = numExpediente!=null?numExpediente.toUpperCase():null;
			this.registroPropiedad = registroPropiedad;
			this.fechaEscriturasSuelo = fechaEscriturasSuelo;
			this.codRefCatastral = codRefCatastral;
			this.documentos = documentos;
		}

     /**
 	 * 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 builder = new StringBuilder();
 		builder.append("Elemento [ideElemento=");
 		builder.append(ideElemento);
 		//builder.append(", ejercicio=");
 		//builder.append(ejercicio);
		builder.append("]");
		return builder.toString();
 	}


}

