"use strict"; (function () { 'use strict'; angular.module('createTicketModule') .controller('CreateBroadcastController', ['$scope', '$state', 'configurationModel', 'createTicketModel', 'i18nService', 'systemAlertService', 'metadataModel', '$timeout', '$filter', function ($scope, $state, configurationModel, createTicketModel, i18nService, systemAlertService, metadataModel, $timeout, $filter) { var now = new Date().getTime(), broadcast = { today: now, hasCreated: false, broadcastStartDatePicker: { open: false }, broadcastEndDatePicker: { open: false }, type: EntityVO.TYPE_BROADCAST }, broadcastMetadata; function init() { $scope.state = { dataIsLoading: false }; $scope.isNew = true; $scope.formContainsInvalidFields = createTicketModel.formContainsInvalidFields; createTicketModel.currentTicket = broadcast; $scope.broadcast = broadcast; $scope.broadcastMetadata = broadcastMetadata = {}; $scope.datePickerOptions = { startingDay: configurationModel.getWeekStartingDay(), 'show-weeks': false }; initAlertForDirtyForm(); metadataModel.getMetadataByType(EntityVO.TYPE_BROADCAST).then(function (metadata) { angular.extend(broadcastMetadata, metadata); broadcast.priority = _.last(broadcastMetadata.priorities); broadcast.broadcastType = _.last(broadcastMetadata.types); broadcast.visibility = _.last(broadcastMetadata.visibilities); }); } $scope.getList = function (type, term) { return createTicketModel.getList(type, term).then(function (response) { $scope.state.exceedsAudienceChunkSize = response.exceedsChunkSize; $scope.state.isAudienceTooltipOpen = response.exceedsChunkSize; $timeout(function () { $scope.state.isAudienceTooltipOpen = false; }, 10000); return response.list; }); }; $scope.closeTooltip = function () { $scope.state.isAudienceTooltipOpen = false; }; $scope.$watch('broadcast.audience', function (newValue) { if (newValue && _.isObject(newValue)) { if (newValue.attributeMap && newValue.attributeMap.companyName) { broadcast.siteName = newValue.name; broadcast.companyName = newValue.attributeMap.companyName; } else { broadcast.companyName = newValue.name; broadcast.siteName = ''; } $scope.createBroadcastForm.audience.$setValidity('audience', true); } else { $scope.createBroadcastForm.audience.$setValidity('audience', false); } }); $scope.clearAudience = function () { if (broadcast.siteName) { broadcast.siteName = ''; broadcast.companyName = ''; } else if (broadcast.companyName) { broadcast.companyName = ''; } broadcast.audience = ''; }; $scope.updateDateTime = function (key) { if (key) { if ((broadcast[key + 'Date'] && !broadcast[key + 'Time']) || (!broadcast[key + 'Date'] && broadcast[key + 'Time'])) { broadcast[key + 'Time'] = _.clone(broadcast[key + 'Date']); } } if (broadcast.broadcastStartDate && broadcast.broadcastEndDate) { var startTime = moment(broadcast.broadcastStartTime); var startDateTime = moment(broadcast.broadcastStartDate).set('hours', startTime.get('hours')).set('minutes', startTime.get('minutes')).format('X'); var endTime = moment(broadcast.broadcastEndTime); var endDateTime = moment(broadcast.broadcastEndDate).set('hours', endTime.get('hours')).set('minutes', endTime.get('minutes')).format('X'); if (endDateTime <= startDateTime) { $scope.createBroadcastForm.broadcastEndDate.$setValidity('validEndDateTime', false); } else { $scope.createBroadcastForm.broadcastEndDate.$setValidity('validEndDateTime', true); } } if (!broadcast.broadcastStartDate && broadcast.broadcastEndDate) { $scope.createBroadcastForm.broadcastStartDate.$setValidity('validStartDateTime', false); } else { $scope.createBroadcastForm.broadcastStartDate.$setValidity('validStartDateTime', true); } }; $scope.createBroadcast = function () { $scope.state.dataIsLoading = true; createTicketModel.createBroadcast().then(function () { broadcast.hasCreated = true; $timeout(function () { systemAlertService.success({ text: i18nService.getLocalizedString('create.broadcast.created'), hide: 10000 }); }); $state.go('dashboard'); }).catch(function (error) { $scope.state.dataIsLoading = false; systemAlertService.error({ text: error.errorCode ? $filter('i18n')('error.unknown') : error.data.error, clear: false }); }); }; $scope.cancel = function () { $state.go('dashboard'); }; $scope.openDatePicker = function (calendar) { calendar.open = true; }; var isFormDirty = function () { return $scope.createBroadcastForm.$dirty || !_.isEmpty(broadcast.attachments); }; function initAlertForDirtyForm() { $scope.$on('$stateChangeStart', function (event, toState, toParams) { if (!broadcast.hasCreated && isFormDirty() && toState.name !== EntityVO.TYPE_BROADCAST) { 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.labels.yes'), data: { stateName: toState.name, stateParams: toParams } }, { text: i18nService.getLocalizedString('common.labels.no') } ] }); modalInstance.result.then(function (data) { if (!_.isEmpty(data)) { createTicketModel.currentTicket = broadcast = {}; $scope.createBroadcastForm.$setPristine(); $state.transitionTo(data.stateName, data.stateParams); } }); } }); } init(); } ]); })();