public ActionResult Create(CoordinatedSharedMessageModel coordinatedMessages) { var isValid = TryValidateModel(coordinatedMessages); SecondaryValidation(coordinatedMessages); if (isValid && ModelState.IsValid) { CountryCodeReplacement countryCodeReplacement; using (var session = RavenDocStore.GetStore().OpenSession("Configuration")) { countryCodeReplacement = session.Load <CountryCodeReplacement>("CountryCodeConfig"); } var excludeList = new List <string>(); using (var session = RavenDocStore.GetStore().OpenSession("SmsTracking")) { foreach (var previousCoordinatorId in coordinatedMessages.CoordinatorsToExclude) { var previousCoordinator = session.Load <CoordinatorTrackingData>(previousCoordinatorId.ToString()); excludeList.AddRange(previousCoordinator.GetListOfCoordinatedSchedules(RavenDocStore.GetStore()).Select(p => p.Number).ToList()); } } var cleanExcludeList = excludeList.Distinct().ToList(); var coordinatorId = Guid.NewGuid(); if (coordinatedMessages.Message.Length > 160) { coordinatedMessages.Message = coordinatedMessages.Message.Substring(0, 160); } var messageTypeRequired = coordinatedMessages.GetMessageTypeFromModel(); if (messageTypeRequired == typeof(TrickleSmsOverCalculatedIntervalsBetweenSetDates)) { var trickleSmsOverTimePeriod = Mapper.MapToTrickleOverPeriod(coordinatedMessages, countryCodeReplacement, cleanExcludeList, CurrentUser.Name()); trickleSmsOverTimePeriod.CoordinatorId = coordinatorId; Bus.Send(trickleSmsOverTimePeriod); } else if (messageTypeRequired == typeof(SendAllMessagesAtOnce)) { var sendAllAtOnce = Mapper.MapToSendAllAtOnce(coordinatedMessages, countryCodeReplacement, cleanExcludeList, CurrentUser.Name()); sendAllAtOnce.CoordinatorId = coordinatorId; Bus.Send(sendAllAtOnce); } else { throw new NotImplementedException("This option has been removed"); } return(RedirectToAction("Details", "Coordinator", new { coordinatorId = coordinatorId.ToString() })); } var selectListItems = new List <SelectListItem>(); using (var session = RavenDocStore.GetStore().OpenSession("SmsTracking")) { var last10Coordinators = session.Query <CoordinatorTrackingData>().OrderByDescending(c => c.CreationDateUtc).Take(10).ToList(); selectListItems = last10Coordinators.Select(c => new SelectListItem { Selected = false, Text = CoordinatorToExcludeText(c), Value = c.CoordinatorId.ToString() }).ToList(); foreach (var previousCoordinatorId in coordinatedMessages.CoordinatorsToExclude) { if (last10Coordinators.Any(c => c.CoordinatorId == previousCoordinatorId)) { selectListItems.First(s => Guid.Parse(s.Value) == previousCoordinatorId).Selected = true; } else { var coordinatorTrackingData = session.Load <CoordinatorTrackingData>(previousCoordinatorId.ToString()); selectListItems.Add(new SelectListItem { Selected = true, Text = coordinatorTrackingData.MetaData.Topic, Value = coordinatorTrackingData.CoordinatorId.ToString() }); } } } ViewData.Add("CoordinatorExcludeList", selectListItems); return(View("Create", coordinatedMessages)); }