Subversion Repositories Integrator Subversion

Rev

Rev 195 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
106 espaco 1
package br.com.ec.domain.model;
2
 
3
import java.io.Serializable;
4
import java.util.ArrayList;
5
import java.util.Collections;
6
import java.util.Comparator;
7
import java.util.Date;
8
import java.util.HashSet;
9
import java.util.List;
10
import java.util.Set;
11
 
12
import javax.persistence.Column;
13
import javax.persistence.Entity;
14
import javax.persistence.FetchType;
15
import javax.persistence.GeneratedValue;
16
import javax.persistence.GenerationType;
17
import javax.persistence.Id;
18
import javax.persistence.JoinColumn;
19
import javax.persistence.ManyToOne;
20
import javax.persistence.OneToMany;
21
import javax.persistence.SequenceGenerator;
22
import javax.persistence.Table;
23
import javax.persistence.Transient;
24
import javax.validation.constraints.Size;
25
 
26
import org.hibernate.annotations.ForeignKey;
27
import org.hibernate.validator.constraints.NotEmpty;
28
 
195 espaco 29
import br.com.ec.core.interfaces.Alterar;
30
import br.com.ec.core.interfaces.Cadastrar;
31
import br.com.ec.core.util.StringUtil;
32
import br.com.ec.core.util.VerificadorUtil;
686 blopes 33
import br.com.ec.domain.dto.CashbackDTO;
106 espaco 34
import br.com.ec.domain.model.tipos.TipoSexo;
35
import br.com.ec.domain.util.ValidadorCpfCnpjUtil;
195 espaco 36
import br.com.ec.web.converters.FormatarUtil;
106 espaco 37
 
38
@Entity
39
@Table(name="sec_cliente", schema="sc_sec")
40
public class Cliente implements Serializable {
41
 
42
        private static final long serialVersionUID = 1L;
43
 
44
        private String nome;
45
        private Long sequencial;
46
        private String cpfCnpj;
47
        private String sexo;
48
        private String email;
49
        private String contato;
50
        private String telefone;
51
        private String endereco;
52
        private String observacao;
53
        private Date dataNascimento;
54
        private Date dataCadastro;
55
        private Boolean indicadorNovidades;
56
        private Boolean ativo;
57
 
58
        private Modelo modelo;
59
        private Set<Venda> listaVendas;
60
        private Set<EstoqueAuditoria> listaTrocas;
61
        private Set<Cupom> listaCupons;
62
        private List<Pedido> pedidos = new ArrayList<Pedido>();
63
 
686 blopes 64
        private List<CashbackDTO> listaCashback = new ArrayList<CashbackDTO>();
65
        private Double valorCashbackDisponivel;
66
 
106 espaco 67
        public Cliente() {
68
                listaVendas = new HashSet<Venda>();
69
                listaTrocas = new HashSet<EstoqueAuditoria>();
70
                listaCupons= new HashSet<Cupom>();
71
        }
72
 
686 blopes 73
        public Cliente(Long sequencial) {
74
                this.sequencial = sequencial;
75
                listaVendas = new HashSet<Venda>();
76
                listaTrocas = new HashSet<EstoqueAuditoria>();
77
                listaCupons= new HashSet<Cupom>();
78
        }
79
 
106 espaco 80
        @Id
81
        @SequenceGenerator(name = "sq_cliente")
82
        @GeneratedValue(strategy = GenerationType.IDENTITY)
83
        @Column(name="seq_cliente", nullable=false)
84
        public Long getSequencial() {
85
                return sequencial;
86
        }
87
        public void setSequencial(Long sequencial) {
88
                this.sequencial = sequencial;
89
        }
90
 
91
        @Column(name="dsc_nome")
92
        @NotEmpty(message = "Parâmetro obrigatório não preenchido: Nome", groups = {Cadastrar.class, Alterar.class})
93
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Nome")
94
        public String getNome() {
95
                return nome;
96
        }
97
        public void setNome(String nome) {
98
                this.nome = StringUtil.setarUpperCaseComTrim(nome.trim());
99
        }
100
 
101
        @Column(name="dsc_cpf_cnpj")
102
        @Size(max = 14, message = "Limite de caracteres ultrapassado: CPF/CNPJ")
103
        @NotEmpty(message = "Parâmetro obrigatório não preenchido: CPF/CNPJ", groups = {Cadastrar.class, Alterar.class})
104
        public String getCpfCnpj() {
105
                return cpfCnpj;
106
        }
107
        public void setCpfCnpj(String cpfCnpj) {
108
                this.cpfCnpj = cpfCnpj;
109
        }
110
 
111
        @Column(name="tip_sexo")
112
        public String getSexo() {
113
                return sexo;
114
        }
115
        public void setSexo(String sexo) {
116
                this.sexo = sexo;
117
        }
118
 
119
        @Column(name="dsc_email")
120
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Email")
121
        public String getEmail() {
122
                return email;
123
        }
124
        public void setEmail(String email) {
125
                this.email = email;
126
        }
127
 
128
        @Column(name="dsc_contato")
129
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Contato")
130
        public String getContato() {
131
                return contato;
132
        }
133
        public void setContato(String contato) {
134
                this.contato = contato;
135
        }
136
 
137
        @Column(name="dsc_telefone")
138
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Telefone")
139
        public String getTelefone() {
140
                return telefone;
141
        }
142
        public void setTelefone(String telefone) {
143
                this.telefone = telefone;
144
        }
145
 
146
        @Column(name="dsc_endereco")
147
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Endereço")
148
        public String getEndereco() {
149
                return endereco;
150
        }
151
        public void setEndereco(String endereco) {
152
                this.endereco = StringUtil.setarUpperCaseComTrim(endereco);
153
        }
154
 
155
        @Column(name="dsc_observacao")
156
        @Size(max = 240, message = "Limite de caracteres ultrapassado: Observação")
157
        public String getObservacao() {
158
                return observacao;
159
        }
160
        public void setObservacao(String observacao) {
161
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
162
        }
163
 
164
        @Column(name="dat_nascimento")
165
        public Date getDataNascimento() {
166
                return dataNascimento;
167
        }
168
        public void setDataNascimento(Date dataNascimento) {
169
                this.dataNascimento = dataNascimento;
170
        }
171
 
172
        @Column(name="dat_cadastro")
173
        public Date getDataCadastro() {
174
                return dataCadastro;
175
        }
176
        public void setDataCadastro(Date dataCadastro) {
177
                this.dataCadastro = dataCadastro;
178
        }
179
 
180
        @Column(name="ind_novidades")
181
        public Boolean getIndicadorNovidades() {
182
                return indicadorNovidades;
183
        }
184
        public void setIndicadorNovidades(Boolean indicadorNovidades) {
185
                this.indicadorNovidades = indicadorNovidades;
186
        }
187
 
188
        @Column(name="ind_ativo", nullable=false)
189
        public Boolean getAtivo() {
190
                return ativo;
191
        }
192
        public void setAtivo(Boolean ativo) {
193
                this.ativo = ativo;
194
        }
195
 
196
        @ManyToOne
197
        @ForeignKey(name="fk_cliente_modelo")
198
        @JoinColumn(name = "seq_modelo", nullable=true)
199
        public Modelo getModelo() {
200
                return modelo;
201
        }
202
        public void setModelo(Modelo modelo) {
203
                this.modelo = modelo;
204
        }
205
 
206
        @OneToMany(mappedBy="cliente", fetch=FetchType.LAZY, orphanRemoval=false)
207
        public Set<Venda> getListaVendas() {
208
                return listaVendas;
209
        }
210
        public void setListaVendas(Set<Venda> listaVendas) {
211
                this.listaVendas = listaVendas;
212
        }
213
 
214
        @OneToMany(mappedBy="cliente", fetch=FetchType.LAZY, orphanRemoval=false)
215
        public Set<EstoqueAuditoria> getListaTrocas() {
216
                return listaTrocas;
217
        }
218
        public void setListaTrocas(Set<EstoqueAuditoria> listaTrocas) {
219
                this.listaTrocas = listaTrocas;
220
        }
221
 
222
        @OneToMany(mappedBy="cliente", fetch=FetchType.LAZY, orphanRemoval=false)
223
        public Set<Cupom> getListaCupons() {
224
                return listaCupons;
225
        }
226
        public void setListaCupons(Set<Cupom> listaCupons) {
227
                this.listaCupons = listaCupons;
228
        }
229
 
230
        @Transient
231
        public List<Pedido> getPedidos() {
232
                return pedidos;
233
        }
234
        public void setPedidos(List<Pedido> pedidos) {
235
                this.pedidos = pedidos;
236
        }
237
 
686 blopes 238
        @Transient
239
        public List<CashbackDTO> getListaCashback() {
240
                return listaCashback;
241
        }
242
        public void setListaCashback(List<CashbackDTO> listaCashback) {
243
                this.listaCashback = listaCashback;
244
        }
245
 
246
        @Transient
247
        public Double getValorCashbackDisponivel() {
248
                return valorCashbackDisponivel;
249
        }
250
        public void setValorCashbackDisponivel(Double valorCashbackDisponivel) {
251
                this.valorCashbackDisponivel = valorCashbackDisponivel;
252
        }
253
 
106 espaco 254
        @Override
255
        public int hashCode() {
256
                final int prime = 31;
257
                int result = 1;
258
                result = prime * result
259
                                + ((sequencial == null) ? 0 : sequencial.hashCode());
260
                return result;
261
        }
262
 
263
        @Override
264
        public boolean equals(Object obj) {
265
                if (this == obj)
266
                        return true;
267
                if (obj == null)
268
                        return false;
269
                if (getClass() != obj.getClass())
270
                        return false;
271
                Cliente other = (Cliente) obj;
272
                if (sequencial == null) {
273
                        if (other.sequencial != null)
274
                                return false;
275
                } else if (!sequencial.equals(other.sequencial))
276
                        return false;
277
                return true;
278
        }
279
 
280
        @Transient
281
        public String getDescricaoDoModelo() {
282
                return VerificadorUtil.naoEstaNulo(getModelo())? getModelo().getDescricao() : "";
283
        }
284
 
285
        @Transient
286
        public String getDescricaoDoSexo() {
287
                return VerificadorUtil.naoEstaNulo(getSexo())? TipoSexo.parse(getSexo()).getDescricao(): "";
288
        }
289
 
290
        @Transient
291
        public String getCpfCnpjFormatado() {
292
                return VerificadorUtil.naoEstaNulo(getCpfCnpj())? FormatarUtil.retornarCpfCnpjFormatado(getCpfCnpj()) : "";
293
        }
294
 
295
        @Transient
296
        public Boolean ehCpf() {
297
                if (VerificadorUtil.naoEstaNulo(getCpfCnpj()) && getCpfCnpj().length() == 11) {
298
                        return ValidadorCpfCnpjUtil.isCPF(getCpfCnpj());
299
                }
300
                return false;
301
        }
302
 
303
        @Transient
304
        public Boolean ehCnpj() {
305
                if (VerificadorUtil.naoEstaNulo(getCpfCnpj()) && getCpfCnpj().length() == 14) {
306
                        return ValidadorCpfCnpjUtil.isCNPJ(getCpfCnpj());
307
                }
308
                return false;
309
        }
310
 
311
        @Transient
312
        public Boolean cpfCnpjEhValido() {
313
                return ehCpf() || ehCnpj()? true : false;
314
        }
315
 
316
        @Transient
317
        public List<Venda> getVendasOrdenadas() {
318
                List<Venda> vendasOrdenadas = null;
319
                if (VerificadorUtil.naoEstaNulo(getListaVendas())) {
320
                        vendasOrdenadas = new ArrayList<Venda>(getListaVendas());
321
                        Collections.sort(vendasOrdenadas, new Comparator<Venda>() {
322
                                public int compare(Venda p1, Venda p2) {
323
                                        return p2.getDataVenda().compareTo(p1.getDataVenda());
324
                                };
325
                        });
326
                }
327
                return vendasOrdenadas;
328
        }
329
 
330
        @Transient
331
        public List<EstoqueAuditoria> getTrocasOrdenadas() {
332
                List<EstoqueAuditoria> trocasOrdenadas = null;
333
                if (VerificadorUtil.naoEstaNulo(getListaTrocas())) {
334
                        trocasOrdenadas = new ArrayList<EstoqueAuditoria>(getListaTrocas());
335
                        Collections.sort(trocasOrdenadas, new Comparator<EstoqueAuditoria>() {
336
                                public int compare(EstoqueAuditoria p1, EstoqueAuditoria p2) {
337
                                        return p2.getDataAtualizacao().compareTo(p1.getDataAtualizacao());
338
                                };
339
                        });
340
                }
341
                return trocasOrdenadas;
342
        }
343
 
344
        @Transient
345
        public List<Cupom> getCuponsOrdenados() {
346
                List<Cupom> cuponsOrdenados = null;
347
                if (VerificadorUtil.naoEstaNulo(getListaCupons())) {
348
                        cuponsOrdenados = new ArrayList<Cupom>(getListaCupons());
349
                        Collections.sort(cuponsOrdenados, new Comparator<Cupom>() {
350
                                public int compare(Cupom p1, Cupom p2) {
351
                                        return p2.getDataHoraEmissao().compareTo(p1.getDataHoraEmissao());
352
                                };
353
                        });
354
                }
355
                return cuponsOrdenados;
356
        }
357
 
358
}