Subversion Repositories Integrator Subversion

Rev

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

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