public List <PersonnelStatusResult> GetPersonnelStatuses(string activeFilter) { var results = new List <PersonnelStatusResult>(); var filter = HttpUtility.UrlDecode(activeFilter); var activeFilters = filter.Split(char.Parse("|")); var filters = GetFilterOptions(); var actionLogs = _actionLogsService.GetActionLogsForDepartment(DepartmentId); var userStates = _userStateService.GetLatestStatesForDepartment(DepartmentId); var users = _departmentsService.GetAllUsersForDepartment(DepartmentId); Department department = _departmentsService.GetDepartmentById(DepartmentId, false); var allGroups = _departmentGroupsService.GetAllDepartmentGroupsForDepartment(DepartmentId); var allRoles = _personnelRolesService.GetAllRolesForUsersInDepartment(DepartmentId); Parallel.ForEach(users, u => { var log = (from l in actionLogs where l.UserId == u.UserId select l).FirstOrDefault(); var state = (from l in userStates where l.UserId == u.UserId select l).FirstOrDefault(); var s = new PersonnelStatusResult(); s.Uid = u.UserId.ToString(); if (log != null) { s.Atp = log.ActionTypeId; s.Atm = log.Timestamp.TimeConverter(department); if (log.DestinationId.HasValue) { if (log.ActionTypeId == (int)ActionTypes.RespondingToScene) { s.Did = log.DestinationId.Value.ToString(); } else if (log.ActionTypeId == (int)ActionTypes.RespondingToStation) { s.Did = log.DestinationId.Value.ToString(); } else if (log.ActionTypeId == (int)ActionTypes.AvailableStation) { s.Did = log.DestinationId.Value.ToString(); } } } else { s.Atp = (int)ActionTypes.StandingBy; s.Atm = DateTime.UtcNow.TimeConverter(department); } if (state != null) { s.Ste = state.State; s.Stm = state.Timestamp.TimeConverter(department); } else { s.Ste = (int)UserStateTypes.Available; s.Stm = DateTime.UtcNow.TimeConverter(department); } DepartmentGroup userGroup = null; if (allGroups.ContainsKey(u.UserId)) { userGroup = allGroups[u.UserId]; } var roles = new List <PersonnelRole>(); if (allRoles.ContainsKey(u.UserId)) { roles = allRoles[u.UserId]; } foreach (var afilter in activeFilters) { var text = GetTextValue(afilter, filters); if (afilter.Substring(0, 2) == "G:") { if (userGroup != null && text == userGroup.Name) { results.Add(s); break; } } else if (afilter.Substring(0, 2) == "R:") { if (roles.Any(x => x.Name == text)) { results.Add(s); break; } } else if (afilter.Substring(0, 2) == "U:") { if (s.Ste.ToString() == text || s.Ste.ToString() == text.Replace(" ", "")) { results.Add(s); break; } } } }); return(results); }
public async Task <ActionResult <List <PersonnelStatusResult> > > GetPersonnelStatuses(string activeFilter) { var results = new List <PersonnelStatusResult>(); string[] activeFilters = null; if (!String.IsNullOrWhiteSpace(activeFilter)) { var filter = HttpUtility.UrlDecode(activeFilter); activeFilters = filter.Split(char.Parse("|")); } var filters = await GetFilterOptions(); var actionLogs = await _actionLogsService.GetLastActionLogsForDepartmentAsync(DepartmentId); var userStates = await _userStateService.GetLatestStatesForDepartmentAsync(DepartmentId); //var users = await _departmentsService.GetAllUsersForDepartmentAsync(DepartmentId); var users = _usersService.GetUserGroupAndRolesByDepartmentId(DepartmentId, false, false, false); Department department = await _departmentsService.GetDepartmentByIdAsync(DepartmentId, false); //var allGroups = await _departmentGroupsService.GetAllDepartmentGroupsForDepartmentAsync(DepartmentId); //var allRoles = await _personnelRolesService.GetAllRolesForUsersInDepartmentAsync(DepartmentId); var personnelSortOrder = await _departmentSettingsService.GetDepartmentPersonnelSortOrderAsync(DepartmentId); var personnelStatusSortOrder = await _departmentSettingsService.GetDepartmentPersonnelListStatusSortOrderAsync(DepartmentId); foreach (var u in users) { var log = (from l in actionLogs where l.UserId == u.UserId select l).FirstOrDefault(); var state = (from l in userStates where l.UserId == u.UserId select l).FirstOrDefault(); var s = new PersonnelStatusResult(); s.Uid = u.UserId.ToString(); if (log != null) { s.Atp = log.ActionTypeId; s.Atm = log.Timestamp.TimeConverter(department); if (log.DestinationId.HasValue) { if (log.ActionTypeId == (int)ActionTypes.RespondingToScene) { s.Did = log.DestinationId.Value.ToString(); } else if (log.ActionTypeId == (int)ActionTypes.RespondingToStation) { s.Did = log.DestinationId.Value.ToString(); } else if (log.ActionTypeId == (int)ActionTypes.AvailableStation) { s.Did = log.DestinationId.Value.ToString(); } } } else { s.Atp = (int)ActionTypes.StandingBy; s.Atm = DateTime.UtcNow.TimeConverter(department); } if (state != null) { s.Ste = state.State; s.Stm = state.Timestamp.TimeConverter(department); } else { s.Ste = (int)UserStateTypes.Available; s.Stm = DateTime.UtcNow.TimeConverter(department); } //DepartmentGroup userGroup = null; //if (allGroups.ContainsKey(u.UserId)) // userGroup = allGroups[u.UserId]; //var roles = new List<PersonnelRole>(); //if (allRoles.ContainsKey(u.UserId)) // roles = allRoles[u.UserId]; if (u.DepartmentGroupId.HasValue) { s.Gid = u.DepartmentGroupId.Value; } if (log != null) { if (personnelStatusSortOrder != null && personnelStatusSortOrder.Any()) { var statusSorting = personnelStatusSortOrder.FirstOrDefault(x => x.StatusId == log.ActionTypeId); if (statusSorting != null) { s.Weight = statusSorting.Weight; } else { s.Weight = 9000; } } else { s.Weight = 9000; } } else { s.Weight = 9000; } if (activeFilter != null && activeFilter.Any()) { foreach (var afilter in activeFilters) { var text = GetTextValue(afilter, filters); if (afilter.Substring(0, 2) == "G:") { if (u.DepartmentGroupName != null && text == u.DepartmentGroupName) { results.Add(s); break; } } else if (afilter.Substring(0, 2) == "R:") { if (u.RoleNamesList.Any(x => x == text)) { results.Add(s); break; } } else if (afilter.Substring(0, 2) == "U:") { if (s.Ste.ToString() == text || s.Ste.ToString() == text.Replace(" ", "")) { results.Add(s); break; } } } } else { results.Add(s); } } switch (personnelSortOrder) { case PersonnelSortOrders.Default: results = results.OrderBy(x => x.Weight).ToList(); break; case PersonnelSortOrders.FirstName: results = results.OrderBy(x => x.Weight).ThenBy(x => users.First(y => y.UserId == x.Uid).FirstName).ToList(); break; case PersonnelSortOrders.LastName: results = results.OrderBy(x => x.Weight).ThenBy(x => users.First(y => y.UserId == x.Uid).LastName).ToList(); break; case PersonnelSortOrders.Group: results = results.OrderBy(x => x.Weight).ThenBy(x => x.Gid).ToList(); break; default: results = results.OrderBy(x => x.Weight).ToList(); break; } return(Ok(results)); }