public List <SelectListItem> GetAccountTypes(bool includeAll = false, int?selected = null)
        {
            var accountTypes = AccountTypeRepository.GetAccountTypes().OrderBy(o => o.Description);

            List <SelectListItem> lookup =
                accountTypes.Select(l => new SelectListItem()
            {
                Value = l.Id.ToString(), Text = l.Description
            }).ToList();

            if (includeAll)
            {
                lookup.Add(new SelectListItem()
                {
                    Value = All.ToString(), Text = "ALL"
                });
            }

            if (selected.HasValue)
            {
                var selectedItem = lookup.Where(l => l.Value == selected.Value.ToString()).FirstOrDefault();
                if (selectedItem != null)
                {
                    selectedItem.Selected = true;
                }
            }

            return(lookup);
        }
        public List <AccountTypeModel> GetServicesAndLabor()
        {
            var accountTypes = AccountTypeRepository.GetAccountTypes().OrderBy(o => o.Description);

            List <AccountTypeModel> tree = new List <AccountTypeModel>();

            foreach (var accountType in accountTypes)
            {
                AccountTypeModel anode = new AccountTypeModel();
                anode.Id          = accountType.Id;
                anode.Description = accountType.Description;
                anode.TaxRate     = (decimal)accountType.TaxRate;

                foreach (var service in accountType.ServiceTypeList.OrderBy(o => o.ServiceType.Description))
                {
                    AccountTypeServiceModel snode = new AccountTypeServiceModel();
                    snode.Parent                 = anode;
                    snode.Id                     = service.Id;
                    snode.ServiceTypeId          = service.ServiceType.Id;
                    snode.ServiceTypeDescription = service.ServiceType.Description;
                    anode.Services.Add(snode);

                    foreach (var labor in service.LaborTypeList.OrderBy(o => o.LaborType.Description))
                    {
                        AccountTypeLaborModel lnode = new AccountTypeLaborModel();
                        lnode.Parent               = snode;
                        lnode.Id                   = labor.Id;
                        lnode.LaborTypeId          = labor.LaborType.Id;
                        lnode.LaborTypeDescription = labor.LaborType.Description;
                        snode.Labor.Add(lnode);
                    }
                }
                tree.Add(anode);
            }
            return(tree);
        }