From ffee7177ac26f4e79227cdf0abcd83f80f34faa4 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 7 Apr 2019 18:44:33 +0200 Subject: Refactor history template, add yearly stats --- lib/Travelynx.pm | 4 +- lib/Travelynx/Controller/Traveling.pm | 71 ++++++++++++++++++++++++++++------- 2 files changed, 60 insertions(+), 15 deletions(-) (limited to 'lib') diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 20f885b..7cab531 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -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'); diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index dee69a6..bbbc214 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -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, -- cgit v1.2.3