SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/asset/asset-controller.js

887 lines
45 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('assetModule')
.controller('AssetController', [
'$scope', 'assetModel', 'attachmentService', '$q', 'categoriesService', 'events', '$modal', '$state',
'systemAlertService', '$filter', 'metadataModel', 'userModel', 'ticketActionService', 'googleMapService',
'relationModel', 'ciExplorerModel', 'i18nService', 'configurationModel', 'screenConfigurationModel', 'chatModel',
function ($scope, assetModel, attachmentService, $q, categoriesService, events, $modal, $state, systemAlertService, $filter, metadataModel, userModel, ticketActionService, googleMapService, relationModel, ciExplorerModel, i18nService, configurationModel, screenConfigurationModel, chatModel) {
var screenName = screenConfigurationModel.getScreenNameByTicketType(EntityVO.TYPE_ASSET);
$scope.ciExplorerModel = ciExplorerModel;
$scope.dirty = false;
$scope.dropDownOptions = {};
$scope.customFieldsAvailable = false;
$scope.typeSpecificCustomFieldsAvailable = false;
$scope.chatModel = chatModel;
var peopleRefreshRequired = false;
$scope.bcmConfig = {};
/**
* Public functions
*
*/
$scope.setSection = function (sectionId) {
$scope.activeSection = sectionId;
};
$scope.share = function ($event) {
ticketActionService.showShareDialog($scope.asset).result.then(function () {
$event.currentTarget.focus();
}, function () {
$event.currentTarget.focus();
});
};
$scope.follow = function () {
var userLoginId = userModel.userFullData.loginId;
return assetModel.followAsset(userLoginId, $scope.asset.reconciliationId);
};
$scope.unfollow = function () {
var userLoginId = userModel.userFullData.loginId;
return assetModel.unfollowAsset(userLoginId, $scope.asset.reconciliationId);
};
$scope.toggleFollowingFlag = function () {
var toggleFollowingFunction = $scope.asset.following ? $scope.unfollow : $scope.follow;
toggleFollowingFunction($scope.asset).then(function () {
$scope.asset.following = !$scope.asset.following;
}, function (error) {
systemAlertService.error({
text: error.data && error.data.error,
clear: false
});
});
};
$scope.showPrintDialog = function ($event) {
var ticketPrintDialog = $modal.open({
templateUrl: 'views/common/print-action-blade.html',
controller: 'PrintController',
windowClass: 'action-blade',
size: 'extra-lg',
resolve: {
params: function () {
return {
entity: $scope.asset,
feed: $scope.asset.feed,
customFieldsAvailable: $scope.customFieldsAvailable
};
}
}
});
ticketPrintDialog.result.finally(function () {
$event.currentTarget.focus();
});
};
$scope.closeExplorer = function () {
$state.go('asset', {
assetId: $scope.asset.reconciliationId,
assetClassId: $scope.asset.classId
});
};
function mapBCMUser(action) {
var bcmAuthModal = $modal.open({
templateUrl: 'views/common/bcm-credentials-template.html',
windowClass: 'bcm-credential-alert-modal',
controller: 'BcmCredentialAlertController'
});
bcmAuthModal.result.then(function () {
userModel.getBCMIntegrationConfig().then(function (bcmConfig) {
$scope.bcmConfig = bcmConfig;
if ($scope.bcmConfig.configLoaded && action) {
$scope.bcmActionsCallbacks[action]();
}
});
});
}
function getBCMFilterActionAndProcess(action) {
var loadingModal = $modal.open({
template: '<div class="modal-header system-alert__item_info">{{ "common.labels.loading" | i18n }}</div><div class="modal-body"><div loading-spinner if="true" centered="true"></div></div>',
windowClass: 'bcm-credential-alert-modal',
size: 'sm'
});
assetModel.getBcmFilteredActionsFromServer().then(function (bcmFilteredActions) {
configureMoreActions();
loadingModal.close();
$scope.bcmFilteredActions = bcmFilteredActions;
$scope.bcmActionsCallbacks[action]();
}).catch(function (response) {
configureMoreActions();
loadingModal.close();
if (response.data.error === 'BCM_Unauthorized') {
mapBCMUser(action);
}
else {
systemAlertService.error({
text: response.data.error,
clear: false
});
}
});
}
function confirmBCMActionAndProcess(action) {
var modalInstance = systemAlertService.modal({
title: $filter('i18n')('common.notification.dirty.title'),
text: $filter('i18n')('asset.bcm.' + action + '.confirm'),
buttons: [
{
text: $filter('i18n')('common.button.yes'),
data: true
},
{
text: $filter('i18n')('common.button.no'),
data: false
}
]
});
modalInstance.result.then(function (flag) {
if (flag) {
performBCMActionAndProcess(action);
}
});
}
function performBCMActionAndProcess(action) {
var loadingModal = $modal.open({
template: '<div class="modal-header system-alert__item_info">{{ "common.labels.loading" | i18n }}</div><div class="modal-body"><div loading-spinner if="true" centered="true"></div></div>',
windowClass: 'bcm-credential-alert-modal',
size: 'sm'
});
assetModel.performBCMAction(action).then(function () {
loadingModal.close();
systemAlertService.success({
text: $filter('i18n')('asset.bcm.' + action + '.success'),
hide: 10000
});
}).catch(function (response) {
loadingModal.close();
if (response.data && response.data.error) {
if (response.data.error === "BCM_Unauthorized") {
mapBCMUser(action);
}
else {
systemAlertService.error({
text: response.data.error,
clear: false
});
}
}
});
}
function bcmUserNotAuthorized() {
systemAlertService.error({
text: $filter('i18n')('error.unauthorized'),
clear: false
});
}
$scope.bcmActionsCallbacks = {
'showBcmAssetDetails': function () {
if ($scope.bcmConfig.usermapped) {
if ($scope.bcmFilteredActions.configLoaded) {
if ($scope.bcmFilteredActions.actions.ConfigSummary) {
$modal.open({
templateUrl: 'views/asset/bcm-asset-action-blade.html',
controller: 'BcmAssetActionController',
windowClass: 'action-blade',
size: 'extra-lg',
resolve: {
linkParams: function () {
return {
entity: $scope.asset
};
}
}
});
}
else {
bcmUserNotAuthorized();
}
}
else {
getBCMFilterActionAndProcess('showBcmAssetDetails');
}
}
else {
mapBCMUser('showBcmAssetDetails');
}
},
'performAuditFromBCM': function () {
if ($scope.bcmConfig.usermapped) {
if ($scope.bcmFilteredActions.configLoaded) {
if ($scope.bcmFilteredActions.actions.PerformAudit) {
performBCMActionAndProcess('performAuditFromBCM');
}
else {
bcmUserNotAuthorized();
}
}
else {
getBCMFilterActionAndProcess('performAuditFromBCM');
}
}
else {
mapBCMUser('performAuditFromBCM');
}
},
'pingDeviceFromBCM': function () {
if ($scope.bcmConfig.usermapped) {
if ($scope.bcmFilteredActions.configLoaded) {
if ($scope.bcmFilteredActions.actions.Ping) {
performBCMActionAndProcess('pingDeviceFromBCM');
}
else {
bcmUserNotAuthorized();
}
}
else {
getBCMFilterActionAndProcess('pingDeviceFromBCM');
}
}
else {
mapBCMUser('pingDeviceFromBCM');
}
},
'rebootDeviceFromBCM': function () {
if ($scope.bcmConfig.usermapped) {
if ($scope.bcmFilteredActions.configLoaded) {
if ($scope.bcmFilteredActions.actions.Reboot) {
confirmBCMActionAndProcess('rebootDeviceFromBCM');
}
else {
bcmUserNotAuthorized();
}
}
else {
getBCMFilterActionAndProcess('rebootDeviceFromBCM');
}
}
else {
mapBCMUser('rebootDeviceFromBCM');
}
},
'shutdownDeviceFromBCM': function () {
if ($scope.bcmConfig.usermapped) {
if ($scope.bcmFilteredActions.configLoaded) {
if ($scope.bcmFilteredActions.actions.Shutdown) {
confirmBCMActionAndProcess('shutdownDeviceFromBCM');
}
else {
bcmUserNotAuthorized();
}
}
else {
getBCMFilterActionAndProcess('shutdownDeviceFromBCM');
}
}
else {
mapBCMUser('shutdownDeviceFromBCM');
}
},
'wakeupDeviceFromBCM': function () {
if ($scope.bcmConfig.usermapped) {
if ($scope.bcmFilteredActions.configLoaded) {
if ($scope.bcmFilteredActions.actions.WakeUp) {
performBCMActionAndProcess('wakeupDeviceFromBCM');
}
else {
bcmUserNotAuthorized();
}
}
else {
getBCMFilterActionAndProcess('wakeupDeviceFromBCM');
}
}
else {
mapBCMUser('wakeupDeviceFromBCM');
}
}
};
$scope.putIntoInventoryCallbackFuncs = {
'putIntoInventory': function () {
var editInventoryModal = $modal.open({
templateUrl: 'views/asset/asset-edit-inventory-blade.html',
windowClass: 'action-blade',
controller: 'AssetEditInventoryController',
backdrop: 'custom'
});
editInventoryModal.result.then(function () {
configureMoreActions();
$scope.$emit(events.ASSET_DETAILS_CHANGED, { eventName: events.REFRESH_ACTIVITY_FEED });
$scope.$emit(events.ASSET_DETAILS_CHANGED, { eventName: events.REFRESH_RELATED_ITEM_LIST });
});
}
};
$scope.takeOutOfInventoryCallbackFuncs = {
'takeOutOfInventory': function () {
var editStatusModal = $modal.open({
templateUrl: 'views/asset/asset-edit-status-blade.html',
windowClass: 'action-blade',
controller: 'AssetEditStatusController',
backdrop: 'custom'
});
editStatusModal.result.then(function () {
configureMoreActions();
$scope.$emit(events.ASSET_DETAILS_CHANGED, { eventName: events.REFRESH_ACTIVITY_FEED });
$scope.$emit(events.ASSET_DETAILS_CHANGED, { eventName: events.REFRESH_RELATED_ITEM_LIST });
});
}
};
function configureMoreActions() {
$scope.dropDownOptions = {
'actions': [],
'registeredCallbacks': {}
};
var currentAssetType = _.find($scope.metadata.assetTypes, { name: $scope.asset.assetType });
var currentSubType = _.find(currentAssetType.subType, { name: assetModel.assetClassId });
if (currentSubType.putIntoInventory && $scope.asset.accessMappings.inventoryEditAllowed) {
var moreDropDownActionItems = _.clone(configurationModel.get('moreActions.asset'));
var callback = $scope.putIntoInventoryCallbackFuncs;
if ($scope.asset.status.value === EntityVO.STATUS_IN_INVENTORY) {
moreDropDownActionItems.splice(0, 1);
callback = $scope.takeOutOfInventoryCallbackFuncs;
}
else {
moreDropDownActionItems.splice(1, 1);
}
$scope.dropDownOptions = {
'actions': moreDropDownActionItems,
'registeredCallbacks': callback
};
}
//additional BCM actions
if ($scope.bcmConfig.integrated && $scope.asset.bcmDeviceId) {
$scope.bcmFilteredActions = assetModel.getBcmFilteredActions();
var bcmSupportedActions = [{
'name': 'bcmAssetDetails',
'functionCallback': 'showBcmAssetDetails',
'addTopSeparator': true,
'isDisabled': !$scope.bcmFilteredActions.actions.ConfigSummary
}, {
'name': 'performAudit',
'functionCallback': 'performAuditFromBCM',
'addTopSeparator': true,
'isDisabled': !$scope.bcmFilteredActions.actions.PerformAudit
}, {
'name': 'ping',
'functionCallback': 'pingDeviceFromBCM',
'isDisabled': !$scope.bcmFilteredActions.actions.Ping
}, {
'name': 'reboot',
'functionCallback': 'rebootDeviceFromBCM',
'isDisabled': !$scope.bcmFilteredActions.actions.Reboot
}, {
'name': 'shutdown',
'functionCallback': 'shutdownDeviceFromBCM',
'isDisabled': !$scope.bcmFilteredActions.actions.Shutdown
}, {
'name': 'wakeUp',
'functionCallback': 'wakeupDeviceFromBCM',
'isDisabled': !$scope.bcmFilteredActions.actions.WakeUp
}];
bcmSupportedActions.forEach(function (bcmAction) {
var actionItem = {
label: bcmAction.name,
method: bcmAction.functionCallback,
addTopSeparator: bcmAction.addTopSeparator || false,
isDisabled: bcmAction.isDisabled || false
};
$scope.dropDownOptions.actions.push(actionItem);
$scope.dropDownOptions.registeredCallbacks[bcmAction.functionCallback] = $scope.bcmActionsCallbacks[bcmAction.functionCallback];
});
}
}
var initDirtyFormAlert = function () {
$scope.$on('$stateChangeStart', function (event, toState, toParams) {
if (!$scope.dirty) {
return;
}
if ($scope.dirty && toState.name !== EntityVO.TYPE_ASSET) {
event.preventDefault();
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.labels.yes'),
data: {
stateName: toState.name,
stateParams: toParams
}
},
{
text: i18nService.getLocalizedString('common.labels.no')
}
]
});
modalInstance.result.then(function (data) {
if (!_.isEmpty(data)) {
$scope.dirty = false;
$state.transitionTo(data.stateName, data.stateParams);
}
});
}
});
};
$scope.$on('new-relations', function () {
assetModel.refreshFlattenRelations(assetModel.assetId).then(onFlattenRelationsLoaded);
});
$scope.refreshTicket = function () {
delete relationModel.cache[assetModel.assetId];
$scope.init(assetModel.assetId, assetModel.assetClassId);
assetModel.refreshFlattenRelations(assetModel.assetId).then(onFlattenRelationsLoaded);
};
/**
* Entry point
*/
$scope.init = function (assetId, assetClassId) {
$scope.isAttributesCollapsed = false;
$scope.activeSection = 'dates';
$scope.editHeader = false;
$scope.asset = {};
$scope.asset.owner = {};
$scope.assetOwner = {};
$scope.poiOwner = {};
if (!assetId) {
return;
}
$scope.state = {
isAssetDataLoading: true,
isPersonRelationsLoading: true
};
assetModel.assetOwner = {};
assetModel.assetDetails = {};
assetModel.assetId = assetId;
assetModel.assetClassId = assetClassId;
var metadataPromise = metadataModel.getMetadataByType(EntityVO.TYPE_ASSET)
.then(function (assetMetadataCache) {
$scope.metadata = assetMetadataCache || {};
}), assetDetailsPromise = assetModel.getAssetDetailsByID(assetId, assetClassId)
.then(onAssetDetailsLoaded).finally(onDataLoadComplete), assetFlattenRelationsPromise = $scope.isFullVersion ? assetModel.getFlattenRelations(assetId).then(onFlattenRelationsLoaded) : $q.when(1), screenConfigurationPromise = screenName ? screenConfigurationModel.loadScreenConfigurationAndCustomFieldLabels(screenName, EntityVO.TYPE_ASSET) : $q.when({}), assetPeopleRelationsPromise, promises;
userModel.getBCMIntegrationConfig().then(function (bcmConfig) {
$scope.bcmConfig = bcmConfig;
});
if (peopleRefreshRequired) {
assetPeopleRelationsPromise = assetModel.refreshPeopleRelations(assetId);
peopleRefreshRequired = false;
}
else {
assetPeopleRelationsPromise = $scope.isFullVersion ? assetModel.getPeopleRelations(assetId) : assetModel.getPrimaryContact(assetId);
}
assetPeopleRelationsPromise.finally(function () {
$scope.state.isPersonRelationsLoading = false;
});
promises = [metadataPromise, assetDetailsPromise, assetFlattenRelationsPromise, assetPeopleRelationsPromise, screenConfigurationPromise];
// bcm provider when removed, can break the promise array; hence bcmConfigPromise removed - SW00531904
$q.all(promises)
.then(onPeopleRelationsLoaded)
.finally(function () {
var temp = _.find($scope.metadata.assetTypes, { 'name': $scope.asset.type });
if ($scope.asset.extensionAttrs.primaryCapability) {
screenConfigurationModel.loadDynamicSelectionFieldLabels(EntityVO.TYPE_ASSET, 'SHR:SDF:AST-Capabilities', $scope.asset.extensionAttrs.primaryCapability, null, null, null, null, true).then(function (response) {
$scope.asset.extensionAttrs.primaryCapability = _.find(response.items, function (item) {
return item.value === $scope.asset.extensionAttrs.primaryCapability;
});
$scope.asset.extensionAttrs.primaryCapability.name = $scope.asset.extensionAttrs.primaryCapability.value;
});
}
$scope.metadata.allCategories = $scope.metadata.categories;
$scope.asset.allCategories = categoriesService.populateCategories($scope.asset.product.categorizations, $scope.metadata);
$scope.asset.noCategories = (_.filter($scope.asset.allCategories, 'valueToShow')).length;
$scope.asset.typeLabel = temp.label;
$scope.asset.subTypeLabel = _.result(_.find(temp.subType, function (item) {
return item.name.toUpperCase() === $scope.asset.subType.toUpperCase();
}), 'label');
configureMoreActions();
initDirtyFormAlert();
});
};
$scope.handleFileChange = function (fileInput) {
//TODO: create ng-upload directive, which will be handling file inputs, to get rid of input class hardcoding
var query = 'classId=' + $scope.asset.classId;
attachmentService.uploadProfileThumbnail($scope.asset.reconciliationId, 'asset', fileInput, query)
.then(function (response) {
if (response.thumbnail) {
$scope.asset.thumbnail = response.thumbnail;
}
})
.finally(function () {
$scope.state.uploadingThumbnail = false;
});
};
$scope.showEditStatusDialog = function () {
var editStatusModal = $modal.open({
templateUrl: 'views/asset/asset-edit-status-blade.html',
windowClass: 'action-blade',
controller: 'AssetEditStatusController',
backdrop: 'custom'
});
editStatusModal.result.then(function () {
$scope.$emit(events.ASSET_DETAILS_CHANGED, { eventName: events.REFRESH_ACTIVITY_FEED });
});
};
$scope.showPersonDetails = function (person, $event) {
if ($event && 'href' in $event.target) {
return;
}
if (isPeopleType(person)) {
$state.go(EntityVO.TYPE_PERSON, { id: person.id.replace(/\\\\/g, '\\') });
}
};
$scope.isPeopleType = function (person) {
return isPeopleType(person);
};
$scope.updateAssetOwner = function (updatedData) {
if (updatedData.relationData.id && !(updatedData.relationData.id === assetModel.assetPrimaryContact.displayId
&& updatedData.relationData.relationshipType === assetModel.assetPrimaryContact.relationshipType)) {
$scope.state.isAssetDataLoading = true;
relationModel.addRelation({
type: 'asset',
uuid: $scope.asset.reconciliationId
}, [updatedData.relationData])
.then(function () {
// If new owner is added successfully, remove the old one if it exist
if (assetModel.assetPrimaryContact.id) {
var persondata = {
id: assetModel.assetPrimaryContact.id,
parentId: assetModel.assetPrimaryContact.parentId,
type: assetModel.assetPrimaryContact.type,
relationshipType: assetModel.assetPrimaryContact.relationshipType
};
assetModel.removePeople(persondata).then(function () {
assetModel.refreshPeopleRelations(assetModel.assetId)
.then(onPeopleRelationsLoaded)
.catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
}).finally(function () {
$scope.state.isAssetDataLoading = false;
});
}).catch(function (error) {
$scope.state.isAssetDataLoading = false;
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
});
}
else {
assetModel.getPeopleRelations(assetModel.assetId)
.then(onPeopleRelationsLoaded)
.catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
}).finally(function () {
$scope.state.isAssetDataLoading = false;
});
}
}).catch(function (updateAssetOwnerError) {
$scope.state.isAssetDataLoading = false;
if (updateAssetOwnerError) {
systemAlertService.error({
text: updateAssetOwnerError.data.error,
clear: false
});
}
});
}
else if (!updatedData.relationData.id && assetModel.assetPrimaryContact.id) {
$scope.state.isAssetDataLoading = true;
var persondata = {
id: assetModel.assetPrimaryContact.id,
parentId: assetModel.assetPrimaryContact.parentId,
type: assetModel.assetPrimaryContact.type,
relationshipType: assetModel.assetPrimaryContact.relationshipType
};
assetModel.removePeople(persondata).then(function () {
assetModel.refreshPeopleRelations(assetModel.assetId)
.then(function () {
onPeopleRelationsLoaded();
systemAlertService.success({
text: $filter('i18n')('asset.details.people.removePeople.successMessage'),
hide: 10000
});
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
}).finally(function () {
$scope.state.isAssetDataLoading = false;
});
}).catch(function (updateAssetOwnerError) {
$scope.state.isAssetDataLoading = false;
if (updateAssetOwnerError) {
systemAlertService.error({
text: updateAssetOwnerError.data.error,
clear: false
});
}
});
}
if (assetModel.assetDetails.site.name !== updatedData.siteData.name
&& (assetModel.assetDetails.site.name !== undefined || updatedData.siteData.name !== '') //Check both shouldnt be blank, undefined or null
) {
$scope.state.isAssetDataLoading = true;
var sitesUpdate = {
siteRegion: updatedData.siteData.region,
siteGroup: updatedData.siteData.siteGroup,
siteName: updatedData.siteData.name
};
assetModel.update(sitesUpdate)
.then(function (data) {
$scope.state.isAssetDataLoading = false;
assetModel.updateCacheAssetDetails(data);
if (data.needsReconciliation) {
systemAlertService.warning({
text: $filter('i18n')('asset.reconWarning'),
hide: 10000
});
}
})
.catch(function (updateSiteError) {
$scope.state.isAssetDataLoading = false;
if (updateSiteError) {
systemAlertService.error({
text: updateSiteError.data.error,
clear: false
});
}
return $q.reject(updateSiteError);
});
}
};
$scope.addRelatedPeople = function ($event) {
var modalInstance = $modal.open({
templateUrl: 'views/asset/relate-people.html',
windowClass: 'action-blade',
controller: 'RelatePeopleController',
backdrop: 'custom'
});
modalInstance.result.then(function (response) {
$scope.state.isPersonRelationsLoading = true;
assetModel.refreshPeopleRelations(assetModel.assetId)
.then(function () {
$scope.assetRelations = assetModel.assetRelations;
$scope.assetPeopleRelations = getPeopleRelationsArray();
if (!response || !response.error) {
systemAlertService.success({
text: $filter('i18n')('asset.details.people.addPeople.successMessage'),
hide: 10000
});
}
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
return $q.reject(error);
}).finally(function () {
$scope.state.isPersonRelationsLoading = false;
});
if ($event && $event.currentTarget) {
$event.currentTarget.focus();
}
}, function () {
if ($event && $event.currentTarget) {
$event.currentTarget.focus();
}
});
};
/**
* Removes the people relationship
* @param person
*/
$scope.removePeople = function (person) {
var modalInstance = systemAlertService.modal({
title: $filter('i18n')('common.notification.delete.title'),
text: $filter('i18n')('common.notification.delete.message'),
buttons: [
{
text: $filter('i18n')('controls.action.ok'),
data: true
},
{
text: $filter('i18n')('controls.action.cancel'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
$scope.state.isPersonRelationsLoading = true;
var persondata = {
id: person.id,
parentId: person.parentId,
type: person.type,
relationshipType: person.relationshipType
};
assetModel.removePeople(persondata).then(function () {
assetModel.refreshPeopleRelations(assetModel.assetId)
.then(function () {
$scope.assetRelations = assetModel.assetRelations;
$scope.assetPeopleRelations = getPeopleRelationsArray();
systemAlertService.success({
text: $filter('i18n')('asset.details.people.removePeople.successMessage'),
hide: 10000
});
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
}).finally(function () {
$scope.state.isPersonRelationsLoading = false;
});
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
}).finally(function () {
$scope.state.isPersonRelationsLoading = false;
});
}
});
};
$scope.openLaunchActionBlade = function (actionItem) {
var modalInstance = $modal.open({
templateUrl: 'views/asset/asset-launch-action-blade.html',
controller: 'AssetLaunchActionController',
windowClass: 'action-blade',
backdrop: 'custom',
size: 'lg',
resolve: {
linkParams: function () {
return {
selectedItem: [$scope.asset],
actionItem: actionItem
};
}
}
});
modalInstance.result.then(function (response) {
if (response && response[$scope.asset.reconciliationId]) {
var refreshAssetDetails = false;
_.forEach(response[$scope.asset.reconciliationId], function (data) {
if (data.additionalInformation && data.additionalInformation.subActionName === 'peopleRelation') {
peopleRefreshRequired = true;
}
else if (data.additionalInformation && data.additionalInformation.subActionName === 'assetRelation' || data.additionalInformation.subActionName === 'assetUpdate') {
refreshAssetDetails = true;
}
});
if (peopleRefreshRequired && !refreshAssetDetails) {
$scope.state.isPersonRelationsLoading = true;
assetModel.refreshPeopleRelations($scope.asset.reconciliationId)
.then(onPeopleRelationsLoaded)
.finally(function () {
$scope.state.isPersonRelationsLoading = false;
peopleRefreshRequired = false;
});
}
else if (refreshAssetDetails) {
$scope.refreshTicket();
//$scope.init(assetModel.assetId, assetModel.assetClassId);
}
}
});
};
function getPeopleRelationsArray() {
var assetPeopleRelations = _.cloneDeep(assetModel.assetPeopleRelations);
return Object.keys(assetPeopleRelations).map(function (key) {
return { key: key, value: assetPeopleRelations[key] };
});
}
function onPeopleRelationsLoaded() {
$scope.assetPeopleRelations = getPeopleRelationsArray();
if (_.isEmpty(assetModel.assetPrimaryContact)) {
$scope.asset.owner = {};
$scope.assetOwner = {};
}
else if (_.isEmpty($scope.asset.owner) || $scope.asset.owner.id !== assetModel.assetPrimaryContact.id || $scope.asset.owner.relationshipType !== assetModel.assetPrimaryContact.relationshipType) {
var owner = assetModel.assetPrimaryContact;
$scope.asset.owner = angular.copy(assetModel.assetPrimaryContact);
var primaryContact_1 = angular.copy(assetModel.assetPrimaryContact);
//todo: need to use loginid when backend returns it
if (owner.id) {
assetModel.getAssetOwnerDetails(owner.id).then(function () {
$scope.assetOwner = assetModel.assetOwner;
$scope.assetOwnerNoAccess = !$scope.assetOwner.loginId;
primaryContact_1.content = $scope.assetOwner;
delete primaryContact_1.realObject;
$scope.$emit(events.ADD_CUSTOMER_FROM_ASSET, primaryContact_1);
});
}
}
}
function onAssetDetailsLoaded() {
$scope.asset = assetModel.assetDetails;
assetModel.assetDetails.outageResourceAvailable = 1;
if ($scope.asset && !_.isEmpty($scope.asset.customFields)) {
$scope.customFieldsAvailable = true;
}
if ($scope.asset.isPoi) {
if ($scope.asset.poiInfo.owner) {
assetModel.getPoiOwnerDetails($scope.asset.poiInfo.owner).then(function () {
$scope.poiOwner = assetModel.poiOwner;
$scope.poiOwnerNoAccess = !$scope.poiOwner.loginId;
});
}
if ($scope.asset.poiInfo.floorMapId) {
$scope.poiFloorMap = '/../smartit/rest/getfile/locationFloorMap/' + $scope.asset.poiInfo.floorMapId;
}
if (googleMapService.isAvailable && $scope.asset.poiId) {
$scope.poiLocationLink = '#/location/' + $scope.asset.poiId;
}
}
$scope.$emit(events.ASSET_DETAILS_LOADED, { asset: assetModel.assetDetails });
}
function onFlattenRelationsLoaded() {
$scope.assetFlattenRelations = assetModel.flattenRelations;
}
function onDataLoadComplete() {
$scope.state.isAssetDataLoading = false;
}
function isPeopleType(person) {
return person.realObject.reqType === EntityVO.TYPE_PEOPLE;
}
function handleToggleEditMode() {
$scope.dirty = true;
}
function handleEditComplete() {
$scope.dirty = false;
}
function handleShowTypeSpecificArea(event, data) {
$scope.customFieldsAvailable = true;
if (data.typeSpecific) {
$scope.typeSpecificCustomFieldsAvailable = true;
}
}
$scope.$on(events.PROFILE_EDIT_HEADER, function (event, value) {
$scope.editHeader = value;
});
$scope.$on("$destroy", function () {
if (configurationModel.isPWAEnabled) {
relationModel.deleteCacheById(assetModel.assetId);
}
});
$scope.$on(events.TOGGLE_EDIT_MODE, handleToggleEditMode);
$scope.$on(events.EDIT_COMPLETE, handleEditComplete);
$scope.$on(events.TS_CUSTOM_FIELDS_AVAILABLE, handleShowTypeSpecificArea);
}
]);
})();