Subversion Repositories Integrator Subversion

Rev

Rev 140 | 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.Date;
6
import java.util.List;
7
import java.util.Set;
8
 
9
import javax.persistence.CascadeType;
10
import javax.persistence.Column;
11
import javax.persistence.Entity;
12
import javax.persistence.GeneratedValue;
13
import javax.persistence.GenerationType;
14
import javax.persistence.Id;
15
import javax.persistence.JoinColumn;
16
import javax.persistence.ManyToOne;
17
import javax.persistence.OneToMany;
18
import javax.persistence.SequenceGenerator;
19
import javax.persistence.Table;
20
import javax.persistence.Transient;
21
import javax.validation.constraints.NotNull;
22
import javax.validation.constraints.Size;
23
 
24
import org.hibernate.annotations.ForeignKey;
25
import org.hibernate.annotations.GenericGenerator;
26
import org.hibernate.validator.constraints.NotEmpty;
27
 
28
import br.com.ec.controller.util.UtilBean;
29
import br.com.ec.domain.model.tipos.TipoCorProduto;
30
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
31
import br.com.ec.domain.model.tipos.TipoGenero;
32
import br.com.ec.domain.model.tipos.TipoProduto;
33
import br.com.ec.domain.util.CodigoBarraEAN;
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_produto", schema="sc_sec")
42
public class Produto implements Serializable, Cloneable {
43
 
44
        private static final long serialVersionUID = 1L;
45
 
46
        private Long sequencial;
47
        private Modelo modelo;
48
        private Tributacao tributacao;
49
        private String codigo;
50
        private String codigoRapido;
51
        private String codigoEAN;
52
        private String codigoEANTributado;
53
        private String descricao;
54
        private String descricaoEtiqueta;
55
        private String tipo;
56
        private String genero;
57
        private String estilo;
58
        private String cor;
59
        private String observacao;
60
        private Double valorCompra;
61
        private Double valorVarejo;
62
        private Double valorVarejoPromocional;
63
        private Double valorVarejoMaximo;
64
        private Double valorVarejoPopular;
65
        private Double valorAtacado;
66
        private Date dataOnline;
67
        private Date dataOnlineShoplog;
68
        private Boolean indicadorFavorito;
69
        private Boolean indicadorComissionado;
70
        private Boolean indicadorEmissaoNotaFiscal;
71
        private Boolean ativo;
72
 
73
        private String codigoNCM;
74
        private String codigoEST;
75
        private Set<ProdutoPedidoCompra> pedidosCompra;
76
        private Set<ProdutoLoja> estoques;
77
        private Set<FornecedorProduto> fornecedores;
78
        private Set<ProdutoRelacionado> relacionados;
79
        private Set<ProdutoRelacionado> relacionadosReverse;
80
 
81
        private List<TransferenciaProduto> transferenciasAbertas = new ArrayList<TransferenciaProduto>();
82
        private List<PedidoProduto> pedidosPendentes = new ArrayList<PedidoProduto>();
83
 
84
        private Boolean indicadorOnline;
85
        private Boolean indicadorOnlineShoplog;
86
        private Date dataUltimaVenda;
87
//      private Set<ProdutoArquivo> fotos;
88
 
89
        @Id
90
        @SequenceGenerator(name = "sq_produto")
91
        @GeneratedValue(strategy = GenerationType.IDENTITY)
92
        @Column(name="seq_produto", nullable=false)
93
        public Long getSequencial() {
94
                return sequencial;
95
        }
96
        public void setSequencial(Long sequencial) {
97
                this.sequencial = sequencial;
98
        }
99
 
100
        @ManyToOne
101
        @ForeignKey(name="fk_produto_modelo")
102
        @NotNull(message = "Parâmetro obrigatório não preenchido: Modelo do produto", groups = {Cadastrar.class, Alterar.class})
103
        @JoinColumn(name = "seq_modelo", referencedColumnName="seq_modelo", nullable=true)
104
        public Modelo getModelo() {
105
                return modelo;
106
        }
107
        public void setModelo(Modelo modelo) {
108
                this.modelo = modelo;
109
        }
110
 
111
        @ManyToOne
112
        @ForeignKey(name="fk_produto_tributacao")
113
        @JoinColumn(name = "seq_tributacao", referencedColumnName="seq_tributacao", nullable=true)
114
        public Tributacao getTributacao() {
115
                return tributacao;
116
        }
117
        public void setTributacao(Tributacao tributacao) {
118
                this.tributacao = tributacao;
119
        }
120
 
121
        @Column(name="cod_produto")
122
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código do Produto")
123
        @NotNull(message = "Parâmetro obrigatório não preenchido: Código do produto", groups = {Cadastrar.class, Alterar.class})
124
        @NotEmpty(message = "Parâmetro obrigatório não preenchido: Código do produto", groups = {Cadastrar.class, Alterar.class})
125
        public String getCodigo() {
126
                return codigo;
127
        }
128
        public void setCodigo(String codigo) {
129
                this.codigo = codigo;
130
        }
131
 
132
        @Column(name="cod_rapido_produto")
133
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código Rápido")
134
        public String getCodigoRapido() {
135
                return codigoRapido;
136
        }
137
        public void setCodigoRapido(String codigoRapido) {
138
                this.codigoRapido = codigoRapido;
139
        }
140
 
141
        @Column(name="cod_ean")
142
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código de Barras (EAN)")
143
        public String getCodigoEAN() {
144
                return codigoEAN;
145
        }
146
        public void setCodigoEAN(String codigoEAN) {
147
                this.codigoEAN = codigoEAN;
148
        }
149
 
150
        @Column(name="cod_ean_tributado")
151
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código de Barras Tributado (EAN)")
152
        public String getCodigoEANTributado() {
153
                return codigoEANTributado;
154
        }
155
        public void setCodigoEANTributado(String codigoEANTributado) {
156
                this.codigoEANTributado = codigoEANTributado;
157
        }
158
 
159
        @Column(name="dsc_produto")
160
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Descrição do Produto")
161
        public String getDescricao() {
162
                return descricao;
163
        }
164
        public void setDescricao(String descricao) {
165
                this.descricao = StringUtil.setarUpperCaseComTrim(descricao);
166
        }
167
 
168
        @Column(name="dsc_etiqueta")
169
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Descrição da Etiqueta")
170
        public String getDescricaoEtiqueta() {
171
                return descricaoEtiqueta;
172
        }
173
        public void setDescricaoEtiqueta(String descricaoEtiqueta) {
174
                this.descricaoEtiqueta = StringUtil.setarUpperCaseComTrim(descricaoEtiqueta);
175
        }
176
 
177
        @Column(name="tip_produto")
178
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do produto", groups = {Cadastrar.class, Alterar.class})
179
        public String getTipo() {
180
                return tipo;
181
        }
182
        public void setTipo(String tipo) {
183
                this.tipo = tipo;
184
        }
185
 
186
        @Column(name="tip_genero")
187
        @NotNull(message = "Parâmetro obrigatório não preenchido: Gênero", groups = {Cadastrar.class, Alterar.class})
188
        public String getGenero() {
189
                return genero;
190
        }
191
        public void setGenero(String genero) {
192
                this.genero = genero;
193
        }
194
 
195
        @Column(name="tip_estilo")
196
        public String getEstilo() {
197
                return estilo;
198
        }
199
        public void setEstilo(String estilo) {
200
                this.estilo = estilo;
201
        }
202
 
203
        @Column(name="tip_cor")
204
        public String getCor() {
205
                return cor;
206
        }
207
        public void setCor(String cor) {
208
                this.cor = cor;
209
        }
210
 
211
        @Column(name="dsc_observacao")
212
        @Size(max = 1000, message = "Limite de caracteres ultrapassado: Observação")
213
        public String getObservacao() {
214
                return observacao;
215
        }
216
        public void setObservacao(String observacao) {
217
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
218
        }
219
 
220
        @Column(name="val_compra")
221
        public Double getValorCompra() {
222
                return valorCompra;
223
        }
224
        public void setValorCompra(Double valorCompra) {
225
                this.valorCompra = valorCompra;
226
        }
227
 
228
        @Transient
229
        public String valorCompraFormatado() {
230
                if (VerificadorUtil.naoEstaNulo(getValorCompra())) {
231
                        return StringUtil.formatarValor(getValorCompra());
232
                }
233
                return StringUtil.formatarValor(0.0);
234
        }
235
 
236
        @Column(name="val_varejo")
237
        public Double getValorVarejo() {
238
                return valorVarejo;
239
        }
240
        public void setValorVarejo(Double valorVarejo) {
241
                this.valorVarejo = valorVarejo;
242
        }
243
 
244
        @Column(name="val_varejo_promocional")
245
        public Double getValorVarejoPromocional() {
246
                return valorVarejoPromocional;
247
        }
248
        public void setValorVarejoPromocional(Double valorVarejoPromocional) {
249
                this.valorVarejoPromocional = valorVarejoPromocional;
250
        }
251
 
252
        @Column(name="val_varejo_maximo")
253
        public Double getValorVarejoMaximo() {
254
                return valorVarejoMaximo;
255
        }
256
        public void setValorVarejoMaximo(Double valorVarejoMaximo) {
257
                this.valorVarejoMaximo = valorVarejoMaximo;
258
        }
259
 
260
        @Column(name="val_varejo_popular")
261
        public Double getValorVarejoPopular() {
262
                return valorVarejoPopular;
263
        }
264
        public void setValorAtacado(Double valorAtacado) {
265
                this.valorAtacado = valorAtacado;
266
        }
267
 
268
        @Column(name="val_atacado")
269
        public Double getValorAtacado() {
270
                return valorAtacado;
271
        }
272
        public void setValorVarejoPopular(Double valorVarejoPopular) {
273
                this.valorVarejoPopular = valorVarejoPopular;
274
        }
275
 
276
        @Column(name="dat_online")
277
        public Date getDataOnline() {
278
                return dataOnline;
279
        }
280
        public void setDataOnline(Date dataOnline) {
281
                this.dataOnline = dataOnline;
282
        }
283
 
284
        @Column(name="dat_online_shoplog")
285
        public Date getDataOnlineShoplog() {
286
                return dataOnlineShoplog;
287
        }
288
        public void setDataOnlineShoplog(Date dataOnlineShoplog) {
289
                this.dataOnlineShoplog = dataOnlineShoplog;
290
        }
291
 
292
        @Column(name="ind_favorito")
293
        public Boolean getIndicadorFavorito() {
294
                return indicadorFavorito;
295
        }
296
        public void setIndicadorFavorito(Boolean indicadorFavorito) {
297
                this.indicadorFavorito = indicadorFavorito;
298
        }
299
 
300
        @Column(name="ind_comissionado")
301
        public Boolean getIndicadorComissionado() {
302
                return indicadorComissionado;
303
        }
304
        public void setIndicadorComissionado(Boolean indicadorComissionado) {
305
                this.indicadorComissionado = indicadorComissionado;
306
        }
307
 
308
        @Column(name="ind_emissao_nf")
309
        public Boolean getIndicadorEmissaoNotaFiscal() {
310
                if (VerificadorUtil.estaNulo(indicadorEmissaoNotaFiscal)) {
311
                        return false;
312
                }
313
                return indicadorEmissaoNotaFiscal;
314
        }
315
        public void setIndicadorEmissaoNotaFiscal(Boolean indicadorEmissaoNotaFiscal) {
316
                this.indicadorEmissaoNotaFiscal = indicadorEmissaoNotaFiscal;
317
        }
318
 
319
        @Column(name="ind_ativo")
320
        public Boolean getAtivo() {
321
                return ativo;
322
        }
323
        public void setAtivo(Boolean ativo) {
324
                this.ativo = ativo;
325
        }
326
 
327
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
328
        public Set<ProdutoPedidoCompra> getPedidosCompra() {
329
                return pedidosCompra;
330
        }
331
        public void setPedidosCompra(Set<ProdutoPedidoCompra> pedidosCompra) {
332
                this.pedidosCompra = pedidosCompra;
333
        }
334
 
335
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
336
        public Set<ProdutoLoja> getEstoques() {
337
                return estoques;
338
        }
339
        public void setEstoques(Set<ProdutoLoja> estoques) {
340
                this.estoques = estoques;
341
        }
342
 
343
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
344
        public Set<FornecedorProduto> getFornecedores() {
345
                return fornecedores;
346
        }
347
        public void setFornecedores(Set<FornecedorProduto> fornecedores) {
348
                this.fornecedores = fornecedores;
349
        }
350
 
351
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
352
        public Set<ProdutoRelacionado> getRelacionados() {
353
                return relacionados;
354
        }
355
        public void setRelacionados(Set<ProdutoRelacionado> relacionados) {
356
                this.relacionados = relacionados;
357
        }
358
 
359
        @OneToMany(mappedBy="produtoRelacionado", cascade=CascadeType.ALL, orphanRemoval=true)
360
        public Set<ProdutoRelacionado> getRelacionadosReverse() {
361
                return relacionadosReverse;
362
        }
363
        public void setRelacionadosReverse(Set<ProdutoRelacionado> relacionadosReverse) {
364
                this.relacionadosReverse = relacionadosReverse;
365
        }
366
 
367
        @Transient
368
        public Boolean getIndicadorOnline() {
369
                if (VerificadorUtil.estaNulo(this.getDataOnline()) && VerificadorUtil.estaNulo(this.indicadorOnline)) {
370
                        setIndicadorOnline(false);
371
                } else {
372
                        setIndicadorOnline(true);
373
                }
374
                return indicadorOnline;
375
        }
376
        public void setIndicadorOnline(Boolean indicadorOnline) {
377
                this.indicadorOnline = indicadorOnline;
378
        }
379
        public void atualizarDataOnline() {
380
                if (VerificadorUtil.estaNulo(this.getDataOnline())) {
381
                        this.setDataOnline(DataUtils.getDataAtual());
382
                } else {
383
                        this.setDataOnline(null);
384
                }
385
        }
386
 
387
        @Transient
388
        public Boolean getIndicadorOnlineShoplog() {
389
                if (VerificadorUtil.estaNulo(this.getDataOnlineShoplog()) && VerificadorUtil.estaNulo(this.indicadorOnlineShoplog)) {
390
                        setIndicadorOnlineShoplog(false);
391
                } else {
392
                        setIndicadorOnlineShoplog(true);
393
                }
394
                return indicadorOnlineShoplog;
395
        }
396
        public void setIndicadorOnlineShoplog(Boolean indicadorOnlineShoplog) {
397
                this.indicadorOnlineShoplog = indicadorOnlineShoplog;
398
        }
399
        public void atualizarDataOnlineShoplog() {
400
                if (VerificadorUtil.estaNulo(this.getDataOnlineShoplog())) {
401
                        this.setDataOnlineShoplog(DataUtils.getDataAtual());
402
                } else {
403
                        this.setDataOnlineShoplog(null);
404
                }
405
        }
406
 
407
        @Transient
408
        public List<TransferenciaProduto> getTransferenciasAbertas() {
409
                return transferenciasAbertas;
410
        }
411
        public void setTransferenciasAbertas(List<TransferenciaProduto> transferenciasAbertas) {
412
                this.transferenciasAbertas = transferenciasAbertas;
413
        }
414
 
415
        @Transient
416
        public List<PedidoProduto> getPedidosPendentes() {
417
                return pedidosPendentes;
418
        }
419
        public void setPedidosPendentes(List<PedidoProduto> pedidosPendentes) {
420
                this.pedidosPendentes = pedidosPendentes;
421
        }
422
 
423
        @Transient
424
        public Date getDataUltimaVenda() {
425
                return dataUltimaVenda;
426
        }
427
        public void setDataUltimaVenda(Date dataUltimaVenda) {
428
                this.dataUltimaVenda = dataUltimaVenda;
429
        }
430
 
431
        @Transient
432
        public Integer getQuantidadeDiasUltimaVenda() {
433
                if (VerificadorUtil.naoEstaNulo(getDataUltimaVenda())) {
434
                        return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaVenda());
435
                }
436
                return null;
437
        }
438
 
439
        @Transient
440
        public ArrayList<ProdutoRelacionado> getCompativeis() {
441
                ArrayList<ProdutoRelacionado> compativeis = new ArrayList<ProdutoRelacionado>();
442
                if (VerificadorUtil.naoEstaNulo(getRelacionados())) {
443
                        compativeis.addAll(getRelacionados());
444
                }
445
                if (VerificadorUtil.naoEstaNulo(getRelacionadosReverse())) {
446
                        compativeis.addAll(getRelacionadosReverse());
447
                }
448
                return compativeis;
449
        }
450
 
451
        @Transient
452
        public String getCodigoNCM() {
453
                return codigoNCM;
454
        }
455
        public void setCodigoNCM(String codigoNCM) {
456
                this.codigoNCM = codigoNCM;
457
        }
458
 
459
        @Transient
460
        public String getCodigoEST() {
461
                return codigoEST;
462
        }
463
        public void setCodigoEST(String codigoEST) {
464
                this.codigoEST = codigoEST;
465
        }
466
 
467
        /*
468
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
469
        public Set<ProdutoArquivo> getFotos() {
470
                return fotos;
471
        }
472
        public void setFotos(Set<ProdutoArquivo> fotos) {
473
                this.fotos = fotos;
474
        }
475
        */
476
        /***************************************************************/
477
 
478
        @Transient
479
        public String getCodigoProdutoPadrao() {
480
                try {
481
                        return VerificadorUtil.naoEstaNulo(codigo) ? String.format("%06d", new Long(codigo.trim())) : "";
482
                } catch (Exception e) {
483
                        return "";
484
                }
485
        }
486
 
487
        public static void main(String[] args) {
488
//              System.out.println(String.format("%07d", new Long(12879)));
489
//              codigoBarras.gerarCodigoBarra(String.format("%012d", new Long(12879)));
490
//              System.out.println(codigoBarras.getCodigoBarra());
491
                System.out.println(CodigoBarraEAN.gerarCodigoBarras("6659"));
492
//              System.out.println(codigoBarras.longToEan13("900000012879"));
493
        }
494
 
495
        @Transient
496
        public String getCodigoDeBarrasProdutoPadrao() {
497
                try {
498
                        return VerificadorUtil.naoEstaNulo(codigo)? String.format("%07d", new Long(codigo)) : "";
499
//                      return VerificadorUtil.naoEstaNulo(codigo) ? StringUtils.rightPad(codigo, 12, "0") : "";
500
                } catch (Exception e) {
501
                        return "";
502
                }
503
        }
504
 
505
        @Transient
506
        public String getDescricaoDoModelo() {
507
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
508
        }
509
 
510
        @Transient
511
        public String getDescricaoTecnicaDoModelo() {
512
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? modelo.getDescricaoTecnica() : "" : "";
513
        }
514
 
515
        @Transient
516
        public String getDescricaoTecnicaDoModeloComParenteses() {
517
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? " (" + modelo.getDescricaoTecnica() + ") " : "" : "";
518
        }
519
 
520
        @Transient
521
        public Long getSequencialDoModelo() {
522
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
523
        }
524
 
525
        @Transient
526
        public Marca getMarcaDoModelo() {
527
                if (VerificadorUtil.naoEstaNulo(modelo)) {
528
                        if (VerificadorUtil.naoEstaNulo(modelo.getMarca())) {
529
                                return modelo.getMarca();
530
                        }
531
                }
532
                return null;
533
        }
534
 
535
        @Transient
536
        public String getDescricaoDaMarcaDoModelo() {
537
                return VerificadorUtil.naoEstaNulo(getMarcaDoModelo())? getMarcaDoModelo().getDescricao() : "";
538
        }
539
 
540
        @Transient
541
        public String getDescricaoComModeloCompletaComCodigo() {
542
                StringBuilder descricaoCompleta = new StringBuilder();
543
                descricaoCompleta.append("[");
544
                descricaoCompleta.append(getCodigoProdutoPadrao());
545
                descricaoCompleta.append("] ");
546
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
547
                        descricaoCompleta.append(getDescricaoDoModelo());
548
                        descricaoCompleta.append(" - ");
549
                }
550
                descricaoCompleta.append(getDescricaoCompleta());
551
                return descricaoCompleta.toString();
552
        }
553
 
554
        @Transient
555
        public String getDescricaoComModeloCompleta() {
556
                StringBuilder descricaoCompleta = new StringBuilder();
557
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
558
                        descricaoCompleta.append(getDescricaoDoModelo());
559
                        descricaoCompleta.append(" - ");
560
                }
561
                descricaoCompleta.append(getDescricaoCompleta());
562
                return descricaoCompleta.toString();
563
        }
564
 
565
        @Transient
566
        public String getDescricaoCompleta() {
567
                StringBuilder descricaoCompleta = new StringBuilder();
568
                if (VerificadorUtil.naoEstaNuloOuVazio(getEstilo())) {
569
                        descricaoCompleta.append(getDescricaoDoEstilo());
570
                        descricaoCompleta.append(" ");
571
                }
572
                descricaoCompleta.append(getDescricao());
573
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
574
                        descricaoCompleta.append(" (");
575
                        descricaoCompleta.append(getDescricaoDaCor());
576
                        descricaoCompleta.append(")");
577
                }
578
                return descricaoCompleta.toString();
579
        }
580
 
581
        @Transient
582
        public String getDescricaoCompletaCapa() {
583
                StringBuilder descricaoCompleta = new StringBuilder();
584
                descricaoCompleta.append(getCodigo());
585
                descricaoCompleta.append(" - ");
586
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
587
                        descricaoCompleta.append("CAPA");
588
                }
589
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
590
                        descricaoCompleta.append(" ");
591
                        descricaoCompleta.append(getDescricaoDoModelo());
592
                }
593
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
594
                        descricaoCompleta.append(" ");
595
                        descricaoCompleta.append(getDescricaoDoEstilo());
596
                }
597
                descricaoCompleta.append(" ");
598
                if (this.getDescricao().length() > 50) {
599
                        descricaoCompleta.append(getDescricao().substring(0, 50));
600
                } else {
601
                        descricaoCompleta.append(getDescricao());
602
                }
603
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
604
                        descricaoCompleta.append(" (");
605
                        descricaoCompleta.append(getDescricaoDaCor());
606
                        descricaoCompleta.append(")");
607
                }
608
                return descricaoCompleta.toString();
609
        }
610
 
611
        @Transient
612
        public String getDescricaoDoTipo() {
613
                return VerificadorUtil.naoEstaNuloOuVazio(getTipo())? TipoProduto.parse(getTipo()).getDescricao() : null;
614
        }
615
 
616
        @Transient
617
        public String getDescricaoDoGenero() {
618
                return VerificadorUtil.naoEstaNuloOuVazio(getGenero())? TipoGenero.parse(getGenero()).getDescricao() : null;
619
        }
620
 
621
        @Transient
622
        public String getDescricaoDoEstilo() {
623
                return VerificadorUtil.naoEstaNuloOuVazio(getEstilo())? TipoEstiloProduto.parse(getEstilo()).getDescricao() : null;
624
        }
625
 
626
        @Transient
627
        public String getDescricaoDaCor() {
628
                return VerificadorUtil.naoEstaNuloOuVazio(getCor())? TipoCorProduto.parse(getCor()).getDescricao() : null;
629
        }
630
 
631
        @Transient
632
        public String getDescricaoNotaFiscal(String observacaoNotaFiscal) {
633
                StringBuilder descricaoCompleta = new StringBuilder();
634
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
635
                        descricaoCompleta.append("CAPA");
636
                }
637
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor()) /*&&
638
                                !this.getTipo().equals(TipoProduto.RESTAURANTE.getValor())*/) {
639
                        descricaoCompleta.append(" ");
640
                        descricaoCompleta.append(this.getDescricaoDoModelo());
641
                }
642
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
643
                        descricaoCompleta.append(" ");
644
                        descricaoCompleta.append(this.getDescricaoDoEstilo());
645
                }
646
                descricaoCompleta.append(" ");
647
                if (this.getDescricao().length() > 50) {
648
                        descricaoCompleta.append(this.getDescricao().substring(0, 50));
649
                } else {
650
                        descricaoCompleta.append(this.getDescricao());
651
                }
652
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getCor())) {
653
                        descricaoCompleta.append(" (");
654
                        descricaoCompleta.append(this.getDescricaoDaCor());
655
                        descricaoCompleta.append(")");
656
                }
657
                if (VerificadorUtil.naoEstaNuloOuVazio(observacaoNotaFiscal)) {
658
                        descricaoCompleta.append(" ");
659
                        descricaoCompleta.append(observacaoNotaFiscal);
660
                }
661
                return descricaoCompleta.toString().trim();
662
        }
663
 
664
        @Transient
665
        public Integer getQuantidadeEstoqueTotal() {
666
                Integer total = 0;
667
                /*
668
                for (ProdutoLoja estoque : estoques) {
669
                        total = total + estoque.getQuantidadeEstoque();
670
                }
671
                */
672
                return total;
673
        }
674
 
675
        @Transient
676
        public Boolean verificarSeQuantidadeEhMenor(Integer primeiro, Integer segundo) {
677
                if (VerificadorUtil.naoEstaNulo(primeiro) && VerificadorUtil.naoEstaNulo(segundo)) {
678
                        return primeiro <= segundo ? true : false;
679
                }
680
                return false;
681
        }
682
 
683
        public void atualizarDados(Produto produto) {
684
                this.codigo = produto.getCodigo();
685
                this.descricao = produto.getDescricao();
686
                this.valorCompra = produto.getValorCompra();
687
                this.valorVarejo = produto.getValorVarejo();
688
                if (produto.getQuantidadeEstoqueTotal() > 0) {
689
                        this.setAtivo(true);
690
                }
691
        }
692
 
693
        public void atualizarDadosNfe(nfce.java.TNFe.InfNFe.Det produtoNota) {
694
                if (VerificadorUtil.estaNuloOuVazio(this.getDescricao())) {
695
                        this.setDescricao(produtoNota.getProd().getXProd());
696
                }
697
                if (VerificadorUtil.estaNuloOuVazio(this.getGenero())) {
698
                        this.setGenero(TipoGenero.UNISSEX.getValor());
699
                }
700
                if (VerificadorUtil.estaNulo(this.getValorCompra())) {
701
                        if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnCom())) {
702
                                this.setValorCompra(retornarValorComDesconto(produtoNota.getProd()));
703
                        }
704
                }
705
 
706
                this.setCodigoEAN(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEAN()));
707
                this.setCodigoEANTributado(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEANTrib()));
708
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getNCM())) {
709
                        this.setCodigoNCM(produtoNota.getProd().getNCM());
710
                }
711
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getCEST())) {
712
                        this.setCodigoEST(produtoNota.getProd().getCEST());
713
                }
714
        }
715
 
716
        public Double retornarValorComDesconto(nfce.java.TNFe.InfNFe.Det.Prod produto) {
717
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getVDesc())) {
718
                        Double valorUnitarioDescontado = (new Double(produto.getVProd()) - new Double(produto.getVDesc())) / new Double(produto.getQCom()).intValue();
719
                        return valorUnitarioDescontado;
720
                }
721
                return new Double(produto.getVUnCom());
722
        }
723
 
724
        public Double retornarLucroBruto() {
725
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
726
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
727
                                return (getValorVarejoPromocional() / getValorCompra()) - 1.0;
728
                        } else {
729
                                return (getValorVarejo() / getValorCompra()) - 1.0;
730
                        }
731
                }
732
                return 0.0;
733
        }
734
 
735
        public Double retornarMargemBruta() {
736
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
737
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
738
                                return (100 - (getValorCompra()*100/getValorVarejoPromocional())) / 100;
739
                        } else {
740
                                return (100 - (getValorCompra()*100/getValorVarejo())) / 100;
741
                        }
742
                }
743
                return 0.0;
744
        }
745
 
746
        public Double retornarValorMargemBruta() {
747
                Double margemBruta = retornarMargemBruta();
748
                if (margemBruta > 0.0) {
749
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
750
                                return margemBruta * getValorVarejoPromocional();
751
                        } else {
752
                                return margemBruta * getValorVarejo();
753
                        }
754
                }
755
                return 0.0;
756
        }
757
 
758
        @Transient
759
        public String retornarCorMargem() {
760
                Double margemBruta = retornarMargemBruta();
761
                if (margemBruta > 0.50) return "green";
762
                if (margemBruta > 0.34) return "orange";
763
                if (margemBruta < 0.35) return "red";
764
                return "black";
765
        }
766
 
767
        public String retornarMargemBrutaFormatada() {
768
                return StringUtil.formatarPercentual(retornarMargemBruta());
769
        }
770
 
771
        public String retornarLucroBrutoFormatado() {
772
                return StringUtil.formatarPercentual(retornarLucroBruto());
773
        }
774
 
775
        @Transient
776
        public String getFornecedorMenorValorComprado(Fornecedor fornecedorComprar) {
777
                FornecedorProduto menorValor = null;
778
                for (FornecedorProduto fornecedorProduto : this.getFornecedores()) {
779
                        if (menorValor == null) {
780
                                menorValor = fornecedorProduto;
781
                        } else {
782
                                if (VerificadorUtil.estaNulo(menorValor.getValorCompra()) &&
783
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
784
                                        menorValor = fornecedorProduto;
785
                                }
786
                                if (VerificadorUtil.naoEstaNulo(menorValor.getValorCompra()) &&
787
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
788
                                        if (menorValor.getValorCompra() > fornecedorProduto.getValorCompra()) {
789
                                                menorValor = fornecedorProduto;
790
                                        }
791
                                }
792
                        }
793
                }
794
                String menorValorComprado = "";
795
                if (VerificadorUtil.naoEstaNulo(menorValor)) {
796
                        menorValorComprado = "R$ " + formatarValor(menorValor.getValorCompra());
797
                        if (VerificadorUtil.naoEstaNulo(menorValor.getFornecedor().getNomeDaPessoa())) {
798
                                if (!menorValor.getFornecedor().equals(fornecedorComprar)) {
799
                                        menorValorComprado = menorValorComprado + ", " + menorValor.getFornecedor().getNomeDaPessoa();
800
                                        if (VerificadorUtil.naoEstaNulo(menorValor.getIdentificador())) {
801
                                                menorValorComprado = menorValorComprado + ", ID: " + menorValor.getIdentificador();
802
                                        }
803
                                }
804
                        }
805
                }
806
                return menorValorComprado;
807
        }
808
 
809
        private String formatarValor(Double valor) {
810
                return VerificadorUtil.naoEstaNulo(valor)? String.format("%.2f", valor) : "0,00";
811
        }
812
 
813
        @Override
814
        public int hashCode() {
815
                final int prime = 31;
816
                int result = 1;
817
                result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
818
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
819
                return result;
820
        }
821
 
822
        @Override
823
        public boolean equals(Object obj) {
824
                if (this == obj)
825
                        return true;
826
                if (obj == null)
827
                        return false;
828
                if (getClass() != obj.getClass())
829
                        return false;
830
                Produto other = (Produto) obj;
831
                if (codigo == null) {
832
                        if (other.codigo != null)
833
                                return false;
834
                } else if (!codigo.equals(other.codigo))
835
                        return false;
836
                if (sequencial == null) {
837
                        if (other.sequencial != null)
838
                                return false;
839
                } else if (!sequencial.equals(other.sequencial))
840
                        return false;
841
                return true;
842
        }
843
 
844
        @Transient
845
        public void prepararNovoProduto() {
846
                setAtivo(true);
847
                setIndicadorFavorito(false);
848
                setIndicadorComissionado(true);
849
                setIndicadorEmissaoNotaFiscal(false);
850
        }
851
 
852
        @Transient
853
        public boolean tipoProdutoEhCapa() {
854
                return getTipo().equals(TipoProduto.CAPA.getValor());
855
        }
856
 
857
        @Transient
858
        public boolean tipoProdutoEhPelicula() {
859
                return getTipo().equals(TipoProduto.PELICULA.getValor());
860
        }
861
 
862
        @Transient
863
        public boolean tipoProdutoEhCapaOuAcessorio() {
864
                return tipoProdutoEhCapa() || getTipo().equals(TipoProduto.ACESSORIO.getValor());
865
        }
866
 
867
        @Transient
868
        public boolean tipoProdutoEhCapaOuPelicula() {
869
                return tipoProdutoEhCapa() || tipoProdutoEhPelicula();
870
        }
871
 
872
        @Transient
873
        public boolean tipoProdutoEhServico() {
874
                return getTipo().equals(TipoProduto.SERVICO.getValor());
875
        }
876
 
877
        /*@Transient
878
        public boolean tipoProdutoEhRemedioOuOutros() {
879
                return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
880
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
881
                                getTipo().equals(TipoProduto.OUTROS.getValor());
882
        }*/
883
 
884
        @Transient
885
        public boolean tipoProdutoTributado() {
886
                return getTipo().equals(TipoProduto.ACESSORIO.getValor()) ||
887
                                getTipo().equals(TipoProduto.APARELHOS.getValor()) ||
888
                                getTipo().equals(TipoProduto.CAPA.getValor()) ||
889
                                getTipo().equals(TipoProduto.PELICULA.getValor());
890
        }
891
 
892
        @Transient
893
        public boolean tipoProdutoNaoTributado() {
894
                return /*getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
895
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
896
                                getTipo().equals(TipoProduto.OUTROS.getValor()) ||*/
897
                                getTipo().equals(TipoProduto.SERVICO.getValor());
898
        }
899
 
900
        @Transient
901
        public Boolean verificarSeCodigoEhIgual(String codigoProduto) {
902
                if (codigoProduto.length() > 6 && VerificadorUtil.naoEstaNuloOuVazio(this.getCodigoEAN())) {
903
                        if (this.getCodigoEAN().equals(codigoProduto)) {
904
                                return true;
905
                        }
906
                }
907
                if (CodigoBarraEAN.validarCodigoBarras(codigoProduto)) {
908
                        return this.getCodigoProdutoPadrao().equals(CodigoBarraEAN.retornarCodigoDoCodigoBarras(codigoProduto));
909
                } else {
910
                        return this.getCodigoProdutoPadrao().equals(UtilBean.padraoCodigoProduto(codigoProduto));
911
                }
912
        }
913
 
914
        @Transient
915
        public String getCodigoNCMDaTributacao() {
916
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoNCM() : null;
917
        }
918
 
919
        @Transient
920
        public String getCodigoESTDaTributacao() {
921
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoEST() : null;
922
        }
923
 
924
        @Override
925
        public Produto clone() throws CloneNotSupportedException {
926
                return (Produto) super.clone();
927
        }
928
 
929
        @Transient
930
        public String corDaDescricaoPeloGenero() {
931
                if (VerificadorUtil.naoEstaNulo(getGenero())) {
932
                        if (getGenero().equals(TipoGenero.MASCULINO.getValor())) return "#1c82df";
933
                        if (getGenero().equals(TipoGenero.FEMININO.getValor())) return "#f06364";
934
                }
935
                return "black";
936
        }
937
 
938
        @Transient
939
        public Boolean getProdutoEmPromocao() {
940
                if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
941
                        return getValorVarejoPromocional() > 0.00;
942
                }
943
                return false;
944
        }
945
 
946
        @Transient
947
        public void prepararDadosParaDuplicacao(Produto produto) {
948
                this.modelo = produto.getModelo();
949
                this.tributacao = produto.getTributacao();
950
                this.descricao = produto.getDescricao();
951
                this.tipo = produto.getTipo();
952
                this.estilo = produto.getEstilo();
953
                this.genero = produto.getGenero();
954
                this.cor = produto.getCor();
955
                this.observacao = produto.getObservacao();
956
                this.valorCompra = produto.getValorCompra();
957
                this.valorVarejo = produto.getValorVarejo();
958
                this.valorVarejoPromocional = produto.getValorVarejoPromocional();
959
                this.valorVarejoMaximo = produto.getValorVarejoMaximo();
960
                this.valorVarejoPopular = produto.getValorVarejoPopular();
961
                this.valorAtacado = produto.getValorAtacado();
962
                this.indicadorComissionado = produto.getIndicadorComissionado();
963
                this.indicadorEmissaoNotaFiscal = produto.getIndicadorEmissaoNotaFiscal();
964
                this.codigoNCM = produto.getCodigoNCM();
965
                this.codigoEST = produto.getCodigoEST();
966
                this.dataOnline = produto.getDataOnline();
967
                this.indicadorOnline = produto.getIndicadorOnline();
968
                this.indicadorOnlineShoplog = produto.getIndicadorOnlineShoplog();
969
                this.setAtivo(true);
970
        }
971
 
972
}