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