Subversion Repositories Integrator Subversion

Rev

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