Subversion Repositories Integrator Subversion

Rev

Rev 591 | Rev 608 | 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;
144 espaco 23
import javax.xml.bind.JAXBElement;
106 espaco 24
 
25
import org.hibernate.annotations.ForeignKey;
26
import org.hibernate.validator.constraints.NotEmpty;
27
 
28
import br.com.ec.controller.util.UtilBean;
195 espaco 29
import br.com.ec.core.interfaces.Alterar;
30
import br.com.ec.core.interfaces.Cadastrar;
31
import br.com.ec.core.util.DataUtils;
32
import br.com.ec.core.util.StringUtil;
33
import br.com.ec.core.util.VerificadorUtil;
106 espaco 34
import br.com.ec.domain.model.tipos.TipoCorProduto;
35
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
36
import br.com.ec.domain.model.tipos.TipoGenero;
37
import br.com.ec.domain.model.tipos.TipoProduto;
144 espaco 38
import br.com.ec.domain.shared.ConstantesSEC;
106 espaco 39
import br.com.ec.domain.util.CodigoBarraEAN;
40
 
41
@Entity
42
@Table(name="sec_produto", schema="sc_sec")
43
public class Produto implements Serializable, Cloneable {
44
 
45
        private static final long serialVersionUID = 1L;
46
 
47
        private Long sequencial;
48
        private Modelo modelo;
49
        private Tributacao tributacao;
550 blopes 50
        private Estampa estampa;
581 blopes 51
        private SubtipoProduto subtipoProduto;
106 espaco 52
        private String codigo;
53
        private String codigoRapido;
54
        private String codigoEAN;
55
        private String codigoEANTributado;
56
        private String descricao;
57
        private String descricaoEtiqueta;
170 espaco 58
        private String descricaoParaNotaFiscal;
106 espaco 59
        private String tipo;
60
        private String genero;
61
        private String estilo;
62
        private String cor;
63
        private String observacao;
64
        private Double valorCompra;
65
        private Double valorVarejo;
66
        private Double valorVarejoPromocional;
67
        private Double valorVarejoMaximo;
68
        private Double valorVarejoPopular;
69
        private Double valorAtacado;
70
        private Date dataOnline;
71
        private Date dataOnlineShoplog;
270 espaco 72
        private Date dataOnlineMercadoLivre;
106 espaco 73
        private Boolean indicadorFavorito;
74
        private Boolean indicadorComissionado;
305 espaco 75
        private Boolean indicadorPersonalizavel;
106 espaco 76
        private Boolean indicadorEmissaoNotaFiscal;
140 espaco 77
 
144 espaco 78
        private Double valorVarejoSimulacao;
140 espaco 79
        private Boolean sujeitoST;
144 espaco 80
        private Double aliquotaIPI;
152 espaco 81
        private Double aliquotaIPINotaFiscal;
144 espaco 82
        private Double aliquotaIcms;
152 espaco 83
        private Double aliquotaIcmsNotaFiscal;
144 espaco 84
        private Double aliquotaIcmsST;
85
        private Double aliquotaFecoep;
106 espaco 86
        private Boolean ativo;
87
 
88
        private String codigoNCM;
89
        private String codigoEST;
90
        private Set<ProdutoPedidoCompra> pedidosCompra;
91
        private Set<ProdutoLoja> estoques;
92
        private Set<FornecedorProduto> fornecedores;
93
        private Set<ProdutoRelacionado> relacionados;
94
        private Set<ProdutoRelacionado> relacionadosReverse;
95
 
96
        private List<TransferenciaProduto> transferenciasAbertas = new ArrayList<TransferenciaProduto>();
97
        private List<PedidoProduto> pedidosPendentes = new ArrayList<PedidoProduto>();
98
 
99
        private Boolean indicadorOnline;
100
        private Boolean indicadorOnlineShoplog;
270 espaco 101
        private Boolean indicadorOnlineMercadoLivre;
106 espaco 102
        private Date dataUltimaVenda;
103
//      private Set<ProdutoArquivo> fotos;
104
 
544 blopes 105
        public Produto() {}
106
 
107
        public Produto(Long sequencial) {
108
                this.sequencial = sequencial;
109
        }
110
 
106 espaco 111
        @Id
112
        @SequenceGenerator(name = "sq_produto")
113
        @GeneratedValue(strategy = GenerationType.IDENTITY)
114
        @Column(name="seq_produto", nullable=false)
115
        public Long getSequencial() {
116
                return sequencial;
117
        }
118
        public void setSequencial(Long sequencial) {
119
                this.sequencial = sequencial;
120
        }
121
 
122
        @ManyToOne
123
        @ForeignKey(name="fk_produto_modelo")
124
        @NotNull(message = "Parâmetro obrigatório não preenchido: Modelo do produto", groups = {Cadastrar.class, Alterar.class})
125
        @JoinColumn(name = "seq_modelo", referencedColumnName="seq_modelo", nullable=true)
126
        public Modelo getModelo() {
127
                return modelo;
128
        }
129
        public void setModelo(Modelo modelo) {
130
                this.modelo = modelo;
131
        }
132
 
133
        @ManyToOne
134
        @ForeignKey(name="fk_produto_tributacao")
135
        @JoinColumn(name = "seq_tributacao", referencedColumnName="seq_tributacao", nullable=true)
136
        public Tributacao getTributacao() {
137
                return tributacao;
138
        }
139
        public void setTributacao(Tributacao tributacao) {
140
                this.tributacao = tributacao;
141
        }
142
 
550 blopes 143
        @ManyToOne
144
        @ForeignKey(name="fk_produto_estampa")
145
        @JoinColumn(name = "seq_estampa", referencedColumnName="seq_estampa", nullable=true)
146
        public Estampa getEstampa() {
147
                return estampa;
148
        }
149
        public void setEstampa(Estampa estampa) {
150
                this.estampa = estampa;
151
        }
152
 
106 espaco 153
        @Column(name="cod_produto")
154
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código do Produto")
155
        @NotNull(message = "Parâmetro obrigatório não preenchido: Código do produto", groups = {Cadastrar.class, Alterar.class})
156
        @NotEmpty(message = "Parâmetro obrigatório não preenchido: Código do produto", groups = {Cadastrar.class, Alterar.class})
157
        public String getCodigo() {
158
                return codigo;
159
        }
160
        public void setCodigo(String codigo) {
161
                this.codigo = codigo;
162
        }
163
 
164
        @Column(name="cod_rapido_produto")
165
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código Rápido")
166
        public String getCodigoRapido() {
167
                return codigoRapido;
168
        }
169
        public void setCodigoRapido(String codigoRapido) {
170
                this.codigoRapido = codigoRapido;
171
        }
172
 
173
        @Column(name="cod_ean")
174
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código de Barras (EAN)")
175
        public String getCodigoEAN() {
176
                return codigoEAN;
177
        }
178
        public void setCodigoEAN(String codigoEAN) {
179
                this.codigoEAN = codigoEAN;
180
        }
181
 
182
        @Column(name="cod_ean_tributado")
183
        @Size(max = 20, message = "Limite de caracteres ultrapassado: Código de Barras Tributado (EAN)")
184
        public String getCodigoEANTributado() {
185
                return codigoEANTributado;
186
        }
187
        public void setCodigoEANTributado(String codigoEANTributado) {
188
                this.codigoEANTributado = codigoEANTributado;
189
        }
190
 
191
        @Column(name="dsc_produto")
192
        @Size(max = 250, message = "Limite de caracteres ultrapassado: Descrição do Produto")
193
        public String getDescricao() {
194
                return descricao;
195
        }
196
        public void setDescricao(String descricao) {
197
                this.descricao = StringUtil.setarUpperCaseComTrim(descricao);
198
        }
199
 
200
        @Column(name="dsc_etiqueta")
201
        @Size(max = 120, message = "Limite de caracteres ultrapassado: Descrição da Etiqueta")
202
        public String getDescricaoEtiqueta() {
203
                return descricaoEtiqueta;
204
        }
205
        public void setDescricaoEtiqueta(String descricaoEtiqueta) {
206
                this.descricaoEtiqueta = StringUtil.setarUpperCaseComTrim(descricaoEtiqueta);
207
        }
208
 
170 espaco 209
//      @Column(name="dsc_notafiscal")
210
//      @Size(max = 250, message = "Limite de caracteres ultrapassado: Descrição para Nota Fiscal do Produto")
211
        @Transient
212
        public String getDescricaoParaNotaFiscal() {
213
                return descricaoParaNotaFiscal;
214
        }
215
        public void setDescricaoParaNotaFiscal(String descricaoParaNotaFiscal) {
216
                this.descricaoParaNotaFiscal = descricaoParaNotaFiscal;
217
        }
218
 
106 espaco 219
        @Column(name="tip_produto")
220
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do produto", groups = {Cadastrar.class, Alterar.class})
221
        public String getTipo() {
222
                return tipo;
223
        }
224
        public void setTipo(String tipo) {
225
                this.tipo = tipo;
226
        }
227
 
580 blopes 228
        @ManyToOne
581 blopes 229
        @ForeignKey(name="fk_produto_subtipoproduto")
580 blopes 230
        @JoinColumn(name = "seq_subtipoproduto", referencedColumnName="seq_subtipoproduto", nullable=true)
581 blopes 231
        public SubtipoProduto getSubtipoProduto() {
232
                return subtipoProduto;
580 blopes 233
        }
581 blopes 234
        public void setSubtipoProduto(SubtipoProduto subtipoProduto) {
235
                this.subtipoProduto = subtipoProduto;
580 blopes 236
        }
237
 
106 espaco 238
        @Column(name="tip_genero")
239
        @NotNull(message = "Parâmetro obrigatório não preenchido: Gênero", groups = {Cadastrar.class, Alterar.class})
240
        public String getGenero() {
241
                return genero;
242
        }
243
        public void setGenero(String genero) {
244
                this.genero = genero;
245
        }
246
 
247
        @Column(name="tip_estilo")
248
        public String getEstilo() {
249
                return estilo;
250
        }
251
        public void setEstilo(String estilo) {
252
                this.estilo = estilo;
253
        }
254
 
255
        @Column(name="tip_cor")
256
        public String getCor() {
257
                return cor;
258
        }
259
        public void setCor(String cor) {
260
                this.cor = cor;
261
        }
262
 
263
        @Column(name="dsc_observacao")
264
        @Size(max = 1000, message = "Limite de caracteres ultrapassado: Observação")
265
        public String getObservacao() {
266
                return observacao;
267
        }
268
        public void setObservacao(String observacao) {
269
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
270
        }
271
 
272
        @Column(name="val_compra")
273
        public Double getValorCompra() {
274
                return valorCompra;
275
        }
276
        public void setValorCompra(Double valorCompra) {
277
                this.valorCompra = valorCompra;
278
        }
279
 
280
        @Transient
281
        public String valorCompraFormatado() {
282
                if (VerificadorUtil.naoEstaNulo(getValorCompra())) {
283
                        return StringUtil.formatarValor(getValorCompra());
284
                }
285
                return StringUtil.formatarValor(0.0);
286
        }
287
 
288
        @Column(name="val_varejo")
289
        public Double getValorVarejo() {
290
                return valorVarejo;
291
        }
292
        public void setValorVarejo(Double valorVarejo) {
293
                this.valorVarejo = valorVarejo;
294
        }
295
 
296
        @Column(name="val_varejo_promocional")
297
        public Double getValorVarejoPromocional() {
298
                return valorVarejoPromocional;
299
        }
300
        public void setValorVarejoPromocional(Double valorVarejoPromocional) {
301
                this.valorVarejoPromocional = valorVarejoPromocional;
302
        }
303
 
304
        @Column(name="val_varejo_maximo")
305
        public Double getValorVarejoMaximo() {
306
                return valorVarejoMaximo;
307
        }
308
        public void setValorVarejoMaximo(Double valorVarejoMaximo) {
309
                this.valorVarejoMaximo = valorVarejoMaximo;
310
        }
311
 
312
        @Column(name="val_varejo_popular")
313
        public Double getValorVarejoPopular() {
314
                return valorVarejoPopular;
315
        }
316
        public void setValorAtacado(Double valorAtacado) {
317
                this.valorAtacado = valorAtacado;
318
        }
319
 
320
        @Column(name="val_atacado")
321
        public Double getValorAtacado() {
322
                return valorAtacado;
323
        }
324
        public void setValorVarejoPopular(Double valorVarejoPopular) {
325
                this.valorVarejoPopular = valorVarejoPopular;
326
        }
327
 
328
        @Column(name="dat_online")
329
        public Date getDataOnline() {
330
                return dataOnline;
331
        }
332
        public void setDataOnline(Date dataOnline) {
333
                this.dataOnline = dataOnline;
334
        }
335
 
336
        @Column(name="dat_online_shoplog")
337
        public Date getDataOnlineShoplog() {
338
                return dataOnlineShoplog;
339
        }
340
        public void setDataOnlineShoplog(Date dataOnlineShoplog) {
341
                this.dataOnlineShoplog = dataOnlineShoplog;
342
        }
343
 
270 espaco 344
        @Column(name="dat_online_mercadolivre")
345
        public Date getDataOnlineMercadoLivre() {
346
                return dataOnlineMercadoLivre;
347
        }
348
        public void setDataOnlineMercadoLivre(Date dataOnlineMercadoLivre) {
349
                this.dataOnlineMercadoLivre = dataOnlineMercadoLivre;
350
        }
351
 
106 espaco 352
        @Column(name="ind_favorito")
353
        public Boolean getIndicadorFavorito() {
354
                return indicadorFavorito;
355
        }
356
        public void setIndicadorFavorito(Boolean indicadorFavorito) {
357
                this.indicadorFavorito = indicadorFavorito;
358
        }
359
 
360
        @Column(name="ind_comissionado")
361
        public Boolean getIndicadorComissionado() {
362
                return indicadorComissionado;
363
        }
364
        public void setIndicadorComissionado(Boolean indicadorComissionado) {
365
                this.indicadorComissionado = indicadorComissionado;
366
        }
367
 
305 espaco 368
        @Column(name="ind_personalizavel")
369
        public Boolean getIndicadorPersonalizavel() {
370
                return indicadorPersonalizavel;
371
        }
372
        public void setIndicadorPersonalizavel(Boolean indicadorPersonalizavel) {
373
                this.indicadorPersonalizavel = indicadorPersonalizavel;
374
        }
375
 
106 espaco 376
        @Column(name="ind_emissao_nf")
377
        public Boolean getIndicadorEmissaoNotaFiscal() {
378
                if (VerificadorUtil.estaNulo(indicadorEmissaoNotaFiscal)) {
379
                        return false;
380
                }
381
                return indicadorEmissaoNotaFiscal;
382
        }
383
        public void setIndicadorEmissaoNotaFiscal(Boolean indicadorEmissaoNotaFiscal) {
384
                this.indicadorEmissaoNotaFiscal = indicadorEmissaoNotaFiscal;
385
        }
386
 
140 espaco 387
        @Column(name="ind_sujeito_st", nullable=false)
388
        public Boolean getSujeitoST() {
389
                if (VerificadorUtil.estaNulo(sujeitoST)) {
390
                        return false;
391
                }
392
                return sujeitoST;
393
        }
394
        public void setSujeitoST(Boolean sujeitoST) {
395
                this.sujeitoST = sujeitoST;
396
        }
144 espaco 397
 
398
        @Transient
399
        public Double getValorVarejoSimulacao() {
400
                if (VerificadorUtil.estaNulo(valorVarejoSimulacao)) {
401
                        return getValorVarejo();
402
                }
403
                return valorVarejoSimulacao;
404
        }
405
        public void setValorVarejoSimulacao(Double valorVarejoSimulacao) {
406
                this.valorVarejoSimulacao = valorVarejoSimulacao;
407
        }
140 espaco 408
 
277 espaco 409
        @Transient
410
        public Double getValorEm18x() {
411
                if (VerificadorUtil.naoEstaNulo(getValorVarejo())) {
412
                        return getValorVarejo() * 1.12;
413
                }
414
                return 0.0;
415
        }
416
 
417
        @Transient
418
        public Double getJurosValorEm18x() {
419
                if (VerificadorUtil.naoEstaNulo(getValorEm18x()) &&
420
                                VerificadorUtil.naoEstaNulo(getValorVarejo())) {
421
                        return getValorEm18x() - getValorVarejo();
422
                }
423
                return 0.0;
424
        }
425
 
426
        @Transient
427
        public Double getParcelasValorEm18x() {
428
                if (VerificadorUtil.naoEstaNulo(getValorEm18x())) {
429
                        if (getValorEm18x() > 0.0) {
430
                                return getValorEm18x()/18;
431
                        }
432
                }
433
                return 0.0;
434
        }
435
 
144 espaco 436
        @Column(name="val_aliquota_icms")
437
        public Double getAliquotaIcms() {
438
                return aliquotaIcms;
439
        }
440
        public void setAliquotaIcms(Double aliquotaIcms) {
441
                this.aliquotaIcms = aliquotaIcms;
442
        }
443
 
152 espaco 444
        @Transient
445
        public Double getAliquotaIcmsNotaFiscal() {
446
                return aliquotaIcmsNotaFiscal;
447
        }
448
        public void setAliquotaIcmsNotaFiscal(Double aliquotaIcmsNotaFiscal) {
449
                this.aliquotaIcmsNotaFiscal = aliquotaIcmsNotaFiscal;
450
        }
451
 
144 espaco 452
        @Column(name="val_aliquota_icms_st")
453
        public Double getAliquotaIcmsST() {
454
                return aliquotaIcmsST;
455
        }
456
        public void setAliquotaIcmsST(Double aliquotaIcmsST) {
457
                this.aliquotaIcmsST = aliquotaIcmsST;
458
        }
459
 
460
        @Column(name="val_aliquota_fecoep")
461
        public Double getAliquotaFecoep() {
462
                return aliquotaFecoep;
463
        }
464
        public void setAliquotaFecoep(Double aliquotaFecoep) {
465
                this.aliquotaFecoep = aliquotaFecoep;
466
        }
467
 
468
        @Column(name="val_aliquota_ipi")
469
        public Double getAliquotaIPI() {
470
                return aliquotaIPI;
471
        }
472
        public void setAliquotaIPI(Double aliquotaIPI) {
473
                this.aliquotaIPI = aliquotaIPI;
474
        }
475
 
152 espaco 476
        @Transient
477
        public Double getAliquotaIPINotaFiscal() {
478
                return aliquotaIPINotaFiscal;
479
        }
480
        public void setAliquotaIPINotaFiscal(Double aliquotaIPINotaFiscal) {
481
                this.aliquotaIPINotaFiscal = aliquotaIPINotaFiscal;
482
        }
483
 
106 espaco 484
        @Column(name="ind_ativo")
485
        public Boolean getAtivo() {
486
                return ativo;
487
        }
488
        public void setAtivo(Boolean ativo) {
489
                this.ativo = ativo;
490
        }
491
 
492
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
493
        public Set<ProdutoPedidoCompra> getPedidosCompra() {
494
                return pedidosCompra;
495
        }
496
        public void setPedidosCompra(Set<ProdutoPedidoCompra> pedidosCompra) {
497
                this.pedidosCompra = pedidosCompra;
498
        }
499
 
500
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
501
        public Set<ProdutoLoja> getEstoques() {
502
                return estoques;
503
        }
504
        public void setEstoques(Set<ProdutoLoja> estoques) {
505
                this.estoques = estoques;
506
        }
507
 
508
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
509
        public Set<FornecedorProduto> getFornecedores() {
510
                return fornecedores;
511
        }
512
        public void setFornecedores(Set<FornecedorProduto> fornecedores) {
513
                this.fornecedores = fornecedores;
514
        }
515
 
516
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
517
        public Set<ProdutoRelacionado> getRelacionados() {
518
                return relacionados;
519
        }
520
        public void setRelacionados(Set<ProdutoRelacionado> relacionados) {
521
                this.relacionados = relacionados;
522
        }
523
 
524
        @OneToMany(mappedBy="produtoRelacionado", cascade=CascadeType.ALL, orphanRemoval=true)
525
        public Set<ProdutoRelacionado> getRelacionadosReverse() {
526
                return relacionadosReverse;
527
        }
528
        public void setRelacionadosReverse(Set<ProdutoRelacionado> relacionadosReverse) {
529
                this.relacionadosReverse = relacionadosReverse;
530
        }
531
 
532
        @Transient
533
        public Boolean getIndicadorOnline() {
534
                if (VerificadorUtil.estaNulo(this.getDataOnline()) && VerificadorUtil.estaNulo(this.indicadorOnline)) {
535
                        setIndicadorOnline(false);
536
                } else {
537
                        setIndicadorOnline(true);
538
                }
539
                return indicadorOnline;
540
        }
541
        public void setIndicadorOnline(Boolean indicadorOnline) {
542
                this.indicadorOnline = indicadorOnline;
543
        }
544
        public void atualizarDataOnline() {
545
                if (VerificadorUtil.estaNulo(this.getDataOnline())) {
546
                        this.setDataOnline(DataUtils.getDataAtual());
547
                } else {
548
                        this.setDataOnline(null);
549
                }
550
        }
551
 
552
        @Transient
553
        public Boolean getIndicadorOnlineShoplog() {
554
                if (VerificadorUtil.estaNulo(this.getDataOnlineShoplog()) && VerificadorUtil.estaNulo(this.indicadorOnlineShoplog)) {
555
                        setIndicadorOnlineShoplog(false);
556
                } else {
557
                        setIndicadorOnlineShoplog(true);
558
                }
559
                return indicadorOnlineShoplog;
560
        }
561
        public void setIndicadorOnlineShoplog(Boolean indicadorOnlineShoplog) {
562
                this.indicadorOnlineShoplog = indicadorOnlineShoplog;
563
        }
564
        public void atualizarDataOnlineShoplog() {
565
                if (VerificadorUtil.estaNulo(this.getDataOnlineShoplog())) {
566
                        this.setDataOnlineShoplog(DataUtils.getDataAtual());
567
                } else {
568
                        this.setDataOnlineShoplog(null);
569
                }
570
        }
571
 
572
        @Transient
270 espaco 573
        public Boolean getIndicadorOnlineMercadoLivre() {
574
                if (VerificadorUtil.estaNulo(this.getDataOnlineMercadoLivre()) && VerificadorUtil.estaNulo(this.indicadorOnlineMercadoLivre)) {
575
                        setIndicadorOnlineMercadoLivre(false);
576
                } else {
577
                        setIndicadorOnlineMercadoLivre(true);
578
                }
579
                return indicadorOnlineMercadoLivre;
580
        }
581
        public void setIndicadorOnlineMercadoLivre(Boolean indicadorOnlineMercadoLivre) {
582
                this.indicadorOnlineMercadoLivre = indicadorOnlineMercadoLivre;
583
        }
584
        public void atualizarDataOnlineMercadoLivre() {
585
                if (VerificadorUtil.estaNulo(this.getDataOnlineMercadoLivre())) {
586
                        this.setDataOnlineMercadoLivre(DataUtils.getDataAtual());
587
                } else {
588
                        this.setDataOnlineMercadoLivre(null);
589
                }
590
        }
591
 
592
        @Transient
106 espaco 593
        public List<TransferenciaProduto> getTransferenciasAbertas() {
594
                return transferenciasAbertas;
595
        }
596
        public void setTransferenciasAbertas(List<TransferenciaProduto> transferenciasAbertas) {
597
                this.transferenciasAbertas = transferenciasAbertas;
598
        }
599
 
600
        @Transient
601
        public List<PedidoProduto> getPedidosPendentes() {
602
                return pedidosPendentes;
603
        }
604
        public void setPedidosPendentes(List<PedidoProduto> pedidosPendentes) {
605
                this.pedidosPendentes = pedidosPendentes;
606
        }
607
 
608
        @Transient
609
        public Date getDataUltimaVenda() {
610
                return dataUltimaVenda;
611
        }
612
        public void setDataUltimaVenda(Date dataUltimaVenda) {
613
                this.dataUltimaVenda = dataUltimaVenda;
614
        }
615
 
616
        @Transient
617
        public Integer getQuantidadeDiasUltimaVenda() {
618
                if (VerificadorUtil.naoEstaNulo(getDataUltimaVenda())) {
619
                        return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaVenda());
620
                }
621
                return null;
622
        }
623
 
624
        @Transient
625
        public ArrayList<ProdutoRelacionado> getCompativeis() {
626
                ArrayList<ProdutoRelacionado> compativeis = new ArrayList<ProdutoRelacionado>();
627
                if (VerificadorUtil.naoEstaNulo(getRelacionados())) {
628
                        compativeis.addAll(getRelacionados());
629
                }
630
                if (VerificadorUtil.naoEstaNulo(getRelacionadosReverse())) {
631
                        compativeis.addAll(getRelacionadosReverse());
632
                }
633
                return compativeis;
634
        }
635
 
636
        @Transient
637
        public String getCodigoNCM() {
638
                return codigoNCM;
639
        }
640
        public void setCodigoNCM(String codigoNCM) {
641
                this.codigoNCM = codigoNCM;
642
        }
643
 
644
        @Transient
645
        public String getCodigoEST() {
646
                return codigoEST;
647
        }
648
        public void setCodigoEST(String codigoEST) {
649
                this.codigoEST = codigoEST;
650
        }
651
 
652
        /*
653
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
654
        public Set<ProdutoArquivo> getFotos() {
655
                return fotos;
656
        }
657
        public void setFotos(Set<ProdutoArquivo> fotos) {
658
                this.fotos = fotos;
659
        }
660
        */
661
        /***************************************************************/
662
 
663
        @Transient
664
        public String getCodigoProdutoPadrao() {
665
                try {
666
                        return VerificadorUtil.naoEstaNulo(codigo) ? String.format("%06d", new Long(codigo.trim())) : "";
667
                } catch (Exception e) {
668
                        return "";
669
                }
670
        }
671
 
672
        public static void main(String[] args) {
673
//              System.out.println(String.format("%07d", new Long(12879)));
674
//              codigoBarras.gerarCodigoBarra(String.format("%012d", new Long(12879)));
675
//              System.out.println(codigoBarras.getCodigoBarra());
676
                System.out.println(CodigoBarraEAN.gerarCodigoBarras("6659"));
677
//              System.out.println(codigoBarras.longToEan13("900000012879"));
678
        }
679
 
680
        @Transient
681
        public String getCodigoDeBarrasProdutoPadrao() {
682
                try {
683
                        return VerificadorUtil.naoEstaNulo(codigo)? String.format("%07d", new Long(codigo)) : "";
684
//                      return VerificadorUtil.naoEstaNulo(codigo) ? StringUtils.rightPad(codigo, 12, "0") : "";
685
                } catch (Exception e) {
686
                        return "";
687
                }
688
        }
689
 
690
        @Transient
691
        public String getDescricaoDoModelo() {
692
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
693
        }
694
 
695
        @Transient
696
        public String getDescricaoTecnicaDoModelo() {
697
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? modelo.getDescricaoTecnica() : "" : "";
698
        }
699
 
700
        @Transient
701
        public String getDescricaoTecnicaDoModeloComParenteses() {
702
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? " (" + modelo.getDescricaoTecnica() + ") " : "" : "";
703
        }
704
 
705
        @Transient
706
        public Long getSequencialDoModelo() {
707
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
708
        }
709
 
710
        @Transient
711
        public Marca getMarcaDoModelo() {
712
                if (VerificadorUtil.naoEstaNulo(modelo)) {
713
                        if (VerificadorUtil.naoEstaNulo(modelo.getMarca())) {
714
                                return modelo.getMarca();
715
                        }
716
                }
717
                return null;
718
        }
719
 
720
        @Transient
721
        public String getDescricaoDaMarcaDoModelo() {
722
                return VerificadorUtil.naoEstaNulo(getMarcaDoModelo())? getMarcaDoModelo().getDescricao() : "";
723
        }
724
 
725
        @Transient
726
        public String getDescricaoComModeloCompletaComCodigo() {
727
                StringBuilder descricaoCompleta = new StringBuilder();
728
                descricaoCompleta.append("[");
729
                descricaoCompleta.append(getCodigoProdutoPadrao());
730
                descricaoCompleta.append("] ");
731
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
732
                        descricaoCompleta.append(getDescricaoDoModelo());
733
                        descricaoCompleta.append(" - ");
734
                }
735
                descricaoCompleta.append(getDescricaoCompleta());
736
                return descricaoCompleta.toString();
737
        }
738
 
739
        @Transient
740
        public String getDescricaoComModeloCompleta() {
741
                StringBuilder descricaoCompleta = new StringBuilder();
742
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
743
                        descricaoCompleta.append(getDescricaoDoModelo());
744
                        descricaoCompleta.append(" - ");
745
                }
746
                descricaoCompleta.append(getDescricaoCompleta());
747
                return descricaoCompleta.toString();
748
        }
749
 
750
        @Transient
751
        public String getDescricaoCompleta() {
752
                StringBuilder descricaoCompleta = new StringBuilder();
753
                if (VerificadorUtil.naoEstaNuloOuVazio(getEstilo())) {
754
                        descricaoCompleta.append(getDescricaoDoEstilo());
755
                        descricaoCompleta.append(" ");
756
                }
757
                descricaoCompleta.append(getDescricao());
758
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
759
                        descricaoCompleta.append(" (");
760
                        descricaoCompleta.append(getDescricaoDaCor());
761
                        descricaoCompleta.append(")");
762
                }
763
                return descricaoCompleta.toString();
764
        }
765
 
766
        @Transient
767
        public String getDescricaoCompletaCapa() {
768
                StringBuilder descricaoCompleta = new StringBuilder();
769
                descricaoCompleta.append(getCodigo());
770
                descricaoCompleta.append(" - ");
771
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
772
                        descricaoCompleta.append("CAPA");
773
                }
774
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
775
                        descricaoCompleta.append(" ");
776
                        descricaoCompleta.append(getDescricaoDoModelo());
777
                }
778
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
779
                        descricaoCompleta.append(" ");
780
                        descricaoCompleta.append(getDescricaoDoEstilo());
781
                }
782
                descricaoCompleta.append(" ");
783
                if (this.getDescricao().length() > 50) {
784
                        descricaoCompleta.append(getDescricao().substring(0, 50));
785
                } else {
786
                        descricaoCompleta.append(getDescricao());
787
                }
788
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
789
                        descricaoCompleta.append(" (");
790
                        descricaoCompleta.append(getDescricaoDaCor());
791
                        descricaoCompleta.append(")");
792
                }
793
                return descricaoCompleta.toString();
794
        }
795
 
796
        @Transient
797
        public String getDescricaoDoTipo() {
798
                return VerificadorUtil.naoEstaNuloOuVazio(getTipo())? TipoProduto.parse(getTipo()).getDescricao() : null;
799
        }
800
 
801
        @Transient
581 blopes 802
        public String getDescricaoDoSubtipo() {
803
                return VerificadorUtil.naoEstaNuloOuVazio(getSubtipoProduto())? getSubtipoProduto().getDescricao() : "";
804
        }
805
 
806
        @Transient
106 espaco 807
        public String getDescricaoDoGenero() {
808
                return VerificadorUtil.naoEstaNuloOuVazio(getGenero())? TipoGenero.parse(getGenero()).getDescricao() : null;
809
        }
810
 
811
        @Transient
812
        public String getDescricaoDoEstilo() {
813
                return VerificadorUtil.naoEstaNuloOuVazio(getEstilo())? TipoEstiloProduto.parse(getEstilo()).getDescricao() : null;
814
        }
815
 
816
        @Transient
817
        public String getDescricaoDaCor() {
818
                return VerificadorUtil.naoEstaNuloOuVazio(getCor())? TipoCorProduto.parse(getCor()).getDescricao() : null;
819
        }
820
 
821
        @Transient
822
        public String getDescricaoNotaFiscal(String observacaoNotaFiscal) {
823
                StringBuilder descricaoCompleta = new StringBuilder();
824
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
825
                        descricaoCompleta.append("CAPA");
826
                }
827
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor()) /*&&
828
                                !this.getTipo().equals(TipoProduto.RESTAURANTE.getValor())*/) {
829
                        descricaoCompleta.append(" ");
830
                        descricaoCompleta.append(this.getDescricaoDoModelo());
831
                }
832
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
833
                        descricaoCompleta.append(" ");
834
                        descricaoCompleta.append(this.getDescricaoDoEstilo());
835
                }
836
                descricaoCompleta.append(" ");
837
                if (this.getDescricao().length() > 50) {
838
                        descricaoCompleta.append(this.getDescricao().substring(0, 50));
839
                } else {
840
                        descricaoCompleta.append(this.getDescricao());
841
                }
842
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getCor())) {
843
                        descricaoCompleta.append(" (");
844
                        descricaoCompleta.append(this.getDescricaoDaCor());
845
                        descricaoCompleta.append(")");
846
                }
847
                if (VerificadorUtil.naoEstaNuloOuVazio(observacaoNotaFiscal)) {
848
                        descricaoCompleta.append(" ");
849
                        descricaoCompleta.append(observacaoNotaFiscal);
850
                }
851
                return descricaoCompleta.toString().trim();
852
        }
853
 
854
        @Transient
855
        public Integer getQuantidadeEstoqueTotal() {
856
                Integer total = 0;
857
                /*
858
                for (ProdutoLoja estoque : estoques) {
859
                        total = total + estoque.getQuantidadeEstoque();
860
                }
861
                */
862
                return total;
863
        }
864
 
865
        @Transient
866
        public Boolean verificarSeQuantidadeEhMenor(Integer primeiro, Integer segundo) {
867
                if (VerificadorUtil.naoEstaNulo(primeiro) && VerificadorUtil.naoEstaNulo(segundo)) {
868
                        return primeiro <= segundo ? true : false;
869
                }
870
                return false;
871
        }
872
 
873
        public void atualizarDados(Produto produto) {
874
                this.codigo = produto.getCodigo();
875
                this.descricao = produto.getDescricao();
876
                this.valorCompra = produto.getValorCompra();
877
                this.valorVarejo = produto.getValorVarejo();
878
                if (produto.getQuantidadeEstoqueTotal() > 0) {
879
                        this.setAtivo(true);
880
                }
881
        }
882
 
883
        public void atualizarDadosNfe(nfce.java.TNFe.InfNFe.Det produtoNota) {
884
                if (VerificadorUtil.estaNuloOuVazio(this.getDescricao())) {
885
                        this.setDescricao(produtoNota.getProd().getXProd());
886
                }
887
                if (VerificadorUtil.estaNuloOuVazio(this.getGenero())) {
888
                        this.setGenero(TipoGenero.UNISSEX.getValor());
889
                }
890
 
891
                this.setCodigoEAN(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEAN()));
892
                this.setCodigoEANTributado(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEANTrib()));
457 blopes 893
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getNCM())) {             
106 espaco 894
                        this.setCodigoNCM(produtoNota.getProd().getNCM());
895
                }
896
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getCEST())) {
897
                        this.setCodigoEST(produtoNota.getProd().getCEST());
898
                }
144 espaco 899
 
900
                for (JAXBElement<?> elemento : produtoNota.getImposto().getContent()) {
901
                        if (elemento.getDeclaredType().equals(nfce.java.TNFe.InfNFe.Det.Imposto.ICMS.class)) {
902
                                nfce.java.TNFe.InfNFe.Det.Imposto.ICMS icms = (nfce.java.TNFe.InfNFe.Det.Imposto.ICMS) elemento.getValue();
145 espaco 903
                                if (VerificadorUtil.naoEstaNulo(icms.getICMS00())) {
161 espaco 904
                                        preencherAliquotaIcms(Double.valueOf(icms.getICMS00().getPICMS()));
145 espaco 905
                                }
161 espaco 906
                                if (VerificadorUtil.naoEstaNulo(icms.getICMS10())) {
907
                                        preencherAliquotaIcms(Double.valueOf(icms.getICMS10().getPICMS()));
908
                                }
144 espaco 909
                        }
910
                        if (elemento.getDeclaredType().equals(nfce.java.TIpi.class)) {
911
                                nfce.java.TIpi ipi = (nfce.java.TIpi) elemento.getValue();
145 espaco 912
                                if (VerificadorUtil.naoEstaNulo(ipi.getIPITrib())) {
457 blopes 913
                                        if (VerificadorUtil.naoEstaNulo(ipi.getIPITrib().getPIPI())) {
914
                                                Double aliquotaIPITrib = Double.valueOf(ipi.getIPITrib().getPIPI());
915
                                                if (aliquotaIPITrib > 0.0) {
916
                                                        this.setAliquotaIPINotaFiscal(aliquotaIPITrib);
917
                                                }
152 espaco 918
                                        }
145 espaco 919
                                }
144 espaco 920
                        }
921
                }
152 espaco 922
                if (VerificadorUtil.estaNulo(getAliquotaIcms())) {
923
                        this.setAliquotaIcmsNotaFiscal(0.0);
924
                        this.setAliquotaIcms(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_INTERNA_ICMS_PADRAO_12);
925
                }
145 espaco 926
 
927
                if (VerificadorUtil.estaNulo(this.getValorCompra())) {
928
                        if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnCom())) {
929
                                this.setValorCompra(retornarValorComDesconto(produtoNota.getProd()));
930
                        }
931
                }
106 espaco 932
        }
161 espaco 933
        private void preencherAliquotaIcms(Double aliquotaIcms) {
934
                if (aliquotaIcms > 0.0) {
935
                        this.setAliquotaIcmsNotaFiscal(aliquotaIcms);
936
                        this.setAliquotaIcms(aliquotaIcms);
937
                } else {
938
                        this.setAliquotaIcmsNotaFiscal(0.0);
939
                        this.setAliquotaIcms(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_INTERNA_ICMS_PADRAO_12);
940
                }
941
        }
106 espaco 942
 
943
        public Double retornarValorComDesconto(nfce.java.TNFe.InfNFe.Det.Prod produto) {
145 espaco 944
                Double valor = 0.0;
106 espaco 945
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getVDesc())) {
145 espaco 946
                        valor = (new Double(produto.getVProd()) - new Double(produto.getVDesc())) / new Double(produto.getQCom()).intValue();
947
                } else {
948
                        valor = new Double(produto.getVUnCom());
106 espaco 949
                }
145 espaco 950
                return valor;
106 espaco 951
        }
952
 
953
        public Double retornarLucroBruto() {
954
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
955
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
956
                                return (getValorVarejoPromocional() / getValorCompra()) - 1.0;
957
                        } else {
958
                                return (getValorVarejo() / getValorCompra()) - 1.0;
959
                        }
960
                }
961
                return 0.0;
962
        }
963
 
964
        public Double retornarMargemBruta() {
965
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
966
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
967
                                return (100 - (getValorCompra()*100/getValorVarejoPromocional())) / 100;
968
                        } else {
969
                                return (100 - (getValorCompra()*100/getValorVarejo())) / 100;
970
                        }
971
                }
972
                return 0.0;
973
        }
974
 
975
        public Double retornarValorMargemBruta() {
976
                Double margemBruta = retornarMargemBruta();
977
                if (margemBruta > 0.0) {
978
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
979
                                return margemBruta * getValorVarejoPromocional();
980
                        } else {
981
                                return margemBruta * getValorVarejo();
982
                        }
983
                }
984
                return 0.0;
985
        }
986
 
987
        @Transient
988
        public String retornarCorMargem() {
989
                Double margemBruta = retornarMargemBruta();
990
                if (margemBruta > 0.50) return "green";
991
                if (margemBruta > 0.34) return "orange";
992
                if (margemBruta < 0.35) return "red";
993
                return "black";
994
        }
995
 
144 espaco 996
        @Transient
997
        public String retornarCorMargemLucro() {
998
                Double margemBruta = calculoMargemAposCustos();
999
                if (margemBruta > 29.99) return "green";
1000
                if (margemBruta > 14.99) return "orange";
1001
                if (margemBruta < 15.0) return "red";
1002
                return "black";
1003
        }
1004
 
106 espaco 1005
        @Transient
1006
        public String getFornecedorMenorValorComprado(Fornecedor fornecedorComprar) {
1007
                FornecedorProduto menorValor = null;
1008
                for (FornecedorProduto fornecedorProduto : this.getFornecedores()) {
1009
                        if (menorValor == null) {
1010
                                menorValor = fornecedorProduto;
1011
                        } else {
1012
                                if (VerificadorUtil.estaNulo(menorValor.getValorCompra()) &&
1013
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
1014
                                        menorValor = fornecedorProduto;
1015
                                }
1016
                                if (VerificadorUtil.naoEstaNulo(menorValor.getValorCompra()) &&
1017
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
1018
                                        if (menorValor.getValorCompra() > fornecedorProduto.getValorCompra()) {
1019
                                                menorValor = fornecedorProduto;
1020
                                        }
1021
                                }
1022
                        }
1023
                }
1024
                String menorValorComprado = "";
1025
                if (VerificadorUtil.naoEstaNulo(menorValor)) {
1026
                        menorValorComprado = "R$ " + formatarValor(menorValor.getValorCompra());
1027
                        if (VerificadorUtil.naoEstaNulo(menorValor.getFornecedor().getNomeDaPessoa())) {
1028
                                if (!menorValor.getFornecedor().equals(fornecedorComprar)) {
1029
                                        menorValorComprado = menorValorComprado + ", " + menorValor.getFornecedor().getNomeDaPessoa();
1030
                                }
1031
                        }
1032
                }
1033
                return menorValorComprado;
1034
        }
1035
 
1036
        private String formatarValor(Double valor) {
1037
                return VerificadorUtil.naoEstaNulo(valor)? String.format("%.2f", valor) : "0,00";
1038
        }
1039
 
1040
        @Override
1041
        public int hashCode() {
1042
                final int prime = 31;
1043
                int result = 1;
1044
                result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
1045
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
1046
                return result;
1047
        }
1048
 
1049
        @Override
1050
        public boolean equals(Object obj) {
1051
                if (this == obj)
1052
                        return true;
1053
                if (obj == null)
1054
                        return false;
1055
                if (getClass() != obj.getClass())
1056
                        return false;
1057
                Produto other = (Produto) obj;
1058
                if (codigo == null) {
1059
                        if (other.codigo != null)
1060
                                return false;
1061
                } else if (!codigo.equals(other.codigo))
1062
                        return false;
1063
                if (sequencial == null) {
1064
                        if (other.sequencial != null)
1065
                                return false;
1066
                } else if (!sequencial.equals(other.sequencial))
1067
                        return false;
1068
                return true;
1069
        }
1070
 
1071
        @Transient
1072
        public void prepararNovoProduto() {
1073
                setAtivo(true);
1074
                setIndicadorFavorito(false);
1075
                setIndicadorComissionado(true);
1076
                setIndicadorEmissaoNotaFiscal(false);
140 espaco 1077
                setSujeitoST(false);
106 espaco 1078
        }
1079
 
1080
        @Transient
1081
        public boolean tipoProdutoEhCapa() {
1082
                return getTipo().equals(TipoProduto.CAPA.getValor());
1083
        }
1084
 
1085
        @Transient
1086
        public boolean tipoProdutoEhPelicula() {
1087
                return getTipo().equals(TipoProduto.PELICULA.getValor());
1088
        }
1089
 
1090
        @Transient
1091
        public boolean tipoProdutoEhCapaOuAcessorio() {
1092
                return tipoProdutoEhCapa() || getTipo().equals(TipoProduto.ACESSORIO.getValor());
1093
        }
1094
 
1095
        @Transient
1096
        public boolean tipoProdutoEhCapaOuPelicula() {
1097
                return tipoProdutoEhCapa() || tipoProdutoEhPelicula();
1098
        }
1099
 
1100
        @Transient
1101
        public boolean tipoProdutoEhServico() {
1102
                return getTipo().equals(TipoProduto.SERVICO.getValor());
1103
        }
1104
 
1105
        /*@Transient
1106
        public boolean tipoProdutoEhRemedioOuOutros() {
1107
                return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
1108
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
1109
                                getTipo().equals(TipoProduto.OUTROS.getValor());
1110
        }*/
1111
 
1112
        @Transient
1113
        public boolean tipoProdutoTributado() {
1114
                return getTipo().equals(TipoProduto.ACESSORIO.getValor()) ||
1115
                                getTipo().equals(TipoProduto.APARELHOS.getValor()) ||
1116
                                getTipo().equals(TipoProduto.CAPA.getValor()) ||
1117
                                getTipo().equals(TipoProduto.PELICULA.getValor());
1118
        }
1119
 
1120
        @Transient
1121
        public boolean tipoProdutoNaoTributado() {
1122
                return /*getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
1123
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
1124
                                getTipo().equals(TipoProduto.OUTROS.getValor()) ||*/
1125
                                getTipo().equals(TipoProduto.SERVICO.getValor());
1126
        }
1127
 
1128
        @Transient
1129
        public Boolean verificarSeCodigoEhIgual(String codigoProduto) {
1130
                if (codigoProduto.length() > 6 && VerificadorUtil.naoEstaNuloOuVazio(this.getCodigoEAN())) {
1131
                        if (this.getCodigoEAN().equals(codigoProduto)) {
1132
                                return true;
1133
                        }
1134
                }
1135
                if (CodigoBarraEAN.validarCodigoBarras(codigoProduto)) {
1136
                        return this.getCodigoProdutoPadrao().equals(CodigoBarraEAN.retornarCodigoDoCodigoBarras(codigoProduto));
1137
                } else {
1138
                        return this.getCodigoProdutoPadrao().equals(UtilBean.padraoCodigoProduto(codigoProduto));
1139
                }
1140
        }
1141
 
1142
        @Transient
1143
        public String getCodigoNCMDaTributacao() {
1144
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoNCM() : null;
1145
        }
1146
 
1147
        @Transient
1148
        public String getCodigoESTDaTributacao() {
1149
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoEST() : null;
1150
        }
1151
 
1152
        @Override
1153
        public Produto clone() throws CloneNotSupportedException {
1154
                return (Produto) super.clone();
1155
        }
1156
 
1157
        @Transient
1158
        public String corDaDescricaoPeloGenero() {
1159
                if (VerificadorUtil.naoEstaNulo(getGenero())) {
1160
                        if (getGenero().equals(TipoGenero.MASCULINO.getValor())) return "#1c82df";
1161
                        if (getGenero().equals(TipoGenero.FEMININO.getValor())) return "#f06364";
1162
                }
1163
                return "black";
1164
        }
1165
 
1166
        @Transient
1167
        public Boolean getProdutoEmPromocao() {
1168
                if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
1169
                        return getValorVarejoPromocional() > 0.00;
1170
                }
1171
                return false;
1172
        }
1173
 
1174
        @Transient
1175
        public void prepararDadosParaDuplicacao(Produto produto) {
1176
                this.modelo = produto.getModelo();
1177
                this.tributacao = produto.getTributacao();
1178
                this.descricao = produto.getDescricao();
1179
                this.tipo = produto.getTipo();
591 blopes 1180
                this.subtipoProduto = produto.getSubtipoProduto();
106 espaco 1181
                this.estilo = produto.getEstilo();
1182
                this.genero = produto.getGenero();
1183
                this.cor = produto.getCor();
1184
                this.observacao = produto.getObservacao();
1185
                this.valorCompra = produto.getValorCompra();
1186
                this.valorVarejo = produto.getValorVarejo();
1187
                this.valorVarejoPromocional = produto.getValorVarejoPromocional();
1188
                this.valorVarejoMaximo = produto.getValorVarejoMaximo();
1189
                this.valorVarejoPopular = produto.getValorVarejoPopular();
1190
                this.valorAtacado = produto.getValorAtacado();
1191
                this.indicadorComissionado = produto.getIndicadorComissionado();
1192
                this.indicadorEmissaoNotaFiscal = produto.getIndicadorEmissaoNotaFiscal();
1193
                this.codigoNCM = produto.getCodigoNCM();
1194
                this.codigoEST = produto.getCodigoEST();
145 espaco 1195
                this.setSujeitoST(produto.getSujeitoST());
1196
                this.setAliquotaIcms(produto.getAliquotaIcms());
1197
                this.setAliquotaIcmsST(produto.getAliquotaIcmsST());
1198
                this.setAliquotaFecoep(produto.getAliquotaFecoep());
1199
                this.setAliquotaIPI(produto.getAliquotaIPI());
106 espaco 1200
                this.setAtivo(true);
1201
        }
1202
 
144 espaco 1203
        @Transient
1204
        public void atualizarAliquotas(Fornecedor fornecedor) {
152 espaco 1205
                if (VerificadorUtil.naoEstaNulo(getTributacao())) {
1206
                        setAliquotaIPI(getTributacao().getAliquotaIPI());
1207
                }
1208
 
144 espaco 1209
                if (VerificadorUtil.naoEstaNulo(getTributacao())
1210
                                && VerificadorUtil.naoEstaNulo(getAliquotaIcms())
1211
                                && VerificadorUtil.naoEstaNulo(fornecedor)) {
1212
                        if (getTributacao().getSujeitoST() && fornecedor.getSujeitoST()) {
1213
                                setAliquotaIcmsST(getTributacao().mvaPorIcms(getAliquotaIcms()));
1214
                                setAliquotaFecoep(getTributacao().getAliquotaFecoep());
1215
                                setSujeitoST(true);
1216
                        } else {
1217
                                setAliquotaFecoep(null);
1218
                                setAliquotaIcmsST(null);
1219
                                setSujeitoST(false);
1220
                        }
1221
                } else if (VerificadorUtil.naoEstaNulo(getTributacao()) && VerificadorUtil.naoEstaNulo(getAliquotaIcms())) {
1222
                        if (getTributacao().getSujeitoST()) {
1223
                                setAliquotaIcmsST(getTributacao().mvaPorIcms(getAliquotaIcms()));
1224
                                setAliquotaFecoep(getTributacao().getAliquotaFecoep());
1225
                                setSujeitoST(true);
1226
                        } else {
1227
                                setAliquotaFecoep(null);
1228
                                setAliquotaIcmsST(null);
1229
                                setSujeitoST(false);
1230
                        }
1231
                }
1232
        }
1233
 
1234
        @Transient
1235
        public Double calculoIPI() {
318 espaco 1236
                return (VerificadorUtil.naoEstaNulo(getAliquotaIPI()) &&
1237
                                VerificadorUtil.naoEstaNulo(getValorCompra()))?
1238
                                        getAliquotaIPI()/100 * getValorCompra() : 0.0;
144 espaco 1239
        }
1240
 
1241
        @Transient
1242
        public Double calculoICMS() {
318 espaco 1243
                return (VerificadorUtil.naoEstaNulo(getAliquotaIcms()) &&
1244
                                VerificadorUtil.naoEstaNulo(getAliquotaFecoep()) &&
1245
                                VerificadorUtil.naoEstaNulo(getValorCompra()))?
144 espaco 1246
                                (getAliquotaIcms()/100 + getAliquotaFecoep()/100) * getValorCompra() : 0.0;
1247
        }
1248
 
1249
        @Transient
1250
        public Double calculoICMSST() {
1251
                if (getSujeitoST()) {
1252
                        return VerificadorUtil.naoEstaNulo(getAliquotaIcmsST())
1253
                                        && VerificadorUtil.naoEstaNulo(getAliquotaFecoep())
1254
                                        && VerificadorUtil.naoEstaNulo(getTributacao())?
1255
                                ((getTributacao().getAliquotaInterna()/100 + getAliquotaFecoep()/100) * baseCalculoICMSST()) - calculoICMS(): 0.0;
1256
                }
1257
                return 0.0;
1258
        }
1259
 
1260
        @Transient
1261
        public Double baseCalculoICMSST() {
1262
                if (getSujeitoST()) {
1263
                        if (VerificadorUtil.naoEstaNulo(getTributacao())) {
1264
                                Double baseCalculoIPI = getValorCompra() + calculoIPI();
1265
                                return baseCalculoIPI + (baseCalculoIPI * getTributacao().mvaPorIcms(getAliquotaIcms())/100);
1266
                        }
1267
                }
1268
                return 0.0;
1269
        }
1270
 
1271
        @Transient
1272
        public Double aliquotaMvaProduto() {
1273
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().mvaPorIcms(getAliquotaIcms()) : 0.0;
1274
        }
1275
 
1276
        @Transient
1277
        public Double calculoTributosCompra() {
145 espaco 1278
                 return VerificadorUtil.naoEstaNulo(getValorCompra())? getValorCompra() + calculoIPI() + calculoICMSST() : 0.0;
144 espaco 1279
        }
1280
 
1281
        @Transient
1282
        public Double calculoOperacao() {
1283
                Double aliquota = ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_SIMPLES_NACIONAL_11 +
162 espaco 1284
                                                  ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_COMISSOES_2 +
598 blopes 1285
                                                  ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MAIOR_CARTAO_CIELO_10_88;
144 espaco 1286
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? calculoTributosCompra() + (getValorVarejoSimulacao()*aliquota/100) : 0.0;
1287
        }
1288
 
1289
        @Transient
152 espaco 1290
        public String valorCalculoOperacao() {
1291
                return StringUtil.formatarValor(calculoOperacao());
1292
        }
1293
 
1294
        @Transient
144 espaco 1295
        public Double calculoValorAposCustos() {
1296
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? getValorVarejoSimulacao() - calculoOperacao() : 0.0;
1297
        }
1298
 
1299
        @Transient
1300
        public Double calculoMargemAposCustos() {
1301
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? calculoValorAposCustos() * 100 / calculoOperacao() : 0.0;
1302
        }
1303
 
145 espaco 1304
        @Transient
1305
        public String retornarLucroBrutoFormatado() {
1306
                return StringUtil.formatarPercentual(calculoValorAposCustos());
1307
        }
1308
 
1309
        @Transient
1310
        public String retornarMargemBrutaFormatada() {
1311
                try {
1312
                        return StringUtil.formatarValorComDigitos(calculoMargemAposCustos().toString(), 2);
1313
                } catch (Exception e) {
1314
                        e.printStackTrace();
1315
                }
1316
                return "";
1317
        }
1318
 
152 espaco 1319
        @Transient
1320
        public Double calculoPrecoMinimo() {
1321
                Double valorVarejoSimulacao = getValorVarejoSimulacao();
1322
                setValorVarejoSimulacao(this.getValorCompra());
1323
                Double valorMinimo = this.calculoOperacao();
1324
                Double margem = 0.0;
1325
                valorMinimo = valorMinimo + (valorMinimo / 100);
1326
                if (valorMinimo > 0.0) {
1327
                        while (margem < 15.0) {
1328
                                valorMinimo = valorMinimo + (valorMinimo / 100);
1329
                                setValorVarejoSimulacao(valorMinimo);
1330
                                margem = calculoMargemAposCustos();
1331
                        }
1332
                }
1333
                setValorVarejoSimulacao(valorVarejoSimulacao);
1334
                return valorMinimo;
1335
        }
1336
 
106 espaco 1337
}