Subversion Repositories Integrator Subversion

Rev

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