Skip to content
This repository was archived by the owner on Jul 24, 2025. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions mcm/HTML/requests.html
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,9 @@ <h4>Clone request {{request.prepid}}</h4>
<a ng-click="actionPrompt('reset', 'selected')" rel="tooltip" ng-hide="role(1);" title="Reset selected requests" ng-href="#">
<i class="icon-repeat"></i>
</a>
<a ng-click="deleteMultipleRequestPrompt('selected')" rel="tooltip" ng-hide="role(1);" title="Delete selected requests" ng-href="#">
<i class="icon-minus-sign"></i>
</a>
<a ng-click="actionPrompt('option_reset', 'selected')" rel="tooltip" ng-hide="role(1);" title="Option Reset selected requests" ng-href="#">
<i class="icon-share"></i>
</a>
Expand Down
85 changes: 84 additions & 1 deletion mcm/scripts/requests_ctrl.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,34 @@ angular.module('testApp').controller('resultsCtrl',

$scope.actionPrompt = function(action, prepid) {
$scope.openIsSureModal($scope.dbName, prepid, action, function (database, prepid, action) {
$scope.objectAction(action, prepid);
$scope.objectAction(action, prepid);
});
}

$scope.deleteMultipleRequestPrompt = function (prepid) {
let prepids = prepid == 'selected' ? $scope.selected_prepids || [] : prepid = [prepid];

// If there are no requests selected
if (prepids.length === 0) {
$scope.openErrorModal(
undefined,
"Please select at least one request to apply this operation"
);
return;
}

// Custom message
let modalMessage = ''
for (let p of prepids) {
modalMessage += p + ', '
}
modalMessage = modalMessage.trim().slice(0,-1);

$scope.openIsSureModal($scope.dbName, modalMessage, 'delete', function (database, prepid, action) {
$scope.deleteMultipleRequests(prepids);
});
};

$scope.objectAction = function (action, prepid) {
let prepids = prepid == 'selected' ? $scope.selected_prepids : prepid = [prepid];
for (let prepid of prepids) {
Expand All @@ -63,6 +87,65 @@ angular.module('testApp').controller('resultsCtrl',
});
};

/**
* Deletes a group of selected requests
* @param prepids (string[]): Request's prepids to delete
*/
$scope.deleteMultipleRequests = function (prepids) {
for (let prepid of prepids) {
// Reset messages
$scope.actionMessage[prepid] = 'loading';
}
const deleteRequestEndpoint = 'restapi/requests/delete/';
const deletedRequests = [];

// Call the API
for (let prepid of prepids) {
const deletePromise = $http.delete(deleteRequestEndpoint + prepid);
deletedRequests.push(deletePromise);
}

// Wait for all the promises to finish.
Promise.allSettled(deletedRequests).then((results) => {
const failureResponse = {};
for (let r of results) {
const promiseFulfilled = r.status === 'fulfilled';
const response = promiseFulfilled ? r.value : r.reason;

let prepidResponse = ''
const isFulfilled = promiseFulfilled && response.status == 200;

if (isFulfilled) {
let successful = response.data.results || false;
prepidResponse = response.data.prepid;
if (successful) {
$scope.actionMessage[prepidResponse] = 'OK';
}
else {
delete $scope.actionMessage[prepidResponse];
failureResponse[prepidResponse] = response.data.message || 'Unable to delete the request'
}
}
else {
prepidResponse = response.config.url.trim().split('/').slice(-1)[0] || ''
delete $scope.actionMessage[prepidResponse];
failureResponse[prepidResponse] = response.data.message || 'Unable to delete the request'
}
}
// Parse the error message and display it to the user.
if (Object.keys(failureResponse).length !== 0) {
let errorMessage = 'Error deleting the following requests:\n'
errorMessage += JSON.stringify(failureResponse, null, 4);
console.error(errorMessage);
$scope.openErrorModal(undefined, errorMessage)
}

// Refresh the view
$scope.selected_prepids = [];
$scope.getData();
});
};

$scope.forcecompletePrompt = function(prepid) {
$scope.openIsSureModal($scope.dbName, prepid, 'forcecomplete', function (database, prepid, action) {
$scope.actionMessage[prepid] = 'loading';
Expand Down