package com.ejie.ad74a.model;

import java.util.Date;
import java.util.List;
import java.util.Locale;

import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ad74a.ws.client.platea.notificaciones.TDocument;
import com.ejie.ad74a.ws.client.platea.notificaciones.TStringI18N;
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;

/**
 * NotifPostales generated by UDA, 09-ene-2024 16:08:21.
 * 
 * @author UDA
 */

public class NotifPostales implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	private Long idNotifPostal88;
	private String tipoNot88;
	private TareasTramite tareasTramite;
	private Integer idEnvioPostal88;
	private Integer idColeccionPostal88;
	private String postalInboxId88;
	private String codSituacionPostal88;
	private Date fechaSituacion88;
	private Integer finalizada88;
	private String situacionPostalEs88;
	private String situacionPostalEu88;
	private Integer retramitar;

	// Campos solo para filtrado
	private Date fechaRegistroInicio;
	private Date fechaRegistroFin;
	private Date fechaSituacionInicio;
	private Date fechaSituacionFin;

	// Campos de ayuda para gestion
	private transient TDocument docNotifPlatea;
	private transient String pifDocumentPath;
	private transient Long pifDocumentSize;

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

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

	/**
	 * Method 'NotifPostales'.
	 * 
	 * @param idNotifPostal88      Long
	 * @param tipoNot88            String
	 * @param tareasTramite        TareasTramite
	 * @param idEnvioPostal88      Integer
	 * @param idColeccionPostal88  Integer
	 * @param postalInboxId88      String
	 * @param codSituacionPostal88 String
	 * @param fechaSituacion88     Date
	 * @param finalizada88         Integer
	 * @param situacionPostalEs88  String
	 * @param situacionPostalEu88  String
	 * @param retramitar           Integer
	 */
	public NotifPostales(Long idNotifPostal88, String tipoNot88, TareasTramite tareasTramite, Integer idEnvioPostal88,
			Integer idColeccionPostal88, String postalInboxId88, String codSituacionPostal88, Date fechaSituacion88,
			Integer finalizada88, String situacionPostalEs88, String situacionPostalEu88, Integer retramitar) {

		this.idNotifPostal88 = idNotifPostal88;
		this.tipoNot88 = tipoNot88;
		this.tareasTramite = tareasTramite;
		this.idEnvioPostal88 = idEnvioPostal88;
		this.idColeccionPostal88 = idColeccionPostal88;
		this.postalInboxId88 = postalInboxId88;
		this.codSituacionPostal88 = codSituacionPostal88;
		this.fechaSituacion88 = fechaSituacion88;
		this.finalizada88 = finalizada88;
		this.situacionPostalEs88 = situacionPostalEs88;
		this.situacionPostalEu88 = situacionPostalEu88;
		this.retramitar = retramitar;
	}

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

	public Long getIdNotifPostal88() {
		return this.idNotifPostal88;
	}

	/**
	 * Method 'setIdNotifPostal88'.
	 *
	 * @param idNotifPostal88 Long
	 * @return
	 */

	public void setIdNotifPostal88(Long idNotifPostal88) {
		this.idNotifPostal88 = idNotifPostal88;
	}

	/**
	 * Method 'getTipoNot88'.
	 *
	 * @return String
	 */
	public String getTipoNot88() {
		return this.tipoNot88;
	}

	/**
	 * Method 'setTipoNot88'.
	 *
	 * @param tipoNot88 {@link String}
	 */
	public void setTipoNot88(String tipoNot88) {
		this.tipoNot88 = tipoNot88;
	}

	/**
	 * Method 'getTareasTramite'.
	 *
	 * @return TareasTramite
	 */
	public TareasTramite getTareasTramite() {
		return this.tareasTramite;
	}

	/**
	 * Method 'setTareasTramite'.
	 *
	 * @param tareasTramite {@link TareasTramite}
	 */
	public void setTareasTramite(TareasTramite tareasTramite) {
		this.tareasTramite = tareasTramite;
	}

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

	public Integer getIdEnvioPostal88() {
		return this.idEnvioPostal88;
	}

	/**
	 * Method 'setIdEnvioPostal88'.
	 *
	 * @param idEnvioPostal88 Integer
	 * @return
	 */

	public void setIdEnvioPostal88(Integer idEnvioPostal88) {
		this.idEnvioPostal88 = idEnvioPostal88;
	}

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

	public Integer getIdColeccionPostal88() {
		return this.idColeccionPostal88;
	}

	/**
	 * Method 'setIdColeccionPostal88'.
	 *
	 * @param idColeccionPostal88 Integer
	 * @return
	 */

	public void setIdColeccionPostal88(Integer idColeccionPostal88) {
		this.idColeccionPostal88 = idColeccionPostal88;
	}

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

	public String getPostalInboxId88() {
		return this.postalInboxId88;
	}

	/**
	 * Method 'setPostalInboxId88'.
	 *
	 * @param postalInboxId88 String
	 * @return
	 */

	public void setPostalInboxId88(String postalInboxId88) {
		this.postalInboxId88 = postalInboxId88;
	}

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

	public String getCodSituacionPostal88() {
		return this.codSituacionPostal88;
	}

	/**
	 * Method 'setCodSituacionPostal88'.
	 *
	 * @param codSituacionPostal88 String
	 * @return
	 */

	public void setCodSituacionPostal88(String codSituacionPostal88) {
		this.codSituacionPostal88 = codSituacionPostal88;
	}

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

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

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

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

	public Integer getFinalizada88() {
		return this.finalizada88;
	}

	/**
	 * Method 'setFinalizada88'.
	 *
	 * @param finalizada88 Integer
	 * @return
	 */

	public void setFinalizada88(Integer finalizada88) {
		this.finalizada88 = finalizada88;
	}

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

	public String getSituacionPostalEs88() {
		return this.situacionPostalEs88;
	}

	/**
	 * Method 'setSituacionPostalEs88'.
	 *
	 * @param situacionPostalEs88 String
	 * @return
	 */

	public void setSituacionPostalEs88(String situacionPostalEs88) {
		this.situacionPostalEs88 = situacionPostalEs88;
	}

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

	public String getSituacionPostalEu88() {
		return this.situacionPostalEu88;
	}

	/**
	 * Method 'setSituacionPostalEu88'.
	 *
	 * @param situacionPostalEu88 String
	 * @return
	 */

	public void setSituacionPostalEu88(String situacionPostalEu88) {
		this.situacionPostalEu88 = situacionPostalEu88;
	}

	/**
	 * Method 'getFechaRegistroInicio'.
	 *
	 * @return Date
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFechaRegistroInicio() {
		return this.fechaRegistroInicio;
	}

	/**
	 * Method 'setFechaRegistroInicio'.
	 *
	 * @param fechaRegistroInicio {@link Date}
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFechaRegistroInicio(Date fechaRegistroInicio) {
		this.fechaRegistroInicio = fechaRegistroInicio;
	}

	/**
	 * Method 'getFechaRegistroFin'.
	 *
	 * @return Date
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFechaRegistroFin() {
		return this.fechaRegistroFin;
	}

	/**
	 * Method 'setFechaRegistroFin'.
	 *
	 * @param fechaRegistroFin {@link Date}
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFechaRegistroFin(Date fechaRegistroFin) {
		this.fechaRegistroFin = fechaRegistroFin;
	}

	/**
	 * Method 'getFechaSituacionInicio'.
	 *
	 * @return Date
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFechaSituacionInicio() {
		return this.fechaSituacionInicio;
	}

	/**
	 * Method 'setFechaSituacionInicio'.
	 *
	 * @param fechaSituacionInicio {@link Date}
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFechaSituacionInicio(Date fechaSituacionInicio) {
		this.fechaSituacionInicio = fechaSituacionInicio;
	}

	/**
	 * Method 'getFechaSituacionFin'.
	 *
	 * @return Date
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getFechaSituacionFin() {
		return this.fechaSituacionFin;
	}

	/**
	 * Method 'setFechaSituacionFin'.
	 *
	 * @param fechaSituacionFin {@link Date}
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setFechaSituacionFin(Date fechaSituacionFin) {
		this.fechaSituacionFin = fechaSituacionFin;
	}

	/**
	 * Method 'getDocNotifPlatea'.
	 *
	 * @return TDocument
	 */
	public TDocument getDocNotifPlatea() {
		return this.docNotifPlatea;
	}

	/**
	 * Method 'setDocNotifPlatea'.
	 *
	 * @param docNotifPlatea {@link TDocument}
	 */
	public void setDocNotifPlatea(TDocument docNotifPlatea) {
		this.docNotifPlatea = docNotifPlatea;
	}

	/**
	 * Method 'getPifDocumentPath'.
	 *
	 * @return String
	 */
	public String getPifDocumentPath() {
		return this.pifDocumentPath;
	}

	/**
	 * Method 'setPifDocumentPath'.
	 *
	 * @param pifDocumentPath {@link String}
	 */
	public void setPifDocumentPath(String pifDocumentPath) {
		this.pifDocumentPath = pifDocumentPath;
	}

	/**
	 * Method 'getPifDocumentSize'.
	 *
	 * @return Long
	 */
	public Long getPifDocumentSize() {
		return this.pifDocumentSize;
	}

	/**
	 * Method 'setPifDocumentSize'.
	 *
	 * @param pifDocumentSize {@link Long}
	 */
	public void setPifDocumentSize(Long pifDocumentSize) {
		this.pifDocumentSize = pifDocumentSize;
	}

	/**
	 * Compone el nombre del documento de notificacion, con la siguiente estructura:
	 * <br/>
	 * <code>{tipo}_{oid}.{extension}</code>
	 * 
	 * @return
	 */
	public String getPlateaDocumentName() {
		String documentName = null;
		if (this.docNotifPlatea != null) {
			Locale l = LocaleContextHolder.getLocale();
			List<TStringI18N> listText = this.docNotifPlatea.getDocumentRoleName().getText();
			for (TStringI18N s : listText) {
				if (s.getLocale().value().equalsIgnoreCase(l.getLanguage())) {
					documentName = s.getValue();
				}
			}
			documentName += "_" + this.docNotifPlatea.getDokusiID() + "." + this.docNotifPlatea.getExtension();
		}
		return documentName;
	}

	/**
	 * @return the retramitar
	 */
	public Integer getRetramitar() {
		return retramitar;
	}

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

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("NotifPostales [idNotifPostal88=").append(idNotifPostal88).append(", tipoNot88=")
				.append(tipoNot88).append(", tareasTramite=").append(tareasTramite).append(", idEnvioPostal88=")
				.append(idEnvioPostal88).append(", idColeccionPostal88=").append(idColeccionPostal88)
				.append(", postalInboxId88=").append(postalInboxId88).append(", codSituacionPostal88=")
				.append(codSituacionPostal88).append(", fechaSituacion88=").append(fechaSituacion88)
				.append(", finalizada88=").append(finalizada88).append(", situacionPostalEs88=")
				.append(situacionPostalEs88).append(", situacionPostalEu88=").append(situacionPostalEu88)
				.append(", retramitar=").append(retramitar).append(", fechaRegistroInicio=").append(fechaRegistroInicio)
				.append(", fechaRegistroFin=").append(fechaRegistroFin).append(", fechaSituacionInicio=")
				.append(fechaSituacionInicio).append(", fechaSituacionFin=").append(fechaSituacionFin).append("]");
		return builder.toString();
	}

}
