/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.cosmodas.EntCosmos;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 * @author obper
 */
@Entity
@Table(name = "productos")
@XmlRootElement
@NamedQueries({
        @NamedQuery(name = "Productos.findAll", query = "SELECT p FROM Productos p"),
        @NamedQuery(name = "Productos.findByProductoCodigo", query = "SELECT p FROM Productos p WHERE p.productoCodigo = :productoCodigo and p.discontinuado != '13'"),
        @NamedQuery(name = "Productos.findByProductoSubclasificacion", query = "SELECT p FROM Productos p WHERE p.productoSubclasificacion = :productoSubclasificacion"),
        @NamedQuery(name = "Productos.findByProductoNombre", query = "SELECT p FROM Productos p WHERE p.productoNombre = :productoNombre"),
        @NamedQuery(name = "Productos.findByProductoNombreLike", query = "SELECT p FROM Productos p WHERE p.productoNombre LIKE :productoNombre and p.discontinuado != '13'"),
        @NamedQuery(name = "Productos.findByProductoCostoPromedio", query = "SELECT p FROM Productos p WHERE p.productoCostoPromedio = :productoCostoPromedio"),
        @NamedQuery(name = "Productos.findByProductoUltimaCompra", query = "SELECT p FROM Productos p WHERE p.productoUltimaCompra = :productoUltimaCompra"),
        @NamedQuery(name = "Productos.findByProductoPrecioRegular", query = "SELECT p FROM Productos p WHERE p.productoPrecioRegular = :productoPrecioRegular"),
        @NamedQuery(name = "Productos.findByProductoMarca", query = "SELECT p FROM Productos p WHERE p.productoMarca = :productoMarca"),
        @NamedQuery(name = "Productos.findByProductoCodigoAnterior", query = "SELECT p FROM Productos p WHERE p.productoCodigoAnterior = :productoCodigoAnterior"),
        @NamedQuery(name = "Productos.findByCode1", query = "SELECT p FROM Productos p WHERE p.code1 = :code1"),
        @NamedQuery(name = "Productos.findByProductoEnvio", query = "SELECT p FROM Productos p WHERE p.productoEnvio = :productoEnvio"),
        @NamedQuery(name = "Productos.findByDiscontinuado", query = "SELECT p FROM Productos p WHERE p.discontinuado = :discontinuado"),
        @NamedQuery(name = "Productos.findByExistenciaMinima", query = "SELECT p FROM Productos p WHERE p.existenciaMinima = :existenciaMinima"),
        @NamedQuery(name = "Productos.findByCodigoBarra", query = "SELECT p FROM Productos p WHERE p.codigoBarra = :codigoBarra and p.discontinuado != '13'"),
        @NamedQuery(name = "Productos.findByMedida", query = "SELECT p FROM Productos p WHERE p.medida = :medida")})
public class Productos implements Serializable {
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productoCodigo")
    private Collection<HproductosZonasTotal> hproductosZonasTotalCollection;
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 5)
    @Column(name = "producto_codigo")
    private String productoCodigo;
    @Size(max = 4)
    @Column(name = "producto_subclasificacion")
    private String productoSubclasificacion;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 75)
    @Column(name = "producto_nombre")
    private String productoNombre;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Basic(optional = false)
    @NotNull
    @Column(name = "producto_costo_promedio")
    private BigDecimal productoCostoPromedio;
    @Basic(optional = false)
    @NotNull
    @Column(name = "producto_ultima_compra")
    private BigDecimal productoUltimaCompra;
    @Basic(optional = false)
    @NotNull
    @Column(name = "producto_precio_regular")
    private BigDecimal productoPrecioRegular;
    @Size(max = 20)
    @Column(name = "producto_marca")
    private String productoMarca;
    @Size(max = 10)
    @Column(name = "producto_codigo_anterior")
    private String productoCodigoAnterior;
    @Size(max = 4)
    @Column(name = "code1")
    private String code1;
    @Column(name = "producto_envio")
    private Boolean productoEnvio;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 2)
    @Column(name = "discontinuado")
    private String discontinuado;
    @Column(name = "existencia_minima")
    private Integer existenciaMinima;
    @Size(max = 13)
    @Column(name = "codigo_barra")
    private String codigoBarra;
    @Size(max = 20)
    @Column(name = "medida")
    private String medida;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productos")
    private Collection<Productosucursal> productosucursalCollection;

    public Productos() {
    }

    public Productos(String productoCodigo) {
        this.productoCodigo = productoCodigo;
    }

    public Productos(String productoCodigo, String productoNombre, BigDecimal productoCostoPromedio, BigDecimal productoUltimaCompra, BigDecimal productoPrecioRegular, String discontinuado) {
        this.productoCodigo = productoCodigo;
        this.productoNombre = productoNombre;
        this.productoCostoPromedio = productoCostoPromedio;
        this.productoUltimaCompra = productoUltimaCompra;
        this.productoPrecioRegular = productoPrecioRegular;
        this.discontinuado = discontinuado;
    }

    public String getProductoCodigo() {
        return productoCodigo;
    }

    public void setProductoCodigo(String productoCodigo) {
        this.productoCodigo = productoCodigo;
    }

    public String getProductoSubclasificacion() {
        return productoSubclasificacion;
    }

    public void setProductoSubclasificacion(String productoSubclasificacion) {
        this.productoSubclasificacion = productoSubclasificacion;
    }

    public String getProductoNombre() {
        return productoNombre;
    }

    public void setProductoNombre(String productoNombre) {
        this.productoNombre = productoNombre;
    }

    public BigDecimal getProductoCostoPromedio() {
        return productoCostoPromedio;
    }

    public void setProductoCostoPromedio(BigDecimal productoCostoPromedio) {
        this.productoCostoPromedio = productoCostoPromedio;
    }

    public BigDecimal getProductoUltimaCompra() {
        return productoUltimaCompra;
    }

    public void setProductoUltimaCompra(BigDecimal productoUltimaCompra) {
        this.productoUltimaCompra = productoUltimaCompra;
    }

    public BigDecimal getProductoPrecioRegular() {
        return productoPrecioRegular;
    }

    public void setProductoPrecioRegular(BigDecimal productoPrecioRegular) {
        this.productoPrecioRegular = productoPrecioRegular;
    }

    public String getProductoMarca() {
        return productoMarca;
    }

    public void setProductoMarca(String productoMarca) {
        this.productoMarca = productoMarca;
    }

    public String getProductoCodigoAnterior() {
        return productoCodigoAnterior;
    }

    public void setProductoCodigoAnterior(String productoCodigoAnterior) {
        this.productoCodigoAnterior = productoCodigoAnterior;
    }

    public String getCode1() {
        return code1;
    }

    public void setCode1(String code1) {
        this.code1 = code1;
    }

    public Boolean getProductoEnvio() {
        return productoEnvio;
    }

    public void setProductoEnvio(Boolean productoEnvio) {
        this.productoEnvio = productoEnvio;
    }

    public String getDiscontinuado() {
        return discontinuado;
    }

    public void setDiscontinuado(String discontinuado) {
        this.discontinuado = discontinuado;
    }

    public Integer getExistenciaMinima() {
        return existenciaMinima;
    }

    public void setExistenciaMinima(Integer existenciaMinima) {
        this.existenciaMinima = existenciaMinima;
    }

    public String getCodigoBarra() {
        return codigoBarra;
    }

    public void setCodigoBarra(String codigoBarra) {
        this.codigoBarra = codigoBarra;
    }

    public String getMedida() {
        return medida;
    }

    public void setMedida(String medida) {
        this.medida = medida;
    }

    @XmlTransient
    public Collection<Productosucursal> getProductosucursalCollection() {
        return productosucursalCollection;
    }

    public void setProductosucursalCollection(Collection<Productosucursal> productosucursalCollection) {
        this.productosucursalCollection = productosucursalCollection;
    }

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

    @Override
    public String toString() {
        return "dbCon.Productos[ productoCodigo=" + productoCodigo + " ]";
    }

    @XmlTransient
    public Collection<HproductosZonasTotal> getHproductosZonasTotalCollection() {
        return hproductosZonasTotalCollection;
    }

    public void setHproductosZonasTotalCollection(Collection<HproductosZonasTotal> hproductosZonasTotalCollection) {
        this.hproductosZonasTotalCollection = hproductosZonasTotalCollection;
    }

}