package com.ejie.ab39a.model;

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

import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ab39a.util.Constantes;
import com.ejie.x38.serialization.JsonDateSerializer;
import com.ejie.x38.util.Constants;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
 * PlanesEstrategicos.
 * 
 *  
 */

public class PlanesEstrategicos implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Integer codplane;
	private Entidades entidad;
	private Long anyoinicio;
	private Long anyofin;
	private Long indiceObligat;
	private Long nivelCumplimientoReqeus;
	private String nombre;
	private String nombreeus;
	private Integer solitudTxostena;
	private Long porcentajeBiling;
	private Integer activo;
	private Date fechaAlta;
	private Integer codVersion;

	// Atributo para controlar el tipo de entidad del usuario
	private String tipoEntidad;

	private List<Entidades> entidades = new ArrayList<Entidades>();

	// Atributo necesario para controlar la query a realizar en el filtro
	private String usuarioConectado;

	/**
	 * Method 'PlanesEstrategicos'.
	 */
	public PlanesEstrategicos() {
		super();
	}

	/**
	 * Method 'PlanesEstrategicos'.
	 * 
	 * @param codplane
	 *            Integer codigo plan
	 */
	public PlanesEstrategicos(Integer codplane) {
		super();
		this.codplane = codplane;
	}

	/**
	 * Method 'PlanesEstrategicos'.
	 * 
	 * @param codplane
	 *            Integer
	 * @param codentidad
	 *            Integer
	 * @param codplanificacion
	 *            Long
	 * @param anyoinicio
	 *            Long
	 * @param anyofin
	 *            Long
	 * @param indiceObligat
	 *            Long
	 * @param nivelCumplimientoReqeus
	 *            Long
	 * @param fechaAceptacionPlan
	 *            Date
	 * @param nombre
	 *            String
	 * @param nombreeus
	 *            String
	 * @param solitudTxostena
	 *            Integer
	 */
	public PlanesEstrategicos(Integer codplane, Entidades entidad,  Long anyoinicio,
			Long anyofin, Long indiceObligat, Long nivelCumplimientoReqeus, String nombre,
			String nombreeus, Integer solitudTxostena, Integer codVersion, Long porcentajeBilin, Integer activo,
			Date fechaAlta, String tipoEntidad) {
		super();

		this.codplane = codplane;
		this.entidad = entidad;
		this.anyoinicio = anyoinicio;
		this.anyofin = anyofin;
		this.indiceObligat = indiceObligat;
		this.nivelCumplimientoReqeus = nivelCumplimientoReqeus;
		this.nombre = nombre;
		this.nombreeus = nombreeus;
		this.solitudTxostena = solitudTxostena;
		this.porcentajeBiling = porcentajeBilin;
		this.activo = activo;
		this.fechaAlta = fechaAlta;
		this.codVersion = codVersion;
		this.tipoEntidad = tipoEntidad;
	}

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

	public Integer getCodplane() {
		return this.codplane;
	}

	/**
	 * Method 'setCodplane'.
	 *
	 * @param codplane
	 *            Integer
	 */

	public void setCodplane(Integer codplane) {
		this.codplane = codplane;
	}

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

	public Entidades getEntidad() {
		return this.entidad;
	}

	/**
	 * Method 'setCodentidad'.
	 *
	 * @param codentidad
	 *            Integer
	 */

	public void setEntidad(Entidades entidad) {
		this.entidad = entidad;
	}


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

	public Long getAnyoinicio() {
		return this.anyoinicio;
	}

	/**
	 * Method 'setAnyoinicio'.
	 *
	 * @param anyoinicio
	 *            Long
	 */

	public void setAnyoinicio(Long anyoinicio) {
		this.anyoinicio = anyoinicio;
	}

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

	public Long getAnyofin() {
		return this.anyofin;
	}

	/**
	 * Method 'setAnyofin'.
	 *
	 * @param anyofin
	 *            Long
	 */

	public void setAnyofin(Long anyofin) {
		this.anyofin = anyofin;
	}

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

	public Long getIndiceObligat() {
		return this.indiceObligat;
	}

	/**
	 * Method 'setIndiceObligat'.
	 *
	 * @param indiceObligat
	 *            Long
	 */

	public void setIndiceObligat(Long indiceObligat) {
		this.indiceObligat = indiceObligat;
	}

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

	public Long getNivelCumplimientoReqeus() {
		return this.nivelCumplimientoReqeus;
	}

	/**
	 * Method 'setNivelCumplimientoReqeus'.
	 *
	 * @param nivelCumplimientoReqeus
	 *            Long
	 */

	public void setNivelCumplimientoReqeus(Long nivelCumplimientoReqeus) {
		this.nivelCumplimientoReqeus = nivelCumplimientoReqeus;
	}

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

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

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

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

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

	public String getNombreeus() {
		return this.nombreeus;
	}

	/**
	 * Method 'setNombreeus'.
	 *
	 * @param nombreeus
	 *            String
	 */

	public void setNombreeus(String nombreeus) {
		this.nombreeus = nombreeus;
	}

	/**
	 * Method 'getNombreIdioma'.
	 * 
	 * @return String nombre en el idioma en qle se haya conectado el usuario
	 */
	public String getNombreIdiomaAnyo() {
		StringBuilder desc = new StringBuilder(Constantes.VACIO);
		if (Constants.EUSKARA.equals(LocaleContextHolder.getLocale().getLanguage())) {
			desc.append(this.getNombreeus());
		} else {
			desc.append(this.getNombre());
		}
		if (this.getAnyoinicio() != null) {
			desc.append(Constantes.ESPACIO);
			desc.append(this.getAnyoinicio());
		}
		if (this.getAnyofin() != null) {
			desc.append(Constantes.SEPARADOR);
			desc.append(this.getAnyofin());
		}
		return desc.toString();
	}

	/**
	 * Method 'getSolitudTxostena'
	 * 
	 * @return Integer
	 */

	public Integer getSolitudTxostena() {
		return solitudTxostena;
	}

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

	/**
	 * Method 'getCodVersion'
	 * 
	 * @return Integer
	 */
	public Integer getCodVersion() {
		return codVersion;
	}

	/**
	 * Method 'setCodVersion'
	 * 
	 * @param solitudTxostena
	 */
	public void setCodVersion(Integer codVersion) {
		this.codVersion = codVersion;
	}

	/**
	 * Method 'getActivo'
	 * 
	 * @param Integer
	 *            activo
	 */
	public Integer getActivo() {
		return activo;
	}

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

	/**
	 * Method 'getFechaAlta'
	 * 
	 * @param Date
	 *            fechaAlta
	 */
	public Date getFechaAlta() {
		return fechaAlta;
	}

	/**
	 * Method 'setFechaAlta'
	 * 
	 * @param fechaAlta
	 */
	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	public String getTipoUsuario() {
		return tipoEntidad;
	}

	public void setTipoUsuario(String tipoUsuario) {
		this.tipoEntidad = tipoUsuario;
	}

	/**
	 * Method 'getPorcentajeBiling'
	 * 
	 * @return Long
	 */
	public Long getPorcentajeBiling() {
		return porcentajeBiling;
	}

	/**
	 * Method 'setPorcentajeBiling'
	 * 
	 * @param porcentajeBiling
	 *            Long
	 */
	public void setPorcentajeBiling(Long porcentajeBiling) {
		this.porcentajeBiling = porcentajeBiling;
	}

	/**
	 * @return the entidades
	 */
	public List<Entidades> getEntidades() {
		return entidades;
	}

	/**
	 * @param entidades
	 *            the entidades to set
	 */
	public void setEntidades(List<Entidades> entidades) {
		this.entidades = entidades;
	}

	
	/**
	 * 
	 * /** 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(" [ codplane: ").append(this.codplane).append(" ]");
		result.append(", [ codentidad: ").append(this.entidad).append(" ]");
		result.append(", [ anyoinicio: ").append(this.anyoinicio).append(" ]");
		result.append(", [ anyofin: ").append(this.anyofin).append(" ]");
		result.append(", [ indiceObligat: ").append(this.indiceObligat).append(" ]");
		result.append(", [ nivelCumplimientoReqeus: ").append(this.nivelCumplimientoReqeus).append(" ]");
		result.append(", [ nombre: ").append(this.nombre).append(" ]");
		result.append(", [ nombreeus: ").append(this.nombreeus).append(" ]");
		result.append(", [ porcentajeBiling: ").append(this.porcentajeBiling).append(" ]");
		result.append("}");
		return result.toString();
	}

}
