Subversion Repositories Integrator Subversion

Rev

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