Subversion Repositories Integrator Subversion

Rev

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