Subversion Repositories Integrator Subversion

Rev

Rev 584 | Details | Compare with Previous | Last modification | View Log | RSS feed

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