package com.ejie.ab63.model.terceros;

import java.util.Date;

import com.ejie.ab63.comun.Constantes;
import com.ejie.x38.serialization.JsonDateDeserializer;
import com.ejie.x38.serialization.JsonDateSerializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
 * DatosDirecciones  
 * 
 *  
 */

public class DatosDirecciones implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Integer idDireccion;
	private DatosTerceros datosTerceros;
	private TiposDireccion tiposDireccion;
	private String direccion;
	private String numero;
	private String escalera;
	private String piso;
	private String letra;
	private String codigoPostal;
	private Long idProvincia;
	private Long idMunicipio;
	private Long idLocalidad;
	private Date fechaRegistro;
	private String usuarioRegistro;
	private Date fechaUltmodificacion;
	private String usuarioUltmodificacion;
	private String establecimiento;
	private String identificadorEstablecimiento;

	private String paisdso;
	private String provinciadso;
	private String municipiodso;
	private String localidaddso;

	private Long idPais;
	private String descProvinciaExtranjera;
	private String descCiudadExtranjera;

	private String direccionCompuesta;

	private String numeroExtranjeraAgencia;
	private String pisoExtranjeraAgencia;
	private String letraExtranjeraAgencia;
	private String codigoPostalExtranjeraAgencia;
	private Long idPaisExtranjeraAgencia;

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

	/**
	 * Method 'DatosDirecciones'.
	 * 
	 * @param idDireccion
	 *            Integer
	 */
	public DatosDirecciones(Integer idDireccion) {
		this.idDireccion = idDireccion;
	}

	/**
	 * Method 'DatosDirecciones'.
	 * 
	 * @param idDireccion
	 *            Integer
	 * @param direccion
	 *            String
	 * @param numero
	 *            String
	 * @param escalera
	 *            String
	 * @param piso
	 *            String
	 * @param letra
	 *            String
	 * @param codigoPostal
	 *            String
	 * @param idProvincia
	 *            Long
	 * @param idMunicipio
	 *            Long
	 * @param idLocalidad
	 *            Long
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param fechaUltmodificacion
	 *            Date
	 * @param usuarioUltmodificacion
	 *            String
	 * @param datosTerceros
	 *            DatosTerceros
	 * @param tiposDireccion
	 *            TiposDireccion
	 */
	public DatosDirecciones(Integer idDireccion, String establecimiento, String direccion, String numero,
			String escalera, String piso, String letra, String codigoPostal, Long idPais, Long idProvincia,
			Long idMunicipio, Long idLocalidad, String descProvinciaExtranjera, String descCiudadExtranjera,
			String identificadorEstablecimiento, Date fechaRegistro, String usuarioRegistro, Date fechaUltmodificacion,
			String usuarioUltmodificacion, DatosTerceros datosTerceros, TiposDireccion tiposDireccion,
			String municipiodso) {

		this.idDireccion = idDireccion;
		this.establecimiento = establecimiento;
		this.datosTerceros = datosTerceros;
		this.tiposDireccion = tiposDireccion;
		this.direccion = direccion;
		this.numero = numero;
		this.escalera = escalera;
		this.piso = piso;
		this.letra = letra;
		this.codigoPostal = codigoPostal;
		this.idPais = idPais;
		this.idProvincia = idProvincia;
		this.idMunicipio = idMunicipio;
		this.idLocalidad = idLocalidad;
		this.identificadorEstablecimiento = identificadorEstablecimiento;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.fechaUltmodificacion = fechaUltmodificacion;
		this.usuarioUltmodificacion = usuarioUltmodificacion;
		this.descProvinciaExtranjera = descProvinciaExtranjera;
		this.descCiudadExtranjera = descCiudadExtranjera;
		this.municipiodso = municipiodso;
		// aki snts
		String direccionAux = "";
		if (direccion != null) {
			direccionAux = direccion;
		}

		if (numero != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + " " + numero;
			} else {
				direccionAux = numero;
			}
		}

		if (escalera != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + ", " + escalera;
			} else {
				direccionAux = escalera;
			}
		}

		if (piso != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + ", " + piso;
			} else {
				direccionAux = piso;
			}
		}

		if (letra != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + ", " + letra;
			} else {
				direccionAux = letra;
			}
		}

		if (municipiodso != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + " (" + municipiodso + ")";
			} else {
				direccionAux = municipiodso;
			}
		}

		this.direccionCompuesta = direccionAux;
	}

	/**
	 * Method 'DatosDirecciones'.
	 * 
	 * @param idDireccion
	 *            Integer
	 * @param direccion
	 *            String
	 * @param numero
	 *            String
	 * @param escalera
	 *            String
	 * @param piso
	 *            String
	 * @param letra
	 *            String
	 * @param codigoPostal
	 *            String
	 * @param idProvincia
	 *            Long
	 * @param idMunicipio
	 *            Long
	 * @param idLocalidad
	 *            Long
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param fechaUltmodificacion
	 *            Date
	 * @param usuarioUltmodificacion
	 *            String
	 * @param datosTerceros
	 *            DatosTerceros
	 * @param tiposDireccion
	 *            TiposDireccion
	 */
	public DatosDirecciones(Integer idDireccion, String establecimiento, String direccion, String numero,
			String escalera, String piso, String letra, String codigoPostal, Long idPais, Long idProvincia,
			Long idMunicipio, Long idLocalidad, String descProvinciaExtranjera, String descCiudadExtranjera,
			String identificadorEstablecimiento, Date fechaRegistro, String usuarioRegistro, Date fechaUltmodificacion,
			String usuarioUltmodificacion, DatosTerceros datosTerceros, TiposDireccion tiposDireccion, String paisDso,
			String provinciadso, String municipiodso, String localidaddso) {

		this.idDireccion = idDireccion;
		this.establecimiento = establecimiento;
		this.datosTerceros = datosTerceros;
		this.tiposDireccion = tiposDireccion;
		this.direccion = direccion;
		this.numero = numero;
		this.escalera = escalera;
		this.piso = piso;
		this.letra = letra;
		this.codigoPostal = codigoPostal;
		this.idPais = idPais;
		this.idProvincia = idProvincia;
		this.idMunicipio = idMunicipio;
		this.idLocalidad = idLocalidad;
		this.identificadorEstablecimiento = identificadorEstablecimiento;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.fechaUltmodificacion = fechaUltmodificacion;
		this.usuarioUltmodificacion = usuarioUltmodificacion;
		this.descProvinciaExtranjera = descProvinciaExtranjera;
		this.descCiudadExtranjera = descCiudadExtranjera;
		this.provinciadso = provinciadso;
		this.municipiodso = municipiodso;
		this.localidaddso = localidaddso;
		this.paisdso = paisDso;
		// aki snts
		String direccionAux = "";
		if (direccion != null) {
			direccionAux = direccion;
		}

		if (numero != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + " " + numero;
			} else {
				direccionAux = numero;
			}
		}

		if (escalera != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + ", " + escalera;
			} else {
				direccionAux = escalera;
			}
		}

		if (piso != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + ", " + piso;
			} else {
				direccionAux = piso;
			}
		}

		if (letra != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + ", " + letra;
			} else {
				direccionAux = letra;
			}
		}

		if (municipiodso != null) {
			if (!"".equals(direccionAux)) {
				direccionAux = direccionAux + " (" + municipiodso + ")";
			} else {
				direccionAux = municipiodso;
			}
		}

		this.direccionCompuesta = direccionAux;
	}

	/**
	 * Method 'getIdDireccion'.
	 *
	 * @return Integer
	 */

	public Integer getIdDireccion() {
		return this.idDireccion;
	}

	/**
	 * Method 'setIdDireccion'.
	 *
	 * @param idDireccion
	 *            Integer
	 * @return
	 */

	public void setIdDireccion(Integer idDireccion) {
		this.idDireccion = idDireccion;
	}

	/**
	 * Method 'getDatosTerceros'.
	 *
	 * @return DatosTerceros
	 */

	public DatosTerceros getDatosTerceros() {
		return this.datosTerceros;
	}

	/**
	 * Method 'setDatosTerceros'.
	 *
	 * @param datosTerceros
	 *            DatosTerceros
	 * @return
	 */

	public void setDatosTerceros(DatosTerceros datosTerceros) {
		this.datosTerceros = datosTerceros;
	}

	/**
	 * Method 'getTiposDireccion'.
	 *
	 * @return TiposDireccion
	 */

	public TiposDireccion getTiposDireccion() {
		return this.tiposDireccion;
	}

	/**
	 * Method 'setTiposDireccion'.
	 *
	 * @param tiposDireccion
	 *            TiposDireccion
	 * @return
	 */

	public void setTiposDireccion(TiposDireccion tiposDireccion) {
		this.tiposDireccion = tiposDireccion;
	}

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

	public String getDireccion() {
		return this.direccion;
	}

	/**
	 * Method 'setDireccion'.
	 *
	 * @param direccion
	 *            String
	 * @return
	 */

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

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

	public String getNumero() {
		return this.numero;
	}

	/**
	 * Method 'setNumero'.
	 *
	 * @param numero
	 *            String
	 * @return
	 */

	public void setNumero(String numero) {
		this.numero = numero;
	}

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

	public String getEscalera() {
		return this.escalera;
	}

	/**
	 * Method 'setEscalera'.
	 *
	 * @param escalera
	 *            String
	 * @return
	 */

	public void setEscalera(String escalera) {
		this.escalera = escalera;
	}

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

	public String getPiso() {
		return this.piso;
	}

	/**
	 * Method 'setPiso'.
	 *
	 * @param piso
	 *            String
	 * @return
	 */

	public void setPiso(String piso) {
		this.piso = piso;
	}

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

	public String getLetra() {
		return this.letra;
	}

	/**
	 * Method 'setLetra'.
	 *
	 * @param letra
	 *            String
	 * @return
	 */

	public void setLetra(String letra) {
		this.letra = letra;
	}

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

	public String getCodigoPostal() {
		return this.codigoPostal;
	}

	/**
	 * Method 'setCodigoPostal'.
	 *
	 * @param codigoPostal
	 *            String
	 * @return
	 */

	public void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}

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

	public Long getIdProvincia() {
		return this.idProvincia;
	}

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

	public String getIdProvinciaPad() {
		if (this.idProvincia == null || this.idProvincia == 0)
			return "";
		return String.format("%02d", this.idProvincia);
	}

	public String getIdLocalidadPad() {
		if (this.idLocalidad == null || this.idLocalidad == 0)
			return "";
		return String.format("%015d", this.idLocalidad);
	}

	/**
	 * Method 'setIdProvincia'.
	 *
	 * @param idProvincia
	 *            Long
	 * @return
	 */

	public void setIdProvincia(Long idProvincia) {
		this.idProvincia = idProvincia;
	}

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

	public Long getIdMunicipio() {
		return this.idMunicipio;
	}

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

	public String getIdMunicipioPad() {
		if (this.idMunicipio == null || this.idMunicipio == 0)
			return "";
		return String.format("%03d", this.idMunicipio);
	}

	/**
	 * Method 'setIdMunicipio'.
	 *
	 * @param idMunicipio
	 *            Long
	 * @return
	 */

	public void setIdMunicipio(Long idMunicipio) {
		this.idMunicipio = idMunicipio;
	}

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

	public Long getIdLocalidad() {
		return this.idLocalidad;
	}

	/**
	 * Method 'setIdLocalidad'.
	 *
	 * @param idLocalidad
	 *            Long
	 * @return
	 */

	public void setIdLocalidad(Long idLocalidad) {
		this.idLocalidad = idLocalidad;
	}

	/**
	 * Method 'getFechaRegistro'.
	 *
	 * @return java.util.Date
	 */

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

	/**
	 * Method 'setFechaRegistro'.
	 *
	 * @param fechaRegistro
	 *            java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFechaRegistro(Date fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

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

	public String getUsuarioRegistro() {
		return this.usuarioRegistro;
	}

	/**
	 * Method 'setUsuarioRegistro'.
	 *
	 * @param usuarioRegistro
	 *            String
	 * @return
	 */

	public void setUsuarioRegistro(String usuarioRegistro) {
		this.usuarioRegistro = usuarioRegistro;
	}

	/**
	 * Method 'getFechaUltmodificacion'.
	 *
	 * @return java.util.Date
	 */

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

	/**
	 * Method 'setFechaUltmodificacion'.
	 *
	 * @param fechaUltmodificacion
	 *            java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFechaUltmodificacion(Date fechaUltmodificacion) {
		this.fechaUltmodificacion = fechaUltmodificacion;
	}

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

	public String getUsuarioUltmodificacion() {
		return this.usuarioUltmodificacion;
	}

	/**
	 * Method 'setUsuarioUltmodificacion'.
	 *
	 * @param usuarioUltmodificacion
	 *            String
	 * @return
	 */

	public void setUsuarioUltmodificacion(String usuarioUltmodificacion) {
		this.usuarioUltmodificacion = usuarioUltmodificacion;
	}

	/**
	 * @return the establecimiento
	 */
	public String getEstablecimiento() {
		return establecimiento;
	}

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

	/**
	 * @return the identificadorEstablecimiento
	 */
	public String getIdentificadorEstablecimiento() {
		return identificadorEstablecimiento;
	}

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

	public String getPaisdso() {
		return paisdso;
	}

	public void setPaisdso(String paisdso) {
		this.paisdso = paisdso;
	}

	public String getProvinciadso() {
		return provinciadso;
	}

	public void setProvinciadso(String provinciadso) {
		this.provinciadso = provinciadso;
	}

	public String getMunicipiodso() {
		return municipiodso;
	}

	public void setMunicipiodso(String municipiodso) {
		this.municipiodso = municipiodso;
	}

	public String getLocalidaddso() {
		return localidaddso;
	}

	public void setLocalidaddso(String localidaddso) {
		this.localidaddso = localidaddso;
	}

	public void setTipoEstablecimiento() {
		this.tiposDireccion = new TiposDireccion((long) Constantes.ID_TIPO_DIRECCION_ESTABLECIMIENTO_EXPEDIENTE);
	}

	public Long getIdPais() {
		return idPais;
	}

	public String getIdPaisPad() {
		if (this.idPais == null || this.idPais == 0)
			return "";
		return String.format("%03d", this.idPais);
	}

	public void setIdPais(Long idPais) {
		this.idPais = idPais;
	}

	public String getDescProvinciaExtranjera() {
		return descProvinciaExtranjera;
	}

	public void setDescProvinciaExtranjera(String descProvinciaExtranjera) {
		this.descProvinciaExtranjera = descProvinciaExtranjera;
	}

	public String getDescCiudadExtranjera() {
		return descCiudadExtranjera;
	}

	public void setDescCiudadExtranjera(String descCiudadExtranjera) {
		this.descCiudadExtranjera = descCiudadExtranjera;
	}

	public String getDireccionCompuesta() {
		return direccionCompuesta;
	}

	public void setDireccionCompuesta(String direccionCompuesta) {
		this.direccionCompuesta = direccionCompuesta;
	}

	public String getNumeroExtranjeraAgencia() {
		return numero;
	}

	public void setNumeroExtranjeraAgencia(String numeroExtranjeraAgencia) {
		this.numero = numeroExtranjeraAgencia;
	}

	public String getPisoExtranjeraAgencia() {
		return piso;
	}

	public void setPisoExtranjeraAgencia(String pisoExtranjeraAgencia) {
		this.piso = pisoExtranjeraAgencia;
	}

	public String getLetraExtranjeraAgencia() {
		return letra;
	}

	public void setLetraExtranjeraAgencia(String letraExtranjeraAgencia) {
		this.letra = letraExtranjeraAgencia;
	}

	public String getCodigoPostalExtranjeraAgencia() {
		return codigoPostal;
	}

	public void setCodigoPostalExtranjeraAgencia(String codigoPostalExtranjeraAgencia) {
		this.codigoPostal = codigoPostalExtranjeraAgencia;
	}

	public Long getIdPaisExtranjeraAgencia() {
		return idPais;
	}

	public void setIdPaisExtranjeraAgencia(Long idPaisExtranjeraAgencia) {
		this.idPais = idPaisExtranjeraAgencia;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "DatosDirecciones [idDireccion=" + idDireccion + ", datosTerceros=" + datosTerceros + ", tiposDireccion="
				+ tiposDireccion + ", direccion=" + direccion + ", numero=" + numero + ", escalera=" + escalera
				+ ", piso=" + piso + ", letra=" + letra + ", codigoPostal=" + codigoPostal + ", idProvincia="
				+ idProvincia + ", idMunicipio=" + idMunicipio + ", idLocalidad=" + idLocalidad + ", fechaRegistro="
				+ fechaRegistro + ", usuarioRegistro=" + usuarioRegistro + ", fechaUltmodificacion="
				+ fechaUltmodificacion + ", usuarioUltmodificacion=" + usuarioUltmodificacion + ", establecimiento="
				+ establecimiento + "]";
	}

}
