package com.ejie.ad74a.model;

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

import com.ejie.ad74a.util.comun.UtilSeguridad;
import com.ejie.ad74a.util.constantes.TipoTramiteExpediente;
import com.ejie.x38.serialization.JsonDateDeserializer;
import com.ejie.x38.serialization.JsonDateSerializer;
import com.ejie.x38.serialization.JsonDateTimeDeserializer;
import com.ejie.x38.serialization.JsonDateTimeSerializer;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
 * TramitesExpediente generated by UDA, 22-mar-2023 17:10:15.
 * 
 * @author UDA
 */

public class TramitesExpediente implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Long idTramiteExp10;
	private MaestroTramites maestroTramites;
	private Expedientes expediente;
	private String idEstado10;
	private Date fInicio10;
	private Date fRealizacion10;
	private String observaciones10;
	private Date fAlta10;
	private String usuAlta10;
	private Date fModif10;
	private String usuModif10;
	private List<TareasTramite> tareasTramites = new ArrayList<TareasTramite>();
	private TareasTramite tareaTramite;

	private Long tipoEstudioDoc10;

	// Campos solo consulta
	private String anioIPREM;
	private String valIPREM;
	private String nivelReq;

	private DatosEconomicos datosEconomicos;
	private Dependencia dependencias = null;
	private Discapacidad discapacidad = null;
	// Borrar, campo placeholder. Revisar y guardar
	private Long interoperabilidad = null;

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

	/**
	 * Method 'TramitesExpediente'.
	 * 
	 * @param idTramiteExp10 Long
	 */
	public TramitesExpediente(Long idTramiteExp10) {
		this.idTramiteExp10 = idTramiteExp10;
	}

	/**
	 * Method 'TramitesExpediente'.
	 * 
	 * @param idTramiteExp10  Long
	 * @param idExpediente10  Long
	 * @param idEstado10      String
	 * @param fInicio10       Date
	 * @param fRealizacion10  Date
	 * @param observaciones10 String
	 * @param fAlta10         Date
	 * @param usuAlta10       String
	 * @param fModif10        Date
	 * @param usuModif10      String
	 * @param maestroTramites MaestroTramites
	 */
	public TramitesExpediente(Long idTramiteExp10, Long idExpediente10, String idEstado10, Date fInicio10,
			Date fRealizacion10, String observaciones10, Date fAlta10, String usuAlta10, Date fModif10,
			String usuModif10, MaestroTramites maestroTramites, Long tipoEstudioDoc10) {
		this.idTramiteExp10 = idTramiteExp10;
		this.maestroTramites = maestroTramites;
		this.expediente = new Expedientes(idExpediente10);
		this.idEstado10 = idEstado10;
		this.fInicio10 = fInicio10;
		this.fRealizacion10 = fRealizacion10;
		this.observaciones10 = observaciones10;
		this.fAlta10 = fAlta10;
		this.usuAlta10 = usuAlta10;
		this.fModif10 = fModif10;
		this.usuModif10 = usuModif10;
		this.tipoEstudioDoc10 = tipoEstudioDoc10;
	}

	/**
	 * Method 'TramitesExpediente'.
	 * 
	 * @param idTramiteExp10  Long
	 * @param idExpediente10  Long
	 * @param idEstado10      String
	 * @param fInicio10       Date
	 * @param fRealizacion10  Date
	 * @param observaciones10 String
	 * @param fAlta10         Date
	 * @param usuAlta10       String
	 * @param fModif10        Date
	 * @param usuModif10      String
	 * @param maestroTramites MaestroTramites
	 * @param tareasTramites  List<TareasTramite>
	 */
	public TramitesExpediente(Long idTramiteExp10, Long idExpediente10, String idEstado10, Date fInicio10,
			Date fRealizacion10, String observaciones10, Date fAlta10, String usuAlta10, Date fModif10,
			String usuModif10, MaestroTramites maestroTramites, List<TareasTramite> tareasTramites,
			Long tipoEstudioDoc10) {

		this.idTramiteExp10 = idTramiteExp10;
		this.maestroTramites = maestroTramites;
		this.expediente = new Expedientes(idExpediente10);
		this.idEstado10 = idEstado10;
		this.fInicio10 = fInicio10;
		this.fRealizacion10 = fRealizacion10;
		this.observaciones10 = observaciones10;
		this.fAlta10 = fAlta10;
		this.usuAlta10 = usuAlta10;
		this.fModif10 = fModif10;
		this.usuModif10 = usuModif10;
		this.tareasTramites = tareasTramites;
	}

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

	public Long getIdTramiteExp10() {
		return this.idTramiteExp10;
	}

	/**
	 * Method 'setIdTramiteExp10'.
	 *
	 * @param idTramiteExp10 Long
	 * @return
	 */

	public void setIdTramiteExp10(Long idTramiteExp10) {
		this.idTramiteExp10 = idTramiteExp10;
	}

	/**
	 * Method 'getMaestroTramites'.
	 *
	 * @return MaestroTramites
	 */

	public MaestroTramites getMaestroTramites() {
		return this.maestroTramites;
	}

	/**
	 * Method 'setMaestroTramites'.
	 *
	 * @param maestroTramites MaestroTramites
	 * @return
	 */

	public void setMaestroTramites(MaestroTramites maestroTramites) {
		this.maestroTramites = maestroTramites;
	}

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

	public Long getIdExpediente10() {
		if (this.expediente != null) {
			return this.expediente.getIdExpediente00();
		} else {
			return null;
		}

	}

	/**
	 * Method 'setIdExpediente10'.
	 *
	 * @param idExpediente10 Long
	 * @return
	 */

	public void setIdExpediente10(Long idExpediente10) {
		if (this.expediente != null) {
			this.expediente.setIdExpediente00(idExpediente10);
		} else {
			this.expediente = new Expedientes(idExpediente10);
		}
	}

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

	public String getIdEstado10() {
		return idEstado10;

	}

	/**
	 * Method 'setIdEstado10'.
	 *
	 * @param idEstado10 String
	 * @return
	 */

	public void setIdEstado10(String idEstado10) {
		this.idEstado10 = idEstado10;
	}

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

	@JsonSerialize(using = JsonDateTimeSerializer.class)
	public Date getfInicio10() {
		return this.fInicio10;
	}

	/**
	 * Method 'setFInicio10'.
	 *
	 * @param FInicio10 java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateTimeDeserializer.class)
	public void setfInicio10(Date fInicio10) {
		this.fInicio10 = fInicio10;
	}

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

	@JsonSerialize(using = JsonDateTimeSerializer.class)
	public Date getfRealizacion10() {
		return this.fRealizacion10;
	}

	/**
	 * Method 'setFRealizacion10'.
	 *
	 * @param FRealizacion10 java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateTimeDeserializer.class)
	public void setfRealizacion10(Date fRealizacion10) {
		this.fRealizacion10 = fRealizacion10;
	}

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

	public String getObservaciones10() {
		return this.observaciones10;
	}

	/**
	 * Method 'setObservaciones10'.
	 *
	 * @param observaciones10 String
	 * @return
	 */

	public void setObservaciones10(String observaciones10) {
		this.observaciones10 = observaciones10;
	}

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

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

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

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

	public String getUsuAlta10() {
		return this.usuAlta10;
	}

	/**
	 * Method 'setUsuAlta10'.
	 *
	 * @param usuAlta10 String
	 * @return
	 */

	public void setUsuAlta10(String usuAlta10) {
		this.usuAlta10 = usuAlta10;
	}

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

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

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

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

	public String getUsuModif10() {
		return this.usuModif10;
	}

	/**
	 * Method 'setUsuModif10'.
	 *
	 * @param usuModif10 String
	 * @return
	 */

	public void setUsuModif10(String usuModif10) {
		this.usuModif10 = usuModif10;
	}

	/**
	 * Method 'getTareasTramites'.
	 *
	 * @return List
	 */
	@JsonIgnore
	public List<TareasTramite> getTareasTramites() {
		return this.tareasTramites;
	}

	/**
	 * Method 'setTareasTramites'.
	 *
	 * @param tareasTramites List
	 * @return
	 */
	public void setTareasTramites(List<TareasTramite> tareasTramites) {
		this.tareasTramites = tareasTramites;
	}

	/**
	 * 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(" [ idTramiteExp10: ").append(this.idTramiteExp10).append(" ]");
		result.append(", [ idExpediente10: ").append(this.getIdExpediente10()).append(" ]");
		result.append(", [ idEstado10: ").append(this.idEstado10).append(" ]");
		result.append(", [ fInicio10: ").append(this.fInicio10).append(" ]");
		result.append(", [ fRealizacion10: ").append(this.fRealizacion10).append(" ]");
		result.append(", [ observaciones10: ").append(this.observaciones10).append(" ]");
		result.append(", [ fAlta10: ").append(this.fAlta10).append(" ]");
		result.append(", [ usuAlta10: ").append(this.usuAlta10).append(" ]");
		result.append(", [ fModif10: ").append(this.fModif10).append(" ]");
		result.append(", [ usuModif10: ").append(this.usuModif10).append(" ]");
		result.append("}");
		return result.toString();
	}

	/**
	 * Method 'getExpediente'.
	 *
	 * @return Expediente
	 */
	public Expedientes getExpediente() {
		return expediente;
	}

	/**
	 * Method 'setExpediente'.
	 *
	 * @param expediente Expedientes
	 * @return
	 */
	public void setExpediente(Expedientes expediente) {
		this.expediente = expediente;
	}

	/**
	 * Method 'getDescEstado10'.
	 *
	 * @return String
	 */
	public String getDescEstado10() {
		if (this.getIdEstado10() == null) {
			return null;
		} else if (this.getIdEstado10().equals(TipoTramiteExpediente.Estado10.INICIADO.getValue())) {
			return TipoTramiteExpediente.Estado10.INICIADO.getDescripcion();
		} else if (this.getIdEstado10().equals(TipoTramiteExpediente.Estado10.CANCELADO.getValue())) {
			return TipoTramiteExpediente.Estado10.CANCELADO.getDescripcion();
		} else if (this.getIdEstado10().equals(TipoTramiteExpediente.Estado10.ANULADO.getValue())) {
			return TipoTramiteExpediente.Estado10.ANULADO.getDescripcion();
		} else if (this.getIdEstado10().equals(TipoTramiteExpediente.Estado10.FINALIZADO.getValue())) {
			return TipoTramiteExpediente.Estado10.FINALIZADO.getDescripcion();
		}
		return null;
	}

	/**
	 * Method 'getUltimoUsu'.
	 *
	 * @return String
	 */
	public String getUltimoUsu() {
		if (this.usuModif10 == null) {
			return this.usuAlta10;
		}
		return this.usuModif10;

	}

	/**
	 * Method 'getTareaTramite'.
	 *
	 * @return TareasTramite
	 */
	public TareasTramite getTareaTramite() {
		return tareaTramite;
	}

	/**
	 * Method 'setTareaTramite'.
	 *
	 * @param tareaTramite TareasTramite
	 * @return
	 */
	public void setTareaTramite(TareasTramite tareaTramite) {
		this.tareaTramite = tareaTramite;
	}

	/**
	 * Method 'getTramitadorNombre'.
	 *
	 * @return String
	 */
	public String getTramitadorNombre() {

		if ((this.usuModif10 != null && !this.usuModif10.equals(""))
				|| (this.usuAlta10 != null && !this.usuAlta10.equals(""))) {
			try {
				if (usuModif10 == null) {
					return UtilSeguridad.getNombreTecnico(this.usuAlta10);
				} else {
					return UtilSeguridad.getNombreTecnico(this.usuModif10);
				}
			} catch (Exception e) {
				return "";
			}
		}

		return "";
	}

	/**
	 * Method 'getDependencias'.
	 *
	 * @return Dependencia
	 */
	public Dependencia getDependencias() {
		return dependencias;
	}

	/**
	 * Method 'setDependencias'.
	 *
	 * @param dependencias Dependencia
	 * @return
	 */
	public void setDependencias(Dependencia dependencias) {
		this.dependencias = dependencias;
	}

	/**
	 * Method 'getInteroperabilidad'.
	 *
	 * @return Long
	 */
	public Long getInteroperabilidad() {
		return interoperabilidad;
	}

	/**
	 * Method 'setInteroperabilidad'.
	 *
	 * @param interoperabilidad Long
	 * @return
	 */
	public void setInteroperabilidad(Long interoperabilidad) {
		this.interoperabilidad = interoperabilidad;
	}

	/**
	 * Method 'getDiscapacidad'.
	 *
	 * @return Discapacidad
	 */
	public Discapacidad getDiscapacidad() {
		return discapacidad;
	}

	/**
	 * Method 'setDiscapacidad'.
	 *
	 * @param discapacidad Discapacidad
	 * @return
	 */
	public void setDiscapacidad(Discapacidad discapacidad) {
		this.discapacidad = discapacidad;
	}

	/**
	 * Method 'getAnioIPREM'.
	 *
	 * @return String
	 */
	public String getAnioIPREM() {
		return anioIPREM;
	}

	/**
	 * Method 'setAnioIPREM'.
	 *
	 * @param anioIPREM String
	 * @return
	 */
	public void setAnioIPREM(String anioIPREM) {
		this.anioIPREM = anioIPREM;
	}

	/**
	 * Method 'getValIPREM'.
	 *
	 * @return String
	 */
	public String getValIPREM() {
		return valIPREM;
	}

	/**
	 * Method 'setValIPREM'.
	 *
	 * @param valIPREM String
	 * @return
	 */
	public void setValIPREM(String valIPREM) {
		this.valIPREM = valIPREM;
	}

	/**
	 * Method 'getNivelReq'.
	 *
	 * @return String
	 */
	public String getNivelReq() {
		return nivelReq;
	}

	/**
	 * Method 'setNivelReq'.
	 *
	 * @param nivelReq String
	 * @return
	 */
	public void setNivelReq(String nivelReq) {
		this.nivelReq = nivelReq;
	}

	/**
	 * Method 'getDatosEconomicos'.
	 *
	 * @return DatosEconomicos
	 */
	public DatosEconomicos getDatosEconomicos() {
		return datosEconomicos;
	}

	/**
	 * Method 'setDatosEconomicos'.
	 *
	 * @param datosEconomicos DatosEconomicos
	 * @return
	 */
	public void setDatosEconomicos(DatosEconomicos datosEconomicos) {
		this.datosEconomicos = datosEconomicos;
	}

	public Long getTipoEstudioDoc10() {
		return tipoEstudioDoc10;
	}

	public void setTipoEstudioDoc10(Long tipoEstudioDoc) {
		this.tipoEstudioDoc10 = tipoEstudioDoc;
	}
}
