コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: ListBillCommand.cs プロジェクト: Flave229/SaltVault
        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);
        }