@@ -57,22 +57,31 @@ module.exports = [
57
57
// Omit deletedAt, deletedBy
58
58
updated = _ . omit ( updatedTimeline . toJSON ( ) , [ 'deletedAt' , 'deletedBy' ] ) ;
59
59
60
- // Update milestones startDate and endDate if necessary
61
- if ( original . startDate !== updated . startDate || original . endDate !== updated . endDate ) {
60
+ // Update milestones startDate and endDate if necessary, if the timeline startDate changed
61
+ if ( original . startDate . getTime ( ) !== updated . startDate . getTime ( ) ) {
62
62
return updatedTimeline . getMilestones ( )
63
63
. then ( ( milestones ) => {
64
64
let startDate = updated . startDate ;
65
+
66
+ // Process milestones in order
65
67
const updateMilestonePromises = _ . chain ( milestones ) . sortBy ( 'order' ) . map ( ( _milestone ) => {
66
68
const milestone = _milestone ;
69
+
70
+ // Update if the iterating startDate is different than the saved one
67
71
if ( milestone . startDate . getTime ( ) !== startDate . getTime ( ) ) {
68
72
milestone . startDate = startDate ;
69
73
milestone . updatedBy = req . authUser . userId ;
70
74
}
75
+
76
+ // Make sure the endDate is the correct, i.e. for duration = 1 it should be equal to the start date,
77
+ // for duration = 2 it should be equal to the next day and so on...
71
78
const endDate = moment . utc ( milestone . startDate ) . add ( milestone . duration - 1 , 'days' ) . toDate ( ) ;
72
79
if ( ! milestone . endDate || endDate . getTime ( ) !== milestone . endDate . getTime ( ) ) {
73
80
milestone . endDate = endDate ;
74
81
milestone . updatedBy = req . authUser . userId ;
75
82
}
83
+
84
+ // Next iterated milestone should have as startDate this milestone's endDate plus one day
76
85
startDate = moment . utc ( milestone . endDate ) . add ( 1 , 'days' ) . toDate ( ) ;
77
86
return milestone . save ( ) ;
78
87
} ) . value ( ) ;
0 commit comments