"use strict"; /** * Author: Srini * BCM integration module */ (function () { 'use strict'; angular.module('assetModule') .controller('BcmAssetActionController', ['$scope', '$modalInstance', 'linkParams', '$compile', 'assetModel', '$timeout', 'systemAlertService', '$modal', function ($scope, $modalInstance, linkParams, $compile, assetModel, $timeout, systemAlertService, $modal) { $scope.state = { 'isDataLoading': true, 'loadingMore': false, 'name': "general" }; $scope.asset = linkParams.entity; var ngGridShowLoadingMoreSpinner = { init: function (scope, grid) { grid.$viewport.append($compile('
')($scope)); } }; var gridOptions = { headerRowHeight: 43, rowHeight: 40, enableRowSelection: false, enableColumnResize: true, plugins: [ngGridShowLoadingMoreSpinner] }; $scope.$on('ngGridEventScroll', function () { if ($scope.state[$scope.state.name].pager) { if ($scope.state.name === 'software') { loadMoreSoftwareItems(); } else if ($scope.state.name === 'action') { loadMoreActionItems(); } } }); $scope.keywordTranslation = []; $scope.isArray = function (item) { return item instanceof Array; }; $scope.getKeywordTranslation = function (label, type) { return $scope.keywordTranslation[type][label] || label; }; $scope.changeTab = function (state) { $scope.state.isDataLoading = true; $scope.state.name = state; switch (state) { case 'general': getGeneralSummary(); break; case 'hardware': getHardwareSummary(); break; case 'software': getSoftwareSummary(); break; case 'financial': getFinancialSummary(); break; case 'security': getSecuritySummary(); break; case 'action': getActionHistory(); break; } }; $scope.isEmpty = function (obj) { return _.isEmpty(obj); }; function getColDefs(sampleRow) { var key, columnDefs = []; if (sampleRow) { for (key in sampleRow.fields) { if (sampleRow.fields.hasOwnProperty(key)) { columnDefs.push({ field: "fields['" + key + "']", displayName: key }); } } } return columnDefs; } function handleError(response) { $scope.state.isDataLoading = false; if (response.data && response.data.error) { if (response.data.error === "BCM_Unauthorized") { reAuthFromBCM(); } else { systemAlertService.error({ text: response.data.error, clear: false }); } } } function reAuthFromBCM() { var bcmAuthModal = $modal.open({ templateUrl: 'views/common/bcm-credentials-template.html', windowClass: 'bcm-credential-alert-modal', controller: 'BcmCredentialAlertController' }); bcmAuthModal.result.then(function () { $scope.changeTab($scope.state.name); }); } function getGeneralSummary() { if (!$scope.generalData) { assetModel.getBcmAssetGeneralData().then(function (data) { $scope.generalData = data.general; $scope.generalGridOptions = angular.copy(gridOptions); $scope.generalGridOptions.data = 'generalData'; $scope.generalGridOptions.columnDefs = getColDefs(data.general[0]); $scope.state.general = { pager: false }; //Populate hardware data as we use same API for both general and hardware Tab. $scope.keywordTranslation.hardware = angular.copy(data.hardware.KeywordTranslation); delete data.hardware.KeywordTranslation; $scope.hardwareData = data.hardware; $scope.state.hardware = { pager: false }; }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; }); } else { $timeout(function () { $scope.state.isDataLoading = false; }, 100); } } function getHardwareSummary() { if (!$scope.hardwareData) { assetModel.getBcmAssetHardwareData().then(function (data) { $scope.keywordTranslation.hardware = angular.copy(data.KeywordTranslation); delete data.KeywordTranslation; $scope.hardwareData = data; $scope.state.hardware = { pager: false }; }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; }); } else { $scope.state.isDataLoading = false; } } function getSecuritySummary() { if (!$scope.securityData) { assetModel.getBcmAssetSecurityData().then(function (data) { $scope.keywordTranslation.security = angular.copy(data.KeywordTranslation); delete data.KeywordTranslation; $scope.securityData = data; $scope.state.security = { pager: false }; }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; }); } else { $scope.state.isDataLoading = false; } } function getSoftwareSummary() { if (!$scope.softwareData) { $scope.state.software = { offset: 0, total: 0, pager: true }; assetModel.getBcmAssetSoftwareData($scope.state.software.offset).then(function (data) { $scope.softwareData = data.sObjects; $scope.state.software.total = data.total; $scope.softwareGridOptions = angular.copy(gridOptions); $scope.softwareGridOptions.data = 'softwareData'; $scope.softwareGridOptions.columnDefs = getColDefs(data.sObjects[0]); }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; }); } else { $timeout(function () { $scope.state.isDataLoading = false; }, 100); } } function getActionHistory() { if (!$scope.actionData) { $scope.state.action = { offset: 0, total: 0, pager: true }; assetModel.getBcmAssetActionHistory($scope.state.action.offset).then(function (data) { $scope.actionData = data.aObjects; $scope.state.action.total = data.total; $scope.actionGridOptions = angular.copy(gridOptions); $scope.actionGridOptions.data = 'actionData'; $scope.actionGridOptions.columnDefs = getColDefs(data.aObjects[0]); }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; }); } else { $timeout(function () { $scope.state.isDataLoading = false; }, 100); } } function getFinancialSummary() { if (!$scope.financialData) { assetModel.getBcmAssetFinancialData().then(function (data) { $scope.financialData = data; $scope.financialGridOptions = angular.copy(gridOptions); $scope.financialGridOptions.data = 'financialData'; $scope.financialGridOptions.columnDefs = getColDefs(data[0]); $scope.state.financial = { pager: false }; }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; }); } else { $timeout(function () { $scope.state.isDataLoading = false; }, 100); } } function loadMoreSoftwareItems() { $scope.state.software.offset = $scope.softwareData.length; if ($scope.state.software.offset < $scope.state.software.total && !$scope.state.loadingMore) { $scope.state.loadingMore = true; assetModel.getBcmAssetSoftwareData($scope.state.software.offset).then(function (data) { $scope.softwareData = _.union($scope.softwareData, data.sObjects); }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; $scope.state.loadingMore = false; }); } } function loadMoreActionItems() { $scope.state.action.offset = $scope.actionData.length; if ($scope.state.action.offset < $scope.state.action.total && !$scope.state.loadingMore) { $scope.state.loadingMore = true; assetModel.getBcmAssetActionHistory($scope.state.action.offset).then(function (data) { $scope.actionData = _.union($scope.actionData, data.aObjects); }).catch(handleError).finally(function () { $scope.state.isDataLoading = false; $scope.state.loadingMore = false; }); } } }]); })();