public static async Task <Account> SetAsDefaultAsync(this BudgetContext context, Account account) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (account is null) { throw new ArgumentNullException(nameof(account)); } if (await context.Accounts.SingleOrDefaultAsync(x => x.IsDefault) is { } previousDefault) { previousDefault.IsDefault = false; } if (await context.Accounts.SingleOrDefaultAsync(x => x.ID == account.ID) is { } newDefault) { newDefault.IsDefault = true; return(newDefault); } account.IsDefault = true; context.Accounts.Add(account); return(account); }
public static async Task <ExpenseCategoryItem> AddTransfer(this BudgetContext context, string description, DateTime date, bool ignoreBudget, int amount, ExpenseCategory fromCategory, ExpenseCategory toCategory) { var item = new ExpenseCategoryItem { Date = date.Date, Description = description, Details = new List <ExpenseCategoryItemDetail> { new ExpenseCategoryItemDetail { Amount = -amount, ExpenseCategoryId = fromCategory.ID, }, new ExpenseCategoryItemDetail { Amount = amount, ExpenseCategoryId = toCategory.ID } }, IgnoreBudget = ignoreBudget //NB: Order matters here, must be after Details }; context.ExpenseCategoryItems.Add(item); await context.SaveChangesAsync(); return(item); }
public async Task BeforeCreate(BudgetContext context) { if (AccountID is null && Account is null) { Account = await context.GetDefaultAccountAsync(); } }
public async Task BeforeCreate(BudgetContext context) { var category = await context.FindAsync <ExpenseCategory>(ExpenseCategory?.ID ?? ExpenseCategoryId) ?? throw new InvalidOperationException("Could not find expense category for item"); category.CurrentBalance += Amount; }
public static async Task <ExpenseCategoryItem> AddTransfer(this BudgetContext context, string description, DateTime date, int amount, ExpenseCategory fromCategory, ExpenseCategory toCategory) { return(await context.AddTransfer(description, date, false, amount, fromCategory, toCategory)); }
public static async Task <Account?> GetDefaultAccountAsync(this BudgetContext context) { if (context is null) { throw new ArgumentNullException(nameof(context)); } return(await context.Accounts.FirstOrDefaultAsync(x => x.IsDefault) ?? await context.Accounts.FirstOrDefaultAsync()); }
public static async Task <int> GetCurrentAmount(this BudgetContext context, int accountId) { if (context is null) { throw new ArgumentNullException(nameof(context)); } Account account = await context.Accounts .Include(x => x.ExpenseCategories) .FirstOrDefaultAsync(x => x.ID == accountId); return(account?.ExpenseCategories?.Sum(x => x.CurrentBalance) ?? 0); }
public static async Task <ExpenseCategoryItem> AddIncome(this BudgetContext context, string description, DateTime date, bool ignoreBudget, params (int Amount, int ExpenseCategory)[] items)
public async Task BeforeRemove(BudgetContext context) { var category = await context.FindAsync <ExpenseCategory>(ExpenseCategoryId); category.CurrentBalance -= Amount; }