SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/ticket/ticket-tasks-directive.js

881 lines
53 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('ticketModule')
.directive('ticketTasks', ['ticketModel', 'relationModel', 'userModel', '$q', '$filter', '$modal', 'events', '$timeout',
'$state', 'i18nService', 'systemAlertService', 'objectValueMapperService', 'pwaModel',
function (ticketModel, relationModel, userModel, $q, $filter, $modal, events, $timeout, $state, i18nService, systemAlertService, objectValueMapperService, pwaModel) {
return {
restrict: 'E',
templateUrl: 'views/ticket/ticket-tasks.html',
scope: {
ticket: '=',
relationCounters: '=',
tasksDisabled: '='
},
link: function (scope, element) {
scope.userModel = {
isAccessibleUser: false
};
scope.itemsLimit = 4;
var ticket = scope.ticket, originalTasks = [], state = {
loadingTaskResources: !ticket.isDraft,
processing: false,
showing: false
};
scope.relations = relationModel.cache;
initAlertForDirty();
scope.$watch(function () {
return userModel.isAccessibleUser;
}, function (newValue) {
scope.userModel.isAccessibleUser = newValue;
});
function flattenArray() {
var flat = [];
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] instanceof Array) {
flat.push.apply(flat, flattenArray.apply(this, arguments[i]));
}
else {
flat.push(arguments[i]);
}
}
return flat;
}
scope.$watch('relations', function () {
scope.relatedTasks = _.filter(_.cloneDeep(scope.relations[ticket.id]), { type: EntityVO.TYPE_TASK }) || [];
scope.originalTasks = _.cloneDeep(scope.relatedTasks);
//group tasks based on the taskGroupId
if (scope.relatedTasks.length) {
var childTasks = [], taskGroup = [];
_.forEach(scope.relatedTasks, function (item, idx, totalTasks) {
item.editable = false;
if (ticket.type !== EntityVO.TYPE_PROBLEM && ticket.type !== EntityVO.TYPE_KNOWNERROR) {
item.editable = ticket.accessMappings.relationsEditAllowed && ticket.accessMappings.tasksEditAllowed !== false
&& item.realObject.status.value === 'Staged' ? true : false;
}
if (item.realObject.taskGroupId) {
if (item.realObject.nestedTaskGroup) {
item.editable = false;
}
if (!item.realObject.taskGroupType) {
item.realObject.taskGroupType = item.realObject.sequence ? 'Sequencing' : 'Standard';
}
item.realObject.sequence = item.realObject.sequence ? item.realObject.sequence : 1;
item.realObject.childSequence = item.realObject.mainSequence + '.' + item.realObject.sequence;
var itemInTaskGroup = _.find(taskGroup, function (tg) {
return tg.realObject.taskGroupId === item.realObject.taskGroupId;
});
if (taskGroup.length === 0 || (taskGroup.length && itemInTaskGroup)) {
taskGroup.push(item);
}
else {
childTasks.push(taskGroup);
taskGroup = [];
taskGroup.push(item);
}
if (idx === totalTasks.length - 1) {
childTasks.push(taskGroup);
}
}
else {
if (taskGroup.length) {
childTasks.push(taskGroup);
taskGroup = [];
}
childTasks.push(item);
}
});
scope.relatedTasks = childTasks;
originalTasks = angular.copy(scope.relatedTasks);
}
if (scope.relationCounters) {
scope.relationCounters.tasks = flattenArray(scope.relatedTasks).length; // For the count of tasks if they are in groups.
}
}, true);
function checkAssignedTask(task, arr) {
if (task.realObject.status.value === 'Assigned') {
arr.push(task.realObject.mainSequence);
}
}
function getActiveDetails(tasks) {
var temp = [];
_.forEach(tasks, function (task) {
if (task.length) {
_.forEach(task, function (val) {
checkAssignedTask(val, temp);
});
}
else {
checkAssignedTask(task, temp);
}
});
return temp;
}
function isTaskStagedOrClosedCancelled(tasks, dropindex, index) {
var dragDropAllowed = true;
var taskIndex;
if (!isNaN(dropindex) && dropindex < index) {
for (taskIndex = dropindex; taskIndex < index; taskIndex++) {
if (tasks[taskIndex] && tasks[taskIndex].length) {
dragDropAllowed = isTaskStagedOrClosedCancelled(tasks[taskIndex], 0, tasks[taskIndex].length);
}
else if (tasks[taskIndex].realObject.status.value !== 'Staged' && tasks[taskIndex].realObject.status.reason !== 'Cancelled' && tasks[taskIndex].realObject.status.value !== 'Pending') {
dragDropAllowed = false;
}
}
}
else {
for (taskIndex = index; taskIndex < dropindex; taskIndex++) {
if (tasks[taskIndex] && tasks[taskIndex].length) {
dragDropAllowed = isTaskStagedOrClosedCancelled(tasks[taskIndex], 0, tasks[taskIndex].length);
}
else if (tasks[taskIndex].realObject.status.value !== 'Staged' && tasks[taskIndex].realObject.status.reason !== 'Cancelled' && tasks[taskIndex].realObject.status.value !== 'Pending') {
dragDropAllowed = false;
}
}
}
return dragDropAllowed;
}
scope.parentSortableOptions = {
placeholder: 'profile-relation__item-task-container',
connectWith: '.profile-relation__task-container',
cancel: ":input,.locked",
update: function (event, ui) {
state.showing = false;
var activeTask = getActiveDetails(ui.item.sortable.droptargetModel);
var belowItem = ui.item.sortable.droptargetModel[ui.item.sortable.dropindex];
var seqNum = 1;
if (belowItem.length) {
seqNum = belowItem[0].realObject.mainSequence;
}
else {
seqNum = belowItem.realObject.mainSequence;
}
var closedItem = true;
_.forEach(activeTask, function (val) {
if (seqNum >= val) {
closedItem = false;
return false;
}
});
if (activeTask.length === 0 &&
isTaskStagedOrClosedCancelled(ui.item.sortable.droptargetModel, ui.item.sortable.dropindex, ui.item.sortable.index)) {
closedItem = false;
}
if (closedItem && !state.showing) {
state.showing = true;
$timeout(function () {
scope.draftNotificationInstance = systemAlertService.warning({
text: $filter('i18n')('ticket.relatedTasks.closed.label'),
hide: 10000
});
scope.draftNotificationInstance.result
.finally(function () {
scope.draftNotificationInstance = null;
});
}, 500);
ui.item.sortable.cancel();
}
},
stop: function (event, ui) {
if (state.showing) {
return;
}
var tasks = _.cloneDeep(ui.item.sortable.sourceModel);
var activeTask = _.find(tasks, function (task, idx) {
if (task.length) {
task = task[0];
}
return ui.item.sortable.dropindex < idx
&& ui.item.sortable.model.id !== task.id
&& task.realObject.status.value === 'Assigned';
});
if (activeTask && activeTask.length) {
activeTask = activeTask[0];
}
var mainSequence = 1;
_.forEach(tasks, function (task, idx) {
var sameOrderFlag = false;
var nextTask = null;
if ((idx + 1) !== tasks.length) {
nextTask = tasks[idx + 1].length ? tasks[idx + 1][0] : tasks[idx + 1];
}
if (task.length) {
if (nextTask && task[0].realObject.mainSequence === nextTask.realObject.mainSequence
&& (ui.item.sortable.model.length ? ui.item.sortable.model[0].id : ui.item.sortable.model.id) !== nextTask.id) {
sameOrderFlag = true;
}
_.forEach(task, function (childTask, childIdx) {
if (ui.item.sortable.model.id === childTask.id && childTask.realObject.status.value !== 'Staged') {
childTask.realObject.status.value = 'Staged';
}
if (childTask.realObject.status.value === 'Staged') {
childTask.realObject.mainSequence = mainSequence;
if (activeTask && idx === ui.item.sortable.dropindex && (childIdx === 0
|| childTask.realObject.sequence === task[0].realObject.sequence)) {
childTask.realObject.mainSequence = activeTask.realObject.mainSequence;
//childTask.editable = false;
childTask.realObject.status.value = 'Pending';
}
childTask.realObject.childSequence = childTask.realObject.mainSequence + '.' + childTask.realObject.sequence;
}
});
mainSequence = sameOrderFlag ? task[0].realObject.mainSequence : (task[0].realObject.mainSequence + 1);
}
else {
if (nextTask && task.realObject.mainSequence === nextTask.realObject.mainSequence
&& (ui.item.sortable.model.length ? ui.item.sortable.model[0].id : ui.item.sortable.model.id) !== nextTask.id) {
sameOrderFlag = true;
}
if (ui.item.sortable.model.id === task.id && task.realObject.status.value !== 'Staged') {
task.realObject.status.value = 'Staged';
}
if (task.realObject.status.value === 'Staged') {
task.realObject.mainSequence = mainSequence;
if (activeTask && idx === ui.item.sortable.dropindex) {
task.realObject.mainSequence = activeTask.realObject.mainSequence;
//task.editable = false;
task.realObject.status.value = 'Pending';
}
}
mainSequence = sameOrderFlag ? task.realObject.mainSequence : (task.realObject.mainSequence + 1);
}
});
scope.relatedTasks = tasks;
scope.dirty = true;
}
};
scope.childSortableOptions = {
placeholder: 'profile-relation__item-task-child',
connectWith: '.profile-relation__task-group-container',
cancel: ":input,.locked",
update: function (event, ui) {
var closedItem = _.find(ui.item.sortable.sourceModel, function (task, idx) {
return ui.item.sortable.dropindex <= idx
&& ui.item.sortable.model.id !== task.id
&& (task.realObject.status.value === 'Closed'
|| task.realObject.status.value === 'Bypassed');
});
var invalidGroup = false;
if (ui.item.sortable.model.realObject.taskGroupId !== ui.item.sortable.droptargetModel[0].realObject.taskGroupId) {
invalidGroup = true;
}
if ((closedItem || invalidGroup) && !state.showing) {
state.showing = true;
$timeout(function () {
scope.draftNotificationInstance = systemAlertService.warning({
text: closedItem ? $filter('i18n')('ticket.relatedTasks.closed.label')
: $filter('i18n')('ticket.relatedTasks.groupChange.label'),
hide: 10000
});
scope.draftNotificationInstance.result
.finally(function () {
scope.draftNotificationInstance = null;
state.showing = false;
});
}, 500);
ui.item.sortable.cancel();
}
},
stop: function (event, ui) {
if (state.showing) {
return;
}
var tasks = _.cloneDeep(ui.item.sortable.sourceModel);
var activeTask = _.find(tasks, function (task, idx) {
return ui.item.sortable.dropindex < idx
&& ui.item.sortable.model.id !== task.id
&& task.realObject.status.value !== 'Staged';
});
var sourceIndex;
var sequence = 1;
_.forEach(tasks, function (task, idx) {
var sameOrderFlag = false;
var nextTask = null;
if ((idx + 1) !== tasks.length) {
nextTask = tasks[idx + 1];
}
if (nextTask && task.realObject.sequence === nextTask.realObject.sequence && ui.item.sortable.model.id !== nextTask.id) {
sameOrderFlag = true;
}
if (ui.item.sortable.model.id === task.id) {
sourceIndex = idx;
if (task.realObject.status.value !== 'Staged') {
task.realObject.status.value = 'Staged';
}
}
if (task.realObject.status.value === 'Staged') {
task.realObject.sequence = sequence;
if (activeTask && idx === ui.item.sortable.dropindex) {
task.realObject.sequence = activeTask.realObject.sequence;
//task.editable = false;
task.realObject.status.value = 'Pending';
}
task.realObject.childSequence = task.realObject.mainSequence + '.' + task.realObject.sequence;
}
sequence = sameOrderFlag ? task.realObject.sequence : (task.realObject.sequence + 1);
});
_.forEach(scope.relatedTasks, function (relatedTask, idx) {
if (relatedTask.length && relatedTask[sourceIndex] && relatedTask[sourceIndex].id === ui.item.sortable.model.id) {
scope.relatedTasks[idx] = tasks;
}
});
scope.dirty = true;
}
};
scope.updateTaskSequence = function (task) {
// Validate tasks
if (task.realObject.mainSequence <= 0 || isNaN(task.realObject.mainSequence) || _.isEmpty(task.realObject.mainSequence)) {
task.realObject.mainSequence = 1;
}
else {
task.realObject.mainSequence = parseInt(task.realObject.mainSequence);
}
if (task.realObject.status.value !== 'Staged') {
task.realObject.status.value = 'Staged';
}
var relatedTasks = angular.copy(scope.relatedTasks), allTasksClosed = true;
var closedTask = _.find(relatedTasks, function (relatedTask, count) {
if (relatedTask.length) {
var isClosed;
_.find(relatedTask, function (groupTask) {
if (task.realObject.mainSequence <= groupTask.realObject.mainSequence
&& (groupTask.realObject.status.value === 'Closed' || groupTask.realObject.status.value === 'Bypassed')) {
isClosed = true;
}
else {
isClosed = false;
}
});
return isClosed;
}
if (task.realObject.mainSequence <= relatedTask.realObject.mainSequence
&& (relatedTask.realObject.status.value === 'Closed' || relatedTask.realObject.status.value === 'Bypassed')) {
return true;
}
else {
allTasksClosed = false;
return false;
}
});
if (closedTask && allTasksClosed) {
task.realObject.mainSequence = closedTask.length ? closedTask[0].realObject.mainSequence + 1
: closedTask.realObject.mainSequence + 1;
}
var activeTask = _.find(relatedTasks, function (relatedTask) {
if (relatedTask.length) {
var isActive;
_.find(relatedTask, function (groupTask) {
if (task.realObject.mainSequence <= groupTask.realObject.mainSequence
&& groupTask.realObject.status.value !== 'Closed'
&& groupTask.realObject.status.value !== 'Bypassed'
&& groupTask.realObject.status.value !== 'Staged') {
isActive = true;
}
else {
isActive = false;
}
});
return isActive;
}
return task.realObject.mainSequence <= relatedTask.realObject.mainSequence
&& relatedTask.realObject.status.value !== 'Closed'
&& relatedTask.realObject.status.value !== 'Bypassed'
&& relatedTask.realObject.status.value !== 'Staged';
});
if (activeTask) {
//task.editable = false;
task.realObject.status.value = 'Pending';
task.realObject.mainSequence = activeTask.length ? activeTask[0].realObject.mainSequence
: activeTask.realObject.mainSequence;
}
var taskIndex = _.findIndex(relatedTasks, function (relatedTask) {
if (relatedTask.length) {
relatedTask = relatedTask[0];
}
return task.id === relatedTask.id;
});
relatedTasks[taskIndex] = task;
// Sort tasks
relatedTasks.sort(function (task1, task2) {
return (task1.length ? task1[0].realObject.mainSequence : task1.realObject.mainSequence)
- (task2.length ? task2[0].realObject.mainSequence : task2.realObject.mainSequence);
});
$timeout(function () {
scope.relatedTasks = relatedTasks;
}, 2000);
scope.dirty = true;
};
scope.updateParentSequence = function (tasks) {
// Validate tasks
if (tasks[0].realObject.mainSequence <= 0 || isNaN(tasks[0].realObject.mainSequence) || _.isEmpty(tasks[0].realObject.mainSequence)) {
tasks[0].realObject.mainSequence = 1;
}
else {
tasks[0].realObject.mainSequence = parseInt(tasks[0].realObject.mainSequence);
}
if (tasks[0].realObject.status.value !== 'Staged') {
tasks[0].realObject.status.value = 'Staged';
}
var relatedTasks = angular.copy(scope.relatedTasks);
var changeSeqNum = tasks[0].realObject.mainSequence;
var activeList = getActiveDetails(relatedTasks);
var setActiveMainSeq = false;
_.forEach(activeList, function (val) {
if (tasks[0].realObject.mainSequence <= val) {
changeSeqNum = val;
setActiveMainSeq = true;
return false;
}
});
//update all child task mainSequence
var i = 0;
while (i < tasks.length) {
tasks[i].realObject.mainSequence = changeSeqNum;
i++;
}
if (activeList && activeList.length && setActiveMainSeq) {
//tasks[0].editable = false;
tasks[0].realObject.status.value = 'Pending';
tasks[0].realObject.mainSequence = activeList[0];
}
// Update child tasks
var mainSequence = tasks[0].realObject.mainSequence;
var childSequence = mainSequence + '.' + tasks[0].realObject.sequence;
var status = tasks[0].realObject.status.value;
var editable = tasks[0].editable;
_.forEach(tasks, function (task) {
task.realObject.mainSequence = mainSequence;
task.realObject.childSequence = mainSequence + '.' + task.realObject.sequence;
if (childSequence === task.realObject.childSequence) {
task.realObject.status.value = status;
task.editable = editable;
}
});
var taskIndex = _.findIndex(relatedTasks, function (relatedTask) {
if (relatedTask.length) {
relatedTask = relatedTask[0];
}
return tasks[0].id === relatedTask.id;
});
relatedTasks[taskIndex] = tasks;
// Sort tasks
relatedTasks.sort(function (task1, task2) {
return (task1.length ? task1[0].realObject.mainSequence : task1.realObject.mainSequence)
- (task2.length ? task2[0].realObject.mainSequence : task2.realObject.mainSequence);
});
$timeout(function () {
scope.relatedTasks = relatedTasks;
}, 2000);
scope.dirty = true;
};
function revertTaskState(childTask, originalMainSeq) {
childTask.realObject.childSequence = originalMainSeq + '.' + childTask.realObject.sequence;
}
scope.updateChildSequence = function (tasks, childTask, taskGroupChildTaskID, originalMainSeq) {
var splitedTask = childTask.realObject.childSequence.split('.');
var mainSequencePart = splitedTask[0];
var sequencePart = splitedTask[1];
var dotCount = (childTask.realObject.childSequence.match(/\./g) || []).length;
// Validate tasks
if (!mainSequencePart || dotCount !== 1) {
//revert to original state
revertTaskState(childTask, originalMainSeq);
return;
}
if (sequencePart && dotCount === 1) {
childTask.realObject.mainSequence = originalMainSeq;
childTask.realObject.sequence = isNaN(sequencePart) || _.isEmpty(sequencePart) || sequencePart <= 0
? childTask.realObject.sequence : parseInt(sequencePart);
if (childTask.realObject.status.value !== 'Staged') {
childTask.realObject.status.value = 'Staged';
}
var closedTask = _.find(tasks, function (relatedTask) {
return childTask.realObject.sequence <= relatedTask.realObject.sequence
&& (relatedTask.realObject.status.value === 'Closed' || relatedTask.realObject.status.value === 'Bypassed');
});
if (closedTask) {
childTask.realObject.sequence = closedTask.realObject.sequence + 1;
}
var activeTask = _.find(tasks, function (relatedTask) {
return childTask.realObject.sequence <= relatedTask.realObject.sequence
&& relatedTask.realObject.status.value !== 'Closed'
&& relatedTask.realObject.status.value !== 'Bypassed'
&& relatedTask.realObject.status.value !== 'Staged';
});
if (activeTask) {
//childTask.editable = false;
childTask.realObject.status.value = 'Pending';
childTask.realObject.sequence = activeTask.realObject.sequence;
}
// Update child tasks
var mainSequence = childTask.realObject.mainSequence;
var childSequence = mainSequence + '.' + childTask.realObject.sequence;
var status = childTask.realObject.status.value;
_.forEach(tasks, function (task) {
task.realObject.mainSequence = mainSequence;
task.realObject.childSequence = mainSequence + '.' + task.realObject.sequence;
if (childSequence === task.realObject.childSequence) {
task.realObject.status.value = status;
}
});
// Sort tasks
var relatedTasks = angular.copy(scope.relatedTasks);
var taskIndex = _.findIndex(relatedTasks, function (relatedTask) {
if (relatedTask.length) {
relatedTask = relatedTask[0];
}
return tasks[0].id === relatedTask.id;
});
tasks = _.sortBy(angular.copy(tasks), 'realObject.sequence');
relatedTasks[taskIndex] = tasks;
relatedTasks.sort(function (task1, task2) {
return (task1.length ? task1[0].realObject.mainSequence : task1.realObject.mainSequence)
- (task2.length ? task2[0].realObject.mainSequence : task2.realObject.mainSequence);
});
$timeout(function () {
scope.relatedTasks = relatedTasks;
resetFocusToChildTask();
}, 2000);
scope.dirty = true;
function resetFocusToChildTask() {
$timeout(function () {
var elem = element.find('#' + taskGroupChildTaskID);
elem[0].focus();
});
}
}
else {
scope.dirty = false;
}
};
scope.setFocus = function (event) {
var focusTarget = event.target;
focusTarget.focus();
};
scope.onSaveClick = function () {
var tasks = [];
_.forEach(scope.relatedTasks, function (relatedTask) {
if (relatedTask.length) {
_.forEach(relatedTask, function (childTask) {
var originalTask = _.find(scope.originalTasks, function (relatedTaskCopy) {
return relatedTaskCopy.id === childTask.id;
});
if (originalTask.realObject.mainSequence !== childTask.realObject.mainSequence
|| originalTask.realObject.sequence !== childTask.realObject.sequence) {
var sequence = null;
if (childTask.realObject.taskGroupType === 'Sequencing'
&& originalTask.realObject.sequence !== childTask.realObject.sequence) {
sequence = childTask.realObject.sequence;
}
var task = {
parentId: childTask.parentId,
parentType: childTask.realObject.parentType,
parentName: childTask.realObject.parentName,
parentDisplayId: childTask.realObject.parentDisplayId,
company: childTask.realObject.company,
taskGroupId: childTask.realObject.taskGroupId,
mainSequence: childTask.realObject.mainSequence,
sequence: sequence,
id: childTask.id
};
tasks.push(task);
}
});
}
else {
var originalTask = _.find(scope.originalTasks, function (origTask) {
return origTask.id === relatedTask.id;
});
if (originalTask.realObject.mainSequence !== relatedTask.realObject.mainSequence) {
var task = {
parentId: relatedTask.parentId,
parentType: relatedTask.realObject.parentType,
parentName: relatedTask.realObject.parentName,
parentDisplayId: relatedTask.realObject.parentDisplayId,
company: relatedTask.realObject.company,
mainSequence: relatedTask.realObject.mainSequence,
sequence: relatedTask.realObject.mainSequence,
id: relatedTask.id
};
tasks.push(task);
}
}
});
if (tasks.length) {
state.processing = true;
relationModel.updateTaskSequence(tasks)
.then(function (results) {
var allCurrentRelatedTasks = angular.copy(_.flatten(scope.relatedTasks));
_.forEach(results, function (result) {
//find method returns referenced object
var task = _.find(allCurrentRelatedTasks, { 'id': result.responseObject.id });
if (result.statusInfo.type === 'Success' && result.responseObject.id === task.id) {
task.realObject.status.value = result.responseObject.status.value;
task.realObject.sequence = result.responseObject.sequence;
if (task.realObject.status.value !== 'Staged') {
task.editable = false;
}
}
});
scope.originalTasks = allCurrentRelatedTasks;
_.remove(relationModel.cache[ticket.id], { type: EntityVO.TYPE_TASK });
_.forEach(allCurrentRelatedTasks, function (item) {
relationModel.cache[ticket.id].push(new RelationItemVO().build(item));
});
}).catch(function (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}).finally(function () {
state.processing = false;
scope.dirty = false;
});
}
};
scope.onRevertClick = function () {
scope.relatedTasks = angular.copy(originalTasks);
scope.dirty = false;
};
function initAlertForDirty() {
scope.$on('$stateChangeStart', function (event, toState, toParams) {
if (scope.dirty) {
event.preventDefault();
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.notification.dirty.button1'),
data: {
stateName: toState.name,
stateParams: toParams
}
},
{
text: i18nService.getLocalizedString('common.notification.dirty.button2')
}
]
});
modalInstance.result.then(function (data) {
if (!_.isEmpty(data)) {
scope.dirty = false;
$state.transitionTo(data.stateName, data.stateParams);
}
});
}
});
}
if (!ticket.isDraft) {
relationModel.getRelations(ticket.id, ticket.type).finally(function () {
state.loadingTaskResources = false;
});
}
scope.createBlankTask = function () {
if (scope.dirty) {
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.notification.dirty.button1'),
data: true
},
{
text: i18nService.getLocalizedString('common.notification.dirty.button2'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
scope.dirty = false;
if (pwaModel.isPwaEnabled()) {
createBlankTaskPV();
}
else {
createBlankTask();
}
}
});
}
else {
if (pwaModel.isPwaEnabled()) {
createBlankTaskPV();
}
else {
createBlankTask();
}
}
};
function createBlankTaskPV() {
pwaModel.taskFrom = 'Scratch';
ticketModel.taskParent = scope.ticket;
var modalInstance = $modal.open({
templateUrl: 'views/create/create-taskPV-v2.html',
controller: 'PwaTicketController',
windowClass: 'ticket__open-modal',
backdrop: false,
keyboard: false
});
modalInstance.result.then(function () {
refreshRelations();
element.find('button.profile-relation__add-relation-button').focus();
scope.$emit(events.TICKET_PROFILE_RESEND_EVENT, { eventName: events.REFRESH_ACTIVITY_FEED });
scope.$emit(events.RELATIONS_UPDATE_COMPLETE, true);
}, function () {
element.find('button.profile-relation__add-relation-button').focus();
});
var deregister = scope.$on(events.PWA_TASK_MODAL, function (event, data) {
if (data.taskCreated) {
modalInstance.close();
}
else {
modalInstance.dismiss();
}
deregister();
});
}
scope.getURLforTaskFlow = function () {
state.processing = true;
var urlId = ticket.id;
var jsonREST = {
"rootRequestId": ticket.displayId,
"taskParentType": ticket.type,
"summary": ticket.summary
};
ticketModel.getURLforTaskFlow(urlId, jsonREST).finally(function () {
state.processing = false;
});
};
function createBlankTask() {
ticketModel.taskParent = scope.ticket;
objectValueMapperService.shelveAsParent(scope.ticket.type);
var modalInstance = $modal.open({
templateUrl: 'views/create/create-task-v2.html',
controller: 'CreateTaskV2Controller',
windowClass: 'ticket__open-modal',
backdrop: false,
keyboard: false
});
modalInstance.result.then(function () {
objectValueMapperService.unshelveParent(scope.ticket.type); //parent ticket fields get cleared while creating task
refreshRelations();
element.find('button.profile-relation__add-relation-button').focus();
scope.$emit(events.TICKET_PROFILE_RESEND_EVENT, { eventName: events.REFRESH_ACTIVITY_FEED });
scope.$emit(events.RELATIONS_UPDATE_COMPLETE, true);
}, function () {
objectValueMapperService.unshelveParent(scope.ticket.type);
element.find('button.profile-relation__add-relation-button').focus();
});
}
scope.createTaskFromTemplate = function () {
if (scope.dirty) {
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.notification.dirty.button1'),
data: true
},
{
text: i18nService.getLocalizedString('common.notification.dirty.button2'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
scope.dirty = false;
if (pwaModel.isPwaEnabled()) {
createTaskFromTemplatePV();
}
else {
createTaskFromTemplate();
}
}
});
}
else {
if (pwaModel.isPwaEnabled()) {
createTaskFromTemplatePV();
}
else {
createTaskFromTemplate();
}
}
};
function createTaskFromTemplatePV() {
pwaModel.taskFrom = 'Template';
ticketModel.taskParent = scope.ticket;
var modalInstance = $modal.open({
templateUrl: 'views/create/create-taskPV-v2.html',
windowClass: 'action-blade',
controller: 'PwaTicketController',
backdrop: 'custom'
});
modalInstance.result.then(function () {
refreshRelations();
element.find('button.profile-relation__add-relation-button').focus();
scope.$emit(events.TICKET_PROFILE_RESEND_EVENT, { eventName: events.REFRESH_ACTIVITY_FEED });
}, function () {
element.find('button.profile-relation__add-relation-button').focus();
});
var deregister = scope.$on(events.PWA_TASK_MODAL, function (event, data) {
if (data.taskCreated) {
modalInstance.close();
}
else {
modalInstance.dismiss();
}
deregister();
});
}
function createTaskFromTemplate() {
ticketModel.taskParent = scope.ticket;
var modalInstance = $modal.open({
templateUrl: 'views/template/browse-task-template-action-blade.html',
windowClass: 'action-blade',
controller: 'BrowseTaskTemplateController',
backdrop: 'custom',
resolve: {
isFromBrowseTemplate: function () {
return false;
}
}
});
modalInstance.result.then(function () {
refreshRelations();
element.find('button.profile-relation__add-relation-button').focus();
scope.$emit(events.TICKET_PROFILE_RESEND_EVENT, { eventName: events.REFRESH_ACTIVITY_FEED });
}, function () {
element.find('button.profile-relation__add-relation-button').focus();
});
}
function refreshRelations() {
var draftRelationData;
if (scope.ticket.isDraft) {
draftRelationData = relationModel.cache[ticket.id];
}
state.processing = true;
relationModel.refreshRelations(ticket.id, ticket.type).finally(function () {
state.processing = false;
if (draftRelationData) {
_.forEach(draftRelationData, function (relationItem) {
var item = _.find(relationModel.cache[ticket.id], { id: relationItem.id });
if (!item) {
relationModel.cache[scope.ticket.id].push(relationItem);
}
});
}
});
}
scope.state = state;
}
};
}]);
}());