Ejemplo n.º 1
0
        public List <StationResult> GetStationResources()
        {
            var result = new List <StationResult>();

            var        unitStatuses = _unitsService.GetAllLatestStatusForUnitsByDepartmentId(DepartmentId);
            var        actionLogs   = _actionLogsService.GetActionLogsForDepartment(DepartmentId);
            var        userStates   = _userStateService.GetLatestStatesForDepartment(DepartmentId);
            var        stations     = _departmentGroupsService.GetAllGroupsForDepartment(DepartmentId);
            var        userGroups   = _departmentGroupsService.GetAllDepartmentGroupsForDepartment(DepartmentId);
            var        users        = _departmentsService.GetAllUsersForDepartment(DepartmentId);
            var        units        = _unitsService.GetUnitsForDepartment(DepartmentId);
            Department department   = _departmentsService.GetDepartmentById(DepartmentId, false);

            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 StationResult();
                s.Id  = u.UserId.ToString();
                s.Typ = 1;

                if (log != null)
                {
                    s.Sts = log.ActionTypeId;
                    s.Stm = log.Timestamp.TimeConverter(department);

                    if (log.DestinationId.HasValue)
                    {
                        if (log.ActionTypeId == (int)ActionTypes.RespondingToStation)
                        {
                            s.Did = log.DestinationId.GetValueOrDefault();

                            var group = stations.First(x => x.DepartmentGroupId == log.DestinationId.Value);
                            s.Dnm     = group.Name;
                        }
                        else if (log.ActionTypeId == (int)ActionTypes.AvailableStation)
                        {
                            s.Did = log.DestinationId.GetValueOrDefault();

                            var group = stations.First(x => x.DepartmentGroupId == log.DestinationId.Value);
                            s.Dnm     = group.Name;
                        }
                    }
                }
                else
                {
                    s.Sts = (int)ActionTypes.StandingBy;
                    s.Stm = DateTime.UtcNow.TimeConverter(department);
                }

                if (s.Did == 0)
                {
                    if (userGroups.ContainsKey(u.UserId))
                    {
                        var homeGroup = userGroups[u.UserId];
                        if (homeGroup != null && homeGroup.Type.HasValue &&
                            ((DepartmentGroupTypes)homeGroup.Type) == DepartmentGroupTypes.Station)
                        {
                            s.Did = homeGroup.DepartmentGroupId;
                            s.Dnm = homeGroup.Name;
                        }
                    }
                }

                if (state != null)
                {
                    s.Ste = state.State;
                    s.Stt = state.Timestamp.TimeConverter(department);
                }
                else
                {
                    s.Ste = (int)UserStateTypes.Available;
                    s.Stt = DateTime.UtcNow.TimeConverter(department);
                }

                if (!String.IsNullOrWhiteSpace(s.Dnm))
                {
                    result.Add(s);
                }
            });

            Parallel.ForEach(unitStatuses, unit =>
            {
                var unitResult = new StationResult();
                var savedUnit  = units.FirstOrDefault(x => x.UnitId == unit.UnitId);

                if (savedUnit != null)
                {
                    unitResult.Id = savedUnit.UnitId.ToString();
                    //unitResult.Nme = savedUnit.Name;
                    unitResult.Typ = 2;
                    unitResult.Sts = unit.State;
                    unitResult.Stm = unit.Timestamp.TimeConverter(department);

                    if (savedUnit.StationGroupId.HasValue)
                    {
                        unitResult.Did = savedUnit.StationGroupId.Value;
                        unitResult.Dnm = stations.First(x => x.DepartmentGroupId == savedUnit.StationGroupId.Value).Name;

                        result.Add(unitResult);
                    }
                }
            });

            return(result);
        }
Ejemplo n.º 2
0
        public List <PersonnelStatusResult> GetPersonnelStatusesForLink(int linkId)
        {
            var link = _departmentLinksService.GetLinkById(linkId);

            if (link.DepartmentId != DepartmentId && link.LinkedDepartmentId != DepartmentId)
            {
                return(new List <PersonnelStatusResult>());
            }

            var results = new List <PersonnelStatusResult>();

            var        actionLogs = _actionLogsService.GetActionLogsForDepartment(link.DepartmentId);
            var        userStates = _userStateService.GetLatestStatesForDepartment(link.DepartmentId);
            var        users      = _departmentsService.GetAllUsersForDepartment(link.DepartmentId);
            Department department = _departmentsService.GetDepartmentById(link.DepartmentId, false);

            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);
                }
                results.Add(s);
            }


            return(results);
        }
Ejemplo n.º 3
0
        public bool ValidateNotificationForProcessing(ProcessedNotification notification, DepartmentNotification setting)
        {
            //dynamic dynamicData = JsonConvert.DeserializeObject(notification.Data);
            NotificationItem dynamicData = ObjectSerialization.Deserialize <NotificationItem>(notification.Data);

            switch (notification.Type)
            {
            case EventTypes.UnitStatusChanged:
                if (!String.IsNullOrWhiteSpace(setting.BeforeData) && !String.IsNullOrWhiteSpace(setting.CurrentData))
                {
                    if (setting.BeforeData.Contains("-1") && setting.CurrentData.Contains("-1"))
                    {
                        return(true);
                    }

                    bool beforeAny  = setting.BeforeData.Contains("-1");
                    bool currentAny = setting.CurrentData.Contains("-1");

                    UnitState beforeState  = null;
                    UnitState currentState = null;

                    currentState = _unitsService.GetUnitStateById((int)dynamicData.StateId);

                    if (!beforeAny)
                    {
                        beforeState = _unitsService.GetLastUnitStateBeforeId(currentState.UnitId, currentState.UnitStateId);
                    }

                    if ((currentAny || currentState.State == int.Parse(setting.CurrentData)) &&
                        (beforeAny || beforeState.State == int.Parse(setting.BeforeData)))
                    {
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            case EventTypes.PersonnelStaffingChanged:
                if (!String.IsNullOrWhiteSpace(setting.BeforeData) && !String.IsNullOrWhiteSpace(setting.CurrentData))
                {
                    if (setting.BeforeData.Contains("-1") && setting.CurrentData.Contains("-1"))
                    {
                        return(true);
                    }

                    bool beforeAny  = setting.BeforeData.Contains("-1");
                    bool currentAny = setting.CurrentData.Contains("-1");

                    UserState beforeState  = null;
                    UserState currentState = null;

                    currentState = _userStateService.GetUserStateById((int)dynamicData.StateId);

                    if (!beforeAny)
                    {
                        beforeState = _userStateService.GetPerviousUserState(currentState.UserId, currentState.UserStateId);
                    }

                    if ((currentAny || currentState.State == int.Parse(setting.CurrentData)) &&
                        (beforeAny || beforeState.State == int.Parse(setting.BeforeData)))
                    {
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            case EventTypes.PersonnelStatusChanged:
                if (!String.IsNullOrWhiteSpace(setting.BeforeData) && !String.IsNullOrWhiteSpace(setting.CurrentData))
                {
                    if (setting.BeforeData.Contains("-1") && setting.CurrentData.Contains("-1"))
                    {
                        return(true);
                    }

                    bool beforeAny  = setting.BeforeData.Contains("-1");
                    bool currentAny = setting.CurrentData.Contains("-1");

                    ActionLog beforeState  = null;
                    ActionLog currentState = null;

                    currentState = _actionLogsService.GetActionlogById((int)dynamicData.StateId);

                    if (!beforeAny)
                    {
                        beforeState = _actionLogsService.GetPreviousActionLog(currentState.UserId, currentState.ActionLogId);
                    }

                    if ((currentAny || currentState.ActionTypeId == int.Parse(setting.CurrentData)) &&
                        (beforeAny || beforeState.ActionTypeId == int.Parse(setting.BeforeData)))
                    {
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            case EventTypes.RolesInGroupAvailabilityAlert:
                if (!String.IsNullOrWhiteSpace(setting.CurrentData) && !String.IsNullOrWhiteSpace(setting.Data))
                {
                    int count            = 0;
                    var userStateChanged = _userStateService.GetUserStateById((int)dynamicData.StateId);
                    var usersInRole      = _personnelRolesService.GetAllMembersOfRole(int.Parse(setting.Data));
                    var group            = _departmentGroupsService.GetGroupForUser(userStateChanged.UserId, notification.DepartmentId);

                    if (group == null || group.Members == null || !group.Members.Any())
                    {
                        return(false);
                    }

                    var acceptableStaffingLevels = setting.CurrentData.Split(char.Parse(","));

                    if (usersInRole != null && !usersInRole.Any())
                    {
                        return(false);
                    }

                    var staffingLevels = _userStateService.GetLatestStatesForDepartment(setting.DepartmentId);

                    if (staffingLevels != null && staffingLevels.Any())
                    {
                        foreach (var user in usersInRole)
                        {
                            var currentState = staffingLevels.FirstOrDefault(x => x.UserId == user.UserId);

                            if (currentState != null && acceptableStaffingLevels.Any(x => x == currentState.State.ToString()) &&
                                group.Members.Any(x => x.UserId == user.UserId))
                            {
                                count++;
                            }
                        }

                        if (count <= setting.LowerLimit)
                        {
                            notification.PersonnelRoleTargeted = int.Parse(setting.Data);
                            return(true);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            case EventTypes.RolesInDepartmentAvailabilityAlert:
                if (!String.IsNullOrWhiteSpace(setting.CurrentData) && !String.IsNullOrWhiteSpace(setting.Data))
                {
                    int count       = 0;
                    var usersInRole = _personnelRolesService.GetAllMembersOfRole(int.Parse(setting.Data));
                    var acceptableStaffingLevels = setting.CurrentData.Split(char.Parse(","));

                    if (usersInRole != null && !usersInRole.Any())
                    {
                        return(false);
                    }

                    var staffingLevels = _userStateService.GetLatestStatesForDepartment(setting.DepartmentId);

                    if (staffingLevels != null && staffingLevels.Any())
                    {
                        foreach (var user in usersInRole)
                        {
                            var currentState = staffingLevels.FirstOrDefault(x => x.UserId == user.UserId);

                            if (currentState != null && acceptableStaffingLevels.Any(x => x == currentState.State.ToString()))
                            {
                                count++;
                            }
                        }

                        if (count <= setting.LowerLimit)
                        {
                            notification.PersonnelRoleTargeted = int.Parse(setting.Data);
                            return(true);
                        }
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            case EventTypes.UnitTypesInGroupAvailabilityAlert:
                if (!String.IsNullOrWhiteSpace(setting.CurrentData) && !String.IsNullOrWhiteSpace(setting.Data))
                {
                    int count            = 0;
                    var currentUnitState = _unitsService.GetUnitStateById((int)dynamicData.StateId);
                    var unitsForType     = _unitsService.GetAllUnitsForType(setting.DepartmentId, setting.Data);
                    var unitForEvent     = _unitsService.GetUnitById(currentUnitState.UnitId);

                    if (unitForEvent?.StationGroupId == null)
                    {
                        return(false);
                    }

                    var acceptableUnitStates = setting.CurrentData.Split(char.Parse(","));
                    var unitsInGroup         = _unitsService.GetAllUnitsForGroup(unitForEvent.StationGroupId.Value);

                    if (unitsForType != null && !unitsForType.Any())
                    {
                        return(false);
                    }

                    var staffingLevels = _unitsService.GetAllLatestStatusForUnitsByDepartmentId(setting.DepartmentId);

                    foreach (var unit in unitsForType)
                    {
                        var currentState = staffingLevels.FirstOrDefault(x => x.UnitId == unit.UnitId);

                        if (currentState != null && acceptableUnitStates.Any(x => x == currentState.State.ToString()) && unitsInGroup.Any(x => x.UnitId == unit.UnitId))
                        {
                            count++;
                        }
                    }

                    if (count <= setting.LowerLimit)
                    {
                        notification.UnitTypeTargeted = setting.Data;
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            case EventTypes.UnitTypesInDepartmentAvailabilityAlert:
                if (!String.IsNullOrWhiteSpace(setting.CurrentData) && !String.IsNullOrWhiteSpace(setting.Data))
                {
                    int count                = 0;
                    var unitsForType         = _unitsService.GetAllUnitsForType(setting.DepartmentId, setting.Data);
                    var acceptableUnitStates = setting.CurrentData.Split(char.Parse(","));

                    if (unitsForType != null && !unitsForType.Any())
                    {
                        return(false);
                    }

                    var staffingLevels = _unitsService.GetAllLatestStatusForUnitsByDepartmentId(setting.DepartmentId);

                    foreach (var unit in unitsForType)
                    {
                        var currentState = staffingLevels.FirstOrDefault(x => x.UnitId == unit.UnitId);

                        if (currentState != null && acceptableUnitStates.Any(x => x == currentState.State.ToString()))
                        {
                            count++;
                        }
                    }

                    if (count <= setting.LowerLimit)
                    {
                        notification.UnitTypeTargeted = setting.Data;
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
                break;

            default:
                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        public List <PersonnelViewModel> GetPersonnelStatuses()
        {
            var department         = _departmentsService.GetDepartmentById(DepartmentId, false);
            var stations           = _departmentGroupsService.GetAllStationGroupsForDepartment(DepartmentId);
            var calls              = _callsService.GetActiveCallsByDepartment(DepartmentId);
            var allUsers           = _departmentsService.GetAllUsersForDepartment(DepartmentId);
            var hideUnavailable    = _departmentSettingsService.GetBigBoardHideUnavailableDepartment(DepartmentId);
            var lastUserActionlogs = _actionLogsService.GetActionLogsForDepartment(DepartmentId);
            //var departmentGroups = _departmentGroupsService.GetAllGroupsForDepartment(DepartmentId);

            var lastUserStates = _userStateService.GetLatestStatesForDepartment(DepartmentId);
            var personnelNames = _departmentsService.GetAllPersonnelNamesForDepartment(DepartmentId);

            var names = new Dictionary <string, string>();

            var userStates = new List <UserState>();

            foreach (var u in allUsers)
            {
                var state = lastUserStates.FirstOrDefault(x => x.UserId == u.UserId);

                if (state != null)
                {
                    userStates.Add(state);
                }
                else
                {
                    userStates.Add(_userStateService.GetLastUserStateByUserId(u.UserId));
                }

                var name = personnelNames.FirstOrDefault(x => x.UserId == u.UserId);
                if (name != null)
                {
                    names.Add(u.UserId, name.Name);
                }
            }

            var personnelViewModels = new List <PersonnelViewModel>();

            var sortedUngroupedUsers = from u in allUsers
                                       // let mu = Membership.GetUser(u.UserId)
                                       let userGroup = _departmentGroupsService.GetGroupForUser(u.UserId, DepartmentId)
                                                       let groupName                         = userGroup == null ? "" : userGroup.Name
                                                                                   let roles = _personnelRolesService.GetRolesForUser(u.UserId, DepartmentId)
                                                                                               //let name = (ProfileBase.Create(mu.UserName, true)).GetPropertyValue("Name").ToString()
                                                                                               let name = names[u.UserId]
                                                                                                          let weight = lastUserActionlogs.Where(x => x.UserId == u.UserId).FirstOrDefault().GetWeightForAction()
                                                                                                                       orderby groupName, weight, name ascending
                select new
            {
                Name  = name,
                User  = u,
                Group = userGroup,
                Roles = roles
            };

            foreach (var u in sortedUngroupedUsers)
            {
                //var mu = Membership.GetUser(u.User.UserId);
                var al = lastUserActionlogs.Where(x => x.UserId == u.User.UserId).FirstOrDefault();
                var us = userStates.Where(x => x.UserId == u.User.UserId).FirstOrDefault();

                // if setting is such, ignore unavailable users.
                if (hideUnavailable.HasValue && hideUnavailable.Value && us.State != (int)UserStateTypes.Unavailable)
                {
                    continue;
                }

                string callNumber = "";
                if (al != null && al.ActionTypeId == (int)ActionTypes.RespondingToScene ||
                    (al != null && al.DestinationType.HasValue && al.DestinationType.Value == 2))
                {
                    if (al.DestinationId.HasValue)
                    {
                        var call = calls.FirstOrDefault(x => x.CallId == al.DestinationId.Value);

                        if (call != null)
                        {
                            callNumber = call.Number;
                        }
                    }
                }
                var respondingToDepartment =
                    stations.Where(s => al != null && s.DepartmentGroupId == al.DestinationId).FirstOrDefault();
                var personnelViewModel = PersonnelViewModel.Create(u.Name, al, us, department, respondingToDepartment, u.Group,
                                                                   u.Roles, callNumber);

                personnelViewModels.Add(personnelViewModel);
            }

            return(personnelViewModels);
        }
Ejemplo n.º 5
0
        public IActionResult GetPersonnelList(int linkId)
        {
            var link = _departmentLinksService.GetLinkById(linkId);

            if (link.DepartmentId != DepartmentId && link.LinkedDepartmentId != DepartmentId)
            {
                Unauthorized();
            }

            var department         = _departmentsService.GetDepartmentById(link.DepartmentId);
            var allUsers           = _departmentsService.GetAllUsersForDepartment(link.DepartmentId);
            var lastUserActionlogs = _actionLogsService.GetActionLogsForDepartment(link.DepartmentId);
            var departmentGroups   = _departmentGroupsService.GetAllGroupsForDepartment(link.DepartmentId);

            var lastUserStates = _userStateService.GetLatestStatesForDepartment(link.DepartmentId);
            var personnelNames = _departmentsService.GetAllPersonnelNamesForDepartment(link.DepartmentId);

            var calls    = _callsService.GetActiveCallsByDepartment(link.DepartmentId);
            var stations = _departmentGroupsService.GetAllStationGroupsForDepartment(link.DepartmentId);

            var names = new Dictionary <string, string>();

            var userStates = new List <UserState>();

            foreach (var u in allUsers)
            {
                var state = lastUserStates.FirstOrDefault(x => x.UserId == u.UserId);

                if (state != null)
                {
                    userStates.Add(state);
                }
                else
                {
                    userStates.Add(_userStateService.GetLastUserStateByUserId(u.UserId));
                }

                var name = personnelNames.FirstOrDefault(x => x.UserId == u.UserId);
                if (name != null)
                {
                    names.Add(u.UserId, name.Name);
                }
                else
                {
                    names.Add(u.UserId, UserHelper.GetFullNameForUser(u.UserId));
                }
            }

            var personnelViewModels = new List <Models.BigBoardX.PersonnelViewModel>();

            var sortedUngroupedUsers = from u in allUsers
                                       // let mu = Membership.GetUser(u.UserId)
                                       let userGroup = _departmentGroupsService.GetGroupForUser(u.UserId, DepartmentId)
                                                       let groupName                         = userGroup == null ? "" : userGroup.Name
                                                                                   let roles = _personnelRolesService.GetRolesForUser(u.UserId, DepartmentId)
                                                                                               //let name = (ProfileBase.Create(mu.UserName, true)).GetPropertyValue("Name").ToString()
                                                                                               let name = names[u.UserId]
                                                                                                          let weight = lastUserActionlogs.Where(x => x.UserId == u.UserId).FirstOrDefault().GetWeightForAction()
                                                                                                                       orderby groupName, weight, name ascending
                select new
            {
                Name  = name,
                User  = u,
                Group = userGroup,
                Roles = roles
            };

            foreach (var u in sortedUngroupedUsers)
            {
                //var mu = Membership.GetUser(u.User.UserId);
                var al = lastUserActionlogs.Where(x => x.UserId == u.User.UserId).FirstOrDefault();
                var us = userStates.Where(x => x.UserId == u.User.UserId).FirstOrDefault();

                string callNumber = "";
                if (al != null && al.ActionTypeId == (int)ActionTypes.RespondingToScene || (al != null && al.DestinationType.HasValue && al.DestinationType.Value == 2))
                {
                    if (al.DestinationId.HasValue)
                    {
                        var call = calls.FirstOrDefault(x => x.CallId == al.DestinationId.Value);

                        if (call != null)
                        {
                            callNumber = call.Number;
                        }
                    }
                }
                var respondingToDepartment = stations.Where(s => al != null && s.DepartmentGroupId == al.DestinationId).FirstOrDefault();
                var personnelViewModel     = Models.BigBoardX.PersonnelViewModel.Create(u.Name, al, us, department, respondingToDepartment, u.Group, u.Roles, callNumber);

                personnelViewModels.Add(personnelViewModel);
            }

            return(Json(personnelViewModels));
        }