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