Exemplo n.º 1
0
        public void SetBudget(UserBudget userBudget)
        {
            var user = _db.Users.Find(userBudget.UUID);

            user.Budget = userBudget.Amount;
            _db.SaveChanges();
        }
Exemplo n.º 2
0
 public async Task Add(UserBudget budget)
 {
    int user = UserID();
    budget.userID = user;
    context.UserBudget.Add(budget);
    await context.SaveChangesAsync();
 }
        internal UserBudget CreateDefaultBudget(string userId, List <ExpenseCategory> categories)
        {
            var today              = DateTime.Today;
            var currentMonth       = today.Month;
            var monthBeginningDate = new DateTime(today.Year, currentMonth, 1);
            var monthEndingDate    = monthBeginningDate.AddMonths(1).AddDays(-1);

            var budget = new UserBudget
            {
                UserId       = userId,
                CurrencySign = "$",
                StartDate    = monthBeginningDate,
                EndDate      = monthEndingDate,
                Amount       = 1000,
            };
            var percentage = 0;

            budget.BudgetDetails = categories.Select(c => new BudgetDetail
            {
                UserBudget      = budget,
                CategoryId      = c.UId,
                Percentage      = percentage,
                Amount          = budget.Amount * percentage,
                ExpenseCategory = c,
            }).ToList();

            return(budget);
        }
Exemplo n.º 4
0
 public void UpdateBudget(UserBudget budget)
 {
     budget.Name     = Name;
     budget.Balance  = Balance;
     budget.Amount   = Amount;
     budget.Expenses = Expenses;
 }
Exemplo n.º 5
0
        public void InserUpdate_CanUpdate()
        {
            var connection = new SqliteConnection("DataSource=:memory:");

            connection.Open();
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseSqlite(connection)
                          .Options;

            // Insert seed data into the database using one instance of the context
            using (var context = new ApplicationDbContext(options))
            {
                context.Database.EnsureCreated();
                Expense exp1 = new Expense();
                exp1.Amount = 300;
                exp1.Name   = "hotel";
                List <Expense> explist = new List <Expense>();
                explist.Add(exp1);
                context.Budgets.AddRange(
                    new UserBudget {
                    BudgetId = 1, Owner = "Sofia"
                },
                    new UserBudget {
                    BudgetId = 2, Name = "Camilla", Expenses = explist
                });
                context.SaveChanges();
            }

            // Use a separate instance edit some data
            using (var context = new ApplicationDbContext(options))
            {
                var service = new BudgetService(context);

                Expense exp1 = new Expense();
                exp1.Amount = 2;
                exp1.Name   = "milk";
                List <Expense> explist = new List <Expense>();
                explist.Add(exp1);
                //explist.Add(exp2);
                var user1 = new UserBudget
                {
                    BudgetId = 1,
                    Owner    = "Bob",
                    Expenses = explist
                };

                service.InsertOrUpdateBudget(user1);

                var budget   = service.GetBudget(1);
                var expenses = budget.Expenses.ToArray();

                Assert.NotNull(budget);
                Assert.NotNull(budget.Expenses);
                Assert.Equal("milk", expenses[0].Name);
                Assert.NotEqual("Sofia", budget.Owner);
                Assert.Equal("Bob", budget.Owner);
            }
        }
Exemplo n.º 6
0
        public void InsertOrUpdateBudget(UserBudget budget)
        {
            var existingBudget = _context.Budgets
                                 .Where(b => b.BudgetId == budget.BudgetId)
                                 .Include(b => b.Expenses)
                                 .SingleOrDefault();

            if (existingBudget == null)
            {
                _context.Add(budget);
                _context.SaveChanges();
            }
            else
            {
                _context.Entry(existingBudget).CurrentValues.SetValues(budget);
                // Delete children
                foreach (var existingExpense in existingBudget.Expenses.ToList())
                {
                    if (budget.Expenses == null || !budget.Expenses.Any(c => c.IdExpense == existingExpense.IdExpense))
                    {
                        _context.Expenses.Remove(existingExpense);
                    }
                }
                // Add/update
                if (budget.Expenses != null)
                {
                    foreach (var expense in budget.Expenses)
                    {
                        var existingExpense = existingBudget.Expenses
                                              .Where(b => b.IdExpense == expense.IdExpense)
                                              .SingleOrDefault();

                        if (existingExpense != null)
                        {
                            _context.Entry(existingExpense).CurrentValues.SetValues(expense);
                        }
                        else
                        {
                            // set id to 0 for DB autoassign
                            expense.IdExpense = 0;
                            existingBudget.Expenses.Add(expense);

                            /* Design flaw in our DB
                             * Workaround requires 1 save per write
                             */
                            _context.SaveChanges();
                        }
                    }
                }
                _context.SaveChanges();
            }
            _context.SaveChanges();
        }
Exemplo n.º 7
0
 private static IEnumerable <BudgetCategoryDto> MapBudgetCategories(UserBudget currentMonth)
 {
     return(currentMonth.BudgetDetails?.Select(c => new BudgetCategoryDto
     {
         CategoryId = c.CategoryId,
         Id = c.UId,
         Name = c.ExpenseCategory?.Name,
         Percentage = c.Percentage,
         Amount = c.Amount,
         Expenses = c.Expenses?.Select(c => new Expense {
             Description = c.Description, TransactionDate = c.TransactionDate, Value = c.Value
         }).ToList(),
     }));
 }
        public async Task <ActionResult <UserBudget> > PostUserIncome(UserBudget budget)
        {
            if (Request.Cookies.Keys.Contains("token"))
            {
                this.service.cookie = Request.Cookies["token"];
            }
            else
            {
                this.service.cookie = null;
            }
            await service.Add(budget);

            return(NoContent());
        }
Exemplo n.º 9
0
        public void CreateUser(string userName, string genderName, DateTime birthday, string budgetName)
        {
            List <User>       users   = db.Users.ToList();
            List <Gender>     genders = db.Genders.ToList();
            List <UserBudget> budgets = db.Budgets.ToList();

            if (string.IsNullOrWhiteSpace(genderName))
            {
                throw new ArgumentNullException(nameof(genderName));
            }
            if (string.IsNullOrWhiteSpace(budgetName))
            {
                throw new ArgumentNullException(nameof(budgetName));
            }
            if (birthday.Year < 1900 || birthday > DateTime.Now)
            {
                throw new ArgumentException(nameof(birthday));
            }
            if (users.Contains(users.SingleOrDefault(u => u.Name == userName)))
            {
                throw new ArgumentException(nameof(userName));
            }

            UserBudget budget = budgets.SingleOrDefault(b => b.Name == budgetName);

            if (budget == null)
            {
                budget = new UserBudget(budgetName);
                db.Budgets.Add(budget);
                db.Entry(budget).State = EntityState.Added;
                SaveBudgets();
            }
            Gender gender = genders.SingleOrDefault(g => g.Name == genderName);

            if (gender == null)
            {
                gender = new Gender(genderName);
                db.Genders.Add(gender);
                db.Entry(gender).State = EntityState.Added;
                SaveGenders();
            }
            var user = new User(userName, gender, birthday, budget.Id);

            db.Users.Add(user);
            db.Entry(user).State = EntityState.Added;
            db.SaveChanges();
        }
Exemplo n.º 10
0
        private static MonthBudgetResponse MapUserBudgetToResponse(UserBudget currentMonth, bool defaultTemplate, DomainValidation validation = null)
        {
            return(new MonthBudgetResponse
            {
                IsProposedBudget = defaultTemplate,

                Budget = new Responses.BudgetDto
                {
                    UserId = currentMonth.UserId,
                    Amount = currentMonth.Amount,
                    Currency = currentMonth.CurrencySign,
                    Year = currentMonth.EndDate.Year,
                    Name = currentMonth.StartDate.MonthName(),
                    StartDate = currentMonth.StartDate,
                    EndDate = currentMonth.EndDate,
                    BudgetCategory = MapBudgetCategories(currentMonth)
                },
                ValidationMessage = validation?.ValidationErrorMessage
            });
        }
Exemplo n.º 11
0
        public static UserBudget CreateNewBudget(MonthBudgetRequest request, IEnumerable <ExpenseCategory> categories)
        {
            var budget = new UserBudget
            {
                UserId       = request.UserId,
                CurrencySign = request.Currency ?? "$",
                StartDate    = request.StartDate,
                EndDate      = request.EndDate,
                Amount       = request.Amount,
            };

            budget.BudgetDetails = request.BudgetCategories?.Select(c => new BudgetDetail
            {
                CategoryId      = c.CategoryId,
                UserBudget      = budget,
                ExpenseCategory = categories?.FirstOrDefault(d => d.UId == c.CategoryId),
                Percentage      = c.Percentage / 100,
                Amount          = request.Amount * (c.Percentage / 100)
            }).ToList();

            return(budget);
        }
 public DomainValidation IsValidNewUserBudget(UserBudget newBudget)
 {
     if (string.IsNullOrWhiteSpace(newBudget.UserId))
     {
         return(new DomainValidation(Messages.BudgetMustHaveAnOwner));
     }
     if (newBudget.BudgetDetails == null || !newBudget.BudgetDetails.Any())
     {
         return(new DomainValidation(Messages.BudgetMustContainsExpensesCategories));
     }
     if (newBudget.BudgetDetails.Any(c => c.ExpenseCategory == null))
     {
         return(new DomainValidation(Messages.ExpensesCategoriesMustExists));
     }
     if (newBudget.BudgetDetails.Sum(c => c.Amount) <= 0)
     {
         return(new DomainValidation(Messages.ExpensesPercentMustBeGreaterThanCero));
     }
     if (newBudget.BudgetDetails.Sum(c => c.Percentage) > 1)
     {
         return(new DomainValidation(Messages.ExpesesCategoriesExceed100Percent));
     }
     return(new DomainValidation());
 }
Exemplo n.º 13
0
 public IActionResult SetBudget([FromBody] UserBudget userBudget)
 {
     _userRepository.SetBudget(userBudget);
     return(Ok());
 }
Exemplo n.º 14
0
        public async Task <ActionResult <UserBudget> > PostUserIncome(UserBudget budget)
        {
            await service.Add(budget);

            return(NoContent());
        }