Subversion Repositories Integrator Subversion

Rev

Rev 106 | 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
 
28
import br.com.ec.domain.model.tipos.TipoCorProduto;
29
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
30
import br.com.ec.domain.model.tipos.TipoGenero;
31
import br.com.ec.domain.model.tipos.TipoPedido;
32
import br.com.ec.domain.model.tipos.TipoProduto;
33
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;
34
import br.edu.cesmac.core.interfaces.Alterar;
35
import br.edu.cesmac.core.interfaces.Cadastrar;
36
import br.edu.cesmac.core.util.DataUtils;
37
import br.edu.cesmac.core.util.StringUtil;
38
import br.edu.cesmac.core.util.VerificadorUtil;
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")
198
        public String getTipoSituacao() {
199
                return tipoSituacao;
200
        }
201
        public void setTipoSituacao(String tipoSituacao) {
202
                this.tipoSituacao = tipoSituacao;
203
        }
204
 
205
        @Column(name="dth_pedido", nullable=false)
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
 
221
        @Column(name="tip_pedido")
222
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do pedido", groups = {Cadastrar.class, Alterar.class})
223
        public String getTipoPedido() {
224
                return tipoPedido;
225
        }
226
        public void setTipoPedido(String tipoPedido) {
227
                this.tipoPedido = tipoPedido;
228
        }
229
 
230
        @Column(name="dth_solicitacao_compra")
231
        public Date getDataSolicitadoParaComprar() {
232
                return dataSolicitadoParaComprar;
233
        }
234
        public void setDataSolicitadoParaComprar(Date dataSolicitadoParaComprar) {
235
                this.dataSolicitadoParaComprar = dataSolicitadoParaComprar;
236
        }
237
 
238
        /*
239
        @Column(name="obs_material_recolhido")
240
        public String getObservacaoMaterialRecolhido() {
241
                return observacaoMaterialRecolhido;
242
        }
243
        public void setObservacaoMaterialRecolhido(String observacaoMaterialRecolhido) {
244
                this.observacaoMaterialRecolhido = observacaoMaterialRecolhido;
245
        }
246
 
247
        @Column(name="dsc_servico")
248
        public String getDescricaoServico() {
249
                return descricaoServico;
250
        }
251
        public void setDescricaoServico(String descricaoServico) {
252
                this.descricaoServico = descricaoServico;
253
        }
254
        */
255
 
256
        @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL, orphanRemoval=true)
257
        public List<PedidoHistorico> getHistorico() {
258
                return historico;
259
        }
260
        public void setHistorico(List<PedidoHistorico> historico) {
261
                this.historico = historico;
262
        }
263
 
264
        @OneToMany(mappedBy="pedido", cascade=CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval=true)
265
        public List<PedidoProduto> getProdutos() {
266
                return produtos;
267
        }
268
        public void setProdutos(List<PedidoProduto> produtos) {
269
                this.produtos = produtos;
270
        }
271
 
272
        @Override
273
        public int hashCode() {
274
                final int prime = 31;
275
                int result = 1;
276
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
277
                return result;
278
        }
279
 
280
        @Override
281
        public boolean equals(Object obj) {
282
                if (this == obj)
283
                        return true;
284
                if (obj == null)
285
                        return false;
286
                if (getClass() != obj.getClass())
287
                        return false;
288
                Pedido other = (Pedido) obj;
289
                if (sequencial == null) {
290
                        if (other.sequencial != null)
291
                                return false;
292
                } else if (!sequencial.equals(other.sequencial))
293
                        return false;
294
                return true;
295
        }
296
 
297
        @Transient
298
        public String getDescricaoDoModelo() {
299
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
300
        }
301
 
302
        @Transient
303
        public String getDescricaoDoTipoProduto() {
304
                return VerificadorUtil.naoEstaNulo(tipoProduto)? TipoProduto.parse(tipoProduto).getDescricao() : "";
305
        }
306
 
307
        @Transient
308
        public String getDescricaoDoTipoPedido() {
309
                return VerificadorUtil.naoEstaNulo(tipoPedido)? TipoPedido.parse(tipoPedido).getDescricao() : "";
310
        }
311
 
312
        @Transient
313
        public Boolean pedidoEhReserva() {
314
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.RESERVA.getValor()) : false;
315
        }
316
 
317
        @Transient
318
        public Boolean pedidoEhTroca() {
319
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.TROCA.getValor()) : false;
320
        }
321
 
322
        @Transient
323
        public Boolean pedidoEhAssistencia() {
324
                return VerificadorUtil.naoEstaNuloOuVazio(tipoPedido) ? tipoPedido.equals(TipoPedido.ASSISTENCIA.getValor()) : false;
325
        }
326
 
327
        @Transient
328
        public String getDescricaoDoEstiloProduto() {
329
                return VerificadorUtil.naoEstaNulo(estiloProduto)? TipoEstiloProduto.parse(estiloProduto).getDescricao() : "";
330
        }
331
 
332
        @Transient
333
        public String getDescricaoDaCorProduto() {
334
                return VerificadorUtil.naoEstaNulo(corProduto)? TipoCorProduto.parse(corProduto).getDescricao() : "";
335
        }
336
 
337
        @Transient
338
        public String getDescricaoDoGeneroProduto() {
339
                return VerificadorUtil.naoEstaNulo(genero)? TipoGenero.parse(genero).getDescricao() : "";
340
        }
341
 
342
        @Transient
343
        public String getNomeDoCliente() {
344
                return VerificadorUtil.naoEstaNulo(cliente)? cliente.getNome() : "";
345
        }
346
 
347
        @Transient
348
        public String getContatoDoCliente() {
349
                return VerificadorUtil.naoEstaNulo(cliente)? cliente.getContato() : "";
350
        }
351
 
352
        @Transient
353
        public String getTelefoneEeContatoDoCliente() {
354
                return VerificadorUtil.naoEstaNulo(cliente)?
355
                                VerificadorUtil.naoEstaNuloOuVazio(cliente.getTelefone())? cliente.getTelefone()  + " " + cliente.getContato():
356
                                        VerificadorUtil.naoEstaNuloOuVazio(cliente.getContato())? cliente.getContato() : "" : "";
357
        }
358
 
359
        @Transient
360
        public String getInformacoesBasicasDoCliente() {
361
                return VerificadorUtil.naoEstaNulo(cliente)? getNomeDoCliente() + " " + getContatoCliente(): getContatoCliente();
362
        }
363
 
364
        /*
365
        @Transient
366
        public String getDescricaoComModeloCompleta() {
367
                String descricaoCompleta = "";
368
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
369
                        descricaoCompleta = getDescricaoDoModelo() + " - ";
370
                }
371
                return descricaoCompleta + getDescricao();
372
        }
373
        */
374
 
375
        @Transient
376
        public Long getSequencialDoModelo() {
377
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
378
        }
379
 
380
        @Transient
381
        public Long getSequencialDaLoja() {
382
                return VerificadorUtil.naoEstaNulo(loja)? loja.getSequencial() : null;
383
        }
384
 
385
        @Transient
386
        public String getDescricaoDaLoja() {
387
                return VerificadorUtil.naoEstaNulo(loja)? loja.getDescricao() : null;
388
        }
389
 
390
        @Transient
391
        public Boolean foiAtendido() {
392
                return TipoSituacaoPedido.INVALIDO.getValor().equals(tipoSituacao) ||
393
                                TipoSituacaoPedido.FINALIZADO.getValor().equals(tipoSituacao) ||
394
                                TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor().equals(tipoSituacao);
395
        }
396
 
397
        @Transient
398
        public String getDescricaoDaSituacao() {
399
                return TipoSituacaoPedido.parse(getTipoSituacao()).getDescricao();
400
        }
401
 
402
        @Transient
403
        public Integer getQuantidadeDiasPedido() {
404
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataPedido());
405
        }
406
 
407
        @Transient
408
        public Integer getQuantidadeDiasAtendimento() {
409
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaAlteracaoSituacao());
410
        }
411
 
412
        @Transient
413
        public String getImagemCronometroPedido() {
414
                Integer quantidadeDias = getQuantidadeDiasPedido();
415
                if (quantidadeDias < 15) {
416
                        return "cronometro_verde_sembg";
417
                }
418
                if (quantidadeDias < 30) {
419
                        return "cronometro_amarelo_sembg";
420
                }
421
                return "cronometro_vermelho_sembg";
422
        }
423
 
424
        @Transient
425
        public String getCorSituacaoPedido() {
426
                return TipoSituacaoPedido.parse(getTipoSituacao()).getCor();
427
        }
428
 
429
        @Transient
430
        public String getCorPedido() {
431
                Integer quantidadeDias = getQuantidadeDiasPedido();
432
                if (quantidadeDias < 15) {
433
                        return "green";
434
                }
435
                return "red";
436
        }
437
 
438
        @Transient
439
        public String getCorPedidoAtendimento() {
440
                Integer quantidadeDias = getQuantidadeDiasAtendimento();
441
                if (quantidadeDias < 15) {
442
                        return "green";
443
                }
444
                return "red";
445
        }
446
 
447
        @Transient
448
        public Double getValorTotalProdutos() {
449
                Double total = 0.0;
450
                if (VerificadorUtil.naoEstaNuloOuVazio(getProdutos())) {
451
                        for (PedidoProduto pedidoProduto : getProdutos()) {
452
                                if (VerificadorUtil.naoEstaNulo(pedidoProduto.getValor())) {
453
                                        total = total + (pedidoProduto.getValor() * pedidoProduto.getQuantidade());
454
                                }
455
                        }
456
                }
457
                return total;
458
        }
459
 
460
        @Transient
461
        public List<PedidoHistorico> getHistoricoOrdenado() {
462
                List<PedidoHistorico> historicoOrdenado = null;
463
                if (VerificadorUtil.naoEstaNulo(getHistorico())) {
464
                        historicoOrdenado = new ArrayList<PedidoHistorico>(getHistorico());
465
                        Collections.sort(historicoOrdenado, new Comparator<PedidoHistorico>() {
466
                                public int compare(PedidoHistorico p1, PedidoHistorico p2) {
467
                                        return p1.getDataHistorico().compareTo(p2.getDataHistorico());
468
                                };
469
                        });
470
                }
471
                return historicoOrdenado;
472
        }
473
 
474
}