public async Task <IActionResult> GetChangeAsync([FromBody] RegisterBindings bindings, CancellationToken cancellationToken = default(CancellationToken)) { var order = await this.orderService.GetByIdAsync(bindings.OrderID, cancellationToken); var toPay = order.Total - order.PaidAmount; var rate = order.Currency == bindings.AmountCurrency ? 1 : configuration.GetRate(bindings.AmountCurrency, order.Currency); var amount = bindings.Amount * rate; var change = amount - toPay; return(Ok(ApiModel.AsSuccess( change * configuration.GetRate(order.Currency, bindings.ChangeCurrency) ))); }
public async Task <IActionResult> RegisterAsync([FromServices] UserManager userManager, [FromBody] RegisterBindings bindings, CancellationToken cancellationToken = default(CancellationToken)) { var order = await this.orderService.GetByIdAsync(bindings.OrderID, cancellationToken); var toPay = order.Total - order.PaidAmount; var rateAmount = order.Currency == bindings.AmountCurrency ? 1 : configuration.GetRate(bindings.AmountCurrency, order.Currency); var rateChange = order.Currency == bindings.ChangeCurrency ? 1 : configuration.GetRate(bindings.ChangeCurrency, order.Currency); var amount = bindings.Amount * rateAmount; var change = bindings.Change * rateChange; var payment = new Payment() { Title = "Cash Payment", Provider = Name, Reference = $"{User.Identity.Name}", Status = PaymentStatus.Paid, Date = DateTime.UtcNow, Method = PaymentMethod.Cash, Details = $"Payment Order #{order.Reference}", Currency = bindings.AmountCurrency, Amount = amount - change }; var username = HttpContext.User.Identity.Name; if (string.IsNullOrEmpty(username)) { return(Ok(ApiModel.AsError <ChangeResponse>(null, "no user claims in request, did you forget to set the auth header ?"))); } var user = await userManager.FindByNameAsync(username); if (user == null) { return(Ok(ApiModel.AsError <ChangeResponse>(null, $"impossible to find a user with the username '{username}'"))); } await orderService.AddPayment(order, payment, cancellationToken); if (bindings.Change != 0) { await movementService.CreateAsync(new Movement() { Currency = bindings.ChangeCurrency, Amount = -1 * bindings.Change, User = user.Preview(), UserId = user.Id, Date = DateTime.UtcNow, ShopId = order.ShopId }, cancellationToken); } if (bindings.Amount != 0) { await movementService.CreateAsync(new Movement() { Currency = bindings.AmountCurrency, Amount = bindings.Amount, User = user.Preview(), UserId = user.Id, Date = DateTime.UtcNow, ShopId = order.ShopId }, cancellationToken); } return(Ok(ApiModel.AsSuccess( payment ))); }