Subversion Repositories Integrator Subversion

Rev

Rev 538 | Rev 582 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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