public void SetBudget(UserBudget userBudget) { var user = _db.Users.Find(userBudget.UUID); user.Budget = userBudget.Amount; _db.SaveChanges(); }
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); }
public void UpdateBudget(UserBudget budget) { budget.Name = Name; budget.Balance = Balance; budget.Amount = Amount; budget.Expenses = Expenses; }
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); } }
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(); }
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()); }
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(); }
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 }); }
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()); }
public IActionResult SetBudget([FromBody] UserBudget userBudget) { _userRepository.SetBudget(userBudget); return(Ok()); }
public async Task <ActionResult <UserBudget> > PostUserIncome(UserBudget budget) { await service.Add(budget); return(NoContent()); }