Subversion Repositories Integrator Subversion

Rev

Rev 195 | Go to most recent revision | 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.List;
9
 
10
import javax.persistence.CascadeType;
11
import javax.persistence.Column;
12
import javax.persistence.Entity;
13
import javax.persistence.FetchType;
14
import javax.persistence.GeneratedValue;
15
import javax.persistence.GenerationType;
16
import javax.persistence.Id;
17
import javax.persistence.JoinColumn;
18
import javax.persistence.ManyToOne;
19
import javax.persistence.OneToMany;
20
import javax.persistence.SequenceGenerator;
21
import javax.persistence.Table;
22
import javax.persistence.Transient;
23
import javax.validation.constraints.NotNull;
24
import javax.validation.constraints.Size;
25
 
26
import org.hibernate.annotations.ForeignKey;
27
 
195 espaco 28
import br.com.ec.core.interfaces.Alterar;
29
import br.com.ec.core.interfaces.Cadastrar;
30
import br.com.ec.core.util.DataUtils;
31
import br.com.ec.core.util.StringUtil;
32
import br.com.ec.core.util.VerificadorUtil;
106 espaco 33
import br.com.ec.domain.model.tipos.TipoCorProduto;
34
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
35
import br.com.ec.domain.model.tipos.TipoGenero;
36
import br.com.ec.domain.model.tipos.TipoPedido;
37
import br.com.ec.domain.model.tipos.TipoProduto;
38
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;
39
 
40
@Entity
41
@Table(name="sec_pedido", schema="sc_sec")
42
public class Pedido implements Serializable {
43
 
44
        private static final long serialVersionUID = 1L;
45
 
46
        private Long sequencial;
47
        private Loja loja;
48
        private Date dataPedido;
49
        private Usuario usuarioPedido;
50
 
51
        private Cliente cliente;
52
        private String contatoCliente;
53
        private Modelo modelo;
165 espaco 54
        private Venda venda;
55
 
106 espaco 56
        private String genero;
57
        private String tipoProduto;
58
        private String estiloProduto;
59
        private String corProduto;
60
 
61
        private String observacao;
62
        private Usuario usuarioAtendimento;
63
        private String tipoSituacao;
64
        private Date dataUltimaAlteracaoSituacao;
65
        private Date dataSolicitadoParaComprar;
66
 
67
        private List<PedidoHistorico> historico;
68
        private List<PedidoProduto> produtos;
69
 
70
        private String tipoPedido;
71
//      private String observacaoMaterialRecolhido;
72
//      private String descricaoServico;
73
 
74
        @Id
75
        @SequenceGenerator(name = "sq_pedido")
76
        @GeneratedValue(strategy = GenerationType.IDENTITY)
77
        @Column(name="seq_pedido", nullable=false)
78
        public Long getSequencial() {
79
                return sequencial;
80
        }
81
        public void setSequencial(Long sequencial) {
82
                this.sequencial = sequencial;
83
        }
84
 
85
        @ManyToOne
86
        @ForeignKey(name="fk_pedido_loja")
87
        @NotNull(message = "Parâmetro obrigatório não preenchido: Loja do pedido", groups = {Cadastrar.class, Alterar.class})
88
        @JoinColumn(name = "seq_loja", referencedColumnName="seq_loja", nullable=false)
89
        public Loja getLoja() {
90
                return loja;
91
        }
92
        public void setLoja(Loja loja) {
93
                this.loja = loja;
94
        }
95
 
96
        @ManyToOne
97
        @ForeignKey(name="fk_pedido_usuario")
98
        @NotNull(message = "Parâmetro obrigatório não preenchido: Usuário do pedido", groups = {Cadastrar.class, Alterar.class})
99
        @JoinColumn(name = "seq_usuario_pedido", nullable=false)
100
        public Usuario getUsuarioPedido() {
101
                return usuarioPedido;
102
        }
103
        public void setUsuarioPedido(Usuario usuarioPedido) {
104
                this.usuarioPedido = usuarioPedido;
105
        }
106
 
107
        @ManyToOne
108
        @ForeignKey(name="fk_pedido_usuarioatend")
109
        @JoinColumn(name = "seq_usuario_atendimento", nullable=true)
110
        public Usuario getUsuarioAtendimento() {
111
                return usuarioAtendimento;
112
        }
113
        public void setUsuarioAtendimento(Usuario usuarioAtendimento) {
114
                this.usuarioAtendimento = usuarioAtendimento;
115
        }
116
 
117
        @ManyToOne
118
        @ForeignKey(name="fk_pedido_cliente")
119
        @JoinColumn(name = "seq_cliente", referencedColumnName="seq_cliente", nullable=true)
120
        public Cliente getCliente() {
121
                return cliente;
122
        }
123
        public void setCliente(Cliente cliente) {
124
                this.cliente = cliente;
125
        }
126
 
127
        @Column(name="dsc_contato_cliente")
128
        @Size(max = 200, message = "Limite de caracteres ultrapassado: Contato do Cliente")
129
        public String getContatoCliente() {
130
                return contatoCliente;
131
        }
132
        public void setContatoCliente(String contatoCliente) {
133
                this.contatoCliente = StringUtil.setarUpperCaseComTrim(contatoCliente);
134
        }
135
 
136
        @ManyToOne
137
        @ForeignKey(name="fk_pedido_modelo")
138
        @JoinColumn(name = "seq_modelo", referencedColumnName="seq_modelo", nullable=true)
139
        public Modelo getModelo() {
140
                return modelo;
141
        }
142
        public void setModelo(Modelo modelo) {
143
                this.modelo = modelo;
144
        }
145
 
165 espaco 146
        @ManyToOne
147
        @ForeignKey(name="fk_pedido_venda")
148
        @JoinColumn(name = "seq_venda", referencedColumnName="seq_venda", nullable=true)
149
        public Venda getVenda() {
150
                return venda;
151
        }
152
        public void setVenda(Venda venda) {
153
                this.venda = venda;
154
        }
155
 
106 espaco 156
        @Column(name="tip_genero_produto")
157
        public String getGenero() {
158
                return genero;
159
        }
160
        public void setGenero(String genero) {
161
                this.genero = genero;
162
        }
163
 
164
        @Column(name="tip_tipo_produto")
165
        public String getTipoProduto() {
166
                return tipoProduto;
167
        }
168
        public void setTipoProduto(String tipoProduto) {
169
                this.tipoProduto = tipoProduto;
170
        }
171
 
172
        @Column(name="tip_estilo_produto")
173
        public String getEstiloProduto() {
174
                return estiloProduto;
175
        }
176
        public void setEstiloProduto(String estiloProduto) {
177
                this.estiloProduto = estiloProduto;
178
        }
179
 
180
        @Column(name="tip_cor_produto")
181
        public String getCorProduto() {
182
                return corProduto;
183
        }
184
        public void setCorProduto(String corProduto) {
185
                this.corProduto = corProduto;
186
        }
187
 
188
        @Column(name="obs_pedido")
189
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Observação")
190
        public String getObservacao() {
191
                return observacao;
192
        }
193
        public void setObservacao(String observacao) {
194
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
195
        }
196
 
197
        @Column(name="tip_situacao")
305 espaco 198
        @NotNull(message = "Parâmetro obrigatório não preenchido: Situação do pedido", groups = {Cadastrar.class, Alterar.class})
106 espaco 199
        public String getTipoSituacao() {
200
                return tipoSituacao;
201
        }
202
        public void setTipoSituacao(String tipoSituacao) {
203
                this.tipoSituacao = tipoSituacao;
204
        }
205
 
206
        @Column(name="dth_pedido", nullable=false)
305 espaco 207
        @NotNull(message = "Parâmetro obrigatório não preenchido: Data do pedido", groups = {Cadastrar.class, Alterar.class})
106 espaco 208
        public Date getDataPedido() {
209
                return dataPedido;
210
        }
211
        public void setDataPedido(Date dataPedido) {
212
                this.dataPedido = dataPedido;
213
        }
214
 
215
        @Column(name="dth_alteracao_situacao")
216
        public Date getDataUltimaAlteracaoSituacao() {
217
                return dataUltimaAlteracaoSituacao;
218
        }
219
        public void setDataUltimaAlteracaoSituacao(Date dataUltimaAlteracaoSituacao) {
220
                this.dataUltimaAlteracaoSituacao = dataUltimaAlteracaoSituacao;
221
        }
222
 
223
        @Column(name="tip_pedido")
224
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do pedido", groups = {Cadastrar.class, Alterar.class})
225
        public String getTipoPedido() {
226
                return tipoPedido;
227
        }
228
        public void setTipoPedido(String tipoPedido) {
229
                this.tipoPedido = tipoPedido;
230
        }
231
 
232
        @Column(name="dth_solicitacao_compra")
233
        public Date getDataSolicitadoParaComprar() {
234
                return dataSolicitadoParaComprar;
235
        }
236
        public void setDataSolicitadoParaComprar(Date dataSolicitadoParaComprar) {
237
                this.dataSolicitadoParaComprar = dataSolicitadoParaComprar;
238
        }
239
 
240
        /*
241
        @Column(name="obs_material_recolhido")
242
        public String getObservacaoMaterialRecolhido() {
243
                return observacaoMaterialRecolhido;
244
        }
245
        public void setObservacaoMaterialRecolhido(String observacaoMaterialRecolhido) {
246
                this.observacaoMaterialRecolhido = observacaoMaterialRecolhido;
247
        }
248
 
249
        @Column(name="dsc_servico")
250
        public String getDescricaoServico() {
251
                return descricaoServico;
252
        }
253
        public void setDescricaoServico(String descricaoServico) {
254
                this.descricaoServico = descricaoServico;
255
        }
256
        */
257
 
258
        @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL, orphanRemoval=true)
259
        public List<PedidoHistorico> getHistorico() {
260
                return historico;
261
        }
262
        public void setHistorico(List<PedidoHistorico> historico) {
263
                this.historico = historico;
264
        }
265
 
266
        @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval=true)
267
        public List<PedidoProduto> getProdutos() {
268
                return produtos;
269
        }
270
        public void setProdutos(List<PedidoProduto> produtos) {
271
                this.produtos = produtos;
272
        }
273
 
274
        @Override
275
        public int hashCode() {
276
                final int prime = 31;
277
                int result = 1;
278
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
279
                return result;
280
        }
281
 
282
        @Override
283
        public boolean equals(Object obj) {
284
                if (this == obj)
285
                        return true;
286
                if (obj == null)
287
                        return false;
288
                if (getClass() != obj.getClass())
289
                        return false;
290
                Pedido other = (Pedido) obj;
291
                if (sequencial == null) {
292
                        if (other.sequencial != null)
293
                                return false;
294
                } else if (!sequencial.equals(other.sequencial))
295
                        return false;
296
                return true;
297
        }
298
 
299
        @Transient
300
        public String getDescricaoDoModelo() {
301
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
302
        }
303
 
304
        @Transient
305
        public String getDescricaoDoTipoProduto() {
306
                return VerificadorUtil.naoEstaNulo(tipoProduto)? TipoProduto.parse(tipoProduto).getDescricao() : "";
307
        }
308
 
309
        @Transient
310
        public String getDescricaoDoTipoPedido() {
311
                return VerificadorUtil.naoEstaNulo(tipoPedido)? TipoPedido.parse(tipoPedido).getDescricao() : "";
312
        }
313
 
314
        @Transient
315
        public Boolean pedidoEhReserva() {
316
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.RESERVA.getValor()) : false;
317
        }
318
 
319
        @Transient
320
        public Boolean pedidoEhTroca() {
321
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.TROCA.getValor()) : false;
322
        }
323
 
324
        @Transient
325
        public Boolean pedidoEhAssistencia() {
326
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.ASSISTENCIA.getValor()) : false;
327
        }
328
 
329
        @Transient
305 espaco 330
        public Boolean pedidoEhPersonalizacao() {
331
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.PERSONALIZACAO.getValor()) : false;
332
        }
333
 
334
        @Transient
106 espaco 335
        public String getDescricaoDoEstiloProduto() {
336
                return VerificadorUtil.naoEstaNulo(estiloProduto)? TipoEstiloProduto.parse(estiloProduto).getDescricao() : "";
337
        }
338
 
339
        @Transient
340
        public String getDescricaoDaCorProduto() {
341
                return VerificadorUtil.naoEstaNulo(corProduto)? TipoCorProduto.parse(corProduto).getDescricao() : "";
342
        }
343
 
344
        @Transient
345
        public String getDescricaoDoGeneroProduto() {
346
                return VerificadorUtil.naoEstaNulo(genero)? TipoGenero.parse(genero).getDescricao() : "";
347
        }
348
 
349
        @Transient
350
        public String getNomeDoCliente() {
351
                return VerificadorUtil.naoEstaNulo(cliente)? cliente.getNome() : "";
352
        }
353
 
354
        @Transient
355
        public String getContatoDoCliente() {
356
                return VerificadorUtil.naoEstaNulo(cliente)? cliente.getContato() : "";
357
        }
358
 
359
        @Transient
360
        public String getTelefoneEeContatoDoCliente() {
361
                return VerificadorUtil.naoEstaNulo(cliente)?
362
                                VerificadorUtil.naoEstaNuloOuVazio(cliente.getTelefone())? cliente.getTelefone()  + " " + cliente.getContato():
363
                                        VerificadorUtil.naoEstaNuloOuVazio(cliente.getContato())? cliente.getContato() : "" : "";
364
        }
365
 
366
        @Transient
367
        public String getInformacoesBasicasDoCliente() {
368
                return VerificadorUtil.naoEstaNulo(cliente)? getNomeDoCliente() + " " + getContatoCliente(): getContatoCliente();
369
        }
370
 
371
        /*
372
        @Transient
373
        public String getDescricaoComModeloCompleta() {
374
                String descricaoCompleta = "";
375
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
376
                        descricaoCompleta = getDescricaoDoModelo() + " - ";
377
                }
378
                return descricaoCompleta + getDescricao();
379
        }
380
        */
381
 
382
        @Transient
383
        public Long getSequencialDoModelo() {
384
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
385
        }
386
 
387
        @Transient
388
        public Long getSequencialDaLoja() {
389
                return VerificadorUtil.naoEstaNulo(loja)? loja.getSequencial() : null;
390
        }
391
 
392
        @Transient
393
        public String getDescricaoDaLoja() {
394
                return VerificadorUtil.naoEstaNulo(loja)? loja.getDescricao() : null;
395
        }
396
 
397
        @Transient
398
        public Boolean foiAtendido() {
399
                return TipoSituacaoPedido.INVALIDO.getValor().equals(tipoSituacao) ||
400
                                TipoSituacaoPedido.FINALIZADO.getValor().equals(tipoSituacao) ||
401
                                TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor().equals(tipoSituacao);
402
        }
403
 
404
        @Transient
405
        public String getDescricaoDaSituacao() {
406
                return TipoSituacaoPedido.parse(getTipoSituacao()).getDescricao();
407
        }
408
 
409
        @Transient
410
        public Integer getQuantidadeDiasPedido() {
411
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataPedido());
412
        }
413
 
414
        @Transient
415
        public Integer getQuantidadeDiasAtendimento() {
416
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaAlteracaoSituacao());
417
        }
418
 
419
        @Transient
420
        public String getImagemCronometroPedido() {
421
                Integer quantidadeDias = getQuantidadeDiasPedido();
422
                if (quantidadeDias < 15) {
423
                        return "cronometro_verde_sembg";
424
                }
425
                if (quantidadeDias < 30) {
426
                        return "cronometro_amarelo_sembg";
427
                }
428
                return "cronometro_vermelho_sembg";
429
        }
430
 
431
        @Transient
432
        public String getCorSituacaoPedido() {
433
                return TipoSituacaoPedido.parse(getTipoSituacao()).getCor();
434
        }
435
 
436
        @Transient
437
        public String getCorPedido() {
438
                Integer quantidadeDias = getQuantidadeDiasPedido();
439
                if (quantidadeDias < 15) {
440
                        return "green";
441
                }
442
                return "red";
443
        }
444
 
445
        @Transient
446
        public String getCorPedidoAtendimento() {
447
                Integer quantidadeDias = getQuantidadeDiasAtendimento();
448
                if (quantidadeDias < 15) {
449
                        return "green";
450
                }
451
                return "red";
452
        }
453
 
454
        @Transient
455
        public Double getValorTotalProdutos() {
456
                Double total = 0.0;
457
                if (VerificadorUtil.naoEstaNuloOuVazio(getProdutos())) {
458
                        for (PedidoProduto pedidoProduto : getProdutos()) {
459
                                if (VerificadorUtil.naoEstaNulo(pedidoProduto.getValor())) {
460
                                        total = total + (pedidoProduto.getValor() * pedidoProduto.getQuantidade());
461
                                }
462
                        }
463
                }
464
                return total;
465
        }
466
 
467
        @Transient
468
        public List<PedidoHistorico> getHistoricoOrdenado() {
469
                List<PedidoHistorico> historicoOrdenado = null;
470
                if (VerificadorUtil.naoEstaNulo(getHistorico())) {
471
                        historicoOrdenado = new ArrayList<PedidoHistorico>(getHistorico());
472
                        Collections.sort(historicoOrdenado, new Comparator<PedidoHistorico>() {
473
                                public int compare(PedidoHistorico p1, PedidoHistorico p2) {
474
                                        return p1.getDataHistorico().compareTo(p2.getDataHistorico());
475
                                };
476
                        });
477
                }
478
                return historicoOrdenado;
479
        }
480
 
481
}