Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 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.Table;
19
import javax.persistence.Transient;
20
import javax.validation.constraints.NotNull;
21
 
22
import org.hibernate.annotations.ForeignKey;
23
import org.hibernate.validator.constraints.NotEmpty;
24
 
25
import br.com.ec.controller.util.UtilBean;
26
import br.com.ec.domain.model.tipos.TipoCorProduto;
27
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
28
import br.com.ec.domain.model.tipos.TipoGenero;
29
import br.com.ec.domain.model.tipos.TipoProduto;
30
import br.com.ec.domain.util.CodigoBarraEAN;
31
import br.edu.cesmac.core.interfaces.Alterar;
32
import br.edu.cesmac.core.interfaces.Cadastrar;
33
import br.edu.cesmac.core.util.DataUtils;
34
import br.edu.cesmac.core.util.StringUtil;
35
import br.edu.cesmac.core.util.VerificadorUtil;
36
 
37
@Entity
38
@Table(name="sec_produto", schema="sc_sec")
39
public class Produto implements Serializable, Cloneable {
40
 
41
        private static final long serialVersionUID = 1L;
42
 
43
        private Long sequencial;
44
        private Modelo modelo;
45
        private Tributacao tributacao;
46
        private String codigo;
47
        private String codigoRapido;
48
        private String codigoEAN;
49
        private String codigoEANTributado;
50
        private String descricao;
51
        private String tipo;
52
        private String genero;
53
        private String estilo;
54
        private String cor;
55
        private String observacao;
56
        private Double valorCompra;
57
        private Double valorVarejo;
58
        private Double valorVarejoPromocional;
59
        private Double valorVarejoMaximo;
60
        private Boolean indicadorOnline;
61
        private Boolean indicadorFacebook;
62
        private Boolean indicadorFavorito;
63
        private Boolean indicadorComissionado;
64
        private Boolean indicadorEmissaoNotaFiscal;
65
        private Boolean ativo;
66
 
67
        private String codigoNCM;
68
        private String codigoEST;
69
        private Set<ProdutoPedidoCompra> pedidosCompra;
70
        private Set<ProdutoLoja> estoques;
71
        private Set<FornecedorProduto> fornecedores;
72
        private Set<ProdutoRelacionado> relacionados;
73
        private Set<ProdutoRelacionado> relacionadosReverse;
74
 
75
        private List<TransferenciaProduto> transferenciasAbertas = new ArrayList<TransferenciaProduto>();
76
 
77
        private Date dataUltimaVenda;
78
//      private Set<ProdutoArquivo> fotos;
79
 
80
        @Id
81
        @GeneratedValue(strategy = GenerationType.IDENTITY)
82
        @Column(name="seq_produto", nullable=false)
83
        public Long getSequencial() {
84
                return sequencial;
85
        }
86
        public void setSequencial(Long sequencial) {
87
                this.sequencial = sequencial;
88
        }
89
 
90
        @ManyToOne
91
        @ForeignKey(name="fk_produto_modelo")
92
        @NotNull(message = "Parâmetro obrigatório não preenchido: Modelo do produto", groups = {Cadastrar.class, Alterar.class})
93
        @JoinColumn(name = "seq_modelo", referencedColumnName="seq_modelo", nullable=true)
94
        public Modelo getModelo() {
95
                return modelo;
96
        }
97
        public void setModelo(Modelo modelo) {
98
                this.modelo = modelo;
99
        }
100
 
101
        @ManyToOne
102
        @ForeignKey(name="fk_produto_tributacao")
103
        @JoinColumn(name = "seq_tributacao", referencedColumnName="seq_tributacao", nullable=true)
104
        public Tributacao getTributacao() {
105
                return tributacao;
106
        }
107
        public void setTributacao(Tributacao tributacao) {
108
                this.tributacao = tributacao;
109
        }
110
 
111
        @Column(name="cod_produto")
112
        @NotNull(message = "Parâmetro obrigatório não preenchido: Código do produto", groups = {Cadastrar.class, Alterar.class})
113
        @NotEmpty(message = "Parâmetro obrigatório não preenchido: Código do produto", groups = {Cadastrar.class, Alterar.class})
114
        public String getCodigo() {
115
                return codigo;
116
        }
117
        public void setCodigo(String codigo) {
118
                this.codigo = codigo;
119
        }
120
 
121
        @Column(name="cod_rapido_produto")
122
        public String getCodigoRapido() {
123
                return codigoRapido;
124
        }
125
        public void setCodigoRapido(String codigoRapido) {
126
                this.codigoRapido = codigoRapido;
127
        }
128
 
129
        @Column(name="cod_ean")
130
        public String getCodigoEAN() {
131
                return codigoEAN;
132
        }
133
        public void setCodigoEAN(String codigoEAN) {
134
                this.codigoEAN = codigoEAN;
135
        }
136
 
137
        @Column(name="cod_ean_tributado")
138
        public String getCodigoEANTributado() {
139
                return codigoEANTributado;
140
        }
141
        public void setCodigoEANTributado(String codigoEANTributado) {
142
                this.codigoEANTributado = codigoEANTributado;
143
        }
144
 
145
        @Column(name="dsc_produto")
146
        public String getDescricao() {
147
                return descricao;
148
        }
149
        public void setDescricao(String descricao) {
150
                this.descricao = StringUtil.setarUpperCaseComTrim(descricao);
151
        }
152
 
153
        @Column(name="tip_produto")
154
        @NotNull(message = "Parâmetro obrigatório não preenchido: Tipo do produto", groups = {Cadastrar.class, Alterar.class})
155
        public String getTipo() {
156
                return tipo;
157
        }
158
        public void setTipo(String tipo) {
159
                this.tipo = tipo;
160
        }
161
 
162
        @Column(name="tip_genero")
163
        @NotNull(message = "Parâmetro obrigatório não preenchido: Gênero", groups = {Cadastrar.class, Alterar.class})
164
        public String getGenero() {
165
                return genero;
166
        }
167
        public void setGenero(String genero) {
168
                this.genero = genero;
169
        }
170
 
171
        @Column(name="tip_estilo")
172
        public String getEstilo() {
173
                return estilo;
174
        }
175
        public void setEstilo(String estilo) {
176
                this.estilo = estilo;
177
        }
178
 
179
        @Column(name="tip_cor")
180
        public String getCor() {
181
                return cor;
182
        }
183
        public void setCor(String cor) {
184
                this.cor = cor;
185
        }
186
 
187
        @Column(name="dsc_observacao")
188
        public String getObservacao() {
189
                return observacao;
190
        }
191
        public void setObservacao(String observacao) {
192
                this.observacao = StringUtil.setarUpperCase(observacao);
193
        }
194
 
195
        @Column(name="val_compra")
196
        public Double getValorCompra() {
197
                return valorCompra;
198
        }
199
        public void setValorCompra(Double valorCompra) {
200
                this.valorCompra = valorCompra;
201
        }
202
 
203
        @Transient
204
        public String valorCompraFormatado() {
205
                if (VerificadorUtil.naoEstaNulo(getValorCompra())) {
206
                        return StringUtil.formatarValor(getValorCompra());
207
                }
208
                return StringUtil.formatarValor(0.0);
209
        }
210
 
211
        @Column(name="val_varejo")
212
        public Double getValorVarejo() {
213
                return valorVarejo;
214
        }
215
        public void setValorVarejo(Double valorVarejo) {
216
                this.valorVarejo = valorVarejo;
217
        }
218
 
219
        @Column(name="val_varejo_promocional")
220
        public Double getValorVarejoPromocional() {
221
                return valorVarejoPromocional;
222
        }
223
        public void setValorVarejoPromocional(Double valorVarejoPromocional) {
224
                this.valorVarejoPromocional = valorVarejoPromocional;
225
        }
226
 
227
        @Column(name="val_varejo_maximo")
228
        public Double getValorVarejoMaximo() {
229
                return valorVarejoMaximo;
230
        }
231
        public void setValorVarejoMaximo(Double valorVarejoMaximo) {
232
                this.valorVarejoMaximo = valorVarejoMaximo;
233
        }
234
 
235
        @Column(name="ind_online")
236
        @NotNull(message = "Parâmetro obrigatório não preenchido: Indicador de online", groups = {Cadastrar.class, Alterar.class})
237
        public Boolean getIndicadorOnline() {
238
                return indicadorOnline;
239
        }
240
        public void setIndicadorOnline(Boolean indicadorOnline) {
241
                this.indicadorOnline = indicadorOnline;
242
        }
243
 
244
        @Column(name="ind_facebook")
245
        @NotNull(message = "Parâmetro obrigatório não preenchido: Indicador do facebook", groups = {Cadastrar.class, Alterar.class})
246
        public Boolean getIndicadorFacebook() {
247
                return indicadorFacebook;
248
        }
249
        public void setIndicadorFacebook(Boolean indicadorFacebook) {
250
                this.indicadorFacebook = indicadorFacebook;
251
        }
252
 
253
        @Column(name="ind_favorito")
254
        public Boolean getIndicadorFavorito() {
255
                return indicadorFavorito;
256
        }
257
        public void setIndicadorFavorito(Boolean indicadorFavorito) {
258
                this.indicadorFavorito = indicadorFavorito;
259
        }
260
 
261
        @Column(name="ind_comissionado")
262
        public Boolean getIndicadorComissionado() {
263
                return indicadorComissionado;
264
        }
265
        public void setIndicadorComissionado(Boolean indicadorComissionado) {
266
                this.indicadorComissionado = indicadorComissionado;
267
        }
268
 
269
        @Column(name="ind_emissao_nf")
270
        public Boolean getIndicadorEmissaoNotaFiscal() {
271
                if (VerificadorUtil.estaNulo(indicadorEmissaoNotaFiscal)) {
272
                        return false;
273
                }
274
                return indicadorEmissaoNotaFiscal;
275
        }
276
        public void setIndicadorEmissaoNotaFiscal(Boolean indicadorEmissaoNotaFiscal) {
277
                this.indicadorEmissaoNotaFiscal = indicadorEmissaoNotaFiscal;
278
        }
279
 
280
        @Column(name="ind_ativo")
281
        public Boolean getAtivo() {
282
                return ativo;
283
        }
284
        public void setAtivo(Boolean ativo) {
285
                this.ativo = ativo;
286
        }
287
 
288
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
289
        public Set<ProdutoPedidoCompra> getPedidosCompra() {
290
                return pedidosCompra;
291
        }
292
        public void setPedidosCompra(Set<ProdutoPedidoCompra> pedidosCompra) {
293
                this.pedidosCompra = pedidosCompra;
294
        }
295
 
296
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
297
        public Set<ProdutoLoja> getEstoques() {
298
                return estoques;
299
        }
300
        public void setEstoques(Set<ProdutoLoja> estoques) {
301
                this.estoques = estoques;
302
        }
303
 
304
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
305
        public Set<FornecedorProduto> getFornecedores() {
306
                return fornecedores;
307
        }
308
        public void setFornecedores(Set<FornecedorProduto> fornecedores) {
309
                this.fornecedores = fornecedores;
310
        }
311
 
312
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
313
        public Set<ProdutoRelacionado> getRelacionados() {
314
                return relacionados;
315
        }
316
        public void setRelacionados(Set<ProdutoRelacionado> relacionados) {
317
                this.relacionados = relacionados;
318
        }
319
 
320
        @OneToMany(mappedBy="produtoRelacionado", cascade=CascadeType.ALL, orphanRemoval=true)
321
        public Set<ProdutoRelacionado> getRelacionadosReverse() {
322
                return relacionadosReverse;
323
        }
324
        public void setRelacionadosReverse(Set<ProdutoRelacionado> relacionadosReverse) {
325
                this.relacionadosReverse = relacionadosReverse;
326
        }
327
 
328
        @Transient
329
        public List<TransferenciaProduto> getTransferenciasAbertas() {
330
                return transferenciasAbertas;
331
        }
332
        public void setTransferenciasAbertas(List<TransferenciaProduto> transferenciasAbertas) {
333
                this.transferenciasAbertas = transferenciasAbertas;
334
        }
335
 
336
        @Transient
337
        public Date getDataUltimaVenda() {
338
                return dataUltimaVenda;
339
        }
340
        public void setDataUltimaVenda(Date dataUltimaVenda) {
341
                this.dataUltimaVenda = dataUltimaVenda;
342
        }
343
 
344
        @Transient
345
        public Integer getQuantidadeDiasUltimaVenda() {
346
                if (VerificadorUtil.naoEstaNulo(getDataUltimaVenda())) {
347
                        return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), getDataUltimaVenda());
348
                }
349
                return null;
350
        }
351
 
352
        @Transient
353
        public ArrayList<ProdutoRelacionado> getCompativeis() {
354
                ArrayList<ProdutoRelacionado> compativeis = new ArrayList<ProdutoRelacionado>();
355
                if (VerificadorUtil.naoEstaNulo(getRelacionados())) {
356
                        compativeis.addAll(getRelacionados());
357
                }
358
                if (VerificadorUtil.naoEstaNulo(getRelacionadosReverse())) {
359
                        compativeis.addAll(getRelacionadosReverse());
360
                }
361
                return compativeis;
362
        }
363
 
364
        @Transient
365
        public String getCodigoNCM() {
366
                return codigoNCM;
367
        }
368
        public void setCodigoNCM(String codigoNCM) {
369
                this.codigoNCM = codigoNCM;
370
        }
371
 
372
        @Transient
373
        public String getCodigoEST() {
374
                return codigoEST;
375
        }
376
        public void setCodigoEST(String codigoEST) {
377
                this.codigoEST = codigoEST;
378
        }
379
 
380
        /*
381
        @OneToMany(mappedBy="produto", cascade=CascadeType.ALL, orphanRemoval=true)
382
        public Set<ProdutoArquivo> getFotos() {
383
                return fotos;
384
        }
385
        public void setFotos(Set<ProdutoArquivo> fotos) {
386
                this.fotos = fotos;
387
        }
388
        */
389
        /***************************************************************/
390
 
391
        @Transient
392
        public String getCodigoProdutoPadrao() {
393
                try {
394
                        return VerificadorUtil.naoEstaNulo(codigo) ? String.format("%06d", new Long(codigo.trim())) : "";
395
                } catch (Exception e) {
396
                        return "";
397
                }
398
        }
399
 
400
        public static void main(String[] args) {
401
//              System.out.println(String.format("%07d", new Long(12879)));
402
//              codigoBarras.gerarCodigoBarra(String.format("%012d", new Long(12879)));
403
//              System.out.println(codigoBarras.getCodigoBarra());
404
                System.out.println(CodigoBarraEAN.gerarCodigoBarras("6659"));
405
//              System.out.println(codigoBarras.longToEan13("900000012879"));
406
        }
407
 
408
        @Transient
409
        public String getCodigoDeBarrasProdutoPadrao() {
410
                try {
411
                        return VerificadorUtil.naoEstaNulo(codigo)? String.format("%07d", new Long(codigo)) : "";
412
//                      return VerificadorUtil.naoEstaNulo(codigo) ? StringUtils.rightPad(codigo, 12, "0") : "";
413
                } catch (Exception e) {
414
                        return "";
415
                }
416
        }
417
 
418
        @Transient
419
        public String getDescricaoDoModelo() {
420
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getDescricao() : "";
421
        }
422
 
423
        @Transient
424
        public String getDescricaoTecnicaDoModelo() {
425
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? modelo.getDescricaoTecnica() : "" : "";
426
        }
427
 
428
        @Transient
429
        public String getDescricaoTecnicaDoModeloComParenteses() {
430
                return VerificadorUtil.naoEstaNulo(modelo)? VerificadorUtil.naoEstaNulo(modelo.getDescricaoTecnica())? " (" + modelo.getDescricaoTecnica() + ") " : "" : "";
431
        }
432
 
433
        @Transient
434
        public Long getSequencialDoModelo() {
435
                return VerificadorUtil.naoEstaNulo(modelo)? modelo.getSequencial() : null;
436
        }
437
 
438
        @Transient
439
        public Marca getMarcaDoModelo() {
440
                if (VerificadorUtil.naoEstaNulo(modelo)) {
441
                        if (VerificadorUtil.naoEstaNulo(modelo.getMarca())) {
442
                                return modelo.getMarca();
443
                        }
444
                }
445
                return null;
446
        }
447
 
448
        @Transient
449
        public String getDescricaoDaMarcaDoModelo() {
450
                return VerificadorUtil.naoEstaNulo(getMarcaDoModelo())? getMarcaDoModelo().getDescricao() : "";
451
        }
452
 
453
        @Transient
454
        public String getDescricaoComModeloCompletaComCodigo() {
455
                StringBuilder descricaoCompleta = new StringBuilder();
456
                descricaoCompleta.append("[");
457
                descricaoCompleta.append(getCodigoProdutoPadrao());
458
                descricaoCompleta.append("] ");
459
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
460
                        descricaoCompleta.append(getDescricaoDoModelo());
461
                        descricaoCompleta.append(" - ");
462
                }
463
                descricaoCompleta.append(getDescricaoCompleta());
464
                return descricaoCompleta.toString();
465
        }
466
 
467
        @Transient
468
        public String getDescricaoComModeloCompleta() {
469
                StringBuilder descricaoCompleta = new StringBuilder();
470
                if (VerificadorUtil.naoEstaNuloOuVazio(getDescricaoDoModelo())) {
471
                        descricaoCompleta.append(getDescricaoDoModelo());
472
                        descricaoCompleta.append(" - ");
473
                }
474
                descricaoCompleta.append(getDescricaoCompleta());
475
                return descricaoCompleta.toString();
476
        }
477
 
478
        @Transient
479
        public String getDescricaoCompleta() {
480
                StringBuilder descricaoCompleta = new StringBuilder();
481
                if (VerificadorUtil.naoEstaNuloOuVazio(getEstilo())) {
482
                        descricaoCompleta.append(getDescricaoDoEstilo());
483
                        descricaoCompleta.append(" ");
484
                }
485
                descricaoCompleta.append(getDescricao());
486
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
487
                        descricaoCompleta.append(" (");
488
                        descricaoCompleta.append(getDescricaoDaCor());
489
                        descricaoCompleta.append(")");
490
                }
491
                return descricaoCompleta.toString();
492
        }
493
 
494
        @Transient
495
        public String getDescricaoCompletaCapa() {
496
                StringBuilder descricaoCompleta = new StringBuilder();
497
                descricaoCompleta.append(getCodigo());
498
                descricaoCompleta.append(" - ");
499
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
500
                        descricaoCompleta.append("CAPA");
501
                }
502
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor())) {
503
                        descricaoCompleta.append(" ");
504
                        descricaoCompleta.append(getDescricaoDoModelo());
505
                }
506
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
507
                        descricaoCompleta.append(" ");
508
                        descricaoCompleta.append(getDescricaoDoEstilo());
509
                }
510
                descricaoCompleta.append(" ");
511
                if (this.getDescricao().length() > 50) {
512
                        descricaoCompleta.append(getDescricao().substring(0, 50));
513
                } else {
514
                        descricaoCompleta.append(getDescricao());
515
                }
516
                if (VerificadorUtil.naoEstaNuloOuVazio(getCor())) {
517
                        descricaoCompleta.append(" (");
518
                        descricaoCompleta.append(getDescricaoDaCor());
519
                        descricaoCompleta.append(")");
520
                }
521
                return descricaoCompleta.toString();
522
        }
523
 
524
        @Transient
525
        public String getDescricaoDoTipo() {
526
                return VerificadorUtil.naoEstaNuloOuVazio(getTipo())? TipoProduto.parse(getTipo()).getDescricao() : null;
527
        }
528
 
529
        @Transient
530
        public String getDescricaoDoGenero() {
531
                return VerificadorUtil.naoEstaNuloOuVazio(getGenero())? TipoGenero.parse(getGenero()).getDescricao() : null;
532
        }
533
 
534
        @Transient
535
        public String getDescricaoDoEstilo() {
536
                return VerificadorUtil.naoEstaNuloOuVazio(getEstilo())? TipoEstiloProduto.parse(getEstilo()).getDescricao() : null;
537
        }
538
 
539
        @Transient
540
        public String getDescricaoDaCor() {
541
                return VerificadorUtil.naoEstaNuloOuVazio(getCor())? TipoCorProduto.parse(getCor()).getDescricao() : null;
542
        }
543
 
544
        @Transient
545
        public String getDescricaoNotaFiscal(String observacaoNotaFiscal) {
546
                StringBuilder descricaoCompleta = new StringBuilder();
547
                if (this.getTipo().equals(TipoProduto.CAPA.getValor())) {
548
                        descricaoCompleta.append("CAPA");
549
                }
550
                if (!this.getTipo().equals(TipoProduto.ACESSORIO.getValor()) &&
551
                                !this.getTipo().equals(TipoProduto.RESTAURANTE.getValor())) {
552
                        descricaoCompleta.append(" ");
553
                        descricaoCompleta.append(this.getDescricaoDoModelo());
554
                }
555
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getEstilo())) {
556
                        descricaoCompleta.append(" ");
557
                        descricaoCompleta.append(this.getDescricaoDoEstilo());
558
                }
559
                descricaoCompleta.append(" ");
560
                if (this.getDescricao().length() > 50) {
561
                        descricaoCompleta.append(this.getDescricao().substring(0, 50));
562
                } else {
563
                        descricaoCompleta.append(this.getDescricao());
564
                }
565
                if (VerificadorUtil.naoEstaNuloOuVazio(this.getCor())) {
566
                        descricaoCompleta.append(" (");
567
                        descricaoCompleta.append(this.getDescricaoDaCor());
568
                        descricaoCompleta.append(")");
569
                }
570
                if (VerificadorUtil.naoEstaNuloOuVazio(observacaoNotaFiscal)) {
571
                        descricaoCompleta.append(" ");
572
                        descricaoCompleta.append(observacaoNotaFiscal);
573
                }
574
                return descricaoCompleta.toString().trim();
575
        }
576
 
577
        @Transient
578
        public Integer getQuantidadeEstoqueTotal() {
579
                Integer total = 0;
580
                /*
581
                for (ProdutoLoja estoque : estoques) {
582
                        total = total + estoque.getQuantidadeEstoque();
583
                }
584
                */
585
                return total;
586
        }
587
 
588
        @Transient
589
        public Boolean verificarSeQuantidadeEhMenor(Integer primeiro, Integer segundo) {
590
                if (VerificadorUtil.naoEstaNulo(primeiro) && VerificadorUtil.naoEstaNulo(segundo)) {
591
                        return primeiro <= segundo ? true : false;
592
                }
593
                return false;
594
        }
595
 
596
        public void atualizarDados(Produto produto) {
597
                this.codigo = produto.getCodigo();
598
                this.descricao = produto.getDescricao();
599
                this.valorCompra = produto.getValorCompra();
600
                this.valorVarejo = produto.getValorVarejo();
601
                if (produto.getQuantidadeEstoqueTotal() > 0) {
602
                        this.setAtivo(true);
603
                }
604
        }
605
 
606
        public void atualizarDadosNfe(nfce.java.TNFe.InfNFe.Det produtoNota) {
607
                if (VerificadorUtil.estaNuloOuVazio(this.getDescricao())) {
608
                        this.setDescricao(produtoNota.getProd().getXProd());
609
                }
610
                if (VerificadorUtil.estaNuloOuVazio(this.getGenero())) {
611
                        this.setGenero(TipoGenero.UNISSEX.getValor());
612
                }
613
                if (VerificadorUtil.estaNulo(this.getValorCompra())) {
614
                        if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getVUnCom())) {
615
                                this.setValorCompra(retornarValorComDesconto(produtoNota.getProd()));
616
                        }
617
                }
618
 
619
                this.setCodigoEAN(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEAN()));
620
                this.setCodigoEANTributado(StringUtil.retornarApenasNumeros(produtoNota.getProd().getCEANTrib()));
621
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getNCM())) {
622
                        this.setCodigoNCM(produtoNota.getProd().getNCM());
623
                }
624
                if (VerificadorUtil.naoEstaNulo(produtoNota.getProd().getCEST())) {
625
                        this.setCodigoEST(produtoNota.getProd().getCEST());
626
                }
627
        }
628
 
629
        public Double retornarValorComDesconto(nfce.java.TNFe.InfNFe.Det.Prod produto) {
630
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getVDesc())) {
631
                        Double valorUnitarioDescontado = (new Double(produto.getVProd()) - new Double(produto.getVDesc())) / new Double(produto.getQCom()).intValue();
632
                        return valorUnitarioDescontado;
633
                }
634
                return new Double(produto.getVUnCom());
635
        }
636
 
637
        public Double retornarLucroBruto() {
638
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
639
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
640
                                return (getValorVarejoPromocional() / getValorCompra()) - 1.0;
641
                        } else {
642
                                return (getValorVarejo() / getValorCompra()) - 1.0;
643
                        }
644
                }
645
                return 0.0;
646
        }
647
 
648
        public Double retornarMargemBruta() {
649
                if (VerificadorUtil.naoEstaNulo(getValorCompra()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
650
                        if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
651
                                return (100 - (getValorCompra()*100/getValorVarejoPromocional())) / 100;
652
                        } else {
653
                                return (100 - (getValorCompra()*100/getValorVarejo())) / 100;
654
                        }
655
                }
656
                return 0.0;
657
        }
658
 
659
        public String retornarLucroBrutoFormatado() {
660
                return StringUtil.formatarPercentual(retornarLucroBruto());
661
        }
662
 
663
        @Transient
664
        public String getFornecedorMenorValorComprado(Fornecedor fornecedorComprar) {
665
                FornecedorProduto menorValor = null;
666
                for (FornecedorProduto fornecedorProduto : this.getFornecedores()) {
667
                        if (menorValor == null) {
668
                                menorValor = fornecedorProduto;
669
                        } else {
670
                                if (VerificadorUtil.estaNulo(menorValor.getValorCompra()) &&
671
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
672
                                        menorValor = fornecedorProduto;
673
                                }
674
                                if (VerificadorUtil.naoEstaNulo(menorValor.getValorCompra()) &&
675
                                                VerificadorUtil.naoEstaNulo(fornecedorProduto.getValorCompra())) {
676
                                        if (menorValor.getValorCompra() > fornecedorProduto.getValorCompra()) {
677
                                                menorValor = fornecedorProduto;
678
                                        }
679
                                }
680
                        }
681
                }
682
                String menorValorComprado = "";
683
                if (VerificadorUtil.naoEstaNulo(menorValor)) {
684
                        menorValorComprado = "R$ " + formatarValor(menorValor.getValorCompra());
685
                        if (VerificadorUtil.naoEstaNulo(menorValor.getFornecedor().getNomeDaPessoa())) {
686
                                if (!menorValor.getFornecedor().equals(fornecedorComprar)) {
687
                                        menorValorComprado = menorValorComprado + ", " + menorValor.getFornecedor().getNomeDaPessoa();
688
                                        if (VerificadorUtil.naoEstaNulo(menorValor.getIdentificador())) {
689
                                                menorValorComprado = menorValorComprado + ", ID: " + menorValor.getIdentificador();
690
                                        }
691
                                }
692
                        }
693
                }
694
                return menorValorComprado;
695
        }
696
 
697
        private String formatarValor(Double valor) {
698
                return VerificadorUtil.naoEstaNulo(valor)? String.format("%.2f", valor) : "0,00";
699
        }
700
 
701
        @Override
702
        public int hashCode() {
703
                final int prime = 31;
704
                int result = 1;
705
                result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
706
                result = prime * result + ((sequencial == null) ? 0 : sequencial.hashCode());
707
                return result;
708
        }
709
 
710
        @Override
711
        public boolean equals(Object obj) {
712
                if (this == obj)
713
                        return true;
714
                if (obj == null)
715
                        return false;
716
                if (getClass() != obj.getClass())
717
                        return false;
718
                Produto other = (Produto) obj;
719
                if (codigo == null) {
720
                        if (other.codigo != null)
721
                                return false;
722
                } else if (!codigo.equals(other.codigo))
723
                        return false;
724
                if (sequencial == null) {
725
                        if (other.sequencial != null)
726
                                return false;
727
                } else if (!sequencial.equals(other.sequencial))
728
                        return false;
729
                return true;
730
        }
731
 
732
        @Transient
733
        public void prepararNovoProduto() {
734
                setAtivo(true);
735
                setIndicadorFacebook(false);
736
                setIndicadorFavorito(false);
737
                setIndicadorOnline(false);
738
                setIndicadorComissionado(true);
739
                setIndicadorEmissaoNotaFiscal(false);
740
        }
741
 
742
        @Transient
743
        public boolean tipoProdutoEhCapa() {
744
                return getTipo().equals(TipoProduto.CAPA.getValor());
745
        }
746
 
747
        @Transient
748
        public boolean tipoProdutoEhPelicula() {
749
                return getTipo().equals(TipoProduto.PELICULA.getValor());
750
        }
751
 
752
        @Transient
753
        public boolean tipoProdutoEhCapaOuAcessorio() {
754
                return tipoProdutoEhCapa() || getTipo().equals(TipoProduto.ACESSORIO.getValor());
755
        }
756
 
757
        @Transient
758
        public boolean tipoProdutoEhCapaOuPelicula() {
759
                return tipoProdutoEhCapa() || tipoProdutoEhPelicula();
760
        }
761
 
762
        @Transient
763
        public boolean tipoProdutoEhRemedioOuOutros() {
764
                return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
765
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
766
                                getTipo().equals(TipoProduto.OUTROS.getValor());
767
        }
768
 
769
        @Transient
770
        public boolean tipoProdutoTributado() {
771
                return getTipo().equals(TipoProduto.ACESSORIO.getValor()) ||
772
                                getTipo().equals(TipoProduto.APARELHOS.getValor()) ||
773
                                getTipo().equals(TipoProduto.CAPA.getValor()) ||
774
                                getTipo().equals(TipoProduto.PELICULA.getValor());
775
        }
776
 
777
        @Transient
778
        public boolean tipoProdutoNaoTributado() {
779
                return getTipo().equals(TipoProduto.REMEDIO.getValor()) ||
780
                                getTipo().equals(TipoProduto.REMEDIO_CARTELA.getValor()) ||
781
                                getTipo().equals(TipoProduto.OUTROS.getValor()) ||
782
                                getTipo().equals(TipoProduto.SERVICO.getValor());
783
        }
784
 
785
        @Transient
786
        public Boolean verificarSeCodigoEhIgual(String codigoProduto) {
787
                if (codigoProduto.length() > 6 && VerificadorUtil.naoEstaNuloOuVazio(this.getCodigoEAN())) {
788
                        if (this.getCodigoEAN().equals(codigoProduto)) {
789
                                return true;
790
                        }
791
                }
792
                if (CodigoBarraEAN.validarCodigoBarras(codigoProduto)) {
793
                        return this.getCodigoProdutoPadrao().equals(CodigoBarraEAN.retornarCodigoDoCodigoBarras(codigoProduto));
794
                } else {
795
                        return this.getCodigoProdutoPadrao().equals(UtilBean.padraoCodigoProduto(codigoProduto));
796
                }
797
        }
798
 
799
        @Transient
800
        public String getCodigoNCMDaTributacao() {
801
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoNCM() : null;
802
        }
803
 
804
        @Transient
805
        public String getCodigoESTDaTributacao() {
806
                return VerificadorUtil.naoEstaNulo(getTributacao())? getTributacao().getCodigoEST() : null;
807
        }
808
 
809
        @Override
810
        public Produto clone() throws CloneNotSupportedException {
811
                return (Produto) super.clone();
812
        }
813
 
814
        @Transient
815
        public String corDaDescricaoPeloGenero() {
816
                if (VerificadorUtil.naoEstaNulo(getGenero())) {
817
                        if (getGenero().equals(TipoGenero.MASCULINO.getValor())) return "#1c82df";
818
                        if (getGenero().equals(TipoGenero.FEMININO.getValor())) return "#f06364";
819
                }
820
                return "black";
821
        }
822
 
823
        @Transient
824
        public Boolean getProdutoEmPromocao() {
825
                if (VerificadorUtil.naoEstaNulo(getValorVarejoPromocional())) {
826
                        return getValorVarejoPromocional() > 0.00;
827
                }
828
                return false;
829
        }
830
 
831
        @Transient
832
        public void prepararDadosParaDuplicacao(Produto produto) {
833
                this.modelo = produto.getModelo();
834
                this.tributacao = produto.getTributacao();
835
                this.descricao = produto.getDescricao();
836
                this.tipo = produto.getTipo();
837
                this.estilo = produto.getEstilo();
838
                this.genero = produto.getGenero();
839
                this.cor = produto.getCor();
840
                this.observacao = produto.getObservacao();
841
                this.valorCompra = produto.getValorCompra();
842
                this.valorVarejo = produto.getValorVarejo();
843
                this.valorVarejoPromocional = produto.getValorVarejoPromocional();
844
                this.valorVarejoMaximo = produto.getValorVarejoMaximo();
845
                this.indicadorComissionado = produto.getIndicadorComissionado();
846
                this.indicadorEmissaoNotaFiscal = produto.getIndicadorEmissaoNotaFiscal();
847
                this.codigoNCM = produto.getCodigoNCM();
848
                this.codigoEST = produto.getCodigoEST();
849
                this.setAtivo(true);
850
        }
851
 
852
}