Subversion Repositories Integrator Subversion

Rev

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

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