Пример #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();
        }
Пример #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);
        }
Пример #3
0
        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);
                }
            }
        }