219 lines
9.3 KiB
JavaScript
219 lines
9.3 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('feedModule')
|
|
.factory('feedModel', ['feedService', '$q', 'attachmentService', 'metadataModel', 'systemAlertService', '$filter',
|
|
function (feedService, $q, attachmentService, metadataModel, systemAlertService, $filter) {
|
|
var feedModel = {
|
|
pendingWorkNote: null
|
|
};
|
|
var allFilterSelected = false;
|
|
var filterSelectedCount;
|
|
var updateFeed = {
|
|
filters: {},
|
|
params: {
|
|
searchQuery: '',
|
|
followCount: true,
|
|
limit: 20
|
|
}
|
|
};
|
|
var activityFeed = {
|
|
filters: {},
|
|
params: {
|
|
searchQuery: '',
|
|
limit: 20
|
|
}
|
|
};
|
|
var prepareGetFeedItemsRequestParams = function (feed, criteria, entity) {
|
|
var filters = {};
|
|
_.forEach(feed.filters, function (item, key) {
|
|
filters[key] = item.join(',');
|
|
});
|
|
if (!feed.params.searchQuery) {
|
|
feed.params.searchQuery = void 0; //small hack to get rid of searchQuery from url, as it is undefined $resource does not include it in a request URL.
|
|
}
|
|
if (entity && entity.poiId) {
|
|
feed.params.poiId = entity.poiId;
|
|
}
|
|
else {
|
|
feed.params.poiId = null;
|
|
}
|
|
return angular.extend({}, filters, criteria, feed.params);
|
|
};
|
|
feedModel.updateFeed = updateFeed;
|
|
feedModel.activityFeed = activityFeed;
|
|
feedModel.workinfoTypeFilters = {};
|
|
feedModel.getUpdateFeedItems = function (criteria) {
|
|
if (allFilterSelected) {
|
|
updateFeed.filters = {};
|
|
}
|
|
return feedService.getUpdateFeedItems(prepareGetFeedItemsRequestParams(updateFeed, criteria));
|
|
};
|
|
feedModel.buildFeedFilter = function (feed, filtersSet) {
|
|
var criteria = [];
|
|
feed.filters = {};
|
|
filterSelectedCount = 0;
|
|
_.forEach(filtersSet, function (filter) {
|
|
if (filter.selected) {
|
|
filterSelectedCount++;
|
|
criteria = (_.isArray(filter.criteria)) ? filter.criteria : [filter.criteria];
|
|
_.forEach(criteria, function (criterion) {
|
|
if (feed.filters[criterion.name]) {
|
|
feed.filters[criterion.name] = _.union(feed.filters[criterion.name], criterion.value);
|
|
}
|
|
else {
|
|
feed.filters[criterion.name] = criterion.value;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
allFilterSelected = filterSelectedCount === filtersSet.length ? true : false;
|
|
};
|
|
feedModel.getActivityFeedItems = function (entity, criteria) {
|
|
if (entity.id && entity.type) {
|
|
return feedService.getActivityFeedItems(entity, prepareGetFeedItemsRequestParams(activityFeed, criteria, entity));
|
|
}
|
|
};
|
|
/**
|
|
* Save work note
|
|
*
|
|
* @param entity
|
|
* @param note
|
|
* @returns {*}
|
|
*/
|
|
feedModel.saveNote = function (entity, note) {
|
|
var request, prom;
|
|
if (note.addFlagNote) {
|
|
request = {
|
|
flagNote: note.noteText,
|
|
flagged: note.flag
|
|
};
|
|
if (!_.isUndefined(note.workNoteGuid)) {
|
|
request.isCommentOnly = note.isCommentOnly;
|
|
request.workNoteGuid = note.workNoteGuid;
|
|
}
|
|
}
|
|
else if (!note.worknote) {
|
|
request = {
|
|
worknote: note.noteText,
|
|
access: note.access,
|
|
workInfoType: note.workInfoType
|
|
};
|
|
}
|
|
else {
|
|
request = note;
|
|
}
|
|
if (note.brokerVendorName) {
|
|
if (note.shareWithVendor) {
|
|
request.shareWithVendor = true;
|
|
}
|
|
if (note.vendorTicketId) {
|
|
request.vendorTicketId = note.vendorTicketId;
|
|
}
|
|
request.brokerVendorName = note.brokerVendorName;
|
|
}
|
|
if (note.addFlagNote) {
|
|
return feedService.addActivityFeedWorknoteWithFlag(entity, request);
|
|
}
|
|
else if (note.attachments && note.attachments.length) {
|
|
prom = attachmentService.addWorknoteWithAttachment(entity, note);
|
|
prom.catch(function (err) {
|
|
systemAlertService.error({
|
|
text: err.data.defaultMessage,
|
|
clear: false
|
|
});
|
|
});
|
|
return prom;
|
|
}
|
|
else {
|
|
prom = feedService.addActivityFeedWorknote(entity, request);
|
|
prom.then(function (res) {
|
|
if (note.articleId && note.attachmentType === "pdf") {
|
|
systemAlertService.success({ text: res[0].items[0].statusInfo.message, clear: true, hide: 10000 });
|
|
}
|
|
}).catch(function (err) {
|
|
if (err) {
|
|
systemAlertService.error({
|
|
text: (err.data && err.data.error) || $filter('i18n')('error.unknown'),
|
|
clear: false
|
|
});
|
|
}
|
|
});
|
|
return prom;
|
|
}
|
|
};
|
|
feedModel.saveNoteBulk = function (request) {
|
|
if (request.attachments && request.attachments.length) {
|
|
return attachmentService.addWorknoteWithAttachmentBulk(request);
|
|
}
|
|
else {
|
|
return feedService.addActivityFeedWorknoteBulk(request);
|
|
}
|
|
};
|
|
/**
|
|
* Process pending work note (if any)
|
|
*
|
|
* @param {Object} ticket - related ticket
|
|
*/
|
|
feedModel.processPendingWorkNote = function (ticket) {
|
|
if (feedModel.pendingWorkNote) {
|
|
console.log('saving pending note..');
|
|
var entity = {
|
|
type: ticket.type,
|
|
id: ticket.id
|
|
};
|
|
return feedModel.saveNote(entity, feedModel.pendingWorkNote)
|
|
.then(function () {
|
|
console.log('pending note saved');
|
|
feedModel.pendingWorkNote = null;
|
|
}).catch(function (pendingWorkNoteError) {
|
|
systemAlertService.error({
|
|
text: pendingWorkNoteError.data.error,
|
|
clear: false
|
|
});
|
|
});
|
|
}
|
|
};
|
|
feedModel.getWorkinfoTypeFilters = function (type) {
|
|
if (feedModel.workinfoTypeFilters[type] || !EntityVO.hasMetadata(type)) {
|
|
return $q.when(feedModel.workinfoTypeFilters[type] || []);
|
|
}
|
|
feedModel.workinfoTypeFilters[type] = [];
|
|
return metadataModel.getMetadataByType(type).then(function (metadata) {
|
|
var workinfoTypes = _.filter(metadata.workinfoTypes, { type: 'option' });
|
|
_.forEach(workinfoTypes, function (workinfoType) {
|
|
feedModel.workinfoTypeFilters[type].push({
|
|
name: workinfoType.name,
|
|
label: workinfoType.label,
|
|
type: 'showWorkinfoTypes',
|
|
criteria: [{
|
|
name: 'workNoteTypeId',
|
|
value: [workinfoType.index]
|
|
}, {
|
|
name: 'filterType',
|
|
value: ['comment']
|
|
}
|
|
]
|
|
});
|
|
});
|
|
return feedModel.workinfoTypeFilters[type] || [];
|
|
});
|
|
};
|
|
feedModel.unpinFeedItem = function (feedItem) {
|
|
var entity = {
|
|
type: feedItem.type,
|
|
id: feedItem.id
|
|
};
|
|
return feedService.unpinFeedItem(entity).then(function () {
|
|
}).catch(function () {
|
|
systemAlertService.error({
|
|
text: $filter('i18n')('feed.unpin.error'),
|
|
clear: false
|
|
});
|
|
});
|
|
};
|
|
return feedModel;
|
|
}
|
|
]);
|
|
}());
|