Skip to content

Instantly share code, notes, and snippets.

@ChrisMoney
Created November 30, 2017 22:18
Show Gist options
  • Save ChrisMoney/7194b83c276f35a2f1a70612cc41624f to your computer and use it in GitHub Desktop.
Save ChrisMoney/7194b83c276f35a2f1a70612cc41624f to your computer and use it in GitHub Desktop.
This is C# files contains the actions methods that knockout gets its data from.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Threading.Tasks;
using TMS.Automation.BLL.JobProfilesManager;
using TMS.BLL.JobGroupManager;
using TMS.Common;
using TMS.Common.Enums;
using TMS.Common.Extensions;
using TMS.TaskQueue.BLL.FilterManager;
using TMS.WebApp.Attributes;
using TMS.WebApp.DTO;
using TMS.Security.Manager;
using TMS.TaskQueue.DTO;
using TMS.WebApp.Models.Filters;
using TMS.TaskQueue.BLL.SystemManager;
namespace TMS.WebApp.Controllers
{
[RequireModule(Modules = new [] {Module.TaskQueue, Module.Automation})]
public class FilterController : TMSBaseController
{
public async Task SetFilterSessionVariables()
{
using (var filterManager = new FilterMgr(_securityLogger))
{
var lstSelTaskGroups = AppSession.Current.Filter_SelectedTaskGroupIds == null
? new List<int>() : AppSession.Current.Filter_SelectedTaskGroupIds;
var lstSelTaskSources = AppSession.Current.Filter_SelectedTaskSourceIds == null
? new List<int>() : AppSession.Current.Filter_SelectedTaskSourceIds;
var lstSelUsers = AppSession.Current.Filter_SelectedUserIds == null
? new List<int>() : AppSession.Current.Filter_SelectedUserIds;
var lstSelStatus = AppSession.Current.Filter_SelectedStatusIds == null
? new List<int>() : AppSession.Current.Filter_SelectedStatusIds;
var lstSelectedSubStatus = AppSession.Current.Filter_SelectedSubStatuses ?? new List<string>();
var lstSelPriority = AppSession.Current.Filter_SelectedPriorityIds == null
? new List<int>() : AppSession.Current.Filter_SelectedPriorityIds;
var lstSelSupervisors = AppSession.Current.Filter_SelectedSupervisorIds == null
? new List<long>() : AppSession.Current.Filter_SelectedSupervisorIds;
// Get Filters for user
var filter = await filterManager.GetFilters(AppSession.Current.User.UserId,
lstSelTaskGroups,
lstSelTaskSources,
lstSelUsers,
lstSelStatus,
lstSelectedSubStatus,
lstSelPriority,
Convert.ToDateTime(AppSession.Current.Filter_DateRangeStart),
Convert.ToDateTime(AppSession.Current.Filter_DateRangeEnd),
AppSession.Current.Filter_IsDateFilterActive,
lstSelSupervisors,
_securityLogger);
AppSession.Current.Filter_TaskGroupIds = filter.TaskGroups.Select(t => t.Id).ToList();
AppSession.Current.Filter_TaskSourceIds = new List<int>();
AppSession.Current.Filter_SelectedUserIds = lstSelUsers;
AppSession.Current.Filter_SupervisorIds = filter.Supervisors.Select (t => t.Id).ToList ();
AppSession.Current.Filter_StatusIds = filter.Status.Where(s => !s.IsClosedState).Select(s => s.Id).ToList();
AppSession.Current.Filter_SelectedSubStatuses = filter.SubStatus;
AppSession.Current.Filter_PriorityIds = filter.Priorities.Select(p => p.Id).ToList();
SetFilterDateTimes (AppSession.Current.Filter_IsDateFilterActive);
if (AppSession.Current.Filter_SelectedStatusIds == null)
{
AppSession.Current.Filter_SelectedStatusIds = AppSession.Current.Filter_StatusIds;
}
filter.TaskGroups.ForEach(t =>
{
// Loop through each Task Source
t.TaskSources.ToList().ForEach(s =>
{
if (s.IsChecked && !AppSession.Current.Filter_TaskSourceIds.Contains (s.Id))
{
AppSession.Current.Filter_TaskSourceIds.Add (s.Id);
}
});
});
}
}
[HttpPost]
public async Task<ActionResult> GetUserList(string term, string page)
{
using (var userMgr = new UserMgr (_securityLogger))
{
var list = await userMgr.GetList (w => ((string.IsNullOrEmpty (w.NT_User) ? false : w.NT_User.ToLower ().Contains (term.ToLower ())) ||
(string.IsNullOrEmpty (w.DisplayName) ? false : w.DisplayName.ToLower ().Contains (term.ToLower ())) ||
(string.IsNullOrEmpty (w.EmailAddress) ? false : w.EmailAddress.ToLower ().Contains (term.ToLower ())) ||
(string.IsNullOrEmpty (w.PhoneNumber) ? false : w.PhoneNumber.ToLower ().Contains (term.ToLower ()))),
"DisplayName", true, ((int.Parse(page) - 1) * 30), 30);
var count =await userMgr.GetUsersCount (w => ((string.IsNullOrEmpty (w.DisplayName) ? false : w.DisplayName.ToLower ().Contains (term.ToLower ())) ||
(string.IsNullOrEmpty (w.EmailAddress) ? false : w.EmailAddress.ToLower ().Contains (term.ToLower ())) ||
(string.IsNullOrEmpty (w.PhoneNumber) ? false : w.PhoneNumber.ToLower ().Contains (term.ToLower ()))));
return Json (new { items = list.Select (s => new { id = s.UserId, text = s.DisplayName }), count = count });
}
}
[HttpPost]
public ActionResult GetSupervisorList (string term, string page)
{
using (var filterMgr = new FilterMgr (_securityLogger))
{
var count = 0;
var list = filterMgr.GetFilterSupervisors (term, AppSession.Current.User.UserId);
return Json (new { items = list.Select (s => new { id = s.Id, text = s.DisplayName }), count = count });
}
}
[HttpPost]
public ActionResult GetTaskSubStatuses(string term, string page)
{
using (ISubStatusMgr subStatusMgr = new SubStatusMgr())
{
var subStatuses = subStatusMgr.SearchByTerm(term).Select(ss => ss.Description).Distinct(StringComparer.InvariantCultureIgnoreCase);
return Json(new { items = subStatuses.Select (ss => new {id = ss, text = ss }) });
}
}
private void SetFilterDateTimes(bool isDateFilterActive)
{
if (isDateFilterActive == false)
{
AppSession.Current.Filter_DateRangeEnd = DateTime.Now.ConvertDefaultToUTCForDisplay ().ToString (Globals.DATE_TIME_TZ_FORMAT);
AppSession.Current.Filter_DateRangeStart = DateTime.Now.ToString (Globals.DATE_FORMAT);
}
}
// POST: /Filter/Get
public async Task<JsonResult> Get()
{
var filter = await GetFilterDTO();
var savedFilters = await GetCustomFilters();
return Json(new GetFilterVM { filter = filter, SavedFilters = savedFilters });
}
private async Task<List<SavedFilterDTO>> GetCustomFilters()
{
using (var filterMgr = new FilterMgr(_securityLogger))
{
var filters = await filterMgr.GetSavedUserFilters(AppSession.Current.User.UserId);
return filters;
}
}
private async Task<FilterDTO> GetFilterDTO()
{
// Check if Selected Filters are empty
var lstSelTaskGroups = AppSession.Current.Filter_SelectedTaskGroupIds == null
? new List<int>()
: AppSession.Current.Filter_SelectedTaskGroupIds;
var lstSelTaskSources = AppSession.Current.Filter_SelectedTaskSourceIds == null
? new List<int>()
: AppSession.Current.Filter_SelectedTaskSourceIds;
var lstSelUsers = AppSession.Current.Filter_SelectedUserIds == null
? new List<int>()
: AppSession.Current.Filter_SelectedUserIds;
var lstSelStatus = AppSession.Current.Filter_SelectedStatusIds == null
? AppSession.Current.Filter_StatusIds
: AppSession.Current.Filter_SelectedStatusIds;
var lstSelectedSubStatus = AppSession.Current.Filter_SelectedSubStatuses ?? new List<string>();
var lstSelPriority = AppSession.Current.Filter_SelectedPriorityIds == null
? new List<int>()
: AppSession.Current.Filter_SelectedPriorityIds;
var lstSelSups = AppSession.Current.Filter_SelectedSupervisorIds == null
? new List<long>()
: AppSession.Current.Filter_SelectedSupervisorIds;
var selDateField = AppSession.Current.Filter_DateField == null ? "" : AppSession.Current.Filter_DateField;
SetFilterDateTimes(AppSession.Current.Filter_IsDateFilterActive);
// Get Filters for user
using (var filterManager = new FilterMgr(_securityLogger))
{
var filter = await filterManager.GetFilters(AppSession.Current.User.UserId,
lstSelTaskGroups,
lstSelTaskSources,
lstSelUsers,
lstSelStatus,
lstSelectedSubStatus,
lstSelPriority,
Convert.ToDateTime(AppSession.Current.Filter_DateRangeStart).ConvertDefaultToUTCForDisplay(),
Convert.ToDateTime(AppSession.Current.Filter_DateRangeEnd).ConvertDefaultToUTCForDisplay(),
AppSession.Current.Filter_IsDateFilterActive,
lstSelSups,
_securityLogger);
filter.SelectedDateField = selDateField;
// Default Status filters need to indicate no status selected
if (filter.Status.Where(t => t.IsChecked).Count() == 5)
{
if (filter.Status.Where(t => (t.Status == "New" && t.IsChecked) &&
(t.Status == "In Progress" && t.IsChecked) &&
(t.Status == "Hold" && t.IsChecked) &&
(t.Status == "MoveTo" && t.IsChecked) &&
(t.Status == "Escalate" && t.IsChecked)) != null)
{
filter.IsStatusFiltered = false;
}
}
// Return
return filter;
}
}
[HttpPost]
public async Task<JsonResult> LoadSavedFilter(int id)
{
using (var filterMgr = new FilterMgr(_securityLogger))
{
var filter = await filterMgr.GetUserFilter(AppSession.Current.User.UserId, id);
SetFilterSessionVariables(filter);
return Json(new { message = "success" });
}
}
[HttpPost]
public async Task<JsonResult> RemoveSavedFilter(int id)
{
using (var filterMgr = new FilterMgr(_securityLogger))
{
await filterMgr.RemoveUserFilter(AppSession.Current.User.UserId, id);
}
return Json(new { message = "success" });
}
[HttpPost]
public async Task<JsonResult> SaveFilter(string name)
{
var filter = new UserFilterSelectionDTO
{
SelectedTaskSources = AppSession.Current.Filter_SelectedTaskSourceIds,
SelectedUsers = AppSession.Current.Filter_SelectedUserIds,
SelectedSupervisors = AppSession.Current.Filter_SelectedSupervisorIds,
SelectedTaskStatuses = AppSession.Current.Filter_SelectedStatusIds,
SelectedTaskSubStatuses = AppSession.Current.Filter_SelectedSubStatuses,
SelectedTaskPriorities = AppSession.Current.Filter_SelectedPriorityIds,
IsDateActive = AppSession.Current.Filter_IsDateFilterActive,
DateField = AppSession.Current.Filter_DateField,
RangeStartdate = Convert.ToDateTime(AppSession.Current.Filter_DateRangeStart),
RangeEndDate = Convert.ToDateTime(AppSession.Current.Filter_DateRangeEnd)
};
using (var filterMgr = new FilterMgr(_securityLogger))
{
await filterMgr.SaveUserFilter(AppSession.Current.User.UserId, name, filter);
}
return Json(new { message = "success" });
}
// POST: /Filter/Set
[HttpPost]
public JsonResult Set(FilterVM filter)
{
// If all are empty, it is same as clear
if (filter.taskSourceIds == null && filter.userIds == null && filter.statusIds == null && filter.subStatuses == null && filter.priorityIds == null &&
filter.supervisorIds == null && filter.includeDate == false)
{
return ClearFilter();
}
var selection = new UserFilterSelectionDTO
{
SelectedTaskSources = filter.taskSourceIds,
SelectedUsers = filter.userIds,
SelectedSupervisors = filter.supervisorIds,
SelectedTaskStatuses = filter.statusIds,
SelectedTaskSubStatuses = filter.subStatuses,
SelectedTaskPriorities = filter.priorityIds,
IsDateActive = filter.includeDate,
DateField = filter.dateField,
RangeStartdate = filter.rangeStartDate,
RangeEndDate = filter.rangeEndDate
};
// Assign to session variables
SetFilterSessionVariables(selection);
// Return
return Json(new {message = "success"});
}
private void SetFilterSessionVariables(UserFilterSelectionDTO filter)
{
AppSession.Current.Filter_SelectedTaskSourceIds = filter.SelectedTaskSources?.Any() ?? false
? filter.SelectedTaskSources
: null;
AppSession.Current.Filter_SelectedUserIds = filter.SelectedUsers?.Any() ?? false
? filter.SelectedUsers
: null;
AppSession.Current.Filter_SelectedStatusIds = filter.SelectedTaskStatuses?.Any() ?? false
? filter.SelectedTaskStatuses
: AppSession.Current.Filter_StatusIds;
AppSession.Current.Filter_SelectedSubStatuses = filter.SelectedTaskSubStatuses?.Any() ?? false
? filter.SelectedTaskSubStatuses
: new List<string>();
AppSession.Current.Filter_SelectedPriorityIds = filter.SelectedTaskPriorities?.Any() ?? false
? filter.SelectedTaskPriorities
: null;
AppSession.Current.Filter_SelectedSupervisorIds = filter.SelectedSupervisors?.Any() ?? false
? filter.SelectedSupervisors
: null;
AppSession.Current.Filter_IsDateFilterActive = filter.IsDateActive;
if (filter.IsDateActive)
{
AppSession.Current.Filter_DateRangeEnd = filter.RangeEndDate.ToString (Globals.DATETIME_FORMAT);
AppSession.Current.Filter_DateRangeStart = filter.RangeStartdate.ToString(Globals.DATETIME_FORMAT);
AppSession.Current.Filter_DateField = filter.DateField;
}
else
{
SetFilterDateTimes (filter.IsDateActive);
AppSession.Current.Filter_DateField = "";
}
}
// POST: /Filter/ClearFilter
[HttpPost]
public JsonResult ClearFilter()
{
// Clear Session Variables
ClearFilterSessionVariables();
using (var fmgr = new FilterMgr (_securityLogger))
{
// Return
return Json (new
{
rangeStartDateTime = AppSession.Current.Filter_DateRangeStart,
rangeEndDateTime = AppSession.Current.Filter_DateRangeEnd,
dateFields = fmgr.GetDateFields ().ToList ()
});
}
}
private void ClearFilterSessionVariables()
{
using (var filterMgr = new FilterMgr(_securityLogger))
{
AppSession.Current.Filter_SelectedTaskSourceIds = new List<int>();
AppSession.Current.Filter_SelectedUserIds = null;
AppSession.Current.Filter_UserIds = null;
AppSession.Current.Filter_SelectedStatusIds = filterMgr.GetFilterStatuses(null).Where(x=>!x.IsClosedState).Select(x=>x.Id).ToList();
AppSession.Current.Filter_SelectedSubStatuses = null;
AppSession.Current.Filter_SelectedPriorityIds = null;
AppSession.Current.Filter_SelectedSupervisorIds = null;
AppSession.Current.Filter_IsDateFilterActive = false;
AppSession.Current.Filter_DateField = "";
SetFilterDateTimes (AppSession.Current.Filter_IsDateFilterActive);
}
}
#region Automation Filters
// GET: /Filter/GetAutomationFilters
[HttpGet]
public JsonResult GetAutomationFilters()
{
using (var groupManager = new JobGroupMgr())
{
using (var profileManager = new JobProfileMgr())
{
var filters = new Automation.DTO.FilterDTO();
filters.JobGroups = groupManager.GetByUserID(AppSession.Current.User.UserId);
filters.JobStatuses = profileManager.GetJobStatuses();
filters.LastResultStatuses = profileManager.GetJobResultTypes();
filters.Transactions = profileManager.GetTransactionTypes();
filters.JobGroupIds = AppSession.Current.Filter_JobGroupIds.ListOrNew();
filters.JobStatusIds = AppSession.Current.Filter_JobStatusIds.ListOrNew();
filters.LastResultStatusIds = AppSession.Current.Filter_JobLastResultStatusIds.ListOrNew();
filters.TransactionIds = AppSession.Current.Filter_TransactionIds.ListOrNew();
filters.JobProfileId = AppSession.Current.Filter_JobProfileId;
filters.AutomationBatchEndDate = AppSession.Current.Filter_AutomationBatchEndDate;
filters.AutomationBatchStartDate = AppSession.Current.Filter_AutomationBatchStartDate;
return Json(new {result = filters},
JsonRequestBehavior.AllowGet);
}
}
}
// GET: /Filter/GetUserAutomationFilters
[HttpGet]
public JsonResult GetUserAutomationFilters()
{
var filters = new AutomationFiltersDTO();
filters.JobProfileId = AppSession.Current.Filter_JobProfileId;
filters.AutomationBatchEndDate = AppSession.Current.Filter_AutomationBatchEndDate;
filters.AutomationBatchStartDate = AppSession.Current.Filter_AutomationBatchStartDate;
filters.JobGroupIds = AppSession.Current.Filter_JobGroupIds.ListOrNew();
filters.JobStatusIds = AppSession.Current.Filter_JobStatusIds.ListOrNew();
filters.LastResultStatusIds = AppSession.Current.Filter_JobLastResultStatusIds.ListOrNew();
filters.TransactionIds = AppSession.Current.Filter_TransactionIds.ListOrNew();
return Json(new {result = filters},
JsonRequestBehavior.AllowGet);
}
// POST: /Filter/SetUserAutomationFilters
[HttpPost]
public JsonResult SetUserAutomationFilters(AutomationFiltersDTO data)
{
AppSession.Current.Filter_JobProfileId = data.JobProfileId;
AppSession.Current.Filter_AutomationBatchEndDate = data.AutomationBatchEndDate;
AppSession.Current.Filter_AutomationBatchStartDate = data.AutomationBatchStartDate;
AppSession.Current.Filter_JobGroupIds = data.JobGroupIds;
AppSession.Current.Filter_JobStatusIds = data.JobStatusIds;
AppSession.Current.Filter_JobLastResultStatusIds = data.LastResultStatusIds;
AppSession.Current.Filter_TransactionIds = data.TransactionIds;
return Json(data);
}
// POST: /Filter/ClearUserAutomationFilters
[HttpPost]
public JsonResult ClearUserAutomationFilters()
{
AppSession.Current.Filter_JobProfileId = null;
AppSession.Current.Filter_AutomationBatchEndDate = null;
AppSession.Current.Filter_AutomationBatchStartDate = null;
AppSession.Current.Filter_JobGroupIds = new List<int>();
AppSession.Current.Filter_JobStatusIds = new List<int>();
AppSession.Current.Filter_JobLastResultStatusIds = new List<int>();
AppSession.Current.Filter_TransactionIds = new List<int>();
return Json(new AutomationFiltersDTO());
}
#endregion Automation Filters
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment