summaryrefslogtreecommitdiff
path: root/lib/Travelynx/Command
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-02-17 21:13:07 +0100
committerDaniel Friesel <derf@finalrewind.org>2020-02-17 21:13:07 +0100
commitcc7439dd5e051904aa03e21a7a50bda106c43ae0 (patch)
tree8d0e84931ca4807ca53c61f38e6df7c5700b4433 /lib/Travelynx/Command
parenta1865fa69e3a90e484e8423e256e1cb969b7e04d (diff)
handle departure cancellation after checkin
Diffstat (limited to 'lib/Travelynx/Command')
-rw-r--r--lib/Travelynx/Command/work.pm39
1 files changed, 38 insertions, 1 deletions
diff --git a/lib/Travelynx/Command/work.pm b/lib/Travelynx/Command/work.pm
index 04ea95b..04dbd2d 100644
--- a/lib/Travelynx/Command/work.pm
+++ b/lib/Travelynx/Command/work.pm
@@ -70,7 +70,44 @@ sub run {
train_no => $train->train_no
}
);
- $self->app->add_route_timestamps( $uid, $train, 1 );
+ if ( $train->departure_is_cancelled and $arr ) {
+
+ # 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,
+ checkin_station_id => $dep
+ }
+ )->hash->{count}
+ )
+ {
+ $db->update(
+ 'in_transit',
+ {
+ cancelled => 1,
+ },
+ {
+ user_id => $uid,
+ train_no => $train->train_no,
+ checkin_station_id => $dep
+ }
+ );
+
+ # check out (adds a cancelled journey and resets journey state
+ # to checkin
+ $self->app->checkout( $arr, 1, $uid );
+ }
+ }
+ else {
+ $self->app->add_route_timestamps( $uid, $train, 1 );
+ }
}
};
if ($@) {