public async Task NotifyTransferWiseEvent(string authorizationCode, int resourceId) { using (var context = GetMainContext()) { string token = context.PaymentProviderAccounts.WhereUser(UserId).FirstOrDefault().Token; using (var httpClient = new HttpClient()) { var request = new HttpRequestMessage(HttpMethod.Get, $"https://api.transferwise.com/v1/transfers/{resourceId}"); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); var response = await httpClient.SendAsync(request); var responseText = await response.Content.ReadAsStringAsync(); var transfer = JsonConvert.DeserializeObject <Model.Services.TrasnferWise.Transfer>(responseText); var expense = new Model.Database.Main.Finance.Expense() { ValueId = context.Expenses.NextValueId(UserId).ToString(), Date = DateTime.Now, ExpenseTypeId = 1, Amount = transfer.TargetValue, Comment = transfer.Status, CurrencyId = context.GetCurrencyId(transfer.TargetCurrency, UserId), NeedsReview = true, UserId = 1002 }; if (transfer.TargetCurrency != transfer.SourceCurrency) { expense.ParentCurrencyId = context.GetCurrencyId(transfer.SourceCurrency, UserId); expense.ParentCurrencyExchangeRate = 1 / transfer.Rate; } context.Expenses.Add(expense); await context.SaveChangesAsync(); } } }
private void ResolveTransaction(MainContext context, Model.Database.Main.Finance.Expense expense) { if (expense.Transaction is not null) { context.Transactions.Remove(expense.Transaction); } if (expense.PaymentTypeId == (int)Model.Constants.Database.PaymentType.Cash) { int?accountId = context.Accounts.SingleOrDefault(x => !x.BankId.HasValue && x.CurrencyId == expense.CurrencyId)?.Id; if (accountId.HasValue) { var transaction = new Model.Database.Main.Finance.Transaction() { AccountId = accountId.Value, Amount = expense.Amount, Created = expense.Date }; expense.Transaction = transaction; context.Transactions.Add(transaction); } } }