diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2020-02-13 18:35:42 +0100 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2020-02-13 18:35:42 +0100 |
commit | 6cbbc2b16f059a0d2b1f65a371e3c1e1f4c11fde (patch) | |
tree | e98ae1650d2969c7f2d15ca07ed1ed1be23d9d36 /lib/Travelynx/Command | |
parent | a830acc69877e204e5136e0862959164691683ca (diff) |
avoid stale data when marking cancelled arrivals1.14.9
Diffstat (limited to 'lib/Travelynx/Command')
-rw-r--r-- | lib/Travelynx/Command/work.pm | 19 |
1 files changed, 18 insertions, 1 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 ); |