Subversion Repositories Integrator Subversion

Rev

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