Suplencia.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.licensis.notaire.negocio;

import com.licensis.notaire.dto.DtoSuplencia;
import com.licensis.notaire.dto.exceptions.DtoInvalidoException;
import java.io.Serializable;
import java.util.Date;
import jakarta.persistence.Basic;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.NamedQueries;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
import jakarta.persistence.Version;
import jakarta.xml.bind.annotation.XmlRootElement;

/**
 * Clase que representa una suplencia. Una suplencia indicia el reemplazado en el desarrollo y
 * administracion
 * de gestiones de un escribano (suplente) por otro (suplantado), en un determinado periodo de
 * tiempo (fecha desde,
 * fecha hasta).
 *
 * @author juanca
 */
@Entity
@Table(name = "suplencias")
@XmlRootElement
@NamedQueries(
        {
            @NamedQuery(name = "Suplencia.findAll", query = "SELECT s FROM Suplencia s"),
            @NamedQuery(name = "Suplencia.findByIdSuplencia", query = "SELECT s FROM Suplencia s WHERE s.idSuplencia = :idSuplencia"),
            @NamedQuery(name = "Suplencia.findByFechaInicio", query = "SELECT s FROM Suplencia s WHERE s.fechaInicio = :fechaInicio"),
            @NamedQuery(name = "Suplencia.findByFechaFin", query = "SELECT s FROM Suplencia s WHERE s.fechaFin = :fechaFin"),
            @NamedQuery(name = "Suplencia.findSuplenciasPorAnio", query = "SELECT s FROM Suplencia s WHERE s.fechaInicio >= :fechaInicio AND s.fechaFin <= :fechaFin"),
        })
public class Suplencia implements Serializable
{

    @Basic(optional = false)
    @Column(name = "version")
    @Version
    private int version;
    @Basic(optional = false)
    @Column(name = "fecha_inicio")
    @Temporal(TemporalType.DATE)
    private Date fechaInicio;
    @Basic(optional = false)
    @Column(name = "fecha_fin")
    @Temporal(TemporalType.DATE)
    private Date fechaFin;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_suplencia")
    private Integer idSuplencia;
    @Column(name = "observaciones")
    private String observaciones;
    @JoinColumn(name = "fk_id_suplente", referencedColumnName = "id_persona")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Persona fkIdSuplente;
    @JoinColumn(name = "fk_id_suplantado", referencedColumnName = "id_persona")
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Persona fkIdSuplantado;

    public Suplencia()
    {
    }

    public Suplencia(Integer idSuplencia)
    {
        this.idSuplencia = idSuplencia;
    }

    public Suplencia(Integer idSuplencia, Date fechaInicio, Date fechaFin)
    {
        this.idSuplencia = idSuplencia;
        this.fechaInicio = fechaInicio;
        this.fechaFin = fechaFin;
    }

    public Integer getIdSuplencia()
    {
        return idSuplencia;
    }

    public void setIdSuplencia(Integer idSuplencia)
    {
        this.idSuplencia = idSuplencia;
    }

    public Date getFechaInicio()
    {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio)
    {
        this.fechaInicio = fechaInicio;
    }

    public Date getFechaFin()
    {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin)
    {
        this.fechaFin = fechaFin;
    }

    public String getObservaciones()
    {
        return observaciones;
    }

    public void setObservaciones(String observaciones)
    {
        this.observaciones = observaciones;
    }

    public Persona getFkIdSuplente()
    {
        return fkIdSuplente;
    }

    public void setFkIdSuplente(Persona fkIdSuplente)
    {
        this.fkIdSuplente = fkIdSuplente;
    }

    public Persona getFkIdSuplantado()
    {
        return fkIdSuplantado;
    }

    public void setFkIdSuplantado(Persona fkIdSuplantado)
    {
        this.fkIdSuplantado = fkIdSuplantado;
    }

    @Override
    public int hashCode()
    {
        int hash = 0;
        hash += (idSuplencia != null ? idSuplencia.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object)
    {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Suplencia))
        {
            return false;
        }
        Suplencia other = (Suplencia) object;
        if ((this.idSuplencia == null && other.idSuplencia != null) || (this.idSuplencia != null && !this.idSuplencia.equals(other.idSuplencia)))
        {
            return false;
        }
        return true;
    }

    @Override
    public String toString()
    {
        return "Suplencia[ idSuplencia=" + idSuplencia + " ]";
    }

    public void setAtributos(DtoSuplencia nuevaSuplencia) throws DtoInvalidoException
    {
        if (nuevaSuplencia.isValido())
        {
            this.setFechaInicio(nuevaSuplencia.getFechaInicio());
            this.setFechaFin(nuevaSuplencia.getFechaFin());
            this.setObservaciones(nuevaSuplencia.getObservaciones());

            if (nuevaSuplencia.getPersonasByFkIdSuplantado().isValido())
            {
                Persona escribanoSuplantado = new Persona();
                escribanoSuplantado.setAtributos(nuevaSuplencia.getPersonasByFkIdSuplantado());
                this.setFkIdSuplantado(escribanoSuplantado);
            }

            if (nuevaSuplencia.getPersonasByFkIdSuplente().isValido())
            {
                Persona escribanoSuplente = new Persona();
                escribanoSuplente.setAtributos(nuevaSuplencia.getPersonasByFkIdSuplente());
                this.setFkIdSuplente(escribanoSuplente);
            }
        } else
        {
            throw new DtoInvalidoException("El Dto Suplencia es invalido");
        }
    }

    @com.fasterxml.jackson.annotation.JsonIgnore
    public DtoSuplencia getDto()
    {
        DtoSuplencia valoresSuplencia = new DtoSuplencia();

        valoresSuplencia.setIdSuplencia(idSuplencia);
        valoresSuplencia.setFechaInicio(fechaInicio);
        valoresSuplencia.setFechaFin(fechaFin);
        valoresSuplencia.setObservaciones(observaciones);
        valoresSuplencia.setPersonasByFkIdSuplantado(fkIdSuplantado.getDto());
        valoresSuplencia.setPersonasByFkIdSuplente(fkIdSuplente.getDto());

        return valoresSuplencia;
    }

    public int getVersion()
    {
        return version;
    }

    public void setVersion(int version)
    {
        this.version = version;
    }
}