Subversion Repositories Integrator Subversion

Rev

Rev 274 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
259 espaco 1
package br.com.ec.domain.service.impl;
2
 
3
import org.springframework.beans.factory.annotation.Autowired;
4
import org.springframework.stereotype.Service;
5
 
6
import br.com.ec.core.exception.NegocioException;
7
import br.com.ec.core.generic.AbstractService;
8
import br.com.ec.core.generic.GenericRepository;
9
import br.com.ec.core.util.VerificadorUtil;
10
import br.com.ec.core.validador.Validador;
11
import br.com.ec.domain.model.Conta;
12
import br.com.ec.domain.model.Parcela;
13
import br.com.ec.domain.service.ParcelaService;
14
import br.com.ec.repository.ParcelaRepository;
15
 
16
@Service
17
public class ParcelaServiceImpl extends AbstractService<Parcela> implements ParcelaService {
18
 
19
        private ParcelaRepository parcelaRepository;
20
/*
21
        private TaxaService taxaService;
22
        private ContaService contaService;
23
        private CategoriaService categoriaService;
24
        private ContaFormaPagamentoService contaFormaPagamentoService;
25
        private VendaFormaPagamentoService vendaFormaPagamentoService;
26
        private VigenciaService vigenciaService;
27
        */
28
        @Autowired
29
        public ParcelaServiceImpl(Validador validador, ParcelaRepository parcelaRepository/*, TaxaService taxaService,
30
                        ContaService contaService, CategoriaService categoriaService, ContaFormaPagamentoService contaFormaPagamentoService,
31
                        VendaFormaPagamentoService vendaFormaPagamentoService, VigenciaService vigenciaService*/) {
32
                super(validador);
33
                this.parcelaRepository = parcelaRepository;
34
                /*
35
                this.taxaService = taxaService;
36
                this.contaService = contaService;
37
                this.contaFormaPagamentoService = contaFormaPagamentoService;
38
                this.vendaFormaPagamentoService = vendaFormaPagamentoService;
39
                this.categoriaService = categoriaService;
40
                this.vigenciaService = vigenciaService;
41
                */
42
        }
43
 
44
        @Override
45
        protected GenericRepository<Parcela> getRepository() {
46
                return this.parcelaRepository;
47
        }
48
 
49
        /************************************/
50
 
51
 
52
 
53
        /*
54
        @Override
55
        protected void regrasNegocioCadastrar(Parcela parcela) {
56
                verificarParcela(parcela);
57
        }
58
 
59
        @Override
60
        protected void regrasNegocioAlterar(Parcela parcela) {
61
                verificarParcela(parcela);
62
        }
63
 
64
        private void verificarParcela(Parcela parcela) {
65
                if (VerificadorUtil.estaNulo(parcela.getDataVencimento()) && VerificadorUtil.estaNulo(parcela.getDataPagamento())) {
66
                        throw new NegocioException("INFORME A DATA DE VENCIMENTO OU A DATA DE PAGAMENTO");
67
                }
68
                cadastrarContaCasoNaoTenhaSidoCadastrada(parcela.getConta());
69
        }
70
 
71
        private Conta cadastrarContaCasoNaoTenhaSidoCadastrada(Conta conta) {
72
                if (VerificadorUtil.naoEstaNulo(conta)) {
73
                        if (VerificadorUtil.estaNulo(conta.getSequencial())) {
74
                                contaService.cadastrar(conta);
75
                        }
76
                }
77
        return conta;
78
        }
79
 
80
        @Override
81
        public void cancelarParcela(Parcela parcela) {
82
                parcela.setIndicadorAtivo(false);
83
                this.alterar(parcela);
84
                cancelarContaSemParcelaAtiva(parcela);
85
        }
86
 
87
        private void cancelarContaSemParcelaAtiva(Parcela parcela) {
88
                Parcela parcelaAtiva = new Parcela();
89
                parcelaAtiva.setIndicadorAtivo(true);
90
                parcelaAtiva.setConta(parcela.getConta());
91
                if (this.obterQuantidadeDeRegistrosPassandoEntidade(parcelaAtiva) == 0) {
92
                        if (VerificadorUtil.naoEstaNulo(parcela.getConta())) {
93
                                parcela.getConta().setIndicadorAtivo(false);
94
                                contaService.alterar(parcela.getConta());
95
                        }
96
                }
97
        }
98
 
99
        @Override
100
        public void receberParcelas(Date dataRecebimento, List<Parcela> parcelasSelecionadas) {
101
                if (VerificadorUtil.estaNulo(dataRecebimento)) {
102
                        throw new NegocioException("INFORME A DATA DO RECEBIMENTO");
103
                }
104
                for (Parcela parcela : parcelasSelecionadas) {
105
                        parcela.setDataPagamento(dataRecebimento);
106
                        this.alterar(parcela);
107
                }
108
        }
109
 
110
        @Override
111
        public void lancarParcela(Parcela parcela) {
112
                verificarParametros(parcela);
113
                parcela.getConta().setObservacao(parcela.getObservacao());
114
                contaService.cadastrar(parcela.getConta());
115
 
116
                parcela.setDataEmissao(DataUtils.getDataAtual());
117
                parcela.setIndicadorAtivo(true);
118
                this.cadastrar(parcela);
119
        }
120
 
121
        private void verificarParametros(Parcela parcela) {
122
                if (VerificadorUtil.estaNulo(parcela.getContaBancaria())) {
123
                        throw new NegocioException("INFORME A CONTA");
124
                }
125
                if (VerificadorUtil.estaNulo(parcela.getDataPagamento())) {
126
                        throw new NegocioException("INFORME A DATA DO PAGAMENTO");
127
                }
128
                if (VerificadorUtil.estaNulo(parcela.getValor())) {
129
                        throw new NegocioException("INFORME O VALOR DO PAGAMETNO");
130
                }
131
        }
132
 
133
        @Override
134
        public List<Parcela> consultarParcelas(ParametrosConsultaLancamentosDTO parcelaConsulta) {
135
                return parcelaRepository.consultarParcelas(parcelaConsulta);
136
        }
137
 
138
        @Override
139
        public List<Parcela> consultarParcelasAVencer(Conta conta) {
140
                return parcelaRepository.consultarParcelasAVencer(conta);
141
        }
142
 
143
        @Override
144
        public List<Parcela> consultarParcelasAReceber(Date dataRecebimento, TipoCartao tipoCartao) {
145
                return parcelaRepository.consultarParcelasAReceber(dataRecebimento, tipoCartao);
146
        }
147
 
148
        @Override
149
        public List<Parcela> consultarParcelasRecebidas(Date dataRecebimento, TipoCartao tipoCartao) {
150
                return parcelaRepository.consultarParcelasRecebidas(dataRecebimento, tipoCartao);
151
        }
152
 
153
        @Override
154
        public List<Parcela> consultarParcelasDaVenda(Long sequencialVenda) {
155
                return parcelaRepository.consultarParcelasDaVenda(sequencialVenda);
156
        }
157
 
158
        @Override
159
        public Conta gerarParcelas(VendaFormaPagamento vendaFormaPagamento, Conta conta) {
160
                Taxa taxa = consultarTaxa(vendaFormaPagamento);
161
                Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
162
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDebito()) {return criarParcelaDebito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
163
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCredito()) {return criarParcelaCredito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
164
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {return criarParcelaPagseguro(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
165
                return conta;
166
        }
167
 
168
        private Conta criarParcelaDebito(Double valorParcelaCalculado, ContaBancaria contaBancaria, VendaFormaPagamento vendaFormaPagamento, Conta conta) {
169
                Date dataDebito = DataUtils.acrescentarDiasResultadoDiaUtil(vendaFormaPagamento.getVenda().getDataVenda(), 1);
170
                cadastrarParcelas(vendaFormaPagamento, contaBancaria, dataDebito, valorParcelaCalculado, conta, "DÉBITO");
171
                return conta;
172
        }
173
 
174
        private Conta criarParcelaCredito(Double valorParcelaCalculado, ContaBancaria contaBancaria, VendaFormaPagamento vendaFormaPagamento, Conta contaAReceber) {
175
                Integer quantidadeVezes = 0;
176
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh1x()) {quantidadeVezes = 1;}
177
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh2x()) {quantidadeVezes = 2;}
178
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh3x()) {quantidadeVezes = 3;}
179
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh4x()) {quantidadeVezes = 4;}
180
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh5x()) {quantidadeVezes = 5;}
181
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh6x()) {quantidadeVezes = 6;}
182
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh7x()) {quantidadeVezes = 7;}
183
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh8x()) {quantidadeVezes = 8;}
184
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh9x()) {quantidadeVezes = 9;}
185
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh10x()) {quantidadeVezes = 10;}
186
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh11x()) {quantidadeVezes = 11;}
187
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh12x()) {quantidadeVezes = 12;}
188
                Date dataParcela = vendaFormaPagamento.getVenda().getDataVenda();
189
                Date dataInicial = vendaFormaPagamento.getVenda().getDataVenda();
190
                for (int i = 1; i <= quantidadeVezes; i++) {
191
                        if (i == 1) {
192
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh1x()) {
193
                                        dataParcela = DataUtils.acrescentarDias(dataParcela, 2);
194
                                } else {
195
                                        dataParcela = DataUtils.acrescentarDias(dataParcela, 31);
196
                                }
197
                        } else {
198
                                dataParcela = DataUtils.acrescentarDias(dataInicial, i * 30);
199
                        }
200
                        dataParcela = DataUtils.acrescentarDiasResultadoDiaUtil(dataParcela, 0);
201
                        cadastrarParcelas(vendaFormaPagamento, contaBancaria, dataParcela, valorParcelaCalculado / quantidadeVezes, contaAReceber, "CRÉDITO " + i + "/" + quantidadeVezes);
202
                }
203
                return contaAReceber;
204
        }
205
 
206
        @Override
207
        public Conta gerarParcelasDaVenda(Venda venda, Conta conta) {
208
                if (VerificadorUtil.naoEstaNulo(conta) && VerificadorUtil.naoEstaNulo(venda)) {
209
                        conta = cadastrarContaCasoNaoTenhaSidoCadastrada(conta);
210
                        List<VendaFormaPagamento> listaVendaFormaPagamento = new ArrayList<VendaFormaPagamento>();
211
                        listaVendaFormaPagamento.addAll(vendaFormaPagamentoService.consultarLancamentosDaVenda(venda));
212
                        for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
213
                                Taxa taxa = consultarTaxa(vendaFormaPagamento);
214
                                Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
215
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDinheiro()) {criarParcelaDinheiro(vendaFormaPagamento, conta);}
216
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDebito()) {criarParcelaDebito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
217
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCredito()) {criarParcelaCredito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
218
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {criarParcelaPagseguro(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
219
                        }
220
                        return conta;
221
                }
222
                throw new NegocioException("NENHUMA PARCELA FOI CRIADA");
223
        }
224
 
225
        @Override
226
        public Conta gerarParcelasDinheiroDaVenda(Venda venda, Conta contaAReceber) {
227
                if (VerificadorUtil.naoEstaNulo(contaAReceber) && VerificadorUtil.naoEstaNulo(venda)) {
228
                        contaAReceber = cadastrarContaCasoNaoTenhaSidoCadastrada(contaAReceber);
229
                        List<VendaFormaPagamento> listaVendaFormaPagamento = new ArrayList<VendaFormaPagamento>();
230
                        listaVendaFormaPagamento.addAll(vendaFormaPagamentoService.consultarLancamentosDaVenda(venda));
231
                        for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
232
                                Taxa taxa = consultarTaxa(vendaFormaPagamento);
233
                                Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
234
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDinheiro()) {criarParcelaDinheiro(vendaFormaPagamento, contaAReceber);}
235
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {criarParcelaPagseguro(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, contaAReceber);}
236
                        }
237
                        return contaAReceber;
238
                }
239
                throw new NegocioException("NENHUMA PARCELA FOI CRIADA");
240
        }
241
 
242
        @Override
243
        public Conta gerarParcelasCartaoDaVenda(Venda venda, Conta conta) {
244
                if (VerificadorUtil.naoEstaNulo(conta) && VerificadorUtil.naoEstaNulo(venda)) {
245
                        conta = cadastrarContaCasoNaoTenhaSidoCadastrada(conta);
246
                        List<VendaFormaPagamento> listaVendaFormaPagamento = new ArrayList<VendaFormaPagamento>();
247
                        listaVendaFormaPagamento.addAll(vendaFormaPagamentoService.consultarLancamentosDaVenda(venda));
248
                        for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
249
                                Taxa taxa = consultarTaxa(vendaFormaPagamento);
250
                                Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
251
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDebito()) {criarParcelaDebito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
252
                                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCredito()) {criarParcelaCredito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
253
                        }
254
                        return conta;
255
                }
256
                throw new NegocioException("NENHUMA PARCELA FOI CRIADA");
257
        }
258
 
259
        private Conta criarParcelaDinheiro(VendaFormaPagamento vendaFormaPagamento, Conta contaAReceber) {
260
                cadastrarParcelas(vendaFormaPagamento, new ContaBancaria(ContaBancaria.getContaCaixa()), vendaFormaPagamento.getVenda().getDataVenda(), vendaFormaPagamento.getValorPagamento(), contaAReceber, "VALOR");
261
                return contaAReceber;
262
        }
263
 
264
        private Conta criarParcelaPagseguro(Double valorParcelaCalculado, ContaBancaria contaBancaria, VendaFormaPagamento vendaFormaPagamento, Conta contaAReceber) {
265
                cadastrarParcelas(vendaFormaPagamento, contaBancaria, vendaFormaPagamento.getVenda().getDataVenda(), valorParcelaCalculado, contaAReceber, "PAGSEGURO");
266
                return contaAReceber;
267
        }
268
 
269
        private Taxa consultarTaxa(VendaFormaPagamento vendaFormaPagamento) {
270
                Taxa taxa = new Taxa();
271
                taxa.setEmpresaAdquirente(vendaFormaPagamento.getEmpresaAdquirenteDaMaquinetaDaVenda());
272
                taxa.setFormaPagamento(vendaFormaPagamento.getFormaPagamento());
273
                taxa.setBandeiraCartao(vendaFormaPagamento.getBandeiraCartao());
274
                taxa = taxaService.consultarTaxa(taxa);
275
                if (VerificadorUtil.estaNulo(taxa)) {
276
                        taxa = new Taxa();
277
                        taxa.setEmpresaAdquirente(vendaFormaPagamento.getEmpresaAdquirenteDaMaquinetaDaVenda());
278
                        taxa.setFormaPagamento(vendaFormaPagamento.getFormaPagamento());
279
                        taxa = taxaService.consultarTaxa(taxa);
280
                }
281
                if (VerificadorUtil.estaNulo(taxa)) {
282
                        taxa = new Taxa();
283
                        taxa.setContaBancaria(new ContaBancaria(new Long(1)));
284
                }
285
                return taxa;
286
        }
287
 
288
        private Double calcularValorParcela(Taxa taxa, Double valorPagamento) {
289
                Double valorParcelaCalculado = new Double(0.0);
290
                if (VerificadorUtil.naoEstaNulo(taxa)) {
291
                        if (VerificadorUtil.naoEstaNulo(taxa.getValor())) {
292
                                valorParcelaCalculado = descontarTaxa(valorPagamento, taxa.getValor());
293
                        } else {
294
                                return valorPagamento;
295
                        }
296
                }
297
                return valorParcelaCalculado;
298
        }
299
 
300
        private Double descontarTaxa(Double valorPagamento, Double taxa) {
301
                return new Double (new DecimalFormat("#.##").format(valorPagamento - (valorPagamento * taxa / 100)).replace(",", "."));
302
        }
303
 
304
        private void cadastrarParcelas(VendaFormaPagamento vendaFormaPagamento, ContaBancaria contaBancaria, Date dataVencimento, Double valorPagamento, Conta conta, String observacao) {
305
                Parcela parcela = new Parcela(conta, contaBancaria, vendaFormaPagamento.getVenda().getDataVenda(), dataVencimento, null, valorPagamento, observacao + " DA VENDA: " + vendaFormaPagamento.getVenda().getSequencial(), true);
306
                this.cadastrar(parcela);
307
        }
308
 
309
        @Override
310
        public Boolean verificarPossuiParcelaAberta(Venda venda) {
311
                return parcelaRepository.verificarPossuiParcelaAberta(venda);
312
        }
313
 
314
        @Override
315
        public Boolean verificarPossuiParcelaAbertaParaPagamento(Conta conta) {
316
                return parcelaRepository.verificarPossuiParcelaAbertaParaPagamento(conta);
317
        }
318
 
319
        @Override
320
        public Boolean verificarPossuiParcela(Venda venda) {
321
                return parcelaRepository.verificarPossuiParcela(venda);
322
        }
323
 
324
        @Override
325
        public ContaGerenciadorDTO cadastrarNovaParcelaPelaFrequencia(Parcela parcela) {
326
                if (VerificadorUtil.naoEstaNulo(parcela.getConta())) {
327
                        if (!this.verificarPossuiParcelaAbertaParaPagamento(parcela.getConta())) {
328
                                if (!parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.UNICA.getValor())) {
329
                                        Conta contaAPagar = new Conta();
330
                                        contaAPagar.setCategoria(parcela.getConta().getCategoria());
331
                                        contaAPagar.setPessoa(parcela.getConta().getPessoa());
332
                                        contaAPagar.setObservacao(parcela.getConta().getObservacao());
333
                                        contaAPagar.setTipoFrequencia(parcela.getConta().getTipoFrequencia());
334
                                        contaAPagar.setIndicadorAtivo(true);
335
                                        contaAPagar.setTipoConta(TipoConta.CONTA_A_PAGAR.getValor());
336
                                        contaAPagar.setLoja(parcela.getConta().getLoja());
337
                                        contaAPagar.setVigencia(parcela.getConta().getVigencia());
338
                                        if (parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.MENSAL.getValor())) {
339
                                                contaAPagar.setVigencia(vigenciaService.consultarProximaVigencia(parcela.getConta().getVigencia()));
340
                                        }
341
                                        contaService.cadastrar(contaAPagar);
342
 
343
                                        List<Parcela> parcelas = parcelaRepository.consultarParcelasDaConta(parcela.getConta());
344
                                        for (Parcela p : parcelas) {
345
                                                Parcela novaParcela = new Parcela();
346
                                                novaParcela.setConta(contaAPagar);
347
                                                novaParcela.setDataEmissao(DataUtils.getDataAtual());
348
                                                novaParcela.setContaBancaria(p.getContaBancaria());
349
                                                novaParcela.setObservacao(p.getObservacao());
350
                                                novaParcela.setValor(p.getValor());
351
                                                novaParcela.setIndicadorAtivo(true);
352
                                                novaParcela.setIndicadorOficial(p.getIndicadorOficial());
353
                                                if (p.getConta().getTipoFrequencia().equals(TipoFrequencia.DIARIAMENTE.getValor())) {
354
                                                        novaParcela.setDataVencimento(DataUtils.acrescentarDias(p.getDataVencimento(), 1));
355
                                                }
356
                                                if (p.getConta().getTipoFrequencia().equals(TipoFrequencia.SEMANAL.getValor())) {
357
                                                        novaParcela.setDataVencimento(DataUtils.acrescentarDias(p.getDataVencimento(), 7));
358
                                                }
359
                                                if (p.getConta().getTipoFrequencia().equals(TipoFrequencia.MENSAL.getValor())) {
360
                                                        novaParcela.setDataVencimento(DataUtils.acrescentarMeses(p.getDataVencimento(), 1));
361
                                                }
362
                                                if (p.getConta().getTipoFrequencia().equals(TipoFrequencia.ANUAL.getValor())) {
363
                                                        novaParcela.setDataVencimento(DataUtils.acrescentarAnos(p.getDataVencimento(), 1));
364
                                                }
365
                                                this.cadastrar(novaParcela);
366
                                                novaParcela.setConta(contaAPagar);
367
                                        }
368
 
369
                                        ContaGerenciadorDTO contaGerenciador = new ContaGerenciadorDTO();
370
                                        contaGerenciador.setConta(contaAPagar);
371
                                        return contaGerenciador;
372
                                }
373
                        }
374
                } else if (VerificadorUtil.naoEstaNulo(parcela.getConta())) {
375
                        if (!parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.UNICA.getValor())) {
376
                                Conta contaAReceber = new Conta();
377
                                contaAReceber.setCategoria(parcela.getConta().getCategoria());
378
                                contaAReceber.setPessoa(parcela.getConta().getPessoa());
379
                                contaAReceber.setObservacao(parcela.getConta().getObservacao());
380
                                contaAReceber.setTipoFrequencia(parcela.getConta().getTipoFrequencia());
381
                                contaAReceber.setIndicadorAtivo(true);
382
                                contaAReceber.setTipoConta(TipoConta.CONTA_A_RECEBER.getValor());
383
                                contaAReceber.setLoja(parcela.getConta().getLoja());
384
                                contaService.cadastrar(contaAReceber);
385
 
386
                                Parcela novaParcela = new Parcela();
387
                                novaParcela.setConta(contaAReceber);
388
                                novaParcela.setDataEmissao(DataUtils.getDataAtual());
389
                                novaParcela.setContaBancaria(parcela.getContaBancaria());
390
                                novaParcela.setObservacao(parcela.getObservacao());
391
                                novaParcela.setValor(parcela.getValor());
392
                                novaParcela.setIndicadorAtivo(true);
393
                                if (parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.DIARIAMENTE.getValor())) {
394
                                        novaParcela.setDataVencimento(DataUtils.acrescentarDias(parcela.getDataVencimento(), 1));
395
                                }
396
                                if (parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.SEMANAL.getValor())) {
397
                                        novaParcela.setDataVencimento(DataUtils.acrescentarDias(parcela.getDataVencimento(), 7));
398
                                }
399
                                if (parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.MENSAL.getValor())) {
400
                                        novaParcela.setDataVencimento(DataUtils.acrescentarMeses(parcela.getDataVencimento(), 1));
401
                                }
402
                                if (parcela.getConta().getTipoFrequencia().equals(TipoFrequencia.ANUAL.getValor())) {
403
                                        novaParcela.setDataVencimento(DataUtils.acrescentarAnos(parcela.getDataVencimento(), 1));
404
                                }
405
                                this.cadastrar(novaParcela);
406
                                novaParcela.setConta(contaAReceber);
407
 
408
                                ContaGerenciadorDTO contaGerenciador = new ContaGerenciadorDTO();
409
                                contaGerenciador.setConta(contaAReceber);
410
                                return contaGerenciador;
411
                        }
412
                }
413
                return null;
414
        }
415
 
416
        @Override
417
        public List<CartaoDTO> gerarContasDosCartoes(List<VendaFormaPagamento> listaVendaFormaPagamento) {
418
                List<CartaoDTO> contas = new ArrayList<CartaoDTO>();
419
                for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
420
                        Conta contaAReceber = new Conta();
421
                        contaAReceber.setLoja(vendaFormaPagamento.getVenda().getLoja());
422
                        contaAReceber.setIndicadorAtivo(true);
423
                        contaAReceber.setTipoFrequencia(TipoFrequencia.UNICA.getValor());
424
                        contaAReceber.setTipoConta(TipoConta.CONTA_A_RECEBER.getValor());
425
                        contaAReceber.setObservacao("VENDA: " + vendaFormaPagamento.getSequencialDaVenda());
426
                        contaAReceber.setVenda(vendaFormaPagamento.getVenda());
427
 
428
                        ContaFormaPagamento contaFormaPagamento = new ContaFormaPagamento(vendaFormaPagamento);
429
                        contaFormaPagamentoService.cadastrar(contaFormaPagamento);
430
                        contaAReceber.setFormaDePagamento(contaFormaPagamento);
431
 
432
                        contaService.cadastrar(contaAReceber);
433
 
434
                        List<Parcela> parcelas = new ArrayList<Parcela>();
435
                        this.gerarParcelas(vendaFormaPagamento, contaAReceber);
436
                        parcelas = this.consultarParcelasAVencer(contaAReceber);
437
 
438
                        for (Parcela parcela : parcelas) {
439
                                CartaoDTO cartao = new CartaoDTO();
440
                                cartao.setParcela(parcela);
441
                                cartao.setBandeira(vendaFormaPagamento.getDescricaoDaBandeiraCartao());
442
                                cartao.setFormaDePagamento(vendaFormaPagamento.getFormaPagamento());
443
                                cartao.setDataVenda(vendaFormaPagamento.getVenda().getDataVenda());
444
                                cartao.setBruto(vendaFormaPagamento.getValorPagamento());
445
                                contas.add(cartao);
446
                        }
447
                }
448
                return contas;
449
        }
450
 
451
        @Override
452
        public List<CartaoDTO> consultarContasDosCartoes(Date dataInicial, Date dataFinal) {
453
                List<CartaoDTO> contas = new ArrayList<CartaoDTO>();
454
                List<Conta> contasAReceber = consultarContasAReceber(dataInicial, dataFinal);
455
                if (VerificadorUtil.naoEstaNuloOuVazio(contasAReceber)) {
456
                        for (Conta contaAReceber : contasAReceber) {
457
                                List<Parcela> parcelas = this.consultarParcelasAVencer(contaAReceber);
458
                                for (Parcela parcela : parcelas) {
459
                                        CartaoDTO cartao = new CartaoDTO();
460
                                        cartao.setParcela(parcela);
461
                                        if (VerificadorUtil.naoEstaNulo(contaAReceber.getFormaDePagamento())) {
462
                                                cartao.setBandeira(contaAReceber.getFormaDePagamento().getBandeiraCartao().getDescricao());
463
                                                cartao.setFormaDePagamento(contaAReceber.getFormaDePagamento().getFormaPagamento());
464
                                                cartao.setBruto(contaAReceber.getFormaDePagamento().getValorPagamento());
465
                                        }
466
                                        cartao.setDataVenda(contaAReceber.getVenda().getDataVenda());
467
                                        contas.add(cartao);
468
                                }
469
                        }
470
                }
471
                return contas;
472
        }
473
 
474
        private List<Conta> consultarContasAReceber(Date dataInicial, Date dataFinal) {
475
                return contaService.consultarContasAReceberPorPeriodo(dataInicial, dataFinal);
476
        }
477
 
478
        @Override
479
        public Double obterValorPassandoParametrosConsulta(ParametrosConsulta<Parcela> parametrosConsulta) {
480
                return parcelaRepository.obterValorPassandoParametrosConsulta(parametrosConsulta);
481
        }
482
 
483
        @Override
484
        public void cadastrarContaComParcelasNaCompra(Compra compra, List<Parcela> listaParcelas) {
485
                if (VerificadorUtil.naoEstaNuloOuVazio(listaParcelas)) {
486
                        Conta contaAPagar = new Conta(TipoConta.CONTA_A_PAGAR.getValor());
487
                        Categoria categoriaProduto = new Categoria();
488
                        categoriaProduto.setSequencial(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_PRODUTO_7);
489
                        contaAPagar.setCategoria(categoriaService.consultarPorId(categoriaProduto));
490
                        contaAPagar.setPessoa(compra.getFornecedor().getPessoa());
491
                        contaAPagar.setIndicadorAtivo(true);
492
                        contaAPagar.setTipoFrequencia(TipoFrequencia.UNICA.getValor());
493
                        contaService.cadastrar(contaAPagar);
494
 
495
                        for (Parcela parcela : listaParcelas) {
496
                                parcela.setObservacao(compra.getFornecedor().getNomeAbreviadoDaPessoa() + " " + parcela.getObservacao());
497
                                parcela.setConta(contaAPagar);
498
                                this.cadastrar(parcela);
499
                        }
500
                        compra.setConta(contaAPagar);
501
                }
502
        }
503
 
504
        public static void main(String[] args) {
505
                String numero = "GBMAX NF 032393 001/003";
506
                System.out.println(removeZeros(numero));
507
        }
508
 
509
        public static String removeZeros(String linha) { return linha.replaceFirst("0*", ""); }
510
        */
511
        /*
512
        @Override
513
        public void parcelamento(Parcela parcela, Integer quantidadeParcelas) {
514
                Double valorTotal = parcela.getValor();
515
                Double valorDaParcela = valorTotal/quantidadeParcelas;
516
                Date dataVencimento = new Date(parcela.getDataVencimento().getTime());
517
                for (int i = 1; i <= quantidadeParcelas; i++) {
518
                        Parcela parcelado = new Parcela(null, parcela.getContaAPagar(), parcela.getContaBancaria(), DataUtils.getDataAtual(), dataVencimento, null, valorDaParcela, i + "ª PARCELA DA CONTA: " + parcela.getContaAPagar().getSequencial(), true);
519
                        parcelaRepository.cadastrar(parcelado);
520
                        dataVencimento = new Date(DataUtils.acrescentarDiasResultadoDiaUtil(dataVencimento, 30).getTime());
521
                }
522
        }
523
 
524
        private void cadastrarParcelas(VendaFormaPagamento vendaFormaPagamento, ContaBancaria contaBancaria, Date dataVencimento, Double valorPagamento, ContaAReceber contaAReceber, String observacao) {
525
                Parcela parcela = new Parcela(contaAReceber, null, contaBancaria, vendaFormaPagamento.getVenda().getDataVenda(), dataVencimento, null, valorPagamento, observacao + " DA VENDA: " + vendaFormaPagamento.getVenda().getSequencial(), true);
526
                parcelaRepository.cadastrar(parcela);
527
        }
528
 
529
        @Override
530
        public List<Parcela> consultarParcelasPorPeriodo(Parcela parcela, Boolean pagamentoRealizado, Boolean ehContaAReceber, Date dataInicial, Date dataFinal, String ordenacao, int first, int pageSize) {
531
                return parcelaRepository.consultarParcelasPorPeriodo(parcela, pagamentoRealizado, ehContaAReceber, dataInicial, dataFinal, ordenacao, first, pageSize);
532
        }
533
 
534
        @Override
535
        public Integer obterQuantidadeRegistrosConsultarParcelasPorPeriodo(Parcela parcela, Boolean pagamentoRealizado, Boolean ehContaAReceber, Date dataInicial, Date dataFinal) {
536
                return parcelaRepository.obterQuantidadeRegistrosConsultarParcelasPorPeriodo(parcela, pagamentoRealizado, ehContaAReceber, dataInicial, dataFinal);
537
        }
538
*/
539
}