From f5dc68d790896c2220a3a151e83fd00b04237a4f Mon Sep 17 00:00:00 2001 From: eisbilir Date: Sun, 26 Mar 2023 17:27:26 +0300 Subject: [PATCH 1/3] fix: post mortem phase --- src/common/phase-helper.js | 79 ++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/src/common/phase-helper.js b/src/common/phase-helper.js index 1ffb99a7..8146b21a 100644 --- a/src/common/phase-helper.js +++ b/src/common/phase-helper.js @@ -187,11 +187,14 @@ class ChallengePhaseHelper { if (_.isUndefined(_.get(phaseFromInput, "scheduledStartDate"))) { phase.scheduledStartDate = moment(startDate).toDate().toISOString(); } else { - phase.scheduledStartDate = moment(_.get(phaseFromInput, "scheduledStartDate")).toDate().toISOString(); + phase.scheduledStartDate = moment(_.get(phaseFromInput, "scheduledStartDate")) + .toDate() + .toISOString(); } phase.scheduledEndDate = moment(phase.scheduledStartDate) .add(phase.duration, "seconds") - .toDate().toISOString(); + .toDate() + .toISOString(); } return phase; }); @@ -202,14 +205,15 @@ class ChallengePhaseHelper { const precedecessorPhase = _.find(finalPhases, { phaseId: phase.predecessor, }); - if (phase.name === "Iterative Review Phase") { + if (phase.name === "Iterative Review") { phase.scheduledStartDate = precedecessorPhase.scheduledStartDate; } else { phase.scheduledStartDate = precedecessorPhase.scheduledEndDate; } phase.scheduledEndDate = moment(phase.scheduledStartDate) .add(phase.duration, "seconds") - .toDate().toISOString(); + .toDate() + .toISOString(); } return finalPhases; } @@ -224,19 +228,25 @@ class ChallengePhaseHelper { timelineTemplateId ); const { phaseDefinitionMap } = await this.getPhaseDefinitionsAndMap(); - + const updatedRegistrationPhase = undefined; const updatedPhases = _.map(challengePhases, (phase) => { const phaseFromTemplate = timelineTemplateMap.get(phase.phaseId); const phaseDefinition = phaseDefinitionMap.get(phase.phaseId); const updatedPhase = { ...phase, - predecessor: phaseFromTemplate.predecessor, + predecessor: phaseFromTemplate && phaseFromTemplate.predecessor, description: phaseDefinition.description, }; + if (updatedPhase.name === "Post-Mortem") { + updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a"; + } + if (updatedPhase.name === "Registration") { + updatedRegistrationPhase = updatedPhase; + } if (!_.isUndefined(phase.actualEndDate)) { return updatedPhase; } - if (updatedPhase.name === "Iterative Review Phase") { + if (updatedPhase.name === "Iterative Review") { return updatedPhase; } const newPhase = _.find(newPhases, (p) => p.phaseId === updatedPhase.phaseId); @@ -245,44 +255,65 @@ class ChallengePhaseHelper { } updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration); if (_.isUndefined(updatedPhase.predecessor)) { + const finalScheduledStartDate = _.defaultTo( + _.get(newPhase, "scheduledStartDate"), + updatedPhase.scheduledStartDate + ); if ( - isBeingActivated && - moment( - _.defaultTo(_.get(newPhase, "scheduledStartDate"), updatedPhase.scheduledStartDate) - ).isSameOrBefore(moment()) + updatedPhase.name === "Submission" && + moment(finalScheduledStartDate).isBefore( + moment(updatedRegistrationPhase && updatedRegistrationPhase.scheduledStartDate) + ) ) { + finalScheduledStartDate = updatedRegistrationPhase.scheduledStartDate; + } + if (isBeingActivated && moment(finalScheduledStartDate).isSameOrBefore(moment())) { updatedPhase.isOpen = true; updatedPhase.scheduledStartDate = moment().toDate().toISOString(); updatedPhase.actualStartDate = updatedPhase.scheduledStartDate; - } else if ( - updatedPhase.isOpen === false && - !_.isUndefined(_.get(newPhase, "scheduledStartDate")) - ) { - updatedPhase.scheduledStartDate = moment(newPhase.scheduledStartDate).toDate().toISOString(); + } else if (updatedPhase.isOpen === false) { + updatedPhase.scheduledStartDate = moment(finalScheduledStartDate).toDate().toISOString(); } updatedPhase.scheduledEndDate = moment(updatedPhase.scheduledStartDate) .add(updatedPhase.duration, "seconds") - .toDate().toISOString(); + .toDate() + .toISOString(); } if (!_.isUndefined(newPhase) && !_.isUndefined(newPhase.constraints)) { updatedPhase.constraints = newPhase.constraints; } + if (updatedPhase.name === "Registration") { + updatedRegistrationPhase = updatedPhase; + } return updatedPhase; }); + let lastIterative = undefined; for (let phase of updatedPhases) { if (_.isUndefined(phase.predecessor)) { continue; } - if (phase.name === "Iterative Review Phase") { - continue; + let predecessorPhase = undefined; + if (phase.name === "Iterative Review") { + if (!_.isUndefined(lastIterative)) { + predecessorPhase = lastIterative; + } else { + predecessorPhase = _.find(updatedPhases, { + phaseId: phase.predecessor, + }); + } + } else { + predecessorPhase = _.find(updatedPhases, { + phaseId: phase.predecessor, + }); } - const precedecessorPhase = _.find(updatedPhases, { - phaseId: phase.predecessor, - }); - phase.scheduledStartDate = precedecessorPhase.scheduledEndDate; + phase.scheduledStartDate = predecessorPhase.scheduledEndDate; phase.scheduledEndDate = moment(phase.scheduledStartDate) .add(phase.duration, "seconds") - .toDate().toISOString(); + .toDate() + .toISOString(); + if (phase.name === "Iterative Review") { + lastIterative = phase; + } } return updatedPhases; } From 60143545b0c9d02314a41767caa6b9872b5ea253 Mon Sep 17 00:00:00 2001 From: Emre Date: Mon, 27 Mar 2023 13:21:40 +0300 Subject: [PATCH 2/3] refactor phase populating --- src/common/phase-helper.js | 83 +++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 46 deletions(-) diff --git a/src/common/phase-helper.js b/src/common/phase-helper.js index 8146b21a..af23b4bb 100644 --- a/src/common/phase-helper.js +++ b/src/common/phase-helper.js @@ -166,6 +166,7 @@ class ChallengePhaseHelper { } const { timelineTempate } = await this.getTemplateAndTemplateMap(timelineTemplateId); const { phaseDefinitionMap } = await this.getPhaseDefinitionsAndMap(); + let fixedStartDate = undefined; const finalPhases = _.map(timelineTempate, (phaseFromTemplate) => { const phaseDefinition = phaseDefinitionMap.get(phaseFromTemplate.phaseId); const phaseFromInput = _.find(phases, (p) => p.phaseId === phaseFromTemplate.phaseId); @@ -184,18 +185,25 @@ class ChallengePhaseHelper { actualEndDate: undefined, }; if (_.isUndefined(phase.predecessor)) { - if (_.isUndefined(_.get(phaseFromInput, "scheduledStartDate"))) { - phase.scheduledStartDate = moment(startDate).toDate().toISOString(); - } else { - phase.scheduledStartDate = moment(_.get(phaseFromInput, "scheduledStartDate")) - .toDate() - .toISOString(); + let scheduledStartDate = _.defaultTo( + _.get(phaseFromInput, "scheduledStartDate"), + startDate + ); + if ( + !_.isUndefined(fixedStartDate) && + moment(scheduledStartDate).isBefore(moment(fixedStartDate)) + ) { + scheduledStartDate = fixedStartDate; } + phase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString(); phase.scheduledEndDate = moment(phase.scheduledStartDate) .add(phase.duration, "seconds") .toDate() .toISOString(); } + if (_.isUndefined(fixedStartDate)) { + fixedStartDate = phase.scheduledStartDate; + } return phase; }); for (let phase of finalPhases) { @@ -228,10 +236,11 @@ class ChallengePhaseHelper { timelineTemplateId ); const { phaseDefinitionMap } = await this.getPhaseDefinitionsAndMap(); - const updatedRegistrationPhase = undefined; + let fixedStartDate = undefined; const updatedPhases = _.map(challengePhases, (phase) => { const phaseFromTemplate = timelineTemplateMap.get(phase.phaseId); const phaseDefinition = phaseDefinitionMap.get(phase.phaseId); + const newPhase = _.find(newPhases, (p) => p.phaseId === phase.phaseId); const updatedPhase = { ...phase, predecessor: phaseFromTemplate && phaseFromTemplate.predecessor, @@ -240,39 +249,26 @@ class ChallengePhaseHelper { if (updatedPhase.name === "Post-Mortem") { updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a"; } - if (updatedPhase.name === "Registration") { - updatedRegistrationPhase = updatedPhase; - } - if (!_.isUndefined(phase.actualEndDate)) { - return updatedPhase; - } - if (updatedPhase.name === "Iterative Review") { - return updatedPhase; - } - const newPhase = _.find(newPhases, (p) => p.phaseId === updatedPhase.phaseId); - if (_.isUndefined(newPhase) && !isBeingActivated) { - return updatedPhase; + if (_.undefined(updatedPhase.actualEndDate) && updatedPhase.name !== "Iterative Review") { + updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration); } - updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration); if (_.isUndefined(updatedPhase.predecessor)) { - const finalScheduledStartDate = _.defaultTo( + let scheduledStartDate = _.defaultTo( _.get(newPhase, "scheduledStartDate"), updatedPhase.scheduledStartDate ); if ( - updatedPhase.name === "Submission" && - moment(finalScheduledStartDate).isBefore( - moment(updatedRegistrationPhase && updatedRegistrationPhase.scheduledStartDate) - ) + !_.isUndefined(fixedStartDate) && + moment(scheduledStartDate).isBefore(moment(fixedStartDate)) ) { - finalScheduledStartDate = updatedRegistrationPhase.scheduledStartDate; + scheduledStartDate = fixedStartDate; } - if (isBeingActivated && moment(finalScheduledStartDate).isSameOrBefore(moment())) { + if (isBeingActivated && moment(scheduledStartDate).isSameOrBefore(moment())) { updatedPhase.isOpen = true; updatedPhase.scheduledStartDate = moment().toDate().toISOString(); updatedPhase.actualStartDate = updatedPhase.scheduledStartDate; - } else if (updatedPhase.isOpen === false) { - updatedPhase.scheduledStartDate = moment(finalScheduledStartDate).toDate().toISOString(); + } else if (_.isUndefined(phase.actualStartDate)) { + updatedPhase.scheduledStartDate = moment(scheduledStartDate).toDate().toISOString(); } updatedPhase.scheduledEndDate = moment(updatedPhase.scheduledStartDate) .add(updatedPhase.duration, "seconds") @@ -282,38 +278,33 @@ class ChallengePhaseHelper { if (!_.isUndefined(newPhase) && !_.isUndefined(newPhase.constraints)) { updatedPhase.constraints = newPhase.constraints; } - if (updatedPhase.name === "Registration") { - updatedRegistrationPhase = updatedPhase; + if (_.isUndefined(fixedStartDate)) { + fixedStartDate = updatedPhase.scheduledStartDate; } return updatedPhase; }); - let lastIterative = undefined; + let iterativeReviewSet = false; for (let phase of updatedPhases) { if (_.isUndefined(phase.predecessor)) { continue; } - let predecessorPhase = undefined; + const predecessorPhase = _.find(updatedPhases, { + phaseId: phase.predecessor, + }); if (phase.name === "Iterative Review") { - if (!_.isUndefined(lastIterative)) { - predecessorPhase = lastIterative; - } else { - predecessorPhase = _.find(updatedPhases, { - phaseId: phase.predecessor, - }); + if (!iterativeReviewSet) { + if (_.isUndefined(phase.actualStartDate)) { + phase.scheduledStartDate = predecessorPhase.scheduledStartDate; + } + iterativeReviewSet = true; } } else { - predecessorPhase = _.find(updatedPhases, { - phaseId: phase.predecessor, - }); + phase.scheduledStartDate = predecessorPhase.scheduledEndDate; } - phase.scheduledStartDate = predecessorPhase.scheduledEndDate; phase.scheduledEndDate = moment(phase.scheduledStartDate) .add(phase.duration, "seconds") .toDate() .toISOString(); - if (phase.name === "Iterative Review") { - lastIterative = phase; - } } return updatedPhases; } From 842604468c4292a2a50e260ffe9b1de4e43548c8 Mon Sep 17 00:00:00 2001 From: Thomas Kranitsas Date: Mon, 27 Mar 2023 13:52:52 +0300 Subject: [PATCH 3/3] fix typo --- src/common/phase-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/phase-helper.js b/src/common/phase-helper.js index af23b4bb..e5b5cb7f 100644 --- a/src/common/phase-helper.js +++ b/src/common/phase-helper.js @@ -249,7 +249,7 @@ class ChallengePhaseHelper { if (updatedPhase.name === "Post-Mortem") { updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a"; } - if (_.undefined(updatedPhase.actualEndDate) && updatedPhase.name !== "Iterative Review") { + if (_.isUndefined(updatedPhase.actualEndDate) && updatedPhase.name !== "Iterative Review") { updatedPhase.duration = _.defaultTo(_.get(newPhase, "duration"), updatedPhase.duration); } if (_.isUndefined(updatedPhase.predecessor)) {