253 lines
14 KiB
JavaScript
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();
|
|
}]);
|
|
})();
|