Subversion Repositories Integrator Subversion

Rev

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

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