public async Task <IActionResult> EditExpenseAsync([FromRoute] int groupId, [FromBody] IndividualExpenseAC expense) { var returnValue = await unitOfWork.Expense.EditExpenseAsync(groupId, expense); if (returnValue) { await unitOfWork.SaveAsync(); return(Ok(expense)); } else { return(NotFound("Group or expense not found")); } }
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 <IndividualExpenseAC> GetExpenseByIdAsync(int groupId, int expenseId) { var expense = await _context.GroupExpenseMappers.Where(g => g.GroupID == groupId).Where(g => g.ID == expenseId).Where(g => g.IsDeleted == false).FirstOrDefaultAsync(); var userExpenseData = await _context.UserExpenseMappers.Where(u => u.ExpenseID == expenseId).Where(u => u.Expenses.GroupID == groupId).Where(u => u.Expenses.IsDeleted == false).ToListAsync(); var expenseData = new IndividualExpenseAC { ExpenseID = expense.ID, ExpenseName = expense.Name, Date = expense.Date, TotalAmount = expense.TotalAmount, PayeeID = expense.Payee, SplitType = expense.SplitType, Note = expense.Description, Payer = new List <IncludedUser>() }; foreach (var expenses in userExpenseData) { if (expense.SplitType.Equals("Percentage")) { expenseData.Payer.Add(new IncludedUser { UserID = expenses.FromUser, UserName = _userManager.FindByIdAsync(expenses.FromUser).Result.FullName, Percentage = ((expenses.Amount * 100) / expense.TotalAmount) }); } else { expenseData.Payer.Add(new IncludedUser { UserID = expenses.FromUser, UserName = _userManager.FindByIdAsync(expenses.FromUser).Result.FullName, UserAmount = expenses.Amount }); } } return(expenseData); }
public override void OnActionExecuting(ActionExecutingContext context) { string controllerName = (string)context.RouteData.Values["Controller"]; string actionName = (string)context.RouteData.Values["Action"]; string currentUserId = _userManager.FindByNameAsync(context.HttpContext.User.Identity.Name).Result.Id; if (controllerName.Equals("Group")) { List <Group> groupList = _context.Groups.ToList(); if (actionName.Equals("EditGroupAsync")) { UserGroupAC model = context.ActionArguments["group"] as UserGroupAC; if (currentUserId.Equals(model.CreatedByID)) { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Accepted; } else { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized; context.Result = new EmptyResult(); } } else if (actionName.Equals("DeleteGroupAsync")) { int groupId = (int)context.ActionArguments["groupId"]; if ((groupList.Where(g => g.ID == groupId).Select(g => g.CreatedBy).FirstOrDefault()).Equals(currentUserId)) { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Accepted; } else { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized; context.Result = new EmptyResult(); } } } else if (controllerName.Equals("Expense")) { if (actionName.Equals("EditExpenseAsync")) { int groupId = (int)context.ActionArguments["groupId"]; IndividualExpenseAC expense = context.ActionArguments["expense"] as IndividualExpenseAC; if (expense.Payer.Any(p => p.UserID.Equals(currentUserId))) { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Accepted; } else { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized; context.Result = new EmptyResult(); } } else if (actionName.Equals("RemoveExpenseAsync")) { int groupId = (int)context.ActionArguments["groupId"]; int expenseId = (int)context.ActionArguments["expenseId"]; List <string> payersId = _context.UserExpenseMappers.Where(e => e.ExpenseID == expenseId).Select(e => e.FromUser).ToList(); if (payersId.Contains(currentUserId)) { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Accepted; } else { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized; context.Result = new EmptyResult(); } } else if (actionName.Equals("SettlementAsync")) { SettlementAC settlement = context.ActionArguments["settlement"] as SettlementAC; if (settlement.Payee.Equals(currentUserId) || settlement.Payer.Equals(currentUserId)) { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Accepted; } else { context.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.Unauthorized; context.Result = new EmptyResult(); } } } base.OnActionExecuting(context); }