コード例 #1
0
        public ActionResult AddPurchaseOrder()
        {
            var model        = new Models.ViewModels.Purchases.AddPurchaseOrder();
            var items        = _inventoryService.GetAllItems();
            var accounts     = _financialService.GetAccounts();
            var measurements = _inventoryService.GetMeasurements();
            //var taxes = _financialService.GetTaxes();
            var itemCategories = _inventoryService.GetItemCategories();
            var vendors        = _purchasingService.GetVendors();

            model.Items              = Models.ModelViewHelper.Items();
            model.Vendors            = Models.ModelViewHelper.Vendors();
            model.UnitOfMeasurements = Models.ModelViewHelper.Measurements();
            return(View(model));
        }
コード例 #2
0
        // GET: Inventory/Edit/5
        public ActionResult EditItem(int id)
        {
            var item         = _inventoryService.GetItemById(id);
            var accounts     = _financialService.GetAccounts();
            var measurements = _inventoryService.GetMeasurements();
            //var taxes = _financialService.GetTaxes();
            var itemCategories = _inventoryService.GetItemCategories();
            var vendors        = _purchasingService.GetVendors();
            //var itemTaxGroups = _financialService.GetItemTaxGroups();

            var model = new Models.ViewModels.Items.EditItem();

            model.PrepareEditItemViewModel(item);
            model.Accounts           = ModelViewHelper.Accounts();
            model.UnitOfMeasurements = ModelViewHelper.Measurements();
            model.Taxes                        = ModelViewHelper.Taxes();
            model.ItemTaxGroups                = ModelViewHelper.ItemTaxGroups();
            model.Vendors                      = ModelViewHelper.Vendors();
            model.ItemCategories               = ModelViewHelper.ItemCategories();
            model.ItemTaxGroupId               = model.ItemTaxGroupId == null ? -1 : model.ItemTaxGroupId;
            model.InventoryAccountId           = model.InventoryAccountId == null ? -1 : model.InventoryAccountId;
            model.SellAccountId                = model.SellAccountId == null ? -1 : model.SellAccountId;
            model.InventoryAdjustmentAccountId = model.InventoryAdjustmentAccountId == null ? -1 : model.InventoryAdjustmentAccountId;
            model.PurchaseMeasurementId        = model.PurchaseMeasurementId == null ? -1 : model.PurchaseMeasurementId;
            model.CostOfGoodsSoldAccountId     = model.CostOfGoodsSoldAccountId == null ? -1 : model.CostOfGoodsSoldAccountId;

            return(View(model));
        }
コード例 #3
0
        /// <summary>
        /// [Deprecated] Change to Accounts()
        /// </summary>
        /// <param name="accounts"></param>
        /// <returns></returns>
        public static ICollection <SelectListItem> Accounts(IEnumerable <Account> accounts)
        {
            var selections = new HashSet <SelectListItem>();

            selections.Add(new SelectListItem()
            {
                Text = string.Empty, Value = "-1", Selected = true
            });
            foreach (var account in _financialService.GetAccounts())
            {
                selections.Add(new SelectListItem()
                {
                    Text = account.AccountName, Value = account.Id.ToString()
                });
            }
            return(selections);
        }
コード例 #4
0
        public IActionResult Accounts()
        {
            var accounts = _financialService.GetAccounts().ToList();

            var accountTree = BuildAccountGrouping(accounts, null);

            return(new ObjectResult(accountTree));
        }
コード例 #5
0
        public ActionResult Accounts()
        {
            var accounts = _financialService.GetAccounts();
            var model    = new Models.ViewModels.Financials.Accounts();

            foreach (var account in accounts)
            {
                model.AccountsListLines.Add(new Models.ViewModels.Financials.AccountsListLine()
                {
                    Id          = account.Id,
                    AccountCode = account.AccountCode,
                    AccountName = account.AccountName,
                    Balance     = account.Balance
                });
            }
            return(View(model));
        }
コード例 #6
0
        public ActionResult AddOrEditCustomer(int id = 0)
        {
            Models.ViewModels.Sales.EditCustomer model = new Models.ViewModels.Sales.EditCustomer();
            var accounts = _financialService.GetAccounts();

            if (id != 0)
            {
                var customer = _salesService.GetCustomerById(id);
                model.Id                             = customer.Id;
                model.Name                           = customer.Name;
                model.PrimaryContactId               = customer.PrimaryContactId.HasValue ? customer.PrimaryContactId.Value : -1;
                model.AccountsReceivableAccountId    = customer.AccountsReceivableAccountId.HasValue ? customer.AccountsReceivableAccountId : -1;
                model.SalesAccountId                 = customer.SalesAccountId.HasValue ? customer.SalesAccountId : -1;
                model.SalesDiscountAccountId         = customer.SalesDiscountAccountId.HasValue ? customer.SalesDiscountAccountId : -1;
                model.PromptPaymentDiscountAccountId = customer.PromptPaymentDiscountAccountId.HasValue ? customer.PromptPaymentDiscountAccountId : -1;
            }
            return(View(model));
        }
コード例 #7
0
        public IHttpActionResult Accounts()
        {
            var accounts = _financialService.GetAccounts();
            ICollection <AccountDto> accountsDto = new HashSet <AccountDto>();

            foreach (var account in accounts)
            {
                accountsDto.Add(new AccountDto()
                {
                    Id = account.Id, AccountName = account.AccountName
                });
            }

            return(Ok(accountsDto.AsEnumerable()));
        }
コード例 #8
0
        public IActionResult PostingAccounts()
        {
            var accounts = _financialService.GetAccounts()
                           .Where(a => a.ChildAccounts.Count == 0);

            ICollection <Account> accountsDto = new HashSet <Account>();

            foreach (var account in accounts)
            {
                accountsDto.Add(new Account()
                {
                    Id = account.Id, AccountName = account.AccountName
                });
            }

            return(Ok(accountsDto));
        }
コード例 #9
0
        public IActionResult Account([FromBody] SearchRequest request)
        {
            SearchModel model = new SearchModel
            {
                Start = request.Start
            };
            var pagesize   = request.Length == 0 ? 10 : request.Length;
            var searchText = request.Search?.Value;

            var records = _service.GetAccounts();

            //Total Records
            model.RecordsTotal = records.Count();
            //Filter records
            if (string.IsNullOrEmpty(searchText) == false)
            {
                records = records
                          .Where(t => t.AccountCode.Contains(searchText) ||
                                 t.AccountName.Contains(searchText) ||
                                 t.AccountClass.Name.Contains(searchText)
                                 );
            }
            //filtered records count
            model.RecordsFiltered = records.Count();

            if (request.Order != null)
            {
                var columnIndex   = request.Order[0].Column;
                var sortDirection = request.Order[0].Dir;
                var columnName    = request.Columns[columnIndex].Data;
                records = OrderBy(records, columnName, sortDirection == "desc");
            }
            model.Data = records
                         .Skip(model.Start)
                         .Take(pagesize)
                         .Select(t => t.ToRowModel()).ToList();
            return(Json(model));
        }
コード例 #10
0
ファイル: ReferenceController.cs プロジェクト: lulzzz/AK
        public IActionResult GetAccounts()
        {
            var accounts = _financialService.GetAccounts().Select(c => c.ToModel());

            return(Ok(accounts));
        }
コード例 #11
0
        public ActionResult Accounts(string sortOn, string orderBy,
                                     string pSortOn, string keyword, int?page)
        {
            int recordsPerPage = 3;

            if (!page.HasValue)
            {
                page = 1; // set initial page value
                if (string.IsNullOrWhiteSpace(orderBy) || orderBy.Equals("asc"))
                {
                    orderBy = "desc";
                }
                else
                {
                    orderBy = "asc";
                }
            }

            if (!string.IsNullOrWhiteSpace(sortOn) && !sortOn.Equals(pSortOn,
                                                                     StringComparison.CurrentCultureIgnoreCase))
            {
                orderBy = "asc";
            }

            ViewBag.OrderBy = orderBy;
            ViewBag.SortOn  = sortOn;
            ViewBag.Keyword = keyword;
            var accounts = _financialService.GetAccounts();

            //var list = db.PersonalDetails.AsQueryable();

            switch (sortOn)
            {
            case "Category":
                if (orderBy.Equals("desc"))
                {
                    accounts = accounts.OrderByDescending(p => p.AccountName);
                    //list = list.OrderByDescending(p => p.FirstName);
                }
                else
                {
                    accounts = accounts.OrderBy(p => p.AccountName);
                    //list = list.OrderBy(p => p.FirstName);
                }
                break;

            case "AccountName":
                if (orderBy.Equals("desc"))
                {
                    accounts = accounts.OrderByDescending(p => p.AccountClass.Name);
                    //list = list.OrderByDescending(p => p.LastName);
                }
                else
                {
                    accounts = accounts.OrderBy(p => p.AccountClass.Name);
                    //list = list.OrderBy(p => p.LastName);
                }
                break;

            case "AccountCode":
                if (orderBy.Equals("desc"))
                {
                    accounts = accounts.OrderByDescending(p => p.AccountCode);
                    //list = list.OrderByDescending(p => p.Age);
                }
                else
                {
                    accounts = accounts.OrderBy(p => p.AccountCode);
                    // list = list.OrderBy(p => p.Age);
                }
                break;

            default:
                //list = list.OrderBy(p => p.AutoId);
                accounts = accounts.OrderBy(p => p.Id);
                break;
            }
            if (!string.IsNullOrWhiteSpace(keyword))
            {
                accounts = accounts.Where(f => f.AccountClass.Name.StartsWith(keyword));
                //list = list.Where(f => f.FirstName.StartsWith(keyword));
            }
            var finalAccounts = accounts.ToPagedList(page.Value, recordsPerPage);

            //var finalList = list.ToPagedList(page.Value, recordsPerPage);
            //return View(finalList);
            return(View(finalAccounts));
        }
コード例 #12
0
        private void InitializeChartOfAccountsAndAccountClasses()
        {
            IList <Core.Domain.Financials.AccountClass> accountClasses = new List <Core.Domain.Financials.AccountClass>();

            // If no accounts found just return.
            if (_financialService.GetAccounts().Any())
            {
                return;
            }
            string[,] values;
            var assembly       = Assembly.GetEntryAssembly();
            var resourceStream = assembly.GetManifestResourceStream("Api.Data.coa.csv");

            using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
            {
                var coa = reader.ReadToEndAsync().GetAwaiter().GetResult();
                values = LoadCsv(coa);
            }
            List <Core.Domain.Financials.Account> accounts = new List <Core.Domain.Financials.Account>();

            for (var i = 1; i < (values.Length / 8); i++)
            {
                Core.Domain.Financials.Account account =
                    new Core.Domain.Financials.Account
                {
                    AccountCode     = values[i, 0],
                    AccountName     = values[i, 1],
                    AccountClassId  = int.Parse(values[i, 3]),
                    IsCash          = bool.Parse(values[i, 5]),
                    IsContraAccount =
                        bool.Parse(values[i, 4])
                };

                switch (values[i, 7])
                {
                case "DR":
                    account.DrOrCrSide = Core.Domain.DrOrCrSide.Dr;
                    break;

                case "CR":
                    account.DrOrCrSide = Core.Domain.DrOrCrSide.Cr;
                    break;

                default:
                    account.DrOrCrSide = Core.Domain.DrOrCrSide.NA;
                    break;
                }

                account.CompanyId = 1;
                accounts.Add(account);
            }

            for (var i = 1; i < (values.Length / 8); i++)
            {
                string accountCode       = values[i, 0];
                string parentAccountCode = values[i, 2];

                var account       = accounts.FirstOrDefault(a => a.AccountCode == accountCode);
                var parentAccount = accounts.FirstOrDefault(a => a.AccountCode == parentAccountCode);
                if (parentAccount != null)
                {
                    account.ParentAccount = parentAccount;
                }
            }

            var assetClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Assets",
                NormalBalance = "Dr"
            };
            var liabilitiesClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Liabilities",
                NormalBalance = "Cr"
            };
            var equityClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Equity",
                NormalBalance = "Cr"
            };
            var revenueClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Revenue",
                NormalBalance = "Cr"
            };
            var expenseClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Expense",
                NormalBalance = "Dr"
            };
            var temporaryClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Temporary",
                NormalBalance = "NA"
            };

            accountClasses.Add(assetClass);
            accountClasses.Add(liabilitiesClass);
            accountClasses.Add(equityClass);
            accountClasses.Add(revenueClass);
            accountClasses.Add(expenseClass);
            accountClasses.Add(temporaryClass);

            foreach (var account in accounts)
            {
                switch (account.AccountClassId)
                {
                case 1:
                    assetClass.Accounts.Add(account);
                    break;

                case 2:
                    liabilitiesClass.Accounts.Add(account);
                    break;

                case 3:
                    equityClass.Accounts.Add(account);
                    break;

                case 4:
                    revenueClass.Accounts.Add(account);
                    break;

                case 5:
                    expenseClass.Accounts.Add(account);
                    break;

                case 6:
                    temporaryClass.Accounts.Add(account);
                    break;
                }
            }
            _financialService.SaveAccountClasses(accountClasses);
        }
コード例 #13
0
        private void InitializeChartOfAccountsAndAccountClasses()
        {
            IList <Core.Domain.Financials.AccountClass> accountClasses = new List <Core.Domain.Financials.AccountClass>();

            // If no accounts found just return.
            if (_financialService.GetAccounts().Any())
            {
                return;
            }

            string[,] values = LoadCsv(Resource.ResourceManager.GetString("coa").Split(';')[0]);
            List <Core.Domain.Financials.Account> accounts = new List <Core.Domain.Financials.Account>();

            for (var i = 1; i < (values.Length / 8); i++)
            {
                Core.Domain.Financials.Account account =
                    new Core.Domain.Financials.Account
                {
                    AccountCode     = values[i, 0],
                    AccountName     = values[i, 1],
                    AccountClassId  = int.Parse(values[i, 3]),
                    IsCash          = bool.Parse(values[i, 5]),
                    IsContraAccount =
                        bool.Parse(values[i, 4])
                };

                switch (values[i, 7])
                {
                case "DR":
                    account.DrOrCrSide = Core.Domain.DrOrCrSide.Dr;
                    break;

                case "CR":
                    account.DrOrCrSide = Core.Domain.DrOrCrSide.Cr;
                    break;

                default:
                    account.DrOrCrSide = Core.Domain.DrOrCrSide.NA;
                    break;
                }

                account.CompanyId = 1;
                accounts.Add(account);
            }

            for (var i = 1; i < (values.Length / 8); i++)
            {
                string accountCode       = values[i, 0];
                string parentAccountCode = values[i, 2];

                var account       = accounts.FirstOrDefault(a => a.AccountCode == accountCode);
                var parentAccount = accounts.FirstOrDefault(a => a.AccountCode == parentAccountCode);
                if (parentAccount != null)
                {
                    account.ParentAccount = parentAccount;
                }
            }

            var assetClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Assets",
                NormalBalance = "Dr"
            };
            var liabilitiesClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Liabilities",
                NormalBalance = "Cr"
            };
            var equityClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Equity",
                NormalBalance = "Cr"
            };
            var revenueClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Revenue",
                NormalBalance = "Cr"
            };
            var expenseClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Expense",
                NormalBalance = "Dr"
            };
            var temporaryClass = new Core.Domain.Financials.AccountClass
            {
                Name          = "Temporary",
                NormalBalance = "NA"
            };

            accountClasses.Add(assetClass);
            accountClasses.Add(liabilitiesClass);
            accountClasses.Add(equityClass);
            accountClasses.Add(revenueClass);
            accountClasses.Add(expenseClass);
            accountClasses.Add(temporaryClass);

            foreach (var account in accounts)
            {
                switch (account.AccountClassId)
                {
                case 1:
                    assetClass.Accounts.Add(account);
                    break;

                case 2:
                    liabilitiesClass.Accounts.Add(account);
                    break;

                case 3:
                    equityClass.Accounts.Add(account);
                    break;

                case 4:
                    revenueClass.Accounts.Add(account);
                    break;

                case 5:
                    expenseClass.Accounts.Add(account);
                    break;

                case 6:
                    temporaryClass.Accounts.Add(account);
                    break;
                }
            }
            _financialService.SaveAccountClasses(accountClasses);
        }
コード例 #14
0
        private void InitializedData()
        {
            /*
             * 1.Company
             * 2.Chart of accounts/account classes
             * 3.Financial year
             * 4.Payment terms
             * 5.GL setting
             * 6.Tax
             * 7.Vendor
             * 8.Customer
             * 9.Items
             * 10.Banks
             * 11.Security Roles
             */
            try
            {
                // 1.Company
                Core.Domain.Company company = null;
                if (_adminService.GetDefaultCompany() == null)
                {
                    company = new Core.Domain.Company()
                    {
                        Name        = "Financial Solutions Inc.",
                        CompanyCode = "100",
                        ShortName   = "FSI",
                    };
                    _adminService.SaveCompany(company);
                }

                //2.Chart of accounts/account classes
                IList <Core.Domain.Financials.AccountClass> accountClasses = new List <Core.Domain.Financials.AccountClass>();
                if (_financialService.GetAccounts().Count() < 1)
                {
                    string[,] values = LoadCsv(Resource.ResourceManager.GetString("coa").Split(';')[0]);
                    List <Core.Domain.Financials.Account> accounts = new List <Core.Domain.Financials.Account>();

                    for (int i = 1; i < (values.Length / 8); i++)
                    {
                        Core.Domain.Financials.Account account = new Core.Domain.Financials.Account();
                        account.AccountCode     = values[i, 0].ToString();
                        account.AccountName     = values[i, 1].ToString();
                        account.AccountClassId  = int.Parse(values[i, 3].ToString());
                        account.IsCash          = bool.Parse(values[i, 5].ToString());
                        account.IsContraAccount = bool.Parse(values[i, 4].ToString());

                        if (values[i, 7].ToString() == "DR")
                        {
                            account.DrOrCrSide = Core.Domain.DrOrCrSide.Dr;
                        }
                        else if (values[i, 7].ToString() == "CR")
                        {
                            account.DrOrCrSide = Core.Domain.DrOrCrSide.Cr;
                        }
                        else
                        {
                            account.DrOrCrSide = Core.Domain.DrOrCrSide.NA;
                        }

                        account.CompanyId = 1;
                        accounts.Add(account);
                    }

                    for (int i = 1; i < (values.Length / 8); i++)
                    {
                        string accountCode       = values[i, 0].ToString();
                        string parentAccountCode = values[i, 2].ToString();

                        var account       = accounts.Where(a => a.AccountCode == accountCode).FirstOrDefault();
                        var parentAccount = accounts.Where(a => a.AccountCode == parentAccountCode).FirstOrDefault();
                        if (parentAccount != null)
                        {
                            account.ParentAccount = parentAccount;
                        }
                    }

                    var assetClass = new Core.Domain.Financials.AccountClass()
                    {
                        Name = "Assets", NormalBalance = "Dr"
                    };
                    var liabilitiesClass = new Core.Domain.Financials.AccountClass()
                    {
                        Name = "Liabilities", NormalBalance = "Cr"
                    };
                    var equityClass = new Core.Domain.Financials.AccountClass()
                    {
                        Name = "Equity", NormalBalance = "Cr"
                    };
                    var revenueClass = new Core.Domain.Financials.AccountClass()
                    {
                        Name = "Revenue", NormalBalance = "Cr"
                    };
                    var expenseClass = new Core.Domain.Financials.AccountClass()
                    {
                        Name = "Expense", NormalBalance = "Dr"
                    };
                    var temporaryClass = new Core.Domain.Financials.AccountClass()
                    {
                        Name = "Temporary", NormalBalance = "NA"
                    };

                    accountClasses.Add(assetClass);
                    accountClasses.Add(liabilitiesClass);
                    accountClasses.Add(equityClass);
                    accountClasses.Add(revenueClass);
                    accountClasses.Add(expenseClass);
                    accountClasses.Add(temporaryClass);

                    foreach (var account in accounts)
                    {
                        switch (account.AccountClassId)
                        {
                        case 1:
                            assetClass.Accounts.Add(account);
                            break;

                        case 2:
                            liabilitiesClass.Accounts.Add(account);
                            break;

                        case 3:
                            equityClass.Accounts.Add(account);
                            break;

                        case 4:
                            revenueClass.Accounts.Add(account);
                            break;

                        case 5:
                            expenseClass.Accounts.Add(account);
                            break;

                        case 6:
                            temporaryClass.Accounts.Add(account);
                            break;
                        }
                    }
                    _financialService.SaveAccountClasses(accountClasses);
                }

                //3.Financial year
                Core.Domain.Financials.FinancialYear financialYear = null;
                if (_adminService.GetFinancialYears().Count < 1)
                {
                    financialYear = new Core.Domain.Financials.FinancialYear()
                    {
                        FiscalYearCode = "FY1516",
                        FiscalYearName = "FY 2016/2017",
                        StartDate      = new DateTime(2016, 01, 01),
                        EndDate        = new DateTime(2016, 12, 31),
                        IsActive       = true
                    };
                    _financialService.SaveFinancialYear(financialYear);
                }

                //4.Payment terms
                IList <Core.Domain.PaymentTerm> paymentTerms = new List <Core.Domain.PaymentTerm>();
                if (_adminService.GetPaymentTerms().Count < 1)
                {
                    paymentTerms.Add(new Core.Domain.PaymentTerm()
                    {
                        Description  = "Payment due within 10 days",
                        PaymentType  = Core.Domain.PaymentTypes.AfterNoOfDays,
                        DueAfterDays = 10,
                        IsActive     = true,
                    });
                    paymentTerms.Add(new Core.Domain.PaymentTerm()
                    {
                        Description  = "Due 15th Of the Following Month 	",
                        PaymentType  = Core.Domain.PaymentTypes.DayInTheFollowingMonth,
                        DueAfterDays = 15,
                        IsActive     = true,
                    });
                    paymentTerms.Add(new Core.Domain.PaymentTerm()
                    {
                        Description = "Cash Only",
                        PaymentType = Core.Domain.PaymentTypes.Cash,
                        IsActive    = true,
                    });

                    foreach (var p in paymentTerms)
                    {
                        _financialService.SavePaymentTerm(p);
                    }
                }


                //5.GL setting
                Core.Domain.Financials.GeneralLedgerSetting glSetting = null;
                if (_financialService.GetGeneralLedgerSetting() == null)
                {
                    glSetting = new Core.Domain.Financials.GeneralLedgerSetting()
                    {
                        Company = company,
                        GoodsReceiptNoteClearingAccount = _financialService.GetAccountByAccountCode("10810"),
                        ShippingChargeAccount           = _financialService.GetAccountByAccountCode("40500"),
                        SalesDiscountAccount            = _financialService.GetAccountByAccountCode("40400"),
                    };
                }
                _financialService.SaveGeneralLedgerSetting(glSetting);

                //6.Tax
                IList <Core.Domain.TaxSystem.Tax> taxes = new List <Core.Domain.TaxSystem.Tax>();
                if (_financialService.GetTaxes().Count() < 1)
                {
                    var salesTaxAccount    = _financialService.GetAccountByAccountCode("20300");
                    var purchaseTaxAccount = _financialService.GetAccountByAccountCode("50700");

                    var vat5 = new Core.Domain.TaxSystem.Tax()
                    {
                        TaxCode             = "VAT5%",
                        TaxName             = "VAT 5%",
                        Rate                = 5,
                        IsActive            = true,
                        SalesAccountId      = salesTaxAccount.Id,
                        PurchasingAccountId = purchaseTaxAccount.Id,
                    };

                    var vat10 = new Core.Domain.TaxSystem.Tax()
                    {
                        TaxCode             = "VAT10%",
                        TaxName             = "VAT 10%",
                        Rate                = 10,
                        IsActive            = true,
                        SalesAccountId      = salesTaxAccount.Id,
                        PurchasingAccountId = purchaseTaxAccount.Id,
                    };

                    var evat12 = new Core.Domain.TaxSystem.Tax()
                    {
                        TaxCode             = "VAT12%",
                        TaxName             = "VAT 12%",
                        Rate                = 12,
                        IsActive            = true,
                        SalesAccountId      = salesTaxAccount.Id,
                        PurchasingAccountId = purchaseTaxAccount.Id,
                    };

                    var exportTax1 = new Core.Domain.TaxSystem.Tax()
                    {
                        TaxCode             = "exportTax1%",
                        TaxName             = "Export Tax 1%",
                        Rate                = 1,
                        IsActive            = true,
                        SalesAccountId      = salesTaxAccount.Id,
                        PurchasingAccountId = purchaseTaxAccount.Id,
                    };

                    var taxGroupVAT = new Core.Domain.TaxSystem.TaxGroup()
                    {
                        Description          = "VAT",
                        TaxAppliedToShipping = false,
                        IsActive             = true,
                    };

                    var taxGroupExport = new Core.Domain.TaxSystem.TaxGroup()
                    {
                        Description          = "Export",
                        TaxAppliedToShipping = false,
                        IsActive             = true,
                    };

                    IList <Core.Domain.TaxSystem.TaxGroup> taxGroups = new List <Core.Domain.TaxSystem.TaxGroup>();
                    taxGroups.Add(taxGroupVAT);
                    taxGroups.Add(taxGroupExport);

                    var itemTaxGroupRegular = new Core.Domain.TaxSystem.ItemTaxGroup()
                    {
                        Name          = "Regular",
                        IsFullyExempt = false,
                    };

                    var itemTaxGroupRegularPreferenced = new Core.Domain.TaxSystem.ItemTaxGroup()
                    {
                        Name          = "Preferenced",
                        IsFullyExempt = false,
                    };

                    IList <Core.Domain.TaxSystem.ItemTaxGroup> itemtaxGroups = new List <Core.Domain.TaxSystem.ItemTaxGroup>();
                    itemtaxGroups.Add(itemTaxGroupRegular);
                    itemtaxGroups.Add(itemTaxGroupRegularPreferenced);

                    vat5.TaxGroupTaxes.Add(new Core.Domain.TaxSystem.TaxGroupTax()
                    {
                        TaxGroup = taxGroupVAT,
                    });

                    evat12.TaxGroupTaxes.Add(new Core.Domain.TaxSystem.TaxGroupTax()
                    {
                        TaxGroup = taxGroupVAT,
                    });

                    exportTax1.TaxGroupTaxes.Add(new Core.Domain.TaxSystem.TaxGroupTax()
                    {
                        TaxGroup = taxGroupExport,
                    });

                    vat5.ItemTaxGroupTaxes.Add(new Core.Domain.TaxSystem.ItemTaxGroupTax()
                    {
                        ItemTaxGroup = itemTaxGroupRegularPreferenced,
                        IsExempt     = false,
                    });

                    evat12.ItemTaxGroupTaxes.Add(new Core.Domain.TaxSystem.ItemTaxGroupTax()
                    {
                        ItemTaxGroup = itemTaxGroupRegular,
                        IsExempt     = false,
                    });

                    taxes.Add(vat5);
                    taxes.Add(vat10);
                    taxes.Add(evat12);
                    taxes.Add(exportTax1);

                    foreach (var tax in taxes)
                    {
                        _adminService.AddNewTax(tax);
                    }
                }

                Core.Domain.Purchases.Vendor vendor = new Core.Domain.Purchases.Vendor();
                if (_purchasingService.GetVendors().Count() < 1)
                {
                    Core.Domain.Party vendorParty = new Core.Domain.Party();
                    vendorParty.Name      = "ABC Sample Supplier";
                    vendorParty.PartyType = Core.Domain.PartyTypes.Vendor;
                    vendorParty.IsActive  = true;

                    vendor.AccountsPayableAccountId  = _financialService.GetAccountByAccountCode("20110").Id;
                    vendor.PurchaseAccountId         = _financialService.GetAccountByAccountCode("50200").Id;
                    vendor.PurchaseDiscountAccountId = _financialService.GetAccountByAccountCode("50400").Id;
                    vendor.Party = vendorParty;

                    Core.Domain.Contact primaryContact = new Core.Domain.Contact();
                    primaryContact.ContactType = Core.Domain.ContactTypes.Vendor;
                    primaryContact.FirstName   = "Mary";
                    primaryContact.LastName    = "Walter";

                    primaryContact.Party           = new Core.Domain.Party();
                    primaryContact.Party.Name      = "Mary Walter";
                    primaryContact.Party.PartyType = Core.Domain.PartyTypes.Contact;

                    vendor.PrimaryContact = primaryContact;

                    _purchasingService.AddVendor(vendor);
                }

                //8.Customer
                Core.Domain.Sales.Customer customer = new Core.Domain.Sales.Customer();
                if (_salesService.GetCustomers().Count() < 1)
                {
                    var accountAR            = _financialService.GetAccountByAccountCode("10120");
                    var accountSales         = _financialService.GetAccountByAccountCode("40100");
                    var accountAdvances      = _financialService.GetAccountByAccountCode("20120");
                    var accountSalesDiscount = _financialService.GetAccountByAccountCode("40400");

                    Core.Domain.Party customerParty = new Core.Domain.Party();
                    customerParty.Name      = "ABC Customer";
                    customerParty.PartyType = Core.Domain.PartyTypes.Customer;
                    customerParty.IsActive  = true;

                    customer.AccountsReceivableAccountId = accountAR != null ? (int?)accountAR.Id : null;
                    customer.SalesAccountId            = accountSales != null ? (int?)accountSales.Id : null;
                    customer.CustomerAdvancesAccountId = accountAdvances != null ? (int?)accountAdvances.Id : null;
                    customer.SalesDiscountAccountId    = accountSalesDiscount != null ? (int?)accountSalesDiscount.Id : null;
                    customer.TaxGroupId = _financialService.GetTaxGroups().Where(tg => tg.Description == "VAT").FirstOrDefault().Id;
                    customer.Party      = customerParty;

                    Core.Domain.Contact primaryContact = new Core.Domain.Contact();
                    primaryContact.ContactType = Core.Domain.ContactTypes.Customer;
                    primaryContact.FirstName   = "John";
                    primaryContact.LastName    = "Doe";

                    primaryContact.Party           = new Core.Domain.Party();
                    primaryContact.Party.Name      = "John Doe";
                    primaryContact.Party.PartyType = Core.Domain.PartyTypes.Contact;

                    customer.PrimaryContact = primaryContact;

                    _salesService.AddCustomer(customer);
                }

                // 9.Items
                IList <Core.Domain.Items.Measurement>  measurements = new List <Core.Domain.Items.Measurement>();
                IList <Core.Domain.Items.ItemCategory> categories   = new List <Core.Domain.Items.ItemCategory>();

                if (_inventoryService.GetAllItems().Count() < 1)
                {
                    measurements.Add(new Core.Domain.Items.Measurement()
                    {
                        Code = "EA", Description = "Each"
                    });
                    measurements.Add(new Core.Domain.Items.Measurement()
                    {
                        Code = "PK", Description = "Pack"
                    });
                    measurements.Add(new Core.Domain.Items.Measurement()
                    {
                        Code = "MO", Description = "Monthly"
                    });
                    measurements.Add(new Core.Domain.Items.Measurement()
                    {
                        Code = "HR", Description = "Hour"
                    });

                    foreach (var m in measurements)
                    {
                        _inventoryService.SaveMeasurement(m);
                    }

                    // Accounts = Sales A/C (40100), Inventory (10800), COGS (50300), Inv Adjustment (50500), Item Assm Cost (10900)
                    var sales        = _financialService.GetAccountByAccountCode("40100");
                    var inventory    = _financialService.GetAccountByAccountCode("10800");
                    var invAdjusment = _financialService.GetAccountByAccountCode("50500");
                    var cogs         = _financialService.GetAccountByAccountCode("50300");
                    var assemblyCost = _financialService.GetAccountByAccountCode("10900");

                    var chargesCategory = new Core.Domain.Items.ItemCategory()
                    {
                        Name                   = "Charges",
                        Measurement            = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        ItemType               = Core.Domain.ItemTypes.Charge,
                        SalesAccount           = sales,
                        InventoryAccount       = inventory,
                        AdjustmentAccount      = invAdjusment,
                        CostOfGoodsSoldAccount = cogs,
                        AssemblyAccount        = assemblyCost,
                    };

                    chargesCategory.Items.Add(new Core.Domain.Items.Item()
                    {
                        Description         = "HOA Dues",
                        SellDescription     = "HOA Dues",
                        PurchaseDescription = "HOA Dues",
                        Price = 350,
                        SmallestMeasurement = _inventoryService.GetMeasurements().Where(m => m.Code == "MO").FirstOrDefault(),
                        SellMeasurement     = _inventoryService.GetMeasurements().Where(m => m.Code == "MO").FirstOrDefault(),
                        SalesAccount        = _financialService.GetAccountByAccountCode("40200"),
                        No   = "0001",
                        Code = "1111"
                    });

                    categories.Add(chargesCategory);

                    var componentCategory = new Core.Domain.Items.ItemCategory()
                    {
                        Name                   = "Components",
                        Measurement            = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        ItemType               = Core.Domain.ItemTypes.Purchased,
                        SalesAccount           = sales,
                        InventoryAccount       = inventory,
                        AdjustmentAccount      = invAdjusment,
                        CostOfGoodsSoldAccount = cogs,
                        AssemblyAccount        = assemblyCost,
                    };

                    var carStickerItem = new Core.Domain.Items.Item()
                    {
                        Description         = "Car Sticker",
                        SellDescription     = "Car Sticker",
                        PurchaseDescription = "Car Sticker",
                        Price = 100,
                        Cost  = 40,
                        SmallestMeasurement        = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        SellMeasurement            = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        PurchaseMeasurement        = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        SalesAccount               = sales,
                        InventoryAccount           = inventory,
                        CostOfGoodsSoldAccount     = cogs,
                        InventoryAdjustmentAccount = invAdjusment,
                        ItemTaxGroup               = _financialService.GetItemTaxGroups().Where(m => m.Name == "Regular").FirstOrDefault(),
                        No   = "0002",
                        Code = "2222"
                    };

                    var otherItem = new Core.Domain.Items.Item()
                    {
                        Description         = "Optical Mouse",
                        SellDescription     = "Optical Mouse",
                        PurchaseDescription = "Optical Mouse",
                        Price = 80,
                        Cost  = 30,
                        SmallestMeasurement        = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        SellMeasurement            = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        PurchaseMeasurement        = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        SalesAccount               = sales,
                        InventoryAccount           = inventory,
                        CostOfGoodsSoldAccount     = cogs,
                        InventoryAdjustmentAccount = invAdjusment,
                        ItemTaxGroup               = _financialService.GetItemTaxGroups().Where(m => m.Name == "Regular").FirstOrDefault(),
                        No   = "0003",
                        Code = "3333"
                    };

                    componentCategory.Items.Add(carStickerItem);
                    componentCategory.Items.Add(otherItem);

                    categories.Add(componentCategory);

                    categories.Add(new Core.Domain.Items.ItemCategory()
                    {
                        Name                   = "Services",
                        Measurement            = _inventoryService.GetMeasurements().Where(m => m.Code == "HR").FirstOrDefault(),
                        ItemType               = Core.Domain.ItemTypes.Service,
                        SalesAccount           = sales,
                        InventoryAccount       = inventory,
                        AdjustmentAccount      = invAdjusment,
                        CostOfGoodsSoldAccount = cogs,
                        AssemblyAccount        = assemblyCost,
                    });

                    categories.Add(new Core.Domain.Items.ItemCategory()
                    {
                        Name                   = "Systems",
                        Measurement            = _inventoryService.GetMeasurements().Where(m => m.Code == "EA").FirstOrDefault(),
                        ItemType               = Core.Domain.ItemTypes.Manufactured,
                        SalesAccount           = sales,
                        InventoryAccount       = inventory,
                        AdjustmentAccount      = invAdjusment,
                        CostOfGoodsSoldAccount = cogs,
                        AssemblyAccount        = assemblyCost,
                    });

                    foreach (var c in categories)
                    {
                        _inventoryService.SaveItemCategory(c);
                    }
                }

                //10.Banks
                IList <Core.Domain.Financials.Bank> banks = new List <Core.Domain.Financials.Bank>();
                if (_financialService.GetCashAndBanks().Count() < 1)
                {
                    var bank = new Core.Domain.Financials.Bank()
                    {
                        AccountId = _financialService.GetAccountByAccountCode("10111").Id,
                        Name      = "General Fund",
                        Type      = Core.Domain.BankTypes.CheckingAccount,
                        BankName  = "GFB",
                        Number    = "1234567890",
                        Address   = "123 Main St.",
                        IsDefault = true,
                        IsActive  = true,
                    };
                    banks.Add(bank);

                    bank = new Core.Domain.Financials.Bank()
                    {
                        AccountId = _financialService.GetAccountByAccountCode("10113").Id,
                        Name      = "Petty Cash Account",
                        Type      = Core.Domain.BankTypes.CashAccount,
                        IsDefault = false,
                        IsActive  = true,
                    };
                    banks.Add(bank);

                    foreach (var b in banks)
                    {
                        _financialService.SaveBank(b);
                    }
                }

                //11.Security Roles
                if (_securityService.GetAllSecurityRole().Count() < 1)
                {
                    _securityService.AddRole("SystemAdministrators");
                    _securityService.AddRole("GeneralUsers");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            System.Diagnostics.Debug.Write("Completed");
        }