Subversion Repositories Integrator Subversion

Rev

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