package br.com.ec.domain.model;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
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.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.validator.constraints.NotEmpty;
import br.com.ec.core.interfaces.Alterar;
import br.com.ec.core.interfaces.Cadastrar;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.tipos.TipoCorProduto;
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
import br.com.ec.domain.model.tipos.TipoGenero;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.shared.ConstantesSEC;
@
Entity
@Table
(name=
"sec_produto", schema=
"sc_sec")
public class Produto
implements Serializable,
Cloneable {
private static final long serialVersionUID = 1L
;
private Long sequencial
;
private Modelo modelo
;
private Tributacao tributacao
;
private String codigo
;
private String codigoRapido
;
private String codigoEAN
;
private String codigoEANTributado
;
private String descricao
;
private String descricaoEtiqueta
;
private String descricaoParaNotaFiscal
;
private String tipo
;
private String genero
;
private String estilo
;
private String cor
;
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 Double valorVarejoSimulacao
;
private Boolean sujeitoST
;
private Double aliquotaIPI
;
private Double aliquotaIPINotaFiscal
;
private Double aliquotaIcms
;
private Double aliquotaIcmsNotaFiscal
;
private Double aliquotaIcmsST
;
private Double aliquotaFecoep
;
private Boolean ativo
;
private String codigoNCM
;
private String codigoEST
;
/*
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
;
// private Set<ProdutoArquivo> fotos;
public Produto
() {}
public Produto
(Long sequencial
) {
this.
sequencial = sequencial
;
}
@Id
@SequenceGenerator
(name =
"sq_produto")
@GeneratedValue
(strategy = GenerationType.
IDENTITY)
@Column
(name=
"seq_produto", nullable=
false)
public Long getSequencial
() {
return sequencial
;
}
public void setSequencial
(Long sequencial
) {
this.
sequencial = sequencial
;
}
// @Transient
@ManyToOne
@ForeignKey
(name=
"fk_produto_modelo")
@NotNull
(message =
"Parâmetro obrigatório não preenchido: Modelo do produto", groups =
{Cadastrar.
class, Alterar.
class})
@JoinColumn
(name =
"seq_modelo", referencedColumnName=
"seq_modelo", nullable=
true)
public Modelo getModelo
() {
return modelo
;
}
public void setModelo
(Modelo modelo
) {
this.
modelo = modelo
;
}
@Transient
public String getDescricaoDoModelo
() {
return VerificadorUtil.
naoEstaNulo(modelo
)? modelo.
getDescricao() :
"";
}
@ManyToOne
@ForeignKey
(name=
"fk_produto_tributacao")
@JoinColumn
(name =
"seq_tributacao", referencedColumnName=
"seq_tributacao", nullable=
true)
public Tributacao getTributacao
() {
return tributacao
;
}
public void setTributacao
(Tributacao tributacao
) {
this.
tributacao = tributacao
;
}
@Column
(name=
"cod_produto")
@Size
(max =
20, message =
"Limite de caracteres ultrapassado: Código do Produto")
@NotNull
(message =
"Parâmetro obrigatório não preenchido: Código do produto", groups =
{Cadastrar.
class, Alterar.
class})
@
NotEmpty(message =
"Parâmetro obrigatório não preenchido: Código do produto", groups =
{Cadastrar.
class, Alterar.
class})
public String getCodigo
() {
return codigo
;
}
public void setCodigo
(String codigo
) {
this.
codigo = codigo
;
}
@Column
(name=
"cod_rapido_produto")
@Size
(max =
20, message =
"Limite de caracteres ultrapassado: Código Rápido")
public String getCodigoRapido
() {
return codigoRapido
;
}
public void setCodigoRapido
(String codigoRapido
) {
this.
codigoRapido = codigoRapido
;
}
@Column
(name=
"cod_ean")
@Size
(max =
20, message =
"Limite de caracteres ultrapassado: Código de Barras (EAN)")
public String getCodigoEAN
() {
return codigoEAN
;
}
public void setCodigoEAN
(String codigoEAN
) {
this.
codigoEAN = codigoEAN
;
}
@Column
(name=
"cod_ean_tributado")
@Size
(max =
20, message =
"Limite de caracteres ultrapassado: Código de Barras Tributado (EAN)")
public String getCodigoEANTributado
() {
return codigoEANTributado
;
}
public void setCodigoEANTributado
(String codigoEANTributado
) {
this.
codigoEANTributado = codigoEANTributado
;
}
@Column
(name=
"dsc_produto")
@Size
(max =
250, message =
"Limite de caracteres ultrapassado: Descrição do Produto")
public String getDescricao
() {
return descricao
;
}
public void setDescricao
(String descricao
) {
this.
descricao = StringUtil.
setarUpperCaseComTrim(descricao
);
}
@Column
(name=
"dsc_etiqueta")
@Size
(max =
120, message =
"Limite de caracteres ultrapassado: Descrição da Etiqueta")
public String getDescricaoEtiqueta
() {
return descricaoEtiqueta
;
}
public void setDescricaoEtiqueta
(String descricaoEtiqueta
) {
this.
descricaoEtiqueta = StringUtil.
setarUpperCaseComTrim(descricaoEtiqueta
);
}
// @Column(name="dsc_notafiscal")
// @Size(max = 250, message = "Limite de caracteres ultrapassado: Descrição para Nota Fiscal do Produto")
@Transient
public String getDescricaoParaNotaFiscal
() {
return descricaoParaNotaFiscal
;
}
public void setDescricaoParaNotaFiscal
(String descricaoParaNotaFiscal
) {
this.
descricaoParaNotaFiscal = descricaoParaNotaFiscal
;
}
@Column
(name=
"tip_produto")
@NotNull
(message =
"Parâmetro obrigatório não preenchido: Tipo do produto", groups =
{Cadastrar.
class, Alterar.
class})
public String getTipo
() {
return tipo
;
}
public void setTipo
(String tipo
) {
this.
tipo = tipo
;
}
@Column
(name=
"tip_genero")
@NotNull
(message =
"Parâmetro obrigatório não preenchido: Gênero", groups =
{Cadastrar.
class, Alterar.
class})
public String getGenero
() {
return genero
;
}
public void setGenero
(String genero
) {
this.
genero = genero
;
}
@Column
(name=
"tip_estilo")
public String getEstilo
() {
return estilo
;
}
public void setEstilo
(String estilo
) {
this.
estilo = estilo
;
}
@Column
(name=
"tip_cor")
public String getCor
() {
return cor
;
}
public void setCor
(String cor
) {
this.
cor = cor
;
}
@Column
(name=
"dsc_observacao")
@Size
(max =
1000, message =
"Limite de caracteres ultrapassado: Observação")
public String getObservacao
() {
return observacao
;
}
public void setObservacao
(String observacao
) {
this.
observacao = StringUtil.
setarUpperCaseComTrim(observacao
);
}
@Column
(name=
"val_compra")
public Double getValorCompra
() {
return valorCompra
;
}
public void setValorCompra
(Double valorCompra
) {
this.
valorCompra = valorCompra
;
}
@Transient
public String valorCompraFormatado
() {
if (VerificadorUtil.
naoEstaNulo(getValorCompra
())) {
return StringUtil.
formatarValor(getValorCompra
());
}
return StringUtil.
formatarValor(0.0);
}
@Column
(name=
"val_varejo")
public Double getValorVarejo
() {
return valorVarejo
;
}
public void setValorVarejo
(Double valorVarejo
) {
this.
valorVarejo = valorVarejo
;
}
@Column
(name=
"val_varejo_promocional")
public Double getValorVarejoPromocional
() {
return valorVarejoPromocional
;
}
public void setValorVarejoPromocional
(Double valorVarejoPromocional
) {
this.
valorVarejoPromocional = valorVarejoPromocional
;
}
@Column
(name=
"val_varejo_maximo")
public Double getValorVarejoMaximo
() {
return valorVarejoMaximo
;
}
public void setValorVarejoMaximo
(Double valorVarejoMaximo
) {
this.
valorVarejoMaximo = valorVarejoMaximo
;
}
@Column
(name=
"val_varejo_popular")
public Double getValorVarejoPopular
() {
return valorVarejoPopular
;
}
public void setValorAtacado
(Double valorAtacado
) {
this.
valorAtacado = valorAtacado
;
}
@Column
(name=
"val_atacado")
public Double getValorAtacado
() {
return valorAtacado
;
}
public void setValorVarejoPopular
(Double valorVarejoPopular
) {
this.
valorVarejoPopular = valorVarejoPopular
;
}
@Column
(name=
"dat_online")
public Date getDataOnline
() {
return dataOnline
;
}
public void setDataOnline
(Date dataOnline
) {
this.
dataOnline = dataOnline
;
}
@Column
(name=
"dat_online_shoplog")
public Date getDataOnlineShoplog
() {
return dataOnlineShoplog
;
}
public void setDataOnlineShoplog
(Date dataOnlineShoplog
) {
this.
dataOnlineShoplog = dataOnlineShoplog
;
}
@Column
(name=
"dat_online_mercadolivre")
public Date getDataOnlineMercadoLivre
() {
return dataOnlineMercadoLivre
;
}
public void setDataOnlineMercadoLivre
(Date dataOnlineMercadoLivre
) {
this.
dataOnlineMercadoLivre = dataOnlineMercadoLivre
;
}
@Column
(name=
"ind_favorito")
public Boolean getIndicadorFavorito
() {
return indicadorFavorito
;
}
public void setIndicadorFavorito
(Boolean indicadorFavorito
) {
this.
indicadorFavorito = indicadorFavorito
;
}
@Column
(name=
"ind_comissionado")
public Boolean getIndicadorComissionado
() {
return indicadorComissionado
;
}
public void setIndicadorComissionado
(Boolean indicadorComissionado
) {
this.
indicadorComissionado = indicadorComissionado
;
}
@Column
(name=
"ind_personalizavel")
public Boolean getIndicadorPersonalizavel
() {
return indicadorPersonalizavel
;
}
public void setIndicadorPersonalizavel
(Boolean indicadorPersonalizavel
) {
this.
indicadorPersonalizavel = indicadorPersonalizavel
;
}
@Column
(name=
"ind_emissao_nf")
public Boolean getIndicadorEmissaoNotaFiscal
() {
if (VerificadorUtil.
estaNulo(indicadorEmissaoNotaFiscal
)) {
return false;
}
return indicadorEmissaoNotaFiscal
;
}
public void setIndicadorEmissaoNotaFiscal
(Boolean indicadorEmissaoNotaFiscal
) {
this.
indicadorEmissaoNotaFiscal = indicadorEmissaoNotaFiscal
;
}
@Column
(name=
"ind_sujeito_st", nullable=
false)
public Boolean getSujeitoST
() {
if (VerificadorUtil.
estaNulo(sujeitoST
)) {
return false;
}
return sujeitoST
;
}
public void setSujeitoST
(Boolean sujeitoST
) {
this.
sujeitoST = sujeitoST
;
}
@Transient
public Double getValorVarejoSimulacao
() {
if (VerificadorUtil.
estaNulo(valorVarejoSimulacao
)) {
return getValorVarejo
();
}
return valorVarejoSimulacao
;
}
public void setValorVarejoSimulacao
(Double valorVarejoSimulacao
) {
this.
valorVarejoSimulacao = valorVarejoSimulacao
;
}
@Transient
public Double getValorEm18x
() {
if (VerificadorUtil.
naoEstaNulo(getValorVarejo
())) {
return getValorVarejo
() * 1.12;
}
return 0.0;
}
@Transient
public Double getJurosValorEm18x
() {
if (VerificadorUtil.
naoEstaNulo(getValorEm18x
()) &&
VerificadorUtil.
naoEstaNulo(getValorVarejo
())) {
return getValorEm18x
() - getValorVarejo
();
}
return 0.0;
}
@Transient
public Double getParcelasValorEm18x
() {
if (VerificadorUtil.
naoEstaNulo(getValorEm18x
())) {
if (getValorEm18x
() > 0.0) {
return getValorEm18x
()/
18;
}
}
return 0.0;
}
@Column
(name=
"val_aliquota_icms")
public Double getAliquotaIcms
() {
return aliquotaIcms
;
}
public void setAliquotaIcms
(Double aliquotaIcms
) {
this.
aliquotaIcms = aliquotaIcms
;
}
@Transient
public Double getAliquotaIcmsNotaFiscal
() {
return aliquotaIcmsNotaFiscal
;
}
public void setAliquotaIcmsNotaFiscal
(Double aliquotaIcmsNotaFiscal
) {
this.
aliquotaIcmsNotaFiscal = aliquotaIcmsNotaFiscal
;
}
@Column
(name=
"val_aliquota_icms_st")
public Double getAliquotaIcmsST
() {
return aliquotaIcmsST
;
}
public void setAliquotaIcmsST
(Double aliquotaIcmsST
) {
this.
aliquotaIcmsST = aliquotaIcmsST
;
}
@Column
(name=
"val_aliquota_fecoep")
public Double getAliquotaFecoep
() {
return aliquotaFecoep
;
}
public void setAliquotaFecoep
(Double aliquotaFecoep
) {
this.
aliquotaFecoep = aliquotaFecoep
;
}
@Column
(name=
"val_aliquota_ipi")
public Double getAliquotaIPI
() {
return aliquotaIPI
;
}
public void setAliquotaIPI
(Double aliquotaIPI
) {
this.
aliquotaIPI = aliquotaIPI
;
}
@Transient
public Double getAliquotaIPINotaFiscal
() {
return aliquotaIPINotaFiscal
;
}
public void setAliquotaIPINotaFiscal
(Double aliquotaIPINotaFiscal
) {
this.
aliquotaIPINotaFiscal = aliquotaIPINotaFiscal
;
}
@Column
(name=
"ind_ativo")
public Boolean getAtivo
() {
return ativo
;
}
public void setAtivo
(Boolean ativo
) {
this.
ativo = ativo
;
}
/*
@OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
public Set<ProdutoPedidoCompra> getPedidosCompra() {
return pedidosCompra;
}
public void setPedidosCompra(Set<ProdutoPedidoCompra> pedidosCompra) {
this.pedidosCompra = pedidosCompra;
}
@OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
public Set<ProdutoLoja> getEstoques() {
return estoques;
}
public void setEstoques(Set<ProdutoLoja> estoques) {
this.estoques = estoques;
}
@OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
public Set<FornecedorProduto> getFornecedores() {
return fornecedores;
}
public void setFornecedores(Set<FornecedorProduto> fornecedores) {
this.fornecedores = fornecedores;
}
*/
@OneToMany
(mappedBy=
"produto", cascade=CascadeType.
ALL, orphanRemoval=
true)
public Set<ProdutoRelacionado
> getRelacionados
() {
return relacionados
;
}
public void setRelacionados
(Set<ProdutoRelacionado
> relacionados
) {
this.
relacionados = relacionados
;
}
/*
@OneToMany(mappedBy="produtoRelacionado", cascade=CascadeType.ALL, orphanRemoval=true)
public Set<ProdutoRelacionado> getRelacionadosReverse() {
return relacionadosReverse;
}
public void setRelacionadosReverse(Set<ProdutoRelacionado> relacionadosReverse) {
this.relacionadosReverse = relacionadosReverse;
}
*/
@Transient
public Boolean getIndicadorOnline
() {
if (VerificadorUtil.
estaNulo(this.
getDataOnline()) && VerificadorUtil.
estaNulo(this.
indicadorOnline)) {
setIndicadorOnline
(false);
} else {
setIndicadorOnline
(true);
}
return indicadorOnline
;
}
public void setIndicadorOnline
(Boolean indicadorOnline
) {
this.
indicadorOnline = indicadorOnline
;
}
public void atualizarDataOnline
() {
if (VerificadorUtil.
estaNulo(this.
getDataOnline())) {
this.
setDataOnline(DataUtils.
getDataAtual());
} else {
this.
setDataOnline(null);
}
}
@Transient
public Boolean getIndicadorOnlineShoplog
() {
if (VerificadorUtil.
estaNulo(this.
getDataOnlineShoplog()) && VerificadorUtil.
estaNulo(this.
indicadorOnlineShoplog)) {
setIndicadorOnlineShoplog
(false);
} else {
setIndicadorOnlineShoplog
(true);
}
return indicadorOnlineShoplog
;
}
public void setIndicadorOnlineShoplog
(Boolean indicadorOnlineShoplog
) {
this.
indicadorOnlineShoplog = indicadorOnlineShoplog
;
}
public void atualizarDataOnlineShoplog
() {
if (VerificadorUtil.
estaNulo(this.
getDataOnlineShoplog())) {
this.
setDataOnlineShoplog(DataUtils.
getDataAtual());
} else {
this.
setDataOnlineShoplog(null);
}
}
@Transient
public Boolean getIndicadorOnlineMercadoLivre
() {
if (VerificadorUtil.
estaNulo(this.
getDataOnlineMercadoLivre()) && VerificadorUtil.
estaNulo(this.
indicadorOnlineMercadoLivre)) {
setIndicadorOnlineMercadoLivre
(false);
} else {
setIndicadorOnlineMercadoLivre
(true);
}
return indicadorOnlineMercadoLivre
;
}
public void setIndicadorOnlineMercadoLivre
(Boolean indicadorOnlineMercadoLivre
) {
this.
indicadorOnlineMercadoLivre = indicadorOnlineMercadoLivre
;
}
public void atualizarDataOnlineMercadoLivre
() {
if (VerificadorUtil.
estaNulo(this.
getDataOnlineMercadoLivre())) {
this.
setDataOnlineMercadoLivre(DataUtils.
getDataAtual());
} else {
this.
setDataOnlineMercadoLivre(null);
}
}
/*
@Transient
public List<TransferenciaProduto> getTransferenciasAbertas() {
return transferenciasAbertas;
}
public void setTransferenciasAbertas(List<TransferenciaProduto> transferenciasAbertas) {
this.transferenciasAbertas = transferenciasAbertas;
}
@Transient
public List<PedidoProduto> getPedidosPendentes() {
return pedidosPendentes;
}
public void setPedidosPendentes(List<PedidoProduto> pedidosPendentes) {
this.pedidosPendentes = pedidosPendentes;
}
*/
@Transient
public Date getDataUltimaVenda
() {
return dataUltimaVenda
;
}
public void setDataUltimaVenda
(Date dataUltimaVenda
) {
this.
dataUltimaVenda = dataUltimaVenda
;
}
@Transient
public Integer getQuantidadeDiasUltimaVenda
() {
if (VerificadorUtil.
naoEstaNulo(getDataUltimaVenda
())) {
return DataUtils.
calcularDiferenceEmDiasEntreDuasDatas(DataUtils.
getDataAtual(), getDataUltimaVenda
());
}
return null;
}
/*
@Transient
public ArrayList<ProdutoRelacionado> getCompativeis() {
ArrayList<ProdutoRelacionado> compativeis = new ArrayList<ProdutoRelacionado>();
if (VerificadorUtil.naoEstaNulo(getRelacionados())) {
compativeis.addAll(getRelacionados());
}
if (VerificadorUtil.naoEstaNulo(getRelacionadosReverse())) {
compativeis.addAll(getRelacionadosReverse());
}
return compativeis;
}
*/
@Transient
public String getCodigoNCM
() {
return codigoNCM
;
}
public void setCodigoNCM
(String codigoNCM
) {
this.
codigoNCM = codigoNCM
;
}
@Transient
public String getCodigoEST
() {
return codigoEST
;
}
public void setCodigoEST
(String codigoEST
) {
this.
codigoEST = codigoEST
;
}
/*
@OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
public Set<ProdutoArquivo> getFotos() {
return fotos;
}
public void setFotos(Set<ProdutoArquivo> fotos) {
this.fotos = fotos;
}
*/
/***************************************************************/
@Transient
public String getCodigoProdutoPadrao
() {
try {
return VerificadorUtil.
naoEstaNulo(codigo
) ? String.
format("%06d",
new Long(codigo.
trim())) :
"";
} catch (Exception e
) {
return "";
}
}
public static void main
(String[] args
) {
// System.out.println(String.format("%07d", new Long(12879)));
// codigoBarras.gerarCodigoBarra(String.format("%012d", new Long(12879)));
// System.out.println(codigoBarras.getCodigoBarra());
//System.out.println(CodigoBarraEAN.gerarCodigoBarras("6659"));
// System.out.println(codigoBarras.longToEan13("900000012879"));
}
@Transient
public String getCodigoDeBarrasProdutoPadrao
() {
try {
return VerificadorUtil.
naoEstaNulo(codigo
)? String.
format("%07d",
new Long(codigo
)) :
"";
// return VerificadorUtil.naoEstaNulo(codigo) ? StringUtils.rightPad(codigo, 12, "0") : "";
} catch (Exception e
) {
return "";
}
}
/*
@Transient
public String getDescricaoTecnicaDoModelo() {
return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? modelo.getDescricaoTecnica() : "" : "";
}
@Transient
public String getDescricaoTecnicaDoModeloComParenteses() {
return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? " (" + modelo.getDescricaoTecnica() + ") " : "" : "";
}
@Transient
public Long getSequencialDoModelo() {
return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
}
@Transient
public Marca getMarcaDoModelo() {
if (VerificadorUtil.naoEstaNulo(modelo)) {
if (VerificadorUtil.naoEstaNulo(modelo.getMarca())) {
return modelo.getMarca();
}
}
return null;
}
@Transient
public String getDescricaoDaMarcaDoModelo() {
return VerificadorUtil.naoEstaNulo(getMarcaDoModelo())? getMarcaDoModelo().getDescricao() : "";
}
@Transient
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();
}
*/
@Transient
public String getDescricaoComModeloCompleta
() {
StringBuilder descricaoCompleta =
new StringBuilder();
if (VerificadorUtil.
naoEstaNuloOuVazio(getDescricaoDoModelo
())) {
descricaoCompleta.
append(getDescricaoDoModelo
());
descricaoCompleta.
append(" - ");
}
descricaoCompleta.
append(getDescricaoCompleta
());
return descricaoCompleta.
toString();
}
@Transient
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();
}
/*
@Transient
public String getDescricaoCompletaCapa() {
StringBuilder descricaoCompleta = new StringBuilder();
descricaoCompleta.append(getCodigo());
descricaoCompleta.append(" - ");
if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
descricaoCompleta.append("CAPA");
}
if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
descricaoCompleta.append(" ");
descricaoCompleta.append(getDescricaoDoModelo());
}
if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
descricaoCompleta.append(" ");
descricaoCompleta.append(getDescricaoDoEstilo());
}
descricaoCompleta.append(" ");
if (this.getDescricao().length() > 50) {
descricaoCompleta.append(getDescricao().substring(0, 50));
} else {
descricaoCompleta.append(getDescricao());
}
if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
descricaoCompleta.append(" (");
descricaoCompleta.append(getDescricaoDaCor());
descricaoCompleta.append(")");
}
return descricaoCompleta.toString();
}
*/
@Transient
public String getDescricaoDoTipo
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipo
())? TipoProduto.
parse(getTipo
()).
getDescricao() :
null;
}
@Transient
public String getDescricaoDoGenero
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getGenero
())? TipoGenero.
parse(getGenero
()).
getDescricao() :
null;
}
@Transient
public String getDescricaoDoEstilo
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getEstilo
())? TipoEstiloProduto.
parse(getEstilo
()).
getDescricao() :
null;
}
@Transient
public String getDescricaoDaCor
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getCor
())? TipoCorProduto.
parse(getCor
()).
getDescricao() :
null;
}
@Transient
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()) //!this.getTipo().equals(TipoProduto.RESTAURANTE.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();
}
@Transient
public Integer getQuantidadeEstoqueTotal
() {
Integer total =
0;
/*
for (ProdutoLoja estoque : estoques) {
total = total + estoque.getQuantidadeEstoque();
}
*/
return total
;
}
@Transient
public Boolean verificarSeQuantidadeEhMenor
(Integer primeiro,
Integer segundo
) {
if (VerificadorUtil.
naoEstaNulo(primeiro
) && VerificadorUtil.
naoEstaNulo(segundo
)) {
return primeiro
<= segundo
? true :
false;
}
return false;
}
public void atualizarDados
(Produto produto
) {
this.
codigo = produto.
getCodigo();
this.
descricao = produto.
getDescricao();
this.
valorCompra = produto.
getValorCompra();
this.
valorVarejo = produto.
getValorVarejo();
if (produto.
getQuantidadeEstoqueTotal() > 0) {
this.
setAtivo(true);
}
}
/*
public void atualizarDadosNfe(nfce.java.TNFe.InfNFe.Det produtoNota) {
if (VerificadorUtil.estaNuloOuVazio(this.getDescricao())) {
this.setDescricao(produtoNota.getProd().getXProd());
}
if (VerificadorUtil.estaNuloOuVazio(this.getGenero())) {
this.setGenero(TipoGenero.UNISSEX.getValor());
}
this.setCodigoEAN(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEAN()));
this.setCodigoEANTributado(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEANTrib()));
if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getNCM())) {
this.setCodigoNCM(produtoNota.getProd().getNCM());
}
if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getCEST())) {
this.setCodigoEST(produtoNota.getProd().getCEST());
}
for (JAXBElement<?> elemento : produtoNota.getImposto().getContent()) {
if (elemento.getDeclaredType().equals(nfce.java.TNFe.InfNFe.Det.Imposto.ICMS.class)) {
nfce.java.TNFe.InfNFe.Det.Imposto.ICMS icms = (nfce.java.TNFe.InfNFe.Det.Imposto.ICMS) elemento.getValue();
if (VerificadorUtil.naoEstaNulo(icms.getICMS00())) {
preencherAliquotaIcms(Double.valueOf(icms.getICMS00().getPICMS()));
}
if (VerificadorUtil.naoEstaNulo(icms.getICMS10())) {
preencherAliquotaIcms(Double.valueOf(icms.getICMS10().getPICMS()));
}
}
if (elemento.getDeclaredType().equals(nfce.java.TIpi.class)) {
nfce.java.TIpi ipi = (nfce.java.TIpi) elemento.getValue();
if (VerificadorUtil.naoEstaNulo(ipi.getIPITrib())) {
Double aliquotaIPITrib = Double.valueOf(ipi.getIPITrib().getPIPI());
if (aliquotaIPITrib > 0.0) {
this.setAliquotaIPINotaFiscal(aliquotaIPITrib);
}
}
}
}
if (VerificadorUtil.estaNulo(getAliquotaIcms())) {
this.setAliquotaIcmsNotaFiscal(0.0);
this.setAliquotaIcms(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_INTERNA_ICMS_PADRAO_12);
}
if (VerificadorUtil.estaNulo(this.getValorCompra())) {
if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnCom())) {
this.setValorCompra(retornarValorComDesconto(produtoNota.getProd()));
}
}
}
private void preencherAliquotaIcms(Double aliquotaIcms) {
if (aliquotaIcms > 0.0) {
this.setAliquotaIcmsNotaFiscal(aliquotaIcms);
this.setAliquotaIcms(aliquotaIcms);
} else {
this.setAliquotaIcmsNotaFiscal(0.0);
this.setAliquotaIcms(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_INTERNA_ICMS_PADRAO_12);
}
}
public Double retornarValorComDesconto(nfce.java.TNFe.InfNFe.Det.Prod produto) {
Double valor = 0.0;
if (VerificadorUtil.naoEstaNuloOuVazio(produto.getVDesc())) {
valor = (new Double(produto.getVProd()) - new Double(produto.getVDesc())) / new Double(produto.getQCom()).intValue();
} else {
valor = new Double(produto.getVUnCom());
}
return valor;
}
*/
public Double retornarLucroBruto
() {
if (VerificadorUtil.
naoEstaNulo(getValorCompra
()) && VerificadorUtil.
naoEstaNulo(getValorVarejo
())) {
if (VerificadorUtil.
naoEstaNulo(getValorVarejoPromocional
())) {
return (getValorVarejoPromocional
() / getValorCompra
()) -
1.0;
} else {
return (getValorVarejo
() / getValorCompra
()) -
1.0;
}
}
return 0.0;
}
public Double retornarMargemBruta
() {
if (VerificadorUtil.
naoEstaNulo(getValorCompra
()) && VerificadorUtil.
naoEstaNulo(getValorVarejo
())) {
if (VerificadorUtil.
naoEstaNulo(getValorVarejoPromocional
())) {
return (100 -
(getValorCompra
()*100/getValorVarejoPromocional
())) /
100;
} else {
return (100 -
(getValorCompra
()*100/getValorVarejo
())) /
100;
}
}
return 0.0;
}
public Double retornarValorMargemBruta
() {
Double margemBruta = retornarMargemBruta
();
if (margemBruta
> 0.0) {
if (VerificadorUtil.
naoEstaNulo(getValorVarejoPromocional
())) {
return margemBruta
* getValorVarejoPromocional
();
} else {
return margemBruta
* getValorVarejo
();
}
}
return 0.0;
}
@Transient
public String retornarCorMargem
() {
Double margemBruta = retornarMargemBruta
();
if (margemBruta
> 0.50) return "green";
if (margemBruta
> 0.34) return "orange";
if (margemBruta
< 0.35) return "red";
return "black";
}
@Transient
public String retornarCorMargemLucro
() {
Double margemBruta = calculoMargemAposCustos
();
if (margemBruta
> 29.99) return "green";
if (margemBruta
> 14.99) return "orange";
if (margemBruta
< 15.0) return "red";
return "black";
}
/*
@Transient
public String getFornecedorMenorValorComprado(Fornecedor fornecedorComprar) {
FornecedorProduto menorValor = null;
for (FornecedorProduto fornecedorProduto : this.getFornecedores()) {
if (menorValor == null) {
menorValor = fornecedorProduto;
} else {
if (VerificadorUtil.estaNulo(menorValor.getValorCompra()) &&
VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
menorValor = fornecedorProduto;
}
if (VerificadorUtil.naoEstaNulo(menorValor.getValorCompra()) &&
VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
if (menorValor.getValorCompra() > fornecedorProduto.getValorCompra()) {
menorValor = fornecedorProduto;
}
}
}
}
String menorValorComprado = "";
if (VerificadorUtil.naoEstaNulo(menorValor)) {
menorValorComprado = "R$ " + formatarValor(menorValor.getValorCompra());
if (VerificadorUtil.naoEstaNulo(menorValor.getFornecedor().getNomeDaPessoa())) {
if (!menorValor.getFornecedor().equals(fornecedorComprar)) {
menorValorComprado = menorValorComprado + ", " + menorValor.getFornecedor().getNomeDaPessoa();
if (VerificadorUtil.naoEstaNulo(menorValor.getIdentificador())) {
menorValorComprado = menorValorComprado + ", ID: " + menorValor.getIdentificador();
}
}
}
}
return menorValorComprado;
}
*/
private String formatarValor
(Double valor
) {
return VerificadorUtil.
naoEstaNulo(valor
)? String.
format("%.2f", valor
) :
"0,00";
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
result = prime
* result +
((codigo ==
null) ? 0 : codigo.
hashCode());
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;
Produto other =
(Produto
) obj
;
if (codigo ==
null) {
if (other.
codigo !=
null)
return false;
} else if (!codigo.
equals(other.
codigo))
return false;
if (sequencial ==
null) {
if (other.
sequencial !=
null)
return false;
} else if (!sequencial.
equals(other.
sequencial))
return false;
return true;
}
@Transient
public void prepararNovoProduto
() {
setAtivo
(true);
setIndicadorFavorito
(false);
setIndicadorComissionado
(true);
setIndicadorEmissaoNotaFiscal
(false);
setSujeitoST
(false);
}
@Transient
public boolean tipoProdutoEhCapa
() {
return getTipo
().
equals(TipoProduto.
CAPA.
getValor());
}
@Transient
public boolean tipoProdutoEhPelicula
() {
return getTipo
().
equals(TipoProduto.
PELICULA.
getValor());
}
@Transient
public boolean tipoProdutoEhCapaOuAcessorio
() {
return tipoProdutoEhCapa
() || getTipo
().
equals(TipoProduto.
ACESSORIO.
getValor());
}
@Transient
public boolean tipoProdutoEhCapaOuPelicula
() {
return tipoProdutoEhCapa
() || tipoProdutoEhPelicula
();
}
@Transient
public boolean tipoProdutoEhServico
() {
return getTipo
().
equals(TipoProduto.
SERVICO.
getValor());
}
/*@Transient
public boolean tipoProdutoEhRemedioOuOutros() {
return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
getTipo().equals(TipoProduto.OUTROS.getValor());
}*/
@Transient
public boolean tipoProdutoTributado
() {
return getTipo
().
equals(TipoProduto.
ACESSORIO.
getValor()) ||
getTipo
().
equals(TipoProduto.
APARELHOS.
getValor()) ||
getTipo
().
equals(TipoProduto.
CAPA.
getValor()) ||
getTipo
().
equals(TipoProduto.
PELICULA.
getValor());
}
@Transient
public boolean tipoProdutoNaoTributado
() {
return /*getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
getTipo().equals(TipoProduto.OUTROS.getValor()) ||*/
getTipo
().
equals(TipoProduto.
SERVICO.
getValor());
}
/*
@Transient
public Boolean verificarSeCodigoEhIgual(String codigoProduto) {
if (codigoProduto.length() > 6 && VerificadorUtil.naoEstaNuloOuVazio(this.getCodigoEAN())) {
if (this.getCodigoEAN().equals(codigoProduto)) {
return true;
}
}
if (CodigoBarraEAN.validarCodigoBarras(codigoProduto)) {
return this.getCodigoProdutoPadrao().equals(CodigoBarraEAN.retornarCodigoDoCodigoBarras(codigoProduto));
} else {
return this.getCodigoProdutoPadrao().equals(UtilBean.padraoCodigoProduto(codigoProduto));
}
}
*/
@Transient
public String getCodigoNCMDaTributacao
() {
return VerificadorUtil.
naoEstaNulo(getTributacao
())? getTributacao
().
getCodigoNCM() :
null;
}
@Transient
public String getCodigoESTDaTributacao
() {
return VerificadorUtil.
naoEstaNulo(getTributacao
())? getTributacao
().
getCodigoEST() :
null;
}
@
Override
public Produto clone
() throws CloneNotSupportedException {
return (Produto
) super.
clone();
}
/*
@Transient
public String corDaDescricaoPeloGenero() {
if (VerificadorUtil.naoEstaNulo(getGenero())) {
if (getGenero().equals(TipoGenero.MASCULINO.getValor())) return "#1c82df";
if (getGenero().equals(TipoGenero.FEMININO.getValor())) return "#f06364";
}
return "black";
}
*/
@Transient
public Boolean getProdutoEmPromocao
() {
if (VerificadorUtil.
naoEstaNulo(getValorVarejoPromocional
())) {
return getValorVarejoPromocional
() > 0.00;
}
return false;
}
/*
@Transient
public void prepararDadosParaDuplicacao(Produto produto) {
this.modelo = produto.getModelo();
this.tributacao = produto.getTributacao();
this.descricao = produto.getDescricao();
this.tipo = produto.getTipo();
this.estilo = produto.getEstilo();
this.genero = produto.getGenero();
this.cor = produto.getCor();
this.observacao = produto.getObservacao();
this.valorCompra = produto.getValorCompra();
this.valorVarejo = produto.getValorVarejo();
this.valorVarejoPromocional = produto.getValorVarejoPromocional();
this.valorVarejoMaximo = produto.getValorVarejoMaximo();
this.valorVarejoPopular = produto.getValorVarejoPopular();
this.valorAtacado = produto.getValorAtacado();
this.indicadorComissionado = produto.getIndicadorComissionado();
this.indicadorEmissaoNotaFiscal = produto.getIndicadorEmissaoNotaFiscal();
this.codigoNCM = produto.getCodigoNCM();
this.codigoEST = produto.getCodigoEST();
this.setSujeitoST(produto.getSujeitoST());
this.setAliquotaIcms(produto.getAliquotaIcms());
this.setAliquotaIcmsST(produto.getAliquotaIcmsST());
this.setAliquotaFecoep(produto.getAliquotaFecoep());
this.setAliquotaIPI(produto.getAliquotaIPI());
this.setAtivo(true);
}
*/
@Transient
public void atualizarAliquotas
(Fornecedor fornecedor
) {
if (VerificadorUtil.
naoEstaNulo(getTributacao
())) {
setAliquotaIPI
(getTributacao
().
getAliquotaIPI());
}
if (VerificadorUtil.
naoEstaNulo(getTributacao
())
&& VerificadorUtil.
naoEstaNulo(getAliquotaIcms
())
&& VerificadorUtil.
naoEstaNulo(fornecedor
)) {
if (getTributacao
().
getSujeitoST() && fornecedor.
getSujeitoST()) {
setAliquotaIcmsST
(getTributacao
().
mvaPorIcms(getAliquotaIcms
()));
setAliquotaFecoep
(getTributacao
().
getAliquotaFecoep());
setSujeitoST
(true);
} else {
setAliquotaFecoep
(null);
setAliquotaIcmsST
(null);
setSujeitoST
(false);
}
} else if (VerificadorUtil.
naoEstaNulo(getTributacao
()) && VerificadorUtil.
naoEstaNulo(getAliquotaIcms
())) {
if (getTributacao
().
getSujeitoST()) {
setAliquotaIcmsST
(getTributacao
().
mvaPorIcms(getAliquotaIcms
()));
setAliquotaFecoep
(getTributacao
().
getAliquotaFecoep());
setSujeitoST
(true);
} else {
setAliquotaFecoep
(null);
setAliquotaIcmsST
(null);
setSujeitoST
(false);
}
}
}
@Transient
public Double calculoIPI
() {
return (VerificadorUtil.
naoEstaNulo(getAliquotaIPI
()) &&
VerificadorUtil.
naoEstaNulo(getValorCompra
()))?
getAliquotaIPI
()/
100 * getValorCompra
() :
0.0;
}
@Transient
public Double calculoICMS
() {
return (VerificadorUtil.
naoEstaNulo(getAliquotaIcms
()) &&
VerificadorUtil.
naoEstaNulo(getAliquotaFecoep
()) &&
VerificadorUtil.
naoEstaNulo(getValorCompra
()))?
(getAliquotaIcms
()/
100 + getAliquotaFecoep
()/
100) * getValorCompra
() :
0.0;
}
@Transient
public Double calculoICMSST
() {
if (getSujeitoST
()) {
return VerificadorUtil.
naoEstaNulo(getAliquotaIcmsST
())
&& VerificadorUtil.
naoEstaNulo(getAliquotaFecoep
())
&& VerificadorUtil.
naoEstaNulo(getTributacao
())?
((getTributacao
().
getAliquotaInterna()/
100 + getAliquotaFecoep
()/
100) * baseCalculoICMSST
()) - calculoICMS
():
0.0;
}
return 0.0;
}
@Transient
public Double baseCalculoICMSST
() {
if (getSujeitoST
()) {
if (VerificadorUtil.
naoEstaNulo(getTributacao
())) {
Double baseCalculoIPI = getValorCompra
() + calculoIPI
();
return baseCalculoIPI +
(baseCalculoIPI
* getTributacao
().
mvaPorIcms(getAliquotaIcms
())/
100);
}
}
return 0.0;
}
@Transient
public Double aliquotaMvaProduto
() {
return VerificadorUtil.
naoEstaNulo(getTributacao
())? getTributacao
().
mvaPorIcms(getAliquotaIcms
()) :
0.0;
}
@Transient
public Double calculoTributosCompra
() {
return VerificadorUtil.
naoEstaNulo(getValorCompra
())? getValorCompra
() + calculoIPI
() + calculoICMSST
() :
0.0;
}
@Transient
public Double calculoOperacao
() {
Double aliquota = ConstantesSEC.
NotaFiscal.
Imposto.
ALIQUOTA_MEDIA_SIMPLES_NACIONAL_11 +
ConstantesSEC.
NotaFiscal.
Imposto.
ALIQUOTA_MEDIA_COMISSOES_2 +
ConstantesSEC.
NotaFiscal.
Imposto.
ALIQUOTA_MEDIA_CARTAO_2;
return VerificadorUtil.
naoEstaNulo(getValorVarejoSimulacao
())? calculoTributosCompra
() +
(getValorVarejoSimulacao
()*aliquota/
100) :
0.0;
}
@Transient
public String valorCalculoOperacao
() {
return StringUtil.
formatarValor(calculoOperacao
());
}
@Transient
public Double calculoValorAposCustos
() {
return VerificadorUtil.
naoEstaNulo(getValorVarejoSimulacao
())? getValorVarejoSimulacao
() - calculoOperacao
() :
0.0;
}
@Transient
public Double calculoMargemAposCustos
() {
return VerificadorUtil.
naoEstaNulo(getValorVarejoSimulacao
())? calculoValorAposCustos
() * 100 / calculoOperacao
() :
0.0;
}
/*
@Transient
public String retornarLucroBrutoFormatado() {
return StringUtil.formatarPercentual(calculoValorAposCustos());
}
@Transient
public String retornarMargemBrutaFormatada() {
try {
return StringUtil.formatarValorComDigitos(calculoMargemAposCustos().toString(), 2);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
@Transient
public Double calculoPrecoMinimo() {
Double valorVarejoSimulacao = getValorVarejoSimulacao();
setValorVarejoSimulacao(this.getValorCompra());
Double valorMinimo = this.calculoOperacao();
Double margem = 0.0;
valorMinimo = valorMinimo + (valorMinimo / 100);
if (valorMinimo > 0.0) {
while (margem < 15.0) {
valorMinimo = valorMinimo + (valorMinimo / 100);
setValorVarejoSimulacao(valorMinimo);
margem = calculoMargemAposCustos();
}
}
setValorVarejoSimulacao(valorVarejoSimulacao);
return valorMinimo;
}
*/
}