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.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_avaliacao_loja", schema=
"sc_sec")
public class AvaliacaoLoja
implements Serializable, Identidade
{
private static final long serialVersionUID = 1L
;
private AvaliacaoLojaId avaliacaoLojaId
;
private Loja loja
;
private Avaliacao avaliacao
;
private String observacao
;
private Double valorMetaMensal
;
private Double valorMargemContribuicao
;
private Double valorTotalVendido
;
public AvaliacaoLoja
() {
this.
avaliacaoLojaId =
new AvaliacaoLojaId
();
}
public AvaliacaoLoja
(AvaliacaoLojaId avalicaoLojaId
) {
this.
avaliacaoLojaId = avalicaoLojaId
;
}
public AvaliacaoLoja
(Loja loja, Avaliacao avaliacao
) {
avaliacaoLojaId =
new AvaliacaoLojaId
();
setAvaliacao
(avaliacao
);
setLoja
(loja
);
}
@
Override
@Transient
public Object getId
() {
return getAvaliacaoLojaId
();
}
@
Override
public void setId
(Object id
) {
this.
avaliacaoLojaId =
(AvaliacaoLojaId
) id
;
}
@EmbeddedId
public AvaliacaoLojaId getAvaliacaoLojaId
() {
return avaliacaoLojaId
;
}
public void setAvaliacaoLojaId
(AvaliacaoLojaId avaliacaoLojaId
) {
this.
avaliacaoLojaId = avaliacaoLojaId
;
}
@ManyToOne
@ForeignKey
(name=
"fk_avalloja_avaliacao")
@MapsId
(value=
"sequencialAvaliacao")
@JoinColumn
(name =
"seq_avaliacao", referencedColumnName=
"seq_avaliacao", insertable=
false, updatable=
false, nullable =
false)
public Avaliacao getAvaliacao
() {
return avaliacao
;
}
public void setAvaliacao
(Avaliacao avaliacao
) {
if (VerificadorUtil.
naoEstaNulo(avaliacao
)) {
avaliacaoLojaId.
setSequencialAvaliacao(avaliacao.
getSequencial());
}
this.
avaliacao = avaliacao
;
}
@ManyToOne
@ForeignKey
(name=
"fk_avalloja_loja")
@MapsId
(value=
"sequencialLoja")
@JoinColumn
(name =
"seq_loja", referencedColumnName=
"seq_loja", insertable=
false, updatable=
false, nullable =
false)
public Loja getLoja
() {
return loja
;
}
public void setLoja
(Loja loja
) {
if (VerificadorUtil.
naoEstaNulo(loja
)) {
avaliacaoLojaId.
setSequencialLoja(loja.
getSequencial());
}
this.
loja = loja
;
}
@Column
(name=
"dsc_observacao")
@Size
(max =
400, 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_meta_mensal")
public Double getValorMetaMensal
() {
return valorMetaMensal
;
}
public void setValorMetaMensal
(Double valorMetaMensal
) {
this.
valorMetaMensal = valorMetaMensal
;
}
@Column
(name=
"val_margem_contribuicao")
public Double getValorMargemContribuicao
() {
return valorMargemContribuicao
;
}
public void setValorMargemContribuicao
(Double valorMargemContribuicao
) {
this.
valorMargemContribuicao = valorMargemContribuicao
;
}
@Transient
public Double getValorTotalVendido
() {
return valorTotalVendido
;
}
public void setValorTotalVendido
(Double valorTotalVendido
) {
this.
valorTotalVendido = valorTotalVendido
;
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
result = prime
* result +
((avaliacaoLojaId ==
null) ? 0 : avaliacaoLojaId.
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;
AvaliacaoLoja other =
(AvaliacaoLoja
) obj
;
if (avaliacaoLojaId ==
null) {
if (other.
avaliacaoLojaId !=
null)
return false;
} else if (!avaliacaoLojaId.
equals(other.
avaliacaoLojaId))
return false;
return true;
}
@Transient
public Long getSequencialDaAvaliacao
() {
return VerificadorUtil.
naoEstaNulo(getAvaliacao
())? getAvaliacao
().
getSequencial() :
null;
}
@Transient
public Long getSequencialDaVigencia
() {
return VerificadorUtil.
naoEstaNulo(getAvaliacao
())? getAvaliacao
().
getSequencialDaVigencia() :
null;
}
@Transient
public Long getSequencialDaLoja
() {
return VerificadorUtil.
naoEstaNulo(getAvaliacaoLojaId
())? getAvaliacaoLojaId
().
getSequencialLoja() :
null;
}
@Transient
public Double retornarPercentualRealizado
(Double totalVendas
) {
return retornarPercentual
(totalVendas, getValorMetaMensal
());
}
@Transient
public Double retornarPercentual
(Double total,
Double meta
) {
return VerificadorUtil.
naoEstaNulo(total
) && VerificadorUtil.
naoEstaNulo(meta
)? meta
> new Double(0.0) ? total / meta :
new Double(0.0) :
new Double(0.0);
}
}