Subversion Repositories Integrator Subversion

Rev

Rev 106 | Rev 144 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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