161 lines
8.1 KiB
JavaScript
161 lines
8.1 KiB
JavaScript
"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();
|
|
}
|
|
]);
|
|
})();
|