Subversion Repositories Integrator Subversion

Rev

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

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