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); }
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); }
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); }
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); }
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)); }