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