From ed1f7d1174d00365ce76e828faaaa7c56f635090 Mon Sep 17 00:00:00 2001 From: Thomas Kranitsas Date: Wed, 29 Mar 2023 12:25:18 +0300 Subject: [PATCH] close registration, submission, checkpoint submission after cancellation --- src/common/phase-helper.js | 11 +++++++++++ src/services/ChallengeService.js | 23 +++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/common/phase-helper.js b/src/common/phase-helper.js index 231991fe..ce46c38a 100644 --- a/src/common/phase-helper.js +++ b/src/common/phase-helper.js @@ -170,6 +170,17 @@ class ChallengePhaseHelper { return updatedPhases; } + handlePhasesAfterCancelling(phases) { + return _.map(phases, (phase) => { + if (_.includes(["Registration", "Submission", "Checkpoint Submission"], phase.name)) { + phase.isOpen = false; + if (!_.isUndefined(phase.actualStartDate)) { + phase.actualEndDate = moment().toDate().toISOString(); + } + } + }); + } + async validatePhases(phases) { if (!phases || phases.length === 0) { return; diff --git a/src/services/ChallengeService.js b/src/services/ChallengeService.js index c5f5f0b3..1933d7cf 100644 --- a/src/services/ChallengeService.js +++ b/src/services/ChallengeService.js @@ -1594,6 +1594,7 @@ async function updateChallenge(currentUser, challengeId, data) { /* END self-service stuffs */ let isChallengeBeingActivated = false; + let isChallengeBeingCancelled = false; if (data.status) { if (data.status === constants.challengeStatuses.Active) { if ( @@ -1619,6 +1620,20 @@ async function updateChallenge(currentUser, challengeId, data) { } } + if (_.includes([ + constants.challengeStatuses.Cancelled, + constants.challengeStatuses.CancelledRequirementsInfeasible, + constants.challengeStatuses.CancelledPaymentFailed, + constants.challengeStatuses.CancelledFailedReview, + constants.challengeStatuses.CancelledFailedScreening, + constants.challengeStatuses.CancelledZeroSubmissions, + constants.challengeStatuses.CancelledWinnerUnresponsive, + constants.challengeStatuses.CancelledClientRequest, + constants.challengeStatuses.CancelledZeroRegistrations, + ], data.status)) { + isChallengeBeingCancelled = true; + } + if ( data.status === constants.challengeStatuses.CancelledRequirementsInfeasible || data.status === constants.challengeStatuses.CancelledPaymentFailed @@ -1723,9 +1738,9 @@ async function updateChallenge(currentUser, challengeId, data) { let phasesUpdated = false; if ( - (data.phases && data.phases.length > 0) || + ((data.phases && data.phases.length > 0) || isChallengeBeingActivated || - timelineTemplateChanged + timelineTemplateChanged) && !isChallengeBeingCancelled ) { if ( challenge.status === constants.challengeStatuses.Completed || @@ -1754,6 +1769,10 @@ async function updateChallenge(currentUser, challengeId, data) { phasesUpdated = true; data.phases = newPhases; } + if (isChallengeBeingCancelled) { + data.phases = await phaseHelper.handlePhasesAfterCancelling(challenge.phases); + phasesUpdated = true; + } if (phasesUpdated || data.startDate) { data.startDate = convertToISOString(_.min(_.map(data.phases, "scheduledStartDate"))); }