Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit e219ff8

Browse files
Merge pull request #526 from Schpotsky/set-3
Fix private task closure registration start/end date population issue
2 parents e3018ea + 4c69ff8 commit e219ff8

File tree

1 file changed

+41
-5
lines changed

1 file changed

+41
-5
lines changed

services/contest_service_facade/src/java/main/com/topcoder/service/facade/contest/ejb/ContestServiceFacadeBean.java

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2354,6 +2354,22 @@ private XMLGregorianCalendar getXMLGregorianCalendar(Date date) {
23542354
}
23552355
}
23562356

2357+
/**
2358+
* <p>
2359+
* Adds the specified number of minutes to the given date and returns the result.
2360+
* </p>
2361+
*
2362+
* @param date The Date to which to add the given minutes amount
2363+
* @param minutes The number of minutes to add to the given date (Can be negative)
2364+
* @return The resulting date = input date + number of minutes
2365+
*/
2366+
private Date addMinutesToDate(Date date, int minutes) {
2367+
Calendar cal = Calendar.getInstance();
2368+
cal.setTime(date);
2369+
cal.add(Calendar.MINUTE, minutes);
2370+
return cal.getTime();
2371+
}
2372+
23572373
/**
23582374
* <p>
23592375
* Processes the contest sale.
@@ -9862,25 +9878,30 @@ public void closeSoftwareContest(TCSubject tcSubject, long projectId, long winne
98629878
DataHandler dataHandler = new DataHandler(new FileDataSource(mockSubmissionFilePath + mockSubmissionFileName));
98639879
long submissionId = uploadSubmission(winnerId, contest.getId(), mockSubmissionFileName, dataHandler);
98649880

9865-
// close submission and review phase
9881+
Date currentDate = new Date();
9882+
// subtract one minute from the current date
9883+
// this will be used to set the registration start/end dates
9884+
Date oneMinuteEarlier = addMinutesToDate(currentDate, -1);
9885+
9886+
// close registration, submission and review phases
98669887
com.topcoder.project.phases.Phase submissionPhase = null;
98679888
com.topcoder.project.phases.Phase reviewPhase = null;
98689889
for (com.topcoder.project.phases.Phase phase : phases) {
98699890
if (PROJECT_SUBMISSION_PHASE_NAME.equals(phase.getPhaseType().getName())) {
98709891
if (phaseNeedToUpdate && !phaseHasClosed) {
98719892
// submission is scheduled
9872-
phase.setActualStartDate(new Date());
9873-
phase.setActualEndDate(new Date());
9893+
phase.setActualStartDate(currentDate);
9894+
phase.setActualEndDate(currentDate);
98749895
} else if (!phaseNeedToUpdate) {
98759896
// phase already open
9876-
phase.setActualEndDate(new Date());
9897+
phase.setActualEndDate(currentDate);
98779898
}
98789899
phase.setPhaseStatus(PhaseStatus.CLOSED);
98799900
submissionPhase = phase;
98809901
} else if (PROJECT_REVIEW_PHASE_NAME.equals(phase.getPhaseType().getName())
98819902
|| PROJECT_ITERATIVE_REVIEW_PHASE_NAME.equals(phase.getPhaseType().getName())) {
98829903
if (phase.getPhaseStatus().getId() == PhaseStatus.SCHEDULED.getId()) {
9883-
phase.setActualStartDate(new Date());
9904+
phase.setActualStartDate(currentDate);
98849905
phase.setScheduledEndDate(null);
98859906
phase.setScheduledStartDate(phase.calcStartDate());
98869907
phase.setScheduledEndDate(phase.calcEndDate());
@@ -9890,6 +9911,21 @@ public void closeSoftwareContest(TCSubject tcSubject, long projectId, long winne
98909911
// skiping closed iterative review
98919912
reviewPhase = phase;
98929913
}
9914+
} else if (PROJECT_REGISTRATION_PHASE_NAME.equals(phase.getPhaseType().getName())) {
9915+
if (phase.getActualStartDate() != null) {
9916+
// The registration phase is already started, we only need to set the end date if not set already
9917+
// The actual end date is set to one minute earlier than the submission phase
9918+
// This will ensure that the phases are shown in the correct order in Online Review
9919+
if(phase.getActualEndDate() == null ) {
9920+
phase.setActualEndDate(oneMinuteEarlier);
9921+
}
9922+
} else {
9923+
// The registration phase is not opened yet (start date is in the future)
9924+
phase.setActualStartDate(oneMinuteEarlier);
9925+
phase.setActualEndDate(oneMinuteEarlier);
9926+
}
9927+
// Set the registration status to closed
9928+
phase.setPhaseStatus(PhaseStatus.CLOSED);
98939929
}
98949930
}
98959931
projectPhases.setPhases(new HashSet<com.topcoder.project.phases.Phase>(Arrays.asList(phases)));

0 commit comments

Comments
 (0)