Skip to content

Commit 1b0eb3f

Browse files
authored
Merge pull request #596 from topcoder-platform/dev
Update phase population
2 parents 92f0735 + 8426044 commit 1b0eb3f

File tree

1 file changed

+56
-34
lines changed

1 file changed

+56
-34
lines changed

src/common/phase-helper.js

Lines changed: 56 additions & 34 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,14 +185,24 @@ 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")).toDate().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;
191197
}
198+
phase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString();
192199
phase.scheduledEndDate = moment(phase.scheduledStartDate)
193200
.add(phase.duration, "seconds")
194-
.toDate().toISOString();
201+
.toDate()
202+
.toISOString();
203+
}
204+
if (_.isUndefined(fixedStartDate)) {
205+
fixedStartDate = phase.scheduledStartDate;
195206
}
196207
return phase;
197208
});
@@ -202,14 +213,15 @@ class ChallengePhaseHelper {
202213
const precedecessorPhase = _.find(finalPhases, {
203214
phaseId: phase.predecessor,
204215
});
205-
if (phase.name === "Iterative Review Phase") {
216+
if (phase.name === "Iterative Review") {
206217
phase.scheduledStartDate = precedecessorPhase.scheduledStartDate;
207218
} else {
208219
phase.scheduledStartDate = precedecessorPhase.scheduledEndDate;
209220
}
210221
phase.scheduledEndDate = moment(phase.scheduledStartDate)
211222
.add(phase.duration, "seconds")
212-
.toDate().toISOString();
223+
.toDate()
224+
.toISOString();
213225
}
214226
return finalPhases;
215227
}
@@ -224,65 +236,75 @@ class ChallengePhaseHelper {
224236
timelineTemplateId
225237
);
226238
const { phaseDefinitionMap } = await this.getPhaseDefinitionsAndMap();
227-
239+
let fixedStartDate = undefined;
228240
const updatedPhases = _.map(challengePhases, (phase) => {
229241
const phaseFromTemplate = timelineTemplateMap.get(phase.phaseId);
230242
const phaseDefinition = phaseDefinitionMap.get(phase.phaseId);
243+
const newPhase = _.find(newPhases, (p) => p.phaseId === phase.phaseId);
231244
const updatedPhase = {
232245
...phase,
233-
predecessor: phaseFromTemplate.predecessor,
246+
predecessor: phaseFromTemplate && phaseFromTemplate.predecessor,
234247
description: phaseDefinition.description,
235248
};
236-
if (!_.isUndefined(phase.actualEndDate)) {
237-
return updatedPhase;
249+
if (updatedPhase.name === "Post-Mortem") {
250+
updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a";
238251
}
239-
if (updatedPhase.name === "Iterative Review Phase") {
240-
return updatedPhase;
252+
if (_.isUndefined(updatedPhase.actualEndDate) && updatedPhase.name !== "Iterative Review") {
253+
updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration);
241254
}
242-
const newPhase = _.find(newPhases, (p) => p.phaseId === updatedPhase.phaseId);
243-
if (_.isUndefined(newPhase) && !isBeingActivated) {
244-
return updatedPhase;
245-
}
246-
updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration);
247255
if (_.isUndefined(updatedPhase.predecessor)) {
256+
let scheduledStartDate = _.defaultTo(
257+
_.get(newPhase, "scheduledStartDate"),
258+
updatedPhase.scheduledStartDate
259+
);
248260
if (
249-
isBeingActivated &&
250-
moment(
251-
_.defaultTo(_.get(newPhase, "scheduledStartDate"), updatedPhase.scheduledStartDate)
252-
).isSameOrBefore(moment())
261+
!_.isUndefined(fixedStartDate) &&
262+
moment(scheduledStartDate).isBefore(moment(fixedStartDate))
253263
) {
264+
scheduledStartDate = fixedStartDate;
265+
}
266+
if (isBeingActivated && moment(scheduledStartDate).isSameOrBefore(moment())) {
254267
updatedPhase.isOpen = true;
255268
updatedPhase.scheduledStartDate = moment().toDate().toISOString();
256269
updatedPhase.actualStartDate = updatedPhase.scheduledStartDate;
257-
} else if (
258-
updatedPhase.isOpen === false &&
259-
!_.isUndefined(_.get(newPhase, "scheduledStartDate"))
260-
) {
261-
updatedPhase.scheduledStartDate = moment(newPhase.scheduledStartDate).toDate().toISOString();
270+
} else if (_.isUndefined(phase.actualStartDate)) {
271+
updatedPhase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString();
262272
}
263273
updatedPhase.scheduledEndDate = moment(updatedPhase.scheduledStartDate)
264274
.add(updatedPhase.duration, "seconds")
265-
.toDate().toISOString();
275+
.toDate()
276+
.toISOString();
266277
}
267278
if (!_.isUndefined(newPhase) && !_.isUndefined(newPhase.constraints)) {
268279
updatedPhase.constraints = newPhase.constraints;
269280
}
281+
if (_.isUndefined(fixedStartDate)) {
282+
fixedStartDate = updatedPhase.scheduledStartDate;
283+
}
270284
return updatedPhase;
271285
});
286+
let iterativeReviewSet = false;
272287
for (let phase of updatedPhases) {
273288
if (_.isUndefined(phase.predecessor)) {
274289
continue;
275290
}
276-
if (phase.name === "Iterative Review Phase") {
277-
continue;
278-
}
279-
const precedecessorPhase = _.find(updatedPhases, {
291+
const predecessorPhase = _.find(updatedPhases, {
280292
phaseId: phase.predecessor,
281293
});
282-
phase.scheduledStartDate = precedecessorPhase.scheduledEndDate;
294+
if (phase.name === "Iterative Review") {
295+
if (!iterativeReviewSet) {
296+
if (_.isUndefined(phase.actualStartDate)) {
297+
phase.scheduledStartDate = predecessorPhase.scheduledStartDate;
298+
}
299+
iterativeReviewSet = true;
300+
}
301+
} else {
302+
phase.scheduledStartDate = predecessorPhase.scheduledEndDate;
303+
}
283304
phase.scheduledEndDate = moment(phase.scheduledStartDate)
284305
.add(phase.duration, "seconds")
285-
.toDate().toISOString();
306+
.toDate()
307+
.toISOString();
286308
}
287309
return updatedPhases;
288310
}

0 commit comments

Comments
 (0)