Subversion Repositories Integrator Subversion

Rev

Rev 468 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Size;

import org.hibernate.annotations.ForeignKey;

import br.com.ec.core.util.VerificadorUtil;

@Entity
@Table(name="sec_compra_produto", schema="sc_sec")
public class CompraProduto implements Serializable {
         
        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private Compra compra;
        private Produto produto;
        private Double valorCompra;
        private Integer quantidade;
        private String unidadeComercial;
        private Integer quantidadeUnidadeComercial;
        private Double valorUnidadeComercial;
        private String unidadeTributaria;
        private Integer quantidadeUnidadeTributaria;
        private Double valorUnidadeTributaria;
        private Double valorDesconto;
        private Boolean indicadorValorTotalNota;
        private String informacoesAdicionais;
       
        private String codigoProdutoNotaFiscal;
        private String descricaoProdutoNotaFiscal;
       
        private String codigoNCM;
        private Boolean indicadorSolicitarContagem = false;
        private Integer estoqueAtualProduto;
       
        // MEDICAMENTO
        private String lote;
        private Integer quantidadeLote;
        private Date dataFabricacao;
        private Date dataValidade;
        private Double valorPrecoMaximo;
       
        public CompraProduto() {
                setUnidadeComercial("UN");
                setUnidadeTributaria("UN");
        }
       
        public CompraProduto(Long sequencial) {
                this.sequencial = sequencial;
                setUnidadeComercial("UN");
                setUnidadeTributaria("UN");
        }

        @Id
        @SequenceGenerator(name = "sq_compraproduto")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="seq_compraproduto", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @ManyToOne
        @ForeignKey(name = "fk_compra_compraproduto")
        @JoinColumn(name="seq_compra", referencedColumnName="seq_compra", insertable=true, updatable=false)
        public Compra getCompra() {
                return compra;
        }
        public void setCompra(Compra compra) {
                this.compra = compra;
        }
       
        @ManyToOne
        @ForeignKey(name = "fk_prooduto_compraproduto")
        @JoinColumn(name="seq_produto", referencedColumnName="seq_produto", insertable=true, updatable=false)
        public Produto getProduto() {
                return produto;
        }
        public void setProduto(Produto produto) {
                this.produto = produto;
        }
       
        @Column(name="val_compra")
        public Double getValorCompra() {
                return valorCompra;
        }
        public void setValorCompra(Double valorCompra) {
                this.valorCompra = valorCompra;
        }
       
        @Column(name="qtd_compra", nullable=false)
        public Integer getQuantidade() {
                return quantidade;
        }
        public void setQuantidade(Integer quantidade) {
                this.quantidade = quantidade;
        }
       
        @Column(name="dsc_unidade_comercial")
        public String getUnidadeComercial() {
                return unidadeComercial;
        }
        public void setUnidadeComercial(String unidadeComercial) {
                this.unidadeComercial = unidadeComercial;
        }
       
        @Column(name="qtd_unidade_comercial")
        public Integer getQuantidadeUnidadeComercial() {
                return quantidadeUnidadeComercial;
        }
        public void setQuantidadeUnidadeComercial(Integer quantidadeUnidadeComercial) {
                this.quantidadeUnidadeComercial = quantidadeUnidadeComercial;
        }
       
        @Column(name="val_unidade_comercial")
        public Double getValorUnidadeComercial() {
                return valorUnidadeComercial;
        }
        public void setValorUnidadeComercial(Double valorUnidadeComercial) {
                this.valorUnidadeComercial = valorUnidadeComercial;
        }
       
        @Column(name="dsc_unidade_tributaria")
        public String getUnidadeTributaria() {
                return unidadeTributaria;
        }
        public void setUnidadeTributaria(String unidadeTributaria) {
                this.unidadeTributaria = unidadeTributaria;
        }
       
        @Column(name="qtd_unidade_tributaria")
        public Integer getQuantidadeUnidadeTributaria() {
                return quantidadeUnidadeTributaria;
        }
        public void setQuantidadeUnidadeTributaria(Integer quantidadeUnidadeTributaria) {
                this.quantidadeUnidadeTributaria = quantidadeUnidadeTributaria;
        }
       
        @Column(name="val_unidade_tributaria")
        public Double getValorUnidadeTributaria() {
                return valorUnidadeTributaria;
        }
        public void setValorUnidadeTributaria(Double valorUnidadeTributaria) {
                this.valorUnidadeTributaria = valorUnidadeTributaria;
        }
       
        @Column(name="val_desconto")
        public Double getValorDesconto() {
                return valorDesconto;
        }
        public void setValorDesconto(Double valorDesconto) {
                this.valorDesconto = valorDesconto;
        }
       
        @Column(name="ind_valor_total_nota")
        public Boolean getIndicadorValorTotalNota() {
                return indicadorValorTotalNota;
        }
        public void setIndicadorValorTotalNota(Boolean indicadorValorTotalNota) {
                this.indicadorValorTotalNota = indicadorValorTotalNota;
        }
       
        @Column(name="dsc_informacoes_adicionais")
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Informações Adicionais")
        public String getInformacoesAdicionais() {
                return informacoesAdicionais;
        }
        public void setInformacoesAdicionais(String informacoesAdicionais) {
                this.informacoesAdicionais = informacoesAdicionais;
        }
       
        @Column(name="dsc_lote")
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Lote")
        public String getLote() {
                return lote;
        }
        public void setLote(String lote) {
                this.lote = lote;
        }
       
        @Column(name="qtd_lote")
        public Integer getQuantidadeLote() {
                return quantidadeLote;
        }
        public void setQuantidadeLote(Integer quantidadeLote) {
                this.quantidadeLote = quantidadeLote;
        }
       
        @Column(name="dat_fabricacao")
        public Date getDataFabricacao() {
                return dataFabricacao;
        }
        public void setDataFabricacao(Date dataFabricacao) {
                this.dataFabricacao = dataFabricacao;
        }
       
        @Column(name="dat_validade")
        public Date getDataValidade() {
                return dataValidade;
        }
        public void setDataValidade(Date dataValidade) {
                this.dataValidade = dataValidade;
        }
       
        @Column(name="val_preco_maximo")
        public Double getValorPrecoMaximo() {
                return valorPrecoMaximo;
        }
        public void setValorPrecoMaximo(Double valorPrecoMaximo) {
                this.valorPrecoMaximo = valorPrecoMaximo;
        }
       
        @Column(name="dsc_codigoproduto_notafiscal")
        @Size(max = 100, message = "Limite de caracteres ultrapassado: Código do Fornecedor")
        public String getCodigoProdutoNotaFiscal() {
                return codigoProdutoNotaFiscal;
        }
        public void setCodigoProdutoNotaFiscal(String codigoProdutoNotaFiscal) {
                this.codigoProdutoNotaFiscal = codigoProdutoNotaFiscal;
        }
       
        @Column(name="dsc_produto_notafiscal")
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Descrição do Fornecedor")
        public String getDescricaoProdutoNotaFiscal() {
                return descricaoProdutoNotaFiscal;
        }
        public void setDescricaoProdutoNotaFiscal(String descricaoProdutoNotaFiscal) {
                this.descricaoProdutoNotaFiscal = descricaoProdutoNotaFiscal;
        }
       
        /*********************************************/
       
        @Transient
        public String getCodigoNCM() {
                return codigoNCM;
        }
        public void setCodigoNCM(String codigoNCM) {
                this.codigoNCM = codigoNCM;
        }
       
        @Transient
        public Boolean getIndicadorSolicitarContagem() {
                return indicadorSolicitarContagem;
        }
        public void setIndicadorSolicitarContagem(Boolean indicadorSolicitarContagem) {
                this.indicadorSolicitarContagem = indicadorSolicitarContagem;
        }
       
        @Transient
        public Integer getEstoqueAtualProduto() {
                return estoqueAtualProduto;
        }
        public void setEstoqueAtualProduto(Integer estoqueAtualProduto) {
                this.estoqueAtualProduto = estoqueAtualProduto;
        }
       
        @Transient
        public Loja getLojaDaCompra() {
                return VerificadorUtil.naoEstaNulo(getCompra())? getCompra().getLoja() : null;
        }

        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result
                                + ((sequencial == null) ? 0 : sequencial.hashCode());
                return result;
        }
       
        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                CompraProduto other = (CompraProduto) obj;
                if (sequencial == null) {
                        if (other.sequencial != null) {
                                return false;
                        } else {return false;}
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }

        @Transient
        public Tributacao getTributacaoDoProduto() {
                return VerificadorUtil.naoEstaNulo(getProduto())? getProduto().getTributacao() : null;
        }
       
        @Transient
        public Double retornarPercentualLucroBrutoUnidadeComercial() {
                try {
                        Produto produtoClone = produto.clone();
                        if (VerificadorUtil.naoEstaNulo(getValorUnidadeComercial()) && VerificadorUtil.naoEstaNulo(getProduto().getValorVarejo())) {
                                getProduto().setValorCompra(getValorUnidadeComercial());
                                produtoClone.setValorCompra(getValorUnidadeComercial());
                                produtoClone.setValorVarejoSimulacao(produtoClone.getValorVarejo());
                        }
                        return produtoClone.calculoMargemAposCustos();
                } catch (CloneNotSupportedException e) {
                        e.printStackTrace();
                }
                return 0.0;
        }
       
        @Transient
        public String retornarCorPercentualLucroBrutoUnidadeComercial() {
                try {
                        Produto produtoClone = produto.clone();
                        if (VerificadorUtil.naoEstaNulo(getValorUnidadeComercial()) && VerificadorUtil.naoEstaNulo(getProduto().getValorVarejo())) {
                                getProduto().setValorCompra(getValorUnidadeComercial());
                                produtoClone.setValorCompra(getValorUnidadeComercial());
                                produtoClone.setValorVarejoSimulacao(produtoClone.getValorVarejo());
                        }
                        return produtoClone.retornarCorMargemLucro();
                } catch (CloneNotSupportedException e) {
                        e.printStackTrace();
                }
                return "black";
        }
       
        @Transient
        public void atualizarDadosNfe(br.com.swconsultoria.nfe.schema_4.enviNFe.TNFe.InfNFe.Det produtoNota) {
                this.setUnidadeComercial(produtoNota.getProd().getUCom());
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getQCom())) {
                        this.setQuantidade(new Double(produtoNota.getProd().getQCom()).intValue());
                }
                this.setUnidadeTributaria(produtoNota.getProd().getUTrib());
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getQTrib())) {
                        this.setQuantidadeUnidadeTributaria(new Double(produtoNota.getProd().getQTrib()).intValue());
                }
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnTrib())) {
                        this.setValorUnidadeTributaria(new Double(produtoNota.getProd().getVUnTrib()));
                }
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVDesc())) {
                        this.setValorDesconto(new Double(produtoNota.getProd().getVDesc()));
                }
                this.setIndicadorValorTotalNota(produtoNota.getProd().getIndTot().equals("1"));
                this.setInformacoesAdicionais(produtoNota.getInfAdProd());
                this.setCodigoProdutoNotaFiscal(produtoNota.getProd().getCProd());
                this.setDescricaoProdutoNotaFiscal(produtoNota.getProd().getXProd());
               
                this.setCodigoNCM(produtoNota.getProd().getNCM());
               
                /*
                if (VerificadorUtil.naoEstaNuloOuVazio(produtoNota.getProd().getMed())) {
                        for (nfce.java.TNFe.InfNFe.Det.Prod.Med medicamento : produtoNota.getProd().getMed()) {
                                if (VerificadorUtil.naoEstaNuloOuVazio(medicamento.getNLote())) {
                                        this.setLote(medicamento.getNLote());
                                }
                                if (VerificadorUtil.naoEstaNuloOuVazio(medicamento.getQLote())) {
                                        this.setQuantidadeLote(new Double(medicamento.getQLote()).intValue());
                                }
                                if (VerificadorUtil.naoEstaNuloOuVazio(medicamento.getDFab())) {
                                        this.setDataFabricacao(DataUtil.retornarDataApartirString("yyyy-MM-dd", medicamento.getDFab()));
                                }
                                if (VerificadorUtil.naoEstaNuloOuVazio(medicamento.getDVal())) {
                                        this.setDataValidade(DataUtil.retornarDataApartirString("yyyy-MM-dd", medicamento.getDVal()));
                                }
                                if (VerificadorUtil.naoEstaNuloOuVazio(medicamento.getVPMC())) {
                                        this.setValorPrecoMaximo(new Double(medicamento.getVPMC()));
                                }
                        }
                }
                */

        }
       
        @Transient
        public void atualizarAliquotas(Fornecedor fornecedor) {
                if (VerificadorUtil.naoEstaNulo(getProduto())) {
                        getProduto().atualizarAliquotas(fornecedor);
                }
        }

}