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 <IActionResult> SettlementAsync([FromBody] SettlementAC settlement) { await unitOfWork.Expense.SettlementAsync(settlement); return(Ok(settlement)); }
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); }