From 6cbbc2b16f059a0d2b1f65a371e3c1e1f4c11fde Mon Sep 17 00:00:00 2001
From: Daniel Friesel
Date: Thu, 13 Feb 2020 18:35:42 +0100
Subject: avoid stale data when marking cancelled arrivals
---
lib/Travelynx/Command/work.pm | 19 ++++++++++++++++++-
templates/_checked_in.html.ep | 7 ++++---
templates/_public_status_card.html.ep | 7 +++++++
3 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/lib/Travelynx/Command/work.pm b/lib/Travelynx/Command/work.pm
index 9658ff6..04ea95b 100644
--- a/lib/Travelynx/Command/work.pm
+++ b/lib/Travelynx/Command/work.pm
@@ -136,9 +136,26 @@ sub run {
);
if ( $train->arrival_is_cancelled ) {
+ # depending on the amount of users in transit, some time may
+ # have passed between fetching $entry from the database and
+ # now. Ensure that the user is still checked into this train
+ # before calling checkout to mark the cancellation.
+ if (
+ $db->select(
+ 'in_transit',
+ 'count(*) as count',
+ {
+ user_id => $uid,
+ train_no => $train->train_no,
+ checkout_station_id => $arr
+ }
+ )->hash->{count}
+ )
+ {
# check out (adds a cancelled journey and resets journey state
# to destination selection)
- $self->app->checkout( $arr, 0, $uid );
+ $self->app->checkout( $arr, 0, $uid );
+ }
}
else {
$self->app->add_route_timestamps( $uid, $train, 0 );
diff --git a/templates/_checked_in.html.ep b/templates/_checked_in.html.ep
index 4edb1a6..e81de60 100644
--- a/templates/_checked_in.html.ep
+++ b/templates/_checked_in.html.ep
@@ -165,9 +165,10 @@
% }
% if ($journey->{extra_data}{cancelled_destination}) {
- Der Halt in <%= $journey->{extra_data}{cancelled_destination} %>
- entfällt. Der Zugausfall wurde bereits vermerkt. Bitte wähle ein
- neues Reiseziel.
+ Der Halt an der Zielstation <%=
+ $journey->{extra_data}{cancelled_destination} %> entfällt.
+ Die zugehörige Fahrt wurde bereits als ausgefallen eingetragen.
+ Bitte wähle ein neues Reiseziel.
% }
% if (@{$journey->{messages} // []} or @{$journey->{extra_data}{qos_msg} // []}) {
diff --git a/templates/_public_status_card.html.ep b/templates/_public_status_card.html.ep
index 6979ad7..810c4b8 100644
--- a/templates/_public_status_card.html.ep
+++ b/templates/_public_status_card.html.ep
@@ -125,6 +125,13 @@
% }
+ % if ($journey->{extra_data}{cancelled_destination}) {
+
+ error
+ Der Halt an der Zielstation <%=
+ $journey->{extra_data}{cancelled_destination} %> entfällt.
+
+ % }
% if (@{$journey->{messages} // []} > 0 and $journey->{messages}[0]) {