Example #1
0
        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();
        }
Example #2
0
        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);
        }