@@ -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,14 +185,24 @@ 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" ) ) . 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 ;
191
197
}
198
+ phase . scheduledStartDate = moment ( scheduledStartDate ) . toDate ( ) . toISOString ( ) ;
192
199
phase . scheduledEndDate = moment ( phase . scheduledStartDate )
193
200
. add ( phase . duration , "seconds" )
194
- . toDate ( ) . toISOString ( ) ;
201
+ . toDate ( )
202
+ . toISOString ( ) ;
203
+ }
204
+ if ( _ . isUndefined ( fixedStartDate ) ) {
205
+ fixedStartDate = phase . scheduledStartDate ;
195
206
}
196
207
return phase ;
197
208
} ) ;
@@ -202,14 +213,15 @@ class ChallengePhaseHelper {
202
213
const precedecessorPhase = _ . find ( finalPhases , {
203
214
phaseId : phase . predecessor ,
204
215
} ) ;
205
- if ( phase . name === "Iterative Review Phase " ) {
216
+ if ( phase . name === "Iterative Review" ) {
206
217
phase . scheduledStartDate = precedecessorPhase . scheduledStartDate ;
207
218
} else {
208
219
phase . scheduledStartDate = precedecessorPhase . scheduledEndDate ;
209
220
}
210
221
phase . scheduledEndDate = moment ( phase . scheduledStartDate )
211
222
. add ( phase . duration , "seconds" )
212
- . toDate ( ) . toISOString ( ) ;
223
+ . toDate ( )
224
+ . toISOString ( ) ;
213
225
}
214
226
return finalPhases ;
215
227
}
@@ -224,65 +236,75 @@ class ChallengePhaseHelper {
224
236
timelineTemplateId
225
237
) ;
226
238
const { phaseDefinitionMap } = await this . getPhaseDefinitionsAndMap ( ) ;
227
-
239
+ let fixedStartDate = undefined ;
228
240
const updatedPhases = _ . map ( challengePhases , ( phase ) => {
229
241
const phaseFromTemplate = timelineTemplateMap . get ( phase . phaseId ) ;
230
242
const phaseDefinition = phaseDefinitionMap . get ( phase . phaseId ) ;
243
+ const newPhase = _ . find ( newPhases , ( p ) => p . phaseId === phase . phaseId ) ;
231
244
const updatedPhase = {
232
245
...phase ,
233
- predecessor : phaseFromTemplate . predecessor ,
246
+ predecessor : phaseFromTemplate && phaseFromTemplate . predecessor ,
234
247
description : phaseDefinition . description ,
235
248
} ;
236
- if ( ! _ . isUndefined ( phase . actualEndDate ) ) {
237
- return updatedPhase ;
249
+ if ( updatedPhase . name === "Post-Mortem" ) {
250
+ updatedPhase . predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a" ;
238
251
}
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 ) ;
241
254
}
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 ) ;
247
255
if ( _ . isUndefined ( updatedPhase . predecessor ) ) {
256
+ let scheduledStartDate = _ . defaultTo (
257
+ _ . get ( newPhase , "scheduledStartDate" ) ,
258
+ updatedPhase . scheduledStartDate
259
+ ) ;
248
260
if (
249
- isBeingActivated &&
250
- moment (
251
- _ . defaultTo ( _ . get ( newPhase , "scheduledStartDate" ) , updatedPhase . scheduledStartDate )
252
- ) . isSameOrBefore ( moment ( ) )
261
+ ! _ . isUndefined ( fixedStartDate ) &&
262
+ moment ( scheduledStartDate ) . isBefore ( moment ( fixedStartDate ) )
253
263
) {
264
+ scheduledStartDate = fixedStartDate ;
265
+ }
266
+ if ( isBeingActivated && moment ( scheduledStartDate ) . isSameOrBefore ( moment ( ) ) ) {
254
267
updatedPhase . isOpen = true ;
255
268
updatedPhase . scheduledStartDate = moment ( ) . toDate ( ) . toISOString ( ) ;
256
269
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 ( ) ;
262
272
}
263
273
updatedPhase . scheduledEndDate = moment ( updatedPhase . scheduledStartDate )
264
274
. add ( updatedPhase . duration , "seconds" )
265
- . toDate ( ) . toISOString ( ) ;
275
+ . toDate ( )
276
+ . toISOString ( ) ;
266
277
}
267
278
if ( ! _ . isUndefined ( newPhase ) && ! _ . isUndefined ( newPhase . constraints ) ) {
268
279
updatedPhase . constraints = newPhase . constraints ;
269
280
}
281
+ if ( _ . isUndefined ( fixedStartDate ) ) {
282
+ fixedStartDate = updatedPhase . scheduledStartDate ;
283
+ }
270
284
return updatedPhase ;
271
285
} ) ;
286
+ let iterativeReviewSet = false ;
272
287
for ( let phase of updatedPhases ) {
273
288
if ( _ . isUndefined ( phase . predecessor ) ) {
274
289
continue ;
275
290
}
276
- if ( phase . name === "Iterative Review Phase" ) {
277
- continue ;
278
- }
279
- const precedecessorPhase = _ . find ( updatedPhases , {
291
+ const predecessorPhase = _ . find ( updatedPhases , {
280
292
phaseId : phase . predecessor ,
281
293
} ) ;
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
+ }
283
304
phase . scheduledEndDate = moment ( phase . scheduledStartDate )
284
305
. add ( phase . duration , "seconds" )
285
- . toDate ( ) . toISOString ( ) ;
306
+ . toDate ( )
307
+ . toISOString ( ) ;
286
308
}
287
309
return updatedPhases ;
288
310
}
0 commit comments