package br.com.ec.domain.model;
import java.io.Serializable;
import java.util.Date;
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.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.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.tipos.TipoEmitirNotaFiscal;
@
Entity
@Table
(name=
"sec_loja", schema=
"sc_sec")
public class Loja
implements Serializable {
private static final long serialVersionUID = 1L
;
private Long sequencial
;
private Integer ordenador
;
private Pessoa pessoaJuridica
;
private String descricao
;
private String dvr
;
private Maquineta maquineta
;
private String internet
;
private String ipInternet
;
private Date dataAbertura
;
private Date dataAberturaOficial
;
private Date dataFechamento
;
private Date dataFechamentoOficial
;
private String tipoEmitirNotaFiscal
;
private Double fundoCaixa
;
private Boolean receberNotaFiscalRemessa
;
private String descricaoCertificado
;
private String senhaCertificado
;
private String idToken
;
private String cscToken
;
private Integer limitadorProdutos
;
private String observacao
;
private Boolean ativo
;
private String colorComissao
;
private Double metaMensal
;
private Double metaDiariaLiquida
;
private Double totalVendasNoMes
;
public Loja
() {}
public Loja
(Long sequencial
) {
this.
sequencial = sequencial
;
}
public Loja
(Long sequencial,
String descricao
) {
this.
sequencial = sequencial
;
this.
descricao = descricao
;
}
@Id
@SequenceGenerator
(name =
"sq_loja")
@GeneratedValue
(strategy = GenerationType.
IDENTITY)
@Column
(name=
"seq_loja", nullable=
false)
public Long getSequencial
() {
return sequencial
;
}
public void setSequencial
(Long sequencial
) {
this.
sequencial = sequencial
;
}
@Column
(name=
"num_ordem")
public Integer getOrdenador
() {
return ordenador
;
}
public void setOrdenador
(Integer ordenador
) {
this.
ordenador = ordenador
;
}
@ManyToOne
@ForeignKey
(name =
"fk_loja_pessoa")
@JoinColumn
(name=
"seq_pessoa", referencedColumnName=
"seq_pessoa", insertable=
true, updatable=
true)
public Pessoa getPessoaJuridica
() {
return pessoaJuridica
;
}
public void setPessoaJuridica
(Pessoa pessoaJuridica
) {
this.
pessoaJuridica = pessoaJuridica
;
}
@Column
(name=
"dsc_loja")
@Size
(max =
120, message =
"Limite de caracteres ultrapassado: Descrição da Loja")
@NotNull
(message=
"Obrigatório informar a descrição", groups=
{Cadastrar.
class, Alterar.
class})
@
NotEmpty(message=
"Obrigatório informar a descrição", groups=
{Cadastrar.
class, Alterar.
class})
public String getDescricao
() {
return descricao
;
}
public void setDescricao
(String descricao
) {
this.
descricao = StringUtil.
setarUpperCaseComTrim(descricao
);
}
@Column
(name=
"dsc_dvr")
@Size
(max =
30, message =
"Limite de caracteres ultrapassado: DVR")
public String getDvr
() {
return dvr
;
}
public void setDvr
(String dvr
) {
this.
dvr = dvr
;
}
@ManyToOne
@ForeignKey
(name =
"fk_loja_maquineta")
@JoinColumn
(name=
"seq_maquineta", referencedColumnName=
"seq_maquineta", insertable=
true, updatable=
true)
public Maquineta getMaquineta
() {
return maquineta
;
}
public void setMaquineta
(Maquineta maquineta
) {
this.
maquineta = maquineta
;
}
@Column
(name=
"dsc_internet")
@Size
(max =
50, message =
"Limite de caracteres ultrapassado: Descrição da Internet")
public String getInternet
() {
return internet
;
}
public void setInternet
(String internet
) {
this.
internet = internet
;
}
@Column
(name=
"dsc_ip_internet")
@Size
(max =
20, message =
"Limite de caracteres ultrapassado: IP da Internet")
public String getIpInternet
() {
return ipInternet
;
}
public void setIpInternet
(String ipInternet
) {
this.
ipInternet = ipInternet
;
}
@Column
(name=
"dat_abertura")
public Date getDataAbertura
() {
return dataAbertura
;
}
public void setDataAbertura
(Date dataAbertura
) {
this.
dataAbertura = dataAbertura
;
}
@Column
(name=
"dat_abertura_oficial")
public Date getDataAberturaOficial
() {
return dataAberturaOficial
;
}
public void setDataAberturaOficial
(Date dataAberturaOficial
) {
this.
dataAberturaOficial = dataAberturaOficial
;
}
@Column
(name=
"dat_fechamento")
public Date getDataFechamento
() {
return dataFechamento
;
}
public void setDataFechamento
(Date dataFechamento
) {
this.
dataFechamento = dataFechamento
;
}
@Column
(name=
"dat_fechamento_oficial")
public Date getDataFechamentoOficial
() {
return dataFechamentoOficial
;
}
public void setDataFechamentoOficial
(Date dataFechamentoOficial
) {
this.
dataFechamentoOficial = dataFechamentoOficial
;
}
@Column
(name=
"tip_emitir_nfe", nullable=
false)
@NotNull
(message=
"Obrigatório informar o tipo de emissão da nota fiscal", groups=
{Cadastrar.
class, Alterar.
class})
public String getTipoEmitirNotaFiscal
() {
return tipoEmitirNotaFiscal
;
}
public void setTipoEmitirNotaFiscal
(String tipoEmitirNotaFiscal
) {
this.
tipoEmitirNotaFiscal = tipoEmitirNotaFiscal
;
}
@Transient
public String getDescricaoDoTipoEmitirNotaFiscal
() {
return VerificadorUtil.
naoEstaNuloOuVazio(getTipoEmitirNotaFiscal
())? TipoEmitirNotaFiscal.
parse(getTipoEmitirNotaFiscal
()).
getDescricao() :
null;
}
@Column
(name=
"val_fundo_caixa")
public Double getFundoCaixa
() {
return fundoCaixa
;
}
public void setFundoCaixa
(Double fundoCaixa
) {
this.
fundoCaixa = fundoCaixa
;
}
@NotNull
(message=
"Obrigatório informar se receberá NF Remessa", groups=
{Cadastrar.
class, Alterar.
class})
@Column
(name=
"ind_receber_nf_remessa", nullable=
false)
public Boolean getReceberNotaFiscalRemessa
() {
return receberNotaFiscalRemessa
;
}
public void setReceberNotaFiscalRemessa
(Boolean receberNotaFiscalRemessa
) {
this.
receberNotaFiscalRemessa = receberNotaFiscalRemessa
;
}
@Column
(name=
"dsc_certificado")
@Size
(max =
50, message =
"Limite de caracteres ultrapassado: Descrição do Certificado")
public String getDescricaoCertificado
() {
return descricaoCertificado
;
}
public void setDescricaoCertificado
(String descricaoCertificado
) {
this.
descricaoCertificado = StringUtil.
setarUpperCaseComTrim(descricaoCertificado
);
}
@Column
(name=
"dsc_senha_certificado")
@Size
(max =
10, message =
"Limite de caracteres ultrapassado: Senha do Certificado")
public String getSenhaCertificado
() {
return senhaCertificado
;
}
public void setSenhaCertificado
(String senhaCertificado
) {
this.
senhaCertificado = senhaCertificado
;
}
@Column
(name=
"dsc_idtoken")
@Size
(max =
10, message =
"Limite de caracteres ultrapassado: Descrição do Token")
public String getIdToken
() {
return idToken
;
}
public void setIdToken
(String idToken
) {
this.
idToken = StringUtil.
setarUpperCaseComTrim(idToken
);
}
@Column
(name=
"dsc_csctoken")
@Size
(max =
50, message =
"Limite de caracteres ultrapassado: CSC do Token")
public String getCscToken
() {
return cscToken
;
}
public void setCscToken
(String cscToken
) {
this.
cscToken = StringUtil.
setarUpperCaseComTrim(cscToken
);
}
@Column
(name=
"qtd_limitador_produtos")
public Integer getLimitadorProdutos
() {
return limitadorProdutos
;
}
public void setLimitadorProdutos
(Integer limitadorProdutos
) {
this.
limitadorProdutos = limitadorProdutos
;
}
@Column
(name=
"dsc_observacao")
public String getObservacao
() {
return observacao
;
}
public void setObservacao
(String observacao
) {
this.
observacao = observacao
;
}
@Column
(name=
"ind_ativo", nullable=
false)
public Boolean getAtivo
() {
return ativo
;
}
public void setAtivo
(Boolean ativo
) {
this.
ativo = ativo
;
}
@Transient
public Double percentualRealizadoMetaMensal
(Double valorTotalVendido,
Double metaMensal
) {
if (VerificadorUtil.
naoEstaNulo(valorTotalVendido
) && VerificadorUtil.
naoEstaNulo(metaMensal
)) {
if (metaMensal
> new Double(0.0)) {
return valorTotalVendido / metaMensal
;
}
}
return new Double (0.0);
}
@Transient
public String getColorComissao
() {
return colorComissao
;
}
public void setColorComissao
(String colorComissao
) {
this.
colorComissao = colorComissao
;
}
@Transient
public Double getMetaMensal
() {
return metaMensal
;
}
public void setMetaMensal
(Double metaMensal
) {
this.
metaMensal = metaMensal
;
}
@Transient
public Double getMetaDiariaLiquida
() {
return metaDiariaLiquida
;
}
public void setMetaDiariaLiquida
(Double metaDiariaLiquida
) {
this.
metaDiariaLiquida = metaDiariaLiquida
;
}
@Transient
public Double getTotalVendasNoMes
() {
return totalVendasNoMes
;
}
public void setTotalVendasNoMes
(Double totalVendasNoMes
) {
this.
totalVendasNoMes = totalVendasNoMes
;
}
@
Override
public int hashCode
() {
final int prime =
31;
int result =
1;
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;
Loja other =
(Loja
) obj
;
if (sequencial ==
null) {
if (other.
sequencial !=
null)
return false;
} else if (!sequencial.
equals(other.
sequencial))
return false;
return true;
}
/*
@Transient
public Boolean emissaoNotaFiscalPermitida() {
if (this.getSequencial().equals(ConstantesSEC.SEQUENCIAL_LOJA_VIVO_4) ||
this.getSequencial().equals(ConstantesSEC.SEQUENCIAL_LOJA_FARMACIA_7) ||
this.getSequencial().equals(ConstantesSEC.SEQUENCIAL_ESTOQUE_9)) {
return false;
}
return true;
}
*/
@Transient
public Boolean emissaoNotaFiscalPermitida
() {
return !TipoEmitirNotaFiscal.
NAO_PERMITIR_EMISSAO.
getValor().
equals(getTipoEmitirNotaFiscal
());
}
@Transient
public Boolean emissaoNotaFiscalEletronica
() {
return TipoEmitirNotaFiscal.
EMITIR_NOTA_ELETRONICA.
getValor().
equals(getTipoEmitirNotaFiscal
());
}
@Transient
public String getDescricaoMaquineta
() {
return VerificadorUtil.
naoEstaNulo(getMaquineta
()) ? getMaquineta
().
descricaoCompleta() :
null;
}
}