Subversion Repositories Integrator Subversion

Rev

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