Skip to content

Commit f2c04ca

Browse files
committed
feat: add stop time props in LeftAndRightTimeStructure
Until now, a time structure has represented one or several trainrun sections without any stops, so it could be described by its departure and arrival times (right and left) and its travel time. Since we are now going to handle several trainrun sections that include stops, we need to add a new property to store the total stop time in the time structure. Signed-off-by: Clara Ni <[email protected]>
1 parent c9bbdcb commit f2c04ca

File tree

6 files changed

+55
-10
lines changed

6 files changed

+55
-10
lines changed

src/app/services/data/trainrun-section-times.service.ts

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export class TrainrunSectionTimesService {
2626
rightDepartureTime: 0,
2727
rightArrivalTime: 0,
2828
travelTime: 0,
29+
stopTime: 0,
2930
};
3031

3132
private nodesOrdered: Node[] = [];
@@ -142,15 +143,20 @@ export class TrainrunSectionTimesService {
142143
);
143144
if (!this.lockStructure.rightLock) {
144145
this.timeStructure.rightArrivalTime =
145-
this.timeStructure.leftDepartureTime + (this.timeStructure.travelTime % 60);
146+
this.timeStructure.leftDepartureTime +
147+
((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60);
146148
this.timeStructure.rightArrivalTime %= 60;
147149
this.timeStructure.rightDepartureTime = TrainrunsectionHelper.getSymmetricTime(
148150
this.timeStructure.rightArrivalTime,
149151
);
150152
} else if (!this.lockStructure.travelTimeLock && this.lockStructure.rightLock) {
151-
const extraHour = this.timeStructure.travelTime - (this.timeStructure.travelTime % 60);
153+
const extraHour =
154+
this.timeStructure.travelTime -
155+
((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60);
152156
this.timeStructure.travelTime =
153-
this.timeStructure.rightArrivalTime - this.timeStructure.leftDepartureTime;
157+
this.timeStructure.rightArrivalTime -
158+
this.timeStructure.leftDepartureTime -
159+
this.timeStructure.stopTime;
154160
this.timeStructure.travelTime += this.timeStructure.travelTime < 0 ? 60 : 0;
155161
this.timeStructure.travelTime += extraHour;
156162
} else {
@@ -234,15 +240,20 @@ export class TrainrunSectionTimesService {
234240

235241
if (!this.lockStructure.leftLock) {
236242
this.timeStructure.leftDepartureTime =
237-
this.timeStructure.rightArrivalTime - (this.timeStructure.travelTime % 60);
243+
this.timeStructure.rightArrivalTime -
244+
((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60);
238245
this.timeStructure.leftDepartureTime += this.timeStructure.leftDepartureTime < 0 ? 60 : 0;
239246
this.timeStructure.leftArrivalTime = TrainrunsectionHelper.getSymmetricTime(
240247
this.timeStructure.leftDepartureTime,
241248
);
242249
} else if (!this.lockStructure.travelTimeLock && this.lockStructure.leftLock) {
243-
const extraHour = this.timeStructure.travelTime - (this.timeStructure.travelTime % 60);
250+
const extraHour =
251+
this.timeStructure.travelTime -
252+
((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60);
244253
this.timeStructure.travelTime =
245-
this.timeStructure.rightArrivalTime - this.timeStructure.leftDepartureTime;
254+
this.timeStructure.rightArrivalTime -
255+
this.timeStructure.leftDepartureTime -
256+
this.timeStructure.stopTime;
246257
this.timeStructure.travelTime += this.timeStructure.travelTime < 0 ? 60 : 0;
247258
this.timeStructure.travelTime += extraHour;
248259
} else {
@@ -280,15 +291,20 @@ export class TrainrunSectionTimesService {
280291
);
281292
if (!this.lockStructure.leftLock) {
282293
this.timeStructure.leftArrivalTime =
283-
this.timeStructure.rightDepartureTime + (this.timeStructure.travelTime % 60);
294+
this.timeStructure.rightDepartureTime +
295+
((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60);
284296
this.timeStructure.leftArrivalTime %= 60;
285297
this.timeStructure.leftDepartureTime = TrainrunsectionHelper.getSymmetricTime(
286298
this.timeStructure.leftArrivalTime,
287299
);
288300
} else if (!this.lockStructure.travelTimeLock && this.lockStructure.leftLock) {
289-
const extraHour = this.timeStructure.travelTime - (this.timeStructure.travelTime % 60);
301+
const extraHour =
302+
this.timeStructure.travelTime -
303+
((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60);
290304
this.timeStructure.travelTime =
291-
this.timeStructure.leftArrivalTime - this.timeStructure.rightDepartureTime;
305+
this.timeStructure.leftArrivalTime -
306+
this.timeStructure.rightDepartureTime -
307+
this.timeStructure.stopTime;
292308
this.timeStructure.travelTime += this.timeStructure.travelTime < 0 ? 60 : 0;
293309
this.timeStructure.travelTime += extraHour;
294310
} else {

src/app/services/util/trainrunsection.helper.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,11 @@ describe("TrainrunsectionHelper", () => {
8989
rightDepartureTime: 20,
9090
rightArrivalTime: 40,
9191
travelTime: 10,
92+
stopTime: 0,
9293
};
9394
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
9495
expect(d.travelTime).toBe(0);
96+
expect(d.stopTime).toBe(0);
9597
expect(d.rightDepartureTime).toBe(0);
9698
expect(d.rightArrivalTime).toBe(0);
9799
expect(d.leftDepartureTime).toBe(larts.leftDepartureTime);
@@ -135,6 +137,7 @@ describe("TrainrunsectionHelper", () => {
135137
rightDepartureTime: 20,
136138
rightArrivalTime: 40,
137139
travelTime: 10,
140+
stopTime: 0,
138141
};
139142
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
140143
const a = TrainrunsectionHelper.getRightArrivalTime(d);
@@ -148,6 +151,7 @@ describe("TrainrunsectionHelper", () => {
148151
rightDepartureTime: 20,
149152
rightArrivalTime: 40,
150153
travelTime: 10,
154+
stopTime: 0,
151155
};
152156
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
153157
d.leftArrivalTime = -10;
@@ -162,6 +166,7 @@ describe("TrainrunsectionHelper", () => {
162166
rightDepartureTime: 20,
163167
rightArrivalTime: 40,
164168
travelTime: 10,
169+
stopTime: 0,
165170
};
166171
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
167172
d.leftDepartureTime = undefined;
@@ -176,6 +181,7 @@ describe("TrainrunsectionHelper", () => {
176181
rightDepartureTime: 20,
177182
rightArrivalTime: 40,
178183
travelTime: 10,
184+
stopTime: 0,
179185
};
180186
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
181187
const a = TrainrunsectionHelper.getRightDepartureTime(d);
@@ -189,6 +195,7 @@ describe("TrainrunsectionHelper", () => {
189195
rightDepartureTime: 20,
190196
rightArrivalTime: 40,
191197
travelTime: 10,
198+
stopTime: 0,
192199
};
193200
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
194201
d.rightArrivalTime = -10;
@@ -203,6 +210,7 @@ describe("TrainrunsectionHelper", () => {
203210
rightDepartureTime: 20,
204211
rightArrivalTime: 40,
205212
travelTime: 10,
213+
stopTime: 0,
206214
};
207215
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
208216
d.rightArrivalTime = undefined;
@@ -217,9 +225,11 @@ describe("TrainrunsectionHelper", () => {
217225
rightDepartureTime: 20,
218226
rightArrivalTime: 40,
219227
travelTime: 10,
228+
stopTime: 0,
220229
};
221230
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
222231
expect(d.travelTime).toBe(0);
232+
expect(d.stopTime).toBe(0);
223233
expect(d.rightDepartureTime).toBe(0);
224234
expect(d.rightArrivalTime).toBe(0);
225235
expect(d.leftDepartureTime).toBe(larts.leftDepartureTime);
@@ -233,6 +243,7 @@ describe("TrainrunsectionHelper", () => {
233243
rightDepartureTime: 20,
234244
rightArrivalTime: 40,
235245
travelTime: 10,
246+
stopTime: 0,
236247
};
237248
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
238249
const a = TrainrunsectionHelper.getRightArrivalTime(d);
@@ -246,6 +257,7 @@ describe("TrainrunsectionHelper", () => {
246257
rightDepartureTime: 20,
247258
rightArrivalTime: 40,
248259
travelTime: 10,
260+
stopTime: 0,
249261
};
250262
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
251263
d.leftArrivalTime = -10;
@@ -260,6 +272,7 @@ describe("TrainrunsectionHelper", () => {
260272
rightDepartureTime: 20,
261273
rightArrivalTime: 40,
262274
travelTime: 10,
275+
stopTime: 0,
263276
};
264277
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
265278
d.leftDepartureTime = undefined;
@@ -274,6 +287,7 @@ describe("TrainrunsectionHelper", () => {
274287
rightDepartureTime: 20,
275288
rightArrivalTime: 40,
276289
travelTime: 10,
290+
stopTime: 0,
277291
};
278292
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
279293
const a = TrainrunsectionHelper.getRightDepartureTime(d);
@@ -287,6 +301,7 @@ describe("TrainrunsectionHelper", () => {
287301
rightDepartureTime: 20,
288302
rightArrivalTime: 40,
289303
travelTime: 10,
304+
stopTime: 0,
290305
};
291306
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
292307
d.rightArrivalTime = -10;
@@ -301,6 +316,7 @@ describe("TrainrunsectionHelper", () => {
301316
rightDepartureTime: 20,
302317
rightArrivalTime: 40,
303318
travelTime: 10,
319+
stopTime: 0,
304320
};
305321
const d = TrainrunsectionHelper.getDefaultTimeStructure(larts);
306322
d.rightArrivalTime = undefined;

src/app/services/util/trainrunsection.helper.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export class TrainrunsectionHelper {
3636
rightDepartureTime: 0,
3737
rightArrivalTime: 0,
3838
travelTime: 0,
39+
stopTime: 0,
3940
};
4041
}
4142

@@ -260,6 +261,7 @@ export class TrainrunsectionHelper {
260261
mappedTimeStructure.rightDepartureTime = timeStructure.leftDepartureTime;
261262
mappedTimeStructure.leftDepartureTime = timeStructure.rightDepartureTime;
262263
mappedTimeStructure.travelTime = timeStructure.travelTime;
264+
mappedTimeStructure.stopTime = timeStructure.stopTime;
263265
return mappedTimeStructure;
264266
}
265267
return timeStructure;
@@ -285,12 +287,17 @@ export class TrainrunsectionHelper {
285287
: bothLastNonStopTrainrunSections.lastNonStopTrainrunSection2;
286288
const cumulativeTravelTime = this.trainrunService.getCumulativeTravelTime(trainrunSection);
287289

290+
const totalDuration =
291+
lastRightNode.getArrivalTime(rightTrainrunSection) -
292+
lastLeftNode.getDepartureTime(leftTrainrunSection);
293+
288294
return {
289295
leftDepartureTime: lastLeftNode.getDepartureTime(leftTrainrunSection),
290296
leftArrivalTime: lastLeftNode.getArrivalTime(leftTrainrunSection),
291297
rightDepartureTime: lastRightNode.getDepartureTime(rightTrainrunSection),
292298
rightArrivalTime: lastRightNode.getArrivalTime(rightTrainrunSection),
293299
travelTime: cumulativeTravelTime,
300+
stopTime: MathUtils.mod60(totalDuration - cumulativeTravelTime),
294301
};
295302
}
296303

src/app/utils/math.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@ export class MathUtils {
77
const multiplier = Math.pow(10, precision || 0);
88
return Math.round(value * multiplier) / multiplier;
99
}
10+
11+
/** Computes the positive modulo 60 of a given number */
12+
static mod60(value: number): number {
13+
return ((value % 60) + 60) % 60;
14+
}
1015
}

src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-card/trainrun-section-card.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ export class TrainrunSectionCardComponent implements OnInit, AfterViewInit, OnDe
208208
this.trainrunService.updateDirection(selectedTrainrun, Direction.ONE_WAY);
209209
}
210210

211-
getTrainrunTimeStructure(): Omit<LeftAndRightTimeStructure, "travelTime"> {
211+
getTrainrunTimeStructure(): Omit<LeftAndRightTimeStructure, "travelTime" | "stopTime"> {
212212
const selectedTrainrun = this.trainrunService.getSelectedTrainrun();
213213
if (!selectedTrainrun) {
214214
return undefined;

src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-tab/trainrun-section-tab.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface LeftAndRightTimeStructure {
3131
rightDepartureTime: number;
3232
rightArrivalTime: number;
3333
travelTime: number;
34+
stopTime: number;
3435
}
3536

3637
export interface LeftAndRightLockStructure {

0 commit comments

Comments
 (0)