package com.ejie.ab63.model.terceros;

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

import com.ejie.x38.serialization.JsonDateDeserializer;
import com.ejie.x38.serialization.JsonDateSerializer;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
 * DatosTerceros  
 * 
 *  
 */

public class DatosTerceros implements java.io.Serializable {

	private static final long serialVersionUID = 4507867311258651874L;

	private Integer idTercero;
	private String documento;
	// private Long idTipoDocumento;
	private TiposDocumento tiposDocumento;
	private String nombre;
	private String apellido1;
	private String apellido2;
	// private Long idSexo;
	private Sexo sexo;
	private Long telefono;
	private String email;
	private Integer idioma;
	private Integer tipoParticipante;
	private Date fechaRegistro;
	private String usuarioRegistro;
	private Date fechaUltmodificacion;
	private String usuarioUltmodificacion;

	private List<DatosDirecciones> listDatosDirecciones = new ArrayList<DatosDirecciones>();
	private List<RelExpTer> relExpTers = new ArrayList<RelExpTer>();
	private List<CanalesAviso> canalesAvisos = new ArrayList<CanalesAviso>();

	private String datosTerceros;

	private String nombreCompuesto;

	/**
	 * Method 'DatosTerceros'.
	 */
	public DatosTerceros() {

	}

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

	/**
	 * Method 'DatosTerceros'.
	 * 
	 * @param idTercero
	 *            Integer
	 * @param documento
	 *            String
	 * @param idTipoDocumento
	 *            Long
	 * @param nombre
	 *            String
	 * @param apellido1
	 *            String
	 * @param apellido2
	 *            String
	 * @param idSexo
	 *            Long
	 * @param telefono
	 *            Long
	 * @param email
	 *            String
	 * @param idioma
	 *            Integer
	 * @param tipoParticipante
	 *            Integer
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param fechaUltmodificacion
	 *            Date
	 * @param usuarioUltmodificacion
	 *            String
	 * @param datosTerceros
	 *            DatosTerceros
	 */
	public DatosTerceros(Integer idTercero, String documento, TiposDocumento tiposDocumento, String nombre,
			String apellido1, String apellido2, Sexo sexo, Long telefono, String email, Integer idioma,
			Integer tipoParticipante, Date fechaRegistro, String usuarioRegistro, Date fechaUltmodificacion,
			String usuarioUltmodificacion) {

		this.idTercero = idTercero;
		this.documento = documento;
		this.tiposDocumento = tiposDocumento;
		this.nombre = nombre;
		this.apellido1 = apellido1;
		this.apellido2 = apellido2;
		this.sexo = sexo;
		this.telefono = telefono;
		this.email = email;
		this.idioma = idioma;
		this.tipoParticipante = tipoParticipante;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.fechaUltmodificacion = fechaUltmodificacion;
		this.usuarioUltmodificacion = usuarioUltmodificacion;
		// aki
		String nombreCompuestoAux = "";
		if (nombre != null || apellido1 != null || apellido2 != null) {
			// nombreCompuestoAux = nombre;

			if (nombre != null) {
				nombreCompuestoAux = nombre;
			}

			if (apellido1 != null) {
				if (!"".equals(nombreCompuestoAux)) {
					nombreCompuestoAux = nombreCompuestoAux + " " + apellido1;
				} else {
					nombreCompuestoAux = apellido1;
				}
			}

			if (apellido2 != null) {

				if (!"".equals(nombreCompuestoAux)) {
					nombreCompuestoAux = nombreCompuestoAux + " " + apellido2;
				} else {
					nombreCompuestoAux = apellido2;
				}
			}
		}
		this.nombreCompuesto = nombreCompuestoAux;
	}

	/**
	 * Method 'DatosTerceros'.
	 * 
	 * @param idTercero
	 *            Integer
	 * @param documento
	 *            String
	 * @param idTipoDocumento
	 *            Long
	 * @param nombre
	 *            String
	 * @param apellido1
	 *            String
	 * @param apellido2
	 *            String
	 * @param idSexo
	 *            Long
	 * @param telefono
	 *            Long
	 * @param email
	 *            String
	 * @param idioma
	 *            Integer
	 * @param tipoParticipante
	 *            Integer
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param fechaUltmodificacion
	 *            Date
	 * @param usuarioUltmodificacion
	 *            String
	 * @param datosTerceros
	 *            DatosTerceros
	 * @param datosTerceroses
	 *            List<DatosTerceros>
	 * @param datosDireccioneses
	 *            List<DatosDirecciones>
	 * @param relExpTers
	 *            List<RelExpTer>
	 */
	public DatosTerceros(Integer idTercero, String documento, TiposDocumento tiposDocumento, String nombre,
			String apellido1, String apellido2, Sexo sexo, Long telefono, String email, Integer idioma,
			Integer tipoParticipante, Date fechaRegistro, String usuarioRegistro, Date fechaUltmodificacion,
			String usuarioUltmodificacion, List<DatosDirecciones> datosDireccioneses, List<RelExpTer> relExpTers) {

		this.idTercero = idTercero;

		this.documento = documento;
		this.tiposDocumento = tiposDocumento;
		this.nombre = nombre;
		this.apellido1 = apellido1;
		this.apellido2 = apellido2;
		this.sexo = sexo;
		this.telefono = telefono;
		this.email = email;
		this.idioma = idioma;
		this.tipoParticipante = tipoParticipante;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.fechaUltmodificacion = fechaUltmodificacion;
		this.usuarioUltmodificacion = usuarioUltmodificacion;

		this.listDatosDirecciones = datosDireccioneses;
		this.relExpTers = relExpTers;
	}

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

	public Integer getIdTercero() {
		return this.idTercero;
	}

	/**
	 * Method 'setIdTercero'.
	 *
	 * @param idTercero
	 *            Integer
	 * @return
	 */

	public void setIdTercero(Integer idTercero) {
		this.idTercero = idTercero;
	}

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

	public String getDocumento() {
		return this.documento;
	}

	/**
	 * Method 'setDocumento'.
	 *
	 * @param documento
	 *            String
	 * @return
	 */

	public void setDocumento(String documento) {
		this.documento = documento;
	}

	public TiposDocumento getTiposDocumento() {
		return tiposDocumento;
	}

	public void setTiposDocumento(TiposDocumento tiposDocumento) {
		this.tiposDocumento = tiposDocumento;
	}

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

	public String getNombre() {
		return this.nombre;
	}

	/**
	 * Method 'setNombre'.
	 *
	 * @param nombre
	 *            String
	 * @return
	 */

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

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

	public String getApellido1() {
		return this.apellido1;
	}

	/**
	 * Method 'setApellido1'.
	 *
	 * @param apellido1
	 *            String
	 * @return
	 */

	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}

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

	public String getApellido2() {
		return this.apellido2;
	}

	/**
	 * Method 'setApellido2'.
	 *
	 * @param apellido2
	 *            String
	 * @return
	 */

	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}

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

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

	public Long getTelefono() {
		return this.telefono;
	}

	public Sexo getSexo() {
		return sexo;
	}

	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}

	/**
	 * Method 'setTelefono'.
	 *
	 * @param telefono
	 *            Long
	 * @return
	 */

	public void setTelefono(Long telefono) {
		this.telefono = telefono;
	}

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

	public String getEmail() {
		return this.email;
	}

	/**
	 * Method 'setEmail'.
	 *
	 * @param email
	 *            String
	 * @return
	 */

	public void setEmail(String email) {
		this.email = email;
	}

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

	public Integer getIdioma() {
		return this.idioma;
	}

	/**
	 * Method 'setIdioma'.
	 *
	 * @param idioma
	 *            Integer
	 * @return
	 */

	public void setIdioma(Integer idioma) {
		this.idioma = idioma;
	}

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

	public Integer getTipoParticipante() {
		return this.tipoParticipante;
	}

	/**
	 * Method 'setTipoParticipante'.
	 *
	 * @param tipoParticipante
	 *            Integer
	 * @return
	 */

	public void setTipoParticipante(Integer tipoParticipante) {
		this.tipoParticipante = tipoParticipante;
	}

	/**
	 * 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;
	}

	/**
	 * Method 'getDatosDireccioneses'.
	 *
	 * @return List
	 */
	@JsonIgnore
	public List<DatosDirecciones> getListDatosDirecciones() {
		return this.listDatosDirecciones;
	}

	/**
	 * Method 'setDatosDireccioneses'.
	 *
	 * @param datosDireccioneses
	 *            List
	 * @return
	 */
	public void setListDatosDirecciones(List<DatosDirecciones> datosDireccioneses) {
		this.listDatosDirecciones = datosDireccioneses;
	}

	/**
	 * Method 'getRelExpTers'.
	 *
	 * @return List
	 */
	@JsonIgnore
	public List<RelExpTer> getRelExpTers() {
		return this.relExpTers;
	}

	/**
	 * Method 'setRelExpTers'.
	 *
	 * @param relExpTers
	 *            List
	 * @return
	 */
	public void setRelExpTers(List<RelExpTer> relExpTers) {
		this.relExpTers = relExpTers;
	}

	/**
	 * 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 { ");
		result.append(" [ idTercero: ").append(this.idTercero).append(" ]");
		result.append(", [ documento: ").append(this.documento).append(" ]");
		// result.append(", [ idTipoDocumento:
		// ").append(this.idTipoDocumento).append(" ]");
		result.append(", [ nombre: ").append(this.nombre).append(" ]");
		result.append(", [ apellido1: ").append(this.apellido1).append(" ]");
		result.append(", [ apellido2: ").append(this.apellido2).append(" ]");
		// result.append(", [ idSexo: ").append(this.idSexo).append(" ]");
		result.append(", [ telefono: ").append(this.telefono).append(" ]");
		result.append(", [ email: ").append(this.email).append(" ]");
		result.append(", [ idioma: ").append(this.idioma).append(" ]");
		result.append(", [ tipoParticipante: ").append(this.tipoParticipante).append(" ]");
		result.append(", [ fechaRegistro: ").append(this.fechaRegistro).append(" ]");
		result.append(", [ usuarioRegistro: ").append(this.usuarioRegistro).append(" ]");
		result.append(", [ fechaUltmodificacion: ").append(this.fechaUltmodificacion).append(" ]");
		result.append(", [ usuarioUltmodificacion: ").append(this.usuarioUltmodificacion).append(" ]");
		result.append("}");
		return result.toString();
	}

	/**
	 * @return the canalesAvisos
	 */
	public List<CanalesAviso> getCanalesAvisos() {
		return canalesAvisos;
	}

	/**
	 * @param canalesAvisos
	 *            the canalesAvisos to set
	 */
	public void setCanalesAvisos(List<CanalesAviso> canalesAvisos) {
		this.canalesAvisos = canalesAvisos;
	}

	/**
	 * @return the datosTerceros
	 */
	public String getDatosTerceros() {
		return datosTerceros;
	}

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

	public String getNombreCompuesto() {
		return nombreCompuesto;
	}

	public void setNombreCompuesto(String nombreCompuesto) {
		this.nombreCompuesto = nombreCompuesto;
	}
}
