Example #1
0
        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);
        }
Example #2
0
        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));
        }