SmartIT_Extensions/BMC/smart-it-full/scripts/app/common/metadata-model.js

61 lines
3.0 KiB
JavaScript

"use strict";
/**
* Created by viktor.shevchenko on 7/10/2014.
*/
(function () {
'use strict';
angular.module('myitsmApp')
.factory('metadataModel', ['metadataService', '$q', function (metadataService, $q) {
var metadataModel = {
cache: {},
allStatuses: []
};
metadataModel.getMetadataByType = function (type) {
if (metadataModel.cache[type]) {
var isAngularPromise = _.has(metadataModel.cache[type], '$$state.status');
return $q.when(isAngularPromise ? metadataModel.cache[type] : angular.copy(metadataModel.cache[type]));
}
metadataModel.cache[type] = metadataService.getMetadataByType(type).then(function (response) {
metadataModel.cache[type] = response[0];
if (response[0] && response[0].statuses) {
metadataModel.allStatuses = _.unique((metadataModel.allStatuses.concat(response[0].statuses)), 'name');
}
return angular.copy(metadataModel.cache[type]);
});
return metadataModel.cache[type];
};
metadataModel.getMetadataByTypes = function (types) {
var requestMetadataForTicketTypes = [], collectedMetaData = [];
_.forEach(types, function (type) {
if (!metadataModel.cache[type]) {
requestMetadataForTicketTypes.push(type);
}
else {
collectedMetaData.push(angular.copy(metadataModel.cache[type]));
}
});
if (!requestMetadataForTicketTypes.length) {
return $q.when(collectedMetaData);
}
return metadataService.getMetadataByType(requestMetadataForTicketTypes).then(function (metadataArray) {
_.forEach(metadataArray, function (metadata) {
metadataModel.cache[metadata.metadatatype] = metadata;
collectedMetaData.push(metadata);
metadataModel.allStatuses = _.unique((metadataModel.allStatuses.concat(metadata.statuses)), 'name');
});
return collectedMetaData;
});
};
//person metadata call for creating a new customer, we don't use type here when we make the backend call
// because this is not a ticket, it is a resource
metadataModel.getPersonMetadata = function (type) {
metadataModel.cache[type] = metadataService.getPersonMetadata().then(function (response) {
metadataModel.cache[type] = response[0];
return angular.copy(metadataModel.cache[type]);
});
return metadataModel.cache[type];
};
return metadataModel;
}]);
})();