public void SortFilter(ReportsGridBuilder builder) { if (builder.IsFilterByReportType) { Where = r => r.ReportTypeID == builder.CurrentRoute.ReportTypeFilter.ToInt(); } if (builder.IsSearchString) { Where = r => r.SearchIndex.Contains(builder.CurrentRoute.SearchString.ToLower()); } if (builder.IsSortByReportType) { OrderBy = r => r.ReportType.Name; } else if (builder.IsSortByName) { OrderBy = r => r.Name; } else if (builder.IsSortByAuthor) { OrderBy = r => r.Author; } else { OrderBy = r => r.Date; } }
public ViewResult List(ReportsGridDTO values) { var builder = new ReportsGridBuilder(HttpContext.Session, values, defaultSortField: nameof(Report.Date)); builder.SetSearchRoute(values.SearchString); builder.SaveRouteSegments(); var options = new ReportQueryOptions { Includes = "ReportType", OrderByDirection = builder.CurrentRoute.SortDirection, PageNumber = builder.CurrentRoute.PageNumber, PageSize = builder.CurrentRoute.PageSize }; options.SortFilter(builder); var model = new ReportListViewModel { Reports = _data.List(options), ReportTypes = _reportType.List(new QueryOptions <ReportType> { OrderBy = rt => rt.Name }), CurrentRoute = builder.CurrentRoute, TotalPages = builder.GetTotalPages(_data.Count) }; return(View(model)); }
public RedirectToActionResult Index(ReportsGridDTO values) { // This code block makes sure the current route is always set var builder = new ReportsGridBuilder(HttpContext.Session, values, defaultSortField: nameof(Report.Date)); builder.SetSearchRoute(values.SearchString); return(RedirectToAction("List", "Home", builder.CurrentRoute)); }
public IActionResult Edit(int id) { // Maintain the filtering/sorting/search for when the user clicks Save button or Back link var builder = new ReportsGridBuilder(HttpContext.Session); EditViewModel model = new EditViewModel(); var report = _reports.List(new QueryOptions <Report> { Includes = "ReportType", WhereClauses = new WhereClauses <Report> { reports => reports.ID == id }, OrderBy = r => r.Date }) .Select(r => new ReportsDTO { ID = r.ID, Name = r.Name, Author = r.Author, Date = r.Date, ReportType = r.ReportType.Name, ReportTypeID = r.ReportTypeID }); model.ReportTypes = _reportTypes.List(new QueryOptions <ReportType> { }); model.CurrentRoute = builder.CurrentRoute; if (report == null) { TempData["fail_message"] = "The given report was not found"; return(RedirectToAction("Index", "Home")); } else { model.ID = report.First().ID; model.Name = report.First().Name; model.Author = report.First().Author; model.Date = report.First().Date; model.ReportTypeID = report.First().ReportTypeID; } return(View(model)); }
public IActionResult DeleteConfirmed(int id) { // Maintain sort/filter/search routing var builder = new ReportsGridBuilder(HttpContext.Session); var report = _reports.Get(id); _reports.Delete(report); try { _reports.Save(); TempData["message"] = "The report was deleted successfully"; } catch (Exception) { TempData["fail_message"] = "The report was not deleted successfully"; } return(RedirectToAction("List", "Home", builder.CurrentRoute)); }
public IActionResult Edit(int id, [Bind("ID,ReportTypeID,Name,Author,Date")] EditViewModel model) { // Maintain sort/filter/search routing var builder = new ReportsGridBuilder(HttpContext.Session); // Using the ReportsDTO so the full file contents aren't passed around each request if (id != model.ID) { return(NotFound()); } if (ModelState.IsValid) { try { Report report = _reports.Get(id); report.ID = model.ID; report.Name = model.Name; report.Author = model.Author; report.Date = model.Date; report.ReportTypeID = model.ReportTypeID; // No need for the admin to be able to update the file contents or SearchIndex directly, so they are not included here _reports.Save(); TempData["message"] = "The report was updated successfully"; } catch (DbUpdateConcurrencyException) { if (!ReportExists(model.ID)) { return(NotFound()); } else { TempData["fail_message"] = "The report was not updated successfully"; return(RedirectToAction(nameof(Index))); } } return(RedirectToAction("List", "Home", builder.CurrentRoute)); } return(View(model)); }
public RedirectToActionResult Filter(string[] filter, ReportsGridDTO values, bool clear = false) { // Added the ReportsGridDTO object above to pull the current search string var builder = new ReportsGridBuilder(HttpContext.Session); if (clear) { builder.ClearFilterSegments(); builder.SetSearchRoute(null); } else { var reportTypes = _reportType.Get(filter[0].ToInt()); builder.LoadFilterSegments(filter, reportTypes); builder.SetSearchRoute(values.SearchString); } builder.SaveRouteSegments(); return(RedirectToAction("List", builder.CurrentRoute)); }
// GET: Admin/Home/Delete/5 public IActionResult Delete(int id, DeleteViewModel model) { // Maintain the filtering/sorting/search for when the user clicks Save button or Back link var builder = new ReportsGridBuilder(HttpContext.Session); model.CurrentRoute = builder.CurrentRoute; var report = _reports.List(new QueryOptions <Report> { Includes = "ReportType", WhereClauses = new WhereClauses <Report> { reports => reports.ID == id }, OrderBy = r => r.Date }) .Select(r => new ReportsDTO { ID = r.ID, Name = r.Name, Author = r.Author, Date = r.Date, ReportType = r.ReportType.Name }); if (report == null) { return(NotFound()); } else { model.ID = report.First().ID; model.Name = report.First().Name; model.Author = report.First().Author; model.Date = report.First().Date; model.ReportType = report.First().ReportType; } return(View(model)); }