public async Task <OperationResult> WithdrawalBalance(int portfolioId, int price, DateTime date) { var portfolio = await _financeDataService.EfContext.Portfolios.FindAsync(portfolioId); var withdrawalAction = await _financeDataService.EfContext.CurrencyActions.FirstOrDefaultAsync(a => a.Name == SeedFinanceData.WITHDRAWAL_ACTION); if (portfolio == null) { return(new OperationResult() { IsSuccess = false, Message = "Портфель не найден" }); } if (price < 0) { return(new OperationResult() { IsSuccess = false, Message = "Нельзя вывести отрицательную сумму" }); } var currentBalanceResult = await GetBalance(portfolioId, portfolio.UserId); if (price > currentBalanceResult.Result) { return(new OperationResult() { IsSuccess = false, Message = "Недостаточно средств" }); } var currencyOperation = new CurrencyOperation() { Portfolio = portfolio, PortfolioId = portfolioId, CurrencyAction = withdrawalAction, CurrencyActionId = withdrawalAction.Id, CurrencyId = SeedFinanceData.RUB_CURRENCY_ID, CurrencyName = SeedFinanceData.RUB_CURRENCY_NAME, Date = date, Price = price }; await _financeDataService.EfContext.CurrencyOperations.AddAsync(currencyOperation); await _financeDataService.EfContext.SaveChangesAsync(); return(new OperationResult() { IsSuccess = true, Message = "Средства выведены успешно" }); }
private int ApplyCurrencyOperation(CurrencyOperation operation, int balance) { if (operation.CurrencyAction.Name == SeedFinanceData.REFILL_ACTION) { balance += operation.Price; } if (operation.CurrencyAction.Name == SeedFinanceData.WITHDRAWAL_ACTION) { balance -= operation.Price; } return(balance); }
//TODO Проверка на нужного пользователя public async Task <OperationResult> RefillBalance(int portfolioId, int price, DateTime date) { var portfolio = await _financeDataService.EfContext.Portfolios.FindAsync(portfolioId); var refillAction = await _financeDataService.EfContext.CurrencyActions.FirstOrDefaultAsync(a => a.Name == SeedFinanceData.REFILL_ACTION); if (portfolio == null) { return(new OperationResult() { IsSuccess = false, Message = "Портфель не найден" }); } if (price < 0) { return(new OperationResult() { IsSuccess = false, Message = "Нельзя пополнить на отрицательную сумму" }); } var currencyOperation = new CurrencyOperation() { Portfolio = portfolio, PortfolioId = portfolioId, CurrencyAction = refillAction, CurrencyActionId = refillAction.Id, CurrencyId = SeedFinanceData.RUB_CURRENCY_ID, CurrencyName = SeedFinanceData.RUB_CURRENCY_NAME, Date = date, Price = price }; await _financeDataService.EfContext.CurrencyOperations.AddAsync(currencyOperation); await _financeDataService.EfContext.SaveChangesAsync(); return(new OperationResult() { IsSuccess = true, Message = $"Баланс пополнен на {FinanceHelpers.GetPriceDouble(price)} ₽ успешно" }); }
public CurrencyOperationNonZero(Strategy parent, float minValue, float maxValue, Currency currency, CurrencyOperation.Operator op, TransactionReasons AffectReasons, string description) : base(parent, minValue, maxValue, currency, op, AffectReasons, description) { }