summaryrefslogtreecommitdiff
path: root/lib/Travelynx
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
parenta1865fa69e3a90e484e8423e256e1cb969b7e04d (diff)
handle departure cancellation after checkin
Diffstat (limited to 'lib/Travelynx')
-rw-r--r--lib/Travelynx/Command/work.pm39
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm4
2 files changed, 42 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 ($@) {
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index 7a9ab9e..59466f3 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -133,6 +133,10 @@ sub status_card {
if ( $status->{checked_in} ) {
$self->render( '_checked_in', journey => $status );
}
+ elsif ( $status->{cancellation} ) {
+ $self->render( '_cancelled_departure',
+ journey => $status->{cancellation} );
+ }
else {
$self->render( '_checked_out', journey => $status );
}