Subversion Repositories Integrator Subversion

Rev

Rev 521 | Rev 616 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.dto;

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

import javax.persistence.Transient;

import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.Modelo;
import br.com.ec.domain.model.Tributacao;
import br.com.ec.domain.model.tipos.TipoCorProduto;
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
import br.com.ec.domain.model.tipos.TipoProduto;

public class ProdutoDTO implements Serializable {

        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private String codigo;
        private String codigoRapido;
        private String codigoEAN;
        private String codigoEANTributado;
        private String descricao;
        private String tipo;
        private String estilo;
        private String cor;
        private String genero;
       
        private String codigoNCM;
        private String codigoEST;
       
        private ModeloDTO modeloDTO;
        private TributacaoDTO tributacaoDTO;
       
        private Boolean sujeitoST;
       
        private Boolean ativo;
       
        private Boolean indicadorRealizarTransferencia;
       
        /*
        private String descricaoEtiqueta;
        private String descricaoParaNotaFiscal;
        private String genero;
        private String observacao;
        private Double valorCompra;
        private Double valorVarejo;
        private Double valorVarejoPromocional;
        private Double valorVarejoMaximo;
        private Double valorVarejoPopular;
        private Double valorAtacado;
        private Date dataOnline;
        private Date dataOnlineShoplog;
        private Date dataOnlineMercadoLivre;
        private Boolean indicadorFavorito;
        private Boolean indicadorComissionado;
        private Boolean indicadorPersonalizavel;
        private Boolean indicadorEmissaoNotaFiscal;
       
//      private Modelo modelo;
//      private Tributacao tributacao;
       
        private Double valorVarejoSimulacao;
       
        private Double aliquotaIPI;
        private Double aliquotaIPINotaFiscal;
        private Double aliquotaIcms;
        private Double aliquotaIcmsNotaFiscal;
        private Double aliquotaIcmsST;
        private Double aliquotaFecoep;
       
       
       
        private Set<ProdutoPedidoCompra> pedidosCompra;
        private Set<ProdutoLoja> estoques;
        private Set<FornecedorProduto> fornecedores;
        private Set<ProdutoRelacionado> relacionados;
        private Set<ProdutoRelacionado> relacionadosReverse;
       
        private List<TransferenciaProduto> transferenciasAbertas = new ArrayList<TransferenciaProduto>();
        private List<PedidoProduto> pedidosPendentes = new ArrayList<PedidoProduto>();
       
        private Boolean indicadorOnline;
        private Boolean indicadorOnlineShoplog;
        private Boolean indicadorOnlineMercadoLivre;
        private Date dataUltimaVenda;*/

       
        public ProdutoDTO() {}
       
        public static String CONSULTA_DTO_SIMPLES_COM_MODELO = "e.sequencial, e.codigo, e.codigoEAN, e.descricao, e.tipo, e.estilo, e.cor, e.genero, "
                        + "e.ativo, "
                        + " (SELECT mo.descricao FROM Modelo mo WHERE mo.sequencial = e.modelo.sequencial), "
                        + " (SELECT m.descricao FROM Marca m WHERE m.sequencial = e.modelo.marca.sequencial)";
        public ProdutoDTO(Long sequencial, String codigo, String codigoEAN, String descricao, String tipoProduto, String estiloProduto, String corProduto,
                        String generoProduto, Boolean ativo, String descricaoModelo, String descricaoMarca) {
                super();
                this.sequencial = sequencial;
                this.codigo = codigo;
                this.codigoEAN = codigoEAN;
                this.descricao = descricao;
                this.tipo = tipoProduto;
                this.estilo= estiloProduto;
                this.cor = corProduto;
                this.genero = generoProduto;
                this.ativo = ativo;
                this.modeloDTO = new ModeloDTO(null, descricaoModelo, new MarcaDTO(null, descricaoMarca));
        }
       
        public ProdutoDTO(Long sequencial, String codigo, String codigoEAN, String descricao, String tipoProduto, String estiloProduto, String corProduto) {
                super();
                this.sequencial = sequencial;
                this.codigo = codigo;
                this.codigoEAN = codigoEAN;
                this.descricao = descricao;
                this.tipo = tipoProduto;
                this.estilo= estiloProduto;
                this.cor = corProduto;
        }
       
        public ProdutoDTO(Long sequencialProduto, String codigo,
                        String codigoEAN, String codigoEANTributado, String descricao, String tipoProduto, String estiloProduto,
                        String cor) {
                this.codigo = codigo;
                this.codigoEAN = codigoEAN;
                this.codigoEANTributado = codigoEANTributado;
                this.descricao = descricao;
                this.tipo = tipoProduto;
                this.estilo = estiloProduto;
                this.cor = cor;
        }
       
        public ProdutoDTO(Long sequencial, String codigo, String tipo, ModeloDTO modeloDTO, String estilo, String descricao, String cor, String codigoEAN) {
                this.sequencial = sequencial;
                this.codigo = codigo;
                this.tipo = tipo;
                this.modeloDTO = modeloDTO;
                this.estilo = estilo;
                this.descricao = descricao;
                this.cor = cor;
                this.codigoEAN = codigoEAN;
        }
       
        public ProdutoDTO(Long sequencial, String codigo, String descricao) {
                this.sequencial = sequencial;
                this.codigo = codigo;
                this.descricao = descricao;
        }
       
        public ProdutoDTO(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        /*
        public static String CONSULTA_DTO_COMPLETA = "e.sequencial, e.notaFiscal.sequencial, e.produto.sequencial, "
                        + "e.quantidade";
        public ProdutoDTO(Long sequencial, Long sequencialNotaFiscal, Long sequencialProduto, Integer quantidade) {
                super();
                this.sequencial = sequencial;
                this.sequencialNotaFiscal = sequencialNotaFiscal;
                this.sequencialProduto = sequencialProduto;
                this.quantidade = quantidade;
        }
*/


        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }

        public String getCodigo() {
                return codigo;
        }
        public void setCodigo(String codigo) {
                this.codigo = codigo;
        }
       
        public String getCodigoRapido() {
                return codigoRapido;
        }
        public void setCodigoRapido(String codigoRapido) {
                this.codigoRapido = codigoRapido;
        }
       
        public String getCodigoEAN() {
                return codigoEAN;
        }
        public void setCodigoEAN(String codigoEAN) {
                this.codigoEAN = codigoEAN;
        }

        public String getCodigoEANTributado() {
                return codigoEANTributado;
        }
        public void setCodigoEANTributado(String codigoEANTributado) {
                this.codigoEANTributado = codigoEANTributado;
        }

        public String getDescricao() {
                return descricao;
        }
        public void setDescricao(String descricao) {
                this.descricao = descricao;
        }

        public String getTipo() {
                return tipo;
        }
        public void setTipo(String tipo) {
                this.tipo = tipo;
        }

        public String getEstilo() {
                return estilo;
        }
        public void setEstilo(String estilo) {
                this.estilo = estilo;
        }
        public String getDescricaoDoEstilo() {
                return VerificadorUtil.naoEstaNuloOuVazio(getEstilo())? TipoEstiloProduto.parse(getEstilo()).getDescricao() : null;
        }

        public String getCor() {
                return cor;
        }
        public void setCor(String cor) {
                this.cor = cor;
        }
        public String getDescricaoDaCor() {
                return VerificadorUtil.naoEstaNuloOuVazio(getCor())? TipoCorProduto.parse(getCor()).getDescricao() : null;
        }
       
        public String getGenero() {
                return genero;
        }
        public void setGenero(String genero) {
                this.genero = genero;
        }

        public String getCodigoNCM() {
                return codigoNCM;
        }
        public void setCodigoNCM(String codigoNCM) {
                this.codigoNCM = codigoNCM;
        }

        public String getCodigoEST() {
                return codigoEST;
        }
        public void setCodigoEST(String codigoEST) {
                this.codigoEST = codigoEST;
        }

        public ModeloDTO getModeloDTO() {
                return modeloDTO;
        }
        public void setModeloDTO(ModeloDTO modeloDTO) {
                this.modeloDTO = modeloDTO;
        }
        public String getDescricaoDoModelo() {
                return VerificadorUtil.naoEstaNulo(getModeloDTO())? getModeloDTO().getDescricao() : "";
        }
       
        public MarcaDTO getMarcaDTODoModelo() {
                return VerificadorUtil.naoEstaNulo(getModeloDTO())? getModeloDTO().getMarcaDTO() : null;
        }
       
        public TributacaoDTO getTributacaoDTO() {
                return tributacaoDTO;
        }
        public void setTributacaoDTO(TributacaoDTO tributacaoDTO) {
                this.tributacaoDTO = tributacaoDTO;
        }
       
        public String getCodigoNCMDaTributacao() {
                return VerificadorUtil.naoEstaNulo(getTributacaoDTO())? getTributacaoDTO().getCodigoNCM() : null;
        }
       
        public String getCodigoESTDaTributacao() {
                return VerificadorUtil.naoEstaNulo(getTributacaoDTO())? getTributacaoDTO().getCodigoEST() : null;
        }
       
        public Boolean getSujeitoST() {
                return sujeitoST;
        }
        public void setSujeitoST(Boolean sujeitoST) {
                this.sujeitoST = sujeitoST;
        }
       
        public Boolean getAtivo() {
                return ativo;
        }
        public void setAtivo(Boolean ativo) {
                this.ativo = ativo;
        }
       
        public Boolean getIndicadorRealizarTransferencia() {
                return indicadorRealizarTransferencia;
        }
        public void setIndicadorRealizarTransferencia(Boolean indicadorRealizarTransferencia) {
                this.indicadorRealizarTransferencia = indicadorRealizarTransferencia;
        }
       
        /***************************************/
       
        public String getCodigoProdutoPadrao() {
                try {
                        return VerificadorUtil.naoEstaNulo(codigo) ? String.format("%06d", new Long(codigo.trim())) : "";
                } catch (Exception e) {
                        return "";
                }
        }
       
        public static String retornarCodigoProdutoPadrao(String codigo) {
                try {
                        return VerificadorUtil.naoEstaNulo(codigo) ? String.format("%06d", new Long(codigo.trim())) : "";
                } catch (Exception e) {
                        return "";
                }
        }
       
        public String getDescricaoNotaFiscal(String observacaoNotaFiscal) {
                StringBuilder descricaoCompleta = new StringBuilder();
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
                        descricaoCompleta.append("CAPA");
                }
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
                        descricaoCompleta.append(" ");
                        descricaoCompleta.append(this.getDescricaoDoModelo());
                }
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
                        descricaoCompleta.append(" ");
                        descricaoCompleta.append(this.getDescricaoDoEstilo());
                }
                descricaoCompleta.append(" ");
                if (this.getDescricao().length() > 50) {
                        descricaoCompleta.append(this.getDescricao().substring(0, 50));
                } else {
                        descricaoCompleta.append(this.getDescricao());
                }
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getCor())) {
                        descricaoCompleta.append(" (");
                        descricaoCompleta.append(this.getDescricaoDaCor());
                        descricaoCompleta.append(")");
                }
                if (VerificadorUtil.naoEstaNuloOuVazio(observacaoNotaFiscal)) {
                        descricaoCompleta.append(" ");
                        descricaoCompleta.append(observacaoNotaFiscal);
                }
                return descricaoCompleta.toString().trim();
        }
       
        public String getDescricaoCompleta() {
                StringBuilder descricaoCompleta = new StringBuilder();
                if (VerificadorUtil.naoEstaNuloOuVazio(getEstilo())) {
                        descricaoCompleta.append(getDescricaoDoEstilo());
                        descricaoCompleta.append(" ");
                }
                descricaoCompleta.append(getDescricao());
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
                        descricaoCompleta.append(" (");
                        descricaoCompleta.append(getDescricaoDaCor());
                        descricaoCompleta.append(")");
                }
                return descricaoCompleta.toString();
        }
       
        public String getDescricaoComModeloCompleta() {
                StringBuilder descricaoCompleta = new StringBuilder();
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
                        descricaoCompleta.append(getDescricaoDoModelo());
                        descricaoCompleta.append(" - ");
                }
                descricaoCompleta.append(getDescricaoCompleta());
                return descricaoCompleta.toString();
        }
       
        public String getDescricaoComModeloCompletaComCodigo() {
                StringBuilder descricaoCompleta = new StringBuilder();
                descricaoCompleta.append("[");
                descricaoCompleta.append(getCodigoProdutoPadrao());
                descricaoCompleta.append("] ");
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
                        descricaoCompleta.append(getDescricaoDoModelo());
                        descricaoCompleta.append(" - ");
                }
                descricaoCompleta.append(getDescricaoCompleta());
                return descricaoCompleta.toString();
        }
       
        public String getDescricaoTecnicaDoModeloComParenteses() {
                return VerificadorUtil.naoEstaNulo(getModeloDTO())? VerificadorUtil.naoEstaNulo(getModeloDTO().getDescricaoTecnica())? " (" + getModeloDTO().getDescricaoTecnica() + ") " : "" : "";
        }
       
        @Transient
        public String getDescricaoDaMarcaDoModelo() {
                return VerificadorUtil.naoEstaNulo(getMarcaDTODoModelo())? getMarcaDTODoModelo().getDescricao() : "";
        }

        @Override
        public int hashCode() {
                return Objects.hash(sequencial);
        }

        @Override
        public boolean equals(Object obj) {
                if (this == obj)
                        return true;
                if (obj == null)
                        return false;
                if (getClass() != obj.getClass())
                        return false;
                ProdutoDTO other = (ProdutoDTO) obj;
                return Objects.equals(sequencial, other.sequencial);
        }
       
}