public void SeedEverything(AccountingDatabaseService context)
        {
            context.Database.EnsureDeleted();
            context.Database.EnsureCreated();

            if (context.AccountType.Any())
            {
                return; // Db has been seeded
            }

            SeedAccountType(context);
            SeedSystemLookup(context);
            SeedLedgerEntries(context);

            context.SaveChanges();
        }
        public void SeedSystemLookup(AccountingDatabaseService database)
        {
            var systemLookup = new [] {
                new SystemLookup()
                {
                    Id = 700, Type = "Cost Center", Value = "Production", DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                },
                new SystemLookup()
                {
                    Id = 500, Type = "Cost Center", Value = "Sales", DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                },
                new SystemLookup()
                {
                    Id = 300, Type = "Cost Center", Value = "Manufacturing", DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                },
                new SystemLookup()
                {
                    Id = 90, Type = "Cost Center", Value = "Manufacturing", DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                }
            };

            database.SystemLookup.AddRange(systemLookup);
        }
        public void SeedLedgerEntries(AccountingDatabaseService database)
        {
            var ledgerEntries = new [] {
                new Ledger()
                {
                    Id          = 10, IsPosted = 1, Description = "Test entry", Date = DateTime.Now, DateAdded = DateTime.Now, DateUpdated = DateTime.Now, VoucherId = "JV/001",
                    LedgerEntry = new [] {
                        new LedgerEntry()
                        {
                            Id = 10, LedgerId = 10, AccountId = 10, Debit = 0, Credit = 100, DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                        },
                        new LedgerEntry()
                        {
                            Id = 11, LedgerId = 10, AccountId = 11, Debit = 100, Credit = 0, DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                        }
                    }
                },
                new Ledger()
                {
                    Id          = 11, IsPosted = 0, Description = "Test entry", Date = DateTime.Now, DateAdded = DateTime.Now, DateUpdated = DateTime.Now, VoucherId = "JV/001",
                    LedgerEntry = new [] {
                        new LedgerEntry()
                        {
                            Id = 15, LedgerId = 11, AccountId = 10, Debit = 0, Credit = 100, DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                        },
                        new LedgerEntry()
                        {
                            Id = 16, LedgerId = 11, AccountId = 11, Debit = 100, Credit = 0, DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                        }
                    }
                }
            };

            database.Ledger.AddRange(ledgerEntries);
            database.Save();
        }
        public void SeedAccountType(AccountingDatabaseService database)
        {
            var accountType = new [] {
                new AccountType()
                {
                    Id = 10, Type = "Asset", TypeOf = 0
                },
                new AccountType()
                {
                    Id = 12, Type = "Liability", TypeOf = 0
                },
                new AccountType()
                {
                    Id = 13, Type = "Capital", TypeOf = 0
                },
                new AccountType()
                {
                    Id = 14, Type = "Revenue", TypeOf = 0
                },
                new AccountType()
                {
                    Id              = 15,
                    Type            = "Expence", TypeOf = 0,
                    AccountCatagory = new [] {
                        new AccountCatagory()
                        {
                            Id = 2, Catagory = "Cash Account", DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                        },
                        new AccountCatagory()
                        {
                            Id = 3, Catagory = "COGE", DateAdded = DateTime.Now, DateUpdated = DateTime.Now
                        },
                        new AccountCatagory()
                        {
                            Id = 4, Catagory = "COGE", DateAdded = DateTime.Now, DateUpdated = DateTime.Now, Account = new [] {
                                new Account()
                                {
                                    Id         = 10, AccountId = "5000", AccountName = "Cash", OpeningBalance = 100, DateAdded = DateTime.Now, DateUpdated = DateTime.Now,
                                    CostCenter = new SystemLookup()
                                    {
                                        Id = 30, Type = "Cost Center", Value = "Production"
                                    },
                                },
                                new Account()
                                {
                                    Id         = 11, AccountId = "7000", AccountName = "Cash at Bank", OpeningBalance = 100, DateAdded = DateTime.Now, DateUpdated = DateTime.Now,
                                    CostCenter = new SystemLookup()
                                    {
                                        Id = 50, Type = "Cost Center", Value = "Production"
                                    },
                                }
                            }
                        }
                    }
                },
                new AccountType()
                {
                    Id = 6, Type = "Finished Products", TypeOf = 10
                },
                new AccountType()
                {
                    Id = 7, Type = "COGS (Cost of Goods)", TypeOf = 15
                }
            };

            database.AccountType.AddRange(accountType);
        }
        public static void Initialize(AccountingDatabaseService context)
        {
            var initializer = new AccountingDatabaseInitializer();

            initializer.SeedEverything(context);
        }