Subversion Repositories Integrator Subversion

Rev

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