diff --git a/src/app/services/analytics/algorithms/shortest-travel-time-search.ts b/src/app/services/analytics/algorithms/shortest-travel-time-search.ts index 2414d804e..ed0e2a825 100644 --- a/src/app/services/analytics/algorithms/shortest-travel-time-search.ts +++ b/src/app/services/analytics/algorithms/shortest-travel-time-search.ts @@ -352,7 +352,7 @@ export class ShortestTravelTimeSearch { private getOutgoingEdge(trainrunSection: TrainrunSection, node: Node): ShortestDistanceEdge { const path: TrainrunSection[] = []; - const iterator = this.trainrunService.getNonStopIterator(node, trainrunSection); + const iterator = this.trainrunService.getNextExpandedStopIterator(node, trainrunSection); while (iterator.hasNext()) { iterator.next(); diff --git a/src/app/services/data/trainrun-section-times.service.ts b/src/app/services/data/trainrun-section-times.service.ts index 72918035b..7eb4c9df3 100644 --- a/src/app/services/data/trainrun-section-times.service.ts +++ b/src/app/services/data/trainrun-section-times.service.ts @@ -26,6 +26,7 @@ export class TrainrunSectionTimesService { rightDepartureTime: 0, rightArrivalTime: 0, travelTime: 0, + stopTime: 0, }; private nodesOrdered: Node[] = []; @@ -142,15 +143,20 @@ export class TrainrunSectionTimesService { ); if (!this.lockStructure.rightLock) { this.timeStructure.rightArrivalTime = - this.timeStructure.leftDepartureTime + (this.timeStructure.travelTime % 60); + this.timeStructure.leftDepartureTime + + ((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60); this.timeStructure.rightArrivalTime %= 60; this.timeStructure.rightDepartureTime = TrainrunsectionHelper.getSymmetricTime( this.timeStructure.rightArrivalTime, ); } else if (!this.lockStructure.travelTimeLock && this.lockStructure.rightLock) { - const extraHour = this.timeStructure.travelTime - (this.timeStructure.travelTime % 60); + const extraHour = + this.timeStructure.travelTime - + ((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60); this.timeStructure.travelTime = - this.timeStructure.rightArrivalTime - this.timeStructure.leftDepartureTime; + this.timeStructure.rightArrivalTime - + this.timeStructure.leftDepartureTime - + this.timeStructure.stopTime; this.timeStructure.travelTime += this.timeStructure.travelTime < 0 ? 60 : 0; this.timeStructure.travelTime += extraHour; } else { @@ -234,15 +240,20 @@ export class TrainrunSectionTimesService { if (!this.lockStructure.leftLock) { this.timeStructure.leftDepartureTime = - this.timeStructure.rightArrivalTime - (this.timeStructure.travelTime % 60); + this.timeStructure.rightArrivalTime - + ((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60); this.timeStructure.leftDepartureTime += this.timeStructure.leftDepartureTime < 0 ? 60 : 0; this.timeStructure.leftArrivalTime = TrainrunsectionHelper.getSymmetricTime( this.timeStructure.leftDepartureTime, ); } else if (!this.lockStructure.travelTimeLock && this.lockStructure.leftLock) { - const extraHour = this.timeStructure.travelTime - (this.timeStructure.travelTime % 60); + const extraHour = + this.timeStructure.travelTime - + ((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60); this.timeStructure.travelTime = - this.timeStructure.rightArrivalTime - this.timeStructure.leftDepartureTime; + this.timeStructure.rightArrivalTime - + this.timeStructure.leftDepartureTime - + this.timeStructure.stopTime; this.timeStructure.travelTime += this.timeStructure.travelTime < 0 ? 60 : 0; this.timeStructure.travelTime += extraHour; } else { @@ -280,15 +291,20 @@ export class TrainrunSectionTimesService { ); if (!this.lockStructure.leftLock) { this.timeStructure.leftArrivalTime = - this.timeStructure.rightDepartureTime + (this.timeStructure.travelTime % 60); + this.timeStructure.rightDepartureTime + + ((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60); this.timeStructure.leftArrivalTime %= 60; this.timeStructure.leftDepartureTime = TrainrunsectionHelper.getSymmetricTime( this.timeStructure.leftArrivalTime, ); } else if (!this.lockStructure.travelTimeLock && this.lockStructure.leftLock) { - const extraHour = this.timeStructure.travelTime - (this.timeStructure.travelTime % 60); + const extraHour = + this.timeStructure.travelTime - + ((this.timeStructure.travelTime + this.timeStructure.stopTime) % 60); this.timeStructure.travelTime = - this.timeStructure.leftArrivalTime - this.timeStructure.rightDepartureTime; + this.timeStructure.leftArrivalTime - + this.timeStructure.rightDepartureTime - + this.timeStructure.stopTime; this.timeStructure.travelTime += this.timeStructure.travelTime < 0 ? 60 : 0; this.timeStructure.travelTime += extraHour; } else { diff --git a/src/app/services/data/trainrun.service.ts b/src/app/services/data/trainrun.service.ts index a83f0dce2..93cbf7da2 100644 --- a/src/app/services/data/trainrun.service.ts +++ b/src/app/services/data/trainrun.service.ts @@ -20,7 +20,7 @@ import {GeneralViewFunctions} from "../../view/util/generalViewFunctions"; import { BackwardNonStopTrainrunIterator, BackwardTrainrunIterator, - NonStopTrainrunIterator, + NextExpandedStopIterator, TrainrunIterator, } from "../util/trainrun.iterator"; import {LogService} from "../../logger/log.service"; @@ -663,7 +663,7 @@ export class TrainrunService { } getLastNonStopNode(node: Node, trainrunSection: TrainrunSection): Node { - const iterator = this.getNonStopIterator(node, trainrunSection); + const iterator = this.getNextExpandedStopIterator(node, trainrunSection); while (iterator.hasNext()) { iterator.next(); } @@ -680,7 +680,7 @@ export class TrainrunService { } getLastNonStopTrainrunSection(node: Node, trainrunSection: TrainrunSection): TrainrunSection { - const iterator = this.getNonStopIterator(node, trainrunSection); + const iterator = this.getNextExpandedStopIterator(node, trainrunSection); while (iterator.hasNext()) { iterator.next(); } @@ -725,7 +725,7 @@ export class TrainrunService { sumTravelTimeUpToLastNonStopNode(node: Node, trainrunSection: TrainrunSection): number { let summedTravelTime = 0; - const iterator = this.getNonStopIterator(node, trainrunSection); + const iterator = this.getNextExpandedStopIterator(node, trainrunSection); while (iterator.hasNext()) { const nextPair = iterator.next(); summedTravelTime += nextPair.trainrunSection.getTravelTime(); @@ -734,7 +734,10 @@ export class TrainrunService { } getCumulativeTravelTime(trainrunSection: TrainrunSection) { - const iterator = this.getNonStopIterator(trainrunSection.getSourceNode(), trainrunSection); + const iterator = this.getNextExpandedStopIterator( + trainrunSection.getSourceNode(), + trainrunSection, + ); while (iterator.hasNext()) { iterator.next(); } @@ -753,7 +756,7 @@ export class TrainrunService { }, ]; let summedTravelTime = 0; - const iterator = this.getNonStopIterator(n, ts); + const iterator = this.getNextExpandedStopIterator(n, ts); while (iterator.hasNext()) { const nextPair = iterator.next(); summedTravelTime += nextPair.trainrunSection.getTravelTime(); @@ -767,7 +770,10 @@ export class TrainrunService { } getCumulativeTravelTimeAndNodePath(trainrunSection: TrainrunSection) { - const iterator = this.getNonStopIterator(trainrunSection.getSourceNode(), trainrunSection); + const iterator = this.getNextExpandedStopIterator( + trainrunSection.getSourceNode(), + trainrunSection, + ); while (iterator.hasNext()) { iterator.next(); } @@ -788,8 +794,8 @@ export class TrainrunService { return new TrainrunIterator(this.logService, node, trainrunSection); } - public getNonStopIterator(node: Node, trainrunSection: TrainrunSection) { - return new NonStopTrainrunIterator(this.logService, node, trainrunSection); + public getNextExpandedStopIterator(node: Node, trainrunSection: TrainrunSection) { + return new NextExpandedStopIterator(this.logService, node, trainrunSection); } public getBackwardIterator(node: Node, trainrunSection: TrainrunSection) { diff --git a/src/app/services/data/trainrunsection.service.ts b/src/app/services/data/trainrunsection.service.ts index 3ed3a2453..4e8fbe3ee 100644 --- a/src/app/services/data/trainrunsection.service.ts +++ b/src/app/services/data/trainrunsection.service.ts @@ -324,7 +324,7 @@ export class TrainrunSectionService implements OnDestroy { node: Node, stopNodeId: number, ) { - const iterator = this.trainrunService.getNonStopIterator(node, trainrunSection); + const iterator = this.trainrunService.getNextExpandedStopIterator(node, trainrunSection); while (iterator.hasNext()) { iterator.next(); if (iterator.current().node.getId() === stopNodeId) { @@ -878,19 +878,41 @@ export class TrainrunSectionService implements OnDestroy { const trsTimeStructure = TrainrunsectionHelper.getDefaultTimeStructure(timeStructure); let summedTravelTime = 0; - const iterator = this.trainrunService.getNonStopIterator(leftNode, trs); + const iterator = this.trainrunService.getNextExpandedStopIterator(leftNode, trs); + let prevInitialLeftArrival: number = null; + let stopTime: number; while (iterator.hasNext()) { const nextPair = iterator.next(); + const rightIsTarget = + nextPair.node.getId() === nextPair.trainrunSection.getTargetNode().getId(); + + if (prevInitialLeftArrival !== null) { + stopTime = MathUtils.mod60( + (rightIsTarget + ? nextPair.trainrunSection.getSourceDeparture() + : nextPair.trainrunSection.getTargetDeparture()) - prevInitialLeftArrival, + ); + trsTimeStructure.leftDepartureTime = trsTimeStructure.rightArrivalTime + stopTime; + trsTimeStructure.leftArrivalTime = trsTimeStructure.rightDepartureTime - stopTime; + } + prevInitialLeftArrival = rightIsTarget + ? nextPair.trainrunSection.getTargetArrival() + : nextPair.trainrunSection.getSourceArrival(); + + const isLastRightNode = + !nextPair.node.isNonStop(nextPair.trainrunSection) && !nextPair.node.getIsCollapsed(); + trsTimeStructure.travelTime = isLastRightNode + ? TrainrunsectionHelper.getLastSectionTravelTime( + newTotalTravelTime, + summedTravelTime, + precision, + ) + : TrainrunsectionHelper.getSectionDistributedTravelTime( + nextPair.trainrunSection.getTravelTime(), + travelTimeFactor, + precision, + ); - const isRightNodeNonStop = nextPair.node.isNonStop(nextPair.trainrunSection); - trsTimeStructure.travelTime = TrainrunsectionHelper.getTravelTime( - newTotalTravelTime, - summedTravelTime, - travelTimeFactor, - nextPair.trainrunSection.getTravelTime(), - isRightNodeNonStop, - precision, - ); trsTimeStructure.rightArrivalTime = TrainrunsectionHelper.getRightArrivalTime( trsTimeStructure, precision, @@ -899,8 +921,7 @@ export class TrainrunSectionService implements OnDestroy { trsTimeStructure, precision, ); - const rightIsTarget = - nextPair.node.getId() === nextPair.trainrunSection.getTargetNode().getId(); + this.updateTrainrunSectionTime( nextPair.trainrunSection.getId(), rightIsTarget ? trsTimeStructure.leftArrivalTime : trsTimeStructure.rightArrivalTime, @@ -910,8 +931,6 @@ export class TrainrunSectionService implements OnDestroy { trsTimeStructure.travelTime, ); - trsTimeStructure.leftDepartureTime = trsTimeStructure.rightArrivalTime; - trsTimeStructure.leftArrivalTime = trsTimeStructure.rightDepartureTime; summedTravelTime += trsTimeStructure.travelTime; } diff --git a/src/app/services/util/trainrun.iterator.ts b/src/app/services/util/trainrun.iterator.ts index 9018e02ad..f134e4b51 100644 --- a/src/app/services/util/trainrun.iterator.ts +++ b/src/app/services/util/trainrun.iterator.ts @@ -112,9 +112,13 @@ export class BackwardTrainrunIterator extends TrainrunIterator { } } -export class NonStopTrainrunIterator extends TrainrunIterator { +/** Iterate on the trainrun sections until we find a node which is a stop of the trainrun and not collapsed */ +export class NextExpandedStopIterator extends TrainrunIterator { public next(): TrainrunSectionNodePair { - if (!this.pointerElement.node.isNonStop(this.pointerElement.trainrunSection)) { + if ( + !this.pointerElement.node.isNonStop(this.pointerElement.trainrunSection) && + !this.pointerElement.node.getIsCollapsed() + ) { // The trainrun has a stop and break the forward iteration this.currentElement = Object.assign({}, this.pointerElement); this.pointerElement = new TrainrunSectionNodePair(undefined, undefined); diff --git a/src/app/services/util/trainrunsection.helper.spec.ts b/src/app/services/util/trainrunsection.helper.spec.ts index db2b82656..4e7cc6d7d 100644 --- a/src/app/services/util/trainrunsection.helper.spec.ts +++ b/src/app/services/util/trainrunsection.helper.spec.ts @@ -89,33 +89,45 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); expect(d.travelTime).toBe(0); + expect(d.stopTime).toBe(0); expect(d.rightDepartureTime).toBe(0); expect(d.rightArrivalTime).toBe(0); expect(d.leftDepartureTime).toBe(larts.leftDepartureTime); expect(d.leftArrivalTime).toBe(larts.leftArrivalTime); }); - it("getTravelTime -- 001", () => { - const tt = TrainrunsectionHelper.getTravelTime(10, 10, 1, 12, false, 0); + it("getLastSectionTravelTime -- 001", () => { + const tt = TrainrunsectionHelper.getLastSectionTravelTime(10, 10, 0); expect(tt).toBe(1); }); - it("getTravelTime -- 002", () => { - const tt = TrainrunsectionHelper.getTravelTime(10, 10, 1, 12, true, 0); - expect(tt).toBe(12); + it("getLastSectionTravelTime -- 002", () => { + const tt = TrainrunsectionHelper.getLastSectionTravelTime(10, 8, 0); + expect(tt).toBe(2); }); - it("getTravelTime -- 003", () => { - const tt = TrainrunsectionHelper.getTravelTime(10, 10, 1, 12, false, 0); + it("getLastSectionTravelTime -- 003", () => { + const tt = TrainrunsectionHelper.getLastSectionTravelTime(8, 10, 0); expect(tt).toBe(1); }); - it("getTravelTime -- 004", () => { - const tt = TrainrunsectionHelper.getTravelTime(8, 10, 2, 12, false, 0); - expect(tt).toBe(1); + it("getLastSectionTravelTime -- 004", () => { + const tt = TrainrunsectionHelper.getLastSectionTravelTime(10, 2, 0); + expect(tt).toBe(8); + }); + + it("getSectionDistributedTravelTime -- 001", () => { + const tt = TrainrunsectionHelper.getSectionDistributedTravelTime(12, 1, 0); + expect(tt).toBe(12); + }); + + it("getSectionDistributedTravelTime -- 002", () => { + const tt = TrainrunsectionHelper.getSectionDistributedTravelTime(12, 2, 0); + expect(tt).toBe(24); }); it("getRightArrivalTime - 001", () => { @@ -125,6 +137,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); const a = TrainrunsectionHelper.getRightArrivalTime(d); @@ -138,6 +151,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.leftArrivalTime = -10; @@ -152,6 +166,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.leftDepartureTime = undefined; @@ -166,6 +181,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); const a = TrainrunsectionHelper.getRightDepartureTime(d); @@ -179,6 +195,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.rightArrivalTime = -10; @@ -193,6 +210,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.rightArrivalTime = undefined; @@ -207,35 +225,17 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); expect(d.travelTime).toBe(0); + expect(d.stopTime).toBe(0); expect(d.rightDepartureTime).toBe(0); expect(d.rightArrivalTime).toBe(0); expect(d.leftDepartureTime).toBe(larts.leftDepartureTime); expect(d.leftArrivalTime).toBe(larts.leftArrivalTime); }); - it("getTravelTime -- 2 -- 001", () => { - const tt = TrainrunsectionHelper.getTravelTime(10, 10, 1, 12, false, 0); - expect(tt).toBe(1); - }); - - it("getTravelTime -- 2 -- 002", () => { - const tt = TrainrunsectionHelper.getTravelTime(10, 10, 1, 12, true, 0); - expect(tt).toBe(12); - }); - - it("getTravelTime -- 2 -- 003", () => { - const tt = TrainrunsectionHelper.getTravelTime(10, 10, 1, 12, false, 0); - expect(tt).toBe(1); - }); - - it("getTravelTime -- 2 -- 004", () => { - const tt = TrainrunsectionHelper.getTravelTime(8, 10, 2, 12, false, 0); - expect(tt).toBe(1); - }); - it("getRightArrivalTime - 001", () => { const larts: LeftAndRightTimeStructure = { leftDepartureTime: 10, @@ -243,6 +243,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); const a = TrainrunsectionHelper.getRightArrivalTime(d); @@ -256,6 +257,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.leftArrivalTime = -10; @@ -270,6 +272,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.leftDepartureTime = undefined; @@ -284,6 +287,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); const a = TrainrunsectionHelper.getRightDepartureTime(d); @@ -297,6 +301,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.rightArrivalTime = -10; @@ -311,6 +316,7 @@ describe("TrainrunsectionHelper", () => { rightDepartureTime: 20, rightArrivalTime: 40, travelTime: 10, + stopTime: 0, }; const d = TrainrunsectionHelper.getDefaultTimeStructure(larts); d.rightArrivalTime = undefined; diff --git a/src/app/services/util/trainrunsection.helper.ts b/src/app/services/util/trainrunsection.helper.ts index 219568a72..94923a198 100644 --- a/src/app/services/util/trainrunsection.helper.ts +++ b/src/app/services/util/trainrunsection.helper.ts @@ -36,28 +36,30 @@ export class TrainrunsectionHelper { rightDepartureTime: 0, rightArrivalTime: 0, travelTime: 0, + stopTime: 0, }; } - static getTravelTime( + static getLastSectionTravelTime( totalTravelTime: number, summedTravelTime: number, - travelTimeFactor: number, + precision = TrainrunSectionService.TIME_PRECISION, + ): number { + return Math.max( + MathUtils.round(totalTravelTime - summedTravelTime, precision), + 1.0 / Math.pow(10, precision), + ); + } + + static getSectionDistributedTravelTime( trsTravelTime: number, - isRightNodeNonStopTransit: boolean, + travelTimeFactor: number, precision = TrainrunSectionService.TIME_PRECISION, ): number { - if (isRightNodeNonStopTransit) { - return Math.max( - MathUtils.round(trsTravelTime * travelTimeFactor, precision), - 1.0 / Math.pow(10, precision), - ); - } else { - return Math.max( - MathUtils.round(totalTravelTime - summedTravelTime, precision), - 1.0 / Math.pow(10, precision), - ); - } + return Math.max( + MathUtils.round(trsTravelTime * travelTimeFactor, precision), + 1.0 / Math.pow(10, precision), + ); } static getRightArrivalTime( @@ -259,6 +261,7 @@ export class TrainrunsectionHelper { mappedTimeStructure.rightDepartureTime = timeStructure.leftDepartureTime; mappedTimeStructure.leftDepartureTime = timeStructure.rightDepartureTime; mappedTimeStructure.travelTime = timeStructure.travelTime; + mappedTimeStructure.stopTime = timeStructure.stopTime; return mappedTimeStructure; } return timeStructure; @@ -284,12 +287,17 @@ export class TrainrunsectionHelper { : bothLastNonStopTrainrunSections.lastNonStopTrainrunSection2; const cumulativeTravelTime = this.trainrunService.getCumulativeTravelTime(trainrunSection); + const totalDuration = + lastRightNode.getArrivalTime(rightTrainrunSection) - + lastLeftNode.getDepartureTime(leftTrainrunSection); + return { leftDepartureTime: lastLeftNode.getDepartureTime(leftTrainrunSection), leftArrivalTime: lastLeftNode.getArrivalTime(leftTrainrunSection), rightDepartureTime: lastRightNode.getDepartureTime(rightTrainrunSection), rightArrivalTime: lastRightNode.getArrivalTime(rightTrainrunSection), travelTime: cumulativeTravelTime, + stopTime: MathUtils.mod60(totalDuration - cumulativeTravelTime), }; } diff --git a/src/app/utils/math.ts b/src/app/utils/math.ts index f3a042723..c628714b7 100644 --- a/src/app/utils/math.ts +++ b/src/app/utils/math.ts @@ -7,4 +7,9 @@ export class MathUtils { const multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; } + + /** Computes the positive modulo 60 of a given number */ + static mod60(value: number): number { + return ((value % 60) + 60) % 60; + } } diff --git a/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-card/trainrun-section-card.component.ts b/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-card/trainrun-section-card.component.ts index bca49632d..68d986481 100644 --- a/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-card/trainrun-section-card.component.ts +++ b/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-card/trainrun-section-card.component.ts @@ -208,7 +208,7 @@ export class TrainrunSectionCardComponent implements OnInit, AfterViewInit, OnDe this.trainrunService.updateDirection(selectedTrainrun, Direction.ONE_WAY); } - getTrainrunTimeStructure(): Omit { + getTrainrunTimeStructure(): Omit { const selectedTrainrun = this.trainrunService.getSelectedTrainrun(); if (!selectedTrainrun) { return undefined; diff --git a/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-tab/trainrun-section-tab.component.html b/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-tab/trainrun-section-tab.component.html index 4cc193e1a..db1bb74fa 100644 --- a/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-tab/trainrun-section-tab.component.html +++ b/src/app/view/dialogs/trainrun-and-section-dialog/trainrunsection-tab/trainrun-section-tab.component.html @@ -266,6 +266,9 @@ - +
+

+ {{ trainrunSectionTimesService.getTimeStructure().stopTime }}' stop

+
{ const iteratorNodeIds = [1, 2]; - const itr = new NonStopTrainrunIterator( + const itr = new NextExpandedStopIterator( logService, node2, node2.getTrainrunSection(startingTrainrunSection.getTrainrun()),