Example #1
0
        public async Task <IActionResult> gerarParcelas(ParcelasDTO parcela)
        {
            try
            {
                var result = await _service.gerarParcelas(parcela);

                return(Ok(result));
            }
            catch (Exception ex)
            {
                return(UnprocessableEntity(new
                {
                    ex.Message,
                    Status = 422
                }));
            }
        }
        public async Task <List <ParcelasCompra> > gerarParcelas(ParcelasDTO parcela)
        {
            CondicoesPagamentoDAO condicaoDao = new CondicoesPagamentoDAO();

            CondicoesPagamento condicao = await condicaoDao.BuscarPorID(parcela.codigoCondicaoPagamento);

            List <ParcelasCompra> listParcelas = new List <ParcelasCompra>();

            foreach (var p in condicao.parcelas)
            {
                var itemParcela = new ParcelasCompra
                {
                    numeroParcela        = p.numeroParcela,
                    dtEmissao            = DateTime.Now,
                    dtVencimento         = parcela.dtEmissao.AddDays((double)p.numeroDias),
                    codigoFormaPagamento = p.codigoFormaPagamento,
                    descricaoForma       = p.formaPagamento.descricao,
                    valorParcela         = decimal.Round(((p.porcentagem / 100) * parcela.valorTotal), 2)
                };
                listParcelas.Add(itemParcela);
            }

            var totalParcelas = listParcelas.Sum(k => k.valorParcela);

            if (totalParcelas != parcela.valorTotal)
            {
                if (totalParcelas < parcela.valorTotal)
                {
                    var dif  = parcela.valorTotal - totalParcelas;
                    var list = listParcelas.OrderBy(u => u.numeroParcela);
                    list.Last().valorParcela = list.Last().valorParcela + dif;
                    listParcelas = list.ToList();
                }
                if (totalParcelas > parcela.valorTotal)
                {
                    var dif  = totalParcelas - parcela.valorTotal;
                    var list = listParcelas.OrderBy(u => u.numeroParcela);
                    list.Last().valorParcela = list.Last().valorParcela - dif;
                    listParcelas = list.ToList();
                }
            }

            return(listParcelas);
        }