public void MakePaymentTest()
        {
            Guid id = Guid.NewGuid();

            IncomeAndExpenditure iAndE = new IncomeAndExpenditure()
            {
                HousingStatus    = "housing-status",
                EmploymentStatus = "employment-status"
            };

            BudgetSummary   budgetSummary   = new BudgetSummary();
            BudgetSummaryVm budgetSummaryVm = new BudgetSummaryVm();

            this._sessionState.Setup(x => x.GetIncomeAndExpenditure(id)).Returns(iAndE);
            this._budgetCalculatorService.Setup(x => x.GetBudgetSummary(
                                                    iAndE, id, this._caseflowUserId)).Returns(budgetSummary);
            this._mapper.Setup(x => x.Map <BudgetSummary, BudgetSummaryVm>(budgetSummary)).Returns(budgetSummaryVm);

            this._gtmService.Setup(x => x.RaiseBudgetCalculatorContinuedToPaymentEvent(
                                       budgetSummaryVm, this._caseflowUserId, "employment-status", "housing-status"));

            RedirectToActionResult result = (RedirectToActionResult)this._controller.MakePayment(id);

            Assert.AreEqual("Index", result.ActionName);
            Assert.AreEqual("PaymentOptions", result.ControllerName);
            Assert.AreEqual(id, result.RouteValues["id"]);
        }
        public void Constructor_ValidModel_ExpectPresentation()
        {
            var budget = BudgetBuilder.Build();
            var ratios = new BudgetRatio(budget);

            var summary = new BudgetSummary(budget, ratios);

            summary.HousingGroupWidth.Should().Be(summary.Width);
            summary.TransportationGroupWidth.Should().Be(summary.Width);
            summary.FoodGroupWidth.Should().Be(summary.Width);
            summary.PersonalGroupWidth.Should().Be(summary.Width);
            summary.GivingGroupWidth.Should().Be(summary.Width);
            summary.DebtGroupWidth.Should().Be(summary.Width);

            summary.TransportationGroupOffset.Should().Be(summary.HousingGroupWidth);
            summary.FoodGroupOffset.Should().Be(summary.TransportationGroupOffset + summary.TransportationGroupWidth);
            summary.PersonalGroupOffset.Should().Be(summary.FoodGroupOffset + summary.FoodGroupWidth);
            summary.GivingGroupOffset.Should().Be(summary.PersonalGroupOffset + summary.PersonalGroupWidth);
            summary.DebtGroupOffset.Should().Be(summary.GivingGroupOffset + summary.GivingGroupWidth);

            summary.BudgetDelta.Should().Be(0m);
            summary.IsOverBudget.Should().Be(false);
            summary.IsUnderBudget.Should().Be(false);
            summary.IsOnBudget.Should().Be(true);
        }
Example #3
0
        private BudgetSummary CreateBudgetSummary(MonthlyIncome monthlyIncome, MonthlyOutgoings monthlyExpenses, decimal disosableIncome, IncomeAndExpenditure iAndE, bool anonUser)
        {
            var budgetSummary = new BudgetSummary();

            budgetSummary.IncomeTotal      = monthlyIncome.Total;
            budgetSummary.Salary           = monthlyIncome.Salary;
            budgetSummary.Benefits         = monthlyIncome.Benefits;
            budgetSummary.Pension          = monthlyIncome.Pension;
            budgetSummary.Other            = monthlyIncome.Other;
            budgetSummary.TotalExpenditure = monthlyExpenses.Total;
            budgetSummary.HouseholdBills   = monthlyExpenses.HouseholdBills;
            budgetSummary.Expenditure      = monthlyExpenses.Expenditures;
            budgetSummary.DisposableIncome = disosableIncome;
            budgetSummary.Frequency        = "monthly";
            budgetSummary.AnonUser         = anonUser;

            if (iAndE != null && (iAndE.RentalArrears > 0 ||
                                  iAndE.CCJsArrears > 0 ||
                                  iAndE.ChildMaintenanceArrears > 0 ||
                                  iAndE.CouncilTaxArrears > 0 ||
                                  iAndE.CourtFinesArrears > 0 ||
                                  iAndE.ElectricityArrears > 0 ||
                                  iAndE.GasArrears > 0 ||
                                  iAndE.MortgageArrears > 0 ||
                                  iAndE.OtherUtilitiesArrears > 0 ||
                                  iAndE.RentArrears > 0 ||
                                  iAndE.SecuredloansArrears > 0 ||
                                  iAndE.TvLicenceArrears > 0 ||
                                  iAndE.WaterArrears > 0))
            {
                budgetSummary.PriorityBillsInArrears = true;
            }

            return(budgetSummary);
        }
        public void PropertyChanged_AnyBudgetItemAmountChanged_ExpectABunchOfEvents()
        {
            var budget    = BudgetBuilder.Build();
            var ratios    = Substitute.ForPartsOf <BudgetRatio>(budget);
            var summary   = new BudgetSummary(budget, ratios);
            var viewModel = new BudgetSummaryViewModel(summary);

            List <string> expectedPropertyNames = new List <string>()
            {
                nameof(BudgetSummaryViewModel.HousingGroupWidth),
                nameof(BudgetSummaryViewModel.TransportationGroupWidth),
                nameof(BudgetSummaryViewModel.FoodGroupWidth),
                nameof(BudgetSummaryViewModel.PersonalGroupWidth),
                nameof(BudgetSummaryViewModel.DebtGroupWidth),
                nameof(BudgetSummaryViewModel.GivingGroupWidth),
                nameof(BudgetSummaryViewModel.TransportationGroupOffset),
                nameof(BudgetSummaryViewModel.FoodGroupOffset),
                nameof(BudgetSummaryViewModel.PersonalGroupOffset),
                nameof(BudgetSummaryViewModel.DebtGroupOffset),
                nameof(BudgetSummaryViewModel.GivingGroupOffset),
            };

            List <string> receivedPropertyNames = new List <string>();

            viewModel.PropertyChanged += (o, e) => { receivedPropertyNames.Add(e.PropertyName); };

            budget.IncomeGroup.BudgetItems[0].Amount = 100;

            receivedPropertyNames.Should().Contain(expectedPropertyNames);
        }
        public void Constructor_ValidModel_ExpectPresentation()
        {
            var budget  = BudgetBuilder.Build();
            var ratios  = new BudgetRatio(budget);
            var summary = new BudgetSummary(budget, ratios);

            var viewModel = new BudgetSummaryViewModel(summary);

            viewModel.Width.Should().Be(summary.Width);
            viewModel.HousingGroupWidth.Should().Be(summary.HousingGroupWidth);
            viewModel.TransportationGroupWidth.Should().Be(summary.TransportationGroupWidth);
            viewModel.FoodGroupWidth.Should().Be(summary.FoodGroupWidth);
            viewModel.PersonalGroupWidth.Should().Be(summary.PersonalGroupWidth);
            viewModel.GivingGroupWidth.Should().Be(summary.GivingGroupWidth);
            viewModel.DebtGroupWidth.Should().Be(summary.DebtGroupWidth);

            viewModel.TransportationGroupOffset.Should().Be(summary.TransportationGroupOffset);
            viewModel.FoodGroupOffset.Should().Be(summary.FoodGroupOffset);
            viewModel.PersonalGroupOffset.Should().Be(summary.PersonalGroupOffset);
            viewModel.GivingGroupOffset.Should().Be(summary.GivingGroupOffset);
            viewModel.DebtGroupOffset.Should().Be(summary.DebtGroupOffset);

            viewModel.BudgetDelta.Should().Be(summary.BudgetDelta.ToCurrencyString());
            viewModel.IsOverBudget.Should().Be(summary.IsOverBudget);
            viewModel.IsUnderBudget.Should().Be(summary.IsUnderBudget);
            viewModel.IsOnBudget.Should().Be(summary.IsOnBudget);
        }
Example #6
0
            public void ClearsCategoryBudgets()
            {
                // Act.
                BudgetSummary actual = new BudgetSummary(this.budget);

                // Assert.
                Assert.IsNotNull(actual.Category.Budgets, "The list of budgets for the category should not be null.");
                Assert.AreEqual(0, actual.Category.Budgets.Count(), "The list of budgets for the category should be empty.");
            }
Example #7
0
 public TransactionsAdder(API ynabApi, BudgetSummary budget, YNAB.SDK.Model.Account account)
 {
     this.ynabApi       = ynabApi;
     this.budget        = budget;
     this.account       = account;
     progress           = new StringBuilder();
     updateTransactions = new List <UpdateTransaction>();
     saveTransactions   = new List <SaveTransaction>();
 }
Example #8
0
        public void GetBudgetSummaryByIdIsSuccessful()
        {
            Budget budget = budgetService.CreateBudget(budgetRequest);

            var           result      = controller.GetBudgetSummaryById(budget.BudgetId);
            BudgetSummary resultValue = (BudgetSummary)result.Value;

            Assert.Equal(budget.BudgetId, resultValue.BudgetId);
            Assert.Equal(budget.Amount, resultValue.Amount);
        }
Example #9
0
            public void CalculatesBalance()
            {
                // Act.
                BudgetSummary actual = new BudgetSummary(this.budget);

                // Assert.
                decimal expected = this.budget.TransactionItems.Sum(ti => ti.Amount);

                Assert.AreEqual(expected, actual.Balance, "The value for the balance should be correct.");
            }
        public void HousingGroupWidth_VariousWidthsAndRatios_MatchesExpectResult()
        {
            double ratio   = 0.5;
            var    budget  = BudgetBuilder.Build();
            var    ratios  = Substitute.ForPartsOf <BudgetRatio>(budget);
            var    summary = new BudgetSummary(budget, ratios);

            ratios.HousingGroupRatio.Returns(ratio);
            summary.HousingGroupWidth.Should().Be(summary.Width * ratio);
        }
Example #11
0
            public void SetsBalanceToZeroWhenNoTransactionItems()
            {
                // Arrange.
                this.budget.TransactionItems = null;

                // Act.
                BudgetSummary actual = new BudgetSummary(this.budget);

                // Assert.
                Assert.AreEqual(0, actual.Balance, "The value for the balance should be zero.");
            }
        public JsonResult GetBudgetSummary(Budget budget)
        {
            var budgetsummary = new BudgetSummary();

            budgetsummary.ExpectedIncome = db.Budgets.Find(budget.BudgetID).ExpectedIncome;
            budgetsummary.Expenditures   = db.BudgetCategories.Where(bc => bc.BudgetID == budget.BudgetID).Sum(bc => bc.Amount);
            budgetsummary.Goals          = db.Goals.Where(g => g.BudgetID == budget.BudgetID).Sum(g => g.GoalAmount);
            budgetsummary.Remaining      = budgetsummary.ExpectedIncome - budgetsummary.Expenditures - budgetsummary.Goals;

            return(Json(budgetsummary));
        }
Example #13
0
        public ActionResult <BudgetSummary> GetBudgetSummary()
        {
            string loggedUser = User.FindFirstValue("userId");

            if (loggedUser == null)
            {
                return(Unauthorized());
            }

            BudgetSummary budget = budgetService.GetBudgetSummary();

            return(budget);
        }
Example #14
0
            public void CopiesMainProperties()
            {
                // Act.
                BudgetSummary actual = new BudgetSummary(this.budget);

                // Assert.
                Assert.AreEqual(this.budget.Id, actual.Id, "The values for ID should match.");
                Assert.AreEqual(this.budget.Name, actual.Name, "The values for Name should match.");
                Assert.AreEqual(this.budget.CategoryId, actual.CategoryId, "The values for CategoryId should match.");
                Assert.AreEqual(this.budget.Category, actual.Category, "The values for Category should match.");
                Assert.AreEqual(this.budget.UserId, actual.UserId, "The values for UserId should match.");
                Assert.AreEqual(this.budget.User, actual.User, "The values for User should match.");
            }
        public void HousingGroupWidth_MoreWidthsAndRatios_MatchesExpectResult()
        {
            var budget  = BudgetBuilder.Build();
            var ratios  = new BudgetRatio(budget);
            var summary = new BudgetSummary(budget, ratios);

            budget.IncomeGroup.BudgetItems[0].Amount  = 100;
            budget.HousingGroup.BudgetItems[0].Amount = 75;
            budget.FoodGroup.BudgetItems[0].Amount    = 25;

            summary.HousingGroupWidth.Should().Be(summary.Width * 0.75);
            summary.FoodGroupWidth.Should().Be(summary.Width * 0.25);
            summary.FoodGroupOffset.Should().Be(summary.HousingGroupWidth);
        }
        public async Task BudgetSummary()
        {
            string id = Guid.NewGuid().ToString();

            this._controller.RouteData.Values.Add("id", id);
            this._portalSettings.Features.EnablePartialSave = true;

            IncomeAndExpenditure iAndE = new IncomeAndExpenditure()
            {
                EmploymentStatus = "employment-status",
                HousingStatus    = "housing-status",
            };

            string lowellReference = "123456789";

            this._sessionState.Setup(x => x.CheckSessionStatus(id));
            this._sessionState.Setup(x => x.GetIncomeAndExpenditure(Guid.Parse(id))).Returns(iAndE);
            this._sessionState.Setup(x => x.GetLowellReferenceFromSurrogate(Guid.Parse(id)))
            .Returns(lowellReference);

            BudgetSummary budgetSummary = new BudgetSummary()
            {
                IncomeTotal = 5000
            };
            BudgetSummaryVm budgetSummaryVm = new BudgetSummaryVm()
            {
                IncomeTotal = 5000
            };

            this._budgetCalculatorService.Setup(x => x.GetBudgetSummary(
                                                    iAndE, Guid.Parse(id), this._caseflowUserId)).Returns(budgetSummary);
            this._mapper.Setup(x => x.Map <BudgetSummary, BudgetSummaryVm>(budgetSummary)).Returns(budgetSummaryVm);

            this._gtmService.Setup(x => x.RaiseBudgetCalculatorCompletedEvent(
                                       budgetSummaryVm, this._caseflowUserId, "employment-status", "housing-status"));

            this._budgetCalculatorService.Setup(x => x.SaveIncomeAndExpenditure(iAndE, lowellReference))
            .Returns(Task.CompletedTask);
            this._budgetCalculatorService.Setup(x => x.RemovePartialSaved(Guid.Parse(this._caseflowUserId)))
            .Returns(Task.CompletedTask);

            this._sessionState.Setup(x => x.IandELaunchedExternally).Returns(true);

            ViewResult result = (ViewResult)await this._controller.BudgetSummary();

            Assert.AreEqual(budgetSummaryVm, result.Model);
            Assert.IsTrue(budgetSummaryVm.IsSaved);
            Assert.IsTrue(budgetSummaryVm.ExternallyLaunched);
        }
        public void Width_Set_ExpectSetAndUsedInRatio()
        {
            var budget    = BudgetBuilder.Build();
            var ratios    = Substitute.ForPartsOf <BudgetRatio>(budget);
            var summary   = new BudgetSummary(budget, ratios);
            var viewModel = new BudgetSummaryViewModel(summary);

            ratios.HousingGroupRatio.Returns(1);//what is the difference of using Configure or not
            double width = 200;

            viewModel.Width = width;

            viewModel.Width.Should().Be(width);
            viewModel.HousingGroupWidth.Should().Be(width);
        }
        public void Width_Set_ExpectSetAndUsedInRatios()
        {
            var budget  = BudgetBuilder.Build();
            var ratios  = Substitute.ForPartsOf <BudgetRatio>(budget);
            var summary = new BudgetSummary(budget, ratios);

            ratios.HousingGroupRatio.Returns(1);
            double width = 200;

            // TEST: new width
            summary.Width = width;

            summary.Width.Should().Be(width);
            summary.HousingGroupWidth.Should().Be(width);
        }
        public void GetBudgetSummaryTest()
        {
            IncomeAndExpenditure iAndE         = new IncomeAndExpenditure();
            Guid   lowellReferenceSurrogateKey = Guid.NewGuid();
            string loggedInUserId = Guid.NewGuid().ToString();

            MonthlyIncome monthlyIncome = new MonthlyIncome()
            {
                Benefits = 100,
                Other    = 200,
                Pension  = 300,
                Salary   = 2400,
                Total    = 3500
            };

            MonthlyOutgoings monthlyOutgoings = new MonthlyOutgoings()
            {
                Expenditures   = 1000,
                HouseholdBills = 2000,
                Total          = 3000
            };

            decimal disposableIncome = 500;

            this._calculatorService.Setup(x => x.CalculateMonthlyIncome(iAndE)).Returns(monthlyIncome);
            this._calculatorService.Setup(x => x.CalculateMonthlyOutgoings(iAndE)).Returns(monthlyOutgoings);
            this._calculatorService.Setup(x => x.CalculateDisposableIncome(3500, 3000)).Returns(disposableIncome);

            BudgetSummary expected = new BudgetSummary()
            {
                IncomeTotal            = 3500,
                Salary                 = 2400,
                Benefits               = 100,
                Pension                = 300,
                Other                  = 200,
                TotalExpenditure       = 3000,
                HouseholdBills         = 2000,
                Expenditure            = 1000,
                DisposableIncome       = 500,
                Frequency              = "monthly",
                AnonUser               = false,
                PriorityBillsInArrears = false
            };

            BudgetSummary result = this._budgetCalculatorService.GetBudgetSummary(iAndE, lowellReferenceSurrogateKey, loggedInUserId);

            Assert.IsTrue(Utilities.DeepCompare(expected, result));
        }
Example #20
0
        public Form1()
        {
            InitializeComponent();

            // Configure API key authorization: bearer
            Configuration.ApiKey.Add("Authorization", "YOUR_API_KEY_HERE");
            // Setup prefix (e.g. Bearer) for API key
            Configuration.ApiKeyPrefix.Add("Authorization", "Bearer");

            BudgetsApi budgetApi = new BudgetsApi();
            var        budgets   = budgetApi.GetBudgets();

            _selectedBudget = budgets.Data.Budgets[0];

            this.Text = $"YNAB Statistics - {_selectedBudget.Name}";
        }
Example #21
0
        public void GetBudgetSummaryIsSuccessfulWithNoConsumptions()
        {
            dbContext.Database.ExecuteSqlRaw("DELETE FROM consumptions");

            Budget budget = budgetService.CreateBudget(budgetRequest);

            int id = budget.BudgetId;

            budget = dbContext.Budgets.Where(b => b.BudgetId == id).FirstOrDefault();
            Assert.NotNull(budget);

            budget = budgetService.GetCurrentBudget();

            BudgetSummary summary = budgetService.GetBudgetSummary();

            Assert.Equal(0, summary.TotalSpent);
            Assert.Equal(budget.Amount, summary.Amount);
        }
Example #22
0
        public ActionResult <BudgetSummary> GetBudgetSummaryById(int budgetId)
        {
            string loggedUser = User.FindFirstValue("userId");

            if (loggedUser == null)
            {
                return(Unauthorized());
            }

            try
            {
                BudgetSummary summary = budgetService.GetBudgetSummaryById(budgetId);
                return(summary);
            }
            catch (SkrillaApiException e)
            {
                return(NotFound(e.Message));
            }
        }
Example #23
0
            public void ReturnsBudgetTotalsFromContext()
            {
                // Act.
                List <BudgetSummary> actualList;

                using (CheckbookContext context = new CheckbookContext(this.dbContextOptions))
                {
                    BudgetsRepository repository = new BudgetsRepository(context);
                    actualList = repository.GetTotals(this.userId).ToList();
                }

                // Assert.
                Assert.AreEqual(this.entities.Count(), actualList.Count(), "The entity count should match.");

                BudgetSummary expected = new BudgetSummary(this.entities.ElementAt(0));
                BudgetSummary actual   = actualList.ElementAt(0);
                string        index    = "first";

                Assert.AreNotEqual(0, actual.Balance, "The current total should not be zero.");
                Assert.AreEqual(expected.Balance, actual.Balance, $"The current total for the {index} entity should match.");
            }
Example #24
0
        public void GetBudgetSummaryIsSuccessful()
        {
            Budget budget = budgetService.CreateBudget(budgetRequest);

            Category category3 = new Category("ExampleCategory3", false, "mockUser", "exampleIcon");
            Category category4 = new Category("ExampleCategory4", false, "mockUser", "exampleIcon");

            dbContext.Add(category3);
            dbContext.Add(category4);

            int id = budget.BudgetId;

            budget = dbContext.Budgets.Where(b => b.BudgetId == id).FirstOrDefault();
            Assert.NotNull(budget);

            budget = budgetService.GetCurrentBudget();
            Consumption consumption_a = new Consumption("ExampleA", 50.5, category, "mockUser", new LocalDate(2020, 03, 21));
            Consumption consumption_b = new Consumption("ExampleB", 95.3, category2, "mockUser", new LocalDate(2019, 10, 21));
            Consumption consumption_c = new Consumption("ExampleC", 45.6, category, "mockUser", new LocalDate(2016, 05, 21));
            Consumption consumption_d = new Consumption("ExampleD", 46.6, category3, "mockUser", new LocalDate(2020, 01, 21));

            dbContext.Add(consumption_a);
            dbContext.Add(consumption_b);
            dbContext.Add(consumption_c);
            dbContext.Add(consumption_d);

            dbContext.SaveChanges();

            BudgetSummary summary = budgetService.GetBudgetSummary();

            Assert.Equal(192.4, summary.TotalSpent);
            Assert.Equal(budget.Amount, summary.Amount);
            Assert.Equal(4, summary.CategoryItems.Count);
            Assert.Contains(23.5, summary.CategoryItems.Select(c => c.BudgetedAmount));
            Assert.Contains(50.5, summary.CategoryItems.Select(c => c.TotalSpent));
            Assert.Contains(101.5, summary.CategoryItems.Select(c => c.BudgetedAmount));
            Assert.Contains(95.3, summary.CategoryItems.Select(c => c.TotalSpent));
            Assert.Contains(46.6, summary.CategoryItems.Select(c => c.TotalSpent));
        }
        public void PropertyChanged_AnyBudgetItemAmountChanged_ExpectBudgetEvents()
        {
            var budget  = BudgetBuilder.Build();
            var ratios  = Substitute.ForPartsOf <BudgetRatio>(budget);
            var summary = new BudgetSummary(budget, ratios);

            List <string> expectedPropertyNames = new List <string>()
            {
                nameof(BudgetSummary.BudgetDelta),
                nameof(BudgetSummary.IsOverBudget),
                nameof(BudgetSummary.IsOnBudget),
                nameof(BudgetSummary.IsUnderBudget),
            };

            List <string> receivedPropertyNames = new List <string>();

            summary.PropertyChanged += (o, e) => { receivedPropertyNames.Add(e.PropertyName); };

            budget.IncomeGroup.BudgetItems[0].Amount = 100;

            receivedPropertyNames.Should().Contain(expectedPropertyNames);
        }
        public async Task SaveTest()
        {
            string id = Guid.NewGuid().ToString();

            this._controller.RouteData.Values.Add("id", id);
            this._portalSettings.Features.EnablePartialSave = true;

            IncomeAndExpenditure iAndE = new IncomeAndExpenditure()
            {
                HousingStatus    = "housing-status",
                EmploymentStatus = "employment-status"
            };

            BudgetSummary   budgetSummary   = new BudgetSummary();
            BudgetSummaryVm budgetSummaryVm = new BudgetSummaryVm();

            string lowellReference = "123456789";

            this._sessionState.Setup(x => x.CheckSessionStatus(id));
            this._sessionState.Setup(x => x.GetIncomeAndExpenditure(Guid.Parse(id))).Returns(iAndE);
            this._sessionState.Setup(x => x.GetLowellReferenceFromSurrogate(Guid.Parse(id))).Returns(lowellReference);

            this._budgetCalculatorService.Setup(x => x.GetBudgetSummary(
                                                    iAndE, Guid.Parse(id), this._caseflowUserId)).Returns(budgetSummary);
            this._mapper.Setup(x => x.Map <BudgetSummary, BudgetSummaryVm>(budgetSummary)).Returns(budgetSummaryVm);
            this._budgetCalculatorService.Setup(x => x.SaveIncomeAndExpenditure(iAndE, lowellReference)).Returns(Task.CompletedTask);
            this._budgetCalculatorService.Setup(x => x.RemovePartialSaved(Guid.Parse(this._caseflowUserId))).Returns(Task.CompletedTask);

            ViewResult result = (ViewResult)await this._controller.Save();

            Assert.AreEqual("BudgetSummary", result.ViewName);
            Assert.AreEqual(budgetSummaryVm, result.Model);

            Assert.AreEqual(this._caseflowUserId, budgetSummaryVm.LoggedInUserId);
            Assert.IsTrue(budgetSummaryVm.IsSaved);
            Assert.AreEqual("housing-status", budgetSummaryVm.HousingStatus);
            Assert.AreEqual("employment-status", budgetSummaryVm.EmploymentStatus);
        }
Example #27
0
        public async Task ParseMessage(string[] splitMessage,
                                       string venmoUserId,
                                       Action <string, List <IBlock>?> respondAction,
                                       MongoDatabase database)
        {
            VenmoUser venmoUser = database.GetUser(venmoUserId) !;

            if (splitMessage.Length == 4 && splitMessage[2].ToLower() == "code")
            {
                await CompleteAuth(splitMessage[3], venmoUser, database);

                Configuration config        = helperMethods.CreateConfiguration(venmoUser.YNAB !.Auth !.AccessToken !);
                BudgetSummary defaultBudget = await GetDefaultBudget(config);

                database.SaveUser(venmoUser);
                string accounts = ListAccounts(defaultBudget.Accounts);
                respondAction.Invoke($"YNAB authentication complete. Please select the account your Venmo transactions import into and set it as your default account using /venmo ynab set account {{number}}\n{accounts}", null);
                return;
            }

            if (venmoUser.YNAB == null || venmoUser.YNAB.Auth == null || string.IsNullOrEmpty(venmoUser.YNAB.Auth.AccessToken))
            {
                respondAction(ynabOAuthHandler.RequestAuthString, null);
                return;
            }

            string?accessToken = await helperMethods.CheckIfYNABAccessTokenIsExpired(venmoUser, database, ynabApi);

            if (accessToken == null)
            {
                respondAction(ynabOAuthHandler.RequestAuthString, null);
                return;
            }

            Configuration configuration = helperMethods.CreateConfiguration(venmoUser.YNAB.Auth !.AccessToken !);

            if (splitMessage[2].ToLower() == "help")
            {
                // help
                respondAction(YNABHelp.HelpMessage, null);
            }
            else if (splitMessage[2].ToLower() == "list")
            {
                if (splitMessage[3].ToLower() == "account" || splitMessage[3].ToLower() == "accounts")
                {
                    // list accounts
                    respondAction(await ListAccounts(configuration), null);
                }
                else if (splitMessage[3].ToLower() == "categories")
                {
                    // list categories
                    respondAction(await ListCategories(configuration), null);
                }
                else if (splitMessage[3].ToLower() == "mapping" || splitMessage[3].ToLower() == "mappings")
                {
                    // list mapping
                    respondAction(ListMappings(venmoUser), null);
                }
            }
            else if (splitMessage[2].ToLower() == "set")
            {
                if (splitMessage[3].ToLower() == "account")
                {
                    // set default account
                    respondAction(await SetDefaultAccount(splitMessage[4], venmoUser, database, configuration), null);
                }
                else if (splitMessage[3].ToLower() == "mapping")
                {
                    // create/update mapping
                    respondAction(await CreateOrUpdateMapping(splitMessage, venmoUser, database, configuration), null);
                }
            }
            else if (splitMessage[2].ToLower() == "delete")
            {
                if (splitMessage[3].ToLower() == "mapping")
                {
                    // delete mapping
                    respondAction(DeleteMapping(splitMessage[4], venmoUser, database), null);
                }
                else if (splitMessage[3].ToLower() == "auth")
                {
                    // delete auth
                    venmoUser.YNAB.Auth = null;
                    database.SaveUser(venmoUser);
                    respondAction("Deleted YNAB authentication information from database. If you want to delete all of your YNAB user information from the database run /venmo ynab delete everything", null);
                }
                else if (splitMessage[3].ToLower() == "everything")
                {
                    // delete everything
                    venmoUser.YNAB = null;
                    database.SaveUser(venmoUser);
                    respondAction("Deleted all of your YNAB information from the database.", null);
                }
            }
        }
Example #28
0
        public BudgetSummary GetBudgetSummary()
        {
            string loggedUser = _httpContextAccessor.HttpContext.User.FindFirstValue("userId");

            Budget budget = dbContext.Budgets
                            .Where(b => b.PersonId.Equals(loggedUser))
                            .Include(b => b.BudgetItems)
                            .AsEnumerable()
                            .OrderByDescending(b => b.EndDate.Year)
                            .ThenByDescending(b => b.EndDate.Month)
                            .ThenByDescending(b => b.EndDate.Day)
                            .FirstOrDefault();

            if (budget == null)
            {
                return(null);
            }

            List <Consumption> consumptionsSet = dbContext.Consumptions
                                                 .Where(c => c.PersonId.Equals(loggedUser) &&
                                                        budget.StartDate.CompareTo(c.Date) <= 0 &&
                                                        budget.EndDate.CompareTo(c.Date) >= 0).
                                                 Include(c => c.Category).ToList();


            List <BudgetItem> budgetItems = budget.BudgetItems.ToList();
            List <Category>   categories  = dbContext.Categories
                                            .Where(c => c.PersonId.Equals(loggedUser))
                                            .ToList();

            List <BudgetCategorySummaryItem> summaryItems = new List <BudgetCategorySummaryItem>();

            categories.ForEach(category =>
            {
                BudgetCategorySummaryItem item = consumptionsSet
                                                 .Where(c => c.Category.Equals(category))
                                                 .AsEnumerable()
                                                 .GroupBy(c => c.Category)
                                                 .Select(g =>
                {
                    var budgetItem      = budgetItems.Where(b => b.Category.Equals(g.Key)).FirstOrDefault();
                    double budgetAmount = (budgetItem == null) ? -1 : budgetItem.BudgetedAmount;
                    return(new BudgetCategorySummaryItem(g.Key, budgetAmount, g.Sum(c => c.Amount)));
                }).FirstOrDefault();

                if (item != null)
                {
                    summaryItems.Add(item);
                }
                else
                {
                    summaryItems.Add(new BudgetCategorySummaryItem(category, -1, 0));
                }
            });

            var totalRes = consumptionsSet
                           .GroupBy(c => c.PersonId)
                           .Select(g => new { total = g.Sum(c => c.Amount) })
                           .FirstOrDefault();

            double totalSpent = (totalRes == null) ? 0 : totalRes.total;

            totalSpent   = Math.Round(totalSpent, 2);
            summaryItems = summaryItems.OrderByDescending(i => i.TotalSpent).ToList();

            BudgetSummary summary = new BudgetSummary(budget.Amount, (double)totalSpent, summaryItems, budget.BudgetId);

            return(summary);
        }
Example #29
0
 public static int EditBudgetInfo(BudgetSummary budgetSummary, XBase.Common.UserInfoUtil userinfo)
 {
     return(ProjectBudgetDBHelper.EditBudgetInfo(budgetSummary, userinfo));
 }
Example #30
0
 private static void OutputSummary(BudgetSummary summary)
 {
     Console.WriteLine(summary.ToString());
 }