package com.ejie.ab61.model.procedimientos;

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

import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ab61.model.expedientes.Expedientes;
import com.ejie.ab61.model.listados.Listados;
import com.ejie.ab61.model.plantillas.Plantillas;
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;

/**
 * Procedimientos  
 * 
 *  
 */

public class Procedimientos implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Integer idProcedimiento;
	private Direcciones direcciones;
	private Areas areas;
	private String codProcedureId;
	private String camposTituloExpediente;
	private Date fechaRegistro;
	private String usuarioRegistro;
	private Date fechaUltmodificacion;
	private String usuarioUltmodificacion;
	private String descripcionCastellano;
	private String descripcionEuskera;
	private boolean inspeccionable;
	private String plsql;
	private List<Expedientes> expedienteses = new ArrayList<Expedientes>();
	private List<Plantillas> plantillases = new ArrayList<Plantillas>();
	private List<Listados> listadoses = new ArrayList<Listados>();
	private Integer numeroExpedientes;
	private Aplicaciones aplicacion;
	private boolean expedienteInspeccion;
	private boolean expedienteSancion;
	private boolean expedienteDenuncia;

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

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

	/**
	 * Method 'Procedimientos'.
	 * 
	 * @param idProcedimiento
	 *            Integer
	 * @param codProcedureId
	 *            String
	 * @param folderId
	 *            String
	 * @param folderNumber
	 *            String
	 * @param camposTituloExpediente
	 *            String
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param direcciones
	 *            Direcciones
	 * @param areas
	 *            Areas
	 */
	public Procedimientos(Integer idProcedimiento, String descripcionCastellano, String descripcionEuskera,
			String codProcedureId, String camposTituloExpediente, Date fechaRegistro, String usuarioRegistro,
			Direcciones direcciones, Areas areas, boolean inspeccionable) {
		this.idProcedimiento = idProcedimiento;
		this.descripcionCastellano = descripcionCastellano;
		this.descripcionEuskera = descripcionEuskera;
		this.direcciones = direcciones;
		this.areas = areas;
		this.codProcedureId = codProcedureId;
		this.camposTituloExpediente = camposTituloExpediente;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.inspeccionable = inspeccionable;

	}

	public Procedimientos(Integer idProcedimiento, String codProcedureId, String descripcionCastellano,
			String descripcionEuskera) {
		super();
		this.idProcedimiento = idProcedimiento;
		this.codProcedureId = codProcedureId;
		this.descripcionCastellano = descripcionCastellano;
		this.descripcionEuskera = descripcionEuskera;
	}

	/**
	 * Method 'Procedimientos'.
	 * 
	 * @param idProcedimiento
	 *            Integer
	 * @param codProcedureId
	 *            String
	 * @param folderId
	 *            String
	 * @param folderNumber
	 *            String
	 * @param camposTituloExpediente
	 *            String
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param direcciones
	 *            Direcciones
	 * @param areas
	 *            Areas
	 */
	public Procedimientos(Integer idProcedimiento, String codProcedureId, String folderId, String folderNumber,
			String camposTituloExpediente, Date fechaRegistro, String usuarioRegistro, Direcciones direcciones,
			Areas areas, String descripcionCastellano, String descripcionEuskera) {
		this.idProcedimiento = idProcedimiento;
		this.direcciones = direcciones;
		this.areas = areas;
		this.codProcedureId = codProcedureId;
		this.camposTituloExpediente = camposTituloExpediente;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.descripcionCastellano = descripcionCastellano;
		this.descripcionEuskera = descripcionEuskera;
	}

	/**
	 * Method 'Procedimientos'.
	 * 
	 * @param idProcedimiento
	 *            Integer
	 * @param codProcedureId
	 *            String
	 * @param folderId
	 *            String
	 * @param folderNumber
	 *            String
	 * @param camposTituloExpediente
	 *            String
	 * @param fechaRegistro
	 *            Date
	 * @param usuarioRegistro
	 *            String
	 * @param direcciones
	 *            Direcciones
	 * @param areas
	 *            Areas
	 * @param expedienteses
	 *            List<Expedientes>
	 * @param plantillases
	 *            List<Plantillas>
	 * @param listadoses
	 *            List<Listados>
	 */
	public Procedimientos(Integer idProcedimiento, String codProcedureId, String folderId, String folderNumber,
			String camposTituloExpediente, Date fechaRegistro, String usuarioRegistro, Direcciones direcciones,
			Areas areas, List<Expedientes> expedienteses, List<Plantillas> plantillases, List<Listados> listadoses) {

		this.idProcedimiento = idProcedimiento;
		this.direcciones = direcciones;
		this.areas = areas;
		this.codProcedureId = codProcedureId;
		this.camposTituloExpediente = camposTituloExpediente;
		this.fechaRegistro = fechaRegistro;
		this.usuarioRegistro = usuarioRegistro;
		this.expedienteses = expedienteses;
		this.plantillases = plantillases;
		this.listadoses = listadoses;
	}

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

	public Integer getIdProcedimiento() {
		return this.idProcedimiento;
	}

	/**
	 * Method 'setIdProcedimiento'.
	 *
	 * @param idProcedimiento
	 *            Integer
	 * @return
	 */

	public void setIdProcedimiento(Integer idProcedimiento) {
		this.idProcedimiento = idProcedimiento;
	}

	/**
	 * Method 'getDirecciones'.
	 *
	 * @return Direcciones
	 */

	public Direcciones getDirecciones() {
		return this.direcciones;
	}

	/**
	 * Method 'setDirecciones'.
	 *
	 * @param direcciones
	 *            Direcciones
	 * @return
	 */

	public void setDirecciones(Direcciones direcciones) {
		this.direcciones = direcciones;
	}

	/**
	 * Method 'getAreas'.
	 *
	 * @return Areas
	 */

	public Areas getAreas() {
		return this.areas;
	}

	/**
	 * Method 'setAreas'.
	 *
	 * @param areas
	 *            Areas
	 * @return
	 */

	public void setAreas(Areas areas) {
		this.areas = areas;
	}

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

	public String getCodProcedureId() {
		return this.codProcedureId;
	}

	/**
	 * Method 'setCodProcedureId'.
	 *
	 * @param codProcedureId
	 *            String
	 * @return
	 */

	public void setCodProcedureId(String codProcedureId) {
		this.codProcedureId = codProcedureId;
	}

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

	public String getCamposTituloExpediente() {
		return this.camposTituloExpediente;
	}

	/**
	 * Method 'setCamposTituloExpediente'.
	 *
	 * @param camposTituloExpediente
	 *            String
	 * @return
	 */

	public void setCamposTituloExpediente(String camposTituloExpediente) {
		this.camposTituloExpediente = camposTituloExpediente;
	}

	/**
	 * 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 descripcionCastellano
	 */
	public String getDescripcionCastellano() {
		return descripcionCastellano;
	}

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

	/**
	 * @return the descripcionCastellano
	 */
	public String getDescripcionConCodProcedure() {
		String idioma = LocaleContextHolder.getLocale().getLanguage();
		if ("es".equalsIgnoreCase(idioma)) {
			return "(" + this.codProcedureId + ") : " + this.descripcionCastellano;
		} else {
			return "(" + this.codProcedureId + ") : " + this.descripcionEuskera;
		}
	}

	/**
	 * @return the descripciónEuskera
	 */
	public String getDescripcionEuskera() {
		return descripcionEuskera;
	}

	/**
	 * @param descripciónEuskera
	 *            the descripciónEuskera to set
	 */
	public void setDescripcionEuskera(String descripcionEuskera) {
		this.descripcionEuskera = descripcionEuskera;
	}

	/**
	 * Method 'getExpedienteses'.
	 *
	 * @return List
	 */
	@JsonIgnore
	public List<Expedientes> getExpedienteses() {
		return this.expedienteses;
	}

	/**
	 * Method 'setExpedienteses'.
	 *
	 * @param expedienteses
	 *            List
	 * @return
	 */
	public void setExpedienteses(List<Expedientes> expedienteses) {
		this.expedienteses = expedienteses;
	}

	/**
	 * Method 'getPlantillases'.
	 *
	 * @return List
	 */
	@JsonIgnore
	public List<Plantillas> getPlantillases() {
		return this.plantillases;
	}

	/**
	 * Method 'setPlantillases'.
	 *
	 * @param plantillases
	 *            List
	 * @return
	 */
	public void setPlantillases(List<Plantillas> plantillases) {
		this.plantillases = plantillases;
	}

	/**
	 * Method 'getListadoses'.
	 *
	 * @return List
	 */
	public List<Listados> getListadoses() {
		return this.listadoses;
	}

	/**
	 * Method 'setListadoses'.
	 *
	 * @param listadoses
	 *            List
	 * @return
	 */
	public void setListadoses(List<Listados> listadoses) {
		this.listadoses = listadoses;
	}

	/**
	 * @return the inspeccionable
	 */
	public boolean isInspeccionable() {
		return inspeccionable;
	}

	/**
	 * @param inspeccionable
	 *            the inspeccionable to set
	 */
	public void setInspeccionable(boolean inspeccionable) {
		this.inspeccionable = inspeccionable;
	}

	/**
	 * @return the plsql
	 */
	public String getPlsql() {
		return plsql;
	}

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

	/**
	 * @return the numeroExpedientes
	 */
	public Integer getNumeroExpedientes() {
		return numeroExpedientes;
	}

	/**
	 * @param numeroExpedientes
	 *            the numeroExpedientes to set
	 */
	public void setNumeroExpedientes(Integer numeroExpedientes) {
		this.numeroExpedientes = numeroExpedientes;
	}

	/**
	 * @return the aplicacion
	 */
	public Aplicaciones getAplicacion() {
		return aplicacion;
	}

	/**
	 * @param aplicacion
	 *            the aplicacion to set
	 */
	public void setAplicacion(Aplicaciones aplicacion) {
		this.aplicacion = aplicacion;
	}

	/**
	 * @return the expedienteInspeccion
	 */
	public boolean isExpedienteInspeccion() {
		return expedienteInspeccion;
	}

	/**
	 * @param expedienteInspeccion
	 *            the expedienteInspeccion to set
	 */
	public void setExpedienteInspeccion(boolean expedienteInspeccion) {
		this.expedienteInspeccion = expedienteInspeccion;
	}

	/**
	 * @return the expedienteSancion
	 */
	public boolean isExpedienteSancion() {
		return this.expedienteSancion;
	}

	/**
	 * @param expedienteSancion
	 *            the expedienteSancion to set
	 */
	public void setExpedienteSancion(boolean expedienteSancion) {
		this.expedienteSancion = expedienteSancion;
	}

	/**
	 * @return the expediente Denuncia
	 */
	public boolean isExpedienteDenuncia() {
		return this.expedienteDenuncia;
	}

	/**
	 * @param expedienteDenuncia
	 *            the expedienteDenuncia to set
	 */
	public void setExpedienteDenuncia(boolean expedienteDenuncia) {
		this.expedienteDenuncia = expedienteDenuncia;
	}

	/**
	 * 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(" [ idProcedimiento: ").append(this.idProcedimiento).append(" ]");
		result.append(", [ codProcedureId: ").append(this.codProcedureId).append(" ]");
		result.append(", [ camposTituloExpediente: ").append(this.camposTituloExpediente).append(" ]");
		result.append(", [ fechaRegistro: ").append(this.fechaRegistro).append(" ]");
		result.append(", [ usuarioRegistro: ").append(this.usuarioRegistro).append(" ]");
		result.append("}");
		return result.toString();
	}

}
