"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(); }]); })();