263 lines
12 KiB
JavaScript
263 lines
12 KiB
JavaScript
"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('<div class="ngLoadingMoreSpinnerContainer" ng-if="state.loadingMore"><div loading-spinner if="true" inline="true" centered="true"></div></div>')($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;
|
|
});
|
|
}
|
|
}
|
|
}]);
|
|
})();
|