Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit 144e84f

Browse files
committed
handle multiple phases with same name
1 parent 0ffd7e8 commit 144e84f

File tree

1 file changed

+44
-35
lines changed

1 file changed

+44
-35
lines changed

src/services/ProcessorService.js

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -104,42 +104,51 @@ async function syncChallengePhases (legacyId, v5Phases, createdBy, isSelfService
104104
const phasesFromIFx = await timelineService.getChallengePhases(legacyId)
105105
logger.debug(`Phases from v5: ${JSON.stringify(v5Phases)}`)
106106
logger.debug(`Phases from IFX: ${JSON.stringify(phasesFromIFx)}`)
107-
for (const phase of phasesFromIFx) {
108-
const phaseName = _.get(_.find(phaseTypes, pt => pt.phase_type_id === phase.phase_type_id), 'name')
109-
const v5Equivalent = _.find(v5Phases, p => p.name === phaseName)
110-
logger.info(`v4 Phase: ${JSON.stringify(phase)}, v5 Equiv: ${JSON.stringify(v5Equivalent)}`)
111-
if (v5Equivalent) {
112-
// Compare duration and status
113-
// if (v5Equivalent.duration * 1000 !== phase.duration * 1 || isSelfService) {
114-
// ||
115-
// (v5Equivalent.isOpen && _.toInteger(phase.phase_status_id) === constants.PhaseStatusTypes.Closed) ||
116-
// (!v5Equivalent.isOpen && _.toInteger(phase.phase_status_id) === constants.PhaseStatusTypes.Open)) {
117-
// const newStatus = v5Equivalent.isOpen
118-
// ? constants.PhaseStatusTypes.Open
119-
// : (new Date().getTime() <= new Date(v5Equivalent.scheduledEndDate).getTime() ? constants.PhaseStatusTypes.Scheduled : constants.PhaseStatusTypes.Closed)
120-
// update phase
121-
logger.debug(`Will update phase ${phaseName}/${v5Equivalent.name} from ${phase.duration} to duration ${v5Equivalent.duration * 1000} milli`)
122-
const newStatus = v5Equivalent.isOpen
123-
? constants.PhaseStatusTypes.Open
124-
: (new Date().getTime() <= new Date(v5Equivalent.scheduledEndDate).getTime() ? constants.PhaseStatusTypes.Scheduled : constants.PhaseStatusTypes.Closed)
125-
await timelineService.updatePhase(
126-
phase.project_phase_id,
127-
legacyId,
128-
v5Equivalent.scheduledStartDate,
129-
v5Equivalent.scheduledEndDate,
130-
v5Equivalent.duration * 1000,
131-
newStatus
132-
)
133-
// newStatus)
134-
// } else {
135-
// logger.info(`Durations for ${phaseName} match: ${v5Equivalent.duration * 1000} === ${phase.duration}`)
136-
// }
137-
} else {
138-
logger.info(`No v5 Equivalent Found for ${phaseName}`)
107+
let phaseGroups = {}
108+
_.forEach(phasesFromIFx, p => {
109+
if (!phaseGroups[p.phase_type_id]) {
110+
phaseGroups[p.phase_type_id] = []
139111
}
140-
if (isSelfService && phaseName === 'Review') {
141-
// make sure to set the required reviewers to 2
142-
await createOrSetNumberOfReviewers(_.toString(phase.project_phase_id), _.toString(numOfReviewers), _.toString(createdBy))
112+
phaseGroups[p.phase_type_id].push(p)
113+
})
114+
_.forEach(_.cloneDeep(phaseGroups), (pg, pt) => {
115+
phaseGroups[pt] = _.sortBy(pg, 'scheduled_start_time')
116+
})
117+
118+
for (const key of _.keys(phaseGroups)) {
119+
let phaseOrder = 0
120+
let v5Equivalents = undefined
121+
for (const phase of phaseGroups[key]) {
122+
const phaseName = _.get(_.find(phaseTypes, pt => pt.phase_type_id === phase.phase_type_id), 'name')
123+
if (_.isUndefined(v5Equivalents)) {
124+
v5Equivalents = _.sortBy(_.filter(v5Phases, p => p.name === phaseName), 'scheduledStartDate')
125+
}
126+
if (v5Equivalents.length > 0) {
127+
if (v5Equivalents.length === phaseGroups[key].length) {
128+
const v5Equivalent = v5Equivalents[phaseOrder]
129+
logger.debug(`Will update phase ${phaseName}/${v5Equivalent.name} from ${phase.duration} to duration ${v5Equivalent.duration * 1000} milli`)
130+
const newStatus = v5Equivalent.isOpen
131+
? constants.PhaseStatusTypes.Open
132+
: (new Date().getTime() <= new Date(v5Equivalent.scheduledEndDate).getTime() ? constants.PhaseStatusTypes.Scheduled : constants.PhaseStatusTypes.Closed)
133+
await timelineService.updatePhase(
134+
phase.project_phase_id,
135+
legacyId,
136+
v5Equivalent.scheduledStartDate,
137+
v5Equivalent.scheduledEndDate,
138+
v5Equivalent.duration * 1000,
139+
newStatus
140+
)
141+
} else {
142+
logger.info(`number of ${phaseName} does not match`)
143+
}
144+
} else {
145+
logger.info(`No v5 Equivalent Found for ${phaseName}`)
146+
}
147+
if (isSelfService && phaseName === 'Review') {
148+
// make sure to set the required reviewers to 2
149+
await createOrSetNumberOfReviewers(_.toString(phase.project_phase_id), _.toString(numOfReviewers), _.toString(createdBy))
150+
}
151+
phaseOrder = phaseOrder + 1
143152
}
144153
}
145154
// TODO: What about iterative reviews? There can be many for the same challenge.

0 commit comments

Comments
 (0)