{"version":3,"sources":["controllers/views/view.deviceControl.js"],"names":["angular","module","config","parent","$stateProvider","url","state","template","params","filterButton","deviceTypeFilter","menuEntryFilter","favorite","infoGuide","breadcrumb","name","initialState","resolve","DeviceFilter","$stateParams","WithChildDevices","WithDetails","DeviceTypes","f","split","map","Number","MenuEntries","$rootScope","__Device","API","$filter","f_Devices","data","$emit","GetDevicesByFilter","then","i","length","$buildRaw","$dispatch","addOrUpdateDevice","FilteredDevices","TopDevices","devices","dev","ParendDeviceId","push","DevicesWithCustomFilter","IsFilterActivated","templateUrl","controller","passDevices","obj","key","element","$scope","viewMenuBarService","$state","infoModal","ENUM","$translate","startsWith","copy","deviceToUpdate","DeviceTypesAsKeys","getDeviceTypesByFilter","isNewDeviceType","a","b","undefined","removeAngularProperties","hasOwnProperty","changeButtons","editButton","startLearnButton","revertButton","updateDevice","localeCompare","reload","saveButton","devicesToChange","Device","Devices","$UI","isChanged","delete","api","RemoveDevice","charAt","changed","indexOf","DeviceId","UpdateDevice","$promise","surpressErrors","deleteDevice","device","err","names","foundDevices","forEach","promise","DeviceName","catch","filter","resource","Name","join","errors","alreadyFinished","displayErrorMessageForChangedDevicesPromise","values","errorText","infoParams","allDeleted","instant","Code","namesString","concat","close","ParentDeviceId","intervalId","Type","AllDevices","activeFilter","xcenterUtils","go","favoriteObject","__MenuEntry","itemsToDelete","$window","__DatapointValue","addFavoriteModal","conf_guidEmpty","deviceRoomPickerModal","deviceScannerModal","f_Interval","xCenterConfig","$q","previous","scrollTo","setFavorite","unregisterIntervalByAppId","ModalActive","getClasses","favoriteType","CustomActionName","DisplayName","ImageName","getDeviceType","l","isTopDevice","o","setButtons","setRefreshInterval","datapointValues","interval","defer","dps","DatapointConfigId","$pk","DeviceType","dp","AppId","registerInterval","fn","selectedDeviceType","VisualizationDatapoints","j","p","v","$collection","$refresh","$then","DatapointValue","Value","setValue","Flags","setReadFlags","deviceFilter","toString","changeFilter","filterOptions","searchStyle","hideNav","addFilterFavorite","favoriteFilter","emptyRoomsButton","selected","selectable","CustomActionDatas","inline","UserLevelRead","UITags","modal","x","MenuEntryId","setMode","mode","items","rightRoom","rooms","setRoomFilter","roomId","setBool","UserLevelWrite","Favorite","setAllDeviceTypes","bool","value","index","Entry","roomFilter","Children","$on","deviceId","array"],"mappings":"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","file":"view.deviceControl.js","sourcesContent":["\"use strict\";\r\n\r\nangular.module('app.controllers.devices', ['app.controllers.devices.dataPoint'])\r\n\r\n.config(['$stateProvider', function ($stateProvider) {\r\n $stateProvider.state('devices', {\r\n parent: 'site',\r\n url: '/devices/:deviceTypeFilter/:menuEntryFilter/:filterButton',\r\n template: '',\r\n params: {\r\n filterButton: 'true',\r\n deviceTypeFilter: 'false',\r\n menuEntryFilter: 'false',\r\n favorite : null\r\n },\r\n infoGuide : {\r\n state: 'deviceManagement'\r\n },\r\n breadcrumb: {\r\n initialState: true,\r\n name: 'NAV_Devices'\r\n },\r\n resolve: {\r\n DeviceFilter: function ($stateParams) {\r\n 'ngInject';\r\n\r\n var f = {\r\n WithDetails: true,\r\n WithChildDevices: true,\r\n Recursive: true\r\n };\r\n\r\n if ($stateParams.deviceTypeFilter !== 'false' && $stateParams.deviceTypeFilter !== \"\") {\r\n f.DeviceTypes = $stateParams.deviceTypeFilter.split(',').map(Number);\r\n } else {\r\n f.DeviceTypes = [];\r\n }\r\n if ($stateParams.menuEntryFilter !== 'false' && $stateParams.menuEntryFilter !== \"\") {\r\n f.MenuEntries = $stateParams.menuEntryFilter.split(',');\r\n } else {\r\n f.MenuEntries = [];\r\n }\r\n return f;\r\n },\r\n FilteredDevices: function (__Device, DeviceFilter, API, $filter, $rootScope,f_Devices) {\r\n 'ngInject';\r\n\r\n $rootScope.$emit('loading-start');\r\n var _API = new API();\r\n return _API\r\n .Device\r\n .GetDevicesByFilter(DeviceFilter)\r\n .$promise\r\n .then(function (data) {\r\n if (data) {\r\n for (var i = 0; i < data.length; i++) {\r\n\r\n data[i] = __Device.$buildRaw( data[i] ).$dispatch('build-view-datapoints');\r\n f_Devices.addOrUpdateDevice(data[i]);\r\n }\r\n return $filter('orderBy')(data, ['+DeviceType', '+Name']);\r\n }\r\n }\r\n );\r\n },\r\n TopDevices: function (FilteredDevices) {\r\n 'ngInject';\r\n\r\n const devices = [];\r\n for (let i = 0; i < FilteredDevices.length; i++) {\r\n const dev = FilteredDevices[i];\r\n if (!dev.ParendDeviceId ||\r\n (dev.ParendDeviceId === \"00000000-0000-0000-0000-000000000000\" ? dev : false)) {\r\n devices.push(dev);\r\n }\r\n }\r\n return devices;\r\n\r\n // return _.each(FilteredDevices, function (i) {\r\n // return !i.ParendDeviceId ||\r\n // (i.ParendDeviceId === \"00000000-0000-0000-0000-000000000000\" ? i : false);\r\n // });\r\n\r\n },\r\n DevicesWithCustomFilter: function ($stateParams) {\r\n 'ngInject';\r\n\r\n return $stateParams.filterButton;\r\n },\r\n IsFilterActivated: function ($stateParams) {\r\n 'ngInject';\r\n\r\n return ($stateParams.deviceTypeFilter !== 'false' && $stateParams.deviceTypeFilter !== \"\") || ($stateParams.menuEntryFilter !== 'false' && $stateParams.menuEntryFilter !== \"\")\r\n }\r\n\r\n }\r\n });\r\n}]).config(['$stateProvider', function ($stateProvider) {\r\n $stateProvider.state('devices.view', {\r\n parent: 'devices',\r\n url: '/view',\r\n templateUrl: 'views/device_control.html',\r\n controller: 'DevicesCtrl',\r\n params: {\r\n passDevices: null\r\n },\r\n infoGuide : {\r\n state: 'deviceManagement'\r\n },\r\n breadcrumb: {\r\n initialState: true,\r\n name: 'NAV_Devices'\r\n }\r\n\r\n });\r\n}]).config(['$stateProvider', function ($stateProvider) {\r\n $stateProvider.state('devices.edit', {\r\n parent: 'devices',\r\n url: '/edit',\r\n templateUrl: 'views/device_control.edit.html',\r\n controller: 'DevicesEditCtrl',\r\n params: {\r\n passDevices: null\r\n },\r\n infoGuide : {\r\n state: 'deviceManagement'\r\n },\r\n breadcrumb: {\r\n initialState: true,\r\n name: 'NAV_Devices'\r\n },\r\n /*resolve: {\r\n TopDevices: function (Devices, __Device) {\r\n return Devices;\r\n var v = __Device.$collection();\r\n return v.$orderBy(['DeviceType', 'Name']).$asPromise();\r\n }\r\n }*/\r\n\r\n });\r\n}]).//end config\r\n\r\ncontroller(\"DevicesEditCtrl\", ['$q', '$rootScope', '$scope', 'viewMenuBarService', '$state', 'infoModal', 'TopDevices', 'ENUM', '$translate', 'API',\r\n function ($q, $rootScope, $scope, viewMenuBarService, $state, infoModal, TopDevices, ENUM, $translate, API) {\r\n $scope.Devices = angular.copy(TopDevices);\r\n $scope.DeviceTypes = ENUM.getDeviceTypesByFilter(1);\r\n $scope.DeviceTypesAsKeys = ENUM.getDeviceTypesByFilter('1AsKey');\r\n $scope.isNewDeviceType = function (a, b) {\r\n if (b == undefined) return true;\r\n if (a == undefined) return true;\r\n return !(a == b);\r\n };\r\n\r\n const removeAngularProperties = (obj) => {\r\n const deviceToUpdate = {};\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n const element = obj[key];\r\n if (!key.startsWith('$')) {\r\n deviceToUpdate[key] = element;\r\n }\r\n }\r\n }\r\n return deviceToUpdate;\r\n }\r\n\r\n viewMenuBarService.changeButtons({\r\n 'editButton': false,\r\n 'startLearnButton': false,\r\n 'revertButton': function () {\r\n $state.go('devices.view', {}, {reload: 'devices'});\r\n },\r\n 'saveButton': function () {\r\n var devicesToChange = [];\r\n $scope.$emit('loading-start');\r\n\r\n const api = new API();\r\n \r\n for (var i = 0; i < $scope.Devices.length; ++i) {\r\n //update changed devices\r\n if ($scope.Devices[i].$UI && $scope.Devices[i].$UI.isChanged && !$scope.Devices[i].$UI.delete) {\r\n // device to be updated\r\n var updateDevice = angular.copy($scope.Devices[i]);\r\n // delete not changed parameters\r\n for (var key in updateDevice) {\r\n if (key.localeCompare(\"DeviceId\") !== 0 && key.charAt(0) !== '$' && updateDevice.$UI.changed && updateDevice.$UI.changed.indexOf(key) === -1) {\r\n delete updateDevice[key];\r\n }\r\n }\r\n // save changed device\r\n devicesToChange.push(api.Device.UpdateDevice({ Device: removeAngularProperties(updateDevice) }).$promise);\r\n }\r\n\r\n // delete devices\r\n if ($scope.Devices[i].$UI && $scope.Devices[i].$UI.delete) {\r\n // device to delete\r\n var deleteDevice = angular.copy($scope.Devices[i]);\r\n // delete device from database\r\n devicesToChange.push(api.Device.RemoveDevice({ DeviceId: deleteDevice.DeviceId }).$promise);\r\n }\r\n }\r\n\r\n if (devicesToChange.length === 0) {\r\n $state.go('devices.view', {}, { reload: 'devices' });\r\n return;\r\n }\r\n\r\n $rootScope.surpressErrors = true;\r\n let alreadyFinished = 0;\r\n const errors = [];\r\n devicesToChange.forEach((promise) => {\r\n promise\r\n .catch((err) => {\r\n const foundDevices = $scope.Devices.filter((device) => err.resource.DeviceId === device.DeviceId);\r\n if (foundDevices.length === 1) {\r\n err.DeviceName = foundDevices[0].Name;\r\n }\r\n else if (foundDevices.length > 1) {\r\n const names = [];\r\n foundDevices.forEach((device) => {\r\n names.push(device.Name);\r\n });\r\n err.DeviceName = names.join(',');\r\n }\r\n errors.push(err);\r\n })\r\n .finally(() => {\r\n alreadyFinished++;\r\n if (alreadyFinished === devicesToChange.length) {\r\n if (errors.length === 0) {\r\n $rootScope.surpressErrors = false;\r\n $scope.$emit('loading-stop');\r\n $state.go('devices.view', {}, { reload: 'devices' });\r\n return;\r\n }\r\n \r\n displayErrorMessageForChangedDevicesPromise(errors);\r\n $rootScope.surpressErrors = false;\r\n }\r\n });\r\n });\r\n\r\n \r\n }\r\n });\r\n\r\n function displayErrorMessageForChangedDevicesPromise(values) {\r\n var allDeleted = true;\r\n for (var i = 0; i < values.length; ++i) {\r\n if (values[i].Code === 'EX_LO_DEVICE_007') {\r\n // ok, do nothing\r\n }\r\n else {\r\n allDeleted = false;\r\n break;\r\n }\r\n }\r\n\r\n var errorText;\r\n\r\n if (allDeleted) {\r\n /* possibly multiple devices tried to be deleted but they are\r\n in scenes, so display what devices cannot be deleted */\r\n var namesString = `\"${values[0].DeviceName}\"`;\r\n\r\n if (values.length === 1) {\r\n errorText = $translate.instant('DEVICES_DeleteFailed_OneDevice')\r\n + ' '\r\n + namesString\r\n + ' '\r\n + $translate.instant('DEVICES_DeleteFailed_Is')\r\n + ' '\r\n + $translate.instant('DEVICES_DeleteFailed_SecondTextPart');\r\n } else {\r\n for (var i = 1; i < values.length; ++i) {\r\n namesString += ', \"' + values[i].DeviceName + '\"';\r\n }\r\n errorText = $translate.instant('DEVICES_DeleteFailed_MoreDevices')\r\n + ' '\r\n + namesString\r\n + ' '\r\n + $translate.instant('DEVICES_DeleteFailed_Are')\r\n + ' '\r\n + $translate.instant('DEVICES_DeleteFailed_SecondTextPart');\r\n }\r\n } else {\r\n errorText = $translate.instant('DEVICES_DeleteFailed_Text');\r\n }\r\n\r\n var infoParams = {\r\n \"Type\": 0,\r\n \"Title\": \"DEVICES_DeleteFailed\",\r\n \"DisplayTextTranslated\": errorText\r\n };\r\n $scope.$emit('loading-stop');\r\n infoModal(infoParams).then(function (modal) {\r\n modal.close.then(function () {\r\n $scope.$emit('loading-start');\r\n $state.go('devices.view', {}, { reload: 'devices' });\r\n });\r\n });\r\n }\r\n\r\n $scope.isTopDevice = function (device) {\r\n return (!device.ParentDeviceId || device.ParentDeviceId == '00000000-0000-0000-0000-000000000000');\r\n };\r\n\r\n $scope.itemsToDelete = function (device) {\r\n return !(device.$UI && device.$UI.delete);\r\n };\r\n }\r\n]).// end of DevicesEditCtrl\r\n\r\n\r\ncontroller(\"DevicesCtrl\", [\"$filter\", \"$scope\", \"$state\", \"$stateParams\", \"$window\", \"DeviceFilter\", 'FilteredDevices', \"DevicesWithCustomFilter\", \"ENUM\", \"IsFilterActivated\", \"__DatapointValue\", \"__MenuEntry\", \"addFavoriteModal\", \"conf_guidEmpty\", \"deviceRoomPickerModal\", \"deviceScannerModal\", \"f_Interval\", \"viewMenuBarService\", \"xCenterConfig\", \"$q\", \"xcenterUtils\",\r\n function ($filter, $scope, $state, $stateParams, $window, DeviceFilter, FilteredDevices, DevicesWithCustomFilter, ENUM, IsFilterActivated, __DatapointValue, __MenuEntry, addFavoriteModal, conf_guidEmpty, deviceRoomPickerModal, deviceScannerModal, f_Interval, viewMenuBarService, xCenterConfig, $q, xcenterUtils) {\r\n\r\n // scroll to top if enter from other state\r\n if($state.previous.parent !== 'devices') {\r\n $window.scrollTo(0, 0);\r\n }\r\n\r\n // define variables\r\n var intervalId = undefined;\r\n $scope.Devices = FilteredDevices;\r\n $scope.TopDevices = FilteredDevices;\r\n $scope.AllDevices = angular.copy($scope.Devices);\r\n $scope.DeviceTypes = ENUM.getDeviceTypesByFilter(1);\r\n $scope.DeviceTypesAsKeys = ENUM.getDeviceTypesByFilter('1AsKey');\r\n $scope.DevicesWithCustomFilter = DevicesWithCustomFilter !== 'true';\r\n $scope.DeviceFilter = DeviceFilter;\r\n $scope.activeFilter = IsFilterActivated;\r\n $scope.getClasses = xcenterUtils.getClasses;\r\n\r\n // set favorite button in head bar\r\n var o = {\r\n favoriteType: 'MenuEntry',\r\n favoriteObject: __MenuEntry.$buildRaw(\r\n {\r\n \"MenuEntryId\": 'abc0000d-8838-4d81-afd8-52d6cac5c5d0',\r\n \"MenuEntryType\": 3, // For Toggle Favorite to check MenuEntryType.\r\n \"DeviceId\": '00000000-0000-0000-0000-000000000000',\r\n 'CustomActionName': \"DeviceManagement\",\r\n 'DisplayName': 'Geräte',\r\n 'ImageName': 'geraete',\r\n 'CustomActionDatas': {},\r\n $UI: {}\r\n })\r\n };\r\n if($stateParams.favorite != null)\r\n {\r\n o.favoriteObject = $stateParams.favorite;\r\n o.favoriteType= 'Favorite';\r\n }\r\n viewMenuBarService.setFavorite(o);\r\n // set various buttons in head bar\r\n viewMenuBarService.setButtons({\r\n 'startLearnButton': function () {\r\n if ($scope.intervalId) {\r\n f_Interval.unregisterIntervalByAppId($scope.intervalId);\r\n }\r\n $scope.ModalActive = true;\r\n deviceScannerModal(function (data) {\r\n // user pressed save data = true. Otherwise nothing to do\r\n $scope.ModalActive = false;\r\n if (data === true) {\r\n $state.go('devices.view', {}, { reload: 'devices' });\r\n\r\n }\r\n $scope.setRefreshInterval();\r\n\r\n });\r\n },\r\n 'editButton': function () {\r\n\r\n if ($scope.intervalId) {\r\n f_Interval.unregisterIntervalByAppId($scope.intervalId);\r\n }\r\n\r\n\r\n $state.go('devices.edit');\r\n }\r\n });\r\n\r\n $scope.getDeviceType = function (DeviceType) {\r\n var l = $filter('filter')($scope.DeviceTypes, {'$pk': DeviceType});\r\n return l.length > 0 ? l[0] : {};\r\n };\r\n\r\n $scope.isTopDevice = function (device) {\r\n return (!device.ParentDeviceId || device.ParentDeviceId == '00000000-0000-0000-0000-000000000000');\r\n };\r\n\r\n $scope.isNewDeviceType = function (a, b) {\r\n if (b == undefined) return true;\r\n if (a == undefined) return true;\r\n return !(a == b);\r\n };\r\n\r\n $scope.setRefreshInterval = function () {\r\n // delete interval if it exists\r\n if ($scope.intervalId) {\r\n f_Interval.unregisterIntervalByAppId('interval.deviceControl.vizDataoints');\r\n }\r\n // create new interval\r\n if (xCenterConfig.interval.datapointValues > 0) {\r\n var i = {\r\n 'AppId': 'interval.deviceControl.vizDataoints',\r\n delay: xCenterConfig.interval.devicecontrolVizualisationDatapointValues,\r\n fn: function () {\r\n if (!$scope.TopDevices || $scope.TopDevices.length === 0) {\r\n return;\r\n }\r\n\r\n var dps ={};\r\n var dp = [];\r\n var promise = $q.defer();\r\n\r\n for (var i = 0; i < $scope.TopDevices.length; i++) {\r\n // console.log('mv'+this.$UI.hasActiveManualValue);\r\n if (!$scope.TopDevices[i].VisualizationDatapoints) {\r\n continue;\r\n }\r\n for (var j = 0; j < $scope.TopDevices[i].VisualizationDatapoints.length; j++) {\r\n let p = $scope.TopDevices[i].VisualizationDatapoints[j];\r\n let v = $scope.TopDevices[i].VisualizationDatapoints[j].DatapointValue;\r\n dps['k' + v.DatapointConfigId + '-d-' + v.DeviceId] = p;\r\n dp.push(__DatapointValue.$buildRaw(v));\r\n }\r\n }\r\n dp = __DatapointValue.$collection(dp).$refresh().$then(function () {\r\n for (let i = 0; i < dp.length; i++) {\r\n if(dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].DatapointValue.Value !== dp[i].Value)\r\n {\r\n dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].DatapointValue.Value = dp[i].Value;\r\n dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].setValue(dp[i].Value);\r\n //dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].setReadValue();\r\n }\r\n if(dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].DatapointValue.Flags !== dp[i].Flags) {\r\n dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].DatapointValue.Flags = dp[i].Flags;\r\n dps['k' + dp[i].DatapointConfigId + '-d-' + dp[i].DeviceId].setReadFlags();\r\n }\r\n }\r\n\r\n // Let's kick timeout for next interval\r\n promise.resolve();\r\n\r\n\r\n });\r\n return promise.promise;\r\n }\r\n };\r\n $scope.intervalId = f_Interval.registerInterval(i);\r\n }\r\n };\r\n\r\n $scope.changeFilter = function () {\r\n var selectedDeviceType = angular.copy($scope.DeviceFilter.DeviceTypes);\r\n var filterOptions = {\r\n DeviceType: {\r\n selectable: 'multiple',\r\n hideNav: false,\r\n hideButtonSystemDevice: false,\r\n selected: selectedDeviceType\r\n },\r\n MenuEntry: {\r\n emptyRooms: true,\r\n emptyRoomsButton: true,\r\n selectable: 'multiple',\r\n withChildIds: false,\r\n selected: $scope.DeviceFilter.MenuEntries\r\n },\r\n Device: {\r\n selectable: false,\r\n // list: $scope.AllDevices\r\n },\r\n saveOnSelect: true,\r\n inline: false,\r\n title: 'Geräteliste filtern'\r\n };\r\n $scope.ModalActive = true;\r\n deviceRoomPickerModal(filterOptions).then(function (modal) {\r\n modal['close'].then(function (data) {\r\n $scope.ModalActive = false;\r\n if (data) {\r\n var menuEntryFilter = false;\r\n if (data['MenuEntry'] && data['MenuEntry'].length > 0) {\r\n menuEntryFilter = data['MenuEntry'].map(x => x.MenuEntryId);\r\n }\r\n\r\n var deviceFilter = false;\r\n if (data['DeviceType'] && data['DeviceType'].length > 0) {\r\n deviceFilter = data['DeviceType'];\r\n }\r\n\r\n $state.go('devices.view', {\r\n 'deviceTypeFilter': deviceFilter.toString(),\r\n 'menuEntryFilter': menuEntryFilter.toString()\r\n });\r\n }\r\n });\r\n });\r\n };\r\n\r\n $scope.setMode = function (mode) {\r\n $scope.searchStyle = mode;\r\n };\r\n\r\n $scope.addFilterFavorite = function () {\r\n if (!$scope.favoriteFilter) {\r\n // Serialize Filters\r\n if(!$scope.DeviceFilter.DeviceTypes){ $scope.DeviceFilter.DeviceTypes = [];}\r\n if(!$scope.DeviceFilter.MenuEntries){ $scope.DeviceFilter.MenuEntries = [];}\r\n var o = {};\r\n o.$type = \"BMS.Shared.Model.System.FavoriteCustomAction, BMS.Shared\";\r\n\r\n o.DisplayName = 'Filter';\r\n o.MenuEntryType = 3;\r\n o.CustomActionName = 'DevicesManagementWithFilter';\r\n o.CustomActionDatas = {};\r\n o.DeviceId = conf_guidEmpty;\r\n o.UserLevelRead = 0;\r\n o.UserLevelWrite = 0;\r\n o.UITags = [];\r\n o.UITags.push('DeviceTypeFilter:' + $scope.DeviceFilter.DeviceTypes.join('|'));\r\n o.UITags.push('MenuEntryFilter:' + $scope.DeviceFilter.MenuEntries.join('|'));\r\n o.ImageName = 'filter';\r\n $scope.favoriteFilter = o;\r\n $scope.favoriteFilter.$UI = {};\r\n var b = addFavoriteModal(o).then(function (modal) {\r\n modal.close.then(function (data) {\r\n if (data) {\r\n $scope.favoriteFilter.$UI.Favorite = data;\r\n }\r\n })\r\n });\r\n } else {\r\n $scope.favoriteFilter = undefined;\r\n // TODO: delete favorite from register and main page?\r\n }\r\n };\r\n\r\n $scope.setAllDeviceTypes = function (bool) {\r\n angular.forEach($scope.Devices, function (value) {\r\n $scope.deviceTypeFilter[value.DeviceType] = bool;\r\n\r\n });\r\n };\r\n\r\n // recursive function to set roomFilter --> child rooms will get value of parent\r\n $scope.setRoomFilter = function (roomId, setBool, rightRoom, rooms) {\r\n // breakup clause\r\n if (!rooms) {\r\n return;\r\n }\r\n\r\n // iterate through all rooms, if right room is found, child room will get chosen value (setBool)\r\n for (var i = 0; i < rooms.length; ++i) {\r\n if (rightRoom || rooms[i].Entry.MenuEntryId == roomId) {\r\n $scope.roomFilter[rooms[i].Entry.MenuEntryId] = setBool;\r\n $scope.setRoomFilter(roomId, setBool, true, rooms[i].Children);\r\n } else {\r\n $scope.setRoomFilter(roomId, setBool, rightRoom, rooms[i].Children);\r\n }\r\n }\r\n };\r\n\r\n // init new refresh interval\r\n $scope.setRefreshInterval();\r\n\r\n // refresh ENUMs after their update\r\n $scope.$on(\"$enumsUpdated\", function () {\r\n $scope.DeviceTypes = ENUM.getDeviceTypesByFilter(1);\r\n $scope.DeviceTypesAsKeys = ENUM.getDeviceTypesByFilter('1AsKey');\r\n });\r\n\r\n $scope.$on(\"$destroy\", function () {\r\n if ($scope.intervalId) {\r\n f_Interval.unregisterIntervalByAppId($scope.intervalId);\r\n }\r\n });\r\n }\r\n]).filter('parentDevices', function () {\r\n return function (items, deviceId) {\r\n if (!deviceId) {\r\n return items;\r\n }\r\n if (!items) {\r\n return\r\n }\r\n\r\n return items.filter(function (element, index, array) {\r\n return (element.ParentDeviceId === deviceId && element.ParentDeviceId != '00000000-0000-0000-0000-000000000000');\r\n });\r\n\r\n };\r\n});\r\n"],"sourceRoot":"../../../../app"}