예제 #1
0
        public IHttpActionResult PutExpenses(int id, Expenses expenses)
        {
            Expenses expense = db.Expenses.Find(id);

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != expenses.Id)
            {
                return(BadRequest());
            }

            db.Entry(expenses).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ExpensesExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    return(BadRequest());
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
예제 #2
0
        public IHttpActionResult PutExpense(Expense expense)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            //if (expense.Id != expense.Id)
            //{
            //    return BadRequest();
            //}

            db.Entry(expense).State = EntityState.Modified;
            string userId = User.Identity.GetUserId();

            expense.UserId = userId;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ExpenseExists(expense.Id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public void OnGet_WhenThereAreThreeMovementsAvailable_ThenMovementsAreDescendingByDateAndBalanceIsTheSum()
        {
            var options = new DbContextOptionsBuilder <ExpensesContext>()
                          .UseInMemoryDatabase(databaseName: "OnGet_WhenThereAreThreeMovementsAvailable_ThenMovementsAreDescendingByDateAndBalanceIsTheSum")
                          .Options;

            using (var expensesContext = new ExpensesContext(options))
            {
                var category = new Category("Default");
                expensesContext.Categories.Add(category);
                expensesContext.Movements.Add(new Movement(-10, "second", category, null, new DateTime(2017, 11, 10)));
                expensesContext.Movements.Add(new Movement(-10, "third", category, null, new DateTime(2017, 11, 11)));
                expensesContext.Movements.Add(new Movement(50, "first", category, null, new DateTime(2017, 11, 9)));
                expensesContext.SaveChanges();
                var model = new IndexModel(expensesContext);

                model.OnGet();

                Assert.NotNull(model.Movements);
                Assert.NotEmpty(model.Movements);
                Assert.Equal(3, model.Movements.Length);
                Assert.Equal("third", model.Movements[0].Reason);
                Assert.Equal("second", model.Movements[1].Reason);
                Assert.Equal("first", model.Movements[2].Reason);
                Assert.True(model.Movements.All(m => m.Category == category));
                Assert.Equal(30, model.Balance);
            }
        }
예제 #4
0
        public IHttpActionResult PutBudgetItem(BudgetItem budgetItem)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }


            db.Entry(budgetItem).State = EntityState.Modified;
            string userId = User.Identity.GetUserId();

            budgetItem.UserId = userId;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!BudgetItemExists(budgetItem.Id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
예제 #5
0
 protected virtual TEntity UpdateCore(ExpensesContext context, TEntity item)
 {
     BeforeUpdate(context, item);
     context.Entry(item).State = EntityState.Modified;
     context.SaveChanges();
     return(item);
 }
예제 #6
0
 protected virtual TEntity AddCore(ExpensesContext context, TEntity item)
 {
     BeforeAdd(context, item);
     item = context.Set <TEntity> ().Add(item);
     context.SaveChanges();
     return(item);
 }
예제 #7
0
 protected override TOperation UpdateCore(ExpensesContext db, TOperation operation)
 {
     using (var transaction = db.BeginTransaction(IsolationLevel.Serializable))
     {
         BeforeUpdate(db, operation);
         db.SaveChanges();
         transaction.Commit();
         return(operation);
     }
 }
예제 #8
0
        private static Currency GetCurrency(ExpensesContext db, string name, IDictionary <string, Currency> currencies)
        {
            var result = currencies.SafeGet(name);

            if (result != null)
            {
                return(result);
            }
            result = db.Currencies.FirstOrDefault(item => item.ShortName == name);
            if (result == null)
            {
                result = db.Currencies.Add(new Currency {
                    Name = name, ShortName = name
                });
                db.SaveChanges();
            }
            currencies.Add(name, result);
            return(result);
        }
예제 #9
0
        private static Category GetCategory(ExpensesContext db, string name, IDictionary <string, Category> categories)
        {
            var result = categories.SafeGet(name);

            if (result != null)
            {
                return(result);
            }
            result = db.Categories.FirstOrDefault(item => item.Name == name);
            if (result == null)
            {
                result = db.Categories.Add(new Category {
                    Name = name, Type = OperationType.Expense
                });
                db.SaveChanges();
            }
            categories.Add(name, result);
            return(result);
        }
예제 #10
0
        private static Account GetAccount(ExpensesContext db, string name, string currency, IDictionary <string, Account> accounts, IDictionary <string, Currency> currencies)
        {
            name = $"{name} {currency}";
            var result = accounts.SafeGet(name);

            if (result != null)
            {
                return(result);
            }
            result = db.Accounts.FirstOrDefault(item => item.Name == name);
            if (result == null)
            {
                result = db.Accounts.Add(new Account {
                    Name = name, CurrencyId = GetCurrency(db, currency, currencies).Id
                });
                db.SaveChanges();
            }
            accounts.Add(name, result);
            return(result);
        }
예제 #11
0
        private static Subcategory GetSubcategory(ExpensesContext db, string name, string category, IDictionary <string, Subcategory> subcategories, IDictionary <string, Category> categories)
        {
            var fullname = $"{name} {category}";
            var result   = subcategories.SafeGet(fullname);

            if (result != null)
            {
                return(result);
            }
            var cat = GetCategory(db, category, categories);

            result = db.Subcategories.FirstOrDefault(item => item.Name == name && item.CategoryId == cat.Id);
            if (result == null)
            {
                result = db.Subcategories.Add(new Subcategory {
                    Name = name, CategoryId = cat.Id
                });
                db.SaveChanges();
            }
            subcategories.Add(fullname, result);
            return(result);
        }
        public void OnGet_WhenCalled_ThenLoadsCategoriesInAlphaOrder()
        {
            var options = new DbContextOptionsBuilder <ExpensesContext>()
                          .UseInMemoryDatabase(databaseName: "OnGet_WhenCalled_ThenLoadsCategoriesInAlphaOrder")
                          .Options;

            using (var expensesContext = new ExpensesContext(options))
            {
                expensesContext.Categories.Add(new Category("Foo"));
                expensesContext.Categories.Add(new Category("Bar"));
                expensesContext.Categories.Add(new Category("Baz"));
                expensesContext.SaveChanges();
                var model = new IndexModel(expensesContext);

                model.OnGet();

                Assert.NotNull(model.Categories);
                Assert.NotEmpty(model.Categories);
                Assert.Equal(3, model.Categories.Length);
                Assert.Equal("Bar", model.Categories[0].Text);
                Assert.Equal("Baz", model.Categories[1].Text);
                Assert.Equal("Foo", model.Categories[2].Text);
            }
        }
예제 #13
0
 public void Create(Statement model)
 {
     _expensesContext.Statements.Add(model);
     _expensesContext.SaveChanges();
 }
예제 #14
0
        public static void Initialize(ExpensesContext context)
        {
            context.Database.EnsureCreated();

            if (!context.TePerson.Any())
            {
                context.TePerson.Add(new TePerson("Test", "Test", "TestUser", Crypto.GetSalt(), Crypto.GetSalt(256)));
                context.SaveChanges();
            }

            //Only invoke seeding of data if tables do not contain data already.
            if (!context.TdType.Any())
            {
                new List <TdType>
                {
                    new TdType("Credit"),
                    new TdType("Debit"),
                    new TdType("Adjustment")
                }
                .ForEach(x => context.TdType.Add(x));
                context.SaveChanges();
            }

            if (!context.TdCategory.Any())
            {
                new List <TdCategory>
                {
                    new TdCategory("EatingOut"),
                    new TdCategory("Food"),
                    new TdCategory("Car"),
                    new TdCategory("Electronics"),
                    new TdCategory("Transfer"),
                    new TdCategory("Education"),
                    new TdCategory("Bills"),
                    new TdCategory("Rent/Mortgage"),
                    new TdCategory("Cellphone"),
                    new TdCategory("Paycheck"),
                    new TdCategory("Alcohol"),
                    new TdCategory("Gas"),
                    new TdCategory("Fee"),
                    new TdCategory("Health"),
                    new TdCategory("Clothing"),
                    new TdCategory("Fun"),
                    new TdCategory("Miscellaneous"),
                    new TdCategory("Gifts"),
                    new TdCategory("Wedding"),
                    new TdCategory("Debt"),
                    new TdCategory("Pets"),
                    new TdCategory("Parking"),
                    new TdCategory("Paddling"),
                    new TdCategory("Household Goods"),
                    new TdCategory("Cleaning"),
                    new TdCategory("Insurance"),
                    new TdCategory("Charity/Donation"),
                    new TdCategory("Travel"),
                    new TdCategory("Kids"),
                    new TdCategory("Investments")
                }
                .ForEach(x => context.TdCategory.Add(x));
                context.SaveChanges();
            }
        }
예제 #15
0
 public void Create(Invoice model)
 {
     _expensesContext.Invoices.Add(model);
     _expensesContext.SaveChanges();
 }
예제 #16
0
 public void Save()
 {
     _context.SaveChanges();
 }