61 lines
3.0 KiB
JavaScript
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;
|
|
}]);
|
|
})();
|