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 }); }
public ActionResult Details(string coordinatorid) { 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 (coordinatorSummary.Count == 0 || coordinatorTrackingData == null) { 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("Details3", overview); } }