show cancelled trains in history

This commit is contained in:
Daniel Friesel 2019-03-19 21:23:06 +01:00
parent 01df965d66
commit 531f3b0a68
3 changed files with 80 additions and 19 deletions

View file

@ -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 {

View file

@ -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>

View file

@ -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}) {