public async Task SettlementAsync(SettlementAC settlement) { List <Activity> activities = new List <Activity>(); UserExpenseMapper expense = new UserExpenseMapper(); string groupName = ""; if (settlement.GroupID != 0) { groupName = await _context.Groups.Where(g => g.ID == settlement.GroupID).Select(g => g.Name).FirstOrDefaultAsync(); expense = await _context.UserExpenseMappers.Where(u => u.Expenses.GroupID == settlement.GroupID).Where(u => u.FromUser.Equals(settlement.Payer) && u.Expenses.Payee.Equals(settlement.Payee)).Include(u => u.Expenses).FirstOrDefaultAsync(); } else { expense = await _context.UserExpenseMappers.Where(u => u.Expenses.GroupID == null).Where(u => u.FromUser.Equals(settlement.Payer) && u.Expenses.Payee.Equals(settlement.Payee)).Include(u => u.Expenses).FirstOrDefaultAsync(); } if (expense.Amount >= settlement.Amount) { expense.Amount -= settlement.Amount; } if (settlement.GroupID != 0) { activities.Add(new Activity { UserID = settlement.Payer, Date = settlement.SettlementDate, Description = $"You paid {settlement.Amount} to {_userManager.FindByIdAsync(settlement.Payee).Result.FullName} in {groupName}" }); activities.Add(new Activity { UserID = settlement.Payee, Date = settlement.SettlementDate, Description = $"{_userManager.FindByIdAsync(settlement.Payer).Result.FullName} paid {settlement.Amount} to you in {groupName}" }); } else { activities.Add(new Activity { UserID = settlement.Payer, Date = settlement.SettlementDate, Description = $"You paid {settlement.Amount} to {_userManager.FindByIdAsync(settlement.Payee).Result.FullName}" }); activities.Add(new Activity { UserID = settlement.Payee, Date = settlement.SettlementDate, Description = $"{_userManager.FindByIdAsync(settlement.Payer).Result.FullName} paid {settlement.Amount} to you" }); } await _context.Activities.AddRangeAsync(activities); _context.UserExpenseMappers.Update(expense); await SaveAsync(); }
public async Task <Boolean> EditExpenseAsync(int groupId, IndividualExpenseAC expense) { var groupExpense = await _context.GroupExpenseMappers.Where(g => g.GroupID == groupId).FirstOrDefaultAsync(); var userExpenses = await _context.UserExpenseMappers.Where(u => u.Expenses.GroupID == groupId).Where(u => u.ExpenseID == expense.ExpenseID).ToListAsync(); if (groupExpense != null) { groupExpense.Name = expense.ExpenseName; groupExpense.Date = expense.Date; groupExpense.TotalAmount = expense.TotalAmount; groupExpense.SplitType = expense.SplitType; groupExpense.Payee = expense.PayeeID; groupExpense.Description = expense.Note; _context.GroupExpenseMappers.Update(groupExpense); _context.UserExpenseMappers.RemoveRange(userExpenses); await _context.SaveChangesAsync(); foreach (var user in expense.Payer) { if (user.Percentage == null) { UserExpenseMapper userExpenseMapper = new UserExpenseMapper { ExpenseID = groupExpense.ID, FromUser = user.UserID, Amount = user.UserAmount }; await _context.UserExpenseMappers.AddAsync(userExpenseMapper); } else { UserExpenseMapper userExpenseMapper = new UserExpenseMapper { ExpenseID = groupExpense.ID, FromUser = user.UserID, Amount = ((expense.TotalAmount * user.Percentage) / 100) }; await _context.UserExpenseMappers.AddAsync(userExpenseMapper); } } return(true); } return(false); }
public async Task CreateExpenseAsync(int groupId, string currentUserId, CreateExpenseAC expense) { Activity activity = new Activity(); var currentGroupName = await _context.Groups.Where(g => g.ID == groupId).Select(g => g.Name).FirstOrDefaultAsync(); GroupExpenseMapper groupExpenseMapper = new GroupExpenseMapper(); groupExpenseMapper.Name = expense.Name; groupExpenseMapper.SplitType = expense.SplitType; if (groupId == 0) { groupExpenseMapper.Payee = _userManager.FindByIdAsync(expense.Payee).Result.Id; } else { groupExpenseMapper.GroupID = groupId; groupExpenseMapper.Payee = expense.Payee; } groupExpenseMapper.TotalAmount = expense.Amount; groupExpenseMapper.Date = expense.Date; groupExpenseMapper.Description = expense.Note; groupExpenseMapper.IsDeleted = false; groupExpenseMapper.IsSettled = false; activity.UserID = currentUserId; activity.Date = DateTime.Now; activity.Description = $"You created the expense {groupExpenseMapper.Name} in {currentGroupName}"; await _context.Activities.AddAsync(activity); await _context.GroupExpenseMappers.AddAsync(groupExpenseMapper); foreach (var expenses in expense.IncludedUsers) { if (expenses.Percentage == null) { UserExpenseMapper userExpenseMapper = new UserExpenseMapper(); userExpenseMapper.ExpenseID = groupExpenseMapper.ID; if (expenses.UserID == null) { userExpenseMapper.FromUser = _userManager.FindByNameAsync(expenses.UserName).Result.Id; } else { userExpenseMapper.FromUser = expenses.UserID; } if (expense.SplitType.Equals("Equal")) { userExpenseMapper.Amount = (expense.Amount / expense.IncludedUsers.Count()); } else { userExpenseMapper.Amount = expenses.UserAmount; } await _context.UserExpenseMappers.AddAsync(userExpenseMapper); } else { UserExpenseMapper userExpenseMapper = new UserExpenseMapper(); userExpenseMapper.ExpenseID = groupExpenseMapper.ID; if (expenses.UserID == null) { userExpenseMapper.FromUser = _userManager.FindByNameAsync(expenses.UserName).Result.Id; } else { userExpenseMapper.FromUser = expenses.UserID; } userExpenseMapper.Amount = ((expense.Amount * expenses.Percentage) / 100); await _context.UserExpenseMappers.AddAsync(userExpenseMapper); } } }