Subversion Repositories Integrator Subversion

Rev

Rev 140 | Rev 145 | 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
                if (VerificadorUtil.estaNulo(this.getValorCompra())) {
765
                        if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnCom())) {
766
                                this.setValorCompra(retornarValorComDesconto(produtoNota.getProd()));
767
                        }
768
                }
769
 
770
                this.setCodigoEAN(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEAN()));
771
                this.setCodigoEANTributado(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEANTrib()));
772
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getNCM())) {
773
                        this.setCodigoNCM(produtoNota.getProd().getNCM());
774
                }
775
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getCEST())) {
776
                        this.setCodigoEST(produtoNota.getProd().getCEST());
777
                }
144 espaco 778
 
779
                for (JAXBElement<?> elemento : produtoNota.getImposto().getContent()) {
780
                        if (elemento.getDeclaredType().equals(nfce.java.TNFe.InfNFe.Det.Imposto.ICMS.class)) {
781
                                nfce.java.TNFe.InfNFe.Det.Imposto.ICMS icms = (nfce.java.TNFe.InfNFe.Det.Imposto.ICMS) elemento.getValue();
782
                                this.setAliquotaIcms(Double.valueOf(icms.getICMS00().getPICMS()));
783
                        }
784
                        if (elemento.getDeclaredType().equals(nfce.java.TIpi.class)) {
785
                                nfce.java.TIpi ipi = (nfce.java.TIpi) elemento.getValue();
786
                                this.setAliquotaIPI(Double.valueOf(ipi.getIPITrib().getPIPI()));
787
                        }
788
                }
106 espaco 789
        }
790
 
791
        public Double retornarValorComDesconto(nfce.java.TNFe.InfNFe.Det.Prod produto) {
792
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getVDesc())) {
793
                        Double valorUnitarioDescontado = (new Double(produto.getVProd()) - new Double(produto.getVDesc())) / new Double(produto.getQCom()).intValue();
794
                        return valorUnitarioDescontado;
795
                }
796
                return new Double(produto.getVUnCom());
797
        }
798
 
799
        public Double retornarLucroBruto() {
800
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
801
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
802
                                return (getValorVarejoPromocional() / getValorCompra()) - 1.0;
803
                        } else {
804
                                return (getValorVarejo() / getValorCompra()) - 1.0;
805
                        }
806
                }
807
                return 0.0;
808
        }
809
 
810
        public Double retornarMargemBruta() {
811
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
812
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
813
                                return (100 - (getValorCompra()*100/getValorVarejoPromocional())) / 100;
814
                        } else {
815
                                return (100 - (getValorCompra()*100/getValorVarejo())) / 100;
816
                        }
817
                }
818
                return 0.0;
819
        }
820
 
821
        public Double retornarValorMargemBruta() {
822
                Double margemBruta = retornarMargemBruta();
823
                if (margemBruta > 0.0) {
824
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
825
                                return margemBruta * getValorVarejoPromocional();
826
                        } else {
827
                                return margemBruta * getValorVarejo();
828
                        }
829
                }
830
                return 0.0;
831
        }
832
 
833
        @Transient
834
        public String retornarCorMargem() {
835
                Double margemBruta = retornarMargemBruta();
836
                if (margemBruta > 0.50) return "green";
837
                if (margemBruta > 0.34) return "orange";
838
                if (margemBruta < 0.35) return "red";
839
                return "black";
840
        }
841
 
144 espaco 842
        @Transient
843
        public String retornarCorMargemLucro() {
844
                Double margemBruta = calculoMargemAposCustos();
845
                if (margemBruta > 29.99) return "green";
846
                if (margemBruta > 14.99) return "orange";
847
                if (margemBruta < 15.0) return "red";
848
                return "black";
849
        }
850
 
106 espaco 851
        public String retornarMargemBrutaFormatada() {
852
                return StringUtil.formatarPercentual(retornarMargemBruta());
853
        }
854
 
855
        public String retornarLucroBrutoFormatado() {
856
                return StringUtil.formatarPercentual(retornarLucroBruto());
857
        }
858
 
859
        @Transient
860
        public String getFornecedorMenorValorComprado(Fornecedor fornecedorComprar) {
861
                FornecedorProduto menorValor = null;
862
                for (FornecedorProduto fornecedorProduto : this.getFornecedores()) {
863
                        if (menorValor == null) {
864
                                menorValor = fornecedorProduto;
865
                        } else {
866
                                if (VerificadorUtil.estaNulo(menorValor.getValorCompra()) &&
867
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
868
                                        menorValor = fornecedorProduto;
869
                                }
870
                                if (VerificadorUtil.naoEstaNulo(menorValor.getValorCompra()) &&
871
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
872
                                        if (menorValor.getValorCompra() > fornecedorProduto.getValorCompra()) {
873
                                                menorValor = fornecedorProduto;
874
                                        }
875
                                }
876
                        }
877
                }
878
                String menorValorComprado = "";
879
                if (VerificadorUtil.naoEstaNulo(menorValor)) {
880
                        menorValorComprado = "R$ " + formatarValor(menorValor.getValorCompra());
881
                        if (VerificadorUtil.naoEstaNulo(menorValor.getFornecedor().getNomeDaPessoa())) {
882
                                if (!menorValor.getFornecedor().equals(fornecedorComprar)) {
883
                                        menorValorComprado = menorValorComprado + ", " + menorValor.getFornecedor().getNomeDaPessoa();
884
                                        if (VerificadorUtil.naoEstaNulo(menorValor.getIdentificador())) {
885
                                                menorValorComprado = menorValorComprado + ", ID: " + menorValor.getIdentificador();
886
                                        }
887
                                }
888
                        }
889
                }
890
                return menorValorComprado;
891
        }
892
 
893
        private String formatarValor(Double valor) {
894
                return VerificadorUtil.naoEstaNulo(valor)? String.format("%.2f", valor) : "0,00";
895
        }
896
 
897
        @Override
898
        public int hashCode() {
899
                final int prime = 31;
900
                int result = 1;
901
                result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
902
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
903
                return result;
904
        }
905
 
906
        @Override
907
        public boolean equals(Object obj) {
908
                if (this == obj)
909
                        return true;
910
                if (obj == null)
911
                        return false;
912
                if (getClass() != obj.getClass())
913
                        return false;
914
                Produto other = (Produto) obj;
915
                if (codigo == null) {
916
                        if (other.codigo != null)
917
                                return false;
918
                } else if (!codigo.equals(other.codigo))
919
                        return false;
920
                if (sequencial == null) {
921
                        if (other.sequencial != null)
922
                                return false;
923
                } else if (!sequencial.equals(other.sequencial))
924
                        return false;
925
                return true;
926
        }
927
 
928
        @Transient
929
        public void prepararNovoProduto() {
930
                setAtivo(true);
931
                setIndicadorFavorito(false);
932
                setIndicadorComissionado(true);
933
                setIndicadorEmissaoNotaFiscal(false);
140 espaco 934
                setSujeitoST(false);
106 espaco 935
        }
936
 
937
        @Transient
938
        public boolean tipoProdutoEhCapa() {
939
                return getTipo().equals(TipoProduto.CAPA.getValor());
940
        }
941
 
942
        @Transient
943
        public boolean tipoProdutoEhPelicula() {
944
                return getTipo().equals(TipoProduto.PELICULA.getValor());
945
        }
946
 
947
        @Transient
948
        public boolean tipoProdutoEhCapaOuAcessorio() {
949
                return tipoProdutoEhCapa() || getTipo().equals(TipoProduto.ACESSORIO.getValor());
950
        }
951
 
952
        @Transient
953
        public boolean tipoProdutoEhCapaOuPelicula() {
954
                return tipoProdutoEhCapa() || tipoProdutoEhPelicula();
955
        }
956
 
957
        @Transient
958
        public boolean tipoProdutoEhServico() {
959
                return getTipo().equals(TipoProduto.SERVICO.getValor());
960
        }
961
 
962
        /*@Transient
963
        public boolean tipoProdutoEhRemedioOuOutros() {
964
                return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
965
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
966
                                getTipo().equals(TipoProduto.OUTROS.getValor());
967
        }*/
968
 
969
        @Transient
970
        public boolean tipoProdutoTributado() {
971
                return getTipo().equals(TipoProduto.ACESSORIO.getValor()) ||
972
                                getTipo().equals(TipoProduto.APARELHOS.getValor()) ||
973
                                getTipo().equals(TipoProduto.CAPA.getValor()) ||
974
                                getTipo().equals(TipoProduto.PELICULA.getValor());
975
        }
976
 
977
        @Transient
978
        public boolean tipoProdutoNaoTributado() {
979
                return /*getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
980
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
981
                                getTipo().equals(TipoProduto.OUTROS.getValor()) ||*/
982
                                getTipo().equals(TipoProduto.SERVICO.getValor());
983
        }
984
 
985
        @Transient
986
        public Boolean verificarSeCodigoEhIgual(String codigoProduto) {
987
                if (codigoProduto.length() > 6 && VerificadorUtil.naoEstaNuloOuVazio(this.getCodigoEAN())) {
988
                        if (this.getCodigoEAN().equals(codigoProduto)) {
989
                                return true;
990
                        }
991
                }
992
                if (CodigoBarraEAN.validarCodigoBarras(codigoProduto)) {
993
                        return this.getCodigoProdutoPadrao().equals(CodigoBarraEAN.retornarCodigoDoCodigoBarras(codigoProduto));
994
                } else {
995
                        return this.getCodigoProdutoPadrao().equals(UtilBean.padraoCodigoProduto(codigoProduto));
996
                }
997
        }
998
 
999
        @Transient
1000
        public String getCodigoNCMDaTributacao() {
1001
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoNCM() : null;
1002
        }
1003
 
1004
        @Transient
1005
        public String getCodigoESTDaTributacao() {
1006
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoEST() : null;
1007
        }
1008
 
1009
        @Override
1010
        public Produto clone() throws CloneNotSupportedException {
1011
                return (Produto) super.clone();
1012
        }
1013
 
1014
        @Transient
1015
        public String corDaDescricaoPeloGenero() {
1016
                if (VerificadorUtil.naoEstaNulo(getGenero())) {
1017
                        if (getGenero().equals(TipoGenero.MASCULINO.getValor())) return "#1c82df";
1018
                        if (getGenero().equals(TipoGenero.FEMININO.getValor())) return "#f06364";
1019
                }
1020
                return "black";
1021
        }
1022
 
1023
        @Transient
1024
        public Boolean getProdutoEmPromocao() {
1025
                if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
1026
                        return getValorVarejoPromocional() > 0.00;
1027
                }
1028
                return false;
1029
        }
1030
 
1031
        @Transient
1032
        public void prepararDadosParaDuplicacao(Produto produto) {
1033
                this.modelo = produto.getModelo();
1034
                this.tributacao = produto.getTributacao();
1035
                this.descricao = produto.getDescricao();
1036
                this.tipo = produto.getTipo();
1037
                this.estilo = produto.getEstilo();
1038
                this.genero = produto.getGenero();
1039
                this.cor = produto.getCor();
1040
                this.observacao = produto.getObservacao();
1041
                this.valorCompra = produto.getValorCompra();
1042
                this.valorVarejo = produto.getValorVarejo();
1043
                this.valorVarejoPromocional = produto.getValorVarejoPromocional();
1044
                this.valorVarejoMaximo = produto.getValorVarejoMaximo();
1045
                this.valorVarejoPopular = produto.getValorVarejoPopular();
1046
                this.valorAtacado = produto.getValorAtacado();
1047
                this.indicadorComissionado = produto.getIndicadorComissionado();
1048
                this.indicadorEmissaoNotaFiscal = produto.getIndicadorEmissaoNotaFiscal();
1049
                this.codigoNCM = produto.getCodigoNCM();
1050
                this.codigoEST = produto.getCodigoEST();
1051
                this.dataOnline = produto.getDataOnline();
1052
                this.indicadorOnline = produto.getIndicadorOnline();
1053
                this.indicadorOnlineShoplog = produto.getIndicadorOnlineShoplog();
1054
                this.setAtivo(true);
1055
        }
1056
 
144 espaco 1057
        @Transient
1058
        public void atualizarAliquotas(Fornecedor fornecedor) {
1059
                if (VerificadorUtil.naoEstaNulo(getTributacao())
1060
                                && VerificadorUtil.naoEstaNulo(getAliquotaIcms())
1061
                                && VerificadorUtil.naoEstaNulo(fornecedor)) {
1062
                        if (getTributacao().getSujeitoST() && fornecedor.getSujeitoST()) {
1063
                                setAliquotaIcmsST(getTributacao().mvaPorIcms(getAliquotaIcms()));
1064
                                setAliquotaFecoep(getTributacao().getAliquotaFecoep());
1065
                                setSujeitoST(true);
1066
                        } else {
1067
                                setAliquotaFecoep(null);
1068
                                setAliquotaIcmsST(null);
1069
                                setSujeitoST(false);
1070
                        }
1071
                } else if (VerificadorUtil.naoEstaNulo(getTributacao()) && VerificadorUtil.naoEstaNulo(getAliquotaIcms())) {
1072
                        if (getTributacao().getSujeitoST()) {
1073
                                setAliquotaIcmsST(getTributacao().mvaPorIcms(getAliquotaIcms()));
1074
                                setAliquotaFecoep(getTributacao().getAliquotaFecoep());
1075
                                setSujeitoST(true);
1076
                        } else {
1077
                                setAliquotaFecoep(null);
1078
                                setAliquotaIcmsST(null);
1079
                                setSujeitoST(false);
1080
                        }
1081
                }
1082
        }
1083
 
1084
        @Transient
1085
        public Double calculoIPI() {
1086
                return VerificadorUtil.naoEstaNulo(getAliquotaIPI())? getAliquotaIPI()/100 * getValorCompra() : 0.0;
1087
        }
1088
 
1089
        @Transient
1090
        public Double calculoICMS() {
1091
                return VerificadorUtil.naoEstaNulo(getAliquotaIcms()) && VerificadorUtil.naoEstaNulo(getAliquotaFecoep())?
1092
                                (getAliquotaIcms()/100 + getAliquotaFecoep()/100) * getValorCompra() : 0.0;
1093
        }
1094
 
1095
        @Transient
1096
        public Double calculoICMSST() {
1097
                if (getSujeitoST()) {
1098
                        return VerificadorUtil.naoEstaNulo(getAliquotaIcmsST())
1099
                                        && VerificadorUtil.naoEstaNulo(getAliquotaFecoep())
1100
                                        && VerificadorUtil.naoEstaNulo(getTributacao())?
1101
                                ((getTributacao().getAliquotaInterna()/100 + getAliquotaFecoep()/100) * baseCalculoICMSST()) - calculoICMS(): 0.0;
1102
                }
1103
                return 0.0;
1104
        }
1105
 
1106
        @Transient
1107
        public Double baseCalculoICMSST() {
1108
                if (getSujeitoST()) {
1109
                        if (VerificadorUtil.naoEstaNulo(getTributacao())) {
1110
                                Double baseCalculoIPI = getValorCompra() + calculoIPI();
1111
                                return baseCalculoIPI + (baseCalculoIPI * getTributacao().mvaPorIcms(getAliquotaIcms())/100);
1112
                        }
1113
                }
1114
                return 0.0;
1115
        }
1116
 
1117
        @Transient
1118
        public Double aliquotaMvaProduto() {
1119
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().mvaPorIcms(getAliquotaIcms()) : 0.0;
1120
        }
1121
 
1122
        @Transient
1123
        public Double calculoTributosCompra() {
1124
                return VerificadorUtil.naoEstaNulo(getValorCompra())? getValorCompra() + calculoIPI() + calculoICMSST() : 0.0;
1125
        }
1126
 
1127
        @Transient
1128
        public Double calculoOperacao() {
1129
                Double aliquota = ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_SIMPLES_NACIONAL_11 +
1130
                                ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_COMISSOES_2 +
1131
                                ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_CARTAO_2;
1132
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? calculoTributosCompra() + (getValorVarejoSimulacao()*aliquota/100) : 0.0;
1133
        }
1134
 
1135
        @Transient
1136
        public Double calculoValorAposCustos() {
1137
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? getValorVarejoSimulacao() - calculoOperacao() : 0.0;
1138
        }
1139
 
1140
        @Transient
1141
        public Double calculoMargemAposCustos() {
1142
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? calculoValorAposCustos() * 100 / calculoOperacao() : 0.0;
1143
        }
1144
 
106 espaco 1145
}