public ActionResult EditAccount(int id, AccountFilterModel filter, FormCollection collection)
        {
            var account = AccountServices.GetAccount(id);

            try
            {
                UpdateModel(account);
                AccountServices.UpdateAccount(account);

                return RedirectToAction("AccountListing", filter.GenerateAccountListingRoute());
            }
            catch (Exception ex)
            {
                // Invalid - redisplay with errors
                Logger.Error(ex.ToString());
                ModelState.AddModelError(String.Empty, Constants.ServerError);
                var model = new AccountDetailModel()
                {
                    Action = "EditAccount",
                    Account = account,
                    Filter = filter
                };

                ViewBag.AccountTypes = AccountTypeServices.GetAccountTypes(false, account.AccountTypeId);
                ViewBag.StateCodes = LookupServices.GetStateOptions(account.StateCode);

                return View("AccountDetail", model);
            }
        }
        public ActionResult AccountListing(AccountFilterModel filter)
        {
            var listing = AccountServices.GetAccountListing(filter);

            ViewBag.SizeOptions = LookupServices.GetSizeOptions(filter.Size);
            ViewBag.AccountTypeOptions = AccountTypeServices.GetAccountTypes(true);

            if (listing.AccountList.Count == 0)
                return View("AccountListingNoData", listing);
            else
                return View("AccountListing", listing);
        }
        public AccountListingModel GetAccountListing(AccountFilterModel filter)
        {
            if (filter == null) filter = new AccountFilterModel();

            var query = Mapper.Map<AccountFilterModel, Data.Query.AccountQuery>(filter);
            var accounts = AccountRepository.GetAccounts(query).OrderBy(o => o.Name).ToList();
            var accountList = Mapper.Map<IList<Data.Graph.Account>, IList<AccountModel>>(accounts);

            AccountListingModel model = new AccountListingModel();
            model.Filter = filter;
            model.AccountList = accountList.ToPagedList(filter.Page, filter.Size);

            return model;
        }
        public ActionResult EditContact(int id, int contactId, AccountFilterModel filter)
        {
            var account = AccountServices.GetAccount(id);

            var model = new ContactDetailModel()
            {
                Action = "EditContact",
                Contact = account.ContactList.Where(c => c.Id == contactId).FirstOrDefault(),
                Filter = filter,
            };

            ViewBag.ContactTypes = AccountServices.GetContactTypes(model.Contact.ContactTypeId);

            return View("ContactDetail", model);
        }
        public ActionResult EditAccount(int id, AccountFilterModel filter)
        {
            var account = AccountServices.GetAccount(id);

            var model = new AccountDetailModel()
            {
                Action = "EditAccount",
                Account = account,
                Filter = filter,
            };

            ViewBag.AccountTypes = AccountTypeServices.GetAccountTypes(false, account.AccountTypeId);
            ViewBag.StateCodes = LookupServices.GetStateOptions(account.StateCode);

            return View("AccountDetail", model);
        }
        public ActionResult EditContact(int id, int contactId, AccountFilterModel filter, FormCollection collection)
        {
            var account = AccountServices.GetAccount(id);
            var contact = account.ContactList.Where(c => c.Id == contactId).FirstOrDefault();

            try
            {
                // Need to specify properties because the id (account) overwrites Contact.Id
                UpdateModel(contact, new string[] { "ContactTypeId", "ContactDetail", "FirstName", "LastName" });
                AccountServices.UpdateContact(account, contact);

                return RedirectToAction("EditAccount", filter.GenerateAccountDetailRoute(id));
            }
            catch (Exception ex)
            {
                // Invalid - redisplay with errors
                Logger.Error(ex.ToString());
                ModelState.AddModelError(String.Empty, Constants.ServerError);

                var model = new ContactDetailModel()
                {
                    Action = "EditContact",
                    Contact = contact,
                    Filter = filter,
                };

                ViewBag.ContactTypes = AccountServices.GetContactTypes(contact.ContactTypeId);

                return View("ContactDetail", model);
            }
        }
        public ActionResult NewContact(int id, AccountFilterModel filter)
        {
            var account = AccountServices.GetAccount(id);

            var model = new ContactDetailModel()
            {
                Action = "NewContact",
                Contact = new ContactModel() { AccountId = id },
                Filter = filter,
            };

            ViewBag.ContactTypes = AccountServices.GetContactTypes(model.Contact.ContactTypeId);

            return View("ContactDetail", model);
        }
        public ActionResult NewAccount(AccountFilterModel filter)
        {
            var model = new AccountDetailModel()
            {
                Action = "NewAccount",
                Account = new AccountModel(),
                Filter = filter,
            };

            ViewBag.AccountTypes = AccountTypeServices.GetAccountTypes(false);
            ViewBag.StateCodes = LookupServices.GetStateOptions("TN");

            return View("AccountDetail", model);
        }