Commit ffee7177 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Refactor history template, add yearly stats

parent 828dd542
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1468,11 +1468,13 @@ qq{select * from pending_mails where email = ? and num_tries > 1;}
	);

	$authed_r->get('/account')->to('account#account');
	$authed_r->get('/cancelled')->to('traveling#cancelled');
	$authed_r->get('/change_password')->to('account#password_form');
	$authed_r->get('/export.json')->to('account#json_export');
	$authed_r->get('/history.json')->to('traveling#json_history');
	$authed_r->get('/history')->to('traveling#history');
	$authed_r->get('/history/:year')->to('traveling#yearly_history');
	$authed_r->get('/history/:year/:month')->to('traveling#monthly_history');
	$authed_r->get('/history.json')->to('traveling#json_history');
	$authed_r->get('/journey/:id')->to('traveling#journey_details');
	$authed_r->get('/s/*station')->to('traveling#station');
	$authed_r->post('/change_password')->to('account#change_password');
+57 −14
Original line number Diff line number Diff line
@@ -250,34 +250,79 @@ sub redirect_to_station {
	$self->redirect_to("/s/${station}");
}

sub history {
sub cancelled {
	my ($self) = @_;
	my $cancelled = $self->param('cancelled') ? 1 : 0;

	my @journeys = $self->get_user_travels( cancelled => $cancelled );
	my @journeys = $self->get_user_travels( cancelled => 1 );

	$self->respond_to(
		json => { json => [@journeys] },
		any  => {
			template => 'history',
			template => 'cancelled',
			journeys => [@journeys]
		}
	);
}

sub history {
	my ($self) = @_;

	$self->render( template => 'history' );
}

sub json_history {
	my ($self) = @_;
	my $cancelled = $self->param('cancelled') ? 1 : 0;

	$self->render(
		json => [ $self->get_user_travels( cancelled => $cancelled ) ] );
	$self->render( json => [ $self->get_user_travels ] );
}

sub yearly_history {
	my ($self) = @_;
	my $year = $self->stash('year');
	my @journeys;
	my $stats;

	if ( not $year =~ m{ ^ [0-9]{4} $ }x ) {
		@journeys = $self->get_user_travels;
	}
	else {
		my $interval_start = DateTime->new(
			time_zone => 'Europe/Berlin',
			year      => $year,
			month     => 1,
			day       => 1,
			hour      => 0,
			minute    => 0,
			second    => 0,
		);
		my $interval_end = $interval_start->clone->add( years => 1 );
		@journeys = $self->get_user_travels(
			after  => $interval_start,
			before => $interval_end
		);
		$stats = $self->get_journey_stats( year => $year );
	}

	$self->respond_to(
		json => {
			json => {
				journeys   => [@journeys],
				statistics => $stats
			}
		},
		any => {
			template   => 'history_by_year',
			journeys   => [@journeys],
			year       => $year,
			statistics => $stats
		}
	);

}

sub monthly_history {
	my ($self) = @_;
	my $year   = $self->stash('year');
	my $month  = $self->stash('month');
	my $cancelled = $self->param('cancelled') ? 1 : 0;
	my @journeys;
	my $stats;
	my @months
@@ -285,11 +330,9 @@ sub monthly_history {
		qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember)
	  );

	if ( $cancelled
		or
		not( $year =~ m{ ^ [0-9]{4} $ }x and $month =~ m{ ^ [0-9]{1,2} $ }x ) )
	if ( not( $year =~ m{ ^ [0-9]{4} $ }x and $month =~ m{ ^ [0-9]{1,2} $ }x ) )
	{
		@journeys = $self->get_user_travels( cancelled => $cancelled );
		@journeys = $self->get_user_travels;
	}
	else {
		my $interval_start = DateTime->new(
@@ -320,7 +363,7 @@ sub monthly_history {
			}
		},
		any => {
			template   => 'history',
			template   => 'history_by_month',
			journeys   => [@journeys],
			year       => $year,
			month      => $month,
+12 −0
Original line number Diff line number Diff line
<div class="row">
	<div class="col s12">
		<ul class="pagination">
			% while ($since < $now) {
				% my $link_to = $since->strftime('%Y/%m');
				% my $class = $link_to eq $current ? 'active' : 'waves-effect';
				<li class="<%= $class %>"><a href="/history/<%= $link_to %>"><%= $since->strftime('%m.%Y') %></a></li>
				% $since->add(months => 1)->set(day => 1, hour => 0, minute => 0, second => 0);
			% }
		</ul>
	</div>
</div>
+33 −0
Original line number Diff line number Diff line
<div class="row">
	<div class="col s12">
		<table class="striped">
			<tr>
				<th scope="row">Fahrten</th>
				<td><%= $stats->{num_journeys} %></td>
			</tr>
			<tr>
				<th scope="row">Züge</th>
				<td><%= $stats->{num_trains} %></td>
			</tr>
			<tr>
				<th scope="row">Entfernung</th>
				<td>ca. <%= sprintf('%.f', $stats->{km_route}) %> km
					(Luftlinie: <%= sprintf('%.f', $stats->{km_beeline}) %> km)</td>
			</tr>
			<tr>
				<th scope="row">Fahrtzeit</th>
				<td><%= sprintf('%02d:%02d', $stats->{min_travel_real} / 60, $stats->{min_travel_real} % 60) %> Stunden
					(nach Fahrplan: <%= sprintf('%02d:%02d', $stats->{min_travel_sched} / 60, $stats->{min_travel_sched} % 60) %>)<td>
			</tr>
			<tr>
				<th scope="row">Wartezeit (nur Umstiege)</th>
				<td><%= sprintf('%02d:%02d', $stats->{min_interchange_real} / 60, $stats->{min_interchange_real} % 60) %> Stunden
			</tr>
			<tr>
				<th scope="row">Kumulierte Verspätung</th>
				<td>Bei Abfahrt: <%= sprintf('%02d:%02d', $stats->{delay_dep} / 60, $stats->{delay_dep} % 60) %> Stunden<br/>
					Bei Ankunft: <%= sprintf('%02d:%02d', $stats->{delay_arr} / 60, $stats->{delay_arr} % 60) %> Stunden</td>
			</tr>
		</table>
	</div>
</div>
+51 −0
Original line number Diff line number Diff line
<div class="row">
	<div class="col s12">
		<table class="striped">
			<thead>
				<tr>
					<th>Datum</th>
					<th>Zeit</th>
					<th>Zug</th>
					<th>Strecke</th>
				</tr>
			</thead>
			<tbody>
				% for my $travel (@{$journeys}) {
					% if ($travel->{completed}) {
						% my $detail_link = '/journey/' . current_user()->{id} . '-' . $travel->{ids}->[1];
						<tr>
							<td><%= $travel->{sched_departure}->strftime('%d.%m.%Y') %></td>
							<td>
							% 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}) {
										(<%= sprintf('%+d', ($travel->{rt_arrival}->epoch - $travel->{sched_arrival}->epoch) / 60) %>)
									% }
								% }
							% }
							<br/>
							% if (param('cancelled')) {
								%= $travel->{sched_departure}->strftime('%H:%M')
							% }
							% else {
								<%= $travel->{rt_departure}->strftime('%H:%M') %>
								% if ($travel->{sched_departure} != $travel->{rt_departure}) {
									(<%= sprintf('%+d', ($travel->{rt_departure}->epoch - $travel->{sched_departure}->epoch) / 60) %>)
								% }
							% }
							</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>
						</tr>
					% }
				% }
			</tbody>
		</table>
	</div>
</div>
Loading