Subversion Repositories Integrator Subversion

Rev

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