Subversion Repositories Integrator Subversion

Rev

Rev 449 | Rev 462 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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