public ActionResult OppositionMPs(int id, OppositionMPs model) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { if (ModelState.IsValid) { slippingRequest.OppositionMPsAttending = model.YesNo; slippingRequest.OppositionMPs = model.MPs; CreateOrUpdate(slippingRequest); return(RedirectToAction("CheckYourAnswers")); } else { if (model.YesNo == null && model.MPs == null) { model.MPs = new List <OppositionMP>() { new OppositionMP() }; } return(View(model)); } } else { return(RedirectToAction("NotFound")); } }
private AbsenceRequest GetAbsenceRequest(SlippingRequest slippingRequest, int MPID, int userId) { AbsenceRequest absenceRequest; if (slippingRequest.ID == 0) { absenceRequest = new AbsenceRequest() { CreatedBy = userId, CreatedDate = DateTime.UtcNow, MPID = MPID }; } else { absenceRequest = db.AbsenceRequests.Find(slippingRequest.ID); } if (absenceRequest != null) { absenceRequest.LastChangedBy = userId; absenceRequest.LastChangedDate = DateTime.UtcNow; absenceRequest.ReasonID = slippingRequest.ReasonID; absenceRequest.Details = slippingRequest.Details; absenceRequest.StatusID = slippingRequest.StatusID; absenceRequest.FromDate = slippingRequest.FromDate.ToUtcFromUkTime(); absenceRequest.ToDate = slippingRequest.ToDate.HasValue ? ((DateTime)slippingRequest.ToDate).ToUtcFromUkTime() : slippingRequest.ToDate; absenceRequest.DecisionNotes = slippingRequest.DecisionNotes; absenceRequest.Location = slippingRequest.Location; absenceRequest.TravelTimeInHours = slippingRequest.TravelTimeInHours; absenceRequest.OppositionMPsAttending = slippingRequest.OppositionMPsAttending; } return(absenceRequest); }
public ActionResult OppositionMPs(int id) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { if (slippingRequest.OppositionMPs == null) { slippingRequest.OppositionMPs = new List <OppositionMP>(); } if (slippingRequest.OppositionMPs.Count == 0) { slippingRequest.OppositionMPs.Add(new OppositionMP() { ID = 0, MPID = 0, FullName = null }); } var model = new OppositionMPs { ID = slippingRequest.ID, YesNo = slippingRequest.OppositionMPsAttending, MPs = slippingRequest.OppositionMPs }; return(View(model)); } else { return(RedirectToAction("NotFound", "Home")); } }
private SlippingRequest GetSlippingRequest(AbsenceRequest absenceRequest, ICollection <AbsenceRequestOppositionMP> absenceRequestOppositionMPs) { SlippingRequest slippingRequest = new SlippingRequest() { ID = absenceRequest.ID, MPID = absenceRequest.MPID, ReasonID = absenceRequest.ReasonID, Reason = absenceRequest.ReasonID.HasValue ? absenceRequest.AbsenceRequestReason.Reason : string.Empty, Details = absenceRequest.Details, StatusID = absenceRequest.StatusID, Status = absenceRequest.AbsenceRequestStatus.Status, FromDate = absenceRequest.FromDate.ToUkTimeFromUtc(), ToDate = absenceRequest.ToDate.HasValue ? ((DateTime)absenceRequest.ToDate).ToUkTimeFromUtc() : absenceRequest.ToDate, DecisionNotes = absenceRequest.DecisionNotes, CreatedBy = (int)absenceRequest.CreatedBy, LastChangedBy = absenceRequest.LastChangedBy, Location = absenceRequest.Location, TravelTimeInHours = absenceRequest.TravelTimeInHours, OppositionMPsAttending = absenceRequest.OppositionMPsAttending, OppositionMPs = absenceRequestOppositionMPs.Count > 0 ? absenceRequestOppositionMPs.Select(a => new OppositionMP { ID = a.ID, MPID = a.MPID, FullName = a.MPFullName }).ToList() : new List <OppositionMP>() }; return(slippingRequest); }
public ActionResult FromDate(int?id) { var model = new DateAndTime(); if (id.HasValue) { SlippingRequest slippingRequest = Get(id.Value); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { model = new DateAndTime { ID = slippingRequest.ID, Date = slippingRequest.FromDate, Hour = slippingRequest.FromDate.ToString("HH"), Minute = slippingRequest.FromDate.ToString("mm") }; } else { return(RedirectToAction("NotFound")); } } return(View(model)); }
public int SubmitSlippingRequest(SlippingRequest slippingRequest, int userId) { if (UserCanActForMP(userId, slippingRequest.MPID)) { var absenceRequest = db.AbsenceRequests.Find(slippingRequest.ID).StatusID = 1; db.SaveChanges(); return(slippingRequest.ID); } throw new Exception("Unauthorised"); }
public ActionResult Confirmation(int id) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null) { return(View(slippingRequest)); } else { return(RedirectToAction("NotFound", "Home")); } }
public ActionResult CheckYourAnswers(int id) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { return(View(slippingRequest)); } else { return(RedirectToAction("NotFound", "Home")); } }
public SlippingRequest Get(int requestId, int userId) { if (Exists(requestId, userId)) { AbsenceRequest absenceRequest = db.AbsenceRequests.Find(requestId); var absenceRequestOppositionMPs = absenceRequest.AbsenceRequestOppositionMPs; SlippingRequest slippingRequest = GetSlippingRequest(absenceRequest, absenceRequestOppositionMPs); return(slippingRequest); } else { return(null); } }
public int CreateOrUpdate(SlippingRequest slippingRequest, int MPID, int userId) { AbsenceRequest absenceRequest = GetAbsenceRequest(slippingRequest, MPID, userId); if (absenceRequest.ID == 0) { db.AbsenceRequests.Add(absenceRequest); } else { db.Entry(absenceRequest).State = EntityState.Modified; } if (absenceRequest.OppositionMPsAttending == true) { var removedMPs = new List <AbsenceRequestOppositionMP>(); foreach (var mp in absenceRequest.AbsenceRequestOppositionMPs) { if (!slippingRequest.OppositionMPs.Select(m => m.ID).Contains(mp.ID)) { removedMPs.Add(mp); } } db.AbsenceRequestOppositionMPs.RemoveRange(removedMPs); foreach (var mp in slippingRequest.OppositionMPs) { var absenceRequestOppositionMP = GetAbsenceRequestOppositionMP(mp, absenceRequest.ID, userId); if (absenceRequestOppositionMP.ID == 0) { db.AbsenceRequestOppositionMPs.Add(absenceRequestOppositionMP); } else { db.Entry(absenceRequestOppositionMP).State = EntityState.Modified; } } } else { foreach (var mp in db.AbsenceRequestOppositionMPs.Where(m => m.AbsenceRequestID == absenceRequest.ID)) { db.AbsenceRequestOppositionMPs.Remove(mp); } } db.SaveChanges(); return(absenceRequest.ID); }
public ActionResult FromDate(int?id, DateAndTime model) { var fromDate = model.GetDateTime(); if (fromDate < DateTime.UtcNow.ToUkTimeFromUtc().AddMinutes(15)) { ModelState.AddModelError("Hour", "Start time must be at least 15 minutes from now"); ModelState.AddModelError("Minute", string.Empty); } if (DatesOverlapExistingSlip(MPID, fromDate)) { ModelState.AddModelError("Date", "You have already submitted a slip for this date"); } if (ModelState.IsValid) { if (id.HasValue) { // Update an existing record SlippingRequest slippingRequest = Get(id.Value); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { slippingRequest.FromDate = model.GetDateTime(); CreateOrUpdate(slippingRequest); return(RedirectToAction("ToDate", new { id })); } else { return(RedirectToAction("NotFound", "Home")); } } else { // Create a new record SlippingRequest slippingRequest = new SlippingRequest() { FromDate = model.GetDateTime() }; int requestId = CreateOrUpdate(slippingRequest); return(RedirectToAction("ToDate", new { id = requestId })); } } else { return(View(model)); } }
public ActionResult Location(int id) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { var model = new LocationAndHours { ID = slippingRequest.ID, Location = slippingRequest.Location ?? string.Empty, Hours = slippingRequest.TravelTimeInHours.HasValue ? slippingRequest.TravelTimeInHours.ToString() : string.Empty }; return(View(model)); } else { return(RedirectToAction("NotFound")); } }
public ActionResult ToDate(int id, DateAndTime model) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { DateTime toDate = model.GetDateTime(); if (toDate.Date < slippingRequest.FromDate.Date) { ModelState.AddModelError("Date", "Finish date cannot be before start date"); } if (toDate.Date == slippingRequest.FromDate.Date) { if (toDate.TimeOfDay <= slippingRequest.FromDate.TimeOfDay) { ModelState.AddModelError("Hour", "Finish time must be at least 15 minutes after start time"); ModelState.AddModelError("Minute", string.Empty); } } if (DatesOverlapExistingSlip(MPID, slippingRequest.FromDate, toDate)) { ModelState.AddModelError("Date", "The period you have selected overlaps with an existing slip you have submitted"); } if (ModelState.IsValid) { slippingRequest.ToDate = model.GetDateTime(); CreateOrUpdate(slippingRequest); return(RedirectToAction("Location", new { id })); } else { return(View(model)); } } else { return(RedirectToAction("NotFound")); } }
public ActionResult ToDate(int id) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { var model = new DateAndTime { ID = slippingRequest.ID, Date = slippingRequest.ToDate ?? slippingRequest.FromDate, Hour = slippingRequest.ToDate.HasValue ? slippingRequest.ToDate.Value.ToString("HH") : slippingRequest.FromDate.AddHours(1).ToString("HH"), Minute = slippingRequest.ToDate.HasValue ? slippingRequest.ToDate.Value.ToString("mm") : slippingRequest.FromDate.ToString("mm") }; return(View(model)); } else { return(RedirectToAction("NotFound", "Home")); } }
public ActionResult Reason(int id) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { var model = new ReasonAndDetails { Reasons = ReasonRepository.Get().Where(r => r.ID != 4).ToList(), ID = slippingRequest.ID, Reason = slippingRequest.ReasonID.HasValue ? slippingRequest.ReasonID.ToString() : "-1" }; switch (model.Reason) { case "1": model.Details1 = slippingRequest.Details ?? string.Empty; break; case "2": model.Details2 = slippingRequest.Details ?? string.Empty; break; case "3": model.Details3 = slippingRequest.Details ?? string.Empty; break; case "5": model.Details4 = slippingRequest.Details ?? string.Empty; break; } return(View(model)); } else { return(RedirectToAction("NotFound")); } }
public ActionResult Location(int id, LocationAndHours model) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { if (ModelState.IsValid) { slippingRequest.Location = model.Location; slippingRequest.TravelTimeInHours = 0;//Convert.ToInt32(model.Hours); CreateOrUpdate(slippingRequest); return(RedirectToAction("Reason")); } else { return(View(model)); } } else { return(RedirectToAction("NotFound")); } }
private bool IsSubmitted(SlippingRequest slippingRequest) { return(slippingRequest.StatusID != 0); }
private int SubmitSlippingRequest(SlippingRequest slippingRequest) { return(SlippingRepository.SubmitSlippingRequest(slippingRequest, SlippingUser.ID)); }
private int CreateOrUpdate(SlippingRequest slippingRequest) { return(SlippingRepository.CreateOrUpdate(slippingRequest, MPID, SlippingUser.ID)); }
public ActionResult Reason(int id, ReasonAndDetails model) { SlippingRequest slippingRequest = Get(id); //mapping correct reason details switch (model.Reason) { case "1": if (string.IsNullOrWhiteSpace(model.Details1)) { ModelState.AddModelError("Details1", "A description of the reason is required"); } break; case "2": if (string.IsNullOrWhiteSpace(model.Details2)) { ModelState.AddModelError("Details2", "A description of the reason is required"); } break; case "3": if (string.IsNullOrWhiteSpace(model.Details3)) { ModelState.AddModelError("Details3", "A description of the reason is required"); } break; case "5": if (string.IsNullOrWhiteSpace(model.Details4)) { ModelState.AddModelError("Details4", "A description of the reason is required"); } break; } if (slippingRequest != null && !IsSubmitted(slippingRequest)) { if (ModelState.IsValid) { slippingRequest.ReasonID = Convert.ToInt32(model.Reason); switch (model.Reason) { case "1": slippingRequest.Details = model.Details1; break; case "2": slippingRequest.Details = model.Details2; break; case "3": slippingRequest.Details = model.Details3; break; case "5": slippingRequest.Details = model.Details4; break; } CreateOrUpdate(slippingRequest); return(RedirectToAction("OppositionMPs")); } else { model.Reasons = ReasonRepository.Get().Where(r => r.ID != 4).ToList(); return(View(model)); } } else { return(RedirectToAction("NotFound")); } }
public ActionResult CheckYourAnswers(int id, SlippingRequest model) { SlippingRequest slippingRequest = Get(id); if (slippingRequest != null && !IsSubmitted(slippingRequest)) { if (slippingRequest.FromDate < DateTime.UtcNow.ToUkTimeFromUtc().AddMinutes(15)) { ModelState.AddModelError("FromDate", "From Time must be at least 15 minutes from now"); } if (slippingRequest.ToDate == null) { ModelState.AddModelError("ToDate", "To Date and Time must be supplied"); } else { if (((DateTime)slippingRequest.ToDate).Date < slippingRequest.FromDate.Date) { ModelState.AddModelError("ToDate", "To Date cannot be before From Date"); } if (((DateTime)slippingRequest.ToDate).Date == slippingRequest.FromDate.Date) { if (((DateTime)slippingRequest.ToDate).TimeOfDay <= slippingRequest.FromDate.TimeOfDay) { ModelState.AddModelError("ToDate", "To Time must be at least 15 minutes after From Time"); } } } if (string.IsNullOrEmpty(slippingRequest.Location)) { ModelState.AddModelError("Location", "Location must be supplied"); } //if (slippingRequest.TravelTimeInHours == null) // { // ModelState.AddModelError("TravelTimeInHours", "Travel time to Westminster must be supplied"); // } if (slippingRequest.ReasonID == null) { ModelState.AddModelError("Reason", "Reason must be supplied"); } if (string.IsNullOrEmpty(slippingRequest.Details)) { ModelState.AddModelError("Details", "Details must be supplied"); } if (slippingRequest.OppositionMPsAttending == null) { ModelState.AddModelError("OppositionMPsAttending", "Any opposition MPs in attendance? must be supplied"); } if (ModelState.IsValid) { SubmitSlippingRequest(slippingRequest); string displayDate = GetDateForEmail(slippingRequest.FromDate, (DateTime)slippingRequest.ToDate); if (!string.IsNullOrEmpty(NotifyTemplateId_SlippingRequestReceivedUser)) { if (!SlippingUser.IsMP) { SendNotification(NotifyTemplateId_SlippingRequestReceivedUser, SlippingUser.EmailAddress, new Dictionary <string, dynamic>() { { "name", string.Format("{0} {1}", SlippingUser.Forenames, SlippingUser.Surname) }, { "absence_date", displayDate }, { "reference", slippingRequest.ID } }); } MP mp = this.MPRepository.Get(slippingRequest.MPID, SlippingUser.ID); if (mp != null) { SendNotification(NotifyTemplateId_SlippingRequestReceivedUser, GetMPEmailAddress(slippingRequest.MPID, SlippingUser.ID), new Dictionary <string, dynamic>() { { "name", mp.Name }, { "absence_date", displayDate }, { "reference", slippingRequest.ID } }); } else { throw new Exception(string.Format("Unable to find MP for Slip {0}", slippingRequest.ID)); } } else { throw new Exception("NotifyTemplateId_SlippingRequestReceivedUser in web.config missing or invalid"); } if (!string.IsNullOrEmpty(NotifyTemplateId_SlippingRequestReceivedAdmin) && !string.IsNullOrEmpty(SlippingRequestReviewersEmailAddress)) { SendNotification(NotifyTemplateId_SlippingRequestReceivedAdmin, SlippingRequestReviewersEmailAddress, new Dictionary <string, dynamic>() { { "name", string.Format("{0} {1}", SlippingUser.Forenames, SlippingUser.Surname) }, { "absence_date", displayDate }, { "reference", slippingRequest.ID } }); } else { throw new Exception("NotifyTemplateId_SlippingRequestReceivedAdmin and/or SlippingRequestReviewersEmailAddress in web.config missing or invalid"); } return(RedirectToAction("Confirmation")); } else { return(View(slippingRequest)); } } else { return(RedirectToAction("NotFound")); } }