{"version":3,"sources":["admin.module.js","admin.config.js","admin.constants.js","admin.route.js","admin.run.js","build.constants.js","common/modules/module.angular-http-auth.js","common/services/account.service.js","common/services/notification.services.js","common/services/place.services.js","common/services/report.service.js","common/services/settings.services.js","common/services/user.service.js","common/providers/provider.http-proxy.js","common/utils/util.singapore.js","pages/downloads/downloads.controller.js","pages/downloads/downloads.route.js","pages/home/home.route.js","pages/login/login.controller.js","pages/login/login.route.js","pages/login/login.run.js","pages/monitor/monitor.controller.js","pages/monitor/monitor.route.js","pages/monitor/monitor.service.js","pages/page/page.route.js","pages/place/baseplace.controller.js","pages/place/place.controller.js","pages/place/place.route.js","pages/settings/settings.controller.js","pages/settings/settings.route.js","pages/user/user.constants.js","pages/user/user.controller.js","pages/user/user.route.js","pages/login/loginByQuery/loginByQuery.controller.js","pages/monitor/logs/monitor.logs.controller.js","pages/monitor/logs/monitor.logs.route.js","pages/monitor/uspd/monitor.uspd.controller.js","pages/monitor/uspd/monitor.uspd.route.js","pages/page/footer/controller.footer.js","pages/page/header/controller.header.js","pages/place/address/address.controller.js","pages/place/address/address.route.js","pages/place/device/device.controller.js","pages/place/device/device.route.js","pages/place/device/device.service.js","pages/place/tree/tree.component.js","pages/user/edit/user.edit.controller.js","pages/user/edit/user.edit.route.js","pages/user/places/user.places.controller.js","pages/user/places/user.places.route.js","pages/user/reports/user.reports.controller.js","pages/user/reports/user.reports.route.js","pages/place/address/actions/address.actions.controller.js","pages/place/address/actions/address.actions.route.js","pages/place/address/utils/address.utils.controller.js","pages/place/address/utils/address.utils.route.js","pages/place/address/edit/address.edit.controller.js","pages/place/address/edit/address.edit.route.js","pages/place/device/edit/device.edit.controller.js","pages/place/device/edit/device.edit.route.js","pages/place/device/data/device.data.controller.js","pages/place/device/data/device.data.route.js","pages/user/places/tree/select.tree.component.js","pages/place/device/edit/move/device.move.controller.js","pages/place/device/edit/move/device.move.route.js"],"names":[],"mappings":"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","file":"../app.js","sourcesContent":["(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\", [\r\n 'ngSanitize',\r\n //'ngAnimate',\r\n 'ui.router',\r\n 'http-auth-interceptor',\r\n 'volga.http-proxy',\r\n 'foundation',\r\n 'foundation.core',\r\n 'ui.grid',\r\n 'ui.grid.edit',\r\n 'ui.grid.selection',\r\n 'ui.grid.expandable',\r\n 'ui.grid.pagination',\r\n 'ui.grid.resizeColumns',\r\n 'ui.grid.saveState',\r\n //'foundation.dynamicRouting',\r\n //'foundation.dynamicRouting.animations',\r\n 'foundation.iconic'\r\n ]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($logProvider, IconicProvider, isDebugMode) {\r\n\r\n $logProvider.debugEnabled(isDebugMode);\r\n\r\n IconicProvider.setAssetPath('/fonts');\r\n } \r\n})();\r\n","(function() {\r\n \"use strict\";\r\n\r\n angular\r\n .module(\"volga\")\r\n .constant(\"_\", window._);\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider, $urlRouterProvider, $locationProvider) {\r\n\r\n // urls without #\r\n $locationProvider.html5Mode(true);\r\n\r\n // redirect to home state\r\n $urlRouterProvider.otherwise(\"/\");\r\n\r\n $stateProvider\r\n .state(\"root\",\r\n {\r\n abstract: true,\r\n templateUrl: \"app/admin.layout.html\",\r\n resolve: {\r\n user: function (accountService) {\r\n return accountService.getProfile();\r\n }\r\n }\r\n });\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n angular.module('volga').run(_run);\r\n function _run($location, $state, $rootScope, $log, $timeout) {\r\n\r\n var loadingTimeout = null;\r\n // NOTE: to enable loading indicator set to false\r\n $rootScope.disableLoading = true;\r\n $rootScope.loadingState = true;\r\n // Enable FastClick to remove the 300ms click delay on touch devices\r\n FastClick.attach(document.body);\r\n \r\n $rootScope.app = {\r\n params: null,\r\n loading: true\r\n };\r\n\r\n $log.log(\"started\");\r\n\r\n onPrepareLocalStorage(true, false);\r\n\r\n // catch errors in route resolve functions and redirects\r\n $rootScope.$on(\"$stateChangeError\", onStateError);\r\n\r\n $rootScope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams) {\r\n onStateChange(event, toState, toParams, fromState, fromParams);\r\n \r\n onLoadingStart();\r\n });\r\n\r\n $rootScope.$on(\"$stateChangeSuccess\", function (event, toState, toParams, fromState, fromParams) {\r\n onStateChange(event, toState, toParams, fromState, fromParams);\r\n onLoadingEnd();\r\n $rootScope.isEditState = toState.name.indexOf('edit') > -1 || toState.name.indexOf('create') > -1;\r\n });\r\n\r\n // redirect to prev state if current is broken on resolve\r\n function onStateChange(event, toState, toParams, fromState, fromParams) {\r\n $log.debug(event.name + \": \" + fromState.name + \"(\" + JSON.stringify(fromParams) + \")\" + \" -> \" + toState.name + \"(\" + JSON.stringify(toParams) + \")\");\r\n }\r\n\r\n function onStateError(event, toState, toParams, fromState, fromParams, error) {\r\n onLoadingEnd();\r\n // Using event.preventDefault() to prevent the $UrlRouter from reverting the URL to the previous valid \r\n // location (in case of a URL navigation)\r\n event.preventDefault();\r\n\r\n if (error) {\r\n $log.error(error);\r\n\r\n // go to prev state if something goes wrong\r\n // prev state should not be an abstract and not the same\r\n if (fromState && !fromState.abstract && !angular.equals(toState, fromState)) {\r\n return $state.go(fromState.name, fromParams, { reload: true });\r\n }\r\n }\r\n\r\n $location.url(\"/\");\r\n }\r\n\r\n function onLoadingStart() {\r\n if ($rootScope.disableLoading) return;\r\n $rootScope.stateChanging = true;\r\n loadingTimeout && $timeout.cancel(loadingTimeout);\r\n loadingTimeout = $timeout(function () {\r\n $rootScope.loadingState = true;\r\n }, 300);\r\n }\r\n\r\n function onLoadingEnd() {\r\n if ($rootScope.disableLoading) return;\r\n\r\n loadingTimeout && $timeout.cancel(loadingTimeout);\r\n $rootScope.loadingState = false;\r\n $rootScope.stateChanging = false;\r\n }\r\n\r\n function onPrepareLocalStorage(remove, keep) {\r\n if (remove) {\r\n var keysRemove = [\r\n 'adm-dev-grid-state-1' // dont keep grid states between sessions\r\n ];\r\n for (var i = 0, len = localStorage.length; i < len; ++i) {\r\n var key = localStorage.key(i);\r\n if (keysRemove.indexOf(key) >= 0)\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n if (keep) {\r\n var keysKeep = [\r\n 'volga.auth',\r\n 'place.devices.filter',\r\n ];\r\n for (var i = 0, len = localStorage.length; i < len; ++i) {\r\n var key = localStorage.key(i);\r\n if (keysKeep.indexOf(key) < 0)\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n }\r\n }\r\n\r\n})();\r\n\r\n","(function () {\r\n \"use strict\";\r\n angular\r\n .module(\"volga\")\r\n .constant(\"isDebugMode\", true);\r\n})();","/*global angular:true, browser:true */\r\n\r\n/**\r\n * @license HTTP Auth Interceptor Module for AngularJS\r\n * (c) 2012 Witold Szczerba\r\n * License: MIT\r\n */\r\n(function () {\r\n 'use strict';\r\n\r\n angular.module('http-auth-interceptor', ['http-auth-interceptor-buffer'])\r\n\r\n angular.module('volga').factory('authService', ['$rootScope', 'httpBuffer', function ($rootScope, httpBuffer) {\r\n return {\r\n /**\r\n * Call this function to indicate that authentication was successfull and trigger a\r\n * retry of all deferred requests.\r\n * @param data an optional argument to pass on to $broadcast which may be useful for\r\n * example if you need to pass through details of the user that was logged in\r\n * @param configUpdater an optional transformation function that can modify the \r\n * requests that are retried after having logged in. This can be used for example\r\n * to add an authentication token. It must return the request.\r\n */\r\n loginConfirmed: function (data, configUpdater) {\r\n var updater = configUpdater || function (config) { return config; };\r\n $rootScope.$broadcast('event:auth-loginConfirmed', data);\r\n httpBuffer.retryAll(updater);\r\n },\r\n\r\n /**\r\n * Call this function to indicate that authentication should not proceed.\r\n * All deferred requests will be abandoned or rejected (if reason is provided).\r\n * @param data an optional argument to pass on to $broadcast.\r\n * @param reason if provided, the requests are rejected; abandoned otherwise.\r\n */\r\n loginCancelled: function (data, reason) {\r\n httpBuffer.rejectAll(reason);\r\n $rootScope.$broadcast('event:auth-loginCancelled', data);\r\n }\r\n };\r\n }])\r\n\r\n /**\r\n * $http interceptor.\r\n * On 401 response (without 'ignoreAuthModule' option) stores the request\r\n * and broadcasts 'event:auth-loginRequired'.\r\n * On 403 response (without 'ignoreAuthModule' option) discards the request\r\n * and broadcasts 'event:auth-forbidden'.\r\n */\r\n .config(['$httpProvider', function ($httpProvider) {\r\n $httpProvider.interceptors.push(['$rootScope', '$q', 'httpBuffer', function ($rootScope, $q, httpBuffer) {\r\n return {\r\n responseError: function (rejection) {\r\n if (!rejection.config.ignoreAuthModule) {\r\n switch (rejection.status) {\r\n case 401:\r\n var deferred = $q.defer();\r\n httpBuffer.append(rejection.config, deferred);\r\n $rootScope.$broadcast('event:auth-loginRequired', rejection);\r\n break;\r\n //return deferred.promise;\r\n case 403:\r\n $rootScope.$broadcast('event:auth-loginRequired', rejection);\r\n $rootScope.$broadcast('event:auth-forbidden', rejection);\r\n break;\r\n }\r\n }\r\n // otherwise, default behaviour\r\n return $q.reject(rejection);\r\n }\r\n };\r\n }]);\r\n }]);\r\n\r\n /**\r\n * Private module, a utility, required internally by 'http-auth-interceptor'.\r\n */\r\n angular.module('http-auth-interceptor-buffer', [])\r\n\r\n angular.module('volga').factory('httpBuffer', ['$injector', function ($injector) {\r\n /** Holds all the requests, so they can be re-requested in future. */\r\n var buffer = [];\r\n\r\n /** Service initialized later because of circular dependency problem. */\r\n var $http;\r\n\r\n function retryHttpRequest(config, deferred) {\r\n function successCallback(response) {\r\n deferred.resolve(response);\r\n }\r\n function errorCallback(response) {\r\n deferred.reject(response);\r\n }\r\n $http = $http || $injector.get('$http');\r\n $http(config).then(successCallback, errorCallback);\r\n }\r\n\r\n return {\r\n /**\r\n * Appends HTTP request configuration object with deferred response attached to buffer.\r\n */\r\n append: function (config, deferred) {\r\n buffer.push({\r\n config: config,\r\n deferred: deferred\r\n });\r\n },\r\n\r\n /**\r\n * Abandon or reject (if reason provided) all the buffered requests.\r\n */\r\n rejectAll: function (reason) {\r\n if (reason) {\r\n for (var i = 0; i < buffer.length; ++i) {\r\n buffer[i].deferred.reject(reason);\r\n }\r\n }\r\n buffer = [];\r\n },\r\n\r\n /**\r\n * Retries all the buffered requests clears the buffer.\r\n */\r\n retryAll: function (updater) {\r\n for (var i = 0; i < buffer.length; ++i) {\r\n retryHttpRequest(updater(buffer[i].config), buffer[i].deferred);\r\n }\r\n buffer = [];\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n \"use strict\";\r\n angular.module(\"volga\").service('accountService', function ($q, httpProxy) {\r\n\r\n // public\r\n return {\r\n login: login,\r\n logout: logout,\r\n getProfile: getProfile,\r\n isAuthenticated: isAuthenticated\r\n };\r\n\r\n // private\r\n function login(user) {\r\n var query = \"/api/account/login\";\r\n return httpProxy.post(query, user).then(function () {\r\n setAuthenticated(true);\r\n });\r\n }\r\n\r\n function logout() {\r\n var query = \"/api/account/logout\";\r\n setAuthenticated(false);\r\n return httpProxy.post(query).then(function () {\r\n setAuthenticated(false);\r\n });\r\n }\r\n\r\n function getProfile() {\r\n var query = \"/api/account/profile\";\r\n return httpProxy.get(query);\r\n }\r\n\r\n function setAuthenticated(value) {\r\n localStorage.setItem(\"volga.auth\", value);\r\n }\r\n\r\n function getAuthenticated() {\r\n return localStorage.getItem(\"volga.auth\");\r\n }\r\n\r\n function isAuthenticated() {\r\n return getAuthenticated() ? $q.resolve() : $q.reject();\r\n }\r\n });\r\n})();","(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").service('notification', service);\r\n\r\n function service(FoundationApi) {\r\n\r\n // public\r\n return {\r\n success: success,\r\n error: error\r\n };\r\n\r\n // private\r\n function success(message) {\r\n FoundationApi.publish('main-notifications',\r\n {\r\n title: 'Success',\r\n content: message,\r\n color: \"success\",\r\n autoclose: \"2000\"\r\n });\r\n }\r\n\r\n function error(message) {\r\n FoundationApi.publish('main-notifications',\r\n {\r\n title: 'Error',\r\n content: message,\r\n color: \"alert\",\r\n autoclose: \"5000\"\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").service('placeService', service);\r\n\r\n function service($q, $log, httpProxy, notification, _) {\r\n // NOTE: we cache all places localy to reduce number of hevy requests to server\r\n var allPlaces = null;\r\n var allPlacesTypes = null;\r\n var tree = {};\r\n\r\n\r\n // public\r\n return {\r\n savePlace: savePlace,\r\n getPlace: getPlace,\r\n getAllPlaces: getAllPlaces,\r\n getAllPlacesTypes: getAllPlacesTypes,\r\n getPlaceChildren: getPlaceChildren,\r\n removePlace: removePlace,\r\n restorePlace: restorePlace,\r\n getTree: getTree,\r\n };\r\n\r\n // private\r\n function savePlace(place) {\r\n var query = \"/api/place/\";\r\n // WORKAROUND for tree component that adds children to place\r\n var dto = angular.copy(place);\r\n dto.nodes = null;\r\n return httpProxy.post(query, dto).then(updateLocalPlace,\r\n function (error) {\r\n var message = 'Не удается сохранить адрес. Причина: ' + error.message;\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getPlaceChildren(placeId) {\r\n var query = \"/api/place/\" + placeId + \"/children\";\r\n return httpProxy.get(query).then(\r\n function (data) {\r\n _.map(data, updateLocalPlace);\r\n\r\n return tree[placeId];\r\n },\r\n function (error) {\r\n var message = 'Не удается найти дочерние адреса с id родителя = \"' + placeId + '\". Причина: ' + error.message;\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getPlace(placeId) {\r\n var query = \"/api/place/\" + placeId;\r\n return httpProxy.get(query)\r\n .then(updateLocalPlace,\r\n function (error) {\r\n var message = 'Не удается найти адрес с id = \"' + placeId + '\". Причина: ' + error.message;\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getAllPlaces() {\r\n var query = \"/api/place\";\r\n\r\n // NOTE: we cache all places localy to reduce number of hevy requests to server\r\n if (allPlaces && allPlaces.length) {\r\n return $q.resolve(allPlaces);\r\n }\r\n\r\n return httpProxy.get(query, null, false)\r\n .then(updateAllLocalPlaces, function (error) {\r\n var message = 'Не удается получить список адресов. Причина: ' + error.message;\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function restorePlace(placeId) {\r\n var query = \"/api/place/\" + placeId + \"/restore\";\r\n return httpProxy.post(query).catch(function (error) {\r\n var message = 'Не удается восстановить адрес с id = \"' + placeId + '\". Причина: ' + error.message;\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function removePlace(placeId) {\r\n var query = \"/api/place/\" + placeId;\r\n return httpProxy.delete(query).catch(function (error) {\r\n var message = 'Не удается удалить адрес с id = \"' + placeId + '\". Причина: ' + error.message;\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getAllPlacesTypes() {\r\n var query = \"/api/place/types\";\r\n\r\n // NOTE: we cache all places localy to reduce number of hevy requests to server\r\n if (allPlacesTypes) {\r\n return $q.resolve(allPlacesTypes);\r\n }\r\n\r\n return httpProxy.get(query, null, false).then(function(data) {\r\n allPlacesTypes = data;\r\n return allPlacesTypes;\r\n },\r\n function (error) {\r\n var message = 'Не удается получить типы адресов. Причина: ' + error.message;\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function createFullTitle(place) {\r\n var hash = _.keyBy(allPlaces, \"id\");\r\n var ancestors = getAncestors(place, hash, []);\r\n if (ancestors && ancestors.length)\r\n return _.chain(ancestors)\r\n .map(\"title\")\r\n .reject(_.isNull)\r\n .value()\r\n .reverse()\r\n .join(\", \");\r\n\r\n return place.title;\r\n }\r\n\r\n function getAncestors(place, places, ancestors) {\r\n // if no such place or parent is a root\r\n ancestors.push(place);\r\n\r\n var parent = places[place.parentId];\r\n if (!parent || !place.parentId || place.parentId === \"null\")\r\n return ancestors;\r\n\r\n return getAncestors(parent, places, ancestors);\r\n }\r\n\r\n function updateLocalPlace(place) {\r\n if (!allPlaces) {\r\n $log.warn(\"Не удается обновить все адреса. Сперва убедитесь в том, что все адреса загружены.\");\r\n return place;\r\n }\r\n\r\n var localPlace = _.find(allPlaces, { id: place.id });\r\n\r\n if (!localPlace) {\r\n allPlaces.push(place);\r\n tree[place.id] = tree[place.id] || [];\r\n tree[place.parentId].push(place);\r\n\r\n localPlace = place;\r\n }\r\n\r\n if (!place.type) {\r\n place.type = _.find(allPlacesTypes, { value: place.placeType }).description;\r\n }\r\n\r\n place.fullTitle = createFullTitle(place);\r\n return angular.extend(localPlace, place);\r\n }\r\n\r\n function getTree() {\r\n return tree;\r\n }\r\n\r\n function updateAllLocalPlaces(places) {\r\n if (!places.length) notification.error(\"Адреса не найдены\");\r\n allPlaces = places;\r\n\r\n _.each(places, updateLocalPlace);\r\n\r\n tree = _.reduce(places,\r\n function(result, place) {\r\n result[place.id] = _.filter(places, { parentId: place.id });\r\n return result;\r\n }, {});\r\n\r\n tree[\"null\"] = _.filter(places, { parentId: null });\r\n return allPlaces;\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n angular.module(\"volga\").service('reportService', function ($q, httpProxy) {\r\n\r\n // public\r\n return {\r\n getAllType: getAllType\r\n };\r\n\r\n // private\r\n function getAllType() {\r\n var query = \"/api/report/\";\r\n return httpProxy.get(query).then(function (data) {\r\n return data;\r\n });\r\n }\r\n \r\n });\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").service('settingsService', service);\r\n\r\n function service($q, httpProxy, notification) {\r\n \r\n // public\r\n return {\r\n getSettings: getSettings,\r\n saveSettings: saveSettings\r\n };\r\n\r\n // private\r\n function getSettings() {\r\n var query = \"/api/settings/\";\r\n\r\n return httpProxy.get(query, null, false)\r\n .catch(function (error) {\r\n var message = 'Не удается получить настройки. Причина: ' + error.message;\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function saveSettings(settings) {\r\n var query = \"/api/settings/\";\r\n\r\n return httpProxy.post(query, settings, false)\r\n .catch(function (error) {\r\n var message = 'Не удается сохранить настройки. Причина: ' + error.message;\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('volga').service('userService', service);\r\n\r\n function service($q, $log, httpProxy, notification) {\r\n return {\r\n getUser: getUser,\r\n getUsers: getUsers,\r\n updateUser: updateUser,\r\n removeUser: removeUser,\r\n restoreUser: restoreUser,\r\n createUser: createUser,\r\n changePassword: changePassword,\r\n updateUserPlaces: updateUserPlaces,\r\n updateUserReportSettings, updateUserReportSettings\r\n };\r\n\r\n function removeUser(id) {\r\n var url = '/api/user/' + id;\r\n\r\n return httpProxy.delete(url)\r\n .catch(function (errors) {\r\n var message = 'Не удается удалить пользователя с id = ' + id + '. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function restoreUser(id) {\r\n var url = '/api/user/' + id + '/restore';\r\n\r\n return httpProxy.post(url)\r\n .catch(function (errors) {\r\n var message = 'Не удается восстановить пользователя с id = ' + id + '. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function createUser(user, password) {\r\n var url = '/api/user';\r\n\r\n return httpProxy.put(url, { data: user, password: password })\r\n .catch(function (errors) {\r\n var message = 'Не удается создать пользователя. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function updateUser(user) {\r\n var url = '/api/user';\r\n\r\n return httpProxy.post(url, user)\r\n .catch(function (errors) {\r\n var message = 'Не удается сохранить данные пользователя. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function changePassword(id, newPassword) {\r\n var url = '/api/user/password';\r\n\r\n return httpProxy.post(url, { id: id, newPassword: newPassword })\r\n .catch(function (errors) {\r\n var message = 'Не удается изменить пароль пользователя. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n\r\n function getUser(id) {\r\n var url = '/api/user/' + id;\r\n\r\n return httpProxy.get(url)\r\n .catch(function (errors) {\r\n var message = 'Не удается получить пользователя. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getUsers() {\r\n var url = '/api/user/';\r\n\r\n return httpProxy.get(url)\r\n .catch(function (errors) {\r\n var message = 'Не удается получить список пользователей. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function handleErrors(errors) {\r\n var result = errors.message ? errors.message + '\\n' : '';\r\n\r\n if (typeof errors.data === \"string\") {\r\n result += errors.data;\r\n } else if (typeof errors.data === \"object\") {\r\n for (var i = 0; i < errors.data.length; ++i) {\r\n result += errors.data[i].code + ': ' + errors.data[i].description + '\\n';\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function updateUserPlaces(id, placesIds) {\r\n var url = '/api/user/places';\r\n\r\n return httpProxy.post(url, { id: id, places: placesIds })\r\n .catch(function (errors) {\r\n var message = 'Не удается обновить объекты наблюдения. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function updateUserReportSettings(id, reportSettings) {\r\n var url = '/api/user/reportSettings';\r\n\r\n return httpProxy.post(url, { id: id, reportSettings: reportSettings })\r\n .catch(function (errors) {\r\n var message = 'Не удается обновить настройки отчетов. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n angular\r\n .module(\"volga.http-proxy\", [])\r\n .service(\"httpProxy\", httpProxy);\r\n\r\n function httpProxy($http, $q, $log) {\r\n\r\n // public functions\r\n return {\r\n delete: _delete,\r\n get: get,\r\n post: post,\r\n put: put\r\n };\r\n\r\n // private functions\r\n function _delete(url, params) {\r\n return $http[\"delete\"](url, params).then(defaultCallback, defaultErrback);\r\n }\r\n\r\n function get(url, params) {\r\n return $http.get(url, params).then(defaultCallback, defaultErrback);\r\n }\r\n\r\n function post(url, data) {\r\n return $http.post(url, data).then(defaultCallback, defaultErrback);\r\n }\r\n\r\n function put(url, data) {\r\n return $http.put(url, data).then(defaultCallback, defaultErrback);\r\n }\r\n\r\n function defaultCallback(response) {\r\n if (response.status !== 200) return defaultErrback(response);\r\n\r\n return response ? response.data : undefined;\r\n }\r\n\r\n function defaultErrback(response) {\r\n var error = onError(response);\r\n return $q.reject(error);\r\n }\r\n\r\n function onError(response) {\r\n $log.error(\"An error happened during processing the following request: %O\", response);\r\n var data, message;\r\n if (response.status <= 0) {\r\n message = \"No internet connection.\";\r\n } else {\r\n data = response.data;\r\n message = angular.isObject(data) ? data.errorMessage || data.message : \"Internal server error.\";\r\n }\r\n \r\n\r\n return {\r\n status: response.status,\r\n data: data,\r\n message: message\r\n };\r\n }\r\n }\r\n})();","/*global utils:true*/\r\n(function(window) {\r\n 'use strict';\r\n var utils = {};\r\n var pfx = [\"webkit\", \"moz\", \"MS\", \"o\", \"\"];\r\n window.volga = window.volga || {};\r\n window.volga.utils = utils;\r\n utils.isFile = function(obj) {\r\n return toString(obj) === '[object File]';\r\n };\r\n\r\n utils.addQueryParams = function(queryString, params) {\r\n if (!params || params.length === 0)\r\n return queryString;\r\n\r\n var query = \"\";\r\n for (var paramIndex in params) {\r\n\r\n if (angular.isArray(params[paramIndex])) {\r\n for (var valueIndex in params[paramIndex])\r\n query = query + \"&\" + paramIndex + \"=\" + params[paramIndex][valueIndex];\r\n } else {\r\n query = query + \"&\" + paramIndex + \"=\" + params[paramIndex];\r\n }\r\n }\r\n\r\n return queryString + \"?\" + query.replace(\"&\", \"\");\r\n };\r\n\r\n utils.onPrefixedEvent = function(element, eventName, callback) {\r\n for (var p = 0; p < pfx.length; p++) {\r\n if (!pfx[p])\r\n eventName = eventName.toLowerCase();\r\n element.addEventListener(pfx[p] + eventName, callback, false);\r\n }\r\n };\r\n\r\n utils.removePrefixedEvent = function(element, eventName, callback) {\r\n for (var p = 0; p < pfx.length; p++) {\r\n if (!pfx[p])\r\n eventName = eventName.toLowerCase();\r\n element.removeEventListener(pfx[p] + eventName, callback, false);\r\n }\r\n };\r\n\r\n utils.isUndefinedOrNull = function(val) {\r\n return angular.isUndefined(val) || val === null;\r\n };\r\n\r\n utils.comparePlaceTitles = function (a, b) {\r\n // compare place titles by priority part-values/parts-count\r\n try {\r\n var ap = String(a).split(' ').filter(Boolean);\n var bp = String(b).split(' ').filter(Boolean);\n var lmin = Math.min(ap.length, bp.length);\n for (var i = 0; i < lmin; ++i) {\r\n var c = utils.compareStringOrInt(ap[i], bp[i]);\n if (c < 0 || c > 0)\n return c;\r\n }\n return utils.compareInt(ap.length, bp.length);\r\n } catch (e) {\n return utils.compareString(a, b);\r\n }\n };\r\n\r\n utils.compareStringOrInt = function (a, b) {\r\n var an = parseInt(a);\n var bn = parseInt(b);\n if (Number.isNaN(an) || Number.isNaN(bn)) {\r\n return utils.compareString(a, b);\r\n } else {\r\n return utils.compareInt(an, bn);\r\n }\n };\r\n\r\n utils.compareInt = function (a, b) {\r\n return (a < b) ? -1 : (a > b) ? 1 : 0;\r\n };\r\n\r\n utils.compareString = function (a, b) {\r\n return a.localeCompare(b);\r\n };\r\n\r\n})(window);","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"DownloadsCtrl\", controller);\r\n\r\n function controller($state, notification, _) {\r\n var vm = this;\r\n\r\n // add controller functionality here if required\r\n };\r\n})();\r\n","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider.state('downloads', {\r\n\r\n url: '/downloads/',\r\n parent: 'page',\r\n templateUrl: 'app/pages/downloads/downloads.html',\r\n controller: 'DownloadsCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n // nothing to resolve\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('home',\r\n {\r\n url: '/',\r\n parent: 'page',\r\n templateUrl: 'app/pages/home/home.html',\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga')\r\n .controller('LoginCtrl',\r\n function ($scope, $location, accountService) {\r\n var vm = this;\r\n \r\n vm.user = {\r\n username: '',\r\n password: '',\r\n rememberMe: false\r\n };\r\n\r\n // public\r\n vm.login = login;\r\n\r\n\r\n // private\r\n function login() {\r\n var error= {\r\n '-1':\"Нет подключения к интернету\",\r\n '400': \"Неправильный email или пароль\"\r\n }\r\n return accountService.login(vm.user)\r\n .then(function(user) {\r\n //Success\r\n console.log(\"LOGIN $state.go(addresses);\");\r\n $location.url(\"/\");\r\n },\r\n function(errorData) {\r\n console.log(\"Err\");\r\n $scope.error = error[errorData.status];\r\n })\r\n .catch(function(data) {\r\n console.log(\"catch\");\r\n })\r\n .finally(function(data) {\r\n });\r\n };\r\n }\r\n );\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(_config);\r\n\r\n function _config($stateProvider) {\r\n\r\n $stateProvider\r\n\r\n .state('login', {\r\n url: '/login',\r\n templateUrl: 'app/pages/login/login.html',\r\n controller: 'LoginCtrl',\r\n controllerAs: \"ctrl\"\r\n })\r\n .state('loginByQuery', {\r\n url: '/loginByQuery?name&pass',\r\n template: \"Осуществляется вход в систему...\",\r\n controller: 'LoginByQueryCtrl'\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').run(run);\r\n\r\n function run($state, $rootScope, $log, accountService) {\r\n\r\n // redirect uset to login page for all unauthorize requests\r\n $rootScope.$on('event:auth-loginRequired',\r\n function() {\r\n\r\n $log.warn(\"Unathorize request. Going to login page\");\r\n\r\n $state.go(\"login\");\r\n });\r\n\r\n\r\n // for the initial page load ensure that user authorized\r\n // Refuse all state changes\r\n var deregisterFunction = $rootScope.$on(\r\n \"$stateChangeStart\",\r\n function(event, toState, toParams, fromState, fromParams) {\r\n deregisterFunction();\r\n if (toState.name.indexOf(\"login\") > -1) return;\r\n\r\n event.preventDefault();\r\n $log.debug(\"Navigation paused due to auth process.\");\r\n\r\n accountService.isAuthenticated()\r\n .then(function() {\r\n $log.debug(\"Navigation resumed from config process.\");\r\n $state.go(toState, toParams);\r\n })\r\n .catch(function() {\r\n $log.warn(\"Unathorize request. Going to login page\");\r\n $state.go(\"login\");\r\n });\r\n }\r\n );\r\n }\r\n})();\r\n\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('MonitorCtrl', controller);\r\n\r\n function controller() {\r\n var vm = this;\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider.state('monitor',\r\n {\r\n url: '/monitor',\r\n parent: 'page',\r\n templateUrl: 'app/pages/monitor/monitor.html',\r\n controller: 'MonitorCtrl',\r\n controllerAs: 'ctrl'\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').factory('monitorService', service);\r\n\r\n function service(httpProxy, $q, notification) {\r\n return {\r\n getStatistics: getStatistics,\r\n getLogs: getLogs\r\n };\r\n\r\n function getStatistics() {\r\n var url = '/api/uspd/stat';\r\n\r\n return httpProxy.get(url)\r\n .catch(function(errors) {\r\n var message = 'Не удается получить статистику по УСПД. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getLogs(settings) {\r\n var url = '/api/account/logs/' + settings.direction + '/' + settings.count + '/' + (settings.id || '');\r\n\r\n return httpProxy.get(url)\r\n .catch(function(errors) {\r\n var message = 'Не удается получить логи пользователей. Причина: ' + handleErrors(errors);\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n\r\n function handleErrors(errors) {\r\n var result = errors.message ? errors.message + '\\n' : '';\r\n\r\n if (typeof errors.data === \"string\") {\r\n result += errors.data;\r\n } else if (typeof errors.data === \"object\") {\r\n for (var i = 0; i < errors.data.length; ++i) {\r\n result += errors.data[i].code + ': ' + errors.data[i].description + '\\n';\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('page', {\r\n parent: 'root',\r\n abstract: true,\r\n url: \"^\",\r\n resolve: {\r\n },\r\n views: {\r\n \"\": {\r\n template: '
',\r\n },\r\n \"header\": {\r\n templateUrl: \"app/pages/page/header/header.html\",\r\n controller: \"HeaderCtrl\",\r\n controllerAs: 'ctrl'\r\n },\r\n\r\n \"footer\": {\r\n templateUrl: \"app/pages/page/footer/footer.html\",\r\n controller: \"FooterCtrl\",\r\n controllerAs: 'ctrl'\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('BasePlaceCtrl', controller);\r\n\r\n function controller(placeService) {\r\n var vm = this;\r\n\r\n vm.treeNodes = placeService.getTree();\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"PlaceCtrl\", controller);\r\n\r\n function controller(placeService, place) {\r\n var vm = this;\r\n\r\n vm.treeNodes = placeService.getTree();\r\n vm.place = place;\r\n };\r\n\r\n})();\r\n\r\n\r\n","(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider, _) {\r\n\r\n $stateProvider\r\n .state('baseplace',\r\n {\r\n url: '/place',\r\n parent: 'page',\r\n abstract: true,\r\n templateUrl: 'app/pages/place/place.html',\r\n controller: 'BasePlaceCtrl',\r\n controllerAs: 'ctrl',\r\n\r\n resolve: {\r\n placeTypes: function(placeService) {\r\n return placeService.getAllPlacesTypes();\r\n },\r\n deviceModels: function(deviceService) {\r\n return deviceService.getDeviceModels();\r\n },\r\n pinTypes: function(deviceService) {\r\n return deviceService.getDevicePinTypes();\r\n },\r\n allPlaces: function(placeService) {\r\n return placeService.getAllPlaces();\r\n }\r\n }\r\n })\r\n .state('place',\r\n {\r\n parent: 'baseplace',\r\n url: '/:placeId',\r\n template: \"
\",\r\n controller: 'PlaceCtrl',\r\n controllerAs: 'ctrl',\r\n params: {\r\n placeId: null,\r\n showDeleted: \"true\"\r\n },\r\n resolve: {\r\n redirectToRoot: function($q, $state, $stateParams, placeService, allPlaces) {\r\n\r\n\r\n // if place is not seleted, than select root place\r\n if (!$stateParams.placeId) {\r\n var root = _.find(allPlaces, { parentId: null });\r\n $stateParams.placeId = root.id;\r\n }\r\n },\r\n place: function(redirectToRoot, $state, $stateParams, placeService) {\r\n return placeService.getPlace($stateParams.placeId);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga').controller(\"SettingsCtrl\", controller);\r\n\r\n function controller($state, notification, settings, settingsService, _) {\r\n var vm = this;\r\n var serverSettings = [];\r\n var serverSettingsBackup = [];\r\n\r\n populateSettings(settings);\r\n\r\n vm.activeTab = 'general';\r\n\r\n // public \r\n vm.save = save;\r\n vm.countDiff = countDiff;\r\n\r\n // private\r\n function save() {\r\n \r\n settingsService.saveSettings(vm.diff).then(function (res) {\r\n notification.success('Настройки сохранены');\r\n $state.reload();\r\n }, function() {\r\n notification.error('Ошибка при сохранении настроек');\r\n $state.reload();\r\n });\r\n \r\n }\r\n\r\n function countDiff() {\r\n vm.diff = _.differenceWith(serverSettings, serverSettingsBackup, function (x, y) { return x.name == y.name && x.value == y.value });\r\n }\r\n\r\n function findByRules(settings, include, exclude) {\r\n var res = settings;\r\n if (include) res = _.filter(res, function (s) { return s.name && s.name.indexOf(include) >= 0 });\r\n if (exclude) res = _.filter(res, function (s) { return s.name && s.name.indexOf(exclude) < 0 });\r\n return res;\r\n }\r\n\r\n function populateSettings(settings) {\r\n // serverSettings = angular.copy(settings);\r\n // vm.noDataSettings = _.filter(settings, function (s) { return s.name && s.name.indexOf('emailreport.nodata') == 0 });\r\n // vm.oddDataSettings = _.filter(settings, function (s) { return s.name && s.name.indexOf('emailreport.odddata') == 0 });\r\n // vm.settings = _.difference(settings, vm.noDataSettings, vm.oddDataSettings);\r\n var filtered = angular.copy(settings);\r\n filtered = findByRules(filtered, null, 'emailreport.odd');\r\n filtered = findByRules(filtered, null, 'emailreport.no');\r\n\r\n serverSettings = angular.copy(filtered);\r\n serverSettingsBackup = angular.copy(filtered);\r\n\r\n vm.noDataSettings = [];\r\n vm.oddDataSettings = [];\r\n vm.settings = serverSettings;\r\n }\r\n };\r\n})();\r\n","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider.state('settings', {\r\n\r\n url: '/settings/',\r\n parent: 'page',\r\n templateUrl: 'app/pages/settings/settings.html',\r\n controller: 'SettingsCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n settings : function(settingsService) {\r\n return settingsService.getSettings();\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga')\r\n .constant('userConstants',\r\n {\r\n roles: [\r\n {\r\n name: \"admin\",\r\n title: \"Администратор\"\r\n },\r\n {\r\n name: \"roomer\",\r\n title: \"Roomer\"\r\n },\r\n {\r\n name: \"homer\",\r\n title: \"Домоуправляющая компания\"\r\n },\r\n {\r\n name: \"opertaor\",\r\n title: \"Оператор\"\r\n },\r\n {\r\n name: \"engineer\",\r\n title: \"Техник\"\r\n }\r\n ],\r\n limits: {\r\n userName: 200,\r\n password: 50,\r\n phoneNumber: 50,\r\n fullName: 150,\r\n address: 200,\r\n information: 500,\r\n clientBill: 50\r\n }\r\n });\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('UserCtrl', controller);\r\n\r\n function controller(users) {\r\n var vm = this;\r\n\r\n vm.users = users;\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider.state('user',\r\n {\r\n url: '/user',\r\n parent: 'page',\r\n templateUrl: 'app/pages/user/user.html',\r\n controller: 'UserCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n users: function (userService) {\r\n return userService.getUsers();\r\n },\r\n reports: function (reportService) {\r\n return reportService.getAllType();\r\n }\r\n }\r\n });\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n angular.module('volga')\r\n .controller('LoginByQueryCtrl',\r\n function ($scope, $location, accountService) {\r\n\r\n var search = $location.search();\r\n\r\n if (search && search.name && search.pass) {\r\n\r\n var user = {\r\n username: search.name,\r\n password: search.pass,\r\n rememberMe: false\r\n };\r\n\r\n $location.search({});\r\n\r\n return accountService.login(user)\r\n .then(function (data) {\r\n $location.url(\"/\");\r\n }, function (err) {\r\n $location.url(\"/login\");\r\n })\r\n .catch(function (data) {\r\n $location.url(\"/login\");\r\n });\r\n }\r\n }\r\n );\r\n})();\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('LogsCtrl', controller);\r\n\r\n function controller(monitorService, _, $filter) {\r\n var vm = this;\r\n\r\n vm.isWaiting = false;\r\n vm.defaultPageSize = 20;\r\n vm.logsGridOptions = {\r\n columnDefs: [\r\n { name: 'Время', field: 'updated', width: '145' },\r\n { name: 'Пользователь', field: 'user', width: '180' },\r\n { name: 'IP адрес', field: 'userIp', width: '135' },\r\n { name: 'Действие', field: 'action', width: '200' },\r\n { name: 'Детали', field: 'details' }\r\n ]\r\n };\r\n\r\n // public \r\n vm.nextPage = funcHelper(true);\r\n vm.prevPage = funcHelper(false);\r\n vm.resetInfo = funcHelper(true, true);\r\n\r\n vm.resetInfo();\r\n\r\n function getLogs(settings) {\r\n return monitorService.getLogs(settings)\r\n .then(function(response) {\r\n vm.logs = response;\r\n\r\n vm.logsGridOptions.data = vm.logs.logs = _.map(vm.logs.logs,\r\n function(item) {\r\n item.user = _.toLower(item.user);\r\n item.updated = $filter('date')(item.updated, 'dd/MM/yy HH:mm:ss');\r\n item.action += item.entityType ? ' ' + item.entityType : '';\r\n\r\n for (var key in item) {\r\n item[key] = item[key] || '-';\r\n }\r\n\r\n return item;\r\n });\r\n });\r\n }\r\n\r\n function funcHelper(direction, reset) {\r\n return function() {\r\n vm.isWaiting = true;\r\n\r\n getLogs({\r\n id: !reset ? direction ? _.last(vm.logs.logs).id : _.first(vm.logs.logs).id : undefined,\r\n direction: direction,\r\n count: vm.defaultPageSize\r\n })\r\n .then(function() {\r\n if (vm.logs.isLastPage) {\r\n vm.lastForNext = direction;\r\n vm.lastForPrev = !direction;\r\n } else {\r\n vm.lastForPrev = vm.lastForNext = false;\r\n }\r\n\r\n if (reset) {\r\n vm.lastForPrev = true;\r\n }\r\n\r\n vm.isWaiting = false;\r\n });\r\n };\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider.state('monitor.logs',\r\n {\r\n url: '/logs',\r\n templateUrl: 'app/pages/monitor/logs/monitor.logs.html',\r\n controller: 'LogsCtrl',\r\n controllerAs: 'ctrl'\r\n });\r\n };\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('UspdCtrl', controller);\r\n\r\n function controller(monitorService, _, $filter) {\r\n var vm = this;\r\n\r\n vm.isWaiting = false;\r\n vm.uspdGridOptions = {\r\n expandableRowTemplate: '
',\r\n columnDefs: [\r\n {\r\n name: 'УСПД',\r\n field: 'uspdId',\r\n width: 250\r\n },\r\n {\r\n name: 'Адрес',\r\n field: 'fullTitle'\r\n },\r\n {\r\n name: 'Устройств',\r\n field: 'totalChildrenCount',\r\n width: 110\r\n },\r\n {\r\n name: 'Время последнего ответа',\r\n field: 'lastResponse.time',\r\n width: 230,\r\n cellClass: function(grid, row) {\r\n return row.entity.lastResponse.status ? 'monitor-ok' : 'monitor-error';\r\n }\r\n }\r\n ]\r\n };\r\n\r\n var uspdSubGridColumnDefs = [\r\n { name: 'Начало интервала', field: 'startTime' },\r\n { name: 'Время последнего ответа', field: 'realTime' },\r\n { name: 'Устройств ответило', field: 'aliveChildrenCount' }\r\n ];\r\n\r\n\r\n vm.getStatistics = waitFor(getStatistics);\r\n\r\n vm.getStatistics();\r\n\r\n\r\n // private\r\n function checkStatus(time) {\r\n var maxDiff = 1000 * 60 * 60 * 12;\r\n\r\n return new Date() - time <= maxDiff;\r\n }\r\n\r\n\r\n function getStatistics() {\r\n return monitorService.getStatistics()\r\n .then(function(response) {\r\n var nowTimestamp = Date.now();\r\n\r\n var startTime = nowTimestamp - nowTimestamp % response.interval + response.interval;\r\n var stub = [];\r\n\r\n for (var i = 0; i < response.dbEntitiesMaxNumber; ++i) {\r\n stub.push({\r\n startTime: startTime -= response.interval\r\n });\r\n }\r\n\r\n (vm.uspdGridOptions.data = vm.uspds = response.uspds).forEach(function(uspd) {\r\n uspd.data = _(uspd.data)\r\n .unionBy(angular.copy(stub), 'startTime')\r\n .sortBy(['startTime'])\r\n .reverse()\r\n .value();\r\n\r\n var tmp = _.find(uspd.data, 'realTime');\r\n\r\n uspd.lastResponse = {};\r\n uspd.lastResponse.status = tmp ? checkStatus(tmp.realTime) : false;\r\n uspd.lastResponse\r\n .time = $filter('date')(tmp ? tmp.realTime : 'Нет данных', 'dd/MM/yy HH:mm:ss');\r\n\r\n uspd.data.forEach(function(item) {\r\n item.startTime = $filter('date')(item.startTime, 'dd/MM/yy HH:mm:ss');\r\n item.realTime = item.realTime\r\n ? $filter('date')(item.realTime, 'dd/MM/yy HH:mm:ss')\r\n : \"Нет данных\";\r\n item.aliveChildrenCount = item.aliveChildrenCount || 0;\r\n });\r\n\r\n uspd.uspdSubGridOptions = {\r\n columnDefs: uspdSubGridColumnDefs,\r\n data: uspd.data\r\n }\r\n });\r\n });\r\n }\r\n\r\n\r\n function waitFor(func) {\r\n return function() {\r\n vm.isWaiting = true;\r\n\r\n func()\r\n .finally(function() {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider.state('monitor.uspd',\r\n {\r\n url: '/uspd',\r\n templateUrl: 'app/pages/monitor/uspd/monitor.uspd.html',\r\n controller: 'UspdCtrl',\r\n controllerAs: 'ctrl'\r\n });\r\n };\r\n})();","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"FooterCtrl\", function ($scope, $state) {\r\n \r\n });\r\n})();\r\n\r\n\r\n","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"HeaderCtrl\", controller);\r\n\r\n function controller($state, accountService, notification) {\r\n var vm = this;\r\n\r\n // public\r\n vm.logout = logout;\r\n vm.islocal = islocal;\r\n\r\n // private\r\n function islocal() {\r\n return (location.hostname === \"localhost\" || location.hostname === \"127.0.0.1\");\r\n }\r\n\r\n function logout() {\r\n\r\n return accountService.logout()\r\n .then(function() {\r\n $state.go(\"login\");\r\n }, function (err) {\r\n console.log(err);\r\n notification.error(err.message);\r\n $state.go(\"login\");\r\n });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"AddressCtrl\", controller);\r\n\r\n function controller($state, $scope, $log, placeService, place, addresses, uiGridConstants, placeTypes, _) {\r\n var vm = this;\r\n var gridApi;\r\n var generalCols = ['type', 'title'];\r\n vm.params = $state.params;\r\n vm.place = place;\r\n vm.addresses = addresses;\r\n updateShowDeletedTitle(this);\r\n\r\n $scope.translate = function (row) {\r\n var type = row && row.entity && row.entity.type;\r\n if (!type) return \"\";\r\n var placeType = _.find(placeTypes, { value: row.entity.type });\r\n return placeType ? placeType.description : \"\";\r\n };\r\n\r\n vm.selectedRow = null;\r\n vm.isBuilding = (place.type == 'building');\r\n\r\n vm.gridOptions = {\r\n onRegisterApi: function(api) {\r\n gridApi = api;\r\n gridApi.selection.on.rowSelectionChanged($scope,\r\n function(row) {\r\n vm.selectedRow = row.isSelected ? row.entity : null;\r\n });\r\n },\r\n enableGridMenu: true,\r\n enableSorting: true,\r\n enableRowSelection: true,\r\n enableRowHeaderSelection: false,\r\n multiSelect: false,\r\n columnDefs: [ \r\n { name: 'Тип', width: '230', field: 'type', cellTemplate: '
{{grid.appScope.translate(row)}}
' },\r\n { name: 'Наименование', field: 'title'/*,\r\n sortingAlgorithm: volga.utils.comparePlaceTitles,\r\n sort: {\r\n direction: uiGridConstants.ASC,\r\n priority: 0,\r\n }*/\r\n },\r\n { name: 'Активен', field: 'enabled', type: 'boolean', cellTemplate: '' },\r\n { name: 'Удален', field: 'deleted', visible: true, type: 'boolean', cellTemplate: '' },\r\n // { name: 'Номер', field: 'number', visible: true },\r\n { name: 'Порядковый номер', field: 'order', visible: true, },\r\n ],\r\n gridMenuCustomItems: [\r\n {\r\n title: vm.params.showDeletedTitle,\r\n action: function ($event) {\r\n if (vm.params.showDeleted == \"true\")\r\n vm.params.showDeleted = \"false\";\r\n else\r\n vm.params.showDeleted = \"true\";\r\n\r\n vm.updateShowDeletedTitle(vm, this.grid);\r\n\r\n this.grid.options.data = vm.getAddreses(vm);\r\n this.grid.refresh();\r\n },\r\n order: 207,\r\n isShowDeleted: true\r\n },\r\n {\r\n title: 'Все параметры',\r\n action: function($event) {\r\n _.forEach(this.grid.columns,\r\n function(col) {\r\n col.showColumn();\r\n });\r\n\r\n this.grid.refresh();\r\n },\r\n order: 208\r\n }, {\r\n title: 'Основные параметры',\r\n action: function($event) {\r\n _.forEach(this.grid.columns,\r\n function(col) {\r\n generalCols.indexOf(col.field) > -1 ? col.showColumn() : col.hideColumn();\r\n });\r\n\r\n this.grid.refresh();\r\n },\r\n order: 209\r\n },\r\n {\r\n title: 'Дополнительные параметры',\r\n action: function($event) {\r\n _.forEach(this.grid.columns,\r\n function(col) {\r\n generalCols.indexOf(col.field) > -1 ? col.hideColumn() : col.showColumn();\r\n });\r\n\r\n this.grid.refresh();\r\n },\r\n order: 210\r\n }\r\n ],\r\n rowTemplate: '
',\r\n data: getAddreses(this)\r\n };\r\n\r\n vm.edit = edit;\r\n vm.create = create;\r\n vm.remove = remove;\r\n vm.utils = utils;\r\n vm.updateShowDeletedTitle = updateShowDeletedTitle;\r\n vm.getAddreses = getAddreses;\r\n\r\n // private\r\n function updateShowDeletedTitle(vm, grid) {\r\n var res = (vm.params.showDeleted == \"true\") ? 'Скрыть удаленные' : 'Показать удаленные';\r\n vm.params.showDeletedTitle = res;\r\n if (grid) {\r\n var menuItem = grid.options.gridMenuCustomItems.find(function (el) { return el.isShowDeleted });\r\n if (menuItem)\r\n menuItem.title = res;\r\n }\r\n }\r\n function getAddreses(vm) {\r\n var res = addresses;\r\n res = _.orderBy(res, ['orderKey', 'order', 'number', 'id']);\r\n if (vm.params.showDeleted == \"false\")\r\n _.remove(res, { deleted: true });\r\n return res;\r\n }\r\n\r\n function remove() {\r\n placeService.removePlace(vm.selectedRow.id).then(function () {\r\n $state.reload();\r\n });\r\n }\r\n\r\n function edit() {\r\n var id = vm.selectedRow.id;\r\n // NOTE: reset selection to prevent situation when user returns back to this state (\"cancel\" click from edit address page)\r\n // without reload and got selected previously row\r\n vm.selectedRow = null;\r\n $state.go(\".edit\", { addressId: id });\r\n }\r\n\r\n function utils() {\r\n var id = vm.place.id;\r\n // NOTE: reset selection to prevent situation when user returns back to this state (\"cancel\" click from edit address page)\r\n // without reload and got selected previously row\r\n vm.selectedRow = null;\r\n $state.go(\".utils\");\r\n }\r\n\r\n function create() {\r\n $state.go(\".create\");\r\n }\r\n }\r\n\r\n})();\r\n","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider, _) {\r\n\r\n $stateProvider\r\n .state('place.address',\r\n {\r\n url: '/address',\r\n templateUrl: 'app/pages/place/address/address.html',\r\n controller: 'AddressCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n addresses: function (place, placeService) {\r\n return placeService.getPlaceChildren(place.id);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga').controller(\"DeviceCtrl\", controller);\r\n\r\n function controller($scope, $state, $log, deviceService, devices, place, selfDevices, childDevices, $filter, $timeout, _) {\r\n var vm = this;\r\n var gridApi;\r\n var generalCols = [\r\n 'title', 'modelDescription', 'serialNumberMC', 'placeTitle', 'route.port', 'route.address', 'parentDeviceId', 'collectingData'\r\n ];\r\n vm.devices = devices;\r\n vm.selectedRow = false;\r\n vm.place = place;\r\n vm.selfDevices = selfDevices;\r\n vm.childDevices = childDevices;\r\n\r\n vm.gridOptions = {\r\n onRegisterApi: function(api) {\r\n gridApi = api;\r\n gridApi.selection.on.rowSelectionChanged($scope,\r\n function(row) {\r\n vm.selectedRow = row.isSelected ? row.entity : null;\r\n });\r\n\r\n // Keep a reference to the gridApi.\r\n vm.gridApi = gridApi;\r\n\r\n // Setup events so we're notified when grid state changes.\r\n vm.gridApi.colResizable.on.columnSizeChanged($scope, saveState);\r\n vm.gridApi.core.on.columnVisibilityChanged($scope, saveState);\r\n vm.gridApi.core.on.filterChanged($scope, saveState);\r\n vm.gridApi.core.on.sortChanged($scope, saveState);\r\n\r\n // Restore previously saved state.\r\n restoreState();\r\n },\r\n enableFiltering: true,\r\n enableGridMenu: true,\r\n enableSorting: true,\r\n enableRowSelection: true,\r\n enableRowHeaderSelection: false,\r\n multiSelect: false,\r\n columnDefs: [\r\n { name: 'Помещение', width: '160', field: 'placeTitle' },\r\n { name: 'Модель', field: 'modelDescription' },\r\n { name: 'Наименование', field: 'title' },\r\n { name: 'COM', width: '70', field: 'route.port', headerCellClass: \"cellUppercase\" },\r\n { name: 'Скорость', width: '100', visible: false, field: 'route.bitRate' },\r\n { name: 'Адрес', width: '100', field: 'route.address' },\r\n { name: 'Канал', width: '100', visible: false, field: 'route.channel' },\r\n { name: 'Серийный №', width: '150', field: 'serialNumberMC' },\r\n { name: 'УСПД', field: 'parentDeviceId', headerCellClass: \"cellUppercase\" },\r\n { name: 'Дополнительно', width: '160', visible: false, field: 'systemInformation' },\r\n { name: 'Сбор\\r\\nданных', type: 'boolean', visible: true, field: 'collectingData', cellTemplate: '' },\r\n ],\r\n gridMenuCustomItems: [\r\n {\r\n title: 'Все параметры',\r\n action: function($event) {\r\n _.forEach(this.grid.columns,\r\n function(col) {\r\n col.showColumn();\r\n });\r\n\r\n this.grid.refresh();\r\n },\r\n order: 208\r\n }, {\r\n title: 'Основные параметры',\r\n action: function($event) {\r\n _.forEach(this.grid.columns,\r\n function(col) {\r\n generalCols.indexOf(col.field) > -1 ? col.showColumn() : col.hideColumn();\r\n });\r\n\r\n this.grid.refresh();\r\n },\r\n order: 209\r\n },\r\n {\r\n title: 'Дополнительные параметры',\r\n action: function($event) {\r\n _.forEach(this.grid.columns,\r\n function(col) {\r\n generalCols.indexOf(col.field) > -1 ? col.hideColumn() : col.showColumn();\r\n });\r\n\r\n this.grid.refresh();\r\n },\r\n order: 210\r\n }\r\n ],\r\n rowTemplate:\r\n '
',\r\n data: vm.selfDevices\r\n };\r\n\r\n vm.edit = edit;\r\n vm.create = create;\r\n vm.showData = showData;\r\n vm.remove = remove;\r\n vm.selfDevice = selfDevice;\r\n vm.allDevice = allDevice;\r\n vm.childDevice = childDevice;\r\n vm.currentDevices = selfDevice;\r\n \r\n // place devices filter settings\r\n vm.pdfKey = 'place.devices.filter';\r\n vm.pdfValues = ['self', 'children', 'all'];\r\n vm.pdfValue = vm.pdfValues[0];\r\n if (localStorage[vm.pdfKey] && vm.pdfValues.indexOf(localStorage[vm.pdfKey]) > -1)\r\n vm.pdfValue = localStorage[vm.pdfKey];\r\n\r\n // apply filter that corresponds to stored in pdfValue\r\n if (vm.pdfValue == 'all')\r\n allDevice();\r\n else if (vm.pdfValue == 'children')\r\n childDevice();\r\n else if (vm.pdfValue == 'self')\r\n selfDevice();\r\n\r\n // private\r\n function saveState() {\r\n var state = vm.gridApi.saveState.save();\r\n if (state) {\r\n localStorage.setItem('adm-dev-grid-state-1', JSON.stringify(state));\r\n }\r\n }\r\n\r\n function restoreState() {\r\n $timeout(function () {\r\n var state = localStorage.getItem('adm-dev-grid-state-1');\r\n if (state) {\r\n vm.gridApi.saveState.restore($scope, JSON.parse(state));\r\n }\r\n });\r\n }\r\n function allDevice() {\r\n localStorage[vm.pdfKey] = 'all';\r\n vm.gridOptions.data = filterDevices(vm.devices);\r\n vm.currentDevices = allDevice;\r\n }\r\n\r\n function selfDevice() {\r\n localStorage[vm.pdfKey] = 'self';\r\n vm.gridOptions.data = filterDevices(vm.selfDevices);\r\n vm.currentDevices = selfDevice;\r\n }\r\n\r\n function childDevice() {\r\n localStorage[vm.pdfKey] = 'children';\r\n vm.gridOptions.data = filterDevices(vm.childDevices);\r\n vm.currentDevices = childDevice;\r\n }\r\n\r\n function filterDevices(data) {\r\n var preparedDeviceFilter = _.chain(vm.deviceFilter).trim().toLower().value();\r\n\r\n return $filter('filter')(data,\r\n function(item) {\r\n var result = false;\r\n\r\n _.forOwn(item,\r\n function(value) {\r\n result = result || _.chain(value).trim().toLower().includes(preparedDeviceFilter).value();\r\n });\r\n\r\n return result;\r\n });\r\n }\r\n\r\n function showData() {\r\n var selected = vm.selectedRow;\r\n $state.go(\"place.device.data\", { deviceId: selected.id });\r\n }\r\n\r\n function remove() {\r\n deviceService.removeDevice(vm.selectedRow.id)\r\n .then(function() {\r\n $state.reload();\r\n });\r\n }\r\n\r\n function edit() {\r\n var id = vm.selectedRow.id;\r\n // NOTE: reset selection to prevent situation when user returns back to this state (\"cancel\" click from edit device page)\r\n // without reload and got selected previously row\r\n vm.selectedRow = null;\r\n $state.go(\".edit\", { deviceId: id });\r\n }\r\n\r\n function create() {\r\n $state.go(\".create\");\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(_config);\r\n\r\n function _config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.device',\r\n {\r\n url: '/device',\r\n templateUrl: 'app/pages/place/device/device.html',\r\n controller: 'DeviceCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n devices: function (place, deviceService, allPlaces) {\r\n return deviceService.getDeviceWhithChildByPlace(place.id).then(function (dvcs) {\r\n\r\n \r\n _.forEach(dvcs, function (d) {\r\n var place = _.find(allPlaces, { id: d.placeId });\r\n d.placeTitle = place.title;\r\n });\r\n var selfDevices = _.filter(dvcs, { placeId: place.id });\r\n var childDevices = _.filter(dvcs, function (d) { return d.placeId !== place.id; });\r\n\r\n\r\n return selfDevices.concat(childDevices);\r\n });\r\n },\r\n\r\n selfDevices: function (place, devices) {\r\n return _.filter(devices, { placeId: place.id });\r\n },\r\n childDevices: function (place, devices) {\r\n return _.filter(devices, function (d) { return d.placeId !== place.id; });\r\n },\r\n routers: function (place, deviceService) {\r\n return deviceService.getRouterForPlace(place.id);\r\n },\r\n }\r\n });\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n angular.module(\"volga\").service('deviceService', deviceService);\r\n\r\n function deviceService($q, httpProxy, notification) {\r\n \r\n var service = {\r\n getRouterForPlace: getRouterForPlace,\r\n getDeviceByPlace: getDeviceByPlace,\r\n getDevice: getDevice,\r\n saveDevice: saveDevice,\r\n removeDevice: removeDevice,\r\n restoreDevice: restoreDevice,\r\n getDeviceModels: getDeviceModels,\r\n getDevicePinTypes: getDevicePinTypes,\r\n getDeviceData: getDeviceData,\r\n moveDevice: moveDevice,\r\n getDeviceWhithChildByPlace: getDeviceWhithChildByPlace\r\n };\r\n\r\n return service;\r\n\r\n function moveDevice(deviceId, placeId) {\r\n var query = \"/api/device/\" + deviceId + \"/move/\" + placeId;\r\n\r\n return httpProxy.post(query);\r\n }\r\n\r\n function getDeviceData(deviceId) {\r\n var query = \"/api/uspd/devicedata/\" + deviceId;\r\n\r\n return httpProxy.get(query);\r\n }\r\n\r\n function getDeviceByPlace(placeId) {\r\n var query = \"/api/device/place/\" + placeId;\r\n //\"/api/device/place/{placeId}/descendants\"\r\n return httpProxy.get(query).catch(function () {\r\n var message = 'Не удается получить список приборов.';\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n\r\n function getDeviceWhithChildByPlace(placeId) {\r\n var query = \"/api/device/place/\" + placeId + \"/descendants\";\r\n \r\n return httpProxy.get(query).catch(function () {\r\n var message = 'Не удается получить список приборов.';\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n\r\n\r\n function getRouterForPlace(placeId) {\r\n var query = \"/api/device/place/\" + placeId + \"/ancestors\";\r\n\r\n return httpProxy.get(query).catch(function () {\r\n var message = 'Не удается получить список приборов.';\r\n notification.error(message);\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getDevice(deviceId) {\r\n var query = \"/api/device/\" + deviceId;\r\n return httpProxy.get(query).then(updateLocalDevice, function () {\r\n var message = 'Не удается найти прибор с id = \"' + deviceId + '\".';\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function saveDevice(device) {\r\n var query = \"/api/device/\";\r\n return httpProxy.post(query, device).then(updateLocalDevice,\r\n function (error) {\r\n var message = 'Не удается сохранить прибор. Причина: ' + error.message;\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function removeDevice(deviceId) {\r\n var query = \"/api/device/\" + deviceId;\r\n return httpProxy.delete(query).then(updateLocalDevice, function () {\r\n var message = 'Не удается удалить прибор с id = \"' + deviceId + '\".';\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n \r\n function restoreDevice(deviceId) {\r\n var query = \"/api/device/\" + deviceId + \"/restore\";\r\n return httpProxy.post(query).then(updateLocalDevice, function () {\r\n var message = 'Не удается восстановить прибор с id = \"' + deviceId + '\".';\r\n notification.error(message);\r\n\r\n return $q.reject(message);\r\n });\r\n }\r\n\r\n function getDeviceModels() {\r\n var query = \"/api/device/models/\";\r\n return httpProxy.get(query);\r\n }\r\n\r\n function getDevicePinTypes() {\r\n var query = \"/api/device/pinTypes/\";\r\n return httpProxy.get(query);\r\n }\r\n\r\n function updateLocalDevice(device) {\r\n return device;\r\n }\r\n };\r\n})();","(function() {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\")\r\n .component(\"volgaPlaceTree\",\r\n {\r\n bindings: {\r\n places: '='\r\n },\r\n\r\n templateUrl: \"app/pages/place/tree/tree.component.html\",\r\n controller: \"VolgaPlaceTreeCtrl\",\r\n controllerAs: 'ctrl'\r\n\r\n });\r\n})();\r\n\r\n\r\n(function(app) {\r\n 'use strict';\r\n app.controller(\"VolgaPlaceTreeCtrl\",\r\n function($state, $anchorScroll, $timeout, _) {\r\n var vm = this;\r\n vm.model = {\r\n tree: []\r\n };\r\n vm.state = $state;\r\n vm.isNodeVisible = isNodeVisible;\r\n vm.onNodeClick = onNodeClick;\r\n\r\n // open selected node in the tree\r\n\r\n var nodesToExpand = [];\r\n\r\n var parentId = getParent($state.params.placeId);\r\n do {\r\n nodesToExpand.push(parentId);\r\n parentId = getParent(parentId);\r\n } while (parentId != null);\r\n\r\n var root = vm.places[\"null\"][0];\r\n addChildren(root);\r\n vm.model.tree = [root];\r\n\r\n\r\n $timeout(function() {\r\n $anchorScroll('nodeId' + $state.params.placeId);\r\n },\r\n 0);\r\n\r\n function getParent(placeId) {\r\n for (var id in vm.places) {\r\n var place = vm.places[id].filter(function(r) { return r.id == placeId });\r\n if (place.length) {\r\n return id;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n function addChildren(node) {\r\n\r\n node = map(node);\r\n\r\n if (!vm.places[node.id]) return;\r\n\r\n var children = vm.places[node.id];\r\n for (var i = 0; i < children.length; i++) {\r\n var childNode = children[i];\r\n\r\n addChildren(childNode);\r\n }\r\n\r\n children = _.orderBy(children, ['orderKey', 'order', 'number', 'id']);\r\n /* children.sort(function (a, b) {\r\n return volga.utils.comparePlaceTitles(a.title, b.title);\r\n }); */\r\n\r\n node.nodes = children;\r\n }\r\n\r\n function map(node) {\r\n if (nodesToExpand.indexOf(node.id) >= 0)\r\n node.selected = node.opened = true;\r\n\r\n return node;\r\n }\r\n\r\n function isNodeVisible(node) {\r\n return node && !node.deleted;\r\n }\r\n\r\n function getAncestorsPlaceIds(node) {\r\n var ids = [];\r\n if (node) {\r\n if (node.opened)\r\n ids.push(node.id);\r\n var parentId = getParent(node.id);\r\n while (!volga.utils.isUndefinedOrNull(parentId) && parentId != \"null\") {\r\n ids.push(parentId);\r\n parentId = getParent(parentId);\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n function onNodeClick(node) {\r\n node.selected = !node.selected;\r\n node.opened = !node.opened;\r\n var ids = getAncestorsPlaceIds(node);\r\n collapseOtherNodes(ids);\r\n }\r\n\r\n function collapseOtherNodes(ids) {\r\n if (ids && vm && vm.places) {\r\n for (var id in vm.places) {\r\n var places = vm.places[id];\r\n if (places) {\r\n for (var pindex in places) {\r\n var place = places[pindex];\r\n if (place && place.id) {\r\n place.selected = place.opened = _.includes(ids, place.id);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n})(angular.module(\"volga\"));","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('UserEditCtrl', controller);\r\n\r\n function controller($state, user, userService, userConstants, notification, reports) {\r\n var vm = this;\r\n\r\n var states = {\r\n user: 'user',\r\n edit: 'edit'\r\n };\r\n\r\n vm.isWaiting = false;\r\n vm.user = user;\r\n vm.roles = userConstants.roles;\r\n vm.maxFor = userConstants.limits;\r\n vm.reports = reports;\r\n\r\n // public\r\n vm.changePassword = waitFor(changePassword);\r\n vm.save = waitFor(save);\r\n vm.update = waitFor(update);\r\n vm.create = waitFor(create);\r\n vm.remove = waitFor(remove);\r\n vm.restore = waitFor(restore);\r\n\r\n // private\r\n function changePassword() {\r\n return userService.changePassword(vm.user.id, vm.password)\r\n .then(function() {\r\n notification.success('Пароль изменен');\r\n close(true, states.edit);\r\n });\r\n }\r\n\r\n function save() {\r\n return vm.user.id ? update() : create();\r\n }\r\n\r\n function update() {\r\n return userService.updateUser(vm.user)\r\n .then(function() {\r\n notification.success('Изменения сохранены');\r\n $state.reload();\r\n });\r\n };\r\n\r\n function create() {\r\n return userService.createUser(vm.user, vm.password)\r\n .then(function (response) {\r\n notification.success('Пользователь создан');\r\n\r\n close(true, \"user.edit\", { id: response.id });\r\n });\r\n }\r\n\r\n function remove() {\r\n return userService.removeUser(vm.user.id)\r\n .then(function() {\r\n notification.success('Пользователь удален');\r\n close(true, states.user);\r\n });\r\n };\r\n\r\n function restore() {\r\n return userService.restoreUser(vm.user.id)\r\n .then(function () {\r\n notification.success('Пользователь восстановлен');\r\n close(true, states.user);\r\n });\r\n };\r\n\r\n function close(reload, state, params) {\r\n $state.go(state, params || {}, { reload: reload });\r\n }\r\n\r\n function waitFor(func) {\r\n return function() {\r\n vm.isWaiting = true;\r\n\r\n func()\r\n .finally(function() {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider\r\n .state('user.create',\r\n {\r\n url: '/create',\r\n templateUrl: 'app/pages/user/edit/user.edit.html',\r\n controller: 'UserEditCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n user: function() {\r\n return {};\r\n }\r\n }\r\n })\r\n .state('user.edit',\r\n {\r\n url: '/{id}',\r\n templateUrl: 'app/pages/user/edit/user.edit.html',\r\n controller: 'UserEditCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n user: function($stateParams, userService) {\r\n return userService.getUser($stateParams.id);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').controller('UserPlacesCtrl', controller);\r\n\r\n function controller($state, userService, notification, user, treeNodes, allPlaces, _) {\r\n var vm = this;\r\n \r\n vm.isWaiting = false;\r\n vm.treeNodes = treeNodes;\r\n vm.user = user;\r\n vm.selectedItems = _.map(vm.user.places, function (p) { return _.find(allPlaces, { id: p }) });\r\n\r\n // public\r\n vm.save = waitFor(save);\r\n vm.countSelected = countSelected;\r\n\r\n // private\r\n function save() {\r\n var ids = _.map(vm.selectedItems, \"id\");\r\n return userService.updateUserPlaces(vm.user.id, ids).then(function() {\r\n notification.success('Объекты наблюдения для пользователя сохранены');\r\n $state.go(\"user.edit\", { id: vm.user.id });\r\n });\r\n }\r\n\r\n function countSelected() {\r\n vm.selectionError = \"\";\r\n if (vm.user.roles.indexOf('roomer') > -1 && (vm.selectedItems.length > 1 || (vm.selectedItems[0] && vm.selectedItems[0].type != 'room'))) {\r\n vm.selectionError = \"Пользователь с ролью 'roomer' может иметь только один объект наблюдения с типом 'Помещение/квартира'.\";\r\n }\r\n }\r\n\r\n function waitFor(func) {\r\n return function () {\r\n vm.isWaiting = true;\r\n\r\n func()\r\n .finally(function () {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider.state('user.places',\r\n {\r\n url: '/{id}/places',\r\n templateUrl: 'app/pages/user/places/user.places.html',\r\n controller: 'UserPlacesCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n user: function($stateParams, userService) {\r\n return userService.getUser($stateParams.id);\r\n },\r\n allPlaces: function(placeService) {\r\n return placeService.getAllPlaces();\r\n },\r\n treeNodes: function(allPlaces, placeService) {\r\n var tree = placeService.getTree();\r\n return angular.copy(tree);\r\n\r\n }\r\n }\r\n });\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n // controller.$inject = [\"$state\", \"user\", \"userService\", \"userConstants\", \"notification\", \"reports\", \"settings\", \"settingsService\", \"_\"];\r\n angular.module('volga').controller('UserReportsCtrl', controller);\r\n\r\n function controller($state, user, userService, userConstants, notification, reports, settings, settingsService, _) {\r\n var vm = this;\r\n var userSettings = [];\r\n var userSettingsBackup = [];\r\n\r\n vm.isWaiting = false;\r\n vm.user = user;\r\n\r\n syncSettings();\r\n populateSettings();\r\n\r\n // public\r\n vm.save = waitFor(save);\r\n vm.countDiff = countDiff;\r\n\r\n // private\r\n function save() {\r\n var userSettingsSave = _.filter(userSettings, function (s) { return s.value })\r\n return userService.updateUserReportSettings(vm.user.id, userSettingsSave).then(function () {\r\n notification.success('Настройки отчетов для пользователя сохранены');\r\n $state.go(\"user.edit\", { id: vm.user.id });\r\n }, function() {\r\n notification.error('Ошибка при сохранении настроек отчетов');\r\n $state.reload();\r\n });\r\n }\r\n\r\n function countDiff() {\r\n vm.diff = _.differenceWith(userSettings, userSettingsBackup, function (x, y) { return x.name == y.name && x.value == y.value });\r\n }\r\n\r\n function syncSettings() {\r\n var commonSettings = findByRules(settings, 'emailreport.').map(function (x) { return { name: x.name, title: x.title } });\r\n\r\n // leave only active settings, keeping the existing values\r\n if (!vm.user.hasOwnProperty('reportSettings')) vm.user.reportSettings = [];\r\n var values = angular.copy(vm.user.reportSettings);\r\n vm.user.reportSettings = angular.copy(commonSettings);\r\n vm.user.reportSettings.forEach(function (x) {\r\n var val = values.find(function(y) { return y.name == x.name; })\r\n if (val) x.value = val.value;\r\n });\r\n\r\n // backup for future diff comparison\r\n userSettings = vm.user.reportSettings;\r\n userSettingsBackup = angular.copy(userSettings);\r\n }\r\n\r\n function populateSettings() {\r\n vm.noDataSettings = findByRules(userSettings, 'emailreport.nodata', '.emails');\r\n vm.oddDataSettings = findByRules(userSettings, 'emailreport.odddata', '.emails');\r\n vm.settings = _.difference(userSettings, vm.noDataSettings, vm.oddDataSettings);\r\n\r\n if (vm.settings.length > 0)\r\n vm.activeTab = 'general';\r\n else if (vm.oddDataSettings.length > 0)\r\n vm.activeTab = 'odddata';\r\n else if (vm.noDataSettings.length > 0)\r\n vm.activeTab = 'nodata';\r\n else\r\n vm.activeTab = 'general'; // no matter\r\n }\r\n\r\n function findByRules(settings, include, exclude) {\r\n var res = settings;\r\n if (include) res = _.filter(res, function (s) { return s.name && s.name.indexOf(include) >= 0 });\r\n if (exclude) res = _.filter(res, function (s) { return s.name && s.name.indexOf(exclude) < 0 });\r\n return res;\r\n }\r\n\r\n function waitFor(func) {\r\n return function () {\r\n vm.isWaiting = true;\r\n\r\n func()\r\n .finally(function () {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n config.$inject = [\"$stateProvider\"];\r\n angular.module('volga').config(config);\r\n\r\n function config($stateProvider) {\r\n $stateProvider\r\n .state('user.reports',\r\n {\r\n url: '/{id}/reports',\r\n templateUrl: 'app/pages/user/reports/user.reports.html',\r\n controller: 'UserReportsCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n settings : function(settingsService) {\r\n return settingsService.getSettings();\r\n },\r\n user: [\"$stateParams\", \"userService\", function ($stateParams, userService) {\r\n return userService.getUser($stateParams.id);\r\n }]\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga').controller(\"AddressActionsCtrl\", controller);\r\n\r\n function controller($state, $scope, $http, placeService, placeTypes, parentAddress, address, notification, place, user) {\r\n var vm = this;\r\n\r\n // init\r\n vm.isWaiting = false;\r\n vm.parentAddress = parentAddress;\r\n vm.address = address;\r\n\r\n // redirect if user is not admin\r\n if (_.indexOf(user.roles, 'admin') < 0) {\r\n $state.go(\"^\", {}, { reload: true });\r\n }\r\n\r\n $scope.close = function() {\r\n $state.go(\"^\", {}, { reload: true });\r\n }\r\n\r\n // public - delete\r\n $scope.delete = function () {\r\n $scope.performAction('delete');\r\n }\r\n $scope.restore = function () {\r\n $scope.performAction('restore');\r\n }\r\n $scope.generate = function () {\r\n $scope.performAction('generate');\r\n }\r\n\r\n // service\r\n $scope.performAction = function (action) {\r\n var params = $scope.getParams(action);\r\n if (params) {\r\n $scope.postAction(params);\r\n }\r\n }\r\n $scope.getParams = function (action) {\r\n if (action) {\r\n var start = $('#textStart').val();\r\n var end = $('#textEnd').val();\r\n if (start && end) {\r\n var hours = $(\"#checkHours\").prop('checked');\r\n var days = $(\"#checkDays\").prop('checked');\r\n var months = $(\"#checkMonths\").prop('checked');\r\n if (hours || days || months) {\r\n return {\r\n placeId: vm.address.id,\r\n action: action,\r\n start: start, end: end,\r\n hours: hours, days: days, months: months,\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n $scope.postAction = function (params) {\r\n var query = \"/api/place/\" + params.placeId + \"/metersView/action\";\r\n return $http.post(query, params)\r\n .success(function (res) {\r\n if (res && res.message)\r\n notification.success(res.message);\r\n })\r\n .catch(function (res) {\r\n notification.error('Не удается обработать показания по причине: ' + res.data.message);\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.address.actions',\r\n {\r\n url: '/actions',\r\n templateUrl: 'app/pages/place/address/actions/address.actions.html',\r\n controller: 'AddressActionsCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n // WORKAROUND: we are waiting for `allPlaces` requests to make realtime update in tree\r\n address: function ($stateParams, placeService, allPlaces) {\r\n return placeService.getPlace($stateParams.placeId);\r\n },\r\n parentAddress: function (place, placeService) {\r\n if (!place.parentId)\r\n return null;\r\n\r\n return placeService.getPlace(place.parentId);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga').controller(\"AddressUtilsCtrl\", controller);\r\n\r\n function controller($state, $scope, $http, placeService, placeTypes, parentAddress, address, notification, place) {\r\n var vm = this;\r\n\r\n // init\r\n vm.isWaiting = false;\r\n vm.parentAddress = parentAddress;\r\n vm.address = address;\r\n\r\n // redirect if selected address is not a building\r\n if (place.type != 'building') {\r\n $state.go(\"^\", {}, { reload: true });\r\n }\r\n\r\n $scope.close = function() {\r\n $state.go(\"^\", {}, { reload: true });\r\n }\r\n\r\n // public - rooms\r\n $scope.setRooms = function () {\r\n var el = document.getElementById('fileInputRooms');\r\n if (el && el.files && el.files.length > 0) {\r\n var placeId = vm.address.id;\r\n var file = el.files[0];\r\n $scope.syncRooms(placeId, file);\r\n }\r\n }\r\n\r\n $scope.syncRooms = function (placeId, file) {\r\n\r\n var fd = new FormData();\r\n fd.append('placeId', placeId);\r\n fd.append('file', file);\r\n\r\n var settings = {\r\n transformRequest: angular.identity,\r\n headers: { 'Content-Type': undefined }\r\n };\r\n\r\n var query = \"/api/place/\" + placeId + \"/syncRooms\";\r\n\r\n return $http.post(query, fd, settings)\r\n .success(function (res) {\r\n if (res && res.message)\r\n notification.success(res.message);\r\n })\r\n .catch(function (res) {\r\n notification.error('Не удается синхронизовать помещений по причине: ' + res.data.message);\r\n });\r\n }\r\n\r\n $scope.getRooms = function () {\r\n\r\n var query = \"/api/place/\" + vm.address.id + \"/exportRooms\";\r\n\r\n window.open(query, '_self');\r\n }\r\n\r\n // public - roomers\r\n $scope.setRoomers = function () {\r\n var el = document.getElementById('fileInputRoomers');\r\n if (el && el.files && el.files.length > 0) {\r\n var placeId = vm.address.id;\r\n var file = el.files[0];\r\n $scope.syncRoomers(placeId, file);\r\n }\r\n }\r\n\r\n $scope.syncRoomers = function (placeId, file) {\r\n\r\n var fd = new FormData();\r\n fd.append('placeId', placeId);\r\n fd.append('file', file);\r\n\r\n var settings = {\r\n transformRequest: angular.identity,\r\n headers: { 'Content-Type': undefined }\r\n };\r\n\r\n var query = \"/api/place/\" + placeId + \"/syncRoomers\";\r\n\r\n return $http.post(query, fd, settings)\r\n .success(function (res) {\r\n if (res && res.message)\r\n notification.success(res.message);\r\n })\r\n .catch(function (res) {\r\n notification.error('Не удается синхронизовать собственников по причине: ' + res.data.message);\r\n });\r\n }\r\n\r\n $scope.getRoomers = function () {\r\n\r\n var query = \"/api/place/\" + vm.address.id + \"/exportRoomers\";\r\n\r\n window.open(query, '_self');\r\n }\r\n\r\n // public - devices\r\n $scope.setDevices = function () {\r\n var el = document.getElementById('fileInputDevices');\r\n if (el && el.files && el.files.length > 0) {\r\n var placeId = vm.address.id;\r\n var file = el.files[0];\r\n $scope.syncDevices(placeId, file);\r\n }\r\n }\r\n\r\n $scope.syncDevices = function (placeId, file) {\r\n\r\n var fd = new FormData();\r\n fd.append('placeId', placeId);\r\n fd.append('file', file);\r\n\r\n var settings = {\r\n transformRequest: angular.identity,\r\n headers: { 'Content-Type': undefined }\r\n };\r\n\r\n var query = \"/api/place/\" + placeId + \"/syncDevices\";\r\n\r\n return $http.post(query, fd, settings)\r\n .success(function (res) {\r\n if (res && res.message)\r\n notification.success(res.message);\r\n })\r\n .catch(function (res) {\r\n notification.error('Не удается синхронизовать устройства по причине: ' + res.data.message);\r\n });\r\n }\r\n\r\n $scope.getDevices = function () {\r\n\r\n var query = \"/api/place/\" + vm.address.id + \"/exportDevices\";\r\n\r\n window.open(query, '_self');\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.address.utils',\r\n {\r\n url: '/utils',\r\n templateUrl: 'app/pages/place/address/utils/address.utils.html',\r\n controller: 'AddressUtilsCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n // WORKAROUND: we are waiting for `allPlaces` requests to make realtime update in tree\r\n address: function ($stateParams, placeService, allPlaces) {\r\n return placeService.getPlace($stateParams.placeId);\r\n },\r\n parentAddress: function (place, placeService) {\r\n if (!place.parentId)\r\n return null;\r\n\r\n return placeService.getPlace(place.parentId);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga').controller(\"AddressEditCtrl\", controller);\r\n\r\n function controller($state, placeService, placeTypes, parentAddress, address, notification, $q) {\r\n var vm = this;\r\n\r\n // init\r\n vm.isWaiting = false;\r\n vm.placeTypes = _.dropWhile(placeTypes,\r\n function(p) { return parentAddress && p.value != parentAddress.type; });\r\n vm.parentAddress = parentAddress;\r\n vm.address = address;\r\n\r\n // public\r\n vm.cancel = cancel;\r\n vm.save = waitFor(save);\r\n vm.remove = waitFor(remove);\r\n vm.restore = waitFor(restore);\r\n \r\n // private\r\n function save() {\r\n return placeService.savePlace(vm.address)\r\n .then(function() {\r\n notification.success(\"Адрес сохранен.\");\r\n close(true);\r\n });\r\n }\r\n\r\n function remove() {\r\n var res = confirm(\"Вы уверены, что вы хотите удалить расположение?\");\r\n if (!res)\r\n return $q.reject(\"Удаление отменено\");\r\n\r\n return placeService.removePlace(vm.address.id)\r\n .then(function () {\r\n notification.success(\"Адрес удален.\");\r\n close(true);\r\n });\r\n }\r\n\r\n function restore() {\r\n return placeService.restorePlace(vm.address.id)\r\n .then(function() {\r\n notification.success(\"Адрес восстановлен.\");\r\n close(true);\r\n });\r\n }\r\n\r\n function waitFor(func) {\r\n return function() {\r\n vm.isWaiting = true;\r\n return func()\r\n .finally(function() {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n\r\n function cancel() {\r\n close(true);\r\n }\r\n\r\n function close(reload) {\r\n $state.go(\"^\", {}, { reload: reload });\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.address.edit',\r\n {\r\n url: '/:addressId/edit',\r\n templateUrl: 'app/pages/place/address/edit/address.edit.html',\r\n controller: 'AddressEditCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n // WORKAROUND: we are waiting for `allPlaces` requests to make realtime update in tree\r\n address: function ($stateParams, placeService, allPlaces) {\r\n return placeService.getPlace($stateParams.addressId);\r\n },\r\n parentAddress: function (address, placeService) {\r\n if (!address.parentId)\r\n return null;\r\n\r\n return placeService.getPlace(address.parentId);\r\n }\r\n }\r\n })\r\n .state('place.address.create',\r\n {\r\n url: '/create',\r\n templateUrl: 'app/pages/place/address/edit/address.edit.html',\r\n controller: 'AddressEditCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n address: function (place) {\r\n return {\r\n enabled: true,\r\n parentId: place.id\r\n };\r\n },\r\n parentAddress: function (address, placeService) {\r\n if (!address.parentId)\r\n return null;\r\n\r\n return placeService.getPlace(address.parentId);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function() {\r\n 'use strict';\r\n angular.module('volga').controller(\"DeviceEditCtrl\", controller);\r\n\r\n function controller($state, device, deviceModels, pinTypes, place, routers, deviceService, notification, realPlace, $q, _) {\r\n var vm = this;\r\n var bitRates = [50, 75, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800];\r\n var connectTypes = [\r\n { code: 500, title: \"Через COM порт\" },\r\n { code: 550, title: \"Через COM порт (Linux)\" },\r\n { code: 102, title: \"Через MOXA по порту\" },\r\n { code: 100, title: \"Через MOXA по MAC\" },\r\n { code: 0, title: \"Не указан\" },\r\n ];\r\n\r\n // init\r\n vm.isWaiting = false;\r\n vm.bitRates = bitRates;\r\n vm.connectTypes = connectTypes;\r\n vm.deviceModels = deviceModels;\r\n vm.pins = device.pins && device.pins.length\r\n ? _.map(device.pins, function(p) { return _.find(pinTypes, { code: p.dataType }) })\r\n : [];\r\n vm.device = device;\r\n vm.uspds = routers;\r\n vm.place = place;\r\n vm.realPlace = realPlace;\r\n \r\n // cheek that device is a router?\r\n onDeviceModelChange();\r\n\r\n // public\r\n vm.cancel = cancel;\r\n vm.save = waitFor(save);\r\n vm.remove = waitFor(remove);\r\n vm.restore = waitFor(restore);\r\n vm.move = move;\r\n vm.onDeviceModelChange = onDeviceModelChange;\r\n\r\n // private\r\n function move() {\r\n return $state.go(\".move\");\r\n }\r\n\r\n function save() {\r\n return deviceService.saveDevice(vm.device)\r\n .then(function() {\r\n notification.success(\"Прибор сохранен.\");\r\n close(true);\r\n });\r\n }\r\n\r\n function remove() {\r\n var res = confirm(\"Вы уверены, что вы хотите удалить устройство?\");\r\n if (!res)\r\n return $q.reject(\"Удаление отменено\");\r\n\r\n return deviceService.removeDevice(vm.device.id)\r\n .then(function() {\r\n notification.success(\"Прибор удален.\");\r\n close(true);\r\n });\r\n }\r\n\r\n function restore() {\r\n return deviceService.restoreDevice(vm.device.id)\r\n .then(function() {\r\n notification.success(\"Прибор восстановлен.\");\r\n close(true);\r\n });\r\n }\r\n\r\n function onDeviceModelChange() {\r\n var deviceType = vm.device.model && _.find(deviceModels, { value: vm.device.model });\r\n vm.isRouter = deviceType && deviceType.type && deviceType.type.value == \"routers\";\r\n if (vm.isRouter && vm.device.route) {\r\n vm.device.route.connectType = 0;\r\n }\r\n }\r\n\r\n function waitFor(func) {\r\n return function() {\r\n vm.isWaiting = true;\r\n return func()\r\n .finally(function() {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n\r\n function cancel() {\r\n close(true);\r\n }\r\n\r\n function close(reload) {\r\n $state.go(\"^\", {}, { reload: reload });\r\n }\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.device.edit',\r\n {\r\n url: '/:deviceId/edit',\r\n templateUrl: 'app/pages/place/device/edit/device.edit.html',\r\n controller: 'DeviceEditCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n device: function ($stateParams, deviceService) {\r\n return deviceService.getDevice($stateParams.deviceId);\r\n },\r\n realPlace: function(placeService, device) {\r\n return placeService.getPlace(device.placeId);\r\n }\r\n }\r\n })\r\n .state('place.device.create',\r\n {\r\n url: '/create',\r\n templateUrl: 'app/pages/place/device/edit/device.edit.html',\r\n controller: 'DeviceEditCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n device: function (place) {\r\n var route = { };\r\n // if (place.type == 'room')\r\n route.connectType = 500; // set com port by default for all devices \r\n return {\r\n enabled: true,\r\n placeId: place.id,\r\n route: route,\r\n };\r\n },\r\n realPlace: function (placeService, device) {\r\n return placeService.getPlace(device.placeId);\r\n }\r\n }\r\n });\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"DeviceDataCtrl\", controller);\r\n\r\n function controller($state, deviceModels, device, place, notification, deviceService, _, deviceData) {\r\n var vm = this;\r\n \r\n \r\n // init\r\n vm.isWaiting = false;\r\n vm.deviceModels = deviceModels;\r\n vm.device = device;\r\n vm.place = place;\r\n vm.deviceData = deviceData;\r\n // public\r\n vm.close = close;\r\n \r\n \r\n\r\n // private\r\n function close(reload) {\r\n $state.go(\"^\", {}, { reload: reload });\r\n }\r\n }\r\n})();\r\n","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.device.data',\r\n {\r\n url: '/:deviceId/data',\r\n templateUrl: 'app/pages/place/device/data/device.data.html',\r\n controller: 'DeviceDataCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n device: function ($stateParams, deviceService) {\r\n return deviceService.getDevice($stateParams.deviceId);\r\n },\r\n deviceData: function ($stateParams, deviceService) {\r\n var deviceId = $stateParams.deviceId;\r\n return deviceService.getDeviceData(deviceId).then(function(data) {\r\n return data;\r\n });\r\n \r\n }\r\n }\r\n })\r\n //.state('place.device.create',\r\n //{\r\n // url: '/create',\r\n // templateUrl: 'app/pages/place/device/edit/device.edit.html',\r\n // controller: 'DeviceEditCtrl',\r\n // controllerAs: 'ctrl',\r\n // resolve: {\r\n // device: function () {\r\n // return {\r\n // enabled: true\r\n // };\r\n // }\r\n // }\r\n //})\r\n ;\r\n }\r\n})();","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").component(\"volgaSelectPlaceTree\", {\r\n\r\n bindings: {\r\n places: '=',\r\n selectedPlaces: '='\r\n },\r\n\r\n templateUrl: \"app/pages/user/places/tree/select.tree.component.html\",\r\n controller: \"VolgaSelectPlaceTreeCtrl\",\r\n controllerAs: 'ctrl'\r\n\r\n });\r\n})();\r\n\r\n\r\n(function (app) {\r\n 'use strict';\r\n app.controller(\"VolgaSelectPlaceTreeCtrl\", \r\n function ($state, _) {\r\n var vm = this;\r\n \r\n vm.model = {\r\n tree: []\r\n };\r\n\r\n vm.activeNode = null;\r\n var root = vm.places[\"null\"][0];\r\n addChildren(root);\r\n vm.model.tree = [root];\r\n // open selected node in the tree\r\n\r\n // public\r\n vm.select = select;\r\n vm.collapse = collapse;\r\n vm.show = show;\r\n\r\n // private\r\n function collapse(node) {\r\n node.opened = false;\r\n for (var i = 0; i < node.nodes.length; i++) {\r\n collapse(node.nodes[i]);\r\n }\r\n }\r\n\r\n function show(node) {\r\n node.opened = true;\r\n for (var i = 0; i < node.nodes.length; i++) {\r\n show(node.nodes[i]);\r\n }\r\n }\r\n\r\n function select(node) {\r\n updateItemsCount(node);\r\n\r\n if (!node.selected) {\r\n removeSelected(node);\r\n }\r\n \r\n copySelected(node);\r\n\r\n // clear selection\r\n vm.selectedPlaces.length = 0;\r\n findSelected(root, vm.selectedPlaces);\r\n }\r\n\r\n function addChildren(node) {\r\n \r\n if (!vm.places[node.id]) return;\r\n\r\n var children = vm.places[node.id];\r\n for (var i = 0; i < children.length; i++) {\r\n var childNode = children[i];\r\n childNode.parent = node;\r\n addChildren(childNode);\r\n }\r\n\r\n node.nodes = children;\r\n setSelected(node);\r\n node.isEndNode = _.some(children, function (c) { return c.type != \"room\"});\r\n }\r\n \r\n function setSelected(node) {\r\n node.selected = false;\r\n node.selectedItemsCount = node.selectedItemsCount || 0;\r\n // if node is selected than open it and all it ancestors\r\n if (_.find(vm.selectedPlaces,{ id: node.id})) {\r\n node.selected = true;\r\n updateItemsCount(node);\r\n copySelected(node);\r\n openSubTree(node);\r\n }\r\n\r\n return node;\r\n }\r\n\r\n function copySelected(node) {\r\n if (!node.nodes) return;\r\n\r\n for (var i = 0; i < node.nodes.length; i++) {\r\n var isDiff = node.nodes[i].selected != node.selected;\r\n node.nodes[i].selected = node.selected;\r\n if (isDiff) updateItemsCount(node.nodes[i]);\r\n copySelected(node.nodes[i], node.selected);\r\n }\r\n }\r\n\r\n function updateItemsCount(node) {\r\n var change = node.selected ? 1 : -1;\r\n node.selectedItemsCount = 0 + _.sumBy(node.nodes, \"selected\");\r\n node.parent && (node.parent.selectedItemsCount = (node.parent.selectedItemsCount || 0) + change);\r\n }\r\n\r\n function removeSelected(node) {\r\n node.selected = false;\r\n updateItemsCount(node);\r\n if (node.parent) removeSelected(node.parent);\r\n }\r\n\r\n function openSubTree(node) {\r\n if (node.opened) return;\r\n\r\n node.opened = true;\r\n\r\n if (node.parent) openSubTree(node.parent);\r\n }\r\n\r\n function findSelected(node, selectedItems) {\r\n if (node.selected) {\r\n selectedItems.push(node);\r\n return selectedItems;\r\n }\r\n\r\n if (!node.nodes)\r\n return selectedItems;\r\n\r\n for (var i = 0; i < node.nodes.length; i++) {\r\n findSelected(node.nodes[i], selectedItems);\r\n }\r\n\r\n return selectedItems;\r\n }\r\n\r\n });\r\n})(angular.module(\"volga\"));\r\n\r\n\r\n\r\n","(function () {\r\n 'use strict';\r\n angular.module('volga').controller(\"DeviceMoveCtrl\", controller);\r\n\r\n function controller($state, device, place, deviceService, addresses, notification, _) {\r\n var vm = this;\r\n vm.newPlaceId = place.id;\r\n // init\r\n vm.isWaiting = false;\r\n vm.deviceTitle = device.title;\r\n vm.placeTitle = place.fullTitle || place.title;\r\n vm.addresses = addresses;\r\n\r\n // public\r\n vm.cancel = cancel;\r\n vm.save = waitFor(save);\r\n\r\n // private\r\n function save() {\r\n return deviceService.moveDevice(device.id, vm.newPlaceId).then(function () {\r\n notification.success(\"Прибор перемещен.\");\r\n $state.go(\"^\", { placeId: vm.newPlaceId });\r\n });\r\n }\r\n\r\n function waitFor(func) {\r\n return function () {\r\n vm.isWaiting = true;\r\n return func().finally(function () {\r\n vm.isWaiting = false;\r\n });\r\n }\r\n }\r\n\r\n function cancel() {\r\n $state.go(\"^\", {});\r\n }\r\n }\r\n})();\r\n","(function () {\r\n \"use strict\";\r\n\r\n angular.module(\"volga\").config(config);\r\n\r\n function config($stateProvider) {\r\n\r\n $stateProvider\r\n .state('place.device.edit.move',\r\n {\r\n url: '/move',\r\n templateUrl: 'app/pages/place/device/edit/move/device.move.html',\r\n controller: 'DeviceMoveCtrl',\r\n controllerAs: 'ctrl',\r\n resolve: {\r\n addresses: function (place, placeService) {\r\n return placeService.getPlaceChildren(place.parentId);\r\n }\r\n }\r\n });\r\n }\r\n})();"]}