Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

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