public ActionResult Details(string coordinatorId) { using (var session = Raven.GetStore().OpenSession()) { var coordinatorSummary = session.Query <ScheduledMessagesStatusCountInCoordinatorIndex.ReduceResult, ScheduledMessagesStatusCountInCoordinatorIndex>() .Where(s => s.CoordinatorId == coordinatorId) .ToList(); var coordinatorTrackingData = session.Load <CoordinatorTrackingData>(coordinatorId); if (coordinatorSummary.Count == 0 || coordinatorTrackingData == null) { throw new NotImplementedException("need to have some data..."); return(View("DetailsNotCreated", model: coordinatorId)); } DateTime?nextSmsDateUtc = session.Query <ScheduleTrackingData, ScheduleMessagesInCoordinatorIndex>() .Where(s => s.CoordinatorId == Guid.Parse(coordinatorId) && s.MessageStatus == MessageStatus.Scheduled) .OrderBy(s => s.ScheduleTimeUtc) .Select(s => s.ScheduleTimeUtc) .FirstOrDefault(); if (nextSmsDateUtc == DateTime.MinValue) { nextSmsDateUtc = null; } DateTime?finalSmsDateUtc = session.Query <ScheduleTrackingData, ScheduleMessagesInCoordinatorIndex>() .Where(s => s.CoordinatorId == Guid.Parse(coordinatorId) && s.MessageStatus == MessageStatus.Scheduled) .OrderByDescending(s => s.ScheduleTimeUtc) .Select(s => s.ScheduleTimeUtc) .FirstOrDefault(); if (finalSmsDateUtc == DateTime.MinValue) { finalSmsDateUtc = null; } var overview = new CoordinatorOverview(coordinatorTrackingData, coordinatorSummary); overview.NextScheduledMessageDate = nextSmsDateUtc; overview.FinalScheduledMessageDate = finalSmsDateUtc; if (HttpContext.Session != null && HttpContext.Session["CoordinatorState_" + coordinatorId] != null && HttpContext.Session["CoordinatorState_" + coordinatorId] is CoordinatorStatusTracking) { overview.CurrentStatus = (CoordinatorStatusTracking)HttpContext.Session["CoordinatorState_" + coordinatorId]; } return(View("Details", overview)); } }
public ActionResult Resume(FormCollection collection) { var coordinatorid = collection["CoordinatorId"]; var timeToResume = DateTime.Now; var timeToResumeParsed = DateTime.TryParse(collection["timeToResume"], out timeToResume); var userTimeZone = collection["UserTimeZone"]; var finishTime = DateTime.Now; var finishTimeParsed = DateTime.TryParse(collection["finishTime"], out finishTime); // validate if (!timeToResumeParsed) { ModelState.AddModelError("timeToResume", "Time to resume must be set"); } if (timeToResume < DateTime.Now.AddMinutes(-5)) { ModelState.AddModelError("timeToResume", "Time to resume must be in the future"); } if (finishTimeParsed && finishTime <= timeToResume) { ModelState.AddModelError("finishTime", "Finish time must be after time to resume"); } if (!ModelState.IsValid) { using (var session = RavenDocStore.GetStore().OpenSession()) { var coordinatorSummary = session.Query <ScheduledMessagesStatusCountInCoordinatorIndex.ReduceResult, ScheduledMessagesStatusCountInCoordinatorIndex>() .Where(s => s.CoordinatorId == coordinatorid) .ToList(); var coordinatorTrackingData = session.Load <CoordinatorTrackingData>(coordinatorid); if (coordinatorTrackingData == null) { return(View("DetailsNotCreated", model: coordinatorid)); } if (HttpContext.Session != null && HttpContext.Session["CoordinatorState_" + coordinatorid] != null && HttpContext.Session["CoordinatorState_" + coordinatorid] is CoordinatorStatusTracking) { coordinatorTrackingData.CurrentStatus = (CoordinatorStatusTracking)HttpContext.Session["CoordinatorState_" + coordinatorid]; } ViewData.Add("timeToResume", collection["timeToResume"]); ViewData.Add("finishTime", collection["finishTime"]); var overview = new CoordinatorOverview(coordinatorTrackingData, coordinatorSummary); return(View("Details3", overview)); } } var dateTimeToResumeUtc = DateTimeOlsenMapping.DateTimeWithOlsenZoneToUtc(timeToResume, userTimeZone); if (finishTimeParsed) { var dateTimeToFinishUtc = DateTimeOlsenMapping.DateTimeWithOlsenZoneToUtc(finishTime, userTimeZone); Bus.Send(new RescheduleTrickledMessages { CoordinatorId = Guid.Parse(coordinatorid), ResumeTimeUtc = dateTimeToResumeUtc, FinishTimeUtc = dateTimeToFinishUtc, MessageRequestTimeUtc = DateTime.UtcNow }); } else { Bus.Send(new ResumeTrickledMessages { CoordinatorId = Guid.Parse(coordinatorid), ResumeTimeUtc = dateTimeToResumeUtc, MessageRequestTimeUtc = DateTime.UtcNow }); } HttpContext.Session.Add("CoordinatorState_" + coordinatorid, CoordinatorStatusTracking.Started); return(RedirectToAction("Details", new { coordinatorid })); }