"use strict"; /** * Created by ygowtham on 6/11/2015. */ angular.module('serviceRequestModule') .directive('fulfillmentMap', ['relationModel', '$state', 'configurationModel', 'systemAlertService', '$filter', function (relationModel, $state, configurationModel, systemAlertService, $filter) { return { restrict: 'E', scope: { context: '=', isDraft: '=' }, link: function (scope) { scope.state = {}; if (!scope.isDraft) { scope.state.loadingLinkedResources = true; relationModel.refreshRelations(scope.context.id, scope.context.ticketType).then(function (relations) { scope.relatedTickets = _.filter(relations, { tag: RelationItemVO.TAG_LINKEDITEM }); scope.activeRelatedTickets = _.filter(scope.relatedTickets, function (item) { item.isAppEnabled = configurationModel.isServerApplicationEnabled(item.type); return scope.isfulfillmentActive(item); }); scope.closedRelatedTickets = _.difference(scope.relatedTickets, scope.activeRelatedTickets); }).finally(function () { scope.state.loadingLinkedResources = false; }); } scope.showRelatedTicketDetails = function (relatedTicket) { if (relatedTicket.type === EntityVO.TYPE_ASSET) { var params = { assetId: relatedTicket.id, assetClassId: relatedTicket.additionalInformation.classId }; $state.go(relatedTicket.realObject.processStepType, params); } else { if (configurationModel.isServerApplicationEnabled(relatedTicket.type)) { params = { id: relatedTicket.id }; $state.go(relatedTicket.realObject.processStepType, params); } else { if (systemAlertService.alertStack.length) { systemAlertService.dismissAllAlerts(); } systemAlertService.warning({ text: $filter('i18n')('person.preview.notification.disabled.application'), hide: 10000 }); } } }; /** * Returns fully qualified class name. * @returns {String} */ scope.fulfillmentStatusClass = function (relatedItem) { var statusClass = ''; var itemStatus = relatedItem.realObject && relatedItem.realObject.processStepStatus || ''; switch (itemStatus) { case 'In Progress': statusClass = 'resource-slice__fulfillment-item_in-progress'; break; case 'Pending': statusClass = 'resource-slice__fulfillment-item_pending'; break; case 'Planning': statusClass = 'resource-slice__fulfillment-item_planning'; break; case 'Activated': statusClass = 'resource-slice__fulfillment-item_activated'; break; case 'Completed': statusClass = 'resource-slice__fulfillment-item_completed'; break; case 'Cancelled': statusClass = 'resource-slice__fulfillment-item_cancelled'; break; case 'Error': statusClass = 'resource-slice__fulfillment-item_error'; break; default: statusClass = ''; } return statusClass; }; /** * Returns fully qualified class name. * @returns {String} */ scope.fulfillmentIconClass = function (relatedItem) { var iconClass = ''; var itemStatus = relatedItem.realObject && relatedItem.realObject.processStepStatus || ''; switch (itemStatus) { case 'In Progress': iconClass = 'icon-circle'; break; case 'Pending': case 'PENDING': iconClass = 'icon-circle'; break; case 'Planning': case 'Activated': case 'ACTIVE': iconClass = 'icon-calendar'; break; case 'Completed': case 'COMPLETED': iconClass = 'icon-check_circle'; break; case 'Cancelled': case 'CANCELLED': iconClass = 'icon-cross_circle'; break; case 'Error': case 'FAILED': iconClass = 'icon-alert_circle'; break; default: iconClass = ''; } return iconClass; }; /** * Returns true if fulfillment is active. * @returns {String} */ scope.isfulfillmentActive = function (relatedItem) { if (relatedItem.realObject && relatedItem.realObject.returnCode && relatedItem.realObject.returnCode === 'error') { relatedItem.realObject.processStepStatus = 'Error'; } var itemStatus = relatedItem.realObject && relatedItem.realObject.processStepStatus || ''; var isActive = (itemStatus === 'In Progress' || itemStatus === 'Pending' || itemStatus === 'Planning' || itemStatus === 'Activated'); if (scope.context.type === 'sberequest' && !isActive) { isActive = _.indexOf(['NEW', 'ACTIVE', 'SUSPENDED', 'PENDING', 'WAITING_FOR_APPROVAL', 'APPROVED'], itemStatus); } return isActive; }; }, templateUrl: 'views/service-request/fulfillment-map.html' }; }]);