@@ -166,6 +166,7 @@ class ChallengePhaseHelper {
166
166
}
167
167
const { timelineTempate } = await this . getTemplateAndTemplateMap ( timelineTemplateId ) ;
168
168
const { phaseDefinitionMap } = await this . getPhaseDefinitionsAndMap ( ) ;
169
+ let fixedStartDate = undefined ;
169
170
const finalPhases = _ . map ( timelineTempate , ( phaseFromTemplate ) => {
170
171
const phaseDefinition = phaseDefinitionMap . get ( phaseFromTemplate . phaseId ) ;
171
172
const phaseFromInput = _ . find ( phases , ( p ) => p . phaseId === phaseFromTemplate . phaseId ) ;
@@ -184,18 +185,25 @@ class ChallengePhaseHelper {
184
185
actualEndDate : undefined ,
185
186
} ;
186
187
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 ;
193
197
}
198
+ phase . scheduledStartDate = moment ( scheduledStartDate ) . toDate ( ) . toISOString ( ) ;
194
199
phase . scheduledEndDate = moment ( phase . scheduledStartDate )
195
200
. add ( phase . duration , "seconds" )
196
201
. toDate ( )
197
202
. toISOString ( ) ;
198
203
}
204
+ if ( _ . isUndefined ( fixedStartDate ) ) {
205
+ fixedStartDate = phase . scheduledStartDate ;
206
+ }
199
207
return phase ;
200
208
} ) ;
201
209
for ( let phase of finalPhases ) {
@@ -228,10 +236,11 @@ class ChallengePhaseHelper {
228
236
timelineTemplateId
229
237
) ;
230
238
const { phaseDefinitionMap } = await this . getPhaseDefinitionsAndMap ( ) ;
231
- const updatedRegistrationPhase = undefined ;
239
+ let fixedStartDate = undefined ;
232
240
const updatedPhases = _ . map ( challengePhases , ( phase ) => {
233
241
const phaseFromTemplate = timelineTemplateMap . get ( phase . phaseId ) ;
234
242
const phaseDefinition = phaseDefinitionMap . get ( phase . phaseId ) ;
243
+ const newPhase = _ . find ( newPhases , ( p ) => p . phaseId === phase . phaseId ) ;
235
244
const updatedPhase = {
236
245
...phase ,
237
246
predecessor : phaseFromTemplate && phaseFromTemplate . predecessor ,
@@ -240,39 +249,26 @@ class ChallengePhaseHelper {
240
249
if ( updatedPhase . name === "Post-Mortem" ) {
241
250
updatedPhase . predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a" ;
242
251
}
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 ) ;
255
254
}
256
- updatedPhase . duration = _ . defaultTo ( _ . get ( newPhase , "duration" ) , updatedPhase . duration ) ;
257
255
if ( _ . isUndefined ( updatedPhase . predecessor ) ) {
258
- const finalScheduledStartDate = _ . defaultTo (
256
+ let scheduledStartDate = _ . defaultTo (
259
257
_ . get ( newPhase , "scheduledStartDate" ) ,
260
258
updatedPhase . scheduledStartDate
261
259
) ;
262
260
if (
263
- updatedPhase . name === "Submission" &&
264
- moment ( finalScheduledStartDate ) . isBefore (
265
- moment ( updatedRegistrationPhase && updatedRegistrationPhase . scheduledStartDate )
266
- )
261
+ ! _ . isUndefined ( fixedStartDate ) &&
262
+ moment ( scheduledStartDate ) . isBefore ( moment ( fixedStartDate ) )
267
263
) {
268
- finalScheduledStartDate = updatedRegistrationPhase . scheduledStartDate ;
264
+ scheduledStartDate = fixedStartDate ;
269
265
}
270
- if ( isBeingActivated && moment ( finalScheduledStartDate ) . isSameOrBefore ( moment ( ) ) ) {
266
+ if ( isBeingActivated && moment ( scheduledStartDate ) . isSameOrBefore ( moment ( ) ) ) {
271
267
updatedPhase . isOpen = true ;
272
268
updatedPhase . scheduledStartDate = moment ( ) . toDate ( ) . toISOString ( ) ;
273
269
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 ( ) ;
276
272
}
277
273
updatedPhase . scheduledEndDate = moment ( updatedPhase . scheduledStartDate )
278
274
. add ( updatedPhase . duration , "seconds" )
@@ -282,38 +278,33 @@ class ChallengePhaseHelper {
282
278
if ( ! _ . isUndefined ( newPhase ) && ! _ . isUndefined ( newPhase . constraints ) ) {
283
279
updatedPhase . constraints = newPhase . constraints ;
284
280
}
285
- if ( updatedPhase . name === "Registration" ) {
286
- updatedRegistrationPhase = updatedPhase ;
281
+ if ( _ . isUndefined ( fixedStartDate ) ) {
282
+ fixedStartDate = updatedPhase . scheduledStartDate ;
287
283
}
288
284
return updatedPhase ;
289
285
} ) ;
290
- let lastIterative = undefined ;
286
+ let iterativeReviewSet = false ;
291
287
for ( let phase of updatedPhases ) {
292
288
if ( _ . isUndefined ( phase . predecessor ) ) {
293
289
continue ;
294
290
}
295
- let predecessorPhase = undefined ;
291
+ const predecessorPhase = _ . find ( updatedPhases , {
292
+ phaseId : phase . predecessor ,
293
+ } ) ;
296
294
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 ;
303
300
}
304
301
} else {
305
- predecessorPhase = _ . find ( updatedPhases , {
306
- phaseId : phase . predecessor ,
307
- } ) ;
302
+ phase . scheduledStartDate = predecessorPhase . scheduledEndDate ;
308
303
}
309
- phase . scheduledStartDate = predecessorPhase . scheduledEndDate ;
310
304
phase . scheduledEndDate = moment ( phase . scheduledStartDate )
311
305
. add ( phase . duration , "seconds" )
312
306
. toDate ( )
313
307
. toISOString ( ) ;
314
- if ( phase . name === "Iterative Review" ) {
315
- lastIterative = phase ;
316
- }
317
308
}
318
309
return updatedPhases ;
319
310
}
0 commit comments