"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;
});
}
}
}]);
})();