Subversion Repositories Integrator Subversion

Rev

Rev 320 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
197 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
 
8
import javax.persistence.Column;
9
import javax.persistence.Entity;
10
import javax.persistence.GeneratedValue;
11
import javax.persistence.GenerationType;
12
import javax.persistence.Id;
13
import javax.persistence.JoinColumn;
14
import javax.persistence.ManyToOne;
15
import javax.persistence.SequenceGenerator;
16
import javax.persistence.Table;
17
import javax.persistence.Transient;
18
import javax.validation.constraints.Size;
19
 
20
import org.hibernate.annotations.ForeignKey;
21
 
22
import br.com.ec.core.util.StringUtil;
23
import br.com.ec.core.util.VerificadorUtil;
305 espaco 24
import br.com.ec.domain.model.tipos.TipoPersonalizacao;
727 blopes 25
import br.com.ec.domain.model.tipos.TipoProduto;
197 espaco 26
import br.com.ec.domain.shared.ConstantesSEC;
27
 
28
@Entity
29
@Table(name="sec_lancamento", schema="sc_sec")
30
public class Lancamento implements Serializable, Cloneable {
31
 
32
        private static final long serialVersionUID = 1L;
33
 
34
        private Long sequencial;
35
        private Venda venda;
36
        private Produto produto;
37
        private Double valorCompra;
38
        private Double valorVarejo;
39
        private Double valorVenda;
40
        private String observacao;
41
        private String observacaoNotaFiscal;
42
        private Date dataValidacaoVivo;
43
        private Date dataBaixaVivo;
44
        private Double valorRecebidoVivo;
45
        private Date dataRecebidoVivo;
305 espaco 46
        private String tipoPersonalizacao;
47
        private Estampa estampa;
197 espaco 48
        private Boolean ativo;
49
 
50
        private Cupom cupom;
51
 
52
        private Integer quantidadeLancamento = 1;
53
        private String observacaoIMEI1;
54
        private String observacaoIMEI2;
55
 
56
        private String observacaoRestaurante = "COMPLETO";
57
        private String opcaoRestaurante = "";
58
        private List<String> opcoesRestaurante = new ArrayList<String>();
59
 
60
        @Id
61
        @SequenceGenerator(name = "sq_lancamento")
62
        @GeneratedValue(strategy = GenerationType.IDENTITY)
63
        @Column(name="seq_lancamento", nullable=false)
64
        public Long getSequencial() {
65
                return sequencial;
66
        }
67
        public void setSequencial(Long sequencial) {
68
                this.sequencial = sequencial;
69
        }
70
 
71
        @ManyToOne
72
        @ForeignKey(name = "fk_lancamento_venda")
73
        @JoinColumn(name="seq_venda", referencedColumnName="seq_venda", insertable=true, updatable=false)
74
        public Venda getVenda() {
75
                return venda;
76
        }
77
        public void setVenda(Venda venda) {
78
                this.venda = venda;
79
        }
80
 
81
        @ManyToOne
82
        @ForeignKey(name = "fk_lancamento_produto")
83
        @JoinColumn(name="seq_produto", referencedColumnName="seq_produto", insertable=true, updatable=false)
84
        public Produto getProduto() {
85
                return produto;
86
        }
87
        public void setProduto(Produto produto) {
88
                this.produto = produto;
89
        }
90
 
91
        @Column(name="val_compra")
92
        public Double getValorCompra() {
93
                return valorCompra;
94
        }
95
        public void setValorCompra(Double valorCompra) {
96
                this.valorCompra = valorCompra;
97
        }
98
 
99
        @Column(name="val_varejo")
100
        public Double getValorVarejo() {
101
                return valorVarejo;
102
        }
103
        public void setValorVarejo(Double valorVarejo) {
104
                this.valorVarejo = valorVarejo;
105
        }
106
 
107
        @Column(name="val_venda")
108
        public Double getValorVenda() {
109
                return valorVenda;
110
        }
111
        public void setValorVenda(Double valorVenda) {
112
                this.valorVenda = valorVenda;
113
        }
114
 
115
        @Column(name="dsc_observacao")
116
        @Size(max = 1000, message = "Limite de caracteres ultrapassado: Observação")
117
        public String getObservacao() {
118
                return observacao;
119
        }
120
        public void setObservacao(String observacao) {
121
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
122
        }
123
 
124
        @Column(name="dsc_observacao_notafiscal")
125
        @Size(max = 200, message = "Limite de caracteres ultrapassado: Observação da Nota Fiscal")
126
        public String getObservacaoNotaFiscal() {
127
                return observacaoNotaFiscal;
128
        }
129
        public void setObservacaoNotaFiscal(String observacaoNotaFiscal) {
130
                this.observacaoNotaFiscal = StringUtil.setarUpperCaseComTrim(observacaoNotaFiscal);
131
        }
132
 
133
        @Column(name="dat_validacao_vivo")
134
        public Date getDataValidacaoVivo() {
135
                return dataValidacaoVivo;
136
        }
137
        public void setDataValidacaoVivo(Date dataValidacaoVivo) {
138
                this.dataValidacaoVivo = dataValidacaoVivo;
139
        }
140
 
141
        @Column(name="dat_baixa_vivo")
142
        public Date getDataBaixaVivo() {
143
                return dataBaixaVivo;
144
        }
145
        public void setDataBaixaVivo(Date dataBaixaVivo) {
146
                this.dataBaixaVivo = dataBaixaVivo;
147
        }
148
 
149
        @Column(name="val_recebido_vivo")
150
        public Double getValorRecebidoVivo() {
151
                return valorRecebidoVivo;
152
        }
153
        public void setValorRecebidoVivo(Double valorRecebidoVivo) {
154
                this.valorRecebidoVivo = valorRecebidoVivo;
155
        }
156
 
157
        @Column(name="dat_recebido_vivo")
158
        public Date getDataRecebidoVivo() {
159
                return dataRecebidoVivo;
160
        }
161
        public void setDataRecebidoVivo(Date dataRecebidoVivo) {
162
                this.dataRecebidoVivo = dataRecebidoVivo;
163
        }
305 espaco 164
 
165
        @Column(name="tip_personalizacao")
166
        public String getTipoPersonalizacao() {
167
                return tipoPersonalizacao;
168
        }
169
        public void setTipoPersonalizacao(String tipoPersonalizacao) {
170
                this.tipoPersonalizacao = tipoPersonalizacao;
171
        }
172
        @Transient
173
        public String getDescricaoTipoPersonalizacao() {
174
                return VerificadorUtil.naoEstaNulo(getTipoPersonalizacao())? TipoPersonalizacao.parse(getTipoPersonalizacao()).getDescricao() : null;
175
        }
176
 
177
        @ManyToOne
178
        @ForeignKey(name = "fk_lancamento_estampa")
179
        @JoinColumn(name="seq_estampa", referencedColumnName="seq_estampa", insertable=true, updatable=false)
180
        public Estampa getEstampa() {
181
                return estampa;
182
        }
183
        public void setEstampa(Estampa estampa) {
184
                this.estampa = estampa;
185
        }
197 espaco 186
 
187
        @Column(name="ind_ativo", nullable=false)
188
        public Boolean getAtivo() {
189
                return ativo;
190
        }
191
        public void setAtivo(Boolean ativo) {
192
                this.ativo = ativo;
193
        }
194
 
195
        @ManyToOne
196
        @ForeignKey(name="fk_lancamento_cupom")
197
        @JoinColumn(name = "seq_cupom", nullable=true)
198
        public Cupom getCupom() {
199
                return cupom;
200
        }
201
        public void setCupom(Cupom cupom) {
202
                this.cupom = cupom;
203
        }
204
 
205
        @Transient
206
        public Integer getQuantidadeLancamento() {
207
                return quantidadeLancamento;
208
        }
209
        public void setQuantidadeLancamento(Integer quantidadeLancamento) {
210
                this.quantidadeLancamento = quantidadeLancamento;
211
        }
212
 
213
        @Transient
214
        public String getObservacaoIMEI1() {
215
                return observacaoIMEI1;
216
        }
217
        public void setObservacaoIMEI1(String observacaoIMEI1) {
218
                this.observacaoIMEI1 = observacaoIMEI1;
219
        }
220
 
221
        @Transient
222
        public String getObservacaoIMEI2() {
223
                return observacaoIMEI2;
224
        }
225
        public void setObservacaoIMEI2(String observacaoIMEI2) {
226
                this.observacaoIMEI2 = observacaoIMEI2;
227
        }
228
 
229
        @Transient
230
        public String getObservacaoRestaurante() {
231
                return observacaoRestaurante;
232
        }
233
        public void setObservacaoRestaurante(String observacaoRestaurante) {
234
                this.observacaoRestaurante = observacaoRestaurante;
235
        }
236
 
237
        @Transient
238
        public String getOpcaoRestaurante() {
239
                return opcaoRestaurante;
240
        }
241
        public void setOpcaoRestaurante(String opcaoRestaurante) {
242
                this.opcaoRestaurante = opcaoRestaurante;
243
        }
244
 
245
        @Transient
246
        public List<String> getOpcoesRestaurante() {
247
                return opcoesRestaurante;
248
        }
249
        public void setOpcoesRestaurante(List<String> opcoesRestaurante) {
250
                this.opcoesRestaurante = opcoesRestaurante;
251
        }
252
 
253
        @Override
254
        public int hashCode() {
255
                final int prime = 31;
256
                int result = 1;
257
                result = prime * result
258
                                + ((sequencial == null) ? 0 : sequencial.hashCode());
259
                return result;
260
        }
261
 
262
        @Override
263
        public boolean equals(Object obj) {
264
                if (this == obj)
265
                        return true;
266
                if (obj == null)
267
                        return false;
268
                if (getClass() != obj.getClass())
269
                        return false;
270
                Lancamento other = (Lancamento) obj;
271
                if (sequencial == null) {
272
                        if (other.sequencial != null) {
273
                                return false;
274
                        } else {return false;}
275
                } else if (!sequencial.equals(other.sequencial))
276
                        return false;
277
                return true;
278
        }
279
 
280
        @Override
281
        public Lancamento clone() throws CloneNotSupportedException {
282
                return (Lancamento) super.clone();
283
        }
284
 
285
        @Transient
286
        public void preencher(Produto produtoSelecionado) {
287
                this.setProduto(produtoSelecionado);
288
                this.setValorCompra(produtoSelecionado.getValorCompra());
289
                if (produtoSelecionado.getProdutoEmPromocao()) {
290
                        this.setValorVarejo(produtoSelecionado.getValorVarejoPromocional());
291
                        this.setValorVenda(produtoSelecionado.getValorVarejoPromocional());
292
                } else {
293
                        this.setValorVarejo(produtoSelecionado.getValorVarejo());
294
                        this.setValorVenda(produtoSelecionado.getValorVarejo());
295
                }
296
        }
297
 
298
        @Transient
299
        public void preencherComPrecoPopular(Produto produtoSelecionado) {
300
                this.setProduto(produtoSelecionado);
301
                this.setValorCompra(produtoSelecionado.getValorCompra());
302
                this.setValorVarejo(produtoSelecionado.getValorVarejoPopular());
303
                this.setValorVenda(produtoSelecionado.getValorVarejoPopular());
304
        }
305
 
306
        @Transient
307
        public void preencherComPrecoAtacado(Produto produtoSelecionado) {
308
                this.setProduto(produtoSelecionado);
309
                this.setValorCompra(produtoSelecionado.getValorCompra());
310
                this.setValorVarejo(produtoSelecionado.getValorAtacado());
311
                this.setValorVenda(produtoSelecionado.getValorAtacado());
312
        }
313
 
314
        @Transient
315
        public String tipoDoProduto() {
316
                return VerificadorUtil.naoEstaNulo(this.getProduto()) ? this.getProduto().getTipo() : "";
317
        }
318
 
319
        @Transient
320
        public Double valorDescontos() {
321
                if (VerificadorUtil.estaNulo(getValorVarejo())) {
322
                        return getValorVenda();
323
                }
324
                return getValorVarejo() - getValorVenda();
325
        }
326
 
327
        @Transient
328
        public String valorPercentualDescontos() {
329
                if (VerificadorUtil.estaNulo(getValorVarejo())) {
330
                        return "0%";
331
                }
332
                return StringUtil.formatarPercentual((getValorVarejo() - getValorVenda()) / getValorVarejo());
333
        }
334
 
335
        @Transient
336
        public Boolean comDescontos() {
337
                if (VerificadorUtil.naoEstaNulo(getValorVarejo()) && VerificadorUtil.naoEstaNulo(getValorVenda())) {
338
                        return getValorVarejo() > getValorVenda();
339
                }
340
                return false;
341
        }
342
 
343
        @Transient
320 espaco 344
        @Deprecated
197 espaco 345
        public Boolean comDescontosAcimaDoPermitido() {
346
                if (VerificadorUtil.naoEstaNulo(getValorVarejo()) && VerificadorUtil.naoEstaNulo(getValorVenda())) {
347
                        if (getProduto().getValorVarejo() < 100) {
348
                                Double valorDesconto = getValorVarejo() - getValorVenda();
349
                                return valorDesconto > ConstantesSEC.Venda.LIMITE_DESCONTO_ABAIXO_100;
350
                        } else {
351
                                Double percentualDesconto = 100 - (getValorVenda()*100/getValorVarejo());
352
                                return percentualDesconto > ConstantesSEC.Venda.LIMITE_PERCENTUAL_DESCONTO_ACIMA_100;
353
                        }
354
                }
355
                return false;
356
        }
357
 
358
        @Transient
359
        public String getDescricaoNotaFiscal() {
360
                StringBuilder descricaoCompleta = new StringBuilder();
361
                descricaoCompleta.append(this.getProduto().getDescricaoNotaFiscal(this.getObservacaoNotaFiscal()));
362
                return descricaoCompleta.toString().trim();
363
        }
364
 
365
        @Transient
366
        public String getDescricaoComanda() {
367
                StringBuilder descricaoCompleta = new StringBuilder();
368
                descricaoCompleta.append(this.getProduto().getDescricaoNotaFiscal(this.getObservacao()));
369
                return descricaoCompleta.toString().trim();
370
        }
371
 
372
        @Transient
373
        public Long getSequencialDoCupom() {
374
                return VerificadorUtil.naoEstaNulo(getCupom())? getCupom().getSequencial() : null;
375
        }
376
 
727 blopes 377
        @Transient
378
        public Double valorCashbackGerado() {
379
                Double valorCashback = new Double(0.0);
380
                if (VerificadorUtil.naoEstaNulo(getValorVenda()) && VerificadorUtil.naoEstaNulo(getValorVarejo())) {
381
                        if (VerificadorUtil.estaNulo(getCupom()) && getValorVenda() >= getValorVarejo()) {
382
                                valorCashback = valorCashback + getValorVenda()/100 * TipoProduto.parse(getProduto().getTipo()).getPercentualCashback();
383
                        }
384
                }
385
                return valorCashback;
386
        }
387
 
197 espaco 388
}