public void Sort(AbsenceGridBuilder gridBuilder) { //SortBy switch (gridBuilder.CurrentGrid.SortBy) { case nameof(AbsenceRequest.StartDate): OrderBy = ar => ar.StartDate; break; case nameof(AbsenceRequest.User.LastName): OrderBy = ar => ar.User.LastName; break; case nameof(AbsenceRequest.AbsenceType): OrderBy = ar => ar.AbsenceType.Name; break; case nameof(AbsenceRequest.DurationType): OrderBy = ar => ar.DurationType.Name; break; case nameof(AbsenceRequest.AbsenceStatus): OrderBy = ar => ar.AbsenceStatus.Name; break; default: OrderBy = ar => ar.StartDate; break; } }
public IActionResult Deny(AbsenceRequest model) { //To retain grid state, send the current grid values to the List View. var gridBuilder = new AbsenceGridBuilder(HttpContext.Session); //First get the current Absence Request AbsenceRequest absenceRequest = data.AbsenceRequests.Get( new QueryOptions <AbsenceRequest> { Where = ar => ar.AbsenceRequestId == model.AbsenceRequestId, Include = "AbsenceStatus, User, AbsenceRequestPeriods, AbsenceRequestPeriods.Period" }); if (model.StatusRemarks == null) { TempData["FailureMessage"] = "Unable to Deny the Absence Request for " + absenceRequest.User.FullName + ". If absence is denied, need to provide a reason in status remarks."; return(RedirectToAction("List", gridBuilder.CurrentGrid)); } else { //Update absence with new status of "Denied" absenceRequest.AbsenceStatus = data.AbsenceStatusTypes.List().Where(st => st.Name == "Denied").FirstOrDefault(); absenceRequest.DateProcessed = DateTime.Now; absenceRequest.StatusRemarks = model.StatusRemarks; data.AbsenceRequests.Update(absenceRequest); //Save all changes data.Save(); TempData["SucessMessage"] = "The Absence Request with ID#, " + absenceRequest.AbsenceRequestId + ", was denied sucessfully."; return(RedirectToAction("List", gridBuilder.CurrentGrid)); } }
public void Filter(AbsenceGridBuilder gridBuilder) { if (gridBuilder.CurrentGrid.AbsenceType != "all") { Where = ar => ar.AbsenceTypeId == gridBuilder.CurrentGrid.AbsenceType; } if (gridBuilder.CurrentGrid.Duration != "all") { Where = ar => ar.DurationTypeId == gridBuilder.CurrentGrid.Duration; } if (gridBuilder.CurrentGrid.NeedCoverage != "all") { bool boolValue; if (Boolean.TryParse(gridBuilder.CurrentGrid.NeedCoverage, out boolValue)) { Where = ar => ar.NeedCoverage == boolValue; } } if (gridBuilder.CurrentGrid.AbsenceStatus != "all") { Where = ar => ar.AbsenceStatusId == gridBuilder.CurrentGrid.AbsenceStatus; } }
public RedirectToActionResult Approve(AbsenceRequest model) { //First get the current Absence Request AbsenceRequest absenceRequest = data.AbsenceRequests.Get( new QueryOptions <AbsenceRequest> { Where = ar => ar.AbsenceRequestId == model.AbsenceRequestId, Include = "AbsenceStatus, User, AbsenceRequestPeriods, AbsenceRequestPeriods.Period" }); //Update absence with new changes. absenceRequest.AbsenceStatus = data.AbsenceStatusTypes.List().Where(st => st.Name == "Approved").FirstOrDefault(); absenceRequest.DateProcessed = DateTime.Now; absenceRequest.StatusRemarks = model.StatusRemarks; data.AbsenceRequests.Update(absenceRequest); //Save all changes data.Save(); TempData["SucessMessage"] = "The Absence Request with ID#, " + absenceRequest.AbsenceRequestId + ", was approved sucessfully."; //To retain grid state, send the current grid values to the List View. var gridBuilder = new AbsenceGridBuilder(HttpContext.Session); return(RedirectToAction("List", gridBuilder.CurrentGrid)); }
public void Search(AbsenceGridBuilder gridBuilder) { if (gridBuilder.CurrentGrid.Search != null) { string searchTerm = gridBuilder.CurrentGrid.Search.ToLower(); Where = ar => ar.User.FirstName.ToLower().Contains(searchTerm) || ar.User.LastName.ToLower().Contains(searchTerm); } }
public void FromDateRange(AbsenceGridBuilder gridBuilder) { if (gridBuilder.CurrentGrid.FromDate != null && gridBuilder.CurrentGrid.ToDate != null) { DateTime fromDate = gridBuilder.ConvertToDateTime(gridBuilder.CurrentGrid.FromDate); DateTime toDate = gridBuilder.ConvertToDateTime(gridBuilder.CurrentGrid.ToDate); Where = ar => ar.StartDate >= fromDate && ar.StartDate <= toDate; } }
public ViewResult Details(string id) { //Desirialize grid values to save values in View Model for model binding. var gridBuilder = new AbsenceGridBuilder(HttpContext.Session); var model = new AbsenceDetailsViewModel { Grid = gridBuilder.CurrentGrid, AbsenceRequest = data.AbsenceRequests.Get(new QueryOptions <AbsenceRequest> { Where = ar => ar.AbsenceRequestId == id, Include = "AbsenceType, DurationType, AbsenceStatus, User, AbsenceRequestPeriods" }) }; return(View(model)); }
public async Task <ViewResult> List(FilterGridDTO values) { //First, find the current user signed in to only show their records. User user = await userManager.GetUserAsync(User); //Create an instance of the AbsenceGridBuilder to save the route parameters for Sorting/Filtering the grid into a session. var gridBuilder = new AbsenceGridBuilder(HttpContext.Session, values, nameof(AbsenceRequest.StartDate)); //Set all of the Query options based on route parameters. Will apply these options to the ViewModel list of absence requests at the time of initialization. var options = new AbsenceQueryOptions { Include = "AbsenceType, DurationType, AbsenceStatus, User, AbsenceRequestPeriods", Where = ar => ar.UserId == user.Id, OrderByDirection = gridBuilder.CurrentGrid.SortDirection, }; options.FromDateRange(gridBuilder); options.Filter(gridBuilder); options.Sort(gridBuilder); //Create and initialize the View Model var model = new AbsenceListViewModel { //Set current route Grid = gridBuilder.CurrentGrid, //Absence Requests List with query options applied. AbsenceRequests = data.AbsenceRequests.List(options), //DropDown Lists AbsenceTypes = data.AbsenceTypes.List(), DurationTypes = data.DurationTypes.List(), StatusTypes = data.AbsenceStatusTypes.List(), }; model.TotalPages = gridBuilder.GetTotalPages(model.AbsenceRequests.Count()); //Finally Set the paging. model.AbsenceRequests = model.AbsenceRequests.Skip((gridBuilder.CurrentGrid.PageNumber - 1) * gridBuilder.CurrentGrid.PageSize).Take(gridBuilder.CurrentGrid.PageSize); return(View(model)); }
public RedirectToActionResult SearchOptions(string[] filters, string fromdate, string todate, string searchTerm, bool clear = false) { //Initialize with the GET constructor (Desirializes Grid dictionary) var gridBuilder = new AbsenceGridBuilder(HttpContext.Session); if (clear) { gridBuilder.ClearSearchOptions(); } else { //Set new filter value to current grid and serialize. gridBuilder.SetSearchOptions(filters, fromdate, todate, searchTerm); gridBuilder.SerializeRoutes(); } //Redirect to the List Action Method with updated grid dictionary return(RedirectToAction("List", gridBuilder.CurrentGrid)); }
public RedirectToActionResult Cancel(AbsenceRequest model) { //First get the current Absence Request AbsenceRequest absenceRequest = data.AbsenceRequests.Get( new QueryOptions <AbsenceRequest> { Where = ar => ar.AbsenceRequestId == model.AbsenceRequestId, Include = "AbsenceStatus, User, AbsenceRequestPeriods, AbsenceRequestPeriods.Period, SubJob" }); if (absenceRequest.NeedCoverage == false) { data.AbsenceRequests.Delete(absenceRequest); } else { if (absenceRequest.SubJob == null) { data.AbsenceRequests.Delete(absenceRequest); } else { data.SubJobs.Delete(absenceRequest.SubJob); data.AbsenceRequests.Delete(absenceRequest); } } //Save all changes data.Save(); TempData["SucessMessage"] = "The Absence Request with ID#, " + absenceRequest.AbsenceRequestId + ", was canceled sucessfully."; //To retain grid state, send the current grid values to the List View. var gridBuilder = new AbsenceGridBuilder(HttpContext.Session); return(RedirectToAction("List", gridBuilder.CurrentGrid)); }
public IActionResult Details(string id) { var gridBuilder = new AbsenceGridBuilder(HttpContext.Session); CoverageDetailsViewModel model = new CoverageDetailsViewModel { Grid = gridBuilder.CurrentGrid, AbsenceRequest = data.AbsenceRequests.Get(new QueryOptions <AbsenceRequest> { Include = "DurationType, AbsenceRequestPeriods, User, SubJob, SubJob.User, SubJob.SubJobStatus", Where = ar => ar.AbsenceRequestId == id, }), Dates = new List <string>() }; for (DateTime date = model.AbsenceRequest.StartDate.Value; date <= model.AbsenceRequest.EndDate.Value; date = date.AddDays(1)) { model.Dates.Add(date.ToShortDateString()); } return(View(model)); }