Subversion Repositories Integrator Subversion

Rev

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