Пример #1
0
        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;
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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));
        }
Пример #7
0
        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));
        }
Пример #8
0
        // 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));
        }