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.List;

import javax.persistence.CascadeType;
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.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

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.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.TransferenciaProdutoDTO;
import br.com.ec.domain.model.tipos.TipoProduto;

@Entity
@Table(name="sec_transferencia", schema="sc_sec")
public class Transferencia implements Serializable, Identidade {
         
        private static final long serialVersionUID = 1L;

        private Long sequencial;
        private Loja lojaSaida;
        private Loja lojaEntrada;
        private Date dataSolicitacao;
        private Boolean conferido;
        private Date dataFinalizacao;
        private NotaFiscal notaFiscalRemessa;
        private Date dataHoraInicioTransporte;
        private Usuario usuarioTransportador;
        private Usuario usuarioReceptor;
       
        private List<TransferenciaProduto> listaProdutos;
        private List<TransferenciaProdutoDTO> produtosDTO;
       
        @Override
        @Transient
        public Object getId() {
                return this.getSequencial();
        }
        @Override
        public void setId(Object id) {
                this.sequencial = (Long) id;
        }

        @Id
        @SequenceGenerator(name = "sq_transferencia")
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name="seq_transferencia", nullable=false)
        public Long getSequencial() {
                return sequencial;
        }
        public void setSequencial(Long sequencial) {
                this.sequencial = sequencial;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transferencia_loja_saida")
        @JoinColumn(name = "seq_loja_saida", nullable = false)
        @NotNull(message = "Parâmetro obrigatório não preenchido: Loja de saída", groups = {Cadastrar.class, Alterar.class})
        public Loja getLojaSaida() {
                return lojaSaida;
        }
        public void setLojaSaida(Loja lojaSaida) {
                this.lojaSaida = lojaSaida;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transferencia_loja_entrada")
        @JoinColumn(name = "seq_loja_entrada", nullable = false)
        @NotNull(message = "Parâmetro obrigatório não preenchido: Loja de destino", groups = {Cadastrar.class, Alterar.class})
        public Loja getLojaEntrada() {
                return lojaEntrada;
        }
        public void setLojaEntrada(Loja lojaEntrada) {
                this.lojaEntrada = lojaEntrada;
        }

        @NotNull(message = "Parâmetro obrigatório não preenchido: Data da Solicitação", groups = {Cadastrar.class, Alterar.class})
        @Column(name="dat_solicitacao")
        public Date getDataSolicitacao() {
                return dataSolicitacao;
        }
        public void setDataSolicitacao(Date dataSolicitacao) {
                this.dataSolicitacao = dataSolicitacao;
        }
       
        @Column(name="ind_conferido")
        @NotNull(message = "Parâmetro obrigatório não preenchido: Transferência conferida", groups = {Cadastrar.class, Alterar.class})
        public Boolean getConferido() {
                return conferido;
        }
        public void setConferido(Boolean conferido) {
                this.conferido = conferido;
        }
       
        @Column(name="dat_finalizacao")
        public Date getDataFinalizacao() {
                return dataFinalizacao;
        }
        public void setDataFinalizacao(Date dataFinalizacao) {
                this.dataFinalizacao = dataFinalizacao;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transferencia_notafiscalremessa")
        @JoinColumn(name = "seq_nota_fiscal")
        public NotaFiscal getNotaFiscalRemessa() {
                return notaFiscalRemessa;
        }
        public void setNotaFiscalRemessa(NotaFiscal notaFiscalRemessa) {
                this.notaFiscalRemessa = notaFiscalRemessa;
        }
       
        @Column(name="dth_inicio_transporte")
        public Date getDataHoraInicioTransporte() {
                return dataHoraInicioTransporte;
        }
        public void setDataHoraInicioTransporte(Date dataHoraInicioTransporte) {
                this.dataHoraInicioTransporte = dataHoraInicioTransporte;
        }
        public String dataHoraInicioTransporteFormatado() {
                return DataUtils.converterDataComHorarioParaString(getDataHoraInicioTransporte());
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transferencia_usuairo_transportador")
        @JoinColumn(name = "seq_usuario_transportador", nullable = true)
        public Usuario getUsuarioTransportador() {
                return usuarioTransportador;
        }
        public void setUsuarioTransportador(Usuario usuarioTransportador) {
                this.usuarioTransportador = usuarioTransportador;
        }
       
        @ManyToOne
        @ForeignKey(name="fk_transferencia_usuairo_receptor")
        @JoinColumn(name = "seq_usuario_receptor", nullable = true)
        public Usuario getUsuarioReceptor() {
                return usuarioReceptor;
        }
        public void setUsuarioReceptor(Usuario usuarioReceptor) {
                this.usuarioReceptor = usuarioReceptor;
        }
       
        @OneToMany(mappedBy="transferencia", cascade=CascadeType.ALL, orphanRemoval=true)
        public List<TransferenciaProduto> getListaProdutos() {
                return listaProdutos;
        }
        public void setListaProdutos(List<TransferenciaProduto> listaProdutos) {
                this.listaProdutos = listaProdutos;
        }
       
        @Transient
        public List<TransferenciaProdutoDTO> getProdutosDTO() {
                return produtosDTO;
        }
        public void setProdutosDTO(List<TransferenciaProdutoDTO> produtosDTO) {
                this.produtosDTO = produtosDTO;
        }
       
        @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;
                Transferencia other = (Transferencia) obj;
                if (sequencial == null) {
                        if (other.sequencial != null)
                                return false;
                } else if (!sequencial.equals(other.sequencial))
                        return false;
                return true;
        }
       
        @Transient
        public Object getSequencialDaLojaEntrada() {
                return VerificadorUtil.naoEstaNulo(getLojaEntrada())? getLojaEntrada().getSequencial() : null;
        }
       
        @Transient
        public Object getSequencialDaLojaSaida() {
                return VerificadorUtil.naoEstaNulo(getLojaSaida())? getLojaSaida().getSequencial() : null;
        }
       
        @Transient
        public List<TransferenciaProduto> getProdutosOrdenados() {
                List<TransferenciaProduto> produtosOrdenados = null;
                if (VerificadorUtil.naoEstaNulo(getListaProdutos())) {
                        produtosOrdenados = new ArrayList<TransferenciaProduto>(getListaProdutos());
                        Collections.sort(produtosOrdenados, new Comparator<TransferenciaProduto>() {
                                public int compare(TransferenciaProduto p1, TransferenciaProduto p2) {
                                        return p1.getProduto().getDescricaoDoModelo().compareTo(p2.getProduto().getDescricaoDoModelo());
                                };
                        });
                }
                return produtosOrdenados;
        }
       
        public void adicionarProduto(TransferenciaProduto produto) {
                if (VerificadorUtil.estaNulo(getListaProdutos())) {
                        setListaProdutos(new ArrayList<TransferenciaProduto>());
                }
                getListaProdutos().add(produto);
        }
       
        public void removerProduto(TransferenciaProduto transferenciaProduto) {
                if (!VerificadorUtil.isListaNulaOuVazia(getListaProdutos())) {
                        getListaProdutos().remove(transferenciaProduto);
                }
        }
       
        public void removerProduto(TransferenciaProdutoDTO transferenciaProdutoDTO) {
                if (!VerificadorUtil.isListaNulaOuVazia(getProdutosDTO())) {
                        getProdutosDTO().remove(transferenciaProdutoDTO);
                }
        }
       
        public boolean verificarSeProdutoJaConstaNaLista(TransferenciaProduto transferenciaProduto) {
                if (VerificadorUtil.estaNulo(getListaProdutos())) {
                        setListaProdutos(new ArrayList<TransferenciaProduto>());
                }
                for (TransferenciaProduto item : getListaProdutos()) {
                        if (item.equals(transferenciaProduto)) {
                                return true;
                        }
                }
                return false;
        }
       
        /*
        public boolean verificarSeProdutoJaConstaNaLista(Long sequencialProduto) {
                if (VerificadorUtil.estaNulo(getProdutosDTO())) {
                        setProdutosDTO(new ArrayList<TransferenciaProdutoDTO>());
                }
                for (TransferenciaProdutoDTO item : getProdutosDTO()) {
                        if (item.getSequencialProduto().equals(sequencialProduto)) {
                                return true;
                        }
                }
                return false;
        }
       
        @Transient
        private Integer quantidadeProdutos(String tipoProduto) {
                Integer quantidadeTotal = 0;
                if (VerificadorUtil.naoEstaNuloOuVazio(getProdutosDTO())) {
                        for (TransferenciaProdutoDTO transferenciaProduto : getProdutosDTO()) {
                                if (transferenciaProduto.ehTipoProduto(tipoProduto)) {
                                        quantidadeTotal = quantidadeTotal + transferenciaProduto.getQuantidade();
                                }
                        }
                }
                return quantidadeTotal;
        }
       
        @Transient
        public Integer quantidadeProdutosTipoCapa() {
                return quantidadeProdutos(TipoProduto.CAPA.getValor());
        }
       
        @Transient
        public Integer quantidadeProdutosTipoPelicula() {
                return quantidadeProdutos(TipoProduto.PELICULA.getValor());
        }
       
        @Transient
        public Integer quantidadeProdutosTipoOutrosExcetoCapaEePelicula() {
                Integer quantidadeTotal = 0;
                if (VerificadorUtil.naoEstaNuloOuVazio(getProdutosDTO())) {
                        for (TransferenciaProdutoDTO transferenciaProduto : getProdutosDTO()) {
                                if (!transferenciaProduto.ehTipoProduto(TipoProduto.CAPA.getValor()) &&
                                                !transferenciaProduto.ehTipoProduto(TipoProduto.PELICULA.getValor())) {
                                        quantidadeTotal = quantidadeTotal + transferenciaProduto.getQuantidade();
                                }
                        }
                }
                return quantidadeTotal;
        }
*/
     
}