Ejemplo n.º 1
0
        public async Task <CobrancaResult> Process(string input)
        {
            try{
                var infoPagamento = JsonConvert.DeserializeObject <PagamentoValeCompraInput>(input);

                var valeCompra = await voucherService.ConsultarValeCompra(infoPagamento.CodigoValeCompras); //await context.Vouchers.FirstOrDefaultAsync(v=>v.Identifier == infoPagamento.CodigoValeCompras && v.ClientId == infoPagamento.CodigoCliente);

                if (string.IsNullOrEmpty(valeCompra.ErrMessage))
                {
                    return(new CobrancaResult {
                        Aprovado = false,
                        Erro = valeCompra.ErrMessage
                    });
                }
                else if (valeCompra.ClienteId != infoPagamento.CodigoCliente)
                {
                    return(new CobrancaResult {
                        Aprovado = false,
                        Erro = "Vale-compra não localizado"
                    });
                }
                else
                {
                    await voucherService.RegisterVoucherUse(infoPagamento.CodigoValeCompras);

                    var paymentType = await context.PaymentTypes.FirstOrDefaultAsync(pt => pt.TypeIdentifier.Equals(ProviderName));

                    var newPayment = new Payment {
                        OrderId   = infoPagamento.CodigoPedido,
                        Date      = DateTime.Now,
                        TypeId    = paymentType.Id,
                        Amount    = infoPagamento.ValorCompra,
                        ExtraInfo = infoPagamento.CodigoValeCompras
                    };
                    await context.AddAsync(newPayment);

                    await context.SaveChangesAsync();

                    return(new CobrancaResult {
                        Aprovado = true,
                        Data = DateTime.Now,
                        Valor = infoPagamento.ValorCompra
                    });
                }
            }catch (Exception error) {
                log.LogError("Ocorreu um erro ao tentar efetuar o pagamento de um pedido com um vale-compra");
                log.LogError(error.Message);
                if (error.InnerException != null)
                {
                    log.LogError(error.InnerException.Message);
                }
                log.LogError(input);
                throw error;
            }
        }