public static ApplicationViewModel Create(IRepository repository, IFirmService firmService, string userId, string siteId, Application application = null, bool seminarTerms = false) { Check.Require(repository != null, "Repository must be supplied"); var viewModel = new ApplicationViewModel { Application = application ?? new Application(), // always get the latest Seminar = SiteService.GetLatestSeminar(siteId), //Commodities = repository.OfType<Commodity>().Queryable.Where(a=>a.IsActive).OrderBy(a=>a.Name).ToList(), Countries = repository.OfType<Country>().GetAll(), CommunicationOptions = repository.OfType<CommunicationOption>().GetAll(), SeminarTerms = seminarTerms }; // load commodities var commodities = repository.OfType<Commodity>().Queryable.Where(a => a.IsActive).OrderBy(a => a.Name).ToList(); viewModel.Commodities = commodities; // load the firm types var firmTypes = repository.OfType<FirmType>().Queryable.Where(a => a.IsActive).OrderBy(a => a.Name).ToList(); viewModel.FirmTypes = firmTypes; var user = repository.OfType<User>().Queryable.FirstOrDefault(a => a.LoweredUserName == userId.ToLower()); if (user == null) throw new ArgumentException(string.Format("Unable to load user with userid {0}.", userId)); // populate the application with person info var person = user.Person; // if person is not null, there should be at least one registration (seminar person) if (person != null) { viewModel.PersonId = person.Id; viewModel.Application.FirstName = person.FirstName; viewModel.Application.MI = person.MI; viewModel.Application.LastName = person.LastName; viewModel.Application.BadgeName = person.BadgeName; viewModel.Application.CommunicationOption = person.CommunicationOption; viewModel.Application.ContactInformationRelease = person.ContactInformationRelease; // get latest seminar information var reg = person.GetLatestRegistration(siteId); if (reg != null) { viewModel.Application.JobTitle = reg.Title; } // copy assistant information var assistant = person.Contacts.FirstOrDefault(a => a.ContactType.Id == 'A'); if (assistant != null) { viewModel.Application.AssistantEmail = assistant.Email; viewModel.Application.AssistantFirstName = assistant.FirstName; viewModel.Application.AssistantLastName = assistant.LastName; viewModel.Application.AssistantPhone = assistant.Phone; } var seminarPeople = person.GetLatestRegistration(siteId); if (seminarPeople != null) { viewModel.Application.Firm = seminarPeople.Firm; } viewModel.Application.FirmPhone = person.Phone; viewModel.Application.FirmPhoneExt = person.PhoneExt; var address = person.Addresses.FirstOrDefault(a => a.AddressType.Id == 'B'); if (address != null) { viewModel.Application.FirmAddressLine1 = address.Line1; viewModel.Application.FirmAddressLine2 = address.Line2; viewModel.Application.FirmCity = address.City; viewModel.Application.FirmState = address.State; viewModel.Application.FirmZip = address.Zip; viewModel.Application.Country = address.Country; } } viewModel.HasPhoto = user.Person != null && user.Person.MainProfilePicture != null; // get the firms and add the "Other" option //var firms = new List<Firm>(firmService.GetAllFirms()); //firms = firms.Where(a=>!a.Review && a.Name != "Other (Not Listed)").OrderBy(a=>a.Name).ToList(); var tmpFirms = firmService.GetAllFirms(); var firms = new List<Firm>(); firms.Add(tmpFirms.First(a => a.Name == "Other (Not Listed)")); firms.AddRange(tmpFirms.Where(a=>!a.Review && a.Name != "Other (Not Listed)").OrderBy(a=>a.Name).ToList()); viewModel.Firms = firms; return viewModel; }