Subversion Repositories Integrator Subversion

Rev

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