Subversion Repositories Integrator Subversion

Rev

Rev 382 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
259 espaco 1
package br.com.ec.domain.model;
2
 
3
import java.io.Serializable;
4
import java.util.Date;
5
 
6
import javax.persistence.Column;
7
import javax.persistence.Entity;
8
import javax.persistence.GeneratedValue;
9
import javax.persistence.GenerationType;
10
import javax.persistence.Id;
11
import javax.persistence.JoinColumn;
12
import javax.persistence.ManyToOne;
13
import javax.persistence.SequenceGenerator;
14
import javax.persistence.Table;
15
import javax.persistence.Transient;
16
import javax.validation.constraints.NotNull;
17
import javax.validation.constraints.Size;
18
 
19
import org.hibernate.annotations.ForeignKey;
20
 
21
import br.com.ec.core.generic.identidade.Identidade;
22
import br.com.ec.core.interfaces.Alterar;
23
import br.com.ec.core.interfaces.Cadastrar;
24
import br.com.ec.core.util.DataUtils;
25
import br.com.ec.core.util.StringUtil;
26
import br.com.ec.core.util.VerificadorUtil;
439 espaco 27
import br.com.ec.domain.model.tipos.TipoFrequencia;
259 espaco 28
 
29
@Entity
30
@Table(name="sec_parcela", schema="sc_sec")
31
public class Parcela implements Serializable, Identidade, Cloneable {
32
 
33
        private static final long serialVersionUID = 1L;
34
 
35
        private Long sequencial;
36
        private Conta conta;
37
        private ContaBancaria contaBancaria;
296 espaco 38
        private FormaPagamento formaPagamento;
259 espaco 39
        private Date dataEmissao;
40
        private Date dataVencimento;
41
        private Date dataPagamento;
42
        private Double valor;
43
        private String observacao;
44
        private Boolean indicadorOficial;
45
        private Boolean indicadorAtivo;
382 espaco 46
        private Boolean indicadorConciliado;
259 espaco 47
 
48
        private Boolean possuiLancamento = false;
49
 
50
        public Parcela() {}
51
 
439 espaco 52
        public Parcela(Long sequencial) {
53
                this.sequencial = sequencial;
54
        }
55
 
259 espaco 56
        public Parcela(Conta conta, ContaBancaria contaBancaria, Date dataEmissao,
57
                        Date dataVencimento, Date dataPagamento, Double valor, String observacao, Boolean indicadorAtivo) {
58
                this.conta = conta;
59
                this.contaBancaria = contaBancaria;
60
                this.dataEmissao = dataEmissao;
61
                this.dataVencimento = dataVencimento;
62
                this.dataPagamento = dataPagamento;
63
                this.valor = valor;
64
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
65
                this.indicadorAtivo = indicadorAtivo;
66
        }
67
 
439 espaco 68
        public Parcela(Conta conta, ContaBancaria contaBancaria, FormaPagamento formaPagamento, Date dataEmissao,
69
                        Date dataVencimento, Date dataPagamento, Double valor, String observacao, Boolean indicadorOficial,
70
                        Boolean indicadorAtivo, Boolean indicadorConciliado) {
71
                super();
72
                this.conta = conta;
73
                this.contaBancaria = contaBancaria;
74
                this.formaPagamento = formaPagamento;
75
                this.dataEmissao = dataEmissao;
76
                this.dataVencimento = dataVencimento;
77
                this.dataPagamento = dataPagamento;
78
                this.valor = valor;
79
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
80
                this.indicadorOficial = indicadorOficial;
81
                this.indicadorAtivo = indicadorAtivo;
82
                this.indicadorConciliado = indicadorConciliado;
83
        }
84
 
85
        public Parcela(Parcela parcela) {
86
                super();
87
                this.conta = parcela.getConta();
88
                this.contaBancaria = parcela.getContaBancaria();
89
                this.formaPagamento = parcela.getFormaPagamento();
90
                this.dataEmissao = parcela.getDataEmissao();
91
                this.dataVencimento = parcela.getDataVencimento();
92
                this.dataPagamento = parcela.getDataPagamento();
93
                this.valor = parcela.getValor();
94
                this.observacao = StringUtil.setarUpperCaseComTrim(parcela.getObservacao());
95
                this.indicadorOficial = parcela.getIndicadorOficial();
96
                this.indicadorAtivo = parcela.getIndicadorAtivo();
97
                this.indicadorConciliado = parcela.getIndicadorConciliado();
98
        }
99
 
259 espaco 100
        @Override
101
        @Transient
102
        public Object getId() {
103
                return this.getSequencial();
104
        }
105
        @Override
106
        public void setId(Object id) {
107
                this.sequencial = (Long) id;
108
        }
109
 
110
        @Id
111
        @SequenceGenerator(name = "sq_parcela")
112
        @GeneratedValue(strategy = GenerationType.IDENTITY)
113
        @Column(name="seq_parcela", nullable=false)
114
        public Long getSequencial() {
115
                return sequencial;
116
        }
117
        public void setSequencial(Long sequencial) {
118
                this.sequencial = sequencial;
119
        }
120
 
121
        @ManyToOne
122
        @ForeignKey(name="fk_parcela_conta")
123
        @JoinColumn(name="seq_conta")
124
        public Conta getConta() {
125
                return conta;
126
        }
127
        public void setConta(Conta conta) {
128
                this.conta = conta;
129
        }
130
 
131
        @ManyToOne
132
        @ForeignKey(name="fk_parcela_contabancaria")
133
        @JoinColumn(name="cod_conta_bancaria")
134
        public ContaBancaria getContaBancaria() {
135
                return contaBancaria;
136
        }
137
        public void setContaBancaria(ContaBancaria contaBancaria) {
138
                this.contaBancaria = contaBancaria;
139
        }
140
 
296 espaco 141
        @ManyToOne
142
        @ForeignKey(name="fk_parcela_formapagamento")
143
        @JoinColumn(name="cod_formapagament")
144
        public FormaPagamento getFormaPagamento() {
145
                return formaPagamento;
146
        }
147
        public void setFormaPagamento(FormaPagamento formaPagamento) {
148
                this.formaPagamento = formaPagamento;
149
        }
150
 
259 espaco 151
        @Column(name="dth_emissao", nullable=false)
152
        public Date getDataEmissao() {
153
                return dataEmissao;
154
        }
155
        public void setDataEmissao(Date dataEmissao) {
156
                this.dataEmissao = dataEmissao;
157
        }
158
 
159
        @Column(name="dat_vencimento", nullable=true)
160
        public Date getDataVencimento() {
161
                return dataVencimento;
162
        }
163
        public void setDataVencimento(Date dataVencimento) {
164
                this.dataVencimento = dataVencimento;
165
        }
166
 
167
        @Column(name="dat_pagamento", nullable=true)
168
        public Date getDataPagamento() {
169
                return dataPagamento;
170
        }
171
        public void setDataPagamento(Date dataPagamento) {
172
                this.dataPagamento = dataPagamento;
173
        }
174
 
175
        @Column(name="val_valor", nullable=true)
176
        @NotNull(message = "Parâmetro obrigatório não preenchido: Valor da parcela", groups = {Cadastrar.class, Alterar.class})
177
        public Double getValor() {
178
                return valor;
179
        }
180
        public void setValor(Double valor) {
181
                this.valor = valor;
182
        }
183
 
184
        @Column(name="dsc_observacao")
185
        @Size(max = 400, message = "Limite de caracteres ultrapassado: Observação")
186
        public String getObservacao() {
187
                return observacao;
188
        }
189
        public void setObservacao(String observacao) {
190
                this.observacao = StringUtil.setarUpperCaseComTrim(observacao);
191
        }
192
 
193
        @Column(name="ind_oficial")
194
        public Boolean getIndicadorOficial() {
195
                return indicadorOficial;
196
        }
197
        public void setIndicadorOficial(Boolean indicadorOficial) {
198
                this.indicadorOficial = indicadorOficial;
199
        }
200
 
201
        @Column(name="ind_ativo", nullable=false)
202
        public Boolean getIndicadorAtivo() {
203
                return indicadorAtivo;
204
        }
205
        public void setIndicadorAtivo(Boolean indicadorAtivo) {
206
                this.indicadorAtivo = indicadorAtivo;
207
        }
377 espaco 208
 
209
        @Column(name="ind_conciliado", nullable=false)
210
        public Boolean getIndicadorConciliado() {
211
                return indicadorConciliado;
212
        }
213
        public void setIndicadorConciliado(Boolean indicadorConciliado) {
214
                this.indicadorConciliado = indicadorConciliado;
215
        }
382 espaco 216
 
259 espaco 217
        @Transient
218
        public Boolean getPossuiLancamento() {
219
                return possuiLancamento;
220
        }
221
        public void setPossuiLancamento(Boolean possuiLancamento) {
222
                this.possuiLancamento = possuiLancamento;
223
        }
224
 
225
        @Override
226
        public int hashCode() {
227
                final int prime = 31;
228
                int result = 1;
229
                result = prime * result
230
                                + ((sequencial == null) ? 0 : sequencial.hashCode());
231
                return result;
232
        }
233
 
234
        @Override
235
        public boolean equals(Object obj) {
236
                if (this == obj)
237
                        return true;
238
                if (obj == null)
239
                        return false;
240
                if (getClass() != obj.getClass())
241
                        return false;
242
                Parcela other = (Parcela) obj;
243
                if (sequencial == null) {
244
                        if (other.sequencial != null)
245
                                return false;
246
                } else if (!sequencial.equals(other.sequencial))
247
                        return false;
248
                return true;
249
        }
250
 
251
        @Transient
252
        public Boolean parcelaAVencerAlemDeTresDias() {
253
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(getDataVencimento(), DataUtils.getDataAtual()) > 3 ? true : false;
254
        }
255
 
256
        @Transient
257
        public Boolean parcelaAVencerAteTresDias() {
258
                return DataUtils.calcularDiferenceEmDiasEntreDuasDatas(getDataVencimento(), DataUtils.getDataAtual()) < 3 &&
259
                                DataUtils.calcularDiferenceEmDiasEntreDuasDatas(getDataVencimento(), DataUtils.getDataAtual()) >= 0? true : false;
260
        }
261
 
262
        @Transient
263
        public Boolean parcelaVencida() {
264
                if (VerificadorUtil.naoEstaNulo(getDataVencimento())) {
265
                        Date dataVerificar = DataUtils.acrescentarDias(DataUtils.getDataAtual(), -1);
266
                        return getDataVencimento().before(DataUtils.getDataComHorarioMaximo(dataVerificar));
267
                }
268
                return false;
269
        }
270
 
271
        @Transient
272
        public Boolean parcelaAhReceber() {
273
                return VerificadorUtil.naoEstaNulo(getConta())? getConta().ehContaAReceber() : false;
274
        }
275
 
276
        @Transient
277
        public Boolean parcelaAhPagar() {
278
                return VerificadorUtil.naoEstaNulo(getConta())? getConta().ehContaAPagar() : false;
279
        }
280
 
281
        @Transient
282
        public String corParcela() {
283
                return parcelaAhPagar()? "red" : "green";
284
        }
285
 
286
        @Transient
287
        public String descricaoDaLoja() {
288
                return VerificadorUtil.naoEstaNulo(getConta())? VerificadorUtil.naoEstaNulo(getConta().getLoja())? getConta().getLoja().getDescricao() : "" : "";
289
        }
290
 
291
        @Transient
292
        public Boolean formaDePagamentoEhDebito() {
293
                return VerificadorUtil.naoEstaNulo(getConta())? getConta().formaDePagamentoEhDebito() : false;
294
        }
295
 
296
        @Transient
297
        public Boolean formaDePagamentoEhCredito() {
298
                return VerificadorUtil.naoEstaNulo(getConta())? getConta().formaDePagamentoEhCredito() : false;
299
        }
300
 
301
        @Transient
302
        public String getDescricaoDaCategoria() {
303
                return VerificadorUtil.naoEstaNulo(getConta())? VerificadorUtil.naoEstaNulo(getConta().getCategoria())? getConta().getCategoria().getDescricao(): null: null;
304
        }
305
 
306
        @Transient
307
        public String getTipoDaCategoria() {
308
                return VerificadorUtil.naoEstaNulo(getConta())? VerificadorUtil.naoEstaNulo(getConta().getCategoria())? "(" + getConta().getCategoria().getTipo() + ")": null: null;
309
        }
310
 
311
        @Override
312
        public Parcela clone() throws CloneNotSupportedException {
313
                return (Parcela) super.clone();
314
        }
439 espaco 315
 
316
        public void provisionarNovaDataVencimentoPelaFrequencia() {
317
                if (getConta().getTipoFrequencia().equals(TipoFrequencia.DIARIAMENTE.getValor())) {
318
                        setDataVencimento(DataUtils.acrescentarDias(getDataVencimento(), 1));
319
                }
320
                if (getConta().getTipoFrequencia().equals(TipoFrequencia.SEMANAL.getValor())) {
321
                        setDataVencimento(DataUtils.acrescentarDias(getDataVencimento(), 7));
322
                }
323
                if (getConta().getTipoFrequencia().equals(TipoFrequencia.MENSAL.getValor())) {
324
                        setDataVencimento(DataUtils.acrescentarMeses(getDataVencimento(), 1));
325
                }
326
                if (getConta().getTipoFrequencia().equals(TipoFrequencia.ANUAL.getValor())) {
327
                        setDataVencimento(DataUtils.acrescentarAnos(getDataVencimento(), 1));
328
                }
329
        }
259 espaco 330
 
331
}