Presupuesto.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.DtoItem;
import com.licensis.notaire.dto.DtoPersona;
import com.licensis.notaire.dto.DtoPresupuesto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import jakarta.persistence.Basic;
import jakarta.persistence.CascadeType;
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.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
import jakarta.persistence.Version;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlTransient;

/**
 * Clase que representa un presupuesto.
 *
 * @author juanca
 */
@Entity
@Table(name = "presupuestos")
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "Presupuesto.findAll", query = "SELECT p FROM Presupuesto p"),
        @NamedQuery(name = "Presupuesto.findByIdPresupuesto", query = "SELECT p FROM Presupuesto p WHERE p.idPresupuesto = :idPresupuesto"),
        @NamedQuery(name = "Presupuesto.findByFecha", query = "SELECT p FROM Presupuesto p WHERE p.fecha = :fecha"),
        @NamedQuery(name = "Presupuesto.findByNumero", query = "SELECT p FROM Presupuesto p WHERE p.numero = :numero"),
        @NamedQuery(name = "Presupuesto.findByEstado", query = "SELECT p FROM Presupuesto p WHERE p.estado = :estado"),
        @NamedQuery(name = "Presupuesto.findByPersona", query = "SELECT p FROM Presupuesto p WHERE p.fkIdPersona.idPersona = :idPersona"),
        @NamedQuery(name = "Presupuesto.findByPersonaTramie", query = "SELECT p FROM Presupuesto p WHERE p.fkIdPersona.idPersona = :idPersona AND p.fkIdTramite.idTramite = :fkIdTramite"),
})
public class Presupuesto implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_presupuesto")
    private Integer idPresupuesto;

    @Basic(optional = false)
    @Column(name = "numero")
    private int numero;

    @Basic(optional = false)
    @Column(name = "fecha")
    @Temporal(TemporalType.DATE)
    private Date fecha;

    @Basic(optional = false)
    @Column(name = "encabezado")
    private String encabezado;

    @Column(name = "observaciones")
    private String observaciones;

    @Basic(optional = false)
    @Column(name = "estado")
    private String estado;

    @Column(name = "monto_inmueble")
    private Float montoInmueble;

    @Basic(optional = false)
    @Column(name = "version")
    @Version
    private int version = 0;

    private static final long serialVersionUID = 1L;

    @JoinColumn(name = "fk_id_persona", referencedColumnName = "id_persona")
    @ManyToOne(fetch = FetchType.EAGER)
    private Persona fkIdPersona;

    @JoinColumn(name = "fk_id_tramite", referencedColumnName = "id_tramite")
    @ManyToOne(fetch = FetchType.EAGER)
    private Tramite fkIdTramite;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkIdPresupuesto", fetch = FetchType.EAGER)
    private java.util.Set<Pago> pagoList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkIdPresupuesto", fetch = FetchType.LAZY)
    private List<Tramite> tramiteList;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "fkIdPresupuesto", fetch = FetchType.LAZY)
    private List<Item> itemList = new ArrayList<>();

    /**
     * Constructor por default de presupuesto. Inicializa el ID presupuesto segun el
     * campo
     * {@link ConstantesNegocio}.ID_OBJETO_NO_VALIDO, y todas las listas de objetos.
     */
    public Presupuesto() {
        this.idPresupuesto = ConstantesNegocio.ID_OBJETO_NO_VALIDO;
        this.itemList = new ArrayList<>();
        this.pagoList = new java.util.HashSet<>();
        this.tramiteList = new ArrayList<>();
    }

    public Presupuesto(Integer idPresupuesto) {
        this.idPresupuesto = idPresupuesto;
    }

    public Presupuesto(Integer idPresupuesto, int numero, Date fecha, String encabezado, String estado) {
        this.idPresupuesto = idPresupuesto;
        this.numero = numero;
        this.fecha = fecha;
        this.encabezado = encabezado;
        this.estado = estado;
    }

    public Integer getIdPresupuesto() {
        return idPresupuesto;
    }

    public void setIdPresupuesto(Integer idPresupuesto) {
        this.idPresupuesto = idPresupuesto;
    }

    public String getObservaciones() {
        return observaciones;
    }

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

    @XmlTransient
    @JsonIgnore
    public java.util.Set<Pago> getPagoList() {
        return pagoList;
    }

    public void setPagoList(java.util.Set<Pago> pagoList) {
        this.pagoList = pagoList;
    }

    public Persona getFkIdPersona() {
        return fkIdPersona;
    }

    public void setFkIdPersona(Persona fkIdPersona) {
        this.fkIdPersona = fkIdPersona;
    }

    @JsonIgnore
    public Tramite getFkIdTramite() {
        return fkIdTramite;
    }

    @JsonProperty
    public void setFkIdTramite(Tramite fkIdTramite) {
        this.fkIdTramite = fkIdTramite;
    }

    @XmlTransient
    @JsonIgnore
    public List<Tramite> getTramiteList() {
        return tramiteList;
    }

    public void setTramiteList(List<Tramite> tramiteList) {
        this.tramiteList = tramiteList;
    }

    @XmlTransient
    @JsonIgnore
    public List<Item> getItemList() {
        return itemList;
    }

    public void setItemList(List<Item> itemList) {
        this.itemList = itemList;
    }

    @com.fasterxml.jackson.annotation.JsonIgnore
    public DtoPresupuesto getDto() {
        DtoPresupuesto miDto = new DtoPresupuesto();

        miDto.setIdPresupuesto(idPresupuesto);
        miDto.setFecha(fecha);
        miDto.setNumero(numero);
        miDto.setEncabezado(encabezado);
        miDto.setEstado(estado);
        miDto.setMontoInmueble(montoInmueble);
        miDto.setObservaciones(observaciones);

        if (fkIdTramite != null) {
            miDto.setTramite(fkIdTramite.getDto());
        } else {
            miDto.setTramite(null);
        }

        if (fkIdPersona != null) {
            try {
                miDto.setPersona(fkIdPersona.getDto());
            } catch (Exception ex) {
                DtoPersona personas = new DtoPersona();
                personas.setIdPersona(fkIdPersona.getIdPersona());
                personas.setNombre(fkIdPersona.getNombre());
                personas.setApellido(fkIdPersona.getApellido());
                personas.setDtoTipoIdentificacion(fkIdPersona.getFkIdTipoIdentificacion().getDto());
                personas.setNumeroIdentificacion(fkIdPersona.getNumeroIdentificacion());
            }
        } else {
            miDto.setPersona(null);
        }

        miDto.setVersion(version);

        return miDto;
    }

    public void setAtributos(DtoPresupuesto dtoPresupuesto) {
        this.setIdPresupuesto(dtoPresupuesto.getIdPresupuesto());
        this.setFecha(dtoPresupuesto.getFecha());
        this.setNumero(dtoPresupuesto.getNumero());
        this.setEncabezado(dtoPresupuesto.getEncabezado());
        this.setEstado(dtoPresupuesto.getEstado());
        this.setMontoInmueble(dtoPresupuesto.getMontoInmueble());
        this.setObservaciones(dtoPresupuesto.getObservaciones());

        if (dtoPresupuesto.getPersona() != null) {
            Persona cliente = new Persona();
            cliente.setAtributos(dtoPresupuesto.getPersona());
            this.setFkIdPersona(cliente);
        }

        if (dtoPresupuesto.getItems() != null && !dtoPresupuesto.getItems().isEmpty()) {
            for (Iterator<DtoItem> it = dtoPresupuesto.getItems().iterator(); it.hasNext();) {
                DtoItem dtoItem = it.next();
                Item item = new Item();
                item.setAtributos(dtoItem);
            }
        }

        version = dtoPresupuesto.getVersion();
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPresupuesto != null ? idPresupuesto.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 Presupuesto)) {
            return false;
        }
        Presupuesto other = (Presupuesto) object;
        if ((this.idPresupuesto == null && other.idPresupuesto != null)
                || (this.idPresupuesto != null && !this.idPresupuesto.equals(other.idPresupuesto))) {
            return false;
        }
        return true;
    }

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

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getEncabezado() {
        return encabezado;
    }

    public void setEncabezado(String encabezado) {
        this.encabezado = encabezado;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    @JsonProperty("monto")
    public Float getMontoInmueble() {
        return montoInmueble;
    }

    @JsonProperty("monto")
    public void setMontoInmueble(Float montoInmueble) {
        this.montoInmueble = montoInmueble;
    }

    public int getVersion() {
        return version;
    }

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

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    @Deprecated
    public Float getSaldo() {
        return null;
    }

    @Deprecated
    public void setSaldo(Float saldo) {
    }

    @Deprecated
    public Float getTotal() {
        return montoInmueble;
    }

    @Deprecated
    public void setTotal(Float total) {
    }
}