Subversion Repositories Integrator Subversion

Rev

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

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