Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
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.edu.cesmac.core.interfaces.Alterar;
import br.edu.cesmac.core.interfaces.Cadastrar;
import br.edu.cesmac.core.util.VerificadorUtil;

@Entity
@Table(name="sec_linha_vivo", schema="sc_sec")
public class LinhaVivo implements Serializable {

        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private String numero;
        private Cliente cliente;
        private ProdutoVivo planoAtual;
        private Date dataAtualizacao;
       
        private Set<VendaVivo> listaVendasVivo;
       
        public LinhaVivo() {
                listaVendasVivo = new HashSet<VendaVivo>();
        }
       
        @Id
        @SequenceGenerator(name = "sq_linhavivo")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="seq_linha_vivo", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @Column(name="dsc_numero")
        @Size(max = 12, message = "Limite de caracteres ultrapassado: Número")
        @NotNull(message = "Informe o número", groups = {Cadastrar.class, Alterar.class})
        @NotEmpty(message = "Informe o número", groups = {Cadastrar.class, Alterar.class})
        public String getNumero() {
                return numero;
        }
        public void setNumero(String numero) {
                this.numero = numero;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_linhavivo_cliente")
        @JoinColumn(name = "seq_cliente")
        @NotNull(message = "Informe o cliente da linha", groups = {Cadastrar.class/*, Alterar.class*/})
        public Cliente getCliente() {
                return cliente;
        }
        public void setCliente(Cliente cliente) {
                this.cliente = cliente;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_linhavivo_produtovivo")
        @JoinColumn(name = "seq_produto_vivo", nullable = true)
        public ProdutoVivo getPlanoAtual() {
                return planoAtual;
        }
        public void setPlanoAtual(ProdutoVivo planoAtual) {
                this.planoAtual = planoAtual;
        }

        @Column(name="dth_atualizacao")
        @NotNull(message = "Informe a data da atualização", groups = {Cadastrar.class, Alterar.class})
        public Date getDataAtualizacao() {
                return dataAtualizacao;
        }
        public void setDataAtualizacao(Date dataAtualizacao) {
                this.dataAtualizacao = dataAtualizacao;
        }
       
        @OneToMany(mappedBy="linhaVivo", fetch=FetchType.LAZY, orphanRemoval=false)
        public Set<VendaVivo> getListaVendasVivo() {
                return listaVendasVivo;
        }
        public void setListaVendasVivo(Set<VendaVivo> listaVendasVivo) {
                this.listaVendasVivo = listaVendasVivo;
        }
       
        @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;
                LinhaVivo other = (LinhaVivo) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
        @Transient
        public List<VendaVivo> getVendasVivoOrdenadas() {
                List<VendaVivo> vendasVivoOrdenadas = null;
                if (VerificadorUtil.naoEstaNuloOuVazio(getListaVendasVivo())) {
                        vendasVivoOrdenadas = new ArrayList<VendaVivo>(getListaVendasVivo());
                        Collections.sort(vendasVivoOrdenadas, new Comparator<VendaVivo>() {
                                public int compare(VendaVivo p1, VendaVivo p2) {
                                        return p2.getDataVenda().compareTo(p1.getDataVenda());
                                };
                        });
                }
                return vendasVivoOrdenadas;
        }
       
        @Transient
        public String getNomeDoCliente() {
                return VerificadorUtil.naoEstaNulo(getCliente())? getCliente().getNome() : "";
        }
       
        @Transient
        public String getCpfDoCliente() {
                return VerificadorUtil.naoEstaNulo(getCliente())? getCliente().getCpfCnpj() : "";
        }
       
        @Transient
        public String getCpfCnpjFormatadoDoCliente() {
                return VerificadorUtil.naoEstaNulo(getCliente())? getCliente().getCpfCnpjFormatado() : "";
        }
       
}