Subversion Repositories Integrator Subversion

Rev

Rev 259 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.model;

import java.io.Serializable;
import java.util.Date;
import java.util.Random;

import javax.persistence.Column;
import javax.persistence.Entity;
import org.hibernate.annotations.ForeignKey;
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.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.TipoCupom;

@Entity
@Table(name="sec_cupom", schema="sc_sec")
public class Cupom implements Serializable, Cloneable {
         
        private static final long serialVersionUID = 1L;
       
        private Long sequencial;
        private String codigo;
        private String descricao;
        private String observacao;
        private String tipoCupom;
        private Double valor;
        private Double percentual;
        private Integer quantidadeUtilizada;
        private Date dataHoraUtilizado;
        private Date dataHoraValidade;
        private Date dataHoraEmissao;
        private Boolean limiteUtilizacao;
        private Boolean publico;
        private Boolean ativo;
       
        private Cliente cliente;
       
        private Lancamento lancamento;
       
        public Cupom() {}
       
        public Cupom(Lancamento lancamento) {
                this.lancamento = lancamento;
        }
       
        @Id
        @SequenceGenerator(name = "sq_cupom")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="seq_cupom", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }

        @Column(name="cod_cupom", nullable=false)
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código")
        @NotEmpty(message = "Parâmetro obrigatório não preenchido: Nome", groups = {Cadastrar.class, Alterar.class})
        public String getCodigo() {
                return codigo;
        }
        public void setCodigo(String codigo) {
                this.codigo = StringUtil.setarUpperCaseComTrim(codigo);
        }
       
        @Column(name="dsc_cupom", nullable=false)
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Descrição")
        public String getDescricao() {
                return descricao;
        }
        public void setDescricao(String descricao) {
                this.descricao = StringUtil.setarUpperCaseComTrim(descricao);
        }
       
        @Column(name="dsc_observacao", nullable=false)
        @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="tip_cupom", nullable=false)
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do cupom", groups = {Cadastrar.class, Alterar.class})
        public String getTipoCupom() {
                return tipoCupom;
        }
        public void setTipoCupom(String tipoCupom) {
                this.tipoCupom = tipoCupom;
        }
        @Transient
        public String getDescricaoDoTipoCupom() {
                return VerificadorUtil.naoEstaNulo(tipoCupom)? TipoCupom.parse(tipoCupom).getDescricao() : "";
        }
       
        @Column(name="val_cupom")
        public Double getValor() {
                return valor;
        }
        public void setValor(Double valor) {
                this.valor = valor;
        }
       
        @Column(name="val_percentual_cupom")
        public Double getPercentual() {
                return percentual;
        }
        public void setPercentual(Double percentual) {
                this.percentual = percentual;
        }
       
        @Column(name="qtd_utilizado")
        public Integer getQuantidadeUtilizada() {
                return quantidadeUtilizada;
        }
        public void setQuantidadeUtilizada(Integer quantidadeUtilizada) {
                this.quantidadeUtilizada = quantidadeUtilizada;
        }
       
        @Column(name="dth_utilizado")
        public Date getDataHoraUtilizado() {
                return dataHoraUtilizado;
        }
        public void setDataHoraUtilizado(Date dataHoraUtilizado) {
                this.dataHoraUtilizado = dataHoraUtilizado;
        }
       
        @Column(name="dth_validade")
        public Date getDataHoraValidade() {
                return dataHoraValidade;
        }
        public void setDataHoraValidade(Date dataHoraValidade) {
                this.dataHoraValidade = dataHoraValidade;
        }
       
        @NotNull(message = "Informe a data de emissão", groups = {Cadastrar.class, Alterar.class})
        @Column(name="dth_emissao", nullable=false)
        public Date getDataHoraEmissao() {
                return dataHoraEmissao;
        }
        public void setDataHoraEmissao(Date dataHoraEmissao) {
                this.dataHoraEmissao = dataHoraEmissao;
        }
       
        @NotNull(message = "Informe se a utilização é limitada", groups = {Cadastrar.class, Alterar.class})
        @Column(name="ind_limite_utilizacao", nullable=false)
        public Boolean getLimiteUtilizacao() {
                return limiteUtilizacao;
        }
        public void setLimiteUtilizacao(Boolean limiteUtilizacao) {
                this.limiteUtilizacao = limiteUtilizacao;
        }
       
        @NotNull(message = "Informe se o cupom é público", groups = {Cadastrar.class, Alterar.class})
        @Column(name="ind_publico", nullable=false)
        public Boolean getPublico() {
                return publico;
        }
        public void setPublico(Boolean publico) {
                this.publico = publico;
        }
       
        @Column(name="ind_ativo", nullable=false)
        public Boolean getAtivo() {
                return ativo;
        }
        public void setAtivo(Boolean ativo) {
                this.ativo = ativo;
        }
       
        @Transient
        public String getValorCupomFormatado() {
                if (VerificadorUtil.naoEstaNulo(getValor())) {
                        return "R$ " + StringUtil.formatarValor(getValor());
                }
                if (VerificadorUtil.naoEstaNulo(getPercentual())) {
                        return StringUtil.formatarPercentual(getPercentual()/100);
                }
                return null;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_cupom_cliente")
        @JoinColumn(name = "seq_cliente", nullable=true)
        public Cliente getCliente() {
                return cliente;
        }
        public void setCliente(Cliente cliente) {
                this.cliente = cliente;
        }
       
        @Transient
        public Lancamento getLancamento() {
                return lancamento;
        }
        public void setLancamento(Lancamento lancamento) {
                this.lancamento = lancamento;
        }
       
        @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;
                Cupom other = (Cupom) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
        @Override
        public Cupom clone() throws CloneNotSupportedException {
                return (Cupom) super.clone();
        }
/*     
        @Transient
        public String getNomeDoCliente() {
                return VerificadorUtil.naoEstaNulo(getCliente())? getCliente().getNome() : "";
        }
*/

        @Transient
        public void gerarCodigo() {
                Random random = new Random();
                Integer codigoGerado = random.nextInt(999999);
                setCodigo(codigoGerado.toString());
        }
       
        @Transient
        public Boolean valido() {
                if (VerificadorUtil.naoEstaNulo(getDataHoraValidade())) {
                        return DataUtils.getDataAtual().before(getDataHoraValidade());
                }
                return getAtivo();
        }
       
}