Subversion Repositories Integrator Subversion

Rev

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