diff --git a/mcm/HTML/requests.html b/mcm/HTML/requests.html index da2cee05..0c2b78fc 100644 --- a/mcm/HTML/requests.html +++ b/mcm/HTML/requests.html @@ -476,6 +476,9 @@

Clone request {{request.prepid}}

+ + + diff --git a/mcm/scripts/requests_ctrl.js b/mcm/scripts/requests_ctrl.js index 6acd616e..9d1a2140 100644 --- a/mcm/scripts/requests_ctrl.js +++ b/mcm/scripts/requests_ctrl.js @@ -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) { @@ -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';