package br.com.ec.domain.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Size;
import org.hibernate.annotations.ForeignKey;
import br.com.ec.core.generic.identidade.Identidade;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
@
Entity
@Table
(name=
"sec_produto_loja", schema=
"sc_sec")
public class ProdutoLoja
implements Serializable, Identidade
{
private static final long serialVersionUID = 1L
;
private ProdutoLojaId produtoLojaId
;
private Produto produto
;
private Loja loja
;
private Integer quantidadeEstoque
;
private Integer quantidadeEstoqueContagem
;
// private Integer quantidadeEstoqueUltimaContagem;
private Date dataContagem
;
private Date dataContagemPreparacao
;
private Usuario usuarioUltimaContagem
;
private Usuario usuarioUltimaContagemPreparacao
;
private String localizacao
;
private Boolean indicadorContagemSolicitada =
false;
private Boolean retirarTransferenciaAutomatica
;
public ProdutoLoja
() {
this.
produtoLojaId =
new ProdutoLojaId
();
}
public ProdutoLoja
(ProdutoLojaId produtoLojaId
) {
this.
produtoLojaId = produtoLojaId
;
}
public ProdutoLoja
(Produto produto, Loja loja
) {
produtoLojaId =
new ProdutoLojaId
();
setProduto
(produto
);
setLoja
(loja
);
}
@
Override
@Transient
public Object getId
() {
return getProdutoLojaId
();
}
@
Override
public void setId
(Object id
) {
this.
produtoLojaId =
(ProdutoLojaId
) id
;
}
@EmbeddedId
public ProdutoLojaId getProdutoLojaId
() {
return produtoLojaId
;
}
public void setProdutoLojaId
(ProdutoLojaId produtoLojaId
) {
this.
produtoLojaId = produtoLojaId
;
}
@ManyToOne
@ForeignKey
(name=
"fk_produtoloja_produto")
@JoinColumn
(name =
"seq_produto", insertable=
false, updatable=
false, nullable =
false)
public Produto getProduto
() {
return produto
;
}
public void setProduto
(Produto produto
) {
if (VerificadorUtil.
naoEstaNulo(produto
)) {
produtoLojaId.
setSequencialProduto(produto.
getSequencial());
}
this.
produto = produto
;
}
@ManyToOne
@ForeignKey
(name=
"fk_produtoloja_loja")
@JoinColumn
(name =
"seq_loja", insertable=
false, updatable=
false, nullable =
false)
public Loja getLoja
() {
return loja
;
}
public void setLoja
(Loja loja
) {
if (VerificadorUtil.
naoEstaNulo(loja
)) {
produtoLojaId.
setSequencialLoja(loja.
getSequencial());
}
this.
loja = loja
;
}
@Column
(name=
"qtd_estoque")
public Integer getQuantidadeEstoque
() {
return quantidadeEstoque
;
}
public void setQuantidadeEstoque
(Integer quantidadeEstoque
) {
this.
quantidadeEstoque = quantidadeEstoque
;
}
@Column
(name=
"qtd_estoque_contagem")
public Integer getQuantidadeEstoqueContagem
() {
return quantidadeEstoqueContagem
;
}
public void setQuantidadeEstoqueContagem
(Integer quantidadeEstoqueContagem
) {
this.
quantidadeEstoqueContagem = quantidadeEstoqueContagem
;
}
@Column
(name=
"dat_contagem")
public Date getDataContagem
() {
return dataContagem
;
}
public void setDataContagem
(Date dataContagem
) {
this.
dataContagem = dataContagem
;
}
@Column
(name=
"dth_contagem_preparacao")
public Date getDataContagemPreparacao
() {
return dataContagemPreparacao
;
}
public void setDataContagemPreparacao
(Date dataContagemPreparacao
) {
this.
dataContagemPreparacao = dataContagemPreparacao
;
}
@ManyToOne
@ForeignKey
(name=
"fk_produtoloja_usuario")
@JoinColumn
(name =
"seq_usuario_contagem", nullable =
false)
public Usuario getUsuarioUltimaContagem
() {
return usuarioUltimaContagem
;
}
public void setUsuarioUltimaContagem
(Usuario usuarioUltimaContagem
) {
this.
usuarioUltimaContagem = usuarioUltimaContagem
;
}
@ManyToOne
@ForeignKey
(name=
"fk_produtoloja_usuariopreparacao")
@JoinColumn
(name =
"seq_usuario_contagem_preparacao", nullable =
false)
public Usuario getUsuarioUltimaContagemPreparacao
() {
return usuarioUltimaContagemPreparacao
;
}
public void setUsuarioUltimaContagemPreparacao
(Usuario usuarioUltimaContagemPreparacao
) {
this.
usuarioUltimaContagemPreparacao = usuarioUltimaContagemPreparacao
;
}
@Column
(name=
"dsc_localizacao")
@Size
(max =
20, message =
"Limite de caracteres ultrapassado: Localização")
public String getLocalizacao
() {
return localizacao
;
}
public void setLocalizacao
(String localizacao
) {
this.
localizacao = StringUtil.
setarUpperCaseComTrim(localizacao
);
}
@Column
(name=
"ind_contagem_solicitada")
public Boolean getIndicadorContagemSolicitada
() {
return indicadorContagemSolicitada
;
}
public void setIndicadorContagemSolicitada
(Boolean indicadorContagemSolicitada
) {
this.
indicadorContagemSolicitada = indicadorContagemSolicitada
;
}
@Column
(name=
"ind_retirar_transferencia_auto")
public Boolean getRetirarTransferenciaAutomatica
() {
return retirarTransferenciaAutomatica
;
}
public void setRetirarTransferenciaAutomatica
(Boolean retirarTransferenciaAutomatica
) {
this.
retirarTransferenciaAutomatica = retirarTransferenciaAutomatica
;
}
@Transient
public Long getSequencialDoProduto
() {
return VerificadorUtil.
naoEstaNulo(produto
)? produto.
getSequencial() :
null;
}
@Transient
public Long getSequencialDaLoja
() {
return VerificadorUtil.
naoEstaNulo(loja
)? loja.
getSequencial() :
null;
}
@Transient
public Modelo getModeloDoProduto
() {
return VerificadorUtil.
naoEstaNulo(produto
)? VerificadorUtil.
naoEstaNulo(produto.
getModelo())? produto.
getModelo() :
null :
null;
}
@Transient
public String getNomeDoUsuarioUltimaContagem
() {
return VerificadorUtil.
naoEstaNulo(getUsuarioUltimaContagem
())? getUsuarioUltimaContagem
().
getNomeDaPessoa() :
null;
}
@Transient
public String getNomeDoUsuarioUltimaContagemPreparacao
() {
return VerificadorUtil.
naoEstaNulo(getUsuarioUltimaContagemPreparacao
())? getUsuarioUltimaContagemPreparacao
().
getNomeDaPessoa() :
null;
}
@Transient
public Boolean contagemFoiIniciada
() {
return getDataContagemPreparacao
().
after(getDataContagem
());
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
result = prime
* result +
((produtoLojaId ==
null) ? 0 : produtoLojaId.
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;
ProdutoLoja other =
(ProdutoLoja
) obj
;
if (produtoLojaId ==
null) {
if (other.
produtoLojaId !=
null)
return false;
} else if (!produtoLojaId.
equals(other.
produtoLojaId))
return false;
return true;
}
}