Subversion Repositories Integrator Subversion

Rev

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