Skip to content

Commit 6014354

Browse files
committed
refactor phase populating
1 parent f5dc68d commit 6014354

File tree

1 file changed

+37
-46
lines changed

1 file changed

+37
-46
lines changed

src/common/phase-helper.js

Lines changed: 37 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ class ChallengePhaseHelper {
166166
}
167167
const { timelineTempate } = await this.getTemplateAndTemplateMap(timelineTemplateId);
168168
const { phaseDefinitionMap } = await this.getPhaseDefinitionsAndMap();
169+
let fixedStartDate = undefined;
169170
const finalPhases = _.map(timelineTempate, (phaseFromTemplate) => {
170171
const phaseDefinition = phaseDefinitionMap.get(phaseFromTemplate.phaseId);
171172
const phaseFromInput = _.find(phases, (p) => p.phaseId === phaseFromTemplate.phaseId);
@@ -184,18 +185,25 @@ class ChallengePhaseHelper {
184185
actualEndDate: undefined,
185186
};
186187
if (_.isUndefined(phase.predecessor)) {
187-
if (_.isUndefined(_.get(phaseFromInput, "scheduledStartDate"))) {
188-
phase.scheduledStartDate = moment(startDate).toDate().toISOString();
189-
} else {
190-
phase.scheduledStartDate = moment(_.get(phaseFromInput, "scheduledStartDate"))
191-
.toDate()
192-
.toISOString();
188+
let scheduledStartDate = _.defaultTo(
189+
_.get(phaseFromInput, "scheduledStartDate"),
190+
startDate
191+
);
192+
if (
193+
!_.isUndefined(fixedStartDate) &&
194+
moment(scheduledStartDate).isBefore(moment(fixedStartDate))
195+
) {
196+
scheduledStartDate = fixedStartDate;
193197
}
198+
phase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString();
194199
phase.scheduledEndDate = moment(phase.scheduledStartDate)
195200
.add(phase.duration, "seconds")
196201
.toDate()
197202
.toISOString();
198203
}
204+
if (_.isUndefined(fixedStartDate)) {
205+
fixedStartDate = phase.scheduledStartDate;
206+
}
199207
return phase;
200208
});
201209
for (let phase of finalPhases) {
@@ -228,10 +236,11 @@ class ChallengePhaseHelper {
228236
timelineTemplateId
229237
);
230238
const { phaseDefinitionMap } = await this.getPhaseDefinitionsAndMap();
231-
const updatedRegistrationPhase = undefined;
239+
let fixedStartDate = undefined;
232240
const updatedPhases = _.map(challengePhases, (phase) => {
233241
const phaseFromTemplate = timelineTemplateMap.get(phase.phaseId);
234242
const phaseDefinition = phaseDefinitionMap.get(phase.phaseId);
243+
const newPhase = _.find(newPhases, (p) => p.phaseId === phase.phaseId);
235244
const updatedPhase = {
236245
...phase,
237246
predecessor: phaseFromTemplate && phaseFromTemplate.predecessor,
@@ -240,39 +249,26 @@ class ChallengePhaseHelper {
240249
if (updatedPhase.name === "Post-Mortem") {
241250
updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a";
242251
}
243-
if (updatedPhase.name === "Registration") {
244-
updatedRegistrationPhase = updatedPhase;
245-
}
246-
if (!_.isUndefined(phase.actualEndDate)) {
247-
return updatedPhase;
248-
}
249-
if (updatedPhase.name === "Iterative Review") {
250-
return updatedPhase;
251-
}
252-
const newPhase = _.find(newPhases, (p) => p.phaseId === updatedPhase.phaseId);
253-
if (_.isUndefined(newPhase) && !isBeingActivated) {
254-
return updatedPhase;
252+
if (_.undefined(updatedPhase.actualEndDate) && updatedPhase.name !== "Iterative Review") {
253+
updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration);
255254
}
256-
updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration);
257255
if (_.isUndefined(updatedPhase.predecessor)) {
258-
const finalScheduledStartDate = _.defaultTo(
256+
let scheduledStartDate = _.defaultTo(
259257
_.get(newPhase, "scheduledStartDate"),
260258
updatedPhase.scheduledStartDate
261259
);
262260
if (
263-
updatedPhase.name === "Submission" &&
264-
moment(finalScheduledStartDate).isBefore(
265-
moment(updatedRegistrationPhase && updatedRegistrationPhase.scheduledStartDate)
266-
)
261+
!_.isUndefined(fixedStartDate) &&
262+
moment(scheduledStartDate).isBefore(moment(fixedStartDate))
267263
) {
268-
finalScheduledStartDate = updatedRegistrationPhase.scheduledStartDate;
264+
scheduledStartDate = fixedStartDate;
269265
}
270-
if (isBeingActivated && moment(finalScheduledStartDate).isSameOrBefore(moment())) {
266+
if (isBeingActivated && moment(scheduledStartDate).isSameOrBefore(moment())) {
271267
updatedPhase.isOpen = true;
272268
updatedPhase.scheduledStartDate = moment().toDate().toISOString();
273269
updatedPhase.actualStartDate = updatedPhase.scheduledStartDate;
274-
} else if (updatedPhase.isOpen === false) {
275-
updatedPhase.scheduledStartDate = moment(finalScheduledStartDate).toDate().toISOString();
270+
} else if (_.isUndefined(phase.actualStartDate)) {
271+
updatedPhase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString();
276272
}
277273
updatedPhase.scheduledEndDate = moment(updatedPhase.scheduledStartDate)
278274
.add(updatedPhase.duration, "seconds")
@@ -282,38 +278,33 @@ class ChallengePhaseHelper {
282278
if (!_.isUndefined(newPhase) && !_.isUndefined(newPhase.constraints)) {
283279
updatedPhase.constraints = newPhase.constraints;
284280
}
285-
if (updatedPhase.name === "Registration") {
286-
updatedRegistrationPhase = updatedPhase;
281+
if (_.isUndefined(fixedStartDate)) {
282+
fixedStartDate = updatedPhase.scheduledStartDate;
287283
}
288284
return updatedPhase;
289285
});
290-
let lastIterative = undefined;
286+
let iterativeReviewSet = false;
291287
for (let phase of updatedPhases) {
292288
if (_.isUndefined(phase.predecessor)) {
293289
continue;
294290
}
295-
let predecessorPhase = undefined;
291+
const predecessorPhase = _.find(updatedPhases, {
292+
phaseId: phase.predecessor,
293+
});
296294
if (phase.name === "Iterative Review") {
297-
if (!_.isUndefined(lastIterative)) {
298-
predecessorPhase = lastIterative;
299-
} else {
300-
predecessorPhase = _.find(updatedPhases, {
301-
phaseId: phase.predecessor,
302-
});
295+
if (!iterativeReviewSet) {
296+
if (_.isUndefined(phase.actualStartDate)) {
297+
phase.scheduledStartDate = predecessorPhase.scheduledStartDate;
298+
}
299+
iterativeReviewSet = true;
303300
}
304301
} else {
305-
predecessorPhase = _.find(updatedPhases, {
306-
phaseId: phase.predecessor,
307-
});
302+
phase.scheduledStartDate = predecessorPhase.scheduledEndDate;
308303
}
309-
phase.scheduledStartDate = predecessorPhase.scheduledEndDate;
310304
phase.scheduledEndDate = moment(phase.scheduledStartDate)
311305
.add(phase.duration, "seconds")
312306
.toDate()
313307
.toISOString();
314-
if (phase.name === "Iterative Review") {
315-
lastIterative = phase;
316-
}
317308
}
318309
return updatedPhases;
319310
}

0 commit comments

Comments
 (0)