package br.com.ec.domain.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MapsId;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.ForeignKey;
import br.com.ec.core.generic.identidade.Identidade;
import br.com.ec.core.interfaces.Alterar;
import br.com.ec.core.interfaces.Cadastrar;
import br.com.ec.core.util.VerificadorUtil;
@
Entity
@Table
(name=
"sec_transferencia_produto", schema=
"sc_sec")
public class TransferenciaProduto
implements Serializable, Identidade
{
private static final long serialVersionUID = 1L
;
private TransferenciaProdutoId transferenciaProdutoId
;
private Transferencia transferencia
;
private Produto produto
;
private Usuario usuarioSaida
;
private Usuario usuarioEntrada
;
private Integer quantidadeTransferir
;
private Boolean indicadorRecebido
;
private String observacao
;
private Boolean indicadorAlterarEstoque
;
public TransferenciaProduto
() {
this.
indicadorAlterarEstoque =
true;
this.
transferenciaProdutoId =
new TransferenciaProdutoId
();
}
public TransferenciaProduto
(TransferenciaProdutoId transferenciaProdutoId
) {
this.
indicadorAlterarEstoque =
true;
this.
transferenciaProdutoId = transferenciaProdutoId
;
}
public TransferenciaProduto
(Produto produto, Loja loja
) {
this.
indicadorAlterarEstoque =
true;
transferenciaProdutoId =
new TransferenciaProdutoId
();
setTransferencia
(transferencia
);
setProduto
(produto
);
}
public TransferenciaProduto
(Long sequencialProduto,
Long sequencialTransferencia
) {
this.
indicadorAlterarEstoque =
true;
transferenciaProdutoId =
new TransferenciaProdutoId
();
transferenciaProdutoId.
setSequencialProduto(sequencialProduto
);
transferenciaProdutoId.
setSequencialTransferencia(sequencialTransferencia
);
}
@
Override
@Transient
public Object getId
() {
return getTransferenciaProdutoId
();
}
@
Override
public void setId
(Object id
) {
this.
transferenciaProdutoId =
(TransferenciaProdutoId
) id
;
}
@EmbeddedId
public TransferenciaProdutoId getTransferenciaProdutoId
() {
return transferenciaProdutoId
;
}
public void setTransferenciaProdutoId
(TransferenciaProdutoId transferenciaProdutoId
) {
this.
transferenciaProdutoId = transferenciaProdutoId
;
}
@ManyToOne
@ForeignKey
(name=
"fk_transfproduto_transferencia")
@MapsId
(value=
"sequencialTransferencia")
@JoinColumn
(name =
"seq_transferencia", referencedColumnName=
"seq_transferencia", insertable=
false, updatable=
false, nullable =
false)
public Transferencia getTransferencia
() {
return transferencia
;
}
public void setTransferencia
(Transferencia transferencia
) {
if (VerificadorUtil.
naoEstaNulo(transferencia
)) {
transferenciaProdutoId.
setSequencialTransferencia(transferencia.
getSequencial());
}
this.
transferencia = transferencia
;
}
@ManyToOne
@ForeignKey
(name=
"fk_transfproduto_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
)) {
transferenciaProdutoId.
setSequencialProduto(produto.
getSequencial());
}
this.
produto = produto
;
}
@ManyToOne
@ForeignKey
(name=
"fk_transfproduto_usuairo_saida")
@JoinColumn
(name =
"seq_usuario_saida", nullable =
true)
public Usuario getUsuarioSaida
() {
return usuarioSaida
;
}
public void setUsuarioSaida
(Usuario usuarioSaida
) {
this.
usuarioSaida = usuarioSaida
;
}
@ManyToOne
@ForeignKey
(name=
"fk_transfproduto_usuairo_entrada")
@JoinColumn
(name =
"seq_usuario_entrada", nullable =
true)
public Usuario getUsuarioEntrada
() {
return usuarioEntrada
;
}
public void setUsuarioEntrada
(Usuario usuarioEntrada
) {
this.
usuarioEntrada = usuarioEntrada
;
}
@Column
(name=
"qtd_transferir")
@NotNull
(message =
"Parâmetro obrigatório não preenchido: Quantidade para transferência", groups =
{Cadastrar.
class, Alterar.
class})
public Integer getQuantidadeTransferir
() {
return quantidadeTransferir
;
}
public void setQuantidadeTransferir
(Integer quantidadeTransferir
) {
this.
quantidadeTransferir = quantidadeTransferir
;
}
@Column
(name=
"ind_recebido")
@NotNull
(message =
"Parâmetro obrigatório não preenchido: Indicador de Recebido", groups =
{Cadastrar.
class, Alterar.
class})
public Boolean getIndicadorRecebido
() {
return indicadorRecebido
;
}
public void setIndicadorRecebido
(Boolean indicadorRecebido
) {
this.
indicadorRecebido = indicadorRecebido
;
}
@Column
(name=
"dsc_observacao")
@Size
(max =
200, message =
"Limite de caracteres ultrapassado: Observação")
public String getObservacao
() {
return observacao
;
}
public void setObservacao
(String observacao
) {
this.
observacao = observacao
;
}
@Column
(name=
"ind_alterar_estoque")
public Boolean getIndicadorAlterarEstoque
() {
return indicadorAlterarEstoque
;
}
public void setIndicadorAlterarEstoque
(Boolean indicadorAlterarEstoque
) {
this.
indicadorAlterarEstoque = indicadorAlterarEstoque
;
}
@Transient
public Long getSequencialDoTransferencia
() {
return VerificadorUtil.
naoEstaNulo(transferencia
)? transferencia.
getSequencial() :
null;
}
@Transient
public Long getSequencialDoProduto
() {
return VerificadorUtil.
naoEstaNulo(produto
)? produto.
getSequencial() :
null;
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
result = prime
* result +
((transferenciaProdutoId ==
null) ? 0 : transferenciaProdutoId.
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;
TransferenciaProduto other =
(TransferenciaProduto
) obj
;
if (transferenciaProdutoId ==
null) {
if (other.
transferenciaProdutoId !=
null)
return false;
} else if (!transferenciaProdutoId.
equals(other.
transferenciaProdutoId))
return false;
return true;
}
}