public void GetBalances_SplitsExpensesBetweenAll() { var userA = CreateSettlementUser(); var userB = CreateSettlementUser(); var userC = CreateSettlementUser(); var users = new[] { userA, userB, userC }; _settlementUsersRepository.GetSettlementUsers(_settlementId) .Returns(users); var expenses = new[] { new Expense { WhoPaid = userA, Amount = 9 } }; _expensesRepository.GetExpenses(_settlementId) .Returns(expenses); var provider = CreateBalancesProvider(); var balances = provider.GetBalances(_settlementId); Assert.Collection(balances, item => Assert.Equal(6M, item.Balance), item => Assert.Equal(-3M, item.Balance), item => Assert.Equal(-3M, item.Balance) ); }
public IReadOnlyList <UserBalance> GetBalances(string settlementId) { var expenses = _expensesRepository.GetExpenses(settlementId).ToList(); var expensesSumByWhoPaid = expenses .GroupBy(e => e.WhoPaid.Id) .ToDictionary(g => g.Key, g => g.Sum(e => e.Amount)); var settlementUsers = _settlementUsersRepository.GetSettlementUsers(settlementId) .ToList(); var usersCount = settlementUsers.Count(); var expensesSumByParticipant = settlementUsers .ToDictionary(u => u.Id, u => Round(expenses .Where(e => e.Participants.IsNullOrEmpty() || e.Participants.Any(p => p.Id == u.Id)) .Sum(e => e.Amount / (e.Participants.IsNullOrEmpty() ? usersCount : e.Participants.Count)))); var transactions = _transactionsRepository.GetTransactions(settlementId) .ToList(); var outgoingTransactionsSumByUser = transactions .GroupBy(t => t.From.Id) .ToDictionary(g => g.Key, g => g.Sum(t => t.Amount)); var incomingTransactionsSumByUser = transactions .GroupBy(t => t.To.Id) .ToDictionary(g => g.Key, g => g.Sum(t => t.Amount)); return(settlementUsers .Select(u => new UserBalance { User = u, Balance = expensesSumByWhoPaid.GetValueOrDefault(u.Id, 0) - expensesSumByParticipant.GetValueOrDefault(u.Id, 0) + outgoingTransactionsSumByUser.GetValueOrDefault(u.Id, 0) - incomingTransactionsSumByUser.GetValueOrDefault(u.Id, 0) }) .ToList()); }
public async Task <IActionResult> Index(int Id) { if (Id == 0) { Id = CashAccount_Id; } else { CashAccount_Id = Id; } var accessToken = await HttpContext.GetTokenAsync("access_token"); var content = await _expensesRepository.GetExpenses( "https://localhost:44382/Expenses/Get?id=" + Id.ToString(), accessToken); List <ExpensesViewModel> expensesViewModels = new List <ExpensesViewModel>(); if (content == null) { return(View(expensesViewModels)); } else { var expenses = _expensesRepository.DeseralizeExpenses(content); expensesViewModels = _mapper.Map <List <ExpensesJsonModel>, List <ExpensesViewModel> >(expenses); return(View(expensesViewModels)); } }
public async Task <IActionResult> GetExpenses() { var expenses = await _repo.GetExpenses(); var expensesToReturn = _mapper.Map <IEnumerable <ExpensesForListDto> >(expenses); return(Ok(expensesToReturn)); }
public async Task <IHttpActionResult> Get() { try { List <ExpensesModel> result = _repository.GetExpenses(); return(Ok(result)); } catch (Exception ex) { return(InternalServerError(ex)); } }
public IEnumerable <Expense> Get( [FromQuery(Name = "startDate")] DateTime startDate, [FromQuery(Name = "endDate")] DateTime endDate, [FromQuery(Name = "expenseType")] int expenseType) { // If no relevent month is set, use current month if (startDate.Year < 2000) { startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); var tempDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month + 1, 1); endDate = tempDate - TimeSpan.FromDays(1); } return(expensesRepository.GetExpenses(startDate, endDate, expenseType)); }
public IEnumerable <Expense> Get() { return(_expenses.GetExpenses()); }
public IEnumerable <Expenses> GetExpenses() { return(_expensesRepository.GetExpenses()); }
public ActionResult GetAll(string settlementId) { return(Ok(_expensesRepository.GetExpenses(settlementId))); }
public async ValueTask <bool> IsEmptyCategory(Guid categoryId) { var expenses = await _expenseRepo.GetExpenses(null, null); return(!expenses.Any(e => e.CategoryId == categoryId)); }