SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/create/create-activity-controller.js

253 lines
14 KiB
JavaScript

"use strict";
/**
* Created by andey on 07-12-2016.
*/
(function () {
angular.module('createTicketModule')
.controller('CreateActivityController', ['$scope', '$rootScope', '$modal', '$modalInstance', 'createTicketModel', 'ticketModel',
'metadataModel', 'userModel', 'ticketActionService', 'systemAlertService', 'configurationModel', '$filter', 'utilityFunctions',
function ($scope, $rootScope, $modal, $modalInstance, createTicketModel, ticketModel, metadataModel, userModel, ticketActionService, systemAlertService, configurationModel, $filter, utilityFunctions) {
var parent, draftTicket = {
today: new Date(),
type: EntityVO.TYPE_ACTIVITY,
autoAssignAssignee: true,
customFields: {},
showDates: false,
scheduledStartDatePicker: { open: false },
actualStartDatePicker: { open: false },
scheduledEndDatePicker: { open: false },
actualEndDatePicker: { open: false }
}, activityMetadata = {};
$scope.siteOptions = {
company: {
visible: false,
attribute: 'companyName'
},
region: {
attribute: 'region'
},
siteGroup: {
attribute: 'siteGroup'
},
site: {
attribute: 'name'
}
};
$scope.datePickerOptions = {
startingDay: configurationModel.getWeekStartingDay(),
'show-weeks': false,
minDate: moment().year(1970).month(0).date(2),
maxDate: moment().year(2038).month(0).date(18)
};
$scope.showMeridian = window.showMeridian;
$scope.draftCreated = false;
function init() {
$scope.state = {
dataIsLoading: true,
searchingPersons: false
};
$scope.draftCreated = false;
$scope.formContainsInvalidFields = createTicketModel.formContainsInvalidFields;
$scope.draftTicket = draftTicket;
$scope.activityMetadata = activityMetadata;
$scope.loggedInUserId = userModel.decodedUserId || userModel.userId;
createTicketModel.currentTicket = $scope.draftTicket;
parent = ticketModel.activityParent;
if (parent) {
$scope.draftTicket.summary = parent.summary;
$scope.draftTicket.desc = parent.desc;
$scope.draftTicket.parentId = parent.displayId;
$scope.draftTicket.parentGuid = parent.id;
$scope.draftTicket.company = parent.company;
$scope.draftTicket.location = parent.location;
if (_.isObject(parent.milestone)) {
$scope.draftTicket.milestone = parent.milestone;
}
else {
$scope.draftTicket.milestone = { name: parent.milestone };
}
if (parent.noOfRelatedItems[$scope.draftTicket.milestone.name]) {
$scope.draftTicket.sequence = parent.noOfRelatedItems[$scope.draftTicket.milestone.name] + 1;
}
else {
$scope.draftTicket.sequence = 1;
}
}
metadataModel.getMetadataByType(EntityVO.TYPE_ACTIVITY).then(function (metadata) {
angular.extend(activityMetadata, metadata);
$scope.draftTicket.selectedPriority = _.last(activityMetadata.priorities);
$scope.draftTicket.priority = parent.priority ? _.find(activityMetadata.priorities, { 'name': angular.isObject(parent.priority) ? parent.priority.name : parent.priority }) : {};
}).finally(function () {
$scope.state.dataIsLoading = false;
});
ticketModel.getDraft(EntityVO.TYPE_ACTIVITY).then(function (response) {
response.parentId = $scope.draftTicket.parentId;
response.parentGuid = $scope.draftTicket.parentGuid;
if (_.isObject($scope.draftTicket.company)) {
if ($scope.draftTicket.location) {
$scope.draftTicket.location.companyName = $scope.draftTicket.company.name;
}
else {
$scope.draftTicket.location = {
companyName: $scope.draftTicket.company.name
};
}
response.location = $scope.draftTicket.location;
response.company = $scope.draftTicket.company;
}
$scope.draftTicket = angular.extend($scope.draftTicket, response);
$scope.draftCreated = true;
});
}
function handleAssignment($event, role) {
var currentAssignment = {
supportGroup: $scope.draftTicket.supportGroup,
assignee: $scope.draftTicket.assignee,
company: $scope.draftTicket.company,
locationCompany: $scope.draftTicket.company,
type: EntityVO.TYPE_ACTIVITY
};
ticketActionService.showAssignDialog(currentAssignment, true, role).result.then(function (result) {
completeAssignment(result);
$event.currentTarget.focus();
}, function () {
$event.currentTarget.focus();
});
}
function updateAssignment(person) {
var response = {};
response.assignee = { id: person.id, loginId: person.loginId, fullName: person.fullName };
response.group = { id: person.supportGroupId, name: person.supportGroup, organization: person.organization, company: person.company };
completeAssignment(response);
}
function completeAssignment(result) {
if (result.autoAssign) {
$scope.draftTicket.autoAssignAssignee = true;
$scope.draftTicket.assignee = {};
$scope.draftTicket.supportGroup = {};
}
else {
$scope.draftTicket.autoAssignAssignee = false;
if (result.assignee) {
$scope.draftTicket.assignee = result.assignee;
}
if (result.group) {
$scope.draftTicket.supportGroup = result.group;
}
}
}
$scope.getListPersons = function (type, term) {
$scope.state.searchingPersons = true;
return createTicketModel.getList(type, term).then(function (response) {
$scope.state.searchingPersons = false;
return response;
});
};
$scope.openDatePicker = function (calendar, event) {
calendar.open = true;
event.stopPropagation();
};
$scope.updateDateTime = function (type) {
if (($scope.draftTicket[type + 'StartDate'] && !$scope.draftTicket[type + 'StartTime']) || (!$scope.draftTicket[type + 'StartDate'] && $scope.draftTicket[type + 'StartTime'])) {
$scope.draftTicket[type + 'StartTime'] = _.clone($scope.draftTicket[type + 'StartDate']);
}
if (($scope.draftTicket[type + 'EndDate'] && !$scope.draftTicket[type + 'EndTime']) || (!$scope.draftTicket[type + 'EndDate'] && $scope.draftTicket[type + 'EndTime'])) {
$scope.draftTicket[type + 'EndTime'] = _.clone($scope.draftTicket[type + 'EndDate']);
}
if ($scope.draftTicket[type + 'StartDate'] && $scope.draftTicket[type + 'EndDate']) {
var startTime = moment($scope.draftTicket[type + 'StartTime']);
var startDateTime = moment($scope.draftTicket[type + 'StartDate']).set('hours', startTime.get('hours')).set('minutes', startTime.get('minutes')).format('X');
var endTime = moment($scope.draftTicket[type + 'EndTime']);
var endDateTime = moment($scope.draftTicket[type + 'EndDate']).set('hours', endTime.get('hours')).set('minutes', endTime.get('minutes')).format('X');
if (endDateTime < startDateTime) {
$scope.createActivityForm[type + 'EndDate'].$setValidity('validScheduledEndDateTime', false);
}
else {
$scope.createActivityForm[type + 'EndDate'].$setValidity('validScheduledEndDateTime', true);
}
}
if (!$scope.draftTicket[type + 'StartDate'] && $scope.draftTicket[type + 'EndDate']) {
$scope.createActivityForm[type + 'StartDate'].$setValidity('validScheduledStartDateTime', false);
}
else {
$scope.createActivityForm[type + 'StartDate'].$setValidity('validScheduledStartDateTime', true);
}
};
$scope.cancel = function () {
$modalInstance.dismiss();
};
$scope.assign = function ($event) {
var currentAssignment = {
supportGroup: $scope.draftTicket.supportGroup,
assignee: $scope.draftTicket.assignee,
company: $scope.draftTicket.company,
locationCompany: $scope.draftTicket.company,
type: EntityVO.TYPE_ACTIVITY
};
ticketActionService.showAssignDialog(currentAssignment, true).result.then(function (result) {
if (result.autoAssign) {
$scope.draftTicket.autoAssignAssignee = true;
$scope.draftTicket.assignee = {};
$scope.draftTicket.supportGroup = {};
}
else {
$scope.draftTicket.autoAssignAssignee = false;
if (result.assignee) {
$scope.draftTicket.assignee = result.assignee;
}
if (result.group) {
$scope.draftTicket.supportGroup = result.group;
}
}
$event.currentTarget.focus();
}, function () {
$event.currentTarget.focus();
});
};
$scope.assignToMe = function ($event, role) {
var assigneeRole = ''; //No assignee role for Activity
var assigneeSupportGroup = $scope.draftTicket.supportGroup;
var locationCompany = null, customerCompany, primaryCompany = $scope.draftTicket.company;
primaryCompany = primaryCompany ? primaryCompany.name : '';
customerCompany = ($scope.draftTicket.customer && $scope.draftTicket.customer.company) ? $scope.draftTicket.customer.company.name : ($scope.draftTicket.company ? $scope.draftTicket.company.name : '');
locationCompany = $scope.draftTicket.location && $scope.draftTicket.location.companyName ? $scope.draftTicket.location.companyName : null;
ticketModel.getTicketAssigneePersonsBySearchText(assigneeRole, customerCompany, locationCompany, null, primaryCompany, null).then(function (persons) {
persons = _.uniqBy(persons.results, function (person) {
return person.loginId && person.supportGroupId;
});
var person = persons.length === 1 ? persons[0] : _.find(persons, { supportGroupId: assigneeSupportGroup.id });
if (person && person.loginId) {
updateAssignment(person);
}
else {
handleAssignment($event, role);
}
});
};
$scope.createActivity = function () {
$scope.state.dataIsLoading = true;
if ($rootScope.timezone) {
$scope.draftTicket.scheduledStartDate = !$scope.draftTicket.scheduledStartDate ? $scope.draftTicket.scheduledStartDate
: utilityFunctions.convertToUserPreferenceTimezone($scope.draftTicket.scheduledStartDate, $rootScope.timezone);
$scope.draftTicket.scheduledEndDate = !$scope.draftTicket.scheduledEndDate ? $scope.draftTicket.scheduledEndDate
: utilityFunctions.convertToUserPreferenceTimezone($scope.draftTicket.scheduledEndDate, $rootScope.timezone);
$scope.draftTicket.actualStartDate = !$scope.draftTicket.actualStartDate ? $scope.draftTicket.actualStartDate
: utilityFunctions.convertToUserPreferenceTimezone($scope.draftTicket.actualStartDate, $rootScope.timezone);
$scope.draftTicket.actualEndDate = !$scope.draftTicket.actualEndDate ? $scope.draftTicket.actualEndDate
: utilityFunctions.convertToUserPreferenceTimezone($scope.draftTicket.actualEndDate, $rootScope.timezone);
}
createTicketModel.createActivity().then(function () {
$modalInstance.close(parent);
$scope.state.dataIsLoading = false;
}).catch(function (error) {
$scope.state.dataIsLoading = false;
systemAlertService.error({
text: error.errorCode ? $filter('i18n')('error.unknown') : error.data.error,
clear: false
});
});
};
init();
}]);
})();