public GetBillListResponse GetBillList(int?id, int?page, int?resultsPerPage) { var response = new GetBillListResponse(); try { if (_userService.AuthenticateSession(Request.Headers["Authorization"].ToString()) == false) { response.AddError("The authorization credentails were invalid", Request.Headers["Authorization"].ToString(), ErrorCode.SESSION_INVALID); return(response); } ActiveUser user = _userService.GetUserInformationFromAuthHeader(Request.Headers["Authorization"].ToString()); if (user.HouseId == 0) { response.AddError("You must belong to a household to get bills", ErrorCode.USER_NOT_IN_HOUSEHOLD); return(response); } _recurringBillWorker.GenerateNextMonthsBills(user.HouseId); if (id == null) { Pagination pagination = new Pagination { Page = page ?? 0, ResultsPerPage = resultsPerPage ?? int.MaxValue }; response.Bills = _billRepository.GetAllBasicBillDetails(pagination, user.HouseId); } else { response.Bills.Add(_billRepository.GetBasicBillDetails((int)id, user.HouseId)); } } catch (ErrorCodeException exception) { response.AddError($"An unexpected exception occured: {exception}", exception.Code); } catch (Exception exception) { response.AddError($"An unexpected exception occured: {exception}", id); } return(response); }
public void GenerateNextMonthsBills(int houseId) { // Only works for first household var bills = _billRepository.GetAllBasicBillDetails(new Pagination { Page = 0, ResultsPerPage = int.MaxValue }, houseId); var recurringBills = bills.Where(bill => bill.RecurringType == RecurringType.Monthly); foreach (var recurringBill in recurringBills) { if (recurringBill.FullDateDue > DateTime.Today) { continue; } var billUpdateRequest = new UpdateBill { Id = recurringBill.Id, RecurringType = RecurringType.None }; _billRepository.UpdateBill(billUpdateRequest); var addBillRequest = new AddBill { Due = recurringBill.FullDateDue.AddMonths(1), RecurringType = RecurringType.Monthly, Name = recurringBill.Name, PeopleIds = recurringBill.People.Select(person => person.Id).ToList(), TotalAmount = recurringBill.TotalAmount, HouseId = houseId }; _billRepository.AddBill(addBillRequest); } }
public void ExecuteCommand(List <string> subCommands) { // Only works for first household var allBills = _billRepository.GetAllBasicBillDetails(new Pagination { Page = 0, ResultsPerPage = int.MaxValue }, 1); var outstandingBills = allBills.Where(x => x.AmountPaid < x.TotalAmount).ToList(); outstandingBills.Reverse(); if (subCommands.Count > 0) { var discordUserId = subCommands[0].Replace("<", "").Replace("@", "").Replace(">", ""); var discordUser = _peopleRepository.GetPersonFromDiscordId(discordUserId); outstandingBills = outstandingBills.Where(x => x.People.Any(y => y.Id == discordUser.Id)).ToList(); var billsForDiscordUser = new List <Bill>(); foreach (var bill in outstandingBills) { var paymentsForUser = bill.Payments.Where(x => x.Person.Id == discordUser.Id); var totalPaid = paymentsForUser.Sum(x => x.Amount); if (totalPaid + 0.01m < bill.TotalAmount / bill.People.Count) { billsForDiscordUser.Add(bill); } } if (billsForDiscordUser.Count == 0) { _discordService.SendMessage(new DiscordMessage { content = "You have no outstanding bills!" }); return; } var discordMessage = new DiscordMessage { embed = new DiscordMessageEmbed { author = new DiscordMessageAuthor { icon_url = discordUser.Image, name = discordUser.FirstName + " " + discordUser.LastName }, title = "Outstanding Bills For " + discordUser.FirstName + " " + discordUser.LastName, fields = billsForDiscordUser.Select(x => new DiscordMessageField { name = x.Name, value = $"`[{x.FullDateDue:MMM dd}]` £{x.TotalAmount}" }).ToList() } }; _discordService.SendMessage(discordMessage); return; } if (outstandingBills.Count == 0) { _discordService.SendMessage(new DiscordMessage { content = "You have no outstanding bills!" }); return; } var discordMessage2 = new DiscordMessage { embed = new DiscordMessageEmbed { author = new DiscordMessageAuthor { icon_url = "https://127xwr2qcfsvmn8a91nbd428-wpengine.netdna-ssl.com/wp-content/uploads/2013/01/Pile-of-salt.jpg", name = "Salt Automaton" }, title = "Outstanding Bills For All Users", fields = outstandingBills.Select(x => new DiscordMessageField { name = $"{x.Name} - {x.FullDateDue:dd MMMM}", value = $"£{x.TotalAmount}" }).ToList() } }; _discordService.SendMessage(discordMessage2); }