Hi ,
We have added a new option i.e. Cancel under Action on Incident Standard Ticket Actions widget by customising the OOB widget. And its working fine i.e. when a user select this option the incident is getting cancelled.
Can anyone suggests how I can open a modal window for a user to fill the cancellation reason when user is trying to cancel the incident.
HTML:
<div>
<div class="dropdown" id="child-case-tabs" ng-if="data.showActions">
<button type="button" id="actions-button" class="btn btn-default dropdown-toggle action-btn" data-toggle="dropdown" style="width : 100%" aria-haspopup="true" ng-init="setFocusOnActionButtons()">
${Actions}
<span class="fa fa-caret-down"></span>
</button>
<ul class="dropdown-menu pull-right" id="actionList">
<li ng-if="data.canResolve">
<a href="javascript:void(0)" ng-click="$event.stopPropagation();resolveIncident()">${Resolve}</a>
</li>
<li ng-if="data.canReopen">
<a href="javascript:void(0)" ng-click="$event.stopPropagation();reopenIncident()">${Reopen}</a>
</li>
<li ng-if="data.canClose">
<a href="javascript:void(0)" ng-click="$event.stopPropagation();closeIncident()">${Close}</a>
</li>
<li ng-if="data.canCancel">
<a href="javascript:void(0)" ng-click="$event.stopPropagation();cancelIncident()">${Cancel}</a>
</li>
</ul>
</div>
</div>
Client script:
function incidentTicketActions($scope, $http, spUtil, $timeout, spModal, i18n, $window, $uibModal, spAriaUtil) {
/* widget controller */
var c = this;
c.doneLoading = false;
c.resolvedIncidentMsg = "${Resolved Incident}";
c.closedIncidentMsg = "${Closed Incident}";
c.reopenedIncidentMsg = "${Reopened Incident}";
c.cancelIncidentMsg = "${Canceled Incident}";
var MOBILE_DEVICE_SCREEN_WIDTH = 767;
$scope.mobileDevice = c.data.isMobile || ($window.innerWidth < MOBILE_DEVICE_SCREEN_WIDTH);
$scope.resolveIncident = function() {
$scope.data.action = 'resolveIncident';
$scope.server.update(init).then(function(response){
if (response.isIncidentResolved)
spAriaUtil.sendLiveMessage(c.resolvedIncidentMsg);
});
$scope.$emit('focusOnActions', {"isFocusRequired": true});
};
$scope.closeIncident = function() {
$scope.data.action = 'closeIncident';
$scope.server.update(init).then(function(response){
if (response.isIncidentClosed)
spAriaUtil.sendLiveMessage(c.closedIncidentMsg);
});
var elm = document.getElementById('short-desc')
elm.focus();
};
$scope.reopenIncident = function() {
$scope.data.action = 'reopenIncident';
$scope.server.update(init).then(function(response){
if (response.isIncidentReopened)
spAriaUtil.sendLiveMessage(c.reopenedIncidentMsg);
});
$scope.$emit('focusOnActions', {"isFocusRequired": true});
};
$scope.cancelIncident = function() {
$scope.data.action = 'cancelIncident';
$scope.server.update(init).then(function(response){
if (response.isIncidentCanceled)
spAriaUtil.sendLiveMessage(c.cancelIncidentMsg);
});
$scope.$emit('focusOnActions', {"isFocusRequired": true});
};
function init() {}
$(document).on('click', 'div.modal-footer button.btn, ul#child-case-tabs .dropdown-menu', function(e) {
e.stopPropagation();
});
$(document).bind('dragover drop', function(event) {
event.preventDefault();
return false;
});
$scope.$on('sp_loading_indicator', function(e, value) {
if (!value && !c.doneLoading) {
c.doneLoading = true;
}
});
}
Server Script:
(function() {
var incidentGr = new GlideRecord('incident');
var incidentSysId = options.sys_id;
if (!incidentSysId && $sp.getParameter('table') == 'incident')
incidentSysId = $sp.getParameter('sys_id');
if (!incidentSysId && $sp.getParameter('table') == 'universal_request') {
var urGr = new GlideRecord('universal_request');
urGr.get($sp.getParameter('sys_id'));
incidentSysId = urGr.primary_task + "";
}
/* Actions - Start */
if (input && input.action == 'resolveIncident' && incidentGr.get(incidentSysId)) {
incidentGr.incident_state = global.IncidentState.RESOLVED;
incidentGr.state = global.IncidentState.RESOLVED;
incidentGr.resolved_by = gs.getUserID();
data.isIncidentResolved = incidentGr.update();
}
if (input && input.action == 'reopenIncident' && incidentGr.get(incidentSysId)) {
incidentGr.incident_state = global.IncidentState.IN_PROGRESS;
incidentGr.state = global.IncidentState.IN_PROGRESS;
data.isIncidentReopened = incidentGr.update();
gs.addInfoMessage(gs.getMessage("Request reopened"));
}
if (input && input.action == 'closeIncident' && incidentGr.get(incidentSysId)) {
incidentGr.incident_state = global.IncidentState.CLOSED;
incidentGr.state = global.IncidentState.CLOSED;
data.isIncidentClosed = incidentGr.update();
}
if (input && input.action == 'cancelIncident' && incidentGr.get(incidentSysId)) {
incidentGr.incident_state = global.IncidentState.CANCELED;
incidentGr.state = global.IncidentState.CANCELED;
data.isIncidentCanceled = incidentGr.update();
}
/* Actions - End */
/* Load incident data */
if (incidentGr.get(incidentSysId)) {
var incidentUtils = new global.IncidentUtils();
data.canResolve = incidentUtils.canResolveIncident(incidentGr);
//data.canReopen = incidentUtils.canReopenIncident(incidentGr);
data.canReopen = incidentGr.state == '6';
data.canClose = incidentUtils.canCloseIncident(incidentGr);
data.canCancel = incidentGr.active == true && incidentGr.state < '6' && (incidentGr.caller_id == gs.getUserID() || incidentGr.opened_by == gs.getUserID());
data.showActions = data.canResolve || data.canReopen || data.canClose || data.canCancel;
}
data.i18n = {};
})();