diff options
-rwxr-xr-x | index.pl | 33 | ||||
-rw-r--r-- | templates/history.html.ep | 45 | ||||
-rw-r--r-- | templates/journey.html.ep | 21 |
3 files changed, 80 insertions, 19 deletions
@@ -808,6 +808,11 @@ helper 'get_user_travels' => sub { else { $query->execute($uid); } + my @match_actions = ( $action_type{checkout}, $action_type{checkin} ); + if ( $opt{cancelled} ) { + @match_actions + = ( $action_type{cancelled_to}, $action_type{cancelled_from} ); + } my @travels; my $prev_action = 0; @@ -823,7 +828,9 @@ helper 'get_user_travels' => sub { $raw_route = decode( 'UTF-8', $raw_route ); $raw_messages = decode( 'UTF-8', $raw_messages ); - if ( $action == $action_type{checkout} ) { + if ( $action == $match_actions[0] + or ( $opt{checkout_epoch} and $raw_ts == $opt{checkout_epoch} ) ) + { push( @travels, { @@ -843,8 +850,13 @@ helper 'get_user_travels' => sub { } ); } - elsif ( $action == $action_type{checkin} - and $prev_action == $action_type{checkout} ) + elsif ( + ( + $action == $match_actions[1] + and $prev_action == $match_actions[0] + ) + or ( $opt{checkin_epoch} and $raw_ts == $opt{checkin_epoch} ) + ) { my $ref = $travels[-1]; $ref->{from_name} = $name; @@ -866,6 +878,11 @@ helper 'get_user_travels' => sub { } $ref->{messages} = [ reverse @parsed_messages ]; } + if ( $opt{checkin_epoch} + and $action == $action_type{cancelled_from} ) + { + $ref->{cancelled} = 1; + } } $prev_action = $action; } @@ -1442,17 +1459,21 @@ get '/account' => sub { get '/history' => sub { my ($self) = @_; + my $cancelled = $self->param('cancelled') ? 1 : 0; $self->respond_to( - json => { json => [ $self->get_user_travels ] }, - any => { template => 'history' } + json => + { json => [ $self->get_user_travels( cancelled => $cancelled ) ] }, + any => { template => 'history' } ); }; get '/history.json' => sub { my ($self) = @_; + my $cancelled = $self->param('cancelled') ? 1 : 0; - $self->render( json => [ $self->get_user_travels ] ); + $self->render( + json => [ $self->get_user_travels( cancelled => $cancelled ) ] ); }; get '/journey/:id' => sub { diff --git a/templates/history.html.ep b/templates/history.html.ep index d79b515..c2e6f88 100644 --- a/templates/history.html.ep +++ b/templates/history.html.ep @@ -1,11 +1,25 @@ +% if (param('cancelled')) { +<h1>Ausgefallene Fahrten</h1> +<div class="row"> + <div class="col s12"> + <ul> + <li><a href="/history.json?cancelled=1">JSON-Export</a> (Das Datenlayout ist noch nicht final)</li> + <li><a href="/history">Reguläre Zugfahrten</a></li> + </ul> + </div> +</div> +% } +% else { <h1>Bisherige Fahrten</h1> <div class="row"> <div class="col s12"> <ul> <li><a href="/history.json">JSON-Export</a> (Das Datenlayout ist noch nicht final)</li> + <li><a href="/history?cancelled=1">Ausgefallene Züge</a></li> </ul> </div> </div> +% } <div class="row"> <div class="col s12"> <table class="striped"> @@ -19,25 +33,36 @@ </tr> </thead> <tbody> - % for my $travel (get_user_travels()) { + % for my $travel (get_user_travels(cancelled => (param('cancelled') ? 1 : 0))) { % if ($travel->{completed}) { % my $detail_link = '/journey/' . current_user()->{id} . '-' . $travel->{checkin}->epoch . '-' . $travel->{checkout}->epoch; <tr> <td><%= $travel->{sched_departure}->strftime('%d.%m.%Y') %></td> <td><a href="<%= $detail_link %>"><%= $travel->{type} %> <%= $travel->{line} // '' %> <%= $travel->{no} %></a></td> <td><a href="<%= $detail_link %>"><%= $travel->{from_name} %> → <%= $travel->{to_name} %></a></td> - <td><%= $travel->{rt_departure}->strftime('%H:%M') %> - % if ($travel->{sched_departure} != $travel->{rt_departure}) { - (+<%= ($travel->{rt_departure}->epoch - $travel->{sched_departure}->epoch) / 60 %>) + <td> + % if (param('cancelled')) { + %= $travel->{sched_departure}->strftime('%H:%M') + % } + % else { + <%= $travel->{rt_departure}->strftime('%H:%M') %> + % if ($travel->{sched_departure} != $travel->{rt_departure}) { + (+<%= ($travel->{rt_departure}->epoch - $travel->{sched_departure}->epoch) / 60 %>) + % } % } </td> <td> - % if ($travel->{rt_arrival}->epoch == 0 and $travel->{sched_arrival}->epoch == 0) { - <i class="material-icons">timer_off</i> - % } else { - %= $travel->{rt_arrival}->strftime('%H:%M'); - % if ($travel->{sched_arrival} != $travel->{rt_arrival}) { - (+<%= ($travel->{rt_arrival}->epoch - $travel->{sched_arrival}->epoch) / 60 %>) + % if (param('cancelled') and $travel->{sched_arrival}->epoch != 0) { + %= $travel->{sched_arrival}->strftime('%H:%M') + % } + % else { + % if ($travel->{rt_arrival}->epoch == 0 and $travel->{sched_arrival}->epoch == 0) { + <i class="material-icons">timer_off</i> + % } else { + %= $travel->{rt_arrival}->strftime('%H:%M'); + % if ($travel->{sched_arrival} != $travel->{rt_arrival}) { + (+<%= ($travel->{rt_arrival}->epoch - $travel->{sched_arrival}->epoch) / 60 %>) + % } % } % } </td> diff --git a/templates/journey.html.ep b/templates/journey.html.ep index 6c49538..abd9ba8 100644 --- a/templates/journey.html.ep +++ b/templates/journey.html.ep @@ -14,7 +14,12 @@ <div class="row"> <div class="col s12"> <p> - Fahrt von + % if ($journey->{cancelled}) { + Ausgefallene Fahrt von + % } + % else { + Fahrt von + % } <b><%= $journey->{from_name} %></b> nach <b><%= $journey->{to_name} %></b> @@ -34,7 +39,11 @@ <tr> <th scope="row">Abfahrt</th> <td> - % if ($journey->{rt_departure} != $journey->{sched_departure}) { + % if ($journey->{cancelled}) { + <i class="material-icons">cancel</i> + (Plan: <%= $journey->{sched_departure}->strftime('%H:%M'); %>) + % } + % elsif ($journey->{rt_departure} != $journey->{sched_departure}) { %= $journey->{rt_departure}->strftime('%H:%M'); (+<%= ($journey->{rt_departure}->epoch - $journey->{sched_departure}->epoch) / 60 %>, Plan: <%= $journey->{sched_departure}->strftime('%H:%M'); %>) @@ -47,7 +56,13 @@ <tr> <th scope="row">Ankunft</th> <td> - % if ($journey->{rt_arrival}->epoch == 0 and $journey->{sched_arrival}->epoch == 0) { + % if ($journey->{cancelled}) { + <i class="material-icons">cancel</i> + % if ($journey->{sched_arrival}->epoch != 0) { + (Plan: <%= $journey->{sched_arrival}->strftime('%H:%M'); %>) + % } + % } + % elsif ($journey->{rt_arrival}->epoch == 0 and $journey->{sched_arrival}->epoch == 0) { <i class="material-icons">timer_off</i> % } % elsif ($journey->{rt_arrival} != $journey->{sched_arrival}) { |