// GET: /Task/ public ViewResult Index(string sortOrder, string currentFilter, string searchString, int?page) { ViewBag.ProjectSortParm = (sortOrder == "proj") ? "proj_desc" : "proj"; ViewBag.CodeSortParm = (sortOrder == "code") ? "code_desc" : "code"; ViewBag.NameSortParm = (sortOrder == "name") ? "name_desc" : "name"; ViewBag.EndDateSortParm = (sortOrder == "date") ? "date_desc" : "date"; ViewBag.EstimateSortParm = (sortOrder == "esti") ? "esti_desc" : "esti"; ViewBag.StatusSortParm = (sortOrder == "stat") ? "stat_desc" : "stat"; ViewBag.PrioritySortParm = (sortOrder == "prio") ? "prio_desc" : "prio"; ViewBag.LastPomodoroSortParm = (sortOrder == "last") ? "last_desc" : "last"; ViewBag.PomodorosSortParm = (sortOrder == "pomo") ? "pomo_desc" : "pomo"; ViewBag.ProgressSortParm = (sortOrder == "prog") ? "prog_desc" : "prog"; ViewBag.EffortSortParm = (sortOrder == "effo") ? "effo_desc" : "effo"; ViewBag.ActionsSortParm = (sortOrder == "acti") ? "acti_desc" : "acti"; if (searchString != null) { page = 1; } else { searchString = currentFilter; } //var tasks = db.Tasks.Include(t => t.Project); var tasks = db.GetMyTasks(User); //stores the current filter info for the pagination control RouteValueDictionary dict = new RouteValueDictionary(); //initilised with the current sort order dict["CurrentSort"] = sortOrder; //status filter const string STATUS_PREFIX = "status-"; string[] statusFilter = GetArrayParamsFromRequest(Request.QueryString, STATUS_PREFIX); if (statusFilter.Length > 0) { tasks = tasks.ToList().AsQueryable() .Where(t => statusFilter .Any(sf => sf.ToLower() == t.CalculatedStatus.ToString().ToLower()) ); dict.AddFilterArrayToRouteValueDictionary(statusFilter, STATUS_PREFIX); } //tag filter const string TAG_PREFIX = "tag-"; string[] tagFilter = GetArrayParamsFromRequest(Request.QueryString, TAG_PREFIX); if (tagFilter.Length > 0) { //OR Tag Filter tasks = tasks.ToList().AsQueryable() .Where(t => tagFilter .Any(tf => t.OwnAndInheritedTags //all tags in the filter .Select(tc => tc.Code) //(only tag code list) .Contains(tf)) //contained in the item tags ); //AND Tag Filter //tasks = tasks.ToList().AsQueryable() // .Where(t => tagFilter // .All(tf => t.OwnAndInheritedTags //all tags in the filter // .Select(tc => tc.Code) //(only tag code list) // .Contains(tf)) //contained in the item tags //); dict.AddFilterArrayToRouteValueDictionary(tagFilter, TAG_PREFIX); } //priority filter const string PRIORITY_PREFIX = "priority-"; string[] priorityFilter = GetArrayParamsFromRequest(Request.QueryString, PRIORITY_PREFIX); if (priorityFilter.Length > 0) { tasks = tasks.ToList().AsQueryable() .Where(t => priorityFilter .Any(pf => pf.ToLower() == t.Priority.ToString().ToLower()) ); dict.AddFilterArrayToRouteValueDictionary(priorityFilter, PRIORITY_PREFIX); } ViewBag.IsFiltered = string.IsNullOrEmpty(Request.QueryString["filtering"]) == false || (statusFilter.Length > 0) || (priorityFilter.Length > 0) || (tagFilter.Length > 0); ViewBag.RouteFiltersForPagination = dict; ViewBag.StatusFilter = statusFilter; ViewBag.PriorityFilter = priorityFilter; ViewBag.TagFilter = tagFilter; //ViewBag.CurrentFilter = searchString; ViewBag.AllTags = db.GetMyTags(User).ToArray(); orderBySortParam(ref tasks, sortOrder); int pageSize = 20; int pageNumber = (page ?? 1); return(View(tasks.ToPagedList(pageNumber, pageSize))); }
// GET: /Project/ public ViewResult Index(string sortOrder, string currentFilter, string searchString, int?page) { ViewBag.CodeSortParm = (sortOrder == "code") ? "code_desc" : "code"; ViewBag.NameSortParm = (sortOrder == "name") ? "name_desc" : "name"; ViewBag.LastPomodoroSortParm = (sortOrder == "last") ? "last_desc" : "last"; ViewBag.PomodorosSortParm = (sortOrder == "pomo") ? "pomo_desc" : "pomo"; ViewBag.ProgressSortParm = (sortOrder == "prog") ? "prog_desc" : "prog"; ViewBag.EffortSortParm = (sortOrder == "effo") ? "effo_desc" : "effo"; ViewBag.StatusSortParm = (sortOrder == "stat") ? "stat_desc" : "stat"; ViewBag.CreationDateSortParm = (sortOrder == "crea") ? "crea_desc" : "crea"; ViewBag.TasksSortParm = (sortOrder == "task") ? "task_desc" : "task"; ViewBag.ActionsSortParm = (sortOrder == "acti") ? "acti_desc" : "acti"; var projects = db.GetMyProjects(User); //stores the current filter info for the pagination control RouteValueDictionary dict = new RouteValueDictionary(); //initilised with the current sort order dict["CurrentSort"] = sortOrder; if (Request != null) //avoid null reference exceptions when testing { //status filter const string STATUS_PREFIX = "status-"; string[] statusFilter = GetArrayParamsFromRequest(Request.QueryString, STATUS_PREFIX); if (statusFilter.Length > 0) { projects = projects.ToList().AsQueryable() .Where(p => statusFilter .Any(sf => sf.ToLower() == p.CalculatedStatus.ToString().ToLower()) ); dict.AddFilterArrayToRouteValueDictionary(statusFilter, STATUS_PREFIX); } //tag filter const string TAG_PREFIX = "tag-"; string[] tagFilter = GetArrayParamsFromRequest(Request.QueryString, TAG_PREFIX); if (tagFilter.Length > 0) { projects = projects.ToList().AsQueryable() .Where(p => tagFilter .Any(tf => p.OwnAndInheritedTags //all tags in the filter .Select(tc => tc.Code) //(only tag code list) .Contains(tf)) //contained in the item tags ); //AND Tag Filter //projects = projects.ToList().AsQueryable() // .Where(p => tagFilter // .All(tf => p.OwnAndInheritedTags //all tags in the filter // .Select(tc => tc.Code) //(only tag code list) // .Contains(tf)) //contained in the item tags //); dict.AddFilterArrayToRouteValueDictionary(tagFilter, TAG_PREFIX); } ViewBag.IsFiltered = string.IsNullOrEmpty(Request.QueryString["filtering"]) == false || (statusFilter.Length > 0) || (tagFilter.Length > 0); ViewBag.RouteFiltersForPagination = dict; ViewBag.StatusFilter = statusFilter; ViewBag.TagFilter = tagFilter; } //if (searchString != null) //{ // page = 1; //} //else //{ // searchString = currentFilter; //} //ViewBag.CurrentFilter = searchString; ViewBag.AllTags = db.GetMyTags(User).ToArray(); switch (sortOrder) { case "code": projects = projects.OrderBy(p => p.Code); break; case "code_desc": projects = projects.OrderByDescending(p => p.Code); break; case "name": projects = projects.OrderBy(p => p.Name); break; case "name_desc": projects = projects.OrderByDescending(p => p.Name); break; case "last": projects = projects.ToList().AsQueryable().OrderBy(p => p.LastPomodoro.ToDateTicksOrZero()); break; case "last_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.LastPomodoro.ToDateTicksOrZero()); break; case "pomo": projects = projects.ToList().AsQueryable().OrderBy(p => p.CompletedPomodorosCount); break; case "pomo_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.CompletedPomodorosCount); break; case "prog": projects = projects.ToList().AsQueryable().OrderBy(p => p.Progress.ToDecimalOrZero()); break; case "prog_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.Progress.ToDecimalOrZero()); break; case "effo": projects = projects.ToList().AsQueryable().OrderBy(p => p.Effort.ToDecimalOrZero()).ThenBy(p => p.CompletedPomodorosCount); break; case "effo_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.Effort.ToDecimalOrZero()).ThenByDescending(p => p.CompletedPomodorosCount); break; case "stat": projects = projects.ToList().AsQueryable().OrderBy(p => p.CalculatedStatus); break; case "stat_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.CalculatedStatus); break; case "crea": projects = projects.ToList().AsQueryable().OrderBy(p => p.CreationDateLocal.ToTicksOrZero()); break; case "crea_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.CreationDateLocal.ToTicksOrZero()); break; case "task": projects = projects.ToList().AsQueryable().OrderBy(p => p.Tasks.Count()); break; case "task_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.Tasks.Count()); break; case "acti": projects = projects.ToList().AsQueryable().OrderBy(p => p.GetActions().Count()); break; case "acti_desc": projects = projects.ToList().AsQueryable().OrderByDescending(p => p.GetActions().Count()); break; default: projects = projects.ToList().AsQueryable().OrderBy(p => p.Status).ThenByDescending(p => p.LastPomodoro.ToDateTicksOrZero()); break; } int pageSize = 20; int pageNumber = (page ?? 1); return(View(projects.ToPagedList(pageNumber, pageSize))); }
// GET: /Action/ public ViewResult Index(string sortOrder, string currentFilter, string searchString, int?page) { ViewBag.ProjectSortParm = (sortOrder == "proj") ? "proj_desc" : "proj"; ViewBag.TaskSortParm = (sortOrder == "task") ? "task_desc" : "task"; ViewBag.ActionSortParm = (sortOrder == "acti") ? "acti_desc" : "acti"; ViewBag.DateSortParm = (sortOrder == "date") ? "date_desc" : "date"; ViewBag.EstimateSortParm = (sortOrder == "esti") ? "esti_desc" : "esti"; ViewBag.IsPersistentSortParm = (sortOrder == "pers") ? "pers_desc" : "pers"; ViewBag.StatusSortParm = (sortOrder == "stat") ? "stat_desc" : "stat"; ViewBag.PrioritySortParm = (sortOrder == "prio") ? "prio_desc" : "prio"; ViewBag.LastPomodoroSortParm = (sortOrder == "last") ? "last_desc" : "last"; ViewBag.PomodorosSortParm = (sortOrder == "pomo") ? "pomo_desc" : "pomo"; ViewBag.EffortSortParm = (sortOrder == "effo") ? "effo_desc" : "effo"; var actions = db.GetMyActions(User); //stores the current filter info for the pagination control RouteValueDictionary dict = new RouteValueDictionary(); //initilised with the current sort order dict["CurrentSort"] = sortOrder; //status filter const string STATUS_PREFIX = "status-"; string[] statusFilter = GetArrayParamsFromRequest(Request.QueryString, STATUS_PREFIX); if (statusFilter.Length > 0) { actions = actions.ToList().AsQueryable() .Where(a => statusFilter .Any(sf => sf.ToLower() == a.CalculatedStatus.ToString().ToLower()) ); dict.AddFilterArrayToRouteValueDictionary(statusFilter, STATUS_PREFIX); } //tag filter const string TAG_PREFIX = "tag-"; string[] tagFilter = GetArrayParamsFromRequest(Request.QueryString, TAG_PREFIX); if (tagFilter.Length > 0) { actions = actions.ToList().AsQueryable() .Where(a => tagFilter .All(tf => a.OwnAndInheritedTags //all tags in the filter .Select(tc => tc.Code) //(only tag code list) .Contains(tf)) //contained in the item tags ); //AND Tag Filter //actions = actions.ToList().AsQueryable() // .Where(a => tagFilter // .All(tf => a.OwnAndInheritedTags //all tags in the filter // .Select(tc => tc.Code) //(only tag code list) // .Contains(tf)) //contained in the item tags //); dict.AddFilterArrayToRouteValueDictionary(tagFilter, TAG_PREFIX); } //priority filter const string PRIORITY_PREFIX = "priority-"; string[] priorityFilter = GetArrayParamsFromRequest(Request.QueryString, PRIORITY_PREFIX); if (priorityFilter.Length > 0) { actions = actions.ToList().AsQueryable() .Where(a => priorityFilter .Any(pf => pf.ToLower() == a.Priority.ToString().ToLower()) ); dict.AddFilterArrayToRouteValueDictionary(priorityFilter, PRIORITY_PREFIX); } if (searchString != null) { page = 1; } else { searchString = currentFilter; } ViewBag.IsFiltered = string.IsNullOrEmpty(Request.QueryString["filtering"]) == false || (statusFilter.Length > 0) || (priorityFilter.Length > 0) || (tagFilter.Length > 0); ViewBag.RouteFiltersForPagination = dict; ViewBag.StatusFilter = statusFilter; ViewBag.PriorityFilter = priorityFilter; ViewBag.TagFilter = tagFilter; //ViewBag.CurrentFilter = searchString; ViewBag.AllTags = db.GetMyTags(User).ToArray(); switch (sortOrder) { case "proj": actions = actions.OrderBy(a => a.Task.Project.Code).ThenBy(a => a.Task.Code).ThenBy(a => a.Name); break; case "proj_desc": actions = actions.OrderByDescending(a => a.Task.Project.Code).ThenByDescending(a => a.Task.Code).ThenByDescending(a => a.Name); break; case "task": actions = actions.OrderBy(a => a.Task.Code).ThenBy(a => a.Name); break; case "task_desc": actions = actions.OrderByDescending(a => a.Task.Code).ThenByDescending(a => a.Name); break; case "acti": actions = actions.OrderBy(a => a.Name); break; case "acti_desc": actions = actions.OrderByDescending(a => a.Name); break; case "esti": actions = actions.OrderBy(a => a.Estimate); break; case "esti_desc": actions = actions.OrderByDescending(a => a.Estimate); break; case "pers": actions = actions.ToList().AsQueryable().OrderBy(a => a.IsPersistent); break; case "pers_desc": actions = actions.ToList().AsQueryable().OrderByDescending(a => a.IsPersistent); break; case "last": actions = actions.ToList().AsQueryable().OrderBy(t => t.LastPomodoro.ToDateTicksOrZero()); break; case "last_desc": actions = actions.ToList().AsQueryable().OrderByDescending(t => t.LastPomodoro.ToDateTicksOrZero()); break; case "pomo": actions = actions.ToList().AsQueryable().OrderBy(a => a.CompletedPomodorosCount); break; case "pomo_desc": actions = actions.ToList().AsQueryable().OrderByDescending(a => a.CompletedPomodorosCount); break; case "date": actions = actions.ToList().AsQueryable().OrderBy(a => a.DeadlineOrEndDate.ToTicksOrZero()); break; case "date_desc": actions = actions.ToList().AsQueryable().OrderByDescending(a => a.DeadlineOrEndDate.ToTicksOrZero()); break; case "stat": actions = actions.ToList().AsQueryable().OrderBy(a => a.CalculatedStatus); break; case "stat_desc": actions = actions.ToList().AsQueryable().OrderByDescending(a => a.CalculatedStatus); break; case "prio": actions = actions.OrderBy(a => a.Priority); break; case "prio_desc": actions = actions.OrderByDescending(a => a.Priority); break; case "effo": actions = actions.ToList().AsQueryable().OrderBy(t => t.Effort.ToDecimalOrZero()).ThenBy(t => t.CompletedPomodorosCount); break; case "effo_desc": actions = actions.ToList().AsQueryable().OrderByDescending(t => t.Effort.ToDecimalOrZero()).ThenByDescending(t => t.CompletedPomodorosCount); break; default: actions = actions.ToList().AsQueryable().OrderBy(a => a.Status).ThenByDescending(a => a.LastPomodoro.ToDateTicksOrZero()); break; } int pageSize = 20; int pageNumber = (page ?? 1); return(View(actions.ToPagedList(pageNumber, pageSize))); }
public ViewResult Index() { var tags = db.GetMyTags(User).ToList(); return(View(tags)); }