コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public async Task BeforeCreate(BudgetContext context)
 {
     if (AccountID is null && Account is null)
     {
         Account = await context.GetDefaultAccountAsync();
     }
 }
コード例 #4
0
        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;
        }
コード例 #5
0
 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));
 }
コード例 #6
0
        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());
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 public static async Task <ExpenseCategoryItem> AddIncome(this BudgetContext context,
                                                          string description, DateTime date, bool ignoreBudget,
                                                          params (int Amount, int ExpenseCategory)[] items)
コード例 #9
0
        public async Task BeforeRemove(BudgetContext context)
        {
            var category = await context.FindAsync <ExpenseCategory>(ExpenseCategoryId);

            category.CurrentBalance -= Amount;
        }