Subversion Repositories Integrator Subversion

Rev

Rev 161 | Rev 170 | 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.validator.constraints.NotEmpty;
27
 
28
import br.com.ec.controller.util.UtilBean;
29
import br.com.ec.domain.model.tipos.TipoCorProduto;
30
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
31
import br.com.ec.domain.model.tipos.TipoGenero;
32
import br.com.ec.domain.model.tipos.TipoProduto;
144 espaco 33
import br.com.ec.domain.shared.ConstantesSEC;
106 espaco 34
import br.com.ec.domain.util.CodigoBarraEAN;
35
import br.edu.cesmac.core.interfaces.Alterar;
36
import br.edu.cesmac.core.interfaces.Cadastrar;
37
import br.edu.cesmac.core.util.DataUtils;
38
import br.edu.cesmac.core.util.StringUtil;
39
import br.edu.cesmac.core.util.VerificadorUtil;
40
 
41
@Entity
42
@Table(name="sec_produto", schema="sc_sec")
43
public class Produto implements Serializable, Cloneable {
44
 
45
        private static final long serialVersionUID = 1L;
46
 
47
        private Long sequencial;
48
        private Modelo modelo;
49
        private Tributacao tributacao;
50
        private String codigo;
51
        private String codigoRapido;
52
        private String codigoEAN;
53
        private String codigoEANTributado;
54
        private String descricao;
55
        private String descricaoEtiqueta;
56
        private String tipo;
57
        private String genero;
58
        private String estilo;
59
        private String cor;
60
        private String observacao;
61
        private Double valorCompra;
62
        private Double valorVarejo;
63
        private Double valorVarejoPromocional;
64
        private Double valorVarejoMaximo;
65
        private Double valorVarejoPopular;
66
        private Double valorAtacado;
67
        private Date dataOnline;
68
        private Date dataOnlineShoplog;
69
        private Boolean indicadorFavorito;
70
        private Boolean indicadorComissionado;
71
        private Boolean indicadorEmissaoNotaFiscal;
140 espaco 72
 
144 espaco 73
        private Double valorVarejoSimulacao;
140 espaco 74
        private Boolean sujeitoST;
144 espaco 75
        private Double aliquotaIPI;
152 espaco 76
        private Double aliquotaIPINotaFiscal;
144 espaco 77
        private Double aliquotaIcms;
152 espaco 78
        private Double aliquotaIcmsNotaFiscal;
144 espaco 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
 
152 espaco 359
        @Transient
360
        public Double getAliquotaIcmsNotaFiscal() {
361
                return aliquotaIcmsNotaFiscal;
362
        }
363
        public void setAliquotaIcmsNotaFiscal(Double aliquotaIcmsNotaFiscal) {
364
                this.aliquotaIcmsNotaFiscal = aliquotaIcmsNotaFiscal;
365
        }
366
 
144 espaco 367
        @Column(name="val_aliquota_icms_st")
368
        public Double getAliquotaIcmsST() {
369
                return aliquotaIcmsST;
370
        }
371
        public void setAliquotaIcmsST(Double aliquotaIcmsST) {
372
                this.aliquotaIcmsST = aliquotaIcmsST;
373
        }
374
 
375
        @Column(name="val_aliquota_fecoep")
376
        public Double getAliquotaFecoep() {
377
                return aliquotaFecoep;
378
        }
379
        public void setAliquotaFecoep(Double aliquotaFecoep) {
380
                this.aliquotaFecoep = aliquotaFecoep;
381
        }
382
 
383
        @Column(name="val_aliquota_ipi")
384
        public Double getAliquotaIPI() {
385
                return aliquotaIPI;
386
        }
387
        public void setAliquotaIPI(Double aliquotaIPI) {
388
                this.aliquotaIPI = aliquotaIPI;
389
        }
390
 
152 espaco 391
        @Transient
392
        public Double getAliquotaIPINotaFiscal() {
393
                return aliquotaIPINotaFiscal;
394
        }
395
        public void setAliquotaIPINotaFiscal(Double aliquotaIPINotaFiscal) {
396
                this.aliquotaIPINotaFiscal = aliquotaIPINotaFiscal;
397
        }
398
 
106 espaco 399
        @Column(name="ind_ativo")
400
        public Boolean getAtivo() {
401
                return ativo;
402
        }
403
        public void setAtivo(Boolean ativo) {
404
                this.ativo = ativo;
405
        }
406
 
407
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
408
        public Set<ProdutoPedidoCompra> getPedidosCompra() {
409
                return pedidosCompra;
410
        }
411
        public void setPedidosCompra(Set<ProdutoPedidoCompra> pedidosCompra) {
412
                this.pedidosCompra = pedidosCompra;
413
        }
414
 
415
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
416
        public Set<ProdutoLoja> getEstoques() {
417
                return estoques;
418
        }
419
        public void setEstoques(Set<ProdutoLoja> estoques) {
420
                this.estoques = estoques;
421
        }
422
 
423
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
424
        public Set<FornecedorProduto> getFornecedores() {
425
                return fornecedores;
426
        }
427
        public void setFornecedores(Set<FornecedorProduto> fornecedores) {
428
                this.fornecedores = fornecedores;
429
        }
430
 
431
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
432
        public Set<ProdutoRelacionado> getRelacionados() {
433
                return relacionados;
434
        }
435
        public void setRelacionados(Set<ProdutoRelacionado> relacionados) {
436
                this.relacionados = relacionados;
437
        }
438
 
439
        @OneToMany(mappedBy="produtoRelacionado", cascade=CascadeType.ALL, orphanRemoval=true)
440
        public Set<ProdutoRelacionado> getRelacionadosReverse() {
441
                return relacionadosReverse;
442
        }
443
        public void setRelacionadosReverse(Set<ProdutoRelacionado> relacionadosReverse) {
444
                this.relacionadosReverse = relacionadosReverse;
445
        }
446
 
447
        @Transient
448
        public Boolean getIndicadorOnline() {
449
                if (VerificadorUtil.estaNulo(this.getDataOnline()) && VerificadorUtil.estaNulo(this.indicadorOnline)) {
450
                        setIndicadorOnline(false);
451
                } else {
452
                        setIndicadorOnline(true);
453
                }
454
                return indicadorOnline;
455
        }
456
        public void setIndicadorOnline(Boolean indicadorOnline) {
457
                this.indicadorOnline = indicadorOnline;
458
        }
459
        public void atualizarDataOnline() {
460
                if (VerificadorUtil.estaNulo(this.getDataOnline())) {
461
                        this.setDataOnline(DataUtils.getDataAtual());
462
                } else {
463
                        this.setDataOnline(null);
464
                }
465
        }
466
 
467
        @Transient
468
        public Boolean getIndicadorOnlineShoplog() {
469
                if (VerificadorUtil.estaNulo(this.getDataOnlineShoplog()) && VerificadorUtil.estaNulo(this.indicadorOnlineShoplog)) {
470
                        setIndicadorOnlineShoplog(false);
471
                } else {
472
                        setIndicadorOnlineShoplog(true);
473
                }
474
                return indicadorOnlineShoplog;
475
        }
476
        public void setIndicadorOnlineShoplog(Boolean indicadorOnlineShoplog) {
477
                this.indicadorOnlineShoplog = indicadorOnlineShoplog;
478
        }
479
        public void atualizarDataOnlineShoplog() {
480
                if (VerificadorUtil.estaNulo(this.getDataOnlineShoplog())) {
481
                        this.setDataOnlineShoplog(DataUtils.getDataAtual());
482
                } else {
483
                        this.setDataOnlineShoplog(null);
484
                }
485
        }
486
 
487
        @Transient
488
        public List<TransferenciaProduto> getTransferenciasAbertas() {
489
                return transferenciasAbertas;
490
        }
491
        public void setTransferenciasAbertas(List<TransferenciaProduto> transferenciasAbertas) {
492
                this.transferenciasAbertas = transferenciasAbertas;
493
        }
494
 
495
        @Transient
496
        public List<PedidoProduto> getPedidosPendentes() {
497
                return pedidosPendentes;
498
        }
499
        public void setPedidosPendentes(List<PedidoProduto> pedidosPendentes) {
500
                this.pedidosPendentes = pedidosPendentes;
501
        }
502
 
503
        @Transient
504
        public Date getDataUltimaVenda() {
505
                return dataUltimaVenda;
506
        }
507
        public void setDataUltimaVenda(Date dataUltimaVenda) {
508
                this.dataUltimaVenda = dataUltimaVenda;
509
        }
510
 
511
        @Transient
512
        public Integer getQuantidadeDiasUltimaVenda() {
513
                if (VerificadorUtil.naoEstaNulo(getDataUltimaVenda())) {
514
                        return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaVenda());
515
                }
516
                return null;
517
        }
518
 
519
        @Transient
520
        public ArrayList<ProdutoRelacionado> getCompativeis() {
521
                ArrayList<ProdutoRelacionado> compativeis = new ArrayList<ProdutoRelacionado>();
522
                if (VerificadorUtil.naoEstaNulo(getRelacionados())) {
523
                        compativeis.addAll(getRelacionados());
524
                }
525
                if (VerificadorUtil.naoEstaNulo(getRelacionadosReverse())) {
526
                        compativeis.addAll(getRelacionadosReverse());
527
                }
528
                return compativeis;
529
        }
530
 
531
        @Transient
532
        public String getCodigoNCM() {
533
                return codigoNCM;
534
        }
535
        public void setCodigoNCM(String codigoNCM) {
536
                this.codigoNCM = codigoNCM;
537
        }
538
 
539
        @Transient
540
        public String getCodigoEST() {
541
                return codigoEST;
542
        }
543
        public void setCodigoEST(String codigoEST) {
544
                this.codigoEST = codigoEST;
545
        }
546
 
547
        /*
548
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
549
        public Set<ProdutoArquivo> getFotos() {
550
                return fotos;
551
        }
552
        public void setFotos(Set<ProdutoArquivo> fotos) {
553
                this.fotos = fotos;
554
        }
555
        */
556
        /***************************************************************/
557
 
558
        @Transient
559
        public String getCodigoProdutoPadrao() {
560
                try {
561
                        return VerificadorUtil.naoEstaNulo(codigo) ? String.format("%06d", new Long(codigo.trim())) : "";
562
                } catch (Exception e) {
563
                        return "";
564
                }
565
        }
566
 
567
        public static void main(String[] args) {
568
//              System.out.println(String.format("%07d", new Long(12879)));
569
//              codigoBarras.gerarCodigoBarra(String.format("%012d", new Long(12879)));
570
//              System.out.println(codigoBarras.getCodigoBarra());
571
                System.out.println(CodigoBarraEAN.gerarCodigoBarras("6659"));
572
//              System.out.println(codigoBarras.longToEan13("900000012879"));
573
        }
574
 
575
        @Transient
576
        public String getCodigoDeBarrasProdutoPadrao() {
577
                try {
578
                        return VerificadorUtil.naoEstaNulo(codigo)? String.format("%07d", new Long(codigo)) : "";
579
//                      return VerificadorUtil.naoEstaNulo(codigo) ? StringUtils.rightPad(codigo, 12, "0") : "";
580
                } catch (Exception e) {
581
                        return "";
582
                }
583
        }
584
 
585
        @Transient
586
        public String getDescricaoDoModelo() {
587
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
588
        }
589
 
590
        @Transient
591
        public String getDescricaoTecnicaDoModelo() {
592
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? modelo.getDescricaoTecnica() : "" : "";
593
        }
594
 
595
        @Transient
596
        public String getDescricaoTecnicaDoModeloComParenteses() {
597
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? " (" + modelo.getDescricaoTecnica() + ") " : "" : "";
598
        }
599
 
600
        @Transient
601
        public Long getSequencialDoModelo() {
602
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
603
        }
604
 
605
        @Transient
606
        public Marca getMarcaDoModelo() {
607
                if (VerificadorUtil.naoEstaNulo(modelo)) {
608
                        if (VerificadorUtil.naoEstaNulo(modelo.getMarca())) {
609
                                return modelo.getMarca();
610
                        }
611
                }
612
                return null;
613
        }
614
 
615
        @Transient
616
        public String getDescricaoDaMarcaDoModelo() {
617
                return VerificadorUtil.naoEstaNulo(getMarcaDoModelo())? getMarcaDoModelo().getDescricao() : "";
618
        }
619
 
620
        @Transient
621
        public String getDescricaoComModeloCompletaComCodigo() {
622
                StringBuilder descricaoCompleta = new StringBuilder();
623
                descricaoCompleta.append("[");
624
                descricaoCompleta.append(getCodigoProdutoPadrao());
625
                descricaoCompleta.append("] ");
626
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
627
                        descricaoCompleta.append(getDescricaoDoModelo());
628
                        descricaoCompleta.append(" - ");
629
                }
630
                descricaoCompleta.append(getDescricaoCompleta());
631
                return descricaoCompleta.toString();
632
        }
633
 
634
        @Transient
635
        public String getDescricaoComModeloCompleta() {
636
                StringBuilder descricaoCompleta = new StringBuilder();
637
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
638
                        descricaoCompleta.append(getDescricaoDoModelo());
639
                        descricaoCompleta.append(" - ");
640
                }
641
                descricaoCompleta.append(getDescricaoCompleta());
642
                return descricaoCompleta.toString();
643
        }
644
 
645
        @Transient
646
        public String getDescricaoCompleta() {
647
                StringBuilder descricaoCompleta = new StringBuilder();
648
                if (VerificadorUtil.naoEstaNuloOuVazio(getEstilo())) {
649
                        descricaoCompleta.append(getDescricaoDoEstilo());
650
                        descricaoCompleta.append(" ");
651
                }
652
                descricaoCompleta.append(getDescricao());
653
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
654
                        descricaoCompleta.append(" (");
655
                        descricaoCompleta.append(getDescricaoDaCor());
656
                        descricaoCompleta.append(")");
657
                }
658
                return descricaoCompleta.toString();
659
        }
660
 
661
        @Transient
662
        public String getDescricaoCompletaCapa() {
663
                StringBuilder descricaoCompleta = new StringBuilder();
664
                descricaoCompleta.append(getCodigo());
665
                descricaoCompleta.append(" - ");
666
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
667
                        descricaoCompleta.append("CAPA");
668
                }
669
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
670
                        descricaoCompleta.append(" ");
671
                        descricaoCompleta.append(getDescricaoDoModelo());
672
                }
673
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
674
                        descricaoCompleta.append(" ");
675
                        descricaoCompleta.append(getDescricaoDoEstilo());
676
                }
677
                descricaoCompleta.append(" ");
678
                if (this.getDescricao().length() > 50) {
679
                        descricaoCompleta.append(getDescricao().substring(0, 50));
680
                } else {
681
                        descricaoCompleta.append(getDescricao());
682
                }
683
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
684
                        descricaoCompleta.append(" (");
685
                        descricaoCompleta.append(getDescricaoDaCor());
686
                        descricaoCompleta.append(")");
687
                }
688
                return descricaoCompleta.toString();
689
        }
690
 
691
        @Transient
692
        public String getDescricaoDoTipo() {
693
                return VerificadorUtil.naoEstaNuloOuVazio(getTipo())? TipoProduto.parse(getTipo()).getDescricao() : null;
694
        }
695
 
696
        @Transient
697
        public String getDescricaoDoGenero() {
698
                return VerificadorUtil.naoEstaNuloOuVazio(getGenero())? TipoGenero.parse(getGenero()).getDescricao() : null;
699
        }
700
 
701
        @Transient
702
        public String getDescricaoDoEstilo() {
703
                return VerificadorUtil.naoEstaNuloOuVazio(getEstilo())? TipoEstiloProduto.parse(getEstilo()).getDescricao() : null;
704
        }
705
 
706
        @Transient
707
        public String getDescricaoDaCor() {
708
                return VerificadorUtil.naoEstaNuloOuVazio(getCor())? TipoCorProduto.parse(getCor()).getDescricao() : null;
709
        }
710
 
711
        @Transient
712
        public String getDescricaoNotaFiscal(String observacaoNotaFiscal) {
713
                StringBuilder descricaoCompleta = new StringBuilder();
714
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
715
                        descricaoCompleta.append("CAPA");
716
                }
717
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor()) /*&&
718
                                !this.getTipo().equals(TipoProduto.RESTAURANTE.getValor())*/) {
719
                        descricaoCompleta.append(" ");
720
                        descricaoCompleta.append(this.getDescricaoDoModelo());
721
                }
722
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
723
                        descricaoCompleta.append(" ");
724
                        descricaoCompleta.append(this.getDescricaoDoEstilo());
725
                }
726
                descricaoCompleta.append(" ");
727
                if (this.getDescricao().length() > 50) {
728
                        descricaoCompleta.append(this.getDescricao().substring(0, 50));
729
                } else {
730
                        descricaoCompleta.append(this.getDescricao());
731
                }
732
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getCor())) {
733
                        descricaoCompleta.append(" (");
734
                        descricaoCompleta.append(this.getDescricaoDaCor());
735
                        descricaoCompleta.append(")");
736
                }
737
                if (VerificadorUtil.naoEstaNuloOuVazio(observacaoNotaFiscal)) {
738
                        descricaoCompleta.append(" ");
739
                        descricaoCompleta.append(observacaoNotaFiscal);
740
                }
741
                return descricaoCompleta.toString().trim();
742
        }
743
 
744
        @Transient
745
        public Integer getQuantidadeEstoqueTotal() {
746
                Integer total = 0;
747
                /*
748
                for (ProdutoLoja estoque : estoques) {
749
                        total = total + estoque.getQuantidadeEstoque();
750
                }
751
                */
752
                return total;
753
        }
754
 
755
        @Transient
756
        public Boolean verificarSeQuantidadeEhMenor(Integer primeiro, Integer segundo) {
757
                if (VerificadorUtil.naoEstaNulo(primeiro) && VerificadorUtil.naoEstaNulo(segundo)) {
758
                        return primeiro <= segundo ? true : false;
759
                }
760
                return false;
761
        }
762
 
763
        public void atualizarDados(Produto produto) {
764
                this.codigo = produto.getCodigo();
765
                this.descricao = produto.getDescricao();
766
                this.valorCompra = produto.getValorCompra();
767
                this.valorVarejo = produto.getValorVarejo();
768
                if (produto.getQuantidadeEstoqueTotal() > 0) {
769
                        this.setAtivo(true);
770
                }
771
        }
772
 
773
        public void atualizarDadosNfe(nfce.java.TNFe.InfNFe.Det produtoNota) {
774
                if (VerificadorUtil.estaNuloOuVazio(this.getDescricao())) {
775
                        this.setDescricao(produtoNota.getProd().getXProd());
776
                }
777
                if (VerificadorUtil.estaNuloOuVazio(this.getGenero())) {
778
                        this.setGenero(TipoGenero.UNISSEX.getValor());
779
                }
780
 
781
                this.setCodigoEAN(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEAN()));
782
                this.setCodigoEANTributado(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEANTrib()));
783
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getNCM())) {
784
                        this.setCodigoNCM(produtoNota.getProd().getNCM());
785
                }
786
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getCEST())) {
787
                        this.setCodigoEST(produtoNota.getProd().getCEST());
788
                }
144 espaco 789
 
790
                for (JAXBElement<?> elemento : produtoNota.getImposto().getContent()) {
791
                        if (elemento.getDeclaredType().equals(nfce.java.TNFe.InfNFe.Det.Imposto.ICMS.class)) {
792
                                nfce.java.TNFe.InfNFe.Det.Imposto.ICMS icms = (nfce.java.TNFe.InfNFe.Det.Imposto.ICMS) elemento.getValue();
145 espaco 793
                                if (VerificadorUtil.naoEstaNulo(icms.getICMS00())) {
161 espaco 794
                                        preencherAliquotaIcms(Double.valueOf(icms.getICMS00().getPICMS()));
145 espaco 795
                                }
161 espaco 796
                                if (VerificadorUtil.naoEstaNulo(icms.getICMS10())) {
797
                                        preencherAliquotaIcms(Double.valueOf(icms.getICMS10().getPICMS()));
798
                                }
144 espaco 799
                        }
800
                        if (elemento.getDeclaredType().equals(nfce.java.TIpi.class)) {
801
                                nfce.java.TIpi ipi = (nfce.java.TIpi) elemento.getValue();
145 espaco 802
                                if (VerificadorUtil.naoEstaNulo(ipi.getIPITrib())) {
152 espaco 803
                                        Double aliquotaIPITrib = Double.valueOf(ipi.getIPITrib().getPIPI());
804
                                        if (aliquotaIPITrib > 0.0) {
805
                                                this.setAliquotaIPINotaFiscal(aliquotaIPITrib);
806
                                        }
145 espaco 807
                                }
144 espaco 808
                        }
809
                }
152 espaco 810
                if (VerificadorUtil.estaNulo(getAliquotaIcms())) {
811
                        this.setAliquotaIcmsNotaFiscal(0.0);
812
                        this.setAliquotaIcms(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_INTERNA_ICMS_PADRAO_12);
813
                }
145 espaco 814
 
815
                if (VerificadorUtil.estaNulo(this.getValorCompra())) {
816
                        if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnCom())) {
817
                                this.setValorCompra(retornarValorComDesconto(produtoNota.getProd()));
818
                        }
819
                }
106 espaco 820
        }
161 espaco 821
        private void preencherAliquotaIcms(Double aliquotaIcms) {
822
                if (aliquotaIcms > 0.0) {
823
                        this.setAliquotaIcmsNotaFiscal(aliquotaIcms);
824
                        this.setAliquotaIcms(aliquotaIcms);
825
                } else {
826
                        this.setAliquotaIcmsNotaFiscal(0.0);
827
                        this.setAliquotaIcms(ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_INTERNA_ICMS_PADRAO_12);
828
                }
829
        }
106 espaco 830
 
831
        public Double retornarValorComDesconto(nfce.java.TNFe.InfNFe.Det.Prod produto) {
145 espaco 832
                Double valor = 0.0;
106 espaco 833
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getVDesc())) {
145 espaco 834
                        valor = (new Double(produto.getVProd()) - new Double(produto.getVDesc())) / new Double(produto.getQCom()).intValue();
835
                } else {
836
                        valor = new Double(produto.getVUnCom());
106 espaco 837
                }
145 espaco 838
                return valor;
106 espaco 839
        }
840
 
841
        public Double retornarLucroBruto() {
842
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
843
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
844
                                return (getValorVarejoPromocional() / getValorCompra()) - 1.0;
845
                        } else {
846
                                return (getValorVarejo() / getValorCompra()) - 1.0;
847
                        }
848
                }
849
                return 0.0;
850
        }
851
 
852
        public Double retornarMargemBruta() {
853
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
854
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
855
                                return (100 - (getValorCompra()*100/getValorVarejoPromocional())) / 100;
856
                        } else {
857
                                return (100 - (getValorCompra()*100/getValorVarejo())) / 100;
858
                        }
859
                }
860
                return 0.0;
861
        }
862
 
863
        public Double retornarValorMargemBruta() {
864
                Double margemBruta = retornarMargemBruta();
865
                if (margemBruta > 0.0) {
866
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
867
                                return margemBruta * getValorVarejoPromocional();
868
                        } else {
869
                                return margemBruta * getValorVarejo();
870
                        }
871
                }
872
                return 0.0;
873
        }
874
 
875
        @Transient
876
        public String retornarCorMargem() {
877
                Double margemBruta = retornarMargemBruta();
878
                if (margemBruta > 0.50) return "green";
879
                if (margemBruta > 0.34) return "orange";
880
                if (margemBruta < 0.35) return "red";
881
                return "black";
882
        }
883
 
144 espaco 884
        @Transient
885
        public String retornarCorMargemLucro() {
886
                Double margemBruta = calculoMargemAposCustos();
887
                if (margemBruta > 29.99) return "green";
888
                if (margemBruta > 14.99) return "orange";
889
                if (margemBruta < 15.0) return "red";
890
                return "black";
891
        }
892
 
106 espaco 893
        @Transient
894
        public String getFornecedorMenorValorComprado(Fornecedor fornecedorComprar) {
895
                FornecedorProduto menorValor = null;
896
                for (FornecedorProduto fornecedorProduto : this.getFornecedores()) {
897
                        if (menorValor == null) {
898
                                menorValor = fornecedorProduto;
899
                        } else {
900
                                if (VerificadorUtil.estaNulo(menorValor.getValorCompra()) &&
901
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
902
                                        menorValor = fornecedorProduto;
903
                                }
904
                                if (VerificadorUtil.naoEstaNulo(menorValor.getValorCompra()) &&
905
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
906
                                        if (menorValor.getValorCompra() > fornecedorProduto.getValorCompra()) {
907
                                                menorValor = fornecedorProduto;
908
                                        }
909
                                }
910
                        }
911
                }
912
                String menorValorComprado = "";
913
                if (VerificadorUtil.naoEstaNulo(menorValor)) {
914
                        menorValorComprado = "R$ " + formatarValor(menorValor.getValorCompra());
915
                        if (VerificadorUtil.naoEstaNulo(menorValor.getFornecedor().getNomeDaPessoa())) {
916
                                if (!menorValor.getFornecedor().equals(fornecedorComprar)) {
917
                                        menorValorComprado = menorValorComprado + ", " + menorValor.getFornecedor().getNomeDaPessoa();
918
                                        if (VerificadorUtil.naoEstaNulo(menorValor.getIdentificador())) {
919
                                                menorValorComprado = menorValorComprado + ", ID: " + menorValor.getIdentificador();
920
                                        }
921
                                }
922
                        }
923
                }
924
                return menorValorComprado;
925
        }
926
 
927
        private String formatarValor(Double valor) {
928
                return VerificadorUtil.naoEstaNulo(valor)? String.format("%.2f", valor) : "0,00";
929
        }
930
 
931
        @Override
932
        public int hashCode() {
933
                final int prime = 31;
934
                int result = 1;
935
                result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
936
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
937
                return result;
938
        }
939
 
940
        @Override
941
        public boolean equals(Object obj) {
942
                if (this == obj)
943
                        return true;
944
                if (obj == null)
945
                        return false;
946
                if (getClass() != obj.getClass())
947
                        return false;
948
                Produto other = (Produto) obj;
949
                if (codigo == null) {
950
                        if (other.codigo != null)
951
                                return false;
952
                } else if (!codigo.equals(other.codigo))
953
                        return false;
954
                if (sequencial == null) {
955
                        if (other.sequencial != null)
956
                                return false;
957
                } else if (!sequencial.equals(other.sequencial))
958
                        return false;
959
                return true;
960
        }
961
 
962
        @Transient
963
        public void prepararNovoProduto() {
964
                setAtivo(true);
965
                setIndicadorFavorito(false);
966
                setIndicadorComissionado(true);
967
                setIndicadorEmissaoNotaFiscal(false);
140 espaco 968
                setSujeitoST(false);
106 espaco 969
        }
970
 
971
        @Transient
972
        public boolean tipoProdutoEhCapa() {
973
                return getTipo().equals(TipoProduto.CAPA.getValor());
974
        }
975
 
976
        @Transient
977
        public boolean tipoProdutoEhPelicula() {
978
                return getTipo().equals(TipoProduto.PELICULA.getValor());
979
        }
980
 
981
        @Transient
982
        public boolean tipoProdutoEhCapaOuAcessorio() {
983
                return tipoProdutoEhCapa() || getTipo().equals(TipoProduto.ACESSORIO.getValor());
984
        }
985
 
986
        @Transient
987
        public boolean tipoProdutoEhCapaOuPelicula() {
988
                return tipoProdutoEhCapa() || tipoProdutoEhPelicula();
989
        }
990
 
991
        @Transient
992
        public boolean tipoProdutoEhServico() {
993
                return getTipo().equals(TipoProduto.SERVICO.getValor());
994
        }
995
 
996
        /*@Transient
997
        public boolean tipoProdutoEhRemedioOuOutros() {
998
                return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
999
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
1000
                                getTipo().equals(TipoProduto.OUTROS.getValor());
1001
        }*/
1002
 
1003
        @Transient
1004
        public boolean tipoProdutoTributado() {
1005
                return getTipo().equals(TipoProduto.ACESSORIO.getValor()) ||
1006
                                getTipo().equals(TipoProduto.APARELHOS.getValor()) ||
1007
                                getTipo().equals(TipoProduto.CAPA.getValor()) ||
1008
                                getTipo().equals(TipoProduto.PELICULA.getValor());
1009
        }
1010
 
1011
        @Transient
1012
        public boolean tipoProdutoNaoTributado() {
1013
                return /*getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
1014
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
1015
                                getTipo().equals(TipoProduto.OUTROS.getValor()) ||*/
1016
                                getTipo().equals(TipoProduto.SERVICO.getValor());
1017
        }
1018
 
1019
        @Transient
1020
        public Boolean verificarSeCodigoEhIgual(String codigoProduto) {
1021
                if (codigoProduto.length() > 6 && VerificadorUtil.naoEstaNuloOuVazio(this.getCodigoEAN())) {
1022
                        if (this.getCodigoEAN().equals(codigoProduto)) {
1023
                                return true;
1024
                        }
1025
                }
1026
                if (CodigoBarraEAN.validarCodigoBarras(codigoProduto)) {
1027
                        return this.getCodigoProdutoPadrao().equals(CodigoBarraEAN.retornarCodigoDoCodigoBarras(codigoProduto));
1028
                } else {
1029
                        return this.getCodigoProdutoPadrao().equals(UtilBean.padraoCodigoProduto(codigoProduto));
1030
                }
1031
        }
1032
 
1033
        @Transient
1034
        public String getCodigoNCMDaTributacao() {
1035
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoNCM() : null;
1036
        }
1037
 
1038
        @Transient
1039
        public String getCodigoESTDaTributacao() {
1040
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoEST() : null;
1041
        }
1042
 
1043
        @Override
1044
        public Produto clone() throws CloneNotSupportedException {
1045
                return (Produto) super.clone();
1046
        }
1047
 
1048
        @Transient
1049
        public String corDaDescricaoPeloGenero() {
1050
                if (VerificadorUtil.naoEstaNulo(getGenero())) {
1051
                        if (getGenero().equals(TipoGenero.MASCULINO.getValor())) return "#1c82df";
1052
                        if (getGenero().equals(TipoGenero.FEMININO.getValor())) return "#f06364";
1053
                }
1054
                return "black";
1055
        }
1056
 
1057
        @Transient
1058
        public Boolean getProdutoEmPromocao() {
1059
                if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
1060
                        return getValorVarejoPromocional() > 0.00;
1061
                }
1062
                return false;
1063
        }
1064
 
1065
        @Transient
1066
        public void prepararDadosParaDuplicacao(Produto produto) {
1067
                this.modelo = produto.getModelo();
1068
                this.tributacao = produto.getTributacao();
1069
                this.descricao = produto.getDescricao();
1070
                this.tipo = produto.getTipo();
1071
                this.estilo = produto.getEstilo();
1072
                this.genero = produto.getGenero();
1073
                this.cor = produto.getCor();
1074
                this.observacao = produto.getObservacao();
1075
                this.valorCompra = produto.getValorCompra();
1076
                this.valorVarejo = produto.getValorVarejo();
1077
                this.valorVarejoPromocional = produto.getValorVarejoPromocional();
1078
                this.valorVarejoMaximo = produto.getValorVarejoMaximo();
1079
                this.valorVarejoPopular = produto.getValorVarejoPopular();
1080
                this.valorAtacado = produto.getValorAtacado();
1081
                this.indicadorComissionado = produto.getIndicadorComissionado();
1082
                this.indicadorEmissaoNotaFiscal = produto.getIndicadorEmissaoNotaFiscal();
1083
                this.codigoNCM = produto.getCodigoNCM();
1084
                this.codigoEST = produto.getCodigoEST();
1085
                this.dataOnline = produto.getDataOnline();
1086
                this.indicadorOnline = produto.getIndicadorOnline();
1087
                this.indicadorOnlineShoplog = produto.getIndicadorOnlineShoplog();
145 espaco 1088
                this.setSujeitoST(produto.getSujeitoST());
1089
                this.setAliquotaIcms(produto.getAliquotaIcms());
1090
                this.setAliquotaIcmsST(produto.getAliquotaIcmsST());
1091
                this.setAliquotaFecoep(produto.getAliquotaFecoep());
1092
                this.setAliquotaIPI(produto.getAliquotaIPI());
106 espaco 1093
                this.setAtivo(true);
1094
        }
1095
 
144 espaco 1096
        @Transient
1097
        public void atualizarAliquotas(Fornecedor fornecedor) {
152 espaco 1098
                if (VerificadorUtil.naoEstaNulo(getTributacao())) {
1099
                        setAliquotaIPI(getTributacao().getAliquotaIPI());
1100
                }
1101
 
144 espaco 1102
                if (VerificadorUtil.naoEstaNulo(getTributacao())
1103
                                && VerificadorUtil.naoEstaNulo(getAliquotaIcms())
1104
                                && VerificadorUtil.naoEstaNulo(fornecedor)) {
1105
                        if (getTributacao().getSujeitoST() && fornecedor.getSujeitoST()) {
1106
                                setAliquotaIcmsST(getTributacao().mvaPorIcms(getAliquotaIcms()));
1107
                                setAliquotaFecoep(getTributacao().getAliquotaFecoep());
1108
                                setSujeitoST(true);
1109
                        } else {
1110
                                setAliquotaFecoep(null);
1111
                                setAliquotaIcmsST(null);
1112
                                setSujeitoST(false);
1113
                        }
1114
                } else if (VerificadorUtil.naoEstaNulo(getTributacao()) && VerificadorUtil.naoEstaNulo(getAliquotaIcms())) {
1115
                        if (getTributacao().getSujeitoST()) {
1116
                                setAliquotaIcmsST(getTributacao().mvaPorIcms(getAliquotaIcms()));
1117
                                setAliquotaFecoep(getTributacao().getAliquotaFecoep());
1118
                                setSujeitoST(true);
1119
                        } else {
1120
                                setAliquotaFecoep(null);
1121
                                setAliquotaIcmsST(null);
1122
                                setSujeitoST(false);
1123
                        }
1124
                }
1125
        }
1126
 
1127
        @Transient
1128
        public Double calculoIPI() {
1129
                return VerificadorUtil.naoEstaNulo(getAliquotaIPI())? getAliquotaIPI()/100 * getValorCompra() : 0.0;
1130
        }
1131
 
1132
        @Transient
1133
        public Double calculoICMS() {
1134
                return VerificadorUtil.naoEstaNulo(getAliquotaIcms()) && VerificadorUtil.naoEstaNulo(getAliquotaFecoep())?
1135
                                (getAliquotaIcms()/100 + getAliquotaFecoep()/100) * getValorCompra() : 0.0;
1136
        }
1137
 
1138
        @Transient
1139
        public Double calculoICMSST() {
1140
                if (getSujeitoST()) {
1141
                        return VerificadorUtil.naoEstaNulo(getAliquotaIcmsST())
1142
                                        && VerificadorUtil.naoEstaNulo(getAliquotaFecoep())
1143
                                        && VerificadorUtil.naoEstaNulo(getTributacao())?
1144
                                ((getTributacao().getAliquotaInterna()/100 + getAliquotaFecoep()/100) * baseCalculoICMSST()) - calculoICMS(): 0.0;
1145
                }
1146
                return 0.0;
1147
        }
1148
 
1149
        @Transient
1150
        public Double baseCalculoICMSST() {
1151
                if (getSujeitoST()) {
1152
                        if (VerificadorUtil.naoEstaNulo(getTributacao())) {
1153
                                Double baseCalculoIPI = getValorCompra() + calculoIPI();
1154
                                return baseCalculoIPI + (baseCalculoIPI * getTributacao().mvaPorIcms(getAliquotaIcms())/100);
1155
                        }
1156
                }
1157
                return 0.0;
1158
        }
1159
 
1160
        @Transient
1161
        public Double aliquotaMvaProduto() {
1162
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().mvaPorIcms(getAliquotaIcms()) : 0.0;
1163
        }
1164
 
1165
        @Transient
1166
        public Double calculoTributosCompra() {
145 espaco 1167
                 return VerificadorUtil.naoEstaNulo(getValorCompra())? getValorCompra() + calculoIPI() + calculoICMSST() : 0.0;
144 espaco 1168
        }
1169
 
1170
        @Transient
1171
        public Double calculoOperacao() {
1172
                Double aliquota = ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_SIMPLES_NACIONAL_11 +
162 espaco 1173
                                                  ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_COMISSOES_2 +
1174
                                                  ConstantesSEC.NotaFiscal.Imposto.ALIQUOTA_MEDIA_CARTAO_2;
144 espaco 1175
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? calculoTributosCompra() + (getValorVarejoSimulacao()*aliquota/100) : 0.0;
1176
        }
1177
 
1178
        @Transient
152 espaco 1179
        public String valorCalculoOperacao() {
1180
                return StringUtil.formatarValor(calculoOperacao());
1181
        }
1182
 
1183
        @Transient
144 espaco 1184
        public Double calculoValorAposCustos() {
1185
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? getValorVarejoSimulacao() - calculoOperacao() : 0.0;
1186
        }
1187
 
1188
        @Transient
1189
        public Double calculoMargemAposCustos() {
1190
                return VerificadorUtil.naoEstaNulo(getValorVarejoSimulacao())? calculoValorAposCustos() * 100 / calculoOperacao() : 0.0;
1191
        }
1192
 
145 espaco 1193
        @Transient
1194
        public String retornarLucroBrutoFormatado() {
1195
                return StringUtil.formatarPercentual(calculoValorAposCustos());
1196
        }
1197
 
1198
        @Transient
1199
        public String retornarMargemBrutaFormatada() {
1200
                try {
1201
                        return StringUtil.formatarValorComDigitos(calculoMargemAposCustos().toString(), 2);
1202
                } catch (Exception e) {
1203
                        e.printStackTrace();
1204
                }
1205
                return "";
1206
        }
1207
 
152 espaco 1208
        @Transient
1209
        public Double calculoPrecoMinimo() {
1210
                Double valorVarejoSimulacao = getValorVarejoSimulacao();
1211
                setValorVarejoSimulacao(this.getValorCompra());
1212
                Double valorMinimo = this.calculoOperacao();
1213
                Double margem = 0.0;
1214
                valorMinimo = valorMinimo + (valorMinimo / 100);
1215
                if (valorMinimo > 0.0) {
1216
                        while (margem < 15.0) {
1217
                                valorMinimo = valorMinimo + (valorMinimo / 100);
1218
                                setValorVarejoSimulacao(valorMinimo);
1219
                                margem = calculoMargemAposCustos();
1220
                        }
1221
                }
1222
                setValorVarejoSimulacao(valorVarejoSimulacao);
1223
                return valorMinimo;
1224
        }
1225
 
106 espaco 1226
}