package br.com.ec.domain.service.impl;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.FormaPagamentoDTO;
import br.com.ec.domain.dto.ParcelaDTO;
import br.com.ec.domain.dto.VigenciaDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaParcelasDTO;
import br.com.ec.domain.model.Conta;
import br.com.ec.domain.model.Parcela;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.model.tipos.TipoFrequencia;
import br.com.ec.domain.service.ContaService;
import br.com.ec.domain.service.ParcelaService;
import br.com.ec.domain.service.VigenciaService;
import br.com.ec.repository.ParcelaRepository;
@Service
public class ParcelaServiceImpl
extends AbstractService
<Parcela
> implements ParcelaService
{
private ParcelaRepository parcelaRepository
;
private ContaService contaService
;
private VigenciaService vigenciaService
;
/*
private TaxaService taxaService;
private CategoriaService categoriaService;
private ContaFormaPagamentoService contaFormaPagamentoService;
private VendaFormaPagamentoService vendaFormaPagamentoService;
*/
@Autowired
public ParcelaServiceImpl
(Validador validador, ParcelaRepository parcelaRepository, ContaService contaService,
VigenciaService vigenciaService
/*, TaxaService taxaService,
CategoriaService categoriaService, ContaFormaPagamentoService contaFormaPagamentoService,
VendaFormaPagamentoService vendaFormaPagamentoService*/) {
super(validador
);
this.
parcelaRepository = parcelaRepository
;
this.
contaService = contaService
;
this.
vigenciaService = vigenciaService
;
/*
this.taxaService = taxaService;
this.contaFormaPagamentoService = contaFormaPagamentoService;
this.vendaFormaPagamentoService = vendaFormaPagamentoService;
this.categoriaService = categoriaService;
*/
}
@
Override
protected GenericRepository
<Parcela
> getRepository
() {
return this.
parcelaRepository;
}
@
Override
protected void regrasNegocioCadastrar
(Parcela parcela
) {
verificarParcela
(parcela
);
parcela.
setIndicadorNegociacao(false);
}
@
Override
protected void regrasNegocioAlterar
(Parcela parcela
) {
verificarParcela
(parcela
);
}
private void verificarParcela
(Parcela parcela
) {
if (VerificadorUtil.
estaNulo(parcela.
getDataVencimento()) && VerificadorUtil.
estaNulo(parcela.
getDataPagamento())) {
throw new NegocioException
("INFORME A DATA DE VENCIMENTO OU A DATA DE PAGAMENTO");
}
cadastrarContaCasoNaoTenhaSidoCadastrada
(parcela.
getConta());
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(ParametrosConsultaParcelasDTO parametrosConsultaParcelasDTO
) {
return parcelaRepository.
consultarParcelas(parametrosConsultaParcelasDTO
);
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(Long sequencialContaBancaria,
Date dataRecebimento,
List<FormaPagamentoDTO
> formasDePagamento
) {
return parcelaRepository.
consultarParcelas(sequencialContaBancaria, dataRecebimento, formasDePagamento
);
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(Long sequencialContaBancaria,
Date dataRecebimentoInicial,
Date dataRecebimentoFinal,
List<FormaPagamentoDTO
> formasDePagamento
) {
return parcelaRepository.
consultarParcelas(sequencialContaBancaria, dataRecebimentoInicial, dataRecebimentoFinal, formasDePagamento
);
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(String sqlConsulta
) {
return parcelaRepository.
consultarParcelas(sqlConsulta
);
}
@
Override
public List<ParcelaDTO
> consultarParcelasAReceber
(Long sequencialContaBancaria,
Date dataRecebimento,
List<FormaPagamentoDTO
> formasDePagamento
) {
return parcelaRepository.
consultarParcelasAReceber(sequencialContaBancaria, dataRecebimento, formasDePagamento
);
}
@
Override
public List<ParcelaDTO
> consultarParcelasRecebidas
(Long sequencialContaBancaria,
Date dataRecebimento,
List<FormaPagamentoDTO
> formasDePagamento
) {
return parcelaRepository.
consultarParcelasRecebidas(sequencialContaBancaria, dataRecebimento, formasDePagamento
);
}
@
Override
public List<ParcelaDTO
> consultarParcelasDaPessoaEeCategoriaEeVigencia
(Long sequencialPessoa,
Long sequencialCategoria,
Long sequencialVigencia
) {
return parcelaRepository.
consultarParcelasDaPessoaEeCategoriaEeVigencia(sequencialPessoa, sequencialCategoria, sequencialVigencia
);
}
@
Override
public void receberParcelas
(Date dataConciliacao,
List<ParcelaDTO
> parcelasSelecionadas
) {
if (VerificadorUtil.
estaNulo(dataConciliacao
)) {
throw new NegocioException
("INFORME A DATA DA CONCILIAÇÃO");
}
parcelaRepository.
conciliarParcelas(dataConciliacao, parcelasSelecionadas
);
}
@
Override
public Double obterValorPassandoParametrosConsulta
(ParametrosConsulta
<Parcela
> parametrosConsulta
) {
return parcelaRepository.
obterValorPassandoParametrosConsulta(parametrosConsulta
);
}
@
Override
public List<ParcelaDTO
> consultarParcelasPassandoParametrosConsulta
(ParametrosConsulta
<Parcela
> parametrosConsulta
) {
return parcelaRepository.
consultarParcelasPassandoParametrosConsulta(parametrosConsulta
);
}
@
Override
public void atualizarObservacaoPagamentos
(List<ParcelaDTO
> parcelas
) {
for (ParcelaDTO parcelaDTO : parcelas
) {
parcelaRepository.
alterarObservacao(parcelaDTO.
getSequencial(), parcelaDTO.
getObservacao());
}
}
@
Override
public void efetuarPagamentoRecebimento
(ParcelaDTO parcelaDTO,
Date dataEfetuar
) {
Parcela parcela =
this.
consultarPorId(new Parcela
(parcelaDTO.
getSequencial()));
Vigencia proximaVigencia = vigenciaService.
consultarProximaVigencia(parcela.
getConta().
getVigencia().
getSequencial());
if (VerificadorUtil.
estaNulo(proximaVigencia
)) {
throw new NegocioException
("NECESSÁRIO O CADASTRO DA PRÓXIMA VIGÊNCIA");
}
if (VerificadorUtil.
estaNulo(parcela.
getDataPagamento())) {
parcela.
setDataPagamento(dataEfetuar
);
this.
alterar(parcela
);
cadastrarNovaParcelaPelaFrequencia
(parcela, proximaVigencia
);
}
}
private Conta cadastrarContaCasoNaoTenhaSidoCadastrada
(Conta conta
) {
if (VerificadorUtil.
naoEstaNulo(conta
)) {
if (VerificadorUtil.
estaNulo(conta.
getSequencial())) {
contaService.
cadastrar(conta
);
}
}
return conta
;
}
@
Override
public void cadastrarNovaParcelaPelaFrequencia
(Parcela parcela, Vigencia proximaVigencia
) {
if (VerificadorUtil.
naoEstaNulo(parcela.
getConta())) {
if (!this.
verificarPossuiParcelaEmAberta(parcela.
getConta().
getSequencial(), parcela.
getConta().
getSequencialDaVenda())) {
if (!parcela.
getConta().
getTipoFrequencia().
equals(TipoFrequencia.
UNICA.
getValor())) {
Conta contaNova =
new Conta
(parcela.
getConta());
contaNova.
setSequencial(null);
if (parcela.
getConta().
getTipoFrequencia().
equals(TipoFrequencia.
MENSAL.
getValor())) {
contaNova.
setVigencia(proximaVigencia
);
}
contaService.
cadastrar(contaNova
);
List<Parcela
> parcelas = parcelaRepository.
consultarParcelasDaConta(parcela.
getConta().
getSequencial());
for (Parcela parcelaAnterior : parcelas
) {
Parcela parcelaNova =
new Parcela
(parcelaAnterior
);
parcelaNova.
setConta(contaNova
);
parcelaNova.
setDataEmissao(DataUtils.
getDataAtual());
parcelaNova.
provisionarNovaDataVencimentoPelaFrequencia();
parcelaNova.
setDataPagamento(null);
this.
cadastrar(parcelaNova
);
}
// ContaGerenciadorDTO contaGerenciador = new ContaGerenciadorDTO();
// contaGerenciador.setConta(contaAPagar);
// return contaGerenciador;
}
}
}
//return null;
}
@
Override
public Boolean verificarPossuiParcelaEmAberta
(Long sequencialConta,
Long sequencialVenda
) {
return parcelaRepository.
verificarPossuiParcelaEmAberta(sequencialConta, sequencialVenda
);
}
@
Override
public void atualizarValorParcela
(ParcelaDTO parcelaDTO
) {
parcelaRepository.
atualizarValorParcela(parcelaDTO
);
}
@
Override
public void atualizarCentroDeCustos
(Long sequencialConta,
Long sequencialCentroDeCustos
) {
parcelaRepository.
atualizarCentroDeCustos(sequencialConta, sequencialCentroDeCustos
);
}
@
Override
public void efetivarConciliacaoAntecipacao
(String sqlAtualizacaoParcelas
) {
parcelaRepository.
efetivarConciliacaoAntecipacao(sqlAtualizacaoParcelas
);
}
/*
@Override
public void cancelarParcela(Parcela parcela) {
parcela.setIndicadorAtivo(false);
this.alterar(parcela);
cancelarContaSemParcelaAtiva(parcela);
}
private void cancelarContaSemParcelaAtiva(Parcela parcela) {
Parcela parcelaAtiva = new Parcela();
parcelaAtiva.setIndicadorAtivo(true);
parcelaAtiva.setConta(parcela.getConta());
if (this.obterQuantidadeDeRegistrosPassandoEntidade(parcelaAtiva) == 0) {
if (VerificadorUtil.naoEstaNulo(parcela.getConta())) {
parcela.getConta().setIndicadorAtivo(false);
contaService.alterar(parcela.getConta());
}
}
}
@Override
public void receberParcelas(Date dataRecebimento, List<Parcela> parcelasSelecionadas) {
if (VerificadorUtil.estaNulo(dataRecebimento)) {
throw new NegocioException("INFORME A DATA DO RECEBIMENTO");
}
for (Parcela parcela : parcelasSelecionadas) {
parcela.setDataPagamento(dataRecebimento);
this.alterar(parcela);
}
}
@Override
public void lancarParcela(Parcela parcela) {
verificarParametros(parcela);
parcela.getConta().setObservacao(parcela.getObservacao());
contaService.cadastrar(parcela.getConta());
parcela.setDataEmissao(DataUtils.getDataAtual());
parcela.setIndicadorAtivo(true);
this.cadastrar(parcela);
}
private void verificarParametros(Parcela parcela) {
if (VerificadorUtil.estaNulo(parcela.getContaBancaria())) {
throw new NegocioException("INFORME A CONTA");
}
if (VerificadorUtil.estaNulo(parcela.getDataPagamento())) {
throw new NegocioException("INFORME A DATA DO PAGAMENTO");
}
if (VerificadorUtil.estaNulo(parcela.getValor())) {
throw new NegocioException("INFORME O VALOR DO PAGAMETNO");
}
}
@Override
public List<Parcela> consultarParcelas(ParametrosConsultaLancamentosDTO parcelaConsulta) {
return parcelaRepository.consultarParcelas(parcelaConsulta);
}
@Override
public List<Parcela> consultarParcelasAVencer(Conta conta) {
return parcelaRepository.consultarParcelasAVencer(conta);
}
@Override
public List<Parcela> consultarParcelasRecebidas(Date dataRecebimento, TipoCartao tipoCartao) {
return parcelaRepository.consultarParcelasRecebidas(dataRecebimento, tipoCartao);
}
@Override
public List<Parcela> consultarParcelasDaVenda(Long sequencialVenda) {
return parcelaRepository.consultarParcelasDaVenda(sequencialVenda);
}
@Override
public Conta gerarParcelas(VendaFormaPagamento vendaFormaPagamento, Conta conta) {
Taxa taxa = consultarTaxa(vendaFormaPagamento);
Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDebito()) {return criarParcelaDebito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCredito()) {return criarParcelaCredito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {return criarParcelaPagseguro(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
return conta;
}
private Conta criarParcelaDebito(Double valorParcelaCalculado, ContaBancaria contaBancaria, VendaFormaPagamento vendaFormaPagamento, Conta conta) {
Date dataDebito = DataUtils.acrescentarDiasResultadoDiaUtil(vendaFormaPagamento.getVenda().getDataVenda(), 1);
cadastrarParcelas(vendaFormaPagamento, contaBancaria, dataDebito, valorParcelaCalculado, conta, "DÉBITO");
return conta;
}
private Conta criarParcelaCredito(Double valorParcelaCalculado, ContaBancaria contaBancaria, VendaFormaPagamento vendaFormaPagamento, Conta contaAReceber) {
Integer quantidadeVezes = 0;
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh1x()) {quantidadeVezes = 1;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh2x()) {quantidadeVezes = 2;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh3x()) {quantidadeVezes = 3;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh4x()) {quantidadeVezes = 4;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh5x()) {quantidadeVezes = 5;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh6x()) {quantidadeVezes = 6;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh7x()) {quantidadeVezes = 7;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh8x()) {quantidadeVezes = 8;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh9x()) {quantidadeVezes = 9;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh10x()) {quantidadeVezes = 10;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh11x()) {quantidadeVezes = 11;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh12x()) {quantidadeVezes = 12;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh13x()) {quantidadeVezes = 13;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh14x()) {quantidadeVezes = 14;}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh15x()) {quantidadeVezes = 15;}
Date dataParcela = vendaFormaPagamento.getVenda().getDataVenda();
Date dataInicial = vendaFormaPagamento.getVenda().getDataVenda();
for (int i = 1; i <= quantidadeVezes; i++) {
if (i == 1) {
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEh1x()) {
dataParcela = DataUtils.acrescentarDias(dataParcela, 2);
} else {
dataParcela = DataUtils.acrescentarDias(dataParcela, 31);
}
} else {
dataParcela = DataUtils.acrescentarDias(dataInicial, i * 30);
}
dataParcela = DataUtils.acrescentarDiasResultadoDiaUtil(dataParcela, 0);
cadastrarParcelas(vendaFormaPagamento, contaBancaria, dataParcela, valorParcelaCalculado / quantidadeVezes, contaAReceber, "CRÉDITO " + i + "/" + quantidadeVezes);
}
return contaAReceber;
}
@Override
public Conta gerarParcelasDaVenda(Venda venda, Conta conta) {
if (VerificadorUtil.naoEstaNulo(conta) && VerificadorUtil.naoEstaNulo(venda)) {
conta = cadastrarContaCasoNaoTenhaSidoCadastrada(conta);
List<VendaFormaPagamento> listaVendaFormaPagamento = new ArrayList<VendaFormaPagamento>();
listaVendaFormaPagamento.addAll(vendaFormaPagamentoService.consultarLancamentosDaVenda(venda));
for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
Taxa taxa = consultarTaxa(vendaFormaPagamento);
Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDinheiro()) {criarParcelaDinheiro(vendaFormaPagamento, conta);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDebito()) {criarParcelaDebito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCredito()) {criarParcelaCredito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {criarParcelaPagseguro(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
}
return conta;
}
throw new NegocioException("NENHUMA PARCELA FOI CRIADA");
}
@Override
public Conta gerarParcelasDinheiroDaVenda(Venda venda, Conta contaAReceber) {
if (VerificadorUtil.naoEstaNulo(contaAReceber) && VerificadorUtil.naoEstaNulo(venda)) {
contaAReceber = cadastrarContaCasoNaoTenhaSidoCadastrada(contaAReceber);
List<VendaFormaPagamento> listaVendaFormaPagamento = new ArrayList<VendaFormaPagamento>();
listaVendaFormaPagamento.addAll(vendaFormaPagamentoService.consultarLancamentosDaVenda(venda));
for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
Taxa taxa = consultarTaxa(vendaFormaPagamento);
Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDinheiro()) {criarParcelaDinheiro(vendaFormaPagamento, contaAReceber);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {criarParcelaPagseguro(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, contaAReceber);}
}
return contaAReceber;
}
throw new NegocioException("NENHUMA PARCELA FOI CRIADA");
}
@Override
public Conta gerarParcelasCartaoDaVenda(Venda venda, Conta conta) {
if (VerificadorUtil.naoEstaNulo(conta) && VerificadorUtil.naoEstaNulo(venda)) {
conta = cadastrarContaCasoNaoTenhaSidoCadastrada(conta);
List<VendaFormaPagamento> listaVendaFormaPagamento = new ArrayList<VendaFormaPagamento>();
listaVendaFormaPagamento.addAll(vendaFormaPagamentoService.consultarLancamentosDaVenda(venda));
for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
Taxa taxa = consultarTaxa(vendaFormaPagamento);
Double valorParcelaCalculado = calcularValorParcela(taxa, vendaFormaPagamento.getValorPagamento());
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhDebito()) {criarParcelaDebito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCredito()) {criarParcelaCredito(valorParcelaCalculado, taxa.getContaBancaria(), vendaFormaPagamento, conta);}
}
return conta;
}
throw new NegocioException("NENHUMA PARCELA FOI CRIADA");
}
private Conta criarParcelaDinheiro(VendaFormaPagamento vendaFormaPagamento, Conta contaAReceber) {
cadastrarParcelas(vendaFormaPagamento, new ContaBancaria(ContaBancaria.getContaCaixa()), vendaFormaPagamento.getVenda().getDataVenda(), vendaFormaPagamento.getValorPagamento(), contaAReceber, "VALOR");
return contaAReceber;
}
private Conta criarParcelaPagseguro(Double valorParcelaCalculado, ContaBancaria contaBancaria, VendaFormaPagamento vendaFormaPagamento, Conta contaAReceber) {
cadastrarParcelas(vendaFormaPagamento, contaBancaria, vendaFormaPagamento.getVenda().getDataVenda(), valorParcelaCalculado, contaAReceber, "PAGSEGURO");
return contaAReceber;
}
private Taxa consultarTaxa(VendaFormaPagamento vendaFormaPagamento) {
Taxa taxa = new Taxa();
taxa.setEmpresaAdquirente(vendaFormaPagamento.getEmpresaAdquirenteDaMaquinetaDaVenda());
taxa.setFormaPagamento(vendaFormaPagamento.getFormaPagamento());
taxa.setBandeiraCartao(vendaFormaPagamento.getBandeiraCartao());
taxa = taxaService.consultarTaxa(taxa);
if (VerificadorUtil.estaNulo(taxa)) {
taxa = new Taxa();
taxa.setEmpresaAdquirente(vendaFormaPagamento.getEmpresaAdquirenteDaMaquinetaDaVenda());
taxa.setFormaPagamento(vendaFormaPagamento.getFormaPagamento());
taxa = taxaService.consultarTaxa(taxa);
}
if (VerificadorUtil.estaNulo(taxa)) {
taxa = new Taxa();
taxa.setContaBancaria(new ContaBancaria(new Long(1)));
}
return taxa;
}
private Double calcularValorParcela(Taxa taxa, Double valorPagamento) {
Double valorParcelaCalculado = new Double(0.0);
if (VerificadorUtil.naoEstaNulo(taxa)) {
if (VerificadorUtil.naoEstaNulo(taxa.getValor())) {
valorParcelaCalculado = descontarTaxa(valorPagamento, taxa.getValor());
} else {
return valorPagamento;
}
}
return valorParcelaCalculado;
}
private Double descontarTaxa(Double valorPagamento, Double taxa) {
return new Double (new DecimalFormat("#.##").format(valorPagamento - (valorPagamento * taxa / 100)).replace(",", "."));
}
private void cadastrarParcelas(VendaFormaPagamento vendaFormaPagamento, ContaBancaria contaBancaria, Date dataVencimento, Double valorPagamento, Conta conta, String observacao) {
Parcela parcela = new Parcela(conta, contaBancaria, vendaFormaPagamento.getVenda().getDataVenda(), dataVencimento, null, valorPagamento, observacao + " DA VENDA: " + vendaFormaPagamento.getVenda().getSequencial(), true);
this.cadastrar(parcela);
}
@Override
public Boolean verificarPossuiParcelaAberta(Venda venda) {
return parcelaRepository.verificarPossuiParcelaAberta(venda);
}
@Override
public Boolean verificarPossuiParcelaAbertaParaPagamento(Conta conta) {
return parcelaRepository.verificarPossuiParcelaAbertaParaPagamento(conta);
}
@Override
public Boolean verificarPossuiParcela(Venda venda) {
return parcelaRepository.verificarPossuiParcela(venda);
}
@Override
public List<CartaoDTO> gerarContasDosCartoes(List<VendaFormaPagamento> listaVendaFormaPagamento) {
List<CartaoDTO> contas = new ArrayList<CartaoDTO>();
for (VendaFormaPagamento vendaFormaPagamento : listaVendaFormaPagamento) {
Conta contaAReceber = new Conta();
contaAReceber.setLoja(vendaFormaPagamento.getVenda().getLoja());
contaAReceber.setIndicadorAtivo(true);
contaAReceber.setTipoFrequencia(TipoFrequencia.UNICA.getValor());
contaAReceber.setTipoConta(TipoConta.CONTA_A_RECEBER.getValor());
contaAReceber.setObservacao("VENDA: " + vendaFormaPagamento.getSequencialDaVenda());
contaAReceber.setVenda(vendaFormaPagamento.getVenda());
ContaFormaPagamento contaFormaPagamento = new ContaFormaPagamento(vendaFormaPagamento);
contaFormaPagamentoService.cadastrar(contaFormaPagamento);
contaAReceber.setFormaDePagamento(contaFormaPagamento);
contaService.cadastrar(contaAReceber);
List<Parcela> parcelas = new ArrayList<Parcela>();
this.gerarParcelas(vendaFormaPagamento, contaAReceber);
parcelas = this.consultarParcelasAVencer(contaAReceber);
for (Parcela parcela : parcelas) {
CartaoDTO cartao = new CartaoDTO();
cartao.setParcela(parcela);
cartao.setBandeira(vendaFormaPagamento.getDescricaoDaBandeiraCartao());
cartao.setFormaDePagamento(vendaFormaPagamento.getFormaPagamento());
cartao.setDataVenda(vendaFormaPagamento.getVenda().getDataVenda());
cartao.setBruto(vendaFormaPagamento.getValorPagamento());
contas.add(cartao);
}
}
return contas;
}
@Override
public List<CartaoDTO> consultarContasDosCartoes(Date dataInicial, Date dataFinal) {
List<CartaoDTO> contas = new ArrayList<CartaoDTO>();
List<Conta> contasAReceber = consultarContasAReceber(dataInicial, dataFinal);
if (VerificadorUtil.naoEstaNuloOuVazio(contasAReceber)) {
for (Conta contaAReceber : contasAReceber) {
List<Parcela> parcelas = this.consultarParcelasAVencer(contaAReceber);
for (Parcela parcela : parcelas) {
CartaoDTO cartao = new CartaoDTO();
cartao.setParcela(parcela);
if (VerificadorUtil.naoEstaNulo(contaAReceber.getFormaDePagamento())) {
cartao.setBandeira(contaAReceber.getFormaDePagamento().getBandeiraCartao().getDescricao());
cartao.setFormaDePagamento(contaAReceber.getFormaDePagamento().getFormaPagamento());
cartao.setBruto(contaAReceber.getFormaDePagamento().getValorPagamento());
}
cartao.setDataVenda(contaAReceber.getVenda().getDataVenda());
contas.add(cartao);
}
}
}
return contas;
}
private List<Conta> consultarContasAReceber(Date dataInicial, Date dataFinal) {
return contaService.consultarContasAReceberPorPeriodo(dataInicial, dataFinal);
}
@Override
public void cadastrarContaComParcelasNaCompra(Compra compra, List<Parcela> listaParcelas) {
if (VerificadorUtil.naoEstaNuloOuVazio(listaParcelas)) {
Conta contaAPagar = new Conta(TipoConta.CONTA_A_PAGAR.getValor());
Categoria categoriaProduto = new Categoria();
categoriaProduto.setSequencial(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_PRODUTO_7);
contaAPagar.setCategoria(categoriaService.consultarPorId(categoriaProduto));
contaAPagar.setPessoa(compra.getFornecedor().getPessoa());
contaAPagar.setIndicadorAtivo(true);
contaAPagar.setTipoFrequencia(TipoFrequencia.UNICA.getValor());
contaService.cadastrar(contaAPagar);
for (Parcela parcela : listaParcelas) {
parcela.setObservacao(compra.getFornecedor().getNomeAbreviadoDaPessoa() + " " + parcela.getObservacao());
parcela.setConta(contaAPagar);
this.cadastrar(parcela);
}
compra.setConta(contaAPagar);
}
}
public static void main(String[] args) {
String numero = "GBMAX NF 032393 001/003";
System.out.println(removeZeros(numero));
}
public static String removeZeros(String linha) { return linha.replaceFirst("0*", ""); }
*/
/*
@Override
public void parcelamento(Parcela parcela, Integer quantidadeParcelas) {
Double valorTotal = parcela.getValor();
Double valorDaParcela = valorTotal/quantidadeParcelas;
Date dataVencimento = new Date(parcela.getDataVencimento().getTime());
for (int i = 1; i <= quantidadeParcelas; i++) {
Parcela parcelado = new Parcela(null, parcela.getContaAPagar(), parcela.getContaBancaria(), DataUtils.getDataAtual(), dataVencimento, null, valorDaParcela, i + "ª PARCELA DA CONTA: " + parcela.getContaAPagar().getSequencial(), true);
parcelaRepository.cadastrar(parcelado);
dataVencimento = new Date(DataUtils.acrescentarDiasResultadoDiaUtil(dataVencimento, 30).getTime());
}
}
private void cadastrarParcelas(VendaFormaPagamento vendaFormaPagamento, ContaBancaria contaBancaria, Date dataVencimento, Double valorPagamento, ContaAReceber contaAReceber, String observacao) {
Parcela parcela = new Parcela(contaAReceber, null, contaBancaria, vendaFormaPagamento.getVenda().getDataVenda(), dataVencimento, null, valorPagamento, observacao + " DA VENDA: " + vendaFormaPagamento.getVenda().getSequencial(), true);
parcelaRepository.cadastrar(parcela);
}
@Override
public List<Parcela> consultarParcelasPorPeriodo(Parcela parcela, Boolean pagamentoRealizado, Boolean ehContaAReceber, Date dataInicial, Date dataFinal, String ordenacao, int first, int pageSize) {
return parcelaRepository.consultarParcelasPorPeriodo(parcela, pagamentoRealizado, ehContaAReceber, dataInicial, dataFinal, ordenacao, first, pageSize);
}
@Override
public Integer obterQuantidadeRegistrosConsultarParcelasPorPeriodo(Parcela parcela, Boolean pagamentoRealizado, Boolean ehContaAReceber, Date dataInicial, Date dataFinal) {
return parcelaRepository.obterQuantidadeRegistrosConsultarParcelasPorPeriodo(parcela, pagamentoRealizado, ehContaAReceber, dataInicial, dataFinal);
}
*/
}